Difference between revisions of "Team:GO Paris-Saclay"

Line 1: Line 1:
 +
 
<html>
 
<html>
  
Line 13: Line 14:
 
</div>
 
</div>
  
<link rel="stylesheet" href="data:text/css;base64,QC13ZWJraXQta2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0ey8qISovfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7LyohKi99QC13ZWJraXQta2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDAsMCwwLC44Nyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDAsMCwwLC44Nyl9QG1lZGlhIChob3Zlcjpub25lKXsubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojZmZmfX0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6IzY3M2FiNztjYXJldC1jb2xvcjojNjIwMDNjfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmZkNzQwfS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMWM0ZTl9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTU3Zn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiM2NzNhYjc7c3Ryb2tlOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmZDc0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye21hcmdpbi10b3A6LjU0MTY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouMjVlbSAwIC43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0uMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWdyaWQtdGlsZS1mb290ZXIsLm1hdC1ncmlkLXRpbGUtaGVhZGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LS4wNjI1ZW19Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbiwubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJ7aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVke2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OXB4O3BhZGRpbmctYm90dG9tOjlweH0ubWF0LWxpc3QtaXRlbSwubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRncm91cC1sYWJlbHtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW59QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1yaXBwbGUsLm1hdC1yaXBwbGUtZWxlbWVudHtkaXNwbGF5Om5vbmV9fS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSwtd2Via2l0LXRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciwuY2RrLW92ZXJsYXktY29udGFpbmVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjg4KX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydDthbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5ne2hlaWdodDphdXRvIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MnB4IDAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ghaW1wb3J0YW50fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6IzYyMDAzY30ubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojOTYxZTY0fS5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmY2ZTQwfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojZmFmYWZhfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojOTYxZTY0fS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6IzYyMDAzY30ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZmNmU0MH0ubWF0LWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYmFkZ2UtaGlkZGVuIC5tYXQtYmFkZ2UtY29udGVudHtkaXNwbGF5Om5vbmV9Lm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNjIwMDNjO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQsLXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC42KTt0cmFuc2Zvcm06c2NhbGUoLjYpO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztwb2ludGVyLWV2ZW50czpub25lfS5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZley13ZWJraXQtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOjAgMH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMTIpfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMSl9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjEpfS5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRde2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtZmFiLm1hdC13YXJuLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0ubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjIpfS5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmFmYWZhIWltcG9ydGFudH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YmxhY2stb24td2hpdGUpey5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMwMDAhaW1wb3J0YW50fX0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOiNiMGIwYjB9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1tZWRpdW0gLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH0ubWF0LWNoZWNrYm94LWRpc2FibGVke29wYWNpdHk6LjV9Lm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6MCAwfX0ubWF0LWNoZWNrYm94Om5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7b3BhY2l0eTouNDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LC5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZS1zdGlja3ksW21hdC1mb290ZXItcm93XSxbbWF0LWhlYWRlci1yb3ddLFttYXQtcm93XSxtYXQtZm9vdGVyLXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtcm93e2JhY2tncm91bmQ6aW5oZXJpdH1tYXQtZm9vdGVyLXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtcm93LHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbCx0aC5tYXQtaGVhZGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FsZW5kYXItYXJyb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpLC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTgpfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC40KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuNCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6IzYyMDAzY30ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWRpYWxvZy1jb250YWluZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKS5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXIsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjppbmhlcml0fS5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWhpbnR7Y29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1lcnJvcntjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMjVlbTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC40MikgMCxyZ2JhKDAsMCwwLC40MikgMzMlLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNDIpIDAscmdiYSgwLDAsMCwuNDIpIDMzJSx0cmFuc3BhcmVudCAwKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjZlNDB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWxpc3QtaXRlbS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOjAgMDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbjpub3QoW2NvbG9yXSksLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZDBiM2M1fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZTBiY2QxfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjY2JjfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojOTYxZTY0fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2ZmNmU0MH0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MjAwM2N9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY2ZTQwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4yNil9Lm1hdC1zZWxlY3QtY29udGVudCwubWF0LXNlbGVjdC1wYW5lbC1kb25lLWFuaW1hdGluZ3tiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdywubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnk6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmNTcyMn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsODcsMzQsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC4xMil9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC43KSxyZ2JhKDAsMCwwLC43KSAycHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoLjAwMDFkZWcscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1ub3QtdG91Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA0LDE4OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyNCwxODgsMjA5LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7YmFja2dyb3VuZDojMzIzMjMyO2NvbG9yOiNmZmZ9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOiM5NjFlNjR9I0hRX3BhZ2UgaDJ7YmFja2dyb3VuZC1jb2xvcjojN2EyNjU5O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1zaXplOjEwMCUgYXV0b30jSFFfcGFnZSAjdG9jdGl0bGUgaDJ7YmFja2dyb3VuZC1jb2xvcjp1bnNldDtjb2xvcjp1bnNldDtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfS5heGlzLS14IC5kb21haW4sLmF4aXMtLXkgLmRvbWFpbntkaXNwbGF5Om5vbmV9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtmbGV4LWJhc2lzOjB9QGZvbnQtZmFjZXtmb250LWZhbWlseTpSb2JvdG87Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3QpO3NyYzpsb2NhbCgiUm9ib3RvIiksbG9jYWwoIlJvYm90by1SZWd1bGFyIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjYvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCJlbWJlZGRlZC1vcGVudHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzBiL1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLndvZmYpIGZvcm1hdCgid29mZiIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnR0ZikgZm9ybWF0KCJ0cnVldHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnN2ZyNSb2JvdG8pIGZvcm1hdCgic3ZnIil9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNYXRlcmlhbEljb25zLVJlZ3VsYXI7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81MS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjgvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzEvMWUvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzMvM2YvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuc3ZnI01hdGVyaWFsSWNvbnMtUmVndWxhcikgZm9ybWF0KCJzdmciKX0ubWF0ZXJpYWwtaWNvbnN7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbDtkaXJlY3Rpb246bHRyOy1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOidsaWdhJzstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9aDEsaDIsaDMsaDQsaDUsaDZ7Ym9yZGVyLWJvdHRvbTowfS5tYXQtbGlzdHtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1uZy1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCkhaW1wb3J0YW50fW5nLWxpc3QtaXRlbSAubWF0LWRpdmlkZXJ7Ym9yZGVyOjB9">
 
  
<script>var base64script = atob("IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYT1yWzBdLGM9clsxXSxsPXJbMl0scD0wLGY9W107cDxhLmxlbmd0aDtwKyspb1tpPWFbcF1dJiZmLnB1c2gob1tpXVswXSksb1tpXT0wO2ZvcihuIGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbikmJihlW25dPWNbbl0pO2ZvcihzJiZzKHIpO2YubGVuZ3RoOylmLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsbHx8W10pLHQoKX1mdW5jdGlvbiB0KCl7Zm9yKHZhciBlLHI9MDtyPHUubGVuZ3RoO3IrKyl7Zm9yKHZhciB0PXVbcl0sbj0hMCxhPTE7YTx0Lmxlbmd0aDthKyspMCE9PW9bdFthXV0mJihuPSExKTtuJiYodS5zcGxpY2Uoci0tLDEpLGU9aShpLnM9dFswXSkpfXJldHVybiBlfXZhciBuPXt9LG89ezU6MH0sdT1bXTtmdW5jdGlvbiBpKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgdD1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxpKSx0Lmw9ITAsdC5leHBvcnRzfWkuZT1mdW5jdGlvbihlKXt2YXIgcj1bXSx0PW9bZV07aWYoMCE9PXQpaWYodClyLnB1c2godFsyXSk7ZWxzZXt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3Q9b1tlXT1bcixuXX0pO3IucHVzaCh0WzJdPW4pO3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLmNoYXJzZXQ9InV0Zi04IixhLnRpbWVvdXQ9MTIwLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkucCsiIisoe31bZV18fGUpKyIuanMifShlKTt2YXIgYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCh7dHlwZToidGltZW91dCIsdGFyZ2V0OmF9KX0sMTJlNCk7ZnVuY3Rpb24gbChyKXthLm9uZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQoYyk7dmFyIHQ9b1tlXTtpZigwIT09dCl7aWYodCl7dmFyIG49ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSx1PXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmMsaT1uZXcgRXJyb3IoIkxvYWRpbmcgY2h1bmsgIitlKyIgZmFpbGVkLlxuKCIrbisiOiAiK3UrIikiKTtpLnR5cGU9bixpLnJlcXVlc3Q9dSx0WzFdKGkpfW9bZV09dm9pZCAwfX1hLm9uZXJyb3I9YS5vbmxvYWQ9bCx1LmFwcGVuZENoaWxkKGEpfXJldHVybiBQcm9taXNlLmFsbChyKX0saS5tPWUsaS5jPW4saS5kPWZ1bmN0aW9uKGUscix0KXtpLm8oZSxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnR9KX0saS5yPWZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0saS5uPWZ1bmN0aW9uKGUpe3ZhciByPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBpLmQociwiYSIscikscn0saS5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxpLnA9IiIsaS5vZT1mdW5jdGlvbihlKXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9O3ZhciBhPXdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10sYz1hLnB1c2guYmluZChhKTthLnB1c2g9cixhPWEuc2xpY2UoKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylyKGFbbF0pO3ZhciBzPWM7dCgpfShbXSk7KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s4XSx7IityTHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIikuZG9jdW1lbnQ7ZS5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSwiMC9SNCI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sIjBUV3AiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGUpe3ZhciB0PWUucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbihlKXt0JiZ0Lm1hcmsmJnQubWFyayhlKX1mdW5jdGlvbiByKGUsbil7dCYmdC5tZWFzdXJlJiZ0Lm1lYXN1cmUoZSxuKX1pZihuKCJab25lIiksZS5ab25lKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTt2YXIgbyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3RoaXMuX3Byb3BlcnRpZXM9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uYW1lPXQ/dC5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz10JiZ0LnByb3BlcnRpZXN8fHt9LHRoaXMuX3pvbmVEZWxlZ2F0ZT1uZXcgYyh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsdCl9cmV0dXJuIHQuYXNzZXJ0Wm9uZVBhdGNoZWQ9ZnVuY3Rpb24oKXtpZihlLlByb21pc2UhPT1PLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5jdXJyZW50O2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjdXJyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihvLGkpe2lmKE8uaGFzT3duUHJvcGVydHkobykpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK28pO2lmKCFlWyJfX1pvbmVfZGlzYWJsZV8iK29dKXt2YXIgYT0iWm9uZToiK287bihhKSxPW29dPWkoZSx0LFMpLHIoYSxhKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRab25lV2l0aChlKTtpZih0KXJldHVybiB0Ll9wcm9wZXJ0aWVzW2VdfSx0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0Oyl7aWYodC5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdDt0PXQuX3BhcmVudH1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLGUpfSx0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK2UpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxlLHQpLHI9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsdCl9fSx0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj1udWxsKSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLGUsdCxuLHIpfWZpbmFsbHl7RD1ELnBhcmVudH19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09ciYmKHI9bnVsbCksRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsZSx0LG4scil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtEPUQucGFyZW50fX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihlLHQsbil7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIHJ1biBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKGUuc3RhdGUhPT15fHxlLnR5cGUhPT14KXt2YXIgcj1lLnN0YXRlIT1rO3ImJmUuX3RyYW5zaXRpb25UbyhrLG0pLGUucnVuQ291bnQrKzt2YXIgbz1qO2o9ZSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtlLnR5cGU9PUUmJmUuZGF0YSYmIWUuZGF0YS5pc1BlcmlvZGljJiYoZS5jYW5jZWxGbj1udWxsKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsZSx0LG4pfWNhdGNoKGUpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGUpKXRocm93IGV9fWZpbmFsbHl7ZS5zdGF0ZSE9PXkmJmUuc3RhdGUhPT1UJiYoZS50eXBlPT14fHxlLmRhdGEmJmUuZGF0YS5pc1BlcmlvZGljP3ImJmUuX3RyYW5zaXRpb25UbyhtLGspOihlLnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLHImJmUuX3RyYW5zaXRpb25Ubyh5LGsseSkpKSxEPUQucGFyZW50LGo9b319fSx0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lJiZlLnpvbmUhPT10aGlzKWZvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZS56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrZS56b25lLm5hbWUpO3Q9dC5wYXJlbnR9ZS5fdHJhbnNpdGlvblRvKF8seSk7dmFyIG49W107ZS5fem9uZURlbGVnYXRlcz1uLGUuX3pvbmU9dGhpczt0cnl7ZT10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsXyx5KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0KSx0fXJldHVybiBlLl96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsMSksZS5zdGF0ZT09XyYmZS5fdHJhbnNpdGlvblRvKG0sXyksZX0sdC5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHcsZSx0LG4scixudWxsKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KEUsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHgsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2UuX3RyYW5zaXRpb25UbyhiLG0sayk7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsYiksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdCksdH1yZXR1cm4gdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLGUuX3RyYW5zaXRpb25Ubyh5LGIpLGUucnVuQ291bnQ9MCxlfSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fem9uZURlbGVnYXRlczstMT09dCYmKGUuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXS5fdXBkYXRlVGFza0NvdW50KGUudHlwZSx0KX0sdC5fX3N5bWJvbF9fPXosdH0oKSxhPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5oYXNUYXNrKG4scil9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLnNjaGVkdWxlVGFzayhuLHIpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3JldHVybiBlLmludm9rZVRhc2sobixyLG8saSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5jYW5jZWxUYXNrKG4scil9fSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1lLHRoaXMuX3BhcmVudERlbGVnYXRlPXQsdGhpcy5fZm9ya1pTPW4mJihuJiZuLm9uRm9yaz9uOnQuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9biYmKG4ub25Gb3JrP3Q6dC5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1uJiYobi5vbkZvcms/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW50ZXJjZXB0WlM9biYmKG4ub25JbnRlcmNlcHQ/bjp0Ll9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1uJiYobi5vbkludGVyY2VwdD90OnQuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPW4mJihuLm9uSW50ZXJjZXB0P3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246dC5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/dDp0Ll9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPW4mJihuLm9uSGFuZGxlRXJyb3I/bjp0Ll9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9biYmKG4ub25IYW5kbGVFcnJvcj90OnQuX2hhbmRsZUVycm9yRGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1uJiYobi5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246dC5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/dDp0Ll9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VUYXNrWlM9biYmKG4ub25JbnZva2VUYXNrP246dC5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1uJiYobi5vbkludm9rZVRhc2s/dDp0Ll9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPW4mJihuLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9biYmKG4ub25DYW5jZWxUYXNrP246dC5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1uJiYobi5vbkNhbmNlbFRhc2s/dDp0Ll9jYW5jZWxUYXNrRGxndCksdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPW4mJihuLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIgcj1uJiZuLm9uSGFzVGFzazsocnx8dCYmdC5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1yP246YSx0aGlzLl9oYXNUYXNrRGxndD10LHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9ZSxuLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9YSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PXQsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1hLHRoaXMuX2ludm9rZVRhc2tEbGd0PXQsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksbi5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9YSx0aGlzLl9jYW5jZWxUYXNrRGxndD10LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsZSx0KTpuZXcgaShlLHQpfSxlLnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGUsdCxuKTp0fSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxlLHQsbixyLG8pOnQuYXBwbHkobixyKX0sZS5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLGUsdCl9LGUucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuPXQ7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZuLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKG49dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxlLHQpKXx8KG49dCk7ZWxzZSBpZih0LnNjaGVkdWxlRm4pdC5zY2hlZHVsZUZuKHQpO2Vsc2V7aWYodC50eXBlIT13KXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7dih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaW52b2tlVGFzaz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGUsdCxuLHIpOnQuY2FsbGJhY2suYXBwbHkobixyKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHRoaXMuX2NhbmNlbFRhc2taUyluPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGUsdCk7ZWxzZXtpZighdC5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO249dC5jYW5jZWxGbih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaGFzVGFzaz1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gdGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxlLHQpfWNhdGNoKHQpe3RoaXMuaGFuZGxlRXJyb3IoZSx0KX19LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90YXNrQ291bnRzLHI9bltlXSxvPW5bZV09cit0O2lmKG88MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1yJiYwIT1vfHx0aGlzLmhhc1Rhc2sodGhpcy56b25lLHttaWNyb1Rhc2s6bi5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6bi5tYWNyb1Rhc2s+MCxldmVudFRhc2s6bi5ldmVudFRhc2s+MCxjaGFuZ2U6ZX0pfSxlfSgpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4scixvLGksYSxjKXt0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1yLHRoaXMuZGF0YT1pLHRoaXMuc2NoZWR1bGVGbj1hLHRoaXMuY2FuY2VsRm49Yyx0aGlzLmNhbGxiYWNrPW87dmFyIHU9dGhpczt0aGlzLmludm9rZT1uPT09eCYmaSYmaS51c2VHP3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiB0Lmludm9rZVRhc2suY2FsbChlLHUsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gdC5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuKXtlfHwoZT10aGlzKSxQKys7dHJ5e3JldHVybiBlLnJ1bkNvdW50KyssZS56b25lLnJ1blRhc2soZSx0LG4pfWZpbmFsbHl7MT09UCYmZCgpLFAtLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKHksXyl9LHQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuX3N0YXRlIT09dCYmdGhpcy5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrIiAnIit0aGlzLnNvdXJjZSsiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciK2UrIicsIGV4cGVjdGluZyBzdGF0ZSAnIit0KyInIisobj8iIG9yICciK24rIiciOiIiKSsiLCB3YXMgJyIrdGhpcy5fc3RhdGUrIicuIik7dGhpcy5fc3RhdGU9ZSxlPT15JiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ2b2lkIDAhPT10aGlzLmRhdGEuaGFuZGxlSWQ/dGhpcy5kYXRhLmhhbmRsZUlkOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LHR9KCkscz16KCJzZXRUaW1lb3V0IiksbD16KCJQcm9taXNlIiksZj16KCJ0aGVuIikscD1bXSxoPSExO2Z1bmN0aW9uIHYodCl7MD09PVAmJjA9PT1wLmxlbmd0aCYmKG98fGVbbF0mJihvPWVbbF0ucmVzb2x2ZSgwKSksbz9vW2ZdKGQpOmVbc10oZCwwKSksdCYmcC5wdXNoKHQpfWZ1bmN0aW9uIGQoKXtpZighaCl7Zm9yKGg9ITA7cC5sZW5ndGg7KXt2YXIgZT1wO3A9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaChlKXtTLm9uVW5oYW5kbGVkRXJyb3IoZSl9fX1TLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBnPXtuYW1lOiJOTyBaT05FIn0seT0ibm90U2NoZWR1bGVkIixfPSJzY2hlZHVsaW5nIixtPSJzY2hlZHVsZWQiLGs9InJ1bm5pbmciLGI9ImNhbmNlbGluZyIsVD0idW5rbm93biIsdz0ibWljcm9UYXNrIixFPSJtYWNyb1Rhc2siLHg9ImV2ZW50VGFzayIsTz17fSxTPXtzeW1ib2w6eixjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIER9LG9uVW5oYW5kbGVkRXJyb3I6WixtaWNyb3Rhc2tEcmFpbkRvbmU6WixzY2hlZHVsZU1pY3JvVGFzazp2LHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWlbeigiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpaLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIFp9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sc2V0TmF0aXZlUHJvbWlzZTpmdW5jdGlvbihlKXtlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5yZXNvbHZlJiYobz1lLnJlc29sdmUoMCkpfX0sRD17cGFyZW50Om51bGwsem9uZTpuZXcgaShudWxsLG51bGwpfSxqPW51bGwsUD0wO2Z1bmN0aW9uIFooKXt9ZnVuY3Rpb24geihlKXtyZXR1cm4iX196b25lX3N5bWJvbF9fIitlfXIoIlpvbmUiLCJab25lIiksZS5ab25lPWl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsKSxab25lLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1PYmplY3QuZGVmaW5lUHJvcGVydHksaT1uLnN5bWJvbCxhPVtdLGM9aSgiUHJvbWlzZSIpLHU9aSgidGhlbiIpLHM9Il9fY3JlYXRpb25UcmFjZV9fIjtuLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24oZSl7aWYobi5zaG93VW5jYXVnaHRFcnJvcigpKXt2YXIgdD1lJiZlLnJlamVjdGlvbjt0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLHQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6dCwiOyBab25lOiIsZS56b25lLm5hbWUsIjsgVGFzazoiLGUudGFzayYmZS50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLHQsdCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKGUpfX0sbi5taWNyb3Rhc2tEcmFpbkRvbmU9ZnVuY3Rpb24oKXtmb3IoO2EubGVuZ3RoOylmb3IodmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT1hLnNoaWZ0KCk7dHJ5e2Uuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWNhdGNoKGUpe2YoZSl9fTthLmxlbmd0aDspZSgpfTt2YXIgbD1pKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIGYoZSl7bi5vblVuaGFuZGxlZEVycm9yKGUpO3RyeXt2YXIgcj10W2xdO3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLmNhbGwodGhpcyxlKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUudGhlbn1mdW5jdGlvbiBoKGUpe3JldHVybiBlfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIE0ucmVqZWN0KGUpfXZhciBkPWkoInN0YXRlIiksZz1pKCJ2YWx1ZSIpLHk9aSgiZmluYWxseSIpLF89aSgicGFyZW50UHJvbWlzZVZhbHVlIiksbT1pKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxrPSJQcm9taXNlLnRoZW4iLGI9bnVsbCxUPSEwLHc9ITEsRT0wO2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dHJ5e2ooZSx0LG4pfWNhdGNoKHQpe2ooZSwhMSx0KX19fXZhciBPPWZ1bmN0aW9uKCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxTPSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixEPWkoImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBqKGUscixpKXt2YXIgYyx1PU8oKTtpZihlPT09aSl0aHJvdyBuZXcgVHlwZUVycm9yKFMpO2lmKGVbZF09PT1iKXt2YXIgbD1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIGkmJiJmdW5jdGlvbiIhPXR5cGVvZiBpfHwobD1pJiZpLnRoZW4pfWNhdGNoKHQpe3JldHVybiB1KGZ1bmN0aW9uKCl7aihlLCExLHQpfSkoKSxlfWlmKHIhPT13JiZpIGluc3RhbmNlb2YgTSYmaS5oYXNPd25Qcm9wZXJ0eShkKSYmaS5oYXNPd25Qcm9wZXJ0eShnKSYmaVtkXSE9PWIpWihpKSxqKGUsaVtkXSxpW2ddKTtlbHNlIGlmKHIhPT13JiYiZnVuY3Rpb24iPT10eXBlb2YgbCl0cnl7bC5jYWxsKGksdSh4KGUscikpLHUoeChlLCExKSkpfWNhdGNoKHQpe3UoZnVuY3Rpb24oKXtqKGUsITEsdCl9KSgpfWVsc2V7ZVtkXT1yO3ZhciBmPWVbZ107aWYoZVtnXT1pLGVbeV09PT15JiZyPT09VCYmKGVbZF09ZVttXSxlW2ddPWVbX10pLHI9PT13JiZpIGluc3RhbmNlb2YgRXJyb3Ipe3ZhciBwPXQuY3VycmVudFRhc2smJnQuY3VycmVudFRhc2suZGF0YSYmdC5jdXJyZW50VGFzay5kYXRhW3NdO3AmJm8oaSxELHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpwfSl9Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDspeihlLGZbaCsrXSxmW2grK10sZltoKytdLGZbaCsrXSk7aWYoMD09Zi5sZW5ndGgmJnI9PXcpe2VbZF09RTt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrKChjPWkpJiZjLnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oYy5jb25zdHJ1Y3RvciYmYy5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeShjKTpjP2MudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpKyhpJiZpLnN0YWNrPyJcbiIraS5zdGFjazoiIikpfWNhdGNoKHIpe3ZhciB2PXI7di5yZWplY3Rpb249aSx2LnByb21pc2U9ZSx2LnpvbmU9dC5jdXJyZW50LHYudGFzaz10LmN1cnJlbnRUYXNrLGEucHVzaCh2KSxuLnNjaGVkdWxlTWljcm9UYXNrKCl9fX19cmV0dXJuIGV9dmFyIFA9aSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBaKGUpe2lmKGVbZF09PT1FKXt0cnl7dmFyIG49dFtQXTtuJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5jYWxsKHRoaXMse3JlamVjdGlvbjplW2ddLHByb21pc2U6ZX0pfWNhdGNoKGUpe31lW2RdPXc7Zm9yKHZhciByPTA7cjxhLmxlbmd0aDtyKyspZT09PWFbcl0ucHJvbWlzZSYmYS5zcGxpY2UociwxKX19ZnVuY3Rpb24geihlLHQsbixyLG8pe1ooZSk7dmFyIGk9ZVtkXSxhPWk/ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpoOiJmdW5jdGlvbiI9PXR5cGVvZiBvP286djt0LnNjaGVkdWxlTWljcm9UYXNrKGssZnVuY3Rpb24oKXt0cnl7dmFyIHI9ZVtnXSxvPW4mJnk9PT1uW3ldO28mJihuW19dPXIsblttXT1pKTt2YXIgYz10LnJ1bihhLHZvaWQgMCxvJiZhIT09diYmYSE9PWg/W106W3JdKTtqKG4sITAsYyl9Y2F0Y2goZSl7aihuLCExLGUpfX0sbil9dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7dGhpc1tkXT1iLHRoaXNbZ109W107dHJ5e3QmJnQoeCh0aGlzLFQpLHgodGhpcyx3KSl9Y2F0Y2goZSl7aih0aGlzLCExLGUpfX1yZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSxlLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksVCxlKX0sZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksdyxlKX0sZS5yYWNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1uZXcgdGhpcyhmdW5jdGlvbihlLHIpe3Q9ZSxuPXJ9KTtmdW5jdGlvbiBvKGUpe3ImJihyPXQoZSkpfWZ1bmN0aW9uIGkoZSl7ciYmKHI9bihlKSl9Zm9yKHZhciBhPTAsYz1lO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO3AodSl8fCh1PXRoaXMucmVzb2x2ZSh1KSksdS50aGVuKG8saSl9cmV0dXJuIHJ9LGUuYWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9bmV3IHRoaXMoZnVuY3Rpb24oZSxyKXt0PWUsbj1yfSksbz0wLGk9W10sYT0wLGM9ZTthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtwKHUpfHwodT10aGlzLnJlc29sdmUodSkpLHUudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7aVtlXT1uLC0tb3x8dChpKX19KG8pLG4pLG8rK31yZXR1cm4gb3x8dChpKSxyfSxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsbil7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCksbz10LmN1cnJlbnQ7cmV0dXJuIHRoaXNbZF09PWI/dGhpc1tnXS5wdXNoKG8scixlLG4pOnoodGhpcyxvLHIsZSxuKSxyfSxlLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LGUucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCk7blt5XT15O3ZhciByPXQuY3VycmVudDtyZXR1cm4gdGhpc1tkXT09Yj90aGlzW2ddLnB1c2gocixuLGUsZSk6eih0aGlzLHIsbixlLGUpLG59LGV9KCk7TS5yZXNvbHZlPU0ucmVzb2x2ZSxNLnJlamVjdD1NLnJlamVjdCxNLnJhY2U9TS5yYWNlLE0uYWxsPU0uYWxsO3ZhciBDPWVbY109ZS5Qcm9taXNlLFI9dC5fX3N5bWJvbF9fKCJab25lQXdhcmVQcm9taXNlIiksST1yKGUsIlByb21pc2UiKTtJJiYhSS5jb25maWd1cmFibGV8fChJJiZkZWxldGUgSS53cml0YWJsZSxJJiZkZWxldGUgSS52YWx1ZSxJfHwoST17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KSxJLmdldD1mdW5jdGlvbigpe3JldHVybiBlW1JdP2VbUl06ZVtjXX0sSS5zZXQ9ZnVuY3Rpb24odCl7dD09PU0/ZVtSXT10OihlW2NdPXQsdC5wcm90b3R5cGVbdV18fHEodCksbi5zZXROYXRpdmVQcm9taXNlKHQpKX0sbyhlLCJQcm9taXNlIixJKSksZS5Qcm9taXNlPU07dmFyIEYsTD1pKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHEoZSl7dmFyIHQ9ZS5wcm90b3R5cGUsbj1yKHQsInRoZW4iKTtpZighbnx8ITEhPT1uLndyaXRhYmxlJiZuLmNvbmZpZ3VyYWJsZSl7dmFyIG89dC50aGVuO3RbdV09byxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IE0oZnVuY3Rpb24oZSx0KXtvLmNhbGwobixlLHQpfSkudGhlbihlLHQpfSxlW0xdPSEwfX1pZihDKXtxKEMpO3ZhciBBPWUuZmV0Y2g7ImZ1bmN0aW9uIj09dHlwZW9mIEEmJihlLmZldGNoPShGPUEsZnVuY3Rpb24oKXt2YXIgZT1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihlIGluc3RhbmNlb2YgTSlyZXR1cm4gZTt2YXIgdD1lLmNvbnN0cnVjdG9yO3JldHVybiB0W0xdfHxxKHQpLGV9KSl9cmV0dXJuIFByb21pc2VbdC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09YSxNfSk7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixyPU9iamVjdC5jcmVhdGUsbz1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT0iYWRkRXZlbnRMaXN0ZW5lciIsYT0icmVtb3ZlRXZlbnRMaXN0ZW5lciIsYz1ab25lLl9fc3ltYm9sX18oaSksdT1ab25lLl9fc3ltYm9sX18oYSkscz0idHJ1ZSIsbD0iZmFsc2UiLGY9Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gcChlLHQpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scixvKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGUsdCxuLHIsbyl9dmFyIHY9Wm9uZS5fX3N5bWJvbF9fLGQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3csZz1kP3dpbmRvdzp2b2lkIDAseT1kJiZnfHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCxfPSJyZW1vdmVBdHRyaWJ1dGUiLG09W251bGxdO2Z1bmN0aW9uIGsoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmKGVbbl09cChlW25dLHQrIl8iK24pKTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe3JldHVybiFlfHwhMSE9PWUud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0JiZ2b2lkIDA9PT1lLnNldCl9dmFyIFQ9InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHc9ISgibnciaW4geSkmJnZvaWQgMCE9PXkucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpLEU9IXcmJiFUJiYhKCFkfHwhZy5IVE1MRWxlbWVudCkseD12b2lkIDAhPT15LnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSYmIVQmJiEoIWR8fCFnLkhUTUxFbGVtZW50KSxPPXt9LFM9ZnVuY3Rpb24oZSl7aWYoZT1lfHx5LmV2ZW50KXt2YXIgdD1PW2UudHlwZV07dHx8KHQ9T1tlLnR5cGVdPXYoIk9OX1BST1BFUlRZIitlLnR5cGUpKTt2YXIgbj0odGhpc3x8ZS50YXJnZXR8fHkpW3RdLHI9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMD09cnx8cnx8ZS5wcmV2ZW50RGVmYXVsdCgpLHJ9fTtmdW5jdGlvbiBEKG4scixvKXt2YXIgaT1lKG4scik7aWYoIWkmJm8mJmUobyxyKSYmKGk9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksaSYmaS5jb25maWd1cmFibGUpe2RlbGV0ZSBpLndyaXRhYmxlLGRlbGV0ZSBpLnZhbHVlO3ZhciBhPWkuZ2V0LGM9aS5zZXQsdT1yLnN1YnN0cigyKSxzPU9bdV07c3x8KHM9T1t1XT12KCJPTl9QUk9QRVJUWSIrdSkpLGkuc2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dHx8biE9PXl8fCh0PXkpLHQmJih0W3NdJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIodSxTKSxjJiZjLmFwcGx5KHQsbSksImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRbc109ZSx0LmFkZEV2ZW50TGlzdGVuZXIodSxTLCExKSk6dFtzXT1udWxsKX0saS5nZXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGV8fG4hPT15fHwoZT15KSwhZSlyZXR1cm4gbnVsbDt2YXIgdD1lW3NdO2lmKHQpcmV0dXJuIHQ7aWYoYSl7dmFyIG89YSYmYS5jYWxsKHRoaXMpO2lmKG8pcmV0dXJuIGkuc2V0LmNhbGwodGhpcyxvKSwiZnVuY3Rpb24iPT10eXBlb2YgZVtfXSYmZS5yZW1vdmVBdHRyaWJ1dGUociksb31yZXR1cm4gbnVsbH0sdChuLHIsaSl9fWZ1bmN0aW9uIGooZSx0LG4pe2lmKHQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspRChlLCJvbiIrdFtyXSxuKTtlbHNle3ZhciBvPVtdO2Zvcih2YXIgaSBpbiBlKSJvbiI9PWkuc3Vic3RyKDAsMikmJm8ucHVzaChpKTtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKylEKGUsb1thXSxuKX19dmFyIFA9digib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIFooZSl7dmFyIG49eVtlXTtpZihuKXt5W3YoZSldPW4seVtlXT1mdW5jdGlvbigpe3ZhciB0PWsoYXJndW1lbnRzLGUpO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnRoaXNbUF09bmV3IG47YnJlYWs7Y2FzZSAxOnRoaXNbUF09bmV3IG4odFswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbUF09bmV3IG4odFswXSx0WzFdKTticmVhaztjYXNlIDM6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0sdFsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbUF09bmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sTSh5W2VdLG4pO3ZhciByLG89bmV3IG4oZnVuY3Rpb24oKXt9KTtmb3IociBpbiBvKSJYTUxIdHRwUmVxdWVzdCI9PT1lJiYicmVzcG9uc2VCbG9iIj09PXJ8fGZ1bmN0aW9uKG4peyJmdW5jdGlvbiI9PXR5cGVvZiBvW25dP3lbZV0ucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbUF1bbl0uYXBwbHkodGhpc1tQXSxhcmd1bWVudHMpfTp0KHlbZV0ucHJvdG90eXBlLG4se3NldDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdD8odGhpc1tQXVtuXT1wKHQsZSsiLiIrbiksTSh0aGlzW1BdW25dLHQpKTp0aGlzW1BdW25dPXR9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1BdW25dfX0pfShyKTtmb3IociBpbiBuKSJwcm90b3R5cGUiIT09ciYmbi5oYXNPd25Qcm9wZXJ0eShyKSYmKHlbZV1bcl09bltyXSl9fWZ1bmN0aW9uIHoodCxyLG8pe2Zvcih2YXIgaT10O2kmJiFpLmhhc093blByb3BlcnR5KHIpOylpPW4oaSk7IWkmJnRbcl0mJihpPXQpO3ZhciBhLGM9dihyKTtpZihpJiYhKGE9aVtjXSkmJihhPWlbY109aVtyXSxiKGkmJmUoaSxyKSkpKXt2YXIgdT1vKGEsYyxyKTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyxhcmd1bWVudHMpfSxNKGlbcl0sYSl9cmV0dXJuIGF9ZnVuY3Rpb24gTShlLHQpe2VbdigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT10fXZhciBDPSExLFI9ITE7ZnVuY3Rpb24gSSgpe2lmKEMpcmV0dXJuIFI7Qz0hMDt0cnl7dmFyIGU9Zy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybi0xPT09ZS5pbmRleE9mKCJNU0lFICIpJiYtMT09PWUuaW5kZXhPZigiVHJpZGVudC8iKSYmLTE9PT1lLmluZGV4T2YoIkVkZ2UvIil8fChSPSEwKSxSfWNhdGNoKGUpe319Wm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbihlKXt2YXIgdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbj12KCJPcmlnaW5hbERlbGVnYXRlIikscj12KCJQcm9taXNlIiksbz12KCJFcnJvciIpLGk9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIGk9dGhpc1tuXTtpZihpKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3QuYXBwbHkodGhpc1tuXSxhcmd1bWVudHMpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIGE9ZVtyXTtpZihhKXJldHVybiB0LmFwcGx5KGEsYXJndW1lbnRzKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBjPWVbb107aWYoYylyZXR1cm4gdC5hcHBseShjLGFyZ3VtZW50cyl9fXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aVtuXT10LEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1pO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIEY9e3VzZUc6ITB9LEw9e30scT17fSxBPS9eX196b25lX3N5bWJvbF9fKFx3KykodHJ1ZXxmYWxzZSkkLyxIPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiO2Z1bmN0aW9uIE4oZSx0LHIpe3ZhciBvPXImJnIuYWRkfHxpLGM9ciYmci5ybXx8YSx1PXImJnIubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLHA9ciYmci5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsaD12KG8pLGQ9Ii4iK28rIjoiLGc9InByZXBlbmRMaXN0ZW5lciIseT0iLiIrZysiOiIsXz1mdW5jdGlvbihlLHQsbil7aWYoIWUuaXNSZW1vdmVkKXt2YXIgcj1lLmNhbGxiYWNrOyJvYmplY3QiPT10eXBlb2YgciYmci5oYW5kbGVFdmVudCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaGFuZGxlRXZlbnQoZSl9LGUub3JpZ2luYWxEZWxlZ2F0ZT1yKSxlLmludm9rZShlLHQsW25dKTt2YXIgbz1lLm9wdGlvbnM7byYmIm9iamVjdCI9PXR5cGVvZiBvJiZvLm9uY2UmJnRbY10uY2FsbCh0LG4udHlwZSxlLm9yaWdpbmFsRGVsZWdhdGU/ZS5vcmlnaW5hbERlbGVnYXRlOmUuY2FsbGJhY2ssbyl9fSxtPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8ZS5ldmVudCl7dmFyIG49dGhpc3x8dC50YXJnZXR8fGUscj1uW0xbdC50eXBlXVtsXV07aWYocilpZigxPT09ci5sZW5ndGgpXyhyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoJiYoIXR8fCEwIT09dFtIXSk7aSsrKV8ob1tpXSxuLHQpfX0saz1mdW5jdGlvbih0KXtpZih0PXR8fGUuZXZlbnQpe3ZhciBuPXRoaXN8fHQudGFyZ2V0fHxlLHI9bltMW3QudHlwZV1bc11dO2lmKHIpaWYoMT09PXIubGVuZ3RoKV8oclswXSxuLHQpO2Vsc2UgZm9yKHZhciBvPXIuc2xpY2UoKSxpPTA7aTxvLmxlbmd0aCYmKCF0fHwhMCE9PXRbSF0pO2krKylfKG9baV0sbix0KX19O2Z1bmN0aW9uIGIodCxyKXtpZighdClyZXR1cm4hMTt2YXIgaT0hMDtyJiZ2b2lkIDAhPT1yLnVzZUcmJihpPXIudXNlRyk7dmFyIGE9ciYmci52aCxfPSEwO3ImJnZvaWQgMCE9PXIuY2hrRHVwJiYoXz1yLmNoa0R1cCk7dmFyIGI9ITE7ciYmdm9pZCAwIT09ci5ydCYmKGI9ci5ydCk7Zm9yKHZhciBUPXQ7VCYmIVQuaGFzT3duUHJvcGVydHkobyk7KVQ9bihUKTtpZighVCYmdFtvXSYmKFQ9dCksIVQpcmV0dXJuITE7aWYoVFtoXSlyZXR1cm4hMTt2YXIgdyxFPXt9LHg9VFtoXT1UW29dLE89VFt2KGMpXT1UW2NdLFM9VFt2KHUpXT1UW3VdLEQ9VFt2KHApXT1UW3BdO3ImJnIucHJlcGVuZCYmKHc9VFt2KHIucHJlcGVuZCldPVRbci5wcmVwZW5kXSk7dmFyIGo9aT9mdW5jdGlvbigpe2lmKCFFLmlzRXhpc3RpbmcpcmV0dXJuIHguY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxFLmNhcHR1cmU/azptLEUub3B0aW9ucyl9OmZ1bmN0aW9uKGUpe3JldHVybiB4LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsZS5pbnZva2UsRS5vcHRpb25zKX0sUD1pP2Z1bmN0aW9uKGUpe2lmKCFlLmlzUmVtb3ZlZCl7dmFyIHQ9TFtlLmV2ZW50TmFtZV0sbj12b2lkIDA7dCYmKG49dFtlLmNhcHR1cmU/czpsXSk7dmFyIHI9biYmZS50YXJnZXRbbl07aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZihyW29dPT09ZSl7ci5zcGxpY2UobywxKSxlLmlzUmVtb3ZlZD0hMCwwPT09ci5sZW5ndGgmJihlLmFsbFJlbW92ZWQ9ITAsZS50YXJnZXRbbl09bnVsbCk7YnJlYWt9fWlmKGUuYWxsUmVtb3ZlZClyZXR1cm4gTy5jYWxsKGUudGFyZ2V0LGUuZXZlbnROYW1lLGUuY2FwdHVyZT9rOm0sZS5vcHRpb25zKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE8uY2FsbChlLnRhcmdldCxlLmV2ZW50TmFtZSxlLmludm9rZSxlLm9wdGlvbnMpfSxaPXImJnIuZGlmZj9yLmRpZmY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgdDtyZXR1cm4iZnVuY3Rpb24iPT09biYmZS5jYWxsYmFjaz09PXR8fCJvYmplY3QiPT09biYmZS5vcmlnaW5hbERlbGVnYXRlPT09dH0sej1ab25lW1pvbmUuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSxDPWZ1bmN0aW9uKHQsbixyLG8sYyx1KXtyZXR1cm4gdm9pZCAwPT09YyYmKGM9ITEpLHZvaWQgMD09PXUmJih1PSExKSxmdW5jdGlvbigpe3ZhciBwPXRoaXN8fGUsaD1hcmd1bWVudHNbMV07aWYoIWgpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB2PSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoKXtpZighaC5oYW5kbGVFdmVudClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dj0hMH1pZighYXx8YSh0LGgscCxhcmd1bWVudHMpKXt2YXIgZCxnPWFyZ3VtZW50c1swXSx5PWFyZ3VtZW50c1syXTtpZih6KWZvcih2YXIgbT0wO208ei5sZW5ndGg7bSsrKWlmKGc9PT16W21dKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaz0hMTt2b2lkIDA9PT15P2Q9ITE6ITA9PT15P2Q9ITA6ITE9PT15P2Q9ITE6KGQ9ISF5JiYhIXkuY2FwdHVyZSxrPSEheSYmISF5Lm9uY2UpO3ZhciBiLFQ9Wm9uZS5jdXJyZW50LHc9TFtnXTtpZih3KWI9d1tkP3M6bF07ZWxzZXt2YXIgeD1mKyhnK2wpLE89ZisoZytzKTtMW2ddPXt9LExbZ11bbF09eCxMW2ddW3NdPU8sYj1kP086eH12YXIgUyxEPXBbYl0saj0hMTtpZihEKXtpZihqPSEwLF8pZm9yKG09MDttPEQubGVuZ3RoO20rKylpZihaKERbbV0saCkpcmV0dXJufWVsc2UgRD1wW2JdPVtdO3ZhciBQPXAuY29uc3RydWN0b3IubmFtZSxNPXFbUF07TSYmKFM9TVtnXSksU3x8KFM9UCtuK2cpLEUub3B0aW9ucz15LGsmJihFLm9wdGlvbnMub25jZT0hMSksRS50YXJnZXQ9cCxFLmNhcHR1cmU9ZCxFLmV2ZW50TmFtZT1nLEUuaXNFeGlzdGluZz1qO3ZhciBDPWk/RjpudWxsO0MmJihDLnRhc2tEYXRhPUUpO3ZhciBSPVQuc2NoZWR1bGVFdmVudFRhc2soUyxoLEMscixvKTtyZXR1cm4gRS50YXJnZXQ9bnVsbCxDJiYoQy50YXNrRGF0YT1udWxsKSxrJiYoeS5vbmNlPSEwKSxSLm9wdGlvbnM9eSxSLnRhcmdldD1wLFIuY2FwdHVyZT1kLFIuZXZlbnROYW1lPWcsdiYmKFIub3JpZ2luYWxEZWxlZ2F0ZT1oKSx1P0QudW5zaGlmdChSKTpELnB1c2goUiksYz9wOnZvaWQgMH19fTtyZXR1cm4gVFtvXT1DKHgsZCxqLFAsYiksdyYmKFRbZ109Qyh3LHksZnVuY3Rpb24oZSl7cmV0dXJuIHcuY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxlLmludm9rZSxFLm9wdGlvbnMpfSxQLGIsITApKSxUW2NdPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzfHxlLHI9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzJdO3Q9dm9pZCAwIT09byYmKCEwPT09b3x8ITEhPT1vJiYhIW8mJiEhby5jYXB0dXJlKTt2YXIgaT1hcmd1bWVudHNbMV07aWYoIWkpcmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFhfHxhKE8saSxuLGFyZ3VtZW50cykpe3ZhciBjLHU9TFtyXTt1JiYoYz11W3Q/czpsXSk7dmFyIGY9YyYmbltjXTtpZihmKWZvcih2YXIgcD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgaD1mW3BdO2lmKFooaCxpKSlyZXR1cm4gZi5zcGxpY2UocCwxKSxoLmlzUmVtb3ZlZD0hMCwwPT09Zi5sZW5ndGgmJihoLmFsbFJlbW92ZWQ9ITAsbltjXT1udWxsKSxoLnpvbmUuY2FuY2VsVGFzayhoKSxiP246dm9pZCAwfXJldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFRbdV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj1XKHRoaXN8fGUsYXJndW1lbnRzWzBdKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07dC5wdXNoKG8ub3JpZ2luYWxEZWxlZ2F0ZT9vLm9yaWdpbmFsRGVsZWdhdGU6by5jYWxsYmFjayl9cmV0dXJuIHR9LFRbcF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzfHxlLG49YXJndW1lbnRzWzBdO2lmKG4pe3ZhciByPUxbbl07aWYocil7dmFyIG89dFtyW2xdXSxpPXRbcltzXV07aWYobyl7dmFyIGE9by5zbGljZSgpO2ZvcihoPTA7aDxhLmxlbmd0aDtoKyspdGhpc1tjXS5jYWxsKHRoaXMsbiwodT1hW2hdKS5vcmlnaW5hbERlbGVnYXRlP3Uub3JpZ2luYWxEZWxlZ2F0ZTp1LmNhbGxiYWNrLHUub3B0aW9ucyl9aWYoaSlmb3IoYT1pLnNsaWNlKCksaD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgdTt0aGlzW2NdLmNhbGwodGhpcyxuLCh1PWFbaF0pLm9yaWdpbmFsRGVsZWdhdGU/dS5vcmlnaW5hbERlbGVnYXRlOnUuY2FsbGJhY2ssdS5vcHRpb25zKX19fWVsc2V7Zm9yKHZhciBmPU9iamVjdC5rZXlzKHQpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHY9QS5leGVjKGZbaF0pLGQ9diYmdlsxXTtkJiYicmVtb3ZlTGlzdGVuZXIiIT09ZCYmdGhpc1twXS5jYWxsKHRoaXMsZCl9dGhpc1twXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoYilyZXR1cm4gdGhpc30sTShUW29dLHgpLE0oVFtjXSxPKSxEJiZNKFRbcF0sRCksUyYmTShUW3VdLFMpLCEwfWZvcih2YXIgVD1bXSx3PTA7dzx0Lmxlbmd0aDt3KyspVFt3XT1iKHRbd10scik7cmV0dXJuIFR9ZnVuY3Rpb24gVyhlLHQpe3ZhciBuPVtdO2Zvcih2YXIgciBpbiBlKXt2YXIgbz1BLmV4ZWMociksaT1vJiZvWzFdO2lmKGkmJighdHx8aT09PXQpKXt2YXIgYT1lW3JdO2lmKGEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspbi5wdXNoKGFbY10pfX1yZXR1cm4gbn12YXIgWD12KCJ6b25lVGFzayIpO2Z1bmN0aW9uIEsoZSx0LG4scil7dmFyIG89bnVsbCxpPW51bGw7bis9cjt2YXIgYT17fTtmdW5jdGlvbiBjKHQpe3ZhciBuPXQuZGF0YTtyZXR1cm4gbi5hcmdzWzBdPWZ1bmN0aW9uKCl7dHJ5e3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3QuZGF0YSYmdC5kYXRhLmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIG4uaGFuZGxlSWQ/ZGVsZXRlIGFbbi5oYW5kbGVJZF06bi5oYW5kbGVJZCYmKG4uaGFuZGxlSWRbWF09bnVsbCkpfX0sbi5oYW5kbGVJZD1vLmFwcGx5KGUsbi5hcmdzKSx0fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGkoZS5kYXRhLmhhbmRsZUlkKX1vPXooZSx0Kz1yLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihvLGkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpWzBdKXt2YXIgcz1oKHQsaVswXSx7aGFuZGxlSWQ6bnVsbCxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1yLGRlbGF5OiJUaW1lb3V0Ij09PXJ8fCJJbnRlcnZhbCI9PT1yP2lbMV18fDA6bnVsbCxhcmdzOml9LGMsdSk7aWYoIXMpcmV0dXJuIHM7dmFyIGw9cy5kYXRhLmhhbmRsZUlkO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9hW2xdPXM6bCYmKGxbWF09cyksbCYmbC5yZWYmJmwudW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwudW5yZWYmJihzLnJlZj1sLnJlZi5iaW5kKGwpLHMudW5yZWY9bC51bnJlZi5iaW5kKGwpKSwibnVtYmVyIj09dHlwZW9mIGx8fGw/bDpzfXJldHVybiBuLmFwcGx5KGUsaSl9fSksaT16KGUsbixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbyxpPXJbMF07Im51bWJlciI9PXR5cGVvZiBpP289YVtpXToobz1pJiZpW1hdKXx8KG89aSksbyYmInN0cmluZyI9PXR5cGVvZiBvLnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1vLnN0YXRlJiYoby5jYW5jZWxGbiYmby5kYXRhLmlzUGVyaW9kaWN8fDA9PT1vLnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgaT9kZWxldGUgYVtpXTppJiYoaVtYXT1udWxsKSxvLnpvbmUuY2FuY2VsVGFzayhvKSk6dC5hcHBseShlLHIpfX0pfXZhciBVPU9iamVjdFt2KCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksQj1PYmplY3RbdigiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWT1PYmplY3QuY3JlYXRlLEo9digidW5jb25maWd1cmFibGVzIik7ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlJiZlW0pdJiZlW0pdW3RdfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBPYmplY3QuaXNGcm96ZW4obil8fChuLmNvbmZpZ3VyYWJsZT0hMCksbi5jb25maWd1cmFibGV8fChlW0pdfHxPYmplY3QuaXNGcm96ZW4oZSl8fFUoZSxKLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLGVbSl0mJihlW0pdW3RdPSEwKSksbn1mdW5jdGlvbiBRKGUsdCxuLHIpe3RyeXtyZXR1cm4gVShlLHQsbil9Y2F0Y2goaSl7aWYoIW4uY29uZmlndXJhYmxlKXRocm93IGk7dm9pZCAwPT09cj9kZWxldGUgbi5jb25maWd1cmFibGU6bi5jb25maWd1cmFibGU9cjt0cnl7cmV0dXJuIFUoZSx0LG4pfWNhdGNoKHIpe3ZhciBvPW51bGw7dHJ5e289SlNPTi5zdHJpbmdpZnkobil9Y2F0Y2goZSl7bz1uLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciK3QrIicgd2l0aCBkZXNjcmlwdG9yICciK28rIicgb24gb2JqZWN0ICciK2UrIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiK3IpfX19dmFyICQ9WyJhYnNvbHV0ZWRldmljZW9yaWVudGF0aW9uIiwiYWZ0ZXJpbnB1dCIsImFmdGVycHJpbnQiLCJhcHBpbnN0YWxsZWQiLCJiZWZvcmVpbnN0YWxscHJvbXB0IiwiYmVmb3JlcHJpbnQiLCJiZWZvcmV1bmxvYWQiLCJkZXZpY2VsaWdodCIsImRldmljZW1vdGlvbiIsImRldmljZW9yaWVudGF0aW9uIiwiZGV2aWNlb3JpZW50YXRpb25hYnNvbHV0ZSIsImRldmljZXByb3hpbWl0eSIsImhhc2hjaGFuZ2UiLCJsYW5ndWFnZWNoYW5nZSIsIm1lc3NhZ2UiLCJtb3piZWZvcmVwYWludCIsIm9mZmxpbmUiLCJvbmxpbmUiLCJwYWludCIsInBhZ2VzaG93IiwicGFnZWhpZGUiLCJwb3BzdGF0ZSIsInJlamVjdGlvbmhhbmRsZWQiLCJzdG9yYWdlIiwidW5oYW5kbGVkcmVqZWN0aW9uIiwidW5sb2FkIiwidXNlcnByb3hpbWl0eSIsInZyZGlzcGx5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLGVlPVsiZW5jcnlwdGVkIiwid2FpdGluZ2ZvcmtleSIsIm1zbmVlZGtleSIsIm1vemludGVycnVwdGJlZ2luIiwibW96aW50ZXJydXB0ZW5kIl0sdGU9WyJsb2FkIl0sbmU9WyJibHVyIiwiZXJyb3IiLCJmb2N1cyIsImxvYWQiLCJyZXNpemUiLCJzY3JvbGwiLCJtZXNzYWdlZXJyb3IiXSxyZT1bImJvdW5jZSIsImZpbmlzaCIsInN0YXJ0Il0sb2U9WyJsb2Fkc3RhcnQiLCJwcm9ncmVzcyIsImFib3J0IiwiZXJyb3IiLCJsb2FkIiwicHJvZ3Jlc3MiLCJ0aW1lb3V0IiwibG9hZGVuZCIsInJlYWR5c3RhdGVjaGFuZ2UiXSxpZT1bInVwZ3JhZGVuZWVkZWQiLCJjb21wbGV0ZSIsImFib3J0Iiwic3VjY2VzcyIsImVycm9yIiwiYmxvY2tlZCIsInZlcnNpb25jaGFuZ2UiLCJjbG9zZSJdLGFlPVsiY2xvc2UiLCJlcnJvciIsIm9wZW4iLCJtZXNzYWdlIl0sY2U9WyJlcnJvciIsIm1lc3NhZ2UiXSx1ZT1bImFib3J0IiwiYW5pbWF0aW9uY2FuY2VsIiwiYW5pbWF0aW9uZW5kIiwiYW5pbWF0aW9uaXRlcmF0aW9uIiwiYXV4Y2xpY2siLCJiZWZvcmVpbnB1dCIsImJsdXIiLCJjYW5jZWwiLCJjYW5wbGF5IiwiY2FucGxheXRocm91Z2giLCJjaGFuZ2UiLCJjb21wb3NpdGlvbnN0YXJ0IiwiY29tcG9zaXRpb251cGRhdGUiLCJjb21wb3NpdGlvbmVuZCIsImN1ZWNoYW5nZSIsImNsaWNrIiwiY2xvc2UiLCJjb250ZXh0bWVudSIsImN1cmVjaGFuZ2UiLCJkYmxjbGljayIsImRyYWciLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiZHJhZ2V4aXQiLCJkcmFnbGVhdmUiLCJkcmFnb3ZlciIsImRyb3AiLCJkdXJhdGlvbmNoYW5nZSIsImVtcHRpZWQiLCJlbmRlZCIsImVycm9yIiwiZm9jdXMiLCJmb2N1c2luIiwiZm9jdXNvdXQiLCJnb3Rwb2ludGVyY2FwdHVyZSIsImlucHV0IiwiaW52YWxpZCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwibG9hZCIsImxvYWRzdGFydCIsImxvYWRlZGRhdGEiLCJsb2FkZWRtZXRhZGF0YSIsImxvc3Rwb2ludGVyY2FwdHVyZSIsIm1vdXNlZG93biIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJtb3VzZXVwIiwibW91c2V3aGVlbCIsIm9yaWVudGF0aW9uY2hhbmdlIiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyZG93biIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsInBvaW50ZXJsb2NrY2hhbmdlIiwibW96cG9pbnRlcmxvY2tjaGFuZ2UiLCJ3ZWJraXRwb2ludGVybG9ja2VyY2hhbmdlIiwicG9pbnRlcmxvY2tlcnJvciIsIm1venBvaW50ZXJsb2NrZXJyb3IiLCJ3ZWJraXRwb2ludGVybG9ja2Vycm9yIiwicG9pbnRlcm1vdmUiLCJwb2ludG91dCIsInBvaW50ZXJvdmVyIiwicG9pbnRlcnVwIiwicHJvZ3Jlc3MiLCJyYXRlY2hhbmdlIiwicmVzZXQiLCJyZXNpemUiLCJzY3JvbGwiLCJzZWVrZWQiLCJzZWVraW5nIiwic2VsZWN0Iiwic2VsZWN0aW9uY2hhbmdlIiwic2VsZWN0c3RhcnQiLCJzaG93Iiwic29ydCIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5kIiwidGltZXVwZGF0ZSIsInZvbHVtZWNoYW5nZSIsInRvdWNoY2FuY2VsIiwidG91Y2htb3ZlIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIiwidHJhbnNpdGlvbmNhbmNlbCIsInRyYW5zaXRpb25lbmQiLCJ3YWl0aW5nIiwid2hlZWwiXS5jb25jYXQoWyJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIndlYmdsY29udGV4dGxvc3QiLCJ3ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yIl0sWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLFsidG9nZ2xlIl0sWyJhZnRlcnNjcmlwdGV4ZWN1dGUiLCJiZWZvcmVzY3JpcHRleGVjdXRlIiwiRE9NQ29udGVudExvYWRlZCIsImZ1bGxzY3JlZW5jaGFuZ2UiLCJtb3pmdWxsc2NyZWVuY2hhbmdlIiwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsIm1zZnVsbHNjcmVlbmNoYW5nZSIsImZ1bGxzY3JlZW5lcnJvciIsIm1vemZ1bGxzY3JlZW5lcnJvciIsIndlYmtpdGZ1bGxzY3JlZW5lcnJvciIsIm1zZnVsbHNjcmVlbmVycm9yIiwicmVhZHlzdGF0ZWNoYW5nZSIsInZpc2liaWxpdHljaGFuZ2UiXSwkLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLFsiYWN0aXZhdGUiLCJhZnRlcnVwZGF0ZSIsImFyaWFyZXF1ZXN0IiwiYmVmb3JlYWN0aXZhdGUiLCJiZWZvcmVkZWFjdGl2YXRlIiwiYmVmb3JlZWRpdGZvY3VzIiwiYmVmb3JldXBkYXRlIiwiY2VsbGNoYW5nZSIsImNvbnRyb2xzZWxlY3QiLCJkYXRhYXZhaWxhYmxlIiwiZGF0YXNldGNoYW5nZWQiLCJkYXRhc2V0Y29tcGxldGUiLCJlcnJvcnVwZGF0ZSIsImZpbHRlcmNoYW5nZSIsImxheW91dGNvbXBsZXRlIiwibG9zZWNhcHR1cmUiLCJtb3ZlIiwibW92ZWVuZCIsIm1vdmVzdGFydCIsInByb3BlcnR5Y2hhbmdlIiwicmVzaXplZW5kIiwicmVzaXplc3RhcnQiLCJyb3dlbnRlciIsInJvd2V4aXQiLCJyb3dzZGVsZXRlIiwicm93c2luc2VydGVkIiwiY29tbWFuZCIsImNvbXBhc3NuZWVkc2NhbGlicmF0aW9uIiwiZGVhY3RpdmF0ZSIsImhlbHAiLCJtc2NvbnRlbnR6b29tIiwibXNtYW5pcHVsYXRpb25zdGF0ZWNoYW5nZWQiLCJtc2dlc3R1cmVjaGFuZ2UiLCJtc2dlc3R1cmVkb3VibGV0YXAiLCJtc2dlc3R1cmVlbmQiLCJtc2dlc3R1cmVob2xkIiwibXNnZXN0dXJlc3RhcnQiLCJtc2dlc3R1cmV0YXAiLCJtc2dvdHBvaW50ZXJjYXB0dXJlIiwibXNpbmVydGlhc3RhcnQiLCJtc2xvc3Rwb2ludGVyY2FwdHVyZSIsIm1zcG9pbnRlcmNhbmNlbCIsIm1zcG9pbnRlcmRvd24iLCJtc3BvaW50ZXJlbnRlciIsIm1zcG9pbnRlcmhvdmVyIiwibXNwb2ludGVybGVhdmUiLCJtc3BvaW50ZXJtb3ZlIiwibXNwb2ludGVyb3V0IiwibXNwb2ludGVyb3ZlciIsIm1zcG9pbnRlcnVwIiwicG9pbnRlcm91dCIsIm1zc2l0ZW1vZGVqdW1wbGlzdGl0ZW1yZW1vdmVkIiwibXN0aHVtYm5haWxjbGljayIsInN0b3AiLCJzdG9yYWdlY29tbWl0Il0pO2Z1bmN0aW9uIHNlKGUsdCxuLHIpe2UmJmooZSxmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIHQ7dmFyIHI9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0PT09ZX0pO2lmKCFyfHwwPT09ci5sZW5ndGgpcmV0dXJuIHQ7dmFyIG89clswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMT09PW8uaW5kZXhPZihlKX0pfShlLHQsbikscil9ZnVuY3Rpb24gbGUoYyx1KXtpZighd3x8eCl7dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQ7aWYoZnVuY3Rpb24oKXtpZigoRXx8eCkmJiFlKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe3ZhciBuPWUoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihuJiYhbi5jb25maWd1cmFibGUpcmV0dXJuITF9dmFyIHI9WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLG89ZShyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiKTtpZihvKXt0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBpPSEhKGM9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vbnJlYWR5c3RhdGVjaGFuZ2U7cmV0dXJuIHQociwib25yZWFkeXN0YXRlY2hhbmdlIixvfHx7fSksaX12YXIgYT12KCJmYWtlIik7dChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1thXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbYV09ZX19KTt2YXIgYyx1PWZ1bmN0aW9uKCl7fTtyZXR1cm4oYz1uZXcgWE1MSHR0cFJlcXVlc3QpLm9ucmVhZHlzdGF0ZWNoYW5nZT11LGk9Y1thXT09PXUsYy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpfSgpKXt2YXIgbD11Ll9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztpZihFKXt2YXIgZj13aW5kb3c7c2UoZix1ZS5jb25jYXQoWyJtZXNzYWdlZXJyb3IiXSksbCxuKGYpKSxzZShEb2N1bWVudC5wcm90b3R5cGUsdWUsbCksdm9pZCAwIT09Zi5TVkdFbGVtZW50JiZzZShmLlNWR0VsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEVsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxlZSxsKSxzZShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsdGUsbCksc2UoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLHRlLGwpO3ZhciBoPWYuSFRNTE1hcnF1ZWVFbGVtZW50O2gmJnNlKGgucHJvdG90eXBlLHJlLGwpO3ZhciBkPWYuV29ya2VyO2QmJnNlKGQucHJvdG90eXBlLGNlLGwpfXNlKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxvZSxsKTt2YXIgZz11LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7ZyYmc2UoZyYmZy5wcm90b3R5cGUsb2UsbCksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKHNlKElEQkluZGV4LnByb3RvdHlwZSxpZSxsKSxzZShJREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJEYXRhYmFzZS5wcm90b3R5cGUsaWUsbCksc2UoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLGllLGwpLHNlKElEQkN1cnNvci5wcm90b3R5cGUsaWUsbCkpLHMmJnNlKFdlYlNvY2tldC5wcm90b3R5cGUsYWUsbCl9ZWxzZSFmdW5jdGlvbigpe2Zvcih2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD11ZVtlXSxuPSJvbiIrdDtzZWxmLmFkZEV2ZW50TGlzdGVuZXIodCxmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS50YXJnZXQ7Zm9yKHI9bz9vLmNvbnN0cnVjdG9yLm5hbWUrIi4iK246InVua25vd24uIituO287KW9bbl0mJiFvW25dW2ZlXSYmKCh0PXAob1tuXSxyKSlbZmVdPW9bbl0sb1tuXT10KSxvPW8ucGFyZW50RWxlbWVudH0sITApfSx0PTA7dDx1ZS5sZW5ndGg7dCsrKWUodCl9KCksWigiWE1MSHR0cFJlcXVlc3QiKSxzJiZmdW5jdGlvbih0LG4pe3ZhciBjPW4uV2ViU29ja2V0O24uRXZlbnRUYXJnZXR8fE4obixbYy5wcm90b3R5cGVdKSxuLldlYlNvY2tldD1mdW5jdGlvbih0LG4pe3ZhciB1LHMsbD1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IGModCxuKTpuZXcgYyh0KSxmPWUobCwib25tZXNzYWdlIik7cmV0dXJuIGYmJiExPT09Zi5jb25maWd1cmFibGU/KHU9cihsKSxzPWwsW2ksYSwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt1W2VdPWZ1bmN0aW9uKCl7dmFyIHQ9by5jYWxsKGFyZ3VtZW50cyk7aWYoZT09PWl8fGU9PT1hKXt2YXIgbj10Lmxlbmd0aD4wP3RbMF06dm9pZCAwO2lmKG4pe3ZhciByPVpvbmUuX19zeW1ib2xfXygiT05fUFJPUEVSVFkiK24pO2xbcl09dVtyXX19cmV0dXJuIGxbZV0uYXBwbHkobCx0KX19KSk6dT1sLGoodSxbImNsb3NlIiwiZXJyb3IiLCJtZXNzYWdlIiwib3BlbiJdLHMpLHV9O3ZhciB1PW4uV2ViU29ja2V0O2Zvcih2YXIgcyBpbiBjKXVbc109Y1tzXX0oMCx1KX19dmFyIGZlPXYoInVuYm91bmQiKTtab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oZSx0LG4pe24ucGF0Y2hPblByb3BlcnRpZXM9aixuLnBhdGNoTWV0aG9kPXosbi5iaW5kQXJndW1lbnRzPWt9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihlKXtLKGUsInNldCIsImNsZWFyIiwiVGltZW91dCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbnRlcnZhbCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKGUpe0soZSwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksSyhlLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxLKGUsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLHI9MDtyPG4ubGVuZ3RoO3IrKyl6KGUsbltyXSxmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIHQuY3VycmVudC5ydW4obixlLGksbyl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Ll9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKTtlW3JdJiYodFtyXT1lW3JdKSxmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuRXZlbnQ7biYmbi5wcm90b3R5cGUmJnQucGF0Y2hNZXRob2Qobi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dFtIXT0hMCxlJiZlLmFwcGx5KHQsbil9fSl9KGUsdCl9KGUsbiksZnVuY3Rpb24oZSx0KXt2YXIgbj0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLHI9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLG89W10saT1lLnd0ZixhPW4uc3BsaXQoIiwiKTtpP289YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIkhUTUwiK2UrIkVsZW1lbnQifSkuY29uY2F0KHIpOmUuRXZlbnRUYXJnZXQ/by5wdXNoKCJFdmVudFRhcmdldCIpOm89cjtmb3IodmFyIGM9ZS5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEsdT1lLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEscD1JKCksaD0iZnVuY3Rpb24gX19CUk9XU0VSVE9PTFNfQ09OU09MRV9TQUZFRlVOQygpIHsgW25hdGl2ZSBjb2RlXSB9Iix2PTA7djx1ZS5sZW5ndGg7disrKXt2YXIgZD1mKygoaz11ZVt2XSkrbCksZz1mKyhrK3MpO0xba109e30sTFtrXVtsXT1kLExba11bc109Z31mb3Iodj0wO3Y8bi5sZW5ndGg7disrKWZvcih2YXIgeT1hW3ZdLF89cVt5XT17fSxtPTA7bTx1ZS5sZW5ndGg7bSsrKXt2YXIgaztfW2s9dWVbbV1dPXkrIi5hZGRFdmVudExpc3RlbmVyOiIra312YXIgYj1bXTtmb3Iodj0wO3Y8by5sZW5ndGg7disrKXt2YXIgVD1lW29bdl1dO2IucHVzaChUJiZULnByb3RvdHlwZSl9TihlLGIse3ZoOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFjJiZwKXtpZih1KXRyeXt2YXIgbztpZigiW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIj09PShvPXQudG9TdHJpbmcoKSl8fG89PWgpcmV0dXJuIGUuYXBwbHkobixyKSwhMX1jYXRjaCh0KXtyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYoIltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSI9PT0obz10LnRvU3RyaW5nKCkpfHxvPT1oKXJldHVybiBlLmFwcGx5KG4sciksITF9ZWxzZSBpZih1KXRyeXt0LnRvU3RyaW5nKCl9Y2F0Y2godCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1yZXR1cm4hMH19KSx0LnBhdGNoRXZlbnRUYXJnZXQ9Tn0oZSxuKTt2YXIgbz1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7byYmby5wcm90b3R5cGUmJm4ucGF0Y2hFdmVudFRhcmdldChlLFtvLnByb3RvdHlwZV0pLFooIk11dGF0aW9uT2JzZXJ2ZXIiKSxaKCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiksWigiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKSxaKCJGaWxlUmVhZGVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLGZ1bmN0aW9uKHQsbixyKXtsZSgwLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbil7aWYoVihlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3QrIicgb2YgIitlKTt2YXIgcj1uLmNvbmZpZ3VyYWJsZTtyZXR1cm4icHJvdG90eXBlIiE9PXQmJihuPUcoZSx0LG4pKSxRKGUsdCxuLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sdFtuXSl9KSxlfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0fHxPYmplY3QuaXNGcm96ZW4odCl8fE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1HKGUsbix0W25dKX0pLFkoZSx0KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPUIoZSx0KTtyZXR1cm4gVihlLHQpJiYobi5jb25maWd1cmFibGU9ITEpLG59LGZ1bmN0aW9uKG4pe2lmKChFfHx4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50KXt2YXIgcj1kb2N1bWVudC5yZWdpc3RlckVsZW1lbnQsbz1bImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl07ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4mJm4ucHJvdG90eXBlJiZvLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxpLGEsYz0iRG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50OjoiK3QsdT1uLnByb3RvdHlwZTtpZih1Lmhhc093blByb3BlcnR5KHQpKXt2YXIgcz1lKHUsdCk7cyYmcy52YWx1ZT8ocy52YWx1ZT1wKHMudmFsdWUsYyksYT0oaT1zKS5jb25maWd1cmFibGUsUShyPW4ucHJvdG90eXBlLG89dCxpPUcocixvLGkpLGEpKTp1W3RdPXAodVt0XSxjKX1lbHNlIHVbdF0mJih1W3RdPXAodVt0XSxjKSl9KSxyLmNhbGwoZG9jdW1lbnQsdCxuKX0sTShkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQscil9fSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goImNhbnZhcyIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5IVE1MQ2FudmFzRWxlbWVudDt2b2lkIDAhPT10JiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUudG9CbG9iJiZmdW5jdGlvbihlLG4scil7dmFyIG89bnVsbDtmdW5jdGlvbiBpKGUpe3ZhciB0PWUuZGF0YTtyZXR1cm4gdC5hcmdzW3QuY2JJZHhdPWZ1bmN0aW9uKCl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvLmFwcGx5KHQudGFyZ2V0LHQuYXJncyksZX1vPXoodC5wcm90b3R5cGUsInRvQmxvYiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm57bmFtZToiSFRNTENhbnZhc0VsZW1lbnQudG9CbG9iIix0YXJnZXQ6ZSxjYklkeDowLGFyZ3M6dH19KHQsbik7cmV0dXJuIHIuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3IuY2JJZHhdP2goci5uYW1lLG5bci5jYklkeF0scixpLG51bGwpOmUuYXBwbHkodCxuKX19KX0oKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKHQpe3ZhciBzPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxsPXNbY10sZj1zW3VdO2lmKCFsKXt2YXIgcD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYocCl7dmFyIHY9cC5wcm90b3R5cGU7bD12W2NdLGY9dlt1XX19dmFyIGQ9InJlYWR5c3RhdGVjaGFuZ2UiLGc9InNjaGVkdWxlZCI7ZnVuY3Rpb24geShlKXtYTUxIdHRwUmVxdWVzdFtpXT0hMTt2YXIgdD1lLmRhdGEscj10LnRhcmdldCxhPXJbb107bHx8KGw9cltjXSxmPXJbdV0pLGEmJmYuY2FsbChyLGQsYSk7dmFyIHM9cltvXT1mdW5jdGlvbigpe3IucmVhZHlTdGF0ZT09PXIuRE9ORSYmIXQuYWJvcnRlZCYmWE1MSHR0cFJlcXVlc3RbaV0mJmUuc3RhdGU9PT1nJiZlLmludm9rZSgpfTtyZXR1cm4gbC5jYWxsKHIsZCxzKSxyW25dfHwocltuXT1lKSxiLmFwcGx5KHIsdC5hcmdzKSxYTUxIdHRwUmVxdWVzdFtpXT0hMCxlfWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gbShlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYWJvcnRlZD0hMCxULmFwcGx5KHQudGFyZ2V0LHQuYXJncyl9dmFyIGs9eihzLCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlW3JdPTA9PXRbMl0sZVthXT10WzFdLGsuYXBwbHkoZSx0KX19KSxiPXoocywic2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtyXT9iLmFwcGx5KGUsdCk6aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsXyx7dGFyZ2V0OmUsdXJsOmVbYV0saXNQZXJpb2RpYzohMSxkZWxheTpudWxsLGFyZ3M6dCxhYm9ydGVkOiExfSx5LG0pfX0pLFQ9eihzLCJhYm9ydCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuXTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHQudHlwZSl7aWYobnVsbD09dC5jYW5jZWxGbnx8dC5kYXRhJiZ0LmRhdGEuYWJvcnRlZClyZXR1cm47dC56b25lLmNhbmNlbFRhc2sodCl9fX0pfSgpO3ZhciBuPXYoInhoclRhc2siKSxyPXYoInhoclN5bmMiKSxvPXYoInhockxpc3RlbmVyIiksaT12KCJ4aHJTY2hlZHVsZWQiKSxhPXYoInhoclVSTCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixmdW5jdGlvbih0KXt0Lm5hdmlnYXRvciYmdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJmZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPXQuY29uc3RydWN0b3IubmFtZSxvPWZ1bmN0aW9uKG8pe3ZhciBpPW5bb10sYT10W2ldO2lmKGEpe2lmKCFiKGUodCxpKSkpcmV0dXJuImNvbnRpbnVlIjt0W2ldPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxrKGFyZ3VtZW50cyxyKyIuIitpKSl9O3JldHVybiBNKHQsZSksdH0oYSl9fSxpPTA7aTxuLmxlbmd0aDtpKyspbyhpKX0odC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihuKXtXKGUsdCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1lLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihvKXt2YXIgaT1uZXcgbyh0LHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtyLmludm9rZShpKX19KX19ZS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJih0W3YoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPW4oInVuaGFuZGxlZHJlamVjdGlvbiIpLHRbdigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bigicmVqZWN0aW9uaGFuZGxlZCIpKX0pfSgpfSwiMVRzQSI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSwiMk9pRiI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LDM6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCJoTi9nIil9LCIzTHlqIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiS3JvSiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpcihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LCI0NVR2IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiT1AzWSIpLGE9ci5oYXMsYz1yLmdldCx1PXIua2V5LHM9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiBjKGUsdCxuKTt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09cj9zKGUscixuKTp2b2lkIDB9O3IuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKSl9fSl9LCI0OUQ0IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXksYT1yLnNldDtyLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24oZSx0LG4scil7YShlLHQsbyhuKSxpKHIpKX19KX0sIjRMaUQiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZHlaWCIpLG89bigiWEtGVSIpLGk9bigiS3JvSiIpLGE9bigiM0x5aiIpLGM9bigiWjZ2RiIpLHU9bigiU2xrWSIpLHM9bigiOWdYNyIpLGw9bigiMC9SNCIpLGY9bigiZWVWcSIpLHA9bigiWE1WaCIpLGg9bigiZnlEcSIpLHY9bigiWGJ6aSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixkLGcseSl7dmFyIF89cltlXSxtPV8saz1nPyJzZXQiOiJhZGQiLGI9bSYmbS5wcm90b3R5cGUsVD17fSx3PWZ1bmN0aW9uKGUpe3ZhciB0PWJbZV07aShiLGUsImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh5JiYhbChlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJoYXMiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoeSYmIWwoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4geSYmIWwoZSk/dm9pZCAwOnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJhZGQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUpLHRoaXN9OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoeXx8Yi5mb3JFYWNoJiYhZihmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIEU9bmV3IG0seD1FW2tdKHk/e306LTAsMSkhPUUsTz1mKGZ1bmN0aW9uKCl7RS5oYXMoMSl9KSxTPXAoZnVuY3Rpb24oZSl7bmV3IG0oZSl9KSxEPSF5JiZmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBtLHQ9NTt0LS07KWVba10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSk7U3x8KChtPXQoZnVuY3Rpb24odCxuKXtzKHQsbSxlKTt2YXIgcj12KG5ldyBfLHQsbSk7cmV0dXJuIHZvaWQgMCE9biYmdShuLGcscltrXSxyKSxyfSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9bSksKE98fEQpJiYodygiZGVsZXRlIiksdygiaGFzIiksZyYmdygiZ2V0IikpLChEfHx4KSYmdyhrKSx5JiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1lbHNlIG09ZC5nZXRDb25zdHJ1Y3Rvcih0LGUsZyxrKSxhKG0ucHJvdG90eXBlLG4pLGMuTkVFRD0hMDtyZXR1cm4gaChtLGUpLFRbZV09bSxvKG8uRytvLlcrby5GKihtIT1fKSxUKSx5fHxkLnNldFN0cm9uZyhtLGUsZyksbX19LCI0UjR1IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwiNkZNTyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oIkVXbUMiKSxpPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbyhlKSYmKCJmdW5jdGlvbiIhPXR5cGVvZih0PWUuY29uc3RydWN0b3IpfHx0IT09QXJyYXkmJiFvKHQucHJvdG90eXBlKXx8KHQ9dm9pZCAwKSxyKHQpJiZudWxsPT09KHQ9dFtpXSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/QXJyYXk6dH19LCI3RGxoIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5oYXMsYT1yLmtleTtyLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSwiOUFBbiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiTWFwIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ci5nZXRFbnRyeShvKHRoaXMsIk1hcCIpLGUpO3JldHVybiB0JiZ0LnZ9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiByLmRlZihvKHRoaXMsIk1hcCIpLDA9PT1lPzA6ZSx0KX19LHIsITApfSwiOWdYNyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7aWYoIShlIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PXImJnIgaW4gZSl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gZX19LEFmbno6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJMUUFjIiksbz1uKCJYS0ZVIiksaT1uKCJLcm9KIiksYT1uKCJNdWtiIiksYz1uKCJoUElRIiksdT1uKCJRYURiIikscz1uKCJmeURxIiksbD1uKCJPUDNZIiksZj1uKCJLMHhVIikoIml0ZXJhdG9yIikscD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbix2LGQsZyx5KXt1KG4sdCx2KTt2YXIgXyxtLGssYj1mdW5jdGlvbihlKXtpZighcCYmZSBpbiB4KXJldHVybiB4W2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxUPXQrIiBJdGVyYXRvciIsdz0idmFsdWVzIj09ZCxFPSExLHg9ZS5wcm90b3R5cGUsTz14W2ZdfHx4WyJAQGl0ZXJhdG9yIl18fGQmJnhbZF0sUz1PfHxiKGQpLEQ9ZD93P2IoImVudHJpZXMiKTpTOnZvaWQgMCxqPSJBcnJheSI9PXQmJnguZW50cmllc3x8TztpZihqJiYoaz1sKGouY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmsubmV4dCYmKHMoayxULCEwKSxyfHwiZnVuY3Rpb24iPT10eXBlb2Yga1tmXXx8YShrLGYsaCkpLHcmJk8mJiJ2YWx1ZXMiIT09Ty5uYW1lJiYoRT0hMCxTPWZ1bmN0aW9uKCl7cmV0dXJuIE8uY2FsbCh0aGlzKX0pLHImJiF5fHwhcCYmIUUmJnhbZl18fGEoeCxmLFMpLGNbdF09UyxjW1RdPWgsZClpZihfPXt2YWx1ZXM6dz9TOmIoInZhbHVlcyIpLGtleXM6Zz9TOmIoImtleXMiKSxlbnRyaWVzOkR9LHkpZm9yKG0gaW4gXyltIGluIHh8fGkoeCxtLF9bbV0pO2Vsc2UgbyhvLlArby5GKihwfHxFKSx0LF8pO3JldHVybiBffX0sQnFmVjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5nZXQsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxDa2tUOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJZbXF2IiksaT1uKCJTL2ovIiksYT1uKCJuZThpIiksYz1uKCJ6UndvIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MT09ZSx1PTI9PWUscz0zPT1lLGw9ND09ZSxmPTY9PWUscD01PT1lfHxmLGg9dHx8YztyZXR1cm4gZnVuY3Rpb24odCxjLHYpe2Zvcih2YXIgZCxnLHk9aSh0KSxfPW8oeSksbT1yKGMsdiwzKSxrPWEoXy5sZW5ndGgpLGI9MCxUPW4/aCh0LGspOnU/aCh0LDApOnZvaWQgMDtrPmI7YisrKWlmKChwfHxiIGluIF8pJiYoZz1tKGQ9X1tiXSxiLHkpLGUpKWlmKG4pVFtiXT1nO2Vsc2UgaWYoZylzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOlQucHVzaChkKX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6c3x8bD9sOlR9fX0sRFZnQTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiemhBYiIpLG89bigiNFI0dSIpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LEVLMEU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIkNra1QiKSgwKSxpPW4oIktyb0oiKSxhPW4oIlo2dkYiKSxjPW4oImN6TksiKSx1PW4oIlpENjciKSxzPW4oIjAvUjQiKSxsPW4oImVlVnEiKSxmPW4oInM1cVkiKSxwPWEuZ2V0V2VhayxoPU9iamVjdC5pc0V4dGVuc2libGUsdj11LnVmc3RvcmUsZD17fSxnPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0seT17Z2V0OmZ1bmN0aW9uKGUpe2lmKHMoZSkpe3ZhciB0PXAoZSk7cmV0dXJuITA9PT10P3YoZih0aGlzLCJXZWFrTWFwIikpLmdldChlKTp0P3RbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuZGVmKGYodGhpcywiV2Vha01hcCIpLGUsdCl9fSxfPWUuZXhwb3J0cz1uKCI0TGlEIikoIldlYWtNYXAiLGcseSx1LCEwLCEwKTtsKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgXykuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKGQpLDcpLmdldChkKX0pJiYoYygocj11LmdldENvbnN0cnVjdG9yKGcsIldlYWtNYXAiKSkucHJvdG90eXBlLHkpLGEuTkVFRD0hMCxvKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9Xy5wcm90b3R5cGUsbj10W2VdO2kodCxlLGZ1bmN0aW9uKHQsbyl7aWYocyh0KSYmIWgodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyByKTt2YXIgaT10aGlzLl9mW2VdKHQsbyk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiBuLmNhbGwodGhpcyx0LG8pfSl9KSl9LEVXbUM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09cihlKX19LEVlbUg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlVxY0YiKSxvPW4oIlJqRC8iKSxpPW4oImFDRmoiKSxhPW4oImFwbVQiKSxjPW4oImFhZ3giKSx1PW4oInhwcWwiKSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4oIm5oNGciKT9zOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9YSh0LCEwKSx1KXRyeXtyZXR1cm4gcyhlLHQpfWNhdGNoKGUpe31pZihjKGUsdCkpcmV0dXJuIG8oIXIuZi5jYWxsKGUsdCksZVt0XSl9fSxGSlc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJ5M3c5IiksaT1uKCJEVmdBIik7ZS5leHBvcnRzPW4oIm5oNGciKT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciBuLGE9aSh0KSxjPWEubGVuZ3RoLHU9MDtjPnU7KXIuZihlLG49YVt1KytdLHRbbl0pO3JldHVybiBlfX0sRlpjcTpmdW5jdGlvbihlLHQsbil7bigiNDlENCIpLG4oInpxK0MiKSxuKCI0NVR2IiksbigidUF0ZCIpLG4oIkJxZlYiKSxuKCJmTi8zIiksbigiaVcrUyIpLG4oIjdEbGgiKSxuKCJPcHhiIiksZS5leHBvcnRzPW4oImczZzUiKS5SZWZsZWN0fSxINmhmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG8pe3RyeXtyZXR1cm4gbz90KHIobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXt2YXIgaT1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbChlKSksdH19fSwiSThhKyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKSxvPW4oIksweFUiKSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYTtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLG8pKT9uOmk/cih0KToiT2JqZWN0Ij09KGE9cih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjphfX0sSXc3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiZHlaWCIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQoZSk6e319fSwiSis2ZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkk4YSsiKSxvPW4oIksweFUiKSgiaXRlcmF0b3IiKSxpPW4oImhQSVEiKTtlLmV4cG9ydHM9bigiZzNnNSIpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9ZSlyZXR1cm4gZVtvXXx8ZVsiQEBpdGVyYXRvciJdfHxpW3IoZSldfX0sSmlFYTpmdW5jdGlvbihlLHQpe3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxLMHhVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoIndrcyIpLG89bigieWxxcyIpLGk9bigiZHlaWCIpLlN5bWJvbCxhPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPWEmJmlbZV18fChhP2k6bykoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPXJ9LEtyb0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKSxvPW4oIk11a2IiKSxpPW4oImFhZ3giKSxhPW4oInlscXMiKSgic3JjIiksYz1GdW5jdGlvbi50b1N0cmluZyx1PSgiIitjKS5zcGxpdCgidG9TdHJpbmciKTtuKCJnM2c1IikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5jYWxsKGUpfSwoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGMpe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3MmJihpKG4sIm5hbWUiKXx8byhuLCJuYW1lIix0KSksZVt0XSE9PW4mJihzJiYoaShuLGEpfHxvKG4sYSxlW3RdPyIiK2VbdF06dS5qb2luKFN0cmluZyh0KSkpKSxlPT09cj9lW3RdPW46Yz9lW3RdP2VbdF09bjpvKGUsdCxuKTooZGVsZXRlIGVbdF0sbyhlLHQsbikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fGMuY2FsbCh0aGlzKX0pfSxLdXRoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iiksbz1uKCJGSlc1IiksaT1uKCI0UjR1IiksYT1uKCJZVHZBIikoIklFX1BST1RPIiksYz1mdW5jdGlvbigpe30sdT1mdW5jdGlvbigpe3ZhciBlLHQ9bigiSXc3MSIpKCJpZnJhbWUiKSxyPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLG4oIityTHYiKS5hcHBlbmRDaGlsZCh0KSx0LnNyYz0iamF2YXNjcmlwdDoiLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksZS5jbG9zZSgpLHU9ZS5GO3ItLTspZGVsZXRlIHUucHJvdG90eXBlW2lbcl1dO3JldHVybiB1KCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oYy5wcm90b3R5cGU9cihlKSxuPW5ldyBjLGMucHJvdG90eXBlPW51bGwsblthXT1lKTpuPXUoKSx2b2lkIDA9PT10P246byhuLHQpfX0sTFFBYzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0hMX0sTFpXdDpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sTTZRajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaFBJUSIpLG89bigiSzB4VSIpKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxpW29dPT09ZSl9fSxNdWtiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJSakQvIik7ZS5leHBvcnRzPW4oIm5oNGciKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LE42Y0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjlBQW4iKSxvPW4oIlhLRlUiKSxpPW4oIlZUZXIiKSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyhuKCJFSzBFIikpKSxjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1hLmdldChlKTtpZighbyl7aWYoIW4pcmV0dXJuO2Euc2V0KGUsbz1uZXcgcil9dmFyIGk9by5nZXQodCk7aWYoIWkpe2lmKCFuKXJldHVybjtvLnNldCh0LGk9bmV3IHIpfXJldHVybiBpfTtlLmV4cG9ydHM9e3N0b3JlOmEsbWFwOmMsaGFzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwhMSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKGUpfSxnZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWModCxuLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQoZSl9LHNldDpmdW5jdGlvbihlLHQsbixyKXtjKG4sciwhMCkuc2V0KGUsdCl9LGtleXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1jKGUsdCwhMSkscj1bXTtyZXR1cm4gbiYmbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ci5wdXNoKHQpfSkscn0sa2V5OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwic3ltYm9sIj09dHlwZW9mIGU/ZTpTdHJpbmcoZSl9LGV4cDpmdW5jdGlvbihlKXtvKG8uUywiUmVmbGVjdCIsZSl9fX0sT1AzWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYWFneCIpLG89bigiUy9qLyIpLGk9bigiWVR2QSIpKCJJRV9QUk9UTyIpLGE9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxpKT9lW2ldOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LE9weGI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIjJPaUYiKSxhPXIua2V5LGM9ci5zZXQ7ci5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7YyhlLHQsKHZvaWQgMCE9PXI/bzppKShuKSxhKHIpKX19fSl9LFEzbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlNsa1kiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gcihlLCExLG4ucHVzaCxuLHQpLG59fSxRYURiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiS3V0aCIpLG89bigiUmpELyIpLGk9bigiZnlEcSIpLGE9e307bigiTXVrYiIpKGEsbigiSzB4VSIpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UucHJvdG90eXBlPXIoYSx7bmV4dDpvKDEsbil9KSxpKGUsdCsiIEl0ZXJhdG9yIil9fSxSWWk3OmZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5jZWlsLHI9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGU9K2UpPzA6KGU+MD9yOm4pKGUpfX0sIlJqRC8iOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sIlMvai8iOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ2aFBVIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxTbGtZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJINmhmIiksaT1uKCJNNlFqIiksYT1uKCJ5M3c5IiksYz1uKCJuZThpIiksdT1uKCJKKzZlIikscz17fSxsPXt9Oyh0PWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixmLHApe3ZhciBoLHYsZCxnLHk9cD9mdW5jdGlvbigpe3JldHVybiBlfTp1KGUpLF89cihuLGYsdD8yOjEpLG09MDtpZigiZnVuY3Rpb24iIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBpdGVyYWJsZSEiKTtpZihpKHkpKXtmb3IoaD1jKGUubGVuZ3RoKTtoPm07bSsrKWlmKChnPXQ/XyhhKHY9ZVttXSlbMF0sdlsxXSk6XyhlW21dKSk9PT1zfHxnPT09bClyZXR1cm4gZ31lbHNlIGZvcihkPXkuY2FsbChlKTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKChnPW8oZCxfLHYudmFsdWUsdCkpPT09c3x8Zz09PWwpcmV0dXJuIGd9KS5CUkVBSz1zLHQuUkVUVVJOPWx9LFQzOWI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiU2V0IixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVmKG8odGhpcywiU2V0IiksZT0wPT09ZT8wOmUsZSl9fSxyKX0sVXFjRjpmdW5jdGlvbihlLHQpe3QuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sVlRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZzNnNSIpLG89bigiZHlaWCIpLGk9b1siX19jb3JlLWpzX3NoYXJlZF9fIl18fChvWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpW2VdfHwoaVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKCJMUUFjIik/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE4IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSxYS0ZVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIiksbz1uKCJnM2c1IiksaT1uKCJNdWtiIiksYT1uKCJLcm9KIiksYz1uKCJtMFBwIiksdT1mdW5jdGlvbihlLHQsbil7dmFyIHMsbCxmLHAsaD1lJnUuRix2PWUmdS5HLGQ9ZSZ1LlAsZz1lJnUuQix5PXY/cjplJnUuUz9yW3RdfHwoclt0XT17fSk6KHJbdF18fHt9KS5wcm90b3R5cGUsXz12P286b1t0XXx8KG9bdF09e30pLG09Xy5wcm90b3R5cGV8fChfLnByb3RvdHlwZT17fSk7Zm9yKHMgaW4gdiYmKG49dCksbilmPSgobD0haCYmeSYmdm9pZCAwIT09eVtzXSk/eTpuKVtzXSxwPWcmJmw/YyhmLHIpOmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBmP2MoRnVuY3Rpb24uY2FsbCxmKTpmLHkmJmEoeSxzLGYsZSZ1LlUpLF9bc10hPWYmJmkoXyxzLHApLGQmJm1bc10hPWYmJihtW3NdPWYpfTtyLmNvcmU9byx1LkY9MSx1Lkc9Mix1LlM9NCx1LlA9OCx1LkI9MTYsdS5XPTMyLHUuVT02NCx1LlI9MTI4LGUuZXhwb3J0cz11fSxYTVZoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJLMHhVIikoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9WzddW3JdKCk7aS5yZXR1cm49ZnVuY3Rpb24oKXtvPSEwfSxBcnJheS5mcm9tKGksZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9WzddLGE9aVtyXSgpO2EubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUoaSl9Y2F0Y2goZSl7fXJldHVybiBufX0sWGJ6aTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiaTVkYyIpLnNldDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGE9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYSE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoaT1hLnByb3RvdHlwZSkhPT1uLnByb3RvdHlwZSYmcihpKSYmbyYmbyhlLGkpLGV9fSxZVHZBOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoImtleXMiKSxvPW4oInlscXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sWW1xdjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sWjZ2RjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieWxxcyIpKCJtZXRhIiksbz1uKCIwL1I0IiksaT1uKCJhYWd4IiksYT1uKCJoc3dhIikuZixjPTAsdT1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gdShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLGw9ZnVuY3Rpb24oZSl7YShlLHIse3ZhbHVlOntpOiJPIisgKytjLHc6e319fSl9LGY9ZS5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6ZnVuY3Rpb24oZSx0KXtpZighbyhlKSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGU/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtsKGUpfXJldHVybiBlW3JdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighaShlLHIpKXtpZighdShlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtsKGUpfXJldHVybiBlW3JdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiBzJiZmLk5FRUQmJnUoZSkmJiFpKGUscikmJmwoZSksZX19fSxaRDY3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiM0x5aiIpLG89bigiWjZ2RiIpLmdldFdlYWssaT1uKCJ5M3c5IiksYT1uKCIwL1I0IiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJDa2tUIiksbD1uKCJhYWd4IiksZj1uKCJzNXFZIikscD1zKDUpLGg9cyg2KSx2PTAsZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fbHx8KGUuX2w9bmV3IGcpfSxnPWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSx5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZS5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pfTtnLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXkodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISF5KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPXkodGhpcyxlKTtuP25bMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1oKHRoaXMuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KTtyZXR1cm5+dCYmdGhpcy5hLnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPWUoZnVuY3Rpb24oZSxyKXtjKGUscyx0LCJfaSIpLGUuX3Q9dCxlLl9pPXYrKyxlLl9sPXZvaWQgMCx2b2lkIDAhPXImJnUocixuLGVbaV0sZSl9KTtyZXR1cm4gcihzLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5kZWxldGUoZSk6biYmbChuLHRoaXMuX2kpJiZkZWxldGUgblt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5oYXMoZSk6biYmbChuLHRoaXMuX2kpfX0pLHN9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9byhpKHQpLCEwKTtyZXR1cm4hMD09PXI/ZChlKS5zZXQodCxuKTpyW2UuX2ldPW4sZX0sdWZzdG9yZTpkfX0sYUNGajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiWW1xdiIpLG89bigidmhQVSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihvKGUpKX19LGFhZ3g6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxhcG1UOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sY3pOSzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkRWZ0EiKSxvPW4oIkppRWEiKSxpPW4oIlVxY0YiKSxhPW4oIlMvai8iKSxjPW4oIlltcXYiKSx1PU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSF1fHxuKCJlZVZxIikoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCkscj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW25dPTcsci5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWV9KSw3IT11KHt9LGUpW25dfHxPYmplY3Qua2V5cyh1KHt9LHQpKS5qb2luKCIiKSE9cn0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWEoZSksdT1hcmd1bWVudHMubGVuZ3RoLHM9MSxsPW8uZixmPWkuZjt1PnM7KWZvcih2YXIgcCxoPWMoYXJndW1lbnRzW3MrK10pLHY9bD9yKGgpLmNvbmNhdChsKGgpKTpyKGgpLGQ9di5sZW5ndGgsZz0wO2Q+ZzspZi5jYWxsKGgscD12W2crK10pJiYobltwXT1oW3BdKTtyZXR1cm4gbn06dX0sImQvR2MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybihlPXIoZSkpPDA/byhlK3QsMCk6aShlLHQpfX0sZHlaWDpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsibnVtYmVyIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZWVWcTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZWxacTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImR5WlgiKSxvPW4oImhzd2EiKSxpPW4oIm5oNGciKSxhPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yW2VdO2kmJnQmJiF0W2FdJiZvLmYodCxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwiZk4vMyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5cyxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkobyhlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRzWzFdKSl9fSl9LGZ5RHE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKS5mLG89bigiYWFneCIpLGk9bigiSzB4VSIpKCJ0b1N0cmluZ1RhZyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZSYmIW8oZT1uP2U6ZS5wcm90b3R5cGUsaSkmJnIoZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZzNnNTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi41LjcifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sImhOL2ciOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4oIkZaY3EiKSxuKCIwVFdwIil9LGhQSVE6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGhzd2E6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKSxvPW4oInhwcWwiKSxpPW4oImFwbVQiKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigibmg0ZyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYocihlKSx0PWkodCwhMCkscihuKSxvKXRyeXtyZXR1cm4gYShlLHQsbil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxpNWRjOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJ5M3c5IiksaT1mdW5jdGlvbihlLHQpe2lmKG8oZSksIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQscil7dHJ5eyhyPW4oIm0wUHAiKShGdW5jdGlvbi5jYWxsLG4oIkVlbUgiKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwyKSkoZSxbXSksdD0hKGUgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2goZSl7dD0hMH1yZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4pLHQ/ZS5fX3Byb3RvX189bjpyKGUsbiksZX19KHt9LCExKTp2b2lkIDApLGNoZWNrOml9fSwiaVcrUyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIk9QM1kiKSxhPXIuaGFzLGM9ci5rZXksdT1mdW5jdGlvbihlLHQsbil7aWYoYShlLHQsbikpcmV0dXJuITA7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXImJnUoZSxyLG4pfTtyLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSkpfX0pfSxtMFBwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIyT2lGIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiBlLmNhbGwodCxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxuZThpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9vKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LG5oNGc6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sczVxWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSx1QXRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJUMzliIiksbz1uKCJRM25lIiksaT1uKCJONmNKIiksYT1uKCJ5M3c5IiksYz1uKCJPUDNZIiksdT1pLmtleXMscz1pLmtleSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dShlLHQpLGk9YyhlKTtpZihudWxsPT09aSlyZXR1cm4gbjt2YXIgYT1sKGksdCk7cmV0dXJuIGEubGVuZ3RoP24ubGVuZ3RoP28obmV3IHIobi5jb25jYXQoYSkpKTphOm59O2kuZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoYShlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOnMoYXJndW1lbnRzWzFdKSl9fSl9LHZoUFU6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSx3MmE1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhQ0ZqIiksbz1uKCJuZThpIiksaT1uKCJkL0djIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sYSl7dmFyIGMsdT1yKHQpLHM9byh1Lmxlbmd0aCksbD1pKGEscyk7aWYoZSYmbiE9bil7Zm9yKDtzPmw7KWlmKChjPXVbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3M+bDtsKyspaWYoKGV8fGwgaW4gdSkmJnVbbF09PT1uKXJldHVybiBlfHxsfHwwO3JldHVybiFlJiYtMX19fSx3bXZHOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiaHN3YSIpLmYsbz1uKCJLdXRoIiksaT1uKCIzTHlqIiksYT1uKCJtMFBwIiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJBZm56IiksbD1uKCIxVHNBIiksZj1uKCJlbFpxIikscD1uKCJuaDRnIiksaD1uKCJaNnZGIikuZmFzdEtleSx2PW4oInM1cVkiKSxkPXA/Il9zIjoic2l6ZSIsZz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9aCh0KTtpZigiRiIhPT1yKXJldHVybiBlLl9pW3JdO2ZvcihuPWUuX2Y7bjtuPW4ubilpZihuLms9PXQpcmV0dXJuIG59O2UuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGw9ZShmdW5jdGlvbihlLHIpe2MoZSxsLHQsIl9pIiksZS5fdD10LGUuX2k9byhudWxsKSxlLl9mPXZvaWQgMCxlLl9sPXZvaWQgMCxlW2RdPTAsdm9pZCAwIT1yJiZ1KHIsbixlW3NdLGUpfSk7cmV0dXJuIGkobC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXYodGhpcyx0KSxuPWUuX2kscj1lLl9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBuW3IuaV07ZS5fZj1lLl9sPXZvaWQgMCxlW2RdPTB9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgbj12KHRoaXMsdCkscj1nKG4sZSk7aWYocil7dmFyIG89ci5uLGk9ci5wO2RlbGV0ZSBuLl9pW3IuaV0sci5yPSEwLGkmJihpLm49byksbyYmKG8ucD1pKSxuLl9mPT1yJiYobi5fZj1vKSxuLl9sPT1yJiYobi5fbD1pKSxuW2RdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe3YodGhpcyx0KTtmb3IodmFyIG4scj1hKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7bj1uP24ubjp0aGlzLl9mOylmb3IocihuLnYsbi5rLHRoaXMpO24mJm4ucjspbj1uLnB9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIWcodih0aGlzLHQpLGUpfX0pLHAmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLHQpW2RdfX0pLGx9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPWcoZSx0KTtyZXR1cm4gaT9pLnY9bjooZS5fbD1pPXtpOm89aCh0LCEwKSxrOnQsdjpuLHA6cj1lLl9sLG46dm9pZCAwLHI6ITF9LGUuX2Z8fChlLl9mPWkpLHImJihyLm49aSksZVtkXSsrLCJGIiE9PW8mJihlLl9pW29dPWkpKSxlfSxnZXRFbnRyeTpnLHNldFN0cm9uZzpmdW5jdGlvbihlLHQsbil7cyhlLHQsZnVuY3Rpb24oZSxuKXt0aGlzLl90PXYoZSx0KSx0aGlzLl9rPW4sdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2ssdD10aGlzLl9sO3QmJnQucjspdD10LnA7cmV0dXJuIHRoaXMuX3QmJih0aGlzLl9sPXQ9dD90Lm46dGhpcy5fdC5fZik/bCgwLCJrZXlzIj09ZT90Lms6InZhbHVlcyI9PWU/dC52Olt0LmssdC52XSk6KHRoaXMuX3Q9dm9pZCAwLGwoMSkpfSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksZih0KX19fSx4cHFsOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oIm5oNGciKSYmIW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobigiSXc3MSIpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0seTN3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSx5bHFzOmZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0selJ3bzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiNkZNTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcocihlKSkodCl9fSx6aEFiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhYWd4Iiksbz1uKCJhQ0ZqIiksaT1uKCJ3MmE1IikoITEpLGE9bigiWVR2QSIpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGM9byhlKSx1PTAscz1bXTtmb3IobiBpbiBjKW4hPWEmJnIoYyxuKSYmcy5wdXNoKG4pO2Zvcig7dC5sZW5ndGg+dTspcihjLG49dFt1KytdKSYmKH5pKHMsbil8fHMucHVzaChuKSk7cmV0dXJuIHN9fSwienErQyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5tYXAsYz1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6aShhcmd1bWVudHNbMl0pLHI9YShvKHQpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIHU9Yy5nZXQodCk7cmV0dXJuIHUuZGVsZXRlKG4pLCEhdS5zaXplfHxjLmRlbGV0ZSh0KX19KX19LFtbMyw1XV1dKTshZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZS5kb2N1bWVudCxyPWUuT2JqZWN0LG89ZnVuY3Rpb24oZSl7dmFyIHQsbixvLGwsYT0vXltBLVpdK1thLXpdLyxpPWZ1bmN0aW9uKGUsdCl7KHQ9dC50b0xvd2VyQ2FzZSgpKWluIHV8fCh1W2VdPSh1W2VdfHxbXSkuY29uY2F0KHQpLHVbdF09dVt0LnRvVXBwZXJDYXNlKCldPWUpfSx1PShyLmNyZWF0ZXx8cikobnVsbCksYz17fTtmb3IobiBpbiBlKWZvcihsIGluIGVbbl0pZm9yKHVbbF09bz1lW25dW2xdLHQ9MDt0PG8ubGVuZ3RoO3QrKyl1W29bdF0udG9Mb3dlckNhc2UoKV09dVtvW3RdLnRvVXBwZXJDYXNlKCldPWw7cmV0dXJuIGMuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT91W2VdfHwoYS50ZXN0KGUpP1tdOiIiKTpmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0IGluIHUpZS50ZXN0KHQpJiZuLnB1c2godCk7cmV0dXJuIG59KGUpfSxjLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBhLnRlc3QoZSk/aShlLHQpOmkodCxlKSxjfSxjfSh7Y29sbGVjdGlvbnM6e0hUTUxBbGxDb2xsZWN0aW9uOlsiYWxsIl0sSFRNTENvbGxlY3Rpb246WyJmb3JtcyJdLEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOlsiZWxlbWVudHMiXSxIVE1MT3B0aW9uc0NvbGxlY3Rpb246WyJvcHRpb25zIl19LGVsZW1lbnRzOntFbGVtZW50OlsiZWxlbWVudCJdLEhUTUxBbmNob3JFbGVtZW50OlsiYSJdLEhUTUxBcHBsZXRFbGVtZW50OlsiYXBwbGV0Il0sSFRNTEFyZWFFbGVtZW50OlsiYXJlYSJdLEhUTUxBdHRhY2htZW50RWxlbWVudDpbImF0dGFjaG1lbnQiXSxIVE1MQXVkaW9FbGVtZW50OlsiYXVkaW8iXSxIVE1MQlJFbGVtZW50OlsiYnIiXSxIVE1MQmFzZUVsZW1lbnQ6WyJiYXNlIl0sSFRNTEJvZHlFbGVtZW50OlsiYm9keSJdLEhUTUxCdXR0b25FbGVtZW50OlsiYnV0dG9uIl0sSFRNTENhbnZhc0VsZW1lbnQ6WyJjYW52YXMiXSxIVE1MQ29udGVudEVsZW1lbnQ6WyJjb250ZW50Il0sSFRNTERMaXN0RWxlbWVudDpbImRsIl0sSFRNTERhdGFFbGVtZW50OlsiZGF0YSJdLEhUTUxEYXRhTGlzdEVsZW1lbnQ6WyJkYXRhbGlzdCJdLEhUTUxEZXRhaWxzRWxlbWVudDpbImRldGFpbHMiXSxIVE1MRGlhbG9nRWxlbWVudDpbImRpYWxvZyJdLEhUTUxEaXJlY3RvcnlFbGVtZW50OlsiZGlyIl0sSFRNTERpdkVsZW1lbnQ6WyJkaXYiXSxIVE1MRG9jdW1lbnQ6WyJkb2N1bWVudCJdLEhUTUxFbGVtZW50OlsiZWxlbWVudCIsImFiYnIiLCJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYiIsImJkaSIsImJkbyIsImNpdGUiLCJjb2RlIiwiY29tbWFuZCIsImRkIiwiZGZuIiwiZHQiLCJlbSIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJoZWFkZXIiLCJpIiwia2JkIiwibWFyayIsIm5hdiIsIm5vc2NyaXB0IiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzbWFsbCIsInN0cm9uZyIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ1IiwidmFyIiwid2JyIl0sSFRNTEVtYmVkRWxlbWVudDpbImVtYmVkIl0sSFRNTEZpZWxkU2V0RWxlbWVudDpbImZpZWxkc2V0Il0sSFRNTEZvbnRFbGVtZW50OlsiZm9udCJdLEhUTUxGb3JtRWxlbWVudDpbImZvcm0iXSxIVE1MRnJhbWVFbGVtZW50OlsiZnJhbWUiXSxIVE1MRnJhbWVTZXRFbGVtZW50OlsiZnJhbWVzZXQiXSxIVE1MSFJFbGVtZW50OlsiaHIiXSxIVE1MSGVhZEVsZW1lbnQ6WyJoZWFkIl0sSFRNTEhlYWRpbmdFbGVtZW50OlsiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Il0sSFRNTEh0bWxFbGVtZW50OlsiaHRtbCJdLEhUTUxJRnJhbWVFbGVtZW50OlsiaWZyYW1lIl0sSFRNTEltYWdlRWxlbWVudDpbImltZyJdLEhUTUxJbnB1dEVsZW1lbnQ6WyJpbnB1dCJdLEhUTUxLZXlnZW5FbGVtZW50Olsia2V5Z2VuIl0sSFRNTExJRWxlbWVudDpbImxpIl0sSFRNTExhYmVsRWxlbWVudDpbImxhYmVsIl0sSFRNTExlZ2VuZEVsZW1lbnQ6WyJsZWdlbmQiXSxIVE1MTGlua0VsZW1lbnQ6WyJsaW5rIl0sSFRNTE1hcEVsZW1lbnQ6WyJtYXAiXSxIVE1MTWFycXVlZUVsZW1lbnQ6WyJtYXJxdWVlIl0sSFRNTE1lZGlhRWxlbWVudDpbIm1lZGlhIl0sSFRNTE1lbnVFbGVtZW50OlsibWVudSJdLEhUTUxNZW51SXRlbUVsZW1lbnQ6WyJtZW51aXRlbSJdLEhUTUxNZXRhRWxlbWVudDpbIm1ldGEiXSxIVE1MTWV0ZXJFbGVtZW50OlsibWV0ZXIiXSxIVE1MTW9kRWxlbWVudDpbImRlbCIsImlucyJdLEhUTUxPTGlzdEVsZW1lbnQ6WyJvbCJdLEhUTUxPYmplY3RFbGVtZW50Olsib2JqZWN0Il0sSFRNTE9wdEdyb3VwRWxlbWVudDpbIm9wdGdyb3VwIl0sSFRNTE9wdGlvbkVsZW1lbnQ6WyJvcHRpb24iXSxIVE1MT3V0cHV0RWxlbWVudDpbIm91dHB1dCJdLEhUTUxQYXJhZ3JhcGhFbGVtZW50OlsicCJdLEhUTUxQYXJhbUVsZW1lbnQ6WyJwYXJhbSJdLEhUTUxQaWN0dXJlRWxlbWVudDpbInBpY3R1cmUiXSxIVE1MUHJlRWxlbWVudDpbInByZSJdLEhUTUxQcm9ncmVzc0VsZW1lbnQ6WyJwcm9ncmVzcyJdLEhUTUxRdW90ZUVsZW1lbnQ6WyJibG9ja3F1b3RlIiwicSIsInF1b3RlIl0sSFRNTFNjcmlwdEVsZW1lbnQ6WyJzY3JpcHQiXSxIVE1MU2VsZWN0RWxlbWVudDpbInNlbGVjdCJdLEhUTUxTaGFkb3dFbGVtZW50Olsic2hhZG93Il0sSFRNTFNsb3RFbGVtZW50Olsic2xvdCJdLEhUTUxTb3VyY2VFbGVtZW50Olsic291cmNlIl0sSFRNTFNwYW5FbGVtZW50Olsic3BhbiJdLEhUTUxTdHlsZUVsZW1lbnQ6WyJzdHlsZSJdLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OlsiY2FwdGlvbiJdLEhUTUxUYWJsZUNlbGxFbGVtZW50OlsidGQiLCJ0aCJdLEhUTUxUYWJsZUNvbEVsZW1lbnQ6WyJjb2wiLCJjb2xncm91cCJdLEhUTUxUYWJsZUVsZW1lbnQ6WyJ0YWJsZSJdLEhUTUxUYWJsZVJvd0VsZW1lbnQ6WyJ0ciJdLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OlsidGhlYWQiLCJ0Ym9keSIsInRmb290Il0sSFRNTFRlbXBsYXRlRWxlbWVudDpbInRlbXBsYXRlIl0sSFRNTFRleHRBcmVhRWxlbWVudDpbInRleHRhcmVhIl0sSFRNTFRpbWVFbGVtZW50OlsidGltZSJdLEhUTUxUaXRsZUVsZW1lbnQ6WyJ0aXRsZSJdLEhUTUxUcmFja0VsZW1lbnQ6WyJ0cmFjayJdLEhUTUxVTGlzdEVsZW1lbnQ6WyJ1bCJdLEhUTUxVbmtub3duRWxlbWVudDpbInVua25vd24iLCJ2aGdyb3VwdiIsInZrZXlnZW4iXSxIVE1MVmlkZW9FbGVtZW50OlsidmlkZW8iXX0sbm9kZXM6e0F0dHI6WyJub2RlIl0sQXVkaW86WyJhdWRpbyJdLENEQVRBU2VjdGlvbjpbIm5vZGUiXSxDaGFyYWN0ZXJEYXRhOlsibm9kZSJdLENvbW1lbnQ6WyIjY29tbWVudCJdLERvY3VtZW50OlsiI2RvY3VtZW50Il0sRG9jdW1lbnRGcmFnbWVudDpbIiNkb2N1bWVudC1mcmFnbWVudCJdLERvY3VtZW50VHlwZTpbIm5vZGUiXSxIVE1MRG9jdW1lbnQ6WyIjZG9jdW1lbnQiXSxJbWFnZTpbImltZyJdLE9wdGlvbjpbIm9wdGlvbiJdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbIm5vZGUiXSxTaGFkb3dSb290OlsiI3NoYWRvdy1yb290Il0sVGV4dDpbIiN0ZXh0Il0sWE1MRG9jdW1lbnQ6WyJ4bWwiXX19KTsib2JqZWN0IiE9dHlwZW9mIHQmJih0PXt0eXBlOnR8fCJhdXRvIn0pO3ZhciBsLGEsaSx1LGMscyxtLGYscCxkPSJyZWdpc3RlckVsZW1lbnQiLGg9Il9fIitkKygxZTUqZS5NYXRoLnJhbmRvbSgpPj4wKSxUPSJhZGRFdmVudExpc3RlbmVyIixMPSJhdHRhY2hlZCIsTT0iQ2FsbGJhY2siLEU9ImRldGFjaGVkIix2PSJleHRlbmRzIixIPSJhdHRyaWJ1dGVDaGFuZ2VkIitNLGc9TCtNLGI9ImNvbm5lY3RlZCIrTSx5PSJkaXNjb25uZWN0ZWQiK00sQz0iY3JlYXRlZCIrTSx3PUUrTSxBPSJBRERJVElPTiIsTz0iUkVNT1ZBTCIsTj0iRE9NQXR0ck1vZGlmaWVkIixEPSJET01Db250ZW50TG9hZGVkIixJPSJET01TdWJ0cmVlTW9kaWZpZWQiLEY9IjwiLFM9Ij0iLFY9L15bQS1aXVtBLVowLTldKig/Oi1bQS1aMC05XSspKyQvLFA9WyJBTk5PVEFUSU9OLVhNTCIsIkNPTE9SLVBST0ZJTEUiLCJGT05ULUZBQ0UiLCJGT05ULUZBQ0UtU1JDIiwiRk9OVC1GQUNFLVVSSSIsIkZPTlQtRkFDRS1GT1JNQVQiLCJGT05ULUZBQ0UtTkFNRSIsIk1JU1NJTkctR0xZUEgiXSxSPVtdLFU9W10saz0iIixfPW4uZG9jdW1lbnRFbGVtZW50LHE9Ui5pbmRleE9mfHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGg7dC0tJiZ0aGlzW3RdIT09ZTspO3JldHVybiB0fSx4PXIucHJvdG90eXBlLEI9eC5oYXNPd25Qcm9wZXJ0eSxaPXguaXNQcm90b3R5cGVPZixqPXIuZGVmaW5lUHJvcGVydHksRz1bXSx6PXIuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEs9ci5nZXRPd25Qcm9wZXJ0eU5hbWVzLFg9ci5nZXRQcm90b3R5cGVPZiwkPXIuc2V0UHJvdG90eXBlT2YsUT0hIXIuX19wcm90b19fLFc9Il9fZHJlQ0V2MSIsWT1lLmN1c3RvbUVsZW1lbnRzLEo9IS9eZm9yY2UvLnRlc3QodC50eXBlKSYmISEoWSYmWS5kZWZpbmUmJlkuZ2V0JiZZLndoZW5EZWZpbmVkKSxlZT1yLmNyZWF0ZXx8cix0ZT1lLk1hcHx8ZnVuY3Rpb24oKXt2YXIgZSx0PVtdLG49W107cmV0dXJue2dldDpmdW5jdGlvbihlKXtyZXR1cm4gbltxLmNhbGwodCxlKV19LHNldDpmdW5jdGlvbihyLG8peyhlPXEuY2FsbCh0LHIpKTwwP25bdC5wdXNoKHIpLTFdPW86bltlXT1vfX19LG5lPWUuUHJvbWlzZXx8ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0hMSxyPXtjYXRjaDpmdW5jdGlvbigpe3JldHVybiByfSx0aGVuOmZ1bmN0aW9uKGUpe3JldHVybiB0LnB1c2goZSksbiYmc2V0VGltZW91dChvLDEpLHJ9fTtmdW5jdGlvbiBvKGUpe2ZvcihuPSEwO3QubGVuZ3RoOyl0LnNoaWZ0KCkoZSl9cmV0dXJuIGUobykscn0scmU9ITEsb2U9ZWUobnVsbCksbGU9ZWUobnVsbCksYWU9bmV3IHRlLGllPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHVlPXIuY3JlYXRlfHxmdW5jdGlvbiBlKHQpe3JldHVybiB0PyhlLnByb3RvdHlwZT10LG5ldyBlKTp0aGlzfSxjZT0kfHwoUT9mdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9OksmJno/ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuLHI9Syh0KSxvPTAsbD1yLmxlbmd0aDtvPGw7bysrKUIuY2FsbChlLG49cltvXSl8fGooZSxuLHoodCxuKSl9cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZG97ZSh0LG4pfXdoaWxlKChuPVgobikpJiYhWi5jYWxsKG4sdCkpO3JldHVybiB0fX0oKTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX0pLHNlPWUuTXV0YXRpb25PYnNlcnZlcnx8ZS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLG1lPShlLkhUTUxFbGVtZW50fHxlLkVsZW1lbnR8fGUuTm9kZSkucHJvdG90eXBlLGZlPSFaLmNhbGwobWUsXykscGU9ZmU/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4udmFsdWUsZX06aixkZT1mZT9mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9OmZ1bmN0aW9uKGUpe3JldHVybiBaLmNhbGwobWUsZSl9LGhlPWZlJiZbXSxUZT1tZS5hdHRhY2hTaGFkb3csTGU9bWUuY2xvbmVOb2RlLE1lPW1lLmRpc3BhdGNoRXZlbnQsRWU9bWUuZ2V0QXR0cmlidXRlLHZlPW1lLmhhc0F0dHJpYnV0ZSxIZT1tZS5yZW1vdmVBdHRyaWJ1dGUsZ2U9bWUuc2V0QXR0cmlidXRlLGJlPW4uY3JlYXRlRWxlbWVudCx5ZT1iZSxDZT1zZSYme2F0dHJpYnV0ZXM6ITAsY2hhcmFjdGVyRGF0YTohMCxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0sd2U9c2V8fGZ1bmN0aW9uKGUpe0llPSExLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihOLHdlKX0sQWU9MCxPZT1kIGluIG4mJiEvXmZvcmNlLWFsbC8udGVzdCh0LnR5cGUpLE5lPSEwLERlPSExLEllPSEwLEZlPSEwLFNlPSEwO2Z1bmN0aW9uIFZlKCl7dmFyIGU9bC5zcGxpY2UoMCxsLmxlbmd0aCk7Zm9yKEFlPTA7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jYWxsKG51bGwsZS5zaGlmdCgpKX1mdW5jdGlvbiBQZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylHZShlW25dLHQpfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBmdW5jdGlvbih0KXtkZSh0KSYmKEdlKHQsZSksay5sZW5ndGgmJlBlKHQucXVlcnlTZWxlY3RvckFsbChrKSxlKSl9fWZ1bmN0aW9uIFVlKGUpe3ZhciB0PUVlLmNhbGwoZSwiaXMiKSxuPWUubm9kZU5hbWUudG9VcHBlckNhc2UoKSxyPXEuY2FsbChSLHQ/Uyt0LnRvVXBwZXJDYXNlKCk6RituKTtyZXR1cm4gdCYmLTE8ciYmIWtlKG4sdCk/LTE6cn1mdW5jdGlvbiBrZShlLHQpe3JldHVybi0xPGsuaW5kZXhPZihlKydbaXM9IicrdCsnIl0nKX1mdW5jdGlvbiBfZShlKXt2YXIgdD1lLmN1cnJlbnRUYXJnZXQsbj1lLmF0dHJDaGFuZ2Uscj1lLmF0dHJOYW1lLG89ZS50YXJnZXQsbD1lW0FdfHwyLGE9ZVtPXXx8MzshU2V8fG8mJm8hPT10fHwhdFtIXXx8InN0eWxlIj09PXJ8fGUucHJldlZhbHVlPT09ZS5uZXdWYWx1ZSYmKCIiIT09ZS5uZXdWYWx1ZXx8biE9PWwmJm4hPT1hKXx8dFtIXShyLG49PT1sP251bGw6ZS5wcmV2VmFsdWUsbj09PWE/bnVsbDplLm5ld1ZhbHVlKX1mdW5jdGlvbiBxZShlKXt2YXIgdD1SZShlKTtyZXR1cm4gZnVuY3Rpb24oZSl7bC5wdXNoKHQsZS50YXJnZXQpLEFlJiZjbGVhclRpbWVvdXQoQWUpLEFlPXNldFRpbWVvdXQoVmUsMSl9fWZ1bmN0aW9uIHhlKGUpe0ZlJiYoRmU9ITEsZS5jdXJyZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoRCx4ZSkpLGsubGVuZ3RoJiZQZSgoZS50YXJnZXR8fG4pLnF1ZXJ5U2VsZWN0b3JBbGwoayksZS5kZXRhaWw9PT1FP0U6TCksZmUmJmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxuPWhlLmxlbmd0aDt0PG47dCsrKV8uY29udGFpbnMoZT1oZVt0XSl8fChuLS0saGUuc3BsaWNlKHQtLSwxKSxHZShlLEUpKX0oKX1mdW5jdGlvbiBCZShlLHQpe2dlLmNhbGwodGhpcyxlLHQpLGEuY2FsbCh0aGlzLHt0YXJnZXQ6dGhpc30pfWZ1bmN0aW9uIFplKGUsdCl7Y2UoZSx0KSxjP2Mub2JzZXJ2ZShlLENlKTooSWUmJihlLnNldEF0dHJpYnV0ZT1CZSxlW2hdPXUoZSksZVtUXShJLGEpKSxlW1RdKE4sX2UpKSxlW0NdJiZTZSYmKGUuY3JlYXRlZD0hMCxlW0NdKCksZS5jcmVhdGVkPSExKX1mdW5jdGlvbiBqZShlKXt0aHJvdyBuZXcgRXJyb3IoIkEgIitlKyIgdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiKX1mdW5jdGlvbiBHZShlLHQpe3ZhciBuLHIsbz1VZShlKTstMTxvJiYobShlLFVbb10pLG89MCx0IT09THx8ZVtMXT90IT09RXx8ZVtFXXx8KGVbTF09ITEsZVtFXT0hMCxyPSJkaXNjb25uZWN0ZWQiLG89MSk6KGVbRV09ITEsZVtMXT0hMCxyPSJjb25uZWN0ZWQiLG89MSxmZSYmcS5jYWxsKGhlLGUpPDAmJmhlLnB1c2goZSkpLG8mJihuPWVbdCtNXXx8ZVtyK01dKSYmbi5jYWxsKGUpKX1mdW5jdGlvbiB6ZSgpe31mdW5jdGlvbiBLZShlLHQscil7dmFyIG89ciYmclt2XXx8IiIsbD10LnByb3RvdHlwZSxhPXVlKGwpLGk9dC5vYnNlcnZlZEF0dHJpYnV0ZXN8fEcsdT17cHJvdG90eXBlOmF9O3BlKGEsQyx7dmFsdWU6ZnVuY3Rpb24oKXtpZihyZSlyZT0hMTtlbHNlIGlmKCF0aGlzW1ddKXt0aGlzW1ddPSEwLG5ldyB0KHRoaXMpLGxbQ10mJmxbQ10uY2FsbCh0aGlzKTt2YXIgZT1vZVthZS5nZXQodCldOyghSnx8ZS5jcmVhdGUubGVuZ3RoPjEpJiZRZSh0aGlzKX19fSkscGUoYSxILHt2YWx1ZTpmdW5jdGlvbihlKXstMTxxLmNhbGwoaSxlKSYmbFtIXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSksbFtiXSYmcGUoYSxnLHt2YWx1ZTpsW2JdfSksbFt5XSYmcGUoYSx3LHt2YWx1ZTpsW3ldfSksbyYmKHVbdl09byksZT1lLnRvVXBwZXJDYXNlKCksb2VbZV09e2NvbnN0cnVjdG9yOnQsY3JlYXRlOm8/W28saWUoZSldOltlXX0sYWUuc2V0KHQsZSksbltkXShlLnRvTG93ZXJDYXNlKCksdSksV2UoZSksbGVbZV0ucigpfWZ1bmN0aW9uIFhlKGUpe3ZhciB0PW9lW2UudG9VcHBlckNhc2UoKV07cmV0dXJuIHQmJnQuY29uc3RydWN0b3J9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSYmZS5pc3x8IiJ9ZnVuY3Rpb24gUWUoZSl7Zm9yKHZhciB0LG49ZVtIXSxyPW4/ZS5hdHRyaWJ1dGVzOkcsbz1yLmxlbmd0aDtvLS07KW4uY2FsbChlLCh0PXJbb10pLm5hbWV8fHQubm9kZU5hbWUsbnVsbCx0LnZhbHVlfHx0Lm5vZGVWYWx1ZSl9ZnVuY3Rpb24gV2UoZSl7cmV0dXJuKGU9ZS50b1VwcGVyQ2FzZSgpKWluIGxlfHwobGVbZV09e30sbGVbZV0ucD1uZXcgbmUoZnVuY3Rpb24odCl7bGVbZV0ucj10fSkpLGxlW2VdLnB9ZnVuY3Rpb24gWWUoKXtZJiZkZWxldGUgZS5jdXN0b21FbGVtZW50cyxqKGUsImN1c3RvbUVsZW1lbnRzIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm5ldyB6ZX0pLGooZSwiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Iix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnplfSk7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciByPWVbdF07aWYocil7ZVt0XT1mdW5jdGlvbihlKXt2YXIgdCxvO3JldHVybiBlfHwoZT10aGlzKSxlW1ddfHwocmU9ITAsdD1vZVthZS5nZXQoZS5jb25zdHJ1Y3RvcildLChlPShvPUomJjE9PT10LmNyZWF0ZS5sZW5ndGgpP1JlZmxlY3QuY29uc3RydWN0KHIsRyx0LmNvbnN0cnVjdG9yKTpuLmNyZWF0ZUVsZW1lbnQuYXBwbHkobix0LmNyZWF0ZSkpW1ddPSEwLHJlPSExLG98fFFlKGUpKSxlfSxlW3RdLnByb3RvdHlwZT1yLnByb3RvdHlwZTt0cnl7ci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZVt0XX1jYXRjaChuKXtqKHIsVyx7dmFsdWU6ZVt0XX0pfX19LHI9by5nZXQoL15IVE1MW0EtWl0qW2Etel0vKSxsPXIubGVuZ3RoO2wtLTt0KHJbbF0pKTtuLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0kZSh0KTtyZXR1cm4gbj95ZS5jYWxsKHRoaXMsZSxpZShuKSk6eWUuY2FsbCh0aGlzLGUpfSxPZXx8KERlPSEwLG5bZF0oIiIpKX1pZihzZSYmKChwPW4uY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD0iPGRpdj48ZGl2PjwvZGl2PjwvZGl2PiIsbmV3IHNlKGZ1bmN0aW9uKGUsdCl7aWYoZVswXSYmImNoaWxkTGlzdCI9PWVbMF0udHlwZSYmIWVbMF0ucmVtb3ZlZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgbj0ocD16KG1lLCJpbm5lckhUTUwiKSkmJnAuc2V0O24mJmoobWUsImlubmVySFRNTCIse3NldDpmdW5jdGlvbihlKXtmb3IoO3RoaXMubGFzdENoaWxkOyl0aGlzLnJlbW92ZUNoaWxkKHRoaXMubGFzdENoaWxkKTtuLmNhbGwodGhpcyxlKX19KX10LmRpc2Nvbm5lY3QoKSxwPW51bGx9KS5vYnNlcnZlKHAse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSkscC5pbm5lckhUTUw9IiIpLE9lfHwoJHx8UT8obT1mdW5jdGlvbihlLHQpe1ouY2FsbCh0LGUpfHxaZShlLHQpfSxmPVplKTpmPW09ZnVuY3Rpb24oZSx0KXtlW2hdfHwoZVtoXT1yKCEwKSxaZShlLHQpKX0sZmU/KEllPSExLGZ1bmN0aW9uKCl7dmFyIGU9eihtZSxUKSx0PWUudmFsdWUsbj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQ3VzdG9tRXZlbnQoTix7YnViYmxlczohMH0pO3QuYXR0ck5hbWU9ZSx0LnByZXZWYWx1ZT1FZS5jYWxsKHRoaXMsZSksdC5uZXdWYWx1ZT1udWxsLHRbT109dC5hdHRyQ2hhbmdlPTIsSGUuY2FsbCh0aGlzLGUpLE1lLmNhbGwodGhpcyx0KX0scj1mdW5jdGlvbihlLHQpe3ZhciBuPXZlLmNhbGwodGhpcyxlKSxyPW4mJkVlLmNhbGwodGhpcyxlKSxvPW5ldyBDdXN0b21FdmVudChOLHtidWJibGVzOiEwfSk7Z2UuY2FsbCh0aGlzLGUsdCksby5hdHRyTmFtZT1lLG8ucHJldlZhbHVlPW4/cjpudWxsLG8ubmV3VmFsdWU9dCxuP28uTU9ESUZJQ0FUSU9OPW8uYXR0ckNoYW5nZT0xOm9bQV09by5hdHRyQ2hhbmdlPTAsTWUuY2FsbCh0aGlzLG8pfSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jdXJyZW50VGFyZ2V0LHI9bltoXSxvPWUucHJvcGVydHlOYW1lO3IuaGFzT3duUHJvcGVydHkobykmJihyPXJbb10sKHQ9bmV3IEN1c3RvbUV2ZW50KE4se2J1YmJsZXM6ITB9KSkuYXR0ck5hbWU9ci5uYW1lLHQucHJldlZhbHVlPXIudmFsdWV8fG51bGwsdC5uZXdWYWx1ZT1yLnZhbHVlPW5bb118fG51bGwsbnVsbD09dC5wcmV2VmFsdWU/dFtBXT10LmF0dHJDaGFuZ2U9MDp0Lk1PRElGSUNBVElPTj10LmF0dHJDaGFuZ2U9MSxNZS5jYWxsKG4sdCkpfTtlLnZhbHVlPWZ1bmN0aW9uKGUsbCxhKXtlPT09TiYmdGhpc1tIXSYmdGhpcy5zZXRBdHRyaWJ1dGUhPT1yJiYodGhpc1toXT17Y2xhc3NOYW1lOntuYW1lOiJjbGFzcyIsdmFsdWU6dGhpcy5jbGFzc05hbWV9fSx0aGlzLnNldEF0dHJpYnV0ZT1yLHRoaXMucmVtb3ZlQXR0cmlidXRlPW4sdC5jYWxsKHRoaXMsInByb3BlcnR5Y2hhbmdlIixvKSksdC5jYWxsKHRoaXMsZSxsLGEpfSxqKG1lLFQsZSl9KCkpOnNlfHwoX1tUXShOLHdlKSxfLnNldEF0dHJpYnV0ZShoLDEpLF8ucmVtb3ZlQXR0cmlidXRlKGgpLEllJiYoYT1mdW5jdGlvbihlKXt2YXIgdCxuLHI7aWYodGhpcz09PWUudGFyZ2V0KXtmb3IociBpbiB0PXRoaXNbaF0sdGhpc1toXT1uPXUodGhpcyksbil7aWYoIShyIGluIHQpKXJldHVybiBpKDAsdGhpcyxyLHRbcl0sbltyXSxBKTtpZihuW3JdIT09dFtyXSlyZXR1cm4gaSgxLHRoaXMscix0W3JdLG5bcl0sIk1PRElGSUNBVElPTiIpfWZvcihyIGluIHQpaWYoIShyIGluIG4pKXJldHVybiBpKDIsdGhpcyxyLHRbcl0sbltyXSxPKX19LGk9ZnVuY3Rpb24oZSx0LG4scixvLGwpe3ZhciBhPXthdHRyQ2hhbmdlOmUsY3VycmVudFRhcmdldDp0LGF0dHJOYW1lOm4scHJldlZhbHVlOnIsbmV3VmFsdWU6b307YVtsXT1lLF9lKGEpfSx1PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9e30sbz1lLmF0dHJpYnV0ZXMsbD0wLGE9by5sZW5ndGg7bDxhO2wrKykic2V0QXR0cmlidXRlIiE9PShuPSh0PW9bbF0pLm5hbWUpJiYocltuXT10LnZhbHVlKTtyZXR1cm4gcn0pKSxuW2RdPWZ1bmN0aW9uKGUsdCl7aWYocj1lLnRvVXBwZXJDYXNlKCksTmUmJihOZT0hMSxzZT8oYz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjt0KGVbbisrXSkpO31yZXR1cm4gbmV3IHNlKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbyxsLGEsaT0wLHU9ci5sZW5ndGg7aTx1O2krKykiY2hpbGRMaXN0Ij09PShvPXJbaV0pLnR5cGU/KG4oby5hZGRlZE5vZGVzLGUpLG4oby5yZW1vdmVkTm9kZXMsdCkpOihsPW8udGFyZ2V0LFNlJiZsW0hdJiYic3R5bGUiIT09by5hdHRyaWJ1dGVOYW1lJiYoYT1FZS5jYWxsKGwsby5hdHRyaWJ1dGVOYW1lKSkhPT1vLm9sZFZhbHVlJiZsW0hdKG8uYXR0cmlidXRlTmFtZSxvLm9sZFZhbHVlLGEpKX0pfShSZShMKSxSZShFKSksKHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGMub2JzZXJ2ZShlLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGV9KShuKSxUZSYmKG1lLmF0dGFjaFNoYWRvdz1mdW5jdGlvbigpe3JldHVybiBzKFRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSk6KGw9W10sbltUXSgiRE9NTm9kZUluc2VydGVkIixxZShMKSksbltUXSgiRE9NTm9kZVJlbW92ZWQiLHFlKEUpKSksbltUXShELHhlKSxuW1RdKCJyZWFkeXN0YXRlY2hhbmdlIix4ZSksbWUuY2xvbmVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PUxlLmNhbGwodGhpcywhIWUpLG49VWUodCk7cmV0dXJuLTE8biYmZih0LFVbbl0pLGUmJmsubGVuZ3RoJiZmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylmKHQ9ZVtuXSxVW1VlKHQpXSl9KHQucXVlcnlTZWxlY3RvckFsbChrKSksdH0pLERlKXJldHVybiBEZT0hMTtpZigtMjxxLmNhbGwoUixTK3IpK3EuY2FsbChSLEYrcikmJmplKGUpLCFWLnRlc3Qocil8fC0xPHEuY2FsbChQLHIpKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgIitlKyIgaXMgaW52YWxpZCIpO3ZhciByLG8sYT1mdW5jdGlvbigpe3JldHVybiB1P24uY3JlYXRlRWxlbWVudChtLHIpOm4uY3JlYXRlRWxlbWVudChtKX0saT10fHx4LHU9Qi5jYWxsKGksdiksbT11P3Rbdl0udG9VcHBlckNhc2UoKTpyO3JldHVybiB1JiYtMTxxLmNhbGwoUixGK20pJiZqZShtKSxvPVIucHVzaCgodT9TOkYpK3IpLTEsaz1rLmNvbmNhdChrLmxlbmd0aD8iLCI6IiIsdT9tKydbaXM9IicrZS50b0xvd2VyQ2FzZSgpKyciXSc6bSksYS5wcm90b3R5cGU9VVtvXT1CLmNhbGwoaSwicHJvdG90eXBlIik/aS5wcm90b3R5cGU6dWUobWUpLGsubGVuZ3RoJiZQZShuLnF1ZXJ5U2VsZWN0b3JBbGwoayksTCksYX0sbi5jcmVhdGVFbGVtZW50PXllPWZ1bmN0aW9uKGUsdCl7dmFyIHI9JGUodCksbz1yP2JlLmNhbGwobixlLGllKHIpKTpiZS5jYWxsKG4sZSksbD0iIitlLGE9cS5jYWxsKFIsKHI/UzpGKSsocnx8bCkudG9VcHBlckNhc2UoKSksaT0tMTxhO3JldHVybiByJiYoby5zZXRBdHRyaWJ1dGUoImlzIixyPXIudG9Mb3dlckNhc2UoKSksaSYmKGk9a2UobC50b1VwcGVyQ2FzZSgpLHIpKSksU2U9IW4uY3JlYXRlRWxlbWVudC5pbm5lckhUTUxIZWxwZXIsaSYmZihvLFVbYV0pLG99KSx6ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnplLGRlZmluZTpKP2Z1bmN0aW9uKGUsdCxuKXtpZihuKUtlKGUsdCxuKTtlbHNle3ZhciByPWUudG9VcHBlckNhc2UoKTtvZVtyXT17Y29uc3RydWN0b3I6dCxjcmVhdGU6W3JdfSxhZS5zZXQodCxyKSxZLmRlZmluZShlLHQpfX06S2UsZ2V0Oko/ZnVuY3Rpb24oZSl7cmV0dXJuIFkuZ2V0KGUpfHxYZShlKX06WGUsd2hlbkRlZmluZWQ6Sj9mdW5jdGlvbihlKXtyZXR1cm4gbmUucmFjZShbWS53aGVuRGVmaW5lZChlKSxXZShlKV0pfTpXZX0sIVl8fC9eZm9yY2UvLnRlc3QodC50eXBlKSlZZSgpO2Vsc2UgaWYoIXQubm9CdWlsdEluKXRyeXshZnVuY3Rpb24odCxyLG8pe3ZhciBsPW5ldyBSZWdFeHAoIl48YVxccytpcz0oJ3xcIikiK28rIlxcMT48L2E+JCIpO2lmKHJbdl09ImEiLCh0LnByb3RvdHlwZT11ZShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj10LGUuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG8sdCxyKSwhbC50ZXN0KG4uY3JlYXRlRWxlbWVudCgiYSIse2lzOm99KS5vdXRlckhUTUwpfHwhbC50ZXN0KChuZXcgdCkub3V0ZXJIVE1MKSl0aHJvdyByfShmdW5jdGlvbiBlKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxBbmNob3JFbGVtZW50LFtdLGUpfSx7fSwiZG9jdW1lbnQtcmVnaXN0ZXItZWxlbWVudC1hIil9Y2F0Y2goZSl7WWUoKX1pZighdC5ub0J1aWx0SW4pdHJ5e2JlLmNhbGwobiwiYSIsImEiKX1jYXRjaChlKXtpZT1mdW5jdGlvbihlKXtyZXR1cm57aXM6ZS50b0xvd2VyQ2FzZSgpfX19fSh3aW5kb3cpOyh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbNl0seyIrdEo0IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpJiYhZS5jbG9zZWQ7bisrKWUubmV4dCh0W25dKTtlLmNsb3NlZHx8ZS5jb21wbGV0ZSgpfX19LCIrdW1LIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoKXt9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sIi9WWUsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBwfSk7dmFyIGk9bigiZFdaZyIpLHI9bigiQ2NuRyIpLG89bigiRzVKMSIpLGE9bigiSzlJYSIpLHM9bigiYm5lNSIpLHU9bigibjZnRyIpLGw9bigiUm5leSIpLGM9bigibnkyNCIpLGY9ISFPYmplY3QoaS5kKSgpJiZ7cGFzc2l2ZTohMH0saD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX25nWm9uZT1lLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLm1vbml0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiBvLmE7dmFyIG49dGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZ2V0KHQpO2lmKG4pcmV0dXJuIG4uc3ViamVjdC5hc09ic2VydmFibGUoKTt2YXIgaT1uZXcgYS5hLHI9ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiLHM9ZnVuY3Rpb24obil7ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IiE9PW4uYW5pbWF0aW9uTmFtZXx8dC5jbGFzc0xpc3QuY29udGFpbnMocik/ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1uLmFuaW1hdGlvbk5hbWUmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKHIpJiYodC5jbGFzc0xpc3QucmVtb3ZlKHIpLGUuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gaS5uZXh0KHt0YXJnZXQ6bi50YXJnZXQsaXNBdXRvZmlsbGVkOiExfSl9KSk6KHQuY2xhc3NMaXN0LmFkZChyKSxlLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dCh7dGFyZ2V0Om4udGFyZ2V0LGlzQXV0b2ZpbGxlZDohMH0pfSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIscyxmKSx0LmNsYXNzTGlzdC5hZGQoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpfSksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuc2V0KHQse3N1YmplY3Q6aSx1bmxpc3RlbjpmdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLHMsZil9fSksaS5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuc3RvcE1vbml0b3Jpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZ2V0KHQpO2UmJihlLnVubGlzdGVuKCksZS5zdWJqZWN0LmNvbXBsZXRlKCksdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQiKSx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiKSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5kZWxldGUodCkpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnN0b3BNb25pdG9yaW5nKG4pfSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlkpKGkuYSksT2JqZWN0KHIuWSkoci56KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kZXN0cm95ZWQ9bmV3IGEuYSx0aGlzLl9lbmFibGVkPSEwLHRoaXMuX3RleHRhcmVhRWxlbWVudD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibWluUm93cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5Sb3dzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbWluUm93cz10LHRoaXMuX3NldE1pbkhlaWdodCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibWF4Um93cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhSb3dzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbWF4Um93cz10LHRoaXMuX3NldE1heEhlaWdodCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dD1PYmplY3QodS5jKSh0KSx0aGlzLl9lbmFibGVkIT09dCYmKCh0aGlzLl9lbmFibGVkPXQpP3RoaXMucmVzaXplVG9GaXRDb250ZW50KCEwKTp0aGlzLnJlc2V0KCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9zZXRNaW5IZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1pblJvd3MmJnRoaXMuX2NhY2hlZExpbmVIZWlnaHQ/dGhpcy5taW5Sb3dzKnRoaXMuX2NhY2hlZExpbmVIZWlnaHQrInB4IjpudWxsO3QmJnRoaXMuX3NldFRleHRhcmVhU3R5bGUoIm1pbkhlaWdodCIsdCl9LHQucHJvdG90eXBlLl9zZXRNYXhIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1heFJvd3MmJnRoaXMuX2NhY2hlZExpbmVIZWlnaHQ/dGhpcy5tYXhSb3dzKnRoaXMuX2NhY2hlZExpbmVIZWlnaHQrInB4IjpudWxsO3QmJnRoaXMuX3NldFRleHRhcmVhU3R5bGUoIm1heEhlaWdodCIsdCl9LHQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5faW5pdGlhbEhlaWdodD10aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0LHRoaXMucmVzaXplVG9GaXRDb250ZW50KCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7T2JqZWN0KHMuYSkod2luZG93LCJyZXNpemUiKS5waXBlKE9iamVjdChsLmEpKDE2KSxPYmplY3QoYy5hKSh0Ll9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5yZXNpemVUb0ZpdENvbnRlbnQoITApfSl9KSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuX3NldFRleHRhcmVhU3R5bGU9ZnVuY3Rpb24odCxlKXt0aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGVbdF09ZX0sdC5wcm90b3R5cGUuX2NhY2hlVGV4dGFyZWFMaW5lSGVpZ2h0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NhY2hlZExpbmVIZWlnaHQpe3ZhciB0PXRoaXMuX3RleHRhcmVhRWxlbWVudC5jbG9uZU5vZGUoITEpO3Qucm93cz0xLHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdC5zdHlsZS5ib3JkZXI9Im5vbmUiLHQuc3R5bGUucGFkZGluZz0iMCIsdC5zdHlsZS5oZWlnaHQ9IiIsdC5zdHlsZS5taW5IZWlnaHQ9IiIsdC5zdHlsZS5tYXhIZWlnaHQ9IiIsdC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIix0aGlzLl90ZXh0YXJlYUVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9jYWNoZWRMaW5lSGVpZ2h0PXQuY2xpZW50SGVpZ2h0LHRoaXMuX3RleHRhcmVhRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHRoaXMuX3NldE1pbkhlaWdodCgpLHRoaXMuX3NldE1heEhlaWdodCgpfX0sdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLnJlc2l6ZVRvRml0Q29udGVudCgpfSx0LnByb3RvdHlwZS5yZXNpemVUb0ZpdENvbnRlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5fZW5hYmxlZCYmKHRoaXMuX2NhY2hlVGV4dGFyZWFMaW5lSGVpZ2h0KCksdGhpcy5fY2FjaGVkTGluZUhlaWdodCkpe3ZhciBuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPW4udmFsdWU7aWYoaSE9PXRoaXMuX3ByZXZpb3VzVmFsdWV8fHQpe3ZhciByPW4ucGxhY2Vob2xkZXI7bi5jbGFzc0xpc3QuYWRkKCJjZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nIiksbi5wbGFjZWhvbGRlcj0iIixuLnN0eWxlLmhlaWdodD1uLnNjcm9sbEhlaWdodC00KyJweCIsbi5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nIiksbi5wbGFjZWhvbGRlcj1yLCJ1bmRlZmluZWQiIT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7ZS5fZGVzdHJveWVkLmlzU3RvcHBlZHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PW58fG4uc2V0U2VsZWN0aW9uUmFuZ2Uobi5zZWxlY3Rpb25TdGFydCxuLnNlbGVjdGlvbkVuZCl9KX0pLHRoaXMuX3ByZXZpb3VzVmFsdWU9aX19fSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2luaXRpYWxIZWlnaHQmJih0aGlzLl90ZXh0YXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0PXRoaXMuX2luaXRpYWxIZWlnaHQpfSx0LnByb3RvdHlwZS5fbm9vcElucHV0SGFuZGxlcj1mdW5jdGlvbigpe30sdH0oKSxwPWZ1bmN0aW9uKCl7fX0sIi9XWXYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3Vic2NyaWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSl9LCIvZE82IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB5fSk7dmFyIGk9bigibXJTRyIpLHI9bigibjZnRyIpLG89bigiWVNoMiIpLGE9bigiQ2NuRyIpLHM9bigiV2Y0cCIpLHU9bigiSzlJYSIpLGw9bigicHVnVCIpLGM9bigicDBpYiIpLGY9bigibExBUCIpLGg9bigiWWxiUSIpLGQ9bigicDBTaiIpLHA9WyJtYXQtYmFzaWMtY2hpcCJdLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5fZWxlbWVudFJlZj1lLG8uX3JpcHBsZXNHbG9iYWxseURpc2FibGVkPSExLG8ucmlwcGxlQ29uZmlnPXt9LG8uX2hhc0ZvY3VzPSExLG8uY2hpcExpc3RTZWxlY3RhYmxlPSEwLG8uX3NlbGVjdGVkPSExLG8uX3NlbGVjdGFibGU9ITAsby5fcmVtb3ZhYmxlPSEwLG8uX29uRm9jdXM9bmV3IHUuYSxvLl9vbkJsdXI9bmV3IHUuYSxvLnNlbGVjdGlvbkNoYW5nZT1uZXcgYS5uLG8uZGVzdHJveWVkPW5ldyBhLm4sby5yZW1vdmVkPW5ldyBhLm4sby5fYWRkSG9zdENsYXNzTmFtZSgpLG8uX2NoaXBSaXBwbGU9bmV3IHMueShvLG4sZSxpKSxvLl9jaGlwUmlwcGxlLnNldHVwVHJpZ2dlckV2ZW50cyhlLm5hdGl2ZUVsZW1lbnQpLHImJihvLl9yaXBwbGVzR2xvYmFsbHlEaXNhYmxlZD0hIXIuZGlzYWJsZWQsby5yaXBwbGVDb25maWc9e3NwZWVkRmFjdG9yOnIuYmFzZVNwZWVkRmFjdG9yLGFuaW1hdGlvbjpyLmFuaW1hdGlvbix0ZXJtaW5hdGVPblBvaW50ZXJVcDpyLnRlcm1pbmF0ZU9uUG9pbnRlclVwfSksb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJpcHBsZURpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fcmlwcGxlc0dsb2JhbGx5RGlzYWJsZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3RlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3NlbGVjdGVkPU9iamVjdChyLmMpKHQpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe3NvdXJjZTp0aGlzLGlzVXNlcklucHV0OiExLHNlbGVjdGVkOnR9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9dGhpcy5fdmFsdWU/dGhpcy5fdmFsdWU6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdmFsdWU9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdGFibGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VsZWN0YWJsZSYmdGhpcy5jaGlwTGlzdFNlbGVjdGFibGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9zZWxlY3RhYmxlPU9iamVjdChyLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicmVtb3ZhYmxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbW92YWJsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92YWJsZT1PYmplY3Qoci5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFyaWFTZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGFibGU/dGhpcy5zZWxlY3RlZC50b1N0cmluZygpOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2FkZEhvc3RDbGFzc05hbWU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07aWYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZShuKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PW4pcmV0dXJuIHZvaWQgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQobil9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1zdGFuZGFyZC1jaGlwIil9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQuZW1pdCh7Y2hpcDp0aGlzfSksdGhpcy5fY2hpcFJpcHBsZS5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfSxlLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtzb3VyY2U6dGhpcyxpc1VzZXJJbnB1dDohMSxzZWxlY3RlZDohMH0pfSxlLnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPSExLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe3NvdXJjZTp0aGlzLGlzVXNlcklucHV0OiExLHNlbGVjdGVkOiExfSl9LGUucHJvdG90eXBlLnNlbGVjdFZpYUludGVyYWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7c291cmNlOnRoaXMsaXNVc2VySW5wdXQ6ITAsc2VsZWN0ZWQ6ITB9KX0sZS5wcm90b3R5cGUudG9nZ2xlU2VsZWN0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLl9zZWxlY3RlZD0hdGhpcy5zZWxlY3RlZCx0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtzb3VyY2U6dGhpcyxpc1VzZXJJbnB1dDp0LHNlbGVjdGVkOnRoaXMuX3NlbGVjdGVkfSksdGhpcy5zZWxlY3RlZH0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9oYXNGb2N1c3x8KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29uRm9jdXMubmV4dCh7Y2hpcDp0aGlzfSkpLHRoaXMuX2hhc0ZvY3VzPSEwfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnJlbW92YWJsZSYmdGhpcy5yZW1vdmVkLmVtaXQoe2NoaXA6dGhpc30pfSxlLnByb3RvdHlwZS5faGFuZGxlQ2xpY2s9ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZHx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sZS5wcm90b3R5cGUuX2hhbmRsZUtleWRvd249ZnVuY3Rpb24odCl7aWYoIXRoaXMuZGlzYWJsZWQpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBvLmM6Y2FzZSBvLmI6dGhpcy5yZW1vdmUoKSx0LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBvLmw6dGhpcy5zZWxlY3RhYmxlJiZ0aGlzLnRvZ2dsZVNlbGVjdGVkKCEwKSx0LnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fYmx1cj1mdW5jdGlvbigpe3RoaXMuX2hhc0ZvY3VzPSExLHRoaXMuX29uQmx1ci5uZXh0KHtjaGlwOnRoaXN9KX0sZX0oT2JqZWN0KHMueikoT2JqZWN0KHMuQSkoT2JqZWN0KHMuQikoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpLCJwcmltYXJ5IikpLHk9bmV3IGEucSgibWF0LWNoaXBzLWRlZmF1bHQtb3B0aW9ucyIpLHY9MCxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvLHMsdSl7dmFyIGM9dC5jYWxsKHRoaXMscyxyLG8sdSl8fHRoaXM7cmV0dXJuIGMuX2VsZW1lbnRSZWY9ZSxjLl9jaGFuZ2VEZXRlY3RvclJlZj1uLGMuX2Rpcj1pLGMubmdDb250cm9sPXUsYy5jb250cm9sVHlwZT0ibWF0LWNoaXAtbGlzdCIsYy5fbGFzdERlc3Ryb3llZEluZGV4PW51bGwsYy5fY2hpcFNldD1uZXcgV2Vha01hcCxjLl90YWJPdXRTdWJzY3JpcHRpb249bC5hLkVNUFRZLGMuX3VpZD0ibWF0LWNoaXAtbGlzdC0iK3YrKyxjLl90YWJJbmRleD0wLGMuX3VzZXJUYWJJbmRleD1udWxsLGMuX29uVG91Y2hlZD1mdW5jdGlvbigpe30sYy5fb25DaGFuZ2U9ZnVuY3Rpb24oKXt9LGMuX211bHRpcGxlPSExLGMuX2NvbXBhcmVXaXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfSxjLl9yZXF1aXJlZD0hMSxjLl9kaXNhYmxlZD0hMSxjLmFyaWFPcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsYy5fc2VsZWN0YWJsZT0hMCxjLmNoYW5nZT1uZXcgYS5uLGMudmFsdWVDaGFuZ2U9bmV3IGEubixjLm5nQ29udHJvbCYmKGMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9YyksY31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ6dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyb2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1wdHk/bnVsbDoibGlzdGJveCJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtdWx0aXBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aXBsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX211bHRpcGxlPU9iamVjdChyLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29tcGFyZVdpdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9jb21wYXJlV2l0aD10LHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYWx1ZSh0KSx0aGlzLl92YWx1ZT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0P3RoaXMuX2NoaXBJbnB1dC5pZDp0aGlzLl91aWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyZXF1aXJlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXF1aXJlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlcXVpcmVkPU9iamVjdChyLmMpKHQpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBsYWNlaG9sZGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoaXBJbnB1dD90aGlzLl9jaGlwSW5wdXQucGxhY2Vob2xkZXI6dGhpcy5fcGxhY2Vob2xkZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9wbGFjZWhvbGRlcj10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvY3VzZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8dGhpcy5jaGlwcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXNGb2N1c30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZW1wdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oIXRoaXMuX2NoaXBJbnB1dHx8dGhpcy5fY2hpcElucHV0LmVtcHR5KSYmMD09PXRoaXMuY2hpcHMubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hvdWxkTGFiZWxGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmVtcHR5fHx0aGlzLmZvY3VzZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5nQ29udHJvbD8hIXRoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KHIuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWxlY3RhYmxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGV9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3NlbGVjdGFibGU9T2JqZWN0KHIuYykodCksdGhpcy5jaGlwcyYmdGhpcy5jaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaXBMaXN0U2VsZWN0YWJsZT1lLl9zZWxlY3RhYmxlfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0YWJJbmRleCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl91c2VyVGFiSW5kZXg9dCx0aGlzLl90YWJJbmRleD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpcFNlbGVjdGlvbkNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5hLmFwcGx5KHZvaWQgMCx0aGlzLmNoaXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3Rpb25DaGFuZ2V9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlwRm9jdXNDaGFuZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuYS5hcHBseSh2b2lkIDAsdGhpcy5jaGlwcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX29uRm9jdXN9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlwQmx1ckNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5hLmFwcGx5KHZvaWQgMCx0aGlzLmNoaXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fb25CbHVyfSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpcFJlbW92ZUNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5hLmFwcGx5KHZvaWQgMCx0aGlzLmNoaXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95ZWR9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBmLmEodGhpcy5jaGlwcykud2l0aFdyYXAoKS53aXRoVmVydGljYWxPcmllbnRhdGlvbigpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIiksdGhpcy5fdGFiT3V0U3Vic2NyaXB0aW9uPXRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3RhYkluZGV4PS0xLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fdGFiSW5kZXg9dC5fdXNlclRhYkluZGV4fHwwfSl9KSx0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5jaGlwcy5jaGFuZ2VzLnBpcGUoT2JqZWN0KGQuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3Jlc2V0Q2hpcHMoKSx0Ll9pbml0aWFsaXplU2VsZWN0aW9uKCksdC5fdXBkYXRlVGFiSW5kZXgoKSx0Ll91cGRhdGVGb2N1c0ZvckRlc3Ryb3llZENoaXBzKCksdC5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IGguYih0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSxlLnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdGFiT3V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hhbmdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uJiZ0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZHJvcFN1YnNjcmlwdGlvbnMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5yZWdpc3RlcklucHV0PWZ1bmN0aW9uKHQpe3RoaXMuX2NoaXBJbnB1dD10fSxlLnByb3RvdHlwZS5zZXREZXNjcmliZWRCeUlkcz1mdW5jdGlvbih0KXt0aGlzLl9hcmlhRGVzY3JpYmVkYnk9dC5qb2luKCIgIil9LGUucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5jaGlwcyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0LCExKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLl9vblRvdWNoZWQ9dH0sZS5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRpc2FibGVkPXQsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc2FibGVkPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSxlLnByb3RvdHlwZS5vbkNvbnRhaW5lckNsaWNrPWZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2NoaXBJbnB1dCYmdGhpcy5fY2hpcElucHV0LmZvY3VzZWR8fCh0aGlzLmNoaXBzLmxlbmd0aD4wPyh0aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSk6KHRoaXMuX2ZvY3VzSW5wdXQoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKX0sZS5wcm90b3R5cGUuX2ZvY3VzSW5wdXQ9ZnVuY3Rpb24oKXt0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1cygpfSxlLnByb3RvdHlwZS5fa2V5ZG93bj1mdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldDt0LmtleUNvZGU9PT1vLmImJnRoaXMuX2lzSW5wdXRFbXB0eShlKT8odGhpcy5fa2V5TWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKSk6ZSYmZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1jaGlwIikmJih0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bih0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlLnByb3RvdHlwZS5fdXBkYXRlVGFiSW5kZXg9ZnVuY3Rpb24oKXt0aGlzLl90YWJJbmRleD10aGlzLl91c2VyVGFiSW5kZXh8fCgwPT09dGhpcy5jaGlwcy5sZW5ndGg/LTE6MCl9LGUucHJvdG90eXBlLl91cGRhdGVLZXlNYW5hZ2VyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2hpcHMudG9BcnJheSgpLmluZGV4T2YodCk7dGhpcy5faXNWYWxpZEluZGV4KGUpJiYodC5faGFzRm9jdXMmJihlPHRoaXMuY2hpcHMubGVuZ3RoLTE/dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpOmUtMT49MCYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUtMSkpLHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4PT09ZSYmKHRoaXMuX2xhc3REZXN0cm95ZWRJbmRleD1lKSl9LGUucHJvdG90eXBlLl91cGRhdGVGb2N1c0ZvckRlc3Ryb3llZENoaXBzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jaGlwcy50b0FycmF5KCk7aWYobnVsbCE9dGhpcy5fbGFzdERlc3Ryb3llZEluZGV4JiZ0Lmxlbmd0aD4wJiYodGhpcy5mb2N1c2VkfHx0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJi0xPT09dC5pbmRleE9mKHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSkpKXt2YXIgZT1NYXRoLm1pbih0aGlzLl9sYXN0RGVzdHJveWVkSW5kZXgsdC5sZW5ndGgtMSk7dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpO3ZhciBuPXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbTtuJiZuLmZvY3VzKCl9dGhpcy5fbGFzdERlc3Ryb3llZEluZGV4PW51bGx9LGUucHJvdG90eXBlLl9pc1ZhbGlkSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5jaGlwcy5sZW5ndGh9LGUucHJvdG90eXBlLl9pc0lucHV0RW1wdHk9ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8ImlucHV0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKXx8dC52YWx1ZSl9LGUucHJvdG90eXBlLl9zZXRTZWxlY3Rpb25CeVZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT0hMCksdGhpcy5fY2xlYXJTZWxlY3Rpb24oKSx0aGlzLmNoaXBzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzZWxlY3QoKX0pLEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9zZWxlY3RWYWx1ZSh0LGUpfSksdGhpcy5fc29ydFZhbHVlcygpO2Vsc2V7dmFyIGk9dGhpcy5fc2VsZWN0VmFsdWUodCxlKTtpJiZlJiZ0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaSl9fSxlLnByb3RvdHlwZS5fc2VsZWN0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPSEwKTt2YXIgaT10aGlzLmNoaXBzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUudmFsdWUmJm4uX2NvbXBhcmVXaXRoKGUudmFsdWUsdCl9KTtyZXR1cm4gaSYmKGU/aS5zZWxlY3RWaWFJbnRlcmFjdGlvbigpOmkuc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpKSxpfSxlLnByb3RvdHlwZS5faW5pdGlhbGl6ZVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpeyh0Lm5nQ29udHJvbHx8dC5fdmFsdWUpJiYodC5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0Lm5nQ29udHJvbD90Lm5nQ29udHJvbC52YWx1ZTp0Ll92YWx1ZSwhMSksdC5zdGF0ZUNoYW5nZXMubmV4dCgpKX0pfSxlLnByb3RvdHlwZS5fY2xlYXJTZWxlY3Rpb249ZnVuY3Rpb24odCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goZnVuY3Rpb24oZSl7ZSE9PXQmJmUuZGVzZWxlY3QoKX0pLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZS5wcm90b3R5cGUuX3NvcnRWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX211bHRpcGxlJiYodGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZWxlY3RlZCYmdC5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpfSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZS5wcm90b3R5cGUuX3Byb3BhZ2F0ZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU7ZT1BcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOnQsdGhpcy5fdmFsdWU9ZSx0aGlzLmNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy52YWx1ZT1lfSh0aGlzLGUpKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZSksdGhpcy5fb25DaGFuZ2UoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9LGUucHJvdG90eXBlLl9ibHVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpLHRoaXMuZGlzYWJsZWR8fCh0aGlzLl9jaGlwSW5wdXQ/c2V0VGltZW91dChmdW5jdGlvbigpe3QuZm9jdXNlZHx8dC5fbWFya0FzVG91Y2hlZCgpfSk6dGhpcy5fbWFya0FzVG91Y2hlZCgpKX0sZS5wcm90b3R5cGUuX21hcmtBc1RvdWNoZWQ9ZnVuY3Rpb24oKXt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9LGUucHJvdG90eXBlLl9yZXNldENoaXBzPWZ1bmN0aW9uKCl7dGhpcy5fZHJvcFN1YnNjcmlwdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub0NoaXBzRm9jdXMoKSx0aGlzLl9saXN0ZW5Ub0NoaXBzU2VsZWN0aW9uKCksdGhpcy5fbGlzdGVuVG9DaGlwc1JlbW92ZWQoKX0sZS5wcm90b3R5cGUuX2Ryb3BTdWJzY3JpcHRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uJiYodGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uJiYodGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbj1udWxsKSx0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb249bnVsbCl9LGUucHJvdG90eXBlLl9saXN0ZW5Ub0NoaXBzU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFNlbGVjdGlvbkNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe2Uuc291cmNlLnNlbGVjdGVkP3QuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlLnNvdXJjZSk6dC5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZS5zb3VyY2UpLHQubXVsdGlwbGV8fHQuY2hpcHMuZm9yRWFjaChmdW5jdGlvbihlKXshdC5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSYmZS5zZWxlY3RlZCYmZS5kZXNlbGVjdCgpfSksZS5pc1VzZXJJbnB1dCYmdC5fcHJvcGFnYXRlQ2hhbmdlcygpfSl9LGUucHJvdG90eXBlLl9saXN0ZW5Ub0NoaXBzRm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbj10aGlzLmNoaXBGb2N1c0NoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpcHMudG9BcnJheSgpLmluZGV4T2YoZS5jaGlwKTt0Ll9pc1ZhbGlkSW5kZXgobikmJnQuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbUluZGV4KG4pLHQuc3RhdGVDaGFuZ2VzLm5leHQoKX0pLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEJsdXJDaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX2JsdXIoKSx0LnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX0sZS5wcm90b3R5cGUuX2xpc3RlblRvQ2hpcHNSZW1vdmVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFJlbW92ZUNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZUtleU1hbmFnZXIoZS5jaGlwKX0pfSxlfShPYmplY3Qocy5DKShmdW5jdGlvbih0LGUsbixpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9aX0pKSxiPWZ1bmN0aW9uKCl7fX0sIjAvUTYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBnfSk7dmFyIGk9bigibXJTRyIpLHI9bigiQ2NuRyIpLG89bigiV2Y0cCIpLGE9bigibExBUCIpLHM9bigibjZnRyIpLHU9bigiWWxiUSIpLGw9bigiWVNoMiIpLGM9KG4oImdJY1kiKSxuKCJwdWdUIikpLGY9T2JqZWN0KG8uQSkoZnVuY3Rpb24oKXt9KSxoPU9iamVjdChvLkEpKGZ1bmN0aW9uKCl7fSksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShmKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KGYpLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fZWxlbWVudD1lLGkuX25hdkxpc3Q9bixpLl9pc05hdkxpc3Q9ITEsaS5faXNOYXZMaXN0PSEhbixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe25ldyBvLm4odGhpcy5fbGluZXMsdGhpcy5fZWxlbWVudCl9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2lzTmF2TGlzdHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLl9uYXZMaXN0LmRpc2FibGVSaXBwbGV9LGUucHJvdG90eXBlLl9oYW5kbGVGb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9oYW5kbGVCbHVyPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1saXN0LWl0ZW0tZm9jdXMiKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sZX0oaCkseT1PYmplY3Qoby5BKShmdW5jdGlvbigpe30pLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9lbGVtZW50PWUsci5fY2hhbmdlRGV0ZWN0b3I9bixyLnNlbGVjdGlvbkxpc3Q9aSxyLl9zZWxlY3RlZD0hMSxyLl9kaXNhYmxlZD0hMSxyLl9oYXNGb2N1cz0hMSxyLmNoZWNrYm94UG9zaXRpb249ImFmdGVyIixyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuc2VsZWN0aW9uTGlzdCYmdGhpcy5zZWxlY3Rpb25MaXN0LmRpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHMuYykodCk7ZSE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLmlzU2VsZWN0ZWQodGhpcyl9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qocy5jKSh0KTtlIT09dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZXRTZWxlY3RlZChlKSx0aGlzLnNlbGVjdGlvbkxpc3QuX3JlcG9ydFZhbHVlQ2hhbmdlKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX3NlbGVjdGVkO1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXsodC5fc2VsZWN0ZWR8fGUpJiYodC5zZWxlY3RlZD0hMCx0Ll9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7bmV3IG8ubih0aGlzLl9saW5lcyx0aGlzLl9lbGVtZW50KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc2VsZWN0ZWQmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3RlZD0hMX0pLHRoaXMuc2VsZWN0aW9uTGlzdC5fcmVtb3ZlT3B0aW9uRnJvbUxpc3QodGhpcyl9LGUucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9IXRoaXMuc2VsZWN0ZWR9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RleHQ/dGhpcy5fdGV4dC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50OiIifSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuc2VsZWN0aW9uTGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlQ2xpY2s9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy50b2dnbGUoKSx0aGlzLnNlbGVjdGlvbkxpc3QuX2VtaXRDaGFuZ2VFdmVudCh0aGlzKSl9LGUucHJvdG90eXBlLl9oYW5kbGVGb2N1cz1mdW5jdGlvbigpe3RoaXMuX2hhc0ZvY3VzPSEwLHRoaXMuc2VsZWN0aW9uTGlzdC5fc2V0Rm9jdXNlZE9wdGlvbih0aGlzKX0sZS5wcm90b3R5cGUuX2hhbmRsZUJsdXI9ZnVuY3Rpb24oKXt0aGlzLl9oYXNGb2N1cz0hMSx0aGlzLnNlbGVjdGlvbkxpc3QuX29uVG91Y2hlZCgpfSxlLnByb3RvdHlwZS5fZ2V0SG9zdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fSxlLnByb3RvdHlwZS5fc2V0U2VsZWN0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT10aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NlbGVjdGVkPXQsdD90aGlzLnNlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdCh0aGlzKTp0aGlzLnNlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLmRlc2VsZWN0KHRoaXMpLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLCEwKX0sZS5wcm90b3R5cGUuX21hcmtGb3JDaGVjaz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSxlfShPYmplY3Qoby5BKShmdW5jdGlvbigpe30pKSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2VsZW1lbnQ9ZSxpLnNlbGVjdGlvbkNoYW5nZT1uZXcgci5uLGkudGFiSW5kZXg9MCxpLl9kaXNhYmxlZD0hMSxpLnNlbGVjdGVkT3B0aW9ucz1uZXcgdS5iKCEwKSxpLl9vbkNoYW5nZT1mdW5jdGlvbih0KXt9LGkuX21vZGVsQ2hhbmdlcz1jLmEuRU1QVFksaS5fb25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSxpLnRhYkluZGV4PXBhcnNlSW50KG4pfHwwLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChzLmMpKHQpLHRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuX21hcmtGb3JDaGVjaygpfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgYS5hKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkuc2tpcFByZWRpY2F0ZShmdW5jdGlvbigpe3JldHVybiExfSksdGhpcy5fdGVtcFZhbHVlcyYmKHRoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHRoaXMuX3RlbXBWYWx1ZXMpLHRoaXMuX3RlbXBWYWx1ZXM9bnVsbCksdGhpcy5fbW9kZWxDaGFuZ2VzPXRoaXMuc2VsZWN0ZWRPcHRpb25zLm9uQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXtpZih0LmFkZGVkKWZvcih2YXIgZT0wLG49dC5hZGRlZDtlPG4ubGVuZ3RoO2UrKyluW2VdLnNlbGVjdGVkPSEwO2lmKHQucmVtb3ZlZClmb3IodmFyIGk9MCxyPXQucmVtb3ZlZDtpPHIubGVuZ3RoO2krKylyW2ldLnNlbGVjdGVkPSExfSl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbW9kZWxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuX3NldEFsbE9wdGlvbnNTZWxlY3RlZCghMCl9LGUucHJvdG90eXBlLmRlc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKCExKX0sZS5wcm90b3R5cGUuX3NldEZvY3VzZWRPcHRpb249ZnVuY3Rpb24odCl7dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtSW5kZXgodGhpcy5fZ2V0T3B0aW9uSW5kZXgodCkpfSxlLnByb3RvdHlwZS5fcmVtb3ZlT3B0aW9uRnJvbUxpc3Q9ZnVuY3Rpb24odCl7aWYodC5faGFzRm9jdXMpe3ZhciBlPXRoaXMuX2dldE9wdGlvbkluZGV4KHQpO2U+MD90aGlzLl9rZXlNYW5hZ2VyLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOjA9PT1lJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPjEmJnRoaXMuX2tleU1hbmFnZXIuc2V0TmV4dEl0ZW1BY3RpdmUoKX19LGUucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZSxuPXRoaXMuX2tleU1hbmFnZXIsaT1uLmFjdGl2ZUl0ZW1JbmRleDtzd2l0Y2goZSl7Y2FzZSBsLmw6Y2FzZSBsLmY6dGhpcy5fdG9nZ2xlRm9jdXNlZE9wdGlvbigpLHQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIGwuaDpjYXNlIGwuZTplPT09bC5oP24uc2V0Rmlyc3RJdGVtQWN0aXZlKCk6bi5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIGwuYTp0LmN0cmxLZXkmJih0aGlzLm9wdGlvbnMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4hdC5zZWxlY3RlZH0pP3RoaXMuc2VsZWN0QWxsKCk6dGhpcy5kZXNlbGVjdEFsbCgpLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpuLm9uS2V5ZG93bih0KX1lIT09bC5uJiZlIT09bC5kfHwhdC5zaGlmdEtleXx8bi5hY3RpdmVJdGVtSW5kZXg9PT1pfHx0aGlzLl90b2dnbGVGb2N1c2VkT3B0aW9uKCl9LGUucHJvdG90eXBlLl9yZXBvcnRWYWx1ZUNoYW5nZT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmdGhpcy5fb25DaGFuZ2UodGhpcy5fZ2V0U2VsZWN0ZWRPcHRpb25WYWx1ZXMoKSl9LGUucHJvdG90eXBlLl9lbWl0Q2hhbmdlRXZlbnQ9ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgZnVuY3Rpb24odCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9KHRoaXMsdCkpfSxlLnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz90aGlzLl9zZXRPcHRpb25zRnJvbVZhbHVlcyh0fHxbXSk6dGhpcy5fdGVtcFZhbHVlcz10fSxlLnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGlzYWJsZWQ9dH0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLl9vblRvdWNoZWQ9dH0sZS5wcm90b3R5cGUuX3NldE9wdGlvbnNGcm9tVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuX3NldFNlbGVjdGVkKCExKX0pLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLm9wdGlvbnMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gZS5jb21wYXJlV2l0aD9lLmNvbXBhcmVXaXRoKG4udmFsdWUsdCk6bi52YWx1ZT09PXR9KX0pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9zZXRTZWxlY3RlZCghMCl9KX0sZS5wcm90b3R5cGUuX2dldFNlbGVjdGVkT3B0aW9uVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KX0sZS5wcm90b3R5cGUuX3RvZ2dsZUZvY3VzZWRPcHRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtpZihudWxsIT10JiZ0aGlzLl9pc1ZhbGlkSW5kZXgodCkpe3ZhciBlPXRoaXMub3B0aW9ucy50b0FycmF5KClbdF07ZSYmIWUuZGlzYWJsZWQmJihlLnRvZ2dsZSgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudChlKSl9fSxlLnByb3RvdHlwZS5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uX3NldFNlbGVjdGVkKHQpJiYoZT0hMCl9KSxlJiZ0aGlzLl9yZXBvcnRWYWx1ZUNoYW5nZSgpfSxlLnByb3RvdHlwZS5faXNWYWxpZEluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wJiZ0PHRoaXMub3B0aW9ucy5sZW5ndGh9LGUucHJvdG90eXBlLl9nZXRPcHRpb25JbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHQpfSxlfSh5KSxiPWZ1bmN0aW9uKCl7fX0sIjAvdVEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiNmJsRiIpLHI9bigiL1dZdiIpLG89bigiMmVQbCIpLGE9bigieFRsYSIpLHM9bigiRW44KyIpLHU9bigiSVVUYiIpLGw9bigicHVnVCIpLGM9bigiUzVYUSIpLGY9bigidTY3RCIpLGg9bigiSmNSdiIpLGQ9bigiRnhiMSIpO2Z1bmN0aW9uIHAodCxlKXtpZighZSlyZXR1cm4gdCBpbnN0YW5jZW9mIGkuYT90Om5ldyBpLmEoT2JqZWN0KGQuYSkodCkpO2lmKG51bGwhPXQpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFthLmFdfSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkuYShlP2Z1bmN0aW9uKG4pe3ZhciBpPW5ldyBsLmE7cmV0dXJuIGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXt2YXIgcj10W2EuYV0oKTtpLmFkZChyLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXtpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKX0sZXJyb3I6ZnVuY3Rpb24odCl7aS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKHQpfSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe2kuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfX0pKX0pKSxpfTpPYmplY3QoaC5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KHIuYSkodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpLmEoZT9mdW5jdGlvbihuKXt2YXIgaT1uZXcgbC5hO3JldHVybiBpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7bi5uZXh0KHQpLGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfSkpfSxmdW5jdGlvbih0KXtpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9KX0pKSxpfTpPYmplY3QoYy5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KG8uYSkodCkpcmV0dXJuIE9iamVjdCh1LmEpKHQsZSk7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W3MuYV19KHQpfHwic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgaS5hKGU/ZnVuY3Rpb24obil7dmFyIGkscj1uZXcgbC5hO3JldHVybiByLmFkZChmdW5jdGlvbigpe2kmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnJldHVybiYmaS5yZXR1cm4oKX0pLHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtpPXRbcy5hXSgpLHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtpZighbi5jbG9zZWQpe3ZhciB0LGU7dHJ5e3ZhciByPWkubmV4dCgpO3Q9ci52YWx1ZSxlPXIuZG9uZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuLmVycm9yKHQpfWU/bi5jb21wbGV0ZSgpOihuLm5leHQodCksdGhpcy5zY2hlZHVsZSgpKX19KSl9KSkscn06T2JqZWN0KGYuYSkodCkpfSh0LGUpfXRocm93IG5ldyBUeXBlRXJyb3IoKG51bGwhPT10JiZ0eXBlb2YgdHx8dCkrIiBpcyBub3Qgb2JzZXJ2YWJsZSIpfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBwfSl9LCIyMUxiIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIm1yU0ciKSxyPW4oIk96ZkIiKSxvPW4oIks5SWEiKSxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1lLGkud29yaz1uLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLG4+MD90LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsZSxuKToodGhpcy5kZWxheT1uLHRoaXMuc3RhdGU9ZSx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlLG4pe3JldHVybiBuPjB8fHRoaXMuY2xvc2VkP3QucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLGUsbik6dGhpcy5fZXhlY3V0ZShlLG4pfSxlLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPTApLG51bGwhPT1pJiZpPjB8fG51bGw9PT1pJiZ0aGlzLmRlbGF5PjA/dC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLGUsbixpKTplLmZsdXNoKHRoaXMpfSxlfShuKCJoOURxIikuYSkscz1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkuYihlLHQpLGV9KG4oIkNTOVEiKS5hKSkoYSksdT1uKCJwdWdUIiksbD1uKCJGRk9vIiksYz1uKCI2MGlVIiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2b2lkIDA9PT1pJiYoaT0wKTt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9bixyLmRlbGF5PWkscn1yZXR1cm4gaS5iKGUsdCksZS5kaXNwYXRjaD1mdW5jdGlvbih0KXt0Lm5vdGlmaWNhdGlvbi5vYnNlcnZlKHQuZGVzdGluYXRpb24pLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVNZXNzYWdlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGUuZGlzcGF0Y2gsdGhpcy5kZWxheSxuZXcgaCh0LHRoaXMuZGVzdGluYXRpb24pKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKGMuYS5jcmVhdGVOZXh0KHQpKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKGMuYS5jcmVhdGVFcnJvcih0KSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKGMuYS5jcmVhdGVDb21wbGV0ZSgpKX0sZX0obC5hKSxoPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3RpZmljYXRpb249dCx0aGlzLmRlc3RpbmF0aW9uPWV9LGQ9bigiOGc4QSIpLHA9bigidU1hTyIpLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9aSxyLl9ldmVudHM9W10sci5faW5maW5pdGVUaW1lV2luZG93PSExLHIuX2J1ZmZlclNpemU9ZTwxPzE6ZSxyLl93aW5kb3dUaW1lPW48MT8xOm4sbj09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8oci5faW5maW5pdGVUaW1lV2luZG93PSEwLHIubmV4dD1yLm5leHRJbmZpbml0ZVRpbWVXaW5kb3cpOnIubmV4dD1yLm5leHRUaW1lV2luZG93LHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLm5leHRJbmZpbml0ZVRpbWVXaW5kb3c9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5fZXZlbnRzO24ucHVzaChlKSxuLmxlbmd0aD50aGlzLl9idWZmZXJTaXplJiZuLnNoaWZ0KCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLm5leHRUaW1lV2luZG93PWZ1bmN0aW9uKGUpe3RoaXMuX2V2ZW50cy5wdXNoKG5ldyB5KHRoaXMuX2dldE5vdygpLGUpKSx0aGlzLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cygpLHQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5faW5maW5pdGVUaW1lV2luZG93LGk9bj90aGlzLl9ldmVudHM6dGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSxyPXRoaXMuc2NoZWR1bGVyLG89aS5sZW5ndGg7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IGQuYTtpZih0aGlzLmlzU3RvcHBlZHx8dGhpcy5oYXNFcnJvcj9lPXUuYS5FTVBUWToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxlPW5ldyBwLmEodGhpcyx0KSksciYmdC5hZGQodD1uZXcgZih0LHIpKSxuKWZvcih2YXIgYT0wO2E8byYmIXQuY2xvc2VkO2ErKyl0Lm5leHQoaVthXSk7ZWxzZSBmb3IoYT0wO2E8byYmIXQuY2xvc2VkO2ErKyl0Lm5leHQoaVthXS52YWx1ZSk7cmV0dXJuIHRoaXMuaGFzRXJyb3I/dC5lcnJvcih0aGlzLnRocm93bkVycm9yKTp0aGlzLmlzU3RvcHBlZCYmdC5jb21wbGV0ZSgpLGV9LGUucHJvdG90eXBlLl9nZXROb3c9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5zY2hlZHVsZXJ8fHMpLm5vdygpfSxlLnByb3RvdHlwZS5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ2V0Tm93KCksZT10aGlzLl9idWZmZXJTaXplLG49dGhpcy5fd2luZG93VGltZSxpPXRoaXMuX2V2ZW50cyxyPWkubGVuZ3RoLG89MDtvPHImJiEodC1pW29dLnRpbWU8bik7KW8rKztyZXR1cm4gcj5lJiYobz1NYXRoLm1heChvLHItZSkpLG8+MCYmaS5zcGxpY2UoMCxvKSxpfSxlfShvLmEpLHk9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbWU9dCx0aGlzLnZhbHVlPWV9O24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBqfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pO3ZhciB2PSJpbmxpbmUiLGc9WyJyb3ciLCJjb2x1bW4iLCJyb3ctcmV2ZXJzZSIsImNvbHVtbi1yZXZlcnNlIl07ZnVuY3Rpb24gYih0KXt2YXIgZT0odD10P3QudG9Mb3dlckNhc2UoKToiIikuc3BsaXQoIiAiKSxuPWVbMF0saT1lWzFdLHI9ZVsyXTtyZXR1cm4gZy5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09bn0pfHwobj1nWzBdKSxpPT09diYmKGk9ciE9PXY/cjoiIixyPXYpLFtuLGZ1bmN0aW9uKHQpe2lmKHQpc3dpdGNoKHQudG9Mb3dlckNhc2UoKSl7Y2FzZSJyZXZlcnNlIjpjYXNlIndyYXAtcmV2ZXJzZSI6Y2FzZSJyZXZlcnNlLXdyYXAiOnQ9IndyYXAtcmV2ZXJzZSI7YnJlYWs7Y2FzZSJubyI6Y2FzZSJub25lIjpjYXNlIm5vd3JhcCI6dD0ibm93cmFwIjticmVhaztkZWZhdWx0OnQ9IndyYXAifXJldHVybiB0fShpKSwhIXJdfWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodClbMF0uaW5kZXhPZigicm93Iik+LTF9dmFyIHc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiByLl9hbm5vdW5jZXI9bmV3IG0oMSksci5sYXlvdXQkPXIuX2Fubm91bmNlci5hc09ic2VydmFibGUoKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5sYXlvdXR8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImxheW91dCIsInJvdyIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlV2l0aERpcmVjdGlvbih0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7dD10fHx0aGlzLl9xdWVyeUlucHV0KCJsYXlvdXQiKXx8InJvdyIsdGhpcy5fbXFBY3RpdmF0aW9uJiYodD10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPWIodCk7cmV0dXJuIGZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09aSYmKGk9ITEpLHtkaXNwbGF5Omk/ImlubGluZS1mbGV4IjoiZmxleCIsImJveC1zaXppbmciOiJib3JkZXItYm94IiwiZmxleC1kaXJlY3Rpb24iOmVbMF0sImZsZXgtd3JhcCI6bnx8bnVsbH19KDAsZVsxXSxlWzJdKX0odHx8IiIpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQoZSksdGhpcy5fYW5ub3VuY2VyLm5leHQoe2RpcmVjdGlvbjplWyJmbGV4LWRpcmVjdGlvbiJdLHdyYXA6ISFlWyJmbGV4LXdyYXAiXSYmIm5vd3JhcCIhPT1lWyJmbGV4LXdyYXAiXX0pfSxlfShyLmIpLHg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyLG8sYSl7dmFyIHM9dC5jYWxsKHRoaXMsZSxuLGEpfHx0aGlzO3JldHVybiBzLl96b25lPXIscy5fZGlyZWN0aW9uYWxpdHk9byxzLl9sYXlvdXQ9InJvdyIsaSYmKHMuX2xheW91dFdhdGNoZXI9aS5sYXlvdXQkLnN1YnNjcmliZShzLl9vbkxheW91dENoYW5nZS5iaW5kKHMpKSkscy5fZGlyZWN0aW9uV2F0Y2hlcj1zLl9kaXJlY3Rpb25hbGl0eS5jaGFuZ2Uuc3Vic2NyaWJlKHMuX3VwZGF0ZVdpdGhWYWx1ZS5iaW5kKHMpKSxzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5nYXB8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3dhdGNoQ29udGVudENoYW5nZXMoKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygiZ2FwIiwiMCIsZnVuY3Rpb24oZSl7dC5fdXBkYXRlV2l0aFZhbHVlKGUudmFsdWUpfSksdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9sYXlvdXRXYXRjaGVyJiZ0aGlzLl9sYXlvdXRXYXRjaGVyLnVuc3Vic2NyaWJlKCksdGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9kaXJlY3Rpb25XYXRjaGVyJiZ0aGlzLl9kaXJlY3Rpb25XYXRjaGVyLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl93YXRjaENvbnRlbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyJiYodC5fb2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7ZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZGVkTm9kZXMmJnQuYWRkZWROb2Rlcy5sZW5ndGg+MHx8dC5yZW1vdmVkTm9kZXMmJnQucmVtb3ZlZE5vZGVzLmxlbmd0aD4wfSkmJnQuX3VwZGF0ZVdpdGhWYWx1ZSgpfSksdC5fb2JzZXJ2ZXIub2JzZXJ2ZSh0Lm5hdGl2ZUVsZW1lbnQse2NoaWxkTGlzdDohMH0pKX0pfSxlLnByb3RvdHlwZS5fb25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9sYXlvdXQ9KHQuZGlyZWN0aW9ufHwiIikudG9Mb3dlckNhc2UoKSxnLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLl9sYXlvdXR9KXx8KHRoaXMuX2xheW91dD0icm93IiksdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLl91cGRhdGVXaXRoVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImdhcCIpfHwiMCI7dGhpcy5fbXFBY3RpdmF0aW9uJiYobj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBpPXRoaXMuY2hpbGRyZW5Ob2Rlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lm5vZGVUeXBlJiYibm9uZSIhPWUuX2dldERpc3BsYXlTdHlsZSh0KX0pLnNvcnQoZnVuY3Rpb24odCxuKXt2YXIgaT0rZS5fc3R5bGVyLmxvb2t1cFN0eWxlKHQsIm9yZGVyIikscj0rZS5fc3R5bGVyLmxvb2t1cFN0eWxlKG4sIm9yZGVyIik7cmV0dXJuIGlzTmFOKGkpfHxpc05hTihyKXx8aT09PXI/MDppPnI/MTotMX0pO2lmKGkubGVuZ3RoPjApaWYobi5lbmRzV2l0aChDKSluPW4uc3Vic3RyaW5nKDAsbi5pbmRleE9mKEMpKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZEdyaWRQYWRkaW5nKG4pLGkpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQodGhpcy5fYnVpbGRHcmlkTWFyZ2luKG4pKTtlbHNle3ZhciByPWkucG9wKCk7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRDU1MobiksaSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRDU1MoKSxbcl0pfX0sZS5wcm90b3R5cGUuX2J1aWxkR3JpZFBhZGRpbmc9ZnVuY3Rpb24odCl7dmFyIGU9IjBweCIsbj0iMHB4IjtyZXR1cm4icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlP249dDplPXQse3BhZGRpbmc6IjBweCAiK2UrIiAiK3QrIiAiK259fSxlLnByb3RvdHlwZS5fYnVpbGRHcmlkTWFyZ2luPWZ1bmN0aW9uKHQpe3ZhciBlPSIwcHgiLG49IjBweCI7cmV0dXJuInJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT9uPSItIit0OmU9Ii0iK3Qse21hcmdpbjoiMHB4ICIrZSsiIC0iK3QrIiAiK259fSxlLnByb3RvdHlwZS5fYnVpbGRDU1M9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9bnVsbCk7dmFyIGUsbj17Im1hcmdpbi1sZWZ0IjpudWxsLCJtYXJnaW4tcmlnaHQiOm51bGwsIm1hcmdpbi10b3AiOm51bGwsIm1hcmdpbi1ib3R0b20iOm51bGx9O3N3aXRjaCh0aGlzLl9sYXlvdXQpe2Nhc2UiY29sdW1uIjplPSJtYXJnaW4tYm90dG9tIjticmVhaztjYXNlImNvbHVtbi1yZXZlcnNlIjplPSJtYXJnaW4tdG9wIjticmVhaztjYXNlInJvdyI6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tbGVmdCI6Im1hcmdpbi1yaWdodCI7YnJlYWs7Y2FzZSJyb3ctcmV2ZXJzZSI6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tcmlnaHQiOiJtYXJnaW4tbGVmdCI7YnJlYWs7ZGVmYXVsdDplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1sZWZ0IjoibWFyZ2luLXJpZ2h0In1yZXR1cm4gbltlXT10LG59LGV9KHIuYiksQz0iIGdyaWQiO2Z1bmN0aW9uIFModCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO2Zvcih2YXIgaT0wLHI9ZTtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihudWxsIT1vKWZvcih2YXIgYSBpbiBvKW8uaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPW9bYV0pfXJldHVybiB0fXZhciBFPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGEuX2NvbnRhaW5lcj1pLGEuc3R5bGVVdGlscz1yLGEubGF5b3V0Q29uZmlnPW8sYS5fY2FjaGVJbnB1dCgiZmxleCIsIiIpLGEuX2NhY2hlSW5wdXQoInNocmluayIsMSksYS5fY2FjaGVJbnB1dCgiZ3JvdyIsMSksaSYmKGEuX2xheW91dFdhdGNoZXI9aS5sYXlvdXQkLnN1YnNjcmliZShmdW5jdGlvbih0KXthLl9vbkxheW91dENoYW5nZSh0KX0pKSxhfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hyaW5rIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoInNocmluayIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJncm93Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdyb3ciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZmxleHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImZsZXgiLCIiLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVN0eWxlKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheW91dD10fHx0aGlzLl9sYXlvdXR8fHtkaXJlY3Rpb246InJvdyIsd3JhcDohMX0sdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImZsZXgiKXx8IiI7dGhpcy5fbXFBY3RpdmF0aW9uJiYoZT10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBuPVN0cmluZyhlKS5yZXBsYWNlKCI7IiwiIiksaT1PYmplY3Qoci5vKShuLHRoaXMuX3F1ZXJ5SW5wdXQoImdyb3ciKSx0aGlzLl9xdWVyeUlucHV0KCJzaHJpbmsiKSk7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl92YWxpZGF0ZVZhbHVlLmFwcGx5KHRoaXMsaSkpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGVWYWx1ZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fZ2V0RmxleEZsb3dEaXJlY3Rpb24odGhpcy5wYXJlbnRFbGVtZW50LHRoaXMubGF5b3V0Q29uZmlnLmFkZEZsZXhUb1BhcmVudCkuaW5kZXhPZigiY29sdW1uIik+LTE/ImNvbHVtbiI6InJvdyIscj1fKGkpPyJtYXgtd2lkdGgiOiJtYXgtaGVpZ2h0IixvPV8oaSk/Im1pbi13aWR0aCI6Im1pbi1oZWlnaHQiLGE9U3RyaW5nKG4pLmluZGV4T2YoImNhbGMiKT4tMSxzPWF8fCJhdXRvIj09bix1PVN0cmluZyhuKS5pbmRleE9mKCIlIik+LTEmJiFhLGw9U3RyaW5nKG4pLmluZGV4T2YoInB4Iik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJlbSIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigidnciKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoInZoIik+LTEsYz1TdHJpbmcobikuaW5kZXhPZigicHgiKT4tMXx8cyxmPWF8fGw7dD0iMCI9PXQ/MDp0LGU9IjAiPT1lPzA6ZTt2YXIgaD0hdCYmIWUsZD17fSxwPXsibWF4LXdpZHRoIjpudWxsLCJtYXgtaGVpZ2h0IjpudWxsLCJtaW4td2lkdGgiOm51bGwsIm1pbi1oZWlnaHQiOm51bGx9O3N3aXRjaChufHwiIil7Y2FzZSIiOm49InJvdyI9PT1pPyIwJSI6dGhpcy5sYXlvdXRDb25maWcudXNlQ29sdW1uQmFzaXNaZXJvPyIwLjAwMDAwMDAwMXB4IjoiYXV0byI7YnJlYWs7Y2FzZSJpbml0aWFsIjpjYXNlIm5vZ3JvdyI6dD0wLG49ImF1dG8iO2JyZWFrO2Nhc2UiZ3JvdyI6bj0iMTAwJSI7YnJlYWs7Y2FzZSJub3NocmluayI6ZT0wLG49ImF1dG8iO2JyZWFrO2Nhc2UiYXV0byI6YnJlYWs7Y2FzZSJub25lIjp0PTAsZT0wLG49ImF1dG8iO2JyZWFrO2RlZmF1bHQ6Znx8dXx8aXNOYU4obil8fChuKz0iJSIpLCIwJSI9PT1uJiYoZj0hMCksIjBweCI9PT1uJiYobj0iMCUiKSxkPVMocCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6Zj9uOiIxMDAlIn06e2ZsZXg6dCsiICIrZSsiICIrKGY/bjoiMTAwJSIpfSl9cmV0dXJuIGQuZmxleHx8ZFsiZmxleC1ncm93Il18fChkPVMocCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6bn06e2ZsZXg6dCsiICIrZSsiICIrbn0pKSwiMCUiIT09biYmIjBweCIhPT1uJiYiMC4wMDAwMDAwMDFweCIhPT1uJiYiYXV0byIhPT1uJiYoZFtvXT1ofHxjJiZ0P246bnVsbCxkW3JdPWh8fCFzJiZlP246bnVsbCksZFtvXXx8ZFtyXT90aGlzLl9sYXlvdXQmJnRoaXMuX2xheW91dC53cmFwJiYoZFthPyJmbGV4LWJhc2lzIjoiZmxleCJdPWRbcl0/YT9kW3JdOnQrIiAiK2UrIiAiK2Rbcl06YT9kW29dOnQrIiAiK2UrIiAiK2Rbb10pOmQ9UyhwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpufTp7ZmxleDp0KyIgIitlKyIgIitufSksUyhkLHsiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGV9KHIuYiksTz17bWFyZ2luOjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsIm1pbi13aWR0aCI6IjEwMCUiLCJtaW4taGVpZ2h0IjoiMTAwJSJ9LGs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiByLmVsUmVmPW4sci5fYXBwbHlTdHlsZVRvRWxlbWVudChPKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIuYiksVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5fbGF5b3V0PSJyb3ciLGkmJihvLl9sYXlvdXRXYXRjaGVyPWkubGF5b3V0JC5zdWJzY3JpYmUoby5fb25MYXlvdXRDaGFuZ2UuYmluZChvKSkpLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbiIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbiIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25TbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnblNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25NZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkxnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25YbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnblhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuYWxpZ258fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygiYWxpZ24iLCJzdGFydCBzdHJldGNoIixmdW5jdGlvbih0KXtlLl91cGRhdGVXaXRoVmFsdWUodC52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt0PXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImFsaWduIil8fCJzdGFydCBzdHJldGNoIix0aGlzLl9tcUFjdGl2YXRpb24mJih0PXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl9idWlsZENTUyh0KSksdGhpcy5fYWxsb3dTdHJldGNoaW5nKHQsdGhpcy5fbGF5b3V0P3RoaXMuX2xheW91dDoicm93Iil9LGUucHJvdG90eXBlLl9vbkxheW91dENoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2xheW91dD0odC5kaXJlY3Rpb258fCIiKS50b0xvd2VyQ2FzZSgpLGcuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKTt2YXIgbj10aGlzLl9xdWVyeUlucHV0KCJhbGlnbiIpfHwic3RhcnQgc3RyZXRjaCI7dGhpcy5fbXFBY3RpdmF0aW9uJiYobj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpLHRoaXMuX2FsbG93U3RyZXRjaGluZyhuLHRoaXMuX2xheW91dHx8InJvdyIpfSxlLnByb3RvdHlwZS5fYnVpbGRDU1M9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj10LnNwbGl0KCIgIiksaT1uWzFdO3N3aXRjaChuWzBdKXtjYXNlImNlbnRlciI6ZVsianVzdGlmeS1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJzcGFjZS1hcm91bmQiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1hcm91bmQiO2JyZWFrO2Nhc2Uic3BhY2UtYmV0d2VlbiI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWJldHdlZW4iO2JyZWFrO2Nhc2Uic3BhY2UtZXZlbmx5IjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtZXZlbmx5IjticmVhaztjYXNlImVuZCI6Y2FzZSJmbGV4LWVuZCI6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtZW5kIjticmVhaztjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmRlZmF1bHQ6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtc3RhcnQifXN3aXRjaChpKXtjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LXN0YXJ0IjticmVhaztjYXNlImJhc2VsaW5lIjplWyJhbGlnbi1pdGVtcyJdPSJiYXNlbGluZSI7YnJlYWs7Y2FzZSJjZW50ZXIiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJjZW50ZXIiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6ZGVmYXVsdDplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0ic3RyZXRjaCJ9cmV0dXJuIFMoZSx7ZGlzcGxheToiZmxleCIsImZsZXgtZGlyZWN0aW9uIjp0aGlzLl9sYXlvdXR8fCJyb3ciLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KX0sZS5wcm90b3R5cGUuX2FsbG93U3RyZXRjaGluZz1mdW5jdGlvbih0LGUpeyJzdHJldGNoIj09dC5zcGxpdCgiICIpWzFdJiZ0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHsiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJtYXgtd2lkdGgiOl8oZSk/bnVsbDoiMTAwJSIsIm1heC1oZWlnaHQiOl8oZSk/IjEwMCUiOm51bGx9KX0sZX0oci5iKSxqPWZ1bmN0aW9uKCl7fX0sIjI2RlUiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJtclNHIikscj1uKCJLOUlhIiksbz1uKCI4ZzhBIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdmFsdWU9ZSxufXJldHVybiBpLmIoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLGUpO3JldHVybiBuJiYhbi5jbG9zZWQmJmUubmV4dCh0aGlzLl92YWx1ZSksbn0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0Vycm9yKXRocm93IHRoaXMudGhyb3duRXJyb3I7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IG8uYTtyZXR1cm4gdGhpcy5fdmFsdWV9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsdGhpcy5fdmFsdWU9ZSl9LGV9KHIuYSl9LCIyQmRqIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sIjJlUGwiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR9fSwiM3BKUSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4oIm1yU0ciKSxuKCJPemZCIiksbigibjZnRyIpO3ZhciBpPWZ1bmN0aW9uKCl7fX0sIjRjMzUiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgaT1uKCJtclNHIikscj1uKCJDY25HIik7ZnVuY3Rpb24gbygpe3Rocm93IEVycm9yKCJIb3N0IGFscmVhZHkgaGFzIGEgcG9ydGFsIGF0dGFjaGVkIil9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQmJmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGEgcG9ydGFsIHRvIGEgbnVsbCBQb3J0YWxPdXRsZXQiKX0oKSx0Lmhhc0F0dGFjaGVkKCkmJm8oKSx0aGlzLl9hdHRhY2hlZEhvc3Q9dCx0LmF0dGFjaCh0aGlzKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYXR0YWNoZWRIb3N0O251bGw9PXQ/ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBkZXRhY2ggYSBwb3J0YWwgdGhhdCBpcyBub3QgYXR0YWNoZWQgdG8gYSBob3N0Iil9KCk6KHRoaXMuX2F0dGFjaGVkSG9zdD1udWxsLHQuZGV0YWNoKCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzQXR0YWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fYXR0YWNoZWRIb3N0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldEF0dGFjaGVkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hdHRhY2hlZEhvc3Q9dH0sdH0oKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5jb21wb25lbnQ9ZSxyLnZpZXdDb250YWluZXJSZWY9bixyLmluamVjdG9yPWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShhKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci50ZW1wbGF0ZVJlZj1lLHIudmlld0NvbnRhaW5lclJlZj1uLHIuY29udGV4dD1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvcmlnaW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZVJlZi5lbGVtZW50UmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj10aGlzLmNvbnRleHQpLHRoaXMuY29udGV4dD1uLHQucHJvdG90eXBlLmF0dGFjaC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQ9dm9pZCAwLHQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpfSxlfShhKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzRGlzcG9zZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmhhc0F0dGFjaGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hdHRhY2hlZFBvcnRhbH0sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiB0fHxmdW5jdGlvbigpe3Rocm93IEVycm9yKCJNdXN0IHByb3ZpZGUgYSBwb3J0YWwgdG8gYXR0YWNoIil9KCksdGhpcy5oYXNBdHRhY2hlZCgpJiZvKCksdGhpcy5faXNEaXNwb3NlZCYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiVGhpcyBQb3J0YWxPdXRsZXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCIpfSgpLHQgaW5zdGFuY2VvZiBzPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgdT8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpKTp2b2lkIGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGFuIHVua25vd24gUG9ydGFsIHR5cGUuIEJhc2VQb3J0YWxPdXRsZXQgYWNjZXB0cyBlaXRoZXIgYSBDb21wb25lbnRQb3J0YWwgb3IgYSBUZW1wbGF0ZVBvcnRhbC4iKX0oKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWRQb3J0YWwmJih0aGlzLl9hdHRhY2hlZFBvcnRhbC5zZXRBdHRhY2hlZEhvc3QobnVsbCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuZGV0YWNoKCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCksdGhpcy5faXNEaXNwb3NlZD0hMH0sdC5wcm90b3R5cGUuc2V0RGlzcG9zZUZuPWZ1bmN0aW9uKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fSx0LnByb3RvdHlwZS5faW52b2tlRGlzcG9zZUZuPWZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZUZuJiYodGhpcy5fZGlzcG9zZUZuKCksdGhpcy5fZGlzcG9zZUZuPW51bGwpfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8ub3V0bGV0RWxlbWVudD1lLG8uX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uLG8uX2FwcFJlZj1pLG8uX2RlZmF1bHRJbmplY3Rvcj1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuYXR0YWNoQ29tcG9uZW50UG9ydGFsPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPXRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCk7cmV0dXJuIHQudmlld0NvbnRhaW5lclJlZj8oZT10LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGksdC52aWV3Q29udGFpbmVyUmVmLmxlbmd0aCx0LmluamVjdG9yfHx0LnZpZXdDb250YWluZXJSZWYucGFyZW50SW5qZWN0b3IpLHRoaXMuc2V0RGlzcG9zZUZuKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSkpOihlPWkuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3RvciksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoZS5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXtuLl9hcHBSZWYuZGV0YWNoVmlldyhlLmhvc3RWaWV3KSxlLmRlc3Ryb3koKX0pKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZ2V0Q29tcG9uZW50Um9vdE5vZGUoZSkpLGV9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnZpZXdDb250YWluZXJSZWYsaT1uLmNyZWF0ZUVtYmVkZGVkVmlldyh0LnRlbXBsYXRlUmVmLHQuY29udGV4dCk7cmV0dXJuIGkuZGV0ZWN0Q2hhbmdlcygpLGkucm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0KX0pLHRoaXMuc2V0RGlzcG9zZUZuKGZ1bmN0aW9uKCl7dmFyIHQ9bi5pbmRleE9mKGkpOy0xIT09dCYmbi5yZW1vdmUodCl9KSxpfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLG51bGwhPXRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLm91dGxldEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm91dGxldEVsZW1lbnQpfSxlLnByb3RvdHlwZS5fZ2V0Q29tcG9uZW50Um9vdE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9zdFZpZXcucm9vdE5vZGVzWzBdfSxlfShsKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLGkuX3ZpZXdDb250YWluZXJSZWY9bixpLl9pc0luaXRpYWxpemVkPSExLGkuYXR0YWNoZWQ9bmV3IHIubixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicG9ydGFsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUG9ydGFsfSxzZXQ6ZnVuY3Rpb24oZSl7KCF0aGlzLmhhc0F0dGFjaGVkKCl8fGV8fHRoaXMuX2lzSW5pdGlhbGl6ZWQpJiYodGhpcy5oYXNBdHRhY2hlZCgpJiZ0LnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKSxlJiZ0LnByb3RvdHlwZS5hdHRhY2guY2FsbCh0aGlzLGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYXR0YWNoZWRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsLHRoaXMuX2F0dGFjaGVkUmVmPW51bGx9LGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbihlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTt2YXIgbj1udWxsIT1lLnZpZXdDb250YWluZXJSZWY/ZS52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsaT10aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jb21wb25lbnQpLHI9bi5jcmVhdGVDb21wb25lbnQoaSxuLmxlbmd0aCxlLmluamVjdG9yfHxuLnBhcmVudEluamVjdG9yKTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0RGlzcG9zZUZuLmNhbGwodGhpcyxmdW5jdGlvbigpe3JldHVybiByLmRlc3Ryb3koKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cix0aGlzLmF0dGFjaGVkLmVtaXQocikscn0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTt2YXIgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlLnRlbXBsYXRlUmVmLGUuY29udGV4dCk7cmV0dXJuIHQucHJvdG90eXBlLnNldERpc3Bvc2VGbi5jYWxsKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gbi5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfSxlfShsKSxoPWZ1bmN0aW9uKCl7fSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3BhcmVudEluamVjdG9yPXQsdGhpcy5fY3VzdG9tVG9rZW5zPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2N1c3RvbVRva2Vucy5nZXQodCk7cmV0dXJuIHZvaWQgMCE9PW4/bjp0aGlzLl9wYXJlbnRJbmplY3Rvci5nZXQodCxlKX0sdH0oKX0sIjYwaVUiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJHNUoxIikscj1uKCJGL1hMIiksbz1uKCJYbFB3IiksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPW4sdGhpcy5oYXNWYWx1ZT0iTiI9PT10fXJldHVybiB0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQubmV4dCYmdC5uZXh0KHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIHQuZXJyb3ImJnQuZXJyb3IodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gdC5jb21wbGV0ZSYmdC5jb21wbGV0ZSgpfX0sdC5wcm90b3R5cGUuZG89ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQmJnQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gZSYmZSh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBuJiZuKCl9fSx0LnByb3RvdHlwZS5hY2NlcHQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0P3RoaXMub2JzZXJ2ZSh0KTp0aGlzLmRvKHQsZSxuKX0sdC5wcm90b3R5cGUudG9PYnNlcnZhYmxlPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gT2JqZWN0KHIuYSkodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gT2JqZWN0KG8uYSkodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gT2JqZWN0KGkuYikoKX10aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgdmFsdWUiKX0sdC5jcmVhdGVOZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lP25ldyB0KCJOIixlKTp0LnVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9ufSx0LmNyZWF0ZUVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdCgiRSIsdm9pZCAwLGUpfSx0LmNyZWF0ZUNvbXBsZXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcGxldGVOb3RpZmljYXRpb259LHQuY29tcGxldGVOb3RpZmljYXRpb249bmV3IHQoIkMiKSx0LnVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9uPW5ldyB0KCJOIix2b2lkIDApLHR9KCl9LCI2N1kvIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uIEFyZSB5b3UgbG9va2luZyBmb3IgYG1hcFRvKClgPyIpO3JldHVybiBuLmxpZnQobmV3IGEodCxlKSl9fXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucHJvamVjdD10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzKHQsdGhpcy5wcm9qZWN0LHRoaXMudGhpc0FyZykpfSx0fSgpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucHJvamVjdD1uLHIuY291bnQ9MCxyLnRoaXNBcmc9aXx8cixyfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByb2plY3QuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShyLmEpfSwiNlVNeCI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJDY25HIikscj0obigiMC9RNiIpLG4oIklwMFIiKSxuKCJGenFjIiksbigiV2Y0cCIpKSxvPW4oImRXWmciKSxhPShuKCJMQzVwIiksbigid0Z3MSIpKTtuKCJnSWNZIiksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBofSk7dmFyIHM9aS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci10b3Atc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci10b3A6MDtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6ODBweH1bZGlyPXJ0bF0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjgwcHh9Lm1hdC1zdWJoZWFkZXJ7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjE2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXJ7bWFyZ2luOjB9Lm1hdC1saXN0LC5tYXQtbmF2LWxpc3QsLm1hdC1zZWxlY3Rpb24tbGlzdHtwYWRkaW5nLXRvcDo4cHg7ZGlzcGxheTpibG9jazstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNnB4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFye2hlaWdodDo1NnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZXtoZWlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmV7aGVpZ2h0Ojg4cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5le2hlaWdodDphdXRvfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0Pip7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6aW5oZXJpdH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjcycHg7d2lkdGg6Y2FsYygxMDAlIC0gNzJweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjcycHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MjRweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2NHB4O3dpZHRoOmNhbGMoMTAwJSAtIDY0cHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2NHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1saXN0W2RlbnNlXSwubWF0LW5hdi1saXN0W2RlbnNlXSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXXtwYWRkaW5nLXRvcDo0cHg7ZGlzcGxheTpibG9ja30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257ZGlzcGxheTpibG9jaztoZWlnaHQ6NDBweDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2OHB4O3dpZHRoOmNhbGMoMTAwJSAtIDY4cHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Zm9udC1zaXplOjIwcHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjBweDt3aWR0aDpjYWxjKDEwMCUgLSA2MHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjBweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbmF2LWxpc3QgYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0fS5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW17Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5tYXQtbGlzdC1vcHRpb246bm90KC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9QG1lZGlhIChob3Zlcjpub25lKXsubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDowIDB9fSJdLGRhdGE6e319KTtmdW5jdGlvbiB1KHQpe3JldHVybiBpLmxiKDIsW2kuYWIobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgbD1pLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1kaXZpZGVye2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXRvcDowO2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo4MHB4fVtkaXI9cnRsXSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6ODBweH0ubWF0LXN1YmhlYWRlcntkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTZweDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcnttYXJnaW46MH0ubWF0LWxpc3QsLm1hdC1uYXYtbGlzdCwubWF0LXNlbGVjdGlvbi1saXN0e3BhZGRpbmctdG9wOjhweDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi04cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQ4cHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFye2ZsZXgtc2hyaW5rOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NzJweDt3aWR0aDpjYWxjKDEwMCUgLSA3MnB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb257ZmxleC1zaHJpbms6MDt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzo0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY0cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjRweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO21hcmdpbjowfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWxpc3RbZGVuc2VdLC5tYXQtbmF2LWxpc3RbZGVuc2VdLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2Vde3BhZGRpbmctdG9wOjRweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0MHB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDppbmhlcml0fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNnB4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFye2hlaWdodDo0OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZXtoZWlnaHQ6NjBweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmV7aGVpZ2h0Ojc2cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5le2hlaWdodDphdXRvfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0Pip7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH1AbWVkaWEgKGhvdmVyOm5vbmUpey5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlcntiYWNrZ3JvdW5kOjAgMH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIGModCl7cmV0dXJuIGkubGIoMixbaS5hYihudWxsLDApXSxudWxsLG51bGwpfXZhciBmPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGkubGIoMixbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCw2LCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLlJhKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0tcmlwcGxlIG1hdC1yaXBwbGUiXSxbIm1hdC1yaXBwbGUiLCIiXV0sW1syLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDIsMjEyOTkyLG51bGwsMCxyLnUsW2kuayxpLnosby5hLFsyLHIua10sWzIsYS5hXV0se2Rpc2FibGVkOlswLCJkaXNhYmxlZCJdLHRyaWdnZXI6WzEsInRyaWdnZXIiXX0sbnVsbCksaS5hYihudWxsLDApLCh0KCkoKSxpLlJhKDQsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LXRleHQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5hYihudWxsLDEpLGkuYWIobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLGkuYmIoZSwyKS51bmJvdW5kZWQpfSl9fSwiNmFodyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oImlMeFEiKSxyPW4oIkRLVGIiKSxvPXtjbG9zZWQ6ITAsbmV4dDpmdW5jdGlvbih0KXt9LGVycm9yOmZ1bmN0aW9uKHQpe2lmKGkuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7T2JqZWN0KHIuYSkodCl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7fX19LCI2YmxGIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIkZGT28iKSxyPW4oIkwvVjkiKSxvPW4oIjZhaHciKSxhPW4oInhUbGEiKSxzPW4oInkzQnkiKSx1PW4oImlMeFEiKTtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pc1NjYWxhcj0hMSx0JiYodGhpcy5fc3Vic2NyaWJlPXQpfXJldHVybiB0LnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLnNvdXJjZT10aGlzLG4ub3BlcmF0b3I9ZSxufSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXRoaXMub3BlcmF0b3Iscz1mdW5jdGlvbih0LGUsbil7aWYodCl7aWYodCBpbnN0YW5jZW9mIGkuYSlyZXR1cm4gdDtpZih0W3IuYV0pcmV0dXJuIHRbci5hXSgpfXJldHVybiB0fHxlfHxuP25ldyBpLmEodCxlLG4pOm5ldyBpLmEoby5hKX0odCxlLG4pO2lmKGE/YS5jYWxsKHMsdGhpcy5zb3VyY2UpOnMuYWRkKHRoaXMuc291cmNlfHx1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmIXMuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX3N1YnNjcmliZShzKTp0aGlzLl90cnlTdWJzY3JpYmUocykpLHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZzLnN5bmNFcnJvclRocm93YWJsZSYmKHMuc3luY0Vycm9yVGhyb3dhYmxlPSExLHMuc3luY0Vycm9yVGhyb3duKSl0aHJvdyBzLnN5bmNFcnJvclZhbHVlO3JldHVybiBzfSx0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHQpfWNhdGNoKGUpe3UuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYodC5zeW5jRXJyb3JUaHJvd249ITAsdC5zeW5jRXJyb3JWYWx1ZT1lKSx0LmVycm9yKGUpfX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyhlPWMoZSkpKGZ1bmN0aW9uKGUsaSl7dmFyIHI7cj1uLnN1YnNjcmliZShmdW5jdGlvbihlKXt0cnl7dChlKX1jYXRjaCh0KXtpKHQpLHImJnIudW5zdWJzY3JpYmUoKX19LGksZSl9KX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNvdXJjZTtyZXR1cm4gZSYmZS5zdWJzY3JpYmUodCl9LHQucHJvdG90eXBlW2EuYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMD09PXQubGVuZ3RoP3RoaXM6T2JqZWN0KHMuYikodCkodGhpcyl9LHQucHJvdG90eXBlLnRvUHJvbWlzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcodD1jKHQpKShmdW5jdGlvbih0LG4pe3ZhciBpO2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBpPXR9LGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSxmdW5jdGlvbigpe3JldHVybiB0KGkpfSl9KX0sdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUpfSx0fSgpO2Z1bmN0aW9uIGModCl7aWYodHx8KHQ9dS5hLlByb21pc2V8fFByb21pc2UpLCF0KXRocm93IG5ldyBFcnJvcigibm8gUHJvbWlzZSBpbXBsIGZvdW5kIik7cmV0dXJuIHR9fSwiOGc4QSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIm1yU0ciKSxyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcywib2JqZWN0IHVuc3Vic2NyaWJlZCIpfHx0aGlzO3JldHVybiBuLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gaS5iKGUsdCksZX0oRXJyb3IpfSwiOG1NciI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIGk9bigibXJTRyIpLHI9bigiQ2NuRyIpLG89bigiV2Y0cCIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuX3BsYXRmb3JtPW4sci5fZG9jdW1lbnQ9aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7T2JqZWN0KHIuWikoKSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKX0pKX0sZS5wcm90b3R5cGUuX2NoZWNrVG9vbGJhck1peGVkTW9kZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Rvb2xiYXJSb3dzLmxlbmd0aCYmW10uc2xpY2UuY2FsbCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jbGFzc0xpc3QmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtdG9vbGJhci1yb3ciKSl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGUhPT0odC5fZG9jdW1lbnQ/dC5fZG9jdW1lbnQuQ09NTUVOVF9OT0RFOjgpfSkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29udGVudC50cmltKCl9KSYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTWF0VG9vbGJhcjogQXR0ZW1wdGluZyB0byBjb21iaW5lIGRpZmZlcmVudCB0b29sYmFyIG1vZGVzLiBFaXRoZXIgc3BlY2lmeSBtdWx0aXBsZSBgPG1hdC10b29sYmFyLXJvdz5gIGVsZW1lbnRzIGV4cGxpY2l0bHkgb3IganVzdCBwbGFjZSBjb250ZW50IGluc2lkZSBvZiBhIGA8bWF0LXRvb2xiYXI+YCBmb3IgYSBzaW5nbGUgcm93LiIpfSgpfSxlfShPYmplY3Qoby56KShmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSkscz1mdW5jdGlvbigpe319LCI5WjFGIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIGk9bigibXJTRyIpLHI9bigiTUdCUyIpLG89bigiem90bSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBzKHQpLGk9ZS5saWZ0KG4pO3JldHVybiBuLmNhdWdodD1pfX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB1KHQsdGhpcy5zZWxlY3Rvcix0aGlzLmNhdWdodCkpfSx0fSgpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuc2VsZWN0b3I9bixyLmNhdWdodD1pLHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIG49dm9pZCAwO3RyeXtuPXRoaXMuc2VsZWN0b3IoZSx0aGlzLmNhdWdodCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLGUpfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpLHRoaXMuYWRkKE9iamVjdChvLmEpKHRoaXMsbikpfX0sZX0oci5hKX0sQXlKcTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIGk9bigiQ2NuRyIpLHI9KG4oImpsWm0iKSxuKCJJcDBSIikpLG89KG4oIlloYk8iKSxuKCI0YzM1IikpLGE9KG4oIllsYlEiKSxuKCJsTEFQIiksaS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVse3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7dHJhbnNpdGlvbjptYXJnaW4gMjI1bXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZXhwYW5zaW9uLXBhbmVse291dGxpbmU6c29saWQgMXB4fX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e292ZXJmbG93OmhpZGRlbn0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50Lm1hdC1leHBhbmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHl7cGFkZGluZzowIDI0cHggMTZweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5ne21hcmdpbjoxNnB4IDB9Lm1hdC1hY2NvcmRpb24+Lm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZzpmaXJzdC1jaGlsZCwubWF0LWFjY29yZGlvbj46Zmlyc3QtY2hpbGQ6bm90KC5tYXQtZXhwYW5zaW9uLXBhbmVsKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5ne21hcmdpbi10b3A6MH0ubWF0LWFjY29yZGlvbj4ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nOmxhc3QtY2hpbGQsLm1hdC1hY2NvcmRpb24+Omxhc3QtY2hpbGQ6bm90KC5tYXQtZXhwYW5zaW9uLXBhbmVsKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5ne21hcmdpbi1ib3R0b206MH0ubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjE2cHggOHB4IDE2cHggMjRweH0ubWF0LWFjdGlvbi1yb3cgYnV0dG9uLm1hdC1idXR0b257bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWFjdGlvbi1yb3cgYnV0dG9uLm1hdC1idXR0b257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fSJdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJib2R5RXhwYW5zaW9uIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiIwcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IioiLHZpc2liaWxpdHk6InZpc2libGUifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pKTtmdW5jdGlvbiBzKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLklhKDAsbnVsbCxudWxsLDApKV0sbnVsbCxudWxsKX1mdW5jdGlvbiB1KHQpe3JldHVybiBpLmxiKDIsW2kuYWIobnVsbCwwKSwodCgpKCksaS5SYSgxLDAsW1siYm9keSIsMV1dLG51bGwsNSwiZGl2IixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCJdLFsicm9sZSIsInJlZ2lvbiJdXSxbWzI0LCJAYm9keUV4cGFuc2lvbiIsMF0sWzEsImFyaWEtbGFiZWxsZWRieSIsMF0sWzgsImlkIiwwXV0sW1tudWxsLCJAYm9keUV4cGFuc2lvbi5kb25lIl0sW251bGwsIkBib2R5RXhwYW5zaW9uLnN0YXJ0Il1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMCxyPXQuY29tcG9uZW50O3JldHVybiJAYm9keUV4cGFuc2lvbi5kb25lIj09PWUmJihpPSExIT09ci5fYm9keUFuaW1hdGlvbihuKSYmaSksIkBib2R5RXhwYW5zaW9uLnN0YXJ0Ij09PWUmJihpPSExIT09ci5fYm9keUFuaW1hdGlvbihuKSYmaSksaX0sbnVsbCxudWxsKSksKHQoKSgpLGkuUmEoMiwwLG51bGwsbnVsbCwzLCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwxKSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLHMpKSxpLlFhKDUsMjEyOTkyLG51bGwsMCxvLmIsW2kuaixpLlFdLHtwb3J0YWw6WzAsInBvcnRhbCJdfSxudWxsKSxpLmFiKG51bGwsMildLGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxlLmNvbXBvbmVudC5fcG9ydGFsKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uX2dldEV4cGFuZGVkU3RhdGUoKSxuLl9oZWFkZXJJZCxuLmlkKX0pfXZhciBsPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDI0cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntvdXRsaW5lOjB9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZDpmb2N1cywubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmhvdmVye2JhY2tncm91bmQ6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtjdXJzb3I6cG9pbnRlcn0ubWF0LWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpyb3c7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO21hcmdpbi1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sW2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntmbGV4LWdyb3c6Mn0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAycHggMnB4IDA7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjNweDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImluZGljYXRvclJvdGF0ZSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDBkZWcpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDE4MGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX0se3R5cGU6NyxuYW1lOiJleHBhbnNpb25IZWlnaHQiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7Y29sbGFwc2VkSGVpZ2h0fX0ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp7cGFyYW1zOntjb2xsYXBzZWRIZWlnaHQ6IjQ4cHgifX19LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiJ7e2V4cGFuZGVkSGVpZ2h0fX0ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp7cGFyYW1zOntleHBhbmRlZEhlaWdodDoiNjRweCJ9fX0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6MyxzdGVwczpbe3R5cGU6MTEsc2VsZWN0b3I6IkBpbmRpY2F0b3JSb3RhdGUiLGFuaW1hdGlvbjp7dHlwZTo5LG9wdGlvbnM6bnVsbH0sb3B0aW9uczp7b3B0aW9uYWw6ITB9fSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9XSxvcHRpb25zOm51bGx9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBjKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsMCwic3BhbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLWluZGljYXRvciJdXSxbWzI0LCJAaW5kaWNhdG9yUm90YXRlIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0pfWZ1bmN0aW9uIGYodCl7cmV0dXJuIGkubGIoMixbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwzLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwwKSxpLmFiKG51bGwsMSksaS5hYihudWxsLDIpLCh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsYykpLGkuUWEoNSwxNjM4NCxudWxsLDAsci5rLFtpLlEsaS5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUuY29tcG9uZW50Ll9zaG93VG9nZ2xlKCkpfSxudWxsKX19LEJIbmQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gT30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oInk0cVMiKSxvPW4oIllsYlEiKSxhPW4oIm42Z0ciKSxzPW4oIjI2RlUiKSx1PW4oInB1Z1QiKSxsPW4oInAwaWIiKSxjPW4oIkYvWEwiKSxmPW4oImR6Z1QiKSxoPW4oIjY3WS8iKSxkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4saSxyLG8pfHx0aGlzO3JldHVybiBhLl9kaWZmZXJzPWUsYS5fY2hhbmdlRGV0ZWN0b3JSZWY9bixhLl9lbGVtZW50UmVmPWksYS5fZGlyPW8sYS5zdGlja3lDc3NDbGFzcz0ibWF0LXRhYmxlLXN0aWNreSIsYX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLm8pLHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5iKSxtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIuaikseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLmQpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG4ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtY29sdW1uLSIrZS5jc3NDbGFzc0ZyaWVuZGx5TmFtZSksaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLmkpLGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG4ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtY29sdW1uLSIrZS5jc3NDbGFzc0ZyaWVuZGx5TmFtZSksaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLmEpLGI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5sKSxfPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIubiksdz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLmspLHg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5nKSxDPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIubSksUz1mdW5jdGlvbigpe30sRT05MDA3MTk5MjU0NzQwOTkxLE89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9yZW5kZXJEYXRhPW5ldyBzLmEoW10pLG4uX2ZpbHRlcj1uZXcgcy5hKCIiKSxuLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPXUuYS5FTVBUWSxuLnNvcnRpbmdEYXRhQWNjZXNzb3I9ZnVuY3Rpb24odCxlKXt2YXIgbj10W2VdO2lmKE9iamVjdChhLmEpKG4pKXt2YXIgaT1OdW1iZXIobik7cmV0dXJuIGk8RT9pOm59cmV0dXJuIG59LG4uc29ydERhdGE9ZnVuY3Rpb24odCxlKXt2YXIgaT1lLmFjdGl2ZSxyPWUuZGlyZWN0aW9uO3JldHVybiBpJiYiIiE9cj90LnNvcnQoZnVuY3Rpb24odCxlKXt2YXIgbz1uLnNvcnRpbmdEYXRhQWNjZXNzb3IodCxpKSxhPW4uc29ydGluZ0RhdGFBY2Nlc3NvcihlLGkpLHM9MDtyZXR1cm4gbnVsbCE9byYmbnVsbCE9YT9vPmE/cz0xOm88YSYmKHM9LTEpOm51bGwhPW8/cz0xOm51bGwhPWEmJihzPS0xKSxzKigiYXNjIj09cj8xOi0xKX0pOnR9LG4uZmlsdGVyUHJlZGljYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCkucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUrdFtuXX0sIiIpLnRvTG93ZXJDYXNlKCksaT1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVybi0xIT1uLmluZGV4T2YoaSl9LG4uX2RhdGE9bmV3IHMuYShlKSxuLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKSxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGF0YS5uZXh0KHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmlsdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlci52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpbHRlci5uZXh0KHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic29ydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3J0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGFnaW5hdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2luYXRvcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3BhZ2luYXRvcj10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fc29ydD9PYmplY3QobC5hKSh0aGlzLl9zb3J0LnNvcnRDaGFuZ2UsdGhpcy5fc29ydC5pbml0aWFsaXplZCk6T2JqZWN0KGMuYSkobnVsbCksbj10aGlzLl9wYWdpbmF0b3I/T2JqZWN0KGwuYSkodGhpcy5fcGFnaW5hdG9yLnBhZ2UsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpPYmplY3QoYy5hKShudWxsKSxpPXRoaXMuX2RhdGEscj1PYmplY3QoZi5hKShpLHRoaXMuX2ZpbHRlcikucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5fZmlsdGVyRGF0YShlWzBdKX0pKSxvPU9iamVjdChmLmEpKHIsZSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5fb3JkZXJEYXRhKGVbMF0pfSkpLGE9T2JqZWN0KGYuYSkobyxuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9wYWdlRGF0YShlWzBdKX0pKTt0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShmdW5jdGlvbihlKXtyZXR1cm4gdC5fcmVuZGVyRGF0YS5uZXh0KGUpfSl9LGUucHJvdG90eXBlLl9maWx0ZXJEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhPXRoaXMuZmlsdGVyP3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlLmZpbHRlclByZWRpY2F0ZSh0LGUuZmlsdGVyKX0pOnQsdGhpcy5wYWdpbmF0b3ImJnRoaXMuX3VwZGF0ZVBhZ2luYXRvcih0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGgpLHRoaXMuZmlsdGVyZWREYXRhfSxlLnByb3RvdHlwZS5fb3JkZXJEYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvcnQ/dGhpcy5zb3J0RGF0YSh0LnNsaWNlKCksdGhpcy5zb3J0KTp0fSxlLnByb3RvdHlwZS5fcGFnZURhdGE9ZnVuY3Rpb24odCl7aWYoIXRoaXMucGFnaW5hdG9yKXJldHVybiB0O3ZhciBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZSgpLnNwbGljZShlLHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVBhZ2luYXRvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZihlLnBhZ2luYXRvciYmKGUucGFnaW5hdG9yLmxlbmd0aD10LGUucGFnaW5hdG9yLnBhZ2VJbmRleD4wKSl7dmFyIG49TWF0aC5jZWlsKGUucGFnaW5hdG9yLmxlbmd0aC9lLnBhZ2luYXRvci5wYWdlU2l6ZSktMXx8MDtlLnBhZ2luYXRvci5wYWdlSW5kZXg9TWF0aC5taW4oZS5wYWdpbmF0b3IucGFnZUluZGV4LG4pfX0pfSxlLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckRhdGF9LGUucHJvdG90eXBlLmRpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt9LGV9KG8uYSl9LEJnV0s6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB3fSk7dmFyIGk9bigiQ2NuRyIpLHI9KG4oImloWVkiKSxuKCJXZjRwIiksbigibXJTRyIpKSxvPW4oIjRjMzUiKSxhPW4oInZHWFkiKSxzPW4oIklwMFIiKSx1PW4oImVEa1AiKSxsPW4oIllTaDIiKSxjPW4oIks5SWEiKSxmPW4oInB1Z1QiKSxoPW4oInAwaWIiKSxkPW4oIkYvWEwiKSxwPW4oIlZuRC8iKSxtPW4oInQ5ZloiKSx5PW4oIkZ6cWMiKSx2PW5ldyBpLnEoIk1hdEJvdHRvbVNoZWV0RGF0YSIpLGc9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMH0sYj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLG8scyx1KXt2YXIgbD10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGwuX2VsZW1lbnRSZWY9ZSxsLl9jaGFuZ2VEZXRlY3RvclJlZj1uLGwuX2ZvY3VzVHJhcEZhY3Rvcnk9cixsLmJvdHRvbVNoZWV0Q29uZmlnPXUsbC5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLGwuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgaS5uLGwuX2VsZW1lbnRGb2N1c2VkQmVmb3JlT3BlbmVkPW51bGwsbC5fZG9jdW1lbnQ9cyxsLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPW8ub2JzZXJ2ZShbYS5iLk1lZGl1bSxhLmIuTGFyZ2UsYS5iLlhMYXJnZV0pLnN1YnNjcmliZShmdW5jdGlvbigpe2wuX3RvZ2dsZUNsYXNzKCJtYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lci1tZWRpdW0iLG8uaXNNYXRjaGVkKGEuYi5NZWRpdW0pKSxsLl90b2dnbGVDbGFzcygibWF0LWJvdHRvbS1zaGVldC1jb250YWluZXItbGFyZ2UiLG8uaXNNYXRjaGVkKGEuYi5MYXJnZSkpLGwuX3RvZ2dsZUNsYXNzKCJtYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lci14bGFyZ2UiLG8uaXNNYXRjaGVkKGEuYi5YTGFyZ2UpKX0pLGx9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYXR0YWNoQ29tcG9uZW50UG9ydGFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZVBvcnRhbEF0dGFjaGVkKCksdGhpcy5fc2V0UGFuZWxDbGFzcygpLHRoaXMuX3NhdmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKSx0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpfSxlLnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGVQb3J0YWxBdHRhY2hlZCgpLHRoaXMuX3NldFBhbmVsQ2xhc3MoKSx0aGlzLl9zYXZlUHJldmlvdXNseUZvY3VzZWRFbGVtZW50KCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpfSxlLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2aXNpYmxlIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpfSxlLnByb3RvdHlwZS5leGl0PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9ImhpZGRlbiIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9kZXN0cm95ZWQ9ITB9LGUucHJvdG90eXBlLl9vbkFuaW1hdGlvbkRvbmU9ZnVuY3Rpb24odCl7InZpc2libGUiPT09dC50b1N0YXRlP3RoaXMuX3RyYXBGb2N1cygpOiJoaWRkZW4iPT09dC50b1N0YXRlJiZ0aGlzLl9yZXN0b3JlRm9jdXMoKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQuZW1pdCh0KX0sZS5wcm90b3R5cGUuX29uQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQodCl9LGUucHJvdG90eXBlLl90b2dnbGVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7ZT9uLmFkZCh0KTpuLnJlbW92ZSh0KX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlUG9ydGFsQXR0YWNoZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSl0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYm90dG9tIHNoZWV0IGNvbnRlbnQgYWZ0ZXIgY29udGVudCBpcyBhbHJlYWR5IGF0dGFjaGVkIil9LGUucHJvdG90eXBlLl9zZXRQYW5lbENsYXNzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5ib3R0b21TaGVldENvbmZpZy5wYW5lbENsYXNzO0FycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTplJiZ0LmNsYXNzTGlzdC5hZGQoZSl9LGUucHJvdG90eXBlLl90cmFwRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXB8fCh0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSksdGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKX0sZS5wcm90b3R5cGUuX3Jlc3RvcmVGb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlT3BlbmVkO3QmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKCksdGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfSxlLnByb3RvdHlwZS5fc2F2ZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVPcGVuZWQ9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX0sZX0oby5hKSxfPWZ1bmN0aW9uKCl7fSx3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIGk9dGhpczt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IGMuYSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgYy5hLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz1mLmEuRU1QVFksdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHQuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKE9iamVjdChwLmEpKGZ1bmN0aW9uKHQpe3JldHVybiJkb25lIj09PXQucGhhc2VOYW1lJiYidmlzaWJsZSI9PT10LnRvU3RhdGV9KSxPYmplY3QobS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7aS5fYWZ0ZXJPcGVuZWQubmV4dCgpLGkuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSx0Ll9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4iZG9uZSI9PT10LnBoYXNlTmFtZSYmImhpZGRlbiI9PT10LnRvU3RhdGV9KSxPYmplY3QobS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7aS5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksaS5fb3ZlcmxheVJlZi5kaXNwb3NlKCksaS5fYWZ0ZXJEaXNtaXNzZWQubmV4dChpLl9yZXN1bHQpLGkuX2FmdGVyRGlzbWlzc2VkLmNvbXBsZXRlKCl9KSx0LmJvdHRvbVNoZWV0Q29uZmlnLmRpc2FibGVDbG9zZXx8T2JqZWN0KGguYSkoZS5iYWNrZHJvcENsaWNrKCksZS5rZXlkb3duRXZlbnRzKCkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlDb2RlPT09bC5nfSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5kaXNtaXNzKCl9KSxuJiYodGhpcy5fbG9jYXRpb25DaGFuZ2VzPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5ib3R0b21TaGVldENvbmZpZy5jbG9zZU9uTmF2aWdhdGlvbiYmaS5kaXNtaXNzKCl9KSl9cmV0dXJuIHQucHJvdG90eXBlLmRpc21pc3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9hZnRlckRpc21pc3NlZC5jbG9zZWR8fCh0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4ic3RhcnQiPT09dC5waGFzZU5hbWV9KSxPYmplY3QobS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX292ZXJsYXlSZWYuZGV0YWNoQmFja2Ryb3AoKX0pLHRoaXMuX3Jlc3VsdD10LHRoaXMuY29udGFpbmVySW5zdGFuY2UuZXhpdCgpKX0sdC5wcm90b3R5cGUuYWZ0ZXJEaXNtaXNzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmFmdGVyT3BlbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FmdGVyT3BlbmVkLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5iYWNrZHJvcENsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpfSx0LnByb3RvdHlwZS5rZXlkb3duRXZlbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpfSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX3BhcmVudEJvdHRvbVNoZWV0PW4sdGhpcy5fbG9jYXRpb249aSx0aGlzLl9ib3R0b21TaGVldFJlZkF0VGhpc0xldmVsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX29wZW5lZEJvdHRvbVNoZWV0UmVmIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50Qm90dG9tU2hlZXQ7cmV0dXJuIHQ/dC5fb3BlbmVkQm90dG9tU2hlZXRSZWY6dGhpcy5fYm90dG9tU2hlZXRSZWZBdFRoaXNMZXZlbH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3BhcmVudEJvdHRvbVNoZWV0P3RoaXMuX3BhcmVudEJvdHRvbVNoZWV0Ll9vcGVuZWRCb3R0b21TaGVldFJlZj10OnRoaXMuX2JvdHRvbVNoZWV0UmVmQXRUaGlzTGV2ZWw9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxhPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qoci5hKSh7fSxuZXcgZyx0KX0oZSkscz10aGlzLl9jcmVhdGVPdmVybGF5KGEpLHU9dGhpcy5fYXR0YWNoQ29udGFpbmVyKHMsYSksbD1uZXcgdyh1LHMsdGhpcy5fbG9jYXRpb24pO2lmKHQgaW5zdGFuY2VvZiBpLk4pdS5hdHRhY2hUZW1wbGF0ZVBvcnRhbChuZXcgby5nKHQsbnVsbCx7JGltcGxpY2l0OmEuZGF0YSxib3R0b21TaGVldFJlZjpsfSkpO2Vsc2V7dmFyIGM9bmV3IG8uYyh0LHZvaWQgMCx0aGlzLl9jcmVhdGVJbmplY3RvcihhLGwpKSxmPXUuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGMpO2wuaW5zdGFuY2U9Zi5pbnN0YW5jZX1yZXR1cm4gbC5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZShmdW5jdGlvbigpe24uX29wZW5lZEJvdHRvbVNoZWV0UmVmPT1sJiYobi5fb3BlbmVkQm90dG9tU2hlZXRSZWY9bnVsbCl9KSx0aGlzLl9vcGVuZWRCb3R0b21TaGVldFJlZj8odGhpcy5fb3BlbmVkQm90dG9tU2hlZXRSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gbC5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpfSksdGhpcy5fb3BlbmVkQm90dG9tU2hlZXRSZWYuZGlzbWlzcygpKTpsLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCksdGhpcy5fb3BlbmVkQm90dG9tU2hlZXRSZWY9bCxsfSx0LnByb3RvdHlwZS5kaXNtaXNzPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbmVkQm90dG9tU2hlZXRSZWYmJnRoaXMuX29wZW5lZEJvdHRvbVNoZWV0UmVmLmRpc21pc3MoKX0sdC5wcm90b3R5cGUuX2F0dGFjaENvbnRhaW5lcj1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBvLmUoZSYmZS52aWV3Q29udGFpbmVyUmVmJiZlLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLG5ldyBXZWFrTWFwKFtbZyxlXV0pKSxpPW5ldyBvLmMoYixlLnZpZXdDb250YWluZXJSZWYsbik7cmV0dXJuIHQuYXR0YWNoKGkpLmluc3RhbmNlfSx0LnByb3RvdHlwZS5fY3JlYXRlT3ZlcmxheT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdS5iKHtkaXJlY3Rpb246dC5kaXJlY3Rpb24saGFzQmFja2Ryb3A6dC5oYXNCYWNrZHJvcCxtYXhXaWR0aDoiMTAwJSIsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCkscG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCIwIil9KTtyZXR1cm4gdC5iYWNrZHJvcENsYXNzJiYoZS5iYWNrZHJvcENsYXNzPXQuYmFja2Ryb3BDbGFzcyksdGhpcy5fb3ZlcmxheS5jcmVhdGUoZSl9LHQucHJvdG90eXBlLl9jcmVhdGVJbmplY3Rvcj1mdW5jdGlvbih0LGUpe3ZhciBuPXQmJnQudmlld0NvbnRhaW5lclJlZiYmdC52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yLGk9bmV3IFdlYWtNYXAoW1t3LGVdLFt2LHQuZGF0YV1dKTtyZXR1cm4hdC5kaXJlY3Rpb258fG4mJm4uZ2V0KHkuYixudWxsKXx8aS5zZXQoeS5iLHt2YWx1ZTp0LmRpcmVjdGlvbixjaGFuZ2U6T2JqZWN0KGQuYSkoKX0pLG5ldyBvLmUobnx8dGhpcy5faW5qZWN0b3IsaSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKHUuYSksT2JqZWN0KGkuWSkoaS5vKSxPYmplY3QoaS5ZKSh0LDEyKSxPYmplY3QoaS5ZKShzLmcsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46X30pLHR9KCl9LENTOVE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJtclNHIikscj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXt2b2lkIDA9PT1uJiYobj10Lm5vdyksdGhpcy5TY2hlZHVsZXJBY3Rpb249ZSx0aGlzLm5vdz1ufXJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLG5ldyB0aGlzLlNjaGVkdWxlckFjdGlvbih0aGlzLHQpLnNjaGVkdWxlKG4sZSl9LHQubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LHR9KCk7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7dm9pZCAwPT09aSYmKGk9ci5ub3cpO3ZhciBvPXQuY2FsbCh0aGlzLG4sZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PW8/ZS5kZWxlZ2F0ZS5ub3coKTppKCl9KXx8dGhpcztyZXR1cm4gby5hY3Rpb25zPVtdLG8uYWN0aXZlPSExLG8uc2NoZWR1bGVkPXZvaWQgMCxvfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihuLGkscil7cmV0dXJuIHZvaWQgMD09PWkmJihpPTApLGUuZGVsZWdhdGUmJmUuZGVsZWdhdGUhPT10aGlzP2UuZGVsZWdhdGUuc2NoZWR1bGUobixpLHIpOnQucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxuLGkscil9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aW9ucztpZih0aGlzLmFjdGl2ZSllLnB1c2godCk7ZWxzZXt2YXIgbjt0aGlzLmFjdGl2ZT0hMDtkb3tpZihuPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLmFjdGl2ZT0hMSxuKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgbn19fSxlfShyKX0sQ2NuRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJLYSIsZnVuY3Rpb24oKXtyZXR1cm4gY259KSxuLmQoZSwiTGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZufSksbi5kKGUsIk1hIixmdW5jdGlvbigpe3JldHVybiBobn0pLG4uZChlLCJKYSIsZnVuY3Rpb24oKXtyZXR1cm4gU3R9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZ2V9KSxuLmQoZSwiViIsZnVuY3Rpb24oKXtyZXR1cm4gZmV9KSxuLmQoZSwiWiIsZnVuY3Rpb24oKXtyZXR1cm4gaGV9KSxuLmQoZSwiVCIsZnVuY3Rpb24oKXtyZXR1cm4gcGV9KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4gZGV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gQ3R9KSxuLmQoZSwiQyIsZnVuY3Rpb24oKXtyZXR1cm4gT3R9KSxuLmQoZSwiQiIsZnVuY3Rpb24oKXtyZXR1cm4ga3R9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gVHR9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3R9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4geHR9KSxuLmQoZSwiWCIsZnVuY3Rpb24oKXtyZXR1cm4gVmV9KSxuLmQoZSwiTyIsZnVuY3Rpb24oKXtyZXR1cm4gaWV9KSxuLmQoZSwiQmEiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lfSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGxufSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGRufSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIFp0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsIkgiLGZ1bmN0aW9uKCl7cmV0dXJuIFZufSksbi5kKGUsIkkiLGZ1bmN0aW9uKCl7cmV0dXJuIExufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gJH0pLG4uZChlLCJQIixmdW5jdGlvbigpe3JldHVybiBKfSksbi5kKGUsIlUiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiVyIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJZIixmdW5jdGlvbigpe3JldHVybiBLfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJLIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIEt0fSksbi5kKGUsIkUiLGZ1bmN0aW9uKCl7cmV0dXJuIHhlfSksbi5kKGUsIkYiLGZ1bmN0aW9uKCl7cmV0dXJuIF9lfSksbi5kKGUsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIHdlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIEl0fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIHp0fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIENlfSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIHF0fSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIEh0fSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIFNlfSksbi5kKGUsIkQiLGZ1bmN0aW9uKCl7cmV0dXJuIEVlfSksbi5kKGUsIkwiLGZ1bmN0aW9uKCl7cmV0dXJuIFRlfSksbi5kKGUsIk0iLGZ1bmN0aW9uKCl7cmV0dXJuIE9lfSksbi5kKGUsIk4iLGZ1bmN0aW9uKCl7cmV0dXJuIEFlfSksbi5kKGUsIlEiLGZ1bmN0aW9uKCl7cmV0dXJuIEllfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIE1lfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIFJlfSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJufSksbi5kKGUsIkoiLGZ1bmN0aW9uKCl7cmV0dXJuIEhlfSksbi5kKGUsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIFVlfSksbi5kKGUsIkFhIixmdW5jdGlvbigpe3JldHVybiB1bn0pLG4uZChlLCJVYSIsZnVuY3Rpb24oKXtyZXR1cm4gcWV9KSxuLmQoZSwiRWEiLGZ1bmN0aW9uKCl7cmV0dXJuIGp0fSksbi5kKGUsIkNhIixmdW5jdGlvbigpe3JldHVybiB1dH0pLG4uZChlLCJEYSIsZnVuY3Rpb24oKXtyZXR1cm4gQnR9KSxuLmQoZSwiRmEiLGZ1bmN0aW9uKCl7cmV0dXJuIE1ufSksbi5kKGUsIkdhIixmdW5jdGlvbigpe3JldHVybiBGbn0pLG4uZChlLCJIYSIsZnVuY3Rpb24oKXtyZXR1cm4gdm59KSxuLmQoZSwiU2EiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwiWGEiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiaWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiVmEiLGZ1bmN0aW9uKCl7cmV0dXJuIF90fSksbi5kKGUsIldhIixmdW5jdGlvbigpe3JldHVybiBidH0pLG4uZChlLCJJYSIsZnVuY3Rpb24oKXtyZXR1cm4gUml9KSxuLmQoZSwiTmEiLGZ1bmN0aW9uKCl7cmV0dXJuICRpfSksbi5kKGUsIk9hIixmdW5jdGlvbigpe3JldHVybiBzYX0pLG4uZChlLCJQYSIsZnVuY3Rpb24oKXtyZXR1cm4gaWl9KSxuLmQoZSwiUWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHhyfSksbi5kKGUsIlJhIixmdW5jdGlvbigpe3JldHVybiBNaX0pLG4uZChlLCJUYSIsZnVuY3Rpb24oKXtyZXR1cm4gQWl9KSxuLmQoZSwiWWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEhpfSksbi5kKGUsIlphIixmdW5jdGlvbigpe3JldHVybiBVaX0pLG4uZChlLCJhYiIsZnVuY3Rpb24oKXtyZXR1cm4gcXJ9KSxuLmQoZSwiYmIiLGZ1bmN0aW9uKCl7cmV0dXJuIGxyfSksbi5kKGUsImRiIixmdW5jdGlvbigpe3JldHVybiBDcn0pLG4uZChlLCJnYiIsZnVuY3Rpb24oKXtyZXR1cm4gU3J9KSxuLmQoZSwiY2IiLGZ1bmN0aW9uKCl7cmV0dXJuIFlyfSksbi5kKGUsImViIixmdW5jdGlvbigpe3JldHVybiBXcn0pLG4uZChlLCJmYiIsZnVuY3Rpb24oKXtyZXR1cm4gUXJ9KSxuLmQoZSwiaGIiLGZ1bmN0aW9uKCl7cmV0dXJuIFZyfSksbi5kKGUsImpiIixmdW5jdGlvbigpe3JldHVybiBLcn0pLG4uZChlLCJrYiIsZnVuY3Rpb24oKXtyZXR1cm4gdGl9KSxuLmQoZSwibGIiLGZ1bmN0aW9uKCl7cmV0dXJuIEpyfSk7dmFyIGk9bigibXJTRyIpLHI9bigicHVnVCIpLG89bigiSzlJYSIpLGE9bigiNmJsRiIpLHM9bigicDBpYiIpLHU9bigiUzFuWCIpO2Z1bmN0aW9uIGwodCl7cmV0dXJue3Byb3ZpZGVkSW46dC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6dC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fZGVzYz10LHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLm5nSW5qZWN0YWJsZURlZj12b2lkIDAhPT1lP2woe3Byb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KTp2b2lkIDB9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkluamVjdGlvblRva2VuICIrdGhpcy5fZGVzY30sdH0oKSxmPSJfX3BhcmFtZXRlcnNfXyI7ZnVuY3Rpb24gaCh0LGUsbil7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO2lmKHQpe3ZhciByPXQuYXBwbHkodm9pZCAwLE9iamVjdChpLmQpKGUpKTtmb3IodmFyIG8gaW4gcil0aGlzW29dPXJbb119fX0oZSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO2lmKHRoaXMgaW5zdGFuY2VvZiBvKXJldHVybiByLmFwcGx5KHRoaXMsZSksdGhpczt2YXIgYT1uZXcoKHQ9bykuYmluZC5hcHBseSh0LE9iamVjdChpLmQpKFt2b2lkIDBdLGUpKSk7cmV0dXJuIHMuYW5ub3RhdGlvbj1hLHM7ZnVuY3Rpb24gcyh0LGUsbil7Zm9yKHZhciBpPXQuaGFzT3duUHJvcGVydHkoZik/dFtmXTpPYmplY3QuZGVmaW5lUHJvcGVydHkodCxmLHt2YWx1ZTpbXX0pW2ZdO2kubGVuZ3RoPD1uOylpLnB1c2gobnVsbCk7cmV0dXJuKGlbbl09aVtuXXx8W10pLnB1c2goYSksdH19cmV0dXJuIG4mJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxvLmFubm90YXRpb25DbHM9byxvfXZhciBkPW5ldyBjKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIik7RnVuY3Rpb247dmFyIHA9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxtPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmLHk9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJmdsb2JhbHx8cHx8bSx2PVByb21pc2UucmVzb2x2ZSgwKSxnPW51bGw7ZnVuY3Rpb24gYigpe2lmKCFnKXt2YXIgdD15LlN5bWJvbDtpZih0JiZ0Lml0ZXJhdG9yKWc9dC5pdGVyYXRvcjtlbHNlIGZvcih2YXIgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhNYXAucHJvdG90eXBlKSxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBpPWVbbl07ImVudHJpZXMiIT09aSYmInNpemUiIT09aSYmTWFwLnByb3RvdHlwZVtpXT09PU1hcC5wcm90b3R5cGUuZW50cmllcyYmKGc9aSl9fXJldHVybiBnfWZ1bmN0aW9uIF8odCl7InVuZGVmaW5lZCI9PXR5cGVvZiBab25lP3YudGhlbihmdW5jdGlvbigpe3QmJnQuYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLHQpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gdD09PWV8fCJudW1iZXIiPT10eXBlb2YgdCYmIm51bWJlciI9PXR5cGVvZiBlJiZpc05hTih0KSYmaXNOYU4oZSl9ZnVuY3Rpb24geCh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIEFycmF5KXJldHVybiJbIit0Lm1hcCh4KS5qb2luKCIsICIpKyJdIjtpZihudWxsPT10KXJldHVybiIiK3Q7aWYodC5vdmVycmlkZGVuTmFtZSlyZXR1cm4iIit0Lm92ZXJyaWRkZW5OYW1lO2lmKHQubmFtZSlyZXR1cm4iIit0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpO2lmKG51bGw9PWUpcmV0dXJuIiIrZTt2YXIgbj1lLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1uP2U6ZS5zdWJzdHJpbmcoMCxuKX1mdW5jdGlvbiBDKHQpe3JldHVybiB0Ll9fZm9yd2FyZF9yZWZfXz1DLHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4geCh0aGlzKCkpfSx0fWZ1bmN0aW9uIFModCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuaGFzT3duUHJvcGVydHkoIl9fZm9yd2FyZF9yZWZfXyIpJiZ0Ll9fZm9yd2FyZF9yZWZfXz09PUM/dCgpOnR9dmFyIEU9aCgiSW5qZWN0IixmdW5jdGlvbih0KXtyZXR1cm57dG9rZW46dH19KSxPPWgoIk9wdGlvbmFsIiksaz1oKCJTZWxmIiksVD1oKCJTa2lwU2VsZiIpLGo9Il9fc291cmNlIixBPW5ldyBPYmplY3QsST1BLFI9bmV3IGMoIklOSkVDVE9SIiksTT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPUEpLGU9PT1BKXRocm93IG5ldyBFcnJvcigiTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAiK3godCkrIiEiKTtyZXR1cm4gZX0sdH0oKSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9uZXcgcSh0LGUpOm5ldyBxKHQucHJvdmlkZXJzLHQucGFyZW50LHQubmFtZXx8bnVsbCl9LHQuVEhST1dfSUZfTk9UX0ZPVU5EPUEsdC5OVUxMPW5ldyBNLHQubmdJbmplY3RhYmxlRGVmPWwoe3Byb3ZpZGVkSW46ImFueSIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBLKFIpfX0pLHR9KCksRD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sTj1bXSxGPUQsTD1mdW5jdGlvbigpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpfSxWPXt9LHo9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpaWYodFtlXT09PVYpcmV0dXJuIGU7dGhyb3cgRXJyb3IoIiFwcm9wIil9KHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpWfSksQj1QLk5VTEwsVT0vXG4vZ20sSD0iXHUwMjc1IixxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09ZSYmKGU9Qiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1uO3ZhciBpPXRoaXMuX3JlY29yZHM9bmV3IE1hcDtpLnNldChQLHt0b2tlbjpQLGZuOkQsZGVwczpOLHZhbHVlOnRoaXMsdXNlTmV3OiExfSksaS5zZXQoUix7dG9rZW46UixmbjpELGRlcHM6Tix2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLGZ1bmN0aW9uIHQoZSxuKXtpZihuKWlmKChuPVMobikpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl0KGUsbltpXSk7ZWxzZXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil0aHJvdyBZKCJGdW5jdGlvbi9DbGFzcyBub3Qgc3VwcG9ydGVkIixuKTtpZighbnx8Im9iamVjdCIhPXR5cGVvZiBufHwhbi5wcm92aWRlKXRocm93IFkoIlVuZXhwZWN0ZWQgcHJvdmlkZXIiLG4pO3ZhciByPVMobi5wcm92aWRlKSxvPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPU4sbj10LmRlcHM7aWYobiYmbi5sZW5ndGgpe2U9W107Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPTY7aWYoKHU9UyhuW2ldKSlpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgbz0wLGE9dTtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtzIGluc3RhbmNlb2YgT3x8cz09Tz9yfD0xOnMgaW5zdGFuY2VvZiBUfHxzPT1UP3ImPS0zOnMgaW5zdGFuY2VvZiBrfHxzPT1rP3ImPS01OnU9cyBpbnN0YW5jZW9mIEU/cy50b2tlbjpTKHMpfWUucHVzaCh7dG9rZW46dSxvcHRpb25zOnJ9KX19ZWxzZSBpZih0LnVzZUV4aXN0aW5nKXt2YXIgdTtlPVt7dG9rZW46dT1TKHQudXNlRXhpc3RpbmcpLG9wdGlvbnM6Nn1dfWVsc2UgaWYoIShufHx6IGluIHQpKXRocm93IFkoIidkZXBzJyByZXF1aXJlZCIsdCk7cmV0dXJuIGV9KHQpLG49RCxpPU4scj0hMSxvPVModC5wcm92aWRlKTtpZih6IGluIHQpaT10LnVzZVZhbHVlO2Vsc2UgaWYodC51c2VGYWN0b3J5KW49dC51c2VGYWN0b3J5O2Vsc2UgaWYodC51c2VFeGlzdGluZyk7ZWxzZSBpZih0LnVzZUNsYXNzKXI9ITAsbj1TKHQudXNlQ2xhc3MpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgWSgiU3RhdGljUHJvdmlkZXIgZG9lcyBub3QgaGF2ZSBbdXNlVmFsdWV8dXNlRmFjdG9yeXx1c2VFeGlzdGluZ3x1c2VDbGFzc10gb3IgW3Byb3ZpZGVdIGlzIG5vdCBuZXdhYmxlIix0KTtyPSEwLG49b31yZXR1cm57ZGVwczplLGZuOm4sdXNlTmV3OnIsdmFsdWU6aX19KG4pO2lmKCEwPT09bi5tdWx0aSl7dmFyIGE9ZS5nZXQocik7aWYoYSl7aWYoYS5mbiE9PUwpdGhyb3cgRyhyKX1lbHNlIGUuc2V0KHIsYT17dG9rZW46bi5wcm92aWRlLGRlcHM6W10sdXNlTmV3OiExLGZuOkwsdmFsdWU6Tn0pO2EuZGVwcy5wdXNoKHt0b2tlbjpyPW4sb3B0aW9uczo2fSl9dmFyIHM9ZS5nZXQocik7aWYocyYmcy5mbj09TCl0aHJvdyBHKHIpO2Uuc2V0KHIsbyl9fShpLHQpfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPTApO3ZhciByPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RyeXtyZXR1cm4gZnVuY3Rpb24gdChlLG4scixvLGEscyl7dHJ5e3JldHVybiBmdW5jdGlvbihlLG4scixvLGEscyl7dmFyIHUsbDtpZighbnx8NCZzKTImc3x8KGw9by5nZXQoZSxhLDApKTtlbHNle2lmKChsPW4udmFsdWUpPT1GKXRocm93IEVycm9yKEgrIkNpcmN1bGFyIGRlcGVuZGVuY3kiKTtpZihsPT09Til7bi52YWx1ZT1GO3ZhciBjPW4udXNlTmV3LGY9bi5mbixoPW4uZGVwcyxkPU47aWYoaC5sZW5ndGgpe2Q9W107Zm9yKHZhciBwPTA7cDxoLmxlbmd0aDtwKyspe3ZhciBtPWhbcF0seT1tLm9wdGlvbnMsdj0yJnk/ci5nZXQobS50b2tlbik6dm9pZCAwO2QucHVzaCh0KG0udG9rZW4sdixyLHZ8fDQmeT9vOkIsMSZ5P251bGw6UC5USFJPV19JRl9OT1RfRk9VTkQsMCkpfX1uLnZhbHVlPWw9Yz9uZXcoKHU9ZikuYmluZC5hcHBseSh1LE9iamVjdChpLmQpKFt2b2lkIDBdLGQpKSk6Zi5hcHBseSh2b2lkIDAsZCl9fXJldHVybiBsfShlLG4scixvLGEscyl9Y2F0Y2godCl7dGhyb3cgdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodCkpLCh0Lm5nVGVtcFRva2VuUGF0aD10Lm5nVGVtcFRva2VuUGF0aHx8W10pLnVuc2hpZnQoZSksbiYmbi52YWx1ZT09RiYmKG4udmFsdWU9TiksdH19KHQscix0aGlzLl9yZWNvcmRzLHRoaXMucGFyZW50LGUsbil9Y2F0Y2goZSl7dmFyIG89ZS5uZ1RlbXBUb2tlblBhdGg7dGhyb3cgdFtqXSYmby51bnNoaWZ0KHRbal0pLGUubWVzc2FnZT1RKCJcbiIrZS5tZXNzYWdlLG8sdGhpcy5zb3VyY2UpLGUubmdUb2tlblBhdGg9byxlLm5nVGVtcFRva2VuUGF0aD1udWxsLGV9fSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9yZWNvcmRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wdXNoKHgobikpfSksIlN0YXRpY0luamVjdG9yWyIrdC5qb2luKCIsICIpKyJdIn0sdH0oKTtmdW5jdGlvbiBHKHQpe3JldHVybiBZKCJDYW5ub3QgbWl4IG11bHRpIHByb3ZpZGVycyBhbmQgcmVndWxhciBwcm92aWRlcnMiLHQpfWZ1bmN0aW9uIFEodCxlLG4pe3ZvaWQgMD09PW4mJihuPW51bGwpLHQ9dCYmIlxuIj09PXQuY2hhckF0KDApJiZ0LmNoYXJBdCgxKT09SD90LnN1YnN0cigyKTp0O3ZhciBpPXgoZSk7aWYoZSBpbnN0YW5jZW9mIEFycmF5KWk9ZS5tYXAoeCkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcj1bXTtmb3IodmFyIG8gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG8pKXt2YXIgYT1lW29dO3IucHVzaChvKyI6IisoInN0cmluZyI9PXR5cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOngoYSkpKX1pPSJ7IityLmpvaW4oIiwgIikrIn0ifXJldHVybiJTdGF0aWNJbmplY3RvckVycm9yIisobj8iKCIrbisiKSI6IiIpKyJbIitpKyJdOiAiK3QucmVwbGFjZShVLCJcbiAgIil9ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBuZXcgRXJyb3IoUSh0LGUpKX12YXIgVz12b2lkIDA7ZnVuY3Rpb24gWih0KXt2YXIgZT1XO3JldHVybiBXPXQsZX1mdW5jdGlvbiBLKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09Vyl0aHJvdyBuZXcgRXJyb3IoImluamVjdCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gaW5qZWN0aW9uIGNvbnRleHQiKTtpZihudWxsPT09Vyl7dmFyIG49dC5uZ0luamVjdGFibGVEZWY7aWYobiYmInJvb3QiPT1uLnByb3ZpZGVkSW4pcmV0dXJuIHZvaWQgMD09PW4udmFsdWU/bi52YWx1ZT1uLmZhY3RvcnkoKTpuLnZhbHVlO2lmKDgmZSlyZXR1cm4gbnVsbDt0aHJvdyBuZXcgRXJyb3IoIkluamVjdG9yOiBOT1RfRk9VTkQgWyIreCh0KSsiXSIpfXJldHVybiBXLmdldCh0LDgmZT9udWxsOnZvaWQgMCxlKX1mdW5jdGlvbiBYKHQpe2Zvcih2YXIgZT1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoQXJyYXkuaXNBcnJheShpKSl7aWYoMD09PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQXJndW1lbnRzIGFycmF5IG11c3QgaGF2ZSBhcmd1bWVudHMuIik7Zm9yKHZhciByPXZvaWQgMCxvPTAsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3MgaW5zdGFuY2VvZiBPfHwiT3B0aW9uYWwiPT09cy5uZ01ldGFkYXRhTmFtZT9vfD04OnMgaW5zdGFuY2VvZiBUfHwiU2tpcFNlbGYiPT09cy5uZ01ldGFkYXRhTmFtZT9vfD00OnMgaW5zdGFuY2VvZiBrfHwiU2VsZiI9PT1zLm5nTWV0YWRhdGFOYW1lP298PTI6cj1zIGluc3RhbmNlb2YgRT9zLnRva2VuOnN9ZS5wdXNoKEsocixvKSl9ZWxzZSBlLnB1c2goSyhpKSl9cmV0dXJuIGV9U3RyaW5nO3ZhciAkPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIix0W3QuTmF0aXZlPTFdPSJOYXRpdmUiLHRbdC5Ob25lPTJdPSJOb25lIix0W3QuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLHR9KHt9KSxKPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX0sdHQ9bmV3IEooIjYuMS40IiksZXQ9Im5nRGVidWdDb250ZXh0IixudD0ibmdPcmlnaW5hbEVycm9yIixpdD0ibmdFcnJvckxvZ2dlciI7ZnVuY3Rpb24gcnQodCl7cmV0dXJuIHRbZXRdfWZ1bmN0aW9uIG90KHQpe3JldHVybiB0W250XX1mdW5jdGlvbiBhdCh0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTt0LmVycm9yLmFwcGx5KHQsT2JqZWN0KGkuZCkoZSkpfXZhciBzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9jb25zb2xlPWNvbnNvbGV9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpLG49dGhpcy5fZmluZENvbnRleHQodCksaT1mdW5jdGlvbih0KXtyZXR1cm4gdFtpdF18fGF0fSh0KTtpKHRoaXMuX2NvbnNvbGUsIkVSUk9SIix0KSxlJiZpKHRoaXMuX2NvbnNvbGUsIk9SSUdJTkFMIEVSUk9SIixlKSxuJiZpKHRoaXMuX2NvbnNvbGUsIkVSUk9SIENPTlRFWFQiLG4pfSx0LnByb3RvdHlwZS5fZmluZENvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/cnQodCk/cnQodCk6dGhpcy5fZmluZENvbnRleHQob3QodCkpOm51bGx9LHQucHJvdG90eXBlLl9maW5kT3JpZ2luYWxFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9b3QodCk7ZSYmb3QoZSk7KWU9b3QoZSk7cmV0dXJuIGV9LHR9KCksdXQ9bmV3IGMoIlRoZSBwcmVzZW5jZSBvZiB0aGlzIHRva2VuIG1hcmtzIGFuIGluamVjdG9yIGFzIGJlaW5nIHRoZSByb290IGluamVjdG9yLiIpLGx0PXt9LGN0PXt9LGZ0PVtdLGh0PXZvaWQgMDtmdW5jdGlvbiBkdCgpe3JldHVybiB2b2lkIDA9PT1odCYmKGh0PW5ldyBNKSxodH12YXIgcHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMucGFyZW50PW4sdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQsdGhpcy5vbkRlc3Ryb3k9bmV3IFNldCx0aGlzLmRlc3Ryb3llZD0hMSx2dChbdF0sZnVuY3Rpb24odCl7cmV0dXJuIGkucHJvY2Vzc0luamVjdG9yVHlwZSh0LG5ldyBTZXQpfSksZSYmdnQoZSxmdW5jdGlvbih0KXtyZXR1cm4gaS5wcm9jZXNzUHJvdmlkZXIodCl9KSx0aGlzLnJlY29yZHMuc2V0KFIseXQodm9pZCAwLHRoaXMpKSx0aGlzLmlzUm9vdEluamVjdG9yPXRoaXMucmVjb3Jkcy5oYXModXQpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLmdldCh0KX0pfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLmRlc3Ryb3llZD0hMDt0cnl7dGhpcy5vbkRlc3Ryb3kuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5uZ09uRGVzdHJveSgpfSl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLm9uRGVzdHJveS5jbGVhcigpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcy5jbGVhcigpfX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT1JKSx2b2lkIDA9PT1uJiYobj0wKSx0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO3ZhciBpLHI9Wih0aGlzKTt0cnl7aWYoISg0Jm4pKXt2YXIgbz10aGlzLnJlY29yZHMuZ2V0KHQpO2lmKHZvaWQgMD09PW8pe3ZhciBhPSgiZnVuY3Rpb24iPT10eXBlb2YoaT10KXx8Im9iamVjdCI9PXR5cGVvZiBpJiZpIGluc3RhbmNlb2YgYykmJnQubmdJbmplY3RhYmxlRGVmfHx2b2lkIDA7dm9pZCAwIT09YSYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShhKSYmKG89bXQodCksdGhpcy5yZWNvcmRzLnNldCh0LG8pKX1pZih2b2lkIDAhPT1vKXJldHVybiB0aGlzLmh5ZHJhdGUodCxvKX1yZXR1cm4gMiZuJiZkdCgpLHRoaXMucGFyZW50LmdldCh0LGUpfWZpbmFsbHl7WihyKX19LHQucHJvdG90eXBlLmFzc2VydE5vdERlc3Ryb3llZD1mdW5jdGlvbigpe2lmKHRoaXMuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiSW5qZWN0b3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuIil9LHQucHJvdG90eXBlLnByb2Nlc3NJbmplY3RvclR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9KHQ9Uyh0KSkubmdJbmplY3RvckRlZixyPW51bGw9PWkmJnQubmdNb2R1bGV8fHZvaWQgMCxvPXZvaWQgMD09PXI/dDpyLGE9dm9pZCAwIT09ciYmdC5wcm92aWRlcnN8fGZ0O2lmKHZvaWQgMCE9PXImJihpPXIubmdJbmplY3RvckRlZiksbnVsbCE9aSl7aWYoZS5oYXMobykpdGhyb3cgbmV3IEVycm9yKCJDaXJjdWxhciBkZXBlbmRlbmN5OiB0eXBlICIreChvKSsiIGVuZHMgdXAgaW1wb3J0aW5nIGl0c2VsZi4iKTtpZih0aGlzLmluamVjdG9yRGVmVHlwZXMuYWRkKG8pLHRoaXMucmVjb3Jkcy5zZXQobyx5dChpLmZhY3RvcnkpKSxudWxsIT1pLmltcG9ydHMpe2UuYWRkKG8pO3RyeXt2dChpLmltcG9ydHMsZnVuY3Rpb24odCl7cmV0dXJuIG4ucHJvY2Vzc0luamVjdG9yVHlwZSh0LGUpfSl9ZmluYWxseXtlLmRlbGV0ZShvKX19bnVsbCE9aS5wcm92aWRlcnMmJnZ0KGkucHJvdmlkZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBuLnByb2Nlc3NQcm92aWRlcih0KX0pLHZ0KGEsZnVuY3Rpb24odCl7cmV0dXJuIG4ucHJvY2Vzc1Byb3ZpZGVyKHQpfSl9fSx0LnByb3RvdHlwZS5wcm9jZXNzUHJvdmlkZXI9ZnVuY3Rpb24odCl7dmFyIGU9Z3QodD1TKHQpKT90OlModC5wcm92aWRlKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPVModCksbj1sdCxyPXZvaWQgMDtpZihndCh0KSlyZXR1cm4gbXQodCk7aWYoZT1TKHQucHJvdmlkZSkseiBpbiB0KW49dC51c2VWYWx1ZTtlbHNlIGlmKHQudXNlRXhpc3Rpbmcpcj1mdW5jdGlvbigpe3JldHVybiBLKHQudXNlRXhpc3RpbmcpfTtlbHNlIGlmKHQudXNlRmFjdG9yeSlyPWZ1bmN0aW9uKCl7cmV0dXJuIHQudXNlRmFjdG9yeS5hcHBseSh0LE9iamVjdChpLmQpKFgodC5kZXBzfHxbXSkpKX07ZWxzZXt2YXIgbz10LnVzZUNsYXNzfHxlO2lmKCF0LmRlcHMpcmV0dXJuIG10KG8pO3I9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3KG8uYmluZC5hcHBseShvLE9iamVjdChpLmQpKFt2b2lkIDBdLFgodC5kZXBzKSkpKX19cmV0dXJuIHl0KHIsbil9KHQpO2lmKGd0KHQpfHwhMCE9PXQubXVsdGkpe3ZhciByPXRoaXMucmVjb3Jkcy5nZXQoZSk7aWYociYmdm9pZCAwIT09ci5tdWx0aSl0aHJvdyBuZXcgRXJyb3IoIk1peGVkIG11bHRpLXByb3ZpZGVyIGZvciAiK3goZSkpfWVsc2V7dmFyIG89dGhpcy5yZWNvcmRzLmdldChlKTtpZihvKXtpZih2b2lkIDA9PT1vLm11bHRpKXRocm93IG5ldyBFcnJvcigiTWl4ZWQgbXVsdGktcHJvdmlkZXIgZm9yICIrZSsiLiIpfWVsc2Uobz15dCh2b2lkIDAsbHQsITApKS5mYWN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuIFgoby5tdWx0aSl9LHRoaXMucmVjb3Jkcy5zZXQoZSxvKTtlPXQsby5tdWx0aS5wdXNoKHQpfXRoaXMucmVjb3Jkcy5zZXQoZSxuKX0sdC5wcm90b3R5cGUuaHlkcmF0ZT1mdW5jdGlvbih0LGUpe2lmKGUudmFsdWU9PT1jdCl0aHJvdyBuZXcgRXJyb3IoIkNpcmN1bGFyIGRlcCBmb3IgIit4KHQpKTt2YXIgbjtyZXR1cm4gZS52YWx1ZT09PWx0JiYoZS52YWx1ZT1jdCxlLnZhbHVlPWUuZmFjdG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGUudmFsdWUmJmUudmFsdWUmJiJvYmplY3QiPT10eXBlb2Yobj1lLnZhbHVlKSYmbnVsbCE9biYmbi5uZ09uRGVzdHJveSYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3kmJnRoaXMub25EZXN0cm95LmFkZChlLnZhbHVlKSxlLnZhbHVlfSx0LnByb3RvdHlwZS5pbmplY3RhYmxlRGVmSW5TY29wZT1mdW5jdGlvbih0KXtyZXR1cm4hIXQucHJvdmlkZWRJbiYmKCJzdHJpbmciPT10eXBlb2YgdC5wcm92aWRlZEluPyJhbnkiPT09dC5wcm92aWRlZElufHwicm9vdCI9PT10LnByb3ZpZGVkSW4mJnRoaXMuaXNSb290SW5qZWN0b3I6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyh0LnByb3ZpZGVkSW4pKX0sdH0oKTtmdW5jdGlvbiBtdCh0KXt2YXIgZT10Lm5nSW5qZWN0YWJsZURlZjtpZih2b2lkIDA9PT1lKXtpZih0IGluc3RhbmNlb2YgYyl0aHJvdyBuZXcgRXJyb3IoIlRva2VuICIreCh0KSsiIGlzIG1pc3NpbmcgYW4gbmdJbmplY3RhYmxlRGVmIGRlZmluaXRpb24uIik7cmV0dXJuIHl0KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSl9cmV0dXJuIHl0KGUuZmFjdG9yeSl9ZnVuY3Rpb24geXQodCxlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYoZT1sdCksdm9pZCAwPT09biYmKG49ITEpLHtmYWN0b3J5OnQsdmFsdWU6ZSxtdWx0aTpuP1tdOnZvaWQgMH19ZnVuY3Rpb24gdnQodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dnQodCxlKTplKHQpfSl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gYnQodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufWZ1bmN0aW9uIF90KHQpe3JldHVybiEhdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc3Vic2NyaWJlfXZhciB3dD1uZXcgYygiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSx4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLmFwcEluaXRzPXQsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe2UucmVzb2x2ZT10LGUucmVqZWN0PW59KX1yZXR1cm4gdC5wcm90b3R5cGUucnVuSW5pdGlhbGl6ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pbml0aWFsaXplZCl7dmFyIGU9W10sbj1mdW5jdGlvbigpe3QuZG9uZT0hMCx0LnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IodmFyIGk9MDtpPHRoaXMuYXBwSW5pdHMubGVuZ3RoO2krKyl7dmFyIHI9dGhpcy5hcHBJbml0c1tpXSgpO2J0KHIpJiZlLnB1c2gocil9UHJvbWlzZS5hbGwoZSkudGhlbihmdW5jdGlvbigpe24oKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3QucmVqZWN0KGUpfSksMD09PWUubGVuZ3RoJiZuKCksdGhpcy5pbml0aWFsaXplZD0hMH19LHR9KCksQ3Q9bmV3IGMoIkFwcElkIik7ZnVuY3Rpb24gU3QoKXtyZXR1cm4iIitFdCgpK0V0KCkrRXQoKX1mdW5jdGlvbiBFdCgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBPdD1uZXcgYygiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSxrdD1uZXcgYygiUGxhdGZvcm0gSUQiKSxUdD1uZXcgYygiYXBwQm9vdHN0cmFwTGlzdGVuZXIiKSxqdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmxvZz1mdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KX0sdC5wcm90b3R5cGUud2Fybj1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4odCl9LHR9KCk7ZnVuY3Rpb24gQXQoKXt0aHJvdyBuZXcgRXJyb3IoIlJ1bnRpbWUgY29tcGlsZXIgaXMgbm90IGxvYWRlZCIpfXZhciBJdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVTeW5jPWZ1bmN0aW9uKHQpe3Rocm93IEF0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBc3luYz1mdW5jdGlvbih0KXt0aHJvdyBBdCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmM9ZnVuY3Rpb24odCl7dGhyb3cgQXQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNBc3luYz1mdW5jdGlvbih0KXt0aHJvdyBBdCgpfSx0LnByb3RvdHlwZS5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jbGVhckNhY2hlRm9yPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0TW9kdWxlSWQ9ZnVuY3Rpb24odCl7fSx0fSgpLFJ0PWZ1bmN0aW9uKCl7fSxNdD1mdW5jdGlvbigpe30sUHQ9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIER0KHQpe3ZhciBlPUVycm9yKCJObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgIit4KHQpKyIuIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/Iik7cmV0dXJuIGVbTHRdPXQsZX12YXIgTnQsRnQsTHQ9Im5nQ29tcG9uZW50IixWdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3Rocm93IER0KHQpfSx0fSgpLHp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5OVUxMPW5ldyBWdCx0fSgpLEJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fcGFyZW50PWUsdGhpcy5fbmdNb2R1bGU9bix0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcDtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHI9dFtpXTt0aGlzLl9mYWN0b3JpZXMuc2V0KHIuY29tcG9uZW50VHlwZSxyKX19cmV0dXJuIHQucHJvdG90eXBlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7aWYoIWUmJnRoaXMuX3BhcmVudCYmKGU9dGhpcy5fcGFyZW50LnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpKSwhZSl0aHJvdyBEdCh0KTtyZXR1cm4gbmV3IFV0KGUsdGhpcy5fbmdNb2R1bGUpfSx0fSgpLFV0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuZmFjdG9yeT1lLGkubmdNb2R1bGU9bixpLnNlbGVjdG9yPWUuc2VsZWN0b3IsaS5jb21wb25lbnRUeXBlPWUuY29tcG9uZW50VHlwZSxpLm5nQ29udGVudFNlbGVjdG9ycz1lLm5nQ29udGVudFNlbGVjdG9ycyxpLmlucHV0cz1lLmlucHV0cyxpLm91dHB1dHM9ZS5vdXRwdXRzLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlKHQsZSxuLGl8fHRoaXMubmdNb2R1bGUpfSxlfShQdCksSHQ9ZnVuY3Rpb24oKXt9LHF0PWZ1bmN0aW9uKCl7fSxHdD1mdW5jdGlvbigpe3ZhciB0PXkud3RmO3JldHVybiEoIXR8fCEoTnQ9dC50cmFjZSl8fChGdD1OdC5ldmVudHMsMCkpfSgpO2Z1bmN0aW9uIFF0KHQsZSl7cmV0dXJuIG51bGx9dmFyIFl0PUd0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLEZ0LmNyZWF0ZVNjb3BlKHQsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFF0fSxXdD1HdD9mdW5jdGlvbih0LGUpe3JldHVybiBOdC5sZWF2ZVNjb3BlKHQsZSksZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0sWnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9faXNBc3luYz1lLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUsbixpKXt2YXIgbyxhPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O2UmJiJvYmplY3QiPT10eXBlb2YgZT8obz10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUubmV4dCh0KX0pfTpmdW5jdGlvbih0KXtlLm5leHQodCl9LGUuZXJyb3ImJihhPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5lcnJvcih0KX0pfTpmdW5jdGlvbih0KXtlLmVycm9yKHQpfSksZS5jb21wbGV0ZSYmKHM9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfTpmdW5jdGlvbigpe2UuY29tcGxldGUoKX0pKToobz10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUodCl9KX06ZnVuY3Rpb24odCl7ZSh0KX0sbiYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuKHQpfSl9OmZ1bmN0aW9uKHQpe24odCl9KSxpJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gaSgpfSl9OmZ1bmN0aW9uKCl7aSgpfSkpO3ZhciB1PXQucHJvdG90eXBlLnN1YnNjcmliZS5jYWxsKHRoaXMsbyxhLHMpO3JldHVybiBlIGluc3RhbmNlb2Ygci5hJiZlLmFkZCh1KSx1fSxlfShvLmEpLEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZSxuPXQuZW5hYmxlTG9uZ1N0YWNrVHJhY2UsaT12b2lkIDAhPT1uJiZuO2lmKHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgWnQoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgWnQoITEpLHRoaXMub25TdGFibGU9bmV3IFp0KCExKSx0aGlzLm9uRXJyb3I9bmV3IFp0KCExKSwidW5kZWZpbmVkIj09dHlwZW9mIFpvbmUpdGhyb3cgbmV3IEVycm9yKCJJbiB0aGlzIGNvbmZpZ3VyYXRpb24gQW5ndWxhciByZXF1aXJlcyBab25lLmpzIik7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpLHRoaXMuX25lc3Rpbmc9MCx0aGlzLl9vdXRlcj10aGlzLl9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS53dGZab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsoWm9uZS53dGZab25lU3BlYykpLFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksaSYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSwoZT10aGlzKS5faW5uZXI9ZS5faW5uZXIuZm9yayh7bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOmZ1bmN0aW9uKHQsbixpLHIsbyxhKXt0cnl7cmV0dXJuIHRlKGUpLHQuaW52b2tlVGFzayhpLHIsbyxhKX1maW5hbGx5e2VlKGUpfX0sb25JbnZva2U6ZnVuY3Rpb24odCxuLGkscixvLGEscyl7dHJ5e3JldHVybiB0ZShlKSx0Lmludm9rZShpLHIsbyxhLHMpfWZpbmFsbHl7ZWUoZSl9fSxvbkhhc1Rhc2s6ZnVuY3Rpb24odCxuLGkscil7dC5oYXNUYXNrKGksciksbj09PWkmJigibWljcm9UYXNrIj09ci5jaGFuZ2U/KGUuaGFzUGVuZGluZ01pY3JvdGFza3M9ci5taWNyb1Rhc2ssSnQoZSkpOiJtYWNyb1Rhc2siPT1yLmNoYW5nZSYmKGUuaGFzUGVuZGluZ01hY3JvdGFza3M9ci5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjpmdW5jdGlvbih0LG4saSxyKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihpLHIpLGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkVycm9yLmVtaXQocil9KSwhMX19KX1yZXR1cm4gdC5pc0luQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4hMD09PVpvbmUuY3VycmVudC5nZXQoImlzQW5ndWxhclpvbmUiKX0sdC5hc3NlcnRJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYoIXQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0byBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyBub3QhIil9LHQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe2lmKHQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0byBub3QgYmUgaW4gQW5ndWxhciBab25lLCBidXQgaXQgaXMhIil9LHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bih0LGUsbil9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5faW5uZXIsbz1yLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitpLHQsJHQsWHQsWHQpO3RyeXtyZXR1cm4gci5ydW5UYXNrKG8sZSxuKX1maW5hbGx5e3IuY2FuY2VsVGFzayhvKX19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuT3V0c2lkZUFuZ3VsYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX0sdH0oKTtmdW5jdGlvbiBYdCgpe312YXIgJHQ9e307ZnVuY3Rpb24gSnQodCl7aWYoMD09dC5fbmVzdGluZyYmIXQuaGFzUGVuZGluZ01pY3JvdGFza3MmJiF0LmlzU3RhYmxlKXRyeXt0Ll9uZXN0aW5nKyssdC5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCl9ZmluYWxseXtpZih0Ll9uZXN0aW5nLS0sIXQuaGFzUGVuZGluZ01pY3JvdGFza3MpdHJ5e3QucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5vblN0YWJsZS5lbWl0KG51bGwpfSl9ZmluYWxseXt0LmlzU3RhYmxlPSEwfX19ZnVuY3Rpb24gdGUodCl7dC5fbmVzdGluZysrLHQuaXNTdGFibGUmJih0LmlzU3RhYmxlPSExLHQub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBlZSh0KXt0Ll9uZXN0aW5nLS0sSnQodCl9dmFyIG5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgWnQsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBadCx0aGlzLm9uU3RhYmxlPW5ldyBadCx0aGlzLm9uRXJyb3I9bmV3IFp0fXJldHVybiB0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHR9KCksaWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fbmdab25lPXQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLHQucnVuKGZ1bmN0aW9uKCl7ZS50YXNrVHJhY2tpbmdab25lPVpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfXJldHVybiB0LnByb3RvdHlwZS5fd2F0Y2hBbmd1bGFyRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXt0Ll9kaWRXb3JrPSEwLHQuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7S3QuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLF8oZnVuY3Rpb24oKXt0Ll9pc1pvbmVTdGFibGU9ITAsdC5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX0sdC5wcm90b3R5cGUuaW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9LHQucHJvdG90eXBlLmlzU3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc30sdC5wcm90b3R5cGUuX3J1bkNhbGxiYWNrc0lmUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuaXNTdGFibGUoKSlfKGZ1bmN0aW9uKCl7Zm9yKDswIT09dC5fY2FsbGJhY2tzLmxlbmd0aDspe3ZhciBlPXQuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLGUuZG9uZUNiKHQuX2RpZFdvcmspfXQuX2RpZFdvcms9ITF9KTtlbHNle3ZhciBlPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQudXBkYXRlQ2J8fCF0LnVwZGF0ZUNiKGUpfHwoY2xlYXJUaW1lb3V0KHQudGltZW91dElkKSwhMSl9KSx0aGlzLl9kaWRXb3JrPSEwfX0sdC5wcm90b3R5cGUuZ2V0UGVuZGluZ1Rhc2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LnNvdXJjZSxpc1BlcmlvZGljOnQuZGF0YS5pc1BlcmlvZGljLGRlbGF5OnQuZGF0YS5kZWxheSxjcmVhdGlvbkxvY2F0aW9uOnQuY3JlYXRpb25Mb2NhdGlvbix4aHI6dC5kYXRhLnRhcmdldH19KTpbXX0sdC5wcm90b3R5cGUuYWRkQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj0tMTtlJiZlPjAmJihyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9jYWxsYmFja3M9aS5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50aW1lb3V0SWQhPT1yfSksdChpLl9kaWRXb3JrLGkuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxlKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjp0LHRpbWVvdXRJZDpyLHVwZGF0ZUNiOm59KX0sdC5wcm90b3R5cGUud2hlblN0YWJsZT1mdW5jdGlvbih0LGUsbil7aWYobiYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvZGlzdC90YXNrLXRyYWNraW5nLmpzIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayh0LGUsbiksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuZmluZFByb3ZpZGVycz1mdW5jdGlvbih0LGUsbil7cmV0dXJuW119LHR9KCkscmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXAsc2UuYWRkVG9XaW5kb3codGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyQXBwbGljYXRpb249ZnVuY3Rpb24odCxlKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KHQsZSl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHQpfSx0LnByb3RvdHlwZS51bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9LHQucHJvdG90eXBlLmdldFRlc3RhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KHQpfHxudWxsfSx0LnByb3RvdHlwZS5nZXRBbGxUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsUm9vdEVsZW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMCksc2UuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsdCxlKX0sdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfSx0fSgpO2Z1bmN0aW9uIG9lKHQpe3NlPXR9dmFyIGFlLHNlPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnVsbH0sdH0oKSksdWU9ITAsbGU9ITEsY2U9bmV3IGMoIkFsbG93TXVsdGlwbGVUb2tlbiIpO2Z1bmN0aW9uIGZlKCl7aWYobGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTt1ZT0hMX1mdW5jdGlvbiBoZSgpe3JldHVybiBsZT0hMCx1ZX12YXIgZGU9ZnVuY3Rpb24odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnRva2VuPWV9O2Z1bmN0aW9uIHBlKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1bXSk7dmFyIGk9IlBsYXRmb3JtOiAiK2Uscj1uZXcgYyhpKTtyZXR1cm4gZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBvPW1lKCk7aWYoIW98fG8uaW5qZWN0b3IuZ2V0KGNlLCExKSlpZih0KXQobi5jb25jYXQoZSkuY29uY2F0KHtwcm92aWRlOnIsdXNlVmFsdWU6ITB9KSk7ZWxzZXt2YXIgYT1uLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6cix1c2VWYWx1ZTohMH0pOyFmdW5jdGlvbih0KXtpZihhZSYmIWFlLmRlc3Ryb3llZCYmIWFlLmluamVjdG9yLmdldChjZSwhMSkpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBjYW4gYmUgb25seSBvbmUgcGxhdGZvcm0uIERlc3Ryb3kgdGhlIHByZXZpb3VzIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLiIpO2FlPXQuZ2V0KHllKTt2YXIgZT10LmdldChPdCxudWxsKTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfShQLmNyZWF0ZSh7cHJvdmlkZXJzOmEsbmFtZTppfSkpfXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1tZSgpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gcGxhdGZvcm0gZXhpc3RzISIpO2lmKCFlLmluamVjdG9yLmdldCh0LG51bGwpKXRocm93IG5ldyBFcnJvcigiQSBwbGF0Zm9ybSB3aXRoIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY3JlYXRlZC4gUGxlYXNlIGRlc3Ryb3kgaXQgZmlyc3QuIik7cmV0dXJuIGV9KHIpfX1mdW5jdGlvbiBtZSgpe3JldHVybiBhZSYmIWFlLmRlc3Ryb3llZD9hZTpudWxsfXZhciB5ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5faW5qZWN0b3I9dCx0aGlzLl9tb2R1bGVzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExfXJldHVybiB0LnByb3RvdHlwZS5ib290c3RyYXBNb2R1bGVGYWN0b3J5PWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLHI9Im5vb3AiPT09KG49ZT9lLm5nWm9uZTp2b2lkIDApP25ldyBuZTooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBLdCh7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6aGUoKX0pLG89W3twcm92aWRlOkt0LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oZnVuY3Rpb24oKXt2YXIgZT1QLmNyZWF0ZSh7cHJvdmlkZXJzOm8scGFyZW50OmkuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG49dC5jcmVhdGUoZSksYT1uLmluamVjdG9yLmdldChzdCxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gbi5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gYmUoaS5fbW9kdWxlcyxuKX0pLHIucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gci5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXthLmhhbmRsZUVycm9yKHQpfX0pfSksZnVuY3Rpb24odCxlLHIpe3RyeXt2YXIgbz0oKGE9bi5pbmplY3Rvci5nZXQoeHQpKS5ydW5Jbml0aWFsaXplcnMoKSxhLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gaS5fbW9kdWxlRG9Cb290c3RyYXAobiksbn0pKTtyZXR1cm4gYnQobyk/by5jYXRjaChmdW5jdGlvbihuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufSk6b31jYXRjaChuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufXZhciBhfShhLHIpfSl9LHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBpPXRoaXMuaW5qZWN0b3IuZ2V0KFJ0KSxyPXZlKHt9LGUpO3JldHVybiBpLmNyZWF0ZUNvbXBpbGVyKFtyXSkuY29tcGlsZU1vZHVsZUFzeW5jKHQpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIG4uYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSh0LHIpfSl9LHQucHJvdG90eXBlLl9tb2R1bGVEb0Jvb3RzdHJhcD1mdW5jdGlvbih0KXt2YXIgZT10LmluamVjdG9yLmdldChnZSk7aWYodC5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCl0Ll9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuYm9vdHN0cmFwKHQpfSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcigiVGhlIG1vZHVsZSAiK3godC5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrJyB3YXMgYm9vdHN0cmFwcGVkLCBidXQgaXQgZG9lcyBub3QgZGVjbGFyZSAiQE5nTW9kdWxlLmJvb3RzdHJhcCIgY29tcG9uZW50cyBub3IgYSAibmdEb0Jvb3RzdHJhcCIgbWV0aG9kLiBQbGVhc2UgZGVmaW5lIG9uZSBvZiB0aGVzZS4nKTt0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZSl9dGhpcy5fbW9kdWxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQhIik7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITB9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIHZlKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5yZWR1Y2UodmUsdCk6T2JqZWN0KGkuYSkoe30sdCxlKX12YXIgZ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvKXt2YXIgbD10aGlzO3RoaXMuX3pvbmU9dCx0aGlzLl9jb25zb2xlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9leGNlcHRpb25IYW5kbGVyPWksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXIsdGhpcy5faW5pdFN0YXR1cz1vLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl92aWV3cz1bXSx0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPWhlKCksdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe2wuX3pvbmUucnVuKGZ1bmN0aW9uKCl7bC50aWNrKCl9KX19KTt2YXIgYz1uZXcgYS5hKGZ1bmN0aW9uKHQpe2wuX3N0YWJsZT1sLl96b25lLmlzU3RhYmxlJiYhbC5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWwuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsbC5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dChsLl9zdGFibGUpLHQuY29tcGxldGUoKX0pfSksZj1uZXcgYS5hKGZ1bmN0aW9uKHQpe3ZhciBlO2wuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlPWwuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7S3QuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLF8oZnVuY3Rpb24oKXtsLl9zdGFibGV8fGwuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N8fGwuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3N8fChsLl9zdGFibGU9ITAsdC5uZXh0KCEwKSl9KX0pfSk7dmFyIG49bC5fem9uZS5vblVuc3RhYmxlLnN1YnNjcmliZShmdW5jdGlvbigpe0t0LmFzc2VydEluQW5ndWxhclpvbmUoKSxsLl9zdGFibGUmJihsLl9zdGFibGU9ITEsbC5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dCghMSl9KSl9KTtyZXR1cm4gZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksbi51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9T2JqZWN0KHMuYSkoYyxmLnBpcGUoT2JqZWN0KHUuYSkoKSkpfXJldHVybiB0LnByb3RvdHlwZS5ib290c3RyYXA9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXM7aWYoIXRoaXMuX2luaXRTdGF0dXMuZG9uZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBib290c3RyYXAgYXMgdGhlcmUgYXJlIHN0aWxsIGFzeW5jaHJvbm91cyBpbml0aWFsaXplcnMgcnVubmluZy4gQm9vdHN0cmFwIGNvbXBvbmVudHMgaW4gdGhlIGBuZ0RvQm9vdHN0cmFwYCBtZXRob2Qgb2YgdGhlIHJvb3QgbW9kdWxlLiIpO249dCBpbnN0YW5jZW9mIFB0P3Q6dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpLHRoaXMuY29tcG9uZW50VHlwZXMucHVzaChuLmNvbXBvbmVudFR5cGUpO3ZhciByPW4gaW5zdGFuY2VvZiBVdD9udWxsOnRoaXMuX2luamVjdG9yLmdldChIdCksbz1uLmNyZWF0ZShQLk5VTEwsW10sZXx8bi5zZWxlY3RvcixyKTtvLm9uRGVzdHJveShmdW5jdGlvbigpe2kuX3VubG9hZENvbXBvbmVudChvKX0pO3ZhciBhPW8uaW5qZWN0b3IuZ2V0KGllLG51bGwpO3JldHVybiBhJiZvLmluamVjdG9yLmdldChyZSkucmVnaXN0ZXJBcHBsaWNhdGlvbihvLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5fbG9hZENvbXBvbmVudChvKSxoZSgpJiZ0aGlzLl9jb25zb2xlLmxvZygiQW5ndWxhciBpcyBydW5uaW5nIGluIHRoZSBkZXZlbG9wbWVudCBtb2RlLiBDYWxsIGVuYWJsZVByb2RNb2RlKCkgdG8gZW5hYmxlIHRoZSBwcm9kdWN0aW9uIG1vZGUuIiksb30sdC5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEVycm9yKCJBcHBsaWNhdGlvblJlZi50aWNrIGlzIGNhbGxlZCByZWN1cnNpdmVseSIpO3ZhciBuPXQuX3RpY2tTY29wZSgpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMCx0aGlzLl92aWV3cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRldGVjdENoYW5nZXMoKX0pLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXMmJnRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tOb0NoYW5nZXMoKX0pfWNhdGNoKHQpe3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcih0KX0pfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITEsV3Qobil9fSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7dGhpcy5fdmlld3MucHVzaChlKSxlLmF0dGFjaFRvQXBwUmVmKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7YmUodGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9LHQucHJvdG90eXBlLl9sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuYXR0YWNoVmlldyh0Lmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaCh0KSx0aGlzLl9pbmplY3Rvci5nZXQoVHQsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0sdC5wcm90b3R5cGUuX3VubG9hZENvbXBvbmVudD1mdW5jdGlvbih0KXt0aGlzLmRldGFjaFZpZXcodC5ob3N0VmlldyksYmUodGhpcy5jb21wb25lbnRzLHQpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2aWV3Q291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQuX3RpY2tTY29wZT1ZdCgiQXBwbGljYXRpb25SZWYjdGljaygpIiksdH0oKTtmdW5jdGlvbiBiZSh0LGUpe3ZhciBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfXZhciBfZT1mdW5jdGlvbigpe30sd2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsdH0oe30pLHhlPWZ1bmN0aW9uKCl7fSxDZT1mdW5jdGlvbih0KXt0aGlzLm5hdGl2ZUVsZW1lbnQ9dH0sU2U9ZnVuY3Rpb24oKXt9LEVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLmNoYW5nZXM9bmV3IFp0LHRoaXMubGVuZ3RoPTB9cmV0dXJuIHQucHJvdG90eXBlLm1hcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAodCl9LHQucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZCh0KX0sdC5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKHQsZSl9LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfSx0LnByb3RvdHlwZS5zb21lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUodCl9LHQucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfSx0LnByb3RvdHlwZVtiKCldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbYigpXSgpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgaT1BcnJheS5pc0FycmF5KG4pP3Qobik6bjtyZXR1cm4gZS5jb25jYXQoaSl9LFtdKX0odCksdGhpcy5kaXJ0eT0hMSx0aGlzLmxlbmd0aD10aGlzLl9yZXN1bHRzLmxlbmd0aCx0aGlzLmxhc3Q9dGhpcy5fcmVzdWx0c1t0aGlzLmxlbmd0aC0xXSx0aGlzLmZpcnN0PXRoaXMuX3Jlc3VsdHNbMF19LHQucHJvdG90eXBlLm5vdGlmeU9uQ2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuY2hhbmdlcy5lbWl0KHRoaXMpfSx0LnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX0sdH0oKSxPZT1mdW5jdGlvbigpe30sa2U9e2ZhY3RvcnlQYXRoUHJlZml4OiIiLGZhY3RvcnlQYXRoU3VmZml4OiIubmdmYWN0b3J5In0sVGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY29tcGlsZXI9dCx0aGlzLl9jb25maWc9ZXx8a2V9cmV0dXJuIHQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbXBpbGVyIGluc3RhbmNlb2YgSXQ/dGhpcy5sb2FkRmFjdG9yeSh0KTp0aGlzLmxvYWRBbmRDb21waWxlKHQpfSx0LnByb3RvdHlwZS5sb2FkQW5kQ29tcGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9T2JqZWN0KGkuYykodC5zcGxpdCgiIyIpLDIpLG89clswXSxhPXJbMV07cmV0dXJuIHZvaWQgMD09PWEmJihhPSJkZWZhdWx0IiksbigiY3JuZCIpKG8pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHRbYV19KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBqZSh0LG8sYSl9KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCl9KX0sdC5wcm90b3R5cGUubG9hZEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGkuYykodC5zcGxpdCgiIyIpLDIpLHI9ZVswXSxvPWVbMV0sYT0iTmdGYWN0b3J5IjtyZXR1cm4gdm9pZCAwPT09byYmKG89ImRlZmF1bHQiLGE9IiIpLG4oImNybmQiKSh0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhQcmVmaXgrcit0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhTdWZmaXgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHRbbythXX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGplKHQscixvKX0pfSx0fSgpO2Z1bmN0aW9uIGplKHQsZSxuKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kICciK24rIicgaW4gJyIrZSsiJyIpO3JldHVybiB0fXZhciBBZT1mdW5jdGlvbigpe30sSWU9ZnVuY3Rpb24oKXt9LFJlPWZ1bmN0aW9uKCl7fSxNZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShSZSkpLFBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fZGVidWdDb250ZXh0PW4sdGhpcy5uYXRpdmVOb2RlPXQsZSYmZSBpbnN0YW5jZW9mIERlP2UuYWRkQ2hpbGQodGhpcyk6dGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmxpc3RlbmVycz1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQuaW5qZWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRJbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQuY29tcG9uZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LnJlZmVyZW5jZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucHJvdmlkZXJUb2tlbnN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxEZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlLG4saSl8fHRoaXM7cmV0dXJuIHIucHJvcGVydGllcz17fSxyLmF0dHJpYnV0ZXM9e30sci5jbGFzc2VzPXt9LHIuc3R5bGVzPXt9LHIuY2hpbGROb2Rlcz1bXSxyLm5hdGl2ZUVsZW1lbnQ9ZSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKHQpe3QmJih0aGlzLmNoaWxkTm9kZXMucHVzaCh0KSx0LnBhcmVudD10aGlzKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTEhPT1lJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGUsMSkpfSxlLnByb3RvdHlwZS5pbnNlcnRDaGlsZHJlbkFmdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLG89dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTEhPT1vJiYoKG49dGhpcy5jaGlsZE5vZGVzKS5zcGxpY2UuYXBwbHkobixPYmplY3QoaS5kKShbbysxLDBdLGUpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZUNoaWxkKHQpLHQucGFyZW50PXJ9KSl9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xPT09bj90aGlzLmFkZENoaWxkKGUpOihlLnBhcmVudCYmZS5wYXJlbnQucmVtb3ZlQ2hpbGQoZSksZS5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKG4sMCxlKSl9LGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5QWxsKHQpWzBdfHxudWxsfSxlLnByb3RvdHlwZS5xdWVyeUFsbD1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gTmUodGhpcyx0LGUpLGV9LGUucHJvdG90eXBlLnF1ZXJ5QWxsTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIEZlKHRoaXMsdCxlKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudHJpZ2dlckV2ZW50SGFuZGxlcj1mdW5jdGlvbih0LGUpe3RoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obil7bi5uYW1lPT10JiZuLmNhbGxiYWNrKGUpfSl9LGV9KFBlKTtmdW5jdGlvbiBOZSh0LGUsbil7dC5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbnN0YW5jZW9mIERlJiYoZSh0KSYmbi5wdXNoKHQpLE5lKHQsZSxuKSl9KX1mdW5jdGlvbiBGZSh0LGUsbil7dCBpbnN0YW5jZW9mIERlJiZ0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtlKHQpJiZuLnB1c2godCksdCBpbnN0YW5jZW9mIERlJiZGZSh0LGUsbil9KX12YXIgTGU9bmV3IE1hcDtmdW5jdGlvbiBWZSh0KXtyZXR1cm4gTGUuZ2V0KHQpfHxudWxsfWZ1bmN0aW9uIHplKHQpe0xlLnNldCh0Lm5hdGl2ZU5vZGUsdCl9ZnVuY3Rpb24gQmUodCxlKXt2YXIgbj1xZSh0KSxpPXFlKGUpO3JldHVybiBuJiZpP2Z1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9dFtiKCldKCkscj1lW2IoKV0oKTs7KXt2YXIgbz1pLm5leHQoKSxhPXIubmV4dCgpO2lmKG8uZG9uZSYmYS5kb25lKXJldHVybiEwO2lmKG8uZG9uZXx8YS5kb25lKXJldHVybiExO2lmKCFuKG8udmFsdWUsYS52YWx1ZSkpcmV0dXJuITF9fSh0LGUsQmUpOiEobnx8IXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fGl8fCFlfHwib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXx8dyh0LGUpfXZhciBVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy53cmFwcGVkPXR9cmV0dXJuIHQud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHQudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmlzV3JhcHBlZChlKT9lLndyYXBwZWQ6ZX0sdC5pc1dyYXBwZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fSx0fSgpLEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59cmV0dXJuIHQucHJvdG90eXBlLmlzRmlyc3RDaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX0sdH0oKTtmdW5jdGlvbiBxZSh0KXtyZXR1cm4hIUdlKHQpJiYoQXJyYXkuaXNBcnJheSh0KXx8ISh0IGluc3RhbmNlb2YgTWFwKSYmYigpaW4gdCl9ZnVuY3Rpb24gR2UodCl7cmV0dXJuIG51bGwhPT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIHR8fCJvYmplY3QiPT10eXBlb2YgdCl9dmFyIFFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHFlKHQpfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXZSh0KX0sdH0oKSxZZT1mdW5jdGlvbih0LGUpe3JldHVybiBlfSxXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPXR8fFllfXJldHVybiB0LnByb3RvdHlwZS5mb3JFYWNoSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hPcGVyYXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2l0SGVhZCxuPXRoaXMuX3JlbW92YWxzSGVhZCxpPTAscj1udWxsO2V8fG47KXt2YXIgbz0hbnx8ZSYmZS5jdXJyZW50SW5kZXg8JGUobixpLHIpP2U6bixhPSRlKG8saSxyKSxzPW8uY3VycmVudEluZGV4O2lmKG89PT1uKWktLSxuPW4uX25leHRSZW1vdmVkO2Vsc2UgaWYoZT1lLl9uZXh0LG51bGw9PW8ucHJldmlvdXNJbmRleClpKys7ZWxzZXtyfHwocj1bXSk7dmFyIHU9YS1pLGw9cy1pO2lmKHUhPWwpe2Zvcih2YXIgYz0wO2M8dTtjKyspe3ZhciBmPWM8ci5sZW5ndGg/cltjXTpyW2NdPTAsaD1mK2M7bDw9aCYmaDx1JiYocltjXT1mKzEpfXJbby5wcmV2aW91c0luZGV4XT1sLXV9fWEhPT1zJiZ0KG8sYSxzKX19LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hNb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dE1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQmJih0PVtdKSwhcWUodCkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB0cnlpbmcgdG8gZGlmZiAnIit4KHQpKyInLiBPbmx5IGFycmF5cyBhbmQgaXRlcmFibGVzIGFyZSBhbGxvd2VkIik7cmV0dXJuIHRoaXMuY2hlY2sodCk/dGhpczpudWxsfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fcmVzZXQoKTt2YXIgbixpLHIsbz10aGlzLl9pdEhlYWQsYT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IodmFyIHM9MDtzPHRoaXMubGVuZ3RoO3MrKylyPXRoaXMuX3RyYWNrQnlGbihzLGk9dFtzXSksbnVsbCE9PW8mJncoby50cmFja0J5SWQscik/KGEmJihvPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8saSxyLHMpKSx3KG8uaXRlbSxpKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobyxpKSk6KG89dGhpcy5fbWlzbWF0Y2gobyxpLHIscyksYT0hMCksbz1vLl9uZXh0fWVsc2Ugbj0wLGZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyllKHRbbl0pO2Vsc2UgZm9yKHZhciBpPXRbYigpXSgpLHI9dm9pZCAwOyEocj1pLm5leHQoKSkuZG9uZTspZShyLnZhbHVlKX0odCxmdW5jdGlvbih0KXtyPWUuX3RyYWNrQnlGbihuLHQpLG51bGwhPT1vJiZ3KG8udHJhY2tCeUlkLHIpPyhhJiYobz1lLl92ZXJpZnlSZWluc2VydGlvbihvLHQscixuKSksdyhvLml0ZW0sdCl8fGUuX2FkZElkZW50aXR5Q2hhbmdlKG8sdCkpOihvPWUuX21pc21hdGNoKG8sdCxyLG4pLGE9ITApLG89by5fbmV4dCxuKyt9KSx0aGlzLmxlbmd0aD1uO3JldHVybiB0aGlzLl90cnVuY2F0ZShvKSx0aGlzLmNvbGxlY3Rpb249dCx0aGlzLmlzRGlydHl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX21vdmVzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZHx8bnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDAsZT12b2lkIDA7Zm9yKHQ9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PXQ7dD1lKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleCxlPXQuX25leHRNb3ZlZDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX0sdC5wcm90b3R5cGUuX21pc21hdGNoPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByO3JldHVybiBudWxsPT09dD9yPXRoaXMuX2l0VGFpbDoocj10Ll9wcmV2LHRoaXMuX3JlbW92ZSh0KSksbnVsbCE9PSh0PW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQobixpKSk/KHcodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LHIsaSkpOm51bGwhPT0odD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpKT8odyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LHIsaSkpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IFplKGUsbikscixpKSx0fSx0LnByb3RvdHlwZS5fdmVyaWZ5UmVpbnNlcnRpb249ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKTtyZXR1cm4gbnVsbCE9PXI/dD10aGlzLl9yZWluc2VydEFmdGVyKHIsdC5fcHJldixpKTp0LmN1cnJlbnRJbmRleCE9aSYmKHQuY3VycmVudEluZGV4PWksdGhpcy5fYWRkVG9Nb3Zlcyh0LGkpKSx0fSx0LnByb3RvdHlwZS5fdHJ1bmNhdGU9ZnVuY3Rpb24odCl7Zm9yKDtudWxsIT09dDspe3ZhciBlPXQuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpLHQ9ZX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX0sdC5wcm90b3R5cGUuX3JlaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIGk9dC5fcHJldlJlbW92ZWQscj10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PWk/dGhpcy5fcmVtb3ZhbHNIZWFkPXI6aS5fbmV4dFJlbW92ZWQ9cixudWxsPT09cj90aGlzLl9yZW1vdmFsc1RhaWw9aTpyLl9wcmV2UmVtb3ZlZD1pLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX21vdmVBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3VubGluayh0KSx0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zlcyh0LG4pLHR9LHQucHJvdG90eXBlLl9hZGRBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fSx0LnByb3RvdHlwZS5faW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PWksdC5fcHJldj1lLG51bGw9PT1pP3RoaXMuX2l0VGFpbD10OmkuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBYZSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bix0fSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSl9LHQucHJvdG90eXBlLl91bmxpbms9ZnVuY3Rpb24odCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHQpO3ZhciBlPXQuX3ByZXYsbj10Ll9uZXh0O3JldHVybiBudWxsPT09ZT90aGlzLl9pdEhlYWQ9bjplLl9uZXh0PW4sbnVsbD09PW4/dGhpcy5faXRUYWlsPWU6bi5fcHJldj1lLHR9LHQucHJvdG90eXBlLl9hZGRUb01vdmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWU/dDoodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNIZWFkPXQ6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9dCx0KX0sdC5wcm90b3R5cGUuX2FkZFRvUmVtb3ZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IFhlKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fSx0LnByb3RvdHlwZS5fYWRkSWRlbnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH0sdH0oKSxaZT1mdW5jdGlvbih0LGUpe3RoaXMuaXRlbT10LHRoaXMudHJhY2tCeUlkPWUsdGhpcy5jdXJyZW50SW5kZXg9bnVsbCx0aGlzLnByZXZpb3VzSW5kZXg9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXZEdXA9bnVsbCx0aGlzLl9uZXh0RHVwPW51bGwsdGhpcy5fcHJldlJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRNb3ZlZD1udWxsLHRoaXMuX25leHRJZGVudGl0eUNoYW5nZT1udWxsfSxLZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfXJldHVybiB0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD10LHQuX25leHREdXA9bnVsbCx0Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPXQsdC5fcHJldkR1cD10aGlzLl90YWlsLHQuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPXQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtmb3Iobj10aGlzLl9oZWFkO251bGwhPT1uO249bi5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PW4uY3VycmVudEluZGV4KSYmdyhuLnRyYWNrQnlJZCx0KSlyZXR1cm4gbjtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByZXZEdXAsbj10Ll9uZXh0RHVwO3JldHVybiBudWxsPT09ZT90aGlzLl9oZWFkPW46ZS5fbmV4dER1cD1uLG51bGw9PT1uP3RoaXMuX3RhaWw9ZTpuLl9wcmV2RHVwPWUsbnVsbD09PXRoaXMuX2hlYWR9LHR9KCksWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5tYXA9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkLG49dGhpcy5tYXAuZ2V0KGUpO258fChuPW5ldyBLZSx0aGlzLm1hcC5zZXQoZSxuKSksbi5hZGQodCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gbj9uLmdldCh0LGUpOm51bGx9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10LnRyYWNrQnlJZDtyZXR1cm4gdGhpcy5tYXAuZ2V0KGUpLnJlbW92ZSh0KSYmdGhpcy5tYXAuZGVsZXRlKGUpLHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNFbXB0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwLmNsZWFyKCl9LHR9KCk7ZnVuY3Rpb24gJGUodCxlLG4pe3ZhciBpPXQucHJldmlvdXNJbmRleDtpZihudWxsPT09aSlyZXR1cm4gaTt2YXIgcj0wO3JldHVybiBuJiZpPG4ubGVuZ3RoJiYocj1uW2ldKSxpK2Urcn12YXIgSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8R2UodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdG59LHR9KCksdG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5mb3JFYWNoSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9tYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUHJldmlvdXNJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQ2hhbmdlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0Q2hhbmdlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQWRkZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFJlbW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmRpZmY9ZnVuY3Rpb24odCl7aWYodCl7aWYoISh0IGluc3RhbmNlb2YgTWFwfHxHZSh0KSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB0cnlpbmcgdG8gZGlmZiAnIit4KHQpKyInLiBPbmx5IG1hcHMgYW5kIG9iamVjdHMgYXJlIGFsbG93ZWQiKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuPXRoaXMuX21hcEhlYWQ7aWYodGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9mb3JFYWNoKHQsZnVuY3Rpb24odCxpKXtpZihuJiZuLmtleT09PWkpZS5fbWF5YmVBZGRUb0NoYW5nZXMobix0KSxlLl9hcHBlbmRBZnRlcj1uLG49bi5fbmV4dDtlbHNle3ZhciByPWUuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGksdCk7bj1lLl9pbnNlcnRCZWZvcmVPckFwcGVuZChuLHIpfX0pLG4pe24uX3ByZXYmJihuLl9wcmV2Ll9uZXh0PW51bGwpLHRoaXMuX3JlbW92YWxzSGVhZD1uO2Zvcih2YXIgaT1uO251bGwhPT1pO2k9aS5fbmV4dFJlbW92ZWQpaT09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPW51bGwpLHRoaXMuX3JlY29yZHMuZGVsZXRlKGkua2V5KSxpLl9uZXh0UmVtb3ZlZD1pLl9uZXh0LGkucHJldmlvdXNWYWx1ZT1pLmN1cnJlbnRWYWx1ZSxpLmN1cnJlbnRWYWx1ZT1udWxsLGkuX3ByZXY9bnVsbCxpLl9uZXh0PW51bGx9cmV0dXJuIHRoaXMuX2NoYW5nZXNUYWlsJiYodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPW51bGwpLHRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksdGhpcy5pc0RpcnR5fSx0LnByb3RvdHlwZS5faW5zZXJ0QmVmb3JlT3JBcHBlbmQ9ZnVuY3Rpb24odCxlKXtpZih0KXt2YXIgbj10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1uLHQuX3ByZXY9ZSxuJiYobi5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfSx0LnByb3RvdHlwZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXk9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7dmFyIG49dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMobixlKTt2YXIgaT1uLl9wcmV2LHI9bi5fbmV4dDtyZXR1cm4gaSYmKGkuX25leHQ9ciksciYmKHIuX3ByZXY9aSksbi5fbmV4dD1udWxsLG4uX3ByZXY9bnVsbCxufXZhciBvPW5ldyBlbih0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxvKSxvLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKG8pLG99LHQucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2lmKHRoaXMuaXNEaXJ0eSl7dmFyIHQ9dm9pZCAwO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX0sdC5wcm90b3R5cGUuX21heWJlQWRkVG9DaGFuZ2VzPWZ1bmN0aW9uKHQsZSl7dyhlLHQuY3VycmVudFZhbHVlKXx8KHQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZSx0LmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9hZGRUb0FkZGl0aW9ucz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX0sdC5wcm90b3R5cGUuX2FkZFRvQ2hhbmdlcz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9LHQucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dCBpbnN0YW5jZW9mIE1hcD90LmZvckVhY2goZSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZSh0W25dLG4pfSl9LHR9KCksZW49ZnVuY3Rpb24odCl7dGhpcy5rZXk9dCx0aGlzLnByZXZpb3VzVmFsdWU9bnVsbCx0aGlzLmN1cnJlbnRWYWx1ZT1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0Q2hhbmdlZD1udWxsfSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5mYWN0b3JpZXM9dH1yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24oZSxuKXtpZihudWxsIT1uKXt2YXIgaT1uLmZhY3Rvcmllcy5zbGljZSgpO2U9ZS5jb25jYXQoaSl9cmV0dXJuIG5ldyB0KGUpfSx0LmV4dGVuZD1mdW5jdGlvbihlKXtyZXR1cm57cHJvdmlkZTp0LHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZXh0ZW5kIEl0ZXJhYmxlRGlmZmVycyB3aXRob3V0IGEgcGFyZW50IGluamVjdG9yIik7cmV0dXJuIHQuY3JlYXRlKGUsbil9LGRlcHM6W1t0LG5ldyBULG5ldyBPXV19fSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5mYWN0b3JpZXMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdXBwb3J0cyh0KX0pO2lmKG51bGwhPW4pcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIit0KyInIG9mIHR5cGUgJyIrKChlPXQpLm5hbWV8fHR5cGVvZiBlKSsiJyIpfSx0Lm5nSW5qZWN0YWJsZURlZj1sKHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KFtuZXcgUWVdKX19KSx0fSgpLHJuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG4pe3ZhciBpPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChpKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgS2V5VmFsdWVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IFQsbmV3IE9dXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mYWN0b3JpZXMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdXBwb3J0cyh0KX0pO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIit0KyInIil9LHR9KCksb249W25ldyBKZV0sYW49bmV3IG5uKFtuZXcgUWVdKSxzbj1uZXcgcm4ob24pLHVuPXBlKG51bGwsImNvcmUiLFt7cHJvdmlkZTprdCx1c2VWYWx1ZToidW5rbm93biJ9LHtwcm92aWRlOnllLGRlcHM6W1BdfSx7cHJvdmlkZTpyZSxkZXBzOltdfSx7cHJvdmlkZTpqdCxkZXBzOltdfV0pLGxuPW5ldyBjKCJMb2NhbGVJZCIpO2Z1bmN0aW9uIGNuKCl7cmV0dXJuIGFufWZ1bmN0aW9uIGZuKCl7cmV0dXJuIHNufWZ1bmN0aW9uIGhuKHQpe3JldHVybiB0fHwiZW4tVVMifXZhciBkbj1mdW5jdGlvbih0KXt9LHBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksdGhpcy5pbmVydEJvZHlFbGVtZW50PXRoaXMuaW5lcnREb2N1bWVudC5ib2R5LG51bGw9PXRoaXMuaW5lcnRCb2R5RWxlbWVudCl7dmFyIGU9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImh0bWwiKTt0aGlzLmluZXJ0RG9jdW1lbnQuYXBwZW5kQ2hpbGQoZSksdGhpcy5pbmVydEJvZHlFbGVtZW50PXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5IiksZS5hcHBlbmRDaGlsZCh0aGlzLmluZXJ0Qm9keUVsZW1lbnQpfXRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9Jzxzdmc+PGcgb25sb2FkPSJ0aGlzLnBhcmVudE5vZGUucmVtb3ZlKCkiPjwvZz48L3N2Zz4nLCF0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcnx8dGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInN2ZyIpPyh0aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPSc8c3ZnPjxwPjxzdHlsZT48aW1nIHNyYz0iPC9zdHlsZT48aW1nIHNyYz14IG9uZXJyb3I9YWxlcnQoMSkvLyI+Jyx0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3ImJnRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJzdmcgaW1nIikmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiEhd2luZG93LkRPTVBhcnNlcn1jYXRjaCh0KXtyZXR1cm4hMX19KCk/dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X0RPTVBhcnNlcjp0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfSW5lcnREb2N1bWVudCk6dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50PXRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9YSFJ9cmV0dXJuIHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfWEhSPWZ1bmN0aW9uKHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0KyI8L2JvZHk+Ijt0cnl7dD1lbmNvZGVVUkkodCl9Y2F0Y2godCl7cmV0dXJuIG51bGx9dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O2UucmVzcG9uc2VUeXBlPSJkb2N1bWVudCIsZS5vcGVuKCJHRVQiLCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCIrdCwhMSksZS5zZW5kKG51bGwpO3ZhciBuPWUucmVzcG9uc2UuYm9keTtyZXR1cm4gbi5yZW1vdmVDaGlsZChuLmZpcnN0Q2hpbGQpLG59LHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfRE9NUGFyc2VyPWZ1bmN0aW9uKHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0KyI8L2JvZHk+Ijt0cnl7dmFyIGU9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodCwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpLGV9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSx0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X0luZXJ0RG9jdW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuImNvbnRlbnQiaW4gZT8oZS5pbm5lckhUTUw9dCxlKToodGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD10LHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKHRoaXMuaW5lcnRCb2R5RWxlbWVudCksdGhpcy5pbmVydEJvZHlFbGVtZW50KX0sdC5wcm90b3R5cGUuc3RyaXBDdXN0b21Oc0F0dHJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF0dHJpYnV0ZXMsbj1lLmxlbmd0aC0xOzA8bjtuLS0pe3ZhciBpPWUuaXRlbShuKS5uYW1lOyJ4bWxuczpuczEiIT09aSYmMCE9PWkuaW5kZXhPZigibnMxOiIpfHx0LnJlbW92ZUF0dHJpYnV0ZShpKX1mb3IodmFyIHI9dC5maXJzdENoaWxkO3I7KXIubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnMocikscj1yLm5leHRTaWJsaW5nfSx0fSgpLG1uPS9eKD86KD86aHR0cHM/fG1haWx0b3xmdHB8dGVsfGZpbGUpOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvZ2kseW49L15kYXRhOig/OmltYWdlXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW2EtejAtOStcL10rPSokL2k7ZnVuY3Rpb24gdm4odCl7cmV0dXJuKHQ9U3RyaW5nKHQpKS5tYXRjaChtbil8fHQubWF0Y2goeW4pP3Q6KGhlKCkmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyB1bnNhZmUgVVJMIHZhbHVlICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpLCJ1bnNhZmU6Iit0KX1mdW5jdGlvbiBnbih0KXt2YXIgZSxuLHI9e307dHJ5e2Zvcih2YXIgbz1PYmplY3QoaS5lKSh0LnNwbGl0KCIsIikpLGE9by5uZXh0KCk7IWEuZG9uZTthPW8ubmV4dCgpKXJbYS52YWx1ZV09ITB9Y2F0Y2godCl7ZT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKG49by5yZXR1cm4pJiZuLmNhbGwobyl9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fXJldHVybiByfWZ1bmN0aW9uIGJuKCl7Zm9yKHZhciB0LGUsbj1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgbz17fTt0cnl7Zm9yKHZhciBhPU9iamVjdChpLmUpKG4pLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgdT1zLnZhbHVlO2Zvcih2YXIgbCBpbiB1KXUuaGFzT3duUHJvcGVydHkobCkmJihvW2xdPSEwKX19Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKGU9YS5yZXR1cm4pJiZlLmNhbGwoYSl9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fXJldHVybiBvfXZhciBfbix3bj1nbigiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLHhuPWduKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksQ249Z24oInJwLHJ0IiksU249Ym4oQ24seG4pLEVuPWJuKHduLGJuKHhuLGduKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpbnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxibihDbixnbigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLFNuKSxPbj1nbigiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksa249Z24oInNyY3NldCIpLFRuPWJuKE9uLGtuLGduKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpKSxqbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1yZXR1cm4gdC5wcm90b3R5cGUuc2FuaXRpemVDaGlsZHJlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5maXJzdENoaWxkO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT90aGlzLnN0YXJ0RWxlbWVudChlKTplLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhlLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsZS5maXJzdENoaWxkKWU9ZS5maXJzdENoaWxkO2Vsc2UgZm9yKDtlOyl7ZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoZSk7dmFyIG49dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLm5leHRTaWJsaW5nKTtpZihuKXtlPW47YnJlYWt9ZT10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUucGFyZW50Tm9kZSl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfSx0LnByb3RvdHlwZS5zdGFydEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKEVuLmhhc093blByb3BlcnR5KGUpKXt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChlKTtmb3IodmFyIG4saT10LmF0dHJpYnV0ZXMscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pLml0ZW0ociksYT1vLm5hbWUscz1hLnRvTG93ZXJDYXNlKCk7aWYoVG4uaGFzT3duUHJvcGVydHkocykpe3ZhciB1PW8udmFsdWU7T25bc10mJih1PXZuKHUpKSxrbltzXSYmKG49dSx1PShuPVN0cmluZyhuKSkuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHZuKHQudHJpbSgpKX0pLmpvaW4oIiwgIikpLHRoaXMuYnVmLnB1c2goIiAiLGEsJz0iJyxSbih1KSwnIicpfWVsc2UgdGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITB9dGhpcy5idWYucHVzaCgiPiIpfWVsc2UgdGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITB9LHQucHJvdG90eXBlLmVuZEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO0VuLmhhc093blByb3BlcnR5KGUpJiYhd24uaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLmJ1Zi5wdXNoKCI8LyIpLHRoaXMuYnVmLnB1c2goZSksdGhpcy5idWYucHVzaCgiPiIpKX0sdC5wcm90b3R5cGUuY2hhcnM9ZnVuY3Rpb24odCl7dGhpcy5idWYucHVzaChSbih0KSl9LHQucHJvdG90eXBlLmNoZWNrQ2xvYmJlcmVkRWxlbWVudD1mdW5jdGlvbih0LGUpe2lmKGUmJih0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICIrdC5vdXRlckhUTUwpO3JldHVybiBlfSx0fSgpLEFuPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxJbj0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gUm4odCl7cmV0dXJuIHQucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoQW4sZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShJbixmdW5jdGlvbih0KXtyZXR1cm4iJiMiK3QuY2hhckNvZGVBdCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiBNbih0LGUpe3ZhciBuPW51bGw7dHJ5e19uPV9ufHxuZXcgcG4odCk7dmFyIGk9ZT9TdHJpbmcoZSk6IiI7bj1fbi5nZXRJbmVydEJvZHlFbGVtZW50KGkpO3ZhciByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89bi5pbm5lckhUTUwsbj1fbi5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTt2YXIgYT1uZXcgam4scz1hLnNhbml0aXplQ2hpbGRyZW4oUG4obil8fG4pO3JldHVybiBoZSgpJiZhLnNhbml0aXplZFNvbWV0aGluZyYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIEhUTUwgc3RyaXBwZWQgc29tZSBjb250ZW50IChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKS4iKSxzfWZpbmFsbHl7aWYobilmb3IodmFyIHU9UG4obil8fG47dS5maXJzdENoaWxkOyl1LnJlbW92ZUNoaWxkKHUuZmlyc3RDaGlsZCl9fWZ1bmN0aW9uIFBuKHQpe3JldHVybiJjb250ZW50ImluIHQmJmZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfSh0KT90LmNvbnRlbnQ6bnVsbH12YXIgRG49bmV3IFJlZ0V4cCgiXihbLSwuXCInJV8hIyBhLXpBLVowLTldK3woPzooPzptYXRyaXh8dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxza2V3fHBlcnNwZWN0aXZlKSg/Olh8WXwzZCk/fCg/OnJnYnxoc2wpYT98KD86cmVwZWF0aW5nLSk/KD86bGluZWFyfHJhZGlhbCktZ3JhZGllbnR8KD86Y2FsY3xhdHRyKSlcXChbLTAtOS4lLCAjYS16QS1aXStcXCkpJCIsImciKSxObj0vXnVybFwoKFteKV0rKVwpJC87ZnVuY3Rpb24gRm4odCl7aWYoISh0PVN0cmluZyh0KS50cmltKCkpKXJldHVybiIiO3ZhciBlPXQubWF0Y2goTm4pO3JldHVybiBlJiZ2bihlWzFdKT09PWVbMV18fHQubWF0Y2goRG4pJiZmdW5jdGlvbih0KXtmb3IodmFyIGU9ITAsbj0hMCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciByPXQuY2hhckF0KGkpOyInIj09PXImJm4/ZT0hZTonIic9PT1yJiZlJiYobj0hbil9cmV0dXJuIGUmJm59KHQpP3Q6KGhlKCkmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyB1bnNhZmUgc3R5bGUgdmFsdWUgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpLiIpLCJ1bnNhZmUiKX12YXIgTG49ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5OT05FPTBdPSJOT05FIix0W3QuSFRNTD0xXT0iSFRNTCIsdFt0LlNUWUxFPTJdPSJTVFlMRSIsdFt0LlNDUklQVD0zXT0iU0NSSVBUIix0W3QuVVJMPTRdPSJVUkwiLHRbdC5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsdH0oe30pLFZuPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiB6bih0LGUsbil7dmFyIGk9dC5zdGF0ZSxyPTE3OTImaTtyZXR1cm4gcj09PWU/KHQuc3RhdGU9LTE3OTMmaXxuLHQuaW5pdEluZGV4PS0xLCEwKTpyPT09bn1mdW5jdGlvbiBCbih0LGUsbil7cmV0dXJuKDE3OTImdC5zdGF0ZSk9PT1lJiZ0LmluaXRJbmRleDw9biYmKHQuaW5pdEluZGV4PW4rMSwhMCl9ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBIbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIHFuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gR24odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBRbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfXZhciBZbj17c2V0Q3VycmVudE5vZGU6dm9pZCAwLGNyZWF0ZVJvb3RWaWV3OnZvaWQgMCxjcmVhdGVFbWJlZGRlZFZpZXc6dm9pZCAwLGNyZWF0ZUNvbXBvbmVudFZpZXc6dm9pZCAwLGNyZWF0ZU5nTW9kdWxlUmVmOnZvaWQgMCxvdmVycmlkZVByb3ZpZGVyOnZvaWQgMCxvdmVycmlkZUNvbXBvbmVudFZpZXc6dm9pZCAwLGNsZWFyT3ZlcnJpZGVzOnZvaWQgMCxjaGVja0FuZFVwZGF0ZVZpZXc6dm9pZCAwLGNoZWNrTm9DaGFuZ2VzVmlldzp2b2lkIDAsZGVzdHJveVZpZXc6dm9pZCAwLHJlc29sdmVEZXA6dm9pZCAwLGNyZWF0ZURlYnVnQ29udGV4dDp2b2lkIDAsaGFuZGxlRXZlbnQ6dm9pZCAwLHVwZGF0ZURpcmVjdGl2ZXM6dm9pZCAwLHVwZGF0ZVJlbmRlcmVyOnZvaWQgMCxkaXJ0eVBhcmVudFF1ZXJpZXM6dm9pZCAwfTtmdW5jdGlvbiBXbih0LGUsbixpKXt2YXIgcj0iRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWU6ICciK2UrIicuIEN1cnJlbnQgdmFsdWU6ICciK24rIicuIjtyZXR1cm4gaSYmKHIrPSIgSXQgc2VlbXMgbGlrZSB0aGUgdmlldyBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGl0cyBwYXJlbnQgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gZGlydHkgY2hlY2tlZC4gSGFzIGl0IGJlZW4gY3JlYXRlZCBpbiBhIGNoYW5nZSBkZXRlY3Rpb24gaG9vayA/IiksZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRXJyb3IodCk7cmV0dXJuIFpuKG4sZSksbn0ocix0KX1mdW5jdGlvbiBabih0LGUpe3RbZXRdPWUsdFtpdF09ZS5sb2dFcnJvci5iaW5kKGUpfWZ1bmN0aW9uIEtuKHQpe3JldHVybiBuZXcgRXJyb3IoIlZpZXdEZXN0cm95ZWRFcnJvcjogQXR0ZW1wdCB0byB1c2UgYSBkZXN0cm95ZWQgdmlldzogIit0KX12YXIgWG49ZnVuY3Rpb24oKXt9LCRuPW5ldyBNYXA7ZnVuY3Rpb24gSm4odCl7dmFyIGU9JG4uZ2V0KHQpO3JldHVybiBlfHwoZT14KHQpKyJfIiskbi5zaXplLCRuLnNldCh0LGUpKSxlfWZ1bmN0aW9uIHRpKHQsZSxuLGkpe2lmKFVlLmlzV3JhcHBlZChpKSl7aT1VZS51bndyYXAoaSk7dmFyIHI9dC5kZWYubm9kZXNbZV0uYmluZGluZ0luZGV4K24sbz1VZS51bndyYXAodC5vbGRWYWx1ZXNbcl0pO3Qub2xkVmFsdWVzW3JdPW5ldyBVZShvKX1yZXR1cm4gaX12YXIgZWk9IiQkdW5kZWZpbmVkIixuaT0iJCRlbXB0eSI7ZnVuY3Rpb24gaWkodCl7cmV0dXJue2lkOmVpLHN0eWxlczp0LnN0eWxlcyxlbmNhcHN1bGF0aW9uOnQuZW5jYXBzdWxhdGlvbixkYXRhOnQuZGF0YX19dmFyIHJpPTA7ZnVuY3Rpb24gb2kodCxlLG4saSl7cmV0dXJuISghKDImdC5zdGF0ZSkmJncodC5vbGRWYWx1ZXNbZS5iaW5kaW5nSW5kZXgrbl0saSkpfWZ1bmN0aW9uIGFpKHQsZSxuLGkpe3JldHVybiEhb2kodCxlLG4saSkmJih0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXT1pLCEwKX1mdW5jdGlvbiBzaSh0LGUsbixpKXt2YXIgcj10Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXTtpZigxJnQuc3RhdGV8fCFCZShyLGkpKXt2YXIgbz1lLmJpbmRpbmdzW25dLm5hbWU7dGhyb3cgV24oWW4uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLG8rIjogIityLG8rIjogIitpLDAhPSgxJnQuc3RhdGUpKX19ZnVuY3Rpb24gdWkodCl7Zm9yKHZhciBlPXQ7ZTspMiZlLmRlZi5mbGFncyYmKGUuc3RhdGV8PTgpLGU9ZS52aWV3Q29udGFpbmVyUGFyZW50fHxlLnBhcmVudH1mdW5jdGlvbiBsaSh0LGUpe2Zvcih2YXIgbj10O24mJm4hPT1lOyluLnN0YXRlfD02NCxuPW4udmlld0NvbnRhaW5lclBhcmVudHx8bi5wYXJlbnR9ZnVuY3Rpb24gY2kodCxlLG4saSl7dHJ5e3JldHVybiB1aSgzMzU1NDQzMiZ0LmRlZi5ub2Rlc1tlXS5mbGFncz9Ibih0LGUpLmNvbXBvbmVudFZpZXc6dCksWW4uaGFuZGxlRXZlbnQodCxlLG4saSl9Y2F0Y2goZSl7dC5yb290LmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKX19ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQucGFyZW50P0huKHQucGFyZW50LHQucGFyZW50Tm9kZURlZi5ub2RlSW5kZXgpOm51bGx9ZnVuY3Rpb24gaGkodCl7cmV0dXJuIHQucGFyZW50P3QucGFyZW50Tm9kZURlZi5wYXJlbnQ6bnVsbH1mdW5jdGlvbiBkaSh0LGUpe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBIbih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2Nhc2UgMjpyZXR1cm4gVW4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dH19ZnVuY3Rpb24gcGkodCl7cmV0dXJuISF0LnBhcmVudCYmISEoMzI3NjgmdC5wYXJlbnROb2RlRGVmLmZsYWdzKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4hKCF0LnBhcmVudHx8MzI3NjgmdC5wYXJlbnROb2RlRGVmLmZsYWdzKX1mdW5jdGlvbiB5aSh0KXtyZXR1cm4gMTw8dCUzMn1mdW5jdGlvbiB2aSh0KXt2YXIgZT17fSxuPTAscj17fTtyZXR1cm4gdCYmdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPU9iamVjdChpLmMpKHQsMiksYT1vWzBdLHM9b1sxXTsibnVtYmVyIj09dHlwZW9mIGE/KGVbYV09cyxufD15aShhKSk6clthXT1zfSkse21hdGNoZWRRdWVyaWVzOmUscmVmZXJlbmNlczpyLG1hdGNoZWRRdWVyeUlkczpufX1mdW5jdGlvbiBnaSh0LGUpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgbixyLG87cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/KG89KG49T2JqZWN0KGkuYykodCwyKSlbMF0scj1uWzFdKToobz0wLHI9dCksciYmKCJmdW5jdGlvbiI9PXR5cGVvZiByfHwib2JqZWN0Ij09dHlwZW9mIHIpJiZlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixqLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pLHtmbGFnczpvLHRva2VuOnIsdG9rZW5LZXk6Sm4ocil9fSl9ZnVuY3Rpb24gYmkodCxlLG4pe3ZhciBpPW4ucmVuZGVyUGFyZW50O3JldHVybiBpPzA9PSgxJmkuZmxhZ3MpfHwwPT0oMzM1NTQ0MzImaS5mbGFncyl8fGkuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGUmJmkuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGUuZW5jYXBzdWxhdGlvbj09PSQuTmF0aXZlP0huKHQsbi5yZW5kZXJQYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50OnZvaWQgMDplfXZhciBfaT1uZXcgV2Vha01hcDtmdW5jdGlvbiB3aSh0KXt2YXIgZT1faS5nZXQodCk7cmV0dXJuIGV8fCgoZT10KGZ1bmN0aW9uKCl7cmV0dXJuIFhufSkpLmZhY3Rvcnk9dCxfaS5zZXQodCxlKSksZX1mdW5jdGlvbiB4aSh0LGUsbixpLHIpezM9PT1lJiYobj10LnJlbmRlcmVyLnBhcmVudE5vZGUoZGkodCx0LmRlZi5sYXN0UmVuZGVyUm9vdE5vZGUpKSksQ2kodCxlLDAsdC5kZWYubm9kZXMubGVuZ3RoLTEsbixpLHIpfWZ1bmN0aW9uIENpKHQsZSxuLGkscixvLGEpe2Zvcih2YXIgcz1uO3M8PWk7cysrKXt2YXIgdT10LmRlZi5ub2Rlc1tzXTsxMSZ1LmZsYWdzJiZFaSh0LHUsZSxyLG8sYSkscys9dS5jaGlsZENvdW50fX1mdW5jdGlvbiBTaSh0LGUsbixpLHIsbyl7Zm9yKHZhciBhPXQ7YSYmIXBpKGEpOylhPWEucGFyZW50O2Zvcih2YXIgcz1hLnBhcmVudCx1PWhpKGEpLGw9dS5ub2RlSW5kZXgrdS5jaGlsZENvdW50LGM9dS5ub2RlSW5kZXgrMTtjPD1sO2MrKyl7dmFyIGY9cy5kZWYubm9kZXNbY107Zi5uZ0NvbnRlbnRJbmRleD09PWUmJkVpKHMsZixuLGkscixvKSxjKz1mLmNoaWxkQ291bnR9aWYoIXMucGFyZW50KXt2YXIgaD10LnJvb3QucHJvamVjdGFibGVOb2Rlc1tlXTtpZihoKWZvcihjPTA7YzxoLmxlbmd0aDtjKyspT2kodCxoW2NdLG4saSxyLG8pfX1mdW5jdGlvbiBFaSh0LGUsbixpLHIsbyl7aWYoOCZlLmZsYWdzKVNpKHQsZS5uZ0NvbnRlbnQuaW5kZXgsbixpLHIsbyk7ZWxzZXt2YXIgYT1kaSh0LGUpO2lmKDM9PT1uJiYzMzU1NDQzMiZlLmZsYWdzJiY0OCZlLmJpbmRpbmdGbGFncz8oMTYmZS5iaW5kaW5nRmxhZ3MmJk9pKHQsYSxuLGkscixvKSwzMiZlLmJpbmRpbmdGbGFncyYmT2koSG4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldyxhLG4saSxyLG8pKTpPaSh0LGEsbixpLHIsbyksMTY3NzcyMTYmZS5mbGFncylmb3IodmFyIHM9SG4odCxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyx1PTA7dTxzLmxlbmd0aDt1KyspeGkoc1t1XSxuLGkscixvKTsxJmUuZmxhZ3MmJiFlLmVsZW1lbnQubmFtZSYmQ2kodCxuLGUubm9kZUluZGV4KzEsZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50LGkscixvKX19ZnVuY3Rpb24gT2kodCxlLG4saSxyLG8pe3ZhciBhPXQucmVuZGVyZXI7c3dpdGNoKG4pe2Nhc2UgMTphLmFwcGVuZENoaWxkKGksZSk7YnJlYWs7Y2FzZSAyOmEuaW5zZXJ0QmVmb3JlKGksZSxyKTticmVhaztjYXNlIDM6YS5yZW1vdmVDaGlsZChpLGUpO2JyZWFrO2Nhc2UgMDpvLnB1c2goZSl9fXZhciBraT0vXjooW146XSspOiguKykkLztmdW5jdGlvbiBUaSh0KXtpZigiOiI9PT10WzBdKXt2YXIgZT10Lm1hdGNoKGtpKTtyZXR1cm5bZVsxXSxlWzJdXX1yZXR1cm5bIiIsdF19ZnVuY3Rpb24gamkodCl7Zm9yKHZhciBlPTAsbj0wO248dC5sZW5ndGg7bisrKWV8PXRbbl0uZmxhZ3M7cmV0dXJuIGV9ZnVuY3Rpb24gQWkodCxlLG4saSxyLG8sYSxzLHUsbCxjLGYsaCxkLHAsbSx5LHYsZyxiKXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiBlK0lpKG4pK2k7Y2FzZSAyOnJldHVybiBlK0lpKG4pK2krSWkocikrbztjYXNlIDM6cmV0dXJuIGUrSWkobikraStJaShyKStvK0lpKGEpK3M7Y2FzZSA0OnJldHVybiBlK0lpKG4pK2krSWkocikrbytJaShhKStzK0lpKHUpK2w7Y2FzZSA1OnJldHVybiBlK0lpKG4pK2krSWkocikrbytJaShhKStzK0lpKHUpK2wrSWkoYykrZjtjYXNlIDY6cmV0dXJuIGUrSWkobikraStJaShyKStvK0lpKGEpK3MrSWkodSkrbCtJaShjKStmK0lpKGgpK2Q7Y2FzZSA3OnJldHVybiBlK0lpKG4pK2krSWkocikrbytJaShhKStzK0lpKHUpK2wrSWkoYykrZitJaShoKStkK0lpKHApK207Y2FzZSA4OnJldHVybiBlK0lpKG4pK2krSWkocikrbytJaShhKStzK0lpKHUpK2wrSWkoYykrZitJaShoKStkK0lpKHApK20rSWkoeSkrdjtjYXNlIDk6cmV0dXJuIGUrSWkobikraStJaShyKStvK0lpKGEpK3MrSWkodSkrbCtJaShjKStmK0lpKGgpK2QrSWkocCkrbStJaSh5KSt2K0lpKGcpK2I7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRvZXMgbm90IHN1cHBvcnQgbW9yZSB0aGFuIDkgZXhwcmVzc2lvbnMiKX19ZnVuY3Rpb24gSWkodCl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpOiIifWZ1bmN0aW9uIFJpKHQsZSxuLGkscixvKXt0fD0xO3ZhciBhPXZpKGUpO3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGZsYWdzOnQsY2hlY2tJbmRleDotMSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczphLm1hdGNoZWRRdWVyaWVzLG1hdGNoZWRRdWVyeUlkczphLm1hdGNoZWRRdWVyeUlkcyxyZWZlcmVuY2VzOmEucmVmZXJlbmNlcyxuZ0NvbnRlbnRJbmRleDpuLGNoaWxkQ291bnQ6aSxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6e25zOm51bGwsbmFtZTpudWxsLGF0dHJzOm51bGwsdGVtcGxhdGU6bz93aShvKTpudWxsLGNvbXBvbmVudFByb3ZpZGVyOm51bGwsY29tcG9uZW50VmlldzpudWxsLGNvbXBvbmVudFJlbmRlcmVyVHlwZTpudWxsLHB1YmxpY1Byb3ZpZGVyczpudWxsLGFsbFByb3ZpZGVyczpudWxsLGhhbmRsZUV2ZW50OnJ8fFhufSxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBNaSh0LGUsbixyLG8sYSxzLHUsbCxjLGYsaCl7dmFyIGQ7dm9pZCAwPT09cyYmKHM9W10pLGN8fChjPVhuKTt2YXIgcD12aShuKSxtPXAubWF0Y2hlZFF1ZXJpZXMseT1wLnJlZmVyZW5jZXMsdj1wLm1hdGNoZWRRdWVyeUlkcyxnPW51bGwsYj1udWxsO2EmJihnPShkPU9iamVjdChpLmMpKFRpKGEpLDIpKVswXSxiPWRbMV0pLHU9dXx8W107Zm9yKHZhciBfPW5ldyBBcnJheSh1Lmxlbmd0aCksdz0wO3c8dS5sZW5ndGg7dysrKXt2YXIgeD1PYmplY3QoaS5jKSh1W3ddLDMpLEM9eFswXSxTPXhbMV0sRT14WzJdLE89T2JqZWN0KGkuYykoVGkoUyksMiksaz1PWzBdLFQ9T1sxXSxqPXZvaWQgMCxBPXZvaWQgMDtzd2l0Y2goMTUmQyl7Y2FzZSA0OkE9RTticmVhaztjYXNlIDE6Y2FzZSA4Omo9RX1fW3ddPXtmbGFnczpDLG5zOmssbmFtZTpULG5vbk1pbmlmaWVkTmFtZTpULHNlY3VyaXR5Q29udGV4dDpqLHN1ZmZpeDpBfX1sPWx8fFtdO3ZhciBJPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKHc9MDt3PGwubGVuZ3RoO3crKyl7dmFyIFI9T2JqZWN0KGkuYykobFt3XSwyKTtJW3ddPXt0eXBlOjAsdGFyZ2V0OlJbMF0sZXZlbnROYW1lOlJbMV0scHJvcE5hbWU6bnVsbH19dmFyIE09KHM9c3x8W10pLm1hcChmdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoaS5jKSh0LDIpLG49ZVswXSxyPWVbMV0sbz1PYmplY3QoaS5jKShUaShuKSwyKTtyZXR1cm5bb1swXSxvWzFdLHJdfSk7cmV0dXJuIGg9ZnVuY3Rpb24odCl7aWYodCYmdC5pZD09PWVpKXt2YXIgZT1udWxsIT10LmVuY2Fwc3VsYXRpb24mJnQuZW5jYXBzdWxhdGlvbiE9PSQuTm9uZXx8dC5zdHlsZXMubGVuZ3RofHxPYmplY3Qua2V5cyh0LmRhdGEpLmxlbmd0aDt0LmlkPWU/ImMiK3JpKys6bml9cmV0dXJuIHQmJnQuaWQ9PT1uaSYmKHQ9bnVsbCksdHx8bnVsbH0oaCksZiYmKGV8PTMzNTU0NDMyKSx7bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZXw9MSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczptLG1hdGNoZWRRdWVyeUlkczp2LHJlZmVyZW5jZXM6eSxuZ0NvbnRlbnRJbmRleDpyLGNoaWxkQ291bnQ6byxiaW5kaW5nczpfLGJpbmRpbmdGbGFnczpqaShfKSxvdXRwdXRzOkksZWxlbWVudDp7bnM6ZyxuYW1lOmIsYXR0cnM6TSx0ZW1wbGF0ZTpudWxsLGNvbXBvbmVudFByb3ZpZGVyOm51bGwsY29tcG9uZW50VmlldzpmfHxudWxsLGNvbXBvbmVudFJlbmRlcmVyVHlwZTpoLHB1YmxpY1Byb3ZpZGVyczpudWxsLGFsbFByb3ZpZGVyczpudWxsLGhhbmRsZUV2ZW50OmN8fFhufSxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBQaSh0LGUsbil7dmFyIHIsbz1uLmVsZW1lbnQsYT10LnJvb3Quc2VsZWN0b3JPck5vZGUscz10LnJlbmRlcmVyO2lmKHQucGFyZW50fHwhYSl7cj1vLm5hbWU/cy5jcmVhdGVFbGVtZW50KG8ubmFtZSxvLm5zKTpzLmNyZWF0ZUNvbW1lbnQoIiIpO3ZhciB1PWJpKHQsZSxuKTt1JiZzLmFwcGVuZENoaWxkKHUscil9ZWxzZSByPXMuc2VsZWN0Um9vdEVsZW1lbnQoYSk7aWYoby5hdHRycylmb3IodmFyIGw9MDtsPG8uYXR0cnMubGVuZ3RoO2wrKyl7dmFyIGM9T2JqZWN0KGkuYykoby5hdHRyc1tsXSwzKTtzLnNldEF0dHJpYnV0ZShyLGNbMV0sY1syXSxjWzBdKX1yZXR1cm4gcn1mdW5jdGlvbiBEaSh0LGUsbixpKXtmb3IodmFyIHI9MDtyPG4ub3V0cHV0cy5sZW5ndGg7cisrKXt2YXIgbz1uLm91dHB1dHNbcl0sYT1OaSh0LG4ubm9kZUluZGV4LChmPW8uZXZlbnROYW1lLChjPW8udGFyZ2V0KT9jKyI6IitmOmYpKSxzPW8udGFyZ2V0LHU9dDsiY29tcG9uZW50Ij09PW8udGFyZ2V0JiYocz1udWxsLHU9ZSk7dmFyIGw9dS5yZW5kZXJlci5saXN0ZW4oc3x8aSxvLmV2ZW50TmFtZSxhKTt0LmRpc3Bvc2FibGVzW24ub3V0cHV0SW5kZXgrcl09bH12YXIgYyxmfWZ1bmN0aW9uIE5pKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGNpKHQsZSxuLGkpfX1mdW5jdGlvbiBGaSh0LGUsbixpKXtpZighYWkodCxlLG4saSkpcmV0dXJuITE7dmFyIHI9ZS5iaW5kaW5nc1tuXSxvPUhuKHQsZS5ub2RlSW5kZXgpLGE9by5yZW5kZXJFbGVtZW50LHM9ci5uYW1lO3N3aXRjaCgxNSZyLmZsYWdzKXtjYXNlIDE6IWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYT1lLnNlY3VyaXR5Q29udGV4dCxzPWE/dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShhLG8pOm87cz1udWxsIT1zP3MudG9TdHJpbmcoKTpudWxsO3ZhciB1PXQucmVuZGVyZXI7bnVsbCE9bz91LnNldEF0dHJpYnV0ZShuLHIscyxpKTp1LnJlbW92ZUF0dHJpYnV0ZShuLHIsaSl9KHQscixhLHIubnMscyxpKTticmVhaztjYXNlIDI6IWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXQucmVuZGVyZXI7aT9yLmFkZENsYXNzKGUsbik6ci5yZW1vdmVDbGFzcyhlLG4pfSh0LGEscyxpKTticmVhaztjYXNlIDQ6IWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShMbi5TVFlMRSxyKTtpZihudWxsIT1vKXtvPW8udG9TdHJpbmcoKTt2YXIgYT1lLnN1ZmZpeDtudWxsIT1hJiYobys9YSl9ZWxzZSBvPW51bGw7dmFyIHM9dC5yZW5kZXJlcjtudWxsIT1vP3Muc2V0U3R5bGUobixpLG8pOnMucmVtb3ZlU3R5bGUobixpKX0odCxyLGEscyxpKTticmVhaztjYXNlIDg6IWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89ZS5zZWN1cml0eUNvbnRleHQsYT1vP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUobyxyKTpyO3QucmVuZGVyZXIuc2V0UHJvcGVydHkobixpLGEpfSgzMzU1NDQzMiZlLmZsYWdzJiYzMiZyLmZsYWdzP28uY29tcG9uZW50Vmlldzp0LHIsYSxzLGkpfXJldHVybiEwfXZhciBMaT1uZXcgT2JqZWN0LFZpPUpuKFApLHppPUpuKFIpLEJpPUpuKEh0KTtmdW5jdGlvbiBVaSh0LGUsbixpKXtyZXR1cm4gbj1TKG4pLHtpbmRleDotMSxkZXBzOmdpKGkseChlKSksZmxhZ3M6dCx0b2tlbjplLHZhbHVlOm59fWZ1bmN0aW9uIEhpKHQpe2Zvcih2YXIgZT17fSxuPVtdLGk9ITEscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO28udG9rZW49PT11dCYmITA9PT1vLnZhbHVlJiYoaT0hMCksMTA3Mzc0MTgyNCZvLmZsYWdzJiZuLnB1c2goby50b2tlbiksby5pbmRleD1yLGVbSm4oby50b2tlbildPW99cmV0dXJue2ZhY3Rvcnk6bnVsbCxwcm92aWRlcnNCeUtleTplLHByb3ZpZGVyczp0LG1vZHVsZXM6bixpc1Jvb3Q6aX19ZnVuY3Rpb24gcWkodCxlLG4pe3ZvaWQgMD09PW4mJihuPVAuVEhST1dfSUZfTk9UX0ZPVU5EKTt2YXIgaSxyLG89Wih0KTt0cnl7aWYoOCZlLmZsYWdzKXJldHVybiBlLnRva2VuO2lmKDImZS5mbGFncyYmKG49bnVsbCksMSZlLmZsYWdzKXJldHVybiB0Ll9wYXJlbnQuZ2V0KGUudG9rZW4sbik7dmFyIGE9ZS50b2tlbktleTtzd2l0Y2goYSl7Y2FzZSBWaTpjYXNlIHppOmNhc2UgQmk6cmV0dXJuIHR9dmFyIHM9dC5fZGVmLnByb3ZpZGVyc0J5S2V5W2FdO2lmKHMpe3ZhciB1PXQuX3Byb3ZpZGVyc1tzLmluZGV4XTtyZXR1cm4gdm9pZCAwPT09dSYmKHU9dC5fcHJvdmlkZXJzW3MuaW5kZXhdPUdpKHQscykpLHU9PT1MaT92b2lkIDA6dX1pZihlLnRva2VuLm5nSW5qZWN0YWJsZURlZiYmKGk9dCxudWxsIT0ocj1lLnRva2VuLm5nSW5qZWN0YWJsZURlZikucHJvdmlkZWRJbiYmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2RlZi5tb2R1bGVzLmluZGV4T2Yoci5wcm92aWRlZEluKT4tMX0oaSl8fCJyb290Ij09PXIucHJvdmlkZWRJbiYmaS5fZGVmLmlzUm9vdCkpKXt2YXIgbD10Ll9wcm92aWRlcnMubGVuZ3RoO3JldHVybiB0Ll9kZWYucHJvdmlkZXJzQnlLZXlbZS50b2tlbktleV09e2ZsYWdzOjUxMjAsdmFsdWU6ZS50b2tlbi5uZ0luamVjdGFibGVEZWYuZmFjdG9yeSxkZXBzOltdLGluZGV4OmwsdG9rZW46ZS50b2tlbn0sdC5fcHJvdmlkZXJzW2xdPUxpLHQuX3Byb3ZpZGVyc1tsXT1HaSh0LHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XSl9cmV0dXJuIDQmZS5mbGFncz9uOnQuX3BhcmVudC5nZXQoZS50b2tlbixuKX1maW5hbGx5e1oobyl9fWZ1bmN0aW9uIEdpKHQsZSl7dmFyIG47c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDUxMjpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uLmxlbmd0aDtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHFpKHQsblswXSkpO2Nhc2UgMjpyZXR1cm4gbmV3IGUocWkodCxuWzBdKSxxaSh0LG5bMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyBlKHFpKHQsblswXSkscWkodCxuWzFdKSxxaSh0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgbz1uZXcgQXJyYXkociksYT0wO2E8cjthKyspb1thXT1xaSh0LG5bYV0pO3JldHVybiBuZXcoZS5iaW5kLmFwcGx5KGUsT2JqZWN0KGkuZCkoW3ZvaWQgMF0sbykpKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMTAyNDpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uLmxlbmd0aDtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiBlKCk7Y2FzZSAxOnJldHVybiBlKHFpKHQsblswXSkpO2Nhc2UgMjpyZXR1cm4gZShxaSh0LG5bMF0pLHFpKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gZShxaSh0LG5bMF0pLHFpKHQsblsxXSkscWkodCxuWzJdKSk7ZGVmYXVsdDpmb3IodmFyIG89QXJyYXkociksYT0wO2E8cjthKyspb1thXT1xaSh0LG5bYV0pO3JldHVybiBlLmFwcGx5KHZvaWQgMCxPYmplY3QoaS5kKShvKSl9fSh0LGUudmFsdWUsZS5kZXBzKTticmVhaztjYXNlIDIwNDg6bj1xaSh0LGUuZGVwc1swXSk7YnJlYWs7Y2FzZSAyNTY6bj1lLnZhbHVlfXJldHVybiBuPT09TGl8fG51bGw9PW58fCJvYmplY3QiIT10eXBlb2Ygbnx8MTMxMDcyJmUuZmxhZ3N8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLm5nT25EZXN0cm95fHwoZS5mbGFnc3w9MTMxMDcyKSx2b2lkIDA9PT1uP0xpOm59ZnVuY3Rpb24gUWkodCxlKXt2YXIgbj10LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3M7aWYoKG51bGw9PWV8fGU+PW4ubGVuZ3RoKSYmKGU9bi5sZW5ndGgtMSksZTwwKXJldHVybiBudWxsO3ZhciBpPW5bZV07cmV0dXJuIGkudmlld0NvbnRhaW5lclBhcmVudD1udWxsLEtpKG4sZSksWW4uZGlydHlQYXJlbnRRdWVyaWVzKGkpLFdpKGkpLGl9ZnVuY3Rpb24gWWkodCxlLG4pe3ZhciBpPWU/ZGkoZSxlLmRlZi5sYXN0UmVuZGVyUm9vdE5vZGUpOnQucmVuZGVyRWxlbWVudDt4aShuLDIsbi5yZW5kZXJlci5wYXJlbnROb2RlKGkpLG4ucmVuZGVyZXIubmV4dFNpYmxpbmcoaSksdm9pZCAwKX1mdW5jdGlvbiBXaSh0KXt4aSh0LDMsbnVsbCxudWxsLHZvaWQgMCl9ZnVuY3Rpb24gWmkodCxlLG4pe2U+PXQubGVuZ3RoP3QucHVzaChuKTp0LnNwbGljZShlLDAsbil9ZnVuY3Rpb24gS2kodCxlKXtlPj10Lmxlbmd0aC0xP3QucG9wKCk6dC5zcGxpY2UoZSwxKX12YXIgWGk9bmV3IE9iamVjdDtmdW5jdGlvbiAkaSh0LGUsbixpLHIsbyl7cmV0dXJuIG5ldyBKaSh0LGUsbixpLHIsbyl9dmFyIEppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvLGEpe3ZhciBzPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gcy5zZWxlY3Rvcj1lLHMuY29tcG9uZW50VHlwZT1uLHMuX2lucHV0cz1yLHMuX291dHB1dHM9byxzLm5nQ29udGVudFNlbGVjdG9ycz1hLHMudmlld0RlZkZhY3Rvcnk9aSxzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5wdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLl9pbnB1dHM7Zm9yKHZhciBuIGluIGUpdC5wdXNoKHtwcm9wTmFtZTpuLHRlbXBsYXRlTmFtZTplW25dfSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvdXRwdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX291dHB1dHMpdC5wdXNoKHtwcm9wTmFtZTplLHRlbXBsYXRlTmFtZTp0aGlzLl9vdXRwdXRzW2VdfSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKCFpKXRocm93IG5ldyBFcnJvcigibmdNb2R1bGUgc2hvdWxkIGJlIHByb3ZpZGVkIik7dmFyIHI9d2kodGhpcy52aWV3RGVmRmFjdG9yeSksbz1yLm5vZGVzWzBdLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIubm9kZUluZGV4LGE9WW4uY3JlYXRlUm9vdFZpZXcodCxlfHxbXSxuLHIsaSxYaSkscz1xbihhLG8pLmluc3RhbmNlO3JldHVybiBuJiZhLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShIbihhLDApLnJlbmRlckVsZW1lbnQsIm5nLXZlcnNpb24iLHR0LmZ1bGwpLG5ldyB0cihhLG5ldyBycihhKSxzKX0sZX0oUHQpLHRyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdmlldz1lLHIuX3ZpZXdSZWY9bixyLl9jb21wb25lbnQ9aSxyLl9lbERlZj1yLl92aWV3LmRlZi5ub2Rlc1swXSxyLmhvc3RWaWV3PW4sci5jaGFuZ2VEZXRlY3RvclJlZj1uLHIuaW5zdGFuY2U9aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENlKEhuKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1cih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbXBvbmVudFR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50LmNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl92aWV3UmVmLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX3ZpZXdSZWYub25EZXN0cm95KHQpfSxlfShNdCk7ZnVuY3Rpb24gZXIodCxlLG4pe3JldHVybiBuZXcgbnIodCxlLG4pfXZhciBucj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXc9dCx0aGlzLl9lbERlZj1lLHRoaXMuX2RhdGE9bix0aGlzLl9lbWJlZGRlZFZpZXdzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENlKHRoaXMuX2RhdGEucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgdXIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRJbmplY3RvciIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92aWV3LGU9dGhpcy5fZWxEZWYucGFyZW50OyFlJiZ0OyllPWhpKHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHQ/bmV3IHVyKHQsZSk6bmV3IHVyKHRoaXMuX3ZpZXcsbnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIGU9UWkodGhpcy5fZGF0YSx0KTtZbi5kZXN0cm95VmlldyhlKX19LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9lbWJlZGRlZFZpZXdzW3RdO2lmKGUpe3ZhciBuPW5ldyBycihlKTtyZXR1cm4gbi5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksbn1yZXR1cm4gbnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSk7cmV0dXJuIHRoaXMuaW5zZXJ0KGksbiksaX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89bnx8dGhpcy5wYXJlbnRJbmplY3RvcjtyfHx0IGluc3RhbmNlb2YgVXR8fChyPW8uZ2V0KEh0KSk7dmFyIGE9dC5jcmVhdGUobyxpLHZvaWQgMCxyKTtyZXR1cm4gdGhpcy5pbnNlcnQoYS5ob3N0VmlldyxlKSxhfSx0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4saSxyLG8sYT10O3JldHVybiByPWEuX3ZpZXcsbz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLG51bGwhPT0oaT1lKSYmdm9pZCAwIT09aXx8KGk9by5sZW5ndGgpLHIudmlld0NvbnRhaW5lclBhcmVudD10aGlzLl92aWV3LFppKG8saSxyKSxmdW5jdGlvbih0LGUpe3ZhciBuPWZpKGUpO2lmKG4mJm4hPT10JiYhKDE2JmUuc3RhdGUpKXtlLnN0YXRlfD0xNjt2YXIgaT1uLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpfHwoaT1uLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cz1bXSksaS5wdXNoKGUpLGZ1bmN0aW9uKHQsbil7aWYoISg0Jm4uZmxhZ3MpKXtlLnBhcmVudC5kZWYubm9kZUZsYWdzfD00LG4uZmxhZ3N8PTQ7Zm9yKHZhciBpPW4ucGFyZW50O2k7KWkuY2hpbGRGbGFnc3w9NCxpPWkucGFyZW50fX0oMCxlLnBhcmVudE5vZGVEZWYpfX0obixyKSxZbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksWWkobixpPjA/b1tpLTFdOm51bGwsciksYS5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksdH0sdC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1vdmUgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4saSxyLG8sYSxzPXRoaXMuX2VtYmVkZGVkVmlld3MuaW5kZXhPZih0Ll92aWV3KTtyZXR1cm4gcj1lLGE9KG89KG49dGhpcy5fZGF0YSkudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cylbaT1zXSxLaShvLGkpLG51bGw9PXImJihyPW8ubGVuZ3RoKSxaaShvLHIsYSksWW4uZGlydHlQYXJlbnRRdWVyaWVzKGEpLFdpKGEpLFlpKG4scj4wP29bci0xXTpudWxsLGEpLHR9LHQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VtYmVkZGVkVmlld3MuaW5kZXhPZih0Ll92aWV3KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPVFpKHRoaXMuX2RhdGEsdCk7ZSYmWW4uZGVzdHJveVZpZXcoZSl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbih0KXt2YXIgZT1RaSh0aGlzLl9kYXRhLHQpO3JldHVybiBlP25ldyBycihlKTpudWxsfSx0fSgpO2Z1bmN0aW9uIGlyKHQpe3JldHVybiBuZXcgcnIodCl9dmFyIHJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl92aWV3PXQsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1udWxsLHRoaXMuX2FwcFJlZj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3ROb2RlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB4aSh0aGlzLl92aWV3LDAsdm9pZCAwLHZvaWQgMCx0PVtdKSx0O3ZhciB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9KDEyOCZ0aGlzLl92aWV3LnN0YXRlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tYXJrRm9yQ2hlY2s9ZnVuY3Rpb24oKXt1aSh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5zdGF0ZSY9LTV9LHQucHJvdG90eXBlLmRldGVjdENoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl92aWV3LnJvb3QucmVuZGVyZXJGYWN0b3J5O3QuYmVnaW4mJnQuYmVnaW4oKTt0cnl7WW4uY2hlY2tBbmRVcGRhdGVWaWV3KHRoaXMuX3ZpZXcpfWZpbmFsbHl7dC5lbmQmJnQuZW5kKCl9fSx0LnByb3RvdHlwZS5jaGVja05vQ2hhbmdlcz1mdW5jdGlvbigpe1luLmNoZWNrTm9DaGFuZ2VzVmlldyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlfD00fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fdmlldy5kaXNwb3NhYmxlc3x8KHRoaXMuX3ZpZXcuZGlzcG9zYWJsZXM9W10pLHRoaXMuX3ZpZXcuZGlzcG9zYWJsZXMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2FwcFJlZj90aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTp0aGlzLl92aWV3Q29udGFpbmVyUmVmJiZ0aGlzLl92aWV3Q29udGFpbmVyUmVmLmRldGFjaCh0aGlzLl92aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcykpLFluLmRlc3Ryb3lWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2hGcm9tQXBwUmVmPWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmPW51bGwsV2kodGhpcy5fdmlldyksWW4uZGlydHlQYXJlbnRRdWVyaWVzKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5hdHRhY2hUb0FwcFJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl92aWV3Q29udGFpbmVyUmVmKXRocm93IG5ldyBFcnJvcigiVGhpcyB2aWV3IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBWaWV3Q29udGFpbmVyISIpO3RoaXMuX2FwcFJlZj10fSx0LnByb3RvdHlwZS5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWY9ZnVuY3Rpb24odCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBFcnJvcigiVGhpcyB2aWV3IGlzIGFscmVhZHkgYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIEFwcGxpY2F0aW9uUmVmISIpO3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dH0sdH0oKTtmdW5jdGlvbiBvcih0LGUpe3JldHVybiBuZXcgYXIodCxlKX12YXIgYXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fcGFyZW50Vmlldz1lLGkuX2RlZj1uLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcnIoWW4uY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLHRoaXMuX2RlZi5lbGVtZW50LnRlbXBsYXRlLHQpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlbGVtZW50UmVmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDZShIbih0aGlzLl9wYXJlbnRWaWV3LHRoaXMuX2RlZi5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KEFlKTtmdW5jdGlvbiBzcih0LGUpe3JldHVybiBuZXcgdXIodCxlKX12YXIgdXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52aWV3PXQsdGhpcy5lbERlZj1lfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9UC5USFJPV19JRl9OT1RfRk9VTkQpLFluLnJlc29sdmVEZXAodGhpcy52aWV3LHRoaXMuZWxEZWYsISF0aGlzLmVsRGVmJiYwIT0oMzM1NTQ0MzImdGhpcy5lbERlZi5mbGFncykse2ZsYWdzOjAsdG9rZW46dCx0b2tlbktleTpKbih0KX0sZSl9LHR9KCk7ZnVuY3Rpb24gbHIodCxlKXt2YXIgbj10LmRlZi5ub2Rlc1tlXTtpZigxJm4uZmxhZ3Mpe3ZhciBpPUhuKHQsbi5ub2RlSW5kZXgpO3JldHVybiBuLmVsZW1lbnQudGVtcGxhdGU/aS50ZW1wbGF0ZTppLnJlbmRlckVsZW1lbnR9aWYoMiZuLmZsYWdzKXJldHVybiBVbih0LG4ubm9kZUluZGV4KS5yZW5kZXJUZXh0O2lmKDIwMjQwJm4uZmxhZ3MpcmV0dXJuIHFuKHQsbi5ub2RlSW5kZXgpLmluc3RhbmNlO3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBzdGF0ZTogcmVhZCBub2RlVmFsdWUgZm9yIG5vZGUgaW5kZXggIitlKX1mdW5jdGlvbiBjcih0KXtyZXR1cm4gbmV3IGZyKHQucmVuZGVyZXIpfXZhciBmcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10fXJldHVybiB0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChpLmMpKFRpKGUpLDIpLHI9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5bMV0sblswXSk7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxyKSxyfSx0LnByb3RvdHlwZS5jcmVhdGVWaWV3Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdC5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGVBbmNob3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KCIiKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQoZSk7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxuKSxufSx0LnByb3RvdHlwZS5wcm9qZWN0Tm9kZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZVtuXSl9LHQucHJvdG90eXBlLmF0dGFjaFZpZXdBZnRlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCksaT10aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShuLGVbcl0saSl9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV0saT10aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobik7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChpLG4pfX0sdC5wcm90b3R5cGUuZGVzdHJveVZpZXc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlKGVbbl0pfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLmxpc3Rlbkdsb2JhbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9T2JqZWN0KGkuYykoVGkoZSksMiksbz1yWzBdLGE9clsxXTtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsYSxuLG8pOnRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsYSxvKX0sdC5wcm90b3R5cGUuc2V0QmluZGluZ0RlYnVnSW5mbz1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5zZXRFbGVtZW50Q2xhc3M9ZnVuY3Rpb24odCxlLG4pe24/dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpOnRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4pOnRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlKX0sdC5wcm90b3R5cGUuaW52b2tlRWxlbWVudE1ldGhvZD1mdW5jdGlvbih0LGUsbil7dFtlXS5hcHBseSh0LG4pfSx0LnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZW5kZXJlci5hbmltYXRlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQhIil9LHR9KCk7ZnVuY3Rpb24gaHIodCxlLG4saSl7cmV0dXJuIG5ldyBkcih0LGUsbixpKX12YXIgZHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX21vZHVsZVR5cGU9dCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPW4sdGhpcy5fZGVmPWksdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5pbmplY3Rvcj10aGlzLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9kZWYsbj10Ll9wcm92aWRlcnM9bmV3IEFycmF5KGUucHJvdmlkZXJzLmxlbmd0aCksaT0wO2k8ZS5wcm92aWRlcnMubGVuZ3RoO2krKyl7dmFyIHI9ZS5wcm92aWRlcnNbaV07NDA5NiZyLmZsYWdzfHx2b2lkIDA9PT1uW2ldJiYobltpXT1HaSh0LHIpKX19KHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPVAuVEhST1dfSUZfTk9UX0ZPVU5EKSx2b2lkIDA9PT1uJiYobj0wKTt2YXIgaT0wO3JldHVybiA0Jm4/aXw9MToyJm4mJihpfD00KSxxaSh0aGlzLHt0b2tlbjp0LHRva2VuS2V5OkpuKHQpLGZsYWdzOml9LGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuX21vZHVsZVR5cGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KHp0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIG5nIG1vZHVsZSAiK3godGhpcy5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrIiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4iKTt0aGlzLl9kZXN0cm95ZWQ9ITAsZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5fZGVmLGk9bmV3IFNldCxyPTA7cjxuLnByb3ZpZGVycy5sZW5ndGg7cisrKWlmKDEzMTA3MiZuLnByb3ZpZGVyc1tyXS5mbGFncyl7dmFyIG89dC5fcHJvdmlkZXJzW3JdO2lmKG8mJm8hPT1MaSl7dmFyIGE9by5uZ09uRGVzdHJveTsiZnVuY3Rpb24iIT10eXBlb2YgYXx8aS5oYXMobyl8fChhLmFwcGx5KG8pLGkuYWRkKG8pKX19fSh0aGlzKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKHQpfSx0fSgpLHByPUpuKGZ1bmN0aW9uKCl7fSksbXI9Sm4oeGUpLHlyPUpuKENlKSx2cj1KbihJZSksZ3I9Sm4oQWUpLGJyPUpuKFJlKSxfcj1KbihQKSx3cj1KbihSKTtmdW5jdGlvbiB4cih0LGUsbixyLG8sYSxzLHUpe3ZhciBsPVtdO2lmKHMpZm9yKHZhciBjIGluIHMpe3ZhciBmPU9iamVjdChpLmMpKHNbY10sMik7bFtmWzBdXT17ZmxhZ3M6OCxuYW1lOmMsbm9uTWluaWZpZWROYW1lOmZbMV0sbnM6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19dmFyIGg9W107aWYodSlmb3IodmFyIGQgaW4gdSloLnB1c2goe3R5cGU6MSxwcm9wTmFtZTpkLHRhcmdldDpudWxsLGV2ZW50TmFtZTp1W2RdfSk7cmV0dXJuIEVyKHQsZXw9MTYzODQsbixyLG8sbyxhLGwsaCl9ZnVuY3Rpb24gQ3IodCxlLG4pe3JldHVybiBFcigtMSx0fD0xNixudWxsLDAsZSxlLG4pfWZ1bmN0aW9uIFNyKHQsZSxuLGkscil7cmV0dXJuIEVyKC0xLHQsZSwwLG4saSxyKX1mdW5jdGlvbiBFcih0LGUsbixpLHIsbyxhLHMsdSl7dmFyIGw9dmkobiksYz1sLm1hdGNoZWRRdWVyaWVzLGY9bC5yZWZlcmVuY2VzLGg9bC5tYXRjaGVkUXVlcnlJZHM7dXx8KHU9W10pLHN8fChzPVtdKSxvPVMobyk7dmFyIGQ9Z2koYSx4KHIpKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpjLG1hdGNoZWRRdWVyeUlkczpoLHJlZmVyZW5jZXM6ZixuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OmksYmluZGluZ3M6cyxiaW5kaW5nRmxhZ3M6amkocyksb3V0cHV0czp1LGVsZW1lbnQ6bnVsbCxwcm92aWRlcjp7dG9rZW46cix2YWx1ZTpvLGRlcHM6ZH0sdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIEFyKHQsZSl9ZnVuY3Rpb24ga3IodCxlKXtmb3IodmFyIG49dDtuLnBhcmVudCYmIXBpKG4pOyluPW4ucGFyZW50O3JldHVybiBJcihuLnBhcmVudCxoaShuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gVHIodCxlKXt2YXIgbj1Jcih0LGUucGFyZW50LCgzMjc2OCZlLmZsYWdzKT4wLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKTtpZihlLm91dHB1dHMubGVuZ3RoKWZvcih2YXIgaT0wO2k8ZS5vdXRwdXRzLmxlbmd0aDtpKyspe3ZhciByPWUub3V0cHV0c1tpXSxvPW5bci5wcm9wTmFtZV0uc3Vic2NyaWJlKGpyKHQsZS5wYXJlbnQubm9kZUluZGV4LHIuZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxlc1tlLm91dHB1dEluZGV4K2ldPW8udW5zdWJzY3JpYmUuYmluZChvKX1yZXR1cm4gbn1mdW5jdGlvbiBqcih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBjaSh0LGUsbixpKX19ZnVuY3Rpb24gQXIodCxlKXt2YXIgbj0oODE5MiZlLmZsYWdzKT4wLHI9ZS5wcm92aWRlcjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOnJldHVybiBJcih0LGUucGFyZW50LG4sci52YWx1ZSxyLmRlcHMpO2Nhc2UgMTAyNDpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvKXt2YXIgYT1vLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiByKCk7Y2FzZSAxOnJldHVybiByKE1yKHQsZSxuLG9bMF0pKTtjYXNlIDI6cmV0dXJuIHIoTXIodCxlLG4sb1swXSksTXIodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gcihNcih0LGUsbixvWzBdKSxNcih0LGUsbixvWzFdKSxNcih0LGUsbixvWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHM9QXJyYXkoYSksdT0wO3U8YTt1Kyspc1t1XT1Ncih0LGUsbixvW3VdKTtyZXR1cm4gci5hcHBseSh2b2lkIDAsT2JqZWN0KGkuZCkocykpfX0odCxlLnBhcmVudCxuLHIudmFsdWUsci5kZXBzKTtjYXNlIDIwNDg6cmV0dXJuIE1yKHQsZS5wYXJlbnQsbixyLmRlcHNbMF0pO2Nhc2UgMjU2OnJldHVybiByLnZhbHVlfX1mdW5jdGlvbiBJcih0LGUsbixyLG8pe3ZhciBhPW8ubGVuZ3RoO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIG5ldyByO2Nhc2UgMTpyZXR1cm4gbmV3IHIoTXIodCxlLG4sb1swXSkpO2Nhc2UgMjpyZXR1cm4gbmV3IHIoTXIodCxlLG4sb1swXSksTXIodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IHIoTXIodCxlLG4sb1swXSksTXIodCxlLG4sb1sxXSksTXIodCxlLG4sb1syXSkpO2RlZmF1bHQ6Zm9yKHZhciBzPW5ldyBBcnJheShhKSx1PTA7dTxhO3UrKylzW3VdPU1yKHQsZSxuLG9bdV0pO3JldHVybiBuZXcoci5iaW5kLmFwcGx5KHIsT2JqZWN0KGkuZCkoW3ZvaWQgMF0scykpKX19dmFyIFJyPXt9O2Z1bmN0aW9uIE1yKHQsZSxuLGkscil7aWYodm9pZCAwPT09ciYmKHI9UC5USFJPV19JRl9OT1RfRk9VTkQpLDgmaS5mbGFncylyZXR1cm4gaS50b2tlbjt2YXIgbz10OzImaS5mbGFncyYmKHI9bnVsbCk7dmFyIGE9aS50b2tlbktleTthPT09YnImJihuPSEoIWV8fCFlLmVsZW1lbnQuY29tcG9uZW50VmlldykpLGUmJjEmaS5mbGFncyYmKG49ITEsZT1lLnBhcmVudCk7Zm9yKHZhciBzPXQ7czspe2lmKGUpc3dpdGNoKGEpe2Nhc2UgcHI6cmV0dXJuIGNyKFByKHMsZSxuKSk7Y2FzZSBtcjpyZXR1cm4gUHIocyxlLG4pLnJlbmRlcmVyO2Nhc2UgeXI6cmV0dXJuIG5ldyBDZShIbihzLGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIHZyOnJldHVybiBIbihzLGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgZ3I6aWYoZS5lbGVtZW50LnRlbXBsYXRlKXJldHVybiBIbihzLGUubm9kZUluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIGJyOnJldHVybiBpcihQcihzLGUsbikpO2Nhc2UgX3I6Y2FzZSB3cjpyZXR1cm4gc3IocyxlKTtkZWZhdWx0OnZhciB1PShuP2UuZWxlbWVudC5hbGxQcm92aWRlcnM6ZS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycylbYV07aWYodSl7dmFyIGw9cW4ocyx1Lm5vZGVJbmRleCk7cmV0dXJuIGx8fChsPXtpbnN0YW5jZTpBcihzLHUpfSxzLm5vZGVzW3Uubm9kZUluZGV4XT1sKSxsLmluc3RhbmNlfX1uPXBpKHMpLGU9aGkocykscz1zLnBhcmVudCw0JmkuZmxhZ3MmJihzPW51bGwpfXZhciBjPW8ucm9vdC5pbmplY3Rvci5nZXQoaS50b2tlbixScik7cmV0dXJuIGMhPT1Scnx8cj09PVJyP2M6by5yb290Lm5nTW9kdWxlLmluamVjdG9yLmdldChpLnRva2VuLHIpfWZ1bmN0aW9uIFByKHQsZSxuKXt2YXIgaTtpZihuKWk9SG4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldztlbHNlIGZvcihpPXQ7aS5wYXJlbnQmJiFwaShpKTspaT1pLnBhcmVudDtyZXR1cm4gaX1mdW5jdGlvbiBEcih0LGUsbixpLHIsbyl7aWYoMzI3Njgmbi5mbGFncyl7dmFyIGE9SG4odCxuLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7MiZhLmRlZi5mbGFncyYmKGEuc3RhdGV8PTgpfWlmKGUuaW5zdGFuY2Vbbi5iaW5kaW5nc1tpXS5uYW1lXT1yLDUyNDI4OCZuLmZsYWdzKXtvPW98fHt9O3ZhciBzPVVlLnVud3JhcCh0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtpXSk7b1tuLmJpbmRpbmdzW2ldLm5vbk1pbmlmaWVkTmFtZV09bmV3IEhlKHMsciwwIT0oMiZ0LnN0YXRlKSl9cmV0dXJuIHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K2ldPXIsb31mdW5jdGlvbiBOcih0LGUpe2lmKHQuZGVmLm5vZGVGbGFncyZlKWZvcih2YXIgbj10LmRlZi5ub2RlcyxpPTAscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdLGE9by5wYXJlbnQ7Zm9yKCFhJiZvLmZsYWdzJmUmJkxyKHQscixvLmZsYWdzJmUsaSsrKSwwPT0oby5jaGlsZEZsYWdzJmUpJiYocis9by5jaGlsZENvdW50KTthJiYxJmEuZmxhZ3MmJnI9PT1hLm5vZGVJbmRleCthLmNoaWxkQ291bnQ7KWEuZGlyZWN0Q2hpbGRGbGFncyZlJiYoaT1Gcih0LGEsZSxpKSksYT1hLnBhcmVudH19ZnVuY3Rpb24gRnIodCxlLG4saSl7Zm9yKHZhciByPWUubm9kZUluZGV4KzE7cjw9ZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50O3IrKyl7dmFyIG89dC5kZWYubm9kZXNbcl07by5mbGFncyZuJiZMcih0LHIsby5mbGFncyZuLGkrKykscis9by5jaGlsZENvdW50fXJldHVybiBpfWZ1bmN0aW9uIExyKHQsZSxuLGkpe3ZhciByPXFuKHQsZSk7aWYocil7dmFyIG89ci5pbnN0YW5jZTtvJiYoWW4uc2V0Q3VycmVudE5vZGUodCxlKSwxMDQ4NTc2Jm4mJkJuKHQsNTEyLGkpJiZvLm5nQWZ0ZXJDb250ZW50SW5pdCgpLDIwOTcxNTImbiYmby5uZ0FmdGVyQ29udGVudENoZWNrZWQoKSw0MTk0MzA0Jm4mJkJuKHQsNzY4LGkpJiZvLm5nQWZ0ZXJWaWV3SW5pdCgpLDgzODg2MDgmbiYmby5uZ0FmdGVyVmlld0NoZWNrZWQoKSwxMzEwNzImbiYmby5uZ09uRGVzdHJveSgpKX19ZnVuY3Rpb24gVnIodCxlLG4pe3ZhciBpPVtdO2Zvcih2YXIgciBpbiBuKWkucHVzaCh7cHJvcE5hbWU6cixiaW5kaW5nVHlwZTpuW3JdfSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDotMSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG5nQ29udGVudEluZGV4Oi0xLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sY2hpbGRDb3VudDowLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5OntpZDplLGZpbHRlcklkOnlpKGUpLGJpbmRpbmdzOml9LG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiB6cih0KXtmb3IodmFyIGU9dC5kZWYubm9kZU1hdGNoZWRRdWVyaWVzO3QucGFyZW50JiZtaSh0KTspe3ZhciBuPXQucGFyZW50Tm9kZURlZjt0PXQucGFyZW50O2Zvcih2YXIgaT1uLm5vZGVJbmRleCtuLmNoaWxkQ291bnQscj0wO3I8PWk7cisrKTY3MTA4ODY0JihvPXQuZGVmLm5vZGVzW3JdKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJihvLnF1ZXJ5LmZpbHRlcklkJmUpPT09by5xdWVyeS5maWx0ZXJJZCYmUW4odCxyKS5zZXREaXJ0eSgpLCEoMSZvLmZsYWdzJiZyK28uY2hpbGRDb3VudDxuLm5vZGVJbmRleCkmJjY3MTA4ODY0Jm8uY2hpbGRGbGFncyYmNTM2ODcwOTEyJm8uY2hpbGRGbGFnc3x8KHIrPW8uY2hpbGRDb3VudCl9aWYoMTM0MjE3NzI4JnQuZGVmLm5vZGVGbGFncylmb3Iocj0wO3I8dC5kZWYubm9kZXMubGVuZ3RoO3IrKyl7dmFyIG87MTM0MjE3NzI4JihvPXQuZGVmLm5vZGVzW3JdKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJlFuKHQscikuc2V0RGlydHkoKSxyKz1vLmNoaWxkQ291bnR9fWZ1bmN0aW9uIEJyKHQsZSl7dmFyIG49UW4odCxlLm5vZGVJbmRleCk7aWYobi5kaXJ0eSl7dmFyIGkscj12b2lkIDA7aWYoNjcxMDg4NjQmZS5mbGFncyl7dmFyIG89ZS5wYXJlbnQucGFyZW50O3I9VXIodCxvLm5vZGVJbmRleCxvLm5vZGVJbmRleCtvLmNoaWxkQ291bnQsZS5xdWVyeSxbXSksaT1xbih0LGUucGFyZW50Lm5vZGVJbmRleCkuaW5zdGFuY2V9ZWxzZSAxMzQyMTc3MjgmZS5mbGFncyYmKHI9VXIodCwwLHQuZGVmLm5vZGVzLmxlbmd0aC0xLGUucXVlcnksW10pLGk9dC5jb21wb25lbnQpO24ucmVzZXQocik7Zm9yKHZhciBhPWUucXVlcnkuYmluZGluZ3Mscz0hMSx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBsPWFbdV0sYz12b2lkIDA7c3dpdGNoKGwuYmluZGluZ1R5cGUpe2Nhc2UgMDpjPW4uZmlyc3Q7YnJlYWs7Y2FzZSAxOmM9bixzPSEwfWlbbC5wcm9wTmFtZV09Y31zJiZuLm5vdGlmeU9uQ2hhbmdlcygpfX1mdW5jdGlvbiBVcih0LGUsbixpLHIpe2Zvcih2YXIgbz1lO288PW47bysrKXt2YXIgYT10LmRlZi5ub2Rlc1tvXSxzPWEubWF0Y2hlZFF1ZXJpZXNbaS5pZF07aWYobnVsbCE9cyYmci5wdXNoKEhyKHQsYSxzKSksMSZhLmZsYWdzJiZhLmVsZW1lbnQudGVtcGxhdGUmJihhLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzJmkuZmlsdGVySWQpPT09aS5maWx0ZXJJZCl7dmFyIHU9SG4odCxvKTtpZigoYS5jaGlsZE1hdGNoZWRRdWVyaWVzJmkuZmlsdGVySWQpPT09aS5maWx0ZXJJZCYmKFVyKHQsbysxLG8rYS5jaGlsZENvdW50LGksciksbys9YS5jaGlsZENvdW50KSwxNjc3NzIxNiZhLmZsYWdzKWZvcih2YXIgbD11LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgZj1sW2NdLGg9ZmkoZik7aCYmaD09PXUmJlVyKGYsMCxmLmRlZi5ub2Rlcy5sZW5ndGgtMSxpLHIpfXZhciBkPXUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO2lmKGQpZm9yKGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIHA9ZFtjXTtVcihwLDAscC5kZWYubm9kZXMubGVuZ3RoLTEsaSxyKX19KGEuY2hpbGRNYXRjaGVkUXVlcmllcyZpLmZpbHRlcklkKSE9PWkuZmlsdGVySWQmJihvKz1hLmNoaWxkQ291bnQpfXJldHVybiByfWZ1bmN0aW9uIEhyKHQsZSxuKXtpZihudWxsIT1uKXN3aXRjaChuKXtjYXNlIDE6cmV0dXJuIEhuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAwOnJldHVybiBuZXcgQ2UoSG4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Y2FzZSAyOnJldHVybiBIbih0LGUubm9kZUluZGV4KS50ZW1wbGF0ZTtjYXNlIDM6cmV0dXJuIEhuKHQsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXI7Y2FzZSA0OnJldHVybiBxbih0LGUubm9kZUluZGV4KS5pbnN0YW5jZX19ZnVuY3Rpb24gcXIodCxlKXtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4Oi0xLGZsYWdzOjgsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDp0LGNoaWxkQ291bnQ6MCxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDp7aW5kZXg6ZX19fWZ1bmN0aW9uIEdyKHQsZSxuKXt2YXIgaT1iaSh0LGUsbik7aSYmU2kodCxuLm5nQ29udGVudC5pbmRleCwxLGksbnVsbCx2b2lkIDApfWZ1bmN0aW9uIFFyKHQsZSl7cmV0dXJuIFpyKDEyOCx0LG5ldyBBcnJheShlKzEpKX1mdW5jdGlvbiBZcih0LGUpe3JldHVybiBacigzMix0LG5ldyBBcnJheShlKSl9ZnVuY3Rpb24gV3IodCxlKXtmb3IodmFyIG49T2JqZWN0LmtleXMoZSksaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpO28rKyl7dmFyIGE9bltvXTtyW2VbYV1dPWF9cmV0dXJuIFpyKDY0LHQscil9ZnVuY3Rpb24gWnIodCxlLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkobi5sZW5ndGgpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTtpW3JdPXtmbGFnczo4LG5hbWU6byxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpvLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX1yZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OmUsZmxhZ3M6dCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4Oi0xLGNoaWxkQ291bnQ6MCxiaW5kaW5nczppLGJpbmRpbmdGbGFnczpqaShpKSxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBLcih0LGUsbil7Zm9yKHZhciBpPW5ldyBBcnJheShuLmxlbmd0aC0xKSxyPTE7cjxuLmxlbmd0aDtyKyspaVtyLTFdPXtmbGFnczo4LG5hbWU6bnVsbCxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpuW3JdfTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6MixjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OmUsY2hpbGRDb3VudDowLGJpbmRpbmdzOmksYmluZGluZ0ZsYWdzOjgsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0OntwcmVmaXg6blswXX0scXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gWHIodCxlLG4pe3ZhciBpLHI9dC5yZW5kZXJlcjtpPXIuY3JlYXRlVGV4dChuLnRleHQucHJlZml4KTt2YXIgbz1iaSh0LGUsbik7cmV0dXJuIG8mJnIuYXBwZW5kQ2hpbGQobyxpKSx7cmVuZGVyVGV4dDppfX1mdW5jdGlvbiAkcih0LGUpe3JldHVybihudWxsIT10P3QudG9TdHJpbmcoKToiIikrZS5zdWZmaXh9ZnVuY3Rpb24gSnIodCxlLG4saSl7Zm9yKHZhciByPTAsbz0wLGE9MCxzPTAsdT0wLGw9bnVsbCxjPW51bGwsZj0hMSxoPSExLGQ9bnVsbCxwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBtPWVbcF07aWYobS5ub2RlSW5kZXg9cCxtLnBhcmVudD1sLG0uYmluZGluZ0luZGV4PXIsbS5vdXRwdXRJbmRleD1vLG0ucmVuZGVyUGFyZW50PWMsYXw9bS5mbGFncyx1fD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQpe3ZhciB5PW0uZWxlbWVudDt5LnB1YmxpY1Byb3ZpZGVycz1sP2wuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM6T2JqZWN0LmNyZWF0ZShudWxsKSx5LmFsbFByb3ZpZGVycz15LnB1YmxpY1Byb3ZpZGVycyxmPSExLGg9ITEsbS5lbGVtZW50LnRlbXBsYXRlJiYodXw9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyl9aWYoZW8obCxtLGUubGVuZ3RoKSxyKz1tLmJpbmRpbmdzLmxlbmd0aCxvKz1tLm91dHB1dHMubGVuZ3RoLCFjJiYzJm0uZmxhZ3MmJihkPW0pLDIwMjI0Jm0uZmxhZ3Mpe2Z8fChmPSEwLGwuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZShsLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSxsLmVsZW1lbnQuYWxsUHJvdmlkZXJzPWwuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpO3ZhciB2PTAhPSgzMjc2OCZtLmZsYWdzKTswPT0oODE5MiZtLmZsYWdzKXx8dj9sLmVsZW1lbnQucHVibGljUHJvdmlkZXJzW0puKG0ucHJvdmlkZXIudG9rZW4pXT1tOihofHwoaD0hMCxsLmVsZW1lbnQuYWxsUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUobC5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycykpLGwuZWxlbWVudC5hbGxQcm92aWRlcnNbSm4obS5wcm92aWRlci50b2tlbildPW0pLHYmJihsLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXI9bSl9aWYobD8obC5jaGlsZEZsYWdzfD1tLmZsYWdzLGwuZGlyZWN0Q2hpbGRGbGFnc3w9bS5mbGFncyxsLmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PW0ubWF0Y2hlZFF1ZXJ5SWRzLG0uZWxlbWVudCYmbS5lbGVtZW50LnRlbXBsYXRlJiYobC5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKSk6c3w9bS5mbGFncyxtLmNoaWxkQ291bnQ+MClsPW0sdG8obSl8fChjPW0pO2Vsc2UgZm9yKDtsJiZwPT09bC5ub2RlSW5kZXgrbC5jaGlsZENvdW50Oyl7dmFyIGc9bC5wYXJlbnQ7ZyYmKGcuY2hpbGRGbGFnc3w9bC5jaGlsZEZsYWdzLGcuY2hpbGRNYXRjaGVkUXVlcmllc3w9bC5jaGlsZE1hdGNoZWRRdWVyaWVzKSxjPShsPWcpJiZ0byhsKT9sLnJlbmRlclBhcmVudDpsfX1yZXR1cm57ZmFjdG9yeTpudWxsLG5vZGVGbGFnczphLHJvb3ROb2RlRmxhZ3M6cyxub2RlTWF0Y2hlZFF1ZXJpZXM6dSxmbGFnczp0LG5vZGVzOmUsdXBkYXRlRGlyZWN0aXZlczpufHxYbix1cGRhdGVSZW5kZXJlcjppfHxYbixoYW5kbGVFdmVudDpmdW5jdGlvbih0LG4saSxyKXtyZXR1cm4gZVtuXS5lbGVtZW50LmhhbmRsZUV2ZW50KHQsaSxyKX0sYmluZGluZ0NvdW50OnIsb3V0cHV0Q291bnQ6byxsYXN0UmVuZGVyUm9vdE5vZGU6ZH19ZnVuY3Rpb24gdG8odCl7cmV0dXJuIDAhPSgxJnQuZmxhZ3MpJiZudWxsPT09dC5lbGVtZW50Lm5hbWV9ZnVuY3Rpb24gZW8odCxlLG4pe3ZhciBpPWUuZWxlbWVudCYmZS5lbGVtZW50LnRlbXBsYXRlO2lmKGkpe2lmKCFpLmxhc3RSZW5kZXJSb290Tm9kZSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IEVtYmVkZGVkIHRlbXBsYXRlcyB3aXRob3V0IG5vZGVzIGFyZSBub3QgYWxsb3dlZCEiKTtpZihpLmxhc3RSZW5kZXJSb290Tm9kZSYmMTY3NzcyMTYmaS5sYXN0UmVuZGVyUm9vdE5vZGUuZmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBMYXN0IHJvb3Qgbm9kZSBvZiBhIHRlbXBsYXRlIGNhbid0IGhhdmUgZW1iZWRkZWQgdmlld3MsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZigyMDIyNCZlLmZsYWdzJiYwPT0oMSYodD90LmZsYWdzOjApKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFN0YXRpY1Byb3ZpZGVyL0RpcmVjdGl2ZSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGVsZW1lbnRzIG9yIGFuY2hvcnMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZihlLnF1ZXJ5KXtpZig2NzEwODg2NCZlLmZsYWdzJiYoIXR8fDA9PSgxNjM4NCZ0LmZsYWdzKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBDb250ZW50IFF1ZXJ5IG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZGlyZWN0aXZlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKDEzNDIxNzcyOCZlLmZsYWdzJiZ0KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogVmlldyBRdWVyeSBub2RlcyBoYXZlIHRvIGJlIHRvcCBsZXZlbCBub2RlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKGUuY2hpbGRDb3VudCl7dmFyIHI9dD90Lm5vZGVJbmRleCt0LmNoaWxkQ291bnQ6bi0xO2lmKGUubm9kZUluZGV4PD1yJiZlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ+cil0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGNoaWxkQ291bnQgb2Ygbm9kZSBsZWFkcyBvdXRzaWRlIG9mIHBhcmVudCwgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfX1mdW5jdGlvbiBubyh0LGUsbixpKXt2YXIgcj1vbyh0LnJvb3QsdC5yZW5kZXJlcix0LGUsbik7cmV0dXJuIGFvKHIsdC5jb21wb25lbnQsaSksc28ocikscn1mdW5jdGlvbiBpbyh0LGUsbil7dmFyIGk9b28odCx0LnJlbmRlcmVyLG51bGwsbnVsbCxlKTtyZXR1cm4gYW8oaSxuLG4pLHNvKGkpLGl9ZnVuY3Rpb24gcm8odCxlLG4saSl7dmFyIHIsbz1lLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlO3JldHVybiByPW8/dC5yb290LnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihpLG8pOnQucm9vdC5yZW5kZXJlcixvbyh0LnJvb3Qscix0LGUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlcixuKX1mdW5jdGlvbiBvbyh0LGUsbixpLHIpe3ZhciBvPW5ldyBBcnJheShyLm5vZGVzLmxlbmd0aCksYT1yLm91dHB1dENvdW50P25ldyBBcnJheShyLm91dHB1dENvdW50KTpudWxsO3JldHVybntkZWY6cixwYXJlbnQ6bix2aWV3Q29udGFpbmVyUGFyZW50Om51bGwscGFyZW50Tm9kZURlZjppLGNvbnRleHQ6bnVsbCxjb21wb25lbnQ6bnVsbCxub2RlczpvLHN0YXRlOjEzLHJvb3Q6dCxyZW5kZXJlcjplLG9sZFZhbHVlczpuZXcgQXJyYXkoci5iaW5kaW5nQ291bnQpLGRpc3Bvc2FibGVzOmEsaW5pdEluZGV4Oi0xfX1mdW5jdGlvbiBhbyh0LGUsbil7dC5jb21wb25lbnQ9ZSx0LmNvbnRleHQ9bn1mdW5jdGlvbiBzbyh0KXt2YXIgZTtwaSh0KSYmKGU9SG4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLnBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Zvcih2YXIgbj10LmRlZixpPXQubm9kZXMscj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgbz1uLm5vZGVzW3JdO1luLnNldEN1cnJlbnROb2RlKHQscik7dmFyIGE9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmby5mbGFncyl7Y2FzZSAxOnZhciBzPVBpKHQsZSxvKSx1PXZvaWQgMDtpZigzMzU1NDQzMiZvLmZsYWdzKXt2YXIgbD13aShvLmVsZW1lbnQuY29tcG9uZW50Vmlldyk7dT1Zbi5jcmVhdGVDb21wb25lbnRWaWV3KHQsbyxsLHMpfURpKHQsdSxvLHMpLGE9e3JlbmRlckVsZW1lbnQ6cyxjb21wb25lbnRWaWV3OnUsdmlld0NvbnRhaW5lcjpudWxsLHRlbXBsYXRlOm8uZWxlbWVudC50ZW1wbGF0ZT9vcih0LG8pOnZvaWQgMH0sMTY3NzcyMTYmby5mbGFncyYmKGEudmlld0NvbnRhaW5lcj1lcih0LG8sYSkpO2JyZWFrO2Nhc2UgMjphPVhyKHQsZSxvKTticmVhaztjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgMjU2OihhPWlbcl0pfHw0MDk2Jm8uZmxhZ3N8fChhPXtpbnN0YW5jZTpPcih0LG8pfSk7YnJlYWs7Y2FzZSAxNjphPXtpbnN0YW5jZTprcih0LG8pfTticmVhaztjYXNlIDE2Mzg0OihhPWlbcl0pfHwoYT17aW5zdGFuY2U6VHIodCxvKX0pLDMyNzY4Jm8uZmxhZ3MmJmFvKEhuKHQsby5wYXJlbnQubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEuaW5zdGFuY2UsYS5pbnN0YW5jZSk7YnJlYWs7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmE9e3ZhbHVlOnZvaWQgMH07YnJlYWs7Y2FzZSA2NzEwODg2NDpjYXNlIDEzNDIxNzcyODphPW5ldyBFZTticmVhaztjYXNlIDg6R3IodCxlLG8pLGE9dm9pZCAwfWlbcl09YX12byh0LHlvLkNyZWF0ZVZpZXdOb2Rlcyksd28odCwyMDEzMjY1OTIsMjY4NDM1NDU2LDApfWZ1bmN0aW9uIHVvKHQpe2ZvKHQpLFluLnVwZGF0ZURpcmVjdGl2ZXModCwxKSxnbyh0LHlvLkNoZWNrTm9DaGFuZ2VzKSxZbi51cGRhdGVSZW5kZXJlcih0LDEpLHZvKHQseW8uQ2hlY2tOb0NoYW5nZXMpLHQuc3RhdGUmPS05N31mdW5jdGlvbiBsbyh0KXsxJnQuc3RhdGU/KHQuc3RhdGUmPS0yLHQuc3RhdGV8PTIpOnQuc3RhdGUmPS0zLHpuKHQsMCwyNTYpLGZvKHQpLFluLnVwZGF0ZURpcmVjdGl2ZXModCwwKSxnbyh0LHlvLkNoZWNrQW5kVXBkYXRlKSx3byh0LDY3MTA4ODY0LDUzNjg3MDkxMiwwKTt2YXIgZT16bih0LDI1Niw1MTIpO05yKHQsMjA5NzE1MnwoZT8xMDQ4NTc2OjApKSxZbi51cGRhdGVSZW5kZXJlcih0LDApLHZvKHQseW8uQ2hlY2tBbmRVcGRhdGUpLHdvKHQsMTM0MjE3NzI4LDUzNjg3MDkxMiwwKSxOcih0LDgzODg2MDh8KChlPXpuKHQsNTEyLDc2OCkpPzQxOTQzMDQ6MCkpLDImdC5kZWYuZmxhZ3MmJih0LnN0YXRlJj0tOSksdC5zdGF0ZSY9LTk3LHpuKHQsNzY4LDEwMjQpfWZ1bmN0aW9uIGNvKHQsZSxuLHIsbyxhLHMsdSxsLGMsZixoLGQpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixpLHIsbyxhLHMsdSxsLGMsZil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyx1LGwsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLmxlbmd0aCxkPSExO3JldHVybiBoPjAmJkZpKHQsZSwwLG4pJiYoZD0hMCksaD4xJiZGaSh0LGUsMSxpKSYmKGQ9ITApLGg+MiYmRmkodCxlLDIscikmJihkPSEwKSxoPjMmJkZpKHQsZSwzLG8pJiYoZD0hMCksaD40JiZGaSh0LGUsNCxhKSYmKGQ9ITApLGg+NSYmRmkodCxlLDUscykmJihkPSEwKSxoPjYmJkZpKHQsZSw2LHUpJiYoZD0hMCksaD43JiZGaSh0LGUsNyxsKSYmKGQ9ITApLGg+OCYmRmkodCxlLDgsYykmJihkPSEwKSxoPjkmJkZpKHQsZSw5LGYpJiYoZD0hMCksZH0odCxlLG4saSxyLG8sYSxzLHUsbCxjLGYpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzLHUsbCxjLGYpe3ZhciBoPSExLGQ9ZS5iaW5kaW5ncyxwPWQubGVuZ3RoO2lmKHA+MCYmYWkodCxlLDAsbikmJihoPSEwKSxwPjEmJmFpKHQsZSwxLGkpJiYoaD0hMCkscD4yJiZhaSh0LGUsMixyKSYmKGg9ITApLHA+MyYmYWkodCxlLDMsbykmJihoPSEwKSxwPjQmJmFpKHQsZSw0LGEpJiYoaD0hMCkscD41JiZhaSh0LGUsNSxzKSYmKGg9ITApLHA+NiYmYWkodCxlLDYsdSkmJihoPSEwKSxwPjcmJmFpKHQsZSw3LGwpJiYoaD0hMCkscD44JiZhaSh0LGUsOCxjKSYmKGg9ITApLHA+OSYmYWkodCxlLDksZikmJihoPSEwKSxoKXt2YXIgbT1lLnRleHQucHJlZml4O3A+MCYmKG0rPSRyKG4sZFswXSkpLHA+MSYmKG0rPSRyKGksZFsxXSkpLHA+MiYmKG0rPSRyKHIsZFsyXSkpLHA+MyYmKG0rPSRyKG8sZFszXSkpLHA+NCYmKG0rPSRyKGEsZFs0XSkpLHA+NSYmKG0rPSRyKHMsZFs1XSkpLHA+NiYmKG0rPSRyKHUsZFs2XSkpLHA+NyYmKG0rPSRyKGwsZFs3XSkpLHA+OCYmKG0rPSRyKGMsZFs4XSkpLHA+OSYmKG0rPSRyKGYsZFs5XSkpO3ZhciB5PVVuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZSh5LG0pfXJldHVybiBofSh0LGUsbixpLHIsbyxhLHMsdSxsLGMsZik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzLHUsbCxjLGYpe3ZhciBoPXFuKHQsZS5ub2RlSW5kZXgpLGQ9aC5pbnN0YW5jZSxwPSExLG09dm9pZCAwLHk9ZS5iaW5kaW5ncy5sZW5ndGg7cmV0dXJuIHk+MCYmb2kodCxlLDAsbikmJihwPSEwLG09RHIodCxoLGUsMCxuLG0pKSx5PjEmJm9pKHQsZSwxLGkpJiYocD0hMCxtPURyKHQsaCxlLDEsaSxtKSkseT4yJiZvaSh0LGUsMixyKSYmKHA9ITAsbT1Ecih0LGgsZSwyLHIsbSkpLHk+MyYmb2kodCxlLDMsbykmJihwPSEwLG09RHIodCxoLGUsMyxvLG0pKSx5PjQmJm9pKHQsZSw0LGEpJiYocD0hMCxtPURyKHQsaCxlLDQsYSxtKSkseT41JiZvaSh0LGUsNSxzKSYmKHA9ITAsbT1Ecih0LGgsZSw1LHMsbSkpLHk+NiYmb2kodCxlLDYsdSkmJihwPSEwLG09RHIodCxoLGUsNix1LG0pKSx5PjcmJm9pKHQsZSw3LGwpJiYocD0hMCxtPURyKHQsaCxlLDcsbCxtKSkseT44JiZvaSh0LGUsOCxjKSYmKHA9ITAsbT1Ecih0LGgsZSw4LGMsbSkpLHk+OSYmb2kodCxlLDksZikmJihwPSEwLG09RHIodCxoLGUsOSxmLG0pKSxtJiZkLm5nT25DaGFuZ2VzKG0pLDY1NTM2JmUuZmxhZ3MmJkJuKHQsMjU2LGUubm9kZUluZGV4KSYmZC5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZkLm5nRG9DaGVjaygpLHB9KHQsZSxuLGkscixvLGEscyx1LGwsYyxmKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyx1LGwsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLGQ9ITEscD1oLmxlbmd0aDtpZihwPjAmJmFpKHQsZSwwLG4pJiYoZD0hMCkscD4xJiZhaSh0LGUsMSxpKSYmKGQ9ITApLHA+MiYmYWkodCxlLDIscikmJihkPSEwKSxwPjMmJmFpKHQsZSwzLG8pJiYoZD0hMCkscD40JiZhaSh0LGUsNCxhKSYmKGQ9ITApLHA+NSYmYWkodCxlLDUscykmJihkPSEwKSxwPjYmJmFpKHQsZSw2LHUpJiYoZD0hMCkscD43JiZhaSh0LGUsNyxsKSYmKGQ9ITApLHA+OCYmYWkodCxlLDgsYykmJihkPSEwKSxwPjkmJmFpKHQsZSw5LGYpJiYoZD0hMCksZCl7dmFyIG09R24odCxlLm5vZGVJbmRleCkseT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnk9bmV3IEFycmF5KGgubGVuZ3RoKSxwPjAmJih5WzBdPW4pLHA+MSYmKHlbMV09aSkscD4yJiYoeVsyXT1yKSxwPjMmJih5WzNdPW8pLHA+NCYmKHlbNF09YSkscD41JiYoeVs1XT1zKSxwPjYmJih5WzZdPXUpLHA+NyYmKHlbN109bCkscD44JiYoeVs4XT1jKSxwPjkmJih5WzldPWYpO2JyZWFrO2Nhc2UgNjQ6eT17fSxwPjAmJih5W2hbMF0ubmFtZV09bikscD4xJiYoeVtoWzFdLm5hbWVdPWkpLHA+MiYmKHlbaFsyXS5uYW1lXT1yKSxwPjMmJih5W2hbM10ubmFtZV09bykscD40JiYoeVtoWzRdLm5hbWVdPWEpLHA+NSYmKHlbaFs1XS5uYW1lXT1zKSxwPjYmJih5W2hbNl0ubmFtZV09dSkscD43JiYoeVtoWzddLm5hbWVdPWwpLHA+OCYmKHlbaFs4XS5uYW1lXT1jKSxwPjkmJih5W2hbOV0ubmFtZV09Zik7YnJlYWs7Y2FzZSAxMjg6dmFyIHY9bjtzd2l0Y2gocCl7Y2FzZSAxOnk9di50cmFuc2Zvcm0obik7YnJlYWs7Y2FzZSAyOnk9di50cmFuc2Zvcm0oaSk7YnJlYWs7Y2FzZSAzOnk9di50cmFuc2Zvcm0oaSxyKTticmVhaztjYXNlIDQ6eT12LnRyYW5zZm9ybShpLHIsbyk7YnJlYWs7Y2FzZSA1Onk9di50cmFuc2Zvcm0oaSxyLG8sYSk7YnJlYWs7Y2FzZSA2Onk9di50cmFuc2Zvcm0oaSxyLG8sYSxzKTticmVhaztjYXNlIDc6eT12LnRyYW5zZm9ybShpLHIsbyxhLHMsdSk7YnJlYWs7Y2FzZSA4Onk9di50cmFuc2Zvcm0oaSxyLG8sYSxzLHUsbCk7YnJlYWs7Y2FzZSA5Onk9di50cmFuc2Zvcm0oaSxyLG8sYSxzLHUsbCxjKTticmVhaztjYXNlIDEwOnk9di50cmFuc2Zvcm0oaSxyLG8sYSxzLHUsbCxjLGYpfX1tLnZhbHVlPXl9cmV0dXJuIGR9KHQsZSxuLGkscixvLGEscyx1LGwsYyxmKTtkZWZhdWx0OnRocm93InVucmVhY2hhYmxlIn19KHQsZSxyLG8sYSxzLHUsbCxjLGYsaCxkKTpmdW5jdGlvbih0LGUsbil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9ITEscj0wO3I8bi5sZW5ndGg7cisrKUZpKHQsZSxyLG5bcl0pJiYoaT0hMCk7cmV0dXJuIGl9KHQsZSxuKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9ZS5iaW5kaW5ncyxyPSExLG89MDtvPG4ubGVuZ3RoO28rKylhaSh0LGUsbyxuW29dKSYmKHI9ITApO2lmKHIpe3ZhciBhPSIiO2ZvcihvPTA7bzxuLmxlbmd0aDtvKyspYSs9JHIobltvXSxpW29dKTthPWUudGV4dC5wcmVmaXgrYTt2YXIgcz1Vbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUocyxhKX1yZXR1cm4gcn0odCxlLG4pO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9cW4odCxlLm5vZGVJbmRleCkscj1pLmluc3RhbmNlLG89ITEsYT12b2lkIDAscz0wO3M8bi5sZW5ndGg7cysrKW9pKHQsZSxzLG5bc10pJiYobz0hMCxhPURyKHQsaSxlLHMsbltzXSxhKSk7cmV0dXJuIGEmJnIubmdPbkNoYW5nZXMoYSksNjU1MzYmZS5mbGFncyYmQm4odCwyNTYsZS5ub2RlSW5kZXgpJiZyLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJnIubmdEb0NoZWNrKCksb30odCxlLG4pO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1lLmJpbmRpbmdzLG89ITEsYT0wO2E8bi5sZW5ndGg7YSsrKWFpKHQsZSxhLG5bYV0pJiYobz0hMCk7aWYobyl7dmFyIHM9R24odCxlLm5vZGVJbmRleCksdT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnU9bjticmVhaztjYXNlIDY0OmZvcih1PXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl1W3JbYV0ubmFtZV09blthXTticmVhaztjYXNlIDEyODp2YXIgbD1uWzBdLGM9bi5zbGljZSgxKTt1PWwudHJhbnNmb3JtLmFwcGx5KGwsT2JqZWN0KGkuZCkoYykpfXMudmFsdWU9dX1yZXR1cm4gb30odCxlLG4pO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLHIpfWZ1bmN0aW9uIGZvKHQpe3ZhciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe3ZhciBpPWUubm9kZXNbbl07aWYoNCZpLmZsYWdzKXt2YXIgcj1Ibih0LG4pLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihyKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYT1yW29dO2Euc3RhdGV8PTMyLGxpKGEsdCl9fWVsc2UgMD09KDQmaS5jaGlsZEZsYWdzKSYmKG4rPWkuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIGhvKHQsZSxuLGkscixvLGEscyx1LGwsYyxmLGgpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixpLHIsbyxhLHMsdSxsLGMsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGg7aD4wJiZzaSh0LGUsMCxuKSxoPjEmJnNpKHQsZSwxLGkpLGg+MiYmc2kodCxlLDIsciksaD4zJiZzaSh0LGUsMyxvKSxoPjQmJnNpKHQsZSw0LGEpLGg+NSYmc2kodCxlLDUscyksaD42JiZzaSh0LGUsNix1KSxoPjcmJnNpKHQsZSw3LGwpLGg+OCYmc2kodCxlLDgsYyksaD45JiZzaSh0LGUsOSxmKX0odCxlLGkscixvLGEscyx1LGwsYyxmLGgpOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylzaSh0LGUsaSxuW2ldKX0odCxlLGkpLCExfWZ1bmN0aW9uIHBvKHQsZSl7aWYoUW4odCxlLm5vZGVJbmRleCkuZGlydHkpdGhyb3cgV24oWW4uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBub3QgZGlydHkiLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBkaXJ0eSIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIG1vKHQpe2lmKCEoMTI4JnQuc3RhdGUpKXtpZihnbyh0LHlvLkRlc3Ryb3kpLHZvKHQseW8uRGVzdHJveSksTnIodCwxMzEwNzIpLHQuZGlzcG9zYWJsZXMpZm9yKHZhciBlPTA7ZTx0LmRpc3Bvc2FibGVzLmxlbmd0aDtlKyspdC5kaXNwb3NhYmxlc1tlXSgpOyFmdW5jdGlvbih0KXtpZigxNiZ0LnN0YXRlKXt2YXIgZT1maSh0KTtpZihlKXt2YXIgbj1lLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztuJiYoS2kobixuLmluZGV4T2YodCkpLFluLmRpcnR5UGFyZW50UXVlcmllcyh0KSl9fX0odCksdC5yZW5kZXJlci5kZXN0cm95Tm9kZSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl7dmFyIGk9dC5kZWYubm9kZXNbbl07MSZpLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoSG4odCxuKS5yZW5kZXJFbGVtZW50KToyJmkuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShVbih0LG4pLnJlbmRlclRleHQpOig2NzEwODg2NCZpLmZsYWdzfHwxMzQyMTc3MjgmaS5mbGFncykmJlFuKHQsbikuZGVzdHJveSgpfX0odCkscGkodCkmJnQucmVuZGVyZXIuZGVzdHJveSgpLHQuc3RhdGV8PTEyOH19dmFyIHlvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kiLHR9KHt9KTtmdW5jdGlvbiB2byh0LGUpe3ZhciBuPXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgaT0wO2k8bi5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgcj1uLm5vZGVzW2ldOzMzNTU0NDMyJnIuZmxhZ3M/Ym8oSG4odCxpKS5jb21wb25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZyLmNoaWxkRmxhZ3MpJiYoaSs9ci5jaGlsZENvdW50KX19ZnVuY3Rpb24gZ28odCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylmb3IodmFyIGk9MDtpPG4ubm9kZXMubGVuZ3RoO2krKyl7dmFyIHI9bi5ub2Rlc1tpXTtpZigxNjc3NzIxNiZyLmZsYWdzKWZvcih2YXIgbz1Ibih0LGkpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYT0wO2E8by5sZW5ndGg7YSsrKWJvKG9bYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmci5jaGlsZEZsYWdzKSYmKGkrPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIGJvKHQsZSl7dmFyIG49dC5zdGF0ZTtzd2l0Y2goZSl7Y2FzZSB5by5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT91byh0KTo2NCZuJiZfbyh0LHlvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIHlvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/dW8odCk6NjQmbiYmX28odCxlKSk7YnJlYWs7Y2FzZSB5by5DaGVja0FuZFVwZGF0ZTowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9sbyh0KTo2NCZuJiZfbyh0LHlvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIHlvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/bG8odCk6NjQmbiYmX28odCxlKSk7YnJlYWs7Y2FzZSB5by5EZXN0cm95Om1vKHQpO2JyZWFrO2Nhc2UgeW8uQ3JlYXRlVmlld05vZGVzOnNvKHQpfX1mdW5jdGlvbiBfbyh0LGUpe2dvKHQsZSksdm8odCxlKX1mdW5jdGlvbiB3byh0LGUsbixpKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciByPXQuZGVmLm5vZGVzLmxlbmd0aCxvPTA7bzxyO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb107aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dpdGNoKFluLnNldEN1cnJlbnROb2RlKHQsYS5ub2RlSW5kZXgpLGkpe2Nhc2UgMDpCcih0LGEpO2JyZWFrO2Nhc2UgMTpwbyh0LGEpfWEuY2hpbGRGbGFncyZlJiZhLmNoaWxkRmxhZ3Mmbnx8KG8rPWEuY2hpbGRDb3VudCl9fXZhciB4bz0hMTtmdW5jdGlvbiBDbyh0LGUsbixpLHIsbyl7cmV0dXJuIGlvKEVvKHQscixyLmluamVjdG9yLmdldChfZSksZSxuKSxpLG8pfWZ1bmN0aW9uIFNvKHQsZSxuLGkscixvKXt2YXIgYT1yLmluamVjdG9yLmdldChfZSkscz1Fbyh0LHIsbmV3IG9hKGEpLGUsbiksdT1EbyhpKTtyZXR1cm4gaWEocW8uY3JlYXRlLGlvLG51bGwsW3MsdSxvXSl9ZnVuY3Rpb24gRW8odCxlLG4saSxyKXt2YXIgbz1lLmluamVjdG9yLmdldChWbiksYT1lLmluamVjdG9yLmdldChzdCk7cmV0dXJue25nTW9kdWxlOmUsaW5qZWN0b3I6dCxwcm9qZWN0YWJsZU5vZGVzOmksc2VsZWN0b3JPck5vZGU6cixzYW5pdGl6ZXI6byxyZW5kZXJlckZhY3Rvcnk6bixyZW5kZXJlcjpuLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCksZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIE9vKHQsZSxuLGkpe3ZhciByPURvKG4pO3JldHVybiBpYShxby5jcmVhdGUsbm8sbnVsbCxbdCxlLHIsaV0pfWZ1bmN0aW9uIGtvKHQsZSxuLGkpe3JldHVybiBuPUlvLmdldChlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIucHJvdmlkZXIudG9rZW4pfHxEbyhuKSxpYShxby5jcmVhdGUscm8sbnVsbCxbdCxlLG4saV0pfWZ1bmN0aW9uIFRvKHQsZSxuLGkpe3JldHVybiBocih0LGUsbixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT0hMSxuPSExO3JldHVybiAwPT09am8uc2l6ZT97aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufToodC5wcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT1qby5nZXQodC50b2tlbik7Mzg0MCZ0LmZsYWdzJiZpJiYoZT0hMCxuPW58fGkuZGVwcmVjYXRlZEJlaGF2aW9yKX0pLHQubW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FvLmZvckVhY2goZnVuY3Rpb24oaSxyKXtyLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluPT09dCYmKGU9ITAsbj1ufHxpLmRlcHJlY2F0ZWRCZWhhdmlvcil9KX0pLHtoYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59KX0odCksbj1lLmhhc0RlcHJlY2F0ZWRPdmVycmlkZXM7cmV0dXJuIGUuaGFzT3ZlcnJpZGVzPyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQucHJvdmlkZXJzLmxlbmd0aDtlKyspe3ZhciBpPXQucHJvdmlkZXJzW2VdO24mJihpLmZsYWdzfD00MDk2KTt2YXIgcj1qby5nZXQoaS50b2tlbik7ciYmKGkuZmxhZ3M9LTM4NDEmaS5mbGFnc3xyLmZsYWdzLGkuZGVwcz1naShyLmRlcHMpLGkudmFsdWU9ci52YWx1ZSl9aWYoQW8uc2l6ZT4wKXt2YXIgbz1uZXcgU2V0KHQubW9kdWxlcyk7QW8uZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKG8uaGFzKGkubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4pKXt2YXIgcj17dG9rZW46aSxmbGFnczplLmZsYWdzfChuPzQwOTY6MCksZGVwczpnaShlLmRlcHMpLHZhbHVlOmUudmFsdWUsaW5kZXg6dC5wcm92aWRlcnMubGVuZ3RofTt0LnByb3ZpZGVycy5wdXNoKHIpLHQucHJvdmlkZXJzQnlLZXlbSm4oaSldPXJ9fSl9fSh0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBYbn0pKSx0KTp0fShpKSl9dmFyIGpvPW5ldyBNYXAsQW89bmV3IE1hcCxJbz1uZXcgTWFwO2Z1bmN0aW9uIFJvKHQpe2pvLnNldCh0LnRva2VuLHQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuJiZ0LnRva2VuLm5nSW5qZWN0YWJsZURlZiYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9rZW4ubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4mJkFvLnNldCh0LnRva2VuLHQpfWZ1bmN0aW9uIE1vKHQsZSl7dmFyIG49d2kod2koZS52aWV3RGVmRmFjdG9yeSkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRWaWV3KTtJby5zZXQodCxuKX1mdW5jdGlvbiBQbygpe2pvLmNsZWFyKCksQW8uY2xlYXIoKSxJby5jbGVhcigpfWZ1bmN0aW9uIERvKHQpe2lmKDA9PT1qby5zaXplKXJldHVybiB0O3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPW51bGwsaT0wO2k8dC5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgcj10Lm5vZGVzW2ldOzEmci5mbGFncyYmKG49ciksbiYmMzg0MCZyLmZsYWdzJiZqby5oYXMoci5wcm92aWRlci50b2tlbikmJihlLnB1c2gobi5ub2RlSW5kZXgpLG49bnVsbCl9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBYbn0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWkodCxlW25dKTtyZXR1cm4gdDtmdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciBuPWUrMTtuPHQubm9kZXMubGVuZ3RoO24rKyl7dmFyIGk9dC5ub2Rlc1tuXTtpZigxJmkuZmxhZ3MpcmV0dXJuO2lmKDM4NDAmaS5mbGFncyl7dmFyIHI9aS5wcm92aWRlcixvPWpvLmdldChyLnRva2VuKTtvJiYoaS5mbGFncz0tMzg0MSZpLmZsYWdzfG8uZmxhZ3Msci5kZXBzPWdpKG8uZGVwcyksci52YWx1ZT1vLnZhbHVlKX19fX1mdW5jdGlvbiBObyh0LGUsbixpLHIsbyxhLHMsdSxsLGMsZixoKXt2YXIgZD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gY28odCxkLG4saSxyLG8sYSxzLHUsbCxjLGYsaCksMjI0JmQuZmxhZ3M/R24odCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rpb24gRm8odCxlLG4saSxyLG8sYSxzLHUsbCxjLGYsaCl7dmFyIGQ9dC5kZWYubm9kZXNbZV07cmV0dXJuIGhvKHQsZCxuLGkscixvLGEscyx1LGwsYyxmLGgpLDIyNCZkLmZsYWdzP0duKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIExvKHQpe3JldHVybiBpYShxby5kZXRlY3RDaGFuZ2VzLGxvLG51bGwsW3RdKX1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gaWEocW8uY2hlY2tOb0NoYW5nZXMsdW8sbnVsbCxbdF0pfWZ1bmN0aW9uIHpvKHQpe3JldHVybiBpYShxby5kZXN0cm95LG1vLG51bGwsW3RdKX12YXIgQm8sVW8sSG8scW89ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5jcmVhdGU9MF09ImNyZWF0ZSIsdFt0LmRldGVjdENoYW5nZXM9MV09ImRldGVjdENoYW5nZXMiLHRbdC5jaGVja05vQ2hhbmdlcz0yXT0iY2hlY2tOb0NoYW5nZXMiLHRbdC5kZXN0cm95PTNdPSJkZXN0cm95Iix0W3QuaGFuZGxlRXZlbnQ9NF09ImhhbmRsZUV2ZW50Iix0fSh7fSk7ZnVuY3Rpb24gR28odCxlKXtVbz10LEhvPWV9ZnVuY3Rpb24gUW8odCxlLG4saSl7cmV0dXJuIEdvKHQsZSksaWEocW8uaGFuZGxlRXZlbnQsdC5kZWYuaGFuZGxlRXZlbnQsbnVsbCxbdCxlLG4saV0pfWZ1bmN0aW9uIFlvKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgS24ocW9bQm9dKTtyZXR1cm4gR28odCxKbyh0LDApKSx0LmRlZi51cGRhdGVEaXJlY3RpdmVzKGZ1bmN0aW9uKHQsbixpKXtmb3IodmFyIHI9W10sbz0zO288YXJndW1lbnRzLmxlbmd0aDtvKyspcltvLTNdPWFyZ3VtZW50c1tvXTt2YXIgYT10LmRlZi5ub2Rlc1tuXTtyZXR1cm4gMD09PWU/Wm8odCxhLGkscik6S28odCxhLGksciksMTYzODQmYS5mbGFncyYmR28odCxKbyh0LG4pKSwyMjQmYS5mbGFncz9Hbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIFdvKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgS24ocW9bQm9dKTtyZXR1cm4gR28odCx0YSh0LDApKSx0LmRlZi51cGRhdGVSZW5kZXJlcihmdW5jdGlvbih0LG4saSl7Zm9yKHZhciByPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXJbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP1pvKHQsYSxpLHIpOktvKHQsYSxpLHIpLDMmYS5mbGFncyYmR28odCx0YSh0LG4pKSwyMjQmYS5mbGFncz9Hbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIFpvKHQsZSxuLHIpe2lmKGNvLmFwcGx5KHZvaWQgMCxPYmplY3QoaS5kKShbdCxlLG5dLHIpKSl7dmFyIG89MT09PW4/clswXTpyO2lmKDE2Mzg0JmUuZmxhZ3Mpe2Zvcih2YXIgYT17fSxzPTA7czxlLmJpbmRpbmdzLmxlbmd0aDtzKyspe3ZhciB1PWUuYmluZGluZ3Nbc10sbD1vW3NdOzgmdS5mbGFncyYmKGFbKGQ9dS5ub25NaW5pZmllZE5hbWUsIm5nLXJlZmxlY3QtIisoZD1kLnJlcGxhY2UoL1skQF0vZywiXyIpLnJlcGxhY2UoWG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIi0iK3RbMV0udG9Mb3dlckNhc2UoKX0pKSldPSRvKGwpKX12YXIgYz1lLnBhcmVudCxmPUhuKHQsYy5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7aWYoYy5lbGVtZW50Lm5hbWUpZm9yKHZhciBoIGluIGEpbnVsbCE9KGw9YVtoXSk/dC5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZixoLGwpOnQucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGYsaCk7ZWxzZSB0LnJlbmRlcmVyLnNldFZhbHVlKGYsImJpbmRpbmdzPSIrSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpKX19dmFyIGR9ZnVuY3Rpb24gS28odCxlLG4scil7aG8uYXBwbHkodm9pZCAwLE9iamVjdChpLmQpKFt0LGUsbl0scikpfXZhciBYbz0vKFtBLVpdKS9nO2Z1bmN0aW9uICRvKHQpe3RyeXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCkuc2xpY2UoMCwzMCk6dH1jYXRjaCh0KXtyZXR1cm4iW0VSUk9SXSBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUifX1mdW5jdGlvbiBKbyh0LGUpe2Zvcih2YXIgbj1lO248dC5kZWYubm9kZXMubGVuZ3RoO24rKyl7dmFyIGk9dC5kZWYubm9kZXNbbl07aWYoMTYzODQmaS5mbGFncyYmaS5iaW5kaW5ncyYmaS5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gdGEodCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciBpPXQuZGVmLm5vZGVzW25dO2lmKDMmaS5mbGFncyYmaS5iaW5kaW5ncyYmaS5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9dmFyIGVhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMubm9kZUluZGV4PWUsbnVsbD09ZSYmKHRoaXMubm9kZUluZGV4PWU9MCksdGhpcy5ub2RlRGVmPXQuZGVmLm5vZGVzW2VdO2Zvcih2YXIgbj10aGlzLm5vZGVEZWYsaT10O24mJjA9PSgxJm4uZmxhZ3MpOyluPW4ucGFyZW50O2lmKCFuKWZvcig7IW4mJmk7KW49aGkoaSksaT1pLnBhcmVudDt0aGlzLmVsRGVmPW4sdGhpcy5lbFZpZXc9aX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbE9yQ29tcFZpZXciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSG4odGhpcy5lbFZpZXcsdGhpcy5lbERlZi5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXd8fHRoaXMudmlld30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHNyKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbXBvbmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbE9yQ29tcFZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5lbERlZilmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmdC5wdXNoKG4ucHJvdmlkZXIudG9rZW4pLGUrPW4uY2hpbGRDb3VudH1yZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmVsRGVmKXtuYSh0aGlzLmVsVmlldyx0aGlzLmVsRGVmLHQpO2Zvcih2YXIgZT10aGlzLmVsRGVmLm5vZGVJbmRleCsxO2U8PXRoaXMuZWxEZWYubm9kZUluZGV4K3RoaXMuZWxEZWYuY2hpbGRDb3VudDtlKyspe3ZhciBuPXRoaXMuZWxWaWV3LmRlZi5ub2Rlc1tlXTsyMDIyNCZuLmZsYWdzJiZuYSh0aGlzLmVsVmlldyxuLHQpLGUrPW4uY2hpbGRDb3VudH19cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRSZW5kZXJFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCl7Zm9yKDt0JiYhcGkodCk7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQucGFyZW50P0huKHQucGFyZW50LGhpKHQpLm5vZGVJbmRleCk6bnVsbH0odGhpcy5lbE9yQ29tcFZpZXcpO3JldHVybiB0P3QucmVuZGVyRWxlbWVudDp2b2lkIDB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZW5kZXJOb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDImdGhpcy5ub2RlRGVmLmZsYWdzP2RpKHRoaXMudmlldyx0aGlzLm5vZGVEZWYpOmRpKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmxvZ0Vycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9W10sbz0xO288YXJndW1lbnRzLmxlbmd0aDtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTsyJnRoaXMubm9kZURlZi5mbGFncz8oZT10aGlzLnZpZXcuZGVmLG49dGhpcy5ub2RlRGVmLm5vZGVJbmRleCk6KGU9dGhpcy5lbFZpZXcuZGVmLG49dGhpcy5lbERlZi5ub2RlSW5kZXgpO3ZhciBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLGk9MDtpPD1lO2krKykzJnQubm9kZXNbaV0uZmxhZ3MmJm4rKztyZXR1cm4gbn0oZSxuKSxzPS0xO2UuZmFjdG9yeShmdW5jdGlvbigpe3ZhciBlO3JldHVybisrcz09PWE/KGU9dC5lcnJvcikuYmluZC5hcHBseShlLE9iamVjdChpLmQpKFt0XSxyKSk6WG59KSxzPGEmJih0LmVycm9yKCJJbGxlZ2FsIHN0YXRlOiB0aGUgVmlld0RlZmluaXRpb25GYWN0b3J5IGRpZCBub3QgY2FsbCB0aGUgbG9nZ2VyISIpLHQuZXJyb3IuYXBwbHkodCxPYmplY3QoaS5kKShyKSkpfSx0fSgpO2Z1bmN0aW9uIG5hKHQsZSxuKXtmb3IodmFyIGkgaW4gZS5yZWZlcmVuY2VzKW5baV09SHIodCxlLGUucmVmZXJlbmNlc1tpXSl9ZnVuY3Rpb24gaWEodCxlLG4saSl7dmFyIHI9Qm8sbz1VbyxhPUhvO3RyeXtCbz10O3ZhciBzPWUuYXBwbHkobixpKTtyZXR1cm4gVW89byxIbz1hLEJvPXIsc31jYXRjaCh0KXtpZihydCh0KXx8IVVvKXRocm93IHQ7dGhyb3cgZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodC50b1N0cmluZygpKSksWm4odCxlKSx0fSh0LHJhKCkpfX1mdW5jdGlvbiByYSgpe3JldHVybiBVbz9uZXcgZWEoVW8sSG8pOm51bGx9dmFyIG9hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBhYSh0aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSkpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmU/dGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZSgpOlByb21pc2UucmVzb2x2ZShudWxsKX0sdH0oKSxhYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZGF0YT10aGlzLmRlbGVnYXRlLmRhdGF9cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3lOb2RlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0KXtMZS5kZWxldGUodC5uYXRpdmVOb2RlKX0oVmUodCkpLHRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUmJnRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUodCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpLGk9cmEoKTtpZihpKXt2YXIgcj1uZXcgRGUobixudWxsLGkpO3IubmFtZT10LHplKHIpfXJldHVybiBufSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KSxuPXJhKCk7cmV0dXJuIG4mJnplKG5ldyBQZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpLG49cmEoKTtyZXR1cm4gbiYmemUobmV3IFBlKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1WZSh0KSxpPVZlKGUpO24mJmkmJm4gaW5zdGFuY2VvZiBEZSYmbi5hZGRDaGlsZChpKSx0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9VmUodCkscj1WZShlKSxvPVZlKG4pO2kmJnImJmkgaW5zdGFuY2VvZiBEZSYmaS5pbnNlcnRCZWZvcmUobyxyKSx0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49VmUodCksaT1WZShlKTtuJiZpJiZuIGluc3RhbmNlb2YgRGUmJm4ucmVtb3ZlQ2hpbGQoaSksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZCh0LGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpLG49cmEoKTtyZXR1cm4gbiYmemUobmV3IERlKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPVZlKHQpO3ImJnIgaW5zdGFuY2VvZiBEZSYmKHIuYXR0cmlidXRlc1tpP2krIjoiK2U6ZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4saSl9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9VmUodCk7aSYmaSBpbnN0YW5jZW9mIERlJiYoaS5hdHRyaWJ1dGVzW24/bisiOiIrZTplXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49VmUodCk7biYmbiBpbnN0YW5jZW9mIERlJiYobi5jbGFzc2VzW2VdPSEwKSx0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49VmUodCk7biYmbiBpbnN0YW5jZW9mIERlJiYobi5jbGFzc2VzW2VdPSExKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPVZlKHQpO3ImJnIgaW5zdGFuY2VvZiBEZSYmKHIuc3R5bGVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4saSl9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1WZSh0KTtpJiZpIGluc3RhbmNlb2YgRGUmJihpLnN0eWxlc1tlXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVZlKHQpO2kmJmkgaW5zdGFuY2VvZiBEZSYmKGkucHJvcGVydGllc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPVZlKHQpO2kmJmkubGlzdGVuZXJzLnB1c2gobmV3IGZ1bmN0aW9uKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5jYWxsYmFjaz1lfShlLG4pKX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHR9KCk7ZnVuY3Rpb24gc2EodCxlLG4pe3JldHVybiBuZXcgdWEodCxlLG4pfXZhciB1YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIubW9kdWxlVHlwZT1lLHIuX2Jvb3RzdHJhcENvbXBvbmVudHM9bixyLl9uZ01vZHVsZURlZkZhY3Rvcnk9aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXshZnVuY3Rpb24oKXtpZigheG8pe3hvPSEwO3ZhciB0PWhlKCk/e3NldEN1cnJlbnROb2RlOkdvLGNyZWF0ZVJvb3RWaWV3OlNvLGNyZWF0ZUVtYmVkZGVkVmlldzpPbyxjcmVhdGVDb21wb25lbnRWaWV3OmtvLGNyZWF0ZU5nTW9kdWxlUmVmOlRvLG92ZXJyaWRlUHJvdmlkZXI6Um8sb3ZlcnJpZGVDb21wb25lbnRWaWV3Ok1vLGNsZWFyT3ZlcnJpZGVzOlBvLGNoZWNrQW5kVXBkYXRlVmlldzpMbyxjaGVja05vQ2hhbmdlc1ZpZXc6Vm8sZGVzdHJveVZpZXc6em8sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBlYSh0LGUpfSxoYW5kbGVFdmVudDpRbyx1cGRhdGVEaXJlY3RpdmVzOllvLHVwZGF0ZVJlbmRlcmVyOldvfTp7c2V0Q3VycmVudE5vZGU6ZnVuY3Rpb24oKXt9LGNyZWF0ZVJvb3RWaWV3OkNvLGNyZWF0ZUVtYmVkZGVkVmlldzpubyxjcmVhdGVDb21wb25lbnRWaWV3OnJvLGNyZWF0ZU5nTW9kdWxlUmVmOmhyLG92ZXJyaWRlUHJvdmlkZXI6WG4sb3ZlcnJpZGVDb21wb25lbnRWaWV3OlhuLGNsZWFyT3ZlcnJpZGVzOlhuLGNoZWNrQW5kVXBkYXRlVmlldzpsbyxjaGVja05vQ2hhbmdlc1ZpZXc6dW8sZGVzdHJveVZpZXc6bW8sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBlYSh0LGUpfSxoYW5kbGVFdmVudDpmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdC5kZWYuaGFuZGxlRXZlbnQodCxlLG4saSl9LHVwZGF0ZURpcmVjdGl2ZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlRGlyZWN0aXZlcygwPT09ZT9ObzpGbyx0KX0sdXBkYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlUmVuZGVyZXIoMD09PWU/Tm86Rm8sdCl9fTtZbi5zZXRDdXJyZW50Tm9kZT10LnNldEN1cnJlbnROb2RlLFluLmNyZWF0ZVJvb3RWaWV3PXQuY3JlYXRlUm9vdFZpZXcsWW4uY3JlYXRlRW1iZWRkZWRWaWV3PXQuY3JlYXRlRW1iZWRkZWRWaWV3LFluLmNyZWF0ZUNvbXBvbmVudFZpZXc9dC5jcmVhdGVDb21wb25lbnRWaWV3LFluLmNyZWF0ZU5nTW9kdWxlUmVmPXQuY3JlYXRlTmdNb2R1bGVSZWYsWW4ub3ZlcnJpZGVQcm92aWRlcj10Lm92ZXJyaWRlUHJvdmlkZXIsWW4ub3ZlcnJpZGVDb21wb25lbnRWaWV3PXQub3ZlcnJpZGVDb21wb25lbnRWaWV3LFluLmNsZWFyT3ZlcnJpZGVzPXQuY2xlYXJPdmVycmlkZXMsWW4uY2hlY2tBbmRVcGRhdGVWaWV3PXQuY2hlY2tBbmRVcGRhdGVWaWV3LFluLmNoZWNrTm9DaGFuZ2VzVmlldz10LmNoZWNrTm9DaGFuZ2VzVmlldyxZbi5kZXN0cm95Vmlldz10LmRlc3Ryb3lWaWV3LFluLnJlc29sdmVEZXA9TXIsWW4uY3JlYXRlRGVidWdDb250ZXh0PXQuY3JlYXRlRGVidWdDb250ZXh0LFluLmhhbmRsZUV2ZW50PXQuaGFuZGxlRXZlbnQsWW4udXBkYXRlRGlyZWN0aXZlcz10LnVwZGF0ZURpcmVjdGl2ZXMsWW4udXBkYXRlUmVuZGVyZXI9dC51cGRhdGVSZW5kZXJlcixZbi5kaXJ0eVBhcmVudFF1ZXJpZXM9enJ9fSgpO3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPUFycmF5LmZyb20odC5wcm92aWRlcnMpLG49QXJyYXkuZnJvbSh0Lm1vZHVsZXMpLGk9e307Zm9yKHZhciByIGluIHQucHJvdmlkZXJzQnlLZXkpaVtyXT10LnByb3ZpZGVyc0J5S2V5W3JdO3JldHVybntmYWN0b3J5OnQuZmFjdG9yeSxpc1Jvb3Q6dC5pc1Jvb3QscHJvdmlkZXJzOmUsbW9kdWxlczpuLHByb3ZpZGVyc0J5S2V5Oml9fSh3aSh0aGlzLl9uZ01vZHVsZURlZkZhY3RvcnkpKTtyZXR1cm4gWW4uY3JlYXRlTmdNb2R1bGVSZWYodGhpcy5tb2R1bGVUeXBlLHR8fFAuTlVMTCx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzLGUpfSxlfShxdCk7ZnVuY3Rpb24gbGEodCxlLG4pe3QhPWUmJmZhKG4pfWZ1bmN0aW9uIGNhKHQsZSl7bnVsbD09dCYmZmEoZSl9ZnVuY3Rpb24gZmEodCl7dGhyb3cgbmV3IEVycm9yKCJBU1NFUlRJT04gRVJST1I6ICIrdCl9dmFyIGhhPTE2LGRhPTAscGE9MSxtYT0yLHlhPTMsdmE9NCxnYT01LGJhPTYsX2E9Nyx3YT04LHhhPTksQ2E9MTAsU2E9MTEsRWE9MTQ7ZnVuY3Rpb24gT2EodCxlLG4pe3QuYWZ0ZXJDb250ZW50SW5pdCYmKGUuY29udGVudEhvb2tzfHwoZS5jb250ZW50SG9va3M9W10pKS5wdXNoKG4sdC5hZnRlckNvbnRlbnRJbml0KSx0LmFmdGVyQ29udGVudENoZWNrZWQmJigoZS5jb250ZW50SG9va3N8fChlLmNvbnRlbnRIb29rcz1bXSkpLnB1c2gobix0LmFmdGVyQ29udGVudENoZWNrZWQpLChlLmNvbnRlbnRDaGVja0hvb2tzfHwoZS5jb250ZW50Q2hlY2tIb29rcz1bXSkpLnB1c2gobix0LmFmdGVyQ29udGVudENoZWNrZWQpKX1mdW5jdGlvbiBrYSh0LGUsbil7dC5hZnRlclZpZXdJbml0JiYoZS52aWV3SG9va3N8fChlLnZpZXdIb29rcz1bXSkpLnB1c2gobix0LmFmdGVyVmlld0luaXQpLHQuYWZ0ZXJWaWV3Q2hlY2tlZCYmKChlLnZpZXdIb29rc3x8KGUudmlld0hvb2tzPVtdKSkucHVzaChuLHQuYWZ0ZXJWaWV3Q2hlY2tlZCksKGUudmlld0NoZWNrSG9va3N8fChlLnZpZXdDaGVja0hvb2tzPVtdKSkucHVzaChuLHQuYWZ0ZXJWaWV3Q2hlY2tlZCkpfWZ1bmN0aW9uIFRhKHQsZSxuKXtudWxsIT10Lm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzfHwoZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKG4sdC5vbkRlc3Ryb3kpfWZ1bmN0aW9uIGphKHQsZSxuKXsxNiZ0W3ZhXSYmKEFhKHRbX2FdLGUuaW5pdEhvb2tzLGUuY2hlY2tIb29rcyxuKSx0W3ZhXSY9LTE3KX1mdW5jdGlvbiBBYSh0LGUsbixpKXt2YXIgcj1pP2U6bjtyJiZJYSh0LHIpfWZ1bmN0aW9uIElhKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0yKWVbbisxXS5jYWxsKHRbZVtuXV0pfSJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmfHwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsKTt2YXIgUmE9MCxNYT00LFBhPSJuZ1Byb2plY3RBcyI7ZnVuY3Rpb24gRGEodCl7cmV0dXJuISF0Lmxpc3Rlbn12YXIgTmE9e2NyZWF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRvY3VtZW50fX07ZnVuY3Rpb24gRmEodCxlKXtjYSh0LCJzaG91bGQgYmUgY2FsbGVkIHdpdGggYSBub2RlIiksbGEodC50Tm9kZS50eXBlLGUsInNob3VsZCBiZSBhICIrZnVuY3Rpb24odCl7cmV0dXJuIDE9PXQ/IlByb2plY3Rpb24iOjA9PXQ/IkNvbnRhaW5lciI6Mj09dD8iVmlldyI6Mz09dD8iRWxlbWVudCI6Ijx1bmtub3duPiJ9KGUpKX1mdW5jdGlvbiBMYSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90WzBdOnR9ZnVuY3Rpb24gVmEodCl7aWYoMj09PXQudE5vZGUudHlwZSl7dmFyIGU9dC5kYXRhO3JldHVybiBlW21hXT9lW21hXVtnYV06bnVsbH1yZXR1cm4gdC50Tm9kZS5uZXh0P3Qudmlld1t0LnROb2RlLm5leHQuaW5kZXhdOm51bGx9ZnVuY3Rpb24gemEodCl7cmV0dXJuIHQudE5vZGUuY2hpbGQ/TGEoKDI9PT10LnROb2RlLnR5cGU/dC5kYXRhOnQudmlldylbdC50Tm9kZS5jaGlsZC5pbmRleF0pOm51bGx9ZnVuY3Rpb24gQmEodCl7aWYoLTE9PT10LnROb2RlLmluZGV4JiYyPT09dC50Tm9kZS50eXBlKXt2YXIgZT10LmRhdGFbRWFdO3JldHVybi0xPT09ZT9udWxsOnQudmlld1tlXS5keW5hbWljTENvbnRhaW5lck5vZGV9dmFyIG49dC50Tm9kZS5wYXJlbnQ7cmV0dXJuIExhKG4/dC52aWV3W24uaW5kZXhdOnQudmlld1tnYV0pfXZhciBVYT1bXTtmdW5jdGlvbiBIYSh0KXtmb3IodmFyIGU9dFtnYV07Mj09PWUudE5vZGUudHlwZTspbmdEZXZNb2RlJiZjYSh0W3BhXSwibFZpZXdEYXRhLnBhcmVudCIpLGU9KHQ9dFtwYV0pW2dhXTtyZXR1cm4gbmdEZXZNb2RlJiZGYShlLDMpLG5nRGV2TW9kZSYmY2EoZS5kYXRhLCJub2RlLmRhdGEiKSxlfWZ1bmN0aW9uIHFhKHQsZSxuLGkscil7MD09PXQ/RGEoZSk/ZS5pbnNlcnRCZWZvcmUobixpLHIpOm4uaW5zZXJ0QmVmb3JlKGksciwhMCk6MT09PXQ/RGEoZSk/ZS5yZW1vdmVDaGlsZChuLGkpOm4ucmVtb3ZlQ2hpbGQoaSk6Mj09PXQmJihuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlckRlc3Ryb3lOb2RlKyssZS5kZXN0cm95Tm9kZShpKSl9ZnVuY3Rpb24gR2EodCl7aWYoLTE9PT10W2RhXS5jaGlsZEluZGV4KXJldHVybiBudWxsO3ZhciBlPXRbdFtkYV0uY2hpbGRJbmRleF07cmV0dXJuIGUuZGF0YT9lLmRhdGE6ZS5keW5hbWljTENvbnRhaW5lck5vZGUuZGF0YX1mdW5jdGlvbiBRYSh0LGUpe3ZhciBuO3JldHVybihuPXRbZ2FdKSYmMj09PW4udE5vZGUudHlwZT9CYShuKS5kYXRhOnRbcGFdPT09ZT9udWxsOnRbcGFdfWZ1bmN0aW9uIFlhKHQpe2lmKHRbZGFdKXt2YXIgZT10OyFmdW5jdGlvbih0KXt2YXIgZT10W2RhXS5jbGVhbnVwO2lmKG51bGwhPWUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGgtMTtuKz0yKSJzdHJpbmciPT10eXBlb2YgZVtuXT8oTGEodFtlW24rMV1dKS5uYXRpdmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihlW25dLHRbd2FdW2VbbisyXV0sZVtuKzNdKSxuKz0yKToibnVtYmVyIj09dHlwZW9mIGVbbl0/KDAsdFt3YV1bZVtuXV0pKCk6ZVtuXS5jYWxsKHRbd2FdW2VbbisxXV0pO3Rbd2FdPW51bGx9fShlKSxmdW5jdGlvbih0KXt2YXIgZSxuPXRbZGFdO251bGwhPW4mJm51bGwhPShlPW4uZGVzdHJveUhvb2tzKSYmSWEodFtfYV0sZSl9KGUpLChpPShuPWUpW2RhXSYmbltkYV0ucGlwZURlc3Ryb3lIb29rcykmJklhKG4saSksLTE9PT1lW2RhXS5pZCYmRGEoZVtTYV0pJiYobmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJEZXN0cm95KyssZVtTYV0uZGVzdHJveSgpKX12YXIgbixpfXZhciBXYSxaYSxLYSxYYSwkYSxKYSx0cyxlcyxucyxpcz0iX19uZ0hvc3RMTm9kZV9fIixycz1Qcm9taXNlLnJlc29sdmUobnVsbCksb3M9WzAsMF0sYXM9bmV3IEFycmF5KGhhKS5maWxsKG51bGwpLHNzPSExLHVzPSEwO2Z1bmN0aW9uIGxzKHQsZSl7dmFyIG49ZXM7cmV0dXJuIG5zPXQmJnRbX2FdLCRhPXQmJnRbZGFdLHRzPXQmJjE9PSgxJnRbdmFdKSx1cz10JiYkYS5maXJzdFRlbXBsYXRlUGFzcyxXYT10JiZ0W1NhXSxudWxsIT1lJiYoS2E9ZSxYYT0hMCksZXM9dCxKYT10JiZ0W3lhXSxufWZ1bmN0aW9uIGNzKHQsZSl7ZXx8KHNzfHxBYShucywkYS52aWV3SG9va3MsJGEudmlld0NoZWNrSG9va3MsdHMpLGVzW3ZhXSY9LTYpLGVzW3ZhXXw9MTYsZXNbYmFdPS0xLGxzKHQsbnVsbCl9ZnVuY3Rpb24gZnMoKXtzc3x8amEoZXMsJGEsdHMpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1HYShlcyk7bnVsbCE9PWU7ZT1lW21hXSlpZihlLmxlbmd0aDxoYSYmbnVsbD09PWVbUmFdKWZvcih2YXIgbj1lLGk9MDtpPG5bTWFdLmxlbmd0aDtpKyspe3ZhciByPW5bTWFdW2ldLG89ci5kYXRhO25nRGV2TW9kZSYmY2Eob1tkYV0sIlRWaWV3IG11c3QgYmUgYWxsb2NhdGVkIiksbXMocixvW2RhXSxvW3hhXSwyKX19KCksc3N8fEFhKG5zLCRhLmNvbnRlbnRIb29rcywkYS5jb250ZW50Q2hlY2tIb29rcyx0cyksJGEuZmlyc3RUZW1wbGF0ZVBhc3M9dXM9ITEsaHMoJGEuaG9zdEJpbmRpbmdzKSxmdW5jdGlvbih0KXtpZihudWxsIT10LmNvbnRlbnRRdWVyaWVzKWZvcih2YXIgZT0wO2U8dC5jb250ZW50UXVlcmllcy5sZW5ndGg7ZSs9Mil7dmFyIG49dC5jb250ZW50UXVlcmllc1tlXTt0LmRpcmVjdGl2ZXNbbl0uY29udGVudFF1ZXJpZXNSZWZyZXNoKG4sdC5jb250ZW50UXVlcmllc1tlKzFdKX19KCRhKSxmdW5jdGlvbih0KXtpZihudWxsIT10KWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSs9MilDcyh0W2VdLHRbZSsxXSl9KCRhLmNvbXBvbmVudHMpfWZ1bmN0aW9uIGhzKHQpe2lmKG51bGwhPXQpZm9yKHZhciBlPSRhLmRpcmVjdGl2ZXMsbj0wO248dC5sZW5ndGg7bis9Mil7dmFyIGk9dFtuXSxyPWVbaV07ci5ob3N0QmluZGluZ3MmJnIuaG9zdEJpbmRpbmdzKGksdFtuKzFdKX19ZnVuY3Rpb24gZHModCxlLG4saSxyKXtyZXR1cm5bZSxlcyxudWxsLG51bGwsMjV8aSxudWxsLC0xLG51bGwsbnVsbCxuLGVzJiZlc1tDYV0sdCxyfHxudWxsLG51bGwsLTEsbnVsbF19ZnVuY3Rpb24gcHModCxlLG4saSxyLG8pe3ZhciBhPVhhP0thOkthJiZCYShLYSkscz1hJiZhLnZpZXc9PT1lcz9hLnROb2RlOm51bGwsdT0oWGE/SmE6S2EmJkthLnF1ZXJpZXMpfHxhJiZhLnF1ZXJpZXMmJmEucXVlcmllcy5jaGlsZCgpLGw9bnVsbCE9byxjPWZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm57bmF0aXZlOmksdmlldzplcyxub2RlSW5qZWN0b3I6bj9uLm5vZGVJbmplY3RvcjpudWxsLGRhdGE6cixxdWVyaWVzOm8sdE5vZGU6bnVsbCxkeW5hbWljTENvbnRhaW5lck5vZGU6bnVsbH19KDAsMCxhLG4sbD9vOm51bGwsdSk7aWYoLTE9PT10fHwyPT09ZSljLnROb2RlPShvP29bZGFdLm5vZGU6bnVsbCl8fHhzKGUsdCxudWxsLG51bGwscyxudWxsKTtlbHNle3ZhciBmPXQraGE7bmdEZXZNb2RlJiZBcyhmKTt2YXIgaD0kYS5kYXRhO2lmKGVzW2ZdPWMsZj49aC5sZW5ndGgpe3ZhciBkPWhbZl09eHMoZSxmLGkscixzLG51bGwpO2lmKCFYYSYmS2Epe3ZhciBwPUthLnROb2RlO3AubmV4dD1kLHAuZHluYW1pY0NvbnRhaW5lck5vZGUmJihwLmR5bmFtaWNDb250YWluZXJOb2RlLm5leHQ9ZCl9fWMudE5vZGU9aFtmXSxYYSYmKEphPW51bGwsKG51bGw9PUthLnROb2RlLmNoaWxkJiZLYS52aWV3PT09ZXN8fDI9PT1LYS50Tm9kZS50eXBlKSYmKEthLnROb2RlLmNoaWxkPWMudE5vZGUpKX1pZigyPT0oMiZlKSYmbCl7dmFyIG09bztuZ0Rldk1vZGUmJm51bGwhPW1bZ2FdJiZmYSgibFZpZXdEYXRhW0hPU1RfTk9ERV0gc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSxtW2dhXT1jLHVzJiYobVtkYV0ubm9kZT1jLnROb2RlKX1yZXR1cm4gS2E9YyxYYT0hMCxjfWZ1bmN0aW9uIG1zKHQsZSxuLGkpe3ZhciByLG89WGEsYT1LYTtpZihudWxsPT10LmRhdGFbcGFdJiZ0LmRhdGFbeGFdJiYhZS50ZW1wbGF0ZSlFcyh0LmRhdGFbeGFdKTtlbHNlIHRyeXtYYT0hMCxLYT1udWxsLHI9bHModC5kYXRhLHQpLGJzKCksZS50ZW1wbGF0ZShpLG4pLDImaT9mcygpOnQuZGF0YVtkYV0uZmlyc3RUZW1wbGF0ZVBhc3M9dXM9ITF9ZmluYWxseXtjcyhyLDE9PSgxJmkpKSxYYT1vLEthPWF9cmV0dXJuIHR9ZnVuY3Rpb24geXModCxlLG4saSl7dmFyIHI9bHMoZSx0KTt0cnl7WmEuYmVnaW4mJlphLmJlZ2luKCksaT8oYnMoKSxpKHZzKGUpLG4pLGZzKCkpOihzc3x8KGphKGVzLCRhLHRzKSxBYShucywkYS5jb250ZW50SG9va3MsJGEuY29udGVudENoZWNrSG9va3MsdHMpKSxocyhvcyksQ3MoMCxoYSkpfWZpbmFsbHl7WmEuZW5kJiZaYS5lbmQoKSxjcyhyKX19ZnVuY3Rpb24gdnModCl7cmV0dXJuIDEmdFt2YV0/MzoyfXZhciBncz1udWxsO2Z1bmN0aW9uIGJzKCl7Z3M9bnVsbH1mdW5jdGlvbiBfcyh0LGUsbixpLHIpe3JldHVybiBuZ0Rldk1vZGUmJm5nRGV2TW9kZS50VmlldysrLHtpZDp0LHRlbXBsYXRlOmUsdmlld1F1ZXJ5OnIsbm9kZTpudWxsLGRhdGE6YXMuc2xpY2UoKSxjaGlsZEluZGV4Oi0xLGJpbmRpbmdTdGFydEluZGV4Oi0xLGRpcmVjdGl2ZXM6bnVsbCxmaXJzdFRlbXBsYXRlUGFzczohMCxpbml0SG9va3M6bnVsbCxjaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLHBpcGVEZXN0cm95SG9va3M6bnVsbCxjbGVhbnVwOm51bGwsaG9zdEJpbmRpbmdzOm51bGwsY29udGVudFF1ZXJpZXM6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4scGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBpP2koKTppLGN1cnJlbnRNYXRjaGVzOm51bGx9fWZ1bmN0aW9uIHdzKHQsZSl7bmdEZXZNb2RlJiZqcygtMSksWmE9dDt2YXIgbixpPXQuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKSxyPSJzdHJpbmciPT10eXBlb2YgZT9EYShpKT9pLnNlbGVjdFJvb3RFbGVtZW50KGUpOmkucXVlcnlTZWxlY3RvcihlKTplO2lmKG5nRGV2TW9kZSYmIXIpdGhyb3cgbmV3IEVycm9yKCJSZW5kZXJlcjogIisoInN0cmluZyI9PXR5cGVvZiBlPyJIb3N0IG5vZGUgd2l0aCBzZWxlY3RvciBub3QgZm91bmQ6IjoiSG9zdCBub2RlIGlzIHJlcXVpcmVkOiIpKyIgWyIrKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUpP24ubmFtZXx8bjoic3RyaW5nIj09dHlwZW9mIG4/bjpudWxsPT1uPyIiOiIiK24pKyJdIik7cmV0dXJuIHJ9ZnVuY3Rpb24geHModCxlLG4saSxyLG8pe3JldHVybiBuZ0Rldk1vZGUmJm5nRGV2TW9kZS50Tm9kZSsrLHt0eXBlOnQsaW5kZXg6ZSxmbGFnczowLHRhZ05hbWU6bixhdHRyczppLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6dm9pZCAwLG91dHB1dHM6dm9pZCAwLHRWaWV3czpvLG5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDpyLGR5bmFtaWNDb250YWluZXJOb2RlOm51bGwsZGV0YWNoZWQ6bnVsbCxzdHlsaW5nVGVtcGxhdGU6bnVsbCxwcm9qZWN0aW9uOm51bGx9fWZ1bmN0aW9uIENzKHQsZSl7bmdEZXZNb2RlJiZqcyhlKTt2YXIgbj1lc1tlXTtuZ0Rldk1vZGUmJkZhKG4sMyksbmdEZXZNb2RlJiZjYShuLmRhdGEsIkNvbXBvbmVudCdzIGhvc3Qgbm9kZSBzaG91bGQgaGF2ZSBhbiBMVmlld0RhdGEgYXR0YWNoZWQuIik7dmFyIGk9bi5kYXRhO1NzKGkpJiY2JmlbdmFdJiYobmdEZXZNb2RlJiZqcyh0LG5zKSxUcyhpLG4sbnNbdF0pKX1mdW5jdGlvbiBTcyh0KXtyZXR1cm4gOD09KDgmdFt2YV0pfWZ1bmN0aW9uIEVzKHQpe2Zvcih2YXIgZT0wO2U8dC5jb21wb25lbnRzLmxlbmd0aDtlKyspe3ZhciBuPXQuY29tcG9uZW50c1tlXSxpPUlzKG4pO25nRGV2TW9kZSYmY2EoaS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLHlzKGksT3Mobiksbil9fWZ1bmN0aW9uIE9zKHQpe25nRGV2TW9kZSYmY2EodCwiY29tcG9uZW50Iik7Zm9yKHZhciBlPUlzKHQpLnZpZXc7ZVtwYV07KWU9ZVtwYV07cmV0dXJuIGV9ZnVuY3Rpb24ga3ModCl7dmFyIGU9SXModCk7bmdEZXZNb2RlJiZjYShlLmRhdGEsIkNvbXBvbmVudCBob3N0IG5vZGUgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGFuIExWaWV3RGF0YSBpbnN0YW5jZS4iKSxUcyhlLmRhdGEsZSx0KX1mdW5jdGlvbiBUcyh0LGUsbil7dmFyIGk9bHModCxlKSxyPXRbZGFdLG89ci50ZW1wbGF0ZSxhPXIudmlld1F1ZXJ5O3RyeXticygpLGZ1bmN0aW9uKGUsbixpKXtlJiYxJnRbdmFdJiZlKDEsaSl9KGEsMCxuKSxvKHZzKHQpLG4pLGZzKCksZnVuY3Rpb24odCxlKXt0JiZ0KDIsZSl9KGEsbil9ZmluYWxseXtjcyhpKX19ZnVuY3Rpb24ganModCxlKXtudWxsPT1lJiYoZT1lcyksZnVuY3Rpb24odCxlKXt0Pj0oZT9lLmxlbmd0aDowKSYmZmEoImluZGV4IGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgZGF0YSBpbmRleCIpfSh0LGV8fGVzKX1mdW5jdGlvbiBBcyh0LGUpe251bGw9PWUmJihlPWVzKSxsYShlLmxlbmd0aCx0LCJpbmRleCAiK3QrIiBleHBlY3RlZCB0byBiZSBhdCB0aGUgZW5kIG9mIGFyciAobGVuZ3RoICIrZS5sZW5ndGgrIikiKX1mdW5jdGlvbiBJcyh0KXtuZ0Rldk1vZGUmJmNhKHQsImV4cGVjdGluZyBjb21wb25lbnQgZ290IG51bGwiKTt2YXIgZT10W2lzXTtyZXR1cm4gbmdEZXZNb2RlJiZjYSh0LCJvYmplY3QgaXMgbm90IGEgY29tcG9uZW50IiksZX12YXIgUnM9cnM7ZnVuY3Rpb24gTXModCl7cmV0dXJue2NvbXBvbmVudHM6W10sc2NoZWR1bGVyOnQsY2xlYW46UnN9fXZhciBQcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl92aWV3PXQsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1udWxsLHRoaXMuX2xWaWV3Tm9kZT1udWxsLHRoaXMuY29udGV4dD1lfXJldHVybiB0LnByb3RvdHlwZS5fc2V0Q29tcG9uZW50Q29udGV4dD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZpZXc9dCx0aGlzLmNvbnRleHQ9ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzI9PSgzMiZ0aGlzLl92aWV3W3ZhXSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0LGU7dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmU3ModGhpcy5fdmlldykmJih0aGlzLl92aWV3Q29udGFpbmVyUmVmLmRldGFjaCh0aGlzLl92aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcykpLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9bnVsbCksRGEoZT0odD10aGlzLl92aWV3KVtTYV0pJiZlLmRlc3Ryb3lOb2RlJiZmdW5jdGlvbihlLG4saSxyLG8sYSl7Zm9yKHZhciBzPXRbZ2FdLHU9LTE7czspe3ZhciBsPW51bGwsYz1zLnROb2RlLnR5cGU7aWYoMz09PWMpcWEoMixyLG51bGwscy5uYXRpdmUsYSkscy5keW5hbWljTENvbnRhaW5lck5vZGUmJnFhKDIscixudWxsLHMuZHluYW1pY0xDb250YWluZXJOb2RlLm5hdGl2ZSxhKTtlbHNlIGlmKDA9PT1jKXtxYSgyLHIsbnVsbCxzLm5hdGl2ZSxhKTt2YXIgZj1zLGg9Zi5keW5hbWljTENvbnRhaW5lck5vZGU/Zi5keW5hbWljTENvbnRhaW5lck5vZGUuZGF0YTpmLmRhdGE7KGw9aFtNYV0ubGVuZ3RoP3phKGhbTWFdWzBdKTpudWxsKSYmKGE9Zi5keW5hbWljTENvbnRhaW5lck5vZGU/Zi5keW5hbWljTENvbnRhaW5lck5vZGUubmF0aXZlOmYubmF0aXZlKX1lbHNlIGlmKDE9PT1jKXt2YXIgZD1IYShzLnZpZXcpLHA9ZC50Tm9kZS5wcm9qZWN0aW9uW3MudE5vZGUucHJvamVjdGlvbl07VWFbKyt1XT1zLGw9cD9kLmRhdGFbcGFdW3AuaW5kZXhdOm51bGx9ZWxzZSBsPXphKHMpO2lmKG51bGw9PT1sKWZvcihudWxsPT09KGw9VmEocykpJiY4MTkyJnMudE5vZGUuZmxhZ3MmJihsPVZhKFVhW3UtLV0pKTtzJiYhbDspe2lmKG51bGw9PT0ocz1CYShzKSl8fHM9PT1uKXJldHVybiBudWxsO3MudE5vZGUubmV4dHx8MCE9PWN8fChhPXMubmF0aXZlKSxsPVZhKHMpfXM9bH19KDAsdFtnYV0sMCxlKSxmdW5jdGlvbih0KXtpZigtMT09PXRbZGFdLmNoaWxkSW5kZXgpcmV0dXJuIFlhKHQpO2Zvcih2YXIgZT1HYSh0KTtlOyl7dmFyIG49bnVsbDtpZihlLmxlbmd0aD49aGE/ZVtkYV0uY2hpbGRJbmRleD4tMSYmKG49R2EoZSkpOmVbTWFdLmxlbmd0aCYmKG49ZVtNYV1bMF0uZGF0YSksbnVsbD09bil7Zm9yKDtlJiYhZVttYV0mJmUhPT10OylZYShlKSxlPVFhKGUsdCk7WWEoZXx8dCksbj1lJiZlW21hXX1lPW59fSh0KSx0W3ZhXXw9MzJ9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZSxuO249dCxmdW5jdGlvbih0KXtyZXR1cm4gdFt3YV18fCh0W3dhXT1bXSl9KGU9dGhpcy5fdmlldykucHVzaChuKSxlW2RhXS5maXJzdFRlbXBsYXRlUGFzcyYmZnVuY3Rpb24odCl7cmV0dXJuIHRbZGFdLmNsZWFudXB8fCh0W2RhXS5jbGVhbnVwPVtdKX0oZSkucHVzaChlW3dhXS5sZW5ndGgtMSxudWxsKX0sdC5wcm90b3R5cGUubWFya0ZvckNoZWNrPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10O251bGwhPWVbcGFdOyllW3ZhXXw9NCxlPWVbcGFdO3ZhciBuLGk7ZVt2YV18PTQsbmdEZXZNb2RlJiZjYShlW3hhXSwicm9vdENvbnRleHQiKSwobj1lW3hhXSkuY2xlYW49PXJzJiYobi5jbGVhbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtyZXR1cm4gaT10fSksbi5zY2hlZHVsZXIoZnVuY3Rpb24oKXtFcyhuKSxpKG51bGwpLG4uY2xlYW49cnN9KSl9KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3W3ZhXSY9LTl9LHQucHJvdG90eXBlLnJlYXR0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlld1t2YV18PTh9LHQucHJvdG90eXBlLmRldGVjdENoYW5nZXM9ZnVuY3Rpb24oKXtrcyh0aGlzLmNvbnRleHQpfSx0LnByb3RvdHlwZS5jaGVja05vQ2hhbmdlcz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXtzcz0hMDt0cnl7a3ModCl9ZmluYWxseXtzcz0hMX19KHRoaXMuY29udGV4dCl9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXR9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbH0sdC5wcm90b3R5cGUuYXR0YWNoVG9BcHBSZWY9ZnVuY3Rpb24odCl7dGhpcy5fYXBwUmVmPXR9LHR9KCksRHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIG5nRGV2TW9kZSYmKHZvaWQgMD09PWUmJihlPSJUeXBlIHBhc3NlZCBpbiBpcyBub3QgQ29tcG9uZW50VHlwZSwgaXQgZG9lcyBub3QgaGF2ZSAnbmdDb21wb25lbnREZWYnIHByb3BlcnR5LiIpLHQubmdDb21wb25lbnREZWZ8fGZhKGUpKSxuZXcgVnModC5uZ0NvbXBvbmVudERlZik7dmFyIGV9LGV9KHp0KTtmdW5jdGlvbiBOcyh0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZlLnB1c2goe3Byb3BOYW1lOnRbbl0sdGVtcGxhdGVOYW1lOm59KTtyZXR1cm4gZX12YXIgRnM9bmV3IGMoIlJPT1RfQ09OVEVYVF9UT0tFTiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gTXMoSyhMcykpfX0pLExzPW5ldyBjKCJTQ0hFRFVMRVJfVE9LRU4iLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyl9fSksVnM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uY29tcG9uZW50RGVmPWUsbi5jb21wb25lbnRUeXBlPWUudHlwZSxuLnNlbGVjdG9yPWUuc2VsZWN0b3JzWzBdWzBdLG4ubmdDb250ZW50U2VsZWN0b3JzPVtdLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTnModGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm91dHB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTnModGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByLG8sYT12b2lkIDA9PT1uLHM9aT9pLmluamVjdG9yLmdldChfZSk6TmEsdT1hPyhyPXRoaXMuc2VsZWN0b3IsRGEobz1zLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYucmVuZGVyZXJUeXBlKXx8V2EpP28uY3JlYXRlRWxlbWVudChyLGdzKTpudWxsPT09Z3M/by5jcmVhdGVFbGVtZW50KHIpOm8uY3JlYXRlRWxlbWVudE5TKGdzLHIpKTp3cyhzLG4pLGw9aSYmIWE/aS5pbmplY3Rvci5nZXQoRnMpOk1zKHJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykpLGM9ZHMocy5jcmVhdGVSZW5kZXJlcih1LHRoaXMuY29tcG9uZW50RGVmLnJlbmRlcmVyVHlwZSksX3MoLTEsbnVsbCxudWxsLG51bGwsbnVsbCksbCx0aGlzLmNvbXBvbmVudERlZi5vblB1c2g/NDoyKTtjW0NhXT1pJiZpLmluamVjdG9yfHxudWxsO3ZhciBmLGgsZD1scyhjLG51bGwpO3RyeXtpZihzLmJlZ2luJiZzLmJlZ2luKCksaD1mdW5jdGlvbih0LGUsbixpKXtYYT0hMSxLYT1udWxsO3ZhciByLG89cHMoMCwzLGUsbnVsbCxudWxsLGRzKFdhLChyPW4udGVtcGxhdGUpLm5nUHJpdmF0ZURhdGF8fChyLm5nUHJpdmF0ZURhdGE9X3MoLTEscixuLmRpcmVjdGl2ZURlZnMsbi5waXBlRGVmcyxuLnZpZXdRdWVyeSkpLG51bGwsbi5vblB1c2g/NDoyLGkpKTtyZXR1cm4gdXMmJihvLnROb2RlLmZsYWdzPTQwOTYsbi5kaVB1YmxpYyYmbi5kaVB1YmxpYyhuKSwkYS5kaXJlY3RpdmVzPVtuXSksb30oMCx1LHRoaXMuY29tcG9uZW50RGVmKSxsLmNvbXBvbmVudHMucHVzaChmPWZ1bmN0aW9uKHQsZSxuKXtpZihuZ0Rldk1vZGUmJmxhKGVzW2JhXSwtMSwiZGlyZWN0aXZlcyBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgYW55IGJpbmRpbmdzIiksbmdEZXZNb2RlJiZsYShYYSwhMCwicHJldmlvdXNPclBhcmVudE5vZGUgc2hvdWxkIGJlIGEgcGFyZW50IiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaXMse2VudW1lcmFibGU6ITEsdmFsdWU6S2F9KSxudWxsPT1ucyYmKGVzW19hXT1ucz1bXSksbmdEZXZNb2RlJiZBcyh0LG5zKSxuc1t0XT1lLHVzKXt2YXIgaT1LYS50Tm9kZS5mbGFnczswPT0oNDA5NSZpKT9LYS50Tm9kZS5mbGFncz10PDwxNHw0MDk2Jml8MToobmdEZXZNb2RlJiY0MDk1PT0oNDA5NSZpKSYmZmEoIlJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgZGlyZWN0aXZlcyIpLEthLnROb2RlLmZsYWdzKyspfWVsc2V7dmFyIHI9bi5kaVB1YmxpYztyJiZyKG4pfXJldHVybiBudWxsIT1uLmF0dHJpYnV0ZXMmJjM9PUthLnROb2RlLnR5cGUmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPURhKFdhKSxpPTA7aTxlLmxlbmd0aDspe3ZhciByPWVbaV07aWYoMT09PXIpYnJlYWs7aWYocj09PVBhKWkrPTI7ZWxzZSBpZihuZ0Rldk1vZGUmJm5nRGV2TW9kZS5yZW5kZXJlclNldEF0dHJpYnV0ZSsrLDA9PT1yKXt2YXIgbz1lW2krMV0sYT1lW2krMl0scz1lW2krM107bj9XYS5zZXRBdHRyaWJ1dGUodCxhLHMsbyk6dC5zZXRBdHRyaWJ1dGVOUyhvLGEscyksaSs9NH1lbHNlIHM9ZVtpKzFdLG4/V2Euc2V0QXR0cmlidXRlKHQscixzKTp0LnNldEF0dHJpYnV0ZShyLHMpLGkrPTJ9fShLYS5uYXRpdmUsbi5hdHRyaWJ1dGVzKSxlfSgwLHRoaXMuY29tcG9uZW50RGVmLmZhY3RvcnkoKSx0aGlzLmNvbXBvbmVudERlZikpLGZ1bmN0aW9uKHQsZSxuKXt0JiZudWxsIT10LmNoYW5nZURldGVjdG9yUmVmJiZ0LmNoYW5nZURldGVjdG9yUmVmLl9zZXRDb21wb25lbnRDb250ZXh0KGguZGF0YSxmKX0oaC5ub2RlSW5qZWN0b3IpLGZ1bmN0aW9uKHQsZSl7dmFyIG49SXModCksaT1uLnZpZXdbZGFdOyhmdW5jdGlvbih0LGUsbixpKXtuZ0Rldk1vZGUmJmxhKGkuZmlyc3RUZW1wbGF0ZVBhc3MsITAsIlNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBmaXJzdCB0ZW1wbGF0ZSBwYXNzIiksZSYmKGkuaW5pdEhvb2tzfHwoaS5pbml0SG9va3M9W10pKS5wdXNoKDAsZSksbiYmKChpLmluaXRIb29rc3x8KGkuaW5pdEhvb2tzPVtdKSkucHVzaCgwLG4pLChpLmNoZWNrSG9va3N8fChpLmNoZWNrSG9va3M9W10pKS5wdXNoKDAsbikpfSkoMCxlLm9uSW5pdCxlLmRvQ2hlY2ssaSksZnVuY3Rpb24odCxlKXtpZihlLmZpcnN0VGVtcGxhdGVQYXNzKWZvcih2YXIgbj10Pj4xNCxpPW4rKDQwOTUmdCkscj1uO3I8aTtyKyspe3ZhciBvPWUuZGlyZWN0aXZlc1tyXTtPYShvLGUsciksa2EobyxlLHIpLFRhKG8sZSxyKX19KG4udE5vZGUuZmxhZ3MsaSl9KGYsdGhpcy5jb21wb25lbnREZWYpLGUpZm9yKHZhciBwPTAsbT1oLnROb2RlLnByb2plY3Rpb249W10seT0wO3k8ZS5sZW5ndGg7eSsrKXtmb3IodmFyIHY9ZVt5XSxnPW51bGwsYj1udWxsLF89MDtfPHYubGVuZ3RoO18rKyl7dmFyIHc9cHMoKytwLDMsdltfXSxudWxsLG51bGwpO2I/Yi5uZXh0PXcudE5vZGU6Zz13LnROb2RlLGI9dy50Tm9kZX1tLnB1c2goZyl9bXMoaCxoLmRhdGFbZGFdLGYsMSksaC5kYXRhW3ZhXSY9LTJ9ZmluYWxseXtscyhkLG51bGwpLHMuZW5kJiZzLmVuZCgpfXZhciB4PW5ldyB6cyh0aGlzLmNvbXBvbmVudFR5cGUsZixjLHQsdSk7cmV0dXJuIGEmJih4Lmhvc3RWaWV3Ll9sVmlld05vZGUudE5vZGUuY2hpbGQ9aC50Tm9kZSkseH0sZX0oUHQpLHpzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvKXt2YXIgYT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGEuZGVzdHJveUNicz1bXSxhLmluc3RhbmNlPW4sYS5ob3N0Vmlldz1hLmNoYW5nZURldGVjdG9yUmVmPW5ldyBQcyhpLG4pLGEuaG9zdFZpZXcuX2xWaWV3Tm9kZT1wcygtMSwyLG51bGwsbnVsbCxudWxsLGkpLGEuaW5qZWN0b3I9cixhLmxvY2F0aW9uPW5ldyBDZShvKSxhLmNvbXBvbmVudFR5cGU9ZSxhfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuZ0Rldk1vZGUmJmNhKHRoaXMuZGVzdHJveUNicywiTmdNb2R1bGUgYWxyZWFkeSBkZXN0cm95ZWQiKSx0aGlzLmRlc3Ryb3lDYnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5kZXN0cm95Q2JzPW51bGx9LGUucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXtuZ0Rldk1vZGUmJmNhKHRoaXMuZGVzdHJveUNicywiTmdNb2R1bGUgYWxyZWFkeSBkZXN0cm95ZWQiKSx0aGlzLmRlc3Ryb3lDYnMucHVzaCh0KX0sZX0oTXQpLEJzPXtwcm92aWRlOnp0LHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERzfSxkZXBzOltdfSxVcz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO2kuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10saS5kZXN0cm95Q2JzPVtdO3ZhciByPWUubmdNb2R1bGVEZWY7cmV0dXJuIG5nRGV2TW9kZSYmY2EociwiTmdNb2R1bGUgJyIreChlKSsiJyBpcyBub3QgYSBzdWJ0eXBlIG9mICdOZ01vZHVsZVR5cGUnLiIpLGkuX2Jvb3RzdHJhcENvbXBvbmVudHM9ci5ib290c3RyYXAsaS5pbmplY3Rvcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHZvaWQgMD09PW4mJihuPW51bGwpLGU9ZXx8ZHQoKSxuZXcgcHQodCxuLGUpfShlLG4sW0JzLHtwcm92aWRlOkh0LHVzZVZhbHVlOml9XSksaS5pbnN0YW5jZT1pLmluamVjdG9yLmdldChlKSxpLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgRHMsaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7bmdEZXZNb2RlJiZjYSh0aGlzLmRlc3Ryb3lDYnMsIk5nTW9kdWxlIGFscmVhZHkgZGVzdHJveWVkIiksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuZGVzdHJveUNicz1udWxsfSxlLnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7bmdEZXZNb2RlJiZjYSh0aGlzLmRlc3Ryb3lDYnMsIk5nTW9kdWxlIGFscmVhZHkgZGVzdHJveWVkIiksdGhpcy5kZXN0cm95Q2JzLnB1c2godCl9LGV9KEh0KTshZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4ubW9kdWxlVHlwZT1lLG59T2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVcyh0aGlzLm1vZHVsZVR5cGUsdCl9fShxdCl9LERLVGI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sRWhtazpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIGkscj1uKCJlaWhzIik7ZnVuY3Rpb24gbygpe3RyeXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2godCl7cmV0dXJuIHIuYS5lPXQsci5hfX1mdW5jdGlvbiBhKHQpe3JldHVybiBpPXQsb319LCJFbjgrIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKX0sIkYvWEwiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCJua1k3Iikscj1uKCJJVVRiIiksbz1uKCJHNUoxIiksYT1uKCJQVThMIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3N3aXRjaChPYmplY3QoaS5hKShuKT90LnBvcCgpOm49dm9pZCAwLHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIE9iamVjdChvLmIpKG4pO2Nhc2UgMTpyZXR1cm4gbj9PYmplY3Qoci5hKSh0LG4pOk9iamVjdChhLmEpKHRbMF0pO2RlZmF1bHQ6cmV0dXJuIE9iamVjdChyLmEpKHQsbil9fX0sRkZPbzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGk9bigibXJTRyIpLHI9bigiMkJkaiIpLG89bigiNmFodyIpLGE9bigicHVnVCIpLHM9bigiTC9WOSIpLHU9bigiaUx4USIpLGw9bigiREtUYiIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChyLnN5bmNFcnJvclZhbHVlPW51bGwsci5zeW5jRXJyb3JUaHJvd249ITEsci5zeW5jRXJyb3JUaHJvd2FibGU9ITEsci5pc1N0b3BwZWQ9ITEsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnIuZGVzdGluYXRpb249by5hO2JyZWFrO2Nhc2UgMTppZighZSl7ci5kZXN0aW5hdGlvbj1vLmE7YnJlYWt9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZihoKGUpKXt2YXIgYT1lW3MuYV0oKTtyLnN5bmNFcnJvclRocm93YWJsZT1hLnN5bmNFcnJvclRocm93YWJsZSxyLmRlc3RpbmF0aW9uPWEsYS5hZGQocil9ZWxzZSByLnN5bmNFcnJvclRocm93YWJsZT0hMCxyLmRlc3RpbmF0aW9uPW5ldyBmKHIsZSk7YnJlYWt9ZGVmYXVsdDpyLnN5bmNFcnJvclRocm93YWJsZT0hMCxyLmRlc3RpbmF0aW9uPW5ldyBmKHIsZSxuLGkpfXJldHVybiByfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZVtzLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsbixpKXt2YXIgcj1uZXcgZSh0LG4saSk7cmV0dXJuIHIuc3luY0Vycm9yVGhyb3dhYmxlPSExLHJ9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc1N0b3BwZWR8fHRoaXMuX25leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZUFuZFJlY3ljbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnQsZT10aGlzLl9wYXJlbnRzO3JldHVybiB0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9wYXJlbnRzPW51bGwsdGhpcy51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkPSExLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuX3BhcmVudD10LHRoaXMuX3BhcmVudHM9ZSx0aGlzfSxlfShhLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxhKXt2YXIgcyx1PXQuY2FsbCh0aGlzKXx8dGhpczt1Ll9wYXJlbnRTdWJzY3JpYmVyPWU7dmFyIGw9dTtyZXR1cm4gT2JqZWN0KHIuYSkobik/cz1uOm4mJihzPW4ubmV4dCxpPW4uZXJyb3IsYT1uLmNvbXBsZXRlLG4hPT1vLmEmJihsPU9iamVjdC5jcmVhdGUobiksT2JqZWN0KHIuYSkobC51bnN1YnNjcmliZSkmJnUuYWRkKGwudW5zdWJzY3JpYmUuYmluZChsKSksbC51bnN1YnNjcmliZT11LnVuc3Vic2NyaWJlLmJpbmQodSkpKSx1Ll9jb250ZXh0PWwsdS5fbmV4dD1zLHUuX2Vycm9yPWksdS5fY29tcGxldGU9YSx1fXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZS5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fX3RyeU9yU2V0RXJyb3IoZSx0aGlzLl9uZXh0LHQpJiZ0aGlzLnVuc3Vic2NyaWJlKCk6dGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fbmV4dCx0KX19LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcixuPXUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nO2lmKHRoaXMuX2Vycm9yKW4mJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZSBpZihlLnN5bmNFcnJvclRocm93YWJsZSluPyhlLnN5bmNFcnJvclZhbHVlPXQsZS5zeW5jRXJyb3JUaHJvd249ITApOk9iamVjdChsLmEpKHQpLHRoaXMudW5zdWJzY3JpYmUoKTtlbHNle2lmKHRoaXMudW5zdWJzY3JpYmUoKSxuKXRocm93IHQ7T2JqZWN0KGwuYSkodCl9fX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtpZih0aGlzLl9jb21wbGV0ZSl7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29tcGxldGUuY2FsbCh0Ll9jb250ZXh0KX07dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLG4pLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKG4pLHRoaXMudW5zdWJzY3JpYmUoKSl9ZWxzZSB0aGlzLnVuc3Vic2NyaWJlKCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yVW5zdWI9ZnVuY3Rpb24odCxlKXt0cnl7dC5jYWxsKHRoaXMuX2NvbnRleHQsZSl9Y2F0Y2godCl7aWYodGhpcy51bnN1YnNjcmliZSgpLHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7T2JqZWN0KGwuYSkodCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yU2V0RXJyb3I9ZnVuY3Rpb24odCxlLG4pe2lmKCF1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyBuZXcgRXJyb3IoImJhZCBjYWxsIik7dHJ5e2UuY2FsbCh0aGlzLl9jb250ZXh0LG4pfWNhdGNoKGUpe3JldHVybiB1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz8odC5zeW5jRXJyb3JWYWx1ZT1lLHQuc3luY0Vycm9yVGhyb3duPSEwLCEwKTooT2JqZWN0KGwuYSkoZSksITApfXJldHVybiExfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO3RoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9wYXJlbnRTdWJzY3JpYmVyPW51bGwsdC51bnN1YnNjcmliZSgpfSxlfShjKTtmdW5jdGlvbiBoKHQpe3JldHVybiB0IGluc3RhbmNlb2YgY3x8InN5bmNFcnJvclRocm93YWJsZSJpbiB0JiZ0W3MuYV19fSxGVlN5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIGk9ZnVuY3Rpb24oKXt9LHI9ZnVuY3Rpb24oKXt9LG89ZnVuY3Rpb24oKXt9LGE9ZnVuY3Rpb24oKXt0aGlzLmFsaWduPSJzdGFydCJ9LHM9ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24oKXt9LGw9ZnVuY3Rpb24oKXt9LGM9ZnVuY3Rpb24oKXt9LGY9ZnVuY3Rpb24oKXt9fSxGYk45OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCI4bU1yIiksbigiRnpxYyIpLG4oIldmNHAiKSxuKCJkV1pnIiksbigiSXAwUiIpLGkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhIChtYXgtd2lkdGg6NTk5cHgpey5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkubGIoMixbaS5hYihudWxsLDApLGkuYWIobnVsbCwxKV0sbnVsbCxudWxsKX19LEZ4YjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pO3ZhciBpPW4oIjZibEYiKSxyPW4oIit0SjQiKSxvPW4oIlM1WFEiKSxhPW4oInU2N0QiKSxzPW4oIkpjUnYiKSx1PW4oIjJlUGwiKSxsPW4oIi9XWXYiKSxjPW4oIk1jU28iKSxmPW4oIkVuOCsiKSxoPW4oInhUbGEiKSxkPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBpLmEpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9pc1NjYWxhcj8oZS5uZXh0KHQudmFsdWUpLHZvaWQgZS5jb21wbGV0ZSgpKTp0LnN1YnNjcmliZShlKX07aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbaC5hXSlyZXR1cm4gT2JqZWN0KHMuYSkodCk7aWYoT2JqZWN0KHUuYSkodCkpcmV0dXJuIE9iamVjdChyLmEpKHQpO2lmKE9iamVjdChsLmEpKHQpKXJldHVybiBPYmplY3Qoby5hKSh0KTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtmLmFdKXJldHVybiBPYmplY3QoYS5hKSh0KTt2YXIgZT1PYmplY3QoYy5hKSh0KT8iYW4gaW52YWxpZCBvYmplY3QiOiInIit0KyInIjt0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgcHJvdmlkZWQgIitlKyIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgQXJyYXksIG9yIEl0ZXJhYmxlLiIpfX0sRnpxYzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCJJcDBSIikscj1uKCJDY25HIiksbz1uZXcgci5xKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHIuWSkoaS5kKX19KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdlPW5ldyByLm4sdCl7dmFyIGU9KHQuYm9keT90LmJvZHkuZGlyOm51bGwpfHwodC5kb2N1bWVudEVsZW1lbnQ/dC5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpO3RoaXMudmFsdWU9Imx0ciI9PT1lfHwicnRsIj09PWU/ZToibHRyIn19cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuWSkobyw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHM9ZnVuY3Rpb24oKXt9fSxHNUoxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oIjZibEYiKSxyPW5ldyBpLmEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29tcGxldGUoKX0pO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpLmEoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9KX0odCk6cn19LEdpM2k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkZGT28iKSxvPW4oIlQxRE0iKTtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW8uYSksZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgcyh0LGUpKX19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kdWVUaW1lPXQsdGhpcy5zY2hlZHVsZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdSh0LHRoaXMuZHVlVGltZSx0aGlzLnNjaGVkdWxlcikpfSx0fSgpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZHVlVGltZT1uLHIuc2NoZWR1bGVyPWksci5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCxyLmxhc3RWYWx1ZT1udWxsLHIuaGFzVmFsdWU9ITEscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5sYXN0VmFsdWU9dCx0aGlzLmhhc1ZhbHVlPSEwLHRoaXMuYWRkKHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uPXRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGwsdGhpcy5kdWVUaW1lLHRoaXMpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZWROZXh0KCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5kZWJvdW5jZWROZXh0PWZ1bmN0aW9uKCl7aWYodGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5oYXNWYWx1ZSl7dmFyIHQ9dGhpcy5sYXN0VmFsdWU7dGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX19LGUucHJvdG90eXBlLmNsZWFyRGVib3VuY2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbjtudWxsIT09dCYmKHRoaXMucmVtb3ZlKHQpLHQudW5zdWJzY3JpYmUoKSx0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsKX0sZX0oci5hKTtmdW5jdGlvbiBsKHQpe3QuZGVib3VuY2VkTmV4dCgpfX0sSVVUYjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIGk9bigiNmJsRiIpLHI9bigicHVnVCIpLG89bigiK3RKNCIpO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gbmV3IGkuYShlP2Z1bmN0aW9uKG4pe3ZhciBpPW5ldyByLmEsbz0wO3JldHVybiBpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7byE9PXQubGVuZ3RoPyhuLm5leHQodFtvKytdKSxuLmNsb3NlZHx8aS5hZGQodGhpcy5zY2hlZHVsZSgpKSk6bi5jb21wbGV0ZSgpfSkpLGl9Ok9iamVjdChvLmEpKHQpKX19LElwMFI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwieCIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gRH0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHp9KSxuLmQoZSwidSIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgaT1uKCJDY25HIikscj1uKCJtclNHIiksbz1mdW5jdGlvbigpe30sYT1uZXcgaS5xKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpLHM9ZnVuY3Rpb24oKXt9LHU9bmV3IGkucSgiYXBwQmFzZUhyZWYiKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO3RoaXMuX3N1YmplY3Q9bmV3IGkubix0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5PWU7dmFyIHI9dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VIcmVmPXQuc3RyaXBUcmFpbGluZ1NsYXNoKGMocikpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kub25Qb3BTdGF0ZShmdW5jdGlvbih0KXtuLl9zdWJqZWN0LmVtaXQoe3VybDpuLnBhdGgoITApLHBvcDohMCxzdGF0ZTp0LnN0YXRlLHR5cGU6dC50eXBlfSl9KX1yZXR1cm4gdC5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMubm9ybWFsaXplKHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucGF0aCh0KSl9LHQucHJvdG90eXBlLmlzQ3VycmVudFBhdGhFcXVhbFRvPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSIiKSx0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoZSt0Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKG4pKX0sdC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0LnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlLnN0YXJ0c1dpdGgodCk/ZS5zdWJzdHJpbmcodC5sZW5ndGgpOmV9KHRoaXMuX2Jhc2VIcmVmLGMoZSkpKX0sdC5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiLyIhPT10WzBdJiYodD0iLyIrdCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodCl9LHQucHJvdG90eXBlLmdvPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wdXNoU3RhdGUobiwiIix0LGUpfSx0LnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShuLCIiLHQsZSl9LHQucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmZvcndhcmQoKX0sdC5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuYmFjaygpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7bmV4dDp0LGVycm9yOmUsY29tcGxldGU6bn0pfSx0Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiPyIhPT10WzBdPyI/Iit0OnR9LHQuam9pbldpdGhTbGFzaD1mdW5jdGlvbih0LGUpe2lmKDA9PXQubGVuZ3RoKXJldHVybiBlO2lmKDA9PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPTA7cmV0dXJuIHQuZW5kc1dpdGgoIi8iKSYmbisrLGUuc3RhcnRzV2l0aCgiLyIpJiZuKyssMj09bj90K2Uuc3Vic3RyaW5nKDEpOjE9PW4/dCtlOnQrIi8iK2V9LHQuc3RyaXBUcmFpbGluZ1NsYXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goLyN8XD98JC8pLG49ZSYmZS5pbmRleHx8dC5sZW5ndGg7cmV0dXJuIHQuc2xpY2UoMCxuLSgiLyI9PT10W24tMV0/MTowKSkrdC5zbGljZShuKX0sdH0oKTtmdW5jdGlvbiBjKHQpe3JldHVybiB0LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl9wbGF0Zm9ybUxvY2F0aW9uPWUsaS5fYmFzZUhyZWY9IiIsbnVsbCE9biYmKGkuX2Jhc2VIcmVmPW4pLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygxKTplfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7dmFyIGU9bC5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpO3JldHVybiBlLmxlbmd0aD4wPyIjIitlOmV9LGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2wubm9ybWFsaXplUXVlcnlQYXJhbXMoaSkpOzA9PXIubGVuZ3RoJiYocj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUscil9LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2wubm9ybWFsaXplUXVlcnlQYXJhbXMoaSkpOzA9PXIubGVuZ3RoJiYocj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUscil9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShzKSxoPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fcGxhdGZvcm1Mb2NhdGlvbj1lLG51bGw9PW4mJihuPWkuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCkpLG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJObyBiYXNlIGhyZWYgc2V0LiBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgQVBQX0JBU0VfSFJFRiB0b2tlbiBvciBhZGQgYSBiYXNlIGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LiIpO3JldHVybiBpLl9iYXNlSHJlZj1uLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIGwuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KX0sZS5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStsLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxuPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmdD8iIitlK246ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rbC5ub3JtYWxpemVRdWVyeVBhcmFtcyhpKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxlLHIpfSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitsLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKGkpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUscil9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShzKSxkPXZvaWQgMCxwPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sZF0sW1siQU0iLCJQTSJdLGQsZF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sZCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sZCxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2QveXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGQsInsxfSAnYXQnIHswfSIsZF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCIkIiwiVVMgRG9sbGFyIix7fSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKE1hdGguYWJzKHQpKSxuPXQudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1lJiYwPT09bj8xOjV9XSxtPXt9LHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5aZXJvPTBdPSJaZXJvIix0W3QuT25lPTFdPSJPbmUiLHRbdC5Ud289Ml09IlR3byIsdFt0LkZldz0zXT0iRmV3Iix0W3QuTWFueT00XT0iTWFueSIsdFt0Lk90aGVyPTVdPSJPdGhlciIsdH0oe30pLHY9bmV3IGkucSgiVXNlVjRQbHVyYWxzIiksZz1mdW5jdGlvbigpe30sYj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmxvY2FsZT1lLGkuZGVwcmVjYXRlZFBsdXJhbEZuPW4saX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbj90aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbihlfHx0aGlzLmxvY2FsZSx0KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLG49bVtlXTtpZihuKXJldHVybiBuO3ZhciBpPWUuc3BsaXQoIi0iKVswXTtpZihuPW1baV0pcmV0dXJuIG47aWYoImVuIj09PWkpcmV0dXJuIHA7dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICInK3QrJyIuJyl9KHQpWzE4XX0oZXx8dGhpcy5sb2NhbGUpKHQpKXtjYXNlIHkuWmVybzpyZXR1cm4iemVybyI7Y2FzZSB5Lk9uZTpyZXR1cm4ib25lIjtjYXNlIHkuVHdvOnJldHVybiJ0d28iO2Nhc2UgeS5GZXc6cmV0dXJuImZldyI7Y2FzZSB5Lk1hbnk6cmV0dXJuIm1hbnkiO2RlZmF1bHQ6cmV0dXJuIm90aGVyIn19LGV9KGcpO2Z1bmN0aW9uIF8odCxlKXt2YXIgbixpO2U9ZW5jb2RlVVJJQ29tcG9uZW50KGUpO3RyeXtmb3IodmFyIG89T2JqZWN0KHIuZSkodC5zcGxpdCgiOyIpKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSl7dmFyIHM9YS52YWx1ZSx1PXMuaW5kZXhPZigiPSIpLGw9T2JqZWN0KHIuYykoLTE9PXU/W3MsIiJdOltzLnNsaWNlKDAsdSkscy5zbGljZSh1KzEpXSwyKSxjPWxbMV07aWYobFswXS50cmltKCk9PT1lKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoYyl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihpPW8ucmV0dXJuKSYmaS5jYWxsKG8pfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gbnVsbH12YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5faXRlcmFibGVEaWZmZXJzPXQsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWUsdGhpcy5fbmdFbD1uLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5faW5pdGlhbENsYXNzZXM9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2xhc3MiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nQ2xhc3MiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5fcmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOnQsdGhpcy5fcmF3Q2xhc3MmJihPYmplY3QoaS5VYSkodGhpcy5fcmF3Q2xhc3MpP3RoaXMuX2l0ZXJhYmxlRGlmZmVyPXRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKTp0aGlzLl9rZXlWYWx1ZURpZmZlcj10aGlzLl9rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe2lmKHRoaXMuX2l0ZXJhYmxlRGlmZmVyKXt2YXIgdD10aGlzLl9pdGVyYWJsZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTt0JiZ0aGlzLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcyh0KX1lbHNlIGlmKHRoaXMuX2tleVZhbHVlRGlmZmVyKXt2YXIgZT10aGlzLl9rZXlWYWx1ZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTtlJiZ0aGlzLl9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKX19LHQucHJvdG90eXBlLl9hcHBseUtleVZhbHVlQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaFJlbW92ZWRJdGVtKGZ1bmN0aW9uKHQpe3QucHJldmlvdXNWYWx1ZSYmZS5fdG9nZ2xlQ2xhc3ModC5rZXksITEpfSl9LHQucHJvdG90eXBlLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQuaXRlbSl0aHJvdyBuZXcgRXJyb3IoIk5nQ2xhc3MgY2FuIG9ubHkgdG9nZ2xlIENTUyBjbGFzc2VzIGV4cHJlc3NlZCBhcyBzdHJpbmdzLCBnb3QgIitPYmplY3QoaS5pYikodC5pdGVtKSk7ZS5fdG9nZ2xlQ2xhc3ModC5pdGVtLCEwKX0pLHQuZm9yRWFjaFJlbW92ZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0Lml0ZW0sITEpfSl9LHQucHJvdG90eXBlLl9hcHBseUNsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITApfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3MobiwhIXRbbl0pfSkpfSx0LnByb3RvdHlwZS5fcmVtb3ZlQ2xhc3Nlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgU2V0P3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMSl9KTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCExKX0pKX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczsodD10LnRyaW0oKSkmJnQuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2U/bi5fcmVuZGVyZXIuYWRkQ2xhc3Mobi5fbmdFbC5uYXRpdmVFbGVtZW50LHQpOm4uX3JlbmRlcmVyLnJlbW92ZUNsYXNzKG4uX25nRWwubmF0aXZlRWxlbWVudCx0KX0pfSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuJGltcGxpY2l0PXQsdGhpcy5uZ0Zvck9mPWUsdGhpcy5pbmRleD1uLHRoaXMuY291bnQ9aX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5pbmRleH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxhc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImV2ZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib2RkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXZlbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fdGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPW4sdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nRm9yT2YiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdGb3JPZj10LHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nRm9yVHJhY2tCeSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFja0J5Rm59LHNldDpmdW5jdGlvbih0KXtPYmplY3QoaS5aKSgpJiZudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInRyYWNrQnkgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSsiLiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MvdHMvbGF0ZXN0L2FwaS9jb21tb24vaW5kZXgvTmdGb3ItZGlyZWN0aXZlLmh0bWwjISNjaGFuZ2UtcHJvcGFnYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiksdGhpcy5fdHJhY2tCeUZuPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRlbXBsYXRlIix7c2V0OmZ1bmN0aW9uKHQpe3QmJih0aGlzLl90ZW1wbGF0ZT10KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTt2YXIgdD10aGlzLl9uZ0Zvck9mO2lmKCF0aGlzLl9kaWZmZXImJnQpdHJ5e3RoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodCkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KX1jYXRjaChuKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAnIisoKGU9dCkubmFtZXx8dHlwZW9mIGUpKyInLiBOZ0ZvciBvbmx5IHN1cHBvcnRzIGJpbmRpbmcgdG8gSXRlcmFibGVzIHN1Y2ggYXMgQXJyYXlzLiIpfX12YXIgZTtpZih0aGlzLl9kaWZmZXIpe3ZhciBuPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO24mJnRoaXMuX2FwcGx5Q2hhbmdlcyhuKX19LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3QuZm9yRWFjaE9wZXJhdGlvbihmdW5jdGlvbih0LGkscil7aWYobnVsbD09dC5wcmV2aW91c0luZGV4KXt2YXIgbz1lLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhlLl90ZW1wbGF0ZSxuZXcgeChudWxsLGUuX25nRm9yT2YsLTEsLTEpLHIpLGE9bmV3IFModCxvKTtuLnB1c2goYSl9ZWxzZSBudWxsPT1yP2UuX3ZpZXdDb250YWluZXIucmVtb3ZlKGkpOihvPWUuX3ZpZXdDb250YWluZXIuZ2V0KGkpLGUuX3ZpZXdDb250YWluZXIubW92ZShvLHIpLGE9bmV3IFModCxvKSxuLnB1c2goYSkpfSk7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5fcGVyVmlld0NoYW5nZShuW2ldLnZpZXcsbltpXS5yZWNvcmQpO2k9MDtmb3IodmFyIHI9dGhpcy5fdmlld0NvbnRhaW5lci5sZW5ndGg7aTxyO2krKyl7dmFyIG89dGhpcy5fdmlld0NvbnRhaW5lci5nZXQoaSk7by5jb250ZXh0LmluZGV4PWksby5jb250ZXh0LmNvdW50PXIsby5jb250ZXh0Lm5nRm9yT2Y9dGhpcy5fbmdGb3JPZn10LmZvckVhY2hJZGVudGl0eUNoYW5nZShmdW5jdGlvbih0KXtlLl92aWV3Q29udGFpbmVyLmdldCh0LmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfSl9LHQucHJvdG90eXBlLl9wZXJWaWV3Q2hhbmdlPWZ1bmN0aW9uKHQsZSl7dC5jb250ZXh0LiRpbXBsaWNpdD1lLml0ZW19LHR9KCksUz1mdW5jdGlvbih0LGUpe3RoaXMucmVjb3JkPXQsdGhpcy52aWV3PWV9LEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lcj10LHRoaXMuX2NvbnRleHQ9bmV3IE8sdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWYiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPXQsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJZlRoZW4iLHtzZXQ6ZnVuY3Rpb24odCl7aygibmdJZlRoZW4iLHQpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj10LHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJZkVsc2UiLHtzZXQ6ZnVuY3Rpb24odCl7aygibmdJZkVsc2UiLHQpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj10LHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl91cGRhdGVWaWV3PWZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfSx0fSgpLE89ZnVuY3Rpb24oKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfTtmdW5jdGlvbiBrKHQsZSl7aWYoZSYmIWUuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcih0KyIgbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyIrT2JqZWN0KGkuaWIpKGUpKyInLiIpfXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbigpe3RoaXMuX2NyZWF0ZWQ9ITAsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9LHQucHJvdG90eXBlLmVuZm9yY2VTdGF0ZT1mdW5jdGlvbih0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX0sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdTd2l0Y2giLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdTd2l0Y2g9dCwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9hZGRDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfSx0LnByb3RvdHlwZS5fYWRkRGVmYXVsdD1mdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Vmlld3N8fCh0aGlzLl9kZWZhdWx0Vmlld3M9W10pLHRoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5fbWF0Y2hDYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGUsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxlfSx0LnByb3RvdHlwZS5fdXBkYXRlRGVmYXVsdENhc2VzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cyYmdCE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD10O2Zvcih2YXIgZT0wO2U8dGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aDtlKyspdGhpcy5fZGVmYXVsdFZpZXdzW2VdLmVuZm9yY2VTdGF0ZSh0KX19LHR9KCksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmdTd2l0Y2g9bixuLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgVCh0LGUpfXJldHVybiB0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX0sdH0oKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fZGlmZmVycz10LHRoaXMuX25nRWw9ZSx0aGlzLl9yZW5kZXJlcj1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nU3R5bGUiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdTdHlsZT10LCF0aGlzLl9kaWZmZXImJnQmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHQpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9kaWZmZXIpe3ZhciB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksbnVsbCl9KSx0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KX0sdC5wcm90b3R5cGUuX3NldFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuYykodC5zcGxpdCgiLiIpLDIpLGk9blswXSxvPW5bMV07bnVsbCE9KGU9bnVsbCE9ZSYmbz8iIitlK286ZSk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGksZSk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGkpfSx0fSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVTdWJzY3JpcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjpmdW5jdGlvbih0KXt0aHJvdyB0fX0pfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKHQpe3QudW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3QudW5zdWJzY3JpYmUoKX0sdH0oKSxNPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVN1YnNjcmlwdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxmdW5jdGlvbih0KXt0aHJvdyB0fSl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7fSx0fSgpKSxQPW5ldyBSLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZj10LHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsLHRoaXMuX3N0cmF0ZWd5PW51bGx9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCl9LHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2JqP3QhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybSh0KSk6dGhpcy5fbGF0ZXN0VmFsdWU9PT10aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlP3RoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU6KHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9dGhpcy5fbGF0ZXN0VmFsdWUsaS5TLndyYXAodGhpcy5fbGF0ZXN0VmFsdWUpKToodCYmdGhpcy5fc3Vic2NyaWJlKHQpLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9dGhpcy5fbGF0ZXN0VmFsdWUsdGhpcy5fbGF0ZXN0VmFsdWUpfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fb2JqPXQsdGhpcy5fc3RyYXRlZ3k9dGhpcy5fc2VsZWN0U3RyYXRlZ3kodCksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbih0LGZ1bmN0aW9uKG4pe3JldHVybiBlLl91cGRhdGVMYXRlc3RWYWx1ZSh0LG4pfSl9LHQucHJvdG90eXBlLl9zZWxlY3RTdHJhdGVneT1mdW5jdGlvbihlKXtpZihPYmplY3QoaS5XYSkoZSkpcmV0dXJuIE07aWYoT2JqZWN0KGkuVmEpKGUpKXJldHVybiBQO3Rocm93IG49dCxFcnJvcigiSW52YWxpZFBpcGVBcmd1bWVudDogJyIrZSsiJyBmb3IgcGlwZSAnIitPYmplY3QoaS5pYikobikrIiciKTt2YXIgbn0sdC5wcm90b3R5cGUuX2Rpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9LHQucHJvdG90eXBlLl91cGRhdGVMYXRlc3RWYWx1ZT1mdW5jdGlvbih0LGUpe3Q9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1lLHRoaXMuX3JlZi5tYXJrRm9yQ2hlY2soKSl9LHR9KCksTj1mdW5jdGlvbigpe30sRj1uZXcgaS5xKCJEb2N1bWVudFRva2VuIiksTD0iYnJvd3NlciIsVj0ic2VydmVyIjtmdW5jdGlvbiB6KHQpe3JldHVybiB0PT09TH1mdW5jdGlvbiBCKHQpe3JldHVybiB0PT09Vn12YXIgVT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIKE9iamVjdChpLlkpKEYpLHdpbmRvdyl9fSksdH0oKSxIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZG9jdW1lbnQ9dCx0aGlzLndpbmRvdz1lLHRoaXMub2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fXJldHVybiB0LnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24odCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheSh0KT9mdW5jdGlvbigpe3JldHVybiB0fTp0fSx0LnByb3RvdHlwZS5nZXRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbigpP1t0aGlzLndpbmRvdy5zY3JvbGxYLHRoaXMud2luZG93LnNjcm9sbFldOlswLDBdfSx0LnByb3RvdHlwZS5zY3JvbGxUb1Bvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkmJnRoaXMud2luZG93LnNjcm9sbFRvKHRbMF0sdFsxXSl9LHQucHJvdG90eXBlLnNjcm9sbFRvQW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe3ZhciBlPXRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiIyIrdCk7aWYoZSlyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChlKTt2YXIgbj10aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuYW1lPSciK3QrIiddIik7aWYobilyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChuKX19LHQucHJvdG90eXBlLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbj1mdW5jdGlvbih0KXtpZih0aGlzLnN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbigpKXt2YXIgZT10aGlzLndpbmRvdy5oaXN0b3J5O2UmJmUuc2Nyb2xsUmVzdG9yYXRpb24mJihlLnNjcm9sbFJlc3RvcmF0aW9uPXQpfX0sdC5wcm90b3R5cGUuc2Nyb2xsVG9FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1lLmxlZnQrdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsaT1lLnRvcCt0aGlzLndpbmRvdy5wYWdlWU9mZnNldCxyPXRoaXMub2Zmc2V0KCk7dGhpcy53aW5kb3cuc2Nyb2xsVG8obi1yWzBdLGktclsxXSl9LHQucHJvdG90eXBlLnN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbj1mdW5jdGlvbigpe3RyeXtyZXR1cm4hIXRoaXMud2luZG93JiYhIXRoaXMud2luZG93LnNjcm9sbFRvfWNhdGNoKHQpe3JldHVybiExfX0sdH0oKX0sSk9qOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIkNjbkciKSxyPW4oIlBUL1giKSxvPW4oIklwMFIiKSxhPShuKCJGenFjIiksbigiV2Y0cCIpKSxzPW4oIlNNc20iKSx1PW4oImRXWmciKSxsPW4oIkxDNXAiKSxjPW4oIjAvUTYiKSxmPW4oIlpZQ2kiKSxoPW4oIjZVTXgiKSxkPW4oIk1yK1giKSxwPW4oIndGdzEiKSxtPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRpdmlkZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItdG9wOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjgwcHh9W2Rpcj1ydGxdIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4MHB4fSJdLGRhdGE6e319KTtmdW5jdGlvbiB5KHQpe3JldHVybiBpLmxiKDIsW10sbnVsbCxudWxsKX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBffSk7dmFyIHY9aS5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbIi5hbW1sLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjQ4cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5hbm1sLWRhdGFbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnN0YXJ0fS5hbW1sLWljb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjQ4cHg7bWFyZ2luLXJpZ2h0OjE1cHh9LmFtbWwtaWNvbi1mYVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9LmFtbWwtc3VibWVudVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTZweH0uYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMTk3NmQyfSJdLGRhdGE6e319KTtmdW5jdGlvbiBnKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsMSwibmctbGlzdC1pdGVtIixbXSxudWxsLFtbbnVsbCwic2VsZWN0ZWRJdGVtIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMDtyZXR1cm4ic2VsZWN0ZWRJdGVtIj09PWUmJihpPSExIT09dC5jb21wb25lbnQuc2VsZWN0ZWRMaXN0SXRlbShuKSYmaSksaX0sVCx3KSksaS5RYSgxLDU3MzQ0MCxudWxsLDAsci5lLFtmLmwsci5kXSx7bm9kZTpbMCwibm9kZSJdLHNlbGVjdGVkTm9kZTpbMSwic2VsZWN0ZWROb2RlIl0sbm9kZUNvbmZpZ3VyYXRpb246WzIsIm5vZGVDb25maWd1cmF0aW9uIl19LHtzZWxlY3RlZEl0ZW06InNlbGVjdGVkSXRlbSJ9KV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLGUuY29udGV4dC4kaW1wbGljaXQsbi5jdXJyZW50Tm9kZSxuLm5vZGVDb25maWcpfSxudWxsKX1mdW5jdGlvbiBiKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsNiwiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDEsMjc4NTI4LG51bGwsMCxvLmksW2kucyxpLnQsaS5rLGkuRV0se25nQ2xhc3M6WzAsIm5nQ2xhc3MiXX0sbnVsbCksaS5RYSgyLDI3ODUyOCxudWxsLDAsby5uLFtpLnQsaS5rLGkuRV0se25nU3R5bGU6WzAsIm5nU3R5bGUiXX0sbnVsbCksKHQoKSgpLGkuUmEoMywwLG51bGwsbnVsbCwzLCJtYXQtbGlzdCIsW1siY2xhc3MiLCJtYXQtbGlzdCJdXSxudWxsLG51bGwsbnVsbCxoLmUsaC5hKSksaS5RYSg0LDQ5MTUyLG51bGwsMCxjLmEsW10sbnVsbCxudWxsKSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLDAsMSxudWxsLGcpKSxpLlFhKDYsMjc4NTI4LG51bGwsMCxvLmosW2kuUSxpLk4saS5zXSx7bmdGb3JPZjpbMCwibmdGb3JPZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uZ2V0Q2xhc3NOYW1lKCkpLHQoZSwyLDAsbi5nZXRHbG9iYWxTdHlsZSgpKSx0KGUsNiwwLG4uaXRlbXMpfSxudWxsKX1mdW5jdGlvbiBfKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsYikpLGkuUWEoMSwxNjM4NCxudWxsLDAsby5rLFtpLlEsaS5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLDAhPT1lLmNvbXBvbmVudC5pdGVtcy5sZW5ndGgpfSxudWxsKX12YXIgdz1pLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOlsiLmFtbWwtaXRlbVtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6NDhweDtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcn0uYW5tbC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzdGFydDtoZWlnaHQ6NDhweH0uYW1tbC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDo0OHB4O21hcmdpbi1yaWdodDoxNXB4fS5hbW1sLWljb24tZmFbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6NDhweH0uYW1tbC1zdWJtZW51W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxNnB4fSJdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJzbGlkZUluT3V0IixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJpbiIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IioiLG9wYWNpdHk6MH0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6IjpsZWF2ZSIsYW5pbWF0aW9uOlt7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiIqIixvcGFjaXR5Oi4yfSxvZmZzZXQ6bnVsbH0se3R5cGU6MyxzdGVwczpbe3R5cGU6NCxzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDowfSxvZmZzZXQ6bnVsbH0sdGltaW5nczozMDB9LHt0eXBlOjQsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntvcGFjaXR5OjB9LG9mZnNldDpudWxsfSx0aW1pbmdzOiIyMDBtcyBlYXNlLW91dCJ9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOm51bGx9LHt0eXBlOjEsZXhwcjoiOmVudGVyIixhbmltYXRpb246W3t0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjAiLG9wYWNpdHk6MH0sb2Zmc2V0Om51bGx9LHt0eXBlOjMsc3RlcHM6W3t0eXBlOjQsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IioifSxvZmZzZXQ6bnVsbH0sdGltaW5nczoyMDB9LHt0eXBlOjQsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntvcGFjaXR5OjF9LG9mZnNldDpudWxsfSx0aW1pbmdzOiI0MDBtcyBlYXNlLW91dCJ9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fSx7dHlwZTo3LG5hbWU6ImlzRXhwYW5kZWQiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6Im5vIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKC05MGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToieWVzIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDBkZWcpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6Im5vID0+IHllcyIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczozMDB9LG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiJ5ZXMgPT4gbm8iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6MzAwfSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24geCh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDIsInNwYW4iLFtbImNsYXNzIiwiYW1tbC1pY29uIGFtbWwtaWNvbi1mYSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSgxLDAsbnVsbCxudWxsLDEsImkiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuUWEoMiwyNzg1MjgsbnVsbCwwLG8uaSxbaS5zLGkudCxpLmssaS5FXSx7bmdDbGFzczpbMCwibmdDbGFzcyJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMiwwLGUuY29tcG9uZW50Lm5vZGUuZmFJY29uKX0sbnVsbCl9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsImFtbWwtaWNvbiBtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxkLmIsZC5hKSksaS5RYSgxLDYzODk3NixudWxsLDAscy5hLFtpLmsscy5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmpiKDIsMCxbIiAiLCIgIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLGkuYmIoZSwxKS5pbmxpbmUpLHQoZSwyLDAsbi5ub2RlLmljb24pfSl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMjQsIkBpc0V4cGFuZGVkIiwwXSxbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGQuYixkLmEpKSxpLlFhKDEsNjM4OTc2LG51bGwsMCxzLmEsW2kuayxzLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuamIoLTEsMCxbIiBrZXlib2FyZF9hcnJvd19kb3duICJdKSldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDAsMCxuLmhhc0l0ZW1zKCkmJm4uZXhwYW5kZWQ/InllcyI6Im5vIixpLmJiKGUsMSkuaW5saW5lKX0pfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwxNiwibWF0LWxpc3QtaXRlbSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIG1hdC1yaXBwbGUiXSxbIm1hdFJpcHBsZSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMCxvPXQuY29tcG9uZW50O3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuYmIodCwzKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLmJiKHQsMykuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5leHBhbmQoby5ub2RlKSYmcikscn0saC5kLGguYikpLGkuUWEoMSwyNzg1MjgsbnVsbCwwLG8uaSxbaS5zLGkudCxpLmssaS5FXSx7bmdDbGFzczpbMCwibmdDbGFzcyJdfSxudWxsKSxpLlFhKDIsMjc4NTI4LG51bGwsMCxvLm4sW2kudCxpLmssaS5FXSx7bmdTdHlsZTpbMCwibmdTdHlsZSJdfSxudWxsKSxpLlFhKDMsMTA5NzcyOCxudWxsLDMsYy5iLFtpLmssWzIsYy5lXV0sbnVsbCxudWxsKSxpLmhiKDYwMzk3OTc3NiwxLHtfbGluZXM6MX0pLGkuaGIoMzM1NTQ0MzIwLDIse19hdmF0YXI6MH0pLGkuaGIoMzM1NTQ0MzIwLDMse19pY29uOjB9KSxpLlFhKDcsMjEyOTkyLG51bGwsMCxhLnUsW2kuayxpLnosdS5hLFsyLGEua10sWzIscC5hXV0sbnVsbCxudWxsKSwodCgpKCksaS5SYSg4LDAsbnVsbCwyLDYsImRpdiIsW1siY2xhc3MiLCJhbm1sLWRhdGEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCx4KSksaS5RYSgxMCwxNjM4NCxudWxsLDAsby5rLFtpLlEsaS5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLEMpKSxpLlFhKDEyLDE2Mzg0LG51bGwsMCxvLmssW2kuUSxpLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLCh0KCkoKSxpLlJhKDEzLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImNsYXNzIiwibGFiZWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuamIoMTQsbnVsbCxbIiIsIiJdKSksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCwyLDEsbnVsbCxTKSksaS5RYSgxNiwxNjM4NCxudWxsLDAsby5rLFtpLlEsaS5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uc2VsZWN0ZWRMaXN0Q2xhc3NlcyksdChlLDIsMCxuLmdldExpc3RTdHlsZSgpKSx0KGUsNywwKSx0KGUsMTAsMCxuLm5vZGUuZmFJY29uKSx0KGUsMTIsMCxuLm5vZGUuaWNvbiksdChlLDE2LDAsbi5oYXNJdGVtcygpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLGkuYmIoZSwzKS5fYXZhdGFyfHxpLmJiKGUsMykuX2ljb24saS5iYihlLDMpLl9hdmF0YXJ8fGkuYmIoZSwzKS5faWNvbixpLmJiKGUsNykudW5ib3VuZGVkKSx0KGUsMTQsMCxuLm5vZGUubGFiZWwpfSl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDEsIm5nLWxpc3QtaXRlbSIsW10sbnVsbCxbW251bGwsInNlbGVjdGVkSXRlbSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuInNlbGVjdGVkSXRlbSI9PT1lJiYoaT0hMSE9PXQuY29tcG9uZW50LnNlbGVjdGVkTGlzdEl0ZW0obikmJmkpLGl9LFQsdykpLGkuUWEoMSw1NzM0NDAsbnVsbCwwLHIuZSxbZi5sLHIuZF0se25vZGU6WzAsIm5vZGUiXSxsZXZlbDpbMSwibGV2ZWwiXSxzZWxlY3RlZE5vZGU6WzIsInNlbGVjdGVkTm9kZSJdLG5vZGVDb25maWd1cmF0aW9uOlszLCJub2RlQ29uZmlndXJhdGlvbiJdfSx7c2VsZWN0ZWRJdGVtOiJzZWxlY3RlZEl0ZW0ifSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxlLmNvbnRleHQuJGltcGxpY2l0LG4ubGV2ZWwrMSxuLnNlbGVjdGVkTm9kZSxuLm5vZGVDb25maWd1cmF0aW9uKX0sbnVsbCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDMsImRpdiIsW10sW1syNCwiQHNsaWRlSW5PdXQiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSksaS5RYSgxLDI3ODUyOCxudWxsLDAsby5pLFtpLnMsaS50LGkuayxpLkVdLHtuZ0NsYXNzOlswLCJuZ0NsYXNzIl19LG51bGwpLCh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsTykpLGkuUWEoMywyNzg1MjgsbnVsbCwwLG8uaixbaS5RLGkuTixpLnNdLHtuZ0Zvck9mOlswLCJuZ0Zvck9mIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsbi5jbGFzc2VzKSx0KGUsMywwLG4ubm9kZUNoaWxkcmVuKX0sZnVuY3Rpb24odCxlKXt0KGUsMCwwLHZvaWQgMCl9KX1mdW5jdGlvbiBUKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsRSkpLGkuUWEoMSwxNjM4NCxudWxsLDAsby5rLFtpLlEsaS5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksaS5SYSgyLDAsbnVsbCxudWxsLDEsIm1hdC1kaXZpZGVyIixbWyJjbGFzcyIsIm1hdC1kaXZpZGVyIl0sWyJyb2xlIiwic2VwYXJhdG9yIl1dLFtbMSwiYXJpYS1vcmllbnRhdGlvbiIsMF0sWzIsIm1hdC1kaXZpZGVyLXZlcnRpY2FsIixudWxsXSxbMiwibWF0LWRpdmlkZXItaG9yaXpvbnRhbCIsbnVsbF0sWzIsIm1hdC1kaXZpZGVyLWluc2V0IixudWxsXV0sbnVsbCxudWxsLHksbSkpLGkuUWEoMyw0OTE1MixudWxsLDAsbC5hLFtdLG51bGwsbnVsbCksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxrKSksaS5RYSg1LDE2Mzg0LG51bGwsMCxvLmssW2kuUSxpLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsIW4ubm9kZS5oaWRkZW4pLHQoZSw1LDAsbi5oYXNJdGVtcygpJiZuLmV4cGFuZGVkKX0sZnVuY3Rpb24odCxlKXt0KGUsMiwwLGkuYmIoZSwzKS52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIixpLmJiKGUsMykudmVydGljYWwsIWkuYmIoZSwzKS52ZXJ0aWNhbCxpLmJiKGUsMykuaW5zZXQpfSl9fSxKY1J2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT1uKCJ4VGxhIikscj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dFtpLmFdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX19LEs5SWE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIGk9bigibXJTRyIpLHI9bigiNmJsRiIpLG89bigiRkZPbyIpLGE9bigicHVnVCIpLHM9bigiOGc4QSIpLHU9bigidU1hTyIpLGw9bigiTC9WOSIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kZXN0aW5hdGlvbj1lLG59cmV0dXJuIGkuYihlLHQpLGV9KG8uYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLm9ic2VydmVycz1bXSxlLmNsb3NlZD0hMSxlLmlzU3RvcHBlZD0hMSxlLmhhc0Vycm9yPSExLGUudGhyb3duRXJyb3I9bnVsbCxlfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZVtsLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBoKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7aWYoIXRoaXMuaXNTdG9wcGVkKWZvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLGk9ZS5zbGljZSgpLHI9MDtyPG47cisrKWlbcl0ubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxpPWUuc2xpY2UoKSxyPTA7cjxuO3IrKylpW3JdLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciB0PXRoaXMub2JzZXJ2ZXJzLGU9dC5sZW5ndGgsbj10LnNsaWNlKCksaT0wO2k8ZTtpKyspbltpXS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkPSEwLHRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPW51bGx9LGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxhLmEuRU1QVFkpOnRoaXMuaXNTdG9wcGVkPyh0LmNvbXBsZXRlKCksYS5hLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgdS5hKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgci5hO3JldHVybiB0LnNvdXJjZT10aGlzLHR9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBoKHQsZSl9LGV9KHIuYSksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmRlc3RpbmF0aW9uPWUsaS5zb3VyY2U9bixpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5uZXh0JiZlLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5lcnJvciYmdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uO3QmJnQuY29tcGxldGUmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHQpOmEuYS5FTVBUWX0sZX0oZil9LCJML1Y5IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigicnhTdWJzY3JpYmVyIik6IkBAcnhTdWJzY3JpYmVyIn0sTEM1cDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJuNmdHIikscj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9pbnNldD0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2ZXJ0aWNhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJ0aWNhbH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3ZlcnRpY2FsPU9iamVjdChpLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5zZXR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pbnNldD1PYmplY3QoaS5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLG89ZnVuY3Rpb24oKXt9fSxNMkx4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgaT1uKCJuNmdHIikscj1uKCJDY25HIiksbz1uKCI2YmxGIiksYT1uKCJLOUlhIikscz1uKCJHaTNpIiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI/bnVsbDpuZXcgTXV0YXRpb25PYnNlcnZlcih0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PXQsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuX2NsZWFudXBPYnNlcnZlcihuKX0pfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG8uYS5jcmVhdGUoZnVuY3Rpb24obil7dmFyIGk9ZS5fb2JzZXJ2ZUVsZW1lbnQodCkuc3Vic2NyaWJlKG4pO3JldHVybiBmdW5jdGlvbigpe2kudW5zdWJzY3JpYmUoKSxlLl91bm9ic2VydmVFbGVtZW50KHQpfX0pfSx0LnByb3RvdHlwZS5fb2JzZXJ2ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXModCkpdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQodCkuY291bnQrKztlbHNle3ZhciBlPW5ldyBhLmEsbj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUoZnVuY3Rpb24odCl7cmV0dXJuIGUubmV4dCh0KX0pO24mJm4ub2JzZXJ2ZSh0LHtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5zZXQodCx7b2JzZXJ2ZXI6bixzdHJlYW06ZSxjb3VudDoxfSl9cmV0dXJuIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KHQpLnN0cmVhbX0sdC5wcm90b3R5cGUuX3Vub2JzZXJ2ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXModCkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KHQpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIodCkpfSx0LnByb3RvdHlwZS5fY2xlYW51cE9ic2VydmVyPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKHQpKXt2YXIgZT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KSxuPWUub2JzZXJ2ZXIsaT1lLnN0cmVhbTtuJiZuLmRpc2Nvbm5lY3QoKSxpLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUodCl9fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5ZKSh1KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jb250ZW50T2JzZXJ2ZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ldmVudD1uZXcgci5uLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChpLmMpKHQpLHRoaXMuX2Rpc2FibGVkP3RoaXMuX3Vuc3Vic2NyaWJlKCk6dGhpcy5fc3Vic2NyaWJlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZWJvdW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJvdW5jZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2RlYm91bmNlPU9iamVjdChpLmUpKHQpLHRoaXMuX3N1YnNjcmliZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb258fHRoaXMuZGlzYWJsZWR8fHRoaXMuX3N1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3Vuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Vuc3Vic2NyaWJlKCk7dmFyIGU9dGhpcy5fY29udGVudE9ic2VydmVyLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9jdXJyZW50U3Vic2NyaXB0aW9uPSh0LmRlYm91bmNlP2UucGlwZShPYmplY3Qocy5hKSh0LmRlYm91bmNlKSk6ZSkuc3Vic2NyaWJlKHQuZXZlbnQpfSl9LHQucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24mJnRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdH0oKSxmPWZ1bmN0aW9uKCl7fX0sTUdCUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4saSxyKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShuKCJGRk9vIikuYSl9LE1jU286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sIk1yK1giOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJTTXNtIiksbigiRnpxYyIpLG4oIldmNHAiKSxpLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1pY29ue2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4fS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5sYigyLFtpLmFiKG51bGwsMCldLG51bGwsbnVsbCl9fSxOU1lMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBRdH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBvZX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBzZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiB1ZX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oImloWVkiKTtmdW5jdGlvbiBvKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzfWZ1bmN0aW9uIGEodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyByLmQ7Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyByLm4odCl9fWZ1bmN0aW9uIHModCxlLG4saSxvLGEpe3ZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSk7dmFyIHM9W10sdT1bXSxsPS0xLGM9bnVsbDtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5vZmZzZXQsaT1uPT1sLGY9aSYmY3x8e307T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLHU9dFtuXTtpZigib2Zmc2V0IiE9PW4pc3dpdGNoKGk9ZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoaSxzKSx1KXtjYXNlIHIubzp1PW9bbl07YnJlYWs7Y2FzZSByLmE6dT1hW25dO2JyZWFrO2RlZmF1bHQ6dT1lLm5vcm1hbGl6ZVN0eWxlVmFsdWUobixpLHUscyl9ZltpXT11fSksaXx8dS5wdXNoKGYpLGM9ZixsPW59KSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBhbmltYXRlIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczpcbiAtICIrcy5qb2luKCJcbiAtICIpKTtyZXR1cm4gdX1mdW5jdGlvbiB1KHQsZSxuLGkpe3N3aXRjaChlKXtjYXNlInN0YXJ0Ijp0Lm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gaShuJiZsKG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGkobiYmbChuLCJkb25lIix0KSl9KTticmVhaztjYXNlImRlc3Ryb3kiOnQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGkobiYmbChuLCJkZXN0cm95Iix0KSl9KX19ZnVuY3Rpb24gbCh0LGUsbil7dmFyIGk9bi50b3RhbFRpbWUscj1jKHQuZWxlbWVudCx0LnRyaWdnZXJOYW1lLHQuZnJvbVN0YXRlLHQudG9TdGF0ZSxlfHx0LnBoYXNlTmFtZSx2b2lkIDA9PWk/dC50b3RhbFRpbWU6aSwhIW4uZGlzYWJsZWQpLG89dC5fZGF0YTtyZXR1cm4gbnVsbCE9byYmKHIuX2RhdGE9bykscn1mdW5jdGlvbiBjKHQsZSxuLGkscixvLGEpe3JldHVybiB2b2lkIDA9PT1yJiYocj0iIiksdm9pZCAwPT09byYmKG89MCkse2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGZyb21TdGF0ZTpuLHRvU3RhdGU6aSxwaGFzZU5hbWU6cix0b3RhbFRpbWU6byxkaXNhYmxlZDohIWF9fWZ1bmN0aW9uIGYodCxlLG4pe3ZhciBpO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhpPXQuZ2V0KGUpKXx8dC5zZXQoZSxpPW4pOihpPXRbZV0pfHwoaT10W2VdPW4pLGl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIjoiKTtyZXR1cm5bdC5zdWJzdHJpbmcoMSxlKSx0LnN1YnN0cihlKzEpXX12YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiExfSxwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LG09ZnVuY3Rpb24odCxlLG4pe3JldHVybltdfSx5PW8oKTtpZih5fHwidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe2lmKGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0seXx8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWF0Y2hlcyhlKX07ZWxzZXt2YXIgdj1FbGVtZW50LnByb3RvdHlwZSxnPXYubWF0Y2hlc1NlbGVjdG9yfHx2Lm1vek1hdGNoZXNTZWxlY3Rvcnx8di5tc01hdGNoZXNTZWxlY3Rvcnx8di5vTWF0Y2hlc1NlbGVjdG9yfHx2LndlYmtpdE1hdGNoZXNTZWxlY3RvcjtnJiYocD1mdW5jdGlvbih0LGUpe3JldHVybiBnLmFwcGx5KHQsW2VdKX0pfW09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVtdO2lmKG4pci5wdXNoLmFwcGx5KHIsT2JqZWN0KGkuZCkodC5xdWVyeVNlbGVjdG9yQWxsKGUpKSk7ZWxzZXt2YXIgbz10LnF1ZXJ5U2VsZWN0b3IoZSk7byYmci5wdXNoKG8pfXJldHVybiByfX12YXIgYj1udWxsLF89ITE7ZnVuY3Rpb24gdyh0KXtifHwoYj0oInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSxfPSEhYi5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gYi5zdHlsZSk7dmFyIGU9ITA7cmV0dXJuIGIuc3R5bGUmJiFmdW5jdGlvbih0KXtyZXR1cm4iZWJraXQiPT10LnN1YnN0cmluZygxLDYpfSh0KSYmIShlPXQgaW4gYi5zdHlsZSkmJl8mJihlPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBiLnN0eWxlKSxlfXZhciB4PXAsQz1kLFM9bTtmdW5jdGlvbiBFKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKTtlW2ldPXRbbl19KSxlfXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBDKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUyh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG58fCIifSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLGksbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1bXSksbmV3IHIuZChuLGkpfSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5PT1A9bmV3IE8sdH0oKSxUPTFlMztmdW5jdGlvbiBqKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFlfHxlLmxlbmd0aDwyPzA6QShwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIEEodCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gdCpUO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIEkodCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGE9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaCgnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJykse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2k9QShwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO3ZhciBzPWFbM107bnVsbCE9cyYmKHI9QShNYXRoLmZsb29yKHBhcnNlRmxvYXQocykpLGFbNF0pKTt2YXIgdT1hWzVdO3UmJihvPXUpfWVsc2UgaT10O2lmKCFuKXt2YXIgbD0hMSxjPWUubGVuZ3RoO2k8MCYmKGUucHVzaCgiRHVyYXRpb24gdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGw9ITApLHI8MCYmKGUucHVzaCgiRGVsYXkgdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGw9ITApLGwmJmUuc3BsaWNlKGMsMCwnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJyl9cmV0dXJue2R1cmF0aW9uOmksZGVsYXk6cixlYXNpbmc6b319KHQsZSxuKX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pLGV9ZnVuY3Rpb24gTSh0LGUsbil7aWYodm9pZCAwPT09biYmKG49e30pLGUpZm9yKHZhciBpIGluIHQpbltpXT10W2ldO2Vsc2UgUih0LG4pO3JldHVybiBufWZ1bmN0aW9uIFAodCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIEQodCl7Zm9yKHZhciBlPSIiLG49MDtuPHQuc3R5bGUubGVuZ3RoO24rKyllKz1QKDAsaT10LnN0eWxlLml0ZW0obiksdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGkpKTtmb3IodmFyIGkgaW4gdC5zdHlsZSl0LnN0eWxlLmhhc093blByb3BlcnR5KGkpJiYhaS5zdGFydHNXaXRoKCJfIikmJihlKz1QKDAsaS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtpXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gTih0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXEobik7dC5zdHlsZVtpXT1lW25dfSksbygpJiZEKHQpKX1mdW5jdGlvbiBGKHQsZSl7dC5zdHlsZSYmKE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cShlKTt0LnN0eWxlW25dPSIifSksbygpJiZEKHQpKX1mdW5jdGlvbiBMKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzE9PXQubGVuZ3RoP3RbMF06T2JqZWN0KHIuaSkodCk6dH12YXIgVj1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB6KHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxpPXZvaWQgMDtpPVYuZXhlYyhuKTspZS5wdXNoKGlbMV0pO1YubGFzdEluZGV4PTB9cmV0dXJuIGV9ZnVuY3Rpb24gQih0LGUsbil7dmFyIGk9dC50b1N0cmluZygpLHI9aS5yZXBsYWNlKFYsZnVuY3Rpb24odCxpKXt2YXIgcj1lW2ldO3JldHVybiBlLmhhc093blByb3BlcnR5KGkpfHwobi5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICIraSkscj0iIiksci50b1N0cmluZygpfSk7cmV0dXJuIHI9PWk/dDpyfWZ1bmN0aW9uIFUodCl7Zm9yKHZhciBlPVtdLG49dC5uZXh0KCk7IW4uZG9uZTspZS5wdXNoKG4udmFsdWUpLG49dC5uZXh0KCk7cmV0dXJuIGV9dmFyIEg9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHEodCl7cmV0dXJuIHQucmVwbGFjZShILGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiB0WzFdLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBHKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBRKHQsZSxuKXt2YXIgaT1PYmplY3Qua2V5cyhuKTtpZihpLmxlbmd0aCYmZS5sZW5ndGgpe3ZhciByPWVbMF0sbz1bXTtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7ci5oYXNPd25Qcm9wZXJ0eSh0KXx8by5wdXNoKHQpLHJbdF09blt0XX0pLG8ubGVuZ3RoKWZvcih2YXIgYT1mdW5jdGlvbigpe3ZhciBuPWVbc107by5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV09Vyh0LGUpfSl9LHM9MTtzPGUubGVuZ3RoO3MrKylhKCl9cmV0dXJuIGV9ZnVuY3Rpb24gWSh0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIFcodCxlKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19dmFyIFo9IioiLEs9bmV3IFNldChbInRydWUiLCIxIl0pLFg9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiAkKHQsZSl7dmFyIG49Sy5oYXModCl8fFguaGFzKHQpLGk9Sy5oYXMoZSl8fFguaGFzKGUpO3JldHVybiBmdW5jdGlvbihyLG8pe3ZhciBhPXQ9PVp8fHQ9PXIscz1lPT1afHxlPT1vO3JldHVybiFhJiZuJiYiYm9vbGVhbiI9PXR5cGVvZiByJiYoYT1yP0suaGFzKHQpOlguaGFzKHQpKSwhcyYmaSYmImJvb2xlYW4iPT10eXBlb2YgbyYmKHM9bz9LLmhhcyhlKTpYLmhhcyhlKSksYSYmc319dmFyIEo9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gdHQodCxlLG4pe3JldHVybiBuZXcgZXQodCkuYnVpbGQoZSxuKX12YXIgZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RyaXZlcj10fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBudChlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSxZKHRoaXMsTCh0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9ZS5xdWVyeUNvdW50PTAscj1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LHU9cy5uYW1lO3UudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT11fWVsc2UgaWYoMT09dC50eXBlKXt2YXIgbD1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO2krPWwucXVlcnlDb3VudCxyKz1sLmRlcENvdW50LGEucHVzaChsKX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDppLGRlcENvdW50OnIsb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxpPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIHI9bmV3IFNldCxvPWl8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt6KGVbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7by5oYXNPd25Qcm9wZXJ0eSh0KXx8ci5hZGQodCl9KX0pfX0pLHIuc2l6ZSl7dmFyIGE9VShyLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKCdzdGF0ZSgiJyt0Lm5hbWUrJyIsIC4uLikgbXVzdCBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgZm9sbG93aW5nIHN0eWxlIHN1YnN0aXR1dGlvbnM6ICcrYS5qb2luKCIsICIpKX19cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTpuLG9wdGlvbnM6aT97cGFyYW1zOml9Om51bGx9fSx0LnByb3RvdHlwZS52aXNpdFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7dmFyIG4saSxyLG89WSh0aGlzLEwodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6KG49dC5leHByLGk9ZS5lcnJvcnMscj1bXSwic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtpZigiOiI9PXRbMF0pe3ZhciBpPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKT5wYXJzZUZsb2F0KHQpfTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCl9O2RlZmF1bHQ6cmV0dXJuIGUucHVzaCgnVGhlIHRyYW5zaXRpb24gYWxpYXMgdmFsdWUgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyksIiogPT4gKiJ9fSh0LG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXJldHVybiB2b2lkIGUucHVzaChpKTt0PWl9dmFyIHI9dC5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09cnx8ci5sZW5ndGg8NClyZXR1cm4gbi5wdXNoKCdUaGUgcHJvdmlkZWQgdHJhbnNpdGlvbiBleHByZXNzaW9uICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLGU7dmFyIG89clsxXSxhPXJbMl0scz1yWzNdO2UucHVzaCgkKG8scykpLCI8IiE9YVswXXx8bz09WiYmcz09Wnx8ZS5wdXNoKCQocyxvKSl9KHQscixpKX0pOnIucHVzaChuKSxyKSxhbmltYXRpb246byxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6cnQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0U2VxdWVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFkobix0LGUpfSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lLmN1cnJlbnRUaW1lLHI9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9aTt2YXIgbz1ZKG4sdCxlKTtyZXR1cm4gcj1NYXRoLm1heChyLGUuY3VycmVudFRpbWUpLG99KTtyZXR1cm4gZS5jdXJyZW50VGltZT1yLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOnJ0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixpPWZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbDtpZih0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKW49dDtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gb3QoSSh0LGUpLmR1cmF0aW9uLDAsIiIpO3ZhciBpPXQ7aWYoaS5zcGxpdCgvXHMrLykuc29tZShmdW5jdGlvbih0KXtyZXR1cm4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpfSkpe3ZhciByPW90KDAsMCwiIik7cmV0dXJuIHIuZHluYW1pYz0hMCxyLnN0clZhbHVlPWkscn1yZXR1cm4gb3QoKG49bnx8SShpLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1pO3ZhciBvPXQuc3R5bGVzP3Quc3R5bGVzOk9iamVjdChyLmspKHt9KTtpZig1PT1vLnR5cGUpbj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXt2YXIgYT10LnN0eWxlcyxzPSExO2lmKCFhKXtzPSEwO3ZhciB1PXt9O2kuZWFzaW5nJiYodS5lYXNpbmc9aS5lYXNpbmcpLGE9T2JqZWN0KHIuaykodSl9ZS5jdXJyZW50VGltZSs9aS5kdXJhdGlvbitpLmRlbGF5O3ZhciBsPXRoaXMudmlzaXRTdHlsZShhLGUpO2wuaXNFbXB0eVN0ZXA9cyxuPWx9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOmksc3R5bGU6bixvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufSx0LnByb3RvdHlwZS5fbWFrZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49W107QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQ/dD09ci5hP24ucHVzaCh0KTplLmVycm9ycy5wdXNoKCJUaGUgcHJvdmlkZWQgc3R5bGUgc3RyaW5nIHZhbHVlICIrdCsiIGlzIG5vdCBhbGxvd2VkLiIpOm4ucHVzaCh0KX0pOm4ucHVzaCh0LnN0eWxlcyk7dmFyIGk9ITEsbz1udWxsO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkpe3ZhciBlPXQsbj1lLmVhc2luZztpZihuJiYobz1uLGRlbGV0ZSBlLmVhc2luZyksIWkpZm9yKHZhciByIGluIGUpaWYoZVtyXS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2k9ITA7YnJlYWt9fX0pLHt0eXBlOjYsc3R5bGVzOm4sZWFzaW5nOm8sb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczppLG9wdGlvbnM6bnVsbH19LHQucHJvdG90eXBlLl92YWxpZGF0ZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7aSYmbz4wJiYoby09aS5kdXJhdGlvbitpLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihpKXtpZihuLl9kcml2ZXIudmFsaWRhdGVTdHlsZVByb3BlcnR5KGkpKXt2YXIgYSxzLHUsbD1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxjPWxbaV0sZj0hMDtjJiYobyE9ciYmbz49Yy5zdGFydFRpbWUmJnI8PWMuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2goJ1RoZSBDU1MgcHJvcGVydHkgIicraSsnIiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJytjLnN0YXJ0VGltZSsnbXMiIGFuZCAiJytjLmVuZFRpbWUrJ21zIiBpcyBhbHNvIGJlaW5nIGFuaW1hdGVkIGluIGEgcGFyYWxsZWwgYW5pbWF0aW9uIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK28rJ21zIiBhbmQgIicrcisnbXMiJyksZj0hMSksbz1jLnN0YXJ0VGltZSksZiYmKGxbaV09e3N0YXJ0VGltZTpvLGVuZFRpbWU6cn0pLGUub3B0aW9ucyYmKGE9ZS5lcnJvcnMscz1lLm9wdGlvbnMucGFyYW1zfHx7fSwodT16KHRbaV0pKS5sZW5ndGgmJnUuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK2krJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIiksaTt2YXIgcj0wLG89W10sYT0hMSxzPSExLHU9MCxsPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBpPW4uX21ha2VTdHlsZUFzdCh0LGUpLGw9bnVsbCE9aS5vZmZzZXQ/aS5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYoaXQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShpLnN0eWxlcyksYz0wO3JldHVybiBudWxsIT1sJiYocisrLGM9aS5vZmZzZXQ9bCkscz1zfHxjPDB8fGM+MSxhPWF8fGM8dSx1PWMsby5wdXNoKGMpLGl9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgYz10LnN0ZXBzLmxlbmd0aCxmPTA7cj4wJiZyPGM/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09ciYmKGY9MS8oYy0xKSk7dmFyIGg9Yy0xLGQ9ZS5jdXJyZW50VGltZSxwPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09cC5kdXJhdGlvbjtyZXR1cm4gbC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIGE9Zj4wP3I9PWg/MTpmKnI6b1tyXSxzPWEqbTtlLmN1cnJlbnRUaW1lPWQrcC5kZWxheStzLHAuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxpLnN0eWxlcy5wdXNoKHQpfSksaX0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpZKHRoaXMsTCh0LmFuaW1hdGlvbiksZSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlUmVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRRdWVyeT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3Iscj10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7dmFyIG89T2JqZWN0KGkuYykoZnVuY3Rpb24odCl7dmFyIGU9ISF0LnNwbGl0KC9ccyosXHMqLykuZmluZChmdW5jdGlvbih0KXtyZXR1cm4iOnNlbGYiPT10fSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZShKLCIiKSksW3Q9dC5yZXBsYWNlKC9AXCovZywiLm5nLXRyaWdnZXIiKS5yZXBsYWNlKC9AXHcrL2csZnVuY3Rpb24odCl7cmV0dXJuIi5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSl9KS5yZXBsYWNlKC86YW5pbWF0aW5nL2csIi5uZy1hbmltYXRpbmciKSxlXX0odC5zZWxlY3RvciksMiksYT1vWzBdLHM9b1sxXTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4ubGVuZ3RoP24rIiAiK2E6YSxmKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3Ise30pO3ZhciB1PVkodGhpcyxMKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6YSxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjp1LG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOnJ0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaCgic3RhZ2dlcigpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIHF1ZXJ5KCkiKTt2YXIgbj0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpJKHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOlkodGhpcyxMKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOm4sb3B0aW9uczpudWxsfX0sdH0oKSxudD1mdW5jdGlvbih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9e30sdGhpcy5vcHRpb25zPW51bGx9O2Z1bmN0aW9uIGl0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gcnQodCl7dmFyIGU7cmV0dXJuIHQ/KHQ9Uih0KSkucGFyYW1zJiYodC5wYXJhbXM9KGU9dC5wYXJhbXMpP1IoZSk6bnVsbCk6dD17fSx0fWZ1bmN0aW9uIG90KHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiBhdCh0LGUsbixpLHIsbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1udWxsKSx2b2lkIDA9PT1zJiYocz0hMSkse3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOmksZHVyYXRpb246cixkZWxheTpvLHRvdGFsVGltZTpyK28sZWFzaW5nOmEsc3ViVGltZWxpbmU6c319dmFyIHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX21hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5jb25zdW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21hcC5nZXQodCk7bnx8dGhpcy5fbWFwLnNldCh0LG49W10pLG4ucHVzaC5hcHBseShuLE9iamVjdChpLmQpKGUpKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX21hcC5jbGVhcigpfSx0fSgpLHV0PW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxsdD1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gY3QodCxlLG4saSxyLG8sYSxzLHUsbCl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSksdm9pZCAwPT09bCYmKGw9W10pLChuZXcgZnQpLmJ1aWxkS2V5ZnJhbWVzKHQsZSxuLGkscixvLGEscyx1LGwpfXZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyx1LGwpe3ZvaWQgMD09PWwmJihsPVtdKSx1PXV8fG5ldyBzdDt2YXIgYz1uZXcgZHQodCxlLHUsaSxyLGwsW10pO2Mub3B0aW9ucz1zLGMuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbb10sbnVsbCxjLmVycm9ycyxzKSxZKHRoaXMsbixjKTt2YXIgZj1jLnRpbWVsaW5lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29udGFpbnNBbmltYXRpb24oKX0pO2lmKGYubGVuZ3RoJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgpe3ZhciBoPWZbZi5sZW5ndGgtMV07aC5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpfHxoLnNldFN0eWxlcyhbYV0sbnVsbCxjLmVycm9ycyxzKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnVpbGRLZXlmcmFtZXMoKX0pOlthdChlLFtdLFtdLFtdLDAsMCwiIiwhMSldfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1Ykluc3RydWN0aW9ucy5jb25zdW1lKGUuZWxlbWVudCk7aWYobil7dmFyIGk9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucykscj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKG4saSxpLm9wdGlvbnMpO3IhPW8mJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG8pfWUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO24udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixuKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShuLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxyPW51bGwhPW4uZHVyYXRpb24/aihuLmR1cmF0aW9uKTpudWxsLG89bnVsbCE9bi5kZWxheT9qKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1yJiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxyLG8pO2k9TWF0aC5tYXgoaSxuLmR1cmF0aW9uK24uZGVsYXkpfSksaX0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxZKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lLnN1YkNvbnRleHRDb3VudCxyPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKChyPWUuY3JlYXRlU3ViQ29udGV4dChvKSkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PXIucHJldmlvdXNOb2RlLnR5cGUmJihyLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxyLnByZXZpb3VzTm9kZT1odCk7dmFyIGE9aihvLmRlbGF5KTtyLmRlbGF5TmV4dFN0ZXAoYSl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFkobix0LHIpfSksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksci5zdWJDb250ZXh0Q291bnQ+aSYmci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1bXSxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/aih0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxZKG4sYSxzKSxyPU1hdGgubWF4KHIscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGkucHVzaChzLmN1cnJlbnRUaW1lbGluZSl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCl9KSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS5fdmlzaXRUaW1pbmc9ZnVuY3Rpb24odCxlKXtpZih0LmR5bmFtaWMpe3ZhciBuPXQuc3RyVmFsdWU7cmV0dXJuIEkoZS5wYXJhbXM/QihuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxpPWUuY3VycmVudFRpbWVsaW5lO24uZGVsYXkmJihlLmluY3JlbWVudFRpbWUobi5kZWxheSksaS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7dmFyIHI9dC5zdHlsZTs1PT1yLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhyLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKHIsZSksaS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50VGltZWxpbmUsaT1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshaSYmbi5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoJiZuLmZvcndhcmRGcmFtZSgpO3ZhciByPWkmJmkuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAocik6bi5zZXRTdHlsZXModC5zdHlsZXMscixlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixyPW4uZHVyYXRpb24sbz1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7by5lYXNpbmc9bi5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtvLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqciksby5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxvLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhvKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpK3IpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscj10Lm9wdGlvbnN8fHt9LG89ci5kZWxheT9qKHIuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1pJiZlLmN1cnJlbnRUaW1lbGluZS5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPWh0KTt2YXIgYT1pLHM9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFyLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPXMubGVuZ3RoO3ZhciB1PW51bGw7cy5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ZS5jdXJyZW50UXVlcnlJbmRleD1yO3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMsaSk7byYmcy5kZWxheU5leHRTdGVwKG8pLGk9PT1lLmVsZW1lbnQmJih1PXMuY3VycmVudFRpbWVsaW5lKSxZKG4sdC5hbmltYXRpb24scykscy5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSksdSYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModSksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuPWUucGFyZW50Q29udGV4dCxpPWUuY3VycmVudFRpbWVsaW5lLHI9dC50aW1pbmdzLG89TWF0aC5hYnMoci5kdXJhdGlvbiksYT1vKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLHM9byplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChyLmR1cmF0aW9uPDA/InJldmVyc2UiOnIuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9YS1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX12YXIgdT1lLmN1cnJlbnRUaW1lbGluZTtzJiZ1LmRlbGF5TmV4dFN0ZXAocyk7dmFyIGw9dS5jdXJyZW50VGltZTtZKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxuLmN1cnJlbnRTdGFnZ2VyVGltZT1pLmN1cnJlbnRUaW1lLWwrKGkuc3RhcnRUaW1lLW4uY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9LHR9KCksaHQ9e30sZHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEscyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9bix0aGlzLl9lbnRlckNsYXNzTmFtZT1pLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPXIsdGhpcy5lcnJvcnM9byx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPXN8fG5ldyBwdCh0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciBpPXQscj10aGlzLm9wdGlvbnM7bnVsbCE9aS5kdXJhdGlvbiYmKHIuZHVyYXRpb249aihpLmR1cmF0aW9uKSksbnVsbCE9aS5kZWxheSYmKHIuZGVsYXk9aihpLmRlbGF5KSk7dmFyIG89aS5wYXJhbXM7aWYobyl7dmFyIGE9ci5wYXJhbXM7YXx8KGE9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtlJiZhLmhhc093blByb3BlcnR5KHQpfHwoYVt0XT1CKG9bdF0sYSxuLmVycm9ycykpfSl9fX0sdC5wcm90b3R5cGUuX2NvcHlPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5vcHRpb25zKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe3ZhciBuPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9fXJldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVTdWJDb250ZXh0PWZ1bmN0aW9uKGUsbixpKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgcj1ufHx0aGlzLmVsZW1lbnQsbz1uZXcgdCh0aGlzLl9kcml2ZXIscix0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHIsaXx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99LHQucHJvdG90eXBlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9LHQucHJvdG90eXBlLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LHI9bmV3IG10KHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMsaSx0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChyKSxpfSx0LnByb3RvdHlwZS5pbmNyZW1lbnRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX0sdC5wcm90b3R5cGUuaW52b2tlUXVlcnk9ZnVuY3Rpb24odCxlLG4scixvLGEpe3ZhciBzPVtdO2lmKHImJnMucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKHV0LCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UobHQsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTt2YXIgdT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJih1PW48MD91LnNsaWNlKHUubGVuZ3RoK24sdS5sZW5ndGgpOnUuc2xpY2UoMCxuKSkscy5wdXNoLmFwcGx5KHMsT2JqZWN0KGkuZCkodSkpfXJldHVybiBvfHwwIT1zLmxlbmd0aHx8YS5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLHN9LHR9KCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPWksdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fHIuYSxlLl9jdXJyZW50S2V5ZnJhbWVbdF09ci5hfSksdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuc2V0U3R5bGVzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvPXRoaXM7ZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPWUpO3ZhciBhPWkmJmkucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyIqIj09PXQ/KG49bnx8T2JqZWN0LmtleXMoZSkpLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XT1yLmF9KTpNKHQsITEsaSl9KSxpfSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUIoc1t0XSxhLG4pO28uX3BlbmRpbmdTdHlsZXNbdF09ZSxvLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpfHwoby5fYmFja0ZpbGxbdF09by5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCk/by5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF06ci5hKSxvLl91cGRhdGVTdHlsZSh0LGUpfSl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVzVG9LZXlmcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wZW5kaW5nU3R5bGVzLG49T2JqZWN0LmtleXMoZSk7MCE9bi5sZW5ndGgmJih0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LG4uZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9jdXJyZW50S2V5ZnJhbWVbbl09ZVtuXX0pLE9iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KGUpfHwodC5fY3VycmVudEtleWZyYW1lW2VdPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV0pfSkpfSx0LnByb3RvdHlwZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXTt0Ll9wZW5kaW5nU3R5bGVzW2VdPW4sdC5fdXBkYXRlU3R5bGUoZSxuKX0pfSx0LnByb3RvdHlwZS5nZXRGaW5hbEtleWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvcGVydGllcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ZS5fc3R5bGVTdW1tYXJ5W25dLHI9dC5fc3R5bGVTdW1tYXJ5W25dOyghaXx8ci50aW1lPmkudGltZSkmJmUuX3VwZGF0ZVN0eWxlKG4sci52YWx1ZSl9KX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7dmFyIGU9bmV3IFNldCxuPW5ldyBTZXQsaT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLG89W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgdT1NKGEsITApO09iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9dVt0XTtpPT1yLm8/ZS5hZGQodCk6aT09ci5hJiZuLmFkZCh0KX0pLGl8fCh1Lm9mZnNldD1zL3QuZHVyYXRpb24pLG8ucHVzaCh1KX0pO3ZhciBhPWUuc2l6ZT9VKGUudmFsdWVzKCkpOltdLHM9bi5zaXplP1Uobi52YWx1ZXMoKSk6W107aWYoaSl7dmFyIHU9b1swXSxsPVIodSk7dS5vZmZzZXQ9MCxsLm9mZnNldD0xLG89W3UsbF19cmV0dXJuIGF0KHRoaXMuZWxlbWVudCxvLGEscyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX0sdH0oKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyxhLHMpe3ZvaWQgMD09PXMmJihzPSExKTt2YXIgdT10LmNhbGwodGhpcyxlLG4sYS5kZWxheSl8fHRoaXM7cmV0dXJuIHUuZWxlbWVudD1uLHUua2V5ZnJhbWVzPWksdS5wcmVTdHlsZVByb3BzPXIsdS5wb3N0U3R5bGVQcm9wcz1vLHUuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPXMsdS50aW1pbmdzPXtkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzaW5nOmEuZWFzaW5nfSx1fXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfSxlLnByb3RvdHlwZS5idWlsZEtleWZyYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMua2V5ZnJhbWVzLGU9dGhpcy50aW1pbmdzLG49ZS5kZWxheSxpPWUuZHVyYXRpb24scj1lLmVhc2luZztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmbil7dmFyIG89W10sYT1pK24scz1uL2EsdT1NKHRbMF0sITEpO3Uub2Zmc2V0PTAsby5wdXNoKHUpO3ZhciBsPU0odFswXSwhMSk7bC5vZmZzZXQ9eXQocyksby5wdXNoKGwpO2Zvcih2YXIgYz10Lmxlbmd0aC0xLGY9MTtmPD1jO2YrKyl7dmFyIGg9TSh0W2ZdLCExKTtoLm9mZnNldD15dCgobitoLm9mZnNldCppKS9hKSxvLnB1c2goaCl9aT1hLG49MCxyPSIiLHQ9b31yZXR1cm4gYXQodGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsaSxuLHIsITApfSxlfShwdCk7ZnVuY3Rpb24geXQodCxlKXt2b2lkIDA9PT1lJiYoZT0zKTt2YXIgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn12YXIgdnQ9ZnVuY3Rpb24oKXt9LGd0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5vcm1hbGl6ZVByb3BlcnR5TmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiBxKHQpfSxlLnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVZhbHVlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPSIiLG89bi50b1N0cmluZygpLnRyaW0oKTtpZihidFtlXSYmMCE9PW4mJiIwIiE9PW4paWYoIm51bWJlciI9PXR5cGVvZiBuKXI9InB4IjtlbHNle3ZhciBhPW4ubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTthJiYwPT1hWzFdLmxlbmd0aCYmaS5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAiK3QrIjoiK24pfXJldHVybiBvK3J9LGV9KHZ0KSxidD1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4id2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09ITB9KSxlfSgpO2Z1bmN0aW9uIF90KHQsZSxuLGkscixvLGEscyx1LGwsYyxmLGgpe3JldHVybnt0eXBlOjAsZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsaXNSZW1vdmFsVHJhbnNpdGlvbjpyLGZyb21TdGF0ZTpuLGZyb21TdHlsZXM6byx0b1N0YXRlOmksdG9TdHlsZXM6YSx0aW1lbGluZXM6cyxxdWVyaWVkRWxlbWVudHM6dSxwcmVTdHlsZVByb3BzOmwscG9zdFN0eWxlUHJvcHM6Yyx0b3RhbFRpbWU6ZixlcnJvcnM6aH19dmFyIHd0PXt9LHh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPW59cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBmdW5jdGlvbih0LGUsbixpLHIpe3JldHVybiB0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSxuLGkscil9KX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLG4saSl9LHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9zdGF0ZVN0eWxlc1siKiJdLHI9dGhpcy5fc3RhdGVTdHlsZXNbdF0sbz1pP2kuYnVpbGRTdHlsZXMoZSxuKTp7fTtyZXR1cm4gcj9yLmJ1aWxkU3R5bGVzKGUsbik6b30sdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlLG4scixvLGEscyx1LGwsYyl7dmFyIGg9W10sZD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8d3QscD10aGlzLmJ1aWxkU3R5bGVzKG4scyYmcy5wYXJhbXN8fHd0LGgpLG09dSYmdS5wYXJhbXN8fHd0LHk9dGhpcy5idWlsZFN0eWxlcyhyLG0saCksdj1uZXcgU2V0LGc9bmV3IE1hcCxiPW5ldyBNYXAsXz0idm9pZCI9PT1yLHc9e3BhcmFtczpPYmplY3QoaS5hKSh7fSxkLG0pfSx4PWM/W106Y3QodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLGEscCx5LHcsbCxoKSxDPTA7aWYoeC5mb3JFYWNoKGZ1bmN0aW9uKHQpe0M9TWF0aC5tYXgodC5kdXJhdGlvbit0LmRlbGF5LEMpfSksaC5sZW5ndGgpcmV0dXJuIF90KGUsdGhpcy5fdHJpZ2dlck5hbWUsbixyLF8scCx5LFtdLFtdLGcsYixDLGgpO3guZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LmVsZW1lbnQsaT1mKGcsbix7fSk7dC5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGlbdF09ITB9KTt2YXIgcj1mKGIsbix7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdPSEwfSksbiE9PWUmJnYuYWRkKG4pfSk7dmFyIFM9VSh2LnZhbHVlcygpKTtyZXR1cm4gX3QoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLHIsXyxwLHkseCxTLGcsYixDKX0sdH0oKSxDdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5idWlsZFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9LGk9Uih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07bnVsbCE9biYmKGlbZV09bil9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPXQ7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1yW3RdO28ubGVuZ3RoPjEmJihvPUIobyxpLGUpKSxuW3RdPW99KX19KSxufSx0fSgpLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9e30sZS5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnN0YXRlc1t0Lm5hbWVdPW5ldyBDdCh0LnN0eWxlLHQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8e30pfSksRXQodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksRXQodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtuLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgeHQodCxlLG4uc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1uZXcgeHQodCx7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuITB9XSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHRoaXMuc3RhdGVzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250YWluc1F1ZXJpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hdGNoVHJhbnNpdGlvbj1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIubWF0Y2godCxlLG4saSl9KXx8bnVsbH0sdC5wcm90b3R5cGUubWF0Y2hTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsbil9LHR9KCk7ZnVuY3Rpb24gRXQodCxlLG4pe3QuaGFzT3duUHJvcGVydHkoZSk/dC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09dFtlXSk6dC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZV09dFtuXSl9dmFyIE90PW5ldyBzdCxrdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPW4sdGhpcy5fYW5pbWF0aW9ucz17fSx0aGlzLl9wbGF5ZXJzQnlJZD17fSx0aGlzLnBsYXllcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W10saT10dCh0aGlzLl9kcml2ZXIsZSxuKTtpZihuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBidWlsZCB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIituLmpvaW4oIlxuIikpO3RoaXMuX2FuaW1hdGlvbnNbdF09aX0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LmVsZW1lbnQscj1zKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsbik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGkscix0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvLHM9W10sdT10aGlzLl9hbmltYXRpb25zW3RdLGw9bmV3IE1hcDtpZih1PyhvPWN0KHRoaXMuX2RyaXZlcixlLHUsIm5nLWVudGVyIiwibmctbGVhdmUiLHt9LHt9LG4sT3QscykpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZihsLHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPW51bGx9KX0pOihzLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxvPVtdKSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrcy5qb2luKCJcbiIpKTtsLmZvckVhY2goZnVuY3Rpb24odCxlKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09aS5fZHJpdmVyLmNvbXB1dGVTdHlsZShlLG4sci5hKX0pfSk7dmFyIGM9YShvLm1hcChmdW5jdGlvbih0KXt2YXIgZT1sLmdldCh0LmVsZW1lbnQpO3JldHVybiBpLl9idWlsZFBsYXllcih0LHt9LGUpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZFt0XT1jLGMub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVzdHJveSh0KX0pLHRoaXMucGxheWVycy5wdXNoKGMpLGN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0UGxheWVyKHQpO2UuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9wbGF5ZXJzQnlJZFt0XTt2YXIgbj10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtuPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG4sMSl9LHQucHJvdG90eXBlLl9nZXRQbGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyc0J5SWRbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB0aGUgdGltZWxpbmUgcGxheWVyIHJlZmVyZW5jZWQgYnkgIit0KTtyZXR1cm4gZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPWMoZSwiIiwiIiwiIik7cmV0dXJuIHUodGhpcy5fZ2V0UGxheWVyKHQpLG4scixpKSxmdW5jdGlvbigpe319LHQucHJvdG90eXBlLmNvbW1hbmQ9ZnVuY3Rpb24odCxlLG4saSl7aWYoInJlZ2lzdGVyIiE9bilpZigiY3JlYXRlIiE9bil7dmFyIHI9dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChuKXtjYXNlInBsYXkiOnIucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOnIucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpyLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpyLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6ci5maW5pc2goKTticmVhaztjYXNlImluaXQiOnIuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOnIuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChpWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fWVsc2UgdGhpcy5jcmVhdGUodCxlLGlbMF18fHt9KTtlbHNlIHRoaXMucmVnaXN0ZXIodCxpWzBdKX0sdH0oKSxUdD1bXSxqdD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sQXQ9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LEl0PSJfX25nX3JlbW92ZWQiLFJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKSx0aGlzLm5hbWVzcGFjZUlkPWU7dmFyIG49dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10P3Q6bnVsbH0obj90LnZhbHVlOnQpLG4pe3ZhciBpPVIodCk7ZGVsZXRlIGkudmFsdWUsdGhpcy5vcHRpb25zPWl9ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmFic29yYk9wdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJhbXM7aWYoZSl7dmFyIG49dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGw9PW5bdF0mJihuW3RdPWVbdF0pfSl9fSx0fSgpLE10PW5ldyBSdCgidm9pZCIpLFB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9bix0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9e30sdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsVXQoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1yZXR1cm4gdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByLG89dGhpcztpZighdGhpcy5fdHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciBldmVudCAiJytuKyciIGJlY2F1c2UgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrIlwiIGRvZXNuJ3QgZXhpc3QhIik7aWYobnVsbD09bnx8MD09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGV2ZW50IGlzIHVuZGVmaW5lZCEnKTtpZigic3RhcnQiIT0ocj1uKSYmImRvbmUiIT1yKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgZm9yIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQhJyk7dmFyIGE9Zih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOml9O2EucHVzaChzKTt2YXIgdT1mKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsdCx7fSk7cmV0dXJuIHUuaGFzT3duUHJvcGVydHkoZSl8fChVdCh0LCJuZy10cmlnZ2VyIiksVXQodCwibmctdHJpZ2dlci0iK2UpLHVbZV09TXQpLGZ1bmN0aW9uKCl7by5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXt2YXIgdD1hLmluZGV4T2Yocyk7dD49MCYmYS5zcGxpY2UodCwxKSxvLl90cmlnZ2Vyc1tlXXx8ZGVsZXRlIHVbZV19KX19LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzW3RdJiYodGhpcy5fdHJpZ2dlcnNbdF09ZSwhMCl9LHQucHJvdG90eXBlLl9nZXRUcmlnZ2VyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyaWdnZXJzW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyICInK3QrJyIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQhJyk7cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpczt2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxhPW5ldyBOdCh0aGlzLmlkLGUsdCkscz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtzfHwoVXQodCwibmctdHJpZ2dlciIpLFV0KHQsIm5nLXRyaWdnZXItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LHM9e30pKTt2YXIgdT1zW2VdLGw9bmV3IFJ0KG4sdGhpcy5pZCk7aWYoIShuJiZuLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmdSYmbC5hYnNvcmJPcHRpb25zKHUub3B0aW9ucyksc1tlXT1sLHV8fCh1PU10KSwidm9pZCI9PT1sLnZhbHVlfHx1LnZhbHVlIT09bC52YWx1ZSl7dmFyIGM9Zih0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCx0LFtdKTtjLmZvckVhY2goZnVuY3Rpb24odCl7dC5uYW1lc3BhY2VJZD09ci5pZCYmdC50cmlnZ2VyTmFtZT09ZSYmdC5xdWV1ZWQmJnQuZGVzdHJveSgpfSk7dmFyIGg9by5tYXRjaFRyYW5zaXRpb24odS52YWx1ZSxsLnZhbHVlLHQsbC5wYXJhbXMpLGQ9ITE7aWYoIWgpe2lmKCFpKXJldHVybjtoPW8uZmFsbGJhY2tUcmFuc2l0aW9uLGQ9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmgsZnJvbVN0YXRlOnUsdG9TdGF0ZTpsLHBsYXllcjphLGlzRmFsbGJhY2tUcmFuc2l0aW9uOmR9KSxkfHwoVXQodCwibmctYW5pbWF0ZS1xdWV1ZWQiKSxhLm9uU3RhcnQoZnVuY3Rpb24oKXtIdCh0LCJuZy1hbmltYXRlLXF1ZXVlZCIpfSkpLGEub25Eb25lKGZ1bmN0aW9uKCl7dmFyIGU9ci5wbGF5ZXJzLmluZGV4T2YoYSk7ZT49MCYmci5wbGF5ZXJzLnNwbGljZShlLDEpO3ZhciBuPXIuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihuKXt2YXIgaT1uLmluZGV4T2YoYSk7aT49MCYmbi5zcGxpY2UoaSwxKX19KSx0aGlzLnBsYXllcnMucHVzaChhKSxjLnB1c2goYSksYX1pZighZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxpPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTtpZighZS5oYXNPd25Qcm9wZXJ0eShvKXx8dFtvXSE9PWVbb10pcmV0dXJuITF9cmV0dXJuITB9KHUucGFyYW1zLGwucGFyYW1zKSl7dmFyIHA9W10sbT1vLm1hdGNoU3R5bGVzKHUudmFsdWUsdS5wYXJhbXMscCkseT1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMscCk7cC5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHApOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7Rih0LG0pLE4odCx5KX0pfX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2RlbGV0ZSB0aGlzLl90cmlnZ2Vyc1t0XSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goZnVuY3Rpb24oZSxuKXtkZWxldGUgZVt0XX0pLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuLGkpe2UuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGksbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSE9dH0pKX0pfSx0LnByb3RvdHlwZS5jbGVhckVsZW1lbnRDYWNoZT1mdW5jdGlvbih0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTt2YXIgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfSx0LnByb3RvdHlwZS5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCwiLm5nLXRyaWdnZXIiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0W0l0XSl7dmFyIG49aS5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KTtuLnNpemU/bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITEsITApfSk6aS5jbGVhckVsZW1lbnRDYWNoZSh0KX19KX0sdC5wcm90b3R5cGUudHJpZ2dlckxlYXZlQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihvKXt2YXIgcz1bXTtpZihPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKHIuX3RyaWdnZXJzW2VdKXt2YXIgbj1yLnRyaWdnZXIodCxlLCJ2b2lkIixpKTtuJiZzLnB1c2gobil9fSkscy5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSksbiYmYShzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gci5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUodCl9KSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldCh0KTtpZihuKXt2YXIgaT1uZXcgU2V0O24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1uLm5hbWU7aWYoIWkuaGFzKHIpKXtpLmFkZChyKTt2YXIgbz1lLl90cmlnZ2Vyc1tyXS5mYWxsYmFja1RyYW5zaXRpb24sYT1lLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KVtyXXx8TXQscz1uZXcgUnQoInZvaWQiKSx1PW5ldyBOdChlLmlkLHIsdCk7ZS5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLGUuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTpyLHRyYW5zaXRpb246byxmcm9tU3RhdGU6YSx0b1N0YXRlOnMscGxheWVyOnUsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX19KX19LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSwhMCksIXRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpe3ZhciByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXt2YXIgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZSBmb3IodmFyIGE9dDthPWEucGFyZW50Tm9kZTspaWYoaS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGEpKXtyPSEwO2JyZWFrfX10aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxyP2kubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpOihpLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtyZXR1cm4gbi5jbGVhckVsZW1lbnRDYWNoZSh0KX0pLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlKXtVdCh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfSx0LnByb3RvdHlwZS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcj1pLnBsYXllcjtpZighci5kZXN0cm95ZWQpe3ZhciBvPWkuZWxlbWVudCxhPWUuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO2EmJmEuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLm5hbWU9PWkudHJpZ2dlck5hbWUpe3ZhciBuPWMobyxpLnRyaWdnZXJOYW1lLGkuZnJvbVN0YXRlLnZhbHVlLGkudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LHUoaS5wbGF5ZXIsZS5waGFzZSxuLGUuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT9lLl9lbmdpbmUuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3IuZGVzdHJveSgpfSk6bi5wdXNoKGkpfX0pLHRoaXMuX3F1ZXVlPVtdLG4uc29ydChmdW5jdGlvbih0LG4pe3ZhciBpPXQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQscj1uLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1pfHwwPT1yP2ktcjplLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0LmVsZW1lbnQsbi5lbGVtZW50KT8xOi0xfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX0sdC5wcm90b3R5cGUuZWxlbWVudENvbnRhaW5zRGF0YT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSwhIXRoaXMuX3F1ZXVlLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWxlbWVudD09PXR9KXx8ZX0sdH0oKSxEdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLmRyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt9fXJldHVybiB0LnByb3RvdHlwZS5fb25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVldWVkUGxheWVycyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5xdWV1ZWQmJnQucHVzaChlKX0pfSksdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVOYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgUHQodCxlLHRoaXMpO3JldHVybiBlLnBhcmVudE5vZGU/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QobixlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsbiksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09bn0sdC5wcm90b3R5cGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtpZihuPj0wKXtmb3IodmFyIGk9ITEscj1uO3I+PTA7ci0tKWlmKHRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLl9uYW1lc3BhY2VMaXN0W3JdLmhvc3RFbGVtZW50LGUpKXt0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShyKzEsMCx0KSxpPSEwO2JyZWFrfWl8fHRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKDAsMCx0KX1lbHNlIHRoaXMuX25hbWVzcGFjZUxpc3QucHVzaCh0KTtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5zZXQoZSx0KSx0fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyZXR1cm4gbnx8KG49dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSksbn0sdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07aSYmaS5yZWdpc3RlcihlLG4pJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih0KXt2YXIgaT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtuLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShpLmhvc3RFbGVtZW50KSxkZWxldGUgbi5fbmFtZXNwYWNlTG9va3VwW3RdO3ZhciBlPW4uX25hbWVzcGFjZUxpc3QuaW5kZXhPZihpKTtlPj0wJiZuLl9uYW1lc3BhY2VMaXN0LnNwbGljZShlLDEpfSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KGUpfSl9fSx0LnByb3RvdHlwZS5fZmV0Y2hOYW1lc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX0sdC5wcm90b3R5cGUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBTZXQsbj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobilmb3IodmFyIGk9T2JqZWN0LmtleXMobikscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1uW2lbcl1dLm5hbWVzcGFjZUlkO2lmKG8pe3ZhciBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG8pO2EmJmUuYWRkKGEpfX1yZXR1cm4gZX0sdC5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbih0LGUsbixpKXtpZihGdChlKSl7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYocilyZXR1cm4gci50cmlnZ2VyKGUsbixpKSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUsbixpKXtpZihGdChlKSl7dmFyIHI9ZVtJdF07aWYociYmci5zZXRGb3JSZW1vdmFsKXtyLnNldEZvclJlbW92YWw9ITEsci5zZXRGb3JNb3ZlPSEwO3ZhciBvPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO28+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UobywxKX1pZih0KXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTthJiZhLmluc2VydE5vZGUoZSxuKX1pJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9fSx0LnByb3RvdHlwZS5jb2xsZWN0RW50ZXJFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQ9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLFV0KHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksSHQodCwibmctYW5pbWF0ZS1kaXNhYmxlZCIpKX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUsbil7aWYoRnQoZSkpe3ZhciBpPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpP2kucmVtb3ZlTm9kZShlLG4pOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLG4pfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoZSxuKX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc1JlbW92ZWQ9ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtJdF09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDppLGhhc0FuaW1hdGlvbjpuLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIEZ0KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLG4saSxyKTpmdW5jdGlvbigpe319LHQucHJvdG90eXBlLl9idWlsZEluc3RydWN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIHQudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcix0LmVsZW1lbnQsdC5mcm9tU3RhdGUudmFsdWUsdC50b1N0YXRlLnZhbHVlLG4saSx0LmZyb21TdGF0ZS5vcHRpb25zLHQudG9TdGF0ZS5vcHRpb25zLGUscil9LHQucHJvdG90eXBlLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCk7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KX0pLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKG49dGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGluZyIsITApKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl9KX0sdC5wcm90b3R5cGUuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucXVldWVkP3QubWFya2VkRm9yRGVzdHJveT0hMDp0LmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2lmKHQucGxheWVycy5sZW5ndGgpcmV0dXJuIGEodC5wbGF5ZXJzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZSgpfSk7ZSgpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NMZWF2ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbSXRdO2lmKG4mJm4uc2V0Rm9yUmVtb3ZhbCl7aWYodFtJdF09anQsbi5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO3ZhciBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG4ubmFtZXNwYWNlSWQpO2kmJmkuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxuLnNldEZvclJlbW92YWwpfXRoaXMuZHJpdmVyLm1hdGNoZXNFbGVtZW50KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIikmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKX0pfSx0LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PS0xKTt2YXIgbj1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LG4pfSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKHZhciBpPTA7aTx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2krKylVdCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbaV0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7dmFyIHI9W107dHJ5e249dGhpcy5fZmx1c2hBbmltYXRpb25zKHIsdCl9ZmluYWxseXtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0oKX19ZWxzZSBmb3IoaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe3ZhciBvPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sbi5sZW5ndGg/YShuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsbz1uZXcgc3Qscz1bXSx1PW5ldyBNYXAsbD1bXSxjPW5ldyBNYXAsaD1uZXcgTWFwLGQ9bmV3IE1hcCxwPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cC5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLGk9MDtpPGUubGVuZ3RoO2krKylwLmFkZChlW2ldKX0pO3ZhciBtPXRoaXMuYm9keU5vZGUseT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksdj16dCh5LHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksZz1uZXcgTWFwLGI9MDt2LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK2IrKztnLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVXQodCxuKX0pfSk7Zm9yKHZhciBfPVtdLHc9bmV3IFNldCx4PW5ldyBTZXQsQz0wO0M8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtDKyspKFU9KEI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0NdKVtJdF0pJiZVLnNldEZvclJlbW92YWwmJihfLnB1c2goQiksdy5hZGQoQiksVS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoQiwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB3LmFkZCh0KX0pOnguYWRkKEIpKTt2YXIgUz1uZXcgTWFwLEU9enQoeSxBcnJheS5mcm9tKHcpKTtFLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK2IrKztTLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVXQodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7di5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49Zy5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIdCh0LG4pfSl9KSxFLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1TLmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsbil9KX0pLF8uZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgTz1bXSxrPVtdLFQ9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1RdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixpPXQuZWxlbWVudDtpZihPLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIHI9aVtJdF07aWYociYmci5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBhPSFtfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KG0saSksdT1TLmdldChpKSxwPWcuZ2V0KGkpLHk9bi5fYnVpbGRJbnN0cnVjdGlvbih0LG8scCx1LGEpO2lmKHkuZXJyb3JzJiZ5LmVycm9ycy5sZW5ndGgpay5wdXNoKHkpO2Vsc2V7aWYoYSlyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEYoaSx5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gTihpLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7aWYodC5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEYoaSx5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gTihpLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7eS50aW1lbGluZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMH0pLG8uYXBwZW5kKGkseS50aW1lbGluZXMpLGwucHVzaCh7aW5zdHJ1Y3Rpb246eSxwbGF5ZXI6ZSxlbGVtZW50Oml9KSx5LnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmKGMsdCxbXSkucHVzaChlKX0pLHkucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGgpe3ZhciBpPWguZ2V0KGUpO2l8fGguc2V0KGUsaT1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkuYWRkKHQpfSl9fSkseS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCksaT1kLmdldChlKTtpfHxkLnNldChlLGk9bmV3IFNldCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLmFkZCh0KX0pfSl9fSk7aWYoay5sZW5ndGgpe3ZhciBqPVtdO2suZm9yRWFjaChmdW5jdGlvbih0KXtqLnB1c2goIkAiK3QudHJpZ2dlck5hbWUrIiBoYXMgZmFpbGVkIGR1ZSB0bzpcbiIpLHQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGoucHVzaCgiLSAiK3QrIlxuIil9KX0pLE8uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLnJlcG9ydEVycm9yKGopfXZhciBBPW5ldyBNYXAsST1uZXcgTWFwO2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQ7by5oYXMoZSkmJihJLnNldChlLGUpLG4uX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQucGxheWVyLm5hbWVzcGFjZUlkLHQuaW5zdHJ1Y3Rpb24sQSkpfSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtuLl9nZXRQcmV2aW91c1BsYXllcnMoZSwhMSx0Lm5hbWVzcGFjZUlkLHQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaChmdW5jdGlvbih0KXtmKEEsZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIFI9Xy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIEd0KHQsaCxkKX0pLE09bmV3IE1hcDtWdChNLHRoaXMuZHJpdmVyLHgsZCxyLmEpLmZvckVhY2goZnVuY3Rpb24odCl7R3QodCxoLGQpJiZSLnB1c2godCl9KTt2YXIgUD1uZXcgTWFwO3YuZm9yRWFjaChmdW5jdGlvbih0LGUpe1Z0KFAsbi5kcml2ZXIsbmV3IFNldCh0KSxoLHIubyl9KSxSLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9TS5nZXQodCksbj1QLmdldCh0KTtNLnNldCh0LE9iamVjdChpLmEpKHt9LGUsbikpfSk7dmFyIEQ9W10sTD1bXSxWPXt9O2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQsaT10LnBsYXllcixyPXQuaW5zdHJ1Y3Rpb247aWYoby5oYXMoZSkpe2lmKHAuaGFzKGUpKXJldHVybiBpLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBOKGUsci50b1N0eWxlcyl9KSxpLmRpc2FibGVkPSEwLGkub3ZlcnJpZGVUb3RhbFRpbWUoci50b3RhbFRpbWUpLHZvaWQgcy5wdXNoKGkpO3ZhciBsPVY7aWYoSS5zaXplPjEpe2Zvcih2YXIgYz1lLGY9W107Yz1jLnBhcmVudE5vZGU7KXt2YXIgaD1JLmdldChjKTtpZihoKXtsPWg7YnJlYWt9Zi5wdXNoKGMpfWYuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSS5zZXQodCxsKX0pfXZhciBkPW4uX2J1aWxkQW5pbWF0aW9uKGkubmFtZXNwYWNlSWQscixBLHUsUCxNKTtpZihpLnNldFJlYWxQbGF5ZXIoZCksbD09PVYpRC5wdXNoKGkpO2Vsc2V7dmFyIG09bi5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTttJiZtLmxlbmd0aCYmKGkucGFyZW50UGxheWVyPWEobSkpLHMucHVzaChpKX19ZWxzZSBGKGUsci5mcm9tU3R5bGVzKSxpLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBOKGUsci50b1N0eWxlcyl9KSxMLnB1c2goaSkscC5oYXMoZSkmJnMucHVzaChpKX0pLEwuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT11LmdldCh0LmVsZW1lbnQpO2lmKGUmJmUubGVuZ3RoKXt2YXIgbj1hKGUpO3Quc2V0UmVhbFBsYXllcihuKX19KSxzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnRQbGF5ZXI/dC5zeW5jUGxheWVyRXZlbnRzKHQucGFyZW50UGxheWVyKTp0LmRlc3Ryb3koKX0pO2Zvcih2YXIgej0wO3o8Xy5sZW5ndGg7eisrKXt2YXIgQixVPShCPV9bel0pW0l0XTtpZihIdChCLCJuZy1sZWF2ZSIpLCFVfHwhVS5oYXNBbmltYXRpb24pe3ZhciBIPVtdO2lmKGMuc2l6ZSl7dmFyIHE9Yy5nZXQoQik7cSYmcS5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChpLmQpKHEpKTtmb3IodmFyIEc9dGhpcy5kcml2ZXIucXVlcnkoQiwiLm5nLWFuaW1hdGluZyIsITApLFE9MDtRPEcubGVuZ3RoO1ErKyl7dmFyIFk9Yy5nZXQoR1tRXSk7WSYmWS5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChpLmQpKFkpKX19dmFyIFc9SC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZGVzdHJveWVkfSk7Vy5sZW5ndGg/cXQodGhpcyxCLFcpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShCKX19cmV0dXJuIF8ubGVuZ3RoPTAsRC5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucGxheWVycy5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7dC5kZXN0cm95KCk7dmFyIGU9bi5wbGF5ZXJzLmluZGV4T2YodCk7bi5wbGF5ZXJzLnNwbGljZShlLDEpfSksdC5wbGF5KCl9KSxEfSx0LnByb3RvdHlwZS5lbGVtZW50Q29udGFpbnNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEsaT1lW0l0XTtyZXR1cm4gaSYmaS5zZXRGb3JSZW1vdmFsJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8bn0sdC5wcm90b3R5cGUuYWZ0ZXJGbHVzaD1mdW5jdGlvbih0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9nZXRQcmV2aW91c1BsYXllcnM9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz1bXTtpZihlKXt2YXIgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYobz1hKX1lbHNle3ZhciBzPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYocyl7dmFyIHU9IXJ8fCJ2b2lkIj09cjtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5xdWV1ZWR8fCh1fHx0LnRyaWdnZXJOYW1lPT1pKSYmby5wdXNoKHQpfSl9fXJldHVybihufHxpKSYmKG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIShuJiZuIT10Lm5hbWVzcGFjZUlkfHxpJiZpIT10LnRyaWdnZXJOYW1lKX0pKSxvfSx0LnByb3RvdHlwZS5fYmVmb3JlQW5pbWF0aW9uQnVpbGQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8sYT1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsdT1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWUsbD1mdW5jdGlvbih0KXt2YXIgaT10LmVsZW1lbnQscj1pIT09YSxvPWYobixpLFtdKTtjLl9nZXRQcmV2aW91c1BsYXllcnMoaSxyLHMsdSxlLnRvU3RhdGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRSZWFsUGxheWVyKCk7ZS5iZWZvcmVEZXN0cm95JiZlLmJlZm9yZURlc3Ryb3koKSx0LmRlc3Ryb3koKSxvLnB1c2godCl9KX0sYz10aGlzO3RyeXtmb3IodmFyIGg9T2JqZWN0KGkuZSkoZS50aW1lbGluZXMpLGQ9aC5uZXh0KCk7IWQuZG9uZTtkPWgubmV4dCgpKWwoZC52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKG89aC5yZXR1cm4pJiZvLmNhbGwoaCl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fUYoYSxlLmZyb21TdHlsZXMpfSx0LnByb3RvdHlwZS5fYnVpbGRBbmltYXRpb249ZnVuY3Rpb24odCxlLG4saSxvLHUpe3ZhciBsPXRoaXMsYz1lLnRyaWdnZXJOYW1lLGg9ZS5lbGVtZW50LGQ9W10scD1uZXcgU2V0LG09bmV3IFNldCx5PWUudGltZWxpbmVzLm1hcChmdW5jdGlvbihlKXt2YXIgYT1lLmVsZW1lbnQ7cC5hZGQoYSk7dmFyIGY9YVtJdF07aWYoZiYmZi5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IHIuZChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciB5LHYsZz1hIT09aCxiPSh5PShuLmdldChhKXx8VHQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSx2PVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvIGluc3RhbmNlb2Ygci5uP3Qoby5wbGF5ZXJzLG4pOm4ucHVzaChvKX19KHksdiksdikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhdC5lbGVtZW50JiZ0LmVsZW1lbnQ9PT1hfSksXz1vLmdldChhKSx3PXUuZ2V0KGEpLHg9cygwLGwuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyxfLHcpLEM9bC5fYnVpbGRQbGF5ZXIoZSx4LGIpO2lmKGUuc3ViVGltZWxpbmUmJmkmJm0uYWRkKGEpLGcpe3ZhciBTPW5ldyBOdCh0LGMsYSk7Uy5zZXRSZWFsUGxheWVyKEMpLGQucHVzaChTKX1yZXR1cm4gQ30pO2QuZm9yRWFjaChmdW5jdGlvbih0KXtmKGwucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LFtdKS5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgaTtpZih0IGluc3RhbmNlb2YgTWFwKXtpZihpPXQuZ2V0KGUpKXtpZihpLmxlbmd0aCl7dmFyIHI9aS5pbmRleE9mKG4pO2kuc3BsaWNlKHIsMSl9MD09aS5sZW5ndGgmJnQuZGVsZXRlKGUpfX1lbHNlKGk9dFtlXSkmJihpLmxlbmd0aCYmKHI9aS5pbmRleE9mKG4pLGkuc3BsaWNlKHIsMSkpLDA9PWkubGVuZ3RoJiZkZWxldGUgdFtlXSk7cmV0dXJuIGl9KGwucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LHQpfSl9KSxwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFV0KHQsIm5nLWFuaW1hdGluZyIpfSk7dmFyIHY9YSh5KTtyZXR1cm4gdi5vbkRlc3Ryb3koZnVuY3Rpb24oKXtwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsIm5nLWFuaW1hdGluZyIpfSksTihoLGUudG9TdHlsZXMpfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2YoaSx0LFtdKS5wdXNoKHYpfSksdn0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKHQuZWxlbWVudCxlLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxuKTpuZXcgci5kKHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgci5kLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1yZXR1cm4gdC5wcm90b3R5cGUuc2V0UmVhbFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj10LE9iamVjdC5rZXlzKHRoaXMuX3F1ZXVlZENhbGxiYWNrcykuZm9yRWFjaChmdW5jdGlvbihuKXtlLl9xdWV1ZWRDYWxsYmFja3Nbbl0uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdSh0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Zih0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsdCksdGhpcy5fcGxheWVyLm9uU3RhcnQodCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5pbml0KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX0sdH0oKTtmdW5jdGlvbiBGdCh0KXtyZXR1cm4gdCYmMT09PXQubm9kZVR5cGV9ZnVuY3Rpb24gTHQodCxlKXt2YXIgbj10LnN0eWxlLmRpc3BsYXk7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT1udWxsIT1lP2U6Im5vbmUiLG59ZnVuY3Rpb24gVnQodCxlLG4saSxyKXt2YXIgbz1bXTtuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG8ucHVzaChMdCh0KSl9KTt2YXIgYT1bXTtpLmZvckVhY2goZnVuY3Rpb24obixpKXt2YXIgbz17fTtuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49b1t0XT1lLmNvbXB1dGVTdHlsZShpLHQscik7biYmMCE9bi5sZW5ndGh8fChpW0l0XT1BdCxhLnB1c2goaSkpfSksdC5zZXQoaSxvKX0pO3ZhciBzPTA7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gTHQodCxvW3MrK10pfSksYX1mdW5jdGlvbiB6dCh0LGUpe3ZhciBuPW5ldyBNYXA7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNldCh0LFtdKX0pLDA9PWUubGVuZ3RoKXJldHVybiBuO3ZhciBpPW5ldyBTZXQoZSkscj1uZXcgTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24gdChlKXtpZighZSlyZXR1cm4gMTt2YXIgbz1yLmdldChlKTtpZihvKXJldHVybiBvO3ZhciBhPWUucGFyZW50Tm9kZTtyZXR1cm4gbz1uLmhhcyhhKT9hOmkuaGFzKGEpPzE6dChhKSxyLnNldChlLG8pLG99KHQpOzEhPT1lJiZuLmdldChlKS5wdXNoKHQpfSksbn12YXIgQnQ9IiQkY2xhc3NlcyI7ZnVuY3Rpb24gVXQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj10W0J0XTtufHwobj10W0J0XT17fSksbltlXT0hMH19ZnVuY3Rpb24gSHQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5yZW1vdmUoZSk7ZWxzZXt2YXIgbj10W0J0XTtuJiZkZWxldGUgbltlXX19ZnVuY3Rpb24gcXQodCxlLG4pe2Eobikub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvY2Vzc0xlYXZlTm9kZShlKX0pfWZ1bmN0aW9uIEd0KHQsZSxuKXt2YXIgaT1uLmdldCh0KTtpZighaSlyZXR1cm4hMTt2YXIgcj1lLmdldCh0KTtyZXR1cm4gcj9pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSk6ZS5zZXQodCxpKSxuLmRlbGV0ZSh0KSwhMH12YXIgUXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgRHQodCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBrdCh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBpLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9fXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3RlclRyaWdnZXI9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10KyItIitpLGE9dGhpcy5fdHJpZ2dlckNhY2hlW29dO2lmKCFhKXt2YXIgcz1bXSx1PXR0KHRoaXMuX2RyaXZlcixyLHMpO2lmKHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2krJyIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAnK3Muam9pbigiXG4gLSAiKSk7YT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgU3QodCxlKX0oaSx1KSx0aGlzLl90cmlnZ2VyQ2FjaGVbb109YX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLGksYSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9LHQucHJvdG90eXBlLm9uSW5zZXJ0PWZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixpKX0sdC5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX0sdC5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbih0LGUsbixyKXtpZigiQCI9PW4uY2hhckF0KDApKXt2YXIgbz1PYmplY3QoaS5jKShoKG4pLDIpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQob1swXSxlLG9bMV0scil9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIodCxlLG4scil9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe3ZhciBhPU9iamVjdChpLmMpKGgobiksMik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihhWzBdLGUsYVsxXSxvKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLG4scixvKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9LTEpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGxheWVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxZdD0iYW5pbWF0aW9uIixXdD0iYW5pbWF0aW9uZW5kIixadD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fbmFtZT1lLHRoaXMuX2R1cmF0aW9uPW4sdGhpcy5fZGVsYXk9aSx0aGlzLl9lYXNpbmc9cix0aGlzLl9maWxsTW9kZT1vLHRoaXMuX29uRG9uZUZuPWEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fZXZlbnRGbj1mdW5jdGlvbih0KXtyZXR1cm4gcy5faGFuZGxlQ2FsbGJhY2sodCl9fXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0LGUsbjtlPXRoaXMuX2R1cmF0aW9uKyJtcyAiK3RoaXMuX2Vhc2luZysiICIrdGhpcy5fZGVsYXkrIm1zIDEgbm9ybWFsICIrdGhpcy5fZmlsbE1vZGUrIiAiK3RoaXMuX25hbWUsKG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS50cmltKCkpLmxlbmd0aCYmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspIiwiPT09dC5jaGFyQXQobikmJjB9KG4pLGU9bisiLCAiK2UpLHRlKHQsIiIsZSksSnQodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtLdCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInBhdXNlZCIpfSx0LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtLdCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInJ1bm5pbmciKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9WHQodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKTt0aGlzLl9wb3NpdGlvbj10KnRoaXMuX2R1cmF0aW9uLHRlKHRoaXMuX2VsZW1lbnQsIkRlbGF5IiwiLSIrdGhpcy5fcG9zaXRpb24rIm1zIixlKX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHQucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9uZ1Rlc3RNYW51YWxUaW1lc3RhbXB8fERhdGUubm93KCksbj0xZTMqcGFyc2VGbG9hdCh0LmVsYXBzZWRUaW1lLnRvRml4ZWQoMykpO3QuYW5pbWF0aW9uTmFtZT09dGhpcy5fbmFtZSYmTWF0aC5tYXgoZS10aGlzLl9zdGFydFRpbWUsMCk+PXRoaXMuX2RlbGF5JiZuPj10aGlzLl9kdXJhdGlvbiYmdGhpcy5maW5pc2goKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLEp0KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGk7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZmluaXNoKCksZT10aGlzLl9uYW1lLChpPSR0KG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS5zcGxpdCgiLCIpLGUpKT49MCYmKG4uc3BsaWNlKGksMSksdGUodCwiIixuLmpvaW4oIiwiKSkpKX0sdH0oKTtmdW5jdGlvbiBLdCh0LGUsbil7dGUodCwiUGxheVN0YXRlIixuLFh0KHQsZSkpfWZ1bmN0aW9uIFh0KHQsZSl7dmFyIG49ZWUodCwiIik7cmV0dXJuIG4uaW5kZXhPZigiLCIpPjA/JHQobi5zcGxpdCgiLCIpLGUpOiR0KFtuXSxlKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBKdCh0LGUsbil7bj90LnJlbW92ZUV2ZW50TGlzdGVuZXIoV3QsZSk6dC5hZGRFdmVudExpc3RlbmVyKFd0LGUpfWZ1bmN0aW9uIHRlKHQsZSxuLGkpe3ZhciByPVl0K2U7aWYobnVsbCE9aSl7dmFyIG89dC5zdHlsZVtyXTtpZihvLmxlbmd0aCl7dmFyIGE9by5zcGxpdCgiLCIpO2FbaV09bixuPWEuam9pbigiLCIpfX10LnN0eWxlW3JdPW59ZnVuY3Rpb24gZWUodCxlKXtyZXR1cm4gdC5zdHlsZVtZdCtlXX12YXIgbmU9ImxpbmVhciIsaWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEpe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5hbmltYXRpb25OYW1lPW4sdGhpcy5fZHVyYXRpb249aSx0aGlzLl9kZWxheT1yLHRoaXMuX2ZpbmFsU3R5bGVzPWEsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fc3RhdGU9MCx0aGlzLmVhc2luZz1vfHxuZSx0aGlzLnRvdGFsVGltZT1pK3IsdGhpcy5fYnVpbGRTdHlsZXIoKX1yZXR1cm4gdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fc3RhdGU+PTR8fCh0aGlzLl9zdGF0ZT00LHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5fZmx1c2hEb25lRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXX0sdC5wcm90b3R5cGUuX2ZsdXNoU3RhcnRGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX3N0YXRlPj0zfHwodGhpcy5fc3RhdGU9Myx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZT49Mn0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX3N0YXRlPj0xfHwodGhpcy5fc3RhdGU9MSx0aGlzLl9zdHlsZXIuYXBwbHkoKSx0aGlzLl9kZWxheSYmdGhpcy5fc3R5bGVyLnBhdXNlKCkpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fc3RhdGU9MiksdGhpcy5fc3R5bGVyLnJlc3VtZSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX3N0eWxlci5wYXVzZSgpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fYnVpbGRTdHlsZXIoKSx0aGlzLl9zdHlsZXIuYXBwbHkoKX0sdC5wcm90b3R5cGUuX2J1aWxkU3R5bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdHlsZXI9bmV3IFp0KHRoaXMuZWxlbWVudCx0aGlzLmFuaW1hdGlvbk5hbWUsdGhpcy5fZHVyYXRpb24sdGhpcy5fZGVsYXksdGhpcy5lYXNpbmcsImZvcndhcmRzIixmdW5jdGlvbigpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksZS5sZW5ndGg9MH0sdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5pbml0KCk7dmFyIGU9e307aWYodGhpcy5oYXNTdGFydGVkKCkpe3ZhciBuPXRoaXMuX3N0YXRlPj0zO09iamVjdC5rZXlzKHRoaXMuX2ZpbmFsU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGkpeyJvZmZzZXQiIT1pJiYoZVtpXT1uP3QuX2ZpbmFsU3R5bGVzW2ldOlcodC5lbGVtZW50LGkpKX0pfXRoaXMuY3VycmVudFNuYXBzaG90PWV9LHR9KCkscmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5lbGVtZW50PWUsaS5fc3RhcnRpbmdTdHlsZXM9e30saS5fX2luaXRpYWxpemVkPSExLGkuX3N0eWxlcz1FKG4pLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IXRoaXMuX19pbml0aWFsaXplZCYmdGhpcy5fc3RhcnRpbmdTdHlsZXMmJih0aGlzLl9faW5pdGlhbGl6ZWQ9ITAsT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0YXJ0aW5nU3R5bGVzW3RdPWUuZWxlbWVudC5zdHlsZVt0XX0pLHQucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5pbml0KCksT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxlLl9zdHlsZXNbdF0pfSksdC5wcm90b3R5cGUucGxheS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc3RhcnRpbmdTdHlsZXMmJihPYmplY3Qua2V5cyh0aGlzLl9zdGFydGluZ1N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9zdGFydGluZ1N0eWxlc1t0XTtuP2UuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOmUuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX0pLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpKX0sZX0oci5kKSxvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9jb3VudD0wLHRoaXMuX2hlYWQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLHRoaXMuX3dhcm5pbmdJc3N1ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geCh0LGUpfSx0LnByb3RvdHlwZS5jb250YWluc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQyh0LGUpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIFModCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPSJAa2V5ZnJhbWVzICIrZSsiIHtcbiIscj0iIjsobj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gRSh0KX0pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3I9IiAiO3ZhciBlPXBhcnNlRmxvYXQodC5vZmZzZXQpO2krPSIiK3IrMTAwKmUrIiUge1xuIixyKz0iICIsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10W2VdO3N3aXRjaChlKXtjYXNlIm9mZnNldCI6cmV0dXJuO2Nhc2UiZWFzaW5nIjpyZXR1cm4gdm9pZChuJiYoaSs9cisiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogIituKyI7XG4iKSk7ZGVmYXVsdDpyZXR1cm4gdm9pZChpKz0iIityK2UrIjogIituKyI7XG4iKX19KSxpKz1yKyJ9XG4ifSksaSs9In1cbiI7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gby5pbm5lckhUTUw9aSxvfSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEpe3ZvaWQgMD09PW8mJihvPVtdKSxhJiZ0aGlzLl9ub3RpZnlGYXVsdHlTY3J1YmJlcigpO3ZhciBzPW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaWV9KSx1PXt9O0cobixpKSYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHVbdF09ZVt0XX0pfSk7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHQmJihBcnJheS5pc0FycmF5KHQpP3Q6W3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7Im9mZnNldCIhPW4mJiJlYXNpbmciIT1uJiYoZVtuXT10W25dKX0pfSksZX0oZT1RKHQsZSx1KSk7aWYoMD09bilyZXR1cm4gbmV3IHJlKHQsbCk7dmFyIGM9Imdlbl9jc3Nfa2ZfIit0aGlzLl9jb3VudCsrLGY9dGhpcy5idWlsZEtleWZyYW1lRWxlbWVudCh0LGMsZSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLmFwcGVuZENoaWxkKGYpO3ZhciBoPW5ldyBpZSh0LGUsYyxuLGkscixsKTtyZXR1cm4gaC5vbkRlc3Ryb3koZnVuY3Rpb24oKXt2YXIgdDsodD1mKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSksaH0sdC5wcm90b3R5cGUuX25vdGlmeUZhdWx0eVNjcnViYmVyPWZ1bmN0aW9uKCl7dGhpcy5fd2FybmluZ0lzc3VlZHx8KGNvbnNvbGUud2FybigiQGFuZ3VsYXIvYW5pbWF0aW9uczogcGxlYXNlIGxvYWQgdGhlIHdlYi1hbmltYXRpb25zLmpzIHBvbHlmaWxsIHRvIGFsbG93IHByb2dyYW1tYXRpYyBhY2Nlc3MuLi5cbiIsIiAgdmlzaXQgaHR0cDovL2JpdC5seS9JV3VrYW0gdG8gbGVhcm4gbW9yZSBhYm91dCB1c2luZyB0aGUgd2ViLWFuaW1hdGlvbi1qcyBwb2x5ZmlsbC4iKSx0aGlzLl93YXJuaW5nSXNzdWVkPSEwKX0sdH0oKSxhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPW4sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX2luaXRpYWxpemVkKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZT10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxlLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnt9LHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfX0sdC5wcm90b3R5cGUuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5fdHJpZ2dlcldlYkFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYW5pbWF0ZShlLG4pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITApLHRoaXMuZG9tUGxheWVyLnBsYXkoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuX3Jlc2V0RG9tUGxheWVyU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0b3RhbFRpbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmKGVbbl09dC5fZmluaXNoZWQ/dC5fZmluYWxLZXlmcmFtZVtuXTpXKHQuZWxlbWVudCxuKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD1lfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faXNOYXRpdmVJbXBsPS9ce1xzKlxbbmF0aXZlXHMrY29kZVxdXHMqXH0vLnRlc3QobGUoKS50b1N0cmluZygpKSx0aGlzLl9jc3NLZXlmcmFtZXNEcml2ZXI9bmV3IG9lfXJldHVybiB0LnByb3RvdHlwZS52YWxpZGF0ZVN0eWxlUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEModCxlKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBTKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19LHQucHJvdG90eXBlLm92ZXJyaWRlV2ViQW5pbWF0aW9uc1N1cHBvcnQ9ZnVuY3Rpb24odCl7dGhpcy5faXNOYXRpdmVJbXBsPXR9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlLG4saSxyLG8sYSl7aWYodm9pZCAwPT09byYmKG89W10pLCFhJiYhdGhpcy5faXNOYXRpdmVJbXBsKXJldHVybiB0aGlzLl9jc3NLZXlmcmFtZXNEcml2ZXIuYW5pbWF0ZSh0LGUsbixpLHIsbyk7dmFyIHM9e2R1cmF0aW9uOm4sZGVsYXk6aSxmaWxsOjA9PWk/ImJvdGgiOiJmb3J3YXJkcyJ9O3ImJihzLmVhc2luZz1yKTt2YXIgdT17fSxsPW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYWV9KTtyZXR1cm4gRyhuLGkpJiZsLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdVt0XT1lW3RdfSl9KSxlPVEodCxlPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNKHQsITEpfSksdSksbmV3IGFlKHQsZSxzKX0sdH0oKTtmdW5jdGlvbiB1ZSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsZSgpfWZ1bmN0aW9uIGxlKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudCYmRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZXx8e319fSxOc2g1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4oImloWVkiKTt2YXIgaT1uKCJuNmdHIikscj1uKCJZU2gyIiksbz1uKCJDY25HIiksYT1uKCJLOUlhIikscz1uKCJibmU1IiksdT1uKCJwMGliIiksbD1uKCJWbkQvIiksYz1uKCI2N1kvIiksZj1uKCJ0OWZaIiksaD1uKCJueTI0IiksZD1uKCJwMFNqIikscD1uKCJHaTNpIiksbT1uKCJtclNHIik7ZnVuY3Rpb24geSh0KXt0aHJvdyBFcnJvcigiQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiIrdCsiXCInIil9dmFyIHY9bmV3IG8ucSgiTUFUX0RSQVdFUl9ERUZBVUxUX0FVVE9TSVpFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiExfX0pLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9dCx0aGlzLl9jb250YWluZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5DaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9LHR9KCksYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSx1LGMpe3ZhciBmPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT11LHRoaXMuX2RvYz1jLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMSx0aGlzLl9wb3NpdGlvbj0ic3RhcnQiLHRoaXMuX21vZGU9Im92ZXIiLHRoaXMuX2Rpc2FibGVDbG9zZT0hMSx0aGlzLl9hdXRvRm9jdXM9ITAsdGhpcy5fYW5pbWF0aW9uU3RhcnRlZD1uZXcgby5uLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLm9wZW5lZENoYW5nZT1uZXcgby5uKCEwKSx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkPW5ldyBvLm4sdGhpcy5fbW9kZUNoYW5nZWQ9bmV3IGEuYSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3Q/KGYuX2RvYyYmKGYuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPWYuX2RvYy5hY3RpdmVFbGVtZW50KSxmLl9pc0ZvY3VzVHJhcEVuYWJsZWQmJmYuX2ZvY3VzVHJhcCYmZi5fdHJhcEZvY3VzKCkpOmYuX3Jlc3RvcmVGb2N1cygpfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7T2JqZWN0KHMuYSkoZi5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJrZXlkb3duIikucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlDb2RlPT09ci5nJiYhZi5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBmLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7Zi5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1PYmplY3QoaS5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9Gb2N1cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRm9jdXN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvRm9jdXM9T2JqZWN0KGkuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfb3BlbmVkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxPYmplY3QoYy5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9wZW5lZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJjA9PT10LnRvU3RhdGUuaW5kZXhPZigib3BlbiIpfSksT2JqZWN0KGMuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfY2xvc2VkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR9KSxPYmplY3QoYy5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNsb3NlZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJiJ2b2lkIj09PXQudG9TdGF0ZX0pLE9iamVjdChjLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2lzRm9jdXNUcmFwRW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZCYmInNpZGUiIT09dGhpcy5tb2RlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl90cmFwRm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXV0b0ZvY3VzJiZ0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oZnVuY3Rpb24oZSl7ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1c3x8dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX0sdC5wcm90b3R5cGUuX3Jlc3RvcmVGb2N1cz1mdW5jdGlvbigpe2lmKHRoaXMuYXV0b0ZvY3VzKXt2YXIgdD10aGlzLl9kb2MmJnRoaXMuX2RvYy5hY3RpdmVFbGVtZW50O3QmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0KSYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkLHRoaXMuX29wZW5lZFZpYSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKSksdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQ9bnVsbCx0aGlzLl9vcGVuZWRWaWE9bnVsbH19LHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2ZvY3VzVHJhcC5lbmFibGVkPXRoaXMuX2lzRm9jdXNUcmFwRW5hYmxlZH0sdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRDaGVja2VkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9wZW5lZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcGVuZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZShPYmplY3QoaS5jKSh0KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50b2dnbGUoITAsdCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9nZ2xlKCExKX0sdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IXRoaXMub3BlbmVkKSx2b2lkIDA9PT1lJiYoZT0icHJvZ3JhbSIpLHRoaXMuX29wZW5lZD10LHQ/KHRoaXMuX2FuaW1hdGlvblN0YXRlPXRoaXMuX2VuYWJsZUFuaW1hdGlvbnM/Im9wZW4iOiJvcGVuLWluc3RhbnQiLHRoaXMuX29wZW5lZFZpYT1lKToodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX3Jlc3RvcmVGb2N1cygpKSx0aGlzLl9mb2N1c1RyYXAmJih0aGlzLl9mb2N1c1RyYXAuZW5hYmxlZD10aGlzLl9pc0ZvY3VzVHJhcEVuYWJsZWQpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe24ub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGYuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXtyZXR1cm4gdChlPyJvcGVuIjoiY2xvc2UiKX0pfSl9LHQucHJvdG90eXBlLl9vbkFuaW1hdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2FuaW1hdGlvblN0YXJ0ZWQuZW1pdCh0KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uRW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJvbVN0YXRlLG49dC50b1N0YXRlOygwPT09bi5pbmRleE9mKCJvcGVuIikmJiJ2b2lkIj09PWV8fCJ2b2lkIj09PW4mJjA9PT1lLmluZGV4T2YoIm9wZW4iKSkmJnRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodGhpcy5fb3BlbmVkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd2lkdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50JiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIscyl7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciB1PXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgby5uLHRoaXMuX2Rlc3Ryb3llZD1uZXcgYS5hLHRoaXMuX2RvQ2hlY2tTdWJqZWN0PW5ldyBhLmEsdGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6bnVsbCxyaWdodDpudWxsfSx0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcz1uZXcgYS5hLHQmJnQuY2hhbmdlLnBpcGUoT2JqZWN0KGguYSkodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dS5fdmFsaWRhdGVEcmF3ZXJzKCksdS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKX0pLHRoaXMuX2F1dG9zaXplPXJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXV0b3NpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b3NpemV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvc2l6ZT1PYmplY3QoaS5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0JhY2tkcm9wIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2JhY2tkcm9wT3ZlcnJpZGU/IXRoaXMuX3N0YXJ0fHwic2lkZSIhPT10aGlzLl9zdGFydC5tb2RlfHwhdGhpcy5fZW5kfHwic2lkZSIhPT10aGlzLl9lbmQubW9kZTp0aGlzLl9iYWNrZHJvcE92ZXJyaWRlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYmFja2Ryb3BPdmVycmlkZT1udWxsPT10P251bGw6T2JqZWN0KGkuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9kcmF3ZXJzLmNoYW5nZXMucGlwZShPYmplY3QoZC5hKShudWxsKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fdmFsaWRhdGVEcmF3ZXJzKCksdC5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuX3dhdGNoRHJhd2VyVG9nZ2xlKGUpLHQuX3dhdGNoRHJhd2VyUG9zaXRpb24oZSksdC5fd2F0Y2hEcmF3ZXJNb2RlKGUpfSksKCF0Ll9kcmF3ZXJzLmxlbmd0aHx8dC5faXNEcmF3ZXJPcGVuKHQuX3N0YXJ0KXx8dC5faXNEcmF3ZXJPcGVuKHQuX2VuZCkpJiZ0Ll91cGRhdGVDb250ZW50TWFyZ2lucygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZG9DaGVja1N1YmplY3QucGlwZShPYmplY3QocC5hKSgxMCksT2JqZWN0KGguYSkodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCl9KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kb0NoZWNrU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLl9kcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQub3BlbigpfSl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9hdXRvc2l6ZSYmdGhpcy5faXNQdXNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2RvQ2hlY2tTdWJqZWN0Lm5leHQoKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJUb2dnbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0Ll9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KGguYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSxPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGV9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpeyJvcGVuLWluc3RhbnQiIT09dC50b1N0YXRlJiYiTm9vcEFuaW1hdGlvbnMiIT09ZS5fYW5pbWF0aW9uTW9kZSYmZS5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1kcmF3ZXItdHJhbnNpdGlvbiIpLGUuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCksZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSwic2lkZSIhPT10Lm1vZGUmJnQub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGguYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3NldENvbnRhaW5lckNsYXNzKHQub3BlbmVkKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQub25Qb3NpdGlvbkNoYW5nZWQucGlwZShPYmplY3QoaC5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5hc09ic2VydmFibGUoKS5waXBlKE9iamVjdChmLmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl92YWxpZGF0ZURyYXdlcnMoKX0pfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlck1vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0Ll9tb2RlQ2hhbmdlZC5waXBlKE9iamVjdChoLmEpKE9iamVjdCh1LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSx0LnByb3RvdHlwZS5fc2V0Q29udGFpbmVyQ2xhc3M9ZnVuY3Rpb24odCl7dD90aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci1vcGVuZWQiKTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWF0LWRyYXdlci1vcGVuZWQiKX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlRHJhd2Vycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RhcnQ9dGhpcy5fZW5kPW51bGwsdGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJlbmQiPT1lLnBvc2l0aW9uPyhudWxsIT10Ll9lbmQmJnkoImVuZCIpLHQuX2VuZD1lKToobnVsbCE9dC5fc3RhcnQmJnkoInN0YXJ0IiksdC5fc3RhcnQ9ZSl9KSx0aGlzLl9yaWdodD10aGlzLl9sZWZ0PW51bGwsdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8odGhpcy5fbGVmdD10aGlzLl9lbmQsdGhpcy5fcmlnaHQ9dGhpcy5fc3RhcnQpOih0aGlzLl9sZWZ0PXRoaXMuX3N0YXJ0LHRoaXMuX3JpZ2h0PXRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9pc1B1c2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiYib3ZlciIhPXRoaXMuX3N0YXJ0Lm1vZGV8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiYib3ZlciIhPXRoaXMuX2VuZC5tb2RlfSx0LnByb3RvdHlwZS5fb25CYWNrZHJvcENsaWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdCgpLHRoaXMuX2Nsb3NlTW9kYWxEcmF3ZXIoKX0sdC5wcm90b3R5cGUuX2Nsb3NlTW9kYWxEcmF3ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO1t0aGlzLl9zdGFydCx0aGlzLl9lbmRdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmIWUuZGlzYWJsZUNsb3NlJiZ0Ll9jYW5IYXZlQmFja2Ryb3AoZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUuX2lzU2hvd2luZ0JhY2tkcm9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkmJnRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9zdGFydCl8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fZW5kKX0sdC5wcm90b3R5cGUuX2NhbkhhdmVCYWNrZHJvcD1mdW5jdGlvbih0KXtyZXR1cm4ic2lkZSIhPT10Lm1vZGV8fCEhdGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sdC5wcm90b3R5cGUuX2lzRHJhd2VyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmdC5vcGVuZWR9LHQucHJvdG90eXBlLl91cGRhdGVDb250ZW50TWFyZ2lucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT0wLG49MDtpZih0aGlzLl9sZWZ0JiZ0aGlzLl9sZWZ0Lm9wZW5lZCYmKCJzaWRlIj09dGhpcy5fbGVmdC5tb2RlP2UrPXRoaXMuX2xlZnQuX3dpZHRoOiJwdXNoIj09dGhpcy5fbGVmdC5tb2RlJiYoZSs9aT10aGlzLl9sZWZ0Ll93aWR0aCxuLT1pKSksdGhpcy5fcmlnaHQmJnRoaXMuX3JpZ2h0Lm9wZW5lZClpZigic2lkZSI9PXRoaXMuX3JpZ2h0Lm1vZGUpbis9dGhpcy5fcmlnaHQuX3dpZHRoO2Vsc2UgaWYoInB1c2giPT10aGlzLl9yaWdodC5tb2RlKXt2YXIgaTtuKz1pPXRoaXMuX3JpZ2h0Ll93aWR0aCxlLT1pfWU9ZXx8bnVsbCxuPW58fG51bGwsZT09PXRoaXMuX2NvbnRlbnRNYXJnaW5zLmxlZnQmJm49PT10aGlzLl9jb250ZW50TWFyZ2lucy5yaWdodHx8KHRoaXMuX2NvbnRlbnRNYXJnaW5zPXtsZWZ0OmUscmlnaHQ6bn0sdGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZW50TWFyZ2luQ2hhbmdlcy5uZXh0KHQuX2NvbnRlbnRNYXJnaW5zKX0pKX0sdH0oKSx3PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KG0uYikoZSx0KSxlfShnKSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2ZpeGVkSW5WaWV3cG9ydD0hMSxlLl9maXhlZFRvcEdhcD0wLGUuX2ZpeGVkQm90dG9tR2FwPTAsZX1yZXR1cm4gT2JqZWN0KG0uYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkSW5WaWV3cG9ydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEluVmlld3BvcnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZEluVmlld3BvcnQ9T2JqZWN0KGkuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZFRvcEdhcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZFRvcEdhcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkVG9wR2FwPU9iamVjdChpLmUpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRCb3R0b21HYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRCb3R0b21HYXB9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZEJvdHRvbUdhcD1PYmplY3QoaS5lKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShiKSxDPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QobS5iKShlLHQpLGV9KF8pLFM9ZnVuY3Rpb24oKXt9fSxPemZCOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBIfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigiSXAwUiIpLG89bigiMjZGVSIpLGE9bigiVm5ELyIpLHM9bigiNjdZLyIpLHU9bigibXJTRyIpO2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihPYmplY3Qoci50KShlKSl7dmFyIG49L1xiZmxleC1sYXlvdXQtLis/XGIvZztBcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbCgiW2NsYXNzKj0iK2MrIl0iKSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNsYXNzTGlzdC5jb250YWlucyhjKyJzc3IiKSYmdC5wYXJlbnROb2RlP3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KTp0LmNsYXNzTmFtZS5yZXBsYWNlKG4sIiIpfSl9fX12YXIgYz0iZmxleC1sYXlvdXQtIixmPW5ldyBpLnEoIkZsZXggTGF5b3V0IHRva2VuLCBjb2xsZWN0IGFsbCBicmVha3BvaW50cyBpbnRvIG9uZSBwcm92aWRlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxoPVt7YWxpYXM6InhzIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6Imd0LXhzIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkifSx7YWxpYXM6Imx0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6InNtIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoiZ3Qtc20iLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSJ9LHthbGlhczoibHQtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoibWQiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoiZ3QtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkifSx7YWxpYXM6Imx0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxMjc5cHgpIn0se2FsaWFzOiJsZyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSJ9LHthbGlhczoiZ3QtbGciLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkifSx7YWxpYXM6Imx0LXhsIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJ4bCIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTkyMHB4KSBhbmQgKG1heC13aWR0aDogNTAwMHB4KSJ9XSxkPSIob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSIscD0iKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogODM5cHgpIixtPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODQwcHgpIix5PSIob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEyODBweCkiLHY9e0hBTkRTRVQ6IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA1OTlweCksIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogOTU5cHgpIixUQUJMRVQ6cCsiICwgIitkLFdFQjptKyIsICIreSsiICIsSEFORFNFVF9QT1JUUkFJVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSIsVEFCTEVUX1BPUlRSQUlUOnArIiAiLFdFQl9QT1JUUkFJVDoiIittLEhBTkRTRVRfTEFORFNDQVBFOiIob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KV0iLFRBQkxFVF9MQU5EU0NBUEU6IiIrZCxXRUJfTEFORFNDQVBFOiIiK3l9LGc9W3thbGlhczoiaGFuZHNldCIsbWVkaWFRdWVyeTp2LkhBTkRTRVR9LHthbGlhczoiaGFuZHNldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6di5IQU5EU0VUX0xBTkRTQ0FQRX0se2FsaWFzOiJoYW5kc2V0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OnYuSEFORFNFVF9QT1JUUkFJVH0se2FsaWFzOiJ0YWJsZXQiLG1lZGlhUXVlcnk6di5UQUJMRVR9LHthbGlhczoidGFibGV0LmxhbmRzY2FwZSIsbWVkaWFRdWVyeTp2LlRBQkxFVH0se2FsaWFzOiJ0YWJsZXQucG9ydHJhaXQiLG1lZGlhUXVlcnk6di5UQUJMRVRfUE9SVFJBSVR9LHthbGlhczoid2ViIixtZWRpYVF1ZXJ5OnYuV0VCLG92ZXJsYXBwaW5nOiEwfSx7YWxpYXM6IndlYi5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6di5XRUJfTEFORFNDQVBFLG92ZXJsYXBwaW5nOiEwfSx7YWxpYXM6IndlYi5wb3J0cmFpdCIsbWVkaWFRdWVyeTp2LldFQl9QT1JUUkFJVCxvdmVybGFwcGluZzohMH1dO2Z1bmN0aW9uIGIodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO2Zvcih2YXIgaT0wLHI9ZTtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihudWxsIT1vKWZvcih2YXIgYSBpbiBvKW8uaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPW9bYV0pfXJldHVybiB0fXZhciBfPS8oXC58LXxfKS9nO2Z1bmN0aW9uIHcodCl7dmFyIGU9dC5sZW5ndGg+MD90LmNoYXJBdCgwKToiIixuPXQubGVuZ3RoPjE/dC5zbGljZSgxKToiIjtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK259dmFyIHg9e2FkZEZsZXhUb1BhcmVudDohMCxhZGRPcmllbnRhdGlvbkJwczohMSxkaXNhYmxlRGVmYXVsdEJwczohMSxkaXNhYmxlVmVuZG9yUHJlZml4ZXM6ITEsc2VydmVyTG9hZGVkOiExLHVzZUNvbHVtbkJhc2lzWmVybzohMH0sQz1uZXcgaS5xKCJGbGV4IExheW91dCB0b2tlbiwgY29uZmlnIG9wdGlvbnMgZm9yIHRoZSBsaWJyYXJ5Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiB4fX0pLFM9bmV3IGkucSgiVG9rZW4gKEBhbmd1bGFyL2ZsZXgtbGF5b3V0KSBCcmVha3BvaW50cyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QoaS5ZKShmKSxlPU9iamVjdChpLlkpKEMpLG49W10uY29uY2F0LmFwcGx5KFtdLCh0fHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfSkpO3JldHVybiBmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgbixpPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7aVt0LmFsaWFzXT10fSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdC5hbGlhc10/YihpW3QuYWxpYXNdLHQpOmlbdC5hbGlhc109dH0pLChuPU9iamVjdC5rZXlzKGkpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaVt0XX0pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc3VmZml4fHwodC5zdWZmaXg9dC5hbGlhcy5yZXBsYWNlKF8sInwiKS5zcGxpdCgifCIpLm1hcCh3KS5qb2luKCIiKSx0Lm92ZXJsYXBwaW5nPSEhdC5vdmVybGFwcGluZyl9KSxufSgoZS5kaXNhYmxlRGVmYXVsdEJwcz9bXTpoKS5jb25jYXQoZS5hZGRPcmllbnRhdGlvbkJwcz9nOltdKSxuKX19KSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWdpc3RyeT10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIml0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzb3J0ZWRJdGVtcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQub3ZlcmxhcHBpbmd9KSxlPXRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hMCE9PXQub3ZlcmxhcHBpbmd9KTtyZXR1cm4gdC5jb25jYXQoZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZmluZEJ5QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWxpYXM9PXR9KXx8bnVsbH0sdC5wcm90b3R5cGUuZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVkaWFRdWVyeT09dH0pfHxudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm92ZXJsYXBwaW5ncyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIDE9PXQub3ZlcmxhcHBpbmd9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFsaWFzZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFsaWFzfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdWZmaXhlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VmZml4P3Quc3VmZml4OiIifSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuWSkoUykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09ZSYmKGU9ImFsbCIpLHZvaWQgMD09PW4mJihuPSIiKSx2b2lkIDA9PT1pJiYoaT0iIiksdGhpcy5tYXRjaGVzPXQsdGhpcy5tZWRpYVF1ZXJ5PWUsdGhpcy5tcUFsaWFzPW4sdGhpcy5zdWZmaXg9aX1yZXR1cm4gdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQodGhpcy5tYXRjaGVzLHRoaXMubWVkaWFRdWVyeSx0aGlzLm1xQWxpYXMsdGhpcy5zdWZmaXgpfSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl96b25lPXQsdGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuX2RvY3VtZW50PW4sdGhpcy5fcmVnaXN0cnk9bmV3IE1hcCx0aGlzLl9zb3VyY2U9bmV3IG8uYShuZXcgTyghMCkpLHRoaXMuX29ic2VydmFibGUkPXRoaXMuX3NvdXJjZS5hc09ic2VydmFibGUoKX1yZXR1cm4gdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVnaXN0cnkuZ2V0KHQpO3JldHVybiEhZSYmZS5tYXRjaGVzfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLnJlZ2lzdGVyUXVlcnkodCksdGhpcy5fb2JzZXJ2YWJsZSQucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbihlKXtyZXR1cm4hdHx8ZS5tZWRpYVF1ZXJ5PT09dH0pKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/W106InN0cmluZyI9PXR5cGVvZiB0P1t0XTooZT17fSx0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKGVbdF09ITApfSkpO3ZhciBlfSh0KTtuLmxlbmd0aD4wJiYodGhpcy5fcHJlcGFyZVF1ZXJ5Q1NTKG4sdGhpcy5fZG9jdW1lbnQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9yZWdpc3RyeS5nZXQodCksaT1mdW5jdGlvbihuKXtlLl96b25lLnJ1bihmdW5jdGlvbigpe3ZhciBpPW5ldyBPKG4ubWF0Y2hlcyx0KTtlLl9zb3VyY2UubmV4dChpKX0pfTtufHwoKG49ZS5fYnVpbGRNUUwodCkpLmFkZExpc3RlbmVyKGkpLGUuX3JlZ2lzdHJ5LnNldCh0LG4pKSxuLm1hdGNoZXMmJmkobil9KSl9LHQucHJvdG90eXBlLl9idWlsZE1RTD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIudCkodGhpcy5fcGxhdGZvcm1JZCkmJndpbmRvdy5tYXRjaE1lZGlhKCJhbGwiKS5hZGRMaXN0ZW5lcj93aW5kb3cubWF0Y2hNZWRpYSh0KTp7bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe319fSx0LnByb3RvdHlwZS5fcHJlcGFyZVF1ZXJ5Q1NTPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIVRbdF19KTtpZihuLmxlbmd0aD4wKXt2YXIgaT1uLmpvaW4oIiwgIik7dHJ5e3ZhciByPWUuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksci5zdHlsZVNoZWV0fHxyLmFwcGVuZENoaWxkKGUuY3JlYXRlVGV4dE5vZGUoIlxuLypcbiAgQGFuZ3VsYXIvZmxleC1sYXlvdXQgLSB3b3JrYXJvdW5kIGZvciBwb3NzaWJsZSBicm93c2VyIHF1aXJrIHdpdGggbWVkaWFRdWVyeSBsaXN0ZW5lcnNcbiAgc2VlIGh0dHA6Ly9iaXQubHkvMnNkNEhNUFxuKi9cbkBtZWRpYSAiK2krIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19XG4iKSksZS5oZWFkLmFwcGVuZENoaWxkKHIpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVFt0XT1yfSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKShpLnopLE9iamVjdChpLlkpKGkuQiksT2JqZWN0KGkuWSkoci5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFQ9e307ZnVuY3Rpb24gaih0LGUpe3JldHVybiBiKHQsZT97bXFBbGlhczplLmFsaWFzLHN1ZmZpeDplLnN1ZmZpeH06e30pfXZhciBBPWZ1bmN0aW9uKCl7fSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuYnJlYWtwb2ludHM9dCx0aGlzLm1lZGlhV2F0Y2hlcj1lLHRoaXMuZmlsdGVyT3ZlcmxhcHM9ITAsdGhpcy5fcmVnaXN0ZXJCcmVha1BvaW50cygpLHRoaXMub2JzZXJ2YWJsZSQ9dGhpcy5fYnVpbGRPYnNlcnZhYmxlKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RvTWVkaWFRdWVyeSh0KTtyZXR1cm4gdGhpcy5tZWRpYVdhdGNoZXIuaXNBY3RpdmUoZSl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMub2JzZXJ2YWJsZSQuc3Vic2NyaWJlKHQsZSxuKX0sdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JzZXJ2YWJsZSR9LHQucHJvdG90eXBlLl9yZWdpc3RlckJyZWFrUG9pbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5icmVha3BvaW50cy5zb3J0ZWRJdGVtcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWVkaWFRdWVyeX0pO3RoaXMubWVkaWFXYXRjaGVyLnJlZ2lzdGVyUXVlcnkodCl9LHQucHJvdG90eXBlLl9idWlsZE9ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcztyZXR1cm4gdGhpcy5tZWRpYVdhdGNoZXIub2JzZXJ2ZSgpLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10Lm1hdGNoZXN9KSxPYmplY3QoYS5hKShmdW5jdGlvbihuKXt2YXIgaT10LmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KG4ubWVkaWFRdWVyeSk7cmV0dXJuIWl8fCEoZS5maWx0ZXJPdmVybGFwcyYmaS5vdmVybGFwcGluZyl9KSxPYmplY3Qocy5hKShmdW5jdGlvbihlKXtyZXR1cm4gaihlLHQuX2ZpbmRCeVF1ZXJ5KGUubWVkaWFRdWVyeSkpfSkpfSx0LnByb3RvdHlwZS5fZmluZEJ5QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModCl9LHQucHJvdG90eXBlLl9maW5kQnlRdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5icmVha3BvaW50cy5maW5kQnlRdWVyeSh0KX0sdC5wcm90b3R5cGUuX3RvTWVkaWFRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kQnlBbGlhcyh0KXx8dGhpcy5fZmluZEJ5UXVlcnkodCk7cmV0dXJuIGU/ZS5tZWRpYVF1ZXJ5OnR9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKEUpLE9iamVjdChpLlkpKGspKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksUj1mdW5jdGlvbigpe30sTT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnN0eWxlc2hlZXQ9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMuc3R5bGVzaGVldC5nZXQodCk7aT9pLnNldChlLG4pOnRoaXMuc3R5bGVzaGVldC5zZXQodCxuZXcgTWFwKFtbZSxuXV0pKX0sdC5wcm90b3R5cGUuY2xlYXJTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlc2hlZXQuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0U3R5bGVGb3JFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5zdHlsZXNoZWV0LmdldCh0KSxpPSIiO2lmKG4pe3ZhciByPW4uZ2V0KGUpOyJudW1iZXIiIT10eXBlb2YgciYmInN0cmluZyIhPXR5cGVvZiByfHwoaT1yKyIiKX1yZXR1cm4gaX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFA9bmV3IGkucSgiRmxleExheW91dFNlcnZlckxvYWRlZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxEPVsicm93IiwiY29sdW1uIiwicm93LXJldmVyc2UiLCJjb2x1bW4tcmV2ZXJzZSJdLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9vcHRpb25zPXQsdGhpcy5fbWVkaWFNb25pdG9yPWUsdGhpcy5fb25NZWRpYUNoYW5nZXM9bix0aGlzLl9zdWJzY3JpYmVycz1bXSx0aGlzLl9yZWdpc3RyeU1hcD10aGlzLl9idWlsZFJlZ2lzdHJ5TWFwKCksdGhpcy5fc3Vic2NyaWJlcnM9dGhpcy5fY29uZmlndXJlQ2hhbmdlT2JzZXJ2ZXJzKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVnaXN0cnlGcm9tTGFyZ2VzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeU1hcC5zbGljZSgpLnJldmVyc2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm1lZGlhTW9uaXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZWRpYU1vbml0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRJbnB1dEtleSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmF0ZWRJbnB1dEtleXx8dGhpcy5fb3B0aW9ucy5iYXNlS2V5fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkSW5wdXQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmFjdGl2YXRlZElucHV0S2V5O3JldHVybiB0aGlzLmhhc0tleVZhbHVlKHQpP3RoaXMuX2xvb2t1cEtleVZhbHVlKHQpOnRoaXMuX29wdGlvbnMuZGVmYXVsdFZhbHVlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmhhc0tleVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLl9vcHRpb25zLmlucHV0S2V5c1t0XX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSksdGhpcy5fc3Vic2NyaWJlcnM9W119LHQucHJvdG90eXBlLl9jb25maWd1cmVDaGFuZ2VPYnNlcnZlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5TWFwLmZvckVhY2goZnVuY3Rpb24obil7dC5fa2V5SW5Vc2Uobi5rZXkpJiZlLnB1c2godC5tZWRpYU1vbml0b3Iub2JzZXJ2ZShuLmFsaWFzKS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKGUpe3JldHVybihlPWUuY2xvbmUoKSkucHJvcGVydHk9dC5fb3B0aW9ucy5iYXNlS2V5LGV9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuX29uTW9uaXRvckV2ZW50cyhlKX0pKX0pLGV9LHQucHJvdG90eXBlLl9idWlsZFJlZ2lzdHJ5TWFwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5tZWRpYU1vbml0b3IuYnJlYWtwb2ludHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBiKHt9LGUse2Jhc2VLZXk6dC5fb3B0aW9ucy5iYXNlS2V5LGtleTp0Ll9vcHRpb25zLmJhc2VLZXkrZS5zdWZmaXh9KX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5fa2V5SW5Vc2UoZS5rZXkpfSl9LHQucHJvdG90eXBlLl9vbk1vbml0b3JFdmVudHM9ZnVuY3Rpb24odCl7dC5wcm9wZXJ0eT09dGhpcy5fb3B0aW9ucy5iYXNlS2V5JiYodC52YWx1ZT10aGlzLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZSh0KSx0aGlzLl9vbk1lZGlhQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9rZXlJblVzZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbG9va3VwS2V5VmFsdWUodCl9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9vcHRpb25zLmJhc2VLZXkrdC5zdWZmaXgsbj10aGlzLl9hY3RpdmF0ZWRJbnB1dEtleTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkSW5wdXRLZXk9dGhpcy5fdmFsaWRhdGVJbnB1dEtleShuPXQubWF0Y2hlcz9lOm49PWU/IiI6biksdGhpcy5hY3RpdmF0ZWRJbnB1dH0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQpe3JldHVybiFlLl9rZXlJblVzZSh0KX07cmV0dXJuIG4odCkmJnRoaXMubWVkaWFNb25pdG9yLmFjdGl2ZU92ZXJsYXBzLnNvbWUoZnVuY3Rpb24oaSl7dmFyIHI9ZS5fb3B0aW9ucy5iYXNlS2V5K2kuc3VmZml4O3JldHVybiFuKHIpJiYodD1yLCEwKX0pLHR9LHQucHJvdG90eXBlLl9sb29rdXBLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5pbnB1dEtleXNbdF19LHR9KCksRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX21lZGlhTW9uaXRvcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9zdHlsZXI9bix0aGlzLl9pbnB1dE1hcD17fSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNNZWRpYVF1ZXJ5TGlzdGVuZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21xQWN0aXZhdGlvbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbj90aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQ6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsbj0iYmFzZUtleSI7dGhpcy5fbXFBY3RpdmF0aW9uJiYoZT10aGlzLl9pbnB1dE1hcFtuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dEtleV0sdGhpcy5faW5wdXRNYXBbbl09dCk7dmFyIHIsbz1uZXcgaS5KKGUsdCwhMSk7dGhpcy5uZ09uQ2hhbmdlcygoKHI9e30pW25dPW8scikpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5hdGl2ZUVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9xdWVyeUlucHV0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnB1dE1hcFt0XX0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9kaXNwbGF5PXRoaXMuX2dldERpc3BsYXlTdHlsZSgpLHRoaXMuX2hhc0luaXRpYWxpemVkPSEwfSx0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIkJhc2VEaXJlY3RpdmU6Om5nT25DaGFuZ2VzIHNob3VsZCBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzOiAiK3QpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX21xQWN0aXZhdGlvbiYmdGhpcy5fbXFBY3RpdmF0aW9uLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5fbWVkaWFNb25pdG9yfSx0LnByb3RvdHlwZS5fZ2V0RGVmYXVsdFZhbD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3F1ZXJ5SW5wdXQodCk7cmV0dXJuIHZvaWQgMCE9PW4mJm51bGwhPT1uJiYiIiE9PW4/bjplfSx0LnByb3RvdHlwZS5fZ2V0RGlzcGxheVN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5sb29rdXBTdHlsZSh0LCJkaXNwbGF5Iil9LHQucHJvdG90eXBlLl9nZXRBdHRyaWJ1dGVWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5sb29rdXBBdHRyaWJ1dGVWYWx1ZShlLHQpfSx0LnByb3RvdHlwZS5fZ2V0RmxleEZsb3dEaXJlY3Rpb249ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIG4saT0icm93IjtpZih0JiYoaT0obj10aGlzLl9zdHlsZXIuZ2V0Rmxvd0RpcmVjdGlvbih0KSlbMF0sIW5bMV0mJmUpKXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZSxuLGk9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dD90LnRvTG93ZXJDYXNlKCk6IiIpLnNwbGl0KCIgIiksbj1lWzBdLGk9ZVsxXSxyPWVbMl07cmV0dXJuIEQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PW59KXx8KG49RFswXSksImlubGluZSI9PT1pJiYoaT0iaW5saW5lIiE9PXI/cjoiIixyPSJpbmxpbmUiKSxbbixmdW5jdGlvbih0KXtpZih0KXN3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2UicmV2ZXJzZSI6Y2FzZSJ3cmFwLXJldmVyc2UiOmNhc2UicmV2ZXJzZS13cmFwIjp0PSJ3cmFwLXJldmVyc2UiO2JyZWFrO2Nhc2Uibm8iOmNhc2Uibm9uZSI6Y2FzZSJub3dyYXAiOnQ9Im5vd3JhcCI7YnJlYWs7ZGVmYXVsdDp0PSJ3cmFwIn1yZXR1cm4gdH0oaSksISFyXX0odCk7cmV0dXJuIG49aVsyXSx2b2lkIDA9PT0oZT1pWzFdKSYmKGU9bnVsbCksdm9pZCAwPT09biYmKG49ITEpLHtkaXNwbGF5Om4/ImlubGluZS1mbGV4IjoiZmxleCIsImJveC1zaXppbmciOiJib3JkZXItYm94IiwiZmxleC1kaXJlY3Rpb24iOmlbMF0sImZsZXgtd3JhcCI6ZXx8bnVsbH19KGkpO3RoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50cyhyLFt0XSl9cmV0dXJuIGkudHJpbSgpfHwicm93In0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnQobix0LGUpfSx0LnByb3RvdHlwZS5fYXBwbHlTdHlsZVRvRWxlbWVudHM9ZnVuY3Rpb24odCxlKXt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHModCxlKX0sdC5wcm90b3R5cGUuX2NhY2hlSW5wdXQ9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpZm9yKHZhciBuIGluIGUpdGhpcy5faW5wdXRNYXBbbl09ZVtuXTtlbHNlIHQmJih0aGlzLl9pbnB1dE1hcFt0XT1lKX0sdC5wcm90b3R5cGUuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fbXFBY3RpdmF0aW9uKXt2YXIgaT1uZXcgZnVuY3Rpb24odCxlLG4pe3RoaXMuYmFzZUtleT10LHRoaXMuZGVmYXVsdFZhbHVlPWUsdGhpcy5pbnB1dEtleXM9bn0odCxlLHRoaXMuX2lucHV0TWFwKTt0aGlzLl9tcUFjdGl2YXRpb249bmV3IE4oaSx0aGlzLl9tZWRpYU1vbml0b3IsZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9KX1yZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9ufSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuTm9kZXMiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLGU9W10sbj10Lmxlbmd0aDtuLS07KWVbbl09dFtuXTtyZXR1cm4gZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5oYXNSZXNwb25zaXZlQVBJPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9pbnB1dE1hcCkubGVuZ3RoLSh0aGlzLl9pbnB1dE1hcFt0XT8xOjApPjB9LHQucHJvdG90eXBlLmhhc0tleVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb24uaGFzS2V5VmFsdWUodCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzSW5pdGlhbGl6ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzSW5pdGlhbGl6ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxMPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsbixpLHIpfHx0aGlzO3JldHVybiBvLl9iYXNlS2V5PWUsby5fbWVkaWFNb25pdG9yPW4sby5fZWxlbWVudFJlZj1pLG8uX3N0eWxlcj1yLG99cmV0dXJuIE9iamVjdCh1LmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhY3RpdmVLZXkiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tcUFjdGl2YXRpb24sZT10P3QuYWN0aXZhdGVkSW5wdXRLZXk6dGhpcy5fYmFzZUtleTtyZXR1cm4iY2xhc3MiPT09ZT8ia2xhenoiOmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnB1dE1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm1xQWN0aXZhdGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQST1mdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5oYXNSZXNwb25zaXZlQVBJLmNhbGwodGhpcyx0aGlzLl9iYXNlS2V5KX0sZS5wcm90b3R5cGUucXVlcnlJbnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gdD90aGlzLl9xdWVyeUlucHV0KHQpOnZvaWQgMH0sZS5wcm90b3R5cGUuY2FjaGVJbnB1dD1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09biYmKG49ITEpLG4pdGhpcy5fY2FjaGVJbnB1dFJhdyh0LGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl0aGlzLl9jYWNoZUlucHV0QXJyYXkodCxlKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl0aGlzLl9jYWNoZUlucHV0T2JqZWN0KHQsZSk7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNsYXNzIHZhbHVlICciK3QrIicgcHJvdmlkZWQuIERpZCB5b3Ugd2FudCB0byBjYWNoZSB0aGUgcmF3IHZhbHVlPyIpO3RoaXMuX2NhY2hlSW5wdXRTdHJpbmcodCxlKX19LGUucHJvdG90eXBlLmxpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXModCxlLG4pfSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dFJhdz1mdW5jdGlvbih0LGUpe3QmJih0aGlzLl9pbnB1dE1hcFt0XT1lKX0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRBcnJheT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9pbnB1dE1hcFt0XT1lP2Uuam9pbigiICIpOiIifSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dE9iamVjdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PSIiKTt2YXIgbj1bXTtpZihlKWZvcih2YXIgaSBpbiBlKWVbaV0mJm4ucHVzaChpKTt0aGlzLl9pbnB1dE1hcFt0XT1uLmpvaW4oIiAiKX0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRTdHJpbmc9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIiksdGhpcy5faW5wdXRNYXBbdF09ZX0sZX0oRiksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9icmVha3BvaW50cz10LHRoaXMuX21hdGNoTWVkaWE9ZSx0aGlzLl9yZWdpc3RlckJyZWFrcG9pbnRzKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYnJlYWtwb2ludHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMuaXRlbXMuc2xpY2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZU92ZXJsYXBzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMub3ZlcmxhcHBpbmdzLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21hdGNoTWVkaWEuaXNBY3RpdmUoZS5tZWRpYVF1ZXJ5KX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPW51bGw7dGhpcy5icmVha3BvaW50cy5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihuKXsiIiE9PW4uYWxpYXMmJiFlJiZ0Ll9tYXRjaE1lZGlhLmlzQWN0aXZlKG4ubWVkaWFRdWVyeSkmJihlPW4pfSk7dmFyIG49dGhpcy5icmVha3BvaW50c1swXTtyZXR1cm4gZXx8KHRoaXMuX21hdGNoTWVkaWEuaXNBY3RpdmUobi5tZWRpYVF1ZXJ5KT9uOm51bGwpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHQpfHx0aGlzLl9icmVha3BvaW50cy5maW5kQnlRdWVyeSh0KTtyZXR1cm4gdGhpcy5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShlP2UubWVkaWFRdWVyeTp0KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9icmVha3BvaW50cy5maW5kQnlBbGlhcyh0fHwiIil8fHRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHR8fCIiKTtyZXR1cm4gdGhpcy5fbWF0Y2hNZWRpYS5vYnNlcnZlKGU/ZS5tZWRpYVF1ZXJ5OnQpLnBpcGUoT2JqZWN0KHMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGoodCxlKX0pLE9iamVjdChhLmEpKGZ1bmN0aW9uKHQpe3JldHVybiFlfHwiIiE9PXQubXFBbGlhc30pKX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyQnJlYWtwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9icmVha3BvaW50cy5zb3J0ZWRJdGVtcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWVkaWFRdWVyeX0pO3RoaXMuX21hdGNoTWVkaWEucmVnaXN0ZXJRdWVyeSh0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuWSkoRSksT2JqZWN0KGkuWSkoaykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB6KHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbj10W2VdfHwiIjtzd2l0Y2goZSl7Y2FzZSJkaXNwbGF5Ijp0LmRpc3BsYXk9ImZsZXgiPT09bj9bIi13ZWJraXQtZmxleCIsImZsZXgiXToiaW5saW5lLWZsZXgiPT09bj9bIi13ZWJraXQtaW5saW5lLWZsZXgiLCJpbmxpbmUtZmxleCJdOm47YnJlYWs7Y2FzZSJhbGlnbi1pdGVtcyI6Y2FzZSJhbGlnbi1zZWxmIjpjYXNlImFsaWduLWNvbnRlbnQiOmNhc2UiZmxleCI6Y2FzZSJmbGV4LWJhc2lzIjpjYXNlImZsZXgtZmxvdyI6Y2FzZSJmbGV4LWdyb3ciOmNhc2UiZmxleC1zaHJpbmsiOmNhc2UiZmxleC13cmFwIjpjYXNlImp1c3RpZnktY29udGVudCI6dFsiLXdlYmtpdC0iK2VdPW47YnJlYWs7Y2FzZSJmbGV4LWRpcmVjdGlvbiI6dFsiLXdlYmtpdC1mbGV4LWRpcmVjdGlvbiJdPW49bnx8InJvdyIsdFsiZmxleC1kaXJlY3Rpb24iXT1uO2JyZWFrO2Nhc2Uib3JkZXIiOnQub3JkZXI9dFsiLXdlYmtpdC0iK2VdPWlzTmFOKG4pPyIwIjpufX1yZXR1cm4gdH12YXIgQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5fc2VydmVyU3R5bGVzaGVldD10LHRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD1lLHRoaXMuX3BsYXRmb3JtSWQ9bix0aGlzLmxheW91dENvbmZpZz1pfXJldHVybiB0LnByb3RvdHlwZS5hcHBseVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT17fTsic3RyaW5nIj09dHlwZW9mIGUmJihpW2VdPW4sZT1pKSxpPXRoaXMubGF5b3V0Q29uZmlnLmRpc2FibGVWZW5kb3JQcmVmaXhlcz9lOnooZSksdGhpcy5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQoaSx0KX0sdC5wcm90b3R5cGUuYXBwbHlTdHlsZVRvRWxlbWVudHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgaT10aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXM/dDp6KHQpO2UuZm9yRWFjaChmdW5jdGlvbih0KXtuLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChpLHQpfSl9LHQucHJvdG90eXBlLmdldEZsb3dEaXJlY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb29rdXBTdHlsZSh0LCJmbGV4LWRpcmVjdGlvbiIpO2U9PT1VJiYoZT0iIik7dmFyIG49dGhpcy5sb29rdXBJbmxpbmVTdHlsZSh0LCJmbGV4LWRpcmVjdGlvbiIpfHxPYmplY3Qoci51KSh0aGlzLl9wbGF0Zm9ybUlkKSYmdGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkP2U6IiI7cmV0dXJuW2V8fCJyb3ciLG5dfSx0LnByb3RvdHlwZS5sb29rdXBBdHRyaWJ1dGVWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEF0dHJpYnV0ZShlKXx8IiJ9LHQucHJvdG90eXBlLmxvb2t1cElubGluZVN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdChyLnQpKHRoaXMuX3BsYXRmb3JtSWQpP3Quc3R5bGVbZV06dGhpcy5fZ2V0U2VydmVyU3R5bGUodCxlKX0sdC5wcm90b3R5cGUubG9va3VwU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgaT0iIjtyZXR1cm4gdCYmKChpPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCxlKSl8fChPYmplY3Qoci50KSh0aGlzLl9wbGF0Zm9ybUlkKT9ufHwoaT1nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpOnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZCYmKGk9dGhpcy5fc2VydmVyU3R5bGVzaGVldC5nZXRTdHlsZUZvckVsZW1lbnQodCxlKSkpKSxpP2kudHJpbSgpOlV9LHQucHJvdG90eXBlLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7T2JqZWN0LmtleXModCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIG89QXJyYXkuaXNBcnJheSh0W2ldKT90W2ldOlt0W2ldXTtvLnNvcnQoKTtmb3IodmFyIGE9MCxzPW87YTxzLmxlbmd0aDthKyspe3ZhciB1PXNbYV07T2JqZWN0KHIudCkobi5fcGxhdGZvcm1JZCl8fCFuLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ/T2JqZWN0KHIudCkobi5fcGxhdGZvcm1JZCk/ZS5zdHlsZS5zZXRQcm9wZXJ0eShpLHUpOm4uX3NldFNlcnZlclN0eWxlKGUsaSx1KTpuLl9zZXJ2ZXJTdHlsZXNoZWV0LmFkZFN0eWxlVG9FbGVtZW50KGUsaSx1KX19KX0sdC5wcm90b3R5cGUuX3NldFNlcnZlclN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtlPWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBpPXRoaXMuX3JlYWRTdHlsZUF0dHJpYnV0ZSh0KTtpW2VdPW58fCIiLHRoaXMuX3dyaXRlU3R5bGVBdHRyaWJ1dGUodCxpKX0sdC5wcm90b3R5cGUuX2dldFNlcnZlclN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlYWRTdHlsZUF0dHJpYnV0ZSh0KVtlXXx8IiJ9LHQucHJvdG90eXBlLl9yZWFkU3R5bGVBdHRyaWJ1dGU9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj10LmdldEF0dHJpYnV0ZSgic3R5bGUiKTtpZihuKWZvcih2YXIgaT1uLnNwbGl0KC87Ky9nKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0udHJpbSgpO2lmKG8ubGVuZ3RoPjApe3ZhciBhPW8uaW5kZXhPZigiOiIpO2lmKC0xPT09YSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgQ1NTIHN0eWxlOiAiK28pO2Vbby5zdWJzdHIoMCxhKS50cmltKCldPW8uc3Vic3RyKGErMSkudHJpbSgpfX1yZXR1cm4gZX0sdC5wcm90b3R5cGUuX3dyaXRlU3R5bGVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt2YXIgbj0iIjtmb3IodmFyIGkgaW4gZSllW2ldJiYobis9aSsiOiIrZVtpXSsiOyIpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsbil9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKE0sOCksT2JqZWN0KGkuWSkoUCw4KSxPYmplY3QoaS5ZKShpLkIpLE9iamVjdChpLlkpKEMpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksVT0iYmxvY2siO2Z1bmN0aW9uIEgodCxlLG4pe3ZvaWQgMD09PWUmJihlPSIxIiksdm9pZCAwPT09biYmKG49IjEiKTt2YXIgaT1bZSxuLHRdLHI9dC5pbmRleE9mKCJjYWxjIik7aWYocj4wKWlbMl09cSh0LnN1YnN0cmluZyhyKS50cmltKCkpLDI9PShvPXQuc3Vic3RyKDAscikudHJpbSgpLnNwbGl0KCIgIikpLmxlbmd0aCYmKGlbMF09b1swXSxpWzFdPW9bMV0pO2Vsc2UgaWYoMD09cilpWzJdPXEodC50cmltKCkpO2Vsc2V7dmFyIG87aT0zPT09KG89dC5zcGxpdCgiICIpKS5sZW5ndGg/bzpbZSxuLHRdfXJldHVybiBpfWZ1bmN0aW9uIHEodCl7cmV0dXJuIHQucmVwbGFjZSgvW1xzXS9nLCIiKS5yZXBsYWNlKC9bXC9cKlwrXC1dL2csIiAkJiAiKX19LCJQVC9YIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgaT1uKCJDY25HIikscj1uKCJaWUNpIiksbz1mdW5jdGlvbigpe30sYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmdlbmVyYXRlSWQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9IiIsZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLG49MDtuPDIwO24rKyl0Kz1lLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUuYWRkUmFuZG9tSWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7dC5pZD1lLmdlbmVyYXRlSWQoKSx2b2lkIDAhPT10Lml0ZW1zJiZlLmFkZFJhbmRvbUlkKHQuaXRlbXMpfSl9LHQucHJvdG90eXBlLnJlY3Vyc2l2ZUNoZWNrSWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0LmlkPT09ZXx8KHZvaWQgMCE9PXQuaXRlbXM/dC5pdGVtcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJlY3Vyc2l2ZUNoZWNrSWQodCxlKX0pOnZvaWQgMCl9LHQucHJvdG90eXBlLnJlY3Vyc2l2ZUNoZWNrTGluaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2Zvcih2YXIgciBpbiBpKWkuaGFzT3duUHJvcGVydHkocikmJihpLmxpbms9PT1lP3RoaXMuZm91bmRMaW5rT2JqZWN0PWk6dm9pZCAwIT09aS5pdGVtcyYmdGhpcy5yZWN1cnNpdmVDaGVja0xpbmsoaS5pdGVtcyxlKSl9fSx0LnByb3RvdHlwZS5nZXRNYXRjaGVkT2JqZWN0QnlVcmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWN1cnNpdmVDaGVja0xpbmsodCxlKSx0aGlzLmZvdW5kTGlua09iamVjdH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHM9e1BBRERJTkdfQVRfU1RBUlQ6ITAsREVGQVVMVF9DTEFTU19OQU1FOiJhbW1sLWNvbnRhaW5lciIsREVGQVVMVF9MSVNUX0NMQVNTX05BTUU6ImFtbWwtaXRlbSIsU0VMRUNURURfTElTVF9DTEFTU19OQU1FOiJzZWxlY3RlZC1hbW1sLWl0ZW0iLERFRkFVTFRfU0VMRUNURURfRk9OVF9DT0xPUjoiIzE5NzZkMiIsREVGQVVMVF9MSVNUX0JBQ0tHUk9VTkRfQ09MT1I6IiNmZmYiLERFRkFVTFRfTElTVF9GT05UX0NPTE9SOiJyZ2JhKDAsMCwwLC44NykiLEVSUk9SX01FU1NBR0U6IkludmFsaWQgZGF0YSBmb3IgbWF0ZXJpYWwgTXVsdGlsZXZlbCBMaXN0IENvbXBvbmVudCJ9LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5yb3V0ZXI9dCx0aGlzLm11bHRpbGV2ZWxNZW51U2VydmljZT1lLHRoaXMuY29uZmlndXJhdGlvbj1udWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW5ldyBpLm4sdGhpcy5ub2RlQ29uZmlnPXtwYWRkaW5nQXRTdGFydDohMCxsaXN0QmFja2dyb3VuZENvbG9yOm51bGwsZm9udENvbG9yOm51bGwsc2VsZWN0ZWRMaXN0Rm9udENvbG9yOm51bGwsaW50ZXJmYWNlV2l0aFJvdXRlOm51bGx9LHRoaXMuaXNJbnZhbGlkQ29uZmlnPSEwfXJldHVybiB0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuY2hlY2tWYWxpZGRhdGEoKSx0aGlzLmRldGVjdEludmFsaWRDb25maWcoKX0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO251bGwhPT10aGlzLmNvbmZpZ3VyYXRpb24mJnZvaWQgMCE9PXRoaXMuY29uZmlndXJhdGlvbiYmIiIhPT10aGlzLmNvbmZpZ3VyYXRpb24mJm51bGwhPT10aGlzLmNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlV2l0aFJvdXRlJiZ0aGlzLmNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlV2l0aFJvdXRlJiZ0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiByLmQpe3ZhciBuPXQubXVsdGlsZXZlbE1lbnVTZXJ2aWNlLmdldE1hdGNoZWRPYmplY3RCeVVybCh0Lml0ZW1zLGUudXJsKTt2b2lkIDAhPT1uJiZ2b2lkIDAhPT1uLmxpbmsmJm51bGwhPT1uLmxpbmsmJiIiIT09bi5saW5rJiYodC5jdXJyZW50Tm9kZT1uLHQuc2VsZWN0ZWRMaXN0SXRlbShuKSl9fSl9LHQucHJvdG90eXBlLmNoZWNrVmFsaWRkYXRhPWZ1bmN0aW9uKCl7MD09PXRoaXMuaXRlbXMubGVuZ3RoP2NvbnNvbGUud2FybihzLkVSUk9SX01FU1NBR0UpOih0aGlzLml0ZW1zPXRoaXMuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmhpZGRlbn0pLHRoaXMubXVsdGlsZXZlbE1lbnVTZXJ2aWNlLmFkZFJhbmRvbUlkKHRoaXMuaXRlbXMpKX0sdC5wcm90b3R5cGUuZGV0ZWN0SW52YWxpZENvbmZpZz1mdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLmNvbmZpZ3VyYXRpb258fHZvaWQgMD09PXRoaXMuY29uZmlndXJhdGlvbnx8IiI9PT10aGlzLmNvbmZpZ3VyYXRpb24pdGhpcy5pc0ludmFsaWRDb25maWc9ITA7ZWxzZXt0aGlzLmlzSW52YWxpZENvbmZpZz0hMTt2YXIgdD10aGlzLmNvbmZpZ3VyYXRpb247dm9pZCAwIT09dC5wYWRkaW5nQXRTdGFydCYmbnVsbCE9PXQucGFkZGluZ0F0U3RhcnQmJiJib29sZWFuIj09dHlwZW9mIHQucGFkZGluZ0F0U3RhcnQmJih0aGlzLm5vZGVDb25maWcucGFkZGluZ0F0U3RhcnQ9dC5wYWRkaW5nQXRTdGFydCksIiIhPT10Lmxpc3RCYWNrZ3JvdW5kQ29sb3ImJm51bGwhPT10Lmxpc3RCYWNrZ3JvdW5kQ29sb3ImJnZvaWQgMCE9PXQubGlzdEJhY2tncm91bmRDb2xvciYmKHRoaXMubm9kZUNvbmZpZy5saXN0QmFja2dyb3VuZENvbG9yPXQubGlzdEJhY2tncm91bmRDb2xvciksIiIhPT10LmZvbnRDb2xvciYmbnVsbCE9PXQuZm9udENvbG9yJiZ2b2lkIDAhPT10LmZvbnRDb2xvciYmKHRoaXMubm9kZUNvbmZpZy5mb250Q29sb3I9dC5mb250Q29sb3IpLCIiIT09dC5zZWxlY3RlZExpc3RGb250Q29sb3ImJm51bGwhPT10LnNlbGVjdGVkTGlzdEZvbnRDb2xvciYmdm9pZCAwIT09dC5zZWxlY3RlZExpc3RGb250Q29sb3ImJih0aGlzLm5vZGVDb25maWcuc2VsZWN0ZWRMaXN0Rm9udENvbG9yPXQuc2VsZWN0ZWRMaXN0Rm9udENvbG9yKSxudWxsIT09dC5pbnRlcmZhY2VXaXRoUm91dGUmJnZvaWQgMCE9PXQuaW50ZXJmYWNlV2l0aFJvdXRlJiYiYm9vbGVhbiI9PXR5cGVvZiB0LmludGVyZmFjZVdpdGhSb3V0ZSYmKHRoaXMubm9kZUNvbmZpZy5pbnRlcmZhY2VXaXRoUm91dGU9dC5pbnRlcmZhY2VXaXRoUm91dGUpfX0sdC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnZhbGlkQ29uZmlnP3MuREVGQVVMVF9DTEFTU19OQU1FOiIiIT09dGhpcy5jb25maWd1cmF0aW9uLmNsYXNzbmFtZSYmbnVsbCE9PXRoaXMuY29uZmlndXJhdGlvbi5jbGFzc25hbWUmJnZvaWQgMCE9PXRoaXMuY29uZmlndXJhdGlvbi5jbGFzc25hbWU/cy5ERUZBVUxUX0NMQVNTX05BTUUrIiAiK3RoaXMuY29uZmlndXJhdGlvbi5jbGFzc25hbWU6cy5ERUZBVUxUX0NMQVNTX05BTUV9LHQucHJvdG90eXBlLmdldEdsb2JhbFN0eWxlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNJbnZhbGlkQ29uZmlnKXt2YXIgdD17YmFja2dyb3VuZDpudWxsfTtyZXR1cm4iIiE9PXRoaXMuY29uZmlndXJhdGlvbi5iYWNrZ3JvdW5kQ29sb3ImJm51bGwhPT10aGlzLmNvbmZpZ3VyYXRpb24uYmFja2dyb3VuZENvbG9yJiZ2b2lkIDAhPT10aGlzLmNvbmZpZ3VyYXRpb24uYmFja2dyb3VuZENvbG9yJiYodC5iYWNrZ3JvdW5kPXRoaXMuY29uZmlndXJhdGlvbi5iYWNrZ3JvdW5kQ29sb3IpLHR9fSx0LnByb3RvdHlwZS5zZWxlY3RlZExpc3RJdGVtPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudE5vZGU9dCx0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHQpfSx0fSgpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG47dGhpcy5yb3V0ZXI9dCx0aGlzLm11bHRpbGV2ZWxNZW51U2VydmljZT1lLHRoaXMubGV2ZWw9MSx0aGlzLm5vZGVDb25maWd1cmF0aW9uPW51bGwsdGhpcy5zZWxlY3RlZEl0ZW09bmV3IGkubix0aGlzLmlzU2VsZWN0ZWQ9ITEsdGhpcy5leHBhbmRlZD0hMSx0aGlzLnNlbGVjdGVkTGlzdENsYXNzZXM9KChuPXt9KVtzLkRFRkFVTFRfTElTVF9DTEFTU19OQU1FXT0hMCxuW3MuU0VMRUNURURfTElTVF9DTEFTU19OQU1FXT0hMSxuKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLm5vZGVDaGlsZHJlbj10aGlzLm5vZGUmJnRoaXMubm9kZS5pdGVtcz90aGlzLm5vZGUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmhpZGRlbn0pOltdLHZvaWQgMCE9PXRoaXMuc2VsZWN0ZWROb2RlJiZudWxsIT09dGhpcy5zZWxlY3RlZE5vZGUmJnRoaXMuc2V0U2VsZWN0ZWRDbGFzcyh0aGlzLm11bHRpbGV2ZWxNZW51U2VydmljZS5yZWN1cnNpdmVDaGVja0lkKHRoaXMubm9kZSx0aGlzLnNlbGVjdGVkTm9kZS5pZCkpfSx0LnByb3RvdHlwZS5zZXRTZWxlY3RlZENsYXNzPWZ1bmN0aW9uKHQpe3ZhciBlO3Q/KHRoaXMuaXNTZWxlY3RlZD0hMCx0aGlzLmV4cGFuZGVkPSEwKTp0aGlzLmlzU2VsZWN0ZWQ9ITEsdGhpcy5zZWxlY3RlZExpc3RDbGFzc2VzPSgoZT17fSlbcy5ERUZBVUxUX0xJU1RfQ0xBU1NfTkFNRV09ITAsZVtzLlNFTEVDVEVEX0xJU1RfQ0xBU1NfTkFNRV09dGhpcy5pc1NlbGVjdGVkLGUpLHRoaXMuc2V0Q2xhc3NlcygpfSx0LnByb3RvdHlwZS5nZXRQYWRkaW5nQXRTdGFydD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmxvZyh0aGlzLm5vZGVDb25maWd1cmF0aW9uKSwhIXRoaXMubm9kZUNvbmZpZ3VyYXRpb24ucGFkZGluZ0F0U3RhcnR9LHQucHJvdG90eXBlLmdldExpc3RTdHlsZT1mdW5jdGlvbigpe3ZhciB0PXtiYWNrZ3JvdW5kOnMuREVGQVVMVF9MSVNUX0JBQ0tHUk9VTkRfQ09MT1IsY29sb3I6cy5ERUZBVUxUX0xJU1RfRk9OVF9DT0xPUn07cmV0dXJuIG51bGwhPT10aGlzLm5vZGVDb25maWd1cmF0aW9uLmxpc3RCYWNrZ3JvdW5kQ29sb3ImJih0LmJhY2tncm91bmQ9dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5saXN0QmFja2dyb3VuZENvbG9yKSx0aGlzLmlzU2VsZWN0ZWQ/dC5jb2xvcj1udWxsIT09dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5zZWxlY3RlZExpc3RGb250Q29sb3I/dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5zZWxlY3RlZExpc3RGb250Q29sb3I6cy5ERUZBVUxUX1NFTEVDVEVEX0ZPTlRfQ09MT1I6bnVsbCE9PXRoaXMubm9kZUNvbmZpZ3VyYXRpb24uZm9udENvbG9yJiYodC5jb2xvcj10aGlzLm5vZGVDb25maWd1cmF0aW9uLmZvbnRDb2xvciksdH0sdC5wcm90b3R5cGUuaGFzSXRlbXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlQ2hpbGRyZW4ubGVuZ3RoPjB9LHQucHJvdG90eXBlLnNldENsYXNzZXM9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLmNsYXNzZXM9KCh0PXt9KVsibGV2ZWwtIit0aGlzLmxldmVsXT0hMCx0WyJhbW1sLXN1Ym1lbnUiXT10aGlzLmhhc0l0ZW1zKCkmJnRoaXMuZXhwYW5kZWQmJnRoaXMuZ2V0UGFkZGluZ0F0U3RhcnQoKSx0KX0sdC5wcm90b3R5cGUuZXhwYW5kPWZ1bmN0aW9uKHQpe3RoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQsdGhpcy5zZXRDbGFzc2VzKCksbnVsbCE9PXRoaXMubm9kZUNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlV2l0aFJvdXRlJiZ0aGlzLm5vZGVDb25maWd1cmF0aW9uLmludGVyZmFjZVdpdGhSb3V0ZSYmdm9pZCAwIT09dC5saW5rP3ZvaWQgMCE9PXQuZXh0ZXJuYWxSZWRpcmVjdCYmdC5leHRlcm5hbFJlZGlyZWN0P3dpbmRvdy5sb2NhdGlvbi5ocmVmPXQubGluazp0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdC5saW5rXSk6dm9pZCAwPT09dC5pdGVtcyYmdGhpcy5zZWxlY3RlZExpc3RJdGVtKHQpfSx0LnByb3RvdHlwZS5zZWxlY3RlZExpc3RJdGVtPWZ1bmN0aW9uKHQpe3RoaXMuc2VsZWN0ZWRJdGVtLmVtaXQodCl9LHR9KCksYz1mdW5jdGlvbigpe319LFBVOEw6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIjZibEYiKTtmdW5jdGlvbiByKHQpe3ZhciBlPW5ldyBpLmEoZnVuY3Rpb24oZSl7ZS5uZXh0KHQpLGUuY29tcGxldGUoKX0pO3JldHVybiBlLl9pc1NjYWxhcj0hMCxlLnZhbHVlPXQsZX19LFBoam46ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oInBzVzAiKTtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIE9iamVjdChpLmEpKHQsZSwxKX19LFJuZXk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJUMURNIikscj1uKCJtclNHIiksbz1uKCJFaG1rIiksYT1uKCJlaWhzIikscz1uKCJNR0JTIiksdT1uKCJ6b3RtIiksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kdXJhdGlvblNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGModCx0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5kdXJhdGlvblNlbGVjdG9yPW4saS5oYXNWYWx1ZT0hMSxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLnZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCwhdGhpcy50aHJvdHRsZWQpe3ZhciBlPU9iamVjdChvLmEpKHRoaXMuZHVyYXRpb25TZWxlY3RvcikodCk7aWYoZT09PWEuYSl0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGEuYS5lKTtlbHNle3ZhciBuPU9iamVjdCh1LmEpKHRoaXMsZSk7IW58fG4uY2xvc2VkP3RoaXMuY2xlYXJUaHJvdHRsZSgpOnRoaXMuYWRkKHRoaXMudGhyb3R0bGVkPW4pfX19LGUucHJvdG90eXBlLmNsZWFyVGhyb3R0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZhbHVlLGU9dGhpcy5oYXNWYWx1ZSxuPXRoaXMudGhyb3R0bGVkO24mJih0aGlzLnJlbW92ZShuKSx0aGlzLnRocm90dGxlZD1udWxsLG4udW5zdWJzY3JpYmUoKSksZSYmKHRoaXMudmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSl9LGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5jbGVhclRocm90dGxlKCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5jbGVhclRocm90dGxlKCl9LGV9KHMuYSksZj1uKCJnSTNCIik7ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1pLmEpLG49ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGYuYSkodCxlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgbChuKSl9O3ZhciBufW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBofSl9LFMxblg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJtclNHIikscj1uKCJLOUlhIiksbz1uKCI2YmxGIiksYT1uKCJGRk9vIikscz1uKCJwdWdUIik7ZnVuY3Rpb24gdSgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5saWZ0KG5ldyBsKHQpKX19dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY29ubmVjdGFibGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29ubmVjdGFibGU7bi5fcmVmQ291bnQrKzt2YXIgaT1uZXcgYyh0LG4pLHI9ZS5zdWJzY3JpYmUoaSk7cmV0dXJuIGkuY2xvc2VkfHwoaS5jb25uZWN0aW9uPW4uY29ubmVjdCgpKSxyfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmNvbm5lY3RhYmxlPW4saX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7dmFyIGU9dC5fcmVmQ291bnQ7aWYoZTw9MCl0aGlzLmNvbm5lY3Rpb249bnVsbDtlbHNlIGlmKHQuX3JlZkNvdW50PWUtMSxlPjEpdGhpcy5jb25uZWN0aW9uPW51bGw7ZWxzZXt2YXIgbj10aGlzLmNvbm5lY3Rpb24saT10Ll9jb25uZWN0aW9uO3RoaXMuY29ubmVjdGlvbj1udWxsLCFpfHxuJiZpIT09bnx8aS51bnN1YnNjcmliZSgpfX1lbHNlIHRoaXMuY29ubmVjdGlvbj1udWxsfSxlfShhLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zb3VyY2U9ZSxpLnN1YmplY3RGYWN0b3J5PW4saS5fcmVmQ291bnQ9MCxpLl9pc0NvbXBsZXRlPSExLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZSh0KX0sZS5wcm90b3R5cGUuZ2V0U3ViamVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1YmplY3Q7cmV0dXJuIHQmJiF0LmlzU3RvcHBlZHx8KHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fSxlLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29ubmVjdGlvbjtyZXR1cm4gdHx8KHRoaXMuX2lzQ29tcGxldGU9ITEsKHQ9dGhpcy5fY29ubmVjdGlvbj1uZXcgcy5hKS5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKG5ldyBkKHRoaXMuZ2V0U3ViamVjdCgpLHRoaXMpKSksdC5jbG9zZWQ/KHRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0PXMuYS5FTVBUWSk6dGhpcy5fY29ubmVjdGlvbj10KSx0fSxlLnByb3RvdHlwZS5yZWZDb3VudD1mdW5jdGlvbigpe3JldHVybiB1KCkodGhpcyl9LGV9KG8uYSkucHJvdG90eXBlLGg9e29wZXJhdG9yOnt2YWx1ZTpudWxsfSxfcmVmQ291bnQ6e3ZhbHVlOjAsd3JpdGFibGU6ITB9LF9zdWJqZWN0Ont2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSxfY29ubmVjdGlvbjp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX3N1YnNjcmliZTp7dmFsdWU6Zi5fc3Vic2NyaWJlfSxfaXNDb21wbGV0ZTp7dmFsdWU6Zi5faXNDb21wbGV0ZSx3cml0YWJsZTohMH0sZ2V0U3ViamVjdDp7dmFsdWU6Zi5nZXRTdWJqZWN0fSxjb25uZWN0Ont2YWx1ZTpmLmNvbm5lY3R9LHJlZkNvdW50Ont2YWx1ZTpmLnJlZkNvdW50fX0sZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuY29ubmVjdGFibGU9bixpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fZXJyb3IuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmNvbm5lY3RhYmxlLl9pc0NvbXBsZXRlPSEwLHRoaXMuX3Vuc3Vic2NyaWJlKCksdC5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29ubmVjdGFibGU7aWYodCl7dGhpcy5jb25uZWN0YWJsZT1udWxsO3ZhciBlPXQuX2Nvbm5lY3Rpb247dC5fcmVmQ291bnQ9MCx0Ll9zdWJqZWN0PW51bGwsdC5fY29ubmVjdGlvbj1udWxsLGUmJmUudW5zdWJzY3JpYmUoKX19LGV9KHIuYik7ZnVuY3Rpb24gcCgpe3JldHVybiBuZXcgci5hfWZ1bmN0aW9uIG0oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHUoKSgoZT1wLGZ1bmN0aW9uKHQpe3ZhciBuO249ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTt2YXIgaT1PYmplY3QuY3JlYXRlKHQsaCk7cmV0dXJuIGkuc291cmNlPXQsaS5zdWJqZWN0RmFjdG9yeT1uLGl9KSh0KSk7dmFyIGV9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBtfSl9LFM1WFE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIkRLVGIiKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC50aGVuKGZ1bmN0aW9uKHQpe2UuY2xvc2VkfHwoZS5uZXh0KHQpLGUuY29tcGxldGUoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiBlLmVycm9yKHQpfSkudGhlbihudWxsLGkuYSksZX19fSxTTXNtOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiSXAwUiIpLHI9bigidC9OYSIpLG89bigiQ2NuRyIpLGE9bigiWllqdCIpLHM9bigiRi9YTCIpLHU9bigiVk5yNCIpLGw9bigiWGxQdyIpLGM9bigieE15RSIpLGY9bigiNjdZLyIpLGg9bigibXJTRyIpLGQ9bigiRkZPbyIpLHA9bigicHVnVCIpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2FsbGJhY2s9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgeSh0LHRoaXMuY2FsbGJhY2spKX0sdH0oKSx5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5hZGQobmV3IHAuYShuKSksaX1yZXR1cm4gaC5iKGUsdCksZX0oZC5hKSx2PW4oIlMxblgiKSxnPW4oIjlaMUYiKSxiPW4oInQ5ZloiKSxfPW4oIldmNHAiKSx3PW4oIm42Z0ciKTtmdW5jdGlvbiB4KHQpe3JldHVybiBFcnJvcignVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICInK3QrJyInKX1mdW5jdGlvbiBDKHQpe3JldHVybiBFcnJvcigiVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyBcIiIrdCsnIi4nKX1mdW5jdGlvbiBTKHQpe3JldHVybiBFcnJvcigiVGhlIGxpdGVyYWwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBzYWZlIEhUTUwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIGxpdGVyYWwgd2FzIFwiIit0KyciLicpfW4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gT30pO3ZhciBFPWZ1bmN0aW9uKHQpe3Qubm9kZU5hbWU/dGhpcy5zdmdFbGVtZW50PXQ6dGhpcy51cmw9dH0sTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2h0dHBDbGllbnQ9dCx0aGlzLl9zYW5pdGl6ZXI9ZSx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz0ibWF0ZXJpYWwtaWNvbnMiLHRoaXMuX2RvY3VtZW50PW59cmV0dXJuIHQucHJvdG90eXBlLmFkZFN2Z0ljb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uSW5OYW1lc3BhY2UoIiIsdCxlKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkxpdGVyYWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQsZSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcodCxlLG5ldyBFKG4pKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uSS5IVE1MLG4pO2lmKCFpKXRocm93IFMobik7dmFyIHI9dGhpcy5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24oaSk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcodCxlLG5ldyBFKHIpKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsdCl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRMaXRlcmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3IEUoZSkpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uSS5IVE1MLGUpO2lmKCFuKXRocm93IFMoZSk7dmFyIGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcobik7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcodCxuZXcgRShpKSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyRm9udENsYXNzQWxpYXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dCksdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLnNldCh0LGUpLHRoaXN9LHQucHJvdG90eXBlLmNsYXNzTmFtZUZvckZvbnRBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLmdldCh0KXx8dH0sdC5wcm90b3R5cGUuc2V0RGVmYXVsdEZvbnRTZXRDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz10LHRoaXN9LHQucHJvdG90eXBlLmdldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzc30sdC5wcm90b3R5cGUuZ2V0U3ZnSWNvbkZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkkuUkVTT1VSQ0VfVVJMLHQpO2lmKCFuKXRocm93IEModCk7dmFyIGk9dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5nZXQobik7cmV0dXJuIGk/T2JqZWN0KHMuYSkoayhpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKG5ldyBFKHQpKS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jYWNoZWRJY29uc0J5VXJsLnNldChuLHQpfSksT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSl9LHQucHJvdG90eXBlLmdldE5hbWVkU3ZnSWNvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgbj1UKGUsdCksaT10aGlzLl9zdmdJY29uQ29uZmlncy5nZXQobik7aWYoaSlyZXR1cm4gdGhpcy5fZ2V0U3ZnRnJvbUNvbmZpZyhpKTt2YXIgcj10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQoZSk7cmV0dXJuIHI/dGhpcy5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzKHQscik6T2JqZWN0KGwuYSkoeChuKSl9LHQucHJvdG90eXBlLl9nZXRTdmdGcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0VsZW1lbnQ/T2JqZWN0KHMuYSkoayh0LnN2Z0VsZW1lbnQpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcodCkucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5zdmdFbGVtZW50PWV9KSxPYmplY3QoZi5hKShmdW5jdGlvbih0KXtyZXR1cm4gayh0KX0pKX0sdC5wcm90b3R5cGUuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpO2lmKGkpcmV0dXJuIE9iamVjdChzLmEpKGkpO3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnN2Z0VsZW1lbnR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyh0KS5waXBlKE9iamVjdChnLmEpKGZ1bmN0aW9uKGUpe3ZhciBpPW4uX3Nhbml0aXplci5zYW5pdGl6ZShvLkkuUkVTT1VSQ0VfVVJMLHQudXJsKTtyZXR1cm4gY29uc29sZS5lcnJvcigiTG9hZGluZyBpY29uIHNldCBVUkw6ICIraSsiIGZhaWxlZDogIitlLm1lc3NhZ2UpLE9iamVjdChzLmEpKG51bGwpfSkpfSk7cmV0dXJuIE9iamVjdCh1LmEpKHIpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXt2YXIgaT1uLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpO2lmKCFpKXRocm93IHgodCk7cmV0dXJuIGl9KSl9LHQucHJvdG90eXBlLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT1lW25dO2lmKGkuc3ZnRWxlbWVudCl7dmFyIHI9dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGkuc3ZnRWxlbWVudCx0KTtpZihyKXJldHVybiByfX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2xvYWRTdmdJY29uRnJvbUNvbmZpZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9mZXRjaFVybCh0LnVybCkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24odCl9KSl9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdC5zdmdFbGVtZW50P09iamVjdChzLmEpKHQuc3ZnRWxlbWVudCk6dGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24obil7cmV0dXJuIHQuc3ZnRWxlbWVudHx8KHQuc3ZnRWxlbWVudD1lLl9zdmdFbGVtZW50RnJvbVN0cmluZyhuKSksdC5zdmdFbGVtZW50fSkpfSx0LnByb3RvdHlwZS5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcodCk7cmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoZSksZX0sdC5wcm90b3R5cGUuX2V4dHJhY3RTdmdJY29uRnJvbVNldD1mdW5jdGlvbih0LGUpe3ZhciBuPXQucXVlcnlTZWxlY3RvcigiIyIrZSk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9bi5jbG9uZU5vZGUoITApO2lmKGkucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGkpO2lmKCJzeW1ib2wiPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHRoaXMuX3RvU3ZnRWxlbWVudChpKSk7dmFyIHI9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iik7cmV0dXJuIHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhyKX0sdC5wcm90b3R5cGUuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2UuaW5uZXJIVE1MPXQ7dmFyIG49ZS5xdWVyeVNlbGVjdG9yKCJzdmciKTtpZighbil0aHJvdyBFcnJvcigiPHN2Zz4gdGFnIG5vdCBmb3VuZCIpO3JldHVybiBufSx0LnByb3RvdHlwZS5fdG9TdmdFbGVtZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZygiPHN2Zz48L3N2Zz4iKSxuPTA7bjx0LmNoaWxkTm9kZXMubGVuZ3RoO24rKyl0LmNoaWxkTm9kZXNbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREUmJmUuYXBwZW5kQ2hpbGQodC5jaGlsZE5vZGVzW25dLmNsb25lTm9kZSghMCkpO3JldHVybiBlfSx0LnByb3RvdHlwZS5fc2V0U3ZnQXR0cmlidXRlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLHQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLHQuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLHR9LHQucHJvdG90eXBlLl9mZXRjaFVybD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLl9odHRwQ2xpZW50KXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBIdHRwQ2xpZW50IHByb3ZpZGVyIGZvciB1c2Ugd2l0aCBBbmd1bGFyIE1hdGVyaWFsIGljb25zLiBQbGVhc2UgaW5jbHVkZSB0aGUgSHR0cENsaWVudE1vZHVsZSBmcm9tIEBhbmd1bGFyL2NvbW1vbi9odHRwIGluIHlvdXIgYXBwIGltcG9ydHMuIik7aWYobnVsbD09dCl0aHJvdyBFcnJvcignQ2Fubm90IGZldGNoIGljb24gZnJvbSBVUkwgIicrdCsnIi4nKTt2YXIgbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5JLlJFU09VUkNFX1VSTCx0KTtpZighbil0aHJvdyBDKHQpO3ZhciBpPXRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmdldChuKTtpZihpKXJldHVybiBpO3ZhciByLGE9dGhpcy5faHR0cENsaWVudC5nZXQobix7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pLnBpcGUoKHI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5faW5Qcm9ncmVzc1VybEZldGNoZXMuZGVsZXRlKG4pfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5saWZ0KG5ldyBtKHIpKX0pLE9iamVjdCh2LmEpKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQobixhKSxhfSx0LnByb3RvdHlwZS5fYWRkU3ZnSWNvbkNvbmZpZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldChUKHQsZSksbiksdGhpc30sdC5wcm90b3R5cGUuX2FkZFN2Z0ljb25TZXRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQodCk7cmV0dXJuIG4/bi5wdXNoKGUpOnRoaXMuX2ljb25TZXRDb25maWdzLnNldCh0LFtlXSksdGhpc30sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWSkoci5jLDgpLE9iamVjdChvLlkpKGEuYyksT2JqZWN0KG8uWSkoaS5kLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gayh0KXtyZXR1cm4gdC5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gdCsiOiIrZX12YXIgaj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5faWNvblJlZ2lzdHJ5PW4sci5faW5saW5lPSExLGl8fGUubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHJ9cmV0dXJuIE9iamVjdChoLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmxpbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5saW5lfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faW5saW5lPU9iamVjdCh3LmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udFNldCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250U2V0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udFNldD10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udEljb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udEljb259LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb250SWNvbj10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zcGxpdEljb25OYW1lPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVyblsiIiwiIl07dmFyIGU9dC5zcGxpdCgiOiIpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixlWzBdXTtjYXNlIDI6cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcignSW52YWxpZCBpY29uIG5hbWU6ICInK3QrJyInKX19LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodC5zdmdJY29uKWlmKHRoaXMuc3ZnSWNvbil7dmFyIG49dGhpcy5fc3BsaXRJY29uTmFtZSh0aGlzLnN2Z0ljb24pO3RoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24oblsxXSxuWzBdKS5waXBlKE9iamVjdChiLmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN2Z0VsZW1lbnQodCl9LGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLmxvZygiRXJyb3IgcmV0cmlldmluZyBpY29uOiAiK3QubWVzc2FnZSl9KX1lbHNlIHRoaXMuX2NsZWFyU3ZnRWxlbWVudCgpO3RoaXMuX3VzaW5nRm9udEljb24oKSYmdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fdXNpbmdGb250SWNvbigpJiZ0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX0sZS5wcm90b3R5cGUuX3VzaW5nRm9udEljb249ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zdmdJY29ufSxlLnByb3RvdHlwZS5fc2V0U3ZnRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKTtmb3IodmFyIGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLG49MDtuPGUubGVuZ3RoO24rKyllW25dLnRleHRDb250ZW50Kz0iICI7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHQpfSxlLnByb3RvdHlwZS5fY2xlYXJTdmdFbGVtZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZS0tOyl7dmFyIG49dC5jaGlsZE5vZGVzW2VdOzE9PT1uLm5vZGVUeXBlJiYic3ZnIiE9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKXx8dC5yZW1vdmVDaGlsZChuKX19LGUucHJvdG90eXBlLl91cGRhdGVGb250SWNvbkNsYXNzZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl91c2luZ0ZvbnRJY29uKCkpe3ZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKTtlIT10aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiZ0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MpLGUmJnQuY2xhc3NMaXN0LmFkZChlKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1lKSx0aGlzLmZvbnRJY29uIT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJih0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MpLHRoaXMuZm9udEljb24mJnQuY2xhc3NMaXN0LmFkZCh0aGlzLmZvbnRJY29uKSx0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3M9dGhpcy5mb250SWNvbil9fSxlLnByb3RvdHlwZS5fY2xlYW51cEZvbnRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC50cmltKCkuc3BsaXQoIiAiKVswXTp0fSxlfShPYmplY3QoXy56KShmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSksQT1mdW5jdGlvbigpe319LFQxRE06ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oImg5RHEiKSxyPW5ldyhuKCJDUzlRIikuYSkoaS5hKX0sVHhqZzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigiWm44RCIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gT2JqZWN0KGkuYSkoMSl9fSxVb2RIOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIGk9bigibXJTRyIpLHI9bigiV2Y0cCIpLG89ImFjY2VudCIsYT0icHJpbWFyeSIscz1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIHU9dC5jYWxsKHRoaXMsZSl8fHRoaXM7dS5fcGxhdGZvcm09bix1Ll9mb2N1c01vbml0b3I9aSx1Ll9hbmltYXRpb25Nb2RlPXIsdS5pc1JvdW5kQnV0dG9uPXUuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksdS5pc0ljb25CdXR0b249dS5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcih2YXIgbD0wLGM9cztsPGMubGVuZ3RoO2wrKyl7dmFyIGY9Y1tsXTt1Ll9oYXNIb3N0QXR0cmlidXRlcyhmKSYmZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZil9cmV0dXJuIHUuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHUuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwhMCksdS5pc1JvdW5kQnV0dG9uP3UuY29sb3I9bzp1Ll9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZsYXQtYnV0dG9uIikmJih1LmNvbG9yPWEpLHV9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCl9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH0sZS5wcm90b3R5cGUuX2hhc0hvc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9nZXRIb3N0RWxlbWVudCgpLmhhc0F0dHJpYnV0ZShlKX0pfSxlfShPYmplY3Qoci56KShPYmplY3Qoci5CKShPYmplY3Qoci5BKShmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSkpKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7cmV0dXJuIHQuY2FsbCh0aGlzLGksZSxuLHIpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLl9oYWx0RGlzYWJsZWRFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZCYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0sZX0odSksYz1mdW5jdGlvbigpe319LCJWOXErIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbigiQ2NuRyIpO3ZhciBpPW4oIklwMFIiKSxyPW4oIk96ZkIiKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe09iamVjdChpLnUpKGUpJiYhdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBGbGV4IExheW91dCBsb2FkZWQgb24gdGhlIHNlcnZlciB3aXRob3V0IEZsZXhMYXlvdXRTZXJ2ZXJNb2R1bGUiKX1yZXR1cm4gdC53aXRoQ29uZmlnPWZ1bmN0aW9uKGUsbil7dmFyIGk9T2JqZWN0LmFzc2lnbih7fSxyLmYpLG89W107Zm9yKHZhciBhIGluIGUpZVthXT09PWlbYV18fCExIT09ZVthXSYmITAhPT1lW2FdfHwoaVthXT1lW2FdKTtyZXR1cm4gZS5zZXJ2ZXJMb2FkZWQmJm8ucHVzaCh7cHJvdmlkZTpyLmwsdXNlVmFsdWU6ITB9KSxBcnJheS5pc0FycmF5KG4pJiZvLnB1c2goe3Byb3ZpZGU6ci5hLHVzZVZhbHVlOm4sbXVsdGk6ITB9KSxvLnB1c2goe3Byb3ZpZGU6ci5nLHVzZVZhbHVlOml9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6b319LHR9KCl9LFZOcjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIjZibEYiKSxvPW4oImlzYnkiKSxhPW4oIkc1SjEiKSxzPW4oInpvdG0iKSx1PW4oIk1HQlMiKSxsPW4oIjY3WS8iKTtmdW5jdGlvbiBjKCl7Zm9yKHZhciB0LGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGVbZS5sZW5ndGgtMV0mJih0PWUucG9wKCkpLDE9PT1lLmxlbmd0aCYmT2JqZWN0KG8uYSkoZVswXSkmJihlPWVbMF0pLDA9PT1lLmxlbmd0aD9hLmE6dD9jKGUpLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGUpfSkpOm5ldyByLmEoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmKHQsZSl9KX12YXIgZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7aS5zb3VyY2VzPW4saS5jb21wbGV0ZWQ9MCxpLmhhdmVWYWx1ZXM9MDt2YXIgcj1uLmxlbmd0aDtpLnZhbHVlcz1uZXcgQXJyYXkocik7Zm9yKHZhciBvPTA7bzxyO28rKyl7dmFyIGE9bltvXSx1PU9iamVjdChzLmEpKGksYSxudWxsLG8pO3UmJmkuYWRkKHUpfXJldHVybiBpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy52YWx1ZXNbbl09ZSxyLl9oYXNWYWx1ZXx8KHIuX2hhc1ZhbHVlPSEwLHRoaXMuaGF2ZVZhbHVlcysrKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbixuPXRoaXMuaGF2ZVZhbHVlcyxpPXRoaXMudmFsdWVzLHI9aS5sZW5ndGg7dC5faGFzVmFsdWU/KHRoaXMuY29tcGxldGVkKyssdGhpcy5jb21wbGV0ZWQ9PT1yJiYobj09PXImJmUubmV4dChpKSxlLmNvbXBsZXRlKCkpKTplLmNvbXBsZXRlKCl9LGV9KHUuYSl9LCJWbkQvIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgYSh0LGUpKX19dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgcyh0LHRoaXMucHJlZGljYXRlLHRoaXMudGhpc0FyZykpfSx0fSgpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucHJlZGljYXRlPW4sci50aGlzQXJnPWksci5jb3VudD0wLHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5jb3VudCsrKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWUmJnRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZX0oci5hKX0sVnBoWjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfSxyPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAxPT09dC5sZW5ndGgmJihlPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBpKGUodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPDA/aT1vKzE6cj1vfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbihlLG4saSxyKXtmb3IobnVsbD09aSYmKGk9MCksbnVsbD09ciYmKHI9ZS5sZW5ndGgpO2k8cjspe3ZhciBvPWkrcj4+PjE7dChlW29dLG4pPjA/cj1vOmk9bysxfXJldHVybiBpfX19LG89cihpKSxhPW8ucmlnaHQscz1vLmxlZnQsdT1hLGw9ZnVuY3Rpb24odCxlKXtudWxsPT1lJiYoZT1jKTtmb3IodmFyIG49MCxpPXQubGVuZ3RoLTEscj10WzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT1lKHIscj10Wysrbl0pO3JldHVybiBvfTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuW3QsZV19dmFyIGY9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbyxhLHM9dC5sZW5ndGgsdT1lLmxlbmd0aCxsPW5ldyBBcnJheShzKnUpO2ZvcihudWxsPT1uJiYobj1jKSxpPW89MDtpPHM7KytpKWZvcihhPXRbaV0scj0wO3I8dTsrK3IsKytvKWxbb109bihhLGVbcl0pO3JldHVybiBsfSxoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LHA9ZnVuY3Rpb24odCxlKXt2YXIgbixpLHI9dC5sZW5ndGgsbz0wLGE9LTEscz0wLHU9MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49ZCh0W2FdKSl8fCh1Kz0oaT1uLXMpKihuLShzKz1pLysrbykpKTtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49ZChlKHRbYV0sYSx0KSkpfHwodSs9KGk9bi1zKSoobi0ocys9aS8rK28pKSk7aWYobz4xKXJldHVybiB1LyhvLTEpfSxtPWZ1bmN0aW9uKHQsZSl7dmFyIG49cCh0LGUpO3JldHVybiBuP01hdGguc3FydChuKTpufSx5PWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG89dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3IoaT1yPW47KythPG87KW51bGwhPShuPXRbYV0pJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKX1lbHNlIGZvcig7KythPG87KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3IoaT1yPW47KythPG87KW51bGwhPShuPWUodFthXSxhLHQpKSYmKGk+biYmKGk9bikscjxuJiYocj1uKSk7cmV0dXJuW2kscl19LHY9QXJyYXkucHJvdG90eXBlLGc9di5zbGljZSxiPXYubWFwLF89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSx3PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx4PWZ1bmN0aW9uKHQsZSxuKXt0PSt0LGU9K2Usbj0ocj1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOnI8Mz8xOituO2Zvcih2YXIgaT0tMSxyPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KHIpOysraTxyOylvW2ldPXQraSpuO3JldHVybiBvfSxDPU1hdGguc3FydCg1MCksUz1NYXRoLnNxcnQoMTApLEU9TWF0aC5zcXJ0KDIpLE89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbyxhLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigoaT1lPHQpJiYocj10LHQ9ZSxlPXIpLDA9PT0oYT1rKHQsZSxuKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKHQ9TWF0aC5jZWlsKHQvYSksZT1NYXRoLmZsb29yKGUvYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwoZS10KzEpKTsrK3M8cjspb1tzXT0odCtzKSphO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KmEpLGU9TWF0aC5jZWlsKGUqYSksbz1uZXcgQXJyYXkocj1NYXRoLmNlaWwodC1lKzEpKTsrK3M8cjspb1tzXT0odC1zKS9hO3JldHVybiBpJiZvLnJldmVyc2UoKSxvfTtmdW5jdGlvbiBrKHQsZSxuKXt2YXIgaT0oZS10KS9NYXRoLm1heCgwLG4pLHI9TWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApLG89aS9NYXRoLnBvdygxMCxyKTtyZXR1cm4gcj49MD8obz49Qz8xMDpvPj1TPzU6bz49RT8yOjEpKk1hdGgucG93KDEwLHIpOi1NYXRoLnBvdygxMCwtcikvKG8+PUM/MTA6bz49Uz81Om8+PUU/MjoxKX1mdW5jdGlvbiBUKHQsZSxuKXt2YXIgaT1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkpLG89aS9yO3JldHVybiBvPj1DP3IqPTEwOm8+PVM/cio9NTpvPj1FJiYocio9MiksZTx0Py1yOnJ9dmFyIGo9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LEE9ZnVuY3Rpb24oKXt2YXIgdD13LGU9eSxuPWo7ZnVuY3Rpb24gaShpKXt2YXIgcixvLGE9aS5sZW5ndGgscz1uZXcgQXJyYXkoYSk7Zm9yKHI9MDtyPGE7KytyKXNbcl09dChpW3JdLHIsaSk7dmFyIGw9ZShzKSxjPWxbMF0sZj1sWzFdLGg9bihzLGMsZik7QXJyYXkuaXNBcnJheShoKXx8KGg9VChjLGYsaCksaD14KE1hdGguY2VpbChjL2gpKmgsTWF0aC5mbG9vcihmL2gpKmgsaCkpO2Zvcih2YXIgZD1oLmxlbmd0aDtoWzBdPD1jOyloLnNoaWZ0KCksLS1kO2Zvcig7aFtkLTFdPmY7KWgucG9wKCksLS1kO3ZhciBwLG09bmV3IEFycmF5KGQrMSk7Zm9yKHI9MDtyPD1kOysrcikocD1tW3JdPVtdKS54MD1yPjA/aFtyLTFdOmMscC54MT1yPGQ/aFtyXTpmO2ZvcihyPTA7cjxhOysrciljPD0obz1zW3JdKSYmbzw9ZiYmbVt1KGgsbywwLGQpXS5wdXNoKGlbcl0pO3JldHVybiBtfXJldHVybiBpLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6XyhlKSxpKTp0fSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol8oW3RbMF0sdFsxXV0pLGkpOmV9LGkudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/XyhnLmNhbGwodCkpOl8odCksaSk6bn0saX0sST1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09biYmKG49ZCksaT10Lmxlbmd0aCl7aWYoKGU9K2UpPD0wfHxpPDIpcmV0dXJuK24odFswXSwwLHQpO2lmKGU+PTEpcmV0dXJuK24odFtpLTFdLGktMSx0KTt2YXIgaSxyPShpLTEpKmUsbz1NYXRoLmZsb29yKHIpLGE9K24odFtvXSxvLHQpO3JldHVybiBhKygrbih0W28rMV0sbysxLHQpLWEpKihyLW8pfX0sUj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9Yi5jYWxsKHQsZCkuc29ydChpKSxNYXRoLmNlaWwoKG4tZSkvKDIqKEkodCwuNzUpLUkodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSxNPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5jZWlsKChuLWUpLygzLjUqbSh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSxQPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyPXQubGVuZ3RoLG89LTE7aWYobnVsbD09ZSl7Zm9yKDsrK288cjspaWYobnVsbCE9KG49dFtvXSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49dFtvXSkmJm4+aSYmKGk9bil9ZWxzZSBmb3IoOysrbzxyOylpZihudWxsIT0obj1lKHRbb10sbyx0KSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPmkmJihpPW4pO3JldHVybiBpfSxEPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10Lmxlbmd0aCxyPWksbz0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihuPWQodFtvXSkpPy0tcjphKz1uO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1kKGUodFtvXSxvLHQpKSk/LS1yOmErPW47aWYocilyZXR1cm4gYS9yfSxOPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxvPS0xLGE9W107aWYobnVsbD09ZSlmb3IoOysrbzxyOylpc05hTihuPWQodFtvXSkpfHxhLnB1c2gobik7ZWxzZSBmb3IoOysrbzxyOylpc05hTihuPWQoZSh0W29dLG8sdCkpKXx8YS5wdXNoKG4pO3JldHVybiBJKGEuc29ydChpKSwuNSl9LEY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saSxyPXQubGVuZ3RoLG89LTEsYT0wOysrbzxyOylhKz10W29dLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSk7LS1yPj0wOylmb3IoZT0oaT10W3JdKS5sZW5ndGg7LS1lPj0wOyluWy0tYV09aVtlXTtyZXR1cm4gbn0sTD1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPHI7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPXRbb10pJiZpPm4mJihpPW4pfWVsc2UgZm9yKDsrK288cjspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihpPW47KytvPHI7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmaT5uJiYoaT1uKTtyZXR1cm4gaX0sVj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKTtuLS07KWlbbl09dFtlW25dXTtyZXR1cm4gaX0sej1mdW5jdGlvbih0LGUpe2lmKG49dC5sZW5ndGgpe3ZhciBuLHIsbz0wLGE9MCxzPXRbYV07Zm9yKG51bGw9PWUmJihlPWkpOysrbzxuOykoZShyPXRbb10scyk8MHx8MCE9PWUocyxzKSkmJihzPXIsYT1vKTtyZXR1cm4gMD09PWUocyxzKT9hOnZvaWQgMH19LEI9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSxyLG89KG51bGw9PW4/dC5sZW5ndGg6biktKGU9bnVsbD09ZT8wOitlKTtvOylyPU1hdGgucmFuZG9tKCkqby0tfDAsaT10W28rZV0sdFtvK2VdPXRbcitlXSx0W3IrZV09aTtyZXR1cm4gdH0sVT1mdW5jdGlvbih0LGUpe3ZhciBuLGk9dC5sZW5ndGgscj0tMSxvPTA7aWYobnVsbD09ZSlmb3IoOysrcjxpOykobj0rdFtyXSkmJihvKz1uKTtlbHNlIGZvcig7KytyPGk7KShuPStlKHRbcl0scix0KSkmJihvKz1uKTtyZXR1cm4gb30sSD1mdW5jdGlvbih0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxuPUwodCxxKSxpPW5ldyBBcnJheShuKTsrK2U8bjspZm9yKHZhciByLG89LTEsYT1pW2VdPW5ldyBBcnJheShyKTsrK288cjspYVtvXT10W29dW2VdO3JldHVybiBpfTtmdW5jdGlvbiBxKHQpe3JldHVybiB0Lmxlbmd0aH12YXIgRz1mdW5jdGlvbigpe3JldHVybiBIKGFyZ3VtZW50cyl9LFE9QXJyYXkucHJvdG90eXBlLnNsaWNlLFk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LFc9MSxaPTIsSz0zLFg9NCwkPTFlLTY7ZnVuY3Rpb24gSih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIHR0KHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Ky41KSsiKSJ9ZnVuY3Rpb24gZXQoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gbnQodCxlKXt2YXIgbj1bXSxpPW51bGwscj1udWxsLG89NixhPTYscz0zLHU9dD09PVd8fHQ9PT1YPy0xOjEsbD10PT09WHx8dD09PVo/IngiOiJ5IixjPXQ9PT1XfHx0PT09Sz9KOnR0O2Z1bmN0aW9uIGYoZil7dmFyIGg9bnVsbD09aT9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOmksZD1udWxsPT1yP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpZOnIscD1NYXRoLm1heChvLDApK3MsbT1lLnJhbmdlKCkseT0rbVswXSsuNSx2PSttW20ubGVuZ3RoLTFdKy41LGc9KGUuYmFuZHdpZHRoP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLGZ1bmN0aW9uKG4pe3JldHVybit0KG4pK2V9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuK3QoZSl9fSkoZS5jb3B5KCkpLGI9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLF89Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksdz1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGgsZSkub3JkZXIoKSx4PXcuZXhpdCgpLEM9dy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFM9dy5zZWxlY3QoImxpbmUiKSxFPXcuc2VsZWN0KCJ0ZXh0Iik7Xz1fLm1lcmdlKF8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpKSx3PXcubWVyZ2UoQyksUz1TLm1lcmdlKEMuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIobCsiMiIsdSpvKSksRT1FLm1lcmdlKEMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKGwsdSpwKS5hdHRyKCJkeSIsdD09PVc/IjBlbSI6dD09PUs/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09YiYmKF89Xy50cmFuc2l0aW9uKGYpLHc9dy50cmFuc2l0aW9uKGYpLFM9Uy50cmFuc2l0aW9uKGYpLEU9RS50cmFuc2l0aW9uKGYpLHg9eC50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLCQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9Zyh0KSk/Yyh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxDLmF0dHIoIm9wYWNpdHkiLCQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gYyhlJiZpc0Zpbml0ZShlPWUodCkpP2U6Zyh0KSl9KSkseC5yZW1vdmUoKSxfLmF0dHIoImQiLHQ9PT1YfHx0PT1aPyJNIit1KmErIiwiK3krIkgwLjVWIit2KyJIIit1KmE6Ik0iK3krIiwiK3UqYSsiVjAuNUgiK3YrIlYiK3UqYSksdy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBjKGcodCkpfSksUy5hdHRyKGwrIjIiLHUqbyksRS5hdHRyKGwsdSpwKS50ZXh0KGQpLGIuZmlsdGVyKGV0KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIix0PT09Wj8ic3RhcnQiOnQ9PT1YPyJlbmQiOiJtaWRkbGUiKSxiLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1nfSl9cmV0dXJuIGYuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxmKTplfSxmLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49US5jYWxsKGFyZ3VtZW50cyksZn0sZi50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106US5jYWxsKHQpLGYpOm4uc2xpY2UoKX0sZi50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDpRLmNhbGwodCksZik6aSYmaS5zbGljZSgpfSxmLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxmKTpyfSxmLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K3QsZik6b30sZi50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGYpOm99LGYudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxmKTphfSxmLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGYpOnN9LGZ9ZnVuY3Rpb24gaXQodCl7cmV0dXJuIG50KFcsdCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIG50KFosdCl9ZnVuY3Rpb24gb3QodCl7cmV0dXJuIG50KEssdCl9ZnVuY3Rpb24gYXQodCl7cmV0dXJuIG50KFgsdCl9dmFyIHN0PXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHV0KCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgsaT17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiBpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBsdChpKX1mdW5jdGlvbiBsdCh0KXt0aGlzLl89dH1mdW5jdGlvbiBjdCh0LGUpe2Zvcih2YXIgbixpPTAscj10Lmxlbmd0aDtpPHI7KytpKWlmKChuPXRbaV0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIGZ0KHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT1zdCx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9bHQucHJvdG90eXBlPXV0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHQsb246ZnVuY3Rpb24odCxlKXt2YXIgbixpLHI9dGhpcy5fLG89KGk9ciwodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO2lmKG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSksdCYmIWkuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSkpLGE9LTEscz1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxzOylpZihuPSh0PW9bYV0pLnR5cGUpcltuXT1mdChyW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gcilyW25dPWZ0KHJbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPHM7KWlmKChuPSh0PW9bYV0pLnR5cGUpJiYobj1jdChyW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBsdCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4saSxyPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylyW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShpPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28paVtvXS52YWx1ZS5hcHBseShlLHIpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIGk9dGhpcy5fW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIGh0PXV0LGR0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixwdD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6ZHQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxtdD1mdW5jdGlvbih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxwdC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6cHRbZV0sbG9jYWw6dH06dH0seXQ9ZnVuY3Rpb24odCl7dmFyIGU9bXQodCk7cmV0dXJuKGUubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09ZHQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PWR0P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX0pKGUpfTtmdW5jdGlvbiB2dCgpe312YXIgZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX07ZnVuY3Rpb24gYnQoKXtyZXR1cm5bXX12YXIgX3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/YnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sd3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciB4dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIXh0Lm1hdGNoZXMpe3ZhciBDdD14dC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fHh0Lm1zTWF0Y2hlc1NlbGVjdG9yfHx4dC5tb3pNYXRjaGVzU2VsZWN0b3J8fHh0Lm9NYXRjaGVzU2VsZWN0b3I7d3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEN0LmNhbGwodGhpcyx0KX19fX12YXIgU3Q9d3QsRXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9O2Z1bmN0aW9uIE90KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfU90LnByb3RvdHlwZT17Y29uc3RydWN0b3I6T3QsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIGt0PSIkIjtmdW5jdGlvbiBUdCh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHM9MCx1PWUubGVuZ3RoLGw9by5sZW5ndGg7czxsOysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6bltzXT1uZXcgT3QodCxvW3NdKTtmb3IoO3M8dTsrK3MpKGE9ZVtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIGp0KHQsZSxuLGkscixvLGEpe3ZhciBzLHUsbCxjPXt9LGY9ZS5sZW5ndGgsaD1vLmxlbmd0aCxkPW5ldyBBcnJheShmKTtmb3Iocz0wO3M8ZjsrK3MpKHU9ZVtzXSkmJihkW3NdPWw9a3QrYS5jYWxsKHUsdS5fX2RhdGFfXyxzLGUpLGwgaW4gYz9yW3NdPXU6Y1tsXT11KTtmb3Iocz0wO3M8aDsrK3MpKHU9Y1tsPWt0K2EuY2FsbCh0LG9bc10scyxvKV0pPyhpW3NdPXUsdS5fX2RhdGFfXz1vW3NdLGNbbF09bnVsbCk6bltzXT1uZXcgT3QodCxvW3NdKTtmb3Iocz0wO3M8ZjsrK3MpKHU9ZVtzXSkmJmNbZFtzXV09PT11JiYocltzXT11KX1mdW5jdGlvbiBBdCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIgSXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fTtmdW5jdGlvbiBSdCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fEl0KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIE10KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBEdCh0KX1mdW5jdGlvbiBEdCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9TXQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBOdCh0LGUpe2Zvcih2YXIgbj1QdCh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4uYWRkKGVbaV0pfWZ1bmN0aW9uIEZ0KHQsZSl7Zm9yKHZhciBuPVB0KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5yZW1vdmUoZVtpXSl9ZnVuY3Rpb24gTHQoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIFZ0KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24genQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQnQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBVdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEh0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gR3QoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9RHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgUXQ9e30sWXQ9bnVsbDtmdW5jdGlvbiBXdCh0LGUsbil7cmV0dXJuIHQ9WnQodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBadCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVl0O1l0PWk7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e1l0PXJ9fX1mdW5jdGlvbiBLdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLGk9MCxyPS0xLG89ZS5sZW5ndGg7aTxvOysraSluPWVbaV0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysrcl09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK3I/ZS5sZW5ndGg9cjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gWHQodCxlLG4pe3ZhciBpPVF0Lmhhc093blByb3BlcnR5KHQudHlwZSk/V3Q6WnQ7cmV0dXJuIGZ1bmN0aW9uKHIsbyxhKXt2YXIgcyx1PXRoaXMuX19vbixsPWkoZSxvLGEpO2lmKHUpZm9yKHZhciBjPTAsZj11Lmxlbmd0aDtjPGY7KytjKWlmKChzPXVbY10pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPWwscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGwsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpsLGNhcHR1cmU6bn0sdT91LnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gJHQodCxlLG4saSl7dmFyIHI9WXQ7dC5zb3VyY2VFdmVudD1ZdCxZdD10O3RyeXtyZXR1cm4gZS5hcHBseShuLGkpfWZpbmFsbHl7WXQ9cn19ZnVuY3Rpb24gSnQodCxlLG4pe3ZhciBpPUl0KHQpLHI9aS5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2Ygcj9yPW5ldyByKGUsbik6KHI9aS5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhyLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLHIuZGV0YWlsPW4uZGV0YWlsKTpyLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KHIpfSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KFF0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdGU9W251bGxdO2Z1bmN0aW9uIGVlKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIG5lKCl7cmV0dXJuIG5ldyBlZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHRlKX1lZS5wcm90b3R5cGU9bmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplZSxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWd0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLHU9cy5sZW5ndGgsbD1pW3JdPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYykobz1zW2NdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyxjLHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxsW2NdPWEpO3JldHVybiBuZXcgZWUoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1fdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9W10scj1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLHU9cy5sZW5ndGgsbD0wO2w8dTsrK2wpKGE9c1tsXSkmJihpLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxsLHMpKSxyLnB1c2goYSkpO3JldHVybiBuZXcgZWUoaSxyKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1TdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWZvcih2YXIgbyxhPWVbcl0scz1hLmxlbmd0aCx1PWlbcl09W10sbD0wO2w8czsrK2wpKG89YVtsXSkmJnQuY2FsbChvLG8uX19kYXRhX18sbCxhKSYmdS5wdXNoKG8pO3JldHVybiBuZXcgZWUoaSx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK2NdPXR9KSxwO3ZhciBuLGk9ZT9qdDpUdCxyPXRoaXMuX3BhcmVudHMsbz10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBhPW8ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9MDtjPGE7KytjKXt2YXIgZj1yW2NdLGg9b1tjXSxkPWgubGVuZ3RoLHA9dC5jYWxsKGYsZiYmZi5fX2RhdGFfXyxjLHIpLG09cC5sZW5ndGgseT11W2NdPW5ldyBBcnJheShtKSx2PXNbY109bmV3IEFycmF5KG0pO2koZixoLHksdixsW2NdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgZyxiLF89MCx3PTA7XzxtOysrXylpZihnPXlbX10pe2ZvcihfPj13JiYodz1fKzEpOyEoYj12W3ddKSYmKyt3PG07KTtnLl9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyBlZShzLHIpKS5fZW50ZXI9dSxzLl9leGl0PWwsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKEV0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgZWUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChFdCksdGhpcy5fcGFyZW50cyl9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyx1PWVbYV0sbD1uW2FdLGM9dS5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxoPTA7aDxjOysraCkocz11W2hdfHxsW2hdKSYmKGZbaF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGVlKG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgaSxyPXRbZV0sbz1yLmxlbmd0aC0xLGE9cltvXTstLW8+PTA7KShpPXJbb10pJiYoYSYmYSE9PWkubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSxhKSxhPWkpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9QXQpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxyPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbyl7Zm9yKHZhciBhLHM9bltvXSx1PXMubGVuZ3RoLGw9cltvXT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpKGE9c1tjXSkmJihsW2NdPWEpO2wuc29ydChlKX1yZXR1cm4gbmV3IGVlKHIsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RbKytlXT10aGlzfSksdH0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIGk9dFtlXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKXt2YXIgYT1pW3JdO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK3R9KSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxpPWUubGVuZ3RoO248aTsrK24pZm9yKHZhciByLG89ZVtuXSxhPTAscz1vLmxlbmd0aDthPHM7KythKShyPW9bYV0pJiZ0LmNhbGwocixyLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1tdCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTppLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fToiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19Om4ubG9jYWw/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpLG4pfX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX0pKHQsZSxudWxsPT1uPyIiOm4pKTpSdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LGUpe3ZhciBuPU10KHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPVB0KHRoaXMubm9kZSgpKSxyPS0xLG89bi5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKG5bcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP050OkZ0KSh0aGlzLHQpfX06ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtOdCh0aGlzLHQpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7RnQodGhpcyx0KX19KShuLGUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9MdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P1Z0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX0pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh6dCl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChCdCl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onl0KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Onl0KHQpLGk9bnVsbD09ZT9VdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmd0KGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChIdCl9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P0d0OnF0KX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LGUsbil7dmFyIGkscixvPSh0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/WHQ6S3QsbnVsbD09biYmKG49ITEpLGk9MDtpPGE7KytpKXRoaXMuZWFjaChzKG9baV0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgdSxsPTAsYz1zLmxlbmd0aDtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8YTsrK2kpaWYoKHI9b1tpXSkudHlwZT09PXUudHlwZSYmci5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEp0KHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBKdCh0aGlzLHQsZSl9fSkodCxlKSl9fTt2YXIgaWU9bmUscmU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBlZShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGVlKFtbdF1dLHRlKX0sb2U9ZnVuY3Rpb24odCl7cmV0dXJuIHJlKHl0KHQpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSl9LGFlPTA7ZnVuY3Rpb24gc2UoKXtyZXR1cm4gbmV3IHVlfWZ1bmN0aW9uIHVlKCl7dGhpcy5fPSJAIisoKythZSkudG9TdHJpbmcoMzYpfXVlLnByb3RvdHlwZT1zZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVlLGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBsZT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVl0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfSxjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gaS54PWUuY2xpZW50WCxpLnk9ZS5jbGllbnRZLFsoaT1pLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtci5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktci50b3AtdC5jbGllbnRUb3BdfSxmZT1mdW5jdGlvbih0KXt2YXIgZT1sZSgpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxjZSh0LGUpfSxoZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGVlKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGVlKFtudWxsPT10P1tdOnRdLHRlKX0sZGU9ZnVuY3Rpb24odCxlLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49ZSxlPWxlKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgaSxyPTAsbz1lP2UubGVuZ3RoOjA7cjxvOysrcilpZigoaT1lW3JdKS5pZGVudGlmaWVyPT09bilyZXR1cm4gY2UodCxpKTtyZXR1cm4gbnVsbH0scGU9ZnVuY3Rpb24odCxlKXtudWxsPT1lJiYoZT1sZSgpLnRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9ZT9lLmxlbmd0aDowLHI9bmV3IEFycmF5KGkpO248aTsrK24pcltuXT1jZSh0LGVbbl0pO3JldHVybiByfTtmdW5jdGlvbiBtZSgpe1l0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB5ZT1mdW5jdGlvbigpe1l0LnByZXZlbnREZWZhdWx0KCksWXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LHZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cmUodCkub24oImRyYWdzdGFydC5kcmFnIix5ZSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIix5ZSwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9O2Z1bmN0aW9uIGdlKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT1yZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihpLm9uKCJjbGljay5kcmFnIix5ZSwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe2kub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gbj9pLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToobi5zdHlsZS5Nb3pVc2VyU2VsZWN0PW4uX19ub3NlbGVjdCxkZWxldGUgbi5fX25vc2VsZWN0KX12YXIgYmU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBfZSh0LGUsbixpLHIsbyxhLHMsdSxsKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc3ViamVjdD1uLHRoaXMuaWRlbnRpZmllcj1pLHRoaXMuYWN0aXZlPXIsdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9dSx0aGlzLl89bH1mdW5jdGlvbiB3ZSgpe3JldHVybiFZdC5idXR0b259ZnVuY3Rpb24geGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIENlKHQpe3JldHVybiBudWxsPT10P3t4Oll0LngseTpZdC55fTp0fWZ1bmN0aW9uIFNlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfV9lLnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXMuXz90aGlzOnR9O3ZhciBFZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHI9d2Usbz14ZSxhPUNlLHM9U2UsdT17fSxsPWh0KCJzdGFydCIsImRyYWciLCJlbmQiKSxjPTAsZj0wO2Z1bmN0aW9uIGgodCl7dC5vbigibW91c2Vkb3duLmRyYWciLGQpLmZpbHRlcihzKS5vbigidG91Y2hzdGFydC5kcmFnIix5KS5vbigidG91Y2htb3ZlLmRyYWciLHYpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGcpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkKCl7aWYoIWkmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgYT1iKCJtb3VzZSIsby5hcHBseSh0aGlzLGFyZ3VtZW50cyksZmUsdGhpcyxhcmd1bWVudHMpO2EmJihyZShZdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHAsITApLm9uKCJtb3VzZXVwLmRyYWciLG0sITApLHZlKFl0LnZpZXcpLG1lKCksbj0hMSx0PVl0LmNsaWVudFgsZT1ZdC5jbGllbnRZLGEoInN0YXJ0IikpfX1mdW5jdGlvbiBwKCl7aWYoeWUoKSwhbil7dmFyIGk9WXQuY2xpZW50WC10LHI9WXQuY2xpZW50WS1lO249aSppK3Iqcj5mfXUubW91c2UoImRyYWciKX1mdW5jdGlvbiBtKCl7cmUoWXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksZ2UoWXQudmlldyxuKSx5ZSgpLHUubW91c2UoImVuZCIpfWZ1bmN0aW9uIHkoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQsZSxuPVl0LmNoYW5nZWRUb3VjaGVzLGk9by5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT1uLmxlbmd0aDtmb3IodD0wO3Q8YTsrK3QpKGU9YihuW3RdLmlkZW50aWZpZXIsaSxkZSx0aGlzLGFyZ3VtZW50cykpJiYobWUoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gdigpe3ZhciB0LGUsbj1ZdC5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdCkoZT11W25bdF0uaWRlbnRpZmllcl0pJiYoeWUoKSxlKCJkcmFnIikpfWZ1bmN0aW9uIGcoKXt2YXIgdCxlLG49WXQuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IoaSYmY2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dChmdW5jdGlvbigpe2k9bnVsbH0sNTAwKSx0PTA7dDxyOysrdCkoZT11W25bdF0uaWRlbnRpZmllcl0pJiYobWUoKSxlKCJlbmQiKSl9ZnVuY3Rpb24gYih0LGUsbixpLHIpe3ZhciBvLHMsZixkPW4oZSx0KSxwPWwuY29weSgpO2lmKCR0KG5ldyBfZShoLCJiZWZvcmVzdGFydCIsbyx0LGMsZFswXSxkWzFdLDAsMCxwKSxmdW5jdGlvbigpe3JldHVybiBudWxsIT0oWXQuc3ViamVjdD1vPWEuYXBwbHkoaSxyKSkmJihzPW8ueC1kWzBdfHwwLGY9by55LWRbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIGEobCl7dmFyIG0seT1kO3N3aXRjaChsKXtjYXNlInN0YXJ0Ijp1W3RdPWEsbT1jKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSB1W3RdLC0tYztjYXNlImRyYWciOmQ9bihlLHQpLG09Y30kdChuZXcgX2UoaCxsLG8sdCxtLGRbMF0rcyxkWzFdK2YsZFswXS15WzBdLGRbMV0teVsxXSxwKSxwLmFwcGx5LHAsW2wsaSxyXSl9fXJldHVybiBoLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJlKCEhdCksaCk6cn0saC5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiZSh0KSxoKTpvfSxoLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiZSh0KSxoKTphfSxoLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJlKCEhdCksaCk6c30saC5vbj1mdW5jdGlvbigpe3ZhciB0PWwub24uYXBwbHkobCxhcmd1bWVudHMpO3JldHVybiB0PT09bD9oOnR9LGguY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0odD0rdCkqdCxoKTpNYXRoLnNxcnQoZil9LGh9LE9lPWZ1bmN0aW9uKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH07ZnVuY3Rpb24ga2UodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIGkgaW4gZSluW2ldPWVbaV07cmV0dXJuIG59ZnVuY3Rpb24gVGUoKXt9dmFyIGplPSJcXHMqKFsrLV0/XFxkKylcXHMqIixBZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixJZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsUmU9L14jKFswLTlhLWZdezN9KSQvLE1lPS9eIyhbMC05YS1mXXs2fSkkLyxQZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbamUsamUsamVdKyJcXCkkIiksRGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0llLEllLEllXSsiXFwpJCIpLE5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbamUsamUsamUsQWVdKyJcXCkkIiksRmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tJZSxJZSxJZSxBZV0rIlxcKSQiKSxMZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQWUsSWUsSWVdKyJcXCkkIiksVmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tBZSxJZSxJZSxBZV0rIlxcKSQiKSx6ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBCZSh0KXt2YXIgZTtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9UmUuZXhlYyh0KSk/bmV3IFFlKChlPXBhcnNlSW50KGVbMV0sMTYpKT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOihlPU1lLmV4ZWModCkpP1VlKHBhcnNlSW50KGVbMV0sMTYpKTooZT1QZS5leGVjKHQpKT9uZXcgUWUoZVsxXSxlWzJdLGVbM10sMSk6KGU9RGUuZXhlYyh0KSk/bmV3IFFlKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPU5lLmV4ZWModCkpP0hlKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPUZlLmV4ZWModCkpP0hlKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPUxlLmV4ZWModCkpP1dlKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9VmUuZXhlYyh0KSk/V2UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTp6ZS5oYXNPd25Qcm9wZXJ0eSh0KT9VZSh6ZVt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IFFlKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gVWUodCl7cmV0dXJuIG5ldyBRZSh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gSGUodCxlLG4saSl7cmV0dXJuIGk8PTAmJih0PWU9bj1OYU4pLG5ldyBRZSh0LGUsbixpKX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFRlfHwodD1CZSh0KSksdD9uZXcgUWUoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IFFlfWZ1bmN0aW9uIEdlKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9xZSh0KTpuZXcgUWUodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIFFlKHQsZSxuLGkpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBZZSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFdlKHQsZSxuLGkpe3JldHVybiBpPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgS2UodCxlLG4saSl9ZnVuY3Rpb24gWmUodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBLZSlyZXR1cm4gbmV3IEtlKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIFRlfHwodD1CZSh0KSksIXQpcmV0dXJuIG5ldyBLZTtpZih0IGluc3RhbmNlb2YgS2UpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LGk9dC5iLzI1NSxyPU1hdGgubWluKGUsbixpKSxvPU1hdGgubWF4KGUsbixpKSxhPU5hTixzPW8tcix1PShvK3IpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4taSkvcys2KihuPGkpOm49PT1vPyhpLWUpL3MrMjooZS1uKS9zKzQscy89dTwuNT9vK3I6Mi1vLXIsYSo9NjApOnM9dT4wJiZ1PDE/MDphLG5ldyBLZShhLHMsdSx0Lm9wYWNpdHkpfSh0KTpuZXcgS2UodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIEtlKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBYZSh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9T2UoVGUsQmUse2Rpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuaGV4KCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksT2UoUWUsR2Usa2UoVGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBRZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgUWUodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4iIyIrWWUodGhpcy5yKStZZSh0aGlzLmcpK1llKHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLE9lKEtlLFplLGtlKFRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgS2UodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgS2UodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwsaT1uKyhuPC41P246MS1uKSplLHI9MipuLWk7cmV0dXJuIG5ldyBRZShYZSh0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSxYZSh0LHIsaSksWGUodDwxMjA/dCsyNDA6dC0xMjAscixpKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyICRlPU1hdGguUEkvMTgwLEplPTE4MC9NYXRoLlBJLHRuPS45NjQyMixlbj0xLG5uPS44MjUyMSxybj00LzI5LG9uPTYvMjksYW49Mypvbipvbixzbj1vbipvbipvbjtmdW5jdGlvbiB1bih0KXtpZih0IGluc3RhbmNlb2YgZm4pcmV0dXJuIG5ldyBmbih0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBibil7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IGZuKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqJGU7cmV0dXJuIG5ldyBmbih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBRZXx8KHQ9cWUodCkpO3ZhciBuLGkscj1tbih0LnIpLG89bW4odC5nKSxhPW1uKHQuYikscz1obigoLjIyMjUwNDUqcisuNzE2ODc4NipvKy4wNjA2MTY5KmEpL2VuKTtyZXR1cm4gcj09PW8mJm89PT1hP249aT1zOihuPWhuKCguNDM2MDc0NypyKy4zODUwNjQ5Km8rLjE0MzA4MDQqYSkvdG4pLGk9aG4oKC4wMTM5MzIyKnIrLjA5NzEwNDUqbysuNzE0MTczMyphKS9ubikpLG5ldyBmbigxMTYqcy0xNiw1MDAqKG4tcyksMjAwKihzLWkpLHQub3BhY2l0eSl9ZnVuY3Rpb24gbG4odCxlKXtyZXR1cm4gbmV3IGZuKHQsMCwwLG51bGw9PWU/MTplKX1mdW5jdGlvbiBjbih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dW4odCk6bmV3IGZuKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBmbih0LGUsbixpKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIHQ+c24/TWF0aC5wb3codCwxLzMpOnQvYW4rcm59ZnVuY3Rpb24gZG4odCl7cmV0dXJuIHQ+b24/dCp0KnQ6YW4qKHQtcm4pfWZ1bmN0aW9uIHBuKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gbW4odCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24geW4odCl7aWYodCBpbnN0YW5jZW9mIGJuKXJldHVybiBuZXcgYm4odC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZm58fCh0PXVuKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgYm4oTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpKZTtyZXR1cm4gbmV3IGJuKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHZuKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD95bih0KTpuZXcgYm4obixlLHQsbnVsbD09aT8xOmkpfWZ1bmN0aW9uIGduKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD95bih0KTpuZXcgYm4odCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIGJuKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1PZShmbixjbixrZShUZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmbih0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZuKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxuPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBRZShwbigzLjEzMzg1NjEqKGU9dG4qZG4oZSkpLTEuNjE2ODY2NyoodD1lbipkbih0KSktLjQ5MDYxNDYqKG49bm4qZG4obikpKSxwbigtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLHBuKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksT2UoYm4sZ24sa2UoVGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4odGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB1bih0aGlzKS5yZ2IoKX19KSk7dmFyIF9uPS0uMjkyMjcsd249LS45MDY0OSx4bj0xLjk3Mjk0LENuPXhuKnduLFNuPTEuNzgyNzcqeG4sRW49MS43ODI3Nypfbi0gLS4xNDg2MSp3bjtmdW5jdGlvbiBPbih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIGtuKXJldHVybiBuZXcga24odC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgUWV8fCh0PXFlKHQpKTt2YXIgZT10LmcvMjU1LG49dC5iLzI1NSxpPShFbipuK0NuKih0LnIvMjU1KS1TbiplKS8oRW4rQ24tU24pLHI9bi1pLG89KHhuKihlLWkpLV9uKnIpL3duLGE9TWF0aC5zcXJ0KG8qbytyKnIpLyh4bippKigxLWkpKSxzPWE/TWF0aC5hdGFuMihvLHIpKkplLTEyMDpOYU47cmV0dXJuIG5ldyBrbihzPDA/cyszNjA6cyxhLGksdC5vcGFjaXR5KX0odCk6bmV3IGtuKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBrbih0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gVG4odCxlLG4saSxyKXt2YXIgbz10KnQsYT1vKnQ7cmV0dXJuKCgxLTMqdCszKm8tYSkqZSsoNC02Km8rMyphKSpuKygxKzMqdCszKm8tMyphKSppK2EqcikvNn1PZShrbixPbixrZShUZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IGtuKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IGtuKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSokZSxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgUWUoMjU1KihlK24qKC0uMTQ4NjEqaSsxLjc4Mjc3KnIpKSwyNTUqKGUrbiooX24qaSt3bipyKSksMjU1KihlK24qKHhuKmkpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgam49ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLHI9dFtpXSxvPXRbaSsxXTtyZXR1cm4gVG4oKG4taS9lKSplLGk+MD90W2ktMV06MipyLW8scixvLGk8ZS0xP3RbaSsyXToyKm8tcil9fSxBbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpO3JldHVybiBUbigobi1pL2UpKmUsdFsoaStlLTEpJWVdLHRbaSVlXSx0WyhpKzEpJWVdLHRbKGkrMiklZV0pfX0sSW49ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBSbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fWZ1bmN0aW9uIE1uKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1JuKHQsbj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKTpJbihpc05hTih0KT9lOnQpfWZ1bmN0aW9uIFBuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP1JuKHQsbik6SW4oaXNOYU4odCk/ZTp0KX12YXIgRG49ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP1BuOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3codCtpKmUsbil9fShlLG4sdCk6SW4oaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIGkodCxlKXt2YXIgaT1uKCh0PUdlKHQpKS5yLChlPUdlKGUpKS5yKSxyPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9UG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9cihlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIE5uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixpLHI9ZS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKWk9R2UoZVtuXSksb1tuXT1pLnJ8fDAsYVtuXT1pLmd8fDAsc1tuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxhPXQoYSkscz10KHMpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9YSh0KSxpLmI9cyh0KSxpKyIifX19dmFyIEZuLExuLFZuLHpuLEJuPU5uKGpuKSxVbj1ObihBbiksSG49ZnVuY3Rpb24odCxlKXt2YXIgbixpPWU/ZS5sZW5ndGg6MCxyPXQ/TWF0aC5taW4oaSx0Lmxlbmd0aCk6MCxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShpKTtmb3Iobj0wO248cjsrK24pb1tuXT1Lbih0W25dLGVbbl0pO2Zvcig7bjxpOysrbilhW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuPTA7bjxyOysrbilhW25dPW9bbl0odCk7cmV0dXJuIGF9fSxxbj1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBuLnNldFRpbWUodCtlKmkpLG59fSxHbj1mdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn19LFFuPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT17fSxyPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/aVtuXT1Lbih0W25dLGVbbl0pOnJbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gaSlyW25dPWlbbl0odCk7cmV0dXJuIHJ9fSxZbj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csV249bmV3IFJlZ0V4cChZbi5zb3VyY2UsImciKSxabj1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixvPVluLmxhc3RJbmRleD1Xbi5sYXN0SW5kZXg9MCxhPS0xLHM9W10sdT1bXTtmb3IodCs9IiIsZSs9IiI7KG49WW4uZXhlYyh0KSkmJihpPVduLmV4ZWMoZSkpOykocj1pLmluZGV4KT5vJiYocj1lLnNsaWNlKG8sciksc1thXT9zW2FdKz1yOnNbKythXT1yKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsdS5wdXNoKHtpOmEseDpHbihuLGkpfSkpLG89V24ubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYocj1lLnNsaWNlKG8pLHNbYV0/c1thXSs9cjpzWysrYV09cikscy5sZW5ndGg8Mj91WzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KHVbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT11Lmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0wO2k8ZTsrK2kpc1sobj11W2ldKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX0sS249ZnVuY3Rpb24odCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP0luKGUpOigibnVtYmVyIj09PWk/R246InN0cmluZyI9PT1pPyhuPUJlKGUpKT8oZT1uLERuKTpabjplIGluc3RhbmNlb2YgQmU/RG46ZSBpbnN0YW5jZW9mIERhdGU/cW46QXJyYXkuaXNBcnJheShlKT9IbjoiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/UW46R24pKHQsZSl9LFhuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCtlKm4pfX0sJG49MTgwL01hdGguUEksSm49e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX0sdGk9ZnVuY3Rpb24odCxlLG4saSxyLG8pe3ZhciBhLHMsdTtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89YSxlLz1hKSwodT10Km4rZSppKSYmKG4tPXQqdSxpLT1lKnUpLChzPU1hdGguc3FydChuKm4raSppKSkmJihuLz1zLGkvPXMsdS89cyksdCppPGUqbiYmKHQ9LXQsZT0tZSx1PS11LGE9LWEpLHt0cmFuc2xhdGVYOnIsdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqJG4sc2tld1g6TWF0aC5hdGFuKHUpKiRuLHNjYWxlWDphLHNjYWxlWTpzfX07ZnVuY3Rpb24gZWkodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sdT1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSxmdW5jdGlvbih0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgdT1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTp1LTQseDpHbih0LHIpfSx7aTp1LTIseDpHbihpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0oby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsdSksZnVuY3Rpb24odCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2gocihuKSsicm90YXRlKCIsbnVsbCxpKS0yLHg6R24odCxlKX0pKTplJiZuLnB1c2gocihuKSsicm90YXRlKCIrZStpKX0oby5yb3RhdGUsYS5yb3RhdGUscyx1KSxmdW5jdGlvbih0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKHIobikrInNrZXdYKCIsbnVsbCxpKS0yLHg6R24odCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KG8uc2tld1gsYS5za2V3WCxzLHUpLGZ1bmN0aW9uKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6R24odCxuKX0se2k6cy0yLHg6R24oZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KG8uc2NhbGVYLG8uc2NhbGVZLGEuc2NhbGVYLGEuc2NhbGVZLHMsdSksbz1hPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEsaT11Lmxlbmd0aDsrK248aTspc1soZT11W25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgbmk9ZWkoZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9KbjooRm58fChGbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxMbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsVm49ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLEZuLnN0eWxlLnRyYW5zZm9ybT10LHQ9Vm4uZ2V0Q29tcHV0ZWRTdHlsZShMbi5hcHBlbmRDaGlsZChGbiksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksTG4ucmVtb3ZlQ2hpbGQoRm4pLHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHRpKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLGlpPWVpKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P0puOih6bnx8KHpuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHpuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD16bi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT90aSgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpKbil9LCIsICIsIikiLCIpIikscmk9TWF0aC5TUVJUMjtmdW5jdGlvbiBvaSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn12YXIgYWk9ZnVuY3Rpb24odCxlKXt2YXIgbixpLHI9dFswXSxvPXRbMV0sYT10WzJdLHM9ZVsyXSx1PWVbMF0tcixsPWVbMV0tbyxjPXUqdStsKmw7aWYoYzwxZS0xMilpPU1hdGgubG9nKHMvYSkvcmksbj1mdW5jdGlvbih0KXtyZXR1cm5bcit0KnUsbyt0KmwsYSpNYXRoLmV4cChyaSp0KmkpXX07ZWxzZXt2YXIgZj1NYXRoLnNxcnQoYyksaD0ocypzLWEqYSs0KmMpLygyKmEqMipmKSxkPShzKnMtYSphLTQqYykvKDIqcyoyKmYpLHA9TWF0aC5sb2coTWF0aC5zcXJ0KGgqaCsxKS1oKSxtPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCk7aT0obS1wKS9yaSxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCppLHM9b2kocCksYz1hLygyKmYpKihzKihlPXJpKm4rcCwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShwKSk7cmV0dXJuW3IrYyp1LG8rYypsLGEqcy9vaShyaSpuK3ApXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKmksbn07ZnVuY3Rpb24gc2kodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dCgoZT1aZShlKSkuaCwobj1aZShuKSkuaCkscj1QbihlLnMsbi5zKSxvPVBuKGUubCxuLmwpLGE9UG4oZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9cih0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19dmFyIHVpPXNpKE1uKSxsaT1zaShQbik7ZnVuY3Rpb24gY2kodCxlKXt2YXIgbj1QbigodD1jbih0KSkubCwoZT1jbihlKSkubCksaT1Qbih0LmEsZS5hKSxyPVBuKHQuYixlLmIpLG89UG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9aShlKSx0LmI9cihlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT10KChlPWduKGUpKS5oLChuPWduKG4pKS5oKSxyPVBuKGUuYyxuLmMpLG89UG4oZS5sLG4ubCksYT1QbihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUuYz1yKHQpLGUubD1vKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fX12YXIgaGk9ZmkoTW4pLGRpPWZpKFBuKTtmdW5jdGlvbiBwaSh0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtmdW5jdGlvbiBpKGUsaSl7dmFyIHI9dCgoZT1PbihlKSkuaCwoaT1PbihpKSkuaCksbz1QbihlLnMsaS5zKSxhPVBuKGUubCxpLmwpLHM9UG4oZS5vcGFjaXR5LGkub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9byh0KSxlLmw9YShNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixpLmdhbW1hPWUsaX0oMSl9dmFyIG1pPXBpKE1uKSx5aT1waShQbik7ZnVuY3Rpb24gdmkodCxlKXtmb3IodmFyIG49MCxpPWUubGVuZ3RoLTEscj1lWzBdLG89bmV3IEFycmF5KGk8MD8wOmkpO248aTspb1tuXT10KHIscj1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGktMSxNYXRoLmZsb29yKHQqPWkpKSk7cmV0dXJuIG9bZV0odC1lKX19dmFyIGdpLGJpLF9pPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPXQoaS8oZS0xKSk7cmV0dXJuIG59LHdpPTAseGk9MCxDaT0wLFNpPTFlMyxFaT0wLE9pPTAsa2k9MCxUaT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxqaT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBBaSgpe3JldHVybiBPaXx8KGppKElpKSxPaT1UaS5ub3coKStraSl9ZnVuY3Rpb24gSWkoKXtPaT0wfWZ1bmN0aW9uIFJpKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBNaSh0LGUsbil7dmFyIGk9bmV3IFJpO3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gUGkoKXtBaSgpLCsrd2k7Zm9yKHZhciB0LGU9Z2k7ZTspKHQ9T2ktZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXdpfWZ1bmN0aW9uIERpKCl7T2k9KEVpPVRpLm5vdygpKStraSx3aT14aT0wO3RyeXtQaSgpfWZpbmFsbHl7d2k9MCxmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG49Z2ksaT0xLzA7bjspbi5fY2FsbD8oaT5uLl90aW1lJiYoaT1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOmdpPWUpO2JpPXQsRmkoaSl9KCksT2k9MH19ZnVuY3Rpb24gTmkoKXt2YXIgdD1UaS5ub3coKSxlPXQtRWk7ZT5TaSYmKGtpLT1lLEVpPXQpfWZ1bmN0aW9uIEZpKHQpe3dpfHwoeGkmJih4aT1jbGVhclRpbWVvdXQoeGkpKSx0LU9pPjI0Pyh0PDEvMCYmKHhpPXNldFRpbWVvdXQoRGksdC1UaS5ub3coKS1raSkpLENpJiYoQ2k9Y2xlYXJJbnRlcnZhbChDaSkpKTooQ2l8fChFaT1UaS5ub3coKSxDaT1zZXRJbnRlcnZhbChOaSxTaSkpLHdpPTEsamkoRGkpKSl9UmkucHJvdG90eXBlPU1pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UmkscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP0FpKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fGJpPT09dGhpc3x8KGJpP2JpLl9uZXh0PXRoaXM6Z2k9dGhpcyxiaT10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLEZpKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEZpKCkpfX07dmFyIExpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uZXcgUmk7cmV0dXJuIGkucmVzdGFydChmdW5jdGlvbihuKXtpLnN0b3AoKSx0KG4rZSl9LGU9bnVsbD09ZT8wOitlLG4pLGl9LFZpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uZXcgUmkscj1lO3JldHVybiBudWxsPT1lPyhpLnJlc3RhcnQodCxlLG4pLGkpOihlPStlLG49bnVsbD09bj9BaSgpOituLGkucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPXIsaS5yZXN0YXJ0KG8scis9ZSxuKSx0KGEpfSxlLG4pLGkpfSx6aT1odCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxCaT1bXSxVaT0wLEhpPTEscWk9MixHaT0zLFFpPTQsWWk9NSxXaT02LFppPWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihuIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8odSl7dmFyIGwsYyxmLGg7aWYobi5zdGF0ZSE9PUhpKXJldHVybiBzKCk7Zm9yKGwgaW4gcilpZigoaD1yW2xdKS5uYW1lPT09bi5uYW1lKXtpZihoLnN0YXRlPT09R2kpcmV0dXJuIExpKG8pO2guc3RhdGU9PT1RaT8oaC5zdGF0ZT1XaSxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIHJbbF0pOitsPGUmJihoLnN0YXRlPVdpLGgudGltZXIuc3RvcCgpLGRlbGV0ZSByW2xdKX1pZihMaShmdW5jdGlvbigpe24uc3RhdGU9PT1HaSYmKG4uc3RhdGU9UWksbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEodSkpfSksbi5zdGF0ZT1xaSxuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxuLnN0YXRlPT09cWkpe2ZvcihuLnN0YXRlPUdpLGk9bmV3IEFycmF5KGY9bi50d2Vlbi5sZW5ndGgpLGw9MCxjPS0xO2w8ZjsrK2wpKGg9bi50d2VlbltsXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKGlbKytjXT1oKTtpLmxlbmd0aD1jKzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciByPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPVlpLDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKG51bGwscik7bi5zdGF0ZT09PVlpJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgaSBpbiBuLnN0YXRlPVdpLG4udGltZXIuc3RvcCgpLGRlbGV0ZSByW2VdLHIpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1yW2VdPW4sbi50aW1lcj1NaShmdW5jdGlvbih0KXtuLnN0YXRlPUhpLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9LDAsbi50aW1lKX0odCxuLHtuYW1lOmUsaW5kZXg6aSxncm91cDpyLG9uOnppLHR3ZWVuOkJpLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOlVpfSl9O2Z1bmN0aW9uIEtpKHQsZSl7dmFyIG49JGkodCxlKTtpZihuLnN0YXRlPlVpKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gWGkodCxlKXt2YXIgbj0kaSh0LGUpO2lmKG4uc3RhdGU+cWkpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gJGkodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn12YXIgSmk9ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihyIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW3JdKS5uYW1lPT09ZT8oaT1uLnN0YXRlPnFpJiZuLnN0YXRlPFlpLG4uc3RhdGU9V2ksbi50aW1lci5zdG9wKCksaSYmbi5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBvW3JdKTphPSExO2EmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19O2Z1bmN0aW9uIHRyKHQsZSxuKXt2YXIgaT10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9WGkodGhpcyxpKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiAkaSh0LGkpLnZhbHVlW2VdfX12YXIgZXI9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP0duOmUgaW5zdGFuY2VvZiBCZT9Ebjoobj1CZShlKSk/KGU9bixEbik6Wm4pKHQsZSl9LG5yPWllLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcixpcj0wO2Z1bmN0aW9uIHJyKHQsZSxuLGkpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9aX1mdW5jdGlvbiBvcih0KXtyZXR1cm4gaWUoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIGFyKCl7cmV0dXJuKytpcn12YXIgc3I9aWUucHJvdG90eXBlO2Z1bmN0aW9uIHVyKHQpe3JldHVybit0fWZ1bmN0aW9uIGxyKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gY3IodCl7cmV0dXJuIHQqKDItdCl9ZnVuY3Rpb24gZnIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gaHIodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIGRyKHQpe3JldHVybi0tdCp0KnQrMX1mdW5jdGlvbiBwcih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1yci5wcm90b3R5cGU9b3IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpycixzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWZvcih2YXIgcyx1LGw9aVthXSxjPWwubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkoYyksaD0wO2g8YzsrK2gpKHM9bFtoXSkmJih1PXQuY2FsbChzLHMuX19kYXRhX18saCxsKSkmJigiX19kYXRhX18iaW4gcyYmKHUuX19kYXRhX189cy5fX2RhdGFfXyksZltoXT11LFppKGZbaF0sZSxuLGgsZiwkaShzLG4pKSk7cmV0dXJuIG5ldyBycihvLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9X3QodCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8cjsrK3MpZm9yKHZhciB1LGw9aVtzXSxjPWwubGVuZ3RoLGY9MDtmPGM7KytmKWlmKHU9bFtmXSl7Zm9yKHZhciBoLGQ9dC5jYWxsKHUsdS5fX2RhdGFfXyxmLGwpLHA9JGkodSxuKSxtPTAseT1kLmxlbmd0aDttPHk7KyttKShoPWRbbV0pJiZaaShoLGUsbixtLGQscCk7by5wdXNoKGQpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHJyKG8sYSxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVN0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGE9ZVtyXSxzPWEubGVuZ3RoLHU9aVtyXT1bXSxsPTA7bDxzOysrbCkobz1hW2xdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxsLGEpJiZ1LnB1c2gobyk7cmV0dXJuIG5ldyBycihpLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyx1PWVbYV0sbD1uW2FdLGM9dS5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxoPTA7aDxjOysraCkocz11W2hdfHxsW2hdKSYmKGZbaF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IHJyKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBucih0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49YXIoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sdT1zLmxlbmd0aCxsPTA7bDx1OysrbClpZihhPXNbbF0pe3ZhciBjPSRpKGEsZSk7WmkoYSx0LG4sbCxzLHt0aW1lOmMudGltZStjLmRlbGF5K2MuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpjLmR1cmF0aW9uLGVhc2U6Yy5lYXNlfSl9cmV0dXJuIG5ldyBycihpLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpzci5jYWxsLG5vZGVzOnNyLm5vZGVzLG5vZGU6c3Iubm9kZSxzaXplOnNyLnNpemUsZW1wdHk6c3IuZW1wdHksZWFjaDpzci5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj8kaSh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbz1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pfShlKT9LaTpYaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX0obix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPW10KHQpLGk9InRyYW5zZm9ybSI9PT1uP2lpOmVyO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP2Z1bmN0aW9uKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXM/bnVsbDphPT09aSYmcz09PXI/bzpvPWUoaT1hLHI9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT1zP251bGw6YT09PWkmJnM9PT1yP286bz1lKGk9YSxyPXMpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKG4saSx0cih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShuKToobi5sb2NhbD9mdW5jdGlvbih0LGUsbil7dmFyIGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX06ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX0pKG4saSxlKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9bXQodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoaS5sb2NhbD9mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLGk9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGkoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLGk9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlKHQsaShlKSl9fXJldHVybiBuLl92YWx1ZT1lLG59KShpLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP25pOmVyO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVJ0KHRoaXMsdCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxSdCh0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09biYmYT09PWk/cjpyPWUobj1vLGk9YSl9fSh0LGkpKS5vbigiZW5kLnN0eWxlLiIrdCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX0odCkpOnRoaXMuc3R5bGVUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSxuKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9UnQodGhpcyx0KSxzPW4odGhpcyk7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHM9UnQodGhpcyx0KSksYT09PXM/bnVsbDphPT09aSYmcz09PXI/bzpvPWUoaT1hLHI9cyl9fSh0LGksdHIodGhpcywic3R5bGUuIit0LGUpKTpmdW5jdGlvbih0LGUsbil7dmFyIGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1SdCh0aGlzLHQpO3JldHVybiBvPT09bj9udWxsOm89PT1pP3I6cj1lKGk9byxuKX19KHQsaSxlKyIiKSxuKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIGk9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gaSgpe3ZhciBpPXRoaXMscj1lLmFwcGx5KGksYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24oZSl7aS5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIoZSksbil9fXJldHVybiBpLl92YWx1ZT1lLGl9KHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KHRyKHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGkscj0kaSh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1yLmxlbmd0aDtvPGE7KytvKWlmKChpPXJbb10pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCxlKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPVhpKHRoaXMsdCksbz1yLnR3ZWVuO2lmKG8hPT1uKWZvcih2YXIgYT0wLHM9KGk9bj1vKS5sZW5ndGg7YTxzOysrYSlpZihpW2FdLm5hbWU9PT1lKXsoaT1pLnNsaWNlKCkpLnNwbGljZShhLDEpO2JyZWFrfXIudHdlZW49aX19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1YaSh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09aSl7cj0oaT1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LHU9MCxsPXIubGVuZ3RoO3U8bDsrK3UpaWYoclt1XS5uYW1lPT09ZSl7clt1XT1zO2JyZWFrfXU9PT1sJiZyLnB1c2gocyl9by50d2Vlbj1yfX0pKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtLaSh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtLaSh0aGlzLHQpLmRlbGF5PWV9fSkoZSx0KSk6JGkodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtYaSh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtYaSh0aGlzLHQpLmR1cmF0aW9uPWV9fSkoZSx0KSk6JGkodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe1hpKHRoaXMsdCkuZWFzZT1lfX0oZSx0KSk6JGkodGhpcy5ub2RlKCksZSkuZWFzZX19O3ZhciBtcj1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLHlyPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLHZyPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLGdyPU1hdGguUEksYnI9Z3IvMjtmdW5jdGlvbiBfcih0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KmJyKX1mdW5jdGlvbiB3cih0KXtyZXR1cm4gTWF0aC5zaW4odCpicil9ZnVuY3Rpb24geHIodCl7cmV0dXJuKDEtTWF0aC5jb3MoZ3IqdCkpLzJ9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9ZnVuY3Rpb24gU3IodCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9ZnVuY3Rpb24gRXIodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiBPcih0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIGtyKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uIFRyKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfXZhciBqcj00LzExLEFyPTYvMTEsSXI9OC8xMSxScj0uNzUsTXI9OS8xMSxQcj0xMC8xMSxEcj0uOTM3NSxOcj0yMS8yMixGcj02My82NCxMcj0xL2pyL2pyO2Z1bmN0aW9uIFZyKHQpe3JldHVybiAxLXpyKDEtdCl9ZnVuY3Rpb24genIodCl7cmV0dXJuKHQ9K3QpPGpyP0xyKnQqdDp0PElyP0xyKih0LT1BcikqdCtScjp0PFByP0xyKih0LT1NcikqdCtEcjpMcioodC09TnIpKnQrRnJ9ZnVuY3Rpb24gQnIodCl7cmV0dXJuKCh0Kj0yKTw9MT8xLXpyKDEtdCk6enIodC0xKSsxKS8yfXZhciBVcj1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLEhyPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKGUrMSkqdCtlKSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCkscXI9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8MT90KnQqKChlKzEpKnQtZSk6KHQtPTIpKnQqKChlKzEpKnQrZSkrMikvMn1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLEdyPTIqTWF0aC5QSSxRcj1mdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1Hcik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZSpNYXRoLnBvdygyLDEwKi0tdCkqTWF0aC5zaW4oKGktdCkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipHcil9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KDEsLjMpLFlyPWZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPUdyKTtmdW5jdGlvbiByKHQpe3JldHVybiAxLWUqTWF0aC5wb3coMiwtMTAqKHQ9K3QpKSpNYXRoLnNpbigodCtpKS9uKX1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKkdyKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0oMSwuMyksV3I9ZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89R3IpO2Z1bmN0aW9uIHIodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqTWF0aC5wb3coMiwxMCp0KSpNYXRoLnNpbigoaS10KS9uKToyLWUqTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKGkrdCkvbikpLzJ9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipHcil9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KDEsLjMpLFpyPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpwcn07ZnVuY3Rpb24gS3IodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gWnIudGltZT1BaSgpLFpyO3JldHVybiBufWllLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0ppKHRoaXMsdCl9KX0saWUucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgcnI/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1hcigpLChuPVpyKS50aW1lPUFpKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sdT1zLmxlbmd0aCxsPTA7bDx1OysrbCkoYT1zW2xdKSYmWmkoYSx0LGUsbCxzLG58fEtyKGEsZSkpO3JldHVybiBuZXcgcnIoaSx0aGlzLl9wYXJlbnRzLHQsZSl9O3ZhciBYcj1bbnVsbF0sJHI9ZnVuY3Rpb24odCxlKXt2YXIgbixpLHI9dC5fX3RyYW5zaXRpb247aWYocilmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLHIpaWYoKG49cltpXSkuc3RhdGU+SGkmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBycihbW3RdXSxYcixlLCtpKTtyZXR1cm4gbnVsbH0sSnI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSx0bz1mdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlbGVjdGlvbj1ufTtmdW5jdGlvbiBlbygpe1l0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBubz1mdW5jdGlvbigpe1l0LnByZXZlbnREZWZhdWx0KCksWXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGlvPXtuYW1lOiJkcmFnIn0scm89e25hbWU6InNwYWNlIn0sb289e25hbWU6ImhhbmRsZSJ9LGFvPXtuYW1lOiJjZW50ZXIifSxzbz17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKHlvKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0JiZbW3RbMF0sZVswXVsxXV0sW3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sdW89e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcCh5byksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmW1tlWzBdWzBdLHRbMF1dLFtlWzFdWzBdLHRbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGxvPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLm1hcCh5byksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LGNvPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxmbz17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0saG89e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LHBvPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LG1vPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9O2Z1bmN0aW9uIHlvKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIHZvKCl7cmV0dXJuIVl0LmJ1dHRvbn1mdW5jdGlvbiBnbygpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBibyh0KXtmb3IoOyF0Ll9fYnJ1c2g7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdC5fX2JydXNofWZ1bmN0aW9uIF9vKHQpe3JldHVybiB0WzBdWzBdPT09dFsxXVswXXx8dFswXVsxXT09PXRbMV1bMV19ZnVuY3Rpb24gd28odCl7dmFyIGU9dC5fX2JydXNoO3JldHVybiBlP2UuZGltLm91dHB1dChlLnNlbGVjdGlvbik6bnVsbH1mdW5jdGlvbiB4bygpe3JldHVybiBFbyhzbyl9ZnVuY3Rpb24gQ28oKXtyZXR1cm4gRW8odW8pfXZhciBTbz1mdW5jdGlvbigpe3JldHVybiBFbyhsbyl9O2Z1bmN0aW9uIEVvKHQpe3ZhciBlLG49Z28saT12byxyPWh0KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxvPTY7ZnVuY3Rpb24gYShlKXt2YXIgbj1lLnByb3BlcnR5KCJfX2JydXNoIixmKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbeW8oIm92ZXJsYXkiKV0pO24uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsY28ub3ZlcmxheSkubWVyZ2UobikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWJvKHRoaXMpLmV4dGVudDtyZSh0aGlzKS5hdHRyKCJ4Iix0WzBdWzBdKS5hdHRyKCJ5Iix0WzBdWzFdKS5hdHRyKCJ3aWR0aCIsdFsxXVswXS10WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHRbMV1bMV0tdFswXVsxXSl9KSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW3lvKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGNvLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciBpPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4gY29bdC50eXBlXX0pLGUuZWFjaChzKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2giLGMpfWZ1bmN0aW9uIHMoKXt2YXIgdD1yZSh0aGlzKSxlPWJvKHRoaXMpLnNlbGVjdGlvbjtlPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixlWzBdWzBdKS5hdHRyKCJ5IixlWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZVsxXVswXS1lWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGVbMV1bMV0tZVswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlW3QudHlwZS5sZW5ndGgtMV0/ZVsxXVswXS1vLzI6ZVswXVswXS1vLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/ZVsxXVsxXS1vLzI6ZVswXVsxXS1vLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK286b30pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlfHwidyI9PT10LnR5cGU/ZVsxXVsxXS1lWzBdWzFdK286b30pKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0Ll9fYnJ1c2guZW1pdHRlcnx8bmV3IGwodCxlKX1mdW5jdGlvbiBsKHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MH1mdW5jdGlvbiBjKCl7aWYoWXQudG91Y2hlcyl7aWYoWXQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPFl0LnRvdWNoZXMubGVuZ3RoKXJldHVybiBubygpfWVsc2UgaWYoZSlyZXR1cm47aWYoaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLHIsbyxhLGwsYyxmLGgsZCxwLG0seSx2LGc9dGhpcyxiPVl0LnRhcmdldC5fX2RhdGFfXy50eXBlLF89InNlbGVjdGlvbiI9PT0oWXQubWV0YUtleT9iPSJvdmVybGF5IjpiKT9pbzpZdC5hbHRLZXk/YW86b28sdz10PT09dW8/bnVsbDpwb1tiXSx4PXQ9PT1zbz9udWxsOm1vW2JdLEM9Ym8oZyksUz1DLmV4dGVudCxFPUMuc2VsZWN0aW9uLE89U1swXVswXSxrPVNbMF1bMV0sVD1TWzFdWzBdLGo9U1sxXVsxXSxBPXcmJngmJll0LnNoaWZ0S2V5LEk9ZmUoZyksUj1JLE09dShnLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT1iP0Muc2VsZWN0aW9uPUU9W1tuPXQ9PT11bz9POklbMF0sbz10PT09c28/azpJWzFdXSxbbD10PT09dW8/VDpuLGY9dD09PXNvP2o6b11dOihuPUVbMF1bMF0sbz1FWzBdWzFdLGw9RVsxXVswXSxmPUVbMV1bMV0pLHI9bixhPW8sYz1sLGg9Zjt2YXIgUD1yZShnKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxEPVAuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsY29bYl0pO2lmKFl0LnRvdWNoZXMpUC5vbigidG91Y2htb3ZlLmJydXNoIixGLCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLFYsITApO2Vsc2V7dmFyIE49cmUoWXQudmlldykub24oImtleWRvd24uYnJ1c2giLGZ1bmN0aW9uKCl7c3dpdGNoKFl0LmtleUNvZGUpe2Nhc2UgMTY6QT13JiZ4O2JyZWFrO2Nhc2UgMTg6Xz09PW9vJiYodyYmKGw9Yy1kKncsbj1yK2QqdykseCYmKGY9aC1wKngsbz1hK3AqeCksXz1hbyxMKCkpO2JyZWFrO2Nhc2UgMzI6XyE9PW9vJiZfIT09YW98fCh3PDA/bD1jLWQ6dz4wJiYobj1yLWQpLHg8MD9mPWgtcDp4PjAmJihvPWEtcCksXz1ybyxELmF0dHIoImN1cnNvciIsY28uc2VsZWN0aW9uKSxMKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufW5vKCl9LCEwKS5vbigia2V5dXAuYnJ1c2giLGZ1bmN0aW9uKCl7c3dpdGNoKFl0LmtleUNvZGUpe2Nhc2UgMTY6QSYmKHk9dj1BPSExLEwoKSk7YnJlYWs7Y2FzZSAxODpfPT09YW8mJih3PDA/bD1jOnc+MCYmKG49cikseDwwP2Y9aDp4PjAmJihvPWEpLF89b28sTCgpKTticmVhaztjYXNlIDMyOl89PT1ybyYmKFl0LmFsdEtleT8odyYmKGw9Yy1kKncsbj1yK2QqdykseCYmKGY9aC1wKngsbz1hK3AqeCksXz1hbyk6KHc8MD9sPWM6dz4wJiYobj1yKSx4PDA/Zj1oOng+MCYmKG89YSksXz1vbyksRC5hdHRyKCJjdXJzb3IiLGNvW2JdKSxMKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufW5vKCl9LCEwKS5vbigibW91c2Vtb3ZlLmJydXNoIixGLCEwKS5vbigibW91c2V1cC5icnVzaCIsViwhMCk7dmUoWXQudmlldyl9ZW8oKSxKaShnKSxzLmNhbGwoZyksTS5zdGFydCgpfWZ1bmN0aW9uIEYoKXt2YXIgdD1mZShnKTshQXx8eXx8dnx8KE1hdGguYWJzKHRbMF0tUlswXSk+TWF0aC5hYnModFsxXS1SWzFdKT92PSEwOnk9ITApLFI9dCxtPSEwLG5vKCksTCgpfWZ1bmN0aW9uIEwoKXt2YXIgdDtzd2l0Y2goZD1SWzBdLUlbMF0scD1SWzFdLUlbMV0sXyl7Y2FzZSBybzpjYXNlIGlvOncmJihkPU1hdGgubWF4KE8tbixNYXRoLm1pbihULWwsZCkpLHI9bitkLGM9bCtkKSx4JiYocD1NYXRoLm1heChrLW8sTWF0aC5taW4oai1mLHApKSxhPW8rcCxoPWYrcCk7YnJlYWs7Y2FzZSBvbzp3PDA/KGQ9TWF0aC5tYXgoTy1uLE1hdGgubWluKFQtbixkKSkscj1uK2QsYz1sKTp3PjAmJihkPU1hdGgubWF4KE8tbCxNYXRoLm1pbihULWwsZCkpLHI9bixjPWwrZCkseDwwPyhwPU1hdGgubWF4KGstbyxNYXRoLm1pbihqLW8scCkpLGE9bytwLGg9Zik6eD4wJiYocD1NYXRoLm1heChrLWYsTWF0aC5taW4oai1mLHApKSxhPW8saD1mK3ApO2JyZWFrO2Nhc2UgYW86dyYmKHI9TWF0aC5tYXgoTyxNYXRoLm1pbihULG4tZCp3KSksYz1NYXRoLm1heChPLE1hdGgubWluKFQsbCtkKncpKSkseCYmKGE9TWF0aC5tYXgoayxNYXRoLm1pbihqLG8tcCp4KSksaD1NYXRoLm1heChrLE1hdGgubWluKGosZitwKngpKSl9YzxyJiYodyo9LTEsdD1uLG49bCxsPXQsdD1yLHI9YyxjPXQsYiBpbiBmbyYmRC5hdHRyKCJjdXJzb3IiLGNvW2I9Zm9bYl1dKSksaDxhJiYoeCo9LTEsdD1vLG89ZixmPXQsdD1hLGE9aCxoPXQsYiBpbiBobyYmRC5hdHRyKCJjdXJzb3IiLGNvW2I9aG9bYl1dKSksQy5zZWxlY3Rpb24mJihFPUMuc2VsZWN0aW9uKSx5JiYocj1FWzBdWzBdLGM9RVsxXVswXSksdiYmKGE9RVswXVsxXSxoPUVbMV1bMV0pLEVbMF1bMF09PT1yJiZFWzBdWzFdPT09YSYmRVsxXVswXT09PWMmJkVbMV1bMV09PT1ofHwoQy5zZWxlY3Rpb249W1tyLGFdLFtjLGhdXSxzLmNhbGwoZyksTS5icnVzaCgpKX1mdW5jdGlvbiBWKCl7aWYoZW8oKSxZdC50b3VjaGVzKXtpZihZdC50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dChmdW5jdGlvbigpe2U9bnVsbH0sNTAwKSxQLm9uKCJ0b3VjaG1vdmUuYnJ1c2ggdG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLG51bGwpfWVsc2UgZ2UoWXQudmlldyxtKSxOLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtQLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksRC5hdHRyKCJjdXJzb3IiLGNvLm92ZXJsYXkpLEMuc2VsZWN0aW9uJiYoRT1DLnNlbGVjdGlvbiksX28oRSkmJihDLnNlbGVjdGlvbj1udWxsLHMuY2FsbChnKSksTS5lbmQoKX19ZnVuY3Rpb24gZigpe3ZhciBlPXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gZS5leHRlbnQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5kaW09dCxlfXJldHVybiBhLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9ZS5fX2JydXNoLHI9dShlLGFyZ3VtZW50cyksbz1pLnNlbGVjdGlvbixhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixpLmV4dGVudCksbD1LbihvLGEpO2Z1bmN0aW9uIGModCl7aS5zZWxlY3Rpb249MT09PXQmJl9vKGEpP251bGw6bCh0KSxzLmNhbGwoZSksci5icnVzaCgpfXJldHVybiBvJiZhP2M6YygxKX0pOmUuZWFjaChmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxpPXRoaXMuX19icnVzaCxyPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGUpOm4saS5leHRlbnQpLG89dSh0aGlzLGUpLmJlZm9yZXN0YXJ0KCk7SmkodGhpcyksaS5zZWxlY3Rpb249bnVsbD09cnx8X28ocik/bnVsbDpyLHMuY2FsbCh0aGlzKSxvLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmcmJih0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKGUpeyR0KG5ldyB0byhhLGUsdC5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxyLmFwcGx5LHIsW2UsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sYS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKcihbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSksYSk6bn0sYS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKcighIXQpLGEpOml9LGEuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxhKTpvfSxhLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9ci5vbi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2E6dH0sYX12YXIgT289TWF0aC5jb3Msa289TWF0aC5zaW4sVG89TWF0aC5QSSxqbz1Uby8yLEFvPTIqVG8sSW89TWF0aC5tYXgsUm89ZnVuY3Rpb24oKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwsaT1udWxsO2Z1bmN0aW9uIHIocil7dmFyIG8sYSxzLHUsbCxjLGY9ci5sZW5ndGgsaD1bXSxkPXgoZikscD1bXSxtPVtdLHk9bS5ncm91cHM9bmV3IEFycmF5KGYpLHY9bmV3IEFycmF5KGYqZik7Zm9yKG89MCxsPS0xOysrbDxmOyl7Zm9yKGE9MCxjPS0xOysrYzxmOylhKz1yW2xdW2NdO2gucHVzaChhKSxwLnB1c2goeChmKSksbys9YX1mb3IoZSYmZC5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoaFt0XSxoW25dKX0pLG4mJnAuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Quc29ydChmdW5jdGlvbih0LGkpe3JldHVybiBuKHJbZV1bdF0scltlXVtpXSl9KX0pLHU9KG89SW8oMCxBby10KmYpL28pP3Q6QW8vZixhPTAsbD0tMTsrK2w8Zjspe2ZvcihzPWEsYz0tMTsrK2M8Zjspe3ZhciBnPWRbbF0sYj1wW2ddW2NdLF89cltnXVtiXSx3PWEsQz1hKz1fKm87dltiKmYrZ109e2luZGV4Omcsc3ViaW5kZXg6YixzdGFydEFuZ2xlOncsZW5kQW5nbGU6Qyx2YWx1ZTpffX15W2ddPXtpbmRleDpnLHN0YXJ0QW5nbGU6cyxlbmRBbmdsZTphLHZhbHVlOmhbZ119LGErPXV9Zm9yKGw9LTE7KytsPGY7KWZvcihjPWwtMTsrK2M8Zjspe3ZhciBTPXZbYypmK2xdLEU9dltsKmYrY107KFMudmFsdWV8fEUudmFsdWUpJiZtLnB1c2goUy52YWx1ZTxFLnZhbHVlP3tzb3VyY2U6RSx0YXJnZXQ6U306e3NvdXJjZTpTLHRhcmdldDpFfSl9cmV0dXJuIGk/bS5zb3J0KGkpOm19cmV0dXJuIHIucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9SW8oMCxlKSxyKTp0fSxyLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxyKTplfSxyLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxyKTpufSxyLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/aT1udWxsOihlPXQsaT1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX0pLl89dCxyKTppJiZpLl87dmFyIGV9LHJ9LE1vPUFycmF5LnByb3RvdHlwZS5zbGljZSxQbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LERvPU1hdGguUEksTm89MipEbyxGbz1Oby0xZS02O2Z1bmN0aW9uIExvKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gVm8oKXtyZXR1cm4gbmV3IExvfUxvLnByb3RvdHlwZT1Wby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxvLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStpKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtpKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLHU9KGk9K2kpLShlPStlKSxsPW8tdCxjPWEtZSxmPWwqbCtjKmM7aWYoKHI9K3IpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoZj4xZS02KWlmKE1hdGguYWJzKGMqcy11KmwpPjFlLTYmJnIpe3ZhciBoPW4tbyxkPWktYSxwPXMqcyt1KnUsbT1oKmgrZCpkLHk9TWF0aC5zcXJ0KHApLHY9TWF0aC5zcXJ0KGYpLGc9cipNYXRoLnRhbigoRG8tTWF0aC5hY29zKChwK2YtbSkvKDIqeSp2KSkpLzIpLGI9Zy92LF89Zy95O01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9IkwiKyh0K2IqbCkrIiwiKyhlK2IqYykpLHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDAsIisgKyhjKmg+bCpkKSsiLCIrKHRoaXMuX3gxPXQrXypzKSsiLCIrKHRoaXMuX3kxPWUrXyp1KX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4saSxyLG8pe3Q9K3QsZT0rZTt2YXIgYT0obj0rbikqTWF0aC5jb3MoaSkscz1uKk1hdGguc2luKGkpLHU9dCthLGw9ZStzLGM9MV5vLGY9bz9pLXI6ci1pO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrdSsiLCIrbDooTWF0aC5hYnModGhpcy5feDEtdSk+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtbCk+MWUtNikmJih0aGlzLl8rPSJMIit1KyIsIitsKSxuJiYoZjwwJiYoZj1mJU5vK05vKSxmPkZvP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitjKyIsIisodC1hKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitjKyIsIisodGhpcy5feDE9dSkrIiwiKyh0aGlzLl95MT1sKTpmPjFlLTYmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGY+PURvKSsiLCIrYysiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhyKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4ocikpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK2krImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHpvPVZvO2Z1bmN0aW9uIEJvKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBVbyh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gSG8odCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIHFvKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gR28odCl7cmV0dXJuIHQuZW5kQW5nbGV9dmFyIFFvPWZ1bmN0aW9uKCl7dmFyIHQ9Qm8sZT1VbyxuPUhvLGk9cW8scj1HbyxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHM9TW8uY2FsbChhcmd1bWVudHMpLHU9dC5hcHBseSh0aGlzLHMpLGw9ZS5hcHBseSh0aGlzLHMpLGM9K24uYXBwbHkodGhpcywoc1swXT11LHMpKSxmPWkuYXBwbHkodGhpcyxzKS1qbyxoPXIuYXBwbHkodGhpcyxzKS1qbyxkPWMqT28oZikscD1jKmtvKGYpLG09K24uYXBwbHkodGhpcywoc1swXT1sLHMpKSx5PWkuYXBwbHkodGhpcyxzKS1qbyx2PXIuYXBwbHkodGhpcyxzKS1qbztpZihvfHwobz1hPXpvKCkpLG8ubW92ZVRvKGQscCksby5hcmMoMCwwLGMsZixoKSxmPT09eSYmaD09PXZ8fChvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLG0qT28oeSksbSprbyh5KSksby5hcmMoMCwwLG0seSx2KSksby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxkLHApLG8uY2xvc2VQYXRoKCksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UG8oK3QpLGEpOm59LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlBvKCt0KSxhKTppfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UG8oK3QpLGEpOnJ9LGEuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX07ZnVuY3Rpb24gWW8oKXt9ZnVuY3Rpb24gV28odCxlKXt2YXIgbj1uZXcgWW87aWYodCBpbnN0YW5jZW9mIFlvKXQuZWFjaChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLHI9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPG87KW4uc2V0KHIsdFtyXSk7ZWxzZSBmb3IoOysrcjxvOyluLnNldChlKGk9dFtyXSxyLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufVlvLnByb3RvdHlwZT1Xby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllvLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBabz1XbyxLbz1mdW5jdGlvbigpe3ZhciB0LGUsbixpPVtdLHI9W107ZnVuY3Rpb24gbyhuLHIsYSxzKXtpZihyPj1pLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgdSxsLGMsZj0tMSxoPW4ubGVuZ3RoLGQ9aVtyKytdLHA9Wm8oKSxtPWEoKTsrK2Y8aDspKGM9cC5nZXQodT1kKGw9bltmXSkrIiIpKT9jLnB1c2gobCk6cC5zZXQodSxbbF0pO3JldHVybiBwLmVhY2goZnVuY3Rpb24odCxlKXtzKG0sZSxvKHQscixhLHMpKX0pLG19cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsWG8sJG8pfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLEpvLHRhKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChuLG8pe2lmKCsrbz5pLmxlbmd0aClyZXR1cm4gbjt2YXIgYSxzPXJbby0xXTtyZXR1cm4gbnVsbCE9ZSYmbz49aS5sZW5ndGg/YT1uLmVudHJpZXMoKTooYT1bXSxuLmVhY2goZnVuY3Rpb24oZSxuKXthLnB1c2goe2tleTpuLHZhbHVlczp0KGUsbyl9KX0pKSxudWxsIT1zP2Euc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBzKHQua2V5LGUua2V5KX0pOmF9KG8odCwwLEpvLHRhKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIHJbaS5sZW5ndGgtMV09dCxufSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsbn0scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsbn19fTtmdW5jdGlvbiBYbygpe3JldHVybnt9fWZ1bmN0aW9uICRvKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gSm8oKXtyZXR1cm4gWm8oKX1mdW5jdGlvbiB0YSh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBlYSgpe312YXIgbmE9Wm8ucHJvdG90eXBlO2Z1bmN0aW9uIGlhKHQsZSl7dmFyIG49bmV3IGVhO2lmKHQgaW5zdGFuY2VvZiBlYSl0LmVhY2goZnVuY3Rpb24odCl7bi5hZGQodCl9KTtlbHNlIGlmKHQpe3ZhciBpPS0xLHI9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxyOyluLmFkZCh0W2ldKTtlbHNlIGZvcig7KytpPHI7KW4uYWRkKGUodFtpXSxpLHQpKX1yZXR1cm4gbn1lYS5wcm90b3R5cGU9aWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplYSxoYXM6bmEuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6bmEucmVtb3ZlLGNsZWFyOm5hLmNsZWFyLHZhbHVlczpuYS5rZXlzLHNpemU6bmEuc2l6ZSxlbXB0eTpuYS5lbXB0eSxlYWNoOm5hLmVhY2h9O3ZhciByYT1pYSxvYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9LGFhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh0W25dKTtyZXR1cm4gZX0sc2E9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LHVhPUFycmF5LnByb3RvdHlwZS5zbGljZSxsYT1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LGNhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGgsaT10W24tMV1bMV0qdFswXVswXS10W24tMV1bMF0qdFswXVsxXTsrK2U8bjspaSs9dFtlLTFdWzFdKnRbZV1bMF0tdFtlLTFdWzBdKnRbZV1bMV07cmV0dXJuIGl9LGZhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0saGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4saT0tMSxyPWUubGVuZ3RoOysraTxyOylpZihuPWRhKHQsZVtpXSkpcmV0dXJuIG47cmV0dXJuIDB9O2Z1bmN0aW9uIGRhKHQsZSl7Zm9yKHZhciBuPWVbMF0saT1lWzFdLHI9LTEsbz0wLGE9dC5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgdT10W29dLGw9dVswXSxjPXVbMV0sZj10W3NdLGg9ZlswXSxkPWZbMV07aWYocGEodSxmLGUpKXJldHVybiAwO2M+aSE9ZD5pJiZuPChoLWwpKihpLWMpLyhkLWMpK2wmJihyPS1yKX1yZXR1cm4gcn1mdW5jdGlvbiBwYSh0LGUsbil7dmFyIGkscixvLGE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKT09KG5bMF0tdFswXSkqKGVbMV0tdFsxXSl9KHQsZSxuKSYmKHI9dFtpPSsodFswXT09PWVbMF0pXSxhPWVbaV0scjw9KG89bltpXSkmJm88PWF8fGE8PW8mJm88PXIpfXZhciBtYT1mdW5jdGlvbigpe30seWE9W1tdLFtbWzEsMS41XSxbLjUsMV1dXSxbW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbLjUsMV1dXSxbW1sxLC41XSxbMS41LDFdXV0sW1tbMSwxLjVdLFsuNSwxXV0sW1sxLC41XSxbMS41LDFdXV0sW1tbMSwuNV0sWzEsMS41XV1dLFtbWzEsLjVdLFsuNSwxXV1dLFtbWy41LDFdLFsxLC41XV1dLFtbWzEsMS41XSxbMSwuNV1dXSxbW1suNSwxXSxbMSwuNV1dLFtbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbMS41LDFdXV0sW1tbLjUsMV0sWzEsMS41XV1dLFtdXSx2YT1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLG49aixpPXM7ZnVuY3Rpb24gcih0KXt2YXIgZT1uKHQpO2lmKEFycmF5LmlzQXJyYXkoZSkpZT1lLnNsaWNlKCkuc29ydChsYSk7ZWxzZXt2YXIgaT15KHQpLHI9aVswXSxhPWlbMV07ZT1UKHIsYSxlKSxlPXgoTWF0aC5mbG9vcihyL2UpKmUsTWF0aC5mbG9vcihhL2UpKmUsZSl9cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBvKHQsZSl9KX1mdW5jdGlvbiBvKG4scil7dmFyIG89W10scz1bXTtyZXR1cm4gZnVuY3Rpb24obixpLHIpe3ZhciBvLHMsdSxsLGMsZj1uZXcgQXJyYXksaD1uZXcgQXJyYXk7Zm9yKG89cz0tMSx5YVsodT1uWzBdPj1pKTw8MV0uZm9yRWFjaChkKTsrK288dC0xOyl5YVt1fCh1PW5bbysxXT49aSk8PDFdLmZvckVhY2goZCk7Zm9yKHlhW3U8PDBdLmZvckVhY2goZCk7KytzPGUtMTspe2ZvcihvPS0xLHlhWyh1PW5bcyp0K3RdPj1pKTw8MXwobD1uW3MqdF0+PWkpPDwyXS5mb3JFYWNoKGQpOysrbzx0LTE7KWM9bCx5YVt1fCh1PW5bcyp0K3QrbysxXT49aSk8PDF8KGw9bltzKnQrbysxXT49aSk8PDJ8Yzw8M10uZm9yRWFjaChkKTt5YVt1fGw8PDNdLmZvckVhY2goZCl9Zm9yKG89LTEseWFbKGw9bltzKnRdPj1pKTw8Ml0uZm9yRWFjaChkKTsrK288dC0xOyljPWwseWFbKGw9bltzKnQrbysxXT49aSk8PDJ8Yzw8M10uZm9yRWFjaChkKTtmdW5jdGlvbiBkKHQpe3ZhciBlLG4saT1bdFswXVswXStvLHRbMF1bMV0rc10sdT1bdFsxXVswXStvLHRbMV1bMV0rc10sbD1hKGkpLGM9YSh1KTsoZT1oW2xdKT8obj1mW2NdKT8oZGVsZXRlIGhbZS5lbmRdLGRlbGV0ZSBmW24uc3RhcnRdLGU9PT1uPyhlLnJpbmcucHVzaCh1KSxyKGUucmluZykpOmZbZS5zdGFydF09aFtuLmVuZF09e3N0YXJ0OmUuc3RhcnQsZW5kOm4uZW5kLHJpbmc6ZS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBoW2UuZW5kXSxlLnJpbmcucHVzaCh1KSxoW2UuZW5kPWNdPWUpOihlPWZbY10pPyhuPWhbbF0pPyhkZWxldGUgZltlLnN0YXJ0XSxkZWxldGUgaFtuLmVuZF0sZT09PW4/KGUucmluZy5wdXNoKHUpLHIoZS5yaW5nKSk6ZltuLnN0YXJ0XT1oW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGZbZS5zdGFydF0sZS5yaW5nLnVuc2hpZnQoaSksZltlLnN0YXJ0PWxdPWUpOmZbbF09aFtjXT17c3RhcnQ6bCxlbmQ6YyxyaW5nOltpLHVdfX15YVtsPDwzXS5mb3JFYWNoKGQpfShuLHIsZnVuY3Rpb24odCl7aSh0LG4sciksY2EodCk+MD9vLnB1c2goW3RdKTpzLnB1c2godCl9KSxzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxpPW8ubGVuZ3RoO248aTsrK24paWYoLTEhPT1oYSgoZT1vW25dKVswXSx0KSlyZXR1cm4gdm9pZCBlLnB1c2godCl9KSx7dHlwZToiTXVsdGlQb2x5Z29uIix2YWx1ZTpyLGNvb3JkaW5hdGVzOm99fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIDIqZVswXStlWzFdKih0KzEpKjR9ZnVuY3Rpb24gcyhuLGkscil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvLGE9blswXSxzPW5bMV0sdT0wfGEsbD0wfHMsYz1pW2wqdCt1XTthPjAmJmE8dCYmdT09PWEmJihuWzBdPWErKHItKG89aVtsKnQrdS0xXSkpLyhjLW8pLS41KSxzPjAmJnM8ZSYmbD09PXMmJihuWzFdPXMrKHItKG89aVsobC0xKSp0K3VdKSkvKGMtbyktLjUpfSl9cmV0dXJuIHIuY29udG91cj1vLHIuc2l6ZT1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxlXTt2YXIgaT1NYXRoLmNlaWwoblswXSksbz1NYXRoLmNlaWwoblsxXSk7aWYoIShpPjAmJm8+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1pLGU9byxyfSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2ZhKHVhLmNhbGwodCkpOmZhKHQpLHIpOm59LHIuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQ/czptYSxyKTppPT09c30scn07ZnVuY3Rpb24gZ2EodCxlLG4pe2Zvcih2YXIgaT10LndpZHRoLHI9dC5oZWlnaHQsbz0xKyhuPDwxKSxhPTA7YTxyOysrYSlmb3IodmFyIHM9MCx1PTA7czxpK247KytzKXM8aSYmKHUrPXQuZGF0YVtzK2EqaV0pLHM+PW4mJihzPj1vJiYodS09dC5kYXRhW3MtbythKmldKSxlLmRhdGFbcy1uK2EqaV09dS9NYXRoLm1pbihzKzEsaS0xK28tcyxvKSl9ZnVuY3Rpb24gYmEodCxlLG4pe2Zvcih2YXIgaT10LndpZHRoLHI9dC5oZWlnaHQsbz0xKyhuPDwxKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9MCx1PTA7czxyK247KytzKXM8ciYmKHUrPXQuZGF0YVthK3MqaV0pLHM+PW4mJihzPj1vJiYodS09dC5kYXRhW2ErKHMtbykqaV0pLGUuZGF0YVthKyhzLW4pKmldPXUvTWF0aC5taW4ocysxLHItMStvLXMsbykpfWZ1bmN0aW9uIF9hKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHdhKHQpe3JldHVybiB0WzFdfXZhciB4YT1mdW5jdGlvbigpe3ZhciB0PV9hLGU9d2Esbj05NjAsaT01MDAscj0yMCxvPTIsYT0zKnIscz1uKzIqYT4+byx1PWkrMiphPj5vLGw9ZmEoMjApO2Z1bmN0aW9uIGMobil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheShzKnUpLGM9bmV3IEZsb2F0MzJBcnJheShzKnUpO24uZm9yRWFjaChmdW5jdGlvbihuLHIsbCl7dmFyIGM9dChuLHIsbCkrYT4+byxmPWUobixyLGwpK2E+Pm87Yz49MCYmYzxzJiZmPj0wJiZmPHUmJisraVtjK2Yqc119KSxnYSh7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6Y30scj4+byksYmEoe3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpjfSx7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOml9LHI+Pm8pLGdhKHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpjfSxyPj5vKSxiYSh7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOmN9LHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6aX0scj4+byksZ2Eoe3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOmN9LHI+Pm8pLGJhKHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6Y30se3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTppfSxyPj5vKTt2YXIgaD1sKGkpO2lmKCFBcnJheS5pc0FycmF5KGgpKXt2YXIgZD1QKGkpO2g9VCgwLGQsaCksKGg9eCgwLE1hdGguZmxvb3IoZC9oKSpoLGgpKS5zaGlmdCgpfXJldHVybiB2YSgpLnRocmVzaG9sZHMoaCkuc2l6ZShbcyx1XSkoaSkubWFwKGYpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqbyksdC5jb29yZGluYXRlcy5mb3JFYWNoKGgpLHR9ZnVuY3Rpb24gaCh0KXt0LmZvckVhY2goZCl9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixvKS1hLHRbMV09dFsxXSpNYXRoLnBvdygyLG8pLWF9ZnVuY3Rpb24gbSgpe3JldHVybiBzPW4rMiooYT0zKnIpPj5vLHU9aSsyKmE+Pm8sY31yZXR1cm4gYy54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZmEoK2UpLGMpOnR9LGMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZhKCt0KSxjKTplfSxjLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW24saV07dmFyIGU9TWF0aC5jZWlsKHRbMF0pLHI9TWF0aC5jZWlsKHRbMV0pO2lmKCEoZT49MHx8ZT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gbj1lLGk9cixtKCl9LGMuY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PG87aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gbz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSxtKCl9LGMudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZmEodWEuY2FsbCh0KSk6ZmEodCksYyk6bH0sYy5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChyKihyKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiByPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSxtKCl9LGN9LENhPXt9LFNhPXt9LEVhPTM0LE9hPTEwLGthPTEzO2Z1bmN0aW9uIFRhKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iil9dmFyIGphPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxlKXt2YXIgaSxyPVtdLG89dC5sZW5ndGgsYT0wLHM9MCx1PW88PTAsbD0hMTtmdW5jdGlvbiBjKCl7aWYodSlyZXR1cm4gU2E7aWYobClyZXR1cm4gbD0hMSxDYTt2YXIgZSxpLHI9YTtpZih0LmNoYXJDb2RlQXQocik9PT1FYSl7Zm9yKDthKys8byYmdC5jaGFyQ29kZUF0KGEpIT09RWF8fHQuY2hhckNvZGVBdCgrK2EpPT09RWE7KTtyZXR1cm4oZT1hKT49bz91PSEwOihpPXQuY2hhckNvZGVBdChhKyspKT09PU9hP2w9ITA6aT09PWthJiYobD0hMCx0LmNoYXJDb2RlQXQoYSk9PT1PYSYmKythKSx0LnNsaWNlKHIrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKChpPXQuY2hhckNvZGVBdChlPWErKykpPT09T2EpbD0hMDtlbHNlIGlmKGk9PT1rYSlsPSEwLHQuY2hhckNvZGVBdChhKT09PU9hJiYrK2E7ZWxzZSBpZihpIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShyLGUpfXJldHVybiB1PSEwLHQuc2xpY2UocixvKX1mb3IodC5jaGFyQ29kZUF0KG8tMSk9PT1PYSYmLS1vLHQuY2hhckNvZGVBdChvLTEpPT09a2EmJi0tbzsoaT1jKCkpIT09U2E7KXtmb3IodmFyIGY9W107aSE9PUNhJiZpIT09U2E7KWYucHVzaChpKSxpPWMoKTtlJiZudWxsPT0oZj1lKGYscysrKSl8fHIucHVzaChmKX1yZXR1cm4gcn1mdW5jdGlvbiByKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixvPWkodCxmdW5jdGlvbih0LGkpe2lmKG4pcmV0dXJuIG4odCxpLTEpO3I9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj1UYSh0KTtyZXR1cm4gZnVuY3Rpb24oaSxyKXtyZXR1cm4gZShuKGkpLHIsdCl9fSh0LGUpOlRhKHQpfSk7cmV0dXJuIG8uY29sdW1ucz1yfHxbXSxvfSxwYXJzZVJvd3M6aSxmb3JtYXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09biYmKG49ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBpIGluIHQpaSBpbiBlfHxuLnB1c2goZVtpXT1pKX0pLG59KGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pLmpvaW4odCl9KSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocikuam9pbigiXG4iKX19fSxBYT1qYSgiLCIpLElhPUFhLnBhcnNlLFJhPUFhLnBhcnNlUm93cyxNYT1BYS5mb3JtYXQsUGE9QWEuZm9ybWF0Um93cyxEYT1qYSgiXHQiKSxOYT1EYS5wYXJzZSxGYT1EYS5wYXJzZVJvd3MsTGE9RGEuZm9ybWF0LFZhPURhLmZvcm1hdFJvd3M7ZnVuY3Rpb24gemEodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX12YXIgQmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKHphKX07ZnVuY3Rpb24gVWEodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9dmFyIEhhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihVYSl9O2Z1bmN0aW9uIHFhKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC50ZXh0KCl9dmFyIEdhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihxYSl9O2Z1bmN0aW9uIFFhKHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKGk9bixuPXZvaWQgMCksR2EoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsaSl9KX19ZnVuY3Rpb24gWWEodCxlLG4saSl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49dm9pZCAwKTt2YXIgcj1qYSh0KTtyZXR1cm4gR2EoZSxuKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByLnBhcnNlKHQsaSl9KX12YXIgV2E9UWEoSWEpLFphPVFhKE5hKSxLYT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciByPW5ldyBJbWFnZTtmb3IodmFyIG8gaW4gZSlyW29dPWVbb107ci5vbmVycm9yPWksci5vbmxvYWQ9ZnVuY3Rpb24oKXtuKHIpfSxyLnNyYz10fSl9O2Z1bmN0aW9uIFhhKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5qc29uKCl9dmFyICRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihYYSl9O2Z1bmN0aW9uIEphKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBHYShlLG4pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpfSl9fXZhciB0cz1KYSgiYXBwbGljYXRpb24veG1sIiksZXM9SmEoInRleHQvaHRtbCIpLG5zPUphKCJpbWFnZS9zdmcreG1sIiksaXM9ZnVuY3Rpb24odCxlKXt2YXIgbjtmdW5jdGlvbiBpKCl7dmFyIGkscixvPW4ubGVuZ3RoLGE9MCxzPTA7Zm9yKGk9MDtpPG87KytpKWErPShyPW5baV0pLngscys9ci55O2ZvcihhPWEvby10LHM9cy9vLWUsaT0wO2k8bzsrK2kpKHI9bltpXSkueC09YSxyLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLGkuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXR9LGkueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxpKTp0fSxpLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3QsaSk6ZX0saX0scnM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxvcz1mdW5jdGlvbigpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX07ZnVuY3Rpb24gYXModCxlLG4saSl7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciByLG8sYSxzLHUsbCxjLGYsaCxkPXQuX3Jvb3QscD17ZGF0YTppfSxtPXQuX3gwLHk9dC5feTAsdj10Ll94MSxnPXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigobD1lPj0obz0obSt2KS8yKSk/bT1vOnY9bywoYz1uPj0oYT0oeStnKS8yKSk/eT1hOmc9YSxyPWQsIShkPWRbZj1jPDwxfGxdKSlyZXR1cm4gcltmXT1wLHQ7aWYocz0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSx1PSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLGU9PT1zJiZuPT09dSlyZXR1cm4gcC5uZXh0PWQscj9yW2ZdPXA6dC5fcm9vdD1wLHQ7ZG97cj1yP3JbZl09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChsPWU+PShvPShtK3YpLzIpKT9tPW86dj1vLChjPW4+PShhPSh5K2cpLzIpKT95PWE6Zz1hfXdoaWxlKChmPWM8PDF8bCk9PShoPSh1Pj1hKTw8MXxzPj1vKSk7cmV0dXJuIHJbaF09ZCxyW2ZdPXAsdH12YXIgc3M9ZnVuY3Rpb24odCxlLG4saSxyKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9aSx0aGlzLnkxPXJ9O2Z1bmN0aW9uIHVzKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGxzKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGNzKHQsZSxuKXt2YXIgaT1uZXcgZnMobnVsbD09ZT91czplLG51bGw9PW4/bHM6bixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2k6aS5hZGRBbGwodCl9ZnVuY3Rpb24gZnModCxlLG4saSxyLG8pe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9bix0aGlzLl95MD1pLHRoaXMuX3gxPXIsdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBocyh0KXtmb3IodmFyIGU9e2RhdGE6dC5kYXRhfSxuPWU7dD10Lm5leHQ7KW49bi5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIGV9dmFyIGRzPWNzLnByb3RvdHlwZT1mcy5wcm90b3R5cGU7ZnVuY3Rpb24gcHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIG1zKHQpe3JldHVybiB0LnkrdC52eX1kcy5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5ldyBmcyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLGk9dGhpcy5fcm9vdDtpZighaSlyZXR1cm4gbjtpZighaS5sZW5ndGgpcmV0dXJuIG4uX3Jvb3Q9aHMoaSksbjtmb3IodD1be3NvdXJjZTppLHRhcmdldDpuLl9yb290PW5ldyBBcnJheSg0KX1dO2k9dC5wb3AoKTspZm9yKHZhciByPTA7cjw0OysrcikoZT1pLnNvdXJjZVtyXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDppLnRhcmdldFtyXT1uZXcgQXJyYXkoNCl9KTppLnRhcmdldFtyXT1ocyhlKSk7cmV0dXJuIG59LGRzLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGFzKHRoaXMuY292ZXIoZSxuKSxlLG4sdCl9LGRzLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgZSxuLGkscixvPXQubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLHU9MS8wLGw9MS8wLGM9LTEvMCxmPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLGU9dFtuXSkpfHxpc05hTihyPSt0aGlzLl95LmNhbGwobnVsbCxlKSl8fChhW25dPWksc1tuXT1yLGk8dSYmKHU9aSksaT5jJiYoYz1pKSxyPGwmJihsPXIpLHI+ZiYmKGY9cikpO2ZvcihjPHUmJih1PXRoaXMuX3gwLGM9dGhpcy5feDEpLGY8bCYmKGw9dGhpcy5feTAsZj10aGlzLl95MSksdGhpcy5jb3Zlcih1LGwpLmNvdmVyKGMsZiksbj0wO248bzsrK24pYXModGhpcyxhW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGRzLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLGk9dGhpcy5feTAscj10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKG4pKXI9KG49TWF0aC5mbG9vcih0KSkrMSxvPShpPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtpZighKG4+dHx8dD5yfHxpPmV8fGU+bykpcmV0dXJuIHRoaXM7dmFyIGEscyx1PXItbixsPXRoaXMuX3Jvb3Q7c3dpdGNoKHM9KGU8KGkrbykvMik8PDF8dDwobityKS8yKXtjYXNlIDA6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShvPWkrKHUqPTIpLHQ+KHI9bit1KXx8ZT5vKTticmVhaztjYXNlIDE6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShvPWkrKHUqPTIpLChuPXItdSk+dHx8ZT5vKTticmVhaztjYXNlIDI6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShpPW8tKHUqPTIpLHQ+KHI9bit1KXx8aT5lKTticmVhaztjYXNlIDM6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShpPW8tKHUqPTIpLChuPXItdSk+dHx8aT5lKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9bCl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9aSx0aGlzLl94MT1yLHRoaXMuX3kxPW8sdGhpc30sZHMuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSx0fSxkcy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGRzLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbyxhLHMsdSxsLGM9dGhpcy5feDAsZj10aGlzLl95MCxoPXRoaXMuX3gxLGQ9dGhpcy5feTEscD1bXSxtPXRoaXMuX3Jvb3Q7Zm9yKG0mJnAucHVzaChuZXcgc3MobSxjLGYsaCxkKSksbnVsbD09bj9uPTEvMDooYz10LW4sZj1lLW4saD10K24sZD1lK24sbio9bik7dT1wLnBvcCgpOylpZighKCEobT11Lm5vZGUpfHwocj11LngwKT5ofHwobz11LnkwKT5kfHwoYT11LngxKTxjfHwocz11LnkxKTxmKSlpZihtLmxlbmd0aCl7dmFyIHk9KHIrYSkvMix2PShvK3MpLzI7cC5wdXNoKG5ldyBzcyhtWzNdLHksdixhLHMpLG5ldyBzcyhtWzJdLHIsdix5LHMpLG5ldyBzcyhtWzFdLHksbyxhLHYpLG5ldyBzcyhtWzBdLHIsbyx5LHYpKSwobD0oZT49dik8PDF8dD49eSkmJih1PXBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTEtbF0scFtwLmxlbmd0aC0xLWxdPXUpfWVsc2V7dmFyIGc9dC0rdGhpcy5feC5jYWxsKG51bGwsbS5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLG0uZGF0YSksXz1nKmcrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7Yz10LXcsZj1lLXcsaD10K3csZD1lK3csaT1tLmRhdGF9fXJldHVybiBpfSxkcy5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUsbixpLHIsbyxhLHMsdSxsLGMsZixoLGQ9dGhpcy5fcm9vdCxwPXRoaXMuX3gwLG09dGhpcy5feTAseT10aGlzLl94MSx2PXRoaXMuX3kxO2lmKCFkKXJldHVybiB0aGlzO2lmKGQubGVuZ3RoKWZvcig7Oyl7aWYoKGw9bz49KHM9KHAreSkvMikpP3A9czp5PXMsKGM9YT49KHU9KG0rdikvMikpP209dTp2PXUsZT1kLCEoZD1kW2Y9Yzw8MXxsXSkpcmV0dXJuIHRoaXM7aWYoIWQubGVuZ3RoKWJyZWFrOyhlW2YrMSYzXXx8ZVtmKzImM118fGVbZiszJjNdKSYmKG49ZSxoPWYpfWZvcig7ZC5kYXRhIT09dDspaWYoaT1kLCEoZD1kLm5leHQpKXJldHVybiB0aGlzO3JldHVybihyPWQubmV4dCkmJmRlbGV0ZSBkLm5leHQsaT8ocj9pLm5leHQ9cjpkZWxldGUgaS5uZXh0LHRoaXMpOmU/KHI/ZVtmXT1yOmRlbGV0ZSBlW2ZdLChkPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZkPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhZC5sZW5ndGgmJihuP25baF09ZDp0aGlzLl9yb290PWQpLHRoaXMpOih0aGlzLl9yb290PXIsdGhpcyl9LGRzLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LGRzLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sZHMuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSx0fSxkcy52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLGkscixvLGEscz1bXSx1PXRoaXMuX3Jvb3Q7Zm9yKHUmJnMucHVzaChuZXcgc3ModSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQodT1lLm5vZGUsaT1lLngwLHI9ZS55MCxvPWUueDEsYT1lLnkxKSYmdS5sZW5ndGgpe3ZhciBsPShpK28pLzIsYz0ocithKS8yOyhuPXVbM10pJiZzLnB1c2gobmV3IHNzKG4sbCxjLG8sYSkpLChuPXVbMl0pJiZzLnB1c2gobmV3IHNzKG4saSxjLGwsYSkpLChuPXVbMV0pJiZzLnB1c2gobmV3IHNzKG4sbCxyLG8sYykpLChuPXVbMF0pJiZzLnB1c2gobmV3IHNzKG4saSxyLGwsYykpfXJldHVybiB0aGlzfSxkcy52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10saT1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBzcyh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIHI9ZS5ub2RlO2lmKHIubGVuZ3RoKXt2YXIgbyxhPWUueDAscz1lLnkwLHU9ZS54MSxsPWUueTEsYz0oYSt1KS8yLGY9KHMrbCkvMjsobz1yWzBdKSYmbi5wdXNoKG5ldyBzcyhvLGEscyxjLGYpKSwobz1yWzFdKSYmbi5wdXNoKG5ldyBzcyhvLGMscyx1LGYpKSwobz1yWzJdKSYmbi5wdXNoKG5ldyBzcyhvLGEsZixjLGwpKSwobz1yWzNdKSYmbi5wdXNoKG5ldyBzcyhvLGMsZix1LGwpKX1pLnB1c2goZSl9Zm9yKDtlPWkucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxkcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sZHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciB5cz1mdW5jdGlvbih0KXt2YXIgZSxuLGk9MSxyPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHMsdSxsLGMsZixoPWUubGVuZ3RoLGQ9MDtkPHI7KytkKWZvcihvPWNzKGUscHMsbXMpLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8aDsrK3QpZj0oYz1uWyhzPWVbdF0pLmluZGV4XSkqYyx1PXMueCtzLnZ4LGw9cy55K3Mudnksby52aXNpdChwKTtmdW5jdGlvbiBwKHQsZSxuLHIsbyl7dmFyIGE9dC5kYXRhLGg9dC5yLGQ9YytoO2lmKCFhKXJldHVybiBlPnUrZHx8cjx1LWR8fG4+bCtkfHxvPGwtZDtpZihhLmluZGV4PnMuaW5kZXgpe3ZhciBwPXUtYS54LWEudngsbT1sLWEueS1hLnZ5LHk9cCpwK20qbTt5PGQqZCYmKDA9PT1wJiYoeSs9KHA9b3MoKSkqcCksMD09PW0mJih5Kz0obT1vcygpKSptKSx5PShkLSh5PU1hdGguc3FydCh5KSkpL3kqaSxzLnZ4Kz0ocCo9eSkqKGQ9KGgqPWgpLyhmK2gpKSxzLnZ5Kz0obSo9eSkqZCxhLnZ4LT1wKihkPTEtZCksYS52eS09bSpkKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGkscixvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxpPTA7aTxvOysraSluWyhyPWVbaV0pLmluZGV4XT0rdChyLGksZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ycyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG8pOnJ9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbyk6aX0sby5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpycygrZSkscygpLG8pOnR9LG99O2Z1bmN0aW9uIHZzKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIGdzKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufXZhciBicz1mdW5jdGlvbih0KXt2YXIgZSxuLGkscixvLGE9dnMscz1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihyW3Quc291cmNlLmluZGV4XSxyW3QudGFyZ2V0LmluZGV4XSl9LHU9cnMoMzApLGw9MTtmdW5jdGlvbiBjKGkpe2Zvcih2YXIgcj0wLGE9dC5sZW5ndGg7cjxsOysrcilmb3IodmFyIHMsdSxjLGYsaCxkLHAsbT0wO208YTsrK20pZj0oYz0ocz10W21dKS50YXJnZXQpLngrYy52eC0odT1zLnNvdXJjZSkueC11LnZ4fHxvcygpLGg9Yy55K2MudnktdS55LXUudnl8fG9zKCksaCo9ZD0oKGQ9TWF0aC5zcXJ0KGYqZitoKmgpKS1uW21dKS9kKmkqZVttXSxjLnZ4LT0oZio9ZCkqKHA9b1ttXSksYy52eS09aCpwLHUudngrPWYqKHA9MS1wKSx1LnZ5Kz1oKnB9ZnVuY3Rpb24gZigpe2lmKGkpe3ZhciBzLHUsbD1pLmxlbmd0aCxjPXQubGVuZ3RoLGY9Wm8oaSxhKTtmb3Iocz0wLHI9bmV3IEFycmF5KGwpO3M8YzsrK3MpKHU9dFtzXSkuaW5kZXg9cywib2JqZWN0IiE9dHlwZW9mIHUuc291cmNlJiYodS5zb3VyY2U9Z3MoZix1LnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgdS50YXJnZXQmJih1LnRhcmdldD1ncyhmLHUudGFyZ2V0KSksclt1LnNvdXJjZS5pbmRleF09KHJbdS5zb3VyY2UuaW5kZXhdfHwwKSsxLHJbdS50YXJnZXQuaW5kZXhdPShyW3UudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iocz0wLG89bmV3IEFycmF5KGMpO3M8YzsrK3Mpb1tzXT1yWyh1PXRbc10pLnNvdXJjZS5pbmRleF0vKHJbdS5zb3VyY2UuaW5kZXhdK3JbdS50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShjKSxoKCksbj1uZXcgQXJyYXkoYyksZCgpfX1mdW5jdGlvbiBoKCl7aWYoaSlmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjsrK24pZVtuXT0rcyh0W25dLG4sdCl9ZnVuY3Rpb24gZCgpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K3UodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksYy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxmKCl9LGMubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxmKCksYyk6dH0sYy5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGMpOmF9LGMuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxjKTpsfSxjLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cnMoK3QpLGgoKSxjKTpzfSxjLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cnMoK3QpLGQoKSxjKTp1fSxjfTtmdW5jdGlvbiBfcyh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIHdzKHQpe3JldHVybiB0Lnl9dmFyIHhzPTEwLENzPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxTcz1mdW5jdGlvbih0KXt2YXIgZSxuPTEsaT0uMDAxLHI9MS1NYXRoLnBvdyhpLDEvMzAwKSxvPTAsYT0uNixzPVpvKCksdT1NaShjKSxsPWh0KCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gYygpe2YoKSxsLmNhbGwoInRpY2siLGUpLG48aSYmKHUuc3RvcCgpLGwuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gZigpe3ZhciBlLGksdT10Lmxlbmd0aDtmb3Iobis9KG8tbikqcixzLmVhY2goZnVuY3Rpb24odCl7dChuKX0pLGU9MDtlPHU7KytlKW51bGw9PShpPXRbZV0pLmZ4P2kueCs9aS52eCo9YTooaS54PWkuZngsaS52eD0wKSxudWxsPT1pLmZ5P2kueSs9aS52eSo9YTooaS55PWkuZnksaS52eT0wKX1mdW5jdGlvbiBoKCl7Zm9yKHZhciBlLG49MCxpPXQubGVuZ3RoO248aTsrK24pe2lmKChlPXRbbl0pLmluZGV4PW4saXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIHI9eHMqTWF0aC5zcXJ0KG4pLG89bipDcztlLng9cipNYXRoLmNvcyhvKSxlLnk9cipNYXRoLnNpbihvKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGgoKSxlPXt0aWNrOmYscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiB1LnJlc3RhcnQoYyksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiB1LnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGgoKSxzLmVhY2goZCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsZSk6aX0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTorcn0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZSk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLXQsZSk6MS1hfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxkKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4saSl7dmFyIHIsbyxhLHMsdSxsPTAsYz10Lmxlbmd0aDtmb3IobnVsbD09aT9pPTEvMDppKj1pLGw9MDtsPGM7KytsKShhPShyPWUtKHM9dFtsXSkueCkqcisobz1uLXMueSkqbyk8aSYmKHU9cyxpPWEpO3JldHVybiB1fSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGwub24odCxuKSxlKTpsLm9uKHQpfX19LEVzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGkscj1ycygtMzApLG89MSxhPTEvMCxzPS44MTtmdW5jdGlvbiB1KGkpe3ZhciByLG89dC5sZW5ndGgsYT1jcyh0LF9zLHdzKS52aXNpdEFmdGVyKGMpO2ZvcihuPWkscj0wO3I8bzsrK3IpZT10W3JdLGEudmlzaXQoZil9ZnVuY3Rpb24gbCgpe2lmKHQpe3ZhciBlLG4sbz10Lmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkobyksZT0wO2U8bzsrK2UpaVsobj10W2VdKS5pbmRleF09K3IobixlLHQpfX1mdW5jdGlvbiBjKHQpe3ZhciBlLG4scixvLGEscz0wLHU9MDtpZih0Lmxlbmd0aCl7Zm9yKHI9bz1hPTA7YTw0OysrYSkoZT10W2FdKSYmKG49TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSx1Kz1uLHIrPW4qZS54LG8rPW4qZS55KTt0Lng9ci91LHQueT1vL3V9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1pW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiBmKHQscix1LGwpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBjPXQueC1lLngsZj10LnktZS55LGg9bC1yLGQ9YypjK2YqZjtpZihoKmgvczxkKXJldHVybiBkPGEmJigwPT09YyYmKGQrPShjPW9zKCkpKmMpLDA9PT1mJiYoZCs9KGY9b3MoKSkqZiksZDxvJiYoZD1NYXRoLnNxcnQobypkKSksZS52eCs9Yyp0LnZhbHVlKm4vZCxlLnZ5Kz1mKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1hKSl7KHQuZGF0YSE9PWV8fHQubmV4dCkmJigwPT09YyYmKGQrPShjPW9zKCkpKmMpLDA9PT1mJiYoZCs9KGY9b3MoKSkqZiksZDxvJiYoZD1NYXRoLnNxcnQobypkKSkpO2Rve3QuZGF0YSE9PWUmJihlLnZ4Kz1jKihoPWlbdC5kYXRhLmluZGV4XSpuL2QpLGUudnkrPWYqaCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gdS5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSxsKCl9LHUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpycygrdCksbCgpLHUpOnJ9LHUuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCp0LHUpOk1hdGguc3FydChvKX0sdS5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10KnQsdSk6TWF0aC5zcXJ0KGEpfSx1LnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQqdCx1KTpNYXRoLnNxcnQocyl9LHV9LE9zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyLG8sYT1ycyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGE9MCxzPWkubGVuZ3RoO2E8czsrK2Epe3ZhciB1PWlbYV0sbD11LngtZXx8MWUtNixjPXUueS1ufHwxZS02LGY9TWF0aC5zcXJ0KGwqbCtjKmMpLGg9KG9bYV0tZikqclthXSp0L2Y7dS52eCs9bCpoLHUudnkrPWMqaH19ZnVuY3Rpb24gdSgpe2lmKGkpe3ZhciBlLG49aS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKW9bZV09K3QoaVtlXSxlLGkpLHJbZV09aXNOYU4ob1tlXSk/MDorYShpW2VdLGUsaSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ycygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtpPXQsdSgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cnMoK3QpLHUoKSxzKTphfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnJzKCtlKSx1KCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfSxrcz1mdW5jdGlvbih0KXt2YXIgZSxuLGkscj1ycyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIHIsbz0wLGE9ZS5sZW5ndGg7bzxhOysrbykocj1lW29dKS52eCs9KGlbb10tci54KSpuW29dKnR9ZnVuY3Rpb24gYSgpe2lmKGUpe3ZhciBvLGE9ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGk9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKW5bb109aXNOYU4oaVtvXT0rdChlW29dLG8sZSkpPzA6K3IoZVtvXSxvLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cnMobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpycygrdCksYSgpLG8pOnJ9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnJzKCtlKSxhKCksbyk6dH0sb30sVHM9ZnVuY3Rpb24odCl7dmFyIGUsbixpLHI9cnMoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciByLG89MCxhPWUubGVuZ3RoO288YTsrK28pKHI9ZVtvXSkudnkrPShpW29dLXIueSkqbltvXSp0fWZ1bmN0aW9uIGEoKXtpZihlKXt2YXIgbyxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxpPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyluW29dPWlzTmFOKGlbb109K3QoZVtvXSxvLGUpKT8wOityKGVbb10sbyxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJzKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cnMoK3QpLGEoKSxvKTpyfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpycygrZSksYSgpLG8pOnR9LG99LGpzPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLGk9dC5zbGljZSgwLG4pO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCt0LnNsaWNlKG4rMSldfSxBcz1mdW5jdGlvbih0KXtyZXR1cm4odD1qcyhNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxJcz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gUnModCl7cmV0dXJuIG5ldyBNcyh0KX1mdW5jdGlvbiBNcyh0KXtpZighKGU9SXMuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTt0aGlzLmZpbGw9ZVsxXXx8IiAiLHRoaXMuYWxpZ249ZVsyXXx8Ij4iLHRoaXMuc2lnbj1lWzNdfHwiLSIsdGhpcy5zeW1ib2w9ZVs0XXx8IiIsdGhpcy56ZXJvPSEhZVs1XSx0aGlzLndpZHRoPWVbNl0mJitlWzZdLHRoaXMuY29tbWE9ISFlWzddLHRoaXMucHJlY2lzaW9uPWVbOF0mJitlWzhdLnNsaWNlKDEpLHRoaXMudHJpbT0hIWVbOV0sdGhpcy50eXBlPWVbMTBdfHwiIn1Scy5wcm90b3R5cGU9TXMucHJvdG90eXBlLE1zLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBQcyxEcyxOcyxGcyxMcz1mdW5jdGlvbih0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLGk9MSxyPS0xO2k8bjsrK2kpc3dpdGNoKHRbaV0pe2Nhc2UiLiI6cj1lPWk7YnJlYWs7Y2FzZSIwIjowPT09ciYmKHI9aSksZT1pO2JyZWFrO2RlZmF1bHQ6aWYocj4wKXtpZighK3RbaV0pYnJlYWsgdDtyPTB9fXJldHVybiByPjA/dC5zbGljZSgwLHIpK3Quc2xpY2UoZSsxKTp0fSxWcz1mdW5jdGlvbih0LGUpe3ZhciBuPWpzKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxyPW5bMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9LHpzPXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBWcygxMDAqdCxlKX0scjpWcyxzOmZ1bmN0aW9uKHQsZSl7dmFyIG49anModCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXSxvPXItKFBzPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxhPWkubGVuZ3RoO3JldHVybiBvPT09YT9pOm8+YT9pK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikranModCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0sQnM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LFVzPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdLEhzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saT10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz8oZT10Lmdyb3VwaW5nLG49dC50aG91c2FuZHMsZnVuY3Rpb24odCxpKXtmb3IodmFyIHI9dC5sZW5ndGgsbz1bXSxhPTAscz1lWzBdLHU9MDtyPjAmJnM+MCYmKHUrcysxPmkmJihzPU1hdGgubWF4KDEsaS11KSksby5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgodSs9cysxKT5pKSk7KXM9ZVthPShhKzEpJWUubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihuKX0pOkJzLHI9dC5jdXJyZW5jeSxvPXQuZGVjaW1hbCxhPXQubnVtZXJhbHM/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSl9fSh0Lm51bWVyYWxzKTpCcyxzPXQucGVyY2VudHx8IiUiO2Z1bmN0aW9uIHUodCl7dmFyIGU9KHQ9UnModCkpLmZpbGwsbj10LmFsaWduLHU9dC5zaWduLGw9dC5zeW1ib2wsYz10Lnplcm8sZj10LndpZHRoLGg9dC5jb21tYSxkPXQucHJlY2lzaW9uLHA9dC50cmltLG09dC50eXBlOyJuIj09PW0/KGg9ITAsbT0iZyIpOnpzW21dfHwobnVsbD09ZCYmKGQ9MTIpLHA9ITAsbT0iZyIpLChjfHwiMCI9PT1lJiYiPSI9PT1uKSYmKGM9ITAsZT0iMCIsbj0iPSIpO3ZhciB5PSIkIj09PWw/clswXToiIyI9PT1sJiYvW2JveFhdLy50ZXN0KG0pPyIwIittLnRvTG93ZXJDYXNlKCk6IiIsdj0iJCI9PT1sP3JbMV06L1slcF0vLnRlc3QobSk/czoiIixnPXpzW21dLGI9L1tkZWZncHJzJV0vLnRlc3QobSk7ZnVuY3Rpb24gXyh0KXt2YXIgcixzLGwsXz15LHc9djtpZigiYyI9PT1tKXc9Zyh0KSt3LHQ9IiI7ZWxzZXt2YXIgeD0odD0rdCk8MDtpZih0PWcoTWF0aC5hYnModCksZCkscCYmKHQ9THModCkpLHgmJjA9PSt0JiYoeD0hMSksXz0oeD8iKCI9PT11P3U6Ii0iOiItIj09PXV8fCIoIj09PXU/IiI6dSkrXyx3PSgicyI9PT1tP1VzWzgrUHMvM106IiIpK3crKHgmJiIoIj09PXU/IikiOiIiKSxiKWZvcihyPS0xLHM9dC5sZW5ndGg7KytyPHM7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChyKSl8fGw+NTcpe3c9KDQ2PT09bD9vK3Quc2xpY2UocisxKTp0LnNsaWNlKHIpKSt3LHQ9dC5zbGljZSgwLHIpO2JyZWFrfX1oJiYhYyYmKHQ9aSh0LDEvMCkpO3ZhciBDPV8ubGVuZ3RoK3QubGVuZ3RoK3cubGVuZ3RoLFM9QzxmP25ldyBBcnJheShmLUMrMSkuam9pbihlKToiIjtzd2l0Y2goaCYmYyYmKHQ9aShTK3QsUy5sZW5ndGg/Zi13Lmxlbmd0aDoxLzApLFM9IiIpLG4pe2Nhc2UiPCI6dD1fK3QrdytTO2JyZWFrO2Nhc2UiPSI6dD1fK1MrdCt3O2JyZWFrO2Nhc2UiXiI6dD1TLnNsaWNlKDAsQz1TLmxlbmd0aD4+MSkrXyt0K3crUy5zbGljZShDKTticmVhaztkZWZhdWx0OnQ9UytfK3Qrd31yZXR1cm4gYSh0KX1yZXR1cm4gZD1udWxsPT1kPzY6L1tncHJzXS8udGVzdChtKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGQpKSxfLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LF99cmV0dXJue2Zvcm1hdDp1LGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPXUoKCh0PVJzKHQpKS50eXBlPSJmIix0KSksaT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihBcyhlKS8zKSkpLHI9TWF0aC5wb3coMTAsLWkpLG89VXNbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihyKnQpK299fX19O2Z1bmN0aW9uIHFzKHQpe3JldHVybiBEcz1Icyh0KSxOcz1Ecy5mb3JtYXQsRnM9RHMuZm9ybWF0UHJlZml4LERzfXFzKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO3ZhciBHcz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtQXMoTWF0aC5hYnModCkpKX0sUXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihBcyhlKS8zKSkpLUFzKE1hdGguYWJzKHQpKSl9LFlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsQXMoZSktQXModCkpKzF9LFdzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBac307ZnVuY3Rpb24gWnMoKXt0aGlzLnJlc2V0KCl9WnMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpacyxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe1hzKEtzLHQsdGhpcy50KSxYcyh0aGlzLEtzLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1Lcy50OnRoaXMucz1Lcy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBLcz1uZXcgWnM7ZnVuY3Rpb24gWHModCxlLG4pe3ZhciBpPXQucz1lK24scj1pLWU7dC50PWUtKGktcikrKG4tcil9dmFyICRzPTFlLTYsSnM9TWF0aC5QSSx0dT1Kcy8yLGV1PUpzLzQsbnU9MipKcyxpdT0xODAvSnMscnU9SnMvMTgwLG91PU1hdGguYWJzLGF1PU1hdGguYXRhbixzdT1NYXRoLmF0YW4yLHV1PU1hdGguY29zLGx1PU1hdGguY2VpbCxjdT1NYXRoLmV4cCxmdT0oTWF0aCxNYXRoLmxvZyksaHU9TWF0aC5wb3csZHU9TWF0aC5zaW4scHU9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LG11PU1hdGguc3FydCx5dT1NYXRoLnRhbjtmdW5jdGlvbiB2dSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9KczpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gZ3UodCl7cmV0dXJuIHQ+MT90dTp0PC0xPy10dTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gYnUodCl7cmV0dXJuKHQ9ZHUodC8yKSkqdH1mdW5jdGlvbiBfdSgpe31mdW5jdGlvbiB3dSh0LGUpe3QmJkN1Lmhhc093blByb3BlcnR5KHQudHlwZSkmJkN1W3QudHlwZV0odCxlKX12YXIgeHU9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXt3dSh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspd3UobltpXS5nZW9tZXRyeSxlKX19LEN1PXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe2UucG9pbnQoKHQ9dC5jb29yZGluYXRlcylbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspZS5wb2ludCgodD1uW2ldKVswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7U3UodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KVN1KG5baV0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe0V1KHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspRXUobltpXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KXd1KG5baV0sZSl9fTtmdW5jdGlvbiBTdSh0LGUsbil7dmFyIGkscj0tMSxvPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytyPG87KWUucG9pbnQoKGk9dFtyXSlbMF0saVsxXSxpWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBFdSh0LGUpe3ZhciBuPS0xLGk9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPGk7KVN1KHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX12YXIgT3Usa3UsVHUsanUsQXUsSXU9ZnVuY3Rpb24odCxlKXt0JiZ4dS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3h1W3QudHlwZV0odCxlKTp3dSh0LGUpfSxSdT1XcygpLE11PVdzKCksUHU9e3BvaW50Ol91LGxpbmVTdGFydDpfdSxsaW5lRW5kOl91LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1J1LnJlc2V0KCksUHUubGluZVN0YXJ0PUR1LFB1LmxpbmVFbmQ9TnV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rUnU7TXUuYWRkKHQ8MD9udSt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PV91fSxzcGhlcmU6ZnVuY3Rpb24oKXtNdS5hZGQobnUpfX07ZnVuY3Rpb24gRHUoKXtQdS5wb2ludD1GdX1mdW5jdGlvbiBOdSgpe0x1KE91LGt1KX1mdW5jdGlvbiBGdSh0LGUpe1B1LnBvaW50PUx1LE91PXQsa3U9ZSxUdT10Kj1ydSxqdT11dShlPShlKj1ydSkvMitldSksQXU9ZHUoZSl9ZnVuY3Rpb24gTHUodCxlKXtlPShlKj1ydSkvMitldTt2YXIgbj0odCo9cnUpLVR1LGk9bj49MD8xOi0xLHI9aSpuLG89dXUoZSksYT1kdShlKSxzPUF1KmEsdT1qdSpvK3MqdXUociksbD1zKmkqZHUocik7UnUuYWRkKHN1KGwsdSkpLFR1PXQsanU9byxBdT1hfXZhciBWdT1mdW5jdGlvbih0KXtyZXR1cm4gTXUucmVzZXQoKSxJdSh0LFB1KSwyKk11fTtmdW5jdGlvbiB6dSh0KXtyZXR1cm5bc3UodFsxXSx0WzBdKSxndSh0WzJdKV19ZnVuY3Rpb24gQnUodCl7dmFyIGU9dFswXSxuPXRbMV0saT11dShuKTtyZXR1cm5baSp1dShlKSxpKmR1KGUpLGR1KG4pXX1mdW5jdGlvbiBVdSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX1mdW5jdGlvbiBIdSh0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gcXUodCxlKXt0WzBdKz1lWzBdLHRbMV0rPWVbMV0sdFsyXSs9ZVsyXX1mdW5jdGlvbiBHdSh0LGUpe3JldHVyblt0WzBdKmUsdFsxXSplLHRbMl0qZV19ZnVuY3Rpb24gUXUodCl7dmFyIGU9bXUodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfXZhciBZdSxXdSxadSxLdSxYdSwkdSxKdSx0bCxlbCxubCxpbD1XcygpLHJsPXtwb2ludDpvbCxsaW5lU3RhcnQ6c2wsbGluZUVuZDp1bCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtybC5wb2ludD1sbCxybC5saW5lU3RhcnQ9Y2wscmwubGluZUVuZD1mbCxpbC5yZXNldCgpLFB1LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7UHUucG9seWdvbkVuZCgpLHJsLnBvaW50PW9sLHJsLmxpbmVTdGFydD1zbCxybC5saW5lRW5kPXVsLFJ1PDA/KFl1PS0oWnU9MTgwKSxXdT0tKEt1PTkwKSk6aWw+JHM/S3U9OTA6aWw8LSRzJiYoV3U9LTkwKSxubFswXT1ZdSxubFsxXT1adX19O2Z1bmN0aW9uIG9sKHQsZSl7ZWwucHVzaChubD1bWXU9dCxadT10XSksZTxXdSYmKFd1PWUpLGU+S3UmJihLdT1lKX1mdW5jdGlvbiBhbCh0LGUpe3ZhciBuPUJ1KFt0KnJ1LGUqcnVdKTtpZih0bCl7dmFyIGk9SHUodGwsbikscj1IdShbaVsxXSwtaVswXSwwXSxpKTtRdShyKSxyPXp1KHIpO3ZhciBvLGE9dC1YdSxzPWE+MD8xOi0xLHU9clswXSppdSpzLGw9b3UoYSk+MTgwO2xeKHMqWHU8dSYmdTxzKnQpPyhvPXJbMV0qaXUpPkt1JiYoS3U9byk6bF4ocypYdTwodT0odSszNjApJTM2MC0xODApJiZ1PHMqdCk/KG89LXJbMV0qaXUpPFd1JiYoV3U9byk6KGU8V3UmJihXdT1lKSxlPkt1JiYoS3U9ZSkpLGw/dDxYdT9obChZdSx0KT5obChZdSxadSkmJihadT10KTpobCh0LFp1KT5obChZdSxadSkmJihZdT10KTpadT49WXU/KHQ8WXUmJihZdT10KSx0Plp1JiYoWnU9dCkpOnQ+WHU/aGwoWXUsdCk+aGwoWXUsWnUpJiYoWnU9dCk6aGwodCxadSk+aGwoWXUsWnUpJiYoWXU9dCl9ZWxzZSBlbC5wdXNoKG5sPVtZdT10LFp1PXRdKTtlPFd1JiYoV3U9ZSksZT5LdSYmKEt1PWUpLHRsPW4sWHU9dH1mdW5jdGlvbiBzbCgpe3JsLnBvaW50PWFsfWZ1bmN0aW9uIHVsKCl7bmxbMF09WXUsbmxbMV09WnUscmwucG9pbnQ9b2wsdGw9bnVsbH1mdW5jdGlvbiBsbCh0LGUpe2lmKHRsKXt2YXIgbj10LVh1O2lsLmFkZChvdShuKT4xODA/bisobj4wPzM2MDotMzYwKTpuKX1lbHNlICR1PXQsSnU9ZTtQdS5wb2ludCh0LGUpLGFsKHQsZSl9ZnVuY3Rpb24gY2woKXtQdS5saW5lU3RhcnQoKX1mdW5jdGlvbiBmbCgpe2xsKCR1LEp1KSxQdS5saW5lRW5kKCksb3UoaWwpPiRzJiYoWXU9LShadT0xODApKSxubFswXT1ZdSxubFsxXT1adSx0bD1udWxsfWZ1bmN0aW9uIGhsKHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBkbCh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gcGwodCxlKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1lJiZlPD10WzFdOmU8dFswXXx8dFsxXTxlfXZhciBtbCx5bCx2bCxnbCxibCxfbCx3bCx4bCxDbCxTbCxFbCxPbCxrbCxUbCxqbCxBbCxJbD1mdW5jdGlvbih0KXt2YXIgZSxuLGkscixvLGEscztpZihLdT1adT0tKFl1PVd1PTEvMCksZWw9W10sSXUodCxybCksbj1lbC5sZW5ndGgpe2ZvcihlbC5zb3J0KGRsKSxlPTEsbz1baT1lbFswXV07ZTxuOysrZSlwbChpLChyPWVsW2VdKVswXSl8fHBsKGksclsxXSk/KGhsKGlbMF0sclsxXSk+aGwoaVswXSxpWzFdKSYmKGlbMV09clsxXSksaGwoclswXSxpWzFdKT5obChpWzBdLGlbMV0pJiYoaVswXT1yWzBdKSk6by5wdXNoKGk9cik7Zm9yKGE9LTEvMCxlPTAsaT1vW249by5sZW5ndGgtMV07ZTw9bjtpPXIsKytlKShzPWhsKGlbMV0sKHI9b1tlXSlbMF0pKT5hJiYoYT1zLFl1PXJbMF0sWnU9aVsxXSl9cmV0dXJuIGVsPW5sPW51bGwsWXU9PT0xLzB8fFd1PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW1l1LFd1XSxbWnUsS3VdXX0sUmw9e3NwaGVyZTpfdSxwb2ludDpNbCxsaW5lU3RhcnQ6RGwsbGluZUVuZDpMbCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtSbC5saW5lU3RhcnQ9VmwsUmwubGluZUVuZD16bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe1JsLmxpbmVTdGFydD1EbCxSbC5saW5lRW5kPUxsfX07ZnVuY3Rpb24gTWwodCxlKXt0Kj1ydTt2YXIgbj11dShlKj1ydSk7UGwobip1dSh0KSxuKmR1KHQpLGR1KGUpKX1mdW5jdGlvbiBQbCh0LGUsbil7dmwrPSh0LXZsKS8rK21sLGdsKz0oZS1nbCkvbWwsYmwrPShuLWJsKS9tbH1mdW5jdGlvbiBEbCgpe1JsLnBvaW50PU5sfWZ1bmN0aW9uIE5sKHQsZSl7dCo9cnU7dmFyIG49dXUoZSo9cnUpO1RsPW4qdXUodCksamw9bipkdSh0KSxBbD1kdShlKSxSbC5wb2ludD1GbCxQbChUbCxqbCxBbCl9ZnVuY3Rpb24gRmwodCxlKXt0Kj1ydTt2YXIgbj11dShlKj1ydSksaT1uKnV1KHQpLHI9bipkdSh0KSxvPWR1KGUpLGE9c3UobXUoKGE9amwqby1BbCpyKSphKyhhPUFsKmktVGwqbykqYSsoYT1UbCpyLWpsKmkpKmEpLFRsKmkramwqcitBbCpvKTt5bCs9YSxfbCs9YSooVGwrKFRsPWkpKSx3bCs9YSooamwrKGpsPXIpKSx4bCs9YSooQWwrKEFsPW8pKSxQbChUbCxqbCxBbCl9ZnVuY3Rpb24gTGwoKXtSbC5wb2ludD1NbH1mdW5jdGlvbiBWbCgpe1JsLnBvaW50PUJsfWZ1bmN0aW9uIHpsKCl7VWwoT2wsa2wpLFJsLnBvaW50PU1sfWZ1bmN0aW9uIEJsKHQsZSl7T2w9dCxrbD1lLHQqPXJ1LGUqPXJ1LFJsLnBvaW50PVVsO3ZhciBuPXV1KGUpO1RsPW4qdXUodCksamw9bipkdSh0KSxBbD1kdShlKSxQbChUbCxqbCxBbCl9ZnVuY3Rpb24gVWwodCxlKXt0Kj1ydTt2YXIgbj11dShlKj1ydSksaT1uKnV1KHQpLHI9bipkdSh0KSxvPWR1KGUpLGE9amwqby1BbCpyLHM9QWwqaS1UbCpvLHU9VGwqci1qbCppLGw9bXUoYSphK3Mqcyt1KnUpLGM9Z3UobCksZj1sJiYtYy9sO0NsKz1mKmEsU2wrPWYqcyxFbCs9Zip1LHlsKz1jLF9sKz1jKihUbCsoVGw9aSkpLHdsKz1jKihqbCsoamw9cikpLHhsKz1jKihBbCsoQWw9bykpLFBsKFRsLGpsLEFsKX12YXIgSGw9ZnVuY3Rpb24odCl7bWw9eWw9dmw9Z2w9Ymw9X2w9d2w9eGw9Q2w9U2w9RWw9MCxJdSh0LFJsKTt2YXIgZT1DbCxuPVNsLGk9RWwscj1lKmUrbipuK2kqaTtyZXR1cm4gcjwxZS0xMiYmKGU9X2wsbj13bCxpPXhsLHlsPCRzJiYoZT12bCxuPWdsLGk9YmwpLChyPWUqZStuKm4raSppKTwxZS0xMik/W05hTixOYU5dOltzdShuLGUpKml1LGd1KGkvbXUocikpKml1XX0scWw9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxHbD1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4obixpKXtyZXR1cm4gbj10KG4saSksZShuWzBdLG5bMV0pfXJldHVybiB0LmludmVydCYmZS5pbnZlcnQmJihuLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybihuPWUuaW52ZXJ0KG4saSkpJiZ0LmludmVydChuWzBdLG5bMV0pfSksbn07ZnVuY3Rpb24gUWwodCxlKXtyZXR1cm5bdD5Kcz90LW51OnQ8LUpzP3QrbnU6dCxlXX1mdW5jdGlvbiBZbCh0LGUsbil7cmV0dXJuKHQlPW51KT9lfHxuP0dsKFpsKHQpLEtsKGUsbikpOlpsKHQpOmV8fG4/S2woZSxuKTpRbH1mdW5jdGlvbiBXbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm5bKGUrPXQpPkpzP2UtbnU6ZTwtSnM/ZStudTplLG5dfX1mdW5jdGlvbiBabCh0KXt2YXIgZT1XbCh0KTtyZXR1cm4gZS5pbnZlcnQ9V2woLXQpLGV9ZnVuY3Rpb24gS2wodCxlKXt2YXIgbj11dSh0KSxpPWR1KHQpLHI9dXUoZSksbz1kdShlKTtmdW5jdGlvbiBhKHQsZSl7dmFyIGE9dXUoZSkscz11dSh0KSphLHU9ZHUodCkqYSxsPWR1KGUpLGM9bCpuK3MqaTtyZXR1cm5bc3UodSpyLWMqbyxzKm4tbCppKSxndShjKnIrdSpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIGE9dXUoZSkscz11dSh0KSphLHU9ZHUodCkqYSxsPWR1KGUpLGM9bCpyLXUqbztyZXR1cm5bc3UodSpyK2wqbyxzKm4rYyppKSxndShjKm4tcyppKV19LGF9UWwuaW52ZXJ0PVFsO3ZhciBYbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpydSxlWzFdKnJ1KSlbMF0qPWl1LGVbMV0qPWl1LGV9cmV0dXJuIHQ9WWwodFswXSpydSx0WzFdKnJ1LHQubGVuZ3RoPjI/dFsyXSpydTowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKnJ1LGVbMV0qcnUpKVswXSo9aXUsZVsxXSo9aXUsZX0sZX07ZnVuY3Rpb24gJGwodCxlLG4saSxyLG8pe2lmKG4pe3ZhciBhPXV1KGUpLHM9ZHUoZSksdT1pKm47bnVsbD09cj8ocj1lK2kqbnUsbz1lLXUvMik6KHI9SmwoYSxyKSxvPUpsKGEsbyksKGk+MD9yPG86cj5vKSYmKHIrPWkqbnUpKTtmb3IodmFyIGwsYz1yO2k+MD9jPm86YzxvO2MtPXUpbD16dShbYSwtcyp1dShjKSwtcypkdShjKV0pLHQucG9pbnQobFswXSxsWzFdKX19ZnVuY3Rpb24gSmwodCxlKXsoZT1CdShlKSlbMF0tPXQsUXUoZSk7dmFyIG49dnUoLWVbMV0pO3JldHVybigoLWVbMl08MD8tbjpuKStudS0kcyklbnV9dmFyIHRjPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPXFsKFswLDBdKSxpPXFsKDkwKSxyPXFsKDYpLG89e3BvaW50OmZ1bmN0aW9uKG4saSl7dC5wdXNoKG49ZShuLGkpKSxuWzBdKj1pdSxuWzFdKj1pdX19O2Z1bmN0aW9uIGEoKXt2YXIgYT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKnJ1LHU9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykqcnU7cmV0dXJuIHQ9W10sZT1ZbCgtYVswXSpydSwtYVsxXSpydSwwKS5pbnZlcnQsJGwobyxzLHUsMSksYT17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxhfXJldHVybiBhLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnFsKFsrdFswXSwrdFsxXV0pLGEpOm59LGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cWwoK3QpLGEpOml9LGEucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cWwoK3QpLGEpOnJ9LGF9LGVjPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuKXt0LnB1c2goW2Usbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6X3UscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19LG5jPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG91KHRbMF0tZVswXSk8JHMmJm91KHRbMV0tZVsxXSk8JHN9O2Z1bmN0aW9uIGljKHQsZSxuLGkpe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1uLHRoaXMuZT1pLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9dmFyIHJjPWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG8sYSxzPVtdLHU9W107aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxuLGk9dFswXSxhPXRbZV07aWYobmMoaSxhKSl7Zm9yKHIubGluZVN0YXJ0KCksbz0wO288ZTsrK28pci5wb2ludCgoaT10W29dKVswXSxpWzFdKTtyLmxpbmVFbmQoKX1lbHNlIHMucHVzaChuPW5ldyBpYyhpLHQsbnVsbCwhMCkpLHUucHVzaChuLm89bmV3IGljKGksbnVsbCxuLCExKSkscy5wdXNoKG49bmV3IGljKGEsdCxudWxsLCExKSksdS5wdXNoKG4ubz1uZXcgaWMoYSxudWxsLG4sITApKX19KSxzLmxlbmd0aCl7Zm9yKHUuc29ydChlKSxvYyhzKSxvYyh1KSxvPTAsYT11Lmxlbmd0aDtvPGE7KytvKXVbb10uZT1uPSFuO2Zvcih2YXIgbCxjLGY9c1swXTs7KXtmb3IodmFyIGg9ZixkPSEwO2gudjspaWYoKGg9aC5uKT09PWYpcmV0dXJuO2w9aC56LHIubGluZVN0YXJ0KCk7ZG97aWYoaC52PWguby52PSEwLGguZSl7aWYoZClmb3Iobz0wLGE9bC5sZW5ndGg7bzxhOysrbylyLnBvaW50KChjPWxbb10pWzBdLGNbMV0pO2Vsc2UgaShoLngsaC5uLngsMSxyKTtoPWgubn1lbHNle2lmKGQpZm9yKG89KGw9aC5wLnopLmxlbmd0aC0xO28+PTA7LS1vKXIucG9pbnQoKGM9bFtvXSlbMF0sY1sxXSk7ZWxzZSBpKGgueCxoLnAueCwtMSxyKTtoPWgucH1sPShoPWgubykueixkPSFkfXdoaWxlKCFoLnYpO3IubGluZUVuZCgpfX19O2Z1bmN0aW9uIG9jKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLGk9MCxyPXRbMF07KytpPGU7KXIubj1uPXRbaV0sbi5wPXIscj1uO3Iubj1uPXRbMF0sbi5wPXJ9fXZhciBhYz1XcygpLHNjPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVswXSxpPWVbMV0scj1kdShpKSxvPVtkdShuKSwtdXUobiksMF0sYT0wLHM9MDthYy5yZXNldCgpLDE9PT1yP2k9dHUrJHM6LTE9PT1yJiYoaT0tdHUtJHMpO2Zvcih2YXIgdT0wLGw9dC5sZW5ndGg7dTxsOysrdSlpZihmPShjPXRbdV0pLmxlbmd0aClmb3IodmFyIGMsZixoPWNbZi0xXSxkPWhbMF0scD1oWzFdLzIrZXUsbT1kdShwKSx5PXV1KHApLHY9MDt2PGY7Kyt2LGQ9YixtPXcseT14LGg9Zyl7dmFyIGc9Y1t2XSxiPWdbMF0sXz1nWzFdLzIrZXUsdz1kdShfKSx4PXV1KF8pLEM9Yi1kLFM9Qz49MD8xOi0xLEU9UypDLE89RT5KcyxrPW0qdztpZihhYy5hZGQoc3UoaypTKmR1KEUpLHkqeCtrKnV1KEUpKSksYSs9Tz9DK1MqbnU6QyxPXmQ+PW5eYj49bil7dmFyIFQ9SHUoQnUoaCksQnUoZykpO1F1KFQpO3ZhciBqPUh1KG8sVCk7UXUoaik7dmFyIEE9KE9eQz49MD8tMToxKSpndShqWzJdKTsoaT5BfHxpPT09QSYmKFRbMF18fFRbMV0pKSYmKHMrPU9eQz49MD8xOi0xKX19cmV0dXJuKGE8LSRzfHxhPCRzJiZhYzwtJHMpXjEmc30sdWM9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvLGEscyx1PWUociksbD1lYygpLGM9ZShsKSxmPSExLGg9e3BvaW50OmQsbGluZVN0YXJ0Om0sbGluZUVuZDp5LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2gucG9pbnQ9dixoLmxpbmVTdGFydD1nLGgubGluZUVuZD1iLGE9W10sbz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2gucG9pbnQ9ZCxoLmxpbmVTdGFydD1tLGgubGluZUVuZD15LGE9RihhKTt2YXIgdD1zYyhvLGkpO2EubGVuZ3RoPyhmfHwoci5wb2x5Z29uU3RhcnQoKSxmPSEwKSxyYyhhLGNjLHQsbixyKSk6dCYmKGZ8fChyLnBvbHlnb25TdGFydCgpLGY9ITApLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSksZiYmKHIucG9seWdvbkVuZCgpLGY9ITEpLGE9bz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtyLnBvbHlnb25TdGFydCgpLHIubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxyKSxyLmxpbmVFbmQoKSxyLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIGQoZSxuKXt0KGUsbikmJnIucG9pbnQoZSxuKX1mdW5jdGlvbiBwKHQsZSl7dS5wb2ludCh0LGUpfWZ1bmN0aW9uIG0oKXtoLnBvaW50PXAsdS5saW5lU3RhcnQoKX1mdW5jdGlvbiB5KCl7aC5wb2ludD1kLHUubGluZUVuZCgpfWZ1bmN0aW9uIHYodCxlKXtzLnB1c2goW3QsZV0pLGMucG9pbnQodCxlKX1mdW5jdGlvbiBnKCl7Yy5saW5lU3RhcnQoKSxzPVtdfWZ1bmN0aW9uIGIoKXt2KHNbMF1bMF0sc1swXVsxXSksYy5saW5lRW5kKCk7dmFyIHQsZSxuLGksdT1jLmNsZWFuKCksaD1sLnJlc3VsdCgpLGQ9aC5sZW5ndGg7aWYocy5wb3AoKSxvLnB1c2gocykscz1udWxsLGQpaWYoMSZ1KXtpZigoZT0obj1oWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKGZ8fChyLnBvbHlnb25TdGFydCgpLGY9ITApLHIubGluZVN0YXJ0KCksdD0wO3Q8ZTsrK3Qpci5wb2ludCgoaT1uW3RdKVswXSxpWzFdKTtyLmxpbmVFbmQoKX19ZWxzZSBkPjEmJjImdSYmaC5wdXNoKGgucG9wKCkuY29uY2F0KGguc2hpZnQoKSkpLGEucHVzaChoLmZpbHRlcihsYykpfXJldHVybiBofX07ZnVuY3Rpb24gbGModCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gY2ModCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tdHUtJHM6dHUtdFsxXSktKChlPWUueClbMF08MD9lWzFdLXR1LSRzOnR1LWVbMV0pfXZhciBmYz11YyhmdW5jdGlvbigpe3JldHVybiEwfSxmdW5jdGlvbih0KXt2YXIgZSxuPU5hTixpPU5hTixyPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP0pzOi1Kcyx1PW91KG8tbik7b3UodS1Kcyk8JHM/KHQucG9pbnQobixpPShpK2EpLzI+MD90dTotdHUpLHQucG9pbnQocixpKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxpKSx0LnBvaW50KG8saSksZT0wKTpyIT09cyYmdT49SnMmJihvdShuLXIpPCRzJiYobi09ciokcyksb3Uoby1zKTwkcyYmKG8tPXMqJHMpLGk9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHIsbyxhPWR1KHQtbik7cmV0dXJuIG91KGEpPiRzP2F1KChkdShlKSoobz11dShpKSkqZHUobiktZHUoaSkqKHI9dXUoZSkpKmR1KHQpKS8ocipvKmEpKTooZStpKS8yfShuLGksbyxhKSx0LnBvaW50KHIsaSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsaSksZT0wKSx0LnBvaW50KG49byxpPWEpLHI9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLG49aT1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSxmdW5jdGlvbih0LGUsbixpKXt2YXIgcjtpZihudWxsPT10KWkucG9pbnQoLUpzLHI9bip0dSksaS5wb2ludCgwLHIpLGkucG9pbnQoSnMsciksaS5wb2ludChKcywwKSxpLnBvaW50KEpzLC1yKSxpLnBvaW50KDAsLXIpLGkucG9pbnQoLUpzLC1yKSxpLnBvaW50KC1KcywwKSxpLnBvaW50KC1KcyxyKTtlbHNlIGlmKG91KHRbMF0tZVswXSk+JHMpe3ZhciBvPXRbMF08ZVswXT9KczotSnM7aS5wb2ludCgtbyxyPW4qby8yKSxpLnBvaW50KDAsciksaS5wb2ludChvLHIpfWVsc2UgaS5wb2ludChlWzBdLGVbMV0pfSxbLUpzLC10dV0pLGhjPWZ1bmN0aW9uKHQpe3ZhciBlPXV1KHQpLG49NipydSxpPWU+MCxyPW91KGUpPiRzO2Z1bmN0aW9uIG8odCxuKXtyZXR1cm4gdXUodCkqdXUobik+ZX1mdW5jdGlvbiBhKHQsbixpKXt2YXIgcj1bMSwwLDBdLG89SHUoQnUodCksQnUobikpLGE9VXUobyxvKSxzPW9bMF0sdT1hLXMqcztpZighdSlyZXR1cm4haSYmdDt2YXIgbD1lKmEvdSxjPS1lKnMvdSxmPUh1KHIsbyksaD1HdShyLGwpO3F1KGgsR3UobyxjKSk7dmFyIGQ9ZixwPVV1KGgsZCksbT1VdShkLGQpLHk9cCpwLW0qKFV1KGgsaCktMSk7aWYoISh5PDApKXt2YXIgdj1tdSh5KSxnPUd1KGQsKC1wLXYpL20pO2lmKHF1KGcsaCksZz16dShnKSwhaSlyZXR1cm4gZzt2YXIgYixfPXRbMF0sdz1uWzBdLHg9dFsxXSxDPW5bMV07dzxfJiYoYj1fLF89dyx3PWIpO3ZhciBTPXctXyxFPW91KFMtSnMpPCRzO2lmKCFFJiZDPHgmJihiPXgseD1DLEM9YiksRXx8Uzwkcz9FP3grQz4wXmdbMV08KG91KGdbMF0tXyk8JHM/eDpDKTp4PD1nWzFdJiZnWzFdPD1DOlM+SnNeKF88PWdbMF0mJmdbMF08PXcpKXt2YXIgTz1HdShkLCgtcCt2KS9tKTtyZXR1cm4gcXUoTyxoKSxbZyx6dShPKV19fX1mdW5jdGlvbiBzKGUsbil7dmFyIHI9aT90OkpzLXQsbz0wO3JldHVybiBlPC1yP298PTE6ZT5yJiYob3w9Miksbjwtcj9vfD00Om4+ciYmKG98PTgpLG99cmV0dXJuIHVjKG8sZnVuY3Rpb24odCl7dmFyIGUsbix1LGwsYztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7bD11PSExLGM9MX0scG9pbnQ6ZnVuY3Rpb24oZixoKXt2YXIgZCxwPVtmLGhdLG09byhmLGgpLHk9aT9tPzA6cyhmLGgpOm0/cyhmKyhmPDA/SnM6LUpzKSxoKTowO2lmKCFlJiYobD11PW0pJiZ0LmxpbmVTdGFydCgpLG0hPT11JiYoIShkPWEoZSxwKSl8fG5jKGUsZCl8fG5jKHAsZCkpJiYocFswXSs9JHMscFsxXSs9JHMsbT1vKHBbMF0scFsxXSkpLG0hPT11KWM9MCxtPyh0LmxpbmVTdGFydCgpLGQ9YShwLGUpLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9YShlLHApLHQucG9pbnQoZFswXSxkWzFdKSx0LmxpbmVFbmQoKSksZT1kO2Vsc2UgaWYociYmZSYmaV5tKXt2YXIgdjt5Jm58fCEodj1hKHAsZSwhMCkpfHwoYz0wLGk/KHQubGluZVN0YXJ0KCksdC5wb2ludCh2WzBdWzBdLHZbMF1bMV0pLHQucG9pbnQodlsxXVswXSx2WzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQodlsxXVswXSx2WzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSkpfSFtfHxlJiZuYyhlLHApfHx0LnBvaW50KHBbMF0scFsxXSksZT1wLHU9bSxuPXl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt1JiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGN8KGwmJnUpPDwxfX19LGZ1bmN0aW9uKGUsaSxyLG8peyRsKG8sdCxuLHIsZSxpKX0saT9bMCwtdF06Wy1Kcyx0LUpzXSl9LGRjPWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYSxzPXRbMF0sdT10WzFdLGw9MCxjPTEsZj1lWzBdLXMsaD1lWzFdLXU7aWYoYT1uLXMsZnx8IShhPjApKXtpZihhLz1mLGY8MCl7aWYoYTxsKXJldHVybjthPGMmJihjPWEpfWVsc2UgaWYoZj4wKXtpZihhPmMpcmV0dXJuO2E+bCYmKGw9YSl9aWYoYT1yLXMsZnx8IShhPDApKXtpZihhLz1mLGY8MCl7aWYoYT5jKXJldHVybjthPmwmJihsPWEpfWVsc2UgaWYoZj4wKXtpZihhPGwpcmV0dXJuO2E8YyYmKGM9YSl9aWYoYT1pLXUsaHx8IShhPjApKXtpZihhLz1oLGg8MCl7aWYoYTxsKXJldHVybjthPGMmJihjPWEpfWVsc2UgaWYoaD4wKXtpZihhPmMpcmV0dXJuO2E+bCYmKGw9YSl9aWYoYT1vLXUsaHx8IShhPDApKXtpZihhLz1oLGg8MCl7aWYoYT5jKXJldHVybjthPmwmJihsPWEpfWVsc2UgaWYoaD4wKXtpZihhPGwpcmV0dXJuO2E8YyYmKGM9YSl9cmV0dXJuIGw+MCYmKHRbMF09cytsKmYsdFsxXT11K2wqaCksYzwxJiYoZVswXT1zK2MqZixlWzFdPXUrYypoKSwhMH19fX19LHBjPTFlOSxtYz0tcGM7ZnVuY3Rpb24geWModCxlLG4saSl7ZnVuY3Rpb24gcihyLG8pe3JldHVybiB0PD1yJiZyPD1uJiZlPD1vJiZvPD1pfWZ1bmN0aW9uIG8ocixvLHMsbCl7dmFyIGM9MCxmPTA7aWYobnVsbD09cnx8KGM9YShyLHMpKSE9PShmPWEobyxzKSl8fHUocixvKTwwXnM+MClkb3tsLnBvaW50KDA9PT1jfHwzPT09Yz90Om4sYz4xP2k6ZSl9d2hpbGUoKGM9KGMrcys0KSU0KSE9PWYpO2Vsc2UgbC5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIGEoaSxyKXtyZXR1cm4gb3UoaVswXS10KTwkcz9yPjA/MDozOm91KGlbMF0tbik8JHM/cj4wPzI6MTpvdShpWzFdLWUpPCRzP3I+MD8xOjA6cj4wPzM6Mn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHUodC54LGUueCl9ZnVuY3Rpb24gdSh0LGUpe3ZhciBuPWEodCwxKSxpPWEoZSwxKTtyZXR1cm4gbiE9PWk/bi1pOjA9PT1uP2VbMV0tdFsxXToxPT09bj90WzBdLWVbMF06Mj09PW4/dFsxXS1lWzFdOmVbMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24oYSl7dmFyIHUsbCxjLGYsaCxkLHAsbSx5LHYsZyxiPWEsXz1lYygpLHc9e3BvaW50OngsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dy5wb2ludD1DLGwmJmwucHVzaChjPVtdKSx2PSEwLHk9ITEscD1tPU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe3UmJihDKGYsaCksZCYmeSYmXy5yZWpvaW4oKSx1LnB1c2goXy5yZXN1bHQoKSkpLHcucG9pbnQ9eCx5JiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj1fLHU9W10sbD1bXSxnPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPTAscj1sLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgbyxhLHM9bFtuXSx1PTEsYz1zLmxlbmd0aCxmPXNbMF0saD1mWzBdLGQ9ZlsxXTt1PGM7Kyt1KW89aCxhPWQsaD0oZj1zW3VdKVswXSxkPWZbMV0sYTw9aT9kPmkmJihoLW8pKihpLWEpPihkLWEpKih0LW8pJiYrK2U6ZDw9aSYmKGgtbykqKGktYSk8KGQtYSkqKHQtbykmJi0tZTtyZXR1cm4gZX0oKSxuPWcmJmUscj0odT1GKHUpKS5sZW5ndGg7KG58fHIpJiYoYS5wb2x5Z29uU3RhcnQoKSxuJiYoYS5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSxyJiZyYyh1LHMsZSxvLGEpLGEucG9seWdvbkVuZCgpKSxiPWEsdT1sPWM9bnVsbH19O2Z1bmN0aW9uIHgodCxlKXtyKHQsZSkmJmIucG9pbnQodCxlKX1mdW5jdGlvbiBDKG8sYSl7dmFyIHM9cihvLGEpO2lmKGwmJmMucHVzaChbbyxhXSksdilmPW8saD1hLGQ9cyx2PSExLHMmJihiLmxpbmVTdGFydCgpLGIucG9pbnQobyxhKSk7ZWxzZSBpZihzJiZ5KWIucG9pbnQobyxhKTtlbHNle3ZhciB1PVtwPU1hdGgubWF4KG1jLE1hdGgubWluKHBjLHApKSxtPU1hdGgubWF4KG1jLE1hdGgubWluKHBjLG0pKV0sXz1bbz1NYXRoLm1heChtYyxNYXRoLm1pbihwYyxvKSksYT1NYXRoLm1heChtYyxNYXRoLm1pbihwYyxhKSldO2RjKHUsXyx0LGUsbixpKT8oeXx8KGIubGluZVN0YXJ0KCksYi5wb2ludCh1WzBdLHVbMV0pKSxiLnBvaW50KF9bMF0sX1sxXSksc3x8Yi5saW5lRW5kKCksZz0hMSk6cyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChvLGEpLGc9ITEpfXA9byxtPWEseT1zfXJldHVybiB3fX12YXIgdmMsZ2MsYmMsX2M9ZnVuY3Rpb24oKXt2YXIgdCxlLG4saT0wLHI9MCxvPTk2MCxhPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9eWMoaSxyLG8sYSkoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStzWzBdWzBdLHI9K3NbMF1bMV0sbz0rc1sxXVswXSxhPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbaSxyXSxbbyxhXV19fX0sd2M9V3MoKSx4Yz17c3BoZXJlOl91LHBvaW50Ol91LGxpbmVTdGFydDpmdW5jdGlvbigpe3hjLnBvaW50PVNjLHhjLmxpbmVFbmQ9Q2N9LGxpbmVFbmQ6X3UscG9seWdvblN0YXJ0Ol91LHBvbHlnb25FbmQ6X3V9O2Z1bmN0aW9uIENjKCl7eGMucG9pbnQ9eGMubGluZUVuZD1fdX1mdW5jdGlvbiBTYyh0LGUpe3ZjPXQqPXJ1LGdjPWR1KGUqPXJ1KSxiYz11dShlKSx4Yy5wb2ludD1FY31mdW5jdGlvbiBFYyh0LGUpe3QqPXJ1O3ZhciBuPWR1KGUqPXJ1KSxpPXV1KGUpLHI9b3UodC12Yyksbz11dShyKSxhPWkqZHUocikscz1iYypuLWdjKmkqbyx1PWdjKm4rYmMqaSpvO3djLmFkZChzdShtdShhKmErcypzKSx1KSksdmM9dCxnYz1uLGJjPWl9dmFyIE9jPWZ1bmN0aW9uKHQpe3JldHVybiB3Yy5yZXNldCgpLEl1KHQseGMpLCt3Y30sa2M9W251bGwsbnVsbF0sVGM9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmtjfSxqYz1mdW5jdGlvbih0LGUpe3JldHVybiBrY1swXT10LGtjWzFdPWUsT2MoVGMpfSxBYz17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBSYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoUmMobltpXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LEljPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWModC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoTWMobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBQYyh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKFBjKG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gRGModC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihEYyhuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoUmMobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIFJjKHQsZSl7cmV0dXJuISghdHx8IUljLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZJY1t0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gTWModCxlKXtyZXR1cm4gMD09PWpjKHQsZSl9ZnVuY3Rpb24gUGModCxlKXt2YXIgbj1qYyh0WzBdLHRbMV0pO3JldHVybiBqYyh0WzBdLGUpK2pjKGUsdFsxXSk8PW4rJHN9ZnVuY3Rpb24gRGModCxlKXtyZXR1cm4hIXNjKHQubWFwKE5jKSxGYyhlKSl9ZnVuY3Rpb24gTmModCl7cmV0dXJuKHQ9dC5tYXAoRmMpKS5wb3AoKSx0fWZ1bmN0aW9uIEZjKHQpe3JldHVyblt0WzBdKnJ1LHRbMV0qcnVdfXZhciBMYz1mdW5jdGlvbih0LGUpe3JldHVybih0JiZBYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0FjW3QudHlwZV06UmMpKHQsZSl9O2Z1bmN0aW9uIFZjKHQsZSxuKXt2YXIgaT14KHQsZS0kcyxuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pfX1mdW5jdGlvbiB6Yyh0LGUsbil7dmFyIGk9eCh0LGUtJHMsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KX19ZnVuY3Rpb24gQmMoKXt2YXIgdCxlLG4saSxyLG8sYSxzLHUsbCxjLGYsaD0xMCxkPWgscD05MCxtPTM2MCx5PTIuNTtmdW5jdGlvbiB2KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6ZygpfX1mdW5jdGlvbiBnKCl7cmV0dXJuIHgobHUoaS9wKSpwLG4scCkubWFwKGMpLmNvbmNhdCh4KGx1KHMvbSkqbSxhLG0pLm1hcChmKSkuY29uY2F0KHgobHUoZS9oKSpoLHQsaCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBvdSh0JXApPiRzfSkubWFwKHUpKS5jb25jYXQoeChsdShvL2QpKmQscixkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG91KHQlbSk+JHN9KS5tYXAobCkpfXJldHVybiB2LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGcoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSl9LHYub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbYyhpKS5jb25jYXQoZihhKS5zbGljZSgxKSxjKG4pLnJldmVyc2UoKS5zbGljZSgxKSxmKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sdi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/di5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTp2LmV4dGVudE1pbm9yKCl9LHYuZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3RbMF1bMV0sYT0rdFsxXVsxXSwoaT0rdFswXVswXSk+KG49K3RbMV1bMF0pJiYodD1pLGk9bixuPXQpLHM+YSYmKHQ9cyxzPWEsYT10KSx2LnByZWNpc2lvbih5KSk6W1tpLHNdLFtuLGFdXX0sdi5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rblswXVsxXSxyPStuWzFdWzFdLChlPStuWzBdWzBdKT4odD0rblsxXVswXSkmJihuPWUsZT10LHQ9biksbz5yJiYobj1vLG89cixyPW4pLHYucHJlY2lzaW9uKHkpKTpbW2Usb10sW3Qscl1dfSx2LnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/di5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOnYuc3RlcE1pbm9yKCl9LHYuc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLG09K3RbMV0sdik6W3AsbV19LHYuc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0sdik6W2gsZF19LHYucHJlY2lzaW9uPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStoLHU9VmMobyxyLDkwKSxsPXpjKGUsdCx5KSxjPVZjKHMsYSw5MCksZj16YyhpLG4seSksdik6eX0sdi5leHRlbnRNYWpvcihbWy0xODAsLTkwKyRzXSxbMTgwLDkwLSRzXV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAtJHNdLFsxODAsODArJHNdXSl9ZnVuY3Rpb24gVWMoKXtyZXR1cm4gQmMoKSgpfXZhciBIYyxxYyxHYyxRYyxZYz1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMF0qcnUsaT10WzFdKnJ1LHI9ZVswXSpydSxvPWVbMV0qcnUsYT11dShpKSxzPWR1KGkpLHU9dXUobyksbD1kdShvKSxjPWEqdXUobiksZj1hKmR1KG4pLGg9dSp1dShyKSxkPXUqZHUocikscD0yKmd1KG11KGJ1KG8taSkrYSp1KmJ1KHItbikpKSxtPWR1KHApLHk9cD9mdW5jdGlvbih0KXt2YXIgZT1kdSh0Kj1wKS9tLG49ZHUocC10KS9tLGk9bipjK2UqaCxyPW4qZitlKmQsbz1uKnMrZSpsO3JldHVybltzdShyLGkpKml1LHN1KG8sbXUoaSppK3IqcikpKml1XX06ZnVuY3Rpb24oKXtyZXR1cm5bbippdSxpKml1XX07cmV0dXJuIHkuZGlzdGFuY2U9cCx5fSxXYz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sWmM9V3MoKSxLYz1XcygpLFhjPXtwb2ludDpfdSxsaW5lU3RhcnQ6X3UsbGluZUVuZDpfdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtYYy5saW5lU3RhcnQ9JGMsWGMubGluZUVuZD1lZn0scG9seWdvbkVuZDpmdW5jdGlvbigpe1hjLmxpbmVTdGFydD1YYy5saW5lRW5kPVhjLnBvaW50PV91LFpjLmFkZChvdShLYykpLEtjLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVpjLzI7cmV0dXJuIFpjLnJlc2V0KCksdH19O2Z1bmN0aW9uICRjKCl7WGMucG9pbnQ9SmN9ZnVuY3Rpb24gSmModCxlKXtYYy5wb2ludD10ZixIYz1HYz10LHFjPVFjPWV9ZnVuY3Rpb24gdGYodCxlKXtLYy5hZGQoUWMqdC1HYyplKSxHYz10LFFjPWV9ZnVuY3Rpb24gZWYoKXt0ZihIYyxxYyl9dmFyIG5mLHJmLG9mLGFmLHNmPVhjLHVmPTEvMCxsZj11ZixjZj0tdWYsZmY9Y2YsaGY9e3BvaW50OmZ1bmN0aW9uKHQsZSl7dDx1ZiYmKHVmPXQpLHQ+Y2YmJihjZj10KSxlPGxmJiYobGY9ZSksZT5mZiYmKGZmPWUpfSxsaW5lU3RhcnQ6X3UsbGluZUVuZDpfdSxwb2x5Z29uU3RhcnQ6X3UscG9seWdvbkVuZDpfdSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW3VmLGxmXSxbY2YsZmZdXTtyZXR1cm4gY2Y9ZmY9LShsZj11Zj0xLzApLHR9fSxkZj0wLHBmPTAsbWY9MCx5Zj0wLHZmPTAsZ2Y9MCxiZj0wLF9mPTAsd2Y9MCx4Zj17cG9pbnQ6Q2YsbGluZVN0YXJ0OlNmLGxpbmVFbmQ6a2YscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eGYubGluZVN0YXJ0PVRmLHhmLmxpbmVFbmQ9amZ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt4Zi5wb2ludD1DZix4Zi5saW5lU3RhcnQ9U2YseGYubGluZUVuZD1rZn0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9d2Y/W2JmL3dmLF9mL3dmXTpnZj9beWYvZ2YsdmYvZ2ZdOm1mP1tkZi9tZixwZi9tZl06W05hTixOYU5dO3JldHVybiBkZj1wZj1tZj15Zj12Zj1nZj1iZj1fZj13Zj0wLHR9fTtmdW5jdGlvbiBDZih0LGUpe2RmKz10LHBmKz1lLCsrbWZ9ZnVuY3Rpb24gU2YoKXt4Zi5wb2ludD1FZn1mdW5jdGlvbiBFZih0LGUpe3hmLnBvaW50PU9mLENmKG9mPXQsYWY9ZSl9ZnVuY3Rpb24gT2YodCxlKXt2YXIgbj10LW9mLGk9ZS1hZixyPW11KG4qbitpKmkpO3lmKz1yKihvZit0KS8yLHZmKz1yKihhZitlKS8yLGdmKz1yLENmKG9mPXQsYWY9ZSl9ZnVuY3Rpb24ga2YoKXt4Zi5wb2ludD1DZn1mdW5jdGlvbiBUZigpe3hmLnBvaW50PUFmfWZ1bmN0aW9uIGpmKCl7SWYobmYscmYpfWZ1bmN0aW9uIEFmKHQsZSl7eGYucG9pbnQ9SWYsQ2YobmY9b2Y9dCxyZj1hZj1lKX1mdW5jdGlvbiBJZih0LGUpe3ZhciBuPXQtb2YsaT1lLWFmLHI9bXUobipuK2kqaSk7eWYrPXIqKG9mK3QpLzIsdmYrPXIqKGFmK2UpLzIsZ2YrPXIsYmYrPShyPWFmKnQtb2YqZSkqKG9mK3QpLF9mKz1yKihhZitlKSx3Zis9MypyLENmKG9mPXQsYWY9ZSl9dmFyIFJmPXhmO2Z1bmN0aW9uIE1mKHQpe3RoaXMuX2NvbnRleHQ9dH1NZi5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYWRpdXM9dCx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0K3RoaXMuX3JhZGl1cyxlKSx0aGlzLl9jb250ZXh0LmFyYyh0LGUsdGhpcy5fcmFkaXVzLDAsbnUpfX0scmVzdWx0Ol91fTt2YXIgUGYsRGYsTmYsRmYsTGYsVmY9V3MoKSx6Zj17cG9pbnQ6X3UsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7emYucG9pbnQ9QmZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtQZiYmVWYoRGYsTmYpLHpmLnBvaW50PV91fSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtQZj0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe1BmPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PStWZjtyZXR1cm4gVmYucmVzZXQoKSx0fX07ZnVuY3Rpb24gQmYodCxlKXt6Zi5wb2ludD1VZixEZj1GZj10LE5mPUxmPWV9ZnVuY3Rpb24gVWYodCxlKXtWZi5hZGQobXUoKEZmLT10KSpGZisoTGYtPWUpKkxmKSksRmY9dCxMZj1lfXZhciBIZj16ZjtmdW5jdGlvbiBxZigpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBHZih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1xZi5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6R2YoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT1HZih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19O3ZhciBRZj1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj00LjU7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksSXUodCxuKGkpKSksaS5yZXN1bHQoKX1yZXR1cm4gby5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBJdSh0LG4oc2YpKSxzZi5yZXN1bHQoKX0sby5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBJdSh0LG4oSGYpKSxIZi5yZXN1bHQoKX0sby5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIEl1KHQsbihoZikpLGhmLnJlc3VsdCgpfSxvLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBJdSh0LG4oUmYpKSxSZi5yZXN1bHQoKX0sby5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxXYyk6KHQ9ZSkuc3RyZWFtLG8pOnR9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10PyhlPW51bGwsbmV3IHFmKTpuZXcgTWYoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgciYmaS5wb2ludFJhZGl1cyhyKSxvKTplfSxvLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxvKTpyfSxvLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sWWY9ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpXZih0KX19O2Z1bmN0aW9uIFdmKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgWmY7Zm9yKHZhciBpIGluIHQpbltpXT10W2ldO3JldHVybiBuLnN0cmVhbT1lLG59fWZ1bmN0aW9uIFpmKCl7fWZ1bmN0aW9uIEtmKHQsZSxuKXt2YXIgaT10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1pJiZ0LmNsaXBFeHRlbnQobnVsbCksSXUobix0LnN0cmVhbShoZikpLGUoaGYucmVzdWx0KCkpLG51bGwhPWkmJnQuY2xpcEV4dGVudChpKSx0fWZ1bmN0aW9uIFhmKHQsZSxuKXtyZXR1cm4gS2YodCxmdW5jdGlvbihuKXt2YXIgaT1lWzFdWzBdLWVbMF1bMF0scj1lWzFdWzFdLWVbMF1bMV0sbz1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLHIvKG5bMV1bMV0tblswXVsxXSkpLGE9K2VbMF1bMF0rKGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPStlWzBdWzFdKyhyLW8qKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0sbil9ZnVuY3Rpb24gJGYodCxlLG4pe3JldHVybiBYZih0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBKZih0LGUsbil7cmV0dXJuIEtmKHQsZnVuY3Rpb24obil7dmFyIGk9K2Uscj1pLyhuWzFdWzBdLW5bMF1bMF0pLG89KGktciooblsxXVswXStuWzBdWzBdKSkvMixhPS1yKm5bMF1bMV07dC5zY2FsZSgxNTAqcikudHJhbnNsYXRlKFtvLGFdKX0sbil9ZnVuY3Rpb24gdGgodCxlLG4pe3JldHVybiBLZih0LGZ1bmN0aW9uKG4pe3ZhciBpPStlLHI9aS8oblsxXVsxXS1uWzBdWzFdKSxvPS1yKm5bMF1bMF0sYT0oaS1yKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKnIpLnRyYW5zbGF0ZShbbyxhXSl9LG4pfVpmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WmYscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIGVoPTE2LG5oPXV1KDMwKnJ1KSxpaD1mdW5jdGlvbih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihpLHIsbyxhLHMsdSxsLGMsZixoLGQscCxtLHkpe3ZhciB2PWwtaSxnPWMtcixiPXYqditnKmc7aWYoYj40KmUmJm0tLSl7dmFyIF89YStoLHc9cytkLHg9dStwLEM9bXUoXypfK3cqdyt4KngpLFM9Z3UoeC89QyksRT1vdShvdSh4KS0xKTwkc3x8b3Uoby1mKTwkcz8obytmKS8yOnN1KHcsXyksTz10KEUsUyksaz1PWzBdLFQ9T1sxXSxqPWstaSxBPVQtcixJPWcqai12KkE7KEkqSS9iPmV8fG91KCh2KmorZypBKS9iLS41KT4uM3x8YSpoK3MqZCt1KnA8bmgpJiYobihpLHIsbyxhLHMsdSxrLFQsRSxfLz1DLHcvPUMseCxtLHkpLHkucG9pbnQoayxUKSxuKGssVCxFLF8sdyx4LGwsYyxmLGgsZCxwLG0seSkpfX1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGkscixvLGEscyx1LGwsYyxmLGgsZCxwLG09e3BvaW50OnksbGluZVN0YXJ0OnYsbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksbS5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLG0ubGluZVN0YXJ0PXZ9fTtmdW5jdGlvbiB5KG4saSl7bj10KG4saSksZS5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIHYoKXtjPU5hTixtLnBvaW50PWcsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiBnKGkscil7dmFyIG89QnUoW2kscl0pLGE9dChpLHIpO24oYyxmLGwsaCxkLHAsYz1hWzBdLGY9YVsxXSxsPWksaD1vWzBdLGQ9b1sxXSxwPW9bMl0sZWgsZSksZS5wb2ludChjLGYpfWZ1bmN0aW9uIGIoKXttLnBvaW50PXksZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe3YoKSxtLnBvaW50PXcsbS5saW5lRW5kPXh9ZnVuY3Rpb24gdyh0LGUpe2coaT10LGUpLHI9YyxvPWYsYT1oLHM9ZCx1PXAsbS5wb2ludD1nfWZ1bmN0aW9uIHgoKXtuKGMsZixsLGgsZCxwLHIsbyxpLGEscyx1LGVoLGUpLG0ubGluZUVuZD1iLGIoKX1yZXR1cm4gbX19KHQsZSk6ZnVuY3Rpb24odCl7cmV0dXJuIFdmKHtwb2ludDpmdW5jdGlvbihlLG4pe2U9dChlLG4pLHRoaXMuc3RyZWFtLnBvaW50KGVbMF0sZVsxXSl9fSl9KHQpfSxyaD1XZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KnJ1LGUqcnUpfX0pO2Z1bmN0aW9uIG9oKHQsZSxuLGkpe3ZhciByPXV1KGkpLG89ZHUoaSksYT1yKnQscz1vKnQsdT1yL3QsbD1vL3QsYz0obypuLXIqZSkvdCxmPShvKmUrcipuKS90O2Z1bmN0aW9uIGgodCxpKXtyZXR1cm5bYSp0LXMqaStlLG4tcyp0LWEqaV19cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3UqdC1sKmUrYyxmLWwqdC11KmVdfSxofWZ1bmN0aW9uIGFoKHQpe3JldHVybiBzaChmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBzaCh0KXt2YXIgZSxuLGkscixvLGEscyx1LGwsYyxmPTE1MCxoPTQ4MCxkPTI1MCxwPTAsbT0wLHk9MCx2PTAsZz0wLGI9MCxfPW51bGwsdz1mYyx4PW51bGwsQz1XYyxTPS41O2Z1bmN0aW9uIEUodCl7cmV0dXJuIHUodFswXSpydSx0WzFdKnJ1KX1mdW5jdGlvbiBPKHQpe3JldHVybih0PXUuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSppdSx0WzFdKml1XX1mdW5jdGlvbiBrKCl7dmFyIHQ9b2goZiwwLDAsYikuYXBwbHkobnVsbCxlKHAsbSkpLGk9KGI/b2g6ZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIGkoaSxyKXtyZXR1cm5bZSt0Kmksbi10KnJdfXJldHVybiBpLmludmVydD1mdW5jdGlvbihpLHIpe3JldHVyblsoaS1lKS90LChuLXIpL3RdfSxpfSkoZixoLXRbMF0sZC10WzFdLGIpO3JldHVybiBuPVlsKHksdixnKSxzPUdsKGUsaSksdT1HbChuLHMpLGE9aWgocyxTKSxUKCl9ZnVuY3Rpb24gVCgpe3JldHVybiBsPWM9bnVsbCxFfXJldHVybiBFLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gbCYmYz09PXQ/bDpsPXJoKGZ1bmN0aW9uKHQpe3JldHVybiBXZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgaT10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KGlbMF0saVsxXSl9fSl9KG4pKHcoYShDKGM9dCkpKSkpfSxFLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxfPXZvaWQgMCxUKCkpOnd9LEUucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9dCx4PWk9cj1vPW51bGwsVCgpKTpDfSxFLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0rdD9oYyhfPXQqcnUpOihfPW51bGwsZmMpLFQoKSk6XyppdX0sRS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPW51bGw9PXQ/KHg9aT1yPW89bnVsbCxXYyk6eWMoeD0rdFswXVswXSxpPSt0WzBdWzFdLHI9K3RbMV1bMF0sbz0rdFsxXVsxXSksVCgpKTpudWxsPT14P251bGw6W1t4LGldLFtyLG9dXX0sRS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxrKCkpOmZ9LEUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0saygpKTpbaCxkXX0sRS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqcnUsbT10WzFdJTM2MCpydSxrKCkpOltwKml1LG0qaXVdfSxFLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10WzBdJTM2MCpydSx2PXRbMV0lMzYwKnJ1LGc9dC5sZW5ndGg+Mj90WzJdJTM2MCpydTowLGsoKSk6W3kqaXUsdippdSxnKml1XX0sRS5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpydSxrKCkpOmIqaXV9LEUucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWloKHMsUz10KnQpLFQoKSk6bXUoUyl9LEUuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhmKEUsdCxlKX0sRS5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRmKEUsdCxlKX0sRS5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBKZihFLHQsZSl9LEUuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoKEUsdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxFLmludmVydD1lLmludmVydCYmTyxrKCl9fWZ1bmN0aW9uIHVoKHQpe3ZhciBlPTAsbj1Kcy8zLGk9c2godCkscj1pKGUsbik7cmV0dXJuIHIucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2koZT10WzBdKnJ1LG49dFsxXSpydSk6W2UqaXUsbippdV19LHJ9ZnVuY3Rpb24gbGgodCxlKXt2YXIgbj1kdSh0KSxpPShuK2R1KGUpKS8yO2lmKG91KGkpPCRzKXJldHVybiBmdW5jdGlvbihlKXt2YXIgbj11dSh0KTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuW3QqbixkdShlKS9uXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9uLGd1KGUqbildfSxpfSgpO3ZhciByPTErbiooMippLW4pLG89bXUocikvaTtmdW5jdGlvbiBhKHQsZSl7dmFyIG49bXUoci0yKmkqZHUoZSkpL2k7cmV0dXJuW24qZHUodCo9aSksby1uKnV1KHQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1vLWU7cmV0dXJuW3N1KHQsb3UobikpL2kqcHUobiksZ3UoKHItKHQqdCtuKm4pKmkqaSkvKDIqaSkpXX0sYX12YXIgY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdWgobGgpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9LGZoPWZ1bmN0aW9uKCl7cmV0dXJuIGNoKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9LGhoPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGkscixvLGE9ZmgoKSxzPWNoKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSx1PWNoKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQsZSl7bz1bdCxlXX19O2Z1bmN0aW9uIGModCl7dmFyIGU9dFswXSxhPXRbMV07cmV0dXJuIG89bnVsbCxuLnBvaW50KGUsYSksb3x8KGkucG9pbnQoZSxhKSxvKXx8KHIucG9pbnQoZSxhKSxvKX1mdW5jdGlvbiBmKCl7cmV0dXJuIHQ9ZT1udWxsLGN9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPWEuc2NhbGUoKSxuPWEudHJhbnNsYXRlKCksaT0odFswXS1uWzBdKS9lLHI9KHRbMV0tblsxXSkvZTtyZXR1cm4ocj49LjEyJiZyPC4yMzQmJmk+PS0uNDI1JiZpPC0uMjE0P3M6cj49LjE2NiYmcjwuMjM0JiZpPj0tLjIxNCYmaTwtLjExNT91OmEpLmludmVydCh0KX0sYy5zdHJlYW09ZnVuY3Rpb24obil7cmV0dXJuIHQmJmU9PT1uP3Q6KGk9W2Euc3RyZWFtKGU9bikscy5zdHJlYW0obiksdS5zdHJlYW0obildLHI9aS5sZW5ndGgsdD17cG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTE7KytuPHI7KWlbbl0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxyOylpW3RdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PHI7KWlbdF0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PHI7KWlbdF0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PHI7KWlbdF0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PHI7KWlbdF0ucG9seWdvbkVuZCgpfX0pO3ZhciBpLHJ9LGMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSx1LnByZWNpc2lvbih0KSxmKCkpOmEucHJlY2lzaW9uKCl9LGMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCkscy5zY2FsZSguMzUqdCksdS5zY2FsZSh0KSxjLnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSxjLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgZT1hLnNjYWxlKCksbz0rdFswXSxjPSt0WzFdO3JldHVybiBuPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tvLS40NTUqZSxjLS4yMzgqZV0sW28rLjQ1NSplLGMrLjIzOCplXV0pLnN0cmVhbShsKSxpPXMudHJhbnNsYXRlKFtvLS4zMDcqZSxjKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1tvLS40MjUqZSskcyxjKy4xMiplKyRzXSxbby0uMjE0KmUtJHMsYysuMjM0KmUtJHNdXSkuc3RyZWFtKGwpLHI9dS50cmFuc2xhdGUoW28tLjIwNSplLGMrLjIxMiplXSkuY2xpcEV4dGVudChbW28tLjIxNCplKyRzLGMrLjE2NiplKyRzXSxbby0uMTE1KmUtJHMsYysuMjM0KmUtJHNdXSkuc3RyZWFtKGwpLGYoKX0sYy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWGYoYyx0LGUpfSxjLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGYoYyx0LGUpfSxjLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpmKGMsdCxlKX0sYy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGgoYyx0LGUpfSxjLnNjYWxlKDEwNzApfTtmdW5jdGlvbiBkaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT11dShlKSxyPXV1KG4pLG89dChpKnIpO3JldHVybltvKnIqZHUoZSksbypkdShuKV19fWZ1bmN0aW9uIHBoKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPW11KGUqZStuKm4pLHI9dChpKSxvPWR1KHIpLGE9dXUocik7cmV0dXJuW3N1KGUqbyxpKmEpLGd1KGkmJm4qby9pKV19fXZhciBtaD1kaChmdW5jdGlvbih0KXtyZXR1cm4gbXUoMi8oMSt0KSl9KTttaC5pbnZlcnQ9cGgoZnVuY3Rpb24odCl7cmV0dXJuIDIqZ3UodC8yKX0pO3ZhciB5aD1mdW5jdGlvbigpe3JldHVybiBhaChtaCkuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHZoPWRoKGZ1bmN0aW9uKHQpe3JldHVybih0PXZ1KHQpKSYmdC9kdSh0KX0pO3ZoLmludmVydD1waChmdW5jdGlvbih0KXtyZXR1cm4gdH0pO3ZhciBnaD1mdW5jdGlvbigpe3JldHVybiBhaCh2aCkuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE3OS45OTkpfTtmdW5jdGlvbiBiaCh0LGUpe3JldHVyblt0LGZ1KHl1KCh0dStlKS8yKSldfWJoLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqYXUoY3UoZSkpLXR1XX07dmFyIF9oPWZ1bmN0aW9uKCl7cmV0dXJuIHdoKGJoKS5zY2FsZSg5NjEvbnUpfTtmdW5jdGlvbiB3aCh0KXt2YXIgZSxuLGkscj1haCh0KSxvPXIuY2VudGVyLGE9ci5zY2FsZSxzPXIudHJhbnNsYXRlLHU9ci5jbGlwRXh0ZW50LGw9bnVsbDtmdW5jdGlvbiBjKCl7dmFyIG89SnMqYSgpLHM9cihYbChyLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gdShudWxsPT1sP1tbc1swXS1vLHNbMV0tb10sW3NbMF0rbyxzWzFdK29dXTp0PT09Ymg/W1tNYXRoLm1heChzWzBdLW8sbCksZV0sW01hdGgubWluKHNbMF0rbyxuKSxpXV06W1tsLE1hdGgubWF4KHNbMV0tbyxlKV0sW24sTWF0aC5taW4oc1sxXStvLGkpXV0pfXJldHVybiByLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLGMoKSk6YSgpfSxyLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0KSxjKCkpOnMoKX0sci5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksYygpKTpvKCl9LHIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9sPWU9bj1pPW51bGw6KGw9K3RbMF1bMF0sZT0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLGMoKSk6bnVsbD09bD9udWxsOltbbCxlXSxbbixpXV19LGMoKX1mdW5jdGlvbiB4aCh0KXtyZXR1cm4geXUoKHR1K3QpLzIpfWZ1bmN0aW9uIENoKHQsZSl7dmFyIG49dXUodCksaT10PT09ZT9kdSh0KTpmdShuL3V1KGUpKS9mdSh4aChlKS94aCh0KSkscj1uKmh1KHhoKHQpLGkpL2k7aWYoIWkpcmV0dXJuIGJoO2Z1bmN0aW9uIG8odCxlKXtyPjA/ZTwtdHUrJHMmJihlPS10dSskcyk6ZT50dS0kcyYmKGU9dHUtJHMpO3ZhciBuPXIvaHUoeGgoZSksaSk7cmV0dXJuW24qZHUoaSp0KSxyLW4qdXUoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci1lLG89cHUoaSkqbXUodCp0K24qbik7cmV0dXJuW3N1KHQsb3UobikpL2kqcHUobiksMiphdShodShyL28sMS9pKSktdHVdfSxvfXZhciBTaD1mdW5jdGlvbigpe3JldHVybiB1aChDaCkuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX07ZnVuY3Rpb24gRWgodCxlKXtyZXR1cm5bdCxlXX1FaC5pbnZlcnQ9RWg7dmFyIE9oPWZ1bmN0aW9uKCl7cmV0dXJuIGFoKEVoKS5zY2FsZSgxNTIuNjMpfTtmdW5jdGlvbiBraCh0LGUpe3ZhciBuPXV1KHQpLGk9dD09PWU/ZHUodCk6KG4tdXUoZSkpLyhlLXQpLHI9bi9pK3Q7aWYob3UoaSk8JHMpcmV0dXJuIEVoO2Z1bmN0aW9uIG8odCxlKXt2YXIgbj1yLWUsbz1pKnQ7cmV0dXJuW24qZHUobyksci1uKnV1KG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLWU7cmV0dXJuW3N1KHQsb3UobikpL2kqcHUobiksci1wdShpKSptdSh0KnQrbipuKV19LG99dmFyIFRoPWZ1bmN0aW9uKCl7cmV0dXJuIHVoKGtoKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfTtmdW5jdGlvbiBqaCh0LGUpe3ZhciBuPXV1KGUpLGk9dXUodCkqbjtyZXR1cm5bbipkdSh0KS9pLGR1KGUpL2ldfWpoLmludmVydD1waChhdSk7dmFyIEFoPWZ1bmN0aW9uKCl7cmV0dXJuIGFoKGpoKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfTtmdW5jdGlvbiBJaCh0LGUsbixpKXtyZXR1cm4gMT09PXQmJjE9PT1lJiYwPT09biYmMD09PWk/V2M6V2Yoe3BvaW50OmZ1bmN0aW9uKHIsbyl7dGhpcy5zdHJlYW0ucG9pbnQocip0K24sbyplK2kpfX0pfXZhciBSaD1mdW5jdGlvbigpe3ZhciB0LGUsbixpLHIsbyxhPTEscz0wLHU9MCxsPTEsYz0xLGY9V2MsaD1udWxsLGQ9V2M7ZnVuY3Rpb24gcCgpe3JldHVybiBpPXI9bnVsbCxvfXJldHVybiBvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJnI9PT10P2k6aT1mKGQocj10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWksaD10PWU9bj1udWxsLHAoKSk6ZH0sY2xpcEV4dGVudDpmdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT1pPyhoPXQ9ZT1uPW51bGwsV2MpOnljKGg9K2lbMF1bMF0sdD0raVswXVsxXSxlPStpWzFdWzBdLG49K2lbMV1bMV0pLHAoKSk6bnVsbD09aD9udWxsOltbaCx0XSxbZSxuXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUloKChhPSt0KSpsLGEqYyxzLHUpLHAoKSk6YX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUloKGEqbCxhKmMscz0rdFswXSx1PSt0WzFdKSxwKCkpOltzLHVdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1JaChhKihsPXQ/LTE6MSksYSpjLHMsdSkscCgpKTpsPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUloKGEqbCxhKihjPXQ/LTE6MSkscyx1KSxwKCkpOmM8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhmKG8sdCxlKX0sZml0U2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiAkZihvLHQsZSl9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpmKG8sdCxlKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoKG8sdCxlKX19fTtmdW5jdGlvbiBNaCh0LGUpe3ZhciBuPWUqZSxpPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK2kqKGkqKC4wMDM5NzEqbi0uMDAxNTI5KmkpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K2kqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqaSkpKV19TWguaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG4saT1lLHI9MjU7ZG97dmFyIG89aSppLGE9bypvO2ktPW49KGkqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLjAyODg3NCpvLS4wNDQ0NzUtLjAwNTkxNiphKSkpLWUpLygxLjAwNzIyNitvKiguMDQ1MjU1K2EqKC4yNTk4NjYqby0uMzExMzI1LS4wMDU5MTYqMTEqYSkpKX13aGlsZShvdShuKT4kcyYmLS1yPjApO3JldHVyblt0LyguODcwNysobz1pKmkpKihvKihvKm8qbyooLjAwMzk3MS0uMDAxNTI5Km8pLS4wMTM3OTEpLS4xMzE5NzkpKSxpXX07dmFyIFBoPWZ1bmN0aW9uKCl7cmV0dXJuIGFoKE1oKS5zY2FsZSgxNzUuMjk1KX07ZnVuY3Rpb24gRGgodCxlKXtyZXR1cm5bdXUoZSkqZHUodCksZHUoZSldfURoLmludmVydD1waChndSk7dmFyIE5oPWZ1bmN0aW9uKCl7cmV0dXJuIGFoKERoKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwKyRzKX07ZnVuY3Rpb24gRmgodCxlKXt2YXIgbj11dShlKSxpPTErdXUodCkqbjtyZXR1cm5bbipkdSh0KS9pLGR1KGUpL2ldfUZoLmludmVydD1waChmdW5jdGlvbih0KXtyZXR1cm4gMiphdSh0KX0pO3ZhciBMaD1mdW5jdGlvbigpe3JldHVybiBhaChGaCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX07ZnVuY3Rpb24gVmgodCxlKXtyZXR1cm5bZnUoeXUoKHR1K2UpLzIpKSwtdF19VmguaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqYXUoY3UodCkpLXR1XX07dmFyIHpoPWZ1bmN0aW9uKCl7dmFyIHQ9d2goVmgpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfTtmdW5jdGlvbiBCaCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBVaCh0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBIaCh0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9dmFyIHFoPWZ1bmN0aW9uKCl7dmFyIHQ9QmgsZT0xLG49MSxpPSExO2Z1bmN0aW9uIHIocil7dmFyIG8sYT0wO3IuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShVaCwwKS90Lmxlbmd0aH0obiksZS55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKEhoLDApfShuKSk6KGUueD1vP2ErPXQoZSxvKTowLGUueT0wLG89ZSl9KTt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbMF07cmV0dXJuIHR9KHIpLHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lW2UubGVuZ3RoLTFdO3JldHVybiB0fShyKSxsPXMueC10KHMsdSkvMixjPXUueCt0KHUscykvMjtyZXR1cm4gci5lYWNoQWZ0ZXIoaT9mdW5jdGlvbih0KXt0Lng9KHQueC1yLngpKmUsdC55PShyLnktdC55KSpufTpmdW5jdGlvbih0KXt0Lng9KHQueC1sKS8oYy1sKSplLHQueT0oMS0oci55P3QueS9yLnk6MSkpKm59KX1yZXR1cm4gci5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSExLGU9K3RbMF0sbj0rdFsxXSxyKTppP251bGw6W2Usbl19LHIubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITAsZT0rdFswXSxuPSt0WzFdLHIpOmk/W2Usbl06bnVsbH0scn07ZnVuY3Rpb24gR2godCl7dmFyIGU9MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDtpZihpKWZvcig7LS1pPj0wOyllKz1uW2ldLnZhbHVlO2Vsc2UgZT0xO3QudmFsdWU9ZX1mdW5jdGlvbiBRaCh0LGUpe3ZhciBuLGkscixvLGEscz1uZXcgS2godCksdT0rdC52YWx1ZSYmKHMudmFsdWU9dC52YWx1ZSksbD1bc107Zm9yKG51bGw9PWUmJihlPVloKTtuPWwucG9wKCk7KWlmKHUmJihuLnZhbHVlPStuLmRhdGEudmFsdWUpLChyPWUobi5kYXRhKSkmJihhPXIubGVuZ3RoKSlmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkoYSksbz1hLTE7bz49MDstLW8pbC5wdXNoKGk9bi5jaGlsZHJlbltvXT1uZXcgS2gocltvXSkpLGkucGFyZW50PW4saS5kZXB0aD1uLmRlcHRoKzE7cmV0dXJuIHMuZWFjaEJlZm9yZShaaCl9ZnVuY3Rpb24gWWgodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gV2godCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIFpoKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gS2godCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9S2gucHJvdG90eXBlPVFoLnByb3RvdHlwZT17Y29uc3RydWN0b3I6S2gsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoR2gpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLG89dGhpcyxhPVtvXTtkb3tmb3IoZT1hLnJldmVyc2UoKSxhPVtdO289ZS5wb3AoKTspaWYodChvKSxuPW8uY2hpbGRyZW4pZm9yKGk9MCxyPW4ubGVuZ3RoO2k8cjsrK2kpYS5wdXNoKG5baV0pfXdoaWxlKGEubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGkscj10aGlzLG89W3JdLGE9W107cj1vLnBvcCgpOylpZihhLnB1c2gociksZT1yLmNoaWxkcmVuKWZvcihuPTAsaT1lLmxlbmd0aDtuPGk7KytuKW8ucHVzaChlW25dKTtmb3IoO3I9YS5wb3AoKTspdChyKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixpPXRoaXMscj1baV07aT1yLnBvcCgpOylpZih0KGkpLGU9aS5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKXIucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxpPWUuY2hpbGRyZW4scj1pJiZpLmxlbmd0aDstLXI+PTA7KW4rPWlbcl0udmFsdWU7ZS52YWx1ZT1ufSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxpPWUuYW5jZXN0b3JzKCkscj1udWxsO2Zvcih0PW4ucG9wKCksZT1pLnBvcCgpO3Q9PT1lOylyPXQsdD1uLnBvcCgpLGU9aS5wb3AoKTtyZXR1cm4gcn0oZSx0KSxpPVtlXTtlIT09bjspaS5wdXNoKGU9ZS5wYXJlbnQpO2Zvcih2YXIgcj1pLmxlbmd0aDt0IT09bjspaS5zcGxpY2UociwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIGl9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gUWgodGhpcykuZWFjaEJlZm9yZShXaCl9fTt2YXIgWGg9QXJyYXkucHJvdG90eXBlLnNsaWNlLCRoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9MCxyPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9dC5sZW5ndGg7aTspbj1NYXRoLnJhbmRvbSgpKmktLXwwLGU9dFtpXSx0W2ldPXRbbl0sdFtuXT1lO3JldHVybiB0fShYaC5jYWxsKHQpKSkubGVuZ3RoLG89W107aTxyOyllPXRbaV0sbiYmZWQobixlKT8rK2k6KG49aWQobz1KaChvLGUpKSxpPTApO3JldHVybiBufTtmdW5jdGlvbiBKaCh0LGUpe3ZhciBuLGk7aWYobmQoZSx0KSlyZXR1cm5bZV07Zm9yKG49MDtuPHQubGVuZ3RoOysrbilpZih0ZChlLHRbbl0pJiZuZChyZCh0W25dLGUpLHQpKXJldHVyblt0W25dLGVdO2ZvcihuPTA7bjx0Lmxlbmd0aC0xOysrbilmb3IoaT1uKzE7aTx0Lmxlbmd0aDsrK2kpaWYodGQocmQodFtuXSx0W2ldKSxlKSYmdGQocmQodFtuXSxlKSx0W2ldKSYmdGQocmQodFtpXSxlKSx0W25dKSYmbmQob2QodFtuXSx0W2ldLGUpLHQpKXJldHVyblt0W25dLHRbaV0sZV07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHRkKHQsZSl7dmFyIG49dC5yLWUucixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPDB8fG4qbjxpKmkrcipyfWZ1bmN0aW9uIGVkKHQsZSl7dmFyIG49dC5yLWUucisxZS02LGk9ZS54LXQueCxyPWUueS10Lnk7cmV0dXJuIG4+MCYmbipuPmkqaStyKnJ9ZnVuY3Rpb24gbmQodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbilpZighZWQodCxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBpZCh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIHJkKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBvZCh0WzBdLHRbMV0sdFsyXSl9dmFyIGV9ZnVuY3Rpb24gcmQodCxlKXt2YXIgbj10LngsaT10Lnkscj10LnIsbz1lLngsYT1lLnkscz1lLnIsdT1vLW4sbD1hLWksYz1zLXIsZj1NYXRoLnNxcnQodSp1K2wqbCk7cmV0dXJue3g6KG4rbyt1L2YqYykvMix5OihpK2ErbC9mKmMpLzIscjooZityK3MpLzJ9fWZ1bmN0aW9uIG9kKHQsZSxuKXt2YXIgaT10Lngscj10Lnksbz10LnIsYT1lLngscz1lLnksdT1lLnIsbD1uLngsYz1uLnksZj1uLnIsaD1pLWEsZD1pLWwscD1yLXMsbT1yLWMseT11LW8sdj1mLW8sZz1pKmkrcipyLW8qbyxiPWctYSphLXMqcyt1KnUsXz1nLWwqbC1jKmMrZipmLHc9ZCpwLWgqbSx4PShwKl8tbSpiKS8oMip3KS1pLEM9KG0qeS1wKnYpL3csUz0oZCpiLWgqXykvKDIqdyktcixFPShoKnYtZCp5KS93LE89QypDK0UqRS0xLGs9Mioobyt4KkMrUypFKSxUPXgqeCtTKlMtbypvLGo9LShPPyhrK01hdGguc3FydChrKmstNCpPKlQpKS8oMipPKTpUL2spO3JldHVybnt4OmkreCtDKmoseTpyK1MrRSpqLHI6an19ZnVuY3Rpb24gYWQodCxlLG4pe3ZhciBpLHIsbyxhLHM9dC54LWUueCx1PXQueS1lLnksbD1zKnMrdSp1O2w/KHI9ZS5yK24ucixhPXQucituLnIsKHIqPXIpPihhKj1hKT8oaT0obCthLXIpLygyKmwpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsYS9sLWkqaSkpLG4ueD10LngtaSpzLW8qdSxuLnk9dC55LWkqdStvKnMpOihpPShsK3ItYSkvKDIqbCksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxyL2wtaSppKSksbi54PWUueCtpKnMtbyp1LG4ueT1lLnkraSp1K28qcykpOihuLng9ZS54K24ucixuLnk9ZS55KX1mdW5jdGlvbiBzZCh0LGUpe3ZhciBuPXQucitlLnItMWUtNixpPWUueC10Lngscj1lLnktdC55O3JldHVybiBuPjAmJm4qbj5pKmkrcipyfWZ1bmN0aW9uIHVkKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLGk9ZS5yK24ucixyPShlLngqbi5yK24ueCplLnIpL2ksbz0oZS55Km4ucituLnkqZS5yKS9pO3JldHVybiByKnIrbypvfWZ1bmN0aW9uIGxkKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBjZCh0KXtpZighKHI9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4saSxyLG8sYSxzLHUsbCxjLGY7aWYoKGU9dFswXSkueD0wLGUueT0wLCEocj4xKSlyZXR1cm4gZS5yO2lmKGUueD0tKG49dFsxXSkucixuLng9ZS5yLG4ueT0wLCEocj4yKSlyZXR1cm4gZS5yK24ucjthZChuLGUsaT10WzJdKSxlPW5ldyBsZChlKSxuPW5ldyBsZChuKSxpPW5ldyBsZChpKSxlLm5leHQ9aS5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPWksaS5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxyOysrcyl7YWQoZS5fLG4uXyxpPXRbc10pLGk9bmV3IGxkKGkpLHU9bi5uZXh0LGw9ZS5wcmV2aW91cyxjPW4uXy5yLGY9ZS5fLnI7ZG97aWYoYzw9Zil7aWYoc2QodS5fLGkuXykpe2UubmV4dD1uPXUsbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWMrPXUuXy5yLHU9dS5uZXh0fWVsc2V7aWYoc2QobC5fLGkuXykpeyhlPWwpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9Zis9bC5fLnIsbD1sLnByZXZpb3VzfX13aGlsZSh1IT09bC5uZXh0KTtmb3IoaS5wcmV2aW91cz1lLGkubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49aSxvPXVkKGUpOyhpPWkubmV4dCkhPT1uOykoYT11ZChpKSk8byYmKGU9aSxvPWEpO249ZS5uZXh0fWZvcihlPVtuLl9dLGk9bjsoaT1pLm5leHQpIT09bjspZS5wdXNoKGkuXyk7Zm9yKGk9JGgoZSkscz0wO3M8cjsrK3MpKGU9dFtzXSkueC09aS54LGUueS09aS55O3JldHVybiBpLnJ9dmFyIGZkPWZ1bmN0aW9uKHQpe3JldHVybiBjZCh0KSx0fTtmdW5jdGlvbiBoZCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gZGQoKXtyZXR1cm4gMH12YXIgcGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBtZCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfXZhciB5ZD1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLG49MSxpPWRkO2Z1bmN0aW9uIHIocil7cmV0dXJuIHIueD1lLzIsci55PW4vMix0P3IuZWFjaEJlZm9yZSh2ZCh0KSkuZWFjaEFmdGVyKGdkKGksLjUpKS5lYWNoQmVmb3JlKGJkKDEpKTpyLmVhY2hCZWZvcmUodmQobWQpKS5lYWNoQWZ0ZXIoZ2QoZGQsMSkpLmVhY2hBZnRlcihnZChpLHIuci9NYXRoLm1pbihlLG4pKSkuZWFjaEJlZm9yZShiZChNYXRoLm1pbihlLG4pLygyKnIucikpKSxyfXJldHVybiByLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT0obj1lKT9udWxsOmhkKG4pLHIpOnQ7dmFyIG59LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLHIpOltlLG5dfSxyLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwZCgrdCkscik6aX0scn07ZnVuY3Rpb24gdmQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBnZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihpPW4uY2hpbGRyZW4pe3ZhciBpLHIsbyxhPWkubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKHI9MDtyPGE7KytyKWlbcl0ucis9cztpZihvPWNkKGkpLHMpZm9yKHI9MDtyPGE7KytyKWlbcl0uci09cztuLnI9bytzfX19ZnVuY3Rpb24gYmQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19dmFyIF9kPWZ1bmN0aW9uKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX0sd2Q9ZnVuY3Rpb24odCxlLG4saSxyKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsdT1hLmxlbmd0aCxsPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KytzPHU7KShvPWFbc10pLnkwPW4sby55MT1yLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqbH0seGQ9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPTAsaT0hMTtmdW5jdGlvbiByKHIpe3ZhciBvPXIuaGVpZ2h0KzE7cmV0dXJuIHIueDA9ci55MD1uLHIueDE9dCxyLnkxPWUvbyxyLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oaSl7aS5jaGlsZHJlbiYmd2QoaSxpLngwLHQqKGkuZGVwdGgrMSkvZSxpLngxLHQqKGkuZGVwdGgrMikvZSk7dmFyIHI9aS54MCxvPWkueTAsYT1pLngxLW4scz1pLnkxLW47YTxyJiYocj1hPShyK2EpLzIpLHM8byYmKG89cz0obytzKS8yKSxpLngwPXIsaS55MD1vLGkueDE9YSxpLnkxPXN9fShlLG8pKSxpJiZyLmVhY2hCZWZvcmUoX2QpLHJ9cmV0dXJuIHIucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ISF0LHIpOml9LHIuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLHIpOlt0LGVdfSxyLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qscik6bn0scn0sQ2Q9IiQiLFNkPXtkZXB0aDotMX0sRWQ9e307ZnVuY3Rpb24gT2QodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24ga2QodCl7cmV0dXJuIHQucGFyZW50SWR9dmFyIFRkPWZ1bmN0aW9uKCl7dmFyIHQ9T2QsZT1rZDtmdW5jdGlvbiBuKG4pe3ZhciBpLHIsbyxhLHMsdSxsLGM9bi5sZW5ndGgsZj1uZXcgQXJyYXkoYyksaD17fTtmb3Iocj0wO3I8YzsrK3Ipcz1mW3JdPW5ldyBLaChpPW5bcl0pLG51bGwhPSh1PXQoaSxyLG4pKSYmKHUrPSIiKSYmKGhbbD1DZCsocy5pZD11KV09bCBpbiBoP0VkOnMpO2ZvcihyPTA7cjxjOysrcilpZihzPWZbcl0sbnVsbCE9KHU9ZShuW3JdLHIsbikpJiYodSs9IiIpKXtpZighKGE9aFtDZCt1XSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3UpO2lmKGE9PT1FZCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIit1KTthLmNoaWxkcmVuP2EuY2hpbGRyZW4ucHVzaChzKTphLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1hfWVsc2V7aWYobyl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7bz1zfWlmKCFvKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKG8ucGFyZW50PVNkLG8uZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1jfSkuZWFjaEJlZm9yZShaaCksby5wYXJlbnQ9bnVsbCxjPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBvfXJldHVybiBuLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWhkKGUpLG4pOnR9LG4ucGFyZW50SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9aGQodCksbik6ZX0sbn07ZnVuY3Rpb24gamQodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gQWQodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBJZCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbZS5sZW5ndGgtMV06dC50fWZ1bmN0aW9uIFJkKHQsZSxuKXt2YXIgaT1uLyhlLmktdC5pKTtlLmMtPWksZS5zKz1uLHQuYys9aSxlLnorPW4sZS5tKz1ufWZ1bmN0aW9uIE1kKHQsZSxuKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpufWZ1bmN0aW9uIFBkKHQsZSl7dGhpcy5fPXQsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPWV9UGQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS2gucHJvdG90eXBlKTt2YXIgRGQ9ZnVuY3Rpb24oKXt2YXIgdD1qZCxlPTEsbj0xLGk9bnVsbDtmdW5jdGlvbiByKHIpe3ZhciB1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGkscixvLGE9bmV3IFBkKHQsMCkscz1bYV07ZT1zLnBvcCgpOylpZihpPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkobz1pLmxlbmd0aCkscj1vLTE7cj49MDstLXIpcy5wdXNoKG49ZS5jaGlsZHJlbltyXT1uZXcgUGQoaVtyXSxyKSksbi5wYXJlbnQ9ZTtyZXR1cm4oYS5wYXJlbnQ9bmV3IFBkKG51bGwsMCkpLmNoaWxkcmVuPVthXSxhfShyKTtpZih1LmVhY2hBZnRlcihvKSx1LnBhcmVudC5tPS11LnosdS5lYWNoQmVmb3JlKGEpLGkpci5lYWNoQmVmb3JlKHMpO2Vsc2V7dmFyIGw9cixjPXIsZj1yO3IuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8bC54JiYobD10KSx0Lng+Yy54JiYoYz10KSx0LmRlcHRoPmYuZGVwdGgmJihmPXQpfSk7dmFyIGg9bD09PWM/MTp0KGwsYykvMixkPWgtbC54LHA9ZS8oYy54K2grZCksbT1uLyhmLmRlcHRofHwxKTtyLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCptfSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbyhlKXt2YXIgbj1lLmNoaWxkcmVuLGk9ZS5wYXJlbnQuY2hpbGRyZW4scj1lLmk/aVtlLmktMV06bnVsbDtpZihuKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxpPTAscj10LmNoaWxkcmVuLG89ci5sZW5ndGg7LS1vPj0wOykoZT1yW29dKS56Kz1uLGUubSs9bixuKz1lLnMrKGkrPWUuYyl9KGUpO3ZhciBvPShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO3I/KGUuej1yLnordChlLl8sci5fKSxlLm09ZS56LW8pOmUuej1vfWVsc2UgciYmKGUuej1yLnordChlLl8sci5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLG4saSl7aWYobil7Zm9yKHZhciByLG89ZSxhPWUscz1uLHU9by5wYXJlbnQuY2hpbGRyZW5bMF0sbD1vLm0sYz1hLm0sZj1zLm0saD11Lm07cz1JZChzKSxvPUFkKG8pLHMmJm87KXU9QWQodSksKGE9SWQoYSkpLmE9ZSwocj1zLnorZi1vLnotbCt0KHMuXyxvLl8pKT4wJiYoUmQoTWQocyxlLGkpLGUsciksbCs9cixjKz1yKSxmKz1zLm0sbCs9by5tLGgrPXUubSxjKz1hLm07cyYmIUlkKGEpJiYoYS50PXMsYS5tKz1mLWMpLG8mJiFBZCh1KSYmKHUudD1vLHUubSs9bC1oLGk9ZSl9cmV0dXJuIGl9KGUscixlLnBhcmVudC5BfHxpWzBdKX1mdW5jdGlvbiBhKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpufXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfSxOZD1mdW5jdGlvbih0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSx1PWEubGVuZ3RoLGw9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3M8dTspKG89YVtzXSkueDA9ZSxvLngxPWksby55MD1uLG8ueTE9bis9by52YWx1ZSpsfSxGZD0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gTGQodCxlLG4saSxyLG8pe2Zvcih2YXIgYSxzLHUsbCxjLGYsaCxkLHAsbSx5LHY9W10sZz1lLmNoaWxkcmVuLGI9MCxfPTAsdz1nLmxlbmd0aCx4PWUudmFsdWU7Yjx3Oyl7dT1yLW4sbD1vLWk7ZG97Yz1nW18rK10udmFsdWV9d2hpbGUoIWMmJl88dyk7Zm9yKGY9aD1jLHk9YypjKihtPU1hdGgubWF4KGwvdSx1L2wpLyh4KnQpKSxwPU1hdGgubWF4KGgveSx5L2YpO188dzsrK18pe2lmKGMrPXM9Z1tfXS52YWx1ZSxzPGYmJihmPXMpLHM+aCYmKGg9cykseT1jKmMqbSwoZD1NYXRoLm1heChoL3kseS9mKSk+cCl7Yy09czticmVha31wPWR9di5wdXNoKGE9e3ZhbHVlOmMsZGljZTp1PGwsY2hpbGRyZW46Zy5zbGljZShiLF8pfSksYS5kaWNlP3dkKGEsbixpLHIseD9pKz1sKmMveDpvKTpOZChhLG4saSx4P24rPXUqYy94OnIsbykseC09YyxiPV99cmV0dXJuIHZ9dmFyIFZkPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe0xkKGUsdCxuLGkscixvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufShGZCksemQ9ZnVuY3Rpb24oKXt2YXIgdD1WZCxlPSExLG49MSxpPTEscj1bMF0sbz1kZCxhPWRkLHM9ZGQsdT1kZCxsPWRkO2Z1bmN0aW9uIGModCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPWksdC5lYWNoQmVmb3JlKGYpLHI9WzBdLGUmJnQuZWFjaEJlZm9yZShfZCksdH1mdW5jdGlvbiBmKGUpe3ZhciBuPXJbZS5kZXB0aF0saT1lLngwK24sYz1lLnkwK24sZj1lLngxLW4saD1lLnkxLW47ZjxpJiYoaT1mPShpK2YpLzIpLGg8YyYmKGM9aD0oYytoKS8yKSxlLngwPWksZS55MD1jLGUueDE9ZixlLnkxPWgsZS5jaGlsZHJlbiYmKG49cltlLmRlcHRoKzFdPW8oZSkvMixpKz1sKGUpLW4sYys9YShlKS1uLGYtPXMoZSktbixoLT11KGUpLW4sZjxpJiYoaT1mPShpK2YpLzIpLGg8YyYmKGM9aD0oYytoKS8yKSx0KGUsaSxjLGYsaCkpfXJldHVybiBjLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxjKTplfSxjLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0saT0rdFsxXSxjKTpbbixpXX0sYy50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWhkKGUpLGMpOnR9LGMucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9jLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6Yy5wYWRkaW5nSW5uZXIoKX0sYy5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwZCgrdCksYyk6b30sYy5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Yy5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOmMucGFkZGluZ1RvcCgpfSxjLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwZCgrdCksYyk6YX0sYy5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwZCgrdCksYyk6c30sYy5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGQoK3QpLGMpOnV9LGMucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwZCgrdCksYyk6bH0sY30sQmQ9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbyxhLHM9dC5jaGlsZHJlbix1PXMubGVuZ3RoLGw9bmV3IEFycmF5KHUrMSk7Zm9yKGxbMF09YT1vPTA7bzx1OysrbylsW28rMV09YSs9c1tvXS52YWx1ZTshZnVuY3Rpb24gdChlLG4saSxyLG8sYSx1KXtpZihlPj1uLTEpe3ZhciBjPXNbZV07cmV0dXJuIGMueDA9cixjLnkwPW8sYy54MT1hLHZvaWQoYy55MT11KX1mb3IodmFyIGY9bFtlXSxoPWkvMitmLGQ9ZSsxLHA9bi0xO2Q8cDspe3ZhciBtPWQrcD4+PjE7bFttXTxoP2Q9bSsxOnA9bX1oLWxbZC0xXTxsW2RdLWgmJmUrMTxkJiYtLWQ7dmFyIHk9bFtkXS1mLHY9aS15O2lmKGEtcj51LW8pe3ZhciBnPShyKnYrYSp5KS9pO3QoZSxkLHkscixvLGcsdSksdChkLG4sdixnLG8sYSx1KX1lbHNle3ZhciBiPShvKnYrdSp5KS9pO3QoZSxkLHkscixvLGEsYiksdChkLG4sdixyLGIsYSx1KX19KDAsdSx0LnZhbHVlLGUsbixpLHIpfSxVZD1mdW5jdGlvbih0LGUsbixpLHIpeygxJnQuZGVwdGg/TmQ6d2QpKHQsZSxuLGkscil9LEhkPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4saSxyLG8pe2lmKChhPXQuX3NxdWFyaWZ5KSYmYS5yYXRpbz09PWUpZm9yKHZhciBhLHMsdSxsLGMsZj0tMSxoPWEubGVuZ3RoLGQ9dC52YWx1ZTsrK2Y8aDspe2Zvcih1PShzPWFbZl0pLmNoaWxkcmVuLGw9cy52YWx1ZT0wLGM9dS5sZW5ndGg7bDxjOysrbClzLnZhbHVlKz11W2xdLnZhbHVlO3MuZGljZT93ZChzLG4saSxyLGkrPShvLWkpKnMudmFsdWUvZCk6TmQocyxuLGksbis9KHItbikqcy52YWx1ZS9kLG8pLGQtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1hPUxkKGUsdCxuLGkscixvKSxhLnJhdGlvPWV9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oRmQpLHFkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLGk9dC5sZW5ndGgscj10W2ktMV0sbz0wOysrbjxpOylvKz0oZT1yKVsxXSoocj10W25dKVswXS1lWzBdKnJbMV07cmV0dXJuIG8vMn0sR2Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89MCxhPTAscz10W3ItMV0sdT0wOysraTxyOyl1Kz1uPShlPXMpWzBdKihzPXRbaV0pWzFdLXNbMF0qZVsxXSxvKz0oZVswXStzWzBdKSpuLGErPShlWzFdK3NbMV0pKm47cmV0dXJuW28vKHUqPTMpLGEvdV19LFFkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKS0oZVsxXS10WzFdKSooblswXS10WzBdKX07ZnVuY3Rpb24gWWQodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gV2QodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49WzAsMV0saT0yLHI9MjtyPGU7KytyKXtmb3IoO2k+MSYmUWQodFtuW2ktMl1dLHRbbltpLTFdXSx0W3JdKTw9MDspLS1pO25baSsrXT1yfXJldHVybiBuLnNsaWNlKDAsaSl9dmFyIFpkPWZ1bmN0aW9uKHQpe2lmKChuPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBlLG4saT1uZXcgQXJyYXkobikscj1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKWlbZV09Wyt0W2VdWzBdLCt0W2VdWzFdLGVdO2ZvcihpLnNvcnQoWWQpLGU9MDtlPG47KytlKXJbZV09W2lbZV1bMF0sLWlbZV1bMV1dO3ZhciBvPVdkKGkpLGE9V2Qocikscz1hWzBdPT09b1swXSx1PWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGw9W107Zm9yKGU9by5sZW5ndGgtMTtlPj0wOy0tZSlsLnB1c2godFtpW29bZV1dWzJdXSk7Zm9yKGU9K3M7ZTxhLmxlbmd0aC11OysrZSlsLnB1c2godFtpW2FbZV1dWzJdXSk7cmV0dXJuIGx9LEtkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLGkscj10Lmxlbmd0aCxvPXRbci0xXSxhPWVbMF0scz1lWzFdLHU9b1swXSxsPW9bMV0sYz0hMSxmPTA7ZjxyOysrZiluPShvPXRbZl0pWzBdLChpPW9bMV0pPnMhPWw+cyYmYTwodS1uKSoocy1pKS8obC1pKStuJiYoYz0hYyksdT1uLGw9aTtyZXR1cm4gY30sWGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saT0tMSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9b1swXSxzPW9bMV0sdT0wOysraTxyOyllPWEsbj1zLGUtPWE9KG89dFtpXSlbMF0sbi09cz1vWzFdLHUrPU1hdGguc3FydChlKmUrbipuKTtyZXR1cm4gdX0sJGQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sSmQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD0wKTpuLT10LGZ1bmN0aW9uKCl7cmV0dXJuIGUoKSpuK3R9fXJldHVybiBuLnNvdXJjZT10LG59KCRkKSx0cD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXt2YXIgaSxyO3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbixmdW5jdGlvbigpe3ZhciBvO2lmKG51bGwhPWkpbz1pLGk9bnVsbDtlbHNlIGRve2k9MiplKCktMSxvPTIqZSgpLTEscj1pKmkrbypvfXdoaWxlKCFyfHxyPjEpO3JldHVybiB0K24qbypNYXRoLnNxcnQoLTIqTWF0aC5sb2cocikvcil9fXJldHVybiBuLnNvdXJjZT10LG59KCRkKSxlcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD10cC5zb3VyY2UoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSgkZCksbnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MDtpPHQ7KytpKW4rPWUoKTtyZXR1cm4gbn19cmV0dXJuIG4uc291cmNlPXQsbn0oJGQpLGlwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1ucC5zb3VyY2UoZSkodCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufSgkZCkscnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oJGQpLG9wPUFycmF5LnByb3RvdHlwZSxhcD1vcC5tYXAsc3A9b3Auc2xpY2UsdXA9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gbHAodCl7dmFyIGU9Wm8oKSxuPVtdLGk9dXA7ZnVuY3Rpb24gcihyKXt2YXIgbz1yKyIiLGE9ZS5nZXQobyk7aWYoIWEpe2lmKGkhPT11cClyZXR1cm4gaTtlLnNldChvLGE9bi5wdXNoKHIpKX1yZXR1cm4gdFsoYS0xKSV0Lmxlbmd0aF19cmV0dXJuIHQ9bnVsbD09dD9bXTpzcC5jYWxsKHQpLHIuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLnNsaWNlKCk7bj1bXSxlPVpvKCk7Zm9yKHZhciBpLG8sYT0tMSxzPXQubGVuZ3RoOysrYTxzOyllLmhhcyhvPShpPXRbYV0pKyIiKXx8ZS5zZXQobyxuLnB1c2goaSkpO3JldHVybiByfSxyLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXNwLmNhbGwoZSkscik6dC5zbGljZSgpfSxyLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxyKTppfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbHAoKS5kb21haW4obikucmFuZ2UodCkudW5rbm93bihpKX0scn1mdW5jdGlvbiBjcCgpe3ZhciB0LGUsbj1scCgpLnVua25vd24odm9pZCAwKSxpPW4uZG9tYWluLHI9bi5yYW5nZSxvPVswLDFdLGE9ITEscz0wLHU9MCxsPS41O2Z1bmN0aW9uIGMoKXt2YXIgbj1pKCkubGVuZ3RoLGM9b1sxXTxvWzBdLGY9b1tjLTBdLGg9b1sxLWNdO3Q9KGgtZikvTWF0aC5tYXgoMSxuLXMrMip1KSxhJiYodD1NYXRoLmZsb29yKHQpKSxmKz0oaC1mLXQqKG4tcykpKmwsZT10KigxLXMpLGEmJihmPU1hdGgucm91bmQoZiksZT1NYXRoLnJvdW5kKGUpKTt2YXIgZD14KG4pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZit0KmV9KTtyZXR1cm4gcihjP2QucmV2ZXJzZSgpOmQpfXJldHVybiBkZWxldGUgbi51bmtub3duLG4uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLGMoKSk6aSgpfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVsrdFswXSwrdFsxXV0sYygpKTpvLnNsaWNlKCl9LG4ucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbz1bK3RbMF0sK3RbMV1dLGE9ITAsYygpfSxuLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBlfSxuLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbi5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYygpKTphfSxuLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dT1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGMoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxjKCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksYygpKTp1fSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksYygpKTpsfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY3AoKS5kb21haW4oaSgpKS5yYW5nZShvKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKHUpLmFsaWduKGwpfSxjKCl9ZnVuY3Rpb24gZnAoKXtyZXR1cm4gZnVuY3Rpb24gdChlKXt2YXIgbj1lLmNvcHk7cmV0dXJuIGUucGFkZGluZz1lLnBhZGRpbmdPdXRlcixkZWxldGUgZS5wYWRkaW5nSW5uZXIsZGVsZXRlIGUucGFkZGluZ091dGVyLGUuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4oKSl9LGV9KGNwKCkucGFkZGluZ0lubmVyKDEpKX12YXIgaHA9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkcD1mdW5jdGlvbih0KXtyZXR1cm4rdH0scHA9WzAsMV07ZnVuY3Rpb24gbXAodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06aHAoZSl9ZnVuY3Rpb24geXAodCxlLG4saSl7dmFyIHI9dFswXSxvPXRbMV0sYT1lWzBdLHM9ZVsxXTtyZXR1cm4gbzxyPyhyPW4obyxyKSxhPWkocyxhKSk6KHI9bihyLG8pLGE9aShhLHMpKSxmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQpKX19ZnVuY3Rpb24gdnAodCxlLG4saSl7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocikscz0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytzPHI7KW9bc109bih0W3NdLHRbcysxXSksYVtzXT1pKGVbc10sZVtzKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dSh0LGUsMSxyKS0xO3JldHVybiBhW25dKG9bbl0oZSkpfX1mdW5jdGlvbiBncCh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKX1mdW5jdGlvbiBicCh0LGUpe3ZhciBuLGkscixvPXBwLGE9cHAscz1Lbix1PSExO2Z1bmN0aW9uIGwoKXtyZXR1cm4gbj1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj92cDp5cCxpPXI9bnVsbCxjfWZ1bmN0aW9uIGMoZSl7cmV0dXJuKGl8fChpPW4obyxhLHU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dChlPStlLG49K24pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9ZT8wOnQ+PW4/MTppKHQpfX19KHQpOnQscykpKSgrZSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihyfHwocj1uKGEsbyxtcCx1P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/ZTp0Pj0xP246aSh0KX19fShlKTplKSkpKCt0KX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YXAuY2FsbCh0LGRwKSxsKCkpOm8uc2xpY2UoKX0sYy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1zcC5jYWxsKHQpLGwoKSk6YS5zbGljZSgpfSxjLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9c3AuY2FsbCh0KSxzPVhuLGwoKX0sYy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXQsbCgpKTp1fSxjLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCgpKTpzfSxsKCl9dmFyIF9wPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9VChyLG8sbnVsbD09ZT8xMDplKTtzd2l0Y2goKG49UnMobnVsbD09bj8iLGYiOm4pKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKTtyZXR1cm4gbnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKGk9UXMoYSxzKSl8fChuLnByZWNpc2lvbj1pKSxGcyhuLHMpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPVlzKGEsTWF0aC5tYXgoTWF0aC5hYnMociksTWF0aC5hYnMobykpKSl8fChuLnByZWNpc2lvbj1pLSgiZSI9PT1uLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKGk9R3MoYSkpfHwobi5wcmVjaXNpb249aS0yKigiJSI9PT1uLnR5cGUpKX1yZXR1cm4gTnMobil9O2Z1bmN0aW9uIHdwKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gTyhuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIF9wKGUoKSx0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciBpLHI9ZSgpLG89MCxhPXIubGVuZ3RoLTEscz1yW29dLHU9clthXTtyZXR1cm4gdTxzJiYoaT1zLHM9dSx1PWksaT1vLG89YSxhPWkpLChpPWsocyx1LG4pKT4wP2k9ayhzPU1hdGguZmxvb3Iocy9pKSppLHU9TWF0aC5jZWlsKHUvaSkqaSxuKTppPDAmJihpPWsocz1NYXRoLmNlaWwocyppKS9pLHU9TWF0aC5mbG9vcih1KmkpL2ksbikpLGk+MD8ocltvXT1NYXRoLmZsb29yKHMvaSkqaSxyW2FdPU1hdGguY2VpbCh1L2kpKmksZShyKSk6aTwwJiYocltvXT1NYXRoLmNlaWwocyppKS9pLHJbYV09TWF0aC5mbG9vcih1KmkpL2ksZShyKSksdH0sdH1mdW5jdGlvbiB4cCgpe3ZhciB0PWJwKG1wLEduKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGdwKHQseHAoKSl9LHdwKHQpfWZ1bmN0aW9uIENwKCl7dmFyIHQ9WzAsMV07ZnVuY3Rpb24gZSh0KXtyZXR1cm4rdH1yZXR1cm4gZS5pbnZlcnQ9ZSxlLmRvbWFpbj1lLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWFwLmNhbGwobixkcCksZSk6dC5zbGljZSgpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQ3AoKS5kb21haW4odCl9LHdwKGUpfXZhciBTcD1mdW5jdGlvbih0LGUpe3ZhciBuLGk9MCxyPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsbz10W2ldLGE9dFtyXTtyZXR1cm4gYTxvJiYobj1pLGk9cixyPW4sbj1vLG89YSxhPW4pLHRbaV09ZS5mbG9vcihvKSx0W3JdPWUuY2VpbChhKSx0fTtmdW5jdGlvbiBFcCh0LGUpe3JldHVybihlPU1hdGgubG9nKGUvdCkpP2Z1bmN0aW9uKG4pe3JldHVybiBNYXRoLmxvZyhuL3QpL2V9OmhwKGUpfWZ1bmN0aW9uIE9wKHQsZSl7cmV0dXJuIHQ8MD9mdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5wb3coLWUsbikqTWF0aC5wb3coLXQsMS1uKX06ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUsbikqTWF0aC5wb3codCwxLW4pfX1mdW5jdGlvbiBrcCh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gVHAodCl7cmV0dXJuIDEwPT09dD9rcDp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBqcCh0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9ZnVuY3Rpb24gQXAodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gSXAoKXt2YXIgdD1icChFcCxPcCkuZG9tYWluKFsxLDEwXSksZT10LmRvbWFpbixuPTEwLGk9anAoMTApLHI9VHAoMTApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gaT1qcChuKSxyPVRwKG4pLGUoKVswXTwwJiYoaT1BcChpKSxyPUFwKHIpKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsbygpKTpufSx0LmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZSh0KSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbih0KXt2YXIgbyxhPWUoKSxzPWFbMF0sdT1hW2EubGVuZ3RoLTFdOyhvPXU8cykmJihoPXMscz11LHU9aCk7dmFyIGwsYyxmLGg9aShzKSxkPWkodSkscD1udWxsPT10PzEwOit0LG09W107aWYoIShuJTEpJiZkLWg8cCl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZD1NYXRoLnJvdW5kKGQpKzEscz4wKXtmb3IoO2g8ZDsrK2gpZm9yKGM9MSxsPXIoaCk7YzxuOysrYylpZighKChmPWwqYyk8cykpe2lmKGY+dSlicmVhazttLnB1c2goZil9fWVsc2UgZm9yKDtoPGQ7KytoKWZvcihjPW4tMSxsPXIoaCk7Yz49MTstLWMpaWYoISgoZj1sKmMpPHMpKXtpZihmPnUpYnJlYWs7bS5wdXNoKGYpfX1lbHNlIG09TyhoLGQsTWF0aC5taW4oZC1oLHApKS5tYXAocik7cmV0dXJuIG8/bS5yZXZlcnNlKCk6bX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsbyl7aWYobnVsbD09byYmKG89MTA9PT1uPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJihvPU5zKG8pKSxlPT09MS8wKXJldHVybiBvO251bGw9PWUmJihlPTEwKTt2YXIgYT1NYXRoLm1heCgxLG4qZS90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC9yKE1hdGgucm91bmQoaSh0KSkpO3JldHVybiBlKm48bi0uNSYmKGUqPW4pLGU8PWE/byh0KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiBlKFNwKGUoKSx7Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIHIoTWF0aC5mbG9vcihpKHQpKSl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuIHIoTWF0aC5jZWlsKGkodCkpKX19KSl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBncCh0LElwKCkuYmFzZShuKSl9LHR9ZnVuY3Rpb24gUnAodCxlKXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfWZ1bmN0aW9uIE1wKCl7dmFyIHQ9MSxlPWJwKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG49UnAobix0KS0oZT1ScChlLHQpKSk/ZnVuY3Rpb24oaSl7cmV0dXJuKFJwKGksdCktZSkvbn06aHAobil9LGZ1bmN0aW9uKGUsbil7cmV0dXJuIG49UnAobix0KS0oZT1ScChlLHQpKSxmdW5jdGlvbihpKXtyZXR1cm4gUnAoZStuKmksMS90KX19KSxuPWUuZG9tYWluO3JldHVybiBlLmV4cG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4obigpKSk6dH0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGdwKGUsTXAoKS5leHBvbmVudCh0KSl9LHdwKGUpfWZ1bmN0aW9uIFBwKCl7cmV0dXJuIE1wKCkuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIERwKCl7dmFyIHQ9W10sZT1bXSxuPVtdO2Z1bmN0aW9uIHIoKXt2YXIgaT0wLHI9TWF0aC5tYXgoMSxlLmxlbmd0aCk7Zm9yKG49bmV3IEFycmF5KHItMSk7KytpPHI7KW5baS0xXT1JKHQsaS9yKTtyZXR1cm4gb31mdW5jdGlvbiBvKHQpe2lmKCFpc05hTih0PSt0KSlyZXR1cm4gZVt1KG4sdCldfXJldHVybiBvLmludmVydEV4dGVudD1mdW5jdGlvbihpKXt2YXIgcj1lLmluZGV4T2YoaSk7cmV0dXJuIHI8MD9bTmFOLE5hTl06W3I+MD9uW3ItMV06dFswXSxyPG4ubGVuZ3RoP25bcl06dFt0Lmxlbmd0aC0xXV19LG8uZG9tYWluPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dD1bXTtmb3IodmFyIG4sbz0wLGE9ZS5sZW5ndGg7bzxhOysrbyludWxsPT0obj1lW29dKXx8aXNOYU4obj0rbil8fHQucHVzaChuKTtyZXR1cm4gdC5zb3J0KGkpLHIoKX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zcC5jYWxsKHQpLHIoKSk6ZS5zbGljZSgpfSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBEcCgpLmRvbWFpbih0KS5yYW5nZShlKX0sb31mdW5jdGlvbiBOcCgpe3ZhciB0PTAsZT0xLG49MSxpPVsuNV0scj1bMCwxXTtmdW5jdGlvbiBvKHQpe2lmKHQ8PXQpcmV0dXJuIHJbdShpLHQsMCxuKV19ZnVuY3Rpb24gYSgpe3ZhciByPS0xO2ZvcihpPW5ldyBBcnJheShuKTsrK3I8bjspaVtyXT0oKHIrMSkqZS0oci1uKSp0KS8obisxKTtyZXR1cm4gb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K25bMF0sZT0rblsxXSxhKCkpOlt0LGVdfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShyPXNwLmNhbGwodCkpLmxlbmd0aC0xLGEoKSk6ci5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbihvKXt2YXIgYT1yLmluZGV4T2Yobyk7cmV0dXJuIGE8MD9bTmFOLE5hTl06YTwxP1t0LGlbMF1dOmE+PW4/W2lbbi0xXSxlXTpbaVthLTFdLGlbYV1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTnAoKS5kb21haW4oW3QsZV0pLnJhbmdlKHIpfSx3cChvKX1mdW5jdGlvbiBGcCgpe3ZhciB0PVsuNV0sZT1bMCwxXSxuPTE7ZnVuY3Rpb24gaShpKXtpZihpPD1pKXJldHVybiBlW3UodCxpLDAsbildfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zcC5jYWxsKHIpLG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgtMSksaSk6dC5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXNwLmNhbGwociksbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG4pe3ZhciBpPWUuaW5kZXhPZihuKTtyZXR1cm5bdFtpLTFdLHRbaV1dfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRnAoKS5kb21haW4odCkucmFuZ2UoZSl9LGl9dmFyIExwPW5ldyBEYXRlLFZwPW5ldyBEYXRlO2Z1bmN0aW9uIHpwKHQsZSxuLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIHIuZmxvb3I9cixyLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxyLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1yLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxyLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxyLnJhbmdlPWZ1bmN0aW9uKG4saSxvKXt2YXIgYSxzPVtdO2lmKG49ci5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPGkmJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48aSk7cmV0dXJuIHN9LHIuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiB6cChmdW5jdGlvbihlKXtpZihlPj1lKWZvcig7dChlKSwhbihlKTspZS5zZXRUaW1lKGUtMSl9LGZ1bmN0aW9uKHQsaSl7aWYodD49dClpZihpPDApZm9yKDsrK2k8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLWk+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSl9LG4mJihyLmNvdW50PWZ1bmN0aW9uKGUsaSl7cmV0dXJuIExwLnNldFRpbWUoK2UpLFZwLnNldFRpbWUoK2kpLHQoTHApLHQoVnApLE1hdGguZmxvb3IobihMcCxWcCkpfSxyLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/ci5maWx0ZXIoaT9mdW5jdGlvbihlKXtyZXR1cm4gaShlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gci5jb3VudCgwLGUpJXQ9PTB9KTpyOm51bGx9KSxyfXZhciBCcD16cChmdW5jdGlvbigpe30sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pO0JwLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/enAoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0sZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0sZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSk6QnA6bnVsbH07dmFyIFVwPUJwLEhwPUJwLnJhbmdlLHFwPTZlNCxHcD02MDQ4ZTUsUXA9enAoZnVuY3Rpb24odCl7dC5zZXRUaW1lKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzFlMyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pLFlwPVFwLFdwPVFwLnJhbmdlLFpwPXpwKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvcXApKnFwKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpxcCl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvcXB9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLEtwPVpwLFhwPVpwLnJhbmdlLCRwPXpwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpxcCUzNmU1O2U8MCYmKGUrPTM2ZTUpLHQuc2V0VGltZSgzNmU1Kk1hdGguZmxvb3IoKCt0LWUpLzM2ZTUpK2UpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxKcD0kcCx0bT0kcC5yYW5nZSxlbT16cChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpxcCkvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksbm09ZW0saW09ZW0ucmFuZ2U7ZnVuY3Rpb24gcm0odCl7cmV0dXJuIHpwKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqcXApL0dwfSl9dmFyIG9tPXJtKDApLGFtPXJtKDEpLHNtPXJtKDIpLHVtPXJtKDMpLGxtPXJtKDQpLGNtPXJtKDUpLGZtPXJtKDYpLGhtPW9tLnJhbmdlLGRtPWFtLnJhbmdlLHBtPXNtLnJhbmdlLG1tPXVtLnJhbmdlLHltPWxtLnJhbmdlLHZtPWNtLnJhbmdlLGdtPWZtLnJhbmdlLGJtPXpwKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLF9tPWJtLHdtPWJtLnJhbmdlLHhtPXpwKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSk7eG0uZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD96cChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KTpudWxsfTt2YXIgQ209eG0sU209eG0ucmFuZ2UsRW09enAoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqcXApfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3FwfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSxPbT1FbSxrbT1FbS5yYW5nZSxUbT16cChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSxqbT1UbSxBbT1UbS5yYW5nZSxJbT16cChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSxSbT1JbSxNbT1JbS5yYW5nZTtmdW5jdGlvbiBQbSh0KXtyZXR1cm4genAoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9HcH0pfXZhciBEbT1QbSgwKSxObT1QbSgxKSxGbT1QbSgyKSxMbT1QbSgzKSxWbT1QbSg0KSx6bT1QbSg1KSxCbT1QbSg2KSxVbT1EbS5yYW5nZSxIbT1ObS5yYW5nZSxxbT1GbS5yYW5nZSxHbT1MbS5yYW5nZSxRbT1WbS5yYW5nZSxZbT16bS5yYW5nZSxXbT1CbS5yYW5nZSxabT16cChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMiooZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSxLbT1abSxYbT1abS5yYW5nZSwkbT16cChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pOyRtLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/enAoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSk6bnVsbH07dmFyIEptPSRtLHR5PSRtLnJhbmdlO2Z1bmN0aW9uIGV5KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBueSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBpeSh0KXtyZXR1cm57eTp0LG06MCxkOjEsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiByeSh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLGk9dC50aW1lLHI9dC5wZXJpb2RzLG89dC5kYXlzLGE9dC5zaG9ydERheXMscz10Lm1vbnRocyx1PXQuc2hvcnRNb250aHMsbD15eShyKSxjPXZ5KHIpLGY9eXkobyksaD12eShvKSxkPXl5KGEpLHA9dnkoYSksbT15eShzKSx5PXZ5KHMpLHY9eXkodSksZz12eSh1KSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6RnksZTpGeSxmOlV5LEg6THksSTpWeSxqOnp5LEw6QnksbTpIeSxNOnF5LHA6ZnVuY3Rpb24odCl7cmV0dXJuIHJbKyh0LmdldEhvdXJzKCk+PTEyKV19LFE6Z3YsczpidixTOkd5LHU6UXksVTpZeSxWOld5LHc6WnksVzpLeSx4Om51bGwsWDpudWxsLHk6WHksWTokeSxaOkp5LCIlIjp2dn0sXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOnR2LGU6dHYsZjpvdixIOmV2LEk6bnYsajppdixMOnJ2LG06YXYsTTpzdixwOmZ1bmN0aW9uKHQpe3JldHVybiByWysodC5nZXRVVENIb3VycygpPj0xMildfSxROmd2LHM6YnYsUzp1dix1Omx2LFU6Y3YsVjpmdix3Omh2LFc6ZHYseDpudWxsLFg6bnVsbCx5OnB2LFk6bXYsWjp5diwiJSI6dnZ9LHc9e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC53PXBbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIGk9Zi5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9aFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT12LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT1nW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW0uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPXlbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4saSl7cmV0dXJuIFModCxlLG4saSl9LGQ6a3ksZTpreSxmOk15LEg6anksSTpqeSxqOlR5LEw6UnksbTpPeSxNOkF5LHA6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWwuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5wPWNbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sUTpEeSxzOk55LFM6SXksdTpieSxVOl95LFY6d3ksdzpneSxXOnh5LHg6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBTKHQsbixlLGkpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUyh0LGksZSxuKX0seTpTeSxZOkN5LFo6RXksIiUiOlB5fTtmdW5jdGlvbiB4KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbyxhPVtdLHM9LTEsdT0wLGw9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczxsOykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKHUscykpLG51bGwhPShyPWN5W2k9dC5jaGFyQXQoKytzKV0pP2k9dC5jaGFyQXQoKytzKTpyPSJlIj09PWk/IiAiOiIwIiwobz1lW2ldKSYmKGk9byhuLHIpKSxhLnB1c2goaSksdT1zKzEpO3JldHVybiBhLnB1c2godC5zbGljZSh1LHMpKSxhLmpvaW4oIiIpfX1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHIsbz1peSgxOTAwKTtpZihTKG8sdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLCJWImluIG8pe2lmKG8uVjwxfHxvLlY+NTMpcmV0dXJuIG51bGw7InciaW4gb3x8KG8udz0xKSwiWiJpbiBvPyhpPShyPShpPW55KGl5KG8ueSkpKS5nZXRVVENEYXkoKSk+NHx8MD09PXI/Tm0uY2VpbChpKTpObShpKSxpPVJtLm9mZnNldChpLDcqKG8uVi0xKSksby55PWkuZ2V0VVRDRnVsbFllYXIoKSxvLm09aS5nZXRVVENNb250aCgpLG8uZD1pLmdldFVUQ0RhdGUoKSsoby53KzYpJTcpOihpPShyPShpPWUoaXkoby55KSkpLmdldERheSgpKT40fHwwPT09cj9hbS5jZWlsKGkpOmFtKGkpLGk9bm0ub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRGdWxsWWVhcigpLG8ubT1pLmdldE1vbnRoKCksby5kPWkuZ2V0RGF0ZSgpKyhvLncrNiklNyl9ZWxzZSgiVyJpbiBvfHwiVSJpbiBvKSYmKCJ3ImluIG98fChvLnc9InUiaW4gbz9vLnUlNzoiVyJpbiBvPzE6MCkscj0iWiJpbiBvP255KGl5KG8ueSkpLmdldFVUQ0RheSgpOmUoaXkoby55KSkuZ2V0RGF5KCksby5tPTAsby5kPSJXImluIG8/KG8udys2KSU3Kzcqby5XLShyKzUpJTc6by53Kzcqby5VLShyKzYpJTcpO3JldHVybiJaImluIG8/KG8uSCs9by5aLzEwMHwwLG8uTSs9by5aJTEwMCxueShvKSk6ZShvKX19ZnVuY3Rpb24gUyh0LGUsbixpKXtmb3IodmFyIHIsbyxhPTAscz1lLmxlbmd0aCx1PW4ubGVuZ3RoO2E8czspe2lmKGk+PXUpcmV0dXJuLTE7aWYoMzc9PT0ocj1lLmNoYXJDb2RlQXQoYSsrKSkpe2lmKHI9ZS5jaGFyQXQoYSsrKSwhKG89d1tyIGluIGN5P2UuY2hhckF0KGErKyk6cl0pfHwoaT1vKHQsbixpKSk8MClyZXR1cm4tMX1lbHNlIGlmKHIhPW4uY2hhckNvZGVBdChpKyspKXJldHVybi0xfXJldHVybiBpfXJldHVybiBiLng9eChuLGIpLGIuWD14KGksYiksYi5jPXgoZSxiKSxfLng9eChuLF8pLF8uWD14KGksXyksXy5jPXgoZSxfKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXgodCs9IiIsYik7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9Qyh0Kz0iIixleSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXgodCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9Qyh0LG55KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19dmFyIG95LGF5LHN5LHV5LGx5LGN5PXsiLSI6IiIsXzoiICIsMDoiMCJ9LGZ5PS9eXHMqXGQrLyxoeT0vXiUvLGR5PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBweSh0LGUsbil7dmFyIGk9dDwwPyItIjoiIixyPShpPy10OnQpKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88bj9uZXcgQXJyYXkobi1vKzEpLmpvaW4oZSkrcjpyKX1mdW5jdGlvbiBteSh0KXtyZXR1cm4gdC5yZXBsYWNlKGR5LCJcXCQmIil9ZnVuY3Rpb24geXkodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKG15KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gdnkodCl7Zm9yKHZhciBlPXt9LG49LTEsaT10Lmxlbmd0aDsrK248aTspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gZ3kodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0Lnc9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYnkodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpPyh0LnU9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gX3kodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlU9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd3kodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlY9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geHkodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Llc9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ3kodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiBpPyh0Lnk9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU3kodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFeSh0LGUsbil7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiBpPyh0Llo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE95KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5tPWlbMF0tMSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBreSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuZD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIGk/KHQubT0wLHQuZD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuSD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuTT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuUz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIGk/KHQuTD0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQeSh0LGUsbil7dmFyIGk9aHkuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/bitpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBEeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5RPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE55KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LlE9MWUzKitpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZ5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gTHkodCxlKXtyZXR1cm4gcHkodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gVnkodCxlKXtyZXR1cm4gcHkodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIHp5KHQsZSl7cmV0dXJuIHB5KDErbm0uY291bnQoQ20odCksdCksZSwzKX1mdW5jdGlvbiBCeSh0LGUpe3JldHVybiBweSh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gVXkodCxlKXtyZXR1cm4gQnkodCxlKSsiMDAwIn1mdW5jdGlvbiBIeSh0LGUpe3JldHVybiBweSh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHF5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gR3kodCxlKXtyZXR1cm4gcHkodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBReSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gWXkodCxlKXtyZXR1cm4gcHkob20uY291bnQoQ20odCksdCksZSwyKX1mdW5jdGlvbiBXeSh0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/bG0odCk6bG0uY2VpbCh0KSxweShsbS5jb3VudChDbSh0KSx0KSsoND09PUNtKHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIFp5KHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIEt5KHQsZSl7cmV0dXJuIHB5KGFtLmNvdW50KENtKHQpLHQpLGUsMil9ZnVuY3Rpb24gWHkodCxlKXtyZXR1cm4gcHkodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uICR5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBKeSh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK3B5KGUvNjB8MCwiMCIsMikrcHkoZSU2MCwiMCIsMil9ZnVuY3Rpb24gdHYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBldih0LGUpe3JldHVybiBweSh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBudih0LGUpe3JldHVybiBweSh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gaXYodCxlKXtyZXR1cm4gcHkoMStSbS5jb3VudChKbSh0KSx0KSxlLDMpfWZ1bmN0aW9uIHJ2KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBvdih0LGUpe3JldHVybiBydih0LGUpKyIwMDAifWZ1bmN0aW9uIGF2KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gc3YodCxlKXtyZXR1cm4gcHkodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiB1dih0LGUpe3JldHVybiBweSh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGx2KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBjdih0LGUpe3JldHVybiBweShEbS5jb3VudChKbSh0KSx0KSxlLDIpfWZ1bmN0aW9uIGZ2KHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9WbSh0KTpWbS5jZWlsKHQpLHB5KFZtLmNvdW50KEptKHQpLHQpKyg0PT09Sm0odCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gaHYodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZHYodCxlKXtyZXR1cm4gcHkoTm0uY291bnQoSm0odCksdCksZSwyKX1mdW5jdGlvbiBwdih0LGUpe3JldHVybiBweSh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gbXYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIHl2KCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiB2digpe3JldHVybiIlIn1mdW5jdGlvbiBndih0KXtyZXR1cm4rdH1mdW5jdGlvbiBidih0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWZ1bmN0aW9uIF92KHQpe3JldHVybiBveT1yeSh0KSxheT1veS5mb3JtYXQsc3k9b3kucGFyc2UsdXk9b3kudXRjRm9ybWF0LGx5PW95LnV0Y1BhcnNlLG95fV92KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7dmFyIHd2PURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP2Z1bmN0aW9uKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9OnV5KCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKSx4dj0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9Omx5KCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKSxDdj0xZTMsU3Y9NjAqQ3YsRXY9NjAqU3YsT3Y9MjQqRXYsa3Y9NypPdixUdj0zMCpPdixqdj0zNjUqT3Y7ZnVuY3Rpb24gQXYodCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIEl2KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZT8rdDorbmV3IERhdGUoK3QpfWZ1bmN0aW9uIFJ2KHQsZSxuLGksbyxhLHMsdSxsKXt2YXIgYz1icChtcCxHbiksZj1jLmludmVydCxoPWMuZG9tYWluLGQ9bCgiLiVMIikscD1sKCI6JVMiKSxtPWwoIiVJOiVNIikseT1sKCIlSSAlcCIpLHY9bCgiJWEgJWQiKSxnPWwoIiViICVkIiksYj1sKCIlQiIpLF89bCgiJVkiKSx3PVtbcywxLEN2XSxbcyw1LDUqQ3ZdLFtzLDE1LDE1KkN2XSxbcywzMCwzMCpDdl0sW2EsMSxTdl0sW2EsNSw1KlN2XSxbYSwxNSwxNSpTdl0sW2EsMzAsMzAqU3ZdLFtvLDEsRXZdLFtvLDMsMypFdl0sW28sNiw2KkV2XSxbbywxMiwxMipFdl0sW2ksMSxPdl0sW2ksMiwyKk92XSxbbiwxLGt2XSxbZSwxLFR2XSxbZSwzLDMqVHZdLFt0LDEsanZdXTtmdW5jdGlvbiB4KHIpe3JldHVybihzKHIpPHI/ZDphKHIpPHI/cDpvKHIpPHI/bTppKHIpPHI/eTplKHIpPHI/bihyKTxyP3Y6Zzp0KHIpPHI/YjpfKShyKX1mdW5jdGlvbiBDKGUsbixpLG8pe2lmKG51bGw9PWUmJihlPTEwKSwibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBhPU1hdGguYWJzKGktbikvZSxzPXIoZnVuY3Rpb24odCl7cmV0dXJuIHRbMl19KS5yaWdodCh3LGEpO3M9PT13Lmxlbmd0aD8obz1UKG4vanYsaS9qdixlKSxlPXQpOnM/KG89KHM9d1thL3dbcy0xXVsyXTx3W3NdWzJdL2E/cy0xOnNdKVsxXSxlPXNbMF0pOihvPU1hdGgubWF4KFQobixpLGUpLDEpLGU9dSl9cmV0dXJuIG51bGw9PW8/ZTplLmV2ZXJ5KG8pfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUoZih0KSl9LGMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYXAuY2FsbCh0LEl2KSk6aCgpLm1hcChBdil9LGMudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgbixpPWgoKSxyPWlbMF0sbz1pW2kubGVuZ3RoLTFdLGE9bzxyO3JldHVybiBhJiYobj1yLHI9byxvPW4pLG49KG49Qyh0LHIsbyxlKSk/bi5yYW5nZShyLG8rMSk6W10sYT9uLnJldmVyc2UoKTpufSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09ZT94OmwoZSl9LGMubmljZT1mdW5jdGlvbih0LGUpe3ZhciBuPWgoKTtyZXR1cm4odD1DKHQsblswXSxuW24ubGVuZ3RoLTFdLGUpKT9oKFNwKG4sdCkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBncChjLFJ2KHQsZSxuLGksbyxhLHMsdSxsKSl9LGN9dmFyIE12PWZ1bmN0aW9uKCl7cmV0dXJuIFJ2KENtLF9tLG9tLG5tLEpwLEtwLFlwLFVwLGF5KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LFB2PWZ1bmN0aW9uKCl7cmV0dXJuIFJ2KEptLEttLERtLFJtLGptLE9tLFlwLFVwLHV5KS5kb21haW4oW0RhdGUuVVRDKDJlMywwLDEpLERhdGUuVVRDKDJlMywwLDIpXSl9O2Z1bmN0aW9uIER2KHQpe3ZhciBlPTAsbj0xLGk9MSxyPSExO2Z1bmN0aW9uIG8obil7dmFyIG89KG4tZSkqaTtyZXR1cm4gdChyP01hdGgubWF4KDAsTWF0aC5taW4oMSxvKSk6byl9cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPShlPSt0WzBdKT09KG49K3RbMV0pPzA6MS8obi1lKSxvKTpbZSxuXX0sby5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsbyk6cn0sby5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRHYodCkuZG9tYWluKFtlLG5dKS5jbGFtcChyKX0sd3Aobyl9ZnVuY3Rpb24gTnYodCl7dmFyIGU9MCxuPS41LGk9MSxyPTEsbz0xLGE9ITE7ZnVuY3Rpb24gcyhlKXt2YXIgaT0uNSsoKGU9K2UpLW4pKihlPG4/cjpvKTtyZXR1cm4gdChhP01hdGgubWF4KDAsTWF0aC5taW4oMSxpKSk6aSl9cmV0dXJuIHMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzJdLHI9KGU9K3RbMF0pPT0obj0rdFsxXSk/MDouNS8obi1lKSxvPW49PT1pPzA6LjUvKGktbikscyk6W2UsbixpXX0scy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQscyk6YX0scy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTnYodCkuZG9tYWluKFtlLG4saV0pLmNsYW1wKGEpfSx3cChzKX12YXIgRnY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxpPTA7aTxlOyluW2ldPSIjIit0LnNsaWNlKDYqaSw2KisraSk7cmV0dXJuIG59LEx2PUZ2KCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxWdj1GdigiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksenY9RnYoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLEJ2PUZ2KCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxVdj1GdigiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksSHY9RnYoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLHF2PUZ2KCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxHdj1GdigiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksUXY9RnYoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLFl2PWZ1bmN0aW9uKHQpe3JldHVybiBCbih0W3QubGVuZ3RoLTFdKX0sV3Y9bmV3IEFycmF5KDMpLmNvbmNhdCgiZDhiMzY1ZjVmNWY1NWFiNGFjIiwiYTY2MTFhZGZjMjdkODBjZGMxMDE4NTcxIiwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxIiwiOGM1MTBhZDhiMzY1ZjZlOGMzYzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhZDhiMzY1ZjZlOGMzZjVmNWY1YzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIikubWFwKEZ2KSxadj1ZdihXdiksS3Y9bmV3IEFycmF5KDMpLmNvbmNhdCgiYWY4ZGMzZjdmN2Y3N2ZiZjdiIiwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3IiwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIikubWFwKEZ2KSxYdj1ZdihLdiksJHY9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKEZ2KSxKdj1ZdigkdiksdGc9bmV3IEFycmF5KDMpLmNvbmNhdCgiOTk4ZWMzZjdmN2Y3ZjFhMzQwIiwiNWUzYzk5YjJhYmQyZmRiODYzZTY2MTAxIiwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxIiwiNTQyNzg4OTk4ZWMzZDhkYWViZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4OTk4ZWMzZDhkYWViZjdmN2Y3ZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IikubWFwKEZ2KSxlZz1Zdih0Zyksbmc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZjdmN2Y3NjdhOWNmIiwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwIiwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIikubWFwKEZ2KSxpZz1ZdihuZykscmc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKEZ2KSxvZz1ZdihyZyksYWc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFiZmRiIiwiZDcxOTFjZmRhZTYxYWJkOWU5MmM3YmI2IiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkOWU5MmM3YmI2IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZmZmZmJmZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IikubWFwKEZ2KSxzZz1ZdihhZyksdWc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFjZjYwIiwiZDcxOTFjZmRhZTYxYTZkOTZhMWE5NjQxIiwiZDcxOTFjZmRhZTYxZmZmZmJmYTZkOTZhMWE5NjQxIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZmZmZmJmZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IikubWFwKEZ2KSxsZz1Zdih1ZyksY2c9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKEZ2KSxmZz1ZdihjZyksaGc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWY5OTlkOGM5MmNhMjVmIiwiZWRmOGZiYjJlMmUyNjZjMmE0MjM4YjQ1IiwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKEZ2KSxkZz1ZdihoZykscGc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBlY2Y0OWViY2RhODg1NmE3IiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg0MTlkIiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkODEwZjdjNGQwMDRiIikubWFwKEZ2KSxtZz1ZdihwZykseWc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKEZ2KSx2Zz1Zdih5ZyksZ2c9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlOGM4ZmRiYjg0ZTM0YTMzIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZDczMDFmIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmYjMwMDAwN2YwMDAwIikubWFwKEZ2KSxiZz1ZdihnZyksX2c9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlMmYwYTZiZGRiMWM5MDk5IiwiZjZlZmY3YmRjOWUxNjdhOWNmMDI4MThhIiwiZjZlZmY3YmRjOWUxNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2YzU5MDE0NjM2IikubWFwKEZ2KSx3Zz1ZdihfZykseGc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKEZ2KSxDZz1Zdih4ZyksU2c9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTdlMWVmYzk5NGM3ZGQxYzc3IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwY2UxMjU2IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTgwMDQzNjcwMDFmIikubWFwKEZ2KSxFZz1ZdihTZyksT2c9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmRlMGRkZmE5ZmI1YzUxYjhhIiwiZmVlYmUyZmJiNGI5Zjc2OGExYWUwMTdlIiwiZmVlYmUyZmJiNGI5Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3NDkwMDZhIikubWFwKEZ2KSxrZz1ZdihPZyksVGc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKEZ2KSxqZz1ZdihUZyksQWc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjdmY2I5YWRkZDhlMzFhMzU0IiwiZmZmZmNjYzJlNjk5NzhjNjc5MjM4NDQzIiwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA2ODM3MDA0NTI5IikubWFwKEZ2KSxJZz1ZdihBZyksUmc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZmN2JjZmVjNDRmZDk1ZjBlIiwiZmZmZmQ0ZmVkOThlZmU5OTI5Y2M0YzAyIiwiZmZmZmQ0ZmVkOThlZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOTkzNDA0NjYyNTA2IikubWFwKEZ2KSxNZz1ZdihSZyksUGc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKEZ2KSxEZz1ZdihQZyksTmc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZGVlYmY3OWVjYWUxMzE4MmJkIiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1IiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiIikubWFwKEZ2KSxGZz1ZdihOZyksTGc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWUwYTFkOTliMzFhMzU0IiwiZWRmOGU5YmFlNGIzNzRjNDc2MjM4YjQ1IiwiZWRmOGU5YmFlNGIzNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKEZ2KSxWZz1ZdihMZyksemc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKEZ2KSxCZz1Zdih6ZyksVWc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWZlZGY1YmNiZGRjNzU2YmIxIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NmE1MWEzIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNTQyNzhmM2YwMDdkIikubWFwKEZ2KSxIZz1ZdihVZykscWc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlMGQyZmM5MjcyZGUyZDI2IiwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkIiwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkIikubWFwKEZ2KSxHZz1ZdihxZyksUWc9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKEZ2KSxZZz1ZdihRZyksV2c9eWkoT24oMzAwLC41LDApLE9uKC0yNDAsLjUsMSkpLFpnPXlpKE9uKC0xMDAsLjc1LC4zNSksT24oODAsMS41LC44KSksS2c9eWkoT24oMjYwLC43NSwuMzUpLE9uKDgwLDEuNSwuOCkpLFhnPU9uKCksJGc9ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBlPU1hdGguYWJzKHQtLjUpO3JldHVybiBYZy5oPTM2MCp0LTEwMCxYZy5zPTEuNS0xLjUqZSxYZy5sPS44LS45KmUsWGcrIiJ9LEpnPUdlKCksdGI9TWF0aC5QSS8zLGViPTIqTWF0aC5QSS8zLG5iPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0PSguNS10KSpNYXRoLlBJLEpnLnI9MjU1KihlPU1hdGguc2luKHQpKSplLEpnLmc9MjU1KihlPU1hdGguc2luKHQrdGIpKSplLEpnLmI9MjU1KihlPU1hdGguc2luKHQrZWIpKSplLEpnKyIifTtmdW5jdGlvbiBpYih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX12YXIgcmI9aWIoRnYoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxvYj1pYihGdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLGFiPWliKEZ2KCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksc2I9aWIoRnYoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKSx1Yj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGxiPU1hdGguYWJzLGNiPU1hdGguYXRhbjIsZmI9TWF0aC5jb3MsaGI9TWF0aC5tYXgsZGI9TWF0aC5taW4scGI9TWF0aC5zaW4sbWI9TWF0aC5zcXJ0LHliPTFlLTEyLHZiPU1hdGguUEksZ2I9dmIvMixiYj0yKnZiO2Z1bmN0aW9uIF9iKHQpe3JldHVybiB0Pj0xP2diOnQ8PS0xPy1nYjpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gd2IodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24geGIodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gQ2IodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBTYih0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBFYih0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBPYih0LGUsbixpLHIsbyxhKXt2YXIgcz10LW4sdT1lLWksbD0oYT9vOi1vKS9tYihzKnMrdSp1KSxjPWwqdSxmPS1sKnMsaD10K2MsZD1lK2YscD1uK2MsbT1pK2YseT0oaCtwKS8yLHY9KGQrbSkvMixnPXAtaCxiPW0tZCxfPWcqZytiKmIsdz1yLW8seD1oKm0tcCpkLEM9KGI8MD8tMToxKSptYihoYigwLHcqdypfLXgqeCkpLFM9KHgqYi1nKkMpL18sRT0oLXgqZy1iKkMpL18sTz0oeCpiK2cqQykvXyxrPSgteCpnK2IqQykvXyxUPVMteSxqPUUtdixBPU8teSxJPWstdjtyZXR1cm4gVCpUK2oqaj5BKkErSSpJJiYoUz1PLEU9aykse2N4OlMsY3k6RSx4MDE6LWMseTAxOi1mLHgxMTpTKihyL3ctMSkseTExOkUqKHIvdy0xKX19dmFyIGtiPWZ1bmN0aW9uKCl7dmFyIHQ9d2IsZT14YixuPXViKDApLGk9bnVsbCxyPUNiLG89U2IsYT1FYixzPW51bGw7ZnVuY3Rpb24gdSgpe3ZhciB1LGwsYyxmPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLWdiLHA9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktZ2IsbT1sYihwLWQpLHk9cD5kO2lmKHN8fChzPXU9em8oKSksaDxmJiYobD1oLGg9ZixmPWwpLGg+eWIpaWYobT5iYi15YilzLm1vdmVUbyhoKmZiKGQpLGgqcGIoZCkpLHMuYXJjKDAsMCxoLGQscCwheSksZj55YiYmKHMubW92ZVRvKGYqZmIocCksZipwYihwKSkscy5hcmMoMCwwLGYscCxkLHkpKTtlbHNle3ZhciB2LGcsYj1kLF89cCx3PWQseD1wLEM9bSxTPW0sRT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLE89RT55YiYmKGk/K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOm1iKGYqZitoKmgpKSxrPWRiKGxiKGgtZikvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFQ9ayxqPWs7aWYoTz55Yil7dmFyIEE9X2IoTy9mKnBiKEUpKSxJPV9iKE8vaCpwYihFKSk7KEMtPTIqQSk+eWI/KHcrPUEqPXk/MTotMSx4LT1BKTooQz0wLHc9eD0oZCtwKS8yKSwoUy09MipJKT55Yj8oYis9SSo9eT8xOi0xLF8tPUkpOihTPTAsYj1fPShkK3ApLzIpfXZhciBSPWgqZmIoYiksTT1oKnBiKGIpLFA9ZipmYih4KSxEPWYqcGIoeCk7aWYoaz55Yil7dmFyIE49aCpmYihfKSxGPWgqcGIoXyksTD1mKmZiKHcpLFY9ZipwYih3KTtpZihtPHZiKXt2YXIgej1DPnliP2Z1bmN0aW9uKHQsZSxuLGkscixvLGEscyl7dmFyIHU9TC1SLGw9Vi1NLGM9YS1OLGY9cy1GLGg9KGMqKE0tRiktZiooUi1OKSkvKGYqdS1jKmwpO3JldHVybltSK2gqdSxNK2gqbF19KDAsMCwwLDAsMCwwLFAsRCk6W1AsRF0sQj1SLXpbMF0sVT1NLXpbMV0sSD1OLXpbMF0scT1GLXpbMV0sRz0xL3BiKCgoYz0oQipIK1UqcSkvKG1iKEIqQitVKlUpKm1iKEgqSCtxKnEpKSk+MT8wOmM8LTE/dmI6TWF0aC5hY29zKGMpKS8yKSxRPW1iKHpbMF0qelswXSt6WzFdKnpbMV0pO1Q9ZGIoaywoZi1RKS8oRy0xKSksaj1kYihrLChoLVEpLyhHKzEpKX19Uz55Yj9qPnliPyh2PU9iKEwsVixSLE0saCxqLHkpLGc9T2IoTixGLFAsRCxoLGoseSkscy5tb3ZlVG8odi5jeCt2LngwMSx2LmN5K3YueTAxKSxqPGs/cy5hcmModi5jeCx2LmN5LGosY2Iodi55MDEsdi54MDEpLGNiKGcueTAxLGcueDAxKSwheSk6KHMuYXJjKHYuY3gsdi5jeSxqLGNiKHYueTAxLHYueDAxKSxjYih2LnkxMSx2LngxMSksIXkpLHMuYXJjKDAsMCxoLGNiKHYuY3krdi55MTEsdi5jeCt2LngxMSksY2IoZy5jeStnLnkxMSxnLmN4K2cueDExKSwheSkscy5hcmMoZy5jeCxnLmN5LGosY2IoZy55MTEsZy54MTEpLGNiKGcueTAxLGcueDAxKSwheSkpKToocy5tb3ZlVG8oUixNKSxzLmFyYygwLDAsaCxiLF8sIXkpKTpzLm1vdmVUbyhSLE0pLGY+eWImJkM+eWI/VD55Yj8odj1PYihQLEQsTixGLGYsLVQseSksZz1PYihSLE0sTCxWLGYsLVQseSkscy5saW5lVG8odi5jeCt2LngwMSx2LmN5K3YueTAxKSxUPGs/cy5hcmModi5jeCx2LmN5LFQsY2Iodi55MDEsdi54MDEpLGNiKGcueTAxLGcueDAxKSwheSk6KHMuYXJjKHYuY3gsdi5jeSxULGNiKHYueTAxLHYueDAxKSxjYih2LnkxMSx2LngxMSksIXkpLHMuYXJjKDAsMCxmLGNiKHYuY3krdi55MTEsdi5jeCt2LngxMSksY2IoZy5jeStnLnkxMSxnLmN4K2cueDExKSx5KSxzLmFyYyhnLmN4LGcuY3ksVCxjYihnLnkxMSxnLngxMSksY2IoZy55MDEsZy54MDEpLCF5KSkpOnMuYXJjKDAsMCxmLHgsdyx5KTpzLmxpbmVUbyhQLEQpfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLHUpcmV0dXJuIHM9bnVsbCx1KyIifHxudWxsfXJldHVybiB1LmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGk9KCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXZiLzI7cmV0dXJuW2ZiKGkpKm4scGIoaSkqbl19LHUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp1YigrZSksdSk6dH0sdS5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTplfSx1LmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTpufSx1LnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6aX0sdS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOnJ9LHUuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6b30sdS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTphfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsdSk6c30sdX07ZnVuY3Rpb24gVGIodCl7dGhpcy5fY29udGV4dD10fVRiLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBqYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRiKHQpfTtmdW5jdGlvbiBBYih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBJYih0KXtyZXR1cm4gdFsxXX12YXIgUmI9ZnVuY3Rpb24oKXt2YXIgdD1BYixlPUliLG49dWIoITApLGk9bnVsbCxyPWpiLG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciBzLHUsbCxjPWEubGVuZ3RoLGY9ITE7Zm9yKG51bGw9PWkmJihvPXIobD16bygpKSkscz0wO3M8PWM7KytzKSEoczxjJiZuKHU9YVtzXSxzLGEpKT09PWYmJigoZj0hZik/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksZiYmby5wb2ludCgrdCh1LHMsYSksK2UodSxzLGEpKTtpZihsKXJldHVybiBvPW51bGwsbCsiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dWIoK2UpLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxhKTplfSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YighIXQpLGEpOm59LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxudWxsIT1pJiYobz1yKGkpKSxhKTpyfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/aT1vPW51bGw6bz1yKGk9dCksYSk6aX0sYX0sTWI9ZnVuY3Rpb24oKXt2YXIgdD1BYixlPW51bGwsbj11YigwKSxpPUliLHI9dWIoITApLG89bnVsbCxhPWpiLHM9bnVsbDtmdW5jdGlvbiB1KHUpe3ZhciBsLGMsZixoLGQscD11Lmxlbmd0aCxtPSExLHk9bmV3IEFycmF5KHApLHY9bmV3IEFycmF5KHApO2ZvcihudWxsPT1vJiYocz1hKGQ9em8oKSkpLGw9MDtsPD1wOysrbCl7aWYoIShsPHAmJnIoaD11W2xdLGwsdSkpPT09bSlpZihtPSFtKWM9bCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxmPWwtMTtmPj1jOy0tZilzLnBvaW50KHlbZl0sdltmXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9bSYmKHlbbF09K3QoaCxsLHUpLHZbbF09K24oaCxsLHUpLHMucG9pbnQoZT8rZShoLGwsdSk6eVtsXSxpPytpKGgsbCx1KTp2W2xdKSl9aWYoZClyZXR1cm4gcz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gbCgpe3JldHVybiBSYigpLmRlZmluZWQocikuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gdS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246dWIoK24pLGU9bnVsbCx1KTp0fSx1LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dWIoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOmV9LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxpPW51bGwsdSk6bn0sdS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTpufSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTppfSx1LmxpbmVYMD11LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KG4pfSx1LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KGkpfSx1LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBsKCkueChlKS55KG4pfSx1LmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YighIXQpLHUpOnJ9LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYocz1hKG8pKSx1KTphfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1zPW51bGw6cz1hKG89dCksdSk6b30sdX0sUGI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LERiPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxOYj1mdW5jdGlvbigpe3ZhciB0PURiLGU9UGIsbj1udWxsLGk9dWIoMCkscj11YihiYiksbz11YigwKTtmdW5jdGlvbiBhKGEpe3ZhciBzLHUsbCxjLGYsaD1hLmxlbmd0aCxkPTAscD1uZXcgQXJyYXkoaCksbT1uZXcgQXJyYXkoaCkseT0raS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdj1NYXRoLm1pbihiYixNYXRoLm1heCgtYmIsci5hcHBseSh0aGlzLGFyZ3VtZW50cykteSkpLGc9TWF0aC5taW4oTWF0aC5hYnModikvaCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj1nKih2PDA/LTE6MSk7Zm9yKHM9MDtzPGg7KytzKShmPW1bcFtzXT1zXT0rdChhW3NdLHMsYSkpPjAmJihkKz1mKTtmb3IobnVsbCE9ZT9wLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShtW3RdLG1bbl0pfSk6bnVsbCE9biYmcC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oYVt0XSxhW2VdKX0pLHM9MCxsPWQ/KHYtaCpiKS9kOjA7czxoOysrcyx5PWMpbVt1PXBbc11dPXtkYXRhOmFbdV0saW5kZXg6cyx2YWx1ZTpmPW1bdV0sc3RhcnRBbmdsZTp5LGVuZEFuZ2xlOmM9eSsoZj4wP2YqbDowKStiLHBhZEFuZ2xlOmd9O3JldHVybiBtfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dWIoK2UpLGEpOnR9LGEuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxhKTplfSxhLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGEpOml9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksYSk6cn0sYS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxhKTpvfSxhfSxGYj1WYihqYik7ZnVuY3Rpb24gTGIodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBWYih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgTGIodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiB6Yih0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShWYih0KSk6ZSgpLl9jdXJ2ZX0sdH1MYi5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19O3ZhciBCYj1mdW5jdGlvbigpe3JldHVybiB6YihSYigpLmN1cnZlKEZiKSl9LFViPWZ1bmN0aW9uKCl7dmFyIHQ9TWIoKS5jdXJ2ZShGYiksZT10LmN1cnZlLG49dC5saW5lWDAsaT10LmxpbmVYMSxyPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB6YihuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gemIoaSgpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHpiKHIoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB6YihvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFZiKHQpKTplKCkuX2N1cnZlfSx0fSxIYj1mdW5jdGlvbih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX0scWI9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEdiKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBRYih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gWWIodCl7dmFyIGU9R2Isbj1RYixpPUFiLHI9SWIsbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgYSxzPXFiLmNhbGwoYXJndW1lbnRzKSx1PWUuYXBwbHkodGhpcyxzKSxsPW4uYXBwbHkodGhpcyxzKTtpZihvfHwobz1hPXpvKCkpLHQobywraS5hcHBseSh0aGlzLChzWzBdPXUscykpLCtyLmFwcGx5KHRoaXMscyksK2kuYXBwbHkodGhpcywoc1swXT1sLHMpKSwrci5hcHBseSh0aGlzLHMpKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxhKTppfSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksYSk6cn0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDp0LGEpOm99LGF9ZnVuY3Rpb24gV2IodCxlLG4saSxyKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK2kpLzIsbixlLHIsaSxyKX1mdW5jdGlvbiBaYih0LGUsbixpLHIpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obityKS8yLGksbixpLHIpfWZ1bmN0aW9uIEtiKHQsZSxuLGkscil7dmFyIG89SGIoZSxuKSxhPUhiKGUsbj0obityKS8yKSxzPUhiKGksbiksdT1IYihpLHIpO3QubW92ZVRvKG9bMF0sb1sxXSksdC5iZXppZXJDdXJ2ZVRvKGFbMF0sYVsxXSxzWzBdLHNbMV0sdVswXSx1WzFdKX1mdW5jdGlvbiBYYigpe3JldHVybiBZYihXYil9ZnVuY3Rpb24gJGIoKXtyZXR1cm4gWWIoWmIpfWZ1bmN0aW9uIEpiKCl7dmFyIHQ9WWIoS2IpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9dmFyIHRfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvdmIpO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxiYil9fSxlXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxuXz1NYXRoLnNxcnQoMS8zKSxpXz0yKm5fLHJfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvaV8pLGk9bipuXzt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhpLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLWksMCksdC5jbG9zZVBhdGgoKX19LG9fPU1hdGguc2luKHZiLzEwKS9NYXRoLnNpbig3KnZiLzEwKSxhXz1NYXRoLnNpbihiYi8xMCkqb18sc189LU1hdGguY29zKGJiLzEwKSpvXyx1Xz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxpPWFfKm4scj1zXypuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGkscik7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIGE9YmIqby81LHM9TWF0aC5jb3MoYSksdT1NYXRoLnNpbihhKTt0LmxpbmVUbyh1Km4sLXMqbiksdC5saW5lVG8ocyppLXUqcix1KmkrcypyKX10LmNsb3NlUGF0aCgpfX0sbF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSksaT0tbi8yO3QucmVjdChpLGksbixuKX19LGNfPU1hdGguc3FydCgzKSxmXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMypjXykpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygtY18qbiwtbiksdC5saW5lVG8oY18qbiwtbiksdC5jbG9zZVBhdGgoKX19LGhfPU1hdGguc3FydCgzKS8yLGRfPTEvTWF0aC5zcXJ0KDEyKSxwXz0zKihkXy8yKzEpLG1fPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvcF8pLGk9bi8yLHI9bipkXyxvPWksYT1uKmRfK24scz0tbyx1PWE7dC5tb3ZlVG8oaSxyKSx0LmxpbmVUbyhvLGEpLHQubGluZVRvKHMsdSksdC5saW5lVG8oLS41KmktaF8qcixoXyppKy0uNSpyKSx0LmxpbmVUbygtLjUqby1oXyphLGhfKm8rLS41KmEpLHQubGluZVRvKC0uNSpzLWhfKnUsaF8qcystLjUqdSksdC5saW5lVG8oLS41KmkraF8qciwtLjUqci1oXyppKSx0LmxpbmVUbygtLjUqbytoXyphLC0uNSphLWhfKm8pLHQubGluZVRvKC0uNSpzK2hfKnUsLS41KnUtaF8qcyksdC5jbG9zZVBhdGgoKX19LHlfPVt0XyxlXyxyXyxsXyx1XyxmXyxtX10sdl89ZnVuY3Rpb24oKXt2YXIgdD11Yih0XyksZT11Yig2NCksbj1udWxsO2Z1bmN0aW9uIGkoKXt2YXIgaTtpZihufHwobj1pPXpvKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGkpcmV0dXJuIG49bnVsbCxpKyIifHxudWxsfXJldHVybiBpLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp1YihlKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksaSk6ZX0saS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LGkpOm59LGl9LGdfPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBiXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gX18odCl7dGhpcy5fY29udGV4dD10fV9fLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6Yl8odGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6Yl8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciB3Xz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IF9fKHQpfTtmdW5jdGlvbiB4Xyh0KXt0aGlzLl9jb250ZXh0PXR9eF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6Z18sYXJlYUVuZDpnXyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6Yl8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBDXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHhfKHQpfTtmdW5jdGlvbiBTXyh0KXt0aGlzLl9jb250ZXh0PXR9U18ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixpPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLGkpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4saSk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpiXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIEVfPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU18odCl9O2Z1bmN0aW9uIE9fKHQsZSl7dGhpcy5fYmFzaXM9bmV3IF9fKHQpLHRoaXMuX2JldGE9ZX1PXy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciBpLHI9dFswXSxvPWVbMF0sYT10W25dLXIscz1lW25dLW8sdT0tMTsrK3U8PW47KXRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFt1XSsoMS10aGlzLl9iZXRhKSoocisoaT11L24pKmEpLHRoaXMuX2JldGEqZVt1XSsoMS10aGlzLl9iZXRhKSoobytpKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIGtfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IF9fKHQpOm5ldyBPXyh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpO2Z1bmN0aW9uIFRfKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gal8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpUXyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6VF8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBBXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBqXyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBJXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9SV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6Z18sYXJlYUVuZDpnXyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OlRfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgUl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgSV8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gTV8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fU1fLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlRfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgUF89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgTV8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gRF8odCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPnliKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSx1PTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvdSxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvdX1pZih0Ll9sMjNfYT55Yil7dmFyIGw9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypsK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvYyxhPShhKmwrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9jfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBOXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfU5fLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6RF8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgRl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBOXyh0LGUpOm5ldyBqXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIExfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9TF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6Z18sYXJlYUVuZDpnXyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxpPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4raSppLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpEXyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBWXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IExfKHQsZSk6bmV3IElfKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gel8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX16Xy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQsaT10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK2kqaSx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6RF8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgQl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyB6Xyh0LGUpOm5ldyBNXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIFVfKHQpe3RoaXMuX2NvbnRleHQ9dH1VXy5wcm90b3R5cGU9e2FyZWFTdGFydDpnXyxhcmVhRW5kOmdfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19O3ZhciBIXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFVfKHQpfTtmdW5jdGlvbiBxXyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gR18odCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4ocV8obykrcV8oYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBRXyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gWV8odCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24gV18odCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFpfKHQpe3RoaXMuX2NvbnRleHQ9bmV3IEtfKHQpfWZ1bmN0aW9uIEtfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBYXyh0KXtyZXR1cm4gbmV3IFdfKHQpfWZ1bmN0aW9uICRfKHQpe3JldHVybiBuZXcgWl8odCl9ZnVuY3Rpb24gSl8odCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHR3KHQpe3ZhciBlLG4saT10Lmxlbmd0aC0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpO2ZvcihyWzBdPTAsb1swXT0yLGFbMF09dFswXSsyKnRbMV0sZT0xO2U8aS0xOysrZSlyW2VdPTEsb1tlXT00LGFbZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihyW2ktMV09MixvW2ktMV09NyxhW2ktMV09OCp0W2ktMV0rdFtpXSxlPTE7ZTxpOysrZSlvW2VdLT1uPXJbZV0vb1tlLTFdLGFbZV0tPW4qYVtlLTFdO2ZvcihyW2ktMV09YVtpLTFdL29baS0xXSxlPWktMjtlPj0wOy0tZSlyW2VdPShhW2VdLXJbZSsxXSkvb1tlXTtmb3Iob1tpLTFdPSh0W2ldK3JbaS0xXSkvMixlPTA7ZTxpLTE7KytlKW9bZV09Mip0W2UrMV0tcltlKzFdO3JldHVybltyLG9dfVdfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpZXyh0aGlzLHRoaXMuX3QwLFFfKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxZXyh0aGlzLFFfKHRoaXMsbj1HXyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6WV8odGhpcyx0aGlzLl90MCxuPUdfKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKFpfLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdfLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7V18ucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxLXy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4saSxyLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsaSxuLG8scil9fSxKXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgaT10dyh0KSxyPXR3KGUpLG89MCxhPTE7YTxuOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGlbMF1bb10sclswXVtvXSxpWzFdW29dLHJbMV1bb10sdFthXSxlW2FdKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgZXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKXyh0KX07ZnVuY3Rpb24gbncodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfW53LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19O3ZhciBpdz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG53KHQsLjUpfTtmdW5jdGlvbiBydyh0KXtyZXR1cm4gbmV3IG53KHQsMCl9ZnVuY3Rpb24gb3codCl7cmV0dXJuIG5ldyBudyh0LDEpfXZhciBhdz1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4xKWZvcih2YXIgbixpLHIsbz0xLGE9dFtlWzBdXSxzPWEubGVuZ3RoO288cjsrK28pZm9yKGk9YSxhPXRbZVtvXV0sbj0wO248czsrK24pYVtuXVsxXSs9YVtuXVswXT1pc05hTihpW25dWzFdKT9pW25dWzBdOmlbbl1bMV19LHN3PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn07ZnVuY3Rpb24gdXcodCxlKXtyZXR1cm4gdFtlXX12YXIgbHc9ZnVuY3Rpb24oKXt2YXIgdD11YihbXSksZT1zdyxuPWF3LGk9dXc7ZnVuY3Rpb24gcihyKXt2YXIgbyxhLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmxlbmd0aCxsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwpO2ZvcihvPTA7bzxsOysrbyl7Zm9yKHZhciBmLGg9c1tvXSxkPWNbb109bmV3IEFycmF5KHUpLHA9MDtwPHU7KytwKWRbcF09Zj1bMCwraShyW3BdLGgscCxyKV0sZi5kYXRhPXJbcF07ZC5rZXk9aH1mb3Iobz0wLGE9ZShjKTtvPGw7KytvKWNbYVtvXV0uaW5kZXg9bztyZXR1cm4gbihjLGEpLGN9cmV0dXJuIHIua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnViKHFiLmNhbGwoZSkpLHIpOnR9LHIudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCkscik6aX0sci5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P3N3OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIocWIuY2FsbCh0KSkscik6ZX0sci5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9hdzp0LHIpOm59LHJ9LGN3PWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixpLHIsbz0wLGE9dFswXS5sZW5ndGg7bzxhOysrbyl7Zm9yKHI9bj0wO248aTsrK24pcis9dFtuXVtvXVsxXXx8MDtpZihyKWZvcihuPTA7bjxpOysrbil0W25dW29dWzFdLz1yfWF3KHQsZSl9fSxmdz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgbixpLHIsbyxhLHMsdT0wLGw9dFtlWzBdXS5sZW5ndGg7dTxsOysrdSlmb3Iobz1hPTAsbj0wO248czsrK24pKHI9KGk9dFtlW25dXVt1XSlbMV0taVswXSk+PTA/KGlbMF09byxpWzFdPW8rPXIpOnI8MD8oaVsxXT1hLGlbMF09YSs9cik6aVswXT1vfSxodz1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4saT0wLHI9dFtlWzBdXSxvPXIubGVuZ3RoO2k8bzsrK2kpe2Zvcih2YXIgYT0wLHM9MDthPG47KythKXMrPXRbYV1baV1bMV18fDA7cltpXVsxXSs9cltpXVswXT0tcy8yfWF3KHQsZSl9fSxkdz1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wJiYoaT0obj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixpLHIsbz0wLGE9MTthPGk7KythKXtmb3IodmFyIHM9MCx1PTAsbD0wO3M8cjsrK3Mpe2Zvcih2YXIgYz10W2Vbc11dLGY9Y1thXVsxXXx8MCxoPShmLShjW2EtMV1bMV18fDApKS8yLGQ9MDtkPHM7KytkKXt2YXIgcD10W2VbZF1dO2grPShwW2FdWzFdfHwwKS0ocFthLTFdWzFdfHwwKX11Kz1mLGwrPWgqZn1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLHUmJihvLT1sL3UpfW5bYS0xXVsxXSs9blthLTFdWzBdPW8sYXcodCxlKX19LHB3PWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKG13KTtyZXR1cm4gc3codCkuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KX07ZnVuY3Rpb24gbXcodCl7Zm9yKHZhciBlLG49MCxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KShlPSt0W2ldWzFdKSYmKG4rPWUpO3JldHVybiBufXZhciB5dz1mdW5jdGlvbih0KXtyZXR1cm4gcHcodCkucmV2ZXJzZSgpfSx2dz1mdW5jdGlvbih0KXt2YXIgZSxuLGk9dC5sZW5ndGgscj10Lm1hcChtdyksbz1zdyh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbZV0tclt0XX0pLGE9MCxzPTAsdT1bXSxsPVtdO2ZvcihlPTA7ZTxpOysrZSluPW9bZV0sYTxzPyhhKz1yW25dLHUucHVzaChuKSk6KHMrPXJbbl0sbC5wdXNoKG4pKTtyZXR1cm4gbC5yZXZlcnNlKCkuY29uY2F0KHUpfSxndz1mdW5jdGlvbih0KXtyZXR1cm4gc3codCkucmV2ZXJzZSgpfSxidz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIF93KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHd3KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHh3KCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gQ3codCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBTdyh0LGUpe3ZhciBuPWUsaT1lLlIscj1uLlU7cj9yLkw9PT1uP3IuTD1pOnIuUj1pOnQuXz1pLGkuVT1yLG4uVT1pLG4uUj1pLkwsbi5SJiYobi5SLlU9biksaS5MPW59ZnVuY3Rpb24gRXcodCxlKXt2YXIgbj1lLGk9ZS5MLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLkw9aS5SLG4uTCYmKG4uTC5VPW4pLGkuUj1ufWZ1bmN0aW9uIE93KHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH14dy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnh3LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuLGkscjtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtuPXR9ZWxzZSB0aGlzLl8/KHQ9T3codGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUsbj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLG49bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9bixlLkM9ITAsdD1lO24mJm4uQzspbj09PShpPW4uVSkuTD8ocj1pLlIpJiZyLkM/KG4uQz1yLkM9ITEsaS5DPSEwLHQ9aSk6KHQ9PT1uLlImJihTdyh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLGkuQz0hMCxFdyh0aGlzLGkpKToocj1pLkwpJiZyLkM/KG4uQz1yLkM9ITEsaS5DPSEwLHQ9aSk6KHQ9PT1uLkwmJihFdyh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLGkuQz0hMCxTdyh0aGlzLGkpKSxuPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUsbixpLHI9dC5VLG89dC5MLGE9dC5SO2lmKG49bz9hP093KGEpOm86YSxyP3IuTD09PXQ/ci5MPW46ci5SPW46dGhpcy5fPW4sbyYmYT8oaT1uLkMsbi5DPXQuQyxuLkw9byxvLlU9bixuIT09YT8ocj1uLlUsbi5VPXQuVSxyLkw9dD1uLlIsbi5SPWEsYS5VPW4pOihuLlU9cixyPW4sdD1uLlIpKTooaT10LkMsdD1uKSx0JiYodC5VPXIpLCFpKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1yLkwpe2lmKChlPXIuUikuQyYmKGUuQz0hMSxyLkM9ITAsU3codGhpcyxyKSxlPXIuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxFdyh0aGlzLGUpLGU9ci5SKSxlLkM9ci5DLHIuQz1lLlIuQz0hMSxTdyh0aGlzLHIpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPXIuTCkuQyYmKGUuQz0hMSxyLkM9ITAsRXcodGhpcyxyKSxlPXIuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxTdyh0aGlzLGUpLGU9ci5MKSxlLkM9ci5DLHIuQz1lLkwuQz0hMSxFdyh0aGlzLHIpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PXIscj1yLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIGt3PXh3O2Z1bmN0aW9uIFR3KHQsZSxuLGkpe3ZhciByPVtudWxsLG51bGxdLG89S3cucHVzaChyKS0xO3JldHVybiByLmxlZnQ9dCxyLnJpZ2h0PWUsbiYmQXcocix0LGUsbiksaSYmQXcocixlLHQsaSksV3dbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksV3dbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobykscn1mdW5jdGlvbiBqdyh0LGUsbil7dmFyIGk9W2Usbl07cmV0dXJuIGkubGVmdD10LGl9ZnVuY3Rpb24gQXcodCxlLG4saSl7dFswXXx8dFsxXT90LmxlZnQ9PT1uP3RbMV09aTp0WzBdPWk6KHRbMF09aSx0LmxlZnQ9ZSx0LnJpZ2h0PW4pfWZ1bmN0aW9uIEl3KHQsZSxuLGkscil7dmFyIG8sYT10WzBdLHM9dFsxXSx1PWFbMF0sbD1hWzFdLGM9MCxmPTEsaD1zWzBdLXUsZD1zWzFdLWw7aWYobz1lLXUsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfWVsc2UgaWYoaD4wKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9aWYobz1pLXUsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoaD4wKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9aWYobz1uLWwsZHx8IShvPjApKXtpZihvLz1kLGQ8MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfWVsc2UgaWYoZD4wKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9aWYobz1yLWwsZHx8IShvPDApKXtpZihvLz1kLGQ8MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoZD4wKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9cmV0dXJuIShjPjB8fGY8MSl8fChjPjAmJih0WzBdPVt1K2MqaCxsK2MqZF0pLGY8MSYmKHRbMV09W3UrZipoLGwrZipkXSksITApfX19fX1mdW5jdGlvbiBSdyh0LGUsbixpLHIpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSxzLHU9dFswXSxsPXQubGVmdCxjPXQucmlnaHQsZj1sWzBdLGg9bFsxXSxkPWNbMF0scD1jWzFdLG09KGYrZCkvMix5PShoK3ApLzI7aWYocD09PWgpe2lmKG08ZXx8bT49aSlyZXR1cm47aWYoZj5kKXtpZih1KXtpZih1WzFdPj1yKXJldHVybn1lbHNlIHU9W20sbl07bz1bbSxyXX1lbHNle2lmKHUpe2lmKHVbMV08bilyZXR1cm59ZWxzZSB1PVttLHJdO289W20sbl19fWVsc2UgaWYocz15LShhPShmLWQpLyhwLWgpKSptLGE8LTF8fGE+MSlpZihmPmQpe2lmKHUpe2lmKHVbMV0+PXIpcmV0dXJufWVsc2UgdT1bKG4tcykvYSxuXTtvPVsoci1zKS9hLHJdfWVsc2V7aWYodSl7aWYodVsxXTxuKXJldHVybn1lbHNlIHU9WyhyLXMpL2Escl07bz1bKG4tcykvYSxuXX1lbHNlIGlmKGg8cCl7aWYodSl7aWYodVswXT49aSlyZXR1cm59ZWxzZSB1PVtlLGEqZStzXTtvPVtpLGEqaStzXX1lbHNle2lmKHUpe2lmKHVbMF08ZSlyZXR1cm59ZWxzZSB1PVtpLGEqaStzXTtvPVtlLGEqZStzXX1yZXR1cm4gdFswXT11LHRbMV09bywhMH1mdW5jdGlvbiBNdyh0LGUpe3ZhciBuPXQuc2l0ZSxpPWUubGVmdCxyPWUucmlnaHQ7cmV0dXJuIG49PT1yJiYocj1pLGk9bikscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihuPT09aT8oaT1lWzFdLHI9ZVswXSk6KGk9ZVswXSxyPWVbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uIFB3KHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiBEdyh0LGUpe3JldHVybiBlWysoZS5sZWZ0PT09dC5zaXRlKV19dmFyIE53LEZ3PVtdO2Z1bmN0aW9uIEx3KHQpe3ZhciBlPXQuUCxuPXQuTjtpZihlJiZuKXt2YXIgaT1lLnNpdGUscj10LnNpdGUsbz1uLnNpdGU7aWYoaSE9PW8pe3ZhciBhPXJbMF0scz1yWzFdLHU9aVswXS1hLGw9aVsxXS1zLGM9b1swXS1hLGY9b1sxXS1zLGg9MioodSpmLWwqYyk7aWYoIShoPj0tJHcpKXt2YXIgZD11KnUrbCpsLHA9YypjK2YqZixtPShmKmQtbCpwKS9oLHk9KHUqcC1jKmQpL2gsdj1Gdy5wb3AoKXx8bmV3IGZ1bmN0aW9uKCl7Q3codGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfTt2LmFyYz10LHYuc2l0ZT1yLHYueD1tK2Esdi55PSh2LmN5PXkrcykrTWF0aC5zcXJ0KG0qbSt5KnkpLHQuY2lyY2xlPXY7Zm9yKHZhciBnPW51bGwsYj1ady5fO2I7KWlmKHYueTxiLnl8fHYueT09PWIueSYmdi54PD1iLngpe2lmKCFiLkwpe2c9Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7Zz1iO2JyZWFrfWI9Yi5SfVp3Lmluc2VydChnLHYpLGd8fChOdz12KX19fX1mdW5jdGlvbiBWdyh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoTnc9ZS5OKSxady5yZW1vdmUoZSksRncucHVzaChlKSxDdyhlKSx0LmNpcmNsZT1udWxsKX12YXIgenc9W107ZnVuY3Rpb24gQncodCl7dmFyIGU9encucG9wKCl8fG5ldyBmdW5jdGlvbigpe0N3KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH07cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gVXcodCl7VncodCksWXcucmVtb3ZlKHQpLHp3LnB1c2godCksQ3codCl9ZnVuY3Rpb24gSHcodCl7dmFyIGU9dC5jaXJjbGUsbj1lLngsaT1lLmN5LHI9W24saV0sbz10LlAsYT10Lk4scz1bdF07VXcodCk7Zm9yKHZhciB1PW87dS5jaXJjbGUmJk1hdGguYWJzKG4tdS5jaXJjbGUueCk8WHcmJk1hdGguYWJzKGktdS5jaXJjbGUuY3kpPFh3OylvPXUuUCxzLnVuc2hpZnQodSksVXcodSksdT1vO3MudW5zaGlmdCh1KSxWdyh1KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmTWF0aC5hYnMobi1sLmNpcmNsZS54KTxYdyYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHc7KWE9bC5OLHMucHVzaChsKSxVdyhsKSxsPWE7cy5wdXNoKGwpLFZ3KGwpO3ZhciBjLGY9cy5sZW5ndGg7Zm9yKGM9MTtjPGY7KytjKUF3KChsPXNbY10pLmVkZ2UsKHU9c1tjLTFdKS5zaXRlLGwuc2l0ZSxyKTsobD1zW2YtMV0pLmVkZ2U9VHcoKHU9c1swXSkuc2l0ZSxsLnNpdGUsbnVsbCxyKSxMdyh1KSxMdyhsKX1mdW5jdGlvbiBxdyh0KXtmb3IodmFyIGUsbixpLHIsbz10WzBdLGE9dFsxXSxzPVl3Ll87czspaWYoKGk9R3cocyxhKS1vKT5YdylzPXMuTDtlbHNle2lmKCEoKHI9by1RdyhzLGEpKT5Ydykpe2k+LVh3PyhlPXMuUCxuPXMpOnI+LVh3PyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7V3dbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgdT1Cdyh0KTtpZihZdy5pbnNlcnQoZSx1KSxlfHxuKXtpZihlPT09bilyZXR1cm4gVncoZSksbj1CdyhlLnNpdGUpLFl3Lmluc2VydCh1LG4pLHUuZWRnZT1uLmVkZ2U9VHcoZS5zaXRlLHUuc2l0ZSksTHcoZSksdm9pZCBMdyhuKTtpZihuKXtWdyhlKSxWdyhuKTt2YXIgbD1lLnNpdGUsYz1sWzBdLGY9bFsxXSxoPXRbMF0tYyxkPXRbMV0tZixwPW4uc2l0ZSxtPXBbMF0tYyx5PXBbMV0tZix2PTIqKGgqeS1kKm0pLGc9aCpoK2QqZCxiPW0qbSt5KnksXz1bKHkqZy1kKmIpL3YrYywoaCpiLW0qZykvditmXTtBdyhuLmVkZ2UsbCxwLF8pLHUuZWRnZT1UdyhsLHQsbnVsbCxfKSxuLmVkZ2U9VHcodCxwLG51bGwsXyksTHcoZSksTHcobil9ZWxzZSB1LmVkZ2U9VHcoZS5zaXRlLHUuc2l0ZSl9fWZ1bmN0aW9uIEd3KHQsZSl7dmFyIG49dC5zaXRlLGk9blswXSxyPW5bMV0sbz1yLWU7aWYoIW8pcmV0dXJuIGk7dmFyIGE9dC5QO2lmKCFhKXJldHVybi0xLzA7dmFyIHM9KG49YS5zaXRlKVswXSx1PW5bMV0sbD11LWU7aWYoIWwpcmV0dXJuIHM7dmFyIGM9cy1pLGY9MS9vLTEvbCxoPWMvbDtyZXR1cm4gZj8oLWgrTWF0aC5zcXJ0KGgqaC0yKmYqKGMqYy8oLTIqbCktdStsLzIrci1vLzIpKSkvZitpOihpK3MpLzJ9ZnVuY3Rpb24gUXcodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gR3cobixlKTt2YXIgaT10LnNpdGU7cmV0dXJuIGlbMV09PT1lP2lbMF06MS8wfXZhciBZdyxXdyxadyxLdyxYdz0xZS02LCR3PTFlLTEyO2Z1bmN0aW9uIEp3KHQsZSl7cmV0dXJuIGVbMV0tdFsxXXx8ZVswXS10WzBdfWZ1bmN0aW9uIHR4KHQsZSl7dmFyIG4saSxyLG89dC5zb3J0KEp3KS5wb3AoKTtmb3IoS3c9W10sV3c9bmV3IEFycmF5KHQubGVuZ3RoKSxZdz1uZXcga3csWnc9bmV3IGt3OzspaWYocj1OdyxvJiYoIXJ8fG9bMV08ci55fHxvWzFdPT09ci55JiZvWzBdPHIueCkpb1swXT09PW4mJm9bMV09PT1pfHwocXcobyksbj1vWzBdLGk9b1sxXSksbz10LnBvcCgpO2Vsc2V7aWYoIXIpYnJlYWs7SHcoci5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbixpLHI9MCxvPVd3Lmxlbmd0aDtyPG87KytyKWlmKCh0PVd3W3JdKSYmKGk9KGU9dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pYVtuXT1uLHNbbl09TXcodCxLd1tlW25dXSk7Zm9yKGEuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSxuPTA7bjxpOysrbilzW25dPWVbYVtuXV07Zm9yKG49MDtuPGk7KytuKWVbbl09c1tuXX19KCksZSl7dmFyIGE9K2VbMF1bMF0scz0rZVswXVsxXSx1PStlWzFdWzBdLGw9K2VbMV1bMV07IWZ1bmN0aW9uKHQsZSxuLGkpe2Zvcih2YXIgcixvPUt3Lmxlbmd0aDtvLS07KVJ3KHI9S3dbb10sdCxlLG4saSkmJkl3KHIsdCxlLG4saSkmJihNYXRoLmFicyhyWzBdWzBdLXJbMV1bMF0pPlh3fHxNYXRoLmFicyhyWzBdWzFdLXJbMV1bMV0pPlh3KXx8ZGVsZXRlIEt3W29dfShhLHMsdSxsKSxmdW5jdGlvbih0LGUsbixpKXt2YXIgcixvLGEscyx1LGwsYyxmLGgsZCxwLG0seT1Xdy5sZW5ndGgsdj0hMDtmb3Iocj0wO3I8eTsrK3IpaWYobz1Xd1tyXSl7Zm9yKGE9by5zaXRlLHM9KHU9by5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KUt3W3Vbc11dfHx1LnNwbGljZShzLDEpO2ZvcihzPTAsbD11Lmxlbmd0aDtzPGw7KXA9KGQ9RHcobyxLd1t1W3NdXSkpWzBdLG09ZFsxXSxmPShjPVB3KG8sS3dbdVsrK3MlbF1dKSlbMF0saD1jWzFdLChNYXRoLmFicyhwLWYpPlh3fHxNYXRoLmFicyhtLWgpPlh3KSYmKHUuc3BsaWNlKHMsMCxLdy5wdXNoKGp3KGEsZCxNYXRoLmFicyhwLXQpPFh3JiZpLW0+WHc/W3QsTWF0aC5hYnMoZi10KTxYdz9oOmldOk1hdGguYWJzKG0taSk8WHcmJm4tcD5Ydz9bTWF0aC5hYnMoaC1pKTxYdz9mOm4saV06TWF0aC5hYnMocC1uKTxYdyYmbS1lPlh3P1tuLE1hdGguYWJzKGYtbik8WHc/aDplXTpNYXRoLmFicyhtLWUpPFh3JiZwLXQ+WHc/W01hdGguYWJzKGgtZSk8WHc/Zjp0LGVdOm51bGwpKS0xKSwrK2wpO2wmJih2PSExKX1pZih2KXt2YXIgZyxiLF8sdz0xLzA7Zm9yKHI9MCx2PW51bGw7cjx5Oysrcikobz1Xd1tyXSkmJihfPShnPShhPW8uc2l0ZSlbMF0tdCkqZysoYj1hWzFdLWUpKmIpPHcmJih3PV8sdj1vKTtpZih2KXt2YXIgeD1bdCxlXSxDPVt0LGldLFM9W24saV0sRT1bbixlXTt2LmhhbGZlZGdlcy5wdXNoKEt3LnB1c2goancoYT12LnNpdGUseCxDKSktMSxLdy5wdXNoKGp3KGEsQyxTKSktMSxLdy5wdXNoKGp3KGEsUyxFKSktMSxLdy5wdXNoKGp3KGEsRSx4KSktMSl9fWZvcihyPTA7cjx5Oysrcikobz1Xd1tyXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBXd1tyXSl9KGEscyx1LGwpfXRoaXMuZWRnZXM9S3csdGhpcy5jZWxscz1XdyxZdz1adz1Ldz1Xdz1udWxsfXR4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHgscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFB3KGUsdFtuXSl9KTtyZXR1cm4gbi5kYXRhPWUuc2l0ZS5kYXRhLG59KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24obixpKXtpZihvPShyPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciByLG8sYSxzLHUsbCxjPW4uc2l0ZSxmPS0xLGg9ZVtyW28tMV1dLGQ9aC5sZWZ0PT09Yz9oLnJpZ2h0OmgubGVmdDsrK2Y8bzspYT1kLGQ9KGg9ZVtyW2ZdXSkubGVmdD09PWM/aC5yaWdodDpoLmxlZnQsYSYmZCYmaTxhLmluZGV4JiZpPGQuaW5kZXgmJigocz1jKVswXS0obD1kKVswXSkqKCh1PWEpWzFdLXNbMV0pLShzWzBdLXVbMF0pKihsWzFdLXNbMV0pPDAmJnQucHVzaChbYy5kYXRhLGEuZGF0YSxkLmRhdGFdKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJpZ2h0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpLHIsbz10aGlzLGE9by5fZm91bmR8fDAscz1vLmNlbGxzLmxlbmd0aDshKHI9by5jZWxsc1thXSk7KWlmKCsrYT49cylyZXR1cm4gbnVsbDt2YXIgdT10LXIuc2l0ZVswXSxsPWUtci5zaXRlWzFdLGM9dSp1K2wqbDtkb3tyPW8uY2VsbHNbaT1hXSxhPW51bGwsci5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1vLmVkZ2VzW25dLHM9aS5sZWZ0O2lmKHMhPT1yLnNpdGUmJnN8fChzPWkucmlnaHQpKXt2YXIgdT10LXNbMF0sbD1lLXNbMV0sZj11KnUrbCpsO2Y8YyYmKGM9ZixhPXMuaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9aSxudWxsPT1ufHxjPD1uKm4/ci5zaXRlOm51bGx9fTt2YXIgZXg9ZnVuY3Rpb24oKXt2YXIgdD1fdyxlPXd3LG49bnVsbDtmdW5jdGlvbiBpKGkpe3JldHVybiBuZXcgdHgoaS5tYXAoZnVuY3Rpb24obixyKXt2YXIgbz1bTWF0aC5yb3VuZCh0KG4scixpKS9YdykqWHcsTWF0aC5yb3VuZChlKG4scixpKS9YdykqWHddO3JldHVybiBvLmluZGV4PXIsby5kYXRhPW4sb30pLG4pfXJldHVybiBpLnBvbHlnb25zPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLnBvbHlnb25zKCl9LGkubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkubGlua3MoKX0saS50cmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkudHJpYW5nbGVzKCl9LGkueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmJ3KCtlKSxpKTp0fSxpLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpidygrdCksaSk6ZX0saS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLGkpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLGkpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0saX0sbng9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBpeCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59aXgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppeCxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgaXgodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dCYwPT09ZT90aGlzOm5ldyBpeCh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciByeD1uZXcgaXgoMSwwLDApO2Z1bmN0aW9uIG94KHQpe3JldHVybiB0Ll9fem9vbXx8cnh9ZnVuY3Rpb24gYXgoKXtZdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1veC5wcm90b3R5cGU9aXgucHJvdG90eXBlO3ZhciBzeD1mdW5jdGlvbigpe1l0LnByZXZlbnREZWZhdWx0KCksWXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9O2Z1bmN0aW9uIHV4KCl7cmV0dXJuIVl0LmJ1dHRvbn1mdW5jdGlvbiBseCgpe3ZhciB0LGUsbj10aGlzO3JldHVybiBuIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8odD0obj1uLm93bmVyU1ZHRWxlbWVudHx8bikud2lkdGguYmFzZVZhbC52YWx1ZSxlPW4uaGVpZ2h0LmJhc2VWYWwudmFsdWUpOih0PW4uY2xpZW50V2lkdGgsZT1uLmNsaWVudEhlaWdodCksW1swLDBdLFt0LGVdXX1mdW5jdGlvbiBjeCgpe3JldHVybiB0aGlzLl9fem9vbXx8cnh9ZnVuY3Rpb24gZngoKXtyZXR1cm4tWXQuZGVsdGFZKihZdC5kZWx0YU1vZGU/MTIwOjEpLzUwMH1mdW5jdGlvbiBoeCgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBkeCh0LGUsbil7dmFyIGk9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0scj10LmludmVydFgoZVsxXVswXSktblsxXVswXSxvPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLGE9dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKHI+aT8oaStyKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsciksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9dmFyIHB4PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPXV4LGk9bHgscj1keCxvPWZ4LGE9aHgscz1bMCwxLzBdLHU9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sbD0yNTAsYz1haSxmPVtdLGg9aHQoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGQ9NTAwLHA9MTUwLG09MDtmdW5jdGlvbiB5KHQpe3QucHJvcGVydHkoIl9fem9vbSIsY3gpLm9uKCJ3aGVlbC56b29tIixDKS5vbigibW91c2Vkb3duLnpvb20iLFMpLm9uKCJkYmxjbGljay56b29tIixFKS5maWx0ZXIoYSkub24oInRvdWNoc3RhcnQuem9vbSIsTykub24oInRvdWNobW92ZS56b29tIixrKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixUKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gdih0LGUpe3JldHVybihlPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlKSkpPT09dC5rP3Q6bmV3IGl4KGUsdC54LHQueSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9ZVswXS1uWzBdKnQuayxyPWVbMV0tblsxXSp0Lms7cmV0dXJuIGk9PT10LngmJnI9PT10Lnk/dDpuZXcgaXgodC5rLGkscil9ZnVuY3Rpb24gYih0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiBfKHQsZSxuKXt0Lm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7dyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj13KHRoaXMsdCksbz1pLmFwcGx5KHRoaXMsdCksYT1ufHxiKG8pLHM9TWF0aC5tYXgob1sxXVswXS1vWzBdWzBdLG9bMV1bMV0tb1swXVsxXSksdT10aGlzLl9fem9vbSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyx0KTplLGY9Yyh1LmludmVydChhKS5jb25jYXQocy91LmspLGwuaW52ZXJ0KGEpLmNvbmNhdChzL2wuaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWw7ZWxzZXt2YXIgZT1mKHQpLG49cy9lWzJdO3Q9bmV3IGl4KG4sYVswXS1lWzBdKm4sYVsxXS1lWzFdKm4pfXIuem9vbShudWxsLHQpfX0pfWZ1bmN0aW9uIHcodCxlKXtmb3IodmFyIG4saT0wLHI9Zi5sZW5ndGg7aTxyOysraSlpZigobj1mW2ldKS50aGF0PT09dClyZXR1cm4gbjtyZXR1cm4gbmV3IHgodCxlKX1mdW5jdGlvbiB4KHQsZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5pbmRleD0tMSx0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PWkuYXBwbHkodCxlKX1mdW5jdGlvbiBDKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXcodGhpcyxhcmd1bWVudHMpLGU9dGhpcy5fX3pvb20saT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZS5rKk1hdGgucG93KDIsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksYT1mZSh0aGlzKTtpZih0LndoZWVsKXQubW91c2VbMF1bMF09PT1hWzBdJiZ0Lm1vdXNlWzBdWzFdPT09YVsxXXx8KHQubW91c2VbMV09ZS5pbnZlcnQodC5tb3VzZVswXT1hKSksY2xlYXJUaW1lb3V0KHQud2hlZWwpO2Vsc2V7aWYoZS5rPT09aSlyZXR1cm47dC5tb3VzZT1bYSxlLmludmVydChhKV0sSmkodGhpcyksdC5zdGFydCgpfXN4KCksdC53aGVlbD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC53aGVlbD1udWxsLHQuZW5kKCl9LHApLHQuem9vbSgibW91c2UiLHIoZyh2KGUsaSksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCx1KSl9fWZ1bmN0aW9uIFMoKXtpZighZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXcodGhpcyxhcmd1bWVudHMpLGk9cmUoWXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbigpe2lmKHN4KCksIXQubW92ZWQpe3ZhciBlPVl0LmNsaWVudFgtYSxuPVl0LmNsaWVudFktczt0Lm1vdmVkPWUqZStuKm4+bX10Lnpvb20oIm1vdXNlIixyKGcodC50aGF0Ll9fem9vbSx0Lm1vdXNlWzBdPWZlKHQudGhhdCksdC5tb3VzZVsxXSksdC5leHRlbnQsdSkpfSwhMCkub24oIm1vdXNldXAuem9vbSIsZnVuY3Rpb24oKXtpLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLGdlKFl0LnZpZXcsdC5tb3ZlZCksc3goKSx0LmVuZCgpfSwhMCksbz1mZSh0aGlzKSxhPVl0LmNsaWVudFgscz1ZdC5jbGllbnRZO3ZlKFl0LnZpZXcpLGF4KCksdC5tb3VzZT1bbyx0aGlzLl9fem9vbS5pbnZlcnQobyldLEppKHRoaXMpLHQuc3RhcnQoKX19ZnVuY3Rpb24gRSgpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD10aGlzLl9fem9vbSxlPWZlKHRoaXMpLG89dC5pbnZlcnQoZSksYT1yKGcodih0LHQuayooWXQuc2hpZnRLZXk/LjU6MikpLGUsbyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdSk7c3goKSxsPjA/cmUodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGwpLmNhbGwoXyxhLGUpOnJlKHRoaXMpLmNhbGwoeS50cmFuc2Zvcm0sYSl9fWZ1bmN0aW9uIE8oKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGUsaSxyLG8sYT13KHRoaXMsYXJndW1lbnRzKSxzPVl0LmNoYW5nZWRUb3VjaGVzLHU9cy5sZW5ndGg7Zm9yKGF4KCksaT0wO2k8dTsrK2kpbz1bbz1kZSh0aGlzLHMsKHI9c1tpXSkuaWRlbnRpZmllciksdGhpcy5fX3pvb20uaW52ZXJ0KG8pLHIuaWRlbnRpZmllcl0sYS50b3VjaDA/YS50b3VjaDF8fChhLnRvdWNoMT1vKTooYS50b3VjaDA9byxlPSEwKTtpZih0JiYodD1jbGVhclRpbWVvdXQodCksIWEudG91Y2gxKSlyZXR1cm4gYS5lbmQoKSx2b2lkKChvPXJlKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikpJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7ZSYmKHQ9c2V0VGltZW91dChmdW5jdGlvbigpe3Q9bnVsbH0sZCksSmkodGhpcyksYS5zdGFydCgpKX19ZnVuY3Rpb24gaygpe3ZhciBlLG4saSxvLGE9dyh0aGlzLGFyZ3VtZW50cykscz1ZdC5jaGFuZ2VkVG91Y2hlcyxsPXMubGVuZ3RoO2ZvcihzeCgpLHQmJih0PWNsZWFyVGltZW91dCh0KSksZT0wO2U8bDsrK2UpaT1kZSh0aGlzLHMsKG49c1tlXSkuaWRlbnRpZmllciksYS50b3VjaDAmJmEudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2EudG91Y2gwWzBdPWk6YS50b3VjaDEmJmEudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoYS50b3VjaDFbMF09aSk7aWYobj1hLnRoYXQuX196b29tLGEudG91Y2gxKXt2YXIgYz1hLnRvdWNoMFswXSxmPWEudG91Y2gwWzFdLGg9YS50b3VjaDFbMF0sZD1hLnRvdWNoMVsxXSxwPShwPWhbMF0tY1swXSkqcCsocD1oWzFdLWNbMV0pKnAsbT0obT1kWzBdLWZbMF0pKm0rKG09ZFsxXS1mWzFdKSptO249dihuLE1hdGguc3FydChwL20pKSxpPVsoY1swXStoWzBdKS8yLChjWzFdK2hbMV0pLzJdLG89WyhmWzBdK2RbMF0pLzIsKGZbMV0rZFsxXSkvMl19ZWxzZXtpZighYS50b3VjaDApcmV0dXJuO2k9YS50b3VjaDBbMF0sbz1hLnRvdWNoMFsxXX1hLnpvb20oInRvdWNoIixyKGcobixpLG8pLGEuZXh0ZW50LHUpKX1mdW5jdGlvbiBUKCl7dmFyIHQsbixpPXcodGhpcyxhcmd1bWVudHMpLHI9WXQuY2hhbmdlZFRvdWNoZXMsbz1yLmxlbmd0aDtmb3IoYXgoKSxlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSxkKSx0PTA7dDxvOysrdCluPXJbdF0saS50b3VjaDAmJmkudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2RlbGV0ZSBpLnRvdWNoMDppLnRvdWNoMSYmaS50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJmRlbGV0ZSBpLnRvdWNoMTtpLnRvdWNoMSYmIWkudG91Y2gwJiYoaS50b3VjaDA9aS50b3VjaDEsZGVsZXRlIGkudG91Y2gxKSxpLnRvdWNoMD9pLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoaS50b3VjaDBbMF0pOmkuZW5kKCl9cmV0dXJuIHkudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O24ucHJvcGVydHkoIl9fem9vbSIsY3gpLHQhPT1uP18odCxlKTpuLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pfSx5LnNjYWxlQnk9ZnVuY3Rpb24odCxlKXt5LnNjYWxlVG8odCxmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKX0pfSx5LnNjYWxlVG89ZnVuY3Rpb24odCxlKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj10aGlzLl9fem9vbSxvPWIodCksYT1uLmludmVydChvKSxzPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHIoZyh2KG4scyksbyxhKSx0LHUpfSl9LHkudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1KX0pfSx5LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKHQsZSxuKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz10aGlzLl9fem9vbSxhPWIodCk7cmV0dXJuIHIocngudHJhbnNsYXRlKGFbMF0sYVsxXSkuc2NhbGUoby5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCx1KX0pfSx4LnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9Zi5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1lLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09ZS5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1lLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209ZSx0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGYuc3BsaWNlKHRoaXMuaW5kZXgsMSksdGhpcy5pbmRleD0tMSx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpeyR0KG5ldyBmdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9eSx0aGlzLnR5cGU9ZSx0aGlzLnRyYW5zZm9ybT1ufSgwLHQsdGhpcy50aGF0Ll9fem9vbSksaC5hcHBseSxoLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHkud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om54KCt0KSx5KTpvfSx5LmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om54KCEhdCkseSk6bn0seS50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpueCghIXQpLHkpOmF9LHkuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bngoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHkpOml9LHkuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHNbMF09K3RbMF0sc1sxXT0rdFsxXSx5KTpbc1swXSxzWzFdXX0seS50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHVbMF1bMF09K3RbMF1bMF0sdVsxXVswXT0rdFsxXVswXSx1WzBdWzFdPSt0WzBdWzFdLHVbMV1bMV09K3RbMV1bMV0seSk6W1t1WzBdWzBdLHVbMF1bMV1dLFt1WzFdWzBdLHVbMV1bMV1dXX0seS5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCx5KTpyfSx5LmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LHkpOmx9LHkuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCx5KTpjfSx5Lm9uPWZ1bmN0aW9uKCl7dmFyIHQ9aC5vbi5hcHBseShoLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1oP3k6dH0seS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSh0PSt0KSp0LHkpOk1hdGguc3FydChtKX0seX07bi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4iNS41LjAifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHp9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGl0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcnR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGF0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU299KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB4b30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gd299KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBSb30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gS299KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiByYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFpvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb2F9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHNhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQmV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFplfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY259KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBnbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbG59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBodH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEVlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdmV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBnZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGphfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSWF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBSYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1hfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBOYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEZhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWYX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBocn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGRyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG1yfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHhyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX3J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB3cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHhyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFNyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE9yfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga3J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHpyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFdhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWmF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICRhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR2F9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB0c30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGVzfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIG5zfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaXN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5c30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGJzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRXN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFNzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga3N9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTnN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUnN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWXN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWdX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIElsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSGx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB0Y30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZjfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaGN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfY30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHljfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTGN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqY30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJjfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVWN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZY30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE9jfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUWZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGdofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBTaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBsaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFRofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEVofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFJofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF9ofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1ofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6aH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWGx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBJdX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlmfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBRaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHlkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZmR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHhkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVGR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHpkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQmR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB3ZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE5kfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVWR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhkfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIEtufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSG59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEFufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcW59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWG59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBabn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG5pfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaWl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQm59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHVpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbGl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZGl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHlpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdml9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHpvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcWR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFpkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gS2R9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGNzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSmR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB0cH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGVwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBucH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY3B9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENwfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIHhwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBscH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHVwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE12fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE52fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHp2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQnZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEh2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcXZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFF2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWnZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFh2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gS3Z9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBKdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICR2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB0Z30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGlnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGNnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBoZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG1nfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2Z30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHlnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBnZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHdnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHhnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBTZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGtnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFRnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBBZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1nfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFBnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBOZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHpnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEdnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFpnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gS2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBuYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb2J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHNifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb2V9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5dH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHNlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU3R9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG10fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcHR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjZX0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiByZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaWV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBndH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF90fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUnR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBkZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSXR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICR0fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGtifSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIE1ifSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIFJifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTmJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQmJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWGJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEpifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdl99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5X30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHRffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZV99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiByX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdV99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG1ffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQ199KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBFX30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB3X30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGtffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUl99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEFffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVl99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEZffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSF99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFhffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJF99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBld30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGl3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb3d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiByd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGx3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY3d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGF3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaHd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBkd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHB3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geXd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2d30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHN3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZ3d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6cH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSHB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV3B9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFhwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB0bX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG5tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBobX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGFtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHBtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBnbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF9tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gd219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFNtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBrbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGptfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBSbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBObX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gem19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFhtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB0eX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF92fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYXl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzeX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHV5fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbHl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiByeX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHd2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBBaX0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBNaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFBpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTGl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG9yfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBKaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGV4fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcHh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBveH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJ4fSl9LFdmNHA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJCIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJDIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gV30pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBRfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gcX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBafSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIHp9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gVX0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBCfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigibXJTRyIpLG89bigibjZnRyIpLGE9bigiSzlJYSIpLHM9KG4oIjZibEYiKSxuKCJkV1pnIikpLHU9KG4oIlpZanQiKSxuKCJZU2gyIikpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LlNUQU5EQVJEX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkiLHQuREVDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC4wLDAuMCwwLjIsMSkiLHQuQUNDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIix0LlNIQVJQX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjYsMSkiLHR9KCksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuQ09NUExFWD0iMzc1bXMiLHQuRU5URVJJTkc9IjIyNW1zIix0LkVYSVRJTkc9IjE5NW1zIix0fSgpLGY9bmV3IGkucSgibWF0LXNhbml0eS1jaGVja3MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZD10LHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMSx0aGlzLl9kb2N1bWVudD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudD9kb2N1bWVudDpudWxsLHRoaXMuX3dpbmRvdz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93P3dpbmRvdzpudWxsLHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3MmJih0aGlzLl9jaGVja0RvY3R5cGVJc0RlZmluZWQoKSx0aGlzLl9jaGVja1RoZW1lSXNQcmVzZW50KCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9cmV0dXJuIHQucHJvdG90eXBlLl9hcmVDaGVja3NFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQmJk9iamVjdChpLlopKCkmJiF0aGlzLl9pc1Rlc3RFbnYoKX0sdC5wcm90b3R5cGUuX2lzVGVzdEVudj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aW5kb3cmJih0aGlzLl93aW5kb3cuX19rYXJtYV9ffHx0aGlzLl93aW5kb3cuamFzbWluZSl9LHQucHJvdG90eXBlLl9jaGVja0RvY3R5cGVJc0RlZmluZWQ9ZnVuY3Rpb24oKXt0aGlzLl9kb2N1bWVudCYmIXRoaXMuX2RvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybigiQ3VycmVudCBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGEgZG9jdHlwZS4gVGhpcyBtYXkgY2F1c2Ugc29tZSBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbm90IHRvIGJlaGF2ZSBhcyBleHBlY3RlZC4iKX0sdC5wcm90b3R5cGUuX2NoZWNrVGhlbWVJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudCYmdGhpcy5fZG9jdW1lbnQuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgibWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPWdldENvbXB1dGVkU3R5bGUodCk7ZSYmIm5vbmUiIT09ZS5kaXNwbGF5JiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEFuZ3VsYXIgTWF0ZXJpYWwgY29yZSB0aGVtZS4gTW9zdCBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4gRm9yIG1vcmUgaW5mbyByZWZlciB0byB0aGUgdGhlbWluZyBndWlkZTogaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL3RoZW1pbmciKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX0sdC5wcm90b3R5cGUuX2NoZWNrSGFtbWVySXNBdmFpbGFibGU9ZnVuY3Rpb24oKXshdGhpcy5faGFzQ2hlY2tlZEhhbW1lciYmdGhpcy5fd2luZG93JiYodGhpcy5fYXJlQ2hlY2tzRW5hYmxlZCgpJiYhdGhpcy5fd2luZG93LkhhbW1lciYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBIYW1tZXJKUy4gQ2VydGFpbiBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4iKSx0aGlzLl9oYXNDaGVja2VkSGFtbWVyPSEwKX0sdH0oKTtmdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciBpPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fZGlzYWJsZWQ9ITEsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KG8uYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odCl9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3ZhciByPXQuYXBwbHkodGhpcyxuKXx8dGhpcztyZXR1cm4gci5jb2xvcj1lLHJ9cmV0dXJuIE9iamVjdChyLmIpKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJjb2xvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvcn0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBuPXR8fGU7biE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtIit0aGlzLl9jb2xvciksbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC0iK24pLHRoaXMuX2NvbG9yPW4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLG59KHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dmFyIGk9dC5hcHBseSh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9kaXNhYmxlUmlwcGxlPSExLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlUmlwcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPU9iamVjdChvLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dmFyIGk9dC5hcHBseSh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmVycm9yU3RhdGU9ITEsaS5zdGF0ZUNoYW5nZXM9bmV3IGEuYSxpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnVwZGF0ZUVycm9yU3RhdGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVycm9yU3RhdGUsZT0odGhpcy5lcnJvclN0YXRlTWF0Y2hlcnx8dGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyKS5pc0Vycm9yU3RhdGUodGhpcy5uZ0NvbnRyb2w/dGhpcy5uZ0NvbnRyb2wuY29udHJvbDpudWxsLHRoaXMuX3BhcmVudEZvcm1Hcm91cHx8dGhpcy5fcGFyZW50Rm9ybSk7ZSE9PXQmJih0aGlzLmVycm9yU3RhdGU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlfSh0KX12YXIgdj1uZXcgaS5xKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChpLlkpKGkudSl9fSksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9sb2NhbGVDaGFuZ2VzPW5ldyBhLmF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibG9jYWxlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhbGVDaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0aGlzLmlzRGF0ZUluc3RhbmNlKHQpJiZ0aGlzLmlzVmFsaWQodCk/dDp0aGlzLmludmFsaWQoKX0sdC5wcm90b3R5cGUuc2V0TG9jYWxlPWZ1bmN0aW9uKHQpe3RoaXMubG9jYWxlPXQsdGhpcy5fbG9jYWxlQ2hhbmdlcy5uZXh0KCl9LHQucHJvdG90eXBlLmNvbXBhcmVEYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0WWVhcih0KS10aGlzLmdldFllYXIoZSl8fHRoaXMuZ2V0TW9udGgodCktdGhpcy5nZXRNb250aChlKXx8dGhpcy5nZXREYXRlKHQpLXRoaXMuZ2V0RGF0ZShlKX0sdC5wcm90b3R5cGUuc2FtZURhdGU9ZnVuY3Rpb24odCxlKXtpZih0JiZlKXt2YXIgbj10aGlzLmlzVmFsaWQodCksaT10aGlzLmlzVmFsaWQoZSk7cmV0dXJuIG4mJmk/IXRoaXMuY29tcGFyZURhdGUodCxlKTpuPT1pfXJldHVybiB0PT1lfSx0LnByb3RvdHlwZS5jbGFtcERhdGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlJiZ0aGlzLmNvbXBhcmVEYXRlKHQsZSk8MD9lOm4mJnRoaXMuY29tcGFyZURhdGUodCxuKT4wP246dH0sdH0oKSxiPW5ldyBpLnEoIm1hdC1kYXRlLWZvcm1hdHMiKSxfPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCx3PXtsb25nOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLG5hcnJvdzpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdfSx4PUUoMzEsZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KzEpfSksQz17bG9uZzpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxuYXJyb3c6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl19LFM9L15cZHs0fS1cZHsyfS1cZHsyfSg/OlRcZHsyfTpcZHsyfTpcZHsyfSg/OlwuXGQrKT8oPzpafCg/Oig/OlwrfC0pXGR7Mn06XGR7Mn0pKT8pPyQvO2Z1bmN0aW9uIEUodCxlKXtmb3IodmFyIG49QXJyYXkodCksaT0wO2k8dDtpKyspbltpXT1lKGkpO3JldHVybiBufXZhciBPPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkudXNlVXRjRm9yRGlzcGxheT0hMCx0LnByb3RvdHlwZS5zZXRMb2NhbGUuY2FsbChpLGUpLGkudXNlVXRjRm9yRGlzcGxheT0hbi5UUklERU5ULGkuX2NsYW1wRGF0ZT1uLlRSSURFTlR8fG4uRURHRSxpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0sZS5wcm90b3R5cGUuZ2V0TW9udGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0sZS5wcm90b3R5cGUuZ2V0RGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCl9LGUucHJvdG90eXBlLmdldERheU9mV2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sZS5wcm90b3R5cGUuZ2V0TW9udGhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKF8pe3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHttb250aDp0LHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIEUoMTIsZnVuY3Rpb24odCl7cmV0dXJuIGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKGUuX2Zvcm1hdChuLG5ldyBEYXRlKDIwMTcsdCwxKSkpfSl9cmV0dXJuIHdbdF19LGUucHJvdG90eXBlLmdldERhdGVOYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoXyl7dmFyIGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse2RheToibnVtZXJpYyIsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gRSgzMSxmdW5jdGlvbihuKXtyZXR1cm4gdC5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModC5fZm9ybWF0KGUsbmV3IERhdGUoMjAxNywwLG4rMSkpKX0pfXJldHVybiB4fSxlLnByb3RvdHlwZS5nZXREYXlPZldlZWtOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKF8pe3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt3ZWVrZGF5OnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gRSg3LGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhlLl9mb3JtYXQobixuZXcgRGF0ZSgyMDE3LDAsdCsxKSkpfSl9cmV0dXJuIENbdF19LGUucHJvdG90eXBlLmdldFllYXJOYW1lPWZ1bmN0aW9uKHQpe2lmKF8pe3ZhciBlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt5ZWFyOiJudW1lcmljIix0aW1lWm9uZToidXRjIn0pO3JldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZSx0KSl9cmV0dXJuIFN0cmluZyh0aGlzLmdldFllYXIodCkpfSxlLnByb3RvdHlwZS5nZXRGaXJzdERheU9mV2Vlaz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5nZXROdW1EYXlzSW5Nb250aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXREYXRlKHRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCkrMSwwKSl9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNyZWF0ZURhdGUodGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCksdGhpcy5nZXREYXRlKHQpKX0sZS5wcm90b3R5cGUuY3JlYXRlRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYoZTwwfHxlPjExKXRocm93IEVycm9yKCdJbnZhbGlkIG1vbnRoIGluZGV4ICInK2UrJyIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLicpO2lmKG48MSl0aHJvdyBFcnJvcignSW52YWxpZCBkYXRlICInK24rJyIuIERhdGUgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLicpO3ZhciBpPXRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codCxlLG4pO2lmKGkuZ2V0TW9udGgoKSE9ZSl0aHJvdyBFcnJvcignSW52YWxpZCBkYXRlICInK24rJyIgZm9yIG1vbnRoIHdpdGggaW5kZXggIicrZSsnIi4nKTtyZXR1cm4gaX0sZS5wcm90b3R5cGUudG9kYXk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGV9LGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgRGF0ZSh0KTp0P25ldyBEYXRlKERhdGUucGFyc2UodCkpOm51bGx9LGUucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmlzVmFsaWQodCkpdGhyb3cgRXJyb3IoIk5hdGl2ZURhdGVBZGFwdGVyOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4iKTtpZihfKXt0aGlzLl9jbGFtcERhdGUmJih0LmdldEZ1bGxZZWFyKCk8MXx8dC5nZXRGdWxsWWVhcigpPjk5OTkpJiYodD10aGlzLmNsb25lKHQpKS5zZXRGdWxsWWVhcihNYXRoLm1heCgxLE1hdGgubWluKDk5OTksdC5nZXRGdWxsWWVhcigpKSkpLGU9T2JqZWN0KHIuYSkoe30sZSx7dGltZVpvbmU6InV0YyJ9KTt2YXIgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSxlKTtyZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KG4sdCkpfXJldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0LnRvRGF0ZVN0cmluZygpKX0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJZZWFycz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKHQsMTIqZSl9LGUucHJvdG90eXBlLmFkZENhbGVuZGFyTW9udGhzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KStlLHRoaXMuZ2V0RGF0ZSh0KSk7cmV0dXJuIHRoaXMuZ2V0TW9udGgobikhPSgodGhpcy5nZXRNb250aCh0KStlKSUxMisxMiklMTImJihuPXRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKG4pLHRoaXMuZ2V0TW9udGgobiksMCkpLG59LGUucHJvdG90eXBlLmFkZENhbGVuZGFyRGF5cz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpLHRoaXMuZ2V0RGF0ZSh0KStlKX0sZS5wcm90b3R5cGUudG9Jc284NjAxPWZ1bmN0aW9uKHQpe3JldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5fMmRpZ2l0KHQuZ2V0VVRDTW9udGgoKSsxKSx0aGlzLl8yZGlnaXQodC5nZXRVVENEYXRlKCkpXS5qb2luKCItIil9LGUucHJvdG90eXBlLmRlc2VyaWFsaXplPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoUy50ZXN0KGUpKXt2YXIgbj1uZXcgRGF0ZShlKTtpZih0aGlzLmlzVmFsaWQobikpcmV0dXJuIG59fXJldHVybiB0LnByb3RvdHlwZS5kZXNlcmlhbGl6ZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmlzRGF0ZUluc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZX0sZS5wcm90b3R5cGUuaXNWYWxpZD1mdW5jdGlvbih0KXtyZXR1cm4haXNOYU4odC5nZXRUaW1lKCkpfSxlLnByb3RvdHlwZS5pbnZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKE5hTil9LGUucHJvdG90eXBlLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uZXcgRGF0ZSh0LGUsbik7cmV0dXJuIHQ+PTAmJnQ8MTAwJiZpLnNldEZ1bGxZZWFyKHRoaXMuZ2V0WWVhcihpKS0xOTAwKSxpfSxlLnByb3RvdHlwZS5fMmRpZ2l0PWZ1bmN0aW9uKHQpe3JldHVybigiMDAiK3QpLnNsaWNlKC0yKX0sZS5wcm90b3R5cGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcdTIwMGVcdTIwMGZdL2csIiIpfSxlLnByb3RvdHlwZS5fZm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCksZS5nZXRTZWNvbmRzKCksZS5nZXRNaWxsaXNlY29uZHMoKSkpO3JldHVybiB0LmZvcm1hdChuKX0sZX0oZyksaz17cGFyc2U6e2RhdGVJbnB1dDpudWxsfSxkaXNwbGF5OntkYXRlSW5wdXQ6e3llYXI6Im51bWVyaWMiLG1vbnRoOiJudW1lcmljIixkYXk6Im51bWVyaWMifSxtb250aFllYXJMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0In0sZGF0ZUExMXlMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckExMXlMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmcifX19LFQ9ZnVuY3Rpb24oKXt9LGo9ZnVuY3Rpb24oKXt9LEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5pc0Vycm9yU3RhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4hISh0JiZ0LmludmFsaWQmJih0LnRvdWNoZWR8fGUmJmUuc3VibWl0dGVkKSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5fbGluZXM9dCx0aGlzLl9lbGVtZW50PWUsdGhpcy5fc2V0TGluZUNsYXNzKHRoaXMuX2xpbmVzLmxlbmd0aCksdGhpcy5fbGluZXMuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXtuLl9zZXRMaW5lQ2xhc3Mobi5fbGluZXMubGVuZ3RoKX0pfXJldHVybiB0LnByb3RvdHlwZS5fc2V0TGluZUNsYXNzPWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc2V0Q2xhc3NlcygpLDI9PT10fHwzPT09dD90aGlzLl9zZXRDbGFzcygibWF0LSIrdCsiLWxpbmUiLCEwKTp0PjMmJnRoaXMuX3NldENsYXNzKCJtYXQtbXVsdGktbGluZSIsITApfSx0LnByb3RvdHlwZS5fcmVzZXRDbGFzc2VzPWZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2xhc3MoIm1hdC0yLWxpbmUiLCExKSx0aGlzLl9zZXRDbGFzcygibWF0LTMtbGluZSIsITEpLHRoaXMuX3NldENsYXNzKCJtYXQtbXVsdGktbGluZSIsITEpfSx0LnByb3RvdHlwZS5fc2V0Q2xhc3M9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHQpfSx0fSgpLFI9ZnVuY3Rpb24oKXt9LE09ZnVuY3Rpb24oKXt2YXIgdD17RkFESU5HX0lOOjAsVklTSUJMRToxLEZBRElOR19PVVQ6MixISURERU46M307cmV0dXJuIHRbdC5GQURJTkdfSU5dPSJGQURJTkdfSU4iLHRbdC5WSVNJQkxFXT0iVklTSUJMRSIsdFt0LkZBRElOR19PVVRdPSJGQURJTkdfT1VUIix0W3QuSElEREVOXT0iSElEREVOIix0fSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPW4sdGhpcy5zdGF0ZT1NLkhJRERFTn1yZXR1cm4gdC5wcm90b3R5cGUuZmFkZU91dD1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9LHR9KCksRD17ZW50ZXJEdXJhdGlvbjo0NTAsZXhpdER1cmF0aW9uOjQwMH0sTj04MDAsRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dmFyIHI9dGhpczt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX3RyaWdnZXJFdmVudHM9bmV3IE1hcCx0aGlzLl9hY3RpdmVSaXBwbGVzPW5ldyBTZXQsdGhpcy5fZXZlbnRPcHRpb25zPSEhT2JqZWN0KHMuZCkoKSYme3Bhc3NpdmU6ITB9LHRoaXMub25Nb3VzZWRvd249ZnVuY3Rpb24odCl7dmFyIGU9ci5fbGFzdFRvdWNoU3RhcnRFdmVudCYmRGF0ZS5ub3coKTxyLl9sYXN0VG91Y2hTdGFydEV2ZW50K047ci5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHwoci5faXNQb2ludGVyRG93bj0hMCxyLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHIuX3RhcmdldC5yaXBwbGVDb25maWcpKX0sdGhpcy5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7ci5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHwoci5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHIuX2lzUG9pbnRlckRvd249ITAsci5mYWRlSW5SaXBwbGUodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFksci5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uUG9pbnRlclVwPWZ1bmN0aW9uKCl7ci5faXNQb2ludGVyRG93biYmKHIuX2lzUG9pbnRlckRvd249ITEsci5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYodC5zdGF0ZT09PU0uVklTSUJMRXx8dC5jb25maWcudGVybWluYXRlT25Qb2ludGVyVXAmJnQuc3RhdGU9PT1NLkZBRElOR19JTikmJnQuZmFkZU91dCgpfSkpfSxpLmlzQnJvd3NlciYmKHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9bi5uYXRpdmVFbGVtZW50LHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZWRvd24pLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZXVwIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgibW91c2VsZWF2ZSIsdGhpcy5vblBvaW50ZXJVcCksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoInRvdWNoc3RhcnQiLHRoaXMub25Ub3VjaFN0YXJ0KSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hlbmQiLHRoaXMub25Qb2ludGVyVXApKX1yZXR1cm4gdC5wcm90b3R5cGUuZmFkZUluUmlwcGxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzO3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgbz10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1PYmplY3Qoci5hKSh7fSxELG4uYW5pbWF0aW9uKTtuLmNlbnRlcmVkJiYodD1vLmxlZnQrby53aWR0aC8yLGU9by50b3Arby5oZWlnaHQvMik7dmFyIHM9bi5yYWRpdXN8fGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1NYXRoLm1heChNYXRoLmFicyh0LW4ubGVmdCksTWF0aC5hYnModC1uLnJpZ2h0KSkscj1NYXRoLm1heChNYXRoLmFicyhlLW4udG9wKSxNYXRoLmFicyhlLW4uYm90dG9tKSk7cmV0dXJuIE1hdGguc3FydChpKmkrcipyKX0odCxlLG8pLHU9dC1vLmxlZnQsbD1lLW8udG9wLGM9YS5lbnRlckR1cmF0aW9uLyhuLnNwZWVkRmFjdG9yfHwxKSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2YuY2xhc3NMaXN0LmFkZCgibWF0LXJpcHBsZS1lbGVtZW50IiksZi5zdHlsZS5sZWZ0PXUtcysicHgiLGYuc3R5bGUudG9wPWwtcysicHgiLGYuc3R5bGUuaGVpZ2h0PTIqcysicHgiLGYuc3R5bGUud2lkdGg9MipzKyJweCIsZi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9bi5jb2xvcnx8bnVsbCxmLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1jKyJtcyIsdGhpcy5fY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChmKSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5IiksZi5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIjt2YXIgaD1uZXcgUCh0aGlzLGYsbik7cmV0dXJuIGguc3RhdGU9TS5GQURJTkdfSU4sdGhpcy5fYWN0aXZlUmlwcGxlcy5hZGQoaCksbi5wZXJzaXN0ZW50fHwodGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZT1oKSx0aGlzLnJ1blRpbWVvdXRPdXRzaWRlWm9uZShmdW5jdGlvbigpe3ZhciB0PWg9PT1pLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlO2guc3RhdGU9TS5WSVNJQkxFLG4ucGVyc2lzdGVudHx8dCYmaS5faXNQb2ludGVyRG93bnx8aC5mYWRlT3V0KCl9LGMpLGh9LHQucHJvdG90eXBlLmZhZGVPdXRSaXBwbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCk7aWYodD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksZSl7dmFyIG49dC5lbGVtZW50LGk9T2JqZWN0KHIuYSkoe30sRCx0LmNvbmZpZy5hbmltYXRpb24pO24uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWkuZXhpdER1cmF0aW9uKyJtcyIsbi5zdHlsZS5vcGFjaXR5PSIwIix0LnN0YXRlPU0uRkFESU5HX09VVCx0aGlzLnJ1blRpbWVvdXRPdXRzaWRlWm9uZShmdW5jdGlvbigpe3Quc3RhdGU9TS5ISURERU4sbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfSxpLmV4aXREdXJhdGlvbil9fSx0LnByb3RvdHlwZS5mYWRlT3V0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZhZGVPdXQoKX0pfSx0LnByb3RvdHlwZS5zZXR1cFRyaWdnZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0IT09dGhpcy5fdHJpZ2dlckVsZW1lbnQmJih0aGlzLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZS5fdHJpZ2dlckV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihpLG4sZS5fZXZlbnRPcHRpb25zKX0pfSksdGhpcy5fdHJpZ2dlckVsZW1lbnQ9dCl9LHQucHJvdG90eXBlLnJ1blRpbWVvdXRPdXRzaWRlWm9uZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTApLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KHQsZSl9KX0sdC5wcm90b3R5cGUuX3JlbW92ZVRyaWdnZXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3RyaWdnZXJFbGVtZW50JiZ0aGlzLl90cmlnZ2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0Ll90cmlnZ2VyRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG4sZSx0Ll9ldmVudE9wdGlvbnMpfSl9LHR9KCksTD1uZXcgaS5xKCJtYXQtcmlwcGxlLWdsb2JhbC1vcHRpb25zIiksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5yYWRpdXM9MCx0aGlzLnNwZWVkRmFjdG9yPTEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPWl8fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBGKHRoaXMsZSx0LG4pLCJOb29wQW5pbWF0aW9ucyI9PT1yJiYodGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb249e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9dCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRyaWdnZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcj10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfSx0LnByb3RvdHlwZS5mYWRlT3V0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJpcHBsZUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybntjZW50ZXJlZDp0aGlzLmNlbnRlcmVkLHJhZGl1czp0aGlzLnJhZGl1cyxjb2xvcjp0aGlzLmNvbG9yLGFuaW1hdGlvbjpPYmplY3Qoci5hKSh7fSx0aGlzLl9nbG9iYWxPcHRpb25zLmFuaW1hdGlvbix0aGlzLmFuaW1hdGlvbiksdGVybWluYXRlT25Qb2ludGVyVXA6dGhpcy5fZ2xvYmFsT3B0aW9ucy50ZXJtaW5hdGVPblBvaW50ZXJVcCxzcGVlZEZhY3Rvcjp0aGlzLnNwZWVkRmFjdG9yKih0aGlzLl9nbG9iYWxPcHRpb25zLmJhc2VTcGVlZEZhY3Rvcnx8MSl9fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmlwcGxlRGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQ9ZnVuY3Rpb24oKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9LHQucHJvdG90eXBlLmxhdW5jaD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLCJudW1iZXIiPT10eXBlb2YgdD90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUodCxlLE9iamVjdChyLmEpKHt9LHRoaXMucmlwcGxlQ29uZmlnLG4pKTp0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoMCwwLE9iamVjdChyLmEpKHt9LHRoaXMucmlwcGxlQ29uZmlnLHQpKX0sdH0oKSx6PWZ1bmN0aW9uKCl7fSxCPWZ1bmN0aW9uKHQpe3RoaXMuX2FuaW1hdGlvbk1vZGU9dCx0aGlzLnN0YXRlPSJ1bmNoZWNrZWQiLHRoaXMuZGlzYWJsZWQ9ITF9LFU9ZnVuY3Rpb24oKXt9LEg9MCxxPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2xhYmVsSWQ9Im1hdC1vcHRncm91cC1sYWJlbC0iK0grKyxlfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGQoZnVuY3Rpb24oKXt9KSksRz0wLFE9bmV3IGkucSgiTUFUX09QVElPTl9QQVJFTlRfQ09NUE9ORU5UIiksWT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fZWxlbWVudD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fcGFyZW50PW4sdGhpcy5ncm91cD1yLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pZD0ibWF0LW9wdGlvbi0iK0crKyx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPSIiLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9bmV3IGkubix0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IGEuYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtdWx0aXBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5tdWx0aXBsZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic2VsZWN0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmRpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChvLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZVJpcHBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5kaXNhYmxlUmlwcGxlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnRleHRDb250ZW50fHwiIikudHJpbSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfSx0LnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfSx0LnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldEhvc3RFbGVtZW50KCk7ImZ1bmN0aW9uIj09dHlwZW9mIHQuZm9jdXMmJnQuZm9jdXMoKX0sdC5wcm90b3R5cGUuc2V0QWN0aXZlU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlfHwodGhpcy5fYWN0aXZlPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sdC5wcm90b3R5cGUuc2V0SW5hY3RpdmVTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSx0LnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX0sdC5wcm90b3R5cGUuX2hhbmRsZUtleWRvd249ZnVuY3Rpb24odCl7dC5rZXlDb2RlIT09dS5mJiZ0LmtleUNvZGUhPT11Lmx8fCh0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9LHQucHJvdG90eXBlLl9zZWxlY3RWaWFJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfSx0LnByb3RvdHlwZS5fZ2V0VGFiSW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn0sdC5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sdC5wcm90b3R5cGUubmdBZnRlclZpZXdDaGVja2VkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc2VsZWN0ZWQpe3ZhciB0PXRoaXMudmlld1ZhbHVlO3QhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT10LHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCkpfX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSksdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSExKSx0aGlzLnNvdXJjZT10LHRoaXMuaXNVc2VySW5wdXQ9ZX0odGhpcyx0KSl9LHR9KCksVz1mdW5jdGlvbigpe30sWj1uZXcgaS5xKCJtYXQtbGFiZWwtZ2xvYmFsLW9wdGlvbnMiKX0sWGxQdzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigiNmJsRiIpO2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gbmV3IGkuYShlP2Z1bmN0aW9uKG4pe3JldHVybiBlLnNjaGVkdWxlKG8sMCx7ZXJyb3I6dCxzdWJzY3JpYmVyOm59KX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KX1mdW5jdGlvbiBvKHQpe3Quc3Vic2NyaWJlci5lcnJvcih0LmVycm9yKX19LFlTaDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciBpPTgscj05LG89MTMsYT0yNyxzPTMyLHU9MzUsbD0zNixjPTM3LGY9MzgsaD0zOSxkPTQwLHA9NDYsbT00OCx5PTU3LHY9NjUsZz05MH0sWWhiTzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pO3ZhciBpPW4oIkNjbkciKSxyPW4oIm42Z0ciKSxvPW4oIks5SWEiKSxhPW4oInB1Z1QiKSxzPTAsdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9vcGVuQ2xvc2VBbGxBY3Rpb25zPW5ldyBvLmEsdGhpcy5pZD0iY2RrLWFjY29yZGlvbi0iK3MrKyx0aGlzLl9tdWx0aT0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtdWx0aSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX211bHRpPU9iamVjdChyLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW5BbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITApfSx0LnByb3RvdHlwZS5jbG9zZUFsbD1mdW5jdGlvbigpe3RoaXMuX29wZW5DbG9zZUFsbCghMSl9LHQucHJvdG90eXBlLl9vcGVuQ2xvc2VBbGw9ZnVuY3Rpb24odCl7dGhpcy5tdWx0aSYmdGhpcy5fb3BlbkNsb3NlQWxsQWN0aW9ucy5uZXh0KHQpfSx0fSgpLGw9MCxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLmFjY29yZGlvbj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZXhwYW5zaW9uRGlzcGF0Y2hlcj1uLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbj1hLmEuRU1QVFksdGhpcy5jbG9zZWQ9bmV3IGkubix0aGlzLm9wZW5lZD1uZXcgaS5uLHRoaXMuZGVzdHJveWVkPW5ldyBpLm4sdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgaS5uLHRoaXMuaWQ9ImNkay1hY2NvcmRpb24tY2hpbGQtIitsKyssdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXI9ZnVuY3Rpb24oKXt9LHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyPW4ubGlzdGVuKGZ1bmN0aW9uKHQsZSl7ci5hY2NvcmRpb24mJiFyLmFjY29yZGlvbi5tdWx0aSYmci5hY2NvcmRpb24uaWQ9PT1lJiZyLmlkIT09dCYmKHIuZXhwYW5kZWQ9ITEpfSksdGhpcy5hY2NvcmRpb24mJih0aGlzLl9vcGVuQ2xvc2VBbGxTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9PcGVuQ2xvc2VBbGxBY3Rpb25zKCkpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImV4cGFuZGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfSxzZXQ6ZnVuY3Rpb24odCl7dD1PYmplY3Qoci5jKSh0KSx0aGlzLl9leHBhbmRlZCE9PXQmJih0aGlzLl9leHBhbmRlZD10LHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0KSx0Pyh0aGlzLm9wZW5lZC5lbWl0KCksdGhpcy5fZXhwYW5zaW9uRGlzcGF0Y2hlci5ub3RpZnkodGhpcy5pZCx0aGlzLmFjY29yZGlvbj90aGlzLmFjY29yZGlvbi5pZDp0aGlzLmlkKSk6dGhpcy5jbG9zZWQuZW1pdCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KHIuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZC5jb21wbGV0ZSgpLHRoaXMuY2xvc2VkLmNvbXBsZXRlKCksdGhpcy5kZXN0cm95ZWQuZW1pdCgpLHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXIoKSx0aGlzLl9vcGVuQ2xvc2VBbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQpfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkPSExKX0sdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkPSEwKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZVRvT3BlbkNsb3NlQWxsQWN0aW9ucz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuYWNjb3JkaW9uLl9vcGVuQ2xvc2VBbGxBY3Rpb25zLnN1YnNjcmliZShmdW5jdGlvbihlKXt0LmRpc2FibGVkfHwodC5leHBhbmRlZD1lKX0pfSx0fSgpLGY9ZnVuY3Rpb24oKXt9fSxZbGJROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbigibXJTRyIpLG4oIjZibEYiKSxuKCJGL1hMIik7dmFyIGk9bigiSzlJYSIpLHI9bigiQ2NuRyIpLG89ZnVuY3Rpb24oKXt9LGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09biYmKG49ITApO3ZhciByPXRoaXM7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1uLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5vbkNoYW5nZT10aGlzLl9lbWl0Q2hhbmdlcz9uZXcgaS5hOm51bGwsZSYmZS5sZW5ndGgmJih0P2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gci5fbWFya1NlbGVjdGVkKHQpfSk6dGhpcy5fbWFya1NlbGVjdGVkKGVbMF0pLHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aD0wKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPUFycmF5LmZyb20odGhpcy5fc2VsZWN0aW9uLnZhbHVlcygpKSksdGhpcy5fc2VsZWN0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQoZSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXJrU2VsZWN0ZWQoZSl9KSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuZGVzZWxlY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudChlKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3VubWFya1NlbGVjdGVkKGUpfSksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0KXt0aGlzLmlzU2VsZWN0ZWQodCk/dGhpcy5kZXNlbGVjdCh0KTp0aGlzLnNlbGVjdCh0KX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuaXNTZWxlY3RlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uLmhhcyh0KX0sdC5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9LHQucHJvdG90eXBlLmhhc1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNFbXB0eSgpfSx0LnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKHQpe3RoaXMuX211bHRpcGxlJiZ0aGlzLnNlbGVjdGVkJiZ0aGlzLl9zZWxlY3RlZC5zb3J0KHQpfSx0LnByb3RvdHlwZS5pc011bHRpcGxlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfSx0LnByb3RvdHlwZS5fZW1pdENoYW5nZUV2ZW50PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLm9uQ2hhbmdlJiZ0aGlzLm9uQ2hhbmdlLm5leHQoe3NvdXJjZTp0aGlzLGFkZGVkOnRoaXMuX3NlbGVjdGVkVG9FbWl0LHJlbW92ZWQ6dGhpcy5fZGVzZWxlY3RlZFRvRW1pdH0pLHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10pfSx0LnByb3RvdHlwZS5fbWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX0sdC5wcm90b3R5cGUuX3VubWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9LHQucHJvdG90eXBlLl91bm1hcmtBbGw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KX0sdC5wcm90b3R5cGUuX3ZlcmlmeVZhbHVlQXNzaWdubWVudD1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aD4xJiYhdGhpcy5fbXVsdGlwbGUpdGhyb3cgRXJyb3IoIkNhbm5vdCBwYXNzIG11bHRpcGxlIHZhbHVlcyBpbnRvIFNlbGVjdGlvbk1vZGVsIHdpdGggc2luZ2xlLXZhbHVlIG1vZGUuIil9LHR9KCkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9saXN0ZW5lcnM9W119cmV0dXJuIHQucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGk9dGhpcy5fbGlzdGVuZXJzO248aS5sZW5ndGg7bisrKSgwLGlbbl0pKHQsZSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9saXN0ZW5lcnMucHVzaCh0KSxmdW5jdGlvbigpe2UuX2xpc3RlbmVycz1lLl9saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pfX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9saXN0ZW5lcnM9W119LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKX0sWllDaTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkNjbkciKSxvPW4oIjZibEYiKSxhPW4oIks5SWEiKSxzPW4oIjI2RlUiKSx1PW4oIjAvdVEiKSxsPW4oIkYvWEwiKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcywibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJFbXB0eUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gaS5iKGUsdCksZX0oRXJyb3IpLGY9bigicHNXMCIpLGg9bigiNjdZLyIpLGQ9bigiVm5ELyIpLHA9bigidDlmWiIpLG09bigiRkZPbyIpO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IHYodCkpfX12YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWZhdWx0VmFsdWU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgZyh0LHRoaXMuZGVmYXVsdFZhbHVlKSl9LHR9KCksZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuZGVmYXVsdFZhbHVlPW4saS5pc0VtcHR5PSEwLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNFbXB0eT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNFbXB0eSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG0uYSksYj1uKCJ4TXlFIiksXz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dyksT2JqZWN0KGIuYSkoe2hhc1ZhbHVlOiExLG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1ZhbHVlPSEwfSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc1ZhbHVlKXRocm93IHQoKX19KX07ZnVuY3Rpb24gdygpe3JldHVybiBuZXcgY312YXIgeD1uKCJtQ2hGIik7ZnVuY3Rpb24gQyh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpLnBpcGUodD9PYmplY3QoZC5hKShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixpKX0pOnguYSxPYmplY3QocC5hKSgxKSxuP3koZSk6XyhmdW5jdGlvbigpe3JldHVybiBuZXcgY30pKX19ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBFKHQsZSxuKSl9fXZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZSx0aGlzLnNvdXJjZT1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBPKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnLHRoaXMuc291cmNlKSl9LHR9KCksTz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnByZWRpY2F0ZT1uLG8udGhpc0FyZz1pLG8uc291cmNlPXIsby5pbmRleD0wLG8udGhpc0FyZz1pfHxvLG99cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5pbmRleCsrLHRoaXMuc291cmNlKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWV8fHRoaXMubm90aWZ5Q29tcGxldGUoITEpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeUNvbXBsZXRlKCEwKX0sZX0obS5hKSxrPW4oIlBoam4iKTtmdW5jdGlvbiBUKHQsZSl7dmFyIG49ITE7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTImJihuPSEwKSxmdW5jdGlvbihpKXtyZXR1cm4gaS5saWZ0KG5ldyBqKHQsZSxuKSl9fXZhciBqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuYWNjdW11bGF0b3I9dCx0aGlzLnNlZWQ9ZSx0aGlzLmhhc1NlZWQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgQSh0LHRoaXMuYWNjdW11bGF0b3IsdGhpcy5zZWVkLHRoaXMuaGFzU2VlZCkpfSx0fSgpLEE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5hY2N1bXVsYXRvcj1uLG8uX3NlZWQ9aSxvLmhhc1NlZWQ9cixvLmluZGV4PTAsb31yZXR1cm4gaS5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLmhhc1NlZWQ9ITAsdGhpcy5fc2VlZD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzU2VlZClyZXR1cm4gdGhpcy5fdHJ5TmV4dCh0KTt0aGlzLnNlZWQ9dCx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMuYWNjdW11bGF0b3IodGhpcy5zZWVkLHQsbil9Y2F0Y2godCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLnNlZWQ9ZSx0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KG0uYSksST1uKCJiN21XIiksUj1uKCJHNUoxIik7ZnVuY3Rpb24gTSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10P09iamVjdChSLmIpKCk6ZS5saWZ0KG5ldyBQKHQpKX19dmFyIFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudG90YWw9dCx0aGlzLnRvdGFsPDApdGhyb3cgbmV3IEkuYX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgRCh0LHRoaXMudG90YWwpKX0sdH0oKSxEPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS50b3RhbD1uLGkucmluZz1uZXcgQXJyYXksaS5jb3VudD0wLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmluZyxuPXRoaXMudG90YWwsaT10aGlzLmNvdW50Kys7ZS5sZW5ndGg8bj9lLnB1c2godCk6ZVtpJW5dPXR9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVzdGluYXRpb24sZT10aGlzLmNvdW50O2lmKGU+MClmb3IodmFyIG49dGhpcy5jb3VudD49dGhpcy50b3RhbD90aGlzLnRvdGFsOnRoaXMuY291bnQsaT10aGlzLnJpbmcscj0wO3I8bjtyKyspe3ZhciBvPWUrKyVuO3QubmV4dChpW29dKX10LmNvbXBsZXRlKCl9LGV9KG0uYSksTj1uKCJ5M0J5IiksRj1uKCI5WjFGIiksTD1uKCJUeGpnIik7ZnVuY3Rpb24gVih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpLnBpcGUodD9PYmplY3QoZC5hKShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixpKX0pOnguYSxNKDEpLG4/eShlKTpfKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSkpfX12YXIgej1uKCJabjhEIiksQj1uKCJJcDBSIiksVT1uKCJaWWp0Iik7bi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVufSksbi5kKGUsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIGdufSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGhufSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJufSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIF9ufSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIHBufSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGRufSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIHZufSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIHlufSksbi5kKGUsIkQiLGZ1bmN0aW9uKCl7cmV0dXJuIGFufSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFplfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIEplfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEd9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gRmV9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gUWV9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gVmV9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gc259KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gd259KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gZm59KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gJGV9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gcm59KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbm59KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZW59KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gb259KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gQmV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4ganR9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gVHR9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gYXR9KTt2YXIgSD1mdW5jdGlvbih0LGUpe3RoaXMuaWQ9dCx0aGlzLnVybD1lfSxxPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dm9pZCAwPT09aSYmKGk9ImltcGVyYXRpdmUiKSx2b2lkIDA9PT1yJiYocj1udWxsKTt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLm5hdmlnYXRpb25UcmlnZ2VyPWksby5yZXN0b3JlZFN0YXRlPXIsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uU3RhcnQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KEgpLEc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci51cmxBZnRlclJlZGlyZWN0cz1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInKSJ9LGV9KEgpLFE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5yZWFzb249aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25DYW5jZWwoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KEgpLFk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5lcnJvcj1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVycm9yKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgZXJyb3I6ICIrdGhpcy5lcnJvcisiKSJ9LGV9KEgpLFc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPWksby5zdGF0ZT1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVzUmVjb2duaXplZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9aSxvLnN0YXRlPXIsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja1N0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBhLnVybEFmdGVyUmVkaXJlY3RzPWksYS5zdGF0ZT1yLGEuc2hvdWxkQWN0aXZhdGU9byxhfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkd1YXJkc0NoZWNrRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIiwgc2hvdWxkQWN0aXZhdGU6ICIrdGhpcy5zaG91bGRBY3RpdmF0ZSsiKSJ9LGV9KEgpLFg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPWksby5zdGF0ZT1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmVzb2x2ZVN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1pLG8uc3RhdGU9cixvfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVFbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucm91dGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVDb25maWdMb2FkU3RhcnQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJvdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlQ29uZmlnTG9hZEVuZChwYXRoOiAiK3RoaXMucm91dGUucGF0aCsiKSJ9LHR9KCksZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2hpbGRBY3RpdmF0aW9uU3RhcnQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2hpbGRBY3RpdmF0aW9uRW5kKHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLGl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFjdGl2YXRpb25TdGFydChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBY3RpdmF0aW9uRW5kKHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLG90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5yb3V0ZXJFdmVudD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmFuY2hvcj1ufXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJTY3JvbGwoYW5jaG9yOiAnIit0aGlzLmFuY2hvcisiJywgcG9zaXRpb246ICciKyh0aGlzLnBvc2l0aW9uP3RoaXMucG9zaXRpb25bMF0rIiwgIit0aGlzLnBvc2l0aW9uWzFdOm51bGwpKyInKSJ9LHR9KCksYXQ9ZnVuY3Rpb24oKXt9LHN0PSJwcmltYXJ5Iix1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5wYXJhbXM9dHx8e319cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wYXJhbXMuaGFzT3duUHJvcGVydHkodCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZVswXTplfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXModCkpe3ZhciBlPXRoaXMucGFyYW1zW3RdO3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfXJldHVybltdfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtleXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gbHQodCl7cmV0dXJuIG5ldyB1dCh0KX1mdW5jdGlvbiBjdCh0LGUsbil7dmFyIGk9bi5wYXRoLnNwbGl0KCIvIik7aWYoaS5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoImZ1bGwiPT09bi5wYXRoTWF0Y2gmJihlLmhhc0NoaWxkcmVuKCl8fGkubGVuZ3RoPHQubGVuZ3RoKSlyZXR1cm4gbnVsbDtmb3IodmFyIHI9e30sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pW29dLHM9dFtvXTtpZihhLnN0YXJ0c1dpdGgoIjoiKSlyW2Euc3Vic3RyaW5nKDEpXT1zO2Vsc2UgaWYoYSE9PXMucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6dC5zbGljZSgwLGkubGVuZ3RoKSxwb3NQYXJhbXM6cn19dmFyIGZ0PWZ1bmN0aW9uKHQsZSl7dGhpcy5yb3V0ZXM9dCx0aGlzLm1vZHVsZT1lfTtmdW5jdGlvbiBodCh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtkdChpLHB0KGUsaSkpfX1mdW5jdGlvbiBkdCh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiXG4gICAgICBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogRW5jb3VudGVyZWQgdW5kZWZpbmVkIHJvdXRlLlxuICAgICAgVGhlIHJlYXNvbiBtaWdodCBiZSBhbiBleHRyYSBjb21tYS5cblxuICAgICAgRXhhbXBsZTpcbiAgICAgIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgICAgICB7IHBhdGg6ICcnLCByZWRpcmVjdFRvOiAnL2Rhc2hib2FyZCcsIHBhdGhNYXRjaDogJ2Z1bGwnIH0sXG4gICAgICAgIHsgcGF0aDogJ2Rhc2hib2FyZCcsICBjb21wb25lbnQ6IERhc2hib2FyZENvbXBvbmVudCB9LCwgPDwgdHdvIGNvbW1hc1xuICAgICAgICB7IHBhdGg6ICdkZXRhaWwvOmlkJywgY29tcG9uZW50OiBIZXJvRGV0YWlsQ29tcG9uZW50IH1cbiAgICAgIF07XG4gICAgIik7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBBcnJheSBjYW5ub3QgYmUgc3BlY2lmaWVkIik7aWYoIXQuY29tcG9uZW50JiYhdC5jaGlsZHJlbiYmIXQubG9hZENoaWxkcmVuJiZ0Lm91dGxldCYmdC5vdXRsZXQhPT1zdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBhIGNvbXBvbmVudGxlc3Mgcm91dGUgd2l0aG91dCBjaGlsZHJlbiBvciBsb2FkQ2hpbGRyZW4gY2Fubm90IGhhdmUgYSBuYW1lZCBvdXRsZXQgc2V0Iik7aWYodC5yZWRpcmVjdFRvJiZ0LmNoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5yZWRpcmVjdFRvJiZ0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LmNoaWxkcmVuJiZ0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBjaGlsZHJlbiBhbmQgbG9hZENoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5yZWRpcmVjdFRvJiZ0LmNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBjb21wb25lbnQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnBhdGgmJnQubWF0Y2hlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoIGFuZCBtYXRjaGVyIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodm9pZCAwPT09dC5yZWRpcmVjdFRvJiYhdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJy4gT25lIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBiZSBwcm92aWRlZDogY29tcG9uZW50LCByZWRpcmVjdFRvLCBjaGlsZHJlbiBvciBsb2FkQ2hpbGRyZW4iKTtpZih2b2lkIDA9PT10LnBhdGgmJnZvaWQgMD09PXQubWF0Y2hlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByb3V0ZXMgbXVzdCBoYXZlIGVpdGhlciBhIHBhdGggb3IgYSBtYXRjaGVyIHNwZWNpZmllZCIpO2lmKCJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYiLyI9PT10LnBhdGguY2hhckF0KDApKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggY2Fubm90IHN0YXJ0IHdpdGggYSBzbGFzaCIpO2lmKCIiPT09dC5wYXRoJiZ2b2lkIDAhPT10LnJlZGlyZWN0VG8mJnZvaWQgMD09PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICd7cGF0aDogXCIiK2UrJyIsIHJlZGlyZWN0VG86ICInK3QucmVkaXJlY3RUbysiXCJ9JzogcGxlYXNlIHByb3ZpZGUgJ3BhdGhNYXRjaCcuIFRoZSBkZWZhdWx0IHZhbHVlIG9mICdwYXRoTWF0Y2gnIGlzICdwcmVmaXgnLCBidXQgb2Z0ZW4gdGhlIGludGVudCBpcyB0byB1c2UgJ2Z1bGwnLiIpO2lmKHZvaWQgMCE9PXQucGF0aE1hdGNoJiYiZnVsbCIhPT10LnBhdGhNYXRjaCYmInByZWZpeCIhPT10LnBhdGhNYXRjaCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoTWF0Y2ggY2FuIG9ubHkgYmUgc2V0IHRvICdwcmVmaXgnIG9yICdmdWxsJyIpO3QuY2hpbGRyZW4mJmh0KHQuY2hpbGRyZW4sZSl9ZnVuY3Rpb24gcHQodCxlKXtyZXR1cm4gZT90fHxlLnBhdGg/dCYmIWUucGF0aD90KyIvIjohdCYmZS5wYXRoP2UucGF0aDp0KyIvIitlLnBhdGg6IiI6dH1mdW5jdGlvbiBtdCh0KXt2YXIgZT10LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLm1hcChtdCksbj1lP09iamVjdChpLmEpKHt9LHQse2NoaWxkcmVuOmV9KTpPYmplY3QoaS5hKSh7fSx0KTtyZXR1cm4hbi5jb21wb25lbnQmJihlfHxuLmxvYWRDaGlsZHJlbikmJm4ub3V0bGV0JiZuLm91dGxldCE9PXN0JiYobi5jb21wb25lbnQ9YXQpLG59ZnVuY3Rpb24geXQodCxlKXt2YXIgbixpPU9iamVjdC5rZXlzKHQpLHI9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKHRbbj1pW29dXSE9PWVbbl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sdCl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHQubGVuZ3RoPjA/dFt0Lmxlbmd0aC0xXTpudWxsfWZ1bmN0aW9uIGJ0KHQsZSl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZSh0W25dLG4pfWZ1bmN0aW9uIF90KHQpe3JldHVybiB0LnBpcGUoT2JqZWN0KHouYSkoKSxTKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKX1mdW5jdGlvbiB3dCh0KXtyZXR1cm4gT2JqZWN0KHIuVmEpKHQpP3Q6T2JqZWN0KHIuV2EpKHQpP09iamVjdCh1LmEpKFByb21pc2UucmVzb2x2ZSh0KSk6T2JqZWN0KGwuYSkodCl9ZnVuY3Rpb24geHQodCxlLG4pe3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHl0KHQsZSl9KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcykmJmZ1bmN0aW9uIHQoZSxuKXtpZighT3QoZS5zZWdtZW50cyxuLnNlZ21lbnRzKSlyZXR1cm4hMTtpZihlLm51bWJlck9mQ2hpbGRyZW4hPT1uLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuITE7Zm9yKHZhciBpIGluIG4uY2hpbGRyZW4pe2lmKCFlLmNoaWxkcmVuW2ldKXJldHVybiExO2lmKCF0KGUuY2hpbGRyZW5baV0sbi5jaGlsZHJlbltpXSkpcmV0dXJuITF9cmV0dXJuITB9KHQucm9vdCxlLnJvb3QpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aDw9T2JqZWN0LmtleXModCkubGVuZ3RoJiZPYmplY3Qua2V5cyhlKS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT09PXRbbl19KX0odC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKSYmZnVuY3Rpb24gdChlLG4pe3JldHVybiBmdW5jdGlvbiBlKG4saSxyKXtpZihuLnNlZ21lbnRzLmxlbmd0aD5yLmxlbmd0aClyZXR1cm4hIU90KGE9bi5zZWdtZW50cy5zbGljZSgwLHIubGVuZ3RoKSxyKSYmIWkuaGFzQ2hpbGRyZW4oKTtpZihuLnNlZ21lbnRzLmxlbmd0aD09PXIubGVuZ3RoKXtpZighT3Qobi5zZWdtZW50cyxyKSlyZXR1cm4hMTtmb3IodmFyIG8gaW4gaS5jaGlsZHJlbil7aWYoIW4uY2hpbGRyZW5bb10pcmV0dXJuITE7aWYoIXQobi5jaGlsZHJlbltvXSxpLmNoaWxkcmVuW29dKSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgYT1yLnNsaWNlKDAsbi5zZWdtZW50cy5sZW5ndGgpLHM9ci5zbGljZShuLnNlZ21lbnRzLmxlbmd0aCk7cmV0dXJuISFPdChuLnNlZ21lbnRzLGEpJiYhIW4uY2hpbGRyZW5bc3RdJiZlKG4uY2hpbGRyZW5bc3RdLGkscyl9KGUsbixuLnNlZ21lbnRzKX0odC5yb290LGUucm9vdCl9dmFyIEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5yb290PXQsdGhpcy5xdWVyeVBhcmFtcz1lLHRoaXMuZnJhZ21lbnQ9bn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPWx0KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEF0LnNlcmlhbGl6ZSh0aGlzKX0sdH0oKSxTdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuc2VnbWVudHM9dCx0aGlzLmNoaWxkcmVuPWUsdGhpcy5wYXJlbnQ9bnVsbCxidChlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucGFyZW50PW59KX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5udW1iZXJPZkNoaWxkcmVuPjB9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibnVtYmVyT2ZDaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSXQodGhpcyl9LHR9KCksRXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wYXRoPXQsdGhpcy5wYXJhbWV0ZXJzPWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1ldGVyTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtZXRlck1hcHx8KHRoaXMuX3BhcmFtZXRlck1hcD1sdCh0aGlzLnBhcmFtZXRlcnMpKSx0aGlzLl9wYXJhbWV0ZXJNYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gRnQodGhpcyl9LHR9KCk7ZnVuY3Rpb24gT3QodCxlKXtyZXR1cm4gdC5sZW5ndGg9PT1lLmxlbmd0aCYmdC5ldmVyeShmdW5jdGlvbih0LG4pe3JldHVybiB0LnBhdGg9PT1lW25dLnBhdGh9KX1mdW5jdGlvbiBrdCh0LGUpe3ZhciBuPVtdO3JldHVybiBidCh0LmNoaWxkcmVuLGZ1bmN0aW9uKHQsaSl7aT09PXN0JiYobj1uLmNvbmNhdChlKHQsaSkpKX0pLGJ0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxpKXtpIT09c3QmJihuPW4uY29uY2F0KGUodCxpKSkpfSksbn12YXIgVHQ9ZnVuY3Rpb24oKXt9LGp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFV0KHQpO3JldHVybiBuZXcgQ3QoZS5wYXJzZVJvb3RTZWdtZW50KCksZS5wYXJzZVF1ZXJ5UGFyYW1zKCksZS5wYXJzZUZyYWdtZW50KCkpfSx0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGUsbjtyZXR1cm4iLyIrZnVuY3Rpb24gdChlLG4pe2lmKCFlLmhhc0NoaWxkcmVuKCkpcmV0dXJuIEl0KGUpO2lmKG4pe3ZhciBpPWUuY2hpbGRyZW5bc3RdP3QoZS5jaGlsZHJlbltzdF0sITEpOiIiLHI9W107cmV0dXJuIGJ0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxuKXtuIT09c3QmJnIucHVzaChuKyI6Iit0KGUsITEpKX0pLHIubGVuZ3RoPjA/aSsiKCIrci5qb2luKCIvLyIpKyIpIjppfXZhciBvPWt0KGUsZnVuY3Rpb24obixpKXtyZXR1cm4gaT09PXN0P1t0KGUuY2hpbGRyZW5bc3RdLCExKV06W2krIjoiK3QobiwhMSldfSk7cmV0dXJuIEl0KGUpKyIvKCIrby5qb2luKCIvLyIpKyIpIn0odC5yb290LCEwKSsoZT10LnF1ZXJ5UGFyYW1zLChuPU9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXt2YXIgbj1lW3RdO3JldHVybiBBcnJheS5pc0FycmF5KG4pP24ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBNdCh0KSsiPSIrTXQoZSl9KS5qb2luKCImIik6TXQodCkrIj0iK010KG4pfSkpLmxlbmd0aD8iPyIrbi5qb2luKCImIik6IiIpKygic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQ/IiMiK2VuY29kZVVSSSh0LmZyYWdtZW50KToiIil9LHR9KCksQXQ9bmV3IGp0O2Z1bmN0aW9uIEl0KHQpe3JldHVybiB0LnNlZ21lbnRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gRnQodCl9KS5qb2luKCIvIil9ZnVuY3Rpb24gUnQodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24gTXQodCl7cmV0dXJuIFJ0KHQpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIFB0KHQpe3JldHVybiBSdCh0KS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWZ1bmN0aW9uIE50KHQpe3JldHVybiBEdCh0LnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBGdCh0KXtyZXR1cm4iIitQdCh0LnBhdGgpKyhlPXQucGFyYW1ldGVycyxPYmplY3Qua2V5cyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIjsiK1B0KHQpKyI9IitQdChlW3RdKX0pLmpvaW4oIiIpKTt2YXIgZX12YXIgTHQ9L15bXlwvKCk/Oz0jXSsvO2Z1bmN0aW9uIFZ0KHQpe3ZhciBlPXQubWF0Y2goTHQpO3JldHVybiBlP2VbMF06IiJ9dmFyIHp0PS9eW149PyYjXSsvLEJ0PS9eW14/JiNdKy8sVXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMudXJsPXQsdGhpcy5yZW1haW5pbmc9dH1yZXR1cm4gdC5wcm90b3R5cGUucGFyc2VSb290U2VnbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpLCIiPT09dGhpcy5yZW1haW5pbmd8fHRoaXMucGVla1N0YXJ0c1dpdGgoIj8iKXx8dGhpcy5wZWVrU3RhcnRzV2l0aCgiIyIpP25ldyBTdChbXSx7fSk6bmV3IFN0KFtdLHRoaXMucGFyc2VDaGlsZHJlbigpKX0sdC5wcm90b3R5cGUucGFyc2VRdWVyeVBhcmFtcz1mdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI/IikpZG97dGhpcy5wYXJzZVF1ZXJ5UGFyYW0odCl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWwoIiYiKSk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIiMiKT9kZWNvZGVVUklDb21wb25lbnQodGhpcy5yZW1haW5pbmcpOm51bGx9LHQucHJvdG90eXBlLnBhcnNlQ2hpbGRyZW49ZnVuY3Rpb24oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7dmFyIHQ9W107Zm9yKHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKXx8dC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3RoaXMucGVla1N0YXJ0c1dpdGgoIi8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8vIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpOyl0aGlzLmNhcHR1cmUoIi8iKSx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dmFyIGU9e307dGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKSYmKHRoaXMuY2FwdHVyZSgiLyIpLGU9dGhpcy5wYXJzZVBhcmVucyghMCkpO3ZhciBuPXt9O3JldHVybiB0aGlzLnBlZWtTdGFydHNXaXRoKCIoIikmJihuPXRoaXMucGFyc2VQYXJlbnMoITEpKSwodC5sZW5ndGg+MHx8T2JqZWN0LmtleXMoZSkubGVuZ3RoPjApJiYobltzdF09bmV3IFN0KHQsZSkpLG59LHQucHJvdG90eXBlLnBhcnNlU2VnbWVudD1mdW5jdGlvbigpe3ZhciB0PVZ0KHRoaXMucmVtYWluaW5nKTtpZigiIj09PXQmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgRXJyb3IoIkVtcHR5IHBhdGggdXJsIHNlZ21lbnQgY2Fubm90IGhhdmUgcGFyYW1ldGVyczogJyIrdGhpcy5yZW1haW5pbmcrIicuIik7cmV0dXJuIHRoaXMuY2FwdHVyZSh0KSxuZXcgRXQoRHQodCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX0sdC5wcm90b3R5cGUucGFyc2VNYXRyaXhQYXJhbXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e307dGhpcy5jb25zdW1lT3B0aW9uYWwoIjsiKTspdGhpcy5wYXJzZVBhcmFtKHQpO3JldHVybiB0fSx0LnByb3RvdHlwZS5wYXJzZVBhcmFtPWZ1bmN0aW9uKHQpe3ZhciBlPVZ0KHRoaXMucmVtYWluaW5nKTtpZihlKXt0aGlzLmNhcHR1cmUoZSk7dmFyIG49IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7dmFyIGk9VnQodGhpcy5yZW1haW5pbmcpO2kmJnRoaXMuY2FwdHVyZShuPWkpfXRbRHQoZSldPUR0KG4pfX0sdC5wcm90b3R5cGUucGFyc2VRdWVyeVBhcmFtPWZ1bmN0aW9uKHQpe3ZhciBlLG49KGU9dGhpcy5yZW1haW5pbmcubWF0Y2goenQpKT9lWzBdOiIiO2lmKG4pe3RoaXMuY2FwdHVyZShuKTt2YXIgaT0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKEJ0KTtyZXR1cm4gZT9lWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7ciYmdGhpcy5jYXB0dXJlKGk9cil9dmFyIG89TnQobiksYT1OdChpKTtpZih0Lmhhc093blByb3BlcnR5KG8pKXt2YXIgcz10W29dO0FycmF5LmlzQXJyYXkocyl8fCh0W29dPXM9W3NdKSxzLnB1c2goYSl9ZWxzZSB0W29dPWF9fSx0LnByb3RvdHlwZS5wYXJzZVBhcmVucz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodGhpcy5jYXB0dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7dmFyIG49VnQodGhpcy5yZW1haW5pbmcpLGk9dGhpcy5yZW1haW5pbmdbbi5sZW5ndGhdO2lmKCIvIiE9PWkmJiIpIiE9PWkmJiI7IiE9PWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFyc2UgdXJsICciK3RoaXMudXJsKyInIik7dmFyIHI9dm9pZCAwO24uaW5kZXhPZigiOiIpPi0xPyhyPW4uc3Vic3RyKDAsbi5pbmRleE9mKCI6IikpLHRoaXMuY2FwdHVyZShyKSx0aGlzLmNhcHR1cmUoIjoiKSk6dCYmKHI9c3QpO3ZhciBvPXRoaXMucGFyc2VDaGlsZHJlbigpO2Vbcl09MT09PU9iamVjdC5rZXlzKG8pLmxlbmd0aD9vW3N0XTpuZXcgU3QoW10sbyksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIGV9LHQucHJvdG90eXBlLnBlZWtTdGFydHNXaXRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKHQpfSx0LnByb3RvdHlwZS5jb25zdW1lT3B0aW9uYWw9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLnBlZWtTdGFydHNXaXRoKHQpJiYodGhpcy5yZW1haW5pbmc9dGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKHQubGVuZ3RoKSwhMCl9LHQucHJvdG90eXBlLmNhcHR1cmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKHQpKXRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgIicrdCsnIi4nKX0sdH0oKSxIdD1mdW5jdGlvbih0KXt0aGlzLnNlZ21lbnRHcm91cD10fHxudWxsfSxxdD1mdW5jdGlvbih0KXt0aGlzLnVybFRyZWU9dH07ZnVuY3Rpb24gR3QodCl7cmV0dXJuIG5ldyBvLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEh0KHQpKX0pfWZ1bmN0aW9uIFF0KHQpe3JldHVybiBuZXcgby5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBxdCh0KSl9KX1mdW5jdGlvbiBZdCh0KXtyZXR1cm4gbmV3IG8uYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgRXJyb3IoIk9ubHkgYWJzb2x1dGUgcmVkaXJlY3RzIGNhbiBoYXZlIG5hbWVkIG91dGxldHMuIHJlZGlyZWN0VG86ICciK3QrIiciKSl9KX12YXIgV3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksbyl7dGhpcy5jb25maWdMb2FkZXI9ZSx0aGlzLnVybFNlcmlhbGl6ZXI9bix0aGlzLnVybFRyZWU9aSx0aGlzLmNvbmZpZz1vLHRoaXMuYWxsb3dSZWRpcmVjdHM9ITAsdGhpcy5uZ01vZHVsZT10LmdldChyLngpfXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuZXhwYW5kU2VnbWVudEdyb3VwKHRoaXMubmdNb2R1bGUsdGhpcy5jb25maWcsdGhpcy51cmxUcmVlLnJvb3Qsc3QpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY3JlYXRlVXJsVHJlZShlLHQudXJsVHJlZS5xdWVyeVBhcmFtcyx0LnVybFRyZWUuZnJhZ21lbnQpfSkpLnBpcGUoT2JqZWN0KEYuYSkoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHF0KXJldHVybiB0LmFsbG93UmVkaXJlY3RzPSExLHQubWF0Y2goZS51cmxUcmVlKTtpZihlIGluc3RhbmNlb2YgSHQpdGhyb3cgdC5ub01hdGNoRXJyb3IoZSk7dGhyb3cgZX0pKX0sdC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50R3JvdXAodGhpcy5uZ01vZHVsZSx0aGlzLmNvbmZpZyx0LnJvb3Qsc3QpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24obil7cmV0dXJuIGUuY3JlYXRlVXJsVHJlZShuLHQucXVlcnlQYXJhbXMsdC5mcmFnbWVudCl9KSkucGlwZShPYmplY3QoRi5hKShmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgSHQpdGhyb3cgZS5ub01hdGNoRXJyb3IodCk7dGhyb3cgdH0pKX0sdC5wcm90b3R5cGUubm9NYXRjaEVycm9yPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXJyb3IoIkNhbm5vdCBtYXRjaCBhbnkgcm91dGVzLiBVUkwgU2VnbWVudDogJyIrdC5zZWdtZW50R3JvdXArIiciKX0sdC5wcm90b3R5cGUuY3JlYXRlVXJsVHJlZT1mdW5jdGlvbih0LGUsbil7dmFyIGkscj10LnNlZ21lbnRzLmxlbmd0aD4wP25ldyBTdChbXSwoKGk9e30pW3N0XT10LGkpKTp0O3JldHVybiBuZXcgQ3QocixlLG4pfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIDA9PT1uLnNlZ21lbnRzLmxlbmd0aCYmbi5oYXNDaGlsZHJlbigpP3RoaXMuZXhwYW5kQ2hpbGRyZW4odCxlLG4pLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBTdChbXSx0KX0pKTp0aGlzLmV4cGFuZFNlZ21lbnQodCxuLGUsbi5zZWdtZW50cyxpLCEwKX0sdC5wcm90b3R5cGUuZXhwYW5kQ2hpbGRyZW49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYoMD09PU9iamVjdC5rZXlzKG4pLmxlbmd0aClyZXR1cm4gT2JqZWN0KGwuYSkoe30pO3ZhciBvPVtdLGE9W10scz17fTtyZXR1cm4gYnQobixmdW5jdGlvbihuLHIpe3ZhciB1LGwsYz0odT1yLGw9bixpLmV4cGFuZFNlZ21lbnRHcm91cCh0LGUsbCx1KSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtyZXR1cm4gc1tyXT10fSkpO3I9PT1zdD9vLnB1c2goYyk6YS5wdXNoKGMpfSksbC5hLmFwcGx5KG51bGwsby5jb25jYXQoYSkpLnBpcGUoT2JqZWN0KEwuYSkoKSxWKCksT2JqZWN0KGguYSkoZnVuY3Rpb24oKXtyZXR1cm4gc30pKX0obi5jaGlsZHJlbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnQ9ZnVuY3Rpb24odCxlLG4scixvLGEpe3ZhciBzPXRoaXM7cmV0dXJuIGwuYS5hcHBseSh2b2lkIDAsT2JqZWN0KGkuZCkobikpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24oaSl7cmV0dXJuIHMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUsbixpLHIsbyxhKS5waXBlKE9iamVjdChGLmEpKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBIdClyZXR1cm4gT2JqZWN0KGwuYSkobnVsbCk7dGhyb3cgdH0pKX0pLE9iamVjdChMLmEpKCksQyhmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSxPYmplY3QoRi5hKShmdW5jdGlvbih0LG4pe2lmKHQgaW5zdGFuY2VvZiBjfHwiRW1wdHlFcnJvciI9PT10Lm5hbWUpe2lmKHMubm9MZWZ0b3ZlcnNJblVybChlLHIsbykpcmV0dXJuIE9iamVjdChsLmEpKG5ldyBTdChbXSx7fSkpO3Rocm93IG5ldyBIdChlKX10aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub0xlZnRvdmVyc0luVXJsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUubGVuZ3RoJiYhdC5jaGlsZHJlbltuXX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixpLHIsbyxhKXtyZXR1cm4gJHQoaSkhPT1vP0d0KGUpOnZvaWQgMD09PWkucmVkaXJlY3RUbz90aGlzLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUsaSxyKTphJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4saSxyLG8pOkd0KGUpfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixpLHIsbyl7cmV0dXJuIioqIj09PWkucGF0aD90aGlzLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxuLGksbyk6dGhpcy5leHBhbmRSZWd1bGFyU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4saSxyLG8pfSx0LnByb3RvdHlwZS5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhbXSxuLnJlZGlyZWN0VG8se30pO3JldHVybiBuLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP1F0KG8pOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKG4sbykucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbihuKXt2YXIgbz1uZXcgU3Qobix7fSk7cmV0dXJuIHIuZXhwYW5kU2VnbWVudCh0LG8sZSxuLGksITEpfSkpfSx0LnByb3RvdHlwZS5leHBhbmRSZWd1bGFyU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4saSxyLG8pe3ZhciBhPXRoaXMscz1adChlLGksciksdT1zLmNvbnN1bWVkU2VnbWVudHMsbD1zLmxhc3RDaGlsZCxjPXMucG9zaXRpb25hbFBhcmFtU2VnbWVudHM7aWYoIXMubWF0Y2hlZClyZXR1cm4gR3QoZSk7dmFyIGg9dGhpcy5hcHBseVJlZGlyZWN0Q29tbWFuZHModSxpLnJlZGlyZWN0VG8sYyk7cmV0dXJuIGkucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/UXQoaCk6dGhpcy5saW5lcmFsaXplU2VnbWVudHMoaSxoKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGkpe3JldHVybiBhLmV4cGFuZFNlZ21lbnQodCxlLG4saS5jb25jYXQoci5zbGljZShsKSksbywhMSl9KSl9LHQucHJvdG90eXBlLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz10aGlzO2lmKCIqKiI9PT1uLnBhdGgpcmV0dXJuIG4ubG9hZENoaWxkcmVuP3RoaXMuY29uZmlnTG9hZGVyLmxvYWQodC5pbmplY3RvcixuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9sb2FkZWRDb25maWc9dCxuZXcgU3Qocix7fSl9KSk6T2JqZWN0KGwuYSkobmV3IFN0KHIse30pKTt2YXIgYT1adChlLG4scikscz1hLmNvbnN1bWVkU2VnbWVudHMsdT1hLmxhc3RDaGlsZDtpZighYS5tYXRjaGVkKXJldHVybiBHdChlKTt2YXIgYz1yLnNsaWNlKHUpO3JldHVybiB0aGlzLmdldENoaWxkQ29uZmlnKHQsbikucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbih0KXt2YXIgbj10Lm1vZHVsZSxyPXQucm91dGVzLGE9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBYdCh0LGUsbikmJiR0KG4pIT09c3R9KX0odCxuKT97c2VnbWVudEdyb3VwOkt0KG5ldyBTdChlLGZ1bmN0aW9uKHQsZSl7dmFyIG4scixvPXt9O29bc3RdPWU7dHJ5e2Zvcih2YXIgYT1PYmplY3QoaS5lKSh0KSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTsiIj09PXUucGF0aCYmJHQodSkhPT1zdCYmKG9bJHQodSldPW5ldyBTdChbXSx7fSkpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYocj1hLnJldHVybikmJnIuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG99KHIsbmV3IFN0KG4sdC5jaGlsZHJlbikpKSksc2xpY2VkU2VnbWVudHM6W119OjA9PT1uLmxlbmd0aCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFh0KHQsZSxuKX0pfSh0LG4pP3tzZWdtZW50R3JvdXA6S3QobmV3IFN0KHQuc2VnbWVudHMsZnVuY3Rpb24odCxlLG4scil7dmFyIG8sYSxzPXt9O3RyeXtmb3IodmFyIHU9T2JqZWN0KGkuZSkobiksbD11Lm5leHQoKTshbC5kb25lO2w9dS5uZXh0KCkpe3ZhciBjPWwudmFsdWU7WHQodCxlLGMpJiYhclskdChjKV0mJihzWyR0KGMpXT1uZXcgU3QoW10se30pKX19Y2F0Y2godCl7bz17ZXJyb3I6dH19ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKGE9dS5yZXR1cm4pJiZhLmNhbGwodSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBPYmplY3QoaS5hKSh7fSxyLHMpfSh0LG4scix0LmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOm59OntzZWdtZW50R3JvdXA6dCxzbGljZWRTZWdtZW50czpufX0oZSxzLGMsciksdT1hLnNlZ21lbnRHcm91cCxmPWEuc2xpY2VkU2VnbWVudHM7cmV0dXJuIDA9PT1mLmxlbmd0aCYmdS5oYXNDaGlsZHJlbigpP28uZXhwYW5kQ2hpbGRyZW4obixyLHUpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBTdChzLHQpfSkpOjA9PT1yLmxlbmd0aCYmMD09PWYubGVuZ3RoP09iamVjdChsLmEpKG5ldyBTdChzLHt9KSk6by5leHBhbmRTZWdtZW50KG4sdSxyLGYsc3QsITApLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBTdChzLmNvbmNhdCh0LnNlZ21lbnRzKSx0LmNoaWxkcmVuKX0pKX0pKX0sdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBlLmNoaWxkcmVuP09iamVjdChsLmEpKG5ldyBmdChlLmNoaWxkcmVuLHQpKTplLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1lLl9sb2FkZWRDb25maWc/T2JqZWN0KGwuYSkoZS5fbG9hZGVkQ29uZmlnKTpmdW5jdGlvbih0LGUpe3ZhciBuPWUuY2FuTG9hZDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP190KE9iamVjdCh1LmEpKG4pLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24obil7dmFyIGk9dC5nZXQobik7cmV0dXJuIHd0KGkuY2FuTG9hZD9pLmNhbkxvYWQoZSk6aShlKSl9KSkpOk9iamVjdChsLmEpKCEwKX0odC5pbmplY3RvcixlKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGkpe3JldHVybiBpP24uY29uZmlnTG9hZGVyLmxvYWQodC5pbmplY3RvcixlKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sb2FkZWRDb25maWc9dCx0fSkpOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKCgobj1FcnJvcigiTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiBDYW5ub3QgbG9hZCBjaGlsZHJlbiBiZWNhdXNlIHRoZSBndWFyZCBvZiB0aGUgcm91dGUgXCJwYXRoOiAnIit0LnBhdGgrIidcIiByZXR1cm5lZCBmYWxzZSIpKS5uZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcj0hMCxuKSk7dmFyIG59KX0oZSl9KSk6T2JqZWN0KGwuYSkobmV3IGZ0KFtdLHQpKX0sdC5wcm90b3R5cGUubGluZXJhbGl6ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLGk9ZS5yb290Ozspe2lmKG49bi5jb25jYXQoaS5zZWdtZW50cyksMD09PWkubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gT2JqZWN0KGwuYSkobik7aWYoaS5udW1iZXJPZkNoaWxkcmVuPjF8fCFpLmNoaWxkcmVuW3N0XSlyZXR1cm4gWXQodC5yZWRpcmVjdFRvKTtpPWkuY2hpbGRyZW5bc3RdfX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENvbW1hbmRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWUoZSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoZSksdCxuKX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENyZWF0cmVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKHQsZS5yb290LG4saSk7cmV0dXJuIG5ldyBDdChyLHRoaXMuY3JlYXRlUXVlcnlQYXJhbXMoZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQpfSx0LnByb3RvdHlwZS5jcmVhdGVRdWVyeVBhcmFtcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBidCh0LGZ1bmN0aW9uKHQsaSl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0LnN0YXJ0c1dpdGgoIjoiKSl7dmFyIHI9dC5zdWJzdHJpbmcoMSk7bltpXT1lW3JdfWVsc2UgbltpXT10fSksbn0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz10aGlzLmNyZWF0ZVNlZ21lbnRzKHQsZS5zZWdtZW50cyxuLGkpLGE9e307cmV0dXJuIGJ0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXthW29dPXIuY3JlYXRlU2VnbWVudEdyb3VwKHQsZSxuLGkpfSksbmV3IFN0KG8sYSl9LHQucHJvdG90eXBlLmNyZWF0ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXM7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBhdGguc3RhcnRzV2l0aCgiOiIpP3IuZmluZFBvc1BhcmFtKHQsZSxpKTpyLmZpbmRPclJldHVybihlLG4pfSl9LHQucHJvdG90eXBlLmZpbmRQb3NQYXJhbT1mdW5jdGlvbih0LGUsbil7dmFyIGk9bltlLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWRpcmVjdCB0byAnIit0KyInLiBDYW5ub3QgZmluZCAnIitlLnBhdGgrIicuIik7cmV0dXJuIGl9LHQucHJvdG90eXBlLmZpbmRPclJldHVybj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsbz0wO3RyeXtmb3IodmFyIGE9T2JqZWN0KGkuZSkoZSkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciB1PXMudmFsdWU7aWYodS5wYXRoPT09dC5wYXRoKXJldHVybiBlLnNwbGljZShvKSx1O28rK319Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKHI9YS5yZXR1cm4pJiZyLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiB0fSx0fSgpO2Z1bmN0aW9uIFp0KHQsZSxuKXtpZigiIj09PWUucGF0aClyZXR1cm4iZnVsbCI9PT1lLnBhdGhNYXRjaCYmKHQuaGFzQ2hpbGRyZW4oKXx8bi5sZW5ndGg+MCk/e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX06e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX07dmFyIGk9KGUubWF0Y2hlcnx8Y3QpKG4sdCxlKTtyZXR1cm4gaT97bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmkuY29uc3VtZWQsbGFzdENoaWxkOmkuY29uc3VtZWQubGVuZ3RoLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOmkucG9zUGFyYW1zfTp7bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX1mdW5jdGlvbiBLdCh0KXtpZigxPT09dC5udW1iZXJPZkNoaWxkcmVuJiZ0LmNoaWxkcmVuW3N0XSl7dmFyIGU9dC5jaGlsZHJlbltzdF07cmV0dXJuIG5ldyBTdCh0LnNlZ21lbnRzLmNvbmNhdChlLnNlZ21lbnRzKSxlLmNoaWxkcmVuKX1yZXR1cm4gdH1mdW5jdGlvbiBYdCh0LGUsbil7cmV0dXJuKCEodC5oYXNDaGlsZHJlbigpfHxlLmxlbmd0aD4wKXx8ImZ1bGwiIT09bi5wYXRoTWF0Y2gpJiYiIj09PW4ucGF0aCYmdm9pZCAwIT09bi5yZWRpcmVjdFRvfWZ1bmN0aW9uICR0KHQpe3JldHVybiB0Lm91dGxldHx8c3R9dmFyIEp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yb290PXR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhdGhGcm9tUm9vdCh0KTtyZXR1cm4gZS5sZW5ndGg+MT9lW2UubGVuZ3RoLTJdOm51bGx9LHQucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRlKHQsdGhpcy5fcm9vdCk7cmV0dXJuIGU/ZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KTpbXX0sdC5wcm90b3R5cGUuZmlyc3RDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10ZSh0LHRoaXMuX3Jvb3QpO3JldHVybiBlJiZlLmNoaWxkcmVuLmxlbmd0aD4wP2UuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH0sdC5wcm90b3R5cGUuc2libGluZ3M9ZnVuY3Rpb24odCl7dmFyIGU9ZWUodCx0aGlzLl9yb290KTtyZXR1cm4gZS5sZW5ndGg8Mj9bXTplW2UubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KX0sdC5wcm90b3R5cGUucGF0aEZyb21Sb290PWZ1bmN0aW9uKHQpe3JldHVybiBlZSh0LHRoaXMuX3Jvb3QpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pfSx0fSgpO2Z1bmN0aW9uIHRlKHQsZSl7dmFyIG4scjtpZih0PT09ZS52YWx1ZSlyZXR1cm4gZTt0cnl7Zm9yKHZhciBvPU9iamVjdChpLmUpKGUuY2hpbGRyZW4pLGE9by5uZXh0KCk7IWEuZG9uZTthPW8ubmV4dCgpKXt2YXIgcz10ZSh0LGEudmFsdWUpO2lmKHMpcmV0dXJuIHN9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihyPW8ucmV0dXJuKSYmci5jYWxsKG8pfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlZSh0LGUpe3ZhciBuLHI7aWYodD09PWUudmFsdWUpcmV0dXJuW2VdO3RyeXtmb3IodmFyIG89T2JqZWN0KGkuZSkoZS5jaGlsZHJlbiksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPWVlKHQsYS52YWx1ZSk7aWYocy5sZW5ndGgpcmV0dXJuIHMudW5zaGlmdChlKSxzfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYocj1vLnJldHVybikmJnIuY2FsbChvKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuW119dmFyIG5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmFsdWU9dCx0aGlzLmNoaWxkcmVuPWV9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlRyZWVOb2RlKCIrdGhpcy52YWx1ZSsiKSJ9LHR9KCk7ZnVuY3Rpb24gaWUodCl7dmFyIGU9e307cmV0dXJuIHQmJnQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0LnZhbHVlLm91dGxldF09dH0pLGV9dmFyIHJlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5zbmFwc2hvdD1uLGNlKGksZSksaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9LGV9KEp0KTtmdW5jdGlvbiBvZSh0LGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHVlKFtdLHt9LHt9LCIiLHt9LHN0LGUsbnVsbCx0LnJvb3QsLTEse30pO3JldHVybiBuZXcgbGUoIiIsbmV3IG5lKG4sW10pKX0odCxlKSxpPW5ldyBzLmEoW25ldyBFdCgiIix7fSldKSxyPW5ldyBzLmEoe30pLG89bmV3IHMuYSh7fSksYT1uZXcgcy5hKHt9KSx1PW5ldyBzLmEoIiIpLGw9bmV3IGFlKGkscixhLHUsbyxzdCxlLG4ucm9vdCk7cmV0dXJuIGwuc25hcHNob3Q9bi5yb290LG5ldyByZShuZXcgbmUobCxbXSksbil9dmFyIGFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsbyxhLHMpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1pLHRoaXMuZGF0YT1yLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLl9mdXR1cmVTbmFwc2hvdD1zfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvdXRlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtyZXR1cm4gbHQodCl9KSkpLHRoaXMuX3BhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1ZXJ5UGFyYW1zLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIGx0KHQpfSkpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3Q/dGhpcy5zbmFwc2hvdC50b1N0cmluZygpOiJGdXR1cmUoIit0aGlzLl9mdXR1cmVTbmFwc2hvdCsiKSJ9LHR9KCk7ZnVuY3Rpb24gc2UodCxlKXt2b2lkIDA9PT1lJiYoZT0iZW1wdHlPbmx5Iik7dmFyIG49dC5wYXRoRnJvbVJvb3Qscj0wO2lmKCJhbHdheXMiIT09ZSlmb3Iocj1uLmxlbmd0aC0xO3I+PTE7KXt2YXIgbz1uW3JdLGE9bltyLTFdO2lmKG8ucm91dGVDb25maWcmJiIiPT09by5yb3V0ZUNvbmZpZy5wYXRoKXItLTtlbHNle2lmKGEuY29tcG9uZW50KWJyZWFrO3ItLX19cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybntwYXJhbXM6T2JqZWN0KGkuYSkoe30sdC5wYXJhbXMsZS5wYXJhbXMpLGRhdGE6T2JqZWN0KGkuYSkoe30sdC5kYXRhLGUuZGF0YSkscmVzb2x2ZTpPYmplY3QoaS5hKSh7fSx0LnJlc29sdmUsZS5fcmVzb2x2ZWREYXRhKX19LHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KG4uc2xpY2UocikpfXZhciB1ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSxzLHUsbCxjKXt0aGlzLnVybD10LHRoaXMucGFyYW1zPWUsdGhpcy5xdWVyeVBhcmFtcz1uLHRoaXMuZnJhZ21lbnQ9aSx0aGlzLmRhdGE9cix0aGlzLm91dGxldD1vLHRoaXMuY29tcG9uZW50PWEsdGhpcy5yb3V0ZUNvbmZpZz1zLHRoaXMuX3VybFNlZ21lbnQ9dSx0aGlzLl9sYXN0UGF0aEluZGV4PWwsdGhpcy5fcmVzb2x2ZT1jfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhdGhGcm9tUm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbU1hcHx8KHRoaXMuX3BhcmFtTWFwPWx0KHRoaXMucGFyYW1zKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPWx0KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlKHVybDonIit0aGlzLnVybC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoKX0pLmpvaW4oIi8iKSsiJywgcGF0aDonIisodGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBhdGg6IiIpKyInKSJ9LHR9KCksbGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLG4pfHx0aGlzO3JldHVybiBpLnVybD1lLGNlKGksbiksaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLl9yb290KX0sZX0oSnQpO2Z1bmN0aW9uIGNlKHQsZSl7ZS52YWx1ZS5fcm91dGVyU3RhdGU9dCxlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGNlKHQsZSl9KX1mdW5jdGlvbiBmZSh0KXt2YXIgZT10LmNoaWxkcmVuLmxlbmd0aD4wPyIgeyAiK3QuY2hpbGRyZW4ubWFwKGZlKS5qb2luKCIsICIpKyIgfSAiOiIiO3JldHVybiIiK3QudmFsdWUrZX1mdW5jdGlvbiBoZSh0KXtpZih0LnNuYXBzaG90KXt2YXIgZT10LnNuYXBzaG90LG49dC5fZnV0dXJlU25hcHNob3Q7dC5zbmFwc2hvdD1uLHl0KGUucXVlcnlQYXJhbXMsbi5xdWVyeVBhcmFtcyl8fHQucXVlcnlQYXJhbXMubmV4dChuLnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50IT09bi5mcmFnbWVudCYmdC5mcmFnbWVudC5uZXh0KG4uZnJhZ21lbnQpLHl0KGUucGFyYW1zLG4ucGFyYW1zKXx8dC5wYXJhbXMubmV4dChuLnBhcmFtcyksZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKCF5dCh0W25dLGVbbl0pKXJldHVybiExO3JldHVybiEwfShlLnVybCxuLnVybCl8fHQudXJsLm5leHQobi51cmwpLHl0KGUuZGF0YSxuLmRhdGEpfHx0LmRhdGEubmV4dChuLmRhdGEpfWVsc2UgdC5zbmFwc2hvdD10Ll9mdXR1cmVTbmFwc2hvdCx0LmRhdGEubmV4dCh0Ll9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBkZSh0LGUpe3ZhciBuLGk7cmV0dXJuIHl0KHQucGFyYW1zLGUucGFyYW1zKSYmT3Qobj10LnVybCxpPWUudXJsKSYmbi5ldmVyeShmdW5jdGlvbih0LGUpe3JldHVybiB5dCh0LnBhcmFtZXRlcnMsaVtlXS5wYXJhbWV0ZXJzKX0pJiYhKCF0LnBhcmVudCE9IWUucGFyZW50KSYmKCF0LnBhcmVudHx8ZGUodC5wYXJlbnQsZS5wYXJlbnQpKX1mdW5jdGlvbiBwZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJiF0Lm91dGxldHMmJiF0LnNlZ21lbnRQYXRofWZ1bmN0aW9uIG1lKHQsZSxuLGkscil7dmFyIG89e307cmV0dXJuIGkmJmJ0KGksZnVuY3Rpb24odCxlKXtvW2VdPUFycmF5LmlzQXJyYXkodCk/dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiIrdH0pOiIiK3R9KSxuZXcgQ3Qobi5yb290PT09dD9lOmZ1bmN0aW9uIHQoZSxuLGkpe3ZhciByPXt9O3JldHVybiBidChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbyl7cltvXT1lPT09bj9pOnQoZSxuLGkpfSksbmV3IFN0KGUuc2VnbWVudHMscil9KG4ucm9vdCx0LGUpLG8scil9dmFyIHllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7aWYodGhpcy5pc0Fic29sdXRlPXQsdGhpcy5udW1iZXJPZkRvdWJsZURvdHM9ZSx0aGlzLmNvbW1hbmRzPW4sdCYmbi5sZW5ndGg+MCYmcGUoblswXSkpdGhyb3cgbmV3IEVycm9yKCJSb290IHNlZ21lbnQgY2Fubm90IGhhdmUgbWF0cml4IHBhcmFtZXRlcnMiKTt2YXIgaT1uLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHN9KTtpZihpJiZpIT09Z3QobikpdGhyb3cgbmV3IEVycm9yKCJ7b3V0bGV0czp7fX0gaGFzIHRvIGJlIHRoZSBsYXN0IGNvbW1hbmQiKX1yZXR1cm4gdC5wcm90b3R5cGUudG9Sb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19LHR9KCksdmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuc2VnbWVudEdyb3VwPXQsdGhpcy5wcm9jZXNzQ2hpbGRyZW49ZSx0aGlzLmluZGV4PW59O2Z1bmN0aW9uIGdlKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmdC5vdXRsZXRzP3Qub3V0bGV0c1tzdF06IiIrdH1mdW5jdGlvbiBiZSh0LGUsbil7aWYodHx8KHQ9bmV3IFN0KFtdLHt9KSksMD09PXQuc2VnbWVudHMubGVuZ3RoJiZ0Lmhhc0NoaWxkcmVuKCkpcmV0dXJuIF9lKHQsZSxuKTt2YXIgaT1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPTAscj1lLG89e21hdGNoOiExLHBhdGhJbmRleDowLGNvbW1hbmRJbmRleDowfTtyPHQuc2VnbWVudHMubGVuZ3RoOyl7aWYoaT49bi5sZW5ndGgpcmV0dXJuIG87dmFyIGE9dC5zZWdtZW50c1tyXSxzPWdlKG5baV0pLHU9aTxuLmxlbmd0aC0xP25baSsxXTpudWxsO2lmKHI+MCYmdm9pZCAwPT09cylicmVhaztpZihzJiZ1JiYib2JqZWN0Ij09dHlwZW9mIHUmJnZvaWQgMD09PXUub3V0bGV0cyl7aWYoIVNlKHMsdSxhKSlyZXR1cm4gbztpKz0yfWVsc2V7aWYoIVNlKHMse30sYSkpcmV0dXJuIG87aSsrfXIrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OnIsY29tbWFuZEluZGV4Oml9fSh0LGUsbikscj1uLnNsaWNlKGkuY29tbWFuZEluZGV4KTtpZihpLm1hdGNoJiZpLnBhdGhJbmRleDx0LnNlZ21lbnRzLmxlbmd0aCl7dmFyIG89bmV3IFN0KHQuc2VnbWVudHMuc2xpY2UoMCxpLnBhdGhJbmRleCkse30pO3JldHVybiBvLmNoaWxkcmVuW3N0XT1uZXcgU3QodC5zZWdtZW50cy5zbGljZShpLnBhdGhJbmRleCksdC5jaGlsZHJlbiksX2UobywwLHIpfXJldHVybiBpLm1hdGNoJiYwPT09ci5sZW5ndGg/bmV3IFN0KHQuc2VnbWVudHMse30pOmkubWF0Y2gmJiF0Lmhhc0NoaWxkcmVuKCk/d2UodCxlLG4pOmkubWF0Y2g/X2UodCwwLHIpOndlKHQsZSxuKX1mdW5jdGlvbiBfZSh0LGUsbil7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBuZXcgU3QodC5zZWdtZW50cyx7fSk7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGUsbjtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHRbMF0/KChlPXt9KVtzdF09dCxlKTp2b2lkIDA9PT10WzBdLm91dGxldHM/KChuPXt9KVtzdF09dCxuKTp0WzBdLm91dGxldHN9KG4pLHI9e307cmV0dXJuIGJ0KGksZnVuY3Rpb24obixpKXtudWxsIT09biYmKHJbaV09YmUodC5jaGlsZHJlbltpXSxlLG4pKX0pLGJ0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1pW2VdJiYocltlXT10KX0pLG5ldyBTdCh0LnNlZ21lbnRzLHIpfWZ1bmN0aW9uIHdlKHQsZSxuKXtmb3IodmFyIGk9dC5zZWdtZW50cy5zbGljZSgwLGUpLHI9MDtyPG4ubGVuZ3RoOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBuW3JdJiZ2b2lkIDAhPT1uW3JdLm91dGxldHMpe3ZhciBvPXhlKG5bcl0ub3V0bGV0cyk7cmV0dXJuIG5ldyBTdChpLG8pfWlmKDA9PT1yJiZwZShuWzBdKSlpLnB1c2gobmV3IEV0KHQuc2VnbWVudHNbZV0ucGF0aCxuWzBdKSkscisrO2Vsc2V7dmFyIGE9Z2UobltyXSkscz1yPG4ubGVuZ3RoLTE/bltyKzFdOm51bGw7YSYmcyYmcGUocyk/KGkucHVzaChuZXcgRXQoYSxDZShzKSkpLHIrPTIpOihpLnB1c2gobmV3IEV0KGEse30pKSxyKyspfX1yZXR1cm4gbmV3IFN0KGkse30pfWZ1bmN0aW9uIHhlKHQpe3ZhciBlPXt9O3JldHVybiBidCh0LGZ1bmN0aW9uKHQsbil7bnVsbCE9PXQmJihlW25dPXdlKG5ldyBTdChbXSx7fSksMCx0KSl9KSxlfWZ1bmN0aW9uIENlKHQpe3ZhciBlPXt9O3JldHVybiBidCh0LGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbbl09IiIrdH0pLGV9ZnVuY3Rpb24gU2UodCxlLG4pe3JldHVybiB0PT1uLnBhdGgmJnl0KGUsbi5wYXJhbWV0ZXJzKX12YXIgRWU9ZnVuY3Rpb24odCl7dGhpcy5wYXRoPXQsdGhpcy5yb3V0ZT10aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aC0xXX0sT2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXBvbmVudD10LHRoaXMucm91dGU9ZX0sa2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuZnV0dXJlPXQsdGhpcy5jdXJyPWUsdGhpcy5tb2R1bGVJbmplY3Rvcj1uLHRoaXMuZm9yd2FyZEV2ZW50PWksdGhpcy5jYW5BY3RpdmF0ZUNoZWNrcz1bXSx0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3M9W119cmV0dXJuIHQucHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mdXR1cmUuX3Jvb3Q7dGhpcy5zZXR1cENoaWxkUm91dGVHdWFyZHMoZSx0aGlzLmN1cnI/dGhpcy5jdXJyLl9yb290Om51bGwsdCxbZS52YWx1ZV0pfSx0LnByb3RvdHlwZS5jaGVja0d1YXJkcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaXNEZWFjdGl2YXRpbmcoKXx8dGhpcy5pc0FjdGl2YXRpbmcoKT90aGlzLnJ1bkNhbkRlYWN0aXZhdGVDaGVja3MoKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QucnVuQ2FuQWN0aXZhdGVDaGVja3MoKTpPYmplY3QobC5hKSghMSl9KSk6T2JqZWN0KGwuYSkoITApfSx0LnByb3RvdHlwZS5yZXNvbHZlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmlzQWN0aXZhdGluZygpP09iamVjdCh1LmEpKHRoaXMuY2FuQWN0aXZhdGVDaGVja3MpLnBpcGUoT2JqZWN0KGsuYSkoZnVuY3Rpb24obil7cmV0dXJuIGUucnVuUmVzb2x2ZShuLnJvdXRlLHQpfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49Mj9mdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0KE4uYSkoVCh0LGUpLE0oMSkseShlKSkobil9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoTi5hKShUKGZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdChlLG4saSsxKX0pLE0oMSkpKGUpfX0oZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0pKTpPYmplY3QobC5hKShudWxsKX0sdC5wcm90b3R5cGUuaXNEZWFjdGl2YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5sZW5ndGh9LHQucHJvdG90eXBlLmlzQWN0aXZhdGluZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGh9LHQucHJvdG90eXBlLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcz1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLG89aWUoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Iuc2V0dXBSb3V0ZUd1YXJkcyh0LG9bdC52YWx1ZS5vdXRsZXRdLG4saS5jb25jYXQoW3QudmFsdWVdKSksZGVsZXRlIG9bdC52YWx1ZS5vdXRsZXRdfSksYnQobyxmdW5jdGlvbih0LGUpe3JldHVybiByLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbi5nZXRDb250ZXh0KGUpKX0pfSx0LnByb3RvdHlwZS5zZXR1cFJvdXRlR3VhcmRzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXQudmFsdWUsbz1lP2UudmFsdWU6bnVsbCxhPW4/bi5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTpudWxsO2lmKG8mJnIucm91dGVDb25maWc9PT1vLnJvdXRlQ29uZmlnKXt2YXIgcz10aGlzLnNob3VsZFJ1bkd1YXJkc0FuZFJlc29sdmVycyhvLHIsci5yb3V0ZUNvbmZpZy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMpO3M/dGhpcy5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBFZShpKSk6KHIuZGF0YT1vLmRhdGEsci5fcmVzb2x2ZWREYXRhPW8uX3Jlc29sdmVkRGF0YSksdGhpcy5zZXR1cENoaWxkUm91dGVHdWFyZHModCxlLHIuY29tcG9uZW50P2E/YS5jaGlsZHJlbjpudWxsOm4saSkscyYmdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IE9lKGEub3V0bGV0LmNvbXBvbmVudCxvKSl9ZWxzZSBvJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGUsYSksdGhpcy5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBFZShpKSksdGhpcy5zZXR1cENoaWxkUm91dGVHdWFyZHModCxudWxsLHIuY29tcG9uZW50P2E/YS5jaGlsZHJlbjpudWxsOm4saSl9LHQucHJvdG90eXBlLnNob3VsZFJ1bkd1YXJkc0FuZFJlc29sdmVycz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG4pe2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFkZSh0LGUpfHwheXQodC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKTtjYXNlInBhcmFtc0NoYW5nZSI6ZGVmYXVsdDpyZXR1cm4hZGUodCxlKX19LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWllKHQpLHI9dC52YWx1ZTtidChpLGZ1bmN0aW9uKHQsaSl7bi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LHIuY29tcG9uZW50P2U/ZS5jaGlsZHJlbi5nZXRDb250ZXh0KGkpOm51bGw6ZSl9KSx0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgT2Uoci5jb21wb25lbnQmJmUmJmUub3V0bGV0JiZlLm91dGxldC5pc0FjdGl2YXRlZD9lLm91dGxldC5jb21wb25lbnQ6bnVsbCxyKSl9LHQucHJvdG90eXBlLnJ1bkNhbkRlYWN0aXZhdGVDaGVja3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBPYmplY3QodS5hKSh0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQucnVuQ2FuRGVhY3RpdmF0ZShlLmNvbXBvbmVudCxlLnJvdXRlKX0pLFMoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5ydW5DYW5BY3RpdmF0ZUNoZWNrcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIE9iamVjdCh1LmEpKHRoaXMuY2FuQWN0aXZhdGVDaGVja3MpLnBpcGUoT2JqZWN0KGsuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIF90KE9iamVjdCh1LmEpKFt0LmZpcmVDaGlsZEFjdGl2YXRpb25TdGFydChlLnJvdXRlLnBhcmVudCksdC5maXJlQWN0aXZhdGlvblN0YXJ0KGUucm91dGUpLHQucnVuQ2FuQWN0aXZhdGVDaGlsZChlLnBhdGgpLHQucnVuQ2FuQWN0aXZhdGUoZS5yb3V0ZSldKSl9KSxTKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKX0sdC5wcm90b3R5cGUuZmlyZUFjdGl2YXRpb25TdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQmJnRoaXMuZm9yd2FyZEV2ZW50JiZ0aGlzLmZvcndhcmRFdmVudChuZXcgaXQodCkpLE9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUuZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBldCh0KSksT2JqZWN0KGwuYSkoITApfSx0LnByb3RvdHlwZS5ydW5DYW5BY3RpdmF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5yb3V0ZUNvbmZpZz90LnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlOm51bGw7cmV0dXJuIG4mJjAhPT1uLmxlbmd0aD9fdChPYmplY3QodS5hKShuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG4pe3ZhciBpPWUuZ2V0VG9rZW4obix0KTtyZXR1cm4gd3QoaS5jYW5BY3RpdmF0ZT9pLmNhbkFjdGl2YXRlKHQsZS5mdXR1cmUpOmkodCxlLmZ1dHVyZSkpLnBpcGUoQygpKX0pKSk6T2JqZWN0KGwuYSkoITApfSx0LnByb3RvdHlwZS5ydW5DYW5BY3RpdmF0ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10W3QubGVuZ3RoLTFdLGk9dC5zbGljZSgwLHQubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuZXh0cmFjdENhbkFjdGl2YXRlQ2hpbGQodCl9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10fSk7cmV0dXJuIF90KE9iamVjdCh1LmEpKGkpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIF90KE9iamVjdCh1LmEpKHQuZ3VhcmRzKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKGkpe3ZhciByPWUuZ2V0VG9rZW4oaSx0Lm5vZGUpO3JldHVybiB3dChyLmNhbkFjdGl2YXRlQ2hpbGQ/ci5jYW5BY3RpdmF0ZUNoaWxkKG4sZS5mdXR1cmUpOnIobixlLmZ1dHVyZSkpLnBpcGUoQygpKX0pKSl9KSkpfSx0LnByb3RvdHlwZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZDpudWxsO3JldHVybiBlJiYwIT09ZS5sZW5ndGg/e25vZGU6dCxndWFyZHM6ZX06bnVsbH0sdC5wcm90b3R5cGUucnVuQ2FuRGVhY3RpdmF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lJiZlLnJvdXRlQ29uZmlnP2Uucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBpJiYwIT09aS5sZW5ndGg/T2JqZWN0KHUuYSkoaSkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbihpKXt2YXIgcj1uLmdldFRva2VuKGksZSk7cmV0dXJuIHd0KHIuY2FuRGVhY3RpdmF0ZT9yLmNhbkRlYWN0aXZhdGUodCxlLG4uY3VycixuLmZ1dHVyZSk6cih0LGUsbi5jdXJyLG4uZnV0dXJlKSkucGlwZShDKCkpfSkpLnBpcGUoUyhmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSk6T2JqZWN0KGwuYSkoITApfSx0LnByb3RvdHlwZS5ydW5SZXNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVzb2x2ZU5vZGUodC5fcmVzb2x2ZSx0KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB0Ll9yZXNvbHZlZERhdGE9bix0LmRhdGE9T2JqZWN0KGkuYSkoe30sdC5kYXRhLHNlKHQsZSkucmVzb2x2ZSksbnVsbH0pKX0sdC5wcm90b3R5cGUucmVzb2x2ZU5vZGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9T2JqZWN0LmtleXModCk7aWYoMD09PWkubGVuZ3RoKXJldHVybiBPYmplY3QobC5hKSh7fSk7aWYoMT09PWkubGVuZ3RoKXt2YXIgcj1pWzBdO3JldHVybiB0aGlzLmdldFJlc29sdmVyKHRbcl0sZSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4oZT17fSlbcl09dCxlfSkpfXZhciBvPXt9O3JldHVybiBPYmplY3QodS5hKShpKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGkpe3JldHVybiBuLmdldFJlc29sdmVyKHRbaV0sZSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtyZXR1cm4gb1tpXT10LHR9KSl9KSkucGlwZShWKCksT2JqZWN0KGguYSkoZnVuY3Rpb24oKXtyZXR1cm4gb30pKX0sdC5wcm90b3R5cGUuZ2V0UmVzb2x2ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldFRva2VuKHQsZSk7cmV0dXJuIHd0KG4ucmVzb2x2ZT9uLnJlc29sdmUoZSx0aGlzLmZ1dHVyZSk6bihlLHRoaXMuZnV0dXJlKSl9LHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZ31yZXR1cm4gbnVsbH0oZSk7cmV0dXJuKG4/bi5tb2R1bGUuaW5qZWN0b3I6dGhpcy5tb2R1bGVJbmplY3RvcikuZ2V0KHQpfSx0fSgpLFRlPWZ1bmN0aW9uKCl7fSxqZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8pe3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLmNvbmZpZz1lLHRoaXMudXJsVHJlZT1uLHRoaXMudXJsPWksdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXIsdGhpcy5yZWxhdGl2ZUxpbmtSZXNvbHV0aW9uPW99cmV0dXJuIHQucHJvdG90eXBlLnJlY29nbml6ZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1SZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZyx0aGlzLnJlbGF0aXZlTGlua1Jlc29sdXRpb24pLnNlZ21lbnRHcm91cCxlPXRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0aGlzLmNvbmZpZyx0LHN0KSxuPW5ldyB1ZShbXSxPYmplY3QuZnJlZXplKHt9KSxPYmplY3QuZnJlZXplKE9iamVjdChpLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCx7fSxzdCx0aGlzLnJvb3RDb21wb25lbnRUeXBlLG51bGwsdGhpcy51cmxUcmVlLnJvb3QsLTEse30pLHI9bmV3IG5lKG4sZSksYT1uZXcgbGUodGhpcy51cmwscik7cmV0dXJuIHRoaXMuaW5oZXJpdFBhcmFtc0FuZERhdGEoYS5fcm9vdCksT2JqZWN0KGwuYSkoYSl9Y2F0Y2godCl7cmV0dXJuIG5ldyBvLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KX19LHQucHJvdG90eXBlLmluaGVyaXRQYXJhbXNBbmREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnZhbHVlLGk9c2Uobix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpO24ucGFyYW1zPU9iamVjdC5mcmVlemUoaS5wYXJhbXMpLG4uZGF0YT1PYmplY3QuZnJlZXplKGkuZGF0YSksdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluaGVyaXRQYXJhbXNBbmREYXRhKHQpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5zZWdtZW50cy5sZW5ndGgmJmUuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbih0LGUpOnRoaXMucHJvY2Vzc1NlZ21lbnQodCxlLGUuc2VnbWVudHMsbil9LHQucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcyxyPWt0KGUsZnVuY3Rpb24oZSxuKXtyZXR1cm4gaS5wcm9jZXNzU2VnbWVudEdyb3VwKHQsZSxuKX0pO3JldHVybiBuPXt9LHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uW3QudmFsdWUub3V0bGV0XTtpZihlKXt2YXIgaT1lLnVybC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoKX0pLmpvaW4oIi8iKSxyPXQudmFsdWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpO3Rocm93IG5ldyBFcnJvcigiVHdvIHNlZ21lbnRzIGNhbm5vdCBoYXZlIHRoZSBzYW1lIG91dGxldCBuYW1lOiAnIitpKyInIGFuZCAnIityKyInLiIpfW5bdC52YWx1ZS5vdXRsZXRdPXQudmFsdWV9KSxyLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC52YWx1ZS5vdXRsZXQ9PT1zdD8tMTplLnZhbHVlLm91dGxldD09PXN0PzE6dC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShlLnZhbHVlLm91dGxldCl9KSxyfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudD1mdW5jdGlvbih0LGUsbixyKXt2YXIgbyxhO3RyeXtmb3IodmFyIHM9T2JqZWN0KGkuZSkodCksdT1zLm5leHQoKTshdS5kb25lO3U9cy5uZXh0KCkpe3ZhciBsPXUudmFsdWU7dHJ5e3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKGwsZSxuLHIpfWNhdGNoKHQpe2lmKCEodCBpbnN0YW5jZW9mIFRlKSl0aHJvdyB0fX19Y2F0Y2godCl7bz17ZXJyb3I6dH19ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKGE9cy5yZXR1cm4pJiZhLmNhbGwocyl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fWlmKHRoaXMubm9MZWZ0b3ZlcnNJblVybChlLG4scikpcmV0dXJuW107dGhyb3cgbmV3IFRlfSx0LnByb3RvdHlwZS5ub0xlZnRvdmVyc0luVXJsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUubGVuZ3RoJiYhdC5jaGlsZHJlbltuXX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGU9ZnVuY3Rpb24odCxlLG4scil7aWYodC5yZWRpcmVjdFRvKXRocm93IG5ldyBUZTtpZigodC5vdXRsZXR8fHN0KSE9PXIpdGhyb3cgbmV3IFRlO3ZhciBvLGE9W10scz1bXTtpZigiKioiPT09dC5wYXRoKXt2YXIgdT1uLmxlbmd0aD4wP2d0KG4pLnBhcmFtZXRlcnM6e307bz1uZXcgdWUobix1LE9iamVjdC5mcmVlemUoT2JqZWN0KGkuYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LERlKHQpLHIsdC5jb21wb25lbnQsdCxBZShlKSxJZShlKStuLmxlbmd0aCxOZSh0KSl9ZWxzZXt2YXIgbD1mdW5jdGlvbih0LGUsbil7aWYoIiI9PT1lLnBhdGgpe2lmKCJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKSl0aHJvdyBuZXcgVGU7cmV0dXJue2NvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscGFyYW1ldGVyczp7fX19dmFyIHI9KGUubWF0Y2hlcnx8Y3QpKG4sdCxlKTtpZighcil0aHJvdyBuZXcgVGU7dmFyIG89e307YnQoci5wb3NQYXJhbXMsZnVuY3Rpb24odCxlKXtvW2VdPXQucGF0aH0pO3ZhciBhPXIuY29uc3VtZWQubGVuZ3RoPjA/T2JqZWN0KGkuYSkoe30sbyxyLmNvbnN1bWVkW3IuY29uc3VtZWQubGVuZ3RoLTFdLnBhcmFtZXRlcnMpOm87cmV0dXJue2NvbnN1bWVkU2VnbWVudHM6ci5jb25zdW1lZCxsYXN0Q2hpbGQ6ci5jb25zdW1lZC5sZW5ndGgscGFyYW1ldGVyczphfX0oZSx0LG4pO2E9bC5jb25zdW1lZFNlZ21lbnRzLHM9bi5zbGljZShsLmxhc3RDaGlsZCksbz1uZXcgdWUoYSxsLnBhcmFtZXRlcnMsT2JqZWN0LmZyZWV6ZShPYmplY3QoaS5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsRGUodCkscix0LmNvbXBvbmVudCx0LEFlKGUpLEllKGUpK2EubGVuZ3RoLE5lKHQpKX12YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGlsZHJlbj90LmNoaWxkcmVuOnQubG9hZENoaWxkcmVuP3QuX2xvYWRlZENvbmZpZy5yb3V0ZXM6W119KHQpLGY9UmUoZSxhLHMsYyx0aGlzLnJlbGF0aXZlTGlua1Jlc29sdXRpb24pLGg9Zi5zZWdtZW50R3JvdXAsZD1mLnNsaWNlZFNlZ21lbnRzO2lmKDA9PT1kLmxlbmd0aCYmaC5oYXNDaGlsZHJlbigpKXt2YXIgcD10aGlzLnByb2Nlc3NDaGlsZHJlbihjLGgpO3JldHVybltuZXcgbmUobyxwKV19aWYoMD09PWMubGVuZ3RoJiYwPT09ZC5sZW5ndGgpcmV0dXJuW25ldyBuZShvLFtdKV07dmFyIG09dGhpcy5wcm9jZXNzU2VnbWVudChjLGgsZCxzdCk7cmV0dXJuW25ldyBuZShvLG0pXX0sdH0oKTtmdW5jdGlvbiBBZSh0KXtmb3IodmFyIGU9dDtlLl9zb3VyY2VTZWdtZW50OyllPWUuX3NvdXJjZVNlZ21lbnQ7cmV0dXJuIGV9ZnVuY3Rpb24gSWUodCl7Zm9yKHZhciBlPXQsbj1lLl9zZWdtZW50SW5kZXhTaGlmdD9lLl9zZWdtZW50SW5kZXhTaGlmdDowO2UuX3NvdXJjZVNlZ21lbnQ7KW4rPShlPWUuX3NvdXJjZVNlZ21lbnQpLl9zZWdtZW50SW5kZXhTaGlmdD9lLl9zZWdtZW50SW5kZXhTaGlmdDowO3JldHVybiBuLTF9ZnVuY3Rpb24gUmUodCxlLG4scixvKXtpZihuLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gTWUodCxlLG4pJiZQZShuKSE9PXN0fSl9KHQsbikpe3ZhciBhPW5ldyBTdChlLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvLGEscz17fTtzW3N0XT1yLHIuX3NvdXJjZVNlZ21lbnQ9dCxyLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aDt0cnl7Zm9yKHZhciB1PU9iamVjdChpLmUpKG4pLGw9dS5uZXh0KCk7IWwuZG9uZTtsPXUubmV4dCgpKXt2YXIgYz1sLnZhbHVlO2lmKCIiPT09Yy5wYXRoJiZQZShjKSE9PXN0KXt2YXIgZj1uZXcgU3QoW10se30pO2YuX3NvdXJjZVNlZ21lbnQ9dCxmLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCxzW1BlKGMpXT1mfX19Y2F0Y2godCl7bz17ZXJyb3I6dH19ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKGE9dS5yZXR1cm4pJiZhLmNhbGwodSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBzfSh0LGUscixuZXcgU3Qobix0LmNoaWxkcmVuKSkpO3JldHVybiBhLl9zb3VyY2VTZWdtZW50PXQsYS5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDphLHNsaWNlZFNlZ21lbnRzOltdfX1pZigwPT09bi5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBNZSh0LGUsbil9KX0odCxuKSl7dmFyIHM9bmV3IFN0KHQuc2VnbWVudHMsZnVuY3Rpb24odCxlLG4scixvLGEpe3ZhciBzLHUsbD17fTt0cnl7Zm9yKHZhciBjPU9iamVjdChpLmUpKHIpLGY9Yy5uZXh0KCk7IWYuZG9uZTtmPWMubmV4dCgpKXt2YXIgaD1mLnZhbHVlO2lmKE1lKHQsbixoKSYmIW9bUGUoaCldKXt2YXIgZD1uZXcgU3QoW10se30pO2QuX3NvdXJjZVNlZ21lbnQ9dCxkLl9zZWdtZW50SW5kZXhTaGlmdD0ibGVnYWN5Ij09PWE/dC5zZWdtZW50cy5sZW5ndGg6ZS5sZW5ndGgsbFtQZShoKV09ZH19fWNhdGNoKHQpe3M9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2YmJiFmLmRvbmUmJih1PWMucmV0dXJuKSYmdS5jYWxsKGMpfWZpbmFsbHl7aWYocyl0aHJvdyBzLmVycm9yfX1yZXR1cm4gT2JqZWN0KGkuYSkoe30sbyxsKX0odCxlLG4scix0LmNoaWxkcmVuLG8pKTtyZXR1cm4gcy5fc291cmNlU2VnbWVudD10LHMuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHtzZWdtZW50R3JvdXA6cyxzbGljZWRTZWdtZW50czpufX12YXIgdT1uZXcgU3QodC5zZWdtZW50cyx0LmNoaWxkcmVuKTtyZXR1cm4gdS5fc291cmNlU2VnbWVudD10LHUuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHtzZWdtZW50R3JvdXA6dSxzbGljZWRTZWdtZW50czpufX1mdW5jdGlvbiBNZSh0LGUsbil7cmV0dXJuKCEodC5oYXNDaGlsZHJlbigpfHxlLmxlbmd0aD4wKXx8ImZ1bGwiIT09bi5wYXRoTWF0Y2gpJiYiIj09PW4ucGF0aCYmdm9pZCAwPT09bi5yZWRpcmVjdFRvfWZ1bmN0aW9uIFBlKHQpe3JldHVybiB0Lm91dGxldHx8c3R9ZnVuY3Rpb24gRGUodCl7cmV0dXJuIHQuZGF0YXx8e319ZnVuY3Rpb24gTmUodCl7cmV0dXJuIHQucmVzb2x2ZXx8e319dmFyIEZlPWZ1bmN0aW9uKCl7fSxMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZERldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4hMX0sdC5wcm90b3R5cGUuc3RvcmU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnNob3VsZEF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4hMX0sdC5wcm90b3R5cGUucmV0cmlldmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLnNob3VsZFJldXNlUm91dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yb3V0ZUNvbmZpZz09PWUucm91dGVDb25maWd9LHR9KCksVmU9bmV3IHIucSgiUk9VVEVTIiksemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMubG9hZGVyPXQsdGhpcy5jb21waWxlcj1lLHRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcj1uLHRoaXMub25Mb2FkRW5kTGlzdGVuZXI9aX1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGUpLHRoaXMubG9hZE1vZHVsZUZhY3RvcnkoZS5sb2FkQ2hpbGRyZW4pLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24oaSl7bi5vbkxvYWRFbmRMaXN0ZW5lciYmbi5vbkxvYWRFbmRMaXN0ZW5lcihlKTt2YXIgcj1pLmNyZWF0ZSh0KTtyZXR1cm4gbmV3IGZ0KHZ0KHIuaW5qZWN0b3IuZ2V0KFZlKSkubWFwKG10KSxyKX0pKX0sdC5wcm90b3R5cGUubG9hZE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/T2JqZWN0KHUuYSkodGhpcy5sb2FkZXIubG9hZCh0KSk6d3QodCgpKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygci52P09iamVjdChsLmEpKHQpOk9iamVjdCh1LmEpKGUuY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpKX0pKX0sdH0oKSxCZT1mdW5jdGlvbigpe30sVWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zaG91bGRQcm9jZXNzVXJsPWZ1bmN0aW9uKHQpe3JldHVybiEwfSx0LnByb3RvdHlwZS5leHRyYWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0LGUpe3JldHVybiB0fSx0fSgpO2Z1bmN0aW9uIEhlKHQpe3Rocm93IHR9ZnVuY3Rpb24gcWUodCxlLG4pe3JldHVybiBlLnBhcnNlKCIvIil9ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4gT2JqZWN0KGwuYSkobnVsbCl9dmFyIFFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLG8sdSxsLGMpe3ZhciBmPXRoaXM7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMudXJsU2VyaWFsaXplcj1lLHRoaXMucm9vdENvbnRleHRzPW4sdGhpcy5sb2NhdGlvbj1pLHRoaXMuY29uZmlnPWMsdGhpcy5uYXZpZ2F0aW9ucz1uZXcgcy5hKG51bGwpLHRoaXMubmF2aWdhdGlvbklkPTAsdGhpcy5ldmVudHM9bmV3IGEuYSx0aGlzLmVycm9ySGFuZGxlcj1IZSx0aGlzLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcj1xZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy5ob29rcz17YmVmb3JlUHJlYWN0aXZhdGlvbjpHZSxhZnRlclByZWFjdGl2YXRpb246R2V9LHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1uZXcgVWUsdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9bmV3IExlLHRoaXMub25TYW1lVXJsTmF2aWdhdGlvbj0iaWdub3JlIix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9ImVtcHR5T25seSIsdGhpcy51cmxVcGRhdGVTdHJhdGVneT0iZGVmZXJyZWQiLHRoaXMucmVsYXRpdmVMaW5rUmVzb2x1dGlvbj0ibGVnYWN5Iix0aGlzLm5nTW9kdWxlPW8uZ2V0KHIueCksdGhpcy5yZXNldENvbmZpZyhjKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyBDdChuZXcgU3QoW10se30pLHt9LG51bGwpLHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMuY29uZmlnTG9hZGVyPW5ldyB6ZSh1LGwsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KG5ldyBKKHQpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KG5ldyB0dCh0KSl9KSx0aGlzLnJvdXRlclN0YXRlPW9lKHRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb290Q29tcG9uZW50VHlwZSksdGhpcy5wcm9jZXNzTmF2aWdhdGlvbnMoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXRSb290Q29tcG9uZW50VHlwZT1mdW5jdGlvbih0KXt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD10aGlzLnJvb3RDb21wb25lbnRUeXBlfSx0LnByb3RvdHlwZS5pbml0aWFsTmF2aWdhdGlvbj1mdW5jdGlvbigpe3RoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksMD09PXRoaXMubmF2aWdhdGlvbklkJiZ0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSx7cmVwbGFjZVVybDohMH0pfSx0LnByb3RvdHlwZS5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3ZhciBuPXQucGFyc2VVcmwoZS51cmwpLGk9InBvcHN0YXRlIj09PWUudHlwZT8icG9wc3RhdGUiOiJoYXNoY2hhbmdlIixyPWUuc3RhdGUmJmUuc3RhdGUubmF2aWdhdGlvbklkP3tuYXZpZ2F0aW9uSWQ6ZS5zdGF0ZS5uYXZpZ2F0aW9uSWR9Om51bGw7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2NoZWR1bGVOYXZpZ2F0aW9uKG4saSxyLHtyZXBsYWNlVXJsOiEwfSl9LDApfSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVybCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVVybCh0aGlzLmN1cnJlbnRVcmxUcmVlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50cmlnZ2VyRXZlbnQ9ZnVuY3Rpb24odCl7dGhpcy5ldmVudHMubmV4dCh0KX0sdC5wcm90b3R5cGUucmVzZXRDb25maWc9ZnVuY3Rpb24odCl7aHQodCksdGhpcy5jb25maWc9dC5tYXAobXQpLHRoaXMubmF2aWdhdGVkPSExLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRpc3Bvc2UoKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj1udWxsKX0sdC5wcm90b3R5cGUuY3JlYXRlVXJsVHJlZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj1lLnJlbGF0aXZlVG8sbz1lLnF1ZXJ5UGFyYW1zLGE9ZS5mcmFnbWVudCxzPWUucHJlc2VydmVRdWVyeVBhcmFtcyx1PWUucXVlcnlQYXJhbXNIYW5kbGluZyxsPWUucHJlc2VydmVGcmFnbWVudDtPYmplY3Qoci5aKSgpJiZzJiZjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigicHJlc2VydmVRdWVyeVBhcmFtcyBpcyBkZXByZWNhdGVkLCB1c2UgcXVlcnlQYXJhbXNIYW5kbGluZyBpbnN0ZWFkLiIpO3ZhciBjPW58fHRoaXMucm91dGVyU3RhdGUucm9vdCxmPWw/dGhpcy5jdXJyZW50VXJsVHJlZS5mcmFnbWVudDphLGg9bnVsbDtpZih1KXN3aXRjaCh1KXtjYXNlIm1lcmdlIjpoPU9iamVjdChpLmEpKHt9LHRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsbyk7YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6aD10aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zO2JyZWFrO2RlZmF1bHQ6aD1vfHxudWxsfWVsc2UgaD1zP3RoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXM6b3x8bnVsbDtyZXR1cm4gbnVsbCE9PWgmJihoPXRoaXMucmVtb3ZlRW1wdHlQcm9wcyhoKSksZnVuY3Rpb24odCxlLG4scixvKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG1lKGUucm9vdCxlLnJvb3QsZSxyLG8pO3ZhciBhPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdFswXSYmMT09PXQubGVuZ3RoJiYiLyI9PT10WzBdKXJldHVybiBuZXcgeWUoITAsMCx0KTt2YXIgZT0wLG49ITEscj10LnJlZHVjZShmdW5jdGlvbih0LHIsbyl7aWYoIm9iamVjdCI9PXR5cGVvZiByJiZudWxsIT1yKXtpZihyLm91dGxldHMpe3ZhciBhPXt9O3JldHVybiBidChyLm91dGxldHMsZnVuY3Rpb24odCxlKXthW2VdPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KCIvIik6dH0pLE9iamVjdChpLmQpKHQsW3tvdXRsZXRzOmF9XSl9aWYoci5zZWdtZW50UGF0aClyZXR1cm4gT2JqZWN0KGkuZCkodCxbci5zZWdtZW50UGF0aF0pfXJldHVybiJzdHJpbmciIT10eXBlb2Ygcj9PYmplY3QoaS5kKSh0LFtyXSk6MD09PW8/KHIuc3BsaXQoIi8iKS5mb3JFYWNoKGZ1bmN0aW9uKGkscil7MD09ciYmIi4iPT09aXx8KDA9PXImJiIiPT09aT9uPSEwOiIuLiI9PT1pP2UrKzoiIiE9aSYmdC5wdXNoKGkpKX0pLHQpOk9iamVjdChpLmQpKHQsW3JdKX0sW10pO3JldHVybiBuZXcgeWUobixlLHIpfShuKTtpZihhLnRvUm9vdCgpKXJldHVybiBtZShlLnJvb3QsbmV3IFN0KFtdLHt9KSxlLHIsbyk7dmFyIHM9ZnVuY3Rpb24odCxuLGkpe2lmKHQuaXNBYnNvbHV0ZSlyZXR1cm4gbmV3IHZlKGUucm9vdCwhMCwwKTtpZigtMT09PWkuc25hcHNob3QuX2xhc3RQYXRoSW5kZXgpcmV0dXJuIG5ldyB2ZShpLnNuYXBzaG90Ll91cmxTZWdtZW50LCEwLDApO3ZhciByPXBlKHQuY29tbWFuZHNbMF0pPzA6MTtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe2Zvcih2YXIgYT1pLnNuYXBzaG90Ll91cmxTZWdtZW50LHM9aS5zbmFwc2hvdC5fbGFzdFBhdGhJbmRleCtyLHU9dC5udW1iZXJPZkRvdWJsZURvdHM7dT5zOyl7aWYodS09cywhKGE9YS5wYXJlbnQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBudW1iZXIgb2YgJy4uLyciKTtzPWEuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgdmUoYSwhMSxzLXUpfSgpfShhLDAsdCksdT1zLnByb2Nlc3NDaGlsZHJlbj9fZShzLnNlZ21lbnRHcm91cCxzLmluZGV4LGEuY29tbWFuZHMpOmJlKHMuc2VnbWVudEdyb3VwLHMuaW5kZXgsYS5jb21tYW5kcyk7cmV0dXJuIG1lKHMuc2VnbWVudEdyb3VwLHUsZSxyLG8pfShjLHRoaXMuY3VycmVudFVybFRyZWUsdCxoLGYpfSx0LnByb3RvdHlwZS5uYXZpZ2F0ZUJ5VXJsPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pO3ZhciBuPXQgaW5zdGFuY2VvZiBDdD90OnRoaXMucGFyc2VVcmwodCksaT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2Uobix0aGlzLnJhd1VybFRyZWUpO3JldHVybiB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihpLCJpbXBlcmF0aXZlIixudWxsLGUpfSx0LnByb3RvdHlwZS5uYXZpZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07aWYobnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIlRoZSByZXF1ZXN0ZWQgcGF0aCBjb250YWlucyAiK24rIiBzZWdtZW50IGF0IGluZGV4ICIrZSl9fSh0KSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKHQsZSksZSl9LHQucHJvdG90eXBlLnNlcmlhbGl6ZVVybD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0KX0sdC5wcm90b3R5cGUucGFyc2VVcmw9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHQpfWNhdGNoKG4pe2U9dGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIobix0aGlzLnVybFNlcmlhbGl6ZXIsdCl9cmV0dXJuIGV9LHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQsZSl7aWYodCBpbnN0YW5jZW9mIEN0KXJldHVybiB4dCh0aGlzLmN1cnJlbnRVcmxUcmVlLHQsZSk7dmFyIG49dGhpcy5wYXJzZVVybCh0KTtyZXR1cm4geHQodGhpcy5jdXJyZW50VXJsVHJlZSxuLGUpfSx0LnByb3RvdHlwZS5yZW1vdmVFbXB0eVByb3BzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgaT10W25dO3JldHVybiBudWxsIT09aSYmdm9pZCAwIT09aSYmKGVbbl09aSksZX0se30pfSx0LnByb3RvdHlwZS5wcm9jZXNzTmF2aWdhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubmF2aWdhdGlvbnMucGlwZShPYmplY3Qoay5hKShmdW5jdGlvbihlKXtyZXR1cm4gZT8odC5leGVjdXRlU2NoZWR1bGVkTmF2aWdhdGlvbihlKSxlLnByb21pc2UuY2F0Y2goZnVuY3Rpb24oKXt9KSk6T2JqZWN0KGwuYSkobnVsbCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTmF2aWdhdGlvbj1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLm5hdmlnYXRpb25zLnZhbHVlO2lmKHImJiJpbXBlcmF0aXZlIiE9PWUmJiJpbXBlcmF0aXZlIj09PXIuc291cmNlJiZyLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKHImJiJoYXNoY2hhbmdlIj09ZSYmInBvcHN0YXRlIj09PXIuc291cmNlJiZyLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKHImJiJwb3BzdGF0ZSI9PWUmJiJoYXNoY2hhbmdlIj09PXIuc291cmNlJiZyLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO3ZhciBvPW51bGwsYT1udWxsLHM9bmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtvPXQsYT1lfSksdT0rK3RoaXMubmF2aWdhdGlvbklkO3JldHVybiB0aGlzLm5hdmlnYXRpb25zLm5leHQoe2lkOnUsc291cmNlOmUsc3RhdGU6bixyYXdVcmw6dCxleHRyYXM6aSxyZXNvbHZlOm8scmVqZWN0OmEscHJvbWlzZTpzfSkscy5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KX0sdC5wcm90b3R5cGUuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQuaWQsaT10LnJhd1VybCxyPXQuZXh0cmFzLG89dC5yZXNvbHZlLGE9dC5yZWplY3Qscz10LnNvdXJjZSx1PXQuc3RhdGUsbD10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChpKSxjPSF0aGlzLm5hdmlnYXRlZHx8bC50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpOygicmVsb2FkIj09PXRoaXMub25TYW1lVXJsTmF2aWdhdGlvbnx8YykmJnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGkpPygiZWFnZXIiIT09dGhpcy51cmxVcGRhdGVTdHJhdGVneXx8ci5za2lwTG9jYXRpb25DaGFuZ2V8fHRoaXMuc2V0QnJvd3NlclVybChpLCEhci5yZXBsYWNlVXJsLG4pLHRoaXMuZXZlbnRzLm5leHQobmV3IHEobix0aGlzLnNlcmlhbGl6ZVVybChsKSxzLHUpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJ1bk5hdmlnYXRlKGwsaSwhIXIuc2tpcExvY2F0aW9uQ2hhbmdlLCEhci5yZXBsYWNlVXJsLG4sbnVsbCl9KS50aGVuKG8sYSkpOmMmJnRoaXMucmF3VXJsVHJlZSYmdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwodGhpcy5yYXdVcmxUcmVlKT8odGhpcy5ldmVudHMubmV4dChuZXcgcShuLHRoaXMuc2VyaWFsaXplVXJsKGwpLHMsdSkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUobCxpLCExLCExLG4sb2UobCxlLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdCl9KS50aGVuKG8sYSkpOih0aGlzLnJhd1VybFRyZWU9aSxvKG51bGwpKX0sdC5wcm90b3R5cGUucnVuTmF2aWdhdGU9ZnVuY3Rpb24odCxlLG4scixvLGEpe3ZhciB1PXRoaXM7cmV0dXJuIG8hPT10aGlzLm5hdmlnYXRpb25JZD8odGhpcy5ldmVudHMubmV4dChuZXcgUShvLHRoaXMuc2VyaWFsaXplVXJsKHQpLCJOYXZpZ2F0aW9uIElEICIrbysiIGlzIG5vdCBlcXVhbCB0byB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGlkICIrdGhpcy5uYXZpZ2F0aW9uSWQpKSxQcm9taXNlLnJlc29sdmUoITEpKTpuZXcgUHJvbWlzZShmdW5jdGlvbihjLGQpe3ZhciBwLG09KGE/T2JqZWN0KGwuYSkoe2FwcGxpZWRVcmw6dCxzbmFwc2hvdDphfSk6bmV3IFd0KHUubmdNb2R1bGUuaW5qZWN0b3IsdS5jb25maWdMb2FkZXIsdS51cmxTZXJpYWxpemVyLHQsdS5jb25maWcpLmFwcGx5KCkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4saSxyLG8pe3JldHVybiB2b2lkIDA9PT1yJiYocj0iZW1wdHlPbmx5Iiksdm9pZCAwPT09byYmKG89ImxlZ2FjeSIpLG5ldyBqZSh0LGUsbixpLHIsbykucmVjb2duaXplKCl9KHUucm9vdENvbXBvbmVudFR5cGUsdS5jb25maWcsZSx1LnNlcmlhbGl6ZVVybChlKSx1LnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3ksdS5yZWxhdGl2ZUxpbmtSZXNvbHV0aW9uKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB1LmV2ZW50cy5uZXh0KG5ldyBXKG8sdS5zZXJpYWxpemVVcmwodCksdS5zZXJpYWxpemVVcmwoZSksbikpLHthcHBsaWVkVXJsOmUsc25hcHNob3Q6bn19KSl9KSkpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oaSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgaT9PYmplY3QobC5hKShpKTp1Lmhvb2tzLmJlZm9yZVByZWFjdGl2YXRpb24oaS5zbmFwc2hvdCx7bmF2aWdhdGlvbklkOm8sYXBwbGllZFVybFRyZWU6dCxyYXdVcmxUcmVlOmUsc2tpcExvY2F0aW9uQ2hhbmdlOm4scmVwbGFjZVVybDpyfSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiBpfSkpfSkpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LmFwcGxpZWRVcmwsbj10LnNuYXBzaG90O3JldHVybihwPW5ldyBrZShuLHUucm91dGVyU3RhdGUuc25hcHNob3QsdS5uZ01vZHVsZS5pbmplY3RvcixmdW5jdGlvbih0KXtyZXR1cm4gdS50cmlnZ2VyRXZlbnQodCl9KSkuaW5pdGlhbGl6ZSh1LnJvb3RDb250ZXh0cykse2FwcGxpZWRVcmw6ZSxzbmFwc2hvdDpufX0pKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGUpe2lmKCJib29sZWFuIj09dHlwZW9mIGV8fHUubmF2aWdhdGlvbklkIT09bylyZXR1cm4gT2JqZWN0KGwuYSkoITEpO3ZhciBuPWUuYXBwbGllZFVybCxpPWUuc25hcHNob3Q7cmV0dXJuIHUudHJpZ2dlckV2ZW50KG5ldyBaKG8sdS5zZXJpYWxpemVVcmwodCksdS5zZXJpYWxpemVVcmwobiksaSkpLHAuY2hlY2tHdWFyZHMoKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB1LnRyaWdnZXJFdmVudChuZXcgSyhvLHUuc2VyaWFsaXplVXJsKHQpLHUuc2VyaWFsaXplVXJsKG4pLGksZSkpLHthcHBsaWVkVXJsOm4sc25hcHNob3Q6aSxzaG91bGRBY3RpdmF0ZTplfX0pKX0pKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV8fHUubmF2aWdhdGlvbklkIT09bz9PYmplY3QobC5hKSghMSk6ZS5zaG91bGRBY3RpdmF0ZSYmcC5pc0FjdGl2YXRpbmcoKT8odS50cmlnZ2VyRXZlbnQobmV3IFgobyx1LnNlcmlhbGl6ZVVybCh0KSx1LnNlcmlhbGl6ZVVybChlLmFwcGxpZWRVcmwpLGUuc25hcHNob3QpKSxwLnJlc29sdmVEYXRhKHUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiB1LnRyaWdnZXJFdmVudChuZXcgJChvLHUuc2VyaWFsaXplVXJsKHQpLHUuc2VyaWFsaXplVXJsKGUuYXBwbGllZFVybCksZS5zbmFwc2hvdCkpLGV9KSkpOk9iamVjdChsLmEpKGUpfSkpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oaSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgaXx8dS5uYXZpZ2F0aW9uSWQhPT1vP09iamVjdChsLmEpKCExKTp1Lmhvb2tzLmFmdGVyUHJlYWN0aXZhdGlvbihpLnNuYXBzaG90LHtuYXZpZ2F0aW9uSWQ6byxhcHBsaWVkVXJsVHJlZTp0LHJhd1VybFRyZWU6ZSxza2lwTG9jYXRpb25DaGFuZ2U6bixyZXBsYWNlVXJsOnJ9KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSl9KSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PXR5cGVvZiB0fHx1Lm5hdmlnYXRpb25JZCE9PW8pcmV0dXJuITE7dmFyIGUsbixyLGE9dC5hcHBsaWVkVXJsLGw9dC5zaG91bGRBY3RpdmF0ZTtyZXR1cm4gbD97YXBwbGllZFVybDphLHN0YXRlOihyPWZ1bmN0aW9uIHQoZSxuLHIpe2lmKHImJmUuc2hvdWxkUmV1c2VSb3V0ZShuLnZhbHVlLHIudmFsdWUuc25hcHNob3QpKXsoYz1yLnZhbHVlKS5fZnV0dXJlU25hcHNob3Q9bi52YWx1ZTt2YXIgbz1mdW5jdGlvbihlLG4scil7cmV0dXJuIG4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG4pe3ZhciBvLGE7dHJ5e2Zvcih2YXIgcz1PYmplY3QoaS5lKShyLmNoaWxkcmVuKSx1PXMubmV4dCgpOyF1LmRvbmU7dT1zLm5leHQoKSl7dmFyIGw9dS52YWx1ZTtpZihlLnNob3VsZFJldXNlUm91dGUobC52YWx1ZS5zbmFwc2hvdCxuLnZhbHVlKSlyZXR1cm4gdChlLG4sbCl9fWNhdGNoKHQpe289e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihhPXMucmV0dXJuKSYmYS5jYWxsKHMpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gdChlLG4pfSl9KGUsbixyKTtyZXR1cm4gbmV3IG5lKGMsbyl9dmFyIGE9ZS5yZXRyaWV2ZShuLnZhbHVlKTtpZihhKXt2YXIgdT1hLnJvdXRlO3JldHVybiBmdW5jdGlvbiB0KGUsbil7aWYoZS52YWx1ZS5yb3V0ZUNvbmZpZyE9PW4udmFsdWUucm91dGVDb25maWcpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhdHRhY2ggQWN0aXZhdGVkUm91dGVTbmFwc2hvdCBjcmVhdGVkIGZyb20gYSBkaWZmZXJlbnQgcm91dGUiKTtpZihlLmNoaWxkcmVuLmxlbmd0aCE9PW4uY2hpbGRyZW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYXR0YWNoIEFjdGl2YXRlZFJvdXRlU25hcHNob3Qgd2l0aCBhIGRpZmZlcmVudCBudW1iZXIgb2YgY2hpbGRyZW4iKTtuLnZhbHVlLl9mdXR1cmVTbmFwc2hvdD1lLnZhbHVlO2Zvcih2YXIgaT0wO2k8ZS5jaGlsZHJlbi5sZW5ndGg7KytpKXQoZS5jaGlsZHJlbltpXSxuLmNoaWxkcmVuW2ldKX0obix1KSx1fXZhciBsLGM9bmV3IGFlKG5ldyBzLmEoKGw9bi52YWx1ZSkudXJsKSxuZXcgcy5hKGwucGFyYW1zKSxuZXcgcy5hKGwucXVlcnlQYXJhbXMpLG5ldyBzLmEobC5mcmFnbWVudCksbmV3IHMuYShsLmRhdGEpLGwub3V0bGV0LGwuY29tcG9uZW50LGwpO3JldHVybiBvPW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9KSxuZXcgbmUoYyxvKX0odS5yb3V0ZVJldXNlU3RyYXRlZ3ksKGU9dC5zbmFwc2hvdCkuX3Jvb3QsKG49dS5yb3V0ZXJTdGF0ZSk/bi5fcm9vdDp2b2lkIDApLG5ldyByZShyLGUpKSxzaG91bGRBY3RpdmF0ZTpsfTp7YXBwbGllZFVybDphLHN0YXRlOm51bGwsc2hvdWxkQWN0aXZhdGU6bH19KSk7dS5hY3RpdmF0ZVJvdXRlcyhtLHUucm91dGVyU3RhdGUsdS5jdXJyZW50VXJsVHJlZSxvLHQsZSxuLHIsYyxkKX0pfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbixpLHIsbyxhLHMsdSxsKXt2YXIgYyxmPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIiE9dHlwZW9mIHQmJnQuc2hvdWxkQWN0aXZhdGUmJmk9PT1mLm5hdmlnYXRpb25JZCYmdC5zdGF0ZSl7dmFyIG49dC5zdGF0ZTtmLmN1cnJlbnRVcmxUcmVlPXQuYXBwbGllZFVybCxmLnJhd1VybFRyZWU9Zi51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGYuY3VycmVudFVybFRyZWUsbyksZi5yb3V0ZXJTdGF0ZT1uLCJkZWZlcnJlZCIhPT1mLnVybFVwZGF0ZVN0cmF0ZWd5fHxhfHxmLnNldEJyb3dzZXJVcmwoZi5yYXdVcmxUcmVlLHMsaSksbmV3IFllKGYucm91dGVSZXVzZVN0cmF0ZWd5LG4sZSxmdW5jdGlvbih0KXtyZXR1cm4gZi50cmlnZ2VyRXZlbnQodCl9KS5hY3RpdmF0ZShmLnJvb3RDb250ZXh0cyksYz0hMH1lbHNlIGM9ITF9KS50aGVuKGZ1bmN0aW9uKCl7Yz8oZi5uYXZpZ2F0ZWQ9ITAsZi5sYXN0U3VjY2Vzc2Z1bElkPWksZi5ldmVudHMubmV4dChuZXcgRyhpLGYuc2VyaWFsaXplVXJsKHIpLGYuc2VyaWFsaXplVXJsKGYuY3VycmVudFVybFRyZWUpKSksdSghMCkpOihmLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpLGYuZXZlbnRzLm5leHQobmV3IFEoaSxmLnNlcmlhbGl6ZVVybChyKSwiIikpLHUoITEpKX0sZnVuY3Rpb24odCl7aWYoKGE9dCkmJmEubmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IpZi5uYXZpZ2F0ZWQ9ITAsZi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBRKGksZi5zZXJpYWxpemVVcmwociksdC5tZXNzYWdlKSksdSghMSk7ZWxzZXtmLnJlc2V0U3RhdGVBbmRVcmwoZSxuLG8pLGYuZXZlbnRzLm5leHQobmV3IFkoaSxmLnNlcmlhbGl6ZVVybChyKSx0KSk7dHJ5e3UoZi5lcnJvckhhbmRsZXIodCkpfWNhdGNoKHQpe2wodCl9fXZhciBhfSl9LHQucHJvdG90eXBlLnNldEJyb3dzZXJVcmw9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodCk7dGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhpKXx8ZT90aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShpLCIiLHtuYXZpZ2F0aW9uSWQ6bn0pOnRoaXMubG9jYXRpb24uZ28oaSwiIix7bmF2aWdhdGlvbklkOm59KX0sdC5wcm90b3R5cGUucmVzZXRTdGF0ZUFuZFVybD1mdW5jdGlvbih0LGUsbil7dGhpcy5yb3V0ZXJTdGF0ZT10LHRoaXMuY3VycmVudFVybFRyZWU9ZSx0aGlzLnJhd1VybFRyZWU9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKHRoaXMuY3VycmVudFVybFRyZWUsbiksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKX0sdC5wcm90b3R5cGUucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlPWZ1bmN0aW9uKCl7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLnJhd1VybFRyZWUpLCIiLHtuYXZpZ2F0aW9uSWQ6dGhpcy5sYXN0U3VjY2Vzc2Z1bElkfSl9LHR9KCksWWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5PXQsdGhpcy5mdXR1cmVTdGF0ZT1lLHRoaXMuY3VyclN0YXRlPW4sdGhpcy5mb3J3YXJkRXZlbnQ9aX1yZXR1cm4gdC5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mdXR1cmVTdGF0ZS5fcm9vdCxuPXRoaXMuY3VyclN0YXRlP3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpLGhlKHRoaXMuZnV0dXJlU3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9aWUoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUub3V0bGV0O2kuZGVhY3RpdmF0ZVJvdXRlcyh0LHJbZV0sbiksZGVsZXRlIHJbZV19KSxidChyLGZ1bmN0aW9uKHQsZSl7aS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4pfSl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQudmFsdWUscj1lP2UudmFsdWU6bnVsbDtpZihpPT09cilpZihpLmNvbXBvbmVudCl7dmFyIG89bi5nZXRDb250ZXh0KGkub3V0bGV0KTtvJiZ0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSByJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGUsbil9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKHQudmFsdWUuc25hcHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUodCxlKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldCh0LGUpfSx0LnByb3RvdHlwZS5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYobiYmbi5vdXRsZXQpe3ZhciBpPW4ub3V0bGV0LmRldGFjaCgpLHI9bi5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUodC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOmkscm91dGU6dCxjb250ZXh0czpyfSl9fSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9ZS5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTtpZihpKXt2YXIgcj1pZSh0KSxvPXQudmFsdWUuY29tcG9uZW50P2kuY2hpbGRyZW46ZTtidChyLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxvKX0pLGkub3V0bGV0JiYoaS5vdXRsZXQuZGVhY3RpdmF0ZSgpLGkuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpKX19LHQucHJvdG90eXBlLmFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj1pZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7aS5hY3RpdmF0ZVJvdXRlcyh0LHJbdC52YWx1ZS5vdXRsZXRdLG4pLGkuZm9yd2FyZEV2ZW50KG5ldyBydCh0LnZhbHVlLnNuYXBzaG90KSl9KSx0LmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IG50KHQudmFsdWUuc25hcHNob3QpKX0sdC5wcm90b3R5cGUuYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQudmFsdWUscj1lP2UudmFsdWU6bnVsbDtpZihoZShpKSxpPT09cilpZihpLmNvbXBvbmVudCl7dmFyIG89bi5nZXRPckNyZWF0ZUNvbnRleHQoaS5vdXRsZXQpO3RoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgaWYoaS5jb21wb25lbnQpaWYobz1uLmdldE9yQ3JlYXRlQ29udGV4dChpLm91dGxldCksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGkuc25hcHNob3QpKXt2YXIgYT10aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5yZXRyaWV2ZShpLnNuYXBzaG90KTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZShpLnNuYXBzaG90LG51bGwpLG8uY2hpbGRyZW4ub25PdXRsZXRSZUF0dGFjaGVkKGEuY29udGV4dHMpLG8uYXR0YWNoUmVmPWEuY29tcG9uZW50UmVmLG8ucm91dGU9YS5yb3V0ZS52YWx1ZSxvLm91dGxldCYmby5vdXRsZXQuYXR0YWNoKGEuY29tcG9uZW50UmVmLGEucm91dGUudmFsdWUpLFdlKGEucm91dGUpfWVsc2V7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkuc25hcHNob3QucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZztpZihuJiZuLmNvbXBvbmVudClyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0oKSx1PXM/cy5tb2R1bGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOm51bGw7by5yb3V0ZT1pLG8ucmVzb2x2ZXI9dSxvLm91dGxldCYmby5vdXRsZXQuYWN0aXZhdGVXaXRoKGksdSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LG51bGwsbil9LHR9KCk7ZnVuY3Rpb24gV2UodCl7aGUodC52YWx1ZSksdC5jaGlsZHJlbi5mb3JFYWNoKFdlKX12YXIgWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMucm91dGVyPXQsdGhpcy5yb3V0ZT1lLHRoaXMubG9jYXRpb25TdHJhdGVneT1uLHRoaXMuY29tbWFuZHM9W10sdGhpcy5zdWJzY3JpcHRpb249dC5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3QgaW5zdGFuY2VvZiBHJiZpLnVwZGF0ZVRhcmdldFVybEFuZEhyZWYoKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvdXRlckxpbmsiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jb21tYW5kcz1udWxsIT10P0FycmF5LmlzQXJyYXkodCk/dDpbdF06W119LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIix7c2V0OmZ1bmN0aW9uKHQpe09iamVjdChyLlopKCkmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIGlzIGRlcHJlY2F0ZWQsIHVzZSBxdWVyeVBhcmFtc0hhbmRsaW5nIGluc3RlYWQuIiksdGhpcy5wcmVzZXJ2ZT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24odCxlLG4saSl7aWYoMCE9PXR8fGV8fG58fGkpcmV0dXJuITA7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdldCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpcmV0dXJuITA7dmFyIHI9e3NraXBMb2NhdGlvbkNoYW5nZTpLZSh0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSkscmVwbGFjZVVybDpLZSh0aGlzLnJlcGxhY2VVcmwpfTtyZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUsciksITF9LHQucHJvdG90eXBlLnVwZGF0ZVRhcmdldFVybEFuZEhyZWY9ZnVuY3Rpb24oKXt0aGlzLmhyZWY9dGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodGhpcy51cmxUcmVlKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidXJsVHJlZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscHJlc2VydmVRdWVyeVBhcmFtczpLZSh0aGlzLnByZXNlcnZlKSxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OktlKHRoaXMucHJlc2VydmVGcmFnbWVudCl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIEtlKHQpe3JldHVybiIiPT09dHx8ISF0fXZhciBYZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3RoaXMub3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMucmVzb2x2ZXI9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyAkZSx0aGlzLmF0dGFjaFJlZj1udWxsfX0oKSwkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXRDcmVhdGVkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQodCk7bi5vdXRsZXQ9ZSx0aGlzLmNvbnRleHRzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5vbkNoaWxkT3V0bGV0RGVzdHJveWVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q29udGV4dCh0KTtlJiYoZS5vdXRsZXQ9bnVsbCl9LHQucHJvdG90eXBlLm9uT3V0bGV0RGVhY3RpdmF0ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHRzO3JldHVybiB0aGlzLmNvbnRleHRzPW5ldyBNYXAsdH0sdC5wcm90b3R5cGUub25PdXRsZXRSZUF0dGFjaGVkPWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dHM9dH0sdC5wcm90b3R5cGUuZ2V0T3JDcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q29udGV4dCh0KTtyZXR1cm4gZXx8KGU9bmV3IFhlLHRoaXMuY29udGV4dHMuc2V0KHQsZSkpLGV9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KHQpfHxudWxsfSx0fSgpLEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLG8pe3RoaXMucGFyZW50Q29udGV4dHM9dCx0aGlzLmxvY2F0aW9uPWUsdGhpcy5yZXNvbHZlcj1uLHRoaXMuY2hhbmdlRGV0ZWN0b3I9byx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5hY3RpdmF0ZUV2ZW50cz1uZXcgci5uLHRoaXMuZGVhY3RpdmF0ZUV2ZW50cz1uZXcgci5uLHRoaXMubmFtZT1pfHxzdCx0Lm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKX0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dCh0aGlzLm5hbWUpO3QmJnQucm91dGUmJih0LmF0dGFjaFJlZj90aGlzLmF0dGFjaCh0LmF0dGFjaFJlZix0LnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aCh0LnJvdXRlLHQucmVzb2x2ZXJ8fG51bGwpKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBY3RpdmF0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2V9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZSIse2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkUm91dGVEYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTt0aGlzLmxvY2F0aW9uLmRldGFjaCgpO3ZhciB0PXRoaXMuYWN0aXZhdGVkO3JldHVybiB0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdH0sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQsZSl7dGhpcy5hY3RpdmF0ZWQ9dCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1lLHRoaXMubG9jYXRpb24uaW5zZXJ0KHQuaG9zdFZpZXcpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZWFjdGl2YXRlRXZlbnRzLmVtaXQodCl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZVdpdGg9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzQWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjdGl2YXRlIGFuIGFscmVhZHkgYWN0aXZhdGVkIG91dGxldCIpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPXQ7dmFyIG49KGU9ZXx8dGhpcy5yZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWcuY29tcG9uZW50KSxpPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4scj1uZXcgdG4odCxpLHRoaXMubG9jYXRpb24uaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPXRoaXMubG9jYXRpb24uY3JlYXRlQ29tcG9uZW50KG4sdGhpcy5sb2NhdGlvbi5sZW5ndGgsciksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfSx0fSgpLHRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5yb3V0ZT10LHRoaXMuY2hpbGRDb250ZXh0cz1lLHRoaXMucGFyZW50PW59cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09YWU/dGhpcy5yb3V0ZTp0PT09JGU/dGhpcy5jaGlsZENvbnRleHRzOnRoaXMucGFyZW50LmdldCh0LGUpfSx0fSgpLGVuPWZ1bmN0aW9uKCl7fSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSgpLnBpcGUoT2JqZWN0KEYuYSkoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGwuYSkobnVsbCl9KSl9LHR9KCkscm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdChsLmEpKG51bGwpfSx0fSgpLG9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIpe3RoaXMucm91dGVyPXQsdGhpcy5pbmplY3Rvcj1pLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PXIsdGhpcy5sb2FkZXI9bmV3IHplKGUsbixmdW5jdGlvbihlKXtyZXR1cm4gdC50cmlnZ2VyRXZlbnQobmV3IEooZSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gdC50cmlnZ2VyRXZlbnQobmV3IHR0KGUpKX0pfXJldHVybiB0LnByb3RvdHlwZS5zZXRVcFByZWxvYWRpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgR30pLE9iamVjdChrLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJlbG9hZCgpfSkpLnN1YnNjcmliZShmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pbmplY3Rvci5nZXQoci54KTtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHQsdGhpcy5yb3V0ZXIuY29uZmlnKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5wcm9jZXNzUm91dGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixvPVtdO3RyeXtmb3IodmFyIGE9T2JqZWN0KGkuZSkoZSkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciBsPXMudmFsdWU7aWYobC5sb2FkQ2hpbGRyZW4mJiFsLmNhbkxvYWQmJmwuX2xvYWRlZENvbmZpZyl7dmFyIGM9bC5fbG9hZGVkQ29uZmlnO28ucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXMoYy5tb2R1bGUsYy5yb3V0ZXMpKX1lbHNlIGwubG9hZENoaWxkcmVuJiYhbC5jYW5Mb2FkP28ucHVzaCh0aGlzLnByZWxvYWRDb25maWcodCxsKSk6bC5jaGlsZHJlbiYmby5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyh0LGwuY2hpbGRyZW4pKX19Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKHI9YS5yZXR1cm4pJiZyLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBPYmplY3QodS5hKShvKS5waXBlKE9iamVjdCh6LmEpKCksT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7fSkpfSx0LnByb3RvdHlwZS5wcmVsb2FkQ29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChlLGZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZGVyLmxvYWQodC5pbmplY3RvcixlKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sb2FkZWRDb25maWc9dCxuLnByb2Nlc3NSb3V0ZXModC5tb2R1bGUsdC5yb3V0ZXMpfSkpfSl9LHR9KCksYW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yb3V0ZXI9dCx0aGlzLnZpZXdwb3J0U2Nyb2xsZXI9ZSx0aGlzLm9wdGlvbnM9bix0aGlzLmxhc3RJZD0wLHRoaXMubGFzdFNvdXJjZT0iaW1wZXJhdGl2ZSIsdGhpcy5yZXN0b3JlZElkPTAsdGhpcy5zdG9yZT17fSxuLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb249bi5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9ufHwiZGlzYWJsZWQiLG4uYW5jaG9yU2Nyb2xsaW5nPW4uYW5jaG9yU2Nyb2xsaW5nfHwiZGlzYWJsZWQifXJldHVybiB0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7ImRpc2FibGVkIiE9PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uJiZ0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKCJtYW51YWwiKSx0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNyZWF0ZVNjcm9sbEV2ZW50cygpLHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uPXRoaXMuY29uc3VtZVNjcm9sbEV2ZW50cygpfSx0LnByb3RvdHlwZS5jcmVhdGVTY3JvbGxFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBxPyh0LnN0b3JlW3QubGFzdElkXT10LnZpZXdwb3J0U2Nyb2xsZXIuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0Lmxhc3RTb3VyY2U9ZS5uYXZpZ2F0aW9uVHJpZ2dlcix0LnJlc3RvcmVkSWQ9ZS5yZXN0b3JlZFN0YXRlP2UucmVzdG9yZWRTdGF0ZS5uYXZpZ2F0aW9uSWQ6MCk6ZSBpbnN0YW5jZW9mIEcmJih0Lmxhc3RJZD1lLmlkLHQuc2NoZWR1bGVTY3JvbGxFdmVudChlLHQucm91dGVyLnBhcnNlVXJsKGUudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KSl9KX0sdC5wcm90b3R5cGUuY29uc3VtZVNjcm9sbEV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIG90JiYoZS5wb3NpdGlvbj8idG9wIj09PXQub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3Qudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10Lm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdC52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oZS5wb3NpdGlvbik6ZS5hbmNob3ImJiJlbmFibGVkIj09PXQub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/dC52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGUuYW5jaG9yKToiZGlzYWJsZWQiIT09dC5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnQudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX0sdC5wcm90b3R5cGUuc2NoZWR1bGVTY3JvbGxFdmVudD1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVyLnRyaWdnZXJFdmVudChuZXcgb3QodCwicG9wc3RhdGUiPT09dGhpcy5sYXN0U291cmNlP3RoaXMuc3RvcmVbdGhpcy5yZXN0b3JlZElkXTpudWxsLGUpKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbiYmdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbiYmdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdH0oKSxzbj1uZXcgci5xKCJST1VURVJfQ09ORklHVVJBVElPTiIpLHVuPW5ldyByLnEoIlJPVVRFUl9GT1JST09UX0dVQVJEIiksbG49W0IuZyx7cHJvdmlkZTpUdCx1c2VDbGFzczpqdH0se3Byb3ZpZGU6UWUsdXNlRmFjdG9yeTp5bixkZXBzOltyLmcsVHQsJGUsQi5nLHIucixyLncsci5pLFZlLHNuLFtCZSxuZXcgci5BXSxbRmUsbmV3IHIuQV1dfSwkZSx7cHJvdmlkZTphZSx1c2VGYWN0b3J5OnZuLGRlcHM6W1FlXX0se3Byb3ZpZGU6ci53LHVzZUNsYXNzOnIuTH0sb24scm4sbm4se3Byb3ZpZGU6c24sdXNlVmFsdWU6e2VuYWJsZVRyYWNpbmc6ITF9fV07ZnVuY3Rpb24gY24oKXtyZXR1cm4gbmV3IHIueSgiUm91dGVyIixRZSl9dmFyIGZuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe31yZXR1cm4gdC5mb3JSb290PWZ1bmN0aW9uKGUsbil7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOltsbixtbihlKSx7cHJvdmlkZTp1bix1c2VGYWN0b3J5OnBuLGRlcHM6W1tRZSxuZXcgci5BLG5ldyByLktdXX0se3Byb3ZpZGU6c24sdXNlVmFsdWU6bnx8e319LHtwcm92aWRlOkIuaCx1c2VGYWN0b3J5OmRuLGRlcHM6W0IucixbbmV3IHIucChCLmEpLG5ldyByLkFdLHNuXX0se3Byb3ZpZGU6YW4sdXNlRmFjdG9yeTpobixkZXBzOltRZSxCLnMsc25dfSx7cHJvdmlkZTplbix1c2VFeGlzdGluZzpuJiZuLnByZWxvYWRpbmdTdHJhdGVneT9uLnByZWxvYWRpbmdTdHJhdGVneTpybn0se3Byb3ZpZGU6ci55LG11bHRpOiEwLHVzZUZhY3Rvcnk6Y259LFtnbix7cHJvdmlkZTpyLmQsbXVsdGk6ITAsdXNlRmFjdG9yeTpibixkZXBzOltnbl19LHtwcm92aWRlOnduLHVzZUZhY3Rvcnk6X24sZGVwczpbZ25dfSx7cHJvdmlkZTpyLmIsbXVsdGk6ITAsdXNlRXhpc3Rpbmc6d259XV19fSx0LmZvckNoaWxkPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbbW4oZSldfX0sdH0oKTtmdW5jdGlvbiBobih0LGUsbil7cmV0dXJuIG4uc2Nyb2xsT2Zmc2V0JiZlLnNldE9mZnNldChuLnNjcm9sbE9mZnNldCksbmV3IGFuKHQsZSxuKX1mdW5jdGlvbiBkbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSxuLnVzZUhhc2g/bmV3IEIuZSh0LGUpOm5ldyBCLnEodCxlKX1mdW5jdGlvbiBwbih0KXtpZih0KXRocm93IG5ldyBFcnJvcigiUm91dGVyTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIExhenkgbG9hZGVkIG1vZHVsZXMgc2hvdWxkIHVzZSBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBtbih0KXtyZXR1cm5be3Byb3ZpZGU6ci5hLG11bHRpOiEwLHVzZVZhbHVlOnR9LHtwcm92aWRlOlZlLG11bHRpOiEwLHVzZVZhbHVlOnR9XX1mdW5jdGlvbiB5bih0LGUsbixpLHIsbyxhLHMsdSxsLGMpe3ZvaWQgMD09PXUmJih1PXt9KTt2YXIgZj1uZXcgUWUobnVsbCxlLG4saSxyLG8sYSx2dChzKSk7aWYobCYmKGYudXJsSGFuZGxpbmdTdHJhdGVneT1sKSxjJiYoZi5yb3V0ZVJldXNlU3RyYXRlZ3k9YyksdS5lcnJvckhhbmRsZXImJihmLmVycm9ySGFuZGxlcj11LmVycm9ySGFuZGxlciksdS5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXImJihmLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcj11Lm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlciksdS5lbmFibGVUcmFjaW5nKXt2YXIgaD1PYmplY3QoVS5zKSgpO2YuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbih0KXtoLmxvZ0dyb3VwKCJSb3V0ZXIgRXZlbnQ6ICIrdC5jb25zdHJ1Y3Rvci5uYW1lKSxoLmxvZyh0LnRvU3RyaW5nKCkpLGgubG9nKHQpLGgubG9nR3JvdXBFbmQoKX0pfXJldHVybiB1Lm9uU2FtZVVybE5hdmlnYXRpb24mJihmLm9uU2FtZVVybE5hdmlnYXRpb249dS5vblNhbWVVcmxOYXZpZ2F0aW9uKSx1LnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kmJihmLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9dS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSx1LnVybFVwZGF0ZVN0cmF0ZWd5JiYoZi51cmxVcGRhdGVTdHJhdGVneT11LnVybFVwZGF0ZVN0cmF0ZWd5KSx1LnJlbGF0aXZlTGlua1Jlc29sdXRpb24mJihmLnJlbGF0aXZlTGlua1Jlc29sdXRpb249dS5yZWxhdGl2ZUxpbmtSZXNvbHV0aW9uKSxmfWZ1bmN0aW9uIHZuKHQpe3JldHVybiB0LnJvdXRlclN0YXRlLnJvb3R9dmFyIGduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmluamVjdG9yPXQsdGhpcy5pbml0TmF2aWdhdGlvbj0hMSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmU9bmV3IGEuYX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmluamVjdG9yLmdldChCLmYsUHJvbWlzZS5yZXNvbHZlKG51bGwpKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9bnVsbCxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3JldHVybiBlPXR9KSxpPXQuaW5qZWN0b3IuZ2V0KFFlKSxyPXQuaW5qZWN0b3IuZ2V0KHNuKTtpZih0LmlzTGVnYWN5RGlzYWJsZWQocil8fHQuaXNMZWdhY3lFbmFibGVkKHIpKWUoITApO2Vsc2UgaWYoImRpc2FibGVkIj09PXIuaW5pdGlhbE5hdmlnYXRpb24paS5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxlKCEwKTtlbHNle2lmKCJlbmFibGVkIiE9PXIuaW5pdGlhbE5hdmlnYXRpb24pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGluaXRpYWxOYXZpZ2F0aW9uIG9wdGlvbnM6ICciK3IuaW5pdGlhbE5hdmlnYXRpb24rIiciKTtpLmhvb2tzLmFmdGVyUHJlYWN0aXZhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmluaXROYXZpZ2F0aW9uP09iamVjdChsLmEpKG51bGwpOih0LmluaXROYXZpZ2F0aW9uPSEwLGUoITApLHQucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZSl9LGkuaW5pdGlhbE5hdmlnYXRpb24oKX1yZXR1cm4gbn0pfSx0LnByb3RvdHlwZS5ib290c3RyYXBMaXN0ZW5lcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluamVjdG9yLmdldChzbiksbj10aGlzLmluamVjdG9yLmdldChvbiksaT10aGlzLmluamVjdG9yLmdldChhbiksbz10aGlzLmluamVjdG9yLmdldChRZSksYT10aGlzLmluamVjdG9yLmdldChyLmcpO3Q9PT1hLmNvbXBvbmVudHNbMF0mJih0aGlzLmlzTGVnYWN5RW5hYmxlZChlKT9vLmluaXRpYWxOYXZpZ2F0aW9uKCk6dGhpcy5pc0xlZ2FjeURpc2FibGVkKGUpJiZvLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLG4uc2V0VXBQcmVsb2FkaW5nKCksaS5pbml0KCksby5yZXNldFJvb3RDb21wb25lbnRUeXBlKGEuY29tcG9uZW50VHlwZXNbMF0pLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZS5uZXh0KG51bGwpLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZS5jb21wbGV0ZSgpKX0sdC5wcm90b3R5cGUuaXNMZWdhY3lFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiJsZWdhY3lfZW5hYmxlZCI9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHwhMD09PXQuaW5pdGlhbE5hdmlnYXRpb258fHZvaWQgMD09PXQuaW5pdGlhbE5hdmlnYXRpb259LHQucHJvdG90eXBlLmlzTGVnYWN5RGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuImxlZ2FjeV9kaXNhYmxlZCI9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHwhMT09PXQuaW5pdGlhbE5hdmlnYXRpb259LHR9KCk7ZnVuY3Rpb24gYm4odCl7cmV0dXJuIHQuYXBwSW5pdGlhbGl6ZXIuYmluZCh0KX1mdW5jdGlvbiBfbih0KXtyZXR1cm4gdC5ib290c3RyYXBMaXN0ZW5lci5iaW5kKHQpfXZhciB3bj1uZXcgci5xKCJSb3V0ZXIgSW5pdGlhbGl6ZXIiKX0sWllqdDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiB2dH0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHl0fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGV0fSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIG50fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiAkfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGl0fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGF0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB1dH0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIklwMFIiKSxvPW4oIkNjbkciKSxhPW51bGw7ZnVuY3Rpb24gcygpe3JldHVybiBhfXZhciB1LGw9e2NsYXNzOiJjbGFzc05hbWUiLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9LGM9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LGY9e0E6IjEiLEI6IjIiLEM6IjMiLEQ6IjQiLEU6IjUiLEY6IjYiLEc6IjciLEg6IjgiLEk6IjkiLEo6IioiLEs6IisiLE06Ii0iLE46Ii4iLE86Ii8iLCJgIjoiMCIsIlx4OTAiOiJOdW1Mb2NrIn07by5TYS5Ob2RlJiYodT1vLlNhLk5vZGUucHJvdG90eXBlLmNvbnRhaW5zfHxmdW5jdGlvbih0KXtyZXR1cm4hISgxNiZ0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKX0pO3ZhciBoLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwYXJzZSBub3QgaW1wbGVtZW50ZWQiKX0sZS5tYWtlQ3VycmVudD1mdW5jdGlvbigpe3ZhciB0O3Q9bmV3IGUsYXx8KGE9dCl9LGUucHJvdG90eXBlLmhhc1Byb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH0sZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RbZV09bn0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXX0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjsocj10KVtlXS5hcHBseShyLE9iamVjdChpLmQpKG4pKX0sZS5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJihjb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IodCk6Y29uc29sZS5sb2codCkpfSxlLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cD1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cEVuZD1mdW5jdGlvbigpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCYmd2luZG93LmNvbnNvbGUuZ3JvdXBFbmQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRyVG9Qcm9wTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5jYWxsKHQsZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKGUpfSxlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChlKX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpfSxlLnByb3RvdHlwZS5vbkFuZENhbmNlbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpLGZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMSl9fSxlLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dC5kaXNwYXRjaEV2ZW50KGUpfSxlLnByb3RvdHlwZS5jcmVhdGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUuY3JlYXRlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITF9LGUucHJvdG90eXBlLmlzUHJldmVudGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlZmF1bHRQcmV2ZW50ZWR8fG51bGwhPXQucmV0dXJuVmFsdWUmJiF0LnJldHVyblZhbHVlfSxlLnByb3RvdHlwZS5nZXRJbm5lckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5uZXJIVE1MfSxlLnByb3RvdHlwZS5nZXRUZW1wbGF0ZUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90LmNvbnRlbnQ6bnVsbH0sZS5wcm90b3R5cGUuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dGVySFRNTH0sZS5wcm90b3R5cGUubm9kZU5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWV9LGUucHJvdG90eXBlLm5vZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVmFsdWV9LGUucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNQcm9wZXJ0eSh0LCJjb250ZW50Iik/dC5jb250ZW50OnR9LGUucHJvdG90eXBlLmZpcnN0Q2hpbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlyc3RDaGlsZH0sZS5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sZS5wcm90b3R5cGUuY2hpbGROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGlsZE5vZGVzfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzQXNMaXN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMsbj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9MDtpPGUubGVuZ3RoO2krKyluW2ldPWVbaV07cmV0dXJuIG59LGUucHJvdG90eXBlLmNsZWFyTm9kZXM9ZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZD1mdW5jdGlvbih0LGUsbil7dC5yZXBsYWNlQ2hpbGQoZSxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0fSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZSl9LGUucHJvdG90eXBlLmluc2VydEFsbEJlZm9yZT1mdW5jdGlvbih0LGUsbil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0Lmluc2VydEJlZm9yZShuLGUpfSl9LGUucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShuLGUubmV4dFNpYmxpbmcpfSxlLnByb3RvdHlwZS5zZXRJbm5lckhUTUw9ZnVuY3Rpb24odCxlKXt0LmlubmVySFRNTD1lfSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50fSxlLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dC50ZXh0Q29udGVudD1lfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0LnZhbHVlPWV9LGUucHJvdG90eXBlLmdldENoZWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tlZH0sZS5wcm90b3R5cGUuc2V0Q2hlY2tlZD1mdW5jdGlvbih0LGUpe3QuY2hlY2tlZD1lfSxlLnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUNvbW1lbnQodCl9LGUucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9dCxlfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50TlModCxlKX0sZS5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVUZXh0Tm9kZSh0KX0sZS5wcm90b3R5cGUuY3JlYXRlU2NyaXB0VGFnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJTQ1JJUFQiKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUodCxlKSxpfSxlLnByb3RvdHlwZS5jcmVhdGVTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4sdGhpcy5jcmVhdGVUZXh0Tm9kZSh0LGUpKSxufSxlLnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNyZWF0ZVNoYWRvd1Jvb3QoKX0sZS5wcm90b3R5cGUuZ2V0U2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zaGFkb3dSb290fSxlLnByb3RvdHlwZS5nZXRIb3N0PWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3R9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfSxlLnByb3RvdHlwZS5jbGFzc0xpc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuY2xhc3NMaXN0LDApfSxlLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LGUucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGUpfSxlLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbil7dC5zdHlsZVtlXT1ufSxlLnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbZV09IiJ9LGUucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3R5bGVbZV19LGUucHJvdG90eXBlLmhhc1N0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLmdldFN0eWxlKHQsZSl8fCIiO3JldHVybiBuP2k9PW46aS5sZW5ndGg+MH0sZS5wcm90b3R5cGUudGFnTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lfSxlLnByb3RvdHlwZS5hdHRyaWJ1dGVNYXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBNYXAsbj10LmF0dHJpYnV0ZXMsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcj1uLml0ZW0oaSk7ZS5zZXQoci5uYW1lLHIudmFsdWUpfXJldHVybiBlfSxlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3Quc2V0QXR0cmlidXRlKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuLGkpe3Quc2V0QXR0cmlidXRlTlMoZSxuLGkpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt0LnJlbW92ZUF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3QucmVtb3ZlQXR0cmlidXRlTlMoZSxuKX0sZS5wcm90b3R5cGUudGVtcGxhdGVBd2FyZVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNUZW1wbGF0ZUVsZW1lbnQodCk/dGhpcy5jb250ZW50KHQpOnR9LGUucHJvdG90eXBlLmNyZWF0ZUh0bWxEb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfSxlLnByb3RvdHlwZS5nZXREZWZhdWx0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGUucHJvdG90eXBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2godCl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjB9fX0sZS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGl0bGV9LGUucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKHQsZSl7dC50aXRsZT1lfHwiIn0sZS5wcm90b3R5cGUuZWxlbWVudE1hdGNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuaXNFbGVtZW50Tm9kZSh0KSYmKHQubWF0Y2hlcyYmdC5tYXRjaGVzKGUpfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yJiZ0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfHx0LndlYmtpdE1hdGNoZXNTZWxlY3RvciYmdC53ZWJraXRNYXRjaGVzU2VsZWN0b3IoZSkpfSxlLnByb3RvdHlwZS5pc1RlbXBsYXRlRWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYiVEVNUExBVEUiPT09dC5ub2RlTmFtZX0sZS5wcm90b3R5cGUuaXNUZXh0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFfSxlLnByb3RvdHlwZS5pc0NvbW1lbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5DT01NRU5UX05PREV9LGUucHJvdG90eXBlLmlzRWxlbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaGFzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dC5zaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGUucHJvdG90eXBlLmlzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9LGUucHJvdG90eXBlLmltcG9ydEludG9Eb2M9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmltcG9ydE5vZGUodGhpcy50ZW1wbGF0ZUF3YXJlUm9vdCh0KSwhMCl9LGUucHJvdG90eXBlLmFkb3B0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuYWRvcHROb2RlKHQpfSxlLnByb3RvdHlwZS5nZXRIcmVmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0ZSgiaHJlZiIpfSxlLnByb3RvdHlwZS5nZXRFdmVudEtleT1mdW5jdGlvbih0KXt2YXIgZT10LmtleTtpZihudWxsPT1lKXtpZihudWxsPT0oZT10LmtleUlkZW50aWZpZXIpKXJldHVybiJVbmlkZW50aWZpZWQiO2Uuc3RhcnRzV2l0aCgiVSsiKSYmKGU9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnN1YnN0cmluZygyKSwxNikpLDM9PT10LmxvY2F0aW9uJiZmLmhhc093blByb3BlcnR5KGUpJiYoZT1mW2VdKSl9cmV0dXJuIGNbZV18fGV9LGUucHJvdG90eXBlLmdldEdsb2JhbEV2ZW50VGFyZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9LGUucHJvdG90eXBlLmdldEhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93Lmhpc3Rvcnl9LGUucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbn0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24odCl7dmFyIGUsbj1wfHwocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP3AuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbDtyZXR1cm4gbnVsbD09bj9udWxsOihlPW4saHx8KGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxoLnNldEF0dHJpYnV0ZSgiaHJlZiIsZSksIi8iPT09aC5wYXRobmFtZS5jaGFyQXQoMCk/aC5wYXRobmFtZToiLyIraC5wYXRobmFtZSl9LGUucHJvdG90eXBlLnJlc2V0QmFzZUVsZW1lbnQ9ZnVuY3Rpb24oKXtwPW51bGx9LGUucHJvdG90eXBlLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH0sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2Usbil9LGUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2UpfSxlLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHQpfSxlLnByb3RvdHlwZS5zdXBwb3J0c1dlYkFuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlfSxlLnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdygpOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5zdXBwb3J0c0Nvb2tpZXM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0Q29va2llPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qoci54KShkb2N1bWVudC5jb29raWUsdCl9LGUucHJvdG90eXBlLnNldENvb2tpZT1mdW5jdGlvbih0LGUpe2RvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklDb21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0sZX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGw7dHJ5e3ZhciBuPWUuY3JlYXRlRWxlbWVudCgiZGl2Iixkb2N1bWVudCk7aWYobnVsbCE9ZS5nZXRTdHlsZShuLCJhbmltYXRpb25OYW1lIikpZS5fYW5pbWF0aW9uUHJlZml4PSIiO2Vsc2UgZm9yKHZhciBpPVsiV2Via2l0IiwiTW96IiwiTyIsIm1zIl0scj0wO3I8aS5sZW5ndGg7cisrKWlmKG51bGwhPWUuZ2V0U3R5bGUobixpW3JdKyJBbmltYXRpb25OYW1lIikpe2UuX2FuaW1hdGlvblByZWZpeD0iLSIraVtyXS50b0xvd2VyQ2FzZSgpKyItIjticmVha312YXIgbz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtudWxsIT1lLmdldFN0eWxlKG4sdCkmJihlLl90cmFuc2l0aW9uRW5kPW9bdF0pfSl9Y2F0Y2godCl7ZS5fYW5pbWF0aW9uUHJlZml4PW51bGwsZS5fdHJhbnNpdGlvbkVuZD1udWxsfXJldHVybiBlfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldERpc3RyaWJ1dGVkTm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGlzdHJpYnV0ZWROb2RlcygpfSxlLnByb3RvdHlwZS5yZXNvbHZlQW5kU2V0SHJlZj1mdW5jdGlvbih0LGUsbil7dC5ocmVmPW51bGw9PW4/ZTplKyIvLi4vIitufSxlLnByb3RvdHlwZS5zdXBwb3J0c0RPTUV2ZW50cz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5zdXBwb3J0c05hdGl2ZVNoYWRvd0RPTT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkb2N1bWVudC5ib2R5LmNyZWF0ZVNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEFuaW1hdGlvblByZWZpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25QcmVmaXg/dGhpcy5fYW5pbWF0aW9uUHJlZml4OiIifSxlLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmQ/dGhpcy5fdHJhbnNpdGlvbkVuZDoiIn0sZS5wcm90b3R5cGUuc3VwcG9ydHNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fYW5pbWF0aW9uUHJlZml4JiZudWxsIT10aGlzLl90cmFuc2l0aW9uRW5kfSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc291cmNlTG9hZGVyVHlwZT1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0clRvUHJvcE1hcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F0dHJUb1Byb3BNYXA9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpKSkscD1udWxsLG09ci5kO2Z1bmN0aW9uIHkoKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX12YXIgdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faW5pdCgpLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uPXMoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rvcnk9cygpLmdldEhpc3RvcnkoKX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWZGcm9tRE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0LCExKX0sZS5wcm90b3R5cGUub25IYXNoQ2hhbmdlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQsITEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGhuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aG5hbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWFyY2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoYXNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZSh0LGUsbik6dGhpcy5sb2NhdGlvbi5oYXNoPW59LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7eSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9LGUuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOm8ucCxhcmdzOlttXX1dfV19LGV9KHIuciksZz1uZXcgby5xKCJUUkFOU0lUSU9OX0lEIiksYj1be3Byb3ZpZGU6by5kLHVzZUZhY3Rvcnk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe24uZ2V0KG8uZSkuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3ZhciBuPXMoKTtBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkobi5xdWVyeVNlbGVjdG9yQWxsKGUsInN0eWxlW25nLXRyYW5zaXRpb25dIikpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbi5nZXRBdHRyaWJ1dGUoZSwibmctdHJhbnNpdGlvbiIpPT09dH0pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVtb3ZlKHQpfSl9KX19LGRlcHM6W2csbSxvLnJdLG11bHRpOiEwfV0sXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuaW5pdD1mdW5jdGlvbigpe09iamVjdChvLkJhKShuZXcgdCl9LHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe28uU2EuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciBpPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiBpfSxvLlNhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsVGVzdGFiaWxpdGllcygpfSxvLlNhLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxSb290RWxlbWVudHMoKX0sby5TYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KG8uU2EuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLG8uU2EuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1vLlNhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxpPSExLHI9ZnVuY3Rpb24oZSl7aT1pfHxlLDA9PS0tbiYmdChpKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShyKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgaT10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1pP2k6bj9zKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLmdldEhvc3QoZSksITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCk7ZnVuY3Rpb24gdyh0LGUpeyJ1bmRlZmluZWQiIT10eXBlb2YgQ09NUElMRUQmJkNPTVBJTEVEfHwoKG8uU2Eubmc9by5TYS5uZ3x8e30pW3RdPWUpfXZhciB4PXtBcHBsaWNhdGlvblJlZjpvLmcsTmdab25lOm8uen0sQz0icHJvYmUiLFM9ImNvcmVUb2tlbnMiO2Z1bmN0aW9uIEUodCl7cmV0dXJuIE9iamVjdChvLlgpKHQpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHcoQyxFKSx3KFMsT2JqZWN0KGkuYSkoe30seCwodHx8W10pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0W2UubmFtZV09ZS50b2tlbix0fSx7fSkpKSxmdW5jdGlvbigpe3JldHVybiBFfX12YXIgaz1uZXcgby5xKCJFdmVudE1hbmFnZXJQbHVnaW5zIiksVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX3pvbmU9ZSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYW5hZ2VyPW59KSx0aGlzLl9wbHVnaW5zPXQuc2xpY2UoKS5yZXZlcnNlKCl9cmV0dXJuIHQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGUpLmFkZEV2ZW50TGlzdGVuZXIodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRHbG9iYWxFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuZ2V0Wm9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSx0LnByb3RvdHlwZS5fZmluZFBsdWdpbkZvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQodCk7aWYoZSlyZXR1cm4gZTtmb3IodmFyIG49dGhpcy5fcGx1Z2lucyxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPW5baV07aWYoci5zdXBwb3J0cyh0KSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KHQscikscn10aHJvdyBuZXcgRXJyb3IoIk5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAiK3QpfSx0fSgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvYz10fXJldHVybiB0LnByb3RvdHlwZS5hZGRHbG9iYWxFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1zKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICIraSsiIGZvciBldmVudCAiK2UpO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaSxlLG4pfSx0fSgpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fc3R5bGVzU2V0PW5ldyBTZXR9cmV0dXJuIHQucHJvdG90eXBlLmFkZFN0eWxlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49bmV3IFNldDt0LmZvckVhY2goZnVuY3Rpb24odCl7ZS5fc3R5bGVzU2V0Lmhhcyh0KXx8KGUuX3N0eWxlc1NldC5hZGQodCksbi5hZGQodCkpfSksdGhpcy5vblN0eWxlc0FkZGVkKG4pfSx0LnByb3RvdHlwZS5vblN0eWxlc0FkZGVkPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0QWxsU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fc3R5bGVzU2V0KX0sdH0oKSxJPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kb2M9ZSxuLl9ob3N0Tm9kZXM9bmV3IFNldCxuLl9zdHlsZU5vZGVzPW5ldyBTZXQsbi5faG9zdE5vZGVzLmFkZChlLmhlYWQpLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuX2FkZFN0eWxlc1RvSG9zdD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uX2RvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9dCxuLl9zdHlsZU5vZGVzLmFkZChlLmFwcGVuZENoaWxkKGkpKX0pfSxlLnByb3RvdHlwZS5hZGRIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2FkZFN0eWxlc1RvSG9zdCh0aGlzLl9zdHlsZXNTZXQsdCksdGhpcy5faG9zdE5vZGVzLmFkZCh0KX0sZS5wcm90b3R5cGUucmVtb3ZlSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9ob3N0Tm9kZXMuZGVsZXRlKHQpfSxlLnByb3RvdHlwZS5vblN0eWxlc0FkZGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5faG9zdE5vZGVzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUuX2FkZFN0eWxlc1RvSG9zdCh0LG4pfSl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVOb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBzKCkucmVtb3ZlKHQpfSl9LGV9KEEpLFI9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LE09LyVDT01QJS9nLFA9Il9uZ2hvc3QtJUNPTVAlIixEPSJfbmdjb250ZW50LSVDT01QJSI7ZnVuY3Rpb24gTih0LGUsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciByPWVbaV07QXJyYXkuaXNBcnJheShyKT9OKHQscixuKToocj1yLnJlcGxhY2UoTSx0KSxuLnB1c2gocikpfXJldHVybiBufWZ1bmN0aW9uIEYodCl7cmV0dXJuIGZ1bmN0aW9uKGUpeyExPT09dChlKSYmKGUucHJldmVudERlZmF1bHQoKSxlLnJldHVyblZhbHVlPSExKX19dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgVih0KX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXtpZighdHx8IWUpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO3N3aXRjaChlLmVuY2Fwc3VsYXRpb24pe2Nhc2Ugby5SLkVtdWxhdGVkOnZhciBuPXRoaXMucmVuZGVyZXJCeUNvbXBJZC5nZXQoZS5pZCk7cmV0dXJuIG58fChuPW5ldyBIKHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMuc2hhcmVkU3R5bGVzSG9zdCxlKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGUuaWQsbikpLG4uYXBwbHlUb0hvc3QodCksbjtjYXNlIG8uUi5OYXRpdmU6Y2FzZSBvLlIuU2hhZG93RG9tOnJldHVybiBuZXcgcSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsdCxlKTtkZWZhdWx0OmlmKCF0aGlzLnJlbmRlcmVyQnlDb21wSWQuaGFzKGUuaWQpKXt2YXIgaT1OKGUuaWQsZS5zdHlsZXMsW10pO3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMoaSksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLHRoaXMuZGVmYXVsdFJlbmRlcmVyKX1yZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXJ9fSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSx0fSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoUltlXSx0KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QmJnQuaW5zZXJ0QmVmb3JlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzZWxlY3RvciAiJyt0KyciIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzJyk7cmV0dXJuIGUudGV4dENvbnRlbnQ9IiIsZX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKGkpe2U9aSsiOiIrZTt2YXIgcj1SW2ldO3I/dC5zZXRBdHRyaWJ1dGVOUyhyLGUsbik6dC5zZXRBdHRyaWJ1dGUoZSxuKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7aWYobil7dmFyIGk9UltuXTtpP3QucmVtb3ZlQXR0cmlidXRlTlMoaSxlKTp0LnJlbW92ZUF0dHJpYnV0ZShuKyI6IitlKX1lbHNlIHQucmVtb3ZlQXR0cmlidXRlKGUpfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLGkpe2kmby5HLkRhc2hDYXNlP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxuLGkmby5HLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1ufSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7biZvLkcuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7QihlLCJwcm9wZXJ0eSIpLHRbZV09bn0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0Lm5vZGVWYWx1ZT1lfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiBCKGUsImxpc3RlbmVyIiksInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLEYobikpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLEYobikpfSx0fSgpLHo9IkAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gQih0LGUpe2lmKHQuY2hhckNvZGVBdCgwKT09PXopdGhyb3cgbmV3IEVycm9yKCJGb3VuZCB0aGUgc3ludGhldGljICIrZSsiICIrdCsnLiBQbGVhc2UgaW5jbHVkZSBlaXRoZXIgIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiBvciAiTm9vcEFuaW1hdGlvbnNNb2R1bGUiIGluIHlvdXIgYXBwbGljYXRpb24uJyl9dmFyIFUsSD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyLmNvbXBvbmVudD1pO3ZhciBvPU4oaS5pZCxpLnN0eWxlcyxbXSk7cmV0dXJuIG4uYWRkU3R5bGVzKG8pLHIuY29udGVudEF0dHI9RC5yZXBsYWNlKE0saS5pZCksci5ob3N0QXR0cj1QLnJlcGxhY2UoTSxpLmlkKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmFwcGx5VG9Ib3N0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsZSx0aGlzLmhvc3RBdHRyLCIiKX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLG4pe3ZhciBpPXQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLGUsbik7cmV0dXJuIHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsaSx0aGlzLmNvbnRlbnRBdHRyLCIiKSxpfSxlfShWKSxxPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIGE9dC5jYWxsKHRoaXMsZSl8fHRoaXM7YS5zaGFyZWRTdHlsZXNIb3N0PW4sYS5ob3N0RWw9aSxhLmNvbXBvbmVudD1yLGEuc2hhZG93Um9vdD1yLmVuY2Fwc3VsYXRpb249PT1vLlIuU2hhZG93RG9tP2kuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pOmkuY3JlYXRlU2hhZG93Um9vdCgpLGEuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KGEuc2hhZG93Um9vdCk7Zm9yKHZhciBzPU4oci5pZCxyLnN0eWxlcyxbXSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2wudGV4dENvbnRlbnQ9c1t1XSxhLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQobCl9cmV0dXJuIGF9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUubm9kZU9yU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQuY2FsbCh0aGlzLHRoaXMubm9kZU9yU2hhZG93Um9vdChlKSxuKX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbixpKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQuY2FsbCh0aGlzLHRoaXMubm9kZU9yU2hhZG93Um9vdChlKSxuKX0sZS5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHQucHJvdG90eXBlLnBhcmVudE5vZGUuY2FsbCh0aGlzLHRoaXMubm9kZU9yU2hhZG93Um9vdChlKSkpfSxlfShWKSxHPSJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZS5fX3N5bWJvbF9ffHxmdW5jdGlvbih0KXtyZXR1cm4iX196b25lX3N5bWJvbF9fIit0fSxRPUcoImFkZEV2ZW50TGlzdGVuZXIiKSxZPUcoInJlbW92ZUV2ZW50TGlzdGVuZXIiKSxXPXt9LFo9Il9fem9uZV9zeW1ib2xfX3Byb3BhZ2F0aW9uU3RvcHBlZCI7InVuZGVmaW5lZCIhPXR5cGVvZiBab25lJiZab25lW0coIkJMQUNLX0xJU1RFRF9FVkVOVFMiKV0mJihVPXt9KTt2YXIgSz1mdW5jdGlvbih0KXtyZXR1cm4hIVUmJlUuaGFzT3duUHJvcGVydHkodCl9LFg9ZnVuY3Rpb24odCl7dmFyIGU9V1t0LnR5cGVdO2lmKGUpe3ZhciBuPXRoaXNbZV07aWYobil7dmFyIGk9W3RdO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4oYT1uWzBdKS56b25lIT09Wm9uZS5jdXJyZW50P2Euem9uZS5ydW4oYS5oYW5kbGVyLHRoaXMsaSk6YS5oYW5kbGVyLmFwcGx5KHRoaXMsaSk7Zm9yKHZhciByPW4uc2xpY2UoKSxvPTA7bzxyLmxlbmd0aCYmITAhPT10W1pdO28rKyl7dmFyIGE7KGE9cltvXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLGkpOmEuaGFuZGxlci5hcHBseSh0aGlzLGkpfX19fSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLm5nWm9uZT1uLGkmJk9iamVjdChyLnUpKGkpfHxvLnBhdGNoRXZlbnQoKSxvfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnBhdGNoRXZlbnQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEV2ZW50JiZFdmVudCYmRXZlbnQucHJvdG90eXBlJiYhRXZlbnQucHJvdG90eXBlLl9fem9uZV9zeW1ib2xfX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbil7dmFyIHQ9RXZlbnQucHJvdG90eXBlLl9fem9uZV9zeW1ib2xfX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1FdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO0V2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzJiYodGhpc1taXT0hMCksdCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj1uO2lmKCF0W1FdfHxvLnouaXNJbkFuZ3VsYXJab25lKCkmJiFLKGUpKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2V7dmFyIGE9V1tlXTthfHwoYT1XW2VdPUcoIkFOR1VMQVIiK2UrIkZBTFNFIikpO3ZhciBzPXRbYV0sdT1zJiZzLmxlbmd0aD4wO3N8fChzPXRbYV09W10pO3ZhciBsPUsoZSk/Wm9uZS5yb290OlpvbmUuY3VycmVudDtpZigwPT09cy5sZW5ndGgpcy5wdXNoKHt6b25lOmwsaGFuZGxlcjpyfSk7ZWxzZXtmb3IodmFyIGM9ITEsZj0wO2Y8cy5sZW5ndGg7ZisrKWlmKHNbZl0uaGFuZGxlcj09PXIpe2M9ITA7YnJlYWt9Y3x8cy5wdXNoKHt6b25lOmwsaGFuZGxlcjpyfSl9dXx8dFtRXShlLFgsITEpfXJldHVybiBmdW5jdGlvbigpe3JldHVybiBpLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLHIpfX0sZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dFtZXTtpZighaSlyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHQsW2UsbiwhMV0pO3ZhciByPVdbZV0sbz1yJiZ0W3JdO2lmKCFvKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7Zm9yKHZhciBhPSExLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihvW3NdLmhhbmRsZXI9PT1uKXthPSEwLG8uc3BsaWNlKHMsMSk7YnJlYWt9YT8wPT09by5sZW5ndGgmJmkuYXBwbHkodCxbZSxYLCExXSk6dC5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHQsW2UsbiwhMV0pfSxlfShqKSxKPXtwYW46ITAscGFuc3RhcnQ6ITAscGFubW92ZTohMCxwYW5lbmQ6ITAscGFuY2FuY2VsOiEwLHBhbmxlZnQ6ITAscGFucmlnaHQ6ITAscGFudXA6ITAscGFuZG93bjohMCxwaW5jaDohMCxwaW5jaHN0YXJ0OiEwLHBpbmNobW92ZTohMCxwaW5jaGVuZDohMCxwaW5jaGNhbmNlbDohMCxwaW5jaGluOiEwLHBpbmNob3V0OiEwLHByZXNzOiEwLHByZXNzdXA6ITAscm90YXRlOiEwLHJvdGF0ZXN0YXJ0OiEwLHJvdGF0ZW1vdmU6ITAscm90YXRlZW5kOiEwLHJvdGF0ZWNhbmNlbDohMCxzd2lwZTohMCxzd2lwZWxlZnQ6ITAsc3dpcGVyaWdodDohMCxzd2lwZXVwOiEwLHN3aXBlZG93bjohMCx0YXA6ITB9LHR0PW5ldyBvLnEoIkhhbW1lckdlc3R1cmVDb25maWciKSxldD1uZXcgby5xKCJIYW1tZXJMb2FkZXIiKSxudD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLl9jb25maWc9bixvLmNvbnNvbGU9aSxvLmxvYWRlcj1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISghSi5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpJiYhdGhpcy5pc0N1c3RvbUV2ZW50KHQpfHwhd2luZG93LkhhbW1lciYmIXRoaXMubG9hZGVyJiYodGhpcy5jb25zb2xlLndhcm4oJ1RoZSAiJyt0KyciIGV2ZW50IGNhbm5vdCBiZSBib3VuZCBiZWNhdXNlIEhhbW1lci5KUyBpcyBub3QgbG9hZGVkIGFuZCBubyBjdXN0b20gbG9hZGVyIGhhcyBiZWVuIHNwZWNpZmllZC4nKSwxKSl9LGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj10aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLCF3aW5kb3cuSGFtbWVyJiZ0aGlzLmxvYWRlcil7dmFyIG89ITEsYT1mdW5jdGlvbigpe289ITB9O3JldHVybiB0aGlzLmxvYWRlcigpLnRoZW4oZnVuY3Rpb24oKXtpZighd2luZG93LkhhbW1lcilyZXR1cm4gaS5jb25zb2xlLndhcm4oIlRoZSBjdXN0b20gSEFNTUVSX0xPQURFUiBjb21wbGV0ZWQsIGJ1dCBIYW1tZXIuSlMgaXMgbm90IHByZXNlbnQuIiksdm9pZChhPWZ1bmN0aW9uKCl7fSk7b3x8KGE9aS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKSl9KS5jYXRjaChmdW5jdGlvbigpe2kuY29uc29sZS53YXJuKCdUaGUgIicrZSsnIiBldmVudCBjYW5ub3QgYmUgYm91bmQgYmVjYXVzZSB0aGUgY3VzdG9tIEhhbW1lci5KUyBsb2FkZXIgZmFpbGVkLicpLGE9ZnVuY3Rpb24oKXt9fSksZnVuY3Rpb24oKXthKCl9fXJldHVybiByLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dmFyIG89aS5fY29uZmlnLmJ1aWxkSGFtbWVyKHQpLGE9ZnVuY3Rpb24odCl7ci5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7bih0KX0pfTtyZXR1cm4gby5vbihlLGEpLGZ1bmN0aW9uKCl7cmV0dXJuIG8ub2ZmKGUsYSl9fSl9LGUucHJvdG90eXBlLmlzQ3VzdG9tRXZlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5ldmVudHMuaW5kZXhPZih0KT4tMX0sZX0oaikscnQ9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sb3Q9e2FsdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hbHRLZXl9LGNvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY3RybEtleX0sbWV0YTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tZXRhS2V5fSxzaGlmdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zaGlmdEtleX19LGF0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT1lLnBhcnNlRXZlbnROYW1lKHQpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsbixpKXt2YXIgcj1lLnBhcnNlRXZlbnROYW1lKG4pLG89ZS5ldmVudENhbGxiYWNrKHIuZnVsbEtleSxpLHRoaXMubWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5vbkFuZENhbmNlbCh0LHIuZG9tRXZlbnROYW1lLG8pfSl9LGUucGFyc2VFdmVudE5hbWU9ZnVuY3Rpb24odCl7dmFyIG49dC50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaT1uLnNoaWZ0KCk7aWYoMD09PW4ubGVuZ3RofHwia2V5ZG93biIhPT1pJiYia2V5dXAiIT09aSlyZXR1cm4gbnVsbDt2YXIgcj1lLl9ub3JtYWxpemVLZXkobi5wb3AoKSksbz0iIjtpZihydC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5kZXhPZih0KTtlPi0xJiYobi5zcGxpY2UoZSwxKSxvKz10KyIuIil9KSxvKz1yLDAhPW4ubGVuZ3RofHwwPT09ci5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGE9e307cmV0dXJuIGEuZG9tRXZlbnROYW1lPWksYS5mdWxsS2V5PW8sYX0sZS5nZXRFdmVudEZ1bGxLZXk9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj1zKCkuZ2V0RXZlbnRLZXkodCk7cmV0dXJuIiAiPT09KG49bi50b0xvd2VyQ2FzZSgpKT9uPSJzcGFjZSI6Ii4iPT09biYmKG49ImRvdCIpLHJ0LmZvckVhY2goZnVuY3Rpb24oaSl7aSE9biYmKDAsb3RbaV0pKHQpJiYoZSs9aSsiLiIpfSksZSs9bn0sZS5ldmVudENhbGxiYWNrPWZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gZnVuY3Rpb24ocil7ZS5nZXRFdmVudEZ1bGxLZXkocik9PT10JiZpLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXtyZXR1cm4gbihyKX0pfX0sZS5fbm9ybWFsaXplS2V5PWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImVzYyI6cmV0dXJuImVzY2FwZSI7ZGVmYXVsdDpyZXR1cm4gdH19LGV9KGopLHN0PWZ1bmN0aW9uKCl7fSx1dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5zYW5pdGl6ZT1mdW5jdGlvbih0LGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7c3dpdGNoKHQpe2Nhc2Ugby5JLk5PTkU6cmV0dXJuIGU7Y2FzZSBvLkkuSFRNTDpyZXR1cm4gZSBpbnN0YW5jZW9mIGN0P2UuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eToodGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJIVE1MIiksT2JqZWN0KG8uRmEpKHRoaXMuX2RvYyxTdHJpbmcoZSkpKTtjYXNlIG8uSS5TVFlMRTpyZXR1cm4gZSBpbnN0YW5jZW9mIGZ0P2UuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eToodGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJTdHlsZSIpLE9iamVjdChvLkdhKShlKSk7Y2FzZSBvLkkuU0NSSVBUOmlmKGUgaW5zdGFuY2VvZiBodClyZXR1cm4gZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5O3Rocm93IHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU2NyaXB0IiksbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSBvLkkuVVJMOnJldHVybiBlIGluc3RhbmNlb2YgcHR8fGUgaW5zdGFuY2VvZiBkdD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiVVJMIiksT2JqZWN0KG8uSGEpKFN0cmluZyhlKSkpO2Nhc2Ugby5JLlJFU09VUkNFX1VSTDppZihlIGluc3RhbmNlb2YgcHQpcmV0dXJuIGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlJlc291cmNlVVJMIiksbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFNlY3VyaXR5Q29udGV4dCAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX19LGUucHJvdG90eXBlLmNoZWNrTm90U2FmZVZhbHVlPWZ1bmN0aW9uKHQsZSl7aWYodCBpbnN0YW5jZW9mIGx0KXRocm93IG5ldyBFcnJvcigiUmVxdWlyZWQgYSBzYWZlICIrZSsiLCBnb3QgYSAiK3QuZ2V0VHlwZU5hbWUoKSsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0SHRtbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGN0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGh0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0VXJsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KHQpfSxlfShzdCksbHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOiAiK3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eSsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSJ9LHR9KCksY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iSFRNTCJ9LGV9KGx0KSxmdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJTdHlsZSJ9LGV9KGx0KSxodD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJTY3JpcHQifSxlfShsdCksZHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iVVJMIn0sZX0obHQpLHB0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc291cmNlVVJMIn0sZX0obHQpLG10PVt7cHJvdmlkZTpvLkIsdXNlVmFsdWU6ci52fSx7cHJvdmlkZTpvLkMsdXNlVmFsdWU6ZnVuY3Rpb24oKXtkLm1ha2VDdXJyZW50KCksXy5pbml0KCl9LG11bHRpOiEwfSx7cHJvdmlkZTpyLnIsdXNlQ2xhc3M6dixkZXBzOlttXX0se3Byb3ZpZGU6bSx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50fSxkZXBzOltdfV0seXQ9T2JqZWN0KG8uVCkoby5BYSwiYnJvd3NlciIsbXQpO2Z1bmN0aW9uIHZ0KCl7cmV0dXJuIG5ldyBvLm19dmFyIGd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXJldHVybiB0LndpdGhTZXJ2ZXJUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6by5jLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOmcsdXNlRXhpc3Rpbmc6by5jfSxiXX19LHR9KCk7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd30sWm44RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigicHNXMCIpLHI9bigibUNoRiIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksT2JqZWN0KGkuYSkoci5hLHQpfX0sYjcxNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgaT1uKCJtclNHIikscj0obigiL1ZZSyIpLG4oIkNjbkciKSxuKCJuNmdHIikpLG89bigiZFdaZyIpLGE9bigiV2Y0cCIpLHM9bigiSzlJYSIpLHU9WyJidXR0b24iLCJjaGVja2JveCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInN1Ym1pdCJdLGw9MCxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixhLHUsYyxmLGgpe3ZhciBkPXQuY2FsbCh0aGlzLHUscixhLGkpfHx0aGlzO3JldHVybiBkLl9lbGVtZW50UmVmPWUsZC5fcGxhdGZvcm09bixkLm5nQ29udHJvbD1pLGQuX2F1dG9maWxsTW9uaXRvcj1mLGQuX3VpZD0ibWF0LWlucHV0LSIrbCsrLGQuX2lzU2VydmVyPSExLGQuZm9jdXNlZD0hMSxkLnN0YXRlQ2hhbmdlcz1uZXcgcy5hLGQuY29udHJvbFR5cGU9Im1hdC1pbnB1dCIsZC5hdXRvZmlsbGVkPSExLGQuX2Rpc2FibGVkPSExLGQuX3JlcXVpcmVkPSExLGQuX3R5cGU9InRleHQiLGQuX3JlYWRvbmx5PSExLGQuX25ldmVyRW1wdHlJbnB1dFR5cGVzPVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIl0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qoby5jKSgpLmhhcyh0KX0pLGQuX2lucHV0VmFsdWVBY2Nlc3Nvcj1jfHxkLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZC5fcHJldmlvdXNOYXRpdmVWYWx1ZT1kLnZhbHVlLGQuaWQ9ZC5pZCxuLklPUyYmaC5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7ZS52YWx1ZXx8ZS5zZWxlY3Rpb25TdGFydHx8ZS5zZWxlY3Rpb25FbmR8fChlLnNldFNlbGVjdGlvblJhbmdlKDEsMSksZS5zZXRTZWxlY3Rpb25SYW5nZSgwLDApKX0pfSksZC5faXNTZXJ2ZXI9IWQuX3BsYXRmb3JtLmlzQnJvd3NlcixkfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChyLmMpKHQpLHRoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pZD10fHx0aGlzLl91aWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyZXF1aXJlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXF1aXJlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlcXVpcmVkPU9iamVjdChyLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90eXBlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdHlwZT10fHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEoKSYmT2JqZWN0KG8uYykoKS5oYXModGhpcy5fdHlwZSkmJih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZT10aGlzLl90eXBlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3QhPT10aGlzLnZhbHVlJiYodGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlYWRvbmx5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRvbmx5fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZG9ubHk9T2JqZWN0KHIuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2F1dG9maWxsTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuYXV0b2ZpbGxlZD1lLmlzQXV0b2ZpbGxlZCx0LnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX0sZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9hdXRvZmlsbE1vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX0sZS5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dGhpcy5uZ0NvbnRyb2wmJnRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLHRoaXMuX2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfSxlLnByb3RvdHlwZS5fZm9jdXNDaGFuZ2VkPWZ1bmN0aW9uKHQpe3Q9PT10aGlzLmZvY3VzZWR8fHRoaXMucmVhZG9ubHl8fCh0aGlzLmZvY3VzZWQ9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlLnByb3RvdHlwZS5fb25JbnB1dD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmFsdWU7dGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZSE9PXQmJih0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlVHlwZT1mdW5jdGlvbigpe2lmKHUuaW5kZXhPZih0aGlzLl90eXBlKT4tMSl0aHJvdyBFcnJvcignSW5wdXQgdHlwZSAiJyt0aGlzLl90eXBlKyJcIiBpc24ndCBzdXBwb3J0ZWQgYnkgbWF0SW5wdXQuIil9LGUucHJvdG90eXBlLl9pc05ldmVyRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXMuaW5kZXhPZih0aGlzLl90eXBlKT4tMX0sZS5wcm90b3R5cGUuX2lzQmFkSW5wdXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIHQmJnQuYmFkSW5wdXR9LGUucHJvdG90eXBlLl9pc1RleHRhcmVhPWZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIj09PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaG91bGRMYWJlbEZsb2F0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9jdXNlZHx8IXRoaXMuZW1wdHl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuc2V0RGVzY3JpYmVkQnlJZHM9ZnVuY3Rpb24odCl7dGhpcy5fYXJpYURlc2NyaWJlZGJ5PXQuam9pbigiICIpfSxlLnByb3RvdHlwZS5vbkNvbnRhaW5lckNsaWNrPWZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpfSxlfShPYmplY3QoYS5DKShmdW5jdGlvbih0LGUsbixpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9aX0pKSxmPWZ1bmN0aW9uKCl7fX0sYjdtVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIGkuYihlLHQpLGV9KEVycm9yKX0sYm5lNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigiNmJsRiIpLHI9bigiaXNieSIpLG89bigiMkJkaiIpLGE9bigiNjdZLyIpO2Z1bmN0aW9uIHModCxlLG4sdSl7cmV0dXJuIE9iamVjdChvLmEpKG4pJiYodT1uLG49dm9pZCAwKSx1P3ModCxlLG4pLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyLmEpKHQpP3UuYXBwbHkodm9pZCAwLHQpOnUodCl9KSk6bmV3IGkuYShmdW5jdGlvbihpKXshZnVuY3Rpb24gdChlLG4saSxyLG8pe3ZhciBhO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVFdmVudExpc3RlbmVyfShlKSl7dmFyIHM9ZTtlLmFkZEV2ZW50TGlzdGVuZXIobixpLG8pLGE9ZnVuY3Rpb24oKXtyZXR1cm4gcy5yZW1vdmVFdmVudExpc3RlbmVyKG4saSxvKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub24mJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9mZn0oZSkpe3ZhciB1PWU7ZS5vbihuLGkpLGE9ZnVuY3Rpb24oKXtyZXR1cm4gdS5vZmYobixpKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWRkTGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUxpc3RlbmVyfShlKSl7dmFyIGw9ZTtlLmFkZExpc3RlbmVyKG4saSksYT1mdW5jdGlvbigpe3JldHVybiBsLnJlbW92ZUxpc3RlbmVyKG4saSl9fWVsc2V7aWYoIWV8fCFlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO2Zvcih2YXIgYz0wLGY9ZS5sZW5ndGg7YzxmO2MrKyl0KGVbY10sbixpLHIsbyl9ci5hZGQoYSl9KHQsZSxmdW5jdGlvbih0KXtpLm5leHQoYXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk6dCl9LGksbil9KX1PYmplY3R9LGJ1anQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJVb2RIIiksbigiSXAwUiIpLG4oIkZ6cWMiKSxuKCJXZjRwIikpLG89bigiZFdaZyIpLGE9bigid0Z3MSIpLHM9KG4oImxMQVAiKSxpLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b25bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfUBtZWRpYSAoaG92ZXI6bm9uZSl7Lm1hdC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXJhaXNlZC1idXR0b246bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtib3gtc2hhZG93Om5vbmV9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDAgMCAwIHJnYmEoMCwwLDAsLjIpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTQpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDAgMCAwIHJnYmEoMCwwLDAsLjIpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTQpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWJbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiW2Rpc2FibGVkXXtib3gtc2hhZG93Om5vbmV9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzoxNnB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1pbmktZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1taW5pLWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1taW5pLWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiW2Rpc2FibGVkXXtib3gtc2hhZG93Om5vbmV9Lm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLC4yKSwwIDEycHggMTdweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtaWNvbi1idXR0b24gaXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJhZGl1czppbmhlcml0O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGN1YmljLWJlemllciguMzUsMCwuMjUsMSksYmFja2dyb3VuZC1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbntvdXRsaW5lOnNvbGlkIDFweH19Il0sZGF0YTp7fX0pKTtmdW5jdGlvbiB1KHQpe3JldHVybiBpLmxiKDIsW2kuaGIoNDAyNjUzMTg0LDEse3JpcHBsZTowfSksKHQoKSgpLGkuUmEoMSwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1idXR0b24td3JhcHBlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLmFiKG51bGwsMCksKHQoKSgpLGkuUmEoMywwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWJ1dHRvbi1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0UmlwcGxlIiwiIl1dLFtbMiwibWF0LWJ1dHRvbi1yaXBwbGUtcm91bmQiLG51bGxdLFsyLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDQsMjEyOTkyLFtbMSw0XV0sMCxyLnUsW2kuayxpLnosby5hLFsyLHIua10sWzIsYS5hXV0se2NlbnRlcmVkOlswLCJjZW50ZXJlZCJdLGRpc2FibGVkOlsxLCJkaXNhYmxlZCJdLHRyaWdnZXI6WzIsInRyaWdnZXIiXX0sbnVsbCksKHQoKSgpLGkuUmEoNSwwLG51bGwsbnVsbCwwLCJkaXYiLFtbImNsYXNzIiwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSw0LDAsbi5pc0ljb25CdXR0b24sbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwzLDAsbi5pc1JvdW5kQnV0dG9ufHxuLmlzSWNvbkJ1dHRvbixpLmJiKGUsNCkudW5ib3VuZGVkKX0pfXZhciBsPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9QG1lZGlhIChob3Zlcjpub25lKXsubWF0LWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9fS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXJhaXNlZC1idXR0b257dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1pY29uLWJ1dHRvbiBpe2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKSxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9fS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTpibG9jaztmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24sLm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtbWluaS1mYWIsLm1hdC1yYWlzZWQtYnV0dG9ue291dGxpbmU6c29saWQgMXB4fX0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gaS5sYigyLFtpLmhiKDQwMjY1MzE4NCwxLHtyaXBwbGU6MH0pLCh0KCkoKSxpLlJhKDEsMCxudWxsLG51bGwsMSwic3BhbiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXdyYXBwZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5hYihudWxsLDApLCh0KCkoKSxpLlJhKDMsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tcmlwcGxlIG1hdC1yaXBwbGUiXSxbIm1hdFJpcHBsZSIsIiJdXSxbWzIsIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixudWxsXSxbMiwibWF0LXJpcHBsZS11bmJvdW5kZWQiLG51bGxdXSxudWxsLG51bGwsbnVsbCxudWxsKSksaS5RYSg0LDIxMjk5MixbWzEsNF1dLDAsci51LFtpLmssaS56LG8uYSxbMixyLmtdLFsyLGEuYV1dLHtjZW50ZXJlZDpbMCwiY2VudGVyZWQiXSxkaXNhYmxlZDpbMSwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsyLCJ0cmlnZ2VyIl19LG51bGwpLCh0KCkoKSxpLlJhKDUsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNCwwLG4uaXNJY29uQnV0dG9uLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMywwLG4uaXNSb3VuZEJ1dHRvbnx8bi5pc0ljb25CdXR0b24saS5iYihlLDQpLnVuYm91bmRlZCl9KX19LGM0V206ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KTt2YXIgaT1uKCJDY25HIikscj1uKCJOc2g1Iiksbz1uKCJJcDBSIiksYT0obigiRnpxYyIpLG4oIldmNHAiKSxuKCJkV1pnIiksbigicUFsUyIpKTtuKCJsTEFQIiksbigid0Z3MSIpO3ZhciBzPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIHUodCl7cmV0dXJuIGkubGIoMixbaS5hYihudWxsLDApXSxudWxsLG51bGwpfXZhciBsPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InRyYW5zZm9ybSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToib3Blbiwgb3Blbi1pbnN0YW50IixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwgMCwgMCkiLHZpc2liaWxpdHk6InZpc2libGUifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToidm9pZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnsiYm94LXNoYWRvdyI6Im5vbmUiLHZpc2liaWxpdHk6ImhpZGRlbiJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2b2lkID0+IG9wZW4taW5zdGFudCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMG1zIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPD0+IG9wZW4sIG9wZW4taW5zdGFudCA9PiB2b2lkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiI0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBjKHQpe3JldHVybiBpLmxiKDIsW2kuYWIobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgZj1pLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1kcmF3ZXItY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW59Lm1hdC1kcmF3ZXItY29udGFpbmVyW2Z1bGxzY3JlZW5de3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtZHJhd2VyLWNvbnRhaW5lcltmdWxsc2NyZWVuXS5tYXQtZHJhd2VyLW9wZW5lZHtvdmVyZmxvdzpoaWRkZW59Lm1hdC1kcmF3ZXItY29udGFpbmVyLm1hdC1kcmF3ZXItY29udGFpbmVyLWV4cGxpY2l0LWJhY2tkcm9wIC5tYXQtZHJhd2VyLXNpZGV7ei1pbmRleDozfS5tYXQtZHJhd2VyLWJhY2tkcm9we3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7ei1pbmRleDozO3Zpc2liaWxpdHk6aGlkZGVufS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257dmlzaWJpbGl0eTp2aXNpYmxlfS5tYXQtZHJhd2VyLXRyYW5zaXRpb24gLm1hdC1kcmF3ZXItYmFja2Ryb3B7dHJhbnNpdGlvbi1kdXJhdGlvbjouNHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpiYWNrZ3JvdW5kLWNvbG9yLHZpc2liaWxpdHl9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXItYmFja2Ryb3B7b3BhY2l0eTouNX19Lm1hdC1kcmF3ZXItY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5tYXQtZHJhd2VyLXRyYW5zaXRpb24gLm1hdC1kcmF3ZXItY29udGVudHt0cmFuc2l0aW9uLWR1cmF0aW9uOi40czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybSxtYXJnaW4tbGVmdCxtYXJnaW4tcmlnaHR9Lm1hdC1kcmF3ZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDo0O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7ei1pbmRleDozO291dGxpbmU6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3cteTphdXRvO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLFtkaXI9cnRsXSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtib3JkZXItcmlnaHQ6c29saWQgMXB4IGN1cnJlbnRDb2xvcn19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmQsW2Rpcj1ydGxdIC5tYXQtZHJhd2Vye2JvcmRlci1sZWZ0OnNvbGlkIDFweCBjdXJyZW50Q29sb3I7Ym9yZGVyLXJpZ2h0Om5vbmV9fS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItc2lkZXt6LWluZGV4OjJ9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfVtkaXI9cnRsXSAubWF0LWRyYXdlcnt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfVtkaXI9cnRsXSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtsZWZ0OjA7cmlnaHQ6YXV0bzt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX0ubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1zaWRlbmF2LWZpeGVke3Bvc2l0aW9uOmZpeGVkfSJdLGRhdGE6e319KTtmdW5jdGlvbiBoKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItYmFja2Ryb3AiXV0sW1syLCJtYXQtZHJhd2VyLXNob3duIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuImNsaWNrIj09PWUmJihpPSExIT09dC5jb21wb25lbnQuX29uQmFja2Ryb3BDbGlja2VkKCkmJmkpLGl9LG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5faXNTaG93aW5nQmFja2Ryb3AoKSl9KX1mdW5jdGlvbiBkKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsMywibWF0LXNpZGVuYXYtY29udGVudCIsW1siY2RrU2Nyb2xsYWJsZSIsIiJdLFsiY2xhc3MiLCJtYXQtZHJhd2VyLWNvbnRlbnQgbWF0LXNpZGVuYXYtY29udGVudCJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLHUscykpLGkuUWEoMSwyMTI5OTIsW1sxLDRdXSwwLGEuYSxbaS5rLGEuYyxpLnpdLG51bGwsbnVsbCksaS5RYSgyLDEwOTc3MjgsbnVsbCwwLHIuZyxbaS5oLHIuZl0sbnVsbCxudWxsKSxpLmFiKDAsMildLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxpLmJiKGUsMikuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMubGVmdCxpLmJiKGUsMikuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMucmlnaHQpfSl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5sYigyLFtpLmhiKDY3MTA4ODY0MCwxLHtzY3JvbGxhYmxlOjB9KSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGgpKSxpLlFhKDIsMTYzODQsbnVsbCwwLG8uayxbaS5RLGkuTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksaS5hYihudWxsLDApLGkuYWIobnVsbCwxKSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGQpKSxpLlFhKDYsMTYzODQsbnVsbCwwLG8uayxbaS5RLGkuTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDIsMCxuLmhhc0JhY2tkcm9wKSx0KGUsNiwwLCFuLl9jb250ZW50KX0sbnVsbCl9fSxkSnJNOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJzZVAzIiksbigiSXAwUiIpKSxvPW4oIk0yTHgiKSxhPShuKCJXZjRwIiksbigiRnpxYyIpLG4oImRXWmciKSxuKCJ3RncxIiksaS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1pbmZpeHtib3JkZXItaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LHRyYW5zcGFyZW50KX19Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JveC1zaXppbmc6Y29udGVudC1ib3g7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxjb2xvciAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksd2lkdGggLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrO3RyYW5zaXRpb246bm9uZX0ubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltwbGFjZWhvbGRlcl06bm90KDpwbGFjZWhvbGRlci1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsOm5vdCgubWF0LWZvcm0tZmllbGQtZW1wdHkpe3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2Zvcm06c2NhbGVZKDEuMDAwMSl9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7d2lkdGg6MTAwJTt0cmFuc2Zvcm0tb3JpZ2luOjUwJTt0cmFuc2Zvcm06c2NhbGVYKC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBjdWJpYy1iZXppZXIoLjU1LDAsLjU1LC4yKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxvcGFjaXR5IC4xcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxiYWNrZ3JvdW5kLWNvbG9yIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtwYWRkaW5nOi43NWVtIC43NWVtIDAgLjc1ZW19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7Y29udGVudDonJztkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2hlaWdodDoxcHg7d2lkdGg6MTAwJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7Ym90dG9tOjA7aGVpZ2h0OjJweH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGw6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgLjZzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwuX21hdC1hbmltYXRpb24tbm9vcGFibGU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwYWRkaW5nOjAgMWVtfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDEwMHB4KTstbXMtdHJhbnNmb3JtOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbnt3aWR0aDoxZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2ZvbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntmb250LXNpemU6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMXB4fX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0b3A6MDtoZWlnaHQ6MnB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4fX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQ6bm90KC5tYXQtZm9jdXNlZCkgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MXB4fSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7bWFyZ2luOi4yNWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtZmxleHtwYWRkaW5nOjAgLjc1ZW0gMCAuNzVlbTttYXJnaW4tdG9wOi0uMjVlbTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3VmZml4e3RvcDouMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjI1ZW07bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO21pbi13aWR0aDo1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4O2JvcmRlci1yaWdodC1zdHlsZTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6MCA1cHggNXB4IDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMDtib3JkZXItbGVmdC1zdHlsZTpub25lO2ZsZXgtZ3JvdzoxfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6bm9uZTtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci1yYWRpdXM6LjAwMDAwMXB4O2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItdG9wLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2sgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXdpZHRoOjJweDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMXMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmU6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXIgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuNnMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtb3V0bGluZXt0cmFuc2l0aW9uOm5vbmV9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7cGFkZGluZy10b3A6Ljc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7Ym90dG9tOjA7aGVpZ2h0OjJweH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowO2JvcmRlci10b3A6MnB4fX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHh9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IC42cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtaW5wdXQtZWxlbWVudHtmb250OmluaGVyaXQ7YmFja2dyb3VuZDowIDA7Y29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207dGV4dC1hbGlnbjppbmhlcml0fS5tYXQtaW5wdXQtZWxlbWVudDotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLWNsZWFyLC5tYXQtaW5wdXQtZWxlbWVudDo6LW1zLXJldmVhbHtkaXNwbGF5Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2Fwcy1sb2NrLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY29udGFjdHMtYXV0by1maWxsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY3JlZGVudGlhbHMtYXV0by1maWxsLWJ1dHRvbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPXdlZWtdOjphZnRlcntjb250ZW50OicgJzt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4fS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpjb2xvciAuNHMgLjEzM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgLjRzIC4xMzNzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpfS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcnt0cmFuc2l0aW9uOmNvbG9yIC40cyAuMTMzcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgLjRzIC4xMzNzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cmVzaXplOnZlcnRpY2FsO292ZXJmbG93OmF1dG99dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnQuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLm1hdC1pbnB1dC1lbGVtZW50e3BhZGRpbmc6MnB4IDA7bWFyZ2luOi0ycHggMH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToidHJhbnNpdGlvbk1lc3NhZ2VzIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJlbnRlciIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntvcGFjaXR5OjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2b2lkID0+IGVudGVyIixhbmltYXRpb246W3t0eXBlOjYsc3R5bGVzOntvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0xMDAlKSJ9LG9mZnNldDpudWxsfSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIn1dLG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KSk7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLlJhKDEsMCxudWxsLG51bGwsMywiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuUmEoMiwwLG51bGwsbnVsbCwwLCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSgzLDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSg0LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSg1LDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIG1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuUmEoNiwwLG51bGwsbnVsbCwwLCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSg3LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSg4LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKV0sbnVsbCxudWxsKX1mdW5jdGlvbiB1KHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXByZWZpeCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLmFiKG51bGwsMCldLG51bGwsbnVsbCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwyKSwodCgpKCksaS5qYigyLG51bGwsWyIiLCIiXSkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDIsMCxlLmNvbXBvbmVudC5fY29udHJvbC5wbGFjZWhvbGRlcil9KX1mdW5jdGlvbiBjKHQpe3JldHVybiBpLmxiKDAsW2kuYWIobnVsbCwzKSwodCgpKCksaS5JYSgwLG51bGwsbnVsbCwwKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2xhc3MiLCJtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWQgbWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmpiKC0xLG51bGwsWyJceGEwKiJdKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsW1s0LDBdLFsibGFiZWwiLDFdXSxudWxsLDgsImxhYmVsIixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLWxhYmVsIl1dLFtbOCwiaWQiLDBdLFsxLCJmb3IiLDBdLFsxLCJhcmlhLW93bnMiLDBdLFsyLCJtYXQtZW1wdHkiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1lbXB0eSIsbnVsbF0sWzIsIm1hdC1hY2NlbnQiLG51bGxdLFsyLCJtYXQtd2FybiIsbnVsbF1dLFtbbnVsbCwiY2RrT2JzZXJ2ZUNvbnRlbnQiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJjZGtPYnNlcnZlQ29udGVudCI9PT1lJiYoaT0hMSE9PXQuY29tcG9uZW50LnVwZGF0ZU91dGxpbmVHYXAoKSYmaSksaX0sbnVsbCxudWxsKSksaS5RYSgxLDE2Mzg0LG51bGwsMCxyLm8sW10se25nU3dpdGNoOlswLCJuZ1N3aXRjaCJdfSxudWxsKSxpLlFhKDIsMTE5NjAzMixudWxsLDAsby5hLFtvLmIsaS5rLGkuel0sbnVsbCx7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0pLCh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbCkpLGkuUWEoNCwyNzg1MjgsbnVsbCwwLHIucCxbaS5RLGkuTixyLm9dLHtuZ1N3aXRjaENhc2U6WzAsIm5nU3dpdGNoQ2FzZSJdfSxudWxsKSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGMpKSxpLlFhKDYsMjc4NTI4LG51bGwsMCxyLnAsW2kuUSxpLk4sci5vXSx7bmdTd2l0Y2hDYXNlOlswLCJuZ1N3aXRjaENhc2UiXX0sbnVsbCksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxmKSksaS5RYSg4LDE2Mzg0LG51bGwsMCxyLmssW2kuUSxpLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsbi5faGFzTGFiZWwoKSksdChlLDQsMCwhMSksdChlLDYsMCwhMCksdChlLDgsMCwhbi5oaWRlUmVxdWlyZWRNYXJrZXImJm4uX2NvbnRyb2wucmVxdWlyZWQmJiFuLl9jb250cm9sLmRpc2FibGVkKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLG4uX2xhYmVsSWQsbi5fY29udHJvbC5pZCxuLl9jb250cm9sLmlkLG4uX2NvbnRyb2wuZW1wdHkmJiFuLl9zaG91bGRBbHdheXNGbG9hdCxuLl9jb250cm9sLmVtcHR5JiYhbi5fc2hvdWxkQWx3YXlzRmxvYXQsImFjY2VudCI9PW4uY29sb3IsIndhcm4iPT1uLmNvbG9yKX0pfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtc3VmZml4Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCw0KV0sbnVsbCxudWxsKX1mdW5jdGlvbiBwKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxbWzEsMF0sWyJ1bmRlcmxpbmUiLDFdXSxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuUmEoMSwwLG51bGwsbnVsbCwwLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXJpcHBsZSJdXSxbWzIsIm1hdC1hY2NlbnQiLG51bGxdLFsyLCJtYXQtd2FybiIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKV0sbnVsbCxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsImFjY2VudCI9PW4uY29sb3IsIndhcm4iPT1uLmNvbG9yKX0pfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwxLCJkaXYiLFtdLFtbMjQsIkB0cmFuc2l0aW9uTWVzc2FnZXMiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSksaS5hYihudWxsLDUpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpfSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtaGludCJdXSxbWzgsImlkIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmpiKDEsbnVsbCxbIiIsIiJdKSldLG51bGwsZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLG4uX2hpbnRMYWJlbElkKSx0KGUsMSwwLG4uaGludExhYmVsKX0pfWZ1bmN0aW9uIHYodCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCw1LCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtaGludC13cmFwcGVyIl1dLFtbMjQsIkB0cmFuc2l0aW9uTWVzc2FnZXMiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCx5KSksaS5RYSgyLDE2Mzg0LG51bGwsMCxyLmssW2kuUSxpLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLGkuYWIobnVsbCw2KSwodCgpKCksaS5SYSg0LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLmFiKG51bGwsNyldLGZ1bmN0aW9uKHQsZSl7dChlLDIsMCxlLmNvbXBvbmVudC5oaW50TGFiZWwpfSxmdW5jdGlvbih0LGUpe3QoZSwwLDAsZS5jb21wb25lbnQuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX0pfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGkubGIoMixbaS5oYig2NzEwODg2NDAsMSx7dW5kZXJsaW5lUmVmOjB9KSxpLmhiKDQwMjY1MzE4NCwyLHtfY29ubmVjdGlvbkNvbnRhaW5lclJlZjowfSksaS5oYig0MDI2NTMxODQsMyx7X2lucHV0Q29udGFpbmVyUmVmOjB9KSxpLmhiKDY3MTA4ODY0MCw0LHtfbGFiZWw6MH0pLCh0KCkoKSxpLlJhKDQsMCxudWxsLG51bGwsMjAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLlJhKDUsMCxbWzIsMF0sWyJjb25uZWN0aW9uQ29udGFpbmVyIiwxXV0sbnVsbCwxMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLWZsZXgiXV0sbnVsbCxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMCxyPXQuY29tcG9uZW50O3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PShyLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2smJnIuX2NvbnRyb2wub25Db250YWluZXJDbGljayhuKSkmJmkpLGl9LG51bGwsbnVsbCkpLCh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwscykpLGkuUWEoNywxNjM4NCxudWxsLDAsci5rLFtpLlEsaS5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLHUpKSxpLlFhKDksMTYzODQsbnVsbCwwLHIuayxbaS5RLGkuTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksKHQoKSgpLGkuUmEoMTAsMCxbWzMsMF0sWyJpbnB1dENvbnRhaW5lciIsMV1dLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLWluZml4Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwxKSwodCgpKCksaS5SYSgxMiwwLG51bGwsbnVsbCwyLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxoKSksaS5RYSgxNCwxNjM4NCxudWxsLDAsci5rLFtpLlEsaS5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGQpKSxpLlFhKDE2LDE2Mzg0LG51bGwsMCxyLmssW2kuUSxpLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLCh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwscCkpLGkuUWEoMTgsMTYzODQsbnVsbCwwLHIuayxbaS5RLGkuTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksKHQoKSgpLGkuUmEoMTksMCxudWxsLG51bGwsNSwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuUWEoMjAsMTYzODQsbnVsbCwwLHIubyxbXSx7bmdTd2l0Y2g6WzAsIm5nU3dpdGNoIl19LG51bGwpLCh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbSkpLGkuUWEoMjIsMjc4NTI4LG51bGwsMCxyLnAsW2kuUSxpLk4sci5vXSx7bmdTd2l0Y2hDYXNlOlswLCJuZ1N3aXRjaENhc2UiXX0sbnVsbCksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCx2KSksaS5RYSgyNCwyNzg1MjgsbnVsbCwwLHIucCxbaS5RLGkuTixyLm9dLHtuZ1N3aXRjaENhc2U6WzAsIm5nU3dpdGNoQ2FzZSJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNywwLCJvdXRsaW5lIj09bi5hcHBlYXJhbmNlKSx0KGUsOSwwLG4uX3ByZWZpeENoaWxkcmVuLmxlbmd0aCksdChlLDE0LDAsbi5faGFzRmxvYXRpbmdMYWJlbCgpKSx0KGUsMTYsMCxuLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLHQoZSwxOCwwLCJvdXRsaW5lIiE9bi5hcHBlYXJhbmNlKSx0KGUsMjAsMCxuLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKSx0KGUsMjIsMCwiZXJyb3IiKSx0KGUsMjQsMCwiaGludCIpfSxudWxsKX19LGRXWmc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pO3ZhciBpLHIsbz1uKCJDY25HIiksYT1uKCJJcDBSIikscz0idW5kZWZpbmVkIiE9dHlwZW9mIEludGwmJkludGwudjhCcmVha0l0ZXJhdG9yLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3BsYXRmb3JtSWQ9dCx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP09iamVjdChhLnQpKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIXMpJiYidW5kZWZpbmVkIiE9dHlwZW9mIENTUyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlkpKG8uQiw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIGwoKXtpZihudWxsPT1pJiYidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGk9ITB9fSkpfWZpbmFsbHl7aT1pfHwhMX1yZXR1cm4gaX12YXIgYz1bImNvbG9yIiwiYnV0dG9uIiwiY2hlY2tib3giLCJkYXRlIiwiZGF0ZXRpbWUtbG9jYWwiLCJlbWFpbCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsIm1vbnRoIiwibnVtYmVyIiwicGFzc3dvcmQiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzZWFyY2giLCJzdWJtaXQiLCJ0ZWwiLCJ0ZXh0IiwidGltZSIsInVybCIsIndlZWsiXTtmdW5jdGlvbiBmKCl7aWYocilyZXR1cm4gcjtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIHI9bmV3IFNldChjKTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiByPW5ldyBTZXQoYy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJ0eXBlIixlKSx0LnR5cGU9PT1lfSkpfXZhciBoPWZ1bmN0aW9uKCl7fX0sZHpnVDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGk9bigibXJTRyIpLHI9bigibmtZNyIpLG89bigiaXNieSIpLGE9bigiTUdCUyIpLHM9bigiem90bSIpLHU9bigiSVVUYiIpLGw9e307ZnVuY3Rpb24gYygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLGk9bnVsbDtyZXR1cm4gT2JqZWN0KHIuYSkodFt0Lmxlbmd0aC0xXSkmJihpPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJk9iamVjdChvLmEpKHRbMF0pJiYodD10WzBdKSxPYmplY3QodS5hKSh0LGkpLmxpZnQobmV3IGYobikpfXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJlc3VsdFNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGgodCx0aGlzLnJlc3VsdFNlbGVjdG9yKSl9LHR9KCksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucmVzdWx0U2VsZWN0b3I9bixpLmFjdGl2ZT0wLGkudmFsdWVzPVtdLGkub2JzZXJ2YWJsZXM9W10saX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy52YWx1ZXMucHVzaChsKSx0aGlzLm9ic2VydmFibGVzLnB1c2godCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMub2JzZXJ2YWJsZXMsZT10Lmxlbmd0aDtpZigwPT09ZSl0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7ZWxzZXt0aGlzLmFjdGl2ZT1lLHRoaXMudG9SZXNwb25kPWU7Zm9yKHZhciBuPTA7bjxlO24rKyl7dmFyIGk9dFtuXTt0aGlzLmFkZChPYmplY3Qocy5hKSh0aGlzLGksaSxuKSl9fX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7MD09KHRoaXMuYWN0aXZlLT0xKSYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dGhpcy52YWx1ZXMsYT10aGlzLnRvUmVzcG9uZD9vW25dPT09bD8tLXRoaXMudG9SZXNwb25kOnRoaXMudG9SZXNwb25kOjA7b1tuXT1lLDA9PT1hJiYodGhpcy5yZXN1bHRTZWxlY3Rvcj90aGlzLl90cnlSZXN1bHRTZWxlY3RvcihvKTp0aGlzLmRlc3RpbmF0aW9uLm5leHQoby5zbGljZSgpKSl9LGUucHJvdG90eXBlLl90cnlSZXN1bHRTZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGEuYSl9LGVEa1A6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KTt2YXIgaT1uKCJDY25HIikscj1uKCJuNmdHIiksbz1uKCJxQWxTIiksYT1uKCJJcDBSIikscz1uKCJtclNHIiksdT1uKCJLOUlhIiksbD1uKCI2YmxGIiksYz1uKCJwMGliIiksZj1uKCJwdWdUIiksaD1uKCJ0OWZaIiksZD1uKCJueTI0IikscD1uKCJkV1pnIiksbT1uKCI0YzM1IikseT0obigiWVNoMiIpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oKXt9LHR9KCkpLHY9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyB5LHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSExLHRoaXMuYmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCIsdCYmT2JqZWN0LmtleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT10W25dfSl9fSgpO2Z1bmN0aW9uIGcodCxlKXtpZigidG9wIiE9PWUmJiJib3R0b20iIT09ZSYmImNlbnRlciIhPT1lKXRocm93IEVycm9yKCJDb25uZWN0ZWRQb3NpdGlvbjogSW52YWxpZCAiK3QrJyAiJytlKyciLiBFeHBlY3RlZCAidG9wIiwgImJvdHRvbSIgb3IgImNlbnRlciIuJyl9ZnVuY3Rpb24gYih0LGUpe2lmKCJzdGFydCIhPT1lJiYiZW5kIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInN0YXJ0IiwgImVuZCIgb3IgImNlbnRlciIuJyl9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2NhbkJlRW5hYmxlZCgpKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1PYmplY3Qoci5kKSgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD1PYmplY3Qoci5kKSgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9pc0VuYWJsZWQpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlPXRoaXMuX2RvY3VtZW50LmJvZHksbj10LnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIixpPWUuc3R5bGUuc2Nyb2xsQmVoYXZpb3J8fCIiO3RoaXMuX2lzRW5hYmxlZD0hMSx0LnN0eWxlLmxlZnQ9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQsdC5zdHlsZS50b3A9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcCx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPWUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iLHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPW4sZS5zdHlsZS5zY3JvbGxCZWhhdmlvcj1pfX0sdC5wcm90b3R5cGUuX2NhbkJlRW5hYmxlZD1mdW5jdGlvbigpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO3ZhciB0PXRoaXMuX2RvY3VtZW50LmJvZHksZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiB0LnNjcm9sbEhlaWdodD5lLmhlaWdodHx8dC5zY3JvbGxXaWR0aD5lLndpZHRofSx0fSgpO2Z1bmN0aW9uIHcoKXtyZXR1cm4gRXJyb3IoIlNjcm9sbCBzdHJhdGVneSBoYXMgYWxyZWFkeSBiZWVuIGF0dGFjaGVkLiIpfXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2YXIgcj10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPW4sdGhpcy5fY29uZmlnPWksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPWZ1bmN0aW9uKCl7ci5kaXNhYmxlKCksci5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZyLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX292ZXJsYXlSZWYuZGV0YWNoKCl9KX19cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IHcoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbil7dmFyIGU9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgwKTt0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ+MT8odGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcCx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgZT10Ll92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3A7TWF0aC5hYnMoZS10Ll9pbml0aWFsU2Nyb2xsUG9zaXRpb24pPnQuX2NvbmZpZy50aHJlc2hvbGQ/dC5fZGV0YWNoKCk6dC5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1lLnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX0sdH0oKTtmdW5jdGlvbiBDKHQsZSl7cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC5ib3R0b208ZS50b3B8fHQudG9wPmUuYm90dG9tfHx0LnJpZ2h0PGUubGVmdHx8dC5sZWZ0PmUucmlnaHR9KX1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC50b3A8ZS50b3B8fHQuYm90dG9tPmUuYm90dG9tfHx0LmxlZnQ8ZS5sZWZ0fHx0LnJpZ2h0PmUucmlnaHR9KX12YXIgRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9jb25maWc9aSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX292ZXJsYXlSZWYpdGhyb3cgdygpO3RoaXMuX292ZXJsYXlSZWY9dH0sdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb258fCh0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCh0aGlzLl9jb25maWc/dGhpcy5fY29uZmlnLnNjcm9sbFRocm90dGxlOjApLnN1YnNjcmliZShmdW5jdGlvbigpe2lmKHQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0Ll9jb25maWcmJnQuX2NvbmZpZy5hdXRvQ2xvc2Upe3ZhciBlPXQuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10Ll92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLGk9bi53aWR0aCxyPW4uaGVpZ2h0O0MoZSxbe3dpZHRoOmksaGVpZ2h0OnIsYm90dG9tOnIscmlnaHQ6aSx0b3A6MCxsZWZ0OjB9XSkmJih0LmRpc2FibGUoKSx0Ll9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX292ZXJsYXlSZWYuZGV0YWNoKCl9KSl9fSkpfSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfSx0fSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3ZhciByPXRoaXM7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLm5vb3A9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHl9LHRoaXMuY2xvc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KHIuX3Njcm9sbERpc3BhdGNoZXIsci5fbmdab25lLHIuX3ZpZXdwb3J0UnVsZXIsdCl9LHRoaXMuYmxvY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF8oci5fdmlld3BvcnRSdWxlcixyLl9kb2N1bWVudCl9LHRoaXMucmVwb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEUoci5fc2Nyb2xsRGlzcGF0Y2hlcixyLl92aWV3cG9ydFJ1bGVyLHIuX25nWm9uZSx0KX0sdGhpcy5fZG9jdW1lbnQ9aX1yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuWSkoby5jKSxPYmplY3QoaS5ZKShvLmUpLE9iamVjdChpLlkpKGkueiksT2JqZWN0KGkuWSkoYS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fYXR0YWNoZWRPdmVybGF5cz1bXSx0aGlzLl9rZXlkb3duTGlzdGVuZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUuX2F0dGFjaGVkT3ZlcmxheXMsaT1uLmxlbmd0aC0xO2k+LTE7aS0tKWlmKG5baV0uX2tleWRvd25FdmVudFN1YnNjcmlwdGlvbnM+MCl7bltpXS5fa2V5ZG93bkV2ZW50cy5uZXh0KHQpO2JyZWFrfX0sdGhpcy5fZG9jdW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXRhY2goKX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3RoaXMucmVtb3ZlKHQpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciwhMCksdGhpcy5faXNBdHRhY2hlZD0hMCksdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5pbmRleE9mKHQpO2U+LTEmJnRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc3BsaWNlKGUsMSksMD09PXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZ0aGlzLl9kZXRhY2goKX0sdC5wcm90b3R5cGUuX2RldGFjaD1mdW5jdGlvbigpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciwhMCksdGhpcy5faXNBdHRhY2hlZD0hMSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKGEuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2N1bWVudD10fXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lckVsZW1lbnQmJnRoaXMuX2NvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fY29udGFpbmVyRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lckVsZW1lbnQpfSx0LnByb3RvdHlwZS5nZXRDb250YWluZXJFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckVsZW1lbnR8fHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnR9LHQucHJvdG90eXBlLl9jcmVhdGVDb250YWluZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWNvbnRhaW5lciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdGhpcy5fY29udGFpbmVyRWxlbWVudD10fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKShhLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1uLHRoaXMuX2NvbmZpZz1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1vLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgdS5hLHRoaXMuX2F0dGFjaG1lbnRzPW5ldyB1LmEsdGhpcy5fZGV0YWNobWVudHM9bmV3IHUuYSx0aGlzLl9rZXlkb3duRXZlbnRzT2JzZXJ2YWJsZT1sLmEuY3JlYXRlKGZ1bmN0aW9uKHQpe3ZhciBlPXMuX2tleWRvd25FdmVudHMuc3Vic2NyaWJlKHQpO3JldHVybiBzLl9rZXlkb3duRXZlbnRTdWJzY3JpcHRpb25zKyssZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCkscy5fa2V5ZG93bkV2ZW50U3Vic2NyaXB0aW9ucy0tfX0pLHRoaXMuX2tleWRvd25FdmVudHM9bmV3IHUuYSx0aGlzLl9rZXlkb3duRXZlbnRTdWJzY3JpcHRpb25zPTAsaS5zY3JvbGxTdHJhdGVneSYmaS5zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3ZlcmxheUVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFuZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImJhY2tkcm9wRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcEVsZW1lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJob3N0RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ob3N0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaCh0KTtyZXR1cm4gdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSwhdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KGguYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuaGFzQXR0YWNoZWQoKSYmZS51cGRhdGVQb3NpdGlvbigpfSksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMCksdGhpcy5fY29uZmlnLmhhc0JhY2tkcm9wJiZ0aGlzLl9hdHRhY2hCYWNrZHJvcCgpLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITApLHRoaXMuX2F0dGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIuYWRkKHRoaXMpLG59LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5oYXNBdHRhY2hlZCgpKXt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITEpO3ZhciBlPXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTt0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKTt2YXIgbj10aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZC5hKShPYmplY3QoYy5hKSh0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt0Ll9wYW5lJiZ0Ll9ob3N0JiYwIT09dC5fcGFuZS5jaGlsZHJlbi5sZW5ndGh8fCh0Ll9ob3N0JiZ0Ll9ob3N0LnBhcmVudEVsZW1lbnQmJih0Ll9wcmV2aW91c0hvc3RQYXJlbnQ9dC5faG9zdC5wYXJlbnRFbGVtZW50LHQuX3ByZXZpb3VzSG9zdFBhcmVudC5yZW1vdmVDaGlsZCh0Ll9ob3N0KSksbi51bnN1YnNjcmliZSgpKX0pO3JldHVybiBlfX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaGFzQXR0YWNoZWQoKTt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmRpc2FibGUoKSx0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9wb3J0YWxPdXRsZXQuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaG1lbnRzLmNvbXBsZXRlKCksdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpLHRoaXMuX2tleWRvd25FdmVudHMuY29tcGxldGUoKSx0aGlzLl9ob3N0JiZ0aGlzLl9ob3N0LnBhcmVudE5vZGUmJih0aGlzLl9ob3N0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5faG9zdCksdGhpcy5faG9zdD1udWxsKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hdHRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZGV0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmtleWRvd25FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c09ic2VydmFibGV9LHQucHJvdG90eXBlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb25maWd9LHQucHJvdG90eXBlLnVwZGF0ZVBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9LHQucHJvdG90eXBlLnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dGhpcy5fY29uZmlnPU9iamVjdChzLmEpKHt9LHRoaXMuX2NvbmZpZyx0KSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfSx0LnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24odCl7dGhpcy5fY29uZmlnPU9iamVjdChzLmEpKHt9LHRoaXMuX2NvbmZpZyx7ZGlyZWN0aW9uOnR9KSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl9LHQucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn0sdC5wcm90b3R5cGUuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb249ZnVuY3Rpb24oKXt0aGlzLl9ob3N0LnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmdldERpcmVjdGlvbigpKX0sdC5wcm90b3R5cGUuX3VwZGF0ZUVsZW1lbnRTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFuZS5zdHlsZTt0LndpZHRoPU9iamVjdChyLmQpKHRoaXMuX2NvbmZpZy53aWR0aCksdC5oZWlnaHQ9T2JqZWN0KHIuZCkodGhpcy5fY29uZmlnLmhlaWdodCksdC5taW5XaWR0aD1PYmplY3Qoci5kKSh0aGlzLl9jb25maWcubWluV2lkdGgpLHQubWluSGVpZ2h0PU9iamVjdChyLmQpKHRoaXMuX2NvbmZpZy5taW5IZWlnaHQpLHQubWF4V2lkdGg9T2JqZWN0KHIuZCkodGhpcy5fY29uZmlnLm1heFdpZHRoKSx0Lm1heEhlaWdodD1PYmplY3Qoci5kKSh0aGlzLl9jb25maWcubWF4SGVpZ2h0KX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG4saT1mdW5jdGlvbigpe2UmJmUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHQuX2JhY2tkcm9wRWxlbWVudD09ZSYmKHQuX2JhY2tkcm9wRWxlbWVudD1udWxsKSxjbGVhclRpbWVvdXQobil9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaSl9KSxlLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLG49dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQoaSw1MDApfSl9fSx0LnByb3RvdHlwZS5fdG9nZ2xlQ2xhc3Nlcz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5jbGFzc0xpc3Q7T2JqZWN0KHIuYikoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtuP2kuYWRkKHQpOmkucmVtb3ZlKHQpfSl9LHR9KCksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyKXt2YXIgbz10aGlzO3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1yLHRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5zY3JvbGxhYmxlcz1bXSx0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25DaGFuZ2VzPW5ldyB1LmEsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPWYuYS5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz0wLHRoaXMucG9zaXRpb25DaGFuZ2VzPWwuYS5jcmVhdGUoZnVuY3Rpb24odCl7dmFyIGU9by5fcG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZSh0KTtyZXR1cm4gby5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zKyssZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksby5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zLS19fSksdGhpcy5zZXRPcmlnaW4odCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9vdmVybGF5UmVmJiZ0IT09dGhpcy5fb3ZlcmxheVJlZil0aHJvdyBFcnJvcigiVGhpcyBwb3NpdGlvbiBzdHJhdGVneSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFuIG92ZXJsYXkiKTt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIpLHRoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9ib3VuZGluZ0JveD10Lmhvc3RFbGVtZW50LHRoaXMuX3BhbmU9dC5vdmVybGF5RWxlbWVudCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSgpfSl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYoISh0aGlzLl9pc0Rpc3Bvc2VkfHx0aGlzLl9wbGF0Zm9ybSYmIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcikpaWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbil0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTtlbHNle3RoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3IodmFyIHQsZT10aGlzLl9vcmlnaW5SZWN0LG49dGhpcy5fb3ZlcmxheVJlY3QsaT10aGlzLl92aWV3cG9ydFJlY3Qscj1bXSxvPTAsYT10aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sdT10aGlzLl9nZXRPcmlnaW5Qb2ludChlLHMpLGw9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KHUsbixzKSxjPXRoaXMuX2dldE92ZXJsYXlGaXQobCxuLGkscyk7aWYoYy5pc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMsdSk7dGhpcy5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyhjLGwsaSk/ci5wdXNoKHtwb3NpdGlvbjpzLG9yaWdpbjp1LG92ZXJsYXlSZWN0Om4sYm91bmRpbmdCb3hSZWN0OnRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh1LHMpfSk6KCF0fHx0Lm92ZXJsYXlGaXQudmlzaWJsZUFyZWE8Yy52aXNpYmxlQXJlYSkmJih0PXtvdmVybGF5Rml0OmMsb3ZlcmxheVBvaW50Omwsb3JpZ2luUG9pbnQ6dSxwb3NpdGlvbjpzLG92ZXJsYXlSZWN0Om59KX1pZihyLmxlbmd0aCl7Zm9yKHZhciBmPW51bGwsaD0tMSxkPTAscD1yO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgbT1wW2RdLHk9bS5ib3VuZGluZ0JveFJlY3Qud2lkdGgqbS5ib3VuZGluZ0JveFJlY3QuaGVpZ2h0KihtLnBvc2l0aW9uLndlaWdodHx8MSk7eT5oJiYoaD15LGY9bSl9cmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihmLnBvc2l0aW9uLGYub3JpZ2luKX1pZih0aGlzLl9jYW5QdXNoKXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMCx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQucG9zaXRpb24sdC5vcmlnaW5Qb2ludCl9fSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLmRldGFjaCgpLHRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5faXNEaXNwb3NlZD0hMCl9LHQucHJvdG90eXBlLnJlYXBwbHlMYXN0UG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy5faXNEaXNwb3NlZCYmKCF0aGlzLl9wbGF0Zm9ybXx8dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKTt2YXIgdD10aGlzLl9sYXN0UG9zaXRpb258fHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc1swXSxlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LGUpfX0sdC5wcm90b3R5cGUud2l0aFNjcm9sbGFibGVDb250YWluZXJzPWZ1bmN0aW9uKHQpe3RoaXMuc2Nyb2xsYWJsZXM9dH0sdC5wcm90b3R5cGUud2l0aFBvc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLndpdGhWaWV3cG9ydE1hcmdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRNYXJnaW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoRmxleGlibGVEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEdyb3dBZnRlck9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9jYW5QdXNoPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aExvY2tlZFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfSx0LnByb3RvdHlwZS5zZXRPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10IGluc3RhbmNlb2YgaS5rP3QubmF0aXZlRWxlbWVudDp0LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9LHQucHJvdG90eXBlLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfSx0LnByb3RvdHlwZS5fZ2V0T3JpZ2luUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtpZigiY2VudGVyIj09ZS5vcmlnaW5YKW49dC5sZWZ0K3Qud2lkdGgvMjtlbHNle3ZhciBpPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQscj10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O249InN0YXJ0Ij09ZS5vcmlnaW5YP2k6cn1yZXR1cm57eDpuLHk6ImNlbnRlciI9PWUub3JpZ2luWT90LnRvcCt0LmhlaWdodC8yOiJ0b3AiPT1lLm9yaWdpblk/dC50b3A6dC5ib3R0b219fSx0LnByb3RvdHlwZS5fZ2V0T3ZlcmxheVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaTtyZXR1cm4gaT0iY2VudGVyIj09bi5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1uLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgse3g6dC54K2kseTp0LnkrKCJjZW50ZXIiPT1uLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1uLm92ZXJsYXlZPzA6LWUuaGVpZ2h0KX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5Rml0PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXQueCxvPXQueSxhPXRoaXMuX2dldE9mZnNldChpLCJ4Iikscz10aGlzLl9nZXRPZmZzZXQoaSwieSIpO2EmJihyKz1hKSxzJiYobys9cyk7dmFyIHU9MC1vLGw9bytlLmhlaWdodC1uLmhlaWdodCxjPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUud2lkdGgsMC1yLHIrZS53aWR0aC1uLndpZHRoKSxmPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUuaGVpZ2h0LHUsbCksaD1jKmY7cmV0dXJue3Zpc2libGVBcmVhOmgsaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQ6ZS53aWR0aCplLmhlaWdodD09PWgsZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5OmY9PT1lLmhlaWdodCxmaXRzSW5WaWV3cG9ydEhvcml6b250YWxseTpjPT1lLndpZHRofX0sdC5wcm90b3R5cGUuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7dmFyIGk9bi5ib3R0b20tZS55LHI9bi5yaWdodC1lLngsbz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluV2lkdGg7cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1vJiZvPD1pKSYmKHQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPWEmJmE8PXIpfX0sdC5wcm90b3R5cGUuX3B1c2hPdmVybGF5T25TY3JlZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl92aWV3cG9ydFJlY3QsaT1NYXRoLm1heCh0LngrZS53aWR0aC1uLnJpZ2h0LDApLHI9TWF0aC5tYXgodC55K2UuaGVpZ2h0LW4uYm90dG9tLDApLG89TWF0aC5tYXgobi50b3AtdC55LDApLGE9TWF0aC5tYXgobi5sZWZ0LXQueCwwKTtyZXR1cm57eDp0LngrKGUud2lkdGg8PW4ud2lkdGg/YXx8LWk6bi5sZWZ0LXQueCkseTp0LnkrKGUuaGVpZ2h0PD1uLmhlaWdodD9vfHwtcjpuLnRvcC10LnkpfX0sdC5wcm90b3R5cGUuX2FwcGx5UG9zaXRpb249ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHRoaXMuX2xhc3RQb3NpdGlvbj10LHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz4wKXt2YXIgbj1uZXcgZnVuY3Rpb24odCxlKXt0aGlzLmNvbm5lY3Rpb25QYWlyPXQsdGhpcy5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXM9ZX0odCx0aGlzLl9nZXRTY3JvbGxWaXNpYmlsaXR5KCkpO3RoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5uZXh0KG4pfXRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMX0sdC5wcm90b3R5cGUuX3NldFRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbih0KXtpZih0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil7dmFyIGUsbj10aGlzLl9ib3VuZGluZ0JveC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKSxpPXQub3ZlcmxheVk7ZT0iY2VudGVyIj09PXQub3ZlcmxheVg/ImNlbnRlciI6dGhpcy5faXNSdGwoKT8ic3RhcnQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0Ijoic3RhcnQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0Ijtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj1lKyIgIitpfX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdD1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixvLGEscyx1PXRoaXMuX3ZpZXdwb3J0UmVjdCxsPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKWk9dC55LG49dS5ib3R0b20tdC55O2Vsc2UgaWYoImJvdHRvbSI9PT1lLm92ZXJsYXlZKW49dS5oZWlnaHQtKHI9dS5oZWlnaHQtdC55KzIqdGhpcy5fdmlld3BvcnRNYXJnaW4pK3RoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2V7dmFyIGM9TWF0aC5taW4odS5ib3R0b20tdC55LHQueS11LmxlZnQpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7aT10LnktYywobj0yKmMpPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYoaT10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFsfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmbClzPXUucmlnaHQtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLG89dC54LXUubGVmdDtlbHNlIGlmKCJzdGFydCI9PT1lLm92ZXJsYXlYJiYhbHx8ImVuZCI9PT1lLm92ZXJsYXlYJiZsKWE9dC54LG89dS5yaWdodC10Lng7ZWxzZXtjPU1hdGgubWluKHUucmlnaHQtdC54LHQueC11LnRvcCk7dmFyIGg9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDthPXQueC1jLChvPTIqYyk+aCYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueC1oLzIpfXJldHVybnt0b3A6aSxsZWZ0OmEsYm90dG9tOnIscmlnaHQ6cyx3aWR0aDpvLGhlaWdodDpufX0sdC5wcm90b3R5cGUuX3NldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHQsZSk7dGhpcy5faXNJbml0aWFsUmVuZGVyfHx0aGlzLl9ncm93QWZ0ZXJPcGVufHwobi5oZWlnaHQ9TWF0aC5taW4obi5oZWlnaHQsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQpLG4ud2lkdGg9TWF0aC5taW4obi53aWR0aCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoKSk7dmFyIGk9e307aWYodGhpcy5faGFzRXhhY3RQb3NpdGlvbigpKWkudG9wPWkubGVmdD0iMCIsaS5ib3R0b209aS5yaWdodD0iIixpLndpZHRoPWkuaGVpZ2h0PSIxMDAlIjtlbHNle3ZhciBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtpLmhlaWdodD1PYmplY3Qoci5kKShuLmhlaWdodCksaS50b3A9T2JqZWN0KHIuZCkobi50b3ApLGkuYm90dG9tPU9iamVjdChyLmQpKG4uYm90dG9tKSxpLndpZHRoPU9iamVjdChyLmQpKG4ud2lkdGgpLGkubGVmdD1PYmplY3Qoci5kKShuLmxlZnQpLGkucmlnaHQ9T2JqZWN0KHIuZCkobi5yaWdodCksaS5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsaS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihpLm1heEhlaWdodD1PYmplY3Qoci5kKShvKSksYSYmKGkubWF4V2lkdGg9T2JqZWN0KHIuZCkoYSkpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9bixJKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLGkpfSx0LnByb3RvdHlwZS5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcz1mdW5jdGlvbigpe0kodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiMCIsbGVmdDoiMCIscmlnaHQ6IjAiLGJvdHRvbToiMCIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KX0sdC5wcm90b3R5cGUuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXM9ZnVuY3Rpb24oKXtJKHRoaXMuX3BhbmUuc3R5bGUse3RvcDoiIixsZWZ0OiIiLGJvdHRvbToiIixyaWdodDoiIixwb3NpdGlvbjoiIn0pfSx0LnByb3RvdHlwZS5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTt0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCk/KEkobix0aGlzLl9nZXRFeGFjdE92ZXJsYXlZKGUsdCkpLEkobix0aGlzLl9nZXRFeGFjdE92ZXJsYXlYKGUsdCkpKTpuLnBvc2l0aW9uPSJzdGF0aWMiO3ZhciBpPSIiLHI9dGhpcy5fZ2V0T2Zmc2V0KGUsIngiKSxvPXRoaXMuX2dldE9mZnNldChlLCJ5Iik7ciYmKGkrPSJ0cmFuc2xhdGVYKCIrcisicHgpICIpLG8mJihpKz0idHJhbnNsYXRlWSgiK28rInB4KSIpLG4udHJhbnNmb3JtPWkudHJpbSgpLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyYmdGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQmJihuLm1heEhlaWdodD0iIiksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoJiYobi5tYXhXaWR0aD0iIiksSSh0aGlzLl9wYW5lLnN0eWxlLG4pfSx0LnByb3RvdHlwZS5fZ2V0RXhhY3RPdmVybGF5WT1mdW5jdGlvbih0LGUpe3ZhciBuPXt0b3A6bnVsbCxib3R0b206bnVsbH0saT10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTt0aGlzLl9pc1B1c2hlZCYmKGk9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihpLHRoaXMuX292ZXJsYXlSZWN0KSk7dmFyIG89dGhpcy5fb3ZlcmxheUNvbnRhaW5lcj90aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6MDtyZXR1cm4gaS55LT1vLCJib3R0b20iPT09dC5vdmVybGF5WT9uLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShpLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOm4udG9wPU9iamVjdChyLmQpKGkueSksbn0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVg9ZnVuY3Rpb24odCxlKXt2YXIgbj17bGVmdDpudWxsLHJpZ2h0Om51bGx9LGk9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYoaT10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKGksdGhpcy5fb3ZlcmxheVJlY3QpKSwicmlnaHQiPT0odGhpcy5faXNSdGwoKT8iZW5kIj09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI6ImVuZCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiKT9uLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oaS54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOm4ubGVmdD1PYmplY3Qoci5kKShpLngpLG59LHQucHJvdG90eXBlLl9nZXRTY3JvbGxWaXNpYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuc2Nyb2xsYWJsZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSk7cmV0dXJue2lzT3JpZ2luQ2xpcHBlZDpTKHQsbiksaXNPcmlnaW5PdXRzaWRlVmlldzpDKHQsbiksaXNPdmVybGF5Q2xpcHBlZDpTKGUsbiksaXNPdmVybGF5T3V0c2lkZVZpZXc6QyhlLG4pfX0sdC5wcm90b3R5cGUuX3N1YnRyYWN0T3ZlcmZsb3dzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LU1hdGgubWF4KGUsMCl9LHQpfSx0LnByb3RvdHlwZS5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LG49dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDpuLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0Om4ubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDpuLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206bi50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19LHQucHJvdG90eXBlLl9pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuX2hhc0V4YWN0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH0sdC5wcm90b3R5cGUuX2dldE9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlUG9zaXRpb25zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5sZW5ndGgpdGhyb3cgRXJyb3IoIkZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTogQXQgbGVhc3Qgb25lIHBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IoIm9yaWdpblgiLHQub3JpZ2luWCksZygib3JpZ2luWSIsdC5vcmlnaW5ZKSxiKCJvdmVybGF5WCIsdC5vdmVybGF5WCksZygib3ZlcmxheVkiLHQub3ZlcmxheVkpfSl9LHR9KCk7ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pO3JldHVybiB0fXZhciBSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsbyl7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9bmV3IEEobixpLHIsbykud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFB1c2goITEpLndpdGhWaWV3cG9ydE1hcmdpbigwKSx0aGlzLndpdGhGYWxsYmFja1Bvc2l0aW9uKHQsZSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2lzUnRsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib25Qb3NpdGlvbkNoYW5nZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBvc2l0aW9ucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0KSx0aGlzLl9kaXJlY3Rpb24mJih0LnNldERpcmVjdGlvbih0aGlzLl9kaXJlY3Rpb24pLHRoaXMuX2RpcmVjdGlvbj1udWxsKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCgpfSx0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUucmVjYWxjdWxhdGVMYXN0UG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUud2l0aFNjcm9sbGFibGVDb250YWluZXJzPWZ1bmN0aW9uKHQpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpfSx0LnByb3RvdHlwZS53aXRoRmFsbGJhY2tQb3NpdGlvbj1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1uZXcgZnVuY3Rpb24odCxlLG4saSl7dGhpcy5vZmZzZXRYPW4sdGhpcy5vZmZzZXRZPWksdGhpcy5vcmlnaW5YPXQub3JpZ2luWCx0aGlzLm9yaWdpblk9dC5vcmlnaW5ZLHRoaXMub3ZlcmxheVg9ZS5vdmVybGF5WCx0aGlzLm92ZXJsYXlZPWUub3ZlcmxheVl9KHQsZSxuLGkpO3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMucHVzaChyKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKSx0aGlzfSx0LnByb3RvdHlwZS53aXRoRGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuc2V0RGlyZWN0aW9uKHQpOnRoaXMuX2RpcmVjdGlvbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhPZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WCh0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoT2Zmc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoRGVmYXVsdE9mZnNldFkodCksdGhpc30sdC5wcm90b3R5cGUud2l0aExvY2tlZFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhMb2NrZWRQb3NpdGlvbih0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dC5zbGljZSgpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9LHQucHJvdG90eXBlLnNldE9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS5zZXRPcmlnaW4odCksdGhpc30sdH0oKSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX2p1c3RpZnlDb250ZW50PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIn1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3dpZHRoJiYhZS53aWR0aCYmdC51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl93aWR0aH0pLHRoaXMuX2hlaWdodCYmIWUuaGVpZ2h0JiZ0LnVwZGF0ZVNpemUoe2hlaWdodDp0aGlzLl9oZWlnaHR9KSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIil9LHQucHJvdG90eXBlLnRvcD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfSx0LnByb3RvdHlwZS5sZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fcmlnaHRPZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iix0aGlzfSx0LnByb3RvdHlwZS5ib3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9LHQucHJvdG90eXBlLnJpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dH0pOnRoaXMuX3dpZHRoPXQsdGhpc30sdC5wcm90b3R5cGUuaGVpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe2hlaWdodDp0fSk6dGhpcy5faGVpZ2h0PXQsdGhpc30sdC5wcm90b3R5cGUuY2VudGVySG9yaXpvbnRhbGx5PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5sZWZ0KHQpLHRoaXMuX2p1c3RpZnlDb250ZW50PSJjZW50ZXIiLHRoaXN9LHQucHJvdG90eXBlLmNlbnRlclZlcnRpY2FsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYodGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXt2YXIgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxuPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCk7dC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9IjEwMCUiPT09bi53aWR0aD8iMCI6dGhpcy5fbGVmdE9mZnNldCx0Lm1hcmdpblRvcD0iMTAwJSI9PT1uLmhlaWdodD8iMCI6dGhpcy5fdG9wT2Zmc2V0LHQubWFyZ2luQm90dG9tPXRoaXMuX2JvdHRvbU9mZnNldCx0Lm1hcmdpblJpZ2h0PXRoaXMuX3JpZ2h0T2Zmc2V0LCIxMDAlIj09PW4ud2lkdGg/ZS5qdXN0aWZ5Q29udGVudD0iZmxleC1zdGFydCI6ImNlbnRlciI9PT10aGlzLl9qdXN0aWZ5Q29udGVudD9lLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiOiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5kaXJlY3Rpb24/ImZsZXgtc3RhcnQiPT09dGhpcy5fanVzdGlmeUNvbnRlbnQ/ZS5qdXN0aWZ5Q29udGVudD0iZmxleC1lbmQiOiJmbGV4LWVuZCI9PT10aGlzLl9qdXN0aWZ5Q29udGVudCYmKGUuanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiKTplLmp1c3RpZnlDb250ZW50PXRoaXMuX2p1c3RpZnlDb250ZW50LGUuYWxpZ25JdGVtcz0iMTAwJSI9PT1uLmhlaWdodD8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc319LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LHR9KCksUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX2RvY3VtZW50PWUsdGhpcy5fcGxhdGZvcm09bix0aGlzLl9vdmVybGF5Q29udGFpbmVyPWl9cmV0dXJuIHQucHJvdG90eXBlLmdsb2JhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgTX0sdC5wcm90b3R5cGUuY29ubmVjdGVkVG89ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuZXcgUihlLG4sdCx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50KX0sdC5wcm90b3R5cGUuZmxleGlibGVDb25uZWN0ZWRUbz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEEodCx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKShvLmUpLE9iamVjdChpLlkpKGEuZCksT2JqZWN0KGkuWSkocC5hLDgpLE9iamVjdChpLlkpKFQsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxEPTAsTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSxzLHUpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9aSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9dX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxpPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxyPW5ldyB2KHQpO3JldHVybiByLmRpcmVjdGlvbj1yLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IGooaSxlLG4scix0aGlzLl9uZ1pvbmUsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLHRoaXMuX2RvY3VtZW50KX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfSx0LnByb3RvdHlwZS5fY3JlYXRlUGFuZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuaWQ9ImNkay1vdmVybGF5LSIrRCsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX0sdC5wcm90b3R5cGUuX2NyZWF0ZUhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9LHQucHJvdG90eXBlLl9jcmVhdGVQb3J0YWxPdXRsZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoaS5nKSksbmV3IG0uZCh0LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IpfSx0fSgpLEY9bmV3IGkucSgiY2RrLWNvbm5lY3RlZC1vdmVybGF5LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIEwodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBWPWZ1bmN0aW9uKCl7fX0sZWloczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9e2U6e319fSxnSTNCOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiNmJsRiIpLHI9bigiVDFETSIpLG89bigiaXNieSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIU9iamVjdChvLmEpKHQpJiZ0LXBhcnNlRmxvYXQodCkrMT49MH12YXIgcz1uKCJua1k3Iik7ZnVuY3Rpb24gdSh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIG89LTE7cmV0dXJuIGEoZSk/bz1OdW1iZXIoZSk8MT8xOk51bWJlcihlKTpPYmplY3Qocy5hKShlKSYmKG49ZSksT2JqZWN0KHMuYSkobil8fChuPXIuYSksbmV3IGkuYShmdW5jdGlvbihlKXt2YXIgaT1hKHQpP3Q6K3Qtbi5ub3coKTtyZXR1cm4gbi5zY2hlZHVsZShsLGkse2luZGV4OjAscGVyaW9kOm8sc3Vic2NyaWJlcjplfSl9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxpPXQuc3Vic2NyaWJlcjtpZihpLm5leHQoZSksIWkuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIGkuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSl9LGdJY1k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KTt2YXIgaT1uKCJtclNHIikscj1uKCJDY25HIiksbz1uKCJWTnI0IiksYT1uKCIwL3VRIikscz1uKCI2N1kvIiksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfSgobigiWllqdCIpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbnZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGVuZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByaXN0aW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGF0dXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVudG91Y2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdHVzQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbHVlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9LHQucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcih0LGUpfSx0LnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH0sdH0oKSkpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIG51bGw9PXR8fDA9PT10Lmxlbmd0aH12YXIgYz0vXig/PS57MSwyNTR9JCkoPz0uezEsNjR9QClbLSEjJCUmJyorLzAtOT0/QS1aXl9gYS16e3x9fl0rKFwuWy0hIyQlJicqKy8wLTk9P0EtWl5fYGEtent8fX5dKykqQFtBLVphLXowLTldKFtBLVphLXowLTktXXswLDYxfVtBLVphLXowLTldKT8oXC5bQS1aYS16MC05XShbQS1aYS16MC05LV17MCw2MX1bQS1aYS16MC05XSk/KSokLyxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5taW49ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGwoZS52YWx1ZSl8fGwodCkpcmV0dXJuIG51bGw7dmFyIG49cGFyc2VGbG9hdChlLnZhbHVlKTtyZXR1cm4haXNOYU4obikmJm48dD97bWluOnttaW46dCxhY3R1YWw6ZS52YWx1ZX19Om51bGx9fSx0Lm1heD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYobChlLnZhbHVlKXx8bCh0KSlyZXR1cm4gbnVsbDt2YXIgbj1wYXJzZUZsb2F0KGUudmFsdWUpO3JldHVybiFpc05hTihuKSYmbj50P3ttYXg6e21heDp0LGFjdHVhbDplLnZhbHVlfX06bnVsbH19LHQucmVxdWlyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwodC52YWx1ZSk/e3JlcXVpcmVkOiEwfTpudWxsfSx0LnJlcXVpcmVkVHJ1ZT1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXQudmFsdWU/bnVsbDp7cmVxdWlyZWQ6ITB9fSx0LmVtYWlsPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQudmFsdWUpP251bGw6Yy50ZXN0KHQudmFsdWUpP251bGw6e2VtYWlsOiEwfX0sdC5taW5MZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGwoZS52YWx1ZSkpcmV0dXJuIG51bGw7dmFyIG49ZS52YWx1ZT9lLnZhbHVlLmxlbmd0aDowO3JldHVybiBuPHQ/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6dCxhY3R1YWxMZW5ndGg6bn19Om51bGx9fSx0Lm1heExlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS52YWx1ZT9lLnZhbHVlLmxlbmd0aDowO3JldHVybiBuPnQ/e21heGxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6dCxhY3R1YWxMZW5ndGg6bn19Om51bGx9fSx0LnBhdHRlcm49ZnVuY3Rpb24oZSl7cmV0dXJuIGU/KCJzdHJpbmciPT10eXBlb2YgZT8oaT0iIiwiXiIhPT1lLmNoYXJBdCgwKSYmKGkrPSJeIiksaSs9ZSwiJCIhPT1lLmNoYXJBdChlLmxlbmd0aC0xKSYmKGkrPSIkIiksbj1uZXcgUmVnRXhwKGkpKTooaT1lLnRvU3RyaW5nKCksbj1lKSxmdW5jdGlvbih0KXtpZihsKHQudmFsdWUpKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWU7cmV0dXJuIG4udGVzdChlKT9udWxsOntwYXR0ZXJuOntyZXF1aXJlZFBhdHRlcm46aSxhY3R1YWxWYWx1ZTplfX19KTp0Lm51bGxWYWxpZGF0b3I7dmFyIG4saX0sdC5udWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSx0LmNvbXBvc2U9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIGU9dC5maWx0ZXIoaCk7cmV0dXJuIDA9PWUubGVuZ3RoP251bGw6ZnVuY3Rpb24odCl7cmV0dXJuIHAoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0odCkpfX0sdC5jb21wb3NlQXN5bmM9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIGU9dC5maWx0ZXIoaCk7cmV0dXJuIDA9PWUubGVuZ3RoP251bGw6ZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0odCkubWFwKGQpO3JldHVybiBPYmplY3Qoby5hKShuKS5waXBlKE9iamVjdChzLmEpKHApKX19LHR9KCk7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbnVsbCE9dH1mdW5jdGlvbiBkKHQpe3ZhciBlPU9iamVjdChyLldhKSh0KT9PYmplY3QoYS5hKSh0KTp0O2lmKCFPYmplY3Qoci5WYSkoZSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZGF0b3IgdG8gcmV0dXJuIFByb21pc2Ugb3IgT2JzZXJ2YWJsZS4iKTtyZXR1cm4gZX1mdW5jdGlvbiBwKHQpe3ZhciBlPXQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPWU/T2JqZWN0KGkuYSkoe30sdCxlKTp0fSx7fSk7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGg/bnVsbDplfXZhciBtPW5ldyByLnEoIk5nVmFsdWVBY2Nlc3NvciIpO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHQudmFsaWRhdGU/ZnVuY3Rpb24oZSl7cmV0dXJuIHQudmFsaWRhdGUoZSl9OnR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC52YWxpZGF0ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC52YWxpZGF0ZShlKX06dH12YXIgZz0nXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaXJzdE5hbWUiPlxuICAgIDwvZGl2PlxuXG4gICAgSW4geW91ciBjbGFzczpcblxuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgIGZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKClcbiAgICB9KTsnLGI9J1xuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0icGVyc29uIj5cbiAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaXJzdE5hbWUiPlxuICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgSW4geW91ciBjbGFzczpcblxuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgIHBlcnNvbjogbmV3IEZvcm1Hcm91cCh7IGZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKCkgfSlcbiAgICB9KTsnLF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmNvbnRyb2xQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImZvcm1Db250cm9sTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICBFeGFtcGxlOlxuXG4gICAgICAiK2cpfSx0Lm5nTW9kZWxHcm91cEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignZm9ybUNvbnRyb2xOYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGggYW4gbmdNb2RlbEdyb3VwIHBhcmVudC4gSXQgaXMgb25seSBjb21wYXRpYmxlIHdpdGggcGFyZW50c1xuICAgICAgIHRoYXQgYWxzbyBoYXZlIGEgImZvcm0iIHByZWZpeDogZm9ybUdyb3VwTmFtZSwgZm9ybUFycmF5TmFtZSwgb3IgZm9ybUdyb3VwLlxuXG4gICAgICAgT3B0aW9uIDE6ICBVcGRhdGUgdGhlIHBhcmVudCB0byBiZSBmb3JtR3JvdXBOYW1lIChyZWFjdGl2ZSBmb3JtIHN0cmF0ZWd5KVxuXG4gICAgICAgICcrYisnXG5cbiAgICAgICAgT3B0aW9uIDI6IFVzZSBuZ01vZGVsIGluc3RlYWQgb2YgZm9ybUNvbnRyb2xOYW1lICh0ZW1wbGF0ZS1kcml2ZW4gc3RyYXRlZ3kpXG5cbiAgICAgICAgXG4gICAgPGZvcm0+XG4gICAgICAgPGRpdiBuZ01vZGVsR3JvdXA9InBlcnNvbiI+XG4gICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24ubmFtZSIgbmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+Jyl9LHQubWlzc2luZ0Zvcm1FeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImZvcm1Hcm91cCBleHBlY3RzIGEgRm9ybUdyb3VwIGluc3RhbmNlLiBQbGVhc2UgcGFzcyBvbmUgaW4uXG5cbiAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgIitnKX0sdC5ncm91cFBhcmVudEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZm9ybUdyb3VwTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICIrYil9LHQuYXJyYXlQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ2Zvcm1BcnJheU5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdVwnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICBcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT0iY2l0aWVzIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9ImxldCBjaXR5IG9mIGNpdHlBcnJheS5jb250cm9sczsgaW5kZXggYXMgaSI+XG4gICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbE5hbWVdPSJpIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLmNpdHlBcnJheSA9IG5ldyBGb3JtQXJyYXkoW25ldyBGb3JtQ29udHJvbChcJ1NGXCcpXSk7XG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBjaXRpZXM6IHRoaXMuY2l0eUFycmF5XG4gICAgfSk7Jyl9LHQuZGlzYWJsZWRBdHRyV2FybmluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpdGggYSByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZS4gSWYgeW91IHNldCBkaXNhYmxlZCB0byB0cnVlXG4gICAgICB3aGVuIHlvdSBzZXQgdXAgdGhpcyBjb250cm9sIGluIHlvdXIgY29tcG9uZW50IGNsYXNzLCB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpbGwgYWN0dWFsbHkgYmUgc2V0IGluIHRoZSBET00gZm9yXG4gICAgICB5b3UuIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIGFwcHJvYWNoIHRvIGF2b2lkICdjaGFuZ2VkIGFmdGVyIGNoZWNrZWQnIGVycm9ycy5cbiAgICAgICBcbiAgICAgIEV4YW1wbGU6IFxuICAgICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBmaXJzdDogbmV3IEZvcm1Db250cm9sKHt2YWx1ZTogJ05hbmN5JywgZGlzYWJsZWQ6IHRydWV9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgbGFzdDogbmV3IEZvcm1Db250cm9sKCdEcmV3JywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICAgIH0pO1xuICAgICIpfSx0Lm5nTW9kZWxXYXJuaW5nPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiXG4gICAgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgbmdNb2RlbCBvbiB0aGUgc2FtZSBmb3JtIGZpZWxkIGFzICIrdCsiLiBcbiAgICBTdXBwb3J0IGZvciB1c2luZyB0aGUgbmdNb2RlbCBpbnB1dCBwcm9wZXJ0eSBhbmQgbmdNb2RlbENoYW5nZSBldmVudCB3aXRoIFxuICAgIHJlYWN0aXZlIGZvcm0gZGlyZWN0aXZlcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIEFuZ3VsYXIgdjYgYW5kIHdpbGwgYmUgcmVtb3ZlZCBcbiAgICBpbiBBbmd1bGFyIHY3LlxuICAgIFxuICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIHNlZSBvdXIgQVBJIGRvY3MgaGVyZTpcbiAgICBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zLyIrKCJmb3JtQ29udHJvbCI9PT10PyJGb3JtQ29udHJvbERpcmVjdGl2ZSI6IkZvcm1Db250cm9sTmFtZSIpKyIjdXNlLXdpdGgtbmdtb2RlbFxuICAgICIpfSx0fSgpO2Z1bmN0aW9uIHcodCxlKXt0fHxFKGUsIkNhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCIpLGUudmFsdWVBY2Nlc3Nvcnx8RShlLCJObyB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj1mLmNvbXBvc2UoW3QudmFsaWRhdG9yLGUudmFsaWRhdG9yXSksdC5hc3luY1ZhbGlkYXRvcj1mLmNvbXBvc2VBc3luYyhbdC5hc3luY1ZhbGlkYXRvcixlLmFzeW5jVmFsaWRhdG9yXSksZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodC52YWx1ZSksZnVuY3Rpb24odCxlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShmdW5jdGlvbihuKXt0Ll9wZW5kaW5nVmFsdWU9bix0Ll9wZW5kaW5nQ2hhbmdlPSEwLHQuX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PXQudXBkYXRlT24mJngodCxlKX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7dC5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKHQsbil7ZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodCksbiYmZS52aWV3VG9Nb2RlbFVwZGF0ZSh0KX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKGZ1bmN0aW9uKCl7dC5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09dC51cGRhdGVPbiYmdC5fcGVuZGluZ0NoYW5nZSYmeCh0LGUpLCJzdWJtaXQiIT09dC51cGRhdGVPbiYmdC5tYXJrQXNUb3VjaGVkKCl9KX0odCxlKSxlLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSYmdC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZnVuY3Rpb24odCl7ZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUodCl9KSxlLl9yYXdWYWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gdC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9KX0pLGUuX3Jhd0FzeW5jVmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSl9KX1mdW5jdGlvbiB4KHQsZSl7dC5fcGVuZGluZ0RpcnR5JiZ0Lm1hcmtBc0RpcnR5KCksdC5zZXRWYWx1ZSh0Ll9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLGUudmlld1RvTW9kZWxVcGRhdGUodC5fcGVuZGluZ1ZhbHVlKSx0Ll9wZW5kaW5nQ2hhbmdlPSExfWZ1bmN0aW9uIEModCxlKXtudWxsPT10JiZFKGUsIkNhbm5vdCBmaW5kIGNvbnRyb2wgd2l0aCIpLHQudmFsaWRhdG9yPWYuY29tcG9zZShbdC52YWxpZGF0b3IsZS52YWxpZGF0b3JdKSx0LmFzeW5jVmFsaWRhdG9yPWYuY29tcG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKX1mdW5jdGlvbiBTKHQpe3JldHVybiBFKHQsIlRoZXJlIGlzIG5vIEZvcm1Db250cm9sIGluc3RhbmNlIGF0dGFjaGVkIHRvIGZvcm0gY29udHJvbCBlbGVtZW50IHdpdGgiKX1mdW5jdGlvbiBFKHQsZSl7dmFyIG47dGhyb3cgbj10LnBhdGgubGVuZ3RoPjE/InBhdGg6ICciK3QucGF0aC5qb2luKCIgLT4gIikrIiciOnQucGF0aFswXT8ibmFtZTogJyIrdC5wYXRoKyInIjoidW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUiLG5ldyBFcnJvcihlKyIgIituKX1mdW5jdGlvbiBPKHQpe3JldHVybiBudWxsIT10P2YuY29tcG9zZSh0Lm1hcCh5KSk6bnVsbH1mdW5jdGlvbiBrKHQpe3JldHVybiBudWxsIT10P2YuY29tcG9zZUFzeW5jKHQubWFwKHYpKTpudWxsfWZ1bmN0aW9uIFQodCxlKXt0Ll9zeW5jUGVuZGluZ0NvbnRyb2xzKCksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udHJvbDsic3VibWl0Ij09PWUudXBkYXRlT24mJmUuX3BlbmRpbmdDaGFuZ2UmJih0LnZpZXdUb01vZGVsVXBkYXRlKGUuX3BlbmRpbmdWYWx1ZSksZS5fcGVuZGluZ0NoYW5nZT0hMSl9KX1mdW5jdGlvbiBqKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT1SKHQpP3QudmFsaWRhdG9yczp0O3JldHVybiBBcnJheS5pc0FycmF5KGUpP08oZSk6ZXx8bnVsbH1mdW5jdGlvbiBJKHQsZSl7dmFyIG49UihlKT9lLmFzeW5jVmFsaWRhdG9yczp0O3JldHVybiBBcnJheS5pc0FycmF5KG4pP2sobik6bnx8bnVsbH1mdW5jdGlvbiBSKHQpe3JldHVybiBudWxsIT10JiYhQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmFsaWRhdG9yPXQsdGhpcy5hc3luY1ZhbGlkYXRvcj1lLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT1mdW5jdGlvbigpe30sdGhpcy5wcmlzdGluZT0hMCx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iVkFMSUQiPT09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbnZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIklOVkFMSUQiPT09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwZW5kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlBFTkRJTkciPT10aGlzLnN0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkRJU0FCTEVEIj09PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJESVNBQkxFRCIhPT10aGlzLnN0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1bnRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy50b3VjaGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidXBkYXRlT24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2V0VmFsaWRhdG9ycz1mdW5jdGlvbih0KXt0aGlzLnZhbGlkYXRvcj1BKHQpfSx0LnByb3RvdHlwZS5zZXRBc3luY1ZhbGlkYXRvcnM9ZnVuY3Rpb24odCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1JKHQpfSx0LnByb3RvdHlwZS5jbGVhclZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt0aGlzLnZhbGlkYXRvcj1udWxsfSx0LnByb3RvdHlwZS5jbGVhckFzeW5jVmFsaWRhdG9ycz1mdW5jdGlvbigpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH0sdC5wcm90b3R5cGUubWFya0FzVG91Y2hlZD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5tYXJrQXNVbnRvdWNoZWQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCl7dC5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9LHQucHJvdG90eXBlLm1hcmtBc0RpcnR5PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX0sdC5wcm90b3R5cGUubWFya0FzUHJpc3RpbmU9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbih0KXt0Lm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX0sdC5wcm90b3R5cGUubWFya0FzUGVuZGluZz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5zdGF0dXM9IlBFTkRJTkciLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5zdGF0dXM9IkRJU0FCTEVEIix0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtlLmRpc2FibGUoT2JqZWN0KGkuYSkoe30sdCx7b25seVNlbGY6ITB9KSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHQpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCghMCl9KX0sdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnN0YXR1cz0iVkFMSUQiLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtlLmVuYWJsZShPYmplY3QoaS5hKSh7fSx0LHtvbmx5U2VsZjohMH0pKX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHQpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCghMSl9KX0sdC5wcm90b3R5cGUuX3VwZGF0ZUFuY2VzdG9ycz1mdW5jdGlvbih0KXt0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCksdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSgpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCgpKX0sdC5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQpe3RoaXMuX3BhcmVudD10fSx0LnByb3RvdHlwZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCJWQUxJRCIhPT10aGlzLnN0YXR1cyYmIlBFTkRJTkciIT09dGhpcy5zdGF0dXN8fHRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKHQuZW1pdEV2ZW50KSksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KX0sdC5wcm90b3R5cGUuX3VwZGF0ZVRyZWVWYWxpZGl0eT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17ZW1pdEV2ZW50OiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUpe3JldHVybiBlLl91cGRhdGVUcmVlVmFsaWRpdHkodCl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfSx0LnByb3RvdHlwZS5fc2V0SW5pdGlhbFN0YXR1cz1mdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8iRElTQUJMRUQiOiJWQUxJRCJ9LHQucHJvdG90eXBlLl9ydW5WYWxpZGF0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH0sdC5wcm90b3R5cGUuX3J1bkFzeW5jVmFsaWRhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9IlBFTkRJTkciO3ZhciBuPWQodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKG4pe3JldHVybiBlLnNldEVycm9ycyhuLHtlbWl0RXZlbnQ6dH0pfSl9fSx0LnByb3RvdHlwZS5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb249ZnVuY3Rpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24mJnRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5zZXRFcnJvcnM9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuIG51bGw9PWU/bnVsbDooZSBpbnN0YW5jZW9mIEFycmF5fHwoZT1lLnNwbGl0KCIuIikpLGUgaW5zdGFuY2VvZiBBcnJheSYmMD09PWUubGVuZ3RoP251bGw6ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEQ/dC5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShlKT90LmNvbnRyb2xzW2VdOm51bGw6dCBpbnN0YW5jZW9mIE4mJnQuYXQoZSl8fG51bGx9LHQpKX0odGhpcyx0KX0sdC5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3RoaXMuZ2V0KGUpOnRoaXM7cmV0dXJuIG4mJm4uZXJyb3JzP24uZXJyb3JzW3RdOm51bGx9LHQucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzO3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzPWZ1bmN0aW9uKHQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLHQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnModCl9LHQucHJvdG90eXBlLl9pbml0T2JzZXJ2YWJsZXM9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgci5uLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgci5ufSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8iRElTQUJMRUQiOnRoaXMuZXJyb3JzPyJJTlZBTElEIjp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoIlBFTkRJTkciKT8iUEVORElORyI6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKCJJTlZBTElEIik/IklOVkFMSUQiOiJWQUxJRCJ9LHQucHJvdG90eXBlLl9hbnlDb250cm9sc0hhdmVTdGF0dXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PXR9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzRGlydHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlydHl9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzVG91Y2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhmdW5jdGlvbih0KXtyZXR1cm4gdC50b3VjaGVkfSl9LHQucHJvdG90eXBlLl91cGRhdGVQcmlzdGluZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9LHQucHJvdG90eXBlLl91cGRhdGVUb3VjaGVkPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5faXNCb3hlZFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJjI9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJiJ2YWx1ZSJpbiB0JiYiZGlzYWJsZWQiaW4gdH0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT10fSx0LnByb3RvdHlwZS5fc2V0VXBkYXRlU3RyYXRlZ3k9ZnVuY3Rpb24odCl7Uih0KSYmbnVsbCE9dC51cGRhdGVPbiYmKHRoaXMuX3VwZGF0ZU9uPXQudXBkYXRlT24pfSx0fSgpLFA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dm9pZCAwPT09ZSYmKGU9bnVsbCk7dmFyIHI9dC5jYWxsKHRoaXMsQShuKSxJKGksbikpfHx0aGlzO3JldHVybiByLl9vbkNoYW5nZT1bXSxyLl9hcHBseUZvcm1TdGF0ZShlKSxyLl9zZXRVcGRhdGVTdHJhdGVneShuKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pLHIuX2luaXRPYnNlcnZhYmxlcygpLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LHRoaXMuX29uQ2hhbmdlLmxlbmd0aCYmITEhPT1lLmVtaXRNb2RlbFRvVmlld0NoYW5nZSYmdGhpcy5fb25DaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdChuLnZhbHVlLCExIT09ZS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfSxlLnByb3RvdHlwZS5wYXRjaFZhbHVlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuc2V0VmFsdWUodCxlKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD1udWxsKSx2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fYXBwbHlGb3JtU3RhdGUodCksdGhpcy5tYXJrQXNQcmlzdGluZShlKSx0aGlzLm1hcmtBc1VudG91Y2hlZChlKSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsZSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX0sZS5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5fYW55Q29udHJvbHM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGUucHJvdG90eXBlLl9hbGxDb250cm9sc0Rpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR9LGUucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25DaGFuZ2UucHVzaCh0KX0sZS5wcm90b3R5cGUuX2NsZWFyQ2hhbmdlRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9ZnVuY3Rpb24oKXt9fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuX3N5bmNQZW5kaW5nQ29udHJvbHM9ZnVuY3Rpb24oKXtyZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMuX3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVkJiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3BlbmRpbmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksMCkpfSxlLnByb3RvdHlwZS5fYXBwbHlGb3JtU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5faXNCb3hlZFZhbHVlKHQpPyh0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LnZhbHVlLHQuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlzLmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXR9LGV9KE0pLEQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsQShuKSxJKGksbikpfHx0aGlzO3JldHVybiByLmNvbnRyb2xzPWUsci5faW5pdE9ic2VydmFibGVzKCksci5fc2V0VXBkYXRlU3RyYXRlZ3kobiksci5fc2V0VXBDb250cm9scygpLHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5yZWdpc3RlckNvbnRyb2w9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XT90aGlzLmNvbnRyb2xzW3RdOih0aGlzLmNvbnRyb2xzW3RdPWUsZS5zZXRQYXJlbnQodGhpcyksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxlKX0sZS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbih0LGUpe3RoaXMucmVnaXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9LGUucHJvdG90eXBlLnJlbW92ZUNvbnRyb2w9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuc2V0Q29udHJvbD1mdW5jdGlvbih0LGUpe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7fSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sZSYmdGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihpKXtuLl90aHJvd0lmQ29udHJvbE1pc3NpbmcoaSksbi5jb250cm9sc1tpXS5zZXRWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucGF0Y2hWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oaSl7bi5jb250cm9sc1tpXSYmbi5jb250cm9sc1tpXS5wYXRjaFZhbHVlKHRbaV0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PXt9KSx2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKG4saSl7bi5yZXNldCh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSx0aGlzLl91cGRhdGVQcmlzdGluZShlKSx0aGlzLl91cGRhdGVUb3VjaGVkKGUpfSxlLnByb3RvdHlwZS5nZXRSYXdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbbl09ZSBpbnN0YW5jZW9mIFA/ZS52YWx1ZTplLmdldFJhd1ZhbHVlKCksdH0pfSxlLnByb3RvdHlwZS5fc3luY1BlbmRpbmdDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLGZ1bmN0aW9uKHQsZSl7cmV0dXJuISFlLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fHR9KTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9LGUucHJvdG90eXBlLl90aHJvd0lmQ29udHJvbE1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIU9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBncm91cCB5ZXQuICBJZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICAgICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5leHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gICAgICAiKTtpZighdGhpcy5jb250cm9sc1t0XSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZvcm0gY29udHJvbCB3aXRoIG5hbWU6ICIrdCsiLiIpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gdChlLmNvbnRyb2xzW25dLG4pfSl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2xzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7ZS5zZXRQYXJlbnQodCksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodC5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9LGUucHJvdG90eXBlLl9hbnlDb250cm9scz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ITE7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihpLHIpe249bnx8ZS5jb250YWlucyhyKSYmdChpKX0pLG59LGUucHJvdG90eXBlLl9yZWR1Y2VWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LGZ1bmN0aW9uKGUsbixpKXtyZXR1cm4obi5lbmFibGVkfHx0LmRpc2FibGVkKSYmKGVbaV09bi52YWx1ZSksZX0pfSxlLnByb3RvdHlwZS5fcmVkdWNlQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10O3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCxpKXtuPWUobix0LGkpfSksbn0sZS5wcm90b3R5cGUuX2FsbENvbnRyb2xzRGlzYWJsZWQ9ZnVuY3Rpb24oKXt2YXIgdCxlO3RyeXtmb3IodmFyIG49T2JqZWN0KGkuZSkoT2JqZWN0LmtleXModGhpcy5jb250cm9scykpLHI9bi5uZXh0KCk7IXIuZG9uZTtyPW4ubmV4dCgpKWlmKHRoaXMuY29udHJvbHNbci52YWx1ZV0uZW5hYmxlZClyZXR1cm4hMX1jYXRjaChlKXt0PXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYoZT1uLnJldHVybikmJmUuY2FsbChuKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKCJNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAnIituKyInLiIpfSl9LGV9KE0pLE49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsQShuKSxJKGksbikpfHx0aGlzO3JldHVybiByLmNvbnRyb2xzPWUsci5faW5pdE9ic2VydmFibGVzKCksci5fc2V0VXBkYXRlU3RyYXRlZ3kobiksci5fc2V0VXBDb250cm9scygpLHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5hdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzLnB1c2godCksdGhpcy5fcmVnaXN0ZXJDb250cm9sKHQpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSxlLnByb3RvdHlwZS5yZW1vdmVBdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9LGUucHJvdG90eXBlLnNldENvbnRyb2w9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMSksZSYmKHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMCxlKSx0aGlzLl9yZWdpc3RlckNvbnRyb2woZSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2NoZWNrQWxsVmFsdWVzUHJlc2VudCh0KSx0LmZvckVhY2goZnVuY3Rpb24odCxpKXtuLl90aHJvd0lmQ29udHJvbE1pc3NpbmcoaSksbi5hdChpKS5zZXRWYWx1ZSh0LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucGF0Y2hWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLHQuZm9yRWFjaChmdW5jdGlvbih0LGkpe24uYXQoaSkmJm4uYXQoaSkucGF0Y2hWYWx1ZSh0LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihuLGkpe24ucmVzZXQodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKX0sZS5wcm90b3R5cGUuZ2V0UmF3VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9scy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBQP3QudmFsdWU6dC5nZXRSYXdWYWx1ZSgpfSl9LGUucHJvdG90eXBlLl9zeW5jUGVuZGluZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250cm9scy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4hIWUuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8dH0sITEpO3JldHVybiB0JiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksdH0sZS5wcm90b3R5cGUuX3Rocm93SWZDb250cm9sTWlzc2luZz1mdW5jdGlvbih0KXtpZighdGhpcy5jb250cm9scy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgICAgVGhlcmUgYXJlIG5vIGZvcm0gY29udHJvbHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgYXJyYXkgeWV0LiAgSWYgeW91J3JlIHVzaW5nIG5nTW9kZWwsXG4gICAgICAgIHlvdSBtYXkgd2FudCB0byBjaGVjayBuZXh0IHRpY2sgKGUuZy4gdXNlIHNldFRpbWVvdXQpLlxuICAgICAgIik7aWYoIXRoaXMuYXQodCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmb3JtIGNvbnRyb2wgYXQgaW5kZXggIit0KX0sZS5wcm90b3R5cGUuX2ZvckVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0KGUsbil9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnZhbHVlPXRoaXMuY29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVuYWJsZWR8fHQuZGlzYWJsZWR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KX0sZS5wcm90b3R5cGUuX2FueUNvbnRyb2xzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZCYmdChlKX0pfSxlLnByb3RvdHlwZS5fc2V0VXBDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9yZWdpc3RlckNvbnRyb2woZSl9KX0sZS5wcm90b3R5cGUuX2NoZWNrQWxsVmFsdWVzUHJlc2VudD1mdW5jdGlvbih0KXt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSxuKXtpZih2b2lkIDA9PT10W25dKXRocm93IG5ldyBFcnJvcigiTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sIGF0IGluZGV4OiAiK24rIi4iKX0pfSxlLnByb3RvdHlwZS5fYWxsQ29udHJvbHNEaXNhYmxlZD1mdW5jdGlvbigpe3ZhciB0LGU7dHJ5e2Zvcih2YXIgbj1PYmplY3QoaS5lKSh0aGlzLmNvbnRyb2xzKSxyPW4ubmV4dCgpOyFyLmRvbmU7cj1uLm5leHQoKSlpZihyLnZhbHVlLmVuYWJsZWQpcmV0dXJuITF9Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGU9bi5yZXR1cm4pJiZlLmNhbGwobil9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fXJldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJDb250cm9sPWZ1bmN0aW9uKHQpe3Quc2V0UGFyZW50KHRoaXMpLHQuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9LGV9KE0pLEY9UHJvbWlzZS5yZXNvbHZlKG51bGwpLEw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zdWJtaXR0ZWQ9ITEsaS5fZGlyZWN0aXZlcz1bXSxpLm5nU3VibWl0PW5ldyByLm4saS5mb3JtPW5ldyBEKHt9LE8oZSksayhuKSksaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyVmlld0luaXQ9ZnVuY3Rpb24oKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRyb2wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29udHJvbHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztGLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7dC5jb250cm9sPW4ucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLHcodC5jb250cm9sLHQpLHQuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLl9kaXJlY3RpdmVzLnB1c2godCl9KX0sZS5wcm90b3R5cGUuZ2V0Q29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7Ri50aGVuKGZ1bmN0aW9uKCl7dmFyIG49ZS5fZmluZENvbnRhaW5lcih0LnBhdGgpO24mJm4ucmVtb3ZlQ29udHJvbCh0Lm5hbWUpLGooZS5fZGlyZWN0aXZlcyx0KX0pfSxlLnByb3RvdHlwZS5hZGRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztGLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCksaT1uZXcgRCh7fSk7QyhpLHQpLG4ucmVnaXN0ZXJDb250cm9sKHQubmFtZSxpKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9LGUucHJvdG90eXBlLnJlbW92ZUZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO0YudGhlbihmdW5jdGlvbigpe3ZhciBuPWUuX2ZpbmRDb250YWluZXIodC5wYXRoKTtuJiZuLnJlbW92ZUNvbnRyb2wodC5uYW1lKX0pfSxlLnByb3RvdHlwZS5nZXRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUudXBkYXRlTW9kZWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO0YudGhlbihmdW5jdGlvbigpe24uZm9ybS5nZXQodC5wYXRoKS5zZXRWYWx1ZShlKX0pfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUodCl9LGUucHJvdG90eXBlLm9uU3VibWl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCxUKHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQodCksITF9LGUucHJvdG90eXBlLm9uUmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0Rm9ybSgpfSxlLnByb3RvdHlwZS5yZXNldEZvcm09ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx0aGlzLmZvcm0ucmVzZXQodCksdGhpcy5zdWJtaXR0ZWQ9ITF9LGUucHJvdG90eXBlLl9zZXRVcGRhdGVTdHJhdGVneT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfSxlLnByb3RvdHlwZS5fZmluZENvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3AoKSx0Lmxlbmd0aD90aGlzLmZvcm0uZ2V0KHQpOnRoaXMuZm9ybX0sZX0odSksVj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl92YWxpZGF0b3JzPWUsaS5fYXN5bmNWYWxpZGF0b3JzPW4saS5zdWJtaXR0ZWQ9ITEsaS5kaXJlY3RpdmVzPVtdLGkuZm9ybT1udWxsLGkubmdTdWJtaXQ9bmV3IHIubixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2NoZWNrRm9ybVByZXNlbnQoKSx0Lmhhc093blByb3BlcnR5KCJmb3JtIikmJih0aGlzLl91cGRhdGVWYWxpZGF0b3JzKCksdGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLl91cGRhdGVSZWdpc3RyYXRpb25zKCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRyb2wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb3JtLmdldCh0LnBhdGgpO3JldHVybiB3KGUsdCksZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmRpcmVjdGl2ZXMucHVzaCh0KSxlfSxlLnByb3RvdHlwZS5nZXRDb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnJlbW92ZUNvbnRyb2w9ZnVuY3Rpb24odCl7aih0aGlzLmRpcmVjdGl2ZXMsdCl9LGUucHJvdG90eXBlLmFkZEZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7QyhlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9LGUucHJvdG90eXBlLnJlbW92ZUZvcm1Hcm91cD1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmdldEZvcm1Hcm91cD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS5hZGRGb3JtQXJyYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb3JtLmdldCh0LnBhdGgpO0MoZSx0KSxlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5yZW1vdmVGb3JtQXJyYXk9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5nZXRGb3JtQXJyYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUudXBkYXRlTW9kZWw9ZnVuY3Rpb24odCxlKXt0aGlzLmZvcm0uZ2V0KHQucGF0aCkuc2V0VmFsdWUoZSl9LGUucHJvdG90eXBlLm9uU3VibWl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCxUKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX0sZS5wcm90b3R5cGUub25SZXNldD1mdW5jdGlvbigpe3RoaXMucmVzZXRGb3JtKCl9LGUucHJvdG90eXBlLnJlc2V0Rm9ybT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD12b2lkIDApLHRoaXMuZm9ybS5yZXNldCh0KSx0aGlzLnN1Ym1pdHRlZD0hMX0sZS5wcm90b3R5cGUuX3VwZGF0ZURvbVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRpcmVjdGl2ZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmZvcm0uZ2V0KGUucGF0aCk7ZS5jb250cm9sIT09biYmKGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gUyhlKX0pLGUudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChmdW5jdGlvbigpe3JldHVybiBTKGUpfSksZS5fcmF3VmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmdC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKG51bGwpfSksZS5fcmF3QXN5bmNWYWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZ0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UobnVsbCl9KSx0JiZ0Ll9jbGVhckNoYW5nZUZucygpfShlLmNvbnRyb2wsZSksbiYmdyhuLGUpLGUuY29udHJvbD1uKX0pLHRoaXMuZm9ybS5fdXBkYXRlVHJlZVZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZVJlZ2lzdHJhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gdC5fdXBkYXRlRG9tVmFsdWUoKX0pLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7fSksdGhpcy5fb2xkRm9ybT10aGlzLmZvcm19LGUucHJvdG90eXBlLl91cGRhdGVWYWxpZGF0b3JzPWZ1bmN0aW9uKCl7dmFyIHQ9Tyh0aGlzLl92YWxpZGF0b3JzKTt0aGlzLmZvcm0udmFsaWRhdG9yPWYuY29tcG9zZShbdGhpcy5mb3JtLnZhbGlkYXRvcix0XSk7dmFyIGU9ayh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpO3RoaXMuZm9ybS5hc3luY1ZhbGlkYXRvcj1mLmNvbXBvc2VBc3luYyhbdGhpcy5mb3JtLmFzeW5jVmFsaWRhdG9yLGVdKX0sZS5wcm90b3R5cGUuX2NoZWNrRm9ybVByZXNlbnQ9ZnVuY3Rpb24oKXt0aGlzLmZvcm18fF8ubWlzc2luZ0Zvcm1FeGNlcHRpb24oKX0sZX0odSl9LGg5RHE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJtclNHIikscj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzKXx8dGhpc31yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksdGhpc30sZX0obigicHVnVCIpLmEpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPWUsaS53b3JrPW4saS5wZW5kaW5nPSExLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT10O3ZhciBuPXRoaXMuaWQsaT10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9biYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChpLG4sZSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWUsdGhpcy5pZD10aGlzLmlkfHx0aGlzLnJlcXVlc3RBc3luY0lkKGksdGhpcy5pZCxlKSx0aGlzfSxlLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLHNldEludGVydmFsKHQuZmx1c2guYmluZCh0LHRoaXMpLG4pfSxlLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZD1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09biYmKG49MCksbnVsbCE9PW4mJnRoaXMuZGVsYXk9PT1uJiYhMT09PXRoaXMucGVuZGluZylyZXR1cm4gZTtjbGVhckludGVydmFsKGUpfSxlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTt2YXIgbj10aGlzLl9leGVjdXRlKHQsZSk7aWYobilyZXR1cm4gbjshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX0sZS5wcm90b3R5cGUuX2V4ZWN1dGU9ZnVuY3Rpb24odCxlKXt2YXIgbj0hMSxpPXZvaWQgMDt0cnl7dGhpcy53b3JrKHQpfWNhdGNoKHQpe249ITAsaT0hIXQmJnR8fG5ldyBFcnJvcih0KX1pZihuKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksaX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pZCxlPXRoaXMuc2NoZWR1bGVyLG49ZS5hY3Rpb25zLGk9bi5pbmRleE9mKHRoaXMpO3RoaXMud29yaz1udWxsLHRoaXMuc3RhdGU9bnVsbCx0aGlzLnBlbmRpbmc9ITEsdGhpcy5zY2hlZHVsZXI9bnVsbCwtMSE9PWkmJm4uc3BsaWNlKGksMSksbnVsbCE9dCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChlLHQsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbH0sZX0ocil9LGhVV1A6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4oIm1yU0ciKSxuKCJDY25HIiksbigiSXAwUiIpLG4oIk96ZkIiKTt2YXIgaT1mdW5jdGlvbigpe319LGlMeFE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPSExLHI9e1Byb21pc2U6dm9pZCAwLHNldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKHQpe2k9dH0sZ2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcoKXtyZXR1cm4gaX19fSxpaFlZOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiB2fSk7dmFyIGk9ZnVuY3Rpb24oKXt9LHI9ZnVuY3Rpb24oKXt9LG89IioiO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm57dHlwZTo3LG5hbWU6dCxkZWZpbml0aW9uczplLG9wdGlvbnM6e319fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6NCxzdHlsZXM6ZSx0aW1pbmdzOnR9fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MyxzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1udWxsKSx7dHlwZToyLHN0ZXBzOnQsb3B0aW9uczplfX1mdW5jdGlvbiBjKHQpe3JldHVybnt0eXBlOjYsc3R5bGVzOnQsb2Zmc2V0Om51bGx9fWZ1bmN0aW9uIGYodCxlLG4pe3JldHVybnt0eXBlOjAsbmFtZTp0LHN0eWxlczplLG9wdGlvbnM6bn19ZnVuY3Rpb24gaCh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPW51bGwpLHt0eXBlOjEsZXhwcjp0LGFuaW1hdGlvbjplLG9wdGlvbnM6bn19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCkse3R5cGU6OSxvcHRpb25zOnR9fWZ1bmN0aW9uIHAodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx7dHlwZToxMSxzZWxlY3Rvcjp0LGFuaW1hdGlvbjplLG9wdGlvbnM6bn19ZnVuY3Rpb24gbSh0KXtQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbih0KX12YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9LHQucHJvdG90eXBlLnRyaWdnZXJNaWNyb3Rhc2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO20oZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfSx0LnByb3RvdHlwZS5fb25TdGFydD1mdW5jdGlvbigpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX29uRmluaXNoKCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiAwfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT0wLHRoaXMucGxheWVycz10O3ZhciBuPTAsaT0wLHI9MCxvPXRoaXMucGxheWVycy5sZW5ndGg7MD09bz9tKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX29uRmluaXNoKCl9KTp0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0Lm9uRG9uZShmdW5jdGlvbigpeysrbj09byYmZS5fb25GaW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7KytpPT1vJiZlLl9vbkRlc3Ryb3koKX0pLHQub25TdGFydChmdW5jdGlvbigpeysrcj09byYmZS5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS50b3RhbFRpbWUpfSwwKX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluaXQoKX0pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuX29uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMucGFyZW50UGxheWVyfHx0aGlzLmluaXQoKSx0aGlzLl9vblN0YXJ0KCksdGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucGxheSgpfSl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucGF1c2UoKX0pfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzdGFydCgpfSl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmluaXNoKCl9KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX29uRGVzdHJveSgpfSx0LnByb3RvdHlwZS5fb25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRGVzdHJveUZucz1bXSl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzZXQoKX0pLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10KnRoaXMudG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQudG90YWxUaW1lP01hdGgubWluKDEsZS90LnRvdGFsVGltZSk6MTt0LnNldFBvc2l0aW9uKG4pfSl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXRQb3NpdGlvbigpO3Q9TWF0aC5taW4obix0KX0pLHR9LHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmJlZm9yZURlc3Ryb3kmJnQuYmVmb3JlRGVzdHJveSgpfSl9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksZS5sZW5ndGg9MH0sdH0oKSxnPSIhIn0saXNieTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGh9fSxqbFptOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBifSk7dmFyIGk9bigibXJTRyIpLHI9bigibjZnRyIpLG89bigiWWhiTyIpLGE9KG4oImloWVkiKSxuKCI0YzM1IikpLHM9bigiSzlJYSIpLHU9bigicHVnVCIpLGw9bigicDBpYiIpLGM9bigicDBTaiIpLGY9bigiVm5ELyIpLGg9bigidDlmWiIpLGQ9bigiWVNoMiIpLHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5faGlkZVRvZ2dsZT0hMSxlLmRpc3BsYXlNb2RlPSJkZWZhdWx0IixlfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGlkZVRvZ2dsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaWRlVG9nZ2xlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGlkZVRvZ2dsZT1PYmplY3Qoci5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShvLmEpLG09MCx5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiBvLl92aWV3Q29udGFpbmVyUmVmPXIsby5faGlkZVRvZ2dsZT0hMSxvLl9pbnB1dENoYW5nZXM9bmV3IHMuYSxvLl9oZWFkZXJJZD0ibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItIittKyssby5hY2NvcmRpb249ZSxvfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGlkZVRvZ2dsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaWRlVG9nZ2xlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGlkZVRvZ2dsZT1PYmplY3Qoci5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fZ2V0SGlkZVRvZ2dsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFjY29yZGlvbj90aGlzLmFjY29yZGlvbi5oaWRlVG9nZ2xlOnRoaXMuaGlkZVRvZ2dsZX0sZS5wcm90b3R5cGUuX2hhc1NwYWNpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYWNjb3JkaW9uJiYiZGVmYXVsdCI9PT0odGhpcy5leHBhbmRlZD90aGlzLmFjY29yZGlvbi5kaXNwbGF5TW9kZTp0aGlzLl9nZXRFeHBhbmRlZFN0YXRlKCkpfSxlLnByb3RvdHlwZS5fZ2V0RXhwYW5kZWRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbGF6eUNvbnRlbnQmJnRoaXMub3BlbmVkLnBpcGUoT2JqZWN0KGMuYSkobnVsbCksT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5leHBhbmRlZCYmIXQuX3BvcnRhbH0pLE9iamVjdChoLmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt0Ll9wb3J0YWw9bmV3IGEuZyh0Ll9sYXp5Q29udGVudC5fdGVtcGxhdGUsdC5fdmlld0NvbnRhaW5lclJlZil9KX0sZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy5faW5wdXRDaGFuZ2VzLm5leHQodCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9pbnB1dENoYW5nZXMuY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX2JvZHlBbmltYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50LmNsYXNzTGlzdCxuPXQucGhhc2VOYW1lLGk9dC50b1N0YXRlOyJkb25lIj09PW4mJiJleHBhbmRlZCI9PT1pP2UuYWRkKCJtYXQtZXhwYW5kZWQiKToic3RhcnQiPT09biYmImNvbGxhcHNlZCI9PT1pJiZlLnJlbW92ZSgibWF0LWV4cGFuZGVkIil9LGV9KG8uYiksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dmFyIHI9dGhpczt0aGlzLnBhbmVsPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uPXUuYS5FTVBUWSx0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb249T2JqZWN0KGwuYSkodC5vcGVuZWQsdC5jbG9zZWQsdC5faW5wdXRDaGFuZ2VzLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuISghdC5oaWRlVG9nZ2xlJiYhdC5kaXNhYmxlZCl9KSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiByLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLG4ubW9uaXRvcihlLm5hdGl2ZUVsZW1lbnQpfXJldHVybiB0LnByb3RvdHlwZS5fdG9nZ2xlPWZ1bmN0aW9uKCl7dGhpcy5wYW5lbC50b2dnbGUoKX0sdC5wcm90b3R5cGUuX2lzRXhwYW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5leHBhbmRlZH0sdC5wcm90b3R5cGUuX2dldEV4cGFuZGVkU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5fZ2V0RXhwYW5kZWRTdGF0ZSgpfSx0LnByb3RvdHlwZS5fZ2V0UGFuZWxJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLmlkfSx0LnByb3RvdHlwZS5fc2hvd1RvZ2dsZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnBhbmVsLmhpZGVUb2dnbGUmJiF0aGlzLnBhbmVsLmRpc2FibGVkfSx0LnByb3RvdHlwZS5fa2V5ZG93bj1mdW5jdGlvbih0KXtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGQubDpjYXNlIGQuZjp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlKCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpfSx0fSgpLGc9ZnVuY3Rpb24oKXt9LGI9ZnVuY3Rpb24oKXt9LF89ZnVuY3Rpb24oKXt9fSxsTEFQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KTt2YXIgaT1uKCJJcDBSIikscj1uKCJDY25HIiksbz1uKCJLOUlhIiksYT1uKCJwdWdUIikscz1uKCJGL1hMIiksdT1uKCJZU2gyIiksbD1uKCJ4TXlFIiksYz1uKCJHaTNpIiksZj1uKCJWbkQvIiksaD1uKCI2N1kvIiksZD1uKCJ0OWZaIikscD1uKCJtclNHIiksbT1uKCJkV1pnIik7bigibjZnRyIpO3ZhciB5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX29yaWdpbj0icHJvZ3JhbSIsZX1yZXR1cm4gT2JqZWN0KHAuYikoZSx0KSxlLnByb3RvdHlwZS5zZXRGb2N1c09yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQsdGhpc30sZS5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbT1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5zZXRBY3RpdmVJdGVtLmNhbGwodGhpcyxlKSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9pdGVtcz10LHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD0tMSx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgby5hLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj1hLmEuRU1QVFksdGhpcy5fdmVydGljYWw9ITAsdGhpcy5fc2tpcFByZWRpY2F0ZUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc2FibGVkfSx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgby5hLHRoaXMuY2hhbmdlPW5ldyBvLmEsdCBpbnN0YW5jZW9mIHIuRCYmdC5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbih0KXtpZihlLl9hY3RpdmVJdGVtKXt2YXIgbj10LnRvQXJyYXkoKS5pbmRleE9mKGUuX2FjdGl2ZUl0ZW0pO24+LTEmJm4hPT1lLl9hY3RpdmVJdGVtSW5kZXgmJihlLl9hY3RpdmVJdGVtSW5kZXg9bil9fSl9cmV0dXJuIHQucHJvdG90eXBlLnNraXBQcmVkaWNhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3NraXBQcmVkaWNhdGVGbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhXcmFwPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fd3JhcD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fdmVydGljYWw9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFR5cGVBaGVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHZvaWQgMD09PXQmJih0PTIwMCksdGhpcy5faXRlbXMubGVuZ3RoJiZ0aGlzLl9pdGVtcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldExhYmVsfSkpdGhyb3cgRXJyb3IoIkxpc3RLZXlNYW5hZ2VyIGl0ZW1zIGluIHR5cGVhaGVhZCBtb2RlIG11c3QgaW1wbGVtZW50IHRoZSBgZ2V0TGFiZWxgIG1ldGhvZC4iKTtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5wdXNoKHQpfSksT2JqZWN0KGMuYSkodCksT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjB9KSxPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUuX2dldEl0ZW1zQXJyYXkoKSxpPTE7aTxuLmxlbmd0aCsxO2krKyl7dmFyIHI9KGUuX2FjdGl2ZUl0ZW1JbmRleCtpKSVuLmxlbmd0aCxvPW5bcl07aWYoIWUuX3NraXBQcmVkaWNhdGVGbihvKSYmMD09PW8uZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKHQpKXtlLnNldEFjdGl2ZUl0ZW0ocik7YnJlYWt9fWUuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc30sdC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVJdGVtSW5kZXg7dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX0sdC5wcm90b3R5cGUub25LZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZTtzd2l0Y2goZSl7Y2FzZSB1Lm06cmV0dXJuIHZvaWQgdGhpcy50YWJPdXQubmV4dCgpO2Nhc2UgdS5kOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5uOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIHUuazppZigibHRyIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5pOmlmKCJsdHIiPT09dGhpcy5faG9yaXpvbnRhbCl7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCh0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49dS5hJiZlPD11Lm98fGU+PXUucCYmZTw9dS5qKSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVJdGVtSW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbUluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlSXRlbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldEZpcnN0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9LHQucHJvdG90eXBlLnNldExhc3RJdGVtQWN0aXZlPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfSx0LnByb3RvdHlwZS5zZXROZXh0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwP3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoMSl9LHQucHJvdG90eXBlLnNldFByZXZpb3VzSXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9LHQucHJvdG90eXBlLnVwZGF0ZUFjdGl2ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW1JbmRleD1uLHRoaXMuX2FjdGl2ZUl0ZW09ZVtuXX0sdC5wcm90b3R5cGUudXBkYXRlQWN0aXZlSXRlbUluZGV4PWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUl0ZW1CeURlbHRhPWZ1bmN0aW9uKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSW5XcmFwTW9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49MTtuPD1lLmxlbmd0aDtuKyspe3ZhciBpPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCpuK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbaV0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShpKX19LHQucHJvdG90eXBlLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlPWZ1bmN0aW9uKHQpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0LHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSXRlbUJ5SW5kZXg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoblt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oblt0XSk7KWlmKCFuW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fSx0LnByb3RvdHlwZS5fZ2V0SXRlbXNBcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIHIuRD90aGlzLl9pdGVtcy50b0FycmF5KCk6dGhpcy5faXRlbXN9LHR9KCkpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3BsYXRmb3JtPXR9cmV0dXJuIHQucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfSx0LnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDbGllbnRSZWN0cyYmdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KHQpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKHQpLnZpc2liaWxpdHl9LHQucHJvdG90eXBlLmlzVGFiYmFibGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTt2YXIgZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZnJhbWVFbGVtZW50fWNhdGNoKHQpe3JldHVybiBudWxsfX0odC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpO2lmKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigtMT09PWIoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHI9Yih0KTtpZih0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpcmV0dXJuLTEhPT1yO2lmKCJpZnJhbWUiPT09aSlyZXR1cm4hMTtpZigiYXVkaW8iPT09aSl7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LKXJldHVybiEwfWlmKCJ2aWRlbyI9PT1pKXtpZighdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJnRoaXMuX3BsYXRmb3JtLlRSSURFTlQpcmV0dXJuITE7aWYodGhpcy5fcGxhdGZvcm0uQkxJTkt8fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gpcmV0dXJuITB9cmV0dXJuKCJvYmplY3QiIT09aXx8IXRoaXMuX3BsYXRmb3JtLkJMSU5LJiYhdGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmISh0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPSJpbnB1dCI9PT1lJiZ0LnR5cGU7cmV0dXJuInRleHQiPT09bnx8InBhc3N3b3JkIj09PW58fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9KHQpKSYmdC50YWJJbmRleD49MH0sdC5wcm90b3R5cGUuaXNGb2N1c2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiFmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImlucHV0Ij09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSh0KSYmImhpZGRlbiI9PXQudHlwZX0odCkmJihmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8ImJ1dHRvbiI9PT1lfHwidGV4dGFyZWEiPT09ZX0odCl8fGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iYSI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJnQuaGFzQXR0cmlidXRlKCJocmVmIil9KHQpfHx0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGcodCkpfSh0KSYmIXRoaXMuaXNEaXNhYmxlZCh0KSYmdGhpcy5pc1Zpc2libGUodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlkpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBnKHQpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09dC50YWJJbmRleClyZXR1cm4hMTt2YXIgZT10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4iLTMyNzY4IiE9ZSYmISghZXx8aXNOYU4ocGFyc2VJbnQoZSwxMCkpKX1mdW5jdGlvbiBiKHQpe2lmKCFnKHQpKXJldHVybiBudWxsO3ZhciBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscil7dm9pZCAwPT09ciYmKHI9ITEpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9oYXNBdHRhY2hlZD0hMSx0aGlzLl9lbmFibGVkPSEwLHJ8fHRoaXMuYXR0YWNoQW5jaG9ycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fc3RhcnRBbmNob3IudGFiSW5kZXg9dGhpcy5fZW5kQW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl9lbmRBbmNob3ImJnRoaXMuX2VuZEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbmRBbmNob3IpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsfSx0LnByb3RvdHlwZS5hdHRhY2hBbmNob3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fc3RhcnRBbmNob3J8fCh0Ll9zdGFydEFuY2hvcj10Ll9jcmVhdGVBbmNob3IoKSx0Ll9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gdC5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKX0pKSx0Ll9lbmRBbmNob3J8fCh0Ll9lbmRBbmNob3I9dC5fY3JlYXRlQW5jaG9yKCksdC5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0pKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNJbml0aWFsRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLl9nZXRSZWdpb25Cb3VuZGFyeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIl0sIFtjZGtGb2N1c1JlZ2lvbiIrdCsiXSwgW2Nkay1mb2N1cy0iK3QrIl0iKSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXS5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy0iK3QpP2NvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtIit0KyInLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uIit0KyInIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAuIixlW25dKTplW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLXJlZ2lvbi0iK3QpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pO3JldHVybiJzdGFydCI9PXQ/ZS5sZW5ndGg/ZVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTplLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9LHQucHJvdG90eXBlLmZvY3VzSW5pdGlhbEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtjZGtGb2N1c0luaXRpYWxdIik7cmV0dXJuIHQ/KHQuaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtaW5pdGlhbCIpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLWluaXRpYWwnLCB1c2UgJ2Nka0ZvY3VzSW5pdGlhbCcgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMCIsdCksdC5mb2N1cygpLCEwKTp0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiB0JiZ0LmZvY3VzKCksISF0fSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLmhhc0F0dGFjaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfSx0LnByb3RvdHlwZS5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2Zvcih2YXIgZT10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXMsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGVbbl0pOm51bGw7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2Zvcih2YXIgZT10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXMsbj1lLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT1lW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQoZVtuXSk6bnVsbDtpZihpKXJldHVybiBpfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fY3JlYXRlQW5jaG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQudGFiSW5kZXg9dGhpcy5fZW5hYmxlZD8wOi0xLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdH0sdC5wcm90b3R5cGUuX2V4ZWN1dGVPblN0YWJsZT1mdW5jdGlvbih0KXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/dCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKE9iamVjdChkLmEpKDEpKS5zdWJzY3JpYmUodCl9LHR9KCksdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2NoZWNrZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9kb2N1bWVudD1ufXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLG5ldyBfKHQsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsZSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlkpKHYpLE9iamVjdChyLlkpKHIueiksT2JqZWN0KHIuWSkoaS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fbmdab25lPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9vcmlnaW49bnVsbCx0aGlzLl93aW5kb3dGb2N1c2VkPSExLHRoaXMuX2VsZW1lbnRJbmZvPW5ldyBNYXAsdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30sdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLm1vbml0b3I9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHZvaWQgMD09PWUmJihlPSExKSwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiBPYmplY3Qocy5hKShudWxsKTtpZih0aGlzLl9lbGVtZW50SW5mby5oYXModCkpe3ZhciBpPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtyZXR1cm4gaS5jaGVja0NoaWxkcmVuPWUsaS5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfXZhciByPXt1bmxpc3RlbjpmdW5jdGlvbigpe30sY2hlY2tDaGlsZHJlbjplLHN1YmplY3Q6bmV3IG8uYX07dGhpcy5fZWxlbWVudEluZm8uc2V0KHQsciksdGhpcy5faW5jcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50KCk7dmFyIGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uRm9jdXMoZSx0KX0sdT1mdW5jdGlvbihlKXtyZXR1cm4gbi5fb25CbHVyKGUsdCl9O3JldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixhLCEwKSx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHUsITApfSksci51bmxpc3Rlbj1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGEsITApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdSwhMCl9LHIuc3ViamVjdC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuc3RvcE1vbml0b3Jpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpO2UmJihlLnVubGlzdGVuKCksZS5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3Nlcyh0KSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUodCksdGhpcy5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50KCkpfSx0LnByb3RvdHlwZS5mb2N1c1ZpYT1mdW5jdGlvbih0LGUsbil7dGhpcy5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWUoZSksImZ1bmN0aW9uIj09dHlwZW9mIHQuZm9jdXMmJnQuZm9jdXMobil9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuc3RvcE1vbml0b3Jpbmcobil9KX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpe3ZhciBlPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0PW51bGwsdC5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWUoImtleWJvYXJkIil9LG49ZnVuY3Rpb24oKXt0Ll9sYXN0VG91Y2hUYXJnZXR8fHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJtb3VzZSIpfSxpPWZ1bmN0aW9uKGUpe251bGwhPXQuX3RvdWNoVGltZW91dElkJiZjbGVhclRpbWVvdXQodC5fdG91Y2hUaW1lb3V0SWQpLHQuX2xhc3RUb3VjaFRhcmdldD1lLnRhcmdldCx0Ll90b3VjaFRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2xhc3RUb3VjaFRhcmdldD1udWxsfSw2NTApfSxyPWZ1bmN0aW9uKCl7dC5fd2luZG93Rm9jdXNlZD0hMCx0Ll93aW5kb3dGb2N1c1RpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3dpbmRvd0ZvY3VzZWQ9ITF9KX07dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixpLCFPYmplY3QobS5kKSgpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixyKX0pLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixlLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLG4sITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGksIU9iamVjdChtLmQpKCl8fHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHIpLGNsZWFyVGltZW91dCh0Ll93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX3RvdWNoVGltZW91dElkKSxjbGVhclRpbWVvdXQodC5fb3JpZ2luVGltZW91dElkKX19fSx0LnByb3RvdHlwZS5fdG9nZ2xlQ2xhc3M9ZnVuY3Rpb24odCxlLG4pe24/dC5jbGFzc0xpc3QuYWRkKGUpOnQuY2xhc3NMaXN0LnJlbW92ZShlKX0sdC5wcm90b3R5cGUuX3NldENsYXNzZXM9ZnVuY3Rpb24odCxlKXt0aGlzLl9lbGVtZW50SW5mby5nZXQodCkmJih0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstZm9jdXNlZCIsISFlKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstdG91Y2gtZm9jdXNlZCIsInRvdWNoIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLW1vdXNlLWZvY3VzZWQiLCJtb3VzZSI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstcHJvZ3JhbS1mb2N1c2VkIiwicHJvZ3JhbSI9PT1lKSl9LHQucHJvdG90eXBlLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UuX29yaWdpbj10LGUuX29yaWdpblRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuX29yaWdpbj1udWxsfSwxKX0pfSx0LnByb3RvdHlwZS5fd2FzQ2F1c2VkQnlUb3VjaD1mdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldDtyZXR1cm4gdGhpcy5fbGFzdFRvdWNoVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZSBpbnN0YW5jZW9mIE5vZGUmJihlPT09dGhpcy5fbGFzdFRvdWNoVGFyZ2V0fHxlLmNvbnRhaW5zKHRoaXMuX2xhc3RUb3VjaFRhcmdldCkpfSx0LnByb3RvdHlwZS5fb25Gb2N1cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2VsZW1lbnRJbmZvLmdldChlKTtpZihuJiYobi5jaGVja0NoaWxkcmVufHxlPT09dC50YXJnZXQpKXt2YXIgaT10aGlzLl9vcmlnaW47aXx8KGk9dGhpcy5fd2luZG93Rm9jdXNlZCYmdGhpcy5fbGFzdEZvY3VzT3JpZ2luP3RoaXMuX2xhc3RGb2N1c09yaWdpbjp0aGlzLl93YXNDYXVzZWRCeVRvdWNoKHQpPyJ0b3VjaCI6InByb2dyYW0iKSx0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihuLnN1YmplY3QsaSksdGhpcy5fbGFzdEZvY3VzT3JpZ2luPWl9fSx0LnByb3RvdHlwZS5fb25CbHVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpOyFufHxuLmNoZWNrQ2hpbGRyZW4mJnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJmUuY29udGFpbnModC5yZWxhdGVkVGFyZ2V0KXx8KHRoaXMuX3NldENsYXNzZXMoZSksdGhpcy5fZW1pdE9yaWdpbihuLnN1YmplY3QsbnVsbCkpfSx0LnByb3RvdHlwZS5fZW1pdE9yaWdpbj1mdW5jdGlvbih0LGUpe3RoaXMuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5uZXh0KGUpfSl9LHQucHJvdG90eXBlLl9pbmNyZW1lbnRNb25pdG9yZWRFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXsxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmdGhpcy5fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoKX0sdC5wcm90b3R5cGUuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpey0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuWSkoci56KSxPYmplY3Qoci5ZKShtLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gMD09PXQuYnV0dG9uc319LGx6bGo6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJGVlN5IiksbigiRnpxYyIpLG4oIldmNHAiKSxpLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1jYXJke3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MjRweDtib3JkZXItcmFkaXVzOjJweH0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FyZCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7d2lkdGg6MTAwJX1bZGlyPXJ0bF0gLm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse2xlZnQ6YXV0bztyaWdodDowfS5tYXQtY2FyZCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbC5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtY2FyZCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbC5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jYXJke291dGxpbmU6c29saWQgMXB4fX0ubWF0LWNhcmQtYWN0aW9ucywubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLXRpdGxle2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi0xNnB4O21hcmdpbi1yaWdodDotMTZweDtwYWRkaW5nOjhweCAwfS5tYXQtY2FyZC1hY3Rpb25zLWFsaWduLWVuZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtY2FyZC1pbWFnZXt3aWR0aDpjYWxjKDEwMCUgKyA0OHB4KTttYXJnaW46MCAtMjRweCAxNnB4IC0yNHB4fS5tYXQtY2FyZC14bC1pbWFnZXt3aWR0aDoyNDBweDtoZWlnaHQ6MjQwcHg7bWFyZ2luOi04cHh9Lm1hdC1jYXJkLWZvb3RlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4IC0yNHB4IC0yNHB4fS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbnttYXJnaW46MCA0cHh9Lm1hdC1jYXJkLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tYXQtY2FyZC1oZWFkZXItdGV4dHttYXJnaW46MCA4cHh9Lm1hdC1jYXJkLWF2YXRhcntoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Lm1hdC1jYXJkLWxnLWltYWdlLC5tYXQtY2FyZC1tZC1pbWFnZSwubWF0LWNhcmQtc20taW1hZ2V7bWFyZ2luOi04cHggMH0ubWF0LWNhcmQtdGl0bGUtZ3JvdXB7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbjowIC04cHh9Lm1hdC1jYXJkLXNtLWltYWdle3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHh9Lm1hdC1jYXJkLW1kLWltYWdle3dpZHRoOjExMnB4O2hlaWdodDoxMTJweH0ubWF0LWNhcmQtbGctaW1hZ2V7d2lkdGg6MTUycHg7aGVpZ2h0OjE1MnB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LWNhcmR7cGFkZGluZzoyNHB4IDE2cHh9Lm1hdC1jYXJkLWFjdGlvbnN7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgMzJweCk7bWFyZ2luOjE2cHggLTE2cHh9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe21hcmdpbjowfS5tYXQtY2FyZC14bC1pbWFnZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1oZWFkZXJ7bWFyZ2luOi04cHggMCAwIDB9Lm1hdC1jYXJkLWZvb3RlcnttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHh9fS5tYXQtY2FyZC1jb250ZW50PjpmaXJzdC1jaGlsZCwubWF0LWNhcmQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubWF0LWNhcmQtY29udGVudD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3RlciksLm1hdC1jYXJkPjpsYXN0LWNoaWxkOm5vdCgubWF0LWNhcmQtZm9vdGVyKXttYXJnaW4tYm90dG9tOjB9Lm1hdC1jYXJkLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTI0cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC1hY3Rpb25zOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMTZweDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uOmZpcnN0LWNoaWxkLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKSwubWF0LWNhcmQtdGl0bGU6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDotNHB4fS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXN1YnRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotOHB4fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5sYigyLFtpLmFiKG51bGwsMCksaS5hYihudWxsLDEpXSxudWxsLG51bGwpfXZhciBhPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIHModCl7cmV0dXJuIGkubGIoMixbaS5hYihudWxsLDApLCh0KCkoKSxpLlJhKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwxKSxpLmFiKG51bGwsMildLG51bGwsbnVsbCl9fSxtQ2hGOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pfSxtVnNhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiQ2NuRyIpO24oIjRjMzUiKSxuKCJLOUlhIiksbigicHVnVCIpLG4oIkYvWEwiKSxuKCJtclNHIiksbigiaDlEcSIpLG4oInAwaWIiKSxuKCJpaFlZIiksbigibExBUCIpLG4oIldmNHAiKSxuKCJuNmdHIiksbigiWVNoMiIpLG4oInQ5ZloiKSxuKCJueTI0IiksbigiVm5ELyIpLG4oIk1HQlMiKSxuKCJ6b3RtIiksbigiNjdZLyIpLG4oIjAvdVEiKSxuKCJwMFNqIiksbigiVDFETSIpLG4oIkZGT28iKSxuKCI2MGlVIiksbigiZURrUCIpLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW5ldyBpLnEoIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBhPWZ1bmN0aW9uKCl7fX0sbXJTRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07ZnVuY3Rpb24gcih0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9aSh0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX12YXIgbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKWZvcih2YXIgciBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKHRbcl09ZVtyXSk7cmV0dXJuIHR9O2Z1bmN0aW9uIGEodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fWZ1bmN0aW9uIHModCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIGkscixvPW4uY2FsbCh0KSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKGk9by5uZXh0KCkpLmRvbmU7KWEucHVzaChpLnZhbHVlKX1jYXRjaCh0KXtyPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKHIpdGhyb3cgci5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KHMoYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9fSxuNmdHOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbnVsbCE9dCYmIiIrdCE9ImZhbHNlIn1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLG8odCk/TnVtYmVyKHQpOmV9ZnVuY3Rpb24gbyh0KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh0KSkmJiFpc05hTihOdW1iZXIodCkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbnVsbD09dD8iIjoic3RyaW5nIj09dHlwZW9mIHQ/dDp0KyJweCJ9bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pfSxua1k3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc2NoZWR1bGV9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sbnkyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIGk9bigibXJTRyIpLHI9bigiTUdCUyIpLG89bigiem90bSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IHModCkpfX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5ub3RpZmllcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHUodCksaT1PYmplY3Qoby5hKShuLHRoaXMubm90aWZpZXIpO3JldHVybiBpJiYhaS5jbG9zZWQ/KG4uYWRkKGkpLGUuc3Vic2NyaWJlKG4pKTpufSx0fSgpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4saSxyKXt0aGlzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKCl7fSxlfShyLmEpfSxwMFNqOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiSVVUYiIpLHI9bigiUFU4TCIpLG89bigiRzVKMSIpLGE9bigibmtZNyIpLHM9bigiRi9YTCIpLHU9bigiMC91USIpLGw9bigiVHhqZyIpO2Z1bmN0aW9uIGMoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbdC5sZW5ndGgtMV07T2JqZWN0KGEuYSkobik/dC5wb3AoKTpuPW51bGw7dmFyIGM9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAxPT09dC5sZW5ndGh8fDI9PT10Lmxlbmd0aCYmT2JqZWN0KGEuYSkodFsxXSk/T2JqZWN0KHUuYSkodFswXSk6T2JqZWN0KGwuYSkoKShzLmEuYXBwbHkodm9pZCAwLHQpKX0oMSE9PWN8fG4/Yz4wP09iamVjdChpLmEpKHQsbik6T2JqZWN0KG8uYikobik6T2JqZWN0KHIuYSkodFswXSksZSl9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSl9LHAwaWI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBpPW4oIjZibEYiKSxyPW4oIm5rWTciKSxvPW4oIlpuOEQiKSxhPW4oIklVVGIiKTtmdW5jdGlvbiBzKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzPW51bGwsdT10W3QubGVuZ3RoLTFdO3JldHVybiBPYmplY3Qoci5hKSh1KT8ocz10LnBvcCgpLHQubGVuZ3RoPjEmJiJudW1iZXIiPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKG49dC5wb3AoKSkpOiJudW1iZXIiPT10eXBlb2YgdSYmKG49dC5wb3AoKSksbnVsbD09PXMmJjE9PT10Lmxlbmd0aCYmdFswXWluc3RhbmNlb2YgaS5hP3RbMF06T2JqZWN0KG8uYSkobikoT2JqZWN0KGEuYSkodCxzKSl9fSxwSW0zOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGk9bigiQ2NuRyIpLHI9KG4oIkJIbmQiKSxuKCJJcDBSIiksbigieTRxUyIpKSxvPShuKCJGenFjIiksbigiV2Y0cCIpLGkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyJtYXQtdGFibGV7ZGlzcGxheTpibG9ja31tYXQtaGVhZGVyLXJvd3ttaW4taGVpZ2h0OjU2cHh9bWF0LWZvb3Rlci1yb3csbWF0LXJvd3ttaW4taGVpZ2h0OjQ4cHh9bWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvd3tkaXNwbGF5OmZsZXg7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3h9bWF0LWZvb3Rlci1yb3c6OmFmdGVyLG1hdC1oZWFkZXItcm93OjphZnRlcixtYXQtcm93OjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazttaW4taGVpZ2h0OmluaGVyaXQ7Y29udGVudDonJ31tYXQtY2VsbDpmaXJzdC1jaGlsZCxtYXQtZm9vdGVyLWNlbGw6Zmlyc3QtY2hpbGQsbWF0LWhlYWRlci1jZWxsOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDoyNHB4fVtkaXI9cnRsXSBtYXQtY2VsbDpmaXJzdC1jaGlsZCxbZGlyPXJ0bF0gbWF0LWZvb3Rlci1jZWxsOmZpcnN0LWNoaWxkLFtkaXI9cnRsXSBtYXQtaGVhZGVyLWNlbGw6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoyNHB4fW1hdC1jZWxsOmxhc3QtY2hpbGQsbWF0LWZvb3Rlci1jZWxsOmxhc3QtY2hpbGQsbWF0LWhlYWRlci1jZWxsOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDoyNHB4fVtkaXI9cnRsXSBtYXQtY2VsbDpsYXN0LWNoaWxkLFtkaXI9cnRsXSBtYXQtZm9vdGVyLWNlbGw6bGFzdC1jaGlsZCxbZGlyPXJ0bF0gbWF0LWhlYWRlci1jZWxsOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoyNHB4fW1hdC1jZWxsLG1hdC1mb290ZXItY2VsbCxtYXQtaGVhZGVyLWNlbGx7ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3dvcmQtd3JhcDpicmVhay13b3JkO21pbi1oZWlnaHQ6aW5oZXJpdH10YWJsZS5tYXQtdGFibGV7Ym9yZGVyLXNwYWNpbmc6MH10ci5tYXQtaGVhZGVyLXJvd3toZWlnaHQ6NTZweH10ci5tYXQtZm9vdGVyLXJvdyx0ci5tYXQtcm93e2hlaWdodDo0OHB4fXRoLm1hdC1oZWFkZXItY2VsbHt0ZXh0LWFsaWduOmxlZnR9dGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxsLHRoLm1hdC1oZWFkZXItY2VsbHtwYWRkaW5nOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZH10ZC5tYXQtY2VsbDpmaXJzdC1jaGlsZCx0ZC5tYXQtZm9vdGVyLWNlbGw6Zmlyc3QtY2hpbGQsdGgubWF0LWhlYWRlci1jZWxsOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDoyNHB4fXRkLm1hdC1jZWxsOmxhc3QtY2hpbGQsdGQubWF0LWZvb3Rlci1jZWxsOmxhc3QtY2hpbGQsdGgubWF0LWhlYWRlci1jZWxsOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDoyNHB4fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaS5sYigyLFtpLmhiKDQwMjY1MzE4NCwxLHtfcm93T3V0bGV0OjB9KSxpLmhiKDQwMjY1MzE4NCwyLHtfaGVhZGVyUm93T3V0bGV0OjB9KSxpLmhiKDQwMjY1MzE4NCwzLHtfZm9vdGVyUm93T3V0bGV0OjB9KSwodCgpKCksaS5SYSgzLDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDQsMTYzODQsW1syLDRdXSwwLHIucyxbaS5RLGkua10sbnVsbCxudWxsKSwodCgpKCksaS5SYSg1LDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDYsMTYzODQsW1sxLDRdXSwwLHIucSxbaS5RLGkua10sbnVsbCxudWxsKSwodCgpKCksaS5SYSg3LDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDgsMTYzODQsW1szLDRdXSwwLHIucixbaS5RLGkua10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgcz1pLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiB1KHQpe3JldHVybiBpLmxiKDIsWyh0KCkoKSxpLlJhKDAsMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuUWEoMSwxNDc0NTYsbnVsbCwwLHIuYyxbaS5RXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBsPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIGModCl7cmV0dXJuIGkubGIoMixbKHQoKSgpLGkuUmEoMCwxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5RYSgxLDE0NzQ1NixudWxsLDAsci5jLFtpLlFdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9fSxwTW5TOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCJDY25HIikscj1uKCJaWUNpIiksbz1pLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBhKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMTY3NzcyMTYsbnVsbCxudWxsLDEsInJvdXRlci1vdXRsZXQiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuUWEoMSwyMTI5OTIsbnVsbCwwLHIubyxbci5iLGkuUSxpLmosWzgsbnVsbF0saS5oXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX12YXIgcz1pLk5hKCJuZy1jb21wb25lbnQiLHIucyxmdW5jdGlvbih0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDEsIm5nLWNvbXBvbmVudCIsW10sbnVsbCxudWxsLG51bGwsYSxvKSksaS5RYSgxLDQ5MTUyLG51bGwsMCxyLnMsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX0se30se30sW10pfSxwc1cwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgaT1uKCJtclNHIikscj1uKCJ6b3RtIiksbz1uKCJNR0JTIiksYT1uKCI2N1kvIikscz1uKCIwL3VRIik7ZnVuY3Rpb24gdSh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oaSl7cmV0dXJuIGkucGlwZSh1KGZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdChzLmEpKHQobixpKSkucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0LHIpe3JldHVybiBlKG4sdCxpLHIpfSkpfSxuKSl9OigibnVtYmVyIj09dHlwZW9mIGUmJihuPWUpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IGwodCxuKSl9KX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMucHJvamVjdD10LHRoaXMuY29uY3VycmVudD1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBjKHQsdGhpcy5wcm9qZWN0LHRoaXMuY29uY3VycmVudCkpfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dm9pZCAwPT09aSYmKGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5wcm9qZWN0PW4sci5jb25jdXJyZW50PWksci5oYXNDb21wbGV0ZWQ9ITEsci5idWZmZXI9W10sci5hY3RpdmU9MCxyLmluZGV4PTAscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU8dGhpcy5jb25jdXJyZW50P3RoaXMuX3RyeU5leHQodCk6dGhpcy5idWZmZXIucHVzaCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5wcm9qZWN0KHQsbil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmFjdGl2ZSsrLHRoaXMuX2lubmVyU3ViKGUsdCxuKX0sZS5wcm90b3R5cGUuX2lubmVyU3ViPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmFkZChPYmplY3Qoci5hKSh0aGlzLHQsZSxuKSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaGFzQ29tcGxldGVkPSEwLDA9PT10aGlzLmFjdGl2ZSYmMD09PXRoaXMuYnVmZmVyLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1ZmZlcjt0aGlzLnJlbW92ZSh0KSx0aGlzLmFjdGl2ZS0tLGUubGVuZ3RoPjA/dGhpcy5fbmV4dChlLnNoaWZ0KCkpOjA9PT10aGlzLmFjdGl2ZSYmdGhpcy5oYXNDb21wbGV0ZWQmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oby5hKX0scHVnVDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImlzYnkiKSxyPW4oIk1jU28iKSxvPW4oIjJCZGoiKSxhPW4oIkVobWsiKSxzPW4oImVpaHMiKSx1PW4oIm1yU0ciKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dmFyIGk9dC5jYWxsKHRoaXMsbj9uLmxlbmd0aCsiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4gICIrbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSsxKyIpICIrdC50b1N0cmluZygpfSkuam9pbigiXG4gICIpOiIiKXx8dGhpcztyZXR1cm4gaS5lcnJvcnM9bixpLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihpLGUucHJvdG90eXBlKSxpfXJldHVybiB1LmIoZSx0KSxlfShFcnJvcik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5zdWJzY3JpYmU9dCl9dmFyIGU7cmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQsZT0hMTtpZighdGhpcy5jbG9zZWQpe3ZhciBuPXRoaXMuX3BhcmVudCx1PXRoaXMuX3BhcmVudHMsYz10aGlzLl91bnN1YnNjcmliZSxoPXRoaXMuX3N1YnNjcmlwdGlvbnM7dGhpcy5jbG9zZWQ9ITAsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbDtmb3IodmFyIGQ9LTEscD11P3UubGVuZ3RoOjA7bjspbi5yZW1vdmUodGhpcyksbj0rK2Q8cCYmdVtkXXx8bnVsbDtpZihPYmplY3Qoby5hKShjKSYmT2JqZWN0KGEuYSkoYykuY2FsbCh0aGlzKT09PXMuYSYmKGU9ITAsdD10fHwocy5hLmUgaW5zdGFuY2VvZiBsP2Yocy5hLmUuZXJyb3JzKTpbcy5hLmVdKSksT2JqZWN0KGkuYSkoaCkpZm9yKGQ9LTEscD1oLmxlbmd0aDsrK2Q8cDspe3ZhciBtPWhbZF07aWYoT2JqZWN0KHIuYSkobSkmJk9iamVjdChhLmEpKG0udW5zdWJzY3JpYmUpLmNhbGwobSk9PT1zLmEpe2U9ITAsdD10fHxbXTt2YXIgeT1zLmEuZTt5IGluc3RhbmNlb2YgbD90PXQuY29uY2F0KGYoeS5lcnJvcnMpKTp0LnB1c2goeSl9fWlmKGUpdGhyb3cgbmV3IGwodCl9fSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYoIWV8fGU9PT10LkVNUFRZKXJldHVybiB0LkVNUFRZO2lmKGU9PT10aGlzKXJldHVybiB0aGlzO3ZhciBuPWU7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImZ1bmN0aW9uIjpuPW5ldyB0KGUpO2Nhc2Uib2JqZWN0IjppZihuLmNsb3NlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIG4udW5zdWJzY3JpYmUpcmV0dXJuIG47aWYodGhpcy5jbG9zZWQpcmV0dXJuIG4udW5zdWJzY3JpYmUoKSxuO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuLl9hZGRQYXJlbnQpe3ZhciBpPW47KG49bmV3IHQpLl9zdWJzY3JpcHRpb25zPVtpXX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrZSsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1yZXR1cm4odGhpcy5fc3Vic2NyaXB0aW9uc3x8KHRoaXMuX3N1YnNjcmlwdGlvbnM9W10pKS5wdXNoKG4pLG4uX2FkZFBhcmVudCh0aGlzKSxufSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vic2NyaXB0aW9ucztpZihlKXt2YXIgbj1lLmluZGV4T2YodCk7LTEhPT1uJiZlLnNwbGljZShuLDEpfX0sdC5wcm90b3R5cGUuX2FkZFBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJlbnQsbj10aGlzLl9wYXJlbnRzO2UmJmUhPT10P24/LTE9PT1uLmluZGV4T2YodCkmJm4ucHVzaCh0KTp0aGlzLl9wYXJlbnRzPVt0XTp0aGlzLl9wYXJlbnQ9dH0sdC5FTVBUWT0oKGU9bmV3IHQpLmNsb3NlZD0hMCxlKSx0fSgpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUgaW5zdGFuY2VvZiBsP2UuZXJyb3JzOmUpfSxbXSl9fSxxQWxTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4geX0pO3ZhciBpPW4oImRXWmciKSxyPW4oIkNjbkciKSxvPW4oIks5SWEiKSxhPW4oIjZibEYiKSxzPW4oIkYvWEwiKSx1PW4oImJuZTUiKSxsPW4oInAwaWIiKSxjPW4oIlJuZXkiKSxmPW4oIlZuRC8iKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fc2Nyb2xsZWQ9bmV3IG8uYSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl9zY3JvbGxlZC5uZXh0KHQpfSk7dGhpcy5zY3JvbGxDb250YWluZXJzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5kZXJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQodCk7ZSYmKGUudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuc2Nyb2xsZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9hLmEuY3JlYXRlKGZ1bmN0aW9uKG4pe2UuX2dsb2JhbFN1YnNjcmlwdGlvbnx8ZS5fYWRkR2xvYmFsTGlzdGVuZXIoKTt2YXIgaT10PjA/ZS5fc2Nyb2xsZWQucGlwZShPYmplY3QoYy5hKSh0KSkuc3Vic2NyaWJlKG4pOmUuX3Njcm9sbGVkLnN1YnNjcmliZShuKTtyZXR1cm4gZS5fc2Nyb2xsZWRDb3VudCsrLGZ1bmN0aW9uKCl7aS51bnN1YnNjcmliZSgpLGUuX3Njcm9sbGVkQ291bnQtLSxlLl9zY3JvbGxlZENvdW50fHxlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOk9iamVjdChzLmEpKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuZGVyZWdpc3RlcihuKX0pLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmFuY2VzdG9yU2Nyb2xsZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0KTtyZXR1cm4gdGhpcy5zY3JvbGxlZChlKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fHxuLmluZGV4T2YodCk+LTF9KSl9LHQucHJvdG90eXBlLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChyLHQpJiZuLnB1c2gocil9KSxufSx0LnByb3RvdHlwZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPWUubmF0aXZlRWxlbWVudCxpPXQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYobj09aSlyZXR1cm4hMH13aGlsZShuPW4ucGFyZW50RWxlbWVudCk7cmV0dXJuITF9LHQucHJvdG90eXBlLl9hZGRHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBPYmplY3QodS5hKSh3aW5kb3cuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9zY3JvbGxlZC5uZXh0KCl9KX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXI9ZnVuY3Rpb24oKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlkpKHIueiksT2JqZWN0KHIuWSkoaS5hKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9zY3JvbGw9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IG8uYSx0aGlzLl9zY3JvbGxMaXN0ZW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gaS5fZWxlbWVudFNjcm9sbGVkLm5leHQodCl9fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHQuX3Njcm9sbExpc3RlbmVyKX0pLHRoaXMuX3Njcm9sbC5yZWdpc3Rlcih0aGlzKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9zY3JvbGxMaXN0ZW5lciYmdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX3Njcm9sbExpc3RlbmVyKSx0aGlzLl9lbGVtZW50U2Nyb2xsZWQuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuZWxlbWVudFNjcm9sbGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0RWxlbWVudFJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmfSx0fSgpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX2NoYW5nZT10LmlzQnJvd3Nlcj9lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChsLmEpKE9iamVjdCh1LmEpKHdpbmRvdywicmVzaXplIiksT2JqZWN0KHUuYSkod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOk9iamVjdChzLmEpKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3AraSxyaWdodDp0LmxlZnQrbixoZWlnaHQ6aSx3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZShPYmplY3QoYy5hKSh0KSk6dGhpcy5fY2hhbmdlfSx0LnByb3RvdHlwZS5fdXBkYXRlVmlld3BvcnRTaXplPWZ1bmN0aW9uKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6d2luZG93LmlubmVyV2lkdGgsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5ZKShpLmEpLE9iamVjdChyLlkpKHIueikpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxtPXtwcm92aWRlOnAsZGVwczpbW25ldyByLkEsbmV3IHIuSyxwXSxpLmEsci56XSx1c2VGYWN0b3J5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdHx8bmV3IHAoZSxuKX19LHk9ZnVuY3Rpb24oKXt9fSxzZVAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTt2YXIgaT1uKCJDY25HIikscj0obigiaWhZWSIpLG4oIm1yU0ciKSksbz1uKCJuNmdHIiksYT1uKCJXZjRwIikscz1uKCJHNUoxIiksdT1uKCJwMGliIiksbD1uKCJibmU1IiksYz1uKCJ0OWZaIiksZj1uKCJwMFNqIiksaD1mdW5jdGlvbigpe307ZnVuY3Rpb24gZCh0KXtyZXR1cm4gRXJyb3IoIkEgaGludCB3YXMgYWxyZWFkeSBkZWNsYXJlZCBmb3IgJ2FsaWduPVwiIit0KyJcIicuIil9dmFyIHA9MCxtPU9iamVjdChhLnopKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0sInByaW1hcnkiKSx5PW5ldyBpLnEoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyLG8sYSxzLHUpe3ZhciBsPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBsLl9lbGVtZW50UmVmPWUsbC5fY2hhbmdlRGV0ZWN0b3JSZWY9bixsLl9kaXI9cixsLl9kZWZhdWx0T3B0aW9ucz1vLGwuX3BsYXRmb3JtPWEsbC5fbmdab25lPXMsbC5fc2hvd0Fsd2F5c0FuaW1hdGU9ITEsbC5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU9IiIsbC5faGludExhYmVsPSIiLGwuX2hpbnRMYWJlbElkPSJtYXQtaGludC0iK3ArKyxsLl9sYWJlbElkPSJtYXQtZm9ybS1maWVsZC1sYWJlbC0iK3ArKyxsLl9sYWJlbE9wdGlvbnM9aXx8e30sbC5mbG9hdExhYmVsPWwuX2xhYmVsT3B0aW9ucy5mbG9hdHx8ImF1dG8iLGwuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT11LGx9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhcHBlYXJhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGVhcmFuY2V8fHRoaXMuX2RlZmF1bHRPcHRpb25zJiZ0aGlzLl9kZWZhdWx0T3B0aW9ucy5hcHBlYXJhbmNlfHwibGVnYWN5In0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9dCwib3V0bGluZSI9PT10aGlzLl9hcHBlYXJhbmNlJiZuIT09dCYmKHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShPYmplY3QoYy5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlT3V0bGluZUdhcCgpfSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlT3V0bGluZUdhcCgpfSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGlkZVJlcXVpcmVkTWFya2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1PYmplY3Qoby5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIl9zaG91bGRBbHdheXNGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfY2FuTGFiZWxGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiJuZXZlciIhPT10aGlzLmZsb2F0TGFiZWx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaW50TGFiZWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGludExhYmVsfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGludExhYmVsPXQsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbG9hdExhYmVsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuImxlZ2FjeSIhPT10aGlzLmFwcGVhcmFuY2UmJiJuZXZlciI9PT10aGlzLl9mbG9hdExhYmVsPyJhdXRvIjp0aGlzLl9mbG9hdExhYmVsfSxzZXQ6ZnVuY3Rpb24odCl7dCE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPXR8fHRoaXMuX2xhYmVsT3B0aW9ucy5mbG9hdHx8ImF1dG8iLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Db250YWluZXJSZWZ8fHRoaXMuX2VsZW1lbnRSZWZ9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdmFsaWRhdGVDb250cm9sQ2hpbGQoKSx0aGlzLl9jb250cm9sLmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWZvcm0tZmllbGQtdHlwZS0iK3RoaXMuX2NvbnRyb2wuY29udHJvbFR5cGUpLHRoaXMuX2NvbnRyb2wuc3RhdGVDaGFuZ2VzLnBpcGUoT2JqZWN0KGYuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdC5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdC5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KTt2YXIgZT10aGlzLl9jb250cm9sLm5nQ29udHJvbCYmdGhpcy5fY29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzfHxzLmE7T2JqZWN0KHUuYSkoZSx0aGlzLl9wcmVmaXhDaGlsZHJlbi5jaGFuZ2VzLHRoaXMuX3N1ZmZpeENoaWxkcmVuLmNoYW5nZXMpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoT2JqZWN0KGYuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3Byb2Nlc3NIaW50cygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoT2JqZWN0KGYuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3N5bmNEZXNjcmliZWRCeUlkcygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZD1mdW5jdGlvbigpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCl9LGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSxlLnByb3RvdHlwZS5fc2hvdWxkRm9yd2FyZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGUmJmVbdF19LGUucHJvdG90eXBlLl9oYXNQbGFjZWhvbGRlcj1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wucGxhY2Vob2xkZXJ8fHRoaXMuX3BsYWNlaG9sZGVyQ2hpbGQpfSxlLnByb3RvdHlwZS5faGFzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2xhYmVsQ2hpbGR9LGUucHJvdG90eXBlLl9zaG91bGRMYWJlbEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQmJih0aGlzLl9jb250cm9sLnNob3VsZExhYmVsRmxvYXR8fHRoaXMuX3Nob3VsZEFsd2F5c0Zsb2F0KX0sZS5wcm90b3R5cGUuX2hpZGVDb250cm9sUGxhY2Vob2xkZXI9ZnVuY3Rpb24oKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9LGUucHJvdG90eXBlLl9oYXNGbG9hdGluZ0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0xhYmVsKCl8fCJsZWdhY3kiPT09dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLl9oYXNQbGFjZWhvbGRlcigpfSxlLnByb3RvdHlwZS5fZ2V0RGlzcGxheWVkTWVzc2FnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiYmdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGg+MCYmdGhpcy5fY29udHJvbC5lcnJvclN0YXRlPyJlcnJvciI6ImhpbnQifSxlLnByb3RvdHlwZS5fYW5pbWF0ZUFuZExvY2tMYWJlbD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpJiZ0aGlzLl9jYW5MYWJlbEZsb2F0JiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJih0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMCxPYmplY3QobC5hKSh0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2l0aW9uZW5kIikucGlwZShPYmplY3QoYy5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fc2hvd0Fsd2F5c0FuaW1hdGU9ITF9KSksdGhpcy5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzPWZ1bmN0aW9uKCl7aWYodGhpcy5fY29udHJvbC5wbGFjZWhvbGRlciYmdGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl0aHJvdyBFcnJvcigiUGxhY2Vob2xkZXIgYXR0cmlidXRlIGFuZCBjaGlsZCBlbGVtZW50IHdlcmUgYm90aCBzcGVjaWZpZWQuIil9LGUucHJvdG90eXBlLl9wcm9jZXNzSGludHM9ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9LGUucHJvdG90eXBlLl92YWxpZGF0ZUhpbnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXM7dGhpcy5faGludENoaWxkcmVuJiZ0aGlzLl9oaW50Q2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihpKXtpZigic3RhcnQiPT09aS5hbGlnbil7aWYodHx8bi5oaW50TGFiZWwpdGhyb3cgZCgic3RhcnQiKTt0PWl9ZWxzZSBpZigiZW5kIj09PWkuYWxpZ24pe2lmKGUpdGhyb3cgZCgiZW5kIik7ZT1pfX0pfSxlLnByb3RvdHlwZS5fc3luY0Rlc2NyaWJlZEJ5SWRzPWZ1bmN0aW9uKCl7aWYodGhpcy5fY29udHJvbCl7dmFyIHQ9W107aWYoImhpbnQiPT09dGhpcy5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSl7dmFyIGU9dGhpcy5faGludENoaWxkcmVuP3RoaXMuX2hpbnRDaGlsZHJlbi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiJzdGFydCI9PT10LmFsaWdufSk6bnVsbCxuPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4iZW5kIj09PXQuYWxpZ259KTpudWxsO2U/dC5wdXNoKGUuaWQpOnRoaXMuX2hpbnRMYWJlbCYmdC5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxuJiZ0LnB1c2gobi5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiYodD10aGlzLl9lcnJvckNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKTt0aGlzLl9jb250cm9sLnNldERlc2NyaWJlZEJ5SWRzKHQpfX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlQ29udHJvbENoaWxkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NvbnRyb2wpdGhyb3cgRXJyb3IoIm1hdC1mb3JtLWZpZWxkIG11c3QgY29udGFpbiBhIE1hdEZvcm1GaWVsZENvbnRyb2wuIil9LGUucHJvdG90eXBlLnVwZGF0ZU91dGxpbmVHYXA9ZnVuY3Rpb24oKXtpZigib3V0bGluZSI9PT10aGlzLmFwcGVhcmFuY2Upe3ZhciB0PTAsZT0wLG49dGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IiksaT10aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwIik7aWYodGhpcy5fbGFiZWwmJnRoaXMuX2xhYmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKXtpZih0aGlzLl9wbGF0Zm9ybSYmIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKXJldHVybjtmb3IodmFyIHI9dGhpcy5fZ2V0U3RhcnRFbmQodGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxvPXRoaXMuX2dldFN0YXJ0RW5kKHRoaXMuX2xhYmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGE9MCxzPTAsdT10aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO3M8dS5sZW5ndGg7cysrKWErPXVbc10ub2Zmc2V0V2lkdGg7dD1vLXItNSxlPS43NSphKzEwfWZvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKW4uaXRlbShsKS5zdHlsZS53aWR0aD10KyJweCI7Zm9yKGw9MDtsPGkubGVuZ3RoO2wrKylpLml0ZW0obCkuc3R5bGUud2lkdGg9ZSsicHgifX0sZS5wcm90b3R5cGUuX2dldFN0YXJ0RW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlP3QucmlnaHQ6dC5sZWZ0fSxlfShtKSxnPWZ1bmN0aW9uKCl7fX0sInQvTmEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBqfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBGfSk7dmFyIGk9bigibXJTRyIpLHI9bigiQ2NuRyIpLG89bigiRi9YTCIpLGE9bigiNmJsRiIpLHM9bigiUGhqbiIpLHU9bigiVm5ELyIpLGw9bigiNjdZLyIpLGM9bigiSXAwUiIpLGY9ZnVuY3Rpb24oKXt9LGg9ZnVuY3Rpb24oKXt9LGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCx0P3RoaXMubGF6eUluaXQ9InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7ZS5oZWFkZXJzPW5ldyBNYXAsdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5kZXhPZigiOiIpO2lmKG4+MCl7dmFyIGk9dC5zbGljZSgwLG4pLHI9aS50b0xvd2VyQ2FzZSgpLG89dC5zbGljZShuKzEpLnRyaW0oKTtlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaSxyKSxlLmhlYWRlcnMuaGFzKHIpP2UuaGVhZGVycy5nZXQocikucHVzaChvKTplLmhlYWRlcnMuc2V0KHIsW29dKX19KX06ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0scj1uLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLGkubGVuZ3RoPjAmJihlLmhlYWRlcnMuc2V0KHIsaSksZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG4scikpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3RoaXMuaW5pdCgpO3ZhciBlPXRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lWzBdOm51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImEifSl9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGUpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoZSx0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseVVwZGF0ZSh0KX0pLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9LHQucHJvdG90eXBlLmNvcHlGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuaGVhZGVycy5zZXQobix0LmhlYWRlcnMuZ2V0KG4pKSxlLm5vcm1hbGl6ZWROYW1lcy5zZXQobix0Lm5vcm1hbGl6ZWROYW1lcy5nZXQobikpfSl9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLmxhenlJbml0PXRoaXMubGF6eUluaXQmJnRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMubGF6eUluaXQ6dGhpcyxuLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmFwcGx5VXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6dmFyIG49dC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIG4mJihuPVtuXSksMD09PW4ubGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUodC5uYW1lLGUpO3ZhciByPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107ci5wdXNoLmFwcGx5KHIsT2JqZWN0KGkuZCkobikpLHRoaXMuaGVhZGVycy5zZXQoZSxyKTticmVhaztjYXNlImQiOnZhciBvPXQudmFsdWU7aWYobyl7dmFyIGE9dGhpcy5oZWFkZXJzLmdldChlKTtpZighYSlyZXR1cm47MD09PShhPWEuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybi0xPT09by5pbmRleE9mKHQpfSkpLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSxhKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0KGUubm9ybWFsaXplZE5hbWVzLmdldChuKSxlLmhlYWRlcnMuZ2V0KG4pKX0pfSx0fSgpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCl9LHQucHJvdG90eXBlLmVuY29kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpfSx0LnByb3RvdHlwZS5kZWNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX0sdC5wcm90b3R5cGUuZGVjb2RlVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX0sdH0oKTtmdW5jdGlvbiBtKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2dpLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2dpLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTNCL2dpLCI7IikucmVwbGFjZSgvJTJCL2dpLCIrIikucmVwbGFjZSgvJTNEL2dpLCI9IikucmVwbGFjZSgvJTNGL2dpLCI/IikucmVwbGFjZSgvJTJGL2dpLCIvIil9dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgZSxuLHIsbz10aGlzO2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPXQuZW5jb2Rlcnx8bmV3IHAsdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9KGU9dC5mcm9tU3RyaW5nLG49dGhpcy5lbmNvZGVyLHI9bmV3IE1hcCxlLmxlbmd0aD4wJiZlLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIj0iKSxvPU9iamVjdChpLmMpKC0xPT1lP1tuLmRlY29kZUtleSh0KSwiIl06W24uZGVjb2RlS2V5KHQuc2xpY2UoMCxlKSksbi5kZWNvZGVWYWx1ZSh0LnNsaWNlKGUrMSkpXSwyKSxhPW9bMF0scz1vWzFdLHU9ci5nZXQoYSl8fFtdO3UucHVzaChzKSxyLnNldChhLHUpfSkscil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZnJvbU9iamVjdFtlXTtvLm1hcC5zZXQoZSxBcnJheS5pc0FycmF5KG4pP246W25dKX0pKTp0aGlzLm1hcD1udWxsfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3RoaXMuaW5pdCgpO3ZhciBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoicyJ9KX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiZCJ9KX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAoZnVuY3Rpb24oZSl7dmFyIG49dC5lbmNvZGVyLmVuY29kZUtleShlKTtyZXR1cm4gdC5tYXAuZ2V0KGUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbisiPSIrdC5lbmNvZGVyLmVuY29kZVZhbHVlKGUpfSkuam9pbigiJiIpfSkuam9pbigiJiIpfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdCh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gbi5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsbi51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQoW2VdKSxufSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQubWFwLnNldChlLHQuY2xvbmVGcm9tLm1hcC5nZXQoZSkpfSksdGhpcy51cGRhdGVzLmZvckVhY2goZnVuY3Rpb24oZSl7c3dpdGNoKGUub3Ape2Nhc2UiYSI6Y2FzZSJzIjp2YXIgbj0oImEiPT09ZS5vcD90Lm1hcC5nZXQoZS5wYXJhbSk6dm9pZCAwKXx8W107bi5wdXNoKGUudmFsdWUpLHQubWFwLnNldChlLnBhcmFtLG4pO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09ZS52YWx1ZSl7dC5tYXAuZGVsZXRlKGUucGFyYW0pO2JyZWFrfXZhciBpPXQubWFwLmdldChlLnBhcmFtKXx8W10scj1pLmluZGV4T2YoZS52YWx1ZSk7LTEhPT1yJiZpLnNwbGljZShyLDEpLGkubGVuZ3RoPjA/dC5tYXAuc2V0KGUucGFyYW0saSk6dC5tYXAuZGVsZXRlKGUucGFyYW0pfX0pLHRoaXMuY2xvbmVGcm9tPW51bGwpfSx0fSgpO2Z1bmN0aW9uIHYodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIGcodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZ0IGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBiKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dmFyIHI7aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGk/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxyPWkpOnI9bixyJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIXIucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyxyLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxyLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9ci5oZWFkZXJzKSxyLnBhcmFtcyYmKHRoaXMucGFyYW1zPXIucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBkKSx0aGlzLnBhcmFtcyl7dmFyIG89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09by5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXt2YXIgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStvfX1lbHNlIHRoaXMucGFyYW1zPW5ldyB5LHRoaXMudXJsV2l0aFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5zZXJpYWxpemVCb2R5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDp2KHRoaXMuYm9keSl8fGcodGhpcy5ib2R5KXx8Yih0aGlzLmJvZHkpfHwic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgeT90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmIodGhpcy5ib2R5KT9udWxsOmcodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDp2KHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgeT8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpPyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5tZXRob2R8fHRoaXMubWV0aG9kLGk9ZS51cmx8fHRoaXMudXJsLHI9ZS5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLG89dm9pZCAwIT09ZS5ib2R5P2UuYm9keTp0aGlzLmJvZHksYT12b2lkIDAhPT1lLndpdGhDcmVkZW50aWFscz9lLndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxzPXZvaWQgMCE9PWUucmVwb3J0UHJvZ3Jlc3M/ZS5yZXBvcnRQcm9ncmVzczp0aGlzLnJlcG9ydFByb2dyZXNzLHU9ZS5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsbD1lLnBhcmFtc3x8dGhpcy5wYXJhbXM7cmV0dXJuIHZvaWQgMCE9PWUuc2V0SGVhZGVycyYmKHU9T2JqZWN0LmtleXMoZS5zZXRIZWFkZXJzKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldEhlYWRlcnNbbl0pfSx1KSksZS5zZXRQYXJhbXMmJihsPU9iamVjdC5rZXlzKGUuc2V0UGFyYW1zKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldFBhcmFtc1tuXSl9LGwpKSxuZXcgdChuLGksbyx7cGFyYW1zOmwsaGVhZGVyczp1LHJlcG9ydFByb2dyZXNzOnMscmVzcG9uc2VUeXBlOnIsd2l0aENyZWRlbnRpYWxzOmF9KX0sdH0oKSx3PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuU2VudD0wXT0iU2VudCIsdFt0LlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsdFt0LkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZT00XT0iUmVzcG9uc2UiLHRbdC5Vc2VyPTVdPSJVc2VyIix0fSh7fSkseD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MjAwKSx2b2lkIDA9PT1uJiYobj0iT0siKSx0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgZCx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fG4sdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fSgpLEM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4udHlwZT13LlJlc3BvbnNlSGVhZGVyLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxuZXcgZSh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0oeCksUz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPXcuUmVzcG9uc2Usbi5ib2R5PXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6bnVsbCxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0oeCksRT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzLGUsMCwiVW5rbm93biBFcnJvciIpfHx0aGlzO3JldHVybiBuLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIixuLm9rPSExLG4ubWVzc2FnZT1uLnN0YXR1cz49MjAwJiZuLnN0YXR1czwzMDA/Ikh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgIisoZS51cmx8fCIodW5rbm93biB1cmwpIik6Ikh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgIisoZS51cmx8fCIodW5rbm93biB1cmwpIikrIjogIitlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0LG4uZXJyb3I9ZS5lcnJvcnx8bnVsbCxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHgpO2Z1bmN0aW9uIE8odCxlKXtyZXR1cm57Ym9keTplLGhlYWRlcnM6dC5oZWFkZXJzLG9ic2VydmU6dC5vYnNlcnZlLHBhcmFtczp0LnBhcmFtcyxyZXBvcnRQcm9ncmVzczp0LnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6dC53aXRoQ3JlZGVudGlhbHN9fXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmhhbmRsZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbih0LGUsbil7dmFyIGkscj10aGlzO2lmKHZvaWQgMD09PW4mJihuPXt9KSx0IGluc3RhbmNlb2YgXylpPXQ7ZWxzZXt2YXIgYTthPW4uaGVhZGVycyBpbnN0YW5jZW9mIGQ/bi5oZWFkZXJzOm5ldyBkKG4uaGVhZGVycyk7dmFyIGM9dm9pZCAwO24ucGFyYW1zJiYoYz1uLnBhcmFtcyBpbnN0YW5jZW9mIHk/bi5wYXJhbXM6bmV3IHkoe2Zyb21PYmplY3Q6bi5wYXJhbXN9KSksaT1uZXcgXyh0LGUsdm9pZCAwIT09bi5ib2R5P24uYm9keTpudWxsLHtoZWFkZXJzOmEscGFyYW1zOmMscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6bi53aXRoQ3JlZGVudGlhbHN9KX12YXIgZj1PYmplY3Qoby5hKShpKS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhbmRsZXIuaGFuZGxlKHQpfSkpO2lmKHQgaW5zdGFuY2VvZiBffHwiZXZlbnRzIj09PW4ub2JzZXJ2ZSlyZXR1cm4gZjt2YXIgaD1mLnBpcGUoT2JqZWN0KHUuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBTfSkpO3N3aXRjaChuLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goaS5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBoLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBoLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBoLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImpzb24iOmRlZmF1bHQ6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5ib2R5fSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBoO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAiK24ub2JzZXJ2ZSsifSIpfX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkRFTEVURSIsdCxlKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkdFVCIsdCxlKX0sdC5wcm90b3R5cGUuaGVhZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfSx0LnByb3RvdHlwZS5qc29ucD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIix0LHtwYXJhbXM6KG5ldyB5KS5hcHBlbmQoZSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9LHQucHJvdG90eXBlLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsdCxlKX0sdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQQVRDSCIsdCxPKG4sZSkpfSx0LnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUE9TVCIsdCxPKG4sZSkpfSx0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQVVQiLHQsTyhuLGUpKX0sdH0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMubmV4dD10LHRoaXMuaW50ZXJjZXB0b3I9ZX1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludGVyY2VwdG9yLmludGVyY2VwdCh0LHRoaXMubmV4dCl9LHR9KCksaj1uZXcgci5xKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5oYW5kbGUodCl9LHR9KCksST0vXlwpXF1cfScsP1xuLyxSPWZ1bmN0aW9uKCl7fSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fSx0fSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMueGhyRmFjdG9yeT10fXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigiSlNPTlAiPT09dC5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBKc29ucENsaWVudE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBhLmEoZnVuY3Rpb24obil7dmFyIGk9ZS54aHJGYWN0b3J5LmJ1aWxkKCk7aWYoaS5vcGVuKHQubWV0aG9kLHQudXJsV2l0aFBhcmFtcyksdC53aXRoQ3JlZGVudGlhbHMmJihpLndpdGhDcmVkZW50aWFscz0hMCksdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5zZXRSZXF1ZXN0SGVhZGVyKHQsZS5qb2luKCIsIikpfSksdC5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fGkuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIXQuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXt2YXIgcj10LmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PXImJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixyKX1pZih0LnJlc3BvbnNlVHlwZSl7dmFyIG89dC5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtpLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1vP286InRleHQifXZhciBhPXQuc2VyaWFsaXplQm9keSgpLHM9bnVsbCx1PWZ1bmN0aW9uKCl7aWYobnVsbCE9PXMpcmV0dXJuIHM7dmFyIGU9MTIyMz09PWkuc3RhdHVzPzIwNDppLnN0YXR1cyxuPWkuc3RhdHVzVGV4dHx8Ik9LIixyPW5ldyBkKGkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG89ZnVuY3Rpb24odCl7cmV0dXJuInJlc3BvbnNlVVJMImluIHQmJnQucmVzcG9uc2VVUkw/dC5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdCh0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT90LmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0oaSl8fHQudXJsO3JldHVybiBzPW5ldyBDKHtoZWFkZXJzOnIsc3RhdHVzOmUsc3RhdHVzVGV4dDpuLHVybDpvfSl9LGw9ZnVuY3Rpb24oKXt2YXIgZT11KCkscj1lLmhlYWRlcnMsbz1lLnN0YXR1cyxhPWUuc3RhdHVzVGV4dCxzPWUudXJsLGw9bnVsbDsyMDQhPT1vJiYobD12b2lkIDA9PT1pLnJlc3BvbnNlP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2UpLDA9PT1vJiYobz1sPzIwMDowKTt2YXIgYz1vPj0yMDAmJm88MzAwO2lmKCJqc29uIj09PXQucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIGwpe3ZhciBmPWw7bD1sLnJlcGxhY2UoSSwiIik7dHJ5e2w9IiIhPT1sP0pTT04ucGFyc2UobCk6bnVsbH1jYXRjaCh0KXtsPWYsYyYmKGM9ITEsbD17ZXJyb3I6dCx0ZXh0Omx9KX19Yz8obi5uZXh0KG5ldyBTKHtib2R5OmwsaGVhZGVyczpyLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpLG4uY29tcGxldGUoKSk6bi5lcnJvcihuZXcgRSh7ZXJyb3I6bCxoZWFkZXJzOnIsc3RhdHVzOm8sc3RhdHVzVGV4dDphLHVybDpzfHx2b2lkIDB9KSl9LGM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEUoe2Vycm9yOnQsc3RhdHVzOmkuc3RhdHVzfHwwLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciJ9KTtuLmVycm9yKGUpfSxmPSExLGg9ZnVuY3Rpb24oZSl7Znx8KG4ubmV4dCh1KCkpLGY9ITApO3ZhciByPXt0eXBlOncuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6ZS5sb2FkZWR9O2UubGVuZ3RoQ29tcHV0YWJsZSYmKHIudG90YWw9ZS50b3RhbCksInRleHQiPT09dC5yZXNwb25zZVR5cGUmJmkucmVzcG9uc2VUZXh0JiYoci5wYXJ0aWFsVGV4dD1pLnJlc3BvbnNlVGV4dCksbi5uZXh0KHIpfSxwPWZ1bmN0aW9uKHQpe3ZhciBlPXt0eXBlOncuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOnQubG9hZGVkfTt0Lmxlbmd0aENvbXB1dGFibGUmJihlLnRvdGFsPXQudG90YWwpLG4ubmV4dChlKX07cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCksaS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYyksdC5yZXBvcnRQcm9ncmVzcyYmKGkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGgpLG51bGwhPT1hJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxpLnNlbmQoYSksbi5uZXh0KHt0eXBlOncuU2VudH0pLGZ1bmN0aW9uKCl7aS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYyksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsKSx0LnJlcG9ydFByb2dyZXNzJiYoaS5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsaCksbnVsbCE9PWEmJmkudXBsb2FkJiZpLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLGkuYWJvcnQoKX19KX0sdH0oKSxEPW5ldyByLnEoIlhTUkZfQ09PS0lFX05BTUUiKSxOPW5ldyByLnEoIlhTUkZfSEVBREVSX05BTUUiKSxGPWZ1bmN0aW9uKCl7fSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIHQhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1PYmplY3QoYy54KSh0LHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPXQpLHRoaXMubGFzdFRva2VufSx0fSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy50b2tlblNlcnZpY2U9dCx0aGlzLmhlYWRlck5hbWU9ZX1yZXR1cm4gdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC51cmwudG9Mb3dlckNhc2UoKTtpZigiR0VUIj09PXQubWV0aG9kfHwiSEVBRCI9PT10Lm1ldGhvZHx8bi5zdGFydHNXaXRoKCJodHRwOi8vIil8fG4uc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gZS5oYW5kbGUodCk7dmFyIGk9dGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW4oKTtyZXR1cm4gbnVsbD09PWl8fHQuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKXx8KHQ9dC5jbG9uZSh7aGVhZGVyczp0LmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxpKX0pKSxlLmhhbmRsZSh0KX0sdH0oKSx6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuYmFja2VuZD10LHRoaXMuaW5qZWN0b3I9ZSx0aGlzLmNoYWluPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXtpZihudWxsPT09dGhpcy5jaGFpbil7dmFyIGU9dGhpcy5pbmplY3Rvci5nZXQoaixbXSk7dGhpcy5jaGFpbj1lLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBUKHQsZSl9LHRoaXMuYmFja2VuZCl9cmV0dXJuIHRoaXMuY2hhaW4uaGFuZGxlKHQpfSx0fSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmRpc2FibGU9ZnVuY3Rpb24oKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W3twcm92aWRlOlYsdXNlQ2xhc3M6QX1dfX0sdC53aXRoT3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHtuZ01vZHVsZTp0LHByb3ZpZGVyczpbZS5jb29raWVOYW1lP3twcm92aWRlOkQsdXNlVmFsdWU6ZS5jb29raWVOYW1lfTpbXSxlLmhlYWRlck5hbWU/e3Byb3ZpZGU6Tix1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19LHR9KCksVT1mdW5jdGlvbigpe319LHQ5Zlo6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkZGT28iKSxvPW4oImI3bVciKSxhPW4oIkc1SjEiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/T2JqZWN0KGEuYikoKTplLmxpZnQobmV3IHUodCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgby5hfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsKHQsdGhpcy50b3RhbCkpfSx0fSgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnRvdGFsPW4saS5jb3VudD0wLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudG90YWwsbj0rK3RoaXMuY291bnQ7bjw9ZSYmKHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSxuPT09ZSYmKHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCkpKX0sZX0oci5hKX0sdFJUVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJDY25HIikscj0obigiL2RPNiIpLG4oIldmNHAiKSxuKCJZU2gyIiksbigic2VQMyIpLG4oIkZ6cWMiKSxuKCJnSWNZIiksaS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtY2hpcHtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXN0YW5kYXJkLWNoaXB7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2Rpc3BsYXk6aW5saW5lLWZsZXg7cGFkZGluZzo3cHggMTJweDtib3JkZXItcmFkaXVzOjI0cHg7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpkZWZhdWx0fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9Lm1hdC1zdGFuZGFyZC1jaGlwOmZvY3Vze2JveC1zaGFkb3c6MCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAzcHggNHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDhweCAwIHJnYmEoMCwwLDAsLjEyKTtvdXRsaW5lOjB9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1zdGFuZGFyZC1jaGlwe291dGxpbmU6c29saWQgMXB4fS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHh9fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhciwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctcmlnaHQ6N3B4O3BhZGRpbmctbGVmdDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctbGVmdDo3cHg7cGFkZGluZy1yaWdodDowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy10b3A6N3B4O3BhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLXJpZ2h0OjdweDtwYWRkaW5nLWxlZnQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLWxlZnQ6N3B4O3BhZGRpbmctcmlnaHQ6MTJweH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxMnB4fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtYXZhdGFye3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1sZWZ0OjdweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsW2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnttYXJnaW4tcmlnaHQ6N3B4O21hcmdpbi1sZWZ0OjB9Lm1hdC1jaGlwLWxpc3Qtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW46LTRweH0ubWF0LWNoaXAtbGlzdC13cmFwcGVyIC5tYXQtc3RhbmRhcmQtY2hpcCwubWF0LWNoaXAtbGlzdC13cmFwcGVyIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbjo0cHh9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tYXQtY2hpcC1saXN0LXN0YWNrZWQgLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7d2lkdGg6MTAwJX0ubWF0LWNoaXAtYXZhdGFye2JvcmRlci1yYWRpdXM6NTAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW59aW5wdXQubWF0LWNoaXAtaW5wdXR7d2lkdGg6MTUwcHg7bWFyZ2luOjNweDtmbGV4OjEgMCAxNTBweH0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkubGIoMixbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWNoaXAtbGlzdC13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwwKV0sbnVsbCxudWxsKX19LHU2N0Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIkVuOCsiKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49dFtpLmFdKCk7Oyl7dmFyIHI9bi5uZXh0KCk7aWYoci5kb25lKXtlLmNvbXBsZXRlKCk7YnJlYWt9aWYoZS5uZXh0KHIudmFsdWUpLGUuY2xvc2VkKWJyZWFrfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJldHVybiYmZS5hZGQoZnVuY3Rpb24oKXtuLnJldHVybiYmbi5yZXR1cm4oKX0pLGV9fX0sdU1hTzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zdWJqZWN0PWUsaS5zdWJzY3JpYmVyPW4saS5jbG9zZWQ9ITEsaX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO3ZhciB0PXRoaXMuc3ViamVjdCxlPXQub2JzZXJ2ZXJzO2lmKHRoaXMuc3ViamVjdD1udWxsLGUmJjAhPT1lLmxlbmd0aCYmIXQuaXNTdG9wcGVkJiYhdC5jbG9zZWQpe3ZhciBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19fSxlfShuKCJwdWdUIikuYSl9LHZHWFk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJDY25HIikscj1uKCJkV1pnIiksbz1uKCJkemdUIiksYT1uKCJLOUlhIikscz1uKCI2YmxGIiksdT1uKCJpc2J5IiksbD1uKCIyQmRqIiksYz1uKCI2N1kvIiksZj1uKCJueTI0IiksaD1uKCJwMFNqIiksZD1uKCJuNmdHIik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gX30pO3ZhciBwLG09bmV3IFNldCx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOnZ9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZighbS5oYXModCkpdHJ5e3B8fCgocD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocCkpLHAuc2hlZXQmJihwLnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSxtLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKHIuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB2KHQpe3JldHVybnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5tZWRpYU1hdGNoZXI9dCx0aGlzLnpvbmU9ZSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IGEuYX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaXNNYXRjaGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGIoT2JqZWN0KGQuYikodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49YihPYmplY3QoZC5iKSh0KSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9yZWdpc3RlclF1ZXJ5KHQpLm9ic2VydmFibGV9KTtyZXR1cm4gT2JqZWN0KG8uYSkobikucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbih0KXt2YXIgZT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlLm1hdGNoZXM9ZS5tYXRjaGVzfHx0Lm1hdGNoZXMsZS5icmVha3BvaW50c1t0LnF1ZXJ5XT10Lm1hdGNoZXN9KSxlfSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX3F1ZXJpZXMuaGFzKHQpKXJldHVybiB0aGlzLl9xdWVyaWVzLmdldCh0KTt2YXIgbj10aGlzLm1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKHQpLGk9e29ic2VydmFibGU6ZnVuY3Rpb24gdChlLG4saSl7cmV0dXJuIGk/dChlLG4pLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdCh1LmEpKHQpP2kuYXBwbHkodm9pZCAwLHQpOmkodCl9KSk6bmV3IHMuYShmdW5jdGlvbih0KXt2YXIgaSxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0Lm5leHQoMT09PWUubGVuZ3RoP2VbMF06ZSl9O3RyeXtpPWUocil9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX1pZihPYmplY3QobC5hKShuKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbihyLGkpfX0pfShmdW5jdGlvbih0KXtuLmFkZExpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSxmdW5jdGlvbih0KXtuLnJlbW92ZUxpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSkucGlwZShPYmplY3QoZi5hKSh0aGlzLl9kZXN0cm95U3ViamVjdCksT2JqZWN0KGguYSkobiksT2JqZWN0KGMuYSkoZnVuY3Rpb24oZSl7cmV0dXJue3F1ZXJ5OnQsbWF0Y2hlczplLm1hdGNoZXN9fSkpLG1xbDpufTtyZXR1cm4gdGhpcy5fcXVlcmllcy5zZXQodCxpKSxpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKSh5KSxPYmplY3QoaS5ZKShpLnopKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gYih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIiwiKX0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50cmltKCl9KX12YXIgXz17WFNtYWxsOiIobWF4LXdpZHRoOiA1OTlweCkiLFNtYWxsOiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSIsTWVkaXVtOiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLExhcmdlOiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAobWF4LXdpZHRoOiAxOTE5cHgpIixYTGFyZ2U6IihtaW4td2lkdGg6IDE5MjBweCkiLEhhbmRzZXQ6IihtYXgtd2lkdGg6IDU5OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtYXgtd2lkdGg6IDk1OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixUYWJsZXQ6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogODM5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYjoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixIYW5kc2V0UG9ydHJhaXQ6IihtYXgtd2lkdGg6IDU5OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLFRhYmxldFBvcnRyYWl0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLFdlYlBvcnRyYWl0OiIobWluLXdpZHRoOiA4NDBweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixIYW5kc2V0TGFuZHNjYXBlOiIobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0TGFuZHNjYXBlOiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsV2ViTGFuZHNjYXBlOiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkifX0sd0Z3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigibXJTRyIpLHI9bigiaWhZWSIpLG89bigiQ2NuRyIpLGE9KG4oIlpZanQiKSxuKCJOU1lMIikpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fbmV4dEFuaW1hdGlvbklkPTAsaS5fcmVuZGVyZXI9ZS5jcmVhdGVSZW5kZXJlcihuLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOm8uUi5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSksaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uZXh0QW5pbWF0aW9uSWQudG9TdHJpbmcoKTt0aGlzLl9uZXh0QW5pbWF0aW9uSWQrKzt2YXIgbj1BcnJheS5pc0FycmF5KHQpP09iamVjdChyLmkpKHQpOnQ7cmV0dXJuIGModGhpcy5fcmVuZGVyZXIsbnVsbCxlLCJyZWdpc3RlciIsW25dKSxuZXcgdShlLHRoaXMuX3JlbmRlcmVyKX0sZX0oci5iKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2lkPWUsaS5fcmVuZGVyZXI9bixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbCh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX0sZX0oci5jKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLG4pfXJldHVybiB0LnByb3RvdHlwZS5fbGlzdGVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsIkBAIit0aGlzLmlkKyI6Iit0LGUpfSx0LnByb3RvdHlwZS5fY29tbWFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gYyh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJkb25lIix0KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInBhdXNlIil9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInJlc2V0Iil9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIix0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdH0oKTtmdW5jdGlvbiBjKHQsZSxuLGkscil7cmV0dXJuIHQuc2V0UHJvcGVydHkoZSwiQEAiK24rIjoiK2kscil9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRlbGVnYXRlPXQsdGhpcy5lbmdpbmU9ZSx0aGlzLl96b25lPW4sdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLHRoaXMucHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoMCksZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe2UmJmUucGFyZW50Tm9kZSh0KSYmZS5yZW1vdmVDaGlsZCh0LnBhcmVudE5vZGUsdCl9fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSk7aWYoISh0JiZlJiZlLmRhdGEmJmUuZGF0YS5hbmltYXRpb24pKXt2YXIgcj10aGlzLl9yZW5kZXJlckNhY2hlLmdldChpKTtyZXR1cm4gcnx8KHI9bmV3IGgoIiIsaSx0aGlzLmVuZ2luZSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQoaSxyKSkscn12YXIgbz1lLmlkLGE9ZS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3JldHVybiB0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihhLHQpLGUuZGF0YS5hbmltYXRpb24uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbi5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKG8sYSx0LGUubmFtZSxlKX0pLG5ldyBkKHRoaXMsYSxpLHRoaXMuZW5naW5lKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLl9zY2hlZHVsZUNvdW50VGFzaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt0Ll9taWNyb3Rhc2tJZCsrfSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt0Pj0wJiZ0PHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oZnVuY3Rpb24oKXtyLl96b25lLnJ1bihmdW5jdGlvbigpe3IuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChpLmMpKHQsMik7KDAsZVswXSkoZVsxXSl9KSxyLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtlLG5dKSl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fc2NoZWR1bGVDb3VudFRhc2soKSx0LmVuZ2luZS5mbHVzaCh0Ll9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1uLHRoaXMuZGVzdHJveU5vZGU9dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT9mdW5jdGlvbih0KXtyZXR1cm4gZS5kZXN0cm95Tm9kZSh0KX06bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixpKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsbil9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApJiYiQC5kaXNhYmxlZCI9PWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LCEhbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnModCxlKX0sdH0oKSxkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsbixpLHIpfHx0aGlzO3JldHVybiBvLmZhY3Rvcnk9ZSxvLm5hbWVzcGFjZUlkPW4sb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7IkAiPT1lLmNoYXJBdCgwKT8iLiI9PWUuY2hhckF0KDEpJiYiQC5kaXNhYmxlZCI9PWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LG49dm9pZCAwPT09bnx8ISFuKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsdCxlLnN1YnN0cigxKSxuKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sZS5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGEscz10aGlzO2lmKCJAIj09ZS5jaGFyQXQoMCkpe3ZhciB1PWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiB0fX0odCksbD1lLnN1YnN0cigxKSxjPSIiO3JldHVybiJAIiE9bC5jaGFyQXQoMCkmJihsPShyPU9iamVjdChpLmMpKChvPWwsYT1vLmluZGV4T2YoIi4iKSxbby5zdWJzdHJpbmcoMCxhKSxvLnN1YnN0cihhKzEpXSksMikpWzBdLGM9clsxXSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsdSxsLGMsZnVuY3Rpb24odCl7cy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayh0Ll9kYXRhfHwtMSxuLHQpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sZX0oaCkscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXtyZXR1cm4gdC5jYWxsKHRoaXMsZS5ib2R5LG4saSl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oYS5iKTtmdW5jdGlvbiBtKCl7cmV0dXJuIE9iamVjdChhLmgpKCk/bmV3IGEuZjpuZXcgYS5kfWZ1bmN0aW9uIHkoKXtyZXR1cm4gbmV3IGEuZ31mdW5jdGlvbiB2KHQsZSxuKXtyZXR1cm4gbmV3IGYodCxlLG4pfXZhciBnPW5ldyBvLnEoIkFuaW1hdGlvbk1vZHVsZVR5cGUiKSxiPWZ1bmN0aW9uKCl7fX0seE15RTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpLG89bigiK3VtSyIpLGE9bigiMkJkaiIpO2Z1bmN0aW9uIHModCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5saWZ0KG5ldyB1KHQsZSxuKSl9fXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uZXh0T3JPYnNlcnZlcj10LHRoaXMuZXJyb3I9ZSx0aGlzLmNvbXBsZXRlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGwodCx0aGlzLm5leHRPck9ic2VydmVyLHRoaXMuZXJyb3IsdGhpcy5jb21wbGV0ZSkpfSx0fSgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgcz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gcy5fdGFwTmV4dD1vLmEscy5fdGFwRXJyb3I9by5hLHMuX3RhcENvbXBsZXRlPW8uYSxzLl90YXBFcnJvcj1pfHxvLmEscy5fdGFwQ29tcGxldGU9cnx8by5hLE9iamVjdChhLmEpKG4pPyhzLl9jb250ZXh0PXMscy5fdGFwTmV4dD1uKTpuJiYocy5fY29udGV4dD1uLHMuX3RhcE5leHQ9bi5uZXh0fHxvLmEscy5fdGFwRXJyb3I9bi5lcnJvcnx8by5hLHMuX3RhcENvbXBsZXRlPW4uY29tcGxldGV8fG8uYSksc31yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dHJ5e3RoaXMuX3RhcE5leHQuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dHJ5e3RoaXMuX3RhcEVycm9yLmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RyeXt0aGlzLl90YXBDb21wbGV0ZS5jYWxsKHRoaXMuX2NvbnRleHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oci5hKX0seFRsYTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUifSx5M0J5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oIit1bUsiKTtmdW5jdGlvbiByKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBvKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ/MT09PXQubGVuZ3RoP3RbMF06ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUodCl9LGUpfTppLmF9fSx5NHFTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBNfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KTt2YXIgaT1uKCJtclNHIikscj1uKCJuNmdHIiksbz1uKCJDY25HIiksYT1uKCJZbGJRIikscz1uKCJLOUlhIiksdT1uKCIyNkZVIiksbD1uKCI2YmxGIiksYz1uKCJGL1hMIiksZj1uKCJueTI0Iik7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX3N0aWNreT0hMSxpLl9oYXNTdGlja3lDaGFuZ2VkPSExLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzdGlja3kiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RpY2t5fSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1PYmplY3Qoci5jKSh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuaGFzU3RpY2t5Q2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH0sZS5wcm90b3R5cGUucmVzZXRTdGlja3lDaGFuZ2VkPWZ1bmN0aW9uKCl7dGhpcy5faGFzU3RpY2t5Q2hhbmdlZD0hMX0sZX0odCl9dmFyIGQ9ZnVuY3Rpb24odCl7dGhpcy50ZW1wbGF0ZT10fSxwPWZ1bmN0aW9uKHQpe3RoaXMudGVtcGxhdGU9dH0sbT1mdW5jdGlvbih0KXt0aGlzLnRlbXBsYXRlPXR9LHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fc3RpY2t5RW5kPSExLGV9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LHNldDpmdW5jdGlvbih0KXt0JiYodGhpcy5fbmFtZT10LHRoaXMuY3NzQ2xhc3NGcmllbmRseU5hbWU9dC5yZXBsYWNlKC9bXmEtejAtOV8tXS9naSwiLSIpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInN0aWNreUVuZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGlja3lFbmR9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGlja3lFbmQ7dGhpcy5fc3RpY2t5RW5kPU9iamVjdChyLmMpKHQpLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ZSE9PXRoaXMuX3N0aWNreUVuZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShoKGZ1bmN0aW9uKCl7fSkpLHY9ZnVuY3Rpb24odCxlKXtlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWNvbHVtbi0iK3QuY3NzQ2xhc3NGcmllbmRseU5hbWUpfSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh2KSxiPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh2KSxfPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh2KSx3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudGVtcGxhdGU9dCx0aGlzLl9kaWZmZXJzPWV9cmV0dXJuIHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9jb2x1bW5zRGlmZmVyKXt2YXIgZT10LmNvbHVtbnMmJnQuY29sdW1ucy5jdXJyZW50VmFsdWV8fFtdO3RoaXMuX2NvbHVtbnNEaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpLHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZihlKX19LHQucHJvdG90eXBlLmdldENvbHVtbnNEaWZmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZih0aGlzLmNvbHVtbnMpfSx0LnByb3RvdHlwZS5leHRyYWN0Q2VsbFRlbXBsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgeD90LmhlYWRlckNlbGwudGVtcGxhdGU6dGhpcyBpbnN0YW5jZW9mIEM/dC5mb290ZXJDZWxsLnRlbXBsYXRlOnQuY2VsbC50ZW1wbGF0ZX0sdH0oKSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcy5jYWxsKHRoaXMsZSl9LGV9KGgoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0odykpKSxDPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcy5jYWxsKHRoaXMsZSl9LGV9KGgoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0odykpKSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh3KSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLl92aWV3Q29udGFpbmVyPWUsdC5tb3N0UmVjZW50Q2VsbE91dGxldD10aGlzfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QubW9zdFJlY2VudENlbGxPdXRsZXQ9PT10aGlzJiYodC5tb3N0UmVjZW50Q2VsbE91dGxldD1udWxsKX0sdC5tb3N0UmVjZW50Q2VsbE91dGxldD1udWxsLHR9KCksTz1mdW5jdGlvbigpe30saz1mdW5jdGlvbigpe30sVD1mdW5jdGlvbigpe30saj1bInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmlzTmF0aXZlSHRtbFRhYmxlPXQsdGhpcy5zdGlja0NlbGxDc3M9ZSx0aGlzLmRpcmVjdGlvbj1ufXJldHVybiB0LnByb3RvdHlwZS5jbGVhclN0aWNreVBvc2l0aW9uaW5nPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bisrKXt2YXIgcj1pW25dO2lmKHIubm9kZVR5cGU9PT1yLkVMRU1FTlRfTk9ERSl7dGhpcy5fcmVtb3ZlU3RpY2t5U3R5bGUocixlKTtmb3IodmFyIG89MDtvPHIuY2hpbGRyZW4ubGVuZ3RoO28rKyl0aGlzLl9yZW1vdmVTdGlja3lTdHlsZShyLmNoaWxkcmVuW29dLGUpfX19LHQucHJvdG90eXBlLnVwZGF0ZVN0aWNreUNvbHVtbnM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWUuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxuLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHR9KTtpZih0Lmxlbmd0aCYmaSlmb3IodmFyIHI9dFswXSxvPXIuY2hpbGRyZW4ubGVuZ3RoLGE9dGhpcy5fZ2V0Q2VsbFdpZHRocyhyKSxzPXRoaXMuX2dldFN0aWNreVN0YXJ0Q29sdW1uUG9zaXRpb25zKGEsZSksdT10aGlzLl9nZXRTdGlja3lFbmRDb2x1bW5Qb3NpdGlvbnMoYSxuKSxsPSJydGwiPT09dGhpcy5kaXJlY3Rpb24sYz0wLGY9dDtjPGYubGVuZ3RoO2MrKylmb3IodmFyIGg9ZltjXSxkPTA7ZDxvO2QrKyl7dmFyIHA9aC5jaGlsZHJlbltkXTtlW2RdJiZ0aGlzLl9hZGRTdGlja3lTdHlsZShwLGw/InJpZ2h0IjoibGVmdCIsc1tkXSksbltkXSYmdGhpcy5fYWRkU3RpY2t5U3R5bGUocCxsPyJsZWZ0IjoicmlnaHQiLHVbZF0pfX0sdC5wcm90b3R5cGUuc3RpY2tSb3dzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9ImJvdHRvbSI9PT1uP3QucmV2ZXJzZSgpOnQscj0wLG89MDtvPGkubGVuZ3RoO28rKylpZihlW29dKXt2YXIgYT1pW29dO2lmKHRoaXMuaXNOYXRpdmVIdG1sVGFibGUpZm9yKHZhciBzPTA7czxhLmNoaWxkcmVuLmxlbmd0aDtzKyspdGhpcy5fYWRkU3RpY2t5U3R5bGUoYS5jaGlsZHJlbltzXSxuLHIpO2Vsc2UgdGhpcy5fYWRkU3RpY2t5U3R5bGUoYSxuLHIpO3IrPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fX0sdC5wcm90b3R5cGUudXBkYXRlU3RpY2t5Rm9vdGVyQ29udGFpbmVyPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5pc05hdGl2ZUh0bWxUYWJsZSl7dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0Zm9vdCIpO2Uuc29tZShmdW5jdGlvbih0KXtyZXR1cm4hdH0pP3RoaXMuX3JlbW92ZVN0aWNreVN0eWxlKG4sWyJib3R0b20iXSk6dGhpcy5fYWRkU3RpY2t5U3R5bGUobiwiYm90dG9tIiwwKX19LHQucHJvdG90eXBlLl9yZW1vdmVTdGlja3lTdHlsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rKyl0LnN0eWxlW2lbbl1dPSIiO3Quc3R5bGUuekluZGV4PXRoaXMuX2dldENhbGN1bGF0ZWRaSW5kZXgodCksai5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiEhdC5zdHlsZVtlXX0pfHwodC5zdHlsZS5wb3NpdGlvbj0iIix0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5zdGlja0NlbGxDc3MpKX0sdC5wcm90b3R5cGUuX2FkZFN0aWNreVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0LmNsYXNzTGlzdC5hZGQodGhpcy5zdGlja0NlbGxDc3MpLHQuc3R5bGVbZV09bisicHgiLHQuc3R5bGUuY3NzVGV4dCs9InBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsgcG9zaXRpb246IHN0aWNreTsgIix0LnN0eWxlLnpJbmRleD10aGlzLl9nZXRDYWxjdWxhdGVkWkluZGV4KHQpfSx0LnByb3RvdHlwZS5fZ2V0Q2FsY3VsYXRlZFpJbmRleD1mdW5jdGlvbih0KXtmb3IodmFyIGU9e3RvcDoxMDAsYm90dG9tOjEwLGxlZnQ6MSxyaWdodDoxfSxuPTAsaT0wLHI9ajtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTt0LnN0eWxlW29dJiYobis9ZVtvXSl9cmV0dXJuIG4/IiIrbjoiIn0sdC5wcm90b3R5cGUuX2dldENlbGxXaWR0aHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49dC5jaGlsZHJlbixpPTA7aTxuLmxlbmd0aDtpKyspZS5wdXNoKG5baV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO3JldHVybiBlfSx0LnByb3RvdHlwZS5fZ2V0U3RpY2t5U3RhcnRDb2x1bW5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10saT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdJiYobltyXT1pLGkrPXRbcl0pO3JldHVybiBufSx0LnByb3RvdHlwZS5fZ2V0U3RpY2t5RW5kQ29sdW1uUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLGk9MCxyPXQubGVuZ3RoO3I+MDtyLS0pZVtyXSYmKG5bcl09aSxpKz10W3JdKTtyZXR1cm4gbn0sdH0oKSxJPWZ1bmN0aW9uKHQsZSl7dGhpcy52aWV3Q29udGFpbmVyPXQsdGhpcy5lbGVtZW50UmVmPWV9LFI9ZnVuY3Rpb24odCxlKXt0aGlzLnZpZXdDb250YWluZXI9dCx0aGlzLmVsZW1lbnRSZWY9ZX0sTT1mdW5jdGlvbih0LGUpe3RoaXMudmlld0NvbnRhaW5lcj10LHRoaXMuZWxlbWVudFJlZj1lfSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIpe3RoaXMuX2RpZmZlcnM9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2VsZW1lbnRSZWY9bix0aGlzLl9kaXI9cix0aGlzLl9vbkRlc3Ryb3k9bmV3IHMuYSx0aGlzLl9jb2x1bW5EZWZzQnlOYW1lPW5ldyBNYXAsdGhpcy5fY3VzdG9tQ29sdW1uRGVmcz1uZXcgU2V0LHRoaXMuX2N1c3RvbVJvd0RlZnM9bmV3IFNldCx0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzPW5ldyBTZXQsdGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcz1uZXcgU2V0LHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQ9ITAsdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMCx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXAsdGhpcy5zdGlja3lDc3NDbGFzcz0iY2RrLXRhYmxlLXN0aWNreSIsdGhpcy5fbXVsdGlUZW1wbGF0ZURhdGFSb3dzPSExLHRoaXMudmlld0NoYW5nZT1uZXcgdS5hKHtzdGFydDowLGVuZDpOdW1iZXIuTUFYX1ZBTFVFfSksaXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsImdyaWQiKSx0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZT0iVEFCTEUiPT09dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRyYWNrQnkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KG8uWikoKSYmbnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkrIi4iKSx0aGlzLl90cmFja0J5Rm49dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRhdGFTb3VyY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YVNvdXJjZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2RhdGFTb3VyY2UhPT10JiZ0aGlzLl9zd2l0Y2hEYXRhU291cmNlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGlUZW1wbGF0ZURhdGFSb3dzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpVGVtcGxhdGVEYXRhUm93c30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX211bHRpVGVtcGxhdGVEYXRhUm93cz1PYmplY3Qoci5jKSh0KSx0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGgmJnRoaXMuX2ZvcmNlUmVuZGVyRGF0YVJvd3MoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2V0dXBTdGlja3lTdHlsZXIoKSx0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZSYmdGhpcy5fYXBwbHlOYXRpdmVUYWJsZVNlY3Rpb25zKCksdGhpcy5fZGF0YURpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShmdW5jdGlvbihlLG4pe3JldHVybiB0LnRyYWNrQnk/dC50cmFja0J5KG4uZGF0YUluZGV4LG4uZGF0YSk6bn0pfSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudENoZWNrZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZVJvd0RlZnMoKSx0aGlzLl9jYWNoZUNvbHVtbkRlZnMoKSwhdGhpcy5faGVhZGVyUm93RGVmcy5sZW5ndGgmJiF0aGlzLl9mb290ZXJSb3dEZWZzLmxlbmd0aCYmIXRoaXMuX3Jvd0RlZnMubGVuZ3RoKXRocm93IEVycm9yKCJNaXNzaW5nIGRlZmluaXRpb25zIGZvciBoZWFkZXIsIGZvb3RlciwgYW5kIHJvdzsgY2Fubm90IGRldGVybWluZSB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSByZW5kZXJlZC4iKTt0aGlzLl9yZW5kZXJVcGRhdGVkQ29sdW1ucygpLHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQmJih0aGlzLl9mb3JjZVJlbmRlckhlYWRlclJvd3MoKSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSExKSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkJiYodGhpcy5fZm9yY2VSZW5kZXJGb290ZXJSb3dzKCksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMSksdGhpcy5kYXRhU291cmNlJiZ0aGlzLl9yb3dEZWZzLmxlbmd0aD4wJiYhdGhpcy5fcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9vYnNlcnZlUmVuZGVyQ2hhbmdlcygpLHRoaXMuX2NoZWNrU3RpY2t5U3RhdGVzKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9oZWFkZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Zvb3RlclJvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcC5jbGVhcigpLHRoaXMuX29uRGVzdHJveS5uZXh0KCksdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCksdGhpcy5kYXRhU291cmNlIGluc3RhbmNlb2YgYS5hJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKX0sdC5wcm90b3R5cGUucmVuZGVyUm93cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVuZGVyUm93cz10aGlzLl9nZXRBbGxSZW5kZXJSb3dzKCk7dmFyIGU9dGhpcy5fZGF0YURpZmZlci5kaWZmKHRoaXMuX3JlbmRlclJvd3MpO2lmKGUpe3ZhciBuPXRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbihmdW5jdGlvbihlLGkscil7aWYobnVsbD09ZS5wcmV2aW91c0luZGV4KXQuX2luc2VydFJvdyhlLml0ZW0scik7ZWxzZSBpZihudWxsPT1yKW4ucmVtb3ZlKGkpO2Vsc2V7dmFyIG89bi5nZXQoaSk7bi5tb3ZlKG8scil9fSksdGhpcy5fdXBkYXRlUm93SW5kZXhDb250ZXh0KCksZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7bi5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbS5kYXRhfSksdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKX19LHQucHJvdG90eXBlLnNldEhlYWRlclJvd0RlZj1mdW5jdGlvbih0KXt0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzPW5ldyBTZXQoW3RdKSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSEwfSx0LnByb3RvdHlwZS5zZXRGb290ZXJSb3dEZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcz1uZXcgU2V0KFt0XSksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMH0sdC5wcm90b3R5cGUuYWRkQ29sdW1uRGVmPWZ1bmN0aW9uKHQpe3RoaXMuX2N1c3RvbUNvbHVtbkRlZnMuYWRkKHQpfSx0LnByb3RvdHlwZS5yZW1vdmVDb2x1bW5EZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tQ29sdW1uRGVmcy5kZWxldGUodCl9LHQucHJvdG90eXBlLmFkZFJvd0RlZj1mdW5jdGlvbih0KXt0aGlzLl9jdXN0b21Sb3dEZWZzLmFkZCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlUm93RGVmPWZ1bmN0aW9uKHQpe3RoaXMuX2N1c3RvbVJvd0RlZnMuZGVsZXRlKHQpfSx0LnByb3RvdHlwZS5hZGRIZWFkZXJSb3dEZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tSGVhZGVyUm93RGVmcy5hZGQodCksdGhpcy5faGVhZGVyUm93RGVmQ2hhbmdlZD0hMH0sdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyUm93RGVmPWZ1bmN0aW9uKHQpe3RoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnMuZGVsZXRlKHQpLHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQ9ITB9LHQucHJvdG90eXBlLmFkZEZvb3RlclJvd0RlZj1mdW5jdGlvbih0KXt0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzLmFkZCh0KSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwfSx0LnByb3RvdHlwZS5yZW1vdmVGb290ZXJSb3dEZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcy5kZWxldGUodCksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMH0sdC5wcm90b3R5cGUudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2hlYWRlclJvd091dGxldCk7dGhpcy5fc3RpY2t5U3R5bGVyLmNsZWFyU3RpY2t5UG9zaXRpb25pbmcodCxbInRvcCJdKTt2YXIgZT10aGlzLl9oZWFkZXJSb3dEZWZzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGlja3l9KTt0aGlzLl9zdGlja3lTdHlsZXIuc3RpY2tSb3dzKHQsZSwidG9wIiksdGhpcy5faGVhZGVyUm93RGVmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0U3RpY2t5Q2hhbmdlZCgpfSl9LHQucHJvdG90eXBlLnVwZGF0ZVN0aWNreUZvb3RlclJvd1N0eWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9mb290ZXJSb3dPdXRsZXQpO3RoaXMuX3N0aWNreVN0eWxlci5jbGVhclN0aWNreVBvc2l0aW9uaW5nKHQsWyJib3R0b20iXSk7dmFyIGU9dGhpcy5fZm9vdGVyUm93RGVmcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RpY2t5fSk7dGhpcy5fc3RpY2t5U3R5bGVyLnN0aWNrUm93cyh0LGUsImJvdHRvbSIpLHRoaXMuX3N0aWNreVN0eWxlci51cGRhdGVTdGlja3lGb290ZXJDb250YWluZXIodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGUpLHRoaXMuX2Zvb3RlclJvd0RlZnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNldFN0aWNreUNoYW5nZWQoKX0pfSx0LnByb3RvdHlwZS51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2hlYWRlclJvd091dGxldCksbj10aGlzLl9nZXRSZW5kZXJlZFJvd3ModGhpcy5fcm93T3V0bGV0KSxpPXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9mb290ZXJSb3dPdXRsZXQpO3RoaXMuX3N0aWNreVN0eWxlci5jbGVhclN0aWNreVBvc2l0aW9uaW5nKGUuY29uY2F0KG4saSksWyJsZWZ0IiwicmlnaHQiXSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dC5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzKFtlXSx0Ll9oZWFkZXJSb3dEZWZzW25dKX0pLHRoaXMuX3Jvd0RlZnMuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIGk9W10scj0wO3I8bi5sZW5ndGg7cisrKXQuX3JlbmRlclJvd3Nbcl0ucm93RGVmPT09ZSYmaS5wdXNoKG5bcl0pO3QuX2FkZFN0aWNreUNvbHVtblN0eWxlcyhpLGUpfSksaS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dC5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzKFtlXSx0Ll9mb290ZXJSb3dEZWZzW25dKX0pLEFycmF5LmZyb20odGhpcy5fY29sdW1uRGVmc0J5TmFtZS52YWx1ZXMoKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNldFN0aWNreUNoYW5nZWQoKX0pfSx0LnByb3RvdHlwZS5fZ2V0QWxsUmVuZGVyUm93cz1mdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcDt0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXA7Zm9yKHZhciBuPTA7bjx0aGlzLl9kYXRhLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuX2RhdGFbbl0scj10aGlzLl9nZXRSZW5kZXJSb3dzRm9yRGF0YShpLG4sZS5nZXQoaSkpO3RoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuaGFzKGkpfHx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwLnNldChpLG5ldyBXZWFrTWFwKTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGE9cltvXSxzPXRoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuZ2V0KGEuZGF0YSk7cy5oYXMoYS5yb3dEZWYpP3MuZ2V0KGEucm93RGVmKS5wdXNoKGEpOnMuc2V0KGEucm93RGVmLFthXSksdC5wdXNoKGEpfX1yZXR1cm4gdH0sdC5wcm90b3R5cGUuX2dldFJlbmRlclJvd3NGb3JEYXRhPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZ2V0Um93RGVmcyh0LGUpLm1hcChmdW5jdGlvbihpKXt2YXIgcj1uJiZuLmhhcyhpKT9uLmdldChpKTpbXTtpZihyLmxlbmd0aCl7dmFyIG89ci5zaGlmdCgpO3JldHVybiBvLmRhdGFJbmRleD1lLG99cmV0dXJue2RhdGE6dCxyb3dEZWY6aSxkYXRhSW5kZXg6ZX19KX0sdC5wcm90b3R5cGUuX2NhY2hlQ29sdW1uRGVmcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29sdW1uRGVmc0J5TmFtZS5jbGVhcigpLEQodGhpcy5fY29udGVudENvbHVtbkRlZnMsdGhpcy5fY3VzdG9tQ29sdW1uRGVmcykuZm9yRWFjaChmdW5jdGlvbihlKXtpZih0Ll9jb2x1bW5EZWZzQnlOYW1lLmhhcyhlLm5hbWUpKXRocm93IEVycm9yKCdEdXBsaWNhdGUgY29sdW1uIGRlZmluaXRpb24gbmFtZSBwcm92aWRlZDogIicrZS5uYW1lKyciLicpO3QuX2NvbHVtbkRlZnNCeU5hbWUuc2V0KGUubmFtZSxlKX0pfSx0LnByb3RvdHlwZS5fY2FjaGVSb3dEZWZzPWZ1bmN0aW9uKCl7dGhpcy5faGVhZGVyUm93RGVmcz1EKHRoaXMuX2NvbnRlbnRIZWFkZXJSb3dEZWZzLHRoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnMpLHRoaXMuX2Zvb3RlclJvd0RlZnM9RCh0aGlzLl9jb250ZW50Rm9vdGVyUm93RGVmcyx0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzKSx0aGlzLl9yb3dEZWZzPUQodGhpcy5fY29udGVudFJvd0RlZnMsdGhpcy5fY3VzdG9tUm93RGVmcyk7dmFyIHQ9dGhpcy5fcm93RGVmcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQud2hlbn0pO2lmKCF0aGlzLm11bHRpVGVtcGxhdGVEYXRhUm93cyYmdC5sZW5ndGg+MSl0aHJvdyBFcnJvcigiVGhlcmUgY2FuIG9ubHkgYmUgb25lIGRlZmF1bHQgcm93IHdpdGhvdXQgYSB3aGVuIHByZWRpY2F0ZSBmdW5jdGlvbi4iKTt0aGlzLl9kZWZhdWx0Um93RGVmPXRbMF19LHQucHJvdG90eXBlLl9yZW5kZXJVcGRhdGVkQ29sdW1ucz1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fCEhZS5nZXRDb2x1bW5zRGlmZigpfTt0aGlzLl9yb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy5fZm9yY2VSZW5kZXJEYXRhUm93cygpLHRoaXMuX2hlYWRlclJvd0RlZnMucmVkdWNlKHQsITEpJiZ0aGlzLl9mb3JjZVJlbmRlckhlYWRlclJvd3MoKSx0aGlzLl9mb290ZXJSb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy5fZm9yY2VSZW5kZXJGb290ZXJSb3dzKCl9LHQucHJvdG90eXBlLl9zd2l0Y2hEYXRhU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuX2RhdGE9W10sdGhpcy5kYXRhU291cmNlIGluc3RhbmNlb2YgYS5hJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24mJih0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCksdHx8KHRoaXMuX2RhdGFEaWZmZXImJnRoaXMuX2RhdGFEaWZmZXIuZGlmZihbXSksdGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSksdGhpcy5fZGF0YVNvdXJjZT10fSx0LnByb3RvdHlwZS5fb2JzZXJ2ZVJlbmRlckNoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuZGF0YVNvdXJjZSl7dmFyIGU7aWYodGhpcy5kYXRhU291cmNlLmNvbm5lY3QgaW5zdGFuY2VvZiBGdW5jdGlvbj9lPXRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpOnRoaXMuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIGwuYT9lPXRoaXMuZGF0YVNvdXJjZTpBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkmJihlPU9iamVjdChjLmEpKHRoaXMuZGF0YVNvdXJjZSkpLHZvaWQgMD09PWUpdGhyb3cgRXJyb3IoIlByb3ZpZGVkIGRhdGEgc291cmNlIGRpZCBub3QgbWF0Y2ggYW4gYXJyYXksIE9ic2VydmFibGUsIG9yIERhdGFTb3VyY2UiKTt0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249ZS5waXBlKE9iamVjdChmLmEpKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXt0Ll9kYXRhPWV8fFtdLHQucmVuZGVyUm93cygpfSl9fSx0LnByb3RvdHlwZS5fZm9yY2VSZW5kZXJIZWFkZXJSb3dzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9oZWFkZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGg+MCYmdGhpcy5faGVhZGVyUm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9oZWFkZXJSb3dEZWZzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5fcmVuZGVyUm93KHQuX2hlYWRlclJvd091dGxldCxlLG4pfSksdGhpcy51cGRhdGVTdGlja3lIZWFkZXJSb3dTdHlsZXMoKSx0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpfSx0LnByb3RvdHlwZS5fZm9yY2VSZW5kZXJGb290ZXJSb3dzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9mb290ZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGg+MCYmdGhpcy5fZm9vdGVyUm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9mb290ZXJSb3dEZWZzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5fcmVuZGVyUm93KHQuX2Zvb3RlclJvd091dGxldCxlLG4pfSksdGhpcy51cGRhdGVTdGlja3lGb290ZXJSb3dTdHlsZXMoKSx0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpfSx0LnByb3RvdHlwZS5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPUFycmF5LmZyb20oZS5jb2x1bW5zfHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9jb2x1bW5EZWZzQnlOYW1lLmdldCh0KX0pLHI9aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RpY2t5fSksbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGlja3lFbmR9KTt0aGlzLl9zdGlja3lTdHlsZXIudXBkYXRlU3RpY2t5Q29sdW1ucyh0LHIsbyl9LHQucHJvdG90eXBlLl9nZXRSZW5kZXJlZFJvd3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MDtuPHQudmlld0NvbnRhaW5lci5sZW5ndGg7bisrKXt2YXIgaT10LnZpZXdDb250YWluZXIuZ2V0KG4pO2UucHVzaChpLnJvb3ROb2Rlc1swXSl9cmV0dXJuIGV9LHQucHJvdG90eXBlLl9nZXRSb3dEZWZzPWZ1bmN0aW9uKHQsZSl7aWYoMT09dGhpcy5fcm93RGVmcy5sZW5ndGgpcmV0dXJuW3RoaXMuX3Jvd0RlZnNbMF1dO3ZhciBuPVtdO2lmKHRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzKW49dGhpcy5fcm93RGVmcy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4ud2hlbnx8bi53aGVuKGUsdCl9KTtlbHNle3ZhciBpPXRoaXMuX3Jvd0RlZnMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gbi53aGVuJiZuLndoZW4oZSx0KX0pfHx0aGlzLl9kZWZhdWx0Um93RGVmO2kmJm4ucHVzaChpKX1pZighbi5sZW5ndGgpdGhyb3cgZnVuY3Rpb24odCl7cmV0dXJuIEVycm9yKCJDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIHJvdyBkZWZpbml0aW9uIGZvciB0aGVwcm92aWRlZCByb3cgZGF0YTogIitKU09OLnN0cmluZ2lmeSh0KSl9KHQpO3JldHVybiBufSx0LnByb3RvdHlwZS5faW5zZXJ0Um93PWZ1bmN0aW9uKHQsZSl7dGhpcy5fcmVuZGVyUm93KHRoaXMuX3Jvd091dGxldCx0LnJvd0RlZixlLHskaW1wbGljaXQ6dC5kYXRhfSl9LHQucHJvdG90eXBlLl9yZW5kZXJSb3c9ZnVuY3Rpb24odCxlLG4saSl7dm9pZCAwPT09aSYmKGk9e30pLHQudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZS50ZW1wbGF0ZSxpLG4pO2Zvcih2YXIgcj0wLG89dGhpcy5fZ2V0Q2VsbFRlbXBsYXRlcyhlKTtyPG8ubGVuZ3RoO3IrKylFLm1vc3RSZWNlbnRDZWxsT3V0bGV0JiZFLm1vc3RSZWNlbnRDZWxsT3V0bGV0Ll92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhvW3JdLGkpO3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSx0LnByb3RvdHlwZS5fdXBkYXRlUm93SW5kZXhDb250ZXh0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe3ZhciBpPXQuZ2V0KGUpLmNvbnRleHQ7aS5jb3VudD1uLGkuZmlyc3Q9MD09PWUsaS5sYXN0PWU9PT1uLTEsaS5ldmVuPWUlMj09MCxpLm9kZD0haS5ldmVuLHRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzPyhpLmRhdGFJbmRleD10aGlzLl9yZW5kZXJSb3dzW2VdLmRhdGFJbmRleCxpLnJlbmRlckluZGV4PWUpOmkuaW5kZXg9dGhpcy5fcmVuZGVyUm93c1tlXS5kYXRhSW5kZXh9fSx0LnByb3RvdHlwZS5fZ2V0Q2VsbFRlbXBsYXRlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0JiZ0LmNvbHVtbnM/QXJyYXkuZnJvbSh0LmNvbHVtbnMsZnVuY3Rpb24obil7dmFyIGk9ZS5fY29sdW1uRGVmc0J5TmFtZS5nZXQobik7aWYoIWkpdGhyb3cgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGNvbHVtbiB3aXRoIGlkICInK24rJyIuJyk7cmV0dXJuIHQuZXh0cmFjdENlbGxUZW1wbGF0ZShpKX0pOltdfSx0LnByb3RvdHlwZS5fYXBwbHlOYXRpdmVUYWJsZVNlY3Rpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1be3RhZzoidGhlYWQiLG91dGxldDp0aGlzLl9oZWFkZXJSb3dPdXRsZXR9LHt0YWc6InRib2R5IixvdXRsZXQ6dGhpcy5fcm93T3V0bGV0fSx7dGFnOiJ0Zm9vdCIsb3V0bGV0OnRoaXMuX2Zvb3RlclJvd091dGxldH1dO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuLnRhZyk7aS5hcHBlbmRDaGlsZChuLm91dGxldC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChpKX19LHQucHJvdG90eXBlLl9mb3JjZVJlbmRlckRhdGFSb3dzPWZ1bmN0aW9uKCl7dGhpcy5fZGF0YURpZmZlci5kaWZmKFtdKSx0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMucmVuZGVyUm93cygpLHRoaXMudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCl9LHQucHJvdG90eXBlLl9jaGVja1N0aWNreVN0YXRlcz1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fGUuaGFzU3RpY2t5Q2hhbmdlZCgpfTt0aGlzLl9oZWFkZXJSb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy51cGRhdGVTdGlja3lIZWFkZXJSb3dTdHlsZXMoKSx0aGlzLl9mb290ZXJSb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy51cGRhdGVTdGlja3lGb290ZXJSb3dTdHlsZXMoKSxBcnJheS5mcm9tKHRoaXMuX2NvbHVtbkRlZnNCeU5hbWUudmFsdWVzKCkpLnJlZHVjZSh0LCExKSYmdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKX0sdC5wcm90b3R5cGUuX3NldHVwU3RpY2t5U3R5bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGlja3lTdHlsZXI9bmV3IEEodGhpcy5faXNOYXRpdmVIdG1sVGFibGUsdGhpcy5zdGlja3lDc3NDbGFzcyx0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIiKSwodGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6T2JqZWN0KGMuYSkoKSkucGlwZShPYmplY3QoZi5hKSh0aGlzLl9vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5fc3RpY2t5U3R5bGVyLmRpcmVjdGlvbj1lLHQudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCl9KX0sdH0oKTtmdW5jdGlvbiBEKHQsZSl7cmV0dXJuIHQudG9BcnJheSgpLmNvbmNhdChBcnJheS5mcm9tKGUpKX12YXIgTj1mdW5jdGlvbigpe319LHlXTXI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pO3ZhciBpPW4oIkNjbkciKSxyPW4oIkJnV0siKSxvPW4oIklwMFIiKSxhPShuKCJlRGtQIiksbigiRnpxYyIpLG4oIjRjMzUiKSkscz0obigiZFdaZyIpLG4oInFBbFMiKSxuKCJXZjRwIiksbigibExBUCIpKSx1PW4oInZHWFkiKSxsPWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZzo4cHggMTZweDttaW4td2lkdGg6MTAwdnc7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7b3V0bGluZTowO21heC1oZWlnaHQ6ODB2aDtvdmVyZmxvdzphdXRvfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntvdXRsaW5lOjFweCBzb2xpZH19Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLW1lZGl1bXttaW4td2lkdGg6Mzg0cHg7bWF4LXdpZHRoOmNhbGMoMTAwdncgLSAxMjhweCl9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLWxhcmdle21pbi13aWR0aDo1MTJweDttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDI1NnB4KX0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIteGxhcmdle21pbi13aWR0aDo1NzZweDttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDM4NHB4KX0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToic3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6InZvaWQsIGhpZGRlbiIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTAwJSkifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToidmlzaWJsZSIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCUpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6InZpc2libGUgPT4gdm9pZCwgdmlzaWJsZSA9PiBoaWRkZW4iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjM3NW1zIGN1YmljLWJlemllcigwLjQsMC4wLDEsMSkifSxvcHRpb25zOm51bGx9LHt0eXBlOjEsZXhwcjoidm9pZCA9PiB2aXNpYmxlIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIxOTVtcyBjdWJpYy1iZXppZXIoMC4wLDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5JYSgwLG51bGwsbnVsbCwwKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaS5sYigyLFtpLmhiKDQwMjY1MzE4NCwxLHtfcG9ydGFsT3V0bGV0OjB9KSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGMpKSxpLlFhKDIsMjEyOTkyLFtbMSw0XV0sMCxhLmIsW2kuaixpLlFdLHtwb3J0YWw6WzAsInBvcnRhbCJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMiwwLCIiKX0sbnVsbCl9dmFyIGg9aS5OYSgibWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIiLHIuYyxmdW5jdGlvbih0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDEsIm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIixbWyJhcmlhLW1vZGFsIiwidHJ1ZSJdLFsiY2xhc3MiLCJtYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciJdLFsicm9sZSIsImRpYWxvZyJdLFsidGFiaW5kZXgiLCItMSJdXSxbWzEsImFyaWEtbGFiZWwiLDBdLFs0MCwiQHN0YXRlIiwwXV0sW1siY29tcG9uZW50IiwiQHN0YXRlLnN0YXJ0Il0sWyJjb21wb25lbnQiLCJAc3RhdGUuZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNvbXBvbmVudDpAc3RhdGUuc3RhcnQiPT09ZSYmKHI9ITEhPT1pLmJiKHQsMSkuX29uQW5pbWF0aW9uU3RhcnQobikmJnIpLCJjb21wb25lbnQ6QHN0YXRlLmRvbmUiPT09ZSYmKHI9ITEhPT1pLmJiKHQsMSkuX29uQW5pbWF0aW9uRG9uZShuKSYmcikscn0sZixsKSksaS5RYSgxLDE4MDIyNCxudWxsLDAsci5jLFtpLmssaS5oLHMuYyx1LmEsWzIsby5kXSxyLmJdLG51bGwsbnVsbCldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLG51bGw9PWkuYmIoZSwxKS5ib3R0b21TaGVldENvbmZpZz9udWxsOmkuYmIoZSwxKS5ib3R0b21TaGVldENvbmZpZy5hcmlhTGFiZWwsaS5iYihlLDEpLl9hbmltYXRpb25TdGF0ZSl9KX0se30se30sW10pfSx6b3RtOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnBhcmVudD1lLHIub3V0ZXJWYWx1ZT1uLHIub3V0ZXJJbmRleD1pLHIuaW5kZXg9MCxyfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudC5ub3RpZnlOZXh0KHRoaXMub3V0ZXJWYWx1ZSx0LHRoaXMub3V0ZXJJbmRleCx0aGlzLmluZGV4KyssdGhpcyl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0aGlzLnBhcmVudC5ub3RpZnlFcnJvcih0LHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnQubm90aWZ5Q29tcGxldGUodGhpcyksdGhpcy51bnN1YnNjcmliZSgpfSxlfShuKCJGRk9vIikuYSksbz1uKCJGeGIxIik7ZnVuY3Rpb24gYSh0LGUsbixpKXt2YXIgYT1uZXcgcih0LG4saSk7cmV0dXJuIE9iamVjdChvLmEpKGUpKGEpfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSl9fV0pOyh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbOV0sezQ6ZnVuY3Rpb24obCxuLGEpe2wuZXhwb3J0cz1hKCJ6VW5iIil9LEF5dFI6ZnVuY3Rpb24obCxuLGEpeyJ1c2Ugc3RyaWN0IjthLmQobiwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZX0pO3ZhciBlPXtwcm9kdWN0aW9uOiEwfX0sIk1obSsiOmZ1bmN0aW9uKG1vZHVsZSxfX3dlYnBhY2tfZXhwb3J0c19fLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0IjtfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQ2h1bmtMb2FkZXJTZXJ2aWNlfSk7dmFyIHJ4anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIwL3VRIiksX3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX189X193ZWJwYWNrX3JlcXVpcmVfXygicmYzMCIpLF9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJBeXRSIiksX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fPV9fd2VicGFja19yZXF1aXJlX18oIkNjbkciKSxfYW5ndWxhcl9jb21tb25faHR0cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fPV9fd2VicGFja19yZXF1aXJlX18oInQvTmEiKSxDaHVua0xvYWRlclNlcnZpY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBDaHVua0xvYWRlclNlcnZpY2UobCl7dmFyIG49dGhpczt0aGlzLmh0dHA9bCx0aGlzLnJlY29yZHM9X3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18uYSwwIT1fZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18uYS5wcm9kdWN0aW9uJiZ0aGlzLnJlY29yZHMuZm9yRWFjaChmdW5jdGlvbihsKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5sb2FkUGFnZUNodW5rKGwucGFnZU5hbWUsZnVuY3Rpb24oKXt9KX0pfSl9cmV0dXJuIENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUuYXN5bmNMb2FkUGFnZUNodW5rPWZ1bmN0aW9uKGwpe3ZhciBuPXRoaXMsYT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGUpe3ZhciB0PW4ucmVjb3Jkcy5maW5kKGZ1bmN0aW9uKG4pe3JldHVybi0xIT1sLmluZGV4T2Yobi5wYWdlTmFtZSl9KTt2b2lkIDAhPXQ/KGNvbnNvbGUubG9nKCJMb2FkaW5nIDogIit0LnBhZ2VOYW1lKyIgKCIrdC5jaHVua1VSTCsiLCAiK3QuY2h1bmtMb2FkZWQrIikgW0FzeW5jXSIpLDA9PXQuY2h1bmtMb2FkZWQ/bi5odHRwLmdldCh0LmNodW5rVVJMLHtyZXNwb25zZVR5cGU6InRleHQifSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGwpe3JldHVybiBuLmFzeW5jTG9hZERhdGFDaHVuayhsLHQsYSl9LGZ1bmN0aW9uKGwpe3JldHVybiBjb25zb2xlLmxvZyhsKX0pOmEoITApKTphKCEwKX0pO3JldHVybiBPYmplY3Qocnhqc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLmEpKGEpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmxvYWRQYWdlQ2h1bms9ZnVuY3Rpb24obCxuKXt2YXIgYT10aGlzLGU9dGhpcy5yZWNvcmRzLmZpbmQoZnVuY3Rpb24obil7cmV0dXJuLTEhPWwuaW5kZXhPZihuLnBhZ2VOYW1lKX0pO3ZvaWQgMCE9ZT8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK2UucGFnZU5hbWUrIiAoIitlLmNodW5rVVJMKyIpIiksMD09ZS5jaHVua0xvYWRlZD90aGlzLmh0dHAuZ2V0KGUuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24obCl7cmV0dXJuIGEubG9hZERhdGFDaHVuayhsLG4sZSl9LGZ1bmN0aW9uKGwpe3JldHVybiBjb25zb2xlLmxvZyhsKX0pOm4oKSk6bigpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmxvYWREYXRhQ2h1bms9ZnVuY3Rpb24oYmFzZTY0ZGF0YSxjYWxsYmFjayxyZWNvcmQpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKGJhc2U2NGRhdGEpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKSxjYWxsYmFjaygpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmFzeW5jTG9hZERhdGFDaHVuaz1mdW5jdGlvbihiYXNlNjRkYXRhLHJlY29yZCxyZXNvbHZlKXt2YXIgZGVjb2RlZERhdGE9YXRvYihiYXNlNjRkYXRhKTtldmFsKGRlY29kZWREYXRhKSxyZWNvcmQuY2h1bmtMb2FkZWQ9ITAsY29uc29sZS5sb2coIkxvYWRlZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIFtBc3luY10iKSxyZXNvbHZlKCEwKX0sQ2h1bmtMb2FkZXJTZXJ2aWNlLm5nSW5qZWN0YWJsZURlZj1fYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uVSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQ2h1bmtMb2FkZXJTZXJ2aWNlKF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5ZKF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18uYykpfSx0b2tlbjpDaHVua0xvYWRlclNlcnZpY2UscHJvdmlkZWRJbjoicm9vdCJ9KSxDaHVua0xvYWRlclNlcnZpY2V9KCl9LGFlY2Q6ZnVuY3Rpb24obW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCJhIixmdW5jdGlvbigpe3JldHVybiBQcmVJbml0TG9hZGVyU2VydmljZX0pO3ZhciBfcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJyZjMwIiksX2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fPV9fd2VicGFja19yZXF1aXJlX18oIkF5dFIiKSxfYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX189X193ZWJwYWNrX3JlcXVpcmVfXygiQ2NuRyIpLF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX189X193ZWJwYWNrX3JlcXVpcmVfXygidC9OYSIpLFByZUluaXRMb2FkZXJTZXJ2aWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUHJlSW5pdExvYWRlclNlcnZpY2UobCl7dGhpcy5odHRwPWx9cmV0dXJuIFByZUluaXRMb2FkZXJTZXJ2aWNlLnByb3RvdHlwZS5sb2FkUGFnZUF0SW5pdD1mdW5jdGlvbigpe2lmKDAhPV9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXy5hLnByb2R1Y3Rpb24pe2NvbnNvbGUubG9nKCJJUEwgOiBJbml0aWFsIHBhZ2UgbG9hZGVyIFtBUFBfSU5JVElBTElaRVJdIik7dmFyIGN1cnJVcmw9d2luZG93LmxvY2F0aW9uLmhyZWYscmVnZXg9bmV3IFJlZ0V4cCgiI1xcLy4qIiksbWF0Y2hBcnJheT1jdXJyVXJsLm1hdGNoKHJlZ2V4KTtpZihBcnJheS5pc0FycmF5KG1hdGNoQXJyYXkpJiZtYXRjaEFycmF5Lmxlbmd0aCl7dmFyIGN1cnJQYXRoXzE9bWF0Y2hBcnJheVswXS5zbGljZSgxKTtjb25zb2xlLmxvZygiVVJMIDogIitjdXJyVXJsKSxjb25zb2xlLmxvZygiUGF0aCA6ICIrY3VyclBhdGhfMSk7dmFyIHJlY29yZD1fcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5hLmZpbmQoZnVuY3Rpb24obCl7cmV0dXJuIGwucGFnZU5hbWU9PWN1cnJQYXRoXzF9KTtpZih2b2lkIDA9PXJlY29yZClyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiSVBMIDogTm8gcmVjb3JkIGZvdW5kLCBwYWdlIGNhbid0IGJlIGxvYWRlZCBpbml0aWFsbHkuXG5JUEwgOiBUaGlzIG1heSBiZSBhbiBlcnJvciBpZiB0aGUgcGF0aCBpcyBub3QgcGFydCBvZiB0aGUgbWFpbiBjaHVuayB0aGF0IGlzIGVtYmVkZGVkIGluIHRoZSBodG1sIHBhZ2UiKTtpZihjb25zb2xlLmxvZygiSVBMIDogQ29ycmVzcG9uZGluZyByZWNvcmQgZm91bmQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpLDA9PXJlY29yZC5jaHVua0xvYWRlZCl7dmFyIHJlcT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYocmVxLm9wZW4oIkdFVCIscmVjb3JkLmNodW5rVVJMLCExKSxyZXEuc2VuZChudWxsKSwyMDA9PT1yZXEuc3RhdHVzKXt2YXIgZGVjb2RlZERhdGE9YXRvYihyZXEucmVzcG9uc2VUZXh0KTtldmFsKGRlY29kZWREYXRhKSxyZWNvcmQuY2h1bmtMb2FkZWQ9ITAsY29uc29sZS5sb2coIklQTCA6IExvYWRlZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIil9ZWxzZSBjb25zb2xlLmxvZygiSVBMIDogRXJyb3Igd2hpbGUgZ2V0dGluZyBkYXRhOiAlZCAoJXMpIixyZXEuc3RhdHVzLHJlcS5zdGF0dXNUZXh0KX19ZWxzZSBjb25zb2xlLmxvZygiSVBMIDogTWFpbiBwYWdlLCBvciB1bmNhdWdodCBlcnJvci4iKX19LFByZUluaXRMb2FkZXJTZXJ2aWNlLm5nSW5qZWN0YWJsZURlZj1fYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18uVSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgUHJlSW5pdExvYWRlclNlcnZpY2UoX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLlkoX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5jKSl9LHRva2VuOlByZUluaXRMb2FkZXJTZXJ2aWNlLHByb3ZpZGVkSW46InJvb3QifSksUHJlSW5pdExvYWRlclNlcnZpY2V9KCl9LGNybmQ6ZnVuY3Rpb24obCxuLGEpe3ZhciBlPXsiLi9hdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1sYXllci5tb2R1bGUubmdmYWN0b3J5IjpbIm5ybHEiLDJdLCIuL2Jpb2xvZ3ktc2VjdGlvbi9iaW9sb2d5LXNlY3Rpb24tbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJhQUtEIiwxXSwiLi9zdXBwb3J0LXNlY3Rpb24vc3VwcG9ydC1zZWN0aW9uLWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiTjRscCIsMF0sIi4vdGVhbS1yb3N0ZXIvdGVhbS1yb3N0ZXItbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJUa1lrIiwzXSwiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiZ0RqYyIsNF19O2Z1bmN0aW9uIHQobCl7dmFyIG49ZVtsXTtyZXR1cm4gbj9hLmUoblsxXSkudGhlbihmdW5jdGlvbigpe3JldHVybiBhKG5bMF0pfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBuPW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICInK2wrJyIuJyk7dGhyb3cgbi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixufSl9dC5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKGUpfSx0LmlkPSJjcm5kIixsLmV4cG9ydHM9dH0scFpoTTpmdW5jdGlvbihsLG4sYSl7InVzZSBzdHJpY3QiO2EuZChuLCJhIixmdW5jdGlvbigpe3JldHVybiBlfSk7dmFyIGU9ZnVuY3Rpb24oKXt9fSxyZjMwOmZ1bmN0aW9uKGwsbixhKXsidXNlIHN0cmljdCI7YS5kKG4sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHR9KTt2YXIgZT1mdW5jdGlvbihsLG4pe3RoaXMucGFnZU5hbWU9bCx0aGlzLmNodW5rVVJMPW4sdGhpcy5jaHVua0xvYWRlZD0hMX0sdD1bbmV3IGUoIi9zdXBwb3J0IiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvOS85MS9ULS1HT19QYXJpcy1TYWNsYXktLXN1cHBvcnRfY2h1bmsuYmFzZTY0LnR4dCIpLG5ldyBlKCIvdGVhbSIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzcvNzQvVC0tR09fUGFyaXMtU2FjbGF5LS10ZWFtX2NodW5rLmJhc2U2NC50eHQiKSxuZXcgZSgiL2xhYm5vdGVib29rIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMC8wMi9ULS1HT19QYXJpcy1TYWNsYXktLWxhYm5vdGVib29rX2NodW5rLmJhc2U2NC50eHQiKSxuZXcgZSgiL2F0dHJpYnV0aW9uIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81YS9ULS1HT19QYXJpcy1TYWNsYXktLWF0dHJpYnV0aW9uX2NodW5rLmJhc2U2NC50eHQiKSxuZXcgZSgiL2Jpb2xvZ3kiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8xLzE1L1QtLUdPX1BhcmlzLVNhY2xheS0tYmlvbG9neV9jaHVuay5iYXNlNjQudHh0IildfSx6VW5iOmZ1bmN0aW9uKGwsbixhKXsidXNlIHN0cmljdCI7YS5yKG4pO3ZhciBlPWEoIkNjbkciKSx0PWEoIkF5dFIiKSx1PWEoIklwMFIiKSxyPWEoImFlY2QiKSxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGwsbil7dGhpcy5wbGF0Zm9ybUlkPWwsdGhpcy5hcHBJZD1uO3ZhciBhPU9iamVjdCh1LnQpKGwpPyJpbiB0aGUgYnJvd3NlciI6Im9uIHRoZSBzZXJ2ZXIiO2NvbnNvbGUubG9nKCJSdW5uaW5nICIrYSsiIHdpdGggYXBwSWQ9IituKX19KCksaT1hKCJ2R1hZIiksYz1hKCI2N1kvIikscz1hKCJNaG0rIiksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwobCxuLGEpe3ZhciBlPXRoaXM7dGhpcy5icmVha3BvaW50T2JzZXJ2ZXI9bCx0aGlzLnJvdXRlcj1uLHRoaXMuY2h1bmtMb2FkZXI9YSx0aGlzLnNob3dTdWJtZW51PSExLHRoaXMub3BlbmVkU2lkZU5hdj0hMCx0aGlzLmlzSGFuZHNldCQ9dGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShpLmIuSGFuZHNldCkucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbihsKXtyZXR1cm4gbC5tYXRjaGVzfSkpLHRoaXMuc2lkZU1lbnVDb25maWc9e3BhZGRpbmdBdFN0YXJ0OiEwLHNlbGVjdGVkTGlzdEZvbnRDb2xvcjoicmdiKDExMSwxNzIsOTMpIn0sdGhpcy5zaWRlTWVudUxpc3Q9W3tsYWJlbDoiTWFpbiBwYWdlIixpY29uOiJkYXNoYm9hcmQiLGxpbms6Ii9kYXNoYm9hcmQifSx7bGFiZWw6IlByb2plY3QgRGVzaWduIixpY29uOiJhc3Nlc3NtZW50IixsaW5rOiIvcHJvamVjdCJ9LHtsYWJlbDoiQmlvbG9neSIsaWNvbjoiYmx1cl9jaXJjdWxhciIsaXRlbXM6W3tsYWJlbDoiT3ZlcnZpZXciLGljb246ImV4cGxvcmUiLGxpbms6Ii9iaW9sb2d5L292ZXJ2aWV3In0se2xhYmVsOiJQYXJ0cyIsaWNvbjoidmlld19jb21meSIsbGluazoiL2Jpb2xvZ3kvcGFydHMifSx7bGFiZWw6IlN0cmFpbnMiLGljb246ImJsdXJfb24iLGxpbms6Ii9iaW9sb2d5L3N0cmFpbnMifV19LHtsYWJlbDoiTW9kZWxpbmciLGljb246InRpbWVsaW5lIixsaW5rOiIvbW9kZWxpbmcifSx7bGFiZWw6IlNvZnR3YXJlIixpY29uOiJtZW1vcnkiLGxpbms6Ii9zb2Z0d2FyZSJ9LHtsYWJlbDoiSHVtYW4gUHJhY3RpY2VzIixpY29uOiJhY2Nlc3NpYmlsaXR5X25ldyIsbGluazoiL2h1bWFuLXByYWN0aWNlcyJ9LHtsYWJlbDoiT3VyIHRlYW0iLGljb246InBlb3BsZSIsbGluazoiL3RlYW0ifSx7bGFiZWw6IlN1cHBvcnQiLGljb246ImZvbGRlcl9zcGVjaWFsIixpdGVtczpbe2xhYmVsOiJTcG9uc29ycyIsaWNvbjoiYXR0YWNoX21vbmV5IixsaW5rOiIvc3VwcG9ydCJ9LHtsYWJlbDoiQ29sbGFib3JhdGlvbnMiLGljb246InB1YmxpYyIsbGluazoiL2NvbGxhYm9yYXRpb25zIn0se2xhYmVsOiJBdHRyaWJ1dGlvbiIsaWNvbjoicGVyc29uX3BpbiIsbGluazoiL2F0dHJpYnV0aW9uIn0se2xhYmVsOiJSZWZlcmVuY2VzIixpY29uOiJib29rIixsaW5rOiIvcmVmZXJlbmNlcyJ9XX0se2xhYmVsOiJMYWIgTm90ZWJvb2siLGljb246ImJsdXJfY2lyY3VsYXIiLGxpbms6Ii9sYWJub3RlYm9vayJ9XSx0aGlzLnJvdXRlckxpbmtDaHVua1Byb2Nlc3Npbmc9ZnVuY3Rpb24obCl7ZS5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nVW5ib3VuZChsLGUpfX1yZXR1cm4gbC5wcm90b3R5cGUucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZ1VuYm91bmQ9ZnVuY3Rpb24obCxuKXtuLmNodW5rTG9hZGVyLmxvYWRQYWdlQ2h1bmsobCxmdW5jdGlvbigpe24ucm91dGVyLm5hdmlnYXRlQnlVcmwobCl9KX0sbC5wcm90b3R5cGUub3BlblNpZGVOYXY9ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZFNpZGVOYXY9ITAhPT10aGlzLm9wZW5lZFNpZGVOYXZ9LGwucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxsLnByb3RvdHlwZS5zZWxlY3RlZFNpZGVNZW51SXRlbT1mdW5jdGlvbihsKXt0aGlzLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmcobC5saW5rKX0sbH0oKSxiPWEoInBNblMiKSxwPWEoImx6bGoiKSxtPWEoIkZWU3kiKSxoPWEoImdJM0IiKSxmPWEoIlZwaFoiKTtmdW5jdGlvbiBnKGwsbixhKXt2YXIgZSx0PWYuayhsKSx1PU1hdGgubWluKHBhcnNlSW50KHQuc3R5bGUoIndpZHRoIikpLHBhcnNlSW50KHQuc3R5bGUoImhlaWdodCIpKSkvMixyPXBhcnNlSW50KHQuc3R5bGUoIndpZHRoIikpLzItdSxvPXBhcnNlSW50KHQuc3R5bGUoImhlaWdodCIpKS8yLXUsaT1NYXRoLm1heChhLm1pblZhbHVlLE1hdGgubWluKGEubWF4VmFsdWUsbikpL2EubWF4VmFsdWUsYz1NYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKSsxO2U9YS53YXZlSGVpZ2h0U2NhbGluZz9mLmooKS5yYW5nZShbMCxhLndhdmVIZWlnaHQsMF0pLmRvbWFpbihbMCw1MCwxMDBdKTpmLmooKS5yYW5nZShbYS53YXZlSGVpZ2h0LGEud2F2ZUhlaWdodF0pLmRvbWFpbihbMCwxMDBdKTt2YXIgcz1hLnRleHRTaXplKnUvMixkPXBhcnNlRmxvYXQobikudG9GaXhlZCgyKSxiPWEudmFsdWVDb3VudFVwP2EubWluVmFsdWU6ZCxwPWEuZGlzcGxheVBlcmNlbnQ/YS5jdXN0b21QZXJjZW50OiIiLG09YS5jaXJjbGVUaGlja25lc3MqdSxoPW0rYS5jaXJjbGVGaWxsR2FwKnUsZz11LWgsXz1nKmUoMTAwKmkpLHY9MSthLndhdmVDb3VudCx4PTIqZy9hLndhdmVDb3VudCp2LHk9ZnVuY3Rpb24obCl7cmV0dXJuIE1hdGgucm91bmQobCl9O3BhcnNlRmxvYXQoZCkhPXBhcnNlRmxvYXQoeShkKSkmJih5PWZ1bmN0aW9uKGwpe3JldHVybiBwYXJzZUZsb2F0KGwpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGQpIT1wYXJzZUZsb2F0KHkoZCkpJiYoeT1mdW5jdGlvbihsKXtyZXR1cm4gcGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpfSk7Zm9yKHZhciB3PVtdLGs9MDtrPD00MCp2O2srKyl3LnB1c2goe3g6ay8oNDAqdikseTprLzQwfSk7dmFyIFI9Zi5qKCkucmFuZ2UoWzAsMipNYXRoLlBJXSkuZG9tYWluKFswLDFdKSxDPWYuaigpLnJhbmdlKFswLHVdKS5kb21haW4oWzAsdV0pLFA9Zi5qKCkucmFuZ2UoWzAseF0pLmRvbWFpbihbMCwxXSksTT1mLmooKS5yYW5nZShbMCxfXSkuZG9tYWluKFswLDFdKSxPPWYuaigpLnJhbmdlKFtoKzIqZytfLGgtX10pLmRvbWFpbihbMCwxXSksaj1mLmooKS5yYW5nZShbMCx4LTIqZ10pLmRvbWFpbihbMCwxXSksQT1mLmooKS5yYW5nZShbaCsyKmcsaCsuNypzXSkuZG9tYWluKFswLDFdKSxJPXQuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcisiLCIrbysiKSIpLEw9Zi5hKCkuc3RhcnRBbmdsZShSKDApKS5lbmRBbmdsZShSKDEpKS5vdXRlclJhZGl1cyhDKHUpKS5pbm5lclJhZGl1cyhDKHUtbSkpO0kuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsTCkuc3R5bGUoImZpbGwiLGEuY2lyY2xlQ29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK3UrIikiKTt2YXIgWj1JLmFwcGVuZCgidGV4dCIpLnRleHQoeShiKStwKS5hdHRyKCJjbGFzcyIsImxpcXVpZEZpbGxHYXVnZVRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZvbnQtc2l6ZSIscysicHgiKS5zdHlsZSgiZmlsbCIsYS50ZXh0Q29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK0EoYS50ZXh0VmVydFBvc2l0aW9uKSsiKSIpLFM9Zi5iKCkueChmdW5jdGlvbihsKXtyZXR1cm4gUChsLngpfSkueTAoZnVuY3Rpb24obCl7cmV0dXJuIE0oTWF0aC5zaW4oMipNYXRoLlBJKmEud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtYS53YXZlQ291bnQpKzIqbC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKGwpe3JldHVybiAyKmcrX30pLEU9SS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJjbGlwV2F2ZSIrYy50b1N0cmluZygpKSxRPUUuYXBwZW5kKCJwYXRoIikuZGF0dW0odykuYXR0cigiZCIsUykuYXR0cigiVCIsMCksVD1JLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjY2xpcFdhdmUiK2MudG9TdHJpbmcoKSsiKSIpO1QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsdSkuYXR0cigiY3kiLHUpLmF0dHIoInIiLGcpLnN0eWxlKCJmaWxsIixhLndhdmVDb2xvcik7dmFyIEQ9VC5hcHBlbmQoInRleHQiKS50ZXh0KHkoYikrcCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLHMrInB4Iikuc3R5bGUoImZpbGwiLGEud2F2ZVRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCIrQShhLnRleHRWZXJ0UG9zaXRpb24pKyIpIik7aWYoYS52YWx1ZUNvdW50VXApe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIGw9Zi5mKGIsZCk7cmV0dXJuIGZ1bmN0aW9uKG4pe1oudGV4dCh5KGwobikpK3ApLEQudGV4dCh5KGwobikpK3ApfX07Wi50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixGKSxELnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLEYpfXZhciBOPWgrMipnLXg7ZnVuY3Rpb24gVSgpe1EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraihRLmF0dHIoIlQiKSkrIiwwKSIpLFEudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZUFuaW1hdGVUaW1lKigxLVEuYXR0cigiVCIpKSkuZWFzZShmLmQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ooMSkrIiwwKSIpLmF0dHIoIlQiLDEpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7US5hdHRyKCJUIiwwKSxVKCl9KX1yZXR1cm4gYS53YXZlUmlzZT9FLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK04rIiwiK08oMCkrIikiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK04rIiwiK08oaSkrIikiKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7US5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMSwwKSIpfSk6RS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitOKyIsIitPKGkpKyIpIiksYS53YXZlQW5pbWF0ZSYmVSgpLHt1cGRhdGUobCl7dmFyIG49cGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpLHQ9ZnVuY3Rpb24obCl7cmV0dXJuIE1hdGgucm91bmQobCl9O3BhcnNlRmxvYXQobikhPXBhcnNlRmxvYXQodChuKSkmJih0PWZ1bmN0aW9uKGwpe3JldHVybiBwYXJzZUZsb2F0KGwpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KG4pIT1wYXJzZUZsb2F0KHQobikpJiYodD1mdW5jdGlvbihsKXtyZXR1cm4gcGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpfSk7dmFyIHU9ZnVuY3Rpb24oKXt2YXIgbj1mLmYoWi50ZXh0KCkscGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpKTtyZXR1cm4gZnVuY3Rpb24obCl7Wi50ZXh0KHQobihsKSkrcCksRC50ZXh0KHQobihsKSkrcCl9fTtaLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLHUpLEQudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsdSk7dmFyIHIsbz1NYXRoLm1heChhLm1pblZhbHVlLE1hdGgubWluKGEubWF4VmFsdWUsbCkpL2EubWF4VmFsdWUsaT1nKmUoMTAwKm8pLGM9Zi5qKCkucmFuZ2UoW2grMipnK2ksaC1pXSkuZG9tYWluKFswLDFdKShvKSxzPWYuaigpLnJhbmdlKFswLHhdKS5kb21haW4oWzAsMV0pLGQ9Zi5qKCkucmFuZ2UoWzAsaV0pLmRvbWFpbihbMCwxXSk7cj1hLndhdmVIZWlnaHRTY2FsaW5nP2YubC5hcmVhKCkueChmdW5jdGlvbihsKXtyZXR1cm4gcyhsLngpfSkueTAoZnVuY3Rpb24obCl7cmV0dXJuIGQoTWF0aC5zaW4oMipNYXRoLlBJKmEud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtYS53YXZlQ291bnQpKzIqbC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKGwpe3JldHVybiAyKmcraX0pOlM7dmFyIGI9YS53YXZlQW5pbWF0ZT9qKDEpOjA7US50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZUFuaW1hdGU/YS53YXZlQW5pbWF0ZVRpbWUqKDEtUS5hdHRyKCJUIikpOmEud2F2ZVJpc2VUaW1lKS5lYXNlKGYuZCkuYXR0cigiZCIscikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYisiLDApIikuYXR0cigiVCIsIjEiKS5vbigiZW5kIixmdW5jdGlvbigpe2Eud2F2ZUFuaW1hdGUmJihRLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ooMCkrIiwwKSIpLFUoKSl9KSxFLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTisiLCIrYysiKSIpfX19dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dGhpcy5keW5fd2lkdGg9NTAwfXJldHVybiBsLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgbCxuO3RoaXMuZHluX3dpZHRoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkM2NvbnRhaW5lciIpLmNsaWVudFdpZHRoLGw9Zi5rKCIjZDN0YXJnZXQiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLCJhbmltYXRlLWdyYWRpZW50IikuYXR0cigieDEiLCIwJSIpLmF0dHIoInkxIiwiMCUiKS5hdHRyKCJ4MiIsIjEwMCUiKS5hdHRyKCJ5MiIsIjAiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJyZWZsZWN0Iiksbj1bIiMwMDFhZmQiLCIjNmI2N2ZjIiwiIzUzOTBlMyIsIiMzNTZjYzYiLCIjNTM5MGUzIiwiIzZiNjdmYyIsIiMwMDFhZmQiXSxsLnNlbGVjdEFsbCgiLnN0b3AiKS5kYXRhKG4pLmVudGVyKCkuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixmdW5jdGlvbihsLGEpe3JldHVybiBhLyhuLmxlbmd0aC0xKX0pLmF0dHIoInN0b3AtY29sb3IiLGZ1bmN0aW9uKGwpe3JldHVybiBsfSksbC5hcHBlbmQoImFuaW1hdGUiKS5hdHRyKCJhdHRyaWJ1dGVOYW1lIiwieDEiKS5hdHRyKCJ2YWx1ZXMiLCIwJTsxMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKSxsLmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MiIpLmF0dHIoInZhbHVlcyIsIjEwMCU7MjAwJSIpLmF0dHIoImR1ciIsIjdzIikuYXR0cigicmVwZWF0Q291bnQiLCJpbmRlZmluaXRlIiksZnVuY3Rpb24obCl7dmFyIG49MTgwL01hdGguUEksYT1mLmkoNTApLm1hcChmdW5jdGlvbigpe3ZhciBsPTE1MCpNYXRoLnJhbmRvbSgpLG49MTUwKk1hdGgucmFuZG9tKCk7cmV0dXJue3Z4OjIqTWF0aC5yYW5kb20oKS0xLHZ5OjIqTWF0aC5yYW5kb20oKS0xLHBhdGg6Zi5pKDEyKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bbCxuXX0pLGNvdW50OjB9fSksZT1mLmsoIiNiYWN0ZXJpYWNvbnRhaW5lciIpLnNlbGVjdEFsbCgiZyIpLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoImciKSx0PWUuYXBwZW5kKCJlbGxpcHNlIikuYXR0cigicngiLDIpLmF0dHIoInJ5IiwzKTtlLmFwcGVuZCgicGF0aCIpLmRhdHVtKGZ1bmN0aW9uKGwpe3JldHVybiBsLnBhdGguc2xpY2UoMCwzKX0pLmF0dHIoImNsYXNzIiwibWlkIiksZS5hcHBlbmQoInBhdGgiKS5kYXR1bShmdW5jdGlvbihsKXtyZXR1cm4gbC5wYXRofSkuYXR0cigiY2xhc3MiLCJ0YWlsIik7dmFyIHU9ZS5zZWxlY3RBbGwoInBhdGgiKTtmdW5jdGlvbiByKGwpe3JldHVybiJ0cmFuc2xhdGUoIitsLnBhdGhbMF0rIilyb3RhdGUoIitNYXRoLmF0YW4yKGwudnksbC52eCkqbisiKSJ9ZnVuY3Rpb24gbyhsKXtyZXR1cm4iTSIrbC5qb2luKCJMIil9Zi5tKGZ1bmN0aW9uKCl7Zm9yKHZhciBsPS0xOysrbDw1MDspe3ZhciBuPWFbbF0sZT1uLnBhdGgsaT1uLnZ4LGM9bi52eSxzPWVbMF1bMF0rPWksZD1lWzBdWzFdKz1jO01hdGguc3FydChpKmkrYypjKSwoczwwfHxzPjE1MCkmJihuLnZ4Kj0tMSksKGQ8MHx8ZD4xNTApJiYobi52eSo9LTEpfXQuYXR0cigidHJhbnNmb3JtIixyKSx1LmF0dHIoImQiLG8pfSl9KCk7dmFyIGE9e21pblZhbHVlOjAsbWF4VmFsdWU6MTAwLGNpcmNsZVRoaWNrbmVzczouMDUsY2lyY2xlRmlsbEdhcDouMDUsY2lyY2xlQ29sb3I6IiMxNzhCQ0EiLHdhdmVIZWlnaHQ6LjA1LHdhdmVDb3VudDoxLHdhdmVSaXNlVGltZToxZTMsd2F2ZUFuaW1hdGVUaW1lOjE4ZTMsd2F2ZVJpc2U6ITAsd2F2ZUhlaWdodFNjYWxpbmc6ITAsd2F2ZUFuaW1hdGU6ITAsd2F2ZUNvbG9yOiIjMTc4QkNBIix3YXZlT2Zmc2V0OjAsdGV4dFZlcnRQb3NpdGlvbjouNSx0ZXh0U2l6ZToxLHZhbHVlQ291bnRVcDohMCxkaXNwbGF5UGVyY2VudDohMCx0ZXh0Q29sb3I6IiMwNDU2ODEiLHdhdmVUZXh0Q29sb3I6IiNBNERCZjgiLGN1c3RvbVBlcmNlbnQ6IiUifTthLnZhbHVlQ291bnRVcD0hMCxhLmNpcmNsZVRoaWNrbmVzcz0uMTUsYS5jaXJjbGVDb2xvcj0iIzgwODAxNSIsYS50ZXh0Q29sb3I9IiM1NTU1MDAiLGEud2F2ZVRleHRDb2xvcj0iI0ZGRkZBQSIsYS53YXZlQ29sb3I9IiNBQUFBMzkiLGEudGV4dFZlcnRQb3NpdGlvbj0uOCxhLndhdmVBbmltYXRlVGltZT0xZTMsYS53YXZlSGVpZ2h0PS4wNSxhLndhdmVBbmltYXRlPSEwLGEud2F2ZVJpc2U9ITEsYS53YXZlSGVpZ2h0U2NhbGluZz0hMSxhLndhdmVPZmZzZXQ9LjI1LGEudGV4dFNpemU9LjUsYS53YXZlQ291bnQ9MyxhLmRpc3BsYXlQZXJjZW50PSEwLGEubWluVmFsdWU9MCxhLm1heFZhbHVlPTYwMCxhLmN1c3RvbVBlcmNlbnQ9IiBubW9sL0wiO3ZhciBlPWcoIiNkM2lucHV0Z2F1Z2UiLDIyMCxhKTtPYmplY3QoaC5hKSgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbihsKXtyZXR1cm4gZS51cGRhdGUoTWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMjUwKX0pO3ZhciB0PXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07dC52YWx1ZUNvdW50VXA9ITAsdC5jaXJjbGVUaGlja25lc3M9LjE1LHQuY2lyY2xlQ29sb3I9IiM4MDM1N2MiLHQudGV4dENvbG9yPSIjNTU1NTAwIix0LndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLHQud2F2ZUNvbG9yPSIjQUFBQTM5Iix0LnRleHRWZXJ0UG9zaXRpb249LjgsdC53YXZlQW5pbWF0ZVRpbWU9MWUzLHQud2F2ZUhlaWdodD0uMDUsdC53YXZlQW5pbWF0ZT0hMCx0LndhdmVSaXNlPSExLHQud2F2ZUhlaWdodFNjYWxpbmc9ITEsdC53YXZlT2Zmc2V0PS4yNSx0LnRleHRTaXplPS41LHQud2F2ZUNvdW50PTMsdC5kaXNwbGF5UGVyY2VudD0hMCx0Lm1pblZhbHVlPTAsdC5tYXhWYWx1ZT02MDAsdC5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgdSxyLG8saSxjLHMsZCxiLHAsbT1nKCIjZDNvdXRnYXVnZSIsNDUsdCk7T2JqZWN0KGguYSkoMTUwMCwxNTAwKS5zdWJzY3JpYmUoZnVuY3Rpb24obCl7cmV0dXJuIG0udXBkYXRlKE1hdGguZmxvb3IoNDAqTWF0aC5yYW5kb20oKSkrNTApfSksbz1mLmsoIiNkM2JpbW9kYWwiKSxpPWYuaigpLmRvbWFpbihbMzAsMTEwXSkucmFuZ2UoWzQwLDI3MF0pLGM9Zi5qKCkuZG9tYWluKFswLC4xXSkucmFuZ2UoWzE1MCwyMF0pLGQ9KHM9Wzc5LDU0LDc0LDYyLDg1LDU1LDg4LDg1LDUxLDg1LDU0LDg0LDc4LDQ3LDgzLDUyLDYyLDg0LDUyLDc5LDUxLDQ3LDc4LDY5LDc0LDgzLDU1LDc2LDc4LDc5LDczLDc3LDY2LDgwLDc0LDUyLDQ4LDgwLDU5LDkwLDgwLDU4LDg0LDU4LDczLDgzLDY0LDUzLDgyLDU5LDc1LDkwLDU0LDgwLDU0LDgzLDcxLDY0LDc3LDgxLDU5LDg0LDQ4LDgyLDYwLDkyLDc4LDc4LDY1LDczLDgyLDU2LDc5LDcxLDYyLDc2LDYwLDc4LDc2LDgzLDc1LDgyLDcwLDY1LDczLDg4LDc2LDgwLDQ4LDg2LDYwLDkwLDUwLDc4LDYzLDcyLDg0LDc1LDUxLDgyLDYyLDg4LDQ5LDgzLDgxLDQ3LDg0LDUyLDg2LDgxLDc1LDU5LDg5LDc5LDU5LDgxLDUwLDg1LDU5LDg3LDUzLDY5LDc3LDU2LDg4LDgxLDQ1LDgyLDU1LDkwLDQ1LDgzLDU2LDg5LDQ2LDgyLDUxLDg2LDUzLDc5LDgxLDYwLDgyLDc3LDc2LDU5LDgwLDQ5LDk2LDUzLDc3LDc3LDY1LDgxLDcxLDcwLDgxLDkzLDUzLDg5LDQ1LDg2LDU4LDc4LDY2LDc2LDYzLDg4LDUyLDkzLDQ5LDU3LDc3LDY4LDgxLDgxLDczLDUwLDg1LDc0LDU1LDc3LDgzLDgzLDUxLDc4LDg0LDQ2LDgzLDU1LDgxLDU3LDc2LDg0LDc3LDgxLDg3LDc3LDUxLDc4LDYwLDgyLDkxLDUzLDc4LDQ2LDc3LDg0LDQ5LDgzLDcxLDgwLDQ5LDc1LDY0LDc2LDUzLDk0LDU1LDc2LDUwLDgyLDU0LDc1LDc4LDc5LDc4LDc4LDcwLDc5LDcwLDU0LDg2LDUwLDkwLDU0LDU0LDc3LDc5LDY0LDc1LDQ3LDg2LDYzLDg1LDgyLDU3LDgyLDY3LDc0LDU0LDgzLDczLDczLDg4LDgwLDcxLDgzLDU2LDc5LDc4LDg0LDU4LDgzLDQzLDYwLDc1LDgxLDQ2LDkwLDQ2LDc0XSkubGVuZ3RoLGI9Zi5lKCkuZG9tYWluKGkuZG9tYWluKCkpLnRocmVzaG9sZHMoNDApKHMpLHA9KHU9ZnVuY3Rpb24obCl7cmV0dXJuIE1hdGguYWJzKGwvPTcpPD0xPy43NSooMS1sKmwpLzc6MH0scj1pLnRpY2tzKDQwKSxmdW5jdGlvbihsKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW24sZi5oKGwsZnVuY3Rpb24obCl7cmV0dXJuIHUobi1sKX0pXX0pfSkocyksby5pbnNlcnQoImciLCIqIikuYXR0cigiZmlsbCIsIiNiYmIiKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKGIpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24obCl7cmV0dXJuIGkobC54MCkrMX0pLmF0dHIoInkiLGZ1bmN0aW9uKGwpe3JldHVybiBjKGwubGVuZ3RoL2QpfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGwpe3JldHVybiBpKGwueDEpLWkobC54MCktMX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24obCl7cmV0dXJuIGMoMCktYyhsLmxlbmd0aC9kKX0pLG8uYXBwZW5kKCJwYXRoIikuZGF0dW0ocCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxLjUpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigiZCIsZi5nKCkuY3VydmUoZi5jKS54KGZ1bmN0aW9uKGwpe3JldHVybiBpKGxbMF0pfSkueShmdW5jdGlvbihsKXtyZXR1cm4gYyhsWzFdKX0pKX0sbH0oKSx2PWUuUGEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siLmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwfS5wcm9qZWN0LXByZXNbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB0fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24geChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDUyLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMSwwLG51bGwsbnVsbCw1LCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMiwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJzdHlsZSIsImNvbG9yOiAjNjIwMDNjOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiTWV0aG90ciJdKSksKGwoKSgpLGUuUmEoNCwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJzdHlsZSIsImNvbG9yOiAgcmVkOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiRXhpdCJdKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIiA6IENsZWFuaW5nIGhvc3BpdGFsIGVmZmx1ZW50IHNpbmNlIDIwMTgiXSkpLChsKCkoKSxlLlJhKDcsMCxudWxsLG51bGwsNDUsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLHAuZCxwLmEpKSxlLlFhKDgsNDkxNTIsbnVsbCwwLG0uYSxbXSxudWxsLG51bGwpLChsKCkoKSxlLlJhKDksMCxudWxsLDAsNCwibWF0LWNhcmQtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlciJdXSxudWxsLG51bGwsbnVsbCxwLmMscC5iKSksZS5RYSgxMCw0OTE1MixudWxsLDAsbS5lLFtdLG51bGwsbnVsbCksKGwoKSgpLGUuUmEoMTEsMCxudWxsLDEsMiwibWF0LWNhcmQtdGl0bGUiLFtbImNsYXNzIiwibWF0LWNhcmQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksZS5RYSgxMiwxNjM4NCxudWxsLDAsbS5oLFtdLG51bGwsbnVsbCksKGwoKSgpLGUuamIoLTEsbnVsbCxbIiBPdXIgUHJvamVjdCAiXSkpLChsKCkoKSxlLlJhKDE0LDAsbnVsbCwwLDM4LCJtYXQtY2FyZC1jb250ZW50IixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkLWNvbnRlbnQgbWF0LWNhcmQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxlLlFhKDE1LDE2Mzg0LG51bGwsMCxtLmQsW10sbnVsbCxudWxsKSwobCgpKCksZS5SYSgxNiwwLG51bGwsbnVsbCwzNiwiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgxNywwLG51bGwsbnVsbCwyMCwiZGl2IixbWyJpZCIsImQzY29udGFpbmVyIl0sWyJzdHlsZSIsIm1hcmdpbjogYXV0bzsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTgsMCxudWxsLG51bGwsMTksIjpzdmc6c3ZnIixbWyJoZWlnaHQiLCI1MDAiXSxbImlkIiwiZDN0YXJnZXQiXSxbInN0eWxlIiwiZGlzcGxheTogYmxvY2s7bWFyZ2luOiBhdXRvOyJdLFsid2lkdGgiLCI2NzQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTksMCxudWxsLG51bGwsMywiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgyMCwwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC01KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiSG9zcGl0YWwgZWZmbHVlbnRzIl0pKSwobCgpKCksZS5SYSgyMiwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNpbnB1dGdhdWdlIl0sWyJzdHlsZSIsImhlaWdodDogMTUwcHg7d2lkdGg6IDE1MHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgyMywwLG51bGwsbnVsbCwwLCI6c3ZnOnBvbHlnb24iLFtbInBvaW50cyIsIjUsMjcwIDI1MCwyNzAgMjUwLDIwMCA0MDAsMjAwIDQwMCwyNzAgNjUwLDI3MCA2NTAsMzIwIDQwMCwzMjAgNDAwLDM1MCAyNTAsMzUwIDI1MCwzMjAgNSwzMjAiXSxbInN0eWxlIiwiZmlsbDogdXJsKCcjYW5pbWF0ZS1ncmFkaWVudCcpO3N0cm9rZTogIzVhMDAzNkZGOyBzdHJva2Utd2lkdGg6IDVweCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgyNCwwLG51bGwsbnVsbCwxLCI6c3ZnOmciLFtbImlkIiwiYmFjdGVyaWFjb250YWluZXIiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyNTAsMjAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDI2LDAsbnVsbCxudWxsLDAsIjpzdmc6bGluZSIsW1sic3R5bGUiLCJmaWxsOiB0cmFuc3BhcmVudDsgc3Ryb2tlOiAjMDAwMDAwZmY7IHN0cm9rZS1kYXNoYXJyYXk6IDIsMjsgc3Ryb2tlLXdpZHRoOiAycHg7Il0sWyJ4MSIsIjI1MCJdLFsieDIiLCIyNTAiXSxbInkxIiwiMjcwIl0sWyJ5MiIsIjMyMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgyNywwLG51bGwsbnVsbCwwLCI6c3ZnOmxpbmUiLFtbInN0eWxlIiwiZmlsbDogdHJhbnNwYXJlbnQ7IHN0cm9rZTogIzAwMDAwMGZmOyBzdHJva2UtZGFzaGFycmF5OiAyLDI7IHN0cm9rZS13aWR0aDogMnB4OyJdLFsieDEiLCI0MDAiXSxbIngyIiwiNDAwIl0sWyJ5MSIsIjI3MCJdLFsieTIiLCIzMjAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMjgsMCxudWxsLG51bGwsMywiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNDcwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMjksMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIldhc3Rld2F0ZXIgb3V0cHV0Il0pKSwobCgpKCksZS5SYSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMzIsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTgwLDIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgzMywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNjMpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKGwoKSgpLGUuUmEoMzUsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTc1KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiQmltb2RhbCBkaXN0cmlidXRpb24iXSkpLChsKCkoKSxlLlJhKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMzgsMCxudWxsLG51bGwsMTQsImRpdiIsW1siY2xhc3MiLCJwcm9qZWN0LXByZXMiXSxbInN0eWxlIiwicGFkZGluZzogMTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIiBPdXIgcHJvamVjdCBpcyBhIGdlbmVyYWwtcHVycG9zZSBiYWN0ZXJpYWwgcGxhdGZvcm0gZm9yIGRydWcgZGVncmFkYXRpb24uIEFzIGEgcHJvb2Ygb2YgY29uY2VwdCwgd2UgaGF2ZSBjaG9zZW4gdG8gZm9jdXMgb24gdGhlIGN5dG90b3hpYyBkcnVncyB1c2VkIGluIHRoZSB0cmVhdG1lbnQgb2YgY2FuY2VyLCBhcyB0aGVpciBjb25jZW50cmF0aW9ucyBhcmUgYWxhcm1pbmdseSBoaWdoIGluIGhvc3BpdGFsIHdhc3Rld2F0ZXIgZWZmbHVlbnRzLiBUaHJvdWdoIGEgdG9vbGtpdCBvZiBicm9hZC0gYW5kIG5hcnJvdy1zcGVjdHJ1bSBlbnp5bWVzLCB3ZSBhaW0gdG8gYWNoaWV2ZSBjbGVhcmFuY2Ugb2YgdGhlIG1haW4gY2hlbW90aGVyYXBldXRpYyBhZ2VudHMsIGxpa2UgbWV0aG90cmV4YXRlLCA1LWZsdW9yb3VyYWNpbCBvciBkb3hvcnViaWNpbi4gIl0pKSwobCgpKCksZS5SYSg0MCwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoNDEsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWycgV2UgYXJlIHRha2luZyBvbiB0aHJlZSBtYWluIGNoYWxsZW5nZXMgOiBlZmZpY2llbnQgZW50cnkgb2YgdGhlc2UgbW9sZWN1bGVzIGluIHRoZSBiYWN0ZXJpYWwgY2VsbCwgdGhyb3VnaCBjaGFubmVscyBhbmQgdHJhbnNwb3J0ZXJzICh1cmFjaWwtbGlrZSB0cmFuc3BvcnRlciB1cmFBLCBjcnlwdGljIGZvbGF0ZS1hbmFsb2d1ZSB0cmFuc3BvcnRlciBhYmdUIC4uLiksIHByb3BlciBkZWdyYWRhdGlvbiB0aHJvdWdoIG1ldGFib2xpemluZyBlbnp5bWVzIChjYXJib3h5cGVwdGlkYXNlIEcyLCBjeXRvY2hyb21lIFA0NTAgXHUyMDI2KSwgYW5kIGxvbmcgdGVybSBvcGVyYXRpb24gb2YgdGhlIGJpb3JlYWN0b3IgdGhvdWdoIGEgYmlzdGFibGUsICJzdGVtLWNlbGwgbGlrZSIsIHBvcHVsYXRpb24gb2YgYmFjdGVyaWEsIGFsbGV2aWF0aW5nIHRoZSBuZWVkIGZvciByZWd1bGFyIHJlc2VlZGluZyB3aXRoIGZyZXNoIGNsb25lcy4gJ10pKSwobCgpKCksZS5SYSg0MywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoNDQsMCxudWxsLG51bGwsMSwiaDMiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWyJQcm9qZWN0IHNpZ25pZmljYW5jZSJdKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIiBQaGFybWFjZXV0aWNhbCBkcnVncyBhcmUgYSBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBzb3VyY2Ugb2YgcG9sbHV0aW9uIDogc2VsZWN0ZWQgdG8gYmUgYmlvbG9naWNhbGx5IGFjdGl2ZSBhdCBsb3cgY29uY2VudHJhdGlvbiAmIGRlc2lnbmVkIHRvIHJlc2lzdCBiaW9kZWdyYWRhdGlvbiwgZHJ1Z3MgY29uc3RpdHV0ZSBhIGNsYXNzIG9mIGhpZ2ggcmVtYW5lbmNlIHBvbGx1dGFudHMgcm91dGluZWx5IGZvdW5kIGluIHRoZSBlbnZpcm9ubWVudCwgZXZlbiBpbiBvdXIgZHJpbmtpbmcgd2F0ZXIuICJdKSksKGwoKSgpLGUuUmEoNDcsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDQ4LDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiIFRob3VnaCBwaHlzaWNhbCAmIGNoZW1pY2FsIHNvbHV0aW9ucyBleGlzdCwgaW4gdGhlIGZvcm0gb2Ygb3pvbmUgYW5kIFVWIHRyZWF0bWVudCwgb3VyIHNvbHV0aW9uIGNhbiBvZmZlciB0aGUgZmxleGliaWxpdHkgYW5kIGVmZmljaWVuY3kgb2YgYSBiaW9yZWFjdG9yLWJhc2VkIGFwcHJvYWNoLiAiXSkpLChsKCkoKSxlLlJhKDUwLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSg1MSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbJyBPdXIgInN0ZW0tY2VsbCBsaWtlIiBhcHByb2FjaCB0byBiYWN0ZXJpYWwgcG9wdWxhdGlvbiBtYWtlcyBpdCBhbiBvcHRpb24gd2l0aCBwb3RlbnRpYWxseSBsb3dlciBvbmdvaW5nIGNvc3RzLCBhbmQgb3VyIGRlZ3JhZGF0aW9uIGVuenltZXMgYWxsb3cgdGFyZ2V0ZWQgZGVncmFkYXRpb24gb2YgcGFydGljdWxhcmx5IHJlc2lsaWVudCBtb2xlY3VsZXMgOiBib3RoIHdlYWtuZXNzZXMgb2YgY29udmVudGlvbmFsIG1ldGhvZHMgb2Ygd2FzdGV3YXRlciB0cmVhdG1lbnQuICddKSldLG51bGwsbnVsbCl9dmFyIHk9ZS5OYSgiZGFzaGJvYXJkIixfLGZ1bmN0aW9uKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMSwiZGFzaGJvYXJkIixbXSxudWxsLG51bGwsbnVsbCx4LHYpKSxlLlFhKDEsMTA5NzcyOCxudWxsLDAsXyxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfSx7fSx7fSxbXSksdz1hKCJqbFptIiksaz1hKCJBeUpxIiksUj1hKCJZbGJRIiksQz1hKCJsTEFQIiksUD1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt9cmV0dXJuIGwucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxsfSgpLE09ZS5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBPKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMzUsImRpdiIsW1siaWQiLCJnY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWyJTaXRlIG1hcHMiXSkpLChsKCkoKSxlLlJhKDMsMCxudWxsLG51bGwsMzIsIm1hdC1hY2NvcmRpb24iLFtbImNsYXNzIiwibWF0LWFjY29yZGlvbiJdLFsibXVsdGkiLCJ0cnVlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoNCwxNjM4NCxudWxsLDAsdy5hLFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKGwoKSgpLGUuUmEoNSwxNjc3NzIxNixudWxsLG51bGwsMTQsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxrLmQsay5hKSksZS5RYSg2LDE3NTMwODgsbnVsbCwxLHcuYyxbWzMsdy5hXSxlLmgsUi5jLGUuUV0sbnVsbCxudWxsKSxlLmhiKDMzNTU0NDMyMCwxLHtfbGF6eUNvbnRlbnQ6MH0pLGUuZ2IoMjU2LG51bGwsdy5hLHZvaWQgMCxbXSksKGwoKSgpLGUuUmEoOSwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIHQ9ITA7cmV0dXJuImNsaWNrIj09PW4mJih0PSExIT09ZS5iYihsLDEwKS5fdG9nZ2xlKCkmJnQpLCJrZXlkb3duIj09PW4mJih0PSExIT09ZS5iYihsLDEwKS5fa2V5ZG93bihhKSYmdCksdH0say5jLGsuYikpLGUuUWEoMTAsMTgwMjI0LG51bGwsMCx3LmUsW3cuYyxlLmssQy5iLGUuaF0sbnVsbCxudWxsKSxlLmViKDExLHtjb2xsYXBzZWRIZWlnaHQ6MCxleHBhbmRlZEhlaWdodDoxfSksZS5lYigxMix7dmFsdWU6MCxwYXJhbXM6MX0pLChsKCkoKSxlLlJhKDEzLDAsbnVsbCwwLDIsIm1hdC1wYW5lbC10aXRsZSIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxlLlFhKDE0LDE2Mzg0LG51bGwsMCx3LmYsW10sbnVsbCxudWxsKSwobCgpKCksZS5qYigtMSxudWxsLFsiIFByb2plY3QgZGVzaWduICJdKSksKGwoKSgpLGUuUmEoMTYsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoMTcsMTYzODQsbnVsbCwwLHcuZCxbXSxudWxsLG51bGwpLChsKCkoKSxlLmpiKC0xLG51bGwsWyIgVGhlb3JldGljYWwgdW5kZXJwaW5uaW5nIG9mIG91ciBwcm9qZWN0ICJdKSksKGwoKSgpLGUuamIoLTEsMSxbIiBBQUFBQUFBQUFBQWEgIl0pKSwobCgpKCksZS5SYSgyMCwxNjc3NzIxNixudWxsLG51bGwsMTUsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxrLmQsay5hKSksZS5RYSgyMSwxNzUzMDg4LG51bGwsMSx3LmMsW1szLHcuYV0sZS5oLFIuYyxlLlFdLG51bGwsbnVsbCksZS5oYigzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSxlLmdiKDI1NixudWxsLHcuYSx2b2lkIDAsW10pLChsKCkoKSxlLlJhKDI0LDAsbnVsbCwwLDksIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIl0sWyJyb2xlIiwiYnV0dG9uIl1dLFtbMSwiaWQiLDBdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtY29udHJvbHMiLDBdLFsxLCJhcmlhLWV4cGFuZGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzQwLCJAZXhwYW5zaW9uSGVpZ2h0IiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKGwsbixhKXt2YXIgdD0hMDtyZXR1cm4iY2xpY2siPT09biYmKHQ9ITEhPT1lLmJiKGwsMjUpLl90b2dnbGUoKSYmdCksImtleWRvd24iPT09biYmKHQ9ITEhPT1lLmJiKGwsMjUpLl9rZXlkb3duKGEpJiZ0KSx0fSxrLmMsay5iKSksZS5RYSgyNSwxODAyMjQsbnVsbCwwLHcuZSxbdy5jLGUuayxDLmIsZS5oXSxudWxsLG51bGwpLGUuZWIoMjYse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxlLmViKDI3LHt2YWx1ZTowLHBhcmFtczoxfSksKGwoKSgpLGUuUmEoMjgsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoMjksMTYzODQsbnVsbCwwLHcuZixbXSxudWxsLG51bGwpLChsKCkoKSxlLmpiKC0xLG51bGwsWyIgTWF0ZXJpYWwgYW5kIG1ldGhvZCAiXSkpLChsKCkoKSxlLlJhKDMxLDAsbnVsbCwxLDIsIm1hdC1wYW5lbC1kZXNjcmlwdGlvbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxlLlFhKDMyLDE2Mzg0LG51bGwsMCx3LmQsW10sbnVsbCxudWxsKSwobCgpKCksZS5qYigtMSxudWxsLFsiIE91ciBleHBlcmltZW50YWwgZGVzaWducyAmIHJlc3VsdHMgIl0pKSwobCgpKCksZS5SYSgzNCwwLG51bGwsMSwxLCJwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiSSdtIHZpc2libGUgYmVjYXVzZSBJIGFtIG9wZW4iXSkpXSxmdW5jdGlvbihsLG4pe2wobiw0LDAsInRydWUiKX0sZnVuY3Rpb24obCxuKXtsKG4sNSwwLGUuYmIobiw2KS5leHBhbmRlZCxlLmJiKG4sNikuX2hhc1NwYWNpbmcoKSksbChuLDksMCxlLmJiKG4sMTApLnBhbmVsLl9oZWFkZXJJZCxlLmJiKG4sMTApLnBhbmVsLmRpc2FibGVkPy0xOjAsZS5iYihuLDEwKS5fZ2V0UGFuZWxJZCgpLGUuYmIobiwxMCkuX2lzRXhwYW5kZWQoKSxlLmJiKG4sMTApLnBhbmVsLmRpc2FibGVkLGUuYmIobiwxMCkuX2lzRXhwYW5kZWQoKSxsKG4sMTIsMCxlLmJiKG4sMTApLl9nZXRFeHBhbmRlZFN0YXRlKCksbChuLDExLDAsZS5iYihuLDEwKS5jb2xsYXBzZWRIZWlnaHQsZS5iYihuLDEwKS5leHBhbmRlZEhlaWdodCkpKSxsKG4sMjAsMCxlLmJiKG4sMjEpLmV4cGFuZGVkLGUuYmIobiwyMSkuX2hhc1NwYWNpbmcoKSksbChuLDI0LDAsZS5iYihuLDI1KS5wYW5lbC5faGVhZGVySWQsZS5iYihuLDI1KS5wYW5lbC5kaXNhYmxlZD8tMTowLGUuYmIobiwyNSkuX2dldFBhbmVsSWQoKSxlLmJiKG4sMjUpLl9pc0V4cGFuZGVkKCksZS5iYihuLDI1KS5wYW5lbC5kaXNhYmxlZCxlLmJiKG4sMjUpLl9pc0V4cGFuZGVkKCksbChuLDI3LDAsZS5iYihuLDI1KS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLGwobiwyNiwwLGUuYmIobiwyNSkuY29sbGFwc2VkSGVpZ2h0LGUuYmIobiwyNSkuZXhwYW5kZWRIZWlnaHQpKSl9KX12YXIgaj1lLk5hKCJhcHAtc2l0ZW1hcCIsUCxmdW5jdGlvbihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1zaXRlbWFwIixbXSxudWxsLG51bGwsbnVsbCxPLE0pKSxlLlFhKDEsMTE0Njg4LG51bGwsMCxQLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKGwsbil7bChuLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksQT0xLEk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obCxuLGEsZSx0LHUscixvLGkpe3RoaXMuc2hvcnRoYW5kPWwsdGhpcy5hdXRob3JzPW4sdGhpcy50aXRsZT1hLHRoaXMuZG9pPWUsdGhpcy5qb3VybmFsPXQsdGhpcy51cmw9dSx0aGlzLnB1YkRldGFpbHM9cix0aGlzLnRhZ3M9byx0aGlzLmFic3RyYWN0PWksdGhpcy5pbmRleD1BLEErK319KCksTD1bbmV3IEkoIlRlc3QyMDE4IiwiQW5vbnltb3VzIiwiVGVzdGluZyA6IGEgcmVmZXJlbmNlIG1hbmFnZXIiLCIyOTM5IiwiSi4gRXVyLiBCZWhhdmlvcmFsIEV4YW1wbGUiLCJodHRwOi8vam91cm5hbC5leGFtcGxlLmNvbSIsIlZvbCAyLjMgcDMiLFsiZXhhbXBsZSIsImFydGljbGUiXSwiVGhlIGluZHVjaWJpbGl0eSBvZiBTT1MgcmVzcG9uc2VzIGJ5IDUtZmx1b3JvdXJhY2lsICg1LUZVKSwgd2hpY2ggaGFzIGJlZW4gdXNlZCBhcyBhbiBhbnRpdHVtb3IgZHJ1Zywgd2FzIHN0dWRpZWQgaW4gRXNjaGVyaWNoaWEgY29saSBjZWxscyB3aGljaCBoYXZlIGRpZmZlcmVudCBETkEgcmVwYWlyIGNhcGFjaXRpZXMgZm9yIFVWIGxlc2lvbnMuIEV4cHJlc3Npb24gb2YgdGhlIHVtdUMgZ2VuZSB3YXMgYXBwYXJlbnRseSBpbmR1Y2VkIGJ5IDUtRlUgaW4gdGhlIHdpbGQtdHlwZSBhbmQgdXZyQSBzdHJhaW5zIGJ1dCBub3QgaW4gbGV4QSBhbmQgcmVjQSBzdHJhaW5zLiBUaGUgaW5kdWNpYmlsaXR5IG9mIHRoZSB1bXVDIGdlbmUgYnkgNS1GVSwgdGhlIG1ldGFib2xpdGUgb2Ygd2hpY2ggaW5oaWJpdHMgdGh5bWlkeWxhdGUgc3ludGhldGFzZSwgd2FzIGFib2xpc2hlZCBpbiBjdWx0dXJlcyBjb250YWluaW5nIGRlb3h5dGh5bWlkaW5lIG1vbm9waG9zcGhhdGUgd2hpY2ggaXMgY29udmVydGVkIGZyb20gZGVveHl1cmlkaW5lIG1vbm9waG9zcGhhdGUgYnkgdGh5bWlkeWxhdGUgc3ludGhldGFzZS4gVGhlc2UgcmVzdWx0cyBzdWdnZXN0IHRoYXQgNS1GVSBtYXkgZXhlcnQgaXRzIFNPUyBpbmR1Y2liaWxpdHkgYnkgaW5oaWJpdGluZyB0aHltaWR5bGF0ZSBzeW50aGV0YXNlIGFuZCB0aGVuIGRpc3R1cmJpbmcgRE5BIG1ldGFib2xpc20gYnV0IG5vdCBieSBpbmNvcnBvcmF0aW5nIDUtRlUgcmVzaWR1ZXMgaW50byBSTkEuIEZ1cnRoZXIsIDUtRlUgd2Vha2x5IGluZHVjZWQgbXV0YXRpb25zIGluIEUuIGNvbGkuIFx4YTkgMTk4Ny4iKSxuZXcgSSgiRXhhbXBsZTIwMTgiLCJBbGZyZWQgRXhhbXBsZSIsIkV4YW1wbGUgb2YgcGFwZXIgOiB0aGlzIG9uZSBpcyBhIGdvb2QgZXhhbXBsZSBvZiBwYXBlciIsIjQ1MiIsIkouIEV1ci4gQ2hlbWljYWwgRXhhbXBsZSIsImh0dHA6Ly9qb3VybmFsLmV4YW1wbGUuZXUiLCJWb2wgNDUgcDEyIixbImV4YW1wbGVKb3VybmFsIiwiYXJ0aWNsZSJdLCJEdXJpbmcgcHJvdGVpbiBzeW50aGVzaXMsIHJpYm9zb21lcyBlbmNvdW50ZXIgbWFueSByb2FkYmxvY2tzLCB0aGUgb3V0Y29tZXMgb2Ygd2hpY2ggYXJlIGxhcmdlbHkgZGV0ZXJtaW5lZCBieSBzdWJzdHJhdGUgYXZhaWxhYmlsaXR5ICwgYW1pbm8gYWNpZCBmZWF0dXJlcyBhbmQgcmVhY3Rpb24ga2luZXRpY3MuIFByb2xvbmdlZCByaWJvc29tZSBzdGFsbGluZyBpcyBsaWtlbHkgdG8gYmUgcmVzb2x2ZWQgYnkgcmlib3NvbWUgcmVzY3VlIG9yIHF1YWxpdHkgY29udHJvbCBwYXRod2F5cywgd2hlcmVhcyBzaG9ydGVyIHN0YWxsaW5nIGlzIGxpa2VseSB0byBiZSByZXNvbHZlZCBieSBvbmdvaW5nIHByb2R1Y3RpdmUgdHJhbnNsYXRpb24uIEhvdyByaWJvc29tZSBmdW5jdGlvbiBpcyBhZmZlY3RlZCBieSBzdWNoIGhpbmRyYW5jZXMgY2FuIHRoZXJlZm9yZSBoYXZlIGEgcHJvZm91bmQgaW1wYWN0IG9uIHRoZSB0cmFuc2xhdGlvbmFsIG91dHB1dCAoeWllbGQpIG9mIGEgcGFydGljdWxhciBtUk5BLiBJbiB0aGlzIFJldmlldyAsIHdlIGZvY3VzIG9uIHRoZXNlIHJvYWRibG9ja3MgYW5kIHRoZSByZXN1bXB0aW9uIG9mIG5vcm1hbCB0cmFuc2xhdGlvbiBlbG9uZ2F0aW9uIHJhdGhlciB0aGFuIG9uIGFsdGVybmF0aXZlIGZhdGVzIHdoZXJlaW4gdGhlIHN0YWxsZWQgcmlib3NvbWUgdHJpZ2dlcnMgZGVncmFkYXRpb24gb2YgdGhlIG1STkEgYW5kIHRoZSBpbmNvbXBsZXRlIHByb3RlaW4gcHJvZHVjdC4gV2UgZGlzY3VzcyB0aGUgZnVuZGFtZW50YWwgc3RhZ2VzIG9mIHRoZSB0cmFuc2xhdGlvbiBwcm9jZXNzIGluIGV1a2FyeW90ZXMsIGZyb20gZWxvbmdhdGlvbiB0aHJvdWdoIHJpYm9zb21lIHJlY3ljbGluZywgd2l0aCBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byByZWNlbnQgZGlzY292ZXJpZXMgb2YgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGdlbmV0aWMgY29kZSBhbmQgcmVndWxhdG9yeSBlbGVtZW50cyB0aGF0IGNvbnRyb2wgZ2VuZSBleHByZXNzaW9uLCBpbmNsdWRpbmcgcmlib3NvbWUgc3RhbGxpbmcgZHVyaW5nIGVsb25nYXRpb24sIHRoZSByb2xlIG9mIG1STkEgY29udGV4dCBpbiB0cmFuc2xhdGlvbiB0ZXJtaW5hdGlvbiBhbmQgbWVjaGFuaXNtcyBvZiByaWJvc29tZSByZXNjdWUgdGhhdCByZXNlbWJsZSByZWN5Y2xpbmcuIildLFo9bmV3IEkoIkVycm9yMjAxOCIsIkUuIFJyb3IiLCJUaGlzIHJlZmVyZW5jZSA6IG5vdCBmb3VuZCIsIjQwNCIsIkpvdXJuYWwgb2YgRXJyb3IgTm90IEZvdW5kIiwiaHR0cDovL2Vycm9yLjQwNCIsIlB1YmxpY2F0aW9uIG5vdCBmb3VuZCIsWyJwdWJsaWNhdGlvbk5vdEZvdW5kIl0sIkVycm9yIGFic3RyYWN0Li4uIiksUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt0aGlzLnJlZmxpc3Q9TCx0aGlzLmVycnJlZj1afXJldHVybiBsLnByb3RvdHlwZS5nZXRSZWZGcm9tU2hvcnRoYW5kPWZ1bmN0aW9uKGwpe3ZhciBuPXRoaXMucmVmbGlzdC5maW5kSW5kZXgoZnVuY3Rpb24obil7cmV0dXJuIG4uc2hvcnRoYW5kPT1sfSk7cmV0dXJuIHZvaWQgMD09bj9bLTEsdGhpcy5lcnJyZWZdOltuKzEsdGhpcy5yZWZsaXN0W25dXX0sbC5uZ0luamVjdGFibGVEZWY9ZS5VKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsfSx0b2tlbjpsLHByb3ZpZGVkSW46InJvb3QifSksbH0oKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChsLG4pe3RoaXMuYm90dG9tU2hlZXQ9bix0aGlzLnRlc3RTdHJpbmc9IkEiLHRoaXMuaW5kZXg9MCx0aGlzLnJlZm1hbnNlcnZpY2U9bH1yZXR1cm4gbC5wcm90b3R5cGUub3BlblJlZkJvdHRvbVNoZWV0PWZ1bmN0aW9uKCl7dGhpcy5yZWZzaGVldHJlZj10aGlzLmJvdHRvbVNoZWV0Lm9wZW4oUSksdGhpcy5yZWZzaGVldHJlZi5pbnN0YW5jZS5yZWY9dGhpcy5yZWZ9LGwucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5yZWZtYW5zZXJ2aWNlLmdldFJlZkZyb21TaG9ydGhhbmQodGhpcy5zaG9ydGhhbmQpO3RoaXMuaW5kZXg9bFswXSx0aGlzLnJlZj1sWzFdfSxsfSgpLFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGwpe3RoaXMuYm90dG9tU2hlZXRSZWY9bCx0aGlzLnJlZj1afXJldHVybiBsLnByb3RvdHlwZS5vcGVuTGluaz1mdW5jdGlvbihsKXt0aGlzLmJvdHRvbVNoZWV0UmVmLmRpc21pc3MoKSxsLnByZXZlbnREZWZhdWx0KCl9LGx9KCksVD1hKCJCZ1dLIiksRD1hKCIvZE82IiksRj1hKCJkV1pnIiksTj1hKCJXZjRwIiksVT1hKCJidWp0IiksQj1hKCJVb2RIIikscT1hKCJ3RncxIiksej1hKCJNcitYIiksSD1hKCJTTXNtIiksVj1hKCJ0UlRXIiksSz1hKCJzZVAzIiksVz1hKCJGenFjIiksRz1hKCJnSWNZIiksWT1hKCJaWUNpIiksJD1lLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gSihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDIsInN1cCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMSwwLG51bGwsbnVsbCwxLCJhIixbWyJzdHlsZSIsImNvbG9yOiBibHVlO2N1cnNvcjogcG9pbnRlcjsiXV0sbnVsbCxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKGwsbixhKXt2YXIgZT0hMDtyZXR1cm4iY2xpY2siPT09biYmKGU9ITEhPT1sLmNvbXBvbmVudC5vcGVuUmVmQm90dG9tU2hlZXQoKSYmZSksZX0sbnVsbCxudWxsKSksKGwoKSgpLGUuamIoMixudWxsLFsiWyIsIl0iXSkpXSxudWxsLGZ1bmN0aW9uKGwsbil7bChuLDIsMCxuLmNvbXBvbmVudC5pbmRleCl9KX12YXIgWD1lLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBsbChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDUsIm1hdC1jaGlwIixbWyJjbGFzcyIsIm1hdC1jaGlwIl0sWyJyb2xlIiwib3B0aW9uIl1dLFtbMSwidGFiaW5kZXgiLDBdLFsyLCJtYXQtY2hpcC1zZWxlY3RlZCIsbnVsbF0sWzIsIm1hdC1jaGlwLXdpdGgtYXZhdGFyIixudWxsXSxbMiwibWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uIixudWxsXSxbMiwibWF0LWNoaXAtZGlzYWJsZWQiLG51bGxdLFsxLCJkaXNhYmxlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsxLCJhcmlhLXNlbGVjdGVkIiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24obCxuLGEpe3ZhciB0PSEwO3JldHVybiJjbGljayI9PT1uJiYodD0hMSE9PWUuYmIobCwxKS5faGFuZGxlQ2xpY2soYSkmJnQpLCJrZXlkb3duIj09PW4mJih0PSExIT09ZS5iYihsLDEpLl9oYW5kbGVLZXlkb3duKGEpJiZ0KSwiZm9jdXMiPT09biYmKHQ9ITEhPT1lLmJiKGwsMSkuZm9jdXMoKSYmdCksImJsdXIiPT09biYmKHQ9ITEhPT1lLmJiKGwsMSkuX2JsdXIoKSYmdCksdH0sbnVsbCxudWxsKSksZS5RYSgxLDE0NzQ1NixbWzEsNF1dLDMsRC5iLFtlLmssZS56LEYuYSxbMixOLmtdXSxudWxsLG51bGwpLGUuaGIoMzM1NTQ0MzIwLDIse2F2YXRhcjowfSksZS5oYigzMzU1NDQzMjAsMyx7dHJhaWxpbmdJY29uOjB9KSxlLmhiKDMzNTU0NDMyMCw0LHtyZW1vdmVJY29uOjB9KSwobCgpKCksZS5qYig1LG51bGwsWyIiLCIiXSkpXSxudWxsLGZ1bmN0aW9uKGwsbil7bChuLDAsMCxlLmJiKG4sMSkuZGlzYWJsZWQ/bnVsbDotMSxlLmJiKG4sMSkuc2VsZWN0ZWQsZS5iYihuLDEpLmF2YXRhcixlLmJiKG4sMSkudHJhaWxpbmdJY29ufHxlLmJiKG4sMSkucmVtb3ZlSWNvbixlLmJiKG4sMSkuZGlzYWJsZWQsZS5iYihuLDEpLmRpc2FibGVkfHxudWxsLGUuYmIobiwxKS5kaXNhYmxlZC50b1N0cmluZygpLGUuYmIobiwxKS5hcmlhU2VsZWN0ZWQpLGwobiw1LDAsbi5jb250ZXh0LiRpbXBsaWNpdCl9KX1mdW5jdGlvbiBubChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDcsInAiLFtbImNsYXNzIiwibWF0LXN1YmhlYWRpbmctMiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigxLG51bGwsWyIiLCIgIl0pKSwobCgpKCksZS5SYSgyLDAsbnVsbCxudWxsLDUsInNwYW4iLFtbInN0eWxlIiwicG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiA1cHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDMsMCxudWxsLG51bGwsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIGU9ITA7cmV0dXJuImNsaWNrIj09PW4mJihlPSExIT09bC5jb21wb25lbnQuYm90dG9tU2hlZXRSZWYuZGlzbWlzcygpJiZlKSxlfSxVLmQsVS5iKSksZS5RYSg0LDE4MDIyNCxudWxsLDAsQi5iLFtlLmssRi5hLEMuYixbMixxLmFdXSxudWxsLG51bGwpLChsKCkoKSxlLlJhKDUsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImFyaWEtbGFiZWwiLCJDbG9zZSByZWZlcmVuY2Ugc2hlZXQiXSxbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsei5iLHouYSkpLGUuUWEoNiw2Mzg5NzYsbnVsbCwwLEguYSxbZS5rLEguYyxbOCxudWxsXV0sbnVsbCxudWxsKSwobCgpKCksZS5qYigtMSwwLFsiY2xvc2UiXSkpLChsKCkoKSxlLlJhKDgsMCxudWxsLG51bGwsMSwicCIsW1siY2xhc3MiLCJtYXQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoOSxudWxsLFsiICIsIiJdKSksKGwoKSgpLGUuUmEoMTAsMCxudWxsLG51bGwsMSwicCIsW1siY2xhc3MiLCJtYXQtc3ViaGVhZGluZy0xIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKDExLG51bGwsWyIiLCIiXSkpLChsKCkoKSxlLlJhKDEyLDAsbnVsbCxudWxsLDEsInAiLFtbImNsYXNzIiwibWF0LWNhcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoMTMsbnVsbCxbIiIsIiJdKSksKGwoKSgpLGUuUmEoMTQsMCxudWxsLG51bGwsMSwicCIsW1siY2xhc3MiLCJtYXQtY2FwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigxNSxudWxsLFsiIiwiIFx1MjAxNCBkb2k6IiwiIl0pKSwobCgpKCksZS5SYSgxNiwwLG51bGwsbnVsbCw2LCJtYXQtY2hpcC1saXN0IixbWyJjbGFzcyIsIm1hdC1jaGlwLWxpc3QiXV0sW1sxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtZGVzY3JpYmVkYnkiLDBdLFsxLCJhcmlhLXJlcXVpcmVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzEsImFyaWEtaW52YWxpZCIsMF0sWzEsImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwwXSxbMSwicm9sZSIsMF0sWzIsIm1hdC1jaGlwLWxpc3QtZGlzYWJsZWQiLG51bGxdLFsyLCJtYXQtY2hpcC1saXN0LWludmFsaWQiLG51bGxdLFsyLCJtYXQtY2hpcC1saXN0LXJlcXVpcmVkIixudWxsXSxbMSwiYXJpYS1vcmllbnRhdGlvbiIsMF0sWzgsImlkIiwwXV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24obCxuLGEpe3ZhciB0PSEwO3JldHVybiJmb2N1cyI9PT1uJiYodD0hMSE9PWUuYmIobCwxOCkuZm9jdXMoKSYmdCksImJsdXIiPT09biYmKHQ9ITEhPT1lLmJiKGwsMTgpLl9ibHVyKCkmJnQpLCJrZXlkb3duIj09PW4mJih0PSExIT09ZS5iYihsLDE4KS5fa2V5ZG93bihhKSYmdCksdH0sVi5iLFYuYSkpLGUuZ2IoNjE0NCxudWxsLEsuYyxudWxsLFtELmNdKSxlLlFhKDE4LDE1NTY0ODAsbnVsbCwxLEQuYyxbZS5rLGUuaCxbMixXLmJdLFsyLEcuY10sWzIsRy5hXSxOLmQsWzgsbnVsbF1dLG51bGwsbnVsbCksZS5oYig2MDM5Nzk3NzYsMSx7Y2hpcHM6MX0pLChsKCkoKSxlLmpiKC0xLDAsWyIgVGFnczogIl0pKSwobCgpKCksZS5JYSgxNjc3NzIxNixudWxsLDAsMSxudWxsLGxsKSksZS5RYSgyMiwyNzg1MjgsbnVsbCwwLHUuaixbZS5RLGUuTixlLnNdLHtuZ0Zvck9mOlswLCJuZ0Zvck9mIl19LG51bGwpLChsKCkoKSxlLlJhKDIzLDAsbnVsbCxudWxsLDE0LCJwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgyNCwwLG51bGwsbnVsbCw1LCJhIixbWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdXSxbWzgsImhyZWYiLDRdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImRpc2FibGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIHQ9ITA7cmV0dXJuImNsaWNrIj09PW4mJih0PSExIT09ZS5iYihsLDI1KS5faGFsdERpc2FibGVkRXZlbnRzKGEpJiZ0KSx0fSxVLmMsVS5hKSksZS5RYSgyNSwxODAyMjQsbnVsbCwwLEIuYSxbRi5hLEMuYixlLmssWzIscS5hXV0sbnVsbCxudWxsKSwobCgpKCksZS5SYSgyNiwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx6LmIsei5hKSksZS5RYSgyNyw2Mzg5NzYsbnVsbCwwLEguYSxbZS5rLEguYyxbOCxudWxsXV0sbnVsbCxudWxsKSwobCgpKCksZS5qYigtMSwwLFsib3Blbl9pbl9uZXciXSkpLChsKCkoKSxlLmpiKC0xLDAsWyIgT3BlbiBhcnRpY2xlIHBhZ2UiXSkpLChsKCkoKSxlLlJhKDMwLDAsbnVsbCxudWxsLDcsInNwYW4iLFtbInN0eWxlIiwicG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxNXB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgzMSwwLG51bGwsbnVsbCw2LCJhIixbWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsicm91dGVyTGluayIsInJlZmVyZW5jZXMiXV0sW1sxLCJ0YWJpbmRleCIsMF0sWzEsImRpc2FibGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obCxuLGEpe3ZhciB0PSEwO3JldHVybiJjbGljayI9PT1uJiYodD0hMSE9PWUuYmIobCwzMikuX2hhbHREaXNhYmxlZEV2ZW50cyhhKSYmdCksImNsaWNrIj09PW4mJih0PSExIT09ZS5iYihsLDMzKS5vbkNsaWNrKGEuYnV0dG9uLGEuY3RybEtleSxhLm1ldGFLZXksYS5zaGlmdEtleSkmJnQpLHR9LFUuYyxVLmEpKSxlLlFhKDMyLDE4MDIyNCxudWxsLDAsQi5hLFtGLmEsQy5iLGUuayxbMixxLmFdXSxudWxsLG51bGwpLGUuUWEoMzMsNjcxNzQ0LG51bGwsMCxZLm0sW1kubCxZLmEsdS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSwobCgpKCksZS5SYSgzNCwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx6LmIsei5hKSksZS5RYSgzNSw2Mzg5NzYsbnVsbCwwLEguYSxbZS5rLEguYyxbOCxudWxsXV0sbnVsbCxudWxsKSwobCgpKCksZS5qYigtMSwwLFsiYm9vayJdKSksKGwoKSgpLGUuamIoLTEsMCxbIiBHbyB0byByZWZlcmVuY2VzIGxpc3QiXSkpXSxmdW5jdGlvbihsLG4pe3ZhciBhPW4uY29tcG9uZW50O2wobiw2LDApLGwobiwxOCwwKSxsKG4sMjIsMCxhLnJlZi50YWdzKSxsKG4sMjcsMCksbChuLDMzLDAsInJlZmVyZW5jZXMiKSxsKG4sMzUsMCl9LGZ1bmN0aW9uKGwsbil7dmFyIGE9bi5jb21wb25lbnQ7bChuLDEsMCxhLnJlZi5qb3VybmFsKSxsKG4sMywwLGUuYmIobiw0KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09ZS5iYihuLDQpLl9hbmltYXRpb25Nb2RlKSxsKG4sNSwwLGUuYmIobiw2KS5pbmxpbmUpLGwobiw5LDAsYS5yZWYudGl0bGUpLGwobiwxMSwwLGEucmVmLmF1dGhvcnMpLGwobiwxMywwLGEucmVmLmFic3RyYWN0KSxsKG4sMTUsMCxhLnJlZi5wdWJEZXRhaWxzLGEucmVmLmRvaSksbChuLDE2LDEsW2UuYmIobiwxOCkuX3RhYkluZGV4LGUuYmIobiwxOCkuX2FyaWFEZXNjcmliZWRieXx8bnVsbCxlLmJiKG4sMTgpLnJlcXVpcmVkLnRvU3RyaW5nKCksZS5iYihuLDE4KS5kaXNhYmxlZC50b1N0cmluZygpLGUuYmIobiwxOCkuZXJyb3JTdGF0ZSxlLmJiKG4sMTgpLm11bHRpcGxlLGUuYmIobiwxOCkucm9sZSxlLmJiKG4sMTgpLmRpc2FibGVkLGUuYmIobiwxOCkuZXJyb3JTdGF0ZSxlLmJiKG4sMTgpLnJlcXVpcmVkLGUuYmIobiwxOCkuYXJpYU9yaWVudGF0aW9uLGUuYmIobiwxOCkuX3VpZF0pLGwobiwyNCwwLGUuVGEoMSwiIixhLnJlZi51cmwsIiIpLGUuYmIobiwyNSkuZGlzYWJsZWQ/LTE6ZS5iYihuLDI1KS50YWJJbmRleHx8MCxlLmJiKG4sMjUpLmRpc2FibGVkfHxudWxsLGUuYmIobiwyNSkuZGlzYWJsZWQudG9TdHJpbmcoKSwiTm9vcEFuaW1hdGlvbnMiPT09ZS5iYihuLDI1KS5fYW5pbWF0aW9uTW9kZSksbChuLDI2LDAsZS5iYihuLDI3KS5pbmxpbmUpLGwobiwzMSwwLGUuYmIobiwzMikuZGlzYWJsZWQ/LTE6ZS5iYihuLDMyKS50YWJJbmRleHx8MCxlLmJiKG4sMzIpLmRpc2FibGVkfHxudWxsLGUuYmIobiwzMikuZGlzYWJsZWQudG9TdHJpbmcoKSwiTm9vcEFuaW1hdGlvbnMiPT09ZS5iYihuLDMyKS5fYW5pbWF0aW9uTW9kZSxlLmJiKG4sMzMpLnRhcmdldCxlLmJiKG4sMzMpLmhyZWYpLGwobiwzNCwwLGUuYmIobiwzNSkuaW5saW5lKX0pfXZhciBhbD1lLk5hKCJyZWZlcmVuY2Utc2hlZXQiLFEsZnVuY3Rpb24obCl7cmV0dXJuIGUubGIoMCxbKGwoKSgpLGUuUmEoMCwwLG51bGwsbnVsbCwxLCJyZWZlcmVuY2Utc2hlZXQiLFtdLG51bGwsbnVsbCxudWxsLG5sLFgpKSxlLlFhKDEsNDkxNTIsbnVsbCwwLFEsW1QuZV0sbnVsbCxudWxsKV0sbnVsbCxudWxsKX0se30se30sW10pLGVsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksdGw9ZS5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIHVsKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMTAsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiUHJvamVjdCBEZXNpZ24iXSkpLChsKCkoKSxlLlJhKDMsMCxudWxsLG51bGwsNywibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwscC5kLHAuYSkpLGUuUWEoNCw0OTE1MixudWxsLDAsbS5hLFtdLG51bGwsbnVsbCksKGwoKSgpLGUuamIoLTEsMCxbIiBUZXN0Il0pKSwobCgpKCksZS5SYSg2LDAsbnVsbCwwLDEsInJlZmVyZW5jZS1ib3giLFtbInNob3J0aGFuZCIsIlRlc3QyMDE4Il1dLG51bGwsbnVsbCxudWxsLEosJCkpLGUuUWEoNywxMTQ2ODgsbnVsbCwwLEUsW1MsVC5hXSx7c2hvcnRoYW5kOlswLCJzaG9ydGhhbmQiXX0sbnVsbCksKGwoKSgpLGUuamIoLTEsMCxbIi4gQSBuZXcgdGVzdCAiXSkpLChsKCkoKSxlLlJhKDksMCxudWxsLDAsMSwicmVmZXJlbmNlLWJveCIsW1sic2hvcnRoYW5kIiwiRXhhbXBsZTIwMTgiXV0sbnVsbCxudWxsLG51bGwsSiwkKSksZS5RYSgxMCwxMTQ2ODgsbnVsbCwwLEUsW1MsVC5hXSx7c2hvcnRoYW5kOlswLCJzaG9ydGhhbmQiXX0sbnVsbCldLGZ1bmN0aW9uKGwsbil7bChuLDcsMCwiVGVzdDIwMTgiKSxsKG4sMTAsMCwiRXhhbXBsZTIwMTgiKX0sbnVsbCl9dmFyIHJsPWUuTmEoImFwcC1wcm9qZWN0LWRldGFpbHMiLGVsLGZ1bmN0aW9uKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMSwiYXBwLXByb2plY3QtZGV0YWlscyIsW10sbnVsbCxudWxsLG51bGwsdWwsdGwpKSxlLlFhKDEsMTE0Njg4LG51bGwsMCxlbCxbXSxudWxsLG51bGwpXSxmdW5jdGlvbihsLG4pe2wobiwxLDApfSxudWxsKX0se30se30sW10pLG9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksaWw9ZS5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGNsKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWyJTb2Z0d2FyZSJdKSksKGwoKSgpLGUuUmEoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxwLmQscC5hKSksZS5RYSg0LDQ5MTUyLG51bGwsMCxtLmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgc2w9ZS5OYSgiYXBwLWNvbXB1dGluZy1zZWN0aW9uIixvbCxmdW5jdGlvbihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1jb21wdXRpbmctc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwsY2wsaWwpKSxlLlFhKDEsMTE0Njg4LG51bGwsMCxvbCxbXSxudWxsLG51bGwpXSxmdW5jdGlvbihsLG4pe2wobiwxLDApfSxudWxsKX0se30se30sW10pLGRsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksYmw9ZS5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIHBsKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWyJNb2RlbGluZyJdKSksKGwoKSgpLGUuUmEoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxwLmQscC5hKSksZS5RYSg0LDQ5MTUyLG51bGwsMCxtLmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgbWw9ZS5OYSgiYXBwLW1vZGVsaW5nIixkbCxmdW5jdGlvbihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1tb2RlbGluZyIsW10sbnVsbCxudWxsLG51bGwscGwsYmwpKSxlLlFhKDEsMTE0Njg4LG51bGwsMCxkbCxbXSxudWxsLG51bGwpXSxmdW5jdGlvbihsLG4pe2wobiwxLDApfSxudWxsKX0se30se30sW10pLGhsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksZmw9ZS5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGdsKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWyJIdW1hbiBQcmFjdGljZXMiXSkpLChsKCkoKSxlLlJhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwscC5kLHAuYSkpLGUuUWEoNCw0OTE1MixudWxsLDAsbS5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIF9sPWUuTmEoImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixobCxmdW5jdGlvbihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxnbCxmbCkpLGUuUWEoMSwxMTQ2ODgsbnVsbCwwLGhsLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKGwsbil7bChuLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksdmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7fXJldHVybiBsLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sbH0oKSx4bD1lLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24geWwobCl7cmV0dXJuIGUubGIoMCxbKGwoKSgpLGUuUmEoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIkNvbGxhYm9yYXRpb25zIl0pKSwobCgpKCksZS5SYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLHAuZCxwLmEpKSxlLlFhKDQsNDkxNTIsbnVsbCwwLG0uYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciB3bD1lLk5hKCJhcHAtY29sbGFib3JhdGlvbnMiLHZsLGZ1bmN0aW9uKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMSwiYXBwLWNvbGxhYm9yYXRpb25zIixbXSxudWxsLG51bGwsbnVsbCx5bCx4bCkpLGUuUWEoMSwxMTQ2ODgsbnVsbCwwLHZsLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKGwsbil7bChuLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksa2w9YSgiQkhuZCIpLFJsPWEoInk0cVMiKSxDbD1hKCJwSW0zIiksUGw9YSgiZEpyTSIpLE1sPWEoImI3MTYiKSxPbD1hKCIvVllLIiksamw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGwpe3RoaXMuZGF0YXNvdXJjZV9yZWZlcmVuY2VzPW5ldyBrbC5sKEwpLHRoaXMuZGlzcGxheWVkQ29sdW1ucz1bImluZGV4Iiwic2hvcnRoYW5kIl19cmV0dXJuIGwucHJvdG90eXBlLmFwcGx5RmlsdGVyPWZ1bmN0aW9uKGwpe3RoaXMuZGF0YXNvdXJjZV9yZWZlcmVuY2VzLmZpbHRlcj1sLnRyaW0oKS50b0xvd2VyQ2FzZSgpfSxsLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sbH0oKSxBbD1lLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5yZWZlcmVuY2VzLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlYXJjaC1maWVsZFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX10ci5leGFtcGxlLWRldGFpbC1yb3dbX25nY29udGVudC0lQ09NUCVde2hlaWdodDowfS5leGFtcGxlLWVsZW1lbnQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tLXdpZHRoOjB9dHIuZXhhbXBsZS1lbGVtZW50LXJvd1tfbmdjb250ZW50LSVDT01QJV06bm90KC5leGFtcGxlLWV4cGFuZGVkLXJvdyk6aG92ZXJ7YmFja2dyb3VuZDojZjVmNWY1fXRyLmV4YW1wbGUtZWxlbWVudC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCguZXhhbXBsZS1leHBhbmRlZC1yb3cpOmFjdGl2ZXtiYWNrZ3JvdW5kOiNlZmVmZWZ9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBJbChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDIsInRoIixbWyJjbGFzcyIsIm1hdC1oZWFkZXItY2VsbCJdLFsibWF0LWhlYWRlci1jZWxsIiwiIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoMSwxNjM4NCxudWxsLDAsa2wuZSxbUmwuZCxlLmtdLG51bGwsbnVsbCksKGwoKSgpLGUuamIoLTEsbnVsbCxbIiBSZWYuICMgIl0pKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBMbChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDIsInRkIixbWyJjbGFzcyIsIm1hdC1jZWxsIl0sWyJtYXQtY2VsbCIsIiJdLFsicm9sZSIsImdyaWRjZWxsIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoMSwxNjM4NCxudWxsLDAsa2wuYSxbUmwuZCxlLmtdLG51bGwsbnVsbCksKGwoKSgpLGUuamIoMixudWxsLFsiICIsIiAiXSkpXSxudWxsLGZ1bmN0aW9uKGwsbil7bChuLDIsMCxuLmNvbnRleHQuJGltcGxpY2l0LmluZGV4KX0pfWZ1bmN0aW9uIFpsKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMiwidGgiLFtbImNsYXNzIiwibWF0LWhlYWRlci1jZWxsIl0sWyJtYXQtaGVhZGVyLWNlbGwiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksZS5RYSgxLDE2Mzg0LG51bGwsMCxrbC5lLFtSbC5kLGUua10sbnVsbCxudWxsKSwobCgpKCksZS5qYigtMSxudWxsLFsiIFNob3J0aGFuZCAiXSkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIFNsKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMiwidGQiLFtbImNsYXNzIiwibWF0LWNlbGwiXSxbIm1hdC1jZWxsIiwiIl0sWyJyb2xlIiwiZ3JpZGNlbGwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksZS5RYSgxLDE2Mzg0LG51bGwsMCxrbC5hLFtSbC5kLGUua10sbnVsbCxudWxsKSwobCgpKCksZS5qYigyLG51bGwsWyIgIiwiICJdKSldLG51bGwsZnVuY3Rpb24obCxuKXtsKG4sMiwwLG4uY29udGV4dC4kaW1wbGljaXQuc2hvcnRoYW5kKX0pfWZ1bmN0aW9uIEVsKGwpe3JldHVybiBlLmxiKDAsWyhsKCkoKSxlLlJhKDAsMCxudWxsLG51bGwsMiwidGgiLFtbImNsYXNzIiwibWF0LWhlYWRlci1jZWxsIl0sWyJtYXQtaGVhZGVyLWNlbGwiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksZS5RYSgxLDE2Mzg0LG51bGwsMCxrbC5lLFtSbC5kLGUua10sbnVsbCxudWxsKSwobCgpKCksZS5qYigtMSxudWxsLFsiIFRpdGxlICJdKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gUWwobCl7cmV0dXJuIGUubGIoMCxbKGwoKSgpLGUuUmEoMCwwLG51bGwsbnVsbCwzLCJ0ZCIsW1siY2xhc3MiLCJtYXQtY2VsbCJdLFsibWF0LWNlbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxlLlFhKDEsMTYzODQsbnVsbCwwLGtsLmEsW1JsLmQsZS5rXSxudWxsLG51bGwpLChsKCkoKSxlLlJhKDIsMCxudWxsLG51bGwsMSwic3BhbiIsW1sic3R5bGUiLCJmb250LXdlaWdodDogYm9sZDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoMyxudWxsLFsiIiwiIl0pKV0sbnVsbCxmdW5jdGlvbihsLG4pe2wobiwzLDAsbi5jb250ZXh0LiRpbXBsaWNpdC50aXRsZSl9KX1mdW5jdGlvbiBUbChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDUsIm1hdC1jaGlwIixbWyJjbGFzcyIsIm1hdC1jaGlwIl0sWyJyb2xlIiwib3B0aW9uIl1dLFtbMSwidGFiaW5kZXgiLDBdLFsyLCJtYXQtY2hpcC1zZWxlY3RlZCIsbnVsbF0sWzIsIm1hdC1jaGlwLXdpdGgtYXZhdGFyIixudWxsXSxbMiwibWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uIixudWxsXSxbMiwibWF0LWNoaXAtZGlzYWJsZWQiLG51bGxdLFsxLCJkaXNhYmxlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsxLCJhcmlhLXNlbGVjdGVkIiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24obCxuLGEpe3ZhciB0PSEwO3JldHVybiJjbGljayI9PT1uJiYodD0hMSE9PWUuYmIobCwxKS5faGFuZGxlQ2xpY2soYSkmJnQpLCJrZXlkb3duIj09PW4mJih0PSExIT09ZS5iYihsLDEpLl9oYW5kbGVLZXlkb3duKGEpJiZ0KSwiZm9jdXMiPT09biYmKHQ9ITEhPT1lLmJiKGwsMSkuZm9jdXMoKSYmdCksImJsdXIiPT09biYmKHQ9ITEhPT1lLmJiKGwsMSkuX2JsdXIoKSYmdCksdH0sbnVsbCxudWxsKSksZS5RYSgxLDE0NzQ1NixbWzI0LDRdXSwzLEQuYixbZS5rLGUueixGLmEsWzIsTi5rXV0sbnVsbCxudWxsKSxlLmhiKDMzNTU0NDMyMCwyNSx7YXZhdGFyOjB9KSxlLmhiKDMzNTU0NDMyMCwyNix7dHJhaWxpbmdJY29uOjB9KSxlLmhiKDMzNTU0NDMyMCwyNyx7cmVtb3ZlSWNvbjowfSksKGwoKSgpLGUuamIoNSxudWxsLFsiIiwiIl0pKV0sbnVsbCxmdW5jdGlvbihsLG4pe2wobiwwLDAsZS5iYihuLDEpLmRpc2FibGVkP251bGw6LTEsZS5iYihuLDEpLnNlbGVjdGVkLGUuYmIobiwxKS5hdmF0YXIsZS5iYihuLDEpLnRyYWlsaW5nSWNvbnx8ZS5iYihuLDEpLnJlbW92ZUljb24sZS5iYihuLDEpLmRpc2FibGVkLGUuYmIobiwxKS5kaXNhYmxlZHx8bnVsbCxlLmJiKG4sMSkuZGlzYWJsZWQudG9TdHJpbmcoKSxlLmJiKG4sMSkuYXJpYVNlbGVjdGVkKSxsKG4sNSwwLG4uY29udGV4dC4kaW1wbGljaXQpfSl9ZnVuY3Rpb24gRGwobCl7cmV0dXJuIGUubGIoMCxbKGwoKSgpLGUuUmEoMCwwLG51bGwsbnVsbCwyOSwidGQiLFtbImNsYXNzIiwibWF0LWNlbGwiXSxbIm1hdC1jZWxsIiwiIl0sWyJyb2xlIiwiZ3JpZGNlbGwiXV0sW1sxLCJjb2xzcGFuIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoMSwxNjM4NCxudWxsLDAsa2wuYSxbUmwuZCxlLmtdLG51bGwsbnVsbCksKGwoKSgpLGUuUmEoMiwwLG51bGwsbnVsbCwyNywiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgzLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtc3ViaGVhZGluZy0xIl0sWyJzdHlsZSIsIm1hcmdpbi1ib3R0b20gOiAwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKDQsbnVsbCxbIiIsIiJdKSksKGwoKSgpLGUuUmEoNSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LXRpdGxlIl0sWyJzdHlsZSIsIm1hcmdpbi1ib3R0b20gOiAwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKDYsbnVsbCxbIiIsIiJdKSksKGwoKSgpLGUuUmEoNywwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LXN1YmhlYWRpbmctMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYig4LG51bGwsWyIiLCIiXSkpLChsKCkoKSxlLlJhKDksMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsImV4YW1wbGUtZWxlbWVudC1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigxMCxudWxsLFsiICIsIiAiXSkpLChsKCkoKSxlLlJhKDExLDAsbnVsbCxudWxsLDAsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTIsMCxudWxsLG51bGwsNywiZGl2IixbWyJzdHlsZSIsImZsb2F0OiByaWdodDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTMsMCxudWxsLG51bGwsNiwic3BhbiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTQsMCxudWxsLG51bGwsNSwiYSIsW1sibWF0LXJhaXNlZC1idXR0b24iLCIiXV0sW1s4LCJocmVmIiw0XSxbMSwidGFiaW5kZXgiLDBdLFsxLCJkaXNhYmxlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obCxuLGEpe3ZhciB0PSEwO3JldHVybiJjbGljayI9PT1uJiYodD0hMSE9PWUuYmIobCwxNSkuX2hhbHREaXNhYmxlZEV2ZW50cyhhKSYmdCksdH0sVS5jLFUuYSkpLGUuUWEoMTUsMTgwMjI0LG51bGwsMCxCLmEsW0YuYSxDLmIsZS5rLFsyLHEuYV1dLG51bGwsbnVsbCksKGwoKSgpLGUuUmEoMTYsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsei5iLHouYSkpLGUuUWEoMTcsNjM4OTc2LG51bGwsMCxILmEsW2UuayxILmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKGwoKSgpLGUuamIoLTEsMCxbIm9wZW5faW5fbmV3Il0pKSwobCgpKCksZS5qYigtMSwwLFsiIE9wZW4gYXJ0aWNsZSBwYWdlIl0pKSwobCgpKCksZS5SYSgyMCwwLG51bGwsbnVsbCw5LCJwIixbWyJjbGFzcyIsIm1hdC1jYXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKDIxLG51bGwsWyIiLCIgXHUyMDE0IGRvaToiLCIgIl0pKSwobCgpKCksZS5SYSgyMiwwLG51bGwsbnVsbCw3LCJzcGFuIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5SYSgyMywwLG51bGwsbnVsbCw2LCJtYXQtY2hpcC1saXN0IixbWyJjbGFzcyIsIm1hdC1jaGlwLWxpc3QiXV0sW1sxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtZGVzY3JpYmVkYnkiLDBdLFsxLCJhcmlhLXJlcXVpcmVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzEsImFyaWEtaW52YWxpZCIsMF0sWzEsImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwwXSxbMSwicm9sZSIsMF0sWzIsIm1hdC1jaGlwLWxpc3QtZGlzYWJsZWQiLG51bGxdLFsyLCJtYXQtY2hpcC1saXN0LWludmFsaWQiLG51bGxdLFsyLCJtYXQtY2hpcC1saXN0LXJlcXVpcmVkIixudWxsXSxbMSwiYXJpYS1vcmllbnRhdGlvbiIsMF0sWzgsImlkIiwwXV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24obCxuLGEpe3ZhciB0PSEwO3JldHVybiJmb2N1cyI9PT1uJiYodD0hMSE9PWUuYmIobCwyNSkuZm9jdXMoKSYmdCksImJsdXIiPT09biYmKHQ9ITEhPT1lLmJiKGwsMjUpLl9ibHVyKCkmJnQpLCJrZXlkb3duIj09PW4mJih0PSExIT09ZS5iYihsLDI1KS5fa2V5ZG93bihhKSYmdCksdH0sVi5iLFYuYSkpLGUuZ2IoNjE0NCxudWxsLEsuYyxudWxsLFtELmNdKSxlLlFhKDI1LDE1NTY0ODAsbnVsbCwxLEQuYyxbZS5rLGUuaCxbMixXLmJdLFsyLEcuY10sWzIsRy5hXSxOLmQsWzgsbnVsbF1dLG51bGwsbnVsbCksZS5oYig2MDM5Nzk3NzYsMjQse2NoaXBzOjF9KSwobCgpKCksZS5qYigtMSwwLFsiIFRhZ3M6ICJdKSksKGwoKSgpLGUuSWEoMTY3NzcyMTYsbnVsbCwwLDEsbnVsbCxUbCkpLGUuUWEoMjksMjc4NTI4LG51bGwsMCx1LmosW2UuUSxlLk4sZS5zXSx7bmdGb3JPZjpbMCwibmdGb3JPZiJdfSxudWxsKV0sZnVuY3Rpb24obCxuKXtsKG4sMTcsMCksbChuLDI1LDApLGwobiwyOSwwLG4uY29udGV4dC4kaW1wbGljaXQudGFncyl9LGZ1bmN0aW9uKGwsbil7bChuLDAsMCxuLmNvbXBvbmVudC5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCksbChuLDQsMCxuLmNvbnRleHQuJGltcGxpY2l0LmpvdXJuYWwpLGwobiw2LDAsbi5jb250ZXh0LiRpbXBsaWNpdC50aXRsZSksbChuLDgsMCxuLmNvbnRleHQuJGltcGxpY2l0LmF1dGhvcnMpLGwobiwxMCwwLG4uY29udGV4dC4kaW1wbGljaXQuYWJzdHJhY3QpLGwobiwxNCwwLGUuVGEoMSwiIixuLmNvbnRleHQuJGltcGxpY2l0LnVybCwiIiksZS5iYihuLDE1KS5kaXNhYmxlZD8tMTplLmJiKG4sMTUpLnRhYkluZGV4fHwwLGUuYmIobiwxNSkuZGlzYWJsZWR8fG51bGwsZS5iYihuLDE1KS5kaXNhYmxlZC50b1N0cmluZygpLCJOb29wQW5pbWF0aW9ucyI9PT1lLmJiKG4sMTUpLl9hbmltYXRpb25Nb2RlKSxsKG4sMTYsMCxlLmJiKG4sMTcpLmlubGluZSksbChuLDIxLDAsbi5jb250ZXh0LiRpbXBsaWNpdC5wdWJEZXRhaWxzLG4uY29udGV4dC4kaW1wbGljaXQuZG9pKSxsKG4sMjMsMSxbZS5iYihuLDI1KS5fdGFiSW5kZXgsZS5iYihuLDI1KS5fYXJpYURlc2NyaWJlZGJ5fHxudWxsLGUuYmIobiwyNSkucmVxdWlyZWQudG9TdHJpbmcoKSxlLmJiKG4sMjUpLmRpc2FibGVkLnRvU3RyaW5nKCksZS5iYihuLDI1KS5lcnJvclN0YXRlLGUuYmIobiwyNSkubXVsdGlwbGUsZS5iYihuLDI1KS5yb2xlLGUuYmIobiwyNSkuZGlzYWJsZWQsZS5iYihuLDI1KS5lcnJvclN0YXRlLGUuYmIobiwyNSkucmVxdWlyZWQsZS5iYihuLDI1KS5hcmlhT3JpZW50YXRpb24sZS5iYihuLDI1KS5fdWlkXSl9KX1mdW5jdGlvbiBGbChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDIsInRyIixbWyJjbGFzcyIsIm1hdC1oZWFkZXItcm93Il0sWyJtYXQtaGVhZGVyLXJvdyIsIiJdLFsicm9sZSIsInJvdyJdXSxudWxsLG51bGwsbnVsbCxDbC5kLENsLmEpKSxlLmdiKDYxNDQsbnVsbCxSbC5rLG51bGwsW2tsLmddKSxlLlFhKDIsNDkxNTIsbnVsbCwwLGtsLmcsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBObChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDIsInRyIixbWyJjbGFzcyIsImV4YW1wbGUtZWxlbWVudC1yb3cgbWF0LXJvdyJdLFsibWF0LXJvdyIsIiJdLFsicm9sZSIsInJvdyJdXSxbWzIsImV4YW1wbGUtZXhwYW5kZWQtcm93IixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIGU9ITA7cmV0dXJuImNsaWNrIj09PW4mJihlPSExIT09KGwuY29tcG9uZW50LmV4cGFuZGVkRWxlbWVudD1sLmNvbnRleHQuJGltcGxpY2l0KSYmZSksZX0sQ2wuZSxDbC5iKSksZS5nYig2MTQ0LG51bGwsUmwubSxudWxsLFtrbC5pXSksZS5RYSgyLDQ5MTUyLG51bGwsMCxrbC5pLFtdLG51bGwsbnVsbCldLG51bGwsZnVuY3Rpb24obCxuKXtsKG4sMCwwLG4uY29tcG9uZW50LmV4cGFuZGVkRWxlbWVudD09PW4uY29udGV4dC4kaW1wbGljaXQpfSl9ZnVuY3Rpb24gVWwobCl7cmV0dXJuIGUubGIoMCxbKGwoKSgpLGUuUmEoMCwwLG51bGwsbnVsbCwyLCJ0ciIsW1siY2xhc3MiLCJleGFtcGxlLWRldGFpbC1yb3cgbWF0LXJvdyJdLFsibWF0LXJvdyIsIiJdLFsicm9sZSIsInJvdyJdXSxudWxsLG51bGwsbnVsbCxDbC5lLENsLmIpKSxlLmdiKDYxNDQsbnVsbCxSbC5tLG51bGwsW2tsLmldKSxlLlFhKDIsNDkxNTIsbnVsbCwwLGtsLmksW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBCbChsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDc4LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIkxpc3Qgb2YgcmVmZXJlbmNlcyJdKSksKGwoKSgpLGUuUmEoMywwLG51bGwsbnVsbCw3NSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwscC5kLHAuYSkpLGUuUWEoNCw0OTE1MixudWxsLDAsbS5hLFtdLG51bGwsbnVsbCksKGwoKSgpLGUuUmEoNSwwLG51bGwsMCwxMSwibWF0LWZvcm0tZmllbGQiLFtbImNsYXNzIiwic2VhcmNoLWZpZWxkIG1hdC1mb3JtLWZpZWxkIl1dLFtbMiwibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IixudWxsXSxbMiwibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZCIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsZWQiLG51bGxdLFsyLCJtYXQtZm9jdXNlZCIsbnVsbF0sWzIsIm1hdC1hY2NlbnQiLG51bGxdLFsyLCJtYXQtd2FybiIsbnVsbF0sWzIsIm5nLXVudG91Y2hlZCIsbnVsbF0sWzIsIm5nLXRvdWNoZWQiLG51bGxdLFsyLCJuZy1wcmlzdGluZSIsbnVsbF0sWzIsIm5nLWRpcnR5IixudWxsXSxbMiwibmctdmFsaWQiLG51bGxdLFsyLCJuZy1pbnZhbGlkIixudWxsXSxbMiwibmctcGVuZGluZyIsbnVsbF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sbnVsbCxudWxsLFBsLmIsUGwuYSkpLGUuUWEoNiw3Mzg5MTg0LG51bGwsNyxLLmIsW2UuayxlLmgsWzIsTi5oXSxbMixXLmJdLFsyLEsuYV0sRi5hLGUueixbMixxLmFdXSxudWxsLG51bGwpLGUuaGIoMzM1NTQ0MzIwLDEse19jb250cm9sOjB9KSxlLmhiKDMzNTU0NDMyMCwyLHtfcGxhY2Vob2xkZXJDaGlsZDowfSksZS5oYigzMzU1NDQzMjAsMyx7X2xhYmVsQ2hpbGQ6MH0pLGUuaGIoNjAzOTc5Nzc2LDQse19lcnJvckNoaWxkcmVuOjF9KSxlLmhiKDYwMzk3OTc3Niw1LHtfaGludENoaWxkcmVuOjF9KSxlLmhiKDYwMzk3OTc3Niw2LHtfcHJlZml4Q2hpbGRyZW46MX0pLGUuaGIoNjAzOTc5Nzc2LDcse19zdWZmaXhDaGlsZHJlbjoxfSksKGwoKSgpLGUuUmEoMTQsMCxudWxsLDEsMiwiaW5wdXQiLFtbImNsYXNzIiwibWF0LWlucHV0LWVsZW1lbnQgbWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbCJdLFsibWF0SW5wdXQiLCIiXSxbInBsYWNlaG9sZGVyIiwiU2VhcmNoIl1dLFtbMiwibWF0LWlucHV0LXNlcnZlciIsbnVsbF0sWzEsImlkIiwwXSxbMSwicGxhY2Vob2xkZXIiLDBdLFs4LCJkaXNhYmxlZCIsMF0sWzgsInJlcXVpcmVkIiwwXSxbOCwicmVhZE9ubHkiLDBdLFsxLCJhcmlhLWRlc2NyaWJlZGJ5IiwwXSxbMSwiYXJpYS1pbnZhbGlkIiwwXSxbMSwiYXJpYS1yZXF1aXJlZCIsMF1dLFtbbnVsbCwia2V5dXAiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJpbnB1dCJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIHQ9ITAsdT1sLmNvbXBvbmVudDtyZXR1cm4iYmx1ciI9PT1uJiYodD0hMSE9PWUuYmIobCwxNSkuX2ZvY3VzQ2hhbmdlZCghMSkmJnQpLCJmb2N1cyI9PT1uJiYodD0hMSE9PWUuYmIobCwxNSkuX2ZvY3VzQ2hhbmdlZCghMCkmJnQpLCJpbnB1dCI9PT1uJiYodD0hMSE9PWUuYmIobCwxNSkuX29uSW5wdXQoKSYmdCksImtleXVwIj09PW4mJih0PSExIT09dS5hcHBseUZpbHRlcihhLnRhcmdldC52YWx1ZSkmJnQpLHR9LG51bGwsbnVsbCkpLGUuUWEoMTUsOTk5NDI0LG51bGwsMCxNbC5hLFtlLmssRi5hLFs4LG51bGxdLFsyLEcuY10sWzIsRy5hXSxOLmQsWzgsbnVsbF0sT2wuYSxlLnpdLHtwbGFjZWhvbGRlcjpbMCwicGxhY2Vob2xkZXIiXX0sbnVsbCksZS5nYigyMDQ4LFtbMSw0XV0sSy5jLG51bGwsW01sLmFdKSwobCgpKCksZS5SYSgxNywwLG51bGwsMCw2MSwidGFibGUiLFtbImNsYXNzIiwicmVmZXJlbmNlcy10YWJsZSBtYXQtdGFibGUiXSxbIm1hdC10YWJsZSIsIiJdLFsibXVsdGlUZW1wbGF0ZURhdGFSb3dzIiwiIl1dLG51bGwsbnVsbCxudWxsLENsLmYsQ2wuYykpLGUuUWEoMTgsMjM0MjkxMixudWxsLDQsa2wuayxbZS5zLGUuaCxlLmssWzgsbnVsbF0sWzIsVy5iXV0se2RhdGFTb3VyY2U6WzAsImRhdGFTb3VyY2UiXSxtdWx0aVRlbXBsYXRlRGF0YVJvd3M6WzEsIm11bHRpVGVtcGxhdGVEYXRhUm93cyJdfSxudWxsKSxlLmhiKDYwMzk3OTc3Niw4LHtfY29udGVudENvbHVtbkRlZnM6MX0pLGUuaGIoNjAzOTc5Nzc2LDkse19jb250ZW50Um93RGVmczoxfSksZS5oYig2MDM5Nzk3NzYsMTAse19jb250ZW50SGVhZGVyUm93RGVmczoxfSksZS5oYig2MDM5Nzk3NzYsMTEse19jb250ZW50Rm9vdGVyUm93RGVmczoxfSksKGwoKSgpLGUuUmEoMjMsMCxudWxsLG51bGwsMTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoMjQsMTYzODQsbnVsbCwzLGtsLmMsW10se25hbWU6WzAsIm5hbWUiXX0sbnVsbCksZS5oYigzMzU1NDQzMjAsMTIse2NlbGw6MH0pLGUuaGIoMzM1NTQ0MzIwLDEzLHtoZWFkZXJDZWxsOjB9KSxlLmhiKDMzNTU0NDMyMCwxNCx7Zm9vdGVyQ2VsbDowfSksZS5nYigyMDQ4LFtbOCw0XV0sUmwuZCxudWxsLFtrbC5jXSksKGwoKSgpLGUuSWEoMCxudWxsLG51bGwsMixudWxsLElsKSksZS5RYSgzMCwxNjM4NCxudWxsLDAsa2wuZixbZS5OXSxudWxsLG51bGwpLGUuZ2IoMjA0OCxbWzEzLDRdXSxSbC5qLG51bGwsW2tsLmZdKSwobCgpKCksZS5JYSgwLG51bGwsbnVsbCwyLG51bGwsTGwpKSxlLlFhKDMzLDE2Mzg0LG51bGwsMCxrbC5iLFtlLk5dLG51bGwsbnVsbCksZS5nYigyMDQ4LFtbMTIsNF1dLFJsLmIsbnVsbCxba2wuYl0pLChsKCkoKSxlLlJhKDM1LDAsbnVsbCxudWxsLDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxlLlFhKDM2LDE2Mzg0LG51bGwsMyxrbC5jLFtdLHtuYW1lOlswLCJuYW1lIl19LG51bGwpLGUuaGIoMzM1NTQ0MzIwLDE1LHtjZWxsOjB9KSxlLmhiKDMzNTU0NDMyMCwxNix7aGVhZGVyQ2VsbDowfSksZS5oYigzMzU1NDQzMjAsMTcse2Zvb3RlckNlbGw6MH0pLGUuZ2IoMjA0OCxbWzgsNF1dLFJsLmQsbnVsbCxba2wuY10pLChsKCkoKSxlLklhKDAsbnVsbCxudWxsLDIsbnVsbCxabCkpLGUuUWEoNDIsMTYzODQsbnVsbCwwLGtsLmYsW2UuTl0sbnVsbCxudWxsKSxlLmdiKDIwNDgsW1sxNiw0XV0sUmwuaixudWxsLFtrbC5mXSksKGwoKSgpLGUuSWEoMCxudWxsLG51bGwsMixudWxsLFNsKSksZS5RYSg0NSwxNjM4NCxudWxsLDAsa2wuYixbZS5OXSxudWxsLG51bGwpLGUuZ2IoMjA0OCxbWzE1LDRdXSxSbC5iLG51bGwsW2tsLmJdKSwobCgpKCksZS5SYSg0NywwLG51bGwsbnVsbCwxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksZS5RYSg0OCwxNjM4NCxudWxsLDMsa2wuYyxbXSx7bmFtZTpbMCwibmFtZSJdfSxudWxsKSxlLmhiKDMzNTU0NDMyMCwxOCx7Y2VsbDowfSksZS5oYigzMzU1NDQzMjAsMTkse2hlYWRlckNlbGw6MH0pLGUuaGIoMzM1NTQ0MzIwLDIwLHtmb290ZXJDZWxsOjB9KSxlLmdiKDIwNDgsW1s4LDRdXSxSbC5kLG51bGwsW2tsLmNdKSwobCgpKCksZS5JYSgwLG51bGwsbnVsbCwyLG51bGwsRWwpKSxlLlFhKDU0LDE2Mzg0LG51bGwsMCxrbC5mLFtlLk5dLG51bGwsbnVsbCksZS5nYigyMDQ4LFtbMTksNF1dLFJsLmosbnVsbCxba2wuZl0pLChsKCkoKSxlLklhKDAsbnVsbCxudWxsLDIsbnVsbCxRbCkpLGUuUWEoNTcsMTYzODQsbnVsbCwwLGtsLmIsW2UuTl0sbnVsbCxudWxsKSxlLmdiKDIwNDgsW1sxOCw0XV0sUmwuYixudWxsLFtrbC5iXSksKGwoKSgpLGUuUmEoNTksMCxudWxsLG51bGwsOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksZS5RYSg2MCwxNjM4NCxudWxsLDMsa2wuYyxbXSx7bmFtZTpbMCwibmFtZSJdfSxudWxsKSxlLmhiKDMzNTU0NDMyMCwyMSx7Y2VsbDowfSksZS5oYigzMzU1NDQzMjAsMjIse2hlYWRlckNlbGw6MH0pLGUuaGIoMzM1NTQ0MzIwLDIzLHtmb290ZXJDZWxsOjB9KSxlLmdiKDIwNDgsW1s4LDRdXSxSbC5kLG51bGwsW2tsLmNdKSwobCgpKCksZS5JYSgwLG51bGwsbnVsbCwyLG51bGwsRGwpKSxlLlFhKDY2LDE2Mzg0LG51bGwsMCxrbC5iLFtlLk5dLG51bGwsbnVsbCksZS5nYigyMDQ4LFtbMjEsNF1dLFJsLmIsbnVsbCxba2wuYl0pLChsKCkoKSxlLlJhKDY4LDAsbnVsbCxudWxsLDEwLCJ0Ym9keSIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuSWEoMCxudWxsLG51bGwsMixudWxsLEZsKSksZS5RYSg3MCw1NDA2NzIsbnVsbCwwLGtsLmgsW2UuTixlLnNdLHtjb2x1bW5zOlswLCJjb2x1bW5zIl19LG51bGwpLGUuZ2IoMjA0OCxbWzEwLDRdXSxSbC5sLG51bGwsW2tsLmhdKSwobCgpKCksZS5JYSgwLG51bGwsbnVsbCwyLG51bGwsTmwpKSxlLlFhKDczLDU0MDY3MixudWxsLDAsa2wuaixbZS5OLGUuc10se2NvbHVtbnM6WzAsImNvbHVtbnMiXX0sbnVsbCksZS5nYigyMDQ4LFtbOSw0XV0sUmwubixudWxsLFtrbC5qXSksKGwoKSgpLGUuSWEoMCxudWxsLG51bGwsMyxudWxsLFVsKSksZS5RYSg3Niw1NDA2NzIsbnVsbCwwLGtsLmosW2UuTixlLnNdLHtjb2x1bW5zOlswLCJjb2x1bW5zIl19LG51bGwpLGUuY2IoNzcsMSksZS5nYigyMDQ4LFtbOSw0XV0sUmwubixudWxsLFtrbC5qXSldLGZ1bmN0aW9uKGwsbil7dmFyIGE9bi5jb21wb25lbnQ7bChuLDE1LDAsIlNlYXJjaCIpLGwobiwxOCwwLGEuZGF0YXNvdXJjZV9yZWZlcmVuY2VzLCIiKSxsKG4sMjQsMCwiaW5kZXgiKSxsKG4sMzYsMCwic2hvcnRoYW5kIiksbChuLDQ4LDAsInRpdGxlIiksbChuLDYwLDAsImV4cGFuZGVkRGV0YWlsIiksbChuLDcwLDAsYS5kaXNwbGF5ZWRDb2x1bW5zKSxsKG4sNzMsMCxhLmRpc3BsYXllZENvbHVtbnMpLGwobiw3NiwwLGwobiw3NywwLCJleHBhbmRlZERldGFpbCIpKX0sZnVuY3Rpb24obCxuKXtsKG4sNSwxLFsic3RhbmRhcmQiPT1lLmJiKG4sNikuYXBwZWFyYW5jZSwiZmlsbCI9PWUuYmIobiw2KS5hcHBlYXJhbmNlLCJvdXRsaW5lIj09ZS5iYihuLDYpLmFwcGVhcmFuY2UsImxlZ2FjeSI9PWUuYmIobiw2KS5hcHBlYXJhbmNlLGUuYmIobiw2KS5fY29udHJvbC5lcnJvclN0YXRlLGUuYmIobiw2KS5fY2FuTGFiZWxGbG9hdCxlLmJiKG4sNikuX3Nob3VsZExhYmVsRmxvYXQoKSxlLmJiKG4sNikuX2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKSxlLmJiKG4sNikuX2NvbnRyb2wuZGlzYWJsZWQsZS5iYihuLDYpLl9jb250cm9sLmF1dG9maWxsZWQsZS5iYihuLDYpLl9jb250cm9sLmZvY3VzZWQsImFjY2VudCI9PWUuYmIobiw2KS5jb2xvciwid2FybiI9PWUuYmIobiw2KS5jb2xvcixlLmJiKG4sNikuX3Nob3VsZEZvcndhcmQoInVudG91Y2hlZCIpLGUuYmIobiw2KS5fc2hvdWxkRm9yd2FyZCgidG91Y2hlZCIpLGUuYmIobiw2KS5fc2hvdWxkRm9yd2FyZCgicHJpc3RpbmUiKSxlLmJiKG4sNikuX3Nob3VsZEZvcndhcmQoImRpcnR5IiksZS5iYihuLDYpLl9zaG91bGRGb3J3YXJkKCJ2YWxpZCIpLGUuYmIobiw2KS5fc2hvdWxkRm9yd2FyZCgiaW52YWxpZCIpLGUuYmIobiw2KS5fc2hvdWxkRm9yd2FyZCgicGVuZGluZyIpLCFlLmJiKG4sNikuX2FuaW1hdGlvbnNFbmFibGVkXSksbChuLDE0LDAsZS5iYihuLDE1KS5faXNTZXJ2ZXIsZS5iYihuLDE1KS5pZCxlLmJiKG4sMTUpLnBsYWNlaG9sZGVyLGUuYmIobiwxNSkuZGlzYWJsZWQsZS5iYihuLDE1KS5yZXF1aXJlZCxlLmJiKG4sMTUpLnJlYWRvbmx5LGUuYmIobiwxNSkuX2FyaWFEZXNjcmliZWRieXx8bnVsbCxlLmJiKG4sMTUpLmVycm9yU3RhdGUsZS5iYihuLDE1KS5yZXF1aXJlZC50b1N0cmluZygpKX0pfXZhciBxbD1lLk5hKCJhcHAtcmVmZXJlbmNlcy1wYWdlIixqbCxmdW5jdGlvbihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1yZWZlcmVuY2VzLXBhZ2UiLFtdLG51bGwsbnVsbCxudWxsLEJsLEFsKSksZS5RYSgxLDExNDY4OCxudWxsLDAsamwsW1NdLG51bGwsbnVsbCldLGZ1bmN0aW9uKGwsbil7bChuLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksemw9YSgieVdNciIpLEhsPWEoIkZiTjkiKSxWbD1hKCI4bU1yIiksS2w9YSgiYzRXbSIpLFdsPWEoIk5zaDUiKSxHbD1hKCJKT2o5IiksWWw9YSgiUFQvWCIpLCRsPWEoIjZVTXgiKSxKbD1hKCIwL1E2IiksWGw9YSgiMjFMYiIpLGxuPWEoIk96ZkIiKSxubj1lLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbImJvZHlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyZW19LmZpbGwtdG9vbGJhci1zcGFjZVtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgYXV0b30uc2lkZW5hdi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5zaWRlbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMDBweDtib3gtc2hhZG93OjNweCAwIDZweCByZ2JhKDAsMCwwLC4yNCl9I3NpdGVtYXBidXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3dpZHRoOjEwMCV9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4fSNzaWRlbmF2ZmxleGNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBhbihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDYxLCJkaXYiLFtbImNsYXNzIiwibWF0LWFwcC1iYWNrZ3JvdW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDEsMCxudWxsLG51bGwsMTksIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsImFjY2VudCJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLEhsLmIsSGwuYSkpLGUuUWEoMiw0MjQzNDU2LG51bGwsMSxWbC5hLFtlLmssRi5hLHUuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSxlLmhiKDYwMzk3OTc3NiwxLHtfdG9vbGJhclJvd3M6MX0pLChsKCkoKSxlLlJhKDQsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIGU9ITA7cmV0dXJuImNsaWNrIj09PW4mJihlPSExIT09bC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmZSksZX0sVS5kLFUuYikpLGUuUWEoNSwxODAyMjQsbnVsbCwwLEIuYixbZS5rLEYuYSxDLmIsWzIscS5hXV0sbnVsbCxudWxsKSwobCgpKCksZS5SYSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHouYix6LmEpKSxlLlFhKDcsNjM4OTc2LG51bGwsMCxILmEsW2UuayxILmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKGwoKSgpLGUuamIoLTEsMCxbIm1lbnUiXSkpLChsKCkoKSxlLlJhKDksMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTAsMCxudWxsLDAsMSwiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksZS5qYigtMSxudWxsLFsiTWV0aG90ciJdKSksKGwoKSgpLGUuUmEoMTIsMCxudWxsLDAsMSwiZGl2IixbWyJzdHlsZSIsImNvbG9yOiAgI2VjZTBlODsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIkV4aXQiXSkpLChsKCkoKSxlLlJhKDE0LDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTUsMCxudWxsLDAsMCwiaW1nIixbWyJzcmMiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9jL2MwL1QtLUdPX1BhcmlzLVNhY2xheS0tZ28tcHMtd2hpdGUucG5nIl0sWyJzdHlsZSIsIm1heC1oZWlnaHQ6MTAwJTsgd2lkdGg6YXV0bzsgcGFkZGluZzoxZW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDE2LDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuUmEoMTcsMCxudWxsLDAsMywic3BhbiIsW1sic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bGluZS1oZWlnaHQ6IDg1JTsgZm9udC1zaXplOiBtZWRpdW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLmpiKC0xLG51bGwsWyJUZWFtIEdPIl0pKSwobCgpKCksZS5SYSgxOSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLGUuamIoLTEsbnVsbCxbIlBhcmlzU2FjbGF5Il0pKSwobCgpKCksZS5SYSgyMSwwLG51bGwsbnVsbCw0MCwibWF0LXNpZGVuYXYtY29udGFpbmVyIixbWyJjbGFzcyIsInNpZGVuYXYtY29udGFpbmVyIG1hdC1kcmF3ZXItY29udGFpbmVyIG1hdC1zaWRlbmF2LWNvbnRhaW5lciJdXSxbWzIsIm1hdC1kcmF3ZXItY29udGFpbmVyLWV4cGxpY2l0LWJhY2tkcm9wIixudWxsXV0sbnVsbCxudWxsLEtsLmQsS2wuYikpLGUuUWEoMjIsMTQ5MDk0NCxudWxsLDIsV2wuZixbWzIsVy5iXSxlLmssZS56LGUuaCxXbC5hLFsyLHEuYV1dLG51bGwsbnVsbCksZS5oYig2MDM5Nzk3NzYsMix7X2RyYXdlcnM6MX0pLGUuaGIoMzM1NTQ0MzIwLDMse19jb250ZW50OjB9KSwobCgpKCksZS5SYSgyNSwwLG51bGwsMCwyOCwibWF0LXNpZGVuYXYiLFtbImNsYXNzIiwic2lkZW5hdiBtYXQtZHJhd2VyIG1hdC1zaWRlbmF2Il0sWyJmaXhlZEluVmlld3BvcnQiLCJ0cnVlIl0sWyJ0YWJJbmRleCIsIi0xIl1dLFtbMSwicm9sZSIsMF0sWzQwLCJAdHJhbnNmb3JtIiwwXSxbMSwiYWxpZ24iLDBdLFsyLCJtYXQtZHJhd2VyLWVuZCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItb3ZlciIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItcHVzaCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItc2lkZSIsbnVsbF0sWzIsIm1hdC1zaWRlbmF2LWZpeGVkIixudWxsXSxbNCwidG9wIiwicHgiXSxbNCwiYm90dG9tIiwicHgiXV0sW1siY29tcG9uZW50IiwiQHRyYW5zZm9ybS5zdGFydCJdLFsiY29tcG9uZW50IiwiQHRyYW5zZm9ybS5kb25lIl1dLGZ1bmN0aW9uKGwsbixhKXt2YXIgdD0hMDtyZXR1cm4iY29tcG9uZW50OkB0cmFuc2Zvcm0uc3RhcnQiPT09biYmKHQ9ITEhPT1lLmJiKGwsMjYpLl9vbkFuaW1hdGlvblN0YXJ0KGEpJiZ0KSwiY29tcG9uZW50OkB0cmFuc2Zvcm0uZG9uZSI9PT1uJiYodD0hMSE9PWUuYmIobCwyNikuX29uQW5pbWF0aW9uRW5kKGEpJiZ0KSx0fSxLbC5mLEtsLmEpKSxlLlFhKDI2LDMzMjU5NTIsW1syLDRdLFsiZHJhd2VyIiw0XV0sMCxXbC5lLFtlLmssQy5jLEMuYixGLmEsZS56LFsyLHUuZF1dLHttb2RlOlswLCJtb2RlIl0sb3BlbmVkOlsxLCJvcGVuZWQiXSxmaXhlZEluVmlld3BvcnQ6WzIsImZpeGVkSW5WaWV3cG9ydCJdfSxudWxsKSxlLmRiKDEzMTA3Mix1LmIsW2UuaF0pLGUuZGIoMTMxMDcyLHUuYixbZS5oXSksKGwoKSgpLGUuUmEoMjksMCxudWxsLDAsOSwibWF0LXRvb2xiYXIiLFtbImNsYXNzIiwibWF0LXRvb2xiYXIiXSxbImNvbG9yIiwicHJpbWFyeSJdLFsic3R5bGUiLCJtYXJnaW4tdG9wOiAxNXB4OyJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLEhsLmIsSGwuYSkpLGUuUWEoMzAsNDI0MzQ1NixudWxsLDEsVmwuYSxbZS5rLEYuYSx1LmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksZS5oYig2MDM5Nzk3NzYsNCx7X3Rvb2xiYXJSb3dzOjF9KSwobCgpKCksZS5qYigtMSwwLFsiTmF2aWdhdGlvbiAiXSkpLChsKCkoKSxlLlJhKDMzLDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSxlLlJhKDM0LDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwO3JldHVybiJjbGljayI9PT1uJiYoZT0hMSE9PWwuY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJmUpLGV9LFUuZCxVLmIpKSxlLlFhKDM1LDE4MDIyNCxudWxsLDAsQi5iLFtlLmssRi5hLEMuYixbMixxLmFdXSxudWxsLG51bGwpLChsKCkoKSxlLlJhKDM2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHouYix6LmEpKSxlLlFhKDM3LDYzODk3NixudWxsLDAsSC5hLFtlLmssSC5jLFs4LG51bGxdXSxudWxsLG51bGwpLChsKCkoKSxlLmpiKC0xLDAsWyJrZXlib2FyZF9hcnJvd19sZWZ0Il0pKSwobCgpKCksZS5SYSgzOSwwLG51bGwsMCwxLCJuZy1tYXRlcmlhbC1tdWx0aWxldmVsLW1lbnUiLFtdLG51bGwsW1tudWxsLCJzZWxlY3RlZEl0ZW0iXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwO3JldHVybiJzZWxlY3RlZEl0ZW0iPT09biYmKGU9ITEhPT1sLmNvbXBvbmVudC5zZWxlY3RlZFNpZGVNZW51SXRlbShhKSYmZSksZX0sR2wuYixHbC5hKSksZS5RYSg0MCw2Mzg5NzYsbnVsbCwwLFlsLmMsW1kubCxZbC5kXSx7aXRlbXM6WzAsIml0ZW1zIl0sY29uZmlndXJhdGlvbjpbMSwiY29uZmlndXJhdGlvbiJdfSx7c2VsZWN0ZWRJdGVtOiJzZWxlY3RlZEl0ZW0ifSksKGwoKSgpLGUuUmEoNDEsMCxudWxsLDAsMTIsIm1hdC1uYXYtbGlzdCIsW1siY2xhc3MiLCJtYXQtbmF2LWxpc3QiXSxbInJvbGUiLCJuYXZpZ2F0aW9uIl1dLG51bGwsbnVsbCxudWxsLCRsLmYsJGwuYykpLGUuUWEoNDIsNDkxNTIsbnVsbCwwLEpsLmUsW10sbnVsbCxudWxsKSwobCgpKCksZS5SYSg0MywwLG51bGwsMCwxMCwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJpZCIsInNpdGVtYXBidXQiXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKGwsbixhKXt2YXIgdD0hMDtyZXR1cm4iZm9jdXMiPT09biYmKHQ9ITEhPT1lLmJiKGwsNDQpLl9oYW5kbGVGb2N1cygpJiZ0KSwiYmx1ciI9PT1uJiYodD0hMSE9PWUuYmIobCw0NCkuX2hhbmRsZUJsdXIoKSYmdCksImNsaWNrIj09PW4mJih0PSExIT09ZS5iYihsLDQ4KS5vbkNsaWNrKGEuYnV0dG9uLGEuY3RybEtleSxhLm1ldGFLZXksYS5zaGlmdEtleSkmJnQpLHR9LCRsLmQsJGwuYikpLGUuUWEoNDQsMTA5NzcyOCxudWxsLDMsSmwuYixbZS5rLFsyLEpsLmVdXSxudWxsLG51bGwpLGUuaGIoNjAzOTc5Nzc2LDUse19saW5lczoxfSksZS5oYigzMzU1NDQzMjAsNix7X2F2YXRhcjowfSksZS5oYigzMzU1NDQzMjAsNyx7X2ljb246MH0pLGUuUWEoNDgsNjcxNzQ0LG51bGwsMCxZLm0sW1kubCxZLmEsdS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxlLmNiKDQ5LDEpLChsKCkoKSxlLlJhKDUwLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHouYix6LmEpKSxlLlFhKDUxLDYzODk3NixudWxsLDAsSC5hLFtlLmssSC5jLFs4LG51bGxdXSxudWxsLG51bGwpLChsKCkoKSxlLmpiKC0xLDAsWyJhcHBzIl0pKSwobCgpKCksZS5qYigtMSwyLFsiIFNpdGUgbWFwIl0pKSwobCgpKCksZS5SYSg1NCwwLG51bGwsMSw3LCJtYXQtc2lkZW5hdi1jb250ZW50IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItY29udGVudCBtYXQtc2lkZW5hdi1jb250ZW50Il0sWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXRBbGlnbiIsImNlbnRlciJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLEtsLmUsS2wuYykpLGUuUWEoNTUsMTA5NzcyOCxbWzMsNF1dLDAsV2wuZyxbZS5oLFdsLmZdLG51bGwsbnVsbCksZS5RYSg1Niw3MzcyODAsbnVsbCwwLFhsLmUsW2xuLmksZS5rLGxuLm1dLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxlLlFhKDU3LDczNzI4MCxudWxsLDAsWGwuZCxbbG4uaSxlLmssWzYsWGwuZV0sbG4ubV0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwobCgpKCksZS5SYSg1OCwwLG51bGwsMCwzLCJkaXYiLFtbImZ4RmxleCIsIjEgMCA1MDBweCJdLFsiaWQiLCJzaWRlbmF2ZmxleGNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksZS5RYSg1OSw3MzcyODAsbnVsbCwwLFhsLmEsW2xuLmksZS5rLFszLFhsLmVdLGxuLm0sbG4uZ10se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKGwoKSgpLGUuUmEoNjAsMTY3NzcyMTYsbnVsbCxudWxsLDEsInJvdXRlci1vdXRsZXQiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGUuUWEoNjEsMjEyOTkyLG51bGwsMCxZLm8sW1kuYixlLlEsZS5qLFs4LG51bGxdLGUuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24obCxuKXt2YXIgYT1uLmNvbXBvbmVudDtsKG4sMiwwLCJhY2NlbnQiKSxsKG4sNywwKSxsKG4sMjIsMCksbChuLDI2LDAsZS5rYihuLDI2LDAsZS5iYihuLDI3KS50cmFuc2Zvcm0oYS5pc0hhbmRzZXQkKSk/Im92ZXIiOiJzaWRlIixhLm9wZW5lZFNpZGVOYXYsInRydWUiKSxsKG4sMzAsMCwicHJpbWFyeSIpLGwobiwzNywwKSxsKG4sNDAsMCxhLnNpZGVNZW51TGlzdCxhLnNpZGVNZW51Q29uZmlnKSxsKG4sNDgsMCxsKG4sNDksMCwiLi4vc2l0ZW1hcCIpKSxsKG4sNTEsMCksbChuLDU2LDAsInJvdyIpLGwobiw1NywwLCJjZW50ZXIiKSxsKG4sNTksMCwiMSAwIDUwMHB4IiksbChuLDYxLDApfSxmdW5jdGlvbihsLG4pe3ZhciBhPW4uY29tcG9uZW50O2wobiwxLDAsZS5iYihuLDIpLl90b29sYmFyUm93cy5sZW5ndGg+MCwwPT09ZS5iYihuLDIpLl90b29sYmFyUm93cy5sZW5ndGgpLGwobiw0LDAsZS5iYihuLDUpLmRpc2FibGVkfHxudWxsLCJOb29wQW5pbWF0aW9ucyI9PT1lLmJiKG4sNSkuX2FuaW1hdGlvbk1vZGUpLGwobiw2LDAsZS5iYihuLDcpLmlubGluZSksbChuLDIxLDAsZS5iYihuLDIyKS5fYmFja2Ryb3BPdmVycmlkZSksbChuLDI1LDAsZS5rYihuLDI1LDAsZS5iYihuLDI4KS50cmFuc2Zvcm0oYS5pc0hhbmRzZXQkKSk/ImRpYWxvZyI6Im5hdmlnYXRpb24iLGUuYmIobiwyNikuX2FuaW1hdGlvblN0YXRlLG51bGwsImVuZCI9PT1lLmJiKG4sMjYpLnBvc2l0aW9uLCJvdmVyIj09PWUuYmIobiwyNikubW9kZSwicHVzaCI9PT1lLmJiKG4sMjYpLm1vZGUsInNpZGUiPT09ZS5iYihuLDI2KS5tb2RlLGUuYmIobiwyNikuZml4ZWRJblZpZXdwb3J0LGUuYmIobiwyNikuZml4ZWRJblZpZXdwb3J0P2UuYmIobiwyNikuZml4ZWRUb3BHYXA6bnVsbCxlLmJiKG4sMjYpLmZpeGVkSW5WaWV3cG9ydD9lLmJiKG4sMjYpLmZpeGVkQm90dG9tR2FwOm51bGwpLGwobiwyOSwwLGUuYmIobiwzMCkuX3Rvb2xiYXJSb3dzLmxlbmd0aD4wLDA9PT1lLmJiKG4sMzApLl90b29sYmFyUm93cy5sZW5ndGgpLGwobiwzNCwwLGUuYmIobiwzNSkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PWUuYmIobiwzNSkuX2FuaW1hdGlvbk1vZGUpLGwobiwzNiwwLGUuYmIobiwzNykuaW5saW5lKSxsKG4sNDMsMCxlLmJiKG4sNDQpLl9hdmF0YXJ8fGUuYmIobiw0NCkuX2ljb24sZS5iYihuLDQ0KS5fYXZhdGFyfHxlLmJiKG4sNDQpLl9pY29uLGUuYmIobiw0OCkudGFyZ2V0LGUuYmIobiw0OCkuaHJlZiksbChuLDUwLDAsZS5iYihuLDUxKS5pbmxpbmUpLGwobiw1NCwwLGUuYmIobiw1NSkuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMubGVmdCxlLmJiKG4sNTUpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfXZhciBlbj1lLk5hKCJhcHAtcm9vdCIsZCxmdW5jdGlvbihsKXtyZXR1cm4gZS5sYigwLFsobCgpKCksZS5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1yb290IixbXSxudWxsLG51bGwsbnVsbCxhbixubikpLGUuUWEoMSwxMTQ2ODgsbnVsbCwwLGQsW2kuYSxZLmwscy5hXSxudWxsLG51bGwpXSxmdW5jdGlvbihsLG4pe2wobiwxLDApfSxudWxsKX0se30se30sW10pLHRuPWEoIlpZanQiKSx1bj1hKCJOU1lMIikscm49YSgiaWhZWSIpLG9uPWEoImVEa1AiKSxjbj1hKCJtVnNhIiksc249YSgidC9OYSIpLGRuPWEoIk0yTHgiKSxibj1hKCJxQWxTIikscG49YSgiTEM1cCIpLG1uPWEoIlloYk8iKSxobj1hKCI0YzM1IiksZm49YSgiaFVXUCIpLGduPWEoIjNwSlEiKSxfbj1hKCJWOXErIiksdm49YSgiMC91USIpLHhuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChsLG4pe3RoaXMucm91dGVyPWwsdGhpcy5jaHVua0xvYWRlcj1ufXJldHVybiBsLnByb3RvdHlwZS5jYW5BY3RpdmF0ZT1mdW5jdGlvbihsLG4pe2lmKDA9PXQuYS5wcm9kdWN0aW9uKXJldHVybiBPYmplY3Qodm4uYSkobmV3IFByb21pc2UoZnVuY3Rpb24obCxuKXtsKCEwKX0pKTt2YXIgYT1uLnVybDtyZXR1cm4gY29uc29sZS5sb2coIkNodW5rR3VhcmQgOiAiK2EpLHRoaXMuY2h1bmtMb2FkZXIuYXN5bmNMb2FkUGFnZUNodW5rKGEpfSxsLm5nSW5qZWN0YWJsZURlZj1lLlUoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwoZS5ZKFkubCksZS5ZKHMuYSkpfSx0b2tlbjpsLHByb3ZpZGVkSW46InJvb3QifSksbH0oKSx5bj1mdW5jdGlvbigpe30sd249YSgicFpoTSIpLGtuPWEoIllTaDIiKSxSbj1lLk9hKG8sW2RdLGZ1bmN0aW9uKGwpe3JldHVybiBlLllhKFtlLlphKDUxMixlLmosZS5EYSxbWzgsW2IuYSx5LGoscmwsc2wsbWwsX2wsd2wscWwsemwuYSxhbCxlbl1dLFszLGUual0sZS54XSksZS5aYSg1MTIwLGUudSxlLk1hLFtbMyxlLnVdXSksZS5aYSg0NjA4LHUubSx1LmwsW2UudSxbMix1LnddXSksZS5aYSg1MTIwLGUucyxlLkthLFtdKSxlLlphKDUxMjAsZS50LGUuTGEsW10pLGUuWmEoNDYwOCx0bi5jLHRuLmwsW3UuZF0pLGUuWmEoNjE0NCxlLkgsbnVsbCxbdG4uY10pLGUuWmEoNDYwOCx0bi5mLHRuLmgsW10pLGUuWmEoNTEyMCx0bi5kLGZ1bmN0aW9uKGwsbixhLGUsdCx1LHIsbyl7cmV0dXJuW25ldyB0bi5qKGwsbixhKSxuZXcgdG4ubyhlKSxuZXcgdG4ubih0LHUscixvKV19LFt1LmQsZS56LGUuQix1LmQsdS5kLHRuLmYsZS5FYSxbMix0bi5nXV0pLGUuWmEoNDYwOCx0bi5lLHRuLmUsW3RuLmQsZS56XSksZS5aYSgxMzU2ODAsdG4ubSx0bi5tLFt1LmRdKSxlLlphKDQ2MDgsdG4uayx0bi5rLFt0bi5lLHRuLm1dKSxlLlphKDUxMjAsdW4uYSxxLmUsW10pLGUuWmEoNTEyMCx1bi5jLHEuZixbXSksZS5aYSg0NjA4LHVuLmIscS5kLFt1LmQsdW4uYSx1bi5jXSksZS5aYSg1MTIwLGUuRixxLmcsW3RuLmssdW4uYixlLnpdKSxlLlphKDYxNDQsdG4ucCxudWxsLFt0bi5tXSksZS5aYSg0NjA4LGUuTyxlLk8sW2Uuel0pLGUuWmEoNDYwOCxybi5iLHEuYyxbZS5GLHRuLmJdKSxlLlphKDQ2MDgsbG4uayxsbi5qLFtsbi5kLGxuLmhdKSxlLlphKDUxMjAsWS5pLFkuQyxbWS5BXSksZS5aYSg1MTIwLGUuYixmdW5jdGlvbihsLG4sYSl7cmV0dXJuW2xuLm4obCxuKSxhXX0sW3UuZCxlLkIsWS5pXSksZS5aYSg1MTIwLFkuYSxZLnosW1kubF0pLGUuWmEoNDYwOCxZLmUsWS5lLFtdKSxlLlphKDYxNDQsWS5nLG51bGwsW1kuZV0pLGUuWmEoMTM1NjgwLFkucCxZLnAsW1kubCxlLncsZS5pLGUucixZLmddKSxlLlphKDQ2MDgsWS5mLFkuZixbXSksZS5aYSg1MTIwLFkuRCxZLnYsW1kubCx1LnMsWS5oXSksZS5aYSg0NjA4LG9uLmEsb24uYSxbb24uZyxvbi5jLGUuaixvbi5mLG9uLmQsZS5yLGUueix1LmQsVy5iXSksZS5aYSg1MTIwLG9uLmgsb24uaSxbb24uYV0pLGUuWmEoNTEyMCxjbi5hLGNuLmMsW29uLmFdKSxlLlphKDQ2MDgsc24uaCxzbi5uLFt1LmQsZS5CLHNuLmxdKSxlLlphKDQ2MDgsc24ubyxzbi5vLFtzbi5oLHNuLm1dKSxlLlphKDUxMjAsc24uYSxmdW5jdGlvbihsKXtyZXR1cm5bbF19LFtzbi5vXSksZS5aYSg0NjA4LE4uZCxOLmQsW10pLGUuWmEoNDYwOCxkbi5jLGRuLmMsW10pLGUuWmEoMTA3Mzc0MjMzNix1LmMsdS5jLFtdKSxlLlphKDEwMjQsZS5tLHRuLnEsW10pLGUuWmEoMTAyNCxlLnksZnVuY3Rpb24oKXtyZXR1cm5bWS51KCldfSxbXSksZS5aYSg1MTIsWS5BLFkuQSxbZS5yXSksZS5aYSg1MTIsc24uayxzbi5rLFtdKSxlLlphKDIwNDgsc24uaSxudWxsLFtzbi5rXSksZS5aYSg1MTIsc24uZyxzbi5nLFtzbi5pXSksZS5aYSgyMDQ4LHNuLmIsbnVsbCxbc24uZ10pLGUuWmEoNTEyLHNuLmYsc24uaixbc24uYixlLnJdKSxlLlphKDUxMixzbi5jLHNuLmMsW3NuLmZdKSxlLlphKDUxMixyLmEsci5hLFtzbi5jXSksZS5aYSgxMDI0LGUuZCxmdW5jdGlvbihsLG4sYSl7cmV0dXJuW3RuLnIobCksWS5CKG4pLChlPWEsZnVuY3Rpb24oKXtyZXR1cm4gZS5sb2FkUGFnZUF0SW5pdCgpfSldO3ZhciBlfSxbWzIsZS55XSxZLkEsci5hXSksZS5aYSg1MTIsZS5lLGUuZSxbWzIsZS5kXV0pLGUuWmEoMTMxNTg0LGUuZyxlLmcsW2UueixlLkVhLGUucixlLm0sZS5qLGUuZV0pLGUuWmEoMTA3Mzc0MjMzNixlLmYsZS5mLFtlLmddKSxlLlphKDEwNzM3NDIzMzYsdG4uYSx0bi5hLFtbMyx0bi5hXV0pLGUuWmEoMTA3Mzc0MjMzNixxLmIscS5iLFtdKSxlLlphKDEwNzM3NDIzMzYsVy5hLFcuYSxbXSksZS5aYSgxMDczNzQyMzM2LE4ubCxOLmwsW1syLE4uZV1dKSxlLlphKDEwNzM3NDIzMzYsVmwuYixWbC5iLFtdKSxlLlphKDEwNzM3NDIzMzYsRi5iLEYuYixbXSksZS5aYSgxMDczNzQyMzM2LE4udixOLnYsW10pLGUuWmEoMTA3Mzc0MjMzNixCLmMsQi5jLFtdKSxlLlphKDEwNzM3NDIzMzYsYm4uYixibi5iLFtdKSxlLlphKDEwNzM3NDIzMzYsV2wuaCxXbC5oLFtdKSxlLlphKDEwNzM3NDIzMzYsSC5iLEguYixbXSksZS5aYSgxMDczNzQyMzM2LE4ubSxOLm0sW10pLGUuWmEoMTA3Mzc0MjMzNixOLnQsTi50LFtdKSxlLlphKDEwNzM3NDIzMzYscG4uYixwbi5iLFtdKSxlLlphKDEwNzM3NDIzMzYsSmwuYyxKbC5jLFtdKSxlLlphKDEwNzM3NDIzMzYsbW4uYyxtbi5jLFtdKSxlLlphKDEwNzM3NDIzMzYsaG4uZixobi5mLFtdKSxlLlphKDEwNzM3NDIzMzYsdy5iLHcuYixbXSksZS5aYSgxMDczNzQyMzM2LGxuLmUsbG4uZSxbXSksZS5aYSgxMDczNzQyMzM2LFhsLmMsWGwuYyxbXSksZS5aYSgxMDczNzQyMzM2LGZuLmEsZm4uYSxbXSksZS5aYSgxMDczNzQyMzM2LGduLmEsZ24uYSxbXSksZS5aYSgxMDczNzQyMzM2LF9uLmEsX24uYSxbWzIsbG4ubF0sZS5CXSksZS5aYSgxMDI0LFkudCxZLngsW1szLFkubF1dKSxlLlphKDUxMixZLnIsWS5jLFtdKSxlLlphKDUxMixZLmIsWS5iLFtdKSxlLlphKDI1NixZLmgse3VzZUhhc2g6ITB9LFtdKSxlLlphKDEwMjQsdS5oLFkudyxbdS5yLFsyLHUuYV0sWS5oXSksZS5aYSg1MTIsdS5nLHUuZyxbdS5oXSksZS5aYSg1MTIsZS5pLGUuaSxbXSksZS5aYSg1MTIsZS53LGUuTCxbZS5pLFsyLGUuTV1dKSxlLlphKDEwMjQsWS5qLGZ1bmN0aW9uKCl7cmV0dXJuW1t7cGF0aDoiZGFzaGJvYXJkIixjb21wb25lbnQ6XyxjYW5BY3RpdmF0ZTpbeG5dfSx7cGF0aDoic2l0ZW1hcCIsY29tcG9uZW50OlAsY2FuQWN0aXZhdGU6W3huXX0se3BhdGg6ImxhYm5vdGVib29rLzpwYWdlcGF0aCIsbG9hZENoaWxkcmVuOiIuL3dpa2ktbGlnaHRwcm94eS93aWtpLWxpZ2h0cHJveHktbGF5ZXIubW9kdWxlI1dpa2lMaWdodHByb3h5TGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOlt4bl19LHtwYXRoOiJsYWJub3RlYm9vayIsbG9hZENoaWxkcmVuOiIuL3dpa2ktbGlnaHRwcm94eS93aWtpLWxpZ2h0cHJveHktbGF5ZXIubW9kdWxlI1dpa2lMaWdodHByb3h5TGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOlt4bl19LHtwYXRoOiJ0ZWFtIixsb2FkQ2hpbGRyZW46Ii4vdGVhbS1yb3N0ZXIvdGVhbS1yb3N0ZXItbGF5ZXIubW9kdWxlI1RlYW1Sb3N0ZXJMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W3huXX0se3BhdGg6ImF0dHJpYnV0aW9uIixsb2FkQ2hpbGRyZW46Ii4vYXR0cmlidXRpb24vYXR0cmlidXRpb24tbGF5ZXIubW9kdWxlI0F0dHJpYnV0aW9uTGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOlt4bl19LHtwYXRoOiJwcm9qZWN0Iixjb21wb25lbnQ6ZWwsY2FuQWN0aXZhdGU6W3huXX0se3BhdGg6ImJpb2xvZ3kiLGxvYWRDaGlsZHJlbjoiLi9iaW9sb2d5LXNlY3Rpb24vYmlvbG9neS1zZWN0aW9uLWxheWVyLm1vZHVsZSNCaW9sb2d5U2VjdGlvbkxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbeG5dfSx7cGF0aDoic29mdHdhcmUiLGNvbXBvbmVudDpvbCxjYW5BY3RpdmF0ZTpbeG5dfSx7cGF0aDoibW9kZWxpbmciLGNvbXBvbmVudDpkbCxjYW5BY3RpdmF0ZTpbeG5dfSx7cGF0aDoiaHVtYW4tcHJhY3RpY2VzIixjb21wb25lbnQ6aGwsY2FuQWN0aXZhdGU6W3huXX0se3BhdGg6ImNvbGxhYm9yYXRpb25zIixjb21wb25lbnQ6dmwsY2FuQWN0aXZhdGU6W3huXX0se3BhdGg6InJlZmVyZW5jZXMiLGNvbXBvbmVudDpqbCxjYW5BY3RpdmF0ZTpbeG5dfSx7cGF0aDoic3VwcG9ydCIsbG9hZENoaWxkcmVuOiIuL3N1cHBvcnQtc2VjdGlvbi9zdXBwb3J0LXNlY3Rpb24tbGF5ZXIubW9kdWxlI1N1cHBvcnRTZWN0aW9uTGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOlt4bl19LHtwYXRoOiIiLHJlZGlyZWN0VG86ImRhc2hib2FyZCIscGF0aE1hdGNoOiJmdWxsIn1dXX0sW10pLGUuWmEoMTAyNCxZLmwsWS55LFtlLmcsWS5yLFkuYix1LmcsZS5yLGUudyxlLmksWS5qLFkuaCxbMixZLnFdLFsyLFkua11dKSxlLlphKDEwNzM3NDIzMzYsWS5uLFkubixbWzIsWS50XSxbMixZLmxdXSksZS5aYSgxMDczNzQyMzM2LHluLHluLFtdKSxlLlphKDEwNzM3NDIzMzYsbS5mLG0uZixbXSksZS5aYSgxMDczNzQyMzM2LG9uLmUsb24uZSxbXSksZS5aYSgxMDczNzQyMzM2LGNuLmIsY24uYixbXSksZS5aYSgxMDczNzQyMzM2LHNuLmUsc24uZSxbXSksZS5aYSgxMDczNzQyMzM2LHNuLmQsc24uZCxbXSksZS5aYSgxMDczNzQyMzM2LHduLmEsd24uYSxbXSksZS5aYSgxMDczNzQyMzM2LFlsLmIsWWwuYixbXSksZS5aYSgxMDczNzQyMzM2LFlsLmEsWWwuYSxbXSksZS5aYSgxMDczNzQyMzM2LFQuZCxULmQsW10pLGUuWmEoMTA3Mzc0MjMzNixELmQsRC5kLFtdKSxlLlphKDEwNzM3NDIzMzYsUmwucCxSbC5wLFtdKSxlLlphKDEwNzM3NDIzMzYsa2wubSxrbC5tLFtdKSxlLlphKDEwNzM3NDIzMzYsZG4uZCxkbi5kLFtdKSxlLlphKDEwNzM3NDIzMzYsSy5kLEsuZCxbXSksZS5aYSgxMDczNzQyMzM2LE9sLmMsT2wuYyxbXSksZS5aYSgxMDczNzQyMzM2LE1sLmIsTWwuYixbXSksZS5aYSgxMDI0LGUuYyxlLkphLFtdKSxlLlphKDEwNzM3NDIzMzYsbyxvLFtlLkIsZS5jXSksZS5aYSgyNTYsZS5DYSwhMCxbXSksZS5aYSgyNTYscS5hLCJCcm93c2VyQW5pbWF0aW9ucyIsW10pLGUuWmEoMjU2LHNuLmwsIlhTUkYtVE9LRU4iLFtdKSxlLlphKDI1Nixzbi5tLCJYLVhTUkYtVE9LRU4iLFtdKSxlLlphKDI1NixELmEse3NlcGFyYXRvcktleUNvZGVzOltrbi5mXX0sW10pXSl9KTt0LmEucHJvZHVjdGlvbiYmT2JqZWN0KGUuVikoKSx0bi5pKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShSbikuY2F0Y2goZnVuY3Rpb24obCl7cmV0dXJuIGNvbnNvbGUubG9nKGwpfSl9fSxbWzQsNSw2XV1dKTs=");eval(base64script); </script>
+
<link rel="stylesheet" href="data:text/css;base64,Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojNjczYWI3O2NhcmV0LWNvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZmQ3NDB9Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QxYzRlOX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNTdmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZjZGQyfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6IzY3M2FiNztzdHJva2U6IzYyMDAzY30ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmZkNzQwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0uY2FsLW1vbnRoLXZpZXcgLmNhbC1oZWFkZXJ7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZGVyfS5jYWwtbW9udGgtdmlldyAuY2FsLWNlbGwtcm93OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0uY2FsLW1vbnRoLXZpZXcgLmNhbC1oZWFkZXIgLmNhbC1jZWxse3BhZGRpbmc6NXB4IDA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9LmNhbC1tb250aC12aWV3IC5jYWwtY2VsbC1yb3cgLmNhbC1jZWxsOmhvdmVyLC5jYWwtbW9udGgtdmlldyAuY2FsLWNlbGwuY2FsLWhhcy1ldmVudHMuY2FsLW9wZW57YmFja2dyb3VuZC1jb2xvcjojZWRlZGVkfS5jYWwtbW9udGgtdmlldyAuY2FsLWRheXN7Ym9yZGVyOjFweCBzb2xpZCAjZTFlMWUxO2JvcmRlci1ib3R0b206MH0uY2FsLW1vbnRoLXZpZXcgLmNhbC1jZWxsLXRvcHttaW4taGVpZ2h0Ojc4cHg7ZmxleDoxfS5jYWwtbW9udGgtdmlldyAuY2FsLWNlbGwtcm93ey1qcy1kaXNwbGF5OmZsZXg7ZGlzcGxheTpmbGV4fS5jYWwtbW9udGgtdmlldyAuY2FsLWNlbGx7ZmxvYXQ6bGVmdDtmbGV4OjE7LWpzLWRpc3BsYXk6ZmxleDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmNhbC1tb250aC12aWV3IC5jYWwtZGF5LWNlbGx7bWluLWhlaWdodDoxMDBweH0uY2FsLW1vbnRoLXZpZXcgLmNhbC1kYXktY2VsbDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2UxZTFlMX0uY2FsLW1vbnRoLXZpZXcgLmNhbC1kYXlzIC5jYWwtY2VsbC1yb3d7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2UxZTFlMX0uY2FsLW1vbnRoLXZpZXcgLmNhbC1kYXktYmFkZ2V7bWFyZ2luLXRvcDoxOHB4O21hcmdpbi1sZWZ0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjojYjk0YTQ4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDoxMHB4O3BhZGRpbmc6M3B4IDdweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLXJhZGl1czoxMHB4fS5jYWwtbW9udGgtdmlldyAuY2FsLWRheS1udW1iZXJ7Zm9udC1zaXplOjEuMmVtO2ZvbnQtd2VpZ2h0OjQwMDtvcGFjaXR5Oi41O21hcmdpbi10b3A6MTVweDttYXJnaW4tcmlnaHQ6MTVweDtmbG9hdDpyaWdodDttYXJnaW4tYm90dG9tOjEwcHh9LmNhbC1tb250aC12aWV3IC5jYWwtZXZlbnRze2ZsZXg6MTthbGlnbi1pdGVtczpmbGV4LWVuZDttYXJnaW46M3B4O2xpbmUtaGVpZ2h0OjEwcHg7LWpzLWRpc3BsYXk6ZmxleDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNhbC1tb250aC12aWV3IC5jYWwtZXZlbnR7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4O2JhY2tncm91bmQtY29sb3I6IzFlOTBmZjtib3JkZXItY29sb3I6I2QxZThmZjtjb2xvcjojZmZmfS5jYWwtbW9udGgtdmlldyAuY2FsLWV2ZW50LXRpdGxlOmxpbmt7Y29sb3I6Y3VycmVudENvbG9yfS5jYWwtbW9udGgtdmlldyAuY2FsLWRheS1jZWxsLmNhbC1pbi1tb250aC5jYWwtaGFzLWV2ZW50c3tjdXJzb3I6cG9pbnRlcn0uY2FsLW1vbnRoLXZpZXcgLmNhbC1kYXktY2VsbC5jYWwtb3V0LW1vbnRoIC5jYWwtZGF5LW51bWJlcntvcGFjaXR5Oi4xO2N1cnNvcjpkZWZhdWx0fS5jYWwtbW9udGgtdmlldyAuY2FsLWRheS1jZWxsLmNhbC13ZWVrZW5kIC5jYWwtZGF5LW51bWJlcntjb2xvcjojOGIwMDAwfS5jYWwtbW9udGgtdmlldyAuY2FsLWRheS1jZWxsLmNhbC10b2RheXtiYWNrZ3JvdW5kLWNvbG9yOiNlOGZkZTd9LmNhbC1tb250aC12aWV3IC5jYWwtZGF5LWNlbGwuY2FsLXRvZGF5IC5jYWwtZGF5LW51bWJlcntmb250LXNpemU6MS45ZW19LmNhbC1tb250aC12aWV3IC5jYWwtZGF5LWNlbGwuY2FsLWRyYWctb3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTAhaW1wb3J0YW50fS5jYWwtbW9udGgtdmlldyAuY2FsLW9wZW4tZGF5LWV2ZW50c3twYWRkaW5nOjE1cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym94LXNoYWRvdzppbnNldCAwIDAgMTVweCAwIHJnYmEoMCwwLDAsLjUpfS5jYWwtbW9udGgtdmlldyAuY2FsLW9wZW4tZGF5LWV2ZW50cyAuY2FsLWV2ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHh9LmNhbC1tb250aC12aWV3IC5jYWwtb3V0LW1vbnRoIC5jYWwtZGF5LWJhZGdlLC5jYWwtbW9udGgtdmlldyAuY2FsLW91dC1tb250aCAuY2FsLWV2ZW50e29wYWNpdHk6LjN9LmNhbC13ZWVrLXZpZXcgLmNhbC1kYXktaGVhZGVyc3stanMtZGlzcGxheTpmbGV4O2Rpc3BsYXk6ZmxleDttYXJnaW4tYm90dG9tOjNweDtib3JkZXI6MXB4IHNvbGlkICNlMWUxZTE7bWFyZ2luLWxlZnQ6MnB4O21hcmdpbi1yaWdodDoycHh9LmNhbC13ZWVrLXZpZXcgLmNhbC1kYXktaGVhZGVycyAuY2FsLWhlYWRlcntmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo1cHh9LmNhbC13ZWVrLXZpZXcgLmNhbC1kYXktaGVhZGVycyAuY2FsLWhlYWRlcjpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2UxZTFlMX0uY2FsLXdlZWstdmlldyAuY2FsLWRheS1oZWFkZXJzIC5jYWwtZHJhZy1vdmVyLC5jYWwtd2Vlay12aWV3IC5jYWwtZGF5LWhlYWRlcnMgLmNhbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWRlZGVkfS5jYWwtd2Vlay12aWV3IC5jYWwtZGF5LWhlYWRlcnMgc3Bhbntmb250LXdlaWdodDo0MDA7b3BhY2l0eTouNX0uY2FsLXdlZWstdmlldyAuY2FsLWV2ZW50cy1yb3d7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjMzcHh9LmNhbC13ZWVrLXZpZXcgLmNhbC1ldmVudC1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGV9LmNhbC13ZWVrLXZpZXcgLmNhbC1ldmVudHtwYWRkaW5nOjAgMTBweDtmb250LXNpemU6MTJweDttYXJnaW4tbGVmdDoycHg7bWFyZ2luLXJpZ2h0OjJweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O2JhY2tncm91bmQtY29sb3I6I2QxZThmZjtib3JkZXI6MXB4IHNvbGlkICMxZTkwZmY7Y29sb3I6IzFlOTBmZn0uY2FsLXdlZWstdmlldyAuY2FsLWV2ZW50LXRpdGxlOmxpbmt7Y29sb3I6Y3VycmVudENvbG9yfS5jYWwtd2Vlay12aWV3IC5jYWwtZHJhZ2dhYmxle2N1cnNvcjptb3ZlfS5jYWwtd2Vlay12aWV3IC5jYWwtc3RhcnRzLXdpdGhpbi13ZWVrIC5jYWwtZXZlbnR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHh9LmNhbC13ZWVrLXZpZXcgLmNhbC1lbmRzLXdpdGhpbi13ZWVrIC5jYWwtZXZlbnR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjVweH0uY2FsLXdlZWstdmlldyAuY2FsLWhlYWRlci5jYWwtdG9kYXl7YmFja2dyb3VuZC1jb2xvcjojZThmZGU3fS5jYWwtd2Vlay12aWV3IC5jYWwtaGVhZGVyLmNhbC13ZWVrZW5kIHNwYW57Y29sb3I6IzhiMDAwMH0uY2FsLXdlZWstdmlldyAuY2FsLWV2ZW50LC5jYWwtd2Vlay12aWV3IC5jYWwtaGVhZGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uY2FsLWRheS12aWV3IC5jYWwtaG91ci1yb3dze3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZTFlMWUxO292ZXJmbG93LXg6c2Nyb2xsO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYWwtZGF5LXZpZXcgLmNhbC1ob3VyOm50aC1jaGlsZChvZGQpe2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0uY2FsLWRheS12aWV3IC5jYWwtaG91ci1zZWdtZW50LC5jYWwtZGF5LXZpZXcgbXdsLWNhbGVuZGFyLWRheS12aWV3LWhvdXItc2VnbWVudHtkaXNwbGF5OmJsb2NrfS5jYWwtZGF5LXZpZXcgLmNhbC1ob3VyLXNlZ21lbnQ6OmFmdGVye2NvbnRlbnQ6J1wwMGEwJ30uY2FsLWRheS12aWV3IC5jYWwtaG91cjpsYXN0LWNoaWxkIDpub3QoOmxhc3QtY2hpbGQpIC5jYWwtaG91ci1zZWdtZW50LC5jYWwtZGF5LXZpZXcgLmNhbC1ob3VyOm5vdCg6bGFzdC1jaGlsZCkgLmNhbC1ob3VyLXNlZ21lbnR7Ym9yZGVyLWJvdHRvbTp0aGluIGRhc2hlZCAjZTFlMWUxfS5jYWwtZGF5LXZpZXcgLmNhbC10aW1le2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nLXRvcDo1cHg7d2lkdGg6NzBweDt0ZXh0LWFsaWduOmNlbnRlcn0uY2FsLWRheS12aWV3IC5jYWwtaG91ci1zZWdtZW50LmNhbC1hZnRlci1ob3VyLXN0YXJ0IC5jYWwtdGltZXtkaXNwbGF5Om5vbmV9LmNhbC1kYXktdmlldyAuY2FsLWRyYWctb3ZlciAuY2FsLWhvdXItc2VnbWVudCwuY2FsLWRheS12aWV3IC5jYWwtaG91ci1zZWdtZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VkZWRlZH0uY2FsLWRheS12aWV3IC5jYWwtZXZlbnQtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlfS5jYWwtZGF5LXZpZXcgLmNhbC1ldmVudHtwYWRkaW5nOjVweDtmb250LXNpemU6MTJweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7aGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQtY29sb3I6I2QxZThmZjtib3JkZXI6MXB4IHNvbGlkICMxZTkwZmY7Y29sb3I6IzFlOTBmZjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmNhbC1kYXktdmlldyAuY2FsLWV2ZW50LXRpdGxlOmxpbmt7Y29sb3I6Y3VycmVudENvbG9yfS5jYWwtZGF5LXZpZXcgLmNhbC1kcmFnZ2FibGV7Y3Vyc29yOm1vdmV9LmNhbC1kYXktdmlldyAuY2FsLXN0YXJ0cy13aXRoaW4tZGF5IC5jYWwtZXZlbnR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NXB4fS5jYWwtZGF5LXZpZXcgLmNhbC1lbmRzLXdpdGhpbi1kYXkgLmNhbC1ldmVudHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjVweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo1cHh9LmNhbC1kYXktdmlldyAuY2FsLWFsbC1kYXktZXZlbnR7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZH0uY2FsLXRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDcwO2Rpc3BsYXk6YmxvY2s7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWJyZWFrOmF1dG87bGluZS1oZWlnaHQ6MS41O3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO2ZvbnQtc2l6ZToxMXB4O3dvcmQtd3JhcDpicmVhay13b3JkO29wYWNpdHk6Ljl9LmNhbC10b29sdGlwLmNhbC10b29sdGlwLXRvcHtwYWRkaW5nOjVweCAwO21hcmdpbi10b3A6LTNweH0uY2FsLXRvb2x0aXAuY2FsLXRvb2x0aXAtdG9wIC5jYWwtdG9vbHRpcC1hcnJvd3tib3R0b206MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNXB4O2JvcmRlci13aWR0aDo1cHggNXB4IDA7Ym9yZGVyLXRvcC1jb2xvcjojMDAwfS5jYWwtdG9vbHRpcC5jYWwtdG9vbHRpcC1yaWdodHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjNweH0uY2FsLXRvb2x0aXAuY2FsLXRvb2x0aXAtcmlnaHQgLmNhbC10b29sdGlwLWFycm93e3RvcDo1MCU7bGVmdDowO21hcmdpbi10b3A6LTVweDtib3JkZXItd2lkdGg6NXB4IDVweCA1cHggMDtib3JkZXItcmlnaHQtY29sb3I6IzAwMH0uY2FsLXRvb2x0aXAuY2FsLXRvb2x0aXAtYm90dG9te3BhZGRpbmc6NXB4IDA7bWFyZ2luLXRvcDozcHh9LmNhbC10b29sdGlwLmNhbC10b29sdGlwLWJvdHRvbSAuY2FsLXRvb2x0aXAtYXJyb3d7dG9wOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItd2lkdGg6MCA1cHggNXB4O2JvcmRlci1ib3R0b20tY29sb3I6IzAwMH0uY2FsLXRvb2x0aXAuY2FsLXRvb2x0aXAtbGVmdHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0Oi0zcHh9LmNhbC10b29sdGlwLmNhbC10b29sdGlwLWxlZnQgLmNhbC10b29sdGlwLWFycm93e3RvcDo1MCU7cmlnaHQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHg7Ym9yZGVyLWxlZnQtY29sb3I6IzAwMH0uY2FsLXRvb2x0aXAtaW5uZXJ7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDhweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDtib3JkZXItcmFkaXVzOi4yNXJlbX0uY2FsLXRvb2x0aXAtYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgMXB4IDFweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAzcHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAzcHggNHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDhweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA1cHggOHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE0cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowIDRweCA1cHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDdweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAycHggMTZweCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjAgNXB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOXB4IDEycHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNnB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MCA2cHggNnB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCAxMHB4IDE0cHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDRweCAxOHB4IDNweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MCA2cHggN3B4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMXB4IDE1cHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDRweCAyMHB4IDNweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxM3B4IDE5cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyNHB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MCA3cHggOXB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxNHB4IDIxcHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyNnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MCA4cHggOXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNXB4IDIycHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAyOHB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjAgOHB4IDExcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE3cHggMjZweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMycHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowIDlweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxOHB4IDI4cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDdweCAzNHB4IDZweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MCA5cHggMTJweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMTlweCAyOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzZweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMHB4IDMxcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCAzOHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MCAxMHB4IDEzcHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIxcHggMzNweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQwcHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowIDEwcHggMTRweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjJweCAzNXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggNDJweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjAgMTFweCAxNHB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyM3B4IDM2cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NHB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MCAxMXB4IDE1cHggLTdweCByZ2JhKDAsMCwwLC4yKSwwIDI0cHggMzhweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjZweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0jSFFfcGFnZSBoMiwjSFFfcGFnZSBoMywubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0jSFFfcGFnZSAjdG9jdGl0bGUgaDIsI0hRX3BhZ2UgaDQsLm1hdC1oMywubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IGg0e2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSBoNXtmb250OjQwMCAxMS42MnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgaDZ7Zm9udDo0MDAgOS4zOHB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LTIsLm1hdC1ib2R5LXN0cm9uZ3tmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0jSFFfcGFnZSBwLC5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCBwLC5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IHB7bWFyZ2luOjAgMCAxMnB4fS5tYXQtY2FwdGlvbiwubWF0LXNtYWxse2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgNTZweDtsZXR0ZXItc3BhY2luZzotLjA1ZW19Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgNjRweDtsZXR0ZXItc3BhY2luZzotLjAyZW19Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgNjRweDtsZXR0ZXItc3BhY2luZzotLjAwNWVtfS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZSwubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtY2FyZC1jb250ZW50LC5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxlLC5tYXQtY2FyZC1zdWJ0aXRsZXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOHB4fS5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgdHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0uODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMTAycHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMTAycHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyM2VtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNSV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpLC13ZWJraXQtdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMCk7dHJhbnNmb3JtOnNjYWxlKDApfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtcmlwcGxlLWVsZW1lbnR7ZGlzcGxheTpub25lfX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyLC5jZGstb3ZlcmxheS1jb250YWluZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH19LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3B7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yODgpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCwuY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjB9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3h7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja3twb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfUAtd2Via2l0LWtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0ey8qISovfUAtd2Via2l0LWtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7LyohKi99QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7LyohKi99LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kO2FuaW1hdGlvbi1uYW1lOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjJweCAwIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudH0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6Izk2MWU2NH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmNmU0MH0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZhZmFmYX0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6Izk2MWU2NH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiM2MjAwM2N9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZmY2ZTQwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzYyMDAzYztwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNik7dHJhbnNmb3JtOnNjYWxlKC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXstd2Via2l0LXRyYW5zZm9ybTpub25lO3RyYW5zZm9ybTpub25lfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi04cHh9Lm1hdC1iYWRnZS1tZWRpdW0gLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7bGluZS1oZWlnaHQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xMXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDowIDB9Lm1hdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiM2MjAwM2N9Lm1hdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1idXR0b24ubWF0LXdhcm4sLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjEyKX0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEyKX0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjEyKX0ubWF0LWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjEpfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMSl9Lm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4xKX0ubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtbWluaS1mYWIsLm1hdC1yYWlzZWQtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1mYWIubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1mYWIubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWZhYi5tYXQtd2FybiwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtbWluaS1mYWIubWF0LXdhcm4sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJue2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yKX0ubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMil9Lm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4yKX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWNhcmR7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiNmYWZhZmF9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6I2ZhZmFmYSFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwIWltcG9ydGFudH19Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjojYjBiMGIwfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOjAgMH19Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjI2KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtvcGFjaXR5Oi40O2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCwubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUtc3RpY2t5LFttYXQtZm9vdGVyLXJvd10sW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sbWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvd3tiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvdyx0ZC5tYXQtY2VsbCx0ZC5tYXQtZm9vdGVyLWNlbGwsdGgubWF0LWhlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNhbGVuZGFyLWFycm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24sLm1hdC1kYXRlcGlja2VyLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpLC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiM2MjAwM2N9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9QG1lZGlhIChob3Zlcjpub25lKXsubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojZmZmfX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXIsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjppbmhlcml0fS5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWhpbnR7Y29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1lcnJvcntjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMjVlbTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC40MikgMCxyZ2JhKDAsMCwwLC40MikgMzMlLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNDIpIDAscmdiYSgwLDAsMCwuNDIpIDMzJSx0cmFuc3BhcmVudCAwKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjZlNDB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWxpc3QtaXRlbS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOjAgMDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbjpub3QoW2NvbG9yXSksLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZDBiM2M1fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZTBiY2QxfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjY2JjfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojOTYxZTY0fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2ZmNmU0MH0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zZWxlY3QtY29udGVudCwubWF0LXNlbGVjdC1wYW5lbC1kb25lLWFuaW1hdGluZ3tiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdywubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnk6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmNTcyMn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsODcsMzQsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC4xMil9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC43KSxyZ2JhKDAsMCwwLC43KSAycHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoLjAwMDFkZWcscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1ub3QtdG91Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA0LDE4OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyNCwxODgsMjA5LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7YmFja2dyb3VuZDojMzIzMjMyO2NvbG9yOiNmZmZ9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOiM5NjFlNjR9I0hRX3BhZ2UgaDJ7YmFja2dyb3VuZC1jb2xvcjojN2EyNjU5O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1zaXplOjEwMCUgYXV0b30jSFFfcGFnZSAjdG9jdGl0bGUgaDJ7YmFja2dyb3VuZC1jb2xvcjp1bnNldDtjb2xvcjp1bnNldDtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfS5heGlzLS14IC5kb21haW4sLmF4aXMtLXkgLmRvbWFpbntkaXNwbGF5Om5vbmV9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtmbGV4LWJhc2lzOjB9QGZvbnQtZmFjZXtmb250LWZhbWlseTpSb2JvdG87Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3QpO3NyYzpsb2NhbCgiUm9ib3RvIiksbG9jYWwoIlJvYm90by1SZWd1bGFyIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjYvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCJlbWJlZGRlZC1vcGVudHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzBiL1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLndvZmYpIGZvcm1hdCgid29mZiIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnR0ZikgZm9ybWF0KCJ0cnVldHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnN2ZyNSb2JvdG8pIGZvcm1hdCgic3ZnIil9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNYXRlcmlhbEljb25zLVJlZ3VsYXI7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81MS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjgvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzEvMWUvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzMvM2YvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuc3ZnI01hdGVyaWFsSWNvbnMtUmVndWxhcikgZm9ybWF0KCJzdmciKX0ubWF0ZXJpYWwtaWNvbnN7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbDtkaXJlY3Rpb246bHRyOy1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOidsaWdhJzstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9aDEsaDIsaDMsaDQsaDUsaDZ7Ym9yZGVyLWJvdHRvbTowfS5tYXQtbGlzdHtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1uZy1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCkhaW1wb3J0YW50fW5nLWxpc3QtaXRlbSAubWF0LWRpdmlkZXJ7Ym9yZGVyOjB9">
 +
 
 +
<script>var base64script = atob("IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYT1yWzBdLGM9clsxXSxsPXJbMl0scD0wLGY9W107cDxhLmxlbmd0aDtwKyspb1tpPWFbcF1dJiZmLnB1c2gob1tpXVswXSksb1tpXT0wO2ZvcihuIGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbikmJihlW25dPWNbbl0pO2ZvcihzJiZzKHIpO2YubGVuZ3RoOylmLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsbHx8W10pLHQoKX1mdW5jdGlvbiB0KCl7Zm9yKHZhciBlLHI9MDtyPHUubGVuZ3RoO3IrKyl7Zm9yKHZhciB0PXVbcl0sbj0hMCxhPTE7YTx0Lmxlbmd0aDthKyspMCE9PW9bdFthXV0mJihuPSExKTtuJiYodS5zcGxpY2Uoci0tLDEpLGU9aShpLnM9dFswXSkpfXJldHVybiBlfXZhciBuPXt9LG89ezU6MH0sdT1bXTtmdW5jdGlvbiBpKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgdD1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxpKSx0Lmw9ITAsdC5leHBvcnRzfWkuZT1mdW5jdGlvbihlKXt2YXIgcj1bXSx0PW9bZV07aWYoMCE9PXQpaWYodClyLnB1c2godFsyXSk7ZWxzZXt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3Q9b1tlXT1bcixuXX0pO3IucHVzaCh0WzJdPW4pO3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLmNoYXJzZXQ9InV0Zi04IixhLnRpbWVvdXQ9MTIwLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkucCsiIisoe31bZV18fGUpKyIuanMifShlKTt2YXIgYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCh7dHlwZToidGltZW91dCIsdGFyZ2V0OmF9KX0sMTJlNCk7ZnVuY3Rpb24gbChyKXthLm9uZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQoYyk7dmFyIHQ9b1tlXTtpZigwIT09dCl7aWYodCl7dmFyIG49ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSx1PXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmMsaT1uZXcgRXJyb3IoIkxvYWRpbmcgY2h1bmsgIitlKyIgZmFpbGVkLlxuKCIrbisiOiAiK3UrIikiKTtpLnR5cGU9bixpLnJlcXVlc3Q9dSx0WzFdKGkpfW9bZV09dm9pZCAwfX1hLm9uZXJyb3I9YS5vbmxvYWQ9bCx1LmFwcGVuZENoaWxkKGEpfXJldHVybiBQcm9taXNlLmFsbChyKX0saS5tPWUsaS5jPW4saS5kPWZ1bmN0aW9uKGUscix0KXtpLm8oZSxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnR9KX0saS5yPWZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0saS5uPWZ1bmN0aW9uKGUpe3ZhciByPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBpLmQociwiYSIscikscn0saS5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxpLnA9IiIsaS5vZT1mdW5jdGlvbihlKXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9O3ZhciBhPXdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10sYz1hLnB1c2guYmluZChhKTthLnB1c2g9cixhPWEuc2xpY2UoKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylyKGFbbF0pO3ZhciBzPWM7dCgpfShbXSk7KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s3XSx7IityTHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIikuZG9jdW1lbnQ7ZS5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSwiMC9SNCI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sIjBUV3AiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGUpe3ZhciB0PWUucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbihlKXt0JiZ0Lm1hcmsmJnQubWFyayhlKX1mdW5jdGlvbiByKGUsbil7dCYmdC5tZWFzdXJlJiZ0Lm1lYXN1cmUoZSxuKX1pZihuKCJab25lIiksZS5ab25lKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTt2YXIgbyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3RoaXMuX3Byb3BlcnRpZXM9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uYW1lPXQ/dC5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz10JiZ0LnByb3BlcnRpZXN8fHt9LHRoaXMuX3pvbmVEZWxlZ2F0ZT1uZXcgYyh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsdCl9cmV0dXJuIHQuYXNzZXJ0Wm9uZVBhdGNoZWQ9ZnVuY3Rpb24oKXtpZihlLlByb21pc2UhPT1PLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5jdXJyZW50O2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjdXJyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihvLGkpe2lmKE8uaGFzT3duUHJvcGVydHkobykpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK28pO2lmKCFlWyJfX1pvbmVfZGlzYWJsZV8iK29dKXt2YXIgYT0iWm9uZToiK287bihhKSxPW29dPWkoZSx0LFMpLHIoYSxhKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRab25lV2l0aChlKTtpZih0KXJldHVybiB0Ll9wcm9wZXJ0aWVzW2VdfSx0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0Oyl7aWYodC5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdDt0PXQuX3BhcmVudH1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLGUpfSx0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK2UpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxlLHQpLHI9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsdCl9fSx0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj1udWxsKSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLGUsdCxuLHIpfWZpbmFsbHl7RD1ELnBhcmVudH19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09ciYmKHI9bnVsbCksRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsZSx0LG4scil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtEPUQucGFyZW50fX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihlLHQsbil7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIHJ1biBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKGUuc3RhdGUhPT15fHxlLnR5cGUhPT14KXt2YXIgcj1lLnN0YXRlIT1rO3ImJmUuX3RyYW5zaXRpb25UbyhrLG0pLGUucnVuQ291bnQrKzt2YXIgbz1qO2o9ZSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtlLnR5cGU9PUUmJmUuZGF0YSYmIWUuZGF0YS5pc1BlcmlvZGljJiYoZS5jYW5jZWxGbj1udWxsKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsZSx0LG4pfWNhdGNoKGUpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGUpKXRocm93IGV9fWZpbmFsbHl7ZS5zdGF0ZSE9PXkmJmUuc3RhdGUhPT1UJiYoZS50eXBlPT14fHxlLmRhdGEmJmUuZGF0YS5pc1BlcmlvZGljP3ImJmUuX3RyYW5zaXRpb25UbyhtLGspOihlLnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLHImJmUuX3RyYW5zaXRpb25Ubyh5LGsseSkpKSxEPUQucGFyZW50LGo9b319fSx0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lJiZlLnpvbmUhPT10aGlzKWZvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZS56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrZS56b25lLm5hbWUpO3Q9dC5wYXJlbnR9ZS5fdHJhbnNpdGlvblRvKF8seSk7dmFyIG49W107ZS5fem9uZURlbGVnYXRlcz1uLGUuX3pvbmU9dGhpczt0cnl7ZT10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsXyx5KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0KSx0fXJldHVybiBlLl96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsMSksZS5zdGF0ZT09XyYmZS5fdHJhbnNpdGlvblRvKG0sXyksZX0sdC5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHcsZSx0LG4scixudWxsKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KEUsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHgsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2UuX3RyYW5zaXRpb25UbyhiLG0sayk7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsYiksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdCksdH1yZXR1cm4gdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLGUuX3RyYW5zaXRpb25Ubyh5LGIpLGUucnVuQ291bnQ9MCxlfSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fem9uZURlbGVnYXRlczstMT09dCYmKGUuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXS5fdXBkYXRlVGFza0NvdW50KGUudHlwZSx0KX0sdC5fX3N5bWJvbF9fPXosdH0oKSxhPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5oYXNUYXNrKG4scil9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLnNjaGVkdWxlVGFzayhuLHIpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3JldHVybiBlLmludm9rZVRhc2sobixyLG8saSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5jYW5jZWxUYXNrKG4scil9fSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1lLHRoaXMuX3BhcmVudERlbGVnYXRlPXQsdGhpcy5fZm9ya1pTPW4mJihuJiZuLm9uRm9yaz9uOnQuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9biYmKG4ub25Gb3JrP3Q6dC5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1uJiYobi5vbkZvcms/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW50ZXJjZXB0WlM9biYmKG4ub25JbnRlcmNlcHQ/bjp0Ll9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1uJiYobi5vbkludGVyY2VwdD90OnQuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPW4mJihuLm9uSW50ZXJjZXB0P3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246dC5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/dDp0Ll9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPW4mJihuLm9uSGFuZGxlRXJyb3I/bjp0Ll9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9biYmKG4ub25IYW5kbGVFcnJvcj90OnQuX2hhbmRsZUVycm9yRGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1uJiYobi5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246dC5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/dDp0Ll9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VUYXNrWlM9biYmKG4ub25JbnZva2VUYXNrP246dC5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1uJiYobi5vbkludm9rZVRhc2s/dDp0Ll9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPW4mJihuLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9biYmKG4ub25DYW5jZWxUYXNrP246dC5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1uJiYobi5vbkNhbmNlbFRhc2s/dDp0Ll9jYW5jZWxUYXNrRGxndCksdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPW4mJihuLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIgcj1uJiZuLm9uSGFzVGFzazsocnx8dCYmdC5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1yP246YSx0aGlzLl9oYXNUYXNrRGxndD10LHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9ZSxuLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9YSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PXQsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1hLHRoaXMuX2ludm9rZVRhc2tEbGd0PXQsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksbi5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9YSx0aGlzLl9jYW5jZWxUYXNrRGxndD10LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsZSx0KTpuZXcgaShlLHQpfSxlLnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGUsdCxuKTp0fSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxlLHQsbixyLG8pOnQuYXBwbHkobixyKX0sZS5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLGUsdCl9LGUucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuPXQ7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZuLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKG49dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxlLHQpKXx8KG49dCk7ZWxzZSBpZih0LnNjaGVkdWxlRm4pdC5zY2hlZHVsZUZuKHQpO2Vsc2V7aWYodC50eXBlIT13KXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7dih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaW52b2tlVGFzaz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGUsdCxuLHIpOnQuY2FsbGJhY2suYXBwbHkobixyKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHRoaXMuX2NhbmNlbFRhc2taUyluPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGUsdCk7ZWxzZXtpZighdC5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO249dC5jYW5jZWxGbih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaGFzVGFzaz1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gdGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxlLHQpfWNhdGNoKHQpe3RoaXMuaGFuZGxlRXJyb3IoZSx0KX19LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90YXNrQ291bnRzLHI9bltlXSxvPW5bZV09cit0O2lmKG88MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1yJiYwIT1vfHx0aGlzLmhhc1Rhc2sodGhpcy56b25lLHttaWNyb1Rhc2s6bi5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6bi5tYWNyb1Rhc2s+MCxldmVudFRhc2s6bi5ldmVudFRhc2s+MCxjaGFuZ2U6ZX0pfSxlfSgpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4scixvLGksYSxjKXt0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1yLHRoaXMuZGF0YT1pLHRoaXMuc2NoZWR1bGVGbj1hLHRoaXMuY2FuY2VsRm49Yyx0aGlzLmNhbGxiYWNrPW87dmFyIHU9dGhpczt0aGlzLmludm9rZT1uPT09eCYmaSYmaS51c2VHP3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiB0Lmludm9rZVRhc2suY2FsbChlLHUsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gdC5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuKXtlfHwoZT10aGlzKSxQKys7dHJ5e3JldHVybiBlLnJ1bkNvdW50KyssZS56b25lLnJ1blRhc2soZSx0LG4pfWZpbmFsbHl7MT09UCYmZCgpLFAtLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKHksXyl9LHQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuX3N0YXRlIT09dCYmdGhpcy5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrIiAnIit0aGlzLnNvdXJjZSsiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciK2UrIicsIGV4cGVjdGluZyBzdGF0ZSAnIit0KyInIisobj8iIG9yICciK24rIiciOiIiKSsiLCB3YXMgJyIrdGhpcy5fc3RhdGUrIicuIik7dGhpcy5fc3RhdGU9ZSxlPT15JiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ2b2lkIDAhPT10aGlzLmRhdGEuaGFuZGxlSWQ/dGhpcy5kYXRhLmhhbmRsZUlkOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LHR9KCkscz16KCJzZXRUaW1lb3V0IiksbD16KCJQcm9taXNlIiksZj16KCJ0aGVuIikscD1bXSxoPSExO2Z1bmN0aW9uIHYodCl7MD09PVAmJjA9PT1wLmxlbmd0aCYmKG98fGVbbF0mJihvPWVbbF0ucmVzb2x2ZSgwKSksbz9vW2ZdKGQpOmVbc10oZCwwKSksdCYmcC5wdXNoKHQpfWZ1bmN0aW9uIGQoKXtpZighaCl7Zm9yKGg9ITA7cC5sZW5ndGg7KXt2YXIgZT1wO3A9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaChlKXtTLm9uVW5oYW5kbGVkRXJyb3IoZSl9fX1TLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBnPXtuYW1lOiJOTyBaT05FIn0seT0ibm90U2NoZWR1bGVkIixfPSJzY2hlZHVsaW5nIixtPSJzY2hlZHVsZWQiLGs9InJ1bm5pbmciLGI9ImNhbmNlbGluZyIsVD0idW5rbm93biIsdz0ibWljcm9UYXNrIixFPSJtYWNyb1Rhc2siLHg9ImV2ZW50VGFzayIsTz17fSxTPXtzeW1ib2w6eixjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIER9LG9uVW5oYW5kbGVkRXJyb3I6WixtaWNyb3Rhc2tEcmFpbkRvbmU6WixzY2hlZHVsZU1pY3JvVGFzazp2LHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWlbeigiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpaLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIFp9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sc2V0TmF0aXZlUHJvbWlzZTpmdW5jdGlvbihlKXtlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5yZXNvbHZlJiYobz1lLnJlc29sdmUoMCkpfX0sRD17cGFyZW50Om51bGwsem9uZTpuZXcgaShudWxsLG51bGwpfSxqPW51bGwsUD0wO2Z1bmN0aW9uIFooKXt9ZnVuY3Rpb24geihlKXtyZXR1cm4iX196b25lX3N5bWJvbF9fIitlfXIoIlpvbmUiLCJab25lIiksZS5ab25lPWl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsKSxab25lLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1PYmplY3QuZGVmaW5lUHJvcGVydHksaT1uLnN5bWJvbCxhPVtdLGM9aSgiUHJvbWlzZSIpLHU9aSgidGhlbiIpLHM9Il9fY3JlYXRpb25UcmFjZV9fIjtuLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24oZSl7aWYobi5zaG93VW5jYXVnaHRFcnJvcigpKXt2YXIgdD1lJiZlLnJlamVjdGlvbjt0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLHQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6dCwiOyBab25lOiIsZS56b25lLm5hbWUsIjsgVGFzazoiLGUudGFzayYmZS50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLHQsdCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKGUpfX0sbi5taWNyb3Rhc2tEcmFpbkRvbmU9ZnVuY3Rpb24oKXtmb3IoO2EubGVuZ3RoOylmb3IodmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT1hLnNoaWZ0KCk7dHJ5e2Uuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWNhdGNoKGUpe2YoZSl9fTthLmxlbmd0aDspZSgpfTt2YXIgbD1pKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIGYoZSl7bi5vblVuaGFuZGxlZEVycm9yKGUpO3RyeXt2YXIgcj10W2xdO3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLmNhbGwodGhpcyxlKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUudGhlbn1mdW5jdGlvbiBoKGUpe3JldHVybiBlfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIE0ucmVqZWN0KGUpfXZhciBkPWkoInN0YXRlIiksZz1pKCJ2YWx1ZSIpLHk9aSgiZmluYWxseSIpLF89aSgicGFyZW50UHJvbWlzZVZhbHVlIiksbT1pKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxrPSJQcm9taXNlLnRoZW4iLGI9bnVsbCxUPSEwLHc9ITEsRT0wO2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dHJ5e2ooZSx0LG4pfWNhdGNoKHQpe2ooZSwhMSx0KX19fXZhciBPPWZ1bmN0aW9uKCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxTPSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixEPWkoImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBqKGUscixpKXt2YXIgYyx1PU8oKTtpZihlPT09aSl0aHJvdyBuZXcgVHlwZUVycm9yKFMpO2lmKGVbZF09PT1iKXt2YXIgbD1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIGkmJiJmdW5jdGlvbiIhPXR5cGVvZiBpfHwobD1pJiZpLnRoZW4pfWNhdGNoKHQpe3JldHVybiB1KGZ1bmN0aW9uKCl7aihlLCExLHQpfSkoKSxlfWlmKHIhPT13JiZpIGluc3RhbmNlb2YgTSYmaS5oYXNPd25Qcm9wZXJ0eShkKSYmaS5oYXNPd25Qcm9wZXJ0eShnKSYmaVtkXSE9PWIpWihpKSxqKGUsaVtkXSxpW2ddKTtlbHNlIGlmKHIhPT13JiYiZnVuY3Rpb24iPT10eXBlb2YgbCl0cnl7bC5jYWxsKGksdSh4KGUscikpLHUoeChlLCExKSkpfWNhdGNoKHQpe3UoZnVuY3Rpb24oKXtqKGUsITEsdCl9KSgpfWVsc2V7ZVtkXT1yO3ZhciBmPWVbZ107aWYoZVtnXT1pLGVbeV09PT15JiZyPT09VCYmKGVbZF09ZVttXSxlW2ddPWVbX10pLHI9PT13JiZpIGluc3RhbmNlb2YgRXJyb3Ipe3ZhciBwPXQuY3VycmVudFRhc2smJnQuY3VycmVudFRhc2suZGF0YSYmdC5jdXJyZW50VGFzay5kYXRhW3NdO3AmJm8oaSxELHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpwfSl9Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDspeihlLGZbaCsrXSxmW2grK10sZltoKytdLGZbaCsrXSk7aWYoMD09Zi5sZW5ndGgmJnI9PXcpe2VbZF09RTt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrKChjPWkpJiZjLnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oYy5jb25zdHJ1Y3RvciYmYy5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeShjKTpjP2MudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpKyhpJiZpLnN0YWNrPyJcbiIraS5zdGFjazoiIikpfWNhdGNoKHIpe3ZhciB2PXI7di5yZWplY3Rpb249aSx2LnByb21pc2U9ZSx2LnpvbmU9dC5jdXJyZW50LHYudGFzaz10LmN1cnJlbnRUYXNrLGEucHVzaCh2KSxuLnNjaGVkdWxlTWljcm9UYXNrKCl9fX19cmV0dXJuIGV9dmFyIFA9aSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBaKGUpe2lmKGVbZF09PT1FKXt0cnl7dmFyIG49dFtQXTtuJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5jYWxsKHRoaXMse3JlamVjdGlvbjplW2ddLHByb21pc2U6ZX0pfWNhdGNoKGUpe31lW2RdPXc7Zm9yKHZhciByPTA7cjxhLmxlbmd0aDtyKyspZT09PWFbcl0ucHJvbWlzZSYmYS5zcGxpY2UociwxKX19ZnVuY3Rpb24geihlLHQsbixyLG8pe1ooZSk7dmFyIGk9ZVtkXSxhPWk/ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpoOiJmdW5jdGlvbiI9PXR5cGVvZiBvP286djt0LnNjaGVkdWxlTWljcm9UYXNrKGssZnVuY3Rpb24oKXt0cnl7dmFyIHI9ZVtnXSxvPW4mJnk9PT1uW3ldO28mJihuW19dPXIsblttXT1pKTt2YXIgYz10LnJ1bihhLHZvaWQgMCxvJiZhIT09diYmYSE9PWg/W106W3JdKTtqKG4sITAsYyl9Y2F0Y2goZSl7aihuLCExLGUpfX0sbil9dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7dGhpc1tkXT1iLHRoaXNbZ109W107dHJ5e3QmJnQoeCh0aGlzLFQpLHgodGhpcyx3KSl9Y2F0Y2goZSl7aih0aGlzLCExLGUpfX1yZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSxlLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksVCxlKX0sZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksdyxlKX0sZS5yYWNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1uZXcgdGhpcyhmdW5jdGlvbihlLHIpe3Q9ZSxuPXJ9KTtmdW5jdGlvbiBvKGUpe3ImJihyPXQoZSkpfWZ1bmN0aW9uIGkoZSl7ciYmKHI9bihlKSl9Zm9yKHZhciBhPTAsYz1lO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO3AodSl8fCh1PXRoaXMucmVzb2x2ZSh1KSksdS50aGVuKG8saSl9cmV0dXJuIHJ9LGUuYWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9bmV3IHRoaXMoZnVuY3Rpb24oZSxyKXt0PWUsbj1yfSksbz0wLGk9W10sYT0wLGM9ZTthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtwKHUpfHwodT10aGlzLnJlc29sdmUodSkpLHUudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7aVtlXT1uLC0tb3x8dChpKX19KG8pLG4pLG8rK31yZXR1cm4gb3x8dChpKSxyfSxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsbil7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCksbz10LmN1cnJlbnQ7cmV0dXJuIHRoaXNbZF09PWI/dGhpc1tnXS5wdXNoKG8scixlLG4pOnoodGhpcyxvLHIsZSxuKSxyfSxlLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LGUucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCk7blt5XT15O3ZhciByPXQuY3VycmVudDtyZXR1cm4gdGhpc1tkXT09Yj90aGlzW2ddLnB1c2gocixuLGUsZSk6eih0aGlzLHIsbixlLGUpLG59LGV9KCk7TS5yZXNvbHZlPU0ucmVzb2x2ZSxNLnJlamVjdD1NLnJlamVjdCxNLnJhY2U9TS5yYWNlLE0uYWxsPU0uYWxsO3ZhciBDPWVbY109ZS5Qcm9taXNlLFI9dC5fX3N5bWJvbF9fKCJab25lQXdhcmVQcm9taXNlIiksST1yKGUsIlByb21pc2UiKTtJJiYhSS5jb25maWd1cmFibGV8fChJJiZkZWxldGUgSS53cml0YWJsZSxJJiZkZWxldGUgSS52YWx1ZSxJfHwoST17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KSxJLmdldD1mdW5jdGlvbigpe3JldHVybiBlW1JdP2VbUl06ZVtjXX0sSS5zZXQ9ZnVuY3Rpb24odCl7dD09PU0/ZVtSXT10OihlW2NdPXQsdC5wcm90b3R5cGVbdV18fHEodCksbi5zZXROYXRpdmVQcm9taXNlKHQpKX0sbyhlLCJQcm9taXNlIixJKSksZS5Qcm9taXNlPU07dmFyIEYsTD1pKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHEoZSl7dmFyIHQ9ZS5wcm90b3R5cGUsbj1yKHQsInRoZW4iKTtpZighbnx8ITEhPT1uLndyaXRhYmxlJiZuLmNvbmZpZ3VyYWJsZSl7dmFyIG89dC50aGVuO3RbdV09byxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IE0oZnVuY3Rpb24oZSx0KXtvLmNhbGwobixlLHQpfSkudGhlbihlLHQpfSxlW0xdPSEwfX1pZihDKXtxKEMpO3ZhciBBPWUuZmV0Y2g7ImZ1bmN0aW9uIj09dHlwZW9mIEEmJihlLmZldGNoPShGPUEsZnVuY3Rpb24oKXt2YXIgZT1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihlIGluc3RhbmNlb2YgTSlyZXR1cm4gZTt2YXIgdD1lLmNvbnN0cnVjdG9yO3JldHVybiB0W0xdfHxxKHQpLGV9KSl9cmV0dXJuIFByb21pc2VbdC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09YSxNfSk7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixyPU9iamVjdC5jcmVhdGUsbz1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT0iYWRkRXZlbnRMaXN0ZW5lciIsYT0icmVtb3ZlRXZlbnRMaXN0ZW5lciIsYz1ab25lLl9fc3ltYm9sX18oaSksdT1ab25lLl9fc3ltYm9sX18oYSkscz0idHJ1ZSIsbD0iZmFsc2UiLGY9Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gcChlLHQpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scixvKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGUsdCxuLHIsbyl9dmFyIHY9Wm9uZS5fX3N5bWJvbF9fLGQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3csZz1kP3dpbmRvdzp2b2lkIDAseT1kJiZnfHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCxfPSJyZW1vdmVBdHRyaWJ1dGUiLG09W251bGxdO2Z1bmN0aW9uIGsoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmKGVbbl09cChlW25dLHQrIl8iK24pKTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe3JldHVybiFlfHwhMSE9PWUud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0JiZ2b2lkIDA9PT1lLnNldCl9dmFyIFQ9InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHc9ISgibnciaW4geSkmJnZvaWQgMCE9PXkucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpLEU9IXcmJiFUJiYhKCFkfHwhZy5IVE1MRWxlbWVudCkseD12b2lkIDAhPT15LnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSYmIVQmJiEoIWR8fCFnLkhUTUxFbGVtZW50KSxPPXt9LFM9ZnVuY3Rpb24oZSl7aWYoZT1lfHx5LmV2ZW50KXt2YXIgdD1PW2UudHlwZV07dHx8KHQ9T1tlLnR5cGVdPXYoIk9OX1BST1BFUlRZIitlLnR5cGUpKTt2YXIgbj0odGhpc3x8ZS50YXJnZXR8fHkpW3RdLHI9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMD09cnx8cnx8ZS5wcmV2ZW50RGVmYXVsdCgpLHJ9fTtmdW5jdGlvbiBEKG4scixvKXt2YXIgaT1lKG4scik7aWYoIWkmJm8mJmUobyxyKSYmKGk9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksaSYmaS5jb25maWd1cmFibGUpe2RlbGV0ZSBpLndyaXRhYmxlLGRlbGV0ZSBpLnZhbHVlO3ZhciBhPWkuZ2V0LGM9aS5zZXQsdT1yLnN1YnN0cigyKSxzPU9bdV07c3x8KHM9T1t1XT12KCJPTl9QUk9QRVJUWSIrdSkpLGkuc2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dHx8biE9PXl8fCh0PXkpLHQmJih0W3NdJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIodSxTKSxjJiZjLmFwcGx5KHQsbSksImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRbc109ZSx0LmFkZEV2ZW50TGlzdGVuZXIodSxTLCExKSk6dFtzXT1udWxsKX0saS5nZXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGV8fG4hPT15fHwoZT15KSwhZSlyZXR1cm4gbnVsbDt2YXIgdD1lW3NdO2lmKHQpcmV0dXJuIHQ7aWYoYSl7dmFyIG89YSYmYS5jYWxsKHRoaXMpO2lmKG8pcmV0dXJuIGkuc2V0LmNhbGwodGhpcyxvKSwiZnVuY3Rpb24iPT10eXBlb2YgZVtfXSYmZS5yZW1vdmVBdHRyaWJ1dGUociksb31yZXR1cm4gbnVsbH0sdChuLHIsaSl9fWZ1bmN0aW9uIGooZSx0LG4pe2lmKHQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspRChlLCJvbiIrdFtyXSxuKTtlbHNle3ZhciBvPVtdO2Zvcih2YXIgaSBpbiBlKSJvbiI9PWkuc3Vic3RyKDAsMikmJm8ucHVzaChpKTtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKylEKGUsb1thXSxuKX19dmFyIFA9digib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIFooZSl7dmFyIG49eVtlXTtpZihuKXt5W3YoZSldPW4seVtlXT1mdW5jdGlvbigpe3ZhciB0PWsoYXJndW1lbnRzLGUpO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnRoaXNbUF09bmV3IG47YnJlYWs7Y2FzZSAxOnRoaXNbUF09bmV3IG4odFswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbUF09bmV3IG4odFswXSx0WzFdKTticmVhaztjYXNlIDM6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0sdFsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbUF09bmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sTSh5W2VdLG4pO3ZhciByLG89bmV3IG4oZnVuY3Rpb24oKXt9KTtmb3IociBpbiBvKSJYTUxIdHRwUmVxdWVzdCI9PT1lJiYicmVzcG9uc2VCbG9iIj09PXJ8fGZ1bmN0aW9uKG4peyJmdW5jdGlvbiI9PXR5cGVvZiBvW25dP3lbZV0ucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbUF1bbl0uYXBwbHkodGhpc1tQXSxhcmd1bWVudHMpfTp0KHlbZV0ucHJvdG90eXBlLG4se3NldDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdD8odGhpc1tQXVtuXT1wKHQsZSsiLiIrbiksTSh0aGlzW1BdW25dLHQpKTp0aGlzW1BdW25dPXR9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1BdW25dfX0pfShyKTtmb3IociBpbiBuKSJwcm90b3R5cGUiIT09ciYmbi5oYXNPd25Qcm9wZXJ0eShyKSYmKHlbZV1bcl09bltyXSl9fWZ1bmN0aW9uIHoodCxyLG8pe2Zvcih2YXIgaT10O2kmJiFpLmhhc093blByb3BlcnR5KHIpOylpPW4oaSk7IWkmJnRbcl0mJihpPXQpO3ZhciBhLGM9dihyKTtpZihpJiYhKGE9aVtjXSkmJihhPWlbY109aVtyXSxiKGkmJmUoaSxyKSkpKXt2YXIgdT1vKGEsYyxyKTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyxhcmd1bWVudHMpfSxNKGlbcl0sYSl9cmV0dXJuIGF9ZnVuY3Rpb24gTShlLHQpe2VbdigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT10fXZhciBDPSExLFI9ITE7ZnVuY3Rpb24gSSgpe2lmKEMpcmV0dXJuIFI7Qz0hMDt0cnl7dmFyIGU9Zy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybi0xPT09ZS5pbmRleE9mKCJNU0lFICIpJiYtMT09PWUuaW5kZXhPZigiVHJpZGVudC8iKSYmLTE9PT1lLmluZGV4T2YoIkVkZ2UvIil8fChSPSEwKSxSfWNhdGNoKGUpe319Wm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbihlKXt2YXIgdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbj12KCJPcmlnaW5hbERlbGVnYXRlIikscj12KCJQcm9taXNlIiksbz12KCJFcnJvciIpLGk9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIGk9dGhpc1tuXTtpZihpKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3QuYXBwbHkodGhpc1tuXSxhcmd1bWVudHMpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIGE9ZVtyXTtpZihhKXJldHVybiB0LmFwcGx5KGEsYXJndW1lbnRzKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBjPWVbb107aWYoYylyZXR1cm4gdC5hcHBseShjLGFyZ3VtZW50cyl9fXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aVtuXT10LEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1pO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIEY9e3VzZUc6ITB9LEw9e30scT17fSxBPS9eX196b25lX3N5bWJvbF9fKFx3KykodHJ1ZXxmYWxzZSkkLyxIPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiO2Z1bmN0aW9uIE4oZSx0LHIpe3ZhciBvPXImJnIuYWRkfHxpLGM9ciYmci5ybXx8YSx1PXImJnIubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLHA9ciYmci5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsaD12KG8pLGQ9Ii4iK28rIjoiLGc9InByZXBlbmRMaXN0ZW5lciIseT0iLiIrZysiOiIsXz1mdW5jdGlvbihlLHQsbil7aWYoIWUuaXNSZW1vdmVkKXt2YXIgcj1lLmNhbGxiYWNrOyJvYmplY3QiPT10eXBlb2YgciYmci5oYW5kbGVFdmVudCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaGFuZGxlRXZlbnQoZSl9LGUub3JpZ2luYWxEZWxlZ2F0ZT1yKSxlLmludm9rZShlLHQsW25dKTt2YXIgbz1lLm9wdGlvbnM7byYmIm9iamVjdCI9PXR5cGVvZiBvJiZvLm9uY2UmJnRbY10uY2FsbCh0LG4udHlwZSxlLm9yaWdpbmFsRGVsZWdhdGU/ZS5vcmlnaW5hbERlbGVnYXRlOmUuY2FsbGJhY2ssbyl9fSxtPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8ZS5ldmVudCl7dmFyIG49dGhpc3x8dC50YXJnZXR8fGUscj1uW0xbdC50eXBlXVtsXV07aWYocilpZigxPT09ci5sZW5ndGgpXyhyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoJiYoIXR8fCEwIT09dFtIXSk7aSsrKV8ob1tpXSxuLHQpfX0saz1mdW5jdGlvbih0KXtpZih0PXR8fGUuZXZlbnQpe3ZhciBuPXRoaXN8fHQudGFyZ2V0fHxlLHI9bltMW3QudHlwZV1bc11dO2lmKHIpaWYoMT09PXIubGVuZ3RoKV8oclswXSxuLHQpO2Vsc2UgZm9yKHZhciBvPXIuc2xpY2UoKSxpPTA7aTxvLmxlbmd0aCYmKCF0fHwhMCE9PXRbSF0pO2krKylfKG9baV0sbix0KX19O2Z1bmN0aW9uIGIodCxyKXtpZighdClyZXR1cm4hMTt2YXIgaT0hMDtyJiZ2b2lkIDAhPT1yLnVzZUcmJihpPXIudXNlRyk7dmFyIGE9ciYmci52aCxfPSEwO3ImJnZvaWQgMCE9PXIuY2hrRHVwJiYoXz1yLmNoa0R1cCk7dmFyIGI9ITE7ciYmdm9pZCAwIT09ci5ydCYmKGI9ci5ydCk7Zm9yKHZhciBUPXQ7VCYmIVQuaGFzT3duUHJvcGVydHkobyk7KVQ9bihUKTtpZighVCYmdFtvXSYmKFQ9dCksIVQpcmV0dXJuITE7aWYoVFtoXSlyZXR1cm4hMTt2YXIgdyxFPXt9LHg9VFtoXT1UW29dLE89VFt2KGMpXT1UW2NdLFM9VFt2KHUpXT1UW3VdLEQ9VFt2KHApXT1UW3BdO3ImJnIucHJlcGVuZCYmKHc9VFt2KHIucHJlcGVuZCldPVRbci5wcmVwZW5kXSk7dmFyIGo9aT9mdW5jdGlvbigpe2lmKCFFLmlzRXhpc3RpbmcpcmV0dXJuIHguY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxFLmNhcHR1cmU/azptLEUub3B0aW9ucyl9OmZ1bmN0aW9uKGUpe3JldHVybiB4LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsZS5pbnZva2UsRS5vcHRpb25zKX0sUD1pP2Z1bmN0aW9uKGUpe2lmKCFlLmlzUmVtb3ZlZCl7dmFyIHQ9TFtlLmV2ZW50TmFtZV0sbj12b2lkIDA7dCYmKG49dFtlLmNhcHR1cmU/czpsXSk7dmFyIHI9biYmZS50YXJnZXRbbl07aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZihyW29dPT09ZSl7ci5zcGxpY2UobywxKSxlLmlzUmVtb3ZlZD0hMCwwPT09ci5sZW5ndGgmJihlLmFsbFJlbW92ZWQ9ITAsZS50YXJnZXRbbl09bnVsbCk7YnJlYWt9fWlmKGUuYWxsUmVtb3ZlZClyZXR1cm4gTy5jYWxsKGUudGFyZ2V0LGUuZXZlbnROYW1lLGUuY2FwdHVyZT9rOm0sZS5vcHRpb25zKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE8uY2FsbChlLnRhcmdldCxlLmV2ZW50TmFtZSxlLmludm9rZSxlLm9wdGlvbnMpfSxaPXImJnIuZGlmZj9yLmRpZmY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgdDtyZXR1cm4iZnVuY3Rpb24iPT09biYmZS5jYWxsYmFjaz09PXR8fCJvYmplY3QiPT09biYmZS5vcmlnaW5hbERlbGVnYXRlPT09dH0sej1ab25lW1pvbmUuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSxDPWZ1bmN0aW9uKHQsbixyLG8sYyx1KXtyZXR1cm4gdm9pZCAwPT09YyYmKGM9ITEpLHZvaWQgMD09PXUmJih1PSExKSxmdW5jdGlvbigpe3ZhciBwPXRoaXN8fGUsaD1hcmd1bWVudHNbMV07aWYoIWgpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB2PSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoKXtpZighaC5oYW5kbGVFdmVudClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dj0hMH1pZighYXx8YSh0LGgscCxhcmd1bWVudHMpKXt2YXIgZCxnPWFyZ3VtZW50c1swXSx5PWFyZ3VtZW50c1syXTtpZih6KWZvcih2YXIgbT0wO208ei5sZW5ndGg7bSsrKWlmKGc9PT16W21dKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaz0hMTt2b2lkIDA9PT15P2Q9ITE6ITA9PT15P2Q9ITA6ITE9PT15P2Q9ITE6KGQ9ISF5JiYhIXkuY2FwdHVyZSxrPSEheSYmISF5Lm9uY2UpO3ZhciBiLFQ9Wm9uZS5jdXJyZW50LHc9TFtnXTtpZih3KWI9d1tkP3M6bF07ZWxzZXt2YXIgeD1mKyhnK2wpLE89ZisoZytzKTtMW2ddPXt9LExbZ11bbF09eCxMW2ddW3NdPU8sYj1kP086eH12YXIgUyxEPXBbYl0saj0hMTtpZihEKXtpZihqPSEwLF8pZm9yKG09MDttPEQubGVuZ3RoO20rKylpZihaKERbbV0saCkpcmV0dXJufWVsc2UgRD1wW2JdPVtdO3ZhciBQPXAuY29uc3RydWN0b3IubmFtZSxNPXFbUF07TSYmKFM9TVtnXSksU3x8KFM9UCtuK2cpLEUub3B0aW9ucz15LGsmJihFLm9wdGlvbnMub25jZT0hMSksRS50YXJnZXQ9cCxFLmNhcHR1cmU9ZCxFLmV2ZW50TmFtZT1nLEUuaXNFeGlzdGluZz1qO3ZhciBDPWk/RjpudWxsO0MmJihDLnRhc2tEYXRhPUUpO3ZhciBSPVQuc2NoZWR1bGVFdmVudFRhc2soUyxoLEMscixvKTtyZXR1cm4gRS50YXJnZXQ9bnVsbCxDJiYoQy50YXNrRGF0YT1udWxsKSxrJiYoeS5vbmNlPSEwKSxSLm9wdGlvbnM9eSxSLnRhcmdldD1wLFIuY2FwdHVyZT1kLFIuZXZlbnROYW1lPWcsdiYmKFIub3JpZ2luYWxEZWxlZ2F0ZT1oKSx1P0QudW5zaGlmdChSKTpELnB1c2goUiksYz9wOnZvaWQgMH19fTtyZXR1cm4gVFtvXT1DKHgsZCxqLFAsYiksdyYmKFRbZ109Qyh3LHksZnVuY3Rpb24oZSl7cmV0dXJuIHcuY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxlLmludm9rZSxFLm9wdGlvbnMpfSxQLGIsITApKSxUW2NdPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzfHxlLHI9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzJdO3Q9dm9pZCAwIT09byYmKCEwPT09b3x8ITEhPT1vJiYhIW8mJiEhby5jYXB0dXJlKTt2YXIgaT1hcmd1bWVudHNbMV07aWYoIWkpcmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFhfHxhKE8saSxuLGFyZ3VtZW50cykpe3ZhciBjLHU9TFtyXTt1JiYoYz11W3Q/czpsXSk7dmFyIGY9YyYmbltjXTtpZihmKWZvcih2YXIgcD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgaD1mW3BdO2lmKFooaCxpKSlyZXR1cm4gZi5zcGxpY2UocCwxKSxoLmlzUmVtb3ZlZD0hMCwwPT09Zi5sZW5ndGgmJihoLmFsbFJlbW92ZWQ9ITAsbltjXT1udWxsKSxoLnpvbmUuY2FuY2VsVGFzayhoKSxiP246dm9pZCAwfXJldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFRbdV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj1XKHRoaXN8fGUsYXJndW1lbnRzWzBdKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07dC5wdXNoKG8ub3JpZ2luYWxEZWxlZ2F0ZT9vLm9yaWdpbmFsRGVsZWdhdGU6by5jYWxsYmFjayl9cmV0dXJuIHR9LFRbcF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzfHxlLG49YXJndW1lbnRzWzBdO2lmKG4pe3ZhciByPUxbbl07aWYocil7dmFyIG89dFtyW2xdXSxpPXRbcltzXV07aWYobyl7dmFyIGE9by5zbGljZSgpO2ZvcihoPTA7aDxhLmxlbmd0aDtoKyspdGhpc1tjXS5jYWxsKHRoaXMsbiwodT1hW2hdKS5vcmlnaW5hbERlbGVnYXRlP3Uub3JpZ2luYWxEZWxlZ2F0ZTp1LmNhbGxiYWNrLHUub3B0aW9ucyl9aWYoaSlmb3IoYT1pLnNsaWNlKCksaD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgdTt0aGlzW2NdLmNhbGwodGhpcyxuLCh1PWFbaF0pLm9yaWdpbmFsRGVsZWdhdGU/dS5vcmlnaW5hbERlbGVnYXRlOnUuY2FsbGJhY2ssdS5vcHRpb25zKX19fWVsc2V7Zm9yKHZhciBmPU9iamVjdC5rZXlzKHQpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHY9QS5leGVjKGZbaF0pLGQ9diYmdlsxXTtkJiYicmVtb3ZlTGlzdGVuZXIiIT09ZCYmdGhpc1twXS5jYWxsKHRoaXMsZCl9dGhpc1twXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoYilyZXR1cm4gdGhpc30sTShUW29dLHgpLE0oVFtjXSxPKSxEJiZNKFRbcF0sRCksUyYmTShUW3VdLFMpLCEwfWZvcih2YXIgVD1bXSx3PTA7dzx0Lmxlbmd0aDt3KyspVFt3XT1iKHRbd10scik7cmV0dXJuIFR9ZnVuY3Rpb24gVyhlLHQpe3ZhciBuPVtdO2Zvcih2YXIgciBpbiBlKXt2YXIgbz1BLmV4ZWMociksaT1vJiZvWzFdO2lmKGkmJighdHx8aT09PXQpKXt2YXIgYT1lW3JdO2lmKGEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspbi5wdXNoKGFbY10pfX1yZXR1cm4gbn12YXIgWD12KCJ6b25lVGFzayIpO2Z1bmN0aW9uIEsoZSx0LG4scil7dmFyIG89bnVsbCxpPW51bGw7bis9cjt2YXIgYT17fTtmdW5jdGlvbiBjKHQpe3ZhciBuPXQuZGF0YTtyZXR1cm4gbi5hcmdzWzBdPWZ1bmN0aW9uKCl7dHJ5e3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3QuZGF0YSYmdC5kYXRhLmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIG4uaGFuZGxlSWQ/ZGVsZXRlIGFbbi5oYW5kbGVJZF06bi5oYW5kbGVJZCYmKG4uaGFuZGxlSWRbWF09bnVsbCkpfX0sbi5oYW5kbGVJZD1vLmFwcGx5KGUsbi5hcmdzKSx0fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGkoZS5kYXRhLmhhbmRsZUlkKX1vPXooZSx0Kz1yLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihvLGkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpWzBdKXt2YXIgcz1oKHQsaVswXSx7aGFuZGxlSWQ6bnVsbCxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1yLGRlbGF5OiJUaW1lb3V0Ij09PXJ8fCJJbnRlcnZhbCI9PT1yP2lbMV18fDA6bnVsbCxhcmdzOml9LGMsdSk7aWYoIXMpcmV0dXJuIHM7dmFyIGw9cy5kYXRhLmhhbmRsZUlkO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9hW2xdPXM6bCYmKGxbWF09cyksbCYmbC5yZWYmJmwudW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwudW5yZWYmJihzLnJlZj1sLnJlZi5iaW5kKGwpLHMudW5yZWY9bC51bnJlZi5iaW5kKGwpKSwibnVtYmVyIj09dHlwZW9mIGx8fGw/bDpzfXJldHVybiBuLmFwcGx5KGUsaSl9fSksaT16KGUsbixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbyxpPXJbMF07Im51bWJlciI9PXR5cGVvZiBpP289YVtpXToobz1pJiZpW1hdKXx8KG89aSksbyYmInN0cmluZyI9PXR5cGVvZiBvLnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1vLnN0YXRlJiYoby5jYW5jZWxGbiYmby5kYXRhLmlzUGVyaW9kaWN8fDA9PT1vLnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgaT9kZWxldGUgYVtpXTppJiYoaVtYXT1udWxsKSxvLnpvbmUuY2FuY2VsVGFzayhvKSk6dC5hcHBseShlLHIpfX0pfXZhciBVPU9iamVjdFt2KCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksQj1PYmplY3RbdigiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWT1PYmplY3QuY3JlYXRlLEo9digidW5jb25maWd1cmFibGVzIik7ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlJiZlW0pdJiZlW0pdW3RdfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBPYmplY3QuaXNGcm96ZW4obil8fChuLmNvbmZpZ3VyYWJsZT0hMCksbi5jb25maWd1cmFibGV8fChlW0pdfHxPYmplY3QuaXNGcm96ZW4oZSl8fFUoZSxKLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLGVbSl0mJihlW0pdW3RdPSEwKSksbn1mdW5jdGlvbiBRKGUsdCxuLHIpe3RyeXtyZXR1cm4gVShlLHQsbil9Y2F0Y2goaSl7aWYoIW4uY29uZmlndXJhYmxlKXRocm93IGk7dm9pZCAwPT09cj9kZWxldGUgbi5jb25maWd1cmFibGU6bi5jb25maWd1cmFibGU9cjt0cnl7cmV0dXJuIFUoZSx0LG4pfWNhdGNoKHIpe3ZhciBvPW51bGw7dHJ5e289SlNPTi5zdHJpbmdpZnkobil9Y2F0Y2goZSl7bz1uLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciK3QrIicgd2l0aCBkZXNjcmlwdG9yICciK28rIicgb24gb2JqZWN0ICciK2UrIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiK3IpfX19dmFyICQ9WyJhYnNvbHV0ZWRldmljZW9yaWVudGF0aW9uIiwiYWZ0ZXJpbnB1dCIsImFmdGVycHJpbnQiLCJhcHBpbnN0YWxsZWQiLCJiZWZvcmVpbnN0YWxscHJvbXB0IiwiYmVmb3JlcHJpbnQiLCJiZWZvcmV1bmxvYWQiLCJkZXZpY2VsaWdodCIsImRldmljZW1vdGlvbiIsImRldmljZW9yaWVudGF0aW9uIiwiZGV2aWNlb3JpZW50YXRpb25hYnNvbHV0ZSIsImRldmljZXByb3hpbWl0eSIsImhhc2hjaGFuZ2UiLCJsYW5ndWFnZWNoYW5nZSIsIm1lc3NhZ2UiLCJtb3piZWZvcmVwYWludCIsIm9mZmxpbmUiLCJvbmxpbmUiLCJwYWludCIsInBhZ2VzaG93IiwicGFnZWhpZGUiLCJwb3BzdGF0ZSIsInJlamVjdGlvbmhhbmRsZWQiLCJzdG9yYWdlIiwidW5oYW5kbGVkcmVqZWN0aW9uIiwidW5sb2FkIiwidXNlcnByb3hpbWl0eSIsInZyZGlzcGx5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLGVlPVsiZW5jcnlwdGVkIiwid2FpdGluZ2ZvcmtleSIsIm1zbmVlZGtleSIsIm1vemludGVycnVwdGJlZ2luIiwibW96aW50ZXJydXB0ZW5kIl0sdGU9WyJsb2FkIl0sbmU9WyJibHVyIiwiZXJyb3IiLCJmb2N1cyIsImxvYWQiLCJyZXNpemUiLCJzY3JvbGwiLCJtZXNzYWdlZXJyb3IiXSxyZT1bImJvdW5jZSIsImZpbmlzaCIsInN0YXJ0Il0sb2U9WyJsb2Fkc3RhcnQiLCJwcm9ncmVzcyIsImFib3J0IiwiZXJyb3IiLCJsb2FkIiwicHJvZ3Jlc3MiLCJ0aW1lb3V0IiwibG9hZGVuZCIsInJlYWR5c3RhdGVjaGFuZ2UiXSxpZT1bInVwZ3JhZGVuZWVkZWQiLCJjb21wbGV0ZSIsImFib3J0Iiwic3VjY2VzcyIsImVycm9yIiwiYmxvY2tlZCIsInZlcnNpb25jaGFuZ2UiLCJjbG9zZSJdLGFlPVsiY2xvc2UiLCJlcnJvciIsIm9wZW4iLCJtZXNzYWdlIl0sY2U9WyJlcnJvciIsIm1lc3NhZ2UiXSx1ZT1bImFib3J0IiwiYW5pbWF0aW9uY2FuY2VsIiwiYW5pbWF0aW9uZW5kIiwiYW5pbWF0aW9uaXRlcmF0aW9uIiwiYXV4Y2xpY2siLCJiZWZvcmVpbnB1dCIsImJsdXIiLCJjYW5jZWwiLCJjYW5wbGF5IiwiY2FucGxheXRocm91Z2giLCJjaGFuZ2UiLCJjb21wb3NpdGlvbnN0YXJ0IiwiY29tcG9zaXRpb251cGRhdGUiLCJjb21wb3NpdGlvbmVuZCIsImN1ZWNoYW5nZSIsImNsaWNrIiwiY2xvc2UiLCJjb250ZXh0bWVudSIsImN1cmVjaGFuZ2UiLCJkYmxjbGljayIsImRyYWciLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiZHJhZ2V4aXQiLCJkcmFnbGVhdmUiLCJkcmFnb3ZlciIsImRyb3AiLCJkdXJhdGlvbmNoYW5nZSIsImVtcHRpZWQiLCJlbmRlZCIsImVycm9yIiwiZm9jdXMiLCJmb2N1c2luIiwiZm9jdXNvdXQiLCJnb3Rwb2ludGVyY2FwdHVyZSIsImlucHV0IiwiaW52YWxpZCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwibG9hZCIsImxvYWRzdGFydCIsImxvYWRlZGRhdGEiLCJsb2FkZWRtZXRhZGF0YSIsImxvc3Rwb2ludGVyY2FwdHVyZSIsIm1vdXNlZG93biIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJtb3VzZXVwIiwibW91c2V3aGVlbCIsIm9yaWVudGF0aW9uY2hhbmdlIiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyZG93biIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsInBvaW50ZXJsb2NrY2hhbmdlIiwibW96cG9pbnRlcmxvY2tjaGFuZ2UiLCJ3ZWJraXRwb2ludGVybG9ja2VyY2hhbmdlIiwicG9pbnRlcmxvY2tlcnJvciIsIm1venBvaW50ZXJsb2NrZXJyb3IiLCJ3ZWJraXRwb2ludGVybG9ja2Vycm9yIiwicG9pbnRlcm1vdmUiLCJwb2ludG91dCIsInBvaW50ZXJvdmVyIiwicG9pbnRlcnVwIiwicHJvZ3Jlc3MiLCJyYXRlY2hhbmdlIiwicmVzZXQiLCJyZXNpemUiLCJzY3JvbGwiLCJzZWVrZWQiLCJzZWVraW5nIiwic2VsZWN0Iiwic2VsZWN0aW9uY2hhbmdlIiwic2VsZWN0c3RhcnQiLCJzaG93Iiwic29ydCIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5kIiwidGltZXVwZGF0ZSIsInZvbHVtZWNoYW5nZSIsInRvdWNoY2FuY2VsIiwidG91Y2htb3ZlIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIiwidHJhbnNpdGlvbmNhbmNlbCIsInRyYW5zaXRpb25lbmQiLCJ3YWl0aW5nIiwid2hlZWwiXS5jb25jYXQoWyJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIndlYmdsY29udGV4dGxvc3QiLCJ3ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yIl0sWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLFsidG9nZ2xlIl0sWyJhZnRlcnNjcmlwdGV4ZWN1dGUiLCJiZWZvcmVzY3JpcHRleGVjdXRlIiwiRE9NQ29udGVudExvYWRlZCIsImZ1bGxzY3JlZW5jaGFuZ2UiLCJtb3pmdWxsc2NyZWVuY2hhbmdlIiwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsIm1zZnVsbHNjcmVlbmNoYW5nZSIsImZ1bGxzY3JlZW5lcnJvciIsIm1vemZ1bGxzY3JlZW5lcnJvciIsIndlYmtpdGZ1bGxzY3JlZW5lcnJvciIsIm1zZnVsbHNjcmVlbmVycm9yIiwicmVhZHlzdGF0ZWNoYW5nZSIsInZpc2liaWxpdHljaGFuZ2UiXSwkLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLFsiYWN0aXZhdGUiLCJhZnRlcnVwZGF0ZSIsImFyaWFyZXF1ZXN0IiwiYmVmb3JlYWN0aXZhdGUiLCJiZWZvcmVkZWFjdGl2YXRlIiwiYmVmb3JlZWRpdGZvY3VzIiwiYmVmb3JldXBkYXRlIiwiY2VsbGNoYW5nZSIsImNvbnRyb2xzZWxlY3QiLCJkYXRhYXZhaWxhYmxlIiwiZGF0YXNldGNoYW5nZWQiLCJkYXRhc2V0Y29tcGxldGUiLCJlcnJvcnVwZGF0ZSIsImZpbHRlcmNoYW5nZSIsImxheW91dGNvbXBsZXRlIiwibG9zZWNhcHR1cmUiLCJtb3ZlIiwibW92ZWVuZCIsIm1vdmVzdGFydCIsInByb3BlcnR5Y2hhbmdlIiwicmVzaXplZW5kIiwicmVzaXplc3RhcnQiLCJyb3dlbnRlciIsInJvd2V4aXQiLCJyb3dzZGVsZXRlIiwicm93c2luc2VydGVkIiwiY29tbWFuZCIsImNvbXBhc3NuZWVkc2NhbGlicmF0aW9uIiwiZGVhY3RpdmF0ZSIsImhlbHAiLCJtc2NvbnRlbnR6b29tIiwibXNtYW5pcHVsYXRpb25zdGF0ZWNoYW5nZWQiLCJtc2dlc3R1cmVjaGFuZ2UiLCJtc2dlc3R1cmVkb3VibGV0YXAiLCJtc2dlc3R1cmVlbmQiLCJtc2dlc3R1cmVob2xkIiwibXNnZXN0dXJlc3RhcnQiLCJtc2dlc3R1cmV0YXAiLCJtc2dvdHBvaW50ZXJjYXB0dXJlIiwibXNpbmVydGlhc3RhcnQiLCJtc2xvc3Rwb2ludGVyY2FwdHVyZSIsIm1zcG9pbnRlcmNhbmNlbCIsIm1zcG9pbnRlcmRvd24iLCJtc3BvaW50ZXJlbnRlciIsIm1zcG9pbnRlcmhvdmVyIiwibXNwb2ludGVybGVhdmUiLCJtc3BvaW50ZXJtb3ZlIiwibXNwb2ludGVyb3V0IiwibXNwb2ludGVyb3ZlciIsIm1zcG9pbnRlcnVwIiwicG9pbnRlcm91dCIsIm1zc2l0ZW1vZGVqdW1wbGlzdGl0ZW1yZW1vdmVkIiwibXN0aHVtYm5haWxjbGljayIsInN0b3AiLCJzdG9yYWdlY29tbWl0Il0pO2Z1bmN0aW9uIHNlKGUsdCxuLHIpe2UmJmooZSxmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIHQ7dmFyIHI9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0PT09ZX0pO2lmKCFyfHwwPT09ci5sZW5ndGgpcmV0dXJuIHQ7dmFyIG89clswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMT09PW8uaW5kZXhPZihlKX0pfShlLHQsbikscil9ZnVuY3Rpb24gbGUoYyx1KXtpZighd3x8eCl7dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQ7aWYoZnVuY3Rpb24oKXtpZigoRXx8eCkmJiFlKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe3ZhciBuPWUoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihuJiYhbi5jb25maWd1cmFibGUpcmV0dXJuITF9dmFyIHI9WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLG89ZShyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiKTtpZihvKXt0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBpPSEhKGM9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vbnJlYWR5c3RhdGVjaGFuZ2U7cmV0dXJuIHQociwib25yZWFkeXN0YXRlY2hhbmdlIixvfHx7fSksaX12YXIgYT12KCJmYWtlIik7dChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1thXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbYV09ZX19KTt2YXIgYyx1PWZ1bmN0aW9uKCl7fTtyZXR1cm4oYz1uZXcgWE1MSHR0cFJlcXVlc3QpLm9ucmVhZHlzdGF0ZWNoYW5nZT11LGk9Y1thXT09PXUsYy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpfSgpKXt2YXIgbD11Ll9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztpZihFKXt2YXIgZj13aW5kb3c7c2UoZix1ZS5jb25jYXQoWyJtZXNzYWdlZXJyb3IiXSksbCxuKGYpKSxzZShEb2N1bWVudC5wcm90b3R5cGUsdWUsbCksdm9pZCAwIT09Zi5TVkdFbGVtZW50JiZzZShmLlNWR0VsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEVsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxlZSxsKSxzZShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsdGUsbCksc2UoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLHRlLGwpO3ZhciBoPWYuSFRNTE1hcnF1ZWVFbGVtZW50O2gmJnNlKGgucHJvdG90eXBlLHJlLGwpO3ZhciBkPWYuV29ya2VyO2QmJnNlKGQucHJvdG90eXBlLGNlLGwpfXNlKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxvZSxsKTt2YXIgZz11LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7ZyYmc2UoZyYmZy5wcm90b3R5cGUsb2UsbCksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKHNlKElEQkluZGV4LnByb3RvdHlwZSxpZSxsKSxzZShJREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJEYXRhYmFzZS5wcm90b3R5cGUsaWUsbCksc2UoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLGllLGwpLHNlKElEQkN1cnNvci5wcm90b3R5cGUsaWUsbCkpLHMmJnNlKFdlYlNvY2tldC5wcm90b3R5cGUsYWUsbCl9ZWxzZSFmdW5jdGlvbigpe2Zvcih2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD11ZVtlXSxuPSJvbiIrdDtzZWxmLmFkZEV2ZW50TGlzdGVuZXIodCxmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS50YXJnZXQ7Zm9yKHI9bz9vLmNvbnN0cnVjdG9yLm5hbWUrIi4iK246InVua25vd24uIituO287KW9bbl0mJiFvW25dW2ZlXSYmKCh0PXAob1tuXSxyKSlbZmVdPW9bbl0sb1tuXT10KSxvPW8ucGFyZW50RWxlbWVudH0sITApfSx0PTA7dDx1ZS5sZW5ndGg7dCsrKWUodCl9KCksWigiWE1MSHR0cFJlcXVlc3QiKSxzJiZmdW5jdGlvbih0LG4pe3ZhciBjPW4uV2ViU29ja2V0O24uRXZlbnRUYXJnZXR8fE4obixbYy5wcm90b3R5cGVdKSxuLldlYlNvY2tldD1mdW5jdGlvbih0LG4pe3ZhciB1LHMsbD1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IGModCxuKTpuZXcgYyh0KSxmPWUobCwib25tZXNzYWdlIik7cmV0dXJuIGYmJiExPT09Zi5jb25maWd1cmFibGU/KHU9cihsKSxzPWwsW2ksYSwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt1W2VdPWZ1bmN0aW9uKCl7dmFyIHQ9by5jYWxsKGFyZ3VtZW50cyk7aWYoZT09PWl8fGU9PT1hKXt2YXIgbj10Lmxlbmd0aD4wP3RbMF06dm9pZCAwO2lmKG4pe3ZhciByPVpvbmUuX19zeW1ib2xfXygiT05fUFJPUEVSVFkiK24pO2xbcl09dVtyXX19cmV0dXJuIGxbZV0uYXBwbHkobCx0KX19KSk6dT1sLGoodSxbImNsb3NlIiwiZXJyb3IiLCJtZXNzYWdlIiwib3BlbiJdLHMpLHV9O3ZhciB1PW4uV2ViU29ja2V0O2Zvcih2YXIgcyBpbiBjKXVbc109Y1tzXX0oMCx1KX19dmFyIGZlPXYoInVuYm91bmQiKTtab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oZSx0LG4pe24ucGF0Y2hPblByb3BlcnRpZXM9aixuLnBhdGNoTWV0aG9kPXosbi5iaW5kQXJndW1lbnRzPWt9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihlKXtLKGUsInNldCIsImNsZWFyIiwiVGltZW91dCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbnRlcnZhbCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKGUpe0soZSwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksSyhlLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxLKGUsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLHI9MDtyPG4ubGVuZ3RoO3IrKyl6KGUsbltyXSxmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIHQuY3VycmVudC5ydW4obixlLGksbyl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Ll9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKTtlW3JdJiYodFtyXT1lW3JdKSxmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuRXZlbnQ7biYmbi5wcm90b3R5cGUmJnQucGF0Y2hNZXRob2Qobi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dFtIXT0hMCxlJiZlLmFwcGx5KHQsbil9fSl9KGUsdCl9KGUsbiksZnVuY3Rpb24oZSx0KXt2YXIgbj0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLHI9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLG89W10saT1lLnd0ZixhPW4uc3BsaXQoIiwiKTtpP289YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIkhUTUwiK2UrIkVsZW1lbnQifSkuY29uY2F0KHIpOmUuRXZlbnRUYXJnZXQ/by5wdXNoKCJFdmVudFRhcmdldCIpOm89cjtmb3IodmFyIGM9ZS5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEsdT1lLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEscD1JKCksaD0iZnVuY3Rpb24gX19CUk9XU0VSVE9PTFNfQ09OU09MRV9TQUZFRlVOQygpIHsgW25hdGl2ZSBjb2RlXSB9Iix2PTA7djx1ZS5sZW5ndGg7disrKXt2YXIgZD1mKygoaz11ZVt2XSkrbCksZz1mKyhrK3MpO0xba109e30sTFtrXVtsXT1kLExba11bc109Z31mb3Iodj0wO3Y8bi5sZW5ndGg7disrKWZvcih2YXIgeT1hW3ZdLF89cVt5XT17fSxtPTA7bTx1ZS5sZW5ndGg7bSsrKXt2YXIgaztfW2s9dWVbbV1dPXkrIi5hZGRFdmVudExpc3RlbmVyOiIra312YXIgYj1bXTtmb3Iodj0wO3Y8by5sZW5ndGg7disrKXt2YXIgVD1lW29bdl1dO2IucHVzaChUJiZULnByb3RvdHlwZSl9TihlLGIse3ZoOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFjJiZwKXtpZih1KXRyeXt2YXIgbztpZigiW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIj09PShvPXQudG9TdHJpbmcoKSl8fG89PWgpcmV0dXJuIGUuYXBwbHkobixyKSwhMX1jYXRjaCh0KXtyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYoIltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSI9PT0obz10LnRvU3RyaW5nKCkpfHxvPT1oKXJldHVybiBlLmFwcGx5KG4sciksITF9ZWxzZSBpZih1KXRyeXt0LnRvU3RyaW5nKCl9Y2F0Y2godCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1yZXR1cm4hMH19KSx0LnBhdGNoRXZlbnRUYXJnZXQ9Tn0oZSxuKTt2YXIgbz1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7byYmby5wcm90b3R5cGUmJm4ucGF0Y2hFdmVudFRhcmdldChlLFtvLnByb3RvdHlwZV0pLFooIk11dGF0aW9uT2JzZXJ2ZXIiKSxaKCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiksWigiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKSxaKCJGaWxlUmVhZGVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLGZ1bmN0aW9uKHQsbixyKXtsZSgwLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbil7aWYoVihlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3QrIicgb2YgIitlKTt2YXIgcj1uLmNvbmZpZ3VyYWJsZTtyZXR1cm4icHJvdG90eXBlIiE9PXQmJihuPUcoZSx0LG4pKSxRKGUsdCxuLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sdFtuXSl9KSxlfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0fHxPYmplY3QuaXNGcm96ZW4odCl8fE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1HKGUsbix0W25dKX0pLFkoZSx0KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPUIoZSx0KTtyZXR1cm4gVihlLHQpJiYobi5jb25maWd1cmFibGU9ITEpLG59LGZ1bmN0aW9uKG4pe2lmKChFfHx4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50KXt2YXIgcj1kb2N1bWVudC5yZWdpc3RlckVsZW1lbnQsbz1bImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl07ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4mJm4ucHJvdG90eXBlJiZvLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxpLGEsYz0iRG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50OjoiK3QsdT1uLnByb3RvdHlwZTtpZih1Lmhhc093blByb3BlcnR5KHQpKXt2YXIgcz1lKHUsdCk7cyYmcy52YWx1ZT8ocy52YWx1ZT1wKHMudmFsdWUsYyksYT0oaT1zKS5jb25maWd1cmFibGUsUShyPW4ucHJvdG90eXBlLG89dCxpPUcocixvLGkpLGEpKTp1W3RdPXAodVt0XSxjKX1lbHNlIHVbdF0mJih1W3RdPXAodVt0XSxjKSl9KSxyLmNhbGwoZG9jdW1lbnQsdCxuKX0sTShkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQscil9fSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goImNhbnZhcyIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5IVE1MQ2FudmFzRWxlbWVudDt2b2lkIDAhPT10JiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUudG9CbG9iJiZmdW5jdGlvbihlLG4scil7dmFyIG89bnVsbDtmdW5jdGlvbiBpKGUpe3ZhciB0PWUuZGF0YTtyZXR1cm4gdC5hcmdzW3QuY2JJZHhdPWZ1bmN0aW9uKCl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvLmFwcGx5KHQudGFyZ2V0LHQuYXJncyksZX1vPXoodC5wcm90b3R5cGUsInRvQmxvYiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm57bmFtZToiSFRNTENhbnZhc0VsZW1lbnQudG9CbG9iIix0YXJnZXQ6ZSxjYklkeDowLGFyZ3M6dH19KHQsbik7cmV0dXJuIHIuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3IuY2JJZHhdP2goci5uYW1lLG5bci5jYklkeF0scixpLG51bGwpOmUuYXBwbHkodCxuKX19KX0oKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKHQpe3ZhciBzPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxsPXNbY10sZj1zW3VdO2lmKCFsKXt2YXIgcD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYocCl7dmFyIHY9cC5wcm90b3R5cGU7bD12W2NdLGY9dlt1XX19dmFyIGQ9InJlYWR5c3RhdGVjaGFuZ2UiLGc9InNjaGVkdWxlZCI7ZnVuY3Rpb24geShlKXtYTUxIdHRwUmVxdWVzdFtpXT0hMTt2YXIgdD1lLmRhdGEscj10LnRhcmdldCxhPXJbb107bHx8KGw9cltjXSxmPXJbdV0pLGEmJmYuY2FsbChyLGQsYSk7dmFyIHM9cltvXT1mdW5jdGlvbigpe3IucmVhZHlTdGF0ZT09PXIuRE9ORSYmIXQuYWJvcnRlZCYmWE1MSHR0cFJlcXVlc3RbaV0mJmUuc3RhdGU9PT1nJiZlLmludm9rZSgpfTtyZXR1cm4gbC5jYWxsKHIsZCxzKSxyW25dfHwocltuXT1lKSxiLmFwcGx5KHIsdC5hcmdzKSxYTUxIdHRwUmVxdWVzdFtpXT0hMCxlfWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gbShlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYWJvcnRlZD0hMCxULmFwcGx5KHQudGFyZ2V0LHQuYXJncyl9dmFyIGs9eihzLCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlW3JdPTA9PXRbMl0sZVthXT10WzFdLGsuYXBwbHkoZSx0KX19KSxiPXoocywic2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtyXT9iLmFwcGx5KGUsdCk6aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsXyx7dGFyZ2V0OmUsdXJsOmVbYV0saXNQZXJpb2RpYzohMSxkZWxheTpudWxsLGFyZ3M6dCxhYm9ydGVkOiExfSx5LG0pfX0pLFQ9eihzLCJhYm9ydCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuXTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHQudHlwZSl7aWYobnVsbD09dC5jYW5jZWxGbnx8dC5kYXRhJiZ0LmRhdGEuYWJvcnRlZClyZXR1cm47dC56b25lLmNhbmNlbFRhc2sodCl9fX0pfSgpO3ZhciBuPXYoInhoclRhc2siKSxyPXYoInhoclN5bmMiKSxvPXYoInhockxpc3RlbmVyIiksaT12KCJ4aHJTY2hlZHVsZWQiKSxhPXYoInhoclVSTCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixmdW5jdGlvbih0KXt0Lm5hdmlnYXRvciYmdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJmZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPXQuY29uc3RydWN0b3IubmFtZSxvPWZ1bmN0aW9uKG8pe3ZhciBpPW5bb10sYT10W2ldO2lmKGEpe2lmKCFiKGUodCxpKSkpcmV0dXJuImNvbnRpbnVlIjt0W2ldPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxrKGFyZ3VtZW50cyxyKyIuIitpKSl9O3JldHVybiBNKHQsZSksdH0oYSl9fSxpPTA7aTxuLmxlbmd0aDtpKyspbyhpKX0odC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihuKXtXKGUsdCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1lLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihvKXt2YXIgaT1uZXcgbyh0LHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtyLmludm9rZShpKX19KX19ZS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJih0W3YoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPW4oInVuaGFuZGxlZHJlamVjdGlvbiIpLHRbdigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bigicmVqZWN0aW9uaGFuZGxlZCIpKX0pfSgpfSwiMVRzQSI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSwiMk9pRiI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LDM6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCJoTi9nIil9LCIzTHlqIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiS3JvSiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpcihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LCI0NVR2IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiT1AzWSIpLGE9ci5oYXMsYz1yLmdldCx1PXIua2V5LHM9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiBjKGUsdCxuKTt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09cj9zKGUscixuKTp2b2lkIDB9O3IuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKSl9fSl9LCI0OUQ0IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXksYT1yLnNldDtyLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24oZSx0LG4scil7YShlLHQsbyhuKSxpKHIpKX19KX0sIjRMaUQiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZHlaWCIpLG89bigiWEtGVSIpLGk9bigiS3JvSiIpLGE9bigiM0x5aiIpLGM9bigiWjZ2RiIpLHU9bigiU2xrWSIpLHM9bigiOWdYNyIpLGw9bigiMC9SNCIpLGY9bigiZWVWcSIpLHA9bigiWE1WaCIpLGg9bigiZnlEcSIpLHY9bigiWGJ6aSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixkLGcseSl7dmFyIF89cltlXSxtPV8saz1nPyJzZXQiOiJhZGQiLGI9bSYmbS5wcm90b3R5cGUsVD17fSx3PWZ1bmN0aW9uKGUpe3ZhciB0PWJbZV07aShiLGUsImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh5JiYhbChlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJoYXMiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoeSYmIWwoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4geSYmIWwoZSk/dm9pZCAwOnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJhZGQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUpLHRoaXN9OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoeXx8Yi5mb3JFYWNoJiYhZihmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIEU9bmV3IG0seD1FW2tdKHk/e306LTAsMSkhPUUsTz1mKGZ1bmN0aW9uKCl7RS5oYXMoMSl9KSxTPXAoZnVuY3Rpb24oZSl7bmV3IG0oZSl9KSxEPSF5JiZmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBtLHQ9NTt0LS07KWVba10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSk7U3x8KChtPXQoZnVuY3Rpb24odCxuKXtzKHQsbSxlKTt2YXIgcj12KG5ldyBfLHQsbSk7cmV0dXJuIHZvaWQgMCE9biYmdShuLGcscltrXSxyKSxyfSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9bSksKE98fEQpJiYodygiZGVsZXRlIiksdygiaGFzIiksZyYmdygiZ2V0IikpLChEfHx4KSYmdyhrKSx5JiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1lbHNlIG09ZC5nZXRDb25zdHJ1Y3Rvcih0LGUsZyxrKSxhKG0ucHJvdG90eXBlLG4pLGMuTkVFRD0hMDtyZXR1cm4gaChtLGUpLFRbZV09bSxvKG8uRytvLlcrby5GKihtIT1fKSxUKSx5fHxkLnNldFN0cm9uZyhtLGUsZyksbX19LCI0UjR1IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwiNkZNTyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oIkVXbUMiKSxpPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbyhlKSYmKCJmdW5jdGlvbiIhPXR5cGVvZih0PWUuY29uc3RydWN0b3IpfHx0IT09QXJyYXkmJiFvKHQucHJvdG90eXBlKXx8KHQ9dm9pZCAwKSxyKHQpJiZudWxsPT09KHQ9dFtpXSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/QXJyYXk6dH19LCI3RGxoIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5oYXMsYT1yLmtleTtyLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSwiOUFBbiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiTWFwIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ci5nZXRFbnRyeShvKHRoaXMsIk1hcCIpLGUpO3JldHVybiB0JiZ0LnZ9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiByLmRlZihvKHRoaXMsIk1hcCIpLDA9PT1lPzA6ZSx0KX19LHIsITApfSwiOWdYNyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7aWYoIShlIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PXImJnIgaW4gZSl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gZX19LEFmbno6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJMUUFjIiksbz1uKCJYS0ZVIiksaT1uKCJLcm9KIiksYT1uKCJNdWtiIiksYz1uKCJoUElRIiksdT1uKCJRYURiIikscz1uKCJmeURxIiksbD1uKCJPUDNZIiksZj1uKCJLMHhVIikoIml0ZXJhdG9yIikscD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbix2LGQsZyx5KXt1KG4sdCx2KTt2YXIgXyxtLGssYj1mdW5jdGlvbihlKXtpZighcCYmZSBpbiB4KXJldHVybiB4W2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxUPXQrIiBJdGVyYXRvciIsdz0idmFsdWVzIj09ZCxFPSExLHg9ZS5wcm90b3R5cGUsTz14W2ZdfHx4WyJAQGl0ZXJhdG9yIl18fGQmJnhbZF0sUz1PfHxiKGQpLEQ9ZD93P2IoImVudHJpZXMiKTpTOnZvaWQgMCxqPSJBcnJheSI9PXQmJnguZW50cmllc3x8TztpZihqJiYoaz1sKGouY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmsubmV4dCYmKHMoayxULCEwKSxyfHwiZnVuY3Rpb24iPT10eXBlb2Yga1tmXXx8YShrLGYsaCkpLHcmJk8mJiJ2YWx1ZXMiIT09Ty5uYW1lJiYoRT0hMCxTPWZ1bmN0aW9uKCl7cmV0dXJuIE8uY2FsbCh0aGlzKX0pLHImJiF5fHwhcCYmIUUmJnhbZl18fGEoeCxmLFMpLGNbdF09UyxjW1RdPWgsZClpZihfPXt2YWx1ZXM6dz9TOmIoInZhbHVlcyIpLGtleXM6Zz9TOmIoImtleXMiKSxlbnRyaWVzOkR9LHkpZm9yKG0gaW4gXyltIGluIHh8fGkoeCxtLF9bbV0pO2Vsc2UgbyhvLlArby5GKihwfHxFKSx0LF8pO3JldHVybiBffX0sQnFmVjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5nZXQsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxDa2tUOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJZbXF2IiksaT1uKCJTL2ovIiksYT1uKCJuZThpIiksYz1uKCJ6UndvIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MT09ZSx1PTI9PWUscz0zPT1lLGw9ND09ZSxmPTY9PWUscD01PT1lfHxmLGg9dHx8YztyZXR1cm4gZnVuY3Rpb24odCxjLHYpe2Zvcih2YXIgZCxnLHk9aSh0KSxfPW8oeSksbT1yKGMsdiwzKSxrPWEoXy5sZW5ndGgpLGI9MCxUPW4/aCh0LGspOnU/aCh0LDApOnZvaWQgMDtrPmI7YisrKWlmKChwfHxiIGluIF8pJiYoZz1tKGQ9X1tiXSxiLHkpLGUpKWlmKG4pVFtiXT1nO2Vsc2UgaWYoZylzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOlQucHVzaChkKX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6c3x8bD9sOlR9fX0sRFZnQTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiemhBYiIpLG89bigiNFI0dSIpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LEVLMEU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIkNra1QiKSgwKSxpPW4oIktyb0oiKSxhPW4oIlo2dkYiKSxjPW4oImN6TksiKSx1PW4oIlpENjciKSxzPW4oIjAvUjQiKSxsPW4oImVlVnEiKSxmPW4oInM1cVkiKSxwPWEuZ2V0V2VhayxoPU9iamVjdC5pc0V4dGVuc2libGUsdj11LnVmc3RvcmUsZD17fSxnPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0seT17Z2V0OmZ1bmN0aW9uKGUpe2lmKHMoZSkpe3ZhciB0PXAoZSk7cmV0dXJuITA9PT10P3YoZih0aGlzLCJXZWFrTWFwIikpLmdldChlKTp0P3RbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuZGVmKGYodGhpcywiV2Vha01hcCIpLGUsdCl9fSxfPWUuZXhwb3J0cz1uKCI0TGlEIikoIldlYWtNYXAiLGcseSx1LCEwLCEwKTtsKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgXykuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKGQpLDcpLmdldChkKX0pJiYoYygocj11LmdldENvbnN0cnVjdG9yKGcsIldlYWtNYXAiKSkucHJvdG90eXBlLHkpLGEuTkVFRD0hMCxvKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9Xy5wcm90b3R5cGUsbj10W2VdO2kodCxlLGZ1bmN0aW9uKHQsbyl7aWYocyh0KSYmIWgodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyByKTt2YXIgaT10aGlzLl9mW2VdKHQsbyk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiBuLmNhbGwodGhpcyx0LG8pfSl9KSl9LEVXbUM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09cihlKX19LEVlbUg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlVxY0YiKSxvPW4oIlJqRC8iKSxpPW4oImFDRmoiKSxhPW4oImFwbVQiKSxjPW4oImFhZ3giKSx1PW4oInhwcWwiKSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4oIm5oNGciKT9zOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9YSh0LCEwKSx1KXRyeXtyZXR1cm4gcyhlLHQpfWNhdGNoKGUpe31pZihjKGUsdCkpcmV0dXJuIG8oIXIuZi5jYWxsKGUsdCksZVt0XSl9fSxGSlc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJ5M3c5IiksaT1uKCJEVmdBIik7ZS5leHBvcnRzPW4oIm5oNGciKT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciBuLGE9aSh0KSxjPWEubGVuZ3RoLHU9MDtjPnU7KXIuZihlLG49YVt1KytdLHRbbl0pO3JldHVybiBlfX0sRlpjcTpmdW5jdGlvbihlLHQsbil7bigiNDlENCIpLG4oInpxK0MiKSxuKCI0NVR2IiksbigidUF0ZCIpLG4oIkJxZlYiKSxuKCJmTi8zIiksbigiaVcrUyIpLG4oIjdEbGgiKSxuKCJPcHhiIiksZS5leHBvcnRzPW4oImczZzUiKS5SZWZsZWN0fSxINmhmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG8pe3RyeXtyZXR1cm4gbz90KHIobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXt2YXIgaT1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbChlKSksdH19fSwiSThhKyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKSxvPW4oIksweFUiKSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYTtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLG8pKT9uOmk/cih0KToiT2JqZWN0Ij09KGE9cih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjphfX0sSXc3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiZHlaWCIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQoZSk6e319fSwiSis2ZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkk4YSsiKSxvPW4oIksweFUiKSgiaXRlcmF0b3IiKSxpPW4oImhQSVEiKTtlLmV4cG9ydHM9bigiZzNnNSIpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9ZSlyZXR1cm4gZVtvXXx8ZVsiQEBpdGVyYXRvciJdfHxpW3IoZSldfX0sSmlFYTpmdW5jdGlvbihlLHQpe3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxLMHhVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoIndrcyIpLG89bigieWxxcyIpLGk9bigiZHlaWCIpLlN5bWJvbCxhPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPWEmJmlbZV18fChhP2k6bykoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPXJ9LEtyb0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKSxvPW4oIk11a2IiKSxpPW4oImFhZ3giKSxhPW4oInlscXMiKSgic3JjIiksYz1GdW5jdGlvbi50b1N0cmluZyx1PSgiIitjKS5zcGxpdCgidG9TdHJpbmciKTtuKCJnM2c1IikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5jYWxsKGUpfSwoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGMpe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3MmJihpKG4sIm5hbWUiKXx8byhuLCJuYW1lIix0KSksZVt0XSE9PW4mJihzJiYoaShuLGEpfHxvKG4sYSxlW3RdPyIiK2VbdF06dS5qb2luKFN0cmluZyh0KSkpKSxlPT09cj9lW3RdPW46Yz9lW3RdP2VbdF09bjpvKGUsdCxuKTooZGVsZXRlIGVbdF0sbyhlLHQsbikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fGMuY2FsbCh0aGlzKX0pfSxLdXRoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iiksbz1uKCJGSlc1IiksaT1uKCI0UjR1IiksYT1uKCJZVHZBIikoIklFX1BST1RPIiksYz1mdW5jdGlvbigpe30sdT1mdW5jdGlvbigpe3ZhciBlLHQ9bigiSXc3MSIpKCJpZnJhbWUiKSxyPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLG4oIityTHYiKS5hcHBlbmRDaGlsZCh0KSx0LnNyYz0iamF2YXNjcmlwdDoiLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksZS5jbG9zZSgpLHU9ZS5GO3ItLTspZGVsZXRlIHUucHJvdG90eXBlW2lbcl1dO3JldHVybiB1KCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oYy5wcm90b3R5cGU9cihlKSxuPW5ldyBjLGMucHJvdG90eXBlPW51bGwsblthXT1lKTpuPXUoKSx2b2lkIDA9PT10P246byhuLHQpfX0sTFFBYzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0hMX0sTFpXdDpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sTTZRajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaFBJUSIpLG89bigiSzB4VSIpKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxpW29dPT09ZSl9fSxNdWtiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJSakQvIik7ZS5leHBvcnRzPW4oIm5oNGciKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LE42Y0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjlBQW4iKSxvPW4oIlhLRlUiKSxpPW4oIlZUZXIiKSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyhuKCJFSzBFIikpKSxjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1hLmdldChlKTtpZighbyl7aWYoIW4pcmV0dXJuO2Euc2V0KGUsbz1uZXcgcil9dmFyIGk9by5nZXQodCk7aWYoIWkpe2lmKCFuKXJldHVybjtvLnNldCh0LGk9bmV3IHIpfXJldHVybiBpfTtlLmV4cG9ydHM9e3N0b3JlOmEsbWFwOmMsaGFzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwhMSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKGUpfSxnZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWModCxuLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQoZSl9LHNldDpmdW5jdGlvbihlLHQsbixyKXtjKG4sciwhMCkuc2V0KGUsdCl9LGtleXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1jKGUsdCwhMSkscj1bXTtyZXR1cm4gbiYmbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ci5wdXNoKHQpfSkscn0sa2V5OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwic3ltYm9sIj09dHlwZW9mIGU/ZTpTdHJpbmcoZSl9LGV4cDpmdW5jdGlvbihlKXtvKG8uUywiUmVmbGVjdCIsZSl9fX0sT1AzWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYWFneCIpLG89bigiUy9qLyIpLGk9bigiWVR2QSIpKCJJRV9QUk9UTyIpLGE9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxpKT9lW2ldOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LE9weGI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIjJPaUYiKSxhPXIua2V5LGM9ci5zZXQ7ci5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7YyhlLHQsKHZvaWQgMCE9PXI/bzppKShuKSxhKHIpKX19fSl9LFEzbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlNsa1kiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gcihlLCExLG4ucHVzaCxuLHQpLG59fSxRYURiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiS3V0aCIpLG89bigiUmpELyIpLGk9bigiZnlEcSIpLGE9e307bigiTXVrYiIpKGEsbigiSzB4VSIpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UucHJvdG90eXBlPXIoYSx7bmV4dDpvKDEsbil9KSxpKGUsdCsiIEl0ZXJhdG9yIil9fSxSWWk3OmZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5jZWlsLHI9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGU9K2UpPzA6KGU+MD9yOm4pKGUpfX0sIlJqRC8iOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sIlMvai8iOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ2aFBVIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxTbGtZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJINmhmIiksaT1uKCJNNlFqIiksYT1uKCJ5M3c5IiksYz1uKCJuZThpIiksdT1uKCJKKzZlIikscz17fSxsPXt9Oyh0PWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixmLHApe3ZhciBoLHYsZCxnLHk9cD9mdW5jdGlvbigpe3JldHVybiBlfTp1KGUpLF89cihuLGYsdD8yOjEpLG09MDtpZigiZnVuY3Rpb24iIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBpdGVyYWJsZSEiKTtpZihpKHkpKXtmb3IoaD1jKGUubGVuZ3RoKTtoPm07bSsrKWlmKChnPXQ/XyhhKHY9ZVttXSlbMF0sdlsxXSk6XyhlW21dKSk9PT1zfHxnPT09bClyZXR1cm4gZ31lbHNlIGZvcihkPXkuY2FsbChlKTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKChnPW8oZCxfLHYudmFsdWUsdCkpPT09c3x8Zz09PWwpcmV0dXJuIGd9KS5CUkVBSz1zLHQuUkVUVVJOPWx9LFQzOWI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiU2V0IixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVmKG8odGhpcywiU2V0IiksZT0wPT09ZT8wOmUsZSl9fSxyKX0sVXFjRjpmdW5jdGlvbihlLHQpe3QuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sVlRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZzNnNSIpLG89bigiZHlaWCIpLGk9b1siX19jb3JlLWpzX3NoYXJlZF9fIl18fChvWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpW2VdfHwoaVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKCJMUUFjIik/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE4IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSxYS0ZVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIiksbz1uKCJnM2c1IiksaT1uKCJNdWtiIiksYT1uKCJLcm9KIiksYz1uKCJtMFBwIiksdT1mdW5jdGlvbihlLHQsbil7dmFyIHMsbCxmLHAsaD1lJnUuRix2PWUmdS5HLGQ9ZSZ1LlAsZz1lJnUuQix5PXY/cjplJnUuUz9yW3RdfHwoclt0XT17fSk6KHJbdF18fHt9KS5wcm90b3R5cGUsXz12P286b1t0XXx8KG9bdF09e30pLG09Xy5wcm90b3R5cGV8fChfLnByb3RvdHlwZT17fSk7Zm9yKHMgaW4gdiYmKG49dCksbilmPSgobD0haCYmeSYmdm9pZCAwIT09eVtzXSk/eTpuKVtzXSxwPWcmJmw/YyhmLHIpOmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBmP2MoRnVuY3Rpb24uY2FsbCxmKTpmLHkmJmEoeSxzLGYsZSZ1LlUpLF9bc10hPWYmJmkoXyxzLHApLGQmJm1bc10hPWYmJihtW3NdPWYpfTtyLmNvcmU9byx1LkY9MSx1Lkc9Mix1LlM9NCx1LlA9OCx1LkI9MTYsdS5XPTMyLHUuVT02NCx1LlI9MTI4LGUuZXhwb3J0cz11fSxYTVZoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJLMHhVIikoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9WzddW3JdKCk7aS5yZXR1cm49ZnVuY3Rpb24oKXtvPSEwfSxBcnJheS5mcm9tKGksZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9WzddLGE9aVtyXSgpO2EubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUoaSl9Y2F0Y2goZSl7fXJldHVybiBufX0sWGJ6aTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiaTVkYyIpLnNldDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGE9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYSE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoaT1hLnByb3RvdHlwZSkhPT1uLnByb3RvdHlwZSYmcihpKSYmbyYmbyhlLGkpLGV9fSxZVHZBOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoImtleXMiKSxvPW4oInlscXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sWW1xdjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sWjZ2RjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieWxxcyIpKCJtZXRhIiksbz1uKCIwL1I0IiksaT1uKCJhYWd4IiksYT1uKCJoc3dhIikuZixjPTAsdT1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gdShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLGw9ZnVuY3Rpb24oZSl7YShlLHIse3ZhbHVlOntpOiJPIisgKytjLHc6e319fSl9LGY9ZS5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6ZnVuY3Rpb24oZSx0KXtpZighbyhlKSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGU/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtsKGUpfXJldHVybiBlW3JdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighaShlLHIpKXtpZighdShlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtsKGUpfXJldHVybiBlW3JdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiBzJiZmLk5FRUQmJnUoZSkmJiFpKGUscikmJmwoZSksZX19fSxaRDY3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiM0x5aiIpLG89bigiWjZ2RiIpLmdldFdlYWssaT1uKCJ5M3c5IiksYT1uKCIwL1I0IiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJDa2tUIiksbD1uKCJhYWd4IiksZj1uKCJzNXFZIikscD1zKDUpLGg9cyg2KSx2PTAsZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fbHx8KGUuX2w9bmV3IGcpfSxnPWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSx5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZS5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pfTtnLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXkodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISF5KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPXkodGhpcyxlKTtuP25bMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1oKHRoaXMuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KTtyZXR1cm5+dCYmdGhpcy5hLnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPWUoZnVuY3Rpb24oZSxyKXtjKGUscyx0LCJfaSIpLGUuX3Q9dCxlLl9pPXYrKyxlLl9sPXZvaWQgMCx2b2lkIDAhPXImJnUocixuLGVbaV0sZSl9KTtyZXR1cm4gcihzLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5kZWxldGUoZSk6biYmbChuLHRoaXMuX2kpJiZkZWxldGUgblt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5oYXMoZSk6biYmbChuLHRoaXMuX2kpfX0pLHN9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9byhpKHQpLCEwKTtyZXR1cm4hMD09PXI/ZChlKS5zZXQodCxuKTpyW2UuX2ldPW4sZX0sdWZzdG9yZTpkfX0sYUNGajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiWW1xdiIpLG89bigidmhQVSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihvKGUpKX19LGFhZ3g6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxhcG1UOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sY3pOSzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkRWZ0EiKSxvPW4oIkppRWEiKSxpPW4oIlVxY0YiKSxhPW4oIlMvai8iKSxjPW4oIlltcXYiKSx1PU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSF1fHxuKCJlZVZxIikoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCkscj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW25dPTcsci5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWV9KSw3IT11KHt9LGUpW25dfHxPYmplY3Qua2V5cyh1KHt9LHQpKS5qb2luKCIiKSE9cn0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWEoZSksdT1hcmd1bWVudHMubGVuZ3RoLHM9MSxsPW8uZixmPWkuZjt1PnM7KWZvcih2YXIgcCxoPWMoYXJndW1lbnRzW3MrK10pLHY9bD9yKGgpLmNvbmNhdChsKGgpKTpyKGgpLGQ9di5sZW5ndGgsZz0wO2Q+ZzspZi5jYWxsKGgscD12W2crK10pJiYobltwXT1oW3BdKTtyZXR1cm4gbn06dX0sImQvR2MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybihlPXIoZSkpPDA/byhlK3QsMCk6aShlLHQpfX0sZHlaWDpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsibnVtYmVyIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZWVWcTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZWxacTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImR5WlgiKSxvPW4oImhzd2EiKSxpPW4oIm5oNGciKSxhPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yW2VdO2kmJnQmJiF0W2FdJiZvLmYodCxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwiZk4vMyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5cyxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkobyhlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRzWzFdKSl9fSl9LGZ5RHE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKS5mLG89bigiYWFneCIpLGk9bigiSzB4VSIpKCJ0b1N0cmluZ1RhZyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZSYmIW8oZT1uP2U6ZS5wcm90b3R5cGUsaSkmJnIoZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZzNnNTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi41LjcifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sImhOL2ciOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4oIkZaY3EiKSxuKCIwVFdwIil9LGhQSVE6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGhzd2E6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKSxvPW4oInhwcWwiKSxpPW4oImFwbVQiKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigibmg0ZyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYocihlKSx0PWkodCwhMCkscihuKSxvKXRyeXtyZXR1cm4gYShlLHQsbil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxpNWRjOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJ5M3c5IiksaT1mdW5jdGlvbihlLHQpe2lmKG8oZSksIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQscil7dHJ5eyhyPW4oIm0wUHAiKShGdW5jdGlvbi5jYWxsLG4oIkVlbUgiKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwyKSkoZSxbXSksdD0hKGUgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2goZSl7dD0hMH1yZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4pLHQ/ZS5fX3Byb3RvX189bjpyKGUsbiksZX19KHt9LCExKTp2b2lkIDApLGNoZWNrOml9fSwiaVcrUyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIk9QM1kiKSxhPXIuaGFzLGM9ci5rZXksdT1mdW5jdGlvbihlLHQsbil7aWYoYShlLHQsbikpcmV0dXJuITA7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXImJnUoZSxyLG4pfTtyLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSkpfX0pfSxtMFBwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIyT2lGIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiBlLmNhbGwodCxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxuZThpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9vKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LG5oNGc6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sczVxWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSx1QXRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJUMzliIiksbz1uKCJRM25lIiksaT1uKCJONmNKIiksYT1uKCJ5M3c5IiksYz1uKCJPUDNZIiksdT1pLmtleXMscz1pLmtleSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dShlLHQpLGk9YyhlKTtpZihudWxsPT09aSlyZXR1cm4gbjt2YXIgYT1sKGksdCk7cmV0dXJuIGEubGVuZ3RoP24ubGVuZ3RoP28obmV3IHIobi5jb25jYXQoYSkpKTphOm59O2kuZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoYShlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOnMoYXJndW1lbnRzWzFdKSl9fSl9LHZoUFU6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSx3MmE1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhQ0ZqIiksbz1uKCJuZThpIiksaT1uKCJkL0djIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sYSl7dmFyIGMsdT1yKHQpLHM9byh1Lmxlbmd0aCksbD1pKGEscyk7aWYoZSYmbiE9bil7Zm9yKDtzPmw7KWlmKChjPXVbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3M+bDtsKyspaWYoKGV8fGwgaW4gdSkmJnVbbF09PT1uKXJldHVybiBlfHxsfHwwO3JldHVybiFlJiYtMX19fSx3bXZHOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiaHN3YSIpLmYsbz1uKCJLdXRoIiksaT1uKCIzTHlqIiksYT1uKCJtMFBwIiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJBZm56IiksbD1uKCIxVHNBIiksZj1uKCJlbFpxIikscD1uKCJuaDRnIiksaD1uKCJaNnZGIikuZmFzdEtleSx2PW4oInM1cVkiKSxkPXA/Il9zIjoic2l6ZSIsZz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9aCh0KTtpZigiRiIhPT1yKXJldHVybiBlLl9pW3JdO2ZvcihuPWUuX2Y7bjtuPW4ubilpZihuLms9PXQpcmV0dXJuIG59O2UuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGw9ZShmdW5jdGlvbihlLHIpe2MoZSxsLHQsIl9pIiksZS5fdD10LGUuX2k9byhudWxsKSxlLl9mPXZvaWQgMCxlLl9sPXZvaWQgMCxlW2RdPTAsdm9pZCAwIT1yJiZ1KHIsbixlW3NdLGUpfSk7cmV0dXJuIGkobC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXYodGhpcyx0KSxuPWUuX2kscj1lLl9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBuW3IuaV07ZS5fZj1lLl9sPXZvaWQgMCxlW2RdPTB9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgbj12KHRoaXMsdCkscj1nKG4sZSk7aWYocil7dmFyIG89ci5uLGk9ci5wO2RlbGV0ZSBuLl9pW3IuaV0sci5yPSEwLGkmJihpLm49byksbyYmKG8ucD1pKSxuLl9mPT1yJiYobi5fZj1vKSxuLl9sPT1yJiYobi5fbD1pKSxuW2RdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe3YodGhpcyx0KTtmb3IodmFyIG4scj1hKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7bj1uP24ubjp0aGlzLl9mOylmb3IocihuLnYsbi5rLHRoaXMpO24mJm4ucjspbj1uLnB9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIWcodih0aGlzLHQpLGUpfX0pLHAmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLHQpW2RdfX0pLGx9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPWcoZSx0KTtyZXR1cm4gaT9pLnY9bjooZS5fbD1pPXtpOm89aCh0LCEwKSxrOnQsdjpuLHA6cj1lLl9sLG46dm9pZCAwLHI6ITF9LGUuX2Z8fChlLl9mPWkpLHImJihyLm49aSksZVtkXSsrLCJGIiE9PW8mJihlLl9pW29dPWkpKSxlfSxnZXRFbnRyeTpnLHNldFN0cm9uZzpmdW5jdGlvbihlLHQsbil7cyhlLHQsZnVuY3Rpb24oZSxuKXt0aGlzLl90PXYoZSx0KSx0aGlzLl9rPW4sdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2ssdD10aGlzLl9sO3QmJnQucjspdD10LnA7cmV0dXJuIHRoaXMuX3QmJih0aGlzLl9sPXQ9dD90Lm46dGhpcy5fdC5fZik/bCgwLCJrZXlzIj09ZT90Lms6InZhbHVlcyI9PWU/dC52Olt0LmssdC52XSk6KHRoaXMuX3Q9dm9pZCAwLGwoMSkpfSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksZih0KX19fSx4cHFsOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oIm5oNGciKSYmIW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobigiSXc3MSIpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0seTN3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSx5bHFzOmZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0selJ3bzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiNkZNTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcocihlKSkodCl9fSx6aEFiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhYWd4Iiksbz1uKCJhQ0ZqIiksaT1uKCJ3MmE1IikoITEpLGE9bigiWVR2QSIpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGM9byhlKSx1PTAscz1bXTtmb3IobiBpbiBjKW4hPWEmJnIoYyxuKSYmcy5wdXNoKG4pO2Zvcig7dC5sZW5ndGg+dTspcihjLG49dFt1KytdKSYmKH5pKHMsbil8fHMucHVzaChuKSk7cmV0dXJuIHN9fSwienErQyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5tYXAsYz1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6aShhcmd1bWVudHNbMl0pLHI9YShvKHQpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIHU9Yy5nZXQodCk7cmV0dXJuIHUuZGVsZXRlKG4pLCEhdS5zaXplfHxjLmRlbGV0ZSh0KX19KX19LFtbMyw1XV1dKTshZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZS5kb2N1bWVudCxyPWUuT2JqZWN0LG89ZnVuY3Rpb24oZSl7dmFyIHQsbixvLGwsYT0vXltBLVpdK1thLXpdLyxpPWZ1bmN0aW9uKGUsdCl7KHQ9dC50b0xvd2VyQ2FzZSgpKWluIHV8fCh1W2VdPSh1W2VdfHxbXSkuY29uY2F0KHQpLHVbdF09dVt0LnRvVXBwZXJDYXNlKCldPWUpfSx1PShyLmNyZWF0ZXx8cikobnVsbCksYz17fTtmb3IobiBpbiBlKWZvcihsIGluIGVbbl0pZm9yKHVbbF09bz1lW25dW2xdLHQ9MDt0PG8ubGVuZ3RoO3QrKyl1W29bdF0udG9Mb3dlckNhc2UoKV09dVtvW3RdLnRvVXBwZXJDYXNlKCldPWw7cmV0dXJuIGMuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT91W2VdfHwoYS50ZXN0KGUpP1tdOiIiKTpmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0IGluIHUpZS50ZXN0KHQpJiZuLnB1c2godCk7cmV0dXJuIG59KGUpfSxjLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBhLnRlc3QoZSk/aShlLHQpOmkodCxlKSxjfSxjfSh7Y29sbGVjdGlvbnM6e0hUTUxBbGxDb2xsZWN0aW9uOlsiYWxsIl0sSFRNTENvbGxlY3Rpb246WyJmb3JtcyJdLEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOlsiZWxlbWVudHMiXSxIVE1MT3B0aW9uc0NvbGxlY3Rpb246WyJvcHRpb25zIl19LGVsZW1lbnRzOntFbGVtZW50OlsiZWxlbWVudCJdLEhUTUxBbmNob3JFbGVtZW50OlsiYSJdLEhUTUxBcHBsZXRFbGVtZW50OlsiYXBwbGV0Il0sSFRNTEFyZWFFbGVtZW50OlsiYXJlYSJdLEhUTUxBdHRhY2htZW50RWxlbWVudDpbImF0dGFjaG1lbnQiXSxIVE1MQXVkaW9FbGVtZW50OlsiYXVkaW8iXSxIVE1MQlJFbGVtZW50OlsiYnIiXSxIVE1MQmFzZUVsZW1lbnQ6WyJiYXNlIl0sSFRNTEJvZHlFbGVtZW50OlsiYm9keSJdLEhUTUxCdXR0b25FbGVtZW50OlsiYnV0dG9uIl0sSFRNTENhbnZhc0VsZW1lbnQ6WyJjYW52YXMiXSxIVE1MQ29udGVudEVsZW1lbnQ6WyJjb250ZW50Il0sSFRNTERMaXN0RWxlbWVudDpbImRsIl0sSFRNTERhdGFFbGVtZW50OlsiZGF0YSJdLEhUTUxEYXRhTGlzdEVsZW1lbnQ6WyJkYXRhbGlzdCJdLEhUTUxEZXRhaWxzRWxlbWVudDpbImRldGFpbHMiXSxIVE1MRGlhbG9nRWxlbWVudDpbImRpYWxvZyJdLEhUTUxEaXJlY3RvcnlFbGVtZW50OlsiZGlyIl0sSFRNTERpdkVsZW1lbnQ6WyJkaXYiXSxIVE1MRG9jdW1lbnQ6WyJkb2N1bWVudCJdLEhUTUxFbGVtZW50OlsiZWxlbWVudCIsImFiYnIiLCJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYiIsImJkaSIsImJkbyIsImNpdGUiLCJjb2RlIiwiY29tbWFuZCIsImRkIiwiZGZuIiwiZHQiLCJlbSIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJoZWFkZXIiLCJpIiwia2JkIiwibWFyayIsIm5hdiIsIm5vc2NyaXB0IiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzbWFsbCIsInN0cm9uZyIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ1IiwidmFyIiwid2JyIl0sSFRNTEVtYmVkRWxlbWVudDpbImVtYmVkIl0sSFRNTEZpZWxkU2V0RWxlbWVudDpbImZpZWxkc2V0Il0sSFRNTEZvbnRFbGVtZW50OlsiZm9udCJdLEhUTUxGb3JtRWxlbWVudDpbImZvcm0iXSxIVE1MRnJhbWVFbGVtZW50OlsiZnJhbWUiXSxIVE1MRnJhbWVTZXRFbGVtZW50OlsiZnJhbWVzZXQiXSxIVE1MSFJFbGVtZW50OlsiaHIiXSxIVE1MSGVhZEVsZW1lbnQ6WyJoZWFkIl0sSFRNTEhlYWRpbmdFbGVtZW50OlsiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Il0sSFRNTEh0bWxFbGVtZW50OlsiaHRtbCJdLEhUTUxJRnJhbWVFbGVtZW50OlsiaWZyYW1lIl0sSFRNTEltYWdlRWxlbWVudDpbImltZyJdLEhUTUxJbnB1dEVsZW1lbnQ6WyJpbnB1dCJdLEhUTUxLZXlnZW5FbGVtZW50Olsia2V5Z2VuIl0sSFRNTExJRWxlbWVudDpbImxpIl0sSFRNTExhYmVsRWxlbWVudDpbImxhYmVsIl0sSFRNTExlZ2VuZEVsZW1lbnQ6WyJsZWdlbmQiXSxIVE1MTGlua0VsZW1lbnQ6WyJsaW5rIl0sSFRNTE1hcEVsZW1lbnQ6WyJtYXAiXSxIVE1MTWFycXVlZUVsZW1lbnQ6WyJtYXJxdWVlIl0sSFRNTE1lZGlhRWxlbWVudDpbIm1lZGlhIl0sSFRNTE1lbnVFbGVtZW50OlsibWVudSJdLEhUTUxNZW51SXRlbUVsZW1lbnQ6WyJtZW51aXRlbSJdLEhUTUxNZXRhRWxlbWVudDpbIm1ldGEiXSxIVE1MTWV0ZXJFbGVtZW50OlsibWV0ZXIiXSxIVE1MTW9kRWxlbWVudDpbImRlbCIsImlucyJdLEhUTUxPTGlzdEVsZW1lbnQ6WyJvbCJdLEhUTUxPYmplY3RFbGVtZW50Olsib2JqZWN0Il0sSFRNTE9wdEdyb3VwRWxlbWVudDpbIm9wdGdyb3VwIl0sSFRNTE9wdGlvbkVsZW1lbnQ6WyJvcHRpb24iXSxIVE1MT3V0cHV0RWxlbWVudDpbIm91dHB1dCJdLEhUTUxQYXJhZ3JhcGhFbGVtZW50OlsicCJdLEhUTUxQYXJhbUVsZW1lbnQ6WyJwYXJhbSJdLEhUTUxQaWN0dXJlRWxlbWVudDpbInBpY3R1cmUiXSxIVE1MUHJlRWxlbWVudDpbInByZSJdLEhUTUxQcm9ncmVzc0VsZW1lbnQ6WyJwcm9ncmVzcyJdLEhUTUxRdW90ZUVsZW1lbnQ6WyJibG9ja3F1b3RlIiwicSIsInF1b3RlIl0sSFRNTFNjcmlwdEVsZW1lbnQ6WyJzY3JpcHQiXSxIVE1MU2VsZWN0RWxlbWVudDpbInNlbGVjdCJdLEhUTUxTaGFkb3dFbGVtZW50Olsic2hhZG93Il0sSFRNTFNsb3RFbGVtZW50Olsic2xvdCJdLEhUTUxTb3VyY2VFbGVtZW50Olsic291cmNlIl0sSFRNTFNwYW5FbGVtZW50Olsic3BhbiJdLEhUTUxTdHlsZUVsZW1lbnQ6WyJzdHlsZSJdLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OlsiY2FwdGlvbiJdLEhUTUxUYWJsZUNlbGxFbGVtZW50OlsidGQiLCJ0aCJdLEhUTUxUYWJsZUNvbEVsZW1lbnQ6WyJjb2wiLCJjb2xncm91cCJdLEhUTUxUYWJsZUVsZW1lbnQ6WyJ0YWJsZSJdLEhUTUxUYWJsZVJvd0VsZW1lbnQ6WyJ0ciJdLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OlsidGhlYWQiLCJ0Ym9keSIsInRmb290Il0sSFRNTFRlbXBsYXRlRWxlbWVudDpbInRlbXBsYXRlIl0sSFRNTFRleHRBcmVhRWxlbWVudDpbInRleHRhcmVhIl0sSFRNTFRpbWVFbGVtZW50OlsidGltZSJdLEhUTUxUaXRsZUVsZW1lbnQ6WyJ0aXRsZSJdLEhUTUxUcmFja0VsZW1lbnQ6WyJ0cmFjayJdLEhUTUxVTGlzdEVsZW1lbnQ6WyJ1bCJdLEhUTUxVbmtub3duRWxlbWVudDpbInVua25vd24iLCJ2aGdyb3VwdiIsInZrZXlnZW4iXSxIVE1MVmlkZW9FbGVtZW50OlsidmlkZW8iXX0sbm9kZXM6e0F0dHI6WyJub2RlIl0sQXVkaW86WyJhdWRpbyJdLENEQVRBU2VjdGlvbjpbIm5vZGUiXSxDaGFyYWN0ZXJEYXRhOlsibm9kZSJdLENvbW1lbnQ6WyIjY29tbWVudCJdLERvY3VtZW50OlsiI2RvY3VtZW50Il0sRG9jdW1lbnRGcmFnbWVudDpbIiNkb2N1bWVudC1mcmFnbWVudCJdLERvY3VtZW50VHlwZTpbIm5vZGUiXSxIVE1MRG9jdW1lbnQ6WyIjZG9jdW1lbnQiXSxJbWFnZTpbImltZyJdLE9wdGlvbjpbIm9wdGlvbiJdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbIm5vZGUiXSxTaGFkb3dSb290OlsiI3NoYWRvdy1yb290Il0sVGV4dDpbIiN0ZXh0Il0sWE1MRG9jdW1lbnQ6WyJ4bWwiXX19KTsib2JqZWN0IiE9dHlwZW9mIHQmJih0PXt0eXBlOnR8fCJhdXRvIn0pO3ZhciBsLGEsaSx1LGMscyxtLGYscCxkPSJyZWdpc3RlckVsZW1lbnQiLGg9Il9fIitkKygxZTUqZS5NYXRoLnJhbmRvbSgpPj4wKSxUPSJhZGRFdmVudExpc3RlbmVyIixMPSJhdHRhY2hlZCIsTT0iQ2FsbGJhY2siLEU9ImRldGFjaGVkIix2PSJleHRlbmRzIixIPSJhdHRyaWJ1dGVDaGFuZ2VkIitNLGc9TCtNLGI9ImNvbm5lY3RlZCIrTSx5PSJkaXNjb25uZWN0ZWQiK00sQz0iY3JlYXRlZCIrTSx3PUUrTSxBPSJBRERJVElPTiIsTz0iUkVNT1ZBTCIsTj0iRE9NQXR0ck1vZGlmaWVkIixEPSJET01Db250ZW50TG9hZGVkIixJPSJET01TdWJ0cmVlTW9kaWZpZWQiLEY9IjwiLFM9Ij0iLFY9L15bQS1aXVtBLVowLTldKig/Oi1bQS1aMC05XSspKyQvLFA9WyJBTk5PVEFUSU9OLVhNTCIsIkNPTE9SLVBST0ZJTEUiLCJGT05ULUZBQ0UiLCJGT05ULUZBQ0UtU1JDIiwiRk9OVC1GQUNFLVVSSSIsIkZPTlQtRkFDRS1GT1JNQVQiLCJGT05ULUZBQ0UtTkFNRSIsIk1JU1NJTkctR0xZUEgiXSxSPVtdLFU9W10saz0iIixfPW4uZG9jdW1lbnRFbGVtZW50LHE9Ui5pbmRleE9mfHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGg7dC0tJiZ0aGlzW3RdIT09ZTspO3JldHVybiB0fSx4PXIucHJvdG90eXBlLEI9eC5oYXNPd25Qcm9wZXJ0eSxaPXguaXNQcm90b3R5cGVPZixqPXIuZGVmaW5lUHJvcGVydHksRz1bXSx6PXIuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEs9ci5nZXRPd25Qcm9wZXJ0eU5hbWVzLFg9ci5nZXRQcm90b3R5cGVPZiwkPXIuc2V0UHJvdG90eXBlT2YsUT0hIXIuX19wcm90b19fLFc9Il9fZHJlQ0V2MSIsWT1lLmN1c3RvbUVsZW1lbnRzLEo9IS9eZm9yY2UvLnRlc3QodC50eXBlKSYmISEoWSYmWS5kZWZpbmUmJlkuZ2V0JiZZLndoZW5EZWZpbmVkKSxlZT1yLmNyZWF0ZXx8cix0ZT1lLk1hcHx8ZnVuY3Rpb24oKXt2YXIgZSx0PVtdLG49W107cmV0dXJue2dldDpmdW5jdGlvbihlKXtyZXR1cm4gbltxLmNhbGwodCxlKV19LHNldDpmdW5jdGlvbihyLG8peyhlPXEuY2FsbCh0LHIpKTwwP25bdC5wdXNoKHIpLTFdPW86bltlXT1vfX19LG5lPWUuUHJvbWlzZXx8ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0hMSxyPXtjYXRjaDpmdW5jdGlvbigpe3JldHVybiByfSx0aGVuOmZ1bmN0aW9uKGUpe3JldHVybiB0LnB1c2goZSksbiYmc2V0VGltZW91dChvLDEpLHJ9fTtmdW5jdGlvbiBvKGUpe2ZvcihuPSEwO3QubGVuZ3RoOyl0LnNoaWZ0KCkoZSl9cmV0dXJuIGUobykscn0scmU9ITEsb2U9ZWUobnVsbCksbGU9ZWUobnVsbCksYWU9bmV3IHRlLGllPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHVlPXIuY3JlYXRlfHxmdW5jdGlvbiBlKHQpe3JldHVybiB0PyhlLnByb3RvdHlwZT10LG5ldyBlKTp0aGlzfSxjZT0kfHwoUT9mdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9OksmJno/ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuLHI9Syh0KSxvPTAsbD1yLmxlbmd0aDtvPGw7bysrKUIuY2FsbChlLG49cltvXSl8fGooZSxuLHoodCxuKSl9cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZG97ZSh0LG4pfXdoaWxlKChuPVgobikpJiYhWi5jYWxsKG4sdCkpO3JldHVybiB0fX0oKTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX0pLHNlPWUuTXV0YXRpb25PYnNlcnZlcnx8ZS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLG1lPShlLkhUTUxFbGVtZW50fHxlLkVsZW1lbnR8fGUuTm9kZSkucHJvdG90eXBlLGZlPSFaLmNhbGwobWUsXykscGU9ZmU/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4udmFsdWUsZX06aixkZT1mZT9mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9OmZ1bmN0aW9uKGUpe3JldHVybiBaLmNhbGwobWUsZSl9LGhlPWZlJiZbXSxUZT1tZS5hdHRhY2hTaGFkb3csTGU9bWUuY2xvbmVOb2RlLE1lPW1lLmRpc3BhdGNoRXZlbnQsRWU9bWUuZ2V0QXR0cmlidXRlLHZlPW1lLmhhc0F0dHJpYnV0ZSxIZT1tZS5yZW1vdmVBdHRyaWJ1dGUsZ2U9bWUuc2V0QXR0cmlidXRlLGJlPW4uY3JlYXRlRWxlbWVudCx5ZT1iZSxDZT1zZSYme2F0dHJpYnV0ZXM6ITAsY2hhcmFjdGVyRGF0YTohMCxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0sd2U9c2V8fGZ1bmN0aW9uKGUpe0llPSExLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihOLHdlKX0sQWU9MCxPZT1kIGluIG4mJiEvXmZvcmNlLWFsbC8udGVzdCh0LnR5cGUpLE5lPSEwLERlPSExLEllPSEwLEZlPSEwLFNlPSEwO2Z1bmN0aW9uIFZlKCl7dmFyIGU9bC5zcGxpY2UoMCxsLmxlbmd0aCk7Zm9yKEFlPTA7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jYWxsKG51bGwsZS5zaGlmdCgpKX1mdW5jdGlvbiBQZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylHZShlW25dLHQpfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBmdW5jdGlvbih0KXtkZSh0KSYmKEdlKHQsZSksay5sZW5ndGgmJlBlKHQucXVlcnlTZWxlY3RvckFsbChrKSxlKSl9fWZ1bmN0aW9uIFVlKGUpe3ZhciB0PUVlLmNhbGwoZSwiaXMiKSxuPWUubm9kZU5hbWUudG9VcHBlckNhc2UoKSxyPXEuY2FsbChSLHQ/Uyt0LnRvVXBwZXJDYXNlKCk6RituKTtyZXR1cm4gdCYmLTE8ciYmIWtlKG4sdCk/LTE6cn1mdW5jdGlvbiBrZShlLHQpe3JldHVybi0xPGsuaW5kZXhPZihlKydbaXM9IicrdCsnIl0nKX1mdW5jdGlvbiBfZShlKXt2YXIgdD1lLmN1cnJlbnRUYXJnZXQsbj1lLmF0dHJDaGFuZ2Uscj1lLmF0dHJOYW1lLG89ZS50YXJnZXQsbD1lW0FdfHwyLGE9ZVtPXXx8MzshU2V8fG8mJm8hPT10fHwhdFtIXXx8InN0eWxlIj09PXJ8fGUucHJldlZhbHVlPT09ZS5uZXdWYWx1ZSYmKCIiIT09ZS5uZXdWYWx1ZXx8biE9PWwmJm4hPT1hKXx8dFtIXShyLG49PT1sP251bGw6ZS5wcmV2VmFsdWUsbj09PWE/bnVsbDplLm5ld1ZhbHVlKX1mdW5jdGlvbiBxZShlKXt2YXIgdD1SZShlKTtyZXR1cm4gZnVuY3Rpb24oZSl7bC5wdXNoKHQsZS50YXJnZXQpLEFlJiZjbGVhclRpbWVvdXQoQWUpLEFlPXNldFRpbWVvdXQoVmUsMSl9fWZ1bmN0aW9uIHhlKGUpe0ZlJiYoRmU9ITEsZS5jdXJyZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoRCx4ZSkpLGsubGVuZ3RoJiZQZSgoZS50YXJnZXR8fG4pLnF1ZXJ5U2VsZWN0b3JBbGwoayksZS5kZXRhaWw9PT1FP0U6TCksZmUmJmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxuPWhlLmxlbmd0aDt0PG47dCsrKV8uY29udGFpbnMoZT1oZVt0XSl8fChuLS0saGUuc3BsaWNlKHQtLSwxKSxHZShlLEUpKX0oKX1mdW5jdGlvbiBCZShlLHQpe2dlLmNhbGwodGhpcyxlLHQpLGEuY2FsbCh0aGlzLHt0YXJnZXQ6dGhpc30pfWZ1bmN0aW9uIFplKGUsdCl7Y2UoZSx0KSxjP2Mub2JzZXJ2ZShlLENlKTooSWUmJihlLnNldEF0dHJpYnV0ZT1CZSxlW2hdPXUoZSksZVtUXShJLGEpKSxlW1RdKE4sX2UpKSxlW0NdJiZTZSYmKGUuY3JlYXRlZD0hMCxlW0NdKCksZS5jcmVhdGVkPSExKX1mdW5jdGlvbiBqZShlKXt0aHJvdyBuZXcgRXJyb3IoIkEgIitlKyIgdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiKX1mdW5jdGlvbiBHZShlLHQpe3ZhciBuLHIsbz1VZShlKTstMTxvJiYobShlLFVbb10pLG89MCx0IT09THx8ZVtMXT90IT09RXx8ZVtFXXx8KGVbTF09ITEsZVtFXT0hMCxyPSJkaXNjb25uZWN0ZWQiLG89MSk6KGVbRV09ITEsZVtMXT0hMCxyPSJjb25uZWN0ZWQiLG89MSxmZSYmcS5jYWxsKGhlLGUpPDAmJmhlLnB1c2goZSkpLG8mJihuPWVbdCtNXXx8ZVtyK01dKSYmbi5jYWxsKGUpKX1mdW5jdGlvbiB6ZSgpe31mdW5jdGlvbiBLZShlLHQscil7dmFyIG89ciYmclt2XXx8IiIsbD10LnByb3RvdHlwZSxhPXVlKGwpLGk9dC5vYnNlcnZlZEF0dHJpYnV0ZXN8fEcsdT17cHJvdG90eXBlOmF9O3BlKGEsQyx7dmFsdWU6ZnVuY3Rpb24oKXtpZihyZSlyZT0hMTtlbHNlIGlmKCF0aGlzW1ddKXt0aGlzW1ddPSEwLG5ldyB0KHRoaXMpLGxbQ10mJmxbQ10uY2FsbCh0aGlzKTt2YXIgZT1vZVthZS5nZXQodCldOyghSnx8ZS5jcmVhdGUubGVuZ3RoPjEpJiZRZSh0aGlzKX19fSkscGUoYSxILHt2YWx1ZTpmdW5jdGlvbihlKXstMTxxLmNhbGwoaSxlKSYmbFtIXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSksbFtiXSYmcGUoYSxnLHt2YWx1ZTpsW2JdfSksbFt5XSYmcGUoYSx3LHt2YWx1ZTpsW3ldfSksbyYmKHVbdl09byksZT1lLnRvVXBwZXJDYXNlKCksb2VbZV09e2NvbnN0cnVjdG9yOnQsY3JlYXRlOm8/W28saWUoZSldOltlXX0sYWUuc2V0KHQsZSksbltkXShlLnRvTG93ZXJDYXNlKCksdSksV2UoZSksbGVbZV0ucigpfWZ1bmN0aW9uIFhlKGUpe3ZhciB0PW9lW2UudG9VcHBlckNhc2UoKV07cmV0dXJuIHQmJnQuY29uc3RydWN0b3J9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSYmZS5pc3x8IiJ9ZnVuY3Rpb24gUWUoZSl7Zm9yKHZhciB0LG49ZVtIXSxyPW4/ZS5hdHRyaWJ1dGVzOkcsbz1yLmxlbmd0aDtvLS07KW4uY2FsbChlLCh0PXJbb10pLm5hbWV8fHQubm9kZU5hbWUsbnVsbCx0LnZhbHVlfHx0Lm5vZGVWYWx1ZSl9ZnVuY3Rpb24gV2UoZSl7cmV0dXJuKGU9ZS50b1VwcGVyQ2FzZSgpKWluIGxlfHwobGVbZV09e30sbGVbZV0ucD1uZXcgbmUoZnVuY3Rpb24odCl7bGVbZV0ucj10fSkpLGxlW2VdLnB9ZnVuY3Rpb24gWWUoKXtZJiZkZWxldGUgZS5jdXN0b21FbGVtZW50cyxqKGUsImN1c3RvbUVsZW1lbnRzIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm5ldyB6ZX0pLGooZSwiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Iix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnplfSk7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciByPWVbdF07aWYocil7ZVt0XT1mdW5jdGlvbihlKXt2YXIgdCxvO3JldHVybiBlfHwoZT10aGlzKSxlW1ddfHwocmU9ITAsdD1vZVthZS5nZXQoZS5jb25zdHJ1Y3RvcildLChlPShvPUomJjE9PT10LmNyZWF0ZS5sZW5ndGgpP1JlZmxlY3QuY29uc3RydWN0KHIsRyx0LmNvbnN0cnVjdG9yKTpuLmNyZWF0ZUVsZW1lbnQuYXBwbHkobix0LmNyZWF0ZSkpW1ddPSEwLHJlPSExLG98fFFlKGUpKSxlfSxlW3RdLnByb3RvdHlwZT1yLnByb3RvdHlwZTt0cnl7ci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZVt0XX1jYXRjaChuKXtqKHIsVyx7dmFsdWU6ZVt0XX0pfX19LHI9by5nZXQoL15IVE1MW0EtWl0qW2Etel0vKSxsPXIubGVuZ3RoO2wtLTt0KHJbbF0pKTtuLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0kZSh0KTtyZXR1cm4gbj95ZS5jYWxsKHRoaXMsZSxpZShuKSk6eWUuY2FsbCh0aGlzLGUpfSxPZXx8KERlPSEwLG5bZF0oIiIpKX1pZihzZSYmKChwPW4uY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD0iPGRpdj48ZGl2PjwvZGl2PjwvZGl2PiIsbmV3IHNlKGZ1bmN0aW9uKGUsdCl7aWYoZVswXSYmImNoaWxkTGlzdCI9PWVbMF0udHlwZSYmIWVbMF0ucmVtb3ZlZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgbj0ocD16KG1lLCJpbm5lckhUTUwiKSkmJnAuc2V0O24mJmoobWUsImlubmVySFRNTCIse3NldDpmdW5jdGlvbihlKXtmb3IoO3RoaXMubGFzdENoaWxkOyl0aGlzLnJlbW92ZUNoaWxkKHRoaXMubGFzdENoaWxkKTtuLmNhbGwodGhpcyxlKX19KX10LmRpc2Nvbm5lY3QoKSxwPW51bGx9KS5vYnNlcnZlKHAse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSkscC5pbm5lckhUTUw9IiIpLE9lfHwoJHx8UT8obT1mdW5jdGlvbihlLHQpe1ouY2FsbCh0LGUpfHxaZShlLHQpfSxmPVplKTpmPW09ZnVuY3Rpb24oZSx0KXtlW2hdfHwoZVtoXT1yKCEwKSxaZShlLHQpKX0sZmU/KEllPSExLGZ1bmN0aW9uKCl7dmFyIGU9eihtZSxUKSx0PWUudmFsdWUsbj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQ3VzdG9tRXZlbnQoTix7YnViYmxlczohMH0pO3QuYXR0ck5hbWU9ZSx0LnByZXZWYWx1ZT1FZS5jYWxsKHRoaXMsZSksdC5uZXdWYWx1ZT1udWxsLHRbT109dC5hdHRyQ2hhbmdlPTIsSGUuY2FsbCh0aGlzLGUpLE1lLmNhbGwodGhpcyx0KX0scj1mdW5jdGlvbihlLHQpe3ZhciBuPXZlLmNhbGwodGhpcyxlKSxyPW4mJkVlLmNhbGwodGhpcyxlKSxvPW5ldyBDdXN0b21FdmVudChOLHtidWJibGVzOiEwfSk7Z2UuY2FsbCh0aGlzLGUsdCksby5hdHRyTmFtZT1lLG8ucHJldlZhbHVlPW4/cjpudWxsLG8ubmV3VmFsdWU9dCxuP28uTU9ESUZJQ0FUSU9OPW8uYXR0ckNoYW5nZT0xOm9bQV09by5hdHRyQ2hhbmdlPTAsTWUuY2FsbCh0aGlzLG8pfSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jdXJyZW50VGFyZ2V0LHI9bltoXSxvPWUucHJvcGVydHlOYW1lO3IuaGFzT3duUHJvcGVydHkobykmJihyPXJbb10sKHQ9bmV3IEN1c3RvbUV2ZW50KE4se2J1YmJsZXM6ITB9KSkuYXR0ck5hbWU9ci5uYW1lLHQucHJldlZhbHVlPXIudmFsdWV8fG51bGwsdC5uZXdWYWx1ZT1yLnZhbHVlPW5bb118fG51bGwsbnVsbD09dC5wcmV2VmFsdWU/dFtBXT10LmF0dHJDaGFuZ2U9MDp0Lk1PRElGSUNBVElPTj10LmF0dHJDaGFuZ2U9MSxNZS5jYWxsKG4sdCkpfTtlLnZhbHVlPWZ1bmN0aW9uKGUsbCxhKXtlPT09TiYmdGhpc1tIXSYmdGhpcy5zZXRBdHRyaWJ1dGUhPT1yJiYodGhpc1toXT17Y2xhc3NOYW1lOntuYW1lOiJjbGFzcyIsdmFsdWU6dGhpcy5jbGFzc05hbWV9fSx0aGlzLnNldEF0dHJpYnV0ZT1yLHRoaXMucmVtb3ZlQXR0cmlidXRlPW4sdC5jYWxsKHRoaXMsInByb3BlcnR5Y2hhbmdlIixvKSksdC5jYWxsKHRoaXMsZSxsLGEpfSxqKG1lLFQsZSl9KCkpOnNlfHwoX1tUXShOLHdlKSxfLnNldEF0dHJpYnV0ZShoLDEpLF8ucmVtb3ZlQXR0cmlidXRlKGgpLEllJiYoYT1mdW5jdGlvbihlKXt2YXIgdCxuLHI7aWYodGhpcz09PWUudGFyZ2V0KXtmb3IociBpbiB0PXRoaXNbaF0sdGhpc1toXT1uPXUodGhpcyksbil7aWYoIShyIGluIHQpKXJldHVybiBpKDAsdGhpcyxyLHRbcl0sbltyXSxBKTtpZihuW3JdIT09dFtyXSlyZXR1cm4gaSgxLHRoaXMscix0W3JdLG5bcl0sIk1PRElGSUNBVElPTiIpfWZvcihyIGluIHQpaWYoIShyIGluIG4pKXJldHVybiBpKDIsdGhpcyxyLHRbcl0sbltyXSxPKX19LGk9ZnVuY3Rpb24oZSx0LG4scixvLGwpe3ZhciBhPXthdHRyQ2hhbmdlOmUsY3VycmVudFRhcmdldDp0LGF0dHJOYW1lOm4scHJldlZhbHVlOnIsbmV3VmFsdWU6b307YVtsXT1lLF9lKGEpfSx1PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9e30sbz1lLmF0dHJpYnV0ZXMsbD0wLGE9by5sZW5ndGg7bDxhO2wrKykic2V0QXR0cmlidXRlIiE9PShuPSh0PW9bbF0pLm5hbWUpJiYocltuXT10LnZhbHVlKTtyZXR1cm4gcn0pKSxuW2RdPWZ1bmN0aW9uKGUsdCl7aWYocj1lLnRvVXBwZXJDYXNlKCksTmUmJihOZT0hMSxzZT8oYz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjt0KGVbbisrXSkpO31yZXR1cm4gbmV3IHNlKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbyxsLGEsaT0wLHU9ci5sZW5ndGg7aTx1O2krKykiY2hpbGRMaXN0Ij09PShvPXJbaV0pLnR5cGU/KG4oby5hZGRlZE5vZGVzLGUpLG4oby5yZW1vdmVkTm9kZXMsdCkpOihsPW8udGFyZ2V0LFNlJiZsW0hdJiYic3R5bGUiIT09by5hdHRyaWJ1dGVOYW1lJiYoYT1FZS5jYWxsKGwsby5hdHRyaWJ1dGVOYW1lKSkhPT1vLm9sZFZhbHVlJiZsW0hdKG8uYXR0cmlidXRlTmFtZSxvLm9sZFZhbHVlLGEpKX0pfShSZShMKSxSZShFKSksKHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGMub2JzZXJ2ZShlLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGV9KShuKSxUZSYmKG1lLmF0dGFjaFNoYWRvdz1mdW5jdGlvbigpe3JldHVybiBzKFRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSk6KGw9W10sbltUXSgiRE9NTm9kZUluc2VydGVkIixxZShMKSksbltUXSgiRE9NTm9kZVJlbW92ZWQiLHFlKEUpKSksbltUXShELHhlKSxuW1RdKCJyZWFkeXN0YXRlY2hhbmdlIix4ZSksbWUuY2xvbmVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PUxlLmNhbGwodGhpcywhIWUpLG49VWUodCk7cmV0dXJuLTE8biYmZih0LFVbbl0pLGUmJmsubGVuZ3RoJiZmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylmKHQ9ZVtuXSxVW1VlKHQpXSl9KHQucXVlcnlTZWxlY3RvckFsbChrKSksdH0pLERlKXJldHVybiBEZT0hMTtpZigtMjxxLmNhbGwoUixTK3IpK3EuY2FsbChSLEYrcikmJmplKGUpLCFWLnRlc3Qocil8fC0xPHEuY2FsbChQLHIpKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgIitlKyIgaXMgaW52YWxpZCIpO3ZhciByLG8sYT1mdW5jdGlvbigpe3JldHVybiB1P24uY3JlYXRlRWxlbWVudChtLHIpOm4uY3JlYXRlRWxlbWVudChtKX0saT10fHx4LHU9Qi5jYWxsKGksdiksbT11P3Rbdl0udG9VcHBlckNhc2UoKTpyO3JldHVybiB1JiYtMTxxLmNhbGwoUixGK20pJiZqZShtKSxvPVIucHVzaCgodT9TOkYpK3IpLTEsaz1rLmNvbmNhdChrLmxlbmd0aD8iLCI6IiIsdT9tKydbaXM9IicrZS50b0xvd2VyQ2FzZSgpKyciXSc6bSksYS5wcm90b3R5cGU9VVtvXT1CLmNhbGwoaSwicHJvdG90eXBlIik/aS5wcm90b3R5cGU6dWUobWUpLGsubGVuZ3RoJiZQZShuLnF1ZXJ5U2VsZWN0b3JBbGwoayksTCksYX0sbi5jcmVhdGVFbGVtZW50PXllPWZ1bmN0aW9uKGUsdCl7dmFyIHI9JGUodCksbz1yP2JlLmNhbGwobixlLGllKHIpKTpiZS5jYWxsKG4sZSksbD0iIitlLGE9cS5jYWxsKFIsKHI/UzpGKSsocnx8bCkudG9VcHBlckNhc2UoKSksaT0tMTxhO3JldHVybiByJiYoby5zZXRBdHRyaWJ1dGUoImlzIixyPXIudG9Mb3dlckNhc2UoKSksaSYmKGk9a2UobC50b1VwcGVyQ2FzZSgpLHIpKSksU2U9IW4uY3JlYXRlRWxlbWVudC5pbm5lckhUTUxIZWxwZXIsaSYmZihvLFVbYV0pLG99KSx6ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnplLGRlZmluZTpKP2Z1bmN0aW9uKGUsdCxuKXtpZihuKUtlKGUsdCxuKTtlbHNle3ZhciByPWUudG9VcHBlckNhc2UoKTtvZVtyXT17Y29uc3RydWN0b3I6dCxjcmVhdGU6W3JdfSxhZS5zZXQodCxyKSxZLmRlZmluZShlLHQpfX06S2UsZ2V0Oko/ZnVuY3Rpb24oZSl7cmV0dXJuIFkuZ2V0KGUpfHxYZShlKX06WGUsd2hlbkRlZmluZWQ6Sj9mdW5jdGlvbihlKXtyZXR1cm4gbmUucmFjZShbWS53aGVuRGVmaW5lZChlKSxXZShlKV0pfTpXZX0sIVl8fC9eZm9yY2UvLnRlc3QodC50eXBlKSlZZSgpO2Vsc2UgaWYoIXQubm9CdWlsdEluKXRyeXshZnVuY3Rpb24odCxyLG8pe3ZhciBsPW5ldyBSZWdFeHAoIl48YVxccytpcz0oJ3xcIikiK28rIlxcMT48L2E+JCIpO2lmKHJbdl09ImEiLCh0LnByb3RvdHlwZT11ZShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj10LGUuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG8sdCxyKSwhbC50ZXN0KG4uY3JlYXRlRWxlbWVudCgiYSIse2lzOm99KS5vdXRlckhUTUwpfHwhbC50ZXN0KChuZXcgdCkub3V0ZXJIVE1MKSl0aHJvdyByfShmdW5jdGlvbiBlKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxBbmNob3JFbGVtZW50LFtdLGUpfSx7fSwiZG9jdW1lbnQtcmVnaXN0ZXItZWxlbWVudC1hIil9Y2F0Y2goZSl7WWUoKX1pZighdC5ub0J1aWx0SW4pdHJ5e2JlLmNhbGwobiwiYSIsImEiKX1jYXRjaChlKXtpZT1mdW5jdGlvbihlKXtyZXR1cm57aXM6ZS50b0xvd2VyQ2FzZSgpfX19fSh3aW5kb3cpOyh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbOF0seyIrdEo0IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpJiYhZS5jbG9zZWQ7bisrKWUubmV4dCh0W25dKTtlLmNsb3NlZHx8ZS5jb21wbGV0ZSgpfX19LCIrdW1LIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoKXt9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sIi9XWXYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3Vic2NyaWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSl9LCIvZE82IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBifSk7dmFyIGk9bigibXJTRyIpLHI9bigibjZnRyIpLG89bigiWVNoMiIpLGE9bigiQ2NuRyIpLHM9bigiV2Y0cCIpLGw9bigiSzlJYSIpLHU9bigicHVnVCIpLGM9bigicDBpYiIpLGY9bigibExBUCIpLGQ9bigiWWxiUSIpLGg9bigicDBTaiIpLHA9WyJtYXQtYmFzaWMtY2hpcCJdLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5fZWxlbWVudFJlZj1lLG8uX3JpcHBsZXNHbG9iYWxseURpc2FibGVkPSExLG8ucmlwcGxlQ29uZmlnPXt9LG8uX2hhc0ZvY3VzPSExLG8uY2hpcExpc3RTZWxlY3RhYmxlPSEwLG8uX3NlbGVjdGVkPSExLG8uX3NlbGVjdGFibGU9ITAsby5fcmVtb3ZhYmxlPSEwLG8uX29uRm9jdXM9bmV3IGwuYSxvLl9vbkJsdXI9bmV3IGwuYSxvLnNlbGVjdGlvbkNoYW5nZT1uZXcgYS5uLG8uZGVzdHJveWVkPW5ldyBhLm4sby5yZW1vdmVkPW5ldyBhLm4sby5fYWRkSG9zdENsYXNzTmFtZSgpLG8uX2NoaXBSaXBwbGU9bmV3IHMueShvLG4sZSxpKSxvLl9jaGlwUmlwcGxlLnNldHVwVHJpZ2dlckV2ZW50cyhlLm5hdGl2ZUVsZW1lbnQpLHImJihvLl9yaXBwbGVzR2xvYmFsbHlEaXNhYmxlZD0hIXIuZGlzYWJsZWQsby5yaXBwbGVDb25maWc9e3NwZWVkRmFjdG9yOnIuYmFzZVNwZWVkRmFjdG9yLGFuaW1hdGlvbjpyLmFuaW1hdGlvbix0ZXJtaW5hdGVPblBvaW50ZXJVcDpyLnRlcm1pbmF0ZU9uUG9pbnRlclVwfSksb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJpcHBsZURpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fcmlwcGxlc0dsb2JhbGx5RGlzYWJsZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3RlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3NlbGVjdGVkPU9iamVjdChyLmMpKHQpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe3NvdXJjZTp0aGlzLGlzVXNlcklucHV0OiExLHNlbGVjdGVkOnR9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9dGhpcy5fdmFsdWU/dGhpcy5fdmFsdWU6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdmFsdWU9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdGFibGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VsZWN0YWJsZSYmdGhpcy5jaGlwTGlzdFNlbGVjdGFibGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9zZWxlY3RhYmxlPU9iamVjdChyLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicmVtb3ZhYmxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbW92YWJsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92YWJsZT1PYmplY3Qoci5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFyaWFTZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGFibGU/dGhpcy5zZWxlY3RlZC50b1N0cmluZygpOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2FkZEhvc3RDbGFzc05hbWU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07aWYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZShuKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PW4pcmV0dXJuIHZvaWQgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQobil9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1zdGFuZGFyZC1jaGlwIil9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQuZW1pdCh7Y2hpcDp0aGlzfSksdGhpcy5fY2hpcFJpcHBsZS5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfSxlLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtzb3VyY2U6dGhpcyxpc1VzZXJJbnB1dDohMSxzZWxlY3RlZDohMH0pfSxlLnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPSExLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe3NvdXJjZTp0aGlzLGlzVXNlcklucHV0OiExLHNlbGVjdGVkOiExfSl9LGUucHJvdG90eXBlLnNlbGVjdFZpYUludGVyYWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7c291cmNlOnRoaXMsaXNVc2VySW5wdXQ6ITAsc2VsZWN0ZWQ6ITB9KX0sZS5wcm90b3R5cGUudG9nZ2xlU2VsZWN0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLl9zZWxlY3RlZD0hdGhpcy5zZWxlY3RlZCx0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtzb3VyY2U6dGhpcyxpc1VzZXJJbnB1dDp0LHNlbGVjdGVkOnRoaXMuX3NlbGVjdGVkfSksdGhpcy5zZWxlY3RlZH0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9oYXNGb2N1c3x8KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29uRm9jdXMubmV4dCh7Y2hpcDp0aGlzfSkpLHRoaXMuX2hhc0ZvY3VzPSEwfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnJlbW92YWJsZSYmdGhpcy5yZW1vdmVkLmVtaXQoe2NoaXA6dGhpc30pfSxlLnByb3RvdHlwZS5faGFuZGxlQ2xpY2s9ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZHx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sZS5wcm90b3R5cGUuX2hhbmRsZUtleWRvd249ZnVuY3Rpb24odCl7aWYoIXRoaXMuZGlzYWJsZWQpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBvLmM6Y2FzZSBvLmI6dGhpcy5yZW1vdmUoKSx0LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBvLmw6dGhpcy5zZWxlY3RhYmxlJiZ0aGlzLnRvZ2dsZVNlbGVjdGVkKCEwKSx0LnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fYmx1cj1mdW5jdGlvbigpe3RoaXMuX2hhc0ZvY3VzPSExLHRoaXMuX29uQmx1ci5uZXh0KHtjaGlwOnRoaXN9KX0sZX0oT2JqZWN0KHMueikoT2JqZWN0KHMuQSkoT2JqZWN0KHMuQikoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpLCJwcmltYXJ5IikpLGI9bmV3IGEucSgibWF0LWNoaXBzLWRlZmF1bHQtb3B0aW9ucyIpLHk9MCx2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvLHMsbCl7dmFyIGM9dC5jYWxsKHRoaXMscyxyLG8sbCl8fHRoaXM7cmV0dXJuIGMuX2VsZW1lbnRSZWY9ZSxjLl9jaGFuZ2VEZXRlY3RvclJlZj1uLGMuX2Rpcj1pLGMubmdDb250cm9sPWwsYy5jb250cm9sVHlwZT0ibWF0LWNoaXAtbGlzdCIsYy5fbGFzdERlc3Ryb3llZEluZGV4PW51bGwsYy5fY2hpcFNldD1uZXcgV2Vha01hcCxjLl90YWJPdXRTdWJzY3JpcHRpb249dS5hLkVNUFRZLGMuX3VpZD0ibWF0LWNoaXAtbGlzdC0iK3krKyxjLl90YWJJbmRleD0wLGMuX3VzZXJUYWJJbmRleD1udWxsLGMuX29uVG91Y2hlZD1mdW5jdGlvbigpe30sYy5fb25DaGFuZ2U9ZnVuY3Rpb24oKXt9LGMuX211bHRpcGxlPSExLGMuX2NvbXBhcmVXaXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfSxjLl9yZXF1aXJlZD0hMSxjLl9kaXNhYmxlZD0hMSxjLmFyaWFPcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsYy5fc2VsZWN0YWJsZT0hMCxjLmNoYW5nZT1uZXcgYS5uLGMudmFsdWVDaGFuZ2U9bmV3IGEubixjLm5nQ29udHJvbCYmKGMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9YyksY31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ6dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyb2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1wdHk/bnVsbDoibGlzdGJveCJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtdWx0aXBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aXBsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX211bHRpcGxlPU9iamVjdChyLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29tcGFyZVdpdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9jb21wYXJlV2l0aD10LHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYWx1ZSh0KSx0aGlzLl92YWx1ZT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0P3RoaXMuX2NoaXBJbnB1dC5pZDp0aGlzLl91aWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyZXF1aXJlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXF1aXJlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlcXVpcmVkPU9iamVjdChyLmMpKHQpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBsYWNlaG9sZGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoaXBJbnB1dD90aGlzLl9jaGlwSW5wdXQucGxhY2Vob2xkZXI6dGhpcy5fcGxhY2Vob2xkZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9wbGFjZWhvbGRlcj10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvY3VzZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8dGhpcy5jaGlwcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXNGb2N1c30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZW1wdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oIXRoaXMuX2NoaXBJbnB1dHx8dGhpcy5fY2hpcElucHV0LmVtcHR5KSYmMD09PXRoaXMuY2hpcHMubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hvdWxkTGFiZWxGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmVtcHR5fHx0aGlzLmZvY3VzZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5nQ29udHJvbD8hIXRoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KHIuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWxlY3RhYmxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGV9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3NlbGVjdGFibGU9T2JqZWN0KHIuYykodCksdGhpcy5jaGlwcyYmdGhpcy5jaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaXBMaXN0U2VsZWN0YWJsZT1lLl9zZWxlY3RhYmxlfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ0YWJJbmRleCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl91c2VyVGFiSW5kZXg9dCx0aGlzLl90YWJJbmRleD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpcFNlbGVjdGlvbkNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5hLmFwcGx5KHZvaWQgMCx0aGlzLmNoaXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3Rpb25DaGFuZ2V9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlwRm9jdXNDaGFuZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuYS5hcHBseSh2b2lkIDAsdGhpcy5jaGlwcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX29uRm9jdXN9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlwQmx1ckNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5hLmFwcGx5KHZvaWQgMCx0aGlzLmNoaXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fb25CbHVyfSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpcFJlbW92ZUNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5hLmFwcGx5KHZvaWQgMCx0aGlzLmNoaXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95ZWR9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBmLmEodGhpcy5jaGlwcykud2l0aFdyYXAoKS53aXRoVmVydGljYWxPcmllbnRhdGlvbigpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIiksdGhpcy5fdGFiT3V0U3Vic2NyaXB0aW9uPXRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3RhYkluZGV4PS0xLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fdGFiSW5kZXg9dC5fdXNlclRhYkluZGV4fHwwfSl9KSx0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5jaGlwcy5jaGFuZ2VzLnBpcGUoT2JqZWN0KGguYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3Jlc2V0Q2hpcHMoKSx0Ll9pbml0aWFsaXplU2VsZWN0aW9uKCksdC5fdXBkYXRlVGFiSW5kZXgoKSx0Ll91cGRhdGVGb2N1c0ZvckRlc3Ryb3llZENoaXBzKCksdC5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IGQuYih0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSxlLnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdGFiT3V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hhbmdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uJiZ0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZHJvcFN1YnNjcmlwdGlvbnMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5yZWdpc3RlcklucHV0PWZ1bmN0aW9uKHQpe3RoaXMuX2NoaXBJbnB1dD10fSxlLnByb3RvdHlwZS5zZXREZXNjcmliZWRCeUlkcz1mdW5jdGlvbih0KXt0aGlzLl9hcmlhRGVzY3JpYmVkYnk9dC5qb2luKCIgIil9LGUucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5jaGlwcyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0LCExKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLl9vblRvdWNoZWQ9dH0sZS5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRpc2FibGVkPXQsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc2FibGVkPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSxlLnByb3RvdHlwZS5vbkNvbnRhaW5lckNsaWNrPWZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2NoaXBJbnB1dCYmdGhpcy5fY2hpcElucHV0LmZvY3VzZWR8fCh0aGlzLmNoaXBzLmxlbmd0aD4wPyh0aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSk6KHRoaXMuX2ZvY3VzSW5wdXQoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKX0sZS5wcm90b3R5cGUuX2ZvY3VzSW5wdXQ9ZnVuY3Rpb24oKXt0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1cygpfSxlLnByb3RvdHlwZS5fa2V5ZG93bj1mdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldDt0LmtleUNvZGU9PT1vLmImJnRoaXMuX2lzSW5wdXRFbXB0eShlKT8odGhpcy5fa2V5TWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKSk6ZSYmZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1jaGlwIikmJih0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bih0KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlLnByb3RvdHlwZS5fdXBkYXRlVGFiSW5kZXg9ZnVuY3Rpb24oKXt0aGlzLl90YWJJbmRleD10aGlzLl91c2VyVGFiSW5kZXh8fCgwPT09dGhpcy5jaGlwcy5sZW5ndGg/LTE6MCl9LGUucHJvdG90eXBlLl91cGRhdGVLZXlNYW5hZ2VyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2hpcHMudG9BcnJheSgpLmluZGV4T2YodCk7dGhpcy5faXNWYWxpZEluZGV4KGUpJiYodC5faGFzRm9jdXMmJihlPHRoaXMuY2hpcHMubGVuZ3RoLTE/dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpOmUtMT49MCYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUtMSkpLHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4PT09ZSYmKHRoaXMuX2xhc3REZXN0cm95ZWRJbmRleD1lKSl9LGUucHJvdG90eXBlLl91cGRhdGVGb2N1c0ZvckRlc3Ryb3llZENoaXBzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jaGlwcy50b0FycmF5KCk7aWYobnVsbCE9dGhpcy5fbGFzdERlc3Ryb3llZEluZGV4JiZ0Lmxlbmd0aD4wJiYodGhpcy5mb2N1c2VkfHx0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJi0xPT09dC5pbmRleE9mKHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSkpKXt2YXIgZT1NYXRoLm1pbih0aGlzLl9sYXN0RGVzdHJveWVkSW5kZXgsdC5sZW5ndGgtMSk7dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpO3ZhciBuPXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbTtuJiZuLmZvY3VzKCl9dGhpcy5fbGFzdERlc3Ryb3llZEluZGV4PW51bGx9LGUucHJvdG90eXBlLl9pc1ZhbGlkSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5jaGlwcy5sZW5ndGh9LGUucHJvdG90eXBlLl9pc0lucHV0RW1wdHk9ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8ImlucHV0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKXx8dC52YWx1ZSl9LGUucHJvdG90eXBlLl9zZXRTZWxlY3Rpb25CeVZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT0hMCksdGhpcy5fY2xlYXJTZWxlY3Rpb24oKSx0aGlzLmNoaXBzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzZWxlY3QoKX0pLEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9zZWxlY3RWYWx1ZSh0LGUpfSksdGhpcy5fc29ydFZhbHVlcygpO2Vsc2V7dmFyIGk9dGhpcy5fc2VsZWN0VmFsdWUodCxlKTtpJiZlJiZ0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaSl9fSxlLnByb3RvdHlwZS5fc2VsZWN0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPSEwKTt2YXIgaT10aGlzLmNoaXBzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUudmFsdWUmJm4uX2NvbXBhcmVXaXRoKGUudmFsdWUsdCl9KTtyZXR1cm4gaSYmKGU/aS5zZWxlY3RWaWFJbnRlcmFjdGlvbigpOmkuc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpKSxpfSxlLnByb3RvdHlwZS5faW5pdGlhbGl6ZVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpeyh0Lm5nQ29udHJvbHx8dC5fdmFsdWUpJiYodC5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0Lm5nQ29udHJvbD90Lm5nQ29udHJvbC52YWx1ZTp0Ll92YWx1ZSwhMSksdC5zdGF0ZUNoYW5nZXMubmV4dCgpKX0pfSxlLnByb3RvdHlwZS5fY2xlYXJTZWxlY3Rpb249ZnVuY3Rpb24odCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goZnVuY3Rpb24oZSl7ZSE9PXQmJmUuZGVzZWxlY3QoKX0pLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZS5wcm90b3R5cGUuX3NvcnRWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX211bHRpcGxlJiYodGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZWxlY3RlZCYmdC5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpfSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZS5wcm90b3R5cGUuX3Byb3BhZ2F0ZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU7ZT1BcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOnQsdGhpcy5fdmFsdWU9ZSx0aGlzLmNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy52YWx1ZT1lfSh0aGlzLGUpKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZSksdGhpcy5fb25DaGFuZ2UoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9LGUucHJvdG90eXBlLl9ibHVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpLHRoaXMuZGlzYWJsZWR8fCh0aGlzLl9jaGlwSW5wdXQ/c2V0VGltZW91dChmdW5jdGlvbigpe3QuZm9jdXNlZHx8dC5fbWFya0FzVG91Y2hlZCgpfSk6dGhpcy5fbWFya0FzVG91Y2hlZCgpKX0sZS5wcm90b3R5cGUuX21hcmtBc1RvdWNoZWQ9ZnVuY3Rpb24oKXt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9LGUucHJvdG90eXBlLl9yZXNldENoaXBzPWZ1bmN0aW9uKCl7dGhpcy5fZHJvcFN1YnNjcmlwdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub0NoaXBzRm9jdXMoKSx0aGlzLl9saXN0ZW5Ub0NoaXBzU2VsZWN0aW9uKCksdGhpcy5fbGlzdGVuVG9DaGlwc1JlbW92ZWQoKX0sZS5wcm90b3R5cGUuX2Ryb3BTdWJzY3JpcHRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uJiYodGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uJiYodGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbj1udWxsKSx0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb249bnVsbCl9LGUucHJvdG90eXBlLl9saXN0ZW5Ub0NoaXBzU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFNlbGVjdGlvbkNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe2Uuc291cmNlLnNlbGVjdGVkP3QuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlLnNvdXJjZSk6dC5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZS5zb3VyY2UpLHQubXVsdGlwbGV8fHQuY2hpcHMuZm9yRWFjaChmdW5jdGlvbihlKXshdC5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSYmZS5zZWxlY3RlZCYmZS5kZXNlbGVjdCgpfSksZS5pc1VzZXJJbnB1dCYmdC5fcHJvcGFnYXRlQ2hhbmdlcygpfSl9LGUucHJvdG90eXBlLl9saXN0ZW5Ub0NoaXBzRm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbj10aGlzLmNoaXBGb2N1c0NoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpcHMudG9BcnJheSgpLmluZGV4T2YoZS5jaGlwKTt0Ll9pc1ZhbGlkSW5kZXgobikmJnQuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbUluZGV4KG4pLHQuc3RhdGVDaGFuZ2VzLm5leHQoKX0pLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEJsdXJDaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX2JsdXIoKSx0LnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX0sZS5wcm90b3R5cGUuX2xpc3RlblRvQ2hpcHNSZW1vdmVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFJlbW92ZUNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZUtleU1hbmFnZXIoZS5jaGlwKX0pfSxlfShPYmplY3Qocy5DKShmdW5jdGlvbih0LGUsbixpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9dCx0aGlzLl9wYXJlbnRGb3JtPWUsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPW4sdGhpcy5uZ0NvbnRyb2w9aX0pKSxnPWZ1bmN0aW9uKCl7fX0sIjAvUTYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB2fSk7dmFyIGk9bigibXJTRyIpLHI9bigiQ2NuRyIpLG89bigiV2Y0cCIpLGE9bigibExBUCIpLHM9bigibjZnRyIpLGw9bigiWWxiUSIpLHU9bigiWVNoMiIpLGM9KG4oImdJY1kiKSxuKCJwdWdUIikpLGY9T2JqZWN0KG8uQSkoZnVuY3Rpb24oKXt9KSxkPU9iamVjdChvLkEpKGZ1bmN0aW9uKCl7fSksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShmKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KGYpLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fZWxlbWVudD1lLGkuX25hdkxpc3Q9bixpLl9pc05hdkxpc3Q9ITEsaS5faXNOYXZMaXN0PSEhbixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe25ldyBvLm4odGhpcy5fbGluZXMsdGhpcy5fZWxlbWVudCl9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2lzTmF2TGlzdHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLl9uYXZMaXN0LmRpc2FibGVSaXBwbGV9LGUucHJvdG90eXBlLl9oYW5kbGVGb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9oYW5kbGVCbHVyPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1saXN0LWl0ZW0tZm9jdXMiKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sZX0oZCksYj1PYmplY3Qoby5BKShmdW5jdGlvbigpe30pLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9lbGVtZW50PWUsci5fY2hhbmdlRGV0ZWN0b3I9bixyLnNlbGVjdGlvbkxpc3Q9aSxyLl9zZWxlY3RlZD0hMSxyLl9kaXNhYmxlZD0hMSxyLl9oYXNGb2N1cz0hMSxyLmNoZWNrYm94UG9zaXRpb249ImFmdGVyIixyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuc2VsZWN0aW9uTGlzdCYmdGhpcy5zZWxlY3Rpb25MaXN0LmRpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHMuYykodCk7ZSE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLmlzU2VsZWN0ZWQodGhpcyl9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qocy5jKSh0KTtlIT09dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZXRTZWxlY3RlZChlKSx0aGlzLnNlbGVjdGlvbkxpc3QuX3JlcG9ydFZhbHVlQ2hhbmdlKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX3NlbGVjdGVkO1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXsodC5fc2VsZWN0ZWR8fGUpJiYodC5zZWxlY3RlZD0hMCx0Ll9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7bmV3IG8ubih0aGlzLl9saW5lcyx0aGlzLl9lbGVtZW50KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc2VsZWN0ZWQmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3RlZD0hMX0pLHRoaXMuc2VsZWN0aW9uTGlzdC5fcmVtb3ZlT3B0aW9uRnJvbUxpc3QodGhpcyl9LGUucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9IXRoaXMuc2VsZWN0ZWR9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RleHQ/dGhpcy5fdGV4dC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50OiIifSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuc2VsZWN0aW9uTGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlQ2xpY2s9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy50b2dnbGUoKSx0aGlzLnNlbGVjdGlvbkxpc3QuX2VtaXRDaGFuZ2VFdmVudCh0aGlzKSl9LGUucHJvdG90eXBlLl9oYW5kbGVGb2N1cz1mdW5jdGlvbigpe3RoaXMuX2hhc0ZvY3VzPSEwLHRoaXMuc2VsZWN0aW9uTGlzdC5fc2V0Rm9jdXNlZE9wdGlvbih0aGlzKX0sZS5wcm90b3R5cGUuX2hhbmRsZUJsdXI9ZnVuY3Rpb24oKXt0aGlzLl9oYXNGb2N1cz0hMSx0aGlzLnNlbGVjdGlvbkxpc3QuX29uVG91Y2hlZCgpfSxlLnByb3RvdHlwZS5fZ2V0SG9zdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fSxlLnByb3RvdHlwZS5fc2V0U2VsZWN0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT10aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NlbGVjdGVkPXQsdD90aGlzLnNlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdCh0aGlzKTp0aGlzLnNlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLmRlc2VsZWN0KHRoaXMpLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLCEwKX0sZS5wcm90b3R5cGUuX21hcmtGb3JDaGVjaz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSxlfShPYmplY3Qoby5BKShmdW5jdGlvbigpe30pKSx2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2VsZW1lbnQ9ZSxpLnNlbGVjdGlvbkNoYW5nZT1uZXcgci5uLGkudGFiSW5kZXg9MCxpLl9kaXNhYmxlZD0hMSxpLnNlbGVjdGVkT3B0aW9ucz1uZXcgbC5iKCEwKSxpLl9vbkNoYW5nZT1mdW5jdGlvbih0KXt9LGkuX21vZGVsQ2hhbmdlcz1jLmEuRU1QVFksaS5fb25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSxpLnRhYkluZGV4PXBhcnNlSW50KG4pfHwwLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChzLmMpKHQpLHRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuX21hcmtGb3JDaGVjaygpfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgYS5hKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkuc2tpcFByZWRpY2F0ZShmdW5jdGlvbigpe3JldHVybiExfSksdGhpcy5fdGVtcFZhbHVlcyYmKHRoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHRoaXMuX3RlbXBWYWx1ZXMpLHRoaXMuX3RlbXBWYWx1ZXM9bnVsbCksdGhpcy5fbW9kZWxDaGFuZ2VzPXRoaXMuc2VsZWN0ZWRPcHRpb25zLm9uQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXtpZih0LmFkZGVkKWZvcih2YXIgZT0wLG49dC5hZGRlZDtlPG4ubGVuZ3RoO2UrKyluW2VdLnNlbGVjdGVkPSEwO2lmKHQucmVtb3ZlZClmb3IodmFyIGk9MCxyPXQucmVtb3ZlZDtpPHIubGVuZ3RoO2krKylyW2ldLnNlbGVjdGVkPSExfSl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbW9kZWxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuX3NldEFsbE9wdGlvbnNTZWxlY3RlZCghMCl9LGUucHJvdG90eXBlLmRlc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKCExKX0sZS5wcm90b3R5cGUuX3NldEZvY3VzZWRPcHRpb249ZnVuY3Rpb24odCl7dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtSW5kZXgodGhpcy5fZ2V0T3B0aW9uSW5kZXgodCkpfSxlLnByb3RvdHlwZS5fcmVtb3ZlT3B0aW9uRnJvbUxpc3Q9ZnVuY3Rpb24odCl7aWYodC5faGFzRm9jdXMpe3ZhciBlPXRoaXMuX2dldE9wdGlvbkluZGV4KHQpO2U+MD90aGlzLl9rZXlNYW5hZ2VyLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOjA9PT1lJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPjEmJnRoaXMuX2tleU1hbmFnZXIuc2V0TmV4dEl0ZW1BY3RpdmUoKX19LGUucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZSxuPXRoaXMuX2tleU1hbmFnZXIsaT1uLmFjdGl2ZUl0ZW1JbmRleDtzd2l0Y2goZSl7Y2FzZSB1Lmw6Y2FzZSB1LmY6dGhpcy5fdG9nZ2xlRm9jdXNlZE9wdGlvbigpLHQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIHUuaDpjYXNlIHUuZTplPT09dS5oP24uc2V0Rmlyc3RJdGVtQWN0aXZlKCk6bi5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIHUuYTp0LmN0cmxLZXkmJih0aGlzLm9wdGlvbnMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4hdC5zZWxlY3RlZH0pP3RoaXMuc2VsZWN0QWxsKCk6dGhpcy5kZXNlbGVjdEFsbCgpLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpuLm9uS2V5ZG93bih0KX1lIT09dS5uJiZlIT09dS5kfHwhdC5zaGlmdEtleXx8bi5hY3RpdmVJdGVtSW5kZXg9PT1pfHx0aGlzLl90b2dnbGVGb2N1c2VkT3B0aW9uKCl9LGUucHJvdG90eXBlLl9yZXBvcnRWYWx1ZUNoYW5nZT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmdGhpcy5fb25DaGFuZ2UodGhpcy5fZ2V0U2VsZWN0ZWRPcHRpb25WYWx1ZXMoKSl9LGUucHJvdG90eXBlLl9lbWl0Q2hhbmdlRXZlbnQ9ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgZnVuY3Rpb24odCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9KHRoaXMsdCkpfSxlLnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz90aGlzLl9zZXRPcHRpb25zRnJvbVZhbHVlcyh0fHxbXSk6dGhpcy5fdGVtcFZhbHVlcz10fSxlLnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGlzYWJsZWQ9dH0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLl9vblRvdWNoZWQ9dH0sZS5wcm90b3R5cGUuX3NldE9wdGlvbnNGcm9tVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuX3NldFNlbGVjdGVkKCExKX0pLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLm9wdGlvbnMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gZS5jb21wYXJlV2l0aD9lLmNvbXBhcmVXaXRoKG4udmFsdWUsdCk6bi52YWx1ZT09PXR9KX0pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9zZXRTZWxlY3RlZCghMCl9KX0sZS5wcm90b3R5cGUuX2dldFNlbGVjdGVkT3B0aW9uVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KX0sZS5wcm90b3R5cGUuX3RvZ2dsZUZvY3VzZWRPcHRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtpZihudWxsIT10JiZ0aGlzLl9pc1ZhbGlkSW5kZXgodCkpe3ZhciBlPXRoaXMub3B0aW9ucy50b0FycmF5KClbdF07ZSYmIWUuZGlzYWJsZWQmJihlLnRvZ2dsZSgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudChlKSl9fSxlLnByb3RvdHlwZS5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uX3NldFNlbGVjdGVkKHQpJiYoZT0hMCl9KSxlJiZ0aGlzLl9yZXBvcnRWYWx1ZUNoYW5nZSgpfSxlLnByb3RvdHlwZS5faXNWYWxpZEluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wJiZ0PHRoaXMub3B0aW9ucy5sZW5ndGh9LGUucHJvdG90eXBlLl9nZXRPcHRpb25JbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHQpfSxlfShiKSxnPWZ1bmN0aW9uKCl7fX0sIjAvdVEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiNmJsRiIpLHI9bigiL1dZdiIpLG89bigiMmVQbCIpLGE9bigieFRsYSIpLHM9bigiRW44KyIpLGw9bigiSVVUYiIpLHU9bigicHVnVCIpLGM9bigiUzVYUSIpLGY9bigidTY3RCIpLGQ9bigiSmNSdiIpLGg9bigiRnhiMSIpO2Z1bmN0aW9uIHAodCxlKXtpZighZSlyZXR1cm4gdCBpbnN0YW5jZW9mIGkuYT90Om5ldyBpLmEoT2JqZWN0KGguYSkodCkpO2lmKG51bGwhPXQpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFthLmFdfSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkuYShlP2Z1bmN0aW9uKG4pe3ZhciBpPW5ldyB1LmE7cmV0dXJuIGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXt2YXIgcj10W2EuYV0oKTtpLmFkZChyLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXtpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKX0sZXJyb3I6ZnVuY3Rpb24odCl7aS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKHQpfSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe2kuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfX0pKX0pKSxpfTpPYmplY3QoZC5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KHIuYSkodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpLmEoZT9mdW5jdGlvbihuKXt2YXIgaT1uZXcgdS5hO3JldHVybiBpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7bi5uZXh0KHQpLGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfSkpfSxmdW5jdGlvbih0KXtpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9KX0pKSxpfTpPYmplY3QoYy5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KG8uYSkodCkpcmV0dXJuIE9iamVjdChsLmEpKHQsZSk7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W3MuYV19KHQpfHwic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgaS5hKGU/ZnVuY3Rpb24obil7dmFyIGkscj1uZXcgdS5hO3JldHVybiByLmFkZChmdW5jdGlvbigpe2kmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnJldHVybiYmaS5yZXR1cm4oKX0pLHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtpPXRbcy5hXSgpLHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtpZighbi5jbG9zZWQpe3ZhciB0LGU7dHJ5e3ZhciByPWkubmV4dCgpO3Q9ci52YWx1ZSxlPXIuZG9uZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuLmVycm9yKHQpfWU/bi5jb21wbGV0ZSgpOihuLm5leHQodCksdGhpcy5zY2hlZHVsZSgpKX19KSl9KSkscn06T2JqZWN0KGYuYSkodCkpfSh0LGUpfXRocm93IG5ldyBUeXBlRXJyb3IoKG51bGwhPT10JiZ0eXBlb2YgdHx8dCkrIiBpcyBub3Qgb2JzZXJ2YWJsZSIpfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBwfSl9LCIyMUxiIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIm1yU0ciKSxyPW4oIk96ZkIiKSxvPW4oIks5SWEiKSxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1lLGkud29yaz1uLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLG4+MD90LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsZSxuKToodGhpcy5kZWxheT1uLHRoaXMuc3RhdGU9ZSx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlLG4pe3JldHVybiBuPjB8fHRoaXMuY2xvc2VkP3QucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLGUsbik6dGhpcy5fZXhlY3V0ZShlLG4pfSxlLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZD1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPTApLG51bGwhPT1pJiZpPjB8fG51bGw9PT1pJiZ0aGlzLmRlbGF5PjA/dC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLGUsbixpKTplLmZsdXNoKHRoaXMpfSxlfShuKCJoOURxIikuYSkscz1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkuYihlLHQpLGV9KG4oIkNTOVEiKS5hKSkoYSksbD1uKCJwdWdUIiksdT1uKCJGRk9vIiksYz1uKCI2MGlVIiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2b2lkIDA9PT1pJiYoaT0wKTt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9bixyLmRlbGF5PWkscn1yZXR1cm4gaS5iKGUsdCksZS5kaXNwYXRjaD1mdW5jdGlvbih0KXt0Lm5vdGlmaWNhdGlvbi5vYnNlcnZlKHQuZGVzdGluYXRpb24pLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVNZXNzYWdlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGUuZGlzcGF0Y2gsdGhpcy5kZWxheSxuZXcgZCh0LHRoaXMuZGVzdGluYXRpb24pKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKGMuYS5jcmVhdGVOZXh0KHQpKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKGMuYS5jcmVhdGVFcnJvcih0KSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKGMuYS5jcmVhdGVDb21wbGV0ZSgpKX0sZX0odS5hKSxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3RpZmljYXRpb249dCx0aGlzLmRlc3RpbmF0aW9uPWV9LGg9bigiOGc4QSIpLHA9bigidU1hTyIpLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9aSxyLl9ldmVudHM9W10sci5faW5maW5pdGVUaW1lV2luZG93PSExLHIuX2J1ZmZlclNpemU9ZTwxPzE6ZSxyLl93aW5kb3dUaW1lPW48MT8xOm4sbj09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8oci5faW5maW5pdGVUaW1lV2luZG93PSEwLHIubmV4dD1yLm5leHRJbmZpbml0ZVRpbWVXaW5kb3cpOnIubmV4dD1yLm5leHRUaW1lV2luZG93LHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLm5leHRJbmZpbml0ZVRpbWVXaW5kb3c9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5fZXZlbnRzO24ucHVzaChlKSxuLmxlbmd0aD50aGlzLl9idWZmZXJTaXplJiZuLnNoaWZ0KCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLm5leHRUaW1lV2luZG93PWZ1bmN0aW9uKGUpe3RoaXMuX2V2ZW50cy5wdXNoKG5ldyBiKHRoaXMuX2dldE5vdygpLGUpKSx0aGlzLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cygpLHQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5faW5maW5pdGVUaW1lV2luZG93LGk9bj90aGlzLl9ldmVudHM6dGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSxyPXRoaXMuc2NoZWR1bGVyLG89aS5sZW5ndGg7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IGguYTtpZih0aGlzLmlzU3RvcHBlZHx8dGhpcy5oYXNFcnJvcj9lPWwuYS5FTVBUWToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxlPW5ldyBwLmEodGhpcyx0KSksciYmdC5hZGQodD1uZXcgZih0LHIpKSxuKWZvcih2YXIgYT0wO2E8byYmIXQuY2xvc2VkO2ErKyl0Lm5leHQoaVthXSk7ZWxzZSBmb3IoYT0wO2E8byYmIXQuY2xvc2VkO2ErKyl0Lm5leHQoaVthXS52YWx1ZSk7cmV0dXJuIHRoaXMuaGFzRXJyb3I/dC5lcnJvcih0aGlzLnRocm93bkVycm9yKTp0aGlzLmlzU3RvcHBlZCYmdC5jb21wbGV0ZSgpLGV9LGUucHJvdG90eXBlLl9nZXROb3c9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5zY2hlZHVsZXJ8fHMpLm5vdygpfSxlLnByb3RvdHlwZS5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ2V0Tm93KCksZT10aGlzLl9idWZmZXJTaXplLG49dGhpcy5fd2luZG93VGltZSxpPXRoaXMuX2V2ZW50cyxyPWkubGVuZ3RoLG89MDtvPHImJiEodC1pW29dLnRpbWU8bik7KW8rKztyZXR1cm4gcj5lJiYobz1NYXRoLm1heChvLHItZSkpLG8+MCYmaS5zcGxpY2UoMCxvKSxpfSxlfShvLmEpLGI9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbWU9dCx0aGlzLnZhbHVlPWV9O24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pO3ZhciB5PSJpbmxpbmUiLHY9WyJyb3ciLCJjb2x1bW4iLCJyb3ctcmV2ZXJzZSIsImNvbHVtbi1yZXZlcnNlIl07ZnVuY3Rpb24gZyh0KXt2YXIgZT0odD10P3QudG9Mb3dlckNhc2UoKToiIikuc3BsaXQoIiAiKSxuPWVbMF0saT1lWzFdLHI9ZVsyXTtyZXR1cm4gdi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09bn0pfHwobj12WzBdKSxpPT09eSYmKGk9ciE9PXk/cjoiIixyPXkpLFtuLGZ1bmN0aW9uKHQpe2lmKHQpc3dpdGNoKHQudG9Mb3dlckNhc2UoKSl7Y2FzZSJyZXZlcnNlIjpjYXNlIndyYXAtcmV2ZXJzZSI6Y2FzZSJyZXZlcnNlLXdyYXAiOnQ9IndyYXAtcmV2ZXJzZSI7YnJlYWs7Y2FzZSJubyI6Y2FzZSJub25lIjpjYXNlIm5vd3JhcCI6dD0ibm93cmFwIjticmVhaztkZWZhdWx0OnQ9IndyYXAifXJldHVybiB0fShpKSwhIXJdfWZ1bmN0aW9uIF8odCl7cmV0dXJuIGcodClbMF0uaW5kZXhPZigicm93Iik+LTF9dmFyIHc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiByLl9hbm5vdW5jZXI9bmV3IG0oMSksci5sYXlvdXQkPXIuX2Fubm91bmNlci5hc09ic2VydmFibGUoKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5sYXlvdXR8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImxheW91dCIsInJvdyIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlV2l0aERpcmVjdGlvbih0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7dD10fHx0aGlzLl9xdWVyeUlucHV0KCJsYXlvdXQiKXx8InJvdyIsdGhpcy5fbXFBY3RpdmF0aW9uJiYodD10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7cmV0dXJuIGZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09aSYmKGk9ITEpLHtkaXNwbGF5Omk/ImlubGluZS1mbGV4IjoiZmxleCIsImJveC1zaXppbmciOiJib3JkZXItYm94IiwiZmxleC1kaXJlY3Rpb24iOmVbMF0sImZsZXgtd3JhcCI6bnx8bnVsbH19KDAsZVsxXSxlWzJdKX0odHx8IiIpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQoZSksdGhpcy5fYW5ub3VuY2VyLm5leHQoe2RpcmVjdGlvbjplWyJmbGV4LWRpcmVjdGlvbiJdLHdyYXA6ISFlWyJmbGV4LXdyYXAiXSYmIm5vd3JhcCIhPT1lWyJmbGV4LXdyYXAiXX0pfSxlfShyLmIpLHg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyLG8sYSl7dmFyIHM9dC5jYWxsKHRoaXMsZSxuLGEpfHx0aGlzO3JldHVybiBzLl96b25lPXIscy5fZGlyZWN0aW9uYWxpdHk9byxzLl9sYXlvdXQ9InJvdyIsaSYmKHMuX2xheW91dFdhdGNoZXI9aS5sYXlvdXQkLnN1YnNjcmliZShzLl9vbkxheW91dENoYW5nZS5iaW5kKHMpKSkscy5fZGlyZWN0aW9uV2F0Y2hlcj1zLl9kaXJlY3Rpb25hbGl0eS5jaGFuZ2Uuc3Vic2NyaWJlKHMuX3VwZGF0ZVdpdGhWYWx1ZS5iaW5kKHMpKSxzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5nYXB8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3dhdGNoQ29udGVudENoYW5nZXMoKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygiZ2FwIiwiMCIsZnVuY3Rpb24oZSl7dC5fdXBkYXRlV2l0aFZhbHVlKGUudmFsdWUpfSksdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9sYXlvdXRXYXRjaGVyJiZ0aGlzLl9sYXlvdXRXYXRjaGVyLnVuc3Vic2NyaWJlKCksdGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9kaXJlY3Rpb25XYXRjaGVyJiZ0aGlzLl9kaXJlY3Rpb25XYXRjaGVyLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl93YXRjaENvbnRlbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyJiYodC5fb2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7ZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZGVkTm9kZXMmJnQuYWRkZWROb2Rlcy5sZW5ndGg+MHx8dC5yZW1vdmVkTm9kZXMmJnQucmVtb3ZlZE5vZGVzLmxlbmd0aD4wfSkmJnQuX3VwZGF0ZVdpdGhWYWx1ZSgpfSksdC5fb2JzZXJ2ZXIub2JzZXJ2ZSh0Lm5hdGl2ZUVsZW1lbnQse2NoaWxkTGlzdDohMH0pKX0pfSxlLnByb3RvdHlwZS5fb25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9sYXlvdXQ9KHQuZGlyZWN0aW9ufHwiIikudG9Mb3dlckNhc2UoKSx2LmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLl9sYXlvdXR9KXx8KHRoaXMuX2xheW91dD0icm93IiksdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLl91cGRhdGVXaXRoVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImdhcCIpfHwiMCI7dGhpcy5fbXFBY3RpdmF0aW9uJiYobj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBpPXRoaXMuY2hpbGRyZW5Ob2Rlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lm5vZGVUeXBlJiYibm9uZSIhPWUuX2dldERpc3BsYXlTdHlsZSh0KX0pLnNvcnQoZnVuY3Rpb24odCxuKXt2YXIgaT0rZS5fc3R5bGVyLmxvb2t1cFN0eWxlKHQsIm9yZGVyIikscj0rZS5fc3R5bGVyLmxvb2t1cFN0eWxlKG4sIm9yZGVyIik7cmV0dXJuIGlzTmFOKGkpfHxpc05hTihyKXx8aT09PXI/MDppPnI/MTotMX0pO2lmKGkubGVuZ3RoPjApaWYobi5lbmRzV2l0aChDKSluPW4uc3Vic3RyaW5nKDAsbi5pbmRleE9mKEMpKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZEdyaWRQYWRkaW5nKG4pLGkpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQodGhpcy5fYnVpbGRHcmlkTWFyZ2luKG4pKTtlbHNle3ZhciByPWkucG9wKCk7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRDU1MobiksaSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRDU1MoKSxbcl0pfX0sZS5wcm90b3R5cGUuX2J1aWxkR3JpZFBhZGRpbmc9ZnVuY3Rpb24odCl7dmFyIGU9IjBweCIsbj0iMHB4IjtyZXR1cm4icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlP249dDplPXQse3BhZGRpbmc6IjBweCAiK2UrIiAiK3QrIiAiK259fSxlLnByb3RvdHlwZS5fYnVpbGRHcmlkTWFyZ2luPWZ1bmN0aW9uKHQpe3ZhciBlPSIwcHgiLG49IjBweCI7cmV0dXJuInJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT9uPSItIit0OmU9Ii0iK3Qse21hcmdpbjoiMHB4ICIrZSsiIC0iK3QrIiAiK259fSxlLnByb3RvdHlwZS5fYnVpbGRDU1M9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9bnVsbCk7dmFyIGUsbj17Im1hcmdpbi1sZWZ0IjpudWxsLCJtYXJnaW4tcmlnaHQiOm51bGwsIm1hcmdpbi10b3AiOm51bGwsIm1hcmdpbi1ib3R0b20iOm51bGx9O3N3aXRjaCh0aGlzLl9sYXlvdXQpe2Nhc2UiY29sdW1uIjplPSJtYXJnaW4tYm90dG9tIjticmVhaztjYXNlImNvbHVtbi1yZXZlcnNlIjplPSJtYXJnaW4tdG9wIjticmVhaztjYXNlInJvdyI6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tbGVmdCI6Im1hcmdpbi1yaWdodCI7YnJlYWs7Y2FzZSJyb3ctcmV2ZXJzZSI6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tcmlnaHQiOiJtYXJnaW4tbGVmdCI7YnJlYWs7ZGVmYXVsdDplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1sZWZ0IjoibWFyZ2luLXJpZ2h0In1yZXR1cm4gbltlXT10LG59LGV9KHIuYiksQz0iIGdyaWQiO2Z1bmN0aW9uIFModCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO2Zvcih2YXIgaT0wLHI9ZTtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihudWxsIT1vKWZvcih2YXIgYSBpbiBvKW8uaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPW9bYV0pfXJldHVybiB0fXZhciBPPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGEuX2NvbnRhaW5lcj1pLGEuc3R5bGVVdGlscz1yLGEubGF5b3V0Q29uZmlnPW8sYS5fY2FjaGVJbnB1dCgiZmxleCIsIiIpLGEuX2NhY2hlSW5wdXQoInNocmluayIsMSksYS5fY2FjaGVJbnB1dCgiZ3JvdyIsMSksaSYmKGEuX2xheW91dFdhdGNoZXI9aS5sYXlvdXQkLnN1YnNjcmliZShmdW5jdGlvbih0KXthLl9vbkxheW91dENoYW5nZSh0KX0pKSxhfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hyaW5rIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoInNocmluayIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJncm93Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdyb3ciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZmxleHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImZsZXgiLCIiLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVN0eWxlKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheW91dD10fHx0aGlzLl9sYXlvdXR8fHtkaXJlY3Rpb246InJvdyIsd3JhcDohMX0sdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImZsZXgiKXx8IiI7dGhpcy5fbXFBY3RpdmF0aW9uJiYoZT10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBuPVN0cmluZyhlKS5yZXBsYWNlKCI7IiwiIiksaT1PYmplY3Qoci5vKShuLHRoaXMuX3F1ZXJ5SW5wdXQoImdyb3ciKSx0aGlzLl9xdWVyeUlucHV0KCJzaHJpbmsiKSk7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl92YWxpZGF0ZVZhbHVlLmFwcGx5KHRoaXMsaSkpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGVWYWx1ZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fZ2V0RmxleEZsb3dEaXJlY3Rpb24odGhpcy5wYXJlbnRFbGVtZW50LHRoaXMubGF5b3V0Q29uZmlnLmFkZEZsZXhUb1BhcmVudCkuaW5kZXhPZigiY29sdW1uIik+LTE/ImNvbHVtbiI6InJvdyIscj1fKGkpPyJtYXgtd2lkdGgiOiJtYXgtaGVpZ2h0IixvPV8oaSk/Im1pbi13aWR0aCI6Im1pbi1oZWlnaHQiLGE9U3RyaW5nKG4pLmluZGV4T2YoImNhbGMiKT4tMSxzPWF8fCJhdXRvIj09bixsPVN0cmluZyhuKS5pbmRleE9mKCIlIik+LTEmJiFhLHU9U3RyaW5nKG4pLmluZGV4T2YoInB4Iik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJlbSIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigidnciKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoInZoIik+LTEsYz1TdHJpbmcobikuaW5kZXhPZigicHgiKT4tMXx8cyxmPWF8fHU7dD0iMCI9PXQ/MDp0LGU9IjAiPT1lPzA6ZTt2YXIgZD0hdCYmIWUsaD17fSxwPXsibWF4LXdpZHRoIjpudWxsLCJtYXgtaGVpZ2h0IjpudWxsLCJtaW4td2lkdGgiOm51bGwsIm1pbi1oZWlnaHQiOm51bGx9O3N3aXRjaChufHwiIil7Y2FzZSIiOm49InJvdyI9PT1pPyIwJSI6dGhpcy5sYXlvdXRDb25maWcudXNlQ29sdW1uQmFzaXNaZXJvPyIwLjAwMDAwMDAwMXB4IjoiYXV0byI7YnJlYWs7Y2FzZSJpbml0aWFsIjpjYXNlIm5vZ3JvdyI6dD0wLG49ImF1dG8iO2JyZWFrO2Nhc2UiZ3JvdyI6bj0iMTAwJSI7YnJlYWs7Y2FzZSJub3NocmluayI6ZT0wLG49ImF1dG8iO2JyZWFrO2Nhc2UiYXV0byI6YnJlYWs7Y2FzZSJub25lIjp0PTAsZT0wLG49ImF1dG8iO2JyZWFrO2RlZmF1bHQ6Znx8bHx8aXNOYU4obil8fChuKz0iJSIpLCIwJSI9PT1uJiYoZj0hMCksIjBweCI9PT1uJiYobj0iMCUiKSxoPVMocCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6Zj9uOiIxMDAlIn06e2ZsZXg6dCsiICIrZSsiICIrKGY/bjoiMTAwJSIpfSl9cmV0dXJuIGguZmxleHx8aFsiZmxleC1ncm93Il18fChoPVMocCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6bn06e2ZsZXg6dCsiICIrZSsiICIrbn0pKSwiMCUiIT09biYmIjBweCIhPT1uJiYiMC4wMDAwMDAwMDFweCIhPT1uJiYiYXV0byIhPT1uJiYoaFtvXT1kfHxjJiZ0P246bnVsbCxoW3JdPWR8fCFzJiZlP246bnVsbCksaFtvXXx8aFtyXT90aGlzLl9sYXlvdXQmJnRoaXMuX2xheW91dC53cmFwJiYoaFthPyJmbGV4LWJhc2lzIjoiZmxleCJdPWhbcl0/YT9oW3JdOnQrIiAiK2UrIiAiK2hbcl06YT9oW29dOnQrIiAiK2UrIiAiK2hbb10pOmg9UyhwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpufTp7ZmxleDp0KyIgIitlKyIgIitufSksUyhoLHsiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGV9KHIuYiksRT17bWFyZ2luOjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsIm1pbi13aWR0aCI6IjEwMCUiLCJtaW4taGVpZ2h0IjoiMTAwJSJ9LGs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiByLmVsUmVmPW4sci5fYXBwbHlTdHlsZVRvRWxlbWVudChFKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIuYiksaj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5fbGF5b3V0PSJyb3ciLGkmJihvLl9sYXlvdXRXYXRjaGVyPWkubGF5b3V0JC5zdWJzY3JpYmUoby5fb25MYXlvdXRDaGFuZ2UuYmluZChvKSkpLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbiIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbiIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25TbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnblNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25NZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkxnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25YbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnblhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuYWxpZ258fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygiYWxpZ24iLCJzdGFydCBzdHJldGNoIixmdW5jdGlvbih0KXtlLl91cGRhdGVXaXRoVmFsdWUodC52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt0PXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImFsaWduIil8fCJzdGFydCBzdHJldGNoIix0aGlzLl9tcUFjdGl2YXRpb24mJih0PXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl9idWlsZENTUyh0KSksdGhpcy5fYWxsb3dTdHJldGNoaW5nKHQsdGhpcy5fbGF5b3V0P3RoaXMuX2xheW91dDoicm93Iil9LGUucHJvdG90eXBlLl9vbkxheW91dENoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2xheW91dD0odC5kaXJlY3Rpb258fCIiKS50b0xvd2VyQ2FzZSgpLHYuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKTt2YXIgbj10aGlzLl9xdWVyeUlucHV0KCJhbGlnbiIpfHwic3RhcnQgc3RyZXRjaCI7dGhpcy5fbXFBY3RpdmF0aW9uJiYobj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpLHRoaXMuX2FsbG93U3RyZXRjaGluZyhuLHRoaXMuX2xheW91dHx8InJvdyIpfSxlLnByb3RvdHlwZS5fYnVpbGRDU1M9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj10LnNwbGl0KCIgIiksaT1uWzFdO3N3aXRjaChuWzBdKXtjYXNlImNlbnRlciI6ZVsianVzdGlmeS1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJzcGFjZS1hcm91bmQiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1hcm91bmQiO2JyZWFrO2Nhc2Uic3BhY2UtYmV0d2VlbiI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWJldHdlZW4iO2JyZWFrO2Nhc2Uic3BhY2UtZXZlbmx5IjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtZXZlbmx5IjticmVhaztjYXNlImVuZCI6Y2FzZSJmbGV4LWVuZCI6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtZW5kIjticmVhaztjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmRlZmF1bHQ6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtc3RhcnQifXN3aXRjaChpKXtjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LXN0YXJ0IjticmVhaztjYXNlImJhc2VsaW5lIjplWyJhbGlnbi1pdGVtcyJdPSJiYXNlbGluZSI7YnJlYWs7Y2FzZSJjZW50ZXIiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJjZW50ZXIiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6ZGVmYXVsdDplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0ic3RyZXRjaCJ9cmV0dXJuIFMoZSx7ZGlzcGxheToiZmxleCIsImZsZXgtZGlyZWN0aW9uIjp0aGlzLl9sYXlvdXR8fCJyb3ciLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KX0sZS5wcm90b3R5cGUuX2FsbG93U3RyZXRjaGluZz1mdW5jdGlvbih0LGUpeyJzdHJldGNoIj09dC5zcGxpdCgiICIpWzFdJiZ0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHsiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJtYXgtd2lkdGgiOl8oZSk/bnVsbDoiMTAwJSIsIm1heC1oZWlnaHQiOl8oZSk/IjEwMCUiOm51bGx9KX0sZX0oci5iKSxJPWZ1bmN0aW9uKCl7fX0sIjI2RlUiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJtclNHIikscj1uKCJLOUlhIiksbz1uKCI4ZzhBIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdmFsdWU9ZSxufXJldHVybiBpLmIoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLGUpO3JldHVybiBuJiYhbi5jbG9zZWQmJmUubmV4dCh0aGlzLl92YWx1ZSksbn0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0Vycm9yKXRocm93IHRoaXMudGhyb3duRXJyb3I7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IG8uYTtyZXR1cm4gdGhpcy5fdmFsdWV9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsdGhpcy5fdmFsdWU9ZSl9LGV9KHIuYSl9LCIyQmRqIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sIjJlUGwiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR9fSwiM3BKUSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4oIm1yU0ciKSxuKCJPemZCIiksbigibjZnRyIpO3ZhciBpPWZ1bmN0aW9uKCl7fX0sNDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oInpVbmIiKX0sIjRjMzUiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTt2YXIgaT1uKCJtclNHIikscj1uKCJDY25HIik7ZnVuY3Rpb24gbygpe3Rocm93IEVycm9yKCJIb3N0IGFscmVhZHkgaGFzIGEgcG9ydGFsIGF0dGFjaGVkIil9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQmJmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGEgcG9ydGFsIHRvIGEgbnVsbCBQb3J0YWxPdXRsZXQiKX0oKSx0Lmhhc0F0dGFjaGVkKCkmJm8oKSx0aGlzLl9hdHRhY2hlZEhvc3Q9dCx0LmF0dGFjaCh0aGlzKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYXR0YWNoZWRIb3N0O251bGw9PXQ/ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBkZXRhY2ggYSBwb3J0YWwgdGhhdCBpcyBub3QgYXR0YWNoZWQgdG8gYSBob3N0Iil9KCk6KHRoaXMuX2F0dGFjaGVkSG9zdD1udWxsLHQuZGV0YWNoKCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzQXR0YWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fYXR0YWNoZWRIb3N0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldEF0dGFjaGVkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hdHRhY2hlZEhvc3Q9dH0sdH0oKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5jb21wb25lbnQ9ZSxyLnZpZXdDb250YWluZXJSZWY9bixyLmluamVjdG9yPWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShhKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci50ZW1wbGF0ZVJlZj1lLHIudmlld0NvbnRhaW5lclJlZj1uLHIuY29udGV4dD1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvcmlnaW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wbGF0ZVJlZi5lbGVtZW50UmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj10aGlzLmNvbnRleHQpLHRoaXMuY29udGV4dD1uLHQucHJvdG90eXBlLmF0dGFjaC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQ9dm9pZCAwLHQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpfSxlfShhKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzRGlzcG9zZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmhhc0F0dGFjaGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hdHRhY2hlZFBvcnRhbH0sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiB0fHxmdW5jdGlvbigpe3Rocm93IEVycm9yKCJNdXN0IHByb3ZpZGUgYSBwb3J0YWwgdG8gYXR0YWNoIil9KCksdGhpcy5oYXNBdHRhY2hlZCgpJiZvKCksdGhpcy5faXNEaXNwb3NlZCYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiVGhpcyBQb3J0YWxPdXRsZXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCIpfSgpLHQgaW5zdGFuY2VvZiBzPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgbD8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpKTp2b2lkIGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGFuIHVua25vd24gUG9ydGFsIHR5cGUuIEJhc2VQb3J0YWxPdXRsZXQgYWNjZXB0cyBlaXRoZXIgYSBDb21wb25lbnRQb3J0YWwgb3IgYSBUZW1wbGF0ZVBvcnRhbC4iKX0oKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWRQb3J0YWwmJih0aGlzLl9hdHRhY2hlZFBvcnRhbC5zZXRBdHRhY2hlZEhvc3QobnVsbCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuZGV0YWNoKCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCksdGhpcy5faXNEaXNwb3NlZD0hMH0sdC5wcm90b3R5cGUuc2V0RGlzcG9zZUZuPWZ1bmN0aW9uKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fSx0LnByb3RvdHlwZS5faW52b2tlRGlzcG9zZUZuPWZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZUZuJiYodGhpcy5fZGlzcG9zZUZuKCksdGhpcy5fZGlzcG9zZUZuPW51bGwpfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8ub3V0bGV0RWxlbWVudD1lLG8uX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uLG8uX2FwcFJlZj1pLG8uX2RlZmF1bHRJbmplY3Rvcj1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuYXR0YWNoQ29tcG9uZW50UG9ydGFsPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPXRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCk7cmV0dXJuIHQudmlld0NvbnRhaW5lclJlZj8oZT10LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGksdC52aWV3Q29udGFpbmVyUmVmLmxlbmd0aCx0LmluamVjdG9yfHx0LnZpZXdDb250YWluZXJSZWYucGFyZW50SW5qZWN0b3IpLHRoaXMuc2V0RGlzcG9zZUZuKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSkpOihlPWkuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3RvciksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoZS5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXtuLl9hcHBSZWYuZGV0YWNoVmlldyhlLmhvc3RWaWV3KSxlLmRlc3Ryb3koKX0pKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZ2V0Q29tcG9uZW50Um9vdE5vZGUoZSkpLGV9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnZpZXdDb250YWluZXJSZWYsaT1uLmNyZWF0ZUVtYmVkZGVkVmlldyh0LnRlbXBsYXRlUmVmLHQuY29udGV4dCk7cmV0dXJuIGkuZGV0ZWN0Q2hhbmdlcygpLGkucm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0KX0pLHRoaXMuc2V0RGlzcG9zZUZuKGZ1bmN0aW9uKCl7dmFyIHQ9bi5pbmRleE9mKGkpOy0xIT09dCYmbi5yZW1vdmUodCl9KSxpfSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLG51bGwhPXRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLm91dGxldEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm91dGxldEVsZW1lbnQpfSxlLnByb3RvdHlwZS5fZ2V0Q29tcG9uZW50Um9vdE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9zdFZpZXcucm9vdE5vZGVzWzBdfSxlfSh1KSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLGkuX3ZpZXdDb250YWluZXJSZWY9bixpLl9pc0luaXRpYWxpemVkPSExLGkuYXR0YWNoZWQ9bmV3IHIubixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicG9ydGFsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUG9ydGFsfSxzZXQ6ZnVuY3Rpb24oZSl7KCF0aGlzLmhhc0F0dGFjaGVkKCl8fGV8fHRoaXMuX2lzSW5pdGlhbGl6ZWQpJiYodGhpcy5oYXNBdHRhY2hlZCgpJiZ0LnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKSxlJiZ0LnByb3RvdHlwZS5hdHRhY2guY2FsbCh0aGlzLGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYXR0YWNoZWRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsLHRoaXMuX2F0dGFjaGVkUmVmPW51bGx9LGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbihlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTt2YXIgbj1udWxsIT1lLnZpZXdDb250YWluZXJSZWY/ZS52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsaT10aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jb21wb25lbnQpLHI9bi5jcmVhdGVDb21wb25lbnQoaSxuLmxlbmd0aCxlLmluamVjdG9yfHxuLnBhcmVudEluamVjdG9yKTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0RGlzcG9zZUZuLmNhbGwodGhpcyxmdW5jdGlvbigpe3JldHVybiByLmRlc3Ryb3koKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cix0aGlzLmF0dGFjaGVkLmVtaXQocikscn0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTt2YXIgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlLnRlbXBsYXRlUmVmLGUuY29udGV4dCk7cmV0dXJuIHQucHJvdG90eXBlLnNldERpc3Bvc2VGbi5jYWxsKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gbi5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfSxlfSh1KSxkPWZ1bmN0aW9uKCl7fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3BhcmVudEluamVjdG9yPXQsdGhpcy5fY3VzdG9tVG9rZW5zPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2N1c3RvbVRva2Vucy5nZXQodCk7cmV0dXJuIHZvaWQgMCE9PW4/bjp0aGlzLl9wYXJlbnRJbmplY3Rvci5nZXQodCxlKX0sdH0oKX0sIjYwaVUiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJHNUoxIikscj1uKCJGL1hMIiksbz1uKCJYbFB3IiksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPW4sdGhpcy5oYXNWYWx1ZT0iTiI9PT10fXJldHVybiB0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQubmV4dCYmdC5uZXh0KHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIHQuZXJyb3ImJnQuZXJyb3IodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gdC5jb21wbGV0ZSYmdC5jb21wbGV0ZSgpfX0sdC5wcm90b3R5cGUuZG89ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQmJnQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gZSYmZSh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBuJiZuKCl9fSx0LnByb3RvdHlwZS5hY2NlcHQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0P3RoaXMub2JzZXJ2ZSh0KTp0aGlzLmRvKHQsZSxuKX0sdC5wcm90b3R5cGUudG9PYnNlcnZhYmxlPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gT2JqZWN0KHIuYSkodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gT2JqZWN0KG8uYSkodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gT2JqZWN0KGkuYikoKX10aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgdmFsdWUiKX0sdC5jcmVhdGVOZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lP25ldyB0KCJOIixlKTp0LnVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9ufSx0LmNyZWF0ZUVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdCgiRSIsdm9pZCAwLGUpfSx0LmNyZWF0ZUNvbXBsZXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcGxldGVOb3RpZmljYXRpb259LHQuY29tcGxldGVOb3RpZmljYXRpb249bmV3IHQoIkMiKSx0LnVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9uPW5ldyB0KCJOIix2b2lkIDApLHR9KCl9LCI2N1kvIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uIEFyZSB5b3UgbG9va2luZyBmb3IgYG1hcFRvKClgPyIpO3JldHVybiBuLmxpZnQobmV3IGEodCxlKSl9fXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucHJvamVjdD10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzKHQsdGhpcy5wcm9qZWN0LHRoaXMudGhpc0FyZykpfSx0fSgpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucHJvamVjdD1uLHIuY291bnQ9MCxyLnRoaXNBcmc9aXx8cixyfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByb2plY3QuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShyLmEpfSwiNmFodyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oImlMeFEiKSxyPW4oIkRLVGIiKSxvPXtjbG9zZWQ6ITAsbmV4dDpmdW5jdGlvbih0KXt9LGVycm9yOmZ1bmN0aW9uKHQpe2lmKGkuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7T2JqZWN0KHIuYSkodCl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7fX19LCI2YmxGIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIkZGT28iKSxyPW4oIkwvVjkiKSxvPW4oIjZhaHciKSxhPW4oInhUbGEiKSxzPW4oInkzQnkiKSxsPW4oImlMeFEiKTtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pc1NjYWxhcj0hMSx0JiYodGhpcy5fc3Vic2NyaWJlPXQpfXJldHVybiB0LnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLnNvdXJjZT10aGlzLG4ub3BlcmF0b3I9ZSxufSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXRoaXMub3BlcmF0b3Iscz1mdW5jdGlvbih0LGUsbil7aWYodCl7aWYodCBpbnN0YW5jZW9mIGkuYSlyZXR1cm4gdDtpZih0W3IuYV0pcmV0dXJuIHRbci5hXSgpfXJldHVybiB0fHxlfHxuP25ldyBpLmEodCxlLG4pOm5ldyBpLmEoby5hKX0odCxlLG4pO2lmKGE/YS5jYWxsKHMsdGhpcy5zb3VyY2UpOnMuYWRkKHRoaXMuc291cmNlfHxsLmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmIXMuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX3N1YnNjcmliZShzKTp0aGlzLl90cnlTdWJzY3JpYmUocykpLGwuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZzLnN5bmNFcnJvclRocm93YWJsZSYmKHMuc3luY0Vycm9yVGhyb3dhYmxlPSExLHMuc3luY0Vycm9yVGhyb3duKSl0aHJvdyBzLnN5bmNFcnJvclZhbHVlO3JldHVybiBzfSx0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHQpfWNhdGNoKGUpe2wuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYodC5zeW5jRXJyb3JUaHJvd249ITAsdC5zeW5jRXJyb3JWYWx1ZT1lKSx0LmVycm9yKGUpfX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyhlPWMoZSkpKGZ1bmN0aW9uKGUsaSl7dmFyIHI7cj1uLnN1YnNjcmliZShmdW5jdGlvbihlKXt0cnl7dChlKX1jYXRjaCh0KXtpKHQpLHImJnIudW5zdWJzY3JpYmUoKX19LGksZSl9KX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNvdXJjZTtyZXR1cm4gZSYmZS5zdWJzY3JpYmUodCl9LHQucHJvdG90eXBlW2EuYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMD09PXQubGVuZ3RoP3RoaXM6T2JqZWN0KHMuYikodCkodGhpcyl9LHQucHJvdG90eXBlLnRvUHJvbWlzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcodD1jKHQpKShmdW5jdGlvbih0LG4pe3ZhciBpO2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBpPXR9LGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSxmdW5jdGlvbigpe3JldHVybiB0KGkpfSl9KX0sdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUpfSx0fSgpO2Z1bmN0aW9uIGModCl7aWYodHx8KHQ9bC5hLlByb21pc2V8fFByb21pc2UpLCF0KXRocm93IG5ldyBFcnJvcigibm8gUHJvbWlzZSBpbXBsIGZvdW5kIik7cmV0dXJuIHR9fSwiOFpYeiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPWZ1bmN0aW9uKCl7fX0sIjhkU2EiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiQ2NuRyIpLHI9bigiUEhHTyIpLG89KG4oIjlBc2oiKSxuKCJCZ1dLIikpLGE9bigiL2RPNiIpLHM9bigiZFdaZyIpLGw9bigiV2Y0cCIpLHU9bigiYnVqdCIpLGM9bigiVW9kSCIpLGY9bigibExBUCIpLGQ9bigid0Z3MSIpLGg9bigiTXIrWCIpLHA9bigiU01zbSIpLG09bigidFJUVyIpLGI9bigic2VQMyIpLHk9bigiRnpxYyIpLHY9bigiZ0ljWSIpLGc9bigiSXAwUiIpO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gT30pO3ZhciBfPWkuUGEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siIl1dLGRhdGE6e319KTtmdW5jdGlvbiB3KHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsMiwic3VwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSgxLDAsbnVsbCxudWxsLDEsImEiLFtbInN0eWxlIiwiY29sb3I6IGJsdWU7Y3Vyc29yOiBwb2ludGVyOyJdXSxudWxsLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PXQuY29tcG9uZW50Lm9wZW5SZWZCb3R0b21TaGVldCgpJiZpKSxpfSxudWxsLG51bGwpKSwodCgpKCksaS5qYigyLG51bGwsWyJbIiwiXSJdKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMiwwLGUuY29tcG9uZW50LnJlZi5pbmRleCl9KX12YXIgeD1pLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBDKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsNSwibWF0LWNoaXAiLFtbImNsYXNzIiwibWF0LWNoaXAiXSxbInJvbGUiLCJvcHRpb24iXV0sW1sxLCJ0YWJpbmRleCIsMF0sWzIsIm1hdC1jaGlwLXNlbGVjdGVkIixudWxsXSxbMiwibWF0LWNoaXAtd2l0aC1hdmF0YXIiLG51bGxdLFsyLCJtYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24iLG51bGxdLFsyLCJtYXQtY2hpcC1kaXNhYmxlZCIsbnVsbF0sWzEsImRpc2FibGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzEsImFyaWEtc2VsZWN0ZWQiLDBdXSxbW251bGwsImNsaWNrIl0sW251bGwsImtleWRvd24iXSxbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09aS5iYih0LDEpLl9oYW5kbGVDbGljayhuKSYmciksImtleWRvd24iPT09ZSYmKHI9ITEhPT1pLmJiKHQsMSkuX2hhbmRsZUtleWRvd24obikmJnIpLCJmb2N1cyI9PT1lJiYocj0hMSE9PWkuYmIodCwxKS5mb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuYmIodCwxKS5fYmx1cigpJiZyKSxyfSxudWxsLG51bGwpKSxpLlFhKDEsMTQ3NDU2LFtbMSw0XV0sMyxhLmIsW2kuayxpLnoscy5hLFsyLGwua11dLG51bGwsbnVsbCksaS5oYigzMzU1NDQzMjAsMix7YXZhdGFyOjB9KSxpLmhiKDMzNTU0NDMyMCwzLHt0cmFpbGluZ0ljb246MH0pLGkuaGIoMzM1NTQ0MzIwLDQse3JlbW92ZUljb246MH0pLCh0KCkoKSxpLmpiKDUsbnVsbCxbIiIsIiJdKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGkuYmIoZSwxKS5kaXNhYmxlZD9udWxsOi0xLGkuYmIoZSwxKS5zZWxlY3RlZCxpLmJiKGUsMSkuYXZhdGFyLGkuYmIoZSwxKS50cmFpbGluZ0ljb258fGkuYmIoZSwxKS5yZW1vdmVJY29uLGkuYmIoZSwxKS5kaXNhYmxlZCxpLmJiKGUsMSkuZGlzYWJsZWR8fG51bGwsaS5iYihlLDEpLmRpc2FibGVkLnRvU3RyaW5nKCksaS5iYihlLDEpLmFyaWFTZWxlY3RlZCksdChlLDUsMCxlLmNvbnRleHQuJGltcGxpY2l0KX0pfWZ1bmN0aW9uIFModCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCw4LCJwIixbWyJjbGFzcyIsIm1hdC1zdWJoZWFkaW5nLTIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuamIoMSxudWxsLFsiIiwiICJdKSksKHQoKSgpLGkuUmEoMiwwLG51bGwsbnVsbCw2LCJzcGFuIixbWyJzdHlsZSIsInBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogNXB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5qYigzLG51bGwsWyIgUmVmLiAjICIsIiAiXSkpLCh0KCkoKSxpLlJhKDQsMCxudWxsLG51bGwsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuImNsaWNrIj09PWUmJihpPSExIT09dC5jb21wb25lbnQuYm90dG9tU2hlZXRSZWYuZGlzbWlzcygpJiZpKSxpfSx1LmQsdS5iKSksaS5RYSg1LDE4MDIyNCxudWxsLDAsYy5iLFtpLmsscy5hLGYuYixbMixkLmFdXSxudWxsLG51bGwpLCh0KCkoKSxpLlJhKDYsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImFyaWEtbGFiZWwiLCJDbG9zZSByZWZlcmVuY2Ugc2hlZXQiXSxbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaC5iLGguYSkpLGkuUWEoNyw2Mzg5NzYsbnVsbCwwLHAuYSxbaS5rLHAuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5qYigtMSwwLFsiY2xvc2UiXSkpLCh0KCkoKSxpLlJhKDksMCxudWxsLG51bGwsMSwicCIsW1siY2xhc3MiLCJtYXQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuamIoMTAsbnVsbCxbIiAiLCIiXSkpLCh0KCkoKSxpLlJhKDExLDAsbnVsbCxudWxsLDEsInAiLFtbImNsYXNzIiwibWF0LXN1YmhlYWRpbmctMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5qYigxMixudWxsLFsiIiwiIl0pKSwodCgpKCksaS5SYSgxMywwLG51bGwsbnVsbCwxLCJwIixbWyJjbGFzcyIsIm1hdC1jYXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmpiKDE0LG51bGwsWyIiLCIiXSkpLCh0KCkoKSxpLlJhKDE1LDAsbnVsbCxudWxsLDEsInAiLFtbImNsYXNzIiwibWF0LWNhcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuamIoMTYsbnVsbCxbIiIsIiBcdTIwMTQgZG9pOiIsIiJdKSksKHQoKSgpLGkuUmEoMTcsMCxudWxsLG51bGwsNiwibWF0LWNoaXAtbGlzdCIsW1siY2xhc3MiLCJtYXQtY2hpcC1saXN0Il1dLFtbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWRlc2NyaWJlZGJ5IiwwXSxbMSwiYXJpYS1yZXF1aXJlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsxLCJhcmlhLWludmFsaWQiLDBdLFsxLCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsMF0sWzEsInJvbGUiLDBdLFsyLCJtYXQtY2hpcC1saXN0LWRpc2FibGVkIixudWxsXSxbMiwibWF0LWNoaXAtbGlzdC1pbnZhbGlkIixudWxsXSxbMiwibWF0LWNoaXAtbGlzdC1yZXF1aXJlZCIsbnVsbF0sWzEsImFyaWEtb3JpZW50YXRpb24iLDBdLFs4LCJpZCIsMF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1pLmJiKHQsMTkpLmZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5iYih0LDE5KS5fYmx1cigpJiZyKSwia2V5ZG93biI9PT1lJiYocj0hMSE9PWkuYmIodCwxOSkuX2tleWRvd24obikmJnIpLHJ9LG0uYixtLmEpKSxpLmdiKDYxNDQsbnVsbCxiLmMsbnVsbCxbYS5jXSksaS5RYSgxOSwxNTU2NDgwLG51bGwsMSxhLmMsW2kuayxpLmgsWzIseS5iXSxbMix2LmNdLFsyLHYuYV0sbC5kLFs4LG51bGxdXSxudWxsLG51bGwpLGkuaGIoNjAzOTc5Nzc2LDEse2NoaXBzOjF9KSwodCgpKCksaS5qYigtMSwwLFsiIFRhZ3M6ICJdKSksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCwwLDEsbnVsbCxDKSksaS5RYSgyMywyNzg1MjgsbnVsbCwwLGcuayxbaS5RLGkuTixpLnNdLHtuZ0Zvck9mOlswLCJuZ0Zvck9mIl19LG51bGwpLCh0KCkoKSxpLlJhKDI0LDAsbnVsbCxudWxsLDEzLCJwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSgyNSwwLG51bGwsbnVsbCw1LCJhIixbWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdXSxbWzgsImhyZWYiLDRdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImRpc2FibGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09aS5iYih0LDI2KS5faGFsdERpc2FibGVkRXZlbnRzKG4pJiZyKSxyfSx1LmMsdS5hKSksaS5RYSgyNiwxODAyMjQsbnVsbCwwLGMuYSxbcy5hLGYuYixpLmssWzIsZC5hXV0sbnVsbCxudWxsKSwodCgpKCksaS5SYSgyNywwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxoLmIsaC5hKSksaS5RYSgyOCw2Mzg5NzYsbnVsbCwwLHAuYSxbaS5rLHAuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5qYigtMSwwLFsib3Blbl9pbl9uZXciXSkpLCh0KCkoKSxpLmpiKC0xLDAsWyIgT3BlbiBhcnRpY2xlIHBhZ2UiXSkpLCh0KCkoKSxpLlJhKDMxLDAsbnVsbCxudWxsLDYsInNwYW4iLFtbInN0eWxlIiwicG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxNXB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5SYSgzMiwwLG51bGwsbnVsbCw1LCJhIixbWyJocmVmIiwiIy9yZWZlcmVuY2VzIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdXSxbWzEsInRhYmluZGV4IiwwXSxbMSwiZGlzYWJsZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT1pLmJiKHQsMzMpLl9oYWx0RGlzYWJsZWRFdmVudHMobikmJnIpLHJ9LHUuYyx1LmEpKSxpLlFhKDMzLDE4MDIyNCxudWxsLDAsYy5hLFtzLmEsZi5iLGkuayxbMixkLmFdXSxudWxsLG51bGwpLCh0KCkoKSxpLlJhKDM0LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGguYixoLmEpKSxpLlFhKDM1LDYzODk3NixudWxsLDAscC5hLFtpLmsscC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmpiKC0xLDAsWyJib29rIl0pKSwodCgpKCksaS5qYigtMSwwLFsiIEdvIHRvIHJlZmVyZW5jZXMgbGlzdCJdKSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDcsMCksdChlLDE5LDApLHQoZSwyMywwLG4ucmVmLnRhZ3MpLHQoZSwyOCwwKSx0KGUsMzUsMCl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxuLnJlZi5qb3VybmFsKSx0KGUsMywwLG4ucmVmLmluZGV4KSx0KGUsNCwwLGkuYmIoZSw1KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09aS5iYihlLDUpLl9hbmltYXRpb25Nb2RlKSx0KGUsNiwwLGkuYmIoZSw3KS5pbmxpbmUpLHQoZSwxMCwwLG4ucmVmLnRpdGxlKSx0KGUsMTIsMCxuLnJlZi5hdXRob3JzKSx0KGUsMTQsMCxuLnJlZi5hYnN0cmFjdCksdChlLDE2LDAsbi5yZWYucHViRGV0YWlscyxuLnJlZi5kb2kpLHQoZSwxNywxLFtpLmJiKGUsMTkpLl90YWJJbmRleCxpLmJiKGUsMTkpLl9hcmlhRGVzY3JpYmVkYnl8fG51bGwsaS5iYihlLDE5KS5yZXF1aXJlZC50b1N0cmluZygpLGkuYmIoZSwxOSkuZGlzYWJsZWQudG9TdHJpbmcoKSxpLmJiKGUsMTkpLmVycm9yU3RhdGUsaS5iYihlLDE5KS5tdWx0aXBsZSxpLmJiKGUsMTkpLnJvbGUsaS5iYihlLDE5KS5kaXNhYmxlZCxpLmJiKGUsMTkpLmVycm9yU3RhdGUsaS5iYihlLDE5KS5yZXF1aXJlZCxpLmJiKGUsMTkpLmFyaWFPcmllbnRhdGlvbixpLmJiKGUsMTkpLl91aWRdKSx0KGUsMjUsMCxpLlRhKDEsIiIsbi5yZWYudXJsLCIiKSxpLmJiKGUsMjYpLmRpc2FibGVkPy0xOmkuYmIoZSwyNikudGFiSW5kZXh8fDAsaS5iYihlLDI2KS5kaXNhYmxlZHx8bnVsbCxpLmJiKGUsMjYpLmRpc2FibGVkLnRvU3RyaW5nKCksIk5vb3BBbmltYXRpb25zIj09PWkuYmIoZSwyNikuX2FuaW1hdGlvbk1vZGUpLHQoZSwyNywwLGkuYmIoZSwyOCkuaW5saW5lKSx0KGUsMzIsMCxpLmJiKGUsMzMpLmRpc2FibGVkPy0xOmkuYmIoZSwzMykudGFiSW5kZXh8fDAsaS5iYihlLDMzKS5kaXNhYmxlZHx8bnVsbCxpLmJiKGUsMzMpLmRpc2FibGVkLnRvU3RyaW5nKCksIk5vb3BBbmltYXRpb25zIj09PWkuYmIoZSwzMykuX2FuaW1hdGlvbk1vZGUpLHQoZSwzNCwwLGkuYmIoZSwzNSkuaW5saW5lKX0pfXZhciBPPWkuTmEoInJlZmVyZW5jZS1zaGVldCIsci5iLGZ1bmN0aW9uKHQpe3JldHVybiBpLmxiKDAsWyh0KCkoKSxpLlJhKDAsMCxudWxsLG51bGwsMSwicmVmZXJlbmNlLXNoZWV0IixbXSxudWxsLG51bGwsbnVsbCxTLHgpKSxpLlFhKDEsNDkxNTIsbnVsbCwwLHIuYixbby5lXSxudWxsLG51bGwpXSxudWxsLG51bGwpfSx7fSx7fSxbXSl9LCI4ZzhBIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJvYmplY3QgdW5zdWJzY3JpYmVkIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiBpLmIoZSx0KSxlfShFcnJvcil9LCI4bU1yIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJtclNHIikscj1uKCJDY25HIiksbz1uKCJXZjRwIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fcGxhdGZvcm09bixyLl9kb2N1bWVudD1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztPYmplY3Qoci5aKSgpJiZ0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCksdGhpcy5fdG9vbGJhclJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpfSkpfSxlLnByb3RvdHlwZS5fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdG9vbGJhclJvd3MubGVuZ3RoJiZbXS5zbGljZS5jYWxsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNsYXNzTGlzdCYmdC5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC10b29sYmFyLXJvdyIpKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZSE9PSh0Ll9kb2N1bWVudD90Ll9kb2N1bWVudC5DT01NRU5UX05PREU6OCl9KS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50LnRyaW0oKX0pJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJNYXRUb29sYmFyOiBBdHRlbXB0aW5nIHRvIGNvbWJpbmUgZGlmZmVyZW50IHRvb2xiYXIgbW9kZXMuIEVpdGhlciBzcGVjaWZ5IG11bHRpcGxlIGA8bWF0LXRvb2xiYXItcm93PmAgZWxlbWVudHMgZXhwbGljaXRseSBvciBqdXN0IHBsYWNlIGNvbnRlbnQgaW5zaWRlIG9mIGEgYDxtYXQtdG9vbGJhcj5gIGZvciBhIHNpbmdsZSByb3cuIil9KCl9LGV9KE9iamVjdChvLnopKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSxzPWZ1bmN0aW9uKCl7fX0sIjlBc2oiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpPW4oIjZibEYiKSxyPW4oIjAvdVEiKSxvPW4oIkNjbkciKSxhPTAscz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbixpLHIsbyxzLGwsdSl7dGhpcy5zaG9ydGhhbmQ9dCx0aGlzLmF1dGhvcnM9ZSx0aGlzLnRpdGxlPW4sdGhpcy5kb2k9aSx0aGlzLmpvdXJuYWw9cix0aGlzLnVybD1vLHRoaXMucHViRGV0YWlscz1zLHRoaXMudGFncz1sLHRoaXMuYWJzdHJhY3Q9dSx0aGlzLmluZGV4PWEsYSsrfX0oKSxsPW5ldyBzKCJFcnJvcjIwMTgiLCJFLiBScm9yIiwiVGhpcyByZWZlcmVuY2UgOiBub3QgZm91bmQiLCI0MDQiLCJKb3VybmFsIG9mIEVycm9yIE5vdCBGb3VuZCIsImh0dHA6Ly9lcnJvci40MDQiLCJQdWJsaWNhdGlvbiBub3QgZm91bmQiLFsicHVibGljYXRpb25Ob3RGb3VuZCJdLCJFcnJvciBhYnN0cmFjdC4uLiIpLHU9W25ldyBzKCJUZXN0MjAxOCIsIkFub255bW91cyIsIlRlc3RpbmcgOiBhIHJlZmVyZW5jZSBtYW5hZ2VyIiwiMjkzOSIsIkouIEV1ci4gQmVoYXZpb3JhbCBFeGFtcGxlIiwiaHR0cDovL2pvdXJuYWwuZXhhbXBsZS5jb20iLCJWb2wgMi4zIHAzIixbImV4YW1wbGUiLCJhcnRpY2xlIl0sIlRoZSBpbmR1Y2liaWxpdHkgb2YgU09TIHJlc3BvbnNlcyBieSA1LWZsdW9yb3VyYWNpbCAoNS1GVSksIHdoaWNoIGhhcyBiZWVuIHVzZWQgYXMgYW4gYW50aXR1bW9yIGRydWcsIHdhcyBzdHVkaWVkIGluIEVzY2hlcmljaGlhIGNvbGkgY2VsbHMgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgRE5BIHJlcGFpciBjYXBhY2l0aWVzIGZvciBVViBsZXNpb25zLiBFeHByZXNzaW9uIG9mIHRoZSB1bXVDIGdlbmUgd2FzIGFwcGFyZW50bHkgaW5kdWNlZCBieSA1LUZVIGluIHRoZSB3aWxkLXR5cGUgYW5kIHV2ckEgc3RyYWlucyBidXQgbm90IGluIGxleEEgYW5kIHJlY0Egc3RyYWlucy4gVGhlIGluZHVjaWJpbGl0eSBvZiB0aGUgdW11QyBnZW5lIGJ5IDUtRlUsIHRoZSBtZXRhYm9saXRlIG9mIHdoaWNoIGluaGliaXRzIHRoeW1pZHlsYXRlIHN5bnRoZXRhc2UsIHdhcyBhYm9saXNoZWQgaW4gY3VsdHVyZXMgY29udGFpbmluZyBkZW94eXRoeW1pZGluZSBtb25vcGhvc3BoYXRlIHdoaWNoIGlzIGNvbnZlcnRlZCBmcm9tIGRlb3h5dXJpZGluZSBtb25vcGhvc3BoYXRlIGJ5IHRoeW1pZHlsYXRlIHN5bnRoZXRhc2UuIFRoZXNlIHJlc3VsdHMgc3VnZ2VzdCB0aGF0IDUtRlUgbWF5IGV4ZXJ0IGl0cyBTT1MgaW5kdWNpYmlsaXR5IGJ5IGluaGliaXRpbmcgdGh5bWlkeWxhdGUgc3ludGhldGFzZSBhbmQgdGhlbiBkaXN0dXJiaW5nIEROQSBtZXRhYm9saXNtIGJ1dCBub3QgYnkgaW5jb3Jwb3JhdGluZyA1LUZVIHJlc2lkdWVzIGludG8gUk5BLiBGdXJ0aGVyLCA1LUZVIHdlYWtseSBpbmR1Y2VkIG11dGF0aW9ucyBpbiBFLiBjb2xpLiBceGE5IDE5ODcuIiksbmV3IHMoIkV4YW1wbGUyMDE4IiwiQWxmcmVkIEV4YW1wbGUiLCJFeGFtcGxlIG9mIHBhcGVyIDogdGhpcyBvbmUgaXMgYSBnb29kIGV4YW1wbGUgb2YgcGFwZXIiLCI0NTIiLCJKLiBFdXIuIENoZW1pY2FsIEV4YW1wbGUiLCJodHRwOi8vam91cm5hbC5leGFtcGxlLmV1IiwiVm9sIDQ1IHAxMiIsWyJleGFtcGxlSm91cm5hbCIsImFydGljbGUiXSwiRHVyaW5nIHByb3RlaW4gc3ludGhlc2lzLCByaWJvc29tZXMgZW5jb3VudGVyIG1hbnkgcm9hZGJsb2NrcywgdGhlIG91dGNvbWVzIG9mIHdoaWNoIGFyZSBsYXJnZWx5IGRldGVybWluZWQgYnkgc3Vic3RyYXRlIGF2YWlsYWJpbGl0eSAsIGFtaW5vIGFjaWQgZmVhdHVyZXMgYW5kIHJlYWN0aW9uIGtpbmV0aWNzLiBQcm9sb25nZWQgcmlib3NvbWUgc3RhbGxpbmcgaXMgbGlrZWx5IHRvIGJlIHJlc29sdmVkIGJ5IHJpYm9zb21lIHJlc2N1ZSBvciBxdWFsaXR5IGNvbnRyb2wgcGF0aHdheXMsIHdoZXJlYXMgc2hvcnRlciBzdGFsbGluZyBpcyBsaWtlbHkgdG8gYmUgcmVzb2x2ZWQgYnkgb25nb2luZyBwcm9kdWN0aXZlIHRyYW5zbGF0aW9uLiBIb3cgcmlib3NvbWUgZnVuY3Rpb24gaXMgYWZmZWN0ZWQgYnkgc3VjaCBoaW5kcmFuY2VzIGNhbiB0aGVyZWZvcmUgaGF2ZSBhIHByb2ZvdW5kIGltcGFjdCBvbiB0aGUgdHJhbnNsYXRpb25hbCBvdXRwdXQgKHlpZWxkKSBvZiBhIHBhcnRpY3VsYXIgbVJOQS4gSW4gdGhpcyBSZXZpZXcgLCB3ZSBmb2N1cyBvbiB0aGVzZSByb2FkYmxvY2tzIGFuZCB0aGUgcmVzdW1wdGlvbiBvZiBub3JtYWwgdHJhbnNsYXRpb24gZWxvbmdhdGlvbiByYXRoZXIgdGhhbiBvbiBhbHRlcm5hdGl2ZSBmYXRlcyB3aGVyZWluIHRoZSBzdGFsbGVkIHJpYm9zb21lIHRyaWdnZXJzIGRlZ3JhZGF0aW9uIG9mIHRoZSBtUk5BIGFuZCB0aGUgaW5jb21wbGV0ZSBwcm90ZWluIHByb2R1Y3QuIFdlIGRpc2N1c3MgdGhlIGZ1bmRhbWVudGFsIHN0YWdlcyBvZiB0aGUgdHJhbnNsYXRpb24gcHJvY2VzcyBpbiBldWthcnlvdGVzLCBmcm9tIGVsb25nYXRpb24gdGhyb3VnaCByaWJvc29tZSByZWN5Y2xpbmcsIHdpdGggcGFydGljdWxhciBhdHRlbnRpb24gdG8gcmVjZW50IGRpc2NvdmVyaWVzIG9mIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBnZW5ldGljIGNvZGUgYW5kIHJlZ3VsYXRvcnkgZWxlbWVudHMgdGhhdCBjb250cm9sIGdlbmUgZXhwcmVzc2lvbiwgaW5jbHVkaW5nIHJpYm9zb21lIHN0YWxsaW5nIGR1cmluZyBlbG9uZ2F0aW9uLCB0aGUgcm9sZSBvZiBtUk5BIGNvbnRleHQgaW4gdHJhbnNsYXRpb24gdGVybWluYXRpb24gYW5kIG1lY2hhbmlzbXMgb2Ygcmlib3NvbWUgcmVzY3VlIHRoYXQgcmVzZW1ibGUgcmVjeWNsaW5nLiIpXSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciBlPXRoaXM7aWYodGhpcy5lcnJyZWY9bCx0LnNpbmdsZXRvbkluc3RhbmNlKXJldHVybiB0LnNpbmdsZXRvbkluc3RhbmNlO3Quc2luZ2xldG9uSW5zdGFuY2U9dGhpcyx0aGlzLnJlZmxpc3Q9bmV3IGkuYShmdW5jdGlvbih0KXtlLmludGVybmFsX3JlZmxpc3Q/dC5uZXh0KGUuaW50ZXJuYWxfcmVmbGlzdCk6c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBuPUpTT04uc3RyaW5naWZ5KHUpLGk9SlNPTi5wYXJzZShuKTtlLmludGVybmFsX3JlZmxpc3Q9aSx0Lm5leHQoZS5pbnRlcm5hbF9yZWZsaXN0KX0sMCl9KX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0UmVmRnJvbVNob3J0aGFuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49bmV3IFByb21pc2UoZnVuY3Rpb24obixpKXtlLnJlZmxpc3Quc3Vic2NyaWJlKGZ1bmN0aW9uKGkpe3ZhciByPWkuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLnNob3J0aGFuZD09dH0pO3ZvaWQgMD09ciYmbihlLmVycnJlZiksbihpW3JdKX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSl9KTtyZXR1cm4gT2JqZWN0KHIuYSkobil9LHQubmdJbmplY3RhYmxlRGVmPW8uVSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCl9LCI5WjFGIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIGk9bigibXJTRyIpLHI9bigiTUdCUyIpLG89bigiem90bSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBzKHQpLGk9ZS5saWZ0KG4pO3JldHVybiBuLmNhdWdodD1pfX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsKHQsdGhpcy5zZWxlY3Rvcix0aGlzLmNhdWdodCkpfSx0fSgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuc2VsZWN0b3I9bixyLmNhdWdodD1pLHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIG49dm9pZCAwO3RyeXtuPXRoaXMuc2VsZWN0b3IoZSx0aGlzLmNhdWdodCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLGUpfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpLHRoaXMuYWRkKE9iamVjdChvLmEpKHRoaXMsbikpfX0sZX0oci5hKX0sQXhpRjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpLG89bigiYjdtVyIpLGE9bigiRzVKMSIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoYS5iKSgpOmUubGlmdChuZXcgbCh0KSl9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBvLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLnRvdGFsKSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkudG90YWw9bixpLnJpbmc9bmV3IEFycmF5LGkuY291bnQ9MCxpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJpbmcsbj10aGlzLnRvdGFsLGk9dGhpcy5jb3VudCsrO2UubGVuZ3RoPG4/ZS5wdXNoKHQpOmVbaSVuXT10fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uLGU9dGhpcy5jb3VudDtpZihlPjApZm9yKHZhciBuPXRoaXMuY291bnQ+PXRoaXMudG90YWw/dGhpcy50b3RhbDp0aGlzLmNvdW50LGk9dGhpcy5yaW5nLHI9MDtyPG47cisrKXt2YXIgbz1lKyslbjt0Lm5leHQoaVtvXSl9dC5jb21wbGV0ZSgpfSxlfShyLmEpfSxBeUpxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgaT1uKCJDY25HIikscj0obigiamxabSIpLG4oIklwMFIiKSksbz0obigiWWhiTyIpLG4oIjRjMzUiKSksYT0obigiWWxiUSIpLG4oImxMQVAiKSxpLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1leHBhbnNpb24tcGFuZWx7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDt0cmFuc2l0aW9uOm1hcmdpbiAyMjVtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1leHBhbnNpb24tcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQubWF0LWV4cGFuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1leHBhbnNpb24tcGFuZWwtYm9keXtwYWRkaW5nOjAgMjRweCAxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luOjE2cHggMH0ubWF0LWFjY29yZGlvbj4ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nOmZpcnN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpmaXJzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLXRvcDowfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6bGFzdC1jaGlsZCwubWF0LWFjY29yZGlvbj46bGFzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLWJvdHRvbTowfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MTZweCA4cHggMTZweCAyNHB4fS5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImJvZHlFeHBhbnNpb24iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjBweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSkpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuSWEoMCxudWxsLG51bGwsMCkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGkubGIoMixbaS5hYihudWxsLDApLCh0KCkoKSxpLlJhKDEsMCxbWyJib2R5IiwxXV0sbnVsbCw1LCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50Il0sWyJyb2xlIiwicmVnaW9uIl1dLFtbMjQsIkBib2R5RXhwYW5zaW9uIiwwXSxbMSwiYXJpYS1sYWJlbGxlZGJ5IiwwXSxbOCwiaWQiLDBdXSxbW251bGwsIkBib2R5RXhwYW5zaW9uLmRvbmUiXSxbbnVsbCwiQGJvZHlFeHBhbnNpb24uc3RhcnQiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwLHI9dC5jb21wb25lbnQ7cmV0dXJuIkBib2R5RXhwYW5zaW9uLmRvbmUiPT09ZSYmKGk9ITEhPT1yLl9ib2R5QW5pbWF0aW9uKG4pJiZpKSwiQGJvZHlFeHBhbnNpb24uc3RhcnQiPT09ZSYmKGk9ITEhPT1yLl9ib2R5QW5pbWF0aW9uKG4pJiZpKSxpfSxudWxsLG51bGwpKSwodCgpKCksaS5SYSgyLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5hYihudWxsLDEpLCh0KCkoKSxpLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwscykpLGkuUWEoNSwyMTI5OTIsbnVsbCwwLG8uYixbaS5qLGkuUV0se3BvcnRhbDpbMCwicG9ydGFsIl19LG51bGwpLGkuYWIobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUuY29tcG9uZW50Ll9wb3J0YWwpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsbi5fZ2V0RXhwYW5kZWRTdGF0ZSgpLG4uX2hlYWRlcklkLG4uaWQpfSl9dmFyIHU9aS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjRweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6Zm9jdXMsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye291dGxpbmU6MH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQ6aG92ZXJ7YmFja2dyb3VuZDppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2N1cnNvcjpwb2ludGVyfS5tYXQtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOnJvdztvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixbZGlyPXJ0bF0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZ3JvdzoyfS5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweCAycHggMDtjb250ZW50OicnO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6M3B4O3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiaW5kaWNhdG9yUm90YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMTgwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fSx7dHlwZTo3LG5hbWU6ImV4cGFuc2lvbkhlaWdodCIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoie3tjb2xsYXBzZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2NvbGxhcHNlZEhlaWdodDoiNDhweCJ9fX0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7ZXhwYW5kZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2V4cGFuZGVkSGVpZ2h0OiI2NHB4In19fSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTozLHN0ZXBzOlt7dHlwZToxMSxzZWxlY3RvcjoiQGluZGljYXRvclJvdGF0ZSIsYW5pbWF0aW9uOnt0eXBlOjksb3B0aW9uczpudWxsfSxvcHRpb25zOntvcHRpb25hbDohMH19LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn1dLG9wdGlvbnM6bnVsbH0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIGModCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwwLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24taW5kaWNhdG9yIl1dLFtbMjQsIkBpbmRpY2F0b3JSb3RhdGUiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9nZXRFeHBhbmRlZFN0YXRlKCkpfSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaS5sYigyLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDMsInNwYW4iLFtbImNsYXNzIiwibWF0LWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5hYihudWxsLDApLGkuYWIobnVsbCwxKSxpLmFiKG51bGwsMiksKHQoKSgpLGkuSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxjKSksaS5RYSg1LDE2Mzg0LG51bGwsMCxyLmwsW2kuUSxpLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3Nob3dUb2dnbGUoKSl9LG51bGwpfX0sQXl0UjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9e3Byb2R1Y3Rpb246ITB9fSxCSG5kOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KTt2YXIgaT1uKCJtclNHIikscj1uKCJ5NHFTIiksbz1uKCJZbGJRIiksYT1uKCJuNmdHIikscz1uKCIyNkZVIiksbD1uKCJwdWdUIiksdT1uKCJwMGliIiksYz1uKCJGL1hMIiksZj1uKCJkemdUIiksZD1uKCI2N1kvIiksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyl7dmFyIGE9dC5jYWxsKHRoaXMsZSxuLGkscixvKXx8dGhpcztyZXR1cm4gYS5fZGlmZmVycz1lLGEuX2NoYW5nZURldGVjdG9yUmVmPW4sYS5fZWxlbWVudFJlZj1pLGEuX2Rpcj1vLGEuc3RpY2t5Q3NzQ2xhc3M9Im1hdC10YWJsZS1zdGlja3kiLGF9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5vKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIuYiksbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLmopLGI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5kKSx5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBuLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWNvbHVtbi0iK2UuY3NzQ2xhc3NGcmllbmRseU5hbWUpLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5pKSx2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBuLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWNvbHVtbi0iK2UuY3NzQ2xhc3NGcmllbmRseU5hbWUpLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5hKSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIubCksXz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLm4pLHc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5rKSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHIuZyksQz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShyLm0pLFM9ZnVuY3Rpb24oKXt9LE89OTAwNzE5OTI1NDc0MDk5MSxFPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcmVuZGVyRGF0YT1uZXcgcy5hKFtdKSxuLl9maWx0ZXI9bmV3IHMuYSgiIiksbi5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1sLmEuRU1QVFksbi5zb3J0aW5nRGF0YUFjY2Vzc29yPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFtlXTtpZihPYmplY3QoYS5hKShuKSl7dmFyIGk9TnVtYmVyKG4pO3JldHVybiBpPE8/aTpufXJldHVybiBufSxuLnNvcnREYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5hY3RpdmUscj1lLmRpcmVjdGlvbjtyZXR1cm4gaSYmIiIhPXI/dC5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIG89bi5zb3J0aW5nRGF0YUFjY2Vzc29yKHQsaSksYT1uLnNvcnRpbmdEYXRhQWNjZXNzb3IoZSxpKSxzPTA7cmV0dXJuIG51bGwhPW8mJm51bGwhPWE/bz5hP3M9MTpvPGEmJihzPS0xKTpudWxsIT1vP3M9MTpudWxsIT1hJiYocz0tMSkscyooImFzYyI9PXI/MTotMSl9KTp0fSxuLmZpbHRlclByZWRpY2F0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlK3Rbbl19LCIiKS50b0xvd2VyQ2FzZSgpLGk9ZS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9bi5pbmRleE9mKGkpfSxuLl9kYXRhPW5ldyBzLmEoZSksbi5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksbn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YS52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2RhdGEubmV4dCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpbHRlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWx0ZXIudmFsdWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maWx0ZXIubmV4dCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNvcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3NvcnQ9dCx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhZ2luYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdpbmF0b3J9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9wYWdpbmF0b3I9dCx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX3NvcnQ/T2JqZWN0KHUuYSkodGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOk9iamVjdChjLmEpKG51bGwpLG49dGhpcy5fcGFnaW5hdG9yP09iamVjdCh1LmEpKHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX3BhZ2luYXRvci5pbml0aWFsaXplZCk6T2JqZWN0KGMuYSkobnVsbCksaT10aGlzLl9kYXRhLHI9T2JqZWN0KGYuYSkoaSx0aGlzLl9maWx0ZXIpLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2ZpbHRlckRhdGEoZVswXSl9KSksbz1PYmplY3QoZi5hKShyLGUpLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX29yZGVyRGF0YShlWzBdKX0pKSxhPU9iamVjdChmLmEpKG8sbikucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5fcGFnZURhdGEoZVswXSl9KSk7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249YS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3JlbmRlckRhdGEubmV4dChlKX0pfSxlLnByb3RvdHlwZS5fZmlsdGVyRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT10aGlzLmZpbHRlcj90LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5maWx0ZXJQcmVkaWNhdGUodCxlLmZpbHRlcil9KTp0LHRoaXMucGFnaW5hdG9yJiZ0aGlzLl91cGRhdGVQYWdpbmF0b3IodGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoKSx0aGlzLmZpbHRlcmVkRGF0YX0sZS5wcm90b3R5cGUuX29yZGVyRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3J0P3RoaXMuc29ydERhdGEodC5zbGljZSgpLHRoaXMuc29ydCk6dH0sZS5wcm90b3R5cGUuX3BhZ2VEYXRhPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnBhZ2luYXRvcilyZXR1cm4gdDt2YXIgZT10aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgqdGhpcy5wYWdpbmF0b3IucGFnZVNpemU7cmV0dXJuIHQuc2xpY2UoKS5zcGxpY2UoZSx0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSl9LGUucHJvdG90eXBlLl91cGRhdGVQYWdpbmF0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7aWYoZS5wYWdpbmF0b3ImJihlLnBhZ2luYXRvci5sZW5ndGg9dCxlLnBhZ2luYXRvci5wYWdlSW5kZXg+MCkpe3ZhciBuPU1hdGguY2VpbChlLnBhZ2luYXRvci5sZW5ndGgvZS5wYWdpbmF0b3IucGFnZVNpemUpLTF8fDA7ZS5wYWdpbmF0b3IucGFnZUluZGV4PU1hdGgubWluKGUucGFnaW5hdG9yLnBhZ2VJbmRleCxuKX19KX0sZS5wcm90b3R5cGUuY29ubmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJEYXRhfSxlLnByb3RvdHlwZS5kaXNjb25uZWN0PWZ1bmN0aW9uKCl7fSxlfShvLmEpfSxCZ1dLOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gd30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJpaFlZIiksbigiV2Y0cCIpLG4oIm1yU0ciKSksbz1uKCI0YzM1IiksYT1uKCJ2R1hZIikscz1uKCJJcDBSIiksbD1uKCJlRGtQIiksdT1uKCJZU2gyIiksYz1uKCJLOUlhIiksZj1uKCJwdWdUIiksZD1uKCJwMGliIiksaD1uKCJGL1hMIikscD1uKCJWbkQvIiksbT1uKCJ0OWZaIiksYj1uKCJGenFjIikseT1uZXcgaS5xKCJNYXRCb3R0b21TaGVldERhdGEiKSx2PWZ1bmN0aW9uKCl7dGhpcy5kYXRhPW51bGwsdGhpcy5oYXNCYWNrZHJvcD0hMCx0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITB9LGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixvLHMsbCl7dmFyIHU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB1Ll9lbGVtZW50UmVmPWUsdS5fY2hhbmdlRGV0ZWN0b3JSZWY9bix1Ll9mb2N1c1RyYXBGYWN0b3J5PXIsdS5ib3R0b21TaGVldENvbmZpZz1sLHUuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix1Ll9hbmltYXRpb25TdGF0ZUNoYW5nZWQ9bmV3IGkubix1Ll9lbGVtZW50Rm9jdXNlZEJlZm9yZU9wZW5lZD1udWxsLHUuX2RvY3VtZW50PXMsdS5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbj1vLm9ic2VydmUoW2EuYi5NZWRpdW0sYS5iLkxhcmdlLGEuYi5YTGFyZ2VdKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt1Ll90b2dnbGVDbGFzcygibWF0LWJvdHRvbS1zaGVldC1jb250YWluZXItbWVkaXVtIixvLmlzTWF0Y2hlZChhLmIuTWVkaXVtKSksdS5fdG9nZ2xlQ2xhc3MoIm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLWxhcmdlIixvLmlzTWF0Y2hlZChhLmIuTGFyZ2UpKSx1Ll90b2dnbGVDbGFzcygibWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIteGxhcmdlIixvLmlzTWF0Y2hlZChhLmIuWExhcmdlKSl9KSx1fXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGVQb3J0YWxBdHRhY2hlZCgpLHRoaXMuX3NldFBhbmVsQ2xhc3MoKSx0aGlzLl9zYXZlUHJldmlvdXNseUZvY3VzZWRFbGVtZW50KCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KX0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlUG9ydGFsQXR0YWNoZWQoKSx0aGlzLl9zZXRQYW5lbENsYXNzKCksdGhpcy5fc2F2ZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KX0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZSIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX0sZS5wcm90b3R5cGUuZXhpdD1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJoaWRkZW4iLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZGVzdHJveWVkPSEwfSxlLnByb3RvdHlwZS5fb25BbmltYXRpb25Eb25lPWZ1bmN0aW9uKHQpeyJ2aXNpYmxlIj09PXQudG9TdGF0ZT90aGlzLl90cmFwRm9jdXMoKToiaGlkZGVuIj09PXQudG9TdGF0ZSYmdGhpcy5fcmVzdG9yZUZvY3VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQodCl9LGUucHJvdG90eXBlLl9vbkFuaW1hdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5lbWl0KHQpfSxlLnByb3RvdHlwZS5fdG9nZ2xlQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2U/bi5hZGQodCk6bi5yZW1vdmUodCl9LGUucHJvdG90eXBlLl92YWxpZGF0ZVBvcnRhbEF0dGFjaGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpdGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGJvdHRvbSBzaGVldCBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCIpfSxlLnByb3RvdHlwZS5fc2V0UGFuZWxDbGFzcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXRoaXMuYm90dG9tU2hlZXRDb25maWcucGFuZWxDbGFzcztBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QuYWRkKGUpfSk6ZSYmdC5jbGFzc0xpc3QuYWRkKGUpfSxlLnByb3RvdHlwZS5fdHJhcEZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwfHwodGhpcy5fZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpLHRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9LGUucHJvdG90eXBlLl9yZXN0b3JlRm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZU9wZW5lZDt0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpLHRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUuX3NhdmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlT3BlbmVkPXRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9LGV9KG8uYSksXz1mdW5jdGlvbigpe30sdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciBpPXRoaXM7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBjLmEsdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IGMuYSx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9Zi5hLkVNUFRZLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0Ll9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4iZG9uZSI9PT10LnBoYXNlTmFtZSYmInZpc2libGUiPT09dC50b1N0YXRlfSksT2JqZWN0KG0uYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2kuX2FmdGVyT3BlbmVkLm5leHQoKSxpLl9hZnRlck9wZW5lZC5jb21wbGV0ZSgpfSksdC5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24odCl7cmV0dXJuImRvbmUiPT09dC5waGFzZU5hbWUmJiJoaWRkZW4iPT09dC50b1N0YXRlfSksT2JqZWN0KG0uYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2kuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLGkuX292ZXJsYXlSZWYuZGlzcG9zZSgpLGkuX2FmdGVyRGlzbWlzc2VkLm5leHQoaS5fcmVzdWx0KSxpLl9hZnRlckRpc21pc3NlZC5jb21wbGV0ZSgpfSksdC5ib3R0b21TaGVldENvbmZpZy5kaXNhYmxlQ2xvc2V8fE9iamVjdChkLmEpKGUuYmFja2Ryb3BDbGljaygpLGUua2V5ZG93bkV2ZW50cygpLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5Q29kZT09PXUuZ30pKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzbWlzcygpfSksbiYmKHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz1uLnN1YnNjcmliZShmdW5jdGlvbigpe3QuYm90dG9tU2hlZXRDb25maWcuY2xvc2VPbk5hdmlnYXRpb24mJmkuZGlzbWlzcygpfSkpfXJldHVybiB0LnByb3RvdHlwZS5kaXNtaXNzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY2xvc2VkfHwodGhpcy5jb250YWluZXJJbnN0YW5jZS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24odCl7cmV0dXJuInN0YXJ0Ij09PXQucGhhc2VOYW1lfSksT2JqZWN0KG0uYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl9vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCl9KSx0aGlzLl9yZXN1bHQ9dCx0aGlzLmNvbnRhaW5lckluc3RhbmNlLmV4aXQoKSl9LHQucHJvdG90eXBlLmFmdGVyRGlzbWlzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hZnRlck9wZW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hZnRlck9wZW5lZC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKX0sdC5wcm90b3R5cGUua2V5ZG93bkV2ZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKX0sdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLl9vdmVybGF5PXQsdGhpcy5faW5qZWN0b3I9ZSx0aGlzLl9wYXJlbnRCb3R0b21TaGVldD1uLHRoaXMuX2xvY2F0aW9uPWksdGhpcy5fYm90dG9tU2hlZXRSZWZBdFRoaXNMZXZlbD1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9vcGVuZWRCb3R0b21TaGVldFJlZiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudEJvdHRvbVNoZWV0O3JldHVybiB0P3QuX29wZW5lZEJvdHRvbVNoZWV0UmVmOnRoaXMuX2JvdHRvbVNoZWV0UmVmQXRUaGlzTGV2ZWx9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9wYXJlbnRCb3R0b21TaGVldD90aGlzLl9wYXJlbnRCb3R0b21TaGVldC5fb3BlbmVkQm90dG9tU2hlZXRSZWY9dDp0aGlzLl9ib3R0b21TaGVldFJlZkF0VGhpc0xldmVsPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsYT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIuYSkoe30sbmV3IHYsdCl9KGUpLHM9dGhpcy5fY3JlYXRlT3ZlcmxheShhKSxsPXRoaXMuX2F0dGFjaENvbnRhaW5lcihzLGEpLHU9bmV3IHcobCxzLHRoaXMuX2xvY2F0aW9uKTtpZih0IGluc3RhbmNlb2YgaS5OKWwuYXR0YWNoVGVtcGxhdGVQb3J0YWwobmV3IG8uZyh0LG51bGwseyRpbXBsaWNpdDphLmRhdGEsYm90dG9tU2hlZXRSZWY6dX0pKTtlbHNle3ZhciBjPW5ldyBvLmModCx2b2lkIDAsdGhpcy5fY3JlYXRlSW5qZWN0b3IoYSx1KSksZj1sLmF0dGFjaENvbXBvbmVudFBvcnRhbChjKTt1Lmluc3RhbmNlPWYuaW5zdGFuY2V9cmV0dXJuIHUuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtuLl9vcGVuZWRCb3R0b21TaGVldFJlZj09dSYmKG4uX29wZW5lZEJvdHRvbVNoZWV0UmVmPW51bGwpfSksdGhpcy5fb3BlbmVkQm90dG9tU2hlZXRSZWY/KHRoaXMuX29wZW5lZEJvdHRvbVNoZWV0UmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKX0pLHRoaXMuX29wZW5lZEJvdHRvbVNoZWV0UmVmLmRpc21pc3MoKSk6dS5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpLHRoaXMuX29wZW5lZEJvdHRvbVNoZWV0UmVmPXUsdX0sdC5wcm90b3R5cGUuZGlzbWlzcz1mdW5jdGlvbigpe3RoaXMuX29wZW5lZEJvdHRvbVNoZWV0UmVmJiZ0aGlzLl9vcGVuZWRCb3R0b21TaGVldFJlZi5kaXNtaXNzKCl9LHQucHJvdG90eXBlLl9hdHRhY2hDb250YWluZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgby5lKGUmJmUudmlld0NvbnRhaW5lclJlZiYmZS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3RvcixuZXcgV2Vha01hcChbW3YsZV1dKSksaT1uZXcgby5jKGcsZS52aWV3Q29udGFpbmVyUmVmLG4pO3JldHVybiB0LmF0dGFjaChpKS5pbnN0YW5jZX0sdC5wcm90b3R5cGUuX2NyZWF0ZU92ZXJsYXk9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGwuYih7ZGlyZWN0aW9uOnQuZGlyZWN0aW9uLGhhc0JhY2tkcm9wOnQuaGFzQmFja2Ryb3AsbWF4V2lkdGg6IjEwMCUiLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpLHBvc2l0aW9uU3RyYXRlZ3k6dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLmNlbnRlckhvcml6b250YWxseSgpLmJvdHRvbSgiMCIpfSk7cmV0dXJuIHQuYmFja2Ryb3BDbGFzcyYmKGUuYmFja2Ryb3BDbGFzcz10LmJhY2tkcm9wQ2xhc3MpLHRoaXMuX292ZXJsYXkuY3JlYXRlKGUpfSx0LnByb3RvdHlwZS5fY3JlYXRlSW5qZWN0b3I9ZnVuY3Rpb24odCxlKXt2YXIgbj10JiZ0LnZpZXdDb250YWluZXJSZWYmJnQudmlld0NvbnRhaW5lclJlZi5pbmplY3RvcixpPW5ldyBXZWFrTWFwKFtbdyxlXSxbeSx0LmRhdGFdXSk7cmV0dXJuIXQuZGlyZWN0aW9ufHxuJiZuLmdldChiLmIsbnVsbCl8fGkuc2V0KGIuYix7dmFsdWU6dC5kaXJlY3Rpb24sY2hhbmdlOk9iamVjdChoLmEpKCl9KSxuZXcgby5lKG58fHRoaXMuX2luamVjdG9yLGkpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKShsLmEpLE9iamVjdChpLlkpKGkubyksT2JqZWN0KGkuWSkodCwxMiksT2JqZWN0KGkuWSkocy5oLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOl99KSx0fSgpfSxDUzlROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbil7dm9pZCAwPT09biYmKG49dC5ub3cpLHRoaXMuU2NoZWR1bGVyQWN0aW9uPWUsdGhpcy5ub3c9bn1yZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxuZXcgdGhpcy5TY2hlZHVsZXJBY3Rpb24odGhpcyx0KS5zY2hlZHVsZShuLGUpfSx0Lm5vdz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSx0fSgpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3ZvaWQgMD09PWkmJihpPXIubm93KTt2YXIgbz10LmNhbGwodGhpcyxuLGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVsZWdhdGUmJmUuZGVsZWdhdGUhPT1vP2UuZGVsZWdhdGUubm93KCk6aSgpfSl8fHRoaXM7cmV0dXJuIG8uYWN0aW9ucz1bXSxvLmFjdGl2ZT0hMSxvLnNjaGVkdWxlZD12b2lkIDAsb31yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24obixpLHIpe3JldHVybiB2b2lkIDA9PT1pJiYoaT0wKSxlLmRlbGVnYXRlJiZlLmRlbGVnYXRlIT09dGhpcz9lLmRlbGVnYXRlLnNjaGVkdWxlKG4saSxyKTp0LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsbixpLHIpfSxlLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGlvbnM7aWYodGhpcy5hY3RpdmUpZS5wdXNoKHQpO2Vsc2V7dmFyIG47dGhpcy5hY3RpdmU9ITA7ZG97aWYobj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5hY3RpdmU9ITEsbil7Zm9yKDt0PWUuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0sZX0ocil9LENjbkc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiS2EiLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsIkxhIixmdW5jdGlvbigpe3JldHVybiBmbn0pLG4uZChlLCJNYSIsZnVuY3Rpb24oKXtyZXR1cm4gZG59KSxuLmQoZSwiSmEiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHZlfSksbi5kKGUsIlYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZlfSksbi5kKGUsIloiLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSksbi5kKGUsIlQiLGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIGhlfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEN0fSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIEV0fSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGp0fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHh0fSksbi5kKGUsIlgiLGZ1bmN0aW9uKCl7cmV0dXJuIFZlfSksbi5kKGUsIk8iLGZ1bmN0aW9uKCl7cmV0dXJuIGllfSksbi5kKGUsIkJhIixmdW5jdGlvbigpe3JldHVybiBvZX0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiB1bn0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBobn0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBZdH0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBzdH0pLG4uZChlLCJIIixmdW5jdGlvbigpe3JldHVybiBWbn0pLG4uZChlLCJJIixmdW5jdGlvbigpe3JldHVybiBGbn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuICR9KSxuLmQoZSwiUCIsZnVuY3Rpb24oKXtyZXR1cm4gSn0pLG4uZChlLCJVIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsIlciLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gS30pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiSyIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJ6IixmdW5jdGlvbigpe3JldHVybiBLdH0pLG4uZChlLCJFIixmdW5jdGlvbigpe3JldHVybiB4ZX0pLG4uZChlLCJGIixmdW5jdGlvbigpe3JldHVybiBfZX0pLG4uZChlLCJHIixmdW5jdGlvbigpe3JldHVybiB3ZX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBSdH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiB6dH0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBDZX0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBxdH0pLG4uZChlLCJ4IixmdW5jdGlvbigpe3JldHVybiBIdH0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBTZX0pLG4uZChlLCJEIixmdW5jdGlvbigpe3JldHVybiBPZX0pLG4uZChlLCJMIixmdW5jdGlvbigpe3JldHVybiBqZX0pLG4uZChlLCJNIixmdW5jdGlvbigpe3JldHVybiBFZX0pLG4uZChlLCJOIixmdW5jdGlvbigpe3JldHVybiBUZX0pLG4uZChlLCJRIixmdW5jdGlvbigpe3JldHVybiBSZX0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBQZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBBZX0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBubn0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBybn0pLG4uZChlLCJKIixmdW5jdGlvbigpe3JldHVybiBIZX0pLG4uZChlLCJTIixmdW5jdGlvbigpe3JldHVybiBVZX0pLG4uZChlLCJBYSIsZnVuY3Rpb24oKXtyZXR1cm4gbG59KSxuLmQoZSwiVWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHFlfSksbi5kKGUsIkVhIixmdW5jdGlvbigpe3JldHVybiBJdH0pLG4uZChlLCJDYSIsZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSxuLmQoZSwiRGEiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0fSksbi5kKGUsIkZhIixmdW5jdGlvbigpe3JldHVybiBQbn0pLG4uZChlLCJHYSIsZnVuY3Rpb24oKXtyZXR1cm4gTG59KSxuLmQoZSwiSGEiLGZ1bmN0aW9uKCl7cmV0dXJuIHlufSksbi5kKGUsIlNhIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsIlhhIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImliIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsIlZhIixmdW5jdGlvbigpe3JldHVybiBfdH0pLG4uZChlLCJXYSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiSWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEFpfSksbi5kKGUsIk5hIixmdW5jdGlvbigpe3JldHVybiAkaX0pLG4uZChlLCJPYSIsZnVuY3Rpb24oKXtyZXR1cm4gc2F9KSxuLmQoZSwiUGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGlpfSksbi5kKGUsIlFhIixmdW5jdGlvbigpe3JldHVybiB4cn0pLG4uZChlLCJSYSIsZnVuY3Rpb24oKXtyZXR1cm4gUGl9KSxuLmQoZSwiVGEiLGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSksbi5kKGUsIllhIixmdW5jdGlvbigpe3JldHVybiBIaX0pLG4uZChlLCJaYSIsZnVuY3Rpb24oKXtyZXR1cm4gVWl9KSxuLmQoZSwiYWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHFyfSksbi5kKGUsImJiIixmdW5jdGlvbigpe3JldHVybiB1cn0pLG4uZChlLCJkYiIsZnVuY3Rpb24oKXtyZXR1cm4gQ3J9KSxuLmQoZSwiZ2IiLGZ1bmN0aW9uKCl7cmV0dXJuIFNyfSksbi5kKGUsImNiIixmdW5jdGlvbigpe3JldHVybiBacn0pLG4uZChlLCJlYiIsZnVuY3Rpb24oKXtyZXR1cm4gV3J9KSxuLmQoZSwiZmIiLGZ1bmN0aW9uKCl7cmV0dXJuIEdyfSksbi5kKGUsImhiIixmdW5jdGlvbigpe3JldHVybiBWcn0pLG4uZChlLCJqYiIsZnVuY3Rpb24oKXtyZXR1cm4gS3J9KSxuLmQoZSwia2IiLGZ1bmN0aW9uKCl7cmV0dXJuIHRpfSksbi5kKGUsImxiIixmdW5jdGlvbigpe3JldHVybiBKcn0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oInB1Z1QiKSxvPW4oIks5SWEiKSxhPW4oIjZibEYiKSxzPW4oInAwaWIiKSxsPW4oIlMxblgiKTtmdW5jdGlvbiB1KHQpe3JldHVybntwcm92aWRlZEluOnQucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OnQuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2Rlc2M9dCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5uZ0luamVjdGFibGVEZWY9dm9pZCAwIT09ZT91KHtwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSk6dm9pZCAwfXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJJbmplY3Rpb25Ub2tlbiAiK3RoaXMuX2Rlc2N9LHR9KCksZj0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIGQodCxlLG4pe3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtpZih0KXt2YXIgcj10LmFwcGx5KHZvaWQgMCxPYmplY3QoaS5kKShlKSk7Zm9yKHZhciBvIGluIHIpdGhpc1tvXT1yW29dfX19KGUpO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLGUpLHRoaXM7dmFyIGE9bmV3KCh0PW8pLmJpbmQuYXBwbHkodCxPYmplY3QoaS5kKShbdm9pZCAwXSxlKSkpO3JldHVybiBzLmFubm90YXRpb249YSxzO2Z1bmN0aW9uIHModCxlLG4pe2Zvcih2YXIgaT10Lmhhc093blByb3BlcnR5KGYpP3RbZl06T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZix7dmFsdWU6W119KVtmXTtpLmxlbmd0aDw9bjspaS5wdXNoKG51bGwpO3JldHVybihpW25dPWlbbl18fFtdKS5wdXNoKGEpLHR9fXJldHVybiBuJiYoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLG8ucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsby5hbm5vdGF0aW9uQ2xzPW8sb312YXIgaD1uZXcgYygiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpO0Z1bmN0aW9uO3ZhciBwPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3csbT0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZixiPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZnbG9iYWx8fHB8fG0seT1Qcm9taXNlLnJlc29sdmUoMCksdj1udWxsO2Z1bmN0aW9uIGcoKXtpZighdil7dmFyIHQ9Yi5TeW1ib2w7aWYodCYmdC5pdGVyYXRvcil2PXQuaXRlcmF0b3I7ZWxzZSBmb3IodmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTWFwLnByb3RvdHlwZSksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dOyJlbnRyaWVzIiE9PWkmJiJzaXplIiE9PWkmJk1hcC5wcm90b3R5cGVbaV09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJih2PWkpfX1yZXR1cm4gdn1mdW5jdGlvbiBfKHQpeyJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZT95LnRoZW4oZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KG51bGwsbnVsbCl9KTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIix0KX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIHQ9PT1lfHwibnVtYmVyIj09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgZSYmaXNOYU4odCkmJmlzTmFOKGUpfWZ1bmN0aW9uIHgodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHQgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iWyIrdC5tYXAoeCkuam9pbigiLCAiKSsiXSI7aWYobnVsbD09dClyZXR1cm4iIit0O2lmKHQub3ZlcnJpZGRlbk5hbWUpcmV0dXJuIiIrdC5vdmVycmlkZGVuTmFtZTtpZih0Lm5hbWUpcmV0dXJuIiIrdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKTtpZihudWxsPT1lKXJldHVybiIiK2U7dmFyIG49ZS5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09bj9lOmUuc3Vic3RyaW5nKDAsbil9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdC5fX2ZvcndhcmRfcmVmX189Qyx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHgodGhpcygpKX0sdH1mdW5jdGlvbiBTKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJfX2ZvcndhcmRfcmVmX18iKSYmdC5fX2ZvcndhcmRfcmVmX189PT1DP3QoKTp0fXZhciBPPWQoIkluamVjdCIsZnVuY3Rpb24odCl7cmV0dXJue3Rva2VuOnR9fSksRT1kKCJPcHRpb25hbCIpLGs9ZCgiU2VsZiIpLGo9ZCgiU2tpcFNlbGYiKSxJPSJfX3NvdXJjZSIsVD1uZXcgT2JqZWN0LFI9VCxBPW5ldyBjKCJJTkpFQ1RPUiIpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT1UKSxlPT09VCl0aHJvdyBuZXcgRXJyb3IoIk51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgIit4KHQpKyIhIik7cmV0dXJuIGV9LHR9KCksRD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/bmV3IHEodCxlKTpuZXcgcSh0LnByb3ZpZGVycyx0LnBhcmVudCx0Lm5hbWV8fG51bGwpfSx0LlRIUk9XX0lGX05PVF9GT1VORD1ULHQuTlVMTD1uZXcgUCx0Lm5nSW5qZWN0YWJsZURlZj11KHtwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gSyhBKX19KSx0fSgpLE09ZnVuY3Rpb24odCl7cmV0dXJuIHR9LE49W10sTD1NLEY9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKX0sVj17fSx6PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHRbZV09PT1WKXJldHVybiBlO3Rocm93IEVycm9yKCIhcHJvcCIpfSh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6Vn0pLEI9RC5OVUxMLFU9L1xuL2dtLEg9Ilx1MDI3NSIscT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PWUmJihlPUIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMucGFyZW50PWUsdGhpcy5zb3VyY2U9bjt2YXIgaT10aGlzLl9yZWNvcmRzPW5ldyBNYXA7aS5zZXQoRCx7dG9rZW46RCxmbjpNLGRlcHM6Tix2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLGkuc2V0KEEse3Rva2VuOkEsZm46TSxkZXBzOk4sdmFsdWU6dGhpcyx1c2VOZXc6ITF9KSxmdW5jdGlvbiB0KGUsbil7aWYobilpZigobj1TKG4pKWluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspdChlLG5baV0pO2Vsc2V7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pdGhyb3cgWigiRnVuY3Rpb24vQ2xhc3Mgbm90IHN1cHBvcnRlZCIsbik7aWYoIW58fCJvYmplY3QiIT10eXBlb2Ygbnx8IW4ucHJvdmlkZSl0aHJvdyBaKCJVbmV4cGVjdGVkIHByb3ZpZGVyIixuKTt2YXIgcj1TKG4ucHJvdmlkZSksbz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1OLG49dC5kZXBzO2lmKG4mJm4ubGVuZ3RoKXtlPVtdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcj02O2lmKChsPVMobltpXSkpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG89MCxhPWw7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cyBpbnN0YW5jZW9mIEV8fHM9PUU/cnw9MTpzIGluc3RhbmNlb2Yganx8cz09aj9yJj0tMzpzIGluc3RhbmNlb2Yga3x8cz09az9yJj0tNTpsPXMgaW5zdGFuY2VvZiBPP3MudG9rZW46UyhzKX1lLnB1c2goe3Rva2VuOmwsb3B0aW9uczpyfSl9fWVsc2UgaWYodC51c2VFeGlzdGluZyl7dmFyIGw7ZT1be3Rva2VuOmw9Uyh0LnVzZUV4aXN0aW5nKSxvcHRpb25zOjZ9XX1lbHNlIGlmKCEobnx8eiBpbiB0KSl0aHJvdyBaKCInZGVwcycgcmVxdWlyZWQiLHQpO3JldHVybiBlfSh0KSxuPU0saT1OLHI9ITEsbz1TKHQucHJvdmlkZSk7aWYoeiBpbiB0KWk9dC51c2VWYWx1ZTtlbHNlIGlmKHQudXNlRmFjdG9yeSluPXQudXNlRmFjdG9yeTtlbHNlIGlmKHQudXNlRXhpc3RpbmcpO2Vsc2UgaWYodC51c2VDbGFzcylyPSEwLG49Uyh0LnVzZUNsYXNzKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvKXRocm93IFooIlN0YXRpY1Byb3ZpZGVyIGRvZXMgbm90IGhhdmUgW3VzZVZhbHVlfHVzZUZhY3Rvcnl8dXNlRXhpc3Rpbmd8dXNlQ2xhc3NdIG9yIFtwcm92aWRlXSBpcyBub3QgbmV3YWJsZSIsdCk7cj0hMCxuPW99cmV0dXJue2RlcHM6ZSxmbjpuLHVzZU5ldzpyLHZhbHVlOml9fShuKTtpZighMD09PW4ubXVsdGkpe3ZhciBhPWUuZ2V0KHIpO2lmKGEpe2lmKGEuZm4hPT1GKXRocm93IFEocil9ZWxzZSBlLnNldChyLGE9e3Rva2VuOm4ucHJvdmlkZSxkZXBzOltdLHVzZU5ldzohMSxmbjpGLHZhbHVlOk59KTthLmRlcHMucHVzaCh7dG9rZW46cj1uLG9wdGlvbnM6Nn0pfXZhciBzPWUuZ2V0KHIpO2lmKHMmJnMuZm49PUYpdGhyb3cgUShyKTtlLnNldChyLG8pfX0oaSx0KX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgcj10aGlzLl9yZWNvcmRzLmdldCh0KTt0cnl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLHIsbyxhLHMpe3RyeXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIsbyxhLHMpe3ZhciBsLHU7aWYoIW58fDQmcykyJnN8fCh1PW8uZ2V0KGUsYSwwKSk7ZWxzZXtpZigodT1uLnZhbHVlKT09TCl0aHJvdyBFcnJvcihIKyJDaXJjdWxhciBkZXBlbmRlbmN5Iik7aWYodT09PU4pe24udmFsdWU9TDt2YXIgYz1uLnVzZU5ldyxmPW4uZm4sZD1uLmRlcHMsaD1OO2lmKGQubGVuZ3RoKXtoPVtdO2Zvcih2YXIgcD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgbT1kW3BdLGI9bS5vcHRpb25zLHk9MiZiP3IuZ2V0KG0udG9rZW4pOnZvaWQgMDtoLnB1c2godChtLnRva2VuLHkscix5fHw0JmI/bzpCLDEmYj9udWxsOkQuVEhST1dfSUZfTk9UX0ZPVU5ELDApKX19bi52YWx1ZT11PWM/bmV3KChsPWYpLmJpbmQuYXBwbHkobCxPYmplY3QoaS5kKShbdm9pZCAwXSxoKSkpOmYuYXBwbHkodm9pZCAwLGgpfX1yZXR1cm4gdX0oZSxuLHIsbyxhLHMpfWNhdGNoKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQpKSwodC5uZ1RlbXBUb2tlblBhdGg9dC5uZ1RlbXBUb2tlblBhdGh8fFtdKS51bnNoaWZ0KGUpLG4mJm4udmFsdWU9PUwmJihuLnZhbHVlPU4pLHR9fSh0LHIsdGhpcy5fcmVjb3Jkcyx0aGlzLnBhcmVudCxlLG4pfWNhdGNoKGUpe3ZhciBvPWUubmdUZW1wVG9rZW5QYXRoO3Rocm93IHRbSV0mJm8udW5zaGlmdCh0W0ldKSxlLm1lc3NhZ2U9RygiXG4iK2UubWVzc2FnZSxvLHRoaXMuc291cmNlKSxlLm5nVG9rZW5QYXRoPW8sZS5uZ1RlbXBUb2tlblBhdGg9bnVsbCxlfX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHVzaCh4KG4pKX0pLCJTdGF0aWNJbmplY3RvclsiK3Quam9pbigiLCAiKSsiXSJ9LHR9KCk7ZnVuY3Rpb24gUSh0KXtyZXR1cm4gWigiQ2Fubm90IG1peCBtdWx0aSBwcm92aWRlcnMgYW5kIHJlZ3VsYXIgcHJvdmlkZXJzIix0KX1mdW5jdGlvbiBHKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1udWxsKSx0PXQmJiJcbiI9PT10LmNoYXJBdCgwKSYmdC5jaGFyQXQoMSk9PUg/dC5zdWJzdHIoMik6dDt2YXIgaT14KGUpO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlpPWUubWFwKHgpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHI9W107Zm9yKHZhciBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIGE9ZVtvXTtyLnB1c2gobysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTp4KGEpKSl9aT0ieyIrci5qb2luKCIsICIpKyJ9In1yZXR1cm4iU3RhdGljSW5qZWN0b3JFcnJvciIrKG4/IigiK24rIikiOiIiKSsiWyIraSsiXTogIit0LnJlcGxhY2UoVSwiXG4gICIpfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gbmV3IEVycm9yKEcodCxlKSl9dmFyIFc9dm9pZCAwO2Z1bmN0aW9uIFkodCl7dmFyIGU9VztyZXR1cm4gVz10LGV9ZnVuY3Rpb24gSyh0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PVcpdGhyb3cgbmV3IEVycm9yKCJpbmplY3QoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIGluamVjdGlvbiBjb250ZXh0Iik7aWYobnVsbD09PVcpe3ZhciBuPXQubmdJbmplY3RhYmxlRGVmO2lmKG4mJiJyb290Ij09bi5wcm92aWRlZEluKXJldHVybiB2b2lkIDA9PT1uLnZhbHVlP24udmFsdWU9bi5mYWN0b3J5KCk6bi52YWx1ZTtpZig4JmUpcmV0dXJuIG51bGw7dGhyb3cgbmV3IEVycm9yKCJJbmplY3RvcjogTk9UX0ZPVU5EIFsiK3godCkrIl0iKX1yZXR1cm4gVy5nZXQodCw4JmU/bnVsbDp2b2lkIDAsZSl9ZnVuY3Rpb24gWCh0KXtmb3IodmFyIGU9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFyZ3VtZW50cyBhcnJheSBtdXN0IGhhdmUgYXJndW1lbnRzLiIpO2Zvcih2YXIgcj12b2lkIDAsbz0wLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtzIGluc3RhbmNlb2YgRXx8Ik9wdGlvbmFsIj09PXMubmdNZXRhZGF0YU5hbWU/b3w9ODpzIGluc3RhbmNlb2Yganx8IlNraXBTZWxmIj09PXMubmdNZXRhZGF0YU5hbWU/b3w9NDpzIGluc3RhbmNlb2Yga3x8IlNlbGYiPT09cy5uZ01ldGFkYXRhTmFtZT9vfD0yOnI9cyBpbnN0YW5jZW9mIE8/cy50b2tlbjpzfWUucHVzaChLKHIsbykpfWVsc2UgZS5wdXNoKEsoaSkpfXJldHVybiBlfVN0cmluZzt2YXIgJD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsdFt0Lk5hdGl2ZT0xXT0iTmF0aXZlIix0W3QuTm9uZT0yXT0iTm9uZSIsdFt0LlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIix0fSh7fSksSj1mdW5jdGlvbih0KXt0aGlzLmZ1bGw9dCx0aGlzLm1ham9yPXQuc3BsaXQoIi4iKVswXSx0aGlzLm1pbm9yPXQuc3BsaXQoIi4iKVsxXSx0aGlzLnBhdGNoPXQuc3BsaXQoIi4iKS5zbGljZSgyKS5qb2luKCIuIil9LHR0PW5ldyBKKCI2LjEuNCIpLGV0PSJuZ0RlYnVnQ29udGV4dCIsbnQ9Im5nT3JpZ2luYWxFcnJvciIsaXQ9Im5nRXJyb3JMb2dnZXIiO2Z1bmN0aW9uIHJ0KHQpe3JldHVybiB0W2V0XX1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gdFtudF19ZnVuY3Rpb24gYXQodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LE9iamVjdChpLmQpKGUpKX12YXIgc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY29uc29sZT1jb25zb2xlfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KSxuPXRoaXMuX2ZpbmRDb250ZXh0KHQpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbaXRdfHxhdH0odCk7aSh0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmaSh0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmaSh0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX0sdC5wcm90b3R5cGUuX2ZpbmRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3J0KHQpP3J0KHQpOnRoaXMuX2ZpbmRDb250ZXh0KG90KHQpKTpudWxsfSx0LnByb3RvdHlwZS5fZmluZE9yaWdpbmFsRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW90KHQpO2UmJm90KGUpOyllPW90KGUpO3JldHVybiBlfSx0fSgpLGx0PW5ldyBjKCJUaGUgcHJlc2VuY2Ugb2YgdGhpcyB0b2tlbiBtYXJrcyBhbiBpbmplY3RvciBhcyBiZWluZyB0aGUgcm9vdCBpbmplY3Rvci4iKSx1dD17fSxjdD17fSxmdD1bXSxkdD12b2lkIDA7ZnVuY3Rpb24gaHQoKXtyZXR1cm4gdm9pZCAwPT09ZHQmJihkdD1uZXcgUCksZHR9dmFyIHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIGk9dGhpczt0aGlzLnBhcmVudD1uLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0LHRoaXMub25EZXN0cm95PW5ldyBTZXQsdGhpcy5kZXN0cm95ZWQ9ITEseXQoW3RdLGZ1bmN0aW9uKHQpe3JldHVybiBpLnByb2Nlc3NJbmplY3RvclR5cGUodCxuZXcgU2V0KX0pLGUmJnl0KGUsZnVuY3Rpb24odCl7cmV0dXJuIGkucHJvY2Vzc1Byb3ZpZGVyKHQpfSksdGhpcy5yZWNvcmRzLnNldChBLGJ0KHZvaWQgMCx0aGlzKSksdGhpcy5pc1Jvb3RJbmplY3Rvcj10aGlzLnJlY29yZHMuaGFzKGx0KSx0aGlzLmluamVjdG9yRGVmVHlwZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5nZXQodCl9KX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5kZXN0cm95ZWQ9ITA7dHJ5e3RoaXMub25EZXN0cm95LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQubmdPbkRlc3Ryb3koKX0pfWZpbmFsbHl7dGhpcy5yZWNvcmRzLmNsZWFyKCksdGhpcy5vbkRlc3Ryb3kuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9Uiksdm9pZCAwPT09biYmKG49MCksdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTt2YXIgaSxyPVkodGhpcyk7dHJ5e2lmKCEoNCZuKSl7dmFyIG89dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1vKXt2YXIgYT0oImZ1bmN0aW9uIj09dHlwZW9mKGk9dCl8fCJvYmplY3QiPT10eXBlb2YgaSYmaSBpbnN0YW5jZW9mIGMpJiZ0Lm5nSW5qZWN0YWJsZURlZnx8dm9pZCAwO3ZvaWQgMCE9PWEmJnRoaXMuaW5qZWN0YWJsZURlZkluU2NvcGUoYSkmJihvPW10KHQpLHRoaXMucmVjb3Jkcy5zZXQodCxvKSl9aWYodm9pZCAwIT09bylyZXR1cm4gdGhpcy5oeWRyYXRlKHQsbyl9cmV0dXJuIDImbiYmaHQoKSx0aGlzLnBhcmVudC5nZXQodCxlKX1maW5hbGx5e1kocil9fSx0LnByb3RvdHlwZS5hc3NlcnROb3REZXN0cm95ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkluamVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpfSx0LnByb3RvdHlwZS5wcm9jZXNzSW5qZWN0b3JUeXBlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPSh0PVModCkpLm5nSW5qZWN0b3JEZWYscj1udWxsPT1pJiZ0Lm5nTW9kdWxlfHx2b2lkIDAsbz12b2lkIDA9PT1yP3Q6cixhPXZvaWQgMCE9PXImJnQucHJvdmlkZXJzfHxmdDtpZih2b2lkIDAhPT1yJiYoaT1yLm5nSW5qZWN0b3JEZWYpLG51bGwhPWkpe2lmKGUuaGFzKG8pKXRocm93IG5ldyBFcnJvcigiQ2lyY3VsYXIgZGVwZW5kZW5jeTogdHlwZSAiK3gobykrIiBlbmRzIHVwIGltcG9ydGluZyBpdHNlbGYuIik7aWYodGhpcy5pbmplY3RvckRlZlR5cGVzLmFkZChvKSx0aGlzLnJlY29yZHMuc2V0KG8sYnQoaS5mYWN0b3J5KSksbnVsbCE9aS5pbXBvcnRzKXtlLmFkZChvKTt0cnl7eXQoaS5pbXBvcnRzLGZ1bmN0aW9uKHQpe3JldHVybiBuLnByb2Nlc3NJbmplY3RvclR5cGUodCxlKX0pfWZpbmFsbHl7ZS5kZWxldGUobyl9fW51bGwhPWkucHJvdmlkZXJzJiZ5dChpLnByb3ZpZGVycyxmdW5jdGlvbih0KXtyZXR1cm4gbi5wcm9jZXNzUHJvdmlkZXIodCl9KSx5dChhLGZ1bmN0aW9uKHQpe3JldHVybiBuLnByb2Nlc3NQcm92aWRlcih0KX0pfX0sdC5wcm90b3R5cGUucHJvY2Vzc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXZ0KHQ9Uyh0KSk/dDpTKHQucHJvdmlkZSksbj1mdW5jdGlvbih0KXt2YXIgZT1TKHQpLG49dXQscj12b2lkIDA7aWYodnQodCkpcmV0dXJuIG10KHQpO2lmKGU9Uyh0LnByb3ZpZGUpLHogaW4gdCluPXQudXNlVmFsdWU7ZWxzZSBpZih0LnVzZUV4aXN0aW5nKXI9ZnVuY3Rpb24oKXtyZXR1cm4gSyh0LnVzZUV4aXN0aW5nKX07ZWxzZSBpZih0LnVzZUZhY3Rvcnkpcj1mdW5jdGlvbigpe3JldHVybiB0LnVzZUZhY3RvcnkuYXBwbHkodCxPYmplY3QoaS5kKShYKHQuZGVwc3x8W10pKSl9O2Vsc2V7dmFyIG89dC51c2VDbGFzc3x8ZTtpZighdC5kZXBzKXJldHVybiBtdChvKTtyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyhvLmJpbmQuYXBwbHkobyxPYmplY3QoaS5kKShbdm9pZCAwXSxYKHQuZGVwcykpKSl9fXJldHVybiBidChyLG4pfSh0KTtpZih2dCh0KXx8ITAhPT10Lm11bHRpKXt2YXIgcj10aGlzLnJlY29yZHMuZ2V0KGUpO2lmKHImJnZvaWQgMCE9PXIubXVsdGkpdGhyb3cgbmV3IEVycm9yKCJNaXhlZCBtdWx0aS1wcm92aWRlciBmb3IgIit4KGUpKX1lbHNle3ZhciBvPXRoaXMucmVjb3Jkcy5nZXQoZSk7aWYobyl7aWYodm9pZCAwPT09by5tdWx0aSl0aHJvdyBuZXcgRXJyb3IoIk1peGVkIG11bHRpLXByb3ZpZGVyIGZvciAiK2UrIi4iKX1lbHNlKG89YnQodm9pZCAwLHV0LCEwKSkuZmFjdG9yeT1mdW5jdGlvbigpe3JldHVybiBYKG8ubXVsdGkpfSx0aGlzLnJlY29yZHMuc2V0KGUsbyk7ZT10LG8ubXVsdGkucHVzaCh0KX10aGlzLnJlY29yZHMuc2V0KGUsbil9LHQucHJvdG90eXBlLmh5ZHJhdGU9ZnVuY3Rpb24odCxlKXtpZihlLnZhbHVlPT09Y3QpdGhyb3cgbmV3IEVycm9yKCJDaXJjdWxhciBkZXAgZm9yICIreCh0KSk7dmFyIG47cmV0dXJuIGUudmFsdWU9PT11dCYmKGUudmFsdWU9Y3QsZS52YWx1ZT1lLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBlLnZhbHVlJiZlLnZhbHVlJiYib2JqZWN0Ij09dHlwZW9mKG49ZS52YWx1ZSkmJm51bGwhPW4mJm4ubmdPbkRlc3Ryb3kmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLm5nT25EZXN0cm95JiZ0aGlzLm9uRGVzdHJveS5hZGQoZS52YWx1ZSksZS52YWx1ZX0sdC5wcm90b3R5cGUuaW5qZWN0YWJsZURlZkluU2NvcGU9ZnVuY3Rpb24odCl7cmV0dXJuISF0LnByb3ZpZGVkSW4mJigic3RyaW5nIj09dHlwZW9mIHQucHJvdmlkZWRJbj8iYW55Ij09PXQucHJvdmlkZWRJbnx8InJvb3QiPT09dC5wcm92aWRlZEluJiZ0aGlzLmlzUm9vdEluamVjdG9yOnRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXModC5wcm92aWRlZEluKSl9LHR9KCk7ZnVuY3Rpb24gbXQodCl7dmFyIGU9dC5uZ0luamVjdGFibGVEZWY7aWYodm9pZCAwPT09ZSl7aWYodCBpbnN0YW5jZW9mIGMpdGhyb3cgbmV3IEVycm9yKCJUb2tlbiAiK3godCkrIiBpcyBtaXNzaW5nIGFuIG5nSW5qZWN0YWJsZURlZiBkZWZpbml0aW9uLiIpO3JldHVybiBidChmdW5jdGlvbigpe3JldHVybiBuZXcgdH0pfXJldHVybiBidChlLmZhY3RvcnkpfWZ1bmN0aW9uIGJ0KHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dXQpLHZvaWQgMD09PW4mJihuPSExKSx7ZmFjdG9yeTp0LHZhbHVlOmUsbXVsdGk6bj9bXTp2b2lkIDB9fWZ1bmN0aW9uIHl0KHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3l0KHQsZSk6ZSh0KX0pfWZ1bmN0aW9uIHZ0KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGd0KHQpe3JldHVybiEhdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudGhlbn1mdW5jdGlvbiBfdCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnN1YnNjcmliZX12YXIgd3Q9bmV3IGMoIkFwcGxpY2F0aW9uIEluaXRpYWxpemVyIikseHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5hcHBJbml0cz10LHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24odCxuKXtlLnJlc29sdmU9dCxlLnJlamVjdD1ufSl9cmV0dXJuIHQucHJvdG90eXBlLnJ1bkluaXRpYWxpemVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuaW5pdGlhbGl6ZWQpe3ZhciBlPVtdLG49ZnVuY3Rpb24oKXt0LmRvbmU9ITAsdC5yZXNvbHZlKCl9O2lmKHRoaXMuYXBwSW5pdHMpZm9yKHZhciBpPTA7aTx0aGlzLmFwcEluaXRzLmxlbmd0aDtpKyspe3ZhciByPXRoaXMuYXBwSW5pdHNbaV0oKTtndChyKSYmZS5wdXNoKHIpfVByb21pc2UuYWxsKGUpLnRoZW4oZnVuY3Rpb24oKXtuKCl9KS5jYXRjaChmdW5jdGlvbihlKXt0LnJlamVjdChlKX0pLDA9PT1lLmxlbmd0aCYmbigpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fSx0fSgpLEN0PW5ldyBjKCJBcHBJZCIpO2Z1bmN0aW9uIFN0KCl7cmV0dXJuIiIrT3QoKStPdCgpK090KCl9ZnVuY3Rpb24gT3QoKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg5NytNYXRoLmZsb29yKDI1Kk1hdGgucmFuZG9tKCkpKX12YXIgRXQ9bmV3IGMoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksa3Q9bmV3IGMoIlBsYXRmb3JtIElEIiksanQ9bmV3IGMoImFwcEJvb3RzdHJhcExpc3RlbmVyIiksSXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7Y29uc29sZS5sb2codCl9LHQucHJvdG90eXBlLndhcm49ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKHQpfSx0fSgpO2Z1bmN0aW9uIFR0KCl7dGhyb3cgbmV3IEVycm9yKCJSdW50aW1lIGNvbXBpbGVyIGlzIG5vdCBsb2FkZWQiKX12YXIgUnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlU3luYz1mdW5jdGlvbih0KXt0aHJvdyBUdCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQXN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgVHQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jPWZ1bmN0aW9uKHQpe3Rocm93IFR0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgVHQoKX0sdC5wcm90b3R5cGUuY2xlYXJDYWNoZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2xlYXJDYWNoZUZvcj1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldE1vZHVsZUlkPWZ1bmN0aW9uKHQpe30sdH0oKSxBdD1mdW5jdGlvbigpe30sUHQ9ZnVuY3Rpb24oKXt9LER0PWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBNdCh0KXt2YXIgZT1FcnJvcigiTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICIreCh0KSsiLiBEaWQgeW91IGFkZCBpdCB0byBATmdNb2R1bGUuZW50cnlDb21wb25lbnRzPyIpO3JldHVybiBlW0Z0XT10LGV9dmFyIE50LEx0LEZ0PSJuZ0NvbXBvbmVudCIsVnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeT1mdW5jdGlvbih0KXt0aHJvdyBNdCh0KX0sdH0oKSx6dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuTlVMTD1uZXcgVnQsdH0oKSxCdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3BhcmVudD1lLHRoaXMuX25nTW9kdWxlPW4sdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXA7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciByPXRbaV07dGhpcy5fZmFjdG9yaWVzLnNldChyLmNvbXBvbmVudFR5cGUscil9fXJldHVybiB0LnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO2lmKCFlJiZ0aGlzLl9wYXJlbnQmJihlPXRoaXMuX3BhcmVudC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSksIWUpdGhyb3cgTXQodCk7cmV0dXJuIG5ldyBVdChlLHRoaXMuX25nTW9kdWxlKX0sdH0oKSxVdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmZhY3Rvcnk9ZSxpLm5nTW9kdWxlPW4saS5zZWxlY3Rvcj1lLnNlbGVjdG9yLGkuY29tcG9uZW50VHlwZT1lLmNvbXBvbmVudFR5cGUsaS5uZ0NvbnRlbnRTZWxlY3RvcnM9ZS5uZ0NvbnRlbnRTZWxlY3RvcnMsaS5pbnB1dHM9ZS5pbnB1dHMsaS5vdXRwdXRzPWUub3V0cHV0cyxpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZSh0LGUsbixpfHx0aGlzLm5nTW9kdWxlKX0sZX0oRHQpLEh0PWZ1bmN0aW9uKCl7fSxxdD1mdW5jdGlvbigpe30sUXQ9ZnVuY3Rpb24oKXt2YXIgdD1iLnd0ZjtyZXR1cm4hKCF0fHwhKE50PXQudHJhY2UpfHwoTHQ9TnQuZXZlbnRzLDApKX0oKTtmdW5jdGlvbiBHdCh0LGUpe3JldHVybiBudWxsfXZhciBadD1RdD9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1udWxsKSxMdC5jcmVhdGVTY29wZSh0LGUpfTpmdW5jdGlvbih0LGUpe3JldHVybiBHdH0sV3Q9UXQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gTnQubGVhdmVTY29wZSh0LGUpLGV9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9LFl0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fX2lzQXN5bmM9ZSxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlLG4saSl7dmFyIG8sYT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scz1mdW5jdGlvbigpe3JldHVybiBudWxsfTtlJiYib2JqZWN0Ij09dHlwZW9mIGU/KG89dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLm5leHQodCl9KX06ZnVuY3Rpb24odCl7ZS5uZXh0KHQpfSxlLmVycm9yJiYoYT10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZXJyb3IodCl9KX06ZnVuY3Rpb24odCl7ZS5lcnJvcih0KX0pLGUuY29tcGxldGUmJihzPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmNvbXBsZXRlKCl9KX06ZnVuY3Rpb24oKXtlLmNvbXBsZXRlKCl9KSk6KG89dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlKHQpfSl9OmZ1bmN0aW9uKHQpe2UodCl9LG4mJihhPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbih0KX0pfTpmdW5jdGlvbih0KXtuKHQpfSksaSYmKHM9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkoKX0pfTpmdW5jdGlvbigpe2koKX0pKTt2YXIgbD10LnByb3RvdHlwZS5zdWJzY3JpYmUuY2FsbCh0aGlzLG8sYSxzKTtyZXR1cm4gZSBpbnN0YW5jZW9mIHIuYSYmZS5hZGQobCksbH0sZX0oby5hKSxLdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGUsbj10LmVuYWJsZUxvbmdTdGFja1RyYWNlLGk9dm9pZCAwIT09biYmbjtpZih0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IFl0KCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IFl0KCExKSx0aGlzLm9uU3RhYmxlPW5ldyBZdCghMSksdGhpcy5vbkVycm9yPW5ldyBZdCghMSksInVuZGVmaW5lZCI9PXR5cGVvZiBab25lKXRocm93IG5ldyBFcnJvcigiSW4gdGhpcyBjb25maWd1cmF0aW9uIEFuZ3VsYXIgcmVxdWlyZXMgWm9uZS5qcyIpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKSx0aGlzLl9uZXN0aW5nPTAsdGhpcy5fb3V0ZXI9dGhpcy5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUud3RmWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKFpvbmUud3RmWm9uZVNwZWMpKSxab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLGkmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjKSksKGU9dGhpcykuX2lubmVyPWUuX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazpmdW5jdGlvbih0LG4saSxyLG8sYSl7dHJ5e3JldHVybiB0ZShlKSx0Lmludm9rZVRhc2soaSxyLG8sYSl9ZmluYWxseXtlZShlKX19LG9uSW52b2tlOmZ1bmN0aW9uKHQsbixpLHIsbyxhLHMpe3RyeXtyZXR1cm4gdGUoZSksdC5pbnZva2UoaSxyLG8sYSxzKX1maW5hbGx5e2VlKGUpfX0sb25IYXNUYXNrOmZ1bmN0aW9uKHQsbixpLHIpe3QuaGFzVGFzayhpLHIpLG49PT1pJiYoIm1pY3JvVGFzayI9PXIuY2hhbmdlPyhlLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPXIubWljcm9UYXNrLEp0KGUpKToibWFjcm9UYXNrIj09ci5jaGFuZ2UmJihlLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPXIubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6ZnVuY3Rpb24odCxuLGkscil7cmV0dXJuIHQuaGFuZGxlRXJyb3IoaSxyKSxlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGUub25FcnJvci5lbWl0KHIpfSksITF9fSl9cmV0dXJuIHQuaXNJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7cmV0dXJuITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9LHQuYXNzZXJ0SW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe2lmKCF0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdG8gYmUgaW4gQW5ndWxhciBab25lLCBidXQgaXQgaXMgbm90ISIpfSx0LmFzc2VydE5vdEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZih0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdG8gbm90IGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzISIpfSx0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW4odCxlLG4pfSx0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMuX2lubmVyLG89ci5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIraSx0LCR0LFh0LFh0KTt0cnl7cmV0dXJuIHIucnVuVGFzayhvLGUsbil9ZmluYWxseXtyLmNhbmNlbFRhc2sobyl9fSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsbil9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vdXRlci5ydW4odCl9LHR9KCk7ZnVuY3Rpb24gWHQoKXt9dmFyICR0PXt9O2Z1bmN0aW9uIEp0KHQpe2lmKDA9PXQuX25lc3RpbmcmJiF0Lmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhdC5pc1N0YWJsZSl0cnl7dC5fbmVzdGluZysrLHQub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYodC5fbmVzdGluZy0tLCF0Lmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXt0LnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQub25TdGFibGUuZW1pdChudWxsKX0pfWZpbmFsbHl7dC5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIHRlKHQpe3QuX25lc3RpbmcrKyx0LmlzU3RhYmxlJiYodC5pc1N0YWJsZT0hMSx0Lm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gZWUodCl7dC5fbmVzdGluZy0tLEp0KHQpfXZhciBuZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IFl0LHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgWXQsdGhpcy5vblN0YWJsZT1uZXcgWXQsdGhpcy5vbkVycm9yPW5ldyBZdH1yZXR1cm4gdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdC5wcm90b3R5cGUucnVuT3V0c2lkZUFuZ3VsYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0fSgpLGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX25nWm9uZT10LHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9kaWRXb3JrPSExLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSx0LnJ1bihmdW5jdGlvbigpe2UudGFza1RyYWNraW5nWm9uZT1ab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9KX1yZXR1cm4gdC5wcm90b3R5cGUuX3dhdGNoQW5ndWxhckV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7dC5fZGlkV29yaz0hMCx0Ll9pc1pvbmVTdGFibGU9ITF9fSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe0t0LmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxfKGZ1bmN0aW9uKCl7dC5faXNab25lU3RhYmxlPSEwLHQuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0pfX0pfSl9LHQucHJvdG90eXBlLmluY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnQrPTEsdGhpcy5fZGlkV29yaz0hMCx0aGlzLl9wZW5kaW5nQ291bnR9LHQucHJvdG90eXBlLmRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudD1mdW5jdGlvbigpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5pc1N0YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9LHQucHJvdG90eXBlLl9ydW5DYWxsYmFja3NJZlJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmlzU3RhYmxlKCkpXyhmdW5jdGlvbigpe2Zvcig7MCE9PXQuX2NhbGxiYWNrcy5sZW5ndGg7KXt2YXIgZT10Ll9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0Ll9kaWRXb3JrKX10Ll9kaWRXb3JrPSExfSk7ZWxzZXt2YXIgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnVwZGF0ZUNifHwhdC51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dCh0LnRpbWVvdXRJZCksITEpfSksdGhpcy5fZGlkV29yaz0hMH19LHQucHJvdG90eXBlLmdldFBlbmRpbmdUYXNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhc2tUcmFja2luZ1pvbmU/dGhpcy50YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5zb3VyY2UsaXNQZXJpb2RpYzp0LmRhdGEuaXNQZXJpb2RpYyxkZWxheTp0LmRhdGEuZGVsYXksY3JlYXRpb25Mb2NhdGlvbjp0LmNyZWF0aW9uTG9jYXRpb24seGhyOnQuZGF0YS50YXJnZXR9fSk6W119LHQucHJvdG90eXBlLmFkZENhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9LTE7ZSYmZT4wJiYocj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5fY2FsbGJhY2tzPWkuX2NhbGxiYWNrcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGltZW91dElkIT09cn0pLHQoaS5fZGlkV29yayxpLmdldFBlbmRpbmdUYXNrcygpKX0sZSkpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6dCx0aW1lb3V0SWQ6cix1cGRhdGVDYjpufSl9LHQucHJvdG90eXBlLndoZW5TdGFibGU9ZnVuY3Rpb24odCxlLG4pe2lmKG4mJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL2Rpc3QvdGFzay10cmFja2luZy5qcyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2sodCxlLG4pLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0sdC5wcm90b3R5cGUuZ2V0UGVuZGluZ1JlcXVlc3RDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9LHQucHJvdG90eXBlLmZpbmRQcm92aWRlcnM9ZnVuY3Rpb24odCxlLG4pe3JldHVybltdfSx0fSgpLHJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2FwcGxpY2F0aW9ucz1uZXcgTWFwLHNlLmFkZFRvV2luZG93KHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3RlckFwcGxpY2F0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fYXBwbGljYXRpb25zLnNldCh0LGUpfSx0LnByb3RvdHlwZS51bnJlZ2lzdGVyQXBwbGljYXRpb249ZnVuY3Rpb24odCl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZSh0KX0sdC5wcm90b3R5cGUudW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2FwcGxpY2F0aW9ucy5jbGVhcigpfSx0LnByb3RvdHlwZS5nZXRUZXN0YWJpbGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldCh0KXx8bnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsVGVzdGFiaWxpdGllcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9LHQucHJvdG90eXBlLmdldEFsbFJvb3RFbGVtZW50cz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy5rZXlzKCkpfSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITApLHNlLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLHQsZSl9LHQuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdH0oKTtmdW5jdGlvbiBvZSh0KXtzZT10fXZhciBhZSxzZT1uZXcoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5hZGRUb1dpbmRvdz1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG51bGx9LHR9KCkpLGxlPSEwLHVlPSExLGNlPW5ldyBjKCJBbGxvd011bHRpcGxlVG9rZW4iKTtmdW5jdGlvbiBmZSgpe2lmKHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVuYWJsZSBwcm9kIG1vZGUgYWZ0ZXIgcGxhdGZvcm0gc2V0dXAuIik7bGU9ITF9ZnVuY3Rpb24gZGUoKXtyZXR1cm4gdWU9ITAsbGV9dmFyIGhlPWZ1bmN0aW9uKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy50b2tlbj1lfTtmdW5jdGlvbiBwZSh0LGUsbil7dm9pZCAwPT09biYmKG49W10pO3ZhciBpPSJQbGF0Zm9ybTogIitlLHI9bmV3IGMoaSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgbz1tZSgpO2lmKCFvfHxvLmluamVjdG9yLmdldChjZSwhMSkpaWYodCl0KG4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTpyLHVzZVZhbHVlOiEwfSkpO2Vsc2V7dmFyIGE9bi5jb25jYXQoZSkuY29uY2F0KHtwcm92aWRlOnIsdXNlVmFsdWU6ITB9KTshZnVuY3Rpb24odCl7aWYoYWUmJiFhZS5kZXN0cm95ZWQmJiFhZS5pbmplY3Rvci5nZXQoY2UsITEpKXRocm93IG5ldyBFcnJvcigiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBsYXRmb3JtLiBEZXN0cm95IHRoZSBwcmV2aW91cyBvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS4iKTthZT10LmdldChiZSk7dmFyIGU9dC5nZXQoRXQsbnVsbCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX0oRC5jcmVhdGUoe3Byb3ZpZGVyczphLG5hbWU6aX0pKX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bWUoKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIk5vIHBsYXRmb3JtIGV4aXN0cyEiKTtpZighZS5pbmplY3Rvci5nZXQodCxudWxsKSl0aHJvdyBuZXcgRXJyb3IoIkEgcGxhdGZvcm0gd2l0aCBhIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNyZWF0ZWQuIFBsZWFzZSBkZXN0cm95IGl0IGZpcnN0LiIpO3JldHVybiBlfShyKX19ZnVuY3Rpb24gbWUoKXtyZXR1cm4gYWUmJiFhZS5kZXN0cm95ZWQ/YWU6bnVsbH12YXIgYmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2luamVjdG9yPXQsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0LGUpe3ZhciBuLGk9dGhpcyxyPSJub29wIj09PShuPWU/ZS5uZ1pvbmU6dm9pZCAwKT9uZXcgbmU6KCJ6b25lLmpzIj09PW4/dm9pZCAwOm4pfHxuZXcgS3Qoe2VuYWJsZUxvbmdTdGFja1RyYWNlOmRlKCl9KSxvPVt7cHJvdmlkZTpLdCx1c2VWYWx1ZTpyfV07cmV0dXJuIHIucnVuKGZ1bmN0aW9uKCl7dmFyIGU9RC5jcmVhdGUoe3Byb3ZpZGVyczpvLHBhcmVudDppLmluamVjdG9yLG5hbWU6dC5tb2R1bGVUeXBlLm5hbWV9KSxuPXQuY3JlYXRlKGUpLGE9bi5pbmplY3Rvci5nZXQoc3QsbnVsbCk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJObyBFcnJvckhhbmRsZXIuIElzIHBsYXRmb3JtIG1vZHVsZSAoQnJvd3Nlck1vZHVsZSkgaW5jbHVkZWQ/Iik7cmV0dXJuIG4ub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGdlKGkuX21vZHVsZXMsbil9KSxyLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHIub25FcnJvci5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7YS5oYW5kbGVFcnJvcih0KX19KX0pLGZ1bmN0aW9uKHQsZSxyKXt0cnl7dmFyIG89KChhPW4uaW5qZWN0b3IuZ2V0KHh0KSkucnVuSW5pdGlhbGl6ZXJzKCksYS5kb25lUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX21vZHVsZURvQm9vdHN0cmFwKG4pLG59KSk7cmV0dXJuIGd0KG8pP28uY2F0Y2goZnVuY3Rpb24obil7dGhyb3cgZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0LmhhbmRsZUVycm9yKG4pfSksbn0pOm99Y2F0Y2gobil7dGhyb3cgZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0LmhhbmRsZUVycm9yKG4pfSksbn12YXIgYX0oYSxyKX0pfSx0LnByb3RvdHlwZS5ib290c3RyYXBNb2R1bGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgaT10aGlzLmluamVjdG9yLmdldChBdCkscj15ZSh7fSxlKTtyZXR1cm4gaS5jcmVhdGVDb21waWxlcihbcl0pLmNvbXBpbGVNb2R1bGVBc3luYyh0KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBuLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkodCxyKX0pfSx0LnByb3RvdHlwZS5fbW9kdWxlRG9Cb290c3RyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmplY3Rvci5nZXQodmUpO2lmKHQuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApdC5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmJvb3RzdHJhcCh0KX0pO2Vsc2V7aWYoIXQuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtb2R1bGUgIit4KHQuaW5zdGFuY2UuY29uc3RydWN0b3IpKycgd2FzIGJvb3RzdHJhcHBlZCwgYnV0IGl0IGRvZXMgbm90IGRlY2xhcmUgIkBOZ01vZHVsZS5ib290c3RyYXAiIGNvbXBvbmVudHMgbm9yIGEgIm5nRG9Cb290c3RyYXAiIG1ldGhvZC4gUGxlYXNlIGRlZmluZSBvbmUgb2YgdGhlc2UuJyk7dC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGUpfXRoaXMuX21vZHVsZXMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIHBsYXRmb3JtIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkISIpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fZGVzdHJveWVkPSEwfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiB5ZSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UucmVkdWNlKHllLHQpOk9iamVjdChpLmEpKHt9LHQsZSl9dmFyIHZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsbyl7dmFyIHU9dGhpczt0aGlzLl96b25lPXQsdGhpcy5fY29uc29sZT1lLHRoaXMuX2luamVjdG9yPW4sdGhpcy5fZXhjZXB0aW9uSGFuZGxlcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX2luaXRTdGF0dXM9byx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fZW5mb3JjZU5vTmV3Q2hhbmdlcz0hMSx0aGlzLl9zdGFibGU9ITAsdGhpcy5jb21wb25lbnRUeXBlcz1bXSx0aGlzLmNvbXBvbmVudHM9W10sdGhpcy5fZW5mb3JjZU5vTmV3Q2hhbmdlcz1kZSgpLHRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXt1Ll96b25lLnJ1bihmdW5jdGlvbigpe3UudGljaygpfSl9fSk7dmFyIGM9bmV3IGEuYShmdW5jdGlvbih0KXt1Ll9zdGFibGU9dS5fem9uZS5pc1N0YWJsZSYmIXUuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF1Ll96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzLHUuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Lm5leHQodS5fc3RhYmxlKSx0LmNvbXBsZXRlKCl9KX0pLGY9bmV3IGEuYShmdW5jdGlvbih0KXt2YXIgZTt1Ll96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZT11Ll96b25lLm9uU3RhYmxlLnN1YnNjcmliZShmdW5jdGlvbigpe0t0LmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxfKGZ1bmN0aW9uKCl7dS5fc3RhYmxlfHx1Ll96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfHx1Ll96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzfHwodS5fc3RhYmxlPSEwLHQubmV4dCghMCkpfSl9KX0pO3ZhciBuPXUuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtLdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdS5fc3RhYmxlJiYodS5fc3RhYmxlPSExLHUuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Lm5leHQoITEpfSkpfSk7cmV0dXJuIGZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZSgpLG4udW5zdWJzY3JpYmUoKX19KTt0aGlzLmlzU3RhYmxlPU9iamVjdChzLmEpKGMsZi5waXBlKE9iamVjdChsLmEpKCkpKX1yZXR1cm4gdC5wcm90b3R5cGUuYm9vdHN0cmFwPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzO2lmKCF0aGlzLl9pbml0U3RhdHVzLmRvbmUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYm9vdHN0cmFwIGFzIHRoZXJlIGFyZSBzdGlsbCBhc3luY2hyb25vdXMgaW5pdGlhbGl6ZXJzIHJ1bm5pbmcuIEJvb3RzdHJhcCBjb21wb25lbnRzIGluIHRoZSBgbmdEb0Jvb3RzdHJhcGAgbWV0aG9kIG9mIHRoZSByb290IG1vZHVsZS4iKTtuPXQgaW5zdGFuY2VvZiBEdD90OnRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2gobi5jb21wb25lbnRUeXBlKTt2YXIgcj1uIGluc3RhbmNlb2YgVXQ/bnVsbDp0aGlzLl9pbmplY3Rvci5nZXQoSHQpLG89bi5jcmVhdGUoRC5OVUxMLFtdLGV8fG4uc2VsZWN0b3Iscik7by5vbkRlc3Ryb3koZnVuY3Rpb24oKXtpLl91bmxvYWRDb21wb25lbnQobyl9KTt2YXIgYT1vLmluamVjdG9yLmdldChpZSxudWxsKTtyZXR1cm4gYSYmby5pbmplY3Rvci5nZXQocmUpLnJlZ2lzdGVyQXBwbGljYXRpb24oby5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LGEpLHRoaXMuX2xvYWRDb21wb25lbnQobyksZGUoKSYmdGhpcy5fY29uc29sZS5sb2coIkFuZ3VsYXIgaXMgcnVubmluZyBpbiB0aGUgZGV2ZWxvcG1lbnQgbW9kZS4gQ2FsbCBlbmFibGVQcm9kTW9kZSgpIHRvIGVuYWJsZSB0aGUgcHJvZHVjdGlvbiBtb2RlLiIpLG99LHQucHJvdG90eXBlLnRpY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBFcnJvcigiQXBwbGljYXRpb25SZWYudGljayBpcyBjYWxsZWQgcmVjdXJzaXZlbHkiKTt2YXIgbj10Ll90aWNrU2NvcGUoKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITAsdGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzJiZ0aGlzLl92aWV3cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNoZWNrTm9DaGFuZ2VzKCl9KX1jYXRjaCh0KXt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2V4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXJyb3IodCl9KX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExLFd0KG4pfX0sdC5wcm90b3R5cGUuYXR0YWNoVmlldz1mdW5jdGlvbih0KXt2YXIgZT10O3RoaXMuX3ZpZXdzLnB1c2goZSksZS5hdHRhY2hUb0FwcFJlZih0aGlzKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXt2YXIgZT10O2dlKHRoaXMuX3ZpZXdzLGUpLGUuZGV0YWNoRnJvbUFwcFJlZigpfSx0LnByb3RvdHlwZS5fbG9hZENvbXBvbmVudD1mdW5jdGlvbih0KXt0aGlzLmF0dGFjaFZpZXcodC5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2godCksdGhpcy5faW5qZWN0b3IuZ2V0KGp0LFtdKS5jb25jYXQodGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9LHQucHJvdG90eXBlLl91bmxvYWRDb21wb25lbnQ9ZnVuY3Rpb24odCl7dGhpcy5kZXRhY2hWaWV3KHQuaG9zdFZpZXcpLGdlKHRoaXMuY29tcG9uZW50cyx0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmlld0NvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll90aWNrU2NvcGU9WnQoIkFwcGxpY2F0aW9uUmVmI3RpY2soKSIpLHR9KCk7ZnVuY3Rpb24gZ2UodCxlKXt2YXIgbj10LmluZGV4T2YoZSk7bj4tMSYmdC5zcGxpY2UobiwxKX12YXIgX2U9ZnVuY3Rpb24oKXt9LHdlPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLHRbdC5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLHR9KHt9KSx4ZT1mdW5jdGlvbigpe30sQ2U9ZnVuY3Rpb24odCl7dGhpcy5uYXRpdmVFbGVtZW50PXR9LFNlPWZ1bmN0aW9uKCl7fSxPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5jaGFuZ2VzPW5ldyBZdCx0aGlzLmxlbmd0aD0wfXJldHVybiB0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfSx0LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKHQpfSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9LHQucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaCh0KX0sdC5wcm90b3R5cGUuc29tZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX0sdC5wcm90b3R5cGVbZygpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzW2coKV0oKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9QXJyYXkuaXNBcnJheShuKT90KG4pOm47cmV0dXJuIGUuY29uY2F0KGkpfSxbXSl9KHQpLHRoaXMuZGlydHk9ITEsdGhpcy5sZW5ndGg9dGhpcy5fcmVzdWx0cy5sZW5ndGgsdGhpcy5sYXN0PXRoaXMuX3Jlc3VsdHNbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD10aGlzLl9yZXN1bHRzWzBdfSx0LnByb3RvdHlwZS5ub3RpZnlPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZXMuZW1pdCh0aGlzKX0sdC5wcm90b3R5cGUuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5jaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LHR9KCksRWU9ZnVuY3Rpb24oKXt9LGtlPXtmYWN0b3J5UGF0aFByZWZpeDoiIixmYWN0b3J5UGF0aFN1ZmZpeDoiLm5nZmFjdG9yeSJ9LGplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NvbXBpbGVyPXQsdGhpcy5fY29uZmlnPWV8fGtlfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb21waWxlciBpbnN0YW5jZW9mIFJ0P3RoaXMubG9hZEZhY3RvcnkodCk6dGhpcy5sb2FkQW5kQ29tcGlsZSh0KX0sdC5wcm90b3R5cGUubG9hZEFuZENvbXBpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPU9iamVjdChpLmMpKHQuc3BsaXQoIiMiKSwyKSxvPXJbMF0sYT1yWzFdO3JldHVybiB2b2lkIDA9PT1hJiYoYT0iZGVmYXVsdCIpLG4oImNybmQiKShvKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W2FdfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gSWUodCxvLGEpfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5fY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpfSl9LHQucHJvdG90eXBlLmxvYWRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChpLmMpKHQuc3BsaXQoIiMiKSwyKSxyPWVbMF0sbz1lWzFdLGE9Ik5nRmFjdG9yeSI7cmV0dXJuIHZvaWQgMD09PW8mJihvPSJkZWZhdWx0IixhPSIiKSxuKCJjcm5kIikodGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoUHJlZml4K3IrdGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoU3VmZml4KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W28rYV19KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBJZSh0LHIsbyl9KX0sdH0oKTtmdW5jdGlvbiBJZSh0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCAnIituKyInIGluICciK2UrIiciKTtyZXR1cm4gdH12YXIgVGU9ZnVuY3Rpb24oKXt9LFJlPWZ1bmN0aW9uKCl7fSxBZT1mdW5jdGlvbigpe30sUGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oQWUpKSxEZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2RlYnVnQ29udGV4dD1uLHRoaXMubmF0aXZlTm9kZT10LGUmJmUgaW5zdGFuY2VvZiBNZT9lLmFkZENoaWxkKHRoaXMpOnRoaXMucGFyZW50PW51bGwsdGhpcy5saXN0ZW5lcnM9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LmluamVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50SW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LmNvbXBvbmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5yZWZlcmVuY2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvdmlkZXJUb2tlbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LnByb3ZpZGVyVG9rZW5zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksTWU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiByLnByb3BlcnRpZXM9e30sci5hdHRyaWJ1dGVzPXt9LHIuY2xhc3Nlcz17fSxyLnN0eWxlcz17fSxyLmNoaWxkTm9kZXM9W10sci5uYXRpdmVFbGVtZW50PWUscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbih0KXt0JiYodGhpcy5jaGlsZE5vZGVzLnB1c2godCksdC5wYXJlbnQ9dGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShlLDEpKX0sZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGRyZW5BZnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcyxvPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09byYmKChuPXRoaXMuY2hpbGROb2Rlcykuc3BsaWNlLmFwcGx5KG4sT2JqZWN0KGkuZCkoW28rMSwwXSxlKSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucGFyZW50JiZ0LnBhcmVudC5yZW1vdmVDaGlsZCh0KSx0LnBhcmVudD1yfSkpfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMT09PW4/dGhpcy5hZGRDaGlsZChlKTooZS5wYXJlbnQmJmUucGFyZW50LnJlbW92ZUNoaWxkKGUpLGUucGFyZW50PXRoaXMsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShuLDAsZSkpfSxlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeUFsbCh0KVswXXx8bnVsbH0sZS5wcm90b3R5cGUucXVlcnlBbGw9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIE5lKHRoaXMsdCxlKSxlfSxlLnByb3RvdHlwZS5xdWVyeUFsbE5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBMZSh0aGlzLHQsZSksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnRyaWdnZXJFdmVudEhhbmRsZXI9ZnVuY3Rpb24odCxlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ubmFtZT09dCYmbi5jYWxsYmFjayhlKX0pfSxlfShEZSk7ZnVuY3Rpb24gTmUodCxlLG4pe3QuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW5zdGFuY2VvZiBNZSYmKGUodCkmJm4ucHVzaCh0KSxOZSh0LGUsbikpfSl9ZnVuY3Rpb24gTGUodCxlLG4pe3QgaW5zdGFuY2VvZiBNZSYmdC5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7ZSh0KSYmbi5wdXNoKHQpLHQgaW5zdGFuY2VvZiBNZSYmTGUodCxlLG4pfSl9dmFyIEZlPW5ldyBNYXA7ZnVuY3Rpb24gVmUodCl7cmV0dXJuIEZlLmdldCh0KXx8bnVsbH1mdW5jdGlvbiB6ZSh0KXtGZS5zZXQodC5uYXRpdmVOb2RlLHQpfWZ1bmN0aW9uIEJlKHQsZSl7dmFyIG49cWUodCksaT1xZShlKTtyZXR1cm4gbiYmaT9mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPXRbZygpXSgpLHI9ZVtnKCldKCk7Oyl7dmFyIG89aS5uZXh0KCksYT1yLm5leHQoKTtpZihvLmRvbmUmJmEuZG9uZSlyZXR1cm4hMDtpZihvLmRvbmV8fGEuZG9uZSlyZXR1cm4hMTtpZighbihvLnZhbHVlLGEudmFsdWUpKXJldHVybiExfX0odCxlLEJlKTohKG58fCF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHxpfHwhZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl8fHcodCxlKX12YXIgVWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMud3JhcHBlZD10fXJldHVybiB0LndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUpfSx0LnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gdC5pc1dyYXBwZWQoZSk/ZS53cmFwcGVkOmV9LHQuaXNXcmFwcGVkPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdH0sdH0oKSxIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucHJldmlvdXNWYWx1ZT10LHRoaXMuY3VycmVudFZhbHVlPWUsdGhpcy5maXJzdENoYW5nZT1ufXJldHVybiB0LnByb3RvdHlwZS5pc0ZpcnN0Q2hhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9LHR9KCk7ZnVuY3Rpb24gcWUodCl7cmV0dXJuISFRZSh0KSYmKEFycmF5LmlzQXJyYXkodCl8fCEodCBpbnN0YW5jZW9mIE1hcCkmJmcoKWluIHQpfWZ1bmN0aW9uIFFlKHQpe3JldHVybiBudWxsIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0fHwib2JqZWN0Ij09dHlwZW9mIHQpfXZhciBHZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBxZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgV2UodCl9LHR9KCksWmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0sV2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxaZX1yZXR1cm4gdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoT3BlcmF0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9pdEhlYWQsbj10aGlzLl9yZW1vdmFsc0hlYWQsaT0wLHI9bnVsbDtlfHxuOyl7dmFyIG89IW58fGUmJmUuY3VycmVudEluZGV4PCRlKG4saSxyKT9lOm4sYT0kZShvLGkscikscz1vLmN1cnJlbnRJbmRleDtpZihvPT09bilpLS0sbj1uLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1vLnByZXZpb3VzSW5kZXgpaSsrO2Vsc2V7cnx8KHI9W10pO3ZhciBsPWEtaSx1PXMtaTtpZihsIT11KXtmb3IodmFyIGM9MDtjPGw7YysrKXt2YXIgZj1jPHIubGVuZ3RoP3JbY106cltjXT0wLGQ9ZitjO3U8PWQmJmQ8bCYmKHJbY109ZisxKX1yW28ucHJldmlvdXNJbmRleF09dS1sfX1hIT09cyYmdChvLGEscyl9fSx0LnByb3RvdHlwZS5mb3JFYWNoUHJldmlvdXNJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoTW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaElkZW50aXR5Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0SWRlbnRpdHlDaGFuZ2UpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZihudWxsPT10JiYodD1bXSksIXFlKHQpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyIreCh0KSsiJy4gT25seSBhcnJheXMgYW5kIGl0ZXJhYmxlcyBhcmUgYWxsb3dlZCIpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG4saSxyLG89dGhpcy5faXRIZWFkLGE9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKHZhciBzPTA7czx0aGlzLmxlbmd0aDtzKyspcj10aGlzLl90cmFja0J5Rm4ocyxpPXRbc10pLG51bGwhPT1vJiZ3KG8udHJhY2tCeUlkLHIpPyhhJiYobz10aGlzLl92ZXJpZnlSZWluc2VydGlvbihvLGkscixzKSksdyhvLml0ZW0saSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKG8saSkpOihvPXRoaXMuX21pc21hdGNoKG8saSxyLHMpLGE9ITApLG89by5fbmV4dH1lbHNlIG49MCxmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dKTtlbHNlIGZvcih2YXIgaT10W2coKV0oKSxyPXZvaWQgMDshKHI9aS5uZXh0KCkpLmRvbmU7KWUoci52YWx1ZSl9KHQsZnVuY3Rpb24odCl7cj1lLl90cmFja0J5Rm4obix0KSxudWxsIT09byYmdyhvLnRyYWNrQnlJZCxyKT8oYSYmKG89ZS5fdmVyaWZ5UmVpbnNlcnRpb24obyx0LHIsbikpLHcoby5pdGVtLHQpfHxlLl9hZGRJZGVudGl0eUNoYW5nZShvLHQpKToobz1lLl9taXNtYXRjaChvLHQscixuKSxhPSEwKSxvPW8uX25leHQsbisrfSksdGhpcy5sZW5ndGg9bjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUobyksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2lmKHRoaXMuaXNEaXJ0eSl7dmFyIHQ9dm9pZCAwLGU9dm9pZCAwO2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9ZSl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXgsZT10Ll9uZXh0TW92ZWQ7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19LHQucHJvdG90eXBlLl9taXNtYXRjaD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcjtyZXR1cm4gbnVsbD09PXQ/cj10aGlzLl9pdFRhaWw6KHI9dC5fcHJldix0aGlzLl9yZW1vdmUodCkpLG51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KG4saSkpPyh3KHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9tb3ZlQWZ0ZXIodCxyLGkpKTpudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKSk/KHcodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX3JlaW5zZXJ0QWZ0ZXIodCxyLGkpKTp0PXRoaXMuX2FkZEFmdGVyKG5ldyBZZShlLG4pLHIsaSksdH0sdC5wcm90b3R5cGUuX3ZlcmlmeVJlaW5zZXJ0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCk7cmV0dXJuIG51bGwhPT1yP3Q9dGhpcy5fcmVpbnNlcnRBZnRlcihyLHQuX3ByZXYsaSk6dC5jdXJyZW50SW5kZXghPWkmJih0LmN1cnJlbnRJbmRleD1pLHRoaXMuX2FkZFRvTW92ZXModCxpKSksdH0sdC5wcm90b3R5cGUuX3RydW5jYXRlPWZ1bmN0aW9uKHQpe2Zvcig7bnVsbCE9PXQ7KXt2YXIgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9LHQucHJvdG90eXBlLl9yZWluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMucmVtb3ZlKHQpO3ZhciBpPXQuX3ByZXZSZW1vdmVkLHI9dC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1pP3RoaXMuX3JlbW92YWxzSGVhZD1yOmkuX25leHRSZW1vdmVkPXIsbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNUYWlsPWk6ci5fcHJldlJlbW92ZWQ9aSx0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zlcyh0LG4pLHR9LHQucHJvdG90eXBlLl9tb3ZlQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fYWRkQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH0sdC5wcm90b3R5cGUuX2luc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1pLHQuX3ByZXY9ZSxudWxsPT09aT90aGlzLl9pdFRhaWw9dDppLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgWGUpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW4sdH0sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfSx0LnByb3RvdHlwZS5fdW5saW5rPWZ1bmN0aW9uKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgZT10Ll9wcmV2LG49dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPW46ZS5fbmV4dD1uLG51bGw9PT1uP3RoaXMuX2l0VGFpbD1lOm4uX3ByZXY9ZSx0fSx0LnByb3RvdHlwZS5fYWRkVG9Nb3Zlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZpb3VzSW5kZXg9PT1lP3Q6KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD10OnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPXQsdCl9LHQucHJvdG90eXBlLl9hZGRUb1JlbW92YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBYZSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH0sdC5wcm90b3R5cGUuX2FkZElkZW50aXR5Q2hhbmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaXRlbT1lLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10OnRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT10LHR9LHR9KCksWWU9ZnVuY3Rpb24odCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH0sS2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG47Zm9yKG49dGhpcy5faGVhZDtudWxsIT09bjtuPW4uX25leHREdXApaWYoKG51bGw9PT1lfHxlPD1uLmN1cnJlbnRJbmRleCkmJncobi50cmFja0J5SWQsdCkpcmV0dXJuIG47cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcmV2RHVwLG49dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1uOmUuX25leHREdXA9bixudWxsPT09bj90aGlzLl90YWlsPWU6bi5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfSx0fSgpLFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWFwPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYWNrQnlJZCxuPXRoaXMubWFwLmdldChlKTtufHwobj1uZXcgS2UsdGhpcy5tYXAuc2V0KGUsbikpLG4uYWRkKHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG4/bi5nZXQodCxlKTpudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChlKS5yZW1vdmUodCkmJnRoaXMubWFwLmRlbGV0ZShlKSx0fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRW1wdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubWFwLnNpemV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcC5jbGVhcigpfSx0fSgpO2Z1bmN0aW9uICRlKHQsZSxuKXt2YXIgaT10LnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWkpcmV0dXJuIGk7dmFyIHI9MDtyZXR1cm4gbiYmaTxuLmxlbmd0aCYmKHI9bltpXSksaStlK3J9dmFyIEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXB8fFFlKHQpfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRufSx0fSgpLHRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3JlY29yZHM9bmV3IE1hcCx0aGlzLl9tYXBIZWFkPW51bGwsdGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9wcmV2aW91c01hcEhlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaENoYW5nZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dENoYW5nZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKCEodCBpbnN0YW5jZW9mIE1hcHx8UWUodCkpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyIreCh0KSsiJy4gT25seSBtYXBzIGFuZCBvYmplY3RzIGFyZSBhbGxvd2VkIil9ZWxzZSB0PW5ldyBNYXA7cmV0dXJuIHRoaXMuY2hlY2sodCk/dGhpczpudWxsfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fcmVzZXQoKTt2YXIgbj10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LGZ1bmN0aW9uKHQsaSl7aWYobiYmbi5rZXk9PT1pKWUuX21heWJlQWRkVG9DaGFuZ2VzKG4sdCksZS5fYXBwZW5kQWZ0ZXI9bixuPW4uX25leHQ7ZWxzZXt2YXIgcj1lLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShpLHQpO249ZS5faW5zZXJ0QmVmb3JlT3JBcHBlbmQobixyKX19KSxuKXtuLl9wcmV2JiYobi5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9bjtmb3IodmFyIGk9bjtudWxsIT09aTtpPWkuX25leHRSZW1vdmVkKWk9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShpLmtleSksaS5fbmV4dFJlbW92ZWQ9aS5fbmV4dCxpLnByZXZpb3VzVmFsdWU9aS5jdXJyZW50VmFsdWUsaS5jdXJyZW50VmFsdWU9bnVsbCxpLl9wcmV2PW51bGwsaS5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX0sdC5wcm90b3R5cGUuX2luc2VydEJlZm9yZU9yQXBwZW5kPWZ1bmN0aW9uKHQsZSl7aWYodCl7dmFyIG49dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9bix0Ll9wcmV2PWUsbiYmKG4uX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH0sdC5wcm90b3R5cGUuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fcmVjb3Jkcy5oYXModCkpe3ZhciBuPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKG4sZSk7dmFyIGk9bi5fcHJldixyPW4uX25leHQ7cmV0dXJuIGkmJihpLl9uZXh0PXIpLHImJihyLl9wcmV2PWkpLG4uX25leHQ9bnVsbCxuLl9wcmV2PW51bGwsbn12YXIgbz1uZXcgZW4odCk7cmV0dXJuIHRoaXMuX3JlY29yZHMuc2V0KHQsbyksby5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0FkZGl0aW9ucyhvKSxvfSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19LHQucHJvdG90eXBlLl9tYXliZUFkZFRvQ2hhbmdlcz1mdW5jdGlvbih0LGUpe3coZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfSx0LnByb3RvdHlwZS5fYWRkVG9BZGRpdGlvbnM9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9LHQucHJvdG90eXBlLl9hZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2NoYW5nZXNIZWFkP3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPXQ6KHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD10LHRoaXMuX2NoYW5nZXNUYWlsPXQpfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbih0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUodFtuXSxuKX0pfSx0fSgpLGVuPWZ1bmN0aW9uKHQpe3RoaXMua2V5PXQsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH0sbm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYobnVsbCE9bil7dmFyIGk9bi5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KGkpfXJldHVybiBuZXcgdChlKX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJue3Byb3ZpZGU6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGV4dGVuZCBJdGVyYWJsZURpZmZlcnMgd2l0aG91dCBhIHBhcmVudCBpbmplY3RvciIpO3JldHVybiB0LmNyZWF0ZShlLG4pfSxkZXBzOltbdCxuZXcgaixuZXcgRV1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuZmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3VwcG9ydHModCl9KTtpZihudWxsIT1uKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyIrdCsiJyBvZiB0eXBlICciKygoZT10KS5uYW1lfHx0eXBlb2YgZSkrIiciKX0sdC5uZ0luamVjdGFibGVEZWY9dSh7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChbbmV3IEdlXSl9fSksdH0oKSxybj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5mYWN0b3JpZXM9dH1yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24oZSxuKXtpZihuKXt2YXIgaT1uLmZhY3Rvcmllcy5zbGljZSgpO2U9ZS5jb25jYXQoaSl9cmV0dXJuIG5ldyB0KGUpfSx0LmV4dGVuZD1mdW5jdGlvbihlKXtyZXR1cm57cHJvdmlkZTp0LHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZXh0ZW5kIEtleVZhbHVlRGlmZmVycyB3aXRob3V0IGEgcGFyZW50IGluamVjdG9yIik7cmV0dXJuIHQuY3JlYXRlKGUsbil9LGRlcHM6W1t0LG5ldyBqLG5ldyBFXV19fSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3VwcG9ydHModCl9KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyIrdCsiJyIpfSx0fSgpLG9uPVtuZXcgSmVdLGFuPW5ldyBubihbbmV3IEdlXSksc249bmV3IHJuKG9uKSxsbj1wZShudWxsLCJjb3JlIixbe3Byb3ZpZGU6a3QsdXNlVmFsdWU6InVua25vd24ifSx7cHJvdmlkZTpiZSxkZXBzOltEXX0se3Byb3ZpZGU6cmUsZGVwczpbXX0se3Byb3ZpZGU6SXQsZGVwczpbXX1dKSx1bj1uZXcgYygiTG9jYWxlSWQiKTtmdW5jdGlvbiBjbigpe3JldHVybiBhbn1mdW5jdGlvbiBmbigpe3JldHVybiBzbn1mdW5jdGlvbiBkbih0KXtyZXR1cm4gdHx8ImVuLVVTIn12YXIgaG49ZnVuY3Rpb24odCl7fSxwbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy5kZWZhdWx0RG9jPXQsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpLHRoaXMuaW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0RG9jdW1lbnQuYm9keSxudWxsPT10aGlzLmluZXJ0Qm9keUVsZW1lbnQpe3ZhciBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpLHRoaXMuaW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpLGUuYXBwZW5kQ2hpbGQodGhpcy5pbmVydEJvZHlFbGVtZW50KX10aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPSc8c3ZnPjxnIG9ubG9hZD0idGhpcy5wYXJlbnROb2RlLnJlbW92ZSgpIj48L2c+PC9zdmc+JywhdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3J8fHRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJzdmciKT8odGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48cD48c3R5bGU+PGltZyBzcmM9Ijwvc3R5bGU+PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpLy8iPicsdGhpcy5nZXRJbmVydEJvZHlFbGVtZW50PXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yJiZ0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIGltZyIpJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4hIXdpbmRvdy5ET01QYXJzZXJ9Y2F0Y2godCl7cmV0dXJuITF9fSgpP3RoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI6dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X0luZXJ0RG9jdW1lbnQpOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfWEhSfXJldHVybiB0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X1hIUj1mdW5jdGlvbih0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdCsiPC9ib2R5PiI7dHJ5e3Q9ZW5jb2RlVVJJKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfXZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtlLnJlc3BvbnNlVHlwZT0iZG9jdW1lbnQiLGUub3BlbigiR0VUIiwiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwiK3QsITEpLGUuc2VuZChudWxsKTt2YXIgbj1lLnJlc3BvbnNlLmJvZHk7cmV0dXJuIG4ucmVtb3ZlQ2hpbGQobi5maXJzdENoaWxkKSxufSx0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X0RPTVBhcnNlcj1mdW5jdGlvbih0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdCsiPC9ib2R5PiI7dHJ5e3ZhciBlPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQvaHRtbCIpLmJvZHk7cmV0dXJuIGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlfWNhdGNoKHQpe3JldHVybiBudWxsfX0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiJjb250ZW50ImluIGU/KGUuaW5uZXJIVE1MPXQsZSk6KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9dCx0aGlzLmRlZmF1bHREb2MuZG9jdW1lbnRNb2RlJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyh0aGlzLmluZXJ0Qm9keUVsZW1lbnQpLHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9LHQucHJvdG90eXBlLnN0cmlwQ3VzdG9tTnNBdHRycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5hdHRyaWJ1dGVzLG49ZS5sZW5ndGgtMTswPG47bi0tKXt2YXIgaT1lLml0ZW0obikubmFtZTsieG1sbnM6bnMxIiE9PWkmJjAhPT1pLmluZGV4T2YoIm5zMToiKXx8dC5yZW1vdmVBdHRyaWJ1dGUoaSl9Zm9yKHZhciByPXQuZmlyc3RDaGlsZDtyOylyLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKHIpLHI9ci5uZXh0U2libGluZ30sdH0oKSxtbj0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpLGJuPS9eZGF0YTooPzppbWFnZVwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1wvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFthLXowLTkrXC9dKz0qJC9pO2Z1bmN0aW9uIHluKHQpe3JldHVybih0PVN0cmluZyh0KSkubWF0Y2gobW4pfHx0Lm1hdGNoKGJuKT90OihkZSgpJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgdW5zYWZlIFVSTCB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKSwidW5zYWZlOiIrdCl9ZnVuY3Rpb24gdm4odCl7dmFyIGUsbixyPXt9O3RyeXtmb3IodmFyIG89T2JqZWN0KGkuZSkodC5zcGxpdCgiLCIpKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSlyW2EudmFsdWVdPSEwfWNhdGNoKHQpe2U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1yZXR1cm4gcn1mdW5jdGlvbiBnbigpe2Zvcih2YXIgdCxlLG49W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyXT1hcmd1bWVudHNbcl07dmFyIG89e307dHJ5e2Zvcih2YXIgYT1PYmplY3QoaS5lKShuKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIGw9cy52YWx1ZTtmb3IodmFyIHUgaW4gbClsLmhhc093blByb3BlcnR5KHUpJiYob1t1XT0hMCl9fWNhdGNoKGUpe3Q9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihlPWEucmV0dXJuKSYmZS5jYWxsKGEpfWZpbmFsbHl7aWYodCl0aHJvdyB0LmVycm9yfX1yZXR1cm4gb312YXIgX24sd249dm4oImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSx4bj12bigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLENuPXZuKCJycCxydCIpLFNuPWduKENuLHhuKSxPbj1nbih3bixnbih4bix2bigiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksZ24oQ24sdm4oImEsYWJicixhY3JvbnltLGF1ZGlvLGIsYmRpLGJkbyxiaWcsYnIsY2l0ZSxjb2RlLGRlbCxkZm4sZW0sZm9udCxpLGltZyxpbnMsa2JkLGxhYmVsLG1hcCxtYXJrLHBpY3R1cmUscSxydWJ5LHJwLHJ0LHMsc2FtcCxzbWFsbCxzb3VyY2Usc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0cmFjayx0dCx1LHZhcix2aWRlbyIpKSxTbiksRW49dm4oImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6aHJlZiIpLGtuPXZuKCJzcmNzZXQiKSxqbj1nbihFbixrbix2bigiYWJicixhY2Nlc3NrZXksYWxpZ24sYWx0LGF1dG9wbGF5LGF4aXMsYmdjb2xvcixib3JkZXIsY2VsbHBhZGRpbmcsY2VsbHNwYWNpbmcsY2xhc3MsY2xlYXIsY29sb3IsY29scyxjb2xzcGFuLGNvbXBhY3QsY29udHJvbHMsY29vcmRzLGRhdGV0aW1lLGRlZmF1bHQsZGlyLGRvd25sb2FkLGZhY2UsaGVhZGVycyxoZWlnaHQsaGlkZGVuLGhyZWZsYW5nLGhzcGFjZSxpc21hcCxpdGVtc2NvcGUsaXRlbXByb3Asa2luZCxsYWJlbCxsYW5nLGxhbmd1YWdlLGxvb3AsbWVkaWEsbXV0ZWQsbm9ocmVmLG5vd3JhcCxvcGVuLHByZWxvYWQscmVsLHJldixyb2xlLHJvd3Mscm93c3BhbixydWxlcyxzY29wZSxzY3JvbGxpbmcsc2hhcGUsc2l6ZSxzaXplcyxzcGFuLHNyY2xhbmcsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSksSW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119cmV0dXJuIHQucHJvdG90eXBlLnNhbml0aXplQ2hpbGRyZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZmlyc3RDaGlsZDtlOylpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/dGhpcy5zdGFydEVsZW1lbnQoZSk6ZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoZS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGUuZmlyc3RDaGlsZCllPWUuZmlyc3RDaGlsZDtlbHNlIGZvcig7ZTspe2Uubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGUpO3ZhciBuPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5uZXh0U2libGluZyk7aWYobil7ZT1uO2JyZWFrfWU9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLnBhcmVudE5vZGUpfXJldHVybiB0aGlzLmJ1Zi5qb2luKCIiKX0sdC5wcm90b3R5cGUuc3RhcnRFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihPbi5oYXNPd25Qcm9wZXJ0eShlKSl7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7Zm9yKHZhciBuLGk9dC5hdHRyaWJ1dGVzLHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aS5pdGVtKHIpLGE9by5uYW1lLHM9YS50b0xvd2VyQ2FzZSgpO2lmKGpuLmhhc093blByb3BlcnR5KHMpKXt2YXIgbD1vLnZhbHVlO0VuW3NdJiYobD15bihsKSksa25bc10mJihuPWwsbD0obj1TdHJpbmcobikpLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB5bih0LnRyaW0oKSl9KS5qb2luKCIsICIpKSx0aGlzLmJ1Zi5wdXNoKCIgIixhLCc9IicsQW4obCksJyInKX1lbHNlIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwfXRoaXMuYnVmLnB1c2goIj4iKX1lbHNlIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwfSx0LnByb3RvdHlwZS5lbmRFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtPbi5oYXNPd25Qcm9wZXJ0eShlKSYmIXduLmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9LHQucHJvdG90eXBlLmNoYXJzPWZ1bmN0aW9uKHQpe3RoaXMuYnVmLnB1c2goQW4odCkpfSx0LnByb3RvdHlwZS5jaGVja0Nsb2JiZXJlZEVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtpZihlJiYodC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSk9PT1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgY2xvYmJlcmVkOiAiK3Qub3V0ZXJIVE1MKTtyZXR1cm4gZX0sdH0oKSxUbj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csUm49LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIEFuKHQpe3JldHVybiB0LnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKFRuLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrKDEwMjQqKHQuY2hhckNvZGVBdCgwKS01NTI5NikrKHQuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoUm4sZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gUG4odCxlKXt2YXIgbj1udWxsO3RyeXtfbj1fbnx8bmV3IHBuKHQpO3ZhciBpPWU/U3RyaW5nKGUpOiIiO249X24uZ2V0SW5lcnRCb2R5RWxlbWVudChpKTt2YXIgcj01LG89aTtkb3tpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7ci0tLGk9byxvPW4uaW5uZXJIVE1MLG49X24uZ2V0SW5lcnRCb2R5RWxlbWVudChpKX13aGlsZShpIT09byk7dmFyIGE9bmV3IEluLHM9YS5zYW5pdGl6ZUNoaWxkcmVuKERuKG4pfHxuKTtyZXR1cm4gZGUoKSYmYS5zYW5pdGl6ZWRTb21ldGhpbmcmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyBIVE1MIHN0cmlwcGVkIHNvbWUgY29udGVudCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksc31maW5hbGx5e2lmKG4pZm9yKHZhciBsPURuKG4pfHxuO2wuZmlyc3RDaGlsZDspbC5yZW1vdmVDaGlsZChsLmZpcnN0Q2hpbGQpfX1mdW5jdGlvbiBEbih0KXtyZXR1cm4iY29udGVudCJpbiB0JiZmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09dC5ub2RlTmFtZX0odCk/dC5jb250ZW50Om51bGx9dmFyIE1uPW5ldyBSZWdFeHAoIl4oWy0sLlwiJyVfISMgYS16QS1aMC05XSt8KD86KD86bWF0cml4fHRyYW5zbGF0ZXxzY2FsZXxyb3RhdGV8c2tld3xwZXJzcGVjdGl2ZSkoPzpYfFl8M2QpP3woPzpyZ2J8aHNsKWE/fCg/OnJlcGVhdGluZy0pPyg/OmxpbmVhcnxyYWRpYWwpLWdyYWRpZW50fCg/OmNhbGN8YXR0cikpXFwoWy0wLTkuJSwgI2EtekEtWl0rXFwpKSQiLCJnIiksTm49L151cmxcKChbXildKylcKSQvO2Z1bmN0aW9uIExuKHQpe2lmKCEodD1TdHJpbmcodCkudHJpbSgpKSlyZXR1cm4iIjt2YXIgZT10Lm1hdGNoKE5uKTtyZXR1cm4gZSYmeW4oZVsxXSk9PT1lWzFdfHx0Lm1hdGNoKE1uKSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPSEwLG49ITAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgcj10LmNoYXJBdChpKTsiJyI9PT1yJiZuP2U9IWU6JyInPT09ciYmZSYmKG49IW4pfXJldHVybiBlJiZufSh0KT90OihkZSgpJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgdW5zYWZlIHN0eWxlIHZhbHVlICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKS4iKSwidW5zYWZlIil9dmFyIEZuPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuTk9ORT0wXT0iTk9ORSIsdFt0LkhUTUw9MV09IkhUTUwiLHRbdC5TVFlMRT0yXT0iU1RZTEUiLHRbdC5TQ1JJUFQ9M109IlNDUklQVCIsdFt0LlVSTD00XT0iVVJMIix0W3QuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLHR9KHt9KSxWbj1mdW5jdGlvbigpe307ZnVuY3Rpb24gem4odCxlLG4pe3ZhciBpPXQuc3RhdGUscj0xNzkyJmk7cmV0dXJuIHI9PT1lPyh0LnN0YXRlPS0xNzkzJml8bix0LmluaXRJbmRleD0tMSwhMCk6cj09PW59ZnVuY3Rpb24gQm4odCxlLG4pe3JldHVybigxNzkyJnQuc3RhdGUpPT09ZSYmdC5pbml0SW5kZXg8PW4mJih0LmluaXRJbmRleD1uKzEsITApfWZ1bmN0aW9uIFVuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gSG4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBxbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIFFuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gR24odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX12YXIgWm49e3NldEN1cnJlbnROb2RlOnZvaWQgMCxjcmVhdGVSb290Vmlldzp2b2lkIDAsY3JlYXRlRW1iZWRkZWRWaWV3OnZvaWQgMCxjcmVhdGVDb21wb25lbnRWaWV3OnZvaWQgMCxjcmVhdGVOZ01vZHVsZVJlZjp2b2lkIDAsb3ZlcnJpZGVQcm92aWRlcjp2b2lkIDAsb3ZlcnJpZGVDb21wb25lbnRWaWV3OnZvaWQgMCxjbGVhck92ZXJyaWRlczp2b2lkIDAsY2hlY2tBbmRVcGRhdGVWaWV3OnZvaWQgMCxjaGVja05vQ2hhbmdlc1ZpZXc6dm9pZCAwLGRlc3Ryb3lWaWV3OnZvaWQgMCxyZXNvbHZlRGVwOnZvaWQgMCxjcmVhdGVEZWJ1Z0NvbnRleHQ6dm9pZCAwLGhhbmRsZUV2ZW50OnZvaWQgMCx1cGRhdGVEaXJlY3RpdmVzOnZvaWQgMCx1cGRhdGVSZW5kZXJlcjp2b2lkIDAsZGlydHlQYXJlbnRRdWVyaWVzOnZvaWQgMH07ZnVuY3Rpb24gV24odCxlLG4saSl7dmFyIHI9IkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3I6IEV4cHJlc3Npb24gaGFzIGNoYW5nZWQgYWZ0ZXIgaXQgd2FzIGNoZWNrZWQuIFByZXZpb3VzIHZhbHVlOiAnIitlKyInLiBDdXJyZW50IHZhbHVlOiAnIituKyInLiI7cmV0dXJuIGkmJihyKz0iIEl0IHNlZW1zIGxpa2UgdGhlIHZpZXcgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBpdHMgcGFyZW50IGFuZCBpdHMgY2hpbGRyZW4gaGF2ZSBiZWVuIGRpcnR5IGNoZWNrZWQuIEhhcyBpdCBiZWVuIGNyZWF0ZWQgaW4gYSBjaGFuZ2UgZGV0ZWN0aW9uIGhvb2sgPyIpLGZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IEVycm9yKHQpO3JldHVybiBZbihuLGUpLG59KHIsdCl9ZnVuY3Rpb24gWW4odCxlKXt0W2V0XT1lLHRbaXRdPWUubG9nRXJyb3IuYmluZChlKX1mdW5jdGlvbiBLbih0KXtyZXR1cm4gbmV3IEVycm9yKCJWaWV3RGVzdHJveWVkRXJyb3I6IEF0dGVtcHQgdG8gdXNlIGEgZGVzdHJveWVkIHZpZXc6ICIrdCl9dmFyIFhuPWZ1bmN0aW9uKCl7fSwkbj1uZXcgTWFwO2Z1bmN0aW9uIEpuKHQpe3ZhciBlPSRuLmdldCh0KTtyZXR1cm4gZXx8KGU9eCh0KSsiXyIrJG4uc2l6ZSwkbi5zZXQodCxlKSksZX1mdW5jdGlvbiB0aSh0LGUsbixpKXtpZihVZS5pc1dyYXBwZWQoaSkpe2k9VWUudW53cmFwKGkpO3ZhciByPXQuZGVmLm5vZGVzW2VdLmJpbmRpbmdJbmRleCtuLG89VWUudW53cmFwKHQub2xkVmFsdWVzW3JdKTt0Lm9sZFZhbHVlc1tyXT1uZXcgVWUobyl9cmV0dXJuIGl9dmFyIGVpPSIkJHVuZGVmaW5lZCIsbmk9IiQkZW1wdHkiO2Z1bmN0aW9uIGlpKHQpe3JldHVybntpZDplaSxzdHlsZXM6dC5zdHlsZXMsZW5jYXBzdWxhdGlvbjp0LmVuY2Fwc3VsYXRpb24sZGF0YTp0LmRhdGF9fXZhciByaT0wO2Z1bmN0aW9uIG9pKHQsZSxuLGkpe3JldHVybiEoISgyJnQuc3RhdGUpJiZ3KHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dLGkpKX1mdW5jdGlvbiBhaSh0LGUsbixpKXtyZXR1cm4hIW9pKHQsZSxuLGkpJiYodC5vbGRWYWx1ZXNbZS5iaW5kaW5nSW5kZXgrbl09aSwhMCl9ZnVuY3Rpb24gc2kodCxlLG4saSl7dmFyIHI9dC5vbGRWYWx1ZXNbZS5iaW5kaW5nSW5kZXgrbl07aWYoMSZ0LnN0YXRlfHwhQmUocixpKSl7dmFyIG89ZS5iaW5kaW5nc1tuXS5uYW1lO3Rocm93IFduKFpuLmNyZWF0ZURlYnVnQ29udGV4dCh0LGUubm9kZUluZGV4KSxvKyI6ICIrcixvKyI6ICIraSwwIT0oMSZ0LnN0YXRlKSl9fWZ1bmN0aW9uIGxpKHQpe2Zvcih2YXIgZT10O2U7KTImZS5kZWYuZmxhZ3MmJihlLnN0YXRlfD04KSxlPWUudmlld0NvbnRhaW5lclBhcmVudHx8ZS5wYXJlbnR9ZnVuY3Rpb24gdWkodCxlKXtmb3IodmFyIG49dDtuJiZuIT09ZTspbi5zdGF0ZXw9NjQsbj1uLnZpZXdDb250YWluZXJQYXJlbnR8fG4ucGFyZW50fWZ1bmN0aW9uIGNpKHQsZSxuLGkpe3RyeXtyZXR1cm4gbGkoMzM1NTQ0MzImdC5kZWYubm9kZXNbZV0uZmxhZ3M/SG4odCxlKS5jb21wb25lbnRWaWV3OnQpLFpuLmhhbmRsZUV2ZW50KHQsZSxuLGkpfWNhdGNoKGUpe3Qucm9vdC5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZSl9fWZ1bmN0aW9uIGZpKHQpe3JldHVybiB0LnBhcmVudD9Ibih0LnBhcmVudCx0LnBhcmVudE5vZGVEZWYubm9kZUluZGV4KTpudWxsfWZ1bmN0aW9uIGRpKHQpe3JldHVybiB0LnBhcmVudD90LnBhcmVudE5vZGVEZWYucGFyZW50Om51bGx9ZnVuY3Rpb24gaGkodCxlKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gSG4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtjYXNlIDI6cmV0dXJuIFVuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHR9fWZ1bmN0aW9uIHBpKHQpe3JldHVybiEhdC5wYXJlbnQmJiEhKDMyNzY4JnQucGFyZW50Tm9kZURlZi5mbGFncyl9ZnVuY3Rpb24gbWkodCl7cmV0dXJuISghdC5wYXJlbnR8fDMyNzY4JnQucGFyZW50Tm9kZURlZi5mbGFncyl9ZnVuY3Rpb24gYmkodCl7cmV0dXJuIDE8PHQlMzJ9ZnVuY3Rpb24geWkodCl7dmFyIGU9e30sbj0wLHI9e307cmV0dXJuIHQmJnQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1PYmplY3QoaS5jKSh0LDIpLGE9b1swXSxzPW9bMV07Im51bWJlciI9PXR5cGVvZiBhPyhlW2FdPXMsbnw9YmkoYSkpOnJbYV09c30pLHttYXRjaGVkUXVlcmllczplLHJlZmVyZW5jZXM6cixtYXRjaGVkUXVlcnlJZHM6bn19ZnVuY3Rpb24gdmkodCxlKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIG4scixvO3JldHVybiBBcnJheS5pc0FycmF5KHQpPyhvPShuPU9iamVjdChpLmMpKHQsMikpWzBdLHI9blsxXSk6KG89MCxyPXQpLHImJigiZnVuY3Rpb24iPT10eXBlb2Ygcnx8Im9iamVjdCI9PXR5cGVvZiByKSYmZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsSSx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSx7ZmxhZ3M6byx0b2tlbjpyLHRva2VuS2V5OkpuKHIpfX0pfWZ1bmN0aW9uIGdpKHQsZSxuKXt2YXIgaT1uLnJlbmRlclBhcmVudDtyZXR1cm4gaT8wPT0oMSZpLmZsYWdzKXx8MD09KDMzNTU0NDMyJmkuZmxhZ3MpfHxpLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlJiZpLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlLmVuY2Fwc3VsYXRpb249PT0kLk5hdGl2ZT9Ibih0LG4ucmVuZGVyUGFyZW50Lm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDp2b2lkIDA6ZX12YXIgX2k9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gd2kodCl7dmFyIGU9X2kuZ2V0KHQpO3JldHVybiBlfHwoKGU9dChmdW5jdGlvbigpe3JldHVybiBYbn0pKS5mYWN0b3J5PXQsX2kuc2V0KHQsZSkpLGV9ZnVuY3Rpb24geGkodCxlLG4saSxyKXszPT09ZSYmKG49dC5yZW5kZXJlci5wYXJlbnROb2RlKGhpKHQsdC5kZWYubGFzdFJlbmRlclJvb3ROb2RlKSkpLENpKHQsZSwwLHQuZGVmLm5vZGVzLmxlbmd0aC0xLG4saSxyKX1mdW5jdGlvbiBDaSh0LGUsbixpLHIsbyxhKXtmb3IodmFyIHM9bjtzPD1pO3MrKyl7dmFyIGw9dC5kZWYubm9kZXNbc107MTEmbC5mbGFncyYmT2kodCxsLGUscixvLGEpLHMrPWwuY2hpbGRDb3VudH19ZnVuY3Rpb24gU2kodCxlLG4saSxyLG8pe2Zvcih2YXIgYT10O2EmJiFwaShhKTspYT1hLnBhcmVudDtmb3IodmFyIHM9YS5wYXJlbnQsbD1kaShhKSx1PWwubm9kZUluZGV4K2wuY2hpbGRDb3VudCxjPWwubm9kZUluZGV4KzE7Yzw9dTtjKyspe3ZhciBmPXMuZGVmLm5vZGVzW2NdO2YubmdDb250ZW50SW5kZXg9PT1lJiZPaShzLGYsbixpLHIsbyksYys9Zi5jaGlsZENvdW50fWlmKCFzLnBhcmVudCl7dmFyIGQ9dC5yb290LnByb2plY3RhYmxlTm9kZXNbZV07aWYoZClmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKUVpKHQsZFtjXSxuLGkscixvKX19ZnVuY3Rpb24gT2kodCxlLG4saSxyLG8pe2lmKDgmZS5mbGFncylTaSh0LGUubmdDb250ZW50LmluZGV4LG4saSxyLG8pO2Vsc2V7dmFyIGE9aGkodCxlKTtpZigzPT09biYmMzM1NTQ0MzImZS5mbGFncyYmNDgmZS5iaW5kaW5nRmxhZ3M/KDE2JmUuYmluZGluZ0ZsYWdzJiZFaSh0LGEsbixpLHIsbyksMzImZS5iaW5kaW5nRmxhZ3MmJkVpKEhuKHQsZS5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXcsYSxuLGkscixvKSk6RWkodCxhLG4saSxyLG8pLDE2Nzc3MjE2JmUuZmxhZ3MpZm9yKHZhciBzPUhuKHQsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbD0wO2w8cy5sZW5ndGg7bCsrKXhpKHNbbF0sbixpLHIsbyk7MSZlLmZsYWdzJiYhZS5lbGVtZW50Lm5hbWUmJkNpKHQsbixlLm5vZGVJbmRleCsxLGUubm9kZUluZGV4K2UuY2hpbGRDb3VudCxpLHIsbyl9fWZ1bmN0aW9uIEVpKHQsZSxuLGkscixvKXt2YXIgYT10LnJlbmRlcmVyO3N3aXRjaChuKXtjYXNlIDE6YS5hcHBlbmRDaGlsZChpLGUpO2JyZWFrO2Nhc2UgMjphLmluc2VydEJlZm9yZShpLGUscik7YnJlYWs7Y2FzZSAzOmEucmVtb3ZlQ2hpbGQoaSxlKTticmVhaztjYXNlIDA6by5wdXNoKGUpfX12YXIga2k9L146KFteOl0rKTooLispJC87ZnVuY3Rpb24gamkodCl7aWYoIjoiPT09dFswXSl7dmFyIGU9dC5tYXRjaChraSk7cmV0dXJuW2VbMV0sZVsyXV19cmV0dXJuWyIiLHRdfWZ1bmN0aW9uIElpKHQpe2Zvcih2YXIgZT0wLG49MDtuPHQubGVuZ3RoO24rKyllfD10W25dLmZsYWdzO3JldHVybiBlfWZ1bmN0aW9uIFRpKHQsZSxuLGkscixvLGEscyxsLHUsYyxmLGQsaCxwLG0sYix5LHYsZyl7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gZStSaShuKStpO2Nhc2UgMjpyZXR1cm4gZStSaShuKStpK1JpKHIpK287Y2FzZSAzOnJldHVybiBlK1JpKG4pK2krUmkocikrbytSaShhKStzO2Nhc2UgNDpyZXR1cm4gZStSaShuKStpK1JpKHIpK28rUmkoYSkrcytSaShsKSt1O2Nhc2UgNTpyZXR1cm4gZStSaShuKStpK1JpKHIpK28rUmkoYSkrcytSaShsKSt1K1JpKGMpK2Y7Y2FzZSA2OnJldHVybiBlK1JpKG4pK2krUmkocikrbytSaShhKStzK1JpKGwpK3UrUmkoYykrZitSaShkKStoO2Nhc2UgNzpyZXR1cm4gZStSaShuKStpK1JpKHIpK28rUmkoYSkrcytSaShsKSt1K1JpKGMpK2YrUmkoZCkraCtSaShwKSttO2Nhc2UgODpyZXR1cm4gZStSaShuKStpK1JpKHIpK28rUmkoYSkrcytSaShsKSt1K1JpKGMpK2YrUmkoZCkraCtSaShwKSttK1JpKGIpK3k7Y2FzZSA5OnJldHVybiBlK1JpKG4pK2krUmkocikrbytSaShhKStzK1JpKGwpK3UrUmkoYykrZitSaShkKStoK1JpKHApK20rUmkoYikreStSaSh2KStnO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEb2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiA5IGV4cHJlc3Npb25zIil9fWZ1bmN0aW9uIFJpKHQpe3JldHVybiBudWxsIT10P3QudG9TdHJpbmcoKToiIn1mdW5jdGlvbiBBaSh0LGUsbixpLHIsbyl7dHw9MTt2YXIgYT15aShlKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxmbGFnczp0LGNoZWNrSW5kZXg6LTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6YS5tYXRjaGVkUXVlcmllcyxtYXRjaGVkUXVlcnlJZHM6YS5tYXRjaGVkUXVlcnlJZHMscmVmZXJlbmNlczphLnJlZmVyZW5jZXMsbmdDb250ZW50SW5kZXg6bixjaGlsZENvdW50OmksYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50OntuczpudWxsLG5hbWU6bnVsbCxhdHRyczpudWxsLHRlbXBsYXRlOm8/d2kobyk6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6bnVsbCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpyfHxYbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gUGkodCxlLG4scixvLGEscyxsLHUsYyxmLGQpe3ZhciBoO3ZvaWQgMD09PXMmJihzPVtdKSxjfHwoYz1Ybik7dmFyIHA9eWkobiksbT1wLm1hdGNoZWRRdWVyaWVzLGI9cC5yZWZlcmVuY2VzLHk9cC5tYXRjaGVkUXVlcnlJZHMsdj1udWxsLGc9bnVsbDthJiYodj0oaD1PYmplY3QoaS5jKShqaShhKSwyKSlbMF0sZz1oWzFdKSxsPWx8fFtdO2Zvcih2YXIgXz1uZXcgQXJyYXkobC5sZW5ndGgpLHc9MDt3PGwubGVuZ3RoO3crKyl7dmFyIHg9T2JqZWN0KGkuYykobFt3XSwzKSxDPXhbMF0sUz14WzFdLE89eFsyXSxFPU9iamVjdChpLmMpKGppKFMpLDIpLGs9RVswXSxqPUVbMV0sST12b2lkIDAsVD12b2lkIDA7c3dpdGNoKDE1JkMpe2Nhc2UgNDpUPU87YnJlYWs7Y2FzZSAxOmNhc2UgODpJPU99X1t3XT17ZmxhZ3M6QyxuczprLG5hbWU6aixub25NaW5pZmllZE5hbWU6aixzZWN1cml0eUNvbnRleHQ6SSxzdWZmaXg6VH19dT11fHxbXTt2YXIgUj1uZXcgQXJyYXkodS5sZW5ndGgpO2Zvcih3PTA7dzx1Lmxlbmd0aDt3Kyspe3ZhciBBPU9iamVjdChpLmMpKHVbd10sMik7Ult3XT17dHlwZTowLHRhcmdldDpBWzBdLGV2ZW50TmFtZTpBWzFdLHByb3BOYW1lOm51bGx9fXZhciBQPShzPXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGkuYykodCwyKSxuPWVbMF0scj1lWzFdLG89T2JqZWN0KGkuYykoamkobiksMik7cmV0dXJuW29bMF0sb1sxXSxyXX0pO3JldHVybiBkPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT1laSl7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT0kLk5vbmV8fHQuc3R5bGVzLmxlbmd0aHx8T2JqZWN0LmtleXModC5kYXRhKS5sZW5ndGg7dC5pZD1lPyJjIityaSsrOm5pfXJldHVybiB0JiZ0LmlkPT09bmkmJih0PW51bGwpLHR8fG51bGx9KGQpLGYmJihlfD0zMzU1NDQzMikse25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmV8PTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6bSxtYXRjaGVkUXVlcnlJZHM6eSxyZWZlcmVuY2VzOmIsbmdDb250ZW50SW5kZXg6cixjaGlsZENvdW50Om8sYmluZGluZ3M6XyxiaW5kaW5nRmxhZ3M6SWkoXyksb3V0cHV0czpSLGVsZW1lbnQ6e25zOnYsbmFtZTpnLGF0dHJzOlAsdGVtcGxhdGU6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6Znx8bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6ZCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpjfHxYbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gRGkodCxlLG4pe3ZhciByLG89bi5lbGVtZW50LGE9dC5yb290LnNlbGVjdG9yT3JOb2RlLHM9dC5yZW5kZXJlcjtpZih0LnBhcmVudHx8IWEpe3I9by5uYW1lP3MuY3JlYXRlRWxlbWVudChvLm5hbWUsby5ucyk6cy5jcmVhdGVDb21tZW50KCIiKTt2YXIgbD1naSh0LGUsbik7bCYmcy5hcHBlbmRDaGlsZChsLHIpfWVsc2Ugcj1zLnNlbGVjdFJvb3RFbGVtZW50KGEpO2lmKG8uYXR0cnMpZm9yKHZhciB1PTA7dTxvLmF0dHJzLmxlbmd0aDt1Kyspe3ZhciBjPU9iamVjdChpLmMpKG8uYXR0cnNbdV0sMyk7cy5zZXRBdHRyaWJ1dGUocixjWzFdLGNbMl0sY1swXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gTWkodCxlLG4saSl7Zm9yKHZhciByPTA7cjxuLm91dHB1dHMubGVuZ3RoO3IrKyl7dmFyIG89bi5vdXRwdXRzW3JdLGE9TmkodCxuLm5vZGVJbmRleCwoZj1vLmV2ZW50TmFtZSwoYz1vLnRhcmdldCk/YysiOiIrZjpmKSkscz1vLnRhcmdldCxsPXQ7ImNvbXBvbmVudCI9PT1vLnRhcmdldCYmKHM9bnVsbCxsPWUpO3ZhciB1PWwucmVuZGVyZXIubGlzdGVuKHN8fGksby5ldmVudE5hbWUsYSk7dC5kaXNwb3NhYmxlc1tuLm91dHB1dEluZGV4K3JdPXV9dmFyIGMsZn1mdW5jdGlvbiBOaSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBjaSh0LGUsbixpKX19ZnVuY3Rpb24gTGkodCxlLG4saSl7aWYoIWFpKHQsZSxuLGkpKXJldHVybiExO3ZhciByPWUuYmluZGluZ3Nbbl0sbz1Ibih0LGUubm9kZUluZGV4KSxhPW8ucmVuZGVyRWxlbWVudCxzPXIubmFtZTtzd2l0Y2goMTUmci5mbGFncyl7Y2FzZSAxOiFmdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGE9ZS5zZWN1cml0eUNvbnRleHQscz1hP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoYSxvKTpvO3M9bnVsbCE9cz9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgbD10LnJlbmRlcmVyO251bGwhPW8/bC5zZXRBdHRyaWJ1dGUobixyLHMsaSk6bC5yZW1vdmVBdHRyaWJ1dGUobixyLGkpfSh0LHIsYSxyLm5zLHMsaSk7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUsbixpKXt2YXIgcj10LnJlbmRlcmVyO2k/ci5hZGRDbGFzcyhlLG4pOnIucmVtb3ZlQ2xhc3MoZSxuKX0odCxhLHMsaSk7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoRm4uU1RZTEUscik7aWYobnVsbCE9byl7bz1vLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9YSYmKG8rPWEpfWVsc2Ugbz1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9bz9zLnNldFN0eWxlKG4saSxvKTpzLnJlbW92ZVN0eWxlKG4saSl9KHQscixhLHMsaSk7YnJlYWs7Y2FzZSA4OiFmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPWUuc2VjdXJpdHlDb250ZXh0LGE9bz90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKG8scik6cjt0LnJlbmRlcmVyLnNldFByb3BlcnR5KG4saSxhKX0oMzM1NTQ0MzImZS5mbGFncyYmMzImci5mbGFncz9vLmNvbXBvbmVudFZpZXc6dCxyLGEscyxpKX1yZXR1cm4hMH12YXIgRmk9bmV3IE9iamVjdCxWaT1KbihEKSx6aT1KbihBKSxCaT1KbihIdCk7ZnVuY3Rpb24gVWkodCxlLG4saSl7cmV0dXJuIG49UyhuKSx7aW5kZXg6LTEsZGVwczp2aShpLHgoZSkpLGZsYWdzOnQsdG9rZW46ZSx2YWx1ZTpufX1mdW5jdGlvbiBIaSh0KXtmb3IodmFyIGU9e30sbj1bXSxpPSExLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTtvLnRva2VuPT09bHQmJiEwPT09by52YWx1ZSYmKGk9ITApLDEwNzM3NDE4MjQmby5mbGFncyYmbi5wdXNoKG8udG9rZW4pLG8uaW5kZXg9cixlW0puKG8udG9rZW4pXT1vfXJldHVybntmYWN0b3J5Om51bGwscHJvdmlkZXJzQnlLZXk6ZSxwcm92aWRlcnM6dCxtb2R1bGVzOm4saXNSb290Oml9fWZ1bmN0aW9uIHFpKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1ELlRIUk9XX0lGX05PVF9GT1VORCk7dmFyIGkscixvPVkodCk7dHJ5e2lmKDgmZS5mbGFncylyZXR1cm4gZS50b2tlbjtpZigyJmUuZmxhZ3MmJihuPW51bGwpLDEmZS5mbGFncylyZXR1cm4gdC5fcGFyZW50LmdldChlLnRva2VuLG4pO3ZhciBhPWUudG9rZW5LZXk7c3dpdGNoKGEpe2Nhc2UgVmk6Y2FzZSB6aTpjYXNlIEJpOnJldHVybiB0fXZhciBzPXQuX2RlZi5wcm92aWRlcnNCeUtleVthXTtpZihzKXt2YXIgbD10Ll9wcm92aWRlcnNbcy5pbmRleF07cmV0dXJuIHZvaWQgMD09PWwmJihsPXQuX3Byb3ZpZGVyc1tzLmluZGV4XT1RaSh0LHMpKSxsPT09Rmk/dm9pZCAwOmx9aWYoZS50b2tlbi5uZ0luamVjdGFibGVEZWYmJihpPXQsbnVsbCE9KHI9ZS50b2tlbi5uZ0luamVjdGFibGVEZWYpLnByb3ZpZGVkSW4mJihmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9kZWYubW9kdWxlcy5pbmRleE9mKHIucHJvdmlkZWRJbik+LTF9KGkpfHwicm9vdCI9PT1yLnByb3ZpZGVkSW4mJmkuX2RlZi5pc1Jvb3QpKSl7dmFyIHU9dC5fcHJvdmlkZXJzLmxlbmd0aDtyZXR1cm4gdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldPXtmbGFnczo1MTIwLHZhbHVlOmUudG9rZW4ubmdJbmplY3RhYmxlRGVmLmZhY3RvcnksZGVwczpbXSxpbmRleDp1LHRva2VuOmUudG9rZW59LHQuX3Byb3ZpZGVyc1t1XT1GaSx0Ll9wcm92aWRlcnNbdV09UWkodCx0Ll9kZWYucHJvdmlkZXJzQnlLZXlbZS50b2tlbktleV0pfXJldHVybiA0JmUuZmxhZ3M/bjp0Ll9wYXJlbnQuZ2V0KGUudG9rZW4sbil9ZmluYWxseXtZKG8pfX1mdW5jdGlvbiBRaSh0LGUpe3ZhciBuO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSA1MTI6bj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5sZW5ndGg7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZShxaSh0LG5bMF0pKTtjYXNlIDI6cmV0dXJuIG5ldyBlKHFpKHQsblswXSkscWkodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBuZXcgZShxaSh0LG5bMF0pLHFpKHQsblsxXSkscWkodCxuWzJdKSk7ZGVmYXVsdDpmb3IodmFyIG89bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKW9bYV09cWkodCxuW2FdKTtyZXR1cm4gbmV3KGUuYmluZC5hcHBseShlLE9iamVjdChpLmQpKFt2b2lkIDBdLG8pKSl9fSh0LGUudmFsdWUsZS5kZXBzKTticmVhaztjYXNlIDEwMjQ6bj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5sZW5ndGg7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gZSgpO2Nhc2UgMTpyZXR1cm4gZShxaSh0LG5bMF0pKTtjYXNlIDI6cmV0dXJuIGUocWkodCxuWzBdKSxxaSh0LG5bMV0pKTtjYXNlIDM6cmV0dXJuIGUocWkodCxuWzBdKSxxaSh0LG5bMV0pLHFpKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBvPUFycmF5KHIpLGE9MDthPHI7YSsrKW9bYV09cWkodCxuW2FdKTtyZXR1cm4gZS5hcHBseSh2b2lkIDAsT2JqZWN0KGkuZCkobykpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAyMDQ4Om49cWkodCxlLmRlcHNbMF0pO2JyZWFrO2Nhc2UgMjU2Om49ZS52YWx1ZX1yZXR1cm4gbj09PUZpfHxudWxsPT1ufHwib2JqZWN0IiE9dHlwZW9mIG58fDEzMTA3MiZlLmZsYWdzfHwiZnVuY3Rpb24iIT10eXBlb2Ygbi5uZ09uRGVzdHJveXx8KGUuZmxhZ3N8PTEzMTA3Miksdm9pZCAwPT09bj9GaTpufWZ1bmN0aW9uIEdpKHQsZSl7dmFyIG49dC52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzO2lmKChudWxsPT1lfHxlPj1uLmxlbmd0aCkmJihlPW4ubGVuZ3RoLTEpLGU8MClyZXR1cm4gbnVsbDt2YXIgaT1uW2VdO3JldHVybiBpLnZpZXdDb250YWluZXJQYXJlbnQ9bnVsbCxLaShuLGUpLFpuLmRpcnR5UGFyZW50UXVlcmllcyhpKSxXaShpKSxpfWZ1bmN0aW9uIFppKHQsZSxuKXt2YXIgaT1lP2hpKGUsZS5kZWYubGFzdFJlbmRlclJvb3ROb2RlKTp0LnJlbmRlckVsZW1lbnQ7eGkobiwyLG4ucmVuZGVyZXIucGFyZW50Tm9kZShpKSxuLnJlbmRlcmVyLm5leHRTaWJsaW5nKGkpLHZvaWQgMCl9ZnVuY3Rpb24gV2kodCl7eGkodCwzLG51bGwsbnVsbCx2b2lkIDApfWZ1bmN0aW9uIFlpKHQsZSxuKXtlPj10Lmxlbmd0aD90LnB1c2gobik6dC5zcGxpY2UoZSwwLG4pfWZ1bmN0aW9uIEtpKHQsZSl7ZT49dC5sZW5ndGgtMT90LnBvcCgpOnQuc3BsaWNlKGUsMSl9dmFyIFhpPW5ldyBPYmplY3Q7ZnVuY3Rpb24gJGkodCxlLG4saSxyLG8pe3JldHVybiBuZXcgSmkodCxlLG4saSxyLG8pfXZhciBKaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyxhKXt2YXIgcz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHMuc2VsZWN0b3I9ZSxzLmNvbXBvbmVudFR5cGU9bixzLl9pbnB1dHM9cixzLl9vdXRwdXRzPW8scy5uZ0NvbnRlbnRTZWxlY3RvcnM9YSxzLnZpZXdEZWZGYWN0b3J5PWksc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlucHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5faW5wdXRzO2Zvcih2YXIgbiBpbiBlKXQucHVzaCh7cHJvcE5hbWU6bix0ZW1wbGF0ZU5hbWU6ZVtuXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib3V0cHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9vdXRwdXRzKXQucHVzaCh7cHJvcE5hbWU6ZSx0ZW1wbGF0ZU5hbWU6dGhpcy5fb3V0cHV0c1tlXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixpKXtpZighaSl0aHJvdyBuZXcgRXJyb3IoIm5nTW9kdWxlIHNob3VsZCBiZSBwcm92aWRlZCIpO3ZhciByPXdpKHRoaXMudmlld0RlZkZhY3RvcnkpLG89ci5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLm5vZGVJbmRleCxhPVpuLmNyZWF0ZVJvb3RWaWV3KHQsZXx8W10sbixyLGksWGkpLHM9cW4oYSxvKS5pbnN0YW5jZTtyZXR1cm4gbiYmYS5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoSG4oYSwwKS5yZW5kZXJFbGVtZW50LCJuZy12ZXJzaW9uIix0dC5mdWxsKSxuZXcgdHIoYSxuZXcgcnIoYSkscyl9LGV9KER0KSx0cj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3ZpZXc9ZSxyLl92aWV3UmVmPW4sci5fY29tcG9uZW50PWksci5fZWxEZWY9ci5fdmlldy5kZWYubm9kZXNbMF0sci5ob3N0Vmlldz1uLHIuY2hhbmdlRGV0ZWN0b3JSZWY9bixyLmluc3RhbmNlPWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDZShIbih0aGlzLl92aWV3LHRoaXMuX2VsRGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgbHIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb21wb25lbnRUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudC5jb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld1JlZi5kZXN0cm95KCl9LGUucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3UmVmLm9uRGVzdHJveSh0KX0sZX0oUHQpO2Z1bmN0aW9uIGVyKHQsZSxuKXtyZXR1cm4gbmV3IG5yKHQsZSxuKX12YXIgbnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3PXQsdGhpcy5fZWxEZWY9ZSx0aGlzLl9kYXRhPW4sdGhpcy5fZW1iZWRkZWRWaWV3cz1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDZSh0aGlzLl9kYXRhLnJlbmRlckVsZW1lbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxyKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50SW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdmlldyxlPXRoaXMuX2VsRGVmLnBhcmVudDshZSYmdDspZT1kaSh0KSx0PXQucGFyZW50O3JldHVybiB0P25ldyBscih0LGUpOm5ldyBscih0aGlzLl92aWV3LG51bGwpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2VtYmVkZGVkVmlld3MubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBlPUdpKHRoaXMuX2RhdGEsdCk7Wm4uZGVzdHJveVZpZXcoZSl9fSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZW1iZWRkZWRWaWV3c1t0XTtpZihlKXt2YXIgbj1uZXcgcnIoZSk7cmV0dXJuIG4uYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKHRoaXMpLG59cmV0dXJuIG51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VtYmVkZGVkVmlld3MubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNyZWF0ZUVtYmVkZGVkVmlldz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30pO3JldHVybiB0aGlzLmluc2VydChpLG4pLGl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbXBvbmVudD1mdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPW58fHRoaXMucGFyZW50SW5qZWN0b3I7cnx8dCBpbnN0YW5jZW9mIFV0fHwocj1vLmdldChIdCkpO3ZhciBhPXQuY3JlYXRlKG8saSx2b2lkIDAscik7cmV0dXJuIHRoaXMuaW5zZXJ0KGEuaG9zdFZpZXcsZSksYX0sdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW5zZXJ0IGEgZGVzdHJveWVkIFZpZXcgaW4gYSBWaWV3Q29udGFpbmVyISIpO3ZhciBuLGkscixvLGE9dDtyZXR1cm4gcj1hLl92aWV3LG89KG49dGhpcy5fZGF0YSkudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxudWxsIT09KGk9ZSkmJnZvaWQgMCE9PWl8fChpPW8ubGVuZ3RoKSxyLnZpZXdDb250YWluZXJQYXJlbnQ9dGhpcy5fdmlldyxZaShvLGksciksZnVuY3Rpb24odCxlKXt2YXIgbj1maShlKTtpZihuJiZuIT09dCYmISgxNiZlLnN0YXRlKSl7ZS5zdGF0ZXw9MTY7dmFyIGk9bi50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aXx8KGk9bi50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M9W10pLGkucHVzaChlKSxmdW5jdGlvbih0LG4pe2lmKCEoNCZuLmZsYWdzKSl7ZS5wYXJlbnQuZGVmLm5vZGVGbGFnc3w9NCxuLmZsYWdzfD00O2Zvcih2YXIgaT1uLnBhcmVudDtpOylpLmNoaWxkRmxhZ3N8PTQsaT1pLnBhcmVudH19KDAsZS5wYXJlbnROb2RlRGVmKX19KG4sciksWm4uZGlydHlQYXJlbnRRdWVyaWVzKHIpLFppKG4saT4wP29baS0xXTpudWxsLHIpLGEuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKHRoaXMpLHR9LHQucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24odCxlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtb3ZlIGEgZGVzdHJveWVkIFZpZXcgaW4gYSBWaWV3Q29udGFpbmVyISIpO3ZhciBuLGkscixvLGEscz10aGlzLl9lbWJlZGRlZFZpZXdzLmluZGV4T2YodC5fdmlldyk7cmV0dXJuIHI9ZSxhPShvPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MpW2k9c10sS2kobyxpKSxudWxsPT1yJiYocj1vLmxlbmd0aCksWWkobyxyLGEpLFpuLmRpcnR5UGFyZW50UXVlcmllcyhhKSxXaShhKSxaaShuLHI+MD9vW3ItMV06bnVsbCxhKSx0fSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmluZGV4T2YodC5fdmlldyl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT1HaSh0aGlzLl9kYXRhLHQpO2UmJlpuLmRlc3Ryb3lWaWV3KGUpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9R2kodGhpcy5fZGF0YSx0KTtyZXR1cm4gZT9uZXcgcnIoZSk6bnVsbH0sdH0oKTtmdW5jdGlvbiBpcih0KXtyZXR1cm4gbmV3IHJyKHQpfXZhciBycj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fdmlldz10LHRoaXMuX3ZpZXdDb250YWluZXJSZWY9bnVsbCx0aGlzLl9hcHBSZWY9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Tm9kZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geGkodGhpcy5fdmlldywwLHZvaWQgMCx2b2lkIDAsdD1bXSksdDt2YXIgdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlldy5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPSgxMjgmdGhpcy5fdmlldy5zdGF0ZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubWFya0ZvckNoZWNrPWZ1bmN0aW9uKCl7bGkodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGUmPS01fSx0LnByb3RvdHlwZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdmlldy5yb290LnJlbmRlcmVyRmFjdG9yeTt0LmJlZ2luJiZ0LmJlZ2luKCk7dHJ5e1puLmNoZWNrQW5kVXBkYXRlVmlldyh0aGlzLl92aWV3KX1maW5hbGx5e3QuZW5kJiZ0LmVuZCgpfX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXtabi5jaGVja05vQ2hhbmdlc1ZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLnJlYXR0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5zdGF0ZXw9NH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX3ZpZXcuZGlzcG9zYWJsZXN8fCh0aGlzLl92aWV3LmRpc3Bvc2FibGVzPVtdKSx0aGlzLl92aWV3LmRpc3Bvc2FibGVzLnB1c2godCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY/dGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk6dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fdmlld0NvbnRhaW5lclJlZi5kZXRhY2godGhpcy5fdmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHRoaXMpKSxabi5kZXN0cm95Vmlldyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoRnJvbUFwcFJlZj1mdW5jdGlvbigpe3RoaXMuX2FwcFJlZj1udWxsLFdpKHRoaXMuX3ZpZXcpLFpuLmRpcnR5UGFyZW50UXVlcmllcyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuYXR0YWNoVG9BcHBSZWY9ZnVuY3Rpb24odCl7aWYodGhpcy5fdmlld0NvbnRhaW5lclJlZil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgVmlld0NvbnRhaW5lciEiKTt0aGlzLl9hcHBSZWY9dH0sdC5wcm90b3R5cGUuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBBcHBsaWNhdGlvblJlZiEiKTt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXR9LHR9KCk7ZnVuY3Rpb24gb3IodCxlKXtyZXR1cm4gbmV3IGFyKHQsZSl9dmFyIGFyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3BhcmVudFZpZXc9ZSxpLl9kZWY9bixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZUVtYmVkZGVkVmlldz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHJyKFpuLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9wYXJlbnRWaWV3LHRoaXMuX2RlZix0aGlzLl9kZWYuZWxlbWVudC50ZW1wbGF0ZSx0KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWxlbWVudFJlZiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgQ2UoSG4odGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShUZSk7ZnVuY3Rpb24gc3IodCxlKXtyZXR1cm4gbmV3IGxyKHQsZSl9dmFyIGxyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMuZWxEZWY9ZX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPUQuVEhST1dfSUZfTk9UX0ZPVU5EKSxabi5yZXNvbHZlRGVwKHRoaXMudmlldyx0aGlzLmVsRGVmLCEhdGhpcy5lbERlZiYmMCE9KDMzNTU0NDMyJnRoaXMuZWxEZWYuZmxhZ3MpLHtmbGFnczowLHRva2VuOnQsdG9rZW5LZXk6Sm4odCl9LGUpfSx0fSgpO2Z1bmN0aW9uIHVyKHQsZSl7dmFyIG49dC5kZWYubm9kZXNbZV07aWYoMSZuLmZsYWdzKXt2YXIgaT1Ibih0LG4ubm9kZUluZGV4KTtyZXR1cm4gbi5lbGVtZW50LnRlbXBsYXRlP2kudGVtcGxhdGU6aS5yZW5kZXJFbGVtZW50fWlmKDImbi5mbGFncylyZXR1cm4gVW4odCxuLm5vZGVJbmRleCkucmVuZGVyVGV4dDtpZigyMDI0MCZuLmZsYWdzKXJldHVybiBxbih0LG4ubm9kZUluZGV4KS5pbnN0YW5jZTt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgc3RhdGU6IHJlYWQgbm9kZVZhbHVlIGZvciBub2RlIGluZGV4ICIrZSl9ZnVuY3Rpb24gY3IodCl7cmV0dXJuIG5ldyBmcih0LnJlbmRlcmVyKX12YXIgZnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QoaS5jKShqaShlKSwyKSxyPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuWzFdLG5bMF0pO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQscikscn0sdC5wcm90b3R5cGUuY3JlYXRlVmlld1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlQW5jaG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCgiIik7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGUpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsbiksbn0sdC5wcm90b3R5cGUucHJvamVjdE5vZGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGVbbl0pfSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3QWZ0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpLGk9dGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KSxyPTA7cjxlLmxlbmd0aDtyKyspdGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUobixlW3JdLGkpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdLGk9dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKG4pO3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQoaSxuKX19LHQucHJvdG90eXBlLmRlc3Ryb3lWaWV3PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZShlW25dKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5saXN0ZW5HbG9iYWw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPU9iamVjdChpLmMpKGppKGUpLDIpLG89clswXSxhPXJbMV07bnVsbCE9bj90aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGEsbixvKTp0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGEsbyl9LHQucHJvdG90eXBlLnNldEJpbmRpbmdEZWJ1Z0luZm89ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuc2V0RWxlbWVudENsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKTp0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldEVsZW1lbnRTdHlsZT1mdW5jdGlvbih0LGUsbil7bnVsbCE9bj90aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuKTp0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmludm9rZUVsZW1lbnRNZXRob2Q9ZnVuY3Rpb24odCxlLG4pe3RbZV0uYXBwbHkodCxuKX0sdC5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVuZGVyZXIuYW5pbWF0ZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkISIpfSx0fSgpO2Z1bmN0aW9uIGRyKHQsZSxuLGkpe3JldHVybiBuZXcgaHIodCxlLG4saSl9dmFyIGhyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLl9tb2R1bGVUeXBlPXQsdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1uLHRoaXMuX2RlZj1pLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuaW5qZWN0b3I9dGhpcyxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZGVmLG49dC5fcHJvdmlkZXJzPW5ldyBBcnJheShlLnByb3ZpZGVycy5sZW5ndGgpLGk9MDtpPGUucHJvdmlkZXJzLmxlbmd0aDtpKyspe3ZhciByPWUucHJvdmlkZXJzW2ldOzQwOTYmci5mbGFnc3x8dm9pZCAwPT09bltpXSYmKG5baV09UWkodCxyKSl9fSh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT1ELlRIUk9XX0lGX05PVF9GT1VORCksdm9pZCAwPT09biYmKG49MCk7dmFyIGk9MDtyZXR1cm4gNCZuP2l8PTE6MiZuJiYoaXw9NCkscWkodGhpcyx7dG9rZW46dCx0b2tlbktleTpKbih0KSxmbGFnczppfSxlKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCh0aGlzLl9tb2R1bGVUeXBlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCh6dCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBuZyBtb2R1bGUgIit4KHRoaXMuaW5zdGFuY2UuY29uc3RydWN0b3IpKyIgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuIik7dGhpcy5fZGVzdHJveWVkPSEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuX2RlZixpPW5ldyBTZXQscj0wO3I8bi5wcm92aWRlcnMubGVuZ3RoO3IrKylpZigxMzEwNzImbi5wcm92aWRlcnNbcl0uZmxhZ3Mpe3ZhciBvPXQuX3Byb3ZpZGVyc1tyXTtpZihvJiZvIT09Rmkpe3ZhciBhPW8ubmdPbkRlc3Ryb3k7ImZ1bmN0aW9uIiE9dHlwZW9mIGF8fGkuaGFzKG8pfHwoYS5hcHBseShvKSxpLmFkZChvKSl9fX0odGhpcyksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaCh0KX0sdH0oKSxwcj1KbihmdW5jdGlvbigpe30pLG1yPUpuKHhlKSxicj1KbihDZSkseXI9Sm4oUmUpLHZyPUpuKFRlKSxncj1KbihBZSksX3I9Sm4oRCksd3I9Sm4oQSk7ZnVuY3Rpb24geHIodCxlLG4scixvLGEscyxsKXt2YXIgdT1bXTtpZihzKWZvcih2YXIgYyBpbiBzKXt2YXIgZj1PYmplY3QoaS5jKShzW2NdLDIpO3VbZlswXV09e2ZsYWdzOjgsbmFtZTpjLG5vbk1pbmlmaWVkTmFtZTpmWzFdLG5zOm51bGwsc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om51bGx9fXZhciBkPVtdO2lmKGwpZm9yKHZhciBoIGluIGwpZC5wdXNoKHt0eXBlOjEscHJvcE5hbWU6aCx0YXJnZXQ6bnVsbCxldmVudE5hbWU6bFtoXX0pO3JldHVybiBPcih0LGV8PTE2Mzg0LG4scixvLG8sYSx1LGQpfWZ1bmN0aW9uIENyKHQsZSxuKXtyZXR1cm4gT3IoLTEsdHw9MTYsbnVsbCwwLGUsZSxuKX1mdW5jdGlvbiBTcih0LGUsbixpLHIpe3JldHVybiBPcigtMSx0LGUsMCxuLGkscil9ZnVuY3Rpb24gT3IodCxlLG4saSxyLG8sYSxzLGwpe3ZhciB1PXlpKG4pLGM9dS5tYXRjaGVkUXVlcmllcyxmPXUucmVmZXJlbmNlcyxkPXUubWF0Y2hlZFF1ZXJ5SWRzO2x8fChsPVtdKSxzfHwocz1bXSksbz1TKG8pO3ZhciBoPXZpKGEseChyKSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmUsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6YyxtYXRjaGVkUXVlcnlJZHM6ZCxyZWZlcmVuY2VzOmYsbmdDb250ZW50SW5kZXg6LTEsY2hpbGRDb3VudDppLGJpbmRpbmdzOnMsYmluZGluZ0ZsYWdzOklpKHMpLG91dHB1dHM6bCxlbGVtZW50Om51bGwscHJvdmlkZXI6e3Rva2VuOnIsdmFsdWU6byxkZXBzOmh9LHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBFcih0LGUpe3JldHVybiBUcih0LGUpfWZ1bmN0aW9uIGtyKHQsZSl7Zm9yKHZhciBuPXQ7bi5wYXJlbnQmJiFwaShuKTspbj1uLnBhcmVudDtyZXR1cm4gUnIobi5wYXJlbnQsZGkobiksITAsZS5wcm92aWRlci52YWx1ZSxlLnByb3ZpZGVyLmRlcHMpfWZ1bmN0aW9uIGpyKHQsZSl7dmFyIG49UnIodCxlLnBhcmVudCwoMzI3NjgmZS5mbGFncyk+MCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyk7aWYoZS5vdXRwdXRzLmxlbmd0aClmb3IodmFyIGk9MDtpPGUub3V0cHV0cy5sZW5ndGg7aSsrKXt2YXIgcj1lLm91dHB1dHNbaV0sbz1uW3IucHJvcE5hbWVdLnN1YnNjcmliZShJcih0LGUucGFyZW50Lm5vZGVJbmRleCxyLmV2ZW50TmFtZSkpO3QuZGlzcG9zYWJsZXNbZS5vdXRwdXRJbmRleCtpXT1vLnVuc3Vic2NyaWJlLmJpbmQobyl9cmV0dXJuIG59ZnVuY3Rpb24gSXIodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gY2kodCxlLG4saSl9fWZ1bmN0aW9uIFRyKHQsZSl7dmFyIG49KDgxOTImZS5mbGFncyk+MCxyPWUucHJvdmlkZXI7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDUxMjpyZXR1cm4gUnIodCxlLnBhcmVudCxuLHIudmFsdWUsci5kZXBzKTtjYXNlIDEwMjQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGE9by5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gcigpO2Nhc2UgMTpyZXR1cm4gcihQcih0LGUsbixvWzBdKSk7Y2FzZSAyOnJldHVybiByKFByKHQsZSxuLG9bMF0pLFByKHQsZSxuLG9bMV0pKTtjYXNlIDM6cmV0dXJuIHIoUHIodCxlLG4sb1swXSksUHIodCxlLG4sb1sxXSksUHIodCxlLG4sb1syXSkpO2RlZmF1bHQ6Zm9yKHZhciBzPUFycmF5KGEpLGw9MDtsPGE7bCsrKXNbbF09UHIodCxlLG4sb1tsXSk7cmV0dXJuIHIuYXBwbHkodm9pZCAwLE9iamVjdChpLmQpKHMpKX19KHQsZS5wYXJlbnQsbixyLnZhbHVlLHIuZGVwcyk7Y2FzZSAyMDQ4OnJldHVybiBQcih0LGUucGFyZW50LG4sci5kZXBzWzBdKTtjYXNlIDI1NjpyZXR1cm4gci52YWx1ZX19ZnVuY3Rpb24gUnIodCxlLG4scixvKXt2YXIgYT1vLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBuZXcgcjtjYXNlIDE6cmV0dXJuIG5ldyByKFByKHQsZSxuLG9bMF0pKTtjYXNlIDI6cmV0dXJuIG5ldyByKFByKHQsZSxuLG9bMF0pLFByKHQsZSxuLG9bMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyByKFByKHQsZSxuLG9bMF0pLFByKHQsZSxuLG9bMV0pLFByKHQsZSxuLG9bMl0pKTtkZWZhdWx0OmZvcih2YXIgcz1uZXcgQXJyYXkoYSksbD0wO2w8YTtsKyspc1tsXT1Qcih0LGUsbixvW2xdKTtyZXR1cm4gbmV3KHIuYmluZC5hcHBseShyLE9iamVjdChpLmQpKFt2b2lkIDBdLHMpKSl9fXZhciBBcj17fTtmdW5jdGlvbiBQcih0LGUsbixpLHIpe2lmKHZvaWQgMD09PXImJihyPUQuVEhST1dfSUZfTk9UX0ZPVU5EKSw4JmkuZmxhZ3MpcmV0dXJuIGkudG9rZW47dmFyIG89dDsyJmkuZmxhZ3MmJihyPW51bGwpO3ZhciBhPWkudG9rZW5LZXk7YT09PWdyJiYobj0hKCFlfHwhZS5lbGVtZW50LmNvbXBvbmVudFZpZXcpKSxlJiYxJmkuZmxhZ3MmJihuPSExLGU9ZS5wYXJlbnQpO2Zvcih2YXIgcz10O3M7KXtpZihlKXN3aXRjaChhKXtjYXNlIHByOnJldHVybiBjcihEcihzLGUsbikpO2Nhc2UgbXI6cmV0dXJuIERyKHMsZSxuKS5yZW5kZXJlcjtjYXNlIGJyOnJldHVybiBuZXcgQ2UoSG4ocyxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Y2FzZSB5cjpyZXR1cm4gSG4ocyxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIHZyOmlmKGUuZWxlbWVudC50ZW1wbGF0ZSlyZXR1cm4gSG4ocyxlLm5vZGVJbmRleCkudGVtcGxhdGU7YnJlYWs7Y2FzZSBncjpyZXR1cm4gaXIoRHIocyxlLG4pKTtjYXNlIF9yOmNhc2Ugd3I6cmV0dXJuIHNyKHMsZSk7ZGVmYXVsdDp2YXIgbD0obj9lLmVsZW1lbnQuYWxsUHJvdmlkZXJzOmUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpW2FdO2lmKGwpe3ZhciB1PXFuKHMsbC5ub2RlSW5kZXgpO3JldHVybiB1fHwodT17aW5zdGFuY2U6VHIocyxsKX0scy5ub2Rlc1tsLm5vZGVJbmRleF09dSksdS5pbnN0YW5jZX19bj1waShzKSxlPWRpKHMpLHM9cy5wYXJlbnQsNCZpLmZsYWdzJiYocz1udWxsKX12YXIgYz1vLnJvb3QuaW5qZWN0b3IuZ2V0KGkudG9rZW4sQXIpO3JldHVybiBjIT09QXJ8fHI9PT1Bcj9jOm8ucm9vdC5uZ01vZHVsZS5pbmplY3Rvci5nZXQoaS50b2tlbixyKX1mdW5jdGlvbiBEcih0LGUsbil7dmFyIGk7aWYobilpPUhuKHQsZS5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7ZWxzZSBmb3IoaT10O2kucGFyZW50JiYhcGkoaSk7KWk9aS5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24gTXIodCxlLG4saSxyLG8pe2lmKDMyNzY4Jm4uZmxhZ3Mpe3ZhciBhPUhuKHQsbi5wYXJlbnQubm9kZUluZGV4KS5jb21wb25lbnRWaWV3OzImYS5kZWYuZmxhZ3MmJihhLnN0YXRlfD04KX1pZihlLmluc3RhbmNlW24uYmluZGluZ3NbaV0ubmFtZV09ciw1MjQyODgmbi5mbGFncyl7bz1vfHx7fTt2YXIgcz1VZS51bndyYXAodC5vbGRWYWx1ZXNbbi5iaW5kaW5nSW5kZXgraV0pO29bbi5iaW5kaW5nc1tpXS5ub25NaW5pZmllZE5hbWVdPW5ldyBIZShzLHIsMCE9KDImdC5zdGF0ZSkpfXJldHVybiB0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtpXT1yLG99ZnVuY3Rpb24gTnIodCxlKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSlmb3IodmFyIG49dC5kZWYubm9kZXMsaT0wLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXSxhPW8ucGFyZW50O2ZvcighYSYmby5mbGFncyZlJiZGcih0LHIsby5mbGFncyZlLGkrKyksMD09KG8uY2hpbGRGbGFncyZlKSYmKHIrPW8uY2hpbGRDb3VudCk7YSYmMSZhLmZsYWdzJiZyPT09YS5ub2RlSW5kZXgrYS5jaGlsZENvdW50OylhLmRpcmVjdENoaWxkRmxhZ3MmZSYmKGk9THIodCxhLGUsaSkpLGE9YS5wYXJlbnR9fWZ1bmN0aW9uIExyKHQsZSxuLGkpe2Zvcih2YXIgcj1lLm5vZGVJbmRleCsxO3I8PWUubm9kZUluZGV4K2UuY2hpbGRDb3VudDtyKyspe3ZhciBvPXQuZGVmLm5vZGVzW3JdO28uZmxhZ3MmbiYmRnIodCxyLG8uZmxhZ3MmbixpKyspLHIrPW8uY2hpbGRDb3VudH1yZXR1cm4gaX1mdW5jdGlvbiBGcih0LGUsbixpKXt2YXIgcj1xbih0LGUpO2lmKHIpe3ZhciBvPXIuaW5zdGFuY2U7byYmKFpuLnNldEN1cnJlbnROb2RlKHQsZSksMTA0ODU3NiZuJiZCbih0LDUxMixpKSYmby5uZ0FmdGVyQ29udGVudEluaXQoKSwyMDk3MTUyJm4mJm8ubmdBZnRlckNvbnRlbnRDaGVja2VkKCksNDE5NDMwNCZuJiZCbih0LDc2OCxpKSYmby5uZ0FmdGVyVmlld0luaXQoKSw4Mzg4NjA4Jm4mJm8ubmdBZnRlclZpZXdDaGVja2VkKCksMTMxMDcyJm4mJm8ubmdPbkRlc3Ryb3koKSl9fWZ1bmN0aW9uIFZyKHQsZSxuKXt2YXIgaT1bXTtmb3IodmFyIHIgaW4gbilpLnB1c2goe3Byb3BOYW1lOnIsYmluZGluZ1R5cGU6bltyXX0pO3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6LTEsZmxhZ3M6dCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxuZ0NvbnRlbnRJbmRleDotMSxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LGNoaWxkQ291bnQ6MCxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTp7aWQ6ZSxmaWx0ZXJJZDpiaShlKSxiaW5kaW5nczppfSxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24genIodCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVNYXRjaGVkUXVlcmllczt0LnBhcmVudCYmbWkodCk7KXt2YXIgbj10LnBhcmVudE5vZGVEZWY7dD10LnBhcmVudDtmb3IodmFyIGk9bi5ub2RlSW5kZXgrbi5jaGlsZENvdW50LHI9MDtyPD1pO3IrKyk2NzEwODg2NCYobz10LmRlZi5ub2Rlc1tyXSkuZmxhZ3MmJjUzNjg3MDkxMiZvLmZsYWdzJiYoby5xdWVyeS5maWx0ZXJJZCZlKT09PW8ucXVlcnkuZmlsdGVySWQmJkduKHQscikuc2V0RGlydHkoKSwhKDEmby5mbGFncyYmcitvLmNoaWxkQ291bnQ8bi5ub2RlSW5kZXgpJiY2NzEwODg2NCZvLmNoaWxkRmxhZ3MmJjUzNjg3MDkxMiZvLmNoaWxkRmxhZ3N8fChyKz1vLmNoaWxkQ291bnQpfWlmKDEzNDIxNzcyOCZ0LmRlZi5ub2RlRmxhZ3MpZm9yKHI9MDtyPHQuZGVmLm5vZGVzLmxlbmd0aDtyKyspe3ZhciBvOzEzNDIxNzcyOCYobz10LmRlZi5ub2Rlc1tyXSkuZmxhZ3MmJjUzNjg3MDkxMiZvLmZsYWdzJiZHbih0LHIpLnNldERpcnR5KCkscis9by5jaGlsZENvdW50fX1mdW5jdGlvbiBCcih0LGUpe3ZhciBuPUduKHQsZS5ub2RlSW5kZXgpO2lmKG4uZGlydHkpe3ZhciBpLHI9dm9pZCAwO2lmKDY3MTA4ODY0JmUuZmxhZ3Mpe3ZhciBvPWUucGFyZW50LnBhcmVudDtyPVVyKHQsby5ub2RlSW5kZXgsby5ub2RlSW5kZXgrby5jaGlsZENvdW50LGUucXVlcnksW10pLGk9cW4odCxlLnBhcmVudC5ub2RlSW5kZXgpLmluc3RhbmNlfWVsc2UgMTM0MjE3NzI4JmUuZmxhZ3MmJihyPVVyKHQsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxlLnF1ZXJ5LFtdKSxpPXQuY29tcG9uZW50KTtuLnJlc2V0KHIpO2Zvcih2YXIgYT1lLnF1ZXJ5LmJpbmRpbmdzLHM9ITEsbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgdT1hW2xdLGM9dm9pZCAwO3N3aXRjaCh1LmJpbmRpbmdUeXBlKXtjYXNlIDA6Yz1uLmZpcnN0O2JyZWFrO2Nhc2UgMTpjPW4scz0hMH1pW3UucHJvcE5hbWVdPWN9cyYmbi5ub3RpZnlPbkNoYW5nZXMoKX19ZnVuY3Rpb24gVXIodCxlLG4saSxyKXtmb3IodmFyIG89ZTtvPD1uO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb10scz1hLm1hdGNoZWRRdWVyaWVzW2kuaWRdO2lmKG51bGwhPXMmJnIucHVzaChIcih0LGEscykpLDEmYS5mbGFncyYmYS5lbGVtZW50LnRlbXBsYXRlJiYoYS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyZpLmZpbHRlcklkKT09PWkuZmlsdGVySWQpe3ZhciBsPUhuKHQsbyk7aWYoKGEuY2hpbGRNYXRjaGVkUXVlcmllcyZpLmZpbHRlcklkKT09PWkuZmlsdGVySWQmJihVcih0LG8rMSxvK2EuY2hpbGRDb3VudCxpLHIpLG8rPWEuY2hpbGRDb3VudCksMTY3NzcyMTYmYS5mbGFncylmb3IodmFyIHU9bC52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGM9MDtjPHUubGVuZ3RoO2MrKyl7dmFyIGY9dVtjXSxkPWZpKGYpO2QmJmQ9PT1sJiZVcihmLDAsZi5kZWYubm9kZXMubGVuZ3RoLTEsaSxyKX12YXIgaD1sLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihoKWZvcihjPTA7YzxoLmxlbmd0aDtjKyspe3ZhciBwPWhbY107VXIocCwwLHAuZGVmLm5vZGVzLmxlbmd0aC0xLGkscil9fShhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmaS5maWx0ZXJJZCkhPT1pLmZpbHRlcklkJiYobys9YS5jaGlsZENvdW50KX1yZXR1cm4gcn1mdW5jdGlvbiBIcih0LGUsbil7aWYobnVsbCE9bilzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBIbih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2Nhc2UgMDpyZXR1cm4gbmV3IENlKEhuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Nhc2UgMjpyZXR1cm4gSG4odCxlLm5vZGVJbmRleCkudGVtcGxhdGU7Y2FzZSAzOnJldHVybiBIbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgNDpyZXR1cm4gcW4odCxlLm5vZGVJbmRleCkuaW5zdGFuY2V9fWZ1bmN0aW9uIHFyKHQsZSl7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDotMSxmbGFnczo4LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5kZXg6dCxjaGlsZENvdW50OjAsYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6e2luZGV4OmV9fX1mdW5jdGlvbiBRcih0LGUsbil7dmFyIGk9Z2kodCxlLG4pO2kmJlNpKHQsbi5uZ0NvbnRlbnQuaW5kZXgsMSxpLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBHcih0LGUpe3JldHVybiBZcigxMjgsdCxuZXcgQXJyYXkoZSsxKSl9ZnVuY3Rpb24gWnIodCxlKXtyZXR1cm4gWXIoMzIsdCxuZXcgQXJyYXkoZSkpfWZ1bmN0aW9uIFdyKHQsZSl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTtvKyspe3ZhciBhPW5bb107cltlW2FdXT1hfXJldHVybiBZcig2NCx0LHIpfWZ1bmN0aW9uIFlyKHQsZSxuKXtmb3IodmFyIGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aVtyXT17ZmxhZ3M6OCxuYW1lOm8sbnM6bnVsbCxub25NaW5pZmllZE5hbWU6byxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDplLGZsYWdzOnQsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OjAsYmluZGluZ3M6aSxiaW5kaW5nRmxhZ3M6SWkoaSksb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gS3IodCxlLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkobi5sZW5ndGgtMSkscj0xO3I8bi5sZW5ndGg7cisrKWlbci0xXT17ZmxhZ3M6OCxuYW1lOm51bGwsbnM6bnVsbCxub25NaW5pZmllZE5hbWU6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bltyXX07cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOjIsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDplLGNoaWxkQ291bnQ6MCxiaW5kaW5nczppLGJpbmRpbmdGbGFnczo4LG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDp7cHJlZml4Om5bMF19LHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIFhyKHQsZSxuKXt2YXIgaSxyPXQucmVuZGVyZXI7aT1yLmNyZWF0ZVRleHQobi50ZXh0LnByZWZpeCk7dmFyIG89Z2kodCxlLG4pO3JldHVybiBvJiZyLmFwcGVuZENoaWxkKG8saSkse3JlbmRlclRleHQ6aX19ZnVuY3Rpb24gJHIodCxlKXtyZXR1cm4obnVsbCE9dD90LnRvU3RyaW5nKCk6IiIpK2Uuc3VmZml4fWZ1bmN0aW9uIEpyKHQsZSxuLGkpe2Zvcih2YXIgcj0wLG89MCxhPTAscz0wLGw9MCx1PW51bGwsYz1udWxsLGY9ITEsZD0hMSxoPW51bGwscD0wO3A8ZS5sZW5ndGg7cCsrKXt2YXIgbT1lW3BdO2lmKG0ubm9kZUluZGV4PXAsbS5wYXJlbnQ9dSxtLmJpbmRpbmdJbmRleD1yLG0ub3V0cHV0SW5kZXg9byxtLnJlbmRlclBhcmVudD1jLGF8PW0uZmxhZ3MsbHw9bS5tYXRjaGVkUXVlcnlJZHMsbS5lbGVtZW50KXt2YXIgYj1tLmVsZW1lbnQ7Yi5wdWJsaWNQcm92aWRlcnM9dT91LmVsZW1lbnQucHVibGljUHJvdmlkZXJzOk9iamVjdC5jcmVhdGUobnVsbCksYi5hbGxQcm92aWRlcnM9Yi5wdWJsaWNQcm92aWRlcnMsZj0hMSxkPSExLG0uZWxlbWVudC50ZW1wbGF0ZSYmKGx8PW0uZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMpfWlmKGVvKHUsbSxlLmxlbmd0aCkscis9bS5iaW5kaW5ncy5sZW5ndGgsbys9bS5vdXRwdXRzLmxlbmd0aCwhYyYmMyZtLmZsYWdzJiYoaD1tKSwyMDIyNCZtLmZsYWdzKXtmfHwoZj0hMCx1LmVsZW1lbnQucHVibGljUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUodS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycyksdS5lbGVtZW50LmFsbFByb3ZpZGVycz11LmVsZW1lbnQucHVibGljUHJvdmlkZXJzKTt2YXIgeT0wIT0oMzI3NjgmbS5mbGFncyk7MD09KDgxOTImbS5mbGFncyl8fHk/dS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVyc1tKbihtLnByb3ZpZGVyLnRva2VuKV09bTooZHx8KGQ9ITAsdS5lbGVtZW50LmFsbFByb3ZpZGVycz1PYmplY3QuY3JlYXRlKHUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpKSx1LmVsZW1lbnQuYWxsUHJvdmlkZXJzW0puKG0ucHJvdmlkZXIudG9rZW4pXT1tKSx5JiYodS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyPW0pfWlmKHU/KHUuY2hpbGRGbGFnc3w9bS5mbGFncyx1LmRpcmVjdENoaWxkRmxhZ3N8PW0uZmxhZ3MsdS5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQmJm0uZWxlbWVudC50ZW1wbGF0ZSYmKHUuY2hpbGRNYXRjaGVkUXVlcmllc3w9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcykpOnN8PW0uZmxhZ3MsbS5jaGlsZENvdW50PjApdT1tLHRvKG0pfHwoYz1tKTtlbHNlIGZvcig7dSYmcD09PXUubm9kZUluZGV4K3UuY2hpbGRDb3VudDspe3ZhciB2PXUucGFyZW50O3YmJih2LmNoaWxkRmxhZ3N8PXUuY2hpbGRGbGFncyx2LmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PXUuY2hpbGRNYXRjaGVkUXVlcmllcyksYz0odT12KSYmdG8odSk/dS5yZW5kZXJQYXJlbnQ6dX19cmV0dXJue2ZhY3Rvcnk6bnVsbCxub2RlRmxhZ3M6YSxyb290Tm9kZUZsYWdzOnMsbm9kZU1hdGNoZWRRdWVyaWVzOmwsZmxhZ3M6dCxub2RlczplLHVwZGF0ZURpcmVjdGl2ZXM6bnx8WG4sdXBkYXRlUmVuZGVyZXI6aXx8WG4saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxuLGkscil7cmV0dXJuIGVbbl0uZWxlbWVudC5oYW5kbGVFdmVudCh0LGkscil9LGJpbmRpbmdDb3VudDpyLG91dHB1dENvdW50Om8sbGFzdFJlbmRlclJvb3ROb2RlOmh9fWZ1bmN0aW9uIHRvKHQpe3JldHVybiAwIT0oMSZ0LmZsYWdzKSYmbnVsbD09PXQuZWxlbWVudC5uYW1lfWZ1bmN0aW9uIGVvKHQsZSxuKXt2YXIgaT1lLmVsZW1lbnQmJmUuZWxlbWVudC50ZW1wbGF0ZTtpZihpKXtpZighaS5sYXN0UmVuZGVyUm9vdE5vZGUpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBFbWJlZGRlZCB0ZW1wbGF0ZXMgd2l0aG91dCBub2RlcyBhcmUgbm90IGFsbG93ZWQhIik7aWYoaS5sYXN0UmVuZGVyUm9vdE5vZGUmJjE2Nzc3MjE2JmkubGFzdFJlbmRlclJvb3ROb2RlLmZsYWdzKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogTGFzdCByb290IG5vZGUgb2YgYSB0ZW1wbGF0ZSBjYW4ndCBoYXZlIGVtYmVkZGVkIHZpZXdzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9aWYoMjAyMjQmZS5mbGFncyYmMD09KDEmKHQ/dC5mbGFnczowKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBTdGF0aWNQcm92aWRlci9EaXJlY3RpdmUgbm9kZXMgbmVlZCB0byBiZSBjaGlsZHJlbiBvZiBlbGVtZW50cyBvciBhbmNob3JzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIik7aWYoZS5xdWVyeSl7aWYoNjcxMDg4NjQmZS5mbGFncyYmKCF0fHwwPT0oMTYzODQmdC5mbGFncykpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogQ29udGVudCBRdWVyeSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGRpcmVjdGl2ZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZigxMzQyMTc3MjgmZS5mbGFncyYmdCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFZpZXcgUXVlcnkgbm9kZXMgaGF2ZSB0byBiZSB0b3AgbGV2ZWwgbm9kZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZihlLmNoaWxkQ291bnQpe3ZhciByPXQ/dC5ub2RlSW5kZXgrdC5jaGlsZENvdW50Om4tMTtpZihlLm5vZGVJbmRleDw9ciYmZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50PnIpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBjaGlsZENvdW50IG9mIG5vZGUgbGVhZHMgb3V0c2lkZSBvZiBwYXJlbnQsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX19ZnVuY3Rpb24gbm8odCxlLG4saSl7dmFyIHI9b28odC5yb290LHQucmVuZGVyZXIsdCxlLG4pO3JldHVybiBhbyhyLHQuY29tcG9uZW50LGkpLHNvKHIpLHJ9ZnVuY3Rpb24gaW8odCxlLG4pe3ZhciBpPW9vKHQsdC5yZW5kZXJlcixudWxsLG51bGwsZSk7cmV0dXJuIGFvKGksbixuKSxzbyhpKSxpfWZ1bmN0aW9uIHJvKHQsZSxuLGkpe3ZhciByLG89ZS5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZTtyZXR1cm4gcj1vP3Qucm9vdC5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoaSxvKTp0LnJvb3QucmVuZGVyZXIsb28odC5yb290LHIsdCxlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIsbil9ZnVuY3Rpb24gb28odCxlLG4saSxyKXt2YXIgbz1uZXcgQXJyYXkoci5ub2Rlcy5sZW5ndGgpLGE9ci5vdXRwdXRDb3VudD9uZXcgQXJyYXkoci5vdXRwdXRDb3VudCk6bnVsbDtyZXR1cm57ZGVmOnIscGFyZW50Om4sdmlld0NvbnRhaW5lclBhcmVudDpudWxsLHBhcmVudE5vZGVEZWY6aSxjb250ZXh0Om51bGwsY29tcG9uZW50Om51bGwsbm9kZXM6byxzdGF0ZToxMyxyb290OnQscmVuZGVyZXI6ZSxvbGRWYWx1ZXM6bmV3IEFycmF5KHIuYmluZGluZ0NvdW50KSxkaXNwb3NhYmxlczphLGluaXRJbmRleDotMX19ZnVuY3Rpb24gYW8odCxlLG4pe3QuY29tcG9uZW50PWUsdC5jb250ZXh0PW59ZnVuY3Rpb24gc28odCl7dmFyIGU7cGkodCkmJihlPUhuKHQucGFyZW50LHQucGFyZW50Tm9kZURlZi5wYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtmb3IodmFyIG49dC5kZWYsaT10Lm5vZGVzLHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIG89bi5ub2Rlc1tyXTtabi5zZXRDdXJyZW50Tm9kZSh0LHIpO3ZhciBhPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3Jm8uZmxhZ3Mpe2Nhc2UgMTp2YXIgcz1EaSh0LGUsbyksbD12b2lkIDA7aWYoMzM1NTQ0MzImby5mbGFncyl7dmFyIHU9d2koby5lbGVtZW50LmNvbXBvbmVudFZpZXcpO2w9Wm4uY3JlYXRlQ29tcG9uZW50Vmlldyh0LG8sdSxzKX1NaSh0LGwsbyxzKSxhPXtyZW5kZXJFbGVtZW50OnMsY29tcG9uZW50VmlldzpsLHZpZXdDb250YWluZXI6bnVsbCx0ZW1wbGF0ZTpvLmVsZW1lbnQudGVtcGxhdGU/b3IodCxvKTp2b2lkIDB9LDE2Nzc3MjE2Jm8uZmxhZ3MmJihhLnZpZXdDb250YWluZXI9ZXIodCxvLGEpKTticmVhaztjYXNlIDI6YT1Ycih0LGUsbyk7YnJlYWs7Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDI1NjooYT1pW3JdKXx8NDA5NiZvLmZsYWdzfHwoYT17aW5zdGFuY2U6RXIodCxvKX0pO2JyZWFrO2Nhc2UgMTY6YT17aW5zdGFuY2U6a3IodCxvKX07YnJlYWs7Y2FzZSAxNjM4NDooYT1pW3JdKXx8KGE9e2luc3RhbmNlOmpyKHQsbyl9KSwzMjc2OCZvLmZsYWdzJiZhbyhIbih0LG8ucGFyZW50Lm5vZGVJbmRleCkuY29tcG9uZW50VmlldyxhLmluc3RhbmNlLGEuaW5zdGFuY2UpO2JyZWFrO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODphPXt2YWx1ZTp2b2lkIDB9O2JyZWFrO2Nhc2UgNjcxMDg4NjQ6Y2FzZSAxMzQyMTc3Mjg6YT1uZXcgT2U7YnJlYWs7Y2FzZSA4OlFyKHQsZSxvKSxhPXZvaWQgMH1pW3JdPWF9eW8odCxiby5DcmVhdGVWaWV3Tm9kZXMpLHdvKHQsMjAxMzI2NTkyLDI2ODQzNTQ1NiwwKX1mdW5jdGlvbiBsbyh0KXtmbyh0KSxabi51cGRhdGVEaXJlY3RpdmVzKHQsMSksdm8odCxiby5DaGVja05vQ2hhbmdlcyksWm4udXBkYXRlUmVuZGVyZXIodCwxKSx5byh0LGJvLkNoZWNrTm9DaGFuZ2VzKSx0LnN0YXRlJj0tOTd9ZnVuY3Rpb24gdW8odCl7MSZ0LnN0YXRlPyh0LnN0YXRlJj0tMix0LnN0YXRlfD0yKTp0LnN0YXRlJj0tMyx6bih0LDAsMjU2KSxmbyh0KSxabi51cGRhdGVEaXJlY3RpdmVzKHQsMCksdm8odCxiby5DaGVja0FuZFVwZGF0ZSksd28odCw2NzEwODg2NCw1MzY4NzA5MTIsMCk7dmFyIGU9em4odCwyNTYsNTEyKTtOcih0LDIwOTcxNTJ8KGU/MTA0ODU3NjowKSksWm4udXBkYXRlUmVuZGVyZXIodCwwKSx5byh0LGJvLkNoZWNrQW5kVXBkYXRlKSx3byh0LDEzNDIxNzcyOCw1MzY4NzA5MTIsMCksTnIodCw4Mzg4NjA4fCgoZT16bih0LDUxMiw3NjgpKT80MTk0MzA0OjApKSwyJnQuZGVmLmZsYWdzJiYodC5zdGF0ZSY9LTkpLHQuc3RhdGUmPS05Nyx6bih0LDc2OCwxMDI0KX1mdW5jdGlvbiBjbyh0LGUsbixyLG8sYSxzLGwsdSxjLGYsZCxoKXtyZXR1cm4gMD09PW4/ZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzLGwsdSxjLGYpe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbixpLHIsbyxhLHMsbCx1LGMsZil7dmFyIGQ9ZS5iaW5kaW5ncy5sZW5ndGgsaD0hMTtyZXR1cm4gZD4wJiZMaSh0LGUsMCxuKSYmKGg9ITApLGQ+MSYmTGkodCxlLDEsaSkmJihoPSEwKSxkPjImJkxpKHQsZSwyLHIpJiYoaD0hMCksZD4zJiZMaSh0LGUsMyxvKSYmKGg9ITApLGQ+NCYmTGkodCxlLDQsYSkmJihoPSEwKSxkPjUmJkxpKHQsZSw1LHMpJiYoaD0hMCksZD42JiZMaSh0LGUsNixsKSYmKGg9ITApLGQ+NyYmTGkodCxlLDcsdSkmJihoPSEwKSxkPjgmJkxpKHQsZSw4LGMpJiYoaD0hMCksZD45JiZMaSh0LGUsOSxmKSYmKGg9ITApLGh9KHQsZSxuLGkscixvLGEscyxsLHUsYyxmKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyxsLHUsYyxmKXt2YXIgZD0hMSxoPWUuYmluZGluZ3MscD1oLmxlbmd0aDtpZihwPjAmJmFpKHQsZSwwLG4pJiYoZD0hMCkscD4xJiZhaSh0LGUsMSxpKSYmKGQ9ITApLHA+MiYmYWkodCxlLDIscikmJihkPSEwKSxwPjMmJmFpKHQsZSwzLG8pJiYoZD0hMCkscD40JiZhaSh0LGUsNCxhKSYmKGQ9ITApLHA+NSYmYWkodCxlLDUscykmJihkPSEwKSxwPjYmJmFpKHQsZSw2LGwpJiYoZD0hMCkscD43JiZhaSh0LGUsNyx1KSYmKGQ9ITApLHA+OCYmYWkodCxlLDgsYykmJihkPSEwKSxwPjkmJmFpKHQsZSw5LGYpJiYoZD0hMCksZCl7dmFyIG09ZS50ZXh0LnByZWZpeDtwPjAmJihtKz0kcihuLGhbMF0pKSxwPjEmJihtKz0kcihpLGhbMV0pKSxwPjImJihtKz0kcihyLGhbMl0pKSxwPjMmJihtKz0kcihvLGhbM10pKSxwPjQmJihtKz0kcihhLGhbNF0pKSxwPjUmJihtKz0kcihzLGhbNV0pKSxwPjYmJihtKz0kcihsLGhbNl0pKSxwPjcmJihtKz0kcih1LGhbN10pKSxwPjgmJihtKz0kcihjLGhbOF0pKSxwPjkmJihtKz0kcihmLGhbOV0pKTt2YXIgYj1Vbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUoYixtKX1yZXR1cm4gZH0odCxlLG4saSxyLG8sYSxzLGwsdSxjLGYpO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyxsLHUsYyxmKXt2YXIgZD1xbih0LGUubm9kZUluZGV4KSxoPWQuaW5zdGFuY2UscD0hMSxtPXZvaWQgMCxiPWUuYmluZGluZ3MubGVuZ3RoO3JldHVybiBiPjAmJm9pKHQsZSwwLG4pJiYocD0hMCxtPU1yKHQsZCxlLDAsbixtKSksYj4xJiZvaSh0LGUsMSxpKSYmKHA9ITAsbT1Ncih0LGQsZSwxLGksbSkpLGI+MiYmb2kodCxlLDIscikmJihwPSEwLG09TXIodCxkLGUsMixyLG0pKSxiPjMmJm9pKHQsZSwzLG8pJiYocD0hMCxtPU1yKHQsZCxlLDMsbyxtKSksYj40JiZvaSh0LGUsNCxhKSYmKHA9ITAsbT1Ncih0LGQsZSw0LGEsbSkpLGI+NSYmb2kodCxlLDUscykmJihwPSEwLG09TXIodCxkLGUsNSxzLG0pKSxiPjYmJm9pKHQsZSw2LGwpJiYocD0hMCxtPU1yKHQsZCxlLDYsbCxtKSksYj43JiZvaSh0LGUsNyx1KSYmKHA9ITAsbT1Ncih0LGQsZSw3LHUsbSkpLGI+OCYmb2kodCxlLDgsYykmJihwPSEwLG09TXIodCxkLGUsOCxjLG0pKSxiPjkmJm9pKHQsZSw5LGYpJiYocD0hMCxtPU1yKHQsZCxlLDksZixtKSksbSYmaC5uZ09uQ2hhbmdlcyhtKSw2NTUzNiZlLmZsYWdzJiZCbih0LDI1NixlLm5vZGVJbmRleCkmJmgubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmaC5uZ0RvQ2hlY2soKSxwfSh0LGUsbixpLHIsbyxhLHMsbCx1LGMsZik7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbixpLHIsbyxhLHMsbCx1LGMsZil7dmFyIGQ9ZS5iaW5kaW5ncyxoPSExLHA9ZC5sZW5ndGg7aWYocD4wJiZhaSh0LGUsMCxuKSYmKGg9ITApLHA+MSYmYWkodCxlLDEsaSkmJihoPSEwKSxwPjImJmFpKHQsZSwyLHIpJiYoaD0hMCkscD4zJiZhaSh0LGUsMyxvKSYmKGg9ITApLHA+NCYmYWkodCxlLDQsYSkmJihoPSEwKSxwPjUmJmFpKHQsZSw1LHMpJiYoaD0hMCkscD42JiZhaSh0LGUsNixsKSYmKGg9ITApLHA+NyYmYWkodCxlLDcsdSkmJihoPSEwKSxwPjgmJmFpKHQsZSw4LGMpJiYoaD0hMCkscD45JiZhaSh0LGUsOSxmKSYmKGg9ITApLGgpe3ZhciBtPVFuKHQsZS5ub2RlSW5kZXgpLGI9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjpiPW5ldyBBcnJheShkLmxlbmd0aCkscD4wJiYoYlswXT1uKSxwPjEmJihiWzFdPWkpLHA+MiYmKGJbMl09cikscD4zJiYoYlszXT1vKSxwPjQmJihiWzRdPWEpLHA+NSYmKGJbNV09cykscD42JiYoYls2XT1sKSxwPjcmJihiWzddPXUpLHA+OCYmKGJbOF09YykscD45JiYoYls5XT1mKTticmVhaztjYXNlIDY0OmI9e30scD4wJiYoYltkWzBdLm5hbWVdPW4pLHA+MSYmKGJbZFsxXS5uYW1lXT1pKSxwPjImJihiW2RbMl0ubmFtZV09cikscD4zJiYoYltkWzNdLm5hbWVdPW8pLHA+NCYmKGJbZFs0XS5uYW1lXT1hKSxwPjUmJihiW2RbNV0ubmFtZV09cykscD42JiYoYltkWzZdLm5hbWVdPWwpLHA+NyYmKGJbZFs3XS5uYW1lXT11KSxwPjgmJihiW2RbOF0ubmFtZV09YykscD45JiYoYltkWzldLm5hbWVdPWYpO2JyZWFrO2Nhc2UgMTI4OnZhciB5PW47c3dpdGNoKHApe2Nhc2UgMTpiPXkudHJhbnNmb3JtKG4pO2JyZWFrO2Nhc2UgMjpiPXkudHJhbnNmb3JtKGkpO2JyZWFrO2Nhc2UgMzpiPXkudHJhbnNmb3JtKGkscik7YnJlYWs7Y2FzZSA0OmI9eS50cmFuc2Zvcm0oaSxyLG8pO2JyZWFrO2Nhc2UgNTpiPXkudHJhbnNmb3JtKGkscixvLGEpO2JyZWFrO2Nhc2UgNjpiPXkudHJhbnNmb3JtKGkscixvLGEscyk7YnJlYWs7Y2FzZSA3OmI9eS50cmFuc2Zvcm0oaSxyLG8sYSxzLGwpO2JyZWFrO2Nhc2UgODpiPXkudHJhbnNmb3JtKGkscixvLGEscyxsLHUpO2JyZWFrO2Nhc2UgOTpiPXkudHJhbnNmb3JtKGkscixvLGEscyxsLHUsYyk7YnJlYWs7Y2FzZSAxMDpiPXkudHJhbnNmb3JtKGkscixvLGEscyxsLHUsYyxmKX19bS52YWx1ZT1ifXJldHVybiBofSh0LGUsbixpLHIsbyxhLHMsbCx1LGMsZik7ZGVmYXVsdDp0aHJvdyJ1bnJlYWNoYWJsZSJ9fSh0LGUscixvLGEscyxsLHUsYyxmLGQsaCk6ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPSExLHI9MDtyPG4ubGVuZ3RoO3IrKylMaSh0LGUscixuW3JdKSYmKGk9ITApO3JldHVybiBpfSh0LGUsbik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPWUuYmluZGluZ3Mscj0hMSxvPTA7bzxuLmxlbmd0aDtvKyspYWkodCxlLG8sbltvXSkmJihyPSEwKTtpZihyKXt2YXIgYT0iIjtmb3Iobz0wO288bi5sZW5ndGg7bysrKWErPSRyKG5bb10saVtvXSk7YT1lLnRleHQucHJlZml4K2E7dmFyIHM9VW4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHMsYSl9cmV0dXJuIHJ9KHQsZSxuKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPXFuKHQsZS5ub2RlSW5kZXgpLHI9aS5pbnN0YW5jZSxvPSExLGE9dm9pZCAwLHM9MDtzPG4ubGVuZ3RoO3MrKylvaSh0LGUscyxuW3NdKSYmKG89ITAsYT1Ncih0LGksZSxzLG5bc10sYSkpO3JldHVybiBhJiZyLm5nT25DaGFuZ2VzKGEpLDY1NTM2JmUuZmxhZ3MmJkJuKHQsMjU2LGUubm9kZUluZGV4KSYmci5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZyLm5nRG9DaGVjaygpLG99KHQsZSxuKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ZS5iaW5kaW5ncyxvPSExLGE9MDthPG4ubGVuZ3RoO2ErKylhaSh0LGUsYSxuW2FdKSYmKG89ITApO2lmKG8pe3ZhciBzPVFuKHQsZS5ub2RlSW5kZXgpLGw9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjpsPW47YnJlYWs7Y2FzZSA2NDpmb3IobD17fSxhPTA7YTxuLmxlbmd0aDthKyspbFtyW2FdLm5hbWVdPW5bYV07YnJlYWs7Y2FzZSAxMjg6dmFyIHU9blswXSxjPW4uc2xpY2UoMSk7bD11LnRyYW5zZm9ybS5hcHBseSh1LE9iamVjdChpLmQpKGMpKX1zLnZhbHVlPWx9cmV0dXJuIG99KHQsZSxuKTtkZWZhdWx0OnRocm93InVucmVhY2hhYmxlIn19KHQsZSxyKX1mdW5jdGlvbiBmbyh0KXt2YXIgZT10LmRlZjtpZig0JmUubm9kZUZsYWdzKWZvcih2YXIgbj0wO248ZS5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgaT1lLm5vZGVzW25dO2lmKDQmaS5mbGFncyl7dmFyIHI9SG4odCxuKS50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGE9cltvXTthLnN0YXRlfD0zMix1aShhLHQpfX1lbHNlIDA9PSg0JmkuY2hpbGRGbGFncykmJihuKz1pLmNoaWxkQ291bnQpfX1mdW5jdGlvbiBobyh0LGUsbixpLHIsbyxhLHMsbCx1LGMsZixkKXtyZXR1cm4gMD09PW4/ZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzLGwsdSxjLGYpe3ZhciBkPWUuYmluZGluZ3MubGVuZ3RoO2Q+MCYmc2kodCxlLDAsbiksZD4xJiZzaSh0LGUsMSxpKSxkPjImJnNpKHQsZSwyLHIpLGQ+MyYmc2kodCxlLDMsbyksZD40JiZzaSh0LGUsNCxhKSxkPjUmJnNpKHQsZSw1LHMpLGQ+NiYmc2kodCxlLDYsbCksZD43JiZzaSh0LGUsNyx1KSxkPjgmJnNpKHQsZSw4LGMpLGQ+OSYmc2kodCxlLDksZil9KHQsZSxpLHIsbyxhLHMsbCx1LGMsZixkKTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspc2kodCxlLGksbltpXSl9KHQsZSxpKSwhMX1mdW5jdGlvbiBwbyh0LGUpe2lmKEduKHQsZS5ub2RlSW5kZXgpLmRpcnR5KXRocm93IFduKFpuLmNyZWF0ZURlYnVnQ29udGV4dCh0LGUubm9kZUluZGV4KSwiUXVlcnkgIitlLnF1ZXJ5LmlkKyIgbm90IGRpcnR5IiwiUXVlcnkgIitlLnF1ZXJ5LmlkKyIgZGlydHkiLDAhPSgxJnQuc3RhdGUpKX1mdW5jdGlvbiBtbyh0KXtpZighKDEyOCZ0LnN0YXRlKSl7aWYodm8odCxiby5EZXN0cm95KSx5byh0LGJvLkRlc3Ryb3kpLE5yKHQsMTMxMDcyKSx0LmRpc3Bvc2FibGVzKWZvcih2YXIgZT0wO2U8dC5kaXNwb3NhYmxlcy5sZW5ndGg7ZSsrKXQuZGlzcG9zYWJsZXNbZV0oKTshZnVuY3Rpb24odCl7aWYoMTYmdC5zdGF0ZSl7dmFyIGU9ZmkodCk7aWYoZSl7dmFyIG49ZS50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7biYmKEtpKG4sbi5pbmRleE9mKHQpKSxabi5kaXJ0eVBhcmVudFF1ZXJpZXModCkpfX19KHQpLHQucmVuZGVyZXIuZGVzdHJveU5vZGUmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmRlZi5ub2Rlcy5sZW5ndGgsbj0wO248ZTtuKyspe3ZhciBpPXQuZGVmLm5vZGVzW25dOzEmaS5mbGFncz90LnJlbmRlcmVyLmRlc3Ryb3lOb2RlKEhuKHQsbikucmVuZGVyRWxlbWVudCk6MiZpLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoVW4odCxuKS5yZW5kZXJUZXh0KTooNjcxMDg4NjQmaS5mbGFnc3x8MTM0MjE3NzI4JmkuZmxhZ3MpJiZHbih0LG4pLmRlc3Ryb3koKX19KHQpLHBpKHQpJiZ0LnJlbmRlcmVyLmRlc3Ryb3koKSx0LnN0YXRlfD0xMjh9fXZhciBibz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkNyZWF0ZVZpZXdOb2Rlcz0wXT0iQ3JlYXRlVmlld05vZGVzIix0W3QuQ2hlY2tOb0NoYW5nZXM9MV09IkNoZWNrTm9DaGFuZ2VzIix0W3QuQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cz0yXT0iQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cyIsdFt0LkNoZWNrQW5kVXBkYXRlPTNdPSJDaGVja0FuZFVwZGF0ZSIsdFt0LkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M9NF09IkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MiLHRbdC5EZXN0cm95PTVdPSJEZXN0cm95Iix0fSh7fSk7ZnVuY3Rpb24geW8odCxlKXt2YXIgbj10LmRlZjtpZigzMzU1NDQzMiZuLm5vZGVGbGFncylmb3IodmFyIGk9MDtpPG4ubm9kZXMubGVuZ3RoO2krKyl7dmFyIHI9bi5ub2Rlc1tpXTszMzU1NDQzMiZyLmZsYWdzP2dvKEhuKHQsaSkuY29tcG9uZW50VmlldyxlKTowPT0oMzM1NTQ0MzImci5jaGlsZEZsYWdzKSYmKGkrPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIHZvKHQsZSl7dmFyIG49dC5kZWY7aWYoMTY3NzcyMTYmbi5ub2RlRmxhZ3MpZm9yKHZhciBpPTA7aTxuLm5vZGVzLmxlbmd0aDtpKyspe3ZhciByPW4ubm9kZXNbaV07aWYoMTY3NzcyMTYmci5mbGFncylmb3IodmFyIG89SG4odCxpKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGE9MDthPG8ubGVuZ3RoO2ErKylnbyhvW2FdLGUpO2Vsc2UgMD09KDE2Nzc3MjE2JnIuY2hpbGRGbGFncykmJihpKz1yLmNoaWxkQ291bnQpfX1mdW5jdGlvbiBnbyh0LGUpe3ZhciBuPXQuc3RhdGU7c3dpdGNoKGUpe2Nhc2UgYm8uQ2hlY2tOb0NoYW5nZXM6MD09KDEyOCZuKSYmKDEyPT0oMTImbik/bG8odCk6NjQmbiYmX28odCxiby5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzKSk7YnJlYWs7Y2FzZSBiby5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzOjA9PSgxMjgmbikmJigzMiZuP2xvKHQpOjY0Jm4mJl9vKHQsZSkpO2JyZWFrO2Nhc2UgYm8uQ2hlY2tBbmRVcGRhdGU6MD09KDEyOCZuKSYmKDEyPT0oMTImbik/dW8odCk6NjQmbiYmX28odCxiby5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzKSk7YnJlYWs7Y2FzZSBiby5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzOjA9PSgxMjgmbikmJigzMiZuP3VvKHQpOjY0Jm4mJl9vKHQsZSkpO2JyZWFrO2Nhc2UgYm8uRGVzdHJveTptbyh0KTticmVhaztjYXNlIGJvLkNyZWF0ZVZpZXdOb2Rlczpzbyh0KX19ZnVuY3Rpb24gX28odCxlKXt2byh0LGUpLHlvKHQsZSl9ZnVuY3Rpb24gd28odCxlLG4saSl7aWYodC5kZWYubm9kZUZsYWdzJmUmJnQuZGVmLm5vZGVGbGFncyZuKWZvcih2YXIgcj10LmRlZi5ub2Rlcy5sZW5ndGgsbz0wO288cjtvKyspe3ZhciBhPXQuZGVmLm5vZGVzW29dO2lmKGEuZmxhZ3MmZSYmYS5mbGFncyZuKXN3aXRjaChabi5zZXRDdXJyZW50Tm9kZSh0LGEubm9kZUluZGV4KSxpKXtjYXNlIDA6QnIodCxhKTticmVhaztjYXNlIDE6cG8odCxhKX1hLmNoaWxkRmxhZ3MmZSYmYS5jaGlsZEZsYWdzJm58fChvKz1hLmNoaWxkQ291bnQpfX12YXIgeG89ITE7ZnVuY3Rpb24gQ28odCxlLG4saSxyLG8pe3JldHVybiBpbyhPbyh0LHIsci5pbmplY3Rvci5nZXQoX2UpLGUsbiksaSxvKX1mdW5jdGlvbiBTbyh0LGUsbixpLHIsbyl7dmFyIGE9ci5pbmplY3Rvci5nZXQoX2UpLHM9T28odCxyLG5ldyBvYShhKSxlLG4pLGw9TW8oaSk7cmV0dXJuIGlhKHFvLmNyZWF0ZSxpbyxudWxsLFtzLGwsb10pfWZ1bmN0aW9uIE9vKHQsZSxuLGkscil7dmFyIG89ZS5pbmplY3Rvci5nZXQoVm4pLGE9ZS5pbmplY3Rvci5nZXQoc3QpO3JldHVybntuZ01vZHVsZTplLGluamVjdG9yOnQscHJvamVjdGFibGVOb2RlczppLHNlbGVjdG9yT3JOb2RlOnIsc2FuaXRpemVyOm8scmVuZGVyZXJGYWN0b3J5Om4scmVuZGVyZXI6bi5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpLGVycm9ySGFuZGxlcjphfX1mdW5jdGlvbiBFbyh0LGUsbixpKXt2YXIgcj1NbyhuKTtyZXR1cm4gaWEocW8uY3JlYXRlLG5vLG51bGwsW3QsZSxyLGldKX1mdW5jdGlvbiBrbyh0LGUsbixpKXtyZXR1cm4gbj1Sby5nZXQoZS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLnByb3ZpZGVyLnRva2VuKXx8TW8obiksaWEocW8uY3JlYXRlLHJvLG51bGwsW3QsZSxuLGldKX1mdW5jdGlvbiBqbyh0LGUsbixpKXtyZXR1cm4gZHIodCxlLG4sZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9ITEsbj0hMTtyZXR1cm4gMD09PUlvLnNpemU/e2hhc092ZXJyaWRlczplLGhhc0RlcHJlY2F0ZWRPdmVycmlkZXM6bn06KHQucHJvdmlkZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9SW8uZ2V0KHQudG9rZW4pOzM4NDAmdC5mbGFncyYmaSYmKGU9ITAsbj1ufHxpLmRlcHJlY2F0ZWRCZWhhdmlvcil9KSx0Lm1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtUby5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ci5uZ0luamVjdGFibGVEZWYucHJvdmlkZWRJbj09PXQmJihlPSEwLG49bnx8aS5kZXByZWNhdGVkQmVoYXZpb3IpfSl9KSx7aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufSl9KHQpLG49ZS5oYXNEZXByZWNhdGVkT3ZlcnJpZGVzO3JldHVybiBlLmhhc092ZXJyaWRlcz8oZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0LnByb3ZpZGVycy5sZW5ndGg7ZSsrKXt2YXIgaT10LnByb3ZpZGVyc1tlXTtuJiYoaS5mbGFnc3w9NDA5Nik7dmFyIHI9SW8uZ2V0KGkudG9rZW4pO3ImJihpLmZsYWdzPS0zODQxJmkuZmxhZ3N8ci5mbGFncyxpLmRlcHM9dmkoci5kZXBzKSxpLnZhbHVlPXIudmFsdWUpfWlmKFRvLnNpemU+MCl7dmFyIG89bmV3IFNldCh0Lm1vZHVsZXMpO1RvLmZvckVhY2goZnVuY3Rpb24oZSxpKXtpZihvLmhhcyhpLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluKSl7dmFyIHI9e3Rva2VuOmksZmxhZ3M6ZS5mbGFnc3wobj80MDk2OjApLGRlcHM6dmkoZS5kZXBzKSx2YWx1ZTplLnZhbHVlLGluZGV4OnQucHJvdmlkZXJzLmxlbmd0aH07dC5wcm92aWRlcnMucHVzaChyKSx0LnByb3ZpZGVyc0J5S2V5W0puKGkpXT1yfX0pfX0odD10LmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4gWG59KSksdCk6dH0oaSkpfXZhciBJbz1uZXcgTWFwLFRvPW5ldyBNYXAsUm89bmV3IE1hcDtmdW5jdGlvbiBBbyh0KXtJby5zZXQodC50b2tlbix0KSwiZnVuY3Rpb24iPT10eXBlb2YgdC50b2tlbiYmdC50b2tlbi5uZ0luamVjdGFibGVEZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluJiZUby5zZXQodC50b2tlbix0KX1mdW5jdGlvbiBQbyh0LGUpe3ZhciBuPXdpKHdpKGUudmlld0RlZkZhY3RvcnkpLm5vZGVzWzBdLmVsZW1lbnQuY29tcG9uZW50Vmlldyk7Um8uc2V0KHQsbil9ZnVuY3Rpb24gRG8oKXtJby5jbGVhcigpLFRvLmNsZWFyKCksUm8uY2xlYXIoKX1mdW5jdGlvbiBNbyh0KXtpZigwPT09SW8uc2l6ZSlyZXR1cm4gdDt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj1udWxsLGk9MDtpPHQubm9kZXMubGVuZ3RoO2krKyl7dmFyIHI9dC5ub2Rlc1tpXTsxJnIuZmxhZ3MmJihuPXIpLG4mJjM4NDAmci5mbGFncyYmSW8uaGFzKHIucHJvdmlkZXIudG9rZW4pJiYoZS5wdXNoKG4ubm9kZUluZGV4KSxuPW51bGwpfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dD10LmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4gWG59KTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpKHQsZVtuXSk7cmV0dXJuIHQ7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgbj1lKzE7bjx0Lm5vZGVzLmxlbmd0aDtuKyspe3ZhciBpPXQubm9kZXNbbl07aWYoMSZpLmZsYWdzKXJldHVybjtpZigzODQwJmkuZmxhZ3Mpe3ZhciByPWkucHJvdmlkZXIsbz1Jby5nZXQoci50b2tlbik7byYmKGkuZmxhZ3M9LTM4NDEmaS5mbGFnc3xvLmZsYWdzLHIuZGVwcz12aShvLmRlcHMpLHIudmFsdWU9by52YWx1ZSl9fX19ZnVuY3Rpb24gTm8odCxlLG4saSxyLG8sYSxzLGwsdSxjLGYsZCl7dmFyIGg9dC5kZWYubm9kZXNbZV07cmV0dXJuIGNvKHQsaCxuLGkscixvLGEscyxsLHUsYyxmLGQpLDIyNCZoLmZsYWdzP1FuKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIExvKHQsZSxuLGkscixvLGEscyxsLHUsYyxmLGQpe3ZhciBoPXQuZGVmLm5vZGVzW2VdO3JldHVybiBobyh0LGgsbixpLHIsbyxhLHMsbCx1LGMsZixkKSwyMjQmaC5mbGFncz9Rbih0LGUpLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBGbyh0KXtyZXR1cm4gaWEocW8uZGV0ZWN0Q2hhbmdlcyx1byxudWxsLFt0XSl9ZnVuY3Rpb24gVm8odCl7cmV0dXJuIGlhKHFvLmNoZWNrTm9DaGFuZ2VzLGxvLG51bGwsW3RdKX1mdW5jdGlvbiB6byh0KXtyZXR1cm4gaWEocW8uZGVzdHJveSxtbyxudWxsLFt0XSl9dmFyIEJvLFVvLEhvLHFvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuY3JlYXRlPTBdPSJjcmVhdGUiLHRbdC5kZXRlY3RDaGFuZ2VzPTFdPSJkZXRlY3RDaGFuZ2VzIix0W3QuY2hlY2tOb0NoYW5nZXM9Ml09ImNoZWNrTm9DaGFuZ2VzIix0W3QuZGVzdHJveT0zXT0iZGVzdHJveSIsdFt0LmhhbmRsZUV2ZW50PTRdPSJoYW5kbGVFdmVudCIsdH0oe30pO2Z1bmN0aW9uIFFvKHQsZSl7VW89dCxIbz1lfWZ1bmN0aW9uIEdvKHQsZSxuLGkpe3JldHVybiBRbyh0LGUpLGlhKHFvLmhhbmRsZUV2ZW50LHQuZGVmLmhhbmRsZUV2ZW50LG51bGwsW3QsZSxuLGldKX1mdW5jdGlvbiBabyh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IEtuKHFvW0JvXSk7cmV0dXJuIFFvKHQsSm8odCwwKSksdC5kZWYudXBkYXRlRGlyZWN0aXZlcyhmdW5jdGlvbih0LG4saSl7Zm9yKHZhciByPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXJbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP1lvKHQsYSxpLHIpOktvKHQsYSxpLHIpLDE2Mzg0JmEuZmxhZ3MmJlFvKHQsSm8odCxuKSksMjI0JmEuZmxhZ3M/UW4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSx0KX1mdW5jdGlvbiBXbyh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IEtuKHFvW0JvXSk7cmV0dXJuIFFvKHQsdGEodCwwKSksdC5kZWYudXBkYXRlUmVuZGVyZXIoZnVuY3Rpb24odCxuLGkpe2Zvcih2YXIgcj1bXSxvPTM7bzxhcmd1bWVudHMubGVuZ3RoO28rKylyW28tM109YXJndW1lbnRzW29dO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9Zbyh0LGEsaSxyKTpLbyh0LGEsaSxyKSwzJmEuZmxhZ3MmJlFvKHQsdGEodCxuKSksMjI0JmEuZmxhZ3M/UW4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSx0KX1mdW5jdGlvbiBZbyh0LGUsbixyKXtpZihjby5hcHBseSh2b2lkIDAsT2JqZWN0KGkuZCkoW3QsZSxuXSxyKSkpe3ZhciBvPTE9PT1uP3JbMF06cjtpZigxNjM4NCZlLmZsYWdzKXtmb3IodmFyIGE9e30scz0wO3M8ZS5iaW5kaW5ncy5sZW5ndGg7cysrKXt2YXIgbD1lLmJpbmRpbmdzW3NdLHU9b1tzXTs4JmwuZmxhZ3MmJihhWyhoPWwubm9uTWluaWZpZWROYW1lLCJuZy1yZWZsZWN0LSIrKGg9aC5yZXBsYWNlKC9bJEBdL2csIl8iKS5yZXBsYWNlKFhvLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiItIit0WzFdLnRvTG93ZXJDYXNlKCl9KSkpXT0kbyh1KSl9dmFyIGM9ZS5wYXJlbnQsZj1Ibih0LGMubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2lmKGMuZWxlbWVudC5uYW1lKWZvcih2YXIgZCBpbiBhKW51bGwhPSh1PWFbZF0pP3QucmVuZGVyZXIuc2V0QXR0cmlidXRlKGYsZCx1KTp0LnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShmLGQpO2Vsc2UgdC5yZW5kZXJlci5zZXRWYWx1ZShmLCJiaW5kaW5ncz0iK0pTT04uc3RyaW5naWZ5KGEsbnVsbCwyKSl9fXZhciBofWZ1bmN0aW9uIEtvKHQsZSxuLHIpe2hvLmFwcGx5KHZvaWQgMCxPYmplY3QoaS5kKShbdCxlLG5dLHIpKX12YXIgWG89LyhbQS1aXSkvZztmdW5jdGlvbiAkbyh0KXt0cnl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpLnNsaWNlKDAsMzApOnR9Y2F0Y2godCl7cmV0dXJuIltFUlJPUl0gRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBzZXJpYWxpemUgdGhlIHZhbHVlIn19ZnVuY3Rpb24gSm8odCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciBpPXQuZGVmLm5vZGVzW25dO2lmKDE2Mzg0JmkuZmxhZ3MmJmkuYmluZGluZ3MmJmkuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIHRhKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgaT10LmRlZi5ub2Rlc1tuXTtpZigzJmkuZmxhZ3MmJmkuYmluZGluZ3MmJmkuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfXZhciBlYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLm5vZGVJbmRleD1lLG51bGw9PWUmJih0aGlzLm5vZGVJbmRleD1lPTApLHRoaXMubm9kZURlZj10LmRlZi5ub2Rlc1tlXTtmb3IodmFyIG49dGhpcy5ub2RlRGVmLGk9dDtuJiYwPT0oMSZuLmZsYWdzKTspbj1uLnBhcmVudDtpZighbilmb3IoOyFuJiZpOyluPWRpKGkpLGk9aS5wYXJlbnQ7dGhpcy5lbERlZj1uLHRoaXMuZWxWaWV3PWl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxPckNvbXBWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEhuKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYubm9kZUluZGV4KS5jb21wb25lbnRWaWV3fHx0aGlzLnZpZXd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBzcih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuZWxEZWYpZm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJnQucHVzaChuLnByb3ZpZGVyLnRva2VuKSxlKz1uLmNoaWxkQ291bnR9cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5lbERlZil7bmEodGhpcy5lbFZpZXcsdGhpcy5lbERlZix0KTtmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmbmEodGhpcy5lbFZpZXcsbix0KSxlKz1uLmNoaWxkQ291bnR9fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50UmVuZGVyRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe2Zvcig7dCYmIXBpKHQpOyl0PXQucGFyZW50O3JldHVybiB0LnBhcmVudD9Ibih0LnBhcmVudCxkaSh0KS5ub2RlSW5kZXgpOm51bGx9KHRoaXMuZWxPckNvbXBWaWV3KTtyZXR1cm4gdD90LnJlbmRlckVsZW1lbnQ6dm9pZCAwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVuZGVyTm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiAyJnRoaXMubm9kZURlZi5mbGFncz9oaSh0aGlzLnZpZXcsdGhpcy5ub2RlRGVmKTpoaSh0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPVtdLG89MTtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXJbby0xXT1hcmd1bWVudHNbb107MiZ0aGlzLm5vZGVEZWYuZmxhZ3M/KGU9dGhpcy52aWV3LmRlZixuPXRoaXMubm9kZURlZi5ub2RlSW5kZXgpOihlPXRoaXMuZWxWaWV3LmRlZixuPXRoaXMuZWxEZWYubm9kZUluZGV4KTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxpPTA7aTw9ZTtpKyspMyZ0Lm5vZGVzW2ldLmZsYWdzJiZuKys7cmV0dXJuIG59KGUsbikscz0tMTtlLmZhY3RvcnkoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4rK3M9PT1hPyhlPXQuZXJyb3IpLmJpbmQuYXBwbHkoZSxPYmplY3QoaS5kKShbdF0scikpOlhufSksczxhJiYodC5lcnJvcigiSWxsZWdhbCBzdGF0ZTogdGhlIFZpZXdEZWZpbml0aW9uRmFjdG9yeSBkaWQgbm90IGNhbGwgdGhlIGxvZ2dlciEiKSx0LmVycm9yLmFwcGx5KHQsT2JqZWN0KGkuZCkocikpKX0sdH0oKTtmdW5jdGlvbiBuYSh0LGUsbil7Zm9yKHZhciBpIGluIGUucmVmZXJlbmNlcyluW2ldPUhyKHQsZSxlLnJlZmVyZW5jZXNbaV0pfWZ1bmN0aW9uIGlhKHQsZSxuLGkpe3ZhciByPUJvLG89VW8sYT1Ibzt0cnl7Qm89dDt2YXIgcz1lLmFwcGx5KG4saSk7cmV0dXJuIFVvPW8sSG89YSxCbz1yLHN9Y2F0Y2godCl7aWYocnQodCl8fCFVbyl0aHJvdyB0O3Rocm93IGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQudG9TdHJpbmcoKSkpLFluKHQsZSksdH0odCxyYSgpKX19ZnVuY3Rpb24gcmEoKXtyZXR1cm4gVW8/bmV3IGVhKFVvLEhvKTpudWxsfXZhciBvYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgYWEodGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbGVnYXRlLndoZW5SZW5kZXJpbmdEb25lP3RoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmUoKTpQcm9taXNlLnJlc29sdmUobnVsbCl9LHR9KCksYWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dCx0aGlzLmRhdGE9dGhpcy5kZWxlZ2F0ZS5kYXRhfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95Tm9kZT1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7RmUuZGVsZXRlKHQubmF0aXZlTm9kZSl9KFZlKHQpKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlJiZ0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKSxpPXJhKCk7aWYoaSl7dmFyIHI9bmV3IE1lKG4sbnVsbCxpKTtyLm5hbWU9dCx6ZShyKX1yZXR1cm4gbn0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCksbj1yYSgpO3JldHVybiBuJiZ6ZShuZXcgRGUoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KSxuPXJhKCk7cmV0dXJuIG4mJnplKG5ldyBEZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49VmUodCksaT1WZShlKTtuJiZpJiZuIGluc3RhbmNlb2YgTWUmJm4uYWRkQ2hpbGQoaSksdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVZlKHQpLHI9VmUoZSksbz1WZShuKTtpJiZyJiZpIGluc3RhbmNlb2YgTWUmJmkuaW5zZXJ0QmVmb3JlKG8sciksdGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPVZlKHQpLGk9VmUoZSk7biYmaSYmbiBpbnN0YW5jZW9mIE1lJiZuLnJlbW92ZUNoaWxkKGkpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KSxuPXJhKCk7cmV0dXJuIG4mJnplKG5ldyBNZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1WZSh0KTtyJiZyIGluc3RhbmNlb2YgTWUmJihyLmF0dHJpYnV0ZXNbaT9pKyI6IitlOmVdPW4pLHRoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVZlKHQpO2kmJmkgaW5zdGFuY2VvZiBNZSYmKGkuYXR0cmlidXRlc1tuP24rIjoiK2U6ZV09bnVsbCksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPVZlKHQpO24mJm4gaW5zdGFuY2VvZiBNZSYmKG4uY2xhc3Nlc1tlXT0hMCksdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPVZlKHQpO24mJm4gaW5zdGFuY2VvZiBNZSYmKG4uY2xhc3Nlc1tlXT0hMSksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1WZSh0KTtyJiZyIGluc3RhbmNlb2YgTWUmJihyLnN0eWxlc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9VmUodCk7aSYmaSBpbnN0YW5jZW9mIE1lJiYoaS5zdHlsZXNbZV09bnVsbCksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsbil9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1WZSh0KTtpJiZpIGluc3RhbmNlb2YgTWUmJihpLnByb3BlcnRpZXNbZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgaT1WZSh0KTtpJiZpLmxpc3RlbmVycy5wdXNoKG5ldyBmdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMuY2FsbGJhY2s9ZX0oZSxuKSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0fSgpO2Z1bmN0aW9uIHNhKHQsZSxuKXtyZXR1cm4gbmV3IGxhKHQsZSxuKX12YXIgbGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLm1vZHVsZVR5cGU9ZSxyLl9ib290c3RyYXBDb21wb25lbnRzPW4sci5fbmdNb2R1bGVEZWZGYWN0b3J5PWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKCl7aWYoIXhvKXt4bz0hMDt2YXIgdD1kZSgpP3tzZXRDdXJyZW50Tm9kZTpRbyxjcmVhdGVSb290VmlldzpTbyxjcmVhdGVFbWJlZGRlZFZpZXc6RW8sY3JlYXRlQ29tcG9uZW50VmlldzprbyxjcmVhdGVOZ01vZHVsZVJlZjpqbyxvdmVycmlkZVByb3ZpZGVyOkFvLG92ZXJyaWRlQ29tcG9uZW50VmlldzpQbyxjbGVhck92ZXJyaWRlczpEbyxjaGVja0FuZFVwZGF0ZVZpZXc6Rm8sY2hlY2tOb0NoYW5nZXNWaWV3OlZvLGRlc3Ryb3lWaWV3OnpvLGNyZWF0ZURlYnVnQ29udGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgZWEodCxlKX0saGFuZGxlRXZlbnQ6R28sdXBkYXRlRGlyZWN0aXZlczpabyx1cGRhdGVSZW5kZXJlcjpXb306e3NldEN1cnJlbnROb2RlOmZ1bmN0aW9uKCl7fSxjcmVhdGVSb290VmlldzpDbyxjcmVhdGVFbWJlZGRlZFZpZXc6bm8sY3JlYXRlQ29tcG9uZW50VmlldzpybyxjcmVhdGVOZ01vZHVsZVJlZjpkcixvdmVycmlkZVByb3ZpZGVyOlhuLG92ZXJyaWRlQ29tcG9uZW50VmlldzpYbixjbGVhck92ZXJyaWRlczpYbixjaGVja0FuZFVwZGF0ZVZpZXc6dW8sY2hlY2tOb0NoYW5nZXNWaWV3OmxvLGRlc3Ryb3lWaWV3Om1vLGNyZWF0ZURlYnVnQ29udGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgZWEodCxlKX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIHQuZGVmLmhhbmRsZUV2ZW50KHQsZSxuLGkpfSx1cGRhdGVEaXJlY3RpdmVzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZURpcmVjdGl2ZXMoMD09PWU/Tm86TG8sdCl9LHVwZGF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZVJlbmRlcmVyKDA9PT1lP05vOkxvLHQpfX07Wm4uc2V0Q3VycmVudE5vZGU9dC5zZXRDdXJyZW50Tm9kZSxabi5jcmVhdGVSb290Vmlldz10LmNyZWF0ZVJvb3RWaWV3LFpuLmNyZWF0ZUVtYmVkZGVkVmlldz10LmNyZWF0ZUVtYmVkZGVkVmlldyxabi5jcmVhdGVDb21wb25lbnRWaWV3PXQuY3JlYXRlQ29tcG9uZW50Vmlldyxabi5jcmVhdGVOZ01vZHVsZVJlZj10LmNyZWF0ZU5nTW9kdWxlUmVmLFpuLm92ZXJyaWRlUHJvdmlkZXI9dC5vdmVycmlkZVByb3ZpZGVyLFpuLm92ZXJyaWRlQ29tcG9uZW50Vmlldz10Lm92ZXJyaWRlQ29tcG9uZW50Vmlldyxabi5jbGVhck92ZXJyaWRlcz10LmNsZWFyT3ZlcnJpZGVzLFpuLmNoZWNrQW5kVXBkYXRlVmlldz10LmNoZWNrQW5kVXBkYXRlVmlldyxabi5jaGVja05vQ2hhbmdlc1ZpZXc9dC5jaGVja05vQ2hhbmdlc1ZpZXcsWm4uZGVzdHJveVZpZXc9dC5kZXN0cm95Vmlldyxabi5yZXNvbHZlRGVwPVByLFpuLmNyZWF0ZURlYnVnQ29udGV4dD10LmNyZWF0ZURlYnVnQ29udGV4dCxabi5oYW5kbGVFdmVudD10LmhhbmRsZUV2ZW50LFpuLnVwZGF0ZURpcmVjdGl2ZXM9dC51cGRhdGVEaXJlY3RpdmVzLFpuLnVwZGF0ZVJlbmRlcmVyPXQudXBkYXRlUmVuZGVyZXIsWm4uZGlydHlQYXJlbnRRdWVyaWVzPXpyfX0oKTt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5mcm9tKHQucHJvdmlkZXJzKSxuPUFycmF5LmZyb20odC5tb2R1bGVzKSxpPXt9O2Zvcih2YXIgciBpbiB0LnByb3ZpZGVyc0J5S2V5KWlbcl09dC5wcm92aWRlcnNCeUtleVtyXTtyZXR1cm57ZmFjdG9yeTp0LmZhY3RvcnksaXNSb290OnQuaXNSb290LHByb3ZpZGVyczplLG1vZHVsZXM6bixwcm92aWRlcnNCeUtleTppfX0od2kodGhpcy5fbmdNb2R1bGVEZWZGYWN0b3J5KSk7cmV0dXJuIFpuLmNyZWF0ZU5nTW9kdWxlUmVmKHRoaXMubW9kdWxlVHlwZSx0fHxELk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0ocXQpO2Z1bmN0aW9uIHVhKHQsZSxuKXt0IT1lJiZmYShuKX1mdW5jdGlvbiBjYSh0LGUpe251bGw9PXQmJmZhKGUpfWZ1bmN0aW9uIGZhKHQpe3Rocm93IG5ldyBFcnJvcigiQVNTRVJUSU9OIEVSUk9SOiAiK3QpfXZhciBkYT0xNixoYT0wLHBhPTEsbWE9MixiYT0zLHlhPTQsdmE9NSxnYT02LF9hPTcsd2E9OCx4YT05LENhPTEwLFNhPTExLE9hPTE0O2Z1bmN0aW9uIEVhKHQsZSxuKXt0LmFmdGVyQ29udGVudEluaXQmJihlLmNvbnRlbnRIb29rc3x8KGUuY29udGVudEhvb2tzPVtdKSkucHVzaChuLHQuYWZ0ZXJDb250ZW50SW5pdCksdC5hZnRlckNvbnRlbnRDaGVja2VkJiYoKGUuY29udGVudEhvb2tzfHwoZS5jb250ZW50SG9va3M9W10pKS5wdXNoKG4sdC5hZnRlckNvbnRlbnRDaGVja2VkKSwoZS5jb250ZW50Q2hlY2tIb29rc3x8KGUuY29udGVudENoZWNrSG9va3M9W10pKS5wdXNoKG4sdC5hZnRlckNvbnRlbnRDaGVja2VkKSl9ZnVuY3Rpb24ga2EodCxlLG4pe3QuYWZ0ZXJWaWV3SW5pdCYmKGUudmlld0hvb2tzfHwoZS52aWV3SG9va3M9W10pKS5wdXNoKG4sdC5hZnRlclZpZXdJbml0KSx0LmFmdGVyVmlld0NoZWNrZWQmJigoZS52aWV3SG9va3N8fChlLnZpZXdIb29rcz1bXSkpLnB1c2gobix0LmFmdGVyVmlld0NoZWNrZWQpLChlLnZpZXdDaGVja0hvb2tzfHwoZS52aWV3Q2hlY2tIb29rcz1bXSkpLnB1c2gobix0LmFmdGVyVmlld0NoZWNrZWQpKX1mdW5jdGlvbiBqYSh0LGUsbil7bnVsbCE9dC5vbkRlc3Ryb3kmJihlLmRlc3Ryb3lIb29rc3x8KGUuZGVzdHJveUhvb2tzPVtdKSkucHVzaChuLHQub25EZXN0cm95KX1mdW5jdGlvbiBJYSh0LGUsbil7MTYmdFt5YV0mJihUYSh0W19hXSxlLmluaXRIb29rcyxlLmNoZWNrSG9va3MsbiksdFt5YV0mPS0xNyl9ZnVuY3Rpb24gVGEodCxlLG4saSl7dmFyIHI9aT9lOm47ciYmUmEodCxyKX1mdW5jdGlvbiBSYSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bis9MillW24rMV0uY2FsbCh0W2Vbbl1dKX0idW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJmdsb2JhbCk7dmFyIEFhPTAsUGE9NCxEYT0ibmdQcm9qZWN0QXMiO2Z1bmN0aW9uIE1hKHQpe3JldHVybiEhdC5saXN0ZW59dmFyIE5hPXtjcmVhdGVSZW5kZXJlcjpmdW5jdGlvbih0LGUpe3JldHVybiBkb2N1bWVudH19O2Z1bmN0aW9uIExhKHQsZSl7Y2EodCwic2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgbm9kZSIpLHVhKHQudE5vZGUudHlwZSxlLCJzaG91bGQgYmUgYSAiK2Z1bmN0aW9uKHQpe3JldHVybiAxPT10PyJQcm9qZWN0aW9uIjowPT10PyJDb250YWluZXIiOjI9PXQ/IlZpZXciOjM9PXQ/IkVsZW1lbnQiOiI8dW5rbm93bj4ifShlKSl9ZnVuY3Rpb24gRmEodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dFswXTp0fWZ1bmN0aW9uIFZhKHQpe2lmKDI9PT10LnROb2RlLnR5cGUpe3ZhciBlPXQuZGF0YTtyZXR1cm4gZVttYV0/ZVttYV1bdmFdOm51bGx9cmV0dXJuIHQudE5vZGUubmV4dD90LnZpZXdbdC50Tm9kZS5uZXh0LmluZGV4XTpudWxsfWZ1bmN0aW9uIHphKHQpe3JldHVybiB0LnROb2RlLmNoaWxkP0ZhKCgyPT09dC50Tm9kZS50eXBlP3QuZGF0YTp0LnZpZXcpW3QudE5vZGUuY2hpbGQuaW5kZXhdKTpudWxsfWZ1bmN0aW9uIEJhKHQpe2lmKC0xPT09dC50Tm9kZS5pbmRleCYmMj09PXQudE5vZGUudHlwZSl7dmFyIGU9dC5kYXRhW09hXTtyZXR1cm4tMT09PWU/bnVsbDp0LnZpZXdbZV0uZHluYW1pY0xDb250YWluZXJOb2RlfXZhciBuPXQudE5vZGUucGFyZW50O3JldHVybiBGYShuP3Qudmlld1tuLmluZGV4XTp0LnZpZXdbdmFdKX12YXIgVWE9W107ZnVuY3Rpb24gSGEodCl7Zm9yKHZhciBlPXRbdmFdOzI9PT1lLnROb2RlLnR5cGU7KW5nRGV2TW9kZSYmY2EodFtwYV0sImxWaWV3RGF0YS5wYXJlbnQiKSxlPSh0PXRbcGFdKVt2YV07cmV0dXJuIG5nRGV2TW9kZSYmTGEoZSwzKSxuZ0Rldk1vZGUmJmNhKGUuZGF0YSwibm9kZS5kYXRhIiksZX1mdW5jdGlvbiBxYSh0LGUsbixpLHIpezA9PT10P01hKGUpP2UuaW5zZXJ0QmVmb3JlKG4saSxyKTpuLmluc2VydEJlZm9yZShpLHIsITApOjE9PT10P01hKGUpP2UucmVtb3ZlQ2hpbGQobixpKTpuLnJlbW92ZUNoaWxkKGkpOjI9PT10JiYobmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJEZXN0cm95Tm9kZSsrLGUuZGVzdHJveU5vZGUoaSkpfWZ1bmN0aW9uIFFhKHQpe2lmKC0xPT09dFtoYV0uY2hpbGRJbmRleClyZXR1cm4gbnVsbDt2YXIgZT10W3RbaGFdLmNoaWxkSW5kZXhdO3JldHVybiBlLmRhdGE/ZS5kYXRhOmUuZHluYW1pY0xDb250YWluZXJOb2RlLmRhdGF9ZnVuY3Rpb24gR2EodCxlKXt2YXIgbjtyZXR1cm4obj10W3ZhXSkmJjI9PT1uLnROb2RlLnR5cGU/QmEobikuZGF0YTp0W3BhXT09PWU/bnVsbDp0W3BhXX1mdW5jdGlvbiBaYSh0KXtpZih0W2hhXSl7dmFyIGU9dDshZnVuY3Rpb24odCl7dmFyIGU9dFtoYV0uY2xlYW51cDtpZihudWxsIT1lKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoLTE7bis9Mikic3RyaW5nIj09dHlwZW9mIGVbbl0/KEZhKHRbZVtuKzFdXSkubmF0aXZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZVtuXSx0W3dhXVtlW24rMl1dLGVbbiszXSksbis9Mik6Im51bWJlciI9PXR5cGVvZiBlW25dPygwLHRbd2FdW2Vbbl1dKSgpOmVbbl0uY2FsbCh0W3dhXVtlW24rMV1dKTt0W3dhXT1udWxsfX0oZSksZnVuY3Rpb24odCl7dmFyIGUsbj10W2hhXTtudWxsIT1uJiZudWxsIT0oZT1uLmRlc3Ryb3lIb29rcykmJlJhKHRbX2FdLGUpfShlKSwoaT0obj1lKVtoYV0mJm5baGFdLnBpcGVEZXN0cm95SG9va3MpJiZSYShuLGkpLC0xPT09ZVtoYV0uaWQmJk1hKGVbU2FdKSYmKG5nRGV2TW9kZSYmbmdEZXZNb2RlLnJlbmRlcmVyRGVzdHJveSsrLGVbU2FdLmRlc3Ryb3koKSl9dmFyIG4saX12YXIgV2EsWWEsS2EsWGEsJGEsSmEsdHMsZXMsbnMsaXM9Il9fbmdIb3N0TE5vZGVfXyIscnM9UHJvbWlzZS5yZXNvbHZlKG51bGwpLG9zPVswLDBdLGFzPW5ldyBBcnJheShkYSkuZmlsbChudWxsKSxzcz0hMSxscz0hMDtmdW5jdGlvbiB1cyh0LGUpe3ZhciBuPWVzO3JldHVybiBucz10JiZ0W19hXSwkYT10JiZ0W2hhXSx0cz10JiYxPT0oMSZ0W3lhXSksbHM9dCYmJGEuZmlyc3RUZW1wbGF0ZVBhc3MsV2E9dCYmdFtTYV0sbnVsbCE9ZSYmKEthPWUsWGE9ITApLGVzPXQsSmE9dCYmdFtiYV0sbn1mdW5jdGlvbiBjcyh0LGUpe2V8fChzc3x8VGEobnMsJGEudmlld0hvb2tzLCRhLnZpZXdDaGVja0hvb2tzLHRzKSxlc1t5YV0mPS02KSxlc1t5YV18PTE2LGVzW2dhXT0tMSx1cyh0LG51bGwpfWZ1bmN0aW9uIGZzKCl7c3N8fElhKGVzLCRhLHRzKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9UWEoZXMpO251bGwhPT1lO2U9ZVttYV0paWYoZS5sZW5ndGg8ZGEmJm51bGw9PT1lW0FhXSlmb3IodmFyIG49ZSxpPTA7aTxuW1BhXS5sZW5ndGg7aSsrKXt2YXIgcj1uW1BhXVtpXSxvPXIuZGF0YTtuZ0Rldk1vZGUmJmNhKG9baGFdLCJUVmlldyBtdXN0IGJlIGFsbG9jYXRlZCIpLG1zKHIsb1toYV0sb1t4YV0sMil9fSgpLHNzfHxUYShucywkYS5jb250ZW50SG9va3MsJGEuY29udGVudENoZWNrSG9va3MsdHMpLCRhLmZpcnN0VGVtcGxhdGVQYXNzPWxzPSExLGRzKCRhLmhvc3RCaW5kaW5ncyksZnVuY3Rpb24odCl7aWYobnVsbCE9dC5jb250ZW50UXVlcmllcylmb3IodmFyIGU9MDtlPHQuY29udGVudFF1ZXJpZXMubGVuZ3RoO2UrPTIpe3ZhciBuPXQuY29udGVudFF1ZXJpZXNbZV07dC5kaXJlY3RpdmVzW25dLmNvbnRlbnRRdWVyaWVzUmVmcmVzaChuLHQuY29udGVudFF1ZXJpZXNbZSsxXSl9fSgkYSksZnVuY3Rpb24odCl7aWYobnVsbCE9dClmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrPTIpQ3ModFtlXSx0W2UrMV0pfSgkYS5jb21wb25lbnRzKX1mdW5jdGlvbiBkcyh0KXtpZihudWxsIT10KWZvcih2YXIgZT0kYS5kaXJlY3RpdmVzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciBpPXRbbl0scj1lW2ldO3IuaG9zdEJpbmRpbmdzJiZyLmhvc3RCaW5kaW5ncyhpLHRbbisxXSl9fWZ1bmN0aW9uIGhzKHQsZSxuLGkscil7cmV0dXJuW2UsZXMsbnVsbCxudWxsLDI1fGksbnVsbCwtMSxudWxsLG51bGwsbixlcyYmZXNbQ2FdLHQscnx8bnVsbCxudWxsLC0xLG51bGxdfWZ1bmN0aW9uIHBzKHQsZSxuLGkscixvKXt2YXIgYT1YYT9LYTpLYSYmQmEoS2EpLHM9YSYmYS52aWV3PT09ZXM/YS50Tm9kZTpudWxsLGw9KFhhP0phOkthJiZLYS5xdWVyaWVzKXx8YSYmYS5xdWVyaWVzJiZhLnF1ZXJpZXMuY2hpbGQoKSx1PW51bGwhPW8sYz1mdW5jdGlvbih0LGUsbixpLHIsbyl7cmV0dXJue25hdGl2ZTppLHZpZXc6ZXMsbm9kZUluamVjdG9yOm4/bi5ub2RlSW5qZWN0b3I6bnVsbCxkYXRhOnIscXVlcmllczpvLHROb2RlOm51bGwsZHluYW1pY0xDb250YWluZXJOb2RlOm51bGx9fSgwLDAsYSxuLHU/bzpudWxsLGwpO2lmKC0xPT09dHx8Mj09PWUpYy50Tm9kZT0obz9vW2hhXS5ub2RlOm51bGwpfHx4cyhlLHQsbnVsbCxudWxsLHMsbnVsbCk7ZWxzZXt2YXIgZj10K2RhO25nRGV2TW9kZSYmVHMoZik7dmFyIGQ9JGEuZGF0YTtpZihlc1tmXT1jLGY+PWQubGVuZ3RoKXt2YXIgaD1kW2ZdPXhzKGUsZixpLHIscyxudWxsKTtpZighWGEmJkthKXt2YXIgcD1LYS50Tm9kZTtwLm5leHQ9aCxwLmR5bmFtaWNDb250YWluZXJOb2RlJiYocC5keW5hbWljQ29udGFpbmVyTm9kZS5uZXh0PWgpfX1jLnROb2RlPWRbZl0sWGEmJihKYT1udWxsLChudWxsPT1LYS50Tm9kZS5jaGlsZCYmS2Eudmlldz09PWVzfHwyPT09S2EudE5vZGUudHlwZSkmJihLYS50Tm9kZS5jaGlsZD1jLnROb2RlKSl9aWYoMj09KDImZSkmJnUpe3ZhciBtPW87bmdEZXZNb2RlJiZudWxsIT1tW3ZhXSYmZmEoImxWaWV3RGF0YVtIT1NUX05PREVdIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksbVt2YV09YyxscyYmKG1baGFdLm5vZGU9Yy50Tm9kZSl9cmV0dXJuIEthPWMsWGE9ITAsY31mdW5jdGlvbiBtcyh0LGUsbixpKXt2YXIgcixvPVhhLGE9S2E7aWYobnVsbD09dC5kYXRhW3BhXSYmdC5kYXRhW3hhXSYmIWUudGVtcGxhdGUpT3ModC5kYXRhW3hhXSk7ZWxzZSB0cnl7WGE9ITAsS2E9bnVsbCxyPXVzKHQuZGF0YSx0KSxncygpLGUudGVtcGxhdGUoaSxuKSwyJmk/ZnMoKTp0LmRhdGFbaGFdLmZpcnN0VGVtcGxhdGVQYXNzPWxzPSExfWZpbmFsbHl7Y3MociwxPT0oMSZpKSksWGE9byxLYT1hfXJldHVybiB0fWZ1bmN0aW9uIGJzKHQsZSxuLGkpe3ZhciByPXVzKGUsdCk7dHJ5e1lhLmJlZ2luJiZZYS5iZWdpbigpLGk/KGdzKCksaSh5cyhlKSxuKSxmcygpKTooc3N8fChJYShlcywkYSx0cyksVGEobnMsJGEuY29udGVudEhvb2tzLCRhLmNvbnRlbnRDaGVja0hvb2tzLHRzKSksZHMob3MpLENzKDAsZGEpKX1maW5hbGx5e1lhLmVuZCYmWWEuZW5kKCksY3Mocil9fWZ1bmN0aW9uIHlzKHQpe3JldHVybiAxJnRbeWFdPzM6Mn12YXIgdnM9bnVsbDtmdW5jdGlvbiBncygpe3ZzPW51bGx9ZnVuY3Rpb24gX3ModCxlLG4saSxyKXtyZXR1cm4gbmdEZXZNb2RlJiZuZ0Rldk1vZGUudFZpZXcrKyx7aWQ6dCx0ZW1wbGF0ZTplLHZpZXdRdWVyeTpyLG5vZGU6bnVsbCxkYXRhOmFzLnNsaWNlKCksY2hpbGRJbmRleDotMSxiaW5kaW5nU3RhcnRJbmRleDotMSxkaXJlY3RpdmVzOm51bGwsZmlyc3RUZW1wbGF0ZVBhc3M6ITAsaW5pdEhvb2tzOm51bGwsY2hlY2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxwaXBlRGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGhvc3RCaW5kaW5nczpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBuP24oKTpuLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgaT9pKCk6aSxjdXJyZW50TWF0Y2hlczpudWxsfX1mdW5jdGlvbiB3cyh0LGUpe25nRGV2TW9kZSYmSXMoLTEpLFlhPXQ7dmFyIG4saT10LmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCkscj0ic3RyaW5nIj09dHlwZW9mIGU/TWEoaSk/aS5zZWxlY3RSb290RWxlbWVudChlKTppLnF1ZXJ5U2VsZWN0b3IoZSk6ZTtpZihuZ0Rldk1vZGUmJiFyKXRocm93IG5ldyBFcnJvcigiUmVuZGVyZXI6ICIrKCJzdHJpbmciPT10eXBlb2YgZT8iSG9zdCBub2RlIHdpdGggc2VsZWN0b3Igbm90IGZvdW5kOiI6Ikhvc3Qgbm9kZSBpcyByZXF1aXJlZDoiKSsiIFsiKygiZnVuY3Rpb24iPT10eXBlb2Yobj1lKT9uLm5hbWV8fG46InN0cmluZyI9PXR5cGVvZiBuP246bnVsbD09bj8iIjoiIituKSsiXSIpO3JldHVybiByfWZ1bmN0aW9uIHhzKHQsZSxuLGkscixvKXtyZXR1cm4gbmdEZXZNb2RlJiZuZ0Rldk1vZGUudE5vZGUrKyx7dHlwZTp0LGluZGV4OmUsZmxhZ3M6MCx0YWdOYW1lOm4sYXR0cnM6aSxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czp2b2lkIDAsaW5wdXRzOnZvaWQgMCxvdXRwdXRzOnZvaWQgMCx0Vmlld3M6byxuZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6cixkeW5hbWljQ29udGFpbmVyTm9kZTpudWxsLGRldGFjaGVkOm51bGwsc3R5bGluZ1RlbXBsYXRlOm51bGwscHJvamVjdGlvbjpudWxsfX1mdW5jdGlvbiBDcyh0LGUpe25nRGV2TW9kZSYmSXMoZSk7dmFyIG49ZXNbZV07bmdEZXZNb2RlJiZMYShuLDMpLG5nRGV2TW9kZSYmY2Eobi5kYXRhLCJDb21wb25lbnQncyBob3N0IG5vZGUgc2hvdWxkIGhhdmUgYW4gTFZpZXdEYXRhIGF0dGFjaGVkLiIpO3ZhciBpPW4uZGF0YTtTcyhpKSYmNiZpW3lhXSYmKG5nRGV2TW9kZSYmSXModCxucyksanMoaSxuLG5zW3RdKSl9ZnVuY3Rpb24gU3ModCl7cmV0dXJuIDg9PSg4JnRbeWFdKX1mdW5jdGlvbiBPcyh0KXtmb3IodmFyIGU9MDtlPHQuY29tcG9uZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj10LmNvbXBvbmVudHNbZV0saT1ScyhuKTtuZ0Rldk1vZGUmJmNhKGkuZGF0YSwiQ29tcG9uZW50IGhvc3Qgbm9kZSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gYW4gTFZpZXciKSxicyhpLEVzKG4pLG4pfX1mdW5jdGlvbiBFcyh0KXtuZ0Rldk1vZGUmJmNhKHQsImNvbXBvbmVudCIpO2Zvcih2YXIgZT1Scyh0KS52aWV3O2VbcGFdOyllPWVbcGFdO3JldHVybiBlfWZ1bmN0aW9uIGtzKHQpe3ZhciBlPVJzKHQpO25nRGV2TW9kZSYmY2EoZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlld0RhdGEgaW5zdGFuY2UuIiksanMoZS5kYXRhLGUsdCl9ZnVuY3Rpb24ganModCxlLG4pe3ZhciBpPXVzKHQsZSkscj10W2hhXSxvPXIudGVtcGxhdGUsYT1yLnZpZXdRdWVyeTt0cnl7Z3MoKSxmdW5jdGlvbihlLG4saSl7ZSYmMSZ0W3lhXSYmZSgxLGkpfShhLDAsbiksbyh5cyh0KSxuKSxmcygpLGZ1bmN0aW9uKHQsZSl7dCYmdCgyLGUpfShhLG4pfWZpbmFsbHl7Y3MoaSl9fWZ1bmN0aW9uIElzKHQsZSl7bnVsbD09ZSYmKGU9ZXMpLGZ1bmN0aW9uKHQsZSl7dD49KGU/ZS5sZW5ndGg6MCkmJmZhKCJpbmRleCBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGRhdGEgaW5kZXgiKX0odCxlfHxlcyl9ZnVuY3Rpb24gVHModCxlKXtudWxsPT1lJiYoZT1lcyksdWEoZS5sZW5ndGgsdCwiaW5kZXggIit0KyIgZXhwZWN0ZWQgdG8gYmUgYXQgdGhlIGVuZCBvZiBhcnIgKGxlbmd0aCAiK2UubGVuZ3RoKyIpIil9ZnVuY3Rpb24gUnModCl7bmdEZXZNb2RlJiZjYSh0LCJleHBlY3RpbmcgY29tcG9uZW50IGdvdCBudWxsIik7dmFyIGU9dFtpc107cmV0dXJuIG5nRGV2TW9kZSYmY2EodCwib2JqZWN0IGlzIG5vdCBhIGNvbXBvbmVudCIpLGV9dmFyIEFzPXJzO2Z1bmN0aW9uIFBzKHQpe3JldHVybntjb21wb25lbnRzOltdLHNjaGVkdWxlcjp0LGNsZWFuOkFzfX12YXIgRHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlldz10LHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9bnVsbCx0aGlzLl9sVmlld05vZGU9bnVsbCx0aGlzLmNvbnRleHQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldENvbXBvbmVudENvbnRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92aWV3PXQsdGhpcy5jb250ZXh0PWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDMyPT0oMzImdGhpcy5fdmlld1t5YV0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdCxlO3RoaXMuX3ZpZXdDb250YWluZXJSZWYmJlNzKHRoaXMuX3ZpZXcpJiYodGhpcy5fdmlld0NvbnRhaW5lclJlZi5kZXRhY2godGhpcy5fdmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHRoaXMpKSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwpLE1hKGU9KHQ9dGhpcy5fdmlldylbU2FdKSYmZS5kZXN0cm95Tm9kZSYmZnVuY3Rpb24oZSxuLGkscixvLGEpe2Zvcih2YXIgcz10W3ZhXSxsPS0xO3M7KXt2YXIgdT1udWxsLGM9cy50Tm9kZS50eXBlO2lmKDM9PT1jKXFhKDIscixudWxsLHMubmF0aXZlLGEpLHMuZHluYW1pY0xDb250YWluZXJOb2RlJiZxYSgyLHIsbnVsbCxzLmR5bmFtaWNMQ29udGFpbmVyTm9kZS5uYXRpdmUsYSk7ZWxzZSBpZigwPT09Yyl7cWEoMixyLG51bGwscy5uYXRpdmUsYSk7dmFyIGY9cyxkPWYuZHluYW1pY0xDb250YWluZXJOb2RlP2YuZHluYW1pY0xDb250YWluZXJOb2RlLmRhdGE6Zi5kYXRhOyh1PWRbUGFdLmxlbmd0aD96YShkW1BhXVswXSk6bnVsbCkmJihhPWYuZHluYW1pY0xDb250YWluZXJOb2RlP2YuZHluYW1pY0xDb250YWluZXJOb2RlLm5hdGl2ZTpmLm5hdGl2ZSl9ZWxzZSBpZigxPT09Yyl7dmFyIGg9SGEocy52aWV3KSxwPWgudE5vZGUucHJvamVjdGlvbltzLnROb2RlLnByb2plY3Rpb25dO1VhWysrbF09cyx1PXA/aC5kYXRhW3BhXVtwLmluZGV4XTpudWxsfWVsc2UgdT16YShzKTtpZihudWxsPT09dSlmb3IobnVsbD09PSh1PVZhKHMpKSYmODE5MiZzLnROb2RlLmZsYWdzJiYodT1WYShVYVtsLS1dKSk7cyYmIXU7KXtpZihudWxsPT09KHM9QmEocykpfHxzPT09bilyZXR1cm4gbnVsbDtzLnROb2RlLm5leHR8fDAhPT1jfHwoYT1zLm5hdGl2ZSksdT1WYShzKX1zPXV9fSgwLHRbdmFdLDAsZSksZnVuY3Rpb24odCl7aWYoLTE9PT10W2hhXS5jaGlsZEluZGV4KXJldHVybiBaYSh0KTtmb3IodmFyIGU9UWEodCk7ZTspe3ZhciBuPW51bGw7aWYoZS5sZW5ndGg+PWRhP2VbaGFdLmNoaWxkSW5kZXg+LTEmJihuPVFhKGUpKTplW1BhXS5sZW5ndGgmJihuPWVbUGFdWzBdLmRhdGEpLG51bGw9PW4pe2Zvcig7ZSYmIWVbbWFdJiZlIT09dDspWmEoZSksZT1HYShlLHQpO1phKGV8fHQpLG49ZSYmZVttYV19ZT1ufX0odCksdFt5YV18PTMyfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dmFyIGUsbjtuPXQsZnVuY3Rpb24odCl7cmV0dXJuIHRbd2FdfHwodFt3YV09W10pfShlPXRoaXMuX3ZpZXcpLnB1c2gobiksZVtoYV0uZmlyc3RUZW1wbGF0ZVBhc3MmJmZ1bmN0aW9uKHQpe3JldHVybiB0W2hhXS5jbGVhbnVwfHwodFtoYV0uY2xlYW51cD1bXSl9KGUpLnB1c2goZVt3YV0ubGVuZ3RoLTEsbnVsbCl9LHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9dDtudWxsIT1lW3BhXTspZVt5YV18PTQsZT1lW3BhXTt2YXIgbixpO2VbeWFdfD00LG5nRGV2TW9kZSYmY2EoZVt4YV0sInJvb3RDb250ZXh0IiksKG49ZVt4YV0pLmNsZWFuPT1ycyYmKG4uY2xlYW49bmV3IFByb21pc2UoZnVuY3Rpb24odCl7cmV0dXJuIGk9dH0pLG4uc2NoZWR1bGVyKGZ1bmN0aW9uKCl7T3MobiksaShudWxsKSxuLmNsZWFuPXJzfSkpfSh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlld1t5YV0mPS05fSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXdbeWFdfD04fSx0LnByb3RvdHlwZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7a3ModGhpcy5jb250ZXh0KX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7c3M9ITA7dHJ5e2tzKHQpfWZpbmFsbHl7c3M9ITF9fSh0aGlzLmNvbnRleHQpfSx0LnByb3RvdHlwZS5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWY9ZnVuY3Rpb24odCl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0LnByb3RvdHlwZS5kZXRhY2hGcm9tQXBwUmVmPWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmPW51bGx9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe3RoaXMuX2FwcFJlZj10fSx0fSgpLE1zPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3JldHVybiBuZ0Rldk1vZGUmJih2b2lkIDA9PT1lJiYoZT0iVHlwZSBwYXNzZWQgaW4gaXMgbm90IENvbXBvbmVudFR5cGUsIGl0IGRvZXMgbm90IGhhdmUgJ25nQ29tcG9uZW50RGVmJyBwcm9wZXJ0eS4iKSx0Lm5nQ29tcG9uZW50RGVmfHxmYShlKSksbmV3IFZzKHQubmdDb21wb25lbnREZWYpO3ZhciBlfSxlfSh6dCk7ZnVuY3Rpb24gTnModCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZS5wdXNoKHtwcm9wTmFtZTp0W25dLHRlbXBsYXRlTmFtZTpufSk7cmV0dXJuIGV9dmFyIExzPW5ldyBjKCJST09UX0NPTlRFWFRfVE9LRU4iLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFBzKEsoRnMpKX19KSxGcz1uZXcgYygiU0NIRURVTEVSX1RPS0VOIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpfX0pLFZzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmNvbXBvbmVudERlZj1lLG4uY29tcG9uZW50VHlwZT1lLnR5cGUsbi5zZWxlY3Rvcj1lLnNlbGVjdG9yc1swXVswXSxuLm5nQ29udGVudFNlbGVjdG9ycz1bXSxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5wdXRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5zKHRoaXMuY29tcG9uZW50RGVmLmlucHV0cyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvdXRwdXRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5zKHRoaXMuY29tcG9uZW50RGVmLm91dHB1dHMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcixvLGE9dm9pZCAwPT09bixzPWk/aS5pbmplY3Rvci5nZXQoX2UpOk5hLGw9YT8ocj10aGlzLnNlbGVjdG9yLE1hKG89cy5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmLnJlbmRlcmVyVHlwZSl8fFdhKT9vLmNyZWF0ZUVsZW1lbnQocix2cyk6bnVsbD09PXZzP28uY3JlYXRlRWxlbWVudChyKTpvLmNyZWF0ZUVsZW1lbnROUyh2cyxyKSk6d3MocyxuKSx1PWkmJiFhP2kuaW5qZWN0b3IuZ2V0KExzKTpQcyhyZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpKSxjPWhzKHMuY3JlYXRlUmVuZGVyZXIobCx0aGlzLmNvbXBvbmVudERlZi5yZW5kZXJlclR5cGUpLF9zKC0xLG51bGwsbnVsbCxudWxsLG51bGwpLHUsdGhpcy5jb21wb25lbnREZWYub25QdXNoPzQ6Mik7Y1tDYV09aSYmaS5pbmplY3Rvcnx8bnVsbDt2YXIgZixkLGg9dXMoYyxudWxsKTt0cnl7aWYocy5iZWdpbiYmcy5iZWdpbigpLGQ9ZnVuY3Rpb24odCxlLG4saSl7WGE9ITEsS2E9bnVsbDt2YXIgcixvPXBzKDAsMyxlLG51bGwsbnVsbCxocyhXYSwocj1uLnRlbXBsYXRlKS5uZ1ByaXZhdGVEYXRhfHwoci5uZ1ByaXZhdGVEYXRhPV9zKC0xLHIsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnkpKSxudWxsLG4ub25QdXNoPzQ6MixpKSk7cmV0dXJuIGxzJiYoby50Tm9kZS5mbGFncz00MDk2LG4uZGlQdWJsaWMmJm4uZGlQdWJsaWMobiksJGEuZGlyZWN0aXZlcz1bbl0pLG99KDAsbCx0aGlzLmNvbXBvbmVudERlZiksdS5jb21wb25lbnRzLnB1c2goZj1mdW5jdGlvbih0LGUsbil7aWYobmdEZXZNb2RlJiZ1YShlc1tnYV0sLTEsImRpcmVjdGl2ZXMgc2hvdWxkIGJlIGNyZWF0ZWQgYmVmb3JlIGFueSBiaW5kaW5ncyIpLG5nRGV2TW9kZSYmdWEoWGEsITAsInByZXZpb3VzT3JQYXJlbnROb2RlIHNob3VsZCBiZSBhIHBhcmVudCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGlzLHtlbnVtZXJhYmxlOiExLHZhbHVlOkthfSksbnVsbD09bnMmJihlc1tfYV09bnM9W10pLG5nRGV2TW9kZSYmVHModCxucyksbnNbdF09ZSxscyl7dmFyIGk9S2EudE5vZGUuZmxhZ3M7MD09KDQwOTUmaSk/S2EudE5vZGUuZmxhZ3M9dDw8MTR8NDA5NiZpfDE6KG5nRGV2TW9kZSYmNDA5NT09KDQwOTUmaSkmJmZhKCJSZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIGRpcmVjdGl2ZXMiKSxLYS50Tm9kZS5mbGFncysrKX1lbHNle3ZhciByPW4uZGlQdWJsaWM7ciYmcihuKX1yZXR1cm4gbnVsbCE9bi5hdHRyaWJ1dGVzJiYzPT1LYS50Tm9kZS50eXBlJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1NYShXYSksaT0wO2k8ZS5sZW5ndGg7KXt2YXIgcj1lW2ldO2lmKDE9PT1yKWJyZWFrO2lmKHI9PT1EYSlpKz0yO2Vsc2UgaWYobmdEZXZNb2RlJiZuZ0Rldk1vZGUucmVuZGVyZXJTZXRBdHRyaWJ1dGUrKywwPT09cil7dmFyIG89ZVtpKzFdLGE9ZVtpKzJdLHM9ZVtpKzNdO24/V2Euc2V0QXR0cmlidXRlKHQsYSxzLG8pOnQuc2V0QXR0cmlidXRlTlMobyxhLHMpLGkrPTR9ZWxzZSBzPWVbaSsxXSxuP1dhLnNldEF0dHJpYnV0ZSh0LHIscyk6dC5zZXRBdHRyaWJ1dGUocixzKSxpKz0yfX0oS2EubmF0aXZlLG4uYXR0cmlidXRlcyksZX0oMCx0aGlzLmNvbXBvbmVudERlZi5mYWN0b3J5KCksdGhpcy5jb21wb25lbnREZWYpKSxmdW5jdGlvbih0LGUsbil7dCYmbnVsbCE9dC5jaGFuZ2VEZXRlY3RvclJlZiYmdC5jaGFuZ2VEZXRlY3RvclJlZi5fc2V0Q29tcG9uZW50Q29udGV4dChkLmRhdGEsZil9KGQubm9kZUluamVjdG9yKSxmdW5jdGlvbih0LGUpe3ZhciBuPVJzKHQpLGk9bi52aWV3W2hhXTsoZnVuY3Rpb24odCxlLG4saSl7bmdEZXZNb2RlJiZ1YShpLmZpcnN0VGVtcGxhdGVQYXNzLCEwLCJTaG91bGQgb25seSBiZSBjYWxsZWQgb24gZmlyc3QgdGVtcGxhdGUgcGFzcyIpLGUmJihpLmluaXRIb29rc3x8KGkuaW5pdEhvb2tzPVtdKSkucHVzaCgwLGUpLG4mJigoaS5pbml0SG9va3N8fChpLmluaXRIb29rcz1bXSkpLnB1c2goMCxuKSwoaS5jaGVja0hvb2tzfHwoaS5jaGVja0hvb2tzPVtdKSkucHVzaCgwLG4pKX0pKDAsZS5vbkluaXQsZS5kb0NoZWNrLGkpLGZ1bmN0aW9uKHQsZSl7aWYoZS5maXJzdFRlbXBsYXRlUGFzcylmb3IodmFyIG49dD4+MTQsaT1uKyg0MDk1JnQpLHI9bjtyPGk7cisrKXt2YXIgbz1lLmRpcmVjdGl2ZXNbcl07RWEobyxlLHIpLGthKG8sZSxyKSxqYShvLGUscil9fShuLnROb2RlLmZsYWdzLGkpfShmLHRoaXMuY29tcG9uZW50RGVmKSxlKWZvcih2YXIgcD0wLG09ZC50Tm9kZS5wcm9qZWN0aW9uPVtdLGI9MDtiPGUubGVuZ3RoO2IrKyl7Zm9yKHZhciB5PWVbYl0sdj1udWxsLGc9bnVsbCxfPTA7Xzx5Lmxlbmd0aDtfKyspe3ZhciB3PXBzKCsrcCwzLHlbX10sbnVsbCxudWxsKTtnP2cubmV4dD13LnROb2RlOnY9dy50Tm9kZSxnPXcudE5vZGV9bS5wdXNoKHYpfW1zKGQsZC5kYXRhW2hhXSxmLDEpLGQuZGF0YVt5YV0mPS0yfWZpbmFsbHl7dXMoaCxudWxsKSxzLmVuZCYmcy5lbmQoKX12YXIgeD1uZXcgenModGhpcy5jb21wb25lbnRUeXBlLGYsYyx0LGwpO3JldHVybiBhJiYoeC5ob3N0Vmlldy5fbFZpZXdOb2RlLnROb2RlLmNoaWxkPWQudE5vZGUpLHh9LGV9KER0KSx6cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyl7dmFyIGE9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBhLmRlc3Ryb3lDYnM9W10sYS5pbnN0YW5jZT1uLGEuaG9zdFZpZXc9YS5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgRHMoaSxuKSxhLmhvc3RWaWV3Ll9sVmlld05vZGU9cHMoLTEsMixudWxsLG51bGwsbnVsbCxpKSxhLmluamVjdG9yPXIsYS5sb2NhdGlvbj1uZXcgQ2UobyksYS5jb21wb25lbnRUeXBlPWUsYX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7bmdEZXZNb2RlJiZjYSh0aGlzLmRlc3Ryb3lDYnMsIk5nTW9kdWxlIGFscmVhZHkgZGVzdHJveWVkIiksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuZGVzdHJveUNicz1udWxsfSxlLnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7bmdEZXZNb2RlJiZjYSh0aGlzLmRlc3Ryb3lDYnMsIk5nTW9kdWxlIGFscmVhZHkgZGVzdHJveWVkIiksdGhpcy5kZXN0cm95Q2JzLnB1c2godCl9LGV9KFB0KSxCcz17cHJvdmlkZTp6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNc30sZGVwczpbXX0sVXM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztpLl9ib290c3RyYXBDb21wb25lbnRzPVtdLGkuZGVzdHJveUNicz1bXTt2YXIgcj1lLm5nTW9kdWxlRGVmO3JldHVybiBuZ0Rldk1vZGUmJmNhKHIsIk5nTW9kdWxlICciK3goZSkrIicgaXMgbm90IGEgc3VidHlwZSBvZiAnTmdNb2R1bGVUeXBlJy4iKSxpLl9ib290c3RyYXBDb21wb25lbnRzPXIuYm9vdHN0cmFwLGkuaW5qZWN0b3I9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYoZT1udWxsKSx2b2lkIDA9PT1uJiYobj1udWxsKSxlPWV8fGh0KCksbmV3IHB0KHQsbixlKX0oZSxuLFtCcyx7cHJvdmlkZTpIdCx1c2VWYWx1ZTppfV0pLGkuaW5zdGFuY2U9aS5pbmplY3Rvci5nZXQoZSksaS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IE1zLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe25nRGV2TW9kZSYmY2EodGhpcy5kZXN0cm95Q2JzLCJOZ01vZHVsZSBhbHJlYWR5IGRlc3Ryb3llZCIpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH0sZS5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe25nRGV2TW9kZSYmY2EodGhpcy5kZXN0cm95Q2JzLCJOZ01vZHVsZSBhbHJlYWR5IGRlc3Ryb3llZCIpLHRoaXMuZGVzdHJveUNicy5wdXNoKHQpfSxlfShIdCk7IWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLm1vZHVsZVR5cGU9ZSxufU9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVXModGhpcy5tb2R1bGVUeXBlLHQpfX0ocXQpfSxES1RiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0pfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSl9LEVobWs6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpLHI9bigiZWlocyIpO2Z1bmN0aW9uIG8oKXt0cnl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKHQpe3JldHVybiByLmEuZT10LHIuYX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaT10LG99fSwiRW44KyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCl9LCJGL1hMIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigibmtZNyIpLHI9bigiSVVUYiIpLG89bigiRzVKMSIpLGE9bigiUFU4TCIpO2Z1bmN0aW9uIHMoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49dFt0Lmxlbmd0aC0xXTtzd2l0Y2goT2JqZWN0KGkuYSkobik/dC5wb3AoKTpuPXZvaWQgMCx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBPYmplY3Qoby5iKShuKTtjYXNlIDE6cmV0dXJuIG4/T2JqZWN0KHIuYSkodCxuKTpPYmplY3QoYS5hKSh0WzBdKTtkZWZhdWx0OnJldHVybiBPYmplY3Qoci5hKSh0LG4pfX19LEZGT286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIjJCZGoiKSxvPW4oIjZhaHciKSxhPW4oInB1Z1QiKSxzPW4oIkwvVjkiKSxsPW4oImlMeFEiKSx1PW4oIkRLVGIiKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2goci5zeW5jRXJyb3JWYWx1ZT1udWxsLHIuc3luY0Vycm9yVGhyb3duPSExLHIuc3luY0Vycm9yVGhyb3dhYmxlPSExLHIuaXNTdG9wcGVkPSExLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyLmRlc3RpbmF0aW9uPW8uYTticmVhaztjYXNlIDE6aWYoIWUpe3IuZGVzdGluYXRpb249by5hO2JyZWFrfWlmKCJvYmplY3QiPT10eXBlb2YgZSl7aWYoZChlKSl7dmFyIGE9ZVtzLmFdKCk7ci5zeW5jRXJyb3JUaHJvd2FibGU9YS5zeW5jRXJyb3JUaHJvd2FibGUsci5kZXN0aW5hdGlvbj1hLGEuYWRkKHIpfWVsc2Ugci5zeW5jRXJyb3JUaHJvd2FibGU9ITAsci5kZXN0aW5hdGlvbj1uZXcgZihyLGUpO2JyZWFrfWRlZmF1bHQ6ci5zeW5jRXJyb3JUaHJvd2FibGU9ITAsci5kZXN0aW5hdGlvbj1uZXcgZihyLGUsbixpKX1yZXR1cm4gcn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGVbcy5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmNyZWF0ZT1mdW5jdGlvbih0LG4saSl7dmFyIHI9bmV3IGUodCxuLGkpO3JldHVybiByLnN5bmNFcnJvclRocm93YWJsZT0hMSxyfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50LGU9dGhpcy5fcGFyZW50cztyZXR1cm4gdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMudW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9wYXJlbnRzPWUsdGhpc30sZX0oYS5hKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGksYSl7dmFyIHMsbD10LmNhbGwodGhpcyl8fHRoaXM7bC5fcGFyZW50U3Vic2NyaWJlcj1lO3ZhciB1PWw7cmV0dXJuIE9iamVjdChyLmEpKG4pP3M9bjpuJiYocz1uLm5leHQsaT1uLmVycm9yLGE9bi5jb21wbGV0ZSxuIT09by5hJiYodT1PYmplY3QuY3JlYXRlKG4pLE9iamVjdChyLmEpKHUudW5zdWJzY3JpYmUpJiZsLmFkZCh1LnVuc3Vic2NyaWJlLmJpbmQodSkpLHUudW5zdWJzY3JpYmU9bC51bnN1YnNjcmliZS5iaW5kKGwpKSksbC5fY29udGV4dD11LGwuX25leHQ9cyxsLl9lcnJvcj1pLGwuX2NvbXBsZXRlPWEsbH1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQmJnRoaXMuX25leHQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7bC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fbmV4dCx0KSYmdGhpcy51bnN1YnNjcmliZSgpOnRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsdCl9fSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXIsbj1sLmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZztpZih0aGlzLl9lcnJvciluJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSx0aGlzLl9lcnJvcix0KSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9lcnJvcix0KSx0aGlzLnVuc3Vic2NyaWJlKCkpO2Vsc2UgaWYoZS5zeW5jRXJyb3JUaHJvd2FibGUpbj8oZS5zeW5jRXJyb3JWYWx1ZT10LGUuc3luY0Vycm9yVGhyb3duPSEwKTpPYmplY3QodS5hKSh0KSx0aGlzLnVuc3Vic2NyaWJlKCk7ZWxzZXtpZih0aGlzLnVuc3Vic2NyaWJlKCksbil0aHJvdyB0O09iamVjdCh1LmEpKHQpfX19LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7aWYodGhpcy5fY29tcGxldGUpe3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbXBsZXRlLmNhbGwodC5fY29udGV4dCl9O2wuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSxuKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1YihuKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX0sZS5wcm90b3R5cGUuX190cnlPclVuc3ViPWZ1bmN0aW9uKHQsZSl7dHJ5e3QuY2FsbCh0aGlzLl9jb250ZXh0LGUpfWNhdGNoKHQpe2lmKHRoaXMudW5zdWJzY3JpYmUoKSxsLmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyB0O09iamVjdCh1LmEpKHQpfX0sZS5wcm90b3R5cGUuX190cnlPclNldEVycm9yPWZ1bmN0aW9uKHQsZSxuKXtpZighbC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgbmV3IEVycm9yKCJiYWQgY2FsbCIpO3RyeXtlLmNhbGwodGhpcy5fY29udGV4dCxuKX1jYXRjaChlKXtyZXR1cm4gbC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/KHQuc3luY0Vycm9yVmFsdWU9ZSx0LnN5bmNFcnJvclRocm93bj0hMCwhMCk6KE9iamVjdCh1LmEpKGUpLCEwKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt0aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fcGFyZW50U3Vic2NyaWJlcj1udWxsLHQudW5zdWJzY3JpYmUoKX0sZX0oYyk7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGN8fCJzeW5jRXJyb3JUaHJvd2FibGUiaW4gdCYmdFtzLmFdfX0sRlZTeTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pO3ZhciBpPWZ1bmN0aW9uKCl7fSxyPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7fSxhPWZ1bmN0aW9uKCl7dGhpcy5hbGlnbj0ic3RhcnQifSxzPWZ1bmN0aW9uKCl7fSxsPWZ1bmN0aW9uKCl7fSx1PWZ1bmN0aW9uKCl7fSxjPWZ1bmN0aW9uKCl7fSxmPWZ1bmN0aW9uKCl7fX0sRnhiMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBofSk7dmFyIGk9bigiNmJsRiIpLHI9bigiK3RKNCIpLG89bigiUzVYUSIpLGE9bigidTY3RCIpLHM9bigiSmNSdiIpLGw9bigiMmVQbCIpLHU9bigiL1dZdiIpLGM9bigiTWNTbyIpLGY9bigiRW44KyIpLGQ9bigieFRsYSIpLGg9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIGkuYSlyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2lzU2NhbGFyPyhlLm5leHQodC52YWx1ZSksdm9pZCBlLmNvbXBsZXRlKCkpOnQuc3Vic2NyaWJlKGUpfTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtkLmFdKXJldHVybiBPYmplY3Qocy5hKSh0KTtpZihPYmplY3QobC5hKSh0KSlyZXR1cm4gT2JqZWN0KHIuYSkodCk7aWYoT2JqZWN0KHUuYSkodCkpcmV0dXJuIE9iamVjdChvLmEpKHQpO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2YuYV0pcmV0dXJuIE9iamVjdChhLmEpKHQpO3ZhciBlPU9iamVjdChjLmEpKHQpPyJhbiBpbnZhbGlkIG9iamVjdCI6IiciK3QrIiciO3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBwcm92aWRlZCAiK2UrIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBBcnJheSwgb3IgSXRlcmFibGUuIil9fSxGenFjOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBpPW4oIklwMFIiKSxyPW4oIkNjbkciKSxvPW5ldyByLnEoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qoci5ZKShpLmQpfX0pLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IHIubix0KXt2YXIgZT0odC5ib2R5P3QuYm9keS5kaXI6bnVsbCl8fCh0LmRvY3VtZW50RWxlbWVudD90LmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCk7dGhpcy52YWx1ZT0ibHRyIj09PWV8fCJydGwiPT09ZT9lOiJsdHIifX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5ZKShvLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkscz1mdW5jdGlvbigpe319LEc1SjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigiNmJsRiIpLHI9bmV3IGkuYShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wbGV0ZSgpfSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkuYShmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBlLmNvbXBsZXRlKCl9KX0pfSh0KTpyfX0sR2kzaTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpLG89bigiVDFETSIpO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9by5hKSxmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBzKHQsZSkpfX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmR1ZVRpbWU9dCx0aGlzLnNjaGVkdWxlcj1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsKHQsdGhpcy5kdWVUaW1lLHRoaXMuc2NoZWR1bGVyKSl9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5kdWVUaW1lPW4sci5zY2hlZHVsZXI9aSxyLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsLHIubGFzdFZhbHVlPW51bGwsci5oYXNWYWx1ZT0hMSxyfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmNsZWFyRGVib3VuY2UoKSx0aGlzLmxhc3RWYWx1ZT10LHRoaXMuaGFzVmFsdWU9ITAsdGhpcy5hZGQodGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249dGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUodSx0aGlzLmR1ZVRpbWUsdGhpcykpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlZE5leHQoKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLmRlYm91bmNlZE5leHQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNsZWFyRGVib3VuY2UoKSx0aGlzLmhhc1ZhbHVlKXt2YXIgdD10aGlzLmxhc3RWYWx1ZTt0aGlzLmxhc3RWYWx1ZT1udWxsLHRoaXMuaGFzVmFsdWU9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfX0sZS5wcm90b3R5cGUuY2xlYXJEZWJvdW5jZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uO251bGwhPT10JiYodGhpcy5yZW1vdmUodCksdC51bnN1YnNjcmliZSgpLHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwpfSxlfShyLmEpO2Z1bmN0aW9uIHUodCl7dC5kZWJvdW5jZWROZXh0KCl9fSxJVVRiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCI2YmxGIikscj1uKCJwdWdUIiksbz1uKCIrdEo0Iik7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgaS5hKGU/ZnVuY3Rpb24obil7dmFyIGk9bmV3IHIuYSxvPTA7cmV0dXJuIGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtvIT09dC5sZW5ndGg/KG4ubmV4dCh0W28rK10pLG4uY2xvc2VkfHxpLmFkZCh0aGlzLnNjaGVkdWxlKCkpKTpuLmNvbXBsZXRlKCl9KSksaX06T2JqZWN0KG8uYSkodCkpfX0sSXAwUjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJ6IixmdW5jdGlvbigpe3JldHVybiBHfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFd9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gWn0pLG4uZChlLCJBIixmdW5jdGlvbigpe3JldHVybiBZfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIG10fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIEt9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gJH0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB0dH0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBhdH0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBydH0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBvdH0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBzdH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBidH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBkdH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBodH0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBwdH0pLG4uZChlLCJ5IixmdW5jdGlvbigpe3JldHVybiB5dH0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBndH0pLG4uZChlLCJ4IixmdW5jdGlvbigpe3JldHVybiBfdH0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiB3dH0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIGk9bigiQ2NuRyIpLHI9bigibXJTRyIpLG89ZnVuY3Rpb24oKXt9LGE9bmV3IGkucSgiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKSxzPWZ1bmN0aW9uKCl7fSxsPW5ldyBpLnEoImFwcEJhc2VIcmVmIiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49dGhpczt0aGlzLl9zdWJqZWN0PW5ldyBpLm4sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT1lO3ZhciByPXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj10LnN0cmlwVHJhaWxpbmdTbGFzaChjKHIpKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5Lm9uUG9wU3RhdGUoZnVuY3Rpb24odCl7bi5fc3ViamVjdC5lbWl0KHt1cmw6bi5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSl9cmV0dXJuIHQucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLm5vcm1hbGl6ZSh0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnBhdGgodCkpfSx0LnByb3RvdHlwZS5pc0N1cnJlbnRQYXRoRXF1YWxUbz1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0iIiksdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrdC5ub3JtYWxpemVRdWVyeVBhcmFtcyhuKSl9LHQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZS5zdGFydHNXaXRoKHQpP2Uuc3Vic3RyaW5nKHQubGVuZ3RoKTplfSh0aGlzLl9iYXNlSHJlZixjKGUpKSl9LHQucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIi8iIT09dFswXSYmKHQ9Ii8iK3QpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHQpfSx0LnByb3RvdHlwZS5nbz1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHVzaFN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5yZXBsYWNlU3RhdGUobiwiIix0LGUpfSx0LnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5mb3J3YXJkKCl9LHQucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6dCxlcnJvcjplLGNvbXBsZXRlOm59KX0sdC5ub3JtYWxpemVRdWVyeVBhcmFtcz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIj8iIT09dFswXT8iPyIrdDp0fSx0LmpvaW5XaXRoU2xhc2g9ZnVuY3Rpb24odCxlKXtpZigwPT10Lmxlbmd0aClyZXR1cm4gZTtpZigwPT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj0wO3JldHVybiB0LmVuZHNXaXRoKCIvIikmJm4rKyxlLnN0YXJ0c1dpdGgoIi8iKSYmbisrLDI9PW4/dCtlLnN1YnN0cmluZygxKToxPT1uP3QrZTp0KyIvIitlfSx0LnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8jfFw/fCQvKSxuPWUmJmUuaW5kZXh8fHQubGVuZ3RoO3JldHVybiB0LnNsaWNlKDAsbi0oIi8iPT09dFtuLTFdPzE6MCkpK3Quc2xpY2Uobil9LHR9KCk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fcGxhdGZvcm1Mb2NhdGlvbj1lLGkuX2Jhc2VIcmVmPSIiLG51bGwhPW4mJihpLl9iYXNlSHJlZj1uKSxpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1lJiYoZT0iIyIpLGUubGVuZ3RoPjA/ZS5zdWJzdHJpbmcoMSk6ZX0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXUuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KTtyZXR1cm4gZS5sZW5ndGg+MD8iIyIrZTplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobit1Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKGkpKTswPT1yLmxlbmd0aCYmKHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxlLHIpfSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobit1Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKGkpKTswPT1yLmxlbmd0aCYmKHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLHIpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO2lmKGkuX3BsYXRmb3JtTG9jYXRpb249ZSxudWxsPT1uJiYobj1pLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKSxudWxsPT1uKXRocm93IG5ldyBFcnJvcigiTm8gYmFzZSBocmVmIHNldC4gUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIEFQUF9CQVNFX0hSRUYgdG9rZW4gb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC4iKTtyZXR1cm4gaS5fYmFzZUhyZWY9bixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB1LmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsdCl9LGUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrdS5ub3JtYWxpemVRdWVyeVBhcmFtcyh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksbj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJnQ/IiIrZStuOmV9LGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK3Uubm9ybWFsaXplUXVlcnlQYXJhbXMoaSkpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxyKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rdS5ub3JtYWxpemVRdWVyeVBhcmFtcyhpKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLHIpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksaD12b2lkIDAscD1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGhdLFtbIkFNIiwiUE0iXSxoLGhdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLGgsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGgsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixoLCJ7MX0gJ2F0JyB7MH0iLGhdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiJCIsIlVTIERvbGxhciIse30sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLmFicyh0KSksbj10LnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PW4/MTo1fV0sbT17fSxiPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuWmVybz0wXT0iWmVybyIsdFt0Lk9uZT0xXT0iT25lIix0W3QuVHdvPTJdPSJUd28iLHRbdC5GZXc9M109IkZldyIsdFt0Lk1hbnk9NF09Ik1hbnkiLHRbdC5PdGhlcj01XT0iT3RoZXIiLHR9KHt9KSx5PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuRm9ybWF0PTBdPSJGb3JtYXQiLHRbdC5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIix0fSh7fSksdj1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lk5hcnJvdz0wXT0iTmFycm93Iix0W3QuQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIix0W3QuV2lkZT0yXT0iV2lkZSIsdFt0LlNob3J0PTNdPSJTaG9ydCIsdH0oe30pLGc9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5TaG9ydD0wXT0iU2hvcnQiLHRbdC5NZWRpdW09MV09Ik1lZGl1bSIsdFt0Lkxvbmc9Ml09IkxvbmciLHRbdC5GdWxsPTNdPSJGdWxsIix0fSh7fSksXz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkRlY2ltYWw9MF09IkRlY2ltYWwiLHRbdC5Hcm91cD0xXT0iR3JvdXAiLHRbdC5MaXN0PTJdPSJMaXN0Iix0W3QuUGVyY2VudFNpZ249M109IlBlcmNlbnRTaWduIix0W3QuUGx1c1NpZ249NF09IlBsdXNTaWduIix0W3QuTWludXNTaWduPTVdPSJNaW51c1NpZ24iLHRbdC5FeHBvbmVudGlhbD02XT0iRXhwb25lbnRpYWwiLHRbdC5TdXBlcnNjcmlwdGluZ0V4cG9uZW50PTddPSJTdXBlcnNjcmlwdGluZ0V4cG9uZW50Iix0W3QuUGVyTWlsbGU9OF09IlBlck1pbGxlIix0W3RbMS8wXT05XT0iSW5maW5pdHkiLHRbdC5OYU49MTBdPSJOYU4iLHRbdC5UaW1lU2VwYXJhdG9yPTExXT0iVGltZVNlcGFyYXRvciIsdFt0LkN1cnJlbmN5RGVjaW1hbD0xMl09IkN1cnJlbmN5RGVjaW1hbCIsdFt0LkN1cnJlbmN5R3JvdXA9MTNdPSJDdXJyZW5jeUdyb3VwIix0fSh7fSk7ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBFKGoodClbMTBdLGUpfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gRShqKHQpWzExXSxlKX1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIEUoaih0KVsxMl0sZSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciBuPWoodCksaT1uWzEzXVtlXTtpZih2b2lkIDA9PT1pKXtpZihlPT09Xy5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIG5bMTNdW18uRGVjaW1hbF07aWYoZT09PV8uQ3VycmVuY3lHcm91cClyZXR1cm4gblsxM11bXy5Hcm91cF19cmV0dXJuIGl9ZnVuY3Rpb24gTyh0KXtpZighdFsxOV0pdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICInK3RbMF0rJyIuIFVzZSAicmVnaXN0ZXJMb2NhbGVEYXRhIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlICJJMThuIGd1aWRlIiBvbiBhbmd1bGFyLmlvIHRvIGtub3cgbW9yZS4nKX1mdW5jdGlvbiBFKHQsZSl7Zm9yKHZhciBuPWU7bj4tMTtuLS0paWYodm9pZCAwIT09dFtuXSlyZXR1cm4gdFtuXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gayh0KXt2YXIgZT1PYmplY3Qoci5jKSh0LnNwbGl0KCI6IiksMik7cmV0dXJue2hvdXJzOitlWzBdLG1pbnV0ZXM6K2VbMV19fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLG49bVtlXTtpZihuKXJldHVybiBuO3ZhciBpPWUuc3BsaXQoIi0iKVswXTtpZihuPW1baV0pcmV0dXJuIG47aWYoImVuIj09PWkpcmV0dXJuIHA7dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICInK3QrJyIuJyl9dmFyIEk9L14oXGR7NH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86XC4oXGQrKSk/KT8pPyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvLFQ9e30sUj0vKCg/OlteR3lNTHdXZEVhYkJoSG1zU3paTyddKyl8KD86Jyg/OlteJ118JycpKicpfCg/Okd7MSw1fXx5ezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS8sQT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LlNob3J0PTBdPSJTaG9ydCIsdFt0LlNob3J0R01UPTFdPSJTaG9ydEdNVCIsdFt0Lkxvbmc9Ml09IkxvbmciLHRbdC5FeHRlbmRlZD0zXT0iRXh0ZW5kZWQiLHR9KHt9KSxQPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuRnVsbFllYXI9MF09IkZ1bGxZZWFyIix0W3QuTW9udGg9MV09Ik1vbnRoIix0W3QuRGF0ZT0yXT0iRGF0ZSIsdFt0LkhvdXJzPTNdPSJIb3VycyIsdFt0Lk1pbnV0ZXM9NF09Ik1pbnV0ZXMiLHRbdC5TZWNvbmRzPTVdPSJTZWNvbmRzIix0W3QuRnJhY3Rpb25hbFNlY29uZHM9Nl09IkZyYWN0aW9uYWxTZWNvbmRzIix0W3QuRGF5PTddPSJEYXkiLHR9KHt9KSxEPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuRGF5UGVyaW9kcz0wXT0iRGF5UGVyaW9kcyIsdFt0LkRheXM9MV09IkRheXMiLHRbdC5Nb250aHM9Ml09Ik1vbnRocyIsdFt0LkVyYXM9M109IkVyYXMiLHR9KHt9KTtmdW5jdGlvbiBNKHQsZSl7cmV0dXJuIGUmJih0PXQucmVwbGFjZSgvXHsoW159XSspfS9nLGZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGwhPWUmJm4gaW4gZT9lW25dOnR9KSksdH1mdW5jdGlvbiBOKHQsZSxuLGkscil7dm9pZCAwPT09biYmKG49Ii0iKTt2YXIgbz0iIjsodDwwfHxyJiZ0PD0wKSYmKHI/dD0xLXQ6KHQ9LXQsbz1uKSk7Zm9yKHZhciBhPVN0cmluZyh0KTthLmxlbmd0aDxlOylhPSIwIithO3JldHVybiBpJiYoYT1hLnN1YnN0cihhLmxlbmd0aC1lKSksbythfWZ1bmN0aW9uIEwodCxlLG4saSxyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9ITEpLHZvaWQgMD09PXImJihyPSExKSxmdW5jdGlvbihvLGEpe3ZhciBzLGw9ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBQLkZ1bGxZZWFyOnJldHVybiBlLmdldEZ1bGxZZWFyKCk7Y2FzZSBQLk1vbnRoOnJldHVybiBlLmdldE1vbnRoKCk7Y2FzZSBQLkRhdGU6cmV0dXJuIGUuZ2V0RGF0ZSgpO2Nhc2UgUC5Ib3VyczpyZXR1cm4gZS5nZXRIb3VycygpO2Nhc2UgUC5NaW51dGVzOnJldHVybiBlLmdldE1pbnV0ZXMoKTtjYXNlIFAuU2Vjb25kczpyZXR1cm4gZS5nZXRTZWNvbmRzKCk7Y2FzZSBQLkZyYWN0aW9uYWxTZWNvbmRzOnJldHVybiBlLmdldE1pbGxpc2Vjb25kcygpO2Nhc2UgUC5EYXk6cmV0dXJuIGUuZ2V0RGF5KCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gRGF0ZVR5cGUgdmFsdWUgIicrdCsnIi4nKX19KHQsbyk7aWYoKG4+MHx8bD4tbikmJihsKz1uKSx0PT09UC5Ib3VycykwPT09bCYmLTEyPT09biYmKGw9MTIpO2Vsc2UgaWYodD09PVAuRnJhY3Rpb25hbFNlY29uZHMpcmV0dXJuIHM9ZSxOKGwsMykuc3Vic3RyKDAscyk7dmFyIHU9UyhhLF8uTWludXNTaWduKTtyZXR1cm4gTihsLGUsdSxpLHIpfX1mdW5jdGlvbiBGKHQsZSxuLGkpe3JldHVybiB2b2lkIDA9PT1uJiYobj15LkZvcm1hdCksdm9pZCAwPT09aSYmKGk9ITEpLGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvKXtzd2l0Y2gobil7Y2FzZSBELk1vbnRoczpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciBpPWoodCk7cmV0dXJuIEUoRShbaVs1XSxpWzZdXSxlKSxuKX0oZSxyLGkpW3QuZ2V0TW9udGgoKV07Y2FzZSBELkRheXM6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1qKHQpO3JldHVybiBFKEUoW2lbM10saVs0XV0sZSksbil9KGUscixpKVt0LmdldERheSgpXTtjYXNlIEQuRGF5UGVyaW9kczp2YXIgYT10LmdldEhvdXJzKCkscz10LmdldE1pbnV0ZXMoKTtpZihvKXt2YXIgbCx1PWZ1bmN0aW9uKHQpe3ZhciBlPWoodCk7cmV0dXJuIE8oZSksKGVbMTldWzJdfHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9rKHQpOltrKHRbMF0pLGsodFsxXSldfSl9KGUpLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWoodCk7cmV0dXJuIE8oaSksRShFKFtpWzE5XVswXSxpWzE5XVsxXV0sZSl8fFtdLG4pfHxbXX0oZSxyLGkpO2lmKHUuZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbMF0saT10WzFdLHI9aS5ob3VyczthPj1uLmhvdXJzJiZzPj1uLm1pbnV0ZXMmJihhPHJ8fGE9PT1yJiZzPGkubWludXRlcykmJihsPWNbZV0pfWVsc2UgdC5ob3Vycz09PWEmJnQubWludXRlcz09PXMmJihsPWNbZV0pfSksbClyZXR1cm4gbH1yZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciBpPWoodCk7cmV0dXJuIEUoRShbaVsxXSxpWzJdXSxlKSxuKX0oZSxyLGkpW2E8MTI/MDoxXTtjYXNlIEQuRXJhczpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gRShqKHQpWzddLGUpfShlLGkpW3QuZ2V0RnVsbFllYXIoKTw9MD8wOjFdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHRyYW5zbGF0aW9uIHR5cGUgIituKX19KHIsbyx0LGUsbixpKX19ZnVuY3Rpb24gVih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGkpe3ZhciByPS0xKmksbz1TKG4sXy5NaW51c1NpZ24pLGE9cj4wP01hdGguZmxvb3Ioci82MCk6TWF0aC5jZWlsKHIvNjApO3N3aXRjaCh0KXtjYXNlIEEuU2hvcnQ6cmV0dXJuKHI+PTA/IisiOiIiKStOKGEsMixvKStOKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBBLlNob3J0R01UOnJldHVybiJHTVQiKyhyPj0wPyIrIjoiIikrTihhLDEsbyk7Y2FzZSBBLkxvbmc6cmV0dXJuIkdNVCIrKHI+PTA/IisiOiIiKStOKGEsMixvKSsiOiIrTihNYXRoLmFicyhyJTYwKSwyLG8pO2Nhc2UgQS5FeHRlbmRlZDpyZXR1cm4gMD09PWk/IloiOihyPj0wPyIrIjoiIikrTihhLDIsbykrIjoiK04oTWF0aC5hYnMociU2MCksMixvKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5rbm93biB6b25lIHdpZHRoICInK3QrJyInKX19fXZhciB6PTAsQj00O2Z1bmN0aW9uIFUodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLGZ1bmN0aW9uKG4saSl7dmFyIHIsbyxhLHM7aWYoZSl7dmFyIGw9bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSwxKS5nZXREYXkoKS0xLHU9bi5nZXREYXRlKCk7cj0xK01hdGguZmxvb3IoKHUrbCkvNyl9ZWxzZXt2YXIgYz0oYT1uLmdldEZ1bGxZZWFyKCkscz1uZXcgRGF0ZShhLHosMSkuZ2V0RGF5KCksbmV3IERhdGUoYSwwLDErKHM8PUI/QjpCKzcpLXMpKSxmPShvPW4sbmV3IERhdGUoby5nZXRGdWxsWWVhcigpLG8uZ2V0TW9udGgoKSxvLmdldERhdGUoKSsoQi1vLmdldERheSgpKSkpLmdldFRpbWUoKS1jLmdldFRpbWUoKTtyPTErTWF0aC5yb3VuZChmLzYwNDhlNSl9cmV0dXJuIE4ocix0LFMoaSxfLk1pbnVzU2lnbikpfX12YXIgSD17fTtmdW5jdGlvbiBxKHQsZSl7dD10LnJlcGxhY2UoLzovZywiIik7dmFyIG49RGF0ZS5wYXJzZSgiSmFuIDAxLCAxOTcwIDAwOjAwOjAwICIrdCkvNmU0O3JldHVybiBpc05hTihuKT9lOm59ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUmJiFpc05hTih0LnZhbHVlT2YoKSl9dmFyIEc9bmV3IGkucSgiVXNlVjRQbHVyYWxzIiksWj1mdW5jdGlvbigpe30sVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmxvY2FsZT1lLGkuZGVwcmVjYXRlZFBsdXJhbEZuPW4saX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbj90aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbihlfHx0aGlzLmxvY2FsZSx0KTpmdW5jdGlvbih0KXtyZXR1cm4gaih0KVsxOF19KGV8fHRoaXMubG9jYWxlKSh0KSl7Y2FzZSBiLlplcm86cmV0dXJuInplcm8iO2Nhc2UgYi5PbmU6cmV0dXJuIm9uZSI7Y2FzZSBiLlR3bzpyZXR1cm4idHdvIjtjYXNlIGIuRmV3OnJldHVybiJmZXciO2Nhc2UgYi5NYW55OnJldHVybiJtYW55IjtkZWZhdWx0OnJldHVybiJvdGhlciJ9fSxlfShaKTtmdW5jdGlvbiBZKHQsZSl7dmFyIG4saTtlPWVuY29kZVVSSUNvbXBvbmVudChlKTt0cnl7Zm9yKHZhciBvPU9iamVjdChyLmUpKHQuc3BsaXQoIjsiKSksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPWEudmFsdWUsbD1zLmluZGV4T2YoIj0iKSx1PU9iamVjdChyLmMpKC0xPT1sP1tzLCIiXTpbcy5zbGljZSgwLGwpLHMuc2xpY2UobCsxKV0sMiksYz11WzFdO2lmKHVbMF0udHJpbSgpPT09ZSlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYoaT1vLnJldHVybikmJmkuY2FsbChvKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG51bGx9dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX2l0ZXJhYmxlRGlmZmVycz10LHRoaXMuX2tleVZhbHVlRGlmZmVycz1lLHRoaXMuX25nRWw9bix0aGlzLl9yZW5kZXJlcj1pLHRoaXMuX2luaXRpYWxDbGFzc2VzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2luaXRpYWxDbGFzc2VzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTpbXSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX3Jhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTp0LHRoaXMuX3Jhd0NsYXNzJiYoT2JqZWN0KGkuVWEpKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7dmFyIHQ9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7dCYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXModCl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7dmFyIGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fSx0LnByb3RvdHlwZS5fYXBwbHlLZXlWYWx1ZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXt0LnByZXZpb3VzVmFsdWUmJmUuX3RvZ2dsZUNsYXNzKHQua2V5LCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlJdGVyYWJsZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lml0ZW0pdGhyb3cgbmV3IEVycm9yKCJOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICIrT2JqZWN0KGkuaWIpKHQuaXRlbSkpO2UuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMCl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5pdGVtLCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCEwKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKG4sISF0W25dKX0pKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMSl9KSl9LHQucHJvdG90eXBlLl90b2dnbGVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7KHQ9dC50cmltKCkpJiZ0LnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbih0KXtlP24uX3JlbmRlcmVyLmFkZENsYXNzKG4uX25nRWwubmF0aXZlRWxlbWVudCx0KTpuLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCl9KX0sdH0oKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9bix0aGlzLmNvdW50PWl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsYXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJldmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9kZCIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmV2ZW59LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSwkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlld0NvbnRhaW5lcj10LHRoaXMuX3RlbXBsYXRlPWUsdGhpcy5fZGlmZmVycz1uLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9kaWZmZXI9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0Zvck9mIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX25nRm9yT2Y9dCx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRyYWNrQnkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KGkuWikoKSYmbnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkrIi4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkvY29tbW9uL2luZGV4L05nRm9yLWRpcmVjdGl2ZS5odG1sIyEjY2hhbmdlLXByb3BhZ2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpLHRoaXMuX3RyYWNrQnlGbj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdGb3JUZW1wbGF0ZSIse3NldDpmdW5jdGlvbih0KXt0JiYodGhpcy5fdGVtcGxhdGU9dCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7dmFyIHQ9dGhpcy5fbmdGb3JPZjtpZighdGhpcy5fZGlmZmVyJiZ0KXRyeXt0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHQpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSl9Y2F0Y2gobil7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIit0KyInIG9mIHR5cGUgJyIrKChlPXQpLm5hbWV8fHR5cGVvZiBlKSsiJy4gTmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy4iKX19dmFyIGU7aWYodGhpcy5fZGlmZmVyKXt2YXIgbj10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ0Zvck9mKTtuJiZ0aGlzLl9hcHBseUNoYW5nZXMobil9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTt0LmZvckVhY2hPcGVyYXRpb24oZnVuY3Rpb24odCxpLHIpe2lmKG51bGw9PXQucHJldmlvdXNJbmRleCl7dmFyIG89ZS5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZS5fdGVtcGxhdGUsbmV3IFgobnVsbCxlLl9uZ0Zvck9mLC0xLC0xKSxyKSxhPW5ldyBKKHQsbyk7bi5wdXNoKGEpfWVsc2UgbnVsbD09cj9lLl92aWV3Q29udGFpbmVyLnJlbW92ZShpKToobz1lLl92aWV3Q29udGFpbmVyLmdldChpKSxlLl92aWV3Q29udGFpbmVyLm1vdmUobyxyKSxhPW5ldyBKKHQsbyksbi5wdXNoKGEpKX0pO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXRoaXMuX3BlclZpZXdDaGFuZ2UobltpXS52aWV3LG5baV0ucmVjb3JkKTtpPTA7Zm9yKHZhciByPXRoaXMuX3ZpZXdDb250YWluZXIubGVuZ3RoO2k8cjtpKyspe3ZhciBvPXRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGkpO28uY29udGV4dC5pbmRleD1pLG8uY29udGV4dC5jb3VudD1yLG8uY29udGV4dC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7ZS5fdmlld0NvbnRhaW5lci5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX0pfSx0LnByb3RvdHlwZS5fcGVyVmlld0NoYW5nZT1mdW5jdGlvbih0LGUpe3QuY29udGV4dC4kaW1wbGljaXQ9ZS5pdGVtfSx0fSgpLEo9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfSx0dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fY29udGV4dD1uZXcgZXQsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWYiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPXQsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJZlRoZW4iLHtzZXQ6ZnVuY3Rpb24odCl7bnQoIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZFbHNlIix7c2V0OmZ1bmN0aW9uKHQpe250KCJuZ0lmRWxzZSIsdCksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPXQsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3VwZGF0ZVZpZXc9ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSl9LHR9KCksZXQ9ZnVuY3Rpb24oKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfTtmdW5jdGlvbiBudCh0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICciK09iamVjdChpLmliKShlKSsiJy4iKX12YXIgaXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlUmVmPWUsdGhpcy5fY3JlYXRlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0sdC5wcm90b3R5cGUuZW5mb3JjZVN0YXRlPWZ1bmN0aW9uKHQpe3QmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IXQmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfSx0fSgpLHJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdTd2l0Y2giLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdTd2l0Y2g9dCwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9hZGRDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfSx0LnByb3RvdHlwZS5fYWRkRGVmYXVsdD1mdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Vmlld3N8fCh0aGlzLl9kZWZhdWx0Vmlld3M9W10pLHRoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5fbWF0Y2hDYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGUsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxlfSx0LnByb3RvdHlwZS5fdXBkYXRlRGVmYXVsdENhc2VzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cyYmdCE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD10O2Zvcih2YXIgZT0wO2U8dGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aDtlKyspdGhpcy5fZGVmYXVsdFZpZXdzW2VdLmVuZm9yY2VTdGF0ZSh0KX19LHR9KCksb3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5nU3dpdGNoPW4sbi5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3IGl0KHQsZSl9cmV0dXJuIHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfSx0fSgpLGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fZGlmZmVycz10LHRoaXMuX25nRWw9ZSx0aGlzLl9yZW5kZXJlcj1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nU3R5bGUiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdTdHlsZT10LCF0aGlzLl9kaWZmZXImJnQmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHQpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9kaWZmZXIpe3ZhciB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksbnVsbCl9KSx0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KX0sdC5wcm90b3R5cGUuX3NldFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuYykodC5zcGxpdCgiLiIpLDIpLGk9blswXSxvPW5bMV07bnVsbCE9KGU9bnVsbCE9ZSYmbz8iIitlK286ZSk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGksZSk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGkpfSx0fSgpLHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3VsZFJlY3JlYXRlVmlldyh0KT8odGhpcy5fdmlld1JlZiYmdGhpcy5fdmlld0NvbnRhaW5lclJlZi5yZW1vdmUodGhpcy5fdmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHRoaXMuX3ZpZXdSZWYpKSx0aGlzLm5nVGVtcGxhdGVPdXRsZXQmJih0aGlzLl92aWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KSkpOnRoaXMuX3ZpZXdSZWYmJnRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJnRoaXMuX3VwZGF0ZUV4aXN0aW5nQ29udGV4dCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KX0sdC5wcm90b3R5cGUuX3Nob3VsZFJlY3JlYXRlVmlldz1mdW5jdGlvbih0KXt2YXIgZT10Lm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0O3JldHVybiEhdC5uZ1RlbXBsYXRlT3V0bGV0fHxlJiZ0aGlzLl9oYXNDb250ZXh0U2hhcGVDaGFuZ2VkKGUpfSx0LnByb3RvdHlwZS5faGFzQ29udGV4dFNoYXBlQ2hhbmdlZD1mdW5jdGlvbih0KXt2YXIgZSxuLGk9T2JqZWN0LmtleXModC5wcmV2aW91c1ZhbHVlfHx7fSksbz1PYmplY3Qua2V5cyh0LmN1cnJlbnRWYWx1ZXx8e30pO2lmKGkubGVuZ3RoPT09by5sZW5ndGgpe3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuZSkobykscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpaWYoLTE9PT1pLmluZGV4T2Yocy52YWx1ZSkpcmV0dXJuITB9Y2F0Y2godCl7ZT17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG49YS5yZXR1cm4pJiZuLmNhbGwoYSl9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fXJldHVybiExfXJldHVybiEwfSx0LnByb3RvdHlwZS5fdXBkYXRlRXhpc3RpbmdDb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG47dHJ5e2Zvcih2YXIgaT1PYmplY3Qoci5lKShPYmplY3Qua2V5cyh0KSksbz1pLm5leHQoKTshby5kb25lO289aS5uZXh0KCkpe3ZhciBhPW8udmFsdWU7dGhpcy5fdmlld1JlZi5jb250ZXh0W2FdPXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHRbYV19fWNhdGNoKHQpe2U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e28mJiFvLmRvbmUmJihuPWkucmV0dXJuKSYmbi5jYWxsKGkpfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX19LHR9KCk7ZnVuY3Rpb24gbHQodCxlKXtyZXR1cm4gRXJyb3IoIkludmFsaWRQaXBlQXJndW1lbnQ6ICciK2UrIicgZm9yIHBpcGUgJyIrT2JqZWN0KGkuaWIpKHQpKyInIil9dmFyIHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6ZnVuY3Rpb24odCl7dGhyb3cgdH19KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHR9KCksY3Q9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudGhlbihlLGZ1bmN0aW9uKHQpe3Rocm93IHR9KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt9LHR9KCkpLGZ0PW5ldyB1dCxkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcmVmPXQsdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX2Rpc3Bvc2UoKX0sdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vYmo/dCE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKHQpKTp0aGlzLl9sYXRlc3RWYWx1ZT09PXRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU/dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZToodGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT10aGlzLl9sYXRlc3RWYWx1ZSxpLlMud3JhcCh0aGlzLl9sYXRlc3RWYWx1ZSkpOih0JiZ0aGlzLl9zdWJzY3JpYmUodCksdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT10aGlzLl9sYXRlc3RWYWx1ZSx0aGlzLl9sYXRlc3RWYWx1ZSl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9vYmo9dCx0aGlzLl9zdHJhdGVneT10aGlzLl9zZWxlY3RTdHJhdGVneSh0KSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKHQsZnVuY3Rpb24obil7cmV0dXJuIGUuX3VwZGF0ZUxhdGVzdFZhbHVlKHQsbil9KX0sdC5wcm90b3R5cGUuX3NlbGVjdFN0cmF0ZWd5PWZ1bmN0aW9uKGUpe2lmKE9iamVjdChpLldhKShlKSlyZXR1cm4gY3Q7aWYoT2JqZWN0KGkuVmEpKGUpKXJldHVybiBmdDt0aHJvdyBsdCh0LGUpfSx0LnByb3RvdHlwZS5fZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH0sdC5wcm90b3R5cGUuX3VwZGF0ZUxhdGVzdFZhbHVlPWZ1bmN0aW9uKHQsZSl7dD09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWUsdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpKX0sdH0oKSxodD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5sb2NhbGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUsbixpLG8pe2lmKHZvaWQgMD09PW4mJihuPSJtZWRpdW1EYXRlIiksbnVsbD09ZXx8IiI9PT1lfHxlIT1lKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZnVuY3Rpb24odCxlLG4saSl7dmFyIG89ZnVuY3Rpb24odCl7aWYoUSh0KSlyZXR1cm4gdDtpZigibnVtYmVyIj09dHlwZW9mIHQmJiFpc05hTih0KSlyZXR1cm4gbmV3IERhdGUodCk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt0PXQudHJpbSgpO3ZhciBlLG49cGFyc2VGbG9hdCh0KTtpZighaXNOYU4odC1uKSlyZXR1cm4gbmV3IERhdGUobik7aWYoL14oXGR7NH0tXGR7MSwyfS1cZHsxLDJ9KSQvLnRlc3QodCkpe3ZhciBpPU9iamVjdChyLmMpKHQuc3BsaXQoIi0iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSwzKTtyZXR1cm4gbmV3IERhdGUoaVswXSxpWzFdLTEsaVsyXSl9aWYoZT10Lm1hdGNoKEkpKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1uZXcgRGF0ZSgwKSxuPTAsaT0wLHI9dFs4XT9lLnNldFVUQ0Z1bGxZZWFyOmUuc2V0RnVsbFllYXIsbz10WzhdP2Uuc2V0VVRDSG91cnM6ZS5zZXRIb3Vyczt0WzldJiYobj1OdW1iZXIodFs5XSt0WzEwXSksaT1OdW1iZXIodFs5XSt0WzExXSkpLHIuY2FsbChlLE51bWJlcih0WzFdKSxOdW1iZXIodFsyXSktMSxOdW1iZXIodFszXSkpO3ZhciBhPU51bWJlcih0WzRdfHwwKS1uLHM9TnVtYmVyKHRbNV18fDApLWksbD1OdW1iZXIodFs2XXx8MCksdT1NYXRoLnJvdW5kKDFlMypwYXJzZUZsb2F0KCIwLiIrKHRbN118fDApKSk7cmV0dXJuIG8uY2FsbChlLGEscyxsLHUpLGV9KGUpfXZhciBvPW5ldyBEYXRlKHQpO2lmKCFRKG8pKXRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnZlcnQgIicrdCsnIiBpbnRvIGEgZGF0ZScpO3JldHVybiBvfSh0KTtlPWZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gaih0KVswXX0oZSk7aWYoVFtpXT1UW2ldfHx7fSxUW2ldW25dKXJldHVybiBUW2ldW25dO3ZhciByPSIiO3N3aXRjaChuKXtjYXNlInNob3J0RGF0ZSI6cj13KGUsZy5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjpyPXcoZSxnLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nRGF0ZSI6cj13KGUsZy5Mb25nKTticmVhaztjYXNlImZ1bGxEYXRlIjpyPXcoZSxnLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjpyPXgoZSxnLlNob3J0KTticmVhaztjYXNlIm1lZGl1bVRpbWUiOnI9eChlLGcuTWVkaXVtKTticmVhaztjYXNlImxvbmdUaW1lIjpyPXgoZSxnLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOnI9eChlLGcuRnVsbCk7YnJlYWs7Y2FzZSJzaG9ydCI6dmFyIG89dChlLCJzaG9ydFRpbWUiKSxhPXQoZSwic2hvcnREYXRlIik7cj1NKEMoZSxnLlNob3J0KSxbbyxhXSk7YnJlYWs7Y2FzZSJtZWRpdW0iOnZhciBzPXQoZSwibWVkaXVtVGltZSIpLGw9dChlLCJtZWRpdW1EYXRlIik7cj1NKEMoZSxnLk1lZGl1bSksW3MsbF0pO2JyZWFrO2Nhc2UibG9uZyI6dmFyIHU9dChlLCJsb25nVGltZSIpLGM9dChlLCJsb25nRGF0ZSIpO3I9TShDKGUsZy5Mb25nKSxbdSxjXSk7YnJlYWs7Y2FzZSJmdWxsIjp2YXIgZj10KGUsImZ1bGxUaW1lIiksZD10KGUsImZ1bGxEYXRlIik7cj1NKEMoZSxnLkZ1bGwpLFtmLGRdKX1yZXR1cm4gciYmKFRbaV1bbl09cikscn0obixlKXx8ZTtmb3IodmFyIGEscz1bXTtlOyl7aWYoIShhPVIuZXhlYyhlKSkpe3MucHVzaChlKTticmVha312YXIgbD0ocz1zLmNvbmNhdChhLnNsaWNlKDEpKSkucG9wKCk7aWYoIWwpYnJlYWs7ZT1sfXZhciB1PW8uZ2V0VGltZXpvbmVPZmZzZXQoKTtpJiYodT1xKGksdSksbz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybih0PW5ldyBEYXRlKHQuZ2V0VGltZSgpKSkuc2V0TWludXRlcyh0LmdldE1pbnV0ZXMoKStlKSx0fSh0LC0xKihxKGUsaSktaSkpfShvLGkpKTt2YXIgYz0iIjtyZXR1cm4gcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2lmKEhbdF0pcmV0dXJuIEhbdF07dmFyIGU7c3dpdGNoKHQpe2Nhc2UiRyI6Y2FzZSJHRyI6Y2FzZSJHR0ciOmU9RihELkVyYXMsdi5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJHR0dHIjplPUYoRC5FcmFzLHYuV2lkZSk7YnJlYWs7Y2FzZSJHR0dHRyI6ZT1GKEQuRXJhcyx2Lk5hcnJvdyk7YnJlYWs7Y2FzZSJ5IjplPUwoUC5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOmU9TChQLkZ1bGxZZWFyLDIsMCwhMCwhMCk7YnJlYWs7Y2FzZSJ5eXkiOmU9TChQLkZ1bGxZZWFyLDMsMCwhMSwhMCk7YnJlYWs7Y2FzZSJ5eXl5IjplPUwoUC5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiTSI6Y2FzZSJMIjplPUwoUC5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOmU9TChQLk1vbnRoLDIsMSk7YnJlYWs7Y2FzZSJNTU0iOmU9RihELk1vbnRocyx2LkFiYnJldmlhdGVkKTticmVhaztjYXNlIk1NTU0iOmU9RihELk1vbnRocyx2LldpZGUpO2JyZWFrO2Nhc2UiTU1NTU0iOmU9RihELk1vbnRocyx2Lk5hcnJvdyk7YnJlYWs7Y2FzZSJMTEwiOmU9RihELk1vbnRocyx2LkFiYnJldmlhdGVkLHkuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjplPUYoRC5Nb250aHMsdi5XaWRlLHkuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMTCI6ZT1GKEQuTW9udGhzLHYuTmFycm93LHkuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJ3IjplPVUoMSk7YnJlYWs7Y2FzZSJ3dyI6ZT1VKDIpO2JyZWFrO2Nhc2UiVyI6ZT1VKDEsITApO2JyZWFrO2Nhc2UiZCI6ZT1MKFAuRGF0ZSwxKTticmVhaztjYXNlImRkIjplPUwoUC5EYXRlLDIpO2JyZWFrO2Nhc2UiRSI6Y2FzZSJFRSI6Y2FzZSJFRUUiOmU9RihELkRheXMsdi5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJFRUVFIjplPUYoRC5EYXlzLHYuV2lkZSk7YnJlYWs7Y2FzZSJFRUVFRSI6ZT1GKEQuRGF5cyx2Lk5hcnJvdyk7YnJlYWs7Y2FzZSJFRUVFRUUiOmU9RihELkRheXMsdi5TaG9ydCk7YnJlYWs7Y2FzZSJhIjpjYXNlImFhIjpjYXNlImFhYSI6ZT1GKEQuRGF5UGVyaW9kcyx2LkFiYnJldmlhdGVkKTticmVhaztjYXNlImFhYWEiOmU9RihELkRheVBlcmlvZHMsdi5XaWRlKTticmVhaztjYXNlImFhYWFhIjplPUYoRC5EYXlQZXJpb2RzLHYuTmFycm93KTticmVhaztjYXNlImIiOmNhc2UiYmIiOmNhc2UiYmJiIjplPUYoRC5EYXlQZXJpb2RzLHYuQWJicmV2aWF0ZWQseS5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmIiOmU9RihELkRheVBlcmlvZHMsdi5XaWRlLHkuU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiYiI6ZT1GKEQuRGF5UGVyaW9kcyx2Lk5hcnJvdyx5LlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiQiI6Y2FzZSJCQiI6Y2FzZSJCQkIiOmU9RihELkRheVBlcmlvZHMsdi5BYmJyZXZpYXRlZCx5LkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCIjplPUYoRC5EYXlQZXJpb2RzLHYuV2lkZSx5LkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCQiI6ZT1GKEQuRGF5UGVyaW9kcyx2Lk5hcnJvdyx5LkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJoIjplPUwoUC5Ib3VycywxLC0xMik7YnJlYWs7Y2FzZSJoaCI6ZT1MKFAuSG91cnMsMiwtMTIpO2JyZWFrO2Nhc2UiSCI6ZT1MKFAuSG91cnMsMSk7YnJlYWs7Y2FzZSJISCI6ZT1MKFAuSG91cnMsMik7YnJlYWs7Y2FzZSJtIjplPUwoUC5NaW51dGVzLDEpO2JyZWFrO2Nhc2UibW0iOmU9TChQLk1pbnV0ZXMsMik7YnJlYWs7Y2FzZSJzIjplPUwoUC5TZWNvbmRzLDEpO2JyZWFrO2Nhc2Uic3MiOmU9TChQLlNlY29uZHMsMik7YnJlYWs7Y2FzZSJTIjplPUwoUC5GcmFjdGlvbmFsU2Vjb25kcywxKTticmVhaztjYXNlIlNTIjplPUwoUC5GcmFjdGlvbmFsU2Vjb25kcywyKTticmVhaztjYXNlIlNTUyI6ZT1MKFAuRnJhY3Rpb25hbFNlY29uZHMsMyk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpjYXNlIlpaWiI6ZT1WKEEuU2hvcnQpO2JyZWFrO2Nhc2UiWlpaWloiOmU9VihBLkV4dGVuZGVkKTticmVhaztjYXNlIk8iOmNhc2UiT08iOmNhc2UiT09PIjpjYXNlInoiOmNhc2UienoiOmNhc2Uienp6IjplPVYoQS5TaG9ydEdNVCk7YnJlYWs7Y2FzZSJPT09PIjpjYXNlIlpaWloiOmNhc2Uienp6eiI6ZT1WKEEuTG9uZyk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gSFt0XT1lLGV9KHQpO2MrPWU/ZShvLG4sdSk6IicnIj09PXQ/IiciOnQucmVwbGFjZSgvKF4nfCckKS9nLCIiKS5yZXBsYWNlKC8nJy9nLCInIil9KSxjfShlLG4sb3x8dGhpcy5sb2NhbGUsaSl9Y2F0Y2goZSl7dGhyb3cgbHQodCxlLm1lc3NhZ2UpfX0sdH0oKSxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlLG4saSl7aWYobnVsbD09ZSlyZXR1cm4gZTtpZighdGhpcy5zdXBwb3J0cyhlKSl0aHJvdyBsdCh0LGUpO3JldHVybiBlLnNsaWNlKG4saSl9LHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8QXJyYXkuaXNBcnJheSh0KX0sdH0oKSxtdD1mdW5jdGlvbigpe30sYnQ9bmV3IGkucSgiRG9jdW1lbnRUb2tlbiIpLHl0PSJicm93c2VyIix2dD0ic2VydmVyIjtmdW5jdGlvbiBndCh0KXtyZXR1cm4gdD09PXl0fWZ1bmN0aW9uIF90KHQpe3JldHVybiB0PT09dnR9dmFyIHd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHh0KE9iamVjdChpLlkpKGJ0KSx3aW5kb3cpfX0pLHR9KCkseHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kb2N1bWVudD10LHRoaXMud2luZG93PWUsdGhpcy5vZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCwwXX19cmV0dXJuIHQucHJvdG90eXBlLnNldE9mZnNldD1mdW5jdGlvbih0KXt0aGlzLm9mZnNldD1BcnJheS5pc0FycmF5KHQpP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OnR9LHQucHJvdG90eXBlLmdldFNjcm9sbFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCk/W3RoaXMud2luZG93LnNjcm9sbFgsdGhpcy53aW5kb3cuc2Nyb2xsWV06WzAsMF19LHQucHJvdG90eXBlLnNjcm9sbFRvUG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKSYmdGhpcy53aW5kb3cuc2Nyb2xsVG8odFswXSx0WzFdKX0sdC5wcm90b3R5cGUuc2Nyb2xsVG9BbmNob3I9ZnVuY3Rpb24odCl7aWYodGhpcy5zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKSl7dmFyIGU9dGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjIit0KTtpZihlKXJldHVybiB2b2lkIHRoaXMuc2Nyb2xsVG9FbGVtZW50KGUpO3ZhciBuPXRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW25hbWU9JyIrdCsiJ10iKTtpZihuKXJldHVybiB2b2lkIHRoaXMuc2Nyb2xsVG9FbGVtZW50KG4pfX0sdC5wcm90b3R5cGUuc2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe3ZhciBlPXRoaXMud2luZG93Lmhpc3Rvcnk7ZSYmZS5zY3JvbGxSZXN0b3JhdGlvbiYmKGUuc2Nyb2xsUmVzdG9yYXRpb249dCl9fSx0LnByb3RvdHlwZS5zY3JvbGxUb0VsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxpPWUudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LHI9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyhuLXJbMF0saS1yWzFdKX0sdC5wcm90b3R5cGUuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiEhdGhpcy53aW5kb3cmJiEhdGhpcy53aW5kb3cuc2Nyb2xsVG99Y2F0Y2godCl7cmV0dXJuITF9fSx0fSgpfSxKY1J2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT1uKCJ4VGxhIikscj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dFtpLmFdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX19LEs5SWE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIGk9bigibXJTRyIpLHI9bigiNmJsRiIpLG89bigiRkZPbyIpLGE9bigicHVnVCIpLHM9bigiOGc4QSIpLGw9bigidU1hTyIpLHU9bigiTC9WOSIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kZXN0aW5hdGlvbj1lLG59cmV0dXJuIGkuYihlLHQpLGV9KG8uYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLm9ic2VydmVycz1bXSxlLmNsb3NlZD0hMSxlLmlzU3RvcHBlZD0hMSxlLmhhc0Vycm9yPSExLGUudGhyb3duRXJyb3I9bnVsbCxlfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZVt1LmFdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBkKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7aWYoIXRoaXMuaXNTdG9wcGVkKWZvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLGk9ZS5zbGljZSgpLHI9MDtyPG47cisrKWlbcl0ubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxpPWUuc2xpY2UoKSxyPTA7cjxuO3IrKylpW3JdLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciB0PXRoaXMub2JzZXJ2ZXJzLGU9dC5sZW5ndGgsbj10LnNsaWNlKCksaT0wO2k8ZTtpKyspbltpXS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkPSEwLHRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPW51bGx9LGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxhLmEuRU1QVFkpOnRoaXMuaXNTdG9wcGVkPyh0LmNvbXBsZXRlKCksYS5hLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgbC5hKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgci5hO3JldHVybiB0LnNvdXJjZT10aGlzLHR9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBkKHQsZSl9LGV9KHIuYSksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmRlc3RpbmF0aW9uPWUsaS5zb3VyY2U9bixpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5uZXh0JiZlLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5lcnJvciYmdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uO3QmJnQuY29tcGxldGUmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHQpOmEuYS5FTVBUWX0sZX0oZil9LCJML1Y5IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigicnhTdWJzY3JpYmVyIik6IkBAcnhTdWJzY3JpYmVyIn0sTEM1cDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJuNmdHIikscj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9pbnNldD0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2ZXJ0aWNhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJ0aWNhbH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3ZlcnRpY2FsPU9iamVjdChpLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5zZXR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pbnNldD1PYmplY3QoaS5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLG89ZnVuY3Rpb24oKXt9fSxNR0JTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT1uKCJtclNHIikscj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixpLHIpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5RXJyb3I9ZnVuY3Rpb24odCxlKXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG4oIkZGT28iKS5hKX0sTWNTbzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pfSwiTWhtKyI6ZnVuY3Rpb24obW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCJhIixmdW5jdGlvbigpe3JldHVybiBDaHVua0xvYWRlclNlcnZpY2V9KTt2YXIgcnhqc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fPV9fd2VicGFja19yZXF1aXJlX18oIjAvdVEiKSxfcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJyZjMwIiksX2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fPV9fd2VicGFja19yZXF1aXJlX18oIkF5dFIiKSxfYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX189X193ZWJwYWNrX3JlcXVpcmVfXygiQ2NuRyIpLF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X189X193ZWJwYWNrX3JlcXVpcmVfXygidC9OYSIpLENodW5rTG9hZGVyU2VydmljZT1mdW5jdGlvbigpe2Z1bmN0aW9uIENodW5rTG9hZGVyU2VydmljZSh0KXt2YXIgZT10aGlzO3RoaXMuaHR0cD10LHRoaXMucmVjb3Jkcz1fcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXy5hLDAhPV9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXy5hLnByb2R1Y3Rpb24mJnRoaXMucmVjb3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmxvYWRQYWdlQ2h1bmsodC5wYWdlTmFtZSxmdW5jdGlvbigpe30pfSl9KX1yZXR1cm4gQ2h1bmtMb2FkZXJTZXJ2aWNlLnByb3RvdHlwZS5hc3luY0xvYWRQYWdlQ2h1bms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIHI9ZS5yZWNvcmRzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPXQuaW5kZXhPZihlLnBhZ2VOYW1lKX0pO3ZvaWQgMCE9cj8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK3IucGFnZU5hbWUrIiAoIityLmNodW5rVVJMKyIsICIrci5jaHVua0xvYWRlZCsiKSBbQXN5bmNdIiksMD09ci5jaHVua0xvYWRlZD9lLmh0dHAuZ2V0KHIuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGUuYXN5bmNMb2FkRGF0YUNodW5rKHQscixuKX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSk6bighMCkpOm4oITApfSk7cmV0dXJuIE9iamVjdChyeGpzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uYSkobil9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZFBhZ2VDaHVuaz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLnJlY29yZHMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4tMSE9dC5pbmRleE9mKGUucGFnZU5hbWUpfSk7dm9pZCAwIT1pPyhjb25zb2xlLmxvZygiTG9hZGluZyA6ICIraS5wYWdlTmFtZSsiICgiK2kuY2h1bmtVUkwrIikiKSwwPT1pLmNodW5rTG9hZGVkP3RoaXMuaHR0cC5nZXQoaS5jaHVua1VSTCx7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gbi5sb2FkRGF0YUNodW5rKHQsZSxpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSk6ZSgpKTplKCl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZERhdGFDaHVuaz1mdW5jdGlvbihiYXNlNjRkYXRhLGNhbGxiYWNrLHJlY29yZCl7dmFyIGRlY29kZWREYXRhPWF0b2IoYmFzZTY0ZGF0YSk7ZXZhbChkZWNvZGVkRGF0YSkscmVjb3JkLmNodW5rTG9hZGVkPSEwLGNvbnNvbGUubG9nKCJMb2FkZWQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpLGNhbGxiYWNrKCl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUuYXN5bmNMb2FkRGF0YUNodW5rPWZ1bmN0aW9uKGJhc2U2NGRhdGEscmVjb3JkLHJlc29sdmUpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKGJhc2U2NGRhdGEpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikgW0FzeW5jXSIpLHJlc29sdmUoITApfSxDaHVua0xvYWRlclNlcnZpY2UubmdJbmplY3RhYmxlRGVmPV9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5VKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDaHVua0xvYWRlclNlcnZpY2UoX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fLlkoX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXy5jKSl9LHRva2VuOkNodW5rTG9hZGVyU2VydmljZSxwcm92aWRlZEluOiJyb290In0pLENodW5rTG9hZGVyU2VydmljZX0oKX0sIk1yK1giOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJTTXNtIiksbigiRnpxYyIpLG4oIldmNHAiKSxpLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1pY29ue2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4fS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5sYigyLFtpLmFiKG51bGwsMCldLG51bGwsbnVsbCl9fSxOU1lMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBHdH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBvZX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBzZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBsZX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oImloWVkiKTtmdW5jdGlvbiBvKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzfWZ1bmN0aW9uIGEodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyByLmQ7Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyByLm4odCl9fWZ1bmN0aW9uIHModCxlLG4saSxvLGEpe3ZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSk7dmFyIHM9W10sbD1bXSx1PS0xLGM9bnVsbDtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5vZmZzZXQsaT1uPT11LGY9aSYmY3x8e307T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLGw9dFtuXTtpZigib2Zmc2V0IiE9PW4pc3dpdGNoKGk9ZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoaSxzKSxsKXtjYXNlIHIubzpsPW9bbl07YnJlYWs7Y2FzZSByLmE6bD1hW25dO2JyZWFrO2RlZmF1bHQ6bD1lLm5vcm1hbGl6ZVN0eWxlVmFsdWUobixpLGwscyl9ZltpXT1sfSksaXx8bC5wdXNoKGYpLGM9Zix1PW59KSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBhbmltYXRlIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczpcbiAtICIrcy5qb2luKCJcbiAtICIpKTtyZXR1cm4gbH1mdW5jdGlvbiBsKHQsZSxuLGkpe3N3aXRjaChlKXtjYXNlInN0YXJ0Ijp0Lm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gaShuJiZ1KG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGkobiYmdShuLCJkb25lIix0KSl9KTticmVhaztjYXNlImRlc3Ryb3kiOnQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGkobiYmdShuLCJkZXN0cm95Iix0KSl9KX19ZnVuY3Rpb24gdSh0LGUsbil7dmFyIGk9bi50b3RhbFRpbWUscj1jKHQuZWxlbWVudCx0LnRyaWdnZXJOYW1lLHQuZnJvbVN0YXRlLHQudG9TdGF0ZSxlfHx0LnBoYXNlTmFtZSx2b2lkIDA9PWk/dC50b3RhbFRpbWU6aSwhIW4uZGlzYWJsZWQpLG89dC5fZGF0YTtyZXR1cm4gbnVsbCE9byYmKHIuX2RhdGE9bykscn1mdW5jdGlvbiBjKHQsZSxuLGkscixvLGEpe3JldHVybiB2b2lkIDA9PT1yJiYocj0iIiksdm9pZCAwPT09byYmKG89MCkse2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGZyb21TdGF0ZTpuLHRvU3RhdGU6aSxwaGFzZU5hbWU6cix0b3RhbFRpbWU6byxkaXNhYmxlZDohIWF9fWZ1bmN0aW9uIGYodCxlLG4pe3ZhciBpO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhpPXQuZ2V0KGUpKXx8dC5zZXQoZSxpPW4pOihpPXRbZV0pfHwoaT10W2VdPW4pLGl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmluZGV4T2YoIjoiKTtyZXR1cm5bdC5zdWJzdHJpbmcoMSxlKSx0LnN1YnN0cihlKzEpXX12YXIgaD1mdW5jdGlvbih0LGUpe3JldHVybiExfSxwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LG09ZnVuY3Rpb24odCxlLG4pe3JldHVybltdfSxiPW8oKTtpZihifHwidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe2lmKGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0sYnx8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWF0Y2hlcyhlKX07ZWxzZXt2YXIgeT1FbGVtZW50LnByb3RvdHlwZSx2PXkubWF0Y2hlc1NlbGVjdG9yfHx5Lm1vek1hdGNoZXNTZWxlY3Rvcnx8eS5tc01hdGNoZXNTZWxlY3Rvcnx8eS5vTWF0Y2hlc1NlbGVjdG9yfHx5LndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2JiYocD1mdW5jdGlvbih0LGUpe3JldHVybiB2LmFwcGx5KHQsW2VdKX0pfW09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVtdO2lmKG4pci5wdXNoLmFwcGx5KHIsT2JqZWN0KGkuZCkodC5xdWVyeVNlbGVjdG9yQWxsKGUpKSk7ZWxzZXt2YXIgbz10LnF1ZXJ5U2VsZWN0b3IoZSk7byYmci5wdXNoKG8pfXJldHVybiByfX12YXIgZz1udWxsLF89ITE7ZnVuY3Rpb24gdyh0KXtnfHwoZz0oInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSxfPSEhZy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gZy5zdHlsZSk7dmFyIGU9ITA7cmV0dXJuIGcuc3R5bGUmJiFmdW5jdGlvbih0KXtyZXR1cm4iZWJraXQiPT10LnN1YnN0cmluZygxLDYpfSh0KSYmIShlPXQgaW4gZy5zdHlsZSkmJl8mJihlPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBnLnN0eWxlKSxlfXZhciB4PXAsQz1oLFM9bTtmdW5jdGlvbiBPKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKTtlW2ldPXRbbl19KSxlfXZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBDKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUyh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG58fCIifSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLGksbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1bXSksbmV3IHIuZChuLGkpfSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5PT1A9bmV3IEUsdH0oKSxqPTFlMztmdW5jdGlvbiBJKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFlfHxlLmxlbmd0aDwyPzA6VChwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIFQodCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gdCpqO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIFIodCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGE9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaCgnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJykse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2k9VChwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO3ZhciBzPWFbM107bnVsbCE9cyYmKHI9VChNYXRoLmZsb29yKHBhcnNlRmxvYXQocykpLGFbNF0pKTt2YXIgbD1hWzVdO2wmJihvPWwpfWVsc2UgaT10O2lmKCFuKXt2YXIgdT0hMSxjPWUubGVuZ3RoO2k8MCYmKGUucHVzaCgiRHVyYXRpb24gdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLHU9ITApLHI8MCYmKGUucHVzaCgiRGVsYXkgdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLHU9ITApLHUmJmUuc3BsaWNlKGMsMCwnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJyl9cmV0dXJue2R1cmF0aW9uOmksZGVsYXk6cixlYXNpbmc6b319KHQsZSxuKX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pLGV9ZnVuY3Rpb24gUCh0LGUsbil7aWYodm9pZCAwPT09biYmKG49e30pLGUpZm9yKHZhciBpIGluIHQpbltpXT10W2ldO2Vsc2UgQSh0LG4pO3JldHVybiBufWZ1bmN0aW9uIEQodCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIE0odCl7Zm9yKHZhciBlPSIiLG49MDtuPHQuc3R5bGUubGVuZ3RoO24rKyllKz1EKDAsaT10LnN0eWxlLml0ZW0obiksdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGkpKTtmb3IodmFyIGkgaW4gdC5zdHlsZSl0LnN0eWxlLmhhc093blByb3BlcnR5KGkpJiYhaS5zdGFydHNXaXRoKCJfIikmJihlKz1EKDAsaS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtpXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gTih0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXEobik7dC5zdHlsZVtpXT1lW25dfSksbygpJiZNKHQpKX1mdW5jdGlvbiBMKHQsZSl7dC5zdHlsZSYmKE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cShlKTt0LnN0eWxlW25dPSIifSksbygpJiZNKHQpKX1mdW5jdGlvbiBGKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzE9PXQubGVuZ3RoP3RbMF06T2JqZWN0KHIuaSkodCk6dH12YXIgVj1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB6KHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxpPXZvaWQgMDtpPVYuZXhlYyhuKTspZS5wdXNoKGlbMV0pO1YubGFzdEluZGV4PTB9cmV0dXJuIGV9ZnVuY3Rpb24gQih0LGUsbil7dmFyIGk9dC50b1N0cmluZygpLHI9aS5yZXBsYWNlKFYsZnVuY3Rpb24odCxpKXt2YXIgcj1lW2ldO3JldHVybiBlLmhhc093blByb3BlcnR5KGkpfHwobi5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICIraSkscj0iIiksci50b1N0cmluZygpfSk7cmV0dXJuIHI9PWk/dDpyfWZ1bmN0aW9uIFUodCl7Zm9yKHZhciBlPVtdLG49dC5uZXh0KCk7IW4uZG9uZTspZS5wdXNoKG4udmFsdWUpLG49dC5uZXh0KCk7cmV0dXJuIGV9dmFyIEg9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHEodCl7cmV0dXJuIHQucmVwbGFjZShILGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiB0WzFdLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBHKHQsZSxuKXt2YXIgaT1PYmplY3Qua2V5cyhuKTtpZihpLmxlbmd0aCYmZS5sZW5ndGgpe3ZhciByPWVbMF0sbz1bXTtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7ci5oYXNPd25Qcm9wZXJ0eSh0KXx8by5wdXNoKHQpLHJbdF09blt0XX0pLG8ubGVuZ3RoKWZvcih2YXIgYT1mdW5jdGlvbigpe3ZhciBuPWVbc107by5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV09Vyh0LGUpfSl9LHM9MTtzPGUubGVuZ3RoO3MrKylhKCl9cmV0dXJuIGV9ZnVuY3Rpb24gWih0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIFcodCxlKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19dmFyIFk9IioiLEs9bmV3IFNldChbInRydWUiLCIxIl0pLFg9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiAkKHQsZSl7dmFyIG49Sy5oYXModCl8fFguaGFzKHQpLGk9Sy5oYXMoZSl8fFguaGFzKGUpO3JldHVybiBmdW5jdGlvbihyLG8pe3ZhciBhPXQ9PVl8fHQ9PXIscz1lPT1ZfHxlPT1vO3JldHVybiFhJiZuJiYiYm9vbGVhbiI9PXR5cGVvZiByJiYoYT1yP0suaGFzKHQpOlguaGFzKHQpKSwhcyYmaSYmImJvb2xlYW4iPT10eXBlb2YgbyYmKHM9bz9LLmhhcyhlKTpYLmhhcyhlKSksYSYmc319dmFyIEo9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gdHQodCxlLG4pe3JldHVybiBuZXcgZXQodCkuYnVpbGQoZSxuKX12YXIgZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RyaXZlcj10fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBudChlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSxaKHRoaXMsRih0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9ZS5xdWVyeUNvdW50PTAscj1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LGw9cy5uYW1lO2wudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT1sfWVsc2UgaWYoMT09dC50eXBlKXt2YXIgdT1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO2krPXUucXVlcnlDb3VudCxyKz11LmRlcENvdW50LGEucHVzaCh1KX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDppLGRlcENvdW50OnIsb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxpPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIHI9bmV3IFNldCxvPWl8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt6KGVbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7by5oYXNPd25Qcm9wZXJ0eSh0KXx8ci5hZGQodCl9KX0pfX0pLHIuc2l6ZSl7dmFyIGE9VShyLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKCdzdGF0ZSgiJyt0Lm5hbWUrJyIsIC4uLikgbXVzdCBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgZm9sbG93aW5nIHN0eWxlIHN1YnN0aXR1dGlvbnM6ICcrYS5qb2luKCIsICIpKX19cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTpuLG9wdGlvbnM6aT97cGFyYW1zOml9Om51bGx9fSx0LnByb3RvdHlwZS52aXNpdFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7dmFyIG4saSxyLG89Wih0aGlzLEYodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6KG49dC5leHByLGk9ZS5lcnJvcnMscj1bXSwic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtpZigiOiI9PXRbMF0pe3ZhciBpPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKT5wYXJzZUZsb2F0KHQpfTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCl9O2RlZmF1bHQ6cmV0dXJuIGUucHVzaCgnVGhlIHRyYW5zaXRpb24gYWxpYXMgdmFsdWUgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyksIiogPT4gKiJ9fSh0LG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXJldHVybiB2b2lkIGUucHVzaChpKTt0PWl9dmFyIHI9dC5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09cnx8ci5sZW5ndGg8NClyZXR1cm4gbi5wdXNoKCdUaGUgcHJvdmlkZWQgdHJhbnNpdGlvbiBleHByZXNzaW9uICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLGU7dmFyIG89clsxXSxhPXJbMl0scz1yWzNdO2UucHVzaCgkKG8scykpLCI8IiE9YVswXXx8bz09WSYmcz09WXx8ZS5wdXNoKCQocyxvKSl9KHQscixpKX0pOnIucHVzaChuKSxyKSxhbmltYXRpb246byxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6cnQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0U2VxdWVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFoobix0LGUpfSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lLmN1cnJlbnRUaW1lLHI9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9aTt2YXIgbz1aKG4sdCxlKTtyZXR1cm4gcj1NYXRoLm1heChyLGUuY3VycmVudFRpbWUpLG99KTtyZXR1cm4gZS5jdXJyZW50VGltZT1yLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOnJ0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixpPWZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbDtpZih0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKW49dDtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gb3QoUih0LGUpLmR1cmF0aW9uLDAsIiIpO3ZhciBpPXQ7aWYoaS5zcGxpdCgvXHMrLykuc29tZShmdW5jdGlvbih0KXtyZXR1cm4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpfSkpe3ZhciByPW90KDAsMCwiIik7cmV0dXJuIHIuZHluYW1pYz0hMCxyLnN0clZhbHVlPWkscn1yZXR1cm4gb3QoKG49bnx8UihpLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1pO3ZhciBvPXQuc3R5bGVzP3Quc3R5bGVzOk9iamVjdChyLmspKHt9KTtpZig1PT1vLnR5cGUpbj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXt2YXIgYT10LnN0eWxlcyxzPSExO2lmKCFhKXtzPSEwO3ZhciBsPXt9O2kuZWFzaW5nJiYobC5lYXNpbmc9aS5lYXNpbmcpLGE9T2JqZWN0KHIuaykobCl9ZS5jdXJyZW50VGltZSs9aS5kdXJhdGlvbitpLmRlbGF5O3ZhciB1PXRoaXMudmlzaXRTdHlsZShhLGUpO3UuaXNFbXB0eVN0ZXA9cyxuPXV9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOmksc3R5bGU6bixvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufSx0LnByb3RvdHlwZS5fbWFrZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49W107QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQ/dD09ci5hP24ucHVzaCh0KTplLmVycm9ycy5wdXNoKCJUaGUgcHJvdmlkZWQgc3R5bGUgc3RyaW5nIHZhbHVlICIrdCsiIGlzIG5vdCBhbGxvd2VkLiIpOm4ucHVzaCh0KX0pOm4ucHVzaCh0LnN0eWxlcyk7dmFyIGk9ITEsbz1udWxsO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkpe3ZhciBlPXQsbj1lLmVhc2luZztpZihuJiYobz1uLGRlbGV0ZSBlLmVhc2luZyksIWkpZm9yKHZhciByIGluIGUpaWYoZVtyXS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2k9ITA7YnJlYWt9fX0pLHt0eXBlOjYsc3R5bGVzOm4sZWFzaW5nOm8sb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczppLG9wdGlvbnM6bnVsbH19LHQucHJvdG90eXBlLl92YWxpZGF0ZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7aSYmbz4wJiYoby09aS5kdXJhdGlvbitpLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihpKXtpZihuLl9kcml2ZXIudmFsaWRhdGVTdHlsZVByb3BlcnR5KGkpKXt2YXIgYSxzLGwsdT1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxjPXVbaV0sZj0hMDtjJiYobyE9ciYmbz49Yy5zdGFydFRpbWUmJnI8PWMuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2goJ1RoZSBDU1MgcHJvcGVydHkgIicraSsnIiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJytjLnN0YXJ0VGltZSsnbXMiIGFuZCAiJytjLmVuZFRpbWUrJ21zIiBpcyBhbHNvIGJlaW5nIGFuaW1hdGVkIGluIGEgcGFyYWxsZWwgYW5pbWF0aW9uIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK28rJ21zIiBhbmQgIicrcisnbXMiJyksZj0hMSksbz1jLnN0YXJ0VGltZSksZiYmKHVbaV09e3N0YXJ0VGltZTpvLGVuZFRpbWU6cn0pLGUub3B0aW9ucyYmKGE9ZS5lcnJvcnMscz1lLm9wdGlvbnMucGFyYW1zfHx7fSwobD16KHRbaV0pKS5sZW5ndGgmJmwuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK2krJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIiksaTt2YXIgcj0wLG89W10sYT0hMSxzPSExLGw9MCx1PXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBpPW4uX21ha2VTdHlsZUFzdCh0LGUpLHU9bnVsbCE9aS5vZmZzZXQ/aS5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYoaXQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShpLnN0eWxlcyksYz0wO3JldHVybiBudWxsIT11JiYocisrLGM9aS5vZmZzZXQ9dSkscz1zfHxjPDB8fGM+MSxhPWF8fGM8bCxsPWMsby5wdXNoKGMpLGl9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgYz10LnN0ZXBzLmxlbmd0aCxmPTA7cj4wJiZyPGM/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09ciYmKGY9MS8oYy0xKSk7dmFyIGQ9Yy0xLGg9ZS5jdXJyZW50VGltZSxwPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09cC5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIGE9Zj4wP3I9PWQ/MTpmKnI6b1tyXSxzPWEqbTtlLmN1cnJlbnRUaW1lPWgrcC5kZWxheStzLHAuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxpLnN0eWxlcy5wdXNoKHQpfSksaX0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpaKHRoaXMsRih0LmFuaW1hdGlvbiksZSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlUmVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRRdWVyeT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3Iscj10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7dmFyIG89T2JqZWN0KGkuYykoZnVuY3Rpb24odCl7dmFyIGU9ISF0LnNwbGl0KC9ccyosXHMqLykuZmluZChmdW5jdGlvbih0KXtyZXR1cm4iOnNlbGYiPT10fSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZShKLCIiKSksW3Q9dC5yZXBsYWNlKC9AXCovZywiLm5nLXRyaWdnZXIiKS5yZXBsYWNlKC9AXHcrL2csZnVuY3Rpb24odCl7cmV0dXJuIi5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSl9KS5yZXBsYWNlKC86YW5pbWF0aW5nL2csIi5uZy1hbmltYXRpbmciKSxlXX0odC5zZWxlY3RvciksMiksYT1vWzBdLHM9b1sxXTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4ubGVuZ3RoP24rIiAiK2E6YSxmKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3Ise30pO3ZhciBsPVoodGhpcyxGKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6YSxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjpsLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOnJ0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaCgic3RhZ2dlcigpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIHF1ZXJ5KCkiKTt2YXIgbj0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpSKHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOloodGhpcyxGKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOm4sb3B0aW9uczpudWxsfX0sdH0oKSxudD1mdW5jdGlvbih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9e30sdGhpcy5vcHRpb25zPW51bGx9O2Z1bmN0aW9uIGl0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gcnQodCl7dmFyIGU7cmV0dXJuIHQ/KHQ9QSh0KSkucGFyYW1zJiYodC5wYXJhbXM9KGU9dC5wYXJhbXMpP0EoZSk6bnVsbCk6dD17fSx0fWZ1bmN0aW9uIG90KHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiBhdCh0LGUsbixpLHIsbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1udWxsKSx2b2lkIDA9PT1zJiYocz0hMSkse3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOmksZHVyYXRpb246cixkZWxheTpvLHRvdGFsVGltZTpyK28sZWFzaW5nOmEsc3ViVGltZWxpbmU6c319dmFyIHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX21hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5jb25zdW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21hcC5nZXQodCk7bnx8dGhpcy5fbWFwLnNldCh0LG49W10pLG4ucHVzaC5hcHBseShuLE9iamVjdChpLmQpKGUpKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX21hcC5jbGVhcigpfSx0fSgpLGx0PW5ldyBSZWdFeHAoIjplbnRlciIsImciKSx1dD1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gY3QodCxlLG4saSxyLG8sYSxzLGwsdSl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSksdm9pZCAwPT09dSYmKHU9W10pLChuZXcgZnQpLmJ1aWxkS2V5ZnJhbWVzKHQsZSxuLGkscixvLGEscyxsLHUpfXZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyxsLHUpe3ZvaWQgMD09PXUmJih1PVtdKSxsPWx8fG5ldyBzdDt2YXIgYz1uZXcgaHQodCxlLGwsaSxyLHUsW10pO2Mub3B0aW9ucz1zLGMuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbb10sbnVsbCxjLmVycm9ycyxzKSxaKHRoaXMsbixjKTt2YXIgZj1jLnRpbWVsaW5lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29udGFpbnNBbmltYXRpb24oKX0pO2lmKGYubGVuZ3RoJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgpe3ZhciBkPWZbZi5sZW5ndGgtMV07ZC5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpfHxkLnNldFN0eWxlcyhbYV0sbnVsbCxjLmVycm9ycyxzKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnVpbGRLZXlmcmFtZXMoKX0pOlthdChlLFtdLFtdLFtdLDAsMCwiIiwhMSldfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1Ykluc3RydWN0aW9ucy5jb25zdW1lKGUuZWxlbWVudCk7aWYobil7dmFyIGk9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucykscj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKG4saSxpLm9wdGlvbnMpO3IhPW8mJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG8pfWUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO24udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixuKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShuLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxyPW51bGwhPW4uZHVyYXRpb24/SShuLmR1cmF0aW9uKTpudWxsLG89bnVsbCE9bi5kZWxheT9JKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1yJiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxyLG8pO2k9TWF0aC5tYXgoaSxuLmR1cmF0aW9uK24uZGVsYXkpfSksaX0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxaKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lLnN1YkNvbnRleHRDb3VudCxyPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKChyPWUuY3JlYXRlU3ViQ29udGV4dChvKSkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PXIucHJldmlvdXNOb2RlLnR5cGUmJihyLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxyLnByZXZpb3VzTm9kZT1kdCk7dmFyIGE9SShvLmRlbGF5KTtyLmRlbGF5TmV4dFN0ZXAoYSl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFoobix0LHIpfSksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksci5zdWJDb250ZXh0Q291bnQ+aSYmci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1bXSxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/SSh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxaKG4sYSxzKSxyPU1hdGgubWF4KHIscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGkucHVzaChzLmN1cnJlbnRUaW1lbGluZSl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCl9KSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS5fdmlzaXRUaW1pbmc9ZnVuY3Rpb24odCxlKXtpZih0LmR5bmFtaWMpe3ZhciBuPXQuc3RyVmFsdWU7cmV0dXJuIFIoZS5wYXJhbXM/QihuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxpPWUuY3VycmVudFRpbWVsaW5lO24uZGVsYXkmJihlLmluY3JlbWVudFRpbWUobi5kZWxheSksaS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7dmFyIHI9dC5zdHlsZTs1PT1yLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhyLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKHIsZSksaS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50VGltZWxpbmUsaT1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshaSYmbi5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoJiZuLmZvcndhcmRGcmFtZSgpO3ZhciByPWkmJmkuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAocik6bi5zZXRTdHlsZXModC5zdHlsZXMscixlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixyPW4uZHVyYXRpb24sbz1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7by5lYXNpbmc9bi5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtvLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqciksby5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxvLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhvKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpK3IpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscj10Lm9wdGlvbnN8fHt9LG89ci5kZWxheT9JKHIuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1pJiZlLmN1cnJlbnRUaW1lbGluZS5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPWR0KTt2YXIgYT1pLHM9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFyLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPXMubGVuZ3RoO3ZhciBsPW51bGw7cy5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ZS5jdXJyZW50UXVlcnlJbmRleD1yO3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMsaSk7byYmcy5kZWxheU5leHRTdGVwKG8pLGk9PT1lLmVsZW1lbnQmJihsPXMuY3VycmVudFRpbWVsaW5lKSxaKG4sdC5hbmltYXRpb24scykscy5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSksbCYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuPWUucGFyZW50Q29udGV4dCxpPWUuY3VycmVudFRpbWVsaW5lLHI9dC50aW1pbmdzLG89TWF0aC5hYnMoci5kdXJhdGlvbiksYT1vKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLHM9byplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChyLmR1cmF0aW9uPDA/InJldmVyc2UiOnIuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9YS1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX12YXIgbD1lLmN1cnJlbnRUaW1lbGluZTtzJiZsLmRlbGF5TmV4dFN0ZXAocyk7dmFyIHU9bC5jdXJyZW50VGltZTtaKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxuLmN1cnJlbnRTdGFnZ2VyVGltZT1pLmN1cnJlbnRUaW1lLXUrKGkuc3RhcnRUaW1lLW4uY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9LHR9KCksZHQ9e30saHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEscyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9bix0aGlzLl9lbnRlckNsYXNzTmFtZT1pLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPXIsdGhpcy5lcnJvcnM9byx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9ZHQsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPXN8fG5ldyBwdCh0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciBpPXQscj10aGlzLm9wdGlvbnM7bnVsbCE9aS5kdXJhdGlvbiYmKHIuZHVyYXRpb249SShpLmR1cmF0aW9uKSksbnVsbCE9aS5kZWxheSYmKHIuZGVsYXk9SShpLmRlbGF5KSk7dmFyIG89aS5wYXJhbXM7aWYobyl7dmFyIGE9ci5wYXJhbXM7YXx8KGE9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtlJiZhLmhhc093blByb3BlcnR5KHQpfHwoYVt0XT1CKG9bdF0sYSxuLmVycm9ycykpfSl9fX0sdC5wcm90b3R5cGUuX2NvcHlPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5vcHRpb25zKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe3ZhciBuPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9fXJldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVTdWJDb250ZXh0PWZ1bmN0aW9uKGUsbixpKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgcj1ufHx0aGlzLmVsZW1lbnQsbz1uZXcgdCh0aGlzLl9kcml2ZXIscix0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHIsaXx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99LHQucHJvdG90eXBlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9ZHQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9LHQucHJvdG90eXBlLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LHI9bmV3IG10KHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMsaSx0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChyKSxpfSx0LnByb3RvdHlwZS5pbmNyZW1lbnRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX0sdC5wcm90b3R5cGUuaW52b2tlUXVlcnk9ZnVuY3Rpb24odCxlLG4scixvLGEpe3ZhciBzPVtdO2lmKHImJnMucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKGx0LCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UodXQsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTt2YXIgbD10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJihsPW48MD9sLnNsaWNlKGwubGVuZ3RoK24sbC5sZW5ndGgpOmwuc2xpY2UoMCxuKSkscy5wdXNoLmFwcGx5KHMsT2JqZWN0KGkuZCkobCkpfXJldHVybiBvfHwwIT1zLmxlbmd0aHx8YS5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLHN9LHR9KCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPWksdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fHIuYSxlLl9jdXJyZW50S2V5ZnJhbWVbdF09ci5hfSksdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuc2V0U3R5bGVzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvPXRoaXM7ZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPWUpO3ZhciBhPWkmJmkucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyIqIj09PXQ/KG49bnx8T2JqZWN0LmtleXMoZSkpLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XT1yLmF9KTpQKHQsITEsaSl9KSxpfSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUIoc1t0XSxhLG4pO28uX3BlbmRpbmdTdHlsZXNbdF09ZSxvLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpfHwoby5fYmFja0ZpbGxbdF09by5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCk/by5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF06ci5hKSxvLl91cGRhdGVTdHlsZSh0LGUpfSl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVzVG9LZXlmcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wZW5kaW5nU3R5bGVzLG49T2JqZWN0LmtleXMoZSk7MCE9bi5sZW5ndGgmJih0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LG4uZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9jdXJyZW50S2V5ZnJhbWVbbl09ZVtuXX0pLE9iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KGUpfHwodC5fY3VycmVudEtleWZyYW1lW2VdPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV0pfSkpfSx0LnByb3RvdHlwZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXTt0Ll9wZW5kaW5nU3R5bGVzW2VdPW4sdC5fdXBkYXRlU3R5bGUoZSxuKX0pfSx0LnByb3RvdHlwZS5nZXRGaW5hbEtleWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvcGVydGllcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ZS5fc3R5bGVTdW1tYXJ5W25dLHI9dC5fc3R5bGVTdW1tYXJ5W25dOyghaXx8ci50aW1lPmkudGltZSkmJmUuX3VwZGF0ZVN0eWxlKG4sci52YWx1ZSl9KX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7dmFyIGU9bmV3IFNldCxuPW5ldyBTZXQsaT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLG89W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgbD1QKGEsITApO09iamVjdC5rZXlzKGwpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9bFt0XTtpPT1yLm8/ZS5hZGQodCk6aT09ci5hJiZuLmFkZCh0KX0pLGl8fChsLm9mZnNldD1zL3QuZHVyYXRpb24pLG8ucHVzaChsKX0pO3ZhciBhPWUuc2l6ZT9VKGUudmFsdWVzKCkpOltdLHM9bi5zaXplP1Uobi52YWx1ZXMoKSk6W107aWYoaSl7dmFyIGw9b1swXSx1PUEobCk7bC5vZmZzZXQ9MCx1Lm9mZnNldD0xLG89W2wsdV19cmV0dXJuIGF0KHRoaXMuZWxlbWVudCxvLGEscyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX0sdH0oKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyxhLHMpe3ZvaWQgMD09PXMmJihzPSExKTt2YXIgbD10LmNhbGwodGhpcyxlLG4sYS5kZWxheSl8fHRoaXM7cmV0dXJuIGwuZWxlbWVudD1uLGwua2V5ZnJhbWVzPWksbC5wcmVTdHlsZVByb3BzPXIsbC5wb3N0U3R5bGVQcm9wcz1vLGwuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPXMsbC50aW1pbmdzPXtkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzaW5nOmEuZWFzaW5nfSxsfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfSxlLnByb3RvdHlwZS5idWlsZEtleWZyYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMua2V5ZnJhbWVzLGU9dGhpcy50aW1pbmdzLG49ZS5kZWxheSxpPWUuZHVyYXRpb24scj1lLmVhc2luZztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmbil7dmFyIG89W10sYT1pK24scz1uL2EsbD1QKHRbMF0sITEpO2wub2Zmc2V0PTAsby5wdXNoKGwpO3ZhciB1PVAodFswXSwhMSk7dS5vZmZzZXQ9YnQocyksby5wdXNoKHUpO2Zvcih2YXIgYz10Lmxlbmd0aC0xLGY9MTtmPD1jO2YrKyl7dmFyIGQ9UCh0W2ZdLCExKTtkLm9mZnNldD1idCgobitkLm9mZnNldCppKS9hKSxvLnB1c2goZCl9aT1hLG49MCxyPSIiLHQ9b31yZXR1cm4gYXQodGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsaSxuLHIsITApfSxlfShwdCk7ZnVuY3Rpb24gYnQodCxlKXt2b2lkIDA9PT1lJiYoZT0zKTt2YXIgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn12YXIgeXQ9ZnVuY3Rpb24oKXt9LHZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5vcm1hbGl6ZVByb3BlcnR5TmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiBxKHQpfSxlLnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVZhbHVlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPSIiLG89bi50b1N0cmluZygpLnRyaW0oKTtpZihndFtlXSYmMCE9PW4mJiIwIiE9PW4paWYoIm51bWJlciI9PXR5cGVvZiBuKXI9InB4IjtlbHNle3ZhciBhPW4ubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTthJiYwPT1hWzFdLmxlbmd0aCYmaS5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAiK3QrIjoiK24pfXJldHVybiBvK3J9LGV9KHl0KSxndD1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4id2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09ITB9KSxlfSgpO2Z1bmN0aW9uIF90KHQsZSxuLGkscixvLGEscyxsLHUsYyxmLGQpe3JldHVybnt0eXBlOjAsZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsaXNSZW1vdmFsVHJhbnNpdGlvbjpyLGZyb21TdGF0ZTpuLGZyb21TdHlsZXM6byx0b1N0YXRlOmksdG9TdHlsZXM6YSx0aW1lbGluZXM6cyxxdWVyaWVkRWxlbWVudHM6bCxwcmVTdHlsZVByb3BzOnUscG9zdFN0eWxlUHJvcHM6Yyx0b3RhbFRpbWU6ZixlcnJvcnM6ZH19dmFyIHd0PXt9LHh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPW59cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBmdW5jdGlvbih0LGUsbixpLHIpe3JldHVybiB0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSxuLGkscil9KX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLG4saSl9LHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9zdGF0ZVN0eWxlc1siKiJdLHI9dGhpcy5fc3RhdGVTdHlsZXNbdF0sbz1pP2kuYnVpbGRTdHlsZXMoZSxuKTp7fTtyZXR1cm4gcj9yLmJ1aWxkU3R5bGVzKGUsbik6b30sdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlLG4scixvLGEscyxsLHUsYyl7dmFyIGQ9W10saD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8d3QscD10aGlzLmJ1aWxkU3R5bGVzKG4scyYmcy5wYXJhbXN8fHd0LGQpLG09bCYmbC5wYXJhbXN8fHd0LGI9dGhpcy5idWlsZFN0eWxlcyhyLG0sZCkseT1uZXcgU2V0LHY9bmV3IE1hcCxnPW5ldyBNYXAsXz0idm9pZCI9PT1yLHc9e3BhcmFtczpPYmplY3QoaS5hKSh7fSxoLG0pfSx4PWM/W106Y3QodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLGEscCxiLHcsdSxkKSxDPTA7aWYoeC5mb3JFYWNoKGZ1bmN0aW9uKHQpe0M9TWF0aC5tYXgodC5kdXJhdGlvbit0LmRlbGF5LEMpfSksZC5sZW5ndGgpcmV0dXJuIF90KGUsdGhpcy5fdHJpZ2dlck5hbWUsbixyLF8scCxiLFtdLFtdLHYsZyxDLGQpO3guZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LmVsZW1lbnQsaT1mKHYsbix7fSk7dC5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGlbdF09ITB9KTt2YXIgcj1mKGcsbix7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdPSEwfSksbiE9PWUmJnkuYWRkKG4pfSk7dmFyIFM9VSh5LnZhbHVlcygpKTtyZXR1cm4gX3QoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLHIsXyxwLGIseCxTLHYsZyxDKX0sdH0oKSxDdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5idWlsZFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9LGk9QSh0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07bnVsbCE9biYmKGlbZV09bil9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPXQ7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1yW3RdO28ubGVuZ3RoPjEmJihvPUIobyxpLGUpKSxuW3RdPW99KX19KSxufSx0fSgpLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9e30sZS5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnN0YXRlc1t0Lm5hbWVdPW5ldyBDdCh0LnN0eWxlLHQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8e30pfSksT3QodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksT3QodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtuLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgeHQodCxlLG4uc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1uZXcgeHQodCx7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuITB9XSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHRoaXMuc3RhdGVzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250YWluc1F1ZXJpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hdGNoVHJhbnNpdGlvbj1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIubWF0Y2godCxlLG4saSl9KXx8bnVsbH0sdC5wcm90b3R5cGUubWF0Y2hTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsbil9LHR9KCk7ZnVuY3Rpb24gT3QodCxlLG4pe3QuaGFzT3duUHJvcGVydHkoZSk/dC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09dFtlXSk6dC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZV09dFtuXSl9dmFyIEV0PW5ldyBzdCxrdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPW4sdGhpcy5fYW5pbWF0aW9ucz17fSx0aGlzLl9wbGF5ZXJzQnlJZD17fSx0aGlzLnBsYXllcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W10saT10dCh0aGlzLl9kcml2ZXIsZSxuKTtpZihuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBidWlsZCB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIituLmpvaW4oIlxuIikpO3RoaXMuX2FuaW1hdGlvbnNbdF09aX0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LmVsZW1lbnQscj1zKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsbik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGkscix0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvLHM9W10sbD10aGlzLl9hbmltYXRpb25zW3RdLHU9bmV3IE1hcDtpZihsPyhvPWN0KHRoaXMuX2RyaXZlcixlLGwsIm5nLWVudGVyIiwibmctbGVhdmUiLHt9LHt9LG4sRXQscykpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Zih1LHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPW51bGx9KX0pOihzLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxvPVtdKSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrcy5qb2luKCJcbiIpKTt1LmZvckVhY2goZnVuY3Rpb24odCxlKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09aS5fZHJpdmVyLmNvbXB1dGVTdHlsZShlLG4sci5hKX0pfSk7dmFyIGM9YShvLm1hcChmdW5jdGlvbih0KXt2YXIgZT11LmdldCh0LmVsZW1lbnQpO3JldHVybiBpLl9idWlsZFBsYXllcih0LHt9LGUpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZFt0XT1jLGMub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVzdHJveSh0KX0pLHRoaXMucGxheWVycy5wdXNoKGMpLGN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0UGxheWVyKHQpO2UuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9wbGF5ZXJzQnlJZFt0XTt2YXIgbj10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtuPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG4sMSl9LHQucHJvdG90eXBlLl9nZXRQbGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyc0J5SWRbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB0aGUgdGltZWxpbmUgcGxheWVyIHJlZmVyZW5jZWQgYnkgIit0KTtyZXR1cm4gZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPWMoZSwiIiwiIiwiIik7cmV0dXJuIGwodGhpcy5fZ2V0UGxheWVyKHQpLG4scixpKSxmdW5jdGlvbigpe319LHQucHJvdG90eXBlLmNvbW1hbmQ9ZnVuY3Rpb24odCxlLG4saSl7aWYoInJlZ2lzdGVyIiE9bilpZigiY3JlYXRlIiE9bil7dmFyIHI9dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChuKXtjYXNlInBsYXkiOnIucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOnIucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpyLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpyLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6ci5maW5pc2goKTticmVhaztjYXNlImluaXQiOnIuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOnIuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChpWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fWVsc2UgdGhpcy5jcmVhdGUodCxlLGlbMF18fHt9KTtlbHNlIHRoaXMucmVnaXN0ZXIodCxpWzBdKX0sdH0oKSxqdD1bXSxJdD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sVHQ9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LFJ0PSJfX25nX3JlbW92ZWQiLEF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKSx0aGlzLm5hbWVzcGFjZUlkPWU7dmFyIG49dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10P3Q6bnVsbH0obj90LnZhbHVlOnQpLG4pe3ZhciBpPUEodCk7ZGVsZXRlIGkudmFsdWUsdGhpcy5vcHRpb25zPWl9ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmFic29yYk9wdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJhbXM7aWYoZSl7dmFyIG49dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGw9PW5bdF0mJihuW3RdPWVbdF0pfSl9fSx0fSgpLFB0PW5ldyBBdCgidm9pZCIpLER0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9bix0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9e30sdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsVXQoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1yZXR1cm4gdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByLG89dGhpcztpZighdGhpcy5fdHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciBldmVudCAiJytuKyciIGJlY2F1c2UgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrIlwiIGRvZXNuJ3QgZXhpc3QhIik7aWYobnVsbD09bnx8MD09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGV2ZW50IGlzIHVuZGVmaW5lZCEnKTtpZigic3RhcnQiIT0ocj1uKSYmImRvbmUiIT1yKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgZm9yIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQhJyk7dmFyIGE9Zih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOml9O2EucHVzaChzKTt2YXIgbD1mKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsdCx7fSk7cmV0dXJuIGwuaGFzT3duUHJvcGVydHkoZSl8fChVdCh0LCJuZy10cmlnZ2VyIiksVXQodCwibmctdHJpZ2dlci0iK2UpLGxbZV09UHQpLGZ1bmN0aW9uKCl7by5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXt2YXIgdD1hLmluZGV4T2Yocyk7dD49MCYmYS5zcGxpY2UodCwxKSxvLl90cmlnZ2Vyc1tlXXx8ZGVsZXRlIGxbZV19KX19LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzW3RdJiYodGhpcy5fdHJpZ2dlcnNbdF09ZSwhMCl9LHQucHJvdG90eXBlLl9nZXRUcmlnZ2VyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyaWdnZXJzW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyICInK3QrJyIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQhJyk7cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpczt2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxhPW5ldyBOdCh0aGlzLmlkLGUsdCkscz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtzfHwoVXQodCwibmctdHJpZ2dlciIpLFV0KHQsIm5nLXRyaWdnZXItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LHM9e30pKTt2YXIgbD1zW2VdLHU9bmV3IEF0KG4sdGhpcy5pZCk7aWYoIShuJiZuLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmbCYmdS5hYnNvcmJPcHRpb25zKGwub3B0aW9ucyksc1tlXT11LGx8fChsPVB0KSwidm9pZCI9PT11LnZhbHVlfHxsLnZhbHVlIT09dS52YWx1ZSl7dmFyIGM9Zih0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCx0LFtdKTtjLmZvckVhY2goZnVuY3Rpb24odCl7dC5uYW1lc3BhY2VJZD09ci5pZCYmdC50cmlnZ2VyTmFtZT09ZSYmdC5xdWV1ZWQmJnQuZGVzdHJveSgpfSk7dmFyIGQ9by5tYXRjaFRyYW5zaXRpb24obC52YWx1ZSx1LnZhbHVlLHQsdS5wYXJhbXMpLGg9ITE7aWYoIWQpe2lmKCFpKXJldHVybjtkPW8uZmFsbGJhY2tUcmFuc2l0aW9uLGg9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmQsZnJvbVN0YXRlOmwsdG9TdGF0ZTp1LHBsYXllcjphLGlzRmFsbGJhY2tUcmFuc2l0aW9uOmh9KSxofHwoVXQodCwibmctYW5pbWF0ZS1xdWV1ZWQiKSxhLm9uU3RhcnQoZnVuY3Rpb24oKXtIdCh0LCJuZy1hbmltYXRlLXF1ZXVlZCIpfSkpLGEub25Eb25lKGZ1bmN0aW9uKCl7dmFyIGU9ci5wbGF5ZXJzLmluZGV4T2YoYSk7ZT49MCYmci5wbGF5ZXJzLnNwbGljZShlLDEpO3ZhciBuPXIuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihuKXt2YXIgaT1uLmluZGV4T2YoYSk7aT49MCYmbi5zcGxpY2UoaSwxKX19KSx0aGlzLnBsYXllcnMucHVzaChhKSxjLnB1c2goYSksYX1pZighZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxpPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTtpZighZS5oYXNPd25Qcm9wZXJ0eShvKXx8dFtvXSE9PWVbb10pcmV0dXJuITF9cmV0dXJuITB9KGwucGFyYW1zLHUucGFyYW1zKSl7dmFyIHA9W10sbT1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMscCksYj1vLm1hdGNoU3R5bGVzKHUudmFsdWUsdS5wYXJhbXMscCk7cC5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHApOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7TCh0LG0pLE4odCxiKX0pfX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2RlbGV0ZSB0aGlzLl90cmlnZ2Vyc1t0XSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goZnVuY3Rpb24oZSxuKXtkZWxldGUgZVt0XX0pLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuLGkpe2UuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGksbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSE9dH0pKX0pfSx0LnByb3RvdHlwZS5jbGVhckVsZW1lbnRDYWNoZT1mdW5jdGlvbih0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTt2YXIgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfSx0LnByb3RvdHlwZS5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCwiLm5nLXRyaWdnZXIiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0W1J0XSl7dmFyIG49aS5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KTtuLnNpemU/bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITEsITApfSk6aS5jbGVhckVsZW1lbnRDYWNoZSh0KX19KX0sdC5wcm90b3R5cGUudHJpZ2dlckxlYXZlQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihvKXt2YXIgcz1bXTtpZihPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKHIuX3RyaWdnZXJzW2VdKXt2YXIgbj1yLnRyaWdnZXIodCxlLCJ2b2lkIixpKTtuJiZzLnB1c2gobil9fSkscy5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSksbiYmYShzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gci5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUodCl9KSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldCh0KTtpZihuKXt2YXIgaT1uZXcgU2V0O24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1uLm5hbWU7aWYoIWkuaGFzKHIpKXtpLmFkZChyKTt2YXIgbz1lLl90cmlnZ2Vyc1tyXS5mYWxsYmFja1RyYW5zaXRpb24sYT1lLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KVtyXXx8UHQscz1uZXcgQXQoInZvaWQiKSxsPW5ldyBOdChlLmlkLHIsdCk7ZS5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLGUuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTpyLHRyYW5zaXRpb246byxmcm9tU3RhdGU6YSx0b1N0YXRlOnMscGxheWVyOmwsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX19KX19LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSwhMCksIXRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpe3ZhciByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXt2YXIgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZSBmb3IodmFyIGE9dDthPWEucGFyZW50Tm9kZTspaWYoaS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGEpKXtyPSEwO2JyZWFrfX10aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxyP2kubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpOihpLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtyZXR1cm4gbi5jbGVhckVsZW1lbnRDYWNoZSh0KX0pLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlKXtVdCh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfSx0LnByb3RvdHlwZS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcj1pLnBsYXllcjtpZighci5kZXN0cm95ZWQpe3ZhciBvPWkuZWxlbWVudCxhPWUuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO2EmJmEuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLm5hbWU9PWkudHJpZ2dlck5hbWUpe3ZhciBuPWMobyxpLnRyaWdnZXJOYW1lLGkuZnJvbVN0YXRlLnZhbHVlLGkudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LGwoaS5wbGF5ZXIsZS5waGFzZSxuLGUuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT9lLl9lbmdpbmUuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3IuZGVzdHJveSgpfSk6bi5wdXNoKGkpfX0pLHRoaXMuX3F1ZXVlPVtdLG4uc29ydChmdW5jdGlvbih0LG4pe3ZhciBpPXQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQscj1uLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1pfHwwPT1yP2ktcjplLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0LmVsZW1lbnQsbi5lbGVtZW50KT8xOi0xfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX0sdC5wcm90b3R5cGUuZWxlbWVudENvbnRhaW5zRGF0YT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSwhIXRoaXMuX3F1ZXVlLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWxlbWVudD09PXR9KXx8ZX0sdH0oKSxNdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLmRyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt9fXJldHVybiB0LnByb3RvdHlwZS5fb25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVldWVkUGxheWVycyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5xdWV1ZWQmJnQucHVzaChlKX0pfSksdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVOYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRHQodCxlLHRoaXMpO3JldHVybiBlLnBhcmVudE5vZGU/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QobixlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsbiksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09bn0sdC5wcm90b3R5cGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtpZihuPj0wKXtmb3IodmFyIGk9ITEscj1uO3I+PTA7ci0tKWlmKHRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLl9uYW1lc3BhY2VMaXN0W3JdLmhvc3RFbGVtZW50LGUpKXt0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShyKzEsMCx0KSxpPSEwO2JyZWFrfWl8fHRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKDAsMCx0KX1lbHNlIHRoaXMuX25hbWVzcGFjZUxpc3QucHVzaCh0KTtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5zZXQoZSx0KSx0fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyZXR1cm4gbnx8KG49dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSksbn0sdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07aSYmaS5yZWdpc3RlcihlLG4pJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih0KXt2YXIgaT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtuLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShpLmhvc3RFbGVtZW50KSxkZWxldGUgbi5fbmFtZXNwYWNlTG9va3VwW3RdO3ZhciBlPW4uX25hbWVzcGFjZUxpc3QuaW5kZXhPZihpKTtlPj0wJiZuLl9uYW1lc3BhY2VMaXN0LnNwbGljZShlLDEpfSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KGUpfSl9fSx0LnByb3RvdHlwZS5fZmV0Y2hOYW1lc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX0sdC5wcm90b3R5cGUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBTZXQsbj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobilmb3IodmFyIGk9T2JqZWN0LmtleXMobikscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1uW2lbcl1dLm5hbWVzcGFjZUlkO2lmKG8pe3ZhciBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG8pO2EmJmUuYWRkKGEpfX1yZXR1cm4gZX0sdC5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbih0LGUsbixpKXtpZihMdChlKSl7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYocilyZXR1cm4gci50cmlnZ2VyKGUsbixpKSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUsbixpKXtpZihMdChlKSl7dmFyIHI9ZVtSdF07aWYociYmci5zZXRGb3JSZW1vdmFsKXtyLnNldEZvclJlbW92YWw9ITEsci5zZXRGb3JNb3ZlPSEwO3ZhciBvPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO28+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UobywxKX1pZih0KXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTthJiZhLmluc2VydE5vZGUoZSxuKX1pJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9fSx0LnByb3RvdHlwZS5jb2xsZWN0RW50ZXJFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQ9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLFV0KHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksSHQodCwibmctYW5pbWF0ZS1kaXNhYmxlZCIpKX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUsbil7aWYoTHQoZSkpe3ZhciBpPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpP2kucmVtb3ZlTm9kZShlLG4pOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLG4pfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoZSxuKX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc1JlbW92ZWQ9ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtSdF09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDppLGhhc0FuaW1hdGlvbjpuLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIEx0KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLG4saSxyKTpmdW5jdGlvbigpe319LHQucHJvdG90eXBlLl9idWlsZEluc3RydWN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIHQudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcix0LmVsZW1lbnQsdC5mcm9tU3RhdGUudmFsdWUsdC50b1N0YXRlLnZhbHVlLG4saSx0LmZyb21TdGF0ZS5vcHRpb25zLHQudG9TdGF0ZS5vcHRpb25zLGUscil9LHQucHJvdG90eXBlLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCk7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KX0pLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKG49dGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGluZyIsITApKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl9KX0sdC5wcm90b3R5cGUuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucXVldWVkP3QubWFya2VkRm9yRGVzdHJveT0hMDp0LmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2lmKHQucGxheWVycy5sZW5ndGgpcmV0dXJuIGEodC5wbGF5ZXJzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZSgpfSk7ZSgpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NMZWF2ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbUnRdO2lmKG4mJm4uc2V0Rm9yUmVtb3ZhbCl7aWYodFtSdF09SXQsbi5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO3ZhciBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG4ubmFtZXNwYWNlSWQpO2kmJmkuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxuLnNldEZvclJlbW92YWwpfXRoaXMuZHJpdmVyLm1hdGNoZXNFbGVtZW50KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIikmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKX0pfSx0LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PS0xKTt2YXIgbj1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LG4pfSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKHZhciBpPTA7aTx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2krKylVdCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbaV0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7dmFyIHI9W107dHJ5e249dGhpcy5fZmx1c2hBbmltYXRpb25zKHIsdCl9ZmluYWxseXtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0oKX19ZWxzZSBmb3IoaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe3ZhciBvPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sbi5sZW5ndGg/YShuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsbz1uZXcgc3Qscz1bXSxsPW5ldyBNYXAsdT1bXSxjPW5ldyBNYXAsZD1uZXcgTWFwLGg9bmV3IE1hcCxwPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cC5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLGk9MDtpPGUubGVuZ3RoO2krKylwLmFkZChlW2ldKX0pO3ZhciBtPXRoaXMuYm9keU5vZGUsYj1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSkseT16dChiLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksdj1uZXcgTWFwLGc9MDt5LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK2crKzt2LnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVXQodCxuKX0pfSk7Zm9yKHZhciBfPVtdLHc9bmV3IFNldCx4PW5ldyBTZXQsQz0wO0M8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtDKyspKFU9KEI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0NdKVtSdF0pJiZVLnNldEZvclJlbW92YWwmJihfLnB1c2goQiksdy5hZGQoQiksVS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoQiwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB3LmFkZCh0KX0pOnguYWRkKEIpKTt2YXIgUz1uZXcgTWFwLE89enQoYixBcnJheS5mcm9tKHcpKTtPLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK2crKztTLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVXQodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7eS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49di5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIdCh0LG4pfSl9KSxPLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1TLmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsbil9KX0pLF8uZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgRT1bXSxrPVtdLGo9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtqPj0wO2otLSl0aGlzLl9uYW1lc3BhY2VMaXN0W2pdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixpPXQuZWxlbWVudDtpZihFLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIHI9aVtSdF07aWYociYmci5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBhPSFtfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KG0saSksbD1TLmdldChpKSxwPXYuZ2V0KGkpLGI9bi5fYnVpbGRJbnN0cnVjdGlvbih0LG8scCxsLGEpO2lmKGIuZXJyb3JzJiZiLmVycm9ycy5sZW5ndGgpay5wdXNoKGIpO2Vsc2V7aWYoYSlyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwoaSxiLmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gTihpLGIudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7aWYodC5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwoaSxiLmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gTihpLGIudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7Yi50aW1lbGluZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMH0pLG8uYXBwZW5kKGksYi50aW1lbGluZXMpLHUucHVzaCh7aW5zdHJ1Y3Rpb246YixwbGF5ZXI6ZSxlbGVtZW50Oml9KSxiLnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmKGMsdCxbXSkucHVzaChlKX0pLGIucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGgpe3ZhciBpPWQuZ2V0KGUpO2l8fGQuc2V0KGUsaT1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkuYWRkKHQpfSl9fSksYi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCksaT1oLmdldChlKTtpfHxoLnNldChlLGk9bmV3IFNldCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLmFkZCh0KX0pfSl9fSk7aWYoay5sZW5ndGgpe3ZhciBJPVtdO2suZm9yRWFjaChmdW5jdGlvbih0KXtJLnB1c2goIkAiK3QudHJpZ2dlck5hbWUrIiBoYXMgZmFpbGVkIGR1ZSB0bzpcbiIpLHQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEkucHVzaCgiLSAiK3QrIlxuIil9KX0pLEUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLnJlcG9ydEVycm9yKEkpfXZhciBUPW5ldyBNYXAsUj1uZXcgTWFwO3UuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQ7by5oYXMoZSkmJihSLnNldChlLGUpLG4uX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQucGxheWVyLm5hbWVzcGFjZUlkLHQuaW5zdHJ1Y3Rpb24sVCkpfSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtuLl9nZXRQcmV2aW91c1BsYXllcnMoZSwhMSx0Lm5hbWVzcGFjZUlkLHQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaChmdW5jdGlvbih0KXtmKFQsZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIEE9Xy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIFF0KHQsZCxoKX0pLFA9bmV3IE1hcDtWdChQLHRoaXMuZHJpdmVyLHgsaCxyLmEpLmZvckVhY2goZnVuY3Rpb24odCl7UXQodCxkLGgpJiZBLnB1c2godCl9KTt2YXIgRD1uZXcgTWFwO3kuZm9yRWFjaChmdW5jdGlvbih0LGUpe1Z0KEQsbi5kcml2ZXIsbmV3IFNldCh0KSxkLHIubyl9KSxBLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9UC5nZXQodCksbj1ELmdldCh0KTtQLnNldCh0LE9iamVjdChpLmEpKHt9LGUsbikpfSk7dmFyIE09W10sRj1bXSxWPXt9O3UuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQsaT10LnBsYXllcixyPXQuaW5zdHJ1Y3Rpb247aWYoby5oYXMoZSkpe2lmKHAuaGFzKGUpKXJldHVybiBpLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBOKGUsci50b1N0eWxlcyl9KSxpLmRpc2FibGVkPSEwLGkub3ZlcnJpZGVUb3RhbFRpbWUoci50b3RhbFRpbWUpLHZvaWQgcy5wdXNoKGkpO3ZhciB1PVY7aWYoUi5zaXplPjEpe2Zvcih2YXIgYz1lLGY9W107Yz1jLnBhcmVudE5vZGU7KXt2YXIgZD1SLmdldChjKTtpZihkKXt1PWQ7YnJlYWt9Zi5wdXNoKGMpfWYuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gUi5zZXQodCx1KX0pfXZhciBoPW4uX2J1aWxkQW5pbWF0aW9uKGkubmFtZXNwYWNlSWQscixULGwsRCxQKTtpZihpLnNldFJlYWxQbGF5ZXIoaCksdT09PVYpTS5wdXNoKGkpO2Vsc2V7dmFyIG09bi5wbGF5ZXJzQnlFbGVtZW50LmdldCh1KTttJiZtLmxlbmd0aCYmKGkucGFyZW50UGxheWVyPWEobSkpLHMucHVzaChpKX19ZWxzZSBMKGUsci5mcm9tU3R5bGVzKSxpLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBOKGUsci50b1N0eWxlcyl9KSxGLnB1c2goaSkscC5oYXMoZSkmJnMucHVzaChpKX0pLEYuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1sLmdldCh0LmVsZW1lbnQpO2lmKGUmJmUubGVuZ3RoKXt2YXIgbj1hKGUpO3Quc2V0UmVhbFBsYXllcihuKX19KSxzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnRQbGF5ZXI/dC5zeW5jUGxheWVyRXZlbnRzKHQucGFyZW50UGxheWVyKTp0LmRlc3Ryb3koKX0pO2Zvcih2YXIgej0wO3o8Xy5sZW5ndGg7eisrKXt2YXIgQixVPShCPV9bel0pW1J0XTtpZihIdChCLCJuZy1sZWF2ZSIpLCFVfHwhVS5oYXNBbmltYXRpb24pe3ZhciBIPVtdO2lmKGMuc2l6ZSl7dmFyIHE9Yy5nZXQoQik7cSYmcS5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChpLmQpKHEpKTtmb3IodmFyIFE9dGhpcy5kcml2ZXIucXVlcnkoQiwiLm5nLWFuaW1hdGluZyIsITApLEc9MDtHPFEubGVuZ3RoO0crKyl7dmFyIFo9Yy5nZXQoUVtHXSk7WiYmWi5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChpLmQpKFopKX19dmFyIFc9SC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZGVzdHJveWVkfSk7Vy5sZW5ndGg/cXQodGhpcyxCLFcpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShCKX19cmV0dXJuIF8ubGVuZ3RoPTAsTS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucGxheWVycy5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7dC5kZXN0cm95KCk7dmFyIGU9bi5wbGF5ZXJzLmluZGV4T2YodCk7bi5wbGF5ZXJzLnNwbGljZShlLDEpfSksdC5wbGF5KCl9KSxNfSx0LnByb3RvdHlwZS5lbGVtZW50Q29udGFpbnNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEsaT1lW1J0XTtyZXR1cm4gaSYmaS5zZXRGb3JSZW1vdmFsJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8bn0sdC5wcm90b3R5cGUuYWZ0ZXJGbHVzaD1mdW5jdGlvbih0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9nZXRQcmV2aW91c1BsYXllcnM9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz1bXTtpZihlKXt2YXIgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYobz1hKX1lbHNle3ZhciBzPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYocyl7dmFyIGw9IXJ8fCJ2b2lkIj09cjtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5xdWV1ZWR8fChsfHx0LnRyaWdnZXJOYW1lPT1pKSYmby5wdXNoKHQpfSl9fXJldHVybihufHxpKSYmKG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIShuJiZuIT10Lm5hbWVzcGFjZUlkfHxpJiZpIT10LnRyaWdnZXJOYW1lKX0pKSxvfSx0LnByb3RvdHlwZS5fYmVmb3JlQW5pbWF0aW9uQnVpbGQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8sYT1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsbD1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWUsdT1mdW5jdGlvbih0KXt2YXIgaT10LmVsZW1lbnQscj1pIT09YSxvPWYobixpLFtdKTtjLl9nZXRQcmV2aW91c1BsYXllcnMoaSxyLHMsbCxlLnRvU3RhdGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRSZWFsUGxheWVyKCk7ZS5iZWZvcmVEZXN0cm95JiZlLmJlZm9yZURlc3Ryb3koKSx0LmRlc3Ryb3koKSxvLnB1c2godCl9KX0sYz10aGlzO3RyeXtmb3IodmFyIGQ9T2JqZWN0KGkuZSkoZS50aW1lbGluZXMpLGg9ZC5uZXh0KCk7IWguZG9uZTtoPWQubmV4dCgpKXUoaC52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7aCYmIWguZG9uZSYmKG89ZC5yZXR1cm4pJiZvLmNhbGwoZCl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fUwoYSxlLmZyb21TdHlsZXMpfSx0LnByb3RvdHlwZS5fYnVpbGRBbmltYXRpb249ZnVuY3Rpb24odCxlLG4saSxvLGwpe3ZhciB1PXRoaXMsYz1lLnRyaWdnZXJOYW1lLGQ9ZS5lbGVtZW50LGg9W10scD1uZXcgU2V0LG09bmV3IFNldCxiPWUudGltZWxpbmVzLm1hcChmdW5jdGlvbihlKXt2YXIgYT1lLmVsZW1lbnQ7cC5hZGQoYSk7dmFyIGY9YVtSdF07aWYoZiYmZi5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IHIuZChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciBiLHksdj1hIT09ZCxnPShiPShuLmdldChhKXx8anQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSx5PVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvIGluc3RhbmNlb2Ygci5uP3Qoby5wbGF5ZXJzLG4pOm4ucHVzaChvKX19KGIseSkseSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhdC5lbGVtZW50JiZ0LmVsZW1lbnQ9PT1hfSksXz1vLmdldChhKSx3PWwuZ2V0KGEpLHg9cygwLHUuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyxfLHcpLEM9dS5fYnVpbGRQbGF5ZXIoZSx4LGcpO2lmKGUuc3ViVGltZWxpbmUmJmkmJm0uYWRkKGEpLHYpe3ZhciBTPW5ldyBOdCh0LGMsYSk7Uy5zZXRSZWFsUGxheWVyKEMpLGgucHVzaChTKX1yZXR1cm4gQ30pO2guZm9yRWFjaChmdW5jdGlvbih0KXtmKHUucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LFtdKS5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgaTtpZih0IGluc3RhbmNlb2YgTWFwKXtpZihpPXQuZ2V0KGUpKXtpZihpLmxlbmd0aCl7dmFyIHI9aS5pbmRleE9mKG4pO2kuc3BsaWNlKHIsMSl9MD09aS5sZW5ndGgmJnQuZGVsZXRlKGUpfX1lbHNlKGk9dFtlXSkmJihpLmxlbmd0aCYmKHI9aS5pbmRleE9mKG4pLGkuc3BsaWNlKHIsMSkpLDA9PWkubGVuZ3RoJiZkZWxldGUgdFtlXSk7cmV0dXJuIGl9KHUucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LHQpfSl9KSxwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFV0KHQsIm5nLWFuaW1hdGluZyIpfSk7dmFyIHk9YShiKTtyZXR1cm4geS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsIm5nLWFuaW1hdGluZyIpfSksTihkLGUudG9TdHlsZXMpfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2YoaSx0LFtdKS5wdXNoKHkpfSkseX0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKHQuZWxlbWVudCxlLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxuKTpuZXcgci5kKHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgci5kLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1yZXR1cm4gdC5wcm90b3R5cGUuc2V0UmVhbFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj10LE9iamVjdC5rZXlzKHRoaXMuX3F1ZXVlZENhbGxiYWNrcykuZm9yRWFjaChmdW5jdGlvbihuKXtlLl9xdWV1ZWRDYWxsYmFja3Nbbl0uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbCh0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Zih0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsdCksdGhpcy5fcGxheWVyLm9uU3RhcnQodCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5pbml0KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX0sdH0oKTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gdCYmMT09PXQubm9kZVR5cGV9ZnVuY3Rpb24gRnQodCxlKXt2YXIgbj10LnN0eWxlLmRpc3BsYXk7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT1udWxsIT1lP2U6Im5vbmUiLG59ZnVuY3Rpb24gVnQodCxlLG4saSxyKXt2YXIgbz1bXTtuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG8ucHVzaChGdCh0KSl9KTt2YXIgYT1bXTtpLmZvckVhY2goZnVuY3Rpb24obixpKXt2YXIgbz17fTtuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49b1t0XT1lLmNvbXB1dGVTdHlsZShpLHQscik7biYmMCE9bi5sZW5ndGh8fChpW1J0XT1UdCxhLnB1c2goaSkpfSksdC5zZXQoaSxvKX0pO3ZhciBzPTA7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gRnQodCxvW3MrK10pfSksYX1mdW5jdGlvbiB6dCh0LGUpe3ZhciBuPW5ldyBNYXA7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNldCh0LFtdKX0pLDA9PWUubGVuZ3RoKXJldHVybiBuO3ZhciBpPW5ldyBTZXQoZSkscj1uZXcgTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24gdChlKXtpZighZSlyZXR1cm4gMTt2YXIgbz1yLmdldChlKTtpZihvKXJldHVybiBvO3ZhciBhPWUucGFyZW50Tm9kZTtyZXR1cm4gbz1uLmhhcyhhKT9hOmkuaGFzKGEpPzE6dChhKSxyLnNldChlLG8pLG99KHQpOzEhPT1lJiZuLmdldChlKS5wdXNoKHQpfSksbn12YXIgQnQ9IiQkY2xhc3NlcyI7ZnVuY3Rpb24gVXQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj10W0J0XTtufHwobj10W0J0XT17fSksbltlXT0hMH19ZnVuY3Rpb24gSHQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5yZW1vdmUoZSk7ZWxzZXt2YXIgbj10W0J0XTtuJiZkZWxldGUgbltlXX19ZnVuY3Rpb24gcXQodCxlLG4pe2Eobikub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvY2Vzc0xlYXZlTm9kZShlKX0pfWZ1bmN0aW9uIFF0KHQsZSxuKXt2YXIgaT1uLmdldCh0KTtpZighaSlyZXR1cm4hMTt2YXIgcj1lLmdldCh0KTtyZXR1cm4gcj9pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSk6ZS5zZXQodCxpKSxuLmRlbGV0ZSh0KSwhMH12YXIgR3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgTXQodCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBrdCh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBpLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9fXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3RlclRyaWdnZXI9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10KyItIitpLGE9dGhpcy5fdHJpZ2dlckNhY2hlW29dO2lmKCFhKXt2YXIgcz1bXSxsPXR0KHRoaXMuX2RyaXZlcixyLHMpO2lmKHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2krJyIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAnK3Muam9pbigiXG4gLSAiKSk7YT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgU3QodCxlKX0oaSxsKSx0aGlzLl90cmlnZ2VyQ2FjaGVbb109YX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLGksYSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9LHQucHJvdG90eXBlLm9uSW5zZXJ0PWZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixpKX0sdC5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX0sdC5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbih0LGUsbixyKXtpZigiQCI9PW4uY2hhckF0KDApKXt2YXIgbz1PYmplY3QoaS5jKShkKG4pLDIpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQob1swXSxlLG9bMV0scil9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIodCxlLG4scil9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe3ZhciBhPU9iamVjdChpLmMpKGQobiksMik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihhWzBdLGUsYVsxXSxvKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLG4scixvKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9LTEpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGxheWVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxadD0iYW5pbWF0aW9uIixXdD0iYW5pbWF0aW9uZW5kIixZdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fbmFtZT1lLHRoaXMuX2R1cmF0aW9uPW4sdGhpcy5fZGVsYXk9aSx0aGlzLl9lYXNpbmc9cix0aGlzLl9maWxsTW9kZT1vLHRoaXMuX29uRG9uZUZuPWEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fZXZlbnRGbj1mdW5jdGlvbih0KXtyZXR1cm4gcy5faGFuZGxlQ2FsbGJhY2sodCl9fXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0LGUsbjtlPXRoaXMuX2R1cmF0aW9uKyJtcyAiK3RoaXMuX2Vhc2luZysiICIrdGhpcy5fZGVsYXkrIm1zIDEgbm9ybWFsICIrdGhpcy5fZmlsbE1vZGUrIiAiK3RoaXMuX25hbWUsKG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS50cmltKCkpLmxlbmd0aCYmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspIiwiPT09dC5jaGFyQXQobikmJjB9KG4pLGU9bisiLCAiK2UpLHRlKHQsIiIsZSksSnQodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtLdCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInBhdXNlZCIpfSx0LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtLdCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInJ1bm5pbmciKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9WHQodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKTt0aGlzLl9wb3NpdGlvbj10KnRoaXMuX2R1cmF0aW9uLHRlKHRoaXMuX2VsZW1lbnQsIkRlbGF5IiwiLSIrdGhpcy5fcG9zaXRpb24rIm1zIixlKX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHQucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9uZ1Rlc3RNYW51YWxUaW1lc3RhbXB8fERhdGUubm93KCksbj0xZTMqcGFyc2VGbG9hdCh0LmVsYXBzZWRUaW1lLnRvRml4ZWQoMykpO3QuYW5pbWF0aW9uTmFtZT09dGhpcy5fbmFtZSYmTWF0aC5tYXgoZS10aGlzLl9zdGFydFRpbWUsMCk+PXRoaXMuX2RlbGF5JiZuPj10aGlzLl9kdXJhdGlvbiYmdGhpcy5maW5pc2goKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLEp0KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGk7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZmluaXNoKCksZT10aGlzLl9uYW1lLChpPSR0KG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS5zcGxpdCgiLCIpLGUpKT49MCYmKG4uc3BsaWNlKGksMSksdGUodCwiIixuLmpvaW4oIiwiKSkpKX0sdH0oKTtmdW5jdGlvbiBLdCh0LGUsbil7dGUodCwiUGxheVN0YXRlIixuLFh0KHQsZSkpfWZ1bmN0aW9uIFh0KHQsZSl7dmFyIG49ZWUodCwiIik7cmV0dXJuIG4uaW5kZXhPZigiLCIpPjA/JHQobi5zcGxpdCgiLCIpLGUpOiR0KFtuXSxlKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBKdCh0LGUsbil7bj90LnJlbW92ZUV2ZW50TGlzdGVuZXIoV3QsZSk6dC5hZGRFdmVudExpc3RlbmVyKFd0LGUpfWZ1bmN0aW9uIHRlKHQsZSxuLGkpe3ZhciByPVp0K2U7aWYobnVsbCE9aSl7dmFyIG89dC5zdHlsZVtyXTtpZihvLmxlbmd0aCl7dmFyIGE9by5zcGxpdCgiLCIpO2FbaV09bixuPWEuam9pbigiLCIpfX10LnN0eWxlW3JdPW59ZnVuY3Rpb24gZWUodCxlKXtyZXR1cm4gdC5zdHlsZVtadCtlXX12YXIgbmU9ImxpbmVhciIsaWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEpe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5hbmltYXRpb25OYW1lPW4sdGhpcy5fZHVyYXRpb249aSx0aGlzLl9kZWxheT1yLHRoaXMuX2ZpbmFsU3R5bGVzPWEsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fc3RhdGU9MCx0aGlzLmVhc2luZz1vfHxuZSx0aGlzLnRvdGFsVGltZT1pK3IsdGhpcy5fYnVpbGRTdHlsZXIoKX1yZXR1cm4gdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fc3RhdGU+PTR8fCh0aGlzLl9zdGF0ZT00LHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5fZmx1c2hEb25lRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXX0sdC5wcm90b3R5cGUuX2ZsdXNoU3RhcnRGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX3N0YXRlPj0zfHwodGhpcy5fc3RhdGU9Myx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZT49Mn0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX3N0YXRlPj0xfHwodGhpcy5fc3RhdGU9MSx0aGlzLl9zdHlsZXIuYXBwbHkoKSx0aGlzLl9kZWxheSYmdGhpcy5fc3R5bGVyLnBhdXNlKCkpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fc3RhdGU9MiksdGhpcy5fc3R5bGVyLnJlc3VtZSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX3N0eWxlci5wYXVzZSgpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fYnVpbGRTdHlsZXIoKSx0aGlzLl9zdHlsZXIuYXBwbHkoKX0sdC5wcm90b3R5cGUuX2J1aWxkU3R5bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdHlsZXI9bmV3IFl0KHRoaXMuZWxlbWVudCx0aGlzLmFuaW1hdGlvbk5hbWUsdGhpcy5fZHVyYXRpb24sdGhpcy5fZGVsYXksdGhpcy5lYXNpbmcsImZvcndhcmRzIixmdW5jdGlvbigpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksZS5sZW5ndGg9MH0sdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5pbml0KCk7dmFyIGU9e307aWYodGhpcy5oYXNTdGFydGVkKCkpe3ZhciBuPXRoaXMuX3N0YXRlPj0zO09iamVjdC5rZXlzKHRoaXMuX2ZpbmFsU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGkpeyJvZmZzZXQiIT1pJiYoZVtpXT1uP3QuX2ZpbmFsU3R5bGVzW2ldOlcodC5lbGVtZW50LGkpKX0pfXRoaXMuY3VycmVudFNuYXBzaG90PWV9LHR9KCkscmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5lbGVtZW50PWUsaS5fc3RhcnRpbmdTdHlsZXM9e30saS5fX2luaXRpYWxpemVkPSExLGkuX3N0eWxlcz1PKG4pLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IXRoaXMuX19pbml0aWFsaXplZCYmdGhpcy5fc3RhcnRpbmdTdHlsZXMmJih0aGlzLl9faW5pdGlhbGl6ZWQ9ITAsT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0YXJ0aW5nU3R5bGVzW3RdPWUuZWxlbWVudC5zdHlsZVt0XX0pLHQucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5pbml0KCksT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxlLl9zdHlsZXNbdF0pfSksdC5wcm90b3R5cGUucGxheS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc3RhcnRpbmdTdHlsZXMmJihPYmplY3Qua2V5cyh0aGlzLl9zdGFydGluZ1N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9zdGFydGluZ1N0eWxlc1t0XTtuP2UuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOmUuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX0pLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpKX0sZX0oci5kKSxvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9jb3VudD0wLHRoaXMuX2hlYWQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLHRoaXMuX3dhcm5pbmdJc3N1ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geCh0LGUpfSx0LnByb3RvdHlwZS5jb250YWluc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQyh0LGUpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIFModCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPSJAa2V5ZnJhbWVzICIrZSsiIHtcbiIscj0iIjsobj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTyh0KX0pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3I9IiAiO3ZhciBlPXBhcnNlRmxvYXQodC5vZmZzZXQpO2krPSIiK3IrMTAwKmUrIiUge1xuIixyKz0iICIsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10W2VdO3N3aXRjaChlKXtjYXNlIm9mZnNldCI6cmV0dXJuO2Nhc2UiZWFzaW5nIjpyZXR1cm4gdm9pZChuJiYoaSs9cisiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogIituKyI7XG4iKSk7ZGVmYXVsdDpyZXR1cm4gdm9pZChpKz0iIityK2UrIjogIituKyI7XG4iKX19KSxpKz1yKyJ9XG4ifSksaSs9In1cbiI7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gby5pbm5lckhUTUw9aSxvfSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEpe3ZvaWQgMD09PW8mJihvPVtdKSxhJiZ0aGlzLl9ub3RpZnlGYXVsdHlTY3J1YmJlcigpO3ZhciBzPW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaWV9KSxsPXt9O1EobixpKSYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGxbdF09ZVt0XX0pfSk7dmFyIHU9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHQmJihBcnJheS5pc0FycmF5KHQpP3Q6W3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7Im9mZnNldCIhPW4mJiJlYXNpbmciIT1uJiYoZVtuXT10W25dKX0pfSksZX0oZT1HKHQsZSxsKSk7aWYoMD09bilyZXR1cm4gbmV3IHJlKHQsdSk7dmFyIGM9Imdlbl9jc3Nfa2ZfIit0aGlzLl9jb3VudCsrLGY9dGhpcy5idWlsZEtleWZyYW1lRWxlbWVudCh0LGMsZSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLmFwcGVuZENoaWxkKGYpO3ZhciBkPW5ldyBpZSh0LGUsYyxuLGkscix1KTtyZXR1cm4gZC5vbkRlc3Ryb3koZnVuY3Rpb24oKXt2YXIgdDsodD1mKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSksZH0sdC5wcm90b3R5cGUuX25vdGlmeUZhdWx0eVNjcnViYmVyPWZ1bmN0aW9uKCl7dGhpcy5fd2FybmluZ0lzc3VlZHx8KGNvbnNvbGUud2FybigiQGFuZ3VsYXIvYW5pbWF0aW9uczogcGxlYXNlIGxvYWQgdGhlIHdlYi1hbmltYXRpb25zLmpzIHBvbHlmaWxsIHRvIGFsbG93IHByb2dyYW1tYXRpYyBhY2Nlc3MuLi5cbiIsIiAgdmlzaXQgaHR0cDovL2JpdC5seS9JV3VrYW0gdG8gbGVhcm4gbW9yZSBhYm91dCB1c2luZyB0aGUgd2ViLWFuaW1hdGlvbi1qcyBwb2x5ZmlsbC4iKSx0aGlzLl93YXJuaW5nSXNzdWVkPSEwKX0sdH0oKSxhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPW4sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX2luaXRpYWxpemVkKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZT10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxlLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnt9LHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfX0sdC5wcm90b3R5cGUuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5fdHJpZ2dlcldlYkFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYW5pbWF0ZShlLG4pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITApLHRoaXMuZG9tUGxheWVyLnBsYXkoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuX3Jlc2V0RG9tUGxheWVyU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0b3RhbFRpbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmKGVbbl09dC5fZmluaXNoZWQ/dC5fZmluYWxLZXlmcmFtZVtuXTpXKHQuZWxlbWVudCxuKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD1lfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faXNOYXRpdmVJbXBsPS9ce1xzKlxbbmF0aXZlXHMrY29kZVxdXHMqXH0vLnRlc3QodWUoKS50b1N0cmluZygpKSx0aGlzLl9jc3NLZXlmcmFtZXNEcml2ZXI9bmV3IG9lfXJldHVybiB0LnByb3RvdHlwZS52YWxpZGF0ZVN0eWxlUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEModCxlKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBTKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19LHQucHJvdG90eXBlLm92ZXJyaWRlV2ViQW5pbWF0aW9uc1N1cHBvcnQ9ZnVuY3Rpb24odCl7dGhpcy5faXNOYXRpdmVJbXBsPXR9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlLG4saSxyLG8sYSl7aWYodm9pZCAwPT09byYmKG89W10pLCFhJiYhdGhpcy5faXNOYXRpdmVJbXBsKXJldHVybiB0aGlzLl9jc3NLZXlmcmFtZXNEcml2ZXIuYW5pbWF0ZSh0LGUsbixpLHIsbyk7dmFyIHM9e2R1cmF0aW9uOm4sZGVsYXk6aSxmaWxsOjA9PWk/ImJvdGgiOiJmb3J3YXJkcyJ9O3ImJihzLmVhc2luZz1yKTt2YXIgbD17fSx1PW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYWV9KTtyZXR1cm4gUShuLGkpJiZ1LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XT1lW3RdfSl9KSxlPUcodCxlPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBQKHQsITEpfSksbCksbmV3IGFlKHQsZSxzKX0sdH0oKTtmdW5jdGlvbiBsZSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB1ZSgpfWZ1bmN0aW9uIHVlKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudCYmRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZXx8e319fSxPemZCOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gRH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBIfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigiSXAwUiIpLG89bigiMjZGVSIpLGE9bigiVm5ELyIpLHM9bigiNjdZLyIpLGw9bigibXJTRyIpO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihPYmplY3Qoci53KShlKSl7dmFyIG49L1xiZmxleC1sYXlvdXQtLis/XGIvZztBcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbCgiW2NsYXNzKj0iK2MrIl0iKSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNsYXNzTGlzdC5jb250YWlucyhjKyJzc3IiKSYmdC5wYXJlbnROb2RlP3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KTp0LmNsYXNzTmFtZS5yZXBsYWNlKG4sIiIpfSl9fX12YXIgYz0iZmxleC1sYXlvdXQtIixmPW5ldyBpLnEoIkZsZXggTGF5b3V0IHRva2VuLCBjb2xsZWN0IGFsbCBicmVha3BvaW50cyBpbnRvIG9uZSBwcm92aWRlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxkPVt7YWxpYXM6InhzIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6Imd0LXhzIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkifSx7YWxpYXM6Imx0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6InNtIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoiZ3Qtc20iLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSJ9LHthbGlhczoibHQtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoibWQiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoiZ3QtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkifSx7YWxpYXM6Imx0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxMjc5cHgpIn0se2FsaWFzOiJsZyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSJ9LHthbGlhczoiZ3QtbGciLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkifSx7YWxpYXM6Imx0LXhsIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJ4bCIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTkyMHB4KSBhbmQgKG1heC13aWR0aDogNTAwMHB4KSJ9XSxoPSIob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSIscD0iKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogODM5cHgpIixtPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODQwcHgpIixiPSIob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDEyODBweCkiLHk9e0hBTkRTRVQ6IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA1OTlweCksIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogOTU5cHgpIixUQUJMRVQ6cCsiICwgIitoLFdFQjptKyIsICIrYisiICIsSEFORFNFVF9QT1JUUkFJVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSIsVEFCTEVUX1BPUlRSQUlUOnArIiAiLFdFQl9QT1JUUkFJVDoiIittLEhBTkRTRVRfTEFORFNDQVBFOiIob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KV0iLFRBQkxFVF9MQU5EU0NBUEU6IiIraCxXRUJfTEFORFNDQVBFOiIiK2J9LHY9W3thbGlhczoiaGFuZHNldCIsbWVkaWFRdWVyeTp5LkhBTkRTRVR9LHthbGlhczoiaGFuZHNldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6eS5IQU5EU0VUX0xBTkRTQ0FQRX0se2FsaWFzOiJoYW5kc2V0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OnkuSEFORFNFVF9QT1JUUkFJVH0se2FsaWFzOiJ0YWJsZXQiLG1lZGlhUXVlcnk6eS5UQUJMRVR9LHthbGlhczoidGFibGV0LmxhbmRzY2FwZSIsbWVkaWFRdWVyeTp5LlRBQkxFVH0se2FsaWFzOiJ0YWJsZXQucG9ydHJhaXQiLG1lZGlhUXVlcnk6eS5UQUJMRVRfUE9SVFJBSVR9LHthbGlhczoid2ViIixtZWRpYVF1ZXJ5OnkuV0VCLG92ZXJsYXBwaW5nOiEwfSx7YWxpYXM6IndlYi5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6eS5XRUJfTEFORFNDQVBFLG92ZXJsYXBwaW5nOiEwfSx7YWxpYXM6IndlYi5wb3J0cmFpdCIsbWVkaWFRdWVyeTp5LldFQl9QT1JUUkFJVCxvdmVybGFwcGluZzohMH1dO2Z1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO2Zvcih2YXIgaT0wLHI9ZTtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihudWxsIT1vKWZvcih2YXIgYSBpbiBvKW8uaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPW9bYV0pfXJldHVybiB0fXZhciBfPS8oXC58LXxfKS9nO2Z1bmN0aW9uIHcodCl7dmFyIGU9dC5sZW5ndGg+MD90LmNoYXJBdCgwKToiIixuPXQubGVuZ3RoPjE/dC5zbGljZSgxKToiIjtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK259dmFyIHg9e2FkZEZsZXhUb1BhcmVudDohMCxhZGRPcmllbnRhdGlvbkJwczohMSxkaXNhYmxlRGVmYXVsdEJwczohMSxkaXNhYmxlVmVuZG9yUHJlZml4ZXM6ITEsc2VydmVyTG9hZGVkOiExLHVzZUNvbHVtbkJhc2lzWmVybzohMH0sQz1uZXcgaS5xKCJGbGV4IExheW91dCB0b2tlbiwgY29uZmlnIG9wdGlvbnMgZm9yIHRoZSBsaWJyYXJ5Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiB4fX0pLFM9bmV3IGkucSgiVG9rZW4gKEBhbmd1bGFyL2ZsZXgtbGF5b3V0KSBCcmVha3BvaW50cyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QoaS5ZKShmKSxlPU9iamVjdChpLlkpKEMpLG49W10uY29uY2F0LmFwcGx5KFtdLCh0fHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfSkpO3JldHVybiBmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgbixpPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7aVt0LmFsaWFzXT10fSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdC5hbGlhc10/ZyhpW3QuYWxpYXNdLHQpOmlbdC5hbGlhc109dH0pLChuPU9iamVjdC5rZXlzKGkpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaVt0XX0pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc3VmZml4fHwodC5zdWZmaXg9dC5hbGlhcy5yZXBsYWNlKF8sInwiKS5zcGxpdCgifCIpLm1hcCh3KS5qb2luKCIiKSx0Lm92ZXJsYXBwaW5nPSEhdC5vdmVybGFwcGluZyl9KSxufSgoZS5kaXNhYmxlRGVmYXVsdEJwcz9bXTpkKS5jb25jYXQoZS5hZGRPcmllbnRhdGlvbkJwcz92OltdKSxuKX19KSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWdpc3RyeT10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIml0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzb3J0ZWRJdGVtcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQub3ZlcmxhcHBpbmd9KSxlPXRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hMCE9PXQub3ZlcmxhcHBpbmd9KTtyZXR1cm4gdC5jb25jYXQoZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZmluZEJ5QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWxpYXM9PXR9KXx8bnVsbH0sdC5wcm90b3R5cGUuZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVkaWFRdWVyeT09dH0pfHxudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm92ZXJsYXBwaW5ncyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIDE9PXQub3ZlcmxhcHBpbmd9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFsaWFzZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFsaWFzfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdWZmaXhlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VmZml4P3Quc3VmZml4OiIifSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuWSkoUykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09ZSYmKGU9ImFsbCIpLHZvaWQgMD09PW4mJihuPSIiKSx2b2lkIDA9PT1pJiYoaT0iIiksdGhpcy5tYXRjaGVzPXQsdGhpcy5tZWRpYVF1ZXJ5PWUsdGhpcy5tcUFsaWFzPW4sdGhpcy5zdWZmaXg9aX1yZXR1cm4gdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQodGhpcy5tYXRjaGVzLHRoaXMubWVkaWFRdWVyeSx0aGlzLm1xQWxpYXMsdGhpcy5zdWZmaXgpfSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl96b25lPXQsdGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuX2RvY3VtZW50PW4sdGhpcy5fcmVnaXN0cnk9bmV3IE1hcCx0aGlzLl9zb3VyY2U9bmV3IG8uYShuZXcgRSghMCkpLHRoaXMuX29ic2VydmFibGUkPXRoaXMuX3NvdXJjZS5hc09ic2VydmFibGUoKX1yZXR1cm4gdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVnaXN0cnkuZ2V0KHQpO3JldHVybiEhZSYmZS5tYXRjaGVzfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLnJlZ2lzdGVyUXVlcnkodCksdGhpcy5fb2JzZXJ2YWJsZSQucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbihlKXtyZXR1cm4hdHx8ZS5tZWRpYVF1ZXJ5PT09dH0pKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/W106InN0cmluZyI9PXR5cGVvZiB0P1t0XTooZT17fSx0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKGVbdF09ITApfSkpO3ZhciBlfSh0KTtuLmxlbmd0aD4wJiYodGhpcy5fcHJlcGFyZVF1ZXJ5Q1NTKG4sdGhpcy5fZG9jdW1lbnQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9yZWdpc3RyeS5nZXQodCksaT1mdW5jdGlvbihuKXtlLl96b25lLnJ1bihmdW5jdGlvbigpe3ZhciBpPW5ldyBFKG4ubWF0Y2hlcyx0KTtlLl9zb3VyY2UubmV4dChpKX0pfTtufHwoKG49ZS5fYnVpbGRNUUwodCkpLmFkZExpc3RlbmVyKGkpLGUuX3JlZ2lzdHJ5LnNldCh0LG4pKSxuLm1hdGNoZXMmJmkobil9KSl9LHQucHJvdG90eXBlLl9idWlsZE1RTD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIudykodGhpcy5fcGxhdGZvcm1JZCkmJndpbmRvdy5tYXRjaE1lZGlhKCJhbGwiKS5hZGRMaXN0ZW5lcj93aW5kb3cubWF0Y2hNZWRpYSh0KTp7bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe319fSx0LnByb3RvdHlwZS5fcHJlcGFyZVF1ZXJ5Q1NTPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIWpbdF19KTtpZihuLmxlbmd0aD4wKXt2YXIgaT1uLmpvaW4oIiwgIik7dHJ5e3ZhciByPWUuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksci5zdHlsZVNoZWV0fHxyLmFwcGVuZENoaWxkKGUuY3JlYXRlVGV4dE5vZGUoIlxuLypcbiAgQGFuZ3VsYXIvZmxleC1sYXlvdXQgLSB3b3JrYXJvdW5kIGZvciBwb3NzaWJsZSBicm93c2VyIHF1aXJrIHdpdGggbWVkaWFRdWVyeSBsaXN0ZW5lcnNcbiAgc2VlIGh0dHA6Ly9iaXQubHkvMnNkNEhNUFxuKi9cbkBtZWRpYSAiK2krIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19XG4iKSksZS5oZWFkLmFwcGVuZENoaWxkKHIpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4galt0XT1yfSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKShpLnopLE9iamVjdChpLlkpKGkuQiksT2JqZWN0KGkuWSkoci5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGo9e307ZnVuY3Rpb24gSSh0LGUpe3JldHVybiBnKHQsZT97bXFBbGlhczplLmFsaWFzLHN1ZmZpeDplLnN1ZmZpeH06e30pfXZhciBUPWZ1bmN0aW9uKCl7fSxSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuYnJlYWtwb2ludHM9dCx0aGlzLm1lZGlhV2F0Y2hlcj1lLHRoaXMuZmlsdGVyT3ZlcmxhcHM9ITAsdGhpcy5fcmVnaXN0ZXJCcmVha1BvaW50cygpLHRoaXMub2JzZXJ2YWJsZSQ9dGhpcy5fYnVpbGRPYnNlcnZhYmxlKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RvTWVkaWFRdWVyeSh0KTtyZXR1cm4gdGhpcy5tZWRpYVdhdGNoZXIuaXNBY3RpdmUoZSl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMub2JzZXJ2YWJsZSQuc3Vic2NyaWJlKHQsZSxuKX0sdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JzZXJ2YWJsZSR9LHQucHJvdG90eXBlLl9yZWdpc3RlckJyZWFrUG9pbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5icmVha3BvaW50cy5zb3J0ZWRJdGVtcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWVkaWFRdWVyeX0pO3RoaXMubWVkaWFXYXRjaGVyLnJlZ2lzdGVyUXVlcnkodCl9LHQucHJvdG90eXBlLl9idWlsZE9ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcztyZXR1cm4gdGhpcy5tZWRpYVdhdGNoZXIub2JzZXJ2ZSgpLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10Lm1hdGNoZXN9KSxPYmplY3QoYS5hKShmdW5jdGlvbihuKXt2YXIgaT10LmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KG4ubWVkaWFRdWVyeSk7cmV0dXJuIWl8fCEoZS5maWx0ZXJPdmVybGFwcyYmaS5vdmVybGFwcGluZyl9KSxPYmplY3Qocy5hKShmdW5jdGlvbihlKXtyZXR1cm4gSShlLHQuX2ZpbmRCeVF1ZXJ5KGUubWVkaWFRdWVyeSkpfSkpfSx0LnByb3RvdHlwZS5fZmluZEJ5QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModCl9LHQucHJvdG90eXBlLl9maW5kQnlRdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5icmVha3BvaW50cy5maW5kQnlRdWVyeSh0KX0sdC5wcm90b3R5cGUuX3RvTWVkaWFRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kQnlBbGlhcyh0KXx8dGhpcy5fZmluZEJ5UXVlcnkodCk7cmV0dXJuIGU/ZS5tZWRpYVF1ZXJ5OnR9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKE8pLE9iamVjdChpLlkpKGspKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksQT1mdW5jdGlvbigpe30sUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnN0eWxlc2hlZXQ9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMuc3R5bGVzaGVldC5nZXQodCk7aT9pLnNldChlLG4pOnRoaXMuc3R5bGVzaGVldC5zZXQodCxuZXcgTWFwKFtbZSxuXV0pKX0sdC5wcm90b3R5cGUuY2xlYXJTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlc2hlZXQuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0U3R5bGVGb3JFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5zdHlsZXNoZWV0LmdldCh0KSxpPSIiO2lmKG4pe3ZhciByPW4uZ2V0KGUpOyJudW1iZXIiIT10eXBlb2YgciYmInN0cmluZyIhPXR5cGVvZiByfHwoaT1yKyIiKX1yZXR1cm4gaX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEQ9bmV3IGkucSgiRmxleExheW91dFNlcnZlckxvYWRlZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxNPVsicm93IiwiY29sdW1uIiwicm93LXJldmVyc2UiLCJjb2x1bW4tcmV2ZXJzZSJdLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9vcHRpb25zPXQsdGhpcy5fbWVkaWFNb25pdG9yPWUsdGhpcy5fb25NZWRpYUNoYW5nZXM9bix0aGlzLl9zdWJzY3JpYmVycz1bXSx0aGlzLl9yZWdpc3RyeU1hcD10aGlzLl9idWlsZFJlZ2lzdHJ5TWFwKCksdGhpcy5fc3Vic2NyaWJlcnM9dGhpcy5fY29uZmlndXJlQ2hhbmdlT2JzZXJ2ZXJzKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVnaXN0cnlGcm9tTGFyZ2VzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeU1hcC5zbGljZSgpLnJldmVyc2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm1lZGlhTW9uaXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZWRpYU1vbml0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRJbnB1dEtleSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmF0ZWRJbnB1dEtleXx8dGhpcy5fb3B0aW9ucy5iYXNlS2V5fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkSW5wdXQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmFjdGl2YXRlZElucHV0S2V5O3JldHVybiB0aGlzLmhhc0tleVZhbHVlKHQpP3RoaXMuX2xvb2t1cEtleVZhbHVlKHQpOnRoaXMuX29wdGlvbnMuZGVmYXVsdFZhbHVlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmhhc0tleVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLl9vcHRpb25zLmlucHV0S2V5c1t0XX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSksdGhpcy5fc3Vic2NyaWJlcnM9W119LHQucHJvdG90eXBlLl9jb25maWd1cmVDaGFuZ2VPYnNlcnZlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5TWFwLmZvckVhY2goZnVuY3Rpb24obil7dC5fa2V5SW5Vc2Uobi5rZXkpJiZlLnB1c2godC5tZWRpYU1vbml0b3Iub2JzZXJ2ZShuLmFsaWFzKS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKGUpe3JldHVybihlPWUuY2xvbmUoKSkucHJvcGVydHk9dC5fb3B0aW9ucy5iYXNlS2V5LGV9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuX29uTW9uaXRvckV2ZW50cyhlKX0pKX0pLGV9LHQucHJvdG90eXBlLl9idWlsZFJlZ2lzdHJ5TWFwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5tZWRpYU1vbml0b3IuYnJlYWtwb2ludHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnKHt9LGUse2Jhc2VLZXk6dC5fb3B0aW9ucy5iYXNlS2V5LGtleTp0Ll9vcHRpb25zLmJhc2VLZXkrZS5zdWZmaXh9KX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5fa2V5SW5Vc2UoZS5rZXkpfSl9LHQucHJvdG90eXBlLl9vbk1vbml0b3JFdmVudHM9ZnVuY3Rpb24odCl7dC5wcm9wZXJ0eT09dGhpcy5fb3B0aW9ucy5iYXNlS2V5JiYodC52YWx1ZT10aGlzLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZSh0KSx0aGlzLl9vbk1lZGlhQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9rZXlJblVzZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbG9va3VwS2V5VmFsdWUodCl9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9vcHRpb25zLmJhc2VLZXkrdC5zdWZmaXgsbj10aGlzLl9hY3RpdmF0ZWRJbnB1dEtleTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkSW5wdXRLZXk9dGhpcy5fdmFsaWRhdGVJbnB1dEtleShuPXQubWF0Y2hlcz9lOm49PWU/IiI6biksdGhpcy5hY3RpdmF0ZWRJbnB1dH0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQpe3JldHVybiFlLl9rZXlJblVzZSh0KX07cmV0dXJuIG4odCkmJnRoaXMubWVkaWFNb25pdG9yLmFjdGl2ZU92ZXJsYXBzLnNvbWUoZnVuY3Rpb24oaSl7dmFyIHI9ZS5fb3B0aW9ucy5iYXNlS2V5K2kuc3VmZml4O3JldHVybiFuKHIpJiYodD1yLCEwKX0pLHR9LHQucHJvdG90eXBlLl9sb29rdXBLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5pbnB1dEtleXNbdF19LHR9KCksTD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX21lZGlhTW9uaXRvcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9zdHlsZXI9bix0aGlzLl9pbnB1dE1hcD17fSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNNZWRpYVF1ZXJ5TGlzdGVuZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21xQWN0aXZhdGlvbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbj90aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQ6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsbj0iYmFzZUtleSI7dGhpcy5fbXFBY3RpdmF0aW9uJiYoZT10aGlzLl9pbnB1dE1hcFtuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dEtleV0sdGhpcy5faW5wdXRNYXBbbl09dCk7dmFyIHIsbz1uZXcgaS5KKGUsdCwhMSk7dGhpcy5uZ09uQ2hhbmdlcygoKHI9e30pW25dPW8scikpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5hdGl2ZUVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9xdWVyeUlucHV0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnB1dE1hcFt0XX0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9kaXNwbGF5PXRoaXMuX2dldERpc3BsYXlTdHlsZSgpLHRoaXMuX2hhc0luaXRpYWxpemVkPSEwfSx0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIkJhc2VEaXJlY3RpdmU6Om5nT25DaGFuZ2VzIHNob3VsZCBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzOiAiK3QpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX21xQWN0aXZhdGlvbiYmdGhpcy5fbXFBY3RpdmF0aW9uLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5fbWVkaWFNb25pdG9yfSx0LnByb3RvdHlwZS5fZ2V0RGVmYXVsdFZhbD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3F1ZXJ5SW5wdXQodCk7cmV0dXJuIHZvaWQgMCE9PW4mJm51bGwhPT1uJiYiIiE9PW4/bjplfSx0LnByb3RvdHlwZS5fZ2V0RGlzcGxheVN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5sb29rdXBTdHlsZSh0LCJkaXNwbGF5Iil9LHQucHJvdG90eXBlLl9nZXRBdHRyaWJ1dGVWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5sb29rdXBBdHRyaWJ1dGVWYWx1ZShlLHQpfSx0LnByb3RvdHlwZS5fZ2V0RmxleEZsb3dEaXJlY3Rpb249ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIG4saT0icm93IjtpZih0JiYoaT0obj10aGlzLl9zdHlsZXIuZ2V0Rmxvd0RpcmVjdGlvbih0KSlbMF0sIW5bMV0mJmUpKXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZSxuLGk9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dD90LnRvTG93ZXJDYXNlKCk6IiIpLnNwbGl0KCIgIiksbj1lWzBdLGk9ZVsxXSxyPWVbMl07cmV0dXJuIE0uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PW59KXx8KG49TVswXSksImlubGluZSI9PT1pJiYoaT0iaW5saW5lIiE9PXI/cjoiIixyPSJpbmxpbmUiKSxbbixmdW5jdGlvbih0KXtpZih0KXN3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2UicmV2ZXJzZSI6Y2FzZSJ3cmFwLXJldmVyc2UiOmNhc2UicmV2ZXJzZS13cmFwIjp0PSJ3cmFwLXJldmVyc2UiO2JyZWFrO2Nhc2Uibm8iOmNhc2Uibm9uZSI6Y2FzZSJub3dyYXAiOnQ9Im5vd3JhcCI7YnJlYWs7ZGVmYXVsdDp0PSJ3cmFwIn1yZXR1cm4gdH0oaSksISFyXX0odCk7cmV0dXJuIG49aVsyXSx2b2lkIDA9PT0oZT1pWzFdKSYmKGU9bnVsbCksdm9pZCAwPT09biYmKG49ITEpLHtkaXNwbGF5Om4/ImlubGluZS1mbGV4IjoiZmxleCIsImJveC1zaXppbmciOiJib3JkZXItYm94IiwiZmxleC1kaXJlY3Rpb24iOmlbMF0sImZsZXgtd3JhcCI6ZXx8bnVsbH19KGkpO3RoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50cyhyLFt0XSl9cmV0dXJuIGkudHJpbSgpfHwicm93In0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnQobix0LGUpfSx0LnByb3RvdHlwZS5fYXBwbHlTdHlsZVRvRWxlbWVudHM9ZnVuY3Rpb24odCxlKXt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHModCxlKX0sdC5wcm90b3R5cGUuX2NhY2hlSW5wdXQ9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpZm9yKHZhciBuIGluIGUpdGhpcy5faW5wdXRNYXBbbl09ZVtuXTtlbHNlIHQmJih0aGlzLl9pbnB1dE1hcFt0XT1lKX0sdC5wcm90b3R5cGUuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fbXFBY3RpdmF0aW9uKXt2YXIgaT1uZXcgZnVuY3Rpb24odCxlLG4pe3RoaXMuYmFzZUtleT10LHRoaXMuZGVmYXVsdFZhbHVlPWUsdGhpcy5pbnB1dEtleXM9bn0odCxlLHRoaXMuX2lucHV0TWFwKTt0aGlzLl9tcUFjdGl2YXRpb249bmV3IE4oaSx0aGlzLl9tZWRpYU1vbml0b3IsZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9KX1yZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9ufSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuTm9kZXMiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLGU9W10sbj10Lmxlbmd0aDtuLS07KWVbbl09dFtuXTtyZXR1cm4gZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5oYXNSZXNwb25zaXZlQVBJPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9pbnB1dE1hcCkubGVuZ3RoLSh0aGlzLl9pbnB1dE1hcFt0XT8xOjApPjB9LHQucHJvdG90eXBlLmhhc0tleVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb24uaGFzS2V5VmFsdWUodCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzSW5pdGlhbGl6ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzSW5pdGlhbGl6ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxGPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsbixpLHIpfHx0aGlzO3JldHVybiBvLl9iYXNlS2V5PWUsby5fbWVkaWFNb25pdG9yPW4sby5fZWxlbWVudFJlZj1pLG8uX3N0eWxlcj1yLG99cmV0dXJuIE9iamVjdChsLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhY3RpdmVLZXkiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tcUFjdGl2YXRpb24sZT10P3QuYWN0aXZhdGVkSW5wdXRLZXk6dGhpcy5fYmFzZUtleTtyZXR1cm4iY2xhc3MiPT09ZT8ia2xhenoiOmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnB1dE1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm1xQWN0aXZhdGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQST1mdW5jdGlvbigpe3JldHVybiB0LnByb3RvdHlwZS5oYXNSZXNwb25zaXZlQVBJLmNhbGwodGhpcyx0aGlzLl9iYXNlS2V5KX0sZS5wcm90b3R5cGUucXVlcnlJbnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gdD90aGlzLl9xdWVyeUlucHV0KHQpOnZvaWQgMH0sZS5wcm90b3R5cGUuY2FjaGVJbnB1dD1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09biYmKG49ITEpLG4pdGhpcy5fY2FjaGVJbnB1dFJhdyh0LGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl0aGlzLl9jYWNoZUlucHV0QXJyYXkodCxlKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl0aGlzLl9jYWNoZUlucHV0T2JqZWN0KHQsZSk7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNsYXNzIHZhbHVlICciK3QrIicgcHJvdmlkZWQuIERpZCB5b3Ugd2FudCB0byBjYWNoZSB0aGUgcmF3IHZhbHVlPyIpO3RoaXMuX2NhY2hlSW5wdXRTdHJpbmcodCxlKX19LGUucHJvdG90eXBlLmxpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXModCxlLG4pfSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dFJhdz1mdW5jdGlvbih0LGUpe3QmJih0aGlzLl9pbnB1dE1hcFt0XT1lKX0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRBcnJheT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9pbnB1dE1hcFt0XT1lP2Uuam9pbigiICIpOiIifSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dE9iamVjdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PSIiKTt2YXIgbj1bXTtpZihlKWZvcih2YXIgaSBpbiBlKWVbaV0mJm4ucHVzaChpKTt0aGlzLl9pbnB1dE1hcFt0XT1uLmpvaW4oIiAiKX0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRTdHJpbmc9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIiksdGhpcy5faW5wdXRNYXBbdF09ZX0sZX0oTCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9icmVha3BvaW50cz10LHRoaXMuX21hdGNoTWVkaWE9ZSx0aGlzLl9yZWdpc3RlckJyZWFrcG9pbnRzKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYnJlYWtwb2ludHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMuaXRlbXMuc2xpY2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZU92ZXJsYXBzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMub3ZlcmxhcHBpbmdzLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21hdGNoTWVkaWEuaXNBY3RpdmUoZS5tZWRpYVF1ZXJ5KX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPW51bGw7dGhpcy5icmVha3BvaW50cy5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihuKXsiIiE9PW4uYWxpYXMmJiFlJiZ0Ll9tYXRjaE1lZGlhLmlzQWN0aXZlKG4ubWVkaWFRdWVyeSkmJihlPW4pfSk7dmFyIG49dGhpcy5icmVha3BvaW50c1swXTtyZXR1cm4gZXx8KHRoaXMuX21hdGNoTWVkaWEuaXNBY3RpdmUobi5tZWRpYVF1ZXJ5KT9uOm51bGwpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHQpfHx0aGlzLl9icmVha3BvaW50cy5maW5kQnlRdWVyeSh0KTtyZXR1cm4gdGhpcy5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShlP2UubWVkaWFRdWVyeTp0KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9icmVha3BvaW50cy5maW5kQnlBbGlhcyh0fHwiIil8fHRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHR8fCIiKTtyZXR1cm4gdGhpcy5fbWF0Y2hNZWRpYS5vYnNlcnZlKGU/ZS5tZWRpYVF1ZXJ5OnQpLnBpcGUoT2JqZWN0KHMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIEkodCxlKX0pLE9iamVjdChhLmEpKGZ1bmN0aW9uKHQpe3JldHVybiFlfHwiIiE9PXQubXFBbGlhc30pKX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyQnJlYWtwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9icmVha3BvaW50cy5zb3J0ZWRJdGVtcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWVkaWFRdWVyeX0pO3RoaXMuX21hdGNoTWVkaWEucmVnaXN0ZXJRdWVyeSh0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuWSkoTyksT2JqZWN0KGkuWSkoaykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB6KHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbj10W2VdfHwiIjtzd2l0Y2goZSl7Y2FzZSJkaXNwbGF5Ijp0LmRpc3BsYXk9ImZsZXgiPT09bj9bIi13ZWJraXQtZmxleCIsImZsZXgiXToiaW5saW5lLWZsZXgiPT09bj9bIi13ZWJraXQtaW5saW5lLWZsZXgiLCJpbmxpbmUtZmxleCJdOm47YnJlYWs7Y2FzZSJhbGlnbi1pdGVtcyI6Y2FzZSJhbGlnbi1zZWxmIjpjYXNlImFsaWduLWNvbnRlbnQiOmNhc2UiZmxleCI6Y2FzZSJmbGV4LWJhc2lzIjpjYXNlImZsZXgtZmxvdyI6Y2FzZSJmbGV4LWdyb3ciOmNhc2UiZmxleC1zaHJpbmsiOmNhc2UiZmxleC13cmFwIjpjYXNlImp1c3RpZnktY29udGVudCI6dFsiLXdlYmtpdC0iK2VdPW47YnJlYWs7Y2FzZSJmbGV4LWRpcmVjdGlvbiI6dFsiLXdlYmtpdC1mbGV4LWRpcmVjdGlvbiJdPW49bnx8InJvdyIsdFsiZmxleC1kaXJlY3Rpb24iXT1uO2JyZWFrO2Nhc2Uib3JkZXIiOnQub3JkZXI9dFsiLXdlYmtpdC0iK2VdPWlzTmFOKG4pPyIwIjpufX1yZXR1cm4gdH12YXIgQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5fc2VydmVyU3R5bGVzaGVldD10LHRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD1lLHRoaXMuX3BsYXRmb3JtSWQ9bix0aGlzLmxheW91dENvbmZpZz1pfXJldHVybiB0LnByb3RvdHlwZS5hcHBseVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT17fTsic3RyaW5nIj09dHlwZW9mIGUmJihpW2VdPW4sZT1pKSxpPXRoaXMubGF5b3V0Q29uZmlnLmRpc2FibGVWZW5kb3JQcmVmaXhlcz9lOnooZSksdGhpcy5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQoaSx0KX0sdC5wcm90b3R5cGUuYXBwbHlTdHlsZVRvRWxlbWVudHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgaT10aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXM/dDp6KHQpO2UuZm9yRWFjaChmdW5jdGlvbih0KXtuLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChpLHQpfSl9LHQucHJvdG90eXBlLmdldEZsb3dEaXJlY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb29rdXBTdHlsZSh0LCJmbGV4LWRpcmVjdGlvbiIpO2U9PT1VJiYoZT0iIik7dmFyIG49dGhpcy5sb29rdXBJbmxpbmVTdHlsZSh0LCJmbGV4LWRpcmVjdGlvbiIpfHxPYmplY3Qoci54KSh0aGlzLl9wbGF0Zm9ybUlkKSYmdGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkP2U6IiI7cmV0dXJuW2V8fCJyb3ciLG5dfSx0LnByb3RvdHlwZS5sb29rdXBBdHRyaWJ1dGVWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEF0dHJpYnV0ZShlKXx8IiJ9LHQucHJvdG90eXBlLmxvb2t1cElubGluZVN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdChyLncpKHRoaXMuX3BsYXRmb3JtSWQpP3Quc3R5bGVbZV06dGhpcy5fZ2V0U2VydmVyU3R5bGUodCxlKX0sdC5wcm90b3R5cGUubG9va3VwU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgaT0iIjtyZXR1cm4gdCYmKChpPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCxlKSl8fChPYmplY3Qoci53KSh0aGlzLl9wbGF0Zm9ybUlkKT9ufHwoaT1nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpOnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZCYmKGk9dGhpcy5fc2VydmVyU3R5bGVzaGVldC5nZXRTdHlsZUZvckVsZW1lbnQodCxlKSkpKSxpP2kudHJpbSgpOlV9LHQucHJvdG90eXBlLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7T2JqZWN0LmtleXModCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIG89QXJyYXkuaXNBcnJheSh0W2ldKT90W2ldOlt0W2ldXTtvLnNvcnQoKTtmb3IodmFyIGE9MCxzPW87YTxzLmxlbmd0aDthKyspe3ZhciBsPXNbYV07T2JqZWN0KHIudykobi5fcGxhdGZvcm1JZCl8fCFuLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ/T2JqZWN0KHIudykobi5fcGxhdGZvcm1JZCk/ZS5zdHlsZS5zZXRQcm9wZXJ0eShpLGwpOm4uX3NldFNlcnZlclN0eWxlKGUsaSxsKTpuLl9zZXJ2ZXJTdHlsZXNoZWV0LmFkZFN0eWxlVG9FbGVtZW50KGUsaSxsKX19KX0sdC5wcm90b3R5cGUuX3NldFNlcnZlclN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtlPWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBpPXRoaXMuX3JlYWRTdHlsZUF0dHJpYnV0ZSh0KTtpW2VdPW58fCIiLHRoaXMuX3dyaXRlU3R5bGVBdHRyaWJ1dGUodCxpKX0sdC5wcm90b3R5cGUuX2dldFNlcnZlclN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlYWRTdHlsZUF0dHJpYnV0ZSh0KVtlXXx8IiJ9LHQucHJvdG90eXBlLl9yZWFkU3R5bGVBdHRyaWJ1dGU9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj10LmdldEF0dHJpYnV0ZSgic3R5bGUiKTtpZihuKWZvcih2YXIgaT1uLnNwbGl0KC87Ky9nKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0udHJpbSgpO2lmKG8ubGVuZ3RoPjApe3ZhciBhPW8uaW5kZXhPZigiOiIpO2lmKC0xPT09YSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgQ1NTIHN0eWxlOiAiK28pO2Vbby5zdWJzdHIoMCxhKS50cmltKCldPW8uc3Vic3RyKGErMSkudHJpbSgpfX1yZXR1cm4gZX0sdC5wcm90b3R5cGUuX3dyaXRlU3R5bGVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt2YXIgbj0iIjtmb3IodmFyIGkgaW4gZSllW2ldJiYobis9aSsiOiIrZVtpXSsiOyIpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsbil9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKFAsOCksT2JqZWN0KGkuWSkoRCw4KSxPYmplY3QoaS5ZKShpLkIpLE9iamVjdChpLlkpKEMpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksVT0iYmxvY2siO2Z1bmN0aW9uIEgodCxlLG4pe3ZvaWQgMD09PWUmJihlPSIxIiksdm9pZCAwPT09biYmKG49IjEiKTt2YXIgaT1bZSxuLHRdLHI9dC5pbmRleE9mKCJjYWxjIik7aWYocj4wKWlbMl09cSh0LnN1YnN0cmluZyhyKS50cmltKCkpLDI9PShvPXQuc3Vic3RyKDAscikudHJpbSgpLnNwbGl0KCIgIikpLmxlbmd0aCYmKGlbMF09b1swXSxpWzFdPW9bMV0pO2Vsc2UgaWYoMD09cilpWzJdPXEodC50cmltKCkpO2Vsc2V7dmFyIG87aT0zPT09KG89dC5zcGxpdCgiICIpKS5sZW5ndGg/bzpbZSxuLHRdfXJldHVybiBpfWZ1bmN0aW9uIHEodCl7cmV0dXJuIHQucmVwbGFjZSgvW1xzXS9nLCIiKS5yZXBsYWNlKC9bXC9cKlwrXC1dL2csIiAkJiAiKX19LFBIR086ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigiOUFzaiIpLHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5yZWZtYW49dCx0aGlzLmJvdHRvbVNoZWV0PWUsdGhpcy50ZXN0U3RyaW5nPSJBIix0aGlzLnJlZm1hbnNlcnZpY2U9dCx0aGlzLnJlZj1pLmJ9cmV0dXJuIHQucHJvdG90eXBlLm9wZW5SZWZCb3R0b21TaGVldD1mdW5jdGlvbigpe3RoaXMucmVmc2hlZXRyZWY9dGhpcy5ib3R0b21TaGVldC5vcGVuKG8pLHRoaXMucmVmc2hlZXRyZWYuaW5zdGFuY2UucmVmPXRoaXMucmVmfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5yZWZtYW5zZXJ2aWNlLmdldFJlZkZyb21TaG9ydGhhbmQodGhpcy5zaG9ydGhhbmQpLnN1YnNjcmliZShmdW5jdGlvbihlKXt0LnJlZj1lfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2codCl9KX0sdH0oKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmJvdHRvbVNoZWV0UmVmPXQsdGhpcy5yZWY9aS5ifXJldHVybiB0LnByb3RvdHlwZS5vcGVuTGluaz1mdW5jdGlvbih0KXt0aGlzLmJvdHRvbVNoZWV0UmVmLmRpc21pc3MoKSx0LnByZXZlbnREZWZhdWx0KCl9LHR9KCl9LFBVOEw6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIjZibEYiKTtmdW5jdGlvbiByKHQpe3ZhciBlPW5ldyBpLmEoZnVuY3Rpb24oZSl7ZS5uZXh0KHQpLGUuY29tcGxldGUoKX0pO3JldHVybiBlLl9pc1NjYWxhcj0hMCxlLnZhbHVlPXQsZX19LFBoam46ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oInBzVzAiKTtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIE9iamVjdChpLmEpKHQsZSwxKX19LFJuZXk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJUMURNIikscj1uKCJtclNHIiksbz1uKCJFaG1rIiksYT1uKCJlaWhzIikscz1uKCJNR0JTIiksbD1uKCJ6b3RtIiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kdXJhdGlvblNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGModCx0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5kdXJhdGlvblNlbGVjdG9yPW4saS5oYXNWYWx1ZT0hMSxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLnZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCwhdGhpcy50aHJvdHRsZWQpe3ZhciBlPU9iamVjdChvLmEpKHRoaXMuZHVyYXRpb25TZWxlY3RvcikodCk7aWYoZT09PWEuYSl0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGEuYS5lKTtlbHNle3ZhciBuPU9iamVjdChsLmEpKHRoaXMsZSk7IW58fG4uY2xvc2VkP3RoaXMuY2xlYXJUaHJvdHRsZSgpOnRoaXMuYWRkKHRoaXMudGhyb3R0bGVkPW4pfX19LGUucHJvdG90eXBlLmNsZWFyVGhyb3R0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZhbHVlLGU9dGhpcy5oYXNWYWx1ZSxuPXRoaXMudGhyb3R0bGVkO24mJih0aGlzLnJlbW92ZShuKSx0aGlzLnRocm90dGxlZD1udWxsLG4udW5zdWJzY3JpYmUoKSksZSYmKHRoaXMudmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSl9LGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5jbGVhclRocm90dGxlKCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5jbGVhclRocm90dGxlKCl9LGV9KHMuYSksZj1uKCJnSTNCIik7ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1pLmEpLG49ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGYuYSkodCxlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgdShuKSl9O3ZhciBufW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBkfSl9LFMxblg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJtclNHIikscj1uKCJLOUlhIiksbz1uKCI2YmxGIiksYT1uKCJGRk9vIikscz1uKCJwdWdUIik7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5saWZ0KG5ldyB1KHQpKX19dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY29ubmVjdGFibGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29ubmVjdGFibGU7bi5fcmVmQ291bnQrKzt2YXIgaT1uZXcgYyh0LG4pLHI9ZS5zdWJzY3JpYmUoaSk7cmV0dXJuIGkuY2xvc2VkfHwoaS5jb25uZWN0aW9uPW4uY29ubmVjdCgpKSxyfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmNvbm5lY3RhYmxlPW4saX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7dmFyIGU9dC5fcmVmQ291bnQ7aWYoZTw9MCl0aGlzLmNvbm5lY3Rpb249bnVsbDtlbHNlIGlmKHQuX3JlZkNvdW50PWUtMSxlPjEpdGhpcy5jb25uZWN0aW9uPW51bGw7ZWxzZXt2YXIgbj10aGlzLmNvbm5lY3Rpb24saT10Ll9jb25uZWN0aW9uO3RoaXMuY29ubmVjdGlvbj1udWxsLCFpfHxuJiZpIT09bnx8aS51bnN1YnNjcmliZSgpfX1lbHNlIHRoaXMuY29ubmVjdGlvbj1udWxsfSxlfShhLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zb3VyY2U9ZSxpLnN1YmplY3RGYWN0b3J5PW4saS5fcmVmQ291bnQ9MCxpLl9pc0NvbXBsZXRlPSExLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZSh0KX0sZS5wcm90b3R5cGUuZ2V0U3ViamVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1YmplY3Q7cmV0dXJuIHQmJiF0LmlzU3RvcHBlZHx8KHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fSxlLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29ubmVjdGlvbjtyZXR1cm4gdHx8KHRoaXMuX2lzQ29tcGxldGU9ITEsKHQ9dGhpcy5fY29ubmVjdGlvbj1uZXcgcy5hKS5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKG5ldyBoKHRoaXMuZ2V0U3ViamVjdCgpLHRoaXMpKSksdC5jbG9zZWQ/KHRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0PXMuYS5FTVBUWSk6dGhpcy5fY29ubmVjdGlvbj10KSx0fSxlLnByb3RvdHlwZS5yZWZDb3VudD1mdW5jdGlvbigpe3JldHVybiBsKCkodGhpcyl9LGV9KG8uYSkucHJvdG90eXBlLGQ9e29wZXJhdG9yOnt2YWx1ZTpudWxsfSxfcmVmQ291bnQ6e3ZhbHVlOjAsd3JpdGFibGU6ITB9LF9zdWJqZWN0Ont2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSxfY29ubmVjdGlvbjp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX3N1YnNjcmliZTp7dmFsdWU6Zi5fc3Vic2NyaWJlfSxfaXNDb21wbGV0ZTp7dmFsdWU6Zi5faXNDb21wbGV0ZSx3cml0YWJsZTohMH0sZ2V0U3ViamVjdDp7dmFsdWU6Zi5nZXRTdWJqZWN0fSxjb25uZWN0Ont2YWx1ZTpmLmNvbm5lY3R9LHJlZkNvdW50Ont2YWx1ZTpmLnJlZkNvdW50fX0saD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuY29ubmVjdGFibGU9bixpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fZXJyb3IuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmNvbm5lY3RhYmxlLl9pc0NvbXBsZXRlPSEwLHRoaXMuX3Vuc3Vic2NyaWJlKCksdC5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29ubmVjdGFibGU7aWYodCl7dGhpcy5jb25uZWN0YWJsZT1udWxsO3ZhciBlPXQuX2Nvbm5lY3Rpb247dC5fcmVmQ291bnQ9MCx0Ll9zdWJqZWN0PW51bGwsdC5fY29ubmVjdGlvbj1udWxsLGUmJmUudW5zdWJzY3JpYmUoKX19LGV9KHIuYik7ZnVuY3Rpb24gcCgpe3JldHVybiBuZXcgci5hfWZ1bmN0aW9uIG0oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGwoKSgoZT1wLGZ1bmN0aW9uKHQpe3ZhciBuO249ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTt2YXIgaT1PYmplY3QuY3JlYXRlKHQsZCk7cmV0dXJuIGkuc291cmNlPXQsaS5zdWJqZWN0RmFjdG9yeT1uLGl9KSh0KSk7dmFyIGV9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBtfSl9LFM1WFE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIkRLVGIiKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC50aGVuKGZ1bmN0aW9uKHQpe2UuY2xvc2VkfHwoZS5uZXh0KHQpLGUuY29tcGxldGUoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiBlLmVycm9yKHQpfSkudGhlbihudWxsLGkuYSksZX19fSxTTXNtOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiSXAwUiIpLHI9bigidC9OYSIpLG89bigiQ2NuRyIpLGE9bigiWllqdCIpLHM9bigiRi9YTCIpLGw9bigiVk5yNCIpLHU9bigiWGxQdyIpLGM9bigieE15RSIpLGY9bigiNjdZLyIpLGQ9bigibXJTRyIpLGg9bigiRkZPbyIpLHA9bigicHVnVCIpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2FsbGJhY2s9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgYih0LHRoaXMuY2FsbGJhY2spKX0sdH0oKSxiPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5hZGQobmV3IHAuYShuKSksaX1yZXR1cm4gZC5iKGUsdCksZX0oaC5hKSx5PW4oIlMxblgiKSx2PW4oIjlaMUYiKSxnPW4oInQ5ZloiKSxfPW4oIldmNHAiKSx3PW4oIm42Z0ciKTtmdW5jdGlvbiB4KHQpe3JldHVybiBFcnJvcignVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICInK3QrJyInKX1mdW5jdGlvbiBDKHQpe3JldHVybiBFcnJvcigiVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyBcIiIrdCsnIi4nKX1mdW5jdGlvbiBTKHQpe3JldHVybiBFcnJvcigiVGhlIGxpdGVyYWwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBzYWZlIEhUTUwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIGxpdGVyYWwgd2FzIFwiIit0KyciLicpfW4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pO3ZhciBPPWZ1bmN0aW9uKHQpe3Qubm9kZU5hbWU/dGhpcy5zdmdFbGVtZW50PXQ6dGhpcy51cmw9dH0sRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2h0dHBDbGllbnQ9dCx0aGlzLl9zYW5pdGl6ZXI9ZSx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz0ibWF0ZXJpYWwtaWNvbnMiLHRoaXMuX2RvY3VtZW50PW59cmV0dXJuIHQucHJvdG90eXBlLmFkZFN2Z0ljb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uSW5OYW1lc3BhY2UoIiIsdCxlKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkxpdGVyYWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQsZSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcodCxlLG5ldyBPKG4pKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uSS5IVE1MLG4pO2lmKCFpKXRocm93IFMobik7dmFyIHI9dGhpcy5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24oaSk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcodCxlLG5ldyBPKHIpKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsdCl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRMaXRlcmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3IE8oZSkpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uSS5IVE1MLGUpO2lmKCFuKXRocm93IFMoZSk7dmFyIGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcobik7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcodCxuZXcgTyhpKSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyRm9udENsYXNzQWxpYXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dCksdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLnNldCh0LGUpLHRoaXN9LHQucHJvdG90eXBlLmNsYXNzTmFtZUZvckZvbnRBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLmdldCh0KXx8dH0sdC5wcm90b3R5cGUuc2V0RGVmYXVsdEZvbnRTZXRDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz10LHRoaXN9LHQucHJvdG90eXBlLmdldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzc30sdC5wcm90b3R5cGUuZ2V0U3ZnSWNvbkZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkkuUkVTT1VSQ0VfVVJMLHQpO2lmKCFuKXRocm93IEModCk7dmFyIGk9dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5nZXQobik7cmV0dXJuIGk/T2JqZWN0KHMuYSkoayhpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKG5ldyBPKHQpKS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jYWNoZWRJY29uc0J5VXJsLnNldChuLHQpfSksT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSl9LHQucHJvdG90eXBlLmdldE5hbWVkU3ZnSWNvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgbj1qKGUsdCksaT10aGlzLl9zdmdJY29uQ29uZmlncy5nZXQobik7aWYoaSlyZXR1cm4gdGhpcy5fZ2V0U3ZnRnJvbUNvbmZpZyhpKTt2YXIgcj10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQoZSk7cmV0dXJuIHI/dGhpcy5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzKHQscik6T2JqZWN0KHUuYSkoeChuKSl9LHQucHJvdG90eXBlLl9nZXRTdmdGcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0VsZW1lbnQ/T2JqZWN0KHMuYSkoayh0LnN2Z0VsZW1lbnQpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcodCkucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5zdmdFbGVtZW50PWV9KSxPYmplY3QoZi5hKShmdW5jdGlvbih0KXtyZXR1cm4gayh0KX0pKX0sdC5wcm90b3R5cGUuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpO2lmKGkpcmV0dXJuIE9iamVjdChzLmEpKGkpO3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnN2Z0VsZW1lbnR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyh0KS5waXBlKE9iamVjdCh2LmEpKGZ1bmN0aW9uKGUpe3ZhciBpPW4uX3Nhbml0aXplci5zYW5pdGl6ZShvLkkuUkVTT1VSQ0VfVVJMLHQudXJsKTtyZXR1cm4gY29uc29sZS5lcnJvcigiTG9hZGluZyBpY29uIHNldCBVUkw6ICIraSsiIGZhaWxlZDogIitlLm1lc3NhZ2UpLE9iamVjdChzLmEpKG51bGwpfSkpfSk7cmV0dXJuIE9iamVjdChsLmEpKHIpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXt2YXIgaT1uLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpO2lmKCFpKXRocm93IHgodCk7cmV0dXJuIGl9KSl9LHQucHJvdG90eXBlLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT1lW25dO2lmKGkuc3ZnRWxlbWVudCl7dmFyIHI9dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGkuc3ZnRWxlbWVudCx0KTtpZihyKXJldHVybiByfX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2xvYWRTdmdJY29uRnJvbUNvbmZpZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9mZXRjaFVybCh0LnVybCkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24odCl9KSl9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdC5zdmdFbGVtZW50P09iamVjdChzLmEpKHQuc3ZnRWxlbWVudCk6dGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24obil7cmV0dXJuIHQuc3ZnRWxlbWVudHx8KHQuc3ZnRWxlbWVudD1lLl9zdmdFbGVtZW50RnJvbVN0cmluZyhuKSksdC5zdmdFbGVtZW50fSkpfSx0LnByb3RvdHlwZS5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcodCk7cmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoZSksZX0sdC5wcm90b3R5cGUuX2V4dHJhY3RTdmdJY29uRnJvbVNldD1mdW5jdGlvbih0LGUpe3ZhciBuPXQucXVlcnlTZWxlY3RvcigiIyIrZSk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9bi5jbG9uZU5vZGUoITApO2lmKGkucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGkpO2lmKCJzeW1ib2wiPT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHRoaXMuX3RvU3ZnRWxlbWVudChpKSk7dmFyIHI9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iik7cmV0dXJuIHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhyKX0sdC5wcm90b3R5cGUuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2UuaW5uZXJIVE1MPXQ7dmFyIG49ZS5xdWVyeVNlbGVjdG9yKCJzdmciKTtpZighbil0aHJvdyBFcnJvcigiPHN2Zz4gdGFnIG5vdCBmb3VuZCIpO3JldHVybiBufSx0LnByb3RvdHlwZS5fdG9TdmdFbGVtZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZygiPHN2Zz48L3N2Zz4iKSxuPTA7bjx0LmNoaWxkTm9kZXMubGVuZ3RoO24rKyl0LmNoaWxkTm9kZXNbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREUmJmUuYXBwZW5kQ2hpbGQodC5jaGlsZE5vZGVzW25dLmNsb25lTm9kZSghMCkpO3JldHVybiBlfSx0LnByb3RvdHlwZS5fc2V0U3ZnQXR0cmlidXRlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLHQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLHQuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLHR9LHQucHJvdG90eXBlLl9mZXRjaFVybD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLl9odHRwQ2xpZW50KXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBIdHRwQ2xpZW50IHByb3ZpZGVyIGZvciB1c2Ugd2l0aCBBbmd1bGFyIE1hdGVyaWFsIGljb25zLiBQbGVhc2UgaW5jbHVkZSB0aGUgSHR0cENsaWVudE1vZHVsZSBmcm9tIEBhbmd1bGFyL2NvbW1vbi9odHRwIGluIHlvdXIgYXBwIGltcG9ydHMuIik7aWYobnVsbD09dCl0aHJvdyBFcnJvcignQ2Fubm90IGZldGNoIGljb24gZnJvbSBVUkwgIicrdCsnIi4nKTt2YXIgbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5JLlJFU09VUkNFX1VSTCx0KTtpZighbil0aHJvdyBDKHQpO3ZhciBpPXRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmdldChuKTtpZihpKXJldHVybiBpO3ZhciByLGE9dGhpcy5faHR0cENsaWVudC5nZXQobix7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pLnBpcGUoKHI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5faW5Qcm9ncmVzc1VybEZldGNoZXMuZGVsZXRlKG4pfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5saWZ0KG5ldyBtKHIpKX0pLE9iamVjdCh5LmEpKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQobixhKSxhfSx0LnByb3RvdHlwZS5fYWRkU3ZnSWNvbkNvbmZpZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldChqKHQsZSksbiksdGhpc30sdC5wcm90b3R5cGUuX2FkZFN2Z0ljb25TZXRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQodCk7cmV0dXJuIG4/bi5wdXNoKGUpOnRoaXMuX2ljb25TZXRDb25maWdzLnNldCh0LFtlXSksdGhpc30sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWSkoci5jLDgpLE9iamVjdChvLlkpKGEuYyksT2JqZWN0KG8uWSkoaS5kLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gayh0KXtyZXR1cm4gdC5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdCsiOiIrZX12YXIgST1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5faWNvblJlZ2lzdHJ5PW4sci5faW5saW5lPSExLGl8fGUubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmxpbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5saW5lfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faW5saW5lPU9iamVjdCh3LmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udFNldCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250U2V0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udFNldD10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udEljb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udEljb259LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb250SWNvbj10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zcGxpdEljb25OYW1lPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVyblsiIiwiIl07dmFyIGU9dC5zcGxpdCgiOiIpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixlWzBdXTtjYXNlIDI6cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcignSW52YWxpZCBpY29uIG5hbWU6ICInK3QrJyInKX19LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodC5zdmdJY29uKWlmKHRoaXMuc3ZnSWNvbil7dmFyIG49dGhpcy5fc3BsaXRJY29uTmFtZSh0aGlzLnN2Z0ljb24pO3RoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24oblsxXSxuWzBdKS5waXBlKE9iamVjdChnLmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN2Z0VsZW1lbnQodCl9LGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLmxvZygiRXJyb3IgcmV0cmlldmluZyBpY29uOiAiK3QubWVzc2FnZSl9KX1lbHNlIHRoaXMuX2NsZWFyU3ZnRWxlbWVudCgpO3RoaXMuX3VzaW5nRm9udEljb24oKSYmdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fdXNpbmdGb250SWNvbigpJiZ0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX0sZS5wcm90b3R5cGUuX3VzaW5nRm9udEljb249ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zdmdJY29ufSxlLnByb3RvdHlwZS5fc2V0U3ZnRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKTtmb3IodmFyIGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLG49MDtuPGUubGVuZ3RoO24rKyllW25dLnRleHRDb250ZW50Kz0iICI7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHQpfSxlLnByb3RvdHlwZS5fY2xlYXJTdmdFbGVtZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZS0tOyl7dmFyIG49dC5jaGlsZE5vZGVzW2VdOzE9PT1uLm5vZGVUeXBlJiYic3ZnIiE9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKXx8dC5yZW1vdmVDaGlsZChuKX19LGUucHJvdG90eXBlLl91cGRhdGVGb250SWNvbkNsYXNzZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl91c2luZ0ZvbnRJY29uKCkpe3ZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKTtlIT10aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiZ0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MpLGUmJnQuY2xhc3NMaXN0LmFkZChlKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1lKSx0aGlzLmZvbnRJY29uIT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJih0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MpLHRoaXMuZm9udEljb24mJnQuY2xhc3NMaXN0LmFkZCh0aGlzLmZvbnRJY29uKSx0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3M9dGhpcy5mb250SWNvbil9fSxlLnByb3RvdHlwZS5fY2xlYW51cEZvbnRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC50cmltKCkuc3BsaXQoIiAiKVswXTp0fSxlfShPYmplY3QoXy56KShmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSksVD1mdW5jdGlvbigpe319LFQxRE06ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oImg5RHEiKSxyPW5ldyhuKCJDUzlRIikuYSkoaS5hKX0sVHhqZzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigiWm44RCIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gT2JqZWN0KGkuYSkoMSl9fSxVb2RIOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIGk9bigibXJTRyIpLHI9bigiV2Y0cCIpLG89ImFjY2VudCIsYT0icHJpbWFyeSIscz1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIGw9dC5jYWxsKHRoaXMsZSl8fHRoaXM7bC5fcGxhdGZvcm09bixsLl9mb2N1c01vbml0b3I9aSxsLl9hbmltYXRpb25Nb2RlPXIsbC5pc1JvdW5kQnV0dG9uPWwuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksbC5pc0ljb25CdXR0b249bC5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcih2YXIgdT0wLGM9czt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTtsLl9oYXNIb3N0QXR0cmlidXRlcyhmKSYmZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZil9cmV0dXJuIGwuX2ZvY3VzTW9uaXRvci5tb25pdG9yKGwuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwhMCksbC5pc1JvdW5kQnV0dG9uP2wuY29sb3I9bzpsLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZsYXQtYnV0dG9uIikmJihsLmNvbG9yPWEpLGx9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCl9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH0sZS5wcm90b3R5cGUuX2hhc0hvc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9nZXRIb3N0RWxlbWVudCgpLmhhc0F0dHJpYnV0ZShlKX0pfSxlfShPYmplY3Qoci56KShPYmplY3Qoci5CKShPYmplY3Qoci5BKShmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSkpKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7cmV0dXJuIHQuY2FsbCh0aGlzLGksZSxuLHIpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLl9oYWx0RGlzYWJsZWRFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5kaXNhYmxlZCYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0sZX0obCksYz1mdW5jdGlvbigpe319LCJWOXErIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbigiQ2NuRyIpO3ZhciBpPW4oIklwMFIiKSxyPW4oIk96ZkIiKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe09iamVjdChpLngpKGUpJiYhdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBGbGV4IExheW91dCBsb2FkZWQgb24gdGhlIHNlcnZlciB3aXRob3V0IEZsZXhMYXlvdXRTZXJ2ZXJNb2R1bGUiKX1yZXR1cm4gdC53aXRoQ29uZmlnPWZ1bmN0aW9uKGUsbil7dmFyIGk9T2JqZWN0LmFzc2lnbih7fSxyLmYpLG89W107Zm9yKHZhciBhIGluIGUpZVthXT09PWlbYV18fCExIT09ZVthXSYmITAhPT1lW2FdfHwoaVthXT1lW2FdKTtyZXR1cm4gZS5zZXJ2ZXJMb2FkZWQmJm8ucHVzaCh7cHJvdmlkZTpyLmwsdXNlVmFsdWU6ITB9KSxBcnJheS5pc0FycmF5KG4pJiZvLnB1c2goe3Byb3ZpZGU6ci5hLHVzZVZhbHVlOm4sbXVsdGk6ITB9KSxvLnB1c2goe3Byb3ZpZGU6ci5nLHVzZVZhbHVlOml9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6b319LHR9KCl9LFZOcjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIjZibEYiKSxvPW4oImlzYnkiKSxhPW4oIkc1SjEiKSxzPW4oInpvdG0iKSxsPW4oIk1HQlMiKSx1PW4oIjY3WS8iKTtmdW5jdGlvbiBjKCl7Zm9yKHZhciB0LGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGVbZS5sZW5ndGgtMV0mJih0PWUucG9wKCkpLDE9PT1lLmxlbmd0aCYmT2JqZWN0KG8uYSkoZVswXSkmJihlPWVbMF0pLDA9PT1lLmxlbmd0aD9hLmE6dD9jKGUpLnBpcGUoT2JqZWN0KHUuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGUpfSkpOm5ldyByLmEoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmKHQsZSl9KX12YXIgZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7aS5zb3VyY2VzPW4saS5jb21wbGV0ZWQ9MCxpLmhhdmVWYWx1ZXM9MDt2YXIgcj1uLmxlbmd0aDtpLnZhbHVlcz1uZXcgQXJyYXkocik7Zm9yKHZhciBvPTA7bzxyO28rKyl7dmFyIGE9bltvXSxsPU9iamVjdChzLmEpKGksYSxudWxsLG8pO2wmJmkuYWRkKGwpfXJldHVybiBpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy52YWx1ZXNbbl09ZSxyLl9oYXNWYWx1ZXx8KHIuX2hhc1ZhbHVlPSEwLHRoaXMuaGF2ZVZhbHVlcysrKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbixuPXRoaXMuaGF2ZVZhbHVlcyxpPXRoaXMudmFsdWVzLHI9aS5sZW5ndGg7dC5faGFzVmFsdWU/KHRoaXMuY29tcGxldGVkKyssdGhpcy5jb21wbGV0ZWQ9PT1yJiYobj09PXImJmUubmV4dChpKSxlLmNvbXBsZXRlKCkpKTplLmNvbXBsZXRlKCl9LGV9KGwuYSl9LCJWbkQvIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgYSh0LGUpKX19dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgcyh0LHRoaXMucHJlZGljYXRlLHRoaXMudGhpc0FyZykpfSx0fSgpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucHJlZGljYXRlPW4sci50aGlzQXJnPWksci5jb3VudD0wLHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5jb3VudCsrKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWUmJnRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZX0oci5hKX0sV2Y0cDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwieiIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJBIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwieCIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBXfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIEd9KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gWn0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBxfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSxuLmQoZSwidiIsZnVuY3Rpb24oKXtyZXR1cm4gen0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KTt2YXIgaT1uKCJDY25HIikscj1uKCJtclNHIiksbz1uKCJuNmdHIiksYT1uKCJLOUlhIikscz0obigiNmJsRiIpLG4oImRXWmciKSksbD0obigiWllqdCIpLG4oIllTaDIiKSksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuU1RBTkRBUkRfQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSIsdC5ERUNFTEVSQVRJT05fQ1VSVkU9ImN1YmljLWJlemllcigwLjAsMC4wLDAuMiwxKSIsdC5BQ0NFTEVSQVRJT05fQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDEsMSkiLHQuU0hBUlBfQ1VSVkU9ImN1YmljLWJlemllcigwLjQsMC4wLDAuNiwxKSIsdH0oKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5DT01QTEVYPSIzNzVtcyIsdC5FTlRFUklORz0iMjI1bXMiLHQuRVhJVElORz0iMTk1bXMiLHR9KCksZj1uZXcgaS5xKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9zYW5pdHlDaGVja3NFbmFibGVkPXQsdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMSx0aGlzLl9oYXNDaGVja2VkSGFtbWVyPSExLHRoaXMuX2RvY3VtZW50PSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50P2RvY3VtZW50Om51bGwsdGhpcy5fd2luZG93PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3c/d2luZG93Om51bGwsdGhpcy5fYXJlQ2hlY2tzRW5hYmxlZCgpJiYhdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcyYmKHRoaXMuX2NoZWNrRG9jdHlwZUlzRGVmaW5lZCgpLHRoaXMuX2NoZWNrVGhlbWVJc1ByZXNlbnQoKSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSEwKX1yZXR1cm4gdC5wcm90b3R5cGUuX2FyZUNoZWNrc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZCYmT2JqZWN0KGkuWikoKSYmIXRoaXMuX2lzVGVzdEVudigpfSx0LnByb3RvdHlwZS5faXNUZXN0RW52PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpbmRvdyYmKHRoaXMuX3dpbmRvdy5fX2thcm1hX198fHRoaXMuX3dpbmRvdy5qYXNtaW5lKX0sdC5wcm90b3R5cGUuX2NoZWNrRG9jdHlwZUlzRGVmaW5lZD1mdW5jdGlvbigpe3RoaXMuX2RvY3VtZW50JiYhdGhpcy5fZG9jdW1lbnQuZG9jdHlwZSYmY29uc29sZS53YXJuKCJDdXJyZW50IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSBkb2N0eXBlLiBUaGlzIG1heSBjYXVzZSBzb21lIEFuZ3VsYXIgTWF0ZXJpYWwgY29tcG9uZW50cyBub3QgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLiIpfSx0LnByb3RvdHlwZS5fY2hlY2tUaGVtZUlzUHJlc2VudD1mdW5jdGlvbigpe2lmKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9kb2N1bWVudC5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJtYXQtdGhlbWUtbG9hZGVkLW1hcmtlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZSh0KTtlJiYibm9uZSIhPT1lLmRpc3BsYXkmJmNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgQW5ndWxhciBNYXRlcmlhbCBjb3JlIHRoZW1lLiBNb3N0IE1hdGVyaWFsIGNvbXBvbmVudHMgbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBGb3IgbW9yZSBpbmZvIHJlZmVyIHRvIHRoZSB0aGVtaW5nIGd1aWRlOiBodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vZ3VpZGUvdGhlbWluZyIpLHRoaXMuX2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCl9fSx0LnByb3RvdHlwZS5fY2hlY2tIYW1tZXJJc0F2YWlsYWJsZT1mdW5jdGlvbigpeyF0aGlzLl9oYXNDaGVja2VkSGFtbWVyJiZ0aGlzLl93aW5kb3cmJih0aGlzLl9hcmVDaGVja3NFbmFibGVkKCkmJiF0aGlzLl93aW5kb3cuSGFtbWVyJiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEhhbW1lckpTLiBDZXJ0YWluIEFuZ3VsYXIgTWF0ZXJpYWwgY29tcG9uZW50cyBtYXkgbm90IHdvcmsgY29ycmVjdGx5LiIpLHRoaXMuX2hhc0NoZWNrZWRIYW1tZXI9ITApfSx0fSgpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dmFyIGk9dC5hcHBseSh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9kaXNhYmxlZD0hMSxpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1PYmplY3Qoby5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfSh0KX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtmb3IodmFyIG49W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpXT1hcmd1bWVudHNbaV07dmFyIHI9dC5hcHBseSh0aGlzLG4pfHx0aGlzO3JldHVybiByLmNvbG9yPWUscn1yZXR1cm4gT2JqZWN0KHIuYikobix0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsImNvbG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIG49dHx8ZTtuIT09dGhpcy5fY29sb3ImJih0aGlzLl9jb2xvciYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC0iK3RoaXMuX2NvbG9yKSxuJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LSIrbiksdGhpcy5fY29sb3I9bil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbn0odCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX2Rpc2FibGVSaXBwbGU9ITEsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRpc2FibGVSaXBwbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9T2JqZWN0KG8uYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuZXJyb3JTdGF0ZT0hMSxpLnN0YXRlQ2hhbmdlcz1uZXcgYS5hLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudXBkYXRlRXJyb3JTdGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZXJyb3JTdGF0ZSxlPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtlIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9LGV9KHQpfXZhciB5PW5ldyBpLnEoIk1BVF9EQVRFX0xPQ0FMRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGkuWSkoaS51KX19KSx2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2xvY2FsZUNoYW5nZXM9bmV3IGEuYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsb2NhbGVDaGFuZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUNoYW5nZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR8fHRoaXMuaXNEYXRlSW5zdGFuY2UodCkmJnRoaXMuaXNWYWxpZCh0KT90OnRoaXMuaW52YWxpZCgpfSx0LnByb3RvdHlwZS5zZXRMb2NhbGU9ZnVuY3Rpb24odCl7dGhpcy5sb2NhbGU9dCx0aGlzLl9sb2NhbGVDaGFuZ2VzLm5leHQoKX0sdC5wcm90b3R5cGUuY29tcGFyZURhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRZZWFyKHQpLXRoaXMuZ2V0WWVhcihlKXx8dGhpcy5nZXRNb250aCh0KS10aGlzLmdldE1vbnRoKGUpfHx0aGlzLmdldERhdGUodCktdGhpcy5nZXREYXRlKGUpfSx0LnByb3RvdHlwZS5zYW1lRGF0ZT1mdW5jdGlvbih0LGUpe2lmKHQmJmUpe3ZhciBuPXRoaXMuaXNWYWxpZCh0KSxpPXRoaXMuaXNWYWxpZChlKTtyZXR1cm4gbiYmaT8hdGhpcy5jb21wYXJlRGF0ZSh0LGUpOm49PWl9cmV0dXJuIHQ9PWV9LHQucHJvdG90eXBlLmNsYW1wRGF0ZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUmJnRoaXMuY29tcGFyZURhdGUodCxlKTwwP2U6biYmdGhpcy5jb21wYXJlRGF0ZSh0LG4pPjA/bjp0fSx0fSgpLGc9bmV3IGkucSgibWF0LWRhdGUtZm9ybWF0cyIpLF89InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsLHc9e2xvbmc6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sbmFycm93OlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl19LHg9TygzMSxmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQrMSl9KSxDPXtsb25nOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG5hcnJvdzpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXX0sUz0vXlxkezR9LVxkezJ9LVxkezJ9KD86VFxkezJ9OlxkezJ9OlxkezJ9KD86XC5cZCspPyg/Olp8KD86KD86XCt8LSlcZHsyfTpcZHsyfSkpPyk/JC87ZnVuY3Rpb24gTyh0LGUpe2Zvcih2YXIgbj1BcnJheSh0KSxpPTA7aTx0O2krKyluW2ldPWUoaSk7cmV0dXJuIG59dmFyIEU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS51c2VVdGNGb3JEaXNwbGF5PSEwLHQucHJvdG90eXBlLnNldExvY2FsZS5jYWxsKGksZSksaS51c2VVdGNGb3JEaXNwbGF5PSFuLlRSSURFTlQsaS5fY2xhbXBEYXRlPW4uVFJJREVOVHx8bi5FREdFLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0WWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSxlLnByb3RvdHlwZS5nZXRNb250aD1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSxlLnByb3RvdHlwZS5nZXREYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKX0sZS5wcm90b3R5cGUuZ2V0RGF5T2ZXZWVrPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxlLnByb3RvdHlwZS5nZXRNb250aE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoXyl7dmFyIG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse21vbnRoOnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gTygxMixmdW5jdGlvbih0KXtyZXR1cm4gZS5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoZS5fZm9ybWF0KG4sbmV3IERhdGUoMjAxNyx0LDEpKSl9KX1yZXR1cm4gd1t0XX0sZS5wcm90b3R5cGUuZ2V0RGF0ZU5hbWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZihfKXt2YXIgZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7ZGF5OiJudW1lcmljIix0aW1lWm9uZToidXRjIn0pO3JldHVybiBPKDMxLGZ1bmN0aW9uKG4pe3JldHVybiB0Ll9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0Ll9mb3JtYXQoZSxuZXcgRGF0ZSgyMDE3LDAsbisxKSkpfSl9cmV0dXJuIHh9LGUucHJvdG90eXBlLmdldERheU9mV2Vla05hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoXyl7dmFyIG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse3dlZWtkYXk6dCx0aW1lWm9uZToidXRjIn0pO3JldHVybiBPKDcsZnVuY3Rpb24odCl7cmV0dXJuIGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKGUuX2Zvcm1hdChuLG5ldyBEYXRlKDIwMTcsMCx0KzEpKSl9KX1yZXR1cm4gQ1t0XX0sZS5wcm90b3R5cGUuZ2V0WWVhck5hbWU9ZnVuY3Rpb24odCl7aWYoXyl7dmFyIGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse3llYXI6Im51bWVyaWMiLHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChlLHQpKX1yZXR1cm4gU3RyaW5nKHRoaXMuZ2V0WWVhcih0KSl9LGUucHJvdG90eXBlLmdldEZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmdldE51bURheXNJbk1vbnRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERhdGUodGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSsxLDApKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY3JlYXRlRGF0ZSh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSx0aGlzLmdldERhdGUodCkpfSxlLnByb3RvdHlwZS5jcmVhdGVEYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZihlPDB8fGU+MTEpdGhyb3cgRXJyb3IoJ0ludmFsaWQgbW9udGggaW5kZXggIicrZSsnIi4gTW9udGggaW5kZXggaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMTEuJyk7aWYobjwxKXRocm93IEVycm9yKCdJbnZhbGlkIGRhdGUgIicrbisnIi4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuJyk7dmFyIGk9dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbik7aWYoaS5nZXRNb250aCgpIT1lKXRocm93IEVycm9yKCdJbnZhbGlkIGRhdGUgIicrbisnIiBmb3IgbW9udGggd2l0aCBpbmRleCAiJytlKyciLicpO3JldHVybiBpfSxlLnByb3RvdHlwZS50b2RheT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZX0sZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P25ldyBEYXRlKHQpOnQ/bmV3IERhdGUoRGF0ZS5wYXJzZSh0KSk6bnVsbH0sZS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaXNWYWxpZCh0KSl0aHJvdyBFcnJvcigiTmF0aXZlRGF0ZUFkYXB0ZXI6IENhbm5vdCBmb3JtYXQgaW52YWxpZCBkYXRlLiIpO2lmKF8pe3RoaXMuX2NsYW1wRGF0ZSYmKHQuZ2V0RnVsbFllYXIoKTwxfHx0LmdldEZ1bGxZZWFyKCk+OTk5OSkmJih0PXRoaXMuY2xvbmUodCkpLnNldEZ1bGxZZWFyKE1hdGgubWF4KDEsTWF0aC5taW4oOTk5OSx0LmdldEZ1bGxZZWFyKCkpKSksZT1PYmplY3Qoci5hKSh7fSxlLHt0aW1lWm9uZToidXRjIn0pO3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLGUpO3JldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQobix0KSl9cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHQudG9EYXRlU3RyaW5nKCkpfSxlLnByb3RvdHlwZS5hZGRDYWxlbmRhclllYXJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkQ2FsZW5kYXJNb250aHModCwxMiplKX0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJNb250aHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpK2UsdGhpcy5nZXREYXRlKHQpKTtyZXR1cm4gdGhpcy5nZXRNb250aChuKSE9KCh0aGlzLmdldE1vbnRoKHQpK2UpJTEyKzEyKSUxMiYmKG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIobiksdGhpcy5nZXRNb250aChuKSwwKSksbn0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJEYXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCksdGhpcy5nZXREYXRlKHQpK2UpfSxlLnByb3RvdHlwZS50b0lzbzg2MDE9ZnVuY3Rpb24odCl7cmV0dXJuW3QuZ2V0VVRDRnVsbFllYXIoKSx0aGlzLl8yZGlnaXQodC5nZXRVVENNb250aCgpKzEpLHRoaXMuXzJkaWdpdCh0LmdldFVUQ0RhdGUoKSldLmpvaW4oIi0iKX0sZS5wcm90b3R5cGUuZGVzZXJpYWxpemU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZighZSlyZXR1cm4gbnVsbDtpZihTLnRlc3QoZSkpe3ZhciBuPW5ldyBEYXRlKGUpO2lmKHRoaXMuaXNWYWxpZChuKSlyZXR1cm4gbn19cmV0dXJuIHQucHJvdG90eXBlLmRlc2VyaWFsaXplLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuaXNEYXRlSW5zdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlfSxlLnByb3RvdHlwZS5pc1ZhbGlkPWZ1bmN0aW9uKHQpe3JldHVybiFpc05hTih0LmdldFRpbWUoKSl9LGUucHJvdG90eXBlLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUoTmFOKX0sZS5wcm90b3R5cGUuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3c9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW5ldyBEYXRlKHQsZSxuKTtyZXR1cm4gdD49MCYmdDwxMDAmJmkuc2V0RnVsbFllYXIodGhpcy5nZXRZZWFyKGkpLTE5MDApLGl9LGUucHJvdG90eXBlLl8yZGlnaXQ9ZnVuY3Rpb24odCl7cmV0dXJuKCIwMCIrdCkuc2xpY2UoLTIpfSxlLnByb3RvdHlwZS5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvW1x1MjAwZVx1MjAwZl0vZywiIil9LGUucHJvdG90eXBlLl9mb3JtYXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRGF0ZShEYXRlLlVUQyhlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpLGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSxlLmdldE1pbGxpc2Vjb25kcygpKSk7cmV0dXJuIHQuZm9ybWF0KG4pfSxlfSh2KSxrPXtwYXJzZTp7ZGF0ZUlucHV0Om51bGx9LGRpc3BsYXk6e2RhdGVJbnB1dDp7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQifSxkYXRlQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0sbW9udGhZZWFyQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyJ9fX0saj1mdW5jdGlvbigpe30sST1mdW5jdGlvbigpe30sVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmlzRXJyb3JTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiEhKHQmJnQuaW52YWxpZCYmKHQudG91Y2hlZHx8ZSYmZS5zdWJtaXR0ZWQpKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9saW5lcz10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zZXRMaW5lQ2xhc3ModGhpcy5fbGluZXMubGVuZ3RoKSx0aGlzLl9saW5lcy5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe24uX3NldExpbmVDbGFzcyhuLl9saW5lcy5sZW5ndGgpfSl9cmV0dXJuIHQucHJvdG90eXBlLl9zZXRMaW5lQ2xhc3M9ZnVuY3Rpb24odCl7dGhpcy5fcmVzZXRDbGFzc2VzKCksMj09PXR8fDM9PT10P3RoaXMuX3NldENsYXNzKCJtYXQtIit0KyItbGluZSIsITApOnQ+MyYmdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9yZXNldENsYXNzZXM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRDbGFzcygibWF0LTItbGluZSIsITEpLHRoaXMuX3NldENsYXNzKCJtYXQtMy1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMSl9LHQucHJvdG90eXBlLl9zZXRDbGFzcz1mdW5jdGlvbih0LGUpe2U/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodCk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodCl9LHR9KCksQT1mdW5jdGlvbigpe30sUD1mdW5jdGlvbigpe3ZhciB0PXtGQURJTkdfSU46MCxWSVNJQkxFOjEsRkFESU5HX09VVDoyLEhJRERFTjozfTtyZXR1cm4gdFt0LkZBRElOR19JTl09IkZBRElOR19JTiIsdFt0LlZJU0lCTEVdPSJWSVNJQkxFIix0W3QuRkFESU5HX09VVF09IkZBRElOR19PVVQiLHRbdC5ISURERU5dPSJISURERU4iLHR9KCksRD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5jb25maWc9bix0aGlzLnN0YXRlPVAuSElEREVOfXJldHVybiB0LnByb3RvdHlwZS5mYWRlT3V0PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuZmFkZU91dFJpcHBsZSh0aGlzKX0sdH0oKSxNPXtlbnRlckR1cmF0aW9uOjQ1MCxleGl0RHVyYXRpb246NDAwfSxOPTgwMCxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2YXIgcj10aGlzO3RoaXMuX3RhcmdldD10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fdHJpZ2dlckV2ZW50cz1uZXcgTWFwLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IFNldCx0aGlzLl9ldmVudE9wdGlvbnM9ISFPYmplY3Qocy5kKSgpJiZ7cGFzc2l2ZTohMH0sdGhpcy5vbk1vdXNlZG93bj1mdW5jdGlvbih0KXt2YXIgZT1yLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPHIuX2xhc3RUb3VjaFN0YXJ0RXZlbnQrTjtyLl90YXJnZXQucmlwcGxlRGlzYWJsZWR8fGV8fChyLl9pc1BvaW50ZXJEb3duPSEwLHIuZmFkZUluUmlwcGxlKHQuY2xpZW50WCx0LmNsaWVudFksci5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uVG91Y2hTdGFydD1mdW5jdGlvbih0KXtyLl90YXJnZXQucmlwcGxlRGlzYWJsZWR8fChyLl9sYXN0VG91Y2hTdGFydEV2ZW50PURhdGUubm93KCksci5faXNQb2ludGVyRG93bj0hMCxyLmZhZGVJblJpcHBsZSh0LnRvdWNoZXNbMF0uY2xpZW50WCx0LnRvdWNoZXNbMF0uY2xpZW50WSxyLl90YXJnZXQucmlwcGxlQ29uZmlnKSl9LHRoaXMub25Qb2ludGVyVXA9ZnVuY3Rpb24oKXtyLl9pc1BvaW50ZXJEb3duJiYoci5faXNQb2ludGVyRG93bj0hMSxyLl9hY3RpdmVSaXBwbGVzLmZvckVhY2goZnVuY3Rpb24odCl7IXQuY29uZmlnLnBlcnNpc3RlbnQmJih0LnN0YXRlPT09UC5WSVNJQkxFfHx0LmNvbmZpZy50ZXJtaW5hdGVPblBvaW50ZXJVcCYmdC5zdGF0ZT09PVAuRkFESU5HX0lOKSYmdC5mYWRlT3V0KCl9KSl9LGkuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1uLm5hdGl2ZUVsZW1lbnQsdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlZG93biksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNldXAiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWxlYXZlIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQpLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaGVuZCIsdGhpcy5vblBvaW50ZXJVcCkpfXJldHVybiB0LnByb3RvdHlwZS5mYWRlSW5SaXBwbGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvPXRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fY29udGFpbmVyUmVjdHx8dGhpcy5fY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPU9iamVjdChyLmEpKHt9LE0sbi5hbmltYXRpb24pO24uY2VudGVyZWQmJih0PW8ubGVmdCtvLndpZHRoLzIsZT1vLnRvcCtvLmhlaWdodC8yKTt2YXIgcz1uLnJhZGl1c3x8ZnVuY3Rpb24odCxlLG4pe3ZhciBpPU1hdGgubWF4KE1hdGguYWJzKHQtbi5sZWZ0KSxNYXRoLmFicyh0LW4ucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKGUtbi50b3ApLE1hdGguYWJzKGUtbi5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUsbyksbD10LW8ubGVmdCx1PWUtby50b3AsYz1hLmVudGVyRHVyYXRpb24vKG4uc3BlZWRGYWN0b3J8fDEpLGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5jbGFzc0xpc3QuYWRkKCJtYXQtcmlwcGxlLWVsZW1lbnQiKSxmLnN0eWxlLmxlZnQ9bC1zKyJweCIsZi5zdHlsZS50b3A9dS1zKyJweCIsZi5zdHlsZS5oZWlnaHQ9MipzKyJweCIsZi5zdHlsZS53aWR0aD0yKnMrInB4IixmLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLmNvbG9yfHxudWxsLGYuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWMrIm1zIix0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGYpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYpLmdldFByb3BlcnR5VmFsdWUoIm9wYWNpdHkiKSxmLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUoMSkiO3ZhciBkPW5ldyBEKHRoaXMsZixuKTtyZXR1cm4gZC5zdGF0ZT1QLkZBRElOR19JTix0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChkKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPWQpLHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dmFyIHQ9ZD09PWkuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU7ZC5zdGF0ZT1QLlZJU0lCTEUsbi5wZXJzaXN0ZW50fHx0JiZpLl9pc1BvaW50ZXJEb3dufHxkLmZhZGVPdXQoKX0sYyksZH0sdC5wcm90b3R5cGUuZmFkZU91dFJpcHBsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVSaXBwbGVzLmRlbGV0ZSh0KTtpZih0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSxlKXt2YXIgbj10LmVsZW1lbnQsaT1PYmplY3Qoci5hKSh7fSxNLHQuY29uZmlnLmFuaW1hdGlvbik7bi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249aS5leGl0RHVyYXRpb24rIm1zIixuLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9UC5GQURJTkdfT1VULHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dC5zdGF0ZT1QLkhJRERFTixuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9LGkuZXhpdER1cmF0aW9uKX19LHQucHJvdG90eXBlLmZhZGVPdXRBbGw9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVSaXBwbGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmFkZU91dCgpfSl9LHQucHJvdG90eXBlLnNldHVwVHJpZ2dlckV2ZW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQhPT10aGlzLl90cmlnZ2VyRWxlbWVudCYmKHRoaXMuX3JlbW92ZVRyaWdnZXJFdmVudHMoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl90cmlnZ2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24obixpKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGksbixlLl9ldmVudE9wdGlvbnMpfSl9KSx0aGlzLl90cmlnZ2VyRWxlbWVudD10KX0sdC5wcm90b3R5cGUucnVuVGltZW91dE91dHNpZGVab25lPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQodCxlKX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlVHJpZ2dlckV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdHJpZ2dlckVsZW1lbnQmJnRoaXMuX3RyaWdnZXJFdmVudHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3QuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixlLHQuX2V2ZW50T3B0aW9ucyl9KX0sdH0oKSxGPW5ldyBpLnEoIm1hdC1yaXBwbGUtZ2xvYmFsLW9wdGlvbnMiKSxWPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIpe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLnJhZGl1cz0wLHRoaXMuc3BlZWRGYWN0b3I9MSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX2dsb2JhbE9wdGlvbnM9aXx8e30sdGhpcy5fcmlwcGxlUmVuZGVyZXI9bmV3IEwodGhpcyxlLHQsbiksIk5vb3BBbmltYXRpb25zIj09PXImJih0aGlzLl9nbG9iYWxPcHRpb25zLmFuaW1hdGlvbj17ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidHJpZ2dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmlnZ2VyfHx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9LHQucHJvdG90eXBlLmZhZGVPdXRBbGw9ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmlwcGxlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOk9iamVjdChyLmEpKHt9LHRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uLHRoaXMuYW5pbWF0aW9uKSx0ZXJtaW5hdGVPblBvaW50ZXJVcDp0aGlzLl9nbG9iYWxPcHRpb25zLnRlcm1pbmF0ZU9uUG9pbnRlclVwLHNwZWVkRmFjdG9yOnRoaXMuc3BlZWRGYWN0b3IqKHRoaXMuX2dsb2JhbE9wdGlvbnMuYmFzZVNwZWVkRmFjdG9yfHwxKX19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyaXBwbGVEaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZD1mdW5jdGlvbigpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX0sdC5wcm90b3R5cGUubGF1bmNoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSh0LGUsT2JqZWN0KHIuYSkoe30sdGhpcy5yaXBwbGVDb25maWcsbikpOnRoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSgwLDAsT2JqZWN0KHIuYSkoe30sdGhpcy5yaXBwbGVDb25maWcsdCkpfSx0fSgpLHo9ZnVuY3Rpb24oKXt9LEI9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uTW9kZT10LHRoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMX0sVT1mdW5jdGlvbigpe30sSD0wLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fbGFiZWxJZD0ibWF0LW9wdGdyb3VwLWxhYmVsLSIrSCsrLGV9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oaChmdW5jdGlvbigpe30pKSxRPTAsRz1uZXcgaS5xKCJNQVRfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQiKSxaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9wYXJlbnQ9bix0aGlzLmdyb3VwPXIsdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2lkPSJtYXQtb3B0aW9uLSIrUSsrLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgaS5uLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgYS5hfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm11bHRpcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3RlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAmJnRoaXMuZ3JvdXAuZGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KG8uYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlUmlwcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmlld1ZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuX2dldEhvc3RFbGVtZW50KCkudGV4dENvbnRlbnR8fCIiKS50cmltKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKSl9LHQucHJvdG90eXBlLmRlc2VsZWN0PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKSl9LHQucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpfSx0LnByb3RvdHlwZS5zZXRBY3RpdmVTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSx0LnByb3RvdHlwZS5zZXRJbmFjdGl2ZVN0eWxlcz1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZSYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LHQucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfSx0LnByb3RvdHlwZS5faGFuZGxlS2V5ZG93bj1mdW5jdGlvbih0KXt0LmtleUNvZGUhPT1sLmYmJnQua2V5Q29kZSE9PWwubHx8KHRoaXMuX3NlbGVjdFZpYUludGVyYWN0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKX0sdC5wcm90b3R5cGUuX3NlbGVjdFZpYUludGVyYWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9LHQucHJvdG90eXBlLl9nZXRUYWJJbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifSx0LnByb3RvdHlwZS5fZ2V0SG9zdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fSx0LnByb3RvdHlwZS5uZ0FmdGVyVmlld0NoZWNrZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9zZWxlY3RlZCl7dmFyIHQ9dGhpcy52aWV3VmFsdWU7dCE9PXRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWUmJih0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPXQsdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSl9fSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV3IGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITEpLHRoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfSh0aGlzLHQpKX0sdH0oKSxXPWZ1bmN0aW9uKCl7fSxZPW5ldyBpLnEoIm1hdC1sYWJlbC1nbG9iYWwtb3B0aW9ucyIpfSxYbFB3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT1uKCI2YmxGIik7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBuZXcgaS5hKGU/ZnVuY3Rpb24obil7cmV0dXJuIGUuc2NoZWR1bGUobywwLHtlcnJvcjp0LHN1YnNjcmliZXI6bn0pfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfWZ1bmN0aW9uIG8odCl7dC5zdWJzY3JpYmVyLmVycm9yKHQuZXJyb3IpfX0sWVNoMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiB2fSk7dmFyIGk9OCxyPTksbz0xMyxhPTI3LHM9MzIsbD0zNSx1PTM2LGM9MzcsZj0zOCxkPTM5LGg9NDAscD00NixtPTQ4LGI9NTcseT02NSx2PTkwfSxZaGJPOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigibjZnRyIpLG89bigiSzlJYSIpLGE9bigicHVnVCIpLHM9MCxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX29wZW5DbG9zZUFsbEFjdGlvbnM9bmV3IG8uYSx0aGlzLmlkPSJjZGstYWNjb3JkaW9uLSIrcysrLHRoaXMuX211bHRpPSExfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm11bHRpIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbXVsdGk9T2JqZWN0KHIuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUub3BlbkFsbD1mdW5jdGlvbigpe3RoaXMuX29wZW5DbG9zZUFsbCghMCl9LHQucHJvdG90eXBlLmNsb3NlQWxsPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbkNsb3NlQWxsKCExKX0sdC5wcm90b3R5cGUuX29wZW5DbG9zZUFsbD1mdW5jdGlvbih0KXt0aGlzLm11bHRpJiZ0aGlzLl9vcGVuQ2xvc2VBbGxBY3Rpb25zLm5leHQodCl9LHR9KCksdT0wLGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYWNjb3JkaW9uPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyPW4sdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPWEuYS5FTVBUWSx0aGlzLmNsb3NlZD1uZXcgaS5uLHRoaXMub3BlbmVkPW5ldyBpLm4sdGhpcy5kZXN0cm95ZWQ9bmV3IGkubix0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBpLm4sdGhpcy5pZD0iY2RrLWFjY29yZGlvbi1jaGlsZC0iK3UrKyx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1mdW5jdGlvbigpe30sdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXI9bi5saXN0ZW4oZnVuY3Rpb24odCxlKXtyLmFjY29yZGlvbiYmIXIuYWNjb3JkaW9uLm11bHRpJiZyLmFjY29yZGlvbi5pZD09PWUmJnIuaWQhPT10JiYoci5leHBhbmRlZD0hMSl9KSx0aGlzLmFjY29yZGlvbiYmKHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbj10aGlzLl9zdWJzY3JpYmVUb09wZW5DbG9zZUFsbEFjdGlvbnMoKSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXhwYW5kZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9LHNldDpmdW5jdGlvbih0KXt0PU9iamVjdChyLmMpKHQpLHRoaXMuX2V4cGFuZGVkIT09dCYmKHRoaXMuX2V4cGFuZGVkPXQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHQpLHQ/KHRoaXMub3BlbmVkLmVtaXQoKSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyLm5vdGlmeSh0aGlzLmlkLHRoaXMuYWNjb3JkaW9uP3RoaXMuYWNjb3JkaW9uLmlkOnRoaXMuaWQpKTp0aGlzLmNsb3NlZC5lbWl0KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1PYmplY3Qoci5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMub3BlbmVkLmNvbXBsZXRlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKSx0aGlzLmRlc3Ryb3llZC5lbWl0KCksdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcigpLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITEpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITApfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlVG9PcGVuQ2xvc2VBbGxBY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5hY2NvcmRpb24uX29wZW5DbG9zZUFsbEFjdGlvbnMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuZGlzYWJsZWR8fCh0LmV4cGFuZGVkPWUpfSl9LHR9KCksZj1mdW5jdGlvbigpe319LFlsYlE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuKCJtclNHIiksbigiNmJsRiIpLG4oIkYvWEwiKTt2YXIgaT1uKCJLOUlhIikscj1uKCJDY25HIiksbz1mdW5jdGlvbigpe30sYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1uJiYobj0hMCk7dmFyIHI9dGhpczt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPW4sdGhpcy5fc2VsZWN0aW9uPW5ldyBTZXQsdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSx0aGlzLm9uQ2hhbmdlPXRoaXMuX2VtaXRDaGFuZ2VzP25ldyBpLmE6bnVsbCxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByLl9tYXJrU2VsZWN0ZWQodCl9KTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudChlKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21hcmtTZWxlY3RlZChlKX0pLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KGUpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KT90aGlzLmRlc2VsZWN0KHQpOnRoaXMuc2VsZWN0KHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX3VubWFya0FsbCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5pc1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfSx0LnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9zZWxlY3Rpb24uc2l6ZX0sdC5wcm90b3R5cGUuaGFzVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9LHQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJnRoaXMuX3NlbGVjdGVkLnNvcnQodCl9LHQucHJvdG90eXBlLmlzTXVsdGlwbGVTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9LHQucHJvdG90eXBlLl9lbWl0Q2hhbmdlRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMub25DaGFuZ2UmJnRoaXMub25DaGFuZ2UubmV4dCh7c291cmNlOnRoaXMsYWRkZWQ6dGhpcy5fc2VsZWN0ZWRUb0VtaXQscmVtb3ZlZDp0aGlzLl9kZXNlbGVjdGVkVG9FbWl0fSksdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSl9LHQucHJvdG90eXBlLl9tYXJrU2VsZWN0ZWQ9ZnVuY3Rpb24odCl7dGhpcy5pc1NlbGVjdGVkKHQpfHwodGhpcy5fbXVsdGlwbGV8fHRoaXMuX3VubWFya0FsbCgpLHRoaXMuX3NlbGVjdGlvbi5hZGQodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX3NlbGVjdGVkVG9FbWl0LnB1c2godCkpfSx0LnByb3RvdHlwZS5fdW5tYXJrU2VsZWN0ZWQ9ZnVuY3Rpb24odCl7dGhpcy5pc1NlbGVjdGVkKHQpJiYodGhpcy5fc2VsZWN0aW9uLmRlbGV0ZSh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX0sdC5wcm90b3R5cGUuX3VubWFya0FsbD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5pc0VtcHR5KCl8fHRoaXMuX3NlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll91bm1hcmtTZWxlY3RlZChlKX0pfSx0LnByb3RvdHlwZS5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPjEmJiF0aGlzLl9tdWx0aXBsZSl0aHJvdyBFcnJvcigiQ2Fubm90IHBhc3MgbXVsdGlwbGUgdmFsdWVzIGludG8gU2VsZWN0aW9uTW9kZWwgd2l0aCBzaW5nbGUtdmFsdWUgbW9kZS4iKX0sdH0oKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2xpc3RlbmVycz1bXX1yZXR1cm4gdC5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAsaT10aGlzLl9saXN0ZW5lcnM7bjxpLmxlbmd0aDtuKyspKDAsaVtuXSkodCxlKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2xpc3RlbmVycy5wdXNoKHQpLGZ1bmN0aW9uKCl7ZS5fbGlzdGVuZXJzPWUuX2xpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQhPT1lfSl9fSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2xpc3RlbmVycz1bXX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpfSxaWUNpOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigibXJTRyIpLHI9bigiQ2NuRyIpLG89bigiNmJsRiIpLGE9bigiSzlJYSIpLHM9bigiMjZGVSIpLGw9bigiMC91USIpLHU9bigiRi9YTCIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSIpfHx0aGlzO3JldHVybiBuLm5hbWU9IkVtcHR5RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiBpLmIoZSx0KSxlfShFcnJvciksZj1uKCJwc1cwIiksZD1uKCI2N1kvIiksaD1uKCJWbkQvIikscD1uKCJ0OWZaIiksbT1uKCJGRk9vIik7ZnVuY3Rpb24gYih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksZnVuY3Rpb24oZSl7cmV0dXJuIGUubGlmdChuZXcgeSh0KSl9fXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlZmF1bHRWYWx1ZT10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB2KHQsdGhpcy5kZWZhdWx0VmFsdWUpKX0sdH0oKSx2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5kZWZhdWx0VmFsdWU9bixpLmlzRW1wdHk9ITAsaX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc0VtcHR5PSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5pc0VtcHR5JiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5kZWZhdWx0VmFsdWUpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0obS5hKSxnPW4oInhNeUUiKSxfPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD13KSxPYmplY3QoZy5hKSh7aGFzVmFsdWU6ITEsbmV4dDpmdW5jdGlvbigpe3RoaXMuaGFzVmFsdWU9ITB9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzVmFsdWUpdGhyb3cgdCgpfX0pfTtmdW5jdGlvbiB3KCl7cmV0dXJuIG5ldyBjfXZhciB4PW4oIm1DaEYiKTtmdW5jdGlvbiBDKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGkucGlwZSh0P09iamVjdChoLmEpKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLGkpfSk6eC5hLE9iamVjdChwLmEpKDEpLG4/YihlKTpfKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSkpfX1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IE8odCxlLG4pKX19dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lLHRoaXMuc291cmNlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEUodCx0aGlzLnByZWRpY2F0ZSx0aGlzLnRoaXNBcmcsdGhpcy5zb3VyY2UpKX0sdH0oKSxFPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ucHJlZGljYXRlPW4sby50aGlzQXJnPWksby5zb3VyY2U9cixvLmluZGV4PTAsby50aGlzQXJnPWl8fG8sb31yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9ITE7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmluZGV4KyssdGhpcy5zb3VyY2UpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZXx8dGhpcy5ub3RpZnlDb21wbGV0ZSghMSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMubm90aWZ5Q29tcGxldGUoITApfSxlfShtLmEpLGs9bigiUGhqbiIpO2Z1bmN0aW9uIGoodCxlKXt2YXIgbj0hMTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MiYmKG49ITApLGZ1bmN0aW9uKGkpe3JldHVybiBpLmxpZnQobmV3IEkodCxlLG4pKX19dmFyIEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSksdGhpcy5hY2N1bXVsYXRvcj10LHRoaXMuc2VlZD1lLHRoaXMuaGFzU2VlZD1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBUKHQsdGhpcy5hY2N1bXVsYXRvcix0aGlzLnNlZWQsdGhpcy5oYXNTZWVkKSl9LHR9KCksVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLmFjY3VtdWxhdG9yPW4sby5fc2VlZD1pLG8uaGFzU2VlZD1yLG8uaW5kZXg9MCxvfXJldHVybiBpLmIoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaGFzU2VlZD0hMCx0aGlzLl9zZWVkPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXNTZWVkKXJldHVybiB0aGlzLl90cnlOZXh0KHQpO3RoaXMuc2VlZD10LHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5hY2N1bXVsYXRvcih0aGlzLnNlZWQsdCxuKX1jYXRjaCh0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuc2VlZD1lLHRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0obS5hKSxSPW4oIkF4aUYiKSxBPW4oInkzQnkiKSxQPW4oIjlaMUYiKSxEPW4oIlR4amciKTtmdW5jdGlvbiBNKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGkucGlwZSh0P09iamVjdChoLmEpKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLGkpfSk6eC5hLE9iamVjdChSLmEpKDEpLG4/YihlKTpfKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSkpfX12YXIgTj1uKCJabjhEIiksTD1uKCJJcDBSIiksRj1uKCJaWWp0Iik7bi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJufSksbi5kKGUsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIHBufSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGxufSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJufSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIHVufSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIGhufSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGFufSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIGRufSksbi5kKGUsIkQiLGZ1bmN0aW9uKCl7cmV0dXJuIGVufSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFFlfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIFllfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gUGV9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gVWV9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gTWV9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gbm59KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4geW59KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gc259KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gV2V9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gSmV9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gJGV9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gWGV9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gdG59KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV9KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gTGV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gT3R9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gU3R9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gbnR9KTt2YXIgVj1mdW5jdGlvbih0LGUpe3RoaXMuaWQ9dCx0aGlzLnVybD1lfSx6PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dm9pZCAwPT09aSYmKGk9ImltcGVyYXRpdmUiKSx2b2lkIDA9PT1yJiYocj1udWxsKTt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLm5hdmlnYXRpb25UcmlnZ2VyPWksby5yZXN0b3JlZFN0YXRlPXIsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uU3RhcnQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KFYpLEI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci51cmxBZnRlclJlZGlyZWN0cz1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInKSJ9LGV9KFYpLFU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5yZWFzb249aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25DYW5jZWwoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KFYpLEg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5lcnJvcj1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVycm9yKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgZXJyb3I6ICIrdGhpcy5lcnJvcisiKSJ9LGV9KFYpLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPWksby5zdGF0ZT1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVzUmVjb2duaXplZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oViksUT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9aSxvLnN0YXRlPXIsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja1N0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShWKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscixvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBhLnVybEFmdGVyUmVkaXJlY3RzPWksYS5zdGF0ZT1yLGEuc2hvdWxkQWN0aXZhdGU9byxhfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkd1YXJkc0NoZWNrRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIiwgc2hvdWxkQWN0aXZhdGU6ICIrdGhpcy5zaG91bGRBY3RpdmF0ZSsiKSJ9LGV9KFYpLFo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPWksby5zdGF0ZT1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmVzb2x2ZVN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShWKSxXPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1pLG8uc3RhdGU9cixvfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVFbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KFYpLFk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucm91dGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVDb25maWdMb2FkU3RhcnQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucm91dGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICIrdGhpcy5yb3V0ZS5wYXRoKyIpIn0sdH0oKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLCQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2hpbGRBY3RpdmF0aW9uRW5kKHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFjdGl2YXRpb25FbmQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvdXRlckV2ZW50PXQsdGhpcy5wb3NpdGlvbj1lLHRoaXMuYW5jaG9yPW59cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNjcm9sbChhbmNob3I6ICciK3RoaXMuYW5jaG9yKyInLCBwb3NpdGlvbjogJyIrKHRoaXMucG9zaXRpb24/dGhpcy5wb3NpdGlvblswXSsiLCAiK3RoaXMucG9zaXRpb25bMV06bnVsbCkrIicpIn0sdH0oKSxudD1mdW5jdGlvbigpe30saXQ9InByaW1hcnkiLHJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBhcmFtcz10fHx7fX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhcmFtcy5oYXNPd25Qcm9wZXJ0eSh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzKHQpKXt2YXIgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lWzBdOmV9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpbZV19cmV0dXJuW119LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2V5cyIse2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiBvdCh0KXtyZXR1cm4gbmV3IHJ0KHQpfWZ1bmN0aW9uIGF0KHQsZSxuKXt2YXIgaT1uLnBhdGguc3BsaXQoIi8iKTtpZihpLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiZnVsbCI9PT1uLnBhdGhNYXRjaCYmKGUuaGFzQ2hpbGRyZW4oKXx8aS5sZW5ndGg8dC5sZW5ndGgpKXJldHVybiBudWxsO2Zvcih2YXIgcj17fSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPWlbb10scz10W29dO2lmKGEuc3RhcnRzV2l0aCgiOiIpKXJbYS5zdWJzdHJpbmcoMSldPXM7ZWxzZSBpZihhIT09cy5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDp0LnNsaWNlKDAsaS5sZW5ndGgpLHBvc1BhcmFtczpyfX12YXIgc3Q9ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlcz10LHRoaXMubW9kdWxlPWV9O2Z1bmN0aW9uIGx0KHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO3V0KGksY3QoZSxpKSl9fWZ1bmN0aW9uIHV0KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgIEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBFbmNvdW50ZXJlZCB1bmRlZmluZWQgcm91dGUuXG4gICAgICBUaGUgcmVhc29uIG1pZ2h0IGJlIGFuIGV4dHJhIGNvbW1hLlxuXG4gICAgICBFeGFtcGxlOlxuICAgICAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gICAgICAgIHsgcGF0aDogJycsIHJlZGlyZWN0VG86ICcvZGFzaGJvYXJkJywgcGF0aE1hdGNoOiAnZnVsbCcgfSxcbiAgICAgICAgeyBwYXRoOiAnZGFzaGJvYXJkJywgIGNvbXBvbmVudDogRGFzaGJvYXJkQ29tcG9uZW50IH0sLCA8PCB0d28gY29tbWFzXG4gICAgICAgIHsgcGF0aDogJ2RldGFpbC86aWQnLCBjb21wb25lbnQ6IEhlcm9EZXRhaWxDb21wb25lbnQgfVxuICAgICAgXTtcbiAgICAiKTtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IEFycmF5IGNhbm5vdCBiZSBzcGVjaWZpZWQiKTtpZighdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4mJnQub3V0bGV0JiZ0Lm91dGxldCE9PWl0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGEgY29tcG9uZW50bGVzcyByb3V0ZSB3aXRob3V0IGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiBjYW5ub3QgaGF2ZSBhIG5hbWVkIG91dGxldCBzZXQiKTtpZih0LnJlZGlyZWN0VG8mJnQuY2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgY2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQuY2hpbGRyZW4mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGNoaWxkcmVuIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQuY29tcG9uZW50KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNvbXBvbmVudCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucGF0aCYmdC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggYW5kIG1hdGNoZXIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih2b2lkIDA9PT10LnJlZGlyZWN0VG8mJiF0LmNvbXBvbmVudCYmIXQuY2hpbGRyZW4mJiF0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInLiBPbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHByb3ZpZGVkOiBjb21wb25lbnQsIHJlZGlyZWN0VG8sIGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiIpO2lmKHZvaWQgMD09PXQucGF0aCYmdm9pZCAwPT09dC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJvdXRlcyBtdXN0IGhhdmUgZWl0aGVyIGEgcGF0aCBvciBhIG1hdGNoZXIgc3BlY2lmaWVkIik7aWYoInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiIvIj09PXQucGF0aC5jaGFyQXQoMCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aCBjYW5ub3Qgc3RhcnQgd2l0aCBhIHNsYXNoIik7aWYoIiI9PT10LnBhdGgmJnZvaWQgMCE9PXQucmVkaXJlY3RUbyYmdm9pZCAwPT09dC5wYXRoTWF0Y2gpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJ3twYXRoOiBcIiIrZSsnIiwgcmVkaXJlY3RUbzogIicrdC5yZWRpcmVjdFRvKyJcIn0nOiBwbGVhc2UgcHJvdmlkZSAncGF0aE1hdGNoJy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgJ3BhdGhNYXRjaCcgaXMgJ3ByZWZpeCcsIGJ1dCBvZnRlbiB0aGUgaW50ZW50IGlzIHRvIHVzZSAnZnVsbCcuIik7aWYodm9pZCAwIT09dC5wYXRoTWF0Y2gmJiJmdWxsIiE9PXQucGF0aE1hdGNoJiYicHJlZml4IiE9PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGhNYXRjaCBjYW4gb25seSBiZSBzZXQgdG8gJ3ByZWZpeCcgb3IgJ2Z1bGwnIik7dC5jaGlsZHJlbiYmbHQodC5jaGlsZHJlbixlKX1mdW5jdGlvbiBjdCh0LGUpe3JldHVybiBlP3R8fGUucGF0aD90JiYhZS5wYXRoP3QrIi8iOiF0JiZlLnBhdGg/ZS5wYXRoOnQrIi8iK2UucGF0aDoiIjp0fWZ1bmN0aW9uIGZ0KHQpe3ZhciBlPXQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubWFwKGZ0KSxuPWU/T2JqZWN0KGkuYSkoe30sdCx7Y2hpbGRyZW46ZX0pOk9iamVjdChpLmEpKHt9LHQpO3JldHVybiFuLmNvbXBvbmVudCYmKGV8fG4ubG9hZENoaWxkcmVuKSYmbi5vdXRsZXQmJm4ub3V0bGV0IT09aXQmJihuLmNvbXBvbmVudD1udCksbn1mdW5jdGlvbiBkdCh0LGUpe3ZhciBuLGk9T2JqZWN0LmtleXModCkscj1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aCE9ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYodFtuPWlbb11dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBodCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX1mdW5jdGlvbiBwdCh0KXtyZXR1cm4gdC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gbXQodCxlKXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZlKHRbbl0sbil9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIHQucGlwZShPYmplY3QoTi5hKSgpLFMoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfWZ1bmN0aW9uIHl0KHQpe3JldHVybiBPYmplY3Qoci5WYSkodCk/dDpPYmplY3Qoci5XYSkodCk/T2JqZWN0KGwuYSkoUHJvbWlzZS5yZXNvbHZlKHQpKTpPYmplY3QodS5hKSh0KX1mdW5jdGlvbiB2dCh0LGUsbil7cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZHQodCxlKX0odC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKSYmZnVuY3Rpb24gdChlLG4pe2lmKCF4dChlLnNlZ21lbnRzLG4uc2VnbWVudHMpKXJldHVybiExO2lmKGUubnVtYmVyT2ZDaGlsZHJlbiE9PW4ubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IodmFyIGkgaW4gbi5jaGlsZHJlbil7aWYoIWUuY2hpbGRyZW5baV0pcmV0dXJuITE7aWYoIXQoZS5jaGlsZHJlbltpXSxuLmNoaWxkcmVuW2ldKSlyZXR1cm4hMX1yZXR1cm4hMH0odC5yb290LGUucm9vdCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RoPD1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJk9iamVjdC5rZXlzKGUpLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBlW25dPT09dFtuXX0pfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7cmV0dXJuIGZ1bmN0aW9uIGUobixpLHIpe2lmKG4uc2VnbWVudHMubGVuZ3RoPnIubGVuZ3RoKXJldHVybiEheHQoYT1uLnNlZ21lbnRzLnNsaWNlKDAsci5sZW5ndGgpLHIpJiYhaS5oYXNDaGlsZHJlbigpO2lmKG4uc2VnbWVudHMubGVuZ3RoPT09ci5sZW5ndGgpe2lmKCF4dChuLnNlZ21lbnRzLHIpKXJldHVybiExO2Zvcih2YXIgbyBpbiBpLmNoaWxkcmVuKXtpZighbi5jaGlsZHJlbltvXSlyZXR1cm4hMTtpZighdChuLmNoaWxkcmVuW29dLGkuY2hpbGRyZW5bb10pKXJldHVybiExfXJldHVybiEwfXZhciBhPXIuc2xpY2UoMCxuLnNlZ21lbnRzLmxlbmd0aCkscz1yLnNsaWNlKG4uc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIXh0KG4uc2VnbWVudHMsYSkmJiEhbi5jaGlsZHJlbltpdF0mJmUobi5jaGlsZHJlbltpdF0saSxzKX0oZSxuLG4uc2VnbWVudHMpfSh0LnJvb3QsZS5yb290KX12YXIgZ3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvb3Q9dCx0aGlzLnF1ZXJ5UGFyYW1zPWUsdGhpcy5mcmFnbWVudD1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9b3QodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gRXQuc2VyaWFsaXplKHRoaXMpfSx0fSgpLF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5zZWdtZW50cz10LHRoaXMuY2hpbGRyZW49ZSx0aGlzLnBhcmVudD1udWxsLG10KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wYXJlbnQ9bn0pfXJldHVybiB0LnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJudW1iZXJPZkNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBrdCh0aGlzKX0sdH0oKSx3dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnBhcmFtZXRlcnM9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbWV0ZXJNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwfHwodGhpcy5fcGFyYW1ldGVyTWFwPW90KHRoaXMucGFyYW1ldGVycykpLHRoaXMuX3BhcmFtZXRlck1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBQdCh0aGlzKX0sdH0oKTtmdW5jdGlvbiB4dCh0LGUpe3JldHVybiB0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQucGF0aD09PWVbbl0ucGF0aH0pfWZ1bmN0aW9uIEN0KHQsZSl7dmFyIG49W107cmV0dXJuIG10KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxpKXtpPT09aXQmJihuPW4uY29uY2F0KGUodCxpKSkpfSksbXQodC5jaGlsZHJlbixmdW5jdGlvbih0LGkpe2khPT1pdCYmKG49bi5jb25jYXQoZSh0LGkpKSl9KSxufXZhciBTdD1mdW5jdGlvbigpe30sT3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRnQodCk7cmV0dXJuIG5ldyBndChlLnBhcnNlUm9vdFNlZ21lbnQoKSxlLnBhcnNlUXVlcnlQYXJhbXMoKSxlLnBhcnNlRnJhZ21lbnQoKSl9LHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZSxuO3JldHVybiIvIitmdW5jdGlvbiB0KGUsbil7aWYoIWUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4ga3QoZSk7aWYobil7dmFyIGk9ZS5jaGlsZHJlbltpdF0/dChlLmNoaWxkcmVuW2l0XSwhMSk6IiIscj1bXTtyZXR1cm4gbXQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG4pe24hPT1pdCYmci5wdXNoKG4rIjoiK3QoZSwhMSkpfSksci5sZW5ndGg+MD9pKyIoIityLmpvaW4oIi8vIikrIikiOml9dmFyIG89Q3QoZSxmdW5jdGlvbihuLGkpe3JldHVybiBpPT09aXQ/W3QoZS5jaGlsZHJlbltpdF0sITEpXTpbaSsiOiIrdChuLCExKV19KTtyZXR1cm4ga3QoZSkrIi8oIitvLmpvaW4oIi8vIikrIikifSh0LnJvb3QsITApKyhlPXQucXVlcnlQYXJhbXMsKG49T2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEl0KHQpKyI9IitJdChlKX0pLmpvaW4oIiYiKTpJdCh0KSsiPSIrSXQobil9KSkubGVuZ3RoPyI/IituLmpvaW4oIiYiKToiIikrKCJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudD8iIyIrZW5jb2RlVVJJKHQuZnJhZ21lbnQpOiIiKX0sdH0oKSxFdD1uZXcgT3Q7ZnVuY3Rpb24ga3QodCl7cmV0dXJuIHQuc2VnbWVudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBQdCh0KX0pLmpvaW4oIi8iKX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4ganQodCkucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gVHQodCl7cmV0dXJuIGp0KHQpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1bmN0aW9uIFJ0KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gQXQodCl7cmV0dXJuIFJ0KHQucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIFB0KHQpe3JldHVybiIiK1R0KHQucGF0aCkrKGU9dC5wYXJhbWV0ZXJzLE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iOyIrVHQodCkrIj0iK1R0KGVbdF0pfSkuam9pbigiIikpO3ZhciBlfXZhciBEdD0vXlteXC8oKT87PSNdKy87ZnVuY3Rpb24gTXQodCl7dmFyIGU9dC5tYXRjaChEdCk7cmV0dXJuIGU/ZVswXToiIn12YXIgTnQ9L15bXj0/JiNdKy8sTHQ9L15bXj8mI10rLyxGdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy51cmw9dCx0aGlzLnJlbWFpbmluZz10fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZVJvb3RTZWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IF90KFtdLHt9KTpuZXcgX3QoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbSh0KX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH0sdC5wcm90b3R5cGUucGFyc2VDaGlsZHJlbj1mdW5jdGlvbigpe2lmKCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTt2YXIgdD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt2YXIgZT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksZT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7dmFyIG49e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKG49dGhpcy5wYXJzZVBhcmVucyghMSkpLCh0Lmxlbmd0aD4wfHxPYmplY3Qua2V5cyhlKS5sZW5ndGg+MCkmJihuW2l0XT1uZXcgX3QodCxlKSksbn0sdC5wcm90b3R5cGUucGFyc2VTZWdtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9TXQodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09dCYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBFcnJvcigiRW1wdHkgcGF0aCB1cmwgc2VnbWVudCBjYW5ub3QgaGF2ZSBwYXJhbWV0ZXJzOiAnIit0aGlzLnJlbWFpbmluZysiJy4iKTtyZXR1cm4gdGhpcy5jYXB0dXJlKHQpLG5ldyB3dChSdCh0KSx0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCkpfSx0LnByb3RvdHlwZS5wYXJzZU1hdHJpeFBhcmFtcz1mdW5jdGlvbigpe2Zvcih2YXIgdD17fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0odCk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnBhcnNlUGFyYW09ZnVuY3Rpb24odCl7dmFyIGU9TXQodGhpcy5yZW1haW5pbmcpO2lmKGUpe3RoaXMuY2FwdHVyZShlKTt2YXIgbj0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXt2YXIgaT1NdCh0aGlzLnJlbWFpbmluZyk7aSYmdGhpcy5jYXB0dXJlKG49aSl9dFtSdChlKV09UnQobil9fSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW09ZnVuY3Rpb24odCl7dmFyIGUsbj0oZT10aGlzLnJlbWFpbmluZy5tYXRjaChOdCkpP2VbMF06IiI7aWYobil7dGhpcy5jYXB0dXJlKG4pO3ZhciBpPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goTHQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtyJiZ0aGlzLmNhcHR1cmUoaT1yKX12YXIgbz1BdChuKSxhPUF0KGkpO2lmKHQuaGFzT3duUHJvcGVydHkobykpe3ZhciBzPXRbb107QXJyYXkuaXNBcnJheShzKXx8KHRbb109cz1bc10pLHMucHVzaChhKX1lbHNlIHRbb109YX19LHQucHJvdG90eXBlLnBhcnNlUGFyZW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXt2YXIgbj1NdCh0aGlzLnJlbWFpbmluZyksaT10aGlzLnJlbWFpbmluZ1tuLmxlbmd0aF07aWYoIi8iIT09aSYmIikiIT09aSYmIjsiIT09aSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSB1cmwgJyIrdGhpcy51cmwrIiciKTt2YXIgcj12b2lkIDA7bi5pbmRleE9mKCI6Iik+LTE/KHI9bi5zdWJzdHIoMCxuLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKHIpLHRoaXMuY2FwdHVyZSgiOiIpKTp0JiYocj1pdCk7dmFyIG89dGhpcy5wYXJzZUNoaWxkcmVuKCk7ZVtyXT0xPT09T2JqZWN0LmtleXMobykubGVuZ3RoP29baXRdOm5ldyBfdChbXSxvKSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucGVla1N0YXJ0c1dpdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgodCl9LHQucHJvdG90eXBlLmNvbnN1bWVPcHRpb25hbD1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgodCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcodC5sZW5ndGgpLCEwKX0sdC5wcm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbih0KXtpZighdGhpcy5jb25zdW1lT3B0aW9uYWwodCkpdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAiJyt0KyciLicpfSx0fSgpLFZ0PWZ1bmN0aW9uKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9LHp0PWZ1bmN0aW9uKHQpe3RoaXMudXJsVHJlZT10fTtmdW5jdGlvbiBCdCh0KXtyZXR1cm4gbmV3IG8uYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgVnQodCkpfSl9ZnVuY3Rpb24gVXQodCl7cmV0dXJuIG5ldyBvLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IHp0KHQpKX0pfWZ1bmN0aW9uIEh0KHQpe3JldHVybiBuZXcgby5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBFcnJvcigiT25seSBhYnNvbHV0ZSByZWRpcmVjdHMgY2FuIGhhdmUgbmFtZWQgb3V0bGV0cy4gcmVkaXJlY3RUbzogJyIrdCsiJyIpKX0pfXZhciBxdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxvKXt0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMudXJsU2VyaWFsaXplcj1uLHRoaXMudXJsVHJlZT1pLHRoaXMuY29uZmlnPW8sdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLm5nTW9kdWxlPXQuZ2V0KHIueCl9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50R3JvdXAodGhpcy5uZ01vZHVsZSx0aGlzLmNvbmZpZyx0aGlzLnVybFRyZWUucm9vdCxpdCkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5jcmVhdGVVcmxUcmVlKGUsdC51cmxUcmVlLnF1ZXJ5UGFyYW1zLHQudXJsVHJlZS5mcmFnbWVudCl9KSkucGlwZShPYmplY3QoUC5hKShmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgenQpcmV0dXJuIHQuYWxsb3dSZWRpcmVjdHM9ITEsdC5tYXRjaChlLnVybFRyZWUpO2lmKGUgaW5zdGFuY2VvZiBWdCl0aHJvdyB0Lm5vTWF0Y2hFcnJvcihlKTt0aHJvdyBlfSkpfSx0LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHQucm9vdCxpdCkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5jcmVhdGVVcmxUcmVlKG4sdC5xdWVyeVBhcmFtcyx0LmZyYWdtZW50KX0pKS5waXBlKE9iamVjdChQLmEpKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBWdCl0aHJvdyBlLm5vTWF0Y2hFcnJvcih0KTt0aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub01hdGNoRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFcnJvcigiQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIFVSTCBTZWdtZW50OiAnIit0LnNlZ21lbnRHcm91cCsiJyIpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyPXQuc2VnbWVudHMubGVuZ3RoPjA/bmV3IF90KFtdLCgoaT17fSlbaXRdPXQsaSkpOnQ7cmV0dXJuIG5ldyBndChyLGUsbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gMD09PW4uc2VnbWVudHMubGVuZ3RoJiZuLmhhc0NoaWxkcmVuKCk/dGhpcy5leHBhbmRDaGlsZHJlbih0LGUsbikucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IF90KFtdLHQpfSkpOnRoaXMuZXhwYW5kU2VnbWVudCh0LG4sZSxuLnNlZ21lbnRzLGksITApfSx0LnByb3RvdHlwZS5leHBhbmRDaGlsZHJlbj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obixyKXtpZigwPT09T2JqZWN0LmtleXMobikubGVuZ3RoKXJldHVybiBPYmplY3QodS5hKSh7fSk7dmFyIG89W10sYT1bXSxzPXt9O3JldHVybiBtdChuLGZ1bmN0aW9uKG4scil7dmFyIGwsdSxjPShsPXIsdT1uLGkuZXhwYW5kU2VnbWVudEdyb3VwKHQsZSx1LGwpKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBzW3JdPXR9KSk7cj09PWl0P28ucHVzaChjKTphLnB1c2goYyl9KSx1LmEuYXBwbHkobnVsbCxvLmNvbmNhdChhKSkucGlwZShPYmplY3QoRC5hKSgpLE0oKSxPYmplY3QoZC5hKShmdW5jdGlvbigpe3JldHVybiBzfSkpfShuLmNoaWxkcmVuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudD1mdW5jdGlvbih0LGUsbixyLG8sYSl7dmFyIHM9dGhpcztyZXR1cm4gdS5hLmFwcGx5KHZvaWQgMCxPYmplY3QoaS5kKShuKSkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihpKXtyZXR1cm4gcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxuLGkscixvLGEpLnBpcGUoT2JqZWN0KFAuYSkoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFZ0KXJldHVybiBPYmplY3QodS5hKShudWxsKTt0aHJvdyB0fSkpfSksT2JqZWN0KEQuYSkoKSxDKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLE9iamVjdChQLmEpKGZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIGN8fCJFbXB0eUVycm9yIj09PXQubmFtZSl7aWYocy5ub0xlZnRvdmVyc0luVXJsKGUscixvKSlyZXR1cm4gT2JqZWN0KHUuYSkobmV3IF90KFtdLHt9KSk7dGhyb3cgbmV3IFZ0KGUpfXRocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEpe3JldHVybiBXdChpKSE9PW8/QnQoZSk6dm9pZCAwPT09aS5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxpLHIpOmEmJnRoaXMuYWxsb3dSZWRpcmVjdHM/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixpLHIsbyk6QnQoZSl9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm4iKioiPT09aS5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LG4saSxvKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixpLHIsbyl9LHQucHJvdG90eXBlLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcyxvPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLG4ucmVkaXJlY3RUbyx7fSk7cmV0dXJuIG4ucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/VXQobyk6dGhpcy5saW5lcmFsaXplU2VnbWVudHMobixvKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKG4pe3ZhciBvPW5ldyBfdChuLHt9KTtyZXR1cm4gci5leHBhbmRTZWdtZW50KHQsbyxlLG4saSwhMSl9KSl9LHQucHJvdG90eXBlLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGE9dGhpcyxzPVF0KGUsaSxyKSxsPXMuY29uc3VtZWRTZWdtZW50cyx1PXMubGFzdENoaWxkLGM9cy5wb3NpdGlvbmFsUGFyYW1TZWdtZW50cztpZighcy5tYXRjaGVkKXJldHVybiBCdChlKTt2YXIgZD10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhsLGkucmVkaXJlY3RUbyxjKTtyZXR1cm4gaS5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9VdChkKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhpLGQpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oaSl7cmV0dXJuIGEuZXhwYW5kU2VnbWVudCh0LGUsbixpLmNvbmNhdChyLnNsaWNlKHUpKSxvLCExKX0pKX0sdC5wcm90b3R5cGUubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXM7aWYoIioqIj09PW4ucGF0aClyZXR1cm4gbi5sb2FkQ2hpbGRyZW4/dGhpcy5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLG4pLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRlZENvbmZpZz10LG5ldyBfdChyLHt9KX0pKTpPYmplY3QodS5hKShuZXcgX3Qocix7fSkpO3ZhciBhPVF0KGUsbixyKSxzPWEuY29uc3VtZWRTZWdtZW50cyxsPWEubGFzdENoaWxkO2lmKCFhLm1hdGNoZWQpcmV0dXJuIEJ0KGUpO3ZhciBjPXIuc2xpY2UobCk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb25maWcodCxuKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLHI9dC5yb3V0ZXMsYT1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFp0KHQsZSxuKSYmV3QobikhPT1pdH0pfSh0LG4pP3tzZWdtZW50R3JvdXA6R3QobmV3IF90KGUsZnVuY3Rpb24odCxlKXt2YXIgbixyLG89e307b1tpdF09ZTt0cnl7Zm9yKHZhciBhPU9iamVjdChpLmUpKHQpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgbD1zLnZhbHVlOyIiPT09bC5wYXRoJiZXdChsKSE9PWl0JiYob1tXdChsKV09bmV3IF90KFtdLHt9KSl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gb30ocixuZXcgX3Qobix0LmNoaWxkcmVuKSkpKSxzbGljZWRTZWdtZW50czpbXX06MD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gWnQodCxlLG4pfSl9KHQsbik/e3NlZ21lbnRHcm91cDpHdChuZXcgX3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixyKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgbD1PYmplY3QoaS5lKShuKSx1PWwubmV4dCgpOyF1LmRvbmU7dT1sLm5leHQoKSl7dmFyIGM9dS52YWx1ZTtadCh0LGUsYykmJiFyW1d0KGMpXSYmKHNbV3QoYyldPW5ldyBfdChbXSx7fSkpfX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXt1JiYhdS5kb25lJiYoYT1sLnJldHVybikmJmEuY2FsbChsKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIE9iamVjdChpLmEpKHt9LHIscyl9KHQsbixyLHQuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6bn06e3NlZ21lbnRHcm91cDp0LHNsaWNlZFNlZ21lbnRzOm59fShlLHMsYyxyKSxsPWEuc2VnbWVudEdyb3VwLGY9YS5zbGljZWRTZWdtZW50cztyZXR1cm4gMD09PWYubGVuZ3RoJiZsLmhhc0NoaWxkcmVuKCk/by5leHBhbmRDaGlsZHJlbihuLHIsbCkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IF90KHMsdCl9KSk6MD09PXIubGVuZ3RoJiYwPT09Zi5sZW5ndGg/T2JqZWN0KHUuYSkobmV3IF90KHMse30pKTpvLmV4cGFuZFNlZ21lbnQobixsLHIsZixpdCwhMCkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IF90KHMuY29uY2F0KHQuc2VnbWVudHMpLHQuY2hpbGRyZW4pfSkpfSkpfSx0LnByb3RvdHlwZS5nZXRDaGlsZENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGUuY2hpbGRyZW4/T2JqZWN0KHUuYSkobmV3IHN0KGUuY2hpbGRyZW4sdCkpOmUubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWUuX2xvYWRlZENvbmZpZz9PYmplY3QodS5hKShlLl9sb2FkZWRDb25maWcpOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jYW5Mb2FkO3JldHVybiBuJiYwIT09bi5sZW5ndGg/YnQoT2JqZWN0KGwuYSkobikucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihuKXt2YXIgaT10LmdldChuKTtyZXR1cm4geXQoaS5jYW5Mb2FkP2kuY2FuTG9hZChlKTppKGUpKX0pKSk6T2JqZWN0KHUuYSkoITApfSh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oaSl7cmV0dXJuIGk/bi5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IoKChuPUVycm9yKCJOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6IENhbm5vdCBsb2FkIGNoaWxkcmVuIGJlY2F1c2UgdGhlIGd1YXJkIG9mIHRoZSByb3V0ZSBcInBhdGg6ICciK3QucGF0aCsiJ1wiIHJldHVybmVkIGZhbHNlIikpLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yPSEwLG4pKTt2YXIgbn0pfShlKX0pKTpPYmplY3QodS5hKShuZXcgc3QoW10sdCkpfSx0LnByb3RvdHlwZS5saW5lcmFsaXplU2VnbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10saT1lLnJvb3Q7Oyl7aWYobj1uLmNvbmNhdChpLnNlZ21lbnRzKSwwPT09aS5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBPYmplY3QodS5hKShuKTtpZihpLm51bWJlck9mQ2hpbGRyZW4+MXx8IWkuY2hpbGRyZW5baXRdKXJldHVybiBIdCh0LnJlZGlyZWN0VG8pO2k9aS5jaGlsZHJlbltpdF19fSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q29tbWFuZHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmFwcGx5UmVkaXJlY3RDcmVhdHJlVXJsVHJlZShlLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlKSx0LG4pfSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAodCxlLnJvb3QsbixpKTtyZXR1cm4gbmV3IGd0KHIsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhlLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksZS5mcmFnbWVudCl9LHQucHJvdG90eXBlLmNyZWF0ZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIG10KHQsZnVuY3Rpb24odCxpKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQuc3RhcnRzV2l0aCgiOiIpKXt2YXIgcj10LnN1YnN0cmluZygxKTtuW2ldPWVbcl19ZWxzZSBuW2ldPXR9KSxufSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcyxvPXRoaXMuY3JlYXRlU2VnbWVudHModCxlLnNlZ21lbnRzLG4saSksYT17fTtyZXR1cm4gbXQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG8pe2Fbb109ci5jcmVhdGVTZWdtZW50R3JvdXAodCxlLG4saSl9KSxuZXcgX3QobyxhKX0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcztyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGF0aC5zdGFydHNXaXRoKCI6Iik/ci5maW5kUG9zUGFyYW0odCxlLGkpOnIuZmluZE9yUmV0dXJuKGUsbil9KX0sdC5wcm90b3R5cGUuZmluZFBvc1BhcmFtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uW2UucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZGlyZWN0IHRvICciK3QrIicuIENhbm5vdCBmaW5kICciK2UucGF0aCsiJy4iKTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuZmluZE9yUmV0dXJuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixvPTA7dHJ5e2Zvcih2YXIgYT1PYmplY3QoaS5lKShlKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIGw9cy52YWx1ZTtpZihsLnBhdGg9PT10LnBhdGgpcmV0dXJuIGUuc3BsaWNlKG8pLGw7bysrfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYocj1hLnJldHVybikmJnIuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gUXQodCxlLG4pe2lmKCIiPT09ZS5wYXRoKXJldHVybiJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKT97bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTt2YXIgaT0oZS5tYXRjaGVyfHxhdCkobix0LGUpO3JldHVybiBpP3ttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aS5jb25zdW1lZCxsYXN0Q2hpbGQ6aS5jb25zdW1lZC5sZW5ndGgscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aS5wb3NQYXJhbXN9OnttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319fWZ1bmN0aW9uIEd0KHQpe2lmKDE9PT10Lm51bWJlck9mQ2hpbGRyZW4mJnQuY2hpbGRyZW5baXRdKXt2YXIgZT10LmNoaWxkcmVuW2l0XTtyZXR1cm4gbmV3IF90KHQuc2VnbWVudHMuY29uY2F0KGUuc2VnbWVudHMpLGUuY2hpbGRyZW4pfXJldHVybiB0fWZ1bmN0aW9uIFp0KHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDAhPT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gV3QodCl7cmV0dXJuIHQub3V0bGV0fHxpdH12YXIgWXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Jvb3Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGF0aEZyb21Sb290KHQpO3JldHVybiBlLmxlbmd0aD4xP2VbZS5sZW5ndGgtMl06bnVsbH0sdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9S3QodCx0aGlzLl9yb290KTtyZXR1cm4gZT9lLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOltdfSx0LnByb3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPUt0KHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUmJmUuY2hpbGRyZW4ubGVuZ3RoPjA/ZS5jaGlsZHJlblswXS52YWx1ZTpudWxsfSx0LnByb3RvdHlwZS5zaWJsaW5ncz1mdW5jdGlvbih0KXt2YXIgZT1YdCh0LHRoaXMuX3Jvb3QpO3JldHVybiBlLmxlbmd0aDwyP1tdOmVbZS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfSx0LnByb3RvdHlwZS5wYXRoRnJvbVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFh0KHQsdGhpcy5fcm9vdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LHR9KCk7ZnVuY3Rpb24gS3QodCxlKXt2YXIgbixyO2lmKHQ9PT1lLnZhbHVlKXJldHVybiBlO3RyeXtmb3IodmFyIG89T2JqZWN0KGkuZSkoZS5jaGlsZHJlbiksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPUt0KHQsYS52YWx1ZSk7aWYocylyZXR1cm4gc319Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKHI9by5yZXR1cm4pJiZyLmNhbGwobyl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBudWxsfWZ1bmN0aW9uIFh0KHQsZSl7dmFyIG4scjtpZih0PT09ZS52YWx1ZSlyZXR1cm5bZV07dHJ5e2Zvcih2YXIgbz1PYmplY3QoaS5lKShlLmNoaWxkcmVuKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSl7dmFyIHM9WHQodCxhLnZhbHVlKTtpZihzLmxlbmd0aClyZXR1cm4gcy51bnNoaWZ0KGUpLHN9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihyPW8ucmV0dXJuKSYmci5jYWxsKG8pfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm5bXX12YXIgJHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuY2hpbGRyZW49ZX1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iVHJlZU5vZGUoIit0aGlzLnZhbHVlKyIpIn0sdH0oKTtmdW5jdGlvbiBKdCh0KXt2YXIgZT17fTtyZXR1cm4gdCYmdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3QudmFsdWUub3V0bGV0XT10fSksZX12YXIgdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnNuYXBzaG90PW4sYWUoaSxlKSxpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX0sZX0oWXQpO2Z1bmN0aW9uIGVlKHQsZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgcmUoW10se30se30sIiIse30saXQsZSxudWxsLHQucm9vdCwtMSx7fSk7cmV0dXJuIG5ldyBvZSgiIixuZXcgJHQobixbXSkpfSh0LGUpLGk9bmV3IHMuYShbbmV3IHd0KCIiLHt9KV0pLHI9bmV3IHMuYSh7fSksbz1uZXcgcy5hKHt9KSxhPW5ldyBzLmEoe30pLGw9bmV3IHMuYSgiIiksdT1uZXcgbmUoaSxyLGEsbCxvLGl0LGUsbi5yb290KTtyZXR1cm4gdS5zbmFwc2hvdD1uLnJvb3QsbmV3IHRlKG5ldyAkdCh1LFtdKSxuKX12YXIgbmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEscyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PWksdGhpcy5kYXRhPXIsdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMuX2Z1dHVyZVNuYXBzaG90PXN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD10aGlzLnBhcmFtcy5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBvdCh0KX0pKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXRoaXMucXVlcnlQYXJhbXMucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbih0KXtyZXR1cm4gb3QodCl9KSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6IkZ1dHVyZSgiK3RoaXMuX2Z1dHVyZVNuYXBzaG90KyIpIn0sdH0oKTtmdW5jdGlvbiBpZSh0LGUpe3ZvaWQgMD09PWUmJihlPSJlbXB0eU9ubHkiKTt2YXIgbj10LnBhdGhGcm9tUm9vdCxyPTA7aWYoImFsd2F5cyIhPT1lKWZvcihyPW4ubGVuZ3RoLTE7cj49MTspe3ZhciBvPW5bcl0sYT1uW3ItMV07aWYoby5yb3V0ZUNvbmZpZyYmIiI9PT1vLnJvdXRlQ29uZmlnLnBhdGgpci0tO2Vsc2V7aWYoYS5jb21wb25lbnQpYnJlYWs7ci0tfX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BhcmFtczpPYmplY3QoaS5hKSh7fSx0LnBhcmFtcyxlLnBhcmFtcyksZGF0YTpPYmplY3QoaS5hKSh7fSx0LmRhdGEsZS5kYXRhKSxyZXNvbHZlOk9iamVjdChpLmEpKHt9LHQucmVzb2x2ZSxlLl9yZXNvbHZlZERhdGEpfX0se3BhcmFtczp7fSxkYXRhOnt9LHJlc29sdmU6e319KX0obi5zbGljZShyKSl9dmFyIHJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsbyxhLHMsbCx1LGMpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1pLHRoaXMuZGF0YT1yLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLnJvdXRlQ29uZmlnPXMsdGhpcy5fdXJsU2VnbWVudD1sLHRoaXMuX2xhc3RQYXRoSW5kZXg9dSx0aGlzLl9yZXNvbHZlPWN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9b3QodGhpcy5wYXJhbXMpKSx0aGlzLl9wYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9b3QodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGUodXJsOiciK3RoaXMudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpKyInLCBwYXRoOiciKyh0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIikrIicpIn0sdH0oKSxvZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsbil8fHRoaXM7cmV0dXJuIGkudXJsPWUsYWUoaSxuKSxpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHNlKHRoaXMuX3Jvb3QpfSxlfShZdCk7ZnVuY3Rpb24gYWUodCxlKXtlLnZhbHVlLl9yb3V0ZXJTdGF0ZT10LGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gYWUodCxlKX0pfWZ1bmN0aW9uIHNlKHQpe3ZhciBlPXQuY2hpbGRyZW4ubGVuZ3RoPjA/IiB7ICIrdC5jaGlsZHJlbi5tYXAoc2UpLmpvaW4oIiwgIikrIiB9ICI6IiI7cmV0dXJuIiIrdC52YWx1ZStlfWZ1bmN0aW9uIGxlKHQpe2lmKHQuc25hcHNob3Qpe3ZhciBlPXQuc25hcHNob3Qsbj10Ll9mdXR1cmVTbmFwc2hvdDt0LnNuYXBzaG90PW4sZHQoZS5xdWVyeVBhcmFtcyxuLnF1ZXJ5UGFyYW1zKXx8dC5xdWVyeVBhcmFtcy5uZXh0KG4ucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQhPT1uLmZyYWdtZW50JiZ0LmZyYWdtZW50Lm5leHQobi5mcmFnbWVudCksZHQoZS5wYXJhbXMsbi5wYXJhbXMpfHx0LnBhcmFtcy5uZXh0KG4ucGFyYW1zKSxmdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24paWYoIWR0KHRbbl0sZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9KGUudXJsLG4udXJsKXx8dC51cmwubmV4dChuLnVybCksZHQoZS5kYXRhLG4uZGF0YSl8fHQuZGF0YS5uZXh0KG4uZGF0YSl9ZWxzZSB0LnNuYXBzaG90PXQuX2Z1dHVyZVNuYXBzaG90LHQuZGF0YS5uZXh0KHQuX2Z1dHVyZVNuYXBzaG90LmRhdGEpfWZ1bmN0aW9uIHVlKHQsZSl7dmFyIG4saTtyZXR1cm4gZHQodC5wYXJhbXMsZS5wYXJhbXMpJiZ4dChuPXQudXJsLGk9ZS51cmwpJiZuLmV2ZXJ5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGR0KHQucGFyYW1ldGVycyxpW2VdLnBhcmFtZXRlcnMpfSkmJiEoIXQucGFyZW50IT0hZS5wYXJlbnQpJiYoIXQucGFyZW50fHx1ZSh0LnBhcmVudCxlLnBhcmVudCkpfWZ1bmN0aW9uIGNlKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmIXQub3V0bGV0cyYmIXQuc2VnbWVudFBhdGh9ZnVuY3Rpb24gZmUodCxlLG4saSxyKXt2YXIgbz17fTtyZXR1cm4gaSYmbXQoaSxmdW5jdGlvbih0LGUpe29bZV09QXJyYXkuaXNBcnJheSh0KT90Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4iIit0fSk6IiIrdH0pLG5ldyBndChuLnJvb3Q9PT10P2U6ZnVuY3Rpb24gdChlLG4saSl7dmFyIHI9e307cmV0dXJuIG10KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXtyW29dPWU9PT1uP2k6dChlLG4saSl9KSxuZXcgX3QoZS5zZWdtZW50cyxyKX0obi5yb290LHQsZSksbyxyKX12YXIgZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtpZih0aGlzLmlzQWJzb2x1dGU9dCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1lLHRoaXMuY29tbWFuZHM9bix0JiZuLmxlbmd0aD4wJiZjZShuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycyIpO3ZhciBpPW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0c30pO2lmKGkmJmkhPT1wdChuKSl0aHJvdyBuZXcgRXJyb3IoIntvdXRsZXRzOnt9fSBoYXMgdG8gYmUgdGhlIGxhc3QgY29tbWFuZCIpfXJldHVybiB0LnByb3RvdHlwZS50b1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fic29sdXRlJiYxPT09dGhpcy5jb21tYW5kcy5sZW5ndGgmJiIvIj09dGhpcy5jb21tYW5kc1swXX0sdH0oKSxoZT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZWdtZW50R3JvdXA9dCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1lLHRoaXMuaW5kZXg9bn07ZnVuY3Rpb24gcGUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHM/dC5vdXRsZXRzW2l0XToiIit0fWZ1bmN0aW9uIG1lKHQsZSxuKXtpZih0fHwodD1uZXcgX3QoW10se30pKSwwPT09dC5zZWdtZW50cy5sZW5ndGgmJnQuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYmUodCxlLG4pO3ZhciBpPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9MCxyPWUsbz17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O3I8dC5zZWdtZW50cy5sZW5ndGg7KXtpZihpPj1uLmxlbmd0aClyZXR1cm4gbzt2YXIgYT10LnNlZ21lbnRzW3JdLHM9cGUobltpXSksbD1pPG4ubGVuZ3RoLTE/bltpKzFdOm51bGw7aWYocj4wJiZ2b2lkIDA9PT1zKWJyZWFrO2lmKHMmJmwmJiJvYmplY3QiPT10eXBlb2YgbCYmdm9pZCAwPT09bC5vdXRsZXRzKXtpZighX2UocyxsLGEpKXJldHVybiBvO2krPTJ9ZWxzZXtpZighX2Uocyx7fSxhKSlyZXR1cm4gbztpKyt9cisrfXJldHVybnttYXRjaDohMCxwYXRoSW5kZXg6cixjb21tYW5kSW5kZXg6aX19KHQsZSxuKSxyPW4uc2xpY2UoaS5jb21tYW5kSW5kZXgpO2lmKGkubWF0Y2gmJmkucGF0aEluZGV4PHQuc2VnbWVudHMubGVuZ3RoKXt2YXIgbz1uZXcgX3QodC5zZWdtZW50cy5zbGljZSgwLGkucGF0aEluZGV4KSx7fSk7cmV0dXJuIG8uY2hpbGRyZW5baXRdPW5ldyBfdCh0LnNlZ21lbnRzLnNsaWNlKGkucGF0aEluZGV4KSx0LmNoaWxkcmVuKSxiZShvLDAscil9cmV0dXJuIGkubWF0Y2gmJjA9PT1yLmxlbmd0aD9uZXcgX3QodC5zZWdtZW50cyx7fSk6aS5tYXRjaCYmIXQuaGFzQ2hpbGRyZW4oKT95ZSh0LGUsbik6aS5tYXRjaD9iZSh0LDAscik6eWUodCxlLG4pfWZ1bmN0aW9uIGJlKHQsZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG5ldyBfdCh0LnNlZ21lbnRzLHt9KTt2YXIgaT1mdW5jdGlvbih0KXt2YXIgZSxuO3JldHVybiJvYmplY3QiIT10eXBlb2YgdFswXT8oKGU9e30pW2l0XT10LGUpOnZvaWQgMD09PXRbMF0ub3V0bGV0cz8oKG49e30pW2l0XT10LG4pOnRbMF0ub3V0bGV0c30obikscj17fTtyZXR1cm4gbXQoaSxmdW5jdGlvbihuLGkpe251bGwhPT1uJiYocltpXT1tZSh0LmNoaWxkcmVuW2ldLGUsbikpfSksbXQodC5jaGlsZHJlbixmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWlbZV0mJihyW2VdPXQpfSksbmV3IF90KHQuc2VnbWVudHMscil9ZnVuY3Rpb24geWUodCxlLG4pe2Zvcih2YXIgaT10LnNlZ21lbnRzLnNsaWNlKDAsZSkscj0wO3I8bi5sZW5ndGg7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bcl0mJnZvaWQgMCE9PW5bcl0ub3V0bGV0cyl7dmFyIG89dmUobltyXS5vdXRsZXRzKTtyZXR1cm4gbmV3IF90KGksbyl9aWYoMD09PXImJmNlKG5bMF0pKWkucHVzaChuZXcgd3QodC5zZWdtZW50c1tlXS5wYXRoLG5bMF0pKSxyKys7ZWxzZXt2YXIgYT1wZShuW3JdKSxzPXI8bi5sZW5ndGgtMT9uW3IrMV06bnVsbDthJiZzJiZjZShzKT8oaS5wdXNoKG5ldyB3dChhLGdlKHMpKSkscis9Mik6KGkucHVzaChuZXcgd3QoYSx7fSkpLHIrKyl9fXJldHVybiBuZXcgX3QoaSx7fSl9ZnVuY3Rpb24gdmUodCl7dmFyIGU9e307cmV0dXJuIG10KHQsZnVuY3Rpb24odCxuKXtudWxsIT09dCYmKGVbbl09eWUobmV3IF90KFtdLHt9KSwwLHQpKX0pLGV9ZnVuY3Rpb24gZ2UodCl7dmFyIGU9e307cmV0dXJuIG10KHQsZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT0iIit0fSksZX1mdW5jdGlvbiBfZSh0LGUsbil7cmV0dXJuIHQ9PW4ucGF0aCYmZHQoZSxuLnBhcmFtZXRlcnMpfXZhciB3ZT1mdW5jdGlvbih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfSx4ZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcG9uZW50PXQsdGhpcy5yb3V0ZT1lfSxDZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5mdXR1cmU9dCx0aGlzLmN1cnI9ZSx0aGlzLm1vZHVsZUluamVjdG9yPW4sdGhpcy5mb3J3YXJkRXZlbnQ9aSx0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzPVtdLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcz1bXX1yZXR1cm4gdC5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZS5fcm9vdDt0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyhlLHRoaXMuY3Vycj90aGlzLmN1cnIuX3Jvb3Q6bnVsbCx0LFtlLnZhbHVlXSl9LHQucHJvdG90eXBlLmNoZWNrR3VhcmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pc0RlYWN0aXZhdGluZygpfHx0aGlzLmlzQWN0aXZhdGluZygpP3RoaXMucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcygpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5ydW5DYW5BY3RpdmF0ZUNoZWNrcygpOk9iamVjdCh1LmEpKCExKX0pKTpPYmplY3QodS5hKSghMCl9LHQucHJvdG90eXBlLnJlc29sdmVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaXNBY3RpdmF0aW5nKCk/T2JqZWN0KGwuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3Qoay5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5ydW5SZXNvbHZlKG4ucm91dGUsdCl9KSxmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yP2Z1bmN0aW9uKG4pe3JldHVybiBPYmplY3QoQS5hKShqKHQsZSksT2JqZWN0KFIuYSkoMSksYihlKSkobil9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoQS5hKShqKGZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdChlLG4saSsxKX0pLE9iamVjdChSLmEpKDEpKShlKX19KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KSk6T2JqZWN0KHUuYSkobnVsbCl9LHQucHJvdG90eXBlLmlzRGVhY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5pc0FjdGl2YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuY2FuQWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5zZXR1cENoaWxkUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcyxvPUp0KGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyLnNldHVwUm91dGVHdWFyZHModCxvW3QudmFsdWUub3V0bGV0XSxuLGkuY29uY2F0KFt0LnZhbHVlXSkpLGRlbGV0ZSBvW3QudmFsdWUub3V0bGV0XX0pLG10KG8sZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4uZ2V0Q29udGV4dChlKSl9KX0sdC5wcm90b3R5cGUuc2V0dXBSb3V0ZUd1YXJkcz1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10LnZhbHVlLG89ZT9lLnZhbHVlOm51bGwsYT1uP24uZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk6bnVsbDtpZihvJiZyLnJvdXRlQ29uZmlnPT09by5yb3V0ZUNvbmZpZyl7dmFyIHM9dGhpcy5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnMobyxyLHIucm91dGVDb25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtzP3RoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgd2UoaSkpOihyLmRhdGE9by5kYXRhLHIuX3Jlc29sdmVkRGF0YT1vLl9yZXNvbHZlZERhdGEpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsZSxyLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLGkpLHMmJnRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyB4ZShhLm91dGxldC5jb21wb25lbnQsbykpfWVsc2UgbyYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLGEpLHRoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgd2UoaSkpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsbnVsbCxyLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLGkpfSx0LnByb3RvdHlwZS5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChuKXtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hdWUodCxlKXx8IWR0KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcyk7Y2FzZSJwYXJhbXNDaGFuZ2UiOmRlZmF1bHQ6cmV0dXJuIXVlKHQsZSl9fSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1KdCh0KSxyPXQudmFsdWU7bXQoaSxmdW5jdGlvbih0LGkpe24uZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxyLmNvbXBvbmVudD9lP2UuY2hpbGRyZW4uZ2V0Q29udGV4dChpKTpudWxsOmUpfSksdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IHhlKHIuY29tcG9uZW50JiZlJiZlLm91dGxldCYmZS5vdXRsZXQuaXNBY3RpdmF0ZWQ/ZS5vdXRsZXQuY29tcG9uZW50Om51bGwscikpfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gT2JqZWN0KGwuYSkodGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJ1bkNhbkRlYWN0aXZhdGUoZS5jb21wb25lbnQsZS5yb3V0ZSl9KSxTKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGVDaGVja3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBPYmplY3QobC5hKSh0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChrLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBidChPYmplY3QobC5hKShbdC5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZS5wYXJlbnQpLHQuZmlyZUFjdGl2YXRpb25TdGFydChlLnJvdXRlKSx0LnJ1bkNhbkFjdGl2YXRlQ2hpbGQoZS5wYXRoKSx0LnJ1bkNhbkFjdGl2YXRlKGUucm91dGUpXSkpfSksUyhmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9LHQucHJvdG90eXBlLmZpcmVBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IEoodCkpLE9iamVjdCh1LmEpKCEwKX0sdC5wcm90b3R5cGUuZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBYKHQpKSxPYmplY3QodS5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP2J0KE9iamVjdChsLmEpKG4pLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24obil7dmFyIGk9ZS5nZXRUb2tlbihuLHQpO3JldHVybiB5dChpLmNhbkFjdGl2YXRlP2kuY2FuQWN0aXZhdGUodCxlLmZ1dHVyZSk6aSh0LGUuZnV0dXJlKSkucGlwZShDKCkpfSkpKTpPYmplY3QodS5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbdC5sZW5ndGgtMV0saT10LnNsaWNlKDAsdC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZCh0KX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXR9KTtyZXR1cm4gYnQoT2JqZWN0KGwuYSkoaSkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbih0KXtyZXR1cm4gYnQoT2JqZWN0KGwuYSkodC5ndWFyZHMpLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24oaSl7dmFyIHI9ZS5nZXRUb2tlbihpLHQubm9kZSk7cmV0dXJuIHl0KHIuY2FuQWN0aXZhdGVDaGlsZD9yLmNhbkFjdGl2YXRlQ2hpbGQobixlLmZ1dHVyZSk6cihuLGUuZnV0dXJlKSkucGlwZShDKCkpfSkpKX0pKSl9LHQucHJvdG90eXBlLmV4dHJhY3RDYW5BY3RpdmF0ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkOm51bGw7cmV0dXJuIGUmJjAhPT1lLmxlbmd0aD97bm9kZTp0LGd1YXJkczplfTpudWxsfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWUmJmUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIGkmJjAhPT1pLmxlbmd0aD9PYmplY3QobC5hKShpKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGkpe3ZhciByPW4uZ2V0VG9rZW4oaSxlKTtyZXR1cm4geXQoci5jYW5EZWFjdGl2YXRlP3IuY2FuRGVhY3RpdmF0ZSh0LGUsbi5jdXJyLG4uZnV0dXJlKTpyKHQsZSxuLmN1cnIsbi5mdXR1cmUpKS5waXBlKEMoKSl9KSkucGlwZShTKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKTpPYmplY3QodS5hKSghMCl9LHQucHJvdG90eXBlLnJ1blJlc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXNvbHZlTm9kZSh0Ll9yZXNvbHZlLHQpLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24obil7cmV0dXJuIHQuX3Jlc29sdmVkRGF0YT1uLHQuZGF0YT1PYmplY3QoaS5hKSh7fSx0LmRhdGEsaWUodCxlKS5yZXNvbHZlKSxudWxsfSkpfSx0LnByb3RvdHlwZS5yZXNvbHZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1PYmplY3Qua2V5cyh0KTtpZigwPT09aS5sZW5ndGgpcmV0dXJuIE9iamVjdCh1LmEpKHt9KTtpZigxPT09aS5sZW5ndGgpe3ZhciByPWlbMF07cmV0dXJuIHRoaXMuZ2V0UmVzb2x2ZXIodFtyXSxlKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybihlPXt9KVtyXT10LGV9KSl9dmFyIG89e307cmV0dXJuIE9iamVjdChsLmEpKGkpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oaSl7cmV0dXJuIG4uZ2V0UmVzb2x2ZXIodFtpXSxlKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBvW2ldPXQsdH0pKX0pKS5waXBlKE0oKSxPYmplY3QoZC5hKShmdW5jdGlvbigpe3JldHVybiBvfSkpfSx0LnByb3RvdHlwZS5nZXRSZXNvbHZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0VG9rZW4odCxlKTtyZXR1cm4geXQobi5yZXNvbHZlP24ucmVzb2x2ZShlLHRoaXMuZnV0dXJlKTpuKGUsdGhpcy5mdXR1cmUpKX0sdC5wcm90b3R5cGUuZ2V0VG9rZW49ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnfXJldHVybiBudWxsfShlKTtyZXR1cm4obj9uLm1vZHVsZS5pbmplY3Rvcjp0aGlzLm1vZHVsZUluamVjdG9yKS5nZXQodCl9LHR9KCksU2U9ZnVuY3Rpb24oKXt9LE9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsbyl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMuY29uZmlnPWUsdGhpcy51cmxUcmVlPW4sdGhpcy51cmw9aSx0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9cix0aGlzLnJlbGF0aXZlTGlua1Jlc29sdXRpb249b31yZXR1cm4gdC5wcm90b3R5cGUucmVjb2duaXplPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWplKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnLHRoaXMucmVsYXRpdmVMaW5rUmVzb2x1dGlvbikuc2VnbWVudEdyb3VwLGU9dGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuY29uZmlnLHQsaXQpLG49bmV3IHJlKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoT2JqZWN0KGkuYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGl0LHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx0aGlzLnVybFRyZWUucm9vdCwtMSx7fSkscj1uZXcgJHQobixlKSxhPW5ldyBvZSh0aGlzLnVybCxyKTtyZXR1cm4gdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShhLl9yb290KSxPYmplY3QodS5hKShhKX1jYXRjaCh0KXtyZXR1cm4gbmV3IG8uYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfX0sdC5wcm90b3R5cGUuaW5oZXJpdFBhcmFtc0FuZERhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmFsdWUsaT1pZShuLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7bi5wYXJhbXM9T2JqZWN0LmZyZWV6ZShpLnBhcmFtcyksbi5kYXRhPU9iamVjdC5mcmVlemUoaS5kYXRhKSx0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5oZXJpdFBhcmFtc0FuZERhdGEodCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLnNlZ21lbnRzLmxlbmd0aCYmZS5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKHQsZSk6dGhpcy5wcm9jZXNzU2VnbWVudCh0LGUsZS5zZWdtZW50cyxuKX0sdC5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLHI9Q3QoZSxmdW5jdGlvbihlLG4pe3JldHVybiBpLnByb2Nlc3NTZWdtZW50R3JvdXAodCxlLG4pfSk7cmV0dXJuIG49e30sci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52YWx1ZS5vdXRsZXRdO2lmKGUpe3ZhciBpPWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpLHI9dC52YWx1ZS51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIik7dGhyb3cgbmV3IEVycm9yKCJUd28gc2VnbWVudHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgb3V0bGV0IG5hbWU6ICciK2krIicgYW5kICciK3IrIicuIil9blt0LnZhbHVlLm91dGxldF09dC52YWx1ZX0pLHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnZhbHVlLm91dGxldD09PWl0Py0xOmUudmFsdWUub3V0bGV0PT09aXQ/MTp0LnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGUudmFsdWUub3V0bGV0KX0pLHJ9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvLGE7dHJ5e2Zvcih2YXIgcz1PYmplY3QoaS5lKSh0KSxsPXMubmV4dCgpOyFsLmRvbmU7bD1zLm5leHQoKSl7dmFyIHU9bC52YWx1ZTt0cnl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUodSxlLG4scil9Y2F0Y2godCl7aWYoISh0IGluc3RhbmNlb2YgU2UpKXRocm93IHR9fX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoYT1zLnJldHVybikmJmEuY2FsbChzKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19aWYodGhpcy5ub0xlZnRvdmVyc0luVXJsKGUsbixyKSlyZXR1cm5bXTt0aHJvdyBuZXcgU2V9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyKXtpZih0LnJlZGlyZWN0VG8pdGhyb3cgbmV3IFNlO2lmKCh0Lm91dGxldHx8aXQpIT09cil0aHJvdyBuZXcgU2U7dmFyIG8sYT1bXSxzPVtdO2lmKCIqKiI9PT10LnBhdGgpe3ZhciBsPW4ubGVuZ3RoPjA/cHQobikucGFyYW1ldGVyczp7fTtvPW5ldyByZShuLGwsT2JqZWN0LmZyZWV6ZShPYmplY3QoaS5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsUmUodCkscix0LmNvbXBvbmVudCx0LEVlKGUpLGtlKGUpK24ubGVuZ3RoLEFlKHQpKX1lbHNle3ZhciB1PWZ1bmN0aW9uKHQsZSxuKXtpZigiIj09PWUucGF0aCl7aWYoImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApKXRocm93IG5ldyBTZTtyZXR1cm57Y29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwYXJhbWV0ZXJzOnt9fX12YXIgcj0oZS5tYXRjaGVyfHxhdCkobix0LGUpO2lmKCFyKXRocm93IG5ldyBTZTt2YXIgbz17fTttdChyLnBvc1BhcmFtcyxmdW5jdGlvbih0LGUpe29bZV09dC5wYXRofSk7dmFyIGE9ci5jb25zdW1lZC5sZW5ndGg+MD9PYmplY3QoaS5hKSh7fSxvLHIuY29uc3VtZWRbci5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVycyk6bztyZXR1cm57Y29uc3VtZWRTZWdtZW50czpyLmNvbnN1bWVkLGxhc3RDaGlsZDpyLmNvbnN1bWVkLmxlbmd0aCxwYXJhbWV0ZXJzOmF9fShlLHQsbik7YT11LmNvbnN1bWVkU2VnbWVudHMscz1uLnNsaWNlKHUubGFzdENoaWxkKSxvPW5ldyByZShhLHUucGFyYW1ldGVycyxPYmplY3QuZnJlZXplKE9iamVjdChpLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxSZSh0KSxyLHQuY29tcG9uZW50LHQsRWUoZSksa2UoZSkrYS5sZW5ndGgsQWUodCkpfXZhciBjPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkcmVuP3QuY2hpbGRyZW46dC5sb2FkQ2hpbGRyZW4/dC5fbG9hZGVkQ29uZmlnLnJvdXRlczpbXX0odCksZj1qZShlLGEscyxjLHRoaXMucmVsYXRpdmVMaW5rUmVzb2x1dGlvbiksZD1mLnNlZ21lbnRHcm91cCxoPWYuc2xpY2VkU2VnbWVudHM7aWYoMD09PWgubGVuZ3RoJiZkLmhhc0NoaWxkcmVuKCkpe3ZhciBwPXRoaXMucHJvY2Vzc0NoaWxkcmVuKGMsZCk7cmV0dXJuW25ldyAkdChvLHApXX1pZigwPT09Yy5sZW5ndGgmJjA9PT1oLmxlbmd0aClyZXR1cm5bbmV3ICR0KG8sW10pXTt2YXIgbT10aGlzLnByb2Nlc3NTZWdtZW50KGMsZCxoLGl0KTtyZXR1cm5bbmV3ICR0KG8sbSldfSx0fSgpO2Z1bmN0aW9uIEVlKHQpe2Zvcih2YXIgZT10O2UuX3NvdXJjZVNlZ21lbnQ7KWU9ZS5fc291cmNlU2VnbWVudDtyZXR1cm4gZX1mdW5jdGlvbiBrZSh0KXtmb3IodmFyIGU9dCxuPWUuX3NlZ21lbnRJbmRleFNoaWZ0P2UuX3NlZ21lbnRJbmRleFNoaWZ0OjA7ZS5fc291cmNlU2VnbWVudDspbis9KGU9ZS5fc291cmNlU2VnbWVudCkuX3NlZ21lbnRJbmRleFNoaWZ0P2UuX3NlZ21lbnRJbmRleFNoaWZ0OjA7cmV0dXJuIG4tMX1mdW5jdGlvbiBqZSh0LGUsbixyLG8pe2lmKG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBJZSh0LGUsbikmJlRlKG4pIT09aXR9KX0odCxuKSl7dmFyIGE9bmV3IF90KGUsZnVuY3Rpb24odCxlLG4scil7dmFyIG8sYSxzPXt9O3NbaXRdPXIsci5fc291cmNlU2VnbWVudD10LHIuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoO3RyeXtmb3IodmFyIGw9T2JqZWN0KGkuZSkobiksdT1sLm5leHQoKTshdS5kb25lO3U9bC5uZXh0KCkpe3ZhciBjPXUudmFsdWU7aWYoIiI9PT1jLnBhdGgmJlRlKGMpIT09aXQpe3ZhciBmPW5ldyBfdChbXSx7fSk7Zi5fc291cmNlU2VnbWVudD10LGYuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHNbVGUoYyldPWZ9fX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXt1JiYhdS5kb25lJiYoYT1sLnJldHVybikmJmEuY2FsbChsKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIHN9KHQsZSxyLG5ldyBfdChuLHQuY2hpbGRyZW4pKSk7cmV0dXJuIGEuX3NvdXJjZVNlZ21lbnQ9dCxhLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOmEsc2xpY2VkU2VnbWVudHM6W119fWlmKDA9PT1uLmxlbmd0aCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIEllKHQsZSxuKX0pfSh0LG4pKXt2YXIgcz1uZXcgX3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixyLG8sYSl7dmFyIHMsbCx1PXt9O3RyeXtmb3IodmFyIGM9T2JqZWN0KGkuZSkociksZj1jLm5leHQoKTshZi5kb25lO2Y9Yy5uZXh0KCkpe3ZhciBkPWYudmFsdWU7aWYoSWUodCxuLGQpJiYhb1tUZShkKV0pe3ZhciBoPW5ldyBfdChbXSx7fSk7aC5fc291cmNlU2VnbWVudD10LGguX3NlZ21lbnRJbmRleFNoaWZ0PSJsZWdhY3kiPT09YT90LnNlZ21lbnRzLmxlbmd0aDplLmxlbmd0aCx1W1RlKGQpXT1ofX19Y2F0Y2godCl7cz17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGw9Yy5yZXR1cm4pJiZsLmNhbGwoYyl9ZmluYWxseXtpZihzKXRocm93IHMuZXJyb3J9fXJldHVybiBPYmplY3QoaS5hKSh7fSxvLHUpfSh0LGUsbixyLHQuY2hpbGRyZW4sbykpO3JldHVybiBzLl9zb3VyY2VTZWdtZW50PXQscy5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpzLHNsaWNlZFNlZ21lbnRzOm59fXZhciBsPW5ldyBfdCh0LnNlZ21lbnRzLHQuY2hpbGRyZW4pO3JldHVybiBsLl9zb3VyY2VTZWdtZW50PXQsbC5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpsLHNsaWNlZFNlZ21lbnRzOm59fWZ1bmN0aW9uIEllKHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDA9PT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gVGUodCl7cmV0dXJuIHQub3V0bGV0fHxpdH1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdC5kYXRhfHx7fX1mdW5jdGlvbiBBZSh0KXtyZXR1cm4gdC5yZXNvbHZlfHx7fX12YXIgUGU9ZnVuY3Rpb24oKXt9LERlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5zdG9yZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuc2hvdWxkQXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5yZXRyaWV2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuc2hvdWxkUmV1c2VSb3V0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJvdXRlQ29uZmlnPT09ZS5yb3V0ZUNvbmZpZ30sdH0oKSxNZT1uZXcgci5xKCJST1VURVMiKSxOZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5sb2FkZXI9dCx0aGlzLmNvbXBpbGVyPWUsdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyPW4sdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcj1pfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZSksdGhpcy5sb2FkTW9kdWxlRmFjdG9yeShlLmxvYWRDaGlsZHJlbikucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihpKXtuLm9uTG9hZEVuZExpc3RlbmVyJiZuLm9uTG9hZEVuZExpc3RlbmVyKGUpO3ZhciByPWkuY3JlYXRlKHQpO3JldHVybiBuZXcgc3QoaHQoci5pbmplY3Rvci5nZXQoTWUpKS5tYXAoZnQpLHIpfSkpfSx0LnByb3RvdHlwZS5sb2FkTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9PYmplY3QobC5hKSh0aGlzLmxvYWRlci5sb2FkKHQpKTp5dCh0KCkpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiByLnY/T2JqZWN0KHUuYSkodCk6T2JqZWN0KGwuYSkoZS5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCkpfSkpfSx0fSgpLExlPWZ1bmN0aW9uKCl7fSxGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZFByb2Nlc3NVcmw9ZnVuY3Rpb24odCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmV4dHJhY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gVmUodCl7dGhyb3cgdH1mdW5jdGlvbiB6ZSh0LGUsbil7cmV0dXJuIGUucGFyc2UoIi8iKX1mdW5jdGlvbiBCZSh0LGUpe3JldHVybiBPYmplY3QodS5hKShudWxsKX12YXIgVWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksbyxsLHUsYyl7dmFyIGY9dGhpczt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy51cmxTZXJpYWxpemVyPWUsdGhpcy5yb290Q29udGV4dHM9bix0aGlzLmxvY2F0aW9uPWksdGhpcy5jb25maWc9Yyx0aGlzLm5hdmlnYXRpb25zPW5ldyBzLmEobnVsbCksdGhpcy5uYXZpZ2F0aW9uSWQ9MCx0aGlzLmV2ZW50cz1uZXcgYS5hLHRoaXMuZXJyb3JIYW5kbGVyPVZlLHRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPXplLHRoaXMubmF2aWdhdGVkPSExLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLmhvb2tzPXtiZWZvcmVQcmVhY3RpdmF0aW9uOkJlLGFmdGVyUHJlYWN0aXZhdGlvbjpCZX0sdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PW5ldyBGZSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1uZXcgRGUsdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPSJpZ25vcmUiLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT0iZW1wdHlPbmx5Iix0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PSJkZWZlcnJlZCIsdGhpcy5yZWxhdGl2ZUxpbmtSZXNvbHV0aW9uPSJsZWdhY3kiLHRoaXMubmdNb2R1bGU9by5nZXQoci54KSx0aGlzLnJlc2V0Q29uZmlnKGMpLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IGd0KG5ldyBfdChbXSx7fSkse30sbnVsbCksdGhpcy5yYXdVcmxUcmVlPXRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5jb25maWdMb2FkZXI9bmV3IE5lKGwsdSxmdW5jdGlvbih0KXtyZXR1cm4gZi50cmlnZ2VyRXZlbnQobmV3IFkodCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gZi50cmlnZ2VyRXZlbnQobmV3IEsodCkpfSksdGhpcy5yb3V0ZXJTdGF0ZT1lZSh0aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLHRoaXMucHJvY2Vzc05hdmlnYXRpb25zKCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0Um9vdENvbXBvbmVudFR5cGU9ZnVuY3Rpb24odCl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9dGhpcy5yb290Q29tcG9uZW50VHlwZX0sdC5wcm90b3R5cGUuaW5pdGlhbE5hdmlnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLDA9PT10aGlzLm5hdmlnYXRpb25JZCYmdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMubG9jYXRpb24ucGF0aCghMCkse3JlcGxhY2VVcmw6ITB9KX0sdC5wcm90b3R5cGUuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9ufHwodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj10aGlzLmxvY2F0aW9uLnN1YnNjcmliZShmdW5jdGlvbihlKXt2YXIgbj10LnBhcnNlVXJsKGUudXJsKSxpPSJwb3BzdGF0ZSI9PT1lLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSIscj1lLnN0YXRlJiZlLnN0YXRlLm5hdmlnYXRpb25JZD97bmF2aWdhdGlvbklkOmUuc3RhdGUubmF2aWdhdGlvbklkfTpudWxsO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjaGVkdWxlTmF2aWdhdGlvbihuLGkscix7cmVwbGFjZVVybDohMH0pfSwwKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuZXZlbnRzLm5leHQodCl9LHQucHJvdG90eXBlLnJlc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2x0KHQpLHRoaXMuY29uZmlnPXQubWFwKGZ0KSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTF9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249bnVsbCl9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5yZWxhdGl2ZVRvLG89ZS5xdWVyeVBhcmFtcyxhPWUuZnJhZ21lbnQscz1lLnByZXNlcnZlUXVlcnlQYXJhbXMsbD1lLnF1ZXJ5UGFyYW1zSGFuZGxpbmcsdT1lLnByZXNlcnZlRnJhZ21lbnQ7T2JqZWN0KHIuWikoKSYmcyYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKTt2YXIgYz1ufHx0aGlzLnJvdXRlclN0YXRlLnJvb3QsZj11P3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6YSxkPW51bGw7aWYobClzd2l0Y2gobCl7Y2FzZSJtZXJnZSI6ZD1PYmplY3QoaS5hKSh7fSx0aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLG8pO2JyZWFrO2Nhc2UicHJlc2VydmUiOmQ9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0OmQ9b3x8bnVsbH1lbHNlIGQ9cz90aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zOm98fG51bGw7cmV0dXJuIG51bGwhPT1kJiYoZD10aGlzLnJlbW92ZUVtcHR5UHJvcHMoZCkpLGZ1bmN0aW9uKHQsZSxuLHIsbyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBmZShlLnJvb3QsZS5yb290LGUscixvKTt2YXIgYT1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHRbMF0mJjE9PT10Lmxlbmd0aCYmIi8iPT09dFswXSlyZXR1cm4gbmV3IGRlKCEwLDAsdCk7dmFyIGU9MCxuPSExLHI9dC5yZWR1Y2UoZnVuY3Rpb24odCxyLG8pe2lmKCJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9cil7aWYoci5vdXRsZXRzKXt2YXIgYT17fTtyZXR1cm4gbXQoci5vdXRsZXRzLGZ1bmN0aW9uKHQsZSl7YVtlXT0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgiLyIpOnR9KSxPYmplY3QoaS5kKSh0LFt7b3V0bGV0czphfV0pfWlmKHIuc2VnbWVudFBhdGgpcmV0dXJuIE9iamVjdChpLmQpKHQsW3Iuc2VnbWVudFBhdGhdKX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHI/T2JqZWN0KGkuZCkodCxbcl0pOjA9PT1vPyhyLnNwbGl0KCIvIikuZm9yRWFjaChmdW5jdGlvbihpLHIpezA9PXImJiIuIj09PWl8fCgwPT1yJiYiIj09PWk/bj0hMDoiLi4iPT09aT9lKys6IiIhPWkmJnQucHVzaChpKSl9KSx0KTpPYmplY3QoaS5kKSh0LFtyXSl9LFtdKTtyZXR1cm4gbmV3IGRlKG4sZSxyKX0obik7aWYoYS50b1Jvb3QoKSlyZXR1cm4gZmUoZS5yb290LG5ldyBfdChbXSx7fSksZSxyLG8pO3ZhciBzPWZ1bmN0aW9uKHQsbixpKXtpZih0LmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBoZShlLnJvb3QsITAsMCk7aWYoLTE9PT1pLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4KXJldHVybiBuZXcgaGUoaS5zbmFwc2hvdC5fdXJsU2VnbWVudCwhMCwwKTt2YXIgcj1jZSh0LmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtmb3IodmFyIGE9aS5zbmFwc2hvdC5fdXJsU2VnbWVudCxzPWkuc25hcHNob3QuX2xhc3RQYXRoSW5kZXgrcixsPXQubnVtYmVyT2ZEb3VibGVEb3RzO2w+czspe2lmKGwtPXMsIShhPWEucGFyZW50KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbnVtYmVyIG9mICcuLi8nIik7cz1hLnNlZ21lbnRzLmxlbmd0aH1yZXR1cm4gbmV3IGhlKGEsITEscy1sKX0oKX0oYSwwLHQpLGw9cy5wcm9jZXNzQ2hpbGRyZW4/YmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTptZShzLnNlZ21lbnRHcm91cCxzLmluZGV4LGEuY29tbWFuZHMpO3JldHVybiBmZShzLnNlZ21lbnRHcm91cCxsLGUscixvKX0oYyx0aGlzLmN1cnJlbnRVcmxUcmVlLHQsZCxmKX0sdC5wcm90b3R5cGUubmF2aWdhdGVCeVVybD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KTt2YXIgbj10IGluc3RhbmNlb2YgZ3Q/dDp0aGlzLnBhcnNlVXJsKHQpLGk9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKG4sdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4gdGhpcy5zY2hlZHVsZU5hdmlnYXRpb24oaSwiaW1wZXJhdGl2ZSIsbnVsbCxlKX0sdC5wcm90b3R5cGUubmF2aWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVxdWVzdGVkIHBhdGggY29udGFpbnMgIituKyIgc2VnbWVudCBhdCBpbmRleCAiK2UpfX0odCksdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3JlYXRlVXJsVHJlZSh0LGUpLGUpfSx0LnByb3RvdHlwZS5zZXJpYWxpemVVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodCl9LHQucHJvdG90eXBlLnBhcnNlVXJsPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KX1jYXRjaChuKXtlPXRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKG4sdGhpcy51cmxTZXJpYWxpemVyLHQpfXJldHVybiBlfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBndClyZXR1cm4gdnQodGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMucGFyc2VVcmwodCk7cmV0dXJuIHZ0KHRoaXMuY3VycmVudFVybFRyZWUsbixlKX0sdC5wcm90b3R5cGUucmVtb3ZlRW1wdHlQcm9wcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9dFtuXTtyZXR1cm4gbnVsbCE9PWkmJnZvaWQgMCE9PWkmJihlW25dPWkpLGV9LHt9KX0sdC5wcm90b3R5cGUucHJvY2Vzc05hdmlnYXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5hdmlnYXRpb25zLnBpcGUoT2JqZWN0KGsuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/KHQuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb24oZSksZS5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSkpOk9iamVjdCh1LmEpKG51bGwpfSkpLnN1YnNjcmliZShmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS5zY2hlZHVsZU5hdmlnYXRpb249ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5uYXZpZ2F0aW9ucy52YWx1ZTtpZihyJiYiaW1wZXJhdGl2ZSIhPT1lJiYiaW1wZXJhdGl2ZSI9PT1yLnNvdXJjZSYmci5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihyJiYiaGFzaGNoYW5nZSI9PWUmJiJwb3BzdGF0ZSI9PT1yLnNvdXJjZSYmci5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihyJiYicG9wc3RhdGUiPT1lJiYiaGFzaGNoYW5nZSI9PT1yLnNvdXJjZSYmci5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTt2YXIgbz1udWxsLGE9bnVsbCxzPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bz10LGE9ZX0pLGw9Kyt0aGlzLm5hdmlnYXRpb25JZDtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9ucy5uZXh0KHtpZDpsLHNvdXJjZTplLHN0YXRlOm4scmF3VXJsOnQsZXh0cmFzOmkscmVzb2x2ZTpvLHJlamVjdDphLHByb21pc2U6c30pLHMuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSl9LHQucHJvdG90eXBlLmV4ZWN1dGVTY2hlZHVsZWROYXZpZ2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmlkLGk9dC5yYXdVcmwscj10LmV4dHJhcyxvPXQucmVzb2x2ZSxhPXQucmVqZWN0LHM9dC5zb3VyY2UsbD10LnN0YXRlLHU9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoaSksYz0hdGhpcy5uYXZpZ2F0ZWR8fHUudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTsoInJlbG9hZCI9PT10aGlzLm9uU2FtZVVybE5hdmlnYXRpb258fGMpJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChpKT8oImVhZ2VyIiE9PXRoaXMudXJsVXBkYXRlU3RyYXRlZ3l8fHIuc2tpcExvY2F0aW9uQ2hhbmdlfHx0aGlzLnNldEJyb3dzZXJVcmwoaSwhIXIucmVwbGFjZVVybCxuKSx0aGlzLmV2ZW50cy5uZXh0KG5ldyB6KG4sdGhpcy5zZXJpYWxpemVVcmwodSkscyxsKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5ydW5OYXZpZ2F0ZSh1LGksISFyLnNraXBMb2NhdGlvbkNoYW5nZSwhIXIucmVwbGFjZVVybCxuLG51bGwpfSkudGhlbihvLGEpKTpjJiZ0aGlzLnJhd1VybFRyZWUmJnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHRoaXMucmF3VXJsVHJlZSk/KHRoaXMuZXZlbnRzLm5leHQobmV3IHoobix0aGlzLnNlcmlhbGl6ZVVybCh1KSxzLGwpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJ1bk5hdmlnYXRlKHUsaSwhMSwhMSxuLGVlKHUsZS5yb290Q29tcG9uZW50VHlwZSkuc25hcHNob3QpfSkudGhlbihvLGEpKToodGhpcy5yYXdVcmxUcmVlPWksbyhudWxsKSl9LHQucHJvdG90eXBlLnJ1bk5hdmlnYXRlPWZ1bmN0aW9uKHQsZSxuLHIsbyxhKXt2YXIgbD10aGlzO3JldHVybiBvIT09dGhpcy5uYXZpZ2F0aW9uSWQ/KHRoaXMuZXZlbnRzLm5leHQobmV3IFUobyx0aGlzLnNlcmlhbGl6ZVVybCh0KSwiTmF2aWdhdGlvbiBJRCAiK28rIiBpcyBub3QgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBpZCAiK3RoaXMubmF2aWdhdGlvbklkKSksUHJvbWlzZS5yZXNvbHZlKCExKSk6bmV3IFByb21pc2UoZnVuY3Rpb24oYyxoKXt2YXIgcCxtPShhP09iamVjdCh1LmEpKHthcHBsaWVkVXJsOnQsc25hcHNob3Q6YX0pOm5ldyBxdChsLm5nTW9kdWxlLmluamVjdG9yLGwuY29uZmlnTG9hZGVyLGwudXJsU2VyaWFsaXplcix0LGwuY29uZmlnKS5hcHBseSgpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9ImVtcHR5T25seSIpLHZvaWQgMD09PW8mJihvPSJsZWdhY3kiKSxuZXcgT2UodCxlLG4saSxyLG8pLnJlY29nbml6ZSgpfShsLnJvb3RDb21wb25lbnRUeXBlLGwuY29uZmlnLGUsbC5zZXJpYWxpemVVcmwoZSksbC5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LGwucmVsYXRpdmVMaW5rUmVzb2x1dGlvbikucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihuKXtyZXR1cm4gbC5ldmVudHMubmV4dChuZXcgcShvLGwuc2VyaWFsaXplVXJsKHQpLGwuc2VyaWFsaXplVXJsKGUpLG4pKSx7YXBwbGllZFVybDplLHNuYXBzaG90Om59fSkpfSkpKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGkpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGk/T2JqZWN0KHUuYSkoaSk6bC5ob29rcy5iZWZvcmVQcmVhY3RpdmF0aW9uKGkuc25hcHNob3Qse25hdmlnYXRpb25JZDpvLGFwcGxpZWRVcmxUcmVlOnQscmF3VXJsVHJlZTplLHNraXBMb2NhdGlvbkNoYW5nZTpuLHJlcGxhY2VVcmw6cn0pLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKX0pKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC5hcHBsaWVkVXJsLG49dC5zbmFwc2hvdDtyZXR1cm4ocD1uZXcgQ2UobixsLnJvdXRlclN0YXRlLnNuYXBzaG90LGwubmdNb2R1bGUuaW5qZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGwudHJpZ2dlckV2ZW50KHQpfSkpLmluaXRpYWxpemUobC5yb290Q29udGV4dHMpLHthcHBsaWVkVXJsOmUsc25hcHNob3Q6bn19KSkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbihlKXtpZigiYm9vbGVhbiI9PXR5cGVvZiBlfHxsLm5hdmlnYXRpb25JZCE9PW8pcmV0dXJuIE9iamVjdCh1LmEpKCExKTt2YXIgbj1lLmFwcGxpZWRVcmwsaT1lLnNuYXBzaG90O3JldHVybiBsLnRyaWdnZXJFdmVudChuZXcgUShvLGwuc2VyaWFsaXplVXJsKHQpLGwuc2VyaWFsaXplVXJsKG4pLGkpKSxwLmNoZWNrR3VhcmRzKCkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihlKXtyZXR1cm4gbC50cmlnZ2VyRXZlbnQobmV3IEcobyxsLnNlcmlhbGl6ZVVybCh0KSxsLnNlcmlhbGl6ZVVybChuKSxpLGUpKSx7YXBwbGllZFVybDpuLHNuYXBzaG90Omksc2hvdWxkQWN0aXZhdGU6ZX19KSl9KSkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbihlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfHxsLm5hdmlnYXRpb25JZCE9PW8/T2JqZWN0KHUuYSkoITEpOmUuc2hvdWxkQWN0aXZhdGUmJnAuaXNBY3RpdmF0aW5nKCk/KGwudHJpZ2dlckV2ZW50KG5ldyBaKG8sbC5zZXJpYWxpemVVcmwodCksbC5zZXJpYWxpemVVcmwoZS5hcHBsaWVkVXJsKSxlLnNuYXBzaG90KSkscC5yZXNvbHZlRGF0YShsLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24oKXtyZXR1cm4gbC50cmlnZ2VyRXZlbnQobmV3IFcobyxsLnNlcmlhbGl6ZVVybCh0KSxsLnNlcmlhbGl6ZVVybChlLmFwcGxpZWRVcmwpLGUuc25hcHNob3QpKSxlfSkpKTpPYmplY3QodS5hKShlKX0pKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKGkpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGl8fGwubmF2aWdhdGlvbklkIT09bz9PYmplY3QodS5hKSghMSk6bC5ob29rcy5hZnRlclByZWFjdGl2YXRpb24oaS5zbmFwc2hvdCx7bmF2aWdhdGlvbklkOm8sYXBwbGllZFVybFRyZWU6dCxyYXdVcmxUcmVlOmUsc2tpcExvY2F0aW9uQ2hhbmdlOm4scmVwbGFjZVVybDpyfSkucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbigpe3JldHVybiBpfSkpfSkpLnBpcGUoT2JqZWN0KGQuYSkoZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdHx8bC5uYXZpZ2F0aW9uSWQhPT1vKXJldHVybiExO3ZhciBlLG4scixhPXQuYXBwbGllZFVybCx1PXQuc2hvdWxkQWN0aXZhdGU7cmV0dXJuIHU/e2FwcGxpZWRVcmw6YSxzdGF0ZToocj1mdW5jdGlvbiB0KGUsbixyKXtpZihyJiZlLnNob3VsZFJldXNlUm91dGUobi52YWx1ZSxyLnZhbHVlLnNuYXBzaG90KSl7KGM9ci52YWx1ZSkuX2Z1dHVyZVNuYXBzaG90PW4udmFsdWU7dmFyIG89ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuLmNoaWxkcmVuLm1hcChmdW5jdGlvbihuKXt2YXIgbyxhO3RyeXtmb3IodmFyIHM9T2JqZWN0KGkuZSkoci5jaGlsZHJlbiksbD1zLm5leHQoKTshbC5kb25lO2w9cy5uZXh0KCkpe3ZhciB1PWwudmFsdWU7aWYoZS5zaG91bGRSZXVzZVJvdXRlKHUudmFsdWUuc25hcHNob3Qsbi52YWx1ZSkpcmV0dXJuIHQoZSxuLHUpfX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoYT1zLnJldHVybikmJmEuY2FsbChzKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIHQoZSxuKX0pfShlLG4scik7cmV0dXJuIG5ldyAkdChjLG8pfXZhciBhPWUucmV0cmlldmUobi52YWx1ZSk7aWYoYSl7dmFyIGw9YS5yb3V0ZTtyZXR1cm4gZnVuY3Rpb24gdChlLG4pe2lmKGUudmFsdWUucm91dGVDb25maWchPT1uLnZhbHVlLnJvdXRlQ29uZmlnKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYXR0YWNoIEFjdGl2YXRlZFJvdXRlU25hcHNob3QgY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IHJvdXRlIik7aWYoZS5jaGlsZHJlbi5sZW5ndGghPT1uLmNoaWxkcmVuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGNoaWxkcmVuIik7bi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9ZS52YWx1ZTtmb3IodmFyIGk9MDtpPGUuY2hpbGRyZW4ubGVuZ3RoOysraSl0KGUuY2hpbGRyZW5baV0sbi5jaGlsZHJlbltpXSl9KG4sbCksbH12YXIgdSxjPW5ldyBuZShuZXcgcy5hKCh1PW4udmFsdWUpLnVybCksbmV3IHMuYSh1LnBhcmFtcyksbmV3IHMuYSh1LnF1ZXJ5UGFyYW1zKSxuZXcgcy5hKHUuZnJhZ21lbnQpLG5ldyBzLmEodS5kYXRhKSx1Lm91dGxldCx1LmNvbXBvbmVudCx1KTtyZXR1cm4gbz1uLmNoaWxkcmVuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSksbmV3ICR0KGMsbyl9KGwucm91dGVSZXVzZVN0cmF0ZWd5LChlPXQuc25hcHNob3QpLl9yb290LChuPWwucm91dGVyU3RhdGUpP24uX3Jvb3Q6dm9pZCAwKSxuZXcgdGUocixlKSksc2hvdWxkQWN0aXZhdGU6dX06e2FwcGxpZWRVcmw6YSxzdGF0ZTpudWxsLHNob3VsZEFjdGl2YXRlOnV9fSkpO2wuYWN0aXZhdGVSb3V0ZXMobSxsLnJvdXRlclN0YXRlLGwuY3VycmVudFVybFRyZWUsbyx0LGUsbixyLGMsaCl9KX0sdC5wcm90b3R5cGUuYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzLGwsdSl7dmFyIGMsZj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXtpZigiYm9vbGVhbiIhPXR5cGVvZiB0JiZ0LnNob3VsZEFjdGl2YXRlJiZpPT09Zi5uYXZpZ2F0aW9uSWQmJnQuc3RhdGUpe3ZhciBuPXQuc3RhdGU7Zi5jdXJyZW50VXJsVHJlZT10LmFwcGxpZWRVcmwsZi5yYXdVcmxUcmVlPWYudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShmLmN1cnJlbnRVcmxUcmVlLG8pLGYucm91dGVyU3RhdGU9biwiZGVmZXJyZWQiIT09Zi51cmxVcGRhdGVTdHJhdGVneXx8YXx8Zi5zZXRCcm93c2VyVXJsKGYucmF3VXJsVHJlZSxzLGkpLG5ldyBIZShmLnJvdXRlUmV1c2VTdHJhdGVneSxuLGUsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KHQpfSkuYWN0aXZhdGUoZi5yb290Q29udGV4dHMpLGM9ITB9ZWxzZSBjPSExfSkudGhlbihmdW5jdGlvbigpe2M/KGYubmF2aWdhdGVkPSEwLGYubGFzdFN1Y2Nlc3NmdWxJZD1pLGYuZXZlbnRzLm5leHQobmV3IEIoaSxmLnNlcmlhbGl6ZVVybChyKSxmLnNlcmlhbGl6ZVVybChmLmN1cnJlbnRVcmxUcmVlKSkpLGwoITApKTooZi5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSxmLmV2ZW50cy5uZXh0KG5ldyBVKGksZi5zZXJpYWxpemVVcmwociksIiIpKSxsKCExKSl9LGZ1bmN0aW9uKHQpe2lmKChhPXQpJiZhLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKWYubmF2aWdhdGVkPSEwLGYucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksZi5ldmVudHMubmV4dChuZXcgVShpLGYuc2VyaWFsaXplVXJsKHIpLHQubWVzc2FnZSkpLGwoITEpO2Vsc2V7Zi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBIKGksZi5zZXJpYWxpemVVcmwociksdCkpO3RyeXtsKGYuZXJyb3JIYW5kbGVyKHQpKX1jYXRjaCh0KXt1KHQpfX12YXIgYX0pfSx0LnByb3RvdHlwZS5zZXRCcm93c2VyVXJsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQpO3RoaXMubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8oaSl8fGU/dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaSwiIix7bmF2aWdhdGlvbklkOm59KTp0aGlzLmxvY2F0aW9uLmdvKGksIiIse25hdmlnYXRpb25JZDpufSl9LHQucHJvdG90eXBlLnJlc2V0U3RhdGVBbmRVcmw9ZnVuY3Rpb24odCxlLG4pe3RoaXMucm91dGVyU3RhdGU9dCx0aGlzLmN1cnJlbnRVcmxUcmVlPWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLG4pLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl9LHQucHJvdG90eXBlLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZT1mdW5jdGlvbigpe3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5yYXdVcmxUcmVlKSwiIix7bmF2aWdhdGlvbklkOnRoaXMubGFzdFN1Y2Nlc3NmdWxJZH0pfSx0fSgpLEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT10LHRoaXMuZnV0dXJlU3RhdGU9ZSx0aGlzLmN1cnJTdGF0ZT1uLHRoaXMuZm9yd2FyZEV2ZW50PWl9cmV0dXJuIHQucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3Qsbj10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KSxsZSh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcyxyPUp0KGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLm91dGxldDtpLmRlYWN0aXZhdGVSb3V0ZXModCxyW2VdLG4pLGRlbGV0ZSByW2VdfSksbXQocixmdW5jdGlvbih0LGUpe2kuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuKX0pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnZhbHVlLHI9ZT9lLnZhbHVlOm51bGw7aWYoaT09PXIpaWYoaS5jb21wb25lbnQpe3ZhciBvPW4uZ2V0Q29udGV4dChpLm91dGxldCk7byYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgciYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLG4pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaCh0LnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKHQsZSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQodCxlKX0sdC5wcm90b3R5cGUuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKG4mJm4ub3V0bGV0KXt2YXIgaT1uLm91dGxldC5kZXRhY2goKSxyPW4uY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHQudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjppLHJvdXRlOnQsY29udGV4dHM6cn0pfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYoaSl7dmFyIHI9SnQodCksbz10LnZhbHVlLmNvbXBvbmVudD9pLmNoaWxkcmVuOmU7bXQocixmdW5jdGlvbih0LGUpe3JldHVybiBuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbyl9KSxpLm91dGxldCYmKGkub3V0bGV0LmRlYWN0aXZhdGUoKSxpLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9SnQoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuYWN0aXZhdGVSb3V0ZXModCxyW3QudmFsdWUub3V0bGV0XSxuKSxpLmZvcndhcmRFdmVudChuZXcgdHQodC52YWx1ZS5zbmFwc2hvdCkpfSksdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyAkKHQudmFsdWUuc25hcHNob3QpKX0sdC5wcm90b3R5cGUuYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQudmFsdWUscj1lP2UudmFsdWU6bnVsbDtpZihsZShpKSxpPT09cilpZihpLmNvbXBvbmVudCl7dmFyIG89bi5nZXRPckNyZWF0ZUNvbnRleHQoaS5vdXRsZXQpO3RoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgaWYoaS5jb21wb25lbnQpaWYobz1uLmdldE9yQ3JlYXRlQ29udGV4dChpLm91dGxldCksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGkuc25hcHNob3QpKXt2YXIgYT10aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5yZXRyaWV2ZShpLnNuYXBzaG90KTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZShpLnNuYXBzaG90LG51bGwpLG8uY2hpbGRyZW4ub25PdXRsZXRSZUF0dGFjaGVkKGEuY29udGV4dHMpLG8uYXR0YWNoUmVmPWEuY29tcG9uZW50UmVmLG8ucm91dGU9YS5yb3V0ZS52YWx1ZSxvLm91dGxldCYmby5vdXRsZXQuYXR0YWNoKGEuY29tcG9uZW50UmVmLGEucm91dGUudmFsdWUpLHFlKGEucm91dGUpfWVsc2V7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkuc25hcHNob3QucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZztpZihuJiZuLmNvbXBvbmVudClyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0oKSxsPXM/cy5tb2R1bGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOm51bGw7by5yb3V0ZT1pLG8ucmVzb2x2ZXI9bCxvLm91dGxldCYmby5vdXRsZXQuYWN0aXZhdGVXaXRoKGksbCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LG51bGwsbil9LHR9KCk7ZnVuY3Rpb24gcWUodCl7bGUodC52YWx1ZSksdC5jaGlsZHJlbi5mb3JFYWNoKHFlKX12YXIgUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMucm91dGVyPXQsdGhpcy5yb3V0ZT1lLHRoaXMubG9jYXRpb25TdHJhdGVneT1uLHRoaXMuY29tbWFuZHM9W10sdGhpcy5zdWJzY3JpcHRpb249dC5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3QgaW5zdGFuY2VvZiBCJiZpLnVwZGF0ZVRhcmdldFVybEFuZEhyZWYoKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvdXRlckxpbmsiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jb21tYW5kcz1udWxsIT10P0FycmF5LmlzQXJyYXkodCk/dDpbdF06W119LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIix7c2V0OmZ1bmN0aW9uKHQpe09iamVjdChyLlopKCkmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIGlzIGRlcHJlY2F0ZWQsIHVzZSBxdWVyeVBhcmFtc0hhbmRsaW5nIGluc3RlYWQuIiksdGhpcy5wcmVzZXJ2ZT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24odCxlLG4saSl7aWYoMCE9PXR8fGV8fG58fGkpcmV0dXJuITA7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdldCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpcmV0dXJuITA7dmFyIHI9e3NraXBMb2NhdGlvbkNoYW5nZTpHZSh0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSkscmVwbGFjZVVybDpHZSh0aGlzLnJlcGxhY2VVcmwpfTtyZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUsciksITF9LHQucHJvdG90eXBlLnVwZGF0ZVRhcmdldFVybEFuZEhyZWY9ZnVuY3Rpb24oKXt0aGlzLmhyZWY9dGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodGhpcy51cmxUcmVlKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidXJsVHJlZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscHJlc2VydmVRdWVyeVBhcmFtczpHZSh0aGlzLnByZXNlcnZlKSxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OkdlKHRoaXMucHJlc2VydmVGcmFnbWVudCl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIEdlKHQpe3JldHVybiIiPT09dHx8ISF0fXZhciBaZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3RoaXMub3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMucmVzb2x2ZXI9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBXZSx0aGlzLmF0dGFjaFJlZj1udWxsfX0oKSxXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXRDcmVhdGVkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQodCk7bi5vdXRsZXQ9ZSx0aGlzLmNvbnRleHRzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5vbkNoaWxkT3V0bGV0RGVzdHJveWVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q29udGV4dCh0KTtlJiYoZS5vdXRsZXQ9bnVsbCl9LHQucHJvdG90eXBlLm9uT3V0bGV0RGVhY3RpdmF0ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHRzO3JldHVybiB0aGlzLmNvbnRleHRzPW5ldyBNYXAsdH0sdC5wcm90b3R5cGUub25PdXRsZXRSZUF0dGFjaGVkPWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dHM9dH0sdC5wcm90b3R5cGUuZ2V0T3JDcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q29udGV4dCh0KTtyZXR1cm4gZXx8KGU9bmV3IFplLHRoaXMuY29udGV4dHMuc2V0KHQsZSkpLGV9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KHQpfHxudWxsfSx0fSgpLFllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLG8pe3RoaXMucGFyZW50Q29udGV4dHM9dCx0aGlzLmxvY2F0aW9uPWUsdGhpcy5yZXNvbHZlcj1uLHRoaXMuY2hhbmdlRGV0ZWN0b3I9byx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5hY3RpdmF0ZUV2ZW50cz1uZXcgci5uLHRoaXMuZGVhY3RpdmF0ZUV2ZW50cz1uZXcgci5uLHRoaXMubmFtZT1pfHxpdCx0Lm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKX0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dCh0aGlzLm5hbWUpO3QmJnQucm91dGUmJih0LmF0dGFjaFJlZj90aGlzLmF0dGFjaCh0LmF0dGFjaFJlZix0LnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aCh0LnJvdXRlLHQucmVzb2x2ZXJ8fG51bGwpKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBY3RpdmF0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2V9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZSIse2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkUm91dGVEYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTt0aGlzLmxvY2F0aW9uLmRldGFjaCgpO3ZhciB0PXRoaXMuYWN0aXZhdGVkO3JldHVybiB0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdH0sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQsZSl7dGhpcy5hY3RpdmF0ZWQ9dCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1lLHRoaXMubG9jYXRpb24uaW5zZXJ0KHQuaG9zdFZpZXcpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZWFjdGl2YXRlRXZlbnRzLmVtaXQodCl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZVdpdGg9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzQWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjdGl2YXRlIGFuIGFscmVhZHkgYWN0aXZhdGVkIG91dGxldCIpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPXQ7dmFyIG49KGU9ZXx8dGhpcy5yZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWcuY29tcG9uZW50KSxpPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4scj1uZXcgS2UodCxpLHRoaXMubG9jYXRpb24uaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPXRoaXMubG9jYXRpb24uY3JlYXRlQ29tcG9uZW50KG4sdGhpcy5sb2NhdGlvbi5sZW5ndGgsciksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfSx0fSgpLEtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5yb3V0ZT10LHRoaXMuY2hpbGRDb250ZXh0cz1lLHRoaXMucGFyZW50PW59cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09bmU/dGhpcy5yb3V0ZTp0PT09V2U/dGhpcy5jaGlsZENvbnRleHRzOnRoaXMucGFyZW50LmdldCh0LGUpfSx0fSgpLFhlPWZ1bmN0aW9uKCl7fSwkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSgpLnBpcGUoT2JqZWN0KFAuYSkoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHUuYSkobnVsbCl9KSl9LHR9KCksSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdCh1LmEpKG51bGwpfSx0fSgpLHRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIpe3RoaXMucm91dGVyPXQsdGhpcy5pbmplY3Rvcj1pLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PXIsdGhpcy5sb2FkZXI9bmV3IE5lKGUsbixmdW5jdGlvbihlKXtyZXR1cm4gdC50cmlnZ2VyRXZlbnQobmV3IFkoZSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gdC50cmlnZ2VyRXZlbnQobmV3IEsoZSkpfSl9cmV0dXJuIHQucHJvdG90eXBlLnNldFVwUHJlbG9hZGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBCfSksT2JqZWN0KGsuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmVsb2FkKCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluamVjdG9yLmdldChyLngpO3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModCx0aGlzLnJvdXRlci5jb25maWcpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnByb2Nlc3NSb3V0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbixyLG89W107dHJ5e2Zvcih2YXIgYT1PYmplY3QoaS5lKShlKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTtpZih1LmxvYWRDaGlsZHJlbiYmIXUuY2FuTG9hZCYmdS5fbG9hZGVkQ29uZmlnKXt2YXIgYz11Ll9sb2FkZWRDb25maWc7by5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhjLm1vZHVsZSxjLnJvdXRlcykpfWVsc2UgdS5sb2FkQ2hpbGRyZW4mJiF1LmNhbkxvYWQ/by5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyh0LHUpKTp1LmNoaWxkcmVuJiZvLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKHQsdS5jaGlsZHJlbikpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYocj1hLnJldHVybikmJnIuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIE9iamVjdChsLmEpKG8pLnBpcGUoT2JqZWN0KE4uYSkoKSxPYmplY3QoZC5hKShmdW5jdGlvbih0KXt9KSl9LHQucHJvdG90eXBlLnByZWxvYWRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGUsZnVuY3Rpb24oKXtyZXR1cm4gbi5sb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LG4ucHJvY2Vzc1JvdXRlcyh0Lm1vZHVsZSx0LnJvdXRlcyl9KSl9KX0sdH0oKSxlbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJvdXRlcj10LHRoaXMudmlld3BvcnRTY3JvbGxlcj1lLHRoaXMub3B0aW9ucz1uLHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LG4uc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj1uLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb258fCJkaXNhYmxlZCIsbi5hbmNob3JTY3JvbGxpbmc9bi5hbmNob3JTY3JvbGxpbmd8fCJkaXNhYmxlZCJ9cmV0dXJuIHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXsiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oIm1hbnVhbCIpLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPXRoaXMuY3JlYXRlU2Nyb2xsRXZlbnRzKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jb25zdW1lU2Nyb2xsRXZlbnRzKCl9LHQucHJvdG90eXBlLmNyZWF0ZVNjcm9sbEV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIHo/KHQuc3RvcmVbdC5sYXN0SWRdPXQudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHQubGFzdFNvdXJjZT1lLm5hdmlnYXRpb25UcmlnZ2VyLHQucmVzdG9yZWRJZD1lLnJlc3RvcmVkU3RhdGU/ZS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTplIGluc3RhbmNlb2YgQiYmKHQubGFzdElkPWUuaWQsdC5zY2hlZHVsZVNjcm9sbEV2ZW50KGUsdC5yb3V0ZXIucGFyc2VVcmwoZS51cmxBZnRlclJlZGlyZWN0cykuZnJhZ21lbnQpKX0pfSx0LnByb3RvdHlwZS5jb25zdW1lU2Nyb2xsRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgZXQmJihlLnBvc2l0aW9uPyJ0b3AiPT09dC5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24/dC52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oWzAsMF0pOiJlbmFibGVkIj09PXQub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uJiZ0LnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihlLnBvc2l0aW9uKTplLmFuY2hvciYmImVuYWJsZWQiPT09dC5vcHRpb25zLmFuY2hvclNjcm9sbGluZz90LnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9BbmNob3IoZS5hbmNob3IpOiJkaXNhYmxlZCIhPT10Lm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdC52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oWzAsMF0pKX0pfSx0LnByb3RvdHlwZS5zY2hlZHVsZVNjcm9sbEV2ZW50PWZ1bmN0aW9uKHQsZSl7dGhpcy5yb3V0ZXIudHJpZ2dlckV2ZW50KG5ldyBldCh0LCJwb3BzdGF0ZSI9PT10aGlzLmxhc3RTb3VyY2U/dGhpcy5zdG9yZVt0aGlzLnJlc3RvcmVkSWRdOm51bGwsZSkpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uJiZ0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uJiZ0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0fSgpLG5uPW5ldyByLnEoIlJPVVRFUl9DT05GSUdVUkFUSU9OIikscm49bmV3IHIucSgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxvbj1bTC5oLHtwcm92aWRlOlN0LHVzZUNsYXNzOk90fSx7cHJvdmlkZTpVZSx1c2VGYWN0b3J5OmRuLGRlcHM6W3IuZyxTdCxXZSxMLmgsci5yLHIudyxyLmksTWUsbm4sW0xlLG5ldyByLkFdLFtQZSxuZXcgci5BXV19LFdlLHtwcm92aWRlOm5lLHVzZUZhY3Rvcnk6aG4sZGVwczpbVWVdfSx7cHJvdmlkZTpyLncsdXNlQ2xhc3M6ci5MfSx0bixKZSwkZSx7cHJvdmlkZTpubix1c2VWYWx1ZTp7ZW5hYmxlVHJhY2luZzohMX19XTtmdW5jdGlvbiBhbigpe3JldHVybiBuZXcgci55KCJSb3V0ZXIiLFVlKX12YXIgc249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7fXJldHVybiB0LmZvclJvb3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W29uLGZuKGUpLHtwcm92aWRlOnJuLHVzZUZhY3Rvcnk6Y24sZGVwczpbW1VlLG5ldyByLkEsbmV3IHIuS11dfSx7cHJvdmlkZTpubix1c2VWYWx1ZTpufHx7fX0se3Byb3ZpZGU6TC5pLHVzZUZhY3Rvcnk6dW4sZGVwczpbTC50LFtuZXcgci5wKEwuYSksbmV3IHIuQV0sbm5dfSx7cHJvdmlkZTplbix1c2VGYWN0b3J5OmxuLGRlcHM6W1VlLEwudixubl19LHtwcm92aWRlOlhlLHVzZUV4aXN0aW5nOm4mJm4ucHJlbG9hZGluZ1N0cmF0ZWd5P24ucHJlbG9hZGluZ1N0cmF0ZWd5OkplfSx7cHJvdmlkZTpyLnksbXVsdGk6ITAsdXNlRmFjdG9yeTphbn0sW3BuLHtwcm92aWRlOnIuZCxtdWx0aTohMCx1c2VGYWN0b3J5Om1uLGRlcHM6W3BuXX0se3Byb3ZpZGU6eW4sdXNlRmFjdG9yeTpibixkZXBzOltwbl19LHtwcm92aWRlOnIuYixtdWx0aTohMCx1c2VFeGlzdGluZzp5bn1dXX19LHQuZm9yQ2hpbGQ9ZnVuY3Rpb24oZSl7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOltmbihlKV19fSx0fSgpO2Z1bmN0aW9uIGxuKHQsZSxuKXtyZXR1cm4gbi5zY3JvbGxPZmZzZXQmJmUuc2V0T2Zmc2V0KG4uc2Nyb2xsT2Zmc2V0KSxuZXcgZW4odCxlLG4pfWZ1bmN0aW9uIHVuKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLG4udXNlSGFzaD9uZXcgTC5mKHQsZSk6bmV3IEwucyh0LGUpfWZ1bmN0aW9uIGNuKHQpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJSb3V0ZXJNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gTGF6eSBsb2FkZWQgbW9kdWxlcyBzaG91bGQgdXNlIFJvdXRlck1vZHVsZS5mb3JDaGlsZCgpIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIGZuKHQpe3JldHVyblt7cHJvdmlkZTpyLmEsbXVsdGk6ITAsdXNlVmFsdWU6dH0se3Byb3ZpZGU6TWUsbXVsdGk6ITAsdXNlVmFsdWU6dH1dfWZ1bmN0aW9uIGRuKHQsZSxuLGkscixvLGEscyxsLHUsYyl7dm9pZCAwPT09bCYmKGw9e30pO3ZhciBmPW5ldyBVZShudWxsLGUsbixpLHIsbyxhLGh0KHMpKTtpZih1JiYoZi51cmxIYW5kbGluZ1N0cmF0ZWd5PXUpLGMmJihmLnJvdXRlUmV1c2VTdHJhdGVneT1jKSxsLmVycm9ySGFuZGxlciYmKGYuZXJyb3JIYW5kbGVyPWwuZXJyb3JIYW5kbGVyKSxsLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlciYmKGYubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPWwubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKSxsLmVuYWJsZVRyYWNpbmcpe3ZhciBkPU9iamVjdChGLnMpKCk7Zi5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2QubG9nR3JvdXAoIlJvdXRlciBFdmVudDogIit0LmNvbnN0cnVjdG9yLm5hbWUpLGQubG9nKHQudG9TdHJpbmcoKSksZC5sb2codCksZC5sb2dHcm91cEVuZCgpfSl9cmV0dXJuIGwub25TYW1lVXJsTmF2aWdhdGlvbiYmKGYub25TYW1lVXJsTmF2aWdhdGlvbj1sLm9uU2FtZVVybE5hdmlnYXRpb24pLGwucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSYmKGYucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT1sLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLGwudXJsVXBkYXRlU3RyYXRlZ3kmJihmLnVybFVwZGF0ZVN0cmF0ZWd5PWwudXJsVXBkYXRlU3RyYXRlZ3kpLGwucmVsYXRpdmVMaW5rUmVzb2x1dGlvbiYmKGYucmVsYXRpdmVMaW5rUmVzb2x1dGlvbj1sLnJlbGF0aXZlTGlua1Jlc29sdXRpb24pLGZ9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIHQucm91dGVyU3RhdGUucm9vdH12YXIgcG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuaW5qZWN0b3I9dCx0aGlzLmluaXROYXZpZ2F0aW9uPSExLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZT1uZXcgYS5hfXJldHVybiB0LnByb3RvdHlwZS5hcHBJbml0aWFsaXplcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KEwuZyxQcm9taXNlLnJlc29sdmUobnVsbCkpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1udWxsLG49bmV3IFByb21pc2UoZnVuY3Rpb24odCl7cmV0dXJuIGU9dH0pLGk9dC5pbmplY3Rvci5nZXQoVWUpLHI9dC5pbmplY3Rvci5nZXQobm4pO2lmKHQuaXNMZWdhY3lEaXNhYmxlZChyKXx8dC5pc0xlZ2FjeUVuYWJsZWQocikpZSghMCk7ZWxzZSBpZigiZGlzYWJsZWQiPT09ci5pbml0aWFsTmF2aWdhdGlvbilpLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLGUoITApO2Vsc2V7aWYoImVuYWJsZWQiIT09ci5pbml0aWFsTmF2aWdhdGlvbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5pdGlhbE5hdmlnYXRpb24gb3B0aW9uczogJyIrci5pbml0aWFsTmF2aWdhdGlvbisiJyIpO2kuaG9va3MuYWZ0ZXJQcmVhY3RpdmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuaW5pdE5hdmlnYXRpb24/T2JqZWN0KHUuYSkobnVsbCk6KHQuaW5pdE5hdmlnYXRpb249ITAsZSghMCksdC5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lKX0saS5pbml0aWFsTmF2aWdhdGlvbigpfXJldHVybiBufSl9LHQucHJvdG90eXBlLmJvb3RzdHJhcExpc3RlbmVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5qZWN0b3IuZ2V0KG5uKSxuPXRoaXMuaW5qZWN0b3IuZ2V0KHRuKSxpPXRoaXMuaW5qZWN0b3IuZ2V0KGVuKSxvPXRoaXMuaW5qZWN0b3IuZ2V0KFVlKSxhPXRoaXMuaW5qZWN0b3IuZ2V0KHIuZyk7dD09PWEuY29tcG9uZW50c1swXSYmKHRoaXMuaXNMZWdhY3lFbmFibGVkKGUpP28uaW5pdGlhbE5hdmlnYXRpb24oKTp0aGlzLmlzTGVnYWN5RGlzYWJsZWQoZSkmJm8uc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksbi5zZXRVcFByZWxvYWRpbmcoKSxpLmluaXQoKSxvLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lLm5leHQobnVsbCksdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lLmNvbXBsZXRlKCkpfSx0LnByb3RvdHlwZS5pc0xlZ2FjeUVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuImxlZ2FjeV9lbmFibGVkIj09PXQuaW5pdGlhbE5hdmlnYXRpb258fCEwPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8dm9pZCAwPT09dC5pbml0aWFsTmF2aWdhdGlvbn0sdC5wcm90b3R5cGUuaXNMZWdhY3lEaXNhYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4ibGVnYWN5X2Rpc2FibGVkIj09PXQuaW5pdGlhbE5hdmlnYXRpb258fCExPT09dC5pbml0aWFsTmF2aWdhdGlvbn0sdH0oKTtmdW5jdGlvbiBtbih0KXtyZXR1cm4gdC5hcHBJbml0aWFsaXplci5iaW5kKHQpfWZ1bmN0aW9uIGJuKHQpe3JldHVybiB0LmJvb3RzdHJhcExpc3RlbmVyLmJpbmQodCl9dmFyIHluPW5ldyByLnEoIlJvdXRlciBJbml0aWFsaXplciIpfSxaWWp0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIHl0fSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gYnR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gdHR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZXR9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gbnR9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc3R9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuICR9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gYXR9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGx0fSk7dmFyIGk9bigibXJTRyIpLHI9bigiSXAwUiIpLG89bigiQ2NuRyIpLGE9bnVsbDtmdW5jdGlvbiBzKCl7cmV0dXJuIGF9dmFyIGwsdT17Y2xhc3M6ImNsYXNzTmFtZSIsaW5uZXJIdG1sOiJpbm5lckhUTUwiLHJlYWRvbmx5OiJyZWFkT25seSIsdGFiaW5kZXg6InRhYkluZGV4In0sYz17IlxiIjoiQmFja3NwYWNlIiwiXHQiOiJUYWIiLCJceDdmIjoiRGVsZXRlIiwiXHgxYiI6IkVzY2FwZSIsRGVsOiJEZWxldGUiLEVzYzoiRXNjYXBlIixMZWZ0OiJBcnJvd0xlZnQiLFJpZ2h0OiJBcnJvd1JpZ2h0IixVcDoiQXJyb3dVcCIsRG93bjoiQXJyb3dEb3duIixNZW51OiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixXaW46Ik9TIn0sZj17QToiMSIsQjoiMiIsQzoiMyIsRDoiNCIsRToiNSIsRjoiNiIsRzoiNyIsSDoiOCIsSToiOSIsSjoiKiIsSzoiKyIsTToiLSIsTjoiLiIsTzoiLyIsImAiOiIwIiwiXHg5MCI6Ik51bUxvY2sifTtvLlNhLk5vZGUmJihsPW8uU2EuTm9kZS5wcm90b3R5cGUuY29udGFpbnN8fGZ1bmN0aW9uKHQpe3JldHVybiEhKDE2JnRoaXMuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpfSk7dmFyIGQsaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInBhcnNlIG5vdCBpbXBsZW1lbnRlZCIpfSxlLm1ha2VDdXJyZW50PWZ1bmN0aW9uKCl7dmFyIHQ7dD1uZXcgZSxhfHwoYT10KX0sZS5wcm90b3R5cGUuaGFzUHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fSxlLnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dFtlXT1ufSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdfSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByOyhyPXQpW2VdLmFwcGx5KHIsT2JqZWN0KGkuZCkobikpfSxlLnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmKGNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvcih0KTpjb25zb2xlLmxvZyh0KSl9LGUucHJvdG90eXBlLmxvZz1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nJiZ3aW5kb3cuY29uc29sZS5sb2codCl9LGUucHJvdG90eXBlLmxvZ0dyb3VwPWZ1bmN0aW9uKHQpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cCYmd2luZG93LmNvbnNvbGUuZ3JvdXAodCl9LGUucHJvdG90eXBlLmxvZ0dyb3VwRW5kPWZ1bmN0aW9uKCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmdyb3VwRW5kJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0LGUpe3JldHVybiBsLmNhbGwodCxlKX0sZS5wcm90b3R5cGUucXVlcnlTZWxlY3Rvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3IoZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKGUpfSxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUsbil7dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9LGUucHJvdG90eXBlLm9uQW5kQ2FuY2VsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSksZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCExKX19LGUucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24odCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9LGUucHJvdG90eXBlLmNyZWF0ZU1vdXNlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5jcmVhdGVFdmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUV2ZW50KCJFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5yZXR1cm5WYWx1ZT0hMX0sZS5wcm90b3R5cGUuaXNQcmV2ZW50ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVmYXVsdFByZXZlbnRlZHx8bnVsbCE9dC5yZXR1cm5WYWx1ZSYmIXQucmV0dXJuVmFsdWV9LGUucHJvdG90eXBlLmdldElubmVySFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbm5lckhUTUx9LGUucHJvdG90eXBlLmdldFRlbXBsYXRlQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4iY29udGVudCJpbiB0JiZ0aGlzLmlzVGVtcGxhdGVFbGVtZW50KHQpP3QuY29udGVudDpudWxsfSxlLnByb3RvdHlwZS5nZXRPdXRlckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0ZXJIVE1MfSxlLnByb3RvdHlwZS5ub2RlTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZX0sZS5wcm90b3R5cGUubm9kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVWYWx1ZX0sZS5wcm90b3R5cGUudHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSxlLnByb3RvdHlwZS5jb250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc1Byb3BlcnR5KHQsImNvbnRlbnQiKT90LmNvbnRlbnQ6dH0sZS5wcm90b3R5cGUuZmlyc3RDaGlsZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5maXJzdENoaWxkfSxlLnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sZS5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkTm9kZXN9LGUucHJvdG90eXBlLmNoaWxkTm9kZXNBc0xpc3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2hpbGROb2RlcyxuPW5ldyBBcnJheShlLmxlbmd0aCksaT0wO2k8ZS5sZW5ndGg7aSsrKW5baV09ZVtpXTtyZXR1cm4gbn0sZS5wcm90b3R5cGUuY2xlYXJOb2Rlcz1mdW5jdGlvbih0KXtmb3IoO3QuZmlyc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpfSxlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dC5yZW1vdmVDaGlsZChlKX0sZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKHQsZSxuKXt0LnJlcGxhY2VDaGlsZChlLG4pfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHR9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dC5pbnNlcnRCZWZvcmUobixlKX0sZS5wcm90b3R5cGUuaW5zZXJ0QWxsQmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXtuLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQuaW5zZXJ0QmVmb3JlKG4sZSl9KX0sZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZS5uZXh0U2libGluZyl9LGUucHJvdG90eXBlLnNldElubmVySFRNTD1mdW5jdGlvbih0LGUpe3QuaW5uZXJIVE1MPWV9LGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dENvbnRlbnR9LGUucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0LnRleHRDb250ZW50PWV9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3QudmFsdWU9ZX0sZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja2VkfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkPWZ1bmN0aW9uKHQsZSl7dC5jaGVja2VkPWV9LGUucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlQ29tbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBlLmlubmVySFRNTD10LGV9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybihuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnROUyh0LGUpfSxlLnByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZVRleHROb2RlKHQpfSxlLnByb3RvdHlwZS5jcmVhdGVTY3JpcHRUYWc9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPShuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoIlNDUklQVCIpO3JldHVybiBpLnNldEF0dHJpYnV0ZSh0LGUpLGl9LGUucHJvdG90eXBlLmNyZWF0ZVN0eWxlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPShlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobix0aGlzLmNyZWF0ZVRleHROb2RlKHQsZSkpLG59LGUucHJvdG90eXBlLmNyZWF0ZVNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY3JlYXRlU2hhZG93Um9vdCgpfSxlLnByb3RvdHlwZS5nZXRTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEhvc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9zdH0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX0sZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSl9LGUucHJvdG90eXBlLmNsYXNzTGlzdD1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5jbGFzc0xpc3QsMCl9LGUucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX0sZS5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSl9LGUucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0LnN0eWxlW2VdPW59LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtlXT0iIn0sZS5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdHlsZVtlXX0sZS5wcm90b3R5cGUuaGFzU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMuZ2V0U3R5bGUodCxlKXx8IiI7cmV0dXJuIG4/aT09bjppLmxlbmd0aD4wfSxlLnByb3RvdHlwZS50YWdOYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhZ05hbWV9LGUucHJvdG90eXBlLmF0dHJpYnV0ZU1hcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IE1hcCxuPXQuYXR0cmlidXRlcyxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPW4uaXRlbShpKTtlLnNldChyLm5hbWUsci52YWx1ZSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuaGFzQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lmhhc0F0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmdldEF0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dC5zZXRBdHRyaWJ1dGUoZSxuKX0sZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4saSl7dC5zZXRBdHRyaWJ1dGVOUyhlLG4saSl9LGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQXR0cmlidXRlKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7dC5yZW1vdmVBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS50ZW1wbGF0ZUF3YXJlUm9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90aGlzLmNvbnRlbnQodCk6dH0sZS5wcm90b3R5cGUuY3JlYXRlSHRtbERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9LGUucHJvdG90eXBlLmdldERlZmF1bHREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaCh0KXtyZXR1cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19fSxlLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50aXRsZX0sZS5wcm90b3R5cGUuc2V0VGl0bGU9ZnVuY3Rpb24odCxlKXt0LnRpdGxlPWV8fCIifSxlLnByb3RvdHlwZS5lbGVtZW50TWF0Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiEhdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYodC5tYXRjaGVzJiZ0Lm1hdGNoZXMoZSl8fHQubXNNYXRjaGVzU2VsZWN0b3ImJnQubXNNYXRjaGVzU2VsZWN0b3IoZSl8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yJiZ0LndlYmtpdE1hdGNoZXNTZWxlY3RvcihlKSl9LGUucHJvdG90eXBlLmlzVGVtcGxhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzRWxlbWVudE5vZGUodCkmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfSxlLnByb3RvdHlwZS5pc1RleHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREV9LGUucHJvdG90eXBlLmlzQ29tbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkNPTU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaXNFbGVtZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSxlLnByb3RvdHlwZS5oYXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10LnNoYWRvd1Jvb3QmJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sZS5wcm90b3R5cGUuaXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH0sZS5wcm90b3R5cGUuaW1wb3J0SW50b0RvYz1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLnRlbXBsYXRlQXdhcmVSb290KHQpLCEwKX0sZS5wcm90b3R5cGUuYWRvcHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5hZG9wdE5vZGUodCl9LGUucHJvdG90eXBlLmdldEhyZWY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKCJocmVmIil9LGUucHJvdG90eXBlLmdldEV2ZW50S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5O2lmKG51bGw9PWUpe2lmKG51bGw9PShlPXQua2V5SWRlbnRpZmllcikpcmV0dXJuIlVuaWRlbnRpZmllZCI7ZS5zdGFydHNXaXRoKCJVKyIpJiYoZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGUuc3Vic3RyaW5nKDIpLDE2KSksMz09PXQubG9jYXRpb24mJmYuaGFzT3duUHJvcGVydHkoZSkmJihlPWZbZV0pKX1yZXR1cm4gY1tlXXx8ZX0sZS5wcm90b3R5cGUuZ2V0R2xvYmFsRXZlbnRUYXJnZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4id2luZG93Ij09PWU/d2luZG93OiJkb2N1bWVudCI9PT1lP3Q6ImJvZHkiPT09ZT90LmJvZHk6bnVsbH0sZS5wcm90b3R5cGUuZ2V0SGlzdG9yeT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaGlzdG9yeX0sZS5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmxvY2F0aW9ufSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbih0KXt2YXIgZSxuPXB8fChwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSk/cC5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1uP251bGw6KGU9bixkfHwoZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLGQuc2V0QXR0cmlidXRlKCJocmVmIixlKSwiLyI9PT1kLnBhdGhuYW1lLmNoYXJBdCgwKT9kLnBhdGhuYW1lOiIvIitkLnBhdGhuYW1lKX0sZS5wcm90b3R5cGUucmVzZXRCYXNlRWxlbWVudD1mdW5jdGlvbigpe3A9bnVsbH0sZS5wcm90b3R5cGUuZ2V0VXNlckFnZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fSxlLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LCJkYXRhLSIrZSxuKX0sZS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSh0LCJkYXRhLSIrZSl9LGUucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGU9ZnVuY3Rpb24odCl7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUodCl9LGUucHJvdG90eXBlLnN1cHBvcnRzV2ViQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV9LGUucHJvdG90eXBlLnBlcmZvcm1hbmNlTm93PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZSYmd2luZG93LnBlcmZvcm1hbmNlLm5vdz93aW5kb3cucGVyZm9ybWFuY2Uubm93KCk6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LGUucHJvdG90eXBlLnN1cHBvcnRzQ29va2llcz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5nZXRDb29raWU9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyLkEpKGRvY3VtZW50LmNvb2tpZSx0KX0sZS5wcm90b3R5cGUuc2V0Q29va2llPWZ1bmN0aW9uKHQsZSl7ZG9jdW1lbnQuY29va2llPWVuY29kZVVSSUNvbXBvbmVudCh0KSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpfSxlfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO2UuX2FuaW1hdGlvblByZWZpeD1udWxsLGUuX3RyYW5zaXRpb25FbmQ9bnVsbDt0cnl7dmFyIG49ZS5jcmVhdGVFbGVtZW50KCJkaXYiLGRvY3VtZW50KTtpZihudWxsIT1lLmdldFN0eWxlKG4sImFuaW1hdGlvbk5hbWUiKSllLl9hbmltYXRpb25QcmVmaXg9IiI7ZWxzZSBmb3IodmFyIGk9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXSxyPTA7cjxpLmxlbmd0aDtyKyspaWYobnVsbCE9ZS5nZXRTdHlsZShuLGlbcl0rIkFuaW1hdGlvbk5hbWUiKSl7ZS5fYW5pbWF0aW9uUHJlZml4PSItIitpW3JdLnRvTG93ZXJDYXNlKCkrIi0iO2JyZWFrfXZhciBvPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGwhPWUuZ2V0U3R5bGUobix0KSYmKGUuX3RyYW5zaXRpb25FbmQ9b1t0XSl9KX1jYXRjaCh0KXtlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGx9cmV0dXJuIGV9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0RGlzdHJpYnV0ZWROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREaXN0cmlidXRlZE5vZGVzKCl9LGUucHJvdG90eXBlLnJlc29sdmVBbmRTZXRIcmVmPWZ1bmN0aW9uKHQsZSxuKXt0LmhyZWY9bnVsbD09bj9lOmUrIi8uLi8iK259LGUucHJvdG90eXBlLnN1cHBvcnRzRE9NRXZlbnRzPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnN1cHBvcnRzTmF0aXZlU2hhZG93RE9NPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRvY3VtZW50LmJvZHkuY3JlYXRlU2hhZG93Um9vdH0sZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblByZWZpeD90aGlzLl9hbmltYXRpb25QcmVmaXg6IiJ9LGUucHJvdG90eXBlLmdldFRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZD90aGlzLl90cmFuc2l0aW9uRW5kOiIifSxlLnByb3RvdHlwZS5zdXBwb3J0c0FuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hbmltYXRpb25QcmVmaXgmJm51bGwhPXRoaXMuX3RyYW5zaXRpb25FbmR9LGV9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMucmVzb3VyY2VMb2FkZXJUeXBlPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXR0clRvUHJvcE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRyVG9Qcm9wTWFwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXR0clRvUHJvcE1hcD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCkpKSxwPW51bGwsbT1yLmQ7ZnVuY3Rpb24gYigpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfXZhciB5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kb2M9ZSxuLl9pbml0KCksbn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe3RoaXMubG9jYXRpb249cygpLmdldExvY2F0aW9uKCksdGhpcy5faGlzdG9yeT1zKCkuZ2V0SGlzdG9yeSgpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZkZyb21ET009ZnVuY3Rpb24oKXtyZXR1cm4gcygpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9LGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHQsITEpfSxlLnByb3RvdHlwZS5vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24odCl7cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdCwhMSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aG5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wYXRobmFtZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMubG9jYXRpb24ucGF0aG5hbWU9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlYXJjaCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2F0aW9uLnNlYXJjaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhhc2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5oYXNofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbil7YigpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXtiKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9oaXN0b3J5LmJhY2soKX0sZS5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6by5wLGFyZ3M6W21dfV19XX0sZX0oci50KSx2PW5ldyBvLnEoIlRSQU5TSVRJT05fSUQiKSxnPVt7cHJvdmlkZTpvLmQsdXNlRmFjdG9yeTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7bi5nZXQoby5lKS5kb25lUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7dmFyIG49cygpO0FycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShuLnF1ZXJ5U2VsZWN0b3JBbGwoZSwic3R5bGVbbmctdHJhbnNpdGlvbl0iKSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBuLmdldEF0dHJpYnV0ZShlLCJuZy10cmFuc2l0aW9uIik9PT10fSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbi5yZW1vdmUodCl9KX0pfX0sZGVwczpbdixtLG8ucl0sbXVsdGk6ITB9XSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5pbml0PWZ1bmN0aW9uKCl7T2JqZWN0KG8uQmEpKG5ldyB0KX0sdC5wcm90b3R5cGUuYWRkVG9XaW5kb3c9ZnVuY3Rpb24odCl7by5TYS5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uJiYobj0hMCk7dmFyIGk9dC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxuKTtpZihudWxsPT1pKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuIik7cmV0dXJuIGl9LG8uU2EuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxUZXN0YWJpbGl0aWVzKCl9LG8uU2EuZ2V0QWxsQW5ndWxhclJvb3RFbGVtZW50cz1mdW5jdGlvbigpe3JldHVybiB0LmdldEFsbFJvb3RFbGVtZW50cygpfSxvLlNhLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoby5TYS5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksby5TYS5mcmFtZXdvcmtTdGFiaWxpemVycy5wdXNoKGZ1bmN0aW9uKHQpe3ZhciBlPW8uU2EuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKSxuPWUubGVuZ3RoLGk9ITEscj1mdW5jdGlvbihlKXtpPWl8fGUsMD09LS1uJiZ0KGkpfTtlLmZvckVhY2goZnVuY3Rpb24odCl7dC53aGVuU3RhYmxlKHIpfSl9KX0sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1lKXJldHVybiBudWxsO3ZhciBpPXQuZ2V0VGVzdGFiaWxpdHkoZSk7cmV0dXJuIG51bGwhPWk/aTpuP3MoKS5pc1NoYWRvd1Jvb3QoZSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxzKCkuZ2V0SG9zdChlKSwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxzKCkucGFyZW50RWxlbWVudChlKSwhMCk6bnVsbH0sdH0oKTtmdW5jdGlvbiB3KHQsZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBDT01QSUxFRCYmQ09NUElMRUR8fCgoby5TYS5uZz1vLlNhLm5nfHx7fSlbdF09ZSl9dmFyIHg9e0FwcGxpY2F0aW9uUmVmOm8uZyxOZ1pvbmU6by56fSxDPSJwcm9iZSIsUz0iY29yZVRva2VucyI7ZnVuY3Rpb24gTyh0KXtyZXR1cm4gT2JqZWN0KG8uWCkodCl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdyhDLE8pLHcoUyxPYmplY3QoaS5hKSh7fSx4LCh0fHxbXSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZS5uYW1lXT1lLnRva2VuLHR9LHt9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIE99fXZhciBrPW5ldyBvLnEoIkV2ZW50TWFuYWdlclBsdWdpbnMiKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5fem9uZT1lLHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luPW5ldyBNYXAsdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hbmFnZXI9bn0pLHRoaXMuX3BsdWdpbnM9dC5zbGljZSgpLnJldmVyc2UoKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGUpLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLG4pfSx0LnByb3RvdHlwZS5nZXRab25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvbmV9LHQucHJvdG90eXBlLl9maW5kUGx1Z2luRm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldCh0KTtpZihlKXJldHVybiBlO2Zvcih2YXIgbj10aGlzLl9wbHVnaW5zLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHI9bltpXTtpZihyLnN1cHBvcnRzKHQpKXJldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQodCxyKSxyfXRocm93IG5ldyBFcnJvcigiTm8gZXZlbnQgbWFuYWdlciBwbHVnaW4gZm91bmQgZm9yIGV2ZW50ICIrdCl9LHR9KCksST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXMoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsdCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgIitpKyIgZm9yIGV2ZW50ICIrZSk7cmV0dXJuIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLGUsbil9LHR9KCksVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9zdHlsZXNTZXQ9bmV3IFNldH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3R5bGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1uZXcgU2V0O3QuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9zdHlsZXNTZXQuaGFzKHQpfHwoZS5fc3R5bGVzU2V0LmFkZCh0KSxuLmFkZCh0KSl9KSx0aGlzLm9uU3R5bGVzQWRkZWQobil9LHQucHJvdG90eXBlLm9uU3R5bGVzQWRkZWQ9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5nZXRBbGxTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zdHlsZXNTZXQpfSx0fSgpLFI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG4uX2hvc3ROb2Rlcz1uZXcgU2V0LG4uX3N0eWxlTm9kZXM9bmV3IFNldCxuLl9ob3N0Tm9kZXMuYWRkKGUuaGVhZCksbn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5fYWRkU3R5bGVzVG9Ib3N0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9bi5fZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aS50ZXh0Q29udGVudD10LG4uX3N0eWxlTm9kZXMuYWRkKGUuYXBwZW5kQ2hpbGQoaSkpfSl9LGUucHJvdG90eXBlLmFkZEhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5fYWRkU3R5bGVzVG9Ib3N0KHRoaXMuX3N0eWxlc1NldCx0KSx0aGlzLl9ob3N0Tm9kZXMuYWRkKHQpfSxlLnByb3RvdHlwZS5yZW1vdmVIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2hvc3ROb2Rlcy5kZWxldGUodCl9LGUucHJvdG90eXBlLm9uU3R5bGVzQWRkZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5fYWRkU3R5bGVzVG9Ib3N0KHQsbil9KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZU5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHMoKS5yZW1vdmUodCl9KX0sZX0oVCksQT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sUD0vJUNPTVAlL2csRD0iX25naG9zdC0lQ09NUCUiLE09Il9uZ2NvbnRlbnQtJUNPTVAlIjtmdW5jdGlvbiBOKHQsZSxuKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIHI9ZVtpXTtBcnJheS5pc0FycmF5KHIpP04odCxyLG4pOihyPXIucmVwbGFjZShQLHQpLG4ucHVzaChyKSl9cmV0dXJuIG59ZnVuY3Rpb24gTCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ITE9PT10KGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUucmV0dXJuVmFsdWU9ITEpfX12YXIgRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMucmVuZGVyZXJCeUNvbXBJZD1uZXcgTWFwLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5ldyBWKHQpfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe2lmKCF0fHwhZSlyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7c3dpdGNoKGUuZW5jYXBzdWxhdGlvbil7Y2FzZSBvLlIuRW11bGF0ZWQ6dmFyIG49dGhpcy5yZW5kZXJlckJ5Q29tcElkLmdldChlLmlkKTtyZXR1cm4gbnx8KG49bmV3IEgodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCxuKSksbi5hcHBseVRvSG9zdCh0KSxuO2Nhc2Ugby5SLk5hdGl2ZTpjYXNlIG8uUi5TaGFkb3dEb206cmV0dXJuIG5ldyBxKHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMuc2hhcmVkU3R5bGVzSG9zdCx0LGUpO2RlZmF1bHQ6aWYoIXRoaXMucmVuZGVyZXJCeUNvbXBJZC5oYXMoZS5pZCkpe3ZhciBpPU4oZS5pZCxlLnN0eWxlcyxbXSk7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyhpKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGUuaWQsdGhpcy5kZWZhdWx0UmVuZGVyZXIpfXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcn19LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LHR9KCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBlP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhBW2VdLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dCYmdC5pbnNlcnRCZWZvcmUoZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0JiZ0LnJlbW92ZUNoaWxkKGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT0ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0O2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHNlbGVjdG9yICInK3QrJyIgZGlkIG5vdCBtYXRjaCBhbnkgZWxlbWVudHMnKTtyZXR1cm4gZS50ZXh0Q29udGVudD0iIixlfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGV9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4saSl7aWYoaSl7ZT1pKyI6IitlO3ZhciByPUFbaV07cj90LnNldEF0dHJpYnV0ZU5TKHIsZSxuKTp0LnNldEF0dHJpYnV0ZShlLG4pfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXtpZihuKXt2YXIgaT1BW25dO2k/dC5yZW1vdmVBdHRyaWJ1dGVOUyhpLGUpOnQucmVtb3ZlQXR0cmlidXRlKG4rIjoiK2UpfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4saSl7aSZvLkcuRGFzaENhc2U/dC5zdHlsZS5zZXRQcm9wZXJ0eShlLG4saSZvLkcuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPW59LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtuJm8uRy5EYXNoQ2FzZT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnQuc3R5bGVbZV09IiJ9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXtCKGUsInByb3BlcnR5IiksdFtlXT1ufSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3Qubm9kZVZhbHVlPWV9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEIoZSwibGlzdGVuZXIiKSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsTChuKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LGUsTChuKSl9LHR9KCksej0iQCIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBCKHQsZSl7aWYodC5jaGFyQ29kZUF0KDApPT09eil0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIHRoZSBzeW50aGV0aWMgIitlKyIgIit0KycuIFBsZWFzZSBpbmNsdWRlIGVpdGhlciAiQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUiIG9yICJOb29wQW5pbWF0aW9uc01vZHVsZSIgaW4geW91ciBhcHBsaWNhdGlvbi4nKX12YXIgVSxIPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3IuY29tcG9uZW50PWk7dmFyIG89TihpLmlkLGkuc3R5bGVzLFtdKTtyZXR1cm4gbi5hZGRTdHlsZXMobyksci5jb250ZW50QXR0cj1NLnJlcGxhY2UoUCxpLmlkKSxyLmhvc3RBdHRyPUQucmVwbGFjZShQLGkuaWQpLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuYXBwbHlUb0hvc3Q9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcyxlLHRoaXMuaG9zdEF0dHIsIiIpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudC5jYWxsKHRoaXMsZSxuKTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcyxpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9LGV9KFYpLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgYT10LmNhbGwodGhpcyxlKXx8dGhpczthLnNoYXJlZFN0eWxlc0hvc3Q9bixhLmhvc3RFbD1pLGEuY29tcG9uZW50PXIsYS5zaGFkb3dSb290PXIuZW5jYXBzdWxhdGlvbj09PW8uUi5TaGFkb3dEb20/aS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSk6aS5jcmVhdGVTaGFkb3dSb290KCksYS5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3QoYS5zaGFkb3dSb290KTtmb3IodmFyIHM9TihyLmlkLHIuc3R5bGVzLFtdKSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dS50ZXh0Q29udGVudD1zW2xdLGEuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh1KX1yZXR1cm4gYX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5ub2RlT3JTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfSxlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbihlLG4pe3JldHVybiB0LnByb3RvdHlwZS5hcHBlbmRDaGlsZC5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4pfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSxuLGkpe3JldHVybiB0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmUuY2FsbCh0aGlzLHRoaXMubm9kZU9yU2hhZG93Um9vdChlKSxuLGkpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlLG4pe3JldHVybiB0LnByb3RvdHlwZS5yZW1vdmVDaGlsZC5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4pfSxlLnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3QodC5wcm90b3R5cGUucGFyZW50Tm9kZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpKSl9LGV9KFYpLFE9InVuZGVmaW5lZCIhPXR5cGVvZiBab25lJiZab25lLl9fc3ltYm9sX198fGZ1bmN0aW9uKHQpe3JldHVybiJfX3pvbmVfc3ltYm9sX18iK3R9LEc9USgiYWRkRXZlbnRMaXN0ZW5lciIpLFo9USgicmVtb3ZlRXZlbnRMaXN0ZW5lciIpLFc9e30sWT0iX196b25lX3N5bWJvbF9fcHJvcGFnYXRpb25TdG9wcGVkIjsidW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmVbUSgiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSYmKFU9e30pO3ZhciBLPWZ1bmN0aW9uKHQpe3JldHVybiEhVSYmVS5oYXNPd25Qcm9wZXJ0eSh0KX0sWD1mdW5jdGlvbih0KXt2YXIgZT1XW3QudHlwZV07aWYoZSl7dmFyIG49dGhpc1tlXTtpZihuKXt2YXIgaT1bdF07aWYoMT09PW4ubGVuZ3RoKXJldHVybihhPW5bMF0pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxpKTphLmhhbmRsZXIuYXBwbHkodGhpcyxpKTtmb3IodmFyIHI9bi5zbGljZSgpLG89MDtvPHIubGVuZ3RoJiYhMCE9PXRbWV07bysrKXt2YXIgYTsoYT1yW29dKS56b25lIT09Wm9uZS5jdXJyZW50P2Euem9uZS5ydW4oYS5oYW5kbGVyLHRoaXMsaSk6YS5oYW5kbGVyLmFwcGx5KHRoaXMsaSl9fX19LCQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ubmdab25lPW4saSYmT2JqZWN0KHIueCkoaSl8fG8ucGF0Y2hFdmVudCgpLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUucGF0Y2hFdmVudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRXZlbnQmJkV2ZW50JiZFdmVudC5wcm90b3R5cGUmJiFFdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKXt2YXIgdD1FdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPUV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMmJih0aGlzW1ldPSEwKSx0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcyxyPW47aWYoIXRbR118fG8uei5pc0luQW5ndWxhclpvbmUoKSYmIUsoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZXt2YXIgYT1XW2VdO2F8fChhPVdbZV09USgiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIHM9dFthXSxsPXMmJnMubGVuZ3RoPjA7c3x8KHM9dFthXT1bXSk7dmFyIHU9SyhlKT9ab25lLnJvb3Q6Wm9uZS5jdXJyZW50O2lmKDA9PT1zLmxlbmd0aClzLnB1c2goe3pvbmU6dSxoYW5kbGVyOnJ9KTtlbHNle2Zvcih2YXIgYz0hMSxmPTA7ZjxzLmxlbmd0aDtmKyspaWYoc1tmXS5oYW5kbGVyPT09cil7Yz0hMDticmVha31jfHxzLnB1c2goe3pvbmU6dSxoYW5kbGVyOnJ9KX1sfHx0W0ddKGUsWCwhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUscil9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10W1pdO2lmKCFpKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7dmFyIHI9V1tlXSxvPXImJnRbcl07aWYoIW8pcmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0LFtlLG4sITFdKTtmb3IodmFyIGE9ITEscz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uaGFuZGxlcj09PW4pe2E9ITAsby5zcGxpY2UocywxKTticmVha31hPzA9PT1vLmxlbmd0aCYmaS5hcHBseSh0LFtlLFgsITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KEkpLEo9e3BhbjohMCxwYW5zdGFydDohMCxwYW5tb3ZlOiEwLHBhbmVuZDohMCxwYW5jYW5jZWw6ITAscGFubGVmdDohMCxwYW5yaWdodDohMCxwYW51cDohMCxwYW5kb3duOiEwLHBpbmNoOiEwLHBpbmNoc3RhcnQ6ITAscGluY2htb3ZlOiEwLHBpbmNoZW5kOiEwLHBpbmNoY2FuY2VsOiEwLHBpbmNoaW46ITAscGluY2hvdXQ6ITAscHJlc3M6ITAscHJlc3N1cDohMCxyb3RhdGU6ITAscm90YXRlc3RhcnQ6ITAscm90YXRlbW92ZTohMCxyb3RhdGVlbmQ6ITAscm90YXRlY2FuY2VsOiEwLHN3aXBlOiEwLHN3aXBlbGVmdDohMCxzd2lwZXJpZ2h0OiEwLHN3aXBldXA6ITAsc3dpcGVkb3duOiEwLHRhcDohMH0sdHQ9bmV3IG8ucSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLGV0PW5ldyBvLnEoIkhhbW1lckxvYWRlciIpLG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZXZlbnRzPVtdLHRoaXMub3ZlcnJpZGVzPXt9fXJldHVybiB0LnByb3RvdHlwZS5idWlsZEhhbW1lcj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgSGFtbWVyKHQsdGhpcy5vcHRpb25zKTtmb3IodmFyIG4gaW4gZS5nZXQoInBpbmNoIikuc2V0KHtlbmFibGU6ITB9KSxlLmdldCgicm90YXRlIikuc2V0KHtlbmFibGU6ITB9KSx0aGlzLm92ZXJyaWRlcyllLmdldChuKS5zZXQodGhpcy5vdmVycmlkZXNbbl0pO3JldHVybiBlfSx0fSgpLGl0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8uX2NvbmZpZz1uLG8uY29uc29sZT1pLG8ubG9hZGVyPXIsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFKLmhhc093blByb3BlcnR5KHQudG9Mb3dlckNhc2UoKSkmJiF0aGlzLmlzQ3VzdG9tRXZlbnQodCl8fCF3aW5kb3cuSGFtbWVyJiYhdGhpcy5sb2FkZXImJih0aGlzLmNvbnNvbGUud2FybignVGhlICInK3QrJyIgZXZlbnQgY2Fubm90IGJlIGJvdW5kIGJlY2F1c2UgSGFtbWVyLkpTIGlzIG5vdCBsb2FkZWQgYW5kIG5vIGN1c3RvbSBsb2FkZXIgaGFzIGJlZW4gc3BlY2lmaWVkLicpLDEpKX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcyxyPXRoaXMubWFuYWdlci5nZXRab25lKCk7aWYoZT1lLnRvTG93ZXJDYXNlKCksIXdpbmRvdy5IYW1tZXImJnRoaXMubG9hZGVyKXt2YXIgbz0hMSxhPWZ1bmN0aW9uKCl7bz0hMH07cmV0dXJuIHRoaXMubG9hZGVyKCkudGhlbihmdW5jdGlvbigpe2lmKCF3aW5kb3cuSGFtbWVyKXJldHVybiBpLmNvbnNvbGUud2FybigiVGhlIGN1c3RvbSBIQU1NRVJfTE9BREVSIGNvbXBsZXRlZCwgYnV0IEhhbW1lci5KUyBpcyBub3QgcHJlc2VudC4iKSx2b2lkKGE9ZnVuY3Rpb24oKXt9KTtvfHwoYT1pLmFkZEV2ZW50TGlzdGVuZXIodCxlLG4pKX0pLmNhdGNoKGZ1bmN0aW9uKCl7aS5jb25zb2xlLndhcm4oJ1RoZSAiJytlKyciIGV2ZW50IGNhbm5vdCBiZSBib3VuZCBiZWNhdXNlIHRoZSBjdXN0b20gSGFtbWVyLkpTIGxvYWRlciBmYWlsZWQuJyksYT1mdW5jdGlvbigpe319KSxmdW5jdGlvbigpe2EoKX19cmV0dXJuIHIucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt2YXIgbz1pLl9jb25maWcuYnVpbGRIYW1tZXIodCksYT1mdW5jdGlvbih0KXtyLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXtuKHQpfSl9O3JldHVybiBvLm9uKGUsYSksZnVuY3Rpb24oKXtyZXR1cm4gby5vZmYoZSxhKX19KX0sZS5wcm90b3R5cGUuaXNDdXN0b21FdmVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29uZmlnLmV2ZW50cy5pbmRleE9mKHQpPi0xfSxlfShJKSxydD1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxvdD17YWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0LmFsdEtleX0sY29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jdHJsS2V5fSxtZXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1ldGFLZXl9LHNoaWZ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNoaWZ0S2V5fX0sYXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPWUucGFyc2VFdmVudE5hbWUodCl9LGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxuLGkpe3ZhciByPWUucGFyc2VFdmVudE5hbWUobiksbz1lLmV2ZW50Q2FsbGJhY2soci5mdWxsS2V5LGksdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gcygpLm9uQW5kQ2FuY2VsKHQsci5kb21FdmVudE5hbWUsbyl9KX0sZS5wYXJzZUV2ZW50TmFtZT1mdW5jdGlvbih0KXt2YXIgbj10LnRvTG93ZXJDYXNlKCkuc3BsaXQoIi4iKSxpPW4uc2hpZnQoKTtpZigwPT09bi5sZW5ndGh8fCJrZXlkb3duIiE9PWkmJiJrZXl1cCIhPT1pKXJldHVybiBudWxsO3ZhciByPWUuX25vcm1hbGl6ZUtleShuLnBvcCgpKSxvPSIiO2lmKHJ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5pbmRleE9mKHQpO2U+LTEmJihuLnNwbGljZShlLDEpLG8rPXQrIi4iKX0pLG8rPXIsMCE9bi5sZW5ndGh8fDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgYT17fTtyZXR1cm4gYS5kb21FdmVudE5hbWU9aSxhLmZ1bGxLZXk9byxhfSxlLmdldEV2ZW50RnVsbEtleT1mdW5jdGlvbih0KXt2YXIgZT0iIixuPXMoKS5nZXRFdmVudEtleSh0KTtyZXR1cm4iICI9PT0obj1uLnRvTG93ZXJDYXNlKCkpP249InNwYWNlIjoiLiI9PT1uJiYobj0iZG90IikscnQuZm9yRWFjaChmdW5jdGlvbihpKXtpIT1uJiYoMCxvdFtpXSkodCkmJihlKz1pKyIuIil9KSxlKz1ufSxlLmV2ZW50Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLGkpe3JldHVybiBmdW5jdGlvbihyKXtlLmdldEV2ZW50RnVsbEtleShyKT09PXQmJmkucnVuR3VhcmRlZChmdW5jdGlvbigpe3JldHVybiBuKHIpfSl9fSxlLl9ub3JtYWxpemVLZXk9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiZXNjIjpyZXR1cm4iZXNjYXBlIjtkZWZhdWx0OnJldHVybiB0fX0sZX0oSSksc3Q9ZnVuY3Rpb24oKXt9LGx0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kb2M9ZSxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnNhbml0aXplPWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtzd2l0Y2godCl7Y2FzZSBvLkkuTk9ORTpyZXR1cm4gZTtjYXNlIG8uSS5IVE1MOnJldHVybiBlIGluc3RhbmNlb2YgY3Q/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIkhUTUwiKSxPYmplY3Qoby5GYSkodGhpcy5fZG9jLFN0cmluZyhlKSkpO2Nhc2Ugby5JLlNUWUxFOnJldHVybiBlIGluc3RhbmNlb2YgZnQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlN0eWxlIiksT2JqZWN0KG8uR2EpKGUpKTtjYXNlIG8uSS5TQ1JJUFQ6aWYoZSBpbnN0YW5jZW9mIGR0KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJTY3JpcHQiKSxuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgc2NyaXB0IGNvbnRleHQiKTtjYXNlIG8uSS5VUkw6cmV0dXJuIGUgaW5zdGFuY2VvZiBwdHx8ZSBpbnN0YW5jZW9mIGh0P2UuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eToodGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJVUkwiKSxPYmplY3Qoby5IYSkoU3RyaW5nKGUpKSk7Y2FzZSBvLkkuUkVTT1VSQ0VfVVJMOmlmKGUgaW5zdGFuY2VvZiBwdClyZXR1cm4gZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5O3Rocm93IHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiUmVzb3VyY2VVUkwiKSxuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgcmVzb3VyY2UgVVJMIGNvbnRleHQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpfX0sZS5wcm90b3R5cGUuY2hlY2tOb3RTYWZlVmFsdWU9ZnVuY3Rpb24odCxlKXtpZih0IGluc3RhbmNlb2YgdXQpdGhyb3cgbmV3IEVycm9yKCJSZXF1aXJlZCBhIHNhZmUgIitlKyIsIGdvdCBhICIrdC5nZXRUeXBlTmFtZSgpKyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY3QodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZ0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcHQodCl9LGV9KHN0KSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICIrdGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIn0sdH0oKSxjdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJIVE1MIn0sZX0odXQpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlN0eWxlIn0sZX0odXQpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlNjcmlwdCJ9LGV9KHV0KSxodD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJVUkwifSxlfSh1dCkscHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iUmVzb3VyY2VVUkwifSxlfSh1dCksbXQ9W3twcm92aWRlOm8uQix1c2VWYWx1ZTpyLnl9LHtwcm92aWRlOm8uQyx1c2VWYWx1ZTpmdW5jdGlvbigpe2gubWFrZUN1cnJlbnQoKSxfLmluaXQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOnIudCx1c2VDbGFzczp5LGRlcHM6W21dfSx7cHJvdmlkZTptLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGRlcHM6W119XSxidD1PYmplY3Qoby5UKShvLkFhLCJicm93c2VyIixtdCk7ZnVuY3Rpb24geXQoKXtyZXR1cm4gbmV3IG8ubX12YXIgdnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJCcm93c2VyTW9kdWxlIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBJZiB5b3UgbmVlZCBhY2Nlc3MgdG8gY29tbW9uIGRpcmVjdGl2ZXMgc3VjaCBhcyBOZ0lmIGFuZCBOZ0ZvciBmcm9tIGEgbGF6eSBsb2FkZWQgbW9kdWxlLCBpbXBvcnQgQ29tbW9uTW9kdWxlIGluc3RlYWQuIil9cmV0dXJuIHQud2l0aFNlcnZlclRyYW5zaXRpb249ZnVuY3Rpb24oZSl7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOlt7cHJvdmlkZTpvLmMsdXNlVmFsdWU6ZS5hcHBJZH0se3Byb3ZpZGU6dix1c2VFeGlzdGluZzpvLmN9LGddfX0sdH0oKTsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fSxabjhEOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJwc1cwIikscj1uKCJtQ2hGIik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxPYmplY3QoaS5hKShyLmEsdCl9fSxhZWNkOmZ1bmN0aW9uKG1vZHVsZSxfX3dlYnBhY2tfZXhwb3J0c19fLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0IjtfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywiYSIsZnVuY3Rpb24oKXtyZXR1cm4gUHJlSW5pdExvYWRlclNlcnZpY2V9KTt2YXIgX3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygicmYzMCIpLF9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJBeXRSIiksX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fPV9fd2VicGFja19yZXF1aXJlX18oIkNjbkciKSxfYW5ndWxhcl9jb21tb25faHR0cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fPV9fd2VicGFja19yZXF1aXJlX18oInQvTmEiKSxQcmVJbml0TG9hZGVyU2VydmljZT1mdW5jdGlvbigpe2Z1bmN0aW9uIFByZUluaXRMb2FkZXJTZXJ2aWNlKHQpe3RoaXMuaHR0cD10fXJldHVybiBQcmVJbml0TG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZFBhZ2VBdEluaXQ9ZnVuY3Rpb24oKXtpZigwIT1fZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18uYS5wcm9kdWN0aW9uKXtjb25zb2xlLmxvZygiSVBMIDogSW5pdGlhbCBwYWdlIGxvYWRlciBbQVBQX0lOSVRJQUxJWkVSXSIpO3ZhciBjdXJyVXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmLHJlZ2V4PW5ldyBSZWdFeHAoIiNcXC8uKiIpLG1hdGNoQXJyYXk9Y3VyclVybC5tYXRjaChyZWdleCk7aWYoQXJyYXkuaXNBcnJheShtYXRjaEFycmF5KSYmbWF0Y2hBcnJheS5sZW5ndGgpe3ZhciBjdXJyUGF0aF8xPW1hdGNoQXJyYXlbMF0uc2xpY2UoMSk7Y29uc29sZS5sb2coIlVSTCA6ICIrY3VyclVybCksY29uc29sZS5sb2coIlBhdGggOiAiK2N1cnJQYXRoXzEpO3ZhciByZWNvcmQ9X3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uYS5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhZ2VOYW1lPT1jdXJyUGF0aF8xfSk7aWYodm9pZCAwPT1yZWNvcmQpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coIklQTCA6IE5vIHJlY29yZCBmb3VuZCwgcGFnZSBjYW4ndCBiZSBsb2FkZWQgaW5pdGlhbGx5LlxuSVBMIDogVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIHBhdGggaXMgbm90IHBhcnQgb2YgdGhlIG1haW4gY2h1bmsgdGhhdCBpcyBlbWJlZGRlZCBpbiB0aGUgaHRtbCBwYWdlIik7aWYoY29uc29sZS5sb2coIklQTCA6IENvcnJlc3BvbmRpbmcgcmVjb3JkIGZvdW5kIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKSwwPT1yZWNvcmQuY2h1bmtMb2FkZWQpe3ZhciByZXE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKHJlcS5vcGVuKCJHRVQiLHJlY29yZC5jaHVua1VSTCwhMSkscmVxLnNlbmQobnVsbCksMjAwPT09cmVxLnN0YXR1cyl7dmFyIGRlY29kZWREYXRhPWF0b2IocmVxLnJlc3BvbnNlVGV4dCk7ZXZhbChkZWNvZGVkRGF0YSkscmVjb3JkLmNodW5rTG9hZGVkPSEwLGNvbnNvbGUubG9nKCJJUEwgOiBMb2FkZWQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpfWVsc2UgY29uc29sZS5sb2coIklQTCA6IEVycm9yIHdoaWxlIGdldHRpbmcgZGF0YTogJWQgKCVzKSIscmVxLnN0YXR1cyxyZXEuc3RhdHVzVGV4dCl9fWVsc2UgY29uc29sZS5sb2coIklQTCA6IE1haW4gcGFnZSwgb3IgdW5jYXVnaHQgZXJyb3IuIil9fSxQcmVJbml0TG9hZGVyU2VydmljZS5uZ0luamVjdGFibGVEZWY9X2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLlUoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByZUluaXRMb2FkZXJTZXJ2aWNlKF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXy5ZKF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uYykpfSx0b2tlbjpQcmVJbml0TG9hZGVyU2VydmljZSxwcm92aWRlZEluOiJyb290In0pLFByZUluaXRMb2FkZXJTZXJ2aWNlfSgpfSxiN21XOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT1uKCJtclNHIikscj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsImFyZ3VtZW50IG91dCBvZiByYW5nZSIpfHx0aGlzO3JldHVybiBuLm5hbWU9IkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gaS5iKGUsdCksZX0oRXJyb3IpfSxibmU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCI2YmxGIikscj1uKCJpc2J5Iiksbz1uKCIyQmRqIiksYT1uKCI2N1kvIik7ZnVuY3Rpb24gcyh0LGUsbixsKXtyZXR1cm4gT2JqZWN0KG8uYSkobikmJihsPW4sbj12b2lkIDApLGw/cyh0LGUsbikucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIuYSkodCk/bC5hcHBseSh2b2lkIDAsdCk6bCh0KX0pKTpuZXcgaS5hKGZ1bmN0aW9uKGkpeyFmdW5jdGlvbiB0KGUsbixpLHIsbyl7dmFyIGE7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUV2ZW50TGlzdGVuZXJ9KGUpKXt2YXIgcz1lO2UuYWRkRXZlbnRMaXN0ZW5lcihuLGksbyksYT1mdW5jdGlvbigpe3JldHVybiBzLnJlbW92ZUV2ZW50TGlzdGVuZXIobixpLG8pfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmImZ1bmN0aW9uIj09dHlwZW9mIHQub2ZmfShlKSl7dmFyIGw9ZTtlLm9uKG4saSksYT1mdW5jdGlvbigpe3JldHVybiBsLm9mZihuLGkpfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlTGlzdGVuZXJ9KGUpKXt2YXIgdT1lO2UuYWRkTGlzdGVuZXIobixpKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIHUucmVtb3ZlTGlzdGVuZXIobixpKX19ZWxzZXtpZighZXx8IWUubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7Zm9yKHZhciBjPTAsZj1lLmxlbmd0aDtjPGY7YysrKXQoZVtjXSxuLGkscixvKX1yLmFkZChhKX0odCxlLGZ1bmN0aW9uKHQpe2kubmV4dChhcmd1bWVudHMubGVuZ3RoPjE/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTp0KX0saSxuKX0pfU9iamVjdH0sYnVqdDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGk9bigiQ2NuRyIpLHI9KG4oIlVvZEgiKSxuKCJJcDBSIiksbigiRnpxYyIpLG4oIldmNHAiKSksbz1uKCJkV1pnIiksYT1uKCJ3RncxIikscz0obigibExBUCIpLGkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9QG1lZGlhIChob3Zlcjpub25lKXsubWF0LWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9fS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXJhaXNlZC1idXR0b257dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1pY29uLWJ1dHRvbiBpe2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKSxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9fS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTpibG9jaztmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24sLm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtbWluaS1mYWIsLm1hdC1yYWlzZWQtYnV0dG9ue291dGxpbmU6c29saWQgMXB4fX0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGkubGIoMixbaS5oYig0MDI2NTMxODQsMSx7cmlwcGxlOjB9KSwodCgpKCksaS5SYSgxLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImNsYXNzIiwibWF0LWJ1dHRvbi13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwwKSwodCgpKCksaS5SYSgzLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXJpcHBsZSBtYXQtcmlwcGxlIl0sWyJtYXRSaXBwbGUiLCIiXV0sW1syLCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsbnVsbF0sWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuUWEoNCwyMTI5OTIsW1sxLDRdXSwwLHIudSxbaS5rLGkueixvLmEsWzIsci5rXSxbMixhLmFdXSx7Y2VudGVyZWQ6WzAsImNlbnRlcmVkIl0sZGlzYWJsZWQ6WzEsImRpc2FibGVkIl0sdHJpZ2dlcjpbMiwidHJpZ2dlciJdfSxudWxsKSwodCgpKCksaS5SYSg1LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDQsMCxuLmlzSWNvbkJ1dHRvbixuLl9pc1JpcHBsZURpc2FibGVkKCksbi5fZ2V0SG9zdEVsZW1lbnQoKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDMsMCxuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uLGkuYmIoZSw0KS51bmJvdW5kZWQpfSl9dmFyIHU9aS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfS5tYXQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX1AbWVkaWEgKGhvdmVyOm5vbmUpey5tYXQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcmFpc2VkLWJ1dHRvbnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtc3Ryb2tlZC1idXR0b257Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6MzRweH0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLC4yKSwwIDEycHggMTdweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1taW5pLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtbWluaS1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWljb24tYnV0dG9uIGl7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpLGJhY2tncm91bmQtY29sb3IgLjJzIGN1YmljLWJlemllciguMzUsMCwuMjUsMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX19Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257b3V0bGluZTpzb2xpZCAxcHh9fSJdLGRhdGE6e319KTtmdW5jdGlvbiBjKHQpe3JldHVybiBpLmxiKDIsW2kuaGIoNDAyNjUzMTg0LDEse3JpcHBsZTowfSksKHQoKSgpLGkuUmEoMSwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1idXR0b24td3JhcHBlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLmFiKG51bGwsMCksKHQoKSgpLGkuUmEoMywwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWJ1dHRvbi1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0UmlwcGxlIiwiIl1dLFtbMiwibWF0LWJ1dHRvbi1yaXBwbGUtcm91bmQiLG51bGxdLFsyLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDQsMjEyOTkyLFtbMSw0XV0sMCxyLnUsW2kuayxpLnosby5hLFsyLHIua10sWzIsYS5hXV0se2NlbnRlcmVkOlswLCJjZW50ZXJlZCJdLGRpc2FibGVkOlsxLCJkaXNhYmxlZCJdLHRyaWdnZXI6WzIsInRyaWdnZXIiXX0sbnVsbCksKHQoKSgpLGkuUmEoNSwwLG51bGwsbnVsbCwwLCJkaXYiLFtbImNsYXNzIiwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSw0LDAsbi5pc0ljb25CdXR0b24sbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwzLDAsbi5pc1JvdW5kQnV0dG9ufHxuLmlzSWNvbkJ1dHRvbixpLmJiKGUsNCkudW5ib3VuZGVkKX0pfX0sY3JuZDpmdW5jdGlvbih0LGUsbil7dmFyIGk9eyIuL2F0dHJpYnV0aW9uL2F0dHJpYnV0aW9uLWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsibnJscSIsMl0sIi4vYmlvbG9neS1zZWN0aW9uL2Jpb2xvZ3ktc2VjdGlvbi1sYXllci5tb2R1bGUubmdmYWN0b3J5IjpbImFBS0QiLDFdLCIuL3N1cHBvcnQtc2VjdGlvbi9zdXBwb3J0LXNlY3Rpb24tbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJONGxwIiwwXSwiLi90ZWFtLXJvc3Rlci90ZWFtLXJvc3Rlci1sYXllci5tb2R1bGUubmdmYWN0b3J5IjpbIlRrWWsiLDNdLCIuL3dpa2ktbGlnaHRwcm94eS93aWtpLWxpZ2h0cHJveHktbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJnRGpjIiw0XX07ZnVuY3Rpb24gcih0KXt2YXIgZT1pW3RdO3JldHVybiBlP24uZShlWzFdKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG4oZVswXSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgIicrdCsnIi4nKTt0aHJvdyBlLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGV9KX1yLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoaSl9LHIuaWQ9ImNybmQiLHQuZXhwb3J0cz1yfSxkV1pnOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgaSxyLG89bigiQ2NuRyIpLGE9bigiSXAwUiIpLHM9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsJiZJbnRsLnY4QnJlYWtJdGVyYXRvcixsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9wbGF0Zm9ybUlkPXQsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9PYmplY3QoYS53KSh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFzKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5ZKShvLkIsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB1KCl7aWYobnVsbD09aSYmInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBpPSEwfX0pKX1maW5hbGx5e2k9aXx8ITF9cmV0dXJuIGl9dmFyIGM9WyJjb2xvciIsImJ1dHRvbiIsImNoZWNrYm94IiwiZGF0ZSIsImRhdGV0aW1lLWxvY2FsIiwiZW1haWwiLCJmaWxlIiwiaGlkZGVuIiwiaW1hZ2UiLCJtb250aCIsIm51bWJlciIsInBhc3N3b3JkIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic2VhcmNoIiwic3VibWl0IiwidGVsIiwidGV4dCIsInRpbWUiLCJ1cmwiLCJ3ZWVrIl07ZnVuY3Rpb24gZigpe2lmKHIpcmV0dXJuIHI7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiByPW5ldyBTZXQoYyk7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gcj1uZXcgU2V0KGMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNldEF0dHJpYnV0ZSgidHlwZSIsZSksdC50eXBlPT09ZX0pKX12YXIgZD1mdW5jdGlvbigpe319LGR6Z1Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIm5rWTciKSxvPW4oImlzYnkiKSxhPW4oIk1HQlMiKSxzPW4oInpvdG0iKSxsPW4oIklVVGIiKSx1PXt9O2Z1bmN0aW9uIGMoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49bnVsbCxpPW51bGw7cmV0dXJuIE9iamVjdChyLmEpKHRbdC5sZW5ndGgtMV0pJiYoaT10LnBvcCgpKSwiZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKG49dC5wb3AoKSksMT09PXQubGVuZ3RoJiZPYmplY3Qoby5hKSh0WzBdKSYmKHQ9dFswXSksT2JqZWN0KGwuYSkodCxpKS5saWZ0KG5ldyBmKG4pKX12YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBkKHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfSx0fSgpLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnJlc3VsdFNlbGVjdG9yPW4saS5hY3RpdmU9MCxpLnZhbHVlcz1bXSxpLm9ic2VydmFibGVzPVtdLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2godSksdGhpcy5vYnNlcnZhYmxlcy5wdXNoKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9ic2VydmFibGVzLGU9dC5sZW5ndGg7aWYoMD09PWUpdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO2Vsc2V7dGhpcy5hY3RpdmU9ZSx0aGlzLnRvUmVzcG9uZD1lO2Zvcih2YXIgbj0wO248ZTtuKyspe3ZhciBpPXRbbl07dGhpcy5hZGQoT2JqZWN0KHMuYSkodGhpcyxpLGksbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/b1tuXT09PXU/LS10aGlzLnRvUmVzcG9uZDp0aGlzLnRvUmVzcG9uZDowO29bbl09ZSwwPT09YSYmKHRoaXMucmVzdWx0U2VsZWN0b3I/dGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3Iobyk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KG8uc2xpY2UoKSkpfSxlLnByb3RvdHlwZS5fdHJ5UmVzdWx0U2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5yZXN1bHRTZWxlY3Rvci5hcHBseSh0aGlzLHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShhLmEpfSxlRGtQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBGfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigibjZnRyIpLG89bigicUFsUyIpLGE9bigiSXAwUiIpLHM9bigibXJTRyIpLGw9bigiSzlJYSIpLHU9bigiNmJsRiIpLGM9bigicDBpYiIpLGY9bigicHVnVCIpLGQ9bigidDlmWiIpLGg9bigibnkyNCIpLHA9bigiZFdaZyIpLG09bigiNGMzNSIpLGI9KG4oIllTaDIiKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0fSgpKSx5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5zY3JvbGxTdHJhdGVneT1uZXcgYix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHQmJk9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGVbbl09dFtuXX0pfX0oKTtmdW5jdGlvbiB2KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIGcodCxlKXtpZigic3RhcnQiIT09ZSYmImVuZCIhPT1lJiYiY2VudGVyIiE9PWUpdGhyb3cgRXJyb3IoIkNvbm5lY3RlZFBvc2l0aW9uOiBJbnZhbGlkICIrdCsnICInK2UrJyIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLicpfXZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9T2JqZWN0KHIuZCkoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9T2JqZWN0KHIuZCkoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNFbmFibGVkKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10aGlzLl9kb2N1bWVudC5ib2R5LG49dC5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiIsaT1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsdC5zdHlsZS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LHQuc3R5bGUudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIix3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1uLGUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9aX19LHQucHJvdG90eXBlLl9jYW5CZUVuYWJsZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTt2YXIgdD10aGlzLl9kb2N1bWVudC5ib2R5LGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gdC5zY3JvbGxIZWlnaHQ+ZS5oZWlnaHR8fHQuc2Nyb2xsV2lkdGg+ZS53aWR0aH0sdH0oKTtmdW5jdGlvbiB3KCl7cmV0dXJuIEVycm9yKCJTY3JvbGwgc3RyYXRlZ3kgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZC4iKX12YXIgeD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dmFyIHI9dGhpczt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2NvbmZpZz1pLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2RldGFjaD1mdW5jdGlvbigpe3IuZGlzYWJsZSgpLHIuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmci5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiByLl9vdmVybGF5UmVmLmRldGFjaCgpfSl9fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7aWYodGhpcy5fb3ZlcmxheVJlZil0aHJvdyB3KCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pe3ZhciBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGU9dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdC5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50Ll9jb25maWcudGhyZXNob2xkP3QuX2RldGFjaCgpOnQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCk7ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYm90dG9tPGUudG9wfHx0LnRvcD5lLmJvdHRvbXx8dC5yaWdodDxlLmxlZnR8fHQubGVmdD5lLnJpZ2h0fSl9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9wPGUudG9wfHx0LmJvdHRvbT5lLmJvdHRvbXx8dC5sZWZ0PGUubGVmdHx8dC5yaWdodD5lLnJpZ2h0fSl9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fY29uZmlnPWksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IHcoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9ufHwodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQodGhpcy5fY29uZmlnP3RoaXMuX2NvbmZpZy5zY3JvbGxUaHJvdHRsZTowKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZih0Ll9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdC5fY29uZmlnJiZ0Ll9jb25maWcuYXV0b0Nsb3NlKXt2YXIgZT10Ll9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxpPW4ud2lkdGgscj1uLmhlaWdodDtDKGUsW3t3aWR0aDppLGhlaWdodDpyLGJvdHRvbTpyLHJpZ2h0OmksdG9wOjAsbGVmdDowfV0pJiYodC5kaXNhYmxlKCksdC5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9vdmVybGF5UmVmLmRldGFjaCgpfSkpfX0pKX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX0sdH0oKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2YXIgcj10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ub29wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBifSx0aGlzLmNsb3NlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeChyLl9zY3JvbGxEaXNwYXRjaGVyLHIuX25nWm9uZSxyLl92aWV3cG9ydFJ1bGVyLHQpfSx0aGlzLmJsb2NrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfKHIuX3ZpZXdwb3J0UnVsZXIsci5fZG9jdW1lbnQpfSx0aGlzLnJlcG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPKHIuX3Njcm9sbERpc3BhdGNoZXIsci5fdmlld3BvcnRSdWxlcixyLl9uZ1pvbmUsdCl9LHRoaXMuX2RvY3VtZW50PWl9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKG8uYyksT2JqZWN0KGkuWSkoby5lKSxPYmplY3QoaS5ZKShpLnopLE9iamVjdChpLlkpKGEuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLl9hdHRhY2hlZE92ZXJsYXlzLGk9bi5sZW5ndGgtMTtpPi0xO2ktLSlpZihuW2ldLl9rZXlkb3duRXZlbnRTdWJzY3JpcHRpb25zPjApe25baV0uX2tleWRvd25FdmVudHMubmV4dCh0KTticmVha319LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLnJlbW92ZSh0KSx0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKShhLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jdW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2NvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX0sdC5wcm90b3R5cGUuZ2V0Q29udGFpbmVyRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fSx0LnByb3RvdHlwZS5fY3JlYXRlQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb250YWluZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9dH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuWSkoYS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEpe3ZhciBzPXRoaXM7dGhpcy5fcG9ydGFsT3V0bGV0PXQsdGhpcy5faG9zdD1lLHRoaXMuX3BhbmU9bix0aGlzLl9jb25maWc9aSx0aGlzLl9uZ1pvbmU9cix0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9byx0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLHRoaXMuX2JhY2tkcm9wQ2xpY2s9bmV3IGwuYSx0aGlzLl9hdHRhY2htZW50cz1uZXcgbC5hLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBsLmEsdGhpcy5fa2V5ZG93bkV2ZW50c09ic2VydmFibGU9dS5hLmNyZWF0ZShmdW5jdGlvbih0KXt2YXIgZT1zLl9rZXlkb3duRXZlbnRzLnN1YnNjcmliZSh0KTtyZXR1cm4gcy5fa2V5ZG93bkV2ZW50U3Vic2NyaXB0aW9ucysrLGZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZSgpLHMuX2tleWRvd25FdmVudFN1YnNjcmlwdGlvbnMtLX19KSx0aGlzLl9rZXlkb3duRXZlbnRzPW5ldyBsLmEsdGhpcy5fa2V5ZG93bkV2ZW50U3Vic2NyaXB0aW9ucz0wLGkuc2Nyb2xsU3RyYXRlZ3kmJmkuc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm92ZXJsYXlFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJiYWNrZHJvcEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaG9zdEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faG9zdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2godCk7cmV0dXJuIHRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5hdHRhY2godGhpcyksIXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCYmdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5faG9zdCksdGhpcy5fdXBkYXRlU3RhY2tpbmdPcmRlcigpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCksdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKE9iamVjdChkLmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLmhhc0F0dGFjaGVkKCkmJmUudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSxufSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuaGFzQXR0YWNoZWQoKSl7dGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITEpLHRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmRpc2FibGUoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCExKTt2YXIgZT10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7dGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyk7dmFyIG49dGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KGguYSkoT2JqZWN0KGMuYSkodGhpcy5fYXR0YWNobWVudHMsdGhpcy5fZGV0YWNobWVudHMpKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fcGFuZSYmdC5faG9zdCYmMCE9PXQuX3BhbmUuY2hpbGRyZW4ubGVuZ3RofHwodC5faG9zdCYmdC5faG9zdC5wYXJlbnRFbGVtZW50JiYodC5fcHJldmlvdXNIb3N0UGFyZW50PXQuX2hvc3QucGFyZW50RWxlbWVudCx0Ll9wcmV2aW91c0hvc3RQYXJlbnQucmVtb3ZlQ2hpbGQodC5faG9zdCkpLG4udW5zdWJzY3JpYmUoKSl9KTtyZXR1cm4gZX19LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnROb2RlJiYodGhpcy5faG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX2hvc3Q9bnVsbCksdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX3BhbmU9bnVsbCx0JiZ0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fZGV0YWNobWVudHMuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaGFzQXR0YWNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9LHQucHJvdG90eXBlLmJhY2tkcm9wQ2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BDbGljay5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuYXR0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmRldGFjaG1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5rZXlkb3duRXZlbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWRvd25FdmVudHNPYnNlcnZhYmxlfSx0LnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29uZmlnfSx0LnByb3RvdHlwZS51cGRhdGVQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5hcHBseSgpfSx0LnByb3RvdHlwZS51cGRhdGVTaXplPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbmZpZz1PYmplY3Qocy5hKSh7fSx0aGlzLl9jb25maWcsdCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKX0sdC5wcm90b3R5cGUuc2V0RGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbmZpZz1PYmplY3Qocy5hKSh7fSx0aGlzLl9jb25maWcse2RpcmVjdGlvbjp0fSksdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpfSx0LnByb3RvdHlwZS5nZXREaXJlY3Rpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb25maWcuZGlyZWN0aW9uO3JldHVybiB0PyJzdHJpbmciPT10eXBlb2YgdD90OnQudmFsdWU6Imx0ciJ9LHQucHJvdG90eXBlLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5nZXREaXJlY3Rpb24oKSl9LHQucHJvdG90eXBlLl91cGRhdGVFbGVtZW50U2l6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhbmUuc3R5bGU7dC53aWR0aD1PYmplY3Qoci5kKSh0aGlzLl9jb25maWcud2lkdGgpLHQuaGVpZ2h0PU9iamVjdChyLmQpKHRoaXMuX2NvbmZpZy5oZWlnaHQpLHQubWluV2lkdGg9T2JqZWN0KHIuZCkodGhpcy5fY29uZmlnLm1pbldpZHRoKSx0Lm1pbkhlaWdodD1PYmplY3Qoci5kKSh0aGlzLl9jb25maWcubWluSGVpZ2h0KSx0Lm1heFdpZHRoPU9iamVjdChyLmQpKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCksdC5tYXhIZWlnaHQ9T2JqZWN0KHIuZCkodGhpcy5fY29uZmlnLm1heEhlaWdodCl9LHQucHJvdG90eXBlLl90b2dnbGVQb2ludGVyRXZlbnRzPWZ1bmN0aW9uKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyJhdXRvIjoibm9uZSJ9LHQucHJvdG90eXBlLl9hdHRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcywhMCksdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5faG9zdCksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXtyZXR1cm4gdC5fYmFja2Ryb3BDbGljay5uZXh0KGUpfSksInVuZGVmaW5lZCIhPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dC5fYmFja2Ryb3BFbGVtZW50JiZ0Ll9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpfSx0LnByb3RvdHlwZS5fdXBkYXRlU3RhY2tpbmdPcmRlcj1mdW5jdGlvbigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX0sdC5wcm90b3R5cGUuZGV0YWNoQmFja2Ryb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fYmFja2Ryb3BFbGVtZW50O2lmKGUpe3ZhciBuLGk9ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCksY2xlYXJUaW1lb3V0KG4pfTtlLmNsYXNzTGlzdC5yZW1vdmUoImNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmciKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3NlcyhlLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCExKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGkpfSksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixuPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KGksNTAwKX0pfX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuY2xhc3NMaXN0O09iamVjdChyLmIpKGUpLmZvckVhY2goZnVuY3Rpb24odCl7bj9pLmFkZCh0KTppLnJlbW92ZSh0KX0pfSx0fSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscil7dmFyIG89dGhpczt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX292ZXJsYXlDb250YWluZXI9cix0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuc2Nyb2xsYWJsZXM9W10sdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcz1uZXcgbC5hLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj1mLmEuRU1QVFksdGhpcy5fb2Zmc2V0WD0wLHRoaXMuX29mZnNldFk9MCx0aGlzLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnM9MCx0aGlzLnBvc2l0aW9uQ2hhbmdlcz11LmEuY3JlYXRlKGZ1bmN0aW9uKHQpe3ZhciBlPW8uX3Bvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUodCk7cmV0dXJuIG8uX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucysrLGZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZSgpLG8uX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucy0tfX0pLHRoaXMuc2V0T3JpZ2luKHQpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBvc2l0aW9ucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5fb3ZlcmxheVJlZiYmdCE9PXRoaXMuX292ZXJsYXlSZWYpdGhyb3cgRXJyb3IoIlRoaXMgcG9zaXRpb24gc3RyYXRlZ3kgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhbiBvdmVybGF5Iik7dGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3giKSx0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fYm91bmRpbmdCb3g9dC5ob3N0RWxlbWVudCx0aGlzLl9wYW5lPXQub3ZlcmxheUVsZW1lbnQsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkoKX0pfSx0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe2lmKCEodGhpcy5faXNEaXNwb3NlZHx8dGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpKWlmKCF0aGlzLl9pc0luaXRpYWxSZW5kZXImJnRoaXMuX3Bvc2l0aW9uTG9ja2VkJiZ0aGlzLl9sYXN0UG9zaXRpb24pdGhpcy5yZWFwcGx5TGFzdFBvc2l0aW9uKCk7ZWxzZXt0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX29yaWdpblJlY3Q9dGhpcy5fb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zm9yKHZhciB0LGU9dGhpcy5fb3JpZ2luUmVjdCxuPXRoaXMuX292ZXJsYXlSZWN0LGk9dGhpcy5fdmlld3BvcnRSZWN0LHI9W10sbz0wLGE9dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9dGhpcy5fZ2V0T3JpZ2luUG9pbnQoZSxzKSx1PXRoaXMuX2dldE92ZXJsYXlQb2ludChsLG4scyksYz10aGlzLl9nZXRPdmVybGF5Rml0KHUsbixpLHMpO2lmKGMuaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihzLGwpO3RoaXMuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnMoYyx1LGkpP3IucHVzaCh7cG9zaXRpb246cyxvcmlnaW46bCxvdmVybGF5UmVjdDpuLGJvdW5kaW5nQm94UmVjdDp0aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QobCxzKX0pOighdHx8dC5vdmVybGF5Rml0LnZpc2libGVBcmVhPGMudmlzaWJsZUFyZWEpJiYodD17b3ZlcmxheUZpdDpjLG92ZXJsYXlQb2ludDp1LG9yaWdpblBvaW50OmwscG9zaXRpb246cyxvdmVybGF5UmVjdDpufSl9aWYoci5sZW5ndGgpe2Zvcih2YXIgZj1udWxsLGQ9LTEsaD0wLHA9cjtoPHAubGVuZ3RoO2grKyl7dmFyIG09cFtoXSxiPW0uYm91bmRpbmdCb3hSZWN0LndpZHRoKm0uYm91bmRpbmdCb3hSZWN0LmhlaWdodCoobS5wb3NpdGlvbi53ZWlnaHR8fDEpO2I+ZCYmKGQ9YixmPW0pfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oZi5wb3NpdGlvbixmLm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHQucG9zaXRpb24sdC5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LnBvc2l0aW9uLHQub3JpZ2luUG9pbnQpfX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5kZXRhY2goKSx0aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2lzRGlzcG9zZWQ9ITApfSx0LnByb3RvdHlwZS5yZWFwcGx5TGFzdFBvc2l0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2lzRGlzcG9zZWQmJighdGhpcy5fcGxhdGZvcm18fHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcikpe3RoaXMuX29yaWdpblJlY3Q9dGhpcy5fb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCk7dmFyIHQ9dGhpcy5fbGFzdFBvc2l0aW9ufHx0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnNbMF0sZT10aGlzLl9nZXRPcmlnaW5Qb2ludCh0aGlzLl9vcmlnaW5SZWN0LHQpO3RoaXMuX2FwcGx5UG9zaXRpb24odCxlKX19LHQucHJvdG90eXBlLndpdGhTY3JvbGxhYmxlQ29udGFpbmVycz1mdW5jdGlvbih0KXt0aGlzLnNjcm9sbGFibGVzPXR9LHQucHJvdG90eXBlLndpdGhQb3NpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LC0xPT09dC5pbmRleE9mKHRoaXMuX2xhc3RQb3NpdGlvbikmJih0aGlzLl9sYXN0UG9zaXRpb249bnVsbCksdGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0aGlzfSx0LnByb3RvdHlwZS53aXRoVmlld3BvcnRNYXJnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEZsZXhpYmxlRGltZW5zaW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz10LHRoaXN9LHQucHJvdG90eXBlLndpdGhHcm93QWZ0ZXJPcGVuPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fZ3Jvd0FmdGVyT3Blbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhQdXNoPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fY2FuUHVzaD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhMb2NrZWRQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPXQsdGhpc30sdC5wcm90b3R5cGUuc2V0T3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCBpbnN0YW5jZW9mIGkuaz90Lm5hdGl2ZUVsZW1lbnQ6dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoRGVmYXVsdE9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29mZnNldFg9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoRGVmYXVsdE9mZnNldFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29mZnNldFk9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoVHJhbnNmb3JtT3JpZ2luT249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yPXQsdGhpc30sdC5wcm90b3R5cGUuX2dldE9yaWdpblBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIG47aWYoImNlbnRlciI9PWUub3JpZ2luWCluPXQubGVmdCt0LndpZHRoLzI7ZWxzZXt2YXIgaT10aGlzLl9pc1J0bCgpP3QucmlnaHQ6dC5sZWZ0LHI9dGhpcy5faXNSdGwoKT90LmxlZnQ6dC5yaWdodDtuPSJzdGFydCI9PWUub3JpZ2luWD9pOnJ9cmV0dXJue3g6bix5OiJjZW50ZXIiPT1lLm9yaWdpblk/dC50b3ArdC5oZWlnaHQvMjoidG9wIj09ZS5vcmlnaW5ZP3QudG9wOnQuYm90dG9tfX0sdC5wcm90b3R5cGUuX2dldE92ZXJsYXlQb2ludD1mdW5jdGlvbih0LGUsbil7dmFyIGk7cmV0dXJuIGk9ImNlbnRlciI9PW4ub3ZlcmxheVg/LWUud2lkdGgvMjoic3RhcnQiPT09bi5vdmVybGF5WD90aGlzLl9pc1J0bCgpPy1lLndpZHRoOjA6dGhpcy5faXNSdGwoKT8wOi1lLndpZHRoLHt4OnQueCtpLHk6dC55KygiY2VudGVyIj09bi5vdmVybGF5WT8tZS5oZWlnaHQvMjoidG9wIj09bi5vdmVybGF5WT8wOi1lLmhlaWdodCl9fSx0LnByb3RvdHlwZS5fZ2V0T3ZlcmxheUZpdD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10Lngsbz10LnksYT10aGlzLl9nZXRPZmZzZXQoaSwieCIpLHM9dGhpcy5fZ2V0T2Zmc2V0KGksInkiKTthJiYocis9YSkscyYmKG8rPXMpO3ZhciBsPTAtbyx1PW8rZS5oZWlnaHQtbi5oZWlnaHQsYz10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhlLndpZHRoLDAtcixyK2Uud2lkdGgtbi53aWR0aCksZj10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhlLmhlaWdodCxsLHUpLGQ9YypmO3JldHVybnt2aXNpYmxlQXJlYTpkLGlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0OmUud2lkdGgqZS5oZWlnaHQ9PT1kLGZpdHNJblZpZXdwb3J0VmVydGljYWxseTpmPT09ZS5oZWlnaHQsZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHk6Yz09ZS53aWR0aH19LHQucHJvdG90eXBlLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe3ZhciBpPW4uYm90dG9tLWUueSxyPW4ucmlnaHQtZS54LG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5IZWlnaHQsYT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoO3JldHVybih0LmZpdHNJblZpZXdwb3J0VmVydGljYWxseXx8bnVsbCE9byYmbzw9aSkmJih0LmZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5fHxudWxsIT1hJiZhPD1yKX19LHQucHJvdG90eXBlLl9wdXNoT3ZlcmxheU9uU2NyZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fdmlld3BvcnRSZWN0LGk9TWF0aC5tYXgodC54K2Uud2lkdGgtbi5yaWdodCwwKSxyPU1hdGgubWF4KHQueStlLmhlaWdodC1uLmJvdHRvbSwwKSxvPU1hdGgubWF4KG4udG9wLXQueSwwKSxhPU1hdGgubWF4KG4ubGVmdC10LngsMCk7cmV0dXJue3g6dC54KyhlLndpZHRoPD1uLndpZHRoP2F8fC1pOm4ubGVmdC10LngpLHk6dC55KyhlLmhlaWdodDw9bi5oZWlnaHQ/b3x8LXI6bi50b3AtdC55KX19LHQucHJvdG90eXBlLl9hcHBseVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fc2V0VHJhbnNmb3JtT3JpZ2luKHQpLHRoaXMuX3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKGUsdCksdGhpcy5fc2V0Qm91bmRpbmdCb3hTdHlsZXMoZSx0KSx0aGlzLl9sYXN0UG9zaXRpb249dCx0aGlzLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnM+MCl7dmFyIG49bmV3IGZ1bmN0aW9uKHQsZSl7dGhpcy5jb25uZWN0aW9uUGFpcj10LHRoaXMuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzPWV9KHQsdGhpcy5fZ2V0U2Nyb2xsVmlzaWJpbGl0eSgpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChuKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9LHQucHJvdG90eXBlLl9zZXRUcmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24odCl7aWYodGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3Ipe3ZhciBlLG49dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3RvciksaT10Lm92ZXJsYXlZO2U9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49ZSsiICIraX19LHQucHJvdG90eXBlLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3Q9ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbyxhLHMsbD10aGlzLl92aWV3cG9ydFJlY3QsdT10aGlzLl9pc1J0bCgpO2lmKCJ0b3AiPT09ZS5vdmVybGF5WSlpPXQueSxuPWwuYm90dG9tLXQueTtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSluPWwuaGVpZ2h0LShyPWwuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luKSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle3ZhciBjPU1hdGgubWluKGwuYm90dG9tLXQueSx0LnktbC5sZWZ0KSxmPXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0O2k9dC55LWMsKG49MipjKT5mJiYhdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGk9dC55LWYvMil9aWYoImVuZCI9PT1lLm92ZXJsYXlYJiYhdXx8InN0YXJ0Ij09PWUub3ZlcmxheVgmJnUpcz1sLnJpZ2h0LXQueCt0aGlzLl92aWV3cG9ydE1hcmdpbixvPXQueC1sLmxlZnQ7ZWxzZSBpZigic3RhcnQiPT09ZS5vdmVybGF5WCYmIXV8fCJlbmQiPT09ZS5vdmVybGF5WCYmdSlhPXQueCxvPWwucmlnaHQtdC54O2Vsc2V7Yz1NYXRoLm1pbihsLnJpZ2h0LXQueCx0LngtbC50b3ApO3ZhciBkPXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGg7YT10LngtYywobz0yKmMpPmQmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYoYT10LngtZC8yKX1yZXR1cm57dG9wOmksbGVmdDphLGJvdHRvbTpyLHJpZ2h0OnMsd2lkdGg6byxoZWlnaHQ6bn19LHQucHJvdG90eXBlLl9zZXRCb3VuZGluZ0JveFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpO3RoaXMuX2lzSW5pdGlhbFJlbmRlcnx8dGhpcy5fZ3Jvd0FmdGVyT3Blbnx8KG4uaGVpZ2h0PU1hdGgubWluKG4uaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxuLndpZHRoPU1hdGgubWluKG4ud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO3ZhciBpPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlpLnRvcD1pLmxlZnQ9IjAiLGkuYm90dG9tPWkucmlnaHQ9IiIsaS53aWR0aD1pLmhlaWdodD0iMTAwJSI7ZWxzZXt2YXIgbz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heEhlaWdodCxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4V2lkdGg7aS5oZWlnaHQ9T2JqZWN0KHIuZCkobi5oZWlnaHQpLGkudG9wPU9iamVjdChyLmQpKG4udG9wKSxpLmJvdHRvbT1PYmplY3Qoci5kKShuLmJvdHRvbSksaS53aWR0aD1PYmplY3Qoci5kKShuLndpZHRoKSxpLmxlZnQ9T2JqZWN0KHIuZCkobi5sZWZ0KSxpLnJpZ2h0PU9iamVjdChyLmQpKG4ucmlnaHQpLGkuYWxpZ25JdGVtcz0iY2VudGVyIj09PWUub3ZlcmxheVg/ImNlbnRlciI6ImVuZCI9PT1lLm92ZXJsYXlYPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLGkuanVzdGlmeUNvbnRlbnQ9ImNlbnRlciI9PT1lLm92ZXJsYXlZPyJjZW50ZXIiOiJib3R0b20iPT09ZS5vdmVybGF5WT8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixvJiYoaS5tYXhIZWlnaHQ9T2JqZWN0KHIuZCkobykpLGEmJihpLm1heFdpZHRoPU9iamVjdChyLmQpKGEpKX10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPW4sUih0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxpKX0sdC5wcm90b3R5cGUuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXM9ZnVuY3Rpb24oKXtSKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9LHQucHJvdG90eXBlLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzPWZ1bmN0aW9uKCl7Uih0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiJ9KX0sdC5wcm90b3R5cGUuX3NldE92ZXJsYXlFbGVtZW50U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307dGhpcy5faGFzRXhhY3RQb3NpdGlvbigpPyhSKG4sdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQpKSxSKG4sdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQpKSk6bi5wb3NpdGlvbj0ic3RhdGljIjt2YXIgaT0iIixyPXRoaXMuX2dldE9mZnNldChlLCJ4Iiksbz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO3ImJihpKz0idHJhbnNsYXRlWCgiK3IrInB4KSAiKSxvJiYoaSs9InRyYW5zbGF0ZVkoIitvKyJweCkiKSxuLnRyYW5zZm9ybT1pLnRyaW0oKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMmJnRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0JiYobi5tYXhIZWlnaHQ9IiIpLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyYmdGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aCYmKG4ubWF4V2lkdGg9IiIpLFIodGhpcy5fcGFuZS5zdHlsZSxuKX0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVk9ZnVuY3Rpb24odCxlKXt2YXIgbj17dG9wOm51bGwsYm90dG9tOm51bGx9LGk9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7dGhpcy5faXNQdXNoZWQmJihpPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4oaSx0aGlzLl9vdmVybGF5UmVjdCkpO3ZhciBvPXRoaXMuX292ZXJsYXlDb250YWluZXI/dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOjA7cmV0dXJuIGkueS09bywiYm90dG9tIj09PXQub3ZlcmxheVk/bi5ib3R0b209dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC0oaS55K3RoaXMuX292ZXJsYXlSZWN0LmhlaWdodCkrInB4IjpuLnRvcD1PYmplY3Qoci5kKShpLnkpLG59LHQucHJvdG90eXBlLl9nZXRFeGFjdE92ZXJsYXlYPWZ1bmN0aW9uKHQsZSl7dmFyIG49e2xlZnQ6bnVsbCxyaWdodDpudWxsfSxpPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKGk9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihpLHRoaXMuX292ZXJsYXlSZWN0KSksInJpZ2h0Ij09KHRoaXMuX2lzUnRsKCk/ImVuZCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiOiJlbmQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0Iik/bi5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKGkueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpuLmxlZnQ9T2JqZWN0KHIuZCkoaS54KSxufSx0LnByb3RvdHlwZS5fZ2V0U2Nyb2xsVmlzaWJpbGl0eT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLnNjcm9sbGFibGVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0pO3JldHVybntpc09yaWdpbkNsaXBwZWQ6Uyh0LG4pLGlzT3JpZ2luT3V0c2lkZVZpZXc6Qyh0LG4pLGlzT3ZlcmxheUNsaXBwZWQ6UyhlLG4pLGlzT3ZlcmxheU91dHNpZGVWaWV3OkMoZSxuKX19LHQucHJvdG90eXBlLl9zdWJ0cmFjdE92ZXJmbG93cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1NYXRoLm1heChlLDApfSx0KX0sdC5wcm90b3R5cGUuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGU9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxuPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt0b3A6bi50b3ArdGhpcy5fdmlld3BvcnRNYXJnaW4sbGVmdDpuLmxlZnQrdGhpcy5fdmlld3BvcnRNYXJnaW4scmlnaHQ6bi5sZWZ0K3QtdGhpcy5fdmlld3BvcnRNYXJnaW4sYm90dG9tOm4udG9wK2UtdGhpcy5fdmlld3BvcnRNYXJnaW4sd2lkdGg6dC0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLGhlaWdodDplLTIqdGhpcy5fdmlld3BvcnRNYXJnaW59fSx0LnByb3RvdHlwZS5faXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9LHQucHJvdG90eXBlLl9oYXNFeGFjdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9LHQucHJvdG90eXBlLl9nZXRPZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4ieCI9PT1lP251bGw9PXQub2Zmc2V0WD90aGlzLl9vZmZzZXRYOnQub2Zmc2V0WDpudWxsPT10Lm9mZnNldFk/dGhpcy5fb2Zmc2V0WTp0Lm9mZnNldFl9LHQucHJvdG90eXBlLl92YWxpZGF0ZVBvc2l0aW9ucz1mdW5jdGlvbigpe2lmKCF0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMubGVuZ3RoKXRocm93IEVycm9yKCJGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k6IEF0IGxlYXN0IG9uZSBwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTt0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMuZm9yRWFjaChmdW5jdGlvbih0KXtnKCJvcmlnaW5YIix0Lm9yaWdpblgpLHYoIm9yaWdpblkiLHQub3JpZ2luWSksZygib3ZlcmxheVgiLHQub3ZlcmxheVgpLHYoIm92ZXJsYXlZIix0Lm92ZXJsYXlZKX0pfSx0fSgpO2Z1bmN0aW9uIFIodCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdH12YXIgQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8pe3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PW5ldyBUKG4saSxyLG8pLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhQdXNoKCExKS53aXRoVmlld3BvcnRNYXJnaW4oMCksdGhpcy53aXRoRmFsbGJhY2tQb3NpdGlvbih0LGUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9pc1J0bCIse2dldDpmdW5jdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9uUG9zaXRpb25DaGFuZ2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwb3NpdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hdHRhY2godCksdGhpcy5fZGlyZWN0aW9uJiYodC5zZXREaXJlY3Rpb24odGhpcy5fZGlyZWN0aW9uKSx0aGlzLl9kaXJlY3Rpb249bnVsbCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2goKX0sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9LHQucHJvdG90eXBlLnJlY2FsY3VsYXRlTGFzdFBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5yZWFwcGx5TGFzdFBvc2l0aW9uKCl9LHQucHJvdG90eXBlLndpdGhTY3JvbGxhYmxlQ29udGFpbmVycz1mdW5jdGlvbih0KXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhTY3JvbGxhYmxlQ29udGFpbmVycyh0KX0sdC5wcm90b3R5cGUud2l0aEZhbGxiYWNrUG9zaXRpb249ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9bmV3IGZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMub2Zmc2V0WD1uLHRoaXMub2Zmc2V0WT1pLHRoaXMub3JpZ2luWD10Lm9yaWdpblgsdGhpcy5vcmlnaW5ZPXQub3JpZ2luWSx0aGlzLm92ZXJsYXlYPWUub3ZlcmxheVgsdGhpcy5vdmVybGF5WT1lLm92ZXJsYXlZfSh0LGUsbixpKTtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLnB1c2gociksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUud2l0aERpcmVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnNldERpcmVjdGlvbih0KTp0aGlzLl9kaXJlY3Rpb249dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoT2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoRGVmYXVsdE9mZnNldFgodCksdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRZKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhMb2NrZWRQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoTG9ja2VkUG9zaXRpb24odCksdGhpc30sdC5wcm90b3R5cGUud2l0aFBvc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQuc2xpY2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKSx0aGlzfSx0LnByb3RvdHlwZS5zZXRPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuc2V0T3JpZ2luKHQpLHRoaXN9LHR9KCksUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9jc3NQb3NpdGlvbj0ic3RhdGljIix0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX2xlZnRPZmZzZXQ9IiIsdGhpcy5fcmlnaHRPZmZzZXQ9IiIsdGhpcy5fYWxpZ25JdGVtcz0iIix0aGlzLl9qdXN0aWZ5Q29udGVudD0iIix0aGlzLl93aWR0aD0iIix0aGlzLl9oZWlnaHQ9IiJ9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt2YXIgZT10LmdldENvbmZpZygpO3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl93aWR0aCYmIWUud2lkdGgmJnQudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fd2lkdGh9KSx0aGlzLl9oZWlnaHQmJiFlLmhlaWdodCYmdC51cGRhdGVTaXplKHtoZWlnaHQ6dGhpcy5faGVpZ2h0fSksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciIpfSx0LnByb3RvdHlwZS50b3A9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fdG9wT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1zdGFydCIsdGhpc30sdC5wcm90b3R5cGUubGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2xlZnRPZmZzZXQ9dCx0aGlzLl9qdXN0aWZ5Q29udGVudD0iZmxleC1zdGFydCIsdGhpc30sdC5wcm90b3R5cGUuYm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtZW5kIix0aGlzfSx0LnByb3RvdHlwZS5yaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2xlZnRPZmZzZXQ9IiIsdGhpcy5fcmlnaHRPZmZzZXQ9dCx0aGlzLl9qdXN0aWZ5Q29udGVudD0iZmxleC1lbmQiLHRoaXN9LHQucHJvdG90eXBlLndpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnR9KTp0aGlzLl93aWR0aD10LHRoaXN9LHQucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHtoZWlnaHQ6dH0pOnRoaXMuX2hlaWdodD10LHRoaXN9LHQucHJvdG90eXBlLmNlbnRlckhvcml6b250YWxseT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMubGVmdCh0KSx0aGlzLl9qdXN0aWZ5Q29udGVudD0iY2VudGVyIix0aGlzfSx0LnByb3RvdHlwZS5jZW50ZXJWZXJ0aWNhbGx5PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy50b3AodCksdGhpcy5fYWxpZ25JdGVtcz0iY2VudGVyIix0aGlzfSx0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe2lmKHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSl7dmFyIHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuc3R5bGUsbj10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO3QucG9zaXRpb249dGhpcy5fY3NzUG9zaXRpb24sdC5tYXJnaW5MZWZ0PSIxMDAlIj09PW4ud2lkdGg/IjAiOnRoaXMuX2xlZnRPZmZzZXQsdC5tYXJnaW5Ub3A9IjEwMCUiPT09bi5oZWlnaHQ/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD10aGlzLl9yaWdodE9mZnNldCwiMTAwJSI9PT1uLndpZHRoP2UuanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiOiJjZW50ZXIiPT09dGhpcy5fanVzdGlmeUNvbnRlbnQ/ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIjoicnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uPyJmbGV4LXN0YXJ0Ij09PXRoaXMuX2p1c3RpZnlDb250ZW50P2UuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIjoiZmxleC1lbmQiPT09dGhpcy5fanVzdGlmeUNvbnRlbnQmJihlLmp1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iik6ZS5qdXN0aWZ5Q29udGVudD10aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9IjEwMCUiPT09bi5oZWlnaHQ/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSx0fSgpLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX3BsYXRmb3JtPW4sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pfXJldHVybiB0LnByb3RvdHlwZS5nbG9iYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFB9LHQucHJvdG90eXBlLmNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IEEoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLmZsZXhpYmxlQ29ubmVjdGVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUKHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSx0aGlzLl9vdmVybGF5Q29udGFpbmVyKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuWSkoby5lKSxPYmplY3QoaS5ZKShhLmQpLE9iamVjdChpLlkpKHAuYSw4KSxPYmplY3QoaS5ZKShqLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksTT0wLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEscyxsKXt0aGlzLnNjcm9sbFN0cmF0ZWdpZXM9dCx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWUsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sdGhpcy5fcG9zaXRpb25CdWlsZGVyPWksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPXIsdGhpcy5faW5qZWN0b3I9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9kb2N1bWVudD1zLHRoaXMuX2RpcmVjdGlvbmFsaXR5PWx9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9jcmVhdGVIb3N0RWxlbWVudCgpLG49dGhpcy5fY3JlYXRlUGFuZUVsZW1lbnQoZSksaT10aGlzLl9jcmVhdGVQb3J0YWxPdXRsZXQobikscj1uZXcgeSh0KTtyZXR1cm4gci5kaXJlY3Rpb249ci5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBJKGksZSxuLHIsdGhpcy5fbmdab25lLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn0sdC5wcm90b3R5cGUuX2NyZWF0ZVBhbmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmlkPSJjZGstb3ZlcmxheS0iK00rKyxlLmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LXBhbmUiKSx0LmFwcGVuZENoaWxkKGUpLGV9LHQucHJvdG90eXBlLl9jcmVhdGVIb3N0RWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZCh0KSx0fSx0LnByb3RvdHlwZS5fY3JlYXRlUG9ydGFsT3V0bGV0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcHBSZWZ8fCh0aGlzLl9hcHBSZWY9dGhpcy5faW5qZWN0b3IuZ2V0KGkuZykpLG5ldyBtLmQodCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yKX0sdH0oKSxMPW5ldyBpLnEoImNkay1jb25uZWN0ZWQtb3ZlcmxheS1zY3JvbGwtc3RyYXRlZ3kiKTtmdW5jdGlvbiBGKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgVj1mdW5jdGlvbigpe319LGVpaHM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPXtlOnt9fX0sZ0kzQjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIjZibEYiKSxyPW4oIlQxRE0iKSxvPW4oImlzYnkiKTtmdW5jdGlvbiBhKHQpe3JldHVybiFPYmplY3Qoby5hKSh0KSYmdC1wYXJzZUZsb2F0KHQpKzE+PTB9dmFyIHM9bigibmtZNyIpO2Z1bmN0aW9uIGwodCxlLG4pe3ZvaWQgMD09PXQmJih0PTApO3ZhciBvPS0xO3JldHVybiBhKGUpP289TnVtYmVyKGUpPDE/MTpOdW1iZXIoZSk6T2JqZWN0KHMuYSkoZSkmJihuPWUpLE9iamVjdChzLmEpKG4pfHwobj1yLmEpLG5ldyBpLmEoZnVuY3Rpb24oZSl7dmFyIGk9YSh0KT90Oit0LW4ubm93KCk7cmV0dXJuIG4uc2NoZWR1bGUodSxpLHtpbmRleDowLHBlcmlvZDpvLHN1YnNjcmliZXI6ZX0pfSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmluZGV4LG49dC5wZXJpb2QsaT10LnN1YnNjcmliZXI7aWYoaS5uZXh0KGUpLCFpLmNsb3NlZCl7aWYoLTE9PT1uKXJldHVybiBpLmNvbXBsZXRlKCk7dC5pbmRleD1lKzEsdGhpcy5zY2hlZHVsZSh0LG4pfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pfSxnSWNZOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBWfSk7dmFyIGk9bigibXJTRyIpLHI9bigiQ2NuRyIpLG89bigiVk5yNCIpLGE9bigiMC91USIpLHM9bigiNjdZLyIpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oKG4oIlpZanQiKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW52YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBlbmRpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXJyb3JzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcmlzdGluZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdHVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1bnRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN0YXR1c0NoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWx1ZUNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD12b2lkIDApLHRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KHQpfSx0LnByb3RvdHlwZS5oYXNFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX0sdC5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcih0LGUpOm51bGx9LHR9KCkpKTtmdW5jdGlvbiB1KHQpe3JldHVybiBudWxsPT10fHwwPT09dC5sZW5ndGh9dmFyIGM9L14oPz0uezEsMjU0fSQpKD89LnsxLDY0fUApWy0hIyQlJicqKy8wLTk9P0EtWl5fYGEtent8fX5dKyhcLlstISMkJSYnKisvMC05PT9BLVpeX2BhLXp7fH1+XSspKkBbQS1aYS16MC05XShbQS1aYS16MC05LV17MCw2MX1bQS1aYS16MC05XSk/KFwuW0EtWmEtejAtOV0oW0EtWmEtejAtOS1dezAsNjF9W0EtWmEtejAtOV0pPykqJC8sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQubWluPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZih1KGUudmFsdWUpfHx1KHQpKXJldHVybiBudWxsO3ZhciBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPHQ/e21pbjp7bWluOnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX0sdC5tYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHUoZS52YWx1ZSl8fHUodCkpcmV0dXJuIG51bGw7dmFyIG49cGFyc2VGbG9hdChlLnZhbHVlKTtyZXR1cm4haXNOYU4obikmJm4+dD97bWF4OnttYXg6dCxhY3R1YWw6ZS52YWx1ZX19Om51bGx9fSx0LnJlcXVpcmVkPWZ1bmN0aW9uKHQpe3JldHVybiB1KHQudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH0sdC5yZXF1aXJlZFRydWU9ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10LnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX0sdC5lbWFpbD1mdW5jdGlvbih0KXtyZXR1cm4gdSh0LnZhbHVlKT9udWxsOmMudGVzdCh0LnZhbHVlKT9udWxsOntlbWFpbDohMH19LHQubWluTGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZih1KGUudmFsdWUpKXJldHVybiBudWxsO3ZhciBuPWUudmFsdWU/ZS52YWx1ZS5sZW5ndGg6MDtyZXR1cm4gbjx0P3ttaW5sZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOm59fTpudWxsfX0sdC5tYXhMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUudmFsdWU/ZS52YWx1ZS5sZW5ndGg6MDtyZXR1cm4gbj50P3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOm59fTpudWxsfX0sdC5wYXR0ZXJuPWZ1bmN0aW9uKGUpe3JldHVybiBlPygic3RyaW5nIj09dHlwZW9mIGU/KGk9IiIsIl4iIT09ZS5jaGFyQXQoMCkmJihpKz0iXiIpLGkrPWUsIiQiIT09ZS5jaGFyQXQoZS5sZW5ndGgtMSkmJihpKz0iJCIpLG49bmV3IFJlZ0V4cChpKSk6KGk9ZS50b1N0cmluZygpLG49ZSksZnVuY3Rpb24odCl7aWYodSh0LnZhbHVlKSlyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlO3JldHVybiBuLnRlc3QoZSk/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmksYWN0dWFsVmFsdWU6ZX19fSk6dC5udWxsVmFsaWRhdG9yO3ZhciBuLGl9LHQubnVsbFZhbGlkYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5jb21wb3NlPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBlPXQuZmlsdGVyKGQpO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKHQpe3JldHVybiBwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9KHQpKX19LHQuY29tcG9zZUFzeW5jPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBlPXQuZmlsdGVyKGQpO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKHQpe3ZhciBuPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9KHQpLm1hcChoKTtyZXR1cm4gT2JqZWN0KG8uYSkobikucGlwZShPYmplY3Qocy5hKShwKSl9fSx0fSgpO2Z1bmN0aW9uIGQodCl7cmV0dXJuIG51bGwhPXR9ZnVuY3Rpb24gaCh0KXt2YXIgZT1PYmplY3Qoci5XYSkodCk/T2JqZWN0KGEuYSkodCk6dDtpZighT2JqZWN0KHIuVmEpKGUpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFsaWRhdG9yIHRvIHJldHVybiBQcm9taXNlIG9yIE9ic2VydmFibGUuIik7cmV0dXJuIGV9ZnVuY3Rpb24gcCh0KXt2YXIgZT10LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT1lP09iamVjdChpLmEpKHt9LHQsZSk6dH0se30pO3JldHVybiAwPT09T2JqZWN0LmtleXMoZSkubGVuZ3RoP251bGw6ZX12YXIgbT1uZXcgci5xKCJOZ1ZhbHVlQWNjZXNzb3IiKTtmdW5jdGlvbiBiKHQpe3JldHVybiB0LnZhbGlkYXRlP2Z1bmN0aW9uKGUpe3JldHVybiB0LnZhbGlkYXRlKGUpfTp0fWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQudmFsaWRhdGU/ZnVuY3Rpb24oZSl7cmV0dXJuIHQudmFsaWRhdGUoZSl9OnR9dmFyIHY9J1xuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7JyxnPSdcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InBlcnNvbiI+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBwZXJzb246IG5ldyBGb3JtR3JvdXAoeyBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpIH0pXG4gICAgfSk7JyxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5jb250cm9sUGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJmb3JtQ29udHJvbE5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdSdsbCB3YW50IHRvIGFkZCBhIGZvcm1Hcm91cFxuICAgICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3JvdXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgIit2KX0sdC5uZ01vZGVsR3JvdXBFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ2Zvcm1Db250cm9sTmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRoIGFuIG5nTW9kZWxHcm91cCBwYXJlbnQuIEl0IGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIHBhcmVudHNcbiAgICAgICB0aGF0IGFsc28gaGF2ZSBhICJmb3JtIiBwcmVmaXg6IGZvcm1Hcm91cE5hbWUsIGZvcm1BcnJheU5hbWUsIG9yIGZvcm1Hcm91cC5cblxuICAgICAgIE9wdGlvbiAxOiAgVXBkYXRlIHRoZSBwYXJlbnQgdG8gYmUgZm9ybUdyb3VwTmFtZSAocmVhY3RpdmUgZm9ybSBzdHJhdGVneSlcblxuICAgICAgICAnK2crJ1xuXG4gICAgICAgIE9wdGlvbiAyOiBVc2UgbmdNb2RlbCBpbnN0ZWFkIG9mIGZvcm1Db250cm9sTmFtZSAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KVxuXG4gICAgICAgIFxuICAgIDxmb3JtPlxuICAgICAgIDxkaXYgbmdNb2RlbEdyb3VwPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLm5hbWUiIG5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPicpfSx0Lm1pc3NpbmdGb3JtRXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJmb3JtR3JvdXAgZXhwZWN0cyBhIEZvcm1Hcm91cCBpbnN0YW5jZS4gUGxlYXNlIHBhc3Mgb25lIGluLlxuXG4gICAgICAgRXhhbXBsZTpcblxuICAgICAgICIrdil9LHQuZ3JvdXBQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImZvcm1Hcm91cE5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdSdsbCB3YW50IHRvIGFkZCBhIGZvcm1Hcm91cFxuICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICBFeGFtcGxlOlxuXG4gICAgICAiK2cpfSx0LmFycmF5UGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdmb3JtQXJyYXlOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3VcJ2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9ImNpdGllcyI+XG4gICAgICAgIDxkaXYgKm5nRm9yPSJsZXQgY2l0eSBvZiBjaXR5QXJyYXkuY29udHJvbHM7IGluZGV4IGFzIGkiPlxuICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT0iaSI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5jaXR5QXJyYXkgPSBuZXcgRm9ybUFycmF5KFtuZXcgRm9ybUNvbnRyb2woXCdTRlwnKV0pO1xuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgY2l0aWVzOiB0aGlzLmNpdHlBcnJheVxuICAgIH0pOycpfSx0LmRpc2FibGVkQXR0cldhcm5pbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSB3aXRoIGEgcmVhY3RpdmUgZm9ybSBkaXJlY3RpdmUuIElmIHlvdSBzZXQgZGlzYWJsZWQgdG8gdHJ1ZVxuICAgICAgd2hlbiB5b3Ugc2V0IHVwIHRoaXMgY29udHJvbCBpbiB5b3VyIGNvbXBvbmVudCBjbGFzcywgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSB3aWxsIGFjdHVhbGx5IGJlIHNldCBpbiB0aGUgRE9NIGZvclxuICAgICAgeW91LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBhcHByb2FjaCB0byBhdm9pZCAnY2hhbmdlZCBhZnRlciBjaGVja2VkJyBlcnJvcnMuXG4gICAgICAgXG4gICAgICBFeGFtcGxlOiBcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgZmlyc3Q6IG5ldyBGb3JtQ29udHJvbCh7dmFsdWU6ICdOYW5jeScsIGRpc2FibGVkOiB0cnVlfSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIGxhc3Q6IG5ldyBGb3JtQ29udHJvbCgnRHJldycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgICB9KTtcbiAgICAiKX0sdC5uZ01vZGVsV2FybmluZz1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlxuICAgIEl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIG5nTW9kZWwgb24gdGhlIHNhbWUgZm9ybSBmaWVsZCBhcyAiK3QrIi4gXG4gICAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIG5nTW9kZWwgaW5wdXQgcHJvcGVydHkgYW5kIG5nTW9kZWxDaGFuZ2UgZXZlbnQgd2l0aCBcbiAgICByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZXMgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBBbmd1bGFyIHY2IGFuZCB3aWxsIGJlIHJlbW92ZWQgXG4gICAgaW4gQW5ndWxhciB2Ny5cbiAgICBcbiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBzZWUgb3VyIEFQSSBkb2NzIGhlcmU6XG4gICAgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy8iKygiZm9ybUNvbnRyb2wiPT09dD8iRm9ybUNvbnRyb2xEaXJlY3RpdmUiOiJGb3JtQ29udHJvbE5hbWUiKSsiI3VzZS13aXRoLW5nbW9kZWxcbiAgICAiKX0sdH0oKTtmdW5jdGlvbiB3KHQsZSl7dHx8TyhlLCJDYW5ub3QgZmluZCBjb250cm9sIHdpdGgiKSxlLnZhbHVlQWNjZXNzb3J8fE8oZSwiTm8gdmFsdWUgYWNjZXNzb3IgZm9yIGZvcm0gY29udHJvbCB3aXRoIiksdC52YWxpZGF0b3I9Zi5jb21wb3NlKFt0LnZhbGlkYXRvcixlLnZhbGlkYXRvcl0pLHQuYXN5bmNWYWxpZGF0b3I9Zi5jb21wb3NlQXN5bmMoW3QuYXN5bmNWYWxpZGF0b3IsZS5hc3luY1ZhbGlkYXRvcl0pLGUudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKHQudmFsdWUpLGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZnVuY3Rpb24obil7dC5fcGVuZGluZ1ZhbHVlPW4sdC5fcGVuZGluZ0NoYW5nZT0hMCx0Ll9wZW5kaW5nRGlydHk9ITAsImNoYW5nZSI9PT10LnVwZGF0ZU9uJiZ4KHQsZSl9KX0odCxlKSxmdW5jdGlvbih0LGUpe3QucmVnaXN0ZXJPbkNoYW5nZShmdW5jdGlvbih0LG4pe2UudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKHQpLG4mJmUudmlld1RvTW9kZWxVcGRhdGUodCl9KX0odCxlKSxmdW5jdGlvbih0LGUpe2UudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChmdW5jdGlvbigpe3QuX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PXQudXBkYXRlT24mJnQuX3BlbmRpbmdDaGFuZ2UmJngodCxlKSwic3VibWl0IiE9PXQudXBkYXRlT24mJnQubWFya0FzVG91Y2hlZCgpfSl9KHQsZSksZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUmJnQucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGZ1bmN0aW9uKHQpe2UudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKHQpfSksZS5fcmF3VmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSl9KSxlLl9yYXdBc3luY1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmUucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmdW5jdGlvbigpe3JldHVybiB0LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfSl9ZnVuY3Rpb24geCh0LGUpe3QuX3BlbmRpbmdEaXJ0eSYmdC5tYXJrQXNEaXJ0eSgpLHQuc2V0VmFsdWUodC5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxlLnZpZXdUb01vZGVsVXBkYXRlKHQuX3BlbmRpbmdWYWx1ZSksdC5fcGVuZGluZ0NoYW5nZT0hMX1mdW5jdGlvbiBDKHQsZSl7bnVsbD09dCYmTyhlLCJDYW5ub3QgZmluZCBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj1mLmNvbXBvc2UoW3QudmFsaWRhdG9yLGUudmFsaWRhdG9yXSksdC5hc3luY1ZhbGlkYXRvcj1mLmNvbXBvc2VBc3luYyhbdC5hc3luY1ZhbGlkYXRvcixlLmFzeW5jVmFsaWRhdG9yXSl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gTyh0LCJUaGVyZSBpcyBubyBGb3JtQ29udHJvbCBpbnN0YW5jZSBhdHRhY2hlZCB0byBmb3JtIGNvbnRyb2wgZWxlbWVudCB3aXRoIil9ZnVuY3Rpb24gTyh0LGUpe3ZhciBuO3Rocm93IG49dC5wYXRoLmxlbmd0aD4xPyJwYXRoOiAnIit0LnBhdGguam9pbigiIC0+ICIpKyInIjp0LnBhdGhbMF0/Im5hbWU6ICciK3QucGF0aCsiJyI6InVuc3BlY2lmaWVkIG5hbWUgYXR0cmlidXRlIixuZXcgRXJyb3IoZSsiICIrbil9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gbnVsbCE9dD9mLmNvbXBvc2UodC5tYXAoYikpOm51bGx9ZnVuY3Rpb24gayh0KXtyZXR1cm4gbnVsbCE9dD9mLmNvbXBvc2VBc3luYyh0Lm1hcCh5KSk6bnVsbH1mdW5jdGlvbiBqKHQsZSl7dC5fc3luY1BlbmRpbmdDb250cm9scygpLGUuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmNvbnRyb2w7InN1Ym1pdCI9PT1lLnVwZGF0ZU9uJiZlLl9wZW5kaW5nQ2hhbmdlJiYodC52aWV3VG9Nb2RlbFVwZGF0ZShlLl9wZW5kaW5nVmFsdWUpLGUuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9ZnVuY3Rpb24gSSh0LGUpe3ZhciBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfWZ1bmN0aW9uIFQodCl7dmFyIGU9QSh0KT90LnZhbGlkYXRvcnM6dDtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9FKGUpOmV8fG51bGx9ZnVuY3Rpb24gUih0LGUpe3ZhciBuPUEoZSk/ZS5hc3luY1ZhbGlkYXRvcnM6dDtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9rKG4pOm58fG51bGx9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gbnVsbCE9dCYmIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZhbGlkYXRvcj10LHRoaXMuYXN5bmNWYWxpZGF0b3I9ZSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9ZnVuY3Rpb24oKXt9LHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlZBTElEIj09PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW52YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJJTlZBTElEIj09PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGVuZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiJQRU5ESU5HIj09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJESVNBQkxFRCI9PT10aGlzLnN0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRElTQUJMRUQiIT09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLnByaXN0aW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidW50b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudG91Y2hlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVwZGF0ZU9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldFZhbGlkYXRvcnM9ZnVuY3Rpb24odCl7dGhpcy52YWxpZGF0b3I9VCh0KX0sdC5wcm90b3R5cGUuc2V0QXN5bmNWYWxpZGF0b3JzPWZ1bmN0aW9uKHQpe3RoaXMuYXN5bmNWYWxpZGF0b3I9Uih0KX0sdC5wcm90b3R5cGUuY2xlYXJWYWxpZGF0b3JzPWZ1bmN0aW9uKCl7dGhpcy52YWxpZGF0b3I9bnVsbH0sdC5wcm90b3R5cGUuY2xlYXJBc3luY1ZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9LHQucHJvdG90eXBlLm1hcmtBc1RvdWNoZWQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMudG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh0KX0sdC5wcm90b3R5cGUubWFya0FzVW50b3VjaGVkPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKHQpe3QubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5tYXJrQXNEaXJ0eT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9LHQucHJvdG90eXBlLm1hcmtBc1ByaXN0aW5lPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCl7dC5tYXJrQXNQcmlzdGluZSh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9LHQucHJvdG90eXBlLm1hcmtBc1BlbmRpbmc9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuc3RhdHVzPSJQRU5ESU5HIiwhMSE9PXQuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcodCl9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuc3RhdHVzPSJESVNBQkxFRCIsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7ZS5kaXNhYmxlKE9iamVjdChpLmEpKHt9LHQse29ubHlTZWxmOiEwfSkpfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh0KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoITApfSl9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5zdGF0dXM9IlZBTElEIix0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7ZS5lbmFibGUoT2JqZWN0KGkuYSkoe30sdCx7b25seVNlbGY6ITB9KSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh0KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoITEpfSl9LHQucHJvdG90eXBlLl91cGRhdGVBbmNlc3RvcnM9ZnVuY3Rpb24odCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9LHQucHJvdG90eXBlLnNldFBhcmVudD1mdW5jdGlvbih0KXt0aGlzLl9wYXJlbnQ9dH0sdC5wcm90b3R5cGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwiVkFMSUQiIT09dGhpcy5zdGF0dXMmJiJQRU5ESU5HIiE9PXRoaXMuc3RhdHVzfHx0aGlzLl9ydW5Bc3luY1ZhbGlkYXRvcih0LmVtaXRFdmVudCkpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCl9LHQucHJvdG90eXBlLl91cGRhdGVUcmVlVmFsaWRpdHk9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e2VtaXRFdmVudDohMH0pLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtyZXR1cm4gZS5fdXBkYXRlVHJlZVZhbGlkaXR5KHQpfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX0sdC5wcm90b3R5cGUuX3NldEluaXRpYWxTdGF0dXM9ZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/IkRJU0FCTEVEIjoiVkFMSUQifSx0LnByb3RvdHlwZS5fcnVuVmFsaWRhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9LHQucHJvdG90eXBlLl9ydW5Bc3luY1ZhbGlkYXRvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPSJQRU5ESU5HIjt2YXIgbj1oKHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbj1uLnN1YnNjcmliZShmdW5jdGlvbihuKXtyZXR1cm4gZS5zZXRFcnJvcnMobix7ZW1pdEV2ZW50OnR9KX0pfX0sdC5wcm90b3R5cGUuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uJiZ0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuc2V0RXJyb3JzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuZXJyb3JzPXQsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1lLmVtaXRFdmVudCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1lP251bGw6KGUgaW5zdGFuY2VvZiBBcnJheXx8KGU9ZS5zcGxpdCgiLiIpKSxlIGluc3RhbmNlb2YgQXJyYXkmJjA9PT1lLmxlbmd0aD9udWxsOmUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNP3QuY29udHJvbHMuaGFzT3duUHJvcGVydHkoZSk/dC5jb250cm9sc1tlXTpudWxsOnQgaW5zdGFuY2VvZiBOJiZ0LmF0KGUpfHxudWxsfSx0KSl9KHRoaXMsdCl9LHQucHJvdG90eXBlLmdldEVycm9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBuJiZuLmVycm9ycz9uLmVycm9yc1t0XTpudWxsfSx0LnByb3RvdHlwZS5oYXNFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiEhdGhpcy5nZXRFcnJvcih0LGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpczt0Ll9wYXJlbnQ7KXQ9dC5fcGFyZW50O3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl91cGRhdGVDb250cm9sc0Vycm9ycz1mdW5jdGlvbih0KXt0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSx0JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKHQpfSx0LnByb3RvdHlwZS5faW5pdE9ic2VydmFibGVzPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IHIubix0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IHIubn0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZVN0YXR1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/IkRJU0FCTEVEIjp0aGlzLmVycm9ycz8iSU5WQUxJRCI6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKCJQRU5ESU5HIik/IlBFTkRJTkciOnRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cygiSU5WQUxJRCIpPyJJTlZBTElEIjoiVkFMSUQifSx0LnByb3RvdHlwZS5fYW55Q29udHJvbHNIYXZlU3RhdHVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGF0dXM9PT10fSl9LHQucHJvdG90eXBlLl9hbnlDb250cm9sc0RpcnR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpcnR5fSl9LHQucHJvdG90eXBlLl9hbnlDb250cm9sc1RvdWNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoZnVuY3Rpb24odCl7cmV0dXJuIHQudG91Y2hlZH0pfSx0LnByb3RvdHlwZS5fdXBkYXRlUHJpc3RpbmU9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMucHJpc3RpbmU9IXRoaXMuX2FueUNvbnRyb2xzRGlydHkoKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKHQpfSx0LnByb3RvdHlwZS5fdXBkYXRlVG91Y2hlZD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0KX0sdC5wcm90b3R5cGUuX2lzQm94ZWRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYyPT09T2JqZWN0LmtleXModCkubGVuZ3RoJiYidmFsdWUiaW4gdCYmImRpc2FibGVkImluIHR9LHQucHJvdG90eXBlLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH0sdC5wcm90b3R5cGUuX3NldFVwZGF0ZVN0cmF0ZWd5PWZ1bmN0aW9uKHQpe0EodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX0sdH0oKSxEPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZvaWQgMD09PWUmJihlPW51bGwpO3ZhciByPXQuY2FsbCh0aGlzLFQobiksUihpLG4pKXx8dGhpcztyZXR1cm4gci5fb25DaGFuZ2U9W10sci5fYXBwbHlGb3JtU3RhdGUoZSksci5fc2V0VXBkYXRlU3RyYXRlZ3kobiksci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSxyLl9pbml0T2JzZXJ2YWJsZXMoKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09ZS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQobi52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucGF0Y2hWYWx1ZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnNldFZhbHVlKHQsZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMubWFya0FzUHJpc3RpbmUoZSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoZSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGUpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX2FueUNvbnRyb2xzPWZ1bmN0aW9uKHQpe3JldHVybiExfSxlLnByb3RvdHlwZS5fYWxsQ29udHJvbHNEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9LGUucHJvdG90eXBlLl9jbGVhckNoYW5nZUZucz1mdW5jdGlvbigpe3RoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKCl7fX0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaCh0KX0sZS5wcm90b3R5cGUuX2ZvckVhY2hDaGlsZD1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLl9zeW5jUGVuZGluZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX0sZS5wcm90b3R5cGUuX2FwcGx5Rm9ybVN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQm94ZWRWYWx1ZSh0KT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fSxlfShQKSxNPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLFQobiksUihpLG4pKXx8dGhpcztyZXR1cm4gci5jb250cm9scz1lLHIuX2luaXRPYnNlcnZhYmxlcygpLHIuX3NldFVwZGF0ZVN0cmF0ZWd5KG4pLHIuX3NldFVwQ29udHJvbHMoKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUucmVnaXN0ZXJDb250cm9sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9LGUucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCxlKXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7fSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9LGUucHJvdG90eXBlLnNldENvbnRyb2w9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLGUmJnRoaXMucmVnaXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9LGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzLmNvbnRyb2xzW3RdLmVuYWJsZWR9LGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50KHQpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oaSl7bi5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKGkpLG4uY29udHJvbHNbaV0uc2V0VmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnBhdGNoVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGkpe24uY29udHJvbHNbaV0mJm4uY29udHJvbHNbaV0ucGF0Y2hWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD17fSksdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihuLGkpe24ucmVzZXQodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKX0sZS5wcm90b3R5cGUuZ2V0UmF3VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W25dPWUgaW5zdGFuY2VvZiBEP2UudmFsdWU6ZS5nZXRSYXdWYWx1ZSgpLHR9KX0sZS5wcm90b3R5cGUuX3N5bmNQZW5kaW5nQ29udHJvbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSxmdW5jdGlvbih0LGUpe3JldHVybiEhZS5fc3luY1BlbmRpbmdDb250cm9scygpfHx0fSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fSxlLnByb3RvdHlwZS5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nPWZ1bmN0aW9uKHQpe2lmKCFPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgICAgVGhlcmUgYXJlIG5vIGZvcm0gY29udHJvbHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgZ3JvdXAgeWV0LiAgSWYgeW91J3JlIHVzaW5nIG5nTW9kZWwsXG4gICAgICAgIHlvdSBtYXkgd2FudCB0byBjaGVjayBuZXh0IHRpY2sgKGUuZy4gdXNlIHNldFRpbWVvdXQpLlxuICAgICAgIik7aWYoIXRoaXMuY29udHJvbHNbdF0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAiK3QrIi4iKX0sZS5wcm90b3R5cGUuX2ZvckVhY2hDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQoZS5jb250cm9sc1tuXSxuKX0pfSxlLnByb3RvdHlwZS5fc2V0VXBDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUpe2Uuc2V0UGFyZW50KHQpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHQuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfSxlLnByb3RvdHlwZS5fYW55Q29udHJvbHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPSExO3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oaSxyKXtuPW58fGUuY29udGFpbnMocikmJnQoaSl9KSxufSxlLnByb3RvdHlwZS5fcmVkdWNlVmFsdWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSxmdW5jdGlvbihlLG4saSl7cmV0dXJuKG4uZW5hYmxlZHx8dC5kaXNhYmxlZCkmJihlW2ldPW4udmFsdWUpLGV9KX0sZS5wcm90b3R5cGUuX3JlZHVjZUNoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKHQsaSl7bj1lKG4sdCxpKX0pLG59LGUucHJvdG90eXBlLl9hbGxDb250cm9sc0Rpc2FibGVkPWZ1bmN0aW9uKCl7dmFyIHQsZTt0cnl7Zm9yKHZhciBuPU9iamVjdChpLmUpKE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKSxyPW4ubmV4dCgpOyFyLmRvbmU7cj1uLm5leHQoKSlpZih0aGlzLmNvbnRyb2xzW3IudmFsdWVdLmVuYWJsZWQpcmV0dXJuITF9Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGU9bi5yZXR1cm4pJiZlLmNhbGwobil9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fXJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH0sZS5wcm90b3R5cGUuX2NoZWNrQWxsVmFsdWVzUHJlc2VudD1mdW5jdGlvbih0KXt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSxuKXtpZih2b2lkIDA9PT10W25dKXRocm93IG5ldyBFcnJvcigiTXVzdCBzdXBwbHkgYSB2YWx1ZSBmb3IgZm9ybSBjb250cm9sIHdpdGggbmFtZTogJyIrbisiJy4iKX0pfSxlfShQKSxOPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLFQobiksUihpLG4pKXx8dGhpcztyZXR1cm4gci5jb250cm9scz1lLHIuX2luaXRPYnNlcnZhYmxlcygpLHIuX3NldFVwZGF0ZVN0cmF0ZWd5KG4pLHIuX3NldFVwQ29udHJvbHMoKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF19LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9scy5wdXNoKHQpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbCh0KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9scy5zcGxpY2UodCwwLGUpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0sZS5wcm90b3R5cGUucmVtb3ZlQXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSxlLnByb3RvdHlwZS5zZXRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLGUmJih0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9scy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7bi5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKGkpLG4uYXQoaSkuc2V0VmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnBhdGNoVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0LmZvckVhY2goZnVuY3Rpb24odCxpKXtuLmF0KGkpJiZuLmF0KGkpLnBhdGNoVmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24obixpKXtuLnJlc2V0KHRbaV0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSl9LGUucHJvdG90eXBlLmdldFJhd1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRD90LnZhbHVlOnQuZ2V0UmF3VmFsdWUoKX0pfSxlLnByb3RvdHlwZS5fc3luY1BlbmRpbmdDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udHJvbHMucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuISFlLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fHR9LCExKTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9LGUucHJvdG90eXBlLl90aHJvd0lmQ29udHJvbE1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIXRoaXMuY29udHJvbHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiXG4gICAgICAgIFRoZXJlIGFyZSBubyBmb3JtIGNvbnRyb2xzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGFycmF5IHlldC4gIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgICAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgICAgICIpO2lmKCF0aGlzLmF0KHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sIGF0IGluZGV4ICIrdCl9LGUucHJvdG90eXBlLl9mb3JFYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9scy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dChlLG4pfSl9LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy52YWx1ZT10aGlzLmNvbnRyb2xzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5lbmFibGVkfHx0LmRpc2FibGVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LGUucHJvdG90eXBlLl9hbnlDb250cm9scz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250cm9scy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVuYWJsZWQmJnQoZSl9KX0sZS5wcm90b3R5cGUuX3NldFVwQ29udHJvbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtyZXR1cm4gdC5fcmVnaXN0ZXJDb250cm9sKGUpfSl9LGUucHJvdG90eXBlLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQ9ZnVuY3Rpb24odCl7dGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUsbil7aWYodm9pZCAwPT09dFtuXSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3VwcGx5IGEgdmFsdWUgZm9yIGZvcm0gY29udHJvbCBhdCBpbmRleDogIituKyIuIil9KX0sZS5wcm90b3R5cGUuX2FsbENvbnRyb2xzRGlzYWJsZWQ9ZnVuY3Rpb24oKXt2YXIgdCxlO3RyeXtmb3IodmFyIG49T2JqZWN0KGkuZSkodGhpcy5jb250cm9scykscj1uLm5leHQoKTshci5kb25lO3I9bi5uZXh0KCkpaWYoci52YWx1ZS5lbmFibGVkKXJldHVybiExfWNhdGNoKGUpe3Q9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihlPW4ucmV0dXJuKSYmZS5jYWxsKG4pfWZpbmFsbHl7aWYodCl0aHJvdyB0LmVycm9yfX1yZXR1cm4gdGhpcy5jb250cm9scy5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyQ29udHJvbD1mdW5jdGlvbih0KXt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSxlfShQKSxMPVByb21pc2UucmVzb2x2ZShudWxsKSxGPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuc3VibWl0dGVkPSExLGkuX2RpcmVjdGl2ZXM9W10saS5uZ1N1Ym1pdD1uZXcgci5uLGkuZm9ybT1uZXcgTSh7fSxFKGUpLGsobikpLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0PWZ1bmN0aW9uKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRyb2xzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7TC50aGVuKGZ1bmN0aW9uKCl7dmFyIG49ZS5fZmluZENvbnRhaW5lcih0LnBhdGgpO3QuY29udHJvbD1uLnJlZ2lzdGVyQ29udHJvbCh0Lm5hbWUsdC5jb250cm9sKSx3KHQuY29udHJvbCx0KSx0LmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5fZGlyZWN0aXZlcy5wdXNoKHQpfSl9LGUucHJvdG90eXBlLmdldENvbnRyb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO0wudGhlbihmdW5jdGlvbigpe3ZhciBuPWUuX2ZpbmRDb250YWluZXIodC5wYXRoKTtuJiZuLnJlbW92ZUNvbnRyb2wodC5uYW1lKSxJKGUuX2RpcmVjdGl2ZXMsdCl9KX0sZS5wcm90b3R5cGUuYWRkRm9ybUdyb3VwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7TC50aGVuKGZ1bmN0aW9uKCl7dmFyIG49ZS5fZmluZENvbnRhaW5lcih0LnBhdGgpLGk9bmV3IE0oe30pO0MoaSx0KSxuLnJlZ2lzdGVyQ29udHJvbCh0Lm5hbWUsaSksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfSxlLnByb3RvdHlwZS5yZW1vdmVGb3JtR3JvdXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztMLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7biYmbi5yZW1vdmVDb250cm9sKHQubmFtZSl9KX0sZS5wcm90b3R5cGUuZ2V0Rm9ybUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnVwZGF0ZU1vZGVsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztMLnRoZW4oZnVuY3Rpb24oKXtuLmZvcm0uZ2V0KHQucGF0aCkuc2V0VmFsdWUoZSl9KX0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sLnNldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5vblN1Ym1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsaih0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KHQpLCExfSxlLnByb3RvdHlwZS5vblJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldEZvcm0oKX0sZS5wcm90b3R5cGUucmVzZXRGb3JtPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfSxlLnByb3RvdHlwZS5fc2V0VXBkYXRlU3RyYXRlZ3k9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX0sZS5wcm90b3R5cGUuX2ZpbmRDb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQucG9wKCksdC5sZW5ndGg/dGhpcy5mb3JtLmdldCh0KTp0aGlzLmZvcm19LGV9KGwpLFY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fdmFsaWRhdG9ycz1lLGkuX2FzeW5jVmFsaWRhdG9ycz1uLGkuc3VibWl0dGVkPSExLGkuZGlyZWN0aXZlcz1bXSxpLmZvcm09bnVsbCxpLm5nU3VibWl0PW5ldyByLm4saX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksdC5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtyZXR1cm4gdyhlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2godCksZX0sZS5wcm90b3R5cGUuZ2V0Q29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe0kodGhpcy5kaXJlY3RpdmVzLHQpfSxlLnByb3RvdHlwZS5hZGRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb3JtLmdldCh0LnBhdGgpO0MoZSx0KSxlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5yZW1vdmVGb3JtR3JvdXA9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5nZXRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUuYWRkRm9ybUFycmF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtDKGUsdCksZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0sZS5wcm90b3R5cGUucmVtb3ZlRm9ybUFycmF5PWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuZ2V0Rm9ybUFycmF5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnVwZGF0ZU1vZGVsPWZ1bmN0aW9uKHQsZSl7dGhpcy5mb3JtLmdldCh0LnBhdGgpLnNldFZhbHVlKGUpfSxlLnByb3RvdHlwZS5vblN1Ym1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsaih0aGlzLmZvcm0sdGhpcy5kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQodCksITF9LGUucHJvdG90eXBlLm9uUmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0Rm9ybSgpfSxlLnByb3RvdHlwZS5yZXNldEZvcm09ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx0aGlzLmZvcm0ucmVzZXQodCksdGhpcy5zdWJtaXR0ZWQ9ITF9LGUucHJvdG90eXBlLl91cGRhdGVEb21WYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kaXJlY3RpdmVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5mb3JtLmdldChlLnBhdGgpO2UuY29udHJvbCE9PW4mJihmdW5jdGlvbih0LGUpe2UudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIFMoZSl9KSxlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoZnVuY3Rpb24oKXtyZXR1cm4gUyhlKX0pLGUuX3Jhd1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJnQucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShudWxsKX0pLGUuX3Jhd0FzeW5jVmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmdC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKG51bGwpfSksdCYmdC5fY2xlYXJDaGFuZ2VGbnMoKX0oZS5jb250cm9sLGUpLG4mJncobixlKSxlLmNvbnRyb2w9bil9KSx0aGlzLmZvcm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9LGUucHJvdG90eXBlLl91cGRhdGVSZWdpc3RyYXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3VwZGF0ZURvbVZhbHVlKCl9KSx0aGlzLl9vbGRGb3JtJiZ0aGlzLl9vbGRGb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsaWRhdG9ycz1mdW5jdGlvbigpe3ZhciB0PUUodGhpcy5fdmFsaWRhdG9ycyk7dGhpcy5mb3JtLnZhbGlkYXRvcj1mLmNvbXBvc2UoW3RoaXMuZm9ybS52YWxpZGF0b3IsdF0pO3ZhciBlPWsodGhpcy5fYXN5bmNWYWxpZGF0b3JzKTt0aGlzLmZvcm0uYXN5bmNWYWxpZGF0b3I9Zi5jb21wb3NlQXN5bmMoW3RoaXMuZm9ybS5hc3luY1ZhbGlkYXRvcixlXSl9LGUucHJvdG90eXBlLl9jaGVja0Zvcm1QcmVzZW50PWZ1bmN0aW9uKCl7dGhpcy5mb3JtfHxfLm1pc3NpbmdGb3JtRXhjZXB0aW9uKCl9LGV9KGwpfSxoOURxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyl8fHRoaXN9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHRoaXN9LGV9KG4oInB1Z1QiKS5hKTtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1lLGkud29yaz1uLGkucGVuZGluZz0hMSxpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDt2YXIgbj10aGlzLmlkLGk9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPW4mJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoaSxuLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9dGhpcy5pZHx8dGhpcy5yZXF1ZXN0QXN5bmNJZChpLHRoaXMuaWQsZSksdGhpc30sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxzZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxuKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPTApLG51bGwhPT1uJiZ0aGlzLmRlbGF5PT09biYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7Y2xlYXJJbnRlcnZhbChlKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7dmFyIG49dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKG4pcmV0dXJuIG47ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9LGUucHJvdG90eXBlLl9leGVjdXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEsaT12b2lkIDA7dHJ5e3RoaXMud29yayh0KX1jYXRjaCh0KXtuPSEwLGk9ISF0JiZ0fHxuZXcgRXJyb3IodCl9aWYobilyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaWQsZT10aGlzLnNjaGVkdWxlcixuPWUuYWN0aW9ucyxpPW4uaW5kZXhPZih0aGlzKTt0aGlzLndvcms9bnVsbCx0aGlzLnN0YXRlPW51bGwsdGhpcy5wZW5kaW5nPSExLHRoaXMuc2NoZWR1bGVyPW51bGwsLTEhPT1pJiZuLnNwbGljZShpLDEpLG51bGwhPXQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZSx0LG51bGwpKSx0aGlzLmRlbGF5PW51bGx9LGV9KHIpfSxoVVdQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuKCJtclNHIiksbigiQ2NuRyIpLG4oIklwMFIiKSxuKCJPemZCIik7dmFyIGk9ZnVuY3Rpb24oKXt9fSxpTHhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT0hMSxyPXtQcm9taXNlOnZvaWQgMCxzZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyh0KXtpPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIGl9fX0saWhZWTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4geX0pO3ZhciBpPWZ1bmN0aW9uKCl7fSxyPWZ1bmN0aW9uKCl7fSxvPSIqIjtmdW5jdGlvbiBhKHQsZSl7cmV0dXJue3R5cGU6NyxuYW1lOnQsZGVmaW5pdGlvbnM6ZSxvcHRpb25zOnt9fX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjQsc3R5bGVzOmUsdGltaW5nczp0fX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjMsc3RlcHM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MixzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gYyh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBmKHQsZSxuKXtyZXR1cm57dHlwZTowLG5hbWU6dCxzdHlsZXM6ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGQodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx7dHlwZToxLGV4cHI6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLHt0eXBlOjksb3B0aW9uczp0fX1mdW5jdGlvbiBwKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCkse3R5cGU6MTEsc2VsZWN0b3I6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIG0odCl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4odCl9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9dCtlfXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS50cmlnZ2VyTWljcm90YXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczttKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX0sdC5wcm90b3R5cGUuX29uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDt2YXIgbj0wLGk9MCxyPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/bShmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysraT09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK3I9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksdj0iISJ9LGlzYnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofX0samxabTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIm42Z0ciKSxvPW4oIlloYk8iKSxhPShuKCJpaFlZIiksbigiNGMzNSIpKSxzPW4oIks5SWEiKSxsPW4oInB1Z1QiKSx1PW4oInAwaWIiKSxjPW4oInAwU2oiKSxmPW4oIlZuRC8iKSxkPW4oInQ5ZloiKSxoPW4oIllTaDIiKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2hpZGVUb2dnbGU9ITEsZS5kaXNwbGF5TW9kZT0iZGVmYXVsdCIsZX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9T2JqZWN0KHIuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oby5hKSxtPTAsYj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixpKXx8dGhpcztyZXR1cm4gby5fdmlld0NvbnRhaW5lclJlZj1yLG8uX2hpZGVUb2dnbGU9ITEsby5faW5wdXRDaGFuZ2VzPW5ldyBzLmEsby5faGVhZGVySWQ9Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLSIrbSsrLG8uYWNjb3JkaW9uPWUsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9T2JqZWN0KHIuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2dldEhpZGVUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaGlkZVRvZ2dsZTp0aGlzLmhpZGVUb2dnbGV9LGUucHJvdG90eXBlLl9oYXNTcGFjaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjY29yZGlvbiYmImRlZmF1bHQiPT09KHRoaXMuZXhwYW5kZWQ/dGhpcy5hY2NvcmRpb24uZGlzcGxheU1vZGU6dGhpcy5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0sZS5wcm90b3R5cGUuX2dldEV4cGFuZGVkU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQifSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2xhenlDb250ZW50JiZ0aGlzLm9wZW5lZC5waXBlKE9iamVjdChjLmEpKG51bGwpLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZXhwYW5kZWQmJiF0Ll9wb3J0YWx9KSxPYmplY3QoZC5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fcG9ydGFsPW5ldyBhLmcodC5fbGF6eUNvbnRlbnQuX3RlbXBsYXRlLHQuX3ZpZXdDb250YWluZXJSZWYpfSl9LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2lucHV0Q2hhbmdlcy5uZXh0KHQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5faW5wdXRDaGFuZ2VzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9ib2R5QW5pbWF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudC5jbGFzc0xpc3Qsbj10LnBoYXNlTmFtZSxpPXQudG9TdGF0ZTsiZG9uZSI9PT1uJiYiZXhwYW5kZWQiPT09aT9lLmFkZCgibWF0LWV4cGFuZGVkIik6InN0YXJ0Ij09PW4mJiJjb2xsYXBzZWQiPT09aSYmZS5yZW1vdmUoIm1hdC1leHBhbmRlZCIpfSxlfShvLmIpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3ZhciByPXRoaXM7dGhpcy5wYW5lbD10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj1sLmEuRU1QVFksdGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uPU9iamVjdCh1LmEpKHQub3BlbmVkLHQuY2xvc2VkLHQuX2lucHV0Q2hhbmdlcy5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiEoIXQuaGlkZVRvZ2dsZSYmIXQuZGlzYWJsZWQpfSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gci5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxuLm1vbml0b3IoZS5uYXRpdmVFbGVtZW50KX1yZXR1cm4gdC5wcm90b3R5cGUuX3RvZ2dsZT1mdW5jdGlvbigpe3RoaXMucGFuZWwudG9nZ2xlKCl9LHQucHJvdG90eXBlLl9pc0V4cGFuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuZXhwYW5kZWR9LHQucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuX2dldEV4cGFuZGVkU3RhdGUoKX0sdC5wcm90b3R5cGUuX2dldFBhbmVsSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5pZH0sdC5wcm90b3R5cGUuX3Nob3dUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wYW5lbC5oaWRlVG9nZ2xlJiYhdGhpcy5wYW5lbC5kaXNhYmxlZH0sdC5wcm90b3R5cGUuX2tleWRvd249ZnVuY3Rpb24odCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBoLmw6Y2FzZSBoLmY6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZSgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KX0sdH0oKSx2PWZ1bmN0aW9uKCl7fSxnPWZ1bmN0aW9uKCl7fSxfPWZ1bmN0aW9uKCl7fX0sbExBUDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBDfSk7dmFyIGk9bigiSXAwUiIpLHI9bigiQ2NuRyIpLG89bigiSzlJYSIpLGE9bigicHVnVCIpLHM9bigiRi9YTCIpLGw9bigiWVNoMiIpLHU9bigieE15RSIpLGM9bigiR2kzaSIpLGY9bigiVm5ELyIpLGQ9bigiNjdZLyIpLGg9bigidDlmWiIpLHA9bigibXJTRyIpLG09bigiZFdaZyIpO24oIm42Z0ciKTt2YXIgYj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9vcmlnaW49InByb2dyYW0iLGV9cmV0dXJuIE9iamVjdChwLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0Rm9jdXNPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9LGUucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW09ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbS5jYWxsKHRoaXMsZSksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uZm9jdXModGhpcy5fb3JpZ2luKX0sZX0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5faXRlbXM9dCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9LTEsdGhpcy5fd3JhcD0hMSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW09bmV3IG8uYSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249YS5hLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX3NraXBQcmVkaWNhdGVGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlZH0sdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IG8uYSx0aGlzLmNoYW5nZT1uZXcgby5hLHQgaW5zdGFuY2VvZiByLkQmJnQuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aWYoZS5fYWN0aXZlSXRlbSl7dmFyIG49dC50b0FycmF5KCkuaW5kZXhPZihlLl9hY3RpdmVJdGVtKTtuPi0xJiZuIT09ZS5fYWN0aXZlSXRlbUluZGV4JiYoZS5fYWN0aXZlSXRlbUluZGV4PW4pfX0pfXJldHVybiB0LnByb3RvdHlwZS5za2lwUHJlZGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9za2lwUHJlZGljYXRlRm49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoV3JhcD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX3dyYXA9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoVmVydGljYWxPcmllbnRhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX3ZlcnRpY2FsPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEhvcml6b250YWxPcmllbnRhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faG9yaXpvbnRhbD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhUeXBlQWhlYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2b2lkIDA9PT10JiYodD0yMDApLHRoaXMuX2l0ZW1zLmxlbmd0aCYmdGhpcy5faXRlbXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdC5nZXRMYWJlbH0pKXRocm93IEVycm9yKCJMaXN0S2V5TWFuYWdlciBpdGVtcyBpbiB0eXBlYWhlYWQgbW9kZSBtdXN0IGltcGxlbWVudCB0aGUgYGdldExhYmVsYCBtZXRob2QuIik7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj10aGlzLl9sZXR0ZXJLZXlTdHJlYW0ucGlwZShPYmplY3QodS5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMucHVzaCh0KX0pLE9iamVjdChjLmEpKHQpLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfSksT2JqZWN0KGQuYSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMuam9pbigiIil9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLl9nZXRJdGVtc0FycmF5KCksaT0xO2k8bi5sZW5ndGgrMTtpKyspe3ZhciByPShlLl9hY3RpdmVJdGVtSW5kZXgraSklbi5sZW5ndGgsbz1uW3JdO2lmKCFlLl9za2lwUHJlZGljYXRlRm4obykmJjA9PT1vLmdldExhYmVsKCkudG9VcHBlckNhc2UoKS50cmltKCkuaW5kZXhPZih0KSl7ZS5zZXRBY3RpdmVJdGVtKHIpO2JyZWFrfX1lLl9wcmVzc2VkTGV0dGVycz1bXX0pLHRoaXN9LHQucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYWN0aXZlSXRlbUluZGV4O3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KSx0aGlzLl9hY3RpdmVJdGVtSW5kZXghPT1lJiZ0aGlzLmNoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCl9LHQucHJvdG90eXBlLm9uS2V5ZG93bj1mdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7c3dpdGNoKGUpe2Nhc2UgbC5tOnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIGwuZDppZih0aGlzLl92ZXJ0aWNhbCl7dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIGwubjppZih0aGlzLl92ZXJ0aWNhbCl7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSBsLms6aWYoImx0ciI9PT10aGlzLl9ob3Jpem9udGFsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9aWYoInJ0bCI9PT10aGlzLl9ob3Jpem9udGFsKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIGwuaTppZigibHRyIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9aWYoInJ0bCI9PT10aGlzLl9ob3Jpem9udGFsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2RlZmF1bHQ6cmV0dXJuIHZvaWQodC5rZXkmJjE9PT10LmtleS5sZW5ndGg/dGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQodC5rZXkudG9Mb2NhbGVVcHBlckNhc2UoKSk6KGU+PWwuYSYmZTw9bC5vfHxlPj1sLnAmJmU8PWwuaikmJnRoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpKX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0LnByZXZlbnREZWZhdWx0KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlSXRlbUluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZUl0ZW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZXRGaXJzdEl0ZW1BY3RpdmU9ZnVuY3Rpb24oKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLDEpfSx0LnByb3RvdHlwZS5zZXRMYXN0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2l0ZW1zLmxlbmd0aC0xLC0xKX0sdC5wcm90b3R5cGUuc2V0TmV4dEl0ZW1BY3RpdmU9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfSx0LnByb3RvdHlwZS5zZXRQcmV2aW91c0l0ZW1BY3RpdmU9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MCYmdGhpcy5fd3JhcD90aGlzLnNldExhc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoLTEpfSx0LnByb3RvdHlwZS51cGRhdGVBY3RpdmVJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxuPSJudW1iZXIiPT10eXBlb2YgdD90OmUuaW5kZXhPZih0KTt0aGlzLl9hY3RpdmVJdGVtSW5kZXg9bix0aGlzLl9hY3RpdmVJdGVtPWVbbl19LHQucHJvdG90eXBlLnVwZGF0ZUFjdGl2ZUl0ZW1JbmRleD1mdW5jdGlvbih0KXt0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0odCl9LHQucHJvdG90eXBlLl9zZXRBY3RpdmVJdGVtQnlEZWx0YT1mdW5jdGlvbih0KXt0aGlzLl93cmFwP3RoaXMuX3NldEFjdGl2ZUluV3JhcE1vZGUodCk6dGhpcy5fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZSh0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUluV3JhcE1vZGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxuPTE7bjw9ZS5sZW5ndGg7bisrKXt2YXIgaT0odGhpcy5fYWN0aXZlSXRlbUluZGV4K3QqbitlLmxlbmd0aCklZS5sZW5ndGg7aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihlW2ldKSlyZXR1cm4gdm9pZCB0aGlzLnNldEFjdGl2ZUl0ZW0oaSl9fSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZT1mdW5jdGlvbih0KXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCx0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUl0ZW1CeUluZGV4PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKG5bdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKG5bdF0pOylpZighblt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX0sdC5wcm90b3R5cGUuX2dldEl0ZW1zQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXRlbXMgaW5zdGFuY2VvZiByLkQ/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfSx0fSgpKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9wbGF0Zm9ybT10fXJldHVybiB0LnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKX0sdC5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hISh0Lm9mZnNldFdpZHRofHx0Lm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Q2xpZW50UmVjdHMmJnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfSh0KSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS52aXNpYmlsaXR5fSx0LnByb3RvdHlwZS5pc1RhYmJhYmxlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7dmFyIGU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LmZyYW1lRWxlbWVudH1jYXRjaCh0KXtyZXR1cm4gbnVsbH19KHQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KTtpZihlKXt2YXIgbj1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoLTE9PT1nKGUpKXJldHVybiExO2lmKCh0aGlzLl9wbGF0Zm9ybS5CTElOS3x8dGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmIm9iamVjdCI9PT1uKXJldHVybiExO2lmKCh0aGlzLl9wbGF0Zm9ybS5CTElOS3x8dGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmIXRoaXMuaXNWaXNpYmxlKGUpKXJldHVybiExfXZhciBpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxyPWcodCk7aWYodC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKXJldHVybi0xIT09cjtpZigiaWZyYW1lIj09PWkpcmV0dXJuITE7aWYoImF1ZGlvIj09PWkpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSlyZXR1cm4hMTtpZih0aGlzLl9wbGF0Zm9ybS5CTElOSylyZXR1cm4hMH1pZigidmlkZW8iPT09aSl7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiZ0aGlzLl9wbGF0Zm9ybS5UUklERU5UKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YKXJldHVybiEwfXJldHVybigib2JqZWN0IiE9PWl8fCF0aGlzLl9wbGF0Zm9ybS5CTElOSyYmIXRoaXMuX3BsYXRmb3JtLldFQktJVCkmJiEodGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj0iaW5wdXQiPT09ZSYmdC50eXBlO3JldHVybiJ0ZXh0Ij09PW58fCJwYXNzd29yZCI9PT1ufHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfSh0KSkmJnQudGFiSW5kZXg+PTB9LHQucHJvdG90eXBlLmlzRm9jdXNhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJiJoaWRkZW4iPT10LnR5cGV9KHQpJiYoZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJidXR0b24iPT09ZXx8InRleHRhcmVhIj09PWV9KHQpfHxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImEiPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KHQpJiZ0Lmhhc0F0dHJpYnV0ZSgiaHJlZiIpfSh0KXx8dC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHx2KHQpKX0odCkmJiF0aGlzLmlzRGlzYWJsZWQodCkmJnRoaXMuaXNWaXNpYmxlKHQpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5ZKShtLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gdih0KXtpZighdC5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PXQudGFiSW5kZXgpcmV0dXJuITE7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuIi0zMjc2OCIhPWUmJiEoIWV8fGlzTmFOKHBhcnNlSW50KGUsMTApKSl9ZnVuY3Rpb24gZyh0KXtpZighdih0KSlyZXR1cm4gbnVsbDt2YXIgZT1wYXJzZUludCh0LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTihlKT8tMTplfXZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIpe3ZvaWQgMD09PXImJihyPSExKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2RvY3VtZW50PWksdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5fZW5hYmxlZD0hMCxyfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3N0YXJ0QW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuZEFuY2hvci50YWJJbmRleD10aGlzLl9lbmFibGVkPzA6LTEpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fZW5kQW5jaG9yJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fZW5kQW5jaG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZW5kQW5jaG9yKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbH0sdC5wcm90b3R5cGUuYXR0YWNoQW5jaG9ycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3N0YXJ0QW5jaG9yfHwodC5fc3RhcnRBbmNob3I9dC5fY3JlYXRlQW5jaG9yKCksdC5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCl9KSksdC5fZW5kQW5jaG9yfHwodC5fZW5kQW5jaG9yPXQuX2NyZWF0ZUFuY2hvcigpLHQuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gdC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl9KSl9KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJih0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX3N0YXJ0QW5jaG9yLHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fZW5kQW5jaG9yLHRoaXMuX2VsZW1lbnQubmV4dFNpYmxpbmcpLHRoaXMuX2hhc0F0dGFjaGVkPSEwKSx0aGlzLl9oYXNBdHRhY2hlZCl9LHQucHJvdG90eXBlLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzSW5pdGlhbEVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5fZ2V0UmVnaW9uQm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2Nkay1mb2N1cy1yZWdpb24tIit0KyJdLCBbY2RrRm9jdXNSZWdpb24iK3QrIl0sIFtjZGstZm9jdXMtIit0KyJdIiksbj0wO248ZS5sZW5ndGg7bisrKWVbbl0uaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtIit0KT9jb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLSIrdCsiJywgdXNlICdjZGtGb2N1c1JlZ2lvbiIrdCsiJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wLiIsZVtuXSk6ZVtuXS5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy1yZWdpb24tIit0KSYmY29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy1yZWdpb24tIit0KyInLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uIit0KyInIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAuIixlW25dKTtyZXR1cm4ic3RhcnQiPT10P2UubGVuZ3RoP2VbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfSx0LnByb3RvdHlwZS5mb2N1c0luaXRpYWxFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO3JldHVybiB0Pyh0Lmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLWluaXRpYWwiKSYmY29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy1pbml0aWFsJywgdXNlICdjZGtGb2N1c0luaXRpYWwnIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAiLHQpLHQuZm9jdXMoKSwhMCk6dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl9LHQucHJvdG90eXBlLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH0sdC5wcm90b3R5cGUuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoImVuZCIpO3JldHVybiB0JiZ0LmZvY3VzKCksISF0fSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH0sdC5wcm90b3R5cGUuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbbl0pOm51bGw7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2NyZWF0ZUFuY2hvcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHR9LHQucHJvdG90eXBlLl9leGVjdXRlT25TdGFibGU9ZnVuY3Rpb24odCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoaC5hKSgxKSkuc3Vic2NyaWJlKHQpfSx0fSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgXyh0LHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGUpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5ZKSh5KSxPYmplY3Qoci5ZKShyLnopLE9iamVjdChyLlkpKGkuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fb3JpZ2luPW51bGwsdGhpcy5fd2luZG93Rm9jdXNlZD0hMSx0aGlzLl9lbGVtZW50SW5mbz1uZXcgTWFwLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9LHRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudD0wfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT0hMSksIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCk7aWYodGhpcy5fZWxlbWVudEluZm8uaGFzKHQpKXt2YXIgaT10aGlzLl9lbGVtZW50SW5mby5nZXQodCk7cmV0dXJuIGkuY2hlY2tDaGlsZHJlbj1lLGkuc3ViamVjdC5hc09ic2VydmFibGUoKX12YXIgcj17dW5saXN0ZW46ZnVuY3Rpb24oKXt9LGNoZWNrQ2hpbGRyZW46ZSxzdWJqZWN0Om5ldyBvLmF9O3RoaXMuX2VsZW1lbnRJbmZvLnNldCh0LHIpLHRoaXMuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpO3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBuLl9vbkZvY3VzKGUsdCl9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uQmx1cihlLHQpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsYSwhMCksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixsLCEwKX0pLHIudW5saXN0ZW49ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixhLCEwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGwsITApfSxyLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXModCksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKHQpLHRoaXMuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpKX0sdC5wcm90b3R5cGUuZm9jdXNWaWE9ZnVuY3Rpb24odCxlLG4pe3RoaXMuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKG4pfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnN0b3BNb25pdG9yaW5nKG4pfSl9LHQucHJvdG90eXBlLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXt2YXIgZT1mdW5jdGlvbigpe3QuX2xhc3RUb3VjaFRhcmdldD1udWxsLHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSxuPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0fHx0Ll9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSgibW91c2UiKX0saT1mdW5jdGlvbihlKXtudWxsIT10Ll90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHQuX3RvdWNoVGltZW91dElkKSx0Ll9sYXN0VG91Y2hUYXJnZXQ9ZS50YXJnZXQsdC5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9sYXN0VG91Y2hUYXJnZXQ9bnVsbH0sNjUwKX0scj1mdW5jdGlvbigpe3QuX3dpbmRvd0ZvY3VzZWQ9ITAsdC5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll93aW5kb3dGb2N1c2VkPSExfSl9O3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsaSwhT2JqZWN0KG0uZCkoKXx8e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIscil9KSx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixpLCFPYmplY3QobS5kKSgpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixyKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0sMSl9KX0sdC5wcm90b3R5cGUuX3dhc0NhdXNlZEJ5VG91Y2g9ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7cmV0dXJuIHRoaXMuX2xhc3RUb3VjaFRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJmUgaW5zdGFuY2VvZiBOb2RlJiYoZT09PXRoaXMuX2xhc3RUb3VjaFRhcmdldHx8ZS5jb250YWlucyh0aGlzLl9sYXN0VG91Y2hUYXJnZXQpKX0sdC5wcm90b3R5cGUuX29uRm9jdXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7aWYobiYmKG4uY2hlY2tDaGlsZHJlbnx8ZT09PXQudGFyZ2V0KSl7dmFyIGk9dGhpcy5fb3JpZ2luO2l8fChpPXRoaXMuX3dpbmRvd0ZvY3VzZWQmJnRoaXMuX2xhc3RGb2N1c09yaWdpbj90aGlzLl9sYXN0Rm9jdXNPcmlnaW46dGhpcy5fd2FzQ2F1c2VkQnlUb3VjaCh0KT8idG91Y2giOiJwcm9ncmFtIiksdGhpcy5fc2V0Q2xhc3NlcyhlLGkpLHRoaXMuX2VtaXRPcmlnaW4obi5zdWJqZWN0LGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfX0sdC5wcm90b3R5cGUuX29uQmx1cj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2VsZW1lbnRJbmZvLmdldChlKTshbnx8bi5jaGVja0NoaWxkcmVuJiZ0LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlLmNvbnRhaW5zKHQucmVsYXRlZFRhcmdldCl8fCh0aGlzLl9zZXRDbGFzc2VzKGUpLHRoaXMuX2VtaXRPcmlnaW4obi5zdWJqZWN0LG51bGwpKX0sdC5wcm90b3R5cGUuX2VtaXRPcmlnaW49ZnVuY3Rpb24odCxlKXt0aGlzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQubmV4dChlKX0pfSx0LnByb3RvdHlwZS5faW5jcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7MT09Kyt0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQmJnRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCl9LHQucHJvdG90eXBlLl9kZWNyZW1lbnRNb25pdG9yZWRFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXstLXRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudHx8KHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7fSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlkpKHIueiksT2JqZWN0KHIuWSkobS5hKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIEModCl7cmV0dXJuIDA9PT10LmJ1dHRvbnN9fSxsemxqOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCJDY25HIikscj0obigiRlZTeSIpLG4oIkZ6cWMiKSxuKCJXZjRwIiksaS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtY2FyZHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjI0cHg7Ym9yZGVyLXJhZGl1czoycHh9Lm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhcmQgLm1hdC1kaXZpZGVyLWhvcml6b250YWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCV9W2Rpcj1ydGxdIC5tYXQtY2FyZCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHtsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWNhcmQgLm1hdC1kaXZpZGVyLWhvcml6b250YWwubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246c3RhdGljO21hcmdpbjowfVtkaXI9cnRsXSAubWF0LWNhcmQgLm1hdC1kaXZpZGVyLWhvcml6b250YWwubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXR7Ym94LXNoYWRvdzpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtY2FyZHtvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC1jYXJkLWFjdGlvbnMsLm1hdC1jYXJkLWNvbnRlbnQsLm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC10aXRsZXtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTZweH0ubWF0LWNhcmQtYWN0aW9uc3ttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHg7cGFkZGluZzo4cHggMH0ubWF0LWNhcmQtYWN0aW9ucy1hbGlnbi1lbmR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgNDhweCk7bWFyZ2luOjAgLTI0cHggMTZweCAtMjRweH0ubWF0LWNhcmQteGwtaW1hZ2V7d2lkdGg6MjQwcHg7aGVpZ2h0OjI0MHB4O21hcmdpbjotOHB4fS5tYXQtY2FyZC1mb290ZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MCAtMjRweCAtMjRweCAtMjRweH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbiwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b257bWFyZ2luOjAgNHB4fS5tYXQtY2FyZC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubWF0LWNhcmQtaGVhZGVyLXRleHR7bWFyZ2luOjAgOHB4fS5tYXQtY2FyZC1hdmF0YXJ7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowfS5tYXQtY2FyZC1sZy1pbWFnZSwubWF0LWNhcmQtbWQtaW1hZ2UsLm1hdC1jYXJkLXNtLWltYWdle21hcmdpbjotOHB4IDB9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MCAtOHB4fS5tYXQtY2FyZC1zbS1pbWFnZXt3aWR0aDo4MHB4O2hlaWdodDo4MHB4fS5tYXQtY2FyZC1tZC1pbWFnZXt3aWR0aDoxMTJweDtoZWlnaHQ6MTEycHh9Lm1hdC1jYXJkLWxnLWltYWdle3dpZHRoOjE1MnB4O2hlaWdodDoxNTJweH1AbWVkaWEgKG1heC13aWR0aDo1OTlweCl7Lm1hdC1jYXJke3BhZGRpbmc6MjRweCAxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0Oi04cHh9Lm1hdC1jYXJkLWltYWdle3dpZHRoOmNhbGMoMTAwJSArIDMycHgpO21hcmdpbjoxNnB4IC0xNnB4fS5tYXQtY2FyZC10aXRsZS1ncm91cHttYXJnaW46MH0ubWF0LWNhcmQteGwtaW1hZ2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtaGVhZGVye21hcmdpbjotOHB4IDAgMCAwfS5tYXQtY2FyZC1mb290ZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4fX0ubWF0LWNhcmQtY29udGVudD46Zmlyc3QtY2hpbGQsLm1hdC1jYXJkPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1hdC1jYXJkLWNvbnRlbnQ+Omxhc3QtY2hpbGQ6bm90KC5tYXQtY2FyZC1mb290ZXIpLC5tYXQtY2FyZD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3Rlcil7bWFyZ2luLWJvdHRvbTowfS5tYXQtY2FyZC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi0yNHB4fS5tYXQtY2FyZD4ubWF0LWNhcmQtYWN0aW9uczpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTE2cHg7cGFkZGluZy1ib3R0b206MH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbjpmaXJzdC1jaGlsZCwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b246Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtc3VidGl0bGU6bm90KDpmaXJzdC1jaGlsZCksLm1hdC1jYXJkLXRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LTRweH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LThweH0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkubGIoMixbaS5hYihudWxsLDApLGkuYWIobnVsbCwxKV0sbnVsbCxudWxsKX12YXIgYT1pLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBzKHQpe3JldHVybiBpLmxiKDIsW2kuYWIobnVsbCwwKSwodCgpKCksaS5SYSgxLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtY2FyZC1oZWFkZXItdGV4dCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLmFiKG51bGwsMSksaS5hYihudWxsLDIpXSxudWxsLG51bGwpfX0sbUNoRjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sbVZzYTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIkNjbkciKTtuKCI0YzM1IiksbigiSzlJYSIpLG4oInB1Z1QiKSxuKCJGL1hMIiksbigibXJTRyIpLG4oImg5RHEiKSxuKCJwMGliIiksbigiaWhZWSIpLG4oImxMQVAiKSxuKCJXZjRwIiksbigibjZnRyIpLG4oIllTaDIiKSxuKCJ0OWZaIiksbigibnkyNCIpLG4oIlZuRC8iKSxuKCJNR0JTIiksbigiem90bSIpLG4oIjY3WS8iKSxuKCIwL3VRIiksbigicDBTaiIpLG4oIlQxRE0iKSxuKCJGRk9vIiksbigiNjBpVSIpLG4oImVEa1AiKSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uZXcgaS5xKCJtYXQtbWVudS1zY3JvbGwtc3RyYXRlZ3kiKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgYT1mdW5jdGlvbigpe319LG1yU0c6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9O2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWkodCxlKSx0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9dmFyIG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MSxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKylmb3IodmFyIHIgaW4gZT1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJih0W3JdPWVbcl0pO3JldHVybiB0fTtmdW5jdGlvbiBhKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXSxuPTA7cmV0dXJuIGU/ZS5jYWxsKHQpOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHQmJm4+PXQubGVuZ3RoJiYodD12b2lkIDApLHt2YWx1ZTp0JiZ0W24rK10sZG9uZTohdH19fX1mdW5jdGlvbiBzKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciBpLHIsbz1uLmNhbGwodCksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShpPW8ubmV4dCgpKS5kb25lOylhLnB1c2goaS52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKG49by5yZXR1cm4pJiZuLmNhbGwobyl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIGwoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdD10LmNvbmNhdChzKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fX0sbjZnRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG51bGwhPXQmJiIiK3QhPSJmYWxzZSJ9ZnVuY3Rpb24gcih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxvKHQpP051bWJlcih0KTplfWZ1bmN0aW9uIG8odCl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQodCkpJiYhaXNOYU4oTnVtYmVyKHQpKX1mdW5jdGlvbiBhKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PXQ/IiI6InN0cmluZyI9PXR5cGVvZiB0P3Q6dCsicHgifW4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KX0sbmtZNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNjaGVkdWxlfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSl9LG55MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIk1HQlMiKSxvPW4oInpvdG0iKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBzKHQpKX19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubm90aWZpZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBsKHQpLGk9T2JqZWN0KG8uYSkobix0aGlzLm5vdGlmaWVyKTtyZXR1cm4gaSYmIWkuY2xvc2VkPyhuLmFkZChpKSxlLnN1YnNjcmliZShuKSk6bn0sdH0oKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlzfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe30sZX0oci5hKX0scDBTajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIklVVGIiKSxyPW4oIlBVOEwiKSxvPW4oIkc1SjEiKSxhPW4oIm5rWTciKSxzPW4oIkYvWEwiKSxsPW4oIjAvdVEiKSx1PW4oIlR4amciKTtmdW5jdGlvbiBjKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W3QubGVuZ3RoLTFdO09iamVjdChhLmEpKG4pP3QucG9wKCk6bj1udWxsO3ZhciBjPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMT09PXQubGVuZ3RofHwyPT09dC5sZW5ndGgmJk9iamVjdChhLmEpKHRbMV0pP09iamVjdChsLmEpKHRbMF0pOk9iamVjdCh1LmEpKCkocy5hLmFwcGx5KHZvaWQgMCx0KSl9KDEhPT1jfHxuP2M+MD9PYmplY3QoaS5hKSh0LG4pOk9iamVjdChvLmIpKG4pOk9iamVjdChyLmEpKHRbMF0pLGUpfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pfSxwMGliOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCI2YmxGIikscj1uKCJua1k3Iiksbz1uKCJabjhEIiksYT1uKCJJVVRiIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1udWxsLGw9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gT2JqZWN0KHIuYSkobCk/KHM9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIGwmJihuPXQucG9wKCkpLG51bGw9PT1zJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIGkuYT90WzBdOk9iamVjdChvLmEpKG4pKE9iamVjdChhLmEpKHQscykpfX0scEltMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJCSG5kIiksbigiSXAwUiIpLG4oInk0cVMiKSksbz0obigiRnpxYyIpLG4oIldmNHAiKSxpLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsibWF0LXRhYmxle2Rpc3BsYXk6YmxvY2t9bWF0LWhlYWRlci1yb3d7bWluLWhlaWdodDo1NnB4fW1hdC1mb290ZXItcm93LG1hdC1yb3d7bWluLWhlaWdodDo0OHB4fW1hdC1mb290ZXItcm93LG1hdC1oZWFkZXItcm93LG1hdC1yb3d7ZGlzcGxheTpmbGV4O2JvcmRlci13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94fW1hdC1mb290ZXItcm93OjphZnRlcixtYXQtaGVhZGVyLXJvdzo6YWZ0ZXIsbWF0LXJvdzo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLWhlaWdodDppbmhlcml0O2NvbnRlbnQ6Jyd9bWF0LWNlbGw6Zmlyc3QtY2hpbGQsbWF0LWZvb3Rlci1jZWxsOmZpcnN0LWNoaWxkLG1hdC1oZWFkZXItY2VsbDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bZGlyPXJ0bF0gbWF0LWNlbGw6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdIG1hdC1mb290ZXItY2VsbDpmaXJzdC1jaGlsZCxbZGlyPXJ0bF0gbWF0LWhlYWRlci1jZWxsOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MjRweH1tYXQtY2VsbDpsYXN0LWNoaWxkLG1hdC1mb290ZXItY2VsbDpsYXN0LWNoaWxkLG1hdC1oZWFkZXItY2VsbDpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bZGlyPXJ0bF0gbWF0LWNlbGw6bGFzdC1jaGlsZCxbZGlyPXJ0bF0gbWF0LWZvb3Rlci1jZWxsOmxhc3QtY2hpbGQsW2Rpcj1ydGxdIG1hdC1oZWFkZXItY2VsbDpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MjRweH1tYXQtY2VsbCxtYXQtZm9vdGVyLWNlbGwsbWF0LWhlYWRlci1jZWxse2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO292ZXJmbG93OmhpZGRlbjt3b3JkLXdyYXA6YnJlYWstd29yZDttaW4taGVpZ2h0OmluaGVyaXR9dGFibGUubWF0LXRhYmxle2JvcmRlci1zcGFjaW5nOjB9dHIubWF0LWhlYWRlci1yb3d7aGVpZ2h0OjU2cHh9dHIubWF0LWZvb3Rlci1yb3csdHIubWF0LXJvd3toZWlnaHQ6NDhweH10aC5tYXQtaGVhZGVyLWNlbGx7dGV4dC1hbGlnbjpsZWZ0fXRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbCx0aC5tYXQtaGVhZGVyLWNlbGx7cGFkZGluZzowO2JvcmRlci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWR9dGQubWF0LWNlbGw6Zmlyc3QtY2hpbGQsdGQubWF0LWZvb3Rlci1jZWxsOmZpcnN0LWNoaWxkLHRoLm1hdC1oZWFkZXItY2VsbDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH10ZC5tYXQtY2VsbDpsYXN0LWNoaWxkLHRkLm1hdC1mb290ZXItY2VsbDpsYXN0LWNoaWxkLHRoLm1hdC1oZWFkZXItY2VsbDpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGkubGIoMixbaS5oYig0MDI2NTMxODQsMSx7X3Jvd091dGxldDowfSksaS5oYig0MDI2NTMxODQsMix7X2hlYWRlclJvd091dGxldDowfSksaS5oYig0MDI2NTMxODQsMyx7X2Zvb3RlclJvd091dGxldDowfSksKHQoKSgpLGkuUmEoMywxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5RYSg0LDE2Mzg0LFtbMiw0XV0sMCxyLnMsW2kuUSxpLmtdLG51bGwsbnVsbCksKHQoKSgpLGkuUmEoNSwxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5RYSg2LDE2Mzg0LFtbMSw0XV0sMCxyLnEsW2kuUSxpLmtdLG51bGwsbnVsbCksKHQoKSgpLGkuUmEoNywxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5RYSg4LDE2Mzg0LFtbMyw0XV0sMCxyLnIsW2kuUSxpLmtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIHM9aS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gaS5sYigyLFsodCgpKCksaS5SYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDEsMTQ3NDU2LG51bGwsMCxyLmMsW2kuUV0sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgdT1pLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBjKHQpe3JldHVybiBpLmxiKDIsWyh0KCkoKSxpLlJhKDAsMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuUWEoMSwxNDc0NTYsbnVsbCwwLHIuYyxbaS5RXSxudWxsLG51bGwpXSxudWxsLG51bGwpfX0scE1uUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigiWllDaSIpLG89aS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlFhKDEsMjEyOTkyLG51bGwsMCxyLm8sW3IuYixpLlEsaS5qLFs4LG51bGxdLGkuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIHM9aS5OYSgibmctY29tcG9uZW50IixyLnMsZnVuY3Rpb24odCl7cmV0dXJuIGkubGIoMCxbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLGEsbykpLGkuUWEoMSw0OTE1MixudWxsLDAsci5zLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKX0scFpoTTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ZnVuY3Rpb24oKXt9fSxwc1cwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgaT1uKCJtclNHIikscj1uKCJ6b3RtIiksbz1uKCJNR0JTIiksYT1uKCI2N1kvIikscz1uKCIwL3VRIik7ZnVuY3Rpb24gbCh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oaSl7cmV0dXJuIGkucGlwZShsKGZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdChzLmEpKHQobixpKSkucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0LHIpe3JldHVybiBlKG4sdCxpLHIpfSkpfSxuKSl9OigibnVtYmVyIj09dHlwZW9mIGUmJihuPWUpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IHUodCxuKSl9KX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMucHJvamVjdD10LHRoaXMuY29uY3VycmVudD1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBjKHQsdGhpcy5wcm9qZWN0LHRoaXMuY29uY3VycmVudCkpfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dm9pZCAwPT09aSYmKGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5wcm9qZWN0PW4sci5jb25jdXJyZW50PWksci5oYXNDb21wbGV0ZWQ9ITEsci5idWZmZXI9W10sci5hY3RpdmU9MCxyLmluZGV4PTAscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU8dGhpcy5jb25jdXJyZW50P3RoaXMuX3RyeU5leHQodCk6dGhpcy5idWZmZXIucHVzaCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5wcm9qZWN0KHQsbil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmFjdGl2ZSsrLHRoaXMuX2lubmVyU3ViKGUsdCxuKX0sZS5wcm90b3R5cGUuX2lubmVyU3ViPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmFkZChPYmplY3Qoci5hKSh0aGlzLHQsZSxuKSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaGFzQ29tcGxldGVkPSEwLDA9PT10aGlzLmFjdGl2ZSYmMD09PXRoaXMuYnVmZmVyLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1ZmZlcjt0aGlzLnJlbW92ZSh0KSx0aGlzLmFjdGl2ZS0tLGUubGVuZ3RoPjA/dGhpcy5fbmV4dChlLnNoaWZ0KCkpOjA9PT10aGlzLmFjdGl2ZSYmdGhpcy5oYXNDb21wbGV0ZWQmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oby5hKX0scHVnVDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImlzYnkiKSxyPW4oIk1jU28iKSxvPW4oIjJCZGoiKSxhPW4oIkVobWsiKSxzPW4oImVpaHMiKSxsPW4oIm1yU0ciKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dmFyIGk9dC5jYWxsKHRoaXMsbj9uLmxlbmd0aCsiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4gICIrbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSsxKyIpICIrdC50b1N0cmluZygpfSkuam9pbigiXG4gICIpOiIiKXx8dGhpcztyZXR1cm4gaS5lcnJvcnM9bixpLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihpLGUucHJvdG90eXBlKSxpfXJldHVybiBsLmIoZSx0KSxlfShFcnJvcik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5zdWJzY3JpYmU9dCl9dmFyIGU7cmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQsZT0hMTtpZighdGhpcy5jbG9zZWQpe3ZhciBuPXRoaXMuX3BhcmVudCxsPXRoaXMuX3BhcmVudHMsYz10aGlzLl91bnN1YnNjcmliZSxkPXRoaXMuX3N1YnNjcmlwdGlvbnM7dGhpcy5jbG9zZWQ9ITAsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbDtmb3IodmFyIGg9LTEscD1sP2wubGVuZ3RoOjA7bjspbi5yZW1vdmUodGhpcyksbj0rK2g8cCYmbFtoXXx8bnVsbDtpZihPYmplY3Qoby5hKShjKSYmT2JqZWN0KGEuYSkoYykuY2FsbCh0aGlzKT09PXMuYSYmKGU9ITAsdD10fHwocy5hLmUgaW5zdGFuY2VvZiB1P2Yocy5hLmUuZXJyb3JzKTpbcy5hLmVdKSksT2JqZWN0KGkuYSkoZCkpZm9yKGg9LTEscD1kLmxlbmd0aDsrK2g8cDspe3ZhciBtPWRbaF07aWYoT2JqZWN0KHIuYSkobSkmJk9iamVjdChhLmEpKG0udW5zdWJzY3JpYmUpLmNhbGwobSk9PT1zLmEpe2U9ITAsdD10fHxbXTt2YXIgYj1zLmEuZTtiIGluc3RhbmNlb2YgdT90PXQuY29uY2F0KGYoYi5lcnJvcnMpKTp0LnB1c2goYil9fWlmKGUpdGhyb3cgbmV3IHUodCl9fSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYoIWV8fGU9PT10LkVNUFRZKXJldHVybiB0LkVNUFRZO2lmKGU9PT10aGlzKXJldHVybiB0aGlzO3ZhciBuPWU7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImZ1bmN0aW9uIjpuPW5ldyB0KGUpO2Nhc2Uib2JqZWN0IjppZihuLmNsb3NlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIG4udW5zdWJzY3JpYmUpcmV0dXJuIG47aWYodGhpcy5jbG9zZWQpcmV0dXJuIG4udW5zdWJzY3JpYmUoKSxuO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuLl9hZGRQYXJlbnQpe3ZhciBpPW47KG49bmV3IHQpLl9zdWJzY3JpcHRpb25zPVtpXX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrZSsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1yZXR1cm4odGhpcy5fc3Vic2NyaXB0aW9uc3x8KHRoaXMuX3N1YnNjcmlwdGlvbnM9W10pKS5wdXNoKG4pLG4uX2FkZFBhcmVudCh0aGlzKSxufSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vic2NyaXB0aW9ucztpZihlKXt2YXIgbj1lLmluZGV4T2YodCk7LTEhPT1uJiZlLnNwbGljZShuLDEpfX0sdC5wcm90b3R5cGUuX2FkZFBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJlbnQsbj10aGlzLl9wYXJlbnRzO2UmJmUhPT10P24/LTE9PT1uLmluZGV4T2YodCkmJm4ucHVzaCh0KTp0aGlzLl9wYXJlbnRzPVt0XTp0aGlzLl9wYXJlbnQ9dH0sdC5FTVBUWT0oKGU9bmV3IHQpLmNsb3NlZD0hMCxlKSx0fSgpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUgaW5zdGFuY2VvZiB1P2UuZXJyb3JzOmUpfSxbXSl9fSxxQWxTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pO3ZhciBpPW4oImRXWmciKSxyPW4oIkNjbkciKSxvPW4oIks5SWEiKSxhPW4oIjZibEYiKSxzPW4oIkYvWEwiKSxsPW4oImJuZTUiKSx1PW4oInAwaWIiKSxjPW4oIlJuZXkiKSxmPW4oIlZuRC8iKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fc2Nyb2xsZWQ9bmV3IG8uYSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl9zY3JvbGxlZC5uZXh0KHQpfSk7dGhpcy5zY3JvbGxDb250YWluZXJzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5kZXJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQodCk7ZSYmKGUudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuc2Nyb2xsZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9hLmEuY3JlYXRlKGZ1bmN0aW9uKG4pe2UuX2dsb2JhbFN1YnNjcmlwdGlvbnx8ZS5fYWRkR2xvYmFsTGlzdGVuZXIoKTt2YXIgaT10PjA/ZS5fc2Nyb2xsZWQucGlwZShPYmplY3QoYy5hKSh0KSkuc3Vic2NyaWJlKG4pOmUuX3Njcm9sbGVkLnN1YnNjcmliZShuKTtyZXR1cm4gZS5fc2Nyb2xsZWRDb3VudCsrLGZ1bmN0aW9uKCl7aS51bnN1YnNjcmliZSgpLGUuX3Njcm9sbGVkQ291bnQtLSxlLl9zY3JvbGxlZENvdW50fHxlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOk9iamVjdChzLmEpKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuZGVyZWdpc3RlcihuKX0pLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmFuY2VzdG9yU2Nyb2xsZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0KTtyZXR1cm4gdGhpcy5zY3JvbGxlZChlKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fHxuLmluZGV4T2YodCk+LTF9KSl9LHQucHJvdG90eXBlLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChyLHQpJiZuLnB1c2gocil9KSxufSx0LnByb3RvdHlwZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPWUubmF0aXZlRWxlbWVudCxpPXQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYobj09aSlyZXR1cm4hMH13aGlsZShuPW4ucGFyZW50RWxlbWVudCk7cmV0dXJuITF9LHQucHJvdG90eXBlLl9hZGRHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBPYmplY3QobC5hKSh3aW5kb3cuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9zY3JvbGxlZC5uZXh0KCl9KX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXI9ZnVuY3Rpb24oKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlkpKHIueiksT2JqZWN0KHIuWSkoaS5hKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9zY3JvbGw9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IG8uYSx0aGlzLl9zY3JvbGxMaXN0ZW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gaS5fZWxlbWVudFNjcm9sbGVkLm5leHQodCl9fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHQuX3Njcm9sbExpc3RlbmVyKX0pLHRoaXMuX3Njcm9sbC5yZWdpc3Rlcih0aGlzKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9zY3JvbGxMaXN0ZW5lciYmdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX3Njcm9sbExpc3RlbmVyKSx0aGlzLl9lbGVtZW50U2Nyb2xsZWQuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuZWxlbWVudFNjcm9sbGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0RWxlbWVudFJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmfSx0fSgpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX2NoYW5nZT10LmlzQnJvd3Nlcj9lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdCh1LmEpKE9iamVjdChsLmEpKHdpbmRvdywicmVzaXplIiksT2JqZWN0KGwuYSkod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOk9iamVjdChzLmEpKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3AraSxyaWdodDp0LmxlZnQrbixoZWlnaHQ6aSx3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZShPYmplY3QoYy5hKSh0KSk6dGhpcy5fY2hhbmdlfSx0LnByb3RvdHlwZS5fdXBkYXRlVmlld3BvcnRTaXplPWZ1bmN0aW9uKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6d2luZG93LmlubmVyV2lkdGgsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5ZKShpLmEpLE9iamVjdChyLlkpKHIueikpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxtPXtwcm92aWRlOnAsZGVwczpbW25ldyByLkEsbmV3IHIuSyxwXSxpLmEsci56XSx1c2VGYWN0b3J5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdHx8bmV3IHAoZSxuKX19LGI9ZnVuY3Rpb24oKXt9fSxyZjMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT1mdW5jdGlvbih0LGUpe3RoaXMucGFnZU5hbWU9dCx0aGlzLmNodW5rVVJMPWUsdGhpcy5jaHVua0xvYWRlZD0hMX0scj1bbmV3IGkoIi9zdXBwb3J0IiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvOS85MS9ULS1HT19QYXJpcy1TYWNsYXktLXN1cHBvcnRfY2h1bmsuYmFzZTY0LnR4dCIpLG5ldyBpKCIvdGVhbSIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzcvNzQvVC0tR09fUGFyaXMtU2FjbGF5LS10ZWFtX2NodW5rLmJhc2U2NC50eHQiKSxuZXcgaSgiL2xhYm5vdGVib29rIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMC8wMi9ULS1HT19QYXJpcy1TYWNsYXktLWxhYm5vdGVib29rX2NodW5rLmJhc2U2NC50eHQiKSxuZXcgaSgiL2F0dHJpYnV0aW9uIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81YS9ULS1HT19QYXJpcy1TYWNsYXktLWF0dHJpYnV0aW9uX2NodW5rLmJhc2U2NC50eHQiKSxuZXcgaSgiL2Jpb2xvZ3kiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8xLzE1L1QtLUdPX1BhcmlzLVNhY2xheS0tYmlvbG9neV9jaHVuay5iYXNlNjQudHh0IildfSxzZVAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgaT1uKCJDY25HIikscj0obigiaWhZWSIpLG4oIm1yU0ciKSksbz1uKCJuNmdHIiksYT1uKCJXZjRwIikscz1uKCJHNUoxIiksbD1uKCJwMGliIiksdT1uKCJibmU1IiksYz1uKCJ0OWZaIiksZj1uKCJwMFNqIiksZD1mdW5jdGlvbigpe307ZnVuY3Rpb24gaCh0KXtyZXR1cm4gRXJyb3IoIkEgaGludCB3YXMgYWxyZWFkeSBkZWNsYXJlZCBmb3IgJ2FsaWduPVwiIit0KyJcIicuIil9dmFyIHA9MCxtPU9iamVjdChhLnopKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0sInByaW1hcnkiKSxiPW5ldyBpLnEoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyLG8sYSxzLGwpe3ZhciB1PXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiB1Ll9lbGVtZW50UmVmPWUsdS5fY2hhbmdlRGV0ZWN0b3JSZWY9bix1Ll9kaXI9cix1Ll9kZWZhdWx0T3B0aW9ucz1vLHUuX3BsYXRmb3JtPWEsdS5fbmdab25lPXMsdS5fc2hvd0Fsd2F5c0FuaW1hdGU9ITEsdS5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU9IiIsdS5faGludExhYmVsPSIiLHUuX2hpbnRMYWJlbElkPSJtYXQtaGludC0iK3ArKyx1Ll9sYWJlbElkPSJtYXQtZm9ybS1maWVsZC1sYWJlbC0iK3ArKyx1Ll9sYWJlbE9wdGlvbnM9aXx8e30sdS5mbG9hdExhYmVsPXUuX2xhYmVsT3B0aW9ucy5mbG9hdHx8ImF1dG8iLHUuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT1sLHV9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhcHBlYXJhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGVhcmFuY2V8fHRoaXMuX2RlZmF1bHRPcHRpb25zJiZ0aGlzLl9kZWZhdWx0T3B0aW9ucy5hcHBlYXJhbmNlfHwibGVnYWN5In0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9dCwib3V0bGluZSI9PT10aGlzLl9hcHBlYXJhbmNlJiZuIT09dCYmKHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShPYmplY3QoYy5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlT3V0bGluZUdhcCgpfSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlT3V0bGluZUdhcCgpfSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGlkZVJlcXVpcmVkTWFya2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1PYmplY3Qoby5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIl9zaG91bGRBbHdheXNGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfY2FuTGFiZWxGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiJuZXZlciIhPT10aGlzLmZsb2F0TGFiZWx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaW50TGFiZWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGludExhYmVsfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGludExhYmVsPXQsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbG9hdExhYmVsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuImxlZ2FjeSIhPT10aGlzLmFwcGVhcmFuY2UmJiJuZXZlciI9PT10aGlzLl9mbG9hdExhYmVsPyJhdXRvIjp0aGlzLl9mbG9hdExhYmVsfSxzZXQ6ZnVuY3Rpb24odCl7dCE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPXR8fHRoaXMuX2xhYmVsT3B0aW9ucy5mbG9hdHx8ImF1dG8iLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Db250YWluZXJSZWZ8fHRoaXMuX2VsZW1lbnRSZWZ9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdmFsaWRhdGVDb250cm9sQ2hpbGQoKSx0aGlzLl9jb250cm9sLmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWZvcm0tZmllbGQtdHlwZS0iK3RoaXMuX2NvbnRyb2wuY29udHJvbFR5cGUpLHRoaXMuX2NvbnRyb2wuc3RhdGVDaGFuZ2VzLnBpcGUoT2JqZWN0KGYuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdC5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdC5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KTt2YXIgZT10aGlzLl9jb250cm9sLm5nQ29udHJvbCYmdGhpcy5fY29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzfHxzLmE7T2JqZWN0KGwuYSkoZSx0aGlzLl9wcmVmaXhDaGlsZHJlbi5jaGFuZ2VzLHRoaXMuX3N1ZmZpeENoaWxkcmVuLmNoYW5nZXMpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoT2JqZWN0KGYuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3Byb2Nlc3NIaW50cygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoT2JqZWN0KGYuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3N5bmNEZXNjcmliZWRCeUlkcygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZD1mdW5jdGlvbigpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCl9LGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSxlLnByb3RvdHlwZS5fc2hvdWxkRm9yd2FyZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGUmJmVbdF19LGUucHJvdG90eXBlLl9oYXNQbGFjZWhvbGRlcj1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wucGxhY2Vob2xkZXJ8fHRoaXMuX3BsYWNlaG9sZGVyQ2hpbGQpfSxlLnByb3RvdHlwZS5faGFzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2xhYmVsQ2hpbGR9LGUucHJvdG90eXBlLl9zaG91bGRMYWJlbEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQmJih0aGlzLl9jb250cm9sLnNob3VsZExhYmVsRmxvYXR8fHRoaXMuX3Nob3VsZEFsd2F5c0Zsb2F0KX0sZS5wcm90b3R5cGUuX2hpZGVDb250cm9sUGxhY2Vob2xkZXI9ZnVuY3Rpb24oKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9LGUucHJvdG90eXBlLl9oYXNGbG9hdGluZ0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0xhYmVsKCl8fCJsZWdhY3kiPT09dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLl9oYXNQbGFjZWhvbGRlcigpfSxlLnByb3RvdHlwZS5fZ2V0RGlzcGxheWVkTWVzc2FnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiYmdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGg+MCYmdGhpcy5fY29udHJvbC5lcnJvclN0YXRlPyJlcnJvciI6ImhpbnQifSxlLnByb3RvdHlwZS5fYW5pbWF0ZUFuZExvY2tMYWJlbD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpJiZ0aGlzLl9jYW5MYWJlbEZsb2F0JiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJih0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMCxPYmplY3QodS5hKSh0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2l0aW9uZW5kIikucGlwZShPYmplY3QoYy5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fc2hvd0Fsd2F5c0FuaW1hdGU9ITF9KSksdGhpcy5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzPWZ1bmN0aW9uKCl7aWYodGhpcy5fY29udHJvbC5wbGFjZWhvbGRlciYmdGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl0aHJvdyBFcnJvcigiUGxhY2Vob2xkZXIgYXR0cmlidXRlIGFuZCBjaGlsZCBlbGVtZW50IHdlcmUgYm90aCBzcGVjaWZpZWQuIil9LGUucHJvdG90eXBlLl9wcm9jZXNzSGludHM9ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9LGUucHJvdG90eXBlLl92YWxpZGF0ZUhpbnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXM7dGhpcy5faGludENoaWxkcmVuJiZ0aGlzLl9oaW50Q2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihpKXtpZigic3RhcnQiPT09aS5hbGlnbil7aWYodHx8bi5oaW50TGFiZWwpdGhyb3cgaCgic3RhcnQiKTt0PWl9ZWxzZSBpZigiZW5kIj09PWkuYWxpZ24pe2lmKGUpdGhyb3cgaCgiZW5kIik7ZT1pfX0pfSxlLnByb3RvdHlwZS5fc3luY0Rlc2NyaWJlZEJ5SWRzPWZ1bmN0aW9uKCl7aWYodGhpcy5fY29udHJvbCl7dmFyIHQ9W107aWYoImhpbnQiPT09dGhpcy5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSl7dmFyIGU9dGhpcy5faGludENoaWxkcmVuP3RoaXMuX2hpbnRDaGlsZHJlbi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiJzdGFydCI9PT10LmFsaWdufSk6bnVsbCxuPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4iZW5kIj09PXQuYWxpZ259KTpudWxsO2U/dC5wdXNoKGUuaWQpOnRoaXMuX2hpbnRMYWJlbCYmdC5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxuJiZ0LnB1c2gobi5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiYodD10aGlzLl9lcnJvckNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKTt0aGlzLl9jb250cm9sLnNldERlc2NyaWJlZEJ5SWRzKHQpfX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlQ29udHJvbENoaWxkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NvbnRyb2wpdGhyb3cgRXJyb3IoIm1hdC1mb3JtLWZpZWxkIG11c3QgY29udGFpbiBhIE1hdEZvcm1GaWVsZENvbnRyb2wuIil9LGUucHJvdG90eXBlLnVwZGF0ZU91dGxpbmVHYXA9ZnVuY3Rpb24oKXtpZigib3V0bGluZSI9PT10aGlzLmFwcGVhcmFuY2Upe3ZhciB0PTAsZT0wLG49dGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IiksaT10aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwIik7aWYodGhpcy5fbGFiZWwmJnRoaXMuX2xhYmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKXtpZih0aGlzLl9wbGF0Zm9ybSYmIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKXJldHVybjtmb3IodmFyIHI9dGhpcy5fZ2V0U3RhcnRFbmQodGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxvPXRoaXMuX2dldFN0YXJ0RW5kKHRoaXMuX2xhYmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGE9MCxzPTAsbD10aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO3M8bC5sZW5ndGg7cysrKWErPWxbc10ub2Zmc2V0V2lkdGg7dD1vLXItNSxlPS43NSphKzEwfWZvcih2YXIgdT0wO3U8bi5sZW5ndGg7dSsrKW4uaXRlbSh1KS5zdHlsZS53aWR0aD10KyJweCI7Zm9yKHU9MDt1PGkubGVuZ3RoO3UrKylpLml0ZW0odSkuc3R5bGUud2lkdGg9ZSsicHgifX0sZS5wcm90b3R5cGUuX2dldFN0YXJ0RW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlP3QucmlnaHQ6dC5sZWZ0fSxlfShtKSx2PWZ1bmN0aW9uKCl7fX0sInQvTmEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBMfSk7dmFyIGk9bigibXJTRyIpLHI9bigiQ2NuRyIpLG89bigiRi9YTCIpLGE9bigiNmJsRiIpLHM9bigiUGhqbiIpLGw9bigiVm5ELyIpLHU9bigiNjdZLyIpLGM9bigiSXAwUiIpLGY9ZnVuY3Rpb24oKXt9LGQ9ZnVuY3Rpb24oKXt9LGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCx0P3RoaXMubGF6eUluaXQ9InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7ZS5oZWFkZXJzPW5ldyBNYXAsdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5kZXhPZigiOiIpO2lmKG4+MCl7dmFyIGk9dC5zbGljZSgwLG4pLHI9aS50b0xvd2VyQ2FzZSgpLG89dC5zbGljZShuKzEpLnRyaW0oKTtlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaSxyKSxlLmhlYWRlcnMuaGFzKHIpP2UuaGVhZGVycy5nZXQocikucHVzaChvKTplLmhlYWRlcnMuc2V0KHIsW29dKX19KX06ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0scj1uLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLGkubGVuZ3RoPjAmJihlLmhlYWRlcnMuc2V0KHIsaSksZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG4scikpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3RoaXMuaW5pdCgpO3ZhciBlPXRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lWzBdOm51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImEifSl9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGUpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoZSx0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseVVwZGF0ZSh0KX0pLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9LHQucHJvdG90eXBlLmNvcHlGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuaGVhZGVycy5zZXQobix0LmhlYWRlcnMuZ2V0KG4pKSxlLm5vcm1hbGl6ZWROYW1lcy5zZXQobix0Lm5vcm1hbGl6ZWROYW1lcy5nZXQobikpfSl9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLmxhenlJbml0PXRoaXMubGF6eUluaXQmJnRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMubGF6eUluaXQ6dGhpcyxuLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmFwcGx5VXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6dmFyIG49dC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIG4mJihuPVtuXSksMD09PW4ubGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUodC5uYW1lLGUpO3ZhciByPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107ci5wdXNoLmFwcGx5KHIsT2JqZWN0KGkuZCkobikpLHRoaXMuaGVhZGVycy5zZXQoZSxyKTticmVhaztjYXNlImQiOnZhciBvPXQudmFsdWU7aWYobyl7dmFyIGE9dGhpcy5oZWFkZXJzLmdldChlKTtpZighYSlyZXR1cm47MD09PShhPWEuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybi0xPT09by5pbmRleE9mKHQpfSkpLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSxhKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0KGUubm9ybWFsaXplZE5hbWVzLmdldChuKSxlLmhlYWRlcnMuZ2V0KG4pKX0pfSx0fSgpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCl9LHQucHJvdG90eXBlLmVuY29kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpfSx0LnByb3RvdHlwZS5kZWNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX0sdC5wcm90b3R5cGUuZGVjb2RlVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX0sdH0oKTtmdW5jdGlvbiBtKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2dpLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2dpLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTNCL2dpLCI7IikucmVwbGFjZSgvJTJCL2dpLCIrIikucmVwbGFjZSgvJTNEL2dpLCI9IikucmVwbGFjZSgvJTNGL2dpLCI/IikucmVwbGFjZSgvJTJGL2dpLCIvIil9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgZSxuLHIsbz10aGlzO2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPXQuZW5jb2Rlcnx8bmV3IHAsdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9KGU9dC5mcm9tU3RyaW5nLG49dGhpcy5lbmNvZGVyLHI9bmV3IE1hcCxlLmxlbmd0aD4wJiZlLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIj0iKSxvPU9iamVjdChpLmMpKC0xPT1lP1tuLmRlY29kZUtleSh0KSwiIl06W24uZGVjb2RlS2V5KHQuc2xpY2UoMCxlKSksbi5kZWNvZGVWYWx1ZSh0LnNsaWNlKGUrMSkpXSwyKSxhPW9bMF0scz1vWzFdLGw9ci5nZXQoYSl8fFtdO2wucHVzaChzKSxyLnNldChhLGwpfSkscil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZnJvbU9iamVjdFtlXTtvLm1hcC5zZXQoZSxBcnJheS5pc0FycmF5KG4pP246W25dKX0pKTp0aGlzLm1hcD1udWxsfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3RoaXMuaW5pdCgpO3ZhciBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoicyJ9KX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiZCJ9KX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAoZnVuY3Rpb24oZSl7dmFyIG49dC5lbmNvZGVyLmVuY29kZUtleShlKTtyZXR1cm4gdC5tYXAuZ2V0KGUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbisiPSIrdC5lbmNvZGVyLmVuY29kZVZhbHVlKGUpfSkuam9pbigiJiIpfSkuam9pbigiJiIpfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdCh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gbi5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsbi51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQoW2VdKSxufSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQubWFwLnNldChlLHQuY2xvbmVGcm9tLm1hcC5nZXQoZSkpfSksdGhpcy51cGRhdGVzLmZvckVhY2goZnVuY3Rpb24oZSl7c3dpdGNoKGUub3Ape2Nhc2UiYSI6Y2FzZSJzIjp2YXIgbj0oImEiPT09ZS5vcD90Lm1hcC5nZXQoZS5wYXJhbSk6dm9pZCAwKXx8W107bi5wdXNoKGUudmFsdWUpLHQubWFwLnNldChlLnBhcmFtLG4pO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09ZS52YWx1ZSl7dC5tYXAuZGVsZXRlKGUucGFyYW0pO2JyZWFrfXZhciBpPXQubWFwLmdldChlLnBhcmFtKXx8W10scj1pLmluZGV4T2YoZS52YWx1ZSk7LTEhPT1yJiZpLnNwbGljZShyLDEpLGkubGVuZ3RoPjA/dC5tYXAuc2V0KGUucGFyYW0saSk6dC5tYXAuZGVsZXRlKGUucGFyYW0pfX0pLHRoaXMuY2xvbmVGcm9tPW51bGwpfSx0fSgpO2Z1bmN0aW9uIHkodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIHYodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZ0IGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBnKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dmFyIHI7aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGk/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxyPWkpOnI9bixyJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIXIucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyxyLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxyLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9ci5oZWFkZXJzKSxyLnBhcmFtcyYmKHRoaXMucGFyYW1zPXIucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBoKSx0aGlzLnBhcmFtcyl7dmFyIG89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09by5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXt2YXIgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStvfX1lbHNlIHRoaXMucGFyYW1zPW5ldyBiLHRoaXMudXJsV2l0aFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5zZXJpYWxpemVCb2R5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDp5KHRoaXMuYm9keSl8fHYodGhpcy5ib2R5KXx8Zyh0aGlzLmJvZHkpfHwic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgYj90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmcodGhpcy5ib2R5KT9udWxsOnYodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDp5KHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgYj8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpPyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5tZXRob2R8fHRoaXMubWV0aG9kLGk9ZS51cmx8fHRoaXMudXJsLHI9ZS5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLG89dm9pZCAwIT09ZS5ib2R5P2UuYm9keTp0aGlzLmJvZHksYT12b2lkIDAhPT1lLndpdGhDcmVkZW50aWFscz9lLndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxzPXZvaWQgMCE9PWUucmVwb3J0UHJvZ3Jlc3M/ZS5yZXBvcnRQcm9ncmVzczp0aGlzLnJlcG9ydFByb2dyZXNzLGw9ZS5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsdT1lLnBhcmFtc3x8dGhpcy5wYXJhbXM7cmV0dXJuIHZvaWQgMCE9PWUuc2V0SGVhZGVycyYmKGw9T2JqZWN0LmtleXMoZS5zZXRIZWFkZXJzKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldEhlYWRlcnNbbl0pfSxsKSksZS5zZXRQYXJhbXMmJih1PU9iamVjdC5rZXlzKGUuc2V0UGFyYW1zKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldFBhcmFtc1tuXSl9LHUpKSxuZXcgdChuLGksbyx7cGFyYW1zOnUsaGVhZGVyczpsLHJlcG9ydFByb2dyZXNzOnMscmVzcG9uc2VUeXBlOnIsd2l0aENyZWRlbnRpYWxzOmF9KX0sdH0oKSx3PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuU2VudD0wXT0iU2VudCIsdFt0LlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsdFt0LkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZT00XT0iUmVzcG9uc2UiLHRbdC5Vc2VyPTVdPSJVc2VyIix0fSh7fSkseD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MjAwKSx2b2lkIDA9PT1uJiYobj0iT0siKSx0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgaCx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fG4sdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fSgpLEM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4udHlwZT13LlJlc3BvbnNlSGVhZGVyLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxuZXcgZSh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0oeCksUz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPXcuUmVzcG9uc2Usbi5ib2R5PXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6bnVsbCxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0oeCksTz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzLGUsMCwiVW5rbm93biBFcnJvciIpfHx0aGlzO3JldHVybiBuLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIixuLm9rPSExLG4ubWVzc2FnZT1uLnN0YXR1cz49MjAwJiZuLnN0YXR1czwzMDA/Ikh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgIisoZS51cmx8fCIodW5rbm93biB1cmwpIik6Ikh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgIisoZS51cmx8fCIodW5rbm93biB1cmwpIikrIjogIitlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0LG4uZXJyb3I9ZS5lcnJvcnx8bnVsbCxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KHgpO2Z1bmN0aW9uIEUodCxlKXtyZXR1cm57Ym9keTplLGhlYWRlcnM6dC5oZWFkZXJzLG9ic2VydmU6dC5vYnNlcnZlLHBhcmFtczp0LnBhcmFtcyxyZXBvcnRQcm9ncmVzczp0LnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6dC53aXRoQ3JlZGVudGlhbHN9fXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmhhbmRsZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbih0LGUsbil7dmFyIGkscj10aGlzO2lmKHZvaWQgMD09PW4mJihuPXt9KSx0IGluc3RhbmNlb2YgXylpPXQ7ZWxzZXt2YXIgYTthPW4uaGVhZGVycyBpbnN0YW5jZW9mIGg/bi5oZWFkZXJzOm5ldyBoKG4uaGVhZGVycyk7dmFyIGM9dm9pZCAwO24ucGFyYW1zJiYoYz1uLnBhcmFtcyBpbnN0YW5jZW9mIGI/bi5wYXJhbXM6bmV3IGIoe2Zyb21PYmplY3Q6bi5wYXJhbXN9KSksaT1uZXcgXyh0LGUsdm9pZCAwIT09bi5ib2R5P24uYm9keTpudWxsLHtoZWFkZXJzOmEscGFyYW1zOmMscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6bi53aXRoQ3JlZGVudGlhbHN9KX12YXIgZj1PYmplY3Qoby5hKShpKS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhbmRsZXIuaGFuZGxlKHQpfSkpO2lmKHQgaW5zdGFuY2VvZiBffHwiZXZlbnRzIj09PW4ub2JzZXJ2ZSlyZXR1cm4gZjt2YXIgZD1mLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBTfSkpO3N3aXRjaChuLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goaS5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBkLnBpcGUoT2JqZWN0KHUuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBkLnBpcGUoT2JqZWN0KHUuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBkLnBpcGUoT2JqZWN0KHUuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImpzb24iOmRlZmF1bHQ6cmV0dXJuIGQucGlwZShPYmplY3QodS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5ib2R5fSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBkO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAiK24ub2JzZXJ2ZSsifSIpfX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkRFTEVURSIsdCxlKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkdFVCIsdCxlKX0sdC5wcm90b3R5cGUuaGVhZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfSx0LnByb3RvdHlwZS5qc29ucD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIix0LHtwYXJhbXM6KG5ldyBiKS5hcHBlbmQoZSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9LHQucHJvdG90eXBlLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsdCxlKX0sdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQQVRDSCIsdCxFKG4sZSkpfSx0LnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUE9TVCIsdCxFKG4sZSkpfSx0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQVVQiLHQsRShuLGUpKX0sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMubmV4dD10LHRoaXMuaW50ZXJjZXB0b3I9ZX1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludGVyY2VwdG9yLmludGVyY2VwdCh0LHRoaXMubmV4dCl9LHR9KCksST1uZXcgci5xKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5oYW5kbGUodCl9LHR9KCksUj0vXlwpXF1cfScsP1xuLyxBPWZ1bmN0aW9uKCl7fSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fSx0fSgpLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMueGhyRmFjdG9yeT10fXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigiSlNPTlAiPT09dC5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBKc29ucENsaWVudE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBhLmEoZnVuY3Rpb24obil7dmFyIGk9ZS54aHJGYWN0b3J5LmJ1aWxkKCk7aWYoaS5vcGVuKHQubWV0aG9kLHQudXJsV2l0aFBhcmFtcyksdC53aXRoQ3JlZGVudGlhbHMmJihpLndpdGhDcmVkZW50aWFscz0hMCksdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5zZXRSZXF1ZXN0SGVhZGVyKHQsZS5qb2luKCIsIikpfSksdC5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fGkuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIXQuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXt2YXIgcj10LmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PXImJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixyKX1pZih0LnJlc3BvbnNlVHlwZSl7dmFyIG89dC5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtpLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1vP286InRleHQifXZhciBhPXQuc2VyaWFsaXplQm9keSgpLHM9bnVsbCxsPWZ1bmN0aW9uKCl7aWYobnVsbCE9PXMpcmV0dXJuIHM7dmFyIGU9MTIyMz09PWkuc3RhdHVzPzIwNDppLnN0YXR1cyxuPWkuc3RhdHVzVGV4dHx8Ik9LIixyPW5ldyBoKGkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG89ZnVuY3Rpb24odCl7cmV0dXJuInJlc3BvbnNlVVJMImluIHQmJnQucmVzcG9uc2VVUkw/dC5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdCh0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT90LmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0oaSl8fHQudXJsO3JldHVybiBzPW5ldyBDKHtoZWFkZXJzOnIsc3RhdHVzOmUsc3RhdHVzVGV4dDpuLHVybDpvfSl9LHU9ZnVuY3Rpb24oKXt2YXIgZT1sKCkscj1lLmhlYWRlcnMsbz1lLnN0YXR1cyxhPWUuc3RhdHVzVGV4dCxzPWUudXJsLHU9bnVsbDsyMDQhPT1vJiYodT12b2lkIDA9PT1pLnJlc3BvbnNlP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2UpLDA9PT1vJiYobz11PzIwMDowKTt2YXIgYz1vPj0yMDAmJm88MzAwO2lmKCJqc29uIj09PXQucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIHUpe3ZhciBmPXU7dT11LnJlcGxhY2UoUiwiIik7dHJ5e3U9IiIhPT11P0pTT04ucGFyc2UodSk6bnVsbH1jYXRjaCh0KXt1PWYsYyYmKGM9ITEsdT17ZXJyb3I6dCx0ZXh0OnV9KX19Yz8obi5uZXh0KG5ldyBTKHtib2R5OnUsaGVhZGVyczpyLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpLG4uY29tcGxldGUoKSk6bi5lcnJvcihuZXcgTyh7ZXJyb3I6dSxoZWFkZXJzOnIsc3RhdHVzOm8sc3RhdHVzVGV4dDphLHVybDpzfHx2b2lkIDB9KSl9LGM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IE8oe2Vycm9yOnQsc3RhdHVzOmkuc3RhdHVzfHwwLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciJ9KTtuLmVycm9yKGUpfSxmPSExLGQ9ZnVuY3Rpb24oZSl7Znx8KG4ubmV4dChsKCkpLGY9ITApO3ZhciByPXt0eXBlOncuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6ZS5sb2FkZWR9O2UubGVuZ3RoQ29tcHV0YWJsZSYmKHIudG90YWw9ZS50b3RhbCksInRleHQiPT09dC5yZXNwb25zZVR5cGUmJmkucmVzcG9uc2VUZXh0JiYoci5wYXJ0aWFsVGV4dD1pLnJlc3BvbnNlVGV4dCksbi5uZXh0KHIpfSxwPWZ1bmN0aW9uKHQpe3ZhciBlPXt0eXBlOncuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOnQubG9hZGVkfTt0Lmxlbmd0aENvbXB1dGFibGUmJihlLnRvdGFsPXQudG90YWwpLG4ubmV4dChlKX07cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdSksaS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYyksdC5yZXBvcnRQcm9ncmVzcyYmKGkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpLG51bGwhPT1hJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxpLnNlbmQoYSksbi5uZXh0KHt0eXBlOncuU2VudH0pLGZ1bmN0aW9uKCl7aS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYyksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIix1KSx0LnJlcG9ydFByb2dyZXNzJiYoaS5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZCksbnVsbCE9PWEmJmkudXBsb2FkJiZpLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLGkuYWJvcnQoKX19KX0sdH0oKSxNPW5ldyByLnEoIlhTUkZfQ09PS0lFX05BTUUiKSxOPW5ldyByLnEoIlhTUkZfSEVBREVSX05BTUUiKSxMPWZ1bmN0aW9uKCl7fSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIHQhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1PYmplY3QoYy5BKSh0LHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPXQpLHRoaXMubGFzdFRva2VufSx0fSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy50b2tlblNlcnZpY2U9dCx0aGlzLmhlYWRlck5hbWU9ZX1yZXR1cm4gdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC51cmwudG9Mb3dlckNhc2UoKTtpZigiR0VUIj09PXQubWV0aG9kfHwiSEVBRCI9PT10Lm1ldGhvZHx8bi5zdGFydHNXaXRoKCJodHRwOi8vIil8fG4uc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gZS5oYW5kbGUodCk7dmFyIGk9dGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW4oKTtyZXR1cm4gbnVsbD09PWl8fHQuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKXx8KHQ9dC5jbG9uZSh7aGVhZGVyczp0LmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxpKX0pKSxlLmhhbmRsZSh0KX0sdH0oKSx6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuYmFja2VuZD10LHRoaXMuaW5qZWN0b3I9ZSx0aGlzLmNoYWluPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXtpZihudWxsPT09dGhpcy5jaGFpbil7dmFyIGU9dGhpcy5pbmplY3Rvci5nZXQoSSxbXSk7dGhpcy5jaGFpbj1lLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBqKHQsZSl9LHRoaXMuYmFja2VuZCl9cmV0dXJuIHRoaXMuY2hhaW4uaGFuZGxlKHQpfSx0fSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmRpc2FibGU9ZnVuY3Rpb24oKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W3twcm92aWRlOlYsdXNlQ2xhc3M6VH1dfX0sdC53aXRoT3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHtuZ01vZHVsZTp0LHByb3ZpZGVyczpbZS5jb29raWVOYW1lP3twcm92aWRlOk0sdXNlVmFsdWU6ZS5jb29raWVOYW1lfTpbXSxlLmhlYWRlck5hbWU/e3Byb3ZpZGU6Tix1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19LHR9KCksVT1mdW5jdGlvbigpe319LHQ5Zlo6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkZGT28iKSxvPW4oImI3bVciKSxhPW4oIkc1SjEiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/T2JqZWN0KGEuYikoKTplLmxpZnQobmV3IGwodCkpfX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgby5hfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB1KHQsdGhpcy50b3RhbCkpfSx0fSgpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnRvdGFsPW4saS5jb3VudD0wLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudG90YWwsbj0rK3RoaXMuY291bnQ7bjw9ZSYmKHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSxuPT09ZSYmKHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCkpKX0sZX0oci5hKX0sdFJUVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJDY25HIikscj0obigiL2RPNiIpLG4oIldmNHAiKSxuKCJZU2gyIiksbigic2VQMyIpLG4oIkZ6cWMiKSxuKCJnSWNZIiksaS5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtY2hpcHtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXN0YW5kYXJkLWNoaXB7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2Rpc3BsYXk6aW5saW5lLWZsZXg7cGFkZGluZzo3cHggMTJweDtib3JkZXItcmFkaXVzOjI0cHg7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpkZWZhdWx0fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9Lm1hdC1zdGFuZGFyZC1jaGlwOmZvY3Vze2JveC1zaGFkb3c6MCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAzcHggNHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDhweCAwIHJnYmEoMCwwLDAsLjEyKTtvdXRsaW5lOjB9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1zdGFuZGFyZC1jaGlwe291dGxpbmU6c29saWQgMXB4fS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOmRvdHRlZCAycHh9fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhciwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctcmlnaHQ6N3B4O3BhZGRpbmctbGVmdDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uLm1hdC1jaGlwLXdpdGgtYXZhdGFye3BhZGRpbmctbGVmdDo3cHg7cGFkZGluZy1yaWdodDowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy10b3A6N3B4O3BhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLXJpZ2h0OjdweDtwYWRkaW5nLWxlZnQ6MTJweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLWxlZnQ6N3B4O3BhZGRpbmctcmlnaHQ6MTJweH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxMnB4fS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtYXZhdGFye3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLWF2YXRhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1sZWZ0OjdweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsW2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnttYXJnaW4tcmlnaHQ6N3B4O21hcmdpbi1sZWZ0OjB9Lm1hdC1jaGlwLWxpc3Qtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW46LTRweH0ubWF0LWNoaXAtbGlzdC13cmFwcGVyIC5tYXQtc3RhbmRhcmQtY2hpcCwubWF0LWNoaXAtbGlzdC13cmFwcGVyIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbjo0cHh9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tYXQtY2hpcC1saXN0LXN0YWNrZWQgLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7d2lkdGg6MTAwJX0ubWF0LWNoaXAtYXZhdGFye2JvcmRlci1yYWRpdXM6NTAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW59aW5wdXQubWF0LWNoaXAtaW5wdXR7d2lkdGg6MTUwcHg7bWFyZ2luOjNweDtmbGV4OjEgMCAxNTBweH0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkubGIoMixbKHQoKSgpLGkuUmEoMCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWNoaXAtbGlzdC13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuYWIobnVsbCwwKV0sbnVsbCxudWxsKX19LHU2N0Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIkVuOCsiKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49dFtpLmFdKCk7Oyl7dmFyIHI9bi5uZXh0KCk7aWYoci5kb25lKXtlLmNvbXBsZXRlKCk7YnJlYWt9aWYoZS5uZXh0KHIudmFsdWUpLGUuY2xvc2VkKWJyZWFrfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJldHVybiYmZS5hZGQoZnVuY3Rpb24oKXtuLnJldHVybiYmbi5yZXR1cm4oKX0pLGV9fX0sdU1hTzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zdWJqZWN0PWUsaS5zdWJzY3JpYmVyPW4saS5jbG9zZWQ9ITEsaX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO3ZhciB0PXRoaXMuc3ViamVjdCxlPXQub2JzZXJ2ZXJzO2lmKHRoaXMuc3ViamVjdD1udWxsLGUmJjAhPT1lLmxlbmd0aCYmIXQuaXNTdG9wcGVkJiYhdC5jbG9zZWQpe3ZhciBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19fSxlfShuKCJwdWdUIikuYSl9LHZHWFk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJDY25HIikscj1uKCJkV1pnIiksbz1uKCJkemdUIiksYT1uKCJLOUlhIikscz1uKCI2YmxGIiksbD1uKCJpc2J5IiksdT1uKCIyQmRqIiksYz1uKCI2N1kvIiksZj1uKCJueTI0IiksZD1uKCJwMFNqIiksaD1uKCJuNmdHIik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gX30pO3ZhciBwLG09bmV3IFNldCxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOnl9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZighbS5oYXModCkpdHJ5e3B8fCgocD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocCkpLHAuc2hlZXQmJihwLnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSxtLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlUpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlkpKHIuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB5KHQpe3JldHVybnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5tZWRpYU1hdGNoZXI9dCx0aGlzLnpvbmU9ZSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IGEuYX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaXNNYXRjaGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGcoT2JqZWN0KGguYikodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZyhPYmplY3QoaC5iKSh0KSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9yZWdpc3RlclF1ZXJ5KHQpLm9ic2VydmFibGV9KTtyZXR1cm4gT2JqZWN0KG8uYSkobikucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbih0KXt2YXIgZT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlLm1hdGNoZXM9ZS5tYXRjaGVzfHx0Lm1hdGNoZXMsZS5icmVha3BvaW50c1t0LnF1ZXJ5XT10Lm1hdGNoZXN9KSxlfSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX3F1ZXJpZXMuaGFzKHQpKXJldHVybiB0aGlzLl9xdWVyaWVzLmdldCh0KTt2YXIgbj10aGlzLm1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKHQpLGk9e29ic2VydmFibGU6ZnVuY3Rpb24gdChlLG4saSl7cmV0dXJuIGk/dChlLG4pLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChsLmEpKHQpP2kuYXBwbHkodm9pZCAwLHQpOmkodCl9KSk6bmV3IHMuYShmdW5jdGlvbih0KXt2YXIgaSxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0Lm5leHQoMT09PWUubGVuZ3RoP2VbMF06ZSl9O3RyeXtpPWUocil9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX1pZihPYmplY3QodS5hKShuKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbihyLGkpfX0pfShmdW5jdGlvbih0KXtuLmFkZExpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSxmdW5jdGlvbih0KXtuLnJlbW92ZUxpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSkucGlwZShPYmplY3QoZi5hKSh0aGlzLl9kZXN0cm95U3ViamVjdCksT2JqZWN0KGQuYSkobiksT2JqZWN0KGMuYSkoZnVuY3Rpb24oZSl7cmV0dXJue3F1ZXJ5OnQsbWF0Y2hlczplLm1hdGNoZXN9fSkpLG1xbDpufTtyZXR1cm4gdGhpcy5fcXVlcmllcy5zZXQodCxpKSxpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5ZKShiKSxPYmplY3QoaS5ZKShpLnopKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIiwiKX0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50cmltKCl9KX12YXIgXz17WFNtYWxsOiIobWF4LXdpZHRoOiA1OTlweCkiLFNtYWxsOiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSIsTWVkaXVtOiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLExhcmdlOiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAobWF4LXdpZHRoOiAxOTE5cHgpIixYTGFyZ2U6IihtaW4td2lkdGg6IDE5MjBweCkiLEhhbmRzZXQ6IihtYXgtd2lkdGg6IDU5OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtYXgtd2lkdGg6IDk1OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixUYWJsZXQ6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogODM5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYjoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixIYW5kc2V0UG9ydHJhaXQ6IihtYXgtd2lkdGg6IDU5OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLFRhYmxldFBvcnRyYWl0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLFdlYlBvcnRyYWl0OiIobWluLXdpZHRoOiA4NDBweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixIYW5kc2V0TGFuZHNjYXBlOiIobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0TGFuZHNjYXBlOiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsV2ViTGFuZHNjYXBlOiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkifX0sd0Z3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigibXJTRyIpLHI9bigiaWhZWSIpLG89bigiQ2NuRyIpLGE9KG4oIlpZanQiKSxuKCJOU1lMIikpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fbmV4dEFuaW1hdGlvbklkPTAsaS5fcmVuZGVyZXI9ZS5jcmVhdGVSZW5kZXJlcihuLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOm8uUi5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSksaX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uZXh0QW5pbWF0aW9uSWQudG9TdHJpbmcoKTt0aGlzLl9uZXh0QW5pbWF0aW9uSWQrKzt2YXIgbj1BcnJheS5pc0FycmF5KHQpP09iamVjdChyLmkpKHQpOnQ7cmV0dXJuIGModGhpcy5fcmVuZGVyZXIsbnVsbCxlLCJyZWdpc3RlciIsW25dKSxuZXcgbChlLHRoaXMuX3JlbmRlcmVyKX0sZX0oci5iKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2lkPWUsaS5fcmVuZGVyZXI9bixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgdSh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX0sZX0oci5jKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLG4pfXJldHVybiB0LnByb3RvdHlwZS5fbGlzdGVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsIkBAIit0aGlzLmlkKyI6Iit0LGUpfSx0LnByb3RvdHlwZS5fY29tbWFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gYyh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJkb25lIix0KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInBhdXNlIil9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInJlc2V0Iil9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIix0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdH0oKTtmdW5jdGlvbiBjKHQsZSxuLGkscil7cmV0dXJuIHQuc2V0UHJvcGVydHkoZSwiQEAiK24rIjoiK2kscil9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRlbGVnYXRlPXQsdGhpcy5lbmdpbmU9ZSx0aGlzLl96b25lPW4sdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLHRoaXMucHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoMCksZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe2UmJmUucGFyZW50Tm9kZSh0KSYmZS5yZW1vdmVDaGlsZCh0LnBhcmVudE5vZGUsdCl9fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSk7aWYoISh0JiZlJiZlLmRhdGEmJmUuZGF0YS5hbmltYXRpb24pKXt2YXIgcj10aGlzLl9yZW5kZXJlckNhY2hlLmdldChpKTtyZXR1cm4gcnx8KHI9bmV3IGQoIiIsaSx0aGlzLmVuZ2luZSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQoaSxyKSkscn12YXIgbz1lLmlkLGE9ZS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3JldHVybiB0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihhLHQpLGUuZGF0YS5hbmltYXRpb24uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbi5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKG8sYSx0LGUubmFtZSxlKX0pLG5ldyBoKHRoaXMsYSxpLHRoaXMuZW5naW5lKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLl9zY2hlZHVsZUNvdW50VGFzaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt0Ll9taWNyb3Rhc2tJZCsrfSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt0Pj0wJiZ0PHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oZnVuY3Rpb24oKXtyLl96b25lLnJ1bihmdW5jdGlvbigpe3IuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChpLmMpKHQsMik7KDAsZVswXSkoZVsxXSl9KSxyLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtlLG5dKSl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fc2NoZWR1bGVDb3VudFRhc2soKSx0LmVuZ2luZS5mbHVzaCh0Ll9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1uLHRoaXMuZGVzdHJveU5vZGU9dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT9mdW5jdGlvbih0KXtyZXR1cm4gZS5kZXN0cm95Tm9kZSh0KX06bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixpKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsbil9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApJiYiQC5kaXNhYmxlZCI9PWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LCEhbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnModCxlKX0sdH0oKSxoPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsbixpLHIpfHx0aGlzO3JldHVybiBvLmZhY3Rvcnk9ZSxvLm5hbWVzcGFjZUlkPW4sb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7IkAiPT1lLmNoYXJBdCgwKT8iLiI9PWUuY2hhckF0KDEpJiYiQC5kaXNhYmxlZCI9PWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LG49dm9pZCAwPT09bnx8ISFuKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsdCxlLnN1YnN0cigxKSxuKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sZS5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGEscz10aGlzO2lmKCJAIj09ZS5jaGFyQXQoMCkpe3ZhciBsPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiB0fX0odCksdT1lLnN1YnN0cigxKSxjPSIiO3JldHVybiJAIiE9dS5jaGFyQXQoMCkmJih1PShyPU9iamVjdChpLmMpKChvPXUsYT1vLmluZGV4T2YoIi4iKSxbby5zdWJzdHJpbmcoMCxhKSxvLnN1YnN0cihhKzEpXSksMikpWzBdLGM9clsxXSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsbCx1LGMsZnVuY3Rpb24odCl7cy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayh0Ll9kYXRhfHwtMSxuLHQpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sZX0oZCkscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXtyZXR1cm4gdC5jYWxsKHRoaXMsZS5ib2R5LG4saSl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oYS5iKTtmdW5jdGlvbiBtKCl7cmV0dXJuIE9iamVjdChhLmgpKCk/bmV3IGEuZjpuZXcgYS5kfWZ1bmN0aW9uIGIoKXtyZXR1cm4gbmV3IGEuZ31mdW5jdGlvbiB5KHQsZSxuKXtyZXR1cm4gbmV3IGYodCxlLG4pfXZhciB2PW5ldyBvLnEoIkFuaW1hdGlvbk1vZHVsZVR5cGUiKSxnPWZ1bmN0aW9uKCl7fX0seE15RTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigibXJTRyIpLHI9bigiRkZPbyIpLG89bigiK3VtSyIpLGE9bigiMkJkaiIpO2Z1bmN0aW9uIHModCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5saWZ0KG5ldyBsKHQsZSxuKSl9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uZXh0T3JPYnNlcnZlcj10LHRoaXMuZXJyb3I9ZSx0aGlzLmNvbXBsZXRlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLm5leHRPck9ic2VydmVyLHRoaXMuZXJyb3IsdGhpcy5jb21wbGV0ZSkpfSx0fSgpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgcz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gcy5fdGFwTmV4dD1vLmEscy5fdGFwRXJyb3I9by5hLHMuX3RhcENvbXBsZXRlPW8uYSxzLl90YXBFcnJvcj1pfHxvLmEscy5fdGFwQ29tcGxldGU9cnx8by5hLE9iamVjdChhLmEpKG4pPyhzLl9jb250ZXh0PXMscy5fdGFwTmV4dD1uKTpuJiYocy5fY29udGV4dD1uLHMuX3RhcE5leHQ9bi5uZXh0fHxvLmEscy5fdGFwRXJyb3I9bi5lcnJvcnx8by5hLHMuX3RhcENvbXBsZXRlPW4uY29tcGxldGV8fG8uYSksc31yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dHJ5e3RoaXMuX3RhcE5leHQuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dHJ5e3RoaXMuX3RhcEVycm9yLmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RyeXt0aGlzLl90YXBDb21wbGV0ZS5jYWxsKHRoaXMuX2NvbnRleHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oci5hKX0seFRsYTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUifSx5M0J5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oIit1bUsiKTtmdW5jdGlvbiByKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBvKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ/MT09PXQubGVuZ3RoP3RbMF06ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUodCl9LGUpfTppLmF9fSx5NHFTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBqfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KTt2YXIgaT1uKCJtclNHIikscj1uKCJuNmdHIiksbz1uKCJDY25HIiksYT1uKCJZbGJRIikscz1uKCJLOUlhIiksbD1uKCIyNkZVIiksdT1uKCI2YmxGIiksYz1uKCJGL1hMIiksZj1uKCJueTI0Iik7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX3N0aWNreT0hMSxpLl9oYXNTdGlja3lDaGFuZ2VkPSExLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzdGlja3kiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RpY2t5fSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1PYmplY3Qoci5jKSh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuaGFzU3RpY2t5Q2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH0sZS5wcm90b3R5cGUucmVzZXRTdGlja3lDaGFuZ2VkPWZ1bmN0aW9uKCl7dGhpcy5faGFzU3RpY2t5Q2hhbmdlZD0hMX0sZX0odCl9dmFyIGg9ZnVuY3Rpb24odCl7dGhpcy50ZW1wbGF0ZT10fSxwPWZ1bmN0aW9uKHQpe3RoaXMudGVtcGxhdGU9dH0sbT1mdW5jdGlvbih0KXt0aGlzLnRlbXBsYXRlPXR9LGI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fc3RpY2t5RW5kPSExLGV9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LHNldDpmdW5jdGlvbih0KXt0JiYodGhpcy5fbmFtZT10LHRoaXMuY3NzQ2xhc3NGcmllbmRseU5hbWU9dC5yZXBsYWNlKC9bXmEtejAtOV8tXS9naSwiLSIpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInN0aWNreUVuZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGlja3lFbmR9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGlja3lFbmQ7dGhpcy5fc3RpY2t5RW5kPU9iamVjdChyLmMpKHQpLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ZSE9PXRoaXMuX3N0aWNreUVuZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShkKGZ1bmN0aW9uKCl7fSkpLHk9ZnVuY3Rpb24odCxlKXtlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWNvbHVtbi0iK3QuY3NzQ2xhc3NGcmllbmRseU5hbWUpfSx2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh5KSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh5KSxfPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh5KSx3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudGVtcGxhdGU9dCx0aGlzLl9kaWZmZXJzPWV9cmV0dXJuIHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9jb2x1bW5zRGlmZmVyKXt2YXIgZT10LmNvbHVtbnMmJnQuY29sdW1ucy5jdXJyZW50VmFsdWV8fFtdO3RoaXMuX2NvbHVtbnNEaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpLHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZihlKX19LHQucHJvdG90eXBlLmdldENvbHVtbnNEaWZmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZih0aGlzLmNvbHVtbnMpfSx0LnByb3RvdHlwZS5leHRyYWN0Q2VsbFRlbXBsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgeD90LmhlYWRlckNlbGwudGVtcGxhdGU6dGhpcyBpbnN0YW5jZW9mIEM/dC5mb290ZXJDZWxsLnRlbXBsYXRlOnQuY2VsbC50ZW1wbGF0ZX0sdH0oKSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcy5jYWxsKHRoaXMsZSl9LGV9KGQoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0odykpKSxDPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcy5jYWxsKHRoaXMsZSl9LGV9KGQoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0odykpKSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh3KSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt0aGlzLl92aWV3Q29udGFpbmVyPWUsdC5tb3N0UmVjZW50Q2VsbE91dGxldD10aGlzfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QubW9zdFJlY2VudENlbGxPdXRsZXQ9PT10aGlzJiYodC5tb3N0UmVjZW50Q2VsbE91dGxldD1udWxsKX0sdC5tb3N0UmVjZW50Q2VsbE91dGxldD1udWxsLHR9KCksRT1mdW5jdGlvbigpe30saz1mdW5jdGlvbigpe30saj1mdW5jdGlvbigpe30sST1bInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmlzTmF0aXZlSHRtbFRhYmxlPXQsdGhpcy5zdGlja0NlbGxDc3M9ZSx0aGlzLmRpcmVjdGlvbj1ufXJldHVybiB0LnByb3RvdHlwZS5jbGVhclN0aWNreVBvc2l0aW9uaW5nPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bisrKXt2YXIgcj1pW25dO2lmKHIubm9kZVR5cGU9PT1yLkVMRU1FTlRfTk9ERSl7dGhpcy5fcmVtb3ZlU3RpY2t5U3R5bGUocixlKTtmb3IodmFyIG89MDtvPHIuY2hpbGRyZW4ubGVuZ3RoO28rKyl0aGlzLl9yZW1vdmVTdGlja3lTdHlsZShyLmNoaWxkcmVuW29dLGUpfX19LHQucHJvdG90eXBlLnVwZGF0ZVN0aWNreUNvbHVtbnM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWUuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxuLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHR9KTtpZih0Lmxlbmd0aCYmaSlmb3IodmFyIHI9dFswXSxvPXIuY2hpbGRyZW4ubGVuZ3RoLGE9dGhpcy5fZ2V0Q2VsbFdpZHRocyhyKSxzPXRoaXMuX2dldFN0aWNreVN0YXJ0Q29sdW1uUG9zaXRpb25zKGEsZSksbD10aGlzLl9nZXRTdGlja3lFbmRDb2x1bW5Qb3NpdGlvbnMoYSxuKSx1PSJydGwiPT09dGhpcy5kaXJlY3Rpb24sYz0wLGY9dDtjPGYubGVuZ3RoO2MrKylmb3IodmFyIGQ9ZltjXSxoPTA7aDxvO2grKyl7dmFyIHA9ZC5jaGlsZHJlbltoXTtlW2hdJiZ0aGlzLl9hZGRTdGlja3lTdHlsZShwLHU/InJpZ2h0IjoibGVmdCIsc1toXSksbltoXSYmdGhpcy5fYWRkU3RpY2t5U3R5bGUocCx1PyJsZWZ0IjoicmlnaHQiLGxbaF0pfX0sdC5wcm90b3R5cGUuc3RpY2tSb3dzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9ImJvdHRvbSI9PT1uP3QucmV2ZXJzZSgpOnQscj0wLG89MDtvPGkubGVuZ3RoO28rKylpZihlW29dKXt2YXIgYT1pW29dO2lmKHRoaXMuaXNOYXRpdmVIdG1sVGFibGUpZm9yKHZhciBzPTA7czxhLmNoaWxkcmVuLmxlbmd0aDtzKyspdGhpcy5fYWRkU3RpY2t5U3R5bGUoYS5jaGlsZHJlbltzXSxuLHIpO2Vsc2UgdGhpcy5fYWRkU3RpY2t5U3R5bGUoYSxuLHIpO3IrPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fX0sdC5wcm90b3R5cGUudXBkYXRlU3RpY2t5Rm9vdGVyQ29udGFpbmVyPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5pc05hdGl2ZUh0bWxUYWJsZSl7dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0Zm9vdCIpO2Uuc29tZShmdW5jdGlvbih0KXtyZXR1cm4hdH0pP3RoaXMuX3JlbW92ZVN0aWNreVN0eWxlKG4sWyJib3R0b20iXSk6dGhpcy5fYWRkU3RpY2t5U3R5bGUobiwiYm90dG9tIiwwKX19LHQucHJvdG90eXBlLl9yZW1vdmVTdGlja3lTdHlsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rKyl0LnN0eWxlW2lbbl1dPSIiO3Quc3R5bGUuekluZGV4PXRoaXMuX2dldENhbGN1bGF0ZWRaSW5kZXgodCksSS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiEhdC5zdHlsZVtlXX0pfHwodC5zdHlsZS5wb3NpdGlvbj0iIix0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5zdGlja0NlbGxDc3MpKX0sdC5wcm90b3R5cGUuX2FkZFN0aWNreVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0LmNsYXNzTGlzdC5hZGQodGhpcy5zdGlja0NlbGxDc3MpLHQuc3R5bGVbZV09bisicHgiLHQuc3R5bGUuY3NzVGV4dCs9InBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsgcG9zaXRpb246IHN0aWNreTsgIix0LnN0eWxlLnpJbmRleD10aGlzLl9nZXRDYWxjdWxhdGVkWkluZGV4KHQpfSx0LnByb3RvdHlwZS5fZ2V0Q2FsY3VsYXRlZFpJbmRleD1mdW5jdGlvbih0KXtmb3IodmFyIGU9e3RvcDoxMDAsYm90dG9tOjEwLGxlZnQ6MSxyaWdodDoxfSxuPTAsaT0wLHI9STtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTt0LnN0eWxlW29dJiYobis9ZVtvXSl9cmV0dXJuIG4/IiIrbjoiIn0sdC5wcm90b3R5cGUuX2dldENlbGxXaWR0aHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49dC5jaGlsZHJlbixpPTA7aTxuLmxlbmd0aDtpKyspZS5wdXNoKG5baV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO3JldHVybiBlfSx0LnByb3RvdHlwZS5fZ2V0U3RpY2t5U3RhcnRDb2x1bW5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10saT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdJiYobltyXT1pLGkrPXRbcl0pO3JldHVybiBufSx0LnByb3RvdHlwZS5fZ2V0U3RpY2t5RW5kQ29sdW1uUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLGk9MCxyPXQubGVuZ3RoO3I+MDtyLS0pZVtyXSYmKG5bcl09aSxpKz10W3JdKTtyZXR1cm4gbn0sdH0oKSxSPWZ1bmN0aW9uKHQsZSl7dGhpcy52aWV3Q29udGFpbmVyPXQsdGhpcy5lbGVtZW50UmVmPWV9LEE9ZnVuY3Rpb24odCxlKXt0aGlzLnZpZXdDb250YWluZXI9dCx0aGlzLmVsZW1lbnRSZWY9ZX0sUD1mdW5jdGlvbih0LGUpe3RoaXMudmlld0NvbnRhaW5lcj10LHRoaXMuZWxlbWVudFJlZj1lfSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIpe3RoaXMuX2RpZmZlcnM9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2VsZW1lbnRSZWY9bix0aGlzLl9kaXI9cix0aGlzLl9vbkRlc3Ryb3k9bmV3IHMuYSx0aGlzLl9jb2x1bW5EZWZzQnlOYW1lPW5ldyBNYXAsdGhpcy5fY3VzdG9tQ29sdW1uRGVmcz1uZXcgU2V0LHRoaXMuX2N1c3RvbVJvd0RlZnM9bmV3IFNldCx0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzPW5ldyBTZXQsdGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcz1uZXcgU2V0LHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQ9ITAsdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMCx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXAsdGhpcy5zdGlja3lDc3NDbGFzcz0iY2RrLXRhYmxlLXN0aWNreSIsdGhpcy5fbXVsdGlUZW1wbGF0ZURhdGFSb3dzPSExLHRoaXMudmlld0NoYW5nZT1uZXcgbC5hKHtzdGFydDowLGVuZDpOdW1iZXIuTUFYX1ZBTFVFfSksaXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsImdyaWQiKSx0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZT0iVEFCTEUiPT09dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRyYWNrQnkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KG8uWikoKSYmbnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkrIi4iKSx0aGlzLl90cmFja0J5Rm49dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRhdGFTb3VyY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YVNvdXJjZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2RhdGFTb3VyY2UhPT10JiZ0aGlzLl9zd2l0Y2hEYXRhU291cmNlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGlUZW1wbGF0ZURhdGFSb3dzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpVGVtcGxhdGVEYXRhUm93c30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX211bHRpVGVtcGxhdGVEYXRhUm93cz1PYmplY3Qoci5jKSh0KSx0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGgmJnRoaXMuX2ZvcmNlUmVuZGVyRGF0YVJvd3MoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2V0dXBTdGlja3lTdHlsZXIoKSx0aGlzLl9pc05hdGl2ZUh0bWxUYWJsZSYmdGhpcy5fYXBwbHlOYXRpdmVUYWJsZVNlY3Rpb25zKCksdGhpcy5fZGF0YURpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShmdW5jdGlvbihlLG4pe3JldHVybiB0LnRyYWNrQnk/dC50cmFja0J5KG4uZGF0YUluZGV4LG4uZGF0YSk6bn0pfSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudENoZWNrZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZVJvd0RlZnMoKSx0aGlzLl9jYWNoZUNvbHVtbkRlZnMoKSwhdGhpcy5faGVhZGVyUm93RGVmcy5sZW5ndGgmJiF0aGlzLl9mb290ZXJSb3dEZWZzLmxlbmd0aCYmIXRoaXMuX3Jvd0RlZnMubGVuZ3RoKXRocm93IEVycm9yKCJNaXNzaW5nIGRlZmluaXRpb25zIGZvciBoZWFkZXIsIGZvb3RlciwgYW5kIHJvdzsgY2Fubm90IGRldGVybWluZSB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSByZW5kZXJlZC4iKTt0aGlzLl9yZW5kZXJVcGRhdGVkQ29sdW1ucygpLHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQmJih0aGlzLl9mb3JjZVJlbmRlckhlYWRlclJvd3MoKSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSExKSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkJiYodGhpcy5fZm9yY2VSZW5kZXJGb290ZXJSb3dzKCksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMSksdGhpcy5kYXRhU291cmNlJiZ0aGlzLl9yb3dEZWZzLmxlbmd0aD4wJiYhdGhpcy5fcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9vYnNlcnZlUmVuZGVyQ2hhbmdlcygpLHRoaXMuX2NoZWNrU3RpY2t5U3RhdGVzKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9oZWFkZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Zvb3RlclJvd091dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcC5jbGVhcigpLHRoaXMuX29uRGVzdHJveS5uZXh0KCksdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCksdGhpcy5kYXRhU291cmNlIGluc3RhbmNlb2YgYS5hJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKX0sdC5wcm90b3R5cGUucmVuZGVyUm93cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVuZGVyUm93cz10aGlzLl9nZXRBbGxSZW5kZXJSb3dzKCk7dmFyIGU9dGhpcy5fZGF0YURpZmZlci5kaWZmKHRoaXMuX3JlbmRlclJvd3MpO2lmKGUpe3ZhciBuPXRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbihmdW5jdGlvbihlLGkscil7aWYobnVsbD09ZS5wcmV2aW91c0luZGV4KXQuX2luc2VydFJvdyhlLml0ZW0scik7ZWxzZSBpZihudWxsPT1yKW4ucmVtb3ZlKGkpO2Vsc2V7dmFyIG89bi5nZXQoaSk7bi5tb3ZlKG8scil9fSksdGhpcy5fdXBkYXRlUm93SW5kZXhDb250ZXh0KCksZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7bi5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbS5kYXRhfSksdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKX19LHQucHJvdG90eXBlLnNldEhlYWRlclJvd0RlZj1mdW5jdGlvbih0KXt0aGlzLl9jdXN0b21IZWFkZXJSb3dEZWZzPW5ldyBTZXQoW3RdKSx0aGlzLl9oZWFkZXJSb3dEZWZDaGFuZ2VkPSEwfSx0LnByb3RvdHlwZS5zZXRGb290ZXJSb3dEZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcz1uZXcgU2V0KFt0XSksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMH0sdC5wcm90b3R5cGUuYWRkQ29sdW1uRGVmPWZ1bmN0aW9uKHQpe3RoaXMuX2N1c3RvbUNvbHVtbkRlZnMuYWRkKHQpfSx0LnByb3RvdHlwZS5yZW1vdmVDb2x1bW5EZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tQ29sdW1uRGVmcy5kZWxldGUodCl9LHQucHJvdG90eXBlLmFkZFJvd0RlZj1mdW5jdGlvbih0KXt0aGlzLl9jdXN0b21Sb3dEZWZzLmFkZCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlUm93RGVmPWZ1bmN0aW9uKHQpe3RoaXMuX2N1c3RvbVJvd0RlZnMuZGVsZXRlKHQpfSx0LnByb3RvdHlwZS5hZGRIZWFkZXJSb3dEZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tSGVhZGVyUm93RGVmcy5hZGQodCksdGhpcy5faGVhZGVyUm93RGVmQ2hhbmdlZD0hMH0sdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyUm93RGVmPWZ1bmN0aW9uKHQpe3RoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnMuZGVsZXRlKHQpLHRoaXMuX2hlYWRlclJvd0RlZkNoYW5nZWQ9ITB9LHQucHJvdG90eXBlLmFkZEZvb3RlclJvd0RlZj1mdW5jdGlvbih0KXt0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzLmFkZCh0KSx0aGlzLl9mb290ZXJSb3dEZWZDaGFuZ2VkPSEwfSx0LnByb3RvdHlwZS5yZW1vdmVGb290ZXJSb3dEZWY9ZnVuY3Rpb24odCl7dGhpcy5fY3VzdG9tRm9vdGVyUm93RGVmcy5kZWxldGUodCksdGhpcy5fZm9vdGVyUm93RGVmQ2hhbmdlZD0hMH0sdC5wcm90b3R5cGUudXBkYXRlU3RpY2t5SGVhZGVyUm93U3R5bGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2hlYWRlclJvd091dGxldCk7dGhpcy5fc3RpY2t5U3R5bGVyLmNsZWFyU3RpY2t5UG9zaXRpb25pbmcodCxbInRvcCJdKTt2YXIgZT10aGlzLl9oZWFkZXJSb3dEZWZzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGlja3l9KTt0aGlzLl9zdGlja3lTdHlsZXIuc3RpY2tSb3dzKHQsZSwidG9wIiksdGhpcy5faGVhZGVyUm93RGVmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0U3RpY2t5Q2hhbmdlZCgpfSl9LHQucHJvdG90eXBlLnVwZGF0ZVN0aWNreUZvb3RlclJvd1N0eWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9mb290ZXJSb3dPdXRsZXQpO3RoaXMuX3N0aWNreVN0eWxlci5jbGVhclN0aWNreVBvc2l0aW9uaW5nKHQsWyJib3R0b20iXSk7dmFyIGU9dGhpcy5fZm9vdGVyUm93RGVmcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RpY2t5fSk7dGhpcy5fc3RpY2t5U3R5bGVyLnN0aWNrUm93cyh0LGUsImJvdHRvbSIpLHRoaXMuX3N0aWNreVN0eWxlci51cGRhdGVTdGlja3lGb290ZXJDb250YWluZXIodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGUpLHRoaXMuX2Zvb3RlclJvd0RlZnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNldFN0aWNreUNoYW5nZWQoKX0pfSx0LnByb3RvdHlwZS51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fZ2V0UmVuZGVyZWRSb3dzKHRoaXMuX2hlYWRlclJvd091dGxldCksbj10aGlzLl9nZXRSZW5kZXJlZFJvd3ModGhpcy5fcm93T3V0bGV0KSxpPXRoaXMuX2dldFJlbmRlcmVkUm93cyh0aGlzLl9mb290ZXJSb3dPdXRsZXQpO3RoaXMuX3N0aWNreVN0eWxlci5jbGVhclN0aWNreVBvc2l0aW9uaW5nKGUuY29uY2F0KG4saSksWyJsZWZ0IiwicmlnaHQiXSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dC5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzKFtlXSx0Ll9oZWFkZXJSb3dEZWZzW25dKX0pLHRoaXMuX3Jvd0RlZnMuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIGk9W10scj0wO3I8bi5sZW5ndGg7cisrKXQuX3JlbmRlclJvd3Nbcl0ucm93RGVmPT09ZSYmaS5wdXNoKG5bcl0pO3QuX2FkZFN0aWNreUNvbHVtblN0eWxlcyhpLGUpfSksaS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dC5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzKFtlXSx0Ll9mb290ZXJSb3dEZWZzW25dKX0pLEFycmF5LmZyb20odGhpcy5fY29sdW1uRGVmc0J5TmFtZS52YWx1ZXMoKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNldFN0aWNreUNoYW5nZWQoKX0pfSx0LnByb3RvdHlwZS5fZ2V0QWxsUmVuZGVyUm93cz1mdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5fY2FjaGVkUmVuZGVyUm93c01hcDt0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwPW5ldyBNYXA7Zm9yKHZhciBuPTA7bjx0aGlzLl9kYXRhLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuX2RhdGFbbl0scj10aGlzLl9nZXRSZW5kZXJSb3dzRm9yRGF0YShpLG4sZS5nZXQoaSkpO3RoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuaGFzKGkpfHx0aGlzLl9jYWNoZWRSZW5kZXJSb3dzTWFwLnNldChpLG5ldyBXZWFrTWFwKTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGE9cltvXSxzPXRoaXMuX2NhY2hlZFJlbmRlclJvd3NNYXAuZ2V0KGEuZGF0YSk7cy5oYXMoYS5yb3dEZWYpP3MuZ2V0KGEucm93RGVmKS5wdXNoKGEpOnMuc2V0KGEucm93RGVmLFthXSksdC5wdXNoKGEpfX1yZXR1cm4gdH0sdC5wcm90b3R5cGUuX2dldFJlbmRlclJvd3NGb3JEYXRhPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZ2V0Um93RGVmcyh0LGUpLm1hcChmdW5jdGlvbihpKXt2YXIgcj1uJiZuLmhhcyhpKT9uLmdldChpKTpbXTtpZihyLmxlbmd0aCl7dmFyIG89ci5zaGlmdCgpO3JldHVybiBvLmRhdGFJbmRleD1lLG99cmV0dXJue2RhdGE6dCxyb3dEZWY6aSxkYXRhSW5kZXg6ZX19KX0sdC5wcm90b3R5cGUuX2NhY2hlQ29sdW1uRGVmcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29sdW1uRGVmc0J5TmFtZS5jbGVhcigpLE0odGhpcy5fY29udGVudENvbHVtbkRlZnMsdGhpcy5fY3VzdG9tQ29sdW1uRGVmcykuZm9yRWFjaChmdW5jdGlvbihlKXtpZih0Ll9jb2x1bW5EZWZzQnlOYW1lLmhhcyhlLm5hbWUpKXRocm93IEVycm9yKCdEdXBsaWNhdGUgY29sdW1uIGRlZmluaXRpb24gbmFtZSBwcm92aWRlZDogIicrZS5uYW1lKyciLicpO3QuX2NvbHVtbkRlZnNCeU5hbWUuc2V0KGUubmFtZSxlKX0pfSx0LnByb3RvdHlwZS5fY2FjaGVSb3dEZWZzPWZ1bmN0aW9uKCl7dGhpcy5faGVhZGVyUm93RGVmcz1NKHRoaXMuX2NvbnRlbnRIZWFkZXJSb3dEZWZzLHRoaXMuX2N1c3RvbUhlYWRlclJvd0RlZnMpLHRoaXMuX2Zvb3RlclJvd0RlZnM9TSh0aGlzLl9jb250ZW50Rm9vdGVyUm93RGVmcyx0aGlzLl9jdXN0b21Gb290ZXJSb3dEZWZzKSx0aGlzLl9yb3dEZWZzPU0odGhpcy5fY29udGVudFJvd0RlZnMsdGhpcy5fY3VzdG9tUm93RGVmcyk7dmFyIHQ9dGhpcy5fcm93RGVmcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQud2hlbn0pO2lmKCF0aGlzLm11bHRpVGVtcGxhdGVEYXRhUm93cyYmdC5sZW5ndGg+MSl0aHJvdyBFcnJvcigiVGhlcmUgY2FuIG9ubHkgYmUgb25lIGRlZmF1bHQgcm93IHdpdGhvdXQgYSB3aGVuIHByZWRpY2F0ZSBmdW5jdGlvbi4iKTt0aGlzLl9kZWZhdWx0Um93RGVmPXRbMF19LHQucHJvdG90eXBlLl9yZW5kZXJVcGRhdGVkQ29sdW1ucz1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fCEhZS5nZXRDb2x1bW5zRGlmZigpfTt0aGlzLl9yb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy5fZm9yY2VSZW5kZXJEYXRhUm93cygpLHRoaXMuX2hlYWRlclJvd0RlZnMucmVkdWNlKHQsITEpJiZ0aGlzLl9mb3JjZVJlbmRlckhlYWRlclJvd3MoKSx0aGlzLl9mb290ZXJSb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy5fZm9yY2VSZW5kZXJGb290ZXJSb3dzKCl9LHQucHJvdG90eXBlLl9zd2l0Y2hEYXRhU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuX2RhdGE9W10sdGhpcy5kYXRhU291cmNlIGluc3RhbmNlb2YgYS5hJiZ0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24mJih0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCksdHx8KHRoaXMuX2RhdGFEaWZmZXImJnRoaXMuX2RhdGFEaWZmZXIuZGlmZihbXSksdGhpcy5fcm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSksdGhpcy5fZGF0YVNvdXJjZT10fSx0LnByb3RvdHlwZS5fb2JzZXJ2ZVJlbmRlckNoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuZGF0YVNvdXJjZSl7dmFyIGU7aWYodGhpcy5kYXRhU291cmNlLmNvbm5lY3QgaW5zdGFuY2VvZiBGdW5jdGlvbj9lPXRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpOnRoaXMuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIHUuYT9lPXRoaXMuZGF0YVNvdXJjZTpBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkmJihlPU9iamVjdChjLmEpKHRoaXMuZGF0YVNvdXJjZSkpLHZvaWQgMD09PWUpdGhyb3cgRXJyb3IoIlByb3ZpZGVkIGRhdGEgc291cmNlIGRpZCBub3QgbWF0Y2ggYW4gYXJyYXksIE9ic2VydmFibGUsIG9yIERhdGFTb3VyY2UiKTt0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb249ZS5waXBlKE9iamVjdChmLmEpKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXt0Ll9kYXRhPWV8fFtdLHQucmVuZGVyUm93cygpfSl9fSx0LnByb3RvdHlwZS5fZm9yY2VSZW5kZXJIZWFkZXJSb3dzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9oZWFkZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGg+MCYmdGhpcy5faGVhZGVyUm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9oZWFkZXJSb3dEZWZzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5fcmVuZGVyUm93KHQuX2hlYWRlclJvd091dGxldCxlLG4pfSksdGhpcy51cGRhdGVTdGlja3lIZWFkZXJSb3dTdHlsZXMoKSx0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpfSx0LnByb3RvdHlwZS5fZm9yY2VSZW5kZXJGb290ZXJSb3dzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9mb290ZXJSb3dPdXRsZXQudmlld0NvbnRhaW5lci5sZW5ndGg+MCYmdGhpcy5fZm9vdGVyUm93T3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9mb290ZXJSb3dEZWZzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5fcmVuZGVyUm93KHQuX2Zvb3RlclJvd091dGxldCxlLG4pfSksdGhpcy51cGRhdGVTdGlja3lGb290ZXJSb3dTdHlsZXMoKSx0aGlzLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpfSx0LnByb3RvdHlwZS5fYWRkU3RpY2t5Q29sdW1uU3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPUFycmF5LmZyb20oZS5jb2x1bW5zfHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9jb2x1bW5EZWZzQnlOYW1lLmdldCh0KX0pLHI9aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RpY2t5fSksbz1pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGlja3lFbmR9KTt0aGlzLl9zdGlja3lTdHlsZXIudXBkYXRlU3RpY2t5Q29sdW1ucyh0LHIsbyl9LHQucHJvdG90eXBlLl9nZXRSZW5kZXJlZFJvd3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MDtuPHQudmlld0NvbnRhaW5lci5sZW5ndGg7bisrKXt2YXIgaT10LnZpZXdDb250YWluZXIuZ2V0KG4pO2UucHVzaChpLnJvb3ROb2Rlc1swXSl9cmV0dXJuIGV9LHQucHJvdG90eXBlLl9nZXRSb3dEZWZzPWZ1bmN0aW9uKHQsZSl7aWYoMT09dGhpcy5fcm93RGVmcy5sZW5ndGgpcmV0dXJuW3RoaXMuX3Jvd0RlZnNbMF1dO3ZhciBuPVtdO2lmKHRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzKW49dGhpcy5fcm93RGVmcy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4ud2hlbnx8bi53aGVuKGUsdCl9KTtlbHNle3ZhciBpPXRoaXMuX3Jvd0RlZnMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gbi53aGVuJiZuLndoZW4oZSx0KX0pfHx0aGlzLl9kZWZhdWx0Um93RGVmO2kmJm4ucHVzaChpKX1pZighbi5sZW5ndGgpdGhyb3cgZnVuY3Rpb24odCl7cmV0dXJuIEVycm9yKCJDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIHJvdyBkZWZpbml0aW9uIGZvciB0aGVwcm92aWRlZCByb3cgZGF0YTogIitKU09OLnN0cmluZ2lmeSh0KSl9KHQpO3JldHVybiBufSx0LnByb3RvdHlwZS5faW5zZXJ0Um93PWZ1bmN0aW9uKHQsZSl7dGhpcy5fcmVuZGVyUm93KHRoaXMuX3Jvd091dGxldCx0LnJvd0RlZixlLHskaW1wbGljaXQ6dC5kYXRhfSl9LHQucHJvdG90eXBlLl9yZW5kZXJSb3c9ZnVuY3Rpb24odCxlLG4saSl7dm9pZCAwPT09aSYmKGk9e30pLHQudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZS50ZW1wbGF0ZSxpLG4pO2Zvcih2YXIgcj0wLG89dGhpcy5fZ2V0Q2VsbFRlbXBsYXRlcyhlKTtyPG8ubGVuZ3RoO3IrKylPLm1vc3RSZWNlbnRDZWxsT3V0bGV0JiZPLm1vc3RSZWNlbnRDZWxsT3V0bGV0Ll92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhvW3JdLGkpO3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSx0LnByb3RvdHlwZS5fdXBkYXRlUm93SW5kZXhDb250ZXh0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3Jvd091dGxldC52aWV3Q29udGFpbmVyLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe3ZhciBpPXQuZ2V0KGUpLmNvbnRleHQ7aS5jb3VudD1uLGkuZmlyc3Q9MD09PWUsaS5sYXN0PWU9PT1uLTEsaS5ldmVuPWUlMj09MCxpLm9kZD0haS5ldmVuLHRoaXMubXVsdGlUZW1wbGF0ZURhdGFSb3dzPyhpLmRhdGFJbmRleD10aGlzLl9yZW5kZXJSb3dzW2VdLmRhdGFJbmRleCxpLnJlbmRlckluZGV4PWUpOmkuaW5kZXg9dGhpcy5fcmVuZGVyUm93c1tlXS5kYXRhSW5kZXh9fSx0LnByb3RvdHlwZS5fZ2V0Q2VsbFRlbXBsYXRlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0JiZ0LmNvbHVtbnM/QXJyYXkuZnJvbSh0LmNvbHVtbnMsZnVuY3Rpb24obil7dmFyIGk9ZS5fY29sdW1uRGVmc0J5TmFtZS5nZXQobik7aWYoIWkpdGhyb3cgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGNvbHVtbiB3aXRoIGlkICInK24rJyIuJyk7cmV0dXJuIHQuZXh0cmFjdENlbGxUZW1wbGF0ZShpKX0pOltdfSx0LnByb3RvdHlwZS5fYXBwbHlOYXRpdmVUYWJsZVNlY3Rpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1be3RhZzoidGhlYWQiLG91dGxldDp0aGlzLl9oZWFkZXJSb3dPdXRsZXR9LHt0YWc6InRib2R5IixvdXRsZXQ6dGhpcy5fcm93T3V0bGV0fSx7dGFnOiJ0Zm9vdCIsb3V0bGV0OnRoaXMuX2Zvb3RlclJvd091dGxldH1dO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuLnRhZyk7aS5hcHBlbmRDaGlsZChuLm91dGxldC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChpKX19LHQucHJvdG90eXBlLl9mb3JjZVJlbmRlckRhdGFSb3dzPWZ1bmN0aW9uKCl7dGhpcy5fZGF0YURpZmZlci5kaWZmKFtdKSx0aGlzLl9yb3dPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMucmVuZGVyUm93cygpLHRoaXMudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCl9LHQucHJvdG90eXBlLl9jaGVja1N0aWNreVN0YXRlcz1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fGUuaGFzU3RpY2t5Q2hhbmdlZCgpfTt0aGlzLl9oZWFkZXJSb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy51cGRhdGVTdGlja3lIZWFkZXJSb3dTdHlsZXMoKSx0aGlzLl9mb290ZXJSb3dEZWZzLnJlZHVjZSh0LCExKSYmdGhpcy51cGRhdGVTdGlja3lGb290ZXJSb3dTdHlsZXMoKSxBcnJheS5mcm9tKHRoaXMuX2NvbHVtbkRlZnNCeU5hbWUudmFsdWVzKCkpLnJlZHVjZSh0LCExKSYmdGhpcy51cGRhdGVTdGlja3lDb2x1bW5TdHlsZXMoKX0sdC5wcm90b3R5cGUuX3NldHVwU3RpY2t5U3R5bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGlja3lTdHlsZXI9bmV3IFQodGhpcy5faXNOYXRpdmVIdG1sVGFibGUsdGhpcy5zdGlja3lDc3NDbGFzcyx0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIiKSwodGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6T2JqZWN0KGMuYSkoKSkucGlwZShPYmplY3QoZi5hKSh0aGlzLl9vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5fc3RpY2t5U3R5bGVyLmRpcmVjdGlvbj1lLHQudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCl9KX0sdH0oKTtmdW5jdGlvbiBNKHQsZSl7cmV0dXJuIHQudG9BcnJheSgpLmNvbmNhdChBcnJheS5mcm9tKGUpKX12YXIgTj1mdW5jdGlvbigpe319LHlXTXI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pO3ZhciBpPW4oIkNjbkciKSxyPW4oIkJnV0siKSxvPW4oIklwMFIiKSxhPShuKCJlRGtQIiksbigiRnpxYyIpLG4oIjRjMzUiKSkscz0obigiZFdaZyIpLG4oInFBbFMiKSxuKCJXZjRwIiksbigibExBUCIpKSxsPW4oInZHWFkiKSx1PWkuUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZzo4cHggMTZweDttaW4td2lkdGg6MTAwdnc7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7b3V0bGluZTowO21heC1oZWlnaHQ6ODB2aDtvdmVyZmxvdzphdXRvfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntvdXRsaW5lOjFweCBzb2xpZH19Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLW1lZGl1bXttaW4td2lkdGg6Mzg0cHg7bWF4LXdpZHRoOmNhbGMoMTAwdncgLSAxMjhweCl9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLWxhcmdle21pbi13aWR0aDo1MTJweDttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDI1NnB4KX0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIteGxhcmdle21pbi13aWR0aDo1NzZweDttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDM4NHB4KX0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToic3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6InZvaWQsIGhpZGRlbiIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTAwJSkifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToidmlzaWJsZSIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCUpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6InZpc2libGUgPT4gdm9pZCwgdmlzaWJsZSA9PiBoaWRkZW4iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjM3NW1zIGN1YmljLWJlemllcigwLjQsMC4wLDEsMSkifSxvcHRpb25zOm51bGx9LHt0eXBlOjEsZXhwcjoidm9pZCA9PiB2aXNpYmxlIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIxOTVtcyBjdWJpYy1iZXppZXIoMC4wLDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5JYSgwLG51bGwsbnVsbCwwKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaS5sYigyLFtpLmhiKDQwMjY1MzE4NCwxLHtfcG9ydGFsT3V0bGV0OjB9KSwodCgpKCksaS5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGMpKSxpLlFhKDIsMjEyOTkyLFtbMSw0XV0sMCxhLmIsW2kuaixpLlFdLHtwb3J0YWw6WzAsInBvcnRhbCJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMiwwLCIiKX0sbnVsbCl9dmFyIGQ9aS5OYSgibWF0LWJvdHRvbS1zaGVldC1jb250YWluZXIiLHIuYyxmdW5jdGlvbih0KXtyZXR1cm4gaS5sYigwLFsodCgpKCksaS5SYSgwLDAsbnVsbCxudWxsLDEsIm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyIixbWyJhcmlhLW1vZGFsIiwidHJ1ZSJdLFsiY2xhc3MiLCJtYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lciJdLFsicm9sZSIsImRpYWxvZyJdLFsidGFiaW5kZXgiLCItMSJdXSxbWzEsImFyaWEtbGFiZWwiLDBdLFs0MCwiQHN0YXRlIiwwXV0sW1siY29tcG9uZW50IiwiQHN0YXRlLnN0YXJ0Il0sWyJjb21wb25lbnQiLCJAc3RhdGUuZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNvbXBvbmVudDpAc3RhdGUuc3RhcnQiPT09ZSYmKHI9ITEhPT1pLmJiKHQsMSkuX29uQW5pbWF0aW9uU3RhcnQobikmJnIpLCJjb21wb25lbnQ6QHN0YXRlLmRvbmUiPT09ZSYmKHI9ITEhPT1pLmJiKHQsMSkuX29uQW5pbWF0aW9uRG9uZShuKSYmcikscn0sZix1KSksaS5RYSgxLDE4MDIyNCxudWxsLDAsci5jLFtpLmssaS5oLHMuYyxsLmEsWzIsby5kXSxyLmJdLG51bGwsbnVsbCldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLG51bGw9PWkuYmIoZSwxKS5ib3R0b21TaGVldENvbmZpZz9udWxsOmkuYmIoZSwxKS5ib3R0b21TaGVldENvbmZpZy5hcmlhTGFiZWwsaS5iYihlLDEpLl9hbmltYXRpb25TdGF0ZSl9KX0se30se30sW10pfSx6VW5iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciBpLHIsbz1uKCJDY25HIiksYT1uKCJBeXRSIikscz1uKCJJcDBSIiksbD1uKCJhZWNkIiksdT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3RoaXMucGxhdGZvcm1JZD10LHRoaXMuYXBwSWQ9ZTt2YXIgbj1PYmplY3Qocy53KSh0KT8iaW4gdGhlIGJyb3dzZXIiOiJvbiB0aGUgc2VydmVyIjtjb25zb2xlLmxvZygiUnVubmluZyAiK24rIiB3aXRoIGFwcElkPSIrZSl9fSgpLGM9bigidkdYWSIpLGY9bigiNjdZLyIpLGQ9bigiTWhtKyIpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMuYnJlYWtwb2ludE9ic2VydmVyPXQsdGhpcy5yb3V0ZXI9ZSx0aGlzLmNodW5rTG9hZGVyPW4sdGhpcy5zaG93U3VibWVudT0hMSx0aGlzLm9wZW5lZFNpZGVOYXY9ITAsdGhpcy5pc0hhbmRzZXQkPXRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoYy5iLkhhbmRzZXQpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2hlc30pKSx0aGlzLnNpZGVNZW51Q29uZmlnPXtwYWRkaW5nQXRTdGFydDohMCxzZWxlY3RlZExpc3RGb250Q29sb3I6InJnYigxMTEsMTcyLDkzKSJ9LHRoaXMuc2lkZU1lbnVMaXN0PVt7bGFiZWw6Ik1haW4gcGFnZSIsaWNvbjoiZGFzaGJvYXJkIixsaW5rOiIvZGFzaGJvYXJkIn0se2xhYmVsOiJQcm9qZWN0IERlc2lnbiIsaWNvbjoiYXNzZXNzbWVudCIsbGluazoiL3Byb2plY3QifSx7bGFiZWw6IkJpb2xvZ3kiLGljb246ImJsdXJfY2lyY3VsYXIiLGl0ZW1zOlt7bGFiZWw6Ik92ZXJ2aWV3IixpY29uOiJleHBsb3JlIixsaW5rOiIvYmlvbG9neS9vdmVydmlldyJ9LHtsYWJlbDoiUGFydHMiLGljb246InZpZXdfY29tZnkiLGxpbms6Ii9iaW9sb2d5L3BhcnRzIn0se2xhYmVsOiJTdHJhaW5zIixpY29uOiJibHVyX29uIixsaW5rOiIvYmlvbG9neS9zdHJhaW5zIn0se2xhYmVsOiJJbnRlcmxhYiIsaWNvbjoic3dhcF9ob3Jpem9udGFsX2NpcmNsZSIsbGluazoiL2Jpb2xvZ3kvaW50ZXJsYWIifV19LHtsYWJlbDoiTW9kZWxpbmciLGljb246InRpbWVsaW5lIixsaW5rOiIvbW9kZWxpbmcifSx7bGFiZWw6IlNvZnR3YXJlIixpY29uOiJtZW1vcnkiLGxpbms6Ii9zb2Z0d2FyZSJ9LHtsYWJlbDoiSHVtYW4gUHJhY3RpY2VzIixpY29uOiJhY2Nlc3NpYmlsaXR5X25ldyIsbGluazoiL2h1bWFuLXByYWN0aWNlcyJ9LHtsYWJlbDoiT3VyIHRlYW0iLGljb246InBlb3BsZSIsbGluazoiL3RlYW0ifSx7bGFiZWw6IlN1cHBvcnQiLGljb246ImZvbGRlcl9zcGVjaWFsIixpdGVtczpbe2xhYmVsOiJTcG9uc29ycyIsaWNvbjoiYXR0YWNoX21vbmV5IixsaW5rOiIvc3VwcG9ydCJ9LHtsYWJlbDoiQ29sbGFib3JhdGlvbnMiLGljb246InB1YmxpYyIsbGluazoiL2NvbGxhYm9yYXRpb25zIn0se2xhYmVsOiJBdHRyaWJ1dGlvbiIsaWNvbjoicGVyc29uX3BpbiIsbGluazoiL2F0dHJpYnV0aW9uIn0se2xhYmVsOiJSZWZlcmVuY2VzIixpY29uOiJib29rIixsaW5rOiIvcmVmZXJlbmNlcyJ9XX0se2xhYmVsOiJMYWIgTm90ZWJvb2siLGljb246ImJsdXJfY2lyY3VsYXIiLGxpbms6Ii9sYWJub3RlYm9vayJ9XSx0aGlzLnJvdXRlckxpbmtDaHVua1Byb2Nlc3Npbmc9ZnVuY3Rpb24odCl7aS5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nVW5ib3VuZCh0LGkpfX1yZXR1cm4gdC5wcm90b3R5cGUucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZ1VuYm91bmQ9ZnVuY3Rpb24odCxlKXtlLmNodW5rTG9hZGVyLmxvYWRQYWdlQ2h1bmsodCxmdW5jdGlvbigpe2Uucm91dGVyLm5hdmlnYXRlQnlVcmwodCl9KX0sdC5wcm90b3R5cGUub3BlblNpZGVOYXY9ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZFNpZGVOYXY9ITAhPT10aGlzLm9wZW5lZFNpZGVOYXZ9LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5zZWxlY3RlZFNpZGVNZW51SXRlbT1mdW5jdGlvbih0KXt0aGlzLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmcodC5saW5rKX0sdH0oKSxwPW4oInBNblMiKSxtPW4oImx6bGoiKSxiPW4oIkZWU3kiKSx5PW4oImdJM0IiKSx2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfSxnPSgxPT09KGk9dikubGVuZ3RoJiYocj1pLGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdihyKHQpLGUpfSkse2xlZnQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgbz1uK3I+Pj4xO2kodFtvXSxlKTwwP249bysxOnI9b31yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgbz1uK3I+Pj4xO2kodFtvXSxlKT4wP3I9bzpuPW8rMX1yZXR1cm4gbn19KS5yaWdodCxfPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LHc9ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihpPm4mJihpPW4pLHI8biYmKHI9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKTtyZXR1cm5baSxyXX0seD1BcnJheS5wcm90b3R5cGUuc2xpY2UsQz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LE89ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99LEU9TWF0aC5zcXJ0KDUwKSxrPU1hdGguc3FydCgxMCksaj1NYXRoLnNxcnQoMiksST1mdW5jdGlvbih0LGUsbil7dmFyIGkscixvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChpPWU8dCkmJihyPXQsdD1lLGU9ciksMD09PShhPVQodCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbChlLXQrMSkpOysrczxyOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbCh0LWUrMSkpOysrczxyOylvW3NdPSh0LXMpL2E7cmV0dXJuIGkmJm8ucmV2ZXJzZSgpLG99O2Z1bmN0aW9uIFQodCxlLG4pe3ZhciBpPShlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCksbz1pL01hdGgucG93KDEwLHIpO3JldHVybiByPj0wPyhvPj1FPzEwOm8+PWs/NTpvPj1qPzI6MSkqTWF0aC5wb3coMTAscik6LU1hdGgucG93KDEwLC1yKS8obz49RT8xMDpvPj1rPzU6bz49aj8yOjEpfWZ1bmN0aW9uIFIodCxlLG4pe3ZhciBpPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PUU/cio9MTA6bz49az9yKj01Om8+PWomJihyKj0yKSxlPHQ/LXI6cn12YXIgQT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX07QXJyYXk7dmFyIFA9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gRCgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgTShpKX1mdW5jdGlvbiBNKHQpe3RoaXMuXz10fWZ1bmN0aW9uIE4odCxlKXtmb3IodmFyIG4saT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZigobj10W2ldKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBMKHQsZSxuKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYodFtpXS5uYW1lPT09ZSl7dFtpXT1QLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1NLnByb3RvdHlwZT1ELnByb3RvdHlwZT17Y29uc3RydWN0b3I6TSxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGkscj10aGlzLl8sbz0oaT1yLCh0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhaS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KSksYT0tMSxzPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHM7KWlmKG49KHQ9b1thXSkudHlwZSlyW25dPUwocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT1MKHJbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPHM7KWlmKChuPSh0PW9bYV0pLnR5cGUpJiYobj1OKHJbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IE0odCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLGkscj1uZXcgQXJyYXkobiksbz0wO288bjsrK28pcltvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0oaT10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKWlbb10udmFsdWUuYXBwbHkoZSxyKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBpPXRoaXMuX1t0XSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBGPUQsVj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsej17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Vix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LEI9ZnVuY3Rpb24odCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksei5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6eltlXSxsb2NhbDp0fTp0fSxVPWZ1bmN0aW9uKHQpe3ZhciBlPUIodCk7cmV0dXJuKGUubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09ViYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Vj9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19KShlKX07ZnVuY3Rpb24gSCgpe312YXIgcT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9IOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19O2Z1bmN0aW9uIFEoKXtyZXR1cm5bXX12YXIgRz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9ROmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19LFo9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBXPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZighVy5tYXRjaGVzKXt2YXIgWT1XLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8Vy5tc01hdGNoZXNTZWxlY3Rvcnx8Vy5tb3pNYXRjaGVzU2VsZWN0b3J8fFcub01hdGNoZXNTZWxlY3RvcjtaPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZLmNhbGwodGhpcyx0KX19fX12YXIgSz1aLFg9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9O2Z1bmN0aW9uICQodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9JC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOiQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIEo9IiQiO2Z1bmN0aW9uIHR0KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsdT1vLmxlbmd0aDtzPHU7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyAkKHQsb1tzXSk7Zm9yKDtzPGw7KytzKShhPWVbc10pJiYocltzXT1hKX1mdW5jdGlvbiBldCh0LGUsbixpLHIsbyxhKXt2YXIgcyxsLHUsYz17fSxmPWUubGVuZ3RoLGQ9by5sZW5ndGgsaD1uZXcgQXJyYXkoZik7Zm9yKHM9MDtzPGY7KytzKShsPWVbc10pJiYoaFtzXT11PUorYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLHUgaW4gYz9yW3NdPWw6Y1t1XT1sKTtmb3Iocz0wO3M8ZDsrK3MpKGw9Y1t1PUorYS5jYWxsKHQsb1tzXSxzLG8pXSk/KGlbc109bCxsLl9fZGF0YV9fPW9bc10sY1t1XT1udWxsKTpuW3NdPW5ldyAkKHQsb1tzXSk7Zm9yKHM9MDtzPGY7KytzKShsPWVbc10pJiZjW2hbc11dPT09bCYmKHJbc109bCl9ZnVuY3Rpb24gbnQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGl0PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gcnQodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxpdCh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gYXQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgc3QodCl9ZnVuY3Rpb24gc3QodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPW90KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gbHQodCxlKXtmb3IodmFyIG49YXQodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLmFkZChlW2ldKX1mdW5jdGlvbiB1dCh0LGUpe2Zvcih2YXIgbj1hdCh0KSxpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KW4ucmVtb3ZlKGVbaV0pfWZ1bmN0aW9uIGN0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBmdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGR0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGh0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcHQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBtdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITEpLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIHl0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfXN0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIHZ0PXt9LGd0PW51bGw7ZnVuY3Rpb24gX3QodCxlLG4pe3JldHVybiB0PXd0KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gd3QodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1ndDtndD1pO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXtndD1yfX19ZnVuY3Rpb24geHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixpPTAscj0tMSxvPWUubGVuZ3RoO2k8bzsrK2kpbj1lW2ldLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK3JdPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytyP2UubGVuZ3RoPXI6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEN0KHQsZSxuKXt2YXIgaT12dC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP190Ond0O3JldHVybiBmdW5jdGlvbihyLG8sYSl7dmFyIHMsbD10aGlzLl9fb24sdT1pKGUsbyxhKTtpZihsKWZvcih2YXIgYz0wLGY9bC5sZW5ndGg7YzxmOysrYylpZigocz1sW2NdKS50eXBlPT09dC50eXBlJiZzLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcixzLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcj11LHMuY2FwdHVyZT1uKSx2b2lkKHMudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSx1LG4pLHM9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6dSxjYXB0dXJlOm59LGw/bC5wdXNoKHMpOnRoaXMuX19vbj1bc119fWZ1bmN0aW9uIFN0KHQsZSxuKXt2YXIgaT1pdCh0KSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcihlLG4pOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oci5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxyLmRldGFpbD1uLmRldGFpbCk6ci5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChyKX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fCh2dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIE90PVtudWxsXTtmdW5jdGlvbiBFdCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBrdCgpe3JldHVybiBuZXcgRXQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxPdCl9RXQucHJvdG90eXBlPWt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RXQsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1xKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGEscz1lW3JdLGw9cy5sZW5ndGgsdT1pW3JdPW5ldyBBcnJheShsKSxjPTA7YzxsOysrYykobz1zW2NdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyxjLHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSx1W2NdPWEpO3JldHVybiBuZXcgRXQoaSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1HKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPG47KytvKWZvcih2YXIgYSxzPWVbb10sbD1zLmxlbmd0aCx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKGkucHVzaCh0LmNhbGwoYSxhLl9fZGF0YV9fLHUscykpLHIucHVzaChhKSk7cmV0dXJuIG5ldyBFdChpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUsodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsbD1pW3JdPVtdLHU9MDt1PHM7Kyt1KShvPWFbdV0pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLHUsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IEV0KGksdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3BbKytjXT10fSkscDt2YXIgbixpPWU/ZXQ6dHQscj10aGlzLl9wYXJlbnRzLG89dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYobj10LHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Zvcih2YXIgYT1vLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxjPTA7YzxhOysrYyl7dmFyIGY9cltjXSxkPW9bY10saD1kLmxlbmd0aCxwPXQuY2FsbChmLGYmJmYuX19kYXRhX18sYyxyKSxtPXAubGVuZ3RoLGI9bFtjXT1uZXcgQXJyYXkobSkseT1zW2NdPW5ldyBBcnJheShtKTtpKGYsZCxiLHksdVtjXT1uZXcgQXJyYXkoaCkscCxlKTtmb3IodmFyIHYsZyxfPTAsdz0wO188bTsrK18paWYodj1iW19dKXtmb3IoXz49dyYmKHc9XysxKTshKGc9eVt3XSkmJisrdzxtOyk7di5fbmV4dD1nfHxudWxsfX1yZXR1cm4ocz1uZXcgRXQocyxyKSkuX2VudGVyPWwscy5fZXhpdD11LHN9LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChYKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgRXQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChYKSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGw9ZVthXSx1PW5bYV0sYz1sLmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGMpLGQ9MDtkPGM7KytkKShzPWxbZF18fHVbZF0pJiYoZltkXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgRXQobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiZhIT09aS5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLGEpLGE9aSk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1udCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsdT1yW29dPW5ldyBBcnJheShsKSxjPTA7YzxsOysrYykoYT1zW2NdKSYmKHVbY109YSk7dS5zb3J0KGUpfXJldHVybiBuZXcgRXQocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSx0fSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrdH0pLHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPUIodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fTpuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsaSxuKX19OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19KSh0LGUsbnVsbD09bj8iIjpuKSk6cnQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fSkodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1vdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1hdCh0aGlzLm5vZGUoKSkscj0tMSxvPW4ubGVuZ3RoOysrcjxvOylpZighaS5jb250YWlucyhuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9sdDp1dCkodGhpcyx0KX19OmU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7bHQodGhpcyx0KX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3V0KHRoaXMsdCl9fSkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/Y3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9mdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZHQpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goaHQpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlUodCksaT1udWxsPT1lP3B0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2gobXQpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD95dDpidCl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbz0odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP0N0Onh0LG51bGw9PW4mJihuPSExKSxpPTA7aTxhOysraSl0aGlzLmVhY2gocyhvW2ldLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIGwsdT0wLGM9cy5sZW5ndGg7dTxjOysrdSlmb3IoaT0wLGw9c1t1XTtpPGE7KytpKWlmKChyPW9baV0pLnR5cGU9PT1sLnR5cGUmJnIubmFtZT09PWwubmFtZSlyZXR1cm4gbC52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU3QodGhpcyx0LGUpfX0pKHQsZSkpfX07dmFyIGp0PWt0LEl0PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgRXQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBFdChbW3RdXSxPdCl9LFR0PTA7ZnVuY3Rpb24gUnQoKXt0aGlzLl89IkAiKygrK1R0KS50b1N0cmluZygzNil9UnQucHJvdG90eXBlPShmdW5jdGlvbigpe3JldHVybiBuZXcgUnR9KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJ0LGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBBdD1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIFB0KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIGUpbltpXT1lW2ldO3JldHVybiBufWZ1bmN0aW9uIER0KCl7fXZhciBNdD0iXFxzKihbKy1dP1xcZCspXFxzKiIsTnQ9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTHQ9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEZ0PS9eIyhbMC05YS1mXXszfSkkLyxWdD0vXiMoWzAtOWEtZl17Nn0pJC8senQ9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW010LE10LE10XSsiXFwpJCIpLEJ0PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tMdCxMdCxMdF0rIlxcKSQiKSxVdD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW010LE10LE10LE50XSsiXFwpJCIpLEh0PW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTHQsTHQsTHQsTnRdKyJcXCkkIikscXQ9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW050LEx0LEx0XSsiXFwpJCIpLFF0PW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbTnQsTHQsTHQsTnRdKyJcXCkkIiksR3Q9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gWnQodCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPUZ0LmV4ZWModCkpP25ldyAkdCgoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT1WdC5leGVjKHQpKT9XdChwYXJzZUludChlWzFdLDE2KSk6KGU9enQuZXhlYyh0KSk/bmV3ICR0KGVbMV0sZVsyXSxlWzNdLDEpOihlPUJ0LmV4ZWModCkpP25ldyAkdCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1VdC5leGVjKHQpKT9ZdChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1IdC5leGVjKHQpKT9ZdCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1xdC5leGVjKHQpKT90ZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVF0LmV4ZWModCkpP3RlKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6R3QuaGFzT3duUHJvcGVydHkodCk/V3QoR3RbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyAkdChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFd0KHQpe3JldHVybiBuZXcgJHQodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFl0KHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgJHQodCxlLG4saSl9ZnVuY3Rpb24gS3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEdHx8KHQ9WnQodCkpLHQ/bmV3ICR0KCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyAkdH1mdW5jdGlvbiBYdCh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/S3QodCk6bmV3ICR0KHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiAkdCh0LGUsbixpKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gSnQodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB0ZSh0LGUsbixpKXtyZXR1cm4gaTw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IG5lKHQsZSxuLGkpfWZ1bmN0aW9uIGVlKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgbmUpcmV0dXJuIG5ldyBuZSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBEdHx8KHQ9WnQodCkpLCF0KXJldHVybiBuZXcgbmU7aWYodCBpbnN0YW5jZW9mIG5lKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj1NYXRoLm1pbihlLG4saSksbz1NYXRoLm1heChlLG4saSksYT1OYU4scz1vLXIsbD0obytyKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLWkpL3MrNioobjxpKTpuPT09bz8oaS1lKS9zKzI6KGUtbikvcys0LHMvPWw8LjU/bytyOjItby1yLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgbmUoYSxzLGwsdC5vcGFjaXR5KX0odCk6bmV3IG5lKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBuZSh0LGUsbixpKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gaWUodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfUF0KER0LFp0LHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLEF0KCR0LFh0LFB0KER0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgJHQodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3ICR0KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIiMiK0p0KHRoaXMucikrSnQodGhpcy5nKStKdCh0aGlzLmIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSxBdChuZSxlZSxQdChEdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IG5lKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IG5lKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLGk9bisobjwuNT9uOjEtbikqZSxyPTIqbi1pO3JldHVybiBuZXcgJHQoaWUodD49MjQwP3QtMjQwOnQrMTIwLHIsaSksaWUodCxyLGkpLGllKHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciByZT1NYXRoLlBJLzE4MCxvZT0xODAvTWF0aC5QSSxhZT0uOTY0MjIsc2U9MSxsZT0uODI1MjEsdWU9NC8yOSxjZT02LzI5LGZlPTMqY2UqY2UsZGU9Y2UqY2UqY2U7ZnVuY3Rpb24gaGUodCl7aWYodCBpbnN0YW5jZW9mIHBlKXJldHVybiBuZXcgcGUodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgX2Upe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBwZSh0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKnJlO3JldHVybiBuZXcgcGUodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgJHR8fCh0PUt0KHQpKTt2YXIgbixpLHI9dmUodC5yKSxvPXZlKHQuZyksYT12ZSh0LmIpLHM9bWUoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqbysuMDYwNjE2OSphKS9zZSk7cmV0dXJuIHI9PT1vJiZvPT09YT9uPWk9czoobj1tZSgoLjQzNjA3NDcqcisuMzg1MDY0OSpvKy4xNDMwODA0KmEpL2FlKSxpPW1lKCguMDEzOTMyMipyKy4wOTcxMDQ1Km8rLjcxNDE3MzMqYSkvbGUpKSxuZXcgcGUoMTE2KnMtMTYsNTAwKihuLXMpLDIwMCoocy1pKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHBlKHQsZSxuLGkpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBtZSh0KXtyZXR1cm4gdD5kZT9NYXRoLnBvdyh0LDEvMyk6dC9mZSt1ZX1mdW5jdGlvbiBiZSh0KXtyZXR1cm4gdD5jZT90KnQqdDpmZSoodC11ZSl9ZnVuY3Rpb24geWUodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiB2ZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBnZSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIF9lKXJldHVybiBuZXcgX2UodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcGV8fCh0PWhlKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgX2UoTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpvZTtyZXR1cm4gbmV3IF9lKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfSh0KTpuZXcgX2UodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIF9lKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1BdChwZSxmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/aGUodCk6bmV3IHBlKHQsZSxuLG51bGw9PWk/MTppKX0sUHQoRHQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcGUodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwZSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgJHQoeWUoMy4xMzM4NTYxKihlPWFlKmJlKGUpKS0xLjYxNjg2NjcqKHQ9c2UqYmUodCkpLS40OTA2MTQ2KihuPWxlKmJlKG4pKSkseWUoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSx5ZSguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLEF0KF9lLGdlLFB0KER0LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IF9lKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX2UodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gaGUodGhpcykucmdiKCl9fSkpO3ZhciB3ZT0tLjI5MjI3LHhlPS0uOTA2NDksQ2U9MS45NzI5NCxTZT1DZSp4ZSxPZT0xLjc4Mjc3KkNlLEVlPTEuNzgyNzcqd2UtIC0uMTQ4NjEqeGU7ZnVuY3Rpb24ga2UodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBqZSlyZXR1cm4gbmV3IGplKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mICR0fHwodD1LdCh0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUsaT0oRWUqbitTZSoodC5yLzI1NSktT2UqZSkvKEVlK1NlLU9lKSxyPW4taSxvPShDZSooZS1pKS13ZSpyKS94ZSxhPU1hdGguc3FydChvKm8rcipyKS8oQ2UqaSooMS1pKSkscz1hP01hdGguYXRhbjIobyxyKSpvZS0xMjA6TmFOO3JldHVybiBuZXcgamUoczwwP3MrMzYwOnMsYSxpLHQub3BhY2l0eSl9KHQpOm5ldyBqZSh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gamUodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIEllKHQsZSxuLGkscil7dmFyIG89dCp0LGE9byp0O3JldHVybigoMS0zKnQrMypvLWEpKmUrKDQtNipvKzMqYSkqbisoMSszKnQrMypvLTMqYSkqaSthKnIpLzZ9QXQoamUsa2UsUHQoRHQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBqZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBqZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqcmUsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLGk9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KTtyZXR1cm4gbmV3ICR0KDI1NSooZStuKigtLjE0ODYxKmkrMS43ODI3NypyKSksMjU1KihlK24qKHdlKmkreGUqcikpLDI1NSooZStuKihDZSppKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIFRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gUmUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBBZSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9SZSh0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6VGUoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBQZSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9SZSh0LG4pOlRlKGlzTmFOKHQpP2U6dCl9dmFyIERlPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9QZTpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KHQraSplLG4pfX0oZSxuLHQpOlRlKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiBpKHQsZSl7dmFyIGk9bigodD1YdCh0KSkuciwoZT1YdChlKSkucikscj1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPVBlKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPWkoZSksdC5nPXIoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIGkuZ2FtbWE9dCxpfSgxKTtmdW5jdGlvbiBNZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4saSxyPWUubGVuZ3RoLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilpPVh0KGVbbl0pLG9bbl09aS5yfHwwLGFbbl09aS5nfHwwLHNbbl09aS5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHM9dChzKSxpLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gaS5yPW8odCksaS5nPWEodCksaS5iPXModCksaSsiIn19fXZhciBOZSxMZSxGZSxWZSx6ZT1NZShmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSkscj10W2ldLG89dFtpKzFdO3JldHVybiBJZSgobi1pL2UpKmUsaT4wP3RbaS0xXToyKnItbyxyLG8saTxlLTE/dFtpKzJdOjIqby1yKX19KSxCZT0oTWUoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKTtyZXR1cm4gSWUoKG4taS9lKSplLHRbKGkrZS0xKSVlXSx0W2klZV0sdFsoaSsxKSVlXSx0WyhpKzIpJWVdKX19KSxmdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn19KSxVZT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csSGU9bmV3IFJlZ0V4cChVZS5zb3VyY2UsImciKSxxZT1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixvPVVlLmxhc3RJbmRleD1IZS5sYXN0SW5kZXg9MCxhPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KG49VWUuZXhlYyh0KSkmJihpPUhlLmV4ZWMoZSkpOykocj1pLmluZGV4KT5vJiYocj1lLnNsaWNlKG8sciksc1thXT9zW2FdKz1yOnNbKythXT1yKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpCZShuLGkpfSkpLG89SGUubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYocj1lLnNsaWNlKG8pLHNbYV0/c1thXSs9cjpzWysrYV09cikscy5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4saT0wO2k8ZTsrK2kpc1sobj1sW2ldKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX0sUWU9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1pP1RlKGUpOigibnVtYmVyIj09PWk/QmU6InN0cmluZyI9PT1pPyhuPVp0KGUpKT8oZT1uLERlKTpxZTplIGluc3RhbmNlb2YgWnQ/RGU6ZSBpbnN0YW5jZW9mIERhdGU/ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gbi5zZXRUaW1lKHQrZSppKSxufX06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbih0LGUpe3ZhciBuLGk9ZT9lLmxlbmd0aDowLHI9dD9NYXRoLm1pbihpLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxyOysrbilvW25dPVFlKHRbbl0sZVtuXSk7Zm9yKDtuPGk7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPHI7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19OiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9mdW5jdGlvbih0LGUpe3ZhciBuLGk9e30scj17fTtmb3IobiBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZXx8KGU9e30pLGUpbiBpbiB0P2lbbl09UWUodFtuXSxlW25dKTpyW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuIGluIGkpcltuXT1pW25dKHQpO3JldHVybiByfX06QmUpKHQsZSl9LEdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCtlKm4pfX0sWmU9MTgwL01hdGguUEksV2U9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX0sWWU9ZnVuY3Rpb24odCxlLG4saSxyLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89YSxlLz1hKSwobD10Km4rZSppKSYmKG4tPXQqbCxpLT1lKmwpLChzPU1hdGguc3FydChuKm4raSppKSkmJihuLz1zLGkvPXMsbC89cyksdCppPGUqbiYmKHQ9LXQsZT0tZSxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOnIsdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqWmUsc2tld1g6TWF0aC5hdGFuKGwpKlplLHNjYWxlWDphLHNjYWxlWTpzfX07ZnVuY3Rpb24gS2UodCxlLG4saSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sbD1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSxmdW5jdGlvbih0LGkscixvLGEscyl7aWYodCE9PXJ8fGkhPT1vKXt2YXIgbD1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTpsLTQseDpCZSh0LHIpfSx7aTpsLTIseDpCZShpLG8pfSl9ZWxzZShyfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIityK2UrbytuKX0oby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsbCksZnVuY3Rpb24odCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2gocihuKSsicm90YXRlKCIsbnVsbCxpKS0yLHg6QmUodCxlKX0pKTplJiZuLnB1c2gocihuKSsicm90YXRlKCIrZStpKX0oby5yb3RhdGUsYS5yb3RhdGUscyxsKSxmdW5jdGlvbih0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKHIobikrInNrZXdYKCIsbnVsbCxpKS0yLHg6QmUodCxlKX0pOmUmJm4ucHVzaChyKG4pKyJza2V3WCgiK2UraSl9KG8uc2tld1gsYS5za2V3WCxzLGwpLGZ1bmN0aW9uKHQsZSxuLGksbyxhKXtpZih0IT09bnx8ZSE9PWkpe3ZhciBzPW8ucHVzaChyKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6QmUodCxuKX0se2k6cy0yLHg6QmUoZSxpKX0pfWVsc2UgMT09PW4mJjE9PT1pfHxvLnB1c2gocihvKSsic2NhbGUoIituKyIsIitpKyIpIil9KG8uc2NhbGVYLG8uc2NhbGVZLGEuc2NhbGVYLGEuc2NhbGVZLHMsbCksbz1hPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEsaT1sLmxlbmd0aDsrK248aTspc1soZT1sW25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgWGU9S2UoZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9XZTooTmV8fChOZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxMZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRmU9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLE5lLnN0eWxlLnRyYW5zZm9ybT10LHQ9RmUuZ2V0Q29tcHV0ZWRTdHlsZShMZS5hcHBlbmRDaGlsZChOZSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksTGUucmVtb3ZlQ2hpbGQoTmUpLHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLFllKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLCRlPUtlKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1dlOihWZXx8KFZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFZlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1WZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9ZZSgodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTpXZSl9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gSmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dCgoZT1lZShlKSkuaCwobj1lZShuKSkuaCkscj1QZShlLnMsbi5zKSxvPVBlKGUubCxuLmwpLGE9UGUoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9cih0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19ZnVuY3Rpb24gdG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dCgoZT1nZShlKSkuaCwobj1nZShuKSkuaCkscj1QZShlLmMsbi5jKSxvPVBlKGUubCxuLmwpLGE9UGUoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLmM9cih0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19ZnVuY3Rpb24gZW4odCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gaShlLGkpe3ZhciByPXQoKGU9a2UoZSkpLmgsKGk9a2UoaSkpLmgpLG89UGUoZS5zLGkucyksYT1QZShlLmwsaS5sKSxzPVBlKGUub3BhY2l0eSxpLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24saS5nYW1tYT1lLGl9KDEpfU1hdGgsSmUoQWUpLEplKFBlKSx0bihBZSksdG4oUGUpLGVuKEFlKTt2YXIgbm4scm4sb249ZW4oUGUpLGFuPTAsc249MCxsbj0wLHVuPTFlMyxjbj0wLGZuPTAsZG49MCxobj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxwbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBtbigpe3JldHVybiBmbnx8KHBuKGJuKSxmbj1obi5ub3coKStkbil9ZnVuY3Rpb24gYm4oKXtmbj0wfWZ1bmN0aW9uIHluKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB2bih0LGUsbil7dmFyIGk9bmV3IHluO3JldHVybiBpLnJlc3RhcnQodCxlLG4pLGl9ZnVuY3Rpb24gZ24oKXtmbj0oY249aG4ubm93KCkpK2RuLGFuPXNuPTA7dHJ5eyFmdW5jdGlvbigpe21uKCksKythbjtmb3IodmFyIHQsZT1ubjtlOykodD1mbi1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tYW59KCl9ZmluYWxseXthbj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1ubixpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6bm49ZSk7cm49dCx3bihpKX0oKSxmbj0wfX1mdW5jdGlvbiBfbigpe3ZhciB0PWhuLm5vdygpLGU9dC1jbjtlPnVuJiYoZG4tPWUsY249dCl9ZnVuY3Rpb24gd24odCl7YW58fChzbiYmKHNuPWNsZWFyVGltZW91dChzbikpLHQtZm4+MjQ/KHQ8MS8wJiYoc249c2V0VGltZW91dChnbix0LWhuLm5vdygpLWRuKSksbG4mJihsbj1jbGVhckludGVydmFsKGxuKSkpOihsbnx8KGNuPWhuLm5vdygpLGxuPXNldEludGVydmFsKF9uLHVuKSksYW49MSxwbihnbikpKX15bi5wcm90b3R5cGU9dm4ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5bixyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/bW4oKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8cm49PT10aGlzfHwocm4/cm4uX25leHQ9dGhpczpubj10aGlzLHJuPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sd24oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsd24oKSl9fTt2YXIgeG49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW5ldyB5bjtyZXR1cm4gaS5yZXN0YXJ0KGZ1bmN0aW9uKG4pe2kuc3RvcCgpLHQobitlKX0sZT1udWxsPT1lPzA6K2UsbiksaX0sQ249Rigic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxTbj1bXSxPbj0wLEVuPTEsa249Mixqbj0zLEluPTQsVG49NSxSbj02LEFuPWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihuIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8obCl7dmFyIHUsYyxmLGQ7aWYobi5zdGF0ZSE9PUVuKXJldHVybiBzKCk7Zm9yKHUgaW4gcilpZigoZD1yW3VdKS5uYW1lPT09bi5uYW1lKXtpZihkLnN0YXRlPT09am4pcmV0dXJuIHhuKG8pO2Quc3RhdGU9PT1Jbj8oZC5zdGF0ZT1SbixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGQuaW5kZXgsZC5ncm91cCksZGVsZXRlIHJbdV0pOit1PGUmJihkLnN0YXRlPVJuLGQudGltZXIuc3RvcCgpLGRlbGV0ZSByW3VdKX1pZih4bihmdW5jdGlvbigpe24uc3RhdGU9PT1qbiYmKG4uc3RhdGU9SW4sbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSksbi5zdGF0ZT1rbixuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxuLnN0YXRlPT09a24pe2ZvcihuLnN0YXRlPWpuLGk9bmV3IEFycmF5KGY9bi50d2Vlbi5sZW5ndGgpLHU9MCxjPS0xO3U8ZjsrK3UpKGQ9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKGlbKytjXT1kKTtpLmxlbmd0aD1jKzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciByPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPVRuLDEpLG89LTEsYT1pLmxlbmd0aDsrK288YTspaVtvXS5jYWxsKG51bGwscik7bi5zdGF0ZT09PVRuJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgaSBpbiBuLnN0YXRlPVJuLG4udGltZXIuc3RvcCgpLGRlbGV0ZSByW2VdLHIpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1yW2VdPW4sbi50aW1lcj12bihmdW5jdGlvbih0KXtuLnN0YXRlPUVuLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9LDAsbi50aW1lKX0odCxuLHtuYW1lOmUsaW5kZXg6aSxncm91cDpyLG9uOkNuLHR3ZWVuOlNuLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOk9ufSl9O2Z1bmN0aW9uIFBuKHQsZSl7dmFyIG49TW4odCxlKTtpZihuLnN0YXRlPk9uKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gRG4odCxlKXt2YXIgbj1Nbih0LGUpO2lmKG4uc3RhdGU+a24pdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gTW4odCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBObih0LGUsbil7dmFyIGk9dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PURuKHRoaXMsaSk7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih0KXtyZXR1cm4gTW4odCxpKS52YWx1ZVtlXX19dmFyIExuPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9CZTplIGluc3RhbmNlb2YgWnQ/RGU6KG49WnQoZSkpPyhlPW4sRGUpOnFlKSh0LGUpfSxGbj1qdC5wcm90b3R5cGUuY29uc3RydWN0b3IsVm49MDtmdW5jdGlvbiB6bih0LGUsbixpKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPWl9ZnVuY3Rpb24gQm4oKXtyZXR1cm4rK1ZufXZhciBVbj1qdC5wcm90b3R5cGU7ZnVuY3Rpb24gSG4odCl7cmV0dXJuK3R9em4ucHJvdG90eXBlPShmdW5jdGlvbih0KXtyZXR1cm4ganQoKS50cmFuc2l0aW9uKHQpfSkucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6bixzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1xKHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBzLGwsdT1pW2FdLGM9dS5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxkPTA7ZDxjOysrZCkocz11W2RdKSYmKGw9dC5jYWxsKHMscy5fX2RhdGFfXyxkLHUpKSYmKCJfX2RhdGFfXyJpbiBzJiYobC5fX2RhdGFfXz1zLl9fZGF0YV9fKSxmW2RdPWwsQW4oZltkXSxlLG4sZCxmLE1uKHMsbikpKTtyZXR1cm4gbmV3IHpuKG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1HKHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPHI7KytzKWZvcih2YXIgbCx1PWlbc10sYz11Lmxlbmd0aCxmPTA7ZjxjOysrZilpZihsPXVbZl0pe2Zvcih2YXIgZCxoPXQuY2FsbChsLGwuX19kYXRhX18sZix1KSxwPU1uKGwsbiksbT0wLGI9aC5sZW5ndGg7bTxiOysrbSkoZD1oW21dKSYmQW4oZCxlLG4sbSxoLHApO28ucHVzaChoKSxhLnB1c2gobCl9cmV0dXJuIG5ldyB6bihvLGEsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1LKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGE9ZVtyXSxzPWEubGVuZ3RoLGw9aVtyXT1bXSx1PTA7dTxzOysrdSkobz1hW3VdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyx1LGEpJiZsLnB1c2gobyk7cmV0dXJuIG5ldyB6bihpLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMsaT1lLmxlbmd0aCxyPU1hdGgubWluKGksbi5sZW5ndGgpLG89bmV3IEFycmF5KGkpLGE9MDthPHI7KythKWZvcih2YXIgcyxsPWVbYV0sdT1uW2FdLGM9bC5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxkPTA7ZDxjOysrZCkocz1sW2RdfHx1W2RdKSYmKGZbZF09cyk7Zm9yKDthPGk7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IHpuKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbih0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49Qm4oKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgYSxzPWlbb10sbD1zLmxlbmd0aCx1PTA7dTxsOysrdSlpZihhPXNbdV0pe3ZhciBjPU1uKGEsZSk7QW4oYSx0LG4sdSxzLHt0aW1lOmMudGltZStjLmRlbGF5K2MuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpjLmR1cmF0aW9uLGVhc2U6Yy5lYXNlfSl9cmV0dXJuIG5ldyB6bihpLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDpVbi5jYWxsLG5vZGVzOlVuLm5vZGVzLG5vZGU6VW4ubm9kZSxzaXplOlVuLnNpemUsZW1wdHk6VW4uZW1wdHksZWFjaDpVbi5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9Nbih0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbz1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pfShlKT9QbjpEbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1pJiYocj0oaT1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1yfX0obix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPUIodCksaT0idHJhbnNmb3JtIj09PW4/JGU6TG47cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9bih0aGlzKTtpZihudWxsIT1zKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PXM/bnVsbDphPT09aSYmcz09PXI/bzpvPWUoaT1hLHI9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkobixpLE5uKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKG4pOihuLmxvY2FsP2Z1bmN0aW9uKHQsZSxuKXt2YXIgaSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PW4/bnVsbDpvPT09aT9yOnI9ZShpPW8sbil9fTpmdW5jdGlvbih0LGUsbil7dmFyIGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09aT9yOnI9ZShpPW8sbil9fSkobixpLGUrIiIpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgaT1CKHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKGkubG9jYWw/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxpPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxpKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn06ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxpPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZSh0LGkoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufSkoaSxlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0idHJhbnNmb3JtIj09KHQrPSIiKT9YZTpMbjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1ydCh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCkscnQodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1pP3I6cj1lKG49byxpPWEpfX0odCxpKSkub24oImVuZC5zdHlsZS4iK3QsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19KHQpKTp0aGlzLnN0eWxlVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXJ0KHRoaXMsdCkscz1uKHRoaXMpO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxzPXJ0KHRoaXMsdCkpLGE9PT1zP251bGw6YT09PWkmJnM9PT1yP286bz1lKGk9YSxyPXMpfX0odCxpLE5uKHRoaXMsInN0eWxlLiIrdCxlKSk6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89cnQodGhpcyx0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09aT9yOnI9ZShpPW8sbil9fSh0LGksZSsiIiksbil9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciBpPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihpPXRoaXMudHdlZW4oaSkpJiZpLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKGksbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGksZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIGkoKXt2YXIgaT10aGlzLHI9ZS5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKGUpe2kuc3R5bGUuc2V0UHJvcGVydHkodCxyKGUpLG4pfX1yZXR1cm4gaS5fdmFsdWU9ZSxpfSh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fShObih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwodD10aGlzLl9pZCxmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSkpO3ZhciB0fSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpLHI9TW4odGhpcy5ub2RlKCksbikudHdlZW4sbz0wLGE9ci5sZW5ndGg7bzxhOysrbylpZigoaT1yW29dKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQsZSl7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1Ebih0aGlzLHQpLG89ci50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShpPW49bykubGVuZ3RoO2E8czsrK2EpaWYoaVthXS5uYW1lPT09ZSl7KGk9aS5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31yLnR3ZWVuPWl9fTpmdW5jdGlvbih0LGUsbil7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89RG4odGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PWkpe3I9KGk9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSxsPTAsdT1yLmxlbmd0aDtsPHU7KytsKWlmKHJbbF0ubmFtZT09PWUpe3JbbF09czticmVha31sPT09dSYmci5wdXNoKHMpfW8udHdlZW49cn19KShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7UG4odGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7UG4odGhpcyx0KS5kZWxheT1lfX0pKGUsdCkpOk1uKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7RG4odGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7RG4odGhpcyx0KS5kdXJhdGlvbj1lfX0pKGUsdCkpOk1uKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEbih0aGlzLHQpLmVhc2U9ZX19KGUsdCkpOk1uKHRoaXMubm9kZSgpLGUpLmVhc2V9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLE1hdGgsZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KTt2YXIgcW49MipNYXRoLlBJLFFuPShmdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1xbik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZSpNYXRoLnBvdygyLDEwKi0tdCkqTWF0aC5zaW4oKGktdCkvbil9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipxbil9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KDEsLjMpLGZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPXFuKTtmdW5jdGlvbiByKHQpe3JldHVybiAxLWUqTWF0aC5wb3coMiwtMTAqKHQ9K3QpKSpNYXRoLnNpbigodCtpKS9uKX1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKnFuKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0oMSwuMyksZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89cW4pO2Z1bmN0aW9uIHIodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqTWF0aC5wb3coMiwxMCp0KSpNYXRoLnNpbigoaS10KS9uKToyLWUqTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKGkrdCkvbikpLzJ9cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipxbil9LHIucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LHJ9KDEsLjMpLHt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn19KTtmdW5jdGlvbiBHbih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBRbi50aW1lPW1uKCksUW47cmV0dXJuIG59ZnVuY3Rpb24gWm4odCl7cmV0dXJue3R5cGU6dH19anQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IociBpbiBlPW51bGw9PWU/bnVsbDplKyIiLG8pKG49b1tyXSkubmFtZT09PWU/KGk9bi5zdGF0ZT5rbiYmbi5zdGF0ZTxUbixuLnN0YXRlPVJuLG4udGltZXIuc3RvcCgpLGkmJm4ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tyXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSh0aGlzLHQpfSl9LGp0LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIHpuPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9Qm4oKSwobj1RbikudGltZT1tbigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGEscz1pW29dLGw9cy5sZW5ndGgsdT0wO3U8bDsrK3UpKGE9c1t1XSkmJkFuKGEsdCxlLHUscyxufHxHbihhLGUpKTtyZXR1cm4gbmV3IHpuKGksdGhpcy5fcGFyZW50cyx0LGUpfSxbImUiLCJ3Il0ubWFwKFpuKSxbIm4iLCJzIl0ubWFwKFpuKSxbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLm1hcChabiksTWF0aCxNYXRoLE1hdGgsTWF0aCxBcnJheTt2YXIgV249TWF0aC5QSSxZbj0yKlduLEtuPVluLTFlLTY7ZnVuY3Rpb24gWG4oKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiAkbigpe3JldHVybiBuZXcgWG59WG4ucHJvdG90eXBlPSRuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WG4sbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K2kpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK2krIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPShuPStuKS0odD0rdCksbD0oaT0raSktKGU9K2UpLHU9by10LGM9YS1lLGY9dSp1K2MqYztpZigocj0rcik8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihmPjFlLTYpaWYoTWF0aC5hYnMoYypzLWwqdSk+MWUtNiYmcil7dmFyIGQ9bi1vLGg9aS1hLHA9cypzK2wqbCxtPWQqZCtoKmgsYj1NYXRoLnNxcnQocCkseT1NYXRoLnNxcnQoZiksdj1yKk1hdGgudGFuKChXbi1NYXRoLmFjb3MoKHArZi1tKS8oMipiKnkpKSkvMiksZz12L3ksXz12L2I7TWF0aC5hYnMoZy0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrZyp1KSsiLCIrKGUrZypjKSksdGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMCwiKyArKGMqZD51KmgpKyIsIisodGhpcy5feDE9dCtfKnMpKyIsIisodGhpcy5feTE9ZStfKmwpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSl9LGFyYzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dD0rdCxlPStlO3ZhciBhPShuPStuKSpNYXRoLmNvcyhpKSxzPW4qTWF0aC5zaW4oaSksbD10K2EsdT1lK3MsYz0xXm8sZj1vP2ktcjpyLWk7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitsKyIsIit1OihNYXRoLmFicyh0aGlzLl94MS1sKT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS11KT4xZS02KSYmKHRoaXMuXys9IkwiK2wrIiwiK3UpLG4mJihmPDAmJihmPWYlWW4rWW4pLGY+S24/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2MrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2MrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPXUpOmY+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoZj49V24pKyIsIitjKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKHIpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihyKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyAraSsiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgSm49JG47ZnVuY3Rpb24gdGkoKXt9ZnVuY3Rpb24gZWkodCxlKXt2YXIgbj1uZXcgdGk7aWYodCBpbnN0YW5jZW9mIHRpKXQuZWFjaChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLHI9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPG87KW4uc2V0KHIsdFtyXSk7ZWxzZSBmb3IoOysrcjxvOyluLnNldChlKGk9dFtyXSxyLHQpLGkpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIG5pKCl7fXRpLnByb3RvdHlwZT1laS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnRpLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBpaT1laS5wcm90b3R5cGU7bmkucHJvdG90eXBlPShmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBuaTtpZih0IGluc3RhbmNlb2YgbmkpdC5lYWNoKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgaT0tMSxyPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8cjspbi5hZGQodFtpXSk7ZWxzZSBmb3IoOysraTxyOyluLmFkZChlKHRbaV0saSx0KSl9cmV0dXJuIG59KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5pLGhhczppaS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTppaS5yZW1vdmUsY2xlYXI6aWkuY2xlYXIsdmFsdWVzOmlpLmtleXMsc2l6ZTppaS5zaXplLGVtcHR5OmlpLmVtcHR5LGVhY2g6aWkuZWFjaH0sQXJyYXk7dmFyIHJpPXt9LG9pPXt9LGFpPTM0LHNpPTEwLGxpPTEzO2Z1bmN0aW9uIHVpKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iil9dmFyIGNpPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxlKXt2YXIgaSxyPVtdLG89dC5sZW5ndGgsYT0wLHM9MCxsPW88PTAsdT0hMTtmdW5jdGlvbiBjKCl7aWYobClyZXR1cm4gb2k7aWYodSlyZXR1cm4gdT0hMSxyaTt2YXIgZSxpLHI9YTtpZih0LmNoYXJDb2RlQXQocik9PT1haSl7Zm9yKDthKys8byYmdC5jaGFyQ29kZUF0KGEpIT09YWl8fHQuY2hhckNvZGVBdCgrK2EpPT09YWk7KTtyZXR1cm4oZT1hKT49bz9sPSEwOihpPXQuY2hhckNvZGVBdChhKyspKT09PXNpP3U9ITA6aT09PWxpJiYodT0hMCx0LmNoYXJDb2RlQXQoYSk9PT1zaSYmKythKSx0LnNsaWNlKHIrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKChpPXQuY2hhckNvZGVBdChlPWErKykpPT09c2kpdT0hMDtlbHNlIGlmKGk9PT1saSl1PSEwLHQuY2hhckNvZGVBdChhKT09PXNpJiYrK2E7ZWxzZSBpZihpIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShyLGUpfXJldHVybiBsPSEwLHQuc2xpY2UocixvKX1mb3IodC5jaGFyQ29kZUF0KG8tMSk9PT1zaSYmLS1vLHQuY2hhckNvZGVBdChvLTEpPT09bGkmJi0tbzsoaT1jKCkpIT09b2k7KXtmb3IodmFyIGY9W107aSE9PXJpJiZpIT09b2k7KWYucHVzaChpKSxpPWMoKTtlJiZudWxsPT0oZj1lKGYscysrKSl8fHIucHVzaChmKX1yZXR1cm4gcn1mdW5jdGlvbiByKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixvPWkodCxmdW5jdGlvbih0LGkpe2lmKG4pcmV0dXJuIG4odCxpLTEpO3I9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj11aSh0KTtyZXR1cm4gZnVuY3Rpb24oaSxyKXtyZXR1cm4gZShuKGkpLHIsdCl9fSh0LGUpOnVpKHQpfSk7cmV0dXJuIG8uY29sdW1ucz1yfHxbXSxvfSxwYXJzZVJvd3M6aSxmb3JtYXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09biYmKG49ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBpIGluIHQpaSBpbiBlfHxuLnB1c2goZVtpXT1pKX0pLG59KGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pLmpvaW4odCl9KSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocikuam9pbigiXG4iKX19fSxmaT1jaSgiLCIpLnBhcnNlLGRpPWNpKCJcdCIpLnBhcnNlO2Z1bmN0aW9uIGhpKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC50ZXh0KCl9dmFyIHBpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihoaSl9O2Z1bmN0aW9uIG1pKHQpe3JldHVybiBmdW5jdGlvbihlLG4saSl7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKGk9bixuPXZvaWQgMCkscGkoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUsaSl9KX19ZnVuY3Rpb24gYmkodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHBpKGUsbikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KX19bWkoZmkpLG1pKGRpKSxiaSgiYXBwbGljYXRpb24veG1sIiksYmkoInRleHQvaHRtbCIpO3ZhciB5aT1iaSgiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIHZpKHQsZSxuLGkpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgcixvLGEscyxsLHUsYyxmLGQsaD10Ll9yb290LHA9e2RhdGE6aX0sbT10Ll94MCxiPXQuX3kwLHk9dC5feDEsdj10Ll95MTtpZighaClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtoLmxlbmd0aDspaWYoKHU9ZT49KG89KG0reSkvMikpP209bzp5PW8sKGM9bj49KGE9KGIrdikvMikpP2I9YTp2PWEscj1oLCEoaD1oW2Y9Yzw8MXx1XSkpcmV0dXJuIHJbZl09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGguZGF0YSksbD0rdC5feS5jYWxsKG51bGwsaC5kYXRhKSxlPT09cyYmbj09PWwpcmV0dXJuIHAubmV4dD1oLHI/cltmXT1wOnQuX3Jvb3Q9cCx0O2Rve3I9cj9yW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwodT1lPj0obz0obSt5KS8yKSk/bT1vOnk9bywoYz1uPj0oYT0oYit2KS8yKSk/Yj1hOnY9YX13aGlsZSgoZj1jPDwxfHUpPT0oZD0obD49YSk8PDF8cz49bykpO3JldHVybiByW2RdPWgscltmXT1wLHR9dmFyIGdpPWZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPWksdGhpcy55MT1yfTtmdW5jdGlvbiBfaSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3aSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB4aSh0LGUsbixpLHIsbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIENpKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgU2k9KGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uZXcgeGkobnVsbD09ZT9faTplLG51bGw9PW4/d2k6bixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2k6aS5hZGRBbGwodCl9KS5wcm90b3R5cGU9eGkucHJvdG90eXBlO1NpLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IHhpKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1DaShpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPUNpKGUpKTtyZXR1cm4gbn0sU2kuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gdmkodGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sU2kuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD0xLzAsdT0xLzAsYz0tMS8wLGY9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTxsJiYobD1pKSxpPmMmJihjPWkpLHI8dSYmKHU9cikscj5mJiYoZj1yKSk7Zm9yKGM8bCYmKGw9dGhpcy5feDAsYz10aGlzLl94MSksZjx1JiYodT10aGlzLl95MCxmPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsdSkuY292ZXIoYyxmKSxuPTA7bjxvOysrbil2aSh0aGlzLGFbbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sU2kuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAsaT10aGlzLl95MCxyPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4obikpcj0obj1NYXRoLmZsb29yKHQpKSsxLG89KGk9TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEobj50fHx0PnJ8fGk+ZXx8ZT5vKSlyZXR1cm4gdGhpczt2YXIgYSxzLGw9ci1uLHU9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwoaStvKS8yKTw8MXx0PChuK3IpLzIpe2Nhc2UgMDpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPXUsdT1hfXdoaWxlKG89aSsobCo9MiksdD4ocj1uK2wpfHxlPm8pO2JyZWFrO2Nhc2UgMTpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPXUsdT1hfXdoaWxlKG89aSsobCo9MiksKG49ci1sKT50fHxlPm8pO2JyZWFrO2Nhc2UgMjpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPXUsdT1hfXdoaWxlKGk9by0obCo9MiksdD4ocj1uK2wpfHxpPmUpO2JyZWFrO2Nhc2UgMzpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPXUsdT1hfXdoaWxlKGk9by0obCo9MiksKG49ci1sKT50fHxpPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD11KX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1pLHRoaXMuX3gxPXIsdGhpcy5feTE9byx0aGlzfSxTaS5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pLHR9LFNpLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sU2kuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGkscixvLGEscyxsLHUsYz10aGlzLl94MCxmPXRoaXMuX3kwLGQ9dGhpcy5feDEsaD10aGlzLl95MSxwPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmcC5wdXNoKG5ldyBnaShtLGMsZixkLGgpKSxudWxsPT1uP249MS8wOihjPXQtbixmPWUtbixkPXQrbixoPWUrbixuKj1uKTtsPXAucG9wKCk7KWlmKCEoIShtPWwubm9kZSl8fChyPWwueDApPmR8fChvPWwueTApPmh8fChhPWwueDEpPGN8fChzPWwueTEpPGYpKWlmKG0ubGVuZ3RoKXt2YXIgYj0ocithKS8yLHk9KG8rcykvMjtwLnB1c2gobmV3IGdpKG1bM10sYix5LGEscyksbmV3IGdpKG1bMl0scix5LGIscyksbmV3IGdpKG1bMV0sYixvLGEseSksbmV3IGdpKG1bMF0scixvLGIseSkpLCh1PShlPj15KTw8MXx0Pj1iKSYmKGw9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS11XSxwW3AubGVuZ3RoLTEtdV09bCl9ZWxzZXt2YXIgdj10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLGc9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxfPXYqditnKmc7aWYoXzxuKXt2YXIgdz1NYXRoLnNxcnQobj1fKTtjPXQtdyxmPWUtdyxkPXQrdyxoPWUrdyxpPW0uZGF0YX19cmV0dXJuIGl9LFNpLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLGkscixvLGEscyxsLHUsYyxmLGQsaD10aGlzLl9yb290LHA9dGhpcy5feDAsbT10aGlzLl95MCxiPXRoaXMuX3gxLHk9dGhpcy5feTE7aWYoIWgpcmV0dXJuIHRoaXM7aWYoaC5sZW5ndGgpZm9yKDs7KXtpZigodT1vPj0ocz0ocCtiKS8yKSk/cD1zOmI9cywoYz1hPj0obD0obSt5KS8yKSk/bT1sOnk9bCxlPWgsIShoPWhbZj1jPDwxfHVdKSlyZXR1cm4gdGhpcztpZighaC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYobj1lLGQ9Zil9Zm9yKDtoLmRhdGEhPT10OylpZihpPWgsIShoPWgubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKHI9aC5uZXh0KSYmZGVsZXRlIGgubmV4dCxpPyhyP2kubmV4dD1yOmRlbGV0ZSBpLm5leHQsdGhpcyk6ZT8ocj9lW2ZdPXI6ZGVsZXRlIGVbZl0sKGg9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJmg9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFoLmxlbmd0aCYmKG4/bltkXT1oOnRoaXMuX3Jvb3Q9aCksdGhpcyk6KHRoaXMuX3Jvb3Q9cix0aGlzKX0sU2kucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sU2kucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxTaS5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LFNpLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLG8sYSxzPVtdLGw9dGhpcy5fcm9vdDtmb3IobCYmcy5wdXNoKG5ldyBnaShsLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChsPWUubm9kZSxpPWUueDAscj1lLnkwLG89ZS54MSxhPWUueTEpJiZsLmxlbmd0aCl7dmFyIHU9KGkrbykvMixjPShyK2EpLzI7KG49bFszXSkmJnMucHVzaChuZXcgZ2kobix1LGMsbyxhKSksKG49bFsyXSkmJnMucHVzaChuZXcgZ2kobixpLGMsdSxhKSksKG49bFsxXSkmJnMucHVzaChuZXcgZ2kobix1LHIsbyxjKSksKG49bFswXSkmJnMucHVzaChuZXcgZ2kobixpLHIsdSxjKSl9cmV0dXJuIHRoaXN9LFNpLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxpPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IGdpKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgcj1lLm5vZGU7aWYoci5sZW5ndGgpe3ZhciBvLGE9ZS54MCxzPWUueTAsbD1lLngxLHU9ZS55MSxjPShhK2wpLzIsZj0ocyt1KS8yOyhvPXJbMF0pJiZuLnB1c2gobmV3IGdpKG8sYSxzLGMsZikpLChvPXJbMV0pJiZuLnB1c2gobmV3IGdpKG8sYyxzLGwsZikpLChvPXJbMl0pJiZuLnB1c2gobmV3IGdpKG8sYSxmLGMsdSkpLChvPXJbM10pJiZuLnB1c2gobmV3IGdpKG8sYyxmLGwsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LFNpLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxTaS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sTWF0aCxNYXRoLnNxcnQoNSk7dmFyIE9pPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLGk9dC5zbGljZSgwLG4pO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCt0LnNsaWNlKG4rMSldfSxFaT1mdW5jdGlvbih0KXtyZXR1cm4odD1PaShNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxraT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gamkodCl7cmV0dXJuIG5ldyBJaSh0KX1mdW5jdGlvbiBJaSh0KXtpZighKGU9a2kuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTt0aGlzLmZpbGw9ZVsxXXx8IiAiLHRoaXMuYWxpZ249ZVsyXXx8Ij4iLHRoaXMuc2lnbj1lWzNdfHwiLSIsdGhpcy5zeW1ib2w9ZVs0XXx8IiIsdGhpcy56ZXJvPSEhZVs1XSx0aGlzLndpZHRoPWVbNl0mJitlWzZdLHRoaXMuY29tbWE9ISFlWzddLHRoaXMucHJlY2lzaW9uPWVbOF0mJitlWzhdLnNsaWNlKDEpLHRoaXMudHJpbT0hIWVbOV0sdGhpcy50eXBlPWVbMTBdfHwiIn1qaS5wcm90b3R5cGU9SWkucHJvdG90eXBlLElpLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBUaSxSaSxBaSxQaSxEaT1mdW5jdGlvbih0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLGk9MSxyPS0xO2k8bjsrK2kpc3dpdGNoKHRbaV0pe2Nhc2UiLiI6cj1lPWk7YnJlYWs7Y2FzZSIwIjowPT09ciYmKHI9aSksZT1pO2JyZWFrO2RlZmF1bHQ6aWYocj4wKXtpZighK3RbaV0pYnJlYWsgdDtyPTB9fXJldHVybiByPjA/dC5zbGljZSgwLHIpK3Quc2xpY2UoZSsxKTp0fSxNaT1mdW5jdGlvbih0LGUpe3ZhciBuPU9pKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxyPW5bMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9LE5pPXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBNaSgxMDAqdCxlKX0scjpNaSxzOmZ1bmN0aW9uKHQsZSl7dmFyIG49T2kodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXSxvPXItKFRpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxhPWkubGVuZ3RoO3JldHVybiBvPT09YT9pOm8+YT9pK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrT2kodCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0sTGk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEZpPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO1JpPWZ1bmN0aW9uKHQpe3ZhciBlLG4saT10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz8oZT10Lmdyb3VwaW5nLG49dC50aG91c2FuZHMsZnVuY3Rpb24odCxpKXtmb3IodmFyIHI9dC5sZW5ndGgsbz1bXSxhPTAscz1lWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmkmJihzPU1hdGgubWF4KDEsaS1sKSksby5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5pKSk7KXM9ZVthPShhKzEpJWUubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihuKX0pOkxpLHI9dC5jdXJyZW5jeSxvPXQuZGVjaW1hbCxhPXQubnVtZXJhbHM/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSl9fSh0Lm51bWVyYWxzKTpMaSxzPXQucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGwodCl7dmFyIGU9KHQ9amkodCkpLmZpbGwsbj10LmFsaWduLGw9dC5zaWduLHU9dC5zeW1ib2wsYz10Lnplcm8sZj10LndpZHRoLGQ9dC5jb21tYSxoPXQucHJlY2lzaW9uLHA9dC50cmltLG09dC50eXBlOyJuIj09PW0/KGQ9ITAsbT0iZyIpOk5pW21dfHwobnVsbD09aCYmKGg9MTIpLHA9ITAsbT0iZyIpLChjfHwiMCI9PT1lJiYiPSI9PT1uKSYmKGM9ITAsZT0iMCIsbj0iPSIpO3ZhciBiPSIkIj09PXU/clswXToiIyI9PT11JiYvW2JveFhdLy50ZXN0KG0pPyIwIittLnRvTG93ZXJDYXNlKCk6IiIseT0iJCI9PT11P3JbMV06L1slcF0vLnRlc3QobSk/czoiIix2PU5pW21dLGc9L1tkZWZncHJzJV0vLnRlc3QobSk7ZnVuY3Rpb24gXyh0KXt2YXIgcixzLHUsXz1iLHc9eTtpZigiYyI9PT1tKXc9dih0KSt3LHQ9IiI7ZWxzZXt2YXIgeD0odD0rdCk8MDtpZih0PXYoTWF0aC5hYnModCksaCkscCYmKHQ9RGkodCkpLHgmJjA9PSt0JiYoeD0hMSksXz0oeD8iKCI9PT1sP2w6Ii0iOiItIj09PWx8fCIoIj09PWw/IiI6bCkrXyx3PSgicyI9PT1tP0ZpWzgrVGkvM106IiIpK3crKHgmJiIoIj09PWw/IikiOiIiKSxnKWZvcihyPS0xLHM9dC5sZW5ndGg7KytyPHM7KWlmKDQ4Pih1PXQuY2hhckNvZGVBdChyKSl8fHU+NTcpe3c9KDQ2PT09dT9vK3Quc2xpY2UocisxKTp0LnNsaWNlKHIpKSt3LHQ9dC5zbGljZSgwLHIpO2JyZWFrfX1kJiYhYyYmKHQ9aSh0LDEvMCkpO3ZhciBDPV8ubGVuZ3RoK3QubGVuZ3RoK3cubGVuZ3RoLFM9QzxmP25ldyBBcnJheShmLUMrMSkuam9pbihlKToiIjtzd2l0Y2goZCYmYyYmKHQ9aShTK3QsUy5sZW5ndGg/Zi13Lmxlbmd0aDoxLzApLFM9IiIpLG4pe2Nhc2UiPCI6dD1fK3QrdytTO2JyZWFrO2Nhc2UiPSI6dD1fK1MrdCt3O2JyZWFrO2Nhc2UiXiI6dD1TLnNsaWNlKDAsQz1TLmxlbmd0aD4+MSkrXyt0K3crUy5zbGljZShDKTticmVhaztkZWZhdWx0OnQ9UytfK3Qrd31yZXR1cm4gYSh0KX1yZXR1cm4gaD1udWxsPT1oPzY6L1tncHJzXS8udGVzdChtKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGgpKSxfLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LF99cmV0dXJue2Zvcm1hdDpsLGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPWwoKCh0PWppKHQpKS50eXBlPSJmIix0KSksaT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihFaShlKS8zKSkpLHI9TWF0aC5wb3coMTAsLWkpLG89RmlbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihyKnQpK299fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLEFpPVJpLmZvcm1hdCxQaT1SaS5mb3JtYXRQcmVmaXg7dmFyIFZpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6aX07ZnVuY3Rpb24gemkoKXt0aGlzLnJlc2V0KCl9emkucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6aSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe1VpKEJpLHQsdGhpcy50KSxVaSh0aGlzLEJpLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1CaS50OnRoaXMucz1CaS50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBCaT1uZXcgemk7ZnVuY3Rpb24gVWkodCxlLG4pe3ZhciBpPXQucz1lK24scj1pLWU7dC50PWUtKGktcikrKG4tcil9dmFyIEhpPU1hdGguUEkscWk9SGkvMixRaT0yKkhpLEdpPUhpLzE4MCxaaT0oTWF0aCxNYXRoLmF0YW4pLFdpPU1hdGguYXRhbjIsWWk9TWF0aC5jb3MsS2k9KE1hdGgsTWF0aCxNYXRoLE1hdGgsTWF0aCxNYXRoLnNpbiksWGk9KE1hdGgsTWF0aC5zcXJ0KTtmdW5jdGlvbiAkaSh0KXtyZXR1cm4gdD4xP3FpOnQ8LTE/LXFpOk1hdGguYXNpbih0KX1mdW5jdGlvbiBKaSh0LGUpe3JldHVyblt0PkhpP3QtUWk6dDwtSGk/dCtRaTp0LGVdfWZ1bmN0aW9uIHRyKCl7fWZ1bmN0aW9uIGVyKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPVlpKGUpLHI9WWkobiksbz10KGkqcik7cmV0dXJuW28qcipLaShlKSxvKktpKG4pXX19ZnVuY3Rpb24gbnIodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9WGkoZSplK24qbikscj10KGkpLG89S2kociksYT1ZaShyKTtyZXR1cm5bV2koZSpvLGkqYSksJGkoaSYmbipvL2kpXX19ZnVuY3Rpb24gaXIodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBycih0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixpPW4mJm4ubGVuZ3RoO2lmKGkpZm9yKDstLWk+PTA7KWUrPW5baV0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIG9yKHQsZSl7dmFyIG4saSxyLG8sYSxzPW5ldyB1cih0KSxsPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9YXIpO249dS5wb3AoKTspaWYobCYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKHI9ZShuLmRhdGEpKSYmKGE9ci5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShhKSxvPWEtMTtvPj0wOy0tbyl1LnB1c2goaT1uLmNoaWxkcmVuW29dPW5ldyB1cihyW29dKSksaS5wYXJlbnQ9bixpLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKGxyKX1mdW5jdGlvbiBhcih0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzcih0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gbHIodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiB1cih0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1NYXRoLFZpKCksVmkoKSxWaSgpLEppLmludmVydD1KaSxWaSgpLFZpKCksVmkoKSxWaSgpLFZpKCksdHIucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0cixwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxZaSgzMCpHaSksZXIoZnVuY3Rpb24odCl7cmV0dXJuIFhpKDIvKDErdCkpfSkuaW52ZXJ0PW5yKGZ1bmN0aW9uKHQpe3JldHVybiAyKiRpKHQvMil9KSxlcihmdW5jdGlvbih0KXtyZXR1cm4odD0oZT10KT4xPzA6ZTwtMT9IaTpNYXRoLmFjb3MoZSkpJiZ0L0tpKHQpO3ZhciBlfSkuaW52ZXJ0PW5yKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksaXIuaW52ZXJ0PWlyLG5yKFppKSxucigkaSksbnIoZnVuY3Rpb24odCl7cmV0dXJuIDIqWmkodCl9KSx1ci5wcm90b3R5cGU9b3IucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1cixjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihycil9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixpLHIsbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3IoaT0wLHI9bi5sZW5ndGg7aTxyOysraSlhLnB1c2gobltpXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saSxyPXRoaXMsbz1bcl0sYT1bXTtyPW8ucG9wKCk7KWlmKGEucHVzaChyKSxlPXIuY2hpbGRyZW4pZm9yKG49MCxpPWUubGVuZ3RoO248aTsrK24pby5wdXNoKGVbbl0pO2Zvcig7cj1hLnBvcCgpOyl0KHIpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9dGhpcyxyPVtpXTtpPXIucG9wKCk7KWlmKHQoaSksZT1pLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pci5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0rdChlLmRhdGEpfHwwLGk9ZS5jaGlsZHJlbixyPWkmJmkubGVuZ3RoOy0tcj49MDspbis9aVtyXS52YWx1ZTtlLnZhbHVlPW59KX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgbj10LmFuY2VzdG9ycygpLGk9ZS5hbmNlc3RvcnMoKSxyPW51bGw7Zm9yKHQ9bi5wb3AoKSxlPWkucG9wKCk7dD09PWU7KXI9dCx0PW4ucG9wKCksZT1pLnBvcCgpO3JldHVybiByfShlLHQpLGk9W2VdO2UhPT1uOylpLnB1c2goZT1lLnBhcmVudCk7Zm9yKHZhciByPWkubGVuZ3RoO3QhPT1uOylpLnNwbGljZShyLDAsdCksdD10LnBhcmVudDtyZXR1cm4gaX0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBvcih0aGlzKS5lYWNoQmVmb3JlKHNyKX19LEFycmF5O3ZhciBjcj1mdW5jdGlvbih0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLHU9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueTA9bixvLnkxPXIsby54MD1lLG8ueDE9ZSs9by52YWx1ZSp1fTtPYmplY3QuY3JlYXRlKHVyLnByb3RvdHlwZSk7dmFyIGZyPWZ1bmN0aW9uKHQsZSxuLGkscil7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLGw9YS5sZW5ndGgsdT10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrczxsOykobz1hW3NdKS54MD1lLG8ueDE9aSxvLnkwPW4sby55MT1uKz1vLnZhbHVlKnV9LGRyPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBocih0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHMsbCx1LGMsZixkLGgscCxtLGIseT1bXSx2PWUuY2hpbGRyZW4sZz0wLF89MCx3PXYubGVuZ3RoLHg9ZS52YWx1ZTtnPHc7KXtsPXItbix1PW8taTtkb3tjPXZbXysrXS52YWx1ZX13aGlsZSghYyYmXzx3KTtmb3IoZj1kPWMsYj1jKmMqKG09TWF0aC5tYXgodS9sLGwvdSkvKHgqdCkpLHA9TWF0aC5tYXgoZC9iLGIvZik7Xzx3OysrXyl7aWYoYys9cz12W19dLnZhbHVlLHM8ZiYmKGY9cykscz5kJiYoZD1zKSxiPWMqYyptLChoPU1hdGgubWF4KGQvYixiL2YpKT5wKXtjLT1zO2JyZWFrfXA9aH15LnB1c2goYT17dmFsdWU6YyxkaWNlOmw8dSxjaGlsZHJlbjp2LnNsaWNlKGcsXyl9KSxhLmRpY2U/Y3IoYSxuLGkscix4P2krPXUqYy94Om8pOmZyKGEsbixpLHg/bis9bCpjL3g6cixvKSx4LT1jLGc9X31yZXR1cm4geX0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixpLHIsbyl7aHIoZSx0LG4saSxyLG8pfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShkciksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixpLHIsbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09ZSlmb3IodmFyIGEscyxsLHUsYyxmPS0xLGQ9YS5sZW5ndGgsaD10LnZhbHVlOysrZjxkOyl7Zm9yKGw9KHM9YVtmXSkuY2hpbGRyZW4sdT1zLnZhbHVlPTAsYz1sLmxlbmd0aDt1PGM7Kyt1KXMudmFsdWUrPWxbdV0udmFsdWU7cy5kaWNlP2NyKHMsbixpLHIsaSs9KG8taSkqcy52YWx1ZS9oKTpmcihzLG4saSxuKz0oci1uKSpzLnZhbHVlL2gsbyksaC09cy52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PWE9aHIoZSx0LG4saSxyLG8pLGEucmF0aW89ZX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufShkcik7dmFyIHByPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LG1yPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0ocHIpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciBpLHI7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIG87aWYobnVsbCE9aSlvPWksaT1udWxsO2Vsc2UgZG97aT0yKmUoKS0xLG89MiplKCktMSxyPWkqaStvKm99d2hpbGUoIXJ8fHI+MSk7cmV0dXJuIHQrbipvKk1hdGguc3FydCgtMipNYXRoLmxvZyhyKS9yKX19cmV0dXJuIG4uc291cmNlPXQsbn0ocHIpKSxicj0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9bXIuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0ocHIpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxpPTA7aTx0OysraSluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KHByKSkseXI9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1ici5zb3VyY2UoZSkodCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShwciksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0ocHIpLEFycmF5LnByb3RvdHlwZSksdnI9eXIubWFwLGdyPXlyLnNsaWNlLF9yPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sd3I9ZnVuY3Rpb24odCl7cmV0dXJuK3R9LHhyPVswLDFdO2Z1bmN0aW9uIENyKHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9Ol9yKGUpfWZ1bmN0aW9uIFNyKHQsZSxuLGkpe3ZhciByPXRbMF0sbz10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIG88cj8ocj1uKG8sciksYT1pKHMsYSkpOihyPW4ocixvKSxhPWkoYSxzKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIE9yKHQsZSxuLGkpe3ZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9LTE7Zm9yKHRbcl08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxyOylvW3NdPW4odFtzXSx0W3MrMV0pLGFbc109aShlW3NdLGVbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWcodCxlLDEsciktMTtyZXR1cm4gYVtuXShvW25dKGUpKX19dmFyIEVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9UihyLG8sbnVsbD09ZT8xMDplKTtzd2l0Y2goKG49amkobnVsbD09bj8iLGYiOm4pKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKTtyZXR1cm4gbnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihFaShlKS8zKSkpLUVpKE1hdGguYWJzKHQpKSl9KGEscykpfHwobi5wcmVjaXNpb249aSksUGkobixzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4oaT1mdW5jdGlvbih0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLEVpKGUpLUVpKHQpKSsxfShhLE1hdGgubWF4KE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSkpfHwobi5wcmVjaXNpb249aS0oImUiPT09bi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihpPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1FaShNYXRoLmFicyh0KSkpfShhKSl8fChuLnByZWNpc2lvbj1pLTIqKCIlIj09PW4udHlwZSkpfXJldHVybiBBaShuKX07ZnVuY3Rpb24ga3IoKXt2YXIgdD1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixvPXhyLGE9eHIscz1RZSxsPSExO2Z1bmN0aW9uIHUoKXtyZXR1cm4gbj1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj9PcjpTcixpPXI9bnVsbCxjfWZ1bmN0aW9uIGMoZSl7cmV0dXJuKGl8fChpPW4obyxhLGw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dChlPStlLG49K24pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9ZT8wOnQ+PW4/MTppKHQpfX19KHQpOnQscykpKSgrZSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihyfHwocj1uKGEsbyxDcixsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/ZTp0Pj0xP246aSh0KX19fShlKTplKSkpKCt0KX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dnIuY2FsbCh0LHdyKSx1KCkpOm8uc2xpY2UoKX0sYy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1nci5jYWxsKHQpLHUoKSk6YS5zbGljZSgpfSxjLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Z3IuY2FsbCh0KSxzPUdlLHUoKX0sYy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0hIXQsdSgpKTpsfSxjLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsdSgpKTpzfSx1KCl9KENyLEJlKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGU9dCxrcigpLmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKTt2YXIgZX0sZnVuY3Rpb24odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBJKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRXIoZSgpLHQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIGkscj1lKCksbz0wLGE9ci5sZW5ndGgtMSxzPXJbb10sbD1yW2FdO3JldHVybiBsPHMmJihpPXMscz1sLGw9aSxpPW8sbz1hLGE9aSksKGk9VChzLGwsbikpPjA/aT1UKHM9TWF0aC5mbG9vcihzL2kpKmksbD1NYXRoLmNlaWwobC9pKSppLG4pOmk8MCYmKGk9VChzPU1hdGguY2VpbChzKmkpL2ksbD1NYXRoLmZsb29yKGwqaSkvaSxuKSksaT4wPyhyW29dPU1hdGguZmxvb3Iocy9pKSppLHJbYV09TWF0aC5jZWlsKGwvaSkqaSxlKHIpKTppPDAmJihyW29dPU1hdGguY2VpbChzKmkpL2ksclthXT1NYXRoLmZsb29yKGwqaSkvaSxlKHIpKSx0fSx0fSh0KX12YXIganI9bmV3IERhdGUsSXI9bmV3IERhdGU7ZnVuY3Rpb24gVHIodCxlLG4saSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX1yZXR1cm4gci5mbG9vcj1yLHIuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LHIucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPXIuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LHIub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LHIucmFuZ2U9ZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9W107aWYobj1yLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48aSYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxpKTtyZXR1cm4gc30sci5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIFRyKGZ1bmN0aW9uKGUpe2lmKGU+PWUpZm9yKDt0KGUpLCFuKGUpOyllLnNldFRpbWUoZS0xKX0sZnVuY3Rpb24odCxpKXtpZih0Pj10KWlmKGk8MClmb3IoOysraTw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0taT49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KX0sbiYmKHIuY291bnQ9ZnVuY3Rpb24oZSxpKXtyZXR1cm4ganIuc2V0VGltZSgrZSksSXIuc2V0VGltZSgraSksdChqciksdChJciksTWF0aC5mbG9vcihuKGpyLElyKSl9LHIuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKGUpe3JldHVybiBpKGUpJXQ9PTB9OmZ1bmN0aW9uKGUpe3JldHVybiByLmNvdW50KDAsZSkldD09MH0pOnI6bnVsbH0pLHJ9dmFyIFJyPVRyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSk7UnIuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9UcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSxmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSxmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KTpScjpudWxsfTt2YXIgQXI9NmU0LFByPTYwNDhlNSxEcj0oVHIoZnVuY3Rpb24odCl7dC5zZXRUaW1lKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzFlMyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pLFRyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvQXIpKkFyKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpBcil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvQXJ9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLFRyKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpBciUzNmU1O2U8MCYmKGUrPTM2ZTUpLHQuc2V0VGltZSgzNmU1Kk1hdGguZmxvb3IoKCt0LWUpLzM2ZTUpK2UpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxUcihmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpBcikvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIE1yKHQpe3JldHVybiBUcihmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKkFyKS9Qcn0pfXZhciBOcj1NcigwKSxMcj1NcigxKSxGcj0oTXIoMiksTXIoMyksTXIoNCkpLFZyPShNcig1KSxNcig2KSxUcihmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxUcihmdW5jdGlvbih0KXt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pKTtWci5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1RyKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pOm51bGx9O3ZhciB6cj1WcixCcj0oVHIoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqQXIpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0FyfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSxUcihmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSxUcihmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7ZnVuY3Rpb24gVXIodCl7cmV0dXJuIFRyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvUHJ9KX12YXIgSHI9VXIoMCkscXI9VXIoMSksUXI9KFVyKDIpLFVyKDMpLFVyKDQpKSxHcj0oVXIoNSksVXIoNiksVHIoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSksVHIoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7R3IuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9UcihmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KTpudWxsfTt2YXIgWnI9R3I7ZnVuY3Rpb24gV3IodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIFlyKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIEtyKHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fXZhciBYciwkcixKcix0bz17Ii0iOiIiLF86IiAiLDA6IjAifSxlbz0vXlxzKlxkKy8sbm89L14lLyxpbz0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gcm8odCxlLG4pe3ZhciBpPXQ8MD8iLSI6IiIscj0oaT8tdDp0KSsiIixvPXIubGVuZ3RoO3JldHVybiBpKyhvPG4/bmV3IEFycmF5KG4tbysxKS5qb2luKGUpK3I6cil9ZnVuY3Rpb24gb28odCl7cmV0dXJuIHQucmVwbGFjZShpbywiXFwkJiIpfWZ1bmN0aW9uIGFvKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChvbykuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHNvKHQpe2Zvcih2YXIgZT17fSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIGxvKHQsZSxuKXt2YXIgaT1lby5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC53PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVvKHQsZSxuKXt2YXIgaT1lby5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT8odC51PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNvKHQsZSxuKXt2YXIgaT1lby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5VPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZvKHQsZSxuKXt2YXIgaT1lby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5WPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhvKHQsZSxuKXt2YXIgaT1lby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5XPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBvKHQsZSxuKXt2YXIgaT1lby5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gaT8odC55PStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG1vKHQsZSxuKXt2YXIgaT1lby5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYm8odCxlLG4pe3ZhciBpPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5aPWlbMV0/MDotKGlbMl0rKGlbM118fCIwMCIpKSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5byh0LGUsbil7dmFyIGk9ZW8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQubT1pWzBdLTEsbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdm8odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ28odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lm09MCx0LmQ9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gX28odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lkg9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd28odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lk09K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geG8odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0LlM9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ28odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiBpPyh0Lkw9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU28odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiBpPyh0Lkw9TWF0aC5mbG9vcihpWzBdLzFlMyksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT28odCxlLG4pe3ZhciBpPW5vLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiBpP24raVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gRW8odCxlLG4pe3ZhciBpPWVvLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrbyh0LGUsbil7dmFyIGk9ZW8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5RPTFlMyoraVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqbyh0LGUpe3JldHVybiBybyh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIElvKHQsZSl7cmV0dXJuIHJvKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIFRvKHQsZSl7cmV0dXJuIHJvKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBSbyh0LGUpe3JldHVybiBybygxK0RyLmNvdW50KHpyKHQpLHQpLGUsMyl9ZnVuY3Rpb24gQW8odCxlKXtyZXR1cm4gcm8odC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFBvKHQsZSl7cmV0dXJuIEFvKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gRG8odCxlKXtyZXR1cm4gcm8odC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBNbyh0LGUpe3JldHVybiBybyh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIE5vKHQsZSl7cmV0dXJuIHJvKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gTG8odCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEZvKHQsZSl7cmV0dXJuIHJvKE5yLmNvdW50KHpyKHQpLHQpLGUsMil9ZnVuY3Rpb24gVm8odCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP0ZyKHQpOkZyLmNlaWwodCkscm8oRnIuY291bnQoenIodCksdCkrKDQ9PT16cih0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiB6byh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBCbyh0LGUpe3JldHVybiBybyhMci5jb3VudCh6cih0KSx0KSxlLDIpfWZ1bmN0aW9uIFVvKHQsZSl7cmV0dXJuIHJvKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBIbyh0LGUpe3JldHVybiBybyh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gcW8odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStybyhlLzYwfDAsIjAiLDIpK3JvKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIFFvKHQsZSl7cmV0dXJuIHJvKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gR28odCxlKXtyZXR1cm4gcm8odC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gWm8odCxlKXtyZXR1cm4gcm8odC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIFdvKHQsZSl7cmV0dXJuIHJvKDErQnIuY291bnQoWnIodCksdCksZSwzKX1mdW5jdGlvbiBZbyh0LGUpe3JldHVybiBybyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gS28odCxlKXtyZXR1cm4gWW8odCxlKSsiMDAwIn1mdW5jdGlvbiBYbyh0LGUpe3JldHVybiBybyh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uICRvKHQsZSl7cmV0dXJuIHJvKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gSm8odCxlKXtyZXR1cm4gcm8odC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiB0YSh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gZWEodCxlKXtyZXR1cm4gcm8oSHIuY291bnQoWnIodCksdCksZSwyKX1mdW5jdGlvbiBuYSh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/UXIodCk6UXIuY2VpbCh0KSxybyhRci5jb3VudChacih0KSx0KSsoND09PVpyKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIGlhKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIHJhKHQsZSl7cmV0dXJuIHJvKHFyLmNvdW50KFpyKHQpLHQpLGUsMil9ZnVuY3Rpb24gb2EodCxlKXtyZXR1cm4gcm8odC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGFhKHQsZSl7cmV0dXJuIHJvKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBzYSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gbGEoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gdWEodCl7cmV0dXJuK3R9ZnVuY3Rpb24gY2EodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX0hZnVuY3Rpb24odCl7WHI9ZnVuY3Rpb24oZSl7dmFyIG49dC5kYXRlVGltZSxpPXQuZGF0ZSxyPXQudGltZSxvPXQucGVyaW9kcyxhPXQuZGF5cyxzPXQuc2hvcnREYXlzLGw9dC5tb250aHMsdT10LnNob3J0TW9udGhzLGM9YW8obyksZj1zbyhvKSxkPWFvKGEpLGg9c28oYSkscD1hbyhzKSxtPXNvKHMpLGI9YW8obCkseT1zbyhsKSx2PWFvKHUpLGc9c28odSksXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBsW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOmpvLGU6am8sZjpQbyxIOklvLEk6VG8sajpSbyxMOkFvLG06RG8sTTpNbyxwOmZ1bmN0aW9uKHQpe3JldHVybiBvWysodC5nZXRIb3VycygpPj0xMildfSxROnVhLHM6Y2EsUzpObyx1OkxvLFU6Rm8sVjpWbyx3OnpvLFc6Qm8seDpudWxsLFg6bnVsbCx5OlVvLFk6SG8sWjpxbywiJSI6bGF9LHc9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpRbyxlOlFvLGY6S28sSDpHbyxJOlpvLGo6V28sTDpZbyxtOlhvLE06JG8scDpmdW5jdGlvbih0KXtyZXR1cm4gb1srKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0sUTp1YSxzOmNhLFM6Sm8sdTp0YSxVOmVhLFY6bmEsdzppYSxXOnJhLHg6bnVsbCxYOm51bGwseTpvYSxZOmFhLFo6c2EsIiUiOmxhfSx4PXthOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1tW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC53PWhbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUsbil7dmFyIGk9di5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lm09Z1tpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1iLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQubT15W2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBPKHQsbixlLGkpfSxkOnZvLGU6dm8sZjpTbyxIOl9vLEk6X28sajpnbyxMOkNvLG06eW8sTTp3byxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1jLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQucD1mW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LFE6RW8sczprbyxTOnhvLHU6dW8sVTpjbyxWOmZvLHc6bG8sVzpobyx4OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTyh0LGksZSxuKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIE8odCxyLGUsbil9LHk6bW8sWTpwbyxaOmJvLCIlIjpPb307ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaSxyLG8sYT1bXSxzPS0xLGw9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihhLnB1c2godC5zbGljZShsLHMpKSxudWxsIT0ocj10b1tpPXQuY2hhckF0KCsrcyldKT9pPXQuY2hhckF0KCsrcyk6cj0iZSI9PT1pPyIgIjoiMCIsKG89ZVtpXSkmJihpPW8obixyKSksYS5wdXNoKGkpLGw9cysxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UobCxzKSksYS5qb2luKCIiKX19ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaSxyLG89S3IoMTkwMCk7aWYoTyhvLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG8pcmV0dXJuIG5ldyBEYXRlKG8uUSk7aWYoInAiaW4gbyYmKG8uSD1vLkglMTIrMTIqby5wKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8oaT0ocj0oaT1ZcihLcihvLnkpKSkuZ2V0VVRDRGF5KCkpPjR8fDA9PT1yP3FyLmNlaWwoaSk6cXIoaSksaT1Cci5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldFVUQ0Z1bGxZZWFyKCksby5tPWkuZ2V0VVRDTW9udGgoKSxvLmQ9aS5nZXRVVENEYXRlKCkrKG8udys2KSU3KTooaT0ocj0oaT1lKEtyKG8ueSkpKS5nZXREYXkoKSk+NHx8MD09PXI/THIuY2VpbChpKTpMcihpKSxpPURyLm9mZnNldChpLDcqKG8uVi0xKSksby55PWkuZ2V0RnVsbFllYXIoKSxvLm09aS5nZXRNb250aCgpLG8uZD1pLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLHI9IloiaW4gbz9ZcihLcihvLnkpKS5nZXRVVENEYXkoKTplKEtyKG8ueSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0ocis1KSU3Om8udys3Km8uVS0ocis2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAsWXIobykpOmUobyl9fWZ1bmN0aW9uIE8odCxlLG4saSl7Zm9yKHZhciByLG8sYT0wLHM9ZS5sZW5ndGgsbD1uLmxlbmd0aDthPHM7KXtpZihpPj1sKXJldHVybi0xO2lmKDM3PT09KHI9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihyPWUuY2hhckF0KGErKyksIShvPXhbciBpbiB0bz9lLmNoYXJBdChhKyspOnJdKXx8KGk9byh0LG4saSkpPDApcmV0dXJuLTF9ZWxzZSBpZihyIT1uLmNoYXJDb2RlQXQoaSsrKSlyZXR1cm4tMX1yZXR1cm4gaX1yZXR1cm4gXy54PUMoaSxfKSxfLlg9QyhyLF8pLF8uYz1DKG4sXyksdy54PUMoaSx3KSx3Llg9QyhyLHcpLHcuYz1DKG4sdykse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1DKHQrPSIiLF8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVModCs9IiIsV3IpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1DKHQrPSIiLHcpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVModCxZcik7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSgpLCRyPVhyLnV0Y0Zvcm1hdCxKcj1Yci51dGNQYXJzZX0oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KSxEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ3x8JHIoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLCtuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIil8fEpyKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTt2YXIgZmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxpPTA7aTxlOyluW2ldPSIjIit0LnNsaWNlKDYqaSw2KisraSk7cmV0dXJuIG59LGRhPShmYSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksZmEoIjdmYzk3ZmJlYWVkNGZkYzA4NmZmZmY5OTM4NmNiMGYwMDI3ZmJmNWIxNzY2NjY2NiIpLGZhKCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKSxmYSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4IiksZmEoImZiYjRhZWIzY2RlM2NjZWJjNWRlY2JlNGZlZDlhNmZmZmZjY2U1ZDhiZGZkZGFlY2YyZjJmMiIpLGZhKCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKSxmYSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5IiksZmEoIjY2YzJhNWZjOGQ2MjhkYTBjYmU3OGFjM2E2ZDg1NGZmZDkyZmU1YzQ5NGIzYjNiMyIpLGZhKCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKSxmdW5jdGlvbih0KXtyZXR1cm4gemUodFt0Lmxlbmd0aC0xXSl9KTtmdW5jdGlvbiBoYSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX1kYShuZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoZmEpKSxkYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoZmEpKSxvbihrZSgzMDAsLjUsMCksa2UoLTI0MCwuNSwxKSksb24oa2UoLTEwMCwuNzUsLjM1KSxrZSg4MCwxLjUsLjgpKSxvbihrZSgyNjAsLjc1LC4zNSksa2UoODAsMS41LC44KSksa2UoKSxYdCgpLE1hdGgsTWF0aCxoYShmYSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLGhhKGZhKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksaGEoZmEoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxoYShmYSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO3ZhciBwYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG1hPU1hdGguYWJzLGJhPU1hdGguYXRhbjIseWE9TWF0aC5jb3MsdmE9TWF0aC5tYXgsZ2E9TWF0aC5taW4sX2E9TWF0aC5zaW4sd2E9TWF0aC5zcXJ0LHhhPTFlLTEyLENhPU1hdGguUEksU2E9Q2EvMixPYT0yKkNhO2Z1bmN0aW9uIEVhKHQpe3JldHVybiB0Pj0xP1NhOnQ8PS0xPy1TYTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24ga2EodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gamEodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gSWEodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBUYSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBSYSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBBYSh0LGUsbixpLHIsbyxhKXt2YXIgcz10LW4sbD1lLWksdT0oYT9vOi1vKS93YShzKnMrbCpsKSxjPXUqbCxmPS11KnMsZD10K2MsaD1lK2YscD1uK2MsbT1pK2YsYj0oZCtwKS8yLHk9KGgrbSkvMix2PXAtZCxnPW0taCxfPXYqditnKmcsdz1yLW8seD1kKm0tcCpoLEM9KGc8MD8tMToxKSp3YSh2YSgwLHcqdypfLXgqeCkpLFM9KHgqZy12KkMpL18sTz0oLXgqdi1nKkMpL18sRT0oeCpnK3YqQykvXyxrPSgteCp2K2cqQykvXyxqPVMtYixJPU8teSxUPUUtYixSPWsteTtyZXR1cm4gaipqK0kqST5UKlQrUipSJiYoUz1FLE89aykse2N4OlMsY3k6Tyx4MDE6LWMseTAxOi1mLHgxMTpTKihyL3ctMSkseTExOk8qKHIvdy0xKX19dmFyIFBhPWZ1bmN0aW9uKCl7dmFyIHQ9a2EsZT1qYSxuPXBhKDApLGk9bnVsbCxyPUlhLG89VGEsYT1SYSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBsLHUsYyxmPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLVNhLHA9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktU2EsbT1tYShwLWgpLGI9cD5oO2lmKHN8fChzPWw9Sm4oKSksZDxmJiYodT1kLGQ9ZixmPXUpLGQ+eGEpaWYobT5PYS14YSlzLm1vdmVUbyhkKnlhKGgpLGQqX2EoaCkpLHMuYXJjKDAsMCxkLGgscCwhYiksZj54YSYmKHMubW92ZVRvKGYqeWEocCksZipfYShwKSkscy5hcmMoMCwwLGYscCxoLGIpKTtlbHNle3ZhciB5LHYsZz1oLF89cCx3PWgseD1wLEM9bSxTPW0sTz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9Tz54YSYmKGk/K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOndhKGYqZitkKmQpKSxrPWdhKG1hKGQtZikvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGo9ayxJPWs7aWYoRT54YSl7dmFyIFQ9RWEoRS9mKl9hKE8pKSxSPUVhKEUvZCpfYShPKSk7KEMtPTIqVCk+eGE/KHcrPVQqPWI/MTotMSx4LT1UKTooQz0wLHc9eD0oaCtwKS8yKSwoUy09MipSKT54YT8oZys9Uio9Yj8xOi0xLF8tPVIpOihTPTAsZz1fPShoK3ApLzIpfXZhciBBPWQqeWEoZyksUD1kKl9hKGcpLEQ9Zip5YSh4KSxNPWYqX2EoeCk7aWYoaz54YSl7dmFyIE49ZCp5YShfKSxMPWQqX2EoXyksRj1mKnlhKHcpLFY9ZipfYSh3KTtpZihtPENhKXt2YXIgej1DPnhhP2Z1bmN0aW9uKHQsZSxuLGkscixvLGEscyl7dmFyIGw9Ri1BLHU9Vi1QLGM9YS1OLGY9cy1MLGQ9KGMqKFAtTCktZiooQS1OKSkvKGYqbC1jKnUpO3JldHVybltBK2QqbCxQK2QqdV19KDAsMCwwLDAsMCwwLEQsTSk6W0QsTV0sQj1BLXpbMF0sVT1QLXpbMV0sSD1OLXpbMF0scT1MLXpbMV0sUT0xL19hKCgoYz0oQipIK1UqcSkvKHdhKEIqQitVKlUpKndhKEgqSCtxKnEpKSk+MT8wOmM8LTE/Q2E6TWF0aC5hY29zKGMpKS8yKSxHPXdhKHpbMF0qelswXSt6WzFdKnpbMV0pO2o9Z2EoaywoZi1HKS8oUS0xKSksST1nYShrLChkLUcpLyhRKzEpKX19Uz54YT9JPnhhPyh5PUFhKEYsVixBLFAsZCxJLGIpLHY9QWEoTixMLEQsTSxkLEksYikscy5tb3ZlVG8oeS5jeCt5LngwMSx5LmN5K3kueTAxKSxJPGs/cy5hcmMoeS5jeCx5LmN5LEksYmEoeS55MDEseS54MDEpLGJhKHYueTAxLHYueDAxKSwhYik6KHMuYXJjKHkuY3gseS5jeSxJLGJhKHkueTAxLHkueDAxKSxiYSh5LnkxMSx5LngxMSksIWIpLHMuYXJjKDAsMCxkLGJhKHkuY3kreS55MTEseS5jeCt5LngxMSksYmEodi5jeSt2LnkxMSx2LmN4K3YueDExKSwhYikscy5hcmModi5jeCx2LmN5LEksYmEodi55MTEsdi54MTEpLGJhKHYueTAxLHYueDAxKSwhYikpKToocy5tb3ZlVG8oQSxQKSxzLmFyYygwLDAsZCxnLF8sIWIpKTpzLm1vdmVUbyhBLFApLGY+eGEmJkM+eGE/aj54YT8oeT1BYShELE0sTixMLGYsLWosYiksdj1BYShBLFAsRixWLGYsLWosYikscy5saW5lVG8oeS5jeCt5LngwMSx5LmN5K3kueTAxKSxqPGs/cy5hcmMoeS5jeCx5LmN5LGosYmEoeS55MDEseS54MDEpLGJhKHYueTAxLHYueDAxKSwhYik6KHMuYXJjKHkuY3gseS5jeSxqLGJhKHkueTAxLHkueDAxKSxiYSh5LnkxMSx5LngxMSksIWIpLHMuYXJjKDAsMCxmLGJhKHkuY3kreS55MTEseS5jeCt5LngxMSksYmEodi5jeSt2LnkxMSx2LmN4K3YueDExKSxiKSxzLmFyYyh2LmN4LHYuY3ksaixiYSh2LnkxMSx2LngxMSksYmEodi55MDEsdi54MDEpLCFiKSkpOnMuYXJjKDAsMCxmLHgsdyxiKTpzLmxpbmVUbyhELE0pfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLGwpcmV0dXJuIHM9bnVsbCxsKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGk9KCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUNhLzI7cmV0dXJuW3lhKGkpKm4sX2EoaSkqbl19LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpwYSgrZSksbCk6dH0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBhKCt0KSxsKTplfSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBhKCt0KSxsKTpufSxsLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwYSgrdCksbCk6aX0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGEoK3QpLGwpOnJ9LGwuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwYSgrdCksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBhKCt0KSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsbCk6c30sbH07ZnVuY3Rpb24gRGEodCl7dGhpcy5fY29udGV4dD10fURhLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBNYT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhKHQpfTtmdW5jdGlvbiBOYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBMYSh0KXtyZXR1cm4gdFsxXX12YXIgRmE9ZnVuY3Rpb24oKXt2YXIgdD1OYSxlPUxhLG49cGEoITApLGk9bnVsbCxyPU1hLG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciBzLGwsdSxjPWEubGVuZ3RoLGY9ITE7Zm9yKG51bGw9PWkmJihvPXIodT1KbigpKSkscz0wO3M8PWM7KytzKSEoczxjJiZuKGw9YVtzXSxzLGEpKT09PWYmJigoZj0hZik/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksZiYmby5wb2ludCgrdChsLHMsYSksK2UobCxzLGEpKTtpZih1KXJldHVybiBvPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cGEoK2UpLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBhKCt0KSxhKTplfSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwYSghIXQpLGEpOm59LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxudWxsIT1pJiYobz1yKGkpKSxhKTpyfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/aT1vPW51bGw6bz1yKGk9dCksYSk6aX0sYX0sVmE9ZnVuY3Rpb24oKXt2YXIgdD1OYSxlPW51bGwsbj1wYSgwKSxpPUxhLHI9cGEoITApLG89bnVsbCxhPU1hLHM9bnVsbDtmdW5jdGlvbiBsKGwpe3ZhciB1LGMsZixkLGgscD1sLmxlbmd0aCxtPSExLGI9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApO2ZvcihudWxsPT1vJiYocz1hKGg9Sm4oKSkpLHU9MDt1PD1wOysrdSl7aWYoISh1PHAmJnIoZD1sW3VdLHUsbCkpPT09bSlpZihtPSFtKWM9dSxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxmPXUtMTtmPj1jOy0tZilzLnBvaW50KGJbZl0seVtmXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9bSYmKGJbdV09K3QoZCx1LGwpLHlbdV09K24oZCx1LGwpLHMucG9pbnQoZT8rZShkLHUsbCk6Ylt1XSxpPytpKGQsdSxsKTp5W3VdKSl9aWYoaClyZXR1cm4gcz1udWxsLGgrIiJ8fG51bGx9ZnVuY3Rpb24gdSgpe3JldHVybiBGYSgpLmRlZmluZWQocikuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246cGEoK24pLGU9bnVsbCxsKTp0fSxsLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cGEoK2UpLGwpOnR9LGwueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGEoK3QpLGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBhKCt0KSxpPW51bGwsbCk6bn0sbC55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBhKCt0KSxsKTpufSxsLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnBhKCt0KSxsKTppfSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiB1KCkueCh0KS55KG4pfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiB1KCkueCh0KS55KGkpfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiB1KCkueChlKS55KG4pfSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwYSghIXQpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1zPW51bGw6cz1hKG89dCksbCk6b30sbH07ZnVuY3Rpb24gemEodCl7dGhpcy5fY3VydmU9dH16YS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19LEFycmF5LE1hdGguc3FydCgxLzMpLE1hdGguc2luKENhLzEwKSxNYXRoLnNpbig3KkNhLzEwKTt2YXIgQmE9KE1hdGguc2luKE9hLzEwKSxNYXRoLmNvcyhPYS8xMCksTWF0aC5zcXJ0KDMpLE1hdGguc3FydCgzKSxNYXRoLnNxcnQoMTIpLGZ1bmN0aW9uKCl7fSk7ZnVuY3Rpb24gVWEodCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIEhhKHQpe3RoaXMuX2NvbnRleHQ9dH1IYS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOlVhKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OlVhKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgcWE9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIYSh0KX07ZnVuY3Rpb24gUWEodCxlKXt0aGlzLl9iYXNpcz1uZXcgSGEodCksdGhpcy5fYmV0YT1lfWZ1bmN0aW9uIEdhKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gWmEodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWZ1bmN0aW9uIFdhKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBZYSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24gS2EodCxlLG4pe3ZhciBpPXQuX3gxLHI9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPnhhKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtpPShpKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxyPShyKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT54YSl7dmFyIHU9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obyp1K3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvYyxhPShhKnUrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9jfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHIsbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBYYSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWZ1bmN0aW9uICRhKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZnVuY3Rpb24gSmEodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1mdW5jdGlvbiB0cyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gZXModCxlLG4pe3ZhciBpPXQuX3gxLXQuX3gwLHI9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKGl8fHI8MCYmLTApLGE9KG4tdC5feTEpLyhyfHxpPDAmJi0wKSxzPShvKnIrYSppKS8oaStyKTtyZXR1cm4odHMobykrdHMoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBucyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gaXModCxlLG4pe3ZhciBpPXQuX3gwLHI9dC5feDEsbz10Ll95MSxhPShyLWkpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkrYSx0Ll95MCthKmUsci1hLG8tYSpuLHIsbyl9ZnVuY3Rpb24gcnModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG9zKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhcygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIHNzKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gbHModCxlKXt2YXIgbj1lLGk9ZS5SLHI9bi5VO3I/ci5MPT09bj9yLkw9aTpyLlI9aTp0Ll89aSxpLlU9cixuLlU9aSxuLlI9aS5MLG4uUiYmKG4uUi5VPW4pLGkuTD1ufWZ1bmN0aW9uIHVzKHQsZSl7dmFyIG49ZSxpPWUuTCxyPW4uVTtyP3IuTD09PW4/ci5MPWk6ci5SPWk6dC5fPWksaS5VPXIsbi5VPWksbi5MPWkuUixuLkwmJihuLkwuVT1uKSxpLlI9bn1mdW5jdGlvbiBjcyh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9UWEucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgaSxyPXRbMF0sbz1lWzBdLGE9dFtuXS1yLHM9ZVtuXS1vLGw9LTE7KytsPD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKHIrKGk9bC9uKSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKG8raSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IEhhKHQpOm5ldyBRYSh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpLFphLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpHYSh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6R2EodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IFphKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLFdhLnByb3RvdHlwZT17YXJlYVN0YXJ0OkJhLGFyZWFFbmQ6QmEsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpHYSh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgV2EodCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCksWWEucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6R2EodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IFlhKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLFhhLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6S2EodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFhhKHQsZSk6bmV3IFphKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSksJGEucHJvdG90eXBlPXthcmVhU3RhcnQ6QmEsYXJlYUVuZDpCYSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxpPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4raSppLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpLYSh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgJGEodCxlKTpuZXcgV2EodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KSxKYS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQsaT10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK2kqaSx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6S2EodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IEphKHQsZSk6bmV3IFlhKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSkscnMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmlzKHRoaXMsdGhpcy5fdDAsbnModGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLGlzKHRoaXMsbnModGhpcyxuPWVzKHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDppcyh0aGlzLHRoaXMuX3QwLG49ZXModGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwoKGZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQ9bmV3IG9zKHQpfSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocnMucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtycy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LG9zLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxpLG4sbyxyKX19LGFzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YXMsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1jcyh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KGk9bi5VKS5MPyhyPWkuUikmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uUiYmKGxzKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLHVzKHRoaXMsaSkpOihyPWkuTCkmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uTCYmKHVzKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLGxzKHRoaXMsaSkpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLGkscj10LlUsbz10LkwsYT10LlI7aWYobj1vP2E/Y3MoYSk6bzphLHI/ci5MPT09dD9yLkw9bjpyLlI9bjp0aGlzLl89bixvJiZhPyhpPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhyPW4uVSxuLlU9dC5VLHIuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1yLHI9bix0PW4uUikpOihpPXQuQyx0PW4pLHQmJih0LlU9ciksIWkpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PXIuTCl7aWYoKGU9ci5SKS5DJiYoZS5DPSExLHIuQz0hMCxscyh0aGlzLHIpLGU9ci5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLHVzKHRoaXMsZSksZT1yLlIpLGUuQz1yLkMsci5DPWUuUi5DPSExLGxzKHRoaXMsciksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9ci5MKS5DJiYoZS5DPSExLHIuQz0hMCx1cyh0aGlzLHIpLGU9ci5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLGxzKHRoaXMsZSksZT1yLkwpLGUuQz1yLkMsci5DPWUuTC5DPSExLHVzKHRoaXMsciksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9cixyPXIuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgZnM9YXM7ZnVuY3Rpb24gZHModCxlLG4saSl7dmFyIHI9W251bGwsbnVsbF0sbz1Ecy5wdXNoKHIpLTE7cmV0dXJuIHIubGVmdD10LHIucmlnaHQ9ZSxuJiZwcyhyLHQsZSxuKSxpJiZwcyhyLGUsdCxpKSxBc1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxBc1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIGhzKHQsZSxuKXt2YXIgaT1bZSxuXTtyZXR1cm4gaS5sZWZ0PXQsaX1mdW5jdGlvbiBwcyh0LGUsbixpKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1pOnRbMF09aToodFswXT1pLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gbXModCxlLG4saSxyKXt2YXIgbyxhPXRbMF0scz10WzFdLGw9YVswXSx1PWFbMV0sYz0wLGY9MSxkPXNbMF0tbCxoPXNbMV0tdTtpZihvPWUtbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihkPjApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihkPjApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1pZihvPW4tdSxofHwhKG8+MCkpe2lmKG8vPWgsaDwwKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihoPjApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1pZihvPXItdSxofHwhKG88MCkpe2lmKG8vPWgsaDwwKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihoPjApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1yZXR1cm4hKGM+MHx8ZjwxKXx8KGM+MCYmKHRbMF09W2wrYypkLHUrYypoXSksZjwxJiYodFsxXT1bbCtmKmQsdStmKmhdKSwhMCl9fX19fWZ1bmN0aW9uIGJzKHQsZSxuLGkscil7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsbD10WzBdLHU9dC5sZWZ0LGM9dC5yaWdodCxmPXVbMF0sZD11WzFdLGg9Y1swXSxwPWNbMV0sbT0oZitoKS8yLGI9KGQrcCkvMjtpZihwPT09ZCl7aWYobTxlfHxtPj1pKXJldHVybjtpZihmPmgpe2lmKGwpe2lmKGxbMV0+PXIpcmV0dXJufWVsc2UgbD1bbSxuXTtvPVttLHJdfWVsc2V7aWYobCl7aWYobFsxXTxuKXJldHVybn1lbHNlIGw9W20scl07bz1bbSxuXX19ZWxzZSBpZihzPWItKGE9KGYtaCkvKHAtZCkpKm0sYTwtMXx8YT4xKWlmKGY+aCl7aWYobCl7aWYobFsxXT49cilyZXR1cm59ZWxzZSBsPVsobi1zKS9hLG5dO289WyhyLXMpL2Escl19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bKHItcykvYSxyXTtvPVsobi1zKS9hLG5dfWVsc2UgaWYoZDxwKXtpZihsKXtpZihsWzBdPj1pKXJldHVybn1lbHNlIGw9W2UsYSplK3NdO289W2ksYSppK3NdfWVsc2V7aWYobCl7aWYobFswXTxlKXJldHVybn1lbHNlIGw9W2ksYSppK3NdO289W2UsYSplK3NdfXJldHVybiB0WzBdPWwsdFsxXT1vLCEwfWZ1bmN0aW9uIHlzKHQsZSl7dmFyIG49dC5zaXRlLGk9ZS5sZWZ0LHI9ZS5yaWdodDtyZXR1cm4gbj09PXImJihyPWksaT1uKSxyP01hdGguYXRhbjIoclsxXS1pWzFdLHJbMF0taVswXSk6KG49PT1pPyhpPWVbMV0scj1lWzBdKTooaT1lWzBdLHI9ZVsxXSksTWF0aC5hdGFuMihpWzBdLXJbMF0sclsxXS1pWzFdKSl9ZnVuY3Rpb24gdnModCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIGdzKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgX3Msd3M9W107ZnVuY3Rpb24geHModCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciBpPWUuc2l0ZSxyPXQuc2l0ZSxvPW4uc2l0ZTtpZihpIT09byl7dmFyIGE9clswXSxzPXJbMV0sbD1pWzBdLWEsdT1pWzFdLXMsYz1vWzBdLWEsZj1vWzFdLXMsZD0yKihsKmYtdSpjKTtpZighKGQ+PS1Ocykpe3ZhciBoPWwqbCt1KnUscD1jKmMrZipmLG09KGYqaC11KnApL2QsYj0obCpwLWMqaCkvZCx5PXdzLnBvcCgpfHxuZXcgZnVuY3Rpb24oKXtzcyh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9O3kuYXJjPXQseS5zaXRlPXIseS54PW0rYSx5Lnk9KHkuY3k9YitzKStNYXRoLnNxcnQobSptK2IqYiksdC5jaXJjbGU9eTtmb3IodmFyIHY9bnVsbCxnPVBzLl87ZzspaWYoeS55PGcueXx8eS55PT09Zy55JiZ5Lng8PWcueCl7aWYoIWcuTCl7dj1nLlA7YnJlYWt9Zz1nLkx9ZWxzZXtpZighZy5SKXt2PWc7YnJlYWt9Zz1nLlJ9UHMuaW5zZXJ0KHYseSksdnx8KF9zPXkpfX19fWZ1bmN0aW9uIENzKHQpe3ZhciBlPXQuY2lyY2xlO2UmJihlLlB8fChfcz1lLk4pLFBzLnJlbW92ZShlKSx3cy5wdXNoKGUpLHNzKGUpLHQuY2lyY2xlPW51bGwpfXZhciBTcz1bXTtmdW5jdGlvbiBPcyh0KXt2YXIgZT1Tcy5wb3AoKXx8bmV3IGZ1bmN0aW9uKCl7c3ModGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBFcyh0KXtDcyh0KSxScy5yZW1vdmUodCksU3MucHVzaCh0KSxzcyh0KX1mdW5jdGlvbiBrcyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxpPWUuY3kscj1bbixpXSxvPXQuUCxhPXQuTixzPVt0XTtFcyh0KTtmb3IodmFyIGw9bztsLmNpcmNsZSYmTWF0aC5hYnMobi1sLmNpcmNsZS54KTxNcyYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8TXM7KW89bC5QLHMudW5zaGlmdChsKSxFcyhsKSxsPW87cy51bnNoaWZ0KGwpLENzKGwpO2Zvcih2YXIgdT1hO3UuY2lyY2xlJiZNYXRoLmFicyhuLXUuY2lyY2xlLngpPE1zJiZNYXRoLmFicyhpLXUuY2lyY2xlLmN5KTxNczspYT11Lk4scy5wdXNoKHUpLEVzKHUpLHU9YTtzLnB1c2godSksQ3ModSk7dmFyIGMsZj1zLmxlbmd0aDtmb3IoYz0xO2M8ZjsrK2MpcHMoKHU9c1tjXSkuZWRnZSwobD1zW2MtMV0pLnNpdGUsdS5zaXRlLHIpOyh1PXNbZi0xXSkuZWRnZT1kcygobD1zWzBdKS5zaXRlLHUuc2l0ZSxudWxsLHIpLHhzKGwpLHhzKHUpfWZ1bmN0aW9uIGpzKHQpe2Zvcih2YXIgZSxuLGkscixvPXRbMF0sYT10WzFdLHM9UnMuXztzOylpZigoaT1JcyhzLGEpLW8pPk1zKXM9cy5MO2Vsc2V7aWYoISgocj1vLVRzKHMsYSkpPk1zKSl7aT4tTXM/KGU9cy5QLG49cyk6cj4tTXM/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXtBc1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciBsPU9zKHQpO2lmKFJzLmluc2VydChlLGwpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBDcyhlKSxuPU9zKGUuc2l0ZSksUnMuaW5zZXJ0KGwsbiksbC5lZGdlPW4uZWRnZT1kcyhlLnNpdGUsbC5zaXRlKSx4cyhlKSx2b2lkIHhzKG4pO2lmKG4pe0NzKGUpLENzKG4pO3ZhciB1PWUuc2l0ZSxjPXVbMF0sZj11WzFdLGQ9dFswXS1jLGg9dFsxXS1mLHA9bi5zaXRlLG09cFswXS1jLGI9cFsxXS1mLHk9MiooZCpiLWgqbSksdj1kKmQraCpoLGc9bSptK2IqYixfPVsoYip2LWgqZykveStjLChkKmctbSp2KS95K2ZdO3BzKG4uZWRnZSx1LHAsXyksbC5lZGdlPWRzKHUsdCxudWxsLF8pLG4uZWRnZT1kcyh0LHAsbnVsbCxfKSx4cyhlKSx4cyhuKX1lbHNlIGwuZWRnZT1kcyhlLnNpdGUsbC5zaXRlKX19ZnVuY3Rpb24gSXModCxlKXt2YXIgbj10LnNpdGUsaT1uWzBdLHI9blsxXSxvPXItZTtpZighbylyZXR1cm4gaTt2YXIgYT10LlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0obj1hLnNpdGUpWzBdLGw9blsxXSx1PWwtZTtpZighdSlyZXR1cm4gczt2YXIgYz1zLWksZj0xL28tMS91LGQ9Yy91O3JldHVybiBmPygtZCtNYXRoLnNxcnQoZCpkLTIqZiooYypjLygtMip1KS1sK3UvMityLW8vMikpKS9mK2k6KGkrcykvMn1mdW5jdGlvbiBUcyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBJcyhuLGUpO3ZhciBpPXQuc2l0ZTtyZXR1cm4gaVsxXT09PWU/aVswXToxLzB9dmFyIFJzLEFzLFBzLERzLE1zPTFlLTYsTnM9MWUtMTI7ZnVuY3Rpb24gTHModCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gRnModCxlKXt2YXIgbixpLHIsbz10LnNvcnQoTHMpLnBvcCgpO2ZvcihEcz1bXSxBcz1uZXcgQXJyYXkodC5sZW5ndGgpLFJzPW5ldyBmcyxQcz1uZXcgZnM7OylpZihyPV9zLG8mJighcnx8b1sxXTxyLnl8fG9bMV09PT1yLnkmJm9bMF08ci54KSlvWzBdPT09biYmb1sxXT09PWl8fChqcyhvKSxuPW9bMF0saT1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighcilicmVhaztrcyhyLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLGkscj0wLG89QXMubGVuZ3RoO3I8bzsrK3IpaWYoKHQ9QXNbcl0pJiYoaT0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilhW25dPW4sc1tuXT15cyh0LERzW2Vbbl1dKTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pLG49MDtuPGk7KytuKXNbbl09ZVthW25dXTtmb3Iobj0wO248aTsrK24pZVtuXT1zW25dfX0oKSxlKXt2YXIgYT0rZVswXVswXSxzPStlWzBdWzFdLGw9K2VbMV1bMF0sdT0rZVsxXVsxXTshZnVuY3Rpb24odCxlLG4saSl7Zm9yKHZhciByLG89RHMubGVuZ3RoO28tLTspYnMocj1Ec1tvXSx0LGUsbixpKSYmbXMocix0LGUsbixpKSYmKE1hdGguYWJzKHJbMF1bMF0tclsxXVswXSk+TXN8fE1hdGguYWJzKHJbMF1bMV0tclsxXVsxXSk+TXMpfHxkZWxldGUgRHNbb119KGEscyxsLHUpLGZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByLG8sYSxzLGwsdSxjLGYsZCxoLHAsbSxiPUFzLmxlbmd0aCx5PSEwO2ZvcihyPTA7cjxiOysrcilpZihvPUFzW3JdKXtmb3IoYT1vLnNpdGUscz0obD1vLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspRHNbbFtzXV18fGwuc3BsaWNlKHMsMSk7Zm9yKHM9MCx1PWwubGVuZ3RoO3M8dTspcD0oaD1ncyhvLERzW2xbc11dKSlbMF0sbT1oWzFdLGY9KGM9dnMobyxEc1tsWysrcyV1XV0pKVswXSxkPWNbMV0sKE1hdGguYWJzKHAtZik+TXN8fE1hdGguYWJzKG0tZCk+TXMpJiYobC5zcGxpY2UocywwLERzLnB1c2goaHMoYSxoLE1hdGguYWJzKHAtdCk8TXMmJmktbT5Ncz9bdCxNYXRoLmFicyhmLXQpPE1zP2Q6aV06TWF0aC5hYnMobS1pKTxNcyYmbi1wPk1zP1tNYXRoLmFicyhkLWkpPE1zP2Y6bixpXTpNYXRoLmFicyhwLW4pPE1zJiZtLWU+TXM/W24sTWF0aC5hYnMoZi1uKTxNcz9kOmVdOk1hdGguYWJzKG0tZSk8TXMmJnAtdD5Ncz9bTWF0aC5hYnMoZC1lKTxNcz9mOnQsZV06bnVsbCkpLTEpLCsrdSk7dSYmKHk9ITEpfWlmKHkpe3ZhciB2LGcsXyx3PTEvMDtmb3Iocj0wLHk9bnVsbDtyPGI7KytyKShvPUFzW3JdKSYmKF89KHY9KGE9by5zaXRlKVswXS10KSp2KyhnPWFbMV0tZSkqZyk8dyYmKHc9Xyx5PW8pO2lmKHkpe3ZhciB4PVt0LGVdLEM9W3QsaV0sUz1bbixpXSxPPVtuLGVdO3kuaGFsZmVkZ2VzLnB1c2goRHMucHVzaChocyhhPXkuc2l0ZSx4LEMpKS0xLERzLnB1c2goaHMoYSxDLFMpKS0xLERzLnB1c2goaHMoYSxTLE8pKS0xLERzLnB1c2goaHMoYSxPLHgpKS0xKX19Zm9yKHI9MDtyPGI7KytyKShvPUFzW3JdKSYmKG8uaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIEFzW3JdKX0oYSxzLGwsdSl9dGhpcy5lZGdlcz1Ecyx0aGlzLmNlbGxzPUFzLFJzPVBzPURzPUFzPW51bGx9ZnVuY3Rpb24gVnModCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufWZ1bmN0aW9uIHpzKHQsZSxuKXt2YXIgaSxyPUl0KHQpLG89TWF0aC5taW4ocGFyc2VJbnQoci5zdHlsZSgid2lkdGgiKSkscGFyc2VJbnQoci5zdHlsZSgiaGVpZ2h0IikpKS8yLGE9cGFyc2VJbnQoci5zdHlsZSgid2lkdGgiKSkvMi1vLHM9cGFyc2VJbnQoci5zdHlsZSgiaGVpZ2h0IikpLzItbyxsPU1hdGgubWF4KG4ubWluVmFsdWUsTWF0aC5taW4obi5tYXhWYWx1ZSxlKSkvbi5tYXhWYWx1ZSx1PU1hdGguZmxvb3IoMTAwKk1hdGgucmFuZG9tKCkpKzE7aT1uLndhdmVIZWlnaHRTY2FsaW5nP2tyKCkucmFuZ2UoWzAsbi53YXZlSGVpZ2h0LDBdKS5kb21haW4oWzAsNTAsMTAwXSk6a3IoKS5yYW5nZShbbi53YXZlSGVpZ2h0LG4ud2F2ZUhlaWdodF0pLmRvbWFpbihbMCwxMDBdKTt2YXIgYz1uLnRleHRTaXplKm8vMixmPXBhcnNlRmxvYXQoZSkudG9GaXhlZCgyKSxkPW4udmFsdWVDb3VudFVwP24ubWluVmFsdWU6ZixoPW4uZGlzcGxheVBlcmNlbnQ/bi5jdXN0b21QZXJjZW50OiIiLHA9bi5jaXJjbGVUaGlja25lc3MqbyxtPXArbi5jaXJjbGVGaWxsR2FwKm8sYj1vLW0seT1iKmkoMTAwKmwpLHY9MStuLndhdmVDb3VudCxnPTIqYi9uLndhdmVDb3VudCp2LF89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCl9O3BhcnNlRmxvYXQoZikhPXBhcnNlRmxvYXQoXyhmKSkmJihfPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGYpIT1wYXJzZUZsb2F0KF8oZikpJiYoXz1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpfSk7Zm9yKHZhciB3PVtdLHg9MDt4PD00MCp2O3grKyl3LnB1c2goe3g6eC8oNDAqdikseTp4LzQwfSk7dmFyIEM9a3IoKS5yYW5nZShbMCwyKk1hdGguUEldKS5kb21haW4oWzAsMV0pLFM9a3IoKS5yYW5nZShbMCxvXSkuZG9tYWluKFswLG9dKSxPPWtyKCkucmFuZ2UoWzAsZ10pLmRvbWFpbihbMCwxXSksRT1rcigpLnJhbmdlKFswLHldKS5kb21haW4oWzAsMV0pLGs9a3IoKS5yYW5nZShbbSsyKmIreSxtLXldKS5kb21haW4oWzAsMV0pLGo9a3IoKS5yYW5nZShbMCxnLTIqYl0pLmRvbWFpbihbMCwxXSksST1rcigpLnJhbmdlKFttKzIqYixtKy43KmNdKS5kb21haW4oWzAsMV0pLFQ9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsIitzKyIpIiksUj1QYSgpLnN0YXJ0QW5nbGUoQygwKSkuZW5kQW5nbGUoQygxKSkub3V0ZXJSYWRpdXMoUyhvKSkuaW5uZXJSYWRpdXMoUyhvLXApKTtULmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLFIpLnN0eWxlKCJmaWxsIixuLmNpcmNsZUNvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitvKyIpIik7dmFyIEE9VC5hcHBlbmQoInRleHQiKS50ZXh0KF8oZCkraCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLGMrInB4Iikuc3R5bGUoImZpbGwiLG4udGV4dENvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitJKG4udGV4dFZlcnRQb3NpdGlvbikrIikiKSxQPVZhKCkueChmdW5jdGlvbih0KXtyZXR1cm4gTyh0LngpfSkueTAoZnVuY3Rpb24odCl7cmV0dXJuIEUoTWF0aC5zaW4oMipNYXRoLlBJKm4ud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtbi53YXZlQ291bnQpKzIqdC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKHQpe3JldHVybiAyKmIreX0pLEQ9VC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJjbGlwV2F2ZSIrdS50b1N0cmluZygpKSxNPUQuYXBwZW5kKCJwYXRoIikuZGF0dW0odykuYXR0cigiZCIsUCkuYXR0cigiVCIsMCksTj1ULmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjY2xpcFdhdmUiK3UudG9TdHJpbmcoKSsiKSIpO04uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsbykuYXR0cigiY3kiLG8pLmF0dHIoInIiLGIpLnN0eWxlKCJmaWxsIixuLndhdmVDb2xvcik7dmFyIEw9Ti5hcHBlbmQoInRleHQiKS50ZXh0KF8oZCkraCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLGMrInB4Iikuc3R5bGUoImZpbGwiLG4ud2F2ZVRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrSShuLnRleHRWZXJ0UG9zaXRpb24pKyIpIik7aWYobi52YWx1ZUNvdW50VXApe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIHQ9UWUoZCxmKTtyZXR1cm4gZnVuY3Rpb24oZSl7QS50ZXh0KF8odChlKSkraCksTC50ZXh0KF8odChlKSkraCl9fTtBLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLEYpLEwudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsRil9dmFyIFY9bSsyKmItZztmdW5jdGlvbiB6KCl7TS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitqKE0uYXR0cigiVCIpKSsiLDApIiksTS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlQW5pbWF0ZVRpbWUqKDEtTS5hdHRyKCJUIikpKS5lYXNlKEhuKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitqKDEpKyIsMCkiKS5hdHRyKCJUIiwxKS5vbigiZW5kIixmdW5jdGlvbigpe00uYXR0cigiVCIsMCkseigpfSl9cmV0dXJuIG4ud2F2ZVJpc2U/RC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKDApKyIpIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKGwpKyIpIikub24oInN0YXJ0IixmdW5jdGlvbigpe00uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDEsMCkiKX0pOkQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrayhsKSsiKSIpLG4ud2F2ZUFuaW1hdGUmJnooKSx7dXBkYXRlKHQpe3ZhciBlPXBhcnNlRmxvYXQodCkudG9GaXhlZCgyKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpfTtwYXJzZUZsb2F0KGUpIT1wYXJzZUZsb2F0KHIoZSkpJiYocj1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDEpfSkscGFyc2VGbG9hdChlKSE9cGFyc2VGbG9hdChyKGUpKSYmKHI9ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgyKX0pO3ZhciBvPWZ1bmN0aW9uKCl7dmFyIGU9UWUoQS50ZXh0KCkscGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpKTtyZXR1cm4gZnVuY3Rpb24odCl7QS50ZXh0KHIoZSh0KSkraCksTC50ZXh0KHIoZSh0KSkraCl9fTtBLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLG8pLEwudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsbyk7dmFyIGEscz1NYXRoLm1heChuLm1pblZhbHVlLE1hdGgubWluKG4ubWF4VmFsdWUsdCkpL24ubWF4VmFsdWUsbD1iKmkoMTAwKnMpLHU9a3IoKS5yYW5nZShbbSsyKmIrbCxtLWxdKS5kb21haW4oWzAsMV0pKHMpLGM9a3IoKS5yYW5nZShbMCxnXSkuZG9tYWluKFswLDFdKSxmPWtyKCkucmFuZ2UoWzAsbF0pLmRvbWFpbihbMCwxXSk7YT1uLndhdmVIZWlnaHRTY2FsaW5nP3lpLmFyZWEoKS54KGZ1bmN0aW9uKHQpe3JldHVybiBjKHQueCl9KS55MChmdW5jdGlvbih0KXtyZXR1cm4gZihNYXRoLnNpbigyKk1hdGguUEkqbi53YXZlT2Zmc2V0Ki0xKzIqTWF0aC5QSSooMS1uLndhdmVDb3VudCkrMip0LnkqTWF0aC5QSSkpfSkueTEoZnVuY3Rpb24odCl7cmV0dXJuIDIqYitsfSk6UDt2YXIgZD1uLndhdmVBbmltYXRlP2ooMSk6MDtNLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlQW5pbWF0ZT9uLndhdmVBbmltYXRlVGltZSooMS1NLmF0dHIoIlQiKSk6bi53YXZlUmlzZVRpbWUpLmVhc2UoSG4pLmF0dHIoImQiLGEpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2QrIiwwKSIpLmF0dHIoIlQiLCIxIikub24oImVuZCIsZnVuY3Rpb24oKXtuLndhdmVBbmltYXRlJiYoTS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitqKDApKyIsMCkiKSx6KCkpfSksRC50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK3UrIikiKX19fUZzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RnMscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHZzKGUsdFtuXSl9KTtyZXR1cm4gbi5kYXRhPWUuc2l0ZS5kYXRhLG59KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24obixpKXtpZihvPShyPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciByLG8sYSxzLGwsdSxjPW4uc2l0ZSxmPS0xLGQ9ZVtyW28tMV1dLGg9ZC5sZWZ0PT09Yz9kLnJpZ2h0OmQubGVmdDsrK2Y8bzspYT1oLGg9KGQ9ZVtyW2ZdXSkubGVmdD09PWM/ZC5yaWdodDpkLmxlZnQsYSYmaCYmaTxhLmluZGV4JiZpPGguaW5kZXgmJigocz1jKVswXS0odT1oKVswXSkqKChsPWEpWzFdLXNbMV0pLShzWzBdLWxbMF0pKih1WzFdLXNbMV0pPDAmJnQucHVzaChbYy5kYXRhLGEuZGF0YSxoLmRhdGFdKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJpZ2h0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpLHIsbz10aGlzLGE9by5fZm91bmR8fDAscz1vLmNlbGxzLmxlbmd0aDshKHI9by5jZWxsc1thXSk7KWlmKCsrYT49cylyZXR1cm4gbnVsbDt2YXIgbD10LXIuc2l0ZVswXSx1PWUtci5zaXRlWzFdLGM9bCpsK3UqdTtkb3tyPW8uY2VsbHNbaT1hXSxhPW51bGwsci5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1vLmVkZ2VzW25dLHM9aS5sZWZ0O2lmKHMhPT1yLnNpdGUmJnN8fChzPWkucmlnaHQpKXt2YXIgbD10LXNbMF0sdT1lLXNbMV0sZj1sKmwrdSp1O2Y8YyYmKGM9ZixhPXMuaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9aSxudWxsPT1ufHxjPD1uKm4/ci5zaXRlOm51bGx9fSxWcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlZzLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBWcyh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IFZzKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IFZzKDEsMCwwKTt2YXIgQnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5keW5fd2lkdGg9NTAwfXJldHVybiB0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlO3RoaXMuZHluX3dpZHRoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkM2NvbnRhaW5lciIpLmNsaWVudFdpZHRoLHQ9SXQoIiNkM3RhcmdldCIpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsImFuaW1hdGUtZ3JhZGllbnQiKS5hdHRyKCJ4MSIsIjAlIikuYXR0cigieTEiLCIwJSIpLmF0dHIoIngyIiwiMTAwJSIpLmF0dHIoInkyIiwiMCIpLmF0dHIoInNwcmVhZE1ldGhvZCIsInJlZmxlY3QiKSxlPVsiIzAwMWFmZCIsIiM2YjY3ZmMiLCIjNTM5MGUzIiwiIzM1NmNjNiIsIiM1MzkwZTMiLCIjNmI2N2ZjIiwiIzAwMWFmZCJdLHQuc2VsZWN0QWxsKCIuc3RvcCIpLmRhdGEoZSkuZW50ZXIoKS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4vKGUubGVuZ3RoLTEpfSkuYXR0cigic3RvcC1jb2xvciIsZnVuY3Rpb24odCl7cmV0dXJuIHR9KSx0LmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MSIpLmF0dHIoInZhbHVlcyIsIjAlOzEwMCUiKS5hdHRyKCJkdXIiLCI3cyIpLmF0dHIoInJlcGVhdENvdW50IiwiaW5kZWZpbml0ZSIpLHQuYXBwZW5kKCJhbmltYXRlIikuYXR0cigiYXR0cmlidXRlTmFtZSIsIngyIikuYXR0cigidmFsdWVzIiwiMTAwJTsyMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKSxmdW5jdGlvbih0KXt2YXIgZT0xODAvTWF0aC5QSSxuPU8oNTApLm1hcChmdW5jdGlvbigpe3ZhciB0PTE1MCpNYXRoLnJhbmRvbSgpLGU9MTUwKk1hdGgucmFuZG9tKCk7cmV0dXJue3Z4OjIqTWF0aC5yYW5kb20oKS0xLHZ5OjIqTWF0aC5yYW5kb20oKS0xLHBhdGg6TygxMikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuW3QsZV19KSxjb3VudDowfX0pLGk9SXQoIiNiYWN0ZXJpYWNvbnRhaW5lciIpLnNlbGVjdEFsbCgiZyIpLmRhdGEobikuZW50ZXIoKS5hcHBlbmQoImciKSxyPWkuYXBwZW5kKCJlbGxpcHNlIikuYXR0cigicngiLDIpLmF0dHIoInJ5IiwzKTtpLmFwcGVuZCgicGF0aCIpLmRhdHVtKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGguc2xpY2UoMCwzKX0pLmF0dHIoImNsYXNzIiwibWlkIiksaS5hcHBlbmQoInBhdGgiKS5kYXR1bShmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRofSkuYXR0cigiY2xhc3MiLCJ0YWlsIik7dmFyIG89aS5zZWxlY3RBbGwoInBhdGgiKTtmdW5jdGlvbiBhKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnBhdGhbMF0rIilyb3RhdGUoIitNYXRoLmF0YW4yKHQudnksdC52eCkqZSsiKSJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4iTSIrdC5qb2luKCJMIil9dm4oZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PDUwOyl7dmFyIGU9blt0XSxpPWUucGF0aCxsPWUudngsdT1lLnZ5LGM9aVswXVswXSs9bCxmPWlbMF1bMV0rPXU7TWF0aC5zcXJ0KGwqbCt1KnUpLChjPDB8fGM+MTUwKSYmKGUudngqPS0xKSwoZjwwfHxmPjE1MCkmJihlLnZ5Kj0tMSl9ci5hdHRyKCJ0cmFuc2Zvcm0iLGEpLG8uYXR0cigiZCIscyl9KX0oKTt2YXIgbj17bWluVmFsdWU6MCxtYXhWYWx1ZToxMDAsY2lyY2xlVGhpY2tuZXNzOi4wNSxjaXJjbGVGaWxsR2FwOi4wNSxjaXJjbGVDb2xvcjoiIzE3OEJDQSIsd2F2ZUhlaWdodDouMDUsd2F2ZUNvdW50OjEsd2F2ZVJpc2VUaW1lOjFlMyx3YXZlQW5pbWF0ZVRpbWU6MThlMyx3YXZlUmlzZTohMCx3YXZlSGVpZ2h0U2NhbGluZzohMCx3YXZlQW5pbWF0ZTohMCx3YXZlQ29sb3I6IiMxNzhCQ0EiLHdhdmVPZmZzZXQ6MCx0ZXh0VmVydFBvc2l0aW9uOi41LHRleHRTaXplOjEsdmFsdWVDb3VudFVwOiEwLGRpc3BsYXlQZXJjZW50OiEwLHRleHRDb2xvcjoiIzA0NTY4MSIsd2F2ZVRleHRDb2xvcjoiI0E0REJmOCIsY3VzdG9tUGVyY2VudDoiJSJ9O24udmFsdWVDb3VudFVwPSEwLG4uY2lyY2xlVGhpY2tuZXNzPS4xNSxuLmNpcmNsZUNvbG9yPSIjODA4MDE1IixuLnRleHRDb2xvcj0iIzU1NTUwMCIsbi53YXZlVGV4dENvbG9yPSIjRkZGRkFBIixuLndhdmVDb2xvcj0iI0FBQUEzOSIsbi50ZXh0VmVydFBvc2l0aW9uPS44LG4ud2F2ZUFuaW1hdGVUaW1lPTFlMyxuLndhdmVIZWlnaHQ9LjA1LG4ud2F2ZUFuaW1hdGU9ITAsbi53YXZlUmlzZT0hMSxuLndhdmVIZWlnaHRTY2FsaW5nPSExLG4ud2F2ZU9mZnNldD0uMjUsbi50ZXh0U2l6ZT0uNSxuLndhdmVDb3VudD0zLG4uZGlzcGxheVBlcmNlbnQ9ITAsbi5taW5WYWx1ZT0wLG4ubWF4VmFsdWU9NjAwLG4uY3VzdG9tUGVyY2VudD0iIG5tb2wvTCI7dmFyIGk9enMoIiNkM2lucHV0Z2F1Z2UiLDIyMCxuKTtPYmplY3QoeS5hKSgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gaS51cGRhdGUoTWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMjUwKX0pO3ZhciByPXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07ci52YWx1ZUNvdW50VXA9ITAsci5jaXJjbGVUaGlja25lc3M9LjE1LHIuY2lyY2xlQ29sb3I9IiM4MDM1N2MiLHIudGV4dENvbG9yPSIjNTU1NTAwIixyLndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLHIud2F2ZUNvbG9yPSIjQUFBQTM5IixyLnRleHRWZXJ0UG9zaXRpb249Ljgsci53YXZlQW5pbWF0ZVRpbWU9MWUzLHIud2F2ZUhlaWdodD0uMDUsci53YXZlQW5pbWF0ZT0hMCxyLndhdmVSaXNlPSExLHIud2F2ZUhlaWdodFNjYWxpbmc9ITEsci53YXZlT2Zmc2V0PS4yNSxyLnRleHRTaXplPS41LHIud2F2ZUNvdW50PTMsci5kaXNwbGF5UGVyY2VudD0hMCxyLm1pblZhbHVlPTAsci5tYXhWYWx1ZT02MDAsci5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgbyxhLHMsbCx1LGMsZixkLGgscD16cygiI2Qzb3V0Z2F1Z2UiLDQ1LHIpO09iamVjdCh5LmEpKDE1MDAsMTUwMCkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBwLnVwZGF0ZShNYXRoLmZsb29yKDQwKk1hdGgucmFuZG9tKCkpKzUwKX0pLHM9SXQoIiNkM2JpbW9kYWwiKSxsPWtyKCkuZG9tYWluKFszMCwxMTBdKS5yYW5nZShbNDAsMjcwXSksdT1rcigpLmRvbWFpbihbMCwuMV0pLnJhbmdlKFsxNTAsMjBdKSxmPShjPVs3OSw1NCw3NCw2Miw4NSw1NSw4OCw4NSw1MSw4NSw1NCw4NCw3OCw0Nyw4Myw1Miw2Miw4NCw1Miw3OSw1MSw0Nyw3OCw2OSw3NCw4Myw1NSw3Niw3OCw3OSw3Myw3Nyw2Niw4MCw3NCw1Miw0OCw4MCw1OSw5MCw4MCw1OCw4NCw1OCw3Myw4Myw2NCw1Myw4Miw1OSw3NSw5MCw1NCw4MCw1NCw4Myw3MSw2NCw3Nyw4MSw1OSw4NCw0OCw4Miw2MCw5Miw3OCw3OCw2NSw3Myw4Miw1Niw3OSw3MSw2Miw3Niw2MCw3OCw3Niw4Myw3NSw4Miw3MCw2NSw3Myw4OCw3Niw4MCw0OCw4Niw2MCw5MCw1MCw3OCw2Myw3Miw4NCw3NSw1MSw4Miw2Miw4OCw0OSw4Myw4MSw0Nyw4NCw1Miw4Niw4MSw3NSw1OSw4OSw3OSw1OSw4MSw1MCw4NSw1OSw4Nyw1Myw2OSw3Nyw1Niw4OCw4MSw0NSw4Miw1NSw5MCw0NSw4Myw1Niw4OSw0Niw4Miw1MSw4Niw1Myw3OSw4MSw2MCw4Miw3Nyw3Niw1OSw4MCw0OSw5Niw1Myw3Nyw3Nyw2NSw4MSw3MSw3MCw4MSw5Myw1Myw4OSw0NSw4Niw1OCw3OCw2Niw3Niw2Myw4OCw1Miw5Myw0OSw1Nyw3Nyw2OCw4MSw4MSw3Myw1MCw4NSw3NCw1NSw3Nyw4Myw4Myw1MSw3OCw4NCw0Niw4Myw1NSw4MSw1Nyw3Niw4NCw3Nyw4MSw4Nyw3Nyw1MSw3OCw2MCw4Miw5MSw1Myw3OCw0Niw3Nyw4NCw0OSw4Myw3MSw4MCw0OSw3NSw2NCw3Niw1Myw5NCw1NSw3Niw1MCw4Miw1NCw3NSw3OCw3OSw3OCw3OCw3MCw3OSw3MCw1NCw4Niw1MCw5MCw1NCw1NCw3Nyw3OSw2NCw3NSw0Nyw4Niw2Myw4NSw4Miw1Nyw4Miw2Nyw3NCw1NCw4Myw3Myw3Myw4OCw4MCw3MSw4Myw1Niw3OSw3OCw4NCw1OCw4Myw0Myw2MCw3NSw4MSw0Niw5MCw0Niw3NF0pLmxlbmd0aCxkPWZ1bmN0aW9uKCl7dmFyIHQ9UyxlPXcsbj1BO2Z1bmN0aW9uIGkoaSl7dmFyIHIsbyxhPWkubGVuZ3RoLHM9bmV3IEFycmF5KGEpO2ZvcihyPTA7cjxhOysrcilzW3JdPXQoaVtyXSxyLGkpO3ZhciBsPWUocyksdT1sWzBdLGM9bFsxXSxmPW4ocyx1LGMpO0FycmF5LmlzQXJyYXkoZil8fChmPVIodSxjLGYpLGY9TyhNYXRoLmNlaWwodS9mKSpmLE1hdGguZmxvb3IoYy9mKSpmLGYpKTtmb3IodmFyIGQ9Zi5sZW5ndGg7ZlswXTw9dTspZi5zaGlmdCgpLC0tZDtmb3IoO2ZbZC0xXT5jOylmLnBvcCgpLC0tZDt2YXIgaCxwPW5ldyBBcnJheShkKzEpO2ZvcihyPTA7cjw9ZDsrK3IpKGg9cFtyXT1bXSkueDA9cj4wP2Zbci0xXTp1LGgueDE9cjxkP2Zbcl06Yztmb3Iocj0wO3I8YTsrK3IpdTw9KG89c1tyXSkmJm88PWMmJnBbZyhmLG8sMCxkKV0ucHVzaChpW3JdKTtyZXR1cm4gcH1yZXR1cm4gaS52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkMoZSksaSk6dH0saS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpDKFt0WzBdLHRbMV1dKSxpKTplfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0MoeC5jYWxsKHQpKTpDKHQpLGkpOm59LGl9KCkuZG9tYWluKGwuZG9tYWluKCkpLnRocmVzaG9sZHMoNDApKGMpLGg9KG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQvPTcpPD0xPy43NSooMS10KnQpLzc6MH0sYT1sLnRpY2tzKDQwKSxmdW5jdGlvbih0KXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsZnVuY3Rpb24odCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9aSxvPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKG49Xyh0W29dKSk/LS1yOmErPW47ZWxzZSBmb3IoOysrbzxpOylpc05hTihuPV8oZSh0W29dKSkpPy0tcjphKz1uO2lmKHIpcmV0dXJuIGEvcn0odCxmdW5jdGlvbih0KXtyZXR1cm4gbyhlLXQpfSldfSl9KShjKSxzLmluc2VydCgiZyIsIioiKS5hdHRyKCJmaWxsIiwiI2JiYiIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoZCkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngwKSsxfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHUodC5sZW5ndGgvZil9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIGwodC54MSktbCh0LngwKS0xfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdSgwKS11KHQubGVuZ3RoL2YpfSkscy5hcHBlbmQoInBhdGgiKS5kYXR1bShoKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJkIixGYSgpLmN1cnZlKHFhKS54KGZ1bmN0aW9uKHQpe3JldHVybiBsKHRbMF0pfSkueShmdW5jdGlvbih0KXtyZXR1cm4gdSh0WzFdKX0pKX0sdH0oKSxVcz1vLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIi5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99bWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMH0ucHJvamVjdC1wcmVzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRwdH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIEhzKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsNTIsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxLDAsbnVsbCxudWxsLDUsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgyLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbInN0eWxlIiwiY29sb3I6ICM2MjAwM2M7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJNZXRob3RyIl0pKSwodCgpKCksby5SYSg0LDAsbnVsbCxudWxsLDEsInNwYW4iLFtbInN0eWxlIiwiY29sb3I6ICByZWQ7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJFeGl0Il0pKSwodCgpKCksby5qYigtMSxudWxsLFsiIDogQ2xlYW5pbmcgaG9zcGl0YWwgZWZmbHVlbnQgc2luY2UgMjAxOCJdKSksKHQoKSgpLG8uUmEoNywwLG51bGwsbnVsbCw0NSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsbS5kLG0uYSkpLG8uUWEoOCw0OTE1MixudWxsLDAsYi5hLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUmEoOSwwLG51bGwsMCw0LCJtYXQtY2FyZC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWNhcmQtaGVhZGVyIl1dLG51bGwsbnVsbCxudWxsLG0uYyxtLmIpKSxvLlFhKDEwLDQ5MTUyLG51bGwsMCxiLmUsW10sbnVsbCxudWxsKSwodCgpKCksby5SYSgxMSwwLG51bGwsMSwyLCJtYXQtY2FyZC10aXRsZSIsW1siY2xhc3MiLCJtYXQtY2FyZC10aXRsZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlFhKDEyLDE2Mzg0LG51bGwsMCxiLmgsW10sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSxudWxsLFsiIE91ciBQcm9qZWN0ICJdKSksKHQoKSgpLG8uUmEoMTQsMCxudWxsLDAsMzgsIm1hdC1jYXJkLWNvbnRlbnQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQtY29udGVudCBtYXQtY2FyZC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMTUsMTYzODQsbnVsbCwwLGIuZCxbXSxudWxsLG51bGwpLCh0KCkoKSxvLlJhKDE2LDAsbnVsbCxudWxsLDM2LCJkaXYiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDE3LDAsbnVsbCxudWxsLDIwLCJkaXYiLFtbImlkIiwiZDNjb250YWluZXIiXSxbInN0eWxlIiwibWFyZ2luOiBhdXRvOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxOCwwLG51bGwsbnVsbCwxOSwiOnN2ZzpzdmciLFtbImhlaWdodCIsIjUwMCJdLFsiaWQiLCJkM3RhcmdldCJdLFsic3R5bGUiLCJkaXNwbGF5OiBibG9jazttYXJnaW46IGF1dG87Il0sWyJ3aWR0aCIsIjY3NCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxOSwwLG51bGwsbnVsbCwzLCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwxMDApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDIwLDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJIb3NwaXRhbCBlZmZsdWVudHMiXSkpLCh0KCkoKSxvLlJhKDIyLDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2lucHV0Z2F1Z2UiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNTBweDt3aWR0aDogMTUwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDIzLDAsbnVsbCxudWxsLDAsIjpzdmc6cG9seWdvbiIsW1sicG9pbnRzIiwiNSwyNzAgMjUwLDI3MCAyNTAsMjAwIDQwMCwyMDAgNDAwLDI3MCA2NTAsMjcwIDY1MCwzMjAgNDAwLDMyMCA0MDAsMzUwIDI1MCwzNTAgMjUwLDMyMCA1LDMyMCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7c3Ryb2tlOiAjNWEwMDM2RkY7IHN0cm9rZS13aWR0aDogNXB4Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDI0LDAsbnVsbCxudWxsLDEsIjpzdmc6ZyIsW1siaWQiLCJiYWN0ZXJpYWNvbnRhaW5lciJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDI1MCwyMDApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDI1LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMjYsMCxudWxsLG51bGwsMCwiOnN2ZzpsaW5lIixbWyJzdHlsZSIsImZpbGw6IHRyYW5zcGFyZW50OyBzdHJva2U6ICMwMDAwMDBmZjsgc3Ryb2tlLWRhc2hhcnJheTogMiwyOyBzdHJva2Utd2lkdGg6IDJweDsiXSxbIngxIiwiMjUwIl0sWyJ4MiIsIjI1MCJdLFsieTEiLCIyNzAiXSxbInkyIiwiMzIwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDI3LDAsbnVsbCxudWxsLDAsIjpzdmc6bGluZSIsW1sic3R5bGUiLCJmaWxsOiB0cmFuc3BhcmVudDsgc3Ryb2tlOiAjMDAwMDAwZmY7IHN0cm9rZS1kYXNoYXJyYXk6IDIsMjsgc3Ryb2tlLXdpZHRoOiAycHg7Il0sWyJ4MSIsIjQwMCJdLFsieDIiLCI0MDAiXSxbInkxIiwiMjcwIl0sWyJ5MiIsIjMyMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgyOCwwLG51bGwsbnVsbCwzLCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg0NzAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgyOSwwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC01KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigtMSxudWxsLFsiV2FzdGV3YXRlciBvdXRwdXQiXSkpLCh0KCkoKSxvLlJhKDMxLDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM291dGdhdWdlIl0sWyJzdHlsZSIsImhlaWdodDogMTUwcHg7d2lkdGg6IDE1MHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgzMiwwLG51bGwsbnVsbCw1LCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxODAsMjApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDMzLDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQ1LDE2MykiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsbnVsbCxbIkJhY3RlcmlhbCBwb3B1bGF0aW9uIl0pKSwodCgpKCksby5SYSgzNSwwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjEwIl0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNzUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJCaW1vZGFsIGRpc3RyaWJ1dGlvbiJdKSksKHQoKSgpLG8uUmEoMzcsMCxudWxsLG51bGwsMCwiOnN2ZzpnIixbWyJpZCIsImQzYmltb2RhbCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgzOCwwLG51bGwsbnVsbCwxNCwiZGl2IixbWyJjbGFzcyIsInByb2plY3QtcHJlcyJdLFsic3R5bGUiLCJwYWRkaW5nOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigtMSxudWxsLFsiIE91ciBwcm9qZWN0IGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGJhY3RlcmlhbCBwbGF0Zm9ybSBmb3IgZHJ1ZyBkZWdyYWRhdGlvbi4gQXMgYSBwcm9vZiBvZiBjb25jZXB0LCB3ZSBoYXZlIGNob3NlbiB0byBmb2N1cyBvbiB0aGUgY3l0b3RveGljIGRydWdzIHVzZWQgaW4gdGhlIHRyZWF0bWVudCBvZiBjYW5jZXIsIGFzIHRoZWlyIGNvbmNlbnRyYXRpb25zIGFyZSBhbGFybWluZ2x5IGhpZ2ggaW4gaG9zcGl0YWwgd2FzdGV3YXRlciBlZmZsdWVudHMuIFRocm91Z2ggYSB0b29sa2l0IG9mIGJyb2FkLSBhbmQgbmFycm93LXNwZWN0cnVtIGVuenltZXMsIHdlIGFpbSB0byBhY2hpZXZlIGNsZWFyYW5jZSBvZiB0aGUgbWFpbiBjaGVtb3RoZXJhcGV1dGljIGFnZW50cywgbGlrZSBtZXRob3RyZXhhdGUsIDUtZmx1b3JvdXJhY2lsIG9yIGRveG9ydWJpY2luLiAiXSkpLCh0KCkoKSxvLlJhKDQwLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSg0MSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsbnVsbCxbJyBXZSBhcmUgdGFraW5nIG9uIHRocmVlIG1haW4gY2hhbGxlbmdlcyA6IGVmZmljaWVudCBlbnRyeSBvZiB0aGVzZSBtb2xlY3VsZXMgaW4gdGhlIGJhY3RlcmlhbCBjZWxsLCB0aHJvdWdoIGNoYW5uZWxzIGFuZCB0cmFuc3BvcnRlcnMgKHVyYWNpbC1saWtlIHRyYW5zcG9ydGVyIHVyYUEsIGNyeXB0aWMgZm9sYXRlLWFuYWxvZ3VlIHRyYW5zcG9ydGVyIGFiZ1QgLi4uKSwgcHJvcGVyIGRlZ3JhZGF0aW9uIHRocm91Z2ggbWV0YWJvbGl6aW5nIGVuenltZXMgKGNhcmJveHlwZXB0aWRhc2UgRzIsIGN5dG9jaHJvbWUgUDQ1MCBcdTIwMjYpLCBhbmQgbG9uZyB0ZXJtIG9wZXJhdGlvbiBvZiB0aGUgYmlvcmVhY3RvciB0aG91Z2ggYSBiaXN0YWJsZSwgInN0ZW0tY2VsbCBsaWtlIiwgcG9wdWxhdGlvbiBvZiBiYWN0ZXJpYSwgYWxsZXZpYXRpbmcgdGhlIG5lZWQgZm9yIHJlZ3VsYXIgcmVzZWVkaW5nIHdpdGggZnJlc2ggY2xvbmVzLiAnXSkpLCh0KCkoKSxvLlJhKDQzLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSg0NCwwLG51bGwsbnVsbCwxLCJoMyIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsbnVsbCxbIlByb2plY3Qgc2lnbmlmaWNhbmNlIl0pKSwodCgpKCksby5qYigtMSxudWxsLFsiIFBoYXJtYWNldXRpY2FsIGRydWdzIGFyZSBhIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHNvdXJjZSBvZiBwb2xsdXRpb24gOiBzZWxlY3RlZCB0byBiZSBiaW9sb2dpY2FsbHkgYWN0aXZlIGF0IGxvdyBjb25jZW50cmF0aW9uICYgZGVzaWduZWQgdG8gcmVzaXN0IGJpb2RlZ3JhZGF0aW9uLCBkcnVncyBjb25zdGl0dXRlIGEgY2xhc3Mgb2YgaGlnaCByZW1hbmVuY2UgcG9sbHV0YW50cyByb3V0aW5lbHkgZm91bmQgaW4gdGhlIGVudmlyb25tZW50LCBldmVuIGluIG91ciBkcmlua2luZyB3YXRlci4gIl0pKSwodCgpKCksby5SYSg0NywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoNDgsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyIgVGhvdWdoIHBoeXNpY2FsICYgY2hlbWljYWwgc29sdXRpb25zIGV4aXN0LCBpbiB0aGUgZm9ybSBvZiBvem9uZSBhbmQgVVYgdHJlYXRtZW50LCBvdXIgc29sdXRpb24gY2FuIG9mZmVyIHRoZSBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeSBvZiBhIGJpb3JlYWN0b3ItYmFzZWQgYXBwcm9hY2guICJdKSksKHQoKSgpLG8uUmEoNTAsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDUxLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigtMSxudWxsLFsnIE91ciAic3RlbS1jZWxsIGxpa2UiIGFwcHJvYWNoIHRvIGJhY3RlcmlhbCBwb3B1bGF0aW9uIG1ha2VzIGl0IGFuIG9wdGlvbiB3aXRoIHBvdGVudGlhbGx5IGxvd2VyIG9uZ29pbmcgY29zdHMsIGFuZCBvdXIgZGVncmFkYXRpb24gZW56eW1lcyBhbGxvdyB0YXJnZXRlZCBkZWdyYWRhdGlvbiBvZiBwYXJ0aWN1bGFybHkgcmVzaWxpZW50IG1vbGVjdWxlcyA6IGJvdGggd2Vha25lc3NlcyBvZiBjb252ZW50aW9uYWwgbWV0aG9kcyBvZiB3YXN0ZXdhdGVyIHRyZWF0bWVudC4gJ10pKV0sbnVsbCxudWxsKX12YXIgcXM9by5OYSgiZGFzaGJvYXJkIixCcyxmdW5jdGlvbih0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsImRhc2hib2FyZCIsW10sbnVsbCxudWxsLG51bGwsSHMsVXMpKSxvLlFhKDEsMTA5NzcyOCxudWxsLDAsQnMsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX0se30se30sW10pLFFzPW4oImpsWm0iKSxHcz1uKCJBeUpxIiksWnM9bigiWWxiUSIpLFdzPW4oImxMQVAiKSxZcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLEtzPW8uUGEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gWHModCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwzNSwiZGl2IixbWyJpZCIsImdjb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsbnVsbCxbIlNpdGUgbWFwcyJdKSksKHQoKSgpLG8uUmEoMywwLG51bGwsbnVsbCwzMiwibWF0LWFjY29yZGlvbiIsW1siY2xhc3MiLCJtYXQtYWNjb3JkaW9uIl0sWyJtdWx0aSIsInRydWUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSg0LDE2Mzg0LG51bGwsMCxRcy5hLFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKHQoKSgpLG8uUmEoNSwxNjc3NzIxNixudWxsLG51bGwsMTQsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxHcy5kLEdzLmEpKSxvLlFhKDYsMTc1MzA4OCxudWxsLDEsUXMuYyxbWzMsUXMuYV0sby5oLFpzLmMsby5RXSxudWxsLG51bGwpLG8uaGIoMzM1NTQ0MzIwLDEse19sYXp5Q29udGVudDowfSksby5nYigyNTYsbnVsbCxRcy5hLHZvaWQgMCxbXSksKHQoKSgpLG8uUmEoOSwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuImNsaWNrIj09PWUmJihpPSExIT09by5iYih0LDEwKS5fdG9nZ2xlKCkmJmkpLCJrZXlkb3duIj09PWUmJihpPSExIT09by5iYih0LDEwKS5fa2V5ZG93bihuKSYmaSksaX0sR3MuYyxHcy5iKSksby5RYSgxMCwxODAyMjQsbnVsbCwwLFFzLmUsW1FzLmMsby5rLFdzLmIsby5oXSxudWxsLG51bGwpLG8uZWIoMTEse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxvLmViKDEyLHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLG8uUmEoMTMsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMTQsMTYzODQsbnVsbCwwLFFzLmYsW10sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSxudWxsLFsiIFByb2plY3QgZGVzaWduICJdKSksKHQoKSgpLG8uUmEoMTYsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMTcsMTYzODQsbnVsbCwwLFFzLmQsW10sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSxudWxsLFsiIFRoZW9yZXRpY2FsIHVuZGVycGlubmluZyBvZiBvdXIgcHJvamVjdCAiXSkpLCh0KCkoKSxvLmpiKC0xLDEsWyIgQUFBQUFBQUFBQUFhICJdKSksKHQoKSgpLG8uUmEoMjAsMTY3NzcyMTYsbnVsbCxudWxsLDE1LCJtYXQtZXhwYW5zaW9uLXBhbmVsIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwiXV0sW1syLCJtYXQtZXhwYW5kZWQiLG51bGxdLFsyLCJtYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmciLG51bGxdXSxudWxsLG51bGwsR3MuZCxHcy5hKSksby5RYSgyMSwxNzUzMDg4LG51bGwsMSxRcy5jLFtbMyxRcy5hXSxvLmgsWnMuYyxvLlFdLG51bGwsbnVsbCksby5oYigzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSxvLmdiKDI1NixudWxsLFFzLmEsdm9pZCAwLFtdKSwodCgpKCksby5SYSgyNCwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuImNsaWNrIj09PWUmJihpPSExIT09by5iYih0LDI1KS5fdG9nZ2xlKCkmJmkpLCJrZXlkb3duIj09PWUmJihpPSExIT09by5iYih0LDI1KS5fa2V5ZG93bihuKSYmaSksaX0sR3MuYyxHcy5iKSksby5RYSgyNSwxODAyMjQsbnVsbCwwLFFzLmUsW1FzLmMsby5rLFdzLmIsby5oXSxudWxsLG51bGwpLG8uZWIoMjYse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxvLmViKDI3LHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLG8uUmEoMjgsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMjksMTYzODQsbnVsbCwwLFFzLmYsW10sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSxudWxsLFsiIE1hdGVyaWFsIGFuZCBtZXRob2QgIl0pKSwodCgpKCksby5SYSgzMSwwLG51bGwsMSwyLCJtYXQtcGFuZWwtZGVzY3JpcHRpb24iLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSgzMiwxNjM4NCxudWxsLDAsUXMuZCxbXSxudWxsLG51bGwpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyIgT3VyIGV4cGVyaW1lbnRhbCBkZXNpZ25zICYgcmVzdWx0cyAiXSkpLCh0KCkoKSxvLlJhKDM0LDAsbnVsbCwxLDEsInAiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJJJ20gdmlzaWJsZSBiZWNhdXNlIEkgYW0gb3BlbiJdKSldLGZ1bmN0aW9uKHQsZSl7dChlLDQsMCwidHJ1ZSIpfSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsby5iYihlLDYpLmV4cGFuZGVkLG8uYmIoZSw2KS5faGFzU3BhY2luZygpKSx0KGUsOSwwLG8uYmIoZSwxMCkucGFuZWwuX2hlYWRlcklkLG8uYmIoZSwxMCkucGFuZWwuZGlzYWJsZWQ/LTE6MCxvLmJiKGUsMTApLl9nZXRQYW5lbElkKCksby5iYihlLDEwKS5faXNFeHBhbmRlZCgpLG8uYmIoZSwxMCkucGFuZWwuZGlzYWJsZWQsby5iYihlLDEwKS5faXNFeHBhbmRlZCgpLHQoZSwxMiwwLG8uYmIoZSwxMCkuX2dldEV4cGFuZGVkU3RhdGUoKSx0KGUsMTEsMCxvLmJiKGUsMTApLmNvbGxhcHNlZEhlaWdodCxvLmJiKGUsMTApLmV4cGFuZGVkSGVpZ2h0KSkpLHQoZSwyMCwwLG8uYmIoZSwyMSkuZXhwYW5kZWQsby5iYihlLDIxKS5faGFzU3BhY2luZygpKSx0KGUsMjQsMCxvLmJiKGUsMjUpLnBhbmVsLl9oZWFkZXJJZCxvLmJiKGUsMjUpLnBhbmVsLmRpc2FibGVkPy0xOjAsby5iYihlLDI1KS5fZ2V0UGFuZWxJZCgpLG8uYmIoZSwyNSkuX2lzRXhwYW5kZWQoKSxvLmJiKGUsMjUpLnBhbmVsLmRpc2FibGVkLG8uYmIoZSwyNSkuX2lzRXhwYW5kZWQoKSx0KGUsMjcsMCxvLmJiKGUsMjUpLl9nZXRFeHBhbmRlZFN0YXRlKCksdChlLDI2LDAsby5iYihlLDI1KS5jb2xsYXBzZWRIZWlnaHQsby5iYihlLDI1KS5leHBhbmRlZEhlaWdodCkpKX0pfXZhciAkcz1vLk5hKCJhcHAtc2l0ZW1hcCIsWXMsZnVuY3Rpb24odCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwxLCJhcHAtc2l0ZW1hcCIsW10sbnVsbCxudWxsLG51bGwsWHMsS3MpKSxvLlFhKDEsMTE0Njg4LG51bGwsMCxZcyxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLEpzPW4oIjhkU2EiKSx0bD1uKCJQSEdPIiksZWw9bigiOUFzaiIpLG5sPW4oIkJnV0siKSxpbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLHJsPW8uUGEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBvbCh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEzLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsbnVsbCxbIlByb2plY3QgRGVzaWduIl0pKSwodCgpKCksby5SYSgzLDAsbnVsbCxudWxsLDEwLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxtLmQsbS5hKSksby5RYSg0LDQ5MTUyLG51bGwsMCxiLmEsW10sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSwwLFsiIFRlc3QiXSkpLCh0KCkoKSxvLlJhKDYsMCxudWxsLDAsMSwicmVmZXJlbmNlLWJveCIsW1sic2hvcnRoYW5kIiwiVGVzdDIwMTgiXV0sbnVsbCxudWxsLG51bGwsSnMuYyxKcy5iKSksby5RYSg3LDExNDY4OCxudWxsLDAsdGwuYSxbZWwuYSxubC5hXSx7c2hvcnRoYW5kOlswLCJzaG9ydGhhbmQiXX0sbnVsbCksKHQoKSgpLG8uamIoLTEsMCxbIi4gQSBuZXcgdGVzdCAiXSkpLCh0KCkoKSxvLlJhKDksMCxudWxsLDAsMSwicmVmZXJlbmNlLWJveCIsW1sic2hvcnRoYW5kIiwiRXhhbXBsZTIwMTgiXV0sbnVsbCxudWxsLG51bGwsSnMuYyxKcy5iKSksby5RYSgxMCwxMTQ2ODgsbnVsbCwwLHRsLmEsW2VsLmEsbmwuYV0se3Nob3J0aGFuZDpbMCwic2hvcnRoYW5kIl19LG51bGwpLCh0KCkoKSxvLlJhKDExLDAsbnVsbCwwLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxMiwwLG51bGwsMCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMTMsMCxudWxsLDAsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpXSxmdW5jdGlvbih0LGUpe3QoZSw3LDAsIlRlc3QyMDE4IiksdChlLDEwLDAsIkV4YW1wbGUyMDE4Iil9LG51bGwpfXZhciBhbD1vLk5hKCJhcHAtcHJvamVjdC1kZXRhaWxzIixpbCxmdW5jdGlvbih0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1wcm9qZWN0LWRldGFpbHMiLFtdLG51bGwsbnVsbCxudWxsLG9sLHJsKSksby5RYSgxLDExNDY4OCxudWxsLDAsaWwsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxzbD1uKCJidWp0IiksbGw9bigiVW9kSCIpLHVsPW4oImRXWmciKSxjbD1uKCJ3RncxIiksZmw9bigiTXIrWCIpLGRsPW4oIlNNc20iKSxobD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLHBsPW8uUGEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LnNjcmVlbnNob3RbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBtbCh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDE2LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsbnVsbCxbIlNvZnR3YXJlIl0pKSwodCgpKCksby5SYSgzLDAsbnVsbCxudWxsLDEzLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxtLmQsbS5hKSksby5RYSg0LDQ5MTUyLG51bGwsMCxiLmEsW10sbnVsbCxudWxsKSwodCgpKCksby5SYSg1LDAsbnVsbCwwLDUsImEiLFtbImhyZWYiLCJodHRwOi8vZ29wcy1pZ2VtLnMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20vIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdXSxbWzEsInRhYmluZGV4IiwwXSxbMSwiZGlzYWJsZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKGk9ITEhPT1vLmJiKHQsNikuX2hhbHREaXNhYmxlZEV2ZW50cyhuKSYmaSksaX0sc2wuYyxzbC5hKSksby5RYSg2LDE4MDIyNCxudWxsLDAsbGwuYSxbdWwuYSxXcy5iLG8uayxbMixjbC5hXV0sbnVsbCxudWxsKSwodCgpKCksby5SYSg3LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGZsLmIsZmwuYSkpLG8uUWEoOCw2Mzg5NzYsbnVsbCwwLGRsLmEsW28uayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmpiKC0xLDAsWyJvcGVuX2luX25ldyJdKSksKHQoKSgpLG8uamIoLTEsMCxbIiBQbGFzbWlkIFNrZXRjaGVyIHdlYnNpdGUiXSkpLCh0KCkoKSxvLlJhKDExLDAsbnVsbCwwLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxMiwwLG51bGwsMCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsMCxbIiBCZXN0IHZpZXdlZCBvbiB3aWRlc2NyZWVuIDE5MjAqMTA4MCwgZWxzZSB6b29tIG91dCB0byBoYXZlIHRoZSBwYWdlIGluIG9uZSBzY3JlZW4uIl0pKSwodCgpKCksby5SYSgxNCwwLG51bGwsMCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMTUsMCxudWxsLDAsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDE2LDAsbnVsbCwwLDAsImltZyIsW1siY2xhc3MiLCJzY3JlZW5zaG90Il0sWyJzcmMiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy83Lzc0L1QtLUdPX1BhcmlzLVNhY2xheS0tcGxhc21pZF9za2V0Y2hlcl9zY3JlZW5zaG90MS5wbmciXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSldLGZ1bmN0aW9uKHQsZSl7dChlLDgsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxvLmJiKGUsNikuZGlzYWJsZWQ/LTE6by5iYihlLDYpLnRhYkluZGV4fHwwLG8uYmIoZSw2KS5kaXNhYmxlZHx8bnVsbCxvLmJiKGUsNikuZGlzYWJsZWQudG9TdHJpbmcoKSwiTm9vcEFuaW1hdGlvbnMiPT09by5iYihlLDYpLl9hbmltYXRpb25Nb2RlKSx0KGUsNywwLG8uYmIoZSw4KS5pbmxpbmUpfSl9dmFyIGJsPW8uTmEoImFwcC1jb21wdXRpbmctc2VjdGlvbiIsaGwsZnVuY3Rpb24odCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwxLCJhcHAtY29tcHV0aW5nLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLG1sLHBsKSksby5RYSgxLDExNDY4OCxudWxsLDAsaGwsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSx5bD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLHZsPW8uUGEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBnbCh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigtMSxudWxsLFsiTW9kZWxpbmciXSkpLCh0KCkoKSxvLlJhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsbS5kLG0uYSkpLG8uUWEoNCw0OTE1MixudWxsLDAsYi5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIF9sPW8uTmEoImFwcC1tb2RlbGluZyIseWwsZnVuY3Rpb24odCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwxLCJhcHAtbW9kZWxpbmciLFtdLG51bGwsbnVsbCxudWxsLGdsLHZsKSksby5RYSgxLDExNDY4OCxudWxsLDAseWwsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSx3bD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLHhsPW8uUGEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBDbCh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigtMSxudWxsLFsiSHVtYW4gUHJhY3RpY2VzIl0pKSwodCgpKCksby5SYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLG0uZCxtLmEpKSxvLlFhKDQsNDkxNTIsbnVsbCwwLGIuYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBTbD1vLk5hKCJhcHAtaHVtYW4tcHJhY3RpY2Utc2VjdGlvbiIsd2wsZnVuY3Rpb24odCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwxLCJhcHAtaHVtYW4tcHJhY3RpY2Utc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwsQ2wseGwpKSxvLlFhKDEsMTE0Njg4LG51bGwsMCx3bCxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLE9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksRWw9by5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGtsKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJDb2xsYWJvcmF0aW9ucyJdKSksKHQoKSgpLG8uUmEoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxtLmQsbS5hKSksby5RYSg0LDQ5MTUyLG51bGwsMCxiLmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgamw9by5OYSgiYXBwLWNvbGxhYm9yYXRpb25zIixPbCxmdW5jdGlvbih0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1jb2xsYWJvcmF0aW9ucyIsW10sbnVsbCxudWxsLG51bGwsa2wsRWwpKSxvLlFhKDEsMTE0Njg4LG51bGwsMCxPbCxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLElsPW4oIkJIbmQiKSxUbD1uKCJ5NHFTIiksUmw9bigiL2RPNiIpLEFsPW4oIldmNHAiKSxQbD1uKCJ0UlRXIiksRGw9bigic2VQMyIpLE1sPW4oIkZ6cWMiKSxObD1uKCJnSWNZIiksTGw9bigicEltMyIpLEZsPW4oIm42Z0ciKSxWbD1uKCI2YmxGIiksemw9bigiSzlJYSIpLEJsPW4oIkdpM2kiKSxVbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI/bnVsbDpuZXcgTXV0YXRpb25PYnNlcnZlcih0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEhsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeT10LHRoaXMuX29ic2VydmVkRWxlbWVudHM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX29ic2VydmVkRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0Ll9jbGVhbnVwT2JzZXJ2ZXIobil9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBWbC5hLmNyZWF0ZShmdW5jdGlvbihuKXt2YXIgaT1lLl9vYnNlcnZlRWxlbWVudCh0KS5zdWJzY3JpYmUobik7cmV0dXJuIGZ1bmN0aW9uKCl7aS51bnN1YnNjcmliZSgpLGUuX3Vub2JzZXJ2ZUVsZW1lbnQodCl9fSl9LHQucHJvdG90eXBlLl9vYnNlcnZlRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyh0KSl0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KS5jb3VudCsrO2Vsc2V7dmFyIGU9bmV3IHpsLmEsbj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUoZnVuY3Rpb24odCl7cmV0dXJuIGUubmV4dCh0KX0pO24mJm4ub2JzZXJ2ZSh0LHtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5zZXQodCx7b2JzZXJ2ZXI6bixzdHJlYW06ZSxjb3VudDoxfSl9cmV0dXJuIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KHQpLnN0cmVhbX0sdC5wcm90b3R5cGUuX3Vub2JzZXJ2ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXModCkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KHQpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIodCkpfSx0LnByb3RvdHlwZS5fY2xlYW51cE9ic2VydmVyPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKHQpKXt2YXIgZT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldCh0KSxuPWUub2JzZXJ2ZXIsaT1lLnN0cmVhbTtuJiZuLmRpc2Nvbm5lY3QoKSxpLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUodCl9fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5ZKShVbCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxxbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2NvbnRlbnRPYnNlcnZlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLmV2ZW50PW5ldyBvLm4sdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KEZsLmMpKHQpLHRoaXMuX2Rpc2FibGVkP3RoaXMuX3Vuc3Vic2NyaWJlKCk6dGhpcy5fc3Vic2NyaWJlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZWJvdW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJvdW5jZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2RlYm91bmNlPU9iamVjdChGbC5lKSh0KSx0aGlzLl9zdWJzY3JpYmUoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9ufHx0aGlzLmRpc2FibGVkfHx0aGlzLl9zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl91bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl91bnN1YnNjcmliZSgpO3ZhciBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fY3VycmVudFN1YnNjcmlwdGlvbj0odC5kZWJvdW5jZT9lLnBpcGUoT2JqZWN0KEJsLmEpKHQuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodC5ldmVudCl9KX0sdC5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbiYmdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0fSgpLFFsPWZ1bmN0aW9uKCl7fSxHbD1vLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1mb3JtLWZpZWxke2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxke3RleHQtYWxpZ246cmlnaHR9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0ubWF0LWZvcm0tZmllbGQtcHJlZml4LC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXg6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtaW5maXh7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OmF1dG87bWluLXdpZHRoOjA7d2lkdGg6MTgwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsdHJhbnNwYXJlbnQpfX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Zm9udDppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGNvbG9yIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSx3aWR0aCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7ZGlzcGxheTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDA7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1lbXB0eS5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2s7dHJhbnNpdGlvbjpub25lfS5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWlucHV0LXNlcnZlcltwbGFjZWhvbGRlcl06bm90KDpwbGFjZWhvbGRlci1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQtbGFiZWw6bm90KC5tYXQtZm9ybS1maWVsZC1lbXB0eSl7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zZm9ybTpzY2FsZVkoMS4wMDAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoLjUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGN1YmljLWJlemllciguNTUsMCwuNTUsLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLG9wYWNpdHkgLjFzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJhY2tncm91bmQtY29sb3IgLjNzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb257d2lkdGg6MWVtO2hlaWdodDoxZW07Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlcntkaXNwbGF5OmZsZXh9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2Vye2ZsZXg6MSAwIDFlbX0ubWF0LWVycm9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO3BhZGRpbmc6Ljc1ZW0gLjc1ZW0gMCAuNzVlbX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6c29saWQgMXB4fX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtjb250ZW50OicnO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjFweDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbDpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246b3BhY2l0eSAuNnMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye3BhZGRpbmc6MCAxZW19IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoMTAwcHgpOy1tcy10cmFuc2Zvcm06bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue3dpZHRoOjFlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257Zm9udDppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDoxcHh9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtcmlwcGxle3RvcDowO2hlaWdodDoycHh9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHh9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvcmRlci10b3Atc3R5bGU6ZG90dGVkO2JvcmRlci10b3Atd2lkdGg6MnB4fX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcnttYXJnaW46LjI1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmc6MCAuNzVlbSAwIC43NWVtO21hcmdpbi10b3A6LS4yNWVtO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7dG9wOi4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDouMjVlbTtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7bWluLXdpZHRoOjVweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItcmFkaXVzOjAgNXB4IDVweCAwO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6NXB4IDAgMCA1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7Ym9yZGVyLXJhZGl1czouMDAwMDAxcHg7Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLWxlZnQtc3R5bGU6bm9uZTtib3JkZXItcmlnaHQtc3R5bGU6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItd2lkdGg6MnB4O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4zcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC42cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre29wYWNpdHk6MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntwYWRkaW5nOjAgMWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC1vdXRsaW5le3RyYW5zaXRpb246bm9uZX0iLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtZmxleHtwYWRkaW5nLXRvcDouNzVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2hlaWdodDoxcHh9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDFweH19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDoycHh9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1wb3NpdGlvbjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3JkZXItdG9wLXN0eWxlOmRvdHRlZDtib3JkZXItdG9wLXdpZHRoOjJweH19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgLjZzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwiLm1hdC1pbnB1dC1lbGVtZW50e2ZvbnQ6aW5oZXJpdDtiYWNrZ3JvdW5kOjAgMDtjb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWFsaWduOmluaGVyaXR9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtY2xlYXIsLm1hdC1pbnB1dC1lbGVtZW50OjotbXMtcmV2ZWFse2Rpc3BsYXk6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQsLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYXBzLWxvY2staW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jb250YWN0cy1hdXRvLWZpbGwtYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jcmVkZW50aWFscy1hdXRvLWZpbGwtYnV0dG9ue3Zpc2liaWxpdHk6aGlkZGVufS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZS1sb2NhbF06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9d2Vla106OmFmdGVye2NvbnRlbnQ6JyAnO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcnt0cmFuc2l0aW9uOmNvbG9yIC40cyAuMTMzcyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpjb2xvciAuNHMgLjEzM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSl9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgLjRzIC4xMzNzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpfS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpjb2xvciAuNHMgLjEzM3MgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSl9Lm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfSJdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJ0cmFuc2l0aW9uTWVzc2FnZXMiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImVudGVyIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e29wYWNpdHk6MSx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCUpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6InZvaWQgPT4gZW50ZXIiLGFuaW1hdGlvbjpbe3R5cGU6NixzdHlsZXM6e29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTEwMCUpIn0sb2Zmc2V0Om51bGx9LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikifV0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIFpsKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMSwwLG51bGwsbnVsbCwzLCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtb3V0bGluZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgyLDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDMsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDQsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDUsMCxudWxsLG51bGwsMywiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUgbWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSg2LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDcsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2FwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDgsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIFdsKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXByZWZpeCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLmFiKG51bGwsMCldLG51bGwsbnVsbCl9ZnVuY3Rpb24gWWwodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLmFiKG51bGwsMiksKHQoKSgpLG8uamIoMixudWxsLFsiIiwiIl0pKV0sbnVsbCxmdW5jdGlvbih0LGUpe3QoZSwyLDAsZS5jb21wb25lbnQuX2NvbnRyb2wucGxhY2Vob2xkZXIpfSl9ZnVuY3Rpb24gS2wodCl7cmV0dXJuIG8ubGIoMCxbby5hYihudWxsLDMpLCh0KCkoKSxvLklhKDAsbnVsbCxudWxsLDApKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBYbCh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2xhc3MiLCJtYXQtcGxhY2Vob2xkZXItcmVxdWlyZWQgbWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJceGEwKiJdKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gJGwodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLFtbNCwwXSxbImxhYmVsIiwxXV0sbnVsbCw4LCJsYWJlbCIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCJdXSxbWzgsImlkIiwwXSxbMSwiZm9yIiwwXSxbMSwiYXJpYS1vd25zIiwwXSxbMiwibWF0LWVtcHR5IixudWxsXSxbMiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLG51bGxdLFsyLCJtYXQtYWNjZW50IixudWxsXSxbMiwibWF0LXdhcm4iLG51bGxdXSxbW251bGwsImNka09ic2VydmVDb250ZW50Il1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMDtyZXR1cm4iY2RrT2JzZXJ2ZUNvbnRlbnQiPT09ZSYmKGk9ITEhPT10LmNvbXBvbmVudC51cGRhdGVPdXRsaW5lR2FwKCkmJmkpLGl9LG51bGwsbnVsbCkpLG8uUWEoMSwxNjM4NCxudWxsLDAscy5wLFtdLHtuZ1N3aXRjaDpbMCwibmdTd2l0Y2giXX0sbnVsbCksby5RYSgyLDExOTYwMzIsbnVsbCwwLHFsLFtIbCxvLmssby56XSxudWxsLHtldmVudDoiY2RrT2JzZXJ2ZUNvbnRlbnQifSksKHQoKSgpLG8uSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxZbCkpLG8uUWEoNCwyNzg1MjgsbnVsbCwwLHMucSxbby5RLG8uTixzLnBdLHtuZ1N3aXRjaENhc2U6WzAsIm5nU3dpdGNoQ2FzZSJdfSxudWxsKSwodCgpKCksby5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLEtsKSksby5RYSg2LDI3ODUyOCxudWxsLDAscy5xLFtvLlEsby5OLHMucF0se25nU3dpdGNoQ2FzZTpbMCwibmdTd2l0Y2hDYXNlIl19LG51bGwpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsWGwpKSxvLlFhKDgsMTYzODQsbnVsbCwwLHMubCxbby5RLG8uTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxuLl9oYXNMYWJlbCgpKSx0KGUsNCwwLCExKSx0KGUsNiwwLCEwKSx0KGUsOCwwLCFuLmhpZGVSZXF1aXJlZE1hcmtlciYmbi5fY29udHJvbC5yZXF1aXJlZCYmIW4uX2NvbnRyb2wuZGlzYWJsZWQpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwwLDAsbi5fbGFiZWxJZCxuLl9jb250cm9sLmlkLG4uX2NvbnRyb2wuaWQsbi5fY29udHJvbC5lbXB0eSYmIW4uX3Nob3VsZEFsd2F5c0Zsb2F0LG4uX2NvbnRyb2wuZW1wdHkmJiFuLl9zaG91bGRBbHdheXNGbG9hdCwiYWNjZW50Ij09bi5jb2xvciwid2FybiI9PW4uY29sb3IpfSl9ZnVuY3Rpb24gSmwodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtc3VmZml4Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uYWIobnVsbCw0KV0sbnVsbCxudWxsKX1mdW5jdGlvbiB0dSh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsW1sxLDBdLFsidW5kZXJsaW5lIiwxXV0sbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDEsMCxudWxsLG51bGwsMCwic3BhbiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1yaXBwbGUiXV0sW1syLCJtYXQtYWNjZW50IixudWxsXSxbMiwibWF0LXdhcm4iLG51bGxdXSxudWxsLG51bGwsbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLCJhY2NlbnQiPT1uLmNvbG9yLCJ3YXJuIj09bi5jb2xvcil9KX1mdW5jdGlvbiBldSh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsImRpdiIsW10sW1syNCwiQHRyYW5zaXRpb25NZXNzYWdlcyIsMF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLmFiKG51bGwsNSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSl9KX1mdW5jdGlvbiBudSh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtaGludCJdXSxbWzgsImlkIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKDEsbnVsbCxbIiIsIiJdKSldLG51bGwsZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLG4uX2hpbnRMYWJlbElkKSx0KGUsMSwwLG4uaGludExhYmVsKX0pfWZ1bmN0aW9uIGl1KHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsNSwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdXSxbWzI0LCJAdHJhbnNpdGlvbk1lc3NhZ2VzIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbnUpKSxvLlFhKDIsMTYzODQsbnVsbCwwLHMubCxbby5RLG8uTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksby5hYihudWxsLDYpLCh0KCkoKSxvLlJhKDQsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uYWIobnVsbCw3KV0sZnVuY3Rpb24odCxlKXt0KGUsMiwwLGUuY29tcG9uZW50LmhpbnRMYWJlbCl9LGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpfSl9ZnVuY3Rpb24gcnUodCl7cmV0dXJuIG8ubGIoMixbby5oYig2NzEwODg2NDAsMSx7dW5kZXJsaW5lUmVmOjB9KSxvLmhiKDQwMjY1MzE4NCwyLHtfY29ubmVjdGlvbkNvbnRhaW5lclJlZjowfSksby5oYig0MDI2NTMxODQsMyx7X2lucHV0Q29udGFpbmVyUmVmOjB9KSxvLmhiKDY3MTA4ODY0MCw0LHtfbGFiZWw6MH0pLCh0KCkoKSxvLlJhKDQsMCxudWxsLG51bGwsMjAsImRpdiIsW1siY2xhc3MiLCJtYXQtZm9ybS1maWVsZC13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDUsMCxbWzIsMF0sWyJjb25uZWN0aW9uQ29udGFpbmVyIiwxXV0sbnVsbCwxMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLWZsZXgiXV0sbnVsbCxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMCxyPXQuY29tcG9uZW50O3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PShyLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2smJnIuX2NvbnRyb2wub25Db250YWluZXJDbGljayhuKSkmJmkpLGl9LG51bGwsbnVsbCkpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsWmwpKSxvLlFhKDcsMTYzODQsbnVsbCwwLHMubCxbby5RLG8uTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksKHQoKSgpLG8uSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxXbCkpLG8uUWEoOSwxNjM4NCxudWxsLDAscy5sLFtvLlEsby5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksby5SYSgxMCwwLFtbMywwXSxbImlucHV0Q29udGFpbmVyIiwxXV0sbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtaW5maXgiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5hYihudWxsLDEpLCh0KCkoKSxvLlJhKDEyLDAsbnVsbCxudWxsLDIsInNwYW4iLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLCRsKSksby5RYSgxNCwxNjM4NCxudWxsLDAscy5sLFtvLlEsby5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksby5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLEpsKSksby5RYSgxNiwxNjM4NCxudWxsLDAscy5sLFtvLlEsby5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksby5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLHR1KSksby5RYSgxOCwxNjM4NCxudWxsLDAscy5sLFtvLlEsby5OXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksby5SYSgxOSwwLG51bGwsbnVsbCw1LCJkaXYiLFtbImNsYXNzIiwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSgyMCwxNjM4NCxudWxsLDAscy5wLFtdLHtuZ1N3aXRjaDpbMCwibmdTd2l0Y2giXX0sbnVsbCksKHQoKSgpLG8uSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxldSkpLG8uUWEoMjIsMjc4NTI4LG51bGwsMCxzLnEsW28uUSxvLk4scy5wXSx7bmdTd2l0Y2hDYXNlOlswLCJuZ1N3aXRjaENhc2UiXX0sbnVsbCksKHQoKSgpLG8uSWEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxpdSkpLG8uUWEoMjQsMjc4NTI4LG51bGwsMCxzLnEsW28uUSxvLk4scy5wXSx7bmdTd2l0Y2hDYXNlOlswLCJuZ1N3aXRjaENhc2UiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDcsMCwib3V0bGluZSI9PW4uYXBwZWFyYW5jZSksdChlLDksMCxuLl9wcmVmaXhDaGlsZHJlbi5sZW5ndGgpLHQoZSwxNCwwLG4uX2hhc0Zsb2F0aW5nTGFiZWwoKSksdChlLDE2LDAsbi5fc3VmZml4Q2hpbGRyZW4ubGVuZ3RoKSx0KGUsMTgsMCwib3V0bGluZSIhPW4uYXBwZWFyYW5jZSksdChlLDIwLDAsbi5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSksdChlLDIyLDAsImVycm9yIiksdChlLDI0LDAsImhpbnQiKX0sbnVsbCl9dmFyIG91PW4oIm1yU0ciKSxhdT1uKCJHNUoxIiksc3U9bigiYm5lNSIpLGx1PShuKCJSbmV5IiksbigibnkyNCIpKSx1dT0hIU9iamVjdCh1bC5kKSgpJiZ7cGFzc2l2ZTohMH0sY3U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcGxhdGZvcm09dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gYXUuYTt2YXIgbj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQodCk7aWYobilyZXR1cm4gbi5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO3ZhciBpPW5ldyB6bC5hLHI9ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiLG89ZnVuY3Rpb24obil7ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IiE9PW4uYW5pbWF0aW9uTmFtZXx8dC5jbGFzc0xpc3QuY29udGFpbnMocik/ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1uLmFuaW1hdGlvbk5hbWUmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKHIpJiYodC5jbGFzc0xpc3QucmVtb3ZlKHIpLGUuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gaS5uZXh0KHt0YXJnZXQ6bi50YXJnZXQsaXNBdXRvZmlsbGVkOiExfSl9KSk6KHQuY2xhc3NMaXN0LmFkZChyKSxlLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dCh7dGFyZ2V0Om4udGFyZ2V0LGlzQXV0b2ZpbGxlZDohMH0pfSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsbyx1dSksdC5jbGFzc0xpc3QuYWRkKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQiKX0pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLnNldCh0LHtzdWJqZWN0OmksdW5saXN0ZW46ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixvLHV1KX19KSxpLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5zdG9wTW9uaXRvcmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQodCk7ZSYmKGUudW5saXN0ZW4oKSxlLnN1YmplY3QuY29tcGxldGUoKSx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuc3RvcE1vbml0b3Jpbmcobil9KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVSkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWSkodWwuYSksT2JqZWN0KG8uWSkoby56KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGZ1PWZ1bmN0aW9uKCl7fSxkdT1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0saHU9MCxwdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyxhLHMsbCx1KXt2YXIgYz10LmNhbGwodGhpcyxhLHIsbyxpKXx8dGhpcztyZXR1cm4gYy5fZWxlbWVudFJlZj1lLGMuX3BsYXRmb3JtPW4sYy5uZ0NvbnRyb2w9aSxjLl9hdXRvZmlsbE1vbml0b3I9bCxjLl91aWQ9Im1hdC1pbnB1dC0iK2h1KyssYy5faXNTZXJ2ZXI9ITEsYy5mb2N1c2VkPSExLGMuc3RhdGVDaGFuZ2VzPW5ldyB6bC5hLGMuY29udHJvbFR5cGU9Im1hdC1pbnB1dCIsYy5hdXRvZmlsbGVkPSExLGMuX2Rpc2FibGVkPSExLGMuX3JlcXVpcmVkPSExLGMuX3R5cGU9InRleHQiLGMuX3JlYWRvbmx5PSExLGMuX25ldmVyRW1wdHlJbnB1dFR5cGVzPVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIl0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QodWwuYykoKS5oYXModCl9KSxjLl9pbnB1dFZhbHVlQWNjZXNzb3I9c3x8Yy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9Yy52YWx1ZSxjLmlkPWMuaWQsbi5JT1MmJnUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O2UudmFsdWV8fGUuc2VsZWN0aW9uU3RhcnR8fGUuc2VsZWN0aW9uRW5kfHwoZS5zZXRTZWxlY3Rpb25SYW5nZSgxLDEpLGUuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKSl9KX0pLGMuX2lzU2VydmVyPSFjLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsY31yZXR1cm4gT2JqZWN0KG91LmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5nQ29udHJvbCYmbnVsbCE9PXRoaXMubmdDb250cm9sLmRpc2FibGVkP3RoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KEZsLmMpKHQpLHRoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pZD10fHx0aGlzLl91aWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyZXF1aXJlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXF1aXJlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlcXVpcmVkPU9iamVjdChGbC5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHlwZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9dHx8InRleHQiLHRoaXMuX3ZhbGlkYXRlVHlwZSgpLCF0aGlzLl9pc1RleHRhcmVhKCkmJk9iamVjdCh1bC5jKSgpLmhhcyh0aGlzLl90eXBlKSYmKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50eXBlPXRoaXMuX3R5cGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCl7dCE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicmVhZG9ubHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZG9ubHl9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9yZWFkb25seT1PYmplY3QoRmwuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2F1dG9maWxsTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuYXV0b2ZpbGxlZD1lLmlzQXV0b2ZpbGxlZCx0LnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX0sZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9hdXRvZmlsbE1vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX0sZS5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dGhpcy5uZ0NvbnRyb2wmJnRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLHRoaXMuX2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfSxlLnByb3RvdHlwZS5fZm9jdXNDaGFuZ2VkPWZ1bmN0aW9uKHQpe3Q9PT10aGlzLmZvY3VzZWR8fHRoaXMucmVhZG9ubHl8fCh0aGlzLmZvY3VzZWQ9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlLnByb3RvdHlwZS5fb25JbnB1dD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmFsdWU7dGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZSE9PXQmJih0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlVHlwZT1mdW5jdGlvbigpe2lmKGR1LmluZGV4T2YodGhpcy5fdHlwZSk+LTEpdGhyb3cgRXJyb3IoJ0lucHV0IHR5cGUgIicrdGhpcy5fdHlwZSsiXCIgaXNuJ3Qgc3VwcG9ydGVkIGJ5IG1hdElucHV0LiIpfSxlLnByb3RvdHlwZS5faXNOZXZlckVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSk+LTF9LGUucHJvdG90eXBlLl9pc0JhZElucHV0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiB0JiZ0LmJhZElucHV0fSxlLnByb3RvdHlwZS5faXNUZXh0YXJlYT1mdW5jdGlvbigpe3JldHVybiJ0ZXh0YXJlYSI9PT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlbXB0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hvdWxkTGFiZWxGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvY3VzZWR8fCF0aGlzLmVtcHR5fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnNldERlc2NyaWJlZEJ5SWRzPWZ1bmN0aW9uKHQpe3RoaXMuX2FyaWFEZXNjcmliZWRieT10LmpvaW4oIiAiKX0sZS5wcm90b3R5cGUub25Db250YWluZXJDbGljaz1mdW5jdGlvbigpe3RoaXMuZm9jdXMoKX0sZX0oT2JqZWN0KEFsLkMpKGZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9bix0aGlzLm5nQ29udHJvbD1pfSkpLG11PWZ1bmN0aW9uKCl7fSxidT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLnJlZm1hbj10LHRoaXMuZGlzcGxheWVkQ29sdW1ucz1bImluZGV4Iiwic2hvcnRoYW5kIl0sdC5yZWZsaXN0LnN1YnNjcmliZShmdW5jdGlvbih0KXtlLmRhdGFzb3VyY2VfcmVmZXJlbmNlcz1uZXcgSWwubCh0KX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSl9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5RmlsdGVyPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YXNvdXJjZV9yZWZlcmVuY2VzLmZpbHRlcj10LnRyaW0oKS50b0xvd2VyQ2FzZSgpfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSx5dT1vLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5yZWZlcmVuY2VzLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlYXJjaC1maWVsZFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX10ci5leGFtcGxlLWRldGFpbC1yb3dbX25nY29udGVudC0lQ09NUCVde2hlaWdodDowfS5leGFtcGxlLWVsZW1lbnQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tLXdpZHRoOjB9dHIuZXhhbXBsZS1lbGVtZW50LXJvd1tfbmdjb250ZW50LSVDT01QJV06bm90KC5leGFtcGxlLWV4cGFuZGVkLXJvdyk6aG92ZXJ7YmFja2dyb3VuZDojZjVmNWY1fXRyLmV4YW1wbGUtZWxlbWVudC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCguZXhhbXBsZS1leHBhbmRlZC1yb3cpOmFjdGl2ZXtiYWNrZ3JvdW5kOiNlZmVmZWZ9Il1dLGRhdGE6e319KTtmdW5jdGlvbiB2dSh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDIsInRoIixbWyJjbGFzcyIsIm1hdC1oZWFkZXItY2VsbCJdLFsibWF0LWhlYWRlci1jZWxsIiwiIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMSwxNjM4NCxudWxsLDAsSWwuZSxbVGwuZCxvLmtdLG51bGwsbnVsbCksKHQoKSgpLG8uamIoLTEsbnVsbCxbIiBSZWYuICMgIl0pKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBndSh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDIsInRkIixbWyJjbGFzcyIsIm1hdC1jZWxsIl0sWyJtYXQtY2VsbCIsIiJdLFsicm9sZSIsImdyaWRjZWxsIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMSwxNjM4NCxudWxsLDAsSWwuYSxbVGwuZCxvLmtdLG51bGwsbnVsbCksKHQoKSgpLG8uamIoMixudWxsLFsiICIsIiAiXSkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDIsMCxlLmNvbnRleHQuJGltcGxpY2l0LmluZGV4KX0pfWZ1bmN0aW9uIF91KHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsMiwidGgiLFtbImNsYXNzIiwibWF0LWhlYWRlci1jZWxsIl0sWyJtYXQtaGVhZGVyLWNlbGwiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSgxLDE2Mzg0LG51bGwsMCxJbC5lLFtUbC5kLG8ua10sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSxudWxsLFsiIFNob3J0aGFuZCAiXSkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIHd1KHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsMiwidGQiLFtbImNsYXNzIiwibWF0LWNlbGwiXSxbIm1hdC1jZWxsIiwiIl0sWyJyb2xlIiwiZ3JpZGNlbGwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSgxLDE2Mzg0LG51bGwsMCxJbC5hLFtUbC5kLG8ua10sbnVsbCxudWxsKSwodCgpKCksby5qYigyLG51bGwsWyIgIiwiICJdKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMiwwLGUuY29udGV4dC4kaW1wbGljaXQuc2hvcnRoYW5kKX0pfWZ1bmN0aW9uIHh1KHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsMiwidGgiLFtbImNsYXNzIiwibWF0LWhlYWRlci1jZWxsIl0sWyJtYXQtaGVhZGVyLWNlbGwiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSgxLDE2Mzg0LG51bGwsMCxJbC5lLFtUbC5kLG8ua10sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSxudWxsLFsiIFRpdGxlICJdKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gQ3UodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwzLCJ0ZCIsW1siY2xhc3MiLCJtYXQtY2VsbCJdLFsibWF0LWNlbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlFhKDEsMTYzODQsbnVsbCwwLElsLmEsW1RsLmQsby5rXSxudWxsLG51bGwpLCh0KCkoKSxvLlJhKDIsMCxudWxsLG51bGwsMSwic3BhbiIsW1sic3R5bGUiLCJmb250LXdlaWdodDogYm9sZDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoMyxudWxsLFsiIiwiIl0pKV0sbnVsbCxmdW5jdGlvbih0LGUpe3QoZSwzLDAsZS5jb250ZXh0LiRpbXBsaWNpdC50aXRsZSl9KX1mdW5jdGlvbiBTdSh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDUsIm1hdC1jaGlwIixbWyJjbGFzcyIsIm1hdC1jaGlwIl0sWyJyb2xlIiwib3B0aW9uIl1dLFtbMSwidGFiaW5kZXgiLDBdLFsyLCJtYXQtY2hpcC1zZWxlY3RlZCIsbnVsbF0sWzIsIm1hdC1jaGlwLXdpdGgtYXZhdGFyIixudWxsXSxbMiwibWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uIixudWxsXSxbMiwibWF0LWNoaXAtZGlzYWJsZWQiLG51bGxdLFsxLCJkaXNhYmxlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsxLCJhcmlhLXNlbGVjdGVkIiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PW8uYmIodCwxKS5faGFuZGxlQ2xpY2sobikmJmkpLCJrZXlkb3duIj09PWUmJihpPSExIT09by5iYih0LDEpLl9oYW5kbGVLZXlkb3duKG4pJiZpKSwiZm9jdXMiPT09ZSYmKGk9ITEhPT1vLmJiKHQsMSkuZm9jdXMoKSYmaSksImJsdXIiPT09ZSYmKGk9ITEhPT1vLmJiKHQsMSkuX2JsdXIoKSYmaSksaX0sbnVsbCxudWxsKSksby5RYSgxLDE0NzQ1NixbWzI0LDRdXSwzLFJsLmIsW28uayxvLnosdWwuYSxbMixBbC5rXV0sbnVsbCxudWxsKSxvLmhiKDMzNTU0NDMyMCwyNSx7YXZhdGFyOjB9KSxvLmhiKDMzNTU0NDMyMCwyNix7dHJhaWxpbmdJY29uOjB9KSxvLmhiKDMzNTU0NDMyMCwyNyx7cmVtb3ZlSWNvbjowfSksKHQoKSgpLG8uamIoNSxudWxsLFsiIiwiIl0pKV0sbnVsbCxmdW5jdGlvbih0LGUpe3QoZSwwLDAsby5iYihlLDEpLmRpc2FibGVkP251bGw6LTEsby5iYihlLDEpLnNlbGVjdGVkLG8uYmIoZSwxKS5hdmF0YXIsby5iYihlLDEpLnRyYWlsaW5nSWNvbnx8by5iYihlLDEpLnJlbW92ZUljb24sby5iYihlLDEpLmRpc2FibGVkLG8uYmIoZSwxKS5kaXNhYmxlZHx8bnVsbCxvLmJiKGUsMSkuZGlzYWJsZWQudG9TdHJpbmcoKSxvLmJiKGUsMSkuYXJpYVNlbGVjdGVkKSx0KGUsNSwwLGUuY29udGV4dC4kaW1wbGljaXQpfSl9ZnVuY3Rpb24gT3UodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwyOSwidGQiLFtbImNsYXNzIiwibWF0LWNlbGwiXSxbIm1hdC1jZWxsIiwiIl0sWyJyb2xlIiwiZ3JpZGNlbGwiXV0sW1sxLCJjb2xzcGFuIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMSwxNjM4NCxudWxsLDAsSWwuYSxbVGwuZCxvLmtdLG51bGwsbnVsbCksKHQoKSgpLG8uUmEoMiwwLG51bGwsbnVsbCwyNywiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgzLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtc3ViaGVhZGluZy0xIl0sWyJzdHlsZSIsIm1hcmdpbi1ib3R0b20gOiAwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKDQsbnVsbCxbIiIsIiJdKSksKHQoKSgpLG8uUmEoNSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LXRpdGxlIl0sWyJzdHlsZSIsIm1hcmdpbi1ib3R0b20gOiAwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKDYsbnVsbCxbIiIsIiJdKSksKHQoKSgpLG8uUmEoNywwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LXN1YmhlYWRpbmctMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYig4LG51bGwsWyIiLCIiXSkpLCh0KCkoKSxvLlJhKDksMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsImV4YW1wbGUtZWxlbWVudC1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigxMCxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSxvLlJhKDExLDAsbnVsbCxudWxsLDAsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMTIsMCxudWxsLG51bGwsNywiZGl2IixbWyJzdHlsZSIsImZsb2F0OiByaWdodDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMTMsMCxudWxsLG51bGwsNiwic3BhbiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMTQsMCxudWxsLG51bGwsNSwiYSIsW1sibWF0LXJhaXNlZC1idXR0b24iLCIiXV0sW1s4LCJocmVmIiw0XSxbMSwidGFiaW5kZXgiLDBdLFsxLCJkaXNhYmxlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PW8uYmIodCwxNSkuX2hhbHREaXNhYmxlZEV2ZW50cyhuKSYmaSksaX0sc2wuYyxzbC5hKSksby5RYSgxNSwxODAyMjQsbnVsbCwwLGxsLmEsW3VsLmEsV3MuYixvLmssWzIsY2wuYV1dLG51bGwsbnVsbCksKHQoKSgpLG8uUmEoMTYsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsZmwuYixmbC5hKSksby5RYSgxNyw2Mzg5NzYsbnVsbCwwLGRsLmEsW28uayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmpiKC0xLDAsWyJvcGVuX2luX25ldyJdKSksKHQoKSgpLG8uamIoLTEsMCxbIiBPcGVuIGFydGljbGUgcGFnZSJdKSksKHQoKSgpLG8uUmEoMjAsMCxudWxsLG51bGwsOSwicCIsW1siY2xhc3MiLCJtYXQtY2FwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigyMSxudWxsLFsiIiwiIFx1MjAxNCBkb2k6IiwiICJdKSksKHQoKSgpLG8uUmEoMjIsMCxudWxsLG51bGwsNywic3BhbiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMjMsMCxudWxsLG51bGwsNiwibWF0LWNoaXAtbGlzdCIsW1siY2xhc3MiLCJtYXQtY2hpcC1saXN0Il1dLFtbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWRlc2NyaWJlZGJ5IiwwXSxbMSwiYXJpYS1yZXF1aXJlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsxLCJhcmlhLWludmFsaWQiLDBdLFsxLCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsMF0sWzEsInJvbGUiLDBdLFsyLCJtYXQtY2hpcC1saXN0LWRpc2FibGVkIixudWxsXSxbMiwibWF0LWNoaXAtbGlzdC1pbnZhbGlkIixudWxsXSxbMiwibWF0LWNoaXAtbGlzdC1yZXF1aXJlZCIsbnVsbF0sWzEsImFyaWEtb3JpZW50YXRpb24iLDBdLFs4LCJpZCIsMF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKGk9ITEhPT1vLmJiKHQsMjUpLmZvY3VzKCkmJmkpLCJibHVyIj09PWUmJihpPSExIT09by5iYih0LDI1KS5fYmx1cigpJiZpKSwia2V5ZG93biI9PT1lJiYoaT0hMSE9PW8uYmIodCwyNSkuX2tleWRvd24obikmJmkpLGl9LFBsLmIsUGwuYSkpLG8uZ2IoNjE0NCxudWxsLERsLmMsbnVsbCxbUmwuY10pLG8uUWEoMjUsMTU1NjQ4MCxudWxsLDEsUmwuYyxbby5rLG8uaCxbMixNbC5iXSxbMixObC5jXSxbMixObC5hXSxBbC5kLFs4LG51bGxdXSxudWxsLG51bGwpLG8uaGIoNjAzOTc5Nzc2LDI0LHtjaGlwczoxfSksKHQoKSgpLG8uamIoLTEsMCxbIiBUYWdzOiAiXSkpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsMCwxLG51bGwsU3UpKSxvLlFhKDI5LDI3ODUyOCxudWxsLDAscy5rLFtvLlEsby5OLG8uc10se25nRm9yT2Y6WzAsIm5nRm9yT2YiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDE3LDApLHQoZSwyNSwwKSx0KGUsMjksMCxlLmNvbnRleHQuJGltcGxpY2l0LnRhZ3MpfSxmdW5jdGlvbih0LGUpe3QoZSwwLDAsZS5jb21wb25lbnQuZGlzcGxheWVkQ29sdW1ucy5sZW5ndGgpLHQoZSw0LDAsZS5jb250ZXh0LiRpbXBsaWNpdC5qb3VybmFsKSx0KGUsNiwwLGUuY29udGV4dC4kaW1wbGljaXQudGl0bGUpLHQoZSw4LDAsZS5jb250ZXh0LiRpbXBsaWNpdC5hdXRob3JzKSx0KGUsMTAsMCxlLmNvbnRleHQuJGltcGxpY2l0LmFic3RyYWN0KSx0KGUsMTQsMCxvLlRhKDEsIiIsZS5jb250ZXh0LiRpbXBsaWNpdC51cmwsIiIpLG8uYmIoZSwxNSkuZGlzYWJsZWQ/LTE6by5iYihlLDE1KS50YWJJbmRleHx8MCxvLmJiKGUsMTUpLmRpc2FibGVkfHxudWxsLG8uYmIoZSwxNSkuZGlzYWJsZWQudG9TdHJpbmcoKSwiTm9vcEFuaW1hdGlvbnMiPT09by5iYihlLDE1KS5fYW5pbWF0aW9uTW9kZSksdChlLDE2LDAsby5iYihlLDE3KS5pbmxpbmUpLHQoZSwyMSwwLGUuY29udGV4dC4kaW1wbGljaXQucHViRGV0YWlscyxlLmNvbnRleHQuJGltcGxpY2l0LmRvaSksdChlLDIzLDEsW28uYmIoZSwyNSkuX3RhYkluZGV4LG8uYmIoZSwyNSkuX2FyaWFEZXNjcmliZWRieXx8bnVsbCxvLmJiKGUsMjUpLnJlcXVpcmVkLnRvU3RyaW5nKCksby5iYihlLDI1KS5kaXNhYmxlZC50b1N0cmluZygpLG8uYmIoZSwyNSkuZXJyb3JTdGF0ZSxvLmJiKGUsMjUpLm11bHRpcGxlLG8uYmIoZSwyNSkucm9sZSxvLmJiKGUsMjUpLmRpc2FibGVkLG8uYmIoZSwyNSkuZXJyb3JTdGF0ZSxvLmJiKGUsMjUpLnJlcXVpcmVkLG8uYmIoZSwyNSkuYXJpYU9yaWVudGF0aW9uLG8uYmIoZSwyNSkuX3VpZF0pfSl9ZnVuY3Rpb24gRXUodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwyLCJ0ciIsW1siY2xhc3MiLCJtYXQtaGVhZGVyLXJvdyJdLFsibWF0LWhlYWRlci1yb3ciLCIiXSxbInJvbGUiLCJyb3ciXV0sbnVsbCxudWxsLG51bGwsTGwuZCxMbC5hKSksby5nYig2MTQ0LG51bGwsVGwuayxudWxsLFtJbC5nXSksby5RYSgyLDQ5MTUyLG51bGwsMCxJbC5nLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9ZnVuY3Rpb24ga3UodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwyLCJ0ciIsW1siY2xhc3MiLCJleGFtcGxlLWVsZW1lbnQtcm93IG1hdC1yb3ciXSxbIm1hdC1yb3ciLCIiXSxbInJvbGUiLCJyb3ciXV0sW1syLCJleGFtcGxlLWV4cGFuZGVkLXJvdyIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PSh0LmNvbXBvbmVudC5leHBhbmRlZEVsZW1lbnQ9dC5jb250ZXh0LiRpbXBsaWNpdCkmJmkpLGl9LExsLmUsTGwuYikpLG8uZ2IoNjE0NCxudWxsLFRsLm0sbnVsbCxbSWwuaV0pLG8uUWEoMiw0OTE1MixudWxsLDAsSWwuaSxbXSxudWxsLG51bGwpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5leHBhbmRlZEVsZW1lbnQ9PT1lLmNvbnRleHQuJGltcGxpY2l0KX0pfWZ1bmN0aW9uIGp1KHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsMiwidHIiLFtbImNsYXNzIiwiZXhhbXBsZS1kZXRhaWwtcm93IG1hdC1yb3ciXSxbIm1hdC1yb3ciLCIiXSxbInJvbGUiLCJyb3ciXV0sbnVsbCxudWxsLG51bGwsTGwuZSxMbC5iKSksby5nYig2MTQ0LG51bGwsVGwubSxudWxsLFtJbC5pXSksby5RYSgyLDQ5MTUyLG51bGwsMCxJbC5pLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9ZnVuY3Rpb24gSXUodCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCw3OCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJMaXN0IG9mIHJlZmVyZW5jZXMiXSkpLCh0KCkoKSxvLlJhKDMsMCxudWxsLG51bGwsNzUsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLG0uZCxtLmEpKSxvLlFhKDQsNDkxNTIsbnVsbCwwLGIuYSxbXSxudWxsLG51bGwpLCh0KCkoKSxvLlJhKDUsMCxudWxsLDAsMTEsIm1hdC1mb3JtLWZpZWxkIixbWyJjbGFzcyIsInNlYXJjaC1maWVsZCBtYXQtZm9ybS1maWVsZCJdXSxbWzIsIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSIsbnVsbF0sWzIsIm1hdC1mb3JtLWZpZWxkLWludmFsaWQiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIixudWxsXSxbMiwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLG51bGxdLFsyLCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixudWxsXSxbMiwibWF0LWZvY3VzZWQiLG51bGxdLFsyLCJtYXQtYWNjZW50IixudWxsXSxbMiwibWF0LXdhcm4iLG51bGxdLFsyLCJuZy11bnRvdWNoZWQiLG51bGxdLFsyLCJuZy10b3VjaGVkIixudWxsXSxbMiwibmctcHJpc3RpbmUiLG51bGxdLFsyLCJuZy1kaXJ0eSIsbnVsbF0sWzIsIm5nLXZhbGlkIixudWxsXSxbMiwibmctaW52YWxpZCIsbnVsbF0sWzIsIm5nLXBlbmRpbmciLG51bGxdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLG51bGwsbnVsbCxydSxHbCkpLG8uUWEoNiw3Mzg5MTg0LG51bGwsNyxEbC5iLFtvLmssby5oLFsyLEFsLmhdLFsyLE1sLmJdLFsyLERsLmFdLHVsLmEsby56LFsyLGNsLmFdXSxudWxsLG51bGwpLG8uaGIoMzM1NTQ0MzIwLDEse19jb250cm9sOjB9KSxvLmhiKDMzNTU0NDMyMCwyLHtfcGxhY2Vob2xkZXJDaGlsZDowfSksby5oYigzMzU1NDQzMjAsMyx7X2xhYmVsQ2hpbGQ6MH0pLG8uaGIoNjAzOTc5Nzc2LDQse19lcnJvckNoaWxkcmVuOjF9KSxvLmhiKDYwMzk3OTc3Niw1LHtfaGludENoaWxkcmVuOjF9KSxvLmhiKDYwMzk3OTc3Niw2LHtfcHJlZml4Q2hpbGRyZW46MX0pLG8uaGIoNjAzOTc5Nzc2LDcse19zdWZmaXhDaGlsZHJlbjoxfSksKHQoKSgpLG8uUmEoMTQsMCxudWxsLDEsMiwiaW5wdXQiLFtbImNsYXNzIiwibWF0LWlucHV0LWVsZW1lbnQgbWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbCJdLFsibWF0SW5wdXQiLCIiXSxbInBsYWNlaG9sZGVyIiwiU2VhcmNoIl1dLFtbMiwibWF0LWlucHV0LXNlcnZlciIsbnVsbF0sWzEsImlkIiwwXSxbMSwicGxhY2Vob2xkZXIiLDBdLFs4LCJkaXNhYmxlZCIsMF0sWzgsInJlcXVpcmVkIiwwXSxbOCwicmVhZE9ubHkiLDBdLFsxLCJhcmlhLWRlc2NyaWJlZGJ5IiwwXSxbMSwiYXJpYS1pbnZhbGlkIiwwXSxbMSwiYXJpYS1yZXF1aXJlZCIsMF1dLFtbbnVsbCwia2V5dXAiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJpbnB1dCJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITAscj10LmNvbXBvbmVudDtyZXR1cm4iYmx1ciI9PT1lJiYoaT0hMSE9PW8uYmIodCwxNSkuX2ZvY3VzQ2hhbmdlZCghMSkmJmkpLCJmb2N1cyI9PT1lJiYoaT0hMSE9PW8uYmIodCwxNSkuX2ZvY3VzQ2hhbmdlZCghMCkmJmkpLCJpbnB1dCI9PT1lJiYoaT0hMSE9PW8uYmIodCwxNSkuX29uSW5wdXQoKSYmaSksImtleXVwIj09PWUmJihpPSExIT09ci5hcHBseUZpbHRlcihuLnRhcmdldC52YWx1ZSkmJmkpLGl9LG51bGwsbnVsbCkpLG8uUWEoMTUsOTk5NDI0LG51bGwsMCxwdSxbby5rLHVsLmEsWzgsbnVsbF0sWzIsTmwuY10sWzIsTmwuYV0sQWwuZCxbOCxudWxsXSxjdSxvLnpdLHtwbGFjZWhvbGRlcjpbMCwicGxhY2Vob2xkZXIiXX0sbnVsbCksby5nYigyMDQ4LFtbMSw0XV0sRGwuYyxudWxsLFtwdV0pLCh0KCkoKSxvLlJhKDE3LDAsbnVsbCwwLDYxLCJ0YWJsZSIsW1siY2xhc3MiLCJyZWZlcmVuY2VzLXRhYmxlIG1hdC10YWJsZSJdLFsibWF0LXRhYmxlIiwiIl0sWyJtdWx0aVRlbXBsYXRlRGF0YVJvd3MiLCIiXV0sbnVsbCxudWxsLG51bGwsTGwuZixMbC5jKSksby5RYSgxOCwyMzQyOTEyLG51bGwsNCxJbC5rLFtvLnMsby5oLG8uayxbOCxudWxsXSxbMixNbC5iXV0se2RhdGFTb3VyY2U6WzAsImRhdGFTb3VyY2UiXSxtdWx0aVRlbXBsYXRlRGF0YVJvd3M6WzEsIm11bHRpVGVtcGxhdGVEYXRhUm93cyJdfSxudWxsKSxvLmhiKDYwMzk3OTc3Niw4LHtfY29udGVudENvbHVtbkRlZnM6MX0pLG8uaGIoNjAzOTc5Nzc2LDkse19jb250ZW50Um93RGVmczoxfSksby5oYig2MDM5Nzk3NzYsMTAse19jb250ZW50SGVhZGVyUm93RGVmczoxfSksby5oYig2MDM5Nzk3NzYsMTEse19jb250ZW50Rm9vdGVyUm93RGVmczoxfSksKHQoKSgpLG8uUmEoMjMsMCxudWxsLG51bGwsMTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMjQsMTYzODQsbnVsbCwzLElsLmMsW10se25hbWU6WzAsIm5hbWUiXX0sbnVsbCksby5oYigzMzU1NDQzMjAsMTIse2NlbGw6MH0pLG8uaGIoMzM1NTQ0MzIwLDEzLHtoZWFkZXJDZWxsOjB9KSxvLmhiKDMzNTU0NDMyMCwxNCx7Zm9vdGVyQ2VsbDowfSksby5nYigyMDQ4LFtbOCw0XV0sVGwuZCxudWxsLFtJbC5jXSksKHQoKSgpLG8uSWEoMCxudWxsLG51bGwsMixudWxsLHZ1KSksby5RYSgzMCwxNjM4NCxudWxsLDAsSWwuZixbby5OXSxudWxsLG51bGwpLG8uZ2IoMjA0OCxbWzEzLDRdXSxUbC5qLG51bGwsW0lsLmZdKSwodCgpKCksby5JYSgwLG51bGwsbnVsbCwyLG51bGwsZ3UpKSxvLlFhKDMzLDE2Mzg0LG51bGwsMCxJbC5iLFtvLk5dLG51bGwsbnVsbCksby5nYigyMDQ4LFtbMTIsNF1dLFRsLmIsbnVsbCxbSWwuYl0pLCh0KCkoKSxvLlJhKDM1LDAsbnVsbCxudWxsLDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlFhKDM2LDE2Mzg0LG51bGwsMyxJbC5jLFtdLHtuYW1lOlswLCJuYW1lIl19LG51bGwpLG8uaGIoMzM1NTQ0MzIwLDE1LHtjZWxsOjB9KSxvLmhiKDMzNTU0NDMyMCwxNix7aGVhZGVyQ2VsbDowfSksby5oYigzMzU1NDQzMjAsMTcse2Zvb3RlckNlbGw6MH0pLG8uZ2IoMjA0OCxbWzgsNF1dLFRsLmQsbnVsbCxbSWwuY10pLCh0KCkoKSxvLklhKDAsbnVsbCxudWxsLDIsbnVsbCxfdSkpLG8uUWEoNDIsMTYzODQsbnVsbCwwLElsLmYsW28uTl0sbnVsbCxudWxsKSxvLmdiKDIwNDgsW1sxNiw0XV0sVGwuaixudWxsLFtJbC5mXSksKHQoKSgpLG8uSWEoMCxudWxsLG51bGwsMixudWxsLHd1KSksby5RYSg0NSwxNjM4NCxudWxsLDAsSWwuYixbby5OXSxudWxsLG51bGwpLG8uZ2IoMjA0OCxbWzE1LDRdXSxUbC5iLG51bGwsW0lsLmJdKSwodCgpKCksby5SYSg0NywwLG51bGwsbnVsbCwxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSg0OCwxNjM4NCxudWxsLDMsSWwuYyxbXSx7bmFtZTpbMCwibmFtZSJdfSxudWxsKSxvLmhiKDMzNTU0NDMyMCwxOCx7Y2VsbDowfSksby5oYigzMzU1NDQzMjAsMTkse2hlYWRlckNlbGw6MH0pLG8uaGIoMzM1NTQ0MzIwLDIwLHtmb290ZXJDZWxsOjB9KSxvLmdiKDIwNDgsW1s4LDRdXSxUbC5kLG51bGwsW0lsLmNdKSwodCgpKCksby5JYSgwLG51bGwsbnVsbCwyLG51bGwseHUpKSxvLlFhKDU0LDE2Mzg0LG51bGwsMCxJbC5mLFtvLk5dLG51bGwsbnVsbCksby5nYigyMDQ4LFtbMTksNF1dLFRsLmosbnVsbCxbSWwuZl0pLCh0KCkoKSxvLklhKDAsbnVsbCxudWxsLDIsbnVsbCxDdSkpLG8uUWEoNTcsMTYzODQsbnVsbCwwLElsLmIsW28uTl0sbnVsbCxudWxsKSxvLmdiKDIwNDgsW1sxOCw0XV0sVGwuYixudWxsLFtJbC5iXSksKHQoKSgpLG8uUmEoNTksMCxudWxsLG51bGwsOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSg2MCwxNjM4NCxudWxsLDMsSWwuYyxbXSx7bmFtZTpbMCwibmFtZSJdfSxudWxsKSxvLmhiKDMzNTU0NDMyMCwyMSx7Y2VsbDowfSksby5oYigzMzU1NDQzMjAsMjIse2hlYWRlckNlbGw6MH0pLG8uaGIoMzM1NTQ0MzIwLDIzLHtmb290ZXJDZWxsOjB9KSxvLmdiKDIwNDgsW1s4LDRdXSxUbC5kLG51bGwsW0lsLmNdKSwodCgpKCksby5JYSgwLG51bGwsbnVsbCwyLG51bGwsT3UpKSxvLlFhKDY2LDE2Mzg0LG51bGwsMCxJbC5iLFtvLk5dLG51bGwsbnVsbCksby5nYigyMDQ4LFtbMjEsNF1dLFRsLmIsbnVsbCxbSWwuYl0pLCh0KCkoKSxvLlJhKDY4LDAsbnVsbCxudWxsLDEwLCJ0Ym9keSIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uSWEoMCxudWxsLG51bGwsMixudWxsLEV1KSksby5RYSg3MCw1NDA2NzIsbnVsbCwwLElsLmgsW28uTixvLnNdLHtjb2x1bW5zOlswLCJjb2x1bW5zIl19LG51bGwpLG8uZ2IoMjA0OCxbWzEwLDRdXSxUbC5sLG51bGwsW0lsLmhdKSwodCgpKCksby5JYSgwLG51bGwsbnVsbCwyLG51bGwsa3UpKSxvLlFhKDczLDU0MDY3MixudWxsLDAsSWwuaixbby5OLG8uc10se2NvbHVtbnM6WzAsImNvbHVtbnMiXX0sbnVsbCksby5nYigyMDQ4LFtbOSw0XV0sVGwubixudWxsLFtJbC5qXSksKHQoKSgpLG8uSWEoMCxudWxsLG51bGwsMyxudWxsLGp1KSksby5RYSg3Niw1NDA2NzIsbnVsbCwwLElsLmosW28uTixvLnNdLHtjb2x1bW5zOlswLCJjb2x1bW5zIl19LG51bGwpLG8uY2IoNzcsMSksby5nYigyMDQ4LFtbOSw0XV0sVGwubixudWxsLFtJbC5qXSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDE1LDAsIlNlYXJjaCIpLHQoZSwxOCwwLG4uZGF0YXNvdXJjZV9yZWZlcmVuY2VzLCIiKSx0KGUsMjQsMCwiaW5kZXgiKSx0KGUsMzYsMCwic2hvcnRoYW5kIiksdChlLDQ4LDAsInRpdGxlIiksdChlLDYwLDAsImV4cGFuZGVkRGV0YWlsIiksdChlLDcwLDAsbi5kaXNwbGF5ZWRDb2x1bW5zKSx0KGUsNzMsMCxuLmRpc3BsYXllZENvbHVtbnMpLHQoZSw3NiwwLHQoZSw3NywwLCJleHBhbmRlZERldGFpbCIpKX0sZnVuY3Rpb24odCxlKXt0KGUsNSwxLFsic3RhbmRhcmQiPT1vLmJiKGUsNikuYXBwZWFyYW5jZSwiZmlsbCI9PW8uYmIoZSw2KS5hcHBlYXJhbmNlLCJvdXRsaW5lIj09by5iYihlLDYpLmFwcGVhcmFuY2UsImxlZ2FjeSI9PW8uYmIoZSw2KS5hcHBlYXJhbmNlLG8uYmIoZSw2KS5fY29udHJvbC5lcnJvclN0YXRlLG8uYmIoZSw2KS5fY2FuTGFiZWxGbG9hdCxvLmJiKGUsNikuX3Nob3VsZExhYmVsRmxvYXQoKSxvLmJiKGUsNikuX2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKSxvLmJiKGUsNikuX2NvbnRyb2wuZGlzYWJsZWQsby5iYihlLDYpLl9jb250cm9sLmF1dG9maWxsZWQsby5iYihlLDYpLl9jb250cm9sLmZvY3VzZWQsImFjY2VudCI9PW8uYmIoZSw2KS5jb2xvciwid2FybiI9PW8uYmIoZSw2KS5jb2xvcixvLmJiKGUsNikuX3Nob3VsZEZvcndhcmQoInVudG91Y2hlZCIpLG8uYmIoZSw2KS5fc2hvdWxkRm9yd2FyZCgidG91Y2hlZCIpLG8uYmIoZSw2KS5fc2hvdWxkRm9yd2FyZCgicHJpc3RpbmUiKSxvLmJiKGUsNikuX3Nob3VsZEZvcndhcmQoImRpcnR5Iiksby5iYihlLDYpLl9zaG91bGRGb3J3YXJkKCJ2YWxpZCIpLG8uYmIoZSw2KS5fc2hvdWxkRm9yd2FyZCgiaW52YWxpZCIpLG8uYmIoZSw2KS5fc2hvdWxkRm9yd2FyZCgicGVuZGluZyIpLCFvLmJiKGUsNikuX2FuaW1hdGlvbnNFbmFibGVkXSksdChlLDE0LDAsby5iYihlLDE1KS5faXNTZXJ2ZXIsby5iYihlLDE1KS5pZCxvLmJiKGUsMTUpLnBsYWNlaG9sZGVyLG8uYmIoZSwxNSkuZGlzYWJsZWQsby5iYihlLDE1KS5yZXF1aXJlZCxvLmJiKGUsMTUpLnJlYWRvbmx5LG8uYmIoZSwxNSkuX2FyaWFEZXNjcmliZWRieXx8bnVsbCxvLmJiKGUsMTUpLmVycm9yU3RhdGUsby5iYihlLDE1KS5yZXF1aXJlZC50b1N0cmluZygpKX0pfXZhciBUdT1vLk5hKCJhcHAtcmVmZXJlbmNlcy1wYWdlIixidSxmdW5jdGlvbih0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1yZWZlcmVuY2VzLXBhZ2UiLFtdLG51bGwsbnVsbCxudWxsLEl1LHl1KSksby5RYSgxLDExNDY4OCxudWxsLDAsYnUsW2VsLmFdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksUnU9bigieVdNciIpLEF1PW4oIjhtTXIiKSxQdT1vLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC10b29sYmFye291dGxpbmU6c29saWQgMXB4fX0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIER1KHQpe3JldHVybiBvLmxiKDIsW28uYWIobnVsbCwwKSxvLmFiKG51bGwsMSldLG51bGwsbnVsbCl9dmFyIE11PW4oImloWVkiKSxOdT1uKCJZU2gyIiksTHU9bigicDBpYiIpLEZ1PW4oIlZuRC8iKSxWdT1uKCJwMFNqIiksenU9bigidDlmWiIpO2Z1bmN0aW9uIEJ1KHQpe3Rocm93IEVycm9yKCJBIGRyYXdlciB3YXMgYWxyZWFkeSBkZWNsYXJlZCBmb3IgJ3Bvc2l0aW9uPVwiIit0KyJcIiciKX12YXIgVXU9bmV3IG8ucSgiTUFUX0RSQVdFUl9ERUZBVUxUX0FVVE9TSVpFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiExfX0pLEh1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fY29udGFpbmVyPWV9cmV0dXJuIHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29udGFpbmVyLl9jb250ZW50TWFyZ2luQ2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXt0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSx0fSgpLHF1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZm9jdXNUcmFwRmFjdG9yeT1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1uLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fbmdab25lPXIsdGhpcy5fZG9jPWEsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQ9bnVsbCx0aGlzLl9lbmFibGVBbmltYXRpb25zPSExLHRoaXMuX3Bvc2l0aW9uPSJzdGFydCIsdGhpcy5fbW9kZT0ib3ZlciIsdGhpcy5fZGlzYWJsZUNsb3NlPSExLHRoaXMuX2F1dG9Gb2N1cz0hMCx0aGlzLl9hbmltYXRpb25TdGFydGVkPW5ldyBvLm4sdGhpcy5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBvLm4oITApLHRoaXMub25Qb3NpdGlvbkNoYW5nZWQ9bmV3IG8ubix0aGlzLl9tb2RlQ2hhbmdlZD1uZXcgemwuYSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3Q/KHMuX2RvYyYmKHMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPXMuX2RvYy5hY3RpdmVFbGVtZW50KSxzLl9pc0ZvY3VzVHJhcEVuYWJsZWQmJnMuX2ZvY3VzVHJhcCYmcy5fdHJhcEZvY3VzKCkpOnMuX3Jlc3RvcmVGb2N1cygpfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7T2JqZWN0KHN1LmEpKHMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwia2V5ZG93biIpLnBpcGUoT2JqZWN0KEZ1LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUNvZGU9PT1OdS5nJiYhcy5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cy5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1PYmplY3QoRmwuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhdXRvRm9jdXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0ZvY3VzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXV0b0ZvY3VzPU9iamVjdChGbC5jKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9vcGVuZWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuZWRDaGFuZ2UucGlwZShPYmplY3QoRnUuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxPYmplY3QoZi5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9wZW5lZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QoRnUuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlJiYwPT09dC50b1N0YXRlLmluZGV4T2YoIm9wZW4iKX0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2Nsb3NlZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChGdS5hKShmdW5jdGlvbih0KXtyZXR1cm4hdH0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2xvc2VkU3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKE9iamVjdChGdS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJiJ2b2lkIj09PXQudG9TdGF0ZX0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2lzRm9jdXNUcmFwRW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZCYmInNpZGUiIT09dGhpcy5tb2RlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl90cmFwRm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXV0b0ZvY3VzJiZ0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oZnVuY3Rpb24oZSl7ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1c3x8dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX0sdC5wcm90b3R5cGUuX3Jlc3RvcmVGb2N1cz1mdW5jdGlvbigpe2lmKHRoaXMuYXV0b0ZvY3VzKXt2YXIgdD10aGlzLl9kb2MmJnRoaXMuX2RvYy5hY3RpdmVFbGVtZW50O3QmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0KSYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkLHRoaXMuX29wZW5lZFZpYSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKSksdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQ9bnVsbCx0aGlzLl9vcGVuZWRWaWE9bnVsbH19LHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2ZvY3VzVHJhcC5lbmFibGVkPXRoaXMuX2lzRm9jdXNUcmFwRW5hYmxlZH0sdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRDaGVja2VkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9wZW5lZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcGVuZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZShPYmplY3QoRmwuYykodCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlKCEwLHQpfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvZ2dsZSghMSl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PSF0aGlzLm9wZW5lZCksdm9pZCAwPT09ZSYmKGU9InByb2dyYW0iKSx0aGlzLl9vcGVuZWQ9dCx0Pyh0aGlzLl9hbmltYXRpb25TdGF0ZT10aGlzLl9lbmFibGVBbmltYXRpb25zPyJvcGVuIjoib3Blbi1pbnN0YW50Iix0aGlzLl9vcGVuZWRWaWE9ZSk6KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9yZXN0b3JlRm9jdXMoKSksdGhpcy5fZm9jdXNUcmFwJiYodGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkKSxuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtuLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdCh6dS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3JldHVybiB0KGU/Im9wZW4iOiJjbG9zZSIpfSl9KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5lbWl0KHQpfSx0LnByb3RvdHlwZS5fb25BbmltYXRpb25FbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5mcm9tU3RhdGUsbj10LnRvU3RhdGU7KDA9PT1uLmluZGV4T2YoIm9wZW4iKSYmInZvaWQiPT09ZXx8InZvaWQiPT09biYmMD09PWUuaW5kZXhPZigib3BlbiIpKSYmdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLl9vcGVuZWQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLFF1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsYSl7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBzPXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgby5uLHRoaXMuX2Rlc3Ryb3llZD1uZXcgemwuYSx0aGlzLl9kb0NoZWNrU3ViamVjdD1uZXcgemwuYSx0aGlzLl9jb250ZW50TWFyZ2lucz17bGVmdDpudWxsLHJpZ2h0Om51bGx9LHRoaXMuX2NvbnRlbnRNYXJnaW5DaGFuZ2VzPW5ldyB6bC5hLHQmJnQuY2hhbmdlLnBpcGUoT2JqZWN0KGx1LmEpKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3MuX3ZhbGlkYXRlRHJhd2VycygpLHMuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCl9KSx0aGlzLl9hdXRvc2l6ZT1yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZW5kIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9zaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9zaXplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXV0b3NpemU9T2JqZWN0KEZsLmMpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzQmFja2Ryb3AiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fYmFja2Ryb3BPdmVycmlkZT8hdGhpcy5fc3RhcnR8fCJzaWRlIiE9PXRoaXMuX3N0YXJ0Lm1vZGV8fCF0aGlzLl9lbmR8fCJzaWRlIiE9PXRoaXMuX2VuZC5tb2RlOnRoaXMuX2JhY2tkcm9wT3ZlcnJpZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9iYWNrZHJvcE92ZXJyaWRlPW51bGw9PXQ/bnVsbDpPYmplY3QoRmwuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9kcmF3ZXJzLmNoYW5nZXMucGlwZShPYmplY3QoVnUuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3ZhbGlkYXRlRHJhd2VycygpLHQuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll93YXRjaERyYXdlclRvZ2dsZShlKSx0Ll93YXRjaERyYXdlclBvc2l0aW9uKGUpLHQuX3dhdGNoRHJhd2VyTW9kZShlKX0pLCghdC5fZHJhd2Vycy5sZW5ndGh8fHQuX2lzRHJhd2VyT3Blbih0Ll9zdGFydCl8fHQuX2lzRHJhd2VyT3Blbih0Ll9lbmQpKSYmdC5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSx0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RvQ2hlY2tTdWJqZWN0LnBpcGUoT2JqZWN0KEJsLmEpKDEwKSxPYmplY3QobHUuYSkodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCl9KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kb0NoZWNrU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLl9kcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQub3BlbigpfSl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9hdXRvc2l6ZSYmdGhpcy5faXNQdXNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2RvQ2hlY2tTdWJqZWN0Lm5leHQoKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJUb2dnbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0Ll9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KGx1LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyksT2JqZWN0KEZ1LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Im9wZW4taW5zdGFudCIhPT10LnRvU3RhdGUmJiJOb29wQW5pbWF0aW9ucyIhPT1lLl9hbmltYXRpb25Nb2RlJiZlLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci10cmFuc2l0aW9uIiksZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLCJzaWRlIiE9PXQubW9kZSYmdC5vcGVuZWRDaGFuZ2UucGlwZShPYmplY3QobHUuYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3NldENvbnRhaW5lckNsYXNzKHQub3BlbmVkKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQub25Qb3NpdGlvbkNoYW5nZWQucGlwZShPYmplY3QobHUuYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fbmdab25lLm9uTWljcm90YXNrRW1wdHkuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoenUuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3ZhbGlkYXRlRHJhd2VycygpfSl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyTW9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQuX21vZGVDaGFuZ2VkLnBpcGUoT2JqZWN0KGx1LmEpKE9iamVjdChMdS5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMsdGhpcy5fZGVzdHJveWVkKSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCksZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdC5wcm90b3R5cGUuX3NldENvbnRhaW5lckNsYXNzPWZ1bmN0aW9uKHQpe3Q/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1kcmF3ZXItb3BlbmVkIik6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1kcmF3ZXItb3BlbmVkIil9LHQucHJvdG90eXBlLl92YWxpZGF0ZURyYXdlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0YXJ0PXRoaXMuX2VuZD1udWxsLHRoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbihlKXsiZW5kIj09ZS5wb3NpdGlvbj8obnVsbCE9dC5fZW5kJiZCdSgiZW5kIiksdC5fZW5kPWUpOihudWxsIT10Ll9zdGFydCYmQnUoInN0YXJ0IiksdC5fc3RhcnQ9ZSl9KSx0aGlzLl9yaWdodD10aGlzLl9sZWZ0PW51bGwsdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8odGhpcy5fbGVmdD10aGlzLl9lbmQsdGhpcy5fcmlnaHQ9dGhpcy5fc3RhcnQpOih0aGlzLl9sZWZ0PXRoaXMuX3N0YXJ0LHRoaXMuX3JpZ2h0PXRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9pc1B1c2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiYib3ZlciIhPXRoaXMuX3N0YXJ0Lm1vZGV8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiYib3ZlciIhPXRoaXMuX2VuZC5tb2RlfSx0LnByb3RvdHlwZS5fb25CYWNrZHJvcENsaWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdCgpLHRoaXMuX2Nsb3NlTW9kYWxEcmF3ZXIoKX0sdC5wcm90b3R5cGUuX2Nsb3NlTW9kYWxEcmF3ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO1t0aGlzLl9zdGFydCx0aGlzLl9lbmRdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmIWUuZGlzYWJsZUNsb3NlJiZ0Ll9jYW5IYXZlQmFja2Ryb3AoZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUuX2lzU2hvd2luZ0JhY2tkcm9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkmJnRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9zdGFydCl8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fZW5kKX0sdC5wcm90b3R5cGUuX2NhbkhhdmVCYWNrZHJvcD1mdW5jdGlvbih0KXtyZXR1cm4ic2lkZSIhPT10Lm1vZGV8fCEhdGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sdC5wcm90b3R5cGUuX2lzRHJhd2VyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmdC5vcGVuZWR9LHQucHJvdG90eXBlLl91cGRhdGVDb250ZW50TWFyZ2lucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT0wLG49MDtpZih0aGlzLl9sZWZ0JiZ0aGlzLl9sZWZ0Lm9wZW5lZCYmKCJzaWRlIj09dGhpcy5fbGVmdC5tb2RlP2UrPXRoaXMuX2xlZnQuX3dpZHRoOiJwdXNoIj09dGhpcy5fbGVmdC5tb2RlJiYoZSs9aT10aGlzLl9sZWZ0Ll93aWR0aCxuLT1pKSksdGhpcy5fcmlnaHQmJnRoaXMuX3JpZ2h0Lm9wZW5lZClpZigic2lkZSI9PXRoaXMuX3JpZ2h0Lm1vZGUpbis9dGhpcy5fcmlnaHQuX3dpZHRoO2Vsc2UgaWYoInB1c2giPT10aGlzLl9yaWdodC5tb2RlKXt2YXIgaTtuKz1pPXRoaXMuX3JpZ2h0Ll93aWR0aCxlLT1pfWU9ZXx8bnVsbCxuPW58fG51bGwsZT09PXRoaXMuX2NvbnRlbnRNYXJnaW5zLmxlZnQmJm49PT10aGlzLl9jb250ZW50TWFyZ2lucy5yaWdodHx8KHRoaXMuX2NvbnRlbnRNYXJnaW5zPXtsZWZ0OmUscmlnaHQ6bn0sdGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZW50TWFyZ2luQ2hhbmdlcy5uZXh0KHQuX2NvbnRlbnRNYXJnaW5zKX0pKX0sdH0oKSxHdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLGUsbil8fHRoaXN9cmV0dXJuIE9iamVjdChvdS5iKShlLHQpLGV9KEh1KSxadT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9maXhlZEluVmlld3BvcnQ9ITEsZS5fZml4ZWRUb3BHYXA9MCxlLl9maXhlZEJvdHRvbUdhcD0wLGV9cmV0dXJuIE9iamVjdChvdS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRJblZpZXdwb3J0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkSW5WaWV3cG9ydH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkSW5WaWV3cG9ydD1PYmplY3QoRmwuYykodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZFRvcEdhcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZFRvcEdhcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkVG9wR2FwPU9iamVjdChGbC5lKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkQm90dG9tR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQm90dG9tR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRCb3R0b21HYXA9T2JqZWN0KEZsLmUpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHF1KSxXdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KG91LmIpKGUsdCksZX0oUXUpLFl1PWZ1bmN0aW9uKCl7fSxLdT1uKCJxQWxTIiksWHU9by5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gJHUodCl7cmV0dXJuIG8ubGIoMixbby5hYihudWxsLDApXSxudWxsLG51bGwpfXZhciBKdT1vLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJ0cmFuc2Zvcm0iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6Im9wZW4sIG9wZW4taW5zdGFudCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsIDAsIDApIix2aXNpYmlsaXR5OiJ2aXNpYmxlIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6InZvaWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7ImJveC1zaGFkb3ciOiJub25lIix2aXNpYmlsaXR5OiJoaWRkZW4ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoidm9pZCA9PiBvcGVuLWluc3RhbnQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjBtcyJ9LG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiJ2b2lkIDw9PiBvcGVuLCBvcGVuLWluc3RhbnQgPT4gdm9pZCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gdGModCl7cmV0dXJuIG8ubGIoMixbby5hYihudWxsLDApXSxudWxsLG51bGwpfXZhciBlYz1vLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1kcmF3ZXItY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW59Lm1hdC1kcmF3ZXItY29udGFpbmVyW2Z1bGxzY3JlZW5de3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtZHJhd2VyLWNvbnRhaW5lcltmdWxsc2NyZWVuXS5tYXQtZHJhd2VyLW9wZW5lZHtvdmVyZmxvdzpoaWRkZW59Lm1hdC1kcmF3ZXItY29udGFpbmVyLm1hdC1kcmF3ZXItY29udGFpbmVyLWV4cGxpY2l0LWJhY2tkcm9wIC5tYXQtZHJhd2VyLXNpZGV7ei1pbmRleDozfS5tYXQtZHJhd2VyLWJhY2tkcm9we3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7ei1pbmRleDozO3Zpc2liaWxpdHk6aGlkZGVufS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257dmlzaWJpbGl0eTp2aXNpYmxlfS5tYXQtZHJhd2VyLXRyYW5zaXRpb24gLm1hdC1kcmF3ZXItYmFja2Ryb3B7dHJhbnNpdGlvbi1kdXJhdGlvbjouNHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpiYWNrZ3JvdW5kLWNvbG9yLHZpc2liaWxpdHl9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXItYmFja2Ryb3B7b3BhY2l0eTouNX19Lm1hdC1kcmF3ZXItY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5tYXQtZHJhd2VyLXRyYW5zaXRpb24gLm1hdC1kcmF3ZXItY29udGVudHt0cmFuc2l0aW9uLWR1cmF0aW9uOi40czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybSxtYXJnaW4tbGVmdCxtYXJnaW4tcmlnaHR9Lm1hdC1kcmF3ZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDo0O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7ei1pbmRleDozO291dGxpbmU6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3cteTphdXRvO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLFtkaXI9cnRsXSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtib3JkZXItcmlnaHQ6c29saWQgMXB4IGN1cnJlbnRDb2xvcn19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmQsW2Rpcj1ydGxdIC5tYXQtZHJhd2Vye2JvcmRlci1sZWZ0OnNvbGlkIDFweCBjdXJyZW50Q29sb3I7Ym9yZGVyLXJpZ2h0Om5vbmV9fS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItc2lkZXt6LWluZGV4OjJ9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfVtkaXI9cnRsXSAubWF0LWRyYXdlcnt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfVtkaXI9cnRsXSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtsZWZ0OjA7cmlnaHQ6YXV0bzt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX0ubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1zaWRlbmF2LWZpeGVke3Bvc2l0aW9uOmZpeGVkfSJdLGRhdGE6e319KTtmdW5jdGlvbiBuYyh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZHJhd2VyLWJhY2tkcm9wIl1dLFtbMiwibWF0LWRyYXdlci1zaG93biIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PXQuY29tcG9uZW50Ll9vbkJhY2tkcm9wQ2xpY2tlZCgpJiZpKSxpfSxudWxsLG51bGwpKV0sbnVsbCxmdW5jdGlvbih0LGUpe3QoZSwwLDAsZS5jb21wb25lbnQuX2lzU2hvd2luZ0JhY2tkcm9wKCkpfSl9ZnVuY3Rpb24gaWModCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwzLCJtYXQtc2lkZW5hdi1jb250ZW50IixbWyJjZGtTY3JvbGxhYmxlIiwiIl0sWyJjbGFzcyIsIm1hdC1kcmF3ZXItY29udGVudCBtYXQtc2lkZW5hdi1jb250ZW50Il1dLFtbNCwibWFyZ2luLWxlZnQiLCJweCJdLFs0LCJtYXJnaW4tcmlnaHQiLCJweCJdXSxudWxsLG51bGwsJHUsWHUpKSxvLlFhKDEsMjEyOTkyLFtbMSw0XV0sMCxLdS5hLFtvLmssS3UuYyxvLnpdLG51bGwsbnVsbCksby5RYSgyLDEwOTc3MjgsbnVsbCwwLEd1LFtvLmgsV3VdLG51bGwsbnVsbCksby5hYigwLDIpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxmdW5jdGlvbih0LGUpe3QoZSwwLDAsby5iYihlLDIpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLmxlZnQsby5iYihlLDIpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfWZ1bmN0aW9uIHJjKHQpe3JldHVybiBvLmxiKDIsW28uaGIoNjcxMDg4NjQwLDEse3Njcm9sbGFibGU6MH0pLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsbmMpKSxvLlFhKDIsMTYzODQsbnVsbCwwLHMubCxbby5RLG8uTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksby5hYihudWxsLDApLG8uYWIobnVsbCwxKSwodCgpKCksby5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGljKSksby5RYSg2LDE2Mzg0LG51bGwsMCxzLmwsW28uUSxvLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5oYXNCYWNrZHJvcCksdChlLDYsMCwhbi5fY29udGVudCl9LG51bGwpfXZhciBvYz1uKCJaWUNpIiksYWM9ZnVuY3Rpb24oKXt9LHNjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZ2VuZXJhdGVJZD1mdW5jdGlvbigpe2Zvcih2YXIgdD0iIixlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsbj0wO248MjA7bisrKXQrPWUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCkpO3JldHVybiB0fSx0LnByb3RvdHlwZS5hZGRSYW5kb21JZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmlkPWUuZ2VuZXJhdGVJZCgpLHZvaWQgMCE9PXQuaXRlbXMmJmUuYWRkUmFuZG9tSWQodC5pdGVtcyl9KX0sdC5wcm90b3R5cGUucmVjdXJzaXZlQ2hlY2tJZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHQuaWQ9PT1lfHwodm9pZCAwIT09dC5pdGVtcz90Lml0ZW1zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVjdXJzaXZlQ2hlY2tJZCh0LGUpfSk6dm9pZCAwKX0sdC5wcm90b3R5cGUucmVjdXJzaXZlQ2hlY2tMaW5rPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07Zm9yKHZhciByIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShyKSYmKGkubGluaz09PWU/dGhpcy5mb3VuZExpbmtPYmplY3Q9aTp2b2lkIDAhPT1pLml0ZW1zJiZ0aGlzLnJlY3Vyc2l2ZUNoZWNrTGluayhpLml0ZW1zLGUpKX19LHQucHJvdG90eXBlLmdldE1hdGNoZWRPYmplY3RCeVVybD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlY3Vyc2l2ZUNoZWNrTGluayh0LGUpLHRoaXMuZm91bmRMaW5rT2JqZWN0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5VKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksbGM9e1BBRERJTkdfQVRfU1RBUlQ6ITAsREVGQVVMVF9DTEFTU19OQU1FOiJhbW1sLWNvbnRhaW5lciIsREVGQVVMVF9MSVNUX0NMQVNTX05BTUU6ImFtbWwtaXRlbSIsU0VMRUNURURfTElTVF9DTEFTU19OQU1FOiJzZWxlY3RlZC1hbW1sLWl0ZW0iLERFRkFVTFRfU0VMRUNURURfRk9OVF9DT0xPUjoiIzE5NzZkMiIsREVGQVVMVF9MSVNUX0JBQ0tHUk9VTkRfQ09MT1I6IiNmZmYiLERFRkFVTFRfTElTVF9GT05UX0NPTE9SOiJyZ2JhKDAsMCwwLC44NykiLEVSUk9SX01FU1NBR0U6IkludmFsaWQgZGF0YSBmb3IgbWF0ZXJpYWwgTXVsdGlsZXZlbCBMaXN0IENvbXBvbmVudCJ9LHVjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucm91dGVyPXQsdGhpcy5tdWx0aWxldmVsTWVudVNlcnZpY2U9ZSx0aGlzLmNvbmZpZ3VyYXRpb249bnVsbCx0aGlzLnNlbGVjdGVkSXRlbT1uZXcgby5uLHRoaXMubm9kZUNvbmZpZz17cGFkZGluZ0F0U3RhcnQ6ITAsbGlzdEJhY2tncm91bmRDb2xvcjpudWxsLGZvbnRDb2xvcjpudWxsLHNlbGVjdGVkTGlzdEZvbnRDb2xvcjpudWxsLGludGVyZmFjZVdpdGhSb3V0ZTpudWxsfSx0aGlzLmlzSW52YWxpZENvbmZpZz0hMH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLmNoZWNrVmFsaWRkYXRhKCksdGhpcy5kZXRlY3RJbnZhbGlkQ29uZmlnKCl9LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztudWxsIT09dGhpcy5jb25maWd1cmF0aW9uJiZ2b2lkIDAhPT10aGlzLmNvbmZpZ3VyYXRpb24mJiIiIT09dGhpcy5jb25maWd1cmF0aW9uJiZudWxsIT09dGhpcy5jb25maWd1cmF0aW9uLmludGVyZmFjZVdpdGhSb3V0ZSYmdGhpcy5jb25maWd1cmF0aW9uLmludGVyZmFjZVdpdGhSb3V0ZSYmdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygb2MuZCl7dmFyIG49dC5tdWx0aWxldmVsTWVudVNlcnZpY2UuZ2V0TWF0Y2hlZE9iamVjdEJ5VXJsKHQuaXRlbXMsZS51cmwpO3ZvaWQgMCE9PW4mJnZvaWQgMCE9PW4ubGluayYmbnVsbCE9PW4ubGluayYmIiIhPT1uLmxpbmsmJih0LmN1cnJlbnROb2RlPW4sdC5zZWxlY3RlZExpc3RJdGVtKG4pKX19KX0sdC5wcm90b3R5cGUuY2hlY2tWYWxpZGRhdGE9ZnVuY3Rpb24oKXswPT09dGhpcy5pdGVtcy5sZW5ndGg/Y29uc29sZS53YXJuKGxjLkVSUk9SX01FU1NBR0UpOih0aGlzLml0ZW1zPXRoaXMuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmhpZGRlbn0pLHRoaXMubXVsdGlsZXZlbE1lbnVTZXJ2aWNlLmFkZFJhbmRvbUlkKHRoaXMuaXRlbXMpKX0sdC5wcm90b3R5cGUuZGV0ZWN0SW52YWxpZENvbmZpZz1mdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLmNvbmZpZ3VyYXRpb258fHZvaWQgMD09PXRoaXMuY29uZmlndXJhdGlvbnx8IiI9PT10aGlzLmNvbmZpZ3VyYXRpb24pdGhpcy5pc0ludmFsaWRDb25maWc9ITA7ZWxzZXt0aGlzLmlzSW52YWxpZENvbmZpZz0hMTt2YXIgdD10aGlzLmNvbmZpZ3VyYXRpb247dm9pZCAwIT09dC5wYWRkaW5nQXRTdGFydCYmbnVsbCE9PXQucGFkZGluZ0F0U3RhcnQmJiJib29sZWFuIj09dHlwZW9mIHQucGFkZGluZ0F0U3RhcnQmJih0aGlzLm5vZGVDb25maWcucGFkZGluZ0F0U3RhcnQ9dC5wYWRkaW5nQXRTdGFydCksIiIhPT10Lmxpc3RCYWNrZ3JvdW5kQ29sb3ImJm51bGwhPT10Lmxpc3RCYWNrZ3JvdW5kQ29sb3ImJnZvaWQgMCE9PXQubGlzdEJhY2tncm91bmRDb2xvciYmKHRoaXMubm9kZUNvbmZpZy5saXN0QmFja2dyb3VuZENvbG9yPXQubGlzdEJhY2tncm91bmRDb2xvciksIiIhPT10LmZvbnRDb2xvciYmbnVsbCE9PXQuZm9udENvbG9yJiZ2b2lkIDAhPT10LmZvbnRDb2xvciYmKHRoaXMubm9kZUNvbmZpZy5mb250Q29sb3I9dC5mb250Q29sb3IpLCIiIT09dC5zZWxlY3RlZExpc3RGb250Q29sb3ImJm51bGwhPT10LnNlbGVjdGVkTGlzdEZvbnRDb2xvciYmdm9pZCAwIT09dC5zZWxlY3RlZExpc3RGb250Q29sb3ImJih0aGlzLm5vZGVDb25maWcuc2VsZWN0ZWRMaXN0Rm9udENvbG9yPXQuc2VsZWN0ZWRMaXN0Rm9udENvbG9yKSxudWxsIT09dC5pbnRlcmZhY2VXaXRoUm91dGUmJnZvaWQgMCE9PXQuaW50ZXJmYWNlV2l0aFJvdXRlJiYiYm9vbGVhbiI9PXR5cGVvZiB0LmludGVyZmFjZVdpdGhSb3V0ZSYmKHRoaXMubm9kZUNvbmZpZy5pbnRlcmZhY2VXaXRoUm91dGU9dC5pbnRlcmZhY2VXaXRoUm91dGUpfX0sdC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnZhbGlkQ29uZmlnP2xjLkRFRkFVTFRfQ0xBU1NfTkFNRToiIiE9PXRoaXMuY29uZmlndXJhdGlvbi5jbGFzc25hbWUmJm51bGwhPT10aGlzLmNvbmZpZ3VyYXRpb24uY2xhc3NuYW1lJiZ2b2lkIDAhPT10aGlzLmNvbmZpZ3VyYXRpb24uY2xhc3NuYW1lP2xjLkRFRkFVTFRfQ0xBU1NfTkFNRSsiICIrdGhpcy5jb25maWd1cmF0aW9uLmNsYXNzbmFtZTpsYy5ERUZBVUxUX0NMQVNTX05BTUV9LHQucHJvdG90eXBlLmdldEdsb2JhbFN0eWxlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNJbnZhbGlkQ29uZmlnKXt2YXIgdD17YmFja2dyb3VuZDpudWxsfTtyZXR1cm4iIiE9PXRoaXMuY29uZmlndXJhdGlvbi5iYWNrZ3JvdW5kQ29sb3ImJm51bGwhPT10aGlzLmNvbmZpZ3VyYXRpb24uYmFja2dyb3VuZENvbG9yJiZ2b2lkIDAhPT10aGlzLmNvbmZpZ3VyYXRpb24uYmFja2dyb3VuZENvbG9yJiYodC5iYWNrZ3JvdW5kPXRoaXMuY29uZmlndXJhdGlvbi5iYWNrZ3JvdW5kQ29sb3IpLHR9fSx0LnByb3RvdHlwZS5zZWxlY3RlZExpc3RJdGVtPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudE5vZGU9dCx0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHQpfSx0fSgpLGNjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuO3RoaXMucm91dGVyPXQsdGhpcy5tdWx0aWxldmVsTWVudVNlcnZpY2U9ZSx0aGlzLmxldmVsPTEsdGhpcy5ub2RlQ29uZmlndXJhdGlvbj1udWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW5ldyBvLm4sdGhpcy5pc1NlbGVjdGVkPSExLHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5zZWxlY3RlZExpc3RDbGFzc2VzPSgobj17fSlbbGMuREVGQVVMVF9MSVNUX0NMQVNTX05BTUVdPSEwLG5bbGMuU0VMRUNURURfTElTVF9DTEFTU19OQU1FXT0hMSxuKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLm5vZGVDaGlsZHJlbj10aGlzLm5vZGUmJnRoaXMubm9kZS5pdGVtcz90aGlzLm5vZGUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmhpZGRlbn0pOltdLHZvaWQgMCE9PXRoaXMuc2VsZWN0ZWROb2RlJiZudWxsIT09dGhpcy5zZWxlY3RlZE5vZGUmJnRoaXMuc2V0U2VsZWN0ZWRDbGFzcyh0aGlzLm11bHRpbGV2ZWxNZW51U2VydmljZS5yZWN1cnNpdmVDaGVja0lkKHRoaXMubm9kZSx0aGlzLnNlbGVjdGVkTm9kZS5pZCkpfSx0LnByb3RvdHlwZS5zZXRTZWxlY3RlZENsYXNzPWZ1bmN0aW9uKHQpe3ZhciBlO3Q/KHRoaXMuaXNTZWxlY3RlZD0hMCx0aGlzLmV4cGFuZGVkPSEwKTp0aGlzLmlzU2VsZWN0ZWQ9ITEsdGhpcy5zZWxlY3RlZExpc3RDbGFzc2VzPSgoZT17fSlbbGMuREVGQVVMVF9MSVNUX0NMQVNTX05BTUVdPSEwLGVbbGMuU0VMRUNURURfTElTVF9DTEFTU19OQU1FXT10aGlzLmlzU2VsZWN0ZWQsZSksdGhpcy5zZXRDbGFzc2VzKCl9LHQucHJvdG90eXBlLmdldFBhZGRpbmdBdFN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUubG9nKHRoaXMubm9kZUNvbmZpZ3VyYXRpb24pLCEhdGhpcy5ub2RlQ29uZmlndXJhdGlvbi5wYWRkaW5nQXRTdGFydH0sdC5wcm90b3R5cGUuZ2V0TGlzdFN0eWxlPWZ1bmN0aW9uKCl7dmFyIHQ9e2JhY2tncm91bmQ6bGMuREVGQVVMVF9MSVNUX0JBQ0tHUk9VTkRfQ09MT1IsY29sb3I6bGMuREVGQVVMVF9MSVNUX0ZPTlRfQ09MT1J9O3JldHVybiBudWxsIT09dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5saXN0QmFja2dyb3VuZENvbG9yJiYodC5iYWNrZ3JvdW5kPXRoaXMubm9kZUNvbmZpZ3VyYXRpb24ubGlzdEJhY2tncm91bmRDb2xvciksdGhpcy5pc1NlbGVjdGVkP3QuY29sb3I9bnVsbCE9PXRoaXMubm9kZUNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRMaXN0Rm9udENvbG9yP3RoaXMubm9kZUNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRMaXN0Rm9udENvbG9yOmxjLkRFRkFVTFRfU0VMRUNURURfRk9OVF9DT0xPUjpudWxsIT09dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5mb250Q29sb3ImJih0LmNvbG9yPXRoaXMubm9kZUNvbmZpZ3VyYXRpb24uZm9udENvbG9yKSx0fSx0LnByb3RvdHlwZS5oYXNJdGVtcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVDaGlsZHJlbi5sZW5ndGg+MH0sdC5wcm90b3R5cGUuc2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3ZhciB0O3RoaXMuY2xhc3Nlcz0oKHQ9e30pWyJsZXZlbC0iK3RoaXMubGV2ZWxdPSEwLHRbImFtbWwtc3VibWVudSJdPXRoaXMuaGFzSXRlbXMoKSYmdGhpcy5leHBhbmRlZCYmdGhpcy5nZXRQYWRkaW5nQXRTdGFydCgpLHQpfSx0LnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24odCl7dGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLnNldENsYXNzZXMoKSxudWxsIT09dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5pbnRlcmZhY2VXaXRoUm91dGUmJnRoaXMubm9kZUNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlV2l0aFJvdXRlJiZ2b2lkIDAhPT10Lmxpbms/dm9pZCAwIT09dC5leHRlcm5hbFJlZGlyZWN0JiZ0LmV4dGVybmFsUmVkaXJlY3Q/d2luZG93LmxvY2F0aW9uLmhyZWY9dC5saW5rOnRoaXMucm91dGVyLm5hdmlnYXRlKFt0LmxpbmtdKTp2b2lkIDA9PT10Lml0ZW1zJiZ0aGlzLnNlbGVjdGVkTGlzdEl0ZW0odCl9LHQucHJvdG90eXBlLnNlbGVjdGVkTGlzdEl0ZW09ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh0KX0sdH0oKSxmYz1mdW5jdGlvbigpe30sZGM9bigiTEM1cCIpLGhjPW4oIjAvUTYiKSxwYz1vLlBhKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1kaXZpZGVye2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXRvcDowO2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo4MHB4fVtkaXI9cnRsXSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6ODBweH0ubWF0LXN1YmhlYWRlcntkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTZweDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcnttYXJnaW46MH0ubWF0LWxpc3QsLm1hdC1uYXYtbGlzdCwubWF0LXNlbGVjdGlvbi1saXN0e3BhZGRpbmctdG9wOjhweDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi04cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQ4cHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dHtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFye2ZsZXgtc2hyaW5rOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NzJweDt3aWR0aDpjYWxjKDEwMCUgLSA3MnB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb257ZmxleC1zaHJpbms6MDt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzo0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY0cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjRweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO21hcmdpbjowfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWxpc3RbZGVuc2VdLC5tYXQtbmF2LWxpc3RbZGVuc2VdLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2Vde3BhZGRpbmctdG9wOjRweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0MHB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDppbmhlcml0fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNnB4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFye2hlaWdodDo0OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZXtoZWlnaHQ6NjBweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmV7aGVpZ2h0Ojc2cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5le2hlaWdodDphdXRvfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0Pip7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH1AbWVkaWEgKGhvdmVyOm5vbmUpey5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlcntiYWNrZ3JvdW5kOjAgMH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIG1jKHQpe3JldHVybiBvLmxiKDIsW28uYWIobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgYmM9by5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci10b3Atc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci10b3A6MDtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6ODBweH1bZGlyPXJ0bF0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjgwcHh9Lm1hdC1zdWJoZWFkZXJ7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjE2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXJ7bWFyZ2luOjB9Lm1hdC1saXN0LC5tYXQtbmF2LWxpc3QsLm1hdC1zZWxlY3Rpb24tbGlzdHtwYWRkaW5nLXRvcDo4cHg7ZGlzcGxheTpibG9jazstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNnB4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFye2hlaWdodDo1NnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZXtoZWlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmV7aGVpZ2h0Ojg4cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5le2hlaWdodDphdXRvfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0Pip7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6aW5oZXJpdH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHR7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjcycHg7d2lkdGg6Y2FsYygxMDAlIC0gNzJweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjcycHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MjRweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2NHB4O3dpZHRoOmNhbGMoMTAwJSAtIDY0cHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2NHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1saXN0W2RlbnNlXSwubWF0LW5hdi1saXN0W2RlbnNlXSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXXtwYWRkaW5nLXRvcDo0cHg7ZGlzcGxheTpibG9ja30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257ZGlzcGxheTpibG9jaztoZWlnaHQ6NDBweDstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIgLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhci5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0e3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2OHB4O3dpZHRoOmNhbGMoMTAwJSAtIDY4cHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Zm9udC1zaXplOjIwcHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjBweDt3aWR0aDpjYWxjKDEwMCUgLSA2MHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjBweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbmF2LWxpc3QgYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0fS5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW17Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5tYXQtbGlzdC1vcHRpb246bm90KC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9QG1lZGlhIChob3Zlcjpub25lKXsubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDowIDB9fSJdLGRhdGE6e319KTtmdW5jdGlvbiB5Yyh0KXtyZXR1cm4gby5sYigyLFtvLmFiKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIHZjPW8uUGEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIGdjKHQpe3JldHVybiBvLmxiKDIsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsNiwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0tY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLXJpcHBsZSBtYXQtcmlwcGxlIl0sWyJtYXQtcmlwcGxlIiwiIl1dLFtbMiwibWF0LXJpcHBsZS11bmJvdW5kZWQiLG51bGxdXSxudWxsLG51bGwsbnVsbCxudWxsKSksby5RYSgyLDIxMjk5MixudWxsLDAsQWwudSxbby5rLG8ueix1bC5hLFsyLEFsLmtdLFsyLGNsLmFdXSx7ZGlzYWJsZWQ6WzAsImRpc2FibGVkIl0sdHJpZ2dlcjpbMSwidHJpZ2dlciJdfSxudWxsKSxvLmFiKG51bGwsMCksKHQoKSgpLG8uUmEoNCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtdGV4dCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLmFiKG51bGwsMSksby5hYihudWxsLDIpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsby5iYihlLDIpLnVuYm91bmRlZCl9KX12YXIgX2M9by5QYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci10b3Atc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci10b3A6MDtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6ODBweH1bZGlyPXJ0bF0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjgwcHh9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIHdjKHQpe3JldHVybiBvLmxiKDIsW10sbnVsbCxudWxsKX12YXIgeGM9by5QYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbIi5hbW1sLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjQ4cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5hbm1sLWRhdGFbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnN0YXJ0fS5hbW1sLWljb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjQ4cHg7bWFyZ2luLXJpZ2h0OjE1cHh9LmFtbWwtaWNvbi1mYVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9LmFtbWwtc3VibWVudVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTZweH0uYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMTk3NmQyfSJdLGRhdGE6e319KTtmdW5jdGlvbiBDYyh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsIm5nLWxpc3QtaXRlbSIsW10sbnVsbCxbW251bGwsInNlbGVjdGVkSXRlbSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuInNlbGVjdGVkSXRlbSI9PT1lJiYoaT0hMSE9PXQuY29tcG9uZW50LnNlbGVjdGVkTGlzdEl0ZW0obikmJmkpLGl9LFBjLEVjKSksby5RYSgxLDU3MzQ0MCxudWxsLDAsY2MsW29jLmwsc2NdLHtub2RlOlswLCJub2RlIl0sc2VsZWN0ZWROb2RlOlsxLCJzZWxlY3RlZE5vZGUiXSxub2RlQ29uZmlndXJhdGlvbjpbMiwibm9kZUNvbmZpZ3VyYXRpb24iXX0se3NlbGVjdGVkSXRlbToic2VsZWN0ZWRJdGVtIn0pXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsZS5jb250ZXh0LiRpbXBsaWNpdCxuLmN1cnJlbnROb2RlLG4ubm9kZUNvbmZpZyl9LG51bGwpfWZ1bmN0aW9uIFNjKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsNiwiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlFhKDEsMjc4NTI4LG51bGwsMCxzLmosW28ucyxvLnQsby5rLG8uRV0se25nQ2xhc3M6WzAsIm5nQ2xhc3MiXX0sbnVsbCksby5RYSgyLDI3ODUyOCxudWxsLDAscy5vLFtvLnQsby5rLG8uRV0se25nU3R5bGU6WzAsIm5nU3R5bGUiXX0sbnVsbCksKHQoKSgpLG8uUmEoMywwLG51bGwsbnVsbCwzLCJtYXQtbGlzdCIsW1siY2xhc3MiLCJtYXQtbGlzdCJdXSxudWxsLG51bGwsbnVsbCx5YyxiYykpLG8uUWEoNCw0OTE1MixudWxsLDAsaGMuYSxbXSxudWxsLG51bGwpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsMCwxLG51bGwsQ2MpKSxvLlFhKDYsMjc4NTI4LG51bGwsMCxzLmssW28uUSxvLk4sby5zXSx7bmdGb3JPZjpbMCwibmdGb3JPZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uZ2V0Q2xhc3NOYW1lKCkpLHQoZSwyLDAsbi5nZXRHbG9iYWxTdHlsZSgpKSx0KGUsNiwwLG4uaXRlbXMpfSxudWxsKX1mdW5jdGlvbiBPYyh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLFNjKSksby5RYSgxLDE2Mzg0LG51bGwsMCxzLmwsW28uUSxvLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsMCE9PWUuY29tcG9uZW50Lml0ZW1zLmxlbmd0aCl9LG51bGwpfXZhciBFYz1vLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOlsiLmFtbWwtaXRlbVtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6NDhweDtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcn0uYW5tbC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzdGFydDtoZWlnaHQ6NDhweH0uYW1tbC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDo0OHB4O21hcmdpbi1yaWdodDoxNXB4fS5hbW1sLWljb24tZmFbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4fS5sYWJlbFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6NDhweH0uYW1tbC1zdWJtZW51W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxNnB4fSJdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJzbGlkZUluT3V0IixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJpbiIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IioiLG9wYWNpdHk6MH0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6IjpsZWF2ZSIsYW5pbWF0aW9uOlt7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiIqIixvcGFjaXR5Oi4yfSxvZmZzZXQ6bnVsbH0se3R5cGU6MyxzdGVwczpbe3R5cGU6NCxzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDowfSxvZmZzZXQ6bnVsbH0sdGltaW5nczozMDB9LHt0eXBlOjQsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntvcGFjaXR5OjB9LG9mZnNldDpudWxsfSx0aW1pbmdzOiIyMDBtcyBlYXNlLW91dCJ9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOm51bGx9LHt0eXBlOjEsZXhwcjoiOmVudGVyIixhbmltYXRpb246W3t0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjAiLG9wYWNpdHk6MH0sb2Zmc2V0Om51bGx9LHt0eXBlOjMsc3RlcHM6W3t0eXBlOjQsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IioifSxvZmZzZXQ6bnVsbH0sdGltaW5nczoyMDB9LHt0eXBlOjQsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntvcGFjaXR5OjF9LG9mZnNldDpudWxsfSx0aW1pbmdzOiI0MDBtcyBlYXNlLW91dCJ9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fSx7dHlwZTo3LG5hbWU6ImlzRXhwYW5kZWQiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6Im5vIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKC05MGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToieWVzIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDBkZWcpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6Im5vID0+IHllcyIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczozMDB9LG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiJ5ZXMgPT4gbm8iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6MzAwfSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24ga2ModCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwyLCJzcGFuIixbWyJjbGFzcyIsImFtbWwtaWNvbiBhbW1sLWljb24tZmEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUmEoMSwwLG51bGwsbnVsbCwxLCJpIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlFhKDIsMjc4NTI4LG51bGwsMCxzLmosW28ucyxvLnQsby5rLG8uRV0se25nQ2xhc3M6WzAsIm5nQ2xhc3MiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDIsMCxlLmNvbXBvbmVudC5ub2RlLmZhSWNvbil9LG51bGwpfWZ1bmN0aW9uIGpjKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsMiwibWF0LWljb24iLFtbImNsYXNzIiwiYW1tbC1pY29uIG1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGZsLmIsZmwuYSkpLG8uUWEoMSw2Mzg5NzYsbnVsbCwwLGRsLmEsW28uayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmpiKDIsMCxbIiAiLCIgIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLG8uYmIoZSwxKS5pbmxpbmUpLHQoZSwyLDAsbi5ub2RlLmljb24pfSl9ZnVuY3Rpb24gSWModCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzI0LCJAaXNFeHBhbmRlZCIsMF0sWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxmbC5iLGZsLmEpKSxvLlFhKDEsNjM4OTc2LG51bGwsMCxkbC5hLFtvLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5qYigtMSwwLFsiIGtleWJvYXJkX2Fycm93X2Rvd24gIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLG4uaGFzSXRlbXMoKSYmbi5leHBhbmRlZD8ieWVzIjoibm8iLG8uYmIoZSwxKS5pbmxpbmUpfSl9ZnVuY3Rpb24gVGModCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwxNiwibWF0LWxpc3QtaXRlbSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIG1hdC1yaXBwbGUiXSxbIm1hdFJpcHBsZSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMCxyPXQuY29tcG9uZW50O3JldHVybiJmb2N1cyI9PT1lJiYoaT0hMSE9PW8uYmIodCwzKS5faGFuZGxlRm9jdXMoKSYmaSksImJsdXIiPT09ZSYmKGk9ITEhPT1vLmJiKHQsMykuX2hhbmRsZUJsdXIoKSYmaSksImNsaWNrIj09PWUmJihpPSExIT09ci5leHBhbmQoci5ub2RlKSYmaSksaX0sZ2MsdmMpKSxvLlFhKDEsMjc4NTI4LG51bGwsMCxzLmosW28ucyxvLnQsby5rLG8uRV0se25nQ2xhc3M6WzAsIm5nQ2xhc3MiXX0sbnVsbCksby5RYSgyLDI3ODUyOCxudWxsLDAscy5vLFtvLnQsby5rLG8uRV0se25nU3R5bGU6WzAsIm5nU3R5bGUiXX0sbnVsbCksby5RYSgzLDEwOTc3MjgsbnVsbCwzLGhjLmIsW28uayxbMixoYy5lXV0sbnVsbCxudWxsKSxvLmhiKDYwMzk3OTc3NiwxLHtfbGluZXM6MX0pLG8uaGIoMzM1NTQ0MzIwLDIse19hdmF0YXI6MH0pLG8uaGIoMzM1NTQ0MzIwLDMse19pY29uOjB9KSxvLlFhKDcsMjEyOTkyLG51bGwsMCxBbC51LFtvLmssby56LHVsLmEsWzIsQWwua10sWzIsY2wuYV1dLG51bGwsbnVsbCksKHQoKSgpLG8uUmEoOCwwLG51bGwsMiw2LCJkaXYiLFtbImNsYXNzIiwiYW5tbC1kYXRhIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsa2MpKSxvLlFhKDEwLDE2Mzg0LG51bGwsMCxzLmwsW28uUSxvLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsamMpKSxvLlFhKDEyLDE2Mzg0LG51bGwsMCxzLmwsW28uUSxvLk5dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLCh0KCkoKSxvLlJhKDEzLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImNsYXNzIiwibGFiZWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoMTQsbnVsbCxbIiIsIiJdKSksKHQoKSgpLG8uSWEoMTY3NzcyMTYsbnVsbCwyLDEsbnVsbCxJYykpLG8uUWEoMTYsMTYzODQsbnVsbCwwLHMubCxbby5RLG8uTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxuLnNlbGVjdGVkTGlzdENsYXNzZXMpLHQoZSwyLDAsbi5nZXRMaXN0U3R5bGUoKSksdChlLDcsMCksdChlLDEwLDAsbi5ub2RlLmZhSWNvbiksdChlLDEyLDAsbi5ub2RlLmljb24pLHQoZSwxNiwwLG4uaGFzSXRlbXMoKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDAsMCxvLmJiKGUsMykuX2F2YXRhcnx8by5iYihlLDMpLl9pY29uLG8uYmIoZSwzKS5fYXZhdGFyfHxvLmJiKGUsMykuX2ljb24sby5iYihlLDcpLnVuYm91bmRlZCksdChlLDE0LDAsbi5ub2RlLmxhYmVsKX0pfWZ1bmN0aW9uIFJjKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLlJhKDAsMCxudWxsLG51bGwsMSwibmctbGlzdC1pdGVtIixbXSxudWxsLFtbbnVsbCwic2VsZWN0ZWRJdGVtIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMDtyZXR1cm4ic2VsZWN0ZWRJdGVtIj09PWUmJihpPSExIT09dC5jb21wb25lbnQuc2VsZWN0ZWRMaXN0SXRlbShuKSYmaSksaX0sUGMsRWMpKSxvLlFhKDEsNTczNDQwLG51bGwsMCxjYyxbb2MubCxzY10se25vZGU6WzAsIm5vZGUiXSxsZXZlbDpbMSwibGV2ZWwiXSxzZWxlY3RlZE5vZGU6WzIsInNlbGVjdGVkTm9kZSJdLG5vZGVDb25maWd1cmF0aW9uOlszLCJub2RlQ29uZmlndXJhdGlvbiJdfSx7c2VsZWN0ZWRJdGVtOiJzZWxlY3RlZEl0ZW0ifSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxlLmNvbnRleHQuJGltcGxpY2l0LG4ubGV2ZWwrMSxuLnNlbGVjdGVkTm9kZSxuLm5vZGVDb25maWd1cmF0aW9uKX0sbnVsbCl9ZnVuY3Rpb24gQWModCl7cmV0dXJuIG8ubGIoMCxbKHQoKSgpLG8uUmEoMCwwLG51bGwsbnVsbCwzLCJkaXYiLFtdLFtbMjQsIkBzbGlkZUluT3V0IiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoMSwyNzg1MjgsbnVsbCwwLHMuaixbby5zLG8udCxvLmssby5FXSx7bmdDbGFzczpbMCwibmdDbGFzcyJdfSxudWxsKSwodCgpKCksby5JYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLFJjKSksby5RYSgzLDI3ODUyOCxudWxsLDAscy5rLFtvLlEsby5OLG8uc10se25nRm9yT2Y6WzAsIm5nRm9yT2YiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxuLmNsYXNzZXMpLHQoZSwzLDAsbi5ub2RlQ2hpbGRyZW4pfSxmdW5jdGlvbih0LGUpe3QoZSwwLDAsdm9pZCAwKX0pfWZ1bmN0aW9uIFBjKHQpe3JldHVybiBvLmxiKDAsWyh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsVGMpKSxvLlFhKDEsMTYzODQsbnVsbCwwLHMubCxbby5RLG8uTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksKHQoKSgpLG8uUmEoMiwwLG51bGwsbnVsbCwxLCJtYXQtZGl2aWRlciIsW1siY2xhc3MiLCJtYXQtZGl2aWRlciJdLFsicm9sZSIsInNlcGFyYXRvciJdXSxbWzEsImFyaWEtb3JpZW50YXRpb24iLDBdLFsyLCJtYXQtZGl2aWRlci12ZXJ0aWNhbCIsbnVsbF0sWzIsIm1hdC1kaXZpZGVyLWhvcml6b250YWwiLG51bGxdLFsyLCJtYXQtZGl2aWRlci1pbnNldCIsbnVsbF1dLG51bGwsbnVsbCx3YyxfYykpLG8uUWEoMyw0OTE1MixudWxsLDAsZGMuYSxbXSxudWxsLG51bGwpLCh0KCkoKSxvLklhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsQWMpKSxvLlFhKDUsMTYzODQsbnVsbCwwLHMubCxbby5RLG8uTl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCwhbi5ub2RlLmhpZGRlbiksdChlLDUsMCxuLmhhc0l0ZW1zKCkmJm4uZXhwYW5kZWQpfSxmdW5jdGlvbih0LGUpe3QoZSwyLDAsby5iYihlLDMpLnZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiLG8uYmIoZSwzKS52ZXJ0aWNhbCwhby5iYihlLDMpLnZlcnRpY2FsLG8uYmIoZSwzKS5pbnNldCl9KX12YXIgRGM9bigiMjFMYiIpLE1jPW4oIk96ZkIiKSxOYz1vLlBhKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbImJvZHlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyZW19LmZpbGwtdG9vbGJhci1zcGFjZVtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgYXV0b30uc2lkZW5hdi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5zaWRlbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMDBweDtib3gtc2hhZG93OjNweCAwIDZweCByZ2JhKDAsMCwwLC4yNCl9I3NpdGVtYXBidXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3dpZHRoOjEwMCV9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4fSNzaWRlbmF2ZmxleGNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBMYyh0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDYxLCJkaXYiLFtbImNsYXNzIiwibWF0LWFwcC1iYWNrZ3JvdW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDEsMCxudWxsLG51bGwsMTksIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsImFjY2VudCJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLER1LFB1KSksby5RYSgyLDQyNDM0NTYsbnVsbCwxLEF1LmEsW28uayx1bC5hLHMuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSxvLmhiKDYwMzk3OTc3NiwxLHtfdG9vbGJhclJvd3M6MX0pLCh0KCkoKSxvLlJhKDQsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuImNsaWNrIj09PWUmJihpPSExIT09dC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmaSksaX0sc2wuZCxzbC5iKSksby5RYSg1LDE4MDIyNCxudWxsLDAsbGwuYixbby5rLHVsLmEsV3MuYixbMixjbC5hXV0sbnVsbCxudWxsKSwodCgpKCksby5SYSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGZsLmIsZmwuYSkpLG8uUWEoNyw2Mzg5NzYsbnVsbCwwLGRsLmEsW28uayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmpiKC0xLDAsWyJtZW51Il0pKSwodCgpKCksby5SYSg5LDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDEwLDAsbnVsbCwwLDEsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uamIoLTEsbnVsbCxbIk1ldGhvdHIiXSkpLCh0KCkoKSxvLlJhKDEyLDAsbnVsbCwwLDEsImRpdiIsW1sic3R5bGUiLCJjb2xvcjogICNlY2UwZTg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJFeGl0Il0pKSwodCgpKCksby5SYSgxNCwwLG51bGwsMCwwLCJzcGFuIixbWyJzdHlsZSIsIndpZHRoOjAuMmVtIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDE1LDAsbnVsbCwwLDAsImltZyIsW1sic3JjIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvYy9jMC9ULS1HT19QYXJpcy1TYWNsYXktLWdvLXBzLXdoaXRlLnBuZyJdLFsic3R5bGUiLCJtYXgtaGVpZ2h0OjEwMCU7IHdpZHRoOmF1dG87IHBhZGRpbmc6MWVtOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgxNiwwLG51bGwsMCwwLCJzcGFuIixbWyJzdHlsZSIsIndpZHRoOjAuMmVtIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlJhKDE3LDAsbnVsbCwwLDMsInNwYW4iLFtbInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO2xpbmUtaGVpZ2h0OiA4NSU7IGZvbnQtc2l6ZTogbWVkaXVtOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5qYigtMSxudWxsLFsiVGVhbSBHTyJdKSksKHQoKSgpLG8uUmEoMTksMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmpiKC0xLG51bGwsWyJQYXJpc1NhY2xheSJdKSksKHQoKSgpLG8uUmEoMjEsMCxudWxsLG51bGwsNDAsIm1hdC1zaWRlbmF2LWNvbnRhaW5lciIsW1siY2xhc3MiLCJzaWRlbmF2LWNvbnRhaW5lciBtYXQtZHJhd2VyLWNvbnRhaW5lciBtYXQtc2lkZW5hdi1jb250YWluZXIiXV0sW1syLCJtYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCIsbnVsbF1dLG51bGwsbnVsbCxyYyxlYykpLG8uUWEoMjIsMTQ5MDk0NCxudWxsLDIsV3UsW1syLE1sLmJdLG8uayxvLnosby5oLFV1LFsyLGNsLmFdXSxudWxsLG51bGwpLG8uaGIoNjAzOTc5Nzc2LDIse19kcmF3ZXJzOjF9KSxvLmhiKDMzNTU0NDMyMCwzLHtfY29udGVudDowfSksKHQoKSgpLG8uUmEoMjUsMCxudWxsLDAsMjgsIm1hdC1zaWRlbmF2IixbWyJjbGFzcyIsInNpZGVuYXYgbWF0LWRyYXdlciBtYXQtc2lkZW5hdiJdLFsiZml4ZWRJblZpZXdwb3J0IiwidHJ1ZSJdLFsidGFiSW5kZXgiLCItMSJdXSxbWzEsInJvbGUiLDBdLFs0MCwiQHRyYW5zZm9ybSIsMF0sWzEsImFsaWduIiwwXSxbMiwibWF0LWRyYXdlci1lbmQiLG51bGxdLFsyLCJtYXQtZHJhd2VyLW92ZXIiLG51bGxdLFsyLCJtYXQtZHJhd2VyLXB1c2giLG51bGxdLFsyLCJtYXQtZHJhd2VyLXNpZGUiLG51bGxdLFsyLCJtYXQtc2lkZW5hdi1maXhlZCIsbnVsbF0sWzQsInRvcCIsInB4Il0sWzQsImJvdHRvbSIsInB4Il1dLFtbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uc3RhcnQiXSxbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuImNvbXBvbmVudDpAdHJhbnNmb3JtLnN0YXJ0Ij09PWUmJihpPSExIT09by5iYih0LDI2KS5fb25BbmltYXRpb25TdGFydChuKSYmaSksImNvbXBvbmVudDpAdHJhbnNmb3JtLmRvbmUiPT09ZSYmKGk9ITEhPT1vLmJiKHQsMjYpLl9vbkFuaW1hdGlvbkVuZChuKSYmaSksaX0sdGMsSnUpKSxvLlFhKDI2LDMzMjU5NTIsW1syLDRdLFsiZHJhd2VyIiw0XV0sMCxadSxbby5rLFdzLmMsV3MuYix1bC5hLG8ueixbMixzLmRdXSx7bW9kZTpbMCwibW9kZSJdLG9wZW5lZDpbMSwib3BlbmVkIl0sZml4ZWRJblZpZXdwb3J0OlsyLCJmaXhlZEluVmlld3BvcnQiXX0sbnVsbCksby5kYigxMzEwNzIscy5iLFtvLmhdKSxvLmRiKDEzMTA3MixzLmIsW28uaF0pLCh0KCkoKSxvLlJhKDI5LDAsbnVsbCwwLDksIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsInByaW1hcnkiXSxbInN0eWxlIiwibWFyZ2luLXRvcDogMTVweDsiXV0sW1syLCJtYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dzIixudWxsXSxbMiwibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsbnVsbF1dLG51bGwsbnVsbCxEdSxQdSkpLG8uUWEoMzAsNDI0MzQ1NixudWxsLDEsQXUuYSxbby5rLHVsLmEscy5kXSx7Y29sb3I6WzAsImNvbG9yIl19LG51bGwpLG8uaGIoNjAzOTc5Nzc2LDQse190b29sYmFyUm93czoxfSksKHQoKSgpLG8uamIoLTEsMCxbIk5hdmlnYXRpb24gIl0pKSwodCgpKCksby5SYSgzMywwLG51bGwsMCwwLCJzcGFuIixbWyJjbGFzcyIsImZpbGwtdG9vbGJhci1zcGFjZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5SYSgzNCwwLG51bGwsMCw0LCJidXR0b24iLFtbIm1hdC1pY29uLWJ1dHRvbiIsIiJdXSxbWzgsImRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKGk9ITEhPT10LmNvbXBvbmVudC5vcGVuU2lkZU5hdigpJiZpKSxpfSxzbC5kLHNsLmIpKSxvLlFhKDM1LDE4MDIyNCxudWxsLDAsbGwuYixbby5rLHVsLmEsV3MuYixbMixjbC5hXV0sbnVsbCxudWxsKSwodCgpKCksby5SYSgzNiwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxmbC5iLGZsLmEpKSxvLlFhKDM3LDYzODk3NixudWxsLDAsZGwuYSxbby5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uamIoLTEsMCxbImtleWJvYXJkX2Fycm93X2xlZnQiXSkpLCh0KCkoKSxvLlJhKDM5LDAsbnVsbCwwLDEsIm5nLW1hdGVyaWFsLW11bHRpbGV2ZWwtbWVudSIsW10sbnVsbCxbW251bGwsInNlbGVjdGVkSXRlbSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIGk9ITA7cmV0dXJuInNlbGVjdGVkSXRlbSI9PT1lJiYoaT0hMSE9PXQuY29tcG9uZW50LnNlbGVjdGVkU2lkZU1lbnVJdGVtKG4pJiZpKSxpfSxPYyx4YykpLG8uUWEoNDAsNjM4OTc2LG51bGwsMCx1Yyxbb2MubCxzY10se2l0ZW1zOlswLCJpdGVtcyJdLGNvbmZpZ3VyYXRpb246WzEsImNvbmZpZ3VyYXRpb24iXX0se3NlbGVjdGVkSXRlbToic2VsZWN0ZWRJdGVtIn0pLCh0KCkoKSxvLlJhKDQxLDAsbnVsbCwwLDEyLCJtYXQtbmF2LWxpc3QiLFtbImNsYXNzIiwibWF0LW5hdi1saXN0Il0sWyJyb2xlIiwibmF2aWdhdGlvbiJdXSxudWxsLG51bGwsbnVsbCxtYyxwYykpLG8uUWEoNDIsNDkxNTIsbnVsbCwwLGhjLmUsW10sbnVsbCxudWxsKSwodCgpKCksby5SYSg0MywwLG51bGwsMCwxMCwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJpZCIsInNpdGVtYXBidXQiXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKGk9ITEhPT1vLmJiKHQsNDQpLl9oYW5kbGVGb2N1cygpJiZpKSwiYmx1ciI9PT1lJiYoaT0hMSE9PW8uYmIodCw0NCkuX2hhbmRsZUJsdXIoKSYmaSksImNsaWNrIj09PWUmJihpPSExIT09by5iYih0LDQ4KS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJmkpLGl9LGdjLHZjKSksby5RYSg0NCwxMDk3NzI4LG51bGwsMyxoYy5iLFtvLmssWzIsaGMuZV1dLG51bGwsbnVsbCksby5oYig2MDM5Nzk3NzYsNSx7X2xpbmVzOjF9KSxvLmhiKDMzNTU0NDMyMCw2LHtfYXZhdGFyOjB9KSxvLmhiKDMzNTU0NDMyMCw3LHtfaWNvbjowfSksby5RYSg0OCw2NzE3NDQsbnVsbCwwLG9jLm0sW29jLmwsb2MuYSxzLmldLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLG8uY2IoNDksMSksKHQoKSgpLG8uUmEoNTAsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsZmwuYixmbC5hKSksby5RYSg1MSw2Mzg5NzYsbnVsbCwwLGRsLmEsW28uayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmpiKC0xLDAsWyJhcHBzIl0pKSwodCgpKCksby5qYigtMSwyLFsiIFNpdGUgbWFwIl0pKSwodCgpKCksby5SYSg1NCwwLG51bGwsMSw3LCJtYXQtc2lkZW5hdi1jb250ZW50IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItY29udGVudCBtYXQtc2lkZW5hdi1jb250ZW50Il0sWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXRBbGlnbiIsImNlbnRlciJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLCR1LFh1KSksby5RYSg1NSwxMDk3NzI4LFtbMyw0XV0sMCxHdSxbby5oLFd1XSxudWxsLG51bGwpLG8uUWEoNTYsNzM3MjgwLG51bGwsMCxEYy5lLFtNYy5pLG8uayxNYy5tXSx7bGF5b3V0OlswLCJsYXlvdXQiXX0sbnVsbCksby5RYSg1Nyw3MzcyODAsbnVsbCwwLERjLmQsW01jLmksby5rLFs2LERjLmVdLE1jLm1dLHthbGlnbjpbMCwiYWxpZ24iXX0sbnVsbCksKHQoKSgpLG8uUmEoNTgsMCxudWxsLDAsMywiZGl2IixbWyJmeEZsZXgiLCIxIDAgNTAwcHgiXSxbImlkIiwic2lkZW5hdmZsZXhjb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUWEoNTksNzM3MjgwLG51bGwsMCxEYy5hLFtNYy5pLG8uayxbMyxEYy5lXSxNYy5tLE1jLmddLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLlJhKDYwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlFhKDYxLDIxMjk5MixudWxsLDAsb2Mubyxbb2MuYixvLlEsby5qLFs4LG51bGxdLG8uaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLCJhY2NlbnQiKSx0KGUsNywwKSx0KGUsMjIsMCksdChlLDI2LDAsby5rYihlLDI2LDAsby5iYihlLDI3KS50cmFuc2Zvcm0obi5pc0hhbmRzZXQkKSk/Im92ZXIiOiJzaWRlIixuLm9wZW5lZFNpZGVOYXYsInRydWUiKSx0KGUsMzAsMCwicHJpbWFyeSIpLHQoZSwzNywwKSx0KGUsNDAsMCxuLnNpZGVNZW51TGlzdCxuLnNpZGVNZW51Q29uZmlnKSx0KGUsNDgsMCx0KGUsNDksMCwiLi4vc2l0ZW1hcCIpKSx0KGUsNTEsMCksdChlLDU2LDAsInJvdyIpLHQoZSw1NywwLCJjZW50ZXIiKSx0KGUsNTksMCwiMSAwIDUwMHB4IiksdChlLDYxLDApfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsby5iYihlLDIpLl90b29sYmFyUm93cy5sZW5ndGg+MCwwPT09by5iYihlLDIpLl90b29sYmFyUm93cy5sZW5ndGgpLHQoZSw0LDAsby5iYihlLDUpLmRpc2FibGVkfHxudWxsLCJOb29wQW5pbWF0aW9ucyI9PT1vLmJiKGUsNSkuX2FuaW1hdGlvbk1vZGUpLHQoZSw2LDAsby5iYihlLDcpLmlubGluZSksdChlLDIxLDAsby5iYihlLDIyKS5fYmFja2Ryb3BPdmVycmlkZSksdChlLDI1LDAsby5rYihlLDI1LDAsby5iYihlLDI4KS50cmFuc2Zvcm0obi5pc0hhbmRzZXQkKSk/ImRpYWxvZyI6Im5hdmlnYXRpb24iLG8uYmIoZSwyNikuX2FuaW1hdGlvblN0YXRlLG51bGwsImVuZCI9PT1vLmJiKGUsMjYpLnBvc2l0aW9uLCJvdmVyIj09PW8uYmIoZSwyNikubW9kZSwicHVzaCI9PT1vLmJiKGUsMjYpLm1vZGUsInNpZGUiPT09by5iYihlLDI2KS5tb2RlLG8uYmIoZSwyNikuZml4ZWRJblZpZXdwb3J0LG8uYmIoZSwyNikuZml4ZWRJblZpZXdwb3J0P28uYmIoZSwyNikuZml4ZWRUb3BHYXA6bnVsbCxvLmJiKGUsMjYpLmZpeGVkSW5WaWV3cG9ydD9vLmJiKGUsMjYpLmZpeGVkQm90dG9tR2FwOm51bGwpLHQoZSwyOSwwLG8uYmIoZSwzMCkuX3Rvb2xiYXJSb3dzLmxlbmd0aD4wLDA9PT1vLmJiKGUsMzApLl90b29sYmFyUm93cy5sZW5ndGgpLHQoZSwzNCwwLG8uYmIoZSwzNSkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYmIoZSwzNSkuX2FuaW1hdGlvbk1vZGUpLHQoZSwzNiwwLG8uYmIoZSwzNykuaW5saW5lKSx0KGUsNDMsMCxvLmJiKGUsNDQpLl9hdmF0YXJ8fG8uYmIoZSw0NCkuX2ljb24sby5iYihlLDQ0KS5fYXZhdGFyfHxvLmJiKGUsNDQpLl9pY29uLG8uYmIoZSw0OCkudGFyZ2V0LG8uYmIoZSw0OCkuaHJlZiksdChlLDUwLDAsby5iYihlLDUxKS5pbmxpbmUpLHQoZSw1NCwwLG8uYmIoZSw1NSkuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMubGVmdCxvLmJiKGUsNTUpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfXZhciBGYz1vLk5hKCJhcHAtcm9vdCIsaCxmdW5jdGlvbih0KXtyZXR1cm4gby5sYigwLFsodCgpKCksby5SYSgwLDAsbnVsbCxudWxsLDEsImFwcC1yb290IixbXSxudWxsLG51bGwsbnVsbCxMYyxOYykpLG8uUWEoMSwxMTQ2ODgsbnVsbCwwLGgsW2MuYSxvYy5sLGQuYV0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxWYz1uKCJaWWp0IiksemM9bigiTlNZTCIpLEJjPW4oImVEa1AiKSxVYz1uKCJtVnNhIiksSGM9bigidC9OYSIpLHFjPW4oIlloYk8iKSxRYz1uKCI0YzM1IiksR2M9bigiaFVXUCIpLFpjPW4oIjNwSlEiKSxXYz1uKCJWOXErIiksWWM9bigiMC91USIpLEtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucm91dGVyPXQsdGhpcy5jaHVua0xvYWRlcj1lfXJldHVybiB0LnByb3RvdHlwZS5jYW5BY3RpdmF0ZT1mdW5jdGlvbih0LGUpe2lmKDA9PWEuYS5wcm9kdWN0aW9uKXJldHVybiBPYmplY3QoWWMuYSkobmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXt0KCEwKX0pKTt2YXIgbj1lLnVybDtyZXR1cm4gY29uc29sZS5sb2coIkNodW5rR3VhcmQgOiAiK24pLHRoaXMuY2h1bmtMb2FkZXIuYXN5bmNMb2FkUGFnZUNodW5rKG4pfSx0Lm5nSW5qZWN0YWJsZURlZj1vLlUoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoby5ZKG9jLmwpLG8uWShkLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksWGM9ZnVuY3Rpb24oKXt9LCRjPW4oInBaaE0iKSxKYz1uKCI4Wlh6IiksdGY9by5PYSh1LFtoXSxmdW5jdGlvbih0KXtyZXR1cm4gby5ZYShbby5aYSg1MTIsby5qLG8uRGEsW1s4LFtwLmEscXMsJHMsYWwsYmwsX2wsU2wsamwsVHUsUnUuYSxKcy5hLEZjXV0sWzMsby5qXSxvLnhdKSxvLlphKDUxMjAsby51LG8uTWEsW1szLG8udV1dKSxvLlphKDQ2MDgscy5uLHMubSxbby51LFsyLHMuel1dKSxvLlphKDUxMjAsby5zLG8uS2EsW10pLG8uWmEoNTEyMCxvLnQsby5MYSxbXSksby5aYSg0NjA4LFZjLmMsVmMubCxbcy5kXSksby5aYSg2MTQ0LG8uSCxudWxsLFtWYy5jXSksby5aYSg0NjA4LFZjLmYsVmMuaCxbXSksby5aYSg1MTIwLFZjLmQsZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzKXtyZXR1cm5bbmV3IFZjLmoodCxlLG4pLG5ldyBWYy5vKGkpLG5ldyBWYy5uKHIsbyxhLHMpXX0sW3MuZCxvLnosby5CLHMuZCxzLmQsVmMuZixvLkVhLFsyLFZjLmddXSksby5aYSg0NjA4LFZjLmUsVmMuZSxbVmMuZCxvLnpdKSxvLlphKDEzNTY4MCxWYy5tLFZjLm0sW3MuZF0pLG8uWmEoNDYwOCxWYy5rLFZjLmssW1ZjLmUsVmMubV0pLG8uWmEoNTEyMCx6Yy5hLGNsLmUsW10pLG8uWmEoNTEyMCx6Yy5jLGNsLmYsW10pLG8uWmEoNDYwOCx6Yy5iLGNsLmQsW3MuZCx6Yy5hLHpjLmNdKSxvLlphKDUxMjAsby5GLGNsLmcsW1ZjLmssemMuYixvLnpdKSxvLlphKDYxNDQsVmMucCxudWxsLFtWYy5tXSksby5aYSg0NjA4LG8uTyxvLk8sW28uel0pLG8uWmEoNDYwOCxNdS5iLGNsLmMsW28uRixWYy5iXSksby5aYSg0NjA4LE1jLmssTWMuaixbTWMuZCxNYy5oXSksby5aYSg1MTIwLG9jLmksb2MuQyxbb2MuQV0pLG8uWmEoNTEyMCxvLmIsZnVuY3Rpb24odCxlLG4pe3JldHVybltNYy5uKHQsZSksbl19LFtzLmQsby5CLG9jLmldKSxvLlphKDUxMjAsb2MuYSxvYy56LFtvYy5sXSksby5aYSg0NjA4LG9jLmUsb2MuZSxbXSksby5aYSg2MTQ0LG9jLmcsbnVsbCxbb2MuZV0pLG8uWmEoMTM1NjgwLG9jLnAsb2MucCxbb2MubCxvLncsby5pLG8ucixvYy5nXSksby5aYSg0NjA4LG9jLmYsb2MuZixbXSksby5aYSg1MTIwLG9jLkQsb2Mudixbb2MubCxzLnYsb2MuaF0pLG8uWmEoNDYwOCxCYy5hLEJjLmEsW0JjLmcsQmMuYyxvLmosQmMuZixCYy5kLG8ucixvLnoscy5kLE1sLmJdKSxvLlphKDUxMjAsQmMuaCxCYy5pLFtCYy5hXSksby5aYSg1MTIwLFVjLmEsVWMuYyxbQmMuYV0pLG8uWmEoNDYwOCxIYy5oLEhjLm4sW3MuZCxvLkIsSGMubF0pLG8uWmEoNDYwOCxIYy5vLEhjLm8sW0hjLmgsSGMubV0pLG8uWmEoNTEyMCxIYy5hLGZ1bmN0aW9uKHQpe3JldHVyblt0XX0sW0hjLm9dKSxvLlphKDQ2MDgsVWwsVWwsW10pLG8uWmEoNDYwOCxBbC5kLEFsLmQsW10pLG8uWmEoNDYwOCxlbC5hLGVsLmEsW10pLG8uWmEoMTA3Mzc0MjMzNixzLmMscy5jLFtdKSxvLlphKDEwMjQsby5tLFZjLnEsW10pLG8uWmEoMTAyNCxvLnksZnVuY3Rpb24oKXtyZXR1cm5bb2MudSgpXX0sW10pLG8uWmEoNTEyLG9jLkEsb2MuQSxbby5yXSksby5aYSg1MTIsSGMuayxIYy5rLFtdKSxvLlphKDIwNDgsSGMuaSxudWxsLFtIYy5rXSksby5aYSg1MTIsSGMuZyxIYy5nLFtIYy5pXSksby5aYSgyMDQ4LEhjLmIsbnVsbCxbSGMuZ10pLG8uWmEoNTEyLEhjLmYsSGMuaixbSGMuYixvLnJdKSxvLlphKDUxMixIYy5jLEhjLmMsW0hjLmZdKSxvLlphKDUxMixsLmEsbC5hLFtIYy5jXSksby5aYSgxMDI0LG8uZCxmdW5jdGlvbih0LGUsbil7cmV0dXJuW1ZjLnIodCksb2MuQihlKSwoaT1uLGZ1bmN0aW9uKCl7cmV0dXJuIGkubG9hZFBhZ2VBdEluaXQoKX0pXTt2YXIgaX0sW1syLG8ueV0sb2MuQSxsLmFdKSxvLlphKDUxMixvLmUsby5lLFtbMixvLmRdXSksby5aYSgxMzE1ODQsby5nLG8uZyxbby56LG8uRWEsby5yLG8ubSxvLmosby5lXSksby5aYSgxMDczNzQyMzM2LG8uZixvLmYsW28uZ10pLG8uWmEoMTA3Mzc0MjMzNixWYy5hLFZjLmEsW1szLFZjLmFdXSksby5aYSgxMDczNzQyMzM2LGNsLmIsY2wuYixbXSksby5aYSgxMDczNzQyMzM2LE1sLmEsTWwuYSxbXSksby5aYSgxMDczNzQyMzM2LEFsLmwsQWwubCxbWzIsQWwuZV1dKSxvLlphKDEwNzM3NDIzMzYsQXUuYixBdS5iLFtdKSxvLlphKDEwNzM3NDIzMzYsdWwuYix1bC5iLFtdKSxvLlphKDEwNzM3NDIzMzYsQWwudixBbC52LFtdKSxvLlphKDEwNzM3NDIzMzYsbGwuYyxsbC5jLFtdKSxvLlphKDEwNzM3NDIzMzYsS3UuYixLdS5iLFtdKSxvLlphKDEwNzM3NDIzMzYsWXUsWXUsW10pLG8uWmEoMTA3Mzc0MjMzNixkbC5iLGRsLmIsW10pLG8uWmEoMTA3Mzc0MjMzNixBbC5tLEFsLm0sW10pLG8uWmEoMTA3Mzc0MjMzNixBbC50LEFsLnQsW10pLG8uWmEoMTA3Mzc0MjMzNixkYy5iLGRjLmIsW10pLG8uWmEoMTA3Mzc0MjMzNixoYy5jLGhjLmMsW10pLG8uWmEoMTA3Mzc0MjMzNixxYy5jLHFjLmMsW10pLG8uWmEoMTA3Mzc0MjMzNixRYy5mLFFjLmYsW10pLG8uWmEoMTA3Mzc0MjMzNixRcy5iLFFzLmIsW10pLG8uWmEoMTA3Mzc0MjMzNixNYy5lLE1jLmUsW10pLG8uWmEoMTA3Mzc0MjMzNixEYy5jLERjLmMsW10pLG8uWmEoMTA3Mzc0MjMzNixHYy5hLEdjLmEsW10pLG8uWmEoMTA3Mzc0MjMzNixaYy5hLFpjLmEsW10pLG8uWmEoMTA3Mzc0MjMzNixXYy5hLFdjLmEsW1syLE1jLmxdLG8uQl0pLG8uWmEoMTAyNCxvYy50LG9jLngsW1szLG9jLmxdXSksby5aYSg1MTIsb2MucixvYy5jLFtdKSxvLlphKDUxMixvYy5iLG9jLmIsW10pLG8uWmEoMjU2LG9jLmgse3VzZUhhc2g6ITB9LFtdKSxvLlphKDEwMjQscy5pLG9jLncsW3MudCxbMixzLmFdLG9jLmhdKSxvLlphKDUxMixzLmgscy5oLFtzLmldKSxvLlphKDUxMixvLmksby5pLFtdKSxvLlphKDUxMixvLncsby5MLFtvLmksWzIsby5NXV0pLG8uWmEoMTAyNCxvYy5qLGZ1bmN0aW9uKCl7cmV0dXJuW1t7cGF0aDoiZGFzaGJvYXJkIixjb21wb25lbnQ6QnMsY2FuQWN0aXZhdGU6W0tjXX0se3BhdGg6InNpdGVtYXAiLGNvbXBvbmVudDpZcyxjYW5BY3RpdmF0ZTpbS2NdfSx7cGF0aDoibGFibm90ZWJvb2svOnBhZ2VwYXRoIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W0tjXX0se3BhdGg6ImxhYm5vdGVib29rIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W0tjXX0se3BhdGg6InRlYW0iLGxvYWRDaGlsZHJlbjoiLi90ZWFtLXJvc3Rlci90ZWFtLXJvc3Rlci1sYXllci5tb2R1bGUjVGVhbVJvc3RlckxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbS2NdfSx7cGF0aDoiYXR0cmlidXRpb24iLGxvYWRDaGlsZHJlbjoiLi9hdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1sYXllci5tb2R1bGUjQXR0cmlidXRpb25MYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W0tjXX0se3BhdGg6InByb2plY3QiLGNvbXBvbmVudDppbCxjYW5BY3RpdmF0ZTpbS2NdfSx7cGF0aDoiYmlvbG9neSIsbG9hZENoaWxkcmVuOiIuL2Jpb2xvZ3ktc2VjdGlvbi9iaW9sb2d5LXNlY3Rpb24tbGF5ZXIubW9kdWxlI0Jpb2xvZ3lTZWN0aW9uTGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOltLY119LHtwYXRoOiJzb2Z0d2FyZSIsY29tcG9uZW50OmhsLGNhbkFjdGl2YXRlOltLY119LHtwYXRoOiJtb2RlbGluZyIsY29tcG9uZW50OnlsLGNhbkFjdGl2YXRlOltLY119LHtwYXRoOiJodW1hbi1wcmFjdGljZXMiLGNvbXBvbmVudDp3bCxjYW5BY3RpdmF0ZTpbS2NdfSx7cGF0aDoiY29sbGFib3JhdGlvbnMiLGNvbXBvbmVudDpPbCxjYW5BY3RpdmF0ZTpbS2NdfSx7cGF0aDoicmVmZXJlbmNlcyIsY29tcG9uZW50OmJ1LGNhbkFjdGl2YXRlOltLY119LHtwYXRoOiJzdXBwb3J0Iixsb2FkQ2hpbGRyZW46Ii4vc3VwcG9ydC1zZWN0aW9uL3N1cHBvcnQtc2VjdGlvbi1sYXllci5tb2R1bGUjU3VwcG9ydFNlY3Rpb25MYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W0tjXX0se3BhdGg6IiIscmVkaXJlY3RUbzoiZGFzaGJvYXJkIixwYXRoTWF0Y2g6ImZ1bGwifV1dfSxbXSksby5aYSgxMDI0LG9jLmwsb2MueSxbby5nLG9jLnIsb2MuYixzLmgsby5yLG8udyxvLmksb2MuaixvYy5oLFsyLG9jLnFdLFsyLG9jLmtdXSksby5aYSgxMDczNzQyMzM2LG9jLm4sb2MubixbWzIsb2MudF0sWzIsb2MubF1dKSxvLlphKDEwNzM3NDIzMzYsWGMsWGMsW10pLG8uWmEoMTA3Mzc0MjMzNixiLmYsYi5mLFtdKSxvLlphKDEwNzM3NDIzMzYsQmMuZSxCYy5lLFtdKSxvLlphKDEwNzM3NDIzMzYsVWMuYixVYy5iLFtdKSxvLlphKDEwNzM3NDIzMzYsSGMuZSxIYy5lLFtdKSxvLlphKDEwNzM3NDIzMzYsSGMuZCxIYy5kLFtdKSxvLlphKDEwNzM3NDIzMzYsJGMuYSwkYy5hLFtdKSxvLlphKDEwNzM3NDIzMzYsYWMsYWMsW10pLG8uWmEoMTA3Mzc0MjMzNixmYyxmYyxbXSksby5aYSgxMDczNzQyMzM2LFRsLnAsVGwucCxbXSksby5aYSgxMDczNzQyMzM2LElsLm0sSWwubSxbXSksby5aYSgxMDczNzQyMzM2LFFsLFFsLFtdKSxvLlphKDEwNzM3NDIzMzYsRGwuZCxEbC5kLFtdKSxvLlphKDEwNzM3NDIzMzYsZnUsZnUsW10pLG8uWmEoMTA3Mzc0MjMzNixtdSxtdSxbXSksby5aYSgxMDczNzQyMzM2LG5sLmQsbmwuZCxbXSksby5aYSgxMDczNzQyMzM2LFJsLmQsUmwuZCxbXSksby5aYSgxMDczNzQyMzM2LEpjLmEsSmMuYSxbXSksby5aYSgxMDI0LG8uYyxvLkphLFtdKSxvLlphKDEwNzM3NDIzMzYsdSx1LFtvLkIsby5jXSksby5aYSgyNTYsby5DYSwhMCxbXSksby5aYSgyNTYsY2wuYSwiQnJvd3NlckFuaW1hdGlvbnMiLFtdKSxvLlphKDI1NixIYy5sLCJYU1JGLVRPS0VOIixbXSksby5aYSgyNTYsSGMubSwiWC1YU1JGLVRPS0VOIixbXSksby5aYSgyNTYsUmwuYSx7c2VwYXJhdG9yS2V5Q29kZXM6W051LmZdfSxbXSldKX0pO2EuYS5wcm9kdWN0aW9uJiZPYmplY3Qoby5WKSgpLFZjLmkoKS5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHRmKS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2codCl9KX0sem90bTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIm1yU0ciKSxyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5wYXJlbnQ9ZSxyLm91dGVyVmFsdWU9bixyLm91dGVySW5kZXg9aSxyLmluZGV4PTAscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5RXJyb3IodCx0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMucGFyZW50Lm5vdGlmeUNvbXBsZXRlKHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZX0obigiRkZPbyIpLmEpLG89bigiRnhiMSIpO2Z1bmN0aW9uIGEodCxlLG4saSl7dmFyIGE9bmV3IHIodCxuLGkpO3JldHVybiBPYmplY3Qoby5hKShlKShhKX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pfX0sW1s0LDVdXV0pOw==");eval(base64script); </script>
 +
 
 +
 
  
 
<script>
 
<script>

Revision as of 13:55, 30 August 2018