Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ramnathv
Created February 12, 2014 04:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ramnathv/8949974 to your computer and use it in GitHub Desktop.
Save ramnathv/8949974 to your computer and use it in GitHub Desktop.
Slidify with Standalone HTML
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html>
<head>
<title>Standalone HTML</title>
<meta charset="utf-8">
<meta name="description" content="Standalone HTML">
<meta name="author" content="">
<meta name="generator" content="slidify" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<base target="_blank"> <!-- This amazingness opens all links in a new tab. --> <link rel=stylesheet href="data:text/css;base64,QGltcG9ydCB1cmwoJ2h0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2Fuczo0MDBpdGFsaWMsNzAwaXRhbGljLDQwMCw3MDAnKTsKCi8qIQogKiBCb290c3RyYXAgdjIuMy4xCiAqCiAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYwogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMAogKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogRGVzaWduZWQgYW5kIGJ1aWx0IHdpdGggYWxsIHRoZSBsb3ZlIGluIHRoZSB3b3JsZCBAdHdpdHRlciBieSBAbWRvIGFuZCBAZmF0LgogKi8KCi5jbGVhcmZpeCB7CiAgKnpvb206IDE7Cn0KCi5jbGVhcmZpeDpiZWZvcmUsCi5jbGVhcmZpeDphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5jbGVhcmZpeDphZnRlciB7CiAgY2xlYXI6IGJvdGg7Cn0KCi5oaWRlLXRleHQgewogIGZvbnQ6IDAvMCBhOwogIGNvbG9yOiB0cmFuc3BhcmVudDsKICB0ZXh0LXNoYWRvdzogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IDA7Cn0KCi5pbnB1dC1ibG9jay1sZXZlbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7CiAgbWluLWhlaWdodDogMzBweDsKICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKYXJ0aWNsZSwKYXNpZGUsCmRldGFpbHMsCmZpZ2NhcHRpb24sCmZpZ3VyZSwKZm9vdGVyLApoZWFkZXIsCmhncm91cCwKbmF2LApzZWN0aW9uIHsKICBkaXNwbGF5OiBibG9jazsKfQoKYXVkaW8sCmNhbnZhcywKdmlkZW8gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAqZGlzcGxheTogaW5saW5lOwogICp6b29tOiAxOwp9CgphdWRpbzpub3QoW2NvbnRyb2xzXSkgewogIGRpc3BsYXk6IG5vbmU7Cn0KCmh0bWwgewogIGZvbnQtc2l6ZTogMTAwJTsKICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CiAgICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwp9CgphOmZvY3VzIHsKICBvdXRsaW5lOiB0aGluIGRvdHRlZCAjMzMzOwogIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsKICBvdXRsaW5lLW9mZnNldDogLTJweDsKfQoKYTpob3ZlciwKYTphY3RpdmUgewogIG91dGxpbmU6IDA7Cn0KCnN1YiwKc3VwIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZm9udC1zaXplOiA3NSU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwp9CgpzdXAgewogIHRvcDogLTAuNWVtOwp9CgpzdWIgewogIGJvdHRvbTogLTAuMjVlbTsKfQoKaW1nIHsKICB3aWR0aDogYXV0b1w5OwogIGhlaWdodDogYXV0bzsKICBtYXgtd2lkdGg6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICBib3JkZXI6IDA7CiAgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsKfQoKI21hcF9jYW52YXMgaW1nLAouZ29vZ2xlLW1hcHMgaW1nIHsKICBtYXgtd2lkdGg6IG5vbmU7Cn0KCmJ1dHRvbiwKaW5wdXQsCnNlbGVjdCwKdGV4dGFyZWEgewogIG1hcmdpbjogMDsKICBmb250LXNpemU6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKYnV0dG9uLAppbnB1dCB7CiAgKm92ZXJmbG93OiB2aXNpYmxlOwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cn0KCmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwKaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIgewogIHBhZGRpbmc6IDA7CiAgYm9yZGVyOiAwOwp9CgpidXR0b24sCmh0bWwgaW5wdXRbdHlwZT0iYnV0dG9uIl0sCmlucHV0W3R5cGU9InJlc2V0Il0sCmlucHV0W3R5cGU9InN1Ym1pdCJdIHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247Cn0KCmxhYmVsLApzZWxlY3QsCmJ1dHRvbiwKaW5wdXRbdHlwZT0iYnV0dG9uIl0sCmlucHV0W3R5cGU9InJlc2V0Il0sCmlucHV0W3R5cGU9InN1Ym1pdCJdLAppbnB1dFt0eXBlPSJyYWRpbyJdLAppbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmlucHV0W3R5cGU9InNlYXJjaCJdIHsKICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsKfQoKaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sCmlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uIHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Cn0KCnRleHRhcmVhIHsKICBvdmVyZmxvdzogYXV0bzsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpAbWVkaWEgcHJpbnQgewogICogewogICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsKICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogIH0KICBhLAogIGE6dmlzaXRlZCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB9CiAgYVtocmVmXTphZnRlciB7CiAgICBjb250ZW50OiAiICgiIGF0dHIoaHJlZikgIikiOwogIH0KICBhYmJyW3RpdGxlXTphZnRlciB7CiAgICBjb250ZW50OiAiICgiIGF0dHIodGl0bGUpICIpIjsKICB9CiAgLmlyIGE6YWZ0ZXIsCiAgYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlciwKICBhW2hyZWZePSIjIl06YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgfQogIHByZSwKICBibG9ja3F1b3RlIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgfQogIHRoZWFkIHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKICB9CiAgdHIsCiAgaW1nIHsKICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKICB9CiAgaW1nIHsKICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIH0KICBAcGFnZSAgewogICAgbWFyZ2luOiAwLjVjbTsKICB9CiAgcCwKICBoMiwKICBoMyB7CiAgICBvcnBoYW5zOiAzOwogICAgd2lkb3dzOiAzOwogIH0KICBoMiwKICBoMyB7CiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsKICB9Cn0KCmJvZHkgewogIG1hcmdpbjogMDsKICBmb250LWZhbWlseTogIk9wZW4gU2FucyIsIENhbGlicmksIENhbmRhcmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMTRweDsKICBsaW5lLWhlaWdodDogMjBweDsKICBjb2xvcjogIzU1NTU1NTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwp9CgphIHsKICBjb2xvcjogIzAwN2ZmZjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIsCmE6Zm9jdXMgewogIGNvbG9yOiAjMDA2NmNjOwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouaW1nLXJvdW5kZWQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4Owp9CgouaW1nLXBvbGFyb2lkIHsKICBwYWRkaW5nOiA0cHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKfQoKLmltZy1jaXJjbGUgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNTAwcHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA1MDBweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwMHB4Owp9Cgoucm93IHsKICBtYXJnaW4tbGVmdDogLTIwcHg7CiAgKnpvb206IDE7Cn0KCi5yb3c6YmVmb3JlLAoucm93OmFmdGVyIHsKICBkaXNwbGF5OiB0YWJsZTsKICBsaW5lLWhlaWdodDogMDsKICBjb250ZW50OiAiIjsKfQoKLnJvdzphZnRlciB7CiAgY2xlYXI6IGJvdGg7Cn0KCltjbGFzcyo9InNwYW4iXSB7CiAgZmxvYXQ6IGxlZnQ7CiAgbWluLWhlaWdodDogMXB4OwogIG1hcmdpbi1sZWZ0OiAyMHB4Owp9CgouY29udGFpbmVyLAoubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwKLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwKLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lciB7CiAgd2lkdGg6IDk0MHB4Owp9Cgouc3BhbjEyIHsKICB3aWR0aDogOTQwcHg7Cn0KCi5zcGFuMTEgewogIHdpZHRoOiA4NjBweDsKfQoKLnNwYW4xMCB7CiAgd2lkdGg6IDc4MHB4Owp9Cgouc3BhbjkgewogIHdpZHRoOiA3MDBweDsKfQoKLnNwYW44IHsKICB3aWR0aDogNjIwcHg7Cn0KCi5zcGFuNyB7CiAgd2lkdGg6IDU0MHB4Owp9Cgouc3BhbjYgewogIHdpZHRoOiA0NjBweDsKfQoKLnNwYW41IHsKICB3aWR0aDogMzgwcHg7Cn0KCi5zcGFuNCB7CiAgd2lkdGg6IDMwMHB4Owp9Cgouc3BhbjMgewogIHdpZHRoOiAyMjBweDsKfQoKLnNwYW4yIHsKICB3aWR0aDogMTQwcHg7Cn0KCi5zcGFuMSB7CiAgd2lkdGg6IDYwcHg7Cn0KCi5vZmZzZXQxMiB7CiAgbWFyZ2luLWxlZnQ6IDk4MHB4Owp9Cgoub2Zmc2V0MTEgewogIG1hcmdpbi1sZWZ0OiA5MDBweDsKfQoKLm9mZnNldDEwIHsKICBtYXJnaW4tbGVmdDogODIwcHg7Cn0KCi5vZmZzZXQ5IHsKICBtYXJnaW4tbGVmdDogNzQwcHg7Cn0KCi5vZmZzZXQ4IHsKICBtYXJnaW4tbGVmdDogNjYwcHg7Cn0KCi5vZmZzZXQ3IHsKICBtYXJnaW4tbGVmdDogNTgwcHg7Cn0KCi5vZmZzZXQ2IHsKICBtYXJnaW4tbGVmdDogNTAwcHg7Cn0KCi5vZmZzZXQ1IHsKICBtYXJnaW4tbGVmdDogNDIwcHg7Cn0KCi5vZmZzZXQ0IHsKICBtYXJnaW4tbGVmdDogMzQwcHg7Cn0KCi5vZmZzZXQzIHsKICBtYXJnaW4tbGVmdDogMjYwcHg7Cn0KCi5vZmZzZXQyIHsKICBtYXJnaW4tbGVmdDogMTgwcHg7Cn0KCi5vZmZzZXQxIHsKICBtYXJnaW4tbGVmdDogMTAwcHg7Cn0KCi5yb3ctZmx1aWQgewogIHdpZHRoOiAxMDAlOwogICp6b29tOiAxOwp9Cgoucm93LWZsdWlkOmJlZm9yZSwKLnJvdy1mbHVpZDphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5yb3ctZmx1aWQ6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwp9Cgoucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXSB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDEwMCU7CiAgbWluLWhlaWdodDogMzBweDsKICBtYXJnaW4tbGVmdDogMi4xMjc2NTk1NzQ0NjgwODUlOwogICptYXJnaW4tbGVmdDogMi4wNzQ0NjgwODUxMDYzODMlOwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9Cgoucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0gKyBbY2xhc3MqPSJzcGFuIl0gewogIG1hcmdpbi1sZWZ0OiAyLjEyNzY1OTU3NDQ2ODA4NSU7Cn0KCi5yb3ctZmx1aWQgLnNwYW4xMiB7CiAgd2lkdGg6IDEwMCU7CiAgKndpZHRoOiA5OS45NDY4MDg1MTA2MzgyOSU7Cn0KCi5yb3ctZmx1aWQgLnNwYW4xMSB7CiAgd2lkdGg6IDkxLjQ4OTM2MTcwMjEyNzY1JTsKICAqd2lkdGg6IDkxLjQzNjE3MDIxMjc2NTk0JTsKfQoKLnJvdy1mbHVpZCAuc3BhbjEwIHsKICB3aWR0aDogODIuOTc4NzIzNDA0MjU1MzIlOwogICp3aWR0aDogODIuOTI1NTMxOTE0ODkzNjElOwp9Cgoucm93LWZsdWlkIC5zcGFuOSB7CiAgd2lkdGg6IDc0LjQ2ODA4NTEwNjM4Mjk3JTsKICAqd2lkdGg6IDc0LjQxNDg5MzYxNzAyMTI2JTsKfQoKLnJvdy1mbHVpZCAuc3BhbjggewogIHdpZHRoOiA2NS45NTc0NDY4MDg1MTA2NCU7CiAgKndpZHRoOiA2NS45MDQyNTUzMTkxNDg5MyU7Cn0KCi5yb3ctZmx1aWQgLnNwYW43IHsKICB3aWR0aDogNTcuNDQ2ODA4NTEwNjM4MjklOwogICp3aWR0aDogNTcuMzkzNjE3MDIxMjc2NTklOwp9Cgoucm93LWZsdWlkIC5zcGFuNiB7CiAgd2lkdGg6IDQ4LjkzNjE3MDIxMjc2NTk1JTsKICAqd2lkdGg6IDQ4Ljg4Mjk3ODcyMzQwNDI1JTsKfQoKLnJvdy1mbHVpZCAuc3BhbjUgewogIHdpZHRoOiA0MC40MjU1MzE5MTQ4OTM2MiU7CiAgKndpZHRoOiA0MC4zNzIzNDA0MjU1MzE5MiU7Cn0KCi5yb3ctZmx1aWQgLnNwYW40IHsKICB3aWR0aDogMzEuOTE0ODkzNjE3MDIxMjc4JTsKICAqd2lkdGg6IDMxLjg2MTcwMjEyNzY1OTU3NiU7Cn0KCi5yb3ctZmx1aWQgLnNwYW4zIHsKICB3aWR0aDogMjMuNDA0MjU1MzE5MTQ4OTM0JTsKICAqd2lkdGg6IDIzLjM1MTA2MzgyOTc4NzIzMyU7Cn0KCi5yb3ctZmx1aWQgLnNwYW4yIHsKICB3aWR0aDogMTQuODkzNjE3MDIxMjc2NTk1JTsKICAqd2lkdGg6IDE0Ljg0MDQyNTUzMTkxNDg5NCU7Cn0KCi5yb3ctZmx1aWQgLnNwYW4xIHsKICB3aWR0aDogNi4zODI5Nzg3MjM0MDQyNTUlOwogICp3aWR0aDogNi4zMjk3ODcyMzQwNDI1NTMlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQxMiB7CiAgbWFyZ2luLWxlZnQ6IDEwNC4yNTUzMTkxNDg5MzYxNyU7CiAgKm1hcmdpbi1sZWZ0OiAxMDQuMTQ4OTM2MTcwMjEyNzUlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQxMjpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDEwMi4xMjc2NTk1NzQ0NjgwOCU7CiAgKm1hcmdpbi1sZWZ0OiAxMDIuMDIxMjc2NTk1NzQ0NjclOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQxMSB7CiAgbWFyZ2luLWxlZnQ6IDk1Ljc0NDY4MDg1MTA2MzgyJTsKICAqbWFyZ2luLWxlZnQ6IDk1LjYzODI5Nzg3MjM0MDQlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDkzLjYxNzAyMTI3NjU5NTc0JTsKICAqbWFyZ2luLWxlZnQ6IDkzLjUxMDYzODI5Nzg3MjMyJTsKfQoKLnJvdy1mbHVpZCAub2Zmc2V0MTAgewogIG1hcmdpbi1sZWZ0OiA4Ny4yMzQwNDI1NTMxOTE0OSU7CiAgKm1hcmdpbi1sZWZ0OiA4Ny4xMjc2NTk1NzQ0NjgwNyU7Cn0KCi5yb3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNoaWxkIHsKICBtYXJnaW4tbGVmdDogODUuMTA2MzgyOTc4NzIzNCU7CiAgKm1hcmdpbi1sZWZ0OiA4NC45OTk5OTk5OTk5OTk5OSU7Cn0KCi5yb3ctZmx1aWQgLm9mZnNldDkgewogIG1hcmdpbi1sZWZ0OiA3OC43MjM0MDQyNTUzMTkxNCU7CiAgKm1hcmdpbi1sZWZ0OiA3OC42MTcwMjEyNzY1OTU3MiU7Cn0KCi5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGQgewogIG1hcmdpbi1sZWZ0OiA3Ni41OTU3NDQ2ODA4NTEwNiU7CiAgKm1hcmdpbi1sZWZ0OiA3Ni40ODkzNjE3MDIxMjc2NCU7Cn0KCi5yb3ctZmx1aWQgLm9mZnNldDggewogIG1hcmdpbi1sZWZ0OiA3MC4yMTI3NjU5NTc0NDY4JTsKICAqbWFyZ2luLWxlZnQ6IDcwLjEwNjM4Mjk3ODcyMzM5JTsKfQoKLnJvdy1mbHVpZCAub2Zmc2V0ODpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDY4LjA4NTEwNjM4Mjk3ODcyJTsKICAqbWFyZ2luLWxlZnQ6IDY3Ljk3ODcyMzQwNDI1NTMlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQ3IHsKICBtYXJnaW4tbGVmdDogNjEuNzAyMTI3NjU5NTc0NDYlOwogICptYXJnaW4tbGVmdDogNjEuNTk1NzQ0NjgwODUxMDYlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxkIHsKICBtYXJnaW4tbGVmdDogNTkuNTc0NDY4MDg1MTA2Mzc1JTsKICAqbWFyZ2luLWxlZnQ6IDU5LjQ2ODA4NTEwNjM4Mjk3JTsKfQoKLnJvdy1mbHVpZCAub2Zmc2V0NiB7CiAgbWFyZ2luLWxlZnQ6IDUzLjE5MTQ4OTM2MTcwMjEyNSU7CiAgKm1hcmdpbi1sZWZ0OiA1My4wODUxMDYzODI5Nzg3MTUlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNoaWxkIHsKICBtYXJnaW4tbGVmdDogNTEuMDYzODI5Nzg3MjM0MDM1JTsKICAqbWFyZ2luLWxlZnQ6IDUwLjk1NzQ0NjgwODUxMDYzJTsKfQoKLnJvdy1mbHVpZCAub2Zmc2V0NSB7CiAgbWFyZ2luLWxlZnQ6IDQ0LjY4MDg1MTA2MzgyOTc5JTsKICAqbWFyZ2luLWxlZnQ6IDQ0LjU3NDQ2ODA4NTEwNjM4JTsKfQoKLnJvdy1mbHVpZCAub2Zmc2V0NTpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDQyLjU1MzE5MTQ4OTM2MTclOwogICptYXJnaW4tbGVmdDogNDIuNDQ2ODA4NTEwNjM4MyU7Cn0KCi5yb3ctZmx1aWQgLm9mZnNldDQgewogIG1hcmdpbi1sZWZ0OiAzNi4xNzAyMTI3NjU5NTc0NDQlOwogICptYXJnaW4tbGVmdDogMzYuMDYzODI5Nzg3MjM0MDUlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxkIHsKICBtYXJnaW4tbGVmdDogMzQuMDQyNTUzMTkxNDg5MzYlOwogICptYXJnaW4tbGVmdDogMzMuOTM2MTcwMjEyNzY1OTYlOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQzIHsKICBtYXJnaW4tbGVmdDogMjcuNjU5NTc0NDY4MDg1MTA0JTsKICAqbWFyZ2luLWxlZnQ6IDI3LjU1MzE5MTQ4OTM2MTclOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxkIHsKICBtYXJnaW4tbGVmdDogMjUuNTMxOTE0ODkzNjE3MDIlOwogICptYXJnaW4tbGVmdDogMjUuNDI1NTMxOTE0ODkzNjE4JTsKfQoKLnJvdy1mbHVpZCAub2Zmc2V0MiB7CiAgbWFyZ2luLWxlZnQ6IDE5LjE0ODkzNjE3MDIxMjc2NCU7CiAgKm1hcmdpbi1sZWZ0OiAxOS4wNDI1NTMxOTE0ODkzNiU7Cn0KCi5yb3ctZmx1aWQgLm9mZnNldDI6Zmlyc3QtY2hpbGQgewogIG1hcmdpbi1sZWZ0OiAxNy4wMjEyNzY1OTU3NDQ2OCU7CiAgKm1hcmdpbi1sZWZ0OiAxNi45MTQ4OTM2MTcwMjEyNzglOwp9Cgoucm93LWZsdWlkIC5vZmZzZXQxIHsKICBtYXJnaW4tbGVmdDogMTAuNjM4Mjk3ODcyMzQwNDI1JTsKICAqbWFyZ2luLWxlZnQ6IDEwLjUzMTkxNDg5MzYxNzAyJTsKfQoKLnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDguNTEwNjM4Mjk3ODcyMzQlOwogICptYXJnaW4tbGVmdDogOC40MDQyNTUzMTkxNDg5MzglOwp9CgpbY2xhc3MqPSJzcGFuIl0uaGlkZSwKLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0uaGlkZSB7CiAgZGlzcGxheTogbm9uZTsKfQoKW2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQsCi5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQgewogIGZsb2F0OiByaWdodDsKfQoKLmNvbnRhaW5lciB7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogICp6b29tOiAxOwp9CgouY29udGFpbmVyOmJlZm9yZSwKLmNvbnRhaW5lcjphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5jb250YWluZXI6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwp9CgouY29udGFpbmVyLWZsdWlkIHsKICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIHBhZGRpbmctbGVmdDogMjBweDsKICAqem9vbTogMTsKfQoKLmNvbnRhaW5lci1mbHVpZDpiZWZvcmUsCi5jb250YWluZXItZmx1aWQ6YWZ0ZXIgewogIGRpc3BsYXk6IHRhYmxlOwogIGxpbmUtaGVpZ2h0OiAwOwogIGNvbnRlbnQ6ICIiOwp9CgouY29udGFpbmVyLWZsdWlkOmFmdGVyIHsKICBjbGVhcjogYm90aDsKfQoKcCB7CiAgbWFyZ2luOiAwIDAgMTBweDsKfQoKLmxlYWQgewogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgZm9udC1zaXplOiAyMXB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IDMwcHg7Cn0KCnNtYWxsIHsKICBmb250LXNpemU6IDg1JTsKfQoKc3Ryb25nIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKZW0gewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKY2l0ZSB7CiAgZm9udC1zdHlsZTogbm9ybWFsOwp9CgoubXV0ZWQgewogIGNvbG9yOiAjZGZkZmRmOwp9CgphLm11dGVkOmhvdmVyLAphLm11dGVkOmZvY3VzIHsKICBjb2xvcjogI2M2YzZjNjsKfQoKLnRleHQtd2FybmluZyB7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCmEudGV4dC13YXJuaW5nOmhvdmVyLAphLnRleHQtd2FybmluZzpmb2N1cyB7CiAgY29sb3I6ICNlNmU2ZTY7Cn0KCi50ZXh0LWVycm9yIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKYS50ZXh0LWVycm9yOmhvdmVyLAphLnRleHQtZXJyb3I6Zm9jdXMgewogIGNvbG9yOiAjZTZlNmU2Owp9CgoudGV4dC1pbmZvIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKYS50ZXh0LWluZm86aG92ZXIsCmEudGV4dC1pbmZvOmZvY3VzIHsKICBjb2xvcjogI2U2ZTZlNjsKfQoKLnRleHQtc3VjY2VzcyB7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCmEudGV4dC1zdWNjZXNzOmhvdmVyLAphLnRleHQtc3VjY2Vzczpmb2N1cyB7CiAgY29sb3I6ICNlNmU2ZTY7Cn0KCi50ZXh0LWxlZnQgewogIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi50ZXh0LXJpZ2h0IHsKICB0ZXh0LWFsaWduOiByaWdodDsKfQoKLnRleHQtY2VudGVyIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgxLApoMiwKaDMsCmg0LApoNSwKaDYgewogIG1hcmdpbjogMTBweCAwOwogIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgY29sb3I6ICMwODA4MDg7CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplbGVnaWJpbGl0eTsKfQoKaDEgc21hbGwsCmgyIHNtYWxsLApoMyBzbWFsbCwKaDQgc21hbGwsCmg1IHNtYWxsLApoNiBzbWFsbCB7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBsaW5lLWhlaWdodDogMTsKICBjb2xvcjogI2RmZGZkZjsKfQoKaDEsCmgyLApoMyB7CiAgbGluZS1oZWlnaHQ6IDQwcHg7Cn0KCmgxIHsKICBmb250LXNpemU6IDM4LjVweDsKfQoKaDIgewogIGZvbnQtc2l6ZTogMzEuNXB4Owp9CgpoMyB7CiAgZm9udC1zaXplOiAyNC41cHg7Cn0KCmg0IHsKICBmb250LXNpemU6IDE3LjVweDsKfQoKaDUgewogIGZvbnQtc2l6ZTogMTRweDsKfQoKaDYgewogIGZvbnQtc2l6ZTogMTEuOXB4Owp9CgpoMSBzbWFsbCB7CiAgZm9udC1zaXplOiAyNC41cHg7Cn0KCmgyIHNtYWxsIHsKICBmb250LXNpemU6IDE3LjVweDsKfQoKaDMgc21hbGwgewogIGZvbnQtc2l6ZTogMTRweDsKfQoKaDQgc21hbGwgewogIGZvbnQtc2l6ZTogMTRweDsKfQoKLnBhZ2UtaGVhZGVyIHsKICBwYWRkaW5nLWJvdHRvbTogOXB4OwogIG1hcmdpbjogMjBweCAwIDMwcHg7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWVlZWU7Cn0KCnVsLApvbCB7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDAgMCAxMHB4IDI1cHg7Cn0KCnVsIHVsLAp1bCBvbCwKb2wgb2wsCm9sIHVsIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgpsaSB7CiAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCnVsLnVuc3R5bGVkLApvbC51bnN0eWxlZCB7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQoKdWwuaW5saW5lLApvbC5pbmxpbmUgewogIG1hcmdpbi1sZWZ0OiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KCnVsLmlubGluZSA+IGxpLApvbC5pbmxpbmUgPiBsaSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICpkaXNwbGF5OiBpbmxpbmU7CiAgcGFkZGluZy1yaWdodDogNXB4OwogIHBhZGRpbmctbGVmdDogNXB4OwogICp6b29tOiAxOwp9CgpkbCB7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKZHQsCmRkIHsKICBsaW5lLWhlaWdodDogMjBweDsKfQoKZHQgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgpkZCB7CiAgbWFyZ2luLWxlZnQ6IDEwcHg7Cn0KCi5kbC1ob3Jpem9udGFsIHsKICAqem9vbTogMTsKfQoKLmRsLWhvcml6b250YWw6YmVmb3JlLAouZGwtaG9yaXpvbnRhbDphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5kbC1ob3Jpem9udGFsOmFmdGVyIHsKICBjbGVhcjogYm90aDsKfQoKLmRsLWhvcml6b250YWwgZHQgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiAxNjBweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIGNsZWFyOiBsZWZ0OwogIHRleHQtYWxpZ246IHJpZ2h0OwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5kbC1ob3Jpem9udGFsIGRkIHsKICBtYXJnaW4tbGVmdDogMTgwcHg7Cn0KCmhyIHsKICBtYXJnaW46IDIwcHggMDsKICBib3JkZXI6IDA7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWVlZWU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmY7Cn0KCmFiYnJbdGl0bGVdLAphYmJyW2RhdGEtb3JpZ2luYWwtdGl0bGVdIHsKICBjdXJzb3I6IGhlbHA7CiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjZGZkZmRmOwp9CgphYmJyLmluaXRpYWxpc20gewogIGZvbnQtc2l6ZTogOTAlOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCmJsb2NrcXVvdGUgewogIHBhZGRpbmc6IDAgMCAwIDE1cHg7CiAgbWFyZ2luOiAwIDAgMjBweDsKICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNlZWVlZWU7Cn0KCmJsb2NrcXVvdGUgcCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKICBmb250LXNpemU6IDE3LjVweDsKICBmb250LXdlaWdodDogMzAwOwogIGxpbmUtaGVpZ2h0OiAxLjI1Owp9CgpibG9ja3F1b3RlIHNtYWxsIHsKICBkaXNwbGF5OiBibG9jazsKICBsaW5lLWhlaWdodDogMjBweDsKICBjb2xvcjogI2RmZGZkZjsKfQoKYmxvY2txdW90ZSBzbWFsbDpiZWZvcmUgewogIGNvbnRlbnQ6ICdcMjAxNCBcMDBBMCc7Cn0KCmJsb2NrcXVvdGUucHVsbC1yaWdodCB7CiAgZmxvYXQ6IHJpZ2h0OwogIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgcGFkZGluZy1sZWZ0OiAwOwogIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICNlZWVlZWU7CiAgYm9yZGVyLWxlZnQ6IDA7Cn0KCmJsb2NrcXVvdGUucHVsbC1yaWdodCBwLApibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGwgewogIHRleHQtYWxpZ246IHJpZ2h0Owp9CgpibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YmVmb3JlIHsKICBjb250ZW50OiAnJzsKfQoKYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVyIHsKICBjb250ZW50OiAnXDAwQTAgXDIwMTQnOwp9CgpxOmJlZm9yZSwKcTphZnRlciwKYmxvY2txdW90ZTpiZWZvcmUsCmJsb2NrcXVvdGU6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwp9CgphZGRyZXNzIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBsaW5lLWhlaWdodDogMjBweDsKfQoKLyogY29tbWVudGVkIG91dCB0byB3b3JrIHdpdGggc2xpZGlmeQpjb2RlLApwcmUgewogIHBhZGRpbmc6IDAgM3B4IDJweDsKICBmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICM5OTk5OTk7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCmNvZGUgewogIHBhZGRpbmc6IDJweCA0cHg7CiAgY29sb3I6ICNkMTQ7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y5OwogIGJvcmRlcjogMXB4IHNvbGlkICNlMWUxZTg7Cn0KCnByZSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogOS41cHg7CiAgbWFyZ2luOiAwIDAgMTBweDsKICBmb250LXNpemU6IDEzcHg7CiAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgd29yZC1icmVhazogYnJlYWstYWxsOwogIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICB3aGl0ZS1zcGFjZTogcHJlOwogIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKcHJlLnByZXR0eXByaW50IHsKICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9CgpwcmUgY29kZSB7CiAgcGFkZGluZzogMDsKICBjb2xvcjogaW5oZXJpdDsKICB3aGl0ZS1zcGFjZTogcHJlOwogIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IDA7Cn0KCi5wcmUtc2Nyb2xsYWJsZSB7CiAgbWF4LWhlaWdodDogMzQwcHg7CiAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CiovCgpmb3JtIHsKICBtYXJnaW46IDAgMCAyMHB4Owp9CgpmaWVsZHNldCB7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDA7CiAgYm9yZGVyOiAwOwp9CgpsZWdlbmQgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBmb250LXNpemU6IDIxcHg7CiAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgY29sb3I6ICM5OTk5OTk7CiAgYm9yZGVyOiAwOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9CgpsZWdlbmQgc21hbGwgewogIGZvbnQtc2l6ZTogMTVweDsKICBjb2xvcjogI2RmZGZkZjsKfQoKbGFiZWwsCmlucHV0LApidXR0b24sCnNlbGVjdCwKdGV4dGFyZWEgewogIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgppbnB1dCwKYnV0dG9uLApzZWxlY3QsCnRleHRhcmVhIHsKICBmb250LWZhbWlseTogIk9wZW4gU2FucyIsIENhbGlicmksIENhbmRhcmEsIEFyaWFsLCBzYW5zLXNlcmlmOwp9CgpsYWJlbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgpzZWxlY3QsCnRleHRhcmVhLAppbnB1dFt0eXBlPSJ0ZXh0Il0sCmlucHV0W3R5cGU9InBhc3N3b3JkIl0sCmlucHV0W3R5cGU9ImRhdGV0aW1lIl0sCmlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sCmlucHV0W3R5cGU9ImRhdGUiXSwKaW5wdXRbdHlwZT0ibW9udGgiXSwKaW5wdXRbdHlwZT0idGltZSJdLAppbnB1dFt0eXBlPSJ3ZWVrIl0sCmlucHV0W3R5cGU9Im51bWJlciJdLAppbnB1dFt0eXBlPSJlbWFpbCJdLAppbnB1dFt0eXBlPSJ1cmwiXSwKaW5wdXRbdHlwZT0ic2VhcmNoIl0sCmlucHV0W3R5cGU9InRlbCJdLAppbnB1dFt0eXBlPSJjb2xvciJdLAoudW5lZGl0YWJsZS1pbnB1dCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMjBweDsKICBwYWRkaW5nOiA0cHggNnB4OwogIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAyMHB4OwogIGNvbG9yOiAjYmJiYmJiOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCmlucHV0LAp0ZXh0YXJlYSwKLnVuZWRpdGFibGUtaW5wdXQgewogIHdpZHRoOiAyMDZweDsKfQoKdGV4dGFyZWEgewogIGhlaWdodDogYXV0bzsKfQoKdGV4dGFyZWEsCmlucHV0W3R5cGU9InRleHQiXSwKaW5wdXRbdHlwZT0icGFzc3dvcmQiXSwKaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXSwKaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSwKaW5wdXRbdHlwZT0iZGF0ZSJdLAppbnB1dFt0eXBlPSJtb250aCJdLAppbnB1dFt0eXBlPSJ0aW1lIl0sCmlucHV0W3R5cGU9IndlZWsiXSwKaW5wdXRbdHlwZT0ibnVtYmVyIl0sCmlucHV0W3R5cGU9ImVtYWlsIl0sCmlucHV0W3R5cGU9InVybCJdLAppbnB1dFt0eXBlPSJzZWFyY2giXSwKaW5wdXRbdHlwZT0idGVsIl0sCmlucHV0W3R5cGU9ImNvbG9yIl0sCi51bmVkaXRhYmxlLWlucHV0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkICNiYmJiYmI7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7CiAgICAgLW1vei10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7CiAgICAgICAtby10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7CiAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7Cn0KCnRleHRhcmVhOmZvY3VzLAppbnB1dFt0eXBlPSJ0ZXh0Il06Zm9jdXMsCmlucHV0W3R5cGU9InBhc3N3b3JkIl06Zm9jdXMsCmlucHV0W3R5cGU9ImRhdGV0aW1lIl06Zm9jdXMsCmlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl06Zm9jdXMsCmlucHV0W3R5cGU9ImRhdGUiXTpmb2N1cywKaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cywKaW5wdXRbdHlwZT0idGltZSJdOmZvY3VzLAppbnB1dFt0eXBlPSJ3ZWVrIl06Zm9jdXMsCmlucHV0W3R5cGU9Im51bWJlciJdOmZvY3VzLAppbnB1dFt0eXBlPSJlbWFpbCJdOmZvY3VzLAppbnB1dFt0eXBlPSJ1cmwiXTpmb2N1cywKaW5wdXRbdHlwZT0ic2VhcmNoIl06Zm9jdXMsCmlucHV0W3R5cGU9InRlbCJdOmZvY3VzLAppbnB1dFt0eXBlPSJjb2xvciJdOmZvY3VzLAoudW5lZGl0YWJsZS1pbnB1dDpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDgyLCAxNjgsIDIzNiwgMC44KTsKICBvdXRsaW5lOiAwOwogIG91dGxpbmU6IHRoaW4gZG90dGVkIFw5OwogIC8qIElFNi05ICovCgogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoODIsIDE2OCwgMjM2LCAwLjYpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoODIsIDE2OCwgMjM2LCAwLjYpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoODIsIDE2OCwgMjM2LCAwLjYpOwp9CgppbnB1dFt0eXBlPSJyYWRpbyJdLAppbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICBtYXJnaW46IDRweCAwIDA7CiAgbWFyZ2luLXRvcDogMXB4IFw5OwogICptYXJnaW4tdG9wOiAwOwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cn0KCmlucHV0W3R5cGU9ImZpbGUiXSwKaW5wdXRbdHlwZT0iaW1hZ2UiXSwKaW5wdXRbdHlwZT0ic3VibWl0Il0sCmlucHV0W3R5cGU9InJlc2V0Il0sCmlucHV0W3R5cGU9ImJ1dHRvbiJdLAppbnB1dFt0eXBlPSJyYWRpbyJdLAppbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICB3aWR0aDogYXV0bzsKfQoKc2VsZWN0LAppbnB1dFt0eXBlPSJmaWxlIl0gewogIGhlaWdodDogMzBweDsKICAvKiBJbiBJRTcsIHRoZSBoZWlnaHQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IGNhbm5vdCBiZSBjaGFuZ2VkIGJ5IGhlaWdodCwgb25seSBmb250LXNpemUgKi8KCiAgKm1hcmdpbi10b3A6IDRweDsKICAvKiBGb3IgSUU3LCBhZGQgdG9wIG1hcmdpbiB0byBhbGlnbiBzZWxlY3Qgd2l0aCBsYWJlbHMgKi8KCiAgbGluZS1oZWlnaHQ6IDMwcHg7Cn0KCnNlbGVjdCB7CiAgd2lkdGg6IDIyMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgI2JiYmJiYjsKfQoKc2VsZWN0W211bHRpcGxlXSwKc2VsZWN0W3NpemVdIHsKICBoZWlnaHQ6IGF1dG87Cn0KCnNlbGVjdDpmb2N1cywKaW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLAppbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLAppbnB1dFt0eXBlPSJjaGVja2JveCJdOmZvY3VzIHsKICBvdXRsaW5lOiB0aGluIGRvdHRlZCAjMzMzOwogIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsKICBvdXRsaW5lLW9mZnNldDogLTJweDsKfQoKLnVuZWRpdGFibGUtaW5wdXQsCi51bmVkaXRhYmxlLXRleHRhcmVhIHsKICBjb2xvcjogI2RmZGZkZjsKICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmM7CiAgYm9yZGVyLWNvbG9yOiAjYmJiYmJiOwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOwp9CgoudW5lZGl0YWJsZS1pbnB1dCB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudW5lZGl0YWJsZS10ZXh0YXJlYSB7CiAgd2lkdGg6IGF1dG87CiAgaGVpZ2h0OiBhdXRvOwp9CgppbnB1dDotbW96LXBsYWNlaG9sZGVyLAp0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVyIHsKICBjb2xvcjogI2JiYmJiYjsKfQoKaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLAp0ZXh0YXJlYTotbXMtaW5wdXQtcGxhY2Vob2xkZXIgewogIGNvbG9yOiAjYmJiYmJiOwp9CgppbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciwKdGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewogIGNvbG9yOiAjYmJiYmJiOwp9CgoucmFkaW8sCi5jaGVja2JveCB7CiAgbWluLWhlaWdodDogMjBweDsKICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cn0KCi5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLAouY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luLWxlZnQ6IC0yMHB4Owp9CgouY29udHJvbHMgPiAucmFkaW86Zmlyc3QtY2hpbGQsCi5jb250cm9scyA+IC5jaGVja2JveDpmaXJzdC1jaGlsZCB7CiAgcGFkZGluZy10b3A6IDVweDsKfQoKLnJhZGlvLmlubGluZSwKLmNoZWNrYm94LmlubGluZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBhZGRpbmctdG9wOiA1cHg7CiAgbWFyZ2luLWJvdHRvbTogMDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoucmFkaW8uaW5saW5lICsgLnJhZGlvLmlubGluZSwKLmNoZWNrYm94LmlubGluZSArIC5jaGVja2JveC5pbmxpbmUgewogIG1hcmdpbi1sZWZ0OiAxMHB4Owp9CgouaW5wdXQtbWluaSB7CiAgd2lkdGg6IDYwcHg7Cn0KCi5pbnB1dC1zbWFsbCB7CiAgd2lkdGg6IDkwcHg7Cn0KCi5pbnB1dC1tZWRpdW0gewogIHdpZHRoOiAxNTBweDsKfQoKLmlucHV0LWxhcmdlIHsKICB3aWR0aDogMjEwcHg7Cn0KCi5pbnB1dC14bGFyZ2UgewogIHdpZHRoOiAyNzBweDsKfQoKLmlucHV0LXh4bGFyZ2UgewogIHdpZHRoOiA1MzBweDsKfQoKaW5wdXRbY2xhc3MqPSJzcGFuIl0sCnNlbGVjdFtjbGFzcyo9InNwYW4iXSwKdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sCi51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLAoucm93LWZsdWlkIGlucHV0W2NsYXNzKj0ic3BhbiJdLAoucm93LWZsdWlkIHNlbGVjdFtjbGFzcyo9InNwYW4iXSwKLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwKLnJvdy1mbHVpZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSB7CiAgZmxvYXQ6IG5vbmU7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi5pbnB1dC1hcHBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sCi5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sCi5pbnB1dC1wcmVwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLAouaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwKLnJvdy1mbHVpZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwKLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sCi5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sCi5yb3ctZmx1aWQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sCi5yb3ctZmx1aWQgLmlucHV0LXByZXBlbmQgW2NsYXNzKj0ic3BhbiJdLAoucm93LWZsdWlkIC5pbnB1dC1hcHBlbmQgW2NsYXNzKj0ic3BhbiJdIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCmlucHV0LAp0ZXh0YXJlYSwKLnVuZWRpdGFibGUtaW5wdXQgewogIG1hcmdpbi1sZWZ0OiAwOwp9CgouY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXSArIFtjbGFzcyo9InNwYW4iXSB7CiAgbWFyZ2luLWxlZnQ6IDIwcHg7Cn0KCmlucHV0LnNwYW4xMiwKdGV4dGFyZWEuc3BhbjEyLAoudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTIgewogIHdpZHRoOiA5MjZweDsKfQoKaW5wdXQuc3BhbjExLAp0ZXh0YXJlYS5zcGFuMTEsCi51bmVkaXRhYmxlLWlucHV0LnNwYW4xMSB7CiAgd2lkdGg6IDg0NnB4Owp9CgppbnB1dC5zcGFuMTAsCnRleHRhcmVhLnNwYW4xMCwKLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwIHsKICB3aWR0aDogNzY2cHg7Cn0KCmlucHV0LnNwYW45LAp0ZXh0YXJlYS5zcGFuOSwKLnVuZWRpdGFibGUtaW5wdXQuc3BhbjkgewogIHdpZHRoOiA2ODZweDsKfQoKaW5wdXQuc3BhbjgsCnRleHRhcmVhLnNwYW44LAoudW5lZGl0YWJsZS1pbnB1dC5zcGFuOCB7CiAgd2lkdGg6IDYwNnB4Owp9CgppbnB1dC5zcGFuNywKdGV4dGFyZWEuc3BhbjcsCi51bmVkaXRhYmxlLWlucHV0LnNwYW43IHsKICB3aWR0aDogNTI2cHg7Cn0KCmlucHV0LnNwYW42LAp0ZXh0YXJlYS5zcGFuNiwKLnVuZWRpdGFibGUtaW5wdXQuc3BhbjYgewogIHdpZHRoOiA0NDZweDsKfQoKaW5wdXQuc3BhbjUsCnRleHRhcmVhLnNwYW41LAoudW5lZGl0YWJsZS1pbnB1dC5zcGFuNSB7CiAgd2lkdGg6IDM2NnB4Owp9CgppbnB1dC5zcGFuNCwKdGV4dGFyZWEuc3BhbjQsCi51bmVkaXRhYmxlLWlucHV0LnNwYW40IHsKICB3aWR0aDogMjg2cHg7Cn0KCmlucHV0LnNwYW4zLAp0ZXh0YXJlYS5zcGFuMywKLnVuZWRpdGFibGUtaW5wdXQuc3BhbjMgewogIHdpZHRoOiAyMDZweDsKfQoKaW5wdXQuc3BhbjIsCnRleHRhcmVhLnNwYW4yLAoudW5lZGl0YWJsZS1pbnB1dC5zcGFuMiB7CiAgd2lkdGg6IDEyNnB4Owp9CgppbnB1dC5zcGFuMSwKdGV4dGFyZWEuc3BhbjEsCi51bmVkaXRhYmxlLWlucHV0LnNwYW4xIHsKICB3aWR0aDogNDZweDsKfQoKLmNvbnRyb2xzLXJvdyB7CiAgKnpvb206IDE7Cn0KCi5jb250cm9scy1yb3c6YmVmb3JlLAouY29udHJvbHMtcm93OmFmdGVyIHsKICBkaXNwbGF5OiB0YWJsZTsKICBsaW5lLWhlaWdodDogMDsKICBjb250ZW50OiAiIjsKfQoKLmNvbnRyb2xzLXJvdzphZnRlciB7CiAgY2xlYXI6IGJvdGg7Cn0KCi5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdLAoucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdIHsKICBmbG9hdDogbGVmdDsKfQoKLmNvbnRyb2xzLXJvdyAuY2hlY2tib3hbY2xhc3MqPSJzcGFuIl0sCi5jb250cm9scy1yb3cgLnJhZGlvW2NsYXNzKj0ic3BhbiJdIHsKICBwYWRkaW5nLXRvcDogNXB4Owp9CgppbnB1dFtkaXNhYmxlZF0sCnNlbGVjdFtkaXNhYmxlZF0sCnRleHRhcmVhW2Rpc2FibGVkXSwKaW5wdXRbcmVhZG9ubHldLApzZWxlY3RbcmVhZG9ubHldLAp0ZXh0YXJlYVtyZWFkb25seV0gewogIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsKfQoKaW5wdXRbdHlwZT0icmFkaW8iXVtkaXNhYmxlZF0sCmlucHV0W3R5cGU9ImNoZWNrYm94Il1bZGlzYWJsZWRdLAppbnB1dFt0eXBlPSJyYWRpbyJdW3JlYWRvbmx5XSwKaW5wdXRbdHlwZT0iY2hlY2tib3giXVtyZWFkb25seV0gewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9CgouY29udHJvbC1ncm91cC53YXJuaW5nIC5jb250cm9sLWxhYmVsLAouY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWJsb2NrLAouY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWlubGluZSB7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCi5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNoZWNrYm94LAouY29udHJvbC1ncm91cC53YXJuaW5nIC5yYWRpbywKLmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCwKLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsCi5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWEgewogIGNvbG9yOiAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0LAouY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwKLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYSB7CiAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmOwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwp9CgouY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0OmZvY3VzLAouY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdDpmb2N1cywKLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYTpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiAjZTZlNmU2OwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNmZmZmZmY7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2ZmZmZmZjsKICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sCi5jb250cm9sLWdyb3VwLndhcm5pbmcgLmlucHV0LWFwcGVuZCAuYWRkLW9uIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3NTE4OwogIGJvcmRlci1jb2xvcjogI2ZmZmZmZjsKfQoKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNvbnRyb2wtbGFiZWwsCi5jb250cm9sLWdyb3VwLmVycm9yIC5oZWxwLWJsb2NrLAouY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1pbmxpbmUgewogIGNvbG9yOiAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC5lcnJvciAuY2hlY2tib3gsCi5jb250cm9sLWdyb3VwLmVycm9yIC5yYWRpbywKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgaW5wdXQsCi5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWEgewogIGNvbG9yOiAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwKLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0LAouY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYSB7CiAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmOwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwp9CgouY29udHJvbC1ncm91cC5lcnJvciBpbnB1dDpmb2N1cywKLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0OmZvY3VzLAouY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYTpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiAjZTZlNmU2OwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNmZmZmZmY7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2ZmZmZmZjsKICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLAouY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtYXBwZW5kIC5hZGQtb24gewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNmZjAwMzk7CiAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC5zdWNjZXNzIC5jb250cm9sLWxhYmVsLAouY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWJsb2NrLAouY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWlubGluZSB7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmNoZWNrYm94LAouY29udHJvbC1ncm91cC5zdWNjZXNzIC5yYWRpbywKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3QsCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWEgewogIGNvbG9yOiAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0LAouY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCwKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYSB7CiAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmOwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOwp9CgouY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0OmZvY3VzLAouY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdDpmb2N1cywKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYTpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiAjZTZlNmU2OwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNmZmZmZmY7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2ZmZmZmZjsKICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC5zdWNjZXNzIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LWFwcGVuZCAuYWRkLW9uIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2ZiNjE4OwogIGJvcmRlci1jb2xvcjogI2ZmZmZmZjsKfQoKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuY29udHJvbC1sYWJlbCwKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1ibG9jaywKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1pbmxpbmUgewogIGNvbG9yOiAjZmZmZmZmOwp9CgouY29udHJvbC1ncm91cC5pbmZvIC5jaGVja2JveCwKLmNvbnRyb2wtZ3JvdXAuaW5mbyAucmFkaW8sCi5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsCi5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0LAouY29udHJvbC1ncm91cC5pbmZvIHRleHRhcmVhIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLmNvbnRyb2wtZ3JvdXAuaW5mbyBpbnB1dCwKLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsCi5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWEgewogIGJvcmRlci1jb2xvcjogI2ZmZmZmZjsKICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTsKICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTsKICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTsKfQoKLmNvbnRyb2wtZ3JvdXAuaW5mbyBpbnB1dDpmb2N1cywKLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3Q6Zm9jdXMsCi5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWE6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogI2U2ZTZlNjsKICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjZmZmZmZmOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNmZmZmZmY7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2ZmZmZmZjsKfQoKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLAouY29udHJvbC1ncm91cC5pbmZvIC5pbnB1dC1hcHBlbmQgLmFkZC1vbiB7CiAgY29sb3I6ICNmZmZmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk5NTRiYjsKICBib3JkZXItY29sb3I6ICNmZmZmZmY7Cn0KCmlucHV0OmZvY3VzOmludmFsaWQsCnRleHRhcmVhOmZvY3VzOmludmFsaWQsCnNlbGVjdDpmb2N1czppbnZhbGlkIHsKICBjb2xvcjogI2I5NGE0ODsKICBib3JkZXItY29sb3I6ICNlZTVmNWI7Cn0KCmlucHV0OmZvY3VzOmludmFsaWQ6Zm9jdXMsCnRleHRhcmVhOmZvY3VzOmludmFsaWQ6Zm9jdXMsCnNlbGVjdDpmb2N1czppbnZhbGlkOmZvY3VzIHsKICBib3JkZXItY29sb3I6ICNlOTMyMmQ7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4ICNmOGI5Yjc7CiAgICAgLW1vei1ib3gtc2hhZG93OiAwIDAgNnB4ICNmOGI5Yjc7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4ICNmOGI5Yjc7Cn0KCi5mb3JtLWFjdGlvbnMgewogIHBhZGRpbmc6IDE5cHggMjBweCAyMHB4OwogIG1hcmdpbi10b3A6IDIwcHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1OwogICp6b29tOiAxOwp9CgouZm9ybS1hY3Rpb25zOmJlZm9yZSwKLmZvcm0tYWN0aW9uczphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5mb3JtLWFjdGlvbnM6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwp9CgouaGVscC1ibG9jaywKLmhlbHAtaW5saW5lIHsKICBjb2xvcjogIzdiN2I3YjsKfQoKLmhlbHAtYmxvY2sgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5oZWxwLWlubGluZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICpkaXNwbGF5OiBpbmxpbmU7CiAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAqem9vbTogMTsKfQoKLmlucHV0LWFwcGVuZCwKLmlucHV0LXByZXBlbmQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBtYXJnaW4tYm90dG9tOiAxMHB4OwogIGZvbnQtc2l6ZTogMDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi5pbnB1dC1hcHBlbmQgaW5wdXQsCi5pbnB1dC1wcmVwZW5kIGlucHV0LAouaW5wdXQtYXBwZW5kIHNlbGVjdCwKLmlucHV0LXByZXBlbmQgc2VsZWN0LAouaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LAouaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dCwKLmlucHV0LWFwcGVuZCAuZHJvcGRvd24tbWVudSwKLmlucHV0LXByZXBlbmQgLmRyb3Bkb3duLW1lbnUsCi5pbnB1dC1hcHBlbmQgLnBvcG92ZXIsCi5pbnB1dC1wcmVwZW5kIC5wb3BvdmVyIHsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5pbnB1dC1hcHBlbmQgaW5wdXQsCi5pbnB1dC1wcmVwZW5kIGlucHV0LAouaW5wdXQtYXBwZW5kIHNlbGVjdCwKLmlucHV0LXByZXBlbmQgc2VsZWN0LAouaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LAouaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG1hcmdpbi1ib3R0b206IDA7CiAgKm1hcmdpbi1sZWZ0OiAwOwogIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgMHB4IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgMHB4IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgMHB4IDA7Cn0KCi5pbnB1dC1hcHBlbmQgaW5wdXQ6Zm9jdXMsCi5pbnB1dC1wcmVwZW5kIGlucHV0OmZvY3VzLAouaW5wdXQtYXBwZW5kIHNlbGVjdDpmb2N1cywKLmlucHV0LXByZXBlbmQgc2VsZWN0OmZvY3VzLAouaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0OmZvY3VzLAouaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1cyB7CiAgei1pbmRleDogMjsKfQoKLmlucHV0LWFwcGVuZCAuYWRkLW9uLAouaW5wdXQtcHJlcGVuZCAuYWRkLW9uIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgd2lkdGg6IGF1dG87CiAgaGVpZ2h0OiAyMHB4OwogIG1pbi13aWR0aDogMTZweDsKICBwYWRkaW5nOiA0cHggNXB4OwogIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAyMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7CiAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKfQoKLmlucHV0LWFwcGVuZCAuYWRkLW9uLAouaW5wdXQtcHJlcGVuZCAuYWRkLW9uLAouaW5wdXQtYXBwZW5kIC5idG4sCi5pbnB1dC1wcmVwZW5kIC5idG4sCi5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGUsCi5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXAgPiAuZHJvcGRvd24tdG9nZ2xlIHsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgouaW5wdXQtYXBwZW5kIC5hY3RpdmUsCi5pbnB1dC1wcmVwZW5kIC5hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICM5NmVkN2E7CiAgYm9yZGVyLWNvbG9yOiAjM2ZiNjE4Owp9CgouaW5wdXQtcHJlcGVuZCAuYWRkLW9uLAouaW5wdXQtcHJlcGVuZCAuYnRuIHsKICBtYXJnaW4tcmlnaHQ6IC0xcHg7Cn0KCi5pbnB1dC1wcmVwZW5kIC5hZGQtb246Zmlyc3QtY2hpbGQsCi5pbnB1dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDAgMHB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDAgMHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDAgMHB4Owp9CgouaW5wdXQtYXBwZW5kIGlucHV0LAouaW5wdXQtYXBwZW5kIHNlbGVjdCwKLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgMCAwcHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgMCAwcHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgMCAwcHg7Cn0KCi5pbnB1dC1hcHBlbmQgaW5wdXQgKyAuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwKLmlucHV0LWFwcGVuZCBzZWxlY3QgKyAuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwKLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCArIC5idG4tZ3JvdXAgLmJ0bjpsYXN0LWNoaWxkIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKfQoKLmlucHV0LWFwcGVuZCAuYWRkLW9uLAouaW5wdXQtYXBwZW5kIC5idG4sCi5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cCB7CiAgbWFyZ2luLWxlZnQ6IC0xcHg7Cn0KCi5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLAouaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZCwKLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwOmxhc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKfQoKLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIGlucHV0LAouaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0LAouaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgouaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgaW5wdXQgKyAuYnRuLWdyb3VwIC5idG4sCi5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBzZWxlY3QgKyAuYnRuLWdyb3VwIC5idG4sCi5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCArIC5idG4tZ3JvdXAgLmJ0biB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgMHB4IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgMHB4IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgMHB4IDA7Cn0KCi5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYWRkLW9uOmZpcnN0LWNoaWxkLAouaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLXJpZ2h0OiAtMXB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDAgMHB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDAgMHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDAgMHB4Owp9CgouaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLAouaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxkIHsKICBtYXJnaW4tbGVmdDogLTFweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwcHggMDsKfQoKLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQgewogIG1hcmdpbi1sZWZ0OiAwOwp9CgppbnB1dC5zZWFyY2gtcXVlcnkgewogIHBhZGRpbmctcmlnaHQ6IDE0cHg7CiAgcGFkZGluZy1yaWdodDogNHB4IFw5OwogIHBhZGRpbmctbGVmdDogMTRweDsKICBwYWRkaW5nLWxlZnQ6IDRweCBcOTsKICAvKiBJRTctOCBkb2Vzbid0IGhhdmUgYm9yZGVyLXJhZGl1cywgc28gZG9uJ3QgaW5kZW50IHRoZSBwYWRkaW5nICovCgogIG1hcmdpbi1ib3R0b206IDA7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNXB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7Cn0KCi8qIEFsbG93IGZvciBpbnB1dCBwcmVwZW5kL2FwcGVuZCBpbiBzZWFyY2ggZm9ybXMgKi8KCi5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5zZWFyY2gtcXVlcnksCi5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuc2VhcmNoLXF1ZXJ5IHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNHB4IDAgMCAxNHB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMTRweCAwIDAgMTRweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHggMCAwIDE0cHg7Cn0KCi5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5idG4gewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAxNHB4IDE0cHggMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMTRweCAxNHB4IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDE0cHggMTRweCAwOwp9CgouZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeSB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDE0cHggMTRweCAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAxNHB4IDE0cHggMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMTRweCAxNHB4IDA7Cn0KCi5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDE0cHggMCAwIDE0cHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAxNHB4IDAgMCAxNHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMTRweCAwIDAgMTRweDsKfQoKLmZvcm0tc2VhcmNoIGlucHV0LAouZm9ybS1pbmxpbmUgaW5wdXQsCi5mb3JtLWhvcml6b250YWwgaW5wdXQsCi5mb3JtLXNlYXJjaCB0ZXh0YXJlYSwKLmZvcm0taW5saW5lIHRleHRhcmVhLAouZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhLAouZm9ybS1zZWFyY2ggc2VsZWN0LAouZm9ybS1pbmxpbmUgc2VsZWN0LAouZm9ybS1ob3Jpem9udGFsIHNlbGVjdCwKLmZvcm0tc2VhcmNoIC5oZWxwLWlubGluZSwKLmZvcm0taW5saW5lIC5oZWxwLWlubGluZSwKLmZvcm0taG9yaXpvbnRhbCAuaGVscC1pbmxpbmUsCi5mb3JtLXNlYXJjaCAudW5lZGl0YWJsZS1pbnB1dCwKLmZvcm0taW5saW5lIC51bmVkaXRhYmxlLWlucHV0LAouZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0LAouZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQsCi5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZCwKLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtcHJlcGVuZCwKLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsCi5mb3JtLWlubGluZSAuaW5wdXQtYXBwZW5kLAouZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1hcHBlbmQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAqZGlzcGxheTogaW5saW5lOwogIG1hcmdpbi1ib3R0b206IDA7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAqem9vbTogMTsKfQoKLmZvcm0tc2VhcmNoIC5oaWRlLAouZm9ybS1pbmxpbmUgLmhpZGUsCi5mb3JtLWhvcml6b250YWwgLmhpZGUgewogIGRpc3BsYXk6IG5vbmU7Cn0KCi5mb3JtLXNlYXJjaCBsYWJlbCwKLmZvcm0taW5saW5lIGxhYmVsLAouZm9ybS1zZWFyY2ggLmJ0bi1ncm91cCwKLmZvcm0taW5saW5lIC5idG4tZ3JvdXAgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsCi5mb3JtLWlubGluZSAuaW5wdXQtYXBwZW5kLAouZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQsCi5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLmZvcm0tc2VhcmNoIC5yYWRpbywKLmZvcm0tc2VhcmNoIC5jaGVja2JveCwKLmZvcm0taW5saW5lIC5yYWRpbywKLmZvcm0taW5saW5lIC5jaGVja2JveCB7CiAgcGFkZGluZy1sZWZ0OiAwOwogIG1hcmdpbi1ib3R0b206IDA7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLmZvcm0tc2VhcmNoIC5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLAouZm9ybS1zZWFyY2ggLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sCi5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwKLmZvcm0taW5saW5lIC5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICBmbG9hdDogbGVmdDsKICBtYXJnaW4tcmlnaHQ6IDNweDsKICBtYXJnaW4tbGVmdDogMDsKfQoKLmNvbnRyb2wtZ3JvdXAgewogIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCmxlZ2VuZCArIC5jb250cm9sLWdyb3VwIHsKICBtYXJnaW4tdG9wOiAyMHB4OwogIC13ZWJraXQtbWFyZ2luLXRvcC1jb2xsYXBzZTogc2VwYXJhdGU7Cn0KCi5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXAgewogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgKnpvb206IDE7Cn0KCi5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YmVmb3JlLAouZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVyIHsKICBkaXNwbGF5OiB0YWJsZTsKICBsaW5lLWhlaWdodDogMDsKICBjb250ZW50OiAiIjsKfQoKLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cDphZnRlciB7CiAgY2xlYXI6IGJvdGg7Cn0KCi5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWwgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiAxNjBweDsKICBwYWRkaW5nLXRvcDogNXB4OwogIHRleHQtYWxpZ246IHJpZ2h0Owp9CgouZm9ybS1ob3Jpem9udGFsIC5jb250cm9scyB7CiAgKmRpc3BsYXk6IGlubGluZS1ibG9jazsKICAqcGFkZGluZy1sZWZ0OiAyMHB4OwogIG1hcmdpbi1sZWZ0OiAxODBweDsKICAqbWFyZ2luLWxlZnQ6IDA7Cn0KCi5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xzOmZpcnN0LWNoaWxkIHsKICAqcGFkZGluZy1sZWZ0OiAxODBweDsKfQoKLmZvcm0taG9yaXpvbnRhbCAuaGVscC1ibG9jayB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLmZvcm0taG9yaXpvbnRhbCBpbnB1dCArIC5oZWxwLWJsb2NrLAouZm9ybS1ob3Jpem9udGFsIHNlbGVjdCArIC5oZWxwLWJsb2NrLAouZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhICsgLmhlbHAtYmxvY2ssCi5mb3JtLWhvcml6b250YWwgLnVuZWRpdGFibGUtaW5wdXQgKyAuaGVscC1ibG9jaywKLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtcHJlcGVuZCArIC5oZWxwLWJsb2NrLAouZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1hcHBlbmQgKyAuaGVscC1ibG9jayB7CiAgbWFyZ2luLXRvcDogMTBweDsKfQoKLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25zIHsKICBwYWRkaW5nLWxlZnQ6IDE4MHB4Owp9Cgp0YWJsZSB7CiAgbWF4LXdpZHRoOiAxMDAlOwogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgYm9yZGVyLXNwYWNpbmc6IDA7Cn0KCi50YWJsZSB7CiAgd2lkdGg6IDEwMCU7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKLnRhYmxlIHRoLAoudGFibGUgdGQgewogIHBhZGRpbmc6IDhweDsKICBsaW5lLWhlaWdodDogMjBweDsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGRkZGQ7Cn0KCi50YWJsZSB0aCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50YWJsZSB0aGVhZCB0aCB7CiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKfQoKLnRhYmxlIGNhcHRpb24gKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwKLnRhYmxlIGNhcHRpb24gKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwKLnRhYmxlIGNvbGdyb3VwICsgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsCi50YWJsZSBjb2xncm91cCArIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLAoudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsCi50YWJsZSB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZCB7CiAgYm9yZGVyLXRvcDogMDsKfQoKLnRhYmxlIHRib2R5ICsgdGJvZHkgewogIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGRkZGRkOwp9CgoudGFibGUgLnRhYmxlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwp9CgoudGFibGUtY29uZGVuc2VkIHRoLAoudGFibGUtY29uZGVuc2VkIHRkIHsKICBwYWRkaW5nOiA0cHggNXB4Owp9CgoudGFibGUtYm9yZGVyZWQgewogIGJvcmRlcjogMXB4IHNvbGlkICNkZGRkZGQ7CiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAqYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICBib3JkZXItbGVmdDogMDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLnRhYmxlLWJvcmRlcmVkIHRoLAoudGFibGUtYm9yZGVyZWQgdGQgewogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZGRkZDsKfQoKLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24gKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwKLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24gKyB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwKLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24gKyB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwKLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwICsgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsCi50YWJsZS1ib3JkZXJlZCBjb2xncm91cCArIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRoLAoudGFibGUtYm9yZGVyZWQgY29sZ3JvdXAgKyB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwKLnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLAoudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsCi50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZCB7CiAgYm9yZGVyLXRvcDogMDsKfQoKLnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkID4gdGg6Zmlyc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCA+IHRkOmZpcnN0LWNoaWxkLAoudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgPiB0aDpmaXJzdC1jaGlsZCB7CiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogMDsKfQoKLnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkID4gdGg6bGFzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkID4gdGQ6bGFzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkID4gdGg6bGFzdC1jaGlsZCB7CiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogMDsKfQoKLnRhYmxlLWJvcmRlcmVkIHRoZWFkOmxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCA+IHRoOmZpcnN0LWNoaWxkLAoudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGQ6Zmlyc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgPiB0aDpmaXJzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCA+IHRkOmZpcnN0LWNoaWxkLAoudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGg6Zmlyc3QtY2hpbGQgewogIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDA7Cn0KCi50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgPiB0aDpsYXN0LWNoaWxkLAoudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGQ6bGFzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCA+IHRoOmxhc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgPiB0ZDpsYXN0LWNoaWxkLAoudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGg6bGFzdC1jaGlsZCB7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMDsKfQoKLnRhYmxlLWJvcmRlcmVkIHRmb290ICsgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAwOwp9CgoudGFibGUtYm9yZGVyZWQgdGZvb3QgKyB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMDsKfQoKLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24gKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24gKyB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwICsgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCBjb2xncm91cCArIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHsKICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAwOwp9CgoudGFibGUtYm9yZGVyZWQgY2FwdGlvbiArIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCBjYXB0aW9uICsgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwICsgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwKLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwICsgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7CiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogMDsKfQoKLnRhYmxlLXN0cmlwZWQgdGJvZHkgPiB0cjpudGgtY2hpbGQob2RkKSA+IHRkLAoudGFibGUtc3RyaXBlZCB0Ym9keSA+IHRyOm50aC1jaGlsZChvZGQpID4gdGggewogIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7Cn0KCi50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciA+IHRkLAoudGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIgPiB0aCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZjhmZDsKfQoKdGFibGUgdGRbY2xhc3MqPSJzcGFuIl0sCnRhYmxlIHRoW2NsYXNzKj0ic3BhbiJdLAoucm93LWZsdWlkIHRhYmxlIHRkW2NsYXNzKj0ic3BhbiJdLAoucm93LWZsdWlkIHRhYmxlIHRoW2NsYXNzKj0ic3BhbiJdIHsKICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogIGZsb2F0OiBub25lOwogIG1hcmdpbi1sZWZ0OiAwOwp9CgoudGFibGUgdGQuc3BhbjEsCi50YWJsZSB0aC5zcGFuMSB7CiAgZmxvYXQ6IG5vbmU7CiAgd2lkdGg6IDQ0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuMiwKLnRhYmxlIHRoLnNwYW4yIHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogMTI0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuMywKLnRhYmxlIHRoLnNwYW4zIHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogMjA0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuNCwKLnRhYmxlIHRoLnNwYW40IHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogMjg0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuNSwKLnRhYmxlIHRoLnNwYW41IHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogMzY0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuNiwKLnRhYmxlIHRoLnNwYW42IHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogNDQ0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuNywKLnRhYmxlIHRoLnNwYW43IHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogNTI0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuOCwKLnRhYmxlIHRoLnNwYW44IHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogNjA0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuOSwKLnRhYmxlIHRoLnNwYW45IHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogNjg0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0ZC5zcGFuMTAsCi50YWJsZSB0aC5zcGFuMTAgewogIGZsb2F0OiBub25lOwogIHdpZHRoOiA3NjRweDsKICBtYXJnaW4tbGVmdDogMDsKfQoKLnRhYmxlIHRkLnNwYW4xMSwKLnRhYmxlIHRoLnNwYW4xMSB7CiAgZmxvYXQ6IG5vbmU7CiAgd2lkdGg6IDg0NHB4OwogIG1hcmdpbi1sZWZ0OiAwOwp9CgoudGFibGUgdGQuc3BhbjEyLAoudGFibGUgdGguc3BhbjEyIHsKICBmbG9hdDogbm9uZTsKICB3aWR0aDogOTI0cHg7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50YWJsZSB0Ym9keSB0ci5zdWNjZXNzID4gdGQgewogIGJhY2tncm91bmQtY29sb3I6ICMzZmI2MTg7Cn0KCi50YWJsZSB0Ym9keSB0ci5lcnJvciA+IHRkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYwMDM5Owp9CgoudGFibGUgdGJvZHkgdHIud2FybmluZyA+IHRkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3NTE4Owp9CgoudGFibGUgdGJvZHkgdHIuaW5mbyA+IHRkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk1NGJiOwp9CgoudGFibGUtaG92ZXIgdGJvZHkgdHIuc3VjY2Vzczpob3ZlciA+IHRkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzc5ZjE1Owp9CgoudGFibGUtaG92ZXIgdGJvZHkgdHIuZXJyb3I6aG92ZXIgPiB0ZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2U2MDAzMzsKfQoKLnRhYmxlLWhvdmVyIHRib2R5IHRyLndhcm5pbmc6aG92ZXIgPiB0ZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlNjYwMDsKfQoKLnRhYmxlLWhvdmVyIHRib2R5IHRyLmluZm86aG92ZXIgPiB0ZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzhkNDZiMDsKfQoKW2NsYXNzXj0iaWNvbi0iXSwKW2NsYXNzKj0iIGljb24tIl0gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB3aWR0aDogMTRweDsKICBoZWlnaHQ6IDE0cHg7CiAgbWFyZ2luLXRvcDogMXB4OwogICptYXJnaW4tcmlnaHQ6IC4zZW07CiAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiLi4vaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZyIpOwogIGJhY2tncm91bmQtcG9zaXRpb246IDE0cHggMTRweDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9CgovKiBXaGl0ZSBpY29ucyB3aXRoIG9wdGlvbmFsIGNsYXNzLCBvciBvbiBob3Zlci9mb2N1cy9hY3RpdmUgc3RhdGVzIG9mIGNlcnRhaW4gZWxlbWVudHMgKi8KCi5pY29uLXdoaXRlLAoubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGEgPiBbY2xhc3NePSJpY29uLSJdLAoubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGEgPiBbY2xhc3MqPSIgaWNvbi0iXSwKLm5hdi1saXN0ID4gLmFjdGl2ZSA+IGEgPiBbY2xhc3NePSJpY29uLSJdLAoubmF2LWxpc3QgPiAuYWN0aXZlID4gYSA+IFtjbGFzcyo9IiBpY29uLSJdLAoubmF2YmFyLWludmVyc2UgLm5hdiA+IC5hY3RpdmUgPiBhID4gW2NsYXNzXj0iaWNvbi0iXSwKLm5hdmJhci1pbnZlcnNlIC5uYXYgPiAuYWN0aXZlID4gYSA+IFtjbGFzcyo9IiBpY29uLSJdLAouZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciA+IFtjbGFzc149Imljb24tIl0sCi5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzID4gW2NsYXNzXj0iaWNvbi0iXSwKLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIgPiBbY2xhc3MqPSIgaWNvbi0iXSwKLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMgPiBbY2xhc3MqPSIgaWNvbi0iXSwKLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSA+IFtjbGFzc149Imljb24tIl0sCi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEgPiBbY2xhc3MqPSIgaWNvbi0iXSwKLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiBhID4gW2NsYXNzXj0iaWNvbi0iXSwKLmRyb3Bkb3duLXN1Ym1lbnU6Zm9jdXMgPiBhID4gW2NsYXNzXj0iaWNvbi0iXSwKLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiBhID4gW2NsYXNzKj0iIGljb24tIl0sCi5kcm9wZG93bi1zdWJtZW51OmZvY3VzID4gYSA+IFtjbGFzcyo9IiBpY29uLSJdIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmciKTsKfQoKLmljb24tZ2xhc3MgewogIGJhY2tncm91bmQtcG9zaXRpb246IDAgICAgICAwOwp9CgouaWNvbi1tdXNpYyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0cHggMDsKfQoKLmljb24tc2VhcmNoIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwOwp9CgouaWNvbi1lbnZlbG9wZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTcycHggMDsKfQoKLmljb24taGVhcnQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7Cn0KCi5pY29uLXN0YXIgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjBweCAwOwp9CgouaWNvbi1zdGFyLWVtcHR5IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMDsKfQoKLmljb24tdXNlciB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2OHB4IDA7Cn0KCi5pY29uLWZpbG0gewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAwOwp9CgouaWNvbi10aC1sYXJnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIxNnB4IDA7Cn0KCi5pY29uLXRoIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggMDsKfQoKLmljb24tdGgtbGlzdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI2NHB4IDA7Cn0KCi5pY29uLW9rIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg4cHggMDsKfQoKLmljb24tcmVtb3ZlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzEycHggMDsKfQoKLmljb24tem9vbS1pbiB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IDA7Cn0KCi5pY29uLXpvb20tb3V0IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzYwcHggMDsKfQoKLmljb24tb2ZmIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzg0cHggMDsKfQoKLmljb24tc2lnbmFsIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDA4cHggMDsKfQoKLmljb24tY29nIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDMycHggMDsKfQoKLmljb24tdHJhc2ggewogIGJhY2tncm91bmQtcG9zaXRpb246IC00NTZweCAwOwp9CgouaWNvbi1ob21lIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNHB4Owp9CgouaWNvbi1maWxlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjRweCAtMjRweDsKfQoKLmljb24tdGltZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTI0cHg7Cn0KCi5pY29uLXJvYWQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC03MnB4IC0yNHB4Owp9CgouaWNvbi1kb3dubG9hZC1hbHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0yNHB4Owp9CgouaWNvbi1kb3dubG9hZCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMHB4IC0yNHB4Owp9CgouaWNvbi11cGxvYWQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMjRweDsKfQoKLmljb24taW5ib3ggewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjhweCAtMjRweDsKfQoKLmljb24tcGxheS1jaXJjbGUgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMjRweDsKfQoKLmljb24tcmVwZWF0IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjE2cHggLTI0cHg7Cn0KCi5pY29uLXJlZnJlc2ggewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMjRweDsKfQoKLmljb24tbGlzdC1hbHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjRweCAtMjRweDsKfQoKLmljb24tbG9jayB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4IC0yNHB4Owp9CgouaWNvbi1mbGFnIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzEycHggLTI0cHg7Cn0KCi5pY29uLWhlYWRwaG9uZXMgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0zMzZweCAtMjRweDsKfQoKLmljb24tdm9sdW1lLW9mZiB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2MHB4IC0yNHB4Owp9CgouaWNvbi12b2x1bWUtZG93biB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM4NHB4IC0yNHB4Owp9CgouaWNvbi12b2x1bWUtdXAgewogIGJhY2tncm91bmQtcG9zaXRpb246IC00MDhweCAtMjRweDsKfQoKLmljb24tcXJjb2RlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDMycHggLTI0cHg7Cn0KCi5pY29uLWJhcmNvZGUgewogIGJhY2tncm91bmQtcG9zaXRpb246IC00NTZweCAtMjRweDsKfQoKLmljb24tdGFnIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4Owp9CgouaWNvbi10YWdzIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjVweCAtNDhweDsKfQoKLmljb24tYm9vayB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTQ4cHg7Cn0KCi5pY29uLWJvb2ttYXJrIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNzJweCAtNDhweDsKfQoKLmljb24tcHJpbnQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4Owp9CgouaWNvbi1jYW1lcmEgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjBweCAtNDhweDsKfQoKLmljb24tZm9udCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4Owp9CgouaWNvbi1ib2xkIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTY3cHggLTQ4cHg7Cn0KCi5pY29uLWl0YWxpYyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC00OHB4Owp9CgouaWNvbi10ZXh0LWhlaWdodCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIxNnB4IC00OHB4Owp9CgouaWNvbi10ZXh0LXdpZHRoIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTQ4cHg7Cn0KCi5pY29uLWFsaWduLWxlZnQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjRweCAtNDhweDsKfQoKLmljb24tYWxpZ24tY2VudGVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg4cHggLTQ4cHg7Cn0KCi5pY29uLWFsaWduLXJpZ2h0IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzEycHggLTQ4cHg7Cn0KCi5pY29uLWFsaWduLWp1c3RpZnkgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0zMzZweCAtNDhweDsKfQoKLmljb24tbGlzdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2MHB4IC00OHB4Owp9CgouaWNvbi1pbmRlbnQtbGVmdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM4NHB4IC00OHB4Owp9CgouaWNvbi1pbmRlbnQtcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC00MDhweCAtNDhweDsKfQoKLmljb24tZmFjZXRpbWUtdmlkZW8gewogIGJhY2tncm91bmQtcG9zaXRpb246IC00MzJweCAtNDhweDsKfQoKLmljb24tcGljdHVyZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ1NnB4IC00OHB4Owp9CgouaWNvbi1wZW5jaWwgewogIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTcycHg7Cn0KCi5pY29uLW1hcC1tYXJrZXIgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNHB4IC03MnB4Owp9CgouaWNvbi1hZGp1c3QgewogIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC03MnB4Owp9CgouaWNvbi10aW50IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNzJweCAtNzJweDsKfQoKLmljb24tZWRpdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTcycHg7Cn0KCi5pY29uLXNoYXJlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIwcHggLTcycHg7Cn0KCi5pY29uLWNoZWNrIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTcycHg7Cn0KCi5pY29uLW1vdmUgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjhweCAtNzJweDsKfQoKLmljb24tc3RlcC1iYWNrd2FyZCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC03MnB4Owp9CgouaWNvbi1mYXN0LWJhY2t3YXJkIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjE2cHggLTcycHg7Cn0KCi5pY29uLWJhY2t3YXJkIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTcycHg7Cn0KCi5pY29uLXBsYXkgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjRweCAtNzJweDsKfQoKLmljb24tcGF1c2UgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yODhweCAtNzJweDsKfQoKLmljb24tc3RvcCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMxMnB4IC03MnB4Owp9CgouaWNvbi1mb3J3YXJkIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzM2cHggLTcycHg7Cn0KCi5pY29uLWZhc3QtZm9yd2FyZCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2MHB4IC03MnB4Owp9CgouaWNvbi1zdGVwLWZvcndhcmQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0zODRweCAtNzJweDsKfQoKLmljb24tZWplY3QgewogIGJhY2tncm91bmQtcG9zaXRpb246IC00MDhweCAtNzJweDsKfQoKLmljb24tY2hldnJvbi1sZWZ0IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDMycHggLTcycHg7Cn0KCi5pY29uLWNoZXZyb24tcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC00NTZweCAtNzJweDsKfQoKLmljb24tcGx1cy1zaWduIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4Owp9CgouaWNvbi1taW51cy1zaWduIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjRweCAtOTZweDsKfQoKLmljb24tcmVtb3ZlLXNpZ24gewogIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC05NnB4Owp9CgouaWNvbi1vay1zaWduIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNzJweCAtOTZweDsKfQoKLmljb24tcXVlc3Rpb24tc2lnbiB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk2cHg7Cn0KCi5pY29uLWluZm8tc2lnbiB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMHB4IC05NnB4Owp9CgouaWNvbi1zY3JlZW5zaG90IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk2cHg7Cn0KCi5pY29uLXJlbW92ZS1jaXJjbGUgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjhweCAtOTZweDsKfQoKLmljb24tb2stY2lyY2xlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk2cHg7Cn0KCi5pY29uLWJhbi1jaXJjbGUgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yMTZweCAtOTZweDsKfQoKLmljb24tYXJyb3ctbGVmdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC05NnB4Owp9CgouaWNvbi1hcnJvdy1yaWdodCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI2NHB4IC05NnB4Owp9CgouaWNvbi1hcnJvdy11cCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4OXB4IC05NnB4Owp9CgouaWNvbi1hcnJvdy1kb3duIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzEycHggLTk2cHg7Cn0KCi5pY29uLXNoYXJlLWFsdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC05NnB4Owp9CgouaWNvbi1yZXNpemUtZnVsbCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2MHB4IC05NnB4Owp9CgouaWNvbi1yZXNpemUtc21hbGwgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0zODRweCAtOTZweDsKfQoKLmljb24tcGx1cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQwOHB4IC05NnB4Owp9CgouaWNvbi1taW51cyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQzM3B4IC05NnB4Owp9CgouaWNvbi1hc3RlcmlzayB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ1NnB4IC05NnB4Owp9CgouaWNvbi1leGNsYW1hdGlvbi1zaWduIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjBweDsKfQoKLmljb24tZ2lmdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0cHggLTEyMHB4Owp9CgouaWNvbi1sZWFmIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTIwcHg7Cn0KCi5pY29uLWZpcmUgewogIGJhY2tncm91bmQtcG9zaXRpb246IC03MnB4IC0xMjBweDsKfQoKLmljb24tZXllLW9wZW4gewogIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjBweDsKfQoKLmljb24tZXllLWNsb3NlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIwcHggLTEyMHB4Owp9CgouaWNvbi13YXJuaW5nLXNpZ24gewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTIwcHg7Cn0KCi5pY29uLXBsYW5lIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTY4cHggLTEyMHB4Owp9CgouaWNvbi1jYWxlbmRhciB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjBweDsKfQoKLmljb24tcmFuZG9tIHsKICB3aWR0aDogMTZweDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjE2cHggLTEyMHB4Owp9CgouaWNvbi1jb21tZW50IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTEyMHB4Owp9CgouaWNvbi1tYWduZXQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjRweCAtMTIwcHg7Cn0KCi5pY29uLWNoZXZyb24tdXAgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yODhweCAtMTIwcHg7Cn0KCi5pY29uLWNoZXZyb24tZG93biB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMxM3B4IC0xMTlweDsKfQoKLmljb24tcmV0d2VldCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC0xMjBweDsKfQoKLmljb24tc2hvcHBpbmctY2FydCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2MHB4IC0xMjBweDsKfQoKLmljb24tZm9sZGVyLWNsb3NlIHsKICB3aWR0aDogMTZweDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzg0cHggLTEyMHB4Owp9CgouaWNvbi1mb2xkZXItb3BlbiB7CiAgd2lkdGg6IDE2cHg7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQwOHB4IC0xMjBweDsKfQoKLmljb24tcmVzaXplLXZlcnRpY2FsIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDMycHggLTExOXB4Owp9CgouaWNvbi1yZXNpemUtaG9yaXpvbnRhbCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ1NnB4IC0xMThweDsKfQoKLmljb24taGRkIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsKfQoKLmljb24tYnVsbGhvcm4gewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNHB4IC0xNDRweDsKfQoKLmljb24tYmVsbCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE0NHB4Owp9CgouaWNvbi1jZXJ0aWZpY2F0ZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTcycHggLTE0NHB4Owp9CgouaWNvbi10aHVtYnMtdXAgewogIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNDRweDsKfQoKLmljb24tdGh1bWJzLWRvd24gewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjBweCAtMTQ0cHg7Cn0KCi5pY29uLWhhbmQtcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHg7Cn0KCi5pY29uLWhhbmQtbGVmdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2OHB4IC0xNDRweDsKfQoKLmljb24taGFuZC11cCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xNDRweDsKfQoKLmljb24taGFuZC1kb3duIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjE2cHggLTE0NHB4Owp9CgouaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTQ0cHg7Cn0KCi5pY29uLWNpcmNsZS1hcnJvdy1sZWZ0IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjY0cHggLTE0NHB4Owp9CgouaWNvbi1jaXJjbGUtYXJyb3ctdXAgewogIGJhY2tncm91bmQtcG9zaXRpb246IC0yODhweCAtMTQ0cHg7Cn0KCi5pY29uLWNpcmNsZS1hcnJvdy1kb3duIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzEycHggLTE0NHB4Owp9CgouaWNvbi1nbG9iZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC0xNDRweDsKfQoKLmljb24td3JlbmNoIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzYwcHggLTE0NHB4Owp9CgouaWNvbi10YXNrcyB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM4NHB4IC0xNDRweDsKfQoKLmljb24tZmlsdGVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDA4cHggLTE0NHB4Owp9CgouaWNvbi1icmllZmNhc2UgewogIGJhY2tncm91bmQtcG9zaXRpb246IC00MzJweCAtMTQ0cHg7Cn0KCi5pY29uLWZ1bGxzY3JlZW4gewogIGJhY2tncm91bmQtcG9zaXRpb246IC00NTZweCAtMTQ0cHg7Cn0KCi5kcm9wdXAsCi5kcm9wZG93biB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouZHJvcGRvd24tdG9nZ2xlIHsKICAqbWFyZ2luLWJvdHRvbTogLTNweDsKfQoKLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsCi5vcGVuIC5kcm9wZG93bi10b2dnbGUgewogIG91dGxpbmU6IDA7Cn0KCi5jYXJldCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAwOwogIGhlaWdodDogMDsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogIGJvcmRlci10b3A6IDRweCBzb2xpZCAjMDAwMDAwOwogIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgY29udGVudDogIiI7Cn0KCi5kcm9wZG93biAuY2FyZXQgewogIG1hcmdpbi10b3A6IDhweDsKICBtYXJnaW4tbGVmdDogMnB4Owp9CgouZHJvcGRvd24tbWVudSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTAwJTsKICBsZWZ0OiAwOwogIHotaW5kZXg6IDEwMDA7CiAgZGlzcGxheTogbm9uZTsKICBmbG9hdDogbGVmdDsKICBtaW4td2lkdGg6IDE2MHB4OwogIHBhZGRpbmc6IDVweCAwOwogIG1hcmdpbjogMnB4IDAgMDsKICBsaXN0LXN0eWxlOiBub25lOwogIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgKmJvcmRlci1yaWdodC13aWR0aDogMnB4OwogICpib3JkZXItYm90dG9tLXdpZHRoOiAycHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAtbW96LWJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogICAgIC1tb3otYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOwogICAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKfQoKLmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodCB7CiAgcmlnaHQ6IDA7CiAgbGVmdDogYXV0bzsKfQoKLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgewogICp3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDFweDsKICBtYXJnaW46IDlweCAxcHg7CiAgKm1hcmdpbjogLTVweCAwIDVweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmY7Cn0KCi5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAzcHggMjBweDsKICBjbGVhcjogYm90aDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAyMHB4OwogIGNvbG9yOiAjOTk5OTk5OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLAouZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cywKLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiBhLAouZHJvcGRvd24tc3VibWVudTpmb2N1cyA+IGEgewogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YWY1OwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzAwN2ZmZiwgIzAwNzJlNik7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCMwMDdmZmYpLCB0bygjMDA3MmU2KSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA3ZmZmLCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA3ZmZmLCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMDA3ZmZmLCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA3ZmZmJywgZW5kQ29sb3JzdHI9JyNmZjAwNzJlNicsIEdyYWRpZW50VHlwZT0wKTsKfQoKLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwKLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwKLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDdhZjU7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA3ZmZmLCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oIzAwN2ZmZiksIHRvKCMwMDcyZTYpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDdmZmYsICMwMDcyZTYpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDdmZmYsICMwMDcyZTYpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDdmZmYsICMwMDcyZTYpOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBvdXRsaW5lOiAwOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwN2ZmZicsIGVuZENvbG9yc3RyPScjZmYwMDcyZTYnLCBHcmFkaWVudFR5cGU9MCk7Cn0KCi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSwKLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLAouZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMgewogIGNvbG9yOiAjZGZkZmRmOwp9CgouZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsCi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGN1cnNvcjogZGVmYXVsdDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOwp9Cgoub3BlbiB7CiAgKnotaW5kZXg6IDEwMDA7Cn0KCi5vcGVuID4gLmRyb3Bkb3duLW1lbnUgewogIGRpc3BsYXk6IGJsb2NrOwp9CgoucHVsbC1yaWdodCA+IC5kcm9wZG93bi1tZW51IHsKICByaWdodDogMDsKICBsZWZ0OiBhdXRvOwp9CgouZHJvcHVwIC5jYXJldCwKLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldCB7CiAgYm9yZGVyLXRvcDogMDsKICBib3JkZXItYm90dG9tOiA0cHggc29saWQgIzAwMDAwMDsKICBjb250ZW50OiAiIjsKfQoKLmRyb3B1cCAuZHJvcGRvd24tbWVudSwKLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHsKICB0b3A6IGF1dG87CiAgYm90dG9tOiAxMDAlOwogIG1hcmdpbi1ib3R0b206IDFweDsKfQoKLmRyb3Bkb3duLXN1Ym1lbnUgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmRyb3Bkb3duLXN1Ym1lbnUgPiAuZHJvcGRvd24tbWVudSB7CiAgdG9wOiAwOwogIGxlZnQ6IDEwMCU7CiAgbWFyZ2luLXRvcDogLTZweDsKICBtYXJnaW4tbGVmdDogLTFweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgNnB4IDZweCA2cHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDZweCA2cHggNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDZweDsKfQoKLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiAuZHJvcGRvd24tbWVudSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi5kcm9wdXAgLmRyb3Bkb3duLXN1Ym1lbnUgPiAuZHJvcGRvd24tbWVudSB7CiAgdG9wOiBhdXRvOwogIGJvdHRvbTogMDsKICBtYXJnaW4tdG9wOiAwOwogIG1hcmdpbi1ib3R0b206IC0ycHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHggNXB4IDVweCAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4IDVweCA1cHggMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1cHggNXB4IDA7Cn0KCi5kcm9wZG93bi1zdWJtZW51ID4gYTphZnRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IHJpZ2h0OwogIHdpZHRoOiAwOwogIGhlaWdodDogMDsKICBtYXJnaW4tdG9wOiA1cHg7CiAgbWFyZ2luLXJpZ2h0OiAtMTBweDsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1sZWZ0LWNvbG9yOiAjY2NjY2NjOwogIGJvcmRlci1zdHlsZTogc29saWQ7CiAgYm9yZGVyLXdpZHRoOiA1cHggMCA1cHggNXB4OwogIGNvbnRlbnQ6ICIgIjsKfQoKLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiBhOmFmdGVyIHsKICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZmZmZjsKfQoKLmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0IHsKICBmbG9hdDogbm9uZTsKfQoKLmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0ID4gLmRyb3Bkb3duLW1lbnUgewogIGxlZnQ6IC0xMDAlOwogIG1hcmdpbi1sZWZ0OiAxMHB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4IDAgNnB4IDZweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDZweCAwIDZweCA2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHggMCA2cHggNnB4Owp9CgouZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLm5hdi1oZWFkZXIgewogIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9CgoudHlwZWFoZWFkIHsKICB6LWluZGV4OiAxMDUxOwogIG1hcmdpbi10b3A6IDJweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLndlbGwgewogIG1pbi1oZWlnaHQ6IDIwcHg7CiAgcGFkZGluZzogMTlweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7CiAgYm9yZGVyOiAxcHggc29saWQgI2RjZGNkYzsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQoKLndlbGwgYmxvY2txdW90ZSB7CiAgYm9yZGVyLWNvbG9yOiAjZGRkOwogIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTsKfQoKLndlbGwtbGFyZ2UgewogIHBhZGRpbmc6IDI0cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi53ZWxsLXNtYWxsIHsKICBwYWRkaW5nOiA5cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5mYWRlIHsKICBvcGFjaXR5OiAwOwogIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7CiAgICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjsKICAgICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOwogICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7Cn0KCi5mYWRlLmluIHsKICBvcGFjaXR5OiAxOwp9CgouY29sbGFwc2UgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBoZWlnaHQ6IDA7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICAtd2Via2l0LXRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlOwogICAgIC1tb3otdHJhbnNpdGlvbjogaGVpZ2h0IDAuMzVzIGVhc2U7CiAgICAgICAtby10cmFuc2l0aW9uOiBoZWlnaHQgMC4zNXMgZWFzZTsKICAgICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlOwp9CgouY29sbGFwc2UuaW4gewogIGhlaWdodDogYXV0bzsKfQoKLmNsb3NlIHsKICBmbG9hdDogcmlnaHQ7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiAyMHB4OwogIGNvbG9yOiAjMDAwMDAwOwogIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7CiAgb3BhY2l0eTogMC4yOwogIGZpbHRlcjogYWxwaGEob3BhY2l0eT0yMCk7Cn0KCi5jbG9zZTpob3ZlciwKLmNsb3NlOmZvY3VzIHsKICBjb2xvcjogIzAwMDAwMDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY3Vyc29yOiBwb2ludGVyOwogIG9wYWNpdHk6IDAuNDsKICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NDApOwp9CgpidXR0b24uY2xvc2UgewogIHBhZGRpbmc6IDA7CiAgY3Vyc29yOiBwb2ludGVyOwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlcjogMDsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Cn0KCi5idG4gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAqZGlzcGxheTogaW5saW5lOwogIHBhZGRpbmc6IDRweCAxMnB4OwogIG1hcmdpbi1ib3R0b206IDA7CiAgKm1hcmdpbi1sZWZ0OiAuM2VtOwogIGZvbnQtc2l6ZTogMTRweDsKICBsaW5lLWhlaWdodDogMjBweDsKICBjb2xvcjogIzk5OTk5OTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgY3Vyc29yOiBwb2ludGVyOwogIGJhY2tncm91bmQtY29sb3I6ICNkZmRmZGY7CiAgKmJhY2tncm91bmQtY29sb3I6ICNjOGM4Yzg7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlZWVlLCAjYzhjOGM4KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2VlZWVlZSksIHRvKCNjOGM4YzgpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUsICNjOGM4YzgpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUsICNjOGM4YzgpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNlZWVlZWUsICNjOGM4YzgpOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBib3JkZXI6IDFweCBzb2xpZCAjYmJiYmJiOwogICpib3JkZXI6IDA7CiAgYm9yZGVyLWNvbG9yOiAjYzhjOGM4ICNjOGM4YzggI2EyYTJhMjsKICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjYTJhMmEyOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlZWVlZScsIGVuZENvbG9yc3RyPScjZmZjOGM4YzgnLCBHcmFkaWVudFR5cGU9MCk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7CiAgKnpvb206IDE7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KCi5idG46aG92ZXIsCi5idG46Zm9jdXMsCi5idG46YWN0aXZlLAouYnRuLmFjdGl2ZSwKLmJ0bi5kaXNhYmxlZCwKLmJ0bltkaXNhYmxlZF0gewogIGNvbG9yOiAjOTk5OTk5OwogIGJhY2tncm91bmQtY29sb3I6ICNjOGM4Yzg7CiAgKmJhY2tncm91bmQtY29sb3I6ICNiYmJiYmI7Cn0KCi5idG46YWN0aXZlLAouYnRuLmFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2FlYWVhZSBcOTsKfQoKLmJ0bjpmaXJzdC1jaGlsZCB7CiAgKm1hcmdpbi1sZWZ0OiAwOwp9CgouYnRuOmhvdmVyLAouYnRuOmZvY3VzIHsKICBjb2xvcjogIzk5OTk5OTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTVweDsKICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gMC4xcyBsaW5lYXI7CiAgICAgLW1vei10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIDAuMXMgbGluZWFyOwogICAgICAgLW8tdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAwLjFzIGxpbmVhcjsKICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gMC4xcyBsaW5lYXI7Cn0KCi5idG46Zm9jdXMgewogIG91dGxpbmU6IHRoaW4gZG90dGVkICMzMzM7CiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOwogIG91dGxpbmUtb2Zmc2V0OiAtMnB4Owp9CgouYnRuLmFjdGl2ZSwKLmJ0bjphY3RpdmUgewogIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgb3V0bGluZTogMDsKICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQoKLmJ0bi5kaXNhYmxlZCwKLmJ0bltkaXNhYmxlZF0gewogIGN1cnNvcjogZGVmYXVsdDsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogIG9wYWNpdHk6IDAuNjU7CiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTY1KTsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLmJ0bi1sYXJnZSB7CiAgcGFkZGluZzogMjJweCAzMHB4OwogIGZvbnQtc2l6ZTogMTcuNXB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgouYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0sCi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0gewogIG1hcmdpbi10b3A6IDRweDsKfQoKLmJ0bi1zbWFsbCB7CiAgcGFkZGluZzogMnB4IDEwcHg7CiAgZm9udC1zaXplOiAxMS45cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXSwKLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXSB7CiAgbWFyZ2luLXRvcDogMDsKfQoKLmJ0bi1taW5pIFtjbGFzc149Imljb24tIl0sCi5idG4tbWluaSBbY2xhc3MqPSIgaWNvbi0iXSB7CiAgbWFyZ2luLXRvcDogLTFweDsKfQoKLmJ0bi1taW5pIHsKICBwYWRkaW5nOiAycHggNnB4OwogIGZvbnQtc2l6ZTogMTAuNXB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgouYnRuLWJsb2NrIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKICBwYWRkaW5nLXJpZ2h0OiAwOwogIHBhZGRpbmctbGVmdDogMDsKICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLmJ0bi1ibG9jayArIC5idG4tYmxvY2sgewogIG1hcmdpbi10b3A6IDVweDsKfQoKaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLWJsb2NrLAppbnB1dFt0eXBlPSJyZXNldCJdLmJ0bi1ibG9jaywKaW5wdXRbdHlwZT0iYnV0dG9uIl0uYnRuLWJsb2NrIHsKICB3aWR0aDogMTAwJTsKfQoKLmJ0bi1wcmltYXJ5LmFjdGl2ZSwKLmJ0bi13YXJuaW5nLmFjdGl2ZSwKLmJ0bi1kYW5nZXIuYWN0aXZlLAouYnRuLXN1Y2Nlc3MuYWN0aXZlLAouYnRuLWluZm8uYWN0aXZlLAouYnRuLWludmVyc2UuYWN0aXZlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKfQoKLmJ0bi1wcmltYXJ5IHsKICBjb2xvcjogI2ZmZmZmZjsKICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGY4MmY1OwogICpiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3MmU2OwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzFhOGNmZiwgIzAwNzJlNik7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCMxYThjZmYpLCB0bygjMDA3MmU2KSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMWE4Y2ZmLCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMWE4Y2ZmLCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMWE4Y2ZmLCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgYm9yZGVyLWNvbG9yOiAjMDA3MmU2ICMwMDcyZTYgIzAwNGM5OTsKICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYxYThjZmYnLCBlbmRDb2xvcnN0cj0nI2ZmMDA3MmU2JywgR3JhZGllbnRUeXBlPTApOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOwp9CgouYnRuLXByaW1hcnk6aG92ZXIsCi5idG4tcHJpbWFyeTpmb2N1cywKLmJ0bi1wcmltYXJ5OmFjdGl2ZSwKLmJ0bi1wcmltYXJ5LmFjdGl2ZSwKLmJ0bi1wcmltYXJ5LmRpc2FibGVkLAouYnRuLXByaW1hcnlbZGlzYWJsZWRdIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3MmU2OwogICpiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2NmNjOwp9CgouYnRuLXByaW1hcnk6YWN0aXZlLAouYnRuLXByaW1hcnkuYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA1OWIzIFw5Owp9CgouYnRuLXdhcm5pbmcgewogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGJhY2tncm91bmQtY29sb3I6ICNmZTc4MWU7CiAgKmJhY2tncm91bmQtY29sb3I6ICNmZTY2MDA7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZmY4NDMyLCAjZmU2NjAwKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2ZmODQzMiksIHRvKCNmZTY2MDApKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmZjg0MzIsICNmZTY2MDApOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZjg0MzIsICNmZTY2MDApOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZjg0MzIsICNmZTY2MDApOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBib3JkZXItY29sb3I6ICNmZTY2MDAgI2ZlNjYwMCAjYjE0NzAwOwogIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmODQzMicsIGVuZENvbG9yc3RyPScjZmZmZTY2MDAnLCBHcmFkaWVudFR5cGU9MCk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7Cn0KCi5idG4td2FybmluZzpob3ZlciwKLmJ0bi13YXJuaW5nOmZvY3VzLAouYnRuLXdhcm5pbmc6YWN0aXZlLAouYnRuLXdhcm5pbmcuYWN0aXZlLAouYnRuLXdhcm5pbmcuZGlzYWJsZWQsCi5idG4td2FybmluZ1tkaXNhYmxlZF0gewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNmZTY2MDA7CiAgKmJhY2tncm91bmQtY29sb3I6ICNlNDVjMDA7Cn0KCi5idG4td2FybmluZzphY3RpdmUsCi5idG4td2FybmluZy5hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICNjYjUyMDAgXDk7Cn0KCi5idG4tZGFuZ2VyIHsKICBjb2xvcjogI2ZmZmZmZjsKICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjUwZjQzOwogICpiYWNrZ3JvdW5kLWNvbG9yOiAjZTYwMDMzOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmMWE0ZCwgI2U2MDAzMyk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCNmZjFhNGQpLCB0bygjZTYwMDMzKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmYxYTRkLCAjZTYwMDMzKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjZmYxYTRkLCAjZTYwMDMzKTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZmYxYTRkLCAjZTYwMDMzKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgYm9yZGVyLWNvbG9yOiAjZTYwMDMzICNlNjAwMzMgIzk5MDAyMjsKICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZjFhNGQnLCBlbmRDb2xvcnN0cj0nI2ZmZTYwMDMzJywgR3JhZGllbnRUeXBlPTApOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOwp9CgouYnRuLWRhbmdlcjpob3ZlciwKLmJ0bi1kYW5nZXI6Zm9jdXMsCi5idG4tZGFuZ2VyOmFjdGl2ZSwKLmJ0bi1kYW5nZXIuYWN0aXZlLAouYnRuLWRhbmdlci5kaXNhYmxlZCwKLmJ0bi1kYW5nZXJbZGlzYWJsZWRdIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTYwMDMzOwogICpiYWNrZ3JvdW5kLWNvbG9yOiAjY2MwMDJlOwp9CgouYnRuLWRhbmdlcjphY3RpdmUsCi5idG4tZGFuZ2VyLmFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2IzMDAyOCBcOTsKfQoKLmJ0bi1zdWNjZXNzIHsKICBjb2xvcjogI2ZmZmZmZjsKICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDFiYjE5OwogICpiYWNrZ3JvdW5kLWNvbG9yOiAjMzc5ZjE1OwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzQ3Y2QxYiwgIzM3OWYxNSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCM0N2NkMWIpLCB0bygjMzc5ZjE1KSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjNDdjZDFiLCAjMzc5ZjE1KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjNDdjZDFiLCAjMzc5ZjE1KTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNDdjZDFiLCAjMzc5ZjE1KTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgYm9yZGVyLWNvbG9yOiAjMzc5ZjE1ICMzNzlmMTUgIzIwNWMwYzsKICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY0N2NkMWInLCBlbmRDb2xvcnN0cj0nI2ZmMzc5ZjE1JywgR3JhZGllbnRUeXBlPTApOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOwp9CgouYnRuLXN1Y2Nlc3M6aG92ZXIsCi5idG4tc3VjY2Vzczpmb2N1cywKLmJ0bi1zdWNjZXNzOmFjdGl2ZSwKLmJ0bi1zdWNjZXNzLmFjdGl2ZSwKLmJ0bi1zdWNjZXNzLmRpc2FibGVkLAouYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzc5ZjE1OwogICpiYWNrZ3JvdW5kLWNvbG9yOiAjMmY4OTEyOwp9CgouYnRuLXN1Y2Nlc3M6YWN0aXZlLAouYnRuLXN1Y2Nlc3MuYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg3MjBmIFw5Owp9CgouYnRuLWluZm8gewogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGJhY2tncm91bmQtY29sb3I6ICM5YjU5YmI7CiAgKmJhY2tncm91bmQtY29sb3I6ICM4ZDQ2YjA7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjYTQ2NmMyLCAjOGQ0NmIwKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2E0NjZjMiksIHRvKCM4ZDQ2YjApKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNhNDY2YzIsICM4ZDQ2YjApOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNhNDY2YzIsICM4ZDQ2YjApOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNhNDY2YzIsICM4ZDQ2YjApOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBib3JkZXItY29sb3I6ICM4ZDQ2YjAgIzhkNDZiMCAjNjEzMDc5OwogIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmE0NjZjMicsIGVuZENvbG9yc3RyPScjZmY4ZDQ2YjAnLCBHcmFkaWVudFR5cGU9MCk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7Cn0KCi5idG4taW5mbzpob3ZlciwKLmJ0bi1pbmZvOmZvY3VzLAouYnRuLWluZm86YWN0aXZlLAouYnRuLWluZm8uYWN0aXZlLAouYnRuLWluZm8uZGlzYWJsZWQsCi5idG4taW5mb1tkaXNhYmxlZF0gewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICM4ZDQ2YjA7CiAgKmJhY2tncm91bmQtY29sb3I6ICM3ZTNmOWQ7Cn0KCi5idG4taW5mbzphY3RpdmUsCi5idG4taW5mby5hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICM2ZjM3OGIgXDk7Cn0KCi5idG4taW52ZXJzZSB7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwODsKICAqYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICMwZDBkMGQsICMwMDAwMDApOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjMGQwZDBkKSwgdG8oIzAwMDAwMCkpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzBkMGQwZCwgIzAwMDAwMCk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzBkMGQwZCwgIzAwMDAwMCk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzBkMGQwZCwgIzAwMDAwMCk7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwogIGJvcmRlci1jb2xvcjogIzAwMDAwMCAjMDAwMDAwICMwMDAwMDA7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4yNSk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMGQwZDBkJywgZW5kQ29sb3JzdHI9JyNmZjAwMDAwMCcsIEdyYWRpZW50VHlwZT0wKTsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTsKfQoKLmJ0bi1pbnZlcnNlOmhvdmVyLAouYnRuLWludmVyc2U6Zm9jdXMsCi5idG4taW52ZXJzZTphY3RpdmUsCi5idG4taW52ZXJzZS5hY3RpdmUsCi5idG4taW52ZXJzZS5kaXNhYmxlZCwKLmJ0bi1pbnZlcnNlW2Rpc2FibGVkXSB7CiAgY29sb3I6ICNmZmZmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKICAqYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKfQoKLmJ0bi1pbnZlcnNlOmFjdGl2ZSwKLmJ0bi1pbnZlcnNlLmFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCBcOTsKfQoKYnV0dG9uLmJ0biwKaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuIHsKICAqcGFkZGluZy10b3A6IDNweDsKICAqcGFkZGluZy1ib3R0b206IDNweDsKfQoKYnV0dG9uLmJ0bjo6LW1vei1mb2N1cy1pbm5lciwKaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuOjotbW96LWZvY3VzLWlubmVyIHsKICBwYWRkaW5nOiAwOwogIGJvcmRlcjogMDsKfQoKYnV0dG9uLmJ0bi5idG4tbGFyZ2UsCmlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbGFyZ2UgewogICpwYWRkaW5nLXRvcDogN3B4OwogICpwYWRkaW5nLWJvdHRvbTogN3B4Owp9CgpidXR0b24uYnRuLmJ0bi1zbWFsbCwKaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLmJ0bi1zbWFsbCB7CiAgKnBhZGRpbmctdG9wOiAzcHg7CiAgKnBhZGRpbmctYm90dG9tOiAzcHg7Cn0KCmJ1dHRvbi5idG4uYnRuLW1pbmksCmlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbWluaSB7CiAgKnBhZGRpbmctdG9wOiAxcHg7CiAgKnBhZGRpbmctYm90dG9tOiAxcHg7Cn0KCi5idG4tbGluaywKLmJ0bi1saW5rOmFjdGl2ZSwKLmJ0bi1saW5rW2Rpc2FibGVkXSB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLmJ0bi1saW5rIHsKICBjb2xvcjogIzAwN2ZmZjsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLmJ0bi1saW5rOmhvdmVyLAouYnRuLWxpbms6Zm9jdXMgewogIGNvbG9yOiAjMDA2NmNjOwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9CgouYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLAouYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzIHsKICBjb2xvcjogIzk5OTk5OTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5idG4tZ3JvdXAgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgKmRpc3BsYXk6IGlubGluZTsKICAqbWFyZ2luLWxlZnQ6IC4zZW07CiAgZm9udC1zaXplOiAwOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAqem9vbTogMTsKfQoKLmJ0bi1ncm91cDpmaXJzdC1jaGlsZCB7CiAgKm1hcmdpbi1sZWZ0OiAwOwp9CgouYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7CiAgbWFyZ2luLWxlZnQ6IDVweDsKfQoKLmJ0bi10b29sYmFyIHsKICBtYXJnaW4tdG9wOiAxMHB4OwogIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgZm9udC1zaXplOiAwOwp9CgouYnRuLXRvb2xiYXIgPiAuYnRuICsgLmJ0biwKLmJ0bi10b29sYmFyID4gLmJ0bi1ncm91cCArIC5idG4sCi5idG4tdG9vbGJhciA+IC5idG4gKyAuYnRuLWdyb3VwIHsKICBtYXJnaW4tbGVmdDogNXB4Owp9CgouYnRuLWdyb3VwID4gLmJ0biB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgouYnRuLWdyb3VwID4gLmJ0biArIC5idG4gewogIG1hcmdpbi1sZWZ0OiAtMXB4Owp9CgouYnRuLWdyb3VwID4gLmJ0biwKLmJ0bi1ncm91cCA+IC5kcm9wZG93bi1tZW51LAouYnRuLWdyb3VwID4gLnBvcG92ZXIgewogIGZvbnQtc2l6ZTogMTRweDsKfQoKLmJ0bi1ncm91cCA+IC5idG4tbWluaSB7CiAgZm9udC1zaXplOiAxMC41cHg7Cn0KCi5idG4tZ3JvdXAgPiAuYnRuLXNtYWxsIHsKICBmb250LXNpemU6IDExLjlweDsKfQoKLmJ0bi1ncm91cCA+IC5idG4tbGFyZ2UgewogIGZvbnQtc2l6ZTogMTcuNXB4Owp9CgouYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAwOwp9CgouYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkLAouYnRuLWdyb3VwID4gLmRyb3Bkb3duLXRvZ2dsZSB7CiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiAwOwp9CgouYnRuLWdyb3VwID4gLmJ0bi5sYXJnZTpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAwOwp9CgouYnRuLWdyb3VwID4gLmJ0bi5sYXJnZTpsYXN0LWNoaWxkLAouYnRuLWdyb3VwID4gLmxhcmdlLmRyb3Bkb3duLXRvZ2dsZSB7CiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiAwOwp9CgouYnRuLWdyb3VwID4gLmJ0bjpob3ZlciwKLmJ0bi1ncm91cCA+IC5idG46Zm9jdXMsCi5idG4tZ3JvdXAgPiAuYnRuOmFjdGl2ZSwKLmJ0bi1ncm91cCA+IC5idG4uYWN0aXZlIHsKICB6LWluZGV4OiAyOwp9CgouYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLAouYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7CiAgb3V0bGluZTogMDsKfQoKLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHsKICAqcGFkZGluZy10b3A6IDVweDsKICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgKnBhZGRpbmctYm90dG9tOiA1cHg7CiAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMjUpLCBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMjUpLCBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMjUpLCBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KCi5idG4tZ3JvdXAgPiAuYnRuLW1pbmkgKyAuZHJvcGRvd24tdG9nZ2xlIHsKICAqcGFkZGluZy10b3A6IDJweDsKICBwYWRkaW5nLXJpZ2h0OiA1cHg7CiAgKnBhZGRpbmctYm90dG9tOiAycHg7CiAgcGFkZGluZy1sZWZ0OiA1cHg7Cn0KCi5idG4tZ3JvdXAgPiAuYnRuLXNtYWxsICsgLmRyb3Bkb3duLXRvZ2dsZSB7CiAgKnBhZGRpbmctdG9wOiA1cHg7CiAgKnBhZGRpbmctYm90dG9tOiA0cHg7Cn0KCi5idG4tZ3JvdXAgPiAuYnRuLWxhcmdlICsgLmRyb3Bkb3duLXRvZ2dsZSB7CiAgKnBhZGRpbmctdG9wOiA3cHg7CiAgcGFkZGluZy1yaWdodDogMTJweDsKICAqcGFkZGluZy1ib3R0b206IDdweDsKICBwYWRkaW5nLWxlZnQ6IDEycHg7Cn0KCi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwp9CgouYnRuLWdyb3VwLm9wZW4gLmJ0bi5kcm9wZG93bi10b2dnbGUgewogIGJhY2tncm91bmQtY29sb3I6ICNjOGM4Yzg7Cn0KCi5idG4tZ3JvdXAub3BlbiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3MmU2Owp9CgouYnRuLWdyb3VwLm9wZW4gLmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlNjYwMDsKfQoKLmJ0bi1ncm91cC5vcGVuIC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2U2MDAzMzsKfQoKLmJ0bi1ncm91cC5vcGVuIC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGUgewogIGJhY2tncm91bmQtY29sb3I6ICMzNzlmMTU7Cn0KCi5idG4tZ3JvdXAub3BlbiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGQ0NmIwOwp9CgouYnRuLWdyb3VwLm9wZW4gLmJ0bi1pbnZlcnNlLmRyb3Bkb3duLXRvZ2dsZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKfQoKLmJ0biAuY2FyZXQgewogIG1hcmdpbi10b3A6IDhweDsKICBtYXJnaW4tbGVmdDogMDsKfQoKLmJ0bi1sYXJnZSAuY2FyZXQgewogIG1hcmdpbi10b3A6IDZweDsKfQoKLmJ0bi1sYXJnZSAuY2FyZXQgewogIGJvcmRlci10b3Atd2lkdGg6IDVweDsKICBib3JkZXItcmlnaHQtd2lkdGg6IDVweDsKICBib3JkZXItbGVmdC13aWR0aDogNXB4Owp9CgouYnRuLW1pbmkgLmNhcmV0LAouYnRuLXNtYWxsIC5jYXJldCB7CiAgbWFyZ2luLXRvcDogOHB4Owp9CgouZHJvcHVwIC5idG4tbGFyZ2UgLmNhcmV0IHsKICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7Cn0KCi5idG4tcHJpbWFyeSAuY2FyZXQsCi5idG4td2FybmluZyAuY2FyZXQsCi5idG4tZGFuZ2VyIC5jYXJldCwKLmJ0bi1pbmZvIC5jYXJldCwKLmJ0bi1zdWNjZXNzIC5jYXJldCwKLmJ0bi1pbnZlcnNlIC5jYXJldCB7CiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZmZmZjsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmZmZmOwp9CgouYnRuLWdyb3VwLXZlcnRpY2FsIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgKmRpc3BsYXk6IGlubGluZTsKICAvKiBJRTcgaW5saW5lLWJsb2NrIGhhY2sgKi8KCiAgKnpvb206IDE7Cn0KCi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuIHsKICBkaXNwbGF5OiBibG9jazsKICBmbG9hdDogbm9uZTsKICBtYXgtd2lkdGg6IDEwMCU7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuICsgLmJ0biB7CiAgbWFyZ2luLXRvcDogLTFweDsKICBtYXJnaW4tbGVmdDogMDsKfQoKLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46Zmlyc3QtY2hpbGQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwcHggMCAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwcHggMCAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwcHggMCAwOwp9CgouYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpsYXN0LWNoaWxkIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAwIDBweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwIDBweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwIDBweDsKfQoKLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tbGFyZ2U6Zmlyc3QtY2hpbGQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwcHggMCAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwcHggMCAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwcHggMCAwOwp9CgouYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1sYXJnZTpsYXN0LWNoaWxkIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAwIDBweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAwIDBweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwIDBweDsKfQoKLmFsZXJ0IHsKICBwYWRkaW5nOiA4cHggMzVweCA4cHggMTRweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3NTE4OwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgouYWxlcnQsCi5hbGVydCBoNCB7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCi5hbGVydCBoNCB7CiAgbWFyZ2luOiAwOwp9CgouYWxlcnQgLmNsb3NlIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdG9wOiAtMnB4OwogIHJpZ2h0OiAtMjFweDsKICBsaW5lLWhlaWdodDogMjBweDsKfQoKLmFsZXJ0LXN1Y2Nlc3MgewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICMzZmI2MTg7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLmFsZXJ0LXN1Y2Nlc3MgaDQgewogIGNvbG9yOiAjZmZmZmZmOwp9CgouYWxlcnQtZGFuZ2VyLAouYWxlcnQtZXJyb3IgewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNmZjAwMzk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLmFsZXJ0LWRhbmdlciBoNCwKLmFsZXJ0LWVycm9yIGg0IHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLmFsZXJ0LWluZm8gewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICM5OTU0YmI7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLmFsZXJ0LWluZm8gaDQgewogIGNvbG9yOiAjZmZmZmZmOwp9CgouYWxlcnQtYmxvY2sgewogIHBhZGRpbmctdG9wOiAxNHB4OwogIHBhZGRpbmctYm90dG9tOiAxNHB4Owp9CgouYWxlcnQtYmxvY2sgPiBwLAouYWxlcnQtYmxvY2sgPiB1bCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLmFsZXJ0LWJsb2NrIHAgKyBwIHsKICBtYXJnaW4tdG9wOiA1cHg7Cn0KCi5uYXYgewogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm5hdiA+IGxpID4gYSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi5uYXYgPiBsaSA+IGE6aG92ZXIsCi5uYXYgPiBsaSA+IGE6Zm9jdXMgewogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwp9CgoubmF2ID4gbGkgPiBhID4gaW1nIHsKICBtYXgtd2lkdGg6IG5vbmU7Cn0KCi5uYXYgPiAucHVsbC1yaWdodCB7CiAgZmxvYXQ6IHJpZ2h0Owp9CgoubmF2LWhlYWRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogM3B4IDE1cHg7CiAgZm9udC1zaXplOiAxMXB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiAyMHB4OwogIGNvbG9yOiAjZGZkZmRmOwogIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubmF2IGxpICsgLm5hdi1oZWFkZXIgewogIG1hcmdpbi10b3A6IDlweDsKfQoKLm5hdi1saXN0IHsKICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwogIHBhZGRpbmctbGVmdDogMTVweDsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubmF2LWxpc3QgPiBsaSA+IGEsCi5uYXYtbGlzdCAubmF2LWhlYWRlciB7CiAgbWFyZ2luLXJpZ2h0OiAtMTVweDsKICBtYXJnaW4tbGVmdDogLTE1cHg7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9CgoubmF2LWxpc3QgPiBsaSA+IGEgewogIHBhZGRpbmc6IDNweCAxNXB4Owp9CgoubmF2LWxpc3QgPiAuYWN0aXZlID4gYSwKLm5hdi1saXN0ID4gLmFjdGl2ZSA+IGE6aG92ZXIsCi5uYXYtbGlzdCA+IC5hY3RpdmUgPiBhOmZvY3VzIHsKICBjb2xvcjogI2ZmZmZmZjsKICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDdmZmY7Cn0KCi5uYXYtbGlzdCBbY2xhc3NePSJpY29uLSJdLAoubmF2LWxpc3QgW2NsYXNzKj0iIGljb24tIl0gewogIG1hcmdpbi1yaWdodDogMnB4Owp9CgoubmF2LWxpc3QgLmRpdmlkZXIgewogICp3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDFweDsKICBtYXJnaW46IDlweCAxcHg7CiAgKm1hcmdpbjogLTVweCAwIDVweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmY7Cn0KCi5uYXYtdGFicywKLm5hdi1waWxscyB7CiAgKnpvb206IDE7Cn0KCi5uYXYtdGFiczpiZWZvcmUsCi5uYXYtcGlsbHM6YmVmb3JlLAoubmF2LXRhYnM6YWZ0ZXIsCi5uYXYtcGlsbHM6YWZ0ZXIgewogIGRpc3BsYXk6IHRhYmxlOwogIGxpbmUtaGVpZ2h0OiAwOwogIGNvbnRlbnQ6ICIiOwp9CgoubmF2LXRhYnM6YWZ0ZXIsCi5uYXYtcGlsbHM6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwp9CgoubmF2LXRhYnMgPiBsaSwKLm5hdi1waWxscyA+IGxpIHsKICBmbG9hdDogbGVmdDsKfQoKLm5hdi10YWJzID4gbGkgPiBhLAoubmF2LXBpbGxzID4gbGkgPiBhIHsKICBwYWRkaW5nLXJpZ2h0OiAxMnB4OwogIHBhZGRpbmctbGVmdDogMTJweDsKICBtYXJnaW4tcmlnaHQ6IDJweDsKICBsaW5lLWhlaWdodDogMTRweDsKfQoKLm5hdi10YWJzIHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKfQoKLm5hdi10YWJzID4gbGkgewogIG1hcmdpbi1ib3R0b206IC0xcHg7Cn0KCi5uYXYtdGFicyA+IGxpID4gYSB7CiAgcGFkZGluZy10b3A6IDhweDsKICBwYWRkaW5nLWJvdHRvbTogOHB4OwogIGxpbmUtaGVpZ2h0OiAyMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOwp9CgoubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIsCi5uYXYtdGFicyA+IGxpID4gYTpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlICNlZWVlZWUgI2RkZGRkZDsKfQoKLm5hdi10YWJzID4gLmFjdGl2ZSA+IGEsCi5uYXYtdGFicyA+IC5hY3RpdmUgPiBhOmhvdmVyLAoubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpmb2N1cyB7CiAgY29sb3I6ICNiYmJiYmI7CiAgY3Vyc29yOiBkZWZhdWx0OwogIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLm5hdi1waWxscyA+IGxpID4gYSB7CiAgcGFkZGluZy10b3A6IDhweDsKICBwYWRkaW5nLWJvdHRvbTogOHB4OwogIG1hcmdpbi10b3A6IDJweDsKICBtYXJnaW4tYm90dG9tOiAycHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KCi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSwKLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhOmhvdmVyLAoubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGE6Zm9jdXMgewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDdmZmY7Cn0KCi5uYXYtc3RhY2tlZCA+IGxpIHsKICBmbG9hdDogbm9uZTsKfQoKLm5hdi1zdGFja2VkID4gbGkgPiBhIHsKICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5uYXYtdGFicy5uYXYtc3RhY2tlZCB7CiAgYm9yZGVyLWJvdHRvbTogMDsKfQoKLm5hdi10YWJzLm5hdi1zdGFja2VkID4gbGkgPiBhIHsKICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoubmF2LXRhYnMubmF2LXN0YWNrZWQgPiBsaTpmaXJzdC1jaGlsZCA+IGEgewogIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7CiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7CiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDRweDsKfQoKLm5hdi10YWJzLm5hdi1zdGFja2VkID4gbGk6bGFzdC1jaGlsZCA+IGEgewogIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDsKICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDRweDsKfQoKLm5hdi10YWJzLm5hdi1zdGFja2VkID4gbGkgPiBhOmhvdmVyLAoubmF2LXRhYnMubmF2LXN0YWNrZWQgPiBsaSA+IGE6Zm9jdXMgewogIHotaW5kZXg6IDI7CiAgYm9yZGVyLWNvbG9yOiAjZGRkOwp9CgoubmF2LXBpbGxzLm5hdi1zdGFja2VkID4gbGkgPiBhIHsKICBtYXJnaW4tYm90dG9tOiAzcHg7Cn0KCi5uYXYtcGlsbHMubmF2LXN0YWNrZWQgPiBsaTpsYXN0LWNoaWxkID4gYSB7CiAgbWFyZ2luLWJvdHRvbTogMXB4Owp9CgoubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4Owp9CgoubmF2LXBpbGxzIC5kcm9wZG93bi1tZW51IHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKfQoKLm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7CiAgbWFyZ2luLXRvcDogNnB4OwogIGJvcmRlci10b3AtY29sb3I6ICMwMDdmZmY7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwN2ZmZjsKfQoKLm5hdiAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyIC5jYXJldCwKLm5hdiAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIC5jYXJldCB7CiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwNjZjYzsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDA2NmNjOwp9CgovKiBtb3ZlIGRvd24gY2FyZXRzIGZvciB0YWJzICovCgoubmF2LXRhYnMgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQgewogIG1hcmdpbi10b3A6IDhweDsKfQoKLm5hdiAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICBib3JkZXItdG9wLWNvbG9yOiAjZmZmOwogIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cn0KCi5uYXYtdGFicyAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICBib3JkZXItdG9wLWNvbG9yOiAjYmJiYmJiOwogIGJvcmRlci1ib3R0b20tY29sb3I6ICNiYmJiYmI7Cn0KCi5uYXYgPiAuZHJvcGRvd24uYWN0aXZlID4gYTpob3ZlciwKLm5hdiA+IC5kcm9wZG93bi5hY3RpdmUgPiBhOmZvY3VzIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5uYXYtdGFicyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLAoubmF2LXBpbGxzIC5vcGVuIC5kcm9wZG93bi10b2dnbGUsCi5uYXYgPiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSA+IGE6aG92ZXIsCi5uYXYgPiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSA+IGE6Zm9jdXMgewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICNkZmRmZGY7CiAgYm9yZGVyLWNvbG9yOiAjZGZkZmRmOwp9CgoubmF2IGxpLmRyb3Bkb3duLm9wZW4gLmNhcmV0LAoubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlIC5jYXJldCwKLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6aG92ZXIgLmNhcmV0LAoubmF2IGxpLmRyb3Bkb3duLm9wZW4gYTpmb2N1cyAuY2FyZXQgewogIGJvcmRlci10b3AtY29sb3I6ICNmZmZmZmY7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZmZmZjsKICBvcGFjaXR5OiAxOwogIGZpbHRlcjogYWxwaGEob3BhY2l0eT0xMDApOwp9CgoudGFicy1zdGFja2VkIC5vcGVuID4gYTpob3ZlciwKLnRhYnMtc3RhY2tlZCAub3BlbiA+IGE6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogI2RmZGZkZjsKfQoKLnRhYmJhYmxlIHsKICAqem9vbTogMTsKfQoKLnRhYmJhYmxlOmJlZm9yZSwKLnRhYmJhYmxlOmFmdGVyIHsKICBkaXNwbGF5OiB0YWJsZTsKICBsaW5lLWhlaWdodDogMDsKICBjb250ZW50OiAiIjsKfQoKLnRhYmJhYmxlOmFmdGVyIHsKICBjbGVhcjogYm90aDsKfQoKLnRhYi1jb250ZW50IHsKICBvdmVyZmxvdzogYXV0bzsKfQoKLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMsCi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzLAoudGFicy1sZWZ0ID4gLm5hdi10YWJzIHsKICBib3JkZXItYm90dG9tOiAwOwp9CgoudGFiLWNvbnRlbnQgPiAudGFiLXBhbmUsCi5waWxsLWNvbnRlbnQgPiAucGlsbC1wYW5lIHsKICBkaXNwbGF5OiBub25lOwp9CgoudGFiLWNvbnRlbnQgPiAuYWN0aXZlLAoucGlsbC1jb250ZW50ID4gLmFjdGl2ZSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi50YWJzLWJlbG93ID4gLm5hdi10YWJzIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsKfQoKLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMgPiBsaSB7CiAgbWFyZ2luLXRvcDogLTFweDsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoudGFicy1iZWxvdyA+IC5uYXYtdGFicyA+IGxpID4gYSB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCA0cHggNHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7Cn0KCi50YWJzLWJlbG93ID4gLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyLAoudGFicy1iZWxvdyA+IC5uYXYtdGFicyA+IGxpID4gYTpmb2N1cyB7CiAgYm9yZGVyLXRvcC1jb2xvcjogI2RkZDsKICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMgPiAuYWN0aXZlID4gYSwKLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpob3ZlciwKLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjZGRkICNkZGQgI2RkZDsKfQoKLnRhYnMtbGVmdCA+IC5uYXYtdGFicyA+IGxpLAoudGFicy1yaWdodCA+IC5uYXYtdGFicyA+IGxpIHsKICBmbG9hdDogbm9uZTsKfQoKLnRhYnMtbGVmdCA+IC5uYXYtdGFicyA+IGxpID4gYSwKLnRhYnMtcmlnaHQgPiAubmF2LXRhYnMgPiBsaSA+IGEgewogIG1pbi13aWR0aDogNzRweDsKICBtYXJnaW4tcmlnaHQ6IDA7CiAgbWFyZ2luLWJvdHRvbTogM3B4Owp9CgoudGFicy1sZWZ0ID4gLm5hdi10YWJzIHsKICBmbG9hdDogbGVmdDsKICBtYXJnaW4tcmlnaHQ6IDE5cHg7CiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKfQoKLnRhYnMtbGVmdCA+IC5uYXYtdGFicyA+IGxpID4gYSB7CiAgbWFyZ2luLXJpZ2h0OiAtMXB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDAgMCA0cHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggMCAwIDRweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4Owp9CgoudGFicy1sZWZ0ID4gLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyLAoudGFicy1sZWZ0ID4gLm5hdi10YWJzID4gbGkgPiBhOmZvY3VzIHsKICBib3JkZXItY29sb3I6ICNlZWVlZWUgI2RkZGRkZCAjZWVlZWVlICNlZWVlZWU7Cn0KCi50YWJzLWxlZnQgPiAubmF2LXRhYnMgLmFjdGl2ZSA+IGEsCi50YWJzLWxlZnQgPiAubmF2LXRhYnMgLmFjdGl2ZSA+IGE6aG92ZXIsCi50YWJzLWxlZnQgPiAubmF2LXRhYnMgLmFjdGl2ZSA+IGE6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogI2RkZCB0cmFuc3BhcmVudCAjZGRkICNkZGQ7CiAgKmJvcmRlci1yaWdodC1jb2xvcjogI2ZmZmZmZjsKfQoKLnRhYnMtcmlnaHQgPiAubmF2LXRhYnMgewogIGZsb2F0OiByaWdodDsKICBtYXJnaW4tbGVmdDogMTlweDsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7Cn0KCi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzID4gbGkgPiBhIHsKICBtYXJnaW4tbGVmdDogLTFweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDsKfQoKLnRhYnMtcmlnaHQgPiAubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIsCi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzID4gbGkgPiBhOmZvY3VzIHsKICBib3JkZXItY29sb3I6ICNlZWVlZWUgI2VlZWVlZSAjZWVlZWVlICNkZGRkZGQ7Cn0KCi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzIC5hY3RpdmUgPiBhLAoudGFicy1yaWdodCA+IC5uYXYtdGFicyAuYWN0aXZlID4gYTpob3ZlciwKLnRhYnMtcmlnaHQgPiAubmF2LXRhYnMgLmFjdGl2ZSA+IGE6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogI2RkZCAjZGRkICNkZGQgdHJhbnNwYXJlbnQ7CiAgKmJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmZmZmOwp9CgoubmF2ID4gLmRpc2FibGVkID4gYSB7CiAgY29sb3I6ICNkZmRmZGY7Cn0KCi5uYXYgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLAoubmF2ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGN1cnNvcjogZGVmYXVsdDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLm5hdmJhciB7CiAgKnBvc2l0aW9uOiByZWxhdGl2ZTsKICAqei1pbmRleDogMjsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoubmF2YmFyLWlubmVyIHsKICBtaW4taGVpZ2h0OiA1MHB4OwogIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgcGFkZGluZy1sZWZ0OiAyMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMDgwODA4LCAjMDgwODA4KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oIzA4MDgwOCksIHRvKCMwODA4MDgpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMwODA4MDgsICMwODA4MDgpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMwODA4MDgsICMwODA4MDgpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwODA4MDgsICMwODA4MDgpOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwODA4MDgnLCBlbmRDb2xvcnN0cj0nI2ZmMDgwODA4JywgR3JhZGllbnRUeXBlPTApOwogICp6b29tOiAxOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNjUpOwogICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNjUpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNjUpOwp9CgoubmF2YmFyLWlubmVyOmJlZm9yZSwKLm5hdmJhci1pbm5lcjphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5uYXZiYXItaW5uZXI6YWZ0ZXIgewogIGNsZWFyOiBib3RoOwp9CgoubmF2YmFyIC5jb250YWluZXIgewogIHdpZHRoOiBhdXRvOwp9CgoubmF2LWNvbGxhcHNlLmNvbGxhcHNlIHsKICBoZWlnaHQ6IGF1dG87CiAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5uYXZiYXIgLmJyYW5kIHsKICBkaXNwbGF5OiBibG9jazsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nOiAxNXB4IDIwcHggMTVweDsKICBtYXJnaW4tbGVmdDogLTIwcHg7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgIzA4MDgwODsKfQoKLm5hdmJhciAuYnJhbmQ6aG92ZXIsCi5uYXZiYXIgLmJyYW5kOmZvY3VzIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5uYXZiYXItdGV4dCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKICBsaW5lLWhlaWdodDogNTBweDsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLm5hdmJhci1saW5rIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLm5hdmJhci1saW5rOmhvdmVyLAoubmF2YmFyLWxpbms6Zm9jdXMgewogIGNvbG9yOiAjYmJiYmJiOwp9CgoubmF2YmFyIC5kaXZpZGVyLXZlcnRpY2FsIHsKICBoZWlnaHQ6IDUwcHg7CiAgbWFyZ2luOiAwIDlweDsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjMDgwODA4OwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzA4MDgwODsKfQoKLm5hdmJhciAuYnRuLAoubmF2YmFyIC5idG4tZ3JvdXAgewogIG1hcmdpbi10b3A6IDEwcHg7Cn0KCi5uYXZiYXIgLmJ0bi1ncm91cCAuYnRuLAoubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4sCi5uYXZiYXIgLmlucHV0LWFwcGVuZCAuYnRuLAoubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXAsCi5uYXZiYXIgLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwIHsKICBtYXJnaW4tdG9wOiAwOwp9CgoubmF2YmFyLWZvcm0gewogIG1hcmdpbi1ib3R0b206IDA7CiAgKnpvb206IDE7Cn0KCi5uYXZiYXItZm9ybTpiZWZvcmUsCi5uYXZiYXItZm9ybTphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5uYXZiYXItZm9ybTphZnRlciB7CiAgY2xlYXI6IGJvdGg7Cn0KCi5uYXZiYXItZm9ybSBpbnB1dCwKLm5hdmJhci1mb3JtIHNlbGVjdCwKLm5hdmJhci1mb3JtIC5yYWRpbywKLm5hdmJhci1mb3JtIC5jaGVja2JveCB7CiAgbWFyZ2luLXRvcDogMTBweDsKfQoKLm5hdmJhci1mb3JtIGlucHV0LAoubmF2YmFyLWZvcm0gc2VsZWN0LAoubmF2YmFyLWZvcm0gLmJ0biB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJpbWFnZSJdLAoubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwKLm5hdmJhci1mb3JtIGlucHV0W3R5cGU9InJhZGlvIl0gewogIG1hcmdpbi10b3A6IDNweDsKfQoKLm5hdmJhci1mb3JtIC5pbnB1dC1hcHBlbmQsCi5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZCB7CiAgbWFyZ2luLXRvcDogNXB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kIGlucHV0LAoubmF2YmFyLWZvcm0gLmlucHV0LXByZXBlbmQgaW5wdXQgewogIG1hcmdpbi10b3A6IDA7Cn0KCi5uYXZiYXItc2VhcmNoIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luLXRvcDogMTBweDsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5IHsKICBwYWRkaW5nOiA0cHggMTRweDsKICBtYXJnaW4tYm90dG9tOiAwOwogIGZvbnQtZmFtaWx5OiAiT3BlbiBTYW5zIiwgQ2FsaWJyaSwgQ2FuZGFyYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxM3B4OwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbGluZS1oZWlnaHQ6IDE7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNXB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7Cn0KCi5uYXZiYXItc3RhdGljLXRvcCB7CiAgcG9zaXRpb246IHN0YXRpYzsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lciB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5uYXZiYXItZml4ZWQtdG9wLAoubmF2YmFyLWZpeGVkLWJvdHRvbSB7CiAgcG9zaXRpb246IGZpeGVkOwogIHJpZ2h0OiAwOwogIGxlZnQ6IDA7CiAgei1pbmRleDogMTAzMDsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLAoubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lciB7CiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4Owp9CgoubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVyIHsKICBib3JkZXItd2lkdGg6IDFweCAwIDA7Cn0KCi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsCi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXIgewogIHBhZGRpbmctcmlnaHQ6IDA7CiAgcGFkZGluZy1sZWZ0OiAwOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwKLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwKLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lciB7CiAgd2lkdGg6IDk0MHB4Owp9CgoubmF2YmFyLWZpeGVkLXRvcCB7CiAgdG9wOiAwOwp9CgoubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLAoubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lciB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7Cn0KCi5uYXZiYXItZml4ZWQtYm90dG9tIHsKICBib3R0b206IDA7Cn0KCi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXIgewogIC13ZWJraXQtYm94LXNoYWRvdzogMCAtMXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgIC1tb3otYm94LXNoYWRvdzogMCAtMXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAtMXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpOwp9CgoubmF2YmFyIC5uYXYgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBsZWZ0OiAwOwogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbjogMCAxMHB4IDAgMDsKfQoKLm5hdmJhciAubmF2LnB1bGwtcmlnaHQgewogIGZsb2F0OiByaWdodDsKICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5uYXZiYXIgLm5hdiA+IGxpIHsKICBmbG9hdDogbGVmdDsKfQoKLm5hdmJhciAubmF2ID4gbGkgPiBhIHsKICBmbG9hdDogbm9uZTsKICBwYWRkaW5nOiAxNXB4IDE1cHggMTVweDsKICBjb2xvcjogI2ZmZmZmZjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgIzA4MDgwODsKfQoKLm5hdmJhciAubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICBtYXJnaW4tdG9wOiA4cHg7Cn0KCi5uYXZiYXIgLm5hdiA+IGxpID4gYTpmb2N1cywKLm5hdmJhciAubmF2ID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogI2JiYmJiYjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQoKLm5hdmJhciAubmF2ID4gLmFjdGl2ZSA+IGEsCi5uYXZiYXIgLm5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLAoubmF2YmFyIC5uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAzcHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOwp9CgoubmF2YmFyIC5idG4tbmF2YmFyIHsKICBkaXNwbGF5OiBub25lOwogIGZsb2F0OiByaWdodDsKICBwYWRkaW5nOiA3cHggMTBweDsKICBtYXJnaW4tcmlnaHQ6IDVweDsKICBtYXJnaW4tbGVmdDogNXB4OwogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7CiAgKmJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMDAwMDAwLCAjMDAwMDAwKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oIzAwMDAwMCksIHRvKCMwMDAwMDApKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDAwMDAsICMwMDAwMDApOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDAwMDAsICMwMDAwMDApOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDAwMDAsICMwMDAwMDApOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBib3JkZXItY29sb3I6ICMwMDAwMDAgIzAwMDAwMCAjMDAwMDAwOwogIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwMDAwMCcsIGVuZENvbG9yc3RyPScjZmYwMDAwMDAnLCBHcmFkaWVudFR5cGU9MCk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDc1KTsKICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA3NSk7Cn0KCi5uYXZiYXIgLmJ0bi1uYXZiYXI6aG92ZXIsCi5uYXZiYXIgLmJ0bi1uYXZiYXI6Zm9jdXMsCi5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLAoubmF2YmFyIC5idG4tbmF2YmFyLmFjdGl2ZSwKLm5hdmJhciAuYnRuLW5hdmJhci5kaXNhYmxlZCwKLm5hdmJhciAuYnRuLW5hdmJhcltkaXNhYmxlZF0gewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7CiAgKmJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7Cn0KCi5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLAoubmF2YmFyIC5idG4tbmF2YmFyLmFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCBcOTsKfQoKLm5hdmJhciAuYnRuLW5hdmJhciAuaWNvbi1iYXIgewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxOHB4OwogIGhlaWdodDogMnB4OwogIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7CiAgICAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7Cn0KCi5idG4tbmF2YmFyIC5pY29uLWJhciArIC5pY29uLWJhciB7CiAgbWFyZ2luLXRvcDogM3B4Owp9CgoubmF2YmFyIC5uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51OmJlZm9yZSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogLTdweDsKICBsZWZ0OiA5cHg7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGJvcmRlci1yaWdodDogN3B4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1ib3R0b206IDdweCBzb2xpZCAjY2NjOwogIGJvcmRlci1sZWZ0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjIpOwogIGNvbnRlbnQ6ICcnOwp9CgoubmF2YmFyIC5uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51OmFmdGVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAtNnB4OwogIGxlZnQ6IDEwcHg7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1ib3R0b206IDZweCBzb2xpZCAjZmZmZmZmOwogIGJvcmRlci1sZWZ0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgY29udGVudDogJyc7Cn0KCi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51OmJlZm9yZSB7CiAgdG9wOiBhdXRvOwogIGJvdHRvbTogLTdweDsKICBib3JkZXItdG9wOiA3cHggc29saWQgI2NjYzsKICBib3JkZXItYm90dG9tOiAwOwogIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yKTsKfQoKLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnU6YWZ0ZXIgewogIHRvcDogYXV0bzsKICBib3R0b206IC02cHg7CiAgYm9yZGVyLXRvcDogNnB4IHNvbGlkICNmZmZmZmY7CiAgYm9yZGVyLWJvdHRvbTogMDsKfQoKLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duID4gYTpob3ZlciAuY2FyZXQsCi5uYXZiYXIgLm5hdiBsaS5kcm9wZG93biA+IGE6Zm9jdXMgLmNhcmV0IHsKICBib3JkZXItdG9wLWNvbG9yOiAjYmJiYmJiOwogIGJvcmRlci1ib3R0b20tY29sb3I6ICNiYmJiYmI7Cn0KCi5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZSwKLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZSA+IC5kcm9wZG93bi10b2dnbGUsCi5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSA+IC5kcm9wZG93bi10b2dnbGUgewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9CgoubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24gPiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7CiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZmZmZjsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmZmZmOwp9CgoubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0LAoubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsCi5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSA+IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHsKICBib3JkZXItdG9wLWNvbG9yOiAjZmZmZmZmOwogIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmZmZmY7Cn0KCi5uYXZiYXIgLnB1bGwtcmlnaHQgPiBsaSA+IC5kcm9wZG93bi1tZW51LAoubmF2YmFyIC5uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQgewogIHJpZ2h0OiAwOwogIGxlZnQ6IGF1dG87Cn0KCi5uYXZiYXIgLnB1bGwtcmlnaHQgPiBsaSA+IC5kcm9wZG93bi1tZW51OmJlZm9yZSwKLm5hdmJhciAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmJlZm9yZSB7CiAgcmlnaHQ6IDEycHg7CiAgbGVmdDogYXV0bzsKfQoKLm5hdmJhciAucHVsbC1yaWdodCA+IGxpID4gLmRyb3Bkb3duLW1lbnU6YWZ0ZXIsCi5uYXZiYXIgLm5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDphZnRlciB7CiAgcmlnaHQ6IDEzcHg7CiAgbGVmdDogYXV0bzsKfQoKLm5hdmJhciAucHVsbC1yaWdodCA+IGxpID4gLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLW1lbnUsCi5uYXZiYXIgLm5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodCAuZHJvcGRvd24tbWVudSB7CiAgcmlnaHQ6IDEwMCU7CiAgbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IC0xcHg7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHggMCA2cHggNnB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4IDAgNnB4IDZweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCAwIDZweCA2cHg7Cn0KCi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWlubmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3ZmZmOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzAwN2ZmZiwgIzAwN2ZmZik7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCMwMDdmZmYpLCB0bygjMDA3ZmZmKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA3ZmZmLCAjMDA3ZmZmKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA3ZmZmLCAjMDA3ZmZmKTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMDA3ZmZmLCAjMDA3ZmZmKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDdmZmYnLCBlbmRDb2xvcnN0cj0nI2ZmMDA3ZmZmJywgR3JhZGllbnRUeXBlPTApOwp9CgoubmF2YmFyLWludmVyc2UgLmJyYW5kLAoubmF2YmFyLWludmVyc2UgLm5hdiA+IGxpID4gYSB7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7Cn0KCi5uYXZiYXItaW52ZXJzZSAuYnJhbmQ6aG92ZXIsCi5uYXZiYXItaW52ZXJzZSAubmF2ID4gbGkgPiBhOmhvdmVyLAoubmF2YmFyLWludmVyc2UgLmJyYW5kOmZvY3VzLAoubmF2YmFyLWludmVyc2UgLm5hdiA+IGxpID4gYTpmb2N1cyB7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCi5uYXZiYXItaW52ZXJzZSAuYnJhbmQgewogIGNvbG9yOiAjZmZmZmZmOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0IHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLm5hdmJhci1pbnZlcnNlIC5uYXYgPiBsaSA+IGE6Zm9jdXMsCi5uYXZiYXItaW52ZXJzZSAubmF2ID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlID4gYSwKLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZSA+IGE6aG92ZXIsCi5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmUgPiBhOmZvY3VzIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3ZmZmOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpob3ZlciwKLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpmb2N1cyB7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCi5uYXZiYXItaW52ZXJzZSAuZGl2aWRlci12ZXJ0aWNhbCB7CiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMDA3ZmZmOwogIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDA3ZmZmOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZSwKLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZSwKLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmUgPiAuZHJvcGRvd24tdG9nZ2xlIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3ZmZmOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93biA+IGE6aG92ZXIgLmNhcmV0LAoubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93biA+IGE6Zm9jdXMgLmNhcmV0IHsKICBib3JkZXItdG9wLWNvbG9yOiAjZmZmZmZmOwogIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmZmZmY7Cn0KCi5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duID4gLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQgewogIGJvcmRlci10b3AtY29sb3I6ICNmZmZmZmY7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZmZmZjsKfQoKLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0LAoubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmUgPiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwKLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmUgPiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7CiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZmZmZjsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmZmZmOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeSB7CiAgY29sb3I6ICNmZmZmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzgwYmZmZjsKICBib3JkZXItY29sb3I6ICMwMDdmZmY7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogICAgIC1tb3otdHJhbnNpdGlvbjogbm9uZTsKICAgICAgIC1vLXRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgICB0cmFuc2l0aW9uOiBub25lOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTotbW96LXBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzk5OTk5OTsKfQoKLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzk5OTk5OTsKfQoKLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewogIGNvbG9yOiAjOTk5OTk5Owp9CgoubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTpmb2N1cywKLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnkuZm9jdXNlZCB7CiAgcGFkZGluZzogNXB4IDE1cHg7CiAgY29sb3I6ICM5OTk5OTk7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwogIGJvcmRlcjogMDsKICBvdXRsaW5lOiAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDNweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgIC1tb3otYm94LXNoYWRvdzogMCAwIDNweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDNweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwp9CgoubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIgewogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDcyZTY7CiAgKmJhY2tncm91bmQtY29sb3I6ICMwMDcyZTY7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA3MmU2LCAjMDA3MmU2KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oIzAwNzJlNiksIHRvKCMwMDcyZTYpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDcyZTYsICMwMDcyZTYpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDcyZTYsICMwMDcyZTYpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDcyZTYsICMwMDcyZTYpOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBib3JkZXItY29sb3I6ICMwMDcyZTYgIzAwNzJlNiAjMDA0Yzk5OwogIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwNzJlNicsIGVuZENvbG9yc3RyPScjZmYwMDcyZTYnLCBHcmFkaWVudFR5cGU9MCk7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7Cn0KCi5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjpob3ZlciwKLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmZvY3VzLAoubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLAoubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuYWN0aXZlLAoubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsCi5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcltkaXNhYmxlZF0gewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDcyZTY7CiAgKmJhY2tncm91bmQtY29sb3I6ICMwMDY2Y2M7Cn0KCi5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsCi5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICMwMDU5YjMgXDk7Cn0KCi5icmVhZGNydW1iIHsKICBwYWRkaW5nOiA4cHggMTVweDsKICBtYXJnaW46IDAgMCAyMHB4OwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLmJyZWFkY3J1bWIgPiBsaSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICpkaXNwbGF5OiBpbmxpbmU7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjsKICAqem9vbTogMTsKfQoKLmJyZWFkY3J1bWIgPiBsaSA+IC5kaXZpZGVyIHsKICBwYWRkaW5nOiAwIDVweDsKICBjb2xvcjogI2NjYzsKfQoKLmJyZWFkY3J1bWIgPiAuYWN0aXZlIHsKICBjb2xvcjogI2RmZGZkZjsKfQoKLnBhZ2luYXRpb24gewogIG1hcmdpbjogMjBweCAwOwp9CgoucGFnaW5hdGlvbiB1bCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICpkaXNwbGF5OiBpbmxpbmU7CiAgbWFyZ2luLWJvdHRvbTogMDsKICBtYXJnaW4tbGVmdDogMDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAqem9vbTogMTsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQoKLnBhZ2luYXRpb24gdWwgPiBsaSB7CiAgZGlzcGxheTogaW5saW5lOwp9CgoucGFnaW5hdGlvbiB1bCA+IGxpID4gYSwKLnBhZ2luYXRpb24gdWwgPiBsaSA+IHNwYW4gewogIGZsb2F0OiBsZWZ0OwogIHBhZGRpbmc6IDRweCAxMnB4OwogIGxpbmUtaGVpZ2h0OiAyMHB4OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZkZmRmOwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1sZWZ0LXdpZHRoOiAwOwp9CgoucGFnaW5hdGlvbiB1bCA+IGxpID4gYTpob3ZlciwKLnBhZ2luYXRpb24gdWwgPiBsaSA+IGE6Zm9jdXMsCi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IGEsCi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IHNwYW4gewogIGJhY2tncm91bmQtY29sb3I6ICMwMDdmZmY7Cn0KCi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IGEsCi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IHNwYW4gewogIGNvbG9yOiAjZGZkZmRmOwogIGN1cnNvcjogZGVmYXVsdDsKfQoKLnBhZ2luYXRpb24gdWwgPiAuZGlzYWJsZWQgPiBzcGFuLAoucGFnaW5hdGlvbiB1bCA+IC5kaXNhYmxlZCA+IGEsCi5wYWdpbmF0aW9uIHVsID4gLmRpc2FibGVkID4gYTpob3ZlciwKLnBhZ2luYXRpb24gdWwgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHsKICBjb2xvcjogI2RmZGZkZjsKICBjdXJzb3I6IGRlZmF1bHQ7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KCi5wYWdpbmF0aW9uIHVsID4gbGk6Zmlyc3QtY2hpbGQgPiBhLAoucGFnaW5hdGlvbiB1bCA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7CiAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDA7Cn0KCi5wYWdpbmF0aW9uIHVsID4gbGk6bGFzdC1jaGlsZCA+IGEsCi5wYWdpbmF0aW9uIHVsID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4gewogIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMDsKfQoKLnBhZ2luYXRpb24tY2VudGVyZWQgewogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLnBhZ2luYXRpb24tcmlnaHQgewogIHRleHQtYWxpZ246IHJpZ2h0Owp9CgoucGFnaW5hdGlvbi1sYXJnZSB1bCA+IGxpID4gYSwKLnBhZ2luYXRpb24tbGFyZ2UgdWwgPiBsaSA+IHNwYW4gewogIHBhZGRpbmc6IDIycHggMzBweDsKICBmb250LXNpemU6IDE3LjVweDsKfQoKLnBhZ2luYXRpb24tbGFyZ2UgdWwgPiBsaTpmaXJzdC1jaGlsZCA+IGEsCi5wYWdpbmF0aW9uLWxhcmdlIHVsID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDA7Cn0KCi5wYWdpbmF0aW9uLWxhcmdlIHVsID4gbGk6bGFzdC1jaGlsZCA+IGEsCi5wYWdpbmF0aW9uLWxhcmdlIHVsID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4gewogIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMDsKfQoKLnBhZ2luYXRpb24tbWluaSB1bCA+IGxpOmZpcnN0LWNoaWxkID4gYSwKLnBhZ2luYXRpb24tc21hbGwgdWwgPiBsaTpmaXJzdC1jaGlsZCA+IGEsCi5wYWdpbmF0aW9uLW1pbmkgdWwgPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4sCi5wYWdpbmF0aW9uLXNtYWxsIHVsID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDA7CiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDA7Cn0KCi5wYWdpbmF0aW9uLW1pbmkgdWwgPiBsaTpsYXN0LWNoaWxkID4gYSwKLnBhZ2luYXRpb24tc21hbGwgdWwgPiBsaTpsYXN0LWNoaWxkID4gYSwKLnBhZ2luYXRpb24tbWluaSB1bCA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuLAoucGFnaW5hdGlvbi1zbWFsbCB1bCA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHsKICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogMDsKICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDA7Cn0KCi5wYWdpbmF0aW9uLXNtYWxsIHVsID4gbGkgPiBhLAoucGFnaW5hdGlvbi1zbWFsbCB1bCA+IGxpID4gc3BhbiB7CiAgcGFkZGluZzogMnB4IDEwcHg7CiAgZm9udC1zaXplOiAxMS45cHg7Cn0KCi5wYWdpbmF0aW9uLW1pbmkgdWwgPiBsaSA+IGEsCi5wYWdpbmF0aW9uLW1pbmkgdWwgPiBsaSA+IHNwYW4gewogIHBhZGRpbmc6IDJweCA2cHg7CiAgZm9udC1zaXplOiAxMC41cHg7Cn0KCi5wYWdlciB7CiAgbWFyZ2luOiAyMHB4IDA7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgKnpvb206IDE7Cn0KCi5wYWdlcjpiZWZvcmUsCi5wYWdlcjphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi5wYWdlcjphZnRlciB7CiAgY2xlYXI6IGJvdGg7Cn0KCi5wYWdlciBsaSB7CiAgZGlzcGxheTogaW5saW5lOwp9CgoucGFnZXIgbGkgPiBhLAoucGFnZXIgbGkgPiBzcGFuIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcGFkZGluZzogNXB4IDE0cHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDE1cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4Owp9CgoucGFnZXIgbGkgPiBhOmhvdmVyLAoucGFnZXIgbGkgPiBhOmZvY3VzIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKfQoKLnBhZ2VyIC5uZXh0ID4gYSwKLnBhZ2VyIC5uZXh0ID4gc3BhbiB7CiAgZmxvYXQ6IHJpZ2h0Owp9CgoucGFnZXIgLnByZXZpb3VzID4gYSwKLnBhZ2VyIC5wcmV2aW91cyA+IHNwYW4gewogIGZsb2F0OiBsZWZ0Owp9CgoucGFnZXIgLmRpc2FibGVkID4gYSwKLnBhZ2VyIC5kaXNhYmxlZCA+IGE6aG92ZXIsCi5wYWdlciAuZGlzYWJsZWQgPiBhOmZvY3VzLAoucGFnZXIgLmRpc2FibGVkID4gc3BhbiB7CiAgY29sb3I6ICNkZmRmZGY7CiAgY3Vyc29yOiBkZWZhdWx0OwogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cn0KCi5tb2RhbC1iYWNrZHJvcCB7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMDsKICByaWdodDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICB6LWluZGV4OiAxMDQwOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7Cn0KCi5tb2RhbC1iYWNrZHJvcC5mYWRlIHsKICBvcGFjaXR5OiAwOwp9CgoubW9kYWwtYmFja2Ryb3AsCi5tb2RhbC1iYWNrZHJvcC5mYWRlLmluIHsKICBvcGFjaXR5OiAwLjg7CiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTgwKTsKfQoKLm1vZGFsIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAxMCU7CiAgbGVmdDogNTAlOwogIHotaW5kZXg6IDEwNTA7CiAgd2lkdGg6IDU2MHB4OwogIG1hcmdpbi1sZWZ0OiAtMjgwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTsKICAqYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICBvdXRsaW5lOiBub25lOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDdweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAwLCAwLCAwLjMpOwogIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICAgICAtbW96LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94Owp9CgoubW9kYWwuZmFkZSB7CiAgdG9wOiAtMjUlOwogIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGxpbmVhciwgdG9wIDAuM3MgZWFzZS1vdXQ7CiAgICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyLCB0b3AgMC4zcyBlYXNlLW91dDsKICAgICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXIsIHRvcCAwLjNzIGVhc2Utb3V0OwogICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGxpbmVhciwgdG9wIDAuM3MgZWFzZS1vdXQ7Cn0KCi5tb2RhbC5mYWRlLmluIHsKICB0b3A6IDEwJTsKfQoKLm1vZGFsLWhlYWRlciB7CiAgcGFkZGluZzogOXB4IDE1cHg7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7Cn0KCi5tb2RhbC1oZWFkZXIgLmNsb3NlIHsKICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5tb2RhbC1oZWFkZXIgaDMgewogIG1hcmdpbjogMDsKICBsaW5lLWhlaWdodDogMzBweDsKfQoKLm1vZGFsLWJvZHkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBtYXgtaGVpZ2h0OiA0MDBweDsKICBwYWRkaW5nOiAxNXB4OwogIG92ZXJmbG93LXk6IGF1dG87Cn0KCi5tb2RhbC1mb3JtIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubW9kYWwtZm9vdGVyIHsKICBwYWRkaW5nOiAxNHB4IDE1cHggMTVweDsKICBtYXJnaW4tYm90dG9tOiAwOwogIHRleHQtYWxpZ246IHJpZ2h0OwogIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7CiAgKnpvb206IDE7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7Cn0KCi5tb2RhbC1mb290ZXI6YmVmb3JlLAoubW9kYWwtZm9vdGVyOmFmdGVyIHsKICBkaXNwbGF5OiB0YWJsZTsKICBsaW5lLWhlaWdodDogMDsKICBjb250ZW50OiAiIjsKfQoKLm1vZGFsLWZvb3RlcjphZnRlciB7CiAgY2xlYXI6IGJvdGg7Cn0KCi5tb2RhbC1mb290ZXIgLmJ0biArIC5idG4gewogIG1hcmdpbi1ib3R0b206IDA7CiAgbWFyZ2luLWxlZnQ6IDVweDsKfQoKLm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4gKyAuYnRuIHsKICBtYXJnaW4tbGVmdDogLTFweDsKfQoKLm1vZGFsLWZvb3RlciAuYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50b29sdGlwIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTAzMDsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDExcHg7CiAgbGluZS1oZWlnaHQ6IDEuNDsKICBvcGFjaXR5OiAwOwogIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsKICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgoudG9vbHRpcC5pbiB7CiAgb3BhY2l0eTogMC44OwogIGZpbHRlcjogYWxwaGEob3BhY2l0eT04MCk7Cn0KCi50b29sdGlwLnRvcCB7CiAgcGFkZGluZzogNXB4IDA7CiAgbWFyZ2luLXRvcDogLTNweDsKfQoKLnRvb2x0aXAucmlnaHQgewogIHBhZGRpbmc6IDAgNXB4OwogIG1hcmdpbi1sZWZ0OiAzcHg7Cn0KCi50b29sdGlwLmJvdHRvbSB7CiAgcGFkZGluZzogNXB4IDA7CiAgbWFyZ2luLXRvcDogM3B4Owp9CgoudG9vbHRpcC5sZWZ0IHsKICBwYWRkaW5nOiAwIDVweDsKICBtYXJnaW4tbGVmdDogLTNweDsKfQoKLnRvb2x0aXAtaW5uZXIgewogIG1heC13aWR0aDogMjAwcHg7CiAgcGFkZGluZzogOHB4OwogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLnRvb2x0aXAtYXJyb3cgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMDsKICBoZWlnaHQ6IDA7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItc3R5bGU6IHNvbGlkOwp9CgoudG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cgewogIGJvdHRvbTogMDsKICBsZWZ0OiA1MCU7CiAgbWFyZ2luLWxlZnQ6IC01cHg7CiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMDAwMDsKICBib3JkZXItd2lkdGg6IDVweCA1cHggMDsKfQoKLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cgewogIHRvcDogNTAlOwogIGxlZnQ6IDA7CiAgbWFyZ2luLXRvcDogLTVweDsKICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDAwMDA7CiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwOwp9CgoudG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93IHsKICB0b3A6IDUwJTsKICByaWdodDogMDsKICBtYXJnaW4tdG9wOiAtNXB4OwogIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDAwMDAwOwogIGJvcmRlci13aWR0aDogNXB4IDAgNXB4IDVweDsKfQoKLnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93IHsKICB0b3A6IDA7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtNXB4OwogIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDAwMDA7CiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7Cn0KCi5wb3BvdmVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgei1pbmRleDogMTAxMDsKICBkaXNwbGF5OiBub25lOwogIG1heC13aWR0aDogMjc2cHg7CiAgcGFkZGluZzogMXB4OwogIHRleHQtYWxpZ246IGxlZnQ7CiAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3NTE4OwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgLW1vei1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpOwogIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICAgICAtbW96LWJhY2tncm91bmQtY2xpcDogcGFkZGluZzsKICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7Cn0KCi5wb3BvdmVyLnRvcCB7CiAgbWFyZ2luLXRvcDogLTEwcHg7Cn0KCi5wb3BvdmVyLnJpZ2h0IHsKICBtYXJnaW4tbGVmdDogMTBweDsKfQoKLnBvcG92ZXIuYm90dG9tIHsKICBtYXJnaW4tdG9wOiAxMHB4Owp9CgoucG9wb3Zlci5sZWZ0IHsKICBtYXJnaW4tbGVmdDogLTEwcHg7Cn0KCi5wb3BvdmVyLXRpdGxlIHsKICBwYWRkaW5nOiA4cHggMTRweDsKICBtYXJnaW46IDA7CiAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNzUxODsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZlNjYwMDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweCA1cHggMCAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDsKfQoKLnBvcG92ZXItdGl0bGU6ZW1wdHkgewogIGRpc3BsYXk6IG5vbmU7Cn0KCi5wb3BvdmVyLWNvbnRlbnQgewogIHBhZGRpbmc6IDlweCAxNHB4Owp9CgoucG9wb3ZlciAuYXJyb3csCi5wb3BvdmVyIC5hcnJvdzphZnRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAwOwogIGhlaWdodDogMDsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1zdHlsZTogc29saWQ7Cn0KCi5wb3BvdmVyIC5hcnJvdyB7CiAgYm9yZGVyLXdpZHRoOiAxNnB4Owp9CgoucG9wb3ZlciAuYXJyb3c6YWZ0ZXIgewogIGJvcmRlci13aWR0aDogMTVweDsKICBjb250ZW50OiAiIjsKfQoKLnBvcG92ZXIudG9wIC5hcnJvdyB7CiAgYm90dG9tOiAtMTZweDsKICBsZWZ0OiA1MCU7CiAgbWFyZ2luLWxlZnQ6IC0xNnB4OwogIGJvcmRlci10b3AtY29sb3I6ICM5OTk7CiAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDsKfQoKLnBvcG92ZXIudG9wIC5hcnJvdzphZnRlciB7CiAgYm90dG9tOiAxcHg7CiAgbWFyZ2luLWxlZnQ6IC0xNXB4OwogIGJvcmRlci10b3AtY29sb3I6ICNmZjc1MTg7CiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDsKfQoKLnBvcG92ZXIucmlnaHQgLmFycm93IHsKICB0b3A6IDUwJTsKICBsZWZ0OiAtMTZweDsKICBtYXJnaW4tdG9wOiAtMTZweDsKICBib3JkZXItcmlnaHQtY29sb3I6ICM5OTk7CiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItbGVmdC13aWR0aDogMDsKfQoKLnBvcG92ZXIucmlnaHQgLmFycm93OmFmdGVyIHsKICBib3R0b206IC0xNXB4OwogIGxlZnQ6IDFweDsKICBib3JkZXItcmlnaHQtY29sb3I6ICNmZjc1MTg7CiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7Cn0KCi5wb3BvdmVyLmJvdHRvbSAuYXJyb3cgewogIHRvcDogLTE2cHg7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtMTZweDsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjOTk5OwogIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci10b3Atd2lkdGg6IDA7Cn0KCi5wb3BvdmVyLmJvdHRvbSAuYXJyb3c6YWZ0ZXIgewogIHRvcDogMXB4OwogIG1hcmdpbi1sZWZ0OiAtMTVweDsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmY3NTE4OwogIGJvcmRlci10b3Atd2lkdGg6IDA7Cn0KCi5wb3BvdmVyLmxlZnQgLmFycm93IHsKICB0b3A6IDUwJTsKICByaWdodDogLTE2cHg7CiAgbWFyZ2luLXRvcDogLTE2cHg7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICM5OTk7CiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1yaWdodC13aWR0aDogMDsKfQoKLnBvcG92ZXIubGVmdCAuYXJyb3c6YWZ0ZXIgewogIHJpZ2h0OiAxcHg7CiAgYm90dG9tOiAtMTVweDsKICBib3JkZXItbGVmdC1jb2xvcjogI2ZmNzUxODsKICBib3JkZXItcmlnaHQtd2lkdGg6IDA7Cn0KCi50aHVtYm5haWxzIHsKICBtYXJnaW4tbGVmdDogLTIwcHg7CiAgbGlzdC1zdHlsZTogbm9uZTsKICAqem9vbTogMTsKfQoKLnRodW1ibmFpbHM6YmVmb3JlLAoudGh1bWJuYWlsczphZnRlciB7CiAgZGlzcGxheTogdGFibGU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgY29udGVudDogIiI7Cn0KCi50aHVtYm5haWxzOmFmdGVyIHsKICBjbGVhcjogYm90aDsKfQoKLnJvdy1mbHVpZCAudGh1bWJuYWlscyB7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi50aHVtYm5haWxzID4gbGkgewogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgbWFyZ2luLWxlZnQ6IDIwcHg7Cn0KCi50aHVtYm5haWwgewogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IDRweDsKICBsaW5lLWhlaWdodDogMjBweDsKICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNTUpOwogICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNTUpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNTUpOwogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7CiAgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDsKICAgICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7Cn0KCmEudGh1bWJuYWlsOmhvdmVyLAphLnRodW1ibmFpbDpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiAjMDA3ZmZmOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMTA1LCAyMTQsIDAuMjUpOwogICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMTA1LCAyMTQsIDAuMjUpOwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMTA1LCAyMTQsIDAuMjUpOwp9CgoudGh1bWJuYWlsID4gaW1nIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXgtd2lkdGg6IDEwMCU7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogIG1hcmdpbi1sZWZ0OiBhdXRvOwp9CgoudGh1bWJuYWlsIC5jYXB0aW9uIHsKICBwYWRkaW5nOiA5cHg7CiAgY29sb3I6ICNiYmJiYmI7Cn0KCi5tZWRpYSwKLm1lZGlhLWJvZHkgewogIG92ZXJmbG93OiBoaWRkZW47CiAgKm92ZXJmbG93OiB2aXNpYmxlOwogIHpvb206IDE7Cn0KCi5tZWRpYSwKLm1lZGlhIC5tZWRpYSB7CiAgbWFyZ2luLXRvcDogMTVweDsKfQoKLm1lZGlhOmZpcnN0LWNoaWxkIHsKICBtYXJnaW4tdG9wOiAwOwp9CgoubWVkaWEtb2JqZWN0IHsKICBkaXNwbGF5OiBibG9jazsKfQoKLm1lZGlhLWhlYWRpbmcgewogIG1hcmdpbjogMCAwIDVweDsKfQoKLm1lZGlhID4gLnB1bGwtbGVmdCB7CiAgbWFyZ2luLXJpZ2h0OiAxMHB4Owp9CgoubWVkaWEgPiAucHVsbC1yaWdodCB7CiAgbWFyZ2luLWxlZnQ6IDEwcHg7Cn0KCi5tZWRpYS1saXN0IHsKICBtYXJnaW4tbGVmdDogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9CgoubGFiZWwsCi5iYWRnZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBhZGRpbmc6IDJweCA0cHg7CiAgZm9udC1zaXplOiAxMS44NDRweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsaW5lLWhlaWdodDogMTRweDsKICBjb2xvcjogI2ZmZmZmZjsKICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZkZmRmOwp9CgoubGFiZWwgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgouYmFkZ2UgewogIHBhZGRpbmctcmlnaHQ6IDlweDsKICBwYWRkaW5nLWxlZnQ6IDlweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKfQoKLmxhYmVsOmVtcHR5LAouYmFkZ2U6ZW1wdHkgewogIGRpc3BsYXk6IG5vbmU7Cn0KCmEubGFiZWw6aG92ZXIsCmEubGFiZWw6Zm9jdXMsCmEuYmFkZ2U6aG92ZXIsCmEuYmFkZ2U6Zm9jdXMgewogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5sYWJlbC1pbXBvcnRhbnQsCi5iYWRnZS1pbXBvcnRhbnQgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cn0KCi5sYWJlbC1pbXBvcnRhbnRbaHJlZl0sCi5iYWRnZS1pbXBvcnRhbnRbaHJlZl0gewogIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7Cn0KCi5sYWJlbC13YXJuaW5nLAouYmFkZ2Utd2FybmluZyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNzUxODsKfQoKLmxhYmVsLXdhcm5pbmdbaHJlZl0sCi5iYWRnZS13YXJuaW5nW2hyZWZdIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTQ1YzAwOwp9CgoubGFiZWwtc3VjY2VzcywKLmJhZGdlLXN1Y2Nlc3MgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cn0KCi5sYWJlbC1zdWNjZXNzW2hyZWZdLAouYmFkZ2Utc3VjY2Vzc1tocmVmXSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsKfQoKLmxhYmVsLWluZm8sCi5iYWRnZS1pbmZvIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwp9CgoubGFiZWwtaW5mb1tocmVmXSwKLmJhZGdlLWluZm9baHJlZl0gewogIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7Cn0KCi5sYWJlbC1pbnZlcnNlLAouYmFkZ2UtaW52ZXJzZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OTsKfQoKLmxhYmVsLWludmVyc2VbaHJlZl0sCi5iYWRnZS1pbnZlcnNlW2hyZWZdIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjODA4MDgwOwp9CgouYnRuIC5sYWJlbCwKLmJ0biAuYmFkZ2UgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0b3A6IC0xcHg7Cn0KCi5idG4tbWluaSAubGFiZWwsCi5idG4tbWluaSAuYmFkZ2UgewogIHRvcDogMDsKfQoKQC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHsKICBmcm9tIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMDsKICB9CiAgdG8gewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwogIH0KfQoKQC1tb3ota2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHsKICBmcm9tIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMDsKICB9CiAgdG8gewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwogIH0KfQoKQC1tcy1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgewogIGZyb20gewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOwogIH0KICB0byB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7CiAgfQp9CgpALW8ta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHsKICBmcm9tIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsKICB9CiAgdG8gewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOwogIH0KfQoKQGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7CiAgZnJvbSB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7CiAgfQogIHRvIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsKICB9Cn0KCi5wcm9ncmVzcyB7CiAgaGVpZ2h0OiAyMHB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2Y1ZjVmNSwgI2Y5ZjlmOSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCNmNWY1ZjUpLCB0bygjZjlmOWY5KSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZjVmNWY1LCAjZjlmOWY5KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjZjVmNWY1LCAjZjlmOWY5KTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjVmNWY1LCAjZjlmOWY5KTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjVmNWY1JywgZW5kQ29sb3JzdHI9JyNmZmY5ZjlmOScsIEdyYWRpZW50VHlwZT0wKTsKICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKfQoKLnByb2dyZXNzIC5iYXIgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiAwOwogIGhlaWdodDogMTAwJTsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogIGJhY2tncm91bmQtY29sb3I6ICMwZTkwZDI7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMTQ5YmRmLCAjMDQ4MGJlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oIzE0OWJkZiksIHRvKCMwNDgwYmUpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMxNDliZGYsICMwNDgwYmUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMxNDliZGYsICMwNDgwYmUpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMxNDliZGYsICMwNDgwYmUpOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYxNDliZGYnLCBlbmRDb2xvcnN0cj0nI2ZmMDQ4MGJlJywgR3JhZGllbnRUeXBlPTApOwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIC13ZWJraXQtdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlOwogICAgIC1tb3otdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlOwogICAgICAgLW8tdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlOwogICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlOwp9CgoucHJvZ3Jlc3MgLmJhciArIC5iYXIgewogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDAsIDAsIDAsIDAuMTUpLCBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDAsIDAsIDAsIDAuMTUpLCBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDAsIDAsIDAsIDAuMTUpLCBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOwp9CgoucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTQ5YmRmOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDEwMCUsIDEwMCUgMCwgY29sb3Itc3RvcCgwLjI1LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjc1LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjc1LCB0cmFuc3BhcmVudCksIHRvKHRyYW5zcGFyZW50KSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOwogIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHg7CiAgICAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDQwcHggNDBweDsKICAgICAgIC1vLWJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4OwogICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHg7Cn0KCi5wcm9ncmVzcy5hY3RpdmUgLmJhciB7CiAgLXdlYmtpdC1hbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTsKICAgICAtbW96LWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOwogICAgICAtbXMtYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAtby1hbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICAgIGFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOwp9CgoucHJvZ3Jlc3MtZGFuZ2VyIC5iYXIsCi5wcm9ncmVzcyAuYmFyLWRhbmdlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2RkNTE0YzsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNlZTVmNWIsICNjNDNjMzUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjZWU1ZjViKSwgdG8oI2M0M2MzNSkpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2M0M2MzNSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2M0M2MzNSk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2VlNWY1YiwgI2M0M2MzNSk7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsIGVuZENvbG9yc3RyPScjZmZjNDNjMzUnLCBHcmFkaWVudFR5cGU9MCk7Cn0KCi5wcm9ncmVzcy1kYW5nZXIucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLAoucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWRhbmdlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlNWY1YjsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC4yNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKfQoKLnByb2dyZXNzLXN1Y2Nlc3MgLmJhciwKLnByb2dyZXNzIC5iYXItc3VjY2VzcyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzVlYjk1ZTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICM2MmM0NjIsICM1N2E5NTcpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjNjJjNDYyKSwgdG8oIzU3YTk1NykpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzYyYzQ2MiwgIzU3YTk1Nyk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzYyYzQ2MiwgIzU3YTk1Nyk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzYyYzQ2MiwgIzU3YTk1Nyk7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjYyYzQ2MicsIGVuZENvbG9yc3RyPScjZmY1N2E5NTcnLCBHcmFkaWVudFR5cGU9MCk7Cn0KCi5wcm9ncmVzcy1zdWNjZXNzLnByb2dyZXNzLXN0cmlwZWQgLmJhciwKLnByb2dyZXNzLXN0cmlwZWQgLmJhci1zdWNjZXNzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjJjNDYyOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDEwMCUsIDEwMCUgMCwgY29sb3Itc3RvcCgwLjI1LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjc1LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjc1LCB0cmFuc3BhcmVudCksIHRvKHRyYW5zcGFyZW50KSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOwp9CgoucHJvZ3Jlc3MtaW5mbyAuYmFyLAoucHJvZ3Jlc3MgLmJhci1pbmZvIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGJiMWNmOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzViYzBkZSwgIzMzOWJiOSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCM1YmMwZGUpLCB0bygjMzM5YmI5KSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMzM5YmI5KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMzM5YmI5KTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNWJjMGRlLCAjMzM5YmI5KTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJywgZW5kQ29sb3JzdHI9JyNmZjMzOWJiOScsIEdyYWRpZW50VHlwZT0wKTsKfQoKLnByb2dyZXNzLWluZm8ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLAoucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWluZm8gewogIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMTAwJSwgMTAwJSAwLCBjb2xvci1zdG9wKDAuMjUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkpLCBjb2xvci1zdG9wKDAuMjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkpLCBjb2xvci1zdG9wKDAuNzUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkpLCBjb2xvci1zdG9wKDAuNzUsIHRyYW5zcGFyZW50KSwgdG8odHJhbnNwYXJlbnQpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7Cn0KCi5wcm9ncmVzcy13YXJuaW5nIC5iYXIsCi5wcm9ncmVzcyAuYmFyLXdhcm5pbmcgewogIGJhY2tncm91bmQtY29sb3I6ICNmZjkwNDY7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZhMzY1LCAjZmY3NTE4KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2ZmYTM2NSksIHRvKCNmZjc1MTgpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmEzNjUsICNmZjc1MTgpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmEzNjUsICNmZjc1MTgpOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZmEzNjUsICNmZjc1MTgpOwogIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmEzNjUnLCBlbmRDb2xvcnN0cj0nI2ZmZmY3NTE4JywgR3JhZGllbnRUeXBlPTApOwp9CgoucHJvZ3Jlc3Mtd2FybmluZy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsCi5wcm9ncmVzcy1zdHJpcGVkIC5iYXItd2FybmluZyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTM2NTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC4yNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTsKfQoKLmFjY29yZGlvbiB7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKLmFjY29yZGlvbi1ncm91cCB7CiAgbWFyZ2luLWJvdHRvbTogMnB4OwogIGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5hY2NvcmRpb24taGVhZGluZyB7CiAgYm9yZGVyLWJvdHRvbTogMDsKfQoKLmFjY29yZGlvbi1oZWFkaW5nIC5hY2NvcmRpb24tdG9nZ2xlIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiA4cHggMTVweDsKfQoKLmFjY29yZGlvbi10b2dnbGUgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLmFjY29yZGlvbi1pbm5lciB7CiAgcGFkZGluZzogOXB4IDE1cHg7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KCi5jYXJvdXNlbCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5jYXJvdXNlbC1pbm5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZGlzcGxheTogbm9uZTsKICAtd2Via2l0LXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDsKICAgICAtbW96LXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDsKICAgICAgIC1vLXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDsKICAgICAgICAgIHRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDsKfQoKLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBpbWcsCi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gYSA+IGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUsCi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LAouY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUgewogIGxlZnQ6IDA7Cn0KCi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LAouY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICB3aWR0aDogMTAwJTsKfQoKLmNhcm91c2VsLWlubmVyID4gLm5leHQgewogIGxlZnQ6IDEwMCU7Cn0KCi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHsKICBsZWZ0OiAtMTAwJTsKfQoKLmNhcm91c2VsLWlubmVyID4gLm5leHQubGVmdCwKLmNhcm91c2VsLWlubmVyID4gLnByZXYucmlnaHQgewogIGxlZnQ6IDA7Cn0KCi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUubGVmdCB7CiAgbGVmdDogLTEwMCU7Cn0KCi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUucmlnaHQgewogIGxlZnQ6IDEwMCU7Cn0KCi5jYXJvdXNlbC1jb250cm9sIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA0MCU7CiAgbGVmdDogMTVweDsKICB3aWR0aDogNDBweDsKICBoZWlnaHQ6IDQwcHg7CiAgbWFyZ2luLXRvcDogLTIwcHg7CiAgZm9udC1zaXplOiA2MHB4OwogIGZvbnQtd2VpZ2h0OiAxMDA7CiAgbGluZS1oZWlnaHQ6IDMwcHg7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGJhY2tncm91bmQ6ICMwODA4MDg7CiAgYm9yZGVyOiAzcHggc29saWQgI2ZmZmZmZjsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDIzcHg7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAyM3B4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMjNweDsKICBvcGFjaXR5OiAwLjU7CiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKTsKfQoKLmNhcm91c2VsLWNvbnRyb2wucmlnaHQgewogIHJpZ2h0OiAxNXB4OwogIGxlZnQ6IGF1dG87Cn0KCi5jYXJvdXNlbC1jb250cm9sOmhvdmVyLAouY2Fyb3VzZWwtY29udHJvbDpmb2N1cyB7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIG9wYWNpdHk6IDAuOTsKICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9OTApOwp9CgouY2Fyb3VzZWwtaW5kaWNhdG9ycyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTVweDsKICByaWdodDogMTVweDsKICB6LWluZGV4OiA1OwogIG1hcmdpbjogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9CgouY2Fyb3VzZWwtaW5kaWNhdG9ycyBsaSB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgd2lkdGg6IDEwcHg7CiAgaGVpZ2h0OiAxMHB4OwogIG1hcmdpbi1sZWZ0OiA1cHg7CiAgdGV4dC1pbmRlbnQ6IC05OTlweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgYm9yZGVyLXJhZGl1czogNXB4Owp9CgouY2Fyb3VzZWwtaW5kaWNhdG9ycyAuYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9CgouY2Fyb3VzZWwtY2FwdGlvbiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHBhZGRpbmc6IDE1cHg7CiAgYmFja2dyb3VuZDogIzk5OTk5OTsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNzUpOwp9CgouY2Fyb3VzZWwtY2FwdGlvbiBoNCwKLmNhcm91c2VsLWNhcHRpb24gcCB7CiAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgY29sb3I6ICNmZmZmZmY7Cn0KCi5jYXJvdXNlbC1jYXB0aW9uIGg0IHsKICBtYXJnaW46IDAgMCA1cHg7Cn0KCi5jYXJvdXNlbC1jYXB0aW9uIHAgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5oZXJvLXVuaXQgewogIHBhZGRpbmc6IDYwcHg7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IDIwMDsKICBsaW5lLWhlaWdodDogMzBweDsKICBjb2xvcjogaW5oZXJpdDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4Owp9CgouaGVyby11bml0IGgxIHsKICBtYXJnaW4tYm90dG9tOiAwOwogIGZvbnQtc2l6ZTogNjBweDsKICBsaW5lLWhlaWdodDogMTsKICBsZXR0ZXItc3BhY2luZzogLTFweDsKICBjb2xvcjogaW5oZXJpdDsKfQoKLmhlcm8tdW5pdCBsaSB7CiAgbGluZS1oZWlnaHQ6IDMwcHg7Cn0KCi5wdWxsLXJpZ2h0IHsKICBmbG9hdDogcmlnaHQ7Cn0KCi5wdWxsLWxlZnQgewogIGZsb2F0OiBsZWZ0Owp9CgouaGlkZSB7CiAgZGlzcGxheTogbm9uZTsKfQoKLnNob3cgewogIGRpc3BsYXk6IGJsb2NrOwp9CgouaW52aXNpYmxlIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5hZmZpeCB7CiAgcG9zaXRpb246IGZpeGVkOwp9Cgpib2R5IHsKICBmb250LXdlaWdodDogMzAwOwp9CgpoMSB7CiAgZm9udC1zaXplOiA1MHB4Owp9CgpoMiwKaDMgewogIGZvbnQtc2l6ZTogMjZweDsKfQoKaDQgewogIGZvbnQtc2l6ZTogMTRweDsKfQoKaDUsCmg2IHsKICBmb250LXNpemU6IDExcHg7Cn0KCmJsb2NrcXVvdGUgewogIHBhZGRpbmc6IDEwcHggMTVweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwogIGJvcmRlci1sZWZ0LWNvbG9yOiAjYmJiYmJiOwp9CgpibG9ja3F1b3RlLnB1bGwtcmlnaHQgewogIHBhZGRpbmc6IDEwcHggMTVweDsKICBib3JkZXItcmlnaHQtY29sb3I6ICNiYmJiYmI7Cn0KCmJsb2NrcXVvdGUgc21hbGwgewogIGNvbG9yOiAjYmJiYmJiOwp9CgoubXV0ZWQgewogIGNvbG9yOiAjYmJiYmJiOwp9CgoudGV4dC13YXJuaW5nIHsKICBjb2xvcjogI2ZmNzUxODsKfQoKYS50ZXh0LXdhcm5pbmc6aG92ZXIgewogIGNvbG9yOiAjZTQ1YzAwOwp9CgoudGV4dC1lcnJvciB7CiAgY29sb3I6ICNmZjAwMzk7Cn0KCmEudGV4dC1lcnJvcjpob3ZlciB7CiAgY29sb3I6ICNjYzAwMmU7Cn0KCi50ZXh0LWluZm8gewogIGNvbG9yOiAjOTk1NGJiOwp9CgphLnRleHQtaW5mbzpob3ZlciB7CiAgY29sb3I6ICM3ZTNmOWQ7Cn0KCi50ZXh0LXN1Y2Nlc3MgewogIGNvbG9yOiAjM2ZiNjE4Owp9CgphLnRleHQtc3VjY2Vzczpob3ZlciB7CiAgY29sb3I6ICMyZjg5MTI7Cn0KCi5uYXZiYXIgLm5hdmJhci1pbm5lciB7CiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm5hdmJhciAuYnJhbmQ6aG92ZXIgewogIGNvbG9yOiAjYmJiYmJiOwp9CgoubmF2YmFyIC5uYXYgPiAuYWN0aXZlID4gYSwKLm5hdmJhciAubmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIsCi5uYXZiYXIgLm5hdiA+IC5hY3RpdmUgPiBhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpOwogIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiBub25lOwp9CgoubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUsCi5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmUgPiAuZHJvcGRvd24tdG9nZ2xlLAoubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmUgPiAuZHJvcGRvd24tdG9nZ2xlIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLAoubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwKLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciB7CiAgY29sb3I6ICNlZWVlZWU7Cn0KCi5uYXZiYXIgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeSB7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLm5hdmJhci1pbnZlcnNlIC5icmFuZCwKLm5hdmJhci1pbnZlcnNlIC5uYXYgPiBsaSA+IGEgewogIHRleHQtc2hhZG93OiBub25lOwp9CgoubmF2YmFyLWludmVyc2UgLmJyYW5kOmhvdmVyLAoubmF2YmFyLWludmVyc2UgLm5hdiA+IC5hY3RpdmUgPiBhLAoubmF2YmFyLWludmVyc2UgLm5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLAoubmF2YmFyLWludmVyc2UgLm5hdiA+IC5hY3RpdmUgPiBhOmZvY3VzIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpOwogIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiBub25lOwp9CgoubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeSB7CiAgY29sb3I6ICMwODA4MDg7Cn0KCmRpdi5zdWJuYXYgewogIG1hcmdpbjogMCAxcHg7CiAgYmFja2dyb3VuZDogI2RmZGZkZiBub25lOwogIGJvcmRlcjogbm9uZTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKfQoKZGl2LnN1Ym5hdiAubmF2IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKZGl2LnN1Ym5hdiAubmF2ID4gbGkgPiBhIHsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Owp9CgpkaXYuc3VibmF2IC5uYXYgPiAuYWN0aXZlID4gYSwKZGl2LnN1Ym5hdiAubmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIgewogIGNvbG9yOiAjZmZmZmZmOwogIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKfQoKZGl2LnN1Ym5hdi1maXhlZCB7CiAgdG9wOiA1MXB4OwogIG1hcmdpbjogMDsKfQoKLm5hdiAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLAoubmF2ID4gbGkuZHJvcGRvd24ub3Blbi5hY3RpdmUgPiBhOmhvdmVyIHsKICBjb2xvcjogIzAwN2ZmZjsKfQoKLm5hdi10YWJzID4gbGkgPiBhIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLm5hdi10YWJzLm5hdi1zdGFja2VkID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3ZmZmOwp9CgoubmF2LXRhYnMubmF2LXN0YWNrZWQgPiAuYWN0aXZlID4gYSwKLm5hdi10YWJzLm5hdi1zdGFja2VkID4gLmFjdGl2ZSA+IGE6aG92ZXIgewogIGNvbG9yOiAjYmJiYmJiOwogIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cn0KCi5uYXYtdGFicy5uYXYtc3RhY2tlZCA+IGxpOmZpcnN0LWNoaWxkID4gYSwKLm5hdi10YWJzLm5hdi1zdGFja2VkID4gbGk6bGFzdC1jaGlsZCA+IGEgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoudGFicy1iZWxvdyA+IC5uYXYtdGFicyA+IGxpID4gYSwKLnRhYnMtbGVmdCA+IC5uYXYtdGFicyA+IGxpID4gYSwKLnRhYnMtcmlnaHQgPiAubmF2LXRhYnMgPiBsaSA+IGEgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoubmF2LXBpbGxzID4gbGkgPiBhIHsKICBjb2xvcjogIzAwMDAwMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZkZmRmOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoubmF2LXBpbGxzID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwp9CgoubmF2LXBpbGxzID4gLmRpc2FibGVkID4gYSwKLm5hdi1waWxscyA+IC5kaXNhYmxlZCA+IGE6aG92ZXIgewogIGNvbG9yOiAjOTk5OTk5OwogIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7Cn0KCi5uYXYtbGlzdCA+IGxpID4gYSB7CiAgY29sb3I6ICMwODA4MDg7Cn0KCi5uYXYtbGlzdCA+IGxpID4gYTpob3ZlciB7CiAgY29sb3I6ICNmZmZmZmY7CiAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2ZmZjsKfQoKLm5hdi1saXN0IC5uYXYtaGVhZGVyIHsKICBjb2xvcjogIzA4MDgwODsKfQoKLm5hdi1saXN0IC5kaXZpZGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJiYmJiOwogIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KCi5wYWdpbmF0aW9uIHVsIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLnBhZ2luYXRpb24gdWwgPiBsaSA+IGEsCi5wYWdpbmF0aW9uIHVsID4gbGkgPiBzcGFuIHsKICBtYXJnaW4tcmlnaHQ6IDZweDsKICBjb2xvcjogIzA4MDgwODsKfQoKLnBhZ2luYXRpb24gdWwgPiBsaSA+IGE6aG92ZXIsCi5wYWdpbmF0aW9uIHVsID4gbGkgPiBzcGFuOmhvdmVyIHsKICBjb2xvcjogI2ZmZmZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4Owp9CgoucGFnaW5hdGlvbiB1bCA+IGxpOmxhc3QtY2hpbGQgPiBhLAoucGFnaW5hdGlvbiB1bCA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHsKICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IGEsCi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IHNwYW4gewogIGNvbG9yOiAjZmZmZmZmOwp9CgoucGFnaW5hdGlvbiB1bCA+IC5kaXNhYmxlZCA+IHNwYW4sCi5wYWdpbmF0aW9uIHVsID4gLmRpc2FibGVkID4gYSwKLnBhZ2luYXRpb24gdWwgPiAuZGlzYWJsZWQgPiBhOmhvdmVyIHsKICBjb2xvcjogIzk5OTk5OTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwp9CgoucGFnZXIgbGkgPiBhLAoucGFnZXIgbGkgPiBzcGFuIHsKICBjb2xvcjogIzA4MDgwODsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZkZmRmOwogIGJvcmRlcjogbm9uZTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLnBhZ2VyIGxpID4gYTpob3ZlciwKLnBhZ2VyIGxpID4gc3Bhbjpob3ZlciB7CiAgY29sb3I6ICNmZmZmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwODsKfQoKLnBhZ2VyIC5kaXNhYmxlZCA+IGEsCi5wYWdlciAuZGlzYWJsZWQgPiBhOmhvdmVyLAoucGFnZXIgLmRpc2FibGVkID4gc3BhbiB7CiAgY29sb3I6ICM5OTk5OTk7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsKfQoKLmJyZWFkY3J1bWIgewogIGJhY2tncm91bmQtY29sb3I6ICNkZmRmZGY7Cn0KCi5icmVhZGNydW1iIGxpIHsKICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLmJyZWFkY3J1bWIgLmRpdmlkZXIsCi5icmVhZGNydW1iIC5hY3RpdmUgewogIGNvbG9yOiAjMDgwODA4OwogIHRleHQtc2hhZG93OiBub25lOwp9CgouYnRuIHsKICBwYWRkaW5nOiA1cHggMTJweDsKICB0ZXh0LXNoYWRvdzogbm9uZTsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogIGJvcmRlcjogbm9uZTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLmJ0bi5kaXNhYmxlZCB7CiAgYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwp9CgouYnRuLWxhcmdlIHsKICBwYWRkaW5nOiAyMnB4IDMwcHg7Cn0KCi5idG4tc21hbGwgewogIHBhZGRpbmc6IDJweCAxMHB4Owp9CgouYnRuLW1pbmkgewogIHBhZGRpbmc6IDJweCA2cHg7Cn0KCi5idG4tZ3JvdXAgPiAuYnRuOmZpcnN0LWNoaWxkLAouYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkLAouYnRuLWdyb3VwID4gLmRyb3Bkb3duLXRvZ2dsZSB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5idG4tZ3JvdXAgPiAuYnRuICsgLmRyb3Bkb3duLXRvZ2dsZSB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KCi50YWJsZSB0Ym9keSB0ci5zdWNjZXNzIHRkIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLnRhYmxlIHRib2R5IHRyLmVycm9yIHRkIHsKICBjb2xvcjogI2ZmZmZmZjsKfQoKLnRhYmxlIHRib2R5IHRyLmluZm8gdGQgewogIGNvbG9yOiAjZmZmZmZmOwp9CgoudGFibGUtYm9yZGVyZWQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoudGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsCi50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgpzZWxlY3QsCnRleHRhcmVhLAppbnB1dFt0eXBlPSJ0ZXh0Il0sCmlucHV0W3R5cGU9InBhc3N3b3JkIl0sCmlucHV0W3R5cGU9ImRhdGV0aW1lIl0sCmlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sCmlucHV0W3R5cGU9ImRhdGUiXSwKaW5wdXRbdHlwZT0ibW9udGgiXSwKaW5wdXRbdHlwZT0idGltZSJdLAppbnB1dFt0eXBlPSJ3ZWVrIl0sCmlucHV0W3R5cGU9Im51bWJlciJdLAppbnB1dFt0eXBlPSJlbWFpbCJdLAppbnB1dFt0eXBlPSJ1cmwiXSwKaW5wdXRbdHlwZT0ic2VhcmNoIl0sCmlucHV0W3R5cGU9InRlbCJdLAppbnB1dFt0eXBlPSJjb2xvciJdIHsKICBjb2xvcjogIzA4MDgwODsKfQoKLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY29udHJvbC1sYWJlbCwKLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1ibG9jaywKLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1pbmxpbmUgewogIGNvbG9yOiAjZmY3NTE4Owp9CgouY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0LAouY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwKLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYSB7CiAgY29sb3I6ICMwODA4MDg7CiAgYm9yZGVyLWNvbG9yOiAjZmY3NTE4Owp9CgouY29udHJvbC1ncm91cC5lcnJvciAuY29udHJvbC1sYWJlbCwKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtYmxvY2ssCi5jb250cm9sLWdyb3VwLmVycm9yIC5oZWxwLWlubGluZSB7CiAgY29sb3I6ICNmZjAwMzk7Cn0KCi5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LAouY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsCi5jb250cm9sLWdyb3VwLmVycm9yIHRleHRhcmVhIHsKICBjb2xvcjogIzA4MDgwODsKICBib3JkZXItY29sb3I6ICNmZjAwMzk7Cn0KCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmNvbnRyb2wtbGFiZWwsCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtYmxvY2ssCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtaW5saW5lIHsKICBjb2xvcjogIzNmYjYxODsKfQoKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3QsCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWEgewogIGNvbG9yOiAjMDgwODA4OwogIGJvcmRlci1jb2xvcjogIzNmYjYxODsKfQoKbGVnZW5kIHsKICBjb2xvcjogIzA4MDgwODsKICBib3JkZXItYm90dG9tOiBub25lOwp9CgouZm9ybS1hY3Rpb25zIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwogIGJvcmRlci10b3A6IG5vbmU7Cn0KCi5kcm9wZG93bi1tZW51IHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLmFsZXJ0IHsKICB0ZXh0LXNoYWRvdzogbm9uZTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLmFsZXJ0LWhlYWRpbmcsCi5hbGVydCBoMSwKLmFsZXJ0IGgyLAouYWxlcnQgaDMsCi5hbGVydCBoNCwKLmFsZXJ0IGg1LAouYWxlcnQgaDYgewogIGNvbG9yOiAjZmZmZmZmOwp9CgoubGFiZWwgewogIG1pbi13aWR0aDogODBweDsKICBtaW4taGVpZ2h0OiA4MHB4OwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5sYWJlbC1zdWNjZXNzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2ZiNjE4Owp9CgoubGFiZWwtaW1wb3J0YW50IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYwMDM5Owp9CgoubGFiZWwtaW5mbyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk5NTRiYjsKfQoKLmxhYmVsLWludmVyc2UgewogIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7Cn0KCi5iYWRnZSB7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICB0ZXh0LXNoYWRvdzogbm9uZTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLmJhZGdlLXN1Y2Nlc3MgewogIGJhY2tncm91bmQtY29sb3I6ICMzZmI2MTg7Cn0KCi5iYWRnZS1pbXBvcnRhbnQgewogIGJhY2tncm91bmQtY29sb3I6ICNmZjAwMzk7Cn0KCi5iYWRnZS1pbmZvIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk1NGJiOwp9CgouYmFkZ2UtaW52ZXJzZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKfQoKLmhlcm8tdW5pdCB7CiAgYm9yZGVyOiBub25lOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiBub25lOwp9Cgoud2VsbCB7CiAgYm9yZGVyOiBub25lOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiBub25lOwp9CgpbY2xhc3NePSJpY29uLSJdLApbY2xhc3MqPSIgaWNvbi0iXSB7CiAgbWFyZ2luOiAwIDJweDsKICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsKfQoKYS50aHVtYm5haWwgewogIGJhY2tncm91bmQtY29sb3I6ICNkZmRmZGY7Cn0KCmEudGh1bWJuYWlsOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJiYmJiOwogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KCi5wcm9ncmVzcyB7CiAgaGVpZ2h0OiA2cHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiBub25lOwp9CgoucHJvZ3Jlc3MgLmJhciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2ZmZjsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwp9CgoucHJvZ3Jlc3MtaW5mbyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk5NTRiYjsKfQoKLnByb2dyZXNzLXN1Y2Nlc3MgewogIGJhY2tncm91bmQtY29sb3I6ICMzZmI2MTg7Cn0KCi5wcm9ncmVzcy13YXJuaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3NTE4Owp9CgoucHJvZ3Jlc3MtZGFuZ2VyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYwMDM5Owp9CgoubW9kYWwgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoubW9kYWwtaGVhZGVyIHsKICBib3JkZXItYm90dG9tOiBub25lOwp9CgoubW9kYWwtZm9vdGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItdG9wOiBub25lOwp9CgoucG9wb3ZlciB7CiAgY29sb3I6ICNmZmZmZmY7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KCi5wb3BvdmVyLXRpdGxlIHsKICBjb2xvcjogI2ZmZmZmZjsKICBib3JkZXItYm90dG9tOiBub25lOwp9CgoucHVsbC1yaWdodCB7CiAgZmxvYXQ6IHJpZ2h0Owp9CgoucHVsbC1sZWZ0IHsKICBmbG9hdDogbGVmdDsKfQoKLmhpZGUgewogIGRpc3BsYXk6IG5vbmU7Cn0KCi5zaG93IHsKICBkaXNwbGF5OiBibG9jazsKfQoKLmludmlzaWJsZSB7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwp9CgouYWZmaXggewogIHBvc2l0aW9uOiBmaXhlZDsKfQoKLyogc2V0IGJhY2tncm91bmQgY29sb3IgdG8gYmxhY2sgd2hlbiB1c2VkIGFzIHdpZGdldCAqLwpib2R5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwp9Cg=="></link>
<link rel=stylesheet href="data:text/css;base64,Ci8qKioqKioqKioqKioqKioqKioqKgogKiBIVE1MIENTUwogKi8KCgouY2hhcnRXcmFwIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgoKLyoqKioqKioqKioqKioqKioqKioqCiAqIFRPT0xUSVAgQ1NTCiAqLwoKLm52dG9vbHRpcCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMSk7CiAgcGFkZGluZzogMXB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjIpOwogIHotaW5kZXg6IDEwMDAwOwoKICBmb250LWZhbWlseTogQXJpYWw7CiAgZm9udC1zaXplOiAxM3B4OwoKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwMG1zIGxpbmVhcjsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSA1MDBtcyBsaW5lYXI7CgogIHRyYW5zaXRpb24tZGVsYXk6IDUwMG1zOwogIC1tb3otdHJhbnNpdGlvbi1kZWxheTogNTAwbXM7CiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiA1MDBtczsKCiAgLW1vei1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwoKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICBib3JkZXItcmFkaXVzOiA2cHg7CgogIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5udnRvb2x0aXAueC1udnRvb2x0aXAsCi5udnRvb2x0aXAueS1udnRvb2x0aXAgewogIHBhZGRpbmc6IDhweDsKfQoKLm52dG9vbHRpcCBoMyB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDRweCAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CgogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWJlYmViOwoKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweCA1cHggMCAwOwogIC1tb3otYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7CiAgYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7Cn0KCi5udnRvb2x0aXAgcCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDVweCAxNHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm52dG9vbHRpcCBzcGFuIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luOiAycHggMDsKfQoKLm52dG9vbHRpcC1wZW5kaW5nLXJlbW92YWwgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKCi8qKioqKioqKioqKioqKioqKioqKgogKiBTVkcgQ1NTCiAqLwoKCnN2ZyB7CiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwogIC8qIFRyeWluZyB0byBnZXQgU1ZHIHRvIGFjdCBsaWtlIGEgZ3JlZWR5IGJsb2NrIGluIGFsbCBicm93c2VycyAqLwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOjEwMCU7CiAgaGVpZ2h0OjEwMCU7Cn0KCgpzdmcgdGV4dCB7CiAgZm9udDogbm9ybWFsIDEycHggQXJpYWw7Cn0KCnN2ZyAudGl0bGUgewogZm9udDogYm9sZCAxNHB4IEFyaWFsOwp9CgoubnZkMyAubnYtYmFja2dyb3VuZCB7CiAgZmlsbDogd2hpdGU7CiAgZmlsbC1vcGFjaXR5OiAwOwogIC8qCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgKi8KfQoKLm52ZDMubnYtbm9EYXRhIHsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCgovKioqKioqKioqKgoqICBCcnVzaAoqLwoKLm52LWJydXNoIC5leHRlbnQgewogIGZpbGwtb3BhY2l0eTogLjEyNTsKICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cn0KCgoKLyoqKioqKioqKioKKiAgTGVnZW5kCiovCgoubnZkMyAubnYtbGVnZW5kIC5udi1zZXJpZXMgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLm52ZDMgLm52LWxlZ2VuZCAuZGlzYWJsZWQgY2lyY2xlIHsKICBmaWxsLW9wYWNpdHk6IDA7Cn0KCgoKLyoqKioqKioqKioKKiAgQXhlcwoqLwoKLm52ZDMgLm52LWF4aXMgcGF0aCB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6ICMwMDA7CiAgc3Ryb2tlLW9wYWNpdHk6IC43NTsKICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cn0KCi5udmQzIC5udi1heGlzIHBhdGguZG9tYWluIHsKICBzdHJva2Utb3BhY2l0eTogLjc1Owp9CgoubnZkMyAubnYtYXhpcy5udi14IHBhdGguZG9tYWluIHsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLm52ZDMgLm52LWF4aXMgbGluZSB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6ICMwMDA7CiAgc3Ryb2tlLW9wYWNpdHk6IC4yNTsKICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cn0KCi5udmQzIC5udi1heGlzIGxpbmUuemVybyB7CiAgc3Ryb2tlLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMgLm52LWF4aXMgLm52LWF4aXNNYXhNaW4gdGV4dCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5udmQzIC54ICAubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0LAoubnZkMyAueDIgLm52LWF4aXMgLm52LWF4aXNNYXhNaW4gdGV4dCwKLm52ZDMgLngzIC5udi1heGlzIC5udi1heGlzTWF4TWluIHRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGUKfQoKCgovKioqKioqKioqKgoqICBCcnVzaAoqLwoKLm52LWJydXNoIC5yZXNpemUgcGF0aCB7CiAgZmlsbDogI2VlZTsKICBzdHJva2U6ICM2NjY7Cn0KCgoKLyoqKioqKioqKioKKiAgQmFycwoqLwoKLm52ZDMgLm52LWJhcnMgLm5lZ2F0aXZlIHJlY3QgewogICAgemZpbGw6IGJyb3duOwp9CgoubnZkMyAubnYtYmFycyByZWN0IHsKICB6ZmlsbDogc3RlZWxibHVlOwogIGZpbGwtb3BhY2l0eTogLjc1OwoKICB0cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7Cn0KCi5udmQzIC5udi1iYXJzIHJlY3Q6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHJlY3QgewogIGZpbGw6IGxpZ2h0Ymx1ZTsKfQoKLm52ZDMgLm52LWJhcnMgdGV4dCB7CiAgZmlsbDogcmdiYSgwLDAsMCwwKTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHRleHQgewogIGZpbGw6IHJnYmEoMCwwLDAsMSk7Cn0KCgovKioqKioqKioqKgoqICBCYXJzCiovCgoubnZkMyAubnYtbXVsdGliYXIgLm52LWdyb3VwcyByZWN0LAoubnZkMyAubnYtbXVsdGliYXJIb3Jpem9udGFsIC5udi1ncm91cHMgcmVjdCwKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgcmVjdCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CgogIHRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKfQoKLm52ZDMgLm52LW11bHRpYmFyIC5udi1ncm91cHMgcmVjdDpob3ZlciwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIsCi5udmQzIC5udi1kaXNjcmV0ZWJhciAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgdGV4dCwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHRleHQgewogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZpbGw6IHJnYmEoMCwwLDAsMSk7CiAgc3Ryb2tlOiByZ2JhKDAsMCwwLDApOwp9CgovKioqKioqKioqKioKKiAgUGllIENoYXJ0CiovCgoubnZkMy5udi1waWUgcGF0aCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CgogIHRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXIsIHN0cm9rZS13aWR0aCAyNTBtcyBsaW5lYXIsIHN0cm9rZS1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKICAtbW96LXRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXIsIHN0cm9rZS13aWR0aCAyNTBtcyBsaW5lYXIsIHN0cm9rZS1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXIsIHN0cm9rZS13aWR0aCAyNTBtcyBsaW5lYXIsIHN0cm9rZS1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKCn0KCi5udmQzLm52LXBpZSAubnYtc2xpY2UgdGV4dCB7CiAgc3Ryb2tlOiAjMDAwOwogIHN0cm9rZS13aWR0aDogMDsKfQoKLm52ZDMubnYtcGllIHBhdGggewogIHN0cm9rZTogI2ZmZjsKICBzdHJva2Utd2lkdGg6IDFweDsKICBzdHJva2Utb3BhY2l0eTogMTsKfQoKLm52ZDMubnYtcGllIC5ob3ZlciBwYXRoIHsKICBmaWxsLW9wYWNpdHk6IC43OwovKgogIHN0cm9rZS13aWR0aDogNnB4OwogIHN0cm9rZS1vcGFjaXR5OiAxOwoqLwp9CgoubnZkMy5udi1waWUgLm52LWxhYmVsIHJlY3QgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLyoqKioqKioqKioKKiBMaW5lcwoqLwoKLm52ZDMgLm52LWdyb3VwcyBwYXRoLm52LWxpbmUgewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAyLjVweDsKICAvKgogIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICBzaGFwZS1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKCiAgdHJhbnNpdGlvbjogc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhcjsKICAtbW96LXRyYW5zaXRpb246IHN0cm9rZS13aWR0aCAyNTBtcyBsaW5lYXI7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyOwoKICB0cmFuc2l0aW9uLWRlbGF5OiAyNTBtcwogIC1tb3otdHJhbnNpdGlvbi1kZWxheTogMjUwbXM7CiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiAyNTBtczsKICAqLwp9CgoubnZkMyAubnYtZ3JvdXBzIHBhdGgubnYtYXJlYSB7CiAgc3Ryb2tlOiBub25lOwogIC8qCiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogIHNoYXBlLXJlbmRlcmluZzogZ2VvbWV0cmljUHJlY2lzaW9uOwoKICBzdHJva2Utd2lkdGg6IDIuNXB4OwogIHRyYW5zaXRpb246IHN0cm9rZS13aWR0aCAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhcjsKCiAgdHJhbnNpdGlvbi1kZWxheTogMjUwbXMKICAtbW96LXRyYW5zaXRpb24tZGVsYXk6IDI1MG1zOwogIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMjUwbXM7CiAgKi8KfQoKLm52ZDMgLm52LWxpbmUuaG92ZXIgcGF0aCB7CiAgc3Ryb2tlLXdpZHRoOiA2cHg7Cn0KCi8qCi5udmQzLnNjYXR0ZXIgLmdyb3VwcyAucG9pbnQgewogIGZpbGwtb3BhY2l0eTogMC4xOwogIHN0cm9rZS1vcGFjaXR5OiAwLjE7Cn0KICAqLwoKLm52ZDMubnYtbGluZSAubnZkMy5udi1zY2F0dGVyIC5udi1ncm91cHMgLm52LXBvaW50IHsKICBmaWxsLW9wYWNpdHk6IDA7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7Cn0KCi5udmQzLm52LXNjYXR0ZXIubnYtc2luZ2xlLXBvaW50IC5udi1ncm91cHMgLm52LXBvaW50IHsKICBmaWxsLW9wYWNpdHk6IC41ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLW9wYWNpdHk6IC41ICFpbXBvcnRhbnQ7Cn0KCgoubnZkMyAubnYtZ3JvdXBzIC5udi1wb2ludCB7CiAgdHJhbnNpdGlvbjogc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwp9CgoubnZkMy5udi1zY2F0dGVyIC5udi1ncm91cHMgLm52LXBvaW50LmhvdmVyLAoubnZkMyAubnYtZ3JvdXBzIC5udi1wb2ludC5ob3ZlciB7CiAgc3Ryb2tlLXdpZHRoOiAyMHB4OwogIGZpbGwtb3BhY2l0eTogLjUgIWltcG9ydGFudDsKICBzdHJva2Utb3BhY2l0eTogLjUgIWltcG9ydGFudDsKfQoKCi5udmQzIC5udi1wb2ludC1wYXRocyBwYXRoIHsKICBzdHJva2U6ICNhYWE7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgZmlsbDogI2VlZTsKICBmaWxsLW9wYWNpdHk6IDA7Cn0KCgoKLm52ZDMgLm52LWluZGV4TGluZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCgovKioqKioqKioqKgoqIERpc3RyaWJ1dGlvbgoqLwoKLm52ZDMgLm52LWRpc3RyaWJ1dGlvbiB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCgoKLyoqKioqKioqKioKKiAgU2NhdHRlcgoqLwoKLyogKipBdHRlbXB0aW5nIHRvIHJlbW92ZSB0aGlzIGZvciB1c2VWb3Jvbm9pKGZhbHNlKSwgbmVlZCB0byBzZWUgaWYgaXQncyByZXF1aXJlZCBhbnl3aGVyZQoubnZkMyAubnYtZ3JvdXBzIC5udi1wb2ludCB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KKi8KCi5udmQzIC5udi1ncm91cHMgLm52LXBvaW50LmhvdmVyIHsKICBzdHJva2Utd2lkdGg6IDIwcHg7CiAgc3Ryb2tlLW9wYWNpdHk6IC41Owp9CgoubnZkMyAubnYtc2NhdHRlciAubnYtcG9pbnQuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLyoKLm52LWdyb3VwLmhvdmVyIC5udi1wb2ludCB7CiAgZmlsbC1vcGFjaXR5OiAxOwp9CiovCgoKLyoqKioqKioqKioKKiAgU3RhY2tlZCBBcmVhCiovCgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEgewogIGZpbGwtb3BhY2l0eTogLjc7CiAgLyoKICBzdHJva2Utb3BhY2l0eTogLjY1OwogIGZpbGwtb3BhY2l0eTogMTsKICAqLwogIHN0cm9rZS1vcGFjaXR5OiAwOwoKICB0cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CgogIC8qCiAgdHJhbnNpdGlvbi1kZWxheTogNTAwbXM7CiAgLW1vei10cmFuc2l0aW9uLWRlbGF5OiA1MDBtczsKICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IDUwMG1zOwogICovCgp9CgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjk7CiAgLyoKICBzdHJva2Utb3BhY2l0eTogLjg1OwogICovCn0KLyoKLmQzc3RhY2tlZGFyZWEgLmdyb3VwcyBwYXRoIHsKICBzdHJva2Utb3BhY2l0eTogMDsKfQogICovCgoKCi5udmQzLm52LXN0YWNrZWRhcmVhIC5udi1ncm91cHMgLm52LXBvaW50IHsKICBzdHJva2Utb3BhY2l0eTogMDsKICBmaWxsLW9wYWNpdHk6IDA7Cn0KCi5udmQzLm52LXN0YWNrZWRhcmVhIC5udi1ncm91cHMgLm52LXBvaW50LmhvdmVyIHsKICBzdHJva2Utd2lkdGg6IDIwcHg7CiAgc3Ryb2tlLW9wYWNpdHk6IC43NTsKICBmaWxsLW9wYWNpdHk6IDE7Cn0KCgoKLyoqKioqKioqKioKKiAgTGluZSBQbHVzIEJhcgoqLwoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0IHsKICBmaWxsLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0OmhvdmVyIHsKICBmaWxsLW9wYWNpdHk6IDE7Cn0KCgovKioqKioqKioqKgoqICBCdWxsZXQKKi8KCi5udmQzLm52LWJ1bGxldCB7IGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsgfQoubnZkMy5udi1idWxsZXQgLm52LW1lYXN1cmUgeyBmaWxsLW9wYWNpdHk6IC44OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtbWVhc3VyZTpob3ZlciB7IGZpbGwtb3BhY2l0eTogMTsgfQoubnZkMy5udi1idWxsZXQgLm52LW1hcmtlciB7IHN0cm9rZTogIzAwMDsgc3Ryb2tlLXdpZHRoOiAycHg7IH0KLm52ZDMubnYtYnVsbGV0IC5udi1tYXJrZXJUcmlhbmdsZSB7IHN0cm9rZTogIzAwMDsgZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAxLjVweDsgfQoubnZkMy5udi1idWxsZXQgLm52LXRpY2sgbGluZSB7IHN0cm9rZTogIzY2Njsgc3Ryb2tlLXdpZHRoOiAuNXB4OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczAgeyBmaWxsOiAjZWVlOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczEgeyBmaWxsOiAjZGRkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczIgeyBmaWxsOiAjY2NjOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtdGl0bGUgeyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtc3VidGl0bGUgeyBmaWxsOiAjOTk5OyB9CgoKLm52ZDMubnYtYnVsbGV0IC5udi1yYW5nZSB7CiAgZmlsbDogIzk5OTsKICBmaWxsLW9wYWNpdHk6IC40Owp9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2U6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjc7Cn0KCgoKLyoqKioqKioqKioKKiBTcGFya2xpbmUKKi8KCi5udmQzLm52LXNwYXJrbGluZSBwYXRoIHsKICBmaWxsOiBub25lOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIGcubnYtaG92ZXJWYWx1ZSB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LWhvdmVyVmFsdWUgbGluZSB7CiAgc3Ryb2tlOiAjMzMzOwogIHN0cm9rZS13aWR0aDogMS41cHg7CiB9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzLAoubnZkMy5udi1zcGFya2xpbmVwbHVzIGcgewogIHBvaW50ZXItZXZlbnRzOiBhbGw7Cn0KCi5udmQzIC5udi1ob3ZlckFyZWEgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYteFZhbHVlLAoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi15VmFsdWUgewogIC8qCiAgc3Ryb2tlOiAjNjY2OwogICovCiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZvbnQtc2l6ZTogLjllbTsKICBmb250LXdlaWdodDogbm9ybWFsOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi15VmFsdWUgewogIHN0cm9rZTogI2Y2NjsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYtbWF4VmFsdWUgewogIHN0cm9rZTogIzJjYTAyYzsKICBmaWxsOiAjMmNhMDJjOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi1taW5WYWx1ZSB7CiAgc3Ryb2tlOiAjZDYyNzI4OwogIGZpbGw6ICNkNjI3Mjg7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LWN1cnJlbnRWYWx1ZSB7CiAgLyoKICBzdHJva2U6ICM0NDQ7CiAgZmlsbDogIzAwMDsKICAqLwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMS4xZW07Cn0KCi8qKioqKioqKioqCiogaGlzdG9yaWNhbCBzdG9jawoqLwoKLm52ZDMubnYtb2hsY0JhciAubnYtdGlja3MgLm52LXRpY2sgewogIHN0cm9rZS13aWR0aDogMnB4Owp9CgoubnZkMy5udi1vaGxjQmFyIC5udi10aWNrcyAubnYtdGljay5ob3ZlciB7CiAgc3Ryb2tlLXdpZHRoOiA0cHg7Cn0KCi5udmQzLm52LW9obGNCYXIgLm52LXRpY2tzIC5udi10aWNrLnBvc2l0aXZlIHsKIHN0cm9rZTogIzJjYTAyYzsKfQoKLm52ZDMubnYtb2hsY0JhciAubnYtdGlja3MgLm52LXRpY2submVnYXRpdmUgewogc3Ryb2tlOiAjZDYyNzI4Owp9CgoubnZkMy5udi1oaXN0b3JpY2FsU3RvY2tDaGFydCAubnYtYXhpcyAubnYtYXhpc2xhYmVsIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm52ZDMubnYtaGlzdG9yaWNhbFN0b2NrQ2hhcnQgLm52LWRyYWdUYXJnZXQgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2U6IG5vbmU7CiAgY3Vyc29yOiBtb3ZlOwp9CgoubnZkMyAubnYtYnJ1c2ggLmV4dGVudCB7CiAgLyoKICBjdXJzb3I6IGV3LXJlc2l6ZSAhaW1wb3J0YW50OwogICovCiAgZmlsbC1vcGFjaXR5OiAwICFpbXBvcnRhbnQ7Cn0KCi5udmQzIC5udi1icnVzaEJhY2tncm91bmQgcmVjdCB7CiAgc3Ryb2tlOiAjMDAwOwogIHN0cm9rZS13aWR0aDogLjQ7CiAgZmlsbDogI2ZmZjsKICBmaWxsLW9wYWNpdHk6IC43Owp9CgoKCi8qKioqKioqKioqCiogSW5kZW50ZWQgVHJlZQoqLwoKCi8qKgogKiBUT0RPOiB0aGUgZm9sbG93aW5nIDMgc2VsZWN0b3JzIGFyZSBiYXNlZCBvbiBjbGFzc2VzIHVzZWQgaW4gdGhlIGV4YW1wbGUuICBJIHNob3VsZCBlaXRoZXIgbWFrZSB0aGVtIHN0YW5kYXJkIGFuZCBsZWF2ZSB0aGVtIGhlcmUsIG9yIG1vdmUgdG8gYSBDU1MgZmlsZSBub3QgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKICovCi5udmQzLm52LWluZGVudGVkdHJlZSAubmFtZSB7CiAgbWFyZ2luLWxlZnQ6IDVweDsKfQoKLm52ZDMubnYtaW5kZW50ZWR0cmVlIC5jbGlja2FibGUgewogIGNvbG9yOiAjMDhDOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLm52ZDMubnYtaW5kZW50ZWR0cmVlIHNwYW4uY2xpY2thYmxlOmhvdmVyIHsKICBjb2xvcjogIzAwNTU4MDsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKCi5udmQzLm52LWluZGVudGVkdHJlZSAubnYtY2hpbGRyZW5Db3VudCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1sZWZ0OiA1cHg7Cn0KCi5udmQzLm52LWluZGVudGVkdHJlZSAubnYtdHJlZWljb24gewogIGN1cnNvcjogcG9pbnRlcjsKICAvKgogIGN1cnNvcjogbi1yZXNpemU7CiAgKi8KfQoKLm52ZDMubnYtaW5kZW50ZWR0cmVlIC5udi10cmVlaWNvbi5udi1mb2xkZWQgewogIGN1cnNvcjogcG9pbnRlcjsKICAvKgogIGN1cnNvcjogcy1yZXNpemU7CiAgKi8KfQoKCg=="></link>
<link rel=stylesheet href="data:text/css;base64,Lm52ZDMgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKICAgIHdpZHRoOiA4MDBweDsKICAgIGhlaWdodDogNDAwcHg7CiAgICAvKiBiYWNrZ3JvdW5kOiAjZWVlOyAqLwp9ICAK"></link>
<link rel=stylesheet href="data:text/css;base64,LypHaXRodWIgUmliYm9uIFRlc3QqLwovKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY2ljY2FsZS9jc3MzLWdpdGh1Yi1yaWJib24gKi8KLyogRGVmaW5lIGNsYXNzZXMgZm9yIGV4YW1wbGUsIGRlZmluaXRpb24sIHByb2JsZW0gZXRjLiAqLwovKiBDaG9vc2UgbWVhbmluZ2Z1bCBjb2xvcnMgZm9yIGJhY2tncm91bmQgYW5kIHRleHQgKi8KCi5leGFtcGxlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxNjIxOwogIHRvcDogMS4yZW07CiAgcmlnaHQ6IC0zLjJlbTsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggIzFkMjEyZSBpbnNldCwwIDAgMnB4IDFweCAjZmZmIGluc2V0LDAgMCAxZW0gIzg4ODsKICAtbW96LWJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGNvbG9yOiAjRkYwOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IC42ZW0gMy41ZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIGZvbnQ6IGJvbGQgLjgyZW0gc2Fucy1zZXJpZjsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIHRleHQtc2hhZG93OiAxcHggLTFweCA4cHggcmdiYSgwLDAsMCwwLjYwKTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5kZWZpbml0aW9uIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTAwOwogIHRvcDogMS4yZW07CiAgcmlnaHQ6IC0zLjJlbTsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggIzFkMjEyZSBpbnNldCwwIDAgMnB4IDFweCAjZmZmIGluc2V0LDAgMCAxZW0gIzg4ODsKICAtbW96LWJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGNvbG9yOiAjRkZGOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IC42ZW0gMy41ZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIGZvbnQ6IGJvbGQgLjgyZW0gc2Fucy1zZXJpZjsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIHRleHQtc2hhZG93OiAxcHggLTFweCA4cHggcmdiYSgwLDAsMCwwLjYwKTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0="></link>
<link rel=stylesheet href="data:text/css;base64,QGNoYXJzZXQgIlVURi04IjsKCi8qIGxpbmUgMTcsIC4uLy4uLy4uLy4uLy4uLy4uL0xpYnJhcnkvUnVieS9HZW1zLzEuOC9nZW1zL2NvbXBhc3MtMC4xMi4xL2ZyYW1ld29ya3MvY29tcGFzcy9zdHlsZXNoZWV0cy9jb21wYXNzL3Jlc2V0L191dGlsaXRpZXMuc2NzcyAqLwpodG1sLCBib2R5LCBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSwKYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLApkZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsCnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsCmIsIHUsIGksIGNlbnRlciwKZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSwKZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsCnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLAphcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCwKZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLAptZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSwKdGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBib3JkZXI6IDA7CiAgZm9udC1zaXplOiAxMDAlOwogIGZvbnQ6IGluaGVyaXQ7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwp9CgovKiBsaW5lIDIwLCAuLi8uLi8uLi8uLi8uLi8uLi9MaWJyYXJ5L1J1YnkvR2Vtcy8xLjgvZ2Vtcy9jb21wYXNzLTAuMTIuMS9mcmFtZXdvcmtzL2NvbXBhc3Mvc3R5bGVzaGVldHMvY29tcGFzcy9yZXNldC9fdXRpbGl0aWVzLnNjc3MgKi8KYm9keSB7CiAgbGluZS1oZWlnaHQ6IDE7Cn0KCi8qIGxpbmUgMjIsIC4uLy4uLy4uLy4uLy4uLy4uL0xpYnJhcnkvUnVieS9HZW1zLzEuOC9nZW1zL2NvbXBhc3MtMC4xMi4xL2ZyYW1ld29ya3MvY29tcGFzcy9zdHlsZXNoZWV0cy9jb21wYXNzL3Jlc2V0L191dGlsaXRpZXMuc2NzcyAqLwoKb2wsIHVsIHsKICBsaXN0LXN0eWxlOiBub25lOwp9CgoKLyogbGluZSAyNCwgLi4vLi4vLi4vLi4vLi4vLi4vTGlicmFyeS9SdWJ5L0dlbXMvMS44L2dlbXMvY29tcGFzcy0wLjEyLjEvZnJhbWV3b3Jrcy9jb21wYXNzL3N0eWxlc2hlZXRzL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzICovCnRhYmxlIHsKICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogIGJvcmRlci1zcGFjaW5nOiAwOwp9CgovKiBsaW5lIDI2LCAuLi8uLi8uLi8uLi8uLi8uLi9MaWJyYXJ5L1J1YnkvR2Vtcy8xLjgvZ2Vtcy9jb21wYXNzLTAuMTIuMS9mcmFtZXdvcmtzL2NvbXBhc3Mvc3R5bGVzaGVldHMvY29tcGFzcy9yZXNldC9fdXRpbGl0aWVzLnNjc3MgKi8KY2FwdGlvbiwgdGgsIHRkIHsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLyogbGluZSAyOCwgLi4vLi4vLi4vLi4vLi4vLi4vTGlicmFyeS9SdWJ5L0dlbXMvMS44L2dlbXMvY29tcGFzcy0wLjEyLjEvZnJhbWV3b3Jrcy9jb21wYXNzL3N0eWxlc2hlZXRzL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzICovCnEsIGJsb2NrcXVvdGUgewogIHF1b3Rlczogbm9uZTsKfQovKiBsaW5lIDEwMSwgLi4vLi4vLi4vLi4vLi4vLi4vTGlicmFyeS9SdWJ5L0dlbXMvMS44L2dlbXMvY29tcGFzcy0wLjEyLjEvZnJhbWV3b3Jrcy9jb21wYXNzL3N0eWxlc2hlZXRzL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzICovCnE6YmVmb3JlLCBxOmFmdGVyLCBibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlciB7CiAgY29udGVudDogIiI7CiAgY29udGVudDogbm9uZTsKfQoKLyogbGluZSAzMCwgLi4vLi4vLi4vLi4vLi4vLi4vTGlicmFyeS9SdWJ5L0dlbXMvMS44L2dlbXMvY29tcGFzcy0wLjEyLjEvZnJhbWV3b3Jrcy9jb21wYXNzL3N0eWxlc2hlZXRzL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzICovCmEgaW1nIHsKICBib3JkZXI6IG5vbmU7Cn0KCi8qIGxpbmUgMTE0LCAuLi8uLi8uLi8uLi8uLi8uLi9MaWJyYXJ5L1J1YnkvR2Vtcy8xLjgvZ2Vtcy9jb21wYXNzLTAuMTIuMS9mcmFtZXdvcmtzL2NvbXBhc3Mvc3R5bGVzaGVldHMvY29tcGFzcy9yZXNldC9fdXRpbGl0aWVzLnNjc3MgKi8KYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5IHsKICBkaXNwbGF5OiBibG9jazsKfQoKLyoqCiAqIEJhc2UgU2xpZGVEZWNrIFN0eWxlcwogKi8KLyogbGluZSA0OCwgLi4vc2Nzcy9fYmFzZS5zY3NzICovCmh0bWwgewogIGhlaWdodDogMTAwJTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBsaW5lIDUzLCAuLi9zY3NzL19iYXNlLnNjc3MgKi8KYm9keSB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgb3BhY2l0eTogMDsKICBoZWlnaHQ6IDEwMCU7CiAgbWluLWhlaWdodDogNzQwcHg7CiAgd2lkdGg6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBjb2xvcjogI2ZmZjsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSA4MDBtcyBlYXNlLWluIDEwMG1zOwogIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDgwMG1zIGVhc2UtaW4gMTAwbXM7Cn0KLyogbGluZSA2OSwgLi4vc2Nzcy9fYmFzZS5zY3NzICovCmJvZHkubG9hZGVkIHsKICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7Cn0KCi8qIGxpbmUgNzQsIC4uL3Njc3MvX2Jhc2Uuc2NzcyAqLwppbnB1dCwgYnV0dG9uIHsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgovKiBsaW5lIDc4LCAuLi9zY3NzL19iYXNlLnNjc3MgKi8Kc2xpZGVzID4gc2xpZGVbaGlkZGVuXSB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBsaW5lIDgyLCAuLi9zY3NzL19iYXNlLnNjc3MgKi8Kc2xpZGVzIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IDA7CiAgdG9wOiAwOwogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogIC13ZWJraXQtcGVyc3BlY3RpdmU6IDEwMDA7CiAgcGVyc3BlY3RpdmU6IDEwMDA7CiAgLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkOwogIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDgwMG1zIGVhc2UtaW4gMTAwbXM7CiAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDgwMG1zIGVhc2UtaW4gMTAwbXM7CiAgLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDgwMG1zIGVhc2UtaW4gMTAwbXM7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSA4MDBtcyBlYXNlLWluIDEwMG1zOwp9CgovKiBsaW5lIDk0LCAuLi9zY3NzL19iYXNlLnNjc3MgKi8Kc2xpZGVzID4gc2xpZGUgewogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBvdmVyZmxvdzogaGlkZGVuOwogIGxlZnQ6IDUwJTsKICB0b3A6IDUwJTsKICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi8qIFNsaWRlIHN0eWxlcyAqLwovKmFydGljbGUuZmlsbCBpZnJhbWUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAwOwogIHRvcDogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CgogIGJvcmRlcjogMDsKICBtYXJnaW46IDA7CgogIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMTBweCk7CgogIHotaW5kZXg6IC0xOwp9CgpzbGlkZS5maWxsIHsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIEBpbmNsdWRlIGJhY2tncm91bmQtc2l6ZShjb3Zlcik7Cn0KCnNsaWRlLmZpbGwgaW1nIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogMDsKICB0b3A6IDA7CiAgbWluLXdpZHRoOiAxMDAlOwogIG1pbi1oZWlnaHQ6IDEwMCU7CgogIHotaW5kZXg6IC0xOwp9CiovCi8qKgogKiBUaGVtZSBTdHlsZXMKICovCi8qIGxpbmUgNTgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCjo6c2VsZWN0aW9uIHsKICBjb2xvcjogd2hpdGU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDE0ZDsKICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLyogbGluZSA2NCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KOjotd2Via2l0LXNjcm9sbGJhciB7CiAgaGVpZ2h0OiAxNnB4OwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHdpZHRoOiAxNnB4Owp9CgovKiBsaW5lIDY5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogIG1pbi1oZWlnaHQ6IDI4cHg7CiAgcGFkZGluZzogMTAwcHggMCAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKSwgaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA3KTsKICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMSksIGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4wNyk7CiAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKSwgaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA3KTsKICBib3JkZXItd2lkdGg6IDFweCAxcHggMXB4IDZweDsKfQoKLyogbGluZSA3OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpOwp9CgovKiBsaW5lIDgxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwo6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7CiAgaGVpZ2h0OiAwOwogIHdpZHRoOiAwOwp9CgovKiBsaW5lIDg1LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXdpZHRoOiAwIDAgMCA0cHg7Cn0KCi8qIGxpbmUgOTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLyogbGluZSA5NCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KYm9keSB7CiAgYmFja2dyb3VuZDogYmxhY2s7Cn0KCi8qIGxpbmUgOTgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnNsaWRlcyA+IHNsaWRlIHsKICBkaXNwbGF5OiBub25lOwogIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAyNnB4OwogIGNvbG9yOiAjNzk3OTc5OwogIHdpZHRoOiA5MDBweDsKICBoZWlnaHQ6IDcwMHB4OwogIG1hcmdpbi1sZWZ0OiAtNDUwcHg7CiAgbWFyZ2luLXRvcDogLTM1MHB4OwogIHBhZGRpbmc6IDQwcHggNjBweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKICAtbXMtYm9yZGVyLXJhZGl1czogNXB4OwogIC1vLWJvcmRlci1yYWRpdXM6IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC42cyBlYXNlLWluLW91dDsKICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjZzIGVhc2UtaW4tb3V0OwogIC1tcy10cmFuc2l0aW9uOiBhbGwgMC42cyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBhbGwgMC42cyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uOiBhbGwgMC42cyBlYXNlLWluLW91dDsKfQovKiBsaW5lIDExOSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8Kc2xpZGVzID4gc2xpZGUuZmFyLXBhc3QgewogIGRpc3BsYXk6IG5vbmU7Cn0KLyogbGluZSAxMjYsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnNsaWRlcyA+IHNsaWRlLnBhc3QgewogIGRpc3BsYXk6IGJsb2NrOwogIG9wYWNpdHk6IDA7Cn0KLyogbGluZSAxMzMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnNsaWRlcyA+IHNsaWRlLmN1cnJlbnQgewogIGRpc3BsYXk6IGJsb2NrOwogIG9wYWNpdHk6IDE7Cn0KLyogbGluZSAxMzksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnNsaWRlcyA+IHNsaWRlLmN1cnJlbnQgLmF1dG8tZmFkZWluIHsKICBvcGFjaXR5OiAxOwp9Ci8qIGxpbmUgMTQzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZS5jdXJyZW50IC5nZGJhciB7CiAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKICAtbW96LWJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOwogIC1vLWJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOwogIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOwp9Ci8qIGxpbmUgMTQ4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZS5uZXh0IHsKICBkaXNwbGF5OiBibG9jazsKICBvcGFjaXR5OiAwOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qIGxpbmUgMTU2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZS5mYXItbmV4dCB7CiAgZGlzcGxheTogbm9uZTsKfQovKiBsaW5lIDE2MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8Kc2xpZGVzID4gc2xpZGUuZGFyayB7CiAgYmFja2dyb3VuZDogIzUxNTE1MSAhaW1wb3J0YW50Owp9Ci8qIGxpbmUgMTcxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZTpub3QoLm5vYmFja2dyb3VuZCk6YmVmb3JlIHsKICBmb250LXNpemU6IDEycHQ7CiAgY29udGVudDogYXR0cihkYXRhLWhhc2h0YWcpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3R0b206IDIwcHg7CiAgbGVmdDogNjBweDsKICAvKiBiYWNrZ3JvdW5kOiB1cmwoIi4uL2ltYWdlcy9nb29nbGVfZGV2ZWxvcGVyc19pY29uXzEyOC5wbmciKSBuby1yZXBlYXQgMCA1MCU7ICovCiAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKICAtbW96LWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OwogIC1vLWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OwogIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OwogIHBhZGRpbmctbGVmdDogNDBweDsKICBoZWlnaHQ6IDMwcHg7CiAgbGluZS1oZWlnaHQ6IDEuOTsKfQoKCi8qIGxpbmUgMTgzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZTpub3QoLm5vYmFja2dyb3VuZCk6YWZ0ZXIgewogIGZvbnQtc2l6ZTogMTJwdDsKICBjb250ZW50OiBhdHRyKGRhdGEtc2xpZGUtbnVtKSAiLyIgYXR0cihkYXRhLXRvdGFsLXNsaWRlcyk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMjBweDsKICByaWdodDogNjBweDsKICBsaW5lLWhlaWdodDogMS45Owp9Ci8qIGxpbmUgMTk0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZS50aXRsZS1zbGlkZTphZnRlciB7CiAgY29udGVudDogJyc7CiAgLyogYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9pbzIwMTJfbG9nby5wbmcpIG5vLXJlcGVhdCAxMDAlIDUwJTsgKi8KICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogY29udGFpbjsKICAtbW96LWJhY2tncm91bmQtc2l6ZTogY29udGFpbjsKICAtby1iYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3R0b206IDQwcHg7CiAgcmlnaHQ6IDQwcHg7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiA2MHB4Owp9Ci8qIGxpbmUgMjA2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZS5iYWNrZHJvcCB7CiAgei1pbmRleDogLTEwOwogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDUwJSAwJSwgNTAlIDEwMCUsIGNvbG9yLXN0b3AoMCUsICNmZmZmZmYpLCBjb2xvci1zdG9wKDg1JSwgI2ZmZmZmZiksIGNvbG9yLXN0b3AoMTAwJSwgI2U2ZTZlNikpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOwogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwp9Ci8qIGxpbmUgMjExLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZS5iYWNrZHJvcDphZnRlciwgc2xpZGVzID4gc2xpZGUuYmFja2Ryb3A6YmVmb3JlIHsKICBkaXNwbGF5OiBub25lOwp9Ci8qIGxpbmUgMjE2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZSA+IGhncm91cCArIGFydGljbGUgewogIG1hcmdpbi10b3A6IDQ1cHg7Cn0KLyogbGluZSAyMjAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnNsaWRlcyA+IHNsaWRlID4gaGdyb3VwICsgYXJ0aWNsZS5mbGV4Ym94LnZjZW50ZXIsIHNsaWRlcyA+IHNsaWRlID4gaGdyb3VwICsgYXJ0aWNsZS5mbGV4Ym94LnZsZWZ0LCBzbGlkZXMgPiBzbGlkZSA+IGhncm91cCArIGFydGljbGUuZmxleGJveC52cmlnaHQgewogIGhlaWdodDogODAlOwp9Ci8qIGxpbmUgMjI1LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZSA+IGhncm91cCArIGFydGljbGUgcCB7CiAgbWFyZ2luLWJvdHRvbTogMWVtOwp9Ci8qIGxpbmUgMjMwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZSA+IGFydGljbGU6b25seS1jaGlsZCB7CiAgaGVpZ2h0OiAxMDAlOwp9Ci8qIGxpbmUgMjMzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMgPiBzbGlkZSA+IGFydGljbGU6b25seS1jaGlsZCA+IGlmcmFtZSB7CiAgaGVpZ2h0OiA5OCU7Cn0KCi8qIGxpbmUgMjM5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiA+IHNsaWRlIHsKICBwYWRkaW5nOiA0MHB4IDE2MHB4Owp9CgovKiBsaW5lIDI0OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8Kc2xpZGVzLmxheW91dC13aWRlc2NyZWVuID4gc2xpZGUsCnNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuID4gc2xpZGUgewogIG1hcmdpbi1sZWZ0OiAtNTUwcHg7CiAgd2lkdGg6IDExMDBweDsKfQovKiBsaW5lIDI1MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8Kc2xpZGVzLmxheW91dC13aWRlc2NyZWVuID4gc2xpZGUuZmFyLXBhc3QsCnNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuID4gc2xpZGUuZmFyLXBhc3QgewogIGRpc3BsYXk6IGJsb2NrOwogIGRpc3BsYXk6IG5vbmU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjI2MHB4KTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKC0yMjYwcHgpOwogIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjI2MHB4KTsKICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjI2MHB4KTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjI2MHB4KTsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIyNjBweCwgMCwgMCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0yMjYwcHgsIDAsIDApOwogIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0yMjYwcHgsIDAsIDApOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIyNjBweCwgMCwgMCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMjI2MHB4LCAwLCAwKTsKfQovKiBsaW5lIDI2MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8Kc2xpZGVzLmxheW91dC13aWRlc2NyZWVuID4gc2xpZGUucGFzdCwKc2xpZGVzLmxheW91dC1mYXV4LXdpZGVzY3JlZW4gPiBzbGlkZS5wYXN0IHsKICBkaXNwbGF5OiBibG9jazsKICBvcGFjaXR5OiAwOwp9Ci8qIGxpbmUgMjY3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4gPiBzbGlkZS5jdXJyZW50LApzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiA+IHNsaWRlLmN1cnJlbnQgewogIGRpc3BsYXk6IGJsb2NrOwogIG9wYWNpdHk6IDE7Cn0KLyogbGluZSAyNzQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnNsaWRlcy5sYXlvdXQtd2lkZXNjcmVlbiA+IHNsaWRlLm5leHQsCnNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuID4gc2xpZGUubmV4dCB7CiAgZGlzcGxheTogYmxvY2s7CiAgb3BhY2l0eTogMDsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQovKiBsaW5lIDI4MiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8Kc2xpZGVzLmxheW91dC13aWRlc2NyZWVuID4gc2xpZGUuZmFyLW5leHQsCnNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuID4gc2xpZGUuZmFyLW5leHQgewogIGRpc3BsYXk6IGJsb2NrOwogIGRpc3BsYXk6IG5vbmU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMjYwcHgpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjI2MHB4KTsKICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjI2MHB4KTsKICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMjYwcHgpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDIyNjBweCk7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDIyNjBweCwgMCwgMCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDIyNjBweCwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjI2MHB4LCAwLCAwKTsKICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDIyNjBweCwgMCwgMCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyMjYwcHgsIDAsIDApOwp9Ci8qIGxpbmUgMjg5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4gI3ByZXYtc2xpZGUtYXJlYSwKc2xpZGVzLmxheW91dC1mYXV4LXdpZGVzY3JlZW4gI3ByZXYtc2xpZGUtYXJlYSB7CiAgbWFyZ2luLWxlZnQ6IC02NTBweDsKfQovKiBsaW5lIDI5MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8Kc2xpZGVzLmxheW91dC13aWRlc2NyZWVuICNuZXh0LXNsaWRlLWFyZWEsCnNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuICNuZXh0LXNsaWRlLWFyZWEgewogIG1hcmdpbi1sZWZ0OiA1NTBweDsKfQoKLyogbGluZSAyOTgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCmIgewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi8qIGxpbmUgMzAyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwphIHsKICBjb2xvcjogIzJhN2NkZjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoNDIsIDEyNCwgMjIzLCAwLjUpOwp9Ci8qIGxpbmUgMzA3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwphOmhvdmVyIHsKICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsKfQoKLyogbGluZSAzMTIsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCmgxLCBoMiwgaDMgewogIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi8qIGxpbmUgMzE2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpoMiB7CiAgZm9udC1zaXplOiA0NXB4OwogIGxpbmUtaGVpZ2h0OiA0NXB4OwogIGxldHRlci1zcGFjaW5nOiAtMnB4OwogIGNvbG9yOiAjNTE1MTUxOwp9CgovKiBsaW5lIDMyMywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KaDMgewogIGZvbnQtc2l6ZTogMzBweDsKICBsZXR0ZXItc3BhY2luZzogLTFweDsKICBsaW5lLWhlaWdodDogMjsKICBmb250LXdlaWdodDogaW5oZXJpdDsKICBjb2xvcjogIzc5Nzk3OTsKfQoKLyogbGluZSAzMzEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnVsIHsKICBtYXJnaW4tbGVmdDogMS4yZW07CiAgbWFyZ2luLWJvdHRvbTogMWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiBsaW5lIDMzNiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KdWwgbGkgewogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9Ci8qIGxpbmUgMzM5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwp1bCBsaSB1bCB7CiAgbWFyZ2luLWxlZnQ6IDJlbTsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIGxpbmUgMzQzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwp1bCBsaSB1bCBsaTpiZWZvcmUgewogIGNvbnRlbnQ6ICctJzsKICBmb250LXdlaWdodDogNjAwOwp9Ci8qIGxpbmUgMzUwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwp1bCA+IGxpOmJlZm9yZSB7CiAgY29udGVudDogJ1wwMEI3JzsKICBtYXJnaW4tbGVmdDogLTFlbTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQovKiBsaW5lIDM1NywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KdWwgdWwgewogIG1hcmdpbi10b3A6IC41ZW07Cn0KCi8qIGxpbmUgMzY0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouaGlnaGxpZ2h0LWNvZGUgc2xpZGUuY3VycmVudCBwcmUgPiAqIHsKICBvcGFjaXR5OiAwLjI1OwogIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW47CiAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZS1pbjsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW47CiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW47CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW47Cn0KLyogbGluZSAzNjgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5oaWdobGlnaHQtY29kZSBzbGlkZS5jdXJyZW50IGIgewogIG9wYWNpdHk6IDE7Cn0KCi8qIGxpbmUgMzczLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpwcmUgewogIGZvbnQtZmFtaWx5OiAnSW5jb25zb2xhdGEnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAyMHB4OwogIGxpbmUtaGVpZ2h0OiAyOHB4OwogIHBhZGRpbmc6IDEwcHggMCAxMHB4IDYwcHg7CiAgbGV0dGVyLXNwYWNpbmc6IC0xcHg7CiAgbWFyZ2luLWJvdHRvbTogMHB4OwogIHdpZHRoOiAxMDYlOwogIGxlZnQ6IC02MHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLypvdmVyZmxvdzogaGlkZGVuOyovCn0KLyogbGluZSAzODcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnByZVtkYXRhLWxhbmddOmFmdGVyIHsKICBjb250ZW50OiBhdHRyKGRhdGEtbGFuZyk7CiAgYmFja2dyb3VuZC1jb2xvcjogI2E5YTlhOTsKICByaWdodDogMDsKICB0b3A6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGZvbnQtc2l6ZTogMTZwdDsKICBjb2xvcjogd2hpdGU7CiAgcGFkZGluZzogMnB4IDI1cHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLyogbGluZSA0MDAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnByZVtkYXRhLWxhbmc9ImdvIl0gewogIGNvbG9yOiAjMzMzOwp9CgovKiBsaW5lIDQwNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KY29kZSB7CiAgZm9udC1zaXplOiA5NSU7CiAgZm9udC1mYW1pbHk6ICdJbmNvbnNvbGF0YScsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICBjb2xvcjogYmxhY2s7Cn0KCi8qIGxpbmUgNDEwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwppZnJhbWUgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogNTMwcHg7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjsKICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi8qIGxpbmUgNDE4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpkdCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi8qIGxpbmUgNDIyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpidXR0b24gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgNTAlIDAlLCA1MCUgMTAwJSwgY29sb3Itc3RvcCg0MCUsICNmOWY5ZjkpLCBjb2xvci1zdG9wKDcwJSwgI2UzZTNlMykpOwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNmOWY5ZjkgNDAlLCAjZTNlM2UzIDcwJSk7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI2Y5ZjlmOSA0MCUsICNlM2UzZTMgNzAlKTsKICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQoI2Y5ZjlmOSA0MCUsICNlM2UzZTMgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNmOWY5ZjkgNDAlLCAjZTNlM2UzIDcwJSk7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNmOWY5ZjkgNDAlLCAjZTNlM2UzIDcwJSk7CiAgYm9yZGVyOiAxcHggc29saWQgI2E5YTlhOTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDsKICAtbXMtYm9yZGVyLXJhZGl1czogM3B4OwogIC1vLWJvcmRlci1yYWRpdXM6IDNweDsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgcGFkZGluZzogNXB4IDhweDsKICBvdXRsaW5lOiBub25lOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LXNoYWRvdzogMXB4IDFweCB3aGl0ZTsKICBmb250LXNpemU6IDEwcHQ7Cn0KCi8qIGxpbmUgNDM2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpidXR0b246bm90KDpkaXNhYmxlZCk6aG92ZXIgewogIGJvcmRlci1jb2xvcjogIzUxNTE1MTsKfQoKLyogbGluZSA0NDAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCmJ1dHRvbjpub3QoOmRpc2FibGVkKTphY3RpdmUgewogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCA1MCUgMCUsIDUwJSAxMDAlLCBjb2xvci1zdG9wKDQwJSwgI2UzZTNlMyksIGNvbG9yLXN0b3AoNzAlLCAjZjlmOWY5KSk7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoI2UzZTNlMyA0MCUsICNmOWY5ZjkgNzAlKTsKICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCgjZTNlM2UzIDQwJSwgI2Y5ZjlmOSA3MCUpOwogIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCgjZTNlM2UzIDQwJSwgI2Y5ZjlmOSA3MCUpOwogIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQoI2UzZTNlMyA0MCUsICNmOWY5ZjkgNzAlKTsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoI2UzZTNlMyA0MCUsICNmOWY5ZjkgNzAlKTsKfQoKLyogbGluZSA0NDQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCjpkaXNhYmxlZCB7CiAgY29sb3I6ICNhOWE5YTk7Cn0KCi8qIGxpbmUgNDQ4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouYmx1ZSB7CiAgY29sb3I6ICM0Mzg3ZmQ7Cn0KCi8qIGxpbmUgNDUxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouYmx1ZTIgewogIGNvbG9yOiAjM2M4ZWYzOwp9CgovKiBsaW5lIDQ1NCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmJsdWUzIHsKICBjb2xvcjogIzJhN2NkZjsKfQoKLyogbGluZSA0NTcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi55ZWxsb3cgewogIGNvbG9yOiAjZmZkMTRkOwp9CgovKiBsaW5lIDQ2MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnllbGxvdzIgewogIGNvbG9yOiAjZjljYzQ2Owp9CgovKiBsaW5lIDQ2MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnllbGxvdzMgewogIGNvbG9yOiAjZjZjMDAwOwp9CgovKiBsaW5lIDQ2NiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmdyZWVuIHsKICBjb2xvcjogIzBkYTg2MTsKfQoKLyogbGluZSA0NjksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5ncmVlbjIgewogIGNvbG9yOiAjMDBhODZkOwp9CgovKiBsaW5lIDQ3MiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmdyZWVuMyB7CiAgY29sb3I6ICMwMDlmNWQ7Cn0KCi8qIGxpbmUgNDc1LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoucmVkIHsKICBjb2xvcjogI2Y0NGEzZjsKfQoKLyogbGluZSA0NzgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5yZWQyIHsKICBjb2xvcjogI2UwNTQzZTsKfQoKLyogbGluZSA0ODEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5yZWQzIHsKICBjb2xvcjogI2Q5NGQzYTsKfQoKLyogbGluZSA0ODQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5ncmF5IHsKICBjb2xvcjogI2U2ZTZlNjsKfQoKLyogbGluZSA0ODcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5ncmF5MiB7CiAgY29sb3I6ICNhOWE5YTk7Cn0KCi8qIGxpbmUgNDkwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouZ3JheTMgewogIGNvbG9yOiAjNzk3OTc5Owp9CgovKiBsaW5lIDQ5MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmdyYXk0IHsKICBjb2xvcjogIzUxNTE1MTsKfQoKLyogbGluZSA0OTcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi53aGl0ZSB7CiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0KCi8qIGxpbmUgNTAwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouYmxhY2sgewogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Owp9CgovKiBsaW5lIDUwNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmNvbHVtbnMtMiB7CiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IDI7CiAgLW1vei1jb2x1bW4tY291bnQ6IDI7CiAgLW8tY29sdW1uLWNvdW50OiAyOwogIGNvbHVtbi1jb3VudDogMjsKfQoKLyogbGluZSA1MDgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnRhYmxlIHsKICB3aWR0aDogMTAwJTsKICBib3JkZXItY29sbGFwc2U6IC1tb3otaW5pdGlhbDsKICBib3JkZXItY29sbGFwc2U6IGluaXRpYWw7CiAgYm9yZGVyLXNwYWNpbmc6IDJweDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzc5Nzk3OTsKfQovKiBsaW5lIDUxNSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KdGFibGUgdHIgPiB0ZDpmaXJzdC1jaGlsZCwgdGFibGUgdGggewogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgY29sb3I6ICM1MTUxNTE7Cn0KLyogbGluZSA1MjAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnRhYmxlIHRyOm50aC1jaGlsZChvZGQpIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2Owp9Ci8qIGxpbmUgNTI0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwp0YWJsZSB0aCB7CiAgY29sb3I6IHdoaXRlOwogIGZvbnQtc2l6ZTogMThweDsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgNTAlIDAlLCA1MCUgMTAwJSwgY29sb3Itc3RvcCg0MCUsICM0Mzg3ZmQpLCBjb2xvci1zdG9wKDgwJSwgIzJhN2NkZikpIG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICM0Mzg3ZmQgNDAlLCAjMmE3Y2RmIDgwJSkgbm8tcmVwZWF0OwogIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzQzODdmZCA0MCUsICMyYTdjZGYgODAlKSBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzQzODdmZCA0MCUsICMyYTdjZGYgODAlKSBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICM0Mzg3ZmQgNDAlLCAjMmE3Y2RmIDgwJSkgbm8tcmVwZWF0OwogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0b3AsICM0Mzg3ZmQgNDAlLCAjMmE3Y2RmIDgwJSkgbm8tcmVwZWF0Owp9Ci8qIGxpbmUgNTMwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwp0YWJsZSB0ZCwgdGFibGUgdGggewogIGZvbnQtc2l6ZTogMThweDsKICBwYWRkaW5nOiAxZW0gMC41ZW07Cn0KLyogbGluZSA1MzUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnRhYmxlIHRkLmhpZ2hsaWdodCB7CiAgY29sb3I6ICM1MTUxNTE7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDUwJSAwJSwgNTAlIDEwMCUsIGNvbG9yLXN0b3AoNDAlLCAjZmZkMTRkKSwgY29sb3Itc3RvcCg4MCUsICNmNmMwMDApKSBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZkMTRkIDQwJSwgI2Y2YzAwMCA4MCUpIG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmQxNGQgNDAlLCAjZjZjMDAwIDgwJSkgbm8tcmVwZWF0OwogIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmQxNGQgNDAlLCAjZjZjMDAwIDgwJSkgbm8tcmVwZWF0OwogIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZkMTRkIDQwJSwgI2Y2YzAwMCA4MCUpIG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZmZkMTRkIDQwJSwgI2Y2YzAwMCA4MCUpIG5vLXJlcGVhdDsKfQovKiBsaW5lIDU0MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KdGFibGUucm93cyB7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNzk3OTc5Owp9CgovKiBsaW5lIDU0NiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KcSB7CiAgZm9udC1zaXplOiA0NXB4OwogIGxpbmUtaGVpZ2h0OiA3MnB4Owp9Ci8qIGxpbmUgNTUwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpxOmJlZm9yZSB7CiAgY29udGVudDogJ+KAnCc7CiAgcG9zaXRpb246IGFic29sdXRlOwogIG1hcmdpbi1sZWZ0OiAtMC41ZW07Cn0KLyogbGluZSA1NTUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCnE6YWZ0ZXIgewogIGNvbnRlbnQ6ICfigJ0nOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBtYXJnaW4tbGVmdDogMC4xZW07Cn0KCi8qIGxpbmUgNTYyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwpzbGlkZS5maWxsIHsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OwogIC1tb3otYm9yZGVyLXJhZGl1czogNXB4OwogIC1tcy1ib3JkZXItcmFkaXVzOiA1cHg7CiAgLW8tYm9yZGVyLXJhZGl1czogNXB4OwogIGJvcmRlci1yYWRpdXM6IDVweDsKICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogY292ZXI7CiAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IGNvdmVyOwogIC1vLWJhY2tncm91bmQtc2l6ZTogY292ZXI7CiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsKfQoKLyogU2l6ZSB2YXJpYW50cyAqLwovKiBsaW5lIDU3MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KYXJ0aWNsZS5zbWFsbGVyIHAsIGFydGljbGUuc21hbGxlciB1bCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIGxldHRlci1zcGFjaW5nOiAwOwp9Ci8qIGxpbmUgNTc3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwphcnRpY2xlLnNtYWxsZXIgdGFibGUgdGQsIGFydGljbGUuc21hbGxlciB0YWJsZSB0aCB7CiAgZm9udC1zaXplOiAxNHB4Owp9Ci8qIGxpbmUgNTgxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwphcnRpY2xlLnNtYWxsZXIgcHJlIHsKICBmb250LXNpemU6IDE1cHg7CiAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgbGV0dGVyLXNwYWNpbmc6IDA7Cn0KLyogbGluZSA1ODYsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCmFydGljbGUuc21hbGxlciBxIHsKICBmb250LXNpemU6IDQwcHg7CiAgbGluZS1oZWlnaHQ6IDQ4cHg7Cn0KLyogbGluZSA1OTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCmFydGljbGUuc21hbGxlciBxOmJlZm9yZSwgYXJ0aWNsZS5zbWFsbGVyIHE6YWZ0ZXIgewogIGZvbnQtc2l6ZTogNjBweDsKfQoKLyogQnVpbGRzICovCi8qIGxpbmUgNTk5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouYnVpbGQgPiAqIHsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLWluLW91dCAwLjJzOwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW4tb3V0IDAuMnM7CiAgLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLWluLW91dCAwLjJzOwogIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLWluLW91dCAwLjJzOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLWluLW91dCAwLjJzOwp9Ci8qIGxpbmUgNjAzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouYnVpbGQgLnRvLWJ1aWxkIHsKICBvcGFjaXR5OiAwOwp9Ci8qIGxpbmUgNjA3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouYnVpbGQgLmJ1aWxkLWZhZGUgewogIG9wYWNpdHk6IDAuMzsKfQovKiBsaW5lIDYxMCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmJ1aWxkIC5idWlsZC1mYWRlOmhvdmVyIHsKICBvcGFjaXR5OiAxLjA7Cn0KCi8qIGxpbmUgNjE3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoucG9wdXAgLm5leHQgLmJ1aWxkIC50by1idWlsZCB7CiAgb3BhY2l0eTogMTsKfQovKiBsaW5lIDYyMSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnBvcHVwIC5uZXh0IC5idWlsZCAuYnVpbGQtZmFkZSB7CiAgb3BhY2l0eTogMTsKfQoKLyogUHJldHR5IHByaW50ICovCi8qIGxpbmUgNjI5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoucHJldHR5cHJpbnQgLnN0ciwKLnByZXR0eXByaW50IC5hdHYgewogIC8qIGEgbWFya3VwIGF0dHJpYnV0ZSB2YWx1ZSAqLwogIGNvbG9yOiAjMDA5ZjVkOwp9CgovKiBsaW5lIDYzMywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnByZXR0eXByaW50IC5rd2QsCi5wcmV0dHlwcmludCAudGFnIHsKICAvKiBhIG1hcmt1cCB0YWcgbmFtZSAqLwogIGNvbG9yOiAjMDA2NmNjOwp9CgovKiBsaW5lIDYzNiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnByZXR0eXByaW50IC5jb20gewogIC8qIGEgY29tbWVudCAqLwogIGNvbG9yOiAjNzk3OTc5OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLyogbGluZSA2NDAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5wcmV0dHlwcmludCAubGl0IHsKICAvKiBhIGxpdGVyYWwgdmFsdWUgKi8KICBjb2xvcjogIzdmMDAwMDsKfQoKLyogbGluZSA2NDUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5wcmV0dHlwcmludCAucHVuLAoucHJldHR5cHJpbnQgLm9wbiwKLnByZXR0eXByaW50IC5jbG8gewogIGNvbG9yOiAjNTE1MTUxOwp9CgovKiBsaW5lIDY1MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnByZXR0eXByaW50IC50eXAsCi5wcmV0dHlwcmludCAuYXRuLAoucHJldHR5cHJpbnQgLmRlYywKLnByZXR0eXByaW50IC52YXIgewogIC8qIGEgZGVjbGFyYXRpb247IGEgdmFyaWFibGUgbmFtZSAqLwogIGNvbG9yOiAjZDk0ZDNhOwp9CgovKiBsaW5lIDY1NCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnByZXR0eXByaW50IC5wbG4gewogIGNvbG9yOiAjNTE1MTUxOwp9CgovKiBsaW5lIDY1OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLm5vdGUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDA7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIHBhZGRpbmc6IDFlbTsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgb3BhY2l0eTogMDsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKICBkaXNwbGF5OiAtd2Via2l0LWJveCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IC1tb3otYm94ICFpbXBvcnRhbnQ7CiAgZGlzcGxheTogLW1zLWJveCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IC1vLWJveCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IGJveCAhaW1wb3J0YW50OwogIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CiAgLW1vei1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAtbXMtYm94LW9yaWVudDogdmVydGljYWw7CiAgYm94LW9yaWVudDogdmVydGljYWw7CiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKICAtbW96LWJveC1hbGlnbjogY2VudGVyOwogIC1tcy1ib3gtYWxpZ246IGNlbnRlcjsKICBib3gtYWxpZ246IGNlbnRlcjsKICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7CiAgLW1vei1ib3gtcGFjazogY2VudGVyOwogIC1tcy1ib3gtcGFjazogY2VudGVyOwogIGJveC1wYWNrOiBjZW50ZXI7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CiAgLW1zLWJvcmRlci1yYWRpdXM6IDVweDsKICAtby1ib3JkZXItcmFkaXVzOiA1cHg7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgzNTBweCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzUwcHgpOwogIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzUwcHgpOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgzNTBweCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDM1MHB4KTsKICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZS1pbi1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0OwogIC1vLXRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0Owp9Ci8qIGxpbmUgNjc2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoubm90ZSA+IHNlY3Rpb24gewogIGJhY2tncm91bmQ6ICNmZmY7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CiAgLW1zLWJvcmRlci1yYWRpdXM6IDVweDsKICAtby1ib3JkZXItcmFkaXVzOiA1cHg7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKICAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICM3OTc5Nzk7CiAgYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKICB3aWR0aDogNjAlOwogIHBhZGRpbmc6IDJlbTsKfQoKLyogbGluZSA2OTMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi53aXRoLW5vdGVzLnBvcHVwIHNsaWRlcy5sYXlvdXQtd2lkZXNjcmVlbiBzbGlkZS5uZXh0LAoud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiBzbGlkZS5uZXh0IHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNjkwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg2OTBweCwgODBweCwgMCkgc2NhbGUoMC4zNSk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNjkwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNjkwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNjkwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwp9Ci8qIGxpbmUgNjk2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4gc2xpZGUgLm5vdGUsCi53aXRoLW5vdGVzLnBvcHVwIHNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuIHNsaWRlIC5ub3RlIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzAwcHgsIDgwMHB4LCAwKSBzY2FsZSgxLjUpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzMDBweCwgODAwcHgsIDApIHNjYWxlKDEuNSk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzAwcHgsIDgwMHB4LCAwKSBzY2FsZSgxLjUpOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzAwcHgsIDgwMHB4LCAwKSBzY2FsZSgxLjUpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzAwcHgsIDgwMHB4LCAwKSBzY2FsZSgxLjUpOwp9Ci8qIGxpbmUgNzAyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZSB7CiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogIC1tb3otdHJhbnNpdGlvbjogbm9uZTsKICAtbXMtdHJhbnNpdGlvbjogbm9uZTsKICAtby10cmFuc2l0aW9uOiBub25lOwogIHRyYW5zaXRpb246IG5vbmU7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7CiAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7CiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKICAtby10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7CiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwp9Ci8qIGxpbmUgNzA5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZTpub3QoLmJhY2tkcm9wKSB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNikgdHJhbnNsYXRlM2QoMC41ZW0sIDAuNWVtLCAwKTsKICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC42KSB0cmFuc2xhdGUzZCgwLjVlbSwgMC41ZW0sIDApOwogIC1tcy10cmFuc2Zvcm06IHNjYWxlKDAuNikgdHJhbnNsYXRlM2QoMC41ZW0sIDAuNWVtLCAwKTsKICAtby10cmFuc2Zvcm06IHNjYWxlKDAuNikgdHJhbnNsYXRlM2QoMC41ZW0sIDAuNWVtLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKDAuNikgdHJhbnNsYXRlM2QoMC41ZW0sIDAuNWVtLCAwKTsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4ICM3OTc5Nzk7CiAgLW1vei1ib3gtc2hhZG93OiAwIDAgMTBweCAjNzk3OTc5OwogIGJveC1zaGFkb3c6IDAgMCAxMHB4ICM3OTc5Nzk7Cn0KLyogbGluZSA3MTQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi53aXRoLW5vdGVzLnBvcHVwIHNsaWRlLmJhY2tkcm9wIHsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KHJhZGlhbCwgNTAlIDUwJSwgMCwgNTAlIDUwJSwgNjAwLCBjb2xvci1zdG9wKDAlLCAjYjFkZmZmKSwgY29sb3Itc3RvcCgxMDAlLCAjNDM4N2ZkKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoNTAlIDUwJSwgI2IxZGZmZiAwJSwgIzQzODdmZCA2MDBweCk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1yYWRpYWwtZ3JhZGllbnQoNTAlIDUwJSwgI2IxZGZmZiAwJSwgIzQzODdmZCA2MDBweCk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tcmFkaWFsLWdyYWRpZW50KDUwJSA1MCUsICNiMWRmZmYgMCUsICM0Mzg3ZmQgNjAwcHgpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1yYWRpYWwtZ3JhZGllbnQoNTAlIDUwJSwgI2IxZGZmZiAwJSwgIzQzODdmZCA2MDBweCk7CiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KDUwJSA1MCUsICNiMWRmZmYgMCUsICM0Mzg3ZmQgNjAwcHgpOwp9Ci8qIGxpbmUgNzIwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZS5uZXh0IHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNTcwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg1NzBweCwgODBweCwgMCkgc2NhbGUoMC4zNSk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNTcwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNTcwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNTcwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOwogIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKfQovKiBsaW5lIDcyNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLndpdGgtbm90ZXMucG9wdXAgc2xpZGUubmV4dCAubm90ZSB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci8qIGxpbmUgNzMwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoud2l0aC1ub3Rlcy5wb3B1cCAubm90ZSB7CiAgd2lkdGg6IDEwOSU7CiAgaGVpZ2h0OiAyNjBweDsKICBiYWNrZ3JvdW5kOiAjZTZlNmU2OwogIHBhZGRpbmc6IDA7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjNzk3OTc5OwogIC1tb3otYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKICBib3gtc2hhZG93OiAwIDAgMTBweCAjNzk3OTc5OwogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyNTBweCwgODAwcHgsIDApIHNjYWxlKDEuNSk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDI1MHB4LCA4MDBweCwgMCkgc2NhbGUoMS41KTsKICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyNTBweCwgODAwcHgsIDApIHNjYWxlKDEuNSk7CiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyNTBweCwgODAwcHgsIDApIHNjYWxlKDEuNSk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyNTBweCwgODAwcHgsIDApIHNjYWxlKDEuNSk7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDQwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcyBlYXNlLWluLW91dDsKICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcyBlYXNlLWluLW91dDsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDQwMG1zIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb246IG9wYWNpdHkgNDAwbXMgZWFzZS1pbi1vdXQ7Cn0KLyogbGluZSA3NDEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi53aXRoLW5vdGVzLnBvcHVwIC5ub3RlID4gc2VjdGlvbiB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKICAtbXMtYm9yZGVyLXJhZGl1czogNXB4OwogIC1vLWJvcmRlci1yYWRpdXM6IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgaGVpZ2h0OiAxMDAlOwogIHdpZHRoOiAxMDAlOwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgLW1vei1ib3gtc2hhZG93OiBub25lOwogIGJveC1zaGFkb3c6IG5vbmU7CiAgb3ZlcmZsb3c6IGF1dG87CiAgcGFkZGluZzogMWVtOwp9Ci8qIGxpbmUgNzU0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoud2l0aC1ub3RlcyAubm90ZSB7CiAgb3BhY2l0eTogMTsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi8qIGxpbmUgNzYxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouc291cmNlIHsKICBmb250LXNpemU6IDE0cHg7CiAgY29sb3I6ICNhOWE5YTk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogNzBweDsKICBsZWZ0OiA2MHB4Owp9CgovKiBsaW5lIDc2OSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmNlbnRlcmVkIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi8qIGxpbmUgNzczLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoucmVmbGVjdCB7CiAgLXdlYmtpdC1ib3gtcmVmbGVjdDogYmVsb3cgM3B4IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgODUlLCB3aGl0ZSAxNTAlKTsKICAtbW96LWJveC1yZWZsZWN0OiBiZWxvdyAzcHggLW1vei1saW5lYXItZ3JhZGllbnQocmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA4NSUsIHdoaXRlIDE1MCUpOwogIC1vLWJveC1yZWZsZWN0OiBiZWxvdyAzcHggLW8tbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgODUlLCB3aGl0ZSAxNTAlKTsKICAtbXMtYm94LXJlZmxlY3Q6IGJlbG93IDNweCAtbXMtbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgODUlLCB3aGl0ZSAxNTAlKTsKICBib3gtcmVmbGVjdDogYmVsb3cgM3B4IGxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDg1JSwgI2ZmZmZmZiAxNTAlKTsKfQoKLyogbGluZSA3ODEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5mbGV4Ym94IHsKICBkaXNwbGF5OiAtd2Via2l0LWJveCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IC1tb3otYm94ICFpbXBvcnRhbnQ7CiAgZGlzcGxheTogLW1zLWJveCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IC1vLWJveCAhaW1wb3J0YW50OwogIGRpc3BsYXk6IGJveCAhaW1wb3J0YW50Owp9CgovKiBsaW5lIDc4NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmZsZXhib3gudmNlbnRlciB7CiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAtbW96LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogIC1tcy1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICBib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOwogIC1tb3otYm94LWFsaWduOiBjZW50ZXI7CiAgLW1zLWJveC1hbGlnbjogY2VudGVyOwogIGJveC1hbGlnbjogY2VudGVyOwogIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKICAtbW96LWJveC1wYWNrOiBjZW50ZXI7CiAgLW1zLWJveC1wYWNrOiBjZW50ZXI7CiAgYm94LXBhY2s6IGNlbnRlcjsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDEwMCU7Cn0KCi8qIGxpbmUgNzkxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouZmxleGJveC52bGVmdCB7CiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAtbW96LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogIC1tcy1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICBib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAtd2Via2l0LWJveC1hbGlnbjogbGVmdDsKICAtbW96LWJveC1hbGlnbjogbGVmdDsKICAtbXMtYm94LWFsaWduOiBsZWZ0OwogIGJveC1hbGlnbjogbGVmdDsKICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7CiAgLW1vei1ib3gtcGFjazogY2VudGVyOwogIC1tcy1ib3gtcGFjazogY2VudGVyOwogIGJveC1wYWNrOiBjZW50ZXI7CiAgaGVpZ2h0OiAxMDAlOwogIHdpZHRoOiAxMDAlOwp9CgovKiBsaW5lIDc5NywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLmZsZXhib3gudnJpZ2h0IHsKICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogIC1tb3otYm94LW9yaWVudDogdmVydGljYWw7CiAgLW1zLWJveC1vcmllbnQ6IHZlcnRpY2FsOwogIGJveC1vcmllbnQ6IHZlcnRpY2FsOwogIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7CiAgLW1vei1ib3gtYWxpZ246IGVuZDsKICAtbXMtYm94LWFsaWduOiBlbmQ7CiAgYm94LWFsaWduOiBlbmQ7CiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyOwogIC1tb3otYm94LXBhY2s6IGNlbnRlcjsKICAtbXMtYm94LXBhY2s6IGNlbnRlcjsKICBib3gtcGFjazogY2VudGVyOwogIGhlaWdodDogMTAwJTsKICB3aWR0aDogMTAwJTsKfQoKLyogbGluZSA4MDMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5hdXRvLWZhZGVpbiB7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnMgZWFzZS1pbiAxczsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC42cyBlYXNlLWluIDFzOwogIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnMgZWFzZS1pbiAxczsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnMgZWFzZS1pbiAxczsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnMgZWFzZS1pbiAxczsKICBvcGFjaXR5OiAwOwp9CgovKiBDbGlja2FibGUvdGFwcGFibGUgYXJlYXMgKi8KLyogbGluZSA4MDksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5zbGlkZS1hcmVhIHsKICB6LWluZGV4OiAxMDAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAwOwogIHRvcDogMDsKICB3aWR0aDogMTAwcHg7CiAgaGVpZ2h0OiA3MDBweDsKICBsZWZ0OiA1MCU7CiAgdG9wOiA1MCU7CiAgY3Vyc29yOiBwb2ludGVyOwogIG1hcmdpbi10b3A6IC0zNTBweDsKfQoKLyogbGluZSA4MjYsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCiNwcmV2LXNsaWRlLWFyZWEgewogIG1hcmdpbi1sZWZ0OiAtNTUwcHg7Cn0KCi8qIGxpbmUgODMxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwojbmV4dC1zbGlkZS1hcmVhIHsKICBtYXJnaW4tbGVmdDogNDUwcHg7Cn0KCi8qID09PT09IFNMSURFIENPTlRFTlQgPT09PT0gKi8KLyogbGluZSA4MzksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi5sb2dvc2xpZGUgaW1nIHsKICB3aWR0aDogMzgzcHg7CiAgaGVpZ2h0OiA5MnB4Owp9CgovKiBsaW5lIDg0NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnNlZ3VlIHsKICBwYWRkaW5nOiA2MHB4IDEyMHB4Owp9Ci8qIGxpbmUgODQ4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouc2VndWUgaDIgewogIGNvbG9yOiAjZTZlNmU2OwogIGZvbnQtc2l6ZTogNjBweDsKfQovKiBsaW5lIDg1MiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnNlZ3VlIGgzIHsKICBjb2xvcjogI2U2ZTZlNjsKICBsaW5lLWhlaWdodDogMi44Owp9Ci8qIGxpbmUgODU2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwouc2VndWUgaGdyb3VwIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAyMjVweDsKfQoKLyogbGluZSA4NjIsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi50aGFuay15b3Utc2xpZGUgewogIGJhY2tncm91bmQ6ICM0Mzg3ZmQgIWltcG9ydGFudDsKICBjb2xvcjogd2hpdGU7Cn0KLyogbGluZSA4NjYsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi50aGFuay15b3Utc2xpZGUgaDIgewogIGZvbnQtc2l6ZTogNjBweDsKICBjb2xvcjogaW5oZXJpdDsKfQovKiBsaW5lIDg3MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnRoYW5rLXlvdS1zbGlkZSBhcnRpY2xlID4gcCB7CiAgbWFyZ2luLXRvcDogMmVtOwogIGZvbnQtc2l6ZTogMjBwdDsKfQovKiBsaW5lIDg3NiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnRoYW5rLXlvdS1zbGlkZSA+IHAgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3R0b206IDgwcHg7CiAgZm9udC1zaXplOiAyNHB0OwogIGxpbmUtaGVpZ2h0OiAxLjM7Cn0KCi8qIGxpbmUgODg0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwphc2lkZS5nZGJhciB7CiAgaGVpZ2h0OiA5N3B4OwogIHdpZHRoOiAyMTVweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTFweDsKICB0b3A6IDEyNXB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAxMHB4IDEwcHggMDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMTBweCAxMHB4IDA7CiAgLW1zLWJvcmRlci1yYWRpdXM6IDAgMTBweCAxMHB4IDA7CiAgLW8tYm9yZGVyLXJhZGl1czogMCAxMHB4IDEwcHggMDsKICBib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwOwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSA1MCUsIDEwMCUgNTAlLCBjb2xvci1zdG9wKDAlLCAjZTZlNmU2KSwgY29sb3Itc3RvcCgxMDAlLCAjZTZlNmU2KSkgbm8tcmVwZWF0OwogIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsICNlNmU2ZTYsICNlNmU2ZTYpIG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChsZWZ0LCAjZTZlNmU2LCAjZTZlNmU2KSBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsICNlNmU2ZTYsICNlNmU2ZTYpIG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KGxlZnQsICNlNmU2ZTYsICNlNmU2ZTYpIG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQobGVmdCwgI2U2ZTZlNiwgI2U2ZTZlNikgbm8tcmVwZWF0OwogIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAwJSAxMDAlOwogIC1tb3otYmFja2dyb3VuZC1zaXplOiAwJSAxMDAlOwogIC1vLWJhY2tncm91bmQtc2l6ZTogMCUgMTAwJTsKICBiYWNrZ3JvdW5kLXNpemU6IDAlIDEwMCU7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlLW91dCAwLjVzOwogIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZS1vdXQgMC41czsKICAtbXMtdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZS1vdXQgMC41czsKICAtby10cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlLW91dCAwLjVzOwogIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2Utb3V0IDAuNXM7CiAgLyogQmV0dGVyIHRvIHRyYW5zaXRpb24gb25seSBvbiBiYWNrZ3JvdW5kLXNpemUsIGJ1dCBub3Qgc3VyZSBob3cgdG8gZG8gdGhhdCB3aXRoIHRoZSBtaXhpbi4gKi8KfQovKiBsaW5lIDg5NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KYXNpZGUuZ2RiYXIucmlnaHQgewogIHJpZ2h0OiAwOwogIGxlZnQ6IC1tb3otaW5pdGlhbDsKICBsZWZ0OiBpbml0aWFsOwogIHRvcDogMjU0cHg7CiAgLyogOTYgaXMgaGVpZ2h0IG9mIGdyYXkgaWNvbiBiYXIgKi8KICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOwogIC1tb3otdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7CiAgLW1zLXRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOwogIC1vLXRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOwp9Ci8qIGxpbmUgOTAyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwphc2lkZS5nZGJhci5yaWdodCBpbWcgewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7CiAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7CiAgLW8tdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7CiAgdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7Cn0KLyogbGluZSA5MDcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCmFzaWRlLmdkYmFyLmJvdHRvbSB7CiAgdG9wOiAtbW96LWluaXRpYWw7CiAgdG9wOiBpbml0aWFsOwogIGJvdHRvbTogNjBweDsKfQovKiBsaW5lIDkxMywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KYXNpZGUuZ2RiYXIgaW1nIHsKICB3aWR0aDogMTI1cHg7CiAgaGVpZ2h0OiA4NXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMDsKICBtYXJnaW46IDhweCAxNXB4Owp9CgovKiBsaW5lIDkyNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnRpdGxlLXNsaWRlIGhncm91cCB7CiAgYm90dG9tOiAxMDBweDsKfQovKiBsaW5lIDkyNywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnRpdGxlLXNsaWRlIGhncm91cCBoMSB7CiAgZm9udC1zaXplOiA2NXB4OwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgbGV0dGVyLXNwYWNpbmc6IC0zcHg7CiAgY29sb3I6ICM1MTUxNTE7Cn0KLyogbGluZSA5MzQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCi50aXRsZS1zbGlkZSBoZ3JvdXAgaDIgewogIGZvbnQtc2l6ZTogMzRweDsKICBjb2xvcjogI2E5YTlhOTsKICBmb250LXdlaWdodDogaW5oZXJpdDsKfQovKiBsaW5lIDk0MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLnRpdGxlLXNsaWRlIGhncm91cCBwIHsKICBmb250LXNpemU6IDIwcHg7CiAgY29sb3I6ICM3OTc5Nzk7CiAgbGluZS1oZWlnaHQ6IDEuMzsKICBtYXJnaW4tdG9wOiAyZW07Cn0KCi8qIGxpbmUgOTQ5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoucXVvdGUgewogIGNvbG9yOiAjZTZlNmU2Owp9Ci8qIGxpbmUgOTUyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoucXVvdGUgLmF1dGhvciB7CiAgZm9udC1zaXplOiAyNHB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3R0b206IDgwcHg7CiAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLyogbGluZSA5NjEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCltkYXRhLWNvbmZpZy1jb250YWN0XSBhIHsKICBjb2xvcjogd2hpdGU7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQovKiBsaW5lIDk2NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KW2RhdGEtY29uZmlnLWNvbnRhY3RdIHNwYW4gewogIHdpZHRoOiAxMTVweDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIGxpbmUgOTc0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoub3ZlcnZpZXcucG9wdXAgLm5vdGUgewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQovKiBsaW5lIDk4MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZSB7CiAgZGlzcGxheTogYmxvY2s7CiAgY3Vyc29yOiBwb2ludGVyOwogIG9wYWNpdHk6IDAuNTsKICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCA1MCUgMCUsIDUwJSAxMDAlLCBjb2xvci1zdG9wKDAlLCAjZmZmZmZmKSwgY29sb3Itc3RvcCg4NSUsICNmZmZmZmYpLCBjb2xvci1zdG9wKDEwMCUsICNlNmU2ZTYpKTsKICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOwogIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CiAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKfQovKiBsaW5lIDk4MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5iYWNrZHJvcCB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci8qIGxpbmUgOTk2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwoub3ZlcnZpZXcgc2xpZGVzIHNsaWRlLmZhci1wYXN0LCAub3ZlcnZpZXcgc2xpZGVzIHNsaWRlLnBhc3QsIC5vdmVydmlldyBzbGlkZXMgc2xpZGUubmV4dCwgLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5mYXItbmV4dCwgLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5mYXItcGFzdCB7CiAgb3BhY2l0eTogMC41OwogIGRpc3BsYXk6IGJsb2NrOwp9Ci8qIGxpbmUgMTAwMSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5jdXJyZW50IHsKICBvcGFjaXR5OiAxOwp9Ci8qIGxpbmUgMTAwNywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KLm92ZXJ2aWV3IC5zbGlkZS1hcmVhIHsKICBkaXNwbGF5OiBub25lOwp9CgpAbWVkaWEgcHJpbnQgewogIC8qIGxpbmUgMTAxNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KICBzbGlkZXMgc2xpZGUgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCA1MCUgMCUsIDUwJSAxMDAlLCBjb2xvci1zdG9wKDAlLCAjZmZmZmZmKSwgY29sb3Itc3RvcCg4NSUsICNmZmZmZmYpLCBjb2xvci1zdG9wKDEwMCUsICNlNmU2ZTYpKTsKICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CiAgICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7CiAgICAtbW96LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OwogICAgLW1zLXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OwogICAgLW8tdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzOwogICAgdG9wOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgY29sb3I6ICM1NTU7CiAgfQogIC8qIGxpbmUgMTAzNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KICBzbGlkZXMgc2xpZGUuZmFyLXBhc3QsIHNsaWRlcyBzbGlkZS5wYXN0LCBzbGlkZXMgc2xpZGUubmV4dCwgc2xpZGVzIHNsaWRlLmZhci1uZXh0LCBzbGlkZXMgc2xpZGUuZmFyLXBhc3QsIHNsaWRlcyBzbGlkZS5jdXJyZW50IHsKICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgfQogIC8qIGxpbmUgMTA0MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KICBzbGlkZXMgc2xpZGUgLmJ1aWxkID4gKiB7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CiAgICAtbW96LXRyYW5zaXRpb246IG5vbmU7CiAgICAtbXMtdHJhbnNpdGlvbjogbm9uZTsKICAgIC1vLXRyYW5zaXRpb246IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBub25lOwogIH0KICAvKiBsaW5lIDEwNDUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCiAgc2xpZGVzIHNsaWRlIC5idWlsZCAudG8tYnVpbGQsCiAgc2xpZGVzIHNsaWRlIC5idWlsZCAuYnVpbGQtZmFkZSB7CiAgICBvcGFjaXR5OiAxOwogIH0KICAvKiBsaW5lIDEwNTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCiAgc2xpZGVzIHNsaWRlIC5hdXRvLWZhZGVpbiB7CiAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CiAgfQogIC8qIGxpbmUgMTA1NCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KICBzbGlkZXMgc2xpZGUuYmFja2Ryb3AgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KICAvKiBsaW5lIDEwNTgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCiAgc2xpZGVzIHNsaWRlIHRhYmxlLnJvd3MgewogICAgYm9yZGVyLXJpZ2h0OiAwOwogIH0KICAvKiBsaW5lIDEwNjMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCiAgc2xpZGVzIHNsaWRlW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgLyogbGluZSAxMDY4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwogIC5zbGlkZS1hcmVhIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBsaW5lIDEwNzIsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCiAgLnJlZmxlY3QgewogICAgLXdlYmtpdC1ib3gtcmVmbGVjdDogbm9uZTsKICAgIC1tb3otYm94LXJlZmxlY3Q6IG5vbmU7CiAgICAtby1ib3gtcmVmbGVjdDogbm9uZTsKICAgIC1tcy1ib3gtcmVmbGVjdDogbm9uZTsKICAgIGJveC1yZWZsZWN0OiBub25lOwogIH0KCiAgLyogbGluZSAxMDgwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwogIHByZSwgY29kZSB7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlICFpbXBvcnRhbnQ7CiAgfQp9Cg=="></link>
<link rel=stylesheet href="data:text/css;base64,QGltcG9ydCB1cmwoaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zK0NvbmRlbnNlZDo3MDB8U291cmNlK0NvZGUrUHJvOjUwMHxPcGVuK1NhbnN8T3N3YWxkKTsKCi8qIFN0eWxlcyBmb3IgVGFibGUgb2YgQ29udGVudHMgKi8KI2lvMjAxMi10b2MgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6MDsKICBsZWZ0OjEwcHg7CiAgei1pbmRleDogOTk5Owp9CiNpbzIwMTItdG9jIGF7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKI2lvMjAxMi10b2MgLm5hdi1waWxscyA+IC5hY3RpdmUgPiBhewogIGJhY2tncm91bmQtY29sb3I6IGRhcmtzbGF0ZWdyYXk7CiAgY29sb3I6IHllbGxvdzsKfQojaW8yMDEyLXRvYyBsaSB7CiAgbWFyZ2luLWJvdHRvbTogMGVtOwp9CgojaW8yMDEyLXRvYyBsaS5jdXJyZW50IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cn0KCi5saWNlbnNlIHsKICBmb250LXNpemU6IDE0cHg7CiAgY29sb3I6ICNhOWE5YTk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMzBweDsKICBsZWZ0OiA2MHB4Owp9CgoKLyogU3R5bGVzIGZvciBUaXRsZSBTbGlkZSAqLwoudGl0bGUtc2xpZGUgaGdyb3VwID4gaDF7CiAgZm9udC1mYW1pbHk6ICdPc3dhbGQnLCBzYW5zLXNlcmlmOwp9CgoudGl0bGUtc2xpZGUgaGdyb3VwID4gaDJ7CiAgZm9udC1mYW1pbHk6ICdPc3dhbGQnLCAnQ2FsaWJyaScsIHNhbnMtc2VyaWY7Cn0KCi8qIEZvbnRzIGFuZCBTcGFjaW5nICovCmFydGljbGUgcCwgYXJ0aWNsZSBsaSwgYXJ0aWNsZSBsaS5idWlsZCwgc2VjdGlvbiBwLCBzZWN0aW9uIGxpewogIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywnSGVsdmV0aWNhJywgJ0NyaW1zb24gVGV4dCcsICdHYXJhbW9uZCcsICAnUGFsYXRpbm8nLCBzYW5zLXNlcmlmOwogIHRleHQtYWxpZ246IGp1c3RpZnk7CiAgZm9udC1zaXplOjIycHg7CiAgbGluZS1oZWlnaHQ6IDEuNWVtOwogIGNvbG9yOiAjNDQ0Owp9CgpzbGlkZTpub3QoLnNlZ3VlKSBoMnsKICBmb250LWZhbWlseTogJ0NhbGlicmknLCBBcmlhbCwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDUycHg7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtdHJhbnNmb3JtOiBub3JtYWw7CiAgbGV0dGVyLXNwYWNpbmc6IC0ycHg7CiAgbGluZS1oZWlnaHQ6IDEuMmVtOwovKiAgY29sb3I6ICMxOTM0NDE7Ki8KLyogIGNvbG9yOiAjMDI1NzREOyovCiAgY29sb3I6ICNDQzI5MDQ7Cn0KCi8qIFJlZHVjZSBTcGFjZSBiZXR3ZWVuIFRpdGxlIGFuZCBCb2R5ICovCnNsaWRlcyA+IHNsaWRlID4gaGdyb3VwICsgYXJ0aWNsZSB7CiAgbWFyZ2luLXRvcDogMTVweDsKfQoKLyogUmVtb3ZlIEJvcmRlciwgTWFyZ2lucyBhbmQgUGFkZGluZyBmcm9tIGlmcmFtZSAqLwppZnJhbWUgewogIGJvcmRlcjogbm9uZTsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKfQoKLyogS25pdHIgSW1hZ2VzICovCi5yaW1hZ2UubGVmdCB7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoucmltYWdlLnJpZ2h0IHsKICB0ZXh0LWFsaWduOiByaWdodDsKfQoucmltYWdlLmNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgovKiBRdW90ZXMgYW5kIFNob3V0IChmb3IgaW8yMDEyLCBjdXN0b20pICovCmFydGljbGUgcSB7CiAgZm9udC1mYW1pbHk6ICdDcmltc29uIFRleHQnLCBzYW5zLXNlcmlmOwp9CgpxIHsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDQ0cHg7CiAgbGluZS1oZWlnaHQ6IDU2cHg7CiAgbWFyZ2luLWxlZnQ6IDUwcHg7CiAgbWFyZ2luLXRvcDogMTAwcHg7CiAgbWFyZ2luLXJpZ2h0OiAxNTBweDsKfQoKcTo6YmVmb3JlIHsKICBjb250ZW50OiAn4oCcJzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1sZWZ0OiAtMi4xZW07CiAgd2lkdGg6IDJlbTsKICB0ZXh0LWFsaWduOiByaWdodDsKICBmb250LXNpemU6IDkwcHg7CiAgY29sb3I6IHNpbHZlcjsKfQoKcTo6YWZ0ZXIgewogIGNvbnRlbnQ6ICfigJ0nOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBtYXJnaW4tbGVmdDogLjFlbTsKICBmb250LXNpemU6IDkwcHg7CiAgY29sb3I6IHNpbHZlcjsKfQoKZGl2LmF1dGhvciB7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgZm9udC1zaXplOiA0MHB4OwogIG1hcmdpbi10b3A6IDIwcHg7CiAgbWFyZ2luLXJpZ2h0OiAxNTBweDsKfQoKZGl2LmF1dGhvcjo6YmVmb3JlIHsKICBjb250ZW50OiAn4oCUJzsKfQoKcS5zaG91dDpiZWZvcmUgewogIGNvbnRlbnQ6ICcnOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBtYXJnaW4tbGVmdDogLTAuNWVtOwp9CgpxLnNob3V0OmFmdGVyIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbWFyZ2luLWxlZnQ6IDAuMWVtOwp9CgovKiBUYWJsZXMgKi8KdGFibGUgY2FwdGlvbnsKICBtYXJnaW4tdG9wOiAyMHB0OwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgZm9udC1mYW1pbHk6ICJUcmVidWNoZXQgTVMiLCBHYXJ1ZGEsIHNhbnMtc2VyaWY7Cn0KCnRhYmxlIHRoIHsKICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKfQoKLyogVGFibGVzICovCgp0YWJsZSB7CiAgYm9yZGVyOiBub25lOwogIHdpZHRoOiAxMDAlOwogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgZm9udC1zaXplOiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAzMnB4OwogIGZvbnQtZmFtaWx5OiAnVHJlYnVjaGV0IE1TJzsKICBmb250LXdlaWdodDogYm9sZGVyOwogIGNvbG9yOiByZ2IoMTAyLCAxMDIsIDEwMik7Cn0KdGFibGUgdGhlYWQgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRUFEOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRUFEOwp9CnRhYmxlIHRoLCB0YWJsZSB0ZCwgdGFibGUgY2FwdGlvbiB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDJwdCA2cHQ7CiAgdGV4dC1hbGlnbjogbGVmdDsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CnRhYmxlIHRoIHsKICBiYWNrZ3JvdW5kOiAjQ0ZDRUJEOwogIGNvbG9yOiAjNTc1NDAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KdGFibGUgdGQgewogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0ZDRUJEOwp9CnRhYmxlIHRyOm50aC1jaGlsZCgybisxKSB7Ci8qICBiYWNrZ3JvdW5kOiAjRThGMkZGOyAqLwogIGJhY2tncm91bmQ6ICNFRkVFREQ7Cn0KCi8qIFN0eWxpbmcgZm9yIE9yZGVyZWQgTGlzdHMgKG9ubHkgZm9yIGlvMjAxMikgKi8KCm9sIHsKICBtYXJnaW4tbGVmdDogMS4yZW07CiAgbWFyZ2luLWJvdHRvbTogMWVtOwogIHBvc3Rpb246IHJlbGF0aXZlOwp9CgpvbCBsaSB7CiAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgZm9udC1mYW1pbHk6ICJPcGVuIFNhbnMiOwp9CgpvbCBsaSBvbCB7CiAgbWFyZ2luLWxlZnQ6IDAuNWVtOwogIG1hcmdpbi1ib3R0b206IDA7Cn0KCm9sLCB1bCB7CiAgbWFyZ2luLXRvcDogLjVlbTsKfQoKb2wgewogIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDsKfQoKLypHaXRodWIgUmliYm9uIFRlc3QqLwovKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY2ljY2FsZS9jc3MzLWdpdGh1Yi1yaWJib24gKi8KLyogRGVmaW5lIGNsYXNzZXMgZm9yIGV4YW1wbGUsIGRlZmluaXRpb24sIHByb2JsZW0gZXRjLiAqLwovKiBDaG9vc2UgbWVhbmluZ2Z1bCBjb2xvcnMgZm9yIGJhY2tncm91bmQgYW5kIHRleHQgKi8KCi5leGFtcGxlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxNjIxOwogIHRvcDogMS4yZW07CiAgcmlnaHQ6IC0zLjJlbTsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggIzFkMjEyZSBpbnNldCwwIDAgMnB4IDFweCAjZmZmIGluc2V0LDAgMCAxZW0gIzg4ODsKICAtbW96LWJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGNvbG9yOiAjRkYwOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IC42ZW0gMy41ZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIGZvbnQ6IGJvbGQgLjgyZW0gc2Fucy1zZXJpZjsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIHRleHQtc2hhZG93OiAxcHggLTFweCA4cHggcmdiYSgwLDAsMCwwLjYwKTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5kZWZpbml0aW9uIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTAwOwogIHRvcDogMS4yZW07CiAgcmlnaHQ6IC0zLjJlbTsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggIzFkMjEyZSBpbnNldCwwIDAgMnB4IDFweCAjZmZmIGluc2V0LDAgMCAxZW0gIzg4ODsKICAtbW96LWJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjMWQyMTJlIGluc2V0LDAgMCAycHggMXB4ICNmZmYgaW5zZXQsMCAwIDFlbSAjODg4OwogIGNvbG9yOiAjRkZGOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IC42ZW0gMy41ZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIGZvbnQ6IGJvbGQgLjgyZW0gc2Fucy1zZXJpZjsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIHRleHQtc2hhZG93OiAxcHggLTFweCA4cHggcmdiYSgwLDAsMCwwLjYwKTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCgovKiBQYXN0ZWQgZnJvbSBDdXN0b20uY3NzICovCmFzaWRlLmdiYXIgaW1nIHsKICB3aWR0aDogMTc1cHg7Cn0KCgpkaXYubW9kYWwtYm9keSBwcmV7CiAgd2lkdGg6IDk1JTsKICBsZWZ0OiAwcHg7Cn0KCi5wYWdpbmF0aW9uIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAtNXB4OwogIGxlZnQ6MTEwcHg7Cn0KCi5wYWdpbmF0aW9uIHVsIGxpOmJlZm9yZSB7CiAgY29udGVudDogIiI7Cn0KCmJvZHkgewogIGZvbnQtZmFtaWx5OiAiT3BlbiBTYW5zIjsKICBjb2xvcjogIzQ0NDsKfQoKcCB7CiAgdGV4dC1hbGlnbjoganVzdGlmeTsKICBsaW5lLWhlaWdodDogMS41ZW07Cn0KLyogUGxhY2UgVmlkZW8gb24gVG9wIFJpZ2h0ICovCi8qIEZJWE1FOiBNb3ZlIENTUyB0byBjc3MvcG9wY29ybi5jc3MgKi8Kc2VjdGlvbi52aWRlbyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICByaWdodDogMDsKICB6LWluZGV4OiAxMDAwOwp9CgoKLyogU21hbGxlciBjb2RlIGZvbnRzIGluIG1vZGFsIHBvcHVwICovCi5tb2RhbCBwcmUgY29kZSB7CiAgZm9udC1zaXplOiAxNnB4Owp9CgppbWcuY2VudGVyIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IGF1dG8gYXV0bzsKfQoKYm9keSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKfQoucXVpei1vcHRpb24gbGFiZWx7CiAgZGlzcGxheTogaW5saW5lOwogIGZvbnQtc2l6ZTogMWVtOwp9CnNsaWRlLnNlZ3VlIGgyewogZm9udC1mYW1pbHk6ICJPcGVuIFNhbnMgQ29uZGVuc2VkIjsKIGZvbnQtd2VpZ2h0OiA3MDA7Cn0Kc2xpZGU6bm90KC5zZWd1ZSkgIGgyewogZm9udC1mYW1pbHk6ICJPcGVuIFNhbnMgQ29uZGVuc2VkIjsKIGZvbnQtd2VpZ2h0OiA3MDA7CiBjb2xvcjogZGFya3NsYXRlZ3JheTsKfQphcnRpY2xlIHAgewogIGZvbnQtZmFtaWx5OiAiT3BlbiBTYW5zIgp9Cgpjb2RlIHsKICBmb250LXNpemU6IDEwMCU7CiAgZm9udC1mYW1pbHk6ICJTb3VyY2UgQ29kZSBQcm8iLCBtb25vc3BhY2U7CiAgY29sb3I6IGRhcmtyZWQ7Cn0KcHJlIGNvZGUgewogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CiAgYm9yZGVyLXJhZGl1czogNXB4Owp9CgojZ2xpbW1lciBpZnJhbWUgewogIHdpZHRoOiAxMDAlOwp9CgoudGl0bGUtc2xpZGUgewogIGJhY2tncm91bmQtY29sb3I6ICNDQkU3QTU7IC8qICNFREUwQ0Y7IDsgI0NBOUY5RCovCiAgLyogYmFja2dyb3VuZC1pbWFnZTp1cmwoaHR0cDovL2dvby5nbC9FcFhsbik7ICovCn0KCi50aXRsZS1zbGlkZSBoZ3JvdXAgPiBoMXsKIGZvbnQtZmFtaWx5OiAnT3N3YWxkJywgJ0hlbHZldGljYScsIHNhbnNlcmlmOyAKfQoKLnRpdGxlLXNsaWRlIGhncm91cCA+IGgxLCAKLnRpdGxlLXNsaWRlIGhncm91cCA+IGgyIHsKICBjb2xvcjogIzUzNUU0MyA7ICAvKiA7ICNFRjUxNTAqLwp9CgoK"></link>
<link rel=stylesheet href="data:text/css;base64,LyoKCk9yZ2luYWwgU3R5bGUgZnJvbSBldGhhbnNjaG9vbm92ZXIuY29tL3NvbGFyaXplZCAoYykgSmVyZW15IEh1bGwgPHNvdXJkcnVtc0BnbWFpbC5jb20+CgoqLwoKcHJlIGNvZGUgewogIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsKICBiYWNrZ3JvdW5kOiAjZmRmNmUzOyBjb2xvcjogIzY1N2I4MzsKfQoKcHJlIC5jb21tZW50LApwcmUgLnRlbXBsYXRlX2NvbW1lbnQsCnByZSAuZGlmZiAuaGVhZGVyLApwcmUgLmRvY3R5cGUsCnByZSAucGksCnByZSAubGlzcCAuc3RyaW5nLApwcmUgLmphdmFkb2MgewogIGNvbG9yOiAjOTNhMWExOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKcHJlIC5rZXl3b3JkLApwcmUgLndpbnV0aWxzLApwcmUgLm1ldGhvZCwKcHJlIC5hZGRpdGlvbiwKcHJlIC5jc3MgLnRhZywKcHJlIC5yZXF1ZXN0LApwcmUgLnN0YXR1cyB7CiAgY29sb3I6ICM4NTk5MDA7Cn0KCnByZSAubnVtYmVyLApwcmUgLmNvbW1hbmQsCnByZSAuc3RyaW5nLApwcmUgLnRhZyAudmFsdWUsCnByZSAucGhwZG9jLApwcmUgLnRleCAuZm9ybXVsYSwKcHJlIC5yZWdleHAsCnByZSAuaGV4Y29sb3IgewogIGNvbG9yOiAjMmFhMTk4Owp9CgpwcmUgLnRpdGxlLApwcmUgLmxvY2FsdmFycywKcHJlIC5jaHVuaywKcHJlIC5kZWNvcmF0b3IsCnByZSAuYnVpbHRpbiwKcHJlIC5idWlsdF9pbiwKcHJlIC5pZGVudGlmaWVyLApwcmUgLnRpdGxlIC5rZXltZXRob2RzLApwcmUgLnZoZGwgLmxpdGVyYWwsCnByZSAuaWQgewogIGNvbG9yOiAjMjY4YmQyOwp9CgpwcmUgLmF0dHJpYnV0ZSwKcHJlIC52YXJpYWJsZSwKcHJlIC5pbnN0YW5jZXZhciwKcHJlIC5saXNwIC5ib2R5LApwcmUgLnNtYWxsdGFsayAubnVtYmVyLApwcmUgLmNvbnN0YW50LApwcmUgLmNsYXNzIC50aXRsZSwKcHJlIC5wYXJlbnQsCnByZSAuaGFza2VsbCAudHlwZSB7CiAgY29sb3I6ICNiNTg5MDA7Cn0KCnByZSAucHJlcHJvY2Vzc29yLApwcmUgLnByZXByb2Nlc3NvciAua2V5d29yZCwKcHJlIC5zaGViYW5nLApwcmUgLnN5bWJvbCwKcHJlIC5kaWZmIC5jaGFuZ2UsCnByZSAuc3BlY2lhbCwKcHJlIC5rZXltZXRob2RzLApwcmUgLmF0dHJfc2VsZWN0b3IsCnByZSAuaW1wb3J0YW50LApwcmUgLnN1YnN0LApwcmUgLmNkYXRhIHsKICBjb2xvcjogI2NiNGIxNjsKfQoKcHJlIC5kZWxldGlvbiB7CiAgY29sb3I6ICNkYzMyMmY7Cn0KCnByZSAudGV4IC5mb3JtdWxhIHsKICBiYWNrZ3JvdW5kOiAjZWVlOGQ1Owp9Cg=="></link>
<!-- Grab CDN jQuery, fall back to local if offline
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.min.js"></script>
<script>window.jQuery || document.write('<script src="libraries/widgets/quiz/js/jquery.js"><\/script>')</script>
<script data-main="libraries/frameworks/io2012/js/slides"
src="libraries/frameworks/io2012/js/require-1.0.8.min.js">
</script>
-->
<script src="data:application/javascript;base64,LyohIGpRdWVyeSB2MS44LjIganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLw0KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gRyhhKXt2YXIgYj1GW2FdPXt9O3JldHVybiBwLmVhY2goYS5zcGxpdChzKSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifWZ1bmN0aW9uIEooYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoSSwiLSQxIikudG9Mb3dlckNhc2UoKTtkPWEuZ2V0QXR0cmlidXRlKGUpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7dHJ5e2Q9ZD09PSJ0cnVlIj8hMDpkPT09ImZhbHNlIj8hMTpkPT09Im51bGwiP251bGw6K2QrIiI9PT1kPytkOkgudGVzdChkKT9wLnBhcnNlSlNPTihkKTpkfWNhdGNoKGYpe31wLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIEsoYSl7dmFyIGI7Zm9yKGIgaW4gYSl7aWYoYj09PSJkYXRhIiYmcC5pc0VtcHR5T2JqZWN0KGFbYl0pKWNvbnRpbnVlO2lmKGIhPT0idG9KU09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBiYSgpe3JldHVybiExfWZ1bmN0aW9uIGJiKCl7cmV0dXJuITB9ZnVuY3Rpb24gYmgoYSl7cmV0dXJuIWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIGJpKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJmEubm9kZVR5cGUhPT0xKTtyZXR1cm4gYX1mdW5jdGlvbiBiaihhLGIsYyl7Yj1ifHwwO2lmKHAuaXNGdW5jdGlvbihiKSlyZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1wLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihiZS50ZXN0KGIpKXJldHVybiBwLmZpbHRlcihiLGQsIWMpO2I9cC5maWx0ZXIoYixkKX1yZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gcC5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gYmsoYSl7dmFyIGI9Ymwuc3BsaXQoInwiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gYkMoYSxiKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChiKSl9ZnVuY3Rpb24gYkQoYSxiKXtpZihiLm5vZGVUeXBlIT09MXx8IXAuaGFzRGF0YShhKSlyZXR1cm47dmFyIGMsZCxlLGY9cC5fZGF0YShhKSxnPXAuX2RhdGEoYixmKSxoPWYuZXZlbnRzO2lmKGgpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoYyBpbiBoKWZvcihkPTAsZT1oW2NdLmxlbmd0aDtkPGU7ZCsrKXAuZXZlbnQuYWRkKGIsYyxoW2NdW2RdKX1nLmRhdGEmJihnLmRhdGE9cC5leHRlbmQoe30sZy5kYXRhKSl9ZnVuY3Rpb24gYkUoYSxiKXt2YXIgYztpZihiLm5vZGVUeXBlIT09MSlyZXR1cm47Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0ZXMmJmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGM9PT0ib2JqZWN0Ij8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLHAuc3VwcG9ydC5odG1sNUNsb25lJiZhLmlubmVySFRNTCYmIXAudHJpbShiLmlubmVySFRNTCkmJihiLmlubmVySFRNTD1hLmlubmVySFRNTCkpOmM9PT0iaW5wdXQiJiZidi50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOmM9PT0ib3B0aW9uIj9iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOmM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIj9iLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZTpjPT09InNjcmlwdCImJmIudGV4dCE9PWEudGV4dCYmKGIudGV4dD1hLnRleHQpLGIucmVtb3ZlQXR0cmlidXRlKHAuZXhwYW5kbyl9ZnVuY3Rpb24gYkYoYSl7cmV0dXJuIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9InVuZGVmaW5lZCI/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gYkcoYSl7YnYudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIGJZKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1iVy5sZW5ndGg7d2hpbGUoZS0tKXtiPWJXW2VdK2M7aWYoYiBpbiBhKXJldHVybiBifXJldHVybiBkfWZ1bmN0aW9uIGJaKGEsYil7cmV0dXJuIGE9Ynx8YSxwLmNzcyhhLCJkaXNwbGF5Iik9PT0ibm9uZSJ8fCFwLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX1mdW5jdGlvbiBiJChhLGIpe3ZhciBjLGQsZT1bXSxmPTAsZz1hLmxlbmd0aDtmb3IoO2Y8ZztmKyspe2M9YVtmXTtpZighYy5zdHlsZSljb250aW51ZTtlW2ZdPXAuX2RhdGEoYywib2xkZGlzcGxheSIpLGI/KCFlW2ZdJiZjLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSImJihjLnN0eWxlLmRpc3BsYXk9IiIpLGMuc3R5bGUuZGlzcGxheT09PSIiJiZiWihjKSYmKGVbZl09cC5fZGF0YShjLCJvbGRkaXNwbGF5IixjYyhjLm5vZGVOYW1lKSkpKTooZD1iSChjLCJkaXNwbGF5IiksIWVbZl0mJmQhPT0ibm9uZSImJnAuX2RhdGEoYywib2xkZGlzcGxheSIsZCkpfWZvcihmPTA7ZjxnO2YrKyl7Yz1hW2ZdO2lmKCFjLnN0eWxlKWNvbnRpbnVlO2lmKCFifHxjLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSJ8fGMuc3R5bGUuZGlzcGxheT09PSIiKWMuc3R5bGUuZGlzcGxheT1iP2VbZl18fCIiOiJub25lIn1yZXR1cm4gYX1mdW5jdGlvbiBiXyhhLGIsYyl7dmFyIGQ9YlAuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8InB4Iik6Yn1mdW5jdGlvbiBjYShhLGIsYyxkKXt2YXIgZT1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OmI9PT0id2lkdGgiPzE6MCxmPTA7Zm9yKDtlPDQ7ZSs9MiljPT09Im1hcmdpbiImJihmKz1wLmNzcyhhLGMrYlZbZV0sITApKSxkPyhjPT09ImNvbnRlbnQiJiYoZi09cGFyc2VGbG9hdChiSChhLCJwYWRkaW5nIitiVltlXSkpfHwwKSxjIT09Im1hcmdpbiImJihmLT1wYXJzZUZsb2F0KGJIKGEsImJvcmRlciIrYlZbZV0rIldpZHRoIikpfHwwKSk6KGYrPXBhcnNlRmxvYXQoYkgoYSwicGFkZGluZyIrYlZbZV0pKXx8MCxjIT09InBhZGRpbmciJiYoZis9cGFyc2VGbG9hdChiSChhLCJib3JkZXIiK2JWW2VdKyJXaWR0aCIpKXx8MCkpO3JldHVybiBmfWZ1bmN0aW9uIGNiKGEsYixjKXt2YXIgZD1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGU9ITAsZj1wLnN1cHBvcnQuYm94U2l6aW5nJiZwLmNzcyhhLCJib3hTaXppbmciKT09PSJib3JkZXItYm94IjtpZihkPD0wfHxkPT1udWxsKXtkPWJIKGEsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXTtpZihiUS50ZXN0KGQpKXJldHVybiBkO2U9ZiYmKHAuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8ZD09PWEuc3R5bGVbYl0pLGQ9cGFyc2VGbG9hdChkKXx8MH1yZXR1cm4gZCtjYShhLGIsY3x8KGY/ImJvcmRlciI6ImNvbnRlbnQiKSxlKSsicHgifWZ1bmN0aW9uIGNjKGEpe2lmKGJTW2FdKXJldHVybiBiU1thXTt2YXIgYj1wKCI8IithKyI+IikuYXBwZW5kVG8oZS5ib2R5KSxjPWIuY3NzKCJkaXNwbGF5Iik7Yi5yZW1vdmUoKTtpZihjPT09Im5vbmUifHxjPT09IiIpe2JJPWUuYm9keS5hcHBlbmRDaGlsZChiSXx8cC5leHRlbmQoZS5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSx7ZnJhbWVCb3JkZXI6MCx3aWR0aDowLGhlaWdodDowfSkpO2lmKCFiSnx8IWJJLmNyZWF0ZUVsZW1lbnQpYko9KGJJLmNvbnRlbnRXaW5kb3d8fGJJLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsYkoud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLGJKLmNsb3NlKCk7Yj1iSi5ib2R5LmFwcGVuZENoaWxkKGJKLmNyZWF0ZUVsZW1lbnQoYSkpLGM9YkgoYiwiZGlzcGxheSIpLGUuYm9keS5yZW1vdmVDaGlsZChiSSl9cmV0dXJuIGJTW2FdPWMsY31mdW5jdGlvbiBjaShhLGIsYyxkKXt2YXIgZTtpZihwLmlzQXJyYXkoYikpcC5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxjZS50ZXN0KGEpP2QoYSxlKTpjaShhKyJbIisodHlwZW9mIGU9PSJvYmplY3QiP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZwLnR5cGUoYik9PT0ib2JqZWN0Iilmb3IoZSBpbiBiKWNpKGErIlsiK2UrIl0iLGJbZV0sYyxkKTtlbHNlIGQoYSxiKX1mdW5jdGlvbiBjeihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXt0eXBlb2YgYiE9InN0cmluZyImJihjPWIsYj0iKiIpO3ZhciBkLGUsZixnPWIudG9Mb3dlckNhc2UoKS5zcGxpdChzKSxoPTAsaT1nLmxlbmd0aDtpZihwLmlzRnVuY3Rpb24oYykpZm9yKDtoPGk7aCsrKWQ9Z1toXSxmPS9eXCsvLnRlc3QoZCksZiYmKGQ9ZC5zdWJzdHIoMSl8fCIqIiksZT1hW2RdPWFbZF18fFtdLGVbZj8idW5zaGlmdCI6InB1c2giXShjKX19ZnVuY3Rpb24gY0EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoLGk9YVtmXSxqPTAsaz1pP2kubGVuZ3RoOjAsbD1hPT09Y3Y7Zm9yKDtqPGsmJihsfHwhaCk7aisrKWg9aVtqXShjLGQsZSksdHlwZW9mIGg9PSJzdHJpbmciJiYoIWx8fGdbaF0/aD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGgpLGg9Y0EoYSxjLGQsZSxoLGcpKSk7cmV0dXJuKGx8fCFoKSYmIWdbIioiXSYmKGg9Y0EoYSxjLGQsZSwiKiIsZykpLGh9ZnVuY3Rpb24gY0IoYSxjKXt2YXIgZCxlLGY9cC5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGMpY1tkXSE9PWImJigoZltkXT9hOmV8fChlPXt9KSlbZF09Y1tkXSk7ZSYmcC5leHRlbmQoITAsYSxlKX1mdW5jdGlvbiBjQyhhLGMsZCl7dmFyIGUsZixnLGgsaT1hLmNvbnRlbnRzLGo9YS5kYXRhVHlwZXMsaz1hLnJlc3BvbnNlRmllbGRzO2ZvcihmIGluIGspZiBpbiBkJiYoY1trW2ZdXT1kW2ZdKTt3aGlsZShqWzBdPT09IioiKWouc2hpZnQoKSxlPT09YiYmKGU9YS5taW1lVHlwZXx8Yy5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpO2lmKGUpZm9yKGYgaW4gaSlpZihpW2ZdJiZpW2ZdLnRlc3QoZSkpe2oudW5zaGlmdChmKTticmVha31pZihqWzBdaW4gZClnPWpbMF07ZWxzZXtmb3IoZiBpbiBkKXtpZighalswXXx8YS5jb252ZXJ0ZXJzW2YrIiAiK2pbMF1dKXtnPWY7YnJlYWt9aHx8KGg9Zil9Zz1nfHxofWlmKGcpcmV0dXJuIGchPT1qWzBdJiZqLnVuc2hpZnQoZyksZFtnXX1mdW5jdGlvbiBjRChhLGIpe3ZhciBjLGQsZSxmLGc9YS5kYXRhVHlwZXMuc2xpY2UoKSxoPWdbMF0saT17fSxqPTA7YS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFGaWx0ZXIoYixhLmRhdGFUeXBlKSk7aWYoZ1sxXSlmb3IoYyBpbiBhLmNvbnZlcnRlcnMpaVtjLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1tjXTtmb3IoO2U9Z1srK2pdOylpZihlIT09IioiKXtpZihoIT09IioiJiZoIT09ZSl7Yz1pW2grIiAiK2VdfHxpWyIqICIrZV07aWYoIWMpZm9yKGQgaW4gaSl7Zj1kLnNwbGl0KCIgIik7aWYoZlsxXT09PWUpe2M9aVtoKyIgIitmWzBdXXx8aVsiKiAiK2ZbMF1dO2lmKGMpe2M9PT0hMD9jPWlbZF06aVtkXSE9PSEwJiYoZT1mWzBdLGcuc3BsaWNlKGotLSwwLGUpKTticmVha319fWlmKGMhPT0hMClpZihjJiZhWyJ0aHJvd3MiXSliPWMoYik7ZWxzZSB0cnl7Yj1jKGIpfWNhdGNoKGspe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmM/azoiTm8gY29udmVyc2lvbiBmcm9tICIraCsiIHRvICIrZX19fWg9ZX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19ZnVuY3Rpb24gY0woKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY00oKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjVSgpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y049Yn0sMCksY049cC5ub3coKX1mdW5jdGlvbiBjVihhLGIpe3AuZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9KGNUW2JdfHxbXSkuY29uY2F0KGNUWyIqIl0pLGU9MCxmPWQubGVuZ3RoO2Zvcig7ZTxmO2UrKylpZihkW2VdLmNhbGwoYSxiLGMpKXJldHVybn0pfWZ1bmN0aW9uIGNXKGEsYixjKXt2YXIgZCxlPTAsZj0wLGc9Y1MubGVuZ3RoLGg9cC5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7dmFyIGI9Y058fGNVKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD0xLShjL2ouZHVyYXRpb258fDApLGU9MCxmPWoudHdlZW5zLmxlbmd0aDtmb3IoO2U8ZjtlKyspai50d2VlbnNbZV0ucnVuKGQpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixkLGNdKSxkPDEmJmY/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOnAuZXh0ZW5kKHt9LGIpLG9wdHM6cC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpjTnx8Y1UoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMsZCl7dmFyIGU9cC5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGUpLGV9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7Zm9yKDtjPGQ7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj9oLnJlc29sdmVXaXRoKGEsW2osYl0pOmgucmVqZWN0V2l0aChhLFtqLGJdKSx0aGlzfX0pLGs9ai5wcm9wcztjWChrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtmb3IoO2U8ZztlKyspe2Q9Y1NbZV0uY2FsbChqLGEsayxqLm9wdHMpO2lmKGQpcmV0dXJuIGR9cmV0dXJuIGNWKGosaykscC5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaikscC5meC50aW1lcihwLmV4dGVuZChpLHthbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlLGVsZW06YX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBjWChhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSl7ZD1wLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLHAuaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9cC5jc3NIb29rc1tkXTtpZihnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX19ZnVuY3Rpb24gY1koYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbD10aGlzLG09YS5zdHlsZSxuPXt9LG89W10scT1hLm5vZGVUeXBlJiZiWihhKTtjLnF1ZXVlfHwoaj1wLl9xdWV1ZUhvb2tzKGEsImZ4Iiksai51bnF1ZXVlZD09bnVsbCYmKGoudW5xdWV1ZWQ9MCxrPWouZW1wdHkuZmlyZSxqLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtqLnVucXVldWVkfHxrKCl9KSxqLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2oudW5xdWV1ZWQtLSxwLnF1ZXVlKGEsImZ4IikubGVuZ3RofHxqLmVtcHR5LmZpcmUoKX0pfSkpLGEubm9kZVR5cGU9PT0xJiYoImhlaWdodCJpbiBifHwid2lkdGgiaW4gYikmJihjLm92ZXJmbG93PVttLm92ZXJmbG93LG0ub3ZlcmZsb3dYLG0ub3ZlcmZsb3dZXSxwLmNzcyhhLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmcC5jc3MoYSwiZmxvYXQiKT09PSJub25lIiYmKCFwLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8Y2MoYS5ub2RlTmFtZSk9PT0iaW5saW5lIj9tLmRpc3BsYXk9ImlubGluZS1ibG9jayI6bS56b29tPTEpKSxjLm92ZXJmbG93JiYobS5vdmVyZmxvdz0iaGlkZGVuIixwLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8bC5kb25lKGZ1bmN0aW9uKCl7bS5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLG0ub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0sbS5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKXtmPWJbZF07aWYoY1AuZXhlYyhmKSl7ZGVsZXRlIGJbZF07aWYoZj09PShxPyJoaWRlIjoic2hvdyIpKWNvbnRpbnVlO28ucHVzaChkKX19Zz1vLmxlbmd0aDtpZihnKXtoPXAuX2RhdGEoYSwiZnhzaG93Iil8fHAuX2RhdGEoYSwiZnhzaG93Iix7fSkscT9wKGEpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXtwKGEpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciBiO3AucmVtb3ZlRGF0YShhLCJmeHNob3ciLCEwKTtmb3IoYiBpbiBuKXAuc3R5bGUoYSxiLG5bYl0pfSk7Zm9yKGQ9MDtkPGc7ZCsrKWU9b1tkXSxpPWwuY3JlYXRlVHdlZW4oZSxxP2hbZV06MCksbltlXT1oW2VdfHxwLnN0eWxlKGEsZSksZSBpbiBofHwoaFtlXT1pLnN0YXJ0LHEmJihpLmVuZD1pLnN0YXJ0LGkuc3RhcnQ9ZT09PSJ3aWR0aCJ8fGU9PT0iaGVpZ2h0Ij8xOjApKX19ZnVuY3Rpb24gY1ooYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGNaLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9ZnVuY3Rpb24gYyQoYSxiKXt2YXIgYyxkPXtoZWlnaHQ6YX0sZT0wO2I9Yj8xOjA7Zm9yKDtlPDQ7ZSs9Mi1iKWM9YlZbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBkYShhKXtyZXR1cm4gcC5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfXZhciBjLGQsZT1hLmRvY3VtZW50LGY9YS5sb2NhdGlvbixnPWEubmF2aWdhdG9yLGg9YS5qUXVlcnksaT1hLiQsaj1BcnJheS5wcm90b3R5cGUucHVzaCxrPUFycmF5LnByb3RvdHlwZS5zbGljZSxsPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLG09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1TdHJpbmcucHJvdG90eXBlLnRyaW0scD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgcC5mbi5pbml0KGEsYixjKX0scT0vW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLHI9L1xTLyxzPS9ccysvLHQ9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLHU9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLHY9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx3PS9eW1xdLDp7fVxzXSokLyx4PS8oPzpefDp8LCkoPzpccypcWykrL2cseT0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csej0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkvZyxBPS9eLW1zLS8sQj0vLShbXGRhLXpdKS9naSxDPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LEQ9ZnVuY3Rpb24oKXtlLmFkZEV2ZW50TGlzdGVuZXI/KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRCwhMSkscC5yZWFkeSgpKTplLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoZS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixEKSxwLnJlYWR5KCkpfSxFPXt9O3AuZm49cC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAsaW5pdDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoLGk7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSlyZXR1cm4gdGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXM7aWYodHlwZW9mIGE9PSJzdHJpbmciKXthLmNoYXJBdCgwKT09PSI8IiYmYS5jaGFyQXQoYS5sZW5ndGgtMSk9PT0iPiImJmEubGVuZ3RoPj0zP2Y9W251bGwsYSxudWxsXTpmPXUuZXhlYyhhKTtpZihmJiYoZlsxXXx8IWMpKXtpZihmWzFdKXJldHVybiBjPWMgaW5zdGFuY2VvZiBwP2NbMF06YyxpPWMmJmMubm9kZVR5cGU/Yy5vd25lckRvY3VtZW50fHxjOmUsYT1wLnBhcnNlSFRNTChmWzFdLGksITApLHYudGVzdChmWzFdKSYmcC5pc1BsYWluT2JqZWN0KGMpJiZ0aGlzLmF0dHIuY2FsbChhLGMsITApLHAubWVyZ2UodGhpcyxhKTtnPWUuZ2V0RWxlbWVudEJ5SWQoZlsyXSk7aWYoZyYmZy5wYXJlbnROb2RlKXtpZihnLmlkIT09ZlsyXSlyZXR1cm4gZC5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1nfXJldHVybiB0aGlzLmNvbnRleHQ9ZSx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4hY3x8Yy5qcXVlcnk/KGN8fGQpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihjKS5maW5kKGEpfXJldHVybiBwLmlzRnVuY3Rpb24oYSk/ZC5yZWFkeShhKTooYS5zZWxlY3RvciE9PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCkscC5tYWtlQXJyYXkoYSx0aGlzKSl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS44LjIiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gay5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/dGhpcy50b0FycmF5KCk6YTwwP3RoaXNbdGhpcy5sZW5ndGgrYV06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gZC5wcmV2T2JqZWN0PXRoaXMsZC5jb250ZXh0PXRoaXMuY29udGV4dCxiPT09ImZpbmQiP2Quc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK2M6YiYmKGQuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrYisiKCIrYysiKSIpLGR9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcC5lYWNoKHRoaXMsYSxiKX0scmVhZHk6ZnVuY3Rpb24oYSl7cmV0dXJuIHAucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sZXE6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9K2EsYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLGErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGsuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsay5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aixzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0scC5mbi5pbml0LnByb3RvdHlwZT1wLmZuLHAuZXh0ZW5kPXAuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGUsZixnLGg9YXJndW1lbnRzWzBdfHx7fSxpPTEsaj1hcmd1bWVudHMubGVuZ3RoLGs9ITE7dHlwZW9mIGg9PSJib29sZWFuIiYmKGs9aCxoPWFyZ3VtZW50c1sxXXx8e30saT0yKSx0eXBlb2YgaCE9Im9iamVjdCImJiFwLmlzRnVuY3Rpb24oaCkmJihoPXt9KSxqPT09aSYmKGg9dGhpcywtLWkpO2Zvcig7aTxqO2krKylpZigoYT1hcmd1bWVudHNbaV0pIT1udWxsKWZvcihjIGluIGEpe2Q9aFtjXSxlPWFbY107aWYoaD09PWUpY29udGludWU7ayYmZSYmKHAuaXNQbGFpbk9iamVjdChlKXx8KGY9cC5pc0FycmF5KGUpKSk/KGY/KGY9ITEsZz1kJiZwLmlzQXJyYXkoZCk/ZDpbXSk6Zz1kJiZwLmlzUGxhaW5PYmplY3QoZCk/ZDp7fSxoW2NdPXAuZXh0ZW5kKGssZyxlKSk6ZSE9PWImJihoW2NdPWUpfXJldHVybiBofSxwLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09cCYmKGEuJD1pKSxiJiZhLmpRdWVyeT09PXAmJihhLmpRdWVyeT1oKSxwfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP3AucmVhZHlXYWl0Kys6cC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMD8tLXAucmVhZHlXYWl0OnAuaXNSZWFkeSlyZXR1cm47aWYoIWUuYm9keSlyZXR1cm4gc2V0VGltZW91dChwLnJlYWR5LDEpO3AuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tcC5yZWFkeVdhaXQ+MClyZXR1cm47ZC5yZXNvbHZlV2l0aChlLFtwXSkscC5mbi50cmlnZ2VyJiZwKGUpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBwLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBwLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChhKSkmJmlzRmluaXRlKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpFW20uY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxwLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8cC5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIW4uY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhbi5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxuLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LHBhcnNlSFRNTDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIWF8fHR5cGVvZiBhIT0ic3RyaW5nIj9udWxsOih0eXBlb2YgYj09ImJvb2xlYW4iJiYoYz1iLGI9MCksYj1ifHxlLChkPXYuZXhlYyhhKSk/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9cC5idWlsZEZyYWdtZW50KFthXSxiLGM/bnVsbDpbXSkscC5tZXJnZShbXSwoZC5jYWNoZWFibGU/cC5jbG9uZShkLmZyYWdtZW50KTpkLmZyYWdtZW50KS5jaGlsZE5vZGVzKSkpfSxwYXJzZUpTT046ZnVuY3Rpb24oYil7aWYoIWJ8fHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4gbnVsbDtiPXAudHJpbShiKTtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIpO2lmKHcudGVzdChiLnJlcGxhY2UoeSwiQCIpLnJlcGxhY2UoeiwiXSIpLnJlcGxhY2UoeCwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAiK2IpKSgpO3AuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6ZnVuY3Rpb24oYyl7dmFyIGQsZTtpZighY3x8dHlwZW9mIGMhPSJzdHJpbmciKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZT1uZXcgRE9NUGFyc2VyLGQ9ZS5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChmKXtkPWJ9cmV0dXJuKCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmcC5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyksZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZyLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoQSwibXMtIikucmVwbGFjZShCLEMpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGY9MCxnPWEubGVuZ3RoLGg9Zz09PWJ8fHAuaXNGdW5jdGlvbihhKTtpZihkKXtpZihoKXtmb3IoZSBpbiBhKWlmKGMuYXBwbHkoYVtlXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtmPGc7KWlmKGMuYXBwbHkoYVtmKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihoKXtmb3IoZSBpbiBhKWlmKGMuY2FsbChhW2VdLGUsYVtlXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZjxnOylpZihjLmNhbGwoYVtmXSxmLGFbZisrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpvJiYhby5jYWxsKCLvu7/CoCIpP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOm8uY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UodCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9Ynx8W107cmV0dXJuIGEhPW51bGwmJihjPXAudHlwZShhKSxhLmxlbmd0aD09bnVsbHx8Yz09PSJzdHJpbmcifHxjPT09ImZ1bmN0aW9uInx8Yz09PSJyZWdleHAifHxwLmlzV2luZG93KGEpP2ouY2FsbChkLGEpOnAubWVyZ2UoZCxhKSksZH0saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYobClyZXR1cm4gbC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1jLmxlbmd0aCxlPWEubGVuZ3RoLGY9MDtpZih0eXBlb2YgZD09Im51bWJlciIpZm9yKDtmPGQ7ZisrKWFbZSsrXT1jW2ZdO2Vsc2Ugd2hpbGUoY1tmXSE9PWIpYVtlKytdPWNbZisrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoO2M9ISFjO2Zvcig7ZjxnO2YrKylkPSEhYihhW2ZdLGYpLGMhPT1kJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9YSBpbnN0YW5jZW9mIHB8fGkhPT1iJiZ0eXBlb2YgaT09Im51bWJlciImJihpPjAmJmFbMF0mJmFbaS0xXXx8aT09PTB8fHAuaXNBcnJheShhKSk7aWYoailmb3IoO2g8aTtoKyspZT1jKGFbaF0saCxkKSxlIT1udWxsJiYoZ1tnLmxlbmd0aF09ZSk7ZWxzZSBmb3IoZiBpbiBhKWU9YyhhW2ZdLGYsZCksZSE9bnVsbCYmKGdbZy5sZW5ndGhdPWUpO3JldHVybiBnLmNvbmNhdC5hcHBseShbXSxnKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxmO3JldHVybiB0eXBlb2YgYz09InN0cmluZyImJihkPWFbY10sYz1hLGE9ZCkscC5pc0Z1bmN0aW9uKGEpPyhlPWsuY2FsbChhcmd1bWVudHMsMiksZj1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGMsZS5jb25jYXQoay5jYWxsKGFyZ3VtZW50cykpKX0sZi5ndWlkPWEuZ3VpZD1hLmd1aWR8fHAuZ3VpZCsrLGYpOmJ9LGFjY2VzczpmdW5jdGlvbihhLGMsZCxlLGYsZyxoKXt2YXIgaSxqPWQ9PW51bGwsaz0wLGw9YS5sZW5ndGg7aWYoZCYmdHlwZW9mIGQ9PSJvYmplY3QiKXtmb3IoayBpbiBkKXAuYWNjZXNzKGEsYyxrLGRba10sMSxnLGUpO2Y9MX1lbHNlIGlmKGUhPT1iKXtpPWg9PT1iJiZwLmlzRnVuY3Rpb24oZSksaiYmKGk/KGk9YyxjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gaS5jYWxsKHAoYSksYyl9KTooYy5jYWxsKGEsZSksYz1udWxsKSk7aWYoYylmb3IoO2s8bDtrKyspYyhhW2tdLGQsaT9lLmNhbGwoYVtrXSxrLGMoYVtrXSxkKSk6ZSxoKTtmPTF9cmV0dXJuIGY/YTpqP2MuY2FsbChhKTpsP2MoYVswXSxkKTpnfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KSxwLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIWQpe2Q9cC5EZWZlcnJlZCgpO2lmKGUucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpc2V0VGltZW91dChwLnJlYWR5LDEpO2Vsc2UgaWYoZS5hZGRFdmVudExpc3RlbmVyKWUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwLnJlYWR5LCExKTtlbHNle2UuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsRCksYS5hdHRhY2hFdmVudCgib25sb2FkIixwLnJlYWR5KTt2YXIgYz0hMTt0cnl7Yz1hLmZyYW1lRWxlbWVudD09bnVsbCYmZS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZil7fWMmJmMuZG9TY3JvbGwmJmZ1bmN0aW9uIGcoKXtpZighcC5pc1JlYWR5KXt0cnl7Yy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3JldHVybiBzZXRUaW1lb3V0KGcsNTApfXAucmVhZHkoKX19KCl9fXJldHVybiBkLnByb21pc2UoYil9LHAuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe0VbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksYz1wKGUpO3ZhciBGPXt9O3AuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9dHlwZW9mIGE9PSJzdHJpbmciP0ZbYV18fEcoYSk6cC5leHRlbmQoe30sYSk7dmFyIGMsZCxlLGYsZyxoLGk9W10saj0hYS5vbmNlJiZbXSxrPWZ1bmN0aW9uKGIpe2M9YS5tZW1vcnkmJmIsZD0hMCxoPWZ8fDAsZj0wLGc9aS5sZW5ndGgsZT0hMDtmb3IoO2kmJmg8ZztoKyspaWYoaVtoXS5hcHBseShiWzBdLGJbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2Upe2M9ITE7YnJlYWt9ZT0hMSxpJiYoaj9qLmxlbmd0aCYmayhqLnNoaWZ0KCkpOmM/aT1bXTpsLmRpc2FibGUoKSl9LGw9e2FkZDpmdW5jdGlvbigpe2lmKGkpe3ZhciBiPWkubGVuZ3RoOyhmdW5jdGlvbiBkKGIpe3AuZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGU9cC50eXBlKGMpO2U9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhbC5oYXMoYykpP2kucHVzaChjKTpjJiZjLmxlbmd0aCYmZSE9PSJzdHJpbmciJiZkKGMpfSl9KShhcmd1bWVudHMpLGU/Zz1pLmxlbmd0aDpjJiYoZj1iLGsoYykpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaSYmcC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPXAuaW5BcnJheShiLGksYykpPi0xKWkuc3BsaWNlKGMsMSksZSYmKGM8PWcmJmctLSxjPD1oJiZoLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBwLmluQXJyYXkoYSxpKT4tMX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaT1bXSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9aj1jPWIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBqPWIsY3x8bC5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWp9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8W10sYj1bYSxiLnNsaWNlP2Iuc2xpY2UoKTpiXSxpJiYoIWR8fGopJiYoZT9qLnB1c2goYik6ayhiKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBsLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBsfSxwLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLHAuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIscC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIscC5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBwLkRlZmVycmVkKGZ1bmN0aW9uKGMpe3AuZWFjaChiLGZ1bmN0aW9uKGIsZCl7dmFyIGY9ZFswXSxnPWFbYl07ZVtkWzFdXShwLmlzRnVuY3Rpb24oZyk/ZnVuY3Rpb24oKXt2YXIgYT1nLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZwLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZisiV2l0aCJdKHRoaXM9PT1lP2M6dGhpcyxbYV0pfTpjW2ZdKX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbD9wLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLHAuZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlthXjFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWcuZmlyZSxlW2ZbMF0rIldpdGgiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWsuY2FsbChhcmd1bWVudHMpLGQ9Yy5sZW5ndGgsZT1kIT09MXx8YSYmcC5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZDowLGY9ZT09PTE/YTpwLkRlZmVycmVkKCksZz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9rLmNhbGwoYXJndW1lbnRzKTpkLGM9PT1oP2Yubm90aWZ5V2l0aChiLGMpOi0tZXx8Zi5yZXNvbHZlV2l0aChiLGMpfX0saCxpLGo7aWYoZD4xKXtoPW5ldyBBcnJheShkKSxpPW5ldyBBcnJheShkKSxqPW5ldyBBcnJheShkKTtmb3IoO2I8ZDtiKyspY1tiXSYmcC5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkuZG9uZShnKGIsaixjKSkuZmFpbChmLnJlamVjdCkucHJvZ3Jlc3MoZyhiLGksaCkpOi0tZX1yZXR1cm4gZXx8Zi5yZXNvbHZlV2l0aChqLGMpLGYucHJvbWlzZSgpfX0pLHAuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGMsZCxmLGcsaCxpLGosayxsLG0sbj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0Iiksbi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsYz1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZD1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sZC5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSI7aWYoIWN8fCFjLmxlbmd0aClyZXR1cm57fTtmPWUuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZz1mLmFwcGVuZENoaWxkKGUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGg9bi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxiPXtsZWFkaW5nV2hpdGVzcGFjZTpuLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpkLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41Ly50ZXN0KGQuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFkLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aC52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6Zy5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6bi5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWUuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9uZTplLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MIT09Ijw6bmF2PjwvOm5hdj4iLGJveE1vZGVsOmUuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITAsYm94U2l6aW5nUmVsaWFibGU6ITAscGl4ZWxQb3NpdGlvbjohMX0saC5jaGVja2VkPSEwLGIubm9DbG9uZUNoZWNrZWQ9aC5jbG9uZU5vZGUoITApLmNoZWNrZWQsZi5kaXNhYmxlZD0hMCxiLm9wdERpc2FibGVkPSFnLmRpc2FibGVkO3RyeXtkZWxldGUgbi50ZXN0fWNhdGNoKG8pe2IuZGVsZXRlRXhwYW5kbz0hMX0hbi5hZGRFdmVudExpc3RlbmVyJiZuLmF0dGFjaEV2ZW50JiZuLmZpcmVFdmVudCYmKG4uYXR0YWNoRXZlbnQoIm9uY2xpY2siLG09ZnVuY3Rpb24oKXtiLm5vQ2xvbmVFdmVudD0hMX0pLG4uY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSxuLmRldGFjaEV2ZW50KCJvbmNsaWNrIixtKSksaD1lLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaC52YWx1ZT0idCIsaC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGIucmFkaW9WYWx1ZT1oLnZhbHVlPT09InQiLGguc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGguc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLG4uYXBwZW5kQ2hpbGQoaCksaT1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpLmFwcGVuZENoaWxkKG4ubGFzdENoaWxkKSxiLmNoZWNrQ2xvbmU9aS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYi5hcHBlbmRDaGVja2VkPWguY2hlY2tlZCxpLnJlbW92ZUNoaWxkKGgpLGkuYXBwZW5kQ2hpbGQobik7aWYobi5hdHRhY2hFdmVudClmb3IoayBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWo9Im9uIitrLGw9aiBpbiBuLGx8fChuLnNldEF0dHJpYnV0ZShqLCJyZXR1cm47IiksbD10eXBlb2YgbltqXT09ImZ1bmN0aW9uIiksYltrKyJCdWJibGVzIl09bDtyZXR1cm4gcChmdW5jdGlvbigpe3ZhciBjLGQsZixnLGg9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjsiLGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKCFpKXJldHVybjtjPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5zdHlsZS5jc3NUZXh0PSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOjFweCIsaS5pbnNlcnRCZWZvcmUoYyxpLmZpcnN0Q2hpbGQpLGQ9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLmFwcGVuZENoaWxkKGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixmPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksZlswXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixsPWZbMF0ub2Zmc2V0SGVpZ2h0PT09MCxmWzBdLnN0eWxlLmRpc3BsYXk9IiIsZlsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixiLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1sJiZmWzBdLm9mZnNldEhlaWdodD09PTAsZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLGIuYm94U2l6aW5nPWQub2Zmc2V0V2lkdGg9PT00LGIuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9aS5vZmZzZXRUb3AhPT0xLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGIucGl4ZWxQb3NpdGlvbj0oYS5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCl8fHt9KS50b3AhPT0iMSUiLGIuYm94U2l6aW5nUmVsaWFibGU9KGEuZ2V0Q29tcHV0ZWRTdHlsZShkLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aD09PSI0cHgiLGc9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxnLnN0eWxlLmNzc1RleHQ9ZC5zdHlsZS5jc3NUZXh0PWgsZy5zdHlsZS5tYXJnaW5SaWdodD1nLnN0eWxlLndpZHRoPSIwIixkLnN0eWxlLndpZHRoPSIxcHgiLGQuYXBwZW5kQ2hpbGQoZyksYi5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChhLmdldENvbXB1dGVkU3R5bGUoZyxudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIGQuc3R5bGUuem9vbSE9InVuZGVmaW5lZCImJihkLmlubmVySFRNTD0iIixkLnN0eWxlLmNzc1RleHQ9aCsid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsYi5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWQub2Zmc2V0V2lkdGg9PT0zLGQuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLGQuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsZC5maXJzdENoaWxkLnN0eWxlLndpZHRoPSI1cHgiLGIuc2hyaW5rV3JhcEJsb2Nrcz1kLm9mZnNldFdpZHRoIT09MyxjLnN0eWxlLnpvb209MSksaS5yZW1vdmVDaGlsZChjKSxjPWQ9Zj1nPW51bGx9KSxpLnJlbW92ZUNoaWxkKG4pLGM9ZD1mPWc9aD1pPW49bnVsbCxifSgpO3ZhciBIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxJPS8oW0EtWl0pL2c7cC5leHRlbmQoe2NhY2hlOnt9LGRlbGV0ZWRJZHM6W10sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKHAuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP3AuY2FjaGVbYVtwLmV4cGFuZG9dXTphW3AuZXhwYW5kb10sISFhJiYhSyhhKX0sZGF0YTpmdW5jdGlvbihhLGMsZCxlKXtpZighcC5hY2NlcHREYXRhKGEpKXJldHVybjt2YXIgZixnLGg9cC5leHBhbmRvLGk9dHlwZW9mIGM9PSJzdHJpbmciLGo9YS5ub2RlVHlwZSxrPWo/cC5jYWNoZTphLGw9aj9hW2hdOmFbaF0mJmg7aWYoKCFsfHwha1tsXXx8IWUmJiFrW2xdLmRhdGEpJiZpJiZkPT09YilyZXR1cm47bHx8KGo/YVtoXT1sPXAuZGVsZXRlZElkcy5wb3AoKXx8cC5ndWlkKys6bD1oKSxrW2xdfHwoa1tsXT17fSxqfHwoa1tsXS50b0pTT049cC5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP2tbbF09cC5leHRlbmQoa1tsXSxjKTprW2xdLmRhdGE9cC5leHRlbmQoa1tsXS5kYXRhLGMpO3JldHVybiBmPWtbbF0sZXx8KGYuZGF0YXx8KGYuZGF0YT17fSksZj1mLmRhdGEpLGQhPT1iJiYoZltwLmNhbWVsQ2FzZShjKV09ZCksaT8oZz1mW2NdLGc9PW51bGwmJihnPWZbcC5jYW1lbENhc2UoYyldKSk6Zz1mLGd9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCFwLmFjY2VwdERhdGEoYSkpcmV0dXJuO3ZhciBkLGUsZixnPWEubm9kZVR5cGUsaD1nP3AuY2FjaGU6YSxpPWc/YVtwLmV4cGFuZG9dOnAuZXhwYW5kbztpZighaFtpXSlyZXR1cm47aWYoYil7ZD1jP2hbaV06aFtpXS5kYXRhO2lmKGQpe3AuaXNBcnJheShiKXx8KGIgaW4gZD9iPVtiXTooYj1wLmNhbWVsQ2FzZShiKSxiIGluIGQ/Yj1bYl06Yj1iLnNwbGl0KCIgIikpKTtmb3IoZT0wLGY9Yi5sZW5ndGg7ZTxmO2UrKylkZWxldGUgZFtiW2VdXTtpZighKGM/SzpwLmlzRW1wdHlPYmplY3QpKGQpKXJldHVybn19aWYoIWMpe2RlbGV0ZSBoW2ldLmRhdGE7aWYoIUsoaFtpXSkpcmV0dXJufWc/cC5jbGVhbkRhdGEoW2FdLCEwKTpwLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8aCE9aC53aW5kb3c/ZGVsZXRlIGhbaV06aFtpXT1udWxsfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGF0YShhLGIsYywhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZSYmcC5ub0RhdGFbYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4hYnx8YiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn19KSxwLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZixnLGgsaT10aGlzWzBdLGo9MCxrPW51bGw7aWYoYT09PWIpe2lmKHRoaXMubGVuZ3RoKXtrPXAuZGF0YShpKTtpZihpLm5vZGVUeXBlPT09MSYmIXAuX2RhdGEoaSwicGFyc2VkQXR0cnMiKSl7Zj1pLmF0dHJpYnV0ZXM7Zm9yKGg9Zi5sZW5ndGg7ajxoO2orKylnPWZbal0ubmFtZSxnLmluZGV4T2YoImRhdGEtIil8fChnPXAuY2FtZWxDYXNlKGcuc3Vic3RyaW5nKDUpKSxKKGksZyxrW2ddKSk7cC5fZGF0YShpLCJwYXJzZWRBdHRycyIsITApfX1yZXR1cm4ga31yZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiP3RoaXMuZWFjaChmdW5jdGlvbigpe3AuZGF0YSh0aGlzLGEpfSk6KGQ9YS5zcGxpdCgiLiIsMiksZFsxXT1kWzFdPyIuIitkWzFdOiIiLGU9ZFsxXSsiISIscC5hY2Nlc3ModGhpcyxmdW5jdGlvbihjKXtpZihjPT09YilyZXR1cm4gaz10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitlLFtkWzBdXSksaz09PWImJmkmJihrPXAuZGF0YShpLGEpLGs9SihpLGEsaykpLGs9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTprO2RbMV09Yyx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1wKHRoaXMpO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2UsZCkscC5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitlLGQpfSl9LG51bGwsYyxhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMSkpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtwLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLHAuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYSlyZXR1cm4gYj0oYnx8ImZ4IikrInF1ZXVlIixkPXAuX2RhdGEoYSxiKSxjJiYoIWR8fHAuaXNBcnJheShjKT9kPXAuX2RhdGEoYSxiLHAubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPXAucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9cC5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtwLmRlcXVldWUoYSxiKX07ZT09PSJpbnByb2dyZXNzIiYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gcC5fZGF0YShhLGMpfHxwLl9kYXRhKGEsYyx7ZW1wdHk6cC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7cC5yZW1vdmVEYXRhKGEsYisicXVldWUiLCEwKSxwLnJlbW92ZURhdGEoYSxjLCEwKX0pfSl9fSkscC5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9MjtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9ImZ4IixkLS0pLGFyZ3VtZW50cy5sZW5ndGg8ZD9wLnF1ZXVlKHRoaXNbMF0sYSk6Yz09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1wLnF1ZXVlKHRoaXMsYSxjKTtwLl9xdWV1ZUhvb2tzKHRoaXMsYSksYT09PSJmeCImJmJbMF0hPT0iaW5wcm9ncmVzcyImJnAuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3AuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9cC5meD9wLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4Iix0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7dmFyIGQsZT0xLGY9cC5EZWZlcnJlZCgpLGc9dGhpcyxoPXRoaXMubGVuZ3RoLGk9ZnVuY3Rpb24oKXstLWV8fGYucmVzb2x2ZVdpdGgoZyxbZ10pfTt0eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT1iKSxhPWF8fCJmeCI7d2hpbGUoaC0tKWQ9cC5fZGF0YShnW2hdLGErInF1ZXVlSG9va3MiKSxkJiZkLmVtcHR5JiYoZSsrLGQuZW1wdHkuYWRkKGkpKTtyZXR1cm4gaSgpLGYucHJvbWlzZShjKX19KTt2YXIgTCxNLE4sTz0vW1x0XHJcbl0vZyxQPS9cci9nLFE9L14oPzpidXR0b258aW5wdXQpJC9pLFI9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksUz0vXmEoPzpyZWF8KSQvaSxUPS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLFU9cC5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTtwLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBwLmFjY2Vzcyh0aGlzLHAuYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cC5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBwLmFjY2Vzcyh0aGlzLHAucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1wLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09YixkZWxldGUgdGhpc1thXX1jYXRjaChjKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKHAuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmciKXtiPWEuc3BsaXQocyk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2U9dGhpc1tjXTtpZihlLm5vZGVUeXBlPT09MSlpZighZS5jbGFzc05hbWUmJmIubGVuZ3RoPT09MSllLmNsYXNzTmFtZT1hO2Vsc2V7Zj0iICIrZS5jbGFzc05hbWUrIiAiO2ZvcihnPTAsaD1iLmxlbmd0aDtnPGg7ZysrKWYuaW5kZXhPZigiICIrYltnXSsiICIpPDAmJihmKz1iW2ddKyIgIik7ZS5jbGFzc05hbWU9cC50cmltKGYpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKHAuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KHMpO2ZvcihoPTAsaT10aGlzLmxlbmd0aDtoPGk7aCsrKXtlPXRoaXNbaF07aWYoZS5ub2RlVHlwZT09PTEmJmUuY2xhc3NOYW1lKXtkPSgiICIrZS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKE8sIiAiKTtmb3IoZj0wLGc9Yy5sZW5ndGg7ZjxnO2YrKyl3aGlsZShkLmluZGV4T2YoIiAiK2NbZl0rIiAiKT49MClkPWQucmVwbGFjZSgiICIrY1tmXSsiICIsIiAiKTtlLmNsYXNzTmFtZT1hP3AudHJpbShkKToiIn19fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLGQ9dHlwZW9mIGI9PSJib29sZWFuIjtyZXR1cm4gcC5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtwKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGY9MCxnPXAodGhpcyksaD1iLGk9YS5zcGxpdChzKTt3aGlsZShlPWlbZisrXSloPWQ/aDohZy5oYXNDbGFzcyhlKSxnW2g/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmcC5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpwLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoTywiICIpLmluZGV4T2YoYik+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZj10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihmKXJldHVybiBjPXAudmFsSG9va3NbZi50eXBlXXx8cC52YWxIb29rc1tmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZiwidmFsdWUiKSkhPT1iP2Q6KGQ9Zi52YWx1ZSx0eXBlb2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKFAsIiIpOmQ9PW51bGw/IiI6ZCk7cmV0dXJufXJldHVybiBlPXAuaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGYsZz1wKHRoaXMpO2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtlP2Y9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpmPWEsZj09bnVsbD9mPSIiOnR5cGVvZiBmPT0ibnVtYmVyIj9mKz0iIjpwLmlzQXJyYXkoZikmJihmPXAubWFwKGYsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPXAudmFsSG9va3NbdGhpcy50eXBlXXx8cC52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsZiwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1mfSl9fSkscC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZj1hLnNlbGVjdGVkSW5kZXgsZz1bXSxoPWEub3B0aW9ucyxpPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihmPDApcmV0dXJuIG51bGw7Yz1pP2Y6MCxkPWk/ZisxOmgubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1oW2NdO2lmKGUuc2VsZWN0ZWQmJihwLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFwLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9cChlKS52YWwoKTtpZihpKXJldHVybiBiO2cucHVzaChiKX19cmV0dXJuIGkmJiFnLmxlbmd0aCYmaC5sZW5ndGg/cChoW2ZdKS52YWwoKTpnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1wLm1ha2VBcnJheShiKTtyZXR1cm4gcChhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1wLmluQXJyYXkocCh0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKSxjfX19LGF0dHJGbjp7fSxhdHRyOmZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmLGcsaCxpPWEubm9kZVR5cGU7aWYoIWF8fGk9PT0zfHxpPT09OHx8aT09PTIpcmV0dXJuO2lmKGUmJnAuaXNGdW5jdGlvbihwLmZuW2NdKSlyZXR1cm4gcChhKVtjXShkKTtpZih0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiBwLnByb3AoYSxjLGQpO2g9aSE9PTF8fCFwLmlzWE1MRG9jKGEpLGgmJihjPWMudG9Mb3dlckNhc2UoKSxnPXAuYXR0ckhvb2tzW2NdfHwoVC50ZXN0KGMpP006TCkpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7cC5yZW1vdmVBdHRyKGEsYyk7cmV0dXJufXJldHVybiBnJiYic2V0ImluIGcmJmgmJihmPWcuc2V0KGEsZCxjKSkhPT1iP2Y6KGEuc2V0QXR0cmlidXRlKGMsZCsiIiksZCl9cmV0dXJuIGcmJiJnZXQiaW4gZyYmaCYmKGY9Zy5nZXQoYSxjKSkhPT1udWxsP2Y6KGY9YS5nZXRBdHRyaWJ1dGUoYyksZj09PW51bGw/YjpmKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9MDtpZihiJiZhLm5vZGVUeXBlPT09MSl7ZD1iLnNwbGl0KHMpO2Zvcig7ZzxkLmxlbmd0aDtnKyspZT1kW2ddLGUmJihjPXAucHJvcEZpeFtlXXx8ZSxmPVQudGVzdChlKSxmfHxwLmF0dHIoYSxlLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZShVP2U6YyksZiYmYyBpbiBhJiYoYVtjXT0hMSkpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihRLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlwLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFwLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJnAubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBMJiZwLm5vZGVOYW1lKGEsImJ1dHRvbiIpP0wuZ2V0KGEsYik6YiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZihMJiZwLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiBMLnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZixnLGg9YS5ub2RlVHlwZTtpZighYXx8aD09PTN8fGg9PT04fHxoPT09MilyZXR1cm47cmV0dXJuIGc9aCE9PTF8fCFwLmlzWE1MRG9jKGEpLGcmJihjPXAucHJvcEZpeFtjXXx8YyxmPXAucHJvcEhvb2tzW2NdKSxkIT09Yj9mJiYic2V0ImluIGYmJihlPWYuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmYmJiJnZXQiaW4gZiYmKGU9Zi5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6Ui50ZXN0KGEubm9kZU5hbWUpfHxTLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxNPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPXAucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGI9PT0hMT9wLnJlbW92ZUF0dHIoYSxjKTooZD1wLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKSxjfX0sVXx8KE49e25hbWU6ITAsaWQ6ITAsY29vcmRzOiEwfSxMPXAudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtyZXR1cm4gZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyksZCYmKE5bY10/ZC52YWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLnZhbHVlOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHwoZD1lLmNyZWF0ZUF0dHJpYnV0ZShjKSxhLnNldEF0dHJpYnV0ZU5vZGUoZCkpLGQudmFsdWU9YisiIn19LHAuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtwLmF0dHJIb29rc1tiXT1wLmV4dGVuZChwLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXJldHVybiBhLnNldEF0dHJpYnV0ZShiLCJhdXRvIiksY319KX0pLHAuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17Z2V0OkwuZ2V0LHNldDpmdW5jdGlvbihhLGIsYyl7Yj09PSIiJiYoYj0iZmFsc2UiKSxMLnNldChhLGIsYyl9fSkscC5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHxwLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGMpe3AuYXR0ckhvb2tzW2NdPXAuZXh0ZW5kKHAuYXR0ckhvb2tzW2NdLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoYywyKTtyZXR1cm4gZD09PW51bGw/YjpkfX0pfSkscC5zdXBwb3J0LnN0eWxlfHwocC5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGJ9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KSxwLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChwLnByb3BIb29rcy5zZWxlY3RlZD1wLmV4dGVuZChwLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfX0pKSxwLnN1cHBvcnQuZW5jdHlwZXx8KHAucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLHAuc3VwcG9ydC5jaGVja09ufHxwLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtwLnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmEudmFsdWV9fX0pLHAuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3AudmFsSG9va3NbdGhpc109cC5leHRlbmQocC52YWxIb29rc1t0aGlzXSx7c2V0OmZ1bmN0aW9uKGEsYil7aWYocC5pc0FycmF5KGIpKXJldHVybiBhLmNoZWNrZWQ9cC5pbkFycmF5KHAoYSkudmFsKCksYik+PTB9fSl9KTt2YXIgVj0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksVz0vXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sWD0vKD86Xnxccylob3ZlcihcLlxTK3wpXGIvLFk9L15rZXkvLFo9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLCQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLF89ZnVuY3Rpb24oYSl7cmV0dXJuIHAuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShYLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O3AuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGYpe3ZhciBnLGgsaSxqLGssbCxtLG4sbyxxLHI7aWYoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhY3x8IWR8fCEoZz1wLl9kYXRhKGEpKSlyZXR1cm47ZC5oYW5kbGVyJiYobz1kLGQ9by5oYW5kbGVyLGY9by5zZWxlY3RvciksZC5ndWlkfHwoZC5ndWlkPXAuZ3VpZCsrKSxpPWcuZXZlbnRzLGl8fChnLmV2ZW50cz1pPXt9KSxoPWcuaGFuZGxlLGh8fChnLmhhbmRsZT1oPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgcCE9InVuZGVmaW5lZCImJighYXx8cC5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP3AuZXZlbnQuZGlzcGF0Y2guYXBwbHkoaC5lbGVtLGFyZ3VtZW50cyk6Yn0saC5lbGVtPWEpLGM9cC50cmltKF8oYykpLnNwbGl0KCIgIik7Zm9yKGo9MDtqPGMubGVuZ3RoO2orKyl7az1XLmV4ZWMoY1tqXSl8fFtdLGw9a1sxXSxtPShrWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCkscj1wLmV2ZW50LnNwZWNpYWxbbF18fHt9LGw9KGY/ci5kZWxlZ2F0ZVR5cGU6ci5iaW5kVHlwZSl8fGwscj1wLmV2ZW50LnNwZWNpYWxbbF18fHt9LG49cC5leHRlbmQoe3R5cGU6bCxvcmlnVHlwZTprWzFdLGRhdGE6ZSxoYW5kbGVyOmQsZ3VpZDpkLmd1aWQsc2VsZWN0b3I6ZixuZWVkc0NvbnRleHQ6ZiYmcC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGYpLG5hbWVzcGFjZTptLmpvaW4oIi4iKX0sbykscT1pW2xdO2lmKCFxKXtxPWlbbF09W10scS5kZWxlZ2F0ZUNvdW50PTA7aWYoIXIuc2V0dXB8fHIuc2V0dXAuY2FsbChhLGUsbSxoKT09PSExKWEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobCxoLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbCxoKX1yLmFkZCYmKHIuYWRkLmNhbGwoYSxuKSxuLmhhbmRsZXIuZ3VpZHx8KG4uaGFuZGxlci5ndWlkPWQuZ3VpZCkpLGY/cS5zcGxpY2UocS5kZWxlZ2F0ZUNvdW50KyssMCxuKTpxLnB1c2gobikscC5ldmVudC5nbG9iYWxbbF09ITB9YT1udWxsfSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scSxyPXAuaGFzRGF0YShhKSYmcC5fZGF0YShhKTtpZighcnx8IShtPXIuZXZlbnRzKSlyZXR1cm47Yj1wLnRyaW0oXyhifHwiIikpLnNwbGl0KCIgIik7Zm9yKGY9MDtmPGIubGVuZ3RoO2YrKyl7Zz1XLmV4ZWMoYltmXSl8fFtdLGg9aT1nWzFdLGo9Z1syXTtpZighaCl7Zm9yKGggaW4gbSlwLmV2ZW50LnJlbW92ZShhLGgrYltmXSxjLGQsITApO2NvbnRpbnVlfW49cC5ldmVudC5zcGVjaWFsW2hdfHx7fSxoPShkP24uZGVsZWdhdGVUeXBlOm4uYmluZFR5cGUpfHxoLG89bVtoXXx8W10saz1vLmxlbmd0aCxqPWo/bmV3IFJlZ0V4cCgiKF58XFwuKSIrai5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2ZvcihsPTA7bDxvLmxlbmd0aDtsKyspcT1vW2xdLChlfHxpPT09cS5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cS5ndWlkKSYmKCFqfHxqLnRlc3QocS5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cS5zZWxlY3Rvcnx8ZD09PSIqKiImJnEuc2VsZWN0b3IpJiYoby5zcGxpY2UobC0tLDEpLHEuc2VsZWN0b3ImJm8uZGVsZWdhdGVDb3VudC0tLG4ucmVtb3ZlJiZuLnJlbW92ZS5jYWxsKGEscSkpO28ubGVuZ3RoPT09MCYmayE9PW8ubGVuZ3RoJiYoKCFuLnRlYXJkb3dufHxuLnRlYXJkb3duLmNhbGwoYSxqLHIuaGFuZGxlKT09PSExKSYmcC5yZW1vdmVFdmVudChhLGgsci5oYW5kbGUpLGRlbGV0ZSBtW2hdKX1wLmlzRW1wdHlPYmplY3QobSkmJihkZWxldGUgci5oYW5kbGUscC5yZW1vdmVEYXRhKGEsImV2ZW50cyIsITApKX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxmLGcpe2lmKCFmfHxmLm5vZGVUeXBlIT09MyYmZi5ub2RlVHlwZSE9PTgpe3ZhciBoLGksaixrLGwsbSxuLG8scSxyLHM9Yy50eXBlfHxjLHQ9W107aWYoJC50ZXN0KHMrcC5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtzLmluZGV4T2YoIiEiKT49MCYmKHM9cy5zbGljZSgwLC0xKSxpPSEwKSxzLmluZGV4T2YoIi4iKT49MCYmKHQ9cy5zcGxpdCgiLiIpLHM9dC5zaGlmdCgpLHQuc29ydCgpKTtpZigoIWZ8fHAuZXZlbnQuY3VzdG9tRXZlbnRbc10pJiYhcC5ldmVudC5nbG9iYWxbc10pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbcC5leHBhbmRvXT9jOm5ldyBwLkV2ZW50KHMsYyk6bmV3IHAuRXZlbnQocyksYy50eXBlPXMsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9aSxjLm5hbWVzcGFjZT10LmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIit0LmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsbT1zLmluZGV4T2YoIjoiKTwwPyJvbiIrczoiIjtpZighZil7aD1wLmNhY2hlO2ZvcihqIGluIGgpaFtqXS5ldmVudHMmJmhbal0uZXZlbnRzW3NdJiZwLmV2ZW50LnRyaWdnZXIoYyxkLGhbal0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZiksZD1kIT1udWxsP3AubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxuPXAuZXZlbnQuc3BlY2lhbFtzXXx8e307aWYobi50cmlnZ2VyJiZuLnRyaWdnZXIuYXBwbHkoZixkKT09PSExKXJldHVybjtxPVtbZixuLmJpbmRUeXBlfHxzXV07aWYoIWcmJiFuLm5vQnViYmxlJiYhcC5pc1dpbmRvdyhmKSl7cj1uLmRlbGVnYXRlVHlwZXx8cyxrPSQudGVzdChyK3MpP2Y6Zi5wYXJlbnROb2RlO2ZvcihsPWY7aztrPWsucGFyZW50Tm9kZSlxLnB1c2goW2sscl0pLGw9aztsPT09KGYub3duZXJEb2N1bWVudHx8ZSkmJnEucHVzaChbbC5kZWZhdWx0Vmlld3x8bC5wYXJlbnRXaW5kb3d8fGEscl0pfWZvcihqPTA7ajxxLmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtqKyspaz1xW2pdWzBdLGMudHlwZT1xW2pdWzFdLG89KHAuX2RhdGEoaywiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZwLl9kYXRhKGssImhhbmRsZSIpLG8mJm8uYXBwbHkoayxkKSxvPW0mJmtbbV0sbyYmcC5hY2NlcHREYXRhKGspJiZvLmFwcGx5JiZvLmFwcGx5KGssZCk9PT0hMSYmYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBjLnR5cGU9cywhZyYmIWMuaXNEZWZhdWx0UHJldmVudGVkKCkmJighbi5fZGVmYXVsdHx8bi5fZGVmYXVsdC5hcHBseShmLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihzIT09ImNsaWNrInx8IXAubm9kZU5hbWUoZiwiYSIpKSYmcC5hY2NlcHREYXRhKGYpJiZtJiZmW3NdJiYocyE9PSJmb2N1cyImJnMhPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFwLmlzV2luZG93KGYpJiYobD1mW21dLGwmJihmW21dPW51bGwpLHAuZXZlbnQudHJpZ2dlcmVkPXMsZltzXSgpLHAuZXZlbnQudHJpZ2dlcmVkPWIsbCYmKGZbbV09bCkpLGMucmVzdWx0fXJldHVybn0sZGlzcGF0Y2g6ZnVuY3Rpb24oYyl7Yz1wLmV2ZW50LmZpeChjfHxhLmV2ZW50KTt2YXIgZCxlLGYsZyxoLGksaixsLG0sbixvPShwLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10scT1vLmRlbGVnYXRlQ291bnQscj1rLmNhbGwoYXJndW1lbnRzKSxzPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLHQ9cC5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9LHU9W107clswXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZih0LnByZURpc3BhdGNoJiZ0LnByZURpc3BhdGNoLmNhbGwodGhpcyxjKT09PSExKXJldHVybjtpZihxJiYoIWMuYnV0dG9ufHxjLnR5cGUhPT0iY2xpY2siKSlmb3IoZj1jLnRhcmdldDtmIT10aGlzO2Y9Zi5wYXJlbnROb2RlfHx0aGlzKWlmKGYuZGlzYWJsZWQhPT0hMHx8Yy50eXBlIT09ImNsaWNrIil7aD17fSxqPVtdO2ZvcihkPTA7ZDxxO2QrKylsPW9bZF0sbT1sLnNlbGVjdG9yLGhbbV09PT1iJiYoaFttXT1sLm5lZWRzQ29udGV4dD9wKG0sdGhpcykuaW5kZXgoZik+PTA6cC5maW5kKG0sdGhpcyxudWxsLFtmXSkubGVuZ3RoKSxoW21dJiZqLnB1c2gobCk7ai5sZW5ndGgmJnUucHVzaCh7ZWxlbTpmLG1hdGNoZXM6an0pfW8ubGVuZ3RoPnEmJnUucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6by5zbGljZShxKX0pO2ZvcihkPTA7ZDx1Lmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtkKyspe2k9dVtkXSxjLmN1cnJlbnRUYXJnZXQ9aS5lbGVtO2ZvcihlPTA7ZTxpLm1hdGNoZXMubGVuZ3RoJiYhYy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO2UrKyl7bD1pLm1hdGNoZXNbZV07aWYoc3x8IWMubmFtZXNwYWNlJiYhbC5uYW1lc3BhY2V8fGMubmFtZXNwYWNlX3JlJiZjLm5hbWVzcGFjZV9yZS50ZXN0KGwubmFtZXNwYWNlKSljLmRhdGE9bC5kYXRhLGMuaGFuZGxlT2JqPWwsZz0oKHAuZXZlbnQuc3BlY2lhbFtsLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8bC5oYW5kbGVyKS5hcHBseShpLmVsZW0sciksZyE9PWImJihjLnJlc3VsdD1nLGc9PT0hMSYmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpKSl9fXJldHVybiB0LnBvc3REaXNwYXRjaCYmdC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGMpLGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEud2hpY2g9PW51bGwmJihhLndoaWNoPWIuY2hhckNvZGUhPW51bGw/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGMpe3ZhciBkLGYsZyxoPWMuYnV0dG9uLGk9Yy5mcm9tRWxlbWVudDtyZXR1cm4gYS5wYWdlWD09bnVsbCYmYy5jbGllbnRYIT1udWxsJiYoZD1hLnRhcmdldC5vd25lckRvY3VtZW50fHxlLGY9ZC5kb2N1bWVudEVsZW1lbnQsZz1kLmJvZHksYS5wYWdlWD1jLmNsaWVudFgrKGYmJmYuc2Nyb2xsTGVmdHx8ZyYmZy5zY3JvbGxMZWZ0fHwwKS0oZiYmZi5jbGllbnRMZWZ0fHxnJiZnLmNsaWVudExlZnR8fDApLGEucGFnZVk9Yy5jbGllbnRZKyhmJiZmLnNjcm9sbFRvcHx8ZyYmZy5zY3JvbGxUb3B8fDApLShmJiZmLmNsaWVudFRvcHx8ZyYmZy5jbGllbnRUb3B8fDApKSwhYS5yZWxhdGVkVGFyZ2V0JiZpJiYoYS5yZWxhdGVkVGFyZ2V0PWk9PT1hLnRhcmdldD9jLnRvRWxlbWVudDppKSwhYS53aGljaCYmaCE9PWImJihhLndoaWNoPWgmMT8xOmgmMj8zOmgmND8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtwLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZD1hLGY9cC5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxnPWYucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZi5wcm9wcyk6dGhpcy5wcm9wczthPXAuRXZlbnQoZCk7Zm9yKGI9Zy5sZW5ndGg7YjspYz1nWy0tYl0sYVtjXT1kW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWQuc3JjRWxlbWVudHx8ZSksYS50YXJnZXQubm9kZVR5cGU9PT0zJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksYS5tZXRhS2V5PSEhYS5tZXRhS2V5LGYuZmlsdGVyP2YuZmlsdGVyKGEsZCk6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7cC5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXAuZXh0ZW5kKG5ldyBwLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9wLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOnAuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LHAuZXZlbnQuaGFuZGxlPXAuZXZlbnQuZGlzcGF0Y2gscC5yZW1vdmVFdmVudD1lLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT0idW5kZWZpbmVkIiYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0scC5FdmVudD1mdW5jdGlvbihhLGIpe2lmKHRoaXMgaW5zdGFuY2VvZiBwLkV2ZW50KWEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP2JiOmJhKTp0aGlzLnR5cGU9YSxiJiZwLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxwLm5vdygpLHRoaXNbcC5leHBhbmRvXT0hMDtlbHNlIHJldHVybiBuZXcgcC5FdmVudChhLGIpfSxwLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1iYjt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWEpcmV0dXJuO2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YmI7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFhKXJldHVybjthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1iYix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6YmEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6YmEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6YmF9LHAuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7cC5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iaixnPWYuc2VsZWN0b3I7aWYoIWV8fGUhPT1kJiYhcC5jb250YWlucyhkLGUpKWEudHlwZT1mLm9yaWdUeXBlLGM9Zi5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YjtyZXR1cm4gY319fSkscC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChwLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKHAubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3AuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1wLm5vZGVOYW1lKGMsImlucHV0Iil8fHAubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIXAuX2RhdGEoZCwiX3N1Ym1pdF9hdHRhY2hlZCIpJiYocC5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGU9ITB9KSxwLl9kYXRhKGQsIl9zdWJtaXRfYXR0YWNoZWQiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGUmJihkZWxldGUgYS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmcC5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKHAubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3AuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSkscC5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChwLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKFYudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilwLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLHAuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSxwLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCl9KTtyZXR1cm4hMX1wLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtWLnRlc3QoYi5ub2RlTmFtZSkmJiFwLl9kYXRhKGIsIl9jaGFuZ2VfYXR0YWNoZWQiKSYmKHAuZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJiFhLmlzU2ltdWxhdGVkJiYhYS5pc1RyaWdnZXImJnAuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSkscC5fZGF0YShiLCJfY2hhbmdlX2F0dGFjaGVkIiwhMCkpfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBwLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFWLnRlc3QodGhpcy5ub2RlTmFtZSl9fSkscC5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxwLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWZ1bmN0aW9uKGEpe3AuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxwLmV2ZW50LmZpeChhKSwhMCl9O3AuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtjKys9PT0wJiZlLmFkZEV2ZW50TGlzdGVuZXIoYSxkLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWM9PT0wJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLCEwKX19fSkscC5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZil7dmFyIGcsaDtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9ZHx8YyxjPWIpO2ZvcihoIGluIGEpdGhpcy5vbihoLGMsZCxhW2hdLGYpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9YmE7ZWxzZSBpZighZSlyZXR1cm4gdGhpcztyZXR1cm4gZj09PTEmJihnPWUsZT1mdW5jdGlvbihhKXtyZXR1cm4gcCgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1wLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3AuZXZlbnQuYWRkKHRoaXMsYSxlLGQsYyl9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZjtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZT1hLmhhbmRsZU9iaixwKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihlLm5hbWVzcGFjZT9lLm9yaWdUeXBlKyIuIitlLm5hbWVzcGFjZTplLm9yaWdUeXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKSx0aGlzO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKGYgaW4gYSl0aGlzLm9mZihmLGMsYVtmXSk7cmV0dXJuIHRoaXN9aWYoYz09PSExfHx0eXBlb2YgYz09ImZ1bmN0aW9uIilkPWMsYz1iO3JldHVybiBkPT09ITEmJihkPWJhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtwLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKSx0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcCh0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYiksdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYXx8IioqIixjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtwLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gcC5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8cC5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KHAuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtyZXR1cm4gcC5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQsZSsxKSxjLnByZXZlbnREZWZhdWx0KCksYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLHAuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe3AuZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz09bnVsbCYmKGM9YSxhPW51bGwpLGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX0sWS50ZXN0KGIpJiYocC5ldmVudC5maXhIb29rc1tiXT1wLmV2ZW50LmtleUhvb2tzKSxaLnRlc3QoYikmJihwLmV2ZW50LmZpeEhvb2tzW2JdPXAuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGJjKGEsYixjLGQpe2M9Y3x8W10sYj1ifHxyO3ZhciBlLGYsaSxqLGs9Yi5ub2RlVHlwZTtpZighYXx8dHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBjO2lmKGshPT0xJiZrIT09OSlyZXR1cm5bXTtpPWcoYik7aWYoIWkmJiFkKWlmKGU9UC5leGVjKGEpKWlmKGo9ZVsxXSl7aWYoaz09PTkpe2Y9Yi5nZXRFbGVtZW50QnlJZChqKTtpZighZnx8IWYucGFyZW50Tm9kZSlyZXR1cm4gYztpZihmLmlkPT09ailyZXR1cm4gYy5wdXNoKGYpLGN9ZWxzZSBpZihiLm93bmVyRG9jdW1lbnQmJihmPWIub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKSkmJmgoYixmKSYmZi5pZD09PWopcmV0dXJuIGMucHVzaChmKSxjfWVsc2V7aWYoZVsyXSlyZXR1cm4gdy5hcHBseShjLHguY2FsbChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpLDApKSxjO2lmKChqPWVbM10pJiZfJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHcuYXBwbHkoYyx4LmNhbGwoYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGopLDApKSxjfXJldHVybiBicChhLnJlcGxhY2UoTCwiJDEiKSxiLGMsZCxpKX1mdW5jdGlvbiBiZChhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBjPT09ImlucHV0IiYmYi50eXBlPT09YX19ZnVuY3Rpb24gYmUoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYz09PSJpbnB1dCJ8fGM9PT0iYnV0dG9uIikmJmIudHlwZT09PWF9fWZ1bmN0aW9uIGJmKGEpe3JldHVybiB6KGZ1bmN0aW9uKGIpe3JldHVybiBiPStiLHooZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBiZyhhLGIsYyl7aWYoYT09PWIpcmV0dXJuIGM7dmFyIGQ9YS5uZXh0U2libGluZzt3aGlsZShkKXtpZihkPT09YilyZXR1cm4tMTtkPWQubmV4dFNpYmxpbmd9cmV0dXJuIDF9ZnVuY3Rpb24gYmgoYSxiKXt2YXIgYyxkLGYsZyxoLGksaixrPUNbb11bYV07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1lLnByZUZpbHRlcjt3aGlsZShoKXtpZighY3x8KGQ9TS5leGVjKGgpKSlkJiYoaD1oLnNsaWNlKGRbMF0ubGVuZ3RoKSksaS5wdXNoKGY9W10pO2M9ITE7aWYoZD1OLmV4ZWMoaCkpZi5wdXNoKGM9bmV3IHEoZC5zaGlmdCgpKSksaD1oLnNsaWNlKGMubGVuZ3RoKSxjLnR5cGU9ZFswXS5yZXBsYWNlKEwsIiAiKTtmb3IoZyBpbiBlLmZpbHRlcikoZD1XW2ddLmV4ZWMoaCkpJiYoIWpbZ118fChkPWpbZ10oZCxyLCEwKSkpJiYoZi5wdXNoKGM9bmV3IHEoZC5zaGlmdCgpKSksaD1oLnNsaWNlKGMubGVuZ3RoKSxjLnR5cGU9ZyxjLm1hdGNoZXM9ZCk7aWYoIWMpYnJlYWt9cmV0dXJuIGI/aC5sZW5ndGg6aD9iYy5lcnJvcihhKTpDKGEsaSkuc2xpY2UoMCl9ZnVuY3Rpb24gYmkoYSxiLGQpe3ZhciBlPWIuZGlyLGY9ZCYmYi5kaXI9PT0icGFyZW50Tm9kZSIsZz11Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGQpe3doaWxlKGI9YltlXSlpZihmfHxiLm5vZGVUeXBlPT09MSlyZXR1cm4gYShiLGMsZCl9OmZ1bmN0aW9uKGIsZCxoKXtpZighaCl7dmFyIGksaj10KyIgIitnKyIgIixrPWorYzt3aGlsZShiPWJbZV0paWYoZnx8Yi5ub2RlVHlwZT09PTEpe2lmKChpPWJbb10pPT09aylyZXR1cm4gYi5zaXpzZXQ7aWYodHlwZW9mIGk9PSJzdHJpbmciJiZpLmluZGV4T2Yoaik9PT0wKXtpZihiLnNpenNldClyZXR1cm4gYn1lbHNle2Jbb109aztpZihhKGIsZCxoKSlyZXR1cm4gYi5zaXpzZXQ9ITAsYjtiLnNpenNldD0hMX19fWVsc2Ugd2hpbGUoYj1iW2VdKWlmKGZ8fGIubm9kZVR5cGU9PT0xKWlmKGEoYixkLGgpKXJldHVybiBifX1mdW5jdGlvbiBiaihhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiBiayhhLGIsYyxkLGUpe3ZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1iIT1udWxsO2Zvcig7aDxpO2grKylpZihmPWFbaF0paWYoIWN8fGMoZixkLGUpKWcucHVzaChmKSxqJiZiLnB1c2goaCk7cmV0dXJuIGd9ZnVuY3Rpb24gYmwoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFtvXSYmKGQ9YmwoZCkpLGUmJiFlW29dJiYoZT1ibChlLGYpKSx6KGZ1bmN0aW9uKGYsZyxoLGkpe2lmKGYmJmUpcmV0dXJuO3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fGJvKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdLGYpLHE9YSYmKGZ8fCFiKT9iayhwLG0sYSxoLGkpOnAscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2MmJmMocSxyLGgsaSk7aWYoZCl7bD1iayhyLG4pLGQobCxbXSxoLGkpLGo9bC5sZW5ndGg7d2hpbGUoai0tKWlmKGs9bFtqXSlyW25bal1dPSEocVtuW2pdXT1rKX1pZihmKXtqPWEmJnIubGVuZ3RoO3doaWxlKGotLSlpZihrPXJbal0pZlttW2pdXT0hKGdbbVtqXV09ayl9ZWxzZSByPWJrKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTp3LmFwcGx5KGcscil9KX1mdW5jdGlvbiBibShhKXt2YXIgYixjLGQsZj1hLmxlbmd0aCxnPWUucmVsYXRpdmVbYVswXS50eXBlXSxoPWd8fGUucmVsYXRpdmVbIiAiXSxpPWc/MTowLGo9YmkoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1ifSxoLCEwKSxrPWJpKGZ1bmN0aW9uKGEpe3JldHVybiB5LmNhbGwoYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3JldHVybiFnJiYoZHx8YyE9PWwpfHwoKGI9Yykubm9kZVR5cGU/aihhLGMsZCk6ayhhLGMsZCkpfV07Zm9yKDtpPGY7aSsrKWlmKGM9ZS5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W2JpKGJqKG0pLGMpXTtlbHNle2M9ZS5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyk7aWYoY1tvXSl7ZD0rK2k7Zm9yKDtkPGY7ZCsrKWlmKGUucmVsYXRpdmVbYVtkXS50eXBlXSlicmVhaztyZXR1cm4gYmwoaT4xJiZiaihtKSxpPjEmJmEuc2xpY2UoMCxpLTEpLmpvaW4oIiIpLnJlcGxhY2UoTCwiJDEiKSxjLGk8ZCYmYm0oYS5zbGljZShpLGQpKSxkPGYmJmJtKGE9YS5zbGljZShkKSksZDxmJiZhLmpvaW4oIiIpKX1tLnB1c2goYyl9cmV0dXJuIGJqKG0pfWZ1bmN0aW9uIGJuKGEsYil7dmFyIGQ9Yi5sZW5ndGg+MCxmPWEubGVuZ3RoPjAsZz1mdW5jdGlvbihoLGksaixrLG0pe3ZhciBuLG8scCxxPVtdLHM9MCx1PSIwIix4PWgmJltdLHk9bSE9bnVsbCx6PWwsQT1ofHxmJiZlLmZpbmQuVEFHKCIqIixtJiZpLnBhcmVudE5vZGV8fGkpLEI9dCs9ej09bnVsbD8xOk1hdGguRTt5JiYobD1pIT09ciYmaSxjPWcuZWwpO2Zvcig7KG49QVt1XSkhPW51bGw7dSsrKXtpZihmJiZuKXtmb3Iobz0wO3A9YVtvXTtvKyspaWYocChuLGksaikpe2sucHVzaChuKTticmVha315JiYodD1CLGM9KytnLmVsKX1kJiYoKG49IXAmJm4pJiZzLS0saCYmeC5wdXNoKG4pKX1zKz11O2lmKGQmJnUhPT1zKXtmb3Iobz0wO3A9YltvXTtvKyspcCh4LHEsaSxqKTtpZihoKXtpZihzPjApd2hpbGUodS0tKSF4W3VdJiYhcVt1XSYmKHFbdV09di5jYWxsKGspKTtxPWJrKHEpfXcuYXBwbHkoayxxKSx5JiYhaCYmcS5sZW5ndGg+MCYmcytiLmxlbmd0aD4xJiZiYy51bmlxdWVTb3J0KGspfXJldHVybiB5JiYodD1CLGw9eikseH07cmV0dXJuIGcuZWw9MCxkP3ooZyk6Z31mdW5jdGlvbiBibyhhLGIsYyxkKXt2YXIgZT0wLGY9Yi5sZW5ndGg7Zm9yKDtlPGY7ZSsrKWJjKGEsYltlXSxjLGQpO3JldHVybiBjfWZ1bmN0aW9uIGJwKGEsYixjLGQsZil7dmFyIGcsaCxqLGssbCxtPWJoKGEpLG49bS5sZW5ndGg7aWYoIWQmJm0ubGVuZ3RoPT09MSl7aD1tWzBdPW1bMF0uc2xpY2UoMCk7aWYoaC5sZW5ndGg+MiYmKGo9aFswXSkudHlwZT09PSJJRCImJmIubm9kZVR5cGU9PT05JiYhZiYmZS5yZWxhdGl2ZVtoWzFdLnR5cGVdKXtiPWUuZmluZC5JRChqLm1hdGNoZXNbMF0ucmVwbGFjZShWLCIiKSxiLGYpWzBdO2lmKCFiKXJldHVybiBjO2E9YS5zbGljZShoLnNoaWZ0KCkubGVuZ3RoKX1mb3IoZz1XLlBPUy50ZXN0KGEpPy0xOmgubGVuZ3RoLTE7Zz49MDtnLS0pe2o9aFtnXTtpZihlLnJlbGF0aXZlW2s9ai50eXBlXSlicmVhaztpZihsPWUuZmluZFtrXSlpZihkPWwoai5tYXRjaGVzWzBdLnJlcGxhY2UoViwiIiksUi50ZXN0KGhbMF0udHlwZSkmJmIucGFyZW50Tm9kZXx8YixmKSl7aC5zcGxpY2UoZywxKSxhPWQubGVuZ3RoJiZoLmpvaW4oIiIpO2lmKCFhKXJldHVybiB3LmFwcGx5KGMseC5jYWxsKGQsMCkpLGM7YnJlYWt9fX1yZXR1cm4gaShhLG0pKGQsYixmLGMsUi50ZXN0KGEpKSxjfWZ1bmN0aW9uIGJxKCl7fXZhciBjLGQsZSxmLGcsaCxpLGosayxsLG09ITAsbj0idW5kZWZpbmVkIixvPSgic2l6Y2FjaGUiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoIi4iLCIiKSxxPVN0cmluZyxyPWEuZG9jdW1lbnQscz1yLmRvY3VtZW50RWxlbWVudCx0PTAsdT0wLHY9W10ucG9wLHc9W10ucHVzaCx4PVtdLnNsaWNlLHk9W10uaW5kZXhPZnx8ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPXRoaXMubGVuZ3RoO2Zvcig7YjxjO2IrKylpZih0aGlzW2JdPT09YSlyZXR1cm4gYjtyZXR1cm4tMX0sej1mdW5jdGlvbihhLGIpe3JldHVybiBhW29dPWI9PW51bGx8fGIsYX0sQT1mdW5jdGlvbigpe3ZhciBhPXt9LGI9W107cmV0dXJuIHooZnVuY3Rpb24oYyxkKXtyZXR1cm4gYi5wdXNoKGMpPmUuY2FjaGVMZW5ndGgmJmRlbGV0ZSBhW2Iuc2hpZnQoKV0sYVtjXT1kfSxhKX0sQj1BKCksQz1BKCksRD1BKCksRT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsRj0iKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLEc9Ri5yZXBsYWNlKCJ3IiwidyMiKSxIPSIoWypeJHwhfl0/PSkiLEk9IlxcWyIrRSsiKigiK0YrIikiK0UrIiooPzoiK0grRSsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrRysiKXwpfCkiK0UrIipcXF0iLEo9IjooIitGKyIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiK0krIil8W146XXxcXFxcLikqfC4qKSlcXCl8KSIsSz0iOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0UrIiooKD86LVxcZCk/XFxkKikiK0UrIipcXCl8KSg/PVteLV18JCkiLEw9bmV3IFJlZ0V4cCgiXiIrRSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitFKyIrJCIsImciKSxNPW5ldyBSZWdFeHAoIl4iK0UrIiosIitFKyIqIiksTj1uZXcgUmVnRXhwKCJeIitFKyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitFKyIqIiksTz1uZXcgUmVnRXhwKEopLFA9L14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLFE9L146bm90LyxSPS9bXHgyMFx0XHJcblxmXSpbK35dLyxTPS86bm90XCgkLyxUPS9oXGQvaSxVPS9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksVj0vXFwoPyFcXCkvZyxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK0YrIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrRisiKSIpLE5BTUU6bmV3IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrRisiKVsnXCJdP1xcXSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrRi5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrSSksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0opLFBPUzpuZXcgUmVnRXhwKEssImkiKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIrRSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrRSsiKig/OihbKy1dfCkiK0UrIiooXFxkKyl8KSkiK0UrIipcXCl8KSIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrRSsiKls+K35dfCIrSywiaSIpfSxYPWZ1bmN0aW9uKGEpe3ZhciBiPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiBhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yj1udWxsfX0sWT1YKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKHIuY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksWj1YKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsYS5maXJzdENoaWxkJiZ0eXBlb2YgYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PW4mJmEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIjIn0pLCQ9WChmdW5jdGlvbihhKXthLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciBiPXR5cGVvZiBhLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuIGIhPT0iYm9vbGVhbiImJmIhPT0ic3RyaW5nIn0pLF89WChmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiIsIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8IWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD8hMTooYS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIixhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0yKX0pLGJhPVgoZnVuY3Rpb24oYSl7YS5pZD1vKzAsYS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrbysiJz48L2E+PGRpdiBuYW1lPSciK28rIic+PC9kaXY+IixzLmluc2VydEJlZm9yZShhLHMuZmlyc3RDaGlsZCk7dmFyIGI9ci5nZXRFbGVtZW50c0J5TmFtZSYmci5nZXRFbGVtZW50c0J5TmFtZShvKS5sZW5ndGg9PT0yK3IuZ2V0RWxlbWVudHNCeU5hbWUobyswKS5sZW5ndGg7cmV0dXJuIGQ9IXIuZ2V0RWxlbWVudEJ5SWQobykscy5yZW1vdmVDaGlsZChhKSxifSk7dHJ5e3guY2FsbChzLmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2goYmIpe3g9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtmb3IoO2I9dGhpc1thXTthKyspYy5wdXNoKGIpO3JldHVybiBjfX1iYy5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJjKGEsbnVsbCxudWxsLGIpfSxiYy5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYmMoYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sZj1iYy5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGU9YS5ub2RlVHlwZTtpZihlKXtpZihlPT09MXx8ZT09PTl8fGU9PT0xMSl7aWYodHlwZW9mIGEudGV4dENvbnRlbnQ9PSJzdHJpbmciKXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1mKGEpfWVsc2UgaWYoZT09PTN8fGU9PT00KXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIGZvcig7Yj1hW2RdO2QrKyljKz1mKGIpO3JldHVybiBjfSxnPWJjLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfSxoPWJjLmNvbnRhaW5zPXMuY29udGFpbnM/ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm5vZGVUeXBlPT09OT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISEoZCYmZC5ub2RlVHlwZT09PTEmJmMuY29udGFpbnMmJmMuY29udGFpbnMoZCkpfTpzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGEsYil7cmV0dXJuIGImJiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTpmdW5jdGlvbihhLGIpe3doaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxiYy5hdHRyPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1nKGEpO3JldHVybiBkfHwoYj1iLnRvTG93ZXJDYXNlKCkpLChjPWUuYXR0ckhhbmRsZVtiXSk/YyhhKTpkfHwkP2EuZ2V0QXR0cmlidXRlKGIpOihjPWEuZ2V0QXR0cmlidXRlTm9kZShiKSxjP3R5cGVvZiBhW2JdPT0iYm9vbGVhbiI/YVtiXT9iOm51bGw6Yy5zcGVjaWZpZWQ/Yy52YWx1ZTpudWxsOm51bGwpfSxlPWJjLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOnosbWF0Y2g6VyxhdHRySGFuZGxlOlo/e306e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LGZpbmQ6e0lEOmQ/ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09biYmIWMpe3ZhciBkPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGQmJmQucGFyZW50Tm9kZT9bZF06W119fTpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVudEJ5SWQhPT1uJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gZT9lLmlkPT09YXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PW4mJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZT09PWE/W2VdOmI6W119fSxUQUc6WT9mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09bilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKGE9PT0iKiIpe3ZhciBkLGU9W10sZj0wO2Zvcig7ZD1jW2ZdO2YrKylkLm5vZGVUeXBlPT09MSYmZS5wdXNoKGQpO3JldHVybiBlfXJldHVybiBjfSxOQU1FOmJhJiZmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT09bilyZXR1cm4gYi5nZXRFbGVtZW50c0J5TmFtZShuYW1lKX0sQ0xBU1M6XyYmZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1uJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpfX0scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKFYsIiIpLGFbM109KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKFYsIiIpLGFbMl09PT0ifj0iJiYoYVszXT0iICIrYVszXSsiICIpLGEuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS50b0xvd2VyQ2FzZSgpLGFbMV09PT0ibnRoIj8oYVsyXXx8YmMuZXJyb3IoYVswXSksYVszXT0rKGFbM10/YVs0XSsoYVs1XXx8MSk6MiooYVsyXT09PSJldmVuInx8YVsyXT09PSJvZGQiKSksYVs0XT0rKGFbNl0rYVs3XXx8YVsyXT09PSJvZGQiKSk6YVsyXSYmYmMuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM7aWYoVy5DSElMRC50ZXN0KGFbMF0pKXJldHVybiBudWxsO2lmKGFbM10pYVsyXT1hWzNdO2Vsc2UgaWYoYj1hWzRdKU8udGVzdChiKSYmKGM9YmgoYiwhMCkpJiYoYz1iLmluZGV4T2YoIikiLGIubGVuZ3RoLWMpLWIubGVuZ3RoKSYmKGI9Yi5zbGljZSgwLGMpLGFbMF09YVswXS5zbGljZSgwLGMpKSxhWzJdPWI7cmV0dXJuIGEuc2xpY2UoMCwzKX19LGZpbHRlcjp7SUQ6ZD9mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoViwiIiksZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QXR0cmlidXRlKCJpZCIpPT09YX19OmZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZShWLCIiKSxmdW5jdGlvbihiKXt2YXIgYz10eXBlb2YgYi5nZXRBdHRyaWJ1dGVOb2RlIT09biYmYi5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBjJiZjLnZhbHVlPT09YX19LFRBRzpmdW5jdGlvbihhKXtyZXR1cm4gYT09PSIqIj9mdW5jdGlvbigpe3JldHVybiEwfTooYT1hLnJlcGxhY2UoViwiIikudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXtyZXR1cm4gYi5ub2RlTmFtZSYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YX0pfSxDTEFTUzpmdW5jdGlvbihhKXt2YXIgYj1CW29dW2FdO3JldHVybiBifHwoYj1CKGEsbmV3IFJlZ0V4cCgiKF58IitFKyIpIithKyIoIitFKyJ8JCkiKSkpLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdldEF0dHJpYnV0ZSE9PW4mJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9fSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCxlKXt2YXIgZj1iYy5hdHRyKGQsYSk7cmV0dXJuIGY9PW51bGw/Yj09PSIhPSI6Yj8oZis9IiIsYj09PSI9Ij9mPT09YzpiPT09IiE9Ij9mIT09YzpiPT09Il49Ij9jJiZmLmluZGV4T2YoYyk9PT0wOmI9PT0iKj0iP2MmJmYuaW5kZXhPZihjKT4tMTpiPT09IiQ9Ij9jJiZmLnN1YnN0cihmLmxlbmd0aC1jLmxlbmd0aCk9PT1jOmI9PT0ifj0iPygiICIrZisiICIpLmluZGV4T2YoYyk+LTE6Yj09PSJ8PSI/Zj09PWN8fGYuc3Vic3RyKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYT09PSJudGgiP2Z1bmN0aW9uKGEpe3ZhciBiLGUsZj1hLnBhcmVudE5vZGU7aWYoYz09PTEmJmQ9PT0wKXJldHVybiEwO2lmKGYpe2U9MDtmb3IoYj1mLmZpcnN0Q2hpbGQ7YjtiPWIubmV4dFNpYmxpbmcpaWYoYi5ub2RlVHlwZT09PTEpe2UrKztpZihhPT09YilicmVha319cmV0dXJuIGUtPWQsZT09PWN8fGUlYz09PTAmJmUvYz49MH06ZnVuY3Rpb24oYil7dmFyIGM9Yjtzd2l0Y2goYSl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShjPWMucHJldmlvdXNTaWJsaW5nKWlmKGMubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGE9PT0iZmlyc3QiKXJldHVybiEwO2M9YjtjYXNlImxhc3QiOndoaWxlKGM9Yy5uZXh0U2libGluZylpZihjLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWUucHNldWRvc1thXXx8ZS5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGJjLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGRbb10/ZChiKTpkLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZS5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/eihmdW5jdGlvbihhLGMpe3ZhciBlLGY9ZChhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWU9eS5jYWxsKGEsZltnXSksYVtlXT0hKGNbZV09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZChhLDAsYyl9KTpkfX0scHNldWRvczp7bm90OnooZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWkoYS5yZXBsYWNlKEwsIiQxIikpO3JldHVybiBkW29dP3ooZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSlpZihmPWdbaF0pYVtoXT0hKGJbaF09Zil9KTpmdW5jdGlvbihhLGUsZil7cmV0dXJuIGJbMF09YSxkKGIsbnVsbCxmLGMpLCFjLnBvcCgpfX0pLGhhczp6KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYmMoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczp6KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGYoYikpLmluZGV4T2YoYSk+LTF9fSksZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiEhYS5jaGVja2VkfHxiPT09Im9wdGlvbiImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWUucHNldWRvcy5lbXB0eShhKX0sZW1wdHk6ZnVuY3Rpb24oYSl7dmFyIGI7YT1hLmZpcnN0Q2hpbGQ7d2hpbGUoYSl7aWYoYS5ub2RlTmFtZT4iQCJ8fChiPWEubm9kZVR5cGUpPT09M3x8Yj09PTQpcmV0dXJuITE7YT1hLm5leHRTaWJsaW5nfXJldHVybiEwfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFQudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYoYj1hLnR5cGUpPT09InRleHQiJiYoKGM9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSk9PW51bGx8fGMudG9Mb3dlckNhc2UoKT09PWIpfSxyYWRpbzpiZCgicmFkaW8iKSxjaGVja2JveDpiZCgiY2hlY2tib3giKSxmaWxlOmJkKCJmaWxlIikscGFzc3dvcmQ6YmQoInBhc3N3b3JkIiksaW1hZ2U6YmQoImltYWdlIiksc3VibWl0OmJlKCJzdWJtaXQiKSxyZXNldDpiZSgicmVzZXQiKSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiPT09ImlucHV0IiYmYS50eXBlPT09ImJ1dHRvbiJ8fGI9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFUudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vd25lckRvY3VtZW50O3JldHVybiBhPT09Yi5hY3RpdmVFbGVtZW50JiYoIWIuaGFzRm9jdXN8fGIuaGFzRm9jdXMoKSkmJighIWEudHlwZXx8ISFhLmhyZWYpfSxhY3RpdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH0sZmlyc3Q6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswXX0pLGxhc3Q6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVybltiLTFdfSksZXE6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVybltjPDA/YytiOmNdfSksZXZlbjpiZihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiO2QrPTIpYS5wdXNoKGQpO3JldHVybiBhfSksb2RkOmJmKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MTtkPGI7ZCs9MilhLnB1c2goZCk7cmV0dXJuIGF9KSxsdDpiZihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWM8MD9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0OmJmKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YzwwP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGo9cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Yj8oaz0hMCwwKTooIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb246YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0KT8tMToxfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBrPSEwLDA7aWYoYS5zb3VyY2VJbmRleCYmYi5zb3VyY2VJbmRleClyZXR1cm4gYS5zb3VyY2VJbmRleC1iLnNvdXJjZUluZGV4O3ZhciBjLGQsZT1bXSxmPVtdLGc9YS5wYXJlbnROb2RlLGg9Yi5wYXJlbnROb2RlLGk9ZztpZihnPT09aClyZXR1cm4gYmcoYSxiKTtpZighZylyZXR1cm4tMTtpZighaClyZXR1cm4gMTt3aGlsZShpKWUudW5zaGlmdChpKSxpPWkucGFyZW50Tm9kZTtpPWg7d2hpbGUoaSlmLnVuc2hpZnQoaSksaT1pLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaj0wO2o8YyYmajxkO2orKylpZihlW2pdIT09ZltqXSlyZXR1cm4gYmcoZVtqXSxmW2pdKTtyZXR1cm4gaj09PWM/YmcoYSxmW2pdLC0xKTpiZyhlW2pdLGIsMSl9LFswLDBdLnNvcnQoaiksbT0hayxiYy51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9MTtrPW0sYS5zb3J0KGopO2lmKGspZm9yKDtiPWFbY107YysrKWI9PT1hW2MtMV0mJmEuc3BsaWNlKGMtLSwxKTtyZXR1cm4gYX0sYmMuZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2EpfSxpPWJjLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1EW29dW2FdO2lmKCFmKXtifHwoYj1iaChhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj1ibShiW2NdKSxmW29dP2QucHVzaChmKTplLnB1c2goZik7Zj1EKGEsYm4oZSxkKSl9cmV0dXJuIGZ9LHIucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYSxiPWJwLGM9Lyd8XFwvZyxkPS9cPVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLGU9WyI6Zm9jdXMiXSxmPVsiOmFjdGl2ZSIsIjpmb2N1cyJdLGg9cy5tYXRjaGVzU2VsZWN0b3J8fHMubW96TWF0Y2hlc1NlbGVjdG9yfHxzLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8cy5vTWF0Y2hlc1NlbGVjdG9yfHxzLm1zTWF0Y2hlc1NlbGVjdG9yO1goZnVuY3Rpb24oYSl7YS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZS5wdXNoKCJcXFsiK0UrIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fGUucHVzaCgiOmNoZWNrZWQiKX0pLFgoZnVuY3Rpb24oYSl7YS5pbm5lckhUTUw9IjxwIHRlc3Q9Jyc+PC9wPiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbdGVzdF49JyddIikubGVuZ3RoJiZlLnB1c2goIlsqXiRdPSIrRSsiKig/OlwiXCJ8JycpIiksYS5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdoaWRkZW4nLz4iLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGUucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKX0pLGU9bmV3IFJlZ0V4cChlLmpvaW4oInwiKSksYnA9ZnVuY3Rpb24oYSxkLGYsZyxoKXtpZighZyYmIWgmJighZXx8IWUudGVzdChhKSkpe3ZhciBpLGosaz0hMCxsPW8sbT1kLG49ZC5ub2RlVHlwZT09PTkmJmE7aWYoZC5ub2RlVHlwZT09PTEmJmQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXtpPWJoKGEpLChrPWQuZ2V0QXR0cmlidXRlKCJpZCIpKT9sPWsucmVwbGFjZShjLCJcXCQmIik6ZC5zZXRBdHRyaWJ1dGUoImlkIixsKSxsPSJbaWQ9JyIrbCsiJ10gIixqPWkubGVuZ3RoO3doaWxlKGotLSlpW2pdPWwraVtqXS5qb2luKCIiKTttPVIudGVzdChhKSYmZC5wYXJlbnROb2RlfHxkLG49aS5qb2luKCIsIil9aWYobil0cnl7cmV0dXJuIHcuYXBwbHkoZix4LmNhbGwobS5xdWVyeVNlbGVjdG9yQWxsKG4pLDApKSxmfWNhdGNoKHApe31maW5hbGx5e2t8fGQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX1yZXR1cm4gYihhLGQsZixnLGgpfSxoJiYoWChmdW5jdGlvbihiKXthPWguY2FsbChiLCJkaXYiKTt0cnl7aC5jYWxsKGIsIlt0ZXN0IT0nJ106c2l6emxlIiksZi5wdXNoKCIhPSIsSil9Y2F0Y2goYyl7fX0pLGY9bmV3IFJlZ0V4cChmLmpvaW4oInwiKSksYmMubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGIsYyl7Yz1jLnJlcGxhY2UoZCwiPSckMSddIik7aWYoIWcoYikmJiFmLnRlc3QoYykmJighZXx8IWUudGVzdChjKSkpdHJ5e3ZhciBpPWguY2FsbChiLGMpO2lmKGl8fGF8fGIuZG9jdW1lbnQmJmIuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gaX1jYXRjaChqKXt9cmV0dXJuIGJjKGMsbnVsbCxudWxsLFtiXSkubGVuZ3RoPjB9KX0oKSxlLnBzZXVkb3MubnRoPWUucHNldWRvcy5lcSxlLmZpbHRlcnM9YnEucHJvdG90eXBlPWUucHNldWRvcyxlLnNldEZpbHRlcnM9bmV3IGJxLGJjLmF0dHI9cC5hdHRyLHAuZmluZD1iYyxwLmV4cHI9YmMuc2VsZWN0b3JzLHAuZXhwclsiOiJdPXAuZXhwci5wc2V1ZG9zLHAudW5pcXVlPWJjLnVuaXF1ZVNvcnQscC50ZXh0PWJjLmdldFRleHQscC5pc1hNTERvYz1iYy5pc1hNTCxwLmNvbnRhaW5zPWJjLmNvbnRhaW5zfShhKTt2YXIgYmM9L1VudGlsJC8sYmQ9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sYmU9L14uW146I1xbXC4sXSokLyxiZj1wLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LGJnPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3AuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPXRoaXM7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBwKGEpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTAsYz1oLmxlbmd0aDtiPGM7YisrKWlmKHAuY29udGFpbnMoaFtiXSx0aGlzKSlyZXR1cm4hMH0pO2c9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpO2ZvcihiPTAsYz10aGlzLmxlbmd0aDtiPGM7YisrKXtkPWcubGVuZ3RoLHAuZmluZChhLHRoaXNbYl0sZyk7aWYoYj4wKWZvcihlPWQ7ZTxnLmxlbmd0aDtlKyspZm9yKGY9MDtmPGQ7ZisrKWlmKGdbZl09PT1nW2VdKXtnLnNwbGljZShlLS0sMSk7YnJlYWt9fXJldHVybiBnfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1wKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2I8ZDtiKyspaWYocC5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYmoodGhpcyxhLCExKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhiaih0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/YmYudGVzdChhKT9wKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpwLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MCxlPXRoaXMubGVuZ3RoLGY9W10sZz1iZi50ZXN0KGEpfHx0eXBlb2YgYSE9InN0cmluZyI/cChhLGJ8fHRoaXMuY29udGV4dCk6MDtmb3IoO2Q8ZTtkKyspe2M9dGhpc1tkXTt3aGlsZShjJiZjLm93bmVyRG9jdW1lbnQmJmMhPT1iJiZjLm5vZGVUeXBlIT09MTEpe2lmKGc/Zy5pbmRleChjKT4tMTpwLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGMsYSkpe2YucHVzaChjKTticmVha31jPWMucGFyZW50Tm9kZX19cmV0dXJuIGY9Zi5sZW5ndGg+MT9wLnVuaXF1ZShmKTpmLHRoaXMucHVzaFN0YWNrKGYsImNsb3Nlc3QiLGEpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT90eXBlb2YgYT09InN0cmluZyI/cC5pbkFycmF5KHRoaXNbMF0scChhKSk6cC5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYT09InN0cmluZyI/cChhLGIpOnAubWFrZUFycmF5KGEmJmEubm9kZVR5cGU/W2FdOmEpLGQ9cC5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhiaChjWzBdKXx8YmgoZFswXSk/ZDpwLnVuaXF1ZShkKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKGE9PW51bGw/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pLHAuZm4uYW5kU2VsZj1wLmZuLmFkZEJhY2sscC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBwLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBiaShhLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBiaShhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gcC5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gcC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gcC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIHAuc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHAuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gcC5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OnAubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPXAubWFwKHRoaXMsYixjKTtyZXR1cm4gYmMudGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1wLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFiZ1thXT9wLnVuaXF1ZShlKTplLHRoaXMubGVuZ3RoPjEmJmJkLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlLGEsay5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KSxwLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksYi5sZW5ndGg9PT0xP3AuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106cC5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxmPWFbY107d2hpbGUoZiYmZi5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zi5ub2RlVHlwZSE9PTF8fCFwKGYpLmlzKGQpKSlmLm5vZGVUeXBlPT09MSYmZS5wdXNoKGYpLGY9ZltjXTtyZXR1cm4gZX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIGJsPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixibT0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLGJuPS9eXHMrLyxibz0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLGJwPS88KFtcdzpdKykvLGJxPS88dGJvZHkvaSxicj0vPHwmIz9cdys7Lyxicz0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLGJ0PS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYnU9bmV3IFJlZ0V4cCgiPCg/OiIrYmwrIilbXFxzLz5dIiwiaSIpLGJ2PS9eKD86Y2hlY2tib3h8cmFkaW8pJC8sYnc9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYng9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxieT0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pfFtcXVwtXXsyfT5ccyokL2csYno9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYkE9YmsoZSksYkI9YkEuYXBwZW5kQ2hpbGQoZS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Ynoub3B0Z3JvdXA9Ynoub3B0aW9uLGJ6LnRib2R5PWJ6LnRmb290PWJ6LmNvbGdyb3VwPWJ6LmNhcHRpb249YnoudGhlYWQsYnoudGg9YnoudGQscC5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fChiei5fZGVmYXVsdD1bMSwiWDxkaXY+IiwiPC9kaXY+Il0pLHAuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yj9wLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihwLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtwKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9cChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBwLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXAodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9cC5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7cCh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3Aubm9kZU5hbWUodGhpcywiYm9keSIpfHxwKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5hcHBlbmRDaGlsZChhKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKCFiaCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9cC5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1lcmdlKGEsdGhpcyksImJlZm9yZSIsdGhpcy5zZWxlY3Rvcil9fSxhZnRlcjpmdW5jdGlvbigpe2lmKCFiaCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9cC5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1lcmdlKHRoaXMsYSksImFmdGVyIix0aGlzLnNlbGVjdG9yKX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MDtmb3IoOyhjPXRoaXNbZF0pIT1udWxsO2QrKylpZighYXx8cC5maWx0ZXIoYSxbY10pLmxlbmd0aCkhYiYmYy5ub2RlVHlwZT09PTEmJihwLmNsZWFuRGF0YShjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHAuY2xlYW5EYXRhKFtjXSkpLGMucGFyZW50Tm9kZSYmYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBhLGI9MDtmb3IoOyhhPXRoaXNbYl0pIT1udWxsO2IrKyl7YS5ub2RlVHlwZT09PTEmJnAuY2xlYW5EYXRhKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYS5maXJzdENoaWxkKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBwLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBjPXRoaXNbMF18fHt9LGQ9MCxlPXRoaXMubGVuZ3RoO2lmKGE9PT1iKXJldHVybiBjLm5vZGVUeXBlPT09MT9jLmlubmVySFRNTC5yZXBsYWNlKGJtLCIiKTpiO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJzLnRlc3QoYSkmJihwLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8IWJ1LnRlc3QoYSkpJiYocC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhYm4udGVzdChhKSkmJiFielsoYnAuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKGJvLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPGU7ZCsrKWM9dGhpc1tkXXx8e30sYy5ub2RlVHlwZT09PTEmJihwLmNsZWFuRGF0YShjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLGMuaW5uZXJIVE1MPWEpO2M9MH1jYXRjaChmKXt9fWMmJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIGJoKHRoaXNbMF0pP3RoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKHAocC5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXM6cC5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1wKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pOih0eXBlb2YgYSE9InN0cmluZyImJihhPXAoYSkuZGV0YWNoKCkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7cCh0aGlzKS5yZW1vdmUoKSxiP3AoYikuYmVmb3JlKGEpOnAoYykuYXBwZW5kKGEpfSkpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZCl7YT1bXS5jb25jYXQuYXBwbHkoW10sYSk7dmFyIGUsZixnLGgsaT0wLGo9YVswXSxrPVtdLGw9dGhpcy5sZW5ndGg7aWYoIXAuc3VwcG9ydC5jaGVja0Nsb25lJiZsPjEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYncudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cCh0aGlzKS5kb21NYW5pcChhLGMsZCl9KTtpZihwLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1wKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2YuaHRtbCgpOmIpLGYuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7ZT1wLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGc9ZS5mcmFnbWVudCxmPWcuZmlyc3RDaGlsZCxnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmKGc9Zik7aWYoZil7Yz1jJiZwLm5vZGVOYW1lKGYsInRyIik7Zm9yKGg9ZS5jYWNoZWFibGV8fGwtMTtpPGw7aSsrKWQuY2FsbChjJiZwLm5vZGVOYW1lKHRoaXNbaV0sInRhYmxlIik/YkModGhpc1tpXSwidGJvZHkiKTp0aGlzW2ldLGk9PT1oP2c6cC5jbG9uZShnLCEwLCEwKSl9Zz1mPW51bGwsay5sZW5ndGgmJnAuZWFjaChrLGZ1bmN0aW9uKGEsYil7Yi5zcmM/cC5hamF4P3AuYWpheCh7dXJsOmIuc3JjLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSk6cC5lcnJvcigibm8gYWpheCIpOnAuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYnksIiIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX0pfXJldHVybiB0aGlzfX0pLHAuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoLGk9YVswXTtyZXR1cm4gYz1jfHxlLGM9IWMubm9kZVR5cGUmJmNbMF18fGMsYz1jLm93bmVyRG9jdW1lbnR8fGMsYS5sZW5ndGg9PT0xJiZ0eXBlb2YgaT09InN0cmluZyImJmkubGVuZ3RoPDUxMiYmYz09PWUmJmkuY2hhckF0KDApPT09IjwiJiYhYnQudGVzdChpKSYmKHAuc3VwcG9ydC5jaGVja0Nsb25lfHwhYncudGVzdChpKSkmJihwLnN1cHBvcnQuaHRtbDVDbG9uZXx8IWJ1LnRlc3QoaSkpJiYoZz0hMCxmPXAuZnJhZ21lbnRzW2ldLGg9ZiE9PWIpLGZ8fChmPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHAuY2xlYW4oYSxjLGYsZCksZyYmKHAuZnJhZ21lbnRzW2ldPWgmJmYpKSx7ZnJhZ21lbnQ6ZixjYWNoZWFibGU6Z319LHAuZnJhZ21lbnRzPXt9LHAuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihjKXt2YXIgZCxlPTAsZj1bXSxnPXAoYyksaD1nLmxlbmd0aCxpPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKChpPT1udWxsfHxpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT0xKSYmaD09PTEpcmV0dXJuIGdbYl0odGhpc1swXSksdGhpcztmb3IoO2U8aDtlKyspZD0oZT4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpLHAoZ1tlXSlbYl0oZCksZj1mLmNvbmNhdChkKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZixhLGcuc2VsZWN0b3IpfX0pLHAuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGc7cC5zdXBwb3J0Lmh0bWw1Q2xvbmV8fHAuaXNYTUxEb2MoYSl8fCFidS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zz1hLmNsb25lTm9kZSghMCk6KGJCLmlubmVySFRNTD1hLm91dGVySFRNTCxiQi5yZW1vdmVDaGlsZChnPWJCLmZpcnN0Q2hpbGQpKTtpZigoIXAuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFwLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYoYS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFwLmlzWE1MRG9jKGEpKXtiRShhLGcpLGQ9YkYoYSksZT1iRihnKTtmb3IoZj0wO2RbZl07KytmKWVbZl0mJmJFKGRbZl0sZVtmXSl9aWYoYil7YkQoYSxnKTtpZihjKXtkPWJGKGEpLGU9YkYoZyk7Zm9yKGY9MDtkW2ZdOysrZiliRChkW2ZdLGVbZl0pfX1yZXR1cm4gZD1lPW51bGwsZ30sY2xlYW46ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scSxyLHM9Yj09PWUmJmJBLHQ9W107aWYoIWJ8fHR5cGVvZiBiLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQiKWI9ZTtmb3IoZj0wOyhoPWFbZl0pIT1udWxsO2YrKyl7dHlwZW9mIGg9PSJudW1iZXIiJiYoaCs9IiIpO2lmKCFoKWNvbnRpbnVlO2lmKHR5cGVvZiBoPT0ic3RyaW5nIilpZighYnIudGVzdChoKSloPWIuY3JlYXRlVGV4dE5vZGUoaCk7ZWxzZXtzPXN8fGJrKGIpLGw9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxzLmFwcGVuZENoaWxkKGwpLGg9aC5yZXBsYWNlKGJvLCI8JDE+PC8kMj4iKSxpPShicC5leGVjKGgpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGo9YnpbaV18fGJ6Ll9kZWZhdWx0LGs9alswXSxsLmlubmVySFRNTD1qWzFdK2gralsyXTt3aGlsZShrLS0pbD1sLmxhc3RDaGlsZDtpZighcC5zdXBwb3J0LnRib2R5KXttPWJxLnRlc3QoaCksbj1pPT09InRhYmxlIiYmIW0/bC5maXJzdENoaWxkJiZsLmZpcnN0Q2hpbGQuY2hpbGROb2RlczpqWzFdPT09Ijx0YWJsZT4iJiYhbT9sLmNoaWxkTm9kZXM6W107Zm9yKGc9bi5sZW5ndGgtMTtnPj0wOy0tZylwLm5vZGVOYW1lKG5bZ10sInRib2R5IikmJiFuW2ddLmNoaWxkTm9kZXMubGVuZ3RoJiZuW2ddLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobltnXSl9IXAuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmYm4udGVzdChoKSYmbC5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShibi5leGVjKGgpWzBdKSxsLmZpcnN0Q2hpbGQpLGg9bC5jaGlsZE5vZGVzLGwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsKX1oLm5vZGVUeXBlP3QucHVzaChoKTpwLm1lcmdlKHQsaCl9bCYmKGg9bD1zPW51bGwpO2lmKCFwLnN1cHBvcnQuYXBwZW5kQ2hlY2tlZClmb3IoZj0wOyhoPXRbZl0pIT1udWxsO2YrKylwLm5vZGVOYW1lKGgsImlucHV0Iik/YkcoaCk6dHlwZW9mIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiZwLmdyZXAoaC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxiRyk7aWYoYyl7cT1mdW5jdGlvbihhKXtpZighYS50eXBlfHxieC50ZXN0KGEudHlwZSkpcmV0dXJuIGQ/ZC5wdXNoKGEucGFyZW50Tm9kZT9hLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk6YSk6Yy5hcHBlbmRDaGlsZChhKX07Zm9yKGY9MDsoaD10W2ZdKSE9bnVsbDtmKyspaWYoIXAubm9kZU5hbWUoaCwic2NyaXB0Iil8fCFxKGgpKWMuYXBwZW5kQ2hpbGQoaCksdHlwZW9mIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiYocj1wLmdyZXAocC5tZXJnZShbXSxoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSkscSksdC5zcGxpY2UuYXBwbHkodCxbZisxLDBdLmNvbmNhdChyKSksZis9ci5sZW5ndGgpfXJldHVybiB0fSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPTAsaD1wLmV4cGFuZG8saT1wLmNhY2hlLGo9cC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8saz1wLmV2ZW50LnNwZWNpYWw7Zm9yKDsoZT1hW2ddKSE9bnVsbDtnKyspaWYoYnx8cC5hY2NlcHREYXRhKGUpKXtkPWVbaF0sYz1kJiZpW2RdO2lmKGMpe2lmKGMuZXZlbnRzKWZvcihmIGluIGMuZXZlbnRzKWtbZl0/cC5ldmVudC5yZW1vdmUoZSxmKTpwLnJlbW92ZUV2ZW50KGUsZixjLmhhbmRsZSk7aVtkXSYmKGRlbGV0ZSBpW2RdLGo/ZGVsZXRlIGVbaF06ZS5yZW1vdmVBdHRyaWJ1dGU/ZS5yZW1vdmVBdHRyaWJ1dGUoaCk6ZVtoXT1udWxsLHAuZGVsZXRlZElkcy5wdXNoKGQpKX19fX0pLGZ1bmN0aW9uKCl7dmFyIGEsYjtwLnVhTWF0Y2g9ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9LyhjaHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8LyhvcGVyYSkoPzouKnZlcnNpb258KVsgXC9dKFtcdy5dKykvLmV4ZWMoYSl8fC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoYSl8fGEuaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJi8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKyl8KS8uZXhlYyhhKXx8W107cmV0dXJue2Jyb3dzZXI6YlsxXXx8IiIsdmVyc2lvbjpiWzJdfHwiMCJ9fSxhPXAudWFNYXRjaChnLnVzZXJBZ2VudCksYj17fSxhLmJyb3dzZXImJihiW2EuYnJvd3Nlcl09ITAsYi52ZXJzaW9uPWEudmVyc2lvbiksYi5jaHJvbWU/Yi53ZWJraXQ9ITA6Yi53ZWJraXQmJihiLnNhZmFyaT0hMCkscC5icm93c2VyPWIscC5zdWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJuIG5ldyBhLmZuLmluaXQoYixjKX1wLmV4dGVuZCghMCxhLHRoaXMpLGEuc3VwZXJjbGFzcz10aGlzLGEuZm49YS5wcm90b3R5cGU9dGhpcygpLGEuZm4uY29uc3RydWN0b3I9YSxhLnN1Yj10aGlzLnN1YixhLmZuLmluaXQ9ZnVuY3Rpb24gYyhjLGQpe3JldHVybiBkJiZkIGluc3RhbmNlb2YgcCYmIShkIGluc3RhbmNlb2YgYSkmJihkPWEoZCkpLHAuZm4uaW5pdC5jYWxsKHRoaXMsYyxkLGIpfSxhLmZuLmluaXQucHJvdG90eXBlPWEuZm47dmFyIGI9YShlKTtyZXR1cm4gYX19KCk7dmFyIGJILGJJLGJKLGJLPS9hbHBoYVwoW14pXSpcKS9pLGJMPS9vcGFjaXR5PShbXildKikvLGJNPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyxiTj0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sYk89L15tYXJnaW4vLGJQPW5ldyBSZWdFeHAoIl4oIitxKyIpKC4qKSQiLCJpIiksYlE9bmV3IFJlZ0V4cCgiXigiK3ErIikoPyFweClbYS16JV0rJCIsImkiKSxiUj1uZXcgUmVnRXhwKCJeKFstK10pPSgiK3ErIikiLCJpIiksYlM9e30sYlQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJVPXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LGJWPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sYlc9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXSxiWD1wLmZuLnRvZ2dsZTtwLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHAuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9wLnN0eWxlKGEsYyxkKTpwLmNzcyhhLGMpfSxhLGMsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBiJCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBiJCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJib29sZWFuIjtyZXR1cm4gcC5pc0Z1bmN0aW9uKGEpJiZwLmlzRnVuY3Rpb24oYik/YlguYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuZWFjaChmdW5jdGlvbigpeyhjP2E6YloodGhpcykpP3AodGhpcykuc2hvdygpOnAodGhpcykuaGlkZSgpfSl9fSkscC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1iSChhLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y319fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6cC5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhYS5zdHlsZSlyZXR1cm47dmFyIGYsZyxoLGk9cC5jYW1lbENhc2UoYyksaj1hLnN0eWxlO2M9cC5jc3NQcm9wc1tpXXx8KHAuY3NzUHJvcHNbaV09YlkoaixpKSksaD1wLmNzc0hvb2tzW2NdfHxwLmNzc0hvb2tzW2ldO2lmKGQ9PT1iKXJldHVybiBoJiYiZ2V0ImluIGgmJihmPWguZ2V0KGEsITEsZSkpIT09Yj9mOmpbY107Zz10eXBlb2YgZCxnPT09InN0cmluZyImJihmPWJSLmV4ZWMoZCkpJiYoZD0oZlsxXSsxKSpmWzJdK3BhcnNlRmxvYXQocC5jc3MoYSxjKSksZz0ibnVtYmVyIik7aWYoZD09bnVsbHx8Zz09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47Zz09PSJudW1iZXIiJiYhcC5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZighaHx8ISgic2V0ImluIGgpfHwoZD1oLnNldChhLGQsZSkpIT09Yil0cnl7altjXT1kfWNhdGNoKGspe319LGNzczpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaT1wLmNhbWVsQ2FzZShjKTtyZXR1cm4gYz1wLmNzc1Byb3BzW2ldfHwocC5jc3NQcm9wc1tpXT1iWShhLnN0eWxlLGkpKSxoPXAuY3NzSG9va3NbY118fHAuY3NzSG9va3NbaV0saCYmImdldCJpbiBoJiYoZj1oLmdldChhLCEwLGUpKSxmPT09YiYmKGY9YkgoYSxjKSksZj09PSJub3JtYWwiJiZjIGluIGJVJiYoZj1iVVtjXSksZHx8ZSE9PWI/KGc9cGFyc2VGbG9hdChmKSxkfHxwLmlzTnVtZXJpYyhnKT9nfHwwOmYpOmZ9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fTtmb3IoZSBpbiBiKWZbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07ZD1jLmNhbGwoYSk7Zm9yKGUgaW4gYilhLnN0eWxlW2VdPWZbZV07cmV0dXJuIGR9fSksYS5nZXRDb21wdXRlZFN0eWxlP2JIPWZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGcsaD1hLmdldENvbXB1dGVkU3R5bGUoYixudWxsKSxpPWIuc3R5bGU7cmV0dXJuIGgmJihkPWhbY10sZD09PSIiJiYhcC5jb250YWlucyhiLm93bmVyRG9jdW1lbnQsYikmJihkPXAuc3R5bGUoYixjKSksYlEudGVzdChkKSYmYk8udGVzdChjKSYmKGU9aS53aWR0aCxmPWkubWluV2lkdGgsZz1pLm1heFdpZHRoLGkubWluV2lkdGg9aS5tYXhXaWR0aD1pLndpZHRoPWQsZD1oLndpZHRoLGkud2lkdGg9ZSxpLm1pbldpZHRoPWYsaS5tYXhXaWR0aD1nKSksZH06ZS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoYkg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGY9YS5zdHlsZTtyZXR1cm4gZT09bnVsbCYmZiYmZltiXSYmKGU9ZltiXSksYlEudGVzdChlKSYmIWJNLnRlc3QoYikmJihjPWYubGVmdCxkPWEucnVudGltZVN0eWxlJiZhLnJ1bnRpbWVTdHlsZS5sZWZ0LGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGYubGVmdD1iPT09ImZvbnRTaXplIj8iMWVtIjplLGU9Zi5waXhlbExlZnQrInB4IixmLmxlZnQ9YyxkJiYoYS5ydW50aW1lU3R5bGUubGVmdD1kKSksZT09PSIiPyJhdXRvIjplfSkscC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe3AuY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7aWYoYylyZXR1cm4gYS5vZmZzZXRXaWR0aD09PTAmJmJOLnRlc3QoYkgoYSwiZGlzcGxheSIpKT9wLnN3YXAoYSxiVCxmdW5jdGlvbigpe3JldHVybiBjYihhLGIsZCl9KTpjYihhLGIsZCl9LHNldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGJfKGEsYyxkP2NhKGEsYixkLHAuc3VwcG9ydC5ib3hTaXppbmcmJnAuY3NzKGEsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giKTowKX19fSkscC5zdXBwb3J0Lm9wYWNpdHl8fChwLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBiTC50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9cC5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJnAudHJpbShmLnJlcGxhY2UoYkssIiIpKT09PSIiJiZjLnJlbW92ZUF0dHJpYnV0ZSl7Yy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGQmJiFkLmZpbHRlcilyZXR1cm59Yy5maWx0ZXI9YksudGVzdChmKT9mLnJlcGxhY2UoYkssZSk6ZisiICIrZX19KSxwKGZ1bmN0aW9uKCl7cC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fChwLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcC5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7aWYoYilyZXR1cm4gYkgoYSwibWFyZ2luUmlnaHQiKX0pfX0pLCFwLnN1cHBvcnQucGl4ZWxQb3NpdGlvbiYmcC5mbi5wb3NpdGlvbiYmcC5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7cC5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyl7aWYoYyl7dmFyIGQ9YkgoYSxiKTtyZXR1cm4gYlEudGVzdChkKT9wKGEpLnBvc2l0aW9uKClbYl0rInB4IjpkfX19fSl9KSxwLmV4cHImJnAuZXhwci5maWx0ZXJzJiYocC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdpZHRoPT09MCYmYS5vZmZzZXRIZWlnaHQ9PT0wfHwhcC5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUmJmEuc3R5bGUuZGlzcGxheXx8YkgoYSwiZGlzcGxheSIpKT09PSJub25lIn0scC5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hcC5leHByLmZpbHRlcnMuaGlkZGVuKGEpfSkscC5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtwLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXt2YXIgZCxlPXR5cGVvZiBjPT0ic3RyaW5nIj9jLnNwbGl0KCIgIik6W2NdLGY9e307Zm9yKGQ9MDtkPDQ7ZCsrKWZbYStiVltkXStiXT1lW2RdfHxlW2QtMl18fGVbMF07cmV0dXJuIGZ9fSxiTy50ZXN0KGEpfHwocC5jc3NIb29rc1thK2JdLnNldD1iXyl9KTt2YXIgY2Q9LyUyMC9nLGNlPS9cW1xdJC8sY2Y9L1xyP1xuL2csY2c9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGNoPS9eKD86c2VsZWN0fHRleHRhcmVhKS9pO3AuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gcC5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP3AubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8Y2gudGVzdCh0aGlzLm5vZGVOYW1lKXx8Y2cudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPXAodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpwLmlzQXJyYXkoYyk/cC5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoY2YsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGNmLCJcclxuIil9fSkuZ2V0KCl9fSkscC5wYXJhbT1mdW5jdGlvbihhLGMpe3ZhciBkLGU9W10sZj1mdW5jdGlvbihhLGIpe2I9cC5pc0Z1bmN0aW9uKGIpP2IoKTpiPT1udWxsPyIiOmIsZVtlLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2M9PT1iJiYoYz1wLmFqYXhTZXR0aW5ncyYmcC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKHAuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFwLmlzUGxhaW5PYmplY3QoYSkpcC5lYWNoKGEsZnVuY3Rpb24oKXtmKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGQgaW4gYSljaShkLGFbZF0sYyxmKTtyZXR1cm4gZS5qb2luKCImIikucmVwbGFjZShjZCwiKyIpfTt2YXIgY2osY2ssY2w9LyMuKiQvLGNtPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsY249L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxjbz0vXig/OkdFVHxIRUFEKSQvLGNwPS9eXC9cLy8sY3E9L1w/Lyxjcj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxjcz0vKFs/Jl0pXz1bXiZdKi8sY3Q9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLGN1PXAuZm4ubG9hZCxjdj17fSxjdz17fSxjeD1bIiovIl0rWyIqIl07dHJ5e2NrPWYuaHJlZn1jYXRjaChjeSl7Y2s9ZS5jcmVhdGVFbGVtZW50KCJhIiksY2suaHJlZj0iIixjaz1jay5ocmVmfWNqPWN0LmV4ZWMoY2sudG9Mb3dlckNhc2UoKSl8fFtdLHAuZm4ubG9hZD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZjdSlyZXR1cm4gY3UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZSxmLGcsaD10aGlzLGk9YS5pbmRleE9mKCIgIik7cmV0dXJuIGk+PTAmJihlPWEuc2xpY2UoaSxhLmxlbmd0aCksYT1hLnNsaWNlKDAsaSkpLHAuaXNGdW5jdGlvbihjKT8oZD1jLGM9Yik6YyYmdHlwZW9mIGM9PSJvYmplY3QiJiYoZj0iUE9TVCIpLHAuYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmMsY29tcGxldGU6ZnVuY3Rpb24oYSxiKXtkJiZoLmVhY2goZCxnfHxbYS5yZXNwb25zZVRleHQsYixhXSl9fSkuZG9uZShmdW5jdGlvbihhKXtnPWFyZ3VtZW50cyxoLmh0bWwoZT9wKCI8ZGl2PiIpLmFwcGVuZChhLnJlcGxhY2UoY3IsIiIpKS5maW5kKGUpOmEpfSksdGhpc30scC5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe3AuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxwLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtwW2NdPWZ1bmN0aW9uKGEsZCxlLGYpe3JldHVybiBwLmlzRnVuY3Rpb24oZCkmJihmPWZ8fGUsZT1kLGQ9YikscC5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpmfSl9fSkscC5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBwLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBwLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9jQihhLHAuYWpheFNldHRpbmdzKTooYj1hLGE9cC5hamF4U2V0dGluZ3MpLGNCKGEsYiksYX0sYWpheFNldHRpbmdzOnt1cmw6Y2ssaXNMb2NhbDpjbi50ZXN0KGNqWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04Iixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Y3h9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpwLnBhcnNlSlNPTiwidGV4dCB4bWwiOnAucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Y3ooY3YpLGFqYXhUcmFuc3BvcnQ6Y3ooY3cpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB5KGEsYyxmLGkpe3ZhciBrLHMsdCx1LHcseT1jO2lmKHY9PT0yKXJldHVybjt2PTIsaCYmY2xlYXJUaW1lb3V0KGgpLGc9YixlPWl8fCIiLHgucmVhZHlTdGF0ZT1hPjA/NDowLGYmJih1PWNDKGwseCxmKSk7aWYoYT49MjAwJiZhPDMwMHx8YT09PTMwNClsLmlmTW9kaWZpZWQmJih3PXguZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYocC5sYXN0TW9kaWZpZWRbZF09dyksdz14LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIiksdyYmKHAuZXRhZ1tkXT13KSksYT09PTMwND8oeT0ibm90bW9kaWZpZWQiLGs9ITApOihrPWNEKGwsdSkseT1rLnN0YXRlLHM9ay5kYXRhLHQ9ay5lcnJvcixrPSF0KTtlbHNle3Q9eTtpZigheXx8YSl5PSJlcnJvciIsYTwwJiYoYT0wKX14LnN0YXR1cz1hLHguc3RhdHVzVGV4dD0oY3x8eSkrIiIsaz9vLnJlc29sdmVXaXRoKG0sW3MseSx4XSk6by5yZWplY3RXaXRoKG0sW3gseSx0XSkseC5zdGF0dXNDb2RlKHIpLHI9YixqJiZuLnRyaWdnZXIoImFqYXgiKyhrPyJTdWNjZXNzIjoiRXJyb3IiKSxbeCxsLGs/czp0XSkscS5maXJlV2l0aChtLFt4LHldKSxqJiYobi50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt4LGxdKSwtLXAuYWN0aXZlfHxwLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfXR5cGVvZiBhPT0ib2JqZWN0IiYmKGM9YSxhPWIpLGM9Y3x8e307dmFyIGQsZSxmLGcsaCxpLGosayxsPXAuYWpheFNldHVwKHt9LGMpLG09bC5jb250ZXh0fHxsLG49bSE9PWwmJihtLm5vZGVUeXBlfHxtIGluc3RhbmNlb2YgcCk/cChtKTpwLmV2ZW50LG89cC5EZWZlcnJlZCgpLHE9cC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iikscj1sLnN0YXR1c0NvZGV8fHt9LHQ9e30sdT17fSx2PTAsdz0iY2FuY2VsZWQiLHg9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXYpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPXVbY109dVtjXXx8YSx0W2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiB2PT09Mj9lOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHY9PT0yKXtpZighZil7Zj17fTt3aGlsZShjPWNtLmV4ZWMoZSkpZltjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1mW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdnx8KGwubWltZVR5cGU9YSksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YXx8dyxnJiZnLmFib3J0KGEpLHkoMCxhKSx0aGlzfX07by5wcm9taXNlKHgpLHguc3VjY2Vzcz14LmRvbmUseC5lcnJvcj14LmZhaWwseC5jb21wbGV0ZT1xLmFkZCx4LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYodjwyKWZvcihiIGluIGEpcltiXT1bcltiXSxhW2JdXTtlbHNlIGI9YVt4LnN0YXR1c10seC5hbHdheXMoYil9cmV0dXJuIHRoaXN9LGwudXJsPSgoYXx8bC51cmwpKyIiKS5yZXBsYWNlKGNsLCIiKS5yZXBsYWNlKGNwLGNqWzFdKyIvLyIpLGwuZGF0YVR5cGVzPXAudHJpbShsLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQocyksbC5jcm9zc0RvbWFpbj09bnVsbCYmKGk9Y3QuZXhlYyhsLnVybC50b0xvd2VyQ2FzZSgpKXx8ITEsbC5jcm9zc0RvbWFpbj1pJiZpLmpvaW4oIjoiKSsoaVszXT8iIjppWzFdPT09Imh0dHA6Ij84MDo0NDMpIT09Y2ouam9pbigiOiIpKyhjalszXT8iIjpjalsxXT09PSJodHRwOiI/ODA6NDQzKSksbC5kYXRhJiZsLnByb2Nlc3NEYXRhJiZ0eXBlb2YgbC5kYXRhIT0ic3RyaW5nIiYmKGwuZGF0YT1wLnBhcmFtKGwuZGF0YSxsLnRyYWRpdGlvbmFsKSksY0EoY3YsbCxjLHgpO2lmKHY9PT0yKXJldHVybiB4O2o9bC5nbG9iYWwsbC50eXBlPWwudHlwZS50b1VwcGVyQ2FzZSgpLGwuaGFzQ29udGVudD0hY28udGVzdChsLnR5cGUpLGomJnAuYWN0aXZlKys9PT0wJiZwLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO2lmKCFsLmhhc0NvbnRlbnQpe2wuZGF0YSYmKGwudXJsKz0oY3EudGVzdChsLnVybCk/IiYiOiI/IikrbC5kYXRhLGRlbGV0ZSBsLmRhdGEpLGQ9bC51cmw7aWYobC5jYWNoZT09PSExKXt2YXIgej1wLm5vdygpLEE9bC51cmwucmVwbGFjZShjcywiJDFfPSIreik7bC51cmw9QSsoQT09PWwudXJsPyhjcS50ZXN0KGwudXJsKT8iJiI6Ij8iKSsiXz0iK3o6IiIpfX0obC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixsLmNvbnRlbnRUeXBlKSxsLmlmTW9kaWZpZWQmJihkPWR8fGwudXJsLHAubGFzdE1vZGlmaWVkW2RdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixwLmxhc3RNb2RpZmllZFtkXSkscC5ldGFnW2RdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHAuZXRhZ1tkXSkpLHguc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixsLmRhdGFUeXBlc1swXSYmbC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXT9sLmFjY2VwdHNbbC5kYXRhVHlwZXNbMF1dKyhsLmRhdGFUeXBlc1swXSE9PSIqIj8iLCAiK2N4KyI7IHE9MC4wMSI6IiIpOmwuYWNjZXB0c1siKiJdKTtmb3IoayBpbiBsLmhlYWRlcnMpeC5zZXRSZXF1ZXN0SGVhZGVyKGssbC5oZWFkZXJzW2tdKTtpZighbC5iZWZvcmVTZW5kfHxsLmJlZm9yZVNlbmQuY2FsbChtLHgsbCkhPT0hMSYmdiE9PTIpe3c9ImFib3J0Ijtmb3IoayBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl4W2tdKGxba10pO2c9Y0EoY3csbCxjLHgpO2lmKCFnKXkoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7eC5yZWFkeVN0YXRlPTEsaiYmbi50cmlnZ2VyKCJhamF4U2VuZCIsW3gsbF0pLGwuYXN5bmMmJmwudGltZW91dD4wJiYoaD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eC5hYm9ydCgidGltZW91dCIpfSxsLnRpbWVvdXQpKTt0cnl7dj0xLGcuc2VuZCh0LHkpfWNhdGNoKEIpe2lmKHY8Mil5KC0xLEIpO2Vsc2UgdGhyb3cgQn19cmV0dXJuIHh9cmV0dXJuIHguYWJvcnQoKX0sYWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY0U9W10sY0Y9L1w/LyxjRz0vKD0pXD8oPz0mfCQpfFw/XD8vLGNIPXAubm93KCk7cC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPWNFLnBvcCgpfHxwLmV4cGFuZG8rIl8iK2NIKys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxwLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGMsZCxlKXt2YXIgZixnLGgsaT1jLmRhdGEsaj1jLnVybCxrPWMuanNvbnAhPT0hMSxsPWsmJmNHLnRlc3QoaiksbT1rJiYhbCYmdHlwZW9mIGk9PSJzdHJpbmciJiYhKGMuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmY0cudGVzdChpKTtpZihjLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGx8fG0pcmV0dXJuIGY9Yy5qc29ucENhbGxiYWNrPXAuaXNGdW5jdGlvbihjLmpzb25wQ2FsbGJhY2spP2MuanNvbnBDYWxsYmFjaygpOmMuanNvbnBDYWxsYmFjayxnPWFbZl0sbD9jLnVybD1qLnJlcGxhY2UoY0csIiQxIitmKTptP2MuZGF0YT1pLnJlcGxhY2UoY0csIiQxIitmKTprJiYoYy51cmwrPShjRi50ZXN0KGopPyImIjoiPyIpK2MuanNvbnArIj0iK2YpLGMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBofHxwLmVycm9yKGYrIiB3YXMgbm90IGNhbGxlZCIpLGhbMF19LGMuZGF0YVR5cGVzWzBdPSJqc29uIixhW2ZdPWZ1bmN0aW9uKCl7aD1hcmd1bWVudHN9LGUuYWx3YXlzKGZ1bmN0aW9uKCl7YVtmXT1nLGNbZl0mJihjLmpzb25wQ2FsbGJhY2s9ZC5qc29ucENhbGxiYWNrLGNFLnB1c2goZikpLGgmJnAuaXNGdW5jdGlvbihnKSYmZyhoWzBdKSxoPWc9Yn0pLCJzY3JpcHQifSkscC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBwLmdsb2JhbEV2YWwoYSksYX19fSkscC5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2EuY2FjaGU9PT1iJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxwLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGMsZD1lLmhlYWR8fGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZixnKXtjPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYy5hc3luYz0iYXN5bmMiLGEuc2NyaXB0Q2hhcnNldCYmKGMuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGMuc3JjPWEudXJsLGMub25sb2FkPWMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsZSl7aWYoZXx8IWMucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChjLnJlYWR5U3RhdGUpKWMub25sb2FkPWMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZCYmYy5wYXJlbnROb2RlJiZkLnJlbW92ZUNoaWxkKGMpLGM9YixlfHxnKDIwMCwic3VjY2VzcyIpfSxkLmluc2VydEJlZm9yZShjLGQuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYy5vbmxvYWQoMCwxKX19fX0pO3ZhciBjSSxjSj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gY0kpY0lbYV0oMCwxKX06ITEsY0s9MDtwLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmY0woKXx8Y00oKX06Y0wsZnVuY3Rpb24oYSl7cC5leHRlbmQocC5zdXBwb3J0LHthamF4OiEhYSxjb3JzOiEhYSYmIndpdGhDcmVkZW50aWFscyJpbiBhfSl9KHAuYWpheFNldHRpbmdzLnhocigpKSxwLnN1cHBvcnQuYWpheCYmcC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGMpe2lmKCFjLmNyb3NzRG9tYWlufHxwLnN1cHBvcnQuY29ycyl7dmFyIGQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxmKXt2YXIgZyxoLGk9Yy54aHIoKTtjLnVzZXJuYW1lP2kub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyxjLnVzZXJuYW1lLGMucGFzc3dvcmQpOmkub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyk7aWYoYy54aHJGaWVsZHMpZm9yKGggaW4gYy54aHJGaWVsZHMpaVtoXT1jLnhockZpZWxkc1toXTtjLm1pbWVUeXBlJiZpLm92ZXJyaWRlTWltZVR5cGUmJmkub3ZlcnJpZGVNaW1lVHlwZShjLm1pbWVUeXBlKSwhYy5jcm9zc0RvbWFpbiYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGggaW4gZSlpLnNldFJlcXVlc3RIZWFkZXIoaCxlW2hdKX1jYXRjaChqKXt9aS5zZW5kKGMuaGFzQ29udGVudCYmYy5kYXRhfHxudWxsKSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGgsaixrLGwsbTt0cnl7aWYoZCYmKGV8fGkucmVhZHlTdGF0ZT09PTQpKXtkPWIsZyYmKGkub25yZWFkeXN0YXRlY2hhbmdlPXAubm9vcCxjSiYmZGVsZXRlIGNJW2ddKTtpZihlKWkucmVhZHlTdGF0ZSE9PTQmJmkuYWJvcnQoKTtlbHNle2g9aS5zdGF0dXMsaz1pLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLGw9e30sbT1pLnJlc3BvbnNlWE1MLG0mJm0uZG9jdW1lbnRFbGVtZW50JiYobC54bWw9bSk7dHJ5e2wudGV4dD1pLnJlc3BvbnNlVGV4dH1jYXRjaChhKXt9dHJ5e2o9aS5zdGF0dXNUZXh0fWNhdGNoKG4pe2o9IiJ9IWgmJmMuaXNMb2NhbCYmIWMuY3Jvc3NEb21haW4/aD1sLnRleHQ/MjAwOjQwNDpoPT09MTIyMyYmKGg9MjA0KX19fWNhdGNoKG8pe2V8fGYoLTEsbyl9bCYmZihoLGosbCxrKX0sYy5hc3luYz9pLnJlYWR5U3RhdGU9PT00P3NldFRpbWVvdXQoZCwwKTooZz0rK2NLLGNKJiYoY0l8fChjST17fSxwKGEpLnVubG9hZChjSikpLGNJW2ddPWQpLGkub25yZWFkeXN0YXRlY2hhbmdlPWQpOmQoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY04sY08sY1A9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNRPW5ldyBSZWdFeHAoIl4oPzooWy0rXSk9fCkoIitxKyIpKFthLXolXSopJCIsImkiKSxjUj0vcXVldWVIb29rcyQvLGNTPVtjWV0sY1Q9eyIqIjpbZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGY9Y1EuZXhlYyhiKSxnPWUuY3VyKCksaD0rZ3x8MCxpPTEsaj0yMDtpZihmKXtjPStmWzJdLGQ9ZlszXXx8KHAuY3NzTnVtYmVyW2FdPyIiOiJweCIpO2lmKGQhPT0icHgiJiZoKXtoPXAuY3NzKGUuZWxlbSxhLCEwKXx8Y3x8MTtkbyBpPWl8fCIuNSIsaD1oL2kscC5zdHlsZShlLmVsZW0sYSxoK2QpO3doaWxlKGkhPT0oaT1lLmN1cigpL2cpJiZpIT09MSYmLS1qKX1lLnVuaXQ9ZCxlLnN0YXJ0PWgsZS5lbmQ9ZlsxXT9oKyhmWzFdKzEpKmM6Y31yZXR1cm4gZX1dfTtwLkFuaW1hdGlvbj1wLmV4dGVuZChjVyx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe3AuaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO3ZhciBjLGQ9MCxlPWEubGVuZ3RoO2Zvcig7ZDxlO2QrKyljPWFbZF0sY1RbY109Y1RbY118fFtdLGNUW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/Y1MudW5zaGlmdChhKTpjUy5wdXNoKGEpfX0pLHAuVHdlZW49Y1osY1oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjWixpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwocC5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPWNaLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpjWi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1jWi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9cC5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOmNaLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LGNaLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1jWi5wcm90b3R5cGUsY1oucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBhLmVsZW1bYS5wcm9wXT09bnVsbHx8ISFhLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsPyhiPXAuY3NzKGEuZWxlbSxhLnByb3AsITEsIiIpLCFifHxiPT09ImF1dG8iPzA6Yik6YS5lbGVtW2EucHJvcF19LHNldDpmdW5jdGlvbihhKXtwLmZ4LnN0ZXBbYS5wcm9wXT9wLmZ4LnN0ZXBbYS5wcm9wXShhKTphLmVsZW0uc3R5bGUmJihhLmVsZW0uc3R5bGVbcC5jc3NQcm9wc1thLnByb3BdXSE9bnVsbHx8cC5jc3NIb29rc1thLnByb3BdKT9wLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxjWi5wcm9wSG9va3Muc2Nyb2xsVG9wPWNaLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LHAuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1wLmZuW2JdO3AuZm5bYl09ZnVuY3Rpb24oZCxlLGYpe3JldHVybiBkPT1udWxsfHx0eXBlb2YgZD09ImJvb2xlYW4ifHwhYSYmcC5pc0Z1bmN0aW9uKGQpJiZwLmlzRnVuY3Rpb24oZSk/Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGMkKGIsITApLGQsZSxmKX19KSxwLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihiWikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cC5pc0VtcHR5T2JqZWN0KGEpLGY9cC5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWNXKHRoaXMscC5leHRlbmQoe30sYSksZik7ZSYmYi5zdG9wKCEwKX07cmV0dXJuIGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGQpfTtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxjPWEhPW51bGwmJmErInF1ZXVlSG9va3MiLGY9cC50aW1lcnMsZz1wLl9kYXRhKHRoaXMpO2lmKGMpZ1tjXSYmZ1tjXS5zdG9wJiZlKGdbY10pO2Vsc2UgZm9yKGMgaW4gZylnW2NdJiZnW2NdLnN0b3AmJmNSLnRlc3QoYykmJmUoZ1tjXSk7Zm9yKGM9Zi5sZW5ndGg7Yy0tOylmW2NdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZltjXS5xdWV1ZT09PWEpJiYoZltjXS5hbmltLnN0b3AoZCksYj0hMSxmLnNwbGljZShjLDEpKTsoYnx8IWQpJiZwLmRlcXVldWUodGhpcyxhKX0pfX0pLHAuZWFjaCh7c2xpZGVEb3duOmMkKCJzaG93Iiksc2xpZGVVcDpjJCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmMkKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxwLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/cC5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxwLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIXAuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1wLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gcC5meC5zcGVlZHM/cC5meC5zcGVlZHNbZC5kdXJhdGlvbl06cC5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZC5xdWV1ZT09bnVsbHx8ZC5xdWV1ZT09PSEwKWQucXVldWU9ImZ4IjtyZXR1cm4gZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7cC5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZwLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0scC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0scC50aW1lcnM9W10scC5meD1jWi5wcm90b3R5cGUuaW5pdCxwLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPXAudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxwLmZ4LnN0b3AoKX0scC5meC50aW1lcj1mdW5jdGlvbihhKXthKCkmJnAudGltZXJzLnB1c2goYSkmJiFjTyYmKGNPPXNldEludGVydmFsKHAuZngudGljayxwLmZ4LmludGVydmFsKSl9LHAuZnguaW50ZXJ2YWw9MTMscC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjTyksY089bnVsbH0scC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0scC5meC5zdGVwPXt9LHAuZXhwciYmcC5leHByLmZpbHRlcnMmJihwLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gcC5ncmVwKHAudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGNfPS9eKD86Ym9keXxodG1sKSQvaTtwLmZuLm9mZnNldD1mdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtwLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGMsZCxlLGYsZyxoLGksaj17dG9wOjAsbGVmdDowfSxrPXRoaXNbMF0sbD1rJiZrLm93bmVyRG9jdW1lbnQ7aWYoIWwpcmV0dXJuO3JldHVybihkPWwuYm9keSk9PT1rP3Aub2Zmc2V0LmJvZHlPZmZzZXQoayk6KGM9bC5kb2N1bWVudEVsZW1lbnQscC5jb250YWlucyhjLGspPyh0eXBlb2Ygay5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPSJ1bmRlZmluZWQiJiYoaj1rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxlPWRhKGwpLGY9Yy5jbGllbnRUb3B8fGQuY2xpZW50VG9wfHwwLGc9Yy5jbGllbnRMZWZ0fHxkLmNsaWVudExlZnR8fDAsaD1lLnBhZ2VZT2Zmc2V0fHxjLnNjcm9sbFRvcCxpPWUucGFnZVhPZmZzZXR8fGMuc2Nyb2xsTGVmdCx7dG9wOmoudG9wK2gtZixsZWZ0OmoubGVmdCtpLWd9KTpqKX0scC5vZmZzZXQ9e2JvZHlPZmZzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRUb3AsYz1hLm9mZnNldExlZnQ7cmV0dXJuIHAuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCkse3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9cC5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPXAoYSksZj1lLm9mZnNldCgpLGc9cC5jc3MoYSwidG9wIiksaD1wLmNzcyhhLCJsZWZ0IiksaT0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmcC5pbkFycmF5KCJhdXRvIixbZyxoXSk+LTEsaj17fSxrPXt9LGwsbTtpPyhrPWUucG9zaXRpb24oKSxsPWsudG9wLG09ay5sZWZ0KToobD1wYXJzZUZsb2F0KGcpfHwwLG09cGFyc2VGbG9hdChoKXx8MCkscC5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGYpKSxiLnRvcCE9bnVsbCYmKGoudG9wPWIudG9wLWYudG9wK2wpLGIubGVmdCE9bnVsbCYmKGoubGVmdD1iLmxlZnQtZi5sZWZ0K20pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGopOmUuY3NzKGopfX0scC5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGM9dGhpcy5vZmZzZXQoKSxkPWNfLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtyZXR1cm4gYy50b3AtPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMubGVmdC09cGFyc2VGbG9hdChwLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwLGQudG9wKz1wYXJzZUZsb2F0KHAuY3NzKGJbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLGQubGVmdCs9cGFyc2VGbG9hdChwLmNzcyhiWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDAse3RvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8ZS5ib2R5O3doaWxlKGEmJiFjXy50ZXN0KGEubm9kZU5hbWUpJiZwLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8ZS5ib2R5fSl9fSkscC5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGEsYyl7dmFyIGQ9L1kvLnRlc3QoYyk7cC5mblthXT1mdW5jdGlvbihlKXtyZXR1cm4gcC5hY2Nlc3ModGhpcyxmdW5jdGlvbihhLGUsZil7dmFyIGc9ZGEoYSk7aWYoZj09PWIpcmV0dXJuIGc/YyBpbiBnP2dbY106Zy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZV06YVtlXTtnP2cuc2Nyb2xsVG8oZD9wKGcpLnNjcm9sbExlZnQoKTpmLGQ/ZjpwKGcpLnNjcm9sbFRvcCgpKTphW2VdPWZ9LGEsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLHAuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYyl7cC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OmMsIiI6Im91dGVyIithfSxmdW5jdGlvbihkLGUpe3AuZm5bZV09ZnVuY3Rpb24oZSxmKXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoJiYoZHx8dHlwZW9mIGUhPSJib29sZWFuIiksaD1kfHwoZT09PSEwfHxmPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGMsZCxlKXt2YXIgZjtyZXR1cm4gcC5pc1dpbmRvdyhjKT9jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTpjLm5vZGVUeXBlPT09OT8oZj1jLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChjLmJvZHlbInNjcm9sbCIrYV0sZlsic2Nyb2xsIithXSxjLmJvZHlbIm9mZnNldCIrYV0sZlsib2Zmc2V0IithXSxmWyJjbGllbnQiK2FdKSk6ZT09PWI/cC5jc3MoYyxkLGUsaCk6cC5zdHlsZShjLGQsZSxoKX0sYyxnP2U6YixnLG51bGwpfX0pfSksYS5qUXVlcnk9YS4kPXAsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBwfSl9KSh3aW5kb3cpOw=="></script>
<script src="data:application/javascript;base64,ZDM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBudWxsIT1uJiYhaXNOYU4obil9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbi5sZW5ndGh9ZnVuY3Rpb24gZShuKXtmb3IodmFyIHQ9MTtuKnQlMTspdCo9MTA7cmV0dXJuIHR9ZnVuY3Rpb24gcihuLHQpe3RyeXtmb3IodmFyIGUgaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7dmFsdWU6dFtlXSxlbnVtZXJhYmxlOiExfSl9Y2F0Y2gocil7bi5wcm90b3R5cGU9dH19ZnVuY3Rpb24gaSgpe31mdW5jdGlvbiB1KCl7fWZ1bmN0aW9uIGEobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodCxhcmd1bWVudHMpO3JldHVybiByPT09dD9uOnJ9fWZ1bmN0aW9uIG8obix0KXtpZih0IGluIG4pcmV0dXJuIHQ7dD10LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyaW5nKDEpO2Zvcih2YXIgZT0wLHI9TmEubGVuZ3RoO3I+ZTsrK2Upe3ZhciBpPU5hW2VdK3Q7aWYoaSBpbiBuKXJldHVybiBpfX1mdW5jdGlvbiBjKG4pe2Zvcih2YXIgdD0tMSxlPW4ubGVuZ3RoLHI9W107Kyt0PGU7KXIucHVzaChuW3RdKTtyZXR1cm4gcn1mdW5jdGlvbiBsKG4pe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX1mdW5jdGlvbiBzKCl7fWZ1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gaChuKXtmdW5jdGlvbiB0KCl7Zm9yKHZhciB0LHI9ZSxpPS0xLHU9ci5sZW5ndGg7KytpPHU7KSh0PXJbaV0ub24pJiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbn12YXIgZT1bXSxyPW5ldyBpO3JldHVybiB0Lm9uPWZ1bmN0aW9uKHQsaSl7dmFyIHUsYT1yLmdldCh0KTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2EmJmEub246KGEmJihhLm9uPW51bGwsZT1lLnNsaWNlKDAsdT1lLmluZGV4T2YoYSkpLmNvbmNhdChlLnNsaWNlKHUrMSkpLHIucmVtb3ZlKHQpKSxpJiZlLnB1c2goci5zZXQodCx7b246aX0pKSxuKX0sdH1mdW5jdGlvbiBnKCl7eWEuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBwKCl7Zm9yKHZhciBuLHQ9eWEuZXZlbnQ7bj10LnNvdXJjZUV2ZW50Oyl0PW47cmV0dXJuIHR9ZnVuY3Rpb24gZChuKXtmb3IodmFyIHQ9bmV3IGYsZT0wLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPWgodCk7cmV0dXJuIHQub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dHJ5e3ZhciB1PWkuc291cmNlRXZlbnQ9eWEuZXZlbnQ7aS50YXJnZXQ9bix5YS5ldmVudD1pLHRbaS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7eWEuZXZlbnQ9dX19fSx0fWZ1bmN0aW9uIG0obil7cmV0dXJuIHphKG4sRmEpLG59ZnVuY3Rpb24gdihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIERhKG4sdGhpcyl9fWZ1bmN0aW9uIHkobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiBqYShuLHRoaXMpfX1mdW5jdGlvbiBNKG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9ZnVuY3Rpb24gaSgpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9ZnVuY3Rpb24gdSgpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfWZ1bmN0aW9uIGEoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9ZnVuY3Rpb24gbygpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGUpfXJldHVybiBuPXlhLm5zLnF1YWxpZnkobiksbnVsbD09dD9uLmxvY2FsP3I6ZToiZnVuY3Rpb24iPT10eXBlb2YgdD9uLmxvY2FsP286YTpuLmxvY2FsP3U6aX1mdW5jdGlvbiB4KG4pe3JldHVybiBuLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uIGIobil7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3lhLnJlcXVvdGUobikrIig/Olxccyt8JCkiLCJnIil9ZnVuY3Rpb24gXyhuLHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9LTE7KytlPGk7KW5bZV0odGhpcyx0KX1mdW5jdGlvbiByKCl7Zm9yKHZhciBlPS0xLHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytlPGk7KW5bZV0odGhpcyxyKX1uPW4udHJpbSgpLnNwbGl0KC9ccysvKS5tYXAodyk7dmFyIGk9bi5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIHcobil7dmFyIHQ9YihuKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZihpPWUuY2xhc3NMaXN0KXJldHVybiByP2kuYWRkKG4pOmkucmVtb3ZlKG4pO3ZhciBpPWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdChpKXx8ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix4KGkrIiAiK24pKSk6ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix4KGkucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24gUyhuLHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIHUoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9cmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD91Oml9ZnVuY3Rpb24gRShuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiByKCl7dGhpc1tuXT10fWZ1bmN0aW9uIGkoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4gbnVsbD09dD9lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2k6cn1mdW5jdGlvbiBrKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49eWEubnMucXVhbGlmeShuKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gTWEuY3JlYXRlRWxlbWVudE5TKG4uc3BhY2Usbi5sb2NhbCl9OmZ1bmN0aW9uKCl7cmV0dXJuIE1hLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxuKX19ZnVuY3Rpb24gQShuKXtyZXR1cm57X19kYXRhX186bn19ZnVuY3Rpb24gTihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxuKX19ZnVuY3Rpb24gcShuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aHx8KG49eWEuYXNjZW5kaW5nKSxmdW5jdGlvbih0LGUpe3JldHVybiF0LSFlfHxuKHQuX19kYXRhX18sZS5fX2RhdGFfXyl9fWZ1bmN0aW9uIFQobix0KXtmb3IodmFyIGU9MCxyPW4ubGVuZ3RoO3I+ZTtlKyspZm9yKHZhciBpLHU9bltlXSxhPTAsbz11Lmxlbmd0aDtvPmE7YSsrKShpPXVbYV0pJiZ0KGksYSxlKTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4pe3JldHVybiB6YShuLE9hKSxufWZ1bmN0aW9uIHoobix0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgdD10aGlzW2FdO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobix0LHQuJCksZGVsZXRlIHRoaXNbYV0pfWZ1bmN0aW9uIGkoKXt2YXIgaT1jKHQscWEoYXJndW1lbnRzKSk7ci5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihuLHRoaXNbYV09aSxpLiQ9ZSksaS5fPXR9ZnVuY3Rpb24gdSgpe3ZhciB0LGU9bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit5YS5yZXF1b3RlKG4pKyIkIik7Zm9yKHZhciByIGluIHRoaXMpaWYodD1yLm1hdGNoKGUpKXt2YXIgaT10aGlzW3JdO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0WzFdLGksaS4kKSxkZWxldGUgdGhpc1tyXX19dmFyIGE9Il9fb24iK24sbz1uLmluZGV4T2YoIi4iKSxjPUQ7bz4wJiYobj1uLnN1YnN0cmluZygwLG8pKTt2YXIgbD1SYS5nZXQobik7cmV0dXJuIGwmJihuPWwsYz1qKSxvP3Q/aTpyOnQ/czp1fWZ1bmN0aW9uIEQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9eWEuZXZlbnQ7eWEuZXZlbnQ9ZSx0WzBdPXRoaXMuX19kYXRhX187dHJ5e24uYXBwbHkodGhpcyx0KX1maW5hbGx5e3lhLmV2ZW50PXJ9fX1mdW5jdGlvbiBqKG4sdCl7dmFyIGU9RChuLHQpO3JldHVybiBmdW5jdGlvbihuKXt2YXIgdD10aGlzLHI9bi5yZWxhdGVkVGFyZ2V0O3ImJihyPT09dHx8OCZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKXx8ZS5jYWxsKHQsbil9fWZ1bmN0aW9uIEwobil7dmFyIHQ9InNlbGVjdHN0YXJ0LiIrbixlPSJkcmFnc3RhcnQuIituLHI9ImNsaWNrLiIrbixpPXlhLnNlbGVjdChiYSkub24odCxnKS5vbihlLGcpLHU9eGEuc3R5bGUsYT11W1VhXTtyZXR1cm4gdVtVYV09Im5vbmUiLGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIG8oKXtpLm9uKHIsbnVsbCl9aS5vbih0LG51bGwpLm9uKGUsbnVsbCksdVtVYV09YSxuJiYoaS5vbihyLGZ1bmN0aW9uKCl7ZygpLG8oKX0sITApLHNldFRpbWVvdXQobywwKSl9fWZ1bmN0aW9uIEgobix0KXt2YXIgZT1uLm93bmVyU1ZHRWxlbWVudHx8bjtpZihlLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1lLmNyZWF0ZVNWR1BvaW50KCk7aWYoMD5JYSYmKGJhLnNjcm9sbFh8fGJhLnNjcm9sbFkpKXtlPXlhLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgic3ZnIikuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6Im5vbmUifSwiaW1wb3J0YW50Iik7dmFyIGk9ZVswXVswXS5nZXRTY3JlZW5DVE0oKTtJYT0hKGkuZnx8aS5lKSxlLnJlbW92ZSgpfXJldHVybiBJYT8oci54PXQucGFnZVgsci55PXQucGFnZVkpOihyLng9dC5jbGllbnRYLHIueT10LmNsaWVudFkpLHI9ci5tYXRyaXhUcmFuc2Zvcm0obi5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtyLngsci55XX12YXIgdT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtdS5sZWZ0LW4uY2xpZW50TGVmdCx0LmNsaWVudFktdS50b3Atbi5jbGllbnRUb3BdfWZ1bmN0aW9uIEYoKXt9ZnVuY3Rpb24gUChuLHQsZSl7cmV0dXJuIG5ldyBPKG4sdCxlKX1mdW5jdGlvbiBPKG4sdCxlKXt0aGlzLmg9bix0aGlzLnM9dCx0aGlzLmw9ZX1mdW5jdGlvbiBZKG4sdCxlKXtmdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6MD5uJiYobis9MzYwKSw2MD5uP3UrKGEtdSkqbi82MDoxODA+bj9hOjI0MD5uP3UrKGEtdSkqKDI0MC1uKS82MDp1fWZ1bmN0aW9uIGkobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZhciB1LGE7cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1pc05hTih0KT8wOjA+dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLGE9LjU+PWU/ZSooMSt0KTplK3QtZSp0LHU9MiplLWEscnQoaShuKzEyMCksaShuKSxpKG4tMTIwKSl9ZnVuY3Rpb24gUihuKXtyZXR1cm4gbj4wPzE6MD5uPy0xOjB9ZnVuY3Rpb24gVShuKXtyZXR1cm4gbj4xPzA6LTE+bj8kYTpNYXRoLmFjb3Mobil9ZnVuY3Rpb24gSShuKXtyZXR1cm4gbj4xPyRhLzI6LTE+bj8tJGEvMjpNYXRoLmFzaW4obil9ZnVuY3Rpb24gVihuKXtyZXR1cm4oTWF0aC5leHAobiktTWF0aC5leHAoLW4pKS8yfWZ1bmN0aW9uIFgobil7cmV0dXJuKE1hdGguZXhwKG4pK01hdGguZXhwKC1uKSkvMn1mdW5jdGlvbiBaKG4pe3JldHVybihuPU1hdGguc2luKG4vMikpKm59ZnVuY3Rpb24gQihuLHQsZSl7cmV0dXJuIG5ldyAkKG4sdCxlKX1mdW5jdGlvbiAkKG4sdCxlKXt0aGlzLmg9bix0aGlzLmM9dCx0aGlzLmw9ZX1mdW5jdGlvbiBXKG4sdCxlKXtyZXR1cm4gaXNOYU4obikmJihuPTApLGlzTmFOKHQpJiYodD0wKSxKKGUsTWF0aC5jb3Mobio9R2EpKnQsTWF0aC5zaW4obikqdCl9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIG5ldyBHKG4sdCxlKX1mdW5jdGlvbiBHKG4sdCxlKXt0aGlzLmw9bix0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBLKG4sdCxlKXt2YXIgcj0obisxNikvMTE2LGk9cit0LzUwMCx1PXItZS8yMDA7cmV0dXJuIGk9bnQoaSkqdG8scj1udChyKSplbyx1PW50KHUpKnJvLHJ0KGV0KDMuMjQwNDU0MippLTEuNTM3MTM4NSpyLS40OTg1MzE0KnUpLGV0KC0uOTY5MjY2KmkrMS44NzYwMTA4KnIrLjA0MTU1Nip1KSxldCguMDU1NjQzNCppLS4yMDQwMjU5KnIrMS4wNTcyMjUyKnUpKX1mdW5jdGlvbiBRKG4sdCxlKXtyZXR1cm4gbj4wP0IoTWF0aC5hdGFuMihlLHQpKkthLE1hdGguc3FydCh0KnQrZSplKSxuKTpCKDAvMCwwLzAsbil9ZnVuY3Rpb24gbnQobil7cmV0dXJuIG4+LjIwNjg5MzAzND9uKm4qbjoobi00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiB0dChuKXtyZXR1cm4gbj4uMDA4ODU2P01hdGgucG93KG4sMS8zKTo3Ljc4NzAzNypuKzQvMjl9ZnVuY3Rpb24gZXQobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KiguMDAzMDQ+PW4/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gcnQobix0LGUpe3JldHVybiBuZXcgaXQobix0LGUpfWZ1bmN0aW9uIGl0KG4sdCxlKXt0aGlzLnI9bix0aGlzLmc9dCx0aGlzLmI9ZX1mdW5jdGlvbiB1dChuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBhdChuLHQsZSl7dmFyIHIsaSx1LGE9MCxvPTAsYz0wO2lmKHI9LyhbYS16XSspXCgoLiopXCkvaS5leGVjKG4pKXN3aXRjaChpPXJbMl0uc3BsaXQoIiwiKSxyWzFdKXtjYXNlImhzbCI6cmV0dXJuIGUocGFyc2VGbG9hdChpWzBdKSxwYXJzZUZsb2F0KGlbMV0pLzEwMCxwYXJzZUZsb2F0KGlbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiB0KHN0KGlbMF0pLHN0KGlbMV0pLHN0KGlbMl0pKX1yZXR1cm4odT1hby5nZXQobikpP3QodS5yLHUuZyx1LmIpOihudWxsIT1uJiYiIyI9PT1uLmNoYXJBdCgwKSYmKDQ9PT1uLmxlbmd0aD8oYT1uLmNoYXJBdCgxKSxhKz1hLG89bi5jaGFyQXQoMiksbys9byxjPW4uY2hhckF0KDMpLGMrPWMpOjc9PT1uLmxlbmd0aCYmKGE9bi5zdWJzdHJpbmcoMSwzKSxvPW4uc3Vic3RyaW5nKDMsNSksYz1uLnN1YnN0cmluZyg1LDcpKSxhPXBhcnNlSW50KGEsMTYpLG89cGFyc2VJbnQobywxNiksYz1wYXJzZUludChjLDE2KSksdChhLG8sYykpfWZ1bmN0aW9uIG90KG4sdCxlKXt2YXIgcixpLHU9TWF0aC5taW4obi89MjU1LHQvPTI1NSxlLz0yNTUpLGE9TWF0aC5tYXgobix0LGUpLG89YS11LGM9KGErdSkvMjtyZXR1cm4gbz8oaT0uNT5jP28vKGErdSk6by8oMi1hLXUpLHI9bj09YT8odC1lKS9vKyhlPnQ/NjowKTp0PT1hPyhlLW4pL28rMjoobi10KS9vKzQscio9NjApOihyPTAvMCxpPWM+MCYmMT5jPzA6ciksUChyLGksYyl9ZnVuY3Rpb24gY3Qobix0LGUpe249bHQobiksdD1sdCh0KSxlPWx0KGUpO3ZhciByPXR0KCguNDEyNDU2NCpuKy4zNTc1NzYxKnQrLjE4MDQzNzUqZSkvdG8pLGk9dHQoKC4yMTI2NzI5Km4rLjcxNTE1MjIqdCsuMDcyMTc1KmUpL2VvKSx1PXR0KCguMDE5MzMzOSpuKy4xMTkxOTIqdCsuOTUwMzA0MSplKS9ybyk7cmV0dXJuIEooMTE2KmktMTYsNTAwKihyLWkpLDIwMCooaS11KSl9ZnVuY3Rpb24gbHQobil7cmV0dXJuKG4vPTI1NSk8PS4wNDA0NT9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gc3Qobil7dmFyIHQ9cGFyc2VGbG9hdChuKTtyZXR1cm4iJSI9PT1uLmNoYXJBdChuLmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqdCk6dH1mdW5jdGlvbiBmdChuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIGh0KG4pe3JldHVybiBufWZ1bmN0aW9uIGd0KG4pe3JldHVybiBmdW5jdGlvbih0LGUscil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpLHB0KHQsZSxuLHIpfX1mdW5jdGlvbiBwdChuLHQsZSxyKXtmdW5jdGlvbiBpKCl7dmFyIG4sdD1jLnN0YXR1cztpZighdCYmYy5yZXNwb25zZVRleHR8fHQ+PTIwMCYmMzAwPnR8fDMwND09PXQpe3RyeXtuPWUuY2FsbCh1LGMpfWNhdGNoKHIpe3JldHVybiBhLmVycm9yLmNhbGwodSxyKSx2b2lkIDB9YS5sb2FkLmNhbGwodSxuKX1lbHNlIGEuZXJyb3IuY2FsbCh1LGMpfXZhciB1PXt9LGE9eWEuZGlzcGF0Y2goInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksbz17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxsPW51bGw7cmV0dXJuIWJhLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1pOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmkoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PXlhLmV2ZW50O3lhLmV2ZW50PW47dHJ5e2EucHJvZ3Jlc3MuY2FsbCh1LGMpfWZpbmFsbHl7eWEuZXZlbnQ9dH19LHUuaGVhZGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP29bbl06KG51bGw9PXQ/ZGVsZXRlIG9bbl06b1tuXT10KyIiLHUpfSx1Lm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLHUpOnR9LHUucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4sdSk6bH0sdS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLHV9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24obil7dVtuXT1mdW5jdGlvbigpe3JldHVybiB1LnNlbmQuYXBwbHkodSxbbl0uY29uY2F0KHFhKGFyZ3VtZW50cykpKX19KSx1LnNlbmQ9ZnVuY3Rpb24oZSxyLGkpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKGk9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51bGw9PXR8fCJhY2NlcHQiaW4gb3x8KG8uYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBhIGluIG8pYy5zZXRSZXF1ZXN0SGVhZGVyKGEsb1thXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxsIT1pJiZ1Lm9uKCJlcnJvciIsaSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe2kobnVsbCxuKX0pLGMuc2VuZChudWxsPT1yP251bGw6ciksdX0sdS5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBjLmFib3J0KCksdX0seWEucmViaW5kKHUsYSwib24iKSxudWxsPT1yP3U6dS5nZXQoZHQocikpfWZ1bmN0aW9uIGR0KG4pe3JldHVybiAxPT09bi5sZW5ndGg/ZnVuY3Rpb24odCxlKXtuKG51bGw9PXQ/ZTpudWxsKX06bn1mdW5jdGlvbiBtdCgpe3ZhciBuPXZ0KCksdD15dCgpLW47dD4yND8oaXNGaW5pdGUodCkmJihjbGVhclRpbWVvdXQoc28pLHNvPXNldFRpbWVvdXQobXQsdCkpLGxvPTApOihsbz0xLGZvKG10KSl9ZnVuY3Rpb24gdnQoKXtmb3IodmFyIG49RGF0ZS5ub3coKSx0PW9vO3Q7KW4+PXQudGltZSYmKHQuZmx1c2g9dC5jYWxsYmFjayhuLXQudGltZSkpLHQ9dC5uZXh0O3JldHVybiBufWZ1bmN0aW9uIHl0KCl7Zm9yKHZhciBuLHQ9b28sZT0xLzA7dDspdC5mbHVzaD90PW4/bi5uZXh0PXQubmV4dDpvbz10Lm5leHQ6KHQudGltZTxlJiYoZT10LnRpbWUpLHQ9KG49dCkubmV4dCk7cmV0dXJuIGNvPW4sZX1mdW5jdGlvbiBNdChuLHQpe3ZhciBlPU1hdGgucG93KDEwLDMqTWF0aC5hYnMoOC10KSk7cmV0dXJue3NjYWxlOnQ+OD9mdW5jdGlvbihuKXtyZXR1cm4gbi9lfTpmdW5jdGlvbihuKXtyZXR1cm4gbiplfSxzeW1ib2w6bn19ZnVuY3Rpb24geHQobix0KXtyZXR1cm4gdC0obj9NYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5MTjEwKToxKX1mdW5jdGlvbiBidChuKXtyZXR1cm4gbisiIn1mdW5jdGlvbiBfdCgpe31mdW5jdGlvbiB3dChuLHQsZSl7dmFyIHI9ZS5zPW4rdCxpPXItbix1PXItaTtlLnQ9bi11Kyh0LWkpfWZ1bmN0aW9uIFN0KG4sdCl7biYmd28uaGFzT3duUHJvcGVydHkobi50eXBlKSYmd29bbi50eXBlXShuLHQpfWZ1bmN0aW9uIEV0KG4sdCxlKXt2YXIgcixpPS0xLHU9bi5sZW5ndGgtZTtmb3IodC5saW5lU3RhcnQoKTsrK2k8dTspcj1uW2ldLHQucG9pbnQoclswXSxyWzFdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBrdChuLHQpe3ZhciBlPS0xLHI9bi5sZW5ndGg7Zm9yKHQucG9seWdvblN0YXJ0KCk7KytlPHI7KUV0KG5bZV0sdCwxKTt0LnBvbHlnb25FbmQoKX1mdW5jdGlvbiBBdCgpe2Z1bmN0aW9uIG4obix0KXtuKj1HYSx0PXQqR2EvMiskYS80O3ZhciBlPW4tcixhPU1hdGguY29zKHQpLG89TWF0aC5zaW4odCksYz11Km8sbD1pKmErYypNYXRoLmNvcyhlKSxzPWMqTWF0aC5zaW4oZSk7RW8uYWRkKE1hdGguYXRhbjIocyxsKSkscj1uLGk9YSx1PW99dmFyIHQsZSxyLGksdTtrby5wb2ludD1mdW5jdGlvbihhLG8pe2tvLnBvaW50PW4scj0odD1hKSpHYSxpPU1hdGguY29zKG89KGU9bykqR2EvMiskYS80KSx1PU1hdGguc2luKG8pfSxrby5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBOdChuKXt2YXIgdD1uWzBdLGU9blsxXSxyPU1hdGguY29zKGUpO3JldHVybltyKk1hdGguY29zKHQpLHIqTWF0aC5zaW4odCksTWF0aC5zaW4oZSldfWZ1bmN0aW9uIHF0KG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsyXSp0WzJdfWZ1bmN0aW9uIFR0KG4sdCl7cmV0dXJuW25bMV0qdFsyXS1uWzJdKnRbMV0sblsyXSp0WzBdLW5bMF0qdFsyXSxuWzBdKnRbMV0tblsxXSp0WzBdXX1mdW5jdGlvbiBDdChuLHQpe25bMF0rPXRbMF0sblsxXSs9dFsxXSxuWzJdKz10WzJdfWZ1bmN0aW9uIHp0KG4sdCl7cmV0dXJuW25bMF0qdCxuWzFdKnQsblsyXSp0XX1mdW5jdGlvbiBEdChuKXt2YXIgdD1NYXRoLnNxcnQoblswXSpuWzBdK25bMV0qblsxXStuWzJdKm5bMl0pO25bMF0vPXQsblsxXS89dCxuWzJdLz10fWZ1bmN0aW9uIGp0KG4pe3JldHVybltNYXRoLmF0YW4yKG5bMV0sblswXSksSShuWzJdKV19ZnVuY3Rpb24gTHQobix0KXtyZXR1cm4gTWF0aC5hYnMoblswXS10WzBdKTxXYSYmTWF0aC5hYnMoblsxXS10WzFdKTxXYX1mdW5jdGlvbiBIdChuLHQpe24qPUdhO3ZhciBlPU1hdGguY29zKHQqPUdhKTtGdChlKk1hdGguY29zKG4pLGUqTWF0aC5zaW4obiksTWF0aC5zaW4odCkpfWZ1bmN0aW9uIEZ0KG4sdCxlKXsrK0FvLHFvKz0obi1xbykvQW8sVG8rPSh0LVRvKS9BbyxDbys9KGUtQ28pL0FvfWZ1bmN0aW9uIFB0KCl7ZnVuY3Rpb24gbihuLGkpe24qPUdhO3ZhciB1PU1hdGguY29zKGkqPUdhKSxhPXUqTWF0aC5jb3Mobiksbz11Kk1hdGguc2luKG4pLGM9TWF0aC5zaW4oaSksbD1NYXRoLmF0YW4yKE1hdGguc3FydCgobD1lKmMtcipvKSpsKyhsPXIqYS10KmMpKmwrKGw9dCpvLWUqYSkqbCksdCphK2UqbytyKmMpO05vKz1sLHpvKz1sKih0Kyh0PWEpKSxEbys9bCooZSsoZT1vKSksam8rPWwqKHIrKHI9YykpLEZ0KHQsZSxyKX12YXIgdCxlLHI7UG8ucG9pbnQ9ZnVuY3Rpb24oaSx1KXtpKj1HYTt2YXIgYT1NYXRoLmNvcyh1Kj1HYSk7dD1hKk1hdGguY29zKGkpLGU9YSpNYXRoLnNpbihpKSxyPU1hdGguc2luKHUpLFBvLnBvaW50PW4sRnQodCxlLHIpfX1mdW5jdGlvbiBPdCgpe1BvLnBvaW50PUh0fWZ1bmN0aW9uIFl0KCl7ZnVuY3Rpb24gbihuLHQpe24qPUdhO3ZhciBlPU1hdGguY29zKHQqPUdhKSxhPWUqTWF0aC5jb3Mobiksbz1lKk1hdGguc2luKG4pLGM9TWF0aC5zaW4odCksbD1pKmMtdSpvLHM9dSphLXIqYyxmPXIqby1pKmEsaD1NYXRoLnNxcnQobCpsK3MqcytmKmYpLGc9ciphK2kqbyt1KmMscD1oJiYtVShnKS9oLGQ9TWF0aC5hdGFuMihoLGcpO0xvKz1wKmwsSG8rPXAqcyxGbys9cCpmLE5vKz1kLHpvKz1kKihyKyhyPWEpKSxEbys9ZCooaSsoaT1vKSksam8rPWQqKHUrKHU9YykpLEZ0KHIsaSx1KX12YXIgdCxlLHIsaSx1O1BvLnBvaW50PWZ1bmN0aW9uKGEsbyl7dD1hLGU9byxQby5wb2ludD1uLGEqPUdhO3ZhciBjPU1hdGguY29zKG8qPUdhKTtyPWMqTWF0aC5jb3MoYSksaT1jKk1hdGguc2luKGEpLHU9TWF0aC5zaW4obyksRnQocixpLHUpfSxQby5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpLFBvLmxpbmVFbmQ9T3QsUG8ucG9pbnQ9SHR9fWZ1bmN0aW9uIFJ0KCl7cmV0dXJuITB9ZnVuY3Rpb24gVXQobix0LGUscixpKXt2YXIgdT1bXSxhPVtdO2lmKG4uZm9yRWFjaChmdW5jdGlvbihuKXtpZighKCh0PW4ubGVuZ3RoLTEpPD0wKSl7dmFyIHQsZT1uWzBdLHI9blt0XTtpZihMdChlLHIpKXtpLmxpbmVTdGFydCgpO2Zvcih2YXIgbz0wO3Q+bzsrK28paS5wb2ludCgoZT1uW29dKVswXSxlWzFdKTtyZXR1cm4gaS5saW5lRW5kKCksdm9pZCAwfXZhciBjPXtwb2ludDplLHBvaW50czpuLG90aGVyOm51bGwsdmlzaXRlZDohMSxlbnRyeTohMCxzdWJqZWN0OiEwfSxsPXtwb2ludDplLHBvaW50czpbZV0sb3RoZXI6Yyx2aXNpdGVkOiExLGVudHJ5OiExLHN1YmplY3Q6ITF9O2Mub3RoZXI9bCx1LnB1c2goYyksYS5wdXNoKGwpLGM9e3BvaW50OnIscG9pbnRzOltyXSxvdGhlcjpudWxsLHZpc2l0ZWQ6ITEsZW50cnk6ITEsc3ViamVjdDohMH0sbD17cG9pbnQ6cixwb2ludHM6W3JdLG90aGVyOmMsdmlzaXRlZDohMSxlbnRyeTohMCxzdWJqZWN0OiExfSxjLm90aGVyPWwsdS5wdXNoKGMpLGEucHVzaChsKX19KSxhLnNvcnQodCksSXQodSksSXQoYSksdS5sZW5ndGgpe2lmKGUpZm9yKHZhciBvPTEsYz0hZShhWzBdLnBvaW50KSxsPWEubGVuZ3RoO2w+bzsrK28pYVtvXS5lbnRyeT1jPSFjO2Zvcih2YXIgcyxmLGgsZz11WzBdOzspe2ZvcihzPWc7cy52aXNpdGVkOylpZigocz1zLm5leHQpPT09ZylyZXR1cm47Zj1zLnBvaW50cyxpLmxpbmVTdGFydCgpO2Rve2lmKHMudmlzaXRlZD1zLm90aGVyLnZpc2l0ZWQ9ITAscy5lbnRyeSl7aWYocy5zdWJqZWN0KWZvcih2YXIgbz0wO288Zi5sZW5ndGg7bysrKWkucG9pbnQoKGg9ZltvXSlbMF0saFsxXSk7ZWxzZSByKHMucG9pbnQscy5uZXh0LnBvaW50LDEsaSk7cz1zLm5leHR9ZWxzZXtpZihzLnN1YmplY3Qpe2Y9cy5wcmV2LnBvaW50cztmb3IodmFyIG89Zi5sZW5ndGg7LS1vPj0wOylpLnBvaW50KChoPWZbb10pWzBdLGhbMV0pfWVsc2UgcihzLnBvaW50LHMucHJldi5wb2ludCwtMSxpKTtzPXMucHJldn1zPXMub3RoZXIsZj1zLnBvaW50c313aGlsZSghcy52aXNpdGVkKTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIEl0KG4pe2lmKHQ9bi5sZW5ndGgpe2Zvcih2YXIgdCxlLHI9MCxpPW5bMF07KytyPHQ7KWkubmV4dD1lPW5bcl0sZS5wcmV2PWksaT1lO2kubmV4dD1lPW5bMF0sZS5wcmV2PWl9fWZ1bmN0aW9uIFZ0KG4sdCxlLHIpe3JldHVybiBmdW5jdGlvbihpKXtmdW5jdGlvbiB1KHQsZSl7bih0LGUpJiZpLnBvaW50KHQsZSl9ZnVuY3Rpb24gYShuLHQpe2QucG9pbnQobix0KX1mdW5jdGlvbiBvKCl7bS5wb2ludD1hLGQubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYygpe20ucG9pbnQ9dSxkLmxpbmVFbmQoKX1mdW5jdGlvbiBsKG4sdCl7eS5wb2ludChuLHQpLHAucHVzaChbbix0XSl9ZnVuY3Rpb24gcygpe3kubGluZVN0YXJ0KCkscD1bXX1mdW5jdGlvbiBmKCl7bChwWzBdWzBdLHBbMF1bMV0pLHkubGluZUVuZCgpO3ZhciBuLHQ9eS5jbGVhbigpLGU9di5idWZmZXIoKSxyPWUubGVuZ3RoO2lmKHAucG9wKCksZy5wdXNoKHApLHA9bnVsbCxyKXtpZigxJnQpe249ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEsYT0tMTtmb3IoaS5saW5lU3RhcnQoKTsrK2E8cjspaS5wb2ludCgodT1uW2FdKVswXSx1WzFdKTtyZXR1cm4gaS5saW5lRW5kKCksdm9pZCAwfXI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSksaC5wdXNoKGUuZmlsdGVyKFh0KSl9fXZhciBoLGcscCxkPXQoaSksbT17cG9pbnQ6dSxsaW5lU3RhcnQ6byxsaW5lRW5kOmMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bS5wb2ludD1sLG0ubGluZVN0YXJ0PXMsbS5saW5lRW5kPWYsaD1bXSxnPVtdLGkucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXttLnBvaW50PXUsbS5saW5lU3RhcnQ9byxtLmxpbmVFbmQ9YyxoPXlhLm1lcmdlKGgpLGgubGVuZ3RoP1V0KGgsQnQsbnVsbCxlLGkpOnIoZykmJihpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGkucG9seWdvbkVuZCgpLGg9Zz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19LHY9WnQoKSx5PXQodik7cmV0dXJuIG19fWZ1bmN0aW9uIFh0KG4pe3JldHVybiBuLmxlbmd0aD4xfWZ1bmN0aW9uIFp0KCl7dmFyIG4sdD1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5wdXNoKG49W10pfSxwb2ludDpmdW5jdGlvbih0LGUpe24ucHVzaChbdCxlXSl9LGxpbmVFbmQ6cyxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgZT10O3JldHVybiB0PVtdLG49bnVsbCxlfSxyZWpvaW46ZnVuY3Rpb24oKXt0Lmxlbmd0aD4xJiZ0LnB1c2godC5wb3AoKS5jb25jYXQodC5zaGlmdCgpKSl9fX1mdW5jdGlvbiBCdChuLHQpe3JldHVybigobj1uLnBvaW50KVswXTwwP25bMV0tJGEvMi1XYTokYS8yLW5bMV0pLSgodD10LnBvaW50KVswXTwwP3RbMV0tJGEvMi1XYTokYS8yLXRbMV0pfWZ1bmN0aW9uICR0KG4sdCl7dmFyIGU9blswXSxyPW5bMV0saT1bTWF0aC5zaW4oZSksLU1hdGguY29zKGUpLDBdLHU9MCxhPSExLG89ITEsYz0wO0VvLnJlc2V0KCk7Zm9yKHZhciBsPTAscz10Lmxlbmd0aDtzPmw7KytsKXt2YXIgZj10W2xdLGg9Zi5sZW5ndGg7aWYoaCl7Zm9yKHZhciBnPWZbMF0scD1nWzBdLGQ9Z1sxXS8yKyRhLzQsbT1NYXRoLnNpbihkKSx2PU1hdGguY29zKGQpLHk9MTs7KXt5PT09aCYmKHk9MCksbj1mW3ldO3ZhciBNPW5bMF0seD1uWzFdLzIrJGEvNCxiPU1hdGguc2luKHgpLF89TWF0aC5jb3MoeCksdz1NLXAsUz1NYXRoLmFicyh3KT4kYSxFPW0qYjtpZihFby5hZGQoTWF0aC5hdGFuMihFKk1hdGguc2luKHcpLHYqXytFKk1hdGguY29zKHcpKSksTWF0aC5hYnMoeCk8V2EmJihvPSEwKSx1Kz1TP3crKHc+PTA/MjotMikqJGE6dyxTXnA+PWVeTT49ZSl7dmFyIGs9VHQoTnQoZyksTnQobikpO0R0KGspO3ZhciBBPVR0KGksayk7RHQoQSk7dmFyIE49KFNedz49MD8tMToxKSpJKEFbMl0pO3I+TiYmKGMrPVNedz49MD8xOi0xKX1pZigheSsrKWJyZWFrO3A9TSxtPWIsdj1fLGc9bn1NYXRoLmFicyh1KT5XYSYmKGE9ITApfX1yZXR1cm4oIW8mJiFhJiYwPkVvfHwtV2E+dSleMSZjfWZ1bmN0aW9uIFd0KG4pe3ZhciB0LGU9MC8wLHI9MC8wLGk9MC8wO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpLHQ9MX0scG9pbnQ6ZnVuY3Rpb24odSxhKXt2YXIgbz11PjA/JGE6LSRhLGM9TWF0aC5hYnModS1lKTtNYXRoLmFicyhjLSRhKTxXYT8obi5wb2ludChlLHI9KHIrYSkvMj4wPyRhLzI6LSRhLzIpLG4ucG9pbnQoaSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQobyxyKSxuLnBvaW50KHUsciksdD0wKTppIT09byYmYz49JGEmJihNYXRoLmFicyhlLWkpPFdhJiYoZS09aSpXYSksTWF0aC5hYnModS1vKTxXYSYmKHUtPW8qV2EpLHI9SnQoZSxyLHUsYSksbi5wb2ludChpLHIpLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChvLHIpLHQ9MCksbi5wb2ludChlPXUscj1hKSxpPW99LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKSxlPXI9MC8wfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLXR9fX1mdW5jdGlvbiBKdChuLHQsZSxyKXt2YXIgaSx1LGE9TWF0aC5zaW4obi1lKTtyZXR1cm4gTWF0aC5hYnMoYSk+V2E/TWF0aC5hdGFuKChNYXRoLnNpbih0KSoodT1NYXRoLmNvcyhyKSkqTWF0aC5zaW4oZSktTWF0aC5zaW4ocikqKGk9TWF0aC5jb3ModCkpKk1hdGguc2luKG4pKS8oaSp1KmEpKToodCtyKS8yfWZ1bmN0aW9uIEd0KG4sdCxlLHIpe3ZhciBpO2lmKG51bGw9PW4paT1lKiRhLzIsci5wb2ludCgtJGEsaSksci5wb2ludCgwLGkpLHIucG9pbnQoJGEsaSksci5wb2ludCgkYSwwKSxyLnBvaW50KCRhLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLSRhLC1pKSxyLnBvaW50KC0kYSwwKSxyLnBvaW50KC0kYSxpKTtlbHNlIGlmKE1hdGguYWJzKG5bMF0tdFswXSk+V2Epe3ZhciB1PShuWzBdPHRbMF0/MTotMSkqJGE7aT1lKnUvMixyLnBvaW50KC11LGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KHUsaSl9ZWxzZSByLnBvaW50KHRbMF0sdFsxXSl9ZnVuY3Rpb24gS3Qobil7cmV0dXJuICR0KFlvLG4pfWZ1bmN0aW9uIFF0KG4pe2Z1bmN0aW9uIHQobix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+YX1mdW5jdGlvbiBlKG4pe3ZhciBlLHUsYSxjLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9YT0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSxkPXQoZixoKSxtPW8/ZD8wOmkoZixoKTpkP2koZisoMD5mPyRhOi0kYSksaCk6MDtpZighZSYmKGM9YT1kKSYmbi5saW5lU3RhcnQoKSxkIT09YSYmKGc9cihlLHApLChMdChlLGcpfHxMdChwLGcpKSYmKHBbMF0rPVdhLHBbMV0rPVdhLGQ9dChwWzBdLHBbMV0pKSksZCE9PWEpcz0wLGQ/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChnWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVuZCgpKSxlPWc7ZWxzZSBpZihsJiZlJiZvXmQpe3ZhciB2O20mdXx8ISh2PXIocCxlLCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KHZbMF1bMF0sdlswXVsxXSksbi5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLG4ubGluZUVuZCgpKToobi5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludCh2WzBdWzBdLHZbMF1bMV0pKSl9IWR8fGUmJkx0KGUscCl8fG4ucG9pbnQocFswXSxwWzFdKSxlPXAsYT1kLHU9bX0sbGluZUVuZDpmdW5jdGlvbigpe2EmJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3woYyYmYSk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1OdChuKSxpPU50KHQpLHU9WzEsMCwwXSxvPVR0KHIsaSksYz1xdChvLG8pLGw9b1swXSxzPWMtbCpsO2lmKCFzKXJldHVybiFlJiZuO3ZhciBmPWEqYy9zLGg9LWEqbC9zLGc9VHQodSxvKSxwPXp0KHUsZiksZD16dChvLGgpO0N0KHAsZCk7dmFyIG09Zyx2PXF0KHAsbSkseT1xdChtLG0pLE09dip2LXkqKHF0KHAscCktMSk7aWYoISgwPk0pKXt2YXIgeD1NYXRoLnNxcnQoTSksYj16dChtLCgtdi14KS95KTtpZihDdChiLHApLGI9anQoYiksIWUpcmV0dXJuIGI7dmFyIF8sdz1uWzBdLFM9dFswXSxFPW5bMV0saz10WzFdO3c+UyYmKF89dyx3PVMsUz1fKTt2YXIgQT1TLXcsTj1NYXRoLmFicyhBLSRhKTxXYSxxPU58fFdhPkE7aWYoIU4mJkU+ayYmKF89RSxFPWssaz1fKSxxP04/RStrPjBeYlsxXTwoTWF0aC5hYnMoYlswXS13KTxXYT9FOmspOkU8PWJbMV0mJmJbMV08PWs6QT4kYV4odzw9YlswXSYmYlswXTw9Uykpe3ZhciBUPXp0KG0sKC12K3gpL3kpO3JldHVybiBDdChULHApLFtiLGp0KFQpXX19fWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1vP246JGEtbixpPTA7cmV0dXJuLXI+dD9pfD0xOnQ+ciYmKGl8PTIpLC1yPmU/aXw9NDplPnImJihpfD04KSxpfWZ1bmN0aW9uIHUobil7cmV0dXJuICR0KGMsbil9dmFyIGE9TWF0aC5jb3Mobiksbz1hPjAsYz1bbiwwXSxsPU1hdGguYWJzKGEpPldhLHM9U2Uobiw2KkdhKTtyZXR1cm4gVnQodCxlLHMsdSl9ZnVuY3Rpb24gbmUobix0LGUscil7ZnVuY3Rpb24gaShyLGkpe3JldHVybiBNYXRoLmFicyhyWzBdLW4pPFdhP2k+MD8wOjM6TWF0aC5hYnMoclswXS1lKTxXYT9pPjA/MjoxOk1hdGguYWJzKHJbMV0tdCk8V2E/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIHUobix0KXtyZXR1cm4gYShuLnBvaW50LHQucG9pbnQpfWZ1bmN0aW9uIGEobix0KXt2YXIgZT1pKG4sMSkscj1pKHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06MT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19ZnVuY3Rpb24gbyhpLHUpe3ZhciBhPXVbMF0taVswXSxvPXVbMV0taVsxXSxjPVswLDFdO3JldHVybiBNYXRoLmFicyhhKTxXYSYmTWF0aC5hYnMobyk8V2E/bjw9aVswXSYmaVswXTw9ZSYmdDw9aVsxXSYmaVsxXTw9cjp0ZShuLWlbMF0sYSxjKSYmdGUoaVswXS1lLC1hLGMpJiZ0ZSh0LWlbMV0sbyxjKSYmdGUoaVsxXS1yLC1vLGMpPyhjWzFdPDEmJih1WzBdPWlbMF0rY1sxXSphLHVbMV09aVsxXStjWzFdKm8pLGNbMF0+MCYmKGlbMF0rPWNbMF0qYSxpWzFdKz1jWzBdKm8pLCEwKTohMX1yZXR1cm4gZnVuY3Rpb24oYyl7ZnVuY3Rpb24gbCh1KXt2YXIgYT1pKHUsLTEpLG89cyhbMD09PWF8fDM9PT1hP246ZSxhPjE/cjp0XSk7cmV0dXJuIG99ZnVuY3Rpb24gcyhuKXtmb3IodmFyIHQ9MCxlPU0ubGVuZ3RoLHI9blsxXSxpPTA7ZT5pOysraSlmb3IodmFyIHUsYT0xLG89TVtpXSxjPW8ubGVuZ3RoLGw9b1swXTtjPmE7KythKXU9b1thXSxsWzFdPD1yP3VbMV0+ciYmZihsLHUsbik+MCYmKyt0OnVbMV08PXImJmYobCx1LG4pPDAmJi0tdCxsPXU7cmV0dXJuIDAhPT10fWZ1bmN0aW9uIGYobix0LGUpe3JldHVybih0WzBdLW5bMF0pKihlWzFdLW5bMV0pLShlWzBdLW5bMF0pKih0WzFdLW5bMV0pfWZ1bmN0aW9uIGgodSxvLGMsbCl7dmFyIHM9MCxmPTA7aWYobnVsbD09dXx8KHM9aSh1LGMpKSE9PShmPWkobyxjKSl8fGEodSxvKTwwXmM+MCl7ZG8gbC5wb2ludCgwPT09c3x8Mz09PXM/bjplLHM+MT9yOnQpO3doaWxlKChzPShzK2MrNCklNCkhPT1mKX1lbHNlIGwucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBnKGksdSl7cmV0dXJuIGk+PW4mJmU+PWkmJnU+PXQmJnI+PXV9ZnVuY3Rpb24gcChuLHQpe2cobix0KSYmYy5wb2ludChuLHQpfWZ1bmN0aW9uIGQoKXtULnBvaW50PXYsTSYmTS5wdXNoKHg9W10pLEE9ITAsaz0hMSxTPUU9MC8wfWZ1bmN0aW9uIG0oKXt5JiYodihiLF8pLHcmJmsmJnEucmVqb2luKCkseS5wdXNoKHEuYnVmZmVyKCkpKSxULnBvaW50PXAsayYmYy5saW5lRW5kKCl9ZnVuY3Rpb24gdihuLHQpe249TWF0aC5tYXgoLVJvLE1hdGgubWluKFJvLG4pKSx0PU1hdGgubWF4KC1SbyxNYXRoLm1pbihSbyx0KSk7dmFyIGU9ZyhuLHQpO2lmKE0mJngucHVzaChbbix0XSksQSliPW4sXz10LHc9ZSxBPSExLGUmJihjLmxpbmVTdGFydCgpLGMucG9pbnQobix0KSk7ZWxzZSBpZihlJiZrKWMucG9pbnQobix0KTtlbHNle3ZhciByPVtTLEVdLGk9W24sdF07byhyLGkpPyhrfHwoYy5saW5lU3RhcnQoKSxjLnBvaW50KHJbMF0sclsxXSkpLGMucG9pbnQoaVswXSxpWzFdKSxlfHxjLmxpbmVFbmQoKSk6ZSYmKGMubGluZVN0YXJ0KCksYy5wb2ludChuLHQpKX1TPW4sRT10LGs9ZX12YXIgeSxNLHgsYixfLHcsUyxFLGssQSxOPWMscT1adCgpLFQ9e3BvaW50OnAsbGluZVN0YXJ0OmQsbGluZUVuZDptLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2M9cSx5PVtdLE09W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtjPU4sKHk9eWEubWVyZ2UoeSkpLmxlbmd0aD8oYy5wb2x5Z29uU3RhcnQoKSxVdCh5LHUsbCxoLGMpLGMucG9seWdvbkVuZCgpKTpzKFtuLHRdKSYmKGMucG9seWdvblN0YXJ0KCksYy5saW5lU3RhcnQoKSxoKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpLGMucG9seWdvbkVuZCgpKSx5PU09eD1udWxsfX07cmV0dXJuIFR9fWZ1bmN0aW9uIHRlKG4sdCxlKXtpZihNYXRoLmFicyh0KTxXYSlyZXR1cm4gMD49bjt2YXIgcj1uL3Q7aWYodD4wKXtpZihyPmVbMV0pcmV0dXJuITE7cj5lWzBdJiYoZVswXT1yKX1lbHNle2lmKHI8ZVswXSlyZXR1cm4hMTtyPGVbMV0mJihlWzFdPXIpfXJldHVybiEwfWZ1bmN0aW9uIGVlKG4sdCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPW4oZSxyKSx0KGVbMF0sZVsxXSl9cmV0dXJuIG4uaW52ZXJ0JiZ0LmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7cmV0dXJuIGU9dC5pbnZlcnQoZSxyKSxlJiZuLmludmVydChlWzBdLGVbMV0pfSksZX1mdW5jdGlvbiByZShuKXt2YXIgdD0wLGU9JGEvMyxyPXZlKG4pLGk9cih0LGUpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9blswXSokYS8xODAsZT1uWzFdKiRhLzE4MCk6WzE4MCoodC8kYSksMTgwKihlLyRhKV19LGl9ZnVuY3Rpb24gaWUobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9TWF0aC5zcXJ0KHUtMippKk1hdGguc2luKHQpKS9pO3JldHVybltlKk1hdGguc2luKG4qPWkpLGEtZSpNYXRoLmNvcyhuKV19dmFyIHI9TWF0aC5zaW4obiksaT0ocitNYXRoLnNpbih0KSkvMix1PTErciooMippLXIpLGE9TWF0aC5zcXJ0KHUpL2k7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9YS10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvaSxJKCh1LShuKm4rZSplKSppKmkpLygyKmkpKV19LGV9ZnVuY3Rpb24gdWUoKXtmdW5jdGlvbiBuKG4sdCl7SW8rPWkqbi1yKnQscj1uLGk9dH12YXIgdCxlLHIsaTskby5wb2ludD1mdW5jdGlvbih1LGEpeyRvLnBvaW50PW4sdD1yPXUsZT1pPWF9LCRvLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIGFlKG4sdCl7Vm8+biYmKFZvPW4pLG4+Wm8mJihabz1uKSxYbz50JiYoWG89dCksdD5CbyYmKEJvPXQpfWZ1bmN0aW9uIG9lKCl7ZnVuY3Rpb24gbihuLHQpe2EucHVzaCgiTSIsbiwiLCIsdCx1KX1mdW5jdGlvbiB0KG4sdCl7YS5wdXNoKCJNIixuLCIsIix0KSxvLnBvaW50PWV9ZnVuY3Rpb24gZShuLHQpe2EucHVzaCgiTCIsbiwiLCIsdCl9ZnVuY3Rpb24gcigpe28ucG9pbnQ9bn1mdW5jdGlvbiBpKCl7YS5wdXNoKCJaIil9dmFyIHU9Y2UoNC41KSxhPVtdLG89e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7by5wb2ludD10fSxsaW5lRW5kOnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7by5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtvLmxpbmVFbmQ9cixvLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiB1PWNlKG4pLG99LHJlc3VsdDpmdW5jdGlvbigpe2lmKGEubGVuZ3RoKXt2YXIgbj1hLmpvaW4oIiIpO3JldHVybiBhPVtdLG59fX07cmV0dXJuIG99ZnVuY3Rpb24gY2Uobil7cmV0dXJuIm0wLCIrbisiYSIrbisiLCIrbisiIDAgMSwxIDAsIistMipuKyJhIituKyIsIituKyIgMCAxLDEgMCwiKzIqbisieiJ9ZnVuY3Rpb24gbGUobix0KXtxbys9bixUbys9dCwrK0NvfWZ1bmN0aW9uIHNlKCl7ZnVuY3Rpb24gbihuLHIpe3ZhciBpPW4tdCx1PXItZSxhPU1hdGguc3FydChpKmkrdSp1KTt6bys9YSoodCtuKS8yLERvKz1hKihlK3IpLzIsam8rPWEsbGUodD1uLGU9cil9dmFyIHQsZTtKby5wb2ludD1mdW5jdGlvbihyLGkpe0pvLnBvaW50PW4sbGUodD1yLGU9aSl9fWZ1bmN0aW9uIGZlKCl7Sm8ucG9pbnQ9bGV9ZnVuY3Rpb24gaGUoKXtmdW5jdGlvbiBuKG4sdCl7dmFyIGU9bi1yLHU9dC1pLGE9TWF0aC5zcXJ0KGUqZSt1KnUpO3pvKz1hKihyK24pLzIsRG8rPWEqKGkrdCkvMixqbys9YSxhPWkqbi1yKnQsTG8rPWEqKHIrbiksSG8rPWEqKGkrdCksRm8rPTMqYSxsZShyPW4saT10KX12YXIgdCxlLHIsaTtKby5wb2ludD1mdW5jdGlvbih1LGEpe0pvLnBvaW50PW4sbGUodD1yPXUsZT1pPWEpfSxKby5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBnZShuKXtmdW5jdGlvbiB0KHQsZSl7bi5tb3ZlVG8odCxlKSxuLmFyYyh0LGUsYSwwLDIqJGEpfWZ1bmN0aW9uIGUodCxlKXtuLm1vdmVUbyh0LGUpLG8ucG9pbnQ9cn1mdW5jdGlvbiByKHQsZSl7bi5saW5lVG8odCxlKX1mdW5jdGlvbiBpKCl7by5wb2ludD10fWZ1bmN0aW9uIHUoKXtuLmNsb3NlUGF0aCgpfXZhciBhPTQuNSxvPXtwb2ludDp0LGxpbmVTdGFydDpmdW5jdGlvbigpe28ucG9pbnQ9ZX0sbGluZUVuZDppLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe28ubGluZUVuZD11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7by5saW5lRW5kPWksby5wb2ludD10fSxwb2ludFJhZGl1czpmdW5jdGlvbihuKXtyZXR1cm4gYT1uLG99LHJlc3VsdDpzfTtyZXR1cm4gb31mdW5jdGlvbiBwZShuKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIHIoZSxyKXtlPW4oZSxyKSx0LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gaSgpe009MC8wLFMucG9pbnQ9YSx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGEocixpKXt2YXIgYT1OdChbcixpXSksbz1uKHIsaSk7ZShNLHgseSxiLF8sdyxNPW9bMF0seD1vWzFdLHk9cixiPWFbMF0sXz1hWzFdLHc9YVsyXSx1LHQpLHQucG9pbnQoTSx4KX1mdW5jdGlvbiBvKCl7Uy5wb2ludD1yLHQubGluZUVuZCgpfWZ1bmN0aW9uIGMoKXtpKCksUy5wb2ludD1sLFMubGluZUVuZD1zfWZ1bmN0aW9uIGwobix0KXthKGY9bixoPXQpLGc9TSxwPXgsZD1iLG09Xyx2PXcsUy5wb2ludD1hfWZ1bmN0aW9uIHMoKXtlKE0seCx5LGIsXyx3LGcscCxmLGQsbSx2LHUsdCksUy5saW5lRW5kPW8sbygpfXZhciBmLGgsZyxwLGQsbSx2LHksTSx4LGIsXyx3LFM9e3BvaW50OnIsbGluZVN0YXJ0OmksbGluZUVuZDpvLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksUy5saW5lU3RhcnQ9Y30scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGluZVN0YXJ0PWl9fTtyZXR1cm4gU31mdW5jdGlvbiBlKHQsdSxhLG8sYyxsLHMsZixoLGcscCxkLG0sdil7dmFyIHk9cy10LE09Zi11LHg9eSp5K00qTTtpZih4PjQqciYmbS0tKXt2YXIgYj1vK2csXz1jK3Asdz1sK2QsUz1NYXRoLnNxcnQoYipiK18qXyt3KncpLEU9TWF0aC5hc2luKHcvPVMpLGs9TWF0aC5hYnMoTWF0aC5hYnModyktMSk8V2E/KGEraCkvMjpNYXRoLmF0YW4yKF8sYiksQT1uKGssRSksTj1BWzBdLHE9QVsxXSxUPU4tdCxDPXEtdSx6PU0qVC15KkM7KHoqei94PnJ8fE1hdGguYWJzKCh5KlQrTSpDKS94LS41KT4uM3x8aT5vKmcrYypwK2wqZCkmJihlKHQsdSxhLG8sYyxsLE4scSxrLGIvPVMsXy89Uyx3LG0sdiksdi5wb2ludChOLHEpLGUoTixxLGssYixfLHcscyxmLGgsZyxwLGQsbSx2KSl9fXZhciByPS41LGk9TWF0aC5jb3MoMzAqR2EpLHU9MTY7cmV0dXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PShyPW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KHIpfSx0fWZ1bmN0aW9uIGRlKG4pe3ZhciB0PXBlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oW3QqS2EsZSpLYV0pfSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuPXQobikse3BvaW50OmZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkdhLGUqR2EpfSxzcGhlcmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKX19fX1mdW5jdGlvbiBtZShuKXtyZXR1cm4gdmUoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKCl9ZnVuY3Rpb24gdmUobil7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj1vKG5bMF0qR2EsblsxXSpHYSksW25bMF0qaCtjLGwtblsxXSpoXX1mdW5jdGlvbiBlKG4pe3JldHVybiBuPW8uaW52ZXJ0KChuWzBdLWMpL2gsKGwtblsxXSkvaCksbiYmW25bMF0qS2EsblsxXSpLYV19ZnVuY3Rpb24gcigpe289ZWUoYT14ZSh2LHksTSksdSk7dmFyIG49dShkLG0pO3JldHVybiBjPWctblswXSpoLGw9cCtuWzFdKmgsaSgpfWZ1bmN0aW9uIGkoKXtyZXR1cm4gcyYmKHMudmFsaWQ9ITEscz1udWxsKSx0fXZhciB1LGEsbyxjLGwscyxmPXBlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49dShuLHQpLFtuWzBdKmgrYyxsLW5bMV0qaF19KSxoPTE1MCxnPTQ4MCxwPTI1MCxkPTAsbT0wLHY9MCx5PTAsTT0wLHg9T28sYj1odCxfPW51bGwsdz1udWxsO3JldHVybiB0LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gcyYmKHMudmFsaWQ9ITEpLHM9eWUoYSx4KGYoYihuKSkpKSxzLnZhbGlkPSEwLHN9LHQuY2xpcEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PW51bGw9PW4/KF89bixPbyk6UXQoKF89K24pKkdhKSxpKCkpOl99LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1uLGI9bnVsbD09bj9odDpuZShuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdKSxpKCkpOnd9LHQuc2NhbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K24scigpKTpofSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rblswXSxwPStuWzFdLHIoKSk6W2cscF19LHQuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW5bMF0lMzYwKkdhLG09blsxXSUzNjAqR2EscigpKTpbZCpLYSxtKkthXX0sdC5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9blswXSUzNjAqR2EseT1uWzFdJTM2MCpHYSxNPW4ubGVuZ3RoPjI/blsyXSUzNjAqR2E6MCxyKCkpOlt2KkthLHkqS2EsTSpLYV19LHlhLnJlYmluZCh0LGYsInByZWNpc2lvbiIpLGZ1bmN0aW9uKCl7cmV0dXJuIHU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5pbnZlcnQ9dS5pbnZlcnQmJmUscigpfX1mdW5jdGlvbiB5ZShuLHQpe3JldHVybntwb2ludDpmdW5jdGlvbihlLHIpe3I9bihlKkdhLHIqR2EpLGU9clswXSx0LnBvaW50KGU+JGE/ZS0yKiRhOi0kYT5lP2UrMiokYTplLHJbMV0pfSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIE1lKG4sdCl7cmV0dXJuW24sdF19ZnVuY3Rpb24geGUobix0LGUpe3JldHVybiBuP3R8fGU/ZWUoX2Uobiksd2UodCxlKSk6X2Uobik6dHx8ZT93ZSh0LGUpOk1lfWZ1bmN0aW9uIGJlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiB0Kz1uLFt0PiRhP3QtMiokYTotJGE+dD90KzIqJGE6dCxlXX19ZnVuY3Rpb24gX2Uobil7dmFyIHQ9YmUobik7cmV0dXJuIHQuaW52ZXJ0PWJlKC1uKSx0fWZ1bmN0aW9uIHdlKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLG89TWF0aC5jb3MobikqZSxjPU1hdGguc2luKG4pKmUsbD1NYXRoLnNpbih0KSxzPWwqcitvKmk7cmV0dXJuW01hdGguYXRhbjIoYyp1LXMqYSxvKnItbCppKSxJKHMqdStjKmEpXX12YXIgcj1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pLHU9TWF0aC5jb3ModCksYT1NYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1NYXRoLmNvcyh0KSxvPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLGw9TWF0aC5zaW4odCkscz1sKnUtYyphO3JldHVybltNYXRoLmF0YW4yKGMqdStsKmEsbypyK3MqaSksSShzKnItbyppKV19LGV9ZnVuY3Rpb24gU2Uobix0KXt2YXIgZT1NYXRoLmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbihpLHUsYSxvKXtudWxsIT1pPyhpPUVlKGUsaSksdT1FZShlLHUpLChhPjA/dT5pOmk+dSkmJihpKz0yKmEqJGEpKTooaT1uKzIqYSokYSx1PW4pO2Zvcih2YXIgYyxsPWEqdCxzPWk7YT4wP3M+dTp1PnM7cy09bClvLnBvaW50KChjPWp0KFtlLC1yKk1hdGguY29zKHMpLC1yKk1hdGguc2luKHMpXSkpWzBdLGNbMV0pfX1mdW5jdGlvbiBFZShuLHQpe3ZhciBlPU50KHQpO2VbMF0tPW4sRHQoZSk7dmFyIHI9VSgtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1yOnIpKzIqTWF0aC5QSS1XYSklKDIqTWF0aC5QSSl9ZnVuY3Rpb24ga2Uobix0LGUpe3ZhciByPXlhLnJhbmdlKG4sdC1XYSxlKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiByLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bbix0XX0pfX1mdW5jdGlvbiBBZShuLHQsZSl7dmFyIHI9eWEucmFuZ2Uobix0LVdhLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0LG5dfSl9fWZ1bmN0aW9uIE5lKG4pe3JldHVybiBuLnNvdXJjZX1mdW5jdGlvbiBxZShuKXtyZXR1cm4gbi50YXJnZXR9ZnVuY3Rpb24gVGUobix0LGUscil7dmFyIGk9TWF0aC5jb3ModCksdT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHIpLG89TWF0aC5zaW4ociksYz1pKk1hdGguY29zKG4pLGw9aSpNYXRoLnNpbihuKSxzPWEqTWF0aC5jb3MoZSksZj1hKk1hdGguc2luKGUpLGg9MipNYXRoLmFzaW4oTWF0aC5zcXJ0KFooci10KStpKmEqWihlLW4pKSksZz0xL01hdGguc2luKGgpLHA9aD9mdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNpbihuKj1oKSpnLGU9TWF0aC5zaW4oaC1uKSpnLHI9ZSpjK3QqcyxpPWUqbCt0KmYsYT1lKnUrdCpvO3JldHVybltNYXRoLmF0YW4yKGkscikqS2EsTWF0aC5hdGFuMihhLE1hdGguc3FydChyKnIraSppKSkqS2FdfTpmdW5jdGlvbigpe3JldHVybltuKkthLHQqS2FdfTtyZXR1cm4gcC5kaXN0YW5jZT1oLHB9ZnVuY3Rpb24gQ2UoKXtmdW5jdGlvbiBuKG4saSl7dmFyIHU9TWF0aC5zaW4oaSo9R2EpLGE9TWF0aC5jb3MoaSksbz1NYXRoLmFicygobio9R2EpLXQpLGM9TWF0aC5jb3Mobyk7R28rPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChvPWEqTWF0aC5zaW4obykpKm8rKG89cip1LWUqYSpjKSpvKSxlKnUrciphKmMpLHQ9bixlPXUscj1hfXZhciB0LGUscjtLby5wb2ludD1mdW5jdGlvbihpLHUpe3Q9aSpHYSxlPU1hdGguc2luKHUqPUdhKSxyPU1hdGguY29zKHUpLEtvLnBvaW50PW59LEtvLmxpbmVFbmQ9ZnVuY3Rpb24oKXtLby5wb2ludD1Lby5saW5lRW5kPXN9fWZ1bmN0aW9uIHplKG4sdCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPU1hdGguY29zKHQpLGk9TWF0aC5jb3MoZSksdT1uKHIqaSk7cmV0dXJuW3UqaSpNYXRoLnNpbih0KSx1Kk1hdGguc2luKGUpXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obixlKXt2YXIgcj1NYXRoLnNxcnQobipuK2UqZSksaT10KHIpLHU9TWF0aC5zaW4oaSksYT1NYXRoLmNvcyhpKTtyZXR1cm5bTWF0aC5hdGFuMihuKnUsciphKSxNYXRoLmFzaW4ociYmZSp1L3IpXX0sZX1mdW5jdGlvbiBEZShuLHQpe2Z1bmN0aW9uIGUobix0KXt2YXIgZT1NYXRoLmFicyhNYXRoLmFicyh0KS0kYS8yKTxXYT8wOmEvTWF0aC5wb3coaSh0KSx1KTtyZXR1cm5bZSpNYXRoLnNpbih1Km4pLGEtZSpNYXRoLmNvcyh1Km4pXX12YXIgcj1NYXRoLmNvcyhuKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnRhbigkYS80K24vMil9LHU9bj09PXQ/TWF0aC5zaW4obik6TWF0aC5sb2coci9NYXRoLmNvcyh0KSkvTWF0aC5sb2coaSh0KS9pKG4pKSxhPXIqTWF0aC5wb3coaShuKSx1KS91O3JldHVybiB1PyhlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPWEtdCxyPVIodSkqTWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSwyKk1hdGguYXRhbihNYXRoLnBvdyhhL3IsMS91KSktJGEvMl19LGUpOkxlfWZ1bmN0aW9uIGplKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPXUtdDtyZXR1cm5bZSpNYXRoLnNpbihpKm4pLHUtZSpNYXRoLmNvcyhpKm4pXX12YXIgcj1NYXRoLmNvcyhuKSxpPW49PT10P01hdGguc2luKG4pOihyLU1hdGguY29zKHQpKS8odC1uKSx1PXIvaStuO3JldHVybiBNYXRoLmFicyhpKTxXYT9NZTooZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT11LXQ7cmV0dXJuW01hdGguYXRhbjIobixlKS9pLHUtUihpKSpNYXRoLnNxcnQobipuK2UqZSldfSxlKX1mdW5jdGlvbiBMZShuLHQpe3JldHVybltuLE1hdGgubG9nKE1hdGgudGFuKCRhLzQrdC8yKSldfWZ1bmN0aW9uIEhlKG4pe3ZhciB0LGU9bWUobikscj1lLnNjYWxlLGk9ZS50cmFuc2xhdGUsdT1lLmNsaXBFeHRlbnQ7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24oKXt2YXIgbj1yLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dD9lLmNsaXBFeHRlbnQobnVsbCk6ZTpufSxlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe3ZhciBuPWkuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUuY2xpcEV4dGVudD1mdW5jdGlvbihuKXt2YXIgYT11LmFwcGx5KGUsYXJndW1lbnRzKTtpZihhPT09ZSl7aWYodD1udWxsPT1uKXt2YXIgbz0kYSpyKCksYz1pKCk7dShbW2NbMF0tbyxjWzFdLW9dLFtjWzBdK28sY1sxXStvXV0pfX1lbHNlIHQmJihhPW51bGwpO3JldHVybiBhfSxlLmNsaXBFeHRlbnQobnVsbCl9ZnVuY3Rpb24gRmUobix0KXt2YXIgZT1NYXRoLmNvcyh0KSpNYXRoLnNpbihuKTtyZXR1cm5bTWF0aC5sb2coKDErZSkvKDEtZSkpLzIsTWF0aC5hdGFuMihNYXRoLnRhbih0KSxNYXRoLmNvcyhuKSldfWZ1bmN0aW9uIFBlKG4pe2Z1bmN0aW9uIHQodCl7ZnVuY3Rpb24gYSgpe2wucHVzaCgiTSIsdShuKHMpLG8pKX1mb3IodmFyIGMsbD1bXSxzPVtdLGY9LTEsaD10Lmxlbmd0aCxnPWZ0KGUpLHA9ZnQocik7KytmPGg7KWkuY2FsbCh0aGlzLGM9dFtmXSxmKT9zLnB1c2goWytnLmNhbGwodGhpcyxjLGYpLCtwLmNhbGwodGhpcyxjLGYpXSk6cy5sZW5ndGgmJihhKCkscz1bXSk7cmV0dXJuIHMubGVuZ3RoJiZhKCksbC5sZW5ndGg/bC5qb2luKCIiKTpudWxsfXZhciBlPU9lLHI9WWUsaT1SdCx1PVJlLGE9dS5rZXksbz0uNztyZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdC5kZWZpbmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW4sdCk6aX0sdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2Ygbj91PW46KHU9aWMuZ2V0KG4pfHxSZSkua2V5LHQpOmF9LHQudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLHQpOm99LHR9ZnVuY3Rpb24gT2Uobil7cmV0dXJuIG5bMF19ZnVuY3Rpb24gWWUobil7cmV0dXJuIG5bMV19ZnVuY3Rpb24gUmUobil7cmV0dXJuIG4uam9pbigiTCIpfWZ1bmN0aW9uIFVlKG4pe3JldHVybiBSZShuKSsiWiJ9ZnVuY3Rpb24gSWUobil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0saT1bclswXSwiLCIsclsxXV07Kyt0PGU7KWkucHVzaCgiSCIsKHJbMF0rKHI9blt0XSlbMF0pLzIsIlYiLHJbMV0pO3JldHVybiBlPjEmJmkucHVzaCgiSCIsclswXSksaS5qb2luKCIiKX1mdW5jdGlvbiBWZShuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLHI9blswXSxpPVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTspaS5wdXNoKCJWIiwocj1uW3RdKVsxXSwiSCIsclswXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gWGUobil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0saT1bclswXSwiLCIsclsxXV07Kyt0PGU7KWkucHVzaCgiSCIsKHI9blt0XSlbMF0sIlYiLHJbMV0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIFplKG4sdCl7cmV0dXJuIG4ubGVuZ3RoPDQ/UmUobik6blsxXStXZShuLnNsaWNlKDEsbi5sZW5ndGgtMSksSmUobix0KSl9ZnVuY3Rpb24gQmUobix0KXtyZXR1cm4gbi5sZW5ndGg8Mz9SZShuKTpuWzBdK1dlKChuLnB1c2goblswXSksbiksSmUoW25bbi5sZW5ndGgtMl1dLmNvbmNhdChuLFtuWzFdXSksdCkpfWZ1bmN0aW9uICRlKG4sdCl7cmV0dXJuIG4ubGVuZ3RoPDM/UmUobik6blswXStXZShuLEplKG4sdCkpfWZ1bmN0aW9uIFdlKG4sdCl7aWYodC5sZW5ndGg8MXx8bi5sZW5ndGghPXQubGVuZ3RoJiZuLmxlbmd0aCE9dC5sZW5ndGgrMilyZXR1cm4gUmUobik7dmFyIGU9bi5sZW5ndGghPXQubGVuZ3RoLHI9IiIsaT1uWzBdLHU9blsxXSxhPXRbMF0sbz1hLGM9MTtpZihlJiYocis9IlEiKyh1WzBdLTIqYVswXS8zKSsiLCIrKHVbMV0tMiphWzFdLzMpKyIsIit1WzBdKyIsIit1WzFdLGk9blsxXSxjPTIpLHQubGVuZ3RoPjEpe289dFsxXSx1PW5bY10sYysrLHIrPSJDIisoaVswXSthWzBdKSsiLCIrKGlbMV0rYVsxXSkrIiwiKyh1WzBdLW9bMF0pKyIsIisodVsxXS1vWzFdKSsiLCIrdVswXSsiLCIrdVsxXTtmb3IodmFyIGw9MjtsPHQubGVuZ3RoO2wrKyxjKyspdT1uW2NdLG89dFtsXSxyKz0iUyIrKHVbMF0tb1swXSkrIiwiKyh1WzFdLW9bMV0pKyIsIit1WzBdKyIsIit1WzFdfWlmKGUpe3ZhciBzPW5bY107cis9IlEiKyh1WzBdKzIqb1swXS8zKSsiLCIrKHVbMV0rMipvWzFdLzMpKyIsIitzWzBdKyIsIitzWzFdfXJldHVybiByfWZ1bmN0aW9uIEplKG4sdCl7Zm9yKHZhciBlLHI9W10saT0oMS10KS8yLHU9blswXSxhPW5bMV0sbz0xLGM9bi5sZW5ndGg7KytvPGM7KWU9dSx1PWEsYT1uW29dLHIucHVzaChbaSooYVswXS1lWzBdKSxpKihhWzFdLWVbMV0pXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gR2Uobil7aWYobi5sZW5ndGg8MylyZXR1cm4gUmUobik7dmFyIHQ9MSxlPW4ubGVuZ3RoLHI9blswXSxpPXJbMF0sdT1yWzFdLGE9W2ksaSxpLChyPW5bMV0pWzBdXSxvPVt1LHUsdSxyWzFdXSxjPVtpLCIsIix1XTtmb3IoZXIoYyxhLG8pOysrdDxlOylyPW5bdF0sYS5zaGlmdCgpLGEucHVzaChyWzBdKSxvLnNoaWZ0KCksby5wdXNoKHJbMV0pLGVyKGMsYSxvKTtmb3IodD0tMTsrK3Q8MjspYS5zaGlmdCgpLGEucHVzaChyWzBdKSxvLnNoaWZ0KCksby5wdXNoKHJbMV0pLGVyKGMsYSxvKTtyZXR1cm4gYy5qb2luKCIiKX1mdW5jdGlvbiBLZShuKXtpZihuLmxlbmd0aDw0KXJldHVybiBSZShuKTtmb3IodmFyIHQsZT1bXSxyPS0xLGk9bi5sZW5ndGgsdT1bMF0sYT1bMF07KytyPDM7KXQ9bltyXSx1LnB1c2godFswXSksYS5wdXNoKHRbMV0pO2ZvcihlLnB1c2godHIob2MsdSkrIiwiK3RyKG9jLGEpKSwtLXI7KytyPGk7KXQ9bltyXSx1LnNoaWZ0KCksdS5wdXNoKHRbMF0pLGEuc2hpZnQoKSxhLnB1c2godFsxXSksZXIoZSx1LGEpO3JldHVybiBlLmpvaW4oIiIpfWZ1bmN0aW9uIFFlKG4pe2Zvcih2YXIgdCxlLHI9LTEsaT1uLmxlbmd0aCx1PWkrNCxhPVtdLG89W107KytyPDQ7KWU9bltyJWldLGEucHVzaChlWzBdKSxvLnB1c2goZVsxXSk7Zm9yKHQ9W3RyKG9jLGEpLCIsIix0cihvYyxvKV0sLS1yOysrcjx1OyllPW5bciVpXSxhLnNoaWZ0KCksYS5wdXNoKGVbMF0pLG8uc2hpZnQoKSxvLnB1c2goZVsxXSksZXIodCxhLG8pO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIG5yKG4sdCl7dmFyIGU9bi5sZW5ndGgtMTtpZihlKWZvcih2YXIgcixpLHU9blswXVswXSxhPW5bMF1bMV0sbz1uW2VdWzBdLXUsYz1uW2VdWzFdLWEsbD0tMTsrK2w8PWU7KXI9bltsXSxpPWwvZSxyWzBdPXQqclswXSsoMS10KSoodStpKm8pLHJbMV09dCpyWzFdKygxLXQpKihhK2kqYyk7cmV0dXJuIEdlKG4pfWZ1bmN0aW9uIHRyKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsyXSp0WzJdK25bM10qdFszXX1mdW5jdGlvbiBlcihuLHQsZSl7bi5wdXNoKCJDIix0cih1Yyx0KSwiLCIsdHIodWMsZSksIiwiLHRyKGFjLHQpLCIsIix0cihhYyxlKSwiLCIsdHIob2MsdCksIiwiLHRyKG9jLGUpKX1mdW5jdGlvbiBycihuLHQpe3JldHVybih0WzFdLW5bMV0pLyh0WzBdLW5bMF0pfWZ1bmN0aW9uIGlyKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgtMSxyPVtdLGk9blswXSx1PW5bMV0sYT1yWzBdPXJyKGksdSk7Kyt0PGU7KXJbdF09KGErKGE9cnIoaT11LHU9blt0KzFdKSkpLzI7cmV0dXJuIHJbdF09YSxyfWZ1bmN0aW9uIHVyKG4pe2Zvcih2YXIgdCxlLHIsaSx1PVtdLGE9aXIobiksbz0tMSxjPW4ubGVuZ3RoLTE7KytvPGM7KXQ9cnIobltvXSxuW28rMV0pLE1hdGguYWJzKHQpPDFlLTY/YVtvXT1hW28rMV09MDooZT1hW29dL3Qscj1hW28rMV0vdCxpPWUqZStyKnIsaT45JiYoaT0zKnQvTWF0aC5zcXJ0KGkpLGFbb109aSplLGFbbysxXT1pKnIpKTsKZm9yKG89LTE7KytvPD1jOylpPShuW01hdGgubWluKGMsbysxKV1bMF0tbltNYXRoLm1heCgwLG8tMSldWzBdKS8oNiooMSthW29dKmFbb10pKSx1LnB1c2goW2l8fDAsYVtvXSppfHwwXSk7cmV0dXJuIHV9ZnVuY3Rpb24gYXIobil7cmV0dXJuIG4ubGVuZ3RoPDM/UmUobik6blswXStXZShuLHVyKG4pKX1mdW5jdGlvbiBvcihuLHQsZSxyKXt2YXIgaSx1LGEsbyxjLGwscztyZXR1cm4gaT1yW25dLHU9aVswXSxhPWlbMV0saT1yW3RdLG89aVswXSxjPWlbMV0saT1yW2VdLGw9aVswXSxzPWlbMV0sKHMtYSkqKG8tdSktKGMtYSkqKGwtdSk+MH1mdW5jdGlvbiBjcihuLHQsZSl7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk8KGVbMV0tdFsxXSkqKG5bMF0tdFswXSl9ZnVuY3Rpb24gbHIobix0LGUscil7dmFyIGk9blswXSx1PWVbMF0sYT10WzBdLWksbz1yWzBdLXUsYz1uWzFdLGw9ZVsxXSxzPXRbMV0tYyxmPXJbMV0tbCxoPShvKihjLWwpLWYqKGktdSkpLyhmKmEtbypzKTtyZXR1cm5baStoKmEsYytoKnNdfWZ1bmN0aW9uIHNyKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiEodFswXS1lWzBdfHx0WzFdLWVbMV0pfWZ1bmN0aW9uIGZyKG4sdCl7dmFyIGU9e2xpc3Q6bi5tYXAoZnVuY3Rpb24obix0KXtyZXR1cm57aW5kZXg6dCx4Om5bMF0seTpuWzFdfX0pLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gbi55PHQueT8tMTpuLnk+dC55PzE6bi54PHQueD8tMTpuLng+dC54PzE6MH0pLGJvdHRvbVNpdGU6bnVsbH0scj17bGlzdDpbXSxsZWZ0RW5kOm51bGwscmlnaHRFbmQ6bnVsbCxpbml0OmZ1bmN0aW9uKCl7ci5sZWZ0RW5kPXIuY3JlYXRlSGFsZkVkZ2UobnVsbCwibCIpLHIucmlnaHRFbmQ9ci5jcmVhdGVIYWxmRWRnZShudWxsLCJsIiksci5sZWZ0RW5kLnI9ci5yaWdodEVuZCxyLnJpZ2h0RW5kLmw9ci5sZWZ0RW5kLHIubGlzdC51bnNoaWZ0KHIubGVmdEVuZCxyLnJpZ2h0RW5kKX0sY3JlYXRlSGFsZkVkZ2U6ZnVuY3Rpb24obix0KXtyZXR1cm57ZWRnZTpuLHNpZGU6dCx2ZXJ0ZXg6bnVsbCxsOm51bGwscjpudWxsfX0saW5zZXJ0OmZ1bmN0aW9uKG4sdCl7dC5sPW4sdC5yPW4ucixuLnIubD10LG4ucj10fSxsZWZ0Qm91bmQ6ZnVuY3Rpb24obil7dmFyIHQ9ci5sZWZ0RW5kO2RvIHQ9dC5yO3doaWxlKHQhPXIucmlnaHRFbmQmJmkucmlnaHRPZih0LG4pKTtyZXR1cm4gdD10Lmx9LGRlbDpmdW5jdGlvbihuKXtuLmwucj1uLnIsbi5yLmw9bi5sLG4uZWRnZT1udWxsfSxyaWdodDpmdW5jdGlvbihuKXtyZXR1cm4gbi5yfSxsZWZ0OmZ1bmN0aW9uKG4pe3JldHVybiBuLmx9LGxlZnRSZWdpb246ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW4uZWRnZT9lLmJvdHRvbVNpdGU6bi5lZGdlLnJlZ2lvbltuLnNpZGVdfSxyaWdodFJlZ2lvbjpmdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09bi5lZGdlP2UuYm90dG9tU2l0ZTpuLmVkZ2UucmVnaW9uW2xjW24uc2lkZV1dfX0saT17YmlzZWN0OmZ1bmN0aW9uKG4sdCl7dmFyIGU9e3JlZ2lvbjp7bDpuLHI6dH0sZXA6e2w6bnVsbCxyOm51bGx9fSxyPXQueC1uLngsaT10Lnktbi55LHU9cj4wP3I6LXIsYT1pPjA/aTotaTtyZXR1cm4gZS5jPW4ueCpyK24ueSppKy41KihyKnIraSppKSx1PmE/KGUuYT0xLGUuYj1pL3IsZS5jLz1yKTooZS5iPTEsZS5hPXIvaSxlLmMvPWkpLGV9LGludGVyc2VjdDpmdW5jdGlvbihuLHQpe3ZhciBlPW4uZWRnZSxyPXQuZWRnZTtpZighZXx8IXJ8fGUucmVnaW9uLnI9PXIucmVnaW9uLnIpcmV0dXJuIG51bGw7dmFyIGk9ZS5hKnIuYi1lLmIqci5hO2lmKE1hdGguYWJzKGkpPDFlLTEwKXJldHVybiBudWxsO3ZhciB1LGEsbz0oZS5jKnIuYi1yLmMqZS5iKS9pLGM9KHIuYyplLmEtZS5jKnIuYSkvaSxsPWUucmVnaW9uLnIscz1yLnJlZ2lvbi5yO2wueTxzLnl8fGwueT09cy55JiZsLng8cy54Pyh1PW4sYT1lKToodT10LGE9cik7dmFyIGY9bz49YS5yZWdpb24uci54O3JldHVybiBmJiYibCI9PT11LnNpZGV8fCFmJiYiciI9PT11LnNpZGU/bnVsbDp7eDpvLHk6Y319LHJpZ2h0T2Y6ZnVuY3Rpb24obix0KXt2YXIgZT1uLmVkZ2Uscj1lLnJlZ2lvbi5yLGk9dC54PnIueDtpZihpJiYibCI9PT1uLnNpZGUpcmV0dXJuIDE7aWYoIWkmJiJyIj09PW4uc2lkZSlyZXR1cm4gMDtpZigxPT09ZS5hKXt2YXIgdT10Lnktci55LGE9dC54LXIueCxvPTAsYz0wO2lmKCFpJiZlLmI8MHx8aSYmZS5iPj0wP2M9bz11Pj1lLmIqYTooYz10LngrdC55KmUuYj5lLmMsZS5iPDAmJihjPSFjKSxjfHwobz0xKSksIW8pe3ZhciBsPXIueC1lLnJlZ2lvbi5sLng7Yz1lLmIqKGEqYS11KnUpPGwqdSooMSsyKmEvbCtlLmIqZS5iKSxlLmI8MCYmKGM9IWMpfX1lbHNle3ZhciBzPWUuYy1lLmEqdC54LGY9dC55LXMsaD10Lngtci54LGc9cy1yLnk7Yz1mKmY+aCpoK2cqZ31yZXR1cm4ibCI9PT1uLnNpZGU/YzohY30sZW5kUG9pbnQ6ZnVuY3Rpb24obixlLHIpe24uZXBbZV09cixuLmVwW2xjW2VdXSYmdChuKX0sZGlzdGFuY2U6ZnVuY3Rpb24obix0KXt2YXIgZT1uLngtdC54LHI9bi55LXQueTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIpfX0sdT17bGlzdDpbXSxpbnNlcnQ6ZnVuY3Rpb24obix0LGUpe24udmVydGV4PXQsbi55c3Rhcj10LnkrZTtmb3IodmFyIHI9MCxpPXUubGlzdCxhPWkubGVuZ3RoO2E+cjtyKyspe3ZhciBvPWlbcl07aWYoIShuLnlzdGFyPm8ueXN0YXJ8fG4ueXN0YXI9PW8ueXN0YXImJnQueD5vLnZlcnRleC54KSlicmVha31pLnNwbGljZShyLDAsbil9LGRlbDpmdW5jdGlvbihuKXtmb3IodmFyIHQ9MCxlPXUubGlzdCxyPWUubGVuZ3RoO3I+dCYmZVt0XSE9bjsrK3QpO2Uuc3BsaWNlKHQsMSl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT11Lmxpc3QubGVuZ3RofSxuZXh0RXZlbnQ6ZnVuY3Rpb24obil7Zm9yKHZhciB0PTAsZT11Lmxpc3Qscj1lLmxlbmd0aDtyPnQ7Kyt0KWlmKGVbdF09PW4pcmV0dXJuIGVbdCsxXTtyZXR1cm4gbnVsbH0sbWluOmZ1bmN0aW9uKCl7dmFyIG49dS5saXN0WzBdO3JldHVybnt4Om4udmVydGV4LngseTpuLnlzdGFyfX0sZXh0cmFjdE1pbjpmdW5jdGlvbigpe3JldHVybiB1Lmxpc3Quc2hpZnQoKX19O3IuaW5pdCgpLGUuYm90dG9tU2l0ZT1lLmxpc3Quc2hpZnQoKTtmb3IodmFyIGEsbyxjLGwscyxmLGgsZyxwLGQsbSx2LHksTT1lLmxpc3Quc2hpZnQoKTs7KWlmKHUuZW1wdHkoKXx8KGE9dS5taW4oKSksTSYmKHUuZW1wdHkoKXx8TS55PGEueXx8TS55PT1hLnkmJk0ueDxhLngpKW89ci5sZWZ0Qm91bmQoTSksYz1yLnJpZ2h0KG8pLGg9ci5yaWdodFJlZ2lvbihvKSx2PWkuYmlzZWN0KGgsTSksZj1yLmNyZWF0ZUhhbGZFZGdlKHYsImwiKSxyLmluc2VydChvLGYpLGQ9aS5pbnRlcnNlY3QobyxmKSxkJiYodS5kZWwobyksdS5pbnNlcnQobyxkLGkuZGlzdGFuY2UoZCxNKSkpLG89ZixmPXIuY3JlYXRlSGFsZkVkZ2UodiwiciIpLHIuaW5zZXJ0KG8sZiksZD1pLmludGVyc2VjdChmLGMpLGQmJnUuaW5zZXJ0KGYsZCxpLmRpc3RhbmNlKGQsTSkpLE09ZS5saXN0LnNoaWZ0KCk7ZWxzZXtpZih1LmVtcHR5KCkpYnJlYWs7bz11LmV4dHJhY3RNaW4oKSxsPXIubGVmdChvKSxjPXIucmlnaHQobykscz1yLnJpZ2h0KGMpLGg9ci5sZWZ0UmVnaW9uKG8pLGc9ci5yaWdodFJlZ2lvbihjKSxtPW8udmVydGV4LGkuZW5kUG9pbnQoby5lZGdlLG8uc2lkZSxtKSxpLmVuZFBvaW50KGMuZWRnZSxjLnNpZGUsbSksci5kZWwobyksdS5kZWwoYyksci5kZWwoYykseT0ibCIsaC55PmcueSYmKHA9aCxoPWcsZz1wLHk9InIiKSx2PWkuYmlzZWN0KGgsZyksZj1yLmNyZWF0ZUhhbGZFZGdlKHYseSksci5pbnNlcnQobCxmKSxpLmVuZFBvaW50KHYsbGNbeV0sbSksZD1pLmludGVyc2VjdChsLGYpLGQmJih1LmRlbChsKSx1Lmluc2VydChsLGQsaS5kaXN0YW5jZShkLGgpKSksZD1pLmludGVyc2VjdChmLHMpLGQmJnUuaW5zZXJ0KGYsZCxpLmRpc3RhbmNlKGQsaCkpfWZvcihvPXIucmlnaHQoci5sZWZ0RW5kKTtvIT1yLnJpZ2h0RW5kO289ci5yaWdodChvKSl0KG8uZWRnZSl9ZnVuY3Rpb24gaHIobil7cmV0dXJuIG4ueH1mdW5jdGlvbiBncihuKXtyZXR1cm4gbi55fWZ1bmN0aW9uIHByKCl7cmV0dXJue2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfX1mdW5jdGlvbiBkcihuLHQsZSxyLGksdSl7aWYoIW4odCxlLHIsaSx1KSl7dmFyIGE9LjUqKGUraSksbz0uNSoocit1KSxjPXQubm9kZXM7Y1swXSYmZHIobixjWzBdLGUscixhLG8pLGNbMV0mJmRyKG4sY1sxXSxhLHIsaSxvKSxjWzJdJiZkcihuLGNbMl0sZSxvLGEsdSksY1szXSYmZHIobixjWzNdLGEsbyxpLHUpfX1mdW5jdGlvbiBtcihuLHQpe249eWEucmdiKG4pLHQ9eWEucmdiKHQpO3ZhciBlPW4ucixyPW4uZyxpPW4uYix1PXQuci1lLGE9dC5nLXIsbz10LmItaTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIiMiK3V0KE1hdGgucm91bmQoZSt1Km4pKSt1dChNYXRoLnJvdW5kKHIrYSpuKSkrdXQoTWF0aC5yb3VuZChpK28qbikpfX1mdW5jdGlvbiB2cihuLHQpe3ZhciBlLHI9e30saT17fTtmb3IoZSBpbiBuKWUgaW4gdD9yW2VdPXhyKG5bZV0sdFtlXSk6aVtlXT1uW2VdO2ZvcihlIGluIHQpZSBpbiBufHwoaVtlXT10W2VdKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKGUgaW4gcilpW2VdPXJbZV0obik7cmV0dXJuIGl9fWZ1bmN0aW9uIHlyKG4sdCl7cmV0dXJuIHQtPW49K24sZnVuY3Rpb24oZSl7cmV0dXJuIG4rdCplfX1mdW5jdGlvbiBNcihuLHQpe3ZhciBlLHIsaSx1LGEsbz0wLGM9MCxsPVtdLHM9W107Zm9yKG4rPSIiLHQrPSIiLHNjLmxhc3RJbmRleD0wLHI9MDtlPXNjLmV4ZWModCk7KytyKWUuaW5kZXgmJmwucHVzaCh0LnN1YnN0cmluZyhvLGM9ZS5pbmRleCkpLHMucHVzaCh7aTpsLmxlbmd0aCx4OmVbMF19KSxsLnB1c2gobnVsbCksbz1zYy5sYXN0SW5kZXg7Zm9yKG88dC5sZW5ndGgmJmwucHVzaCh0LnN1YnN0cmluZyhvKSkscj0wLHU9cy5sZW5ndGg7KGU9c2MuZXhlYyhuKSkmJnU+cjsrK3IpaWYoYT1zW3JdLGEueD09ZVswXSl7aWYoYS5pKWlmKG51bGw9PWxbYS5pKzFdKWZvcihsW2EuaS0xXSs9YS54LGwuc3BsaWNlKGEuaSwxKSxpPXIrMTt1Pmk7KytpKXNbaV0uaS0tO2Vsc2UgZm9yKGxbYS5pLTFdKz1hLngrbFthLmkrMV0sbC5zcGxpY2UoYS5pLDIpLGk9cisxO3U+aTsrK2kpc1tpXS5pLT0yO2Vsc2UgaWYobnVsbD09bFthLmkrMV0pbFthLmldPWEueDtlbHNlIGZvcihsW2EuaV09YS54K2xbYS5pKzFdLGwuc3BsaWNlKGEuaSsxLDEpLGk9cisxO3U+aTsrK2kpc1tpXS5pLS07cy5zcGxpY2UociwxKSx1LS0sci0tfWVsc2UgYS54PXlyKHBhcnNlRmxvYXQoZVswXSkscGFyc2VGbG9hdChhLngpKTtmb3IoO3U+cjspYT1zLnBvcCgpLG51bGw9PWxbYS5pKzFdP2xbYS5pXT1hLng6KGxbYS5pXT1hLngrbFthLmkrMV0sbC5zcGxpY2UoYS5pKzEsMSkpLHUtLTtyZXR1cm4gMT09PWwubGVuZ3RoP251bGw9PWxbMF0/KGE9c1swXS54LGZ1bmN0aW9uKG4pe3JldHVybiBhKG4pKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06ZnVuY3Rpb24obil7Zm9yKHI9MDt1PnI7KytyKWxbKGE9c1tyXSkuaV09YS54KG4pO3JldHVybiBsLmpvaW4oIiIpfX1mdW5jdGlvbiB4cihuLHQpe2Zvcih2YXIgZSxyPXlhLmludGVycG9sYXRvcnMubGVuZ3RoOy0tcj49MCYmIShlPXlhLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBicihuLHQpe3ZhciBlLHI9W10saT1bXSx1PW4ubGVuZ3RoLGE9dC5sZW5ndGgsbz1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDtvPmU7KytlKXIucHVzaCh4cihuW2VdLHRbZV0pKTtmb3IoO3U+ZTsrK2UpaVtlXT1uW2VdO2Zvcig7YT5lOysrZSlpW2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlPTA7bz5lOysrZSlpW2VdPXJbZV0obik7cmV0dXJuIGl9fWZ1bmN0aW9uIF9yKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1mdW5jdGlvbiB3cihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQpfX1mdW5jdGlvbiBTcihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41PnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiBFcihuKXtyZXR1cm4gbipufWZ1bmN0aW9uIGtyKG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiBBcihuKXtpZigwPj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3JldHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24gTnIobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBxcihuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKiRhLzIpfWZ1bmN0aW9uIFRyKG4pe3JldHVybiBNYXRoLnBvdygyLDEwKihuLTEpKX1mdW5jdGlvbiBDcihuKXtyZXR1cm4gMS1NYXRoLnNxcnQoMS1uKm4pfWZ1bmN0aW9uIHpyKG4sdCl7dmFyIGU7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9LjQ1KSxhcmd1bWVudHMubGVuZ3RoP2U9dC8oMiokYSkqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJuIDErbipNYXRoLnBvdygyLDEwKi1yKSpNYXRoLnNpbigyKihyLWUpKiRhL3QpfX1mdW5jdGlvbiBEcihuKXtyZXR1cm4gbnx8KG49MS43MDE1OCksZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooKG4rMSkqdC1uKX19ZnVuY3Rpb24ganIobil7cmV0dXJuIDEvMi43NT5uPzcuNTYyNSpuKm46Mi8yLjc1Pm4/Ny41NjI1KihuLT0xLjUvMi43NSkqbisuNzU6Mi41LzIuNzU+bj83LjU2MjUqKG4tPTIuMjUvMi43NSkqbisuOTM3NTo3LjU2MjUqKG4tPTIuNjI1LzIuNzUpKm4rLjk4NDM3NX1mdW5jdGlvbiBMcihuLHQpe249eWEuaGNsKG4pLHQ9eWEuaGNsKHQpO3ZhciBlPW4uaCxyPW4uYyxpPW4ubCx1PXQuaC1lLGE9dC5jLXIsbz10LmwtaTtyZXR1cm4gaXNOYU4oYSkmJihhPTAscj1pc05hTihyKT90LmM6ciksaXNOYU4odSk/KHU9MCxlPWlzTmFOKGUpP3QuaDplKTp1PjE4MD91LT0zNjA6LTE4MD51JiYodSs9MzYwKSxmdW5jdGlvbihuKXtyZXR1cm4gVyhlK3UqbixyK2EqbixpK28qbikrIiJ9fWZ1bmN0aW9uIEhyKG4sdCl7bj15YS5oc2wobiksdD15YS5oc2wodCk7dmFyIGU9bi5oLHI9bi5zLGk9bi5sLHU9dC5oLWUsYT10LnMtcixvPXQubC1pO3JldHVybiBpc05hTihhKSYmKGE9MCxyPWlzTmFOKHIpP3QuczpyKSxpc05hTih1KT8odT0wLGU9aXNOYU4oZSk/dC5oOmUpOnU+MTgwP3UtPTM2MDotMTgwPnUmJih1Kz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBZKGUrdSpuLHIrYSpuLGkrbypuKSsiIn19ZnVuY3Rpb24gRnIobix0KXtuPXlhLmxhYihuKSx0PXlhLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsaT1uLmIsdT10LmwtZSxhPXQuYS1yLG89dC5iLWk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBLKGUrdSpuLHIrYSpuLGkrbypuKSsiIn19ZnVuY3Rpb24gUHIobix0KXtyZXR1cm4gdC09bixmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChuK3QqZSl9fWZ1bmN0aW9uIE9yKG4pe3ZhciB0PVtuLmEsbi5iXSxlPVtuLmMsbi5kXSxyPVJyKHQpLGk9WXIodCxlKSx1PVJyKFVyKGUsdCwtaSkpfHwwO3RbMF0qZVsxXTxlWzBdKnRbMV0mJih0WzBdKj0tMSx0WzFdKj0tMSxyKj0tMSxpKj0tMSksdGhpcy5yb3RhdGU9KHI/TWF0aC5hdGFuMih0WzFdLHRbMF0pOk1hdGguYXRhbjIoLWVbMF0sZVsxXSkpKkthLHRoaXMudHJhbnNsYXRlPVtuLmUsbi5mXSx0aGlzLnNjYWxlPVtyLHVdLHRoaXMuc2tldz11P01hdGguYXRhbjIoaSx1KSpLYTowfWZ1bmN0aW9uIFlyKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV19ZnVuY3Rpb24gUnIobil7dmFyIHQ9TWF0aC5zcXJ0KFlyKG4sbikpO3JldHVybiB0JiYoblswXS89dCxuWzFdLz10KSx0fWZ1bmN0aW9uIFVyKG4sdCxlKXtyZXR1cm4gblswXSs9ZSp0WzBdLG5bMV0rPWUqdFsxXSxufWZ1bmN0aW9uIElyKG4sdCl7dmFyIGUscj1bXSxpPVtdLHU9eWEudHJhbnNmb3JtKG4pLGE9eWEudHJhbnNmb3JtKHQpLG89dS50cmFuc2xhdGUsYz1hLnRyYW5zbGF0ZSxsPXUucm90YXRlLHM9YS5yb3RhdGUsZj11LnNrZXcsaD1hLnNrZXcsZz11LnNjYWxlLHA9YS5zY2FsZTtyZXR1cm4gb1swXSE9Y1swXXx8b1sxXSE9Y1sxXT8oci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIiksaS5wdXNoKHtpOjEseDp5cihvWzBdLGNbMF0pfSx7aTozLHg6eXIob1sxXSxjWzFdKX0pKTpjWzBdfHxjWzFdP3IucHVzaCgidHJhbnNsYXRlKCIrYysiKSIpOnIucHVzaCgiIiksbCE9cz8obC1zPjE4MD9zKz0zNjA6cy1sPjE4MCYmKGwrPTM2MCksaS5wdXNoKHtpOnIucHVzaChyLnBvcCgpKyJyb3RhdGUoIixudWxsLCIpIiktMix4OnlyKGwscyl9KSk6cyYmci5wdXNoKHIucG9wKCkrInJvdGF0ZSgiK3MrIikiKSxmIT1oP2kucHVzaCh7aTpyLnB1c2goci5wb3AoKSsic2tld1goIixudWxsLCIpIiktMix4OnlyKGYsaCl9KTpoJiZyLnB1c2goci5wb3AoKSsic2tld1goIitoKyIpIiksZ1swXSE9cFswXXx8Z1sxXSE9cFsxXT8oZT1yLnB1c2goci5wb3AoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIiksaS5wdXNoKHtpOmUtNCx4OnlyKGdbMF0scFswXSl9LHtpOmUtMix4OnlyKGdbMV0scFsxXSl9KSk6KDEhPXBbMF18fDEhPXBbMV0pJiZyLnB1c2goci5wb3AoKSsic2NhbGUoIitwKyIpIiksZT1pLmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIHQsdT0tMTsrK3U8ZTspclsodD1pW3VdKS5pXT10Lngobik7cmV0dXJuIHIuam9pbigiIil9fWZ1bmN0aW9uIFZyKG4sdCl7cmV0dXJuIHQ9dC0obj0rbik/MS8odC1uKTowLGZ1bmN0aW9uKGUpe3JldHVybihlLW4pKnR9fWZ1bmN0aW9uIFhyKG4sdCl7cmV0dXJuIHQ9dC0obj0rbik/MS8odC1uKTowLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKGUtbikqdCkpfX1mdW5jdGlvbiBacihuKXtmb3IodmFyIHQ9bi5zb3VyY2UsZT1uLnRhcmdldCxyPSRyKHQsZSksaT1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsaS5wdXNoKHQpO2Zvcih2YXIgdT1pLmxlbmd0aDtlIT09cjspaS5zcGxpY2UodSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24gQnIobil7Zm9yKHZhciB0PVtdLGU9bi5wYXJlbnQ7bnVsbCE9ZTspdC5wdXNoKG4pLG49ZSxlPWUucGFyZW50O3JldHVybiB0LnB1c2gobiksdH1mdW5jdGlvbiAkcihuLHQpe2lmKG49PT10KXJldHVybiBuO2Zvcih2YXIgZT1CcihuKSxyPUJyKHQpLGk9ZS5wb3AoKSx1PXIucG9wKCksYT1udWxsO2k9PT11OylhPWksaT1lLnBvcCgpLHU9ci5wb3AoKTtyZXR1cm4gYX1mdW5jdGlvbiBXcihuKXtuLmZpeGVkfD0yfWZ1bmN0aW9uIEpyKG4pe24uZml4ZWQmPS03fWZ1bmN0aW9uIEdyKG4pe24uZml4ZWR8PTQsbi5weD1uLngsbi5weT1uLnl9ZnVuY3Rpb24gS3Iobil7bi5maXhlZCY9LTV9ZnVuY3Rpb24gUXIobix0LGUpe3ZhciByPTAsaT0wO2lmKG4uY2hhcmdlPTAsIW4ubGVhZilmb3IodmFyIHUsYT1uLm5vZGVzLG89YS5sZW5ndGgsYz0tMTsrK2M8bzspdT1hW2NdLG51bGwhPXUmJihRcih1LHQsZSksbi5jaGFyZ2UrPXUuY2hhcmdlLHIrPXUuY2hhcmdlKnUuY3gsaSs9dS5jaGFyZ2UqdS5jeSk7aWYobi5wb2ludCl7bi5sZWFmfHwobi5wb2ludC54Kz1NYXRoLnJhbmRvbSgpLS41LG4ucG9pbnQueSs9TWF0aC5yYW5kb20oKS0uNSk7dmFyIGw9dCplW24ucG9pbnQuaW5kZXhdO24uY2hhcmdlKz1uLnBvaW50Q2hhcmdlPWwscis9bCpuLnBvaW50LngsaSs9bCpuLnBvaW50Lnl9bi5jeD1yL24uY2hhcmdlLG4uY3k9aS9uLmNoYXJnZX1mdW5jdGlvbiBuaShuLHQpe3JldHVybiB5YS5yZWJpbmQobix0LCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLG4ubm9kZXM9bixuLmxpbmtzPWlpLG59ZnVuY3Rpb24gdGkobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gZWkobil7cmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gcmkobix0KXtyZXR1cm4gdC52YWx1ZS1uLnZhbHVlfWZ1bmN0aW9uIGlpKG4pe3JldHVybiB5YS5tZXJnZShuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi5jaGlsZHJlbnx8W10pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOm4sdGFyZ2V0OnR9fSl9KSl9ZnVuY3Rpb24gdWkobil7cmV0dXJuIG4ueH1mdW5jdGlvbiBhaShuKXtyZXR1cm4gbi55fWZ1bmN0aW9uIG9pKG4sdCxlKXtuLnkwPXQsbi55PWV9ZnVuY3Rpb24gY2kobil7cmV0dXJuIHlhLnJhbmdlKG4ubGVuZ3RoKX1mdW5jdGlvbiBsaShuKXtmb3IodmFyIHQ9LTEsZT1uWzBdLmxlbmd0aCxyPVtdOysrdDxlOylyW3RdPTA7cmV0dXJuIHJ9ZnVuY3Rpb24gc2kobil7Zm9yKHZhciB0LGU9MSxyPTAsaT1uWzBdWzFdLHU9bi5sZW5ndGg7dT5lOysrZSkodD1uW2VdWzFdKT5pJiYocj1lLGk9dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gZmkobil7cmV0dXJuIG4ucmVkdWNlKGhpLDApfWZ1bmN0aW9uIGhpKG4sdCl7cmV0dXJuIG4rdFsxXX1mdW5jdGlvbiBnaShuLHQpe3JldHVybiBwaShuLE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIHBpKG4sdCl7Zm9yKHZhciBlPS0xLHI9K25bMF0saT0oblsxXS1yKS90LHU9W107KytlPD10Oyl1W2VdPWkqZStyO3JldHVybiB1fWZ1bmN0aW9uIGRpKG4pe3JldHVyblt5YS5taW4obikseWEubWF4KG4pXX1mdW5jdGlvbiBtaShuLHQpe3JldHVybiBuLnBhcmVudD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIHZpKG4pe3ZhciB0PW4uY2hpbGRyZW47cmV0dXJuIHQmJnQubGVuZ3RoP3RbMF06bi5fdHJlZS50aHJlYWR9ZnVuY3Rpb24geWkobil7dmFyIHQsZT1uLmNoaWxkcmVuO3JldHVybiBlJiYodD1lLmxlbmd0aCk/ZVt0LTFdOm4uX3RyZWUudGhyZWFkfWZ1bmN0aW9uIE1pKG4sdCl7dmFyIGU9bi5jaGlsZHJlbjtpZihlJiYoaT1lLmxlbmd0aCkpZm9yKHZhciByLGksdT0tMTsrK3U8aTspdChyPU1pKGVbdV0sdCksbik+MCYmKG49cik7cmV0dXJuIG59ZnVuY3Rpb24geGkobix0KXtyZXR1cm4gbi54LXQueH1mdW5jdGlvbiBiaShuLHQpe3JldHVybiB0Lngtbi54fWZ1bmN0aW9uIF9pKG4sdCl7cmV0dXJuIG4uZGVwdGgtdC5kZXB0aH1mdW5jdGlvbiB3aShuLHQpe2Z1bmN0aW9uIGUobixyKXt2YXIgaT1uLmNoaWxkcmVuO2lmKGkmJihhPWkubGVuZ3RoKSlmb3IodmFyIHUsYSxvPW51bGwsYz0tMTsrK2M8YTspdT1pW2NdLGUodSxvKSxvPXU7dChuLHIpfWUobixudWxsKX1mdW5jdGlvbiBTaShuKXtmb3IodmFyIHQsZT0wLHI9MCxpPW4uY2hpbGRyZW4sdT1pLmxlbmd0aDstLXU+PTA7KXQ9aVt1XS5fdHJlZSx0LnByZWxpbSs9ZSx0Lm1vZCs9ZSxlKz10LnNoaWZ0KyhyKz10LmNoYW5nZSl9ZnVuY3Rpb24gRWkobix0LGUpe249bi5fdHJlZSx0PXQuX3RyZWU7dmFyIHI9ZS8odC5udW1iZXItbi5udW1iZXIpO24uY2hhbmdlKz1yLHQuY2hhbmdlLT1yLHQuc2hpZnQrPWUsdC5wcmVsaW0rPWUsdC5tb2QrPWV9ZnVuY3Rpb24ga2kobix0LGUpe3JldHVybiBuLl90cmVlLmFuY2VzdG9yLnBhcmVudD09dC5wYXJlbnQ/bi5fdHJlZS5hbmNlc3RvcjplfWZ1bmN0aW9uIEFpKG4sdCl7cmV0dXJuIG4udmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBOaShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBxaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1ufWZ1bmN0aW9uIFRpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1uLnksaT1uLnIrdC5yO3JldHVybi45OTkqaSppPmUqZStyKnJ9ZnVuY3Rpb24gQ2kobil7ZnVuY3Rpb24gdChuKXtzPU1hdGgubWluKG4ueC1uLnIscyksZj1NYXRoLm1heChuLngrbi5yLGYpLGg9TWF0aC5taW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4ueStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUscixpLHUsYSxvLGMsbCxzPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8wO2lmKGUuZm9yRWFjaCh6aSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQociksbD4xJiYoaT1lWzFdLGkueD1pLnIsaS55PTAsdChpKSxsPjIpKWZvcih1PWVbMl0sTGkocixpLHUpLHQodSksTmkocix1KSxyLl9wYWNrX3ByZXY9dSxOaSh1LGkpLGk9ci5fcGFja19uZXh0LGE9MztsPmE7YSsrKXtMaShyLGksdT1lW2FdKTt2YXIgcD0wLGQ9MSxtPTE7Zm9yKG89aS5fcGFja19uZXh0O28hPT1pO289by5fcGFja19uZXh0LGQrKylpZihUaShvLHUpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNrX3ByZXY7YyE9PW8uX3BhY2tfcHJldiYmIVRpKGMsdSk7Yz1jLl9wYWNrX3ByZXYsbSsrKTtwPyhtPmR8fGQ9PW0mJmkucjxyLnI/cWkocixpPW8pOnFpKHI9YyxpKSxhLS0pOihOaShyLHUpLGk9dSx0KHUpKX12YXIgdj0ocytmKS8yLHk9KGgrZykvMixNPTA7Zm9yKGE9MDtsPmE7YSsrKXU9ZVthXSx1LngtPXYsdS55LT15LE09TWF0aC5tYXgoTSx1LnIrTWF0aC5zcXJ0KHUueCp1LngrdS55KnUueSkpO24ucj1NLGUuZm9yRWFjaChEaSl9fWZ1bmN0aW9uIHppKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNrX3ByZXY9bn1mdW5jdGlvbiBEaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNrX3ByZXZ9ZnVuY3Rpb24gamkobix0LGUscil7dmFyIGk9bi5jaGlsZHJlbjtpZihuLng9dCs9cipuLngsbi55PWUrPXIqbi55LG4ucio9cixpKWZvcih2YXIgdT0tMSxhPWkubGVuZ3RoOysrdTxhOylqaShpW3VdLHQsZSxyKX1mdW5jdGlvbiBMaShuLHQsZSl7dmFyIHI9bi5yK2UucixpPXQueC1uLngsdT10Lnktbi55O2lmKHImJihpfHx1KSl7dmFyIGE9dC5yK2UucixvPWkqaSt1KnU7YSo9YSxyKj1yO3ZhciBjPS41KyhyLWEpLygyKm8pLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMiphKihyK28pLShyLT1vKSpyLWEqYSkpLygyKm8pO2UueD1uLngrYyppK2wqdSxlLnk9bi55K2MqdS1sKml9ZWxzZSBlLng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiBIaShuKXtyZXR1cm4gMSt5YS5tYXgobixmdW5jdGlvbihuKXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24gRmkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdC54fSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBQaShuKXt2YXIgdD1uLmNoaWxkcmVuO3JldHVybiB0JiZ0Lmxlbmd0aD9QaSh0WzBdKTpufWZ1bmN0aW9uIE9pKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP09pKGVbdC0xXSk6bn1mdW5jdGlvbiBZaShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpuLmR5fX1mdW5jdGlvbiBSaShuLHQpe3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0saT1uLmR4LXRbMV0tdFszXSx1PW4uZHktdFswXS10WzJdO3JldHVybiAwPmkmJihlKz1pLzIsaT0wKSwwPnUmJihyKz11LzIsdT0wKSx7eDplLHk6cixkeDppLGR5OnV9fWZ1bmN0aW9uIFVpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gSWkobil7cmV0dXJuIG4ucmFuZ2VFeHRlbnQ/bi5yYW5nZUV4dGVudCgpOlVpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gVmkobix0LGUscil7dmFyIGk9ZShuWzBdLG5bMV0pLHU9cih0WzBdLHRbMV0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdShpKG4pKX19ZnVuY3Rpb24gWGkobix0KXt2YXIgZSxyPTAsaT1uLmxlbmd0aC0xLHU9bltyXSxhPW5baV07cmV0dXJuIHU+YSYmKGU9cixyPWksaT1lLGU9dSx1PWEsYT1lKSxuW3JdPXQuZmxvb3IodSksbltpXT10LmNlaWwoYSksbn1mdW5jdGlvbiBaaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwodC9uKSpufX06eGN9ZnVuY3Rpb24gQmkobix0LGUscil7dmFyIGk9W10sdT1bXSxhPTAsbz1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCktMTtmb3IobltvXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KythPD1vOylpLnB1c2goZShuW2EtMV0sblthXSkpLHUucHVzaChyKHRbYS0xXSx0W2FdKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXlhLmJpc2VjdChuLHQsMSxvKS0xO3JldHVybiB1W2VdKGlbZV0odCkpfX1mdW5jdGlvbiAkaShuLHQsZSxyKXtmdW5jdGlvbiBpKCl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpPjI/Qmk6VmksYz1yP1hyOlZyO3JldHVybiBhPWkobix0LGMsZSksbz1pKHQsbixjLHhyKSx1fWZ1bmN0aW9uIHUobil7cmV0dXJuIGEobil9dmFyIGEsbztyZXR1cm4gdS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIG8obil9LHUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKE51bWJlciksaSgpKTpufSx1LnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4saSgpKTp0fSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIHUucmFuZ2UobikuaW50ZXJwb2xhdGUoUHIpfSx1LmNsYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4saSgpKTpyfSx1LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4saSgpKTplfSx1LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBRaShuLHQpfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnUobix0LGUpfSx1Lm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIEppKG4sdCksaSgpfSx1LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGkobix0LGUscil9LGkoKX1mdW5jdGlvbiBXaShuLHQpe3JldHVybiB5YS5yZWJpbmQobix0LCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gSmkobix0KXtyZXR1cm4gWGkobixaaSh0P0tpKG4sdClbMl06R2kobikpKX1mdW5jdGlvbiBHaShuKXt2YXIgdD1VaShuKSxlPXRbMV0tdFswXTtyZXR1cm4gTWF0aC5wb3coMTAsTWF0aC5yb3VuZChNYXRoLmxvZyhlKS9NYXRoLkxOMTApLTEpfWZ1bmN0aW9uIEtpKG4sdCl7dmFyIGU9VWkobikscj1lWzFdLWVbMF0saT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksdT10L3IqaTtyZXR1cm4uMTU+PXU/aSo9MTA6LjM1Pj11P2kqPTU6Ljc1Pj11JiYoaSo9MiksZVswXT1NYXRoLmNlaWwoZVswXS9pKSppLGVbMV09TWF0aC5mbG9vcihlWzFdL2kpKmkrLjUqaSxlWzJdPWksZX1mdW5jdGlvbiBRaShuLHQpe3JldHVybiB5YS5yYW5nZS5hcHBseSh5YSxLaShuLHQpKX1mdW5jdGlvbiBudShuLHQsZSl7dmFyIHI9LU1hdGguZmxvb3IoTWF0aC5sb2coS2kobix0KVsyXSkvTWF0aC5MTjEwKy4wMSk7cmV0dXJuIHlhLmZvcm1hdChlP2UucmVwbGFjZSh2byxmdW5jdGlvbihuLHQsZSxpLHUsYSxvLGMsbCxzKXtyZXR1cm5bdCxlLGksdSxhLG8sYyxsfHwiLiIrKHItMiooIiUiPT09cykpLHNdLmpvaW4oIiIpfSk6IiwuIityKyJmIil9ZnVuY3Rpb24gdHUobix0LGUscixpKXtmdW5jdGlvbiB1KHQpe3JldHVybiBuKGUodCkpfXJldHVybiB1LmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gcihuLmludmVydCh0KSl9LHUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0WzBdPDA/KGU9aXUscj11dSk6KGU9ZXUscj1ydSksbi5kb21haW4oKGk9dC5tYXAoTnVtYmVyKSkubWFwKGUpKSx1KTppfSx1LmJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K24sdSk6dH0sdS5uaWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gTWF0aC5wb3codCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGgubG9nKHQpKSl9ZnVuY3Rpb24gYShuKXtyZXR1cm4gTWF0aC5wb3codCxNYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5sb2codCkpKX1yZXR1cm4gbi5kb21haW4oWGkoaSxlPT09ZXU/e2Zsb29yOnIsY2VpbDphfTp7Zmxvb3I6ZnVuY3Rpb24obil7cmV0dXJuLWEoLW4pfSxjZWlsOmZ1bmN0aW9uKG4pe3JldHVybi1yKC1uKX19KS5tYXAoZSkpLHV9LHUudGlja3M9ZnVuY3Rpb24oKXt2YXIgaT1VaShuLmRvbWFpbigpKSx1PVtdO2lmKGkuZXZlcnkoaXNGaW5pdGUpKXt2YXIgYT1NYXRoLmxvZyh0KSxvPU1hdGguZmxvb3IoaVswXS9hKSxjPU1hdGguY2VpbChpWzFdL2EpLGw9cihpWzBdKSxzPXIoaVsxXSksZj10JTE/Mjp0O2lmKGU9PT1pdSlmb3IodS5wdXNoKC1NYXRoLnBvdyh0LC1vKSk7bysrPGM7KWZvcih2YXIgaD1mLTE7aD4wO2gtLSl1LnB1c2goLU1hdGgucG93KHQsLW8pKmgpO2Vsc2V7Zm9yKDtjPm87bysrKWZvcih2YXIgaD0xO2Y+aDtoKyspdS5wdXNoKE1hdGgucG93KHQsbykqaCk7dS5wdXNoKE1hdGgucG93KHQsbykpfWZvcihvPTA7dVtvXTxsO28rKyk7Zm9yKGM9dS5sZW5ndGg7dVtjLTFdPnM7Yy0tKTt1PXUuc2xpY2UobyxjKX1yZXR1cm4gdX0sdS50aWNrRm9ybWF0PWZ1bmN0aW9uKG4saSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGJjO2FyZ3VtZW50cy5sZW5ndGg8Mj9pPWJjOiJmdW5jdGlvbiIhPXR5cGVvZiBpJiYoaT15YS5mb3JtYXQoaSkpO3ZhciBhLG89TWF0aC5sb2codCksYz1NYXRoLm1heCguMSxuL3UudGlja3MoKS5sZW5ndGgpLGw9ZT09PWl1PyhhPS0xZS0xMixNYXRoLmZsb29yKTooYT0xZS0xMixNYXRoLmNlaWwpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi9yKG8qbChlKG4pL28rYSkpPD1jP2kobik6IiJ9fSx1LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdHUobi5jb3B5KCksdCxlLHIsaSl9LFdpKHUsbil9ZnVuY3Rpb24gZXUobil7cmV0dXJuIE1hdGgubG9nKDA+bj8wOm4pfWZ1bmN0aW9uIHJ1KG4pe3JldHVybiBNYXRoLmV4cChuKX1mdW5jdGlvbiBpdShuKXtyZXR1cm4tTWF0aC5sb2cobj4wPzA6LW4pfWZ1bmN0aW9uIHV1KG4pe3JldHVybi1NYXRoLmV4cCgtbil9ZnVuY3Rpb24gYXUobix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG4oaSh0KSl9dmFyIGk9b3UodCksdT1vdSgxL3QpO3JldHVybiByLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdShuLmludmVydCh0KSl9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRvbWFpbigoZT10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLHIpOmV9LHIudGlja3M9ZnVuY3Rpb24obil7cmV0dXJuIFFpKGUsbil9LHIudGlja0Zvcm1hdD1mdW5jdGlvbihuLHQpe3JldHVybiBudShlLG4sdCl9LHIubmljZT1mdW5jdGlvbihuKXtyZXR1cm4gci5kb21haW4oSmkoZSxuKSl9LHIuZXhwb25lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9b3UodD1hKSx1PW91KDEvdCksbi5kb21haW4oZS5tYXAoaSkpLHIpOnR9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBhdShuLmNvcHkoKSx0LGUpfSxXaShyLG4pfWZ1bmN0aW9uIG91KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD50Py1NYXRoLnBvdygtdCxuKTpNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBjdShuLHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuIGFbKCh1LmdldCh0KXx8dS5zZXQodCxuLnB1c2godCkpKS0xKSVhLmxlbmd0aF19ZnVuY3Rpb24gcih0LGUpe3JldHVybiB5YS5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1LGEsbztyZXR1cm4gZS5kb21haW49ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSx1PW5ldyBpO2Zvcih2YXIgYSxvPS0xLGM9ci5sZW5ndGg7KytvPGM7KXUuaGFzKGE9cltvXSl8fHUuc2V0KGEsbi5wdXNoKGEpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5hKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1uLG89MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOmF9LGUucmFuZ2VQb2ludHM9ZnVuY3Rpb24oaSx1KXthcmd1bWVudHMubGVuZ3RoPDImJih1PTApO3ZhciBjPWlbMF0sbD1pWzFdLHM9KGwtYykvKE1hdGgubWF4KDEsbi5sZW5ndGgtMSkrdSk7cmV0dXJuIGE9cihuLmxlbmd0aDwyPyhjK2wpLzI6YytzKnUvMixzKSxvPTAsdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZHM9ZnVuY3Rpb24oaSx1LGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYz11KTt2YXIgbD1pWzFdPGlbMF0scz1pW2wtMF0sZj1pWzEtbF0saD0oZi1zKS8obi5sZW5ndGgtdSsyKmMpO3JldHVybiBhPXIocytoKmMsaCksbCYmYS5yZXZlcnNlKCksbz1oKigxLXUpLHQ9e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbihpLHUsYyl7YXJndW1lbnRzLmxlbmd0aDwyJiYodT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihjPXUpO3ZhciBsPWlbMV08aVswXSxzPWlbbC0wXSxmPWlbMS1sXSxoPU1hdGguZmxvb3IoKGYtcykvKG4ubGVuZ3RoLXUrMipjKSksZz1mLXMtKG4ubGVuZ3RoLXUpKmg7cmV0dXJuIGE9cihzK01hdGgucm91bmQoZy8yKSxoKSxsJiZhLnJldmVyc2UoKSxvPU1hdGgucm91bmQoaCooMS11KSksdD17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gb30sZS5yYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBVaSh0LmFbMF0pfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY3Uobix0KX0sZS5kb21haW4obil9ZnVuY3Rpb24gbHUobix0KXtmdW5jdGlvbiBlKCl7dmFyIGU9MCx1PXQubGVuZ3RoO2ZvcihpPVtdOysrZTx1OylpW2UtMV09eWEucXVhbnRpbGUobixlL3UpO3JldHVybiByfWZ1bmN0aW9uIHIobil7cmV0dXJuIGlzTmFOKG49K24pP3ZvaWQgMDp0W3lhLmJpc2VjdChpLG4pXX12YXIgaTtyZXR1cm4gci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIWlzTmFOKG4pfSkuc29ydCh5YS5hc2NlbmRpbmcpLGUoKSk6bn0sci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGUoKSk6dH0sci5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGx1KG4sdCl9LGUoKX1mdW5jdGlvbiBzdShuLHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKGEsTWF0aC5mbG9vcih1Kih0LW4pKSkpXX1mdW5jdGlvbiBpKCl7cmV0dXJuIHU9ZS5sZW5ndGgvKHQtbiksYT1lLmxlbmd0aC0xLHJ9dmFyIHUsYTtyZXR1cm4gci5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2VbMF0sdD0rZVtlLmxlbmd0aC0xXSxpKCkpOltuLHRdfSxyLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4saSgpKTplfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gc3Uobix0LGUpfSxyLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdD1lLmluZGV4T2YodCksdD0wPnQ/MC8wOnQvdStuLFt0LHQrMS91XX0saSgpfWZ1bmN0aW9uIGZ1KG4sdCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZT49ZT90W3lhLmJpc2VjdChuLGUpXTp2b2lkIDB9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGUpOnR9LGUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuaW5kZXhPZihlKSxbbltlLTFdLG5bZV1dfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZnUobix0KX0sZX1mdW5jdGlvbiBodShuKXtmdW5jdGlvbiB0KG4pe3JldHVybitufXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZS5tYXAodCksdCk6bn0sdC50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gUWkobix0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51KG4sdCxlKX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGh1KG4pfSx0fWZ1bmN0aW9uIGd1KG4pe3JldHVybiBuLmlubmVyUmFkaXVzfWZ1bmN0aW9uIHB1KG4pe3JldHVybiBuLm91dGVyUmFkaXVzfWZ1bmN0aW9uIGR1KG4pe3JldHVybiBuLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gbXUobil7cmV0dXJuIG4uZW5kQW5nbGV9ZnVuY3Rpb24gdnUobil7Zm9yKHZhciB0LGUscixpPS0xLHU9bi5sZW5ndGg7KytpPHU7KXQ9bltpXSxlPXRbMF0scj10WzFdK2tjLHRbMF09ZSpNYXRoLmNvcyhyKSx0WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJuIG59ZnVuY3Rpb24geXUobil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBjKCl7ZC5wdXNoKCJNIixvKG4odiksZikscyxsKG4obS5yZXZlcnNlKCkpLGYpLCJaIil9Zm9yKHZhciBoLGcscCxkPVtdLG09W10sdj1bXSx5PS0xLE09dC5sZW5ndGgseD1mdChlKSxiPWZ0KGkpLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306ZnQociksdz1pPT09dT9mdW5jdGlvbigpe3JldHVybiBwfTpmdCh1KTsrK3k8TTspYS5jYWxsKHRoaXMsaD10W3ldLHkpPyhtLnB1c2goW2c9K3guY2FsbCh0aGlzLGgseSkscD0rYi5jYWxsKHRoaXMsaCx5KV0pLHYucHVzaChbK18uY2FsbCh0aGlzLGgseSksK3cuY2FsbCh0aGlzLGgseSldKSk6bS5sZW5ndGgmJihjKCksbT1bXSx2PVtdKTtyZXR1cm4gbS5sZW5ndGgmJmMoKSxkLmxlbmd0aD9kLmpvaW4oIiIpOm51bGx9dmFyIGU9T2Uscj1PZSxpPTAsdT1ZZSxhPVJ0LG89UmUsYz1vLmtleSxsPW8scz0iTCIsZj0uNztyZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXI9bix0KTpyfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT11PW4sdCk6dX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLHQpOml9LHQueTE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bix0KTp1fSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bix0KTphfSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBuP289bjoobz1pYy5nZXQobil8fFJlKS5rZXksbD1vLnJldmVyc2V8fG8scz1vLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9ZnVuY3Rpb24gTXUobil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIHh1KG4pe3JldHVybltuLngsbi55XX1mdW5jdGlvbiBidShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRbMF0scj10WzFdK2tjO3JldHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfX1mdW5jdGlvbiBfdSgpe3JldHVybiA2NH1mdW5jdGlvbiB3dSgpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFN1KG4pe3ZhciB0PU1hdGguc3FydChuLyRhKTtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3QrIloifWZ1bmN0aW9uIEV1KG4sdCl7cmV0dXJuIHphKG4semMpLG4uaWQ9dCxufWZ1bmN0aW9uIGt1KG4sdCxlLHIpe3ZhciBpPW4uaWQ7cmV0dXJuIFQobiwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLHUsYSl7bi5fX3RyYW5zaXRpb25fX1tpXS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18sdSxhKSkpfTooZT1yKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19baV0udHdlZW4uc2V0KHQsZSl9KSl9ZnVuY3Rpb24gQXUobil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gTnUobix0LGUscil7dmFyIHU9bi5fX3RyYW5zaXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2ZTowLGNvdW50OjB9KSxhPXVbZV07aWYoIWEpe3ZhciBvPXIudGltZTtyZXR1cm4gYT11W2VdPXt0d2VlbjpuZXcgaSxldmVudDp5YS5kaXNwYXRjaCgic3RhcnQiLCJlbmQiKSx0aW1lOm8sZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheSxkdXJhdGlvbjpyLmR1cmF0aW9ufSwrK3UuY291bnQseWEudGltZXIoZnVuY3Rpb24ocil7ZnVuY3Rpb24gaShyKXtyZXR1cm4gdS5hY3RpdmU+ZT9sKCk6KHUuYWN0aXZlPWUsaC5zdGFydC5jYWxsKG4scyx0KSxhLnR3ZWVuLmZvckVhY2goZnVuY3Rpb24oZSxyKXsocj1yLmNhbGwobixzLHQpKSYmZC5wdXNoKHIpfSksYyhyKXx8eWEudGltZXIoYywwLG8pLDEpfWZ1bmN0aW9uIGMocil7aWYodS5hY3RpdmUhPT1lKXJldHVybiBsKCk7Zm9yKHZhciBpPShyLWcpL3AsYT1mKGkpLG89ZC5sZW5ndGg7bz4wOylkWy0tb10uY2FsbChuLGEpO3JldHVybiBpPj0xPyhsKCksaC5lbmQuY2FsbChuLHMsdCksMSk6dm9pZCAwfWZ1bmN0aW9uIGwoKXtyZXR1cm4tLXUuY291bnQ/ZGVsZXRlIHVbZV06ZGVsZXRlIG4uX190cmFuc2l0aW9uX18sMX12YXIgcz1uLl9fZGF0YV9fLGY9YS5lYXNlLGg9YS5ldmVudCxnPWEuZGVsYXkscD1hLmR1cmF0aW9uLGQ9W107cmV0dXJuIHI+PWc/aShyKTp5YS50aW1lcihpLGcsbyksMX0sMCxvKSxhfX1mdW5jdGlvbiBxdShuLHQpe24uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKCIrdChuKSsiLDApIn0pfWZ1bmN0aW9uIFR1KG4sdCl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKG4pe3JldHVybiJ0cmFuc2xhdGUoMCwiK3QobikrIikifSl9ZnVuY3Rpb24gQ3Uobix0LGUpe2lmKHI9W10sZSYmdC5sZW5ndGg+MSl7Zm9yKHZhciByLGksdSxhPVVpKG4uZG9tYWluKCkpLG89LTEsYz10Lmxlbmd0aCxsPSh0WzFdLXRbMF0pLysrZTsrK288YzspZm9yKGk9ZTstLWk+MDspKHU9K3Rbb10taSpsKT49YVswXSYmci5wdXNoKHUpO2ZvcigtLW8saT0wOysraTxlJiYodT0rdFtvXStpKmwpPGFbMV07KXIucHVzaCh1KX1yZXR1cm4gcn1mdW5jdGlvbiB6dSgpe3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9ZnVuY3Rpb24gRHUobix0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9bih0KSxyPXUoZSwxKTtyZXR1cm4gci10PnQtZT9lOnJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gdChlPW4obmV3IE9jKGUtMSkpLDEpLGV9ZnVuY3Rpb24gdShuLGUpe3JldHVybiB0KG49bmV3IE9jKCtuKSxlKSxufWZ1bmN0aW9uIGEobixyLHUpe3ZhciBhPWkobiksbz1bXTtpZih1PjEpZm9yKDtyPmE7KWUoYSkldXx8by5wdXNoKG5ldyBEYXRlKCthKSksdChhLDEpO2Vsc2UgZm9yKDtyPmE7KW8ucHVzaChuZXcgRGF0ZSgrYSkpLHQoYSwxKTtyZXR1cm4gb31mdW5jdGlvbiBvKG4sdCxlKXt0cnl7T2M9enU7dmFyIHI9bmV3IHp1O3JldHVybiByLl89bixhKHIsdCxlKX1maW5hbGx5e09jPURhdGV9fW4uZmxvb3I9bixuLnJvdW5kPXIsbi5jZWlsPWksbi5vZmZzZXQ9dSxuLnJhbmdlPWE7dmFyIGM9bi51dGM9anUobik7cmV0dXJuIGMuZmxvb3I9YyxjLnJvdW5kPWp1KHIpLGMuY2VpbD1qdShpKSxjLm9mZnNldD1qdSh1KSxjLnJhbmdlPW8sbn1mdW5jdGlvbiBqdShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt0cnl7T2M9enU7dmFyIHI9bmV3IHp1O3JldHVybiByLl89dCxuKHIsZSkuX31maW5hbGx5e09jPURhdGV9fX1mdW5jdGlvbiBMdShuLHQsZSxyKXtmb3IodmFyIGksdSxhPTAsbz10Lmxlbmd0aCxjPWUubGVuZ3RoO28+YTspe2lmKHI+PWMpcmV0dXJuLTE7aWYoaT10LmNoYXJDb2RlQXQoYSsrKSwzNz09PWkpe2lmKHU9YWxbdC5jaGFyQXQoYSsrKV0sIXV8fChyPXUobixlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9ZnVuY3Rpb24gSHUobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKHlhLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBGdShuKXtmb3IodmFyIHQ9bmV3IGksZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnNldChuW2VdLnRvTG93ZXJDYXNlKCksZSk7cmV0dXJuIHR9ZnVuY3Rpb24gUHUobix0LGUpe3ZhciByPTA+bj8iLSI6IiIsaT0ocj8tbjpuKSsiIix1PWkubGVuZ3RoO3JldHVybiByKyhlPnU/bmV3IEFycmF5KGUtdSsxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gT3Uobix0LGUpe0djLmxhc3RJbmRleD0wO3ZhciByPUdjLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLnc9S2MuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWXUobix0LGUpe1djLmxhc3RJbmRleD0wO3ZhciByPVdjLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLnc9SmMuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUnUobix0LGUpe29sLmxhc3RJbmRleD0wO3ZhciByPW9sLmV4ZWModC5zdWJzdHJpbmcoZSxlKzEpKTtyZXR1cm4gcj8obi53PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFV1KG4sdCxlKXtvbC5sYXN0SW5kZXg9MDt2YXIgcj1vbC5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEl1KG4sdCxlKXtvbC5sYXN0SW5kZXg9MDt2YXIgcj1vbC5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ1KG4sdCxlKXt0bC5sYXN0SW5kZXg9MDt2YXIgcj10bC5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5tPWVsLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFh1KG4sdCxlKXtRYy5sYXN0SW5kZXg9MDt2YXIgcj1RYy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5tPW5sLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFp1KG4sdCxlKXtyZXR1cm4gTHUobix1bC5jLnRvU3RyaW5nKCksdCxlKX1mdW5jdGlvbiBCdShuLHQsZSl7cmV0dXJuIEx1KG4sdWwueC50b1N0cmluZygpLHQsZSl9ZnVuY3Rpb24gJHUobix0LGUpe3JldHVybiBMdShuLHVsLlgudG9TdHJpbmcoKSx0LGUpfWZ1bmN0aW9uIFd1KG4sdCxlKXtvbC5sYXN0SW5kZXg9MDt2YXIgcj1vbC5leGVjKHQuc3Vic3RyaW5nKGUsZSs0KSk7cmV0dXJuIHI/KG4ueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKdShuLHQsZSl7b2wubGFzdEluZGV4PTA7dmFyIHI9b2wuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLnk9R3UoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEd1KG4pe3JldHVybiBuKyhuPjY4PzE5MDA6MmUzKX1mdW5jdGlvbiBLdShuLHQsZSl7b2wubGFzdEluZGV4PTA7dmFyIHI9b2wuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF1KG4sdCxlKXtvbC5sYXN0SW5kZXg9MDt2YXIgcj1vbC5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7cmV0dXJuIHI/KG4uZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuYShuLHQsZSl7b2wubGFzdEluZGV4PTA7dmFyIHI9b2wuZXhlYyh0LnN1YnN0cmluZyhlLGUrMykpO3JldHVybiByPyhuLmo9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdGEobix0LGUpe29sLmxhc3RJbmRleD0wO3ZhciByPW9sLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVhKG4sdCxlKXtvbC5sYXN0SW5kZXg9MDt2YXIgcj1vbC5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7cmV0dXJuIHI/KG4uTT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiByYShuLHQsZSl7b2wubGFzdEluZGV4PTA7dmFyIHI9b2wuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWEobix0LGUpe29sLmxhc3RJbmRleD0wO3ZhciByPW9sLmV4ZWModC5zdWJzdHJpbmcoZSxlKzMpKTtyZXR1cm4gcj8obi5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVhKG4sdCxlKXt2YXIgcj1jbC5nZXQodC5zdWJzdHJpbmcoZSxlKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09cj8tMToobi5wPXIsZSl9ZnVuY3Rpb24gYWEobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpLGU9dD4wPyItIjoiKyIscj1+fihNYXRoLmFicyh0KS82MCksaT1NYXRoLmFicyh0KSU2MDtyZXR1cm4gZStQdShyLCIwIiwyKStQdShpLCIwIiwyKX1mdW5jdGlvbiBvYShuLHQsZSl7cmwubGFzdEluZGV4PTA7dmFyIHI9cmwuZXhlYyh0LnN1YnN0cmluZyhlLGUrMSkpO3JldHVybiByP2UrclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gY2Eobil7cmV0dXJuIG4udG9JU09TdHJpbmcoKX1mdW5jdGlvbiBsYShuLHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbih0KX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHNhKG4uaW52ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4uZG9tYWluKHQpLHIpOm4uZG9tYWluKCkubWFwKHNhKX0sci5uaWNlPWZ1bmN0aW9uKG4pe3JldHVybiByLmRvbWFpbihYaShyLmRvbWFpbigpLG4pKX0sci50aWNrcz1mdW5jdGlvbihlLGkpe3ZhciB1PVVpKHIuZG9tYWluKCkpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXt2YXIgYT11WzFdLXVbMF0sbz1hL2UsYz15YS5iaXNlY3Qoc2wsbyk7aWYoYz09c2wubGVuZ3RoKXJldHVybiB0LnllYXIodSxlKTtpZighYylyZXR1cm4gbi50aWNrcyhlKS5tYXAoc2EpO01hdGgubG9nKG8vc2xbYy0xXSk8TWF0aC5sb2coc2xbY10vbykmJi0tYyxlPXRbY10saT1lWzFdLGU9ZVswXS5yYW5nZX1yZXR1cm4gZSh1WzBdLG5ldyBEYXRlKCt1WzFdKzEpLGkpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGxhKG4uY29weSgpLHQsZSl9LFdpKHIsbil9ZnVuY3Rpb24gc2Eobil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIGZhKG4pe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9bi5sZW5ndGgtMSxyPW5bZV07IXJbMV0odCk7KXI9blstLWVdO3JldHVybiByWzBdKHQpfX1mdW5jdGlvbiBoYShuKXt2YXIgdD1uZXcgRGF0ZShuLDAsMSk7cmV0dXJuIHQuc2V0RnVsbFllYXIobiksdH1mdW5jdGlvbiBnYShuKXt2YXIgdD1uLmdldEZ1bGxZZWFyKCksZT1oYSh0KSxyPWhhKHQrMSk7cmV0dXJuIHQrKG4tZSkvKHItZSl9ZnVuY3Rpb24gcGEobil7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMobiwwLDEpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuKSx0fWZ1bmN0aW9uIGRhKG4pe3ZhciB0PW4uZ2V0VVRDRnVsbFllYXIoKSxlPXBhKHQpLHI9cGEodCsxKTtyZXR1cm4gdCsobi1lKS8oci1lKX1mdW5jdGlvbiBtYShuKXtyZXR1cm4gSlNPTi5wYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gdmEobil7dmFyIHQ9TWEuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3ROb2RlKE1hLmJvZHkpLHQuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG4ucmVzcG9uc2VUZXh0KX12YXIgeWE9e3ZlcnNpb246IjMuMi4zIn07RGF0ZS5ub3d8fChEYXRlLm5vdz1mdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0pO3ZhciBNYT1kb2N1bWVudCx4YT1NYS5kb2N1bWVudEVsZW1lbnQsYmE9d2luZG93O3RyeXtNYS5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9Y2F0Y2goX2Epe3ZhciB3YT1iYS5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxTYT13YS5zZXRQcm9wZXJ0eTt3YS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihuLHQsZSl7U2EuY2FsbCh0aGlzLG4sdCsiIixlKX19eWEuYXNjZW5kaW5nPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ+bj8tMTpuPnQ/MTpuPj10PzA6MC8wfSx5YS5kZXNjZW5kaW5nPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4+dD8tMTp0Pm4/MTp0Pj1uPzA6MC8wfSx5YS5taW49ZnVuY3Rpb24obix0KXt2YXIgZSxyLGk9LTEsdT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8dSYmIShudWxsIT0oZT1uW2ldKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7KytpPHU7KW51bGwhPShyPW5baV0pJiZlPnImJihlPXIpfWVsc2V7Zm9yKDsrK2k8dSYmIShudWxsIT0oZT10LmNhbGwobixuW2ldLGkpKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7KytpPHU7KW51bGwhPShyPXQuY2FsbChuLG5baV0saSkpJiZlPnImJihlPXIpfXJldHVybiBlfSx5YS5tYXg9ZnVuY3Rpb24obix0KXt2YXIgZSxyLGk9LTEsdT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8dSYmIShudWxsIT0oZT1uW2ldKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7KytpPHU7KW51bGwhPShyPW5baV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK2k8dSYmIShudWxsIT0oZT10LmNhbGwobixuW2ldLGkpKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7KytpPHU7KW51bGwhPShyPXQuY2FsbChuLG5baV0saSkpJiZyPmUmJihlPXIpfXJldHVybiBlfSx5YS5leHRlbnQ9ZnVuY3Rpb24obix0KXt2YXIgZSxyLGksdT0tMSxhPW4ubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrdTxhJiYhKG51bGwhPShlPWk9blt1XSkmJmU+PWUpOyllPWk9dm9pZCAwO2Zvcig7Kyt1PGE7KW51bGwhPShyPW5bdV0pJiYoZT5yJiYoZT1yKSxyPmkmJihpPXIpKX1lbHNle2Zvcig7Kyt1PGEmJiEobnVsbCE9KGU9aT10LmNhbGwobixuW3VdLHUpKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7Kyt1PGE7KW51bGwhPShyPXQuY2FsbChuLG5bdV0sdSkpJiYoZT5yJiYoZT1yKSxyPmkmJihpPXIpKX1yZXR1cm5bZSxpXX0seWEuc3VtPWZ1bmN0aW9uKG4sdCl7dmFyIGUscj0wLGk9bi5sZW5ndGgsdT0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrdTxpOylpc05hTihlPStuW3VdKXx8KHIrPWUpO2Vsc2UgZm9yKDsrK3U8aTspaXNOYU4oZT0rdC5jYWxsKG4sblt1XSx1KSl8fChyKz1lKTtyZXR1cm4gcn0seWEubWVhbj1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5sZW5ndGgsdT0wLGE9LTEsbz0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KW4ocj10W2FdKSYmKHUrPShyLXUpLysrbyk7ZWxzZSBmb3IoOysrYTxpOyluKHI9ZS5jYWxsKHQsdFthXSxhKSkmJih1Kz0oci11KS8rK28pO3JldHVybiBvP3U6dm9pZCAwfSx5YS5xdWFudGlsZT1mdW5jdGlvbihuLHQpe3ZhciBlPShuLmxlbmd0aC0xKSp0KzEscj1NYXRoLmZsb29yKGUpLGk9K25bci0xXSx1PWUtcjtyZXR1cm4gdT9pK3UqKG5bcl0taSk6aX0seWEubWVkaWFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9dC5tYXAoZSkpLHQ9dC5maWx0ZXIobiksdC5sZW5ndGg/eWEucXVhbnRpbGUodC5zb3J0KHlhLmFzY2VuZGluZyksLjUpOnZvaWQgMH0seWEuYmlzZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJue2xlZnQ6ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT10Lmxlbmd0aCk7aT5yOyl7dmFyIHU9citpPj4+MTtuLmNhbGwodCx0W3VdLHUpPGU/cj11KzE6aT11fXJldHVybiByfSxyaWdodDpmdW5jdGlvbih0LGUscixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPXQubGVuZ3RoKTtpPnI7KXt2YXIgdT1yK2k+Pj4xO2U8bi5jYWxsKHQsdFt1XSx1KT9pPXU6cj11KzF9cmV0dXJuIHJ9fX07dmFyIEVhPXlhLmJpc2VjdG9yKGZ1bmN0aW9uKG4pe3JldHVybiBufSk7eWEuYmlzZWN0TGVmdD1FYS5sZWZ0LHlhLmJpc2VjdD15YS5iaXNlY3RSaWdodD1FYS5yaWdodCx5YS5zaHVmZmxlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHI9bi5sZW5ndGg7cjspZT0wfE1hdGgucmFuZG9tKCkqci0tLHQ9bltyXSxuW3JdPW5bZV0sbltlXT10O3JldHVybiBufSx5YS5wZXJtdXRlPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPVtdLHI9LTEsaT10Lmxlbmd0aDsrK3I8aTspZVtyXT1uW3Rbcl1dO3JldHVybiBlfSx5YS56aXA9ZnVuY3Rpb24oKXtpZighKGk9YXJndW1lbnRzLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLGU9eWEubWluKGFyZ3VtZW50cyx0KSxyPW5ldyBBcnJheShlKTsrK248ZTspZm9yKHZhciBpLHU9LTEsYT1yW25dPW5ldyBBcnJheShpKTsrK3U8aTspYVt1XT1hcmd1bWVudHNbdV1bbl07cmV0dXJuIHJ9LHlhLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtyZXR1cm4geWEuemlwLmFwcGx5KHlhLG4pfSx5YS5rZXlzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChlKTtyZXR1cm4gdH0seWEudmFsdWVzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChuW2VdKTtyZXR1cm4gdH0seWEuZW50cmllcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH0seWEubWVyZ2U9ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sbil9LHlhLnJhbmdlPWZ1bmN0aW9uKG4sdCxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uLG49MCkpLDEvMD09PSh0LW4pL3IpdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5nZSIpO3ZhciBpLHU9W10sYT1lKE1hdGguYWJzKHIpKSxvPS0xO2lmKG4qPWEsdCo9YSxyKj1hLDA+cilmb3IoOyhpPW4rciorK28pPnQ7KXUucHVzaChpL2EpO2Vsc2UgZm9yKDsoaT1uK3IqKytvKTx0Oyl1LnB1c2goaS9hKTtyZXR1cm4gdX0seWEubWFwPWZ1bmN0aW9uKG4pe3ZhciB0PW5ldyBpO2Zvcih2YXIgZSBpbiBuKXQuc2V0KGUsbltlXSk7cmV0dXJuIHR9LHIoaSx7aGFzOmZ1bmN0aW9uKG4pe3JldHVybiBrYStuIGluIHRoaXN9LGdldDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpc1trYStuXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXNba2Erbl09dH0scmVtb3ZlOmZ1bmN0aW9uKG4pe3JldHVybiBuPWthK24sbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCl7bi5wdXNoKHQpfSksbn0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChlKX0pLG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKHtrZXk6dCx2YWx1ZTplfSl9KSxufSxmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PUFhJiZuLmNhbGwodGhpcyx0LnN1YnN0cmluZygxKSx0aGlzW3RdKX19KTt2YXIga2E9IlwwIixBYT1rYS5jaGFyQ29kZUF0KDApO3lhLm5lc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQsbyxjKXtpZihjPj1hLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwodSxvKTplP28uc29ydChlKTpvO2Zvcih2YXIgbCxzLGYsaCxnPS0xLHA9by5sZW5ndGgsZD1hW2MrK10sbT1uZXcgaTsrK2c8cDspKGg9bS5nZXQobD1kKHM9b1tnXSkpKT9oLnB1c2gocyk6bS5zZXQobCxbc10pO3JldHVybiB0PyhzPXQoKSxmPWZ1bmN0aW9uKGUscil7cy5zZXQoZSxuKHQscixjKSkKfSk6KHM9e30sZj1mdW5jdGlvbihlLHIpe3NbZV09bih0LHIsYyl9KSxtLmZvckVhY2goZiksc31mdW5jdGlvbiB0KG4sZSl7aWYoZT49YS5sZW5ndGgpcmV0dXJuIG47dmFyIHI9W10saT1vW2UrK107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLGkpe3IucHVzaCh7a2V5Om4sdmFsdWVzOnQoaSxlKX0pfSksaT9yLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gaShuLmtleSx0LmtleSl9KTpyfXZhciBlLHIsdT17fSxhPVtdLG89W107cmV0dXJuIHUubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSx0LDApfSx1LmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobih5YS5tYXAsZSwwKSwwKX0sdS5rZXk9ZnVuY3Rpb24obil7cmV0dXJuIGEucHVzaChuKSx1fSx1LnNvcnRLZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBvW2EubGVuZ3RoLTFdPW4sdX0sdS5zb3J0VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBlPW4sdX0sdS5yb2xsdXA9ZnVuY3Rpb24obil7cmV0dXJuIHI9bix1fSx1fSx5YS5zZXQ9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IHU7aWYobilmb3IodmFyIGU9MDtlPG4ubGVuZ3RoO2UrKyl0LmFkZChuW2VdKTtyZXR1cm4gdH0scih1LHtoYXM6ZnVuY3Rpb24obil7cmV0dXJuIGthK24gaW4gdGhpc30sYWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW2thK25dPSEwLG59LHJlbW92ZTpmdW5jdGlvbihuKXtyZXR1cm4gbj1rYStuLG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCl7bi5wdXNoKHQpfSksbn0sZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9PT1BYSYmbi5jYWxsKHRoaXMsdC5zdWJzdHJpbmcoMSkpfX0pLHlhLmJlaGF2aW9yPXt9LHlhLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZSxyPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrcjxpOyluW2U9YXJndW1lbnRzW3JdXT1hKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIE5hPVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdLHFhPWw7dHJ5e3FhKHhhLmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKFRhKXtxYT1jfXlhLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBmLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3VtZW50c1t0XV09aChuKTtyZXR1cm4gbn0sZi5wcm90b3R5cGUub249ZnVuY3Rpb24obix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc3Vic3RyaW5nKGUrMSksbj1uLnN1YnN0cmluZygwLGUpKSxuKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1tuXS5vbihyKTp0aGlzW25dLm9uKHIsdCk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PXQpZm9yKG4gaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KG4pJiZ0aGlzW25dLm9uKHIsbnVsbCk7cmV0dXJuIHRoaXN9fSx5YS5ldmVudD1udWxsLHlhLnJlcXVvdGU9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShDYSwiXFwkJiIpfTt2YXIgQ2E9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLHphPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbihuLHQpe24uX19wcm90b19fPXR9OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdfSxEYT1mdW5jdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3Iobil9LGphPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChuKX0sTGE9eGFbbyh4YSwibWF0Y2hlc1NlbGVjdG9yIildLEhhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIExhLmNhbGwobix0KX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKERhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFNpenpsZShuLHQpWzBdfHxudWxsfSxqYT1mdW5jdGlvbihuLHQpe3JldHVybiBTaXp6bGUudW5pcXVlU29ydChTaXp6bGUobix0KSl9LEhhPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLHlhLnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBZYX07dmFyIEZhPXlhLnNlbGVjdGlvbi5wcm90b3R5cGU9W107RmEuc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscixpLHU9W107bj12KG4pO2Zvcih2YXIgYT0tMSxvPXRoaXMubGVuZ3RoOysrYTxvOyl7dS5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSxsPXIubGVuZ3RoOysrYzxsOykoaT1yW2NdKT8odC5wdXNoKGU9bi5jYWxsKGksaS5fX2RhdGFfXyxjKSksZSYmIl9fZGF0YV9fImluIGkmJihlLl9fZGF0YV9fPWkuX19kYXRhX18pKTp0LnB1c2gobnVsbCl9cmV0dXJuIG0odSl9LEZhLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdCxlLHI9W107bj15KG4pO2Zvcih2YXIgaT0tMSx1PXRoaXMubGVuZ3RoOysraTx1Oylmb3IodmFyIGE9dGhpc1tpXSxvPS0xLGM9YS5sZW5ndGg7KytvPGM7KShlPWFbb10pJiYoci5wdXNoKHQ9cWEobi5jYWxsKGUsZS5fX2RhdGFfXyxvKSkpLHQucGFyZW50Tm9kZT1lKTtyZXR1cm4gbShyKX07dmFyIFBhPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTt5YS5ucz17cHJlZml4OlBhLHF1YWxpZnk6ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCI6IiksZT1uO3JldHVybiB0Pj0wJiYoZT1uLnN1YnN0cmluZygwLHQpLG49bi5zdWJzdHJpbmcodCsxKSksUGEuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOlBhW2VdLGxvY2FsOm59Om59fSxGYS5hdHRyPWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBlPXRoaXMubm9kZSgpO3JldHVybiBuPXlhLm5zLnF1YWxpZnkobiksbi5sb2NhbD9lLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ZS5nZXRBdHRyaWJ1dGUobil9Zm9yKHQgaW4gbil0aGlzLmVhY2goTSh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKE0obix0KSl9LEZhLmNsYXNzZWQ9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9dGhpcy5ub2RlKCkscj0obj1uLnRyaW0oKS5zcGxpdCgvXnxccysvZykpLmxlbmd0aCxpPS0xO2lmKHQ9ZS5jbGFzc0xpc3Qpe2Zvcig7KytpPHI7KWlmKCF0LmNvbnRhaW5zKG5baV0pKXJldHVybiExfWVsc2UgZm9yKHQ9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7KytpPHI7KWlmKCFiKG5baV0pLnRlc3QodCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKHQgaW4gbil0aGlzLmVhY2goXyh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKF8obix0KSl9LEZhLnN0eWxlPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0PSIiKTtmb3IoZSBpbiBuKXRoaXMuZWFjaChTKGUsbltlXSx0KSk7cmV0dXJuIHRoaXN9aWYoMj5yKXJldHVybiBiYS5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSgpLG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7ZT0iIn1yZXR1cm4gdGhpcy5lYWNoKFMobix0LGUpKX0sRmEucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5ub2RlKClbbl07Zm9yKHQgaW4gbil0aGlzLmVhY2goRSh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEUobix0KSl9LEZhLnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxGYS5odG1sPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVsbD09bj9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LEZhLmFwcGVuZD1mdW5jdGlvbihuKXtyZXR1cm4gbj1rKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LEZhLmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBuPWsobiksdD12KHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxGYS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9KX0sRmEuZGF0YT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIgcix1LGEsbz1uLmxlbmd0aCxmPWUubGVuZ3RoLGg9TWF0aC5taW4obyxmKSxnPW5ldyBBcnJheShmKSxwPW5ldyBBcnJheShmKSxkPW5ldyBBcnJheShvKTtpZih0KXt2YXIgbSx2PW5ldyBpLHk9bmV3IGksTT1bXTtmb3Iocj0tMTsrK3I8bzspbT10LmNhbGwodT1uW3JdLHUuX19kYXRhX18sciksdi5oYXMobSk/ZFtyXT11OnYuc2V0KG0sdSksTS5wdXNoKG0pO2ZvcihyPS0xOysrcjxmOyltPXQuY2FsbChlLGE9ZVtyXSxyKSwodT12LmdldChtKSk/KGdbcl09dSx1Ll9fZGF0YV9fPWEpOnkuaGFzKG0pfHwocFtyXT1BKGEpKSx5LnNldChtLGEpLHYucmVtb3ZlKG0pO2ZvcihyPS0xOysrcjxvOyl2LmhhcyhNW3JdKSYmKGRbcl09bltyXSl9ZWxzZXtmb3Iocj0tMTsrK3I8aDspdT1uW3JdLGE9ZVtyXSx1Pyh1Ll9fZGF0YV9fPWEsZ1tyXT11KTpwW3JdPUEoYSk7Zm9yKDtmPnI7KytyKXBbcl09QShlW3JdKTtmb3IoO28+cjsrK3IpZFtyXT1uW3JdfXAudXBkYXRlPWcscC5wYXJlbnROb2RlPWcucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9bi5wYXJlbnROb2RlLGMucHVzaChwKSxsLnB1c2goZykscy5wdXNoKGQpfXZhciByLHUsYT0tMSxvPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3Iobj1uZXcgQXJyYXkobz0ocj10aGlzWzBdKS5sZW5ndGgpOysrYTxvOykodT1yW2FdKSYmKG5bYV09dS5fX2RhdGFfXyk7cmV0dXJuIG59dmFyIGM9QyhbXSksbD1tKFtdKSxzPW0oW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKWZvcig7KythPG87KWUocj10aGlzW2FdLG4uY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxhKSk7ZWxzZSBmb3IoOysrYTxvOyllKHI9dGhpc1thXSxuKTtyZXR1cm4gbC5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBjfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gc30sbH0sRmEuZGF0dW09ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMucHJvcGVydHkoIl9fZGF0YV9fIil9LEZhLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsaT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TihuKSk7Zm9yKHZhciB1PTAsYT10aGlzLmxlbmd0aDthPnU7dSsrKXtpLnB1c2godD1bXSksdC5wYXJlbnROb2RlPShlPXRoaXNbdV0pLnBhcmVudE5vZGU7Zm9yKHZhciBvPTAsYz1lLmxlbmd0aDtjPm87bysrKShyPWVbb10pJiZuLmNhbGwocixyLl9fZGF0YV9fLG8pJiZ0LnB1c2gocil9cmV0dXJuIG0oaSl9LEZhLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLHQ9dGhpcy5sZW5ndGg7KytuPHQ7KWZvcih2YXIgZSxyPXRoaXNbbl0saT1yLmxlbmd0aC0xLHU9cltpXTstLWk+PTA7KShlPXJbaV0pJiYodSYmdSE9PWUubmV4dFNpYmxpbmcmJnUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx1KSx1PWUpO3JldHVybiB0aGlzfSxGYS5zb3J0PWZ1bmN0aW9uKG4pe249cS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KXRoaXNbdF0uc29ydChuKTtyZXR1cm4gdGhpcy5vcmRlcigpfSxGYS5lYWNoPWZ1bmN0aW9uKG4pe3JldHVybiBUKHRoaXMsZnVuY3Rpb24odCxlLHIpe24uY2FsbCh0LHQuX19kYXRhX18sZSxyKX0pfSxGYS5jYWxsPWZ1bmN0aW9uKG4pe3ZhciB0PXFhKGFyZ3VtZW50cyk7cmV0dXJuIG4uYXBwbHkodFswXT10aGlzLHQpLHRoaXN9LEZhLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxGYS5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsdD10aGlzLmxlbmd0aDt0Pm47bisrKWZvcih2YXIgZT10aGlzW25dLHI9MCxpPWUubGVuZ3RoO2k+cjtyKyspe3ZhciB1PWVbcl07aWYodSlyZXR1cm4gdX1yZXR1cm4gbnVsbH0sRmEuc2l6ZT1mdW5jdGlvbigpe3ZhciBuPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrbn0pLG59O3ZhciBPYT1bXTt5YS5zZWxlY3Rpb24uZW50ZXI9Qyx5YS5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPU9hLE9hLmFwcGVuZD1GYS5hcHBlbmQsT2EuaW5zZXJ0PUZhLmluc2VydCxPYS5lbXB0eT1GYS5lbXB0eSxPYS5ub2RlPUZhLm5vZGUsT2EuY2FsbD1GYS5jYWxsLE9hLnNpemU9RmEuc2l6ZSxPYS5zZWxlY3Q9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscixpLHUsYT1bXSxvPS0xLGM9dGhpcy5sZW5ndGg7KytvPGM7KXtyPShpPXRoaXNbb10pLnVwZGF0ZSxhLnB1c2godD1bXSksdC5wYXJlbnROb2RlPWkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEscz1pLmxlbmd0aDsrK2w8czspKHU9aVtsXSk/KHQucHVzaChyW2xdPWU9bi5jYWxsKGkucGFyZW50Tm9kZSx1Ll9fZGF0YV9fLGwpKSxlLl9fZGF0YV9fPXUuX19kYXRhX18pOnQucHVzaChudWxsKX1yZXR1cm4gbShhKX0sRmEudHJhbnNpdGlvbj1mdW5jdGlvbigpe3ZhciBuLHQsZT1xY3x8KytEYyxyPVtdLGk9T2JqZWN0LmNyZWF0ZShqYyk7aS50aW1lPURhdGUubm93KCk7Zm9yKHZhciB1PS0xLGE9dGhpcy5sZW5ndGg7Kyt1PGE7KXtyLnB1c2gobj1bXSk7Zm9yKHZhciBvPXRoaXNbdV0sYz0tMSxsPW8ubGVuZ3RoOysrYzxsOykodD1vW2NdKSYmTnUodCxjLGUsaSksbi5wdXNoKHQpfXJldHVybiBFdShyLGUpfSx5YS5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQ9WyJzdHJpbmciPT10eXBlb2Ygbj9EYShuLE1hKTpuXTtyZXR1cm4gdC5wYXJlbnROb2RlPXhhLG0oW3RdKX0seWEuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0PXFhKCJzdHJpbmciPT10eXBlb2Ygbj9qYShuLE1hKTpuKTtyZXR1cm4gdC5wYXJlbnROb2RlPXhhLG0oW3RdKX07dmFyIFlhPXlhLnNlbGVjdCh4YSk7RmEub249ZnVuY3Rpb24obix0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7aWYoMz5yKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+ciYmKHQ9ITEpO2ZvcihlIGluIG4pdGhpcy5lYWNoKHooZSxuW2VdLHQpKTtyZXR1cm4gdGhpc31pZigyPnIpcmV0dXJuKHI9dGhpcy5ub2RlKClbIl9fb24iK25dKSYmci5fO2U9ITF9cmV0dXJuIHRoaXMuZWFjaCh6KG4sdCxlKSl9O3ZhciBSYT15YS5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7UmEuZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gTWEmJlJhLnJlbW92ZShuKX0pO3ZhciBVYT1vKHhhLnN0eWxlLCJ1c2VyU2VsZWN0Iik7eWEubW91c2U9ZnVuY3Rpb24obil7cmV0dXJuIEgobixwKCkpfTt2YXIgSWE9L1dlYktpdC8udGVzdChiYS5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO3lhLnRvdWNoZXM9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD1wKCkudG91Y2hlcyksdD9xYSh0KS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9SChuLHQpO3JldHVybiBlLmlkZW50aWZpZXI9dC5pZGVudGlmaWVyLGV9KTpbXX0seWEuYmVoYXZpb3IuZHJhZz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsdCkub24oInRvdWNoc3RhcnQuZHJhZyIsdCl9ZnVuY3Rpb24gdCgpe2Z1bmN0aW9uIG4oKXt2YXIgbj1hLnBhcmVudE5vZGU7cmV0dXJuIG51bGwhPWw/eWEudG91Y2hlcyhuKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uaWRlbnRpZmllcj09PWx9KVswXTp5YS5tb3VzZShuKX1mdW5jdGlvbiB0KCl7aWYoIWEucGFyZW50Tm9kZSlyZXR1cm4gaSgpO3ZhciB0PW4oKSxlPXRbMF0tc1swXSxyPXRbMV0tc1sxXTtmfD1lfHIscz10LG8oe3R5cGU6ImRyYWciLHg6dFswXSt1WzBdLHk6dFsxXSt1WzFdLGR4OmUsZHk6cn0pfWZ1bmN0aW9uIGkoKXtnLm9uKG51bGwhPWw/InRvdWNobW92ZS5kcmFnLSIrbDoibW91c2Vtb3ZlLmRyYWciLG51bGwpLm9uKG51bGwhPWw/InRvdWNoZW5kLmRyYWctIitsOiJtb3VzZXVwLmRyYWciLG51bGwpLGgoZiYmeWEuZXZlbnQudGFyZ2V0PT09Yyksbyh7dHlwZToiZHJhZ2VuZCJ9KX12YXIgdSxhPXRoaXMsbz1lLm9mKGEsYXJndW1lbnRzKSxjPXlhLmV2ZW50LnRhcmdldCxsPXlhLmV2ZW50LnRvdWNoZXM/eWEuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcjpudWxsLHM9bigpLGY9MCxoPUwobnVsbCE9bD8iZHJhZy0iK2w6ImRyYWciKSxnPXlhLnNlbGVjdChiYSkub24obnVsbCE9bD8idG91Y2htb3ZlLmRyYWctIitsOiJtb3VzZW1vdmUuZHJhZyIsdCkub24obnVsbCE9bD8idG91Y2hlbmQuZHJhZy0iK2w6Im1vdXNldXAuZHJhZyIsaSwhMCk7cj8odT1yLmFwcGx5KGEsYXJndW1lbnRzKSx1PVt1Lngtc1swXSx1Lnktc1sxXV0pOnU9WzAsMF0sbyh7dHlwZToiZHJhZ3N0YXJ0In0pfXZhciBlPWQobiwiZHJhZyIsImRyYWdzdGFydCIsImRyYWdlbmQiKSxyPW51bGw7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0seWEucmViaW5kKG4sZSwib24iKX0seWEuYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzLm9uKCJtb3VzZWRvd24uem9vbSIsbykub24oIm1vdXNlbW92ZS56b29tIixsKS5vbihaYSsiLnpvb20iLGMpLm9uKCJkYmxjbGljay56b29tIixzKS5vbigidG91Y2hzdGFydC56b29tIixmKS5vbigidG91Y2htb3ZlLnpvb20iLGgpLm9uKCJ0b3VjaGVuZC56b29tIixmKX1mdW5jdGlvbiB0KG4pe3JldHVyblsoblswXS1fWzBdKS93LChuWzFdLV9bMV0pL3ddfWZ1bmN0aW9uIGUobil7cmV0dXJuW25bMF0qdytfWzBdLG5bMV0qdytfWzFdXX1mdW5jdGlvbiByKG4pe3c9TWF0aC5tYXgoU1swXSxNYXRoLm1pbihTWzFdLG4pKX1mdW5jdGlvbiBpKG4sdCl7dD1lKHQpLF9bMF0rPW5bMF0tdFswXSxfWzFdKz1uWzFdLXRbMV19ZnVuY3Rpb24gdSgpe3kmJnkuZG9tYWluKHYucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4tX1swXSkvd30pLm1hcCh2LmludmVydCkpLHgmJnguZG9tYWluKE0ucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4tX1sxXSkvd30pLm1hcChNLmludmVydCkpfWZ1bmN0aW9uIGEobil7dSgpLHlhLmV2ZW50LnByZXZlbnREZWZhdWx0KCksbih7dHlwZToiem9vbSIsc2NhbGU6dyx0cmFuc2xhdGU6X30pfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiBuKCl7Yz0xLGkoeWEubW91c2UocikscyksYSh1KX1mdW5jdGlvbiBlKCl7bC5vbigibW91c2Vtb3ZlLnpvb20iLG51bGwpLm9uKCJtb3VzZXVwLnpvb20iLG51bGwpLGYoYyYmeWEuZXZlbnQudGFyZ2V0PT09byl9dmFyIHI9dGhpcyx1PUUub2Yocixhcmd1bWVudHMpLG89eWEuZXZlbnQudGFyZ2V0LGM9MCxsPXlhLnNlbGVjdChiYSkub24oIm1vdXNlbW92ZS56b29tIixuKS5vbigibW91c2V1cC56b29tIixlKSxzPXQoeWEubW91c2UocikpLGY9TCgiem9vbSIpfWZ1bmN0aW9uIGMoKXtnfHwoZz10KHlhLm1vdXNlKHRoaXMpKSkscihNYXRoLnBvdygyLC4wMDIqVmEoKSkqdyksaSh5YS5tb3VzZSh0aGlzKSxnKSxhKEUub2YodGhpcyxhcmd1bWVudHMpKX1mdW5jdGlvbiBsKCl7Zz1udWxsfWZ1bmN0aW9uIHMoKXt2YXIgbj15YS5tb3VzZSh0aGlzKSxlPXQobiksdT1NYXRoLmxvZyh3KS9NYXRoLkxOMjtyKE1hdGgucG93KDIseWEuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHUpLTE6TWF0aC5mbG9vcih1KSsxKSksaShuLGUpLGEoRS5vZih0aGlzLGFyZ3VtZW50cykpfWZ1bmN0aW9uIGYoKXt2YXIgbj15YS50b3VjaGVzKHRoaXMpLGU9RGF0ZS5ub3coKTtpZihtPXcsZz17fSxwPTAsbi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2dbbi5pZGVudGlmaWVyXT10KG4pfSksMT09PW4ubGVuZ3RoKXtpZig1MDA+ZS1iKXt2YXIgdT1uWzBdLG89dChuWzBdKTtyKDIqdyksaSh1LG8pLGEoRS5vZih0aGlzLGFyZ3VtZW50cykpfWI9ZX1lbHNlIGlmKG4ubGVuZ3RoPjEpe3ZhciB1PW5bMF0sYz1uWzFdLGw9dVswXS1jWzBdLHM9dVsxXS1jWzFdO3A9bCpsK3Mqc319ZnVuY3Rpb24gaCgpe3ZhciBuPXlhLnRvdWNoZXModGhpcyksdD1uWzBdLGU9Z1t0LmlkZW50aWZpZXJdO2lmKHU9blsxXSl7dmFyIHUsbz1nW3UuaWRlbnRpZmllcl0sYz15YS5ldmVudC5zY2FsZTtpZihudWxsPT1jKXt2YXIgbD0obD11WzBdLXRbMF0pKmwrKGw9dVsxXS10WzFdKSpsO2M9cCYmTWF0aC5zcXJ0KGwvcCl9dD1bKHRbMF0rdVswXSkvMiwodFsxXSt1WzFdKS8yXSxlPVsoZVswXStvWzBdKS8yLChlWzFdK29bMV0pLzJdLHIoYyptKX1pKHQsZSksYj1udWxsLGEoRS5vZih0aGlzLGFyZ3VtZW50cykpfXZhciBnLHAsbSx2LHksTSx4LGIsXz1bMCwwXSx3PTEsUz1YYSxFPWQobiwiem9vbSIpO3JldHVybiBuLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10Lm1hcChOdW1iZXIpLHUoKSxuKTpffSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSt0LHUoKSxuKTp3fSxuLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPW51bGw9PXQ/WGE6dC5tYXAoTnVtYmVyKSxuKTpTfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCx2PXQuY29weSgpLF89WzAsMF0sdz0xLG4pOnl9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD10LE09dC5jb3B5KCksXz1bMCwwXSx3PTEsbik6eH0seWEucmViaW5kKG4sRSwib24iKX07dmFyIFZhLFhhPVswLDEvMF0sWmE9Im9ud2hlZWwiaW4gTWE/KFZhPWZ1bmN0aW9uKCl7cmV0dXJuLXlhLmV2ZW50LmRlbHRhWSooeWEuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBNYT8oVmE9ZnVuY3Rpb24oKXtyZXR1cm4geWEuZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooVmE9ZnVuY3Rpb24oKXtyZXR1cm4teWEuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpO0YucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHlhLmhzbD1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP24gaW5zdGFuY2VvZiBPP1Aobi5oLG4ucyxuLmwpOmF0KCIiK24sb3QsUCk6UCgrbiwrdCwrZSl9O3ZhciBCYT1PLnByb3RvdHlwZT1uZXcgRjtCYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSksUCh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sQmEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxQKHRoaXMuaCx0aGlzLnMsbip0aGlzLmwpfSxCYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gWSh0aGlzLmgsdGhpcy5zLHRoaXMubCl9O3ZhciAkYT1NYXRoLlBJLFdhPTFlLTYsSmE9V2EqV2EsR2E9JGEvMTgwLEthPTE4MC8kYTt5YS5oY2w9ZnVuY3Rpb24obix0LGUpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9uIGluc3RhbmNlb2YgJD9CKG4uaCxuLmMsbi5sKTpuIGluc3RhbmNlb2YgRz9RKG4ubCxuLmEsbi5iKTpRKChuPWN0KChuPXlhLnJnYihuKSkucixuLmcsbi5iKSkubCxuLmEsbi5iKTpCKCtuLCt0LCtlKX07dmFyIFFhPSQucHJvdG90eXBlPW5ldyBGO1FhLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBCKHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtubyooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFFhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gQih0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLW5vKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0sUWEucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIFcodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx5YS5sYWI9ZnVuY3Rpb24obix0LGUpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9uIGluc3RhbmNlb2YgRz9KKG4ubCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgJD9XKG4ubCxuLmMsbi5oKTpjdCgobj15YS5yZ2IobikpLnIsbi5nLG4uYik6SigrbiwrdCwrZSl9O3ZhciBubz0xOCx0bz0uOTUwNDcsZW89MSxybz0xLjA4ODgzLGlvPUcucHJvdG90eXBlPW5ldyBGO2lvLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBKKE1hdGgubWluKDEwMCx0aGlzLmwrbm8qKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSksdGhpcy5hLHRoaXMuYil9LGlvLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gSihNYXRoLm1heCgwLHRoaXMubC1ubyooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0saW8ucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSx5YS5yZ2I9ZnVuY3Rpb24obix0LGUpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9uIGluc3RhbmNlb2YgaXQ/cnQobi5yLG4uZyxuLmIpOmF0KCIiK24scnQsWSk6cnQofn5uLH5+dCx+fmUpfTt2YXIgdW89aXQucHJvdG90eXBlPW5ldyBGO3VvLmJyaWdodGVyPWZ1bmN0aW9uKG4pe249TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEpO3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYixpPTMwO3JldHVybiB0fHxlfHxyPyh0JiZpPnQmJih0PWkpLGUmJmk+ZSYmKGU9aSksciYmaT5yJiYocj1pKSxydChNYXRoLm1pbigyNTUsTWF0aC5mbG9vcih0L24pKSxNYXRoLm1pbigyNTUsTWF0aC5mbG9vcihlL24pKSxNYXRoLm1pbigyNTUsTWF0aC5mbG9vcihyL24pKSkpOnJ0KGksaSxpKX0sdW8uZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxydChNYXRoLmZsb29yKG4qdGhpcy5yKSxNYXRoLmZsb29yKG4qdGhpcy5nKSxNYXRoLmZsb29yKG4qdGhpcy5iKSl9LHVvLmhzbD1mdW5jdGlvbigpe3JldHVybiBvdCh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LHVvLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK3V0KHRoaXMucikrdXQodGhpcy5nKSt1dCh0aGlzLmIpfTt2YXIgYW89eWEubWFwKHthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW46IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsc3RlZWxibHVlOiIjNDY4MmI0Iix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRvbWF0bzoiI2ZmNjM0NyIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9KTthby5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7YW8uc2V0KG4sYXQodCxydCxZKSl9KSx5YS5mdW5jdG9yPWZ0LHlhLnhocj1ndChodCkseWEuZHN2PWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUsdSl7YXJndW1lbnRzLmxlbmd0aDwzJiYodT1lLGU9bnVsbCk7dmFyIGE9eWEueGhyKG4sdCx1KTtyZXR1cm4gYS5yb3c9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YS5yZXNwb25zZShudWxsPT0oZT1uKT9yOmkobikpOmV9LGEucm93KGUpfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBhcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBhKHQpe3JldHVybiB0Lm1hcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGMudGVzdChuKT8nIicrbi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBjPW5ldyBSZWdFeHAoJ1siJytuKyJcbl0iKSxsPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4sZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIGk9bmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlvbihuLGUpe3JldHVybiB0KGkobiksZSl9Oml9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7aWYocz49YylyZXR1cm4gYTtpZihpKXJldHVybiBpPSExLHU7dmFyIHQ9cztpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZhciBlPXQ7ZSsrPGM7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4uY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1zPWUrMjt2YXIgcj1uLmNoYXJDb2RlQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyhpPSEwLDEwPT09bi5jaGFyQ29kZUF0KGUrMikmJisrcyk6MTA9PT1yJiYoaT0hMCksbi5zdWJzdHJpbmcodCsxLGUpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M+czspe3ZhciByPW4uY2hhckNvZGVBdChzKyspLG89MTtpZigxMD09PXIpaT0hMDtlbHNlIGlmKDEzPT09cilpPSEwLDEwPT09bi5jaGFyQ29kZUF0KHMpJiYoKytzLCsrbyk7ZWxzZSBpZihyIT09bCljb250aW51ZTtyZXR1cm4gbi5zdWJzdHJpbmcodCxzLW8pfXJldHVybiBuLnN1YnN0cmluZyh0KX1mb3IodmFyIHIsaSx1PXt9LGE9e30sbz1bXSxjPW4ubGVuZ3RoLHM9MCxmPTA7KHI9ZSgpKSE9PWE7KXtmb3IodmFyIGg9W107ciE9PXUmJnIhPT1hOyloLnB1c2gocikscj1lKCk7KCF0fHwoaD10KGgsZisrKSkpJiZvLnB1c2goaCl9cmV0dXJuIG99LGUuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93cyh0KTt2YXIgcj1uZXcgdSxpPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fGkucHVzaChyLmFkZCh0KSl9KSxbaS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSkuam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1hcChhKS5qb2luKCJcbiIpfSxlfSx5YS5jc3Y9eWEuZHN2KCIsIiwidGV4dC9jc3YiKSx5YS50c3Y9eWEuZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBvbyxjbyxsbyxzbzt5YS50aW1lcj1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwzKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdD0wO2Vsc2UgaWYoIWlzRmluaXRlKHQpKXJldHVybjtlPURhdGUubm93KCl9dmFyIHI9ZSt0LGk9e2NhbGxiYWNrOm4sdGltZTpyLG5leHQ6bnVsbH07Y28/Y28ubmV4dD1pOm9vPWksY289aSxsb3x8KHNvPWNsZWFyVGltZW91dChzbyksbG89MSxmbyhtdCkpfSx5YS50aW1lci5mbHVzaD1mdW5jdGlvbigpe3Z0KCkseXQoKX07dmFyIGZvPWJhW28oYmEsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX0saG89Ii4iLGdvPSIsIixwbz1bMywzXSxtbz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKE10KTt5YS5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24obix0KXt2YXIgZT0wO3JldHVybiBuJiYoMD5uJiYobio9LTEpLHQmJihuPXlhLnJvdW5kKG4seHQobix0KSkpLGU9MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKG4pL01hdGguTE4xMCksZT1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKCgwPj1lP2UrMTplLTEpLzMpKSkpLG1vWzgrZS8zXX0seWEucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJvdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9LHlhLmZvcm1hdD1mdW5jdGlvbihuKXt2YXIgdD12by5leGVjKG4pLGU9dFsxXXx8IiAiLHI9dFsyXXx8Ij4iLGk9dFszXXx8IiIsdT10WzRdfHwiIixhPXRbNV0sbz0rdFs2XSxjPXRbN10sbD10WzhdLHM9dFs5XSxmPTEsaD0iIixnPSExO3N3aXRjaChsJiYobD0rbC5zdWJzdHJpbmcoMSkpLChhfHwiMCI9PT1lJiYiPSI9PT1yKSYmKGE9ZT0iMCIscj0iPSIsYyYmKG8tPU1hdGguZmxvb3IoKG8tMSkvNCkpKSxzKXtjYXNlIm4iOmM9ITAscz0iZyI7YnJlYWs7Y2FzZSIlIjpmPTEwMCxoPSIlIixzPSJmIjticmVhaztjYXNlInAiOmY9MTAwLGg9IiUiLHM9InIiO2JyZWFrO2Nhc2UiYiI6Y2FzZSJvIjpjYXNlIngiOmNhc2UiWCI6dSYmKHU9IjAiK3MudG9Mb3dlckNhc2UoKSk7Y2FzZSJjIjpjYXNlImQiOmc9ITAsbD0wO2JyZWFrO2Nhc2UicyI6Zj0tMSxzPSJyIn0iIyI9PT11JiYodT0iIiksInIiIT1zfHxsfHwocz0iZyIpLG51bGwhPWwmJigiZyI9PXM/bD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGwpKTooImUiPT1zfHwiZiI9PXMpJiYobD1NYXRoLm1heCgwLE1hdGgubWluKDIwLGwpKSkpLHM9eW8uZ2V0KHMpfHxidDt2YXIgcD1hJiZjO3JldHVybiBmdW5jdGlvbihuKXtpZihnJiZuJTEpcmV0dXJuIiI7dmFyIHQ9MD5ufHwwPT09biYmMD4xL24/KG49LW4sIi0iKTppO2lmKDA+Zil7dmFyIGQ9eWEuZm9ybWF0UHJlZml4KG4sbCk7bj1kLnNjYWxlKG4pLGg9ZC5zeW1ib2x9ZWxzZSBuKj1mO249cyhuLGwpLCFhJiZjJiYobj1NbyhuKSk7dmFyIG09dS5sZW5ndGgrbi5sZW5ndGgrKHA/MDp0Lmxlbmd0aCksdj1vPm0/bmV3IEFycmF5KG09by1tKzEpLmpvaW4oZSk6IiI7cmV0dXJuIHAmJihuPU1vKHYrbikpLGhvJiZuLnJlcGxhY2UoIi4iLGhvKSx0Kz11LCgiPCI9PT1yP3Qrbit2OiI+Ij09PXI/dit0K246Il4iPT09cj92LnN1YnN0cmluZygwLG0+Pj0xKSt0K24rdi5zdWJzdHJpbmcobSk6dCsocD9uOnYrbikpK2h9fTt2YXIgdm89Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KCMpPygwKT8oXGQrKT8oLCk/KFwuLT9cZCspPyhbYS16JV0pPy9pLHlvPXlhLm1hcCh7YjpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49eWEucm91bmQobix4dChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLHh0KG4qKDErMWUtMTUpLHQpKSkpfX0pLE1vPWh0O2lmKHBvKXt2YXIgeG89cG8ubGVuZ3RoO01vPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD1uLmxhc3RJbmRleE9mKCIuIiksZT10Pj0wPyIuIituLnN1YnN0cmluZyh0KzEpOih0PW4ubGVuZ3RoLCIiKSxyPVtdLGk9MCx1PXBvWzBdO3Q+MCYmdT4wOylyLnB1c2gobi5zdWJzdHJpbmcodC09dSx0K3UpKSx1PXBvW2k9KGkrMSkleG9dO3JldHVybiByLnJldmVyc2UoKS5qb2luKGdvfHwiIikrZX19eWEuZ2VvPXt9LF90LnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7d3Qobix0aGlzLnQsYm8pLHd0KGJvLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWJvLnQ6dGhpcy5zPWJvLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBibz1uZXcgX3Q7eWEuZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJl9vLmhhc093blByb3BlcnR5KG4udHlwZSk/X29bbi50eXBlXShuLHQpOlN0KG4sdCl9O3ZhciBfbz17RmVhdHVyZTpmdW5jdGlvbihuLHQpe1N0KG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylTdChlW3JdLmdlb21ldHJ5LHQpfX0sd289e1NwaGVyZTpmdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKG4sdCl7dmFyIGU9bi5jb29yZGluYXRlczt0LnBvaW50KGVbMF0sZVsxXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24obix0KXtmb3IodmFyIGUscj1uLmNvb3JkaW5hdGVzLGk9LTEsdT1yLmxlbmd0aDsrK2k8dTspZT1yW2ldLHQucG9pbnQoZVswXSxlWzFdKX0sTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe0V0KG4uY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylFdChlW3JdLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24obix0KXtrdChuLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWt0KGVbcl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmdlb21ldHJpZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylTdChlW3JdLHQpfX07eWEuZ2VvLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIFNvPTAseWEuZ2VvLnN0cmVhbShuLGtvKSxTb307dmFyIFNvLEVvPW5ldyBfdCxrbz17c3BoZXJlOmZ1bmN0aW9uKCl7U28rPTQqJGF9LHBvaW50OnMsbGluZVN0YXJ0OnMsbGluZUVuZDpzLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0VvLnJlc2V0KCksa28ubGluZVN0YXJ0PUF0fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIG49MipFbztTbys9MD5uPzQqJGErbjpuLGtvLmxpbmVTdGFydD1rby5saW5lRW5kPWtvLnBvaW50PXN9fTt5YS5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe00ucHVzaCh4PVtzPW4saD1uXSksZj50JiYoZj10KSx0PmcmJihnPXQpfWZ1bmN0aW9uIHQodCxlKXt2YXIgcj1OdChbdCpHYSxlKkdhXSk7aWYodil7dmFyIGk9VHQodixyKSx1PVtpWzFdLC1pWzBdLDBdLGE9VHQodSxpKTtEdChhKSxhPWp0KGEpO3ZhciBjPXQtcCxsPWM+MD8xOi0xLGQ9YVswXSpLYSpsLG09TWF0aC5hYnMoYyk+MTgwO2lmKG1eKGQ+bCpwJiZsKnQ+ZCkpe3ZhciB5PWFbMV0qS2E7eT5nJiYoZz15KX1lbHNlIGlmKGQ9KGQrMzYwKSUzNjAtMTgwLG1eKGQ+bCpwJiZsKnQ+ZCkpe3ZhciB5PS1hWzFdKkthO2Y+eSYmKGY9eSl9ZWxzZSBmPmUmJihmPWUpLGU+ZyYmKGc9ZSk7bT9wPnQ/byhzLHQpPm8ocyxoKSYmKGg9dCk6byh0LGgpPm8ocyxoKSYmKHM9dCk6aD49cz8ocz50JiYocz10KSx0PmgmJihoPXQpKTp0PnA/byhzLHQpPm8ocyxoKSYmKGg9dCk6byh0LGgpPm8ocyxoKSYmKHM9dCl9ZWxzZSBuKHQsZSk7dj1yLHA9dH1mdW5jdGlvbiBlKCl7Yi5wb2ludD10fWZ1bmN0aW9uIHIoKXt4WzBdPXMseFsxXT1oLGIucG9pbnQ9bix2PW51bGx9ZnVuY3Rpb24gaShuLGUpe2lmKHYpe3ZhciByPW4tcDt5Kz1NYXRoLmFicyhyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2UgZD1uLG09ZTtrby5wb2ludChuLGUpLHQobixlKX1mdW5jdGlvbiB1KCl7a28ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYSgpe2koZCxtKSxrby5saW5lRW5kKCksTWF0aC5hYnMoeSk+V2EmJihzPS0oaD0xODApKSx4WzBdPXMseFsxXT1oLHY9bnVsbH1mdW5jdGlvbiBvKG4sdCl7cmV0dXJuKHQtPW4pPDA/dCszNjA6dH1mdW5jdGlvbiBjKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBsKG4sdCl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgcyxmLGgsZyxwLGQsbSx2LHksTSx4LGI9e3BvaW50Om4sbGluZVN0YXJ0OmUsbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2IucG9pbnQ9aSxiLmxpbmVTdGFydD11LGIubGluZUVuZD1hLHk9MCxrby5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2tvLnBvbHlnb25FbmQoKSxiLnBvaW50PW4sYi5saW5lU3RhcnQ9ZSxiLmxpbmVFbmQ9ciwwPkVvPyhzPS0oaD0xODApLGY9LShnPTkwKSk6eT5XYT9nPTkwOi1XYT55JiYoZj0tOTApLHhbMF09cyx4WzFdPWh9fTtyZXR1cm4gZnVuY3Rpb24obil7Zz1oPS0ocz1mPTEvMCksTT1bXSx5YS5nZW8uc3RyZWFtKG4sYik7dmFyIHQ9TS5sZW5ndGg7aWYodCl7TS5zb3J0KGMpO2Zvcih2YXIgZSxyPTEsaT1NWzBdLHU9W2ldO3Q+cjsrK3IpZT1NW3JdLGwoZVswXSxpKXx8bChlWzFdLGkpPyhvKGlbMF0sZVsxXSk+byhpWzBdLGlbMV0pJiYoaVsxXT1lWzFdKSxvKGVbMF0saVsxXSk+byhpWzBdLGlbMV0pJiYoaVswXT1lWzBdKSk6dS5wdXNoKGk9ZSk7Zm9yKHZhciBhLGUscD0tMS8wLHQ9dS5sZW5ndGgtMSxyPTAsaT11W3RdO3Q+PXI7aT1lLCsrcillPXVbcl0sKGE9byhpWzFdLGVbMF0pKT5wJiYocD1hLHM9ZVswXSxoPWlbMV0pfXJldHVybiBNPXg9bnVsbCwxLzA9PT1zfHwxLzA9PT1mP1tbMC8wLDAvMF0sWzAvMCwwLzBdXTpbW3MsZl0sW2gsZ11dfX0oKSx5YS5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24obil7QW89Tm89cW89VG89Q289em89RG89am89TG89SG89Rm89MCx5YS5nZW8uc3RyZWFtKG4sUG8pO3ZhciB0PUxvLGU9SG8scj1GbyxpPXQqdCtlKmUrcipyO3JldHVybiBKYT5pJiYodD16byxlPURvLHI9am8sV2E+Tm8mJih0PXFvLGU9VG8scj1DbyksaT10KnQrZSplK3IqcixKYT5pKT9bMC8wLDAvMF06W01hdGguYXRhbjIoZSx0KSpLYSxJKHIvTWF0aC5zcXJ0KGkpKSpLYV19O3ZhciBBbyxObyxxbyxUbyxDbyx6byxEbyxqbyxMbyxIbyxGbyxQbz17c3BoZXJlOnMscG9pbnQ6SHQsbGluZVN0YXJ0OlB0LGxpbmVFbmQ6T3QscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7UG8ubGluZVN0YXJ0PVl0fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7UG8ubGluZVN0YXJ0PVB0fX0sT289VnQoUnQsV3QsR3QsS3QpLFlvPVstJGEsMF0sUm89MWU5Oyh5YS5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gcmUoaWUpfSkucmF3PWllLHlhLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4geWEuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHlhLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3ZhciB1PW5bMF0sYT1uWzFdO3JldHVybiB0PW51bGwsZSh1LGEpLHR8fChyKHUsYSksdCl8fGkodSxhKSx0fXZhciB0LGUscixpLHU9eWEuZ2VvLmFsYmVycygpLGE9eWEuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxvPXlhLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbihuLGUpe3Q9W24sZV19fTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obil7dmFyIHQ9dS5zY2FsZSgpLGU9dS50cmFuc2xhdGUoKSxyPShuWzBdLWVbMF0pL3QsaT0oblsxXS1lWzFdKS90O3JldHVybihpPj0uMTImJi4yMzQ+aSYmcj49LS40MjUmJi0uMjE0PnI/YTppPj0uMTY2JiYuMjM0PmkmJnI+PS0uMjE0JiYtLjExNT5yP286dSkuaW52ZXJ0KG4pfSxuLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgdD11LnN0cmVhbShuKSxlPWEuc3RyZWFtKG4pLHI9by5zdHJlYW0obik7cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4saSl7dC5wb2ludChuLGkpLGUucG9pbnQobixpKSxyLnBvaW50KG4saSl9LHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCksZS5zcGhlcmUoKSxyLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGUubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGUubGluZUVuZCgpLHIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLGUucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLGUucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpfX19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1LnByZWNpc2lvbih0KSxhLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxuKTp1LnByZWNpc2lvbigpfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1LnNjYWxlKHQpLGEuc2NhbGUoLjM1KnQpLG8uc2NhbGUodCksbi50cmFuc2xhdGUodS50cmFuc2xhdGUoKSkpOnUuc2NhbGUoKX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHUudHJhbnNsYXRlKCk7dmFyIGw9dS5zY2FsZSgpLHM9K3RbMF0sZj0rdFsxXTtyZXR1cm4gZT11LnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbcy0uNDU1KmwsZi0uMjM4KmxdLFtzKy40NTUqbCxmKy4yMzgqbF1dKS5zdHJlYW0oYykucG9pbnQscj1hLnRyYW5zbGF0ZShbcy0uMzA3KmwsZisuMjAxKmxdKS5jbGlwRXh0ZW50KFtbcy0uNDI1KmwrV2EsZisuMTIqbCtXYV0sW3MtLjIxNCpsLVdhLGYrLjIzNCpsLVdhXV0pLnN0cmVhbShjKS5wb2ludCxpPW8udHJhbnNsYXRlKFtzLS4yMDUqbCxmKy4yMTIqbF0pLmNsaXBFeHRlbnQoW1tzLS4yMTQqbCtXYSxmKy4xNjYqbCtXYV0sW3MtLjExNSpsLVdhLGYrLjIzNCpsLVdhXV0pLnN0cmVhbShjKS5wb2ludCxufSxuLnNjYWxlKDEwNzApfTt2YXIgVW8sSW8sVm8sWG8sWm8sQm8sJG89e3BvaW50OnMsbGluZVN0YXJ0OnMsbGluZUVuZDpzLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0lvPTAsJG8ubGluZVN0YXJ0PXVlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7JG8ubGluZVN0YXJ0PSRvLmxpbmVFbmQ9JG8ucG9pbnQ9cyxVbys9TWF0aC5hYnMoSW8vMil9fSxXbz17cG9pbnQ6YWUsbGluZVN0YXJ0OnMsbGluZUVuZDpzLHBvbHlnb25TdGFydDpzLHBvbHlnb25FbmQ6c30sSm89e3BvaW50OmxlLGxpbmVTdGFydDpzZSxsaW5lRW5kOmZlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0pvLmxpbmVTdGFydD1oZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0pvLnBvaW50PWxlLEpvLmxpbmVTdGFydD1zZSxKby5saW5lRW5kPWZlfX07eWEuZ2VvLnBhdGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBuJiYoImZ1bmN0aW9uIj09dHlwZW9mIG8mJnUucG9pbnRSYWRpdXMoK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxhJiZhLnZhbGlkfHwoYT1pKHUpKSx5YS5nZW8uc3RyZWFtKG4sYSkpLHUucmVzdWx0KCl9ZnVuY3Rpb24gdCgpe3JldHVybiBhPW51bGwsbn12YXIgZSxyLGksdSxhLG89NC41O3JldHVybiBuLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIFVvPTAseWEuZ2VvLnN0cmVhbShuLGkoJG8pKSxVb30sbi5jZW50cm9pZD1mdW5jdGlvbihuKXtyZXR1cm4gcW89VG89Q289em89RG89am89TG89SG89Rm89MCx5YS5nZW8uc3RyZWFtKG4saShKbykpLEZvP1tMby9GbyxIby9Gb106am8/W3pvL2pvLERvL2pvXTpDbz9bcW8vQ28sVG8vQ29dOlswLzAsMC8wXX0sbi5ib3VuZHM9ZnVuY3Rpb24obil7cmV0dXJuIFpvPUJvPS0oVm89WG89MS8wKSx5YS5nZW8uc3RyZWFtKG4saShXbykpLFtbVm8sWG9dLFtabyxCb11dfSxuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KGU9bik/bi5zdHJlYW18fGRlKG4pOmh0LHQoKSk6ZX0sbi5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShyPW4pP25ldyBvZTpuZXcgZ2UobiksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJnUucG9pbnRSYWRpdXMobyksdCgpKTpyfSxuLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHUucG9pbnRSYWRpdXMoK3QpLCt0KSxuKTpvfSxuLnByb2plY3Rpb24oeWEuZ2VvLmFsYmVyc1VzYSgpKS5jb250ZXh0KG51bGwpfSx5YS5nZW8ucHJvamVjdGlvbj1tZSx5YS5nZW8ucHJvamVjdGlvbk11dGF0b3I9dmUsKHlhLmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gbWUoTWUpfSkucmF3PU1lLmludmVydD1NZSx5YS5nZW8ucm90YXRpb249ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gdD1uKHRbMF0qR2EsdFsxXSpHYSksdFswXSo9S2EsdFsxXSo9S2EsdH1yZXR1cm4gbj14ZShuWzBdJTM2MCpHYSxuWzFdKkdhLG4ubGVuZ3RoPjI/blsyXSpHYTowKSx0LmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmludmVydCh0WzBdKkdhLHRbMV0qR2EpLHRbMF0qPUthLHRbMV0qPUthLHR9LHR9LHlhLmdlby5jaXJjbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cix0PXhlKC1uWzBdKkdhLC1uWzFdKkdhLDApLmludmVydCxpPVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlvbihuLGUpe2kucHVzaChuPXQobixlKSksblswXSo9S2EsblsxXSo9S2F9fSkse3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltpXX19dmFyIHQsZSxyPVswLDBdLGk9NjtyZXR1cm4gbi5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVNlKCh0PStyKSpHYSxpKkdhKSxuKTp0fSxuLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1TZSh0KkdhLChpPStyKSpHYSksbik6aX0sbi5hbmdsZSg5MCl9LHlhLmdlby5kaXN0YW5jZT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9KHRbMF0tblswXSkqR2EsaT1uWzFdKkdhLHU9dFsxXSpHYSxhPU1hdGguc2luKHIpLG89TWF0aC5jb3MociksYz1NYXRoLnNpbihpKSxsPU1hdGguY29zKGkpLHM9TWF0aC5zaW4odSksZj1NYXRoLmNvcyh1KTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKGU9ZiphKSplKyhlPWwqcy1jKmYqbykqZSksYypzK2wqZipvKX0seWEuZ2VvLmdyYXRpY3VsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0KCl9fWZ1bmN0aW9uIHQoKXtyZXR1cm4geWEucmFuZ2UoTWF0aC5jZWlsKHUvbSkqbSxpLG0pLm1hcChoKS5jb25jYXQoeWEucmFuZ2UoTWF0aC5jZWlsKGwvdikqdixjLHYpLm1hcChnKSkuY29uY2F0KHlhLnJhbmdlKE1hdGguY2VpbChyL3ApKnAsZSxwKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIE1hdGguYWJzKG4lbSk+V2F9KS5tYXAocykpLmNvbmNhdCh5YS5yYW5nZShNYXRoLmNlaWwoby9kKSpkLGEsZCkuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmFicyhuJXYpPldhfSkubWFwKGYpKX12YXIgZSxyLGksdSxhLG8sYyxsLHMsZixoLGcscD0xMCxkPXAsbT05MCx2PTM2MCx5PTIuNTtyZXR1cm4gbi5saW5lcz1mdW5jdGlvbigpe3JldHVybiB0KCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpufX0pfSxuLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2godSkuY29uY2F0KGcoYykuc2xpY2UoMSksaChpKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhsKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LG4uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ubWFqb3JFeHRlbnQodCkubWlub3JFeHRlbnQodCk6bi5taW5vckV4dGVudCgpfSxuLm1ham9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0WzBdWzBdLGk9K3RbMV1bMF0sbD0rdFswXVsxXSxjPSt0WzFdWzFdLHU+aSYmKHQ9dSx1PWksaT10KSxsPmMmJih0PWwsbD1jLGM9dCksbi5wcmVjaXNpb24oeSkpOltbdSxsXSxbaSxjXV19LG4ubWlub3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sZT0rdFsxXVswXSxvPSt0WzBdWzFdLGE9K3RbMV1bMV0scj5lJiYodD1yLHI9ZSxlPXQpLG8+YSYmKHQ9byxvPWEsYT10KSxuLnByZWNpc2lvbih5KSk6W1tyLG9dLFtlLGFdXX0sbi5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ubWFqb3JTdGVwKHQpLm1pbm9yU3RlcCh0KTpuLm1pbm9yU3RlcCgpfSxuLm1ham9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rdFswXSx2PSt0WzFdLG4pOlttLHZdfSxuLm1pbm9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSxkPSt0WzFdLG4pOltwLGRdfSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rdCxzPWtlKG8sYSw5MCksZj1BZShyLGUseSksaD1rZShsLGMsOTApLGc9QWUodSxpLHkpLG4pOnl9LG4ubWFqb3JFeHRlbnQoW1stMTgwLC05MCtXYV0sWzE4MCw5MC1XYV1dKS5taW5vckV4dGVudChbWy0xODAsLTgwLVdhXSxbMTgwLDgwK1dhXV0pfSx5YS5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOlt0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXZhciB0LGUscj1OZSxpPXFlO3JldHVybiBuLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHlhLmdlby5kaXN0YW5jZSh0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdD0iZnVuY3Rpb24iPT10eXBlb2YgZT9udWxsOmUsbik6cn0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxuKTppfSxuLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP246MH0sbn0seWEuZ2VvLmludGVycG9sYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFRlKG5bMF0qR2EsblsxXSpHYSx0WzBdKkdhLHRbMV0qR2EpfSx5YS5nZW8ubGVuZ3RoPWZ1bmN0aW9uKG4pe3JldHVybiBHbz0wLHlhLmdlby5zdHJlYW0obixLbyksR299O3ZhciBHbyxLbz17c3BoZXJlOnMscG9pbnQ6cyxsaW5lU3RhcnQ6Q2UsbGluZUVuZDpzLHBvbHlnb25TdGFydDpzLHBvbHlnb25FbmQ6c30sUW89emUoZnVuY3Rpb24obil7cmV0dXJuIE1hdGguc3FydCgyLygxK24pKX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hc2luKG4vMil9KTsoeWEuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBtZShRbyl9KS5yYXc9UW87dmFyIG5jPXplKGZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguYWNvcyhuKTtyZXR1cm4gdCYmdC9NYXRoLnNpbih0KX0saHQpOyh5YS5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbWUobmMpfSkucmF3PW5jLCh5YS5nZW8uY29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gcmUoRGUpfSkucmF3PURlLCh5YS5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiByZShqZSl9KS5yYXc9amU7dmFyIHRjPXplKGZ1bmN0aW9uKG4pe3JldHVybiAxL259LE1hdGguYXRhbik7KHlhLmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBtZSh0Yyl9KS5yYXc9dGMsTGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuW24sMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLSRhLzJdfSwoeWEuZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEhlKExlKX0pLnJhdz1MZTt2YXIgZWM9emUoZnVuY3Rpb24oKXtyZXR1cm4gMX0sTWF0aC5hc2luKTsoeWEuZ2VvLm9ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBtZShlYyl9KS5yYXc9ZWM7dmFyIHJjPXplKGZ1bmN0aW9uKG4pe3JldHVybiAxLygxK24pfSxmdW5jdGlvbihuKXtyZXR1cm4gMipNYXRoLmF0YW4obil9KTsoeWEuZ2VvLnN0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gbWUocmMpfSkucmF3PXJjLEZlLmludmVydD1mdW5jdGlvbihuLHQpe3JldHVybltNYXRoLmF0YW4yKFYobiksTWF0aC5jb3ModCkpLEkoTWF0aC5zaW4odCkvWChuKSldfSwoeWEuZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBIZShGZSl9KS5yYXc9RmUseWEuZ2VvbT17fSx5YS5zdmc9e30seWEuc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gUGUoaHQpfTt2YXIgaWM9eWEubWFwKHtsaW5lYXI6UmUsImxpbmVhci1jbG9zZWQiOlVlLHN0ZXA6SWUsInN0ZXAtYmVmb3JlIjpWZSwic3RlcC1hZnRlciI6WGUsYmFzaXM6R2UsImJhc2lzLW9wZW4iOktlLCJiYXNpcy1jbG9zZWQiOlFlLGJ1bmRsZTpucixjYXJkaW5hbDokZSwiY2FyZGluYWwtb3BlbiI6WmUsImNhcmRpbmFsLWNsb3NlZCI6QmUsbW9ub3RvbmU6YXJ9KTtpYy5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dC5rZXk9bix0LmNsb3NlZD0vLWNsb3NlZCQvLnRlc3Qobil9KTt2YXIgdWM9WzAsMi8zLDEvMywwXSxhYz1bMCwxLzMsMi8zLDBdLG9jPVswLDEvNiwyLzMsMS82XTt5YS5nZW9tLmh1bGw9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdChuKXtpZihuLmxlbmd0aDwzKXJldHVybltdO3ZhciB0LGksdSxhLG8sYyxsLHMsZixoLGcscCxkPWZ0KGUpLG09ZnQociksdj1uLmxlbmd0aCx5PXYtMSxNPVtdLHg9W10sYj0wOwppZihkPT09T2UmJnI9PT1ZZSl0PW47ZWxzZSBmb3IodT0wLHQ9W107dj51OysrdSl0LnB1c2goWytkLmNhbGwodGhpcyxpPW5bdV0sdSksK20uY2FsbCh0aGlzLGksdSldKTtmb3IodT0xO3Y+dTsrK3UpKHRbdV1bMV08dFtiXVsxXXx8dFt1XVsxXT09dFtiXVsxXSYmdFt1XVswXTx0W2JdWzBdKSYmKGI9dSk7Zm9yKHU9MDt2PnU7Kyt1KXUhPT1iJiYoYz10W3VdWzFdLXRbYl1bMV0sbz10W3VdWzBdLXRbYl1bMF0sTS5wdXNoKHthbmdsZTpNYXRoLmF0YW4yKGMsbyksaW5kZXg6dX0pKTtmb3IoTS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4uYW5nbGUtdC5hbmdsZX0pLGc9TVswXS5hbmdsZSxoPU1bMF0uaW5kZXgsZj0wLHU9MTt5PnU7Kyt1KXtpZihhPU1bdV0uaW5kZXgsZz09TVt1XS5hbmdsZSl7aWYobz10W2hdWzBdLXRbYl1bMF0sYz10W2hdWzFdLXRbYl1bMV0sbD10W2FdWzBdLXRbYl1bMF0scz10W2FdWzFdLXRbYl1bMV0sbypvK2MqYz49bCpsK3Mqcyl7TVt1XS5pbmRleD0tMTtjb250aW51ZX1NW2ZdLmluZGV4PS0xfWc9TVt1XS5hbmdsZSxmPXUsaD1hfWZvcih4LnB1c2goYiksdT0wLGE9MDsyPnU7KythKU1bYV0uaW5kZXg+LTEmJih4LnB1c2goTVthXS5pbmRleCksdSsrKTtmb3IocD14Lmxlbmd0aDt5PmE7KythKWlmKCEoTVthXS5pbmRleDwwKSl7Zm9yKDshb3IoeFtwLTJdLHhbcC0xXSxNW2FdLmluZGV4LHQpOyktLXA7eFtwKytdPU1bYV0uaW5kZXh9dmFyIF89W107Zm9yKHU9cC0xO3U+PTA7LS11KV8ucHVzaChuW3hbdV1dKTtyZXR1cm4gX312YXIgZT1PZSxyPVllO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Qobik6KHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQpfSx5YS5nZW9tLnBvbHlnb249ZnVuY3Rpb24obil7cmV0dXJuIHphKG4sY2MpLG59O3ZhciBjYz15YS5nZW9tLnBvbHlnb24ucHJvdG90eXBlPVtdO2NjLmFyZWE9ZnVuY3Rpb24oKXtmb3IodmFyIG4sdD0tMSxlPXRoaXMubGVuZ3RoLHI9dGhpc1tlLTFdLGk9MDsrK3Q8ZTspbj1yLHI9dGhpc1t0XSxpKz1uWzFdKnJbMF0tblswXSpyWzFdO3JldHVybi41Kml9LGNjLmNlbnRyb2lkPWZ1bmN0aW9uKG4pe3ZhciB0LGUscj0tMSxpPXRoaXMubGVuZ3RoLHU9MCxhPTAsbz10aGlzW2ktMV07Zm9yKGFyZ3VtZW50cy5sZW5ndGh8fChuPS0xLyg2KnRoaXMuYXJlYSgpKSk7KytyPGk7KXQ9byxvPXRoaXNbcl0sZT10WzBdKm9bMV0tb1swXSp0WzFdLHUrPSh0WzBdK29bMF0pKmUsYSs9KHRbMV0rb1sxXSkqZTtyZXR1cm5bdSpuLGEqbl19LGNjLmNsaXA9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscixpLHUsYSxvPXNyKG4pLGM9LTEsbD10aGlzLmxlbmd0aC1zcih0aGlzKSxzPXRoaXNbbC0xXTsrK2M8bDspe2Zvcih0PW4uc2xpY2UoKSxuLmxlbmd0aD0wLGk9dGhpc1tjXSx1PXRbKHI9dC5sZW5ndGgtbyktMV0sZT0tMTsrK2U8cjspYT10W2VdLGNyKGEscyxpKT8oY3IodSxzLGkpfHxuLnB1c2gobHIodSxhLHMsaSkpLG4ucHVzaChhKSk6Y3IodSxzLGkpJiZuLnB1c2gobHIodSxhLHMsaSkpLHU9YTtvJiZuLnB1c2goblswXSkscz1pfXJldHVybiBufSx5YS5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKG4pe3ZhciB0PW4ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxlPVtdO3JldHVybiBmcihuLGZ1bmN0aW9uKGUpe3RbZS5yZWdpb24ubC5pbmRleF0ucHVzaChuW2UucmVnaW9uLnIuaW5kZXhdKX0pLHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBpPW5bcl0sdT1pWzBdLGE9aVsxXTt0LmZvckVhY2goZnVuY3Rpb24obil7bi5hbmdsZT1NYXRoLmF0YW4yKG5bMF0tdSxuWzFdLWEpfSksdC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4uYW5nbGUtdC5hbmdsZX0pO2Zvcih2YXIgbz0wLGM9dC5sZW5ndGgtMTtjPm87bysrKWUucHVzaChbaSx0W29dLHRbbysxXV0pfSksZX0seWEuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQobil7dmFyIHQsdSxhLG89bi5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLGM9ZnQoZSksbD1mdChyKSxzPW4ubGVuZ3RoLGY9MWU2O2lmKGM9PT1PZSYmbD09PVllKXQ9bjtlbHNlIGZvcih0PW5ldyBBcnJheShzKSxhPTA7cz5hOysrYSl0W2FdPVsrYy5jYWxsKHRoaXMsdT1uW2FdLGEpLCtsLmNhbGwodGhpcyx1LGEpXTtpZihmcih0LGZ1bmN0aW9uKG4pe3ZhciB0LGUscixpLHUsYTsxPT09bi5hJiZuLmI+PTA/KHQ9bi5lcC5yLGU9bi5lcC5sKToodD1uLmVwLmwsZT1uLmVwLnIpLDE9PT1uLmE/KHU9dD90Lnk6LWYscj1uLmMtbi5iKnUsYT1lP2UueTpmLGk9bi5jLW4uYiphKToocj10P3QueDotZix1PW4uYy1uLmEqcixpPWU/ZS54OmYsYT1uLmMtbi5hKmkpO3ZhciBjPVtyLHVdLGw9W2ksYV07b1tuLnJlZ2lvbi5sLmluZGV4XS5wdXNoKGMsbCksb1tuLnJlZ2lvbi5yLmluZGV4XS5wdXNoKGMsbCl9KSxvPW8ubWFwKGZ1bmN0aW9uKG4sZSl7dmFyIHI9dFtlXVswXSxpPXRbZV1bMV0sdT1uLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5hdGFuMihuWzBdLXIsblsxXS1pKX0pLGE9eWEucmFuZ2Uobi5sZW5ndGgpLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gdVtuXS11W3RdfSk7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIXR8fHVbbl0tdVthW3QtMV1dPldhfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfSl9KSxvLmZvckVhY2goZnVuY3Rpb24obixlKXt2YXIgcj1uLmxlbmd0aDtpZighcilyZXR1cm4gbi5wdXNoKFstZiwtZl0sWy1mLGZdLFtmLGZdLFtmLC1mXSk7aWYoIShyPjIpKXt2YXIgaT10W2VdLHU9blswXSxhPW5bMV0sbz1pWzBdLGM9aVsxXSxsPXVbMF0scz11WzFdLGg9YVswXSxnPWFbMV0scD1NYXRoLmFicyhoLWwpLGQ9Zy1zO2lmKE1hdGguYWJzKGQpPFdhKXt2YXIgbT1zPmM/LWY6ZjtuLnB1c2goWy1mLG1dLFtmLG1dKX1lbHNlIGlmKFdhPnApe3ZhciB2PWw+bz8tZjpmO24ucHVzaChbdiwtZl0sW3YsZl0pfWVsc2V7dmFyIG09KGwtbykqKGctcyk+KGgtbCkqKHMtYyk/ZjotZix5PU1hdGguYWJzKGQpLXA7TWF0aC5hYnMoeSk8V2E/bi5wdXNoKFswPmQ/bTotbSxtXSk6KHk+MCYmKG0qPS0xKSxuLnB1c2goWy1mLG1dLFtmLG1dKSl9fX0pLGkpZm9yKGE9MDtzPmE7KythKWkuY2xpcChvW2FdKTtmb3IoYT0wO3M+YTsrK2Epb1thXS5wb2ludD1uW2FdO3JldHVybiBvfXZhciBlPU9lLHI9WWUsaT1udWxsO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Qobik6KHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaSYmW2lbMF0saVsyXV07aWYobnVsbD09bilpPW51bGw7ZWxzZXt2YXIgZT0rblswXVswXSxyPStuWzBdWzFdLHU9K25bMV1bMF0sYT0rblsxXVsxXTtpPXlhLmdlb20ucG9seWdvbihbW2Uscl0sW2UsYV0sW3UsYV0sW3Uscl1dKX1yZXR1cm4gdH0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAsMF0sbl0pOmkmJmlbMl19LHQubGlua3M9ZnVuY3Rpb24obil7dmFyIHQsaSx1LGE9bi5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pLG89W10sYz1mdChlKSxsPWZ0KHIpLHM9bi5sZW5ndGg7aWYoYz09PU9lJiZsPT09WWUpdD1uO2Vsc2UgZm9yKHQ9bmV3IEFycmF5KHMpLHU9MDtzPnU7Kyt1KXRbdV09WytjLmNhbGwodGhpcyxpPW5bdV0sdSksK2wuY2FsbCh0aGlzLGksdSldO3JldHVybiBmcih0LGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVnaW9uLmwuaW5kZXgscj10LnJlZ2lvbi5yLmluZGV4O2FbZV1bcl18fChhW2VdW3JdPWFbcl1bZV09ITAsby5wdXNoKHtzb3VyY2U6bltlXSx0YXJnZXQ6bltyXX0pKX0pLG99LHQudHJpYW5nbGVzPWZ1bmN0aW9uKG4pe2lmKGU9PT1PZSYmcj09PVllKXJldHVybiB5YS5nZW9tLmRlbGF1bmF5KG4pO2Zvcih2YXIgdCxpPW5ldyBBcnJheShjKSx1PWZ0KGUpLGE9ZnQociksbz0tMSxjPW4ubGVuZ3RoOysrbzxjOykoaVtvXT1bK3UuY2FsbCh0aGlzLHQ9bltvXSxvKSwrYS5jYWxsKHRoaXMsdCxvKV0pLmRhdGE9dDtyZXR1cm4geWEuZ2VvbS5kZWxhdW5heShpKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLmRhdGF9KX0pfSx0KX07dmFyIGxjPXtsOiJyIixyOiJsIn07eWEuZ2VvbS5xdWFkdHJlZT1mdW5jdGlvbihuLHQsZSxyLGkpe2Z1bmN0aW9uIHUobil7ZnVuY3Rpb24gdShuLHQsZSxyLGksdSxhLG8pe2lmKCFpc05hTihlKSYmIWlzTmFOKHIpKWlmKG4ubGVhZil7dmFyIGM9bi54LHM9bi55O2lmKG51bGwhPWMpaWYoTWF0aC5hYnMoYy1lKStNYXRoLmFicyhzLXIpPC4wMSlsKG4sdCxlLHIsaSx1LGEsbyk7ZWxzZXt2YXIgZj1uLnBvaW50O24ueD1uLnk9bi5wb2ludD1udWxsLGwobixmLGMscyxpLHUsYSxvKSxsKG4sdCxlLHIsaSx1LGEsbyl9ZWxzZSBuLng9ZSxuLnk9cixuLnBvaW50PXR9ZWxzZSBsKG4sdCxlLHIsaSx1LGEsbyl9ZnVuY3Rpb24gbChuLHQsZSxyLGksYSxvLGMpe3ZhciBsPS41KihpK28pLHM9LjUqKGErYyksZj1lPj1sLGg9cj49cyxnPShoPDwxKStmO24ubGVhZj0hMSxuPW4ubm9kZXNbZ118fChuLm5vZGVzW2ddPXByKCkpLGY/aT1sOm89bCxoP2E9czpjPXMsdShuLHQsZSxyLGksYSxvLGMpfXZhciBzLGYsaCxnLHAsZCxtLHYseSxNPWZ0KG8pLHg9ZnQoYyk7aWYobnVsbCE9dClkPXQsbT1lLHY9cix5PWk7ZWxzZSBpZih2PXk9LShkPW09MS8wKSxmPVtdLGg9W10scD1uLmxlbmd0aCxhKWZvcihnPTA7cD5nOysrZylzPW5bZ10scy54PGQmJihkPXMueCkscy55PG0mJihtPXMueSkscy54PnYmJih2PXMueCkscy55PnkmJih5PXMueSksZi5wdXNoKHMueCksaC5wdXNoKHMueSk7ZWxzZSBmb3IoZz0wO3A+ZzsrK2cpe3ZhciBiPStNKHM9bltnXSxnKSxfPSt4KHMsZyk7ZD5iJiYoZD1iKSxtPl8mJihtPV8pLGI+diYmKHY9YiksXz55JiYoeT1fKSxmLnB1c2goYiksaC5wdXNoKF8pfXZhciB3PXYtZCxTPXktbTt3PlM/eT1tK3c6dj1kK1M7dmFyIEU9cHIoKTtpZihFLmFkZD1mdW5jdGlvbihuKXt1KEUsbiwrTShuLCsrZyksK3gobixnKSxkLG0sdix5KX0sRS52aXNpdD1mdW5jdGlvbihuKXtkcihuLEUsZCxtLHYseSl9LGc9LTEsbnVsbD09dCl7Zm9yKDsrK2c8cDspdShFLG5bZ10sZltnXSxoW2ddLGQsbSx2LHkpOy0tZ31lbHNlIG4uZm9yRWFjaChFLmFkZCk7cmV0dXJuIGY9aD1uPXM9bnVsbCxFfXZhciBhLG89T2UsYz1ZZTtyZXR1cm4oYT1hcmd1bWVudHMubGVuZ3RoKT8obz1ocixjPWdyLDM9PT1hJiYoaT1lLHI9dCxlPXQ9MCksdShuKSk6KHUueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLHUpOm99LHUueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLHUpOmN9LHUuZXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPWk9bnVsbDoodD0rblswXVswXSxlPStuWzBdWzFdLHI9K25bMV1bMF0saT0rblsxXVsxXSksdSk6bnVsbD09dD9udWxsOltbdCxlXSxbcixpXV19LHUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09bj90PWU9cj1pPW51bGw6KHQ9ZT0wLHI9K25bMF0saT0rblsxXSksdSk6bnVsbD09dD9udWxsOltyLXQsaS1lXX0sdSl9LHlhLmludGVycG9sYXRlUmdiPW1yLHlhLmludGVycG9sYXRlT2JqZWN0PXZyLHlhLmludGVycG9sYXRlTnVtYmVyPXlyLHlhLmludGVycG9sYXRlU3RyaW5nPU1yO3ZhciBzYz0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2c7eWEuaW50ZXJwb2xhdGU9eHIseWEuaW50ZXJwb2xhdG9ycz1bZnVuY3Rpb24obix0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4oInN0cmluZyI9PT1lP2FvLmhhcyh0KXx8L14oI3xyZ2JcKHxoc2xcKCkvLnRlc3QodCk/bXI6TXI6dCBpbnN0YW5jZW9mIEY/bXI6Im9iamVjdCI9PT1lP0FycmF5LmlzQXJyYXkodCk/YnI6dnI6eXIpKG4sdCl9XSx5YS5pbnRlcnBvbGF0ZUFycmF5PWJyO3ZhciBmYz1mdW5jdGlvbigpe3JldHVybiBodH0saGM9eWEubWFwKHtsaW5lYXI6ZmMscG9seTpOcixxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIEVyfSxjdWJpYzpmdW5jdGlvbigpe3JldHVybiBrcn0sc2luOmZ1bmN0aW9uKCl7cmV0dXJuIHFyfSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gVHJ9LGNpcmNsZTpmdW5jdGlvbigpe3JldHVybiBDcn0sZWxhc3RpYzp6cixiYWNrOkRyLGJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBqcn19KSxnYz15YS5tYXAoeyJpbiI6aHQsb3V0OndyLCJpbi1vdXQiOlNyLCJvdXQtaW4iOmZ1bmN0aW9uKG4pe3JldHVybiBTcih3cihuKSl9fSk7eWEuZWFzZT1mdW5jdGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIi0iKSxlPXQ+PTA/bi5zdWJzdHJpbmcoMCx0KTpuLHI9dD49MD9uLnN1YnN0cmluZyh0KzEpOiJpbiI7cmV0dXJuIGU9aGMuZ2V0KGUpfHxmYyxyPWdjLmdldChyKXx8aHQsX3IocihlLmFwcGx5KG51bGwsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSkpfSx5YS5pbnRlcnBvbGF0ZUhjbD1Mcix5YS5pbnRlcnBvbGF0ZUhzbD1Icix5YS5pbnRlcnBvbGF0ZUxhYj1Gcix5YS5pbnRlcnBvbGF0ZVJvdW5kPVByLHlhLnRyYW5zZm9ybT1mdW5jdGlvbihuKXt2YXIgdD1NYS5jcmVhdGVFbGVtZW50TlMoeWEubnMucHJlZml4LnN2ZywiZyIpO3JldHVybih5YS50cmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgT3IoZT9lLm1hdHJpeDpwYyl9KShuKX0sT3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBwYz17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O3lhLmludGVycG9sYXRlVHJhbnNmb3JtPUlyLHlhLmxheW91dD17fSx5YS5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQucHVzaChacihuW2VdKSk7cmV0dXJuIHR9fSx5YS5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG4sbCxmLGgsZyxwPXt9LGQ9W10sbT15YS5yYW5nZSh1KSx2PVtdO2ZvcihlPVtdLHI9W10sbj0wLGg9LTE7KytoPHU7KXtmb3IobD0wLGc9LTE7KytnPHU7KWwrPWlbaF1bZ107ZC5wdXNoKGwpLHYucHVzaCh5YS5yYW5nZSh1KSksbis9bH1mb3IoYSYmbS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGEoZFtuXSxkW3RdKX0pLG8mJnYuZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29ydChmdW5jdGlvbihuLGUpe3JldHVybiBvKGlbdF1bbl0saVt0XVtlXSl9KX0pLG49KDIqJGEtcyp1KS9uLGw9MCxoPS0xOysraDx1Oyl7Zm9yKGY9bCxnPS0xOysrZzx1Oyl7dmFyIHk9bVtoXSxNPXZbeV1bZ10seD1pW3ldW01dLGI9bCxfPWwrPXgqbjtwW3krIi0iK01dPXtpbmRleDp5LHN1YmluZGV4Ok0sc3RhcnRBbmdsZTpiLGVuZEFuZ2xlOl8sdmFsdWU6eH19clt5XT17aW5kZXg6eSxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6bCx2YWx1ZToobC1mKS9ufSxsKz1zfWZvcihoPS0xOysraDx1Oylmb3IoZz1oLTE7KytnPHU7KXt2YXIgdz1wW2grIi0iK2ddLFM9cFtnKyItIitoXTsody52YWx1ZXx8Uy52YWx1ZSkmJmUucHVzaCh3LnZhbHVlPFMudmFsdWU/e3NvdXJjZTpTLHRhcmdldDp3fTp7c291cmNlOncsdGFyZ2V0OlN9KX1jJiZ0KCl9ZnVuY3Rpb24gdCgpe2Uuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBjKChuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSkvMiwodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUpLzIpfSl9dmFyIGUscixpLHUsYSxvLGMsbD17fSxzPTA7cmV0dXJuIGwubWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PShpPW4pJiZpLmxlbmd0aCxlPXI9bnVsbCxsKTppfSxsLnBhZGRpbmc9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bixlPXI9bnVsbCxsKTpzfSxsLnNvcnRHcm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bixlPXI9bnVsbCxsKTphfSxsLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bixlPW51bGwsbCk6b30sbC5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4sZSYmdCgpLGwpOmN9LGwuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fG4oKSxlfSxsLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHxuKCkscn0sbH0seWEubGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSl7aWYodC5wb2ludCE9PW4pe3ZhciB1PXQuY3gtbi54LGE9dC5jeS1uLnksbz0xL01hdGguc3FydCh1KnUrYSphKTtpZihkPihpLWUpKm8pe3ZhciBjPXQuY2hhcmdlKm8qbztyZXR1cm4gbi5weC09dSpjLG4ucHktPWEqYywhMH1pZih0LnBvaW50JiZpc0Zpbml0ZShvKSl7dmFyIGM9dC5wb2ludENoYXJnZSpvKm87bi5weC09dSpjLG4ucHktPWEqY319cmV0dXJuIXQuY2hhcmdlfX1mdW5jdGlvbiB0KG4pe24ucHg9eWEuZXZlbnQueCxuLnB5PXlhLmV2ZW50Lnksby5yZXN1bWUoKX12YXIgZSxyLGksdSxhLG89e30sYz15YS5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIiksbD1bMSwxXSxzPS45LGY9ZGMsaD1tYyxnPS0zMCxwPS4xLGQ9LjgsbT1bXSx2PVtdO3JldHVybiBvLnRpY2s9ZnVuY3Rpb24oKXtpZigocio9Ljk5KTwuMDA1KXJldHVybiBjLmVuZCh7dHlwZToiZW5kIixhbHBoYTpyPTB9KSwhMDt2YXIgdCxlLG8sZixoLGQseSxNLHgsYj1tLmxlbmd0aCxfPXYubGVuZ3RoO2ZvcihlPTA7Xz5lOysrZSlvPXZbZV0sZj1vLnNvdXJjZSxoPW8udGFyZ2V0LE09aC54LWYueCx4PWgueS1mLnksKGQ9TSpNK3gqeCkmJihkPXIqdVtlXSooKGQ9TWF0aC5zcXJ0KGQpKS1pW2VdKS9kLE0qPWQseCo9ZCxoLngtPU0qKHk9Zi53ZWlnaHQvKGgud2VpZ2h0K2Yud2VpZ2h0KSksaC55LT14KnksZi54Kz1NKih5PTEteSksZi55Kz14KnkpO2lmKCh5PXIqcCkmJihNPWxbMF0vMix4PWxbMV0vMixlPS0xLHkpKWZvcig7KytlPGI7KW89bVtlXSxvLngrPShNLW8ueCkqeSxvLnkrPSh4LW8ueSkqeTtpZihnKWZvcihRcih0PXlhLmdlb20ucXVhZHRyZWUobSkscixhKSxlPS0xOysrZTxiOykobz1tW2VdKS5maXhlZHx8dC52aXNpdChuKG8pKTtmb3IoZT0tMTsrK2U8Yjspbz1tW2VdLG8uZml4ZWQ/KG8ueD1vLnB4LG8ueT1vLnB5KTooby54LT0oby5weC0oby5weD1vLngpKSpzLG8ueS09KG8ucHktKG8ucHk9by55KSkqcyk7Yy50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpyfSl9LG8ubm9kZXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bixvKTptfSxvLmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PW4sbyk6dn0sby5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4sbyk6bH0sby5saW5rRGlzdGFuY2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjorbixvKTpmfSxvLmRpc3RhbmNlPW8ubGlua0Rpc3RhbmNlLG8ubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sbyk6aH0sby5mcmljdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rbixvKTpzfSxvLmNoYXJnZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLG8pOmd9LG8uZ3Jhdml0eT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rbixvKTpwfSxvLnRoZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPStuLG8pOmR9LG8uYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K24scj9yPW4+MD9uOjA6bj4wJiYoYy5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOnI9bn0pLHlhLnRpbWVyKG8udGljaykpLG8pOnJ9LG8uc3RhcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4scil7Zm9yKHZhciBpLHU9dChlKSxhPS0xLG89dS5sZW5ndGg7KythPG87KWlmKCFpc05hTihpPXVbYV1bbl0pKXJldHVybiBpO3JldHVybiBNYXRoLnJhbmRvbSgpKnJ9ZnVuY3Rpb24gdCgpe2lmKCFjKXtmb3IoYz1bXSxyPTA7cD5yOysrciljW3JdPVtdO2ZvcihyPTA7ZD5yOysrcil7dmFyIG49dltyXTtjW24uc291cmNlLmluZGV4XS5wdXNoKG4udGFyZ2V0KSxjW24udGFyZ2V0LmluZGV4XS5wdXNoKG4uc291cmNlKX19cmV0dXJuIGNbZV19dmFyIGUscixjLHMscD1tLmxlbmd0aCxkPXYubGVuZ3RoLHk9bFswXSxNPWxbMV07Zm9yKGU9MDtwPmU7KytlKShzPW1bZV0pLmluZGV4PWUscy53ZWlnaHQ9MDtmb3IoZT0wO2Q+ZTsrK2Upcz12W2VdLCJudW1iZXIiPT10eXBlb2Ygcy5zb3VyY2UmJihzLnNvdXJjZT1tW3Muc291cmNlXSksIm51bWJlciI9PXR5cGVvZiBzLnRhcmdldCYmKHMudGFyZ2V0PW1bcy50YXJnZXRdKSwrK3Muc291cmNlLndlaWdodCwrK3MudGFyZ2V0LndlaWdodDtmb3IoZT0wO3A+ZTsrK2Upcz1tW2VdLGlzTmFOKHMueCkmJihzLng9bigieCIseSkpLGlzTmFOKHMueSkmJihzLnk9bigieSIsTSkpLGlzTmFOKHMucHgpJiYocy5weD1zLngpLGlzTmFOKHMucHkpJiYocy5weT1zLnkpO2lmKGk9W10sImZ1bmN0aW9uIj09dHlwZW9mIGYpZm9yKGU9MDtkPmU7KytlKWlbZV09K2YuY2FsbCh0aGlzLHZbZV0sZSk7ZWxzZSBmb3IoZT0wO2Q+ZTsrK2UpaVtlXT1mO2lmKHU9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9yKGU9MDtkPmU7KytlKXVbZV09K2guY2FsbCh0aGlzLHZbZV0sZSk7ZWxzZSBmb3IoZT0wO2Q+ZTsrK2UpdVtlXT1oO2lmKGE9W10sImZ1bmN0aW9uIj09dHlwZW9mIGcpZm9yKGU9MDtwPmU7KytlKWFbZV09K2cuY2FsbCh0aGlzLG1bZV0sZSk7ZWxzZSBmb3IoZT0wO3A+ZTsrK2UpYVtlXT1nO3JldHVybiBvLnJlc3VtZSgpfSxvLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBvLmFscGhhKC4xKX0sby5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIG8uYWxwaGEoMCl9LG8uZHJhZz1mdW5jdGlvbigpe3JldHVybiBlfHwoZT15YS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGh0KS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixXcikub24oImRyYWcuZm9yY2UiLHQpLm9uKCJkcmFnZW5kLmZvcmNlIixKcikpLGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsR3IpLm9uKCJtb3VzZW91dC5mb3JjZSIsS3IpLmNhbGwoZSksdm9pZCAwKTplfSx5YS5yZWJpbmQobyxjLCJvbiIpfTt2YXIgZGM9MjAsbWM9MTt5YS5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGEsbyl7dmFyIGM9aS5jYWxsKGUsdCxhKTtpZih0LmRlcHRoPWEsby5wdXNoKHQpLGMmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLHMsZj0tMSxoPXQuY2hpbGRyZW49W10sZz0wLHA9YSsxOysrZjxsOylzPW4oY1tmXSxwLG8pLHMucGFyZW50PXQsaC5wdXNoKHMpLGcrPXMudmFsdWU7ciYmaC5zb3J0KHIpLHUmJih0LnZhbHVlPWcpfWVsc2UgdSYmKHQudmFsdWU9K3UuY2FsbChlLHQsYSl8fDApO3JldHVybiB0fWZ1bmN0aW9uIHQobixyKXt2YXIgaT1uLmNoaWxkcmVuLGE9MDtpZihpJiYobz1pLmxlbmd0aCkpZm9yKHZhciBvLGM9LTEsbD1yKzE7KytjPG87KWErPXQoaVtjXSxsKTtlbHNlIHUmJihhPSt1LmNhbGwoZSxuLHIpfHwwKTtyZXR1cm4gdSYmKG4udmFsdWU9YSksYX1mdW5jdGlvbiBlKHQpe3ZhciBlPVtdO3JldHVybiBuKHQsMCxlKSxlfXZhciByPXJpLGk9dGksdT1laTtyZXR1cm4gZS5zb3J0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sZSk6cn0sZS5jaGlsZHJlbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLGUpOml9LGUudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bixlKTp1fSxlLnJldmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIHQobiwwKSxufSxlfSx5YS5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUscixpKXt2YXIgdT10LmNoaWxkcmVuO2lmKHQueD1lLHQueT10LmRlcHRoKmksdC5keD1yLHQuZHk9aSx1JiYoYT11Lmxlbmd0aCkpe3ZhciBhLG8sYyxsPS0xO2ZvcihyPXQudmFsdWU/ci90LnZhbHVlOjA7KytsPGE7KW4obz11W2xdLGUsYz1vLnZhbHVlKnIsaSksZSs9Y319ZnVuY3Rpb24gdChuKXt2YXIgZT1uLmNoaWxkcmVuLHI9MDtpZihlJiYoaT1lLmxlbmd0aCkpZm9yKHZhciBpLHU9LTE7Kyt1PGk7KXI9TWF0aC5tYXgocix0KGVbdV0pKTtyZXR1cm4gMStyfWZ1bmN0aW9uIGUoZSx1KXt2YXIgYT1yLmNhbGwodGhpcyxlLHUpO3JldHVybiBuKGFbMF0sMCxpWzBdLGlbMV0vdChhWzBdKSksYX12YXIgcj15YS5sYXlvdXQuaGllcmFyY2h5KCksaT1bMSwxXTtyZXR1cm4gZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW4sZSk6aX0sbmkoZSxyKX0seWEubGF5b3V0LnBpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odSl7dmFyIGE9dS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4rdC5jYWxsKG4sZSxyKX0pLG89KygiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyKSxjPSgoImZ1bmN0aW9uIj09dHlwZW9mIGk/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aSktbykveWEuc3VtKGEpLGw9eWEucmFuZ2UodS5sZW5ndGgpO251bGwhPWUmJmwuc29ydChlPT09dmM/ZnVuY3Rpb24obix0KXtyZXR1cm4gYVt0XS1hW25dfTpmdW5jdGlvbihuLHQpe3JldHVybiBlKHVbbl0sdVt0XSl9KTt2YXIgcz1bXTtyZXR1cm4gbC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0O3Nbbl09e2RhdGE6dVtuXSx2YWx1ZTp0PWFbbl0sc3RhcnRBbmdsZTpvLGVuZEFuZ2xlOm8rPXQqY319KSxzfXZhciB0PU51bWJlcixlPXZjLHI9MCxpPTIqJGE7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbn07dmFyIHZjPXt9O3lhLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obyxjKXt2YXIgbD1vLm1hcChmdW5jdGlvbihlLHIpe3JldHVybiB0LmNhbGwobixlLHIpfSkscz1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdS5jYWxsKG4sdCxlKSxhLmNhbGwobix0LGUpXX0pfSksZj1lLmNhbGwobixzLGMpO2w9eWEucGVybXV0ZShsLGYpLHM9eWEucGVybXV0ZShzLGYpO3ZhciBoLGcscCxkPXIuY2FsbChuLHMsYyksbT1sLmxlbmd0aCx2PWxbMF0ubGVuZ3RoO2ZvcihnPTA7dj5nOysrZylmb3IoaS5jYWxsKG4sbFswXVtnXSxwPWRbZ10sc1swXVtnXVsxXSksaD0xO20+aDsrK2gpaS5jYWxsKG4sbFtoXVtnXSxwKz1zW2gtMV1bZ11bMV0sc1toXVtnXVsxXSk7cmV0dXJuIG99dmFyIHQ9aHQsZT1jaSxyPWxpLGk9b2ksdT11aSxhPWFpO3JldHVybiBuLnZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4ub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5Yy5nZXQodCl8fGNpLG4pOmV9LG4ub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TWMuZ2V0KHQpfHxsaSxuKTpyfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxuKTphfSxuLm91dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG4pOml9LG59O3ZhciB5Yz15YS5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihuKXt2YXIgdCxlLHI9bi5sZW5ndGgsaT1uLm1hcChzaSksdT1uLm1hcChmaSksYT15YS5yYW5nZShyKS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGlbbl0taVt0XX0pLG89MCxjPTAsbD1bXSxzPVtdO2Zvcih0PTA7cj50OysrdCllPWFbdF0sYz5vPyhvKz11W2VdLGwucHVzaChlKSk6KGMrPXVbZV0scy5wdXNoKGUpKTtyZXR1cm4gcy5yZXZlcnNlKCkuY29uY2F0KGwpfSxyZXZlcnNlOmZ1bmN0aW9uKG4pe3JldHVybiB5YS5yYW5nZShuLmxlbmd0aCkucmV2ZXJzZSgpfSwiZGVmYXVsdCI6Y2l9KSxNYz15YS5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24obil7dmFyIHQsZSxyLGk9bi5sZW5ndGgsdT1uWzBdLmxlbmd0aCxhPVtdLG89MCxjPVtdO2ZvcihlPTA7dT5lOysrZSl7Zm9yKHQ9MCxyPTA7aT50O3QrKylyKz1uW3RdW2VdWzFdO3I+byYmKG89ciksYS5wdXNoKHIpfWZvcihlPTA7dT5lOysrZSljW2VdPShvLWFbZV0pLzI7cmV0dXJuIGN9LHdpZ2dsZTpmdW5jdGlvbihuKXt2YXIgdCxlLHIsaSx1LGEsbyxjLGwscz1uLmxlbmd0aCxmPW5bMF0saD1mLmxlbmd0aCxnPVtdO2ZvcihnWzBdPWM9bD0wLGU9MTtoPmU7KytlKXtmb3IodD0wLGk9MDtzPnQ7Kyt0KWkrPW5bdF1bZV1bMV07Zm9yKHQ9MCx1PTAsbz1mW2VdWzBdLWZbZS0xXVswXTtzPnQ7Kyt0KXtmb3Iocj0wLGE9KG5bdF1bZV1bMV0tblt0XVtlLTFdWzFdKS8oMipvKTt0PnI7KytyKWErPShuW3JdW2VdWzFdLW5bcl1bZS0xXVsxXSkvbzt1Kz1hKm5bdF1bZV1bMV19Z1tlXT1jLT1pP3UvaSpvOjAsbD5jJiYobD1jKX1mb3IoZT0wO2g+ZTsrK2UpZ1tlXS09bDtyZXR1cm4gZ30sZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciB0LGUscixpPW4ubGVuZ3RoLHU9blswXS5sZW5ndGgsYT0xL2ksbz1bXTtmb3IoZT0wO3U+ZTsrK2Upe2Zvcih0PTAscj0wO2k+dDt0Kyspcis9blt0XVtlXVsxXTtpZihyKWZvcih0PTA7aT50O3QrKyluW3RdW2VdWzFdLz1yO2Vsc2UgZm9yKHQ9MDtpPnQ7dCsrKW5bdF1bZV1bMV09YX1mb3IoZT0wO3U+ZTsrK2Upb1tlXT0wO3JldHVybiBvfSx6ZXJvOmxpfSk7eWEubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix1KXtmb3IodmFyIGEsbyxjPVtdLGw9bi5tYXAoZSx0aGlzKSxzPXIuY2FsbCh0aGlzLGwsdSksZj1pLmNhbGwodGhpcyxzLGwsdSksdT0tMSxoPWwubGVuZ3RoLGc9Zi5sZW5ndGgtMSxwPXQ/MToxL2g7Kyt1PGc7KWE9Y1t1XT1bXSxhLmR4PWZbdSsxXS0oYS54PWZbdV0pLGEueT0wO2lmKGc+MClmb3IodT0tMTsrK3U8aDspbz1sW3VdLG8+PXNbMF0mJm88PXNbMV0mJihhPWNbeWEuYmlzZWN0KGYsbywxLGcpLTFdLGEueSs9cCxhLnB1c2goblt1XSkpO3JldHVybiBjfXZhciB0PSEwLGU9TnVtYmVyLHI9ZGksaT1naTtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZnQodCksbik6cn0sbi5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihuKXtyZXR1cm4gcGkobix0KX06ZnQodCksbik6aX0sbi5mcmVxdWVuY3k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFlLG4pOnR9LG59LHlhLmxheW91dC50cmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe2Z1bmN0aW9uIGEobix0KXt2YXIgcj1uLmNoaWxkcmVuLGk9bi5fdHJlZTtpZihyJiYodT1yLmxlbmd0aCkpe2Zvcih2YXIgdSxvLGwscz1yWzBdLGY9cyxoPS0xOysraDx1OylsPXJbaF0sYShsLG8pLGY9YyhsLG8sZiksbz1sO1NpKG4pO3ZhciBnPS41KihzLl90cmVlLnByZWxpbStsLl90cmVlLnByZWxpbSk7dD8oaS5wcmVsaW09dC5fdHJlZS5wcmVsaW0rZShuLHQpLGkubW9kPWkucHJlbGltLWcpOmkucHJlbGltPWd9ZWxzZSB0JiYoaS5wcmVsaW09dC5fdHJlZS5wcmVsaW0rZShuLHQpKX1mdW5jdGlvbiBvKG4sdCl7bi54PW4uX3RyZWUucHJlbGltK3Q7dmFyIGU9bi5jaGlsZHJlbjtpZihlJiYocj1lLmxlbmd0aCkpe3ZhciByLGk9LTE7Zm9yKHQrPW4uX3RyZWUubW9kOysraTxyOylvKGVbaV0sdCl9fWZ1bmN0aW9uIGMobix0LHIpe2lmKHQpe2Zvcih2YXIgaSx1PW4sYT1uLG89dCxjPW4ucGFyZW50LmNoaWxkcmVuWzBdLGw9dS5fdHJlZS5tb2Qscz1hLl90cmVlLm1vZCxmPW8uX3RyZWUubW9kLGg9Yy5fdHJlZS5tb2Q7bz15aShvKSx1PXZpKHUpLG8mJnU7KWM9dmkoYyksYT15aShhKSxhLl90cmVlLmFuY2VzdG9yPW4saT1vLl90cmVlLnByZWxpbStmLXUuX3RyZWUucHJlbGltLWwrZShvLHUpLGk+MCYmKEVpKGtpKG8sbixyKSxuLGkpLGwrPWkscys9aSksZis9by5fdHJlZS5tb2QsbCs9dS5fdHJlZS5tb2QsaCs9Yy5fdHJlZS5tb2Qscys9YS5fdHJlZS5tb2Q7byYmIXlpKGEpJiYoYS5fdHJlZS50aHJlYWQ9byxhLl90cmVlLm1vZCs9Zi1zKSx1JiYhdmkoYykmJihjLl90cmVlLnRocmVhZD11LGMuX3RyZWUubW9kKz1sLWgscj1uKX1yZXR1cm4gcn12YXIgbD10LmNhbGwodGhpcyxuLHUpLHM9bFswXTt3aShzLGZ1bmN0aW9uKG4sdCl7bi5fdHJlZT17YW5jZXN0b3I6bixwcmVsaW06MCxtb2Q6MCxjaGFuZ2U6MCxzaGlmdDowLG51bWJlcjp0P3QuX3RyZWUubnVtYmVyKzE6MH19KSxhKHMpLG8ocywtcy5fdHJlZS5wcmVsaW0pO3ZhciBmPU1pKHMsYmkpLGg9TWkocyx4aSksZz1NaShzLF9pKSxwPWYueC1lKGYsaCkvMixkPWgueCtlKGgsZikvMixtPWcuZGVwdGh8fDE7cmV0dXJuIHdpKHMsaT9mdW5jdGlvbihuKXtuLngqPXJbMF0sbi55PW4uZGVwdGgqclsxXSxkZWxldGUgbi5fdHJlZX06ZnVuY3Rpb24obil7bi54PShuLngtcCkvKGQtcCkqclswXSxuLnk9bi5kZXB0aC9tKnJbMV0sZGVsZXRlIG4uX3RyZWV9KSxsfXZhciB0PXlhLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLGU9bWkscj1bMSwxXSxpPSExO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KHI9dCksbik6aT9udWxsOnJ9LG4ubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbCE9KHI9dCksbik6aT9yOm51bGx9LG5pKG4sdCl9LHlhLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBhPWUuY2FsbCh0aGlzLG4sdSksbz1hWzBdLGM9aVswXSxsPWlbMV0scz1udWxsPT10P01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O2lmKG8ueD1vLnk9MCx3aShvLGZ1bmN0aW9uKG4pe24ucj0rcyhuLnZhbHVlKX0pLHdpKG8sQ2kpLHIpe3ZhciBmPXIqKHQ/MTpNYXRoLm1heCgyKm8uci9jLDIqby5yL2wpKS8yO3dpKG8sZnVuY3Rpb24obil7bi5yKz1mfSksd2kobyxDaSksd2kobyxmdW5jdGlvbihuKXtuLnItPWZ9KX1yZXR1cm4gamkobyxjLzIsbC8yLHQ/MToxL01hdGgubWF4KDIqby5yL2MsMipvLnIvbCkpLGF9dmFyIHQsZT15YS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChBaSkscj0wLGk9WzEsMV07cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG4pOml9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6K2Usbik6dH0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG4pOnJ9LG5pKG4sZSl9LHlhLmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBhLG89dC5jYWxsKHRoaXMsbix1KSxjPW9bMF0sbD0wO3dpKGMsZnVuY3Rpb24obil7dmFyIHQ9bi5jaGlsZHJlbjt0JiZ0Lmxlbmd0aD8obi54PUZpKHQpLG4ueT1IaSh0KSk6KG4ueD1hP2wrPWUobixhKTowLG4ueT0wLGE9bil9KTt2YXIgcz1QaShjKSxmPU9pKGMpLGg9cy54LWUocyxmKS8yLGc9Zi54K2UoZixzKS8yO3JldHVybiB3aShjLGk/ZnVuY3Rpb24obil7bi54PShuLngtYy54KSpyWzBdLG4ueT0oYy55LW4ueSkqclsxXX06ZnVuY3Rpb24obil7bi54PShuLngtaCkvKGctaCkqclswXSxuLnk9KDEtKGMueT9uLnkvYy55OjEpKSpyWzFdfSksb312YXIgdD15YS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxlPW1pLHI9WzEsMV0saT0hMTtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShyPXQpLG4pOmk/bnVsbDpyfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShyPXQpLG4pOmk/cjpudWxsfSxuaShuLHQpfSx5YS5sYXlvdXQudHJlZW1hcD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXtmb3IodmFyIGUscixpPS0xLHU9bi5sZW5ndGg7KytpPHU7KXI9KGU9bltpXSkudmFsdWUqKDA+dD8wOnQpLGUuYXJlYT1pc05hTihyKXx8MD49cj8wOnJ9ZnVuY3Rpb24gdChlKXt2YXIgdT1lLmNoaWxkcmVuO2lmKHUmJnUubGVuZ3RoKXt2YXIgYSxvLGMsbD1mKGUpLHM9W10saD11LnNsaWNlKCkscD0xLzAsZD0ic2xpY2UiPT09Zz9sLmR4OiJkaWNlIj09PWc/bC5keToic2xpY2UtZGljZSI9PT1nPzEmZS5kZXB0aD9sLmR5OmwuZHg6TWF0aC5taW4obC5keCxsLmR5KTtmb3IobihoLGwuZHgqbC5keS9lLnZhbHVlKSxzLmFyZWE9MDsoYz1oLmxlbmd0aCk+MDspcy5wdXNoKGE9aFtjLTFdKSxzLmFyZWErPWEuYXJlYSwic3F1YXJpZnkiIT09Z3x8KG89cihzLGQpKTw9cD8oaC5wb3AoKSxwPW8pOihzLmFyZWEtPXMucG9wKCkuYXJlYSxpKHMsZCxsLCExKSxkPU1hdGgubWluKGwuZHgsbC5keSkscy5sZW5ndGg9cy5hcmVhPTAscD0xLzApO3MubGVuZ3RoJiYoaShzLGQsbCwhMCkscy5sZW5ndGg9cy5hcmVhPTApLHUuZm9yRWFjaCh0KX19ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuO2lmKHImJnIubGVuZ3RoKXt2YXIgdSxhPWYodCksbz1yLnNsaWNlKCksYz1bXTtmb3IobihvLGEuZHgqYS5keS90LnZhbHVlKSxjLmFyZWE9MDt1PW8ucG9wKCk7KWMucHVzaCh1KSxjLmFyZWErPXUuYXJlYSxudWxsIT11LnomJihpKGMsdS56P2EuZHg6YS5keSxhLCFvLmxlbmd0aCksYy5sZW5ndGg9Yy5hcmVhPTApO3IuZm9yRWFjaChlKX19ZnVuY3Rpb24gcihuLHQpe2Zvcih2YXIgZSxyPW4uYXJlYSxpPTAsdT0xLzAsYT0tMSxvPW4ubGVuZ3RoOysrYTxvOykoZT1uW2FdLmFyZWEpJiYodT5lJiYodT1lKSxlPmkmJihpPWUpKTtyZXR1cm4gcio9cix0Kj10LHI/TWF0aC5tYXgodCppKnAvcixyLyh0KnUqcCkpOjEvMH1mdW5jdGlvbiBpKG4sdCxlLHIpe3ZhciBpLHU9LTEsYT1uLmxlbmd0aCxvPWUueCxsPWUueSxzPXQ/YyhuLmFyZWEvdCk6MDtpZih0PT1lLmR4KXtmb3IoKHJ8fHM+ZS5keSkmJihzPWUuZHkpOysrdTxhOylpPW5bdV0saS54PW8saS55PWwsaS5keT1zLG8rPWkuZHg9TWF0aC5taW4oZS54K2UuZHgtbyxzP2MoaS5hcmVhL3MpOjApO2kuej0hMCxpLmR4Kz1lLngrZS5keC1vLGUueSs9cyxlLmR5LT1zfWVsc2V7Zm9yKChyfHxzPmUuZHgpJiYocz1lLmR4KTsrK3U8YTspaT1uW3VdLGkueD1vLGkueT1sLGkuZHg9cyxsKz1pLmR5PU1hdGgubWluKGUueStlLmR5LWwscz9jKGkuYXJlYS9zKTowKTtpLno9ITEsaS5keSs9ZS55K2UuZHktbCxlLngrPXMsZS5keC09c319ZnVuY3Rpb24gdShyKXt2YXIgaT1hfHxvKHIpLHU9aVswXTtyZXR1cm4gdS54PTAsdS55PTAsdS5keD1sWzBdLHUuZHk9bFsxXSxhJiZvLnJldmFsdWUodSksbihbdV0sdS5keCp1LmR5L3UudmFsdWUpLChhP2U6dCkodSksaCYmKGE9aSksaX12YXIgYSxvPXlhLmxheW91dC5oaWVyYXJjaHkoKSxjPU1hdGgucm91bmQsbD1bMSwxXSxzPW51bGwsZj1ZaSxoPSExLGc9InNxdWFyaWZ5IixwPS41KigxK01hdGguc3FydCg1KSk7cmV0dXJuIHUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1uLHUpOmx9LHUucGFkZGluZz1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPW4uY2FsbCh1LHQsdC5kZXB0aCk7cmV0dXJuIG51bGw9PWU/WWkodCk6UmkodCwibnVtYmVyIj09dHlwZW9mIGU/W2UsZSxlLGVdOmUpfWZ1bmN0aW9uIGUodCl7cmV0dXJuIFJpKHQsbil9aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHM7dmFyIHI7cmV0dXJuIGY9bnVsbD09KHM9bik/WWk6ImZ1bmN0aW9uIj09KHI9dHlwZW9mIG4pP3Q6Im51bWJlciI9PT1yPyhuPVtuLG4sbixuXSxlKTplLHV9LHUucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bj9NYXRoLnJvdW5kOk51bWJlcix1KTpjIT1OdW1iZXJ9LHUuc3RpY2t5PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPW4sYT1udWxsLHUpOmh9LHUucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bix1KTpwfSx1Lm1vZGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9bisiIix1KTpnfSxuaSh1LG8pfSx5YS5yYW5kb209e25vcm1hbDpmdW5jdGlvbihuLHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIDI+ZSYmKHQ9MSksMT5lJiYobj0wKSxmdW5jdGlvbigpe3ZhciBlLHIsaTtkbyBlPTIqTWF0aC5yYW5kb20oKS0xLHI9MipNYXRoLnJhbmRvbSgpLTEsaT1lKmUrcipyO3doaWxlKCFpfHxpPjEpO3JldHVybiBuK3QqZSpNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fSxsb2dOb3JtYWw6ZnVuY3Rpb24oKXt2YXIgbj15YS5yYW5kb20ubm9ybWFsLmFwcGx5KHlhLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKG4oKSl9fSxpcndpbkhhbGw6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wO24+ZTtlKyspdCs9TWF0aC5yYW5kb20oKTtyZXR1cm4gdC9ufX19LHlhLnNjYWxlPXt9O3ZhciB4Yz17Zmxvb3I6aHQsY2VpbDpodH07eWEuc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuICRpKFswLDFdLFswLDFdLHhyLCExKX0seWEuc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIHR1KHlhLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxNYXRoLkxOMTBdKSwxMCxldSxydSxbMSwxMF0pfTt2YXIgYmM9eWEuZm9ybWF0KCIuMGUiKTt5YS5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gYXUoeWEuc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHlhLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4geWEuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx5YS5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGN1KFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHlhLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4geWEuc2NhbGUub3JkaW5hbCgpLnJhbmdlKF9jKX0seWEuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB5YS5zY2FsZS5vcmRpbmFsKCkucmFuZ2Uod2MpfSx5YS5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiB5YS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU2MpfSx5YS5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB5YS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRWMpfTt2YXIgX2M9WyIjMWY3N2I0IiwiI2ZmN2YwZSIsIiMyY2EwMmMiLCIjZDYyNzI4IiwiIzk0NjdiZCIsIiM4YzU2NGIiLCIjZTM3N2MyIiwiIzdmN2Y3ZiIsIiNiY2JkMjIiLCIjMTdiZWNmIl0sd2M9WyIjMWY3N2I0IiwiI2FlYzdlOCIsIiNmZjdmMGUiLCIjZmZiYjc4IiwiIzJjYTAyYyIsIiM5OGRmOGEiLCIjZDYyNzI4IiwiI2ZmOTg5NiIsIiM5NDY3YmQiLCIjYzViMGQ1IiwiIzhjNTY0YiIsIiNjNDljOTQiLCIjZTM3N2MyIiwiI2Y3YjZkMiIsIiM3ZjdmN2YiLCIjYzdjN2M3IiwiI2JjYmQyMiIsIiNkYmRiOGQiLCIjMTdiZWNmIiwiIzllZGFlNSJdLFNjPVsiIzM5M2I3OSIsIiM1MjU0YTMiLCIjNmI2ZWNmIiwiIzljOWVkZSIsIiM2Mzc5MzkiLCIjOGNhMjUyIiwiI2I1Y2Y2YiIsIiNjZWRiOWMiLCIjOGM2ZDMxIiwiI2JkOWUzOSIsIiNlN2JhNTIiLCIjZTdjYjk0IiwiIzg0M2MzOSIsIiNhZDQ5NGEiLCIjZDY2MTZiIiwiI2U3OTY5YyIsIiM3YjQxNzMiLCIjYTU1MTk0IiwiI2NlNmRiZCIsIiNkZTllZDYiXSxFYz1bIiMzMTgyYmQiLCIjNmJhZWQ2IiwiIzllY2FlMSIsIiNjNmRiZWYiLCIjZTY1NTBkIiwiI2ZkOGQzYyIsIiNmZGFlNmIiLCIjZmRkMGEyIiwiIzMxYTM1NCIsIiM3NGM0NzYiLCIjYTFkOTliIiwiI2M3ZTljMCIsIiM3NTZiYjEiLCIjOWU5YWM4IiwiI2JjYmRkYyIsIiNkYWRhZWIiLCIjNjM2MzYzIiwiIzk2OTY5NiIsIiNiZGJkYmQiLCIjZDlkOWQ5Il07eWEuc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gbHUoW10sW10pfSx5YS5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBzdSgwLDEsWzAsMV0pfSx5YS5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnUoWy41XSxbMCwxXSl9LHlhLnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGh1KFswLDFdKX0seWEuc3ZnLmFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykra2Msbz1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKStrYyxjPShhPm8mJihjPWEsYT1vLG89Yyksby1hKSxsPSRhPmM/IjAiOiIxIixzPU1hdGguY29zKGEpLGY9TWF0aC5zaW4oYSksaD1NYXRoLmNvcyhvKSxnPU1hdGguc2luKG8pO3JldHVybiBjPj1BYz9uPyJNMCwiK3UrIkEiK3UrIiwiK3UrIiAwIDEsMSAwLCIrLXUrIkEiK3UrIiwiK3UrIiAwIDEsMSAwLCIrdSsiTTAsIituKyJBIituKyIsIituKyIgMCAxLDAgMCwiKy1uKyJBIituKyIsIituKyIgMCAxLDAgMCwiK24rIloiOiJNMCwiK3UrIkEiK3UrIiwiK3UrIiAwIDEsMSAwLCIrLXUrIkEiK3UrIiwiK3UrIiAwIDEsMSAwLCIrdSsiWiI6bj8iTSIrdSpzKyIsIit1KmYrIkEiK3UrIiwiK3UrIiAwICIrbCsiLDEgIit1KmgrIiwiK3UqZysiTCIrbipoKyIsIituKmcrIkEiK24rIiwiK24rIiAwICIrbCsiLDAgIituKnMrIiwiK24qZisiWiI6Ik0iK3UqcysiLCIrdSpmKyJBIit1KyIsIit1KyIgMCAiK2wrIiwxICIrdSpoKyIsIit1KmcrIkwwLDAiKyJaIn12YXIgdD1ndSxlPXB1LHI9ZHUsaT1tdTtyZXR1cm4gbi5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mdChlKSxuKTp0fSxuLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWZ0KHQpLG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mdCh0KSxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWZ0KHQpLG4pOml9LG4uY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0odC5hcHBseSh0aGlzLGFyZ3VtZW50cykrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsdT0oci5hcHBseSh0aGlzLGFyZ3VtZW50cykraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIra2M7cmV0dXJuW01hdGguY29zKHUpKm4sTWF0aC5zaW4odSkqbl19LG59O3ZhciBrYz0tJGEvMixBYz0yKiRhLTFlLTY7eWEuc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49UGUodnUpO3JldHVybiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG59LFZlLnJldmVyc2U9WGUsWGUucmV2ZXJzZT1WZSx5YS5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiB5dShodCl9LHlhLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPXl1KHZ1KTtyZXR1cm4gbi5yYWRpdXM9bi54LGRlbGV0ZSBuLngsbi5pbm5lclJhZGl1cz1uLngwLGRlbGV0ZSBuLngwLG4ub3V0ZXJSYWRpdXM9bi54MSxkZWxldGUgbi54MSxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG4uc3RhcnRBbmdsZT1uLnkwLGRlbGV0ZSBuLnkwLG4uZW5kQW5nbGU9bi55MSxkZWxldGUgbi55MSxufSx5YS5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sbyl7dmFyIGM9dCh0aGlzLHUsbixvKSxsPXQodGhpcyxhLG4sbyk7cmV0dXJuIk0iK2MucDArcihjLnIsYy5wMSxjLmExLWMuYTApKyhlKGMsbCk/aShjLnIsYy5wMSxjLnIsYy5wMCk6aShjLnIsYy5wMSxsLnIsbC5wMCkrcihsLnIsbC5wMSxsLmExLWwuYTApK2kobC5yLGwucDEsYy5yLGMucDApKSsiWiJ9ZnVuY3Rpb24gdChuLHQsZSxyKXt2YXIgaT10LmNhbGwobixlLHIpLHU9by5jYWxsKG4saSxyKSxhPWMuY2FsbChuLGkscikra2Mscz1sLmNhbGwobixpLHIpK2tjO3JldHVybntyOnUsYTA6YSxhMTpzLHAwOlt1Kk1hdGguY29zKGEpLHUqTWF0aC5zaW4oYSldLHAxOlt1Kk1hdGguY29zKHMpLHUqTWF0aC5zaW4ocyldfX1mdW5jdGlvbiBlKG4sdCl7cmV0dXJuIG4uYTA9PXQuYTAmJm4uYTE9PXQuYTF9ZnVuY3Rpb24gcihuLHQsZSl7cmV0dXJuIkEiK24rIiwiK24rIiAwICIrICsoZT4kYSkrIiwxICIrdH1mdW5jdGlvbiBpKG4sdCxlLHIpe3JldHVybiJRIDAsMCAiK3J9dmFyIHU9TmUsYT1xZSxvPU11LGM9ZHUsbD1tdTtyZXR1cm4gbi5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZnQodCksbik6b30sbi5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ZnQodCksbik6dX0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZnQodCksbik6YX0sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWZ0KHQpLG4pOmN9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZnQodCksbik6bH0sbn0seWEuc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciB1PXQuY2FsbCh0aGlzLG4saSksYT1lLmNhbGwodGhpcyxuLGkpLG89KHUueSthLnkpLzIsYz1bdSx7eDp1LngseTpvfSx7eDphLngseTpvfSxhXTtyZXR1cm4gYz1jLm1hcChyKSwiTSIrY1swXSsiQyIrY1sxXSsiICIrY1syXSsiICIrY1szXX12YXIgdD1OZSxlPXFlLHI9eHU7cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWZ0KGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWZ0KHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHlhLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj15YS5zdmcuZGlhZ29uYWwoKSx0PXh1LGU9bi5wcm9qZWN0aW9uO3JldHVybiBuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShidSh0PW4pKTp0fSxufSx5YS5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybihOYy5nZXQodC5jYWxsKHRoaXMsbixyKSl8fFN1KShlLmNhbGwodGhpcyxuLHIpKX12YXIgdD13dSxlPV91O3JldHVybiBuLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZnQoZSksbik6dH0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWZ0KHQpLG4pOmV9LG59O3ZhciBOYz15YS5tYXAoe2NpcmNsZTpTdSxjcm9zczpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi81KS8yO3JldHVybiJNIistMyp0KyIsIistdCsiSCIrLXQrIlYiKy0zKnQrIkgiK3QrIlYiKy10KyJIIiszKnQrIlYiK3QrIkgiK3QrIlYiKzMqdCsiSCIrLXQrIlYiK3QrIkgiKy0zKnQrIloifSxkaWFtb25kOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuLygyKkNjKSksZT10KkNjO3JldHVybiJNMCwiKy10KyJMIitlKyIsMCIrIiAwLCIrdCsiICIrLWUrIiwwIisiWiJ9LHNxdWFyZTpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobikvMjtyZXR1cm4iTSIrLXQrIiwiKy10KyJMIit0KyIsIistdCsiICIrdCsiLCIrdCsiICIrLXQrIiwiK3QrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vVGMpLGU9dCpUYy8yO3JldHVybiJNMCwiK2UrIkwiK3QrIiwiKy1lKyIgIistdCsiLCIrLWUrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuL1RjKSxlPXQqVGMvMjtyZXR1cm4iTTAsIistZSsiTCIrdCsiLCIrZSsiICIrLXQrIiwiK2UrIloifX0pO3lhLnN2Zy5zeW1ib2xUeXBlcz1OYy5rZXlzKCk7dmFyIHFjLFRjPU1hdGguc3FydCgzKSxDYz1NYXRoLnRhbigzMCpHYSksemM9W10sRGM9MCxqYz17ZWFzZTpBcixkZWxheTowLGR1cmF0aW9uOjI1MH07emMuY2FsbD1GYS5jYWxsLHpjLmVtcHR5PUZhLmVtcHR5LHpjLm5vZGU9RmEubm9kZSx6Yy5zaXplPUZhLnNpemUseWEudHJhbnNpdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9xYz9uLnRyYW5zaXRpb24oKTpuOllhLnRyYW5zaXRpb24oKX0seWEudHJhbnNpdGlvbi5wcm90b3R5cGU9emMsemMuc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscixpPXRoaXMuaWQsdT1bXTtuPXYobik7Zm9yKHZhciBhPS0xLG89dGhpcy5sZW5ndGg7KythPG87KXt1LnB1c2godD1bXSk7Zm9yKHZhciBjPXRoaXNbYV0sbD0tMSxzPWMubGVuZ3RoOysrbDxzOykocj1jW2xdKSYmKGU9bi5jYWxsKHIsci5fX2RhdGFfXyxsKSk/KCJfX2RhdGFfXyJpbiByJiYoZS5fX2RhdGFfXz1yLl9fZGF0YV9fKSxOdShlLGwsaSxyLl9fdHJhbnNpdGlvbl9fW2ldKSx0LnB1c2goZSkpOnQucHVzaChudWxsKX1yZXR1cm4gRXUodSxpKX0semMuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscixpLHUsYT10aGlzLmlkLG89W107bj15KG4pO2Zvcih2YXIgYz0tMSxsPXRoaXMubGVuZ3RoOysrYzxsOylmb3IodmFyIHM9dGhpc1tjXSxmPS0xLGg9cy5sZW5ndGg7KytmPGg7KWlmKHI9c1tmXSl7dT1yLl9fdHJhbnNpdGlvbl9fW2FdLGU9bi5jYWxsKHIsci5fX2RhdGFfXyxmKSxvLnB1c2godD1bXSk7Zm9yKHZhciBnPS0xLHA9ZS5sZW5ndGg7KytnPHA7KShpPWVbZ10pJiZOdShpLGcsYSx1KSx0LnB1c2goaSl9cmV0dXJuIEV1KG8sYSl9LHpjLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsaT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TihuKSk7Zm9yKHZhciB1PTAsYT10aGlzLmxlbmd0aDthPnU7dSsrKXtpLnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbdV0sbz0wLGM9ZS5sZW5ndGg7Yz5vO28rKykocj1lW29dKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxvKSYmdC5wdXNoKHIpfXJldHVybiBFdShpLHRoaXMuaWQsdGhpcy50aW1lKS5lYXNlKHRoaXMuZWFzZSgpKX0semMudHdlZW49ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bZV0udHdlZW4uZ2V0KG4pOlQodGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3QuX190cmFuc2l0aW9uX19bZV0udHdlZW4ucmVtb3ZlKG4pfTpmdW5jdGlvbihyKXtyLl9fdHJhbnNpdGlvbl9fW2VdLnR3ZWVuLnNldChuLHQpfSl9LHpjLmF0dHI9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyl9ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoby5zcGFjZSxvLmxvY2FsKX1mdW5jdGlvbiBpKG4pe3JldHVybiBudWxsPT1uP2U6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdldEF0dHJpYnV0ZShvKTtyZXR1cm4gZSE9PW4mJih0PWEoZSxuKSxmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZShvLHQobikpfSl9KX1mdW5jdGlvbiB1KG4pe3JldHVybiBudWxsPT1uP3I6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdldEF0dHJpYnV0ZU5TKG8uc3BhY2Usby5sb2NhbCk7cmV0dXJuIGUhPT1uJiYodD1hKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhvLnNwYWNlLG8ubG9jYWwsdChuKSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHQgaW4gbil0aGlzLmF0dHIodCxuW3RdKTtyZXR1cm4gdGhpc312YXIgYT0idHJhbnNmb3JtIj09bj9Jcjp4cixvPXlhLm5zLnF1YWxpZnkobik7cmV0dXJuIGt1KHRoaXMsImF0dHIuIituLHQsby5sb2NhbD91OmkpfSx6Yy5hdHRyVHdlZW49ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0QXR0cmlidXRlKGkpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUoaSxyKG4pKX19ZnVuY3Rpb24gcihuLGUpe3ZhciByPXQuY2FsbCh0aGlzLG4sZSx0aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCkpO3JldHVybiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxyKG4pKX19dmFyIGk9eWEubnMucXVhbGlmeShuKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK24saS5sb2NhbD9yOmUpfSx6Yy5zdHlsZT1mdW5jdGlvbihuLHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbnVsbD09dD9yOih0Kz0iIixmdW5jdGlvbigpe3ZhciByLGk9YmEuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7cmV0dXJuIGkhPT10JiYocj14cihpLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixyKHQpLGUpfSl9KX12YXIgdT1hcmd1bWVudHMubGVuZ3RoO2lmKDM+dSl7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnUmJih0PSIiKTtmb3IoZSBpbiBuKXRoaXMuc3R5bGUoZSxuW2VdLHQpO3JldHVybiB0aGlzfWU9IiJ9cmV0dXJuIGt1KHRoaXMsInN0eWxlLiIrbix0LGkpfSx6Yy5zdHlsZVR3ZWVuPWZ1bmN0aW9uKG4sdCxlKXtmdW5jdGlvbiByKHIsaSl7dmFyIHU9dC5jYWxsKHRoaXMscixpLGJhLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pKTtyZXR1cm4gdSYmZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHUodCksZSl9fXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihlPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK24scil9LHpjLnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGt1KHRoaXMsInRleHQiLG4sQXUpfSx6Yy5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVuY3Rpb24oKXt2YXIgbjshdGhpcy5fX3RyYW5zaXRpb25fXyYmKG49dGhpcy5wYXJlbnROb2RlKSYmbi5yZW1vdmVDaGlsZCh0aGlzKX0pfSx6Yy5lYXNlPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuaWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKS5fX3RyYW5zaXRpb25fX1t0XS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49eWEuZWFzZS5hcHBseSh5YSxhcmd1bWVudHMpKSxUKHRoaXMsZnVuY3Rpb24oZSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5lYXNlPW59KSl9LHpjLmRlbGF5PWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuaWQ7cmV0dXJuIFQodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihlLHIsaSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kZWxheT0wfG4uY2FsbChlLGUuX19kYXRhX18scixpKX06KG58PTAsZnVuY3Rpb24oZSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kZWxheT1ufSkpfSx6Yy5kdXJhdGlvbj1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBUKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oZSxyLGkpe2UuX190cmFuc2l0aW9uX19bdF0uZHVyYXRpb249TWF0aC5tYXgoMSwwfG4uY2FsbChlLGUuX19kYXRhX18scixpKSl9OihuPU1hdGgubWF4KDEsMHxuKSxmdW5jdGlvbihlKXtlLl9fdHJhbnNpdGlvbl9fW3RdLmR1cmF0aW9uPW59KSl9LHpjLmVhY2g9ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9amMsaT1xYztxYz1lLFQodGhpcyxmdW5jdGlvbih0LHIsaSl7amM9dC5fX3RyYW5zaXRpb25fX1tlXSxuLmNhbGwodCx0Ll9fZGF0YV9fLHIsaSl9KSxqYz1yLHFjPWl9ZWxzZSBUKHRoaXMsZnVuY3Rpb24ocil7ci5fX3RyYW5zaXRpb25fX1tlXS5ldmVudC5vbihuLHQpfSk7cmV0dXJuIHRoaXN9LHpjLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlLHIsaT10aGlzLmlkLHU9KytEYyxhPVtdLG89MCxjPXRoaXMubGVuZ3RoO2M+bztvKyspe2EucHVzaChuPVtdKTtmb3IodmFyIHQ9dGhpc1tvXSxsPTAscz10Lmxlbmd0aDtzPmw7bCsrKShlPXRbbF0pJiYocj1PYmplY3QuY3JlYXRlKGUuX190cmFuc2l0aW9uX19baV0pLHIuZGVsYXkrPXIuZHVyYXRpb24sTnUoZSxsLHUscikpLG4ucHVzaChlKX1yZXR1cm4gRXUoYSx1KX0seWEuc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuLGY9eWEuc2VsZWN0KHRoaXMpLGg9bnVsbD09bD9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxjKTplLmRvbWFpbigpOmwsZz1udWxsPT10P2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxjKTpTdHJpbmc6dCxwPUN1KGUsaCxzKSxkPWYuc2VsZWN0QWxsKCIudGljay5taW5vciIpLmRhdGEocCxTdHJpbmcpLG09ZC5lbnRlcigpLmluc2VydCgibGluZSIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJ0aWNrIG1pbm9yIikuc3R5bGUoIm9wYWNpdHkiLDFlLTYpLHY9eWEudHJhbnNpdGlvbihkLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLHk9eWEudHJhbnNpdGlvbihkKS5zdHlsZSgib3BhY2l0eSIsMSksTT1mLnNlbGVjdEFsbCgiLnRpY2subWFqb3IiKS5kYXRhKGgsU3RyaW5nKSx4PU0uZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIG1ham9yIikuc3R5bGUoIm9wYWNpdHkiLDFlLTYpLGI9eWEudHJhbnNpdGlvbihNLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLF89eWEudHJhbnNpdGlvbihNKS5zdHlsZSgib3BhY2l0eSIsMSksdz1JaShlKSxTPWYuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLEU9KFMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLHlhLnRyYW5zaXRpb24oUykpLGs9ZS5jb3B5KCksQT10aGlzLl9fY2hhcnRfX3x8azt0aGlzLl9fY2hhcnRfXz1rLHguYXBwZW5kKCJsaW5lIikseC5hcHBlbmQoInRleHQiKTt2YXIgTj14LnNlbGVjdCgibGluZSIpLHE9Xy5zZWxlY3QoImxpbmUiKSxUPU0uc2VsZWN0KCJ0ZXh0IikudGV4dChnKSxDPXguc2VsZWN0KCJ0ZXh0Iiksej1fLnNlbGVjdCgidGV4dCIpOwpzd2l0Y2gocil7Y2FzZSJib3R0b20iOm49cXUsbS5hdHRyKCJ5MiIsdSkseS5hdHRyKCJ4MiIsMCkuYXR0cigieTIiLHUpLE4uYXR0cigieTIiLGkpLEMuYXR0cigieSIsTWF0aC5tYXgoaSwwKStvKSxxLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsaSksei5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixNYXRoLm1heChpLDApK28pLFQuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEUuYXR0cigiZCIsIk0iK3dbMF0rIiwiK2ErIlYwSCIrd1sxXSsiViIrYSk7YnJlYWs7Y2FzZSJ0b3AiOm49cXUsbS5hdHRyKCJ5MiIsLXUpLHkuYXR0cigieDIiLDApLmF0dHIoInkyIiwtdSksTi5hdHRyKCJ5MiIsLWkpLEMuYXR0cigieSIsLShNYXRoLm1heChpLDApK28pKSxxLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsLWkpLHouYXR0cigieCIsMCkuYXR0cigieSIsLShNYXRoLm1heChpLDApK28pKSxULmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksRS5hdHRyKCJkIiwiTSIrd1swXSsiLCIrLWErIlYwSCIrd1sxXSsiViIrLWEpO2JyZWFrO2Nhc2UibGVmdCI6bj1UdSxtLmF0dHIoIngyIiwtdSkseS5hdHRyKCJ4MiIsLXUpLmF0dHIoInkyIiwwKSxOLmF0dHIoIngyIiwtaSksQy5hdHRyKCJ4IiwtKE1hdGgubWF4KGksMCkrbykpLHEuYXR0cigieDIiLC1pKS5hdHRyKCJ5MiIsMCksei5hdHRyKCJ4IiwtKE1hdGgubWF4KGksMCkrbykpLmF0dHIoInkiLDApLFQuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIpLEUuYXR0cigiZCIsIk0iKy1hKyIsIit3WzBdKyJIMFYiK3dbMV0rIkgiKy1hKTticmVhaztjYXNlInJpZ2h0IjpuPVR1LG0uYXR0cigieDIiLHUpLHkuYXR0cigieDIiLHUpLmF0dHIoInkyIiwwKSxOLmF0dHIoIngyIixpKSxDLmF0dHIoIngiLE1hdGgubWF4KGksMCkrbykscS5hdHRyKCJ4MiIsaSkuYXR0cigieTIiLDApLHouYXR0cigieCIsTWF0aC5tYXgoaSwwKStvKS5hdHRyKCJ5IiwwKSxULmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLEUuYXR0cigiZCIsIk0iK2ErIiwiK3dbMF0rIkgwViIrd1sxXSsiSCIrYSl9aWYoZS50aWNrcyl4LmNhbGwobixBKSxfLmNhbGwobixrKSxiLmNhbGwobixrKSxtLmNhbGwobixBKSx5LmNhbGwobixrKSx2LmNhbGwobixrKTtlbHNle3ZhciBEPWsucmFuZ2VCYW5kKCkvMixqPWZ1bmN0aW9uKG4pe3JldHVybiBrKG4pK0R9O3guY2FsbChuLGopLF8uY2FsbChuLGopfX0pfXZhciB0LGU9eWEuc2NhbGUubGluZWFyKCkscj1MYyxpPTYsdT02LGE9NixvPTMsYz1bMTBdLGw9bnVsbCxzPTA7cmV0dXJuIG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10IGluIEhjP3QrIiI6TGMsbik6cn0sbi50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWFyZ3VtZW50cyxuKTpjfSxuLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxuKTpsfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnRpY2tTaXplPWZ1bmN0aW9uKHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGk7dmFyIHI9YXJndW1lbnRzLmxlbmd0aC0xO3JldHVybiBpPSt0LHU9cj4xPytlOmksYT1yPjA/K2FyZ3VtZW50c1tyXTppLG59LG4udGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LG4pOnN9LG59O3ZhciBMYz0iYm90dG9tIixIYz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O3lhLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odSl7dS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHUsYT15YS5zZWxlY3QodGhpcykscz1hLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSksZj1hLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKSxoPWEuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShsLFN0cmluZyk7YS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixpKS5vbigidG91Y2hzdGFydC5icnVzaCIsaSkscy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLGYuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIiksaC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXtyZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3JldHVybiBGY1tuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4pe3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rpb24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGguc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCksaC5leGl0KCkucmVtb3ZlKCksbyYmKHU9SWkobykscy5hdHRyKCJ4Iix1WzBdKS5hdHRyKCJ3aWR0aCIsdVsxXS11WzBdKSxlKGEpKSxjJiYodT1JaShjKSxzLmF0dHIoInkiLHVbMF0pLmF0dHIoImhlaWdodCIsdVsxXS11WzBdKSxyKGEpKSx0KGEpfSl9ZnVuY3Rpb24gdChuKXtuLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRyYW5zbGF0ZSgiK3NbKy9lJC8udGVzdChuKV1bMF0rIiwiK3NbKy9ecy8udGVzdChuKV1bMV0rIikifSl9ZnVuY3Rpb24gZShuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLHNbMF1bMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndpZHRoIixzWzFdWzBdLXNbMF1bMF0pfWZ1bmN0aW9uIHIobil7bi5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IixzWzBdWzFdKSxuLnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLHNbMV1bMV0tc1swXVsxXSl9ZnVuY3Rpb24gaSgpe2Z1bmN0aW9uIGkoKXt2YXIgbj15YS5ldmVudC5jaGFuZ2VkVG91Y2hlcztyZXR1cm4gbj95YS50b3VjaGVzKE0sbilbMF06eWEubW91c2UoTSl9ZnVuY3Rpb24gbCgpezMyPT15YS5ldmVudC5rZXlDb2RlJiYoa3x8KHY9bnVsbCxOWzBdLT1zWzFdWzBdLE5bMV0tPXNbMV1bMV0saz0yKSxnKCkpfWZ1bmN0aW9uIGgoKXszMj09eWEuZXZlbnQua2V5Q29kZSYmMj09ayYmKE5bMF0rPXNbMV1bMF0sTlsxXSs9c1sxXVsxXSxrPTAsZygpKX1mdW5jdGlvbiBwKCl7dmFyIG49aSgpLHU9ITE7eSYmKG5bMF0rPXlbMF0sblsxXSs9eVsxXSksa3x8KHlhLmV2ZW50LmFsdEtleT8odnx8KHY9WyhzWzBdWzBdK3NbMV1bMF0pLzIsKHNbMF1bMV0rc1sxXVsxXSkvMl0pLE5bMF09c1srKG5bMF08dlswXSldWzBdLE5bMV09c1srKG5bMV08dlsxXSldWzFdKTp2PW51bGwpLFMmJmQobixvLDApJiYoZShfKSx1PSEwKSxFJiZkKG4sYywxKSYmKHIoXyksdT0hMCksdSYmKHQoXyksYih7dHlwZToiYnJ1c2giLG1vZGU6az8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24gZChuLHQsZSl7dmFyIHIsaSxhPUlpKHQpLG89YVswXSxjPWFbMV0sbD1OW2VdLGg9c1sxXVtlXS1zWzBdW2VdO3JldHVybiBrJiYoby09bCxjLT1oK2wpLHI9ZltlXT9NYXRoLm1heChvLE1hdGgubWluKGMsbltlXSkpOm5bZV0saz9pPShyKz1sKStoOih2JiYobD1NYXRoLm1heChvLE1hdGgubWluKGMsMip2W2VdLXIpKSkscj5sPyhpPXIscj1sKTppPWwpLHNbMF1bZV0hPT1yfHxzWzFdW2VdIT09aT8odT1udWxsLHNbMF1bZV09cixzWzFdW2VdPWksITApOnZvaWQgMH1mdW5jdGlvbiBtKCl7cCgpLF8uc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCkseWEuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsbnVsbCkscS5vbigibW91c2Vtb3ZlLmJydXNoIixudWxsKS5vbigibW91c2V1cC5icnVzaCIsbnVsbCkub24oInRvdWNobW92ZS5icnVzaCIsbnVsbCkub24oInRvdWNoZW5kLmJydXNoIixudWxsKS5vbigia2V5ZG93bi5icnVzaCIsbnVsbCkub24oImtleXVwLmJydXNoIixudWxsKSxBKCksYih7dHlwZToiYnJ1c2hlbmQifSl9dmFyIHYseSxNPXRoaXMseD15YS5zZWxlY3QoeWEuZXZlbnQudGFyZ2V0KSxiPWEub2YoTSxhcmd1bWVudHMpLF89eWEuc2VsZWN0KE0pLHc9eC5kYXR1bSgpLFM9IS9eKG58cykkLy50ZXN0KHcpJiZvLEU9IS9eKGV8dykkLy50ZXN0KHcpJiZjLGs9eC5jbGFzc2VkKCJleHRlbnQiKSxBPUwoImJydXNoIiksTj1pKCkscT15YS5zZWxlY3QoYmEpLm9uKCJrZXlkb3duLmJydXNoIixsKS5vbigia2V5dXAuYnJ1c2giLGgpO2lmKHlhLmV2ZW50LmNoYW5nZWRUb3VjaGVzP3Eub24oInRvdWNobW92ZS5icnVzaCIscCkub24oInRvdWNoZW5kLmJydXNoIixtKTpxLm9uKCJtb3VzZW1vdmUuYnJ1c2giLHApLm9uKCJtb3VzZXVwLmJydXNoIixtKSxrKU5bMF09c1swXVswXS1OWzBdLE5bMV09c1swXVsxXS1OWzFdO2Vsc2UgaWYodyl7dmFyIFQ9Ky93JC8udGVzdCh3KSxDPSsvXm4vLnRlc3Qodyk7eT1bc1sxLVRdWzBdLU5bMF0sc1sxLUNdWzFdLU5bMV1dLE5bMF09c1tUXVswXSxOWzFdPXNbQ11bMV19ZWxzZSB5YS5ldmVudC5hbHRLZXkmJih2PU4uc2xpY2UoKSk7Xy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLHlhLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLHguc3R5bGUoImN1cnNvciIpKSxiKHt0eXBlOiJicnVzaHN0YXJ0In0pLHAoKX12YXIgdSxhPWQobiwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSxvPW51bGwsYz1udWxsLGw9UGNbMF0scz1bWzAsMF0sWzAsMF1dLGY9WyEwLCEwXTtyZXR1cm4gbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbD1QY1shbzw8MXwhY10sbik6b30sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD1QY1shbzw8MXwhY10sbik6Y30sbi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyYmYz9mPVshIXRbMF0sISF0WzFdXToob3x8YykmJihmWyshb109ISF0KSxuKTpvJiZjP2Y6b3x8Yz9mWyshb106bnVsbH0sbi5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1bWzAsMF0sWzAsMF1dLG8mJihlPXRbMF0scj10WzFdLGMmJihlPWVbMF0scj1yWzBdKSx1WzBdWzBdPWUsdVsxXVswXT1yLG8uaW52ZXJ0JiYoZT1vKGUpLHI9byhyKSksZT5yJiYobD1lLGU9cixyPWwpLHNbMF1bMF09MHxlLHNbMV1bMF09MHxyKSxjJiYoaT10WzBdLGE9dFsxXSxvJiYoaT1pWzFdLGE9YVsxXSksdVswXVsxXT1pLHVbMV1bMV09YSxjLmludmVydCYmKGk9YyhpKSxhPWMoYSkpLGk+YSYmKGw9aSxpPWEsYT1sKSxzWzBdWzFdPTB8aSxzWzFdWzFdPTB8YSksbik6KHQ9dXx8cyxvJiYoZT10WzBdWzBdLHI9dFsxXVswXSx1fHwoZT1zWzBdWzBdLHI9c1sxXVswXSxvLmludmVydCYmKGU9by5pbnZlcnQoZSkscj1vLmludmVydChyKSksZT5yJiYobD1lLGU9cixyPWwpKSksYyYmKGk9dFswXVsxXSxhPXRbMV1bMV0sdXx8KGk9c1swXVsxXSxhPXNbMV1bMV0sYy5pbnZlcnQmJihpPWMuaW52ZXJ0KGkpLGE9Yy5pbnZlcnQoYSkpLGk+YSYmKGw9aSxpPWEsYT1sKSkpLG8mJmM/W1tlLGldLFtyLGFdXTpvP1tlLHJdOmMmJltpLGFdKX0sbi5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB1PW51bGwsc1swXVswXT1zWzBdWzFdPXNbMV1bMF09c1sxXVsxXT0wLG59LG4uZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gbyYmc1swXVswXT09PXNbMV1bMF18fGMmJnNbMF1bMV09PT1zWzFdWzFdfSx5YS5yZWJpbmQobixhLCJvbiIpfTt2YXIgRmM9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUGM9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV07eWEudGltZT17fTt2YXIgT2M9RGF0ZSxZYz1bIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il07enUucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe1JjLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe1JjLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtSYy5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtSYy5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7UmMuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7UmMuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtSYy5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe1JjLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtSYy5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIFJjPURhdGUucHJvdG90eXBlLFVjPSIlYSAlYiAlZSAlWCAlWSIsSWM9IiVtLyVkLyVZIixWYz0iJUg6JU06JVMiLFhjPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxaYz1bIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLEJjPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSwkYz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO3lhLnRpbWUueWVhcj1EdShmdW5jdGlvbihuKXtyZXR1cm4gbj15YS50aW1lLmRheShuKSxuLnNldE1vbnRoKDAsMSksbn0sZnVuY3Rpb24obix0KXtuLnNldEZ1bGxZZWFyKG4uZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKX0pLHlhLnRpbWUueWVhcnM9eWEudGltZS55ZWFyLnJhbmdlLHlhLnRpbWUueWVhcnMudXRjPXlhLnRpbWUueWVhci51dGMucmFuZ2UseWEudGltZS5kYXk9RHUoZnVuY3Rpb24obil7dmFyIHQ9bmV3IE9jKDJlMywwKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSx5YS50aW1lLmRheXM9eWEudGltZS5kYXkucmFuZ2UseWEudGltZS5kYXlzLnV0Yz15YS50aW1lLmRheS51dGMucmFuZ2UseWEudGltZS5kYXlPZlllYXI9ZnVuY3Rpb24obil7dmFyIHQ9eWEudGltZS55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChuLXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTUpfSxZYy5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7bj1uLnRvTG93ZXJDYXNlKCksdD03LXQ7dmFyIGU9eWEudGltZVtuXT1EdShmdW5jdGlvbihuKXtyZXR1cm4obj15YS50aW1lLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXkoKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT15YS50aW1lLnllYXIobikuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKHlhLnRpbWUuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpLShlIT09dCl9KTt5YS50aW1lW24rInMiXT1lLnJhbmdlLHlhLnRpbWVbbisicyJdLnV0Yz1lLnV0Yy5yYW5nZSx5YS50aW1lW24rIk9mWWVhciJdPWZ1bmN0aW9uKG4pe3ZhciBlPXlhLnRpbWUueWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoeWEudGltZS5kYXlPZlllYXIobikrKGUrdCklNykvNyl9fSkseWEudGltZS53ZWVrPXlhLnRpbWUuc3VuZGF5LHlhLnRpbWUud2Vla3M9eWEudGltZS5zdW5kYXkucmFuZ2UseWEudGltZS53ZWVrcy51dGM9eWEudGltZS5zdW5kYXkudXRjLnJhbmdlLHlhLnRpbWUud2Vla09mWWVhcj15YS50aW1lLnN1bmRheU9mWWVhcix5YS50aW1lLmZvcm1hdD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgcixpLHUsYT1bXSxvPS0xLGM9MDsrK288ZTspMzc9PT1uLmNoYXJDb2RlQXQobykmJihhLnB1c2gobi5zdWJzdHJpbmcoYyxvKSksbnVsbCE9KGk9aWxbcj1uLmNoYXJBdCgrK28pXSkmJihyPW4uY2hhckF0KCsrbykpLCh1PXVsW3JdKSYmKHI9dSh0LG51bGw9PWk/ImUiPT09cj8iICI6IjAiOmkpKSxhLnB1c2gociksYz1vKzEpO3JldHVybiBhLnB1c2gobi5zdWJzdHJpbmcoYyxvKSksYS5qb2luKCIiKX12YXIgZT1uLmxlbmd0aDtyZXR1cm4gdC5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowfSxyPUx1KGUsbix0LDApO2lmKHIhPXQubGVuZ3RoKXJldHVybiBudWxsOyJwImluIGUmJihlLkg9ZS5IJTEyKzEyKmUucCk7dmFyIGk9bmV3IE9jO3JldHVybiJqImluIGU/aS5zZXRGdWxsWWVhcihlLnksMCxlLmopOiJ3ImluIGUmJigiVyJpbiBlfHwiVSJpbiBlKT8oaS5zZXRGdWxsWWVhcihlLnksMCwxKSxpLnNldEZ1bGxZZWFyKGUueSwwLCJXImluIGU/KGUudys2KSU3KzcqZS5XLShpLmdldERheSgpKzUpJTc6ZS53KzcqZS5VLShpLmdldERheSgpKzYpJTcpKTppLnNldEZ1bGxZZWFyKGUueSxlLm0sZS5kKSxpLnNldEhvdXJzKGUuSCxlLk0sZS5TLGUuTCksaX0sdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBufSx0fTt2YXIgV2M9SHUoWGMpLEpjPUZ1KFhjKSxHYz1IdShaYyksS2M9RnUoWmMpLFFjPUh1KEJjKSxubD1GdShCYyksdGw9SHUoJGMpLGVsPUZ1KCRjKSxybD0vXiUvLGlsPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHVsPXthOmZ1bmN0aW9uKG4pe3JldHVybiBaY1tuLmdldERheSgpXX0sQTpmdW5jdGlvbihuKXtyZXR1cm4gWGNbbi5nZXREYXkoKV19LGI6ZnVuY3Rpb24obil7cmV0dXJuICRjW24uZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24obil7cmV0dXJuIEJjW24uZ2V0TW9udGgoKV19LGM6eWEudGltZS5mb3JtYXQoVWMpLGQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gUHUobi5nZXREYXRlKCksdCwyKX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBQdShuLmdldERhdGUoKSx0LDIpfSxIOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFB1KG4uZ2V0SG91cnMoKSx0LDIpfSxJOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFB1KG4uZ2V0SG91cnMoKSUxMnx8MTIsdCwyKX0sajpmdW5jdGlvbihuLHQpe3JldHVybiBQdSgxK3lhLnRpbWUuZGF5T2ZZZWFyKG4pLHQsMyl9LEw6ZnVuY3Rpb24obix0KXtyZXR1cm4gUHUobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfSxtOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFB1KG4uZ2V0TW9udGgoKSsxLHQsMil9LE06ZnVuY3Rpb24obix0KXtyZXR1cm4gUHUobi5nZXRNaW51dGVzKCksdCwyKX0scDpmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRIb3VycygpPj0xMj8iUE0iOiJBTSJ9LFM6ZnVuY3Rpb24obix0KXtyZXR1cm4gUHUobi5nZXRTZWNvbmRzKCksdCwyKX0sVTpmdW5jdGlvbihuLHQpe3JldHVybiBQdSh5YS50aW1lLnN1bmRheU9mWWVhcihuKSx0LDIpfSx3OmZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpfSxXOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFB1KHlhLnRpbWUubW9uZGF5T2ZZZWFyKG4pLHQsMil9LHg6eWEudGltZS5mb3JtYXQoSWMpLFg6eWEudGltZS5mb3JtYXQoVmMpLHk6ZnVuY3Rpb24obix0KXtyZXR1cm4gUHUobi5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfSxZOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFB1KG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX0sWjphYSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxhbD17YTpPdSxBOll1LGI6VnUsQjpYdSxjOlp1LGQ6UXUsZTpRdSxIOnRhLEk6dGEsajpuYSxMOmlhLG06S3UsTTplYSxwOnVhLFM6cmEsVTpVdSx3OlJ1LFc6SXUseDpCdSxYOiR1LHk6SnUsWTpXdSwiJSI6b2F9LG9sPS9eXHMqXGQrLyxjbD15YS5tYXAoe2FtOjAscG06MX0pO3lhLnRpbWUuZm9ybWF0LnV0Yz1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe3RyeXtPYz16dTt2YXIgdD1uZXcgT2M7cmV0dXJuIHQuXz1uLGUodCl9ZmluYWxseXtPYz1EYXRlfX12YXIgZT15YS50aW1lLmZvcm1hdChuKTtyZXR1cm4gdC5wYXJzZT1mdW5jdGlvbihuKXt0cnl7T2M9enU7dmFyIHQ9ZS5wYXJzZShuKTtyZXR1cm4gdCYmdC5ffWZpbmFsbHl7T2M9RGF0ZX19LHQudG9TdHJpbmc9ZS50b1N0cmluZyx0fTt2YXIgbGw9eWEudGltZS5mb3JtYXQudXRjKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTt5YS50aW1lLmZvcm1hdC5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/Y2E6bGwsY2EucGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFOKHQpP251bGw6dH0sY2EudG9TdHJpbmc9bGwudG9TdHJpbmcseWEudGltZS5zZWNvbmQ9RHUoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBPYygxZTMqTWF0aC5mbG9vcihuLzFlMykpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZShuLmdldFRpbWUoKSsxZTMqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFNlY29uZHMoKX0pLHlhLnRpbWUuc2Vjb25kcz15YS50aW1lLnNlY29uZC5yYW5nZSx5YS50aW1lLnNlY29uZHMudXRjPXlhLnRpbWUuc2Vjb25kLnV0Yy5yYW5nZSx5YS50aW1lLm1pbnV0ZT1EdShmdW5jdGlvbihuKXtyZXR1cm4gbmV3IE9jKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSkseWEudGltZS5taW51dGVzPXlhLnRpbWUubWludXRlLnJhbmdlLHlhLnRpbWUubWludXRlcy51dGM9eWEudGltZS5taW51dGUudXRjLnJhbmdlLHlhLnRpbWUuaG91cj1EdShmdW5jdGlvbihuKXt2YXIgdD1uLmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBPYygzNmU1KihNYXRoLmZsb29yKG4vMzZlNS10KSt0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEhvdXJzKCl9KSx5YS50aW1lLmhvdXJzPXlhLnRpbWUuaG91ci5yYW5nZSx5YS50aW1lLmhvdXJzLnV0Yz15YS50aW1lLmhvdXIudXRjLnJhbmdlLHlhLnRpbWUubW9udGg9RHUoZnVuY3Rpb24obil7cmV0dXJuIG49eWEudGltZS5kYXkobiksbi5zZXREYXRlKDEpLG59LGZ1bmN0aW9uKG4sdCl7bi5zZXRNb250aChuLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSx5YS50aW1lLm1vbnRocz15YS50aW1lLm1vbnRoLnJhbmdlLHlhLnRpbWUubW9udGhzLnV0Yz15YS50aW1lLm1vbnRoLnV0Yy5yYW5nZTt2YXIgc2w9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxmbD1bW3lhLnRpbWUuc2Vjb25kLDFdLFt5YS50aW1lLnNlY29uZCw1XSxbeWEudGltZS5zZWNvbmQsMTVdLFt5YS50aW1lLnNlY29uZCwzMF0sW3lhLnRpbWUubWludXRlLDFdLFt5YS50aW1lLm1pbnV0ZSw1XSxbeWEudGltZS5taW51dGUsMTVdLFt5YS50aW1lLm1pbnV0ZSwzMF0sW3lhLnRpbWUuaG91ciwxXSxbeWEudGltZS5ob3VyLDNdLFt5YS50aW1lLmhvdXIsNl0sW3lhLnRpbWUuaG91ciwxMl0sW3lhLnRpbWUuZGF5LDFdLFt5YS50aW1lLmRheSwyXSxbeWEudGltZS53ZWVrLDFdLFt5YS50aW1lLm1vbnRoLDFdLFt5YS50aW1lLm1vbnRoLDNdLFt5YS50aW1lLnllYXIsMV1dLGhsPVtbeWEudGltZS5mb3JtYXQoIiVZIiksUnRdLFt5YS50aW1lLmZvcm1hdCgiJUIiKSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNb250aCgpfV0sW3lhLnRpbWUuZm9ybWF0KCIlYiAlZCIpLGZ1bmN0aW9uKG4pe3JldHVybiAxIT1uLmdldERhdGUoKX1dLFt5YS50aW1lLmZvcm1hdCgiJWEgJWQiKSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXkoKSYmMSE9bi5nZXREYXRlKCl9XSxbeWEudGltZS5mb3JtYXQoIiVJICVwIiksZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX1dLFt5YS50aW1lLmZvcm1hdCgiJUk6JU0iKSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaW51dGVzKCl9XSxbeWEudGltZS5mb3JtYXQoIjolUyIpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFNlY29uZHMoKX1dLFt5YS50aW1lLmZvcm1hdCgiLiVMIiksZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XV0sZ2w9eWEuc2NhbGUubGluZWFyKCkscGw9ZmEoaGwpO2ZsLnllYXI9ZnVuY3Rpb24obix0KXtyZXR1cm4gZ2wuZG9tYWluKG4ubWFwKGdhKSkudGlja3ModCkubWFwKGhhKX0seWEudGltZS5zY2FsZT1mdW5jdGlvbigpe3JldHVybiBsYSh5YS5zY2FsZS5saW5lYXIoKSxmbCxwbCl9O3ZhciBkbD1mbC5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksbWw9W1t5YS50aW1lLmZvcm1hdC51dGMoIiVZIiksUnRdLFt5YS50aW1lLmZvcm1hdC51dGMoIiVCIiksZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKX1dLFt5YS50aW1lLmZvcm1hdC51dGMoIiViICVkIiksZnVuY3Rpb24obil7cmV0dXJuIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sW3lhLnRpbWUuZm9ybWF0LnV0YygiJWEgJWQiKSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENEYXkoKSYmMSE9bi5nZXRVVENEYXRlKCl9XSxbeWEudGltZS5mb3JtYXQudXRjKCIlSSAlcCIpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0hvdXJzKCl9XSxbeWEudGltZS5mb3JtYXQudXRjKCIlSTolTSIpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ01pbnV0ZXMoKX1dLFt5YS50aW1lLmZvcm1hdC51dGMoIjolUyIpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX1dLFt5YS50aW1lLmZvcm1hdC51dGMoIi4lTCIpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ01pbGxpc2Vjb25kcygpfV1dLHZsPWZhKG1sKTtyZXR1cm4gZGwueWVhcj1mdW5jdGlvbihuLHQpe3JldHVybiBnbC5kb21haW4obi5tYXAoZGEpKS50aWNrcyh0KS5tYXAocGEpfSx5YS50aW1lLnNjYWxlLnV0Yz1mdW5jdGlvbigpe3JldHVybiBsYSh5YS5zY2FsZS5saW5lYXIoKSxkbCx2bCl9LHlhLnRleHQ9Z3QoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVzcG9uc2VUZXh0fSkseWEuanNvbj1mdW5jdGlvbihuLHQpe3JldHVybiBwdChuLCJhcHBsaWNhdGlvbi9qc29uIixtYSx0KX0seWEuaHRtbD1mdW5jdGlvbihuLHQpe3JldHVybiBwdChuLCJ0ZXh0L2h0bWwiLHZhLHQpfSx5YS54bWw9Z3QoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVzcG9uc2VYTUx9KSx5YX0oKTs="></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3JldHVybihuZXcgRGF0ZSh0LGUrMSwwKSkuZ2V0RGF0ZSgpfWZ1bmN0aW9uIG4oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLGkscyl7dmFyIG89ZShyKSx1PVtdO288ciYmdChvKTtpZihzPjEpd2hpbGUobzxpKXt2YXIgYT1uZXcgRGF0ZSgrbyk7bihhKSVzPT09MCYmdS5wdXNoKGEpLHQobyl9ZWxzZSB3aGlsZShvPGkpdS5wdXNoKG5ldyBEYXRlKCtvKSksdChvKTtyZXR1cm4gdX19dmFyIGU9d2luZG93Lm52fHx7fTtlLnZlcnNpb249IjEuMS4xMGIiLGUuZGV2PSEwLHdpbmRvdy5udj1lLGUudG9vbHRpcD17fSxlLnV0aWxzPXt9LGUubW9kZWxzPXt9LGUuY2hhcnRzPXt9LGUuZ3JhcGhzPVtdLGUubG9ncz17fSxlLmRpc3BhdGNoPWQzLmRpc3BhdGNoKCJyZW5kZXJfc3RhcnQiLCJyZW5kZXJfZW5kIiksZS5kZXYmJihlLmRpc3BhdGNoLm9uKCJyZW5kZXJfc3RhcnQiLGZ1bmN0aW9uKHQpe2UubG9ncy5zdGFydFRpbWU9KyhuZXcgRGF0ZSl9KSxlLmRpc3BhdGNoLm9uKCJyZW5kZXJfZW5kIixmdW5jdGlvbih0KXtlLmxvZ3MuZW5kVGltZT0rKG5ldyBEYXRlKSxlLmxvZ3MudG90YWxUaW1lPWUubG9ncy5lbmRUaW1lLWUubG9ncy5zdGFydFRpbWUsZS5sb2coInRvdGFsIixlLmxvZ3MudG90YWxUaW1lKX0pKSxlLmxvZz1mdW5jdGlvbigpe2lmKGUuZGV2JiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2cuYXBwbHkpY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpO2Vsc2UgaWYoZS5kZXYmJnR5cGVvZiBjb25zb2xlLmxvZz09ImZ1bmN0aW9uIiYmRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpe3ZhciB0PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoY29uc29sZS5sb2csY29uc29sZSk7dC5hcHBseShjb25zb2xlLGFyZ3VtZW50cyl9cmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdfSxlLnJlbmRlcj1mdW5jdGlvbihuKXtuPW58fDEsZS5yZW5kZXIuYWN0aXZlPSEwLGUuZGlzcGF0Y2gucmVuZGVyX3N0YXJ0KCksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0LHI7Zm9yKHZhciBpPTA7aTxuJiYocj1lLnJlbmRlci5xdWV1ZVtpXSk7aSsrKXQ9ci5nZW5lcmF0ZSgpLHR5cGVvZiByLmNhbGxiYWNrPT10eXBlb2YgRnVuY3Rpb24mJnIuY2FsbGJhY2sodCksZS5ncmFwaHMucHVzaCh0KTtlLnJlbmRlci5xdWV1ZS5zcGxpY2UoMCxpKSxlLnJlbmRlci5xdWV1ZS5sZW5ndGg/c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApOihlLnJlbmRlci5hY3RpdmU9ITEsZS5kaXNwYXRjaC5yZW5kZXJfZW5kKCkpfSwwKX0sZS5yZW5kZXIuYWN0aXZlPSExLGUucmVuZGVyLnF1ZXVlPVtdLGUuYWRkR3JhcGg9ZnVuY3Rpb24odCl7dHlwZW9mIGFyZ3VtZW50c1swXT09dHlwZW9mIEZ1bmN0aW9uJiYodD17Z2VuZXJhdGU6YXJndW1lbnRzWzBdLGNhbGxiYWNrOmFyZ3VtZW50c1sxXX0pLGUucmVuZGVyLnF1ZXVlLnB1c2godCksZS5yZW5kZXIuYWN0aXZlfHxlLnJlbmRlcigpfSxlLmlkZW50aXR5PWZ1bmN0aW9uKGUpe3JldHVybiBlfSxlLnN0cmlwPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhcc3wmKS9nLCIiKX0sZDMudGltZS5tb250aEVuZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSwwKX0sZDMudGltZS5tb250aEVuZHM9bihkMy50aW1lLm1vbnRoRW5kLGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSsxKSxlLnNldERhdGUodChlLmdldE1vbnRoKCkrMSxlLmdldEZ1bGxZZWFyKCkpKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLGUuaW50ZXJhY3RpdmVHdWlkZWxpbmU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhvKXtvLmVhY2goZnVuY3Rpb24obyl7ZnVuY3Rpb24gZygpe3ZhciBlPWQzLm1vdXNlKHRoaXMpLG49ZVswXSxyPWVbMV0sbz0hMCxhPSExO2wmJihuPWQzLmV2ZW50Lm9mZnNldFgscj1kMy5ldmVudC5vZmZzZXRZLGQzLmV2ZW50LnRhcmdldC50YWdOYW1lIT09InN2ZyImJihvPSExKSxkMy5ldmVudC50YXJnZXQuY2xhc3NOYW1lLmJhc2VWYWwubWF0Y2goIm52LWxlZ2VuZCIpJiYoYT0hMCkpLG8mJihuLT1pLmxlZnQsci09aS50b3ApO2lmKG48MHx8cjwwfHxuPnB8fHI+ZHx8ZDMuZXZlbnQucmVsYXRlZFRhcmdldCYmZDMuZXZlbnQucmVsYXRlZFRhcmdldC5vd25lclNWR0VsZW1lbnQ9PT11bmRlZmluZWR8fGEpe2lmKGwmJmQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQmJmQzLmV2ZW50LnJlbGF0ZWRUYXJnZXQub3duZXJTVkdFbGVtZW50PT09dW5kZWZpbmVkJiZkMy5ldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTmFtZS5tYXRjaCh0Lm52UG9pbnRlckV2ZW50c0NsYXNzKSlyZXR1cm47dS5lbGVtZW50TW91c2VvdXQoe21vdXNlWDpuLG1vdXNlWTpyfSksYy5yZW5kZXJHdWlkZUxpbmUobnVsbCk7cmV0dXJufXZhciBmPXMuaW52ZXJ0KG4pO3UuZWxlbWVudE1vdXNlbW92ZSh7bW91c2VYOm4sbW91c2VZOnIscG9pbnRYVmFsdWU6Zn0pfXZhciBoPWQzLnNlbGVjdCh0aGlzKSxwPW58fDk2MCxkPXJ8fDQwMCx2PWguc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtaW50ZXJhY3RpdmVMaW5lTGF5ZXIiKS5kYXRhKFtvXSksbT12LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCIgbnYtd3JhcCBudi1pbnRlcmFjdGl2ZUxpbmVMYXllciIpO20uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1pbnRlcmFjdGl2ZUd1aWRlTGluZSIpO2lmKCFmKXJldHVybjtmLm9uKCJtb3VzZW1vdmUiLGcsITApLm9uKCJtb3VzZW91dCIsZywhMCksYy5yZW5kZXJHdWlkZUxpbmU9ZnVuY3Rpb24odCl7aWYoIWEpcmV0dXJuO3ZhciBuPXYuc2VsZWN0KCIubnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUiKS5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKHQhPW51bGw/W2UudXRpbHMuTmFOdG9aZXJvKHQpXTpbXSxTdHJpbmcpO24uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm52LWd1aWRlbGluZSIpLmF0dHIoIngxIixmdW5jdGlvbihlKXtyZXR1cm4gZX0pLmF0dHIoIngyIixmdW5jdGlvbihlKXtyZXR1cm4gZX0pLmF0dHIoInkxIixkKS5hdHRyKCJ5MiIsMCksbi5leGl0KCkucmVtb3ZlKCl9fSl9dmFyIHQ9ZS5tb2RlbHMudG9vbHRpcCgpLG49bnVsbCxyPW51bGwsaT17bGVmdDowLHRvcDowfSxzPWQzLnNjYWxlLmxpbmVhcigpLG89ZDMuc2NhbGUubGluZWFyKCksdT1kMy5kaXNwYXRjaCgiZWxlbWVudE1vdXNlbW92ZSIsImVsZW1lbnRNb3VzZW91dCIpLGE9ITAsZj1udWxsLGw9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIikhPT0tMTtyZXR1cm4gYy5kaXNwYXRjaD11LGMudG9vbHRpcD10LGMubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOmkudG9wLGkubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6aS5sZWZ0LGMpOml9LGMud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxjKTpufSxjLmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLGMpOnJ9LGMueFNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsYyk6c30sYy5zaG93R3VpZGVMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsYyk6YX0sYy5zdmdDb250YWluZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSxjKTpmfSxjfSxlLmludGVyYWN0aXZlQmlzZWN0PWZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7aWYoIWUgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4gbnVsbDt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS54fSk7dmFyIHI9ZDMuYmlzZWN0b3IobikubGVmdCxpPWQzLm1heChbMCxyKGUsdCktMV0pLHM9bihlW2ldLGkpO3R5cGVvZiBzPT0idW5kZWZpbmVkIiYmKHM9aSk7aWYocz09PXQpcmV0dXJuIGk7dmFyIG89ZDMubWluKFtpKzEsZS5sZW5ndGgtMV0pLHU9bihlW29dLG8pO3JldHVybiB0eXBlb2YgdT09InVuZGVmaW5lZCImJih1PW8pLE1hdGguYWJzKHUtdCk+PU1hdGguYWJzKHMtdCk/aTpvfSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt3aW5kb3cubnYudG9vbHRpcD17fSx3aW5kb3cubnYubW9kZWxzLnRvb2x0aXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBnKCl7aWYoYSl7dmFyIGU9ZDMuc2VsZWN0KGEpO2Uubm9kZSgpLnRhZ05hbWUhPT0ic3ZnIiYmKGU9ZS5zZWxlY3QoInN2ZyIpKTt2YXIgdD1lLm5vZGUoKT9lLmF0dHIoInZpZXdCb3giKTpudWxsO2lmKHQpe3Q9dC5zcGxpdCgiICIpO3ZhciBuPXBhcnNlSW50KGUuc3R5bGUoIndpZHRoIikpL3RbMl07Zi5sZWZ0PWYubGVmdCpuLGYudG9wPWYudG9wKm59fX1mdW5jdGlvbiB5KGUpe3ZhciB0O2E/dD1kMy5zZWxlY3QoYSk6dD1kMy5zZWxlY3QoImJvZHkiKTt2YXIgbj10LnNlbGVjdCgiLm52dG9vbHRpcCIpO3JldHVybiBuLm5vZGUoKT09PW51bGwmJihuPXQuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm52dG9vbHRpcCAiKyh1P3U6Inh5LXRvb2x0aXAiKSkuYXR0cigiaWQiLGMpKSxuLm5vZGUoKS5pbm5lckhUTUw9ZSxuLnN0eWxlKCJ0b3AiLDApLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgib3BhY2l0eSIsMCksbi5zZWxlY3RBbGwoImRpdiwgdGFibGUsIHRkLCB0ciIpLmNsYXNzZWQoaCwhMCksbi5jbGFzc2VkKGgsITApLG4ubm9kZSgpfWZ1bmN0aW9uIGIoKXtpZighbClyZXR1cm47aWYoIW0obikpcmV0dXJuO2coKTt2YXIgdD1mLmxlZnQsdT1vIT1udWxsP286Zi50b3AsYz15KHYobikpO2lmKGEpe3ZhciBoPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdLHA9aD9oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD17bGVmdDowLHRvcDowfTtpZihoKXt2YXIgdz1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLnRvcD1NYXRoLmFicyh3LnRvcC1FLnRvcCksZC5sZWZ0PU1hdGguYWJzKHcubGVmdC1FLmxlZnQpfXQrPWEub2Zmc2V0TGVmdCtkLmxlZnQtMiphLnNjcm9sbExlZnQsdSs9YS5vZmZzZXRUb3ArZC50b3AtMiphLnNjcm9sbFRvcH1yZXR1cm4gcyYmcz4wJiYodT1NYXRoLmZsb29yKHUvcykqcyksZS50b29sdGlwLmNhbGNUb29sdGlwUG9zaXRpb24oW3QsdV0scixpLGMpLGJ9dmFyIHQ9bnVsbCxuPW51bGwscj0idyIsaT01MCxzPTI1LG89bnVsbCx1PW51bGwsYT1udWxsLGY9e2xlZnQ6bnVsbCx0b3A6bnVsbH0sbD0hMCxjPSJudnRvb2x0aXAtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU1KSxoPSJudi1wb2ludGVyLWV2ZW50cy1ub25lIixwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHY9ZnVuY3Rpb24oZSl7aWYodCE9bnVsbClyZXR1cm4gdDtpZihlPT1udWxsKXJldHVybiIiO3ZhciBuPSI8dGFibGU+PHRoZWFkPjx0cj48dGQgY29sc3Bhbj0nMyc+PHN0cm9uZyBjbGFzcz0neC12YWx1ZSc+IitkKGUudmFsdWUpKyI8L3N0cm9uZz48L3RkPjwvdHI+PC90aGVhZD48dGJvZHk+IjtyZXR1cm4gZS5zZXJpZXMgaW5zdGFuY2VvZiBBcnJheSYmZS5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe24rPSI8dHI+IixuKz0iPHRkIGNsYXNzPSdsZWdlbmQtY29sb3ItZ3VpZGUnPjxkaXYgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6ICIrZS5jb2xvcisiOyc+PC9kaXY+PC90ZD4iLG4rPSI8dGQgY2xhc3M9J2tleSc+IitlLmtleSsiOjwvdGQ+IixuKz0iPHRkIGNsYXNzPSd2YWx1ZSc+IitwKGUudmFsdWUsdCkrIjwvdGQ+PC90cj4ifSksbis9IjwvdGJvZHk+PC90YWJsZT4iLG59LG09ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuc2VyaWVzJiZlLnNlcmllcy5sZW5ndGg+MD8hMDohMX07cmV0dXJuIGIubnZQb2ludGVyRXZlbnRzQ2xhc3M9aCxiLmNvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxiKTp0fSxiLmNvbnRlbnRHZW5lcmF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYodj1lKSxiKTp2fSxiLmRhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxiKTpufSxiLmdyYXZpdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxiKTpyfSxiLmRpc3RhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsYik6aX0sYi5zbmFwRGlzdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSxiKTpzfSxiLmNsYXNzZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ZSxiKTp1fSxiLmNoYXJ0Q29udGFpbmVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsYik6YX0sYi5wb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZi5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDpmLmxlZnQsZi50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDpmLnRvcCxiKTpmfSxiLmZpeGVkVG9wPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsYik6b30sYi5lbmFibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsYik6bH0sYi52YWx1ZUZvcm1hdHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odHlwZW9mIGU9PSJmdW5jdGlvbiImJihwPWUpLGIpOnB9LGIuaGVhZGVyRm9ybWF0dGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGQ9ZSksYik6ZH0sYi5pZD1mdW5jdGlvbigpe3JldHVybiBjfSxifSxlLnRvb2x0aXAuc2hvdz1mdW5jdGlvbih0LG4scixpLHMsbyl7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc05hbWU9Im52dG9vbHRpcCAiKyhvP286Inh5LXRvb2x0aXAiKTt2YXIgYT1zO2lmKCFzfHxzLnRhZ05hbWUubWF0Y2goL2d8c3ZnL2kpKWE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTt1LnN0eWxlLmxlZnQ9MCx1LnN0eWxlLnRvcD0wLHUuc3R5bGUub3BhY2l0eT0wLHUuaW5uZXJIVE1MPW4sYS5hcHBlbmRDaGlsZCh1KSxzJiYodFswXT10WzBdLXMuc2Nyb2xsTGVmdCx0WzFdPXRbMV0tcy5zY3JvbGxUb3ApLGUudG9vbHRpcC5jYWxjVG9vbHRpcFBvc2l0aW9uKHQscixpLHUpfSxlLnRvb2x0aXAuZmluZEZpcnN0Tm9uU1ZHUGFyZW50PWZ1bmN0aW9uKGUpe3doaWxlKGUudGFnTmFtZS5tYXRjaCgvXmd8c3ZnJC9pKSE9PW51bGwpZT1lLnBhcmVudE5vZGU7cmV0dXJuIGV9LGUudG9vbHRpcC5maW5kVG90YWxPZmZzZXRUb3A9ZnVuY3Rpb24oZSx0KXt2YXIgbj10O2RvIGlzTmFOKGUub2Zmc2V0VG9wKXx8KG4rPWUub2Zmc2V0VG9wKTt3aGlsZShlPWUub2Zmc2V0UGFyZW50KTtyZXR1cm4gbn0sZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldExlZnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10O2RvIGlzTmFOKGUub2Zmc2V0TGVmdCl8fChuKz1lLm9mZnNldExlZnQpO3doaWxlKGU9ZS5vZmZzZXRQYXJlbnQpO3JldHVybiBufSxlLnRvb2x0aXAuY2FsY1Rvb2x0aXBQb3NpdGlvbj1mdW5jdGlvbih0LG4scixpKXt2YXIgcz1wYXJzZUludChpLm9mZnNldEhlaWdodCksbz1wYXJzZUludChpLm9mZnNldFdpZHRoKSx1PWUudXRpbHMud2luZG93U2l6ZSgpLndpZHRoLGE9ZS51dGlscy53aW5kb3dTaXplKCkuaGVpZ2h0LGY9d2luZG93LnBhZ2VZT2Zmc2V0LGw9d2luZG93LnBhZ2VYT2Zmc2V0LGMsaDthPXdpbmRvdy5pbm5lcldpZHRoPj1kb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoP2E6YS0xNix1PXdpbmRvdy5pbm5lckhlaWdodD49ZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ/dTp1LTE2LG49bnx8InMiLHI9cnx8MjA7dmFyIHA9ZnVuY3Rpb24odCl7cmV0dXJuIGUudG9vbHRpcC5maW5kVG90YWxPZmZzZXRUb3AodCxoKX0sZD1mdW5jdGlvbih0KXtyZXR1cm4gZS50b29sdGlwLmZpbmRUb3RhbE9mZnNldExlZnQodCxjKX07c3dpdGNoKG4pe2Nhc2UiZSI6Yz10WzBdLW8tcixoPXRbMV0tcy8yO3ZhciB2PWQoaSksbT1wKGkpO3Y8bCYmKGM9dFswXStyPmw/dFswXStyOmwtditjKSxtPGYmJihoPWYtbStoKSxtK3M+ZithJiYoaD1mK2EtbStoLXMpO2JyZWFrO2Nhc2UidyI6Yz10WzBdK3IsaD10WzFdLXMvMjt2YXIgdj1kKGkpLG09cChpKTt2K28+dSYmKGM9dFswXS1vLXIpLG08ZiYmKGg9Zis1KSxtK3M+ZithJiYoaD1mK2EtbStoLXMpO2JyZWFrO2Nhc2UibiI6Yz10WzBdLW8vMi01LGg9dFsxXStyO3ZhciB2PWQoaSksbT1wKGkpO3Y8bCYmKGM9bCs1KSx2K28+dSYmKGM9Yy1vLzIrNSksbStzPmYrYSYmKGg9ZithLW0raC1zKTticmVhaztjYXNlInMiOmM9dFswXS1vLzIsaD10WzFdLXMtcjt2YXIgdj1kKGkpLG09cChpKTt2PGwmJihjPWwrNSksditvPnUmJihjPWMtby8yKzUpLGY+bSYmKGg9Zik7YnJlYWs7Y2FzZSJub25lIjpjPXRbMF0saD10WzFdLXI7dmFyIHY9ZChpKSxtPXAoaSl9cmV0dXJuIGkuc3R5bGUubGVmdD1jKyJweCIsaS5zdHlsZS50b3A9aCsicHgiLGkuc3R5bGUub3BhY2l0eT0xLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpfSxlLnRvb2x0aXAuY2xlYW51cD1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm52dG9vbHRpcCIpLHQ9W107d2hpbGUoZS5sZW5ndGgpdC5wdXNoKGVbMF0pLGVbMF0uc3R5bGUudHJhbnNpdGlvbkRlbGF5PSIwICFpbXBvcnRhbnQiLGVbMF0uc3R5bGUub3BhY2l0eT0wLGVbMF0uY2xhc3NOYW1lPSJudnRvb2x0aXAtcGVuZGluZy1yZW1vdmFsIjtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2hpbGUodC5sZW5ndGgpe3ZhciBlPXQucG9wKCk7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfX0sNTAwKX19KCksZS51dGlscy53aW5kb3dTaXplPWZ1bmN0aW9uKCl7dmFyIGU9e3dpZHRoOjY0MCxoZWlnaHQ6NDgwfTtyZXR1cm4gZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCYmKGUud2lkdGg9ZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCxlLmhlaWdodD1kb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCksZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCYmKGUud2lkdGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLGUuaGVpZ2h0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpLHdpbmRvdy5pbm5lcldpZHRoJiZ3aW5kb3cuaW5uZXJIZWlnaHQmJihlLndpZHRoPXdpbmRvdy5pbm5lcldpZHRoLGUuaGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodCksZX0sZS51dGlscy53aW5kb3dSZXNpemU9ZnVuY3Rpb24oZSl7aWYoZT09PXVuZGVmaW5lZClyZXR1cm47dmFyIHQ9d2luZG93Lm9ucmVzaXplO3dpbmRvdy5vbnJlc2l6ZT1mdW5jdGlvbihuKXt0eXBlb2YgdD09ImZ1bmN0aW9uIiYmdChuKSxlKG4pfX0sZS51dGlscy5nZXRDb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBBcnJheV0iP2Z1bmN0aW9uKGUsbil7cmV0dXJuIGUuY29sb3J8fHRbbiV0Lmxlbmd0aF19OnQ6ZS51dGlscy5kZWZhdWx0Q29sb3IoKX0sZS51dGlscy5kZWZhdWx0Q29sb3I9ZnVuY3Rpb24oKXt2YXIgZT1kMy5zY2FsZS5jYXRlZ29yeTIwKCkucmFuZ2UoKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5jb2xvcnx8ZVtuJWUubGVuZ3RoXX19LGUudXRpbHMuY3VzdG9tVGhlbWU9ZnVuY3Rpb24oZSx0LG4pe3Q9dHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSxuPW58fGQzLnNjYWxlLmNhdGVnb3J5MjAoKS5yYW5nZSgpO3ZhciByPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihpLHMpe3ZhciBvPXQoaSk7cmV0dXJuIHJ8fChyPW4ubGVuZ3RoKSx0eXBlb2YgZVtvXSE9InVuZGVmaW5lZCI/dHlwZW9mIGVbb109PSJmdW5jdGlvbiI/ZVtvXSgpOmVbb106blstLXJdfX0sZS51dGlscy5wamF4PWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcihyKXtkMy5odG1sKHIsZnVuY3Rpb24ocil7dmFyIGk9ZDMuc2VsZWN0KG4pLm5vZGUoKTtpLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGQzLnNlbGVjdChyKS5zZWxlY3Qobikubm9kZSgpLGkpLGUudXRpbHMucGpheCh0LG4pfSl9ZDMuc2VsZWN0QWxsKHQpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtoaXN0b3J5LnB1c2hTdGF0ZSh0aGlzLmhyZWYsdGhpcy50ZXh0Q29udGVudCx0aGlzLmhyZWYpLHIodGhpcy5ocmVmKSxkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSksZDMuc2VsZWN0KHdpbmRvdykub24oInBvcHN0YXRlIixmdW5jdGlvbigpe2QzLmV2ZW50LnN0YXRlJiZyKGQzLmV2ZW50LnN0YXRlKX0pfSxlLnV0aWxzLmNhbGNBcHByb3hUZXh0V2lkdGg9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGQzLnNlbGVjdGlvbil7dmFyIHQ9cGFyc2VJbnQoZS5zdHlsZSgiZm9udC1zaXplIikucmVwbGFjZSgicHgiLCIiKSksbj1lLnRleHQoKS5sZW5ndGg7cmV0dXJuIG4qdCouNX1yZXR1cm4gMH0sZS51dGlscy5OYU50b1plcm89ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlIT0ibnVtYmVyInx8aXNOYU4oZSl8fGU9PT1udWxsfHxlPT09SW5maW5pdHk/MDplfSxlLnV0aWxzLm9wdGlvbnNGdW5jPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZkMy5tYXAoZSkuZm9yRWFjaChmdW5jdGlvbihlLHQpe3R5cGVvZiB0aGlzW2VdPT0iZnVuY3Rpb24iJiZ0aGlzW2VdKHQpfS5iaW5kKHRoaXMpKSx0aGlzfSxlLm1vZGVscy5heGlzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgaT1kMy5zZWxlY3QodGhpcyksdj1pLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWF4aXMiKS5kYXRhKFtlXSksbT12LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYXhpcyIpLGc9bS5hcHBlbmQoImciKSx5PXYuc2VsZWN0KCJnIik7cCE9PW51bGw/dC50aWNrcyhwKToodC5vcmllbnQoKT09InRvcCJ8fHQub3JpZW50KCk9PSJib3R0b20iKSYmdC50aWNrcyhNYXRoLmFicyhzLnJhbmdlKClbMV0tcy5yYW5nZSgpWzBdKS8xMDApLHkudHJhbnNpdGlvbigpLmNhbGwodCksZD1kfHx0LnNjYWxlKCk7dmFyIGI9dC50aWNrRm9ybWF0KCk7Yj09bnVsbCYmKGI9ZC50aWNrRm9ybWF0KCkpO3ZhciB3PXkuc2VsZWN0QWxsKCJ0ZXh0Lm52LWF4aXNsYWJlbCIpLmRhdGEoW298fG51bGxdKTt3LmV4aXQoKS5yZW1vdmUoKTtzd2l0Y2godC5vcmllbnQoKSl7Y2FzZSJ0b3AiOncuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIpO3ZhciBFPXMucmFuZ2UoKS5sZW5ndGg9PTI/cy5yYW5nZSgpWzFdOnMucmFuZ2UoKVtzLnJhbmdlKCkubGVuZ3RoLTFdKyhzLnJhbmdlKClbMV0tcy5yYW5nZSgpWzBdKTt3LmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsMCkuYXR0cigieCIsRS8yKTtpZih1KXt2YXIgUz12LnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShzLmRvbWFpbigpKTtTLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1heGlzTWF4TWluIikuYXBwZW5kKCJ0ZXh0IiksUy5leGl0KCkucmVtb3ZlKCksUy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3MoZSkrIiwwKSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIsIjBlbSIpLmF0dHIoInkiLC10LnRpY2tQYWRkaW5nKCkpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChmdW5jdGlvbihlLHQpe3ZhciBuPWIoZSk7cmV0dXJuKCIiK24pLm1hdGNoKCJOYU4iKT8iIjpufSksUy50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitzLnJhbmdlKClbdF0rIiwwKSJ9KX1icmVhaztjYXNlImJvdHRvbSI6dmFyIHg9MzYsVD0zMCxOPXkuc2VsZWN0QWxsKCJnIikuc2VsZWN0KCJ0ZXh0Iik7aWYoZiUzNjApe04uZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0QkJveCgpLndpZHRoO24+VCYmKFQ9bil9KTt2YXIgQz1NYXRoLmFicyhNYXRoLnNpbihmKk1hdGguUEkvMTgwKSkseD0oQz9DKlQ6VCkrMzA7Ti5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4icm90YXRlKCIrZisiIDAsMCkifSkuc3R5bGUoInRleHQtYW5jaG9yIixmJTM2MD4wPyJzdGFydCI6ImVuZCIpfXcuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIpO3ZhciBFPXMucmFuZ2UoKS5sZW5ndGg9PTI/cy5yYW5nZSgpWzFdOnMucmFuZ2UoKVtzLnJhbmdlKCkubGVuZ3RoLTFdKyhzLnJhbmdlKClbMV0tcy5yYW5nZSgpWzBdKTt3LmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIseCkuYXR0cigieCIsRS8yKTtpZih1KXt2YXIgUz12LnNlbGVjdEFsbCgiZy5udi1heGlzTWF4TWluIikuZGF0YShbcy5kb21haW4oKVswXSxzLmRvbWFpbigpW3MuZG9tYWluKCkubGVuZ3RoLTFdXSk7Uy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLFMuZXhpdCgpLnJlbW92ZSgpLFMuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIisocyhlKSsoaD9zLnJhbmdlQmFuZCgpLzI6MCkpKyIsMCkifSkuc2VsZWN0KCJ0ZXh0IikuYXR0cigiZHkiLCIuNzFlbSIpLmF0dHIoInkiLHQudGlja1BhZGRpbmcoKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQsbil7cmV0dXJuInJvdGF0ZSgiK2YrIiAwLDApIn0pLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZj9mJTM2MD4wPyJzdGFydCI6ImVuZCI6Im1pZGRsZSIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj1iKGUpO3JldHVybigiIituKS5tYXRjaCgiTmFOIik/IiI6bn0pLFMudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHMoZSkrKGg/cy5yYW5nZUJhbmQoKS8yOjApKSsiLDApIn0pfWMmJk4uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0JTI9PTA/IjAiOiIxMiIpKyIpIn0pO2JyZWFrO2Nhc2UicmlnaHQiOncuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNsYWJlbCIpLHcuc3R5bGUoInRleHQtYW5jaG9yIixsPyJtaWRkbGUiOiJiZWdpbiIpLmF0dHIoInRyYW5zZm9ybSIsbD8icm90YXRlKDkwKSI6IiIpLmF0dHIoInkiLGw/LU1hdGgubWF4KG4ucmlnaHQscikrMTI6LTEwKS5hdHRyKCJ4IixsP3MucmFuZ2UoKVswXS8yOnQudGlja1BhZGRpbmcoKSk7aWYodSl7dmFyIFM9di5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiIpLmRhdGEocy5kb21haW4oKSk7Uy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXhpc01heE1pbiIpLmFwcGVuZCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwwKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKDAsIitzKGUpKyIpIn0pLnNlbGVjdCgidGV4dCIpLmF0dHIoImR5IiwiLjMyZW0iKS5hdHRyKCJ5IiwwKS5hdHRyKCJ4Iix0LnRpY2tQYWRkaW5nKCkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikudGV4dChmdW5jdGlvbihlLHQpe3ZhciBuPWIoZSk7cmV0dXJuKCIiK24pLm1hdGNoKCJOYU4iKT8iIjpufSksUy50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3MucmFuZ2UoKVt0XSsiKSJ9KS5zZWxlY3QoInRleHQiKS5zdHlsZSgib3BhY2l0eSIsMSl9YnJlYWs7Y2FzZSJsZWZ0Ijp3LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi1heGlzbGFiZWwiKSx3LnN0eWxlKCJ0ZXh0LWFuY2hvciIsbD8ibWlkZGxlIjoiZW5kIikuYXR0cigidHJhbnNmb3JtIixsPyJyb3RhdGUoLTkwKSI6IiIpLmF0dHIoInkiLGw/LU1hdGgubWF4KG4ubGVmdCxyKSsxMjotMTApLmF0dHIoIngiLGw/LXMucmFuZ2UoKVswXS8yOi10LnRpY2tQYWRkaW5nKCkpO2lmKHUpe3ZhciBTPXYuc2VsZWN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5kYXRhKHMuZG9tYWluKCkpO1MuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWF4aXNNYXhNaW4iKS5hcHBlbmQoInRleHQiKS5zdHlsZSgib3BhY2l0eSIsMCksUy5leGl0KCkucmVtb3ZlKCksUy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrZChlKSsiKSJ9KS5zZWxlY3QoInRleHQiKS5hdHRyKCJkeSIsIi4zMmVtIikuYXR0cigieSIsMCkuYXR0cigieCIsLXQudGlja1BhZGRpbmcoKSkuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS50ZXh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49YihlKTtyZXR1cm4oIiIrbikubWF0Y2goIk5hTiIpPyIiOm59KSxTLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrcy5yYW5nZSgpW3RdKyIpIn0pLnNlbGVjdCgidGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKX19dy50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksdSYmKHQub3JpZW50KCk9PT0ibGVmdCJ8fHQub3JpZW50KCk9PT0icmlnaHQiKSYmKHkuc2VsZWN0QWxsKCJnIikuZWFjaChmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5hdHRyKCJvcGFjaXR5IiwxKTtpZihzKGUpPHMucmFuZ2UoKVsxXSsxMHx8cyhlKT5zLnJhbmdlKClbMF0tMTApKGU+MWUtMTB8fGU8LTFlLTEwKSYmZDMuc2VsZWN0KHRoaXMpLmF0dHIoIm9wYWNpdHkiLDApLGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5hdHRyKCJvcGFjaXR5IiwwKX0pLHMuZG9tYWluKClbMF09PXMuZG9tYWluKClbMV0mJnMuZG9tYWluKClbMF09PTAmJnYuc2VsZWN0QWxsKCJnLm52LWF4aXNNYXhNaW4iKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8wOjF9KSk7aWYodSYmKHQub3JpZW50KCk9PT0idG9wInx8dC5vcmllbnQoKT09PSJib3R0b20iKSl7dmFyIGs9W107di5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiIpLmVhY2goZnVuY3Rpb24oZSx0KXt0cnl7dD9rLnB1c2gocyhlKS10aGlzLmdldEJCb3goKS53aWR0aC00KTprLnB1c2gocyhlKSt0aGlzLmdldEJCb3goKS53aWR0aCs0KX1jYXRjaChuKXt0P2sucHVzaChzKGUpLTQpOmsucHVzaChzKGUpKzQpfX0pLHkuc2VsZWN0QWxsKCJnIikuZWFjaChmdW5jdGlvbihlLHQpe2lmKHMoZSk8a1swXXx8cyhlKT5rWzFdKWU+MWUtMTB8fGU8LTFlLTEwP2QzLnNlbGVjdCh0aGlzKS5yZW1vdmUoKTpkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCl9KX1hJiZ5LnNlbGVjdEFsbCgiLnRpY2siKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXBhcnNlRmxvYXQoTWF0aC5yb3VuZChlLl9fZGF0YV9fKjFlNSkvMWU2KSYmZS5fX2RhdGFfXyE9PXVuZGVmaW5lZH0pLmNsYXNzZWQoInplcm8iLCEwKSxkPXMuY29weSgpfSksdn12YXIgdD1kMy5zdmcuYXhpcygpLG49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxyPTc1LGk9NjAscz1kMy5zY2FsZS5saW5lYXIoKSxvPW51bGwsdT0hMCxhPSEwLGY9MCxsPSEwLGM9ITEsaD0hMSxwPW51bGw7dC5zY2FsZShzKS5vcmllbnQoImJvdHRvbSIpLnRpY2tGb3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTt2YXIgZDtyZXR1cm4gdi5heGlzPXQsZDMucmViaW5kKHYsdCwib3JpZW50IiwidGlja1ZhbHVlcyIsInRpY2tTdWJkaXZpZGUiLCJ0aWNrU2l6ZSIsInRpY2tQYWRkaW5nIiwidGlja0Zvcm1hdCIpLGQzLnJlYmluZCh2LHMsImRvbWFpbiIsInJhbmdlIiwicmFuZ2VCYW5kIiwicmFuZ2VCYW5kcyIpLHYub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQodiksdi5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6bi50b3Asbi5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDpuLnJpZ2h0LG4uYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206bi5ib3R0b20sbi5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsdik6bn0sdi53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHYpOnJ9LHYudGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSx2KTpwfSx2LmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHYpOml9LHYuYXhpc0xhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsdik6b30sdi5zaG93TWF4TWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsdik6dX0sdi5oaWdobGlnaHRaZXJvPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsdik6YX0sdi5zY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLHQuc2NhbGUocyksaD10eXBlb2Ygcy5yYW5nZUJhbmRzPT0iZnVuY3Rpb24iLGQzLnJlYmluZCh2LHMsImRvbWFpbiIsInJhbmdlIiwicmFuZ2VCYW5kIiwicmFuZ2VCYW5kcyIpLHYpOnN9LHYucm90YXRlWUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsdik6bH0sdi5yb3RhdGVMYWJlbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSx2KTpmfSx2LnN0YWdnZXJMYWJlbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSx2KTpjfSx2fSxlLm1vZGVscy5idWxsZXQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUsbil7dmFyIHA9Yy10LmxlZnQtdC5yaWdodCxtPWgtdC50b3AtdC5ib3R0b20sZz1kMy5zZWxlY3QodGhpcykseT1pLmNhbGwodGhpcyxlLG4pLnNsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5nKSxiPXMuY2FsbCh0aGlzLGUsbikuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLHc9by5jYWxsKHRoaXMsZSxuKS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksRT11LmNhbGwodGhpcyxlLG4pLnNsaWNlKCksUz1hLmNhbGwodGhpcyxlLG4pLnNsaWNlKCkseD1mLmNhbGwodGhpcyxlLG4pLnNsaWNlKCksVD1kMy5zY2FsZS5saW5lYXIoKS5kb21haW4oZDMuZXh0ZW50KGQzLm1lcmdlKFtsLHldKSkpLnJhbmdlKHI/W3AsMF06WzAscF0pLE49dGhpcy5fX2NoYXJ0X198fGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxJbmZpbml0eV0pLnJhbmdlKFQucmFuZ2UoKSk7dGhpcy5fX2NoYXJ0X189VDt2YXIgQz1kMy5taW4oeSksaz1kMy5tYXgoeSksTD15WzFdLEE9Zy5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1idWxsZXQiKS5kYXRhKFtlXSksTz1BLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtYnVsbGV0IiksTT1PLmFwcGVuZCgiZyIpLF89QS5zZWxlY3QoImciKTtNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFuZ2UgbnYtcmFuZ2VNYXgiKSxNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFuZ2UgbnYtcmFuZ2VBdmciKSxNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtcmFuZ2UgbnYtcmFuZ2VNaW4iKSxNLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtbWVhc3VyZSIpLE0uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJudi1tYXJrZXJUcmlhbmdsZSIpLEEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBEPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhOKGUpLU4oMCkpfSxQPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhUKGUpLVQoMCkpfSxIPWZ1bmN0aW9uKGUpe3JldHVybiBlPDA/TihlKTpOKDApfSxCPWZ1bmN0aW9uKGUpe3JldHVybiBlPDA/VChlKTpUKDApfTtfLnNlbGVjdCgicmVjdC5udi1yYW5nZU1heCIpLmF0dHIoImhlaWdodCIsbSkuYXR0cigid2lkdGgiLFAoaz4wP2s6QykpLmF0dHIoIngiLEIoaz4wP2s6QykpLmRhdHVtKGs+MD9rOkMpLF8uc2VsZWN0KCJyZWN0Lm52LXJhbmdlQXZnIikuYXR0cigiaGVpZ2h0IixtKS5hdHRyKCJ3aWR0aCIsUChMKSkuYXR0cigieCIsQihMKSkuZGF0dW0oTCksXy5zZWxlY3QoInJlY3QubnYtcmFuZ2VNaW4iKS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoIndpZHRoIixQKGspKS5hdHRyKCJ4IixCKGspKS5hdHRyKCJ3aWR0aCIsUChrPjA/QzprKSkuYXR0cigieCIsQihrPjA/QzprKSkuZGF0dW0oaz4wP0M6ayksXy5zZWxlY3QoInJlY3QubnYtbWVhc3VyZSIpLnN0eWxlKCJmaWxsIixkKS5hdHRyKCJoZWlnaHQiLG0vMykuYXR0cigieSIsbS8zKS5hdHRyKCJ3aWR0aCIsdzwwP1QoMCktVCh3WzBdKTpUKHdbMF0pLVQoMCkpLmF0dHIoIngiLEIodykpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTp3WzBdLGxhYmVsOnhbMF18fCJDdXJyZW50Iixwb3M6W1Qod1swXSksbS8yXX0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe3YuZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTp3WzBdLGxhYmVsOnhbMF18fCJDdXJyZW50In0pfSk7dmFyIGo9bS82O2JbMF0/Xy5zZWxlY3RBbGwoInBhdGgubnYtbWFya2VyVHJpYW5nbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitUKGJbMF0pKyIsIittLzIrIikifSkuYXR0cigiZCIsIk0wLCIraisiTCIraisiLCIrIC1qKyIgIisgLWorIiwiKyAtaisiWiIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7di5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTpiWzBdLGxhYmVsOlNbMF18fCJQcmV2aW91cyIscG9zOltUKGJbMF0pLG0vMl19KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt2LmVsZW1lbnRNb3VzZW91dCh7dmFsdWU6YlswXSxsYWJlbDpTWzBdfHwiUHJldmlvdXMifSl9KTpfLnNlbGVjdEFsbCgicGF0aC5udi1tYXJrZXJUcmlhbmdsZSIpLnJlbW92ZSgpLEEuc2VsZWN0QWxsKCIubnYtcmFuZ2UiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLHQpe3ZhciBuPUVbdF18fCh0P3Q9PTE/Ik1lYW4iOiJNaW5pbXVtIjoiTWF4aW11bSIpO3YuZWxlbWVudE1vdXNlb3Zlcih7dmFsdWU6ZSxsYWJlbDpuLHBvczpbVChlKSxtLzJdfSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7dmFyIG49RVt0XXx8KHQ/dD09MT8iTWVhbiI6Ik1pbmltdW0iOiJNYXhpbXVtIik7di5lbGVtZW50TW91c2VvdXQoe3ZhbHVlOmUsbGFiZWw6bn0pfSl9KSxtfXZhciB0PXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj0ibGVmdCIscj0hMSxpPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJhbmdlc30scz1mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXJrZXJzfSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlLm1lYXN1cmVzfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJhbmdlTGFiZWxzP2UucmFuZ2VMYWJlbHM6W119LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFya2VyTGFiZWxzP2UubWFya2VyTGFiZWxzOltdfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBlLm1lYXN1cmVMYWJlbHM/ZS5tZWFzdXJlTGFiZWxzOltdfSxsPVswXSxjPTM4MCxoPTMwLHA9bnVsbCxkPWUudXRpbHMuZ2V0Q29sb3IoWyIjMWY3N2I0Il0pLHY9ZDMuZGlzcGF0Y2goImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXR1cm4gbS5kaXNwYXRjaD12LG0ub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQobSksbS5vcmllbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxyPW49PSJyaWdodCJ8fG49PSJib3R0b20iLG0pOm59LG0ucmFuZ2VzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsbSk6aX0sbS5tYXJrZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsbSk6c30sbS5tZWFzdXJlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLG0pOm99LG0uZm9yY2VYPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsbSk6bH0sbS53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLG0pOmN9LG0uaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUsbSk6aH0sbS5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsbSk6dH0sbS50aWNrRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUsbSk6cH0sbS5jb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lLnV0aWxzLmdldENvbG9yKHQpLG0pOmR9LG19LGUubW9kZWxzLmJ1bGxldENoYXJ0PWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihuLGgpe3ZhciBnPWQzLnNlbGVjdCh0aGlzKSx5PShhfHxwYXJzZUludChnLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1pLmxlZnQtaS5yaWdodCxiPWYtaS50b3AtaS5ib3R0b20sdz10aGlzO20udXBkYXRlPWZ1bmN0aW9uKCl7bShlKX0sbS5jb250YWluZXI9dGhpcztpZighbnx8IXMuY2FsbCh0aGlzLG4saCkpe3ZhciBFPWcuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbcF0pO3JldHVybiBFLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxFLmF0dHIoIngiLGkubGVmdCt5LzIpLmF0dHIoInkiLDE4K2kudG9wK2IvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLG19Zy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgUz1zLmNhbGwodGhpcyxuLGgpLnNsaWNlKCkuc29ydChkMy5kZXNjZW5kaW5nKSx4PW8uY2FsbCh0aGlzLG4saCkuc2xpY2UoKS5zb3J0KGQzLmRlc2NlbmRpbmcpLFQ9dS5jYWxsKHRoaXMsbixoKS5zbGljZSgpLnNvcnQoZDMuZGVzY2VuZGluZyksTj1nLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWJ1bGxldENoYXJ0IikuZGF0YShbbl0pLEM9Ti5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWJ1bGxldENoYXJ0Iiksaz1DLmFwcGVuZCgiZyIpLEw9Ti5zZWxlY3QoImciKTtrLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYnVsbGV0V3JhcCIpLGsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi10aXRsZXMiKSxOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kubGVmdCsiLCIraS50b3ArIikiKTt2YXIgQT1kMy5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsTWF0aC5tYXgoU1swXSx4WzBdLFRbMF0pXSkucmFuZ2Uocj9beSwwXTpbMCx5XSksTz10aGlzLl9fY2hhcnRfX3x8ZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLEluZmluaXR5XSkucmFuZ2UoQS5yYW5nZSgpKTt0aGlzLl9fY2hhcnRfXz1BO3ZhciBNPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhPKGUpLU8oMCkpfSxfPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhBKGUpLUEoMCkpfSxEPWsuc2VsZWN0KCIubnYtdGl0bGVzIikuYXBwZW5kKCJnIikuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLTYsIisoZi1pLnRvcC1pLmJvdHRvbSkvMisiKSIpO0QuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi10aXRsZSIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGl0bGV9KSxELmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnYtc3VidGl0bGUiKS5hdHRyKCJkeSIsIjFlbSIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3VidGl0bGV9KSx0LndpZHRoKHkpLmhlaWdodChiKTt2YXIgUD1MLnNlbGVjdCgiLm52LWJ1bGxldFdyYXAiKTtkMy50cmFuc2l0aW9uKFApLmNhbGwodCk7dmFyIEg9bHx8QS50aWNrRm9ybWF0KHkvMTAwKSxCPUwuc2VsZWN0QWxsKCJnLm52LXRpY2siKS5kYXRhKEEudGlja3MoeS81MCksZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnR8fEgoZSl9KSxqPUIuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXRpY2siKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitPKGUpKyIsMCkifSkuc3R5bGUoIm9wYWNpdHkiLDFlLTYpO2ouYXBwZW5kKCJsaW5lIikuYXR0cigieTEiLGIpLmF0dHIoInkyIixiKjcvNiksai5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieSIsYio3LzYpLnRleHQoSCk7dmFyIEY9ZDMudHJhbnNpdGlvbihCKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitBKGUpKyIsMCkifSkuc3R5bGUoIm9wYWNpdHkiLDEpO0Yuc2VsZWN0KCJsaW5lIikuYXR0cigieTEiLGIpLmF0dHIoInkyIixiKjcvNiksRi5zZWxlY3QoInRleHQiKS5hdHRyKCJ5IixiKjcvNiksZDMudHJhbnNpdGlvbihCLmV4aXQoKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrQShlKSsiLDApIn0pLnN0eWxlKCJvcGFjaXR5IiwxZS02KS5yZW1vdmUoKSxkLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7ZS5rZXk9bi50aXRsZSxjJiZ2KGUsdy5wYXJlbnROb2RlKX0pfSksZDMudGltZXIuZmx1c2goKSxtfXZhciB0PWUubW9kZWxzLmJ1bGxldCgpLG49ImxlZnQiLHI9ITEsaT17dG9wOjUscmlnaHQ6NDAsYm90dG9tOjIwLGxlZnQ6MTIwfSxzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJhbmdlc30sbz1mdW5jdGlvbihlKXtyZXR1cm4gZS5tYXJrZXJzfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBlLm1lYXN1cmVzfSxhPW51bGwsZj01NSxsPW51bGwsYz0hMCxoPWZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK3QrIjwvaDM+IisiPHA+IituKyI8L3A+In0scD0iTm8gRGF0YSBBdmFpbGFibGUuIixkPWQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiksdj1mdW5jdGlvbih0LG4pe3ZhciByPXQucG9zWzBdKyhuLm9mZnNldExlZnR8fDApK2kubGVmdCxzPXQucG9zWzFdKyhuLm9mZnNldFRvcHx8MCkraS50b3Asbz1oKHQua2V5LHQubGFiZWwsdC52YWx1ZSx0LG0pO2UudG9vbHRpcC5zaG93KFtyLHNdLG8sdC52YWx1ZTwwPyJlIjoidyIsbnVsbCxuKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZC50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtkLnRvb2x0aXBIaWRlKGUpfSksZC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7YyYmZS50b29sdGlwLmNsZWFudXAoKX0pLG0uZGlzcGF0Y2g9ZCxtLmJ1bGxldD10LGQzLnJlYmluZChtLHQsImNvbG9yIiksbS5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChtKSxtLm9yaWVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHI9bj09InJpZ2h0Inx8bj09ImJvdHRvbSIsbSk6bn0sbS5yYW5nZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSxtKTpzfSxtLm1hcmtlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxtKTpvfSxtLm1lYXN1cmVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsbSk6dX0sbS53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLG0pOmF9LG0uaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUsbSk6Zn0sbS5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6aS50b3AsaS5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDppLnJpZ2h0LGkuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206aS5ib3R0b20saS5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDppLmxlZnQsbSk6aX0sbS50aWNrRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsbSk6bH0sbS50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLG0pOmN9LG0udG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSxtKTpofSxtLm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLG0pOnB9LG19LGUubW9kZWxzLmN1bXVsYXRpdmVMaW5lQ2hhcnQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhiKXtyZXR1cm4gYi5lYWNoKGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIHEoZSx0KXtkMy5zZWxlY3QoXy5jb250YWluZXIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKX1mdW5jdGlvbiBSKGUsdCl7Ty54PWQzLmV2ZW50LngsTy5pPU1hdGgucm91bmQoQS5pbnZlcnQoTy54KSkscnQoKX1mdW5jdGlvbiBVKGUsdCl7ZDMuc2VsZWN0KF8uY29udGFpbmVyKS5zdHlsZSgiY3Vyc29yIiwiYXV0byIpLHguaW5kZXg9Ty5pLGsuc3RhdGVDaGFuZ2UoeCl9ZnVuY3Rpb24gcnQoKXtudC5kYXRhKFtPXSk7dmFyIGU9Xy50cmFuc2l0aW9uRHVyYXRpb24oKTtfLnRyYW5zaXRpb25EdXJhdGlvbigwKSxfLnVwZGF0ZSgpLF8udHJhbnNpdGlvbkR1cmF0aW9uKGUpfXZhciBQPWQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJudi1jaGFydC0iK1MsITApLEg9dGhpcyxCPShmfHxwYXJzZUludChQLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11LmxlZnQtdS5yaWdodCxqPShsfHxwYXJzZUludChQLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b207Xy51cGRhdGU9ZnVuY3Rpb24oKXtQLnRyYW5zaXRpb24oKS5kdXJhdGlvbihMKS5jYWxsKF8pfSxfLmNvbnRhaW5lcj10aGlzLHguZGlzYWJsZWQ9Yi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIVQpe3ZhciBGO1Q9e307Zm9yKEYgaW4geCl4W0ZdaW5zdGFuY2VvZiBBcnJheT9UW0ZdPXhbRl0uc2xpY2UoMCk6VFtGXT14W0ZdfXZhciBJPWQzLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixxKS5vbigiZHJhZyIsUikub24oImRyYWdlbmQiLFUpO2lmKCFifHwhYi5sZW5ndGh8fCFiLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgej1QLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW05dKTtyZXR1cm4gei5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksei5hdHRyKCJ4Iix1LmxlZnQrQi8yKS5hdHRyKCJ5Iix1LnRvcCtqLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxffVAuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksdz10LnhTY2FsZSgpLEU9dC55U2NhbGUoKTtpZigheSl7dmFyIFc9Yi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KS5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgcj1kMy5leHRlbnQoZS52YWx1ZXMsdC55KCkpO3JldHVybiByWzBdPC0wLjk1JiYoclswXT0tMC45NSksWyhyWzBdLXJbMV0pLygxK3JbMV0pLChyWzFdLXJbMF0pLygxK3JbMF0pXX0pLFg9W2QzLm1pbihXLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdfSksZDMubWF4KFcsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19KV07dC55RG9tYWluKFgpfWVsc2UgdC55RG9tYWluKG51bGwpO0EuZG9tYWluKFswLGJbMF0udmFsdWVzLmxlbmd0aC0xXSkucmFuZ2UoWzAsQl0pLmNsYW1wKCEwKTt2YXIgYj1EKE8uaSxiKSxWPWc/Im5vbmUiOiJhbGwiLCQ9UC5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1jdW11bGF0aXZlTGluZSIpLmRhdGEoW2JdKSxKPSQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1jdW11bGF0aXZlTGluZSIpLmFwcGVuZCgiZyIpLEs9JC5zZWxlY3QoImciKTtKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtaW50ZXJhY3RpdmUiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFja2dyb3VuZCIpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLFYpLEouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1hdmdMaW5lc1dyYXAiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksSi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIiksYyYmKGkud2lkdGgoQiksSy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oYikuY2FsbChpKSx1LnRvcCE9aS5oZWlnaHQoKSYmKHUudG9wPWkuaGVpZ2h0KCksaj0obHx8cGFyc2VJbnQoUC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9tKSxLLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtdS50b3ArIikiKSk7aWYobSl7dmFyIFE9W3trZXk6IlJlLXNjYWxlIHktYXhpcyIsZGlzYWJsZWQ6IXl9XTtzLndpZHRoKDE0MCkuY29sb3IoWyIjNDQ0IiwiIzQ0NCIsIiM0NDQiXSksSy5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAiKS5kYXR1bShRKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtdS50b3ArIikiKS5jYWxsKHMpfSQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5sZWZ0KyIsIit1LnRvcCsiKSIpLGQmJksuc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQisiLDApIik7dmFyIEc9Yi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGVtcERpc2FibGVkfSk7JC5zZWxlY3QoIi50ZW1wRGlzYWJsZWQiKS5yZW1vdmUoKSxHLmxlbmd0aCYmJC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInRlbXBEaXNhYmxlZCIpLmF0dHIoIngiLEIvMikuYXR0cigieSIsIi0uNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIpLnRleHQoRy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSkuam9pbigiLCAiKSsiIHZhbHVlcyBjYW5ub3QgYmUgY2FsY3VsYXRlZCBmb3IgdGhpcyB0aW1lIHBlcmlvZC4iKSxnJiYoby53aWR0aChCKS5oZWlnaHQoaikubWFyZ2luKHtsZWZ0OnUubGVmdCx0b3A6dS50b3B9KS5zdmdDb250YWluZXIoUCkueFNjYWxlKHcpLCQuc2VsZWN0KCIubnYtaW50ZXJhY3RpdmUiKS5jYWxsKG8pKSxKLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5hcHBlbmQoInJlY3QiKSxLLnNlbGVjdCgiLm52LWJhY2tncm91bmQgcmVjdCIpLmF0dHIoIndpZHRoIixCKS5hdHRyKCJoZWlnaHQiLGopLHQueShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNwbGF5Lnl9KS53aWR0aChCKS5oZWlnaHQoaikuY29sb3IoYi5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YShlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWJbdF0uZGlzYWJsZWQmJiFiW3RdLnRlbXBEaXNhYmxlZH0pKTt2YXIgWT1LLnNlbGVjdCgiLm52LWxpbmVzV3JhcCIpLmRhdHVtKGIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiYhZS50ZW1wRGlzYWJsZWR9KSk7WS5jYWxsKHQpLGIuZm9yRWFjaChmdW5jdGlvbihlLHQpe2Uuc2VyaWVzSW5kZXg9dH0pO3ZhciBaPWIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiYhIUMoZSl9KSxldD1LLnNlbGVjdCgiLm52LWF2Z0xpbmVzV3JhcCIpLnNlbGVjdEFsbCgibGluZSIpLmRhdGEoWixmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXl9KSx0dD1mdW5jdGlvbihlKXt2YXIgdD1FKEMoZSkpO3JldHVybiB0PDA/MDp0Pmo/ajp0fTtldC5lbnRlcigpLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsMTAiKS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLG4pe3JldHVybiB0LmNvbG9yKCkoZSxlLnNlcmllc0luZGV4KX0pLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsQikuYXR0cigieTEiLHR0KS5hdHRyKCJ5MiIsdHQpLGV0LnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oZSl7dmFyIHQ9RShDKGUpKTtyZXR1cm4gdDwwfHx0Pmo/MDoxfSkuYXR0cigieDEiLDApLmF0dHIoIngyIixCKS5hdHRyKCJ5MSIsdHQpLmF0dHIoInkyIix0dCksZXQuZXhpdCgpLnJlbW92ZSgpO3ZhciBudD1ZLnNlbGVjdEFsbCgiLm52LWluZGV4TGluZSIpLmRhdGEoW09dKTtudC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwibnYtaW5kZXhMaW5lIikuYXR0cigid2lkdGgiLDMpLmF0dHIoIngiLC0yKS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwuNSkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuY2FsbChJKSxudC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitBKGUuaSkrIiwwKSJ9KS5hdHRyKCJoZWlnaHQiLGopLGgmJihuLnNjYWxlKHcpLnRpY2tzKE1hdGgubWluKGJbMF0udmFsdWVzLmxlbmd0aCxCLzcwKSkudGlja1NpemUoLWosMCksSy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK0UucmFuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRpb24oSy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKSkuY2FsbChuKSkscCYmKHIuc2NhbGUoRSkudGlja3Moai8zNikudGlja1NpemUoLUIsMCksZDMudHJhbnNpdGlvbihLLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpKS5jYWxsKHIpKSxLLnNlbGVjdCgiLm52LWJhY2tncm91bmQgcmVjdCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtPLng9ZDMubW91c2UodGhpcylbMF0sTy5pPU1hdGgucm91bmQoQS5pbnZlcnQoTy54KSkseC5pbmRleD1PLmksay5zdGF0ZUNoYW5nZSh4KSxydCgpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudENsaWNrIixmdW5jdGlvbihlKXtPLmk9ZS5wb2ludEluZGV4LE8ueD1BKE8uaSkseC5pbmRleD1PLmksay5zdGF0ZUNoYW5nZSh4KSxydCgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmxlZD0hZS5kaXNhYmxlZCx5PSFlLmRpc2FibGVkLHgucmVzY2FsZVk9eSxrLnN0YXRlQ2hhbmdlKHgpLF8udXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7eC5kaXNhYmxlZD1lLmRpc2FibGVkLGsuc3RhdGVDaGFuZ2UoeCksXy51cGRhdGUoKX0pLG8uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW1vdmUiLGZ1bmN0aW9uKGkpe3QuY2xlYXJIaWdobGlnaHRzKCk7dmFyIHMsZixsLGM9W107Yi5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXJpZXNJbmRleD10LCFlLmRpc2FibGVkfSkuZm9yRWFjaChmdW5jdGlvbihuLHIpe2Y9ZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxpLnBvaW50WFZhbHVlLF8ueCgpKSx0LmhpZ2hsaWdodFBvaW50KHIsZiwhMCk7dmFyIG89bi52YWx1ZXNbZl07aWYodHlwZW9mIG89PSJ1bmRlZmluZWQiKXJldHVybjt0eXBlb2Ygcz09InVuZGVmaW5lZCImJihzPW8pLHR5cGVvZiBsPT0idW5kZWZpbmVkIiYmKGw9Xy54U2NhbGUoKShfLngoKShvLGYpKSksYy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6Xy55KCkobyxmKSxjb2xvcjphKG4sbi5zZXJpZXNJbmRleCl9KX0pO3ZhciBoPW4udGlja0Zvcm1hdCgpKF8ueCgpKHMsZikpO28udG9vbHRpcC5wb3NpdGlvbih7bGVmdDpsK3UubGVmdCx0b3A6aS5tb3VzZVkrdS50b3B9KS5jaGFydENvbnRhaW5lcihILnBhcmVudE5vZGUpLmVuYWJsZWQodikudmFsdWVGb3JtYXR0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci50aWNrRm9ybWF0KCkoZSl9KS5kYXRhKHt2YWx1ZTpoLHNlcmllczpjfSkoKSxvLnJlbmRlckd1aWRlTGluZShsKX0pLG8uZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dCIsZnVuY3Rpb24oZSl7ay50b29sdGlwSGlkZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9KSxrLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7diYmTShlLEgucGFyZW50Tm9kZSl9KSxrLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGUuZGlzYWJsZWQhPSJ1bmRlZmluZWQiJiYoYi5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD1lLmRpc2FibGVkW25dfSkseC5kaXNhYmxlZD1lLmRpc2FibGVkKSx0eXBlb2YgZS5pbmRleCE9InVuZGVmaW5lZCImJihPLmk9ZS5pbmRleCxPLng9QShPLmkpLHguaW5kZXg9ZS5pbmRleCxudC5kYXRhKFtPXSkpLHR5cGVvZiBlLnJlc2NhbGVZIT0idW5kZWZpbmVkIiYmKHk9ZS5yZXNjYWxlWSksXy51cGRhdGUoKX0pfSksX31mdW5jdGlvbiBEKGUsbil7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKG4scil7aWYoIW4udmFsdWVzKXJldHVybiBuO3ZhciBpPXQueSgpKG4udmFsdWVzW2VdLGUpO3JldHVybiBpPC0wLjk1PyhuLnRlbXBEaXNhYmxlZD0hMCxuKToobi50ZW1wRGlzYWJsZWQ9ITEsbi52YWx1ZXM9bi52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGUuZGlzcGxheT17eToodC55KCkoZSxuKS1pKS8oMStpKX0sZX0pLG4pfSl9dmFyIHQ9ZS5tb2RlbHMubGluZSgpLG49ZS5tb2RlbHMuYXhpcygpLHI9ZS5tb2RlbHMuYXhpcygpLGk9ZS5tb2RlbHMubGVnZW5kKCkscz1lLm1vZGVscy5sZWdlbmQoKSxvPWUuaW50ZXJhY3RpdmVHdWlkZWxpbmUoKSx1PXt0b3A6MzAscmlnaHQ6MzAsYm90dG9tOjUwLGxlZnQ6NjB9LGE9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxmPW51bGwsbD1udWxsLGM9ITAsaD0hMCxwPSEwLGQ9ITEsdj0hMCxtPSEwLGc9ITEseT0hMCxiPWZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0sdyxFLFM9dC5pZCgpLHg9e2luZGV4OjAscmVzY2FsZVk6eX0sVD1udWxsLE49Ik5vIERhdGEgQXZhaWxhYmxlLiIsQz1mdW5jdGlvbihlKXtyZXR1cm4gZS5hdmVyYWdlfSxrPWQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLEw9MjUwO24ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KSxyLm9yaWVudChkPyJyaWdodCI6ImxlZnQiKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgQT1kMy5zY2FsZS5saW5lYXIoKSxPPXtpOjAseDowfSxNPWZ1bmN0aW9uKGkscyl7dmFyIG89aS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT1pLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9bi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPXIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD1iKGkuc2VyaWVzLmtleSxhLGYsaSxfKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLG51bGwsbnVsbCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9W2UucG9zWzBdK3UubGVmdCxlLnBvc1sxXSt1LnRvcF0say50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtrLnRvb2x0aXBIaWRlKGUpfSksay5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7diYmZS50b29sdGlwLmNsZWFudXAoKX0pLF8uZGlzcGF0Y2g9ayxfLmxpbmVzPXQsXy5sZWdlbmQ9aSxfLnhBeGlzPW4sXy55QXhpcz1yLF8uaW50ZXJhY3RpdmVMYXllcj1vLGQzLnJlYmluZChfLHQsImRlZmluZWQiLCJpc0FyZWEiLCJ4IiwieSIsInhTY2FsZSIsInlTY2FsZSIsInNpemUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIKLCJmb3JjZVkiLCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJ1c2VWb3Jvbm9pIiwiaWQiKSxfLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKF8pLF8ubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1LnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnUudG9wLHUucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnUuYm90dG9tLHUubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6dS5sZWZ0LF8pOnV9LF8ud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSxfKTpmfSxfLmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLF8pOmx9LF8uY29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZS51dGlscy5nZXRDb2xvcih0KSxpLmNvbG9yKGEpLF8pOmF9LF8ucmVzY2FsZVk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9ZSx5KTp5fSxfLnNob3dDb250cm9scz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1lLF8pOm19LF8udXNlSW50ZXJhY3RpdmVHdWlkZWxpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ZSxlPT09ITAmJihfLmludGVyYWN0aXZlKCExKSxfLnVzZVZvcm9ub2koITEpKSxfKTpnfSxfLnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSxfKTpjfSxfLnNob3dYQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLF8pOmh9LF8uc2hvd1lBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUsXyk6cH0sXy5yaWdodEFsaWduWUF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxfKTpkfSxfLnRvb2x0aXBzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUsXyk6dn0sXy50b29sdGlwQ29udGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1lLF8pOmJ9LF8uc3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9ZSxfKTp4fSxfLmRlZmF1bHRTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1lLF8pOlR9LF8ubm9EYXRhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPWUsXyk6Tn0sXy5hdmVyYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPWUsXyk6Q30sXy50cmFuc2l0aW9uRHVyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9ZSxfKTpMfSxffSxlLm1vZGVscy5kaXNjcmV0ZUJhcj1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBFKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9bi10LmxlZnQtdC5yaWdodCxFPXItdC50b3AtdC5ib3R0b20sUz1kMy5zZWxlY3QodGhpcyk7ZT1lLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLnZhbHVlcz1lLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VyaWVzPXQsZX0pLGV9KTt2YXIgVD1wJiZkP1tdOmUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDp1KGUsdCkseTphKGUsdCkseTA6ZS55MH19KX0pO3MuZG9tYWluKHB8fGQzLm1lcmdlKFQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhbmdlQmFuZHModnx8WzAsaV0sLjEpLG8uZG9tYWluKGR8fGQzLmV4dGVudChkMy5tZXJnZShUKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pLmNvbmNhdChmKSkpLGM/by5yYW5nZShtfHxbRS0oby5kb21haW4oKVswXTwwPzEyOjApLG8uZG9tYWluKClbMV0+MD8xMjowXSk6by5yYW5nZShtfHxbRSwwXSksYj1ifHxzLHc9d3x8by5jb3B5KCkucmFuZ2UoW28oMCksbygwKV0pO3ZhciBOPVMuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtZGlzY3JldGViYXIiKS5kYXRhKFtlXSksQz1OLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3JldGViYXIiKSxrPUMuYXBwZW5kKCJnIiksTD1OLnNlbGVjdCgiZyIpO2suYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1ncm91cHMiKSxOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgQT1OLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSk7QS5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksQS5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNikucmVtb3ZlKCksQS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLEEudHJhbnNpdGlvbigpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsLjc1KTt2YXIgTz1BLnNlbGVjdEFsbCgiZy5udi1iYXIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pO08uZXhpdCgpLnJlbW92ZSgpO3ZhciBNPU8uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idHJhbnNsYXRlKCIrKHModShlLHQpKStzLnJhbmdlQmFuZCgpKi4wNSkrIiwgIitvKDApKyIpIn0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCksZy5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoodC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSxnLmVsZW1lbnRNb3VzZW91dCh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKHQsbil7Zy5lbGVtZW50Q2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLnJhbmdlQmFuZCgpKih0LnNlcmllcysuNSkvZS5sZW5ndGgsbyhhKHQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRibGNsaWNrIixmdW5jdGlvbih0LG4pe2cuZWxlbWVudERibENsaWNrKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltzKHUodCxuKSkrcy5yYW5nZUJhbmQoKSoodC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pO00uYXBwZW5kKCJyZWN0IikuYXR0cigiaGVpZ2h0IiwwKS5hdHRyKCJ3aWR0aCIscy5yYW5nZUJhbmQoKSouOS9lLmxlbmd0aCksYz8oTS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLE8uc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihlLHQpe3JldHVybiBoKGEoZSx0KSl9KS50cmFuc2l0aW9uKCkuYXR0cigieCIscy5yYW5nZUJhbmQoKSouOS8yKS5hdHRyKCJ5IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD9vKGEoZSx0KSktbygwKSsxMjotNH0pKTpPLnNlbGVjdEFsbCgidGV4dCIpLnJlbW92ZSgpLE8uYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1iYXIgcG9zaXRpdmUifSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGwoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGwoZSx0KX0pLnNlbGVjdCgicmVjdCIpLmF0dHIoImNsYXNzIix5KS50cmFuc2l0aW9uKCkuYXR0cigid2lkdGgiLHMucmFuZ2VCYW5kKCkqLjkvZS5sZW5ndGgpLE8udHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXt2YXIgbj1zKHUoZSx0KSkrcy5yYW5nZUJhbmQoKSouMDUscj1hKGUsdCk8MD9vKDApOm8oMCktbyhhKGUsdCkpPDE/bygwKS0xOm8oYShlLHQpKTtyZXR1cm4idHJhbnNsYXRlKCIrbisiLCAiK3IrIikifSkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyhvKGEoZSx0KSktbyhkJiZkWzBdfHwwKSl8fDEpfSksYj1zLmNvcHkoKSx3PW8uY29weSgpfSksRX12YXIgdD17dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49OTYwLHI9NTAwLGk9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz1kMy5zY2FsZS5vcmRpbmFsKCksbz1kMy5zY2FsZS5saW5lYXIoKSx1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj1bMF0sbD1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLGM9ITEsaD1kMy5mb3JtYXQoIiwuMmYiKSxwLGQsdixtLGc9ZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0IikseT0iZGlzY3JldGVCYXIiLGIsdztyZXR1cm4gRS5kaXNwYXRjaD1nLEUub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoRSksRS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsRSk6dX0sRS55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsRSk6YX0sRS5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsRSk6dH0sRS53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLEUpOm59LEUuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsRSk6cn0sRS54U2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSxFKTpzfSxFLnlTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLEUpOm99LEUueERvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLEUpOnB9LEUueURvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lLEUpOmR9LEUueFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUsRSk6dn0sRS55UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSxFKTptfSxFLmZvcmNlWT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLEUpOmZ9LEUuY29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZS51dGlscy5nZXRDb2xvcih0KSxFKTpsfSxFLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsRSk6aX0sRS5zaG93VmFsdWVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWUsRSk6Y30sRS52YWx1ZUZvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLEUpOmh9LEUucmVjdENsYXNzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PWUsRSk6eX0sRX0sZS5tb2RlbHMuZGlzY3JldGVCYXJDaGFydD1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB3KGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHU9ZDMuc2VsZWN0KHRoaXMpLHA9dGhpcyxFPShzfHxwYXJzZUludCh1LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1pLmxlZnQtaS5yaWdodCxTPShvfHxwYXJzZUludCh1LnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktaS50b3AtaS5ib3R0b207dy51cGRhdGU9ZnVuY3Rpb24oKXtnLmJlZm9yZVVwZGF0ZSgpLHUudHJhbnNpdGlvbigpLmR1cmF0aW9uKHkpLmNhbGwodyl9LHcuY29udGFpbmVyPXRoaXM7aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBUPXUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbbV0pO3JldHVybiBULmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxULmF0dHIoIngiLGkubGVmdCtFLzIpLmF0dHIoInkiLGkudG9wK1MvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHd9dS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxkPXQueFNjYWxlKCksdj10LnlTY2FsZSgpLmNsYW1wKCEwKTt2YXIgTj11LnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWRpc2NyZXRlQmFyV2l0aEF4ZXMiKS5kYXRhKFtlXSksQz1OLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtZGlzY3JldGVCYXJXaXRoQXhlcyIpLmFwcGVuZCgiZyIpLGs9Qy5hcHBlbmQoImRlZnMiKSxMPU4uc2VsZWN0KCJnIik7Qy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxDLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxMLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kubGVmdCsiLCIraS50b3ArIikiKSxsJiZMLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0UrIiwwKSIpLHQud2lkdGgoRSkuaGVpZ2h0KFMpO3ZhciBBPUwuc2VsZWN0KCIubnYtYmFyc1dyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKTtBLnRyYW5zaXRpb24oKS5jYWxsKHQpLGsuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYteC1sYWJlbC1jbGlwLSIrdC5pZCgpKS5hcHBlbmQoInJlY3QiKSxMLnNlbGVjdCgiI252LXgtbGFiZWwtY2xpcC0iK3QuaWQoKSsiIHJlY3QiKS5hdHRyKCJ3aWR0aCIsZC5yYW5nZUJhbmQoKSooYz8yOjEpKS5hdHRyKCJoZWlnaHQiLDE2KS5hdHRyKCJ4IiwtZC5yYW5nZUJhbmQoKS8oYz8xOjIpKTtpZihhKXtuLnNjYWxlKGQpLnRpY2tzKEUvMTAwKS50aWNrU2l6ZSgtUywwKSxMLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKHYucmFuZ2UoKVswXSsodC5zaG93VmFsdWVzKCkmJnYuZG9tYWluKClbMF08MD8xNjowKSkrIikiKSxMLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLnRyYW5zaXRpb24oKS5jYWxsKG4pO3ZhciBPPUwuc2VsZWN0KCIubnYteC5udi1heGlzIikuc2VsZWN0QWxsKCJnIik7YyYmTy5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idHJhbnNsYXRlKDAsIisobiUyPT0wPyI1IjoiMTciKSsiKSJ9KX1mJiYoci5zY2FsZSh2KS50aWNrcyhTLzM2KS50aWNrU2l6ZSgtRSwwKSxMLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLnRyYW5zaXRpb24oKS5jYWxsKHIpKSxnLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7aCYmYihlLHAucGFyZW50Tm9kZSl9KX0pLHd9dmFyIHQ9ZS5tb2RlbHMuZGlzY3JldGVCYXIoKSxuPWUubW9kZWxzLmF4aXMoKSxyPWUubW9kZWxzLmF4aXMoKSxpPXt0b3A6MTUscmlnaHQ6MTAsYm90dG9tOjUwLGxlZnQ6NjB9LHM9bnVsbCxvPW51bGwsdT1lLnV0aWxzLmdldENvbG9yKCksYT0hMCxmPSEwLGw9ITEsYz0hMSxoPSEwLHA9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrdCsiPC9oMz4iKyI8cD4iK24rIjwvcD4ifSxkLHYsbT0iTm8gRGF0YSBBdmFpbGFibGUuIixnPWQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwiYmVmb3JlVXBkYXRlIikseT0yNTA7bi5vcmllbnQoImJvdHRvbSIpLmhpZ2hsaWdodFplcm8oITEpLnNob3dNYXhNaW4oITEpLnRpY2tGb3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxyLm9yaWVudChsPyJyaWdodCI6ImxlZnQiKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgiLC4xZiIpKTt2YXIgYj1mdW5jdGlvbihpLHMpe3ZhciBvPWkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9aS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPW4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksZj1yLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9cChpLnNlcmllcy5rZXksYSxmLGksdyk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0raS5sZWZ0LGUucG9zWzFdK2kudG9wXSxnLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2cudG9vbHRpcEhpZGUoZSl9KSxnLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtoJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksdy5kaXNwYXRjaD1nLHcuZGlzY3JldGViYXI9dCx3LnhBeGlzPW4sdy55QXhpcz1yLGQzLnJlYmluZCh3LHQsIngiLCJ5IiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJpZCIsInNob3dWYWx1ZXMiLCJ2YWx1ZUZvcm1hdCIpLHcub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQodyksdy5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6aS50b3AsaS5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDppLnJpZ2h0LGkuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206aS5ib3R0b20saS5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDppLmxlZnQsdyk6aX0sdy53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLHcpOnN9LHcuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsdyk6b30sdy5jb2xvcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLnV0aWxzLmdldENvbG9yKG4pLHQuY29sb3IodSksdyk6dX0sdy5zaG93WEF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSx3KTphfSx3LnNob3dZQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLHcpOmZ9LHcucmlnaHRBbGlnbllBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0Iiksdyk6bH0sdy5zdGFnZ2VyTGFiZWxzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWUsdyk6Y30sdy50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLHcpOmh9LHcudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSx3KTpwfSx3Lm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1lLHcpOm19LHcudHJhbnNpdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PWUsdyk6eX0sd30sZS5tb2RlbHMuZGlzdHJpYnV0aW9uPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgYT1uLShpPT09IngiP3QubGVmdCt0LnJpZ2h0OnQudG9wK3QuYm90dG9tKSxsPWk9PSJ4Ij8ieSI6IngiLGM9ZDMuc2VsZWN0KHRoaXMpO2Y9Znx8dTt2YXIgaD1jLnNlbGVjdEFsbCgiZy5udi1kaXN0cmlidXRpb24iKS5kYXRhKFtlXSkscD1oLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LWRpc3RyaWJ1dGlvbiIpLGQ9cC5hcHBlbmQoImciKSx2PWguc2VsZWN0KCJnIik7aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIG09di5zZWxlY3RBbGwoImcubnYtZGlzdCIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pO20uZW50ZXIoKS5hcHBlbmQoImciKSxtLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1kaXN0IG52LXNlcmllcy0iK3R9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCl9KTt2YXIgZz1tLnNlbGVjdEFsbCgibGluZS5udi1kaXN0IitpKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pO2cuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYocyhlLHQpKX0pLmF0dHIoaSsiMiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihzKGUsdCkpfSksbS5leGl0KCkuc2VsZWN0QWxsKCJsaW5lLm52LWRpc3QiK2kpLnRyYW5zaXRpb24oKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLmF0dHIoaSsiMiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsdCkpfSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwwKS5yZW1vdmUoKSxnLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1kaXN0IitpKyIgbnYtZGlzdCIraSsiLSIrdH0pLmF0dHIobCsiMSIsMCkuYXR0cihsKyIyIixyKSxnLnRyYW5zaXRpb24oKS5hdHRyKGkrIjEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocyhlLHQpKX0pLmF0dHIoaSsiMiIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShzKGUsdCkpfSksZj11LmNvcHkoKX0pLGx9dmFyIHQ9e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTQwMCxyPTgsaT0ieCIscz1mdW5jdGlvbihlKXtyZXR1cm4gZVtpXX0sbz1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLHU9ZDMuc2NhbGUubGluZWFyKCksYSxmO3JldHVybiBsLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKGwpLGwubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LGwpOnR9LGwud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxsKTpufSxsLmF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxsKTppfSxsLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxsKTpyfSxsLmdldERhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZDMuZnVuY3RvcihlKSxsKTpzfSxsLnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsbCk6dX0sbC5jb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLnV0aWxzLmdldENvbG9yKHQpLGwpOm99LGx9LGUubW9kZWxzLmhpc3RvcmljYWxCYXI9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdyhFKXtyZXR1cm4gRS5lYWNoKGZ1bmN0aW9uKHcpe3ZhciBFPW4tdC5sZWZ0LXQucmlnaHQsUz1yLXQudG9wLXQuYm90dG9tLFQ9ZDMuc2VsZWN0KHRoaXMpO3MuZG9tYWluKGR8fGQzLmV4dGVudCh3WzBdLnZhbHVlcy5tYXAodSkuY29uY2F0KGYpKSksYz9zLnJhbmdlKG18fFtFKi41L3dbMF0udmFsdWVzLmxlbmd0aCxFKih3WzBdLnZhbHVlcy5sZW5ndGgtLjUpL3dbMF0udmFsdWVzLmxlbmd0aF0pOnMucmFuZ2UobXx8WzAsRV0pLG8uZG9tYWluKHZ8fGQzLmV4dGVudCh3WzBdLnZhbHVlcy5tYXAoYSkuY29uY2F0KGwpKSkucmFuZ2UoZ3x8W1MsMF0pLHMuZG9tYWluKClbMF09PT1zLmRvbWFpbigpWzFdJiYocy5kb21haW4oKVswXT9zLmRvbWFpbihbcy5kb21haW4oKVswXS1zLmRvbWFpbigpWzBdKi4wMSxzLmRvbWFpbigpWzFdK3MuZG9tYWluKClbMV0qLjAxXSk6cy5kb21haW4oWy0xLDFdKSksby5kb21haW4oKVswXT09PW8uZG9tYWluKClbMV0mJihvLmRvbWFpbigpWzBdP28uZG9tYWluKFtvLmRvbWFpbigpWzBdK28uZG9tYWluKClbMF0qLjAxLG8uZG9tYWluKClbMV0tby5kb21haW4oKVsxXSouMDFdKTpvLmRvbWFpbihbLTEsMV0pKTt2YXIgTj1ULnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWhpc3RvcmljYWxCYXItIitpKS5kYXRhKFt3WzBdLnZhbHVlc10pLEM9Ti5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWhpc3RvcmljYWxCYXItIitpKSxrPUMuYXBwZW5kKCJkZWZzIiksTD1DLmFwcGVuZCgiZyIpLEE9Ti5zZWxlY3QoImciKTtMLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFycyIpLE4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpLFQub24oImNsaWNrIixmdW5jdGlvbihlLHQpe3kuY2hhcnRDbGljayh7ZGF0YTplLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOml9KX0pLGsuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYtY2hhcnQtY2xpcC1wYXRoLSIraSkuYXBwZW5kKCJyZWN0IiksTi5zZWxlY3QoIiNudi1jaGFydC1jbGlwLXBhdGgtIitpKyIgcmVjdCIpLmF0dHIoIndpZHRoIixFKS5hdHRyKCJoZWlnaHQiLFMpLEEuYXR0cigiY2xpcC1wYXRoIixoPyJ1cmwoI252LWNoYXJ0LWNsaXAtcGF0aC0iK2krIikiOiIiKTt2YXIgTz1OLnNlbGVjdCgiLm52LWJhcnMiKS5zZWxlY3RBbGwoIi5udi1iYXIiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCl9KTtPLmV4aXQoKS5yZW1vdmUoKTt2YXIgTT1PLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8obyhNYXRoLm1heCgwLGEodCxuKSkpKX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oTWF0aC5hYnMobyhhKHQsbikpLW8oMCkpKX0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHModShlLHQpKS1FL3dbMF0udmFsdWVzLmxlbmd0aCouNDUpKyIsMCkifSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm47ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCkseS5lbGVtZW50TW91c2VvdmVyKHtwb2ludDplLHNlcmllczp3WzBdLHBvczpbcyh1KGUsdCkpLG8oYShlLHQpKV0scG9pbnRJbmRleDp0LHNlcmllc0luZGV4OjAsZTpkMy5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe2lmKCFiKXJldHVybjtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSx5LmVsZW1lbnRNb3VzZW91dCh7cG9pbnQ6ZSxzZXJpZXM6d1swXSxwb2ludEluZGV4OnQsc2VyaWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7aWYoIWIpcmV0dXJuO3kuZWxlbWVudENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGluZGV4OnQscG9zOltzKHUoZSx0KSksbyhhKGUsdCkpXSxlOmQzLmV2ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayIsZnVuY3Rpb24oZSx0KXtpZighYilyZXR1cm47eS5lbGVtZW50RGJsQ2xpY2soe3ZhbHVlOmEoZSx0KSxkYXRhOmUsaW5kZXg6dCxwb3M6W3ModShlLHQpKSxvKGEoZSx0KSldLGU6ZDMuZXZlbnQsaWQ6aX0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSk7Ty5hdHRyKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBwKGUsdCl9KS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0LG4pe3JldHVybihhKGUsdCk8MD8ibnYtYmFyIG5lZ2F0aXZlIjoibnYtYmFyIHBvc2l0aXZlIikrIiBudi1iYXItIituKyItIit0fSkudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHModShlLHQpKS1FL3dbMF0udmFsdWVzLmxlbmd0aCouNDUpKyIsMCkifSkuYXR0cigid2lkdGgiLEUvd1swXS52YWx1ZXMubGVuZ3RoKi45KSxPLnRyYW5zaXRpb24oKS5hdHRyKCJ5IixmdW5jdGlvbih0LG4pe3ZhciByPWEodCxuKTwwP28oMCk6bygwKS1vKGEodCxuKSk8MT9vKDApLTE6byhhKHQsbikpO3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhyKX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oTWF0aC5tYXgoTWF0aC5hYnMobyhhKHQsbikpLW8oMCkpLDEpKX0pfSksd312YXIgdD17dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49OTYwLHI9NTAwLGk9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz1kMy5zY2FsZS5saW5lYXIoKSxvPWQzLnNjYWxlLmxpbmVhcigpLHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT1mdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPVtdLGw9WzBdLGM9ITEsaD0hMCxwPWUudXRpbHMuZGVmYXVsdENvbG9yKCksZCx2LG0sZyx5PWQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCIpLGI9ITA7cmV0dXJuIHcuaGlnaGxpZ2h0UG9pbnQ9ZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QoIi5udi1oaXN0b3JpY2FsQmFyLSIraSkuc2VsZWN0KCIubnYtYmFycyAubnYtYmFyLTAtIitlKS5jbGFzc2VkKCJob3ZlciIsdCl9LHcuY2xlYXJIaWdobGlnaHRzPWZ1bmN0aW9uKCl7ZDMuc2VsZWN0KCIubnYtaGlzdG9yaWNhbEJhci0iK2kpLnNlbGVjdCgiLm52LWJhcnMgLm52LWJhci5ob3ZlciIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LHcuZGlzcGF0Y2g9eSx3Lm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKHcpLHcueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLHcpOnV9LHcueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHcpOmF9LHcubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LHcpOnR9LHcud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx3KTpufSx3LmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHcpOnJ9LHcueFNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsdyk6c30sdy55U2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSx3KTpvfSx3LnhEb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSx3KTpkfSx3LnlEb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ZSx3KTp2fSx3LnhSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1lLHcpOm19LHcueVJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPWUsdyk6Z30sdy5mb3JjZVg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSx3KTpmfSx3LmZvcmNlWT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLHcpOmx9LHcucGFkRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLHcpOmN9LHcuY2xpcEVkZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSx3KTpofSx3LmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUudXRpbHMuZ2V0Q29sb3IodCksdyk6cH0sdy5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHcpOml9LHcuaW50ZXJhY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9ITEsdyk6Yn0sd30sZS5tb2RlbHMuaGlzdG9yaWNhbEJhckNoYXJ0PWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihkKXt2YXIgVD1kMy5zZWxlY3QodGhpcyksTj10aGlzLEM9KHV8fHBhcnNlSW50KFQuc3R5bGUoIndpZHRoIikpfHw5NjApLXMubGVmdC1zLnJpZ2h0LGs9KGF8fHBhcnNlSW50KFQuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1zLnRvcC1zLmJvdHRvbTt4LnVwZGF0ZT1mdW5jdGlvbigpe1QudHJhbnNpdGlvbigpLmR1cmF0aW9uKEUpLmNhbGwoeCl9LHguY29udGFpbmVyPXRoaXMsZy5kaXNhYmxlZD1kLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigheSl7dmFyIEw7eT17fTtmb3IoTCBpbiBnKWdbTF1pbnN0YW5jZW9mIEFycmF5P3lbTF09Z1tMXS5zbGljZSgwKTp5W0xdPWdbTF19aWYoIWR8fCFkLmxlbmd0aHx8IWQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBBPVQuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbYl0pO3JldHVybiBBLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxBLmF0dHIoIngiLHMubGVmdCtDLzIpLmF0dHIoInkiLHMudG9wK2svMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHh9VC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSx2PXQueFNjYWxlKCksbT10LnlTY2FsZSgpO3ZhciBPPVQuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtaGlzdG9yaWNhbEJhckNoYXJ0IikuZGF0YShbZF0pLE09Ty5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWhpc3RvcmljYWxCYXJDaGFydCIpLmFwcGVuZCgiZyIpLF89Ty5zZWxlY3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksZiYmKGkud2lkdGgoQyksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZCkuY2FsbChpKSxzLnRvcCE9aS5oZWlnaHQoKSYmKHMudG9wPWkuaGVpZ2h0KCksaz0oYXx8cGFyc2VJbnQoVC5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXMudG9wLXMuYm90dG9tKSxPLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtcy50b3ArIikiKSksTy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzLmxlZnQrIiwiK3MudG9wKyIpIiksaCYmXy5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDKyIsMCkiKSx0LndpZHRoKEMpLmhlaWdodChrKS5jb2xvcihkLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxvKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4hZFt0XS5kaXNhYmxlZH0pKTt2YXIgRD1fLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oZC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7RC50cmFuc2l0aW9uKCkuY2FsbCh0KSxsJiYobi5zY2FsZSh2KS50aWNrU2l6ZSgtaywwKSxfLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrbS5yYW5nZSgpWzBdKyIpIiksXy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS50cmFuc2l0aW9uKCkuY2FsbChuKSksYyYmKHIuc2NhbGUobSkudGlja3Moay8zNikudGlja1NpemUoLUMsMCksXy5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS50cmFuc2l0aW9uKCkuY2FsbChyKSksaS5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD0hdC5kaXNhYmxlZCxkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aHx8ZC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9ITEsTy5zZWxlY3RBbGwoIi5udi1zZXJpZXMiKS5jbGFzc2VkKCJkaXNhYmxlZCIsITEpLGV9KSxnLmRpc2FibGVkPWQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pLHcuc3RhdGVDaGFuZ2UoZyksZS50cmFuc2l0aW9uKCkuY2FsbCh4KX0pLGkuZGlzcGF0Y2gub24oImxlZ2VuZERibGNsaWNrIixmdW5jdGlvbihlKXtkLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXNhYmxlZD0hMH0pLGUuZGlzYWJsZWQ9ITEsZy5kaXNhYmxlZD1kLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KSx3LnN0YXRlQ2hhbmdlKGcpLHgudXBkYXRlKCl9KSx3Lm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7cCYmUyhlLE4ucGFyZW50Tm9kZSl9KSx3Lm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24odCl7dHlwZW9mIHQuZGlzYWJsZWQhPSJ1bmRlZmluZWQiJiYoZC5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZS5kaXNhYmxlZD10LmRpc2FibGVkW25dfSksZy5kaXNhYmxlZD10LmRpc2FibGVkKSxlLmNhbGwoeCl9KX0pLHh9dmFyIHQ9ZS5tb2RlbHMuaGlzdG9yaWNhbEJhcigpLG49ZS5tb2RlbHMuYXhpcygpLHI9ZS5tb2RlbHMuYXhpcygpLGk9ZS5tb2RlbHMubGVnZW5kKCkscz17dG9wOjMwLHJpZ2h0OjkwLGJvdHRvbTo1MCxsZWZ0OjkwfSxvPWUudXRpbHMuZGVmYXVsdENvbG9yKCksdT1udWxsLGE9bnVsbCxmPSExLGw9ITAsYz0hMCxoPSExLHA9ITAsZD1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LHYsbSxnPXt9LHk9bnVsbCxiPSJObyBEYXRhIEF2YWlsYWJsZS4iLHc9ZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksRT0yNTA7bi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDcpLHIub3JpZW50KGg/InJpZ2h0IjoibGVmdCIpO3ZhciBTPWZ1bmN0aW9uKGkscyl7aWYocyl7dmFyIG89ZDMuc2VsZWN0KHMpLnNlbGVjdCgic3ZnIiksdT1vLm5vZGUoKT9vLmF0dHIoInZpZXdCb3giKTpudWxsO2lmKHUpe3U9dS5zcGxpdCgiICIpO3ZhciBhPXBhcnNlSW50KG8uc3R5bGUoIndpZHRoIikpL3VbMl07aS5wb3NbMF09aS5wb3NbMF0qYSxpLnBvc1sxXT1pLnBvc1sxXSphfX12YXIgZj1pLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSxsPWkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYz1uLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGg9ci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxwPWQoaS5zZXJpZXMua2V5LGMsaCxpLHgpO2UudG9vbHRpcC5zaG93KFtmLGxdLHAsbnVsbCxudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rcy5sZWZ0LGUucG9zWzFdK3MudG9wXSx3LnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe3cudG9vbHRpcEhpZGUoZSl9KSx3Lm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtwJiZlLnRvb2x0aXAuY2xlYW51cCgpfSkseC5kaXNwYXRjaD13LHguYmFycz10LHgubGVnZW5kPWkseC54QXhpcz1uLHgueUF4aXM9cixkMy5yZWJpbmQoeCx0LCJkZWZpbmVkIiwiaXNBcmVhIiwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJpbnRlcmFjdGl2ZSIsImNsaXBFZGdlIiwiY2xpcFZvcm9ub2kiLCJpZCIsImludGVycG9sYXRlIiwiaGlnaGxpZ2h0UG9pbnQiLCJjbGVhckhpZ2hsaWdodHMiLCJpbnRlcmFjdGl2ZSIpLHgub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoeCkseC5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHMudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6cy50b3Ascy5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDpzLnJpZ2h0LHMuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206cy5ib3R0b20scy5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDpzLmxlZnQseCk6c30seC53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLHgpOnV9LHguaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUseCk6YX0seC5jb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IobykseCk6b30seC5zaG93TGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUseCk6Zn0seC5zaG93WEF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSx4KTpsfSx4LnNob3dZQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLHgpOmN9LHgucmlnaHRBbGlnbllBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IikseCk6aH0seC50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLHgpOnB9LHgudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSx4KTpkfSx4LnN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPWUseCk6Z30seC5kZWZhdWx0U3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9ZSx4KTp5fSx4Lm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1lLHgpOmJ9LHgudHJhbnNpdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPWUseCk6RX0seH0sZS5tb2RlbHMuaW5kZW50ZWRUcmVlPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBrKGUsdCxuKXtkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtpZihkMy5ldmVudC5zaGlmdEtleSYmIW4pcmV0dXJuIGQzLmV2ZW50LnNoaWZ0S2V5PSExLGUudmFsdWVzJiZlLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyhlLnZhbHVlc3x8ZS5fdmFsdWVzKSYmayhlLDAsITApfSksITA7aWYoIU8oZSkpcmV0dXJuITA7ZS52YWx1ZXM/KGUuX3ZhbHVlcz1lLnZhbHVlcyxlLnZhbHVlcz1udWxsKTooZS52YWx1ZXM9ZS5fdmFsdWVzLGUuX3ZhbHVlcz1udWxsKSxnLnVwZGF0ZSgpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGUuX3ZhbHVlcyYmZS5fdmFsdWVzLmxlbmd0aD9oOmUudmFsdWVzJiZlLnZhbHVlcy5sZW5ndGg/cDoiIn1mdW5jdGlvbiBBKGUpe3JldHVybiBlLl92YWx1ZXMmJmUuX3ZhbHVlcy5sZW5ndGh9ZnVuY3Rpb24gTyhlKXt2YXIgdD1lLnZhbHVlc3x8ZS5fdmFsdWVzO3JldHVybiB0JiZ0Lmxlbmd0aH12YXIgdD0xLG49ZDMuc2VsZWN0KHRoaXMpLGk9ZDMubGF5b3V0LnRyZWUoKS5jaGlsZHJlbihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS5zaXplKFtyLGZdKTtnLnVwZGF0ZT1mdW5jdGlvbigpe24udHJhbnNpdGlvbigpLmR1cmF0aW9uKDYwMCkuY2FsbChnKX0sZVswXXx8KGVbMF09e2tleTphfSk7dmFyIHM9aS5ub2RlcyhlWzBdKSx5PWQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImRpdiIpLmRhdGEoW1tzXV0pLGI9eS5lbnRlcigpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtaW5kZW50ZWR0cmVlIiksdz1iLmFwcGVuZCgidGFibGUiKSxFPXkuc2VsZWN0KCJ0YWJsZSIpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoImNsYXNzIixjKTtpZihvKXt2YXIgUz13LmFwcGVuZCgidGhlYWQiKSx4PVMuYXBwZW5kKCJ0ciIpO2wuZm9yRWFjaChmdW5jdGlvbihlKXt4LmFwcGVuZCgidGgiKS5hdHRyKCJ3aWR0aCIsZS53aWR0aD9lLndpZHRoOiIxMCUiKS5zdHlsZSgidGV4dC1hbGlnbiIsZS50eXBlPT0ibnVtZXJpYyI/InJpZ2h0IjoibGVmdCIpLmFwcGVuZCgic3BhbiIpLnRleHQoZS5sYWJlbCl9KX12YXIgVD1FLnNlbGVjdEFsbCgidGJvZHkiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7VC5lbnRlcigpLmFwcGVuZCgidGJvZHkiKSx0PWQzLm1heChzLGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlcHRofSksaS5zaXplKFtyLHQqZl0pO3ZhciBOPVQuc2VsZWN0QWxsKCJ0ciIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB1JiYhZS5jaGlsZHJlbj91KGUpOiEwfSl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaWR8fGUuaWR8fCsrbX0pO04uZXhpdCgpLnJlbW92ZSgpLE4uc2VsZWN0KCJpbWcubnYtdHJlZWljb24iKS5hdHRyKCJzcmMiLEwpLmNsYXNzZWQoImZvbGRlZCIsQSk7dmFyIEM9Ti5lbnRlcigpLmFwcGVuZCgidHIiKTtsLmZvckVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1DLmFwcGVuZCgidGQiKS5zdHlsZSgicGFkZGluZy1sZWZ0IixmdW5jdGlvbihlKXtyZXR1cm4odD8wOmUuZGVwdGgqZisxMisoTChlKT8wOjE2KSkrInB4In0sImltcG9ydGFudCIpLnN0eWxlKCJ0ZXh0LWFsaWduIixlLnR5cGU9PSJudW1lcmljIj8icmlnaHQiOiJsZWZ0Iik7dD09MCYmbi5hcHBlbmQoImltZyIpLmNsYXNzZWQoIm52LXRyZWVpY29uIiwhMCkuY2xhc3NlZCgibnYtZm9sZGVkIixBKS5hdHRyKCJzcmMiLEwpLnN0eWxlKCJ3aWR0aCIsIjE0cHgiKS5zdHlsZSgiaGVpZ2h0IiwiMTRweCIpLnN0eWxlKCJwYWRkaW5nIiwiMCAxcHgiKS5zdHlsZSgiZGlzcGxheSIsZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSk/ImlubGluZS1ibG9jayI6Im5vbmUifSkub24oImNsaWNrIixrKSxuLmVhY2goZnVuY3Rpb24obil7IXQmJnYobik/ZDMuc2VsZWN0KHRoaXMpLmFwcGVuZCgiYSIpLmF0dHIoImhyZWYiLHYpLmF0dHIoImNsYXNzIixkMy5mdW5jdG9yKGUuY2xhc3NlcykpLmFwcGVuZCgic3BhbiIpOmQzLnNlbGVjdCh0aGlzKS5hcHBlbmQoInNwYW4iKSxkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJzcGFuIikuYXR0cigiY2xhc3MiLGQzLmZ1bmN0b3IoZS5jbGFzc2VzKSkudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gZS5mb3JtYXQ/ZS5mb3JtYXQodCk6dFtlLmtleV18fCItIn0pfSksZS5zaG93Q291bnQmJihuLmFwcGVuZCgic3BhbiIpLmF0dHIoImNsYXNzIiwibnYtY2hpbGRyZW5Db3VudCIpLE4uc2VsZWN0QWxsKCJzcGFuLm52LWNoaWxkcmVuQ291bnQiKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcyYmZS52YWx1ZXMubGVuZ3RofHxlLl92YWx1ZXMmJmUuX3ZhbHVlcy5sZW5ndGg/IigiKyhlLnZhbHVlcyYmZS52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB1P3UoZSk6ITB9KS5sZW5ndGh8fGUuX3ZhbHVlcyYmZS5fdmFsdWVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdT91KGUpOiEwfSkubGVuZ3RofHwwKSsiKSI6IiJ9KSl9KSxOLm9yZGVyKCkub24oImNsaWNrIixmdW5jdGlvbihlKXtkLmVsZW1lbnRDbGljayh7cm93OnRoaXMsZGF0YTplLHBvczpbZS54LGUueV19KX0pLm9uKCJkYmxjbGljayIsZnVuY3Rpb24oZSl7ZC5lbGVtZW50RGJsY2xpY2soe3Jvdzp0aGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlKXtkLmVsZW1lbnRNb3VzZW92ZXIoe3Jvdzp0aGlzLGRhdGE6ZSxwb3M6W2UueCxlLnldfSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUpe2QuZWxlbWVudE1vdXNlb3V0KHtyb3c6dGhpcyxkYXRhOmUscG9zOltlLngsZS55XX0pfSl9KSxnfXZhciB0PXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj05NjAscj01MDAsaT1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCksbz0hMCx1PSExLGE9Ik5vIERhdGEgQXZhaWxhYmxlLiIsZj0yMCxsPVt7a2V5OiJrZXkiLGxhYmVsOiJOYW1lIix0eXBlOiJ0ZXh0In1dLGM9bnVsbCxoPSJpbWFnZXMvZ3JleS1wbHVzLnBuZyIscD0iaW1hZ2VzL2dyZXktbWludXMucG5nIixkPWQzLmRpc3BhdGNoKCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsY2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0Iiksdj1mdW5jdGlvbihlKXtyZXR1cm4gZS51cmx9LG09MDtyZXR1cm4gZy5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChnKSxnLm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxnKTp0fSxnLndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsZyk6bn0sZy5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxnKTpyfSxnLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUudXRpbHMuZ2V0Q29sb3IodCksc2NhdHRlci5jb2xvcihpKSxnKTppfSxnLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsZyk6c30sZy5oZWFkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxnKTpvfSxnLm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLGcpOmF9LGcuZmlsdGVyWmVybz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLGcpOnV9LGcuY29sdW1ucz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLGcpOmx9LGcudGFibGVDbGFzcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLGcpOmN9LGcuaWNvbk9wZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSxnKTpofSxnLmljb25DbG9zZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLGcpOnB9LGcuZ2V0VXJsPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUsZyk6dn0sZ30sZS5tb2RlbHMubGVnZW5kPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoaCl7cmV0dXJuIGguZWFjaChmdW5jdGlvbihjKXt2YXIgaD1uLXQubGVmdC10LnJpZ2h0LHA9ZDMuc2VsZWN0KHRoaXMpLGQ9cC5zZWxlY3RBbGwoImcubnYtbGVnZW5kIikuZGF0YShbY10pLHY9ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1sZWdlbmQiKS5hcHBlbmQoImciKSxtPWQuc2VsZWN0KCJnIik7ZC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIGc9bS5zZWxlY3RBbGwoIi5udi1zZXJpZXMiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkseT1nLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zZXJpZXMiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLHQpe2wubGVnZW5kTW91c2VvdmVyKGUsdCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7bC5sZWdlbmRNb3VzZW91dChlLHQpfSkub24oImNsaWNrIixmdW5jdGlvbihlLHQpe2wubGVnZW5kQ2xpY2soZSx0KSxhJiYoZj8oYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9ITB9KSxlLmRpc2FibGVkPSExKTooZS5kaXNhYmxlZD0hZS5kaXNhYmxlZCxjLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSkmJmMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpc2FibGVkPSExfSkpLGwuc3RhdGVDaGFuZ2Uoe2Rpc2FibGVkOmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pfSkpfSkub24oImRibGNsaWNrIixmdW5jdGlvbihlLHQpe2wubGVnZW5kRGJsY2xpY2soZSx0KSxhJiYoYy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZGlzYWJsZWQ9ITB9KSxlLmRpc2FibGVkPSExLGwuc3RhdGVDaGFuZ2Uoe2Rpc2FibGVkOmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pfSkpfSk7eS5hcHBlbmQoImNpcmNsZSIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kLXN5bWJvbCIpLmF0dHIoInIiLDUpLHkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kLXRleHQiKS5hdHRyKCJkeSIsIi4zMmVtIikuYXR0cigiZHgiLCI4IiksZy5jbGFzc2VkKCJkaXNhYmxlZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWR9KSxnLmV4aXQoKS5yZW1vdmUoKSxnLnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHMoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHMoZSx0KX0pLGcuc2VsZWN0KCJ0ZXh0IikudGV4dChpKTtpZihvKXt2YXIgYj1bXTtnLmVhY2goZnVuY3Rpb24odCxuKXt2YXIgcj1kMy5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IiksaTt0cnl7aT1yLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKX1jYXRjaChzKXtpPWUudXRpbHMuY2FsY0FwcHJveFRleHRXaWR0aChyKX1iLnB1c2goaSsyOCl9KTt2YXIgdz0wLEU9MCxTPVtdO3doaWxlKEU8aCYmdzxiLmxlbmd0aClTW3ddPWJbd10sRSs9Ylt3KytdO3c9PT0wJiYodz0xKTt3aGlsZShFPmgmJnc+MSl7Uz1bXSx3LS07Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspYlt4XT4oU1t4JXddfHwwKSYmKFNbeCV3XT1iW3hdKTtFPVMucmVkdWNlKGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlK3R9KX12YXIgVD1bXTtmb3IodmFyIE49MCxDPTA7Tjx3O04rKylUW05dPUMsQys9U1tOXTtnLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrVFt0JXddKyIsIisoNStNYXRoLmZsb29yKHQvdykqMjApKyIpIn0pLHU/bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi10LnJpZ2h0LUUpKyIsIit0LnRvcCsiKSIpOm0uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIit0LnRvcCsiKSIpLHI9dC50b3ArdC5ib3R0b20rTWF0aC5jZWlsKGIubGVuZ3RoL3cpKjIwfWVsc2V7dmFyIGs9NSxMPTUsQT0wLE87Zy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUscil7dmFyIGk9ZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSsyODtyZXR1cm4gTz1MLG48dC5sZWZ0K3QucmlnaHQrTytpJiYoTD1PPTUsays9MjApLEwrPWksTD5BJiYoQT1MKSwidHJhbnNsYXRlKCIrTysiLCIraysiKSJ9KSxtLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLXQucmlnaHQtQSkrIiwiK3QudG9wKyIpIikscj10LnRvcCt0LmJvdHRvbStrKzE1fX0pLGN9dmFyIHQ9e3RvcDo1LHJpZ2h0OjAsYm90dG9tOjUsbGVmdDowfSxuPTQwMCxyPTIwLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSxzPWUudXRpbHMuZGVmYXVsdENvbG9yKCksbz0hMCx1PSEwLGE9ITAsZj0hMSxsPWQzLmRpc3BhdGNoKCJsZWdlbmRDbGljayIsImxlZ2VuZERibGNsaWNrIiwibGVnZW5kTW91c2VvdmVyIiwibGVnZW5kTW91c2VvdXQiLCJzdGF0ZUNoYW5nZSIpO3JldHVybiBjLmRpc3BhdGNoPWwsYy5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChjKSxjLm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxjKTp0fSxjLndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsYyk6bn0sYy5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxjKTpyfSxjLmtleT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLGMpOml9LGMuY29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZS51dGlscy5nZXRDb2xvcih0KSxjKTpzfSxjLmFsaWduPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsYyk6b30sYy5yaWdodEFsaWduPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsYyk6dX0sYy51cGRhdGVTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLGMpOmF9LGMucmFkaW9CdXR0b25Nb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUsYyk6Zn0sY30sZS5tb2RlbHMubGluZT1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGcpe3JldHVybiBnLmVhY2goZnVuY3Rpb24obSl7dmFyIGc9ci1uLmxlZnQtbi5yaWdodCxiPWktbi50b3Atbi5ib3R0b20sdz1kMy5zZWxlY3QodGhpcyk7Yz10LnhTY2FsZSgpLGg9dC55U2NhbGUoKSxkPWR8fGMsdj12fHxoO3ZhciBFPXcuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGluZSIpLmRhdGEoW21dKSxTPUUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1saW5lIiksVD1TLmFwcGVuZCgiZGVmcyIpLE49Uy5hcHBlbmQoImciKSxDPUUuc2VsZWN0KCJnIik7Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWdyb3VwcyIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zY2F0dGVyV3JhcCIpLEUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi5sZWZ0KyIsIituLnRvcCsiKSIpLHQud2lkdGgoZykuaGVpZ2h0KGIpO3ZhciBrPUUuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKTtrLnRyYW5zaXRpb24oKS5jYWxsKHQpLFQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYtZWRnZS1jbGlwLSIrdC5pZCgpKS5hcHBlbmQoInJlY3QiKSxFLnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iK3QuaWQoKSsiIHJlY3QiKS5hdHRyKCJ3aWR0aCIsZykuYXR0cigiaGVpZ2h0IixiKSxDLmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWNsaXAtIit0LmlkKCkrIikiOiIiKSxrLmF0dHIoImNsaXAtcGF0aCIsbD8idXJsKCNudi1lZGdlLWNsaXAtIit0LmlkKCkrIikiOiIiKTt2YXIgTD1FLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSk7TC5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksTC5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNikucmVtb3ZlKCksTC5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCl9KSxMLnRyYW5zaXRpb24oKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC41KTt2YXIgQT1MLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZihlKT9bZV06W119KTtBLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJudi1hcmVhIikuYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGQzLnN2Zy5hcmVhKCkuaW50ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGQobyh0LG4pKSl9KS55MChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh2KHUodCxuKSkpfSkueTEoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdihoLmRvbWFpbigpWzBdPD0wP2guZG9tYWluKClbMV0+PTA/MDpoLmRvbWFpbigpWzFdOmguZG9tYWluKClbMF0pfSkuYXBwbHkodGhpcyxbdC52YWx1ZXNdKX0pLEwuZXhpdCgpLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikucmVtb3ZlKCksQS50cmFuc2l0aW9uKCkuYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGQzLnN2Zy5hcmVhKCkuaW50ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGMobyh0LG4pKSl9KS55MChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhoKHUodCxuKSkpfSkueTEoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaChoLmRvbWFpbigpWzBdPD0wP2guZG9tYWluKClbMV0+PTA/MDpoLmRvbWFpbigpWzFdOmguZG9tYWluKClbMF0pfSkuYXBwbHkodGhpcyxbdC52YWx1ZXNdKX0pO3ZhciBPPUwuc2VsZWN0QWxsKCJwYXRoLm52LWxpbmUiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybltlLnZhbHVlc119KTtPLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJudi1saW5lIikuYXR0cigiZCIsZDMuc3ZnLmxpbmUoKS5pbnRlcnBvbGF0ZShwKS5kZWZpbmVkKGEpLngoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8oZChvKHQsbikpKX0pLnkoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8odih1KHQsbikpKX0pKSxMLmV4aXQoKS5zZWxlY3RBbGwoInBhdGgubnYtbGluZSIpLnRyYW5zaXRpb24oKS5hdHRyKCJkIixkMy5zdmcubGluZSgpLmludGVycG9sYXRlKHApLmRlZmluZWQoYSkueChmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhjKG8odCxuKSkpfSkueShmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhoKHUodCxuKSkpfSkpLE8udHJhbnNpdGlvbigpLmF0dHIoImQiLGQzLnN2Zy5saW5lKCkuaW50ZXJwb2xhdGUocCkuZGVmaW5lZChhKS54KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGMobyh0LG4pKSl9KS55KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKGgodSh0LG4pKSl9KSksZD1jLmNvcHkoKSx2PWguY29weSgpfSksbX12YXIgdD1lLm1vZGVscy5zY2F0dGVyKCksbj17dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LHI9OTYwLGk9NTAwLHM9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sYT1mdW5jdGlvbihlLHQpe3JldHVybiFpc05hTih1KGUsdCkpJiZ1KGUsdCkhPT1udWxsfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBlLmFyZWF9LGw9ITEsYyxoLHA9ImxpbmVhciIKO3Quc2l6ZSgxNikuc2l6ZURvbWFpbihbMTYsMjU2XSk7dmFyIGQsdjtyZXR1cm4gbS5kaXNwYXRjaD10LmRpc3BhdGNoLG0uc2NhdHRlcj10LGQzLnJlYmluZChtLHQsImlkIiwiaW50ZXJhY3RpdmUiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiY2xpcFZvcm9ub2kiLCJ1c2VWb3Jvbm9pIiwiY2xpcFJhZGl1cyIsInBhZERhdGEiLCJoaWdobGlnaHRQb2ludCIsImNsZWFySGlnaGxpZ2h0cyIpLG0ub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQobSksbS5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6bi50b3Asbi5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDpuLnJpZ2h0LG4uYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206bi5ib3R0b20sbi5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsbSk6bn0sbS53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLG0pOnJ9LG0uaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsbSk6aX0sbS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsdC54KGUpLG0pOm99LG0ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLHQueShlKSxtKTp1fSxtLmNsaXBFZGdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsbSk6bH0sbS5jb2xvcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLnV0aWxzLmdldENvbG9yKG4pLHQuY29sb3IocyksbSk6c30sbS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLG0pOnB9LG0uZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLG0pOmF9LG0uaXNBcmVhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWQzLmZ1bmN0b3IoZSksbSk6Zn0sbX0sZS5tb2RlbHMubGluZUNoYXJ0PWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE4obSl7cmV0dXJuIG0uZWFjaChmdW5jdGlvbihtKXt2YXIgQz1kMy5zZWxlY3QodGhpcyksaz10aGlzLEw9KGF8fHBhcnNlSW50KEMuc3R5bGUoIndpZHRoIikpfHw5NjApLW8ubGVmdC1vLnJpZ2h0LEE9KGZ8fHBhcnNlSW50KEMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbTtOLnVwZGF0ZT1mdW5jdGlvbigpe0MudHJhbnNpdGlvbigpLmR1cmF0aW9uKHgpLmNhbGwoTil9LE4uY29udGFpbmVyPXRoaXMsYi5kaXNhYmxlZD1tLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighdyl7dmFyIE87dz17fTtmb3IoTyBpbiBiKWJbT11pbnN0YW5jZW9mIEFycmF5P3dbT109YltPXS5zbGljZSgwKTp3W09dPWJbT119aWYoIW18fCFtLmxlbmd0aHx8IW0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBNPUMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbRV0pO3JldHVybiBNLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxNLmF0dHIoIngiLG8ubGVmdCtMLzIpLmF0dHIoInkiLG8udG9wK0EvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLE59Qy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxnPXQueFNjYWxlKCkseT10LnlTY2FsZSgpO3ZhciBfPUMuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbGluZUNoYXJ0IikuZGF0YShbbV0pLEQ9Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWxpbmVDaGFydCIpLmFwcGVuZCgiZyIpLFA9Xy5zZWxlY3QoImciKTtELmFwcGVuZCgicmVjdCIpLnN0eWxlKCJvcGFjaXR5IiwwKSxELmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksRC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLEQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxELmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLEQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1pbnRlcmFjdGl2ZSIpLFAuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLEwpLmF0dHIoImhlaWdodCIsQSksbCYmKGkud2lkdGgoTCksUC5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0obSkuY2FsbChpKSxvLnRvcCE9aS5oZWlnaHQoKSYmKG8udG9wPWkuaGVpZ2h0KCksQT0oZnx8cGFyc2VJbnQoQy5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8uYm90dG9tKSxfLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtby50b3ArIikiKSksXy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmxlZnQrIiwiK28udG9wKyIpIikscCYmUC5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitMKyIsMCkiKSxkJiYocy53aWR0aChMKS5oZWlnaHQoQSkubWFyZ2luKHtsZWZ0Om8ubGVmdCx0b3A6by50b3B9KS5zdmdDb250YWluZXIoQykueFNjYWxlKGcpLF8uc2VsZWN0KCIubnYtaW50ZXJhY3RpdmUiKS5jYWxsKHMpKSx0LndpZHRoKEwpLmhlaWdodChBKS5jb2xvcihtLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHx1KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4hbVt0XS5kaXNhYmxlZH0pKTt2YXIgSD1QLnNlbGVjdCgiLm52LWxpbmVzV3JhcCIpLmRhdHVtKG0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpO0gudHJhbnNpdGlvbigpLmNhbGwodCksYyYmKG4uc2NhbGUoZykudGlja3MoTC8xMDApLnRpY2tTaXplKC1BLDApLFAuc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIit5LnJhbmdlKClbMF0rIikiKSxQLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLnRyYW5zaXRpb24oKS5jYWxsKG4pKSxoJiYoci5zY2FsZSh5KS50aWNrcyhBLzM2KS50aWNrU2l6ZSgtTCwwKSxQLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLnRyYW5zaXRpb24oKS5jYWxsKHIpKSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7Yj1lLFMuc3RhdGVDaGFuZ2UoYiksTi51cGRhdGUoKX0pLHMuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW1vdmUiLGZ1bmN0aW9uKGkpe3QuY2xlYXJIaWdobGlnaHRzKCk7dmFyIGEsZixsLGM9W107bS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXJpZXNJbmRleD10LCFlLmRpc2FibGVkfSkuZm9yRWFjaChmdW5jdGlvbihuLHIpe2Y9ZS5pbnRlcmFjdGl2ZUJpc2VjdChuLnZhbHVlcyxpLnBvaW50WFZhbHVlLE4ueCgpKSx0LmhpZ2hsaWdodFBvaW50KHIsZiwhMCk7dmFyIHM9bi52YWx1ZXNbZl07aWYodHlwZW9mIHM9PSJ1bmRlZmluZWQiKXJldHVybjt0eXBlb2YgYT09InVuZGVmaW5lZCImJihhPXMpLHR5cGVvZiBsPT0idW5kZWZpbmVkIiYmKGw9Ti54U2NhbGUoKShOLngoKShzLGYpKSksYy5wdXNoKHtrZXk6bi5rZXksdmFsdWU6Ti55KCkocyxmKSxjb2xvcjp1KG4sbi5zZXJpZXNJbmRleCl9KX0pO3ZhciBoPW4udGlja0Zvcm1hdCgpKE4ueCgpKGEsZikpO3MudG9vbHRpcC5wb3NpdGlvbih7bGVmdDpsK28ubGVmdCx0b3A6aS5tb3VzZVkrby50b3B9KS5jaGFydENvbnRhaW5lcihrLnBhcmVudE5vZGUpLmVuYWJsZWQodikudmFsdWVGb3JtYXR0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci50aWNrRm9ybWF0KCkoZSl9KS5kYXRhKHt2YWx1ZTpoLHNlcmllczpjfSkoKSxzLnJlbmRlckd1aWRlTGluZShsKX0pLHMuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dCIsZnVuY3Rpb24oZSl7Uy50b29sdGlwSGlkZSgpLHQuY2xlYXJIaWdobGlnaHRzKCl9KSxTLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7diYmVChlLGsucGFyZW50Tm9kZSl9KSxTLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24oZSl7dHlwZW9mIGUuZGlzYWJsZWQhPSJ1bmRlZmluZWQiJiYobS5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kaXNhYmxlZD1lLmRpc2FibGVkW25dfSksYi5kaXNhYmxlZD1lLmRpc2FibGVkKSxOLnVwZGF0ZSgpfSl9KSxOfXZhciB0PWUubW9kZWxzLmxpbmUoKSxuPWUubW9kZWxzLmF4aXMoKSxyPWUubW9kZWxzLmF4aXMoKSxpPWUubW9kZWxzLmxlZ2VuZCgpLHM9ZS5pbnRlcmFjdGl2ZUd1aWRlbGluZSgpLG89e3RvcDozMCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo2MH0sdT1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLGE9bnVsbCxmPW51bGwsbD0hMCxjPSEwLGg9ITAscD0hMSxkPSExLHY9ITAsbT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LGcseSxiPXt9LHc9bnVsbCxFPSJObyBEYXRhIEF2YWlsYWJsZS4iLFM9ZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIikseD0yNTA7bi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDcpLHIub3JpZW50KHA/InJpZ2h0IjoibGVmdCIpO3ZhciBUPWZ1bmN0aW9uKGkscyl7dmFyIG89aS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT1pLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9bi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPXIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD1tKGkuc2VyaWVzLmtleSxhLGYsaSxOKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLG51bGwsbnVsbCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9W2UucG9zWzBdK28ubGVmdCxlLnBvc1sxXStvLnRvcF0sUy50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtTLnRvb2x0aXBIaWRlKGUpfSksUy5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7diYmZS50b29sdGlwLmNsZWFudXAoKX0pLE4uZGlzcGF0Y2g9UyxOLmxpbmVzPXQsTi5sZWdlbmQ9aSxOLnhBeGlzPW4sTi55QXhpcz1yLE4uaW50ZXJhY3RpdmVMYXllcj1zLGQzLnJlYmluZChOLHQsImRlZmluZWQiLCJpc0FyZWEiLCJ4IiwieSIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCJjbGlwVm9yb25vaSIsInVzZVZvcm9ub2kiLCJpZCIsImludGVycG9sYXRlIiksTi5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChOKSxOLm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxvLnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0Om8ucmlnaHQsby5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvbSxvLmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0Om8ubGVmdCxOKTpvfSxOLndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsTik6YX0sTi5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSxOKTpmfSxOLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcih1KSxOKTp1fSxOLnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxOKTpsfSxOLnNob3dYQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLE4pOmN9LE4uc2hvd1lBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUsTik6aH0sTi5yaWdodEFsaWduWUF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxOKTpwfSxOLnVzZUludGVyYWN0aXZlR3VpZGVsaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWUsZT09PSEwJiYoTi5pbnRlcmFjdGl2ZSghMSksTi51c2VWb3Jvbm9pKCExKSksTik6ZH0sTi50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1lLE4pOnZ9LE4udG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSxOKTptfSxOLnN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUsTik6Yn0sTi5kZWZhdWx0U3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ZSxOKTp3fSxOLm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1lLE4pOkV9LE4udHJhbnNpdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PWUsTik6eH0sTn0sZS5tb2RlbHMubGluZVBsdXNCYXJDaGFydD1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBUKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGw9ZDMuc2VsZWN0KHRoaXMpLGM9dGhpcyx2PShhfHxwYXJzZUludChsLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS11LmxlZnQtdS5yaWdodCxOPShmfHxwYXJzZUludChsLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b207VC51cGRhdGU9ZnVuY3Rpb24oKXtsLnRyYW5zaXRpb24oKS5jYWxsKFQpfSxiLmRpc2FibGVkPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF3KXt2YXIgQzt3PXt9O2ZvcihDIGluIGIpYltDXWluc3RhbmNlb2YgQXJyYXk/d1tDXT1iW0NdLnNsaWNlKDApOndbQ109YltDXX1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIGs9bC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtFXSk7cmV0dXJuIGsuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLGsuYXR0cigieCIsdS5sZWZ0K3YvMikuYXR0cigieSIsdS50b3ArTi8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksVH1sLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciBMPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLmJhcn0pLEE9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuYmFyfSk7bT1BLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aCYmQS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KVswXS52YWx1ZXMubGVuZ3RoP3QueFNjYWxlKCk6bi54U2NhbGUoKSxnPW4ueVNjYWxlKCkseT10LnlTY2FsZSgpO3ZhciBPPWQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1saW5lUGx1c0JhciIpLmRhdGEoW2VdKSxNPU8uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1saW5lUGx1c0JhciIpLmFwcGVuZCgiZyIpLF89Ty5zZWxlY3QoImciKTtNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkxIG52LWF4aXMiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteTIgbnYtYXhpcyIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLHAmJihvLndpZHRoKHYvMiksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuZGF0dW0oZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3JpZ2luYWxLZXk9ZS5vcmlnaW5hbEtleT09PXVuZGVmaW5lZD9lLmtleTplLm9yaWdpbmFsS2V5LGUua2V5PWUub3JpZ2luYWxLZXkrKGUuYmFyPyIgKGxlZnQgYXhpcykiOiIgKHJpZ2h0IGF4aXMpIiksZX0pKS5jYWxsKG8pLHUudG9wIT1vLmhlaWdodCgpJiYodS50b3A9by5oZWlnaHQoKSxOPShmfHxwYXJzZUludChsLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b20pLF8uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YvMisiLCIrIC11LnRvcCsiKSIpKSxPLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UubGVmdCsiLCIrdS50b3ArIikiKSx0LndpZHRoKHYpLmhlaWdodChOKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxoKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkpLG4ud2lkdGgodikuaGVpZ2h0KE4pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGgoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLmJhcn0pKTt2YXIgRD1fLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oTC5sZW5ndGg/TDpbe3ZhbHVlczpbXX1dKSxQPV8uc2VsZWN0KCIubnYtbGluZXNXcmFwIikuZGF0dW0oQVswXSYmIUFbMF0uZGlzYWJsZWQ/QTpbe3ZhbHVlczpbXX1dKTtkMy50cmFuc2l0aW9uKEQpLmNhbGwobiksZDMudHJhbnNpdGlvbihQKS5jYWxsKHQpLHIuc2NhbGUobSkudGlja3Modi8xMDApLnRpY2tTaXplKC1OLDApLF8uc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitnLnJhbmdlKClbMF0rIikiKSxkMy50cmFuc2l0aW9uKF8uc2VsZWN0KCIubnYteC5udi1heGlzIikpLmNhbGwociksaS5zY2FsZShnKS50aWNrcyhOLzM2KS50aWNrU2l6ZSgtdiwwKSxkMy50cmFuc2l0aW9uKF8uc2VsZWN0KCIubnYteTEubnYtYXhpcyIpKS5zdHlsZSgib3BhY2l0eSIsTC5sZW5ndGg/MTowKS5jYWxsKGkpLHMuc2NhbGUoeSkudGlja3MoTi8zNikudGlja1NpemUoTC5sZW5ndGg/MDotdiwwKSxfLnNlbGVjdCgiLm52LXkyLm52LWF4aXMiKS5zdHlsZSgib3BhY2l0eSIsQS5sZW5ndGg/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsMCkiKSxkMy50cmFuc2l0aW9uKF8uc2VsZWN0KCIubnYteTIubnYtYXhpcyIpKS5jYWxsKHMpLG8uZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtiPWUsUy5zdGF0ZUNoYW5nZShiKSxULnVwZGF0ZSgpfSksUy5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2QmJngoZSxjLnBhcmVudE5vZGUpfSksUy5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0idW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9dC5kaXNhYmxlZFtuXX0pLGIuZGlzYWJsZWQ9dC5kaXNhYmxlZCksVC51cGRhdGUoKX0pfSksVH12YXIgdD1lLm1vZGVscy5saW5lKCksbj1lLm1vZGVscy5oaXN0b3JpY2FsQmFyKCkscj1lLm1vZGVscy5heGlzKCksaT1lLm1vZGVscy5heGlzKCkscz1lLm1vZGVscy5heGlzKCksbz1lLm1vZGVscy5sZWdlbmQoKSx1PXt0b3A6MzAscmlnaHQ6NjAsYm90dG9tOjUwLGxlZnQ6NjB9LGE9bnVsbCxmPW51bGwsbD1mdW5jdGlvbihlKXtyZXR1cm4gZS54fSxjPWZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LGg9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxwPSEwLGQ9ITAsdj1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LG0sZyx5LGI9e30sdz1udWxsLEU9Ik5vIERhdGEgQXZhaWxhYmxlLiIsUz1kMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKTtuLnBhZERhdGEoITApLHQuY2xpcEVkZ2UoITEpLnBhZERhdGEoITApLHIub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg3KS5oaWdobGlnaHRaZXJvKCExKSxpLm9yaWVudCgibGVmdCIpLHMub3JpZW50KCJyaWdodCIpO3ZhciB4PWZ1bmN0aW9uKG4sbyl7dmFyIHU9bi5wb3NbMF0rKG8ub2Zmc2V0TGVmdHx8MCksYT1uLnBvc1sxXSsoby5vZmZzZXRUb3B8fDApLGY9ci50aWNrRm9ybWF0KCkodC54KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxsPShuLnNlcmllcy5iYXI/aTpzKS50aWNrRm9ybWF0KCkodC55KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxjPXYobi5zZXJpZXMua2V5LGYsbCxuLFQpO2UudG9vbHRpcC5zaG93KFt1LGFdLGMsbi52YWx1ZTwwPyJuIjoicyIsbnVsbCxvKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9W2UucG9zWzBdK3UubGVmdCxlLnBvc1sxXSt1LnRvcF0sUy50b29sdGlwU2hvdyhlKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtTLnRvb2x0aXBIaWRlKGUpfSksbi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rdS5sZWZ0LGUucG9zWzFdK3UudG9wXSxTLnRvb2x0aXBTaG93KGUpfSksbi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1MudG9vbHRpcEhpZGUoZSl9KSxTLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtkJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksVC5kaXNwYXRjaD1TLFQubGVnZW5kPW8sVC5saW5lcz10LFQuYmFycz1uLFQueEF4aXM9cixULnkxQXhpcz1pLFQueTJBeGlzPXMsZDMucmViaW5kKFQsdCwiZGVmaW5lZCIsInNpemUiLCJjbGlwVm9yb25vaSIsImludGVycG9sYXRlIiksVC5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChUKSxULng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSx0LngoZSksbi54KGUpLFQpOmx9LFQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLHQueShlKSxuLnkoZSksVCk6Y30sVC5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6dS50b3AsdS5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDp1LnJpZ2h0LHUuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206dS5ib3R0b20sdS5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDp1LmxlZnQsVCk6dX0sVC53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLFQpOmF9LFQuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUsVCk6Zn0sVC5jb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLnV0aWxzLmdldENvbG9yKHQpLG8uY29sb3IoaCksVCk6aH0sVC5zaG93TGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUsVCk6cH0sVC50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lLFQpOmR9LFQudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ZSxUKTp2fSxULnN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUsVCk6Yn0sVC5kZWZhdWx0U3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ZSxUKTp3fSxULm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1lLFQpOkV9LFR9LGUubW9kZWxzLmxpbmVXaXRoRm9jdXNDaGFydD1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBrKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gVShlKXt2YXIgdD0rKGU9PSJlIiksbj10PzE6LTEscj1NLzM7cmV0dXJuIk0iKy41Km4rIiwiK3IrIkE2LDYgMCAwICIrdCsiICIrNi41Km4rIiwiKyhyKzYpKyJWIisoMipyLTYpKyJBNiw2IDAgMCAiK3QrIiAiKy41Km4rIiwiKzIqcisiWiIrIk0iKzIuNSpuKyIsIisocis4KSsiViIrKDIqci04KSsiTSIrNC41Km4rIiwiKyhyKzgpKyJWIisoMipyLTgpfWZ1bmN0aW9uIHooKXthLmVtcHR5KCl8fGEuZXh0ZW50KHcpLEkuZGF0YShbYS5lbXB0eSgpP2cuZG9tYWluKCk6d10pLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1nKGVbMF0pLXYucmFuZ2UoKVswXSxyPXYucmFuZ2UoKVsxXS1nKGVbMV0pO2QzLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5sZWZ0IikuYXR0cigid2lkdGgiLG48MD8wOm4pLGQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5yaWdodCIpLmF0dHIoIngiLGcoZVsxXSkpLmF0dHIoIndpZHRoIixyPDA/MDpyKX0pfWZ1bmN0aW9uIFcoKXt3PWEuZW1wdHkoKT9udWxsOmEuZXh0ZW50KCk7dmFyIG49YS5lbXB0eSgpP2cuZG9tYWluKCk6YS5leHRlbnQoKTtpZihNYXRoLmFicyhuWzBdLW5bMV0pPD0xKXJldHVybjtULmJydXNoKHtleHRlbnQ6bixicnVzaDphfSkseigpO3ZhciBzPUguc2VsZWN0KCIubnYtZm9jdXMgLm52LWxpbmVzV3JhcCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJue2tleTplLmtleSx2YWx1ZXM6ZS52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQueCgpKGUscik+PW5bMF0mJnQueCgpKGUscik8PW5bMV19KX19KSk7cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oTikuY2FsbCh0KSxILnNlbGVjdCgiLm52LWZvY3VzIC5udi14Lm52LWF4aXMiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTikuY2FsbChyKSxILnNlbGVjdCgiLm52LWZvY3VzIC5udi15Lm52LWF4aXMiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTikuY2FsbChpKX12YXIgUz1kMy5zZWxlY3QodGhpcyksTD10aGlzLEE9KGh8fHBhcnNlSW50KFMuc3R5bGUoIndpZHRoIikpfHw5NjApLWYubGVmdC1mLnJpZ2h0LE89KHB8fHBhcnNlSW50KFMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1mLnRvcC1mLmJvdHRvbS1kLE09ZC1sLnRvcC1sLmJvdHRvbTtrLnVwZGF0ZT1mdW5jdGlvbigpe1MudHJhbnNpdGlvbigpLmR1cmF0aW9uKE4pLmNhbGwoayl9LGsuY29udGFpbmVyPXRoaXM7aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBfPVMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbeF0pO3JldHVybiBfLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxfLmF0dHIoIngiLGYubGVmdCtBLzIpLmF0dHIoInkiLGYudG9wK08vMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLGt9Uy5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSx2PXQueFNjYWxlKCksbT10LnlTY2FsZSgpLGc9bi54U2NhbGUoKSx5PW4ueVNjYWxlKCk7dmFyIEQ9Uy5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1saW5lV2l0aEZvY3VzQ2hhcnQiKS5kYXRhKFtlXSksUD1ELmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbGluZVdpdGhGb2N1c0NoYXJ0IikuYXBwZW5kKCJnIiksSD1ELnNlbGVjdCgiZyIpO1AuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIik7dmFyIEI9UC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWZvY3VzIik7Qi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIik7dmFyIGo9UC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRleHQiKTtqLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkgbnYtYXhpcyIpLGouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxqLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYnJ1c2hCYWNrZ3JvdW5kIiksai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYnJ1c2giKSxiJiYodS53aWR0aChBKSxILnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKHUpLGYudG9wIT11LmhlaWdodCgpJiYoZi50b3A9dS5oZWlnaHQoKSxPPShwfHxwYXJzZUludChTLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktZi50b3AtZi5ib3R0b20tZCksSC5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLWYudG9wKyIpIikpLEQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZi5sZWZ0KyIsIitmLnRvcCsiKSIpLHQud2lkdGgoQSkuaGVpZ2h0KE8pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLG4uZGVmaW5lZCh0LmRlZmluZWQoKSkud2lkdGgoQSkuaGVpZ2h0KE0pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLEguc2VsZWN0KCIubnYtY29udGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKE8rZi5ib3R0b20rbC50b3ApKyIpIik7dmFyIEY9SC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi1saW5lc1dyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKTtkMy50cmFuc2l0aW9uKEYpLmNhbGwobiksci5zY2FsZSh2KS50aWNrcyhBLzEwMCkudGlja1NpemUoLU8sMCksaS5zY2FsZShtKS50aWNrcyhPLzM2KS50aWNrU2l6ZSgtQSwwKSxILnNlbGVjdCgiLm52LWZvY3VzIC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK08rIikiKSxhLngoZykub24oImJydXNoIixmdW5jdGlvbigpe3ZhciBlPWsudHJhbnNpdGlvbkR1cmF0aW9uKCk7ay50cmFuc2l0aW9uRHVyYXRpb24oMCksVygpLGsudHJhbnNpdGlvbkR1cmF0aW9uKGUpfSksdyYmYS5leHRlbnQodyk7dmFyIEk9SC5zZWxlY3QoIi5udi1icnVzaEJhY2tncm91bmQiKS5zZWxlY3RBbGwoImciKS5kYXRhKFt3fHxhLmV4dGVudCgpXSkscT1JLmVudGVyKCkuYXBwZW5kKCJnIik7cS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImxlZnQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJoZWlnaHQiLE0pLHEuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJyaWdodCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImhlaWdodCIsTSk7dmFyIFI9SC5zZWxlY3QoIi5udi14Lm52LWJydXNoIikuY2FsbChhKTtSLnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoImhlaWdodCIsTSksUi5zZWxlY3RBbGwoIi5yZXNpemUiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixVKSxXKCkscy5zY2FsZShnKS50aWNrcyhBLzEwMCkudGlja1NpemUoLU0sMCksSC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3kucmFuZ2UoKVswXSsiKSIpLGQzLnRyYW5zaXRpb24oSC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi14Lm52LWF4aXMiKSkuY2FsbChzKSxvLnNjYWxlKHkpLnRpY2tzKE0vMzYpLnRpY2tTaXplKC1BLDApLGQzLnRyYW5zaXRpb24oSC5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15Lm52LWF4aXMiKSkuY2FsbChvKSxILnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIreS5yYW5nZSgpWzBdKyIpIiksdS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2sudXBkYXRlKCl9KSxULm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7RSYmQyhlLEwucGFyZW50Tm9kZSl9KX0pLGt9dmFyIHQ9ZS5tb2RlbHMubGluZSgpLG49ZS5tb2RlbHMubGluZSgpLHI9ZS5tb2RlbHMuYXhpcygpLGk9ZS5tb2RlbHMuYXhpcygpLHM9ZS5tb2RlbHMuYXhpcygpLG89ZS5tb2RlbHMuYXhpcygpLHU9ZS5tb2RlbHMubGVnZW5kKCksYT1kMy5zdmcuYnJ1c2goKSxmPXt0b3A6MzAscmlnaHQ6MzAsYm90dG9tOjMwLGxlZnQ6NjB9LGw9e3RvcDowLHJpZ2h0OjMwLGJvdHRvbToyMCxsZWZ0OjYwfSxjPWUudXRpbHMuZGVmYXVsdENvbG9yKCksaD1udWxsLHA9bnVsbCxkPTEwMCx2LG0sZyx5LGI9ITAsdz1udWxsLEU9ITAsUz1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LHg9Ik5vIERhdGEgQXZhaWxhYmxlLiIsVD1kMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsImJydXNoIiksTj0yNTA7dC5jbGlwRWRnZSghMCksbi5pbnRlcmFjdGl2ZSghMSksci5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLGkub3JpZW50KCJsZWZ0Iikscy5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDUpLG8ub3JpZW50KCJsZWZ0Iik7dmFyIEM9ZnVuY3Rpb24obixzKXt2YXIgbz1uLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PW4ucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT1yLnRpY2tGb3JtYXQoKSh0LngoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGY9aS50aWNrRm9ybWF0KCkodC55KCkobi5wb2ludCxuLnBvaW50SW5kZXgpKSxsPVMobi5zZXJpZXMua2V5LGEsZixuLGspO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsbnVsbCxudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rZi5sZWZ0LGUucG9zWzFdK2YudG9wXSxULnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxULm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtFJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksay5kaXNwYXRjaD1ULGsubGVnZW5kPXUsay5saW5lcz10LGsubGluZXMyPW4say54QXhpcz1yLGsueUF4aXM9aSxrLngyQXhpcz1zLGsueTJBeGlzPW8sZDMucmViaW5kKGssdCwiZGVmaW5lZCIsImlzQXJlYSIsInNpemUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImludGVyYWN0aXZlIiwiY2xpcEVkZ2UiLCJjbGlwVm9yb25vaSIsImlkIiksay5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChrKSxrLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQueChlKSxuLngoZSksayk6dC54fSxrLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQueShlKSxuLnkoZSksayk6dC55fSxrLm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZi50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDpmLnRvcCxmLnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0OmYucmlnaHQsZi5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTpmLmJvdHRvbSxmLmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0OmYubGVmdCxrKTpmfSxrLm1hcmdpbjI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxrKTpsfSxrLndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUsayk6aH0say5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSxrKTpwfSxrLmhlaWdodDI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSxrKTpkfSxrLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWUudXRpbHMuZ2V0Q29sb3IodCksdS5jb2xvcihjKSxrKTpjfSxrLnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9ZSxrKTpifSxrLnRvb2x0aXBzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPWUsayk6RX0say50b29sdGlwQ29udGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1lLGspOlN9LGsuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuaW50ZXJwb2xhdGUoZSksbi5pbnRlcnBvbGF0ZShlKSxrKTp0LmludGVycG9sYXRlKCl9LGsubm9EYXRhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PWUsayk6eH0say54VGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci50aWNrRm9ybWF0KGUpLHMudGlja0Zvcm1hdChlKSxrKTpyLnRpY2tGb3JtYXQoKX0say55VGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS50aWNrRm9ybWF0KGUpLG8udGlja0Zvcm1hdChlKSxrKTppLnRpY2tGb3JtYXQoKX0say5icnVzaEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1lLGspOnd9LGsudHJhbnNpdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPWUsayk6Tn0sa30sZS5tb2RlbHMubGluZVBsdXNCYXJXaXRoRm9jdXNDaGFydD1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBCKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbnQoZSl7dmFyIHQ9KyhlPT0iZSIpLG49dD8xOi0xLHI9cS8zO3JldHVybiJNIisuNSpuKyIsIityKyJBNiw2IDAgMCAiK3QrIiAiKzYuNSpuKyIsIisocis2KSsiViIrKDIqci02KSsiQTYsNiAwIDAgIit0KyIgIisuNSpuKyIsIisyKnIrIloiKyJNIisyLjUqbisiLCIrKHIrOCkrIlYiKygyKnItOCkrIk0iKzQuNSpuKyIsIisocis4KSsiViIrKDIqci04KX1mdW5jdGlvbiBydCgpe2guZW1wdHkoKXx8aC5leHRlbnQoeCksWi5kYXRhKFtoLmVtcHR5KCk/ay5kb21haW4oKTp4XSkuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPWsoZVswXSktay5yYW5nZSgpWzBdLHI9ay5yYW5nZSgpWzFdLWsoZVsxXSk7ZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZnQiKS5hdHRyKCJ3aWR0aCIsbjwwPzA6biksZDMuc2VsZWN0KHRoaXMpLnNlbGVjdCgiLnJpZ2h0IikuYXR0cigieCIsayhlWzFdKSkuYXR0cigid2lkdGgiLHI8MD8wOnIpfSl9ZnVuY3Rpb24gaXQoKXt4PWguZW1wdHkoKT9udWxsOmguZXh0ZW50KCksUz1oLmVtcHR5KCk/ay5kb21haW4oKTpoLmV4dGVudCgpLEQuYnJ1c2goe2V4dGVudDpTLGJydXNoOmh9KSxydCgpLHIud2lkdGgoRikuaGVpZ2h0KEkpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fHcoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLmJhcn0pKSx0LndpZHRoKEYpLmhlaWdodChJKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHx3KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmIWVbbl0uYmFyfSkpO3ZhciBuPUouc2VsZWN0KCIubnYtZm9jdXMgLm52LWJhcnNXcmFwIikuZGF0dW0oVS5sZW5ndGg/VS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57a2V5OmUua2V5LHZhbHVlczplLnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci54KCkoZSx0KT49U1swXSYmci54KCkoZSx0KTw9U1sxXX0pfX0pOlt7dmFsdWVzOltdfV0pLGk9Si5zZWxlY3QoIi5udi1mb2N1cyAubnYtbGluZXNXcmFwIikuZGF0dW0oelswXS5kaXNhYmxlZD9be3ZhbHVlczpbXX1dOnoubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJue2tleTplLmtleSx2YWx1ZXM6ZS52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQueCgpKGUsbik+PVNbMF0mJnQueCgpKGUsbik8PVNbMV19KX19KSk7VS5sZW5ndGg/Qz1yLnhTY2FsZSgpOkM9dC54U2NhbGUoKSxzLnNjYWxlKEMpLnRpY2tzKEYvMTAwKS50aWNrU2l6ZSgtSSwwKSxzLmRvbWFpbihbTWF0aC5jZWlsKFNbMF0pLE1hdGguZmxvb3IoU1sxXSldKSxKLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihQKS5jYWxsKHMpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKFApLmNhbGwociksaS50cmFuc2l0aW9uKCkuZHVyYXRpb24oUCkuY2FsbCh0KSxKLnNlbGVjdCgiLm52LWZvY3VzIC5udi14Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK0wucmFuZ2UoKVswXSsiKSIpLHUuc2NhbGUoTCkudGlja3MoSS8zNikudGlja1NpemUoLUYsMCksSi5zZWxlY3QoIi5udi1mb2N1cyAubnYteTEubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixVLmxlbmd0aD8xOjApLGEuc2NhbGUoQSkudGlja3MoSS8zNikudGlja1NpemUoVS5sZW5ndGg/MDotRiwwKSxKLnNlbGVjdCgiLm52LWZvY3VzIC5udi15Mi5udi1heGlzIikuc3R5bGUoIm9wYWNpdHkiLHoubGVuZ3RoPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQy5yYW5nZSgpWzFdKyIsMCkiKSxKLnNlbGVjdCgiLm52LWZvY3VzIC5udi15MS5udi1heGlzIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKFApLmNhbGwodSksSi5zZWxlY3QoIi5udi1mb2N1cyAubnYteTIubnYtYXhpcyIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihQKS5jYWxsKGEpfXZhciBOPWQzLnNlbGVjdCh0aGlzKSxqPXRoaXMsRj0odnx8cGFyc2VJbnQoTi5zdHlsZSgid2lkdGgiKSl8fDk2MCktcC5sZWZ0LXAucmlnaHQsST0obXx8cGFyc2VJbnQoTi5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXAudG9wLXAuYm90dG9tLWcscT1nLWQudG9wLWQuYm90dG9tO0IudXBkYXRlPWZ1bmN0aW9uKCl7Ti50cmFuc2l0aW9uKCkuZHVyYXRpb24oUCkuY2FsbChCKX0sQi5jb250YWluZXI9dGhpcztpZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIFI9Ti5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtfXSk7cmV0dXJuIFIuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLFIuYXR0cigieCIscC5sZWZ0K0YvMikuYXR0cigieSIscC50b3ArSS8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksQn1OLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpO3ZhciBVPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLmJhcn0pLHo9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuYmFyfSk7Qz1yLnhTY2FsZSgpLGs9by5zY2FsZSgpLEw9ci55U2NhbGUoKSxBPXQueVNjYWxlKCksTz1pLnlTY2FsZSgpLE09bi55U2NhbGUoKTt2YXIgVz1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS5iYXJ9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OnkoZSx0KSx5OmIoZSx0KX19KX0pLFg9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJiFlLmJhcn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6eShlLHQpLHk6YihlLHQpfX0pfSk7Qy5yYW5nZShbMCxGXSksay5kb21haW4oZDMuZXh0ZW50KGQzLm1lcmdlKFcuY29uY2F0KFgpKSxmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhbmdlKFswLEZdKTt2YXIgVj1OLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LWxpbmVQbHVzQmFyIikuZGF0YShbZV0pLCQ9Vi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LWxpbmVQbHVzQmFyIikuYXBwZW5kKCJnIiksSj1WLnNlbGVjdCgiZyIpOyQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIik7dmFyIEs9JC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWZvY3VzIik7Sy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEsuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15MSBudi1heGlzIiksSy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkyIG52LWF4aXMiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxLLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGluZXNXcmFwIik7dmFyIFE9JC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRleHQiKTtRLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteCBudi1heGlzIiksUS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXkxIG52LWF4aXMiKSxRLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteTIgbnYtYXhpcyIpLFEuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1iYXJzV3JhcCIpLFEuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1saW5lc1dyYXAiKSxRLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYnJ1c2hCYWNrZ3JvdW5kIiksUS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYnJ1c2giKSxFJiYoYy53aWR0aChGLzIpLEouc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9yaWdpbmFsS2V5PWUub3JpZ2luYWxLZXk9PT11bmRlZmluZWQ/ZS5rZXk6ZS5vcmlnaW5hbEtleSxlLmtleT1lLm9yaWdpbmFsS2V5KyhlLmJhcj8iIChsZWZ0IGF4aXMpIjoiIChyaWdodCBheGlzKSIpLGV9KSkuY2FsbChjKSxwLnRvcCE9Yy5oZWlnaHQoKSYmKHAudG9wPWMuaGVpZ2h0KCksST0obXx8cGFyc2VJbnQoTi5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXAudG9wLXAuYm90dG9tLWcpLEouc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0YvMisiLCIrIC1wLnRvcCsiKSIpKSxWLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3AubGVmdCsiLCIrcC50b3ArIikiKSxpLndpZHRoKEYpLmhlaWdodChxKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHx3KGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS5iYXJ9KSksbi53aWR0aChGKS5oZWlnaHQocSkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8dyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJiFlW25dLmJhcn0pKTt2YXIgRz1KLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LWJhcnNXcmFwIikuZGF0dW0oVS5sZW5ndGg/VTpbe3ZhbHVlczpbXX1dKSxZPUouc2VsZWN0KCIubnYtY29udGV4dCAubnYtbGluZXNXcmFwIikuZGF0dW0oelswXS5kaXNhYmxlZD9be3ZhbHVlczpbXX1dOnopO0ouc2VsZWN0KCIubnYtY29udGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKEkrcC5ib3R0b20rZC50b3ApKyIpIiksRy50cmFuc2l0aW9uKCkuY2FsbChpKSxZLnRyYW5zaXRpb24oKS5jYWxsKG4pLGgueChrKS5vbigiYnJ1c2giLGl0KSx4JiZoLmV4dGVudCh4KTt2YXIgWj1KLnNlbGVjdCgiLm52LWJydXNoQmFja2dyb3VuZCIpLnNlbGVjdEFsbCgiZyIpLmRhdGEoW3h8fGguZXh0ZW50KCldKSxldD1aLmVudGVyKCkuYXBwZW5kKCJnIik7ZXQuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJsZWZ0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGVpZ2h0IixxKSxldC5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInJpZ2h0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiaGVpZ2h0IixxKTt2YXIgdHQ9Si5zZWxlY3QoIi5udi14Lm52LWJydXNoIikuY2FsbChoKTt0dC5zZWxlY3RBbGwoInJlY3QiKS5hdHRyKCJoZWlnaHQiLHEpLHR0LnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLG50KSxvLnRpY2tzKEYvMTAwKS50aWNrU2l6ZSgtcSwwKSxKLnNlbGVjdCgiLm52LWNvbnRleHQgLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTy5yYW5nZSgpWzBdKyIpIiksSi5zZWxlY3QoIi5udi1jb250ZXh0IC5udi14Lm52LWF4aXMiKS50cmFuc2l0aW9uKCkuY2FsbChvKSxmLnNjYWxlKE8pLnRpY2tzKHEvMzYpLnRpY2tTaXplKC1GLDApLEouc2VsZWN0KCIubnYtY29udGV4dCAubnYteTEubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixVLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIray5yYW5nZSgpWzBdKyIpIiksSi5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15MS5udi1heGlzIikudHJhbnNpdGlvbigpLmNhbGwoZiksbC5zY2FsZShNKS50aWNrcyhxLzM2KS50aWNrU2l6ZShVLmxlbmd0aD8wOi1GLDApLEouc2VsZWN0KCIubnYtY29udGV4dCAubnYteTIubnYtYXhpcyIpLnN0eWxlKCJvcGFjaXR5Iix6Lmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2sucmFuZ2UoKVsxXSsiLDApIiksSi5zZWxlY3QoIi5udi1jb250ZXh0IC5udi15Mi5udi1heGlzIikudHJhbnNpdGlvbigpLmNhbGwobCksYy5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe0IudXBkYXRlKCl9KSxELm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7VCYmSChlLGoucGFyZW50Tm9kZSl9KSxpdCgpfSksQn12YXIgdD1lLm1vZGVscy5saW5lKCksbj1lLm1vZGVscy5saW5lKCkscj1lLm1vZGVscy5oaXN0b3JpY2FsQmFyKCksaT1lLm1vZGVscy5oaXN0b3JpY2FsQmFyKCkscz1lLm1vZGVscy5heGlzKCksbz1lLm1vZGVscy5heGlzKCksdT1lLm1vZGVscy5heGlzKCksYT1lLm1vZGVscy5heGlzKCksZj1lLm1vZGVscy5heGlzKCksbD1lLm1vZGVscy5heGlzKCksYz1lLm1vZGVscy5sZWdlbmQoKSxoPWQzLnN2Zy5icnVzaCgpLHA9e3RvcDozMCxyaWdodDozMCxib3R0b206MzAsbGVmdDo2MH0sZD17dG9wOjAscmlnaHQ6MzAsYm90dG9tOjIwLGxlZnQ6NjB9LHY9bnVsbCxtPW51bGwsZz0xMDAseT1mdW5jdGlvbihlKXtyZXR1cm4gZS54fSxiPWZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LHc9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxFPSEwLFMseD1udWxsLFQ9ITAsTj1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiI8aDM+IitlKyI8L2gzPiIrIjxwPiIrbisiIGF0ICIrdCsiPC9wPiJ9LEMsayxMLEEsTyxNLF89Ik5vIERhdGEgQXZhaWxhYmxlLiIsRD1kMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsImJydXNoIiksUD0wO3QuY2xpcEVkZ2UoITApLG4uaW50ZXJhY3RpdmUoITEpLHMub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSx1Lm9yaWVudCgibGVmdCIpLGEub3JpZW50KCJyaWdodCIpLG8ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxmLm9yaWVudCgibGVmdCIpLGwub3JpZW50KCJyaWdodCIpO3ZhciBIPWZ1bmN0aW9uKG4scil7UyYmKG4ucG9pbnRJbmRleCs9TWF0aC5jZWlsKFNbMF0pKTt2YXIgaT1uLnBvc1swXSsoci5vZmZzZXRMZWZ0fHwwKSxvPW4ucG9zWzFdKyhyLm9mZnNldFRvcHx8MCksZj1zLnRpY2tGb3JtYXQoKSh0LngoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGw9KG4uc2VyaWVzLmJhcj91OmEpLnRpY2tGb3JtYXQoKSh0LnkoKShuLnBvaW50LG4ucG9pbnRJbmRleCkpLGM9TihuLnNlcmllcy5rZXksZixsLG4sQik7ZS50b29sdGlwLnNob3coW2ksb10sYyxuLnZhbHVlPDA/Im4iOiJzIixudWxsLHIpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rcC5sZWZ0LGUucG9zWzFdK3AudG9wXSxELnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe0QudG9vbHRpcEhpZGUoZSl9KSxyLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPVtlLnBvc1swXStwLmxlZnQsZS5wb3NbMV0rcC50b3BdLEQudG9vbHRpcFNob3coZSl9KSxyLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7RC50b29sdGlwSGlkZShlKX0pLEQub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe1QmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxCLmRpc3BhdGNoPUQsQi5sZWdlbmQ9YyxCLmxpbmVzPXQsQi5saW5lczI9bixCLmJhcnM9cixCLmJhcnMyPWksQi54QXhpcz1zLEIueDJBeGlzPW8sQi55MUF4aXM9dSxCLnkyQXhpcz1hLEIueTNBeGlzPWYsQi55NEF4aXM9bCxkMy5yZWJpbmQoQix0LCJkZWZpbmVkIiwic2l6ZSIsImNsaXBWb3Jvbm9pIiwiaW50ZXJwb2xhdGUiKSxCLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEIpLEIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLHQueChlKSxyLngoZSksQik6eX0sQi55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUsdC55KGUpLHIueShlKSxCKTpifSxCLm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocC50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDpwLnRvcCxwLnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0OnAucmlnaHQscC5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTpwLmJvdHRvbSxwLmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0OnAubGVmdCxCKTpwfSxCLndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUsQik6dn0sQi5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSxCKTptfSxCLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PWUudXRpbHMuZ2V0Q29sb3IodCksYy5jb2xvcih3KSxCKTp3fSxCLnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ZSxCKTpFfSxCLnRvb2x0aXBzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPWUsQik6VH0sQi50b29sdGlwQ29udGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj1lLEIpOk59LEIubm9EYXRhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPWUsQik6X30sQi5icnVzaEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD1lLEIpOnh9LEJ9LGUubW9kZWxzLm11bHRpQmFyPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE4oZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgTj1uLXQubGVmdC10LnJpZ2h0LEM9ci10LnRvcC10LmJvdHRvbSxrPWQzLnNlbGVjdCh0aGlzKTtwJiZlLmxlbmd0aCYmKHA9W3t2YWx1ZXM6ZVswXS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybnt4OmUueCx5OjAsc2VyaWVzOmUuc2VyaWVzLHNpemU6LjAxfX0pfV0pLGMmJihlPWQzLmxheW91dC5zdGFjaygpLm9mZnNldCgiemVybyIpLnZhbHVlcyhmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS55KGEpKCFlLmxlbmd0aCYmcD9wOmUpKSxlPWUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWVzPWUudmFsdWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXJpZXM9dCxlfSksZX0pLGMmJmVbMF0udmFsdWVzLm1hcChmdW5jdGlvbih0LG4pe3ZhciByPTAsaT0wO2UubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWVzW25dO3Quc2l6ZT1NYXRoLmFicyh0LnkpLHQueTwwPyh0LnkxPWksaS09dC5zaXplKToodC55MT10LnNpemUrcixyKz10LnNpemUpfSl9KTt2YXIgTD1nJiZ5P1tdOmUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57eDp1KGUsdCkseTphKGUsdCkseTA6ZS55MCx5MTplLnkxfX0pfSk7aS5kb21haW4oZ3x8ZDMubWVyZ2UoTCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnh9KSkucmFuZ2VCYW5kcyhifHxbMCxOXSxFKSxzLmRvbWFpbih5fHxkMy5leHRlbnQoZDMubWVyZ2UoTCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjP2UueT4wP2UueTE6ZS55MStlLnk6ZS55fSkuY29uY2F0KGYpKSkucmFuZ2Uod3x8W0MsMF0pLGkuZG9tYWluKClbMF09PT1pLmRvbWFpbigpWzFdJiYoaS5kb21haW4oKVswXT9pLmRvbWFpbihbaS5kb21haW4oKVswXS1pLmRvbWFpbigpWzBdKi4wMSxpLmRvbWFpbigpWzFdK2kuZG9tYWluKClbMV0qLjAxXSk6aS5kb21haW4oWy0xLDFdKSkscy5kb21haW4oKVswXT09PXMuZG9tYWluKClbMV0mJihzLmRvbWFpbigpWzBdP3MuZG9tYWluKFtzLmRvbWFpbigpWzBdK3MuZG9tYWluKClbMF0qLjAxLHMuZG9tYWluKClbMV0tcy5kb21haW4oKVsxXSouMDFdKTpzLmRvbWFpbihbLTEsMV0pKSx4PXh8fGksVD1UfHxzO3ZhciBBPWsuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGliYXIiKS5kYXRhKFtlXSksTz1BLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGliYXIiKSxNPU8uYXBwZW5kKCJkZWZzIiksXz1PLmFwcGVuZCgiZyIpLEQ9QS5zZWxlY3QoImciKTtfLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZ3JvdXBzIiksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIiksTS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi1lZGdlLWNsaXAtIitvKS5hcHBlbmQoInJlY3QiKSxBLnNlbGVjdCgiI252LWVkZ2UtY2xpcC0iK28rIiByZWN0IikuYXR0cigid2lkdGgiLE4pLmF0dHIoImhlaWdodCIsQyksRC5hdHRyKCJjbGlwLXBhdGgiLGw/InVybCgjbnYtZWRnZS1jbGlwLSIrbysiKSI6IiIpO3ZhciBQPUEuc2VsZWN0KCIubnYtZ3JvdXBzIikuc2VsZWN0QWxsKCIubnYtZ3JvdXAiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSxmdW5jdGlvbihlLHQpe3JldHVybiB0fSk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksUC5leGl0KCkudHJhbnNpdGlvbigpLnNlbGVjdEFsbCgicmVjdC5udi1iYXIiKS5kZWxheShmdW5jdGlvbih0LG4pe3JldHVybiBuKm0vZVswXS52YWx1ZXMubGVuZ3RofSkuYXR0cigieSIsZnVuY3Rpb24oZSl7cmV0dXJuIGM/VChlLnkwKTpUKDApfSkuYXR0cigiaGVpZ2h0IiwwKS5yZW1vdmUoKSxQLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQpe3JldHVybiJudi1ncm91cCBudi1zZXJpZXMtIit0fSkuY2xhc3NlZCgiaG92ZXIiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmhvdmVyfSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgoZSx0KX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgoZSx0KX0pLFAudHJhbnNpdGlvbigpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsLjc1KTt2YXIgSD1QLnNlbGVjdEFsbCgicmVjdC5udi1iYXIiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiBwJiYhZS5sZW5ndGg/cC52YWx1ZXM6dC52YWx1ZXN9KTtILmV4aXQoKS5yZW1vdmUoKTt2YXIgQj1ILmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1iYXIgcG9zaXRpdmUifSkuYXR0cigieCIsZnVuY3Rpb24odCxuLHIpe3JldHVybiBjPzA6cippLnJhbmdlQmFuZCgpL2UubGVuZ3RofSkuYXR0cigieSIsZnVuY3Rpb24oZSl7cmV0dXJuIFQoYz9lLnkwOjApfSkuYXR0cigiaGVpZ2h0IiwwKS5hdHRyKCJ3aWR0aCIsaS5yYW5nZUJhbmQoKS8oYz8xOmUubGVuZ3RoKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitpKHUoZSx0KSkrIiwwKSJ9KTtILnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSxuLHQpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsbix0KX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMCksUy5lbGVtZW50TW91c2VvdmVyKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltpKHUodCxuKSkraS5yYW5nZUJhbmQoKSooYz9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90LnkwOjApKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKSxTLmVsZW1lbnRNb3VzZW91dCh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKHQsbil7Uy5lbGVtZW50Q2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W2kodSh0LG4pKStpLnJhbmdlQmFuZCgpKihjP2UubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLHMoYSh0LG4pKyhjP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRibGNsaWNrIixmdW5jdGlvbih0LG4pe1MuZWxlbWVudERibENsaWNrKHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9zOltpKHUodCxuKSkraS5yYW5nZUJhbmQoKSooYz9lLmxlbmd0aC8yOnQuc2VyaWVzKy41KS9lLmxlbmd0aCxzKGEodCxuKSsoYz90LnkwOjApKV0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLEguYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KTwwPyJudi1iYXIgbmVnYXRpdmUiOiJudi1iYXIgcG9zaXRpdmUifSkudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIraSh1KGUsdCkpKyIsMCkifSksZCYmKHZ8fCh2PWUubWFwKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSksSC5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkMy5yZ2IoZChlLHQpKS5kYXJrZXIodi5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiF2W3RdfSlbbl0pLnRvU3RyaW5nKCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIGQzLnJnYihkKGUsdCkpLmRhcmtlcih2Lm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIXZbdF19KVtuXSkudG9TdHJpbmcoKX0pKSxjP0gudHJhbnNpdGlvbigpLmRlbGF5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4qbS9lWzBdLnZhbHVlcy5sZW5ndGh9KS5hdHRyKCJ5IixmdW5jdGlvbihlLHQpe3JldHVybiBzKGM/ZS55MTowKX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMocyhlLnkrKGM/ZS55MDowKSktcyhjP2UueTA6MCkpLDEpfSkuYXR0cigieCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gYz8wOnQuc2VyaWVzKmkucmFuZ2VCYW5kKCkvZS5sZW5ndGh9KS5hdHRyKCJ3aWR0aCIsaS5yYW5nZUJhbmQoKS8oYz8xOmUubGVuZ3RoKSk6SC50cmFuc2l0aW9uKCkuZGVsYXkoZnVuY3Rpb24odCxuKXtyZXR1cm4gbiptL2VbMF0udmFsdWVzLmxlbmd0aH0pLmF0dHIoIngiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2VyaWVzKmkucmFuZ2VCYW5kKCkvZS5sZW5ndGh9KS5hdHRyKCJ3aWR0aCIsaS5yYW5nZUJhbmQoKS9lLmxlbmd0aCkuYXR0cigieSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/cygwKTpzKDApLXMoYShlLHQpKTwxP3MoMCktMTpzKGEoZSx0KSl8fDB9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHMoYShlLHQpKS1zKDApKSwxKXx8MH0pLHg9aS5jb3B5KCksVD1zCi5jb3B5KCl9KSxOfXZhciB0PXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj05NjAscj01MDAsaT1kMy5zY2FsZS5vcmRpbmFsKCkscz1kMy5zY2FsZS5saW5lYXIoKSxvPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpLHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT1mdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPVswXSxsPSEwLGM9ITEsaD1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLHA9ITEsZD1udWxsLHYsbT0xMjAwLGcseSxiLHcsRT0uMSxTPWQzLmRpc3BhdGNoKCJjaGFydENsaWNrIiwiZWxlbWVudENsaWNrIiwiZWxlbWVudERibENsaWNrIiwiZWxlbWVudE1vdXNlb3ZlciIsImVsZW1lbnRNb3VzZW91dCIpLHgsVDtyZXR1cm4gTi5kaXNwYXRjaD1TLE4ub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoTiksTi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsTik6dX0sTi55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsTik6YX0sTi5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsTik6dH0sTi53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLE4pOm59LE4uaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsTik6cn0sTi54U2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSxOKTppfSxOLnlTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLE4pOnN9LE4ueERvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1lLE4pOmd9LE4ueURvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLE4pOnl9LE4ueFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUsTik6Yn0sTi55UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ZSxOKTp3fSxOLmZvcmNlWT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLE4pOmZ9LE4uc3RhY2tlZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLE4pOmN9LE4uY2xpcEVkZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxOKTpsfSxOLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUudXRpbHMuZ2V0Q29sb3IodCksTik6aH0sTi5iYXJDb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lLnV0aWxzLmdldENvbG9yKHQpLE4pOmR9LE4uZGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ZSxOKTp2fSxOLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsTik6b30sTi5oaWRlYWJsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLE4pOnB9LE4uZGVsYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSxOKTptfSxOLmdyb3VwU3BhY2luZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1lLE4pOkV9LE59LGUubW9kZWxzLm11bHRpQmFyQ2hhcnQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gQShlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBiPWQzLnNlbGVjdCh0aGlzKSxPPXRoaXMsTT0odXx8cGFyc2VJbnQoYi5zdHlsZSgid2lkdGgiKSl8fDk2MCktby5sZWZ0LW8ucmlnaHQsXz0oYXx8cGFyc2VJbnQoYi5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLW8udG9wLW8uYm90dG9tO0EudXBkYXRlPWZ1bmN0aW9uKCl7Yi50cmFuc2l0aW9uKCkuZHVyYXRpb24oaykuY2FsbChBKX0sQS5jb250YWluZXI9dGhpcyxTLmRpc2FibGVkPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF4KXt2YXIgRDt4PXt9O2ZvcihEIGluIFMpU1tEXWluc3RhbmNlb2YgQXJyYXk/eFtEXT1TW0RdLnNsaWNlKDApOnhbRF09U1tEXX1pZighZXx8IWUubGVuZ3RofHwhZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIFA9Yi5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtUXSk7cmV0dXJuIFAuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLFAuYXR0cigieCIsby5sZWZ0K00vMikuYXR0cigieSIsby50b3ArXy8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksQX1iLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLHc9dC54U2NhbGUoKSxFPXQueVNjYWxlKCk7dmFyIEg9Yi5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1tdWx0aUJhcldpdGhMZWdlbmQiKS5kYXRhKFtlXSksQj1ILmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGlCYXJXaXRoTGVnZW5kIikuYXBwZW5kKCJnIiksaj1ILnNlbGVjdCgiZyIpO0IuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksQi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWJhcnNXcmFwIiksQi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxCLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIiksYyYmKGkud2lkdGgoTS1DKCkpLHQuYmFyQ29sb3IoKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5jb2xvcj1kMy5yZ2IoIiNjY2MiKS5kYXJrZXIodCoxLjUpLnRvU3RyaW5nKCl9KSxqLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKGkpLG8udG9wIT1pLmhlaWdodCgpJiYoby50b3A9aS5oZWlnaHQoKSxfPShhfHxwYXJzZUludChiLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktby50b3Atby5ib3R0b20pLGouc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MoKSsiLCIrIC1vLnRvcCsiKSIpKTtpZihsKXt2YXIgRj1be2tleToiR3JvdXBlZCIsZGlzYWJsZWQ6dC5zdGFja2VkKCl9LHtrZXk6IlN0YWNrZWQiLGRpc2FibGVkOiF0LnN0YWNrZWQoKX1dO3Mud2lkdGgoQygpKS5jb2xvcihbIiM0NDQiLCIjNDQ0IiwiIzQ0NCJdKSxqLnNlbGVjdCgiLm52LWNvbnRyb2xzV3JhcCIpLmRhdHVtKEYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1vLnRvcCsiKSIpLmNhbGwocyl9SC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmxlZnQrIiwiK28udG9wKyIpIiksZCYmai5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitNKyIsMCkiKSx0LmRpc2FibGVkKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSkpLndpZHRoKE0pLmhlaWdodChfKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxmKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZH0pKTt2YXIgST1qLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7SS50cmFuc2l0aW9uKCkuY2FsbCh0KTtpZihoKXtuLnNjYWxlKHcpLnRpY2tzKE0vMTAwKS50aWNrU2l6ZSgtXywwKSxqLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrRS5yYW5nZSgpWzBdKyIpIiksai5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS50cmFuc2l0aW9uKCkuY2FsbChuKTt2YXIgcT1qLnNlbGVjdCgiLm52LXgubnYtYXhpcyA+IGciKS5zZWxlY3RBbGwoImciKTtxLnNlbGVjdEFsbCgibGluZSwgdGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKTtpZihtKXt2YXIgUj1mdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitlKyIsIit0KyIpIn0sVT01LHo9MTc7cS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUigwLG4lMj09MD9VOnopfSk7dmFyIFc9ZDMuc2VsZWN0QWxsKCIubnYteC5udi1heGlzIC5udi13cmFwIGcgZyB0ZXh0IilbMF0ubGVuZ3RoO2ouc2VsZWN0QWxsKCIubnYteC5udi1heGlzIC5udi1heGlzTWF4TWluIHRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFIoMCx0PT09MHx8VyUyIT09MD96OlUpfSl9diYmcS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4gbiVNYXRoLmNlaWwoZVswXS52YWx1ZXMubGVuZ3RoLyhNLzEwMCkpIT09MH0pLnNlbGVjdEFsbCgidGV4dCwgbGluZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSxnJiZxLnNlbGVjdEFsbCgiLnRpY2sgdGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgiK2crIiAwLDApIikuc3R5bGUoInRleHQtYW5jaG9yIixnPjA/InN0YXJ0IjoiZW5kIiksai5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5zZWxlY3RBbGwoImcubnYtYXhpc01heE1pbiB0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDEpfXAmJihyLnNjYWxlKEUpLnRpY2tzKF8vMzYpLnRpY2tTaXplKC1NLDApLGouc2VsZWN0KCIubnYteS5udi1heGlzIikudHJhbnNpdGlvbigpLmNhbGwocikpLGkuZGlzcGF0Y2gub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlKXtTPWUsTi5zdGF0ZUNoYW5nZShTKSxBLnVwZGF0ZSgpfSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKGUsbil7aWYoIWUuZGlzYWJsZWQpcmV0dXJuO0Y9Ri5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9ITAsZX0pLGUuZGlzYWJsZWQ9ITE7c3dpdGNoKGUua2V5KXtjYXNlIkdyb3VwZWQiOnQuc3RhY2tlZCghMSk7YnJlYWs7Y2FzZSJTdGFja2VkIjp0LnN0YWNrZWQoITApfVMuc3RhY2tlZD10LnN0YWNrZWQoKSxOLnN0YXRlQ2hhbmdlKFMpLEEudXBkYXRlKCl9KSxOLm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7eSYmTChlLE8ucGFyZW50Tm9kZSl9KSxOLm9uKCJjaGFuZ2VTdGF0ZSIsZnVuY3Rpb24obil7dHlwZW9mIG4uZGlzYWJsZWQhPSJ1bmRlZmluZWQiJiYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5kaXNhYmxlZD1uLmRpc2FibGVkW3RdfSksUy5kaXNhYmxlZD1uLmRpc2FibGVkKSx0eXBlb2Ygbi5zdGFja2VkIT0idW5kZWZpbmVkIiYmKHQuc3RhY2tlZChuLnN0YWNrZWQpLFMuc3RhY2tlZD1uLnN0YWNrZWQpLEEudXBkYXRlKCl9KX0pLEF9dmFyIHQ9ZS5tb2RlbHMubXVsdGlCYXIoKSxuPWUubW9kZWxzLmF4aXMoKSxyPWUubW9kZWxzLmF4aXMoKSxpPWUubW9kZWxzLmxlZ2VuZCgpLHM9ZS5tb2RlbHMubGVnZW5kKCksbz17dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0OjYwfSx1PW51bGwsYT1udWxsLGY9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxsPSEwLGM9ITAsaD0hMCxwPSEwLGQ9ITEsdj0hMCxtPSExLGc9MCx5PSEwLGI9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK24rIiBvbiAiK3QrIjwvcD4ifSx3LEUsUz17c3RhY2tlZDohMX0seD1udWxsLFQ9Ik5vIERhdGEgQXZhaWxhYmxlLiIsTj1kMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsInN0YXRlQ2hhbmdlIiwiY2hhbmdlU3RhdGUiKSxDPWZ1bmN0aW9uKCl7cmV0dXJuIGw/MTgwOjB9LGs9MjUwO3Quc3RhY2tlZCghMSksbi5vcmllbnQoImJvdHRvbSIpLnRpY2tQYWRkaW5nKDcpLmhpZ2hsaWdodFplcm8oITApLnNob3dNYXhNaW4oITEpLnRpY2tGb3JtYXQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxyLm9yaWVudChkPyJyaWdodCI6ImxlZnQiKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgiLC4xZiIpKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgTD1mdW5jdGlvbihpLHMpe3ZhciBvPWkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9aS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxhPW4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksZj1yLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGw9YihpLnNlcmllcy5rZXksYSxmLGksQSk7ZS50b29sdGlwLnNob3coW28sdV0sbCxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rby5sZWZ0LGUucG9zWzFdK28udG9wXSxOLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe04udG9vbHRpcEhpZGUoZSl9KSxOLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXt5JiZlLnRvb2x0aXAuY2xlYW51cCgpfSksQS5kaXNwYXRjaD1OLEEubXVsdGliYXI9dCxBLmxlZ2VuZD1pLEEueEF4aXM9bixBLnlBeGlzPXIsZDMucmViaW5kKEEsdCwieCIsInkiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsImZvcmNlWCIsImZvcmNlWSIsImNsaXBFZGdlIiwiaWQiLCJzdGFja2VkIiwiZGVsYXkiLCJiYXJDb2xvciIsImdyb3VwU3BhY2luZyIpLEEub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoQSksQS5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8udG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6by50b3Asby5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDpvLnJpZ2h0LG8uYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206by5ib3R0b20sby5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDpvLmxlZnQsQSk6b30sQS53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLEEpOnV9LEEuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUsQSk6YX0sQS5jb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoZiksQSk6Zn0sQS5zaG93Q29udHJvbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxBKTpsfSxBLnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSxBKTpjfSxBLnNob3dYQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLEEpOmh9LEEuc2hvd1lBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUsQSk6cH0sQS5yaWdodEFsaWduWUF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxBKTpkfSxBLnJlZHVjZVhUaWNrcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1lLEEpOnZ9LEEucm90YXRlTGFiZWxzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPWUsQSk6Z30sQS5zdGFnZ2VyTGFiZWxzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUsQSk6bX0sQS50b29sdGlwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUsQSk6Yn0sQS50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLEEpOnl9LEEudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9ZSxBKTpifSxBLnN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPWUsQSk6U30sQS5kZWZhdWx0U3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9ZSxBKTp4fSxBLm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1lLEEpOlR9LEEudHJhbnNpdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPWUsQSk6a30sQX0sZS5tb2RlbHMubXVsdGlCYXJIb3Jpem9udGFsPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE4oZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgaT1uLXQubGVmdC10LnJpZ2h0LGc9ci10LnRvcC10LmJvdHRvbSxOPWQzLnNlbGVjdCh0aGlzKTtwJiYoZT1kMy5sYXlvdXQuc3RhY2soKS5vZmZzZXQoInplcm8iKS52YWx1ZXMoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSkueShhKShlKSksZT1lLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLnZhbHVlcz1lLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VyaWVzPXQsZX0pLGV9KSxwJiZlWzBdLnZhbHVlcy5tYXAoZnVuY3Rpb24odCxuKXt2YXIgcj0wLGk9MDtlLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlc1tuXTt0LnNpemU9TWF0aC5hYnModC55KSx0Lnk8MD8odC55MT1pLXQuc2l6ZSxpLT10LnNpemUpOih0LnkxPXIscis9dC5zaXplKX0pfSk7dmFyIEM9eSYmYj9bXTplLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6dShlLHQpLHk6YShlLHQpLHkwOmUueTAseTE6ZS55MX19KX0pO3MuZG9tYWluKHl8fGQzLm1lcmdlKEMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkpLnJhbmdlQmFuZHMod3x8WzAsZ10sLjEpLG8uZG9tYWluKGJ8fGQzLmV4dGVudChkMy5tZXJnZShDKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHA/ZS55PjA/ZS55MStlLnk6ZS55MTplLnl9KS5jb25jYXQoZikpKSxkJiYhcD9vLnJhbmdlKEV8fFtvLmRvbWFpbigpWzBdPDA/djowLGktKG8uZG9tYWluKClbMV0+MD92OjApXSk6by5yYW5nZShFfHxbMCxpXSkseD14fHxzLFQ9VHx8ZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKG8uZG9tYWluKCkpLnJhbmdlKFtvKDApLG8oMCldKTt2YXIgaz1kMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGliYXJIb3Jpem9udGFsIikuZGF0YShbZV0pLEw9ay5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LW11bHRpYmFySG9yaXpvbnRhbCIpLEE9TC5hcHBlbmQoImRlZnMiKSxPPUwuYXBwZW5kKCJnIiksTT1rLnNlbGVjdCgiZyIpO08uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1ncm91cHMiKSxrLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKTt2YXIgXz1rLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pO18uZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLF8uZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDFlLTYpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDFlLTYpLnJlbW92ZSgpLF8uYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIm52LWdyb3VwIG52LXNlcmllcy0iK3R9KS5jbGFzc2VkKCJob3ZlciIsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaG92ZXJ9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQpfSksXy50cmFuc2l0aW9uKCkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNzUpO3ZhciBEPV8uc2VsZWN0QWxsKCJnLm52LWJhciIpLmRhdGEoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzfSk7RC5leGl0KCkucmVtb3ZlKCk7dmFyIFA9RC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCxuLHIpe3JldHVybiJ0cmFuc2xhdGUoIitUKHA/dC55MDowKSsiLCIrKHA/MDpyKnMucmFuZ2VCYW5kKCkvZS5sZW5ndGgrcyh1KHQsbikpKSsiKSJ9KTtQLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIiwwKS5hdHRyKCJoZWlnaHQiLHMucmFuZ2VCYW5kKCkvKHA/MTplLmxlbmd0aCkpLEQub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSxTLmVsZW1lbnRNb3VzZW92ZXIoe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W28oYSh0LG4pKyhwP3QueTA6MCkpLHModSh0LG4pKStzLnJhbmdlQmFuZCgpKihwP2UubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbih0LG4pe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLFMuZWxlbWVudE1vdXNlb3V0KHt2YWx1ZTphKHQsbikscG9pbnQ6dCxzZXJpZXM6ZVt0LnNlcmllc10scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OnQuc2VyaWVzLGU6ZDMuZXZlbnR9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24odCxuKXtTLmVsZW1lbnRDbGljayh7dmFsdWU6YSh0LG4pLHBvaW50OnQsc2VyaWVzOmVbdC5zZXJpZXNdLHBvczpbcyh1KHQsbikpK3MucmFuZ2VCYW5kKCkqKHA/ZS5sZW5ndGgvMjp0LnNlcmllcysuNSkvZS5sZW5ndGgsbyhhKHQsbikrKHA/dC55MDowKSldLHBvaW50SW5kZXg6bixzZXJpZXNJbmRleDp0LnNlcmllcyxlOmQzLmV2ZW50fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKHQsbil7Uy5lbGVtZW50RGJsQ2xpY2soe3ZhbHVlOmEodCxuKSxwb2ludDp0LHNlcmllczplW3Quc2VyaWVzXSxwb3M6W3ModSh0LG4pKStzLnJhbmdlQmFuZCgpKihwP2UubGVuZ3RoLzI6dC5zZXJpZXMrLjUpL2UubGVuZ3RoLG8oYSh0LG4pKyhwP3QueTA6MCkpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6dC5zZXJpZXMsZTpkMy5ldmVudH0pLGQzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSksUC5hcHBlbmQoInRleHQiKSxkJiYhcD8oRC5zZWxlY3QoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/ImVuZCI6InN0YXJ0In0pLmF0dHIoInkiLHMucmFuZ2VCYW5kKCkvKGUubGVuZ3RoKjIpKS5hdHRyKCJkeSIsIi4zMmVtIikudGV4dChmdW5jdGlvbihlLHQpe3JldHVybiBtKGEoZSx0KSl9KSxELnRyYW5zaXRpb24oKS5zZWxlY3QoInRleHQiKS5hdHRyKCJ4IixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCk8MD8tNDpvKGEoZSx0KSktbygwKSs0fSkpOkQuc2VsZWN0QWxsKCJ0ZXh0IikudGV4dCgiIiksRC5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpPDA/Im52LWJhciBuZWdhdGl2ZSI6Im52LWJhciBwb3NpdGl2ZSJ9KSxjJiYoaHx8KGg9ZS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4hMH0pKSxELnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIGQzLnJnYihjKGUsdCkpLmRhcmtlcihoLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiB0fSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWhbdF19KVtuXSkudG9TdHJpbmcoKX0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZDMucmdiKGMoZSx0KSkuZGFya2VyKGgubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4haFt0XX0pW25dKS50b1N0cmluZygpfSkpLHA/RC50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitvKGUueTEpKyIsIitzKHUoZSx0KSkrIikifSkuc2VsZWN0KCJyZWN0IikuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYWJzKG8oYShlLHQpK2UueTApLW8oZS55MCkpfSkuYXR0cigiaGVpZ2h0IixzLnJhbmdlQmFuZCgpKTpELnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQsbil7cmV0dXJuInRyYW5zbGF0ZSgiKyhhKHQsbik8MD9vKGEodCxuKSk6bygwKSkrIiwiKyh0LnNlcmllcypzLnJhbmdlQmFuZCgpL2UubGVuZ3RoK3ModSh0LG4pKSkrIikifSkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixzLnJhbmdlQmFuZCgpL2UubGVuZ3RoKS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMobyhhKGUsdCkpLW8oMCkpLDEpfSkseD1zLmNvcHkoKSxUPW8uY29weSgpfSksTn12YXIgdD17dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49OTYwLHI9NTAwLGk9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz1kMy5zY2FsZS5vcmRpbmFsKCksbz1kMy5zY2FsZS5saW5lYXIoKSx1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sZj1bMF0sbD1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLGM9bnVsbCxoLHA9ITEsZD0hMSx2PTYwLG09ZDMuZm9ybWF0KCIsLjJmIiksZz0xMjAwLHksYix3LEUsUz1kMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKSx4LFQ7cmV0dXJuIE4uZGlzcGF0Y2g9UyxOLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKE4pLE4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLE4pOnV9LE4ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLE4pOmF9LE4ubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LE4pOnR9LE4ud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxOKTpufSxOLmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLE4pOnJ9LE4ueFNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsTik6c30sTi55U2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZSxOKTpvfSxOLnhEb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9ZSxOKTp5fSxOLnlEb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9ZSxOKTpifSxOLnhSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1lLE4pOnd9LE4ueVJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPWUsTik6RX0sTi5mb3JjZVk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSxOKTpmfSxOLnN0YWNrZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSxOKTpwfSxOLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUudXRpbHMuZ2V0Q29sb3IodCksTik6bH0sTi5iYXJDb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLnV0aWxzLmdldENvbG9yKHQpLE4pOmN9LE4uZGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSxOKTpofSxOLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsTik6aX0sTi5kZWxheT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1lLE4pOmd9LE4uc2hvd1ZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lLE4pOmR9LE4udmFsdWVGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSxOKTptfSxOLnZhbHVlUGFkZGluZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1lLE4pOnZ9LE59LGUubW9kZWxzLm11bHRpQmFySG9yaXpvbnRhbENoYXJ0PWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFQoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihoKXt2YXIgZD1kMy5zZWxlY3QodGhpcyksTj10aGlzLEM9KHV8fHBhcnNlSW50KGQuc3R5bGUoIndpZHRoIikpfHw5NjApLW8ubGVmdC1vLnJpZ2h0LGs9KGF8fHBhcnNlSW50KGQuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbTtULnVwZGF0ZT1mdW5jdGlvbigpe2QudHJhbnNpdGlvbigpLmR1cmF0aW9uKFMpLmNhbGwoVCl9LFQuY29udGFpbmVyPXRoaXMsZy5kaXNhYmxlZD1oLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZigheSl7dmFyIEw7eT17fTtmb3IoTCBpbiBnKWdbTF1pbnN0YW5jZW9mIEFycmF5P3lbTF09Z1tMXS5zbGljZSgwKTp5W0xdPWdbTF19aWYoIWh8fCFoLmxlbmd0aHx8IWguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBBPWQuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbYl0pO3JldHVybiBBLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxBLmF0dHIoIngiLG8ubGVmdCtDLzIpLmF0dHIoInkiLG8udG9wK2svMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLFR9ZC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSx2PXQueFNjYWxlKCksbT10LnlTY2FsZSgpO3ZhciBPPWQuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtbXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5kYXRhKFtoXSksTT1PLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtbXVsdGlCYXJIb3Jpem9udGFsQ2hhcnQiKS5hcHBlbmQoImciKSxfPU8uc2VsZWN0KCJnIik7TS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYmFyc1dyYXAiKSxNLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLE0uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxjJiYoaS53aWR0aChDLUUoKSksdC5iYXJDb2xvcigpJiZoLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmNvbG9yPWQzLnJnYigiI2NjYyIpLmRhcmtlcih0KjEuNSkudG9TdHJpbmcoKX0pLF8uc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGgpLmNhbGwoaSksby50b3AhPWkuaGVpZ2h0KCkmJihvLnRvcD1pLmhlaWdodCgpLGs9KGF8fHBhcnNlSW50KGQuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1vLnRvcC1vLmJvdHRvbSksXy5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrRSgpKyIsIisgLW8udG9wKyIpIikpO2lmKGwpe3ZhciBEPVt7a2V5OiJHcm91cGVkIixkaXNhYmxlZDp0LnN0YWNrZWQoKX0se2tleToiU3RhY2tlZCIsZGlzYWJsZWQ6IXQuc3RhY2tlZCgpfV07cy53aWR0aChFKCkpLmNvbG9yKFsiIzQ0NCIsIiM0NDQiLCIjNDQ0Il0pLF8uc2VsZWN0KCIubnYtY29udHJvbHNXcmFwIikuZGF0dW0oRCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIisgLW8udG9wKyIpIikuY2FsbChzKX1PLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28ubGVmdCsiLCIrby50b3ArIikiKSx0LmRpc2FibGVkKGgubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkfSkpLndpZHRoKEMpLmhlaWdodChrKS5jb2xvcihoLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxmKGUsdCl9KS5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4haFt0XS5kaXNhYmxlZH0pKTt2YXIgUD1fLnNlbGVjdCgiLm52LWJhcnNXcmFwIikuZGF0dW0oaC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSk7UC50cmFuc2l0aW9uKCkuY2FsbCh0KSxuLnNjYWxlKHYpLnRpY2tzKGsvMjQpLnRpY2tTaXplKC1DLDApLF8uc2VsZWN0KCIubnYteC5udi1heGlzIikudHJhbnNpdGlvbigpLmNhbGwobik7dmFyIEg9Xy5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5zZWxlY3RBbGwoImciKTtILnNlbGVjdEFsbCgibGluZSwgdGV4dCIpLnN0eWxlKCJvcGFjaXR5IiwxKSxyLnNjYWxlKG0pLnRpY2tzKEMvMTAwKS50aWNrU2l6ZSgtaywwKSxfLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIraysiKSIpLF8uc2VsZWN0KCIubnYteS5udi1heGlzIikudHJhbnNpdGlvbigpLmNhbGwociksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe2c9ZSx3LnN0YXRlQ2hhbmdlKGcpLFQudXBkYXRlKCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxuKXtpZighZS5kaXNhYmxlZClyZXR1cm47RD1ELm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD0hMCxlfSksZS5kaXNhYmxlZD0hMTtzd2l0Y2goZS5rZXkpe2Nhc2UiR3JvdXBlZCI6dC5zdGFja2VkKCExKTticmVhaztjYXNlIlN0YWNrZWQiOnQuc3RhY2tlZCghMCl9Zy5zdGFja2VkPXQuc3RhY2tlZCgpLHcuc3RhdGVDaGFuZ2UoZyksVC51cGRhdGUoKX0pLHcub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtwJiZ4KGUsTi5wYXJlbnROb2RlKX0pLHcub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihuKXt0eXBlb2Ygbi5kaXNhYmxlZCE9InVuZGVmaW5lZCImJihoLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmRpc2FibGVkPW4uZGlzYWJsZWRbdF19KSxnLmRpc2FibGVkPW4uZGlzYWJsZWQpLHR5cGVvZiBuLnN0YWNrZWQhPSJ1bmRlZmluZWQiJiYodC5zdGFja2VkKG4uc3RhY2tlZCksZy5zdGFja2VkPW4uc3RhY2tlZCksZS5jYWxsKFQpfSl9KSxUfXZhciB0PWUubW9kZWxzLm11bHRpQmFySG9yaXpvbnRhbCgpLG49ZS5tb2RlbHMuYXhpcygpLHI9ZS5tb2RlbHMuYXhpcygpLGk9ZS5tb2RlbHMubGVnZW5kKCkuaGVpZ2h0KDMwKSxzPWUubW9kZWxzLmxlZ2VuZCgpLmhlaWdodCgzMCksbz17dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0OjYwfSx1PW51bGwsYT1udWxsLGY9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxsPSEwLGM9ITAsaD0hMSxwPSEwLGQ9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4iPGgzPiIrZSsiIC0gIit0KyI8L2gzPiIrIjxwPiIrbisiPC9wPiJ9LHYsbSxnPXtzdGFja2VkOmh9LHk9bnVsbCxiPSJObyBEYXRhIEF2YWlsYWJsZS4iLHc9ZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiLCJzdGF0ZUNoYW5nZSIsImNoYW5nZVN0YXRlIiksRT1mdW5jdGlvbigpe3JldHVybiBsPzE4MDowfSxTPTI1MDt0LnN0YWNrZWQoaCksbi5vcmllbnQoImxlZnQiKS50aWNrUGFkZGluZyg1KS5oaWdobGlnaHRaZXJvKCExKS5zaG93TWF4TWluKCExKS50aWNrRm9ybWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksci5vcmllbnQoImJvdHRvbSIpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCIsLjFmIikpLHMudXBkYXRlU3RhdGUoITEpO3ZhciB4PWZ1bmN0aW9uKGkscyl7dmFyIG89aS5wb3NbMF0rKHMub2Zmc2V0TGVmdHx8MCksdT1pLnBvc1sxXSsocy5vZmZzZXRUb3B8fDApLGE9bi50aWNrRm9ybWF0KCkodC54KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxmPXIudGlja0Zvcm1hdCgpKHQueSgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbD1kKGkuc2VyaWVzLmtleSxhLGYsaSxUKTtlLnRvb2x0aXAuc2hvdyhbbyx1XSxsLGkudmFsdWU8MD8iZSI6InciLG51bGwscyl9O3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPVtlLnBvc1swXStvLmxlZnQsZS5wb3NbMV0rby50b3BdLHcudG9vbHRpcFNob3coZSl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7dy50b29sdGlwSGlkZShlKX0pLHcub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe3AmJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxULmRpc3BhdGNoPXcsVC5tdWx0aWJhcj10LFQubGVnZW5kPWksVC54QXhpcz1uLFQueUF4aXM9cixkMy5yZWJpbmQoVCx0LCJ4IiwieSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiY2xpcEVkZ2UiLCJpZCIsImRlbGF5Iiwic2hvd1ZhbHVlcyIsInZhbHVlRm9ybWF0Iiwic3RhY2tlZCIsImJhckNvbG9yIiksVC5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChUKSxULm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDpvLnRvcCxvLnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0Om8ucmlnaHQsby5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTpvLmJvdHRvbSxvLmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0Om8ubGVmdCxUKTpvfSxULndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsVCk6dX0sVC5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSxUKTphfSxULmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihmKSxUKTpmfSxULnNob3dDb250cm9scz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLFQpOmx9LFQuc2hvd0xlZ2VuZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLFQpOmN9LFQudG9vbHRpcD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1lLFQpOmR9LFQudG9vbHRpcHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSxUKTpwfSxULnRvb2x0aXBDb250ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWUsVCk6ZH0sVC5zdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1lLFQpOmd9LFQuZGVmYXVsdFN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PWUsVCk6eX0sVC5ub0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9ZSxUKTpifSxULnRyYW5zaXRpb25EdXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1lLFQpOlN9LFR9LGUubW9kZWxzLm11bHRpQ2hhcnQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB1PWQzLnNlbGVjdCh0aGlzKSxmPXRoaXM7Qy51cGRhdGU9ZnVuY3Rpb24oKXt1LnRyYW5zaXRpb24oKS5jYWxsKEMpfSxDLmNvbnRhaW5lcj10aGlzO3ZhciBrPShyfHxwYXJzZUludCh1LnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS10LmxlZnQtdC5yaWdodCxMPShpfHxwYXJzZUludCh1LnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdC50b3AtdC5ib3R0b20sQT1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBlPT0ibGluZSImJmUueUF4aXM9PTF9KSxPPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9PSJsaW5lIiYmZS55QXhpcz09Mn0pLE09ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUudHlwZT09ImJhciImJmUueUF4aXM9PTF9KSxfPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9PSJiYXIiJiZlLnlBeGlzPT0yfSksRD1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZCYmZS50eXBlPT0iYXJlYSImJmUueUF4aXM9PTF9KSxQPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiZlLnR5cGU9PSJhcmVhIiYmZS55QXhpcz09Mn0pLEg9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUueUF4aXM9PTF9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OmUueCx5OmUueX19KX0pLEI9ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWQmJmUueUF4aXM9PTJ9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt4OmUueCx5OmUueX19KX0pO2EuZG9tYWluKGQzLmV4dGVudChkMy5tZXJnZShILmNvbmNhdChCKSksZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0pKS5yYW5nZShbMCxrXSk7dmFyIGo9dS5zZWxlY3RBbGwoImcud3JhcC5tdWx0aUNoYXJ0IikuZGF0YShbZV0pLEY9ai5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwid3JhcCBudmQzIG11bHRpQ2hhcnQiKS5hcHBlbmQoImciKTtGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwieCBheGlzIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInkxIGF4aXMiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwieTIgYXhpcyIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lczFXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVzMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYmFyczFXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJhcnMyV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGFjazFXcmFwIiksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YWNrMldyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kV3JhcCIpO3ZhciBJPWouc2VsZWN0KCJnIik7cyYmKHgud2lkdGgoay8yKSxJLnNlbGVjdCgiLmxlZ2VuZFdyYXAiKS5kYXR1bShlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5vcmlnaW5hbEtleT1lLm9yaWdpbmFsS2V5PT09dW5kZWZpbmVkP2Uua2V5OmUub3JpZ2luYWxLZXksZS5rZXk9ZS5vcmlnaW5hbEtleSsoZS55QXhpcz09MT8iIjoiIChyaWdodCBheGlzKSIpLGV9KSkuY2FsbCh4KSx0LnRvcCE9eC5oZWlnaHQoKSYmKHQudG9wPXguaGVpZ2h0KCksTD0oaXx8cGFyc2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXQudG9wLXQuYm90dG9tKSxJLnNlbGVjdCgiLmxlZ2VuZFdyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitrLzIrIiwiKyAtdC50b3ArIikiKSksZC53aWR0aChrKS5oZWlnaHQoTCkuaW50ZXJwb2xhdGUoIm1vbm90b25lIikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPT0xJiZlW25dLnR5cGU9PSJsaW5lIn0pKSx2LndpZHRoKGspLmhlaWdodChMKS5pbnRlcnBvbGF0ZSgibW9ub3RvbmUiKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9PTImJmVbbl0udHlwZT09ImxpbmUifSkpLG0ud2lkdGgoaykuaGVpZ2h0KEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fG5bdCVuLmxlbmd0aF19KS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4hZVtuXS5kaXNhYmxlZCYmZVtuXS55QXhpcz09MSYmZVtuXS50eXBlPT0iYmFyIn0pKSxnLndpZHRoKGspLmhlaWdodChMKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9PTImJmVbbl0udHlwZT09ImJhciJ9KSkseS53aWR0aChrKS5oZWlnaHQoTCkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8blt0JW4ubGVuZ3RoXX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkJiZlW25dLnlBeGlzPT0xJiZlW25dLnR5cGU9PSJhcmVhIn0pKSxiLndpZHRoKGspLmhlaWdodChMKS5jb2xvcihlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfHxuW3Qlbi5sZW5ndGhdfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWQmJmVbbl0ueUF4aXM9PTImJmVbbl0udHlwZT09ImFyZWEifSkpLEkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC5sZWZ0KyIsIit0LnRvcCsiKSIpO3ZhciBxPUkuc2VsZWN0KCIubGluZXMxV3JhcCIpLmRhdHVtKEEpLFI9SS5zZWxlY3QoIi5iYXJzMVdyYXAiKS5kYXR1bShNKSxVPUkuc2VsZWN0KCIuc3RhY2sxV3JhcCIpLmRhdHVtKEQpLHo9SS5zZWxlY3QoIi5saW5lczJXcmFwIikuZGF0dW0oTyksVz1JLnNlbGVjdCgiLmJhcnMyV3JhcCIpLmRhdHVtKF8pLFg9SS5zZWxlY3QoIi5zdGFjazJXcmFwIikuZGF0dW0oUCksVj1ELmxlbmd0aD9ELm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm57eDplLngseTplLnkrdFtuXS55fX0pfSkuY29uY2F0KFt7eDowLHk6MH1dKTpbXSwkPVAubGVuZ3RoP1AubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChmdW5jdGlvbihlLG4pe3JldHVybnt4OmUueCx5OmUueSt0W25dLnl9fSl9KS5jb25jYXQoW3t4OjAseTowfV0pOltdO2guZG9tYWluKGx8fGQzLmV4dGVudChkMy5tZXJnZShIKS5jb25jYXQoViksZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pKS5yYW5nZShbMCxMXSkscC5kb21haW4oY3x8ZDMuZXh0ZW50KGQzLm1lcmdlKEIpLmNvbmNhdCgkKSxmdW5jdGlvbihlKXtyZXR1cm4gZS55fSkpLnJhbmdlKFswLExdKSxkLnlEb21haW4oaC5kb21haW4oKSksbS55RG9tYWluKGguZG9tYWluKCkpLHkueURvbWFpbihoLmRvbWFpbigpKSx2LnlEb21haW4ocC5kb21haW4oKSksZy55RG9tYWluKHAuZG9tYWluKCkpLGIueURvbWFpbihwLmRvbWFpbigpKSxELmxlbmd0aCYmZDMudHJhbnNpdGlvbihVKS5jYWxsKHkpLFAubGVuZ3RoJiZkMy50cmFuc2l0aW9uKFgpLmNhbGwoYiksTS5sZW5ndGgmJmQzLnRyYW5zaXRpb24oUikuY2FsbChtKSxfLmxlbmd0aCYmZDMudHJhbnNpdGlvbihXKS5jYWxsKGcpLEEubGVuZ3RoJiZkMy50cmFuc2l0aW9uKHEpLmNhbGwoZCksTy5sZW5ndGgmJmQzLnRyYW5zaXRpb24oeikuY2FsbCh2KSx3LnRpY2tzKGsvMTAwKS50aWNrU2l6ZSgtTCwwKSxJLnNlbGVjdCgiLnguYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTCsiKSIpLGQzLnRyYW5zaXRpb24oSS5zZWxlY3QoIi54LmF4aXMiKSkuY2FsbCh3KSxFLnRpY2tzKEwvMzYpLnRpY2tTaXplKC1rLDApLGQzLnRyYW5zaXRpb24oSS5zZWxlY3QoIi55MS5heGlzIikpLmNhbGwoRSksUy50aWNrcyhMLzM2KS50aWNrU2l6ZSgtaywwKSxkMy50cmFuc2l0aW9uKEkuc2VsZWN0KCIueTIuYXhpcyIpKS5jYWxsKFMpLEkuc2VsZWN0KCIueTIuYXhpcyIpLnN0eWxlKCJvcGFjaXR5IixCLmxlbmd0aD8xOjApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2EucmFuZ2UoKVsxXSsiLDApIikseC5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe0MudXBkYXRlKCl9KSxULm9uKCJ0b29sdGlwU2hvdyIsZnVuY3Rpb24oZSl7byYmTihlLGYucGFyZW50Tm9kZSl9KX0pLEN9dmFyIHQ9e3RvcDozMCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo2MH0sbj1kMy5zY2FsZS5jYXRlZ29yeTIwKCkucmFuZ2UoKSxyPW51bGwsaT1udWxsLHM9ITAsbz0hMCx1PWZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgYXQgIit0KyI8L3A+In0sYSxmLGwsYyxhPWQzLnNjYWxlLmxpbmVhcigpLGg9ZDMuc2NhbGUubGluZWFyKCkscD1kMy5zY2FsZS5saW5lYXIoKSxkPWUubW9kZWxzLmxpbmUoKS55U2NhbGUoaCksdj1lLm1vZGVscy5saW5lKCkueVNjYWxlKHApLG09ZS5tb2RlbHMubXVsdGlCYXIoKS5zdGFja2VkKCExKS55U2NhbGUoaCksZz1lLm1vZGVscy5tdWx0aUJhcigpLnN0YWNrZWQoITEpLnlTY2FsZShwKSx5PWUubW9kZWxzLnN0YWNrZWRBcmVhKCkueVNjYWxlKGgpLGI9ZS5tb2RlbHMuc3RhY2tlZEFyZWEoKS55U2NhbGUocCksdz1lLm1vZGVscy5heGlzKCkuc2NhbGUoYSkub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZyg1KSxFPWUubW9kZWxzLmF4aXMoKS5zY2FsZShoKS5vcmllbnQoImxlZnQiKSxTPWUubW9kZWxzLmF4aXMoKS5zY2FsZShwKS5vcmllbnQoInJpZ2h0IikseD1lLm1vZGVscy5sZWdlbmQoKS5oZWlnaHQoMzApLFQ9ZDMuZGlzcGF0Y2goInRvb2x0aXBTaG93IiwidG9vbHRpcEhpZGUiKSxOPWZ1bmN0aW9uKHQsbil7dmFyIHI9dC5wb3NbMF0rKG4ub2Zmc2V0TGVmdHx8MCksaT10LnBvc1sxXSsobi5vZmZzZXRUb3B8fDApLHM9dy50aWNrRm9ybWF0KCkoZC54KCkodC5wb2ludCx0LnBvaW50SW5kZXgpKSxvPSh0LnNlcmllcy55QXhpcz09Mj9TOkUpLnRpY2tGb3JtYXQoKShkLnkoKSh0LnBvaW50LHQucG9pbnRJbmRleCkpLGE9dSh0LnNlcmllcy5rZXkscyxvLHQsQyk7ZS50b29sdGlwLnNob3coW3IsaV0sYSx1bmRlZmluZWQsdW5kZWZpbmVkLG4ub2Zmc2V0UGFyZW50KX07cmV0dXJuIGQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9W2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLGQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksdi5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxtLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPVtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSxtLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLGcuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9W2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLGcuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSkseS5kaXNwYXRjaC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2lmKCFNYXRoLnJvdW5kKHkueSgpKGUucG9pbnQpKjEwMCkpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkMy5zZWxlY3RBbGwoIi5wb2ludC5ob3ZlciIpLmNsYXNzZWQoImhvdmVyIiwhMSl9LDApLCExO2UucG9zPVtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSx5LmRpc3BhdGNoLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLGIuZGlzcGF0Y2gub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtpZighTWF0aC5yb3VuZChiLnkoKShlLnBvaW50KSoxMDApKXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZDMuc2VsZWN0QWxsKCIucG9pbnQuaG92ZXIiKS5jbGFzc2VkKCJob3ZlciIsITEpfSwwKSwhMTtlLnBvcz1bZS5wb3NbMF0rdC5sZWZ0LGUucG9zWzFdK3QudG9wXSxULnRvb2x0aXBTaG93KGUpfSksYi5kaXNwYXRjaC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKGUpe1QudG9vbHRpcEhpZGUoZSl9KSxkLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2UucG9zPVtlLnBvc1swXSt0LmxlZnQsZS5wb3NbMV0rdC50b3BdLFQudG9vbHRpcFNob3coZSl9KSxkLmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7VC50b29sdGlwSGlkZShlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9W2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sVC50b29sdGlwU2hvdyhlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtULnRvb2x0aXBIaWRlKGUpfSksVC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7byYmZS50b29sdGlwLmNsZWFudXAoKX0pLEMuZGlzcGF0Y2g9VCxDLmxpbmVzMT1kLEMubGluZXMyPXYsQy5iYXJzMT1tLEMuYmFyczI9ZyxDLnN0YWNrMT15LEMuc3RhY2syPWIsQy54QXhpcz13LEMueUF4aXMxPUUsQy55QXhpczI9UyxDLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEMpLEMueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZ2V0WD1lLGQueChlKSxtLngoZSksQyk6Z2V0WH0sQy55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnZXRZPWUsZC55KGUpLG0ueShlKSxDKTpnZXRZfSxDLnlEb21haW4xPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsQyk6bH0sQy55RG9tYWluMj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLEMpOmN9LEMubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsQyk6dH0sQy53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLEMpOnJ9LEMuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsQyk6aX0sQy5jb2xvcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHguY29sb3IoZSksQyk6bn0sQy5zaG93TGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsQyk6c30sQy50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLEMpOm99LEMudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ZSxDKTp1fSxDfSxlLm1vZGVscy5vaGxjQmFyPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXt2YXIgZz1uLXQubGVmdC10LnJpZ2h0LHg9ci10LnRvcC10LmJvdHRvbSxUPWQzLnNlbGVjdCh0aGlzKTtzLmRvbWFpbih5fHxkMy5leHRlbnQoZVswXS52YWx1ZXMubWFwKHUpLmNvbmNhdChwKSkpLHY/cy5yYW5nZSh3fHxbZyouNS9lWzBdLnZhbHVlcy5sZW5ndGgsZyooZVswXS52YWx1ZXMubGVuZ3RoLS41KS9lWzBdLnZhbHVlcy5sZW5ndGhdKTpzLnJhbmdlKHd8fFswLGddKSxvLmRvbWFpbihifHxbZDMubWluKGVbMF0udmFsdWVzLm1hcChoKS5jb25jYXQoZCkpLGQzLm1heChlWzBdLnZhbHVlcy5tYXAoYykuY29uY2F0KGQpKV0pLnJhbmdlKEV8fFt4LDBdKTtpZihzLmRvbWFpbigpWzBdPT09cy5kb21haW4oKVsxXXx8by5kb21haW4oKVswXT09PW8uZG9tYWluKClbMV0pc2luZ2xlUG9pbnQ9ITA7cy5kb21haW4oKVswXT09PXMuZG9tYWluKClbMV0mJihzLmRvbWFpbigpWzBdP3MuZG9tYWluKFtzLmRvbWFpbigpWzBdLXMuZG9tYWluKClbMF0qLjAxLHMuZG9tYWluKClbMV0rcy5kb21haW4oKVsxXSouMDFdKTpzLmRvbWFpbihbLTEsMV0pKSxvLmRvbWFpbigpWzBdPT09by5kb21haW4oKVsxXSYmKG8uZG9tYWluKClbMF0/by5kb21haW4oW28uZG9tYWluKClbMF0rby5kb21haW4oKVswXSouMDEsby5kb21haW4oKVsxXS1vLmRvbWFpbigpWzFdKi4wMV0pOm8uZG9tYWluKFstMSwxXSkpO3ZhciBOPWQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1vaGxjQmFyIikuZGF0YShbZVswXS52YWx1ZXNdKSxDPU4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1vaGxjQmFyIiksaz1DLmFwcGVuZCgiZGVmcyIpLEw9Qy5hcHBlbmQoImciKSxBPU4uc2VsZWN0KCJnIik7TC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXRpY2tzIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIiksVC5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7Uy5jaGFydENsaWNrKHtkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6aX0pfSksay5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJudi1jaGFydC1jbGlwLXBhdGgtIitpKS5hcHBlbmQoInJlY3QiKSxOLnNlbGVjdCgiI252LWNoYXJ0LWNsaXAtcGF0aC0iK2krIiByZWN0IikuYXR0cigid2lkdGgiLGcpLmF0dHIoImhlaWdodCIseCksQS5hdHRyKCJjbGlwLXBhdGgiLG0/InVybCgjbnYtY2hhcnQtY2xpcC1wYXRoLSIraSsiKSI6IiIpO3ZhciBPPU4uc2VsZWN0KCIubnYtdGlja3MiKS5zZWxlY3RBbGwoIi5udi10aWNrIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0pO08uZXhpdCgpLnJlbW92ZSgpO3ZhciBNPU8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0LG4pe3JldHVybihmKGUsdCk+bChlLHQpPyJudi10aWNrIG5lZ2F0aXZlIjoibnYtdGljayBwb3NpdGl2ZSIpKyIgbnYtdGljay0iK24rIi0iK3R9KS5hdHRyKCJkIixmdW5jdGlvbih0LG4pe3ZhciByPWcvZVswXS52YWx1ZXMubGVuZ3RoKi45O3JldHVybiJtMCwwbDAsIisobyhmKHQsbikpLW8oYyh0LG4pKSkrImwiKyAtci8yKyIsMGwiK3IvMisiLDBsMCwiKyhvKGgodCxuKSktbyhmKHQsbikpKSsibDAsIisobyhsKHQsbikpLW8oaCh0LG4pKSkrImwiK3IvMisiLDBsIisgLXIvMisiLDB6In0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrcyh1KGUsdCkpKyIsIitvKGMoZSx0KSkrIikifSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24odCxuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSxTLmVsZW1lbnRNb3VzZW92ZXIoe3BvaW50OnQsc2VyaWVzOmVbMF0scG9zOltzKHUodCxuKSksbyhhKHQsbikpXSxwb2ludEluZGV4Om4sc2VyaWVzSW5kZXg6MCxlOmQzLmV2ZW50fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKHQsbil7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSksUy5lbGVtZW50TW91c2VvdXQoe3BvaW50OnQsc2VyaWVzOmVbMF0scG9pbnRJbmRleDpuLHNlcmllc0luZGV4OjAsZTpkMy5ldmVudH0pfSkub24oImNsaWNrIixmdW5jdGlvbihlLHQpe1MuZWxlbWVudENsaWNrKHt2YWx1ZTphKGUsdCksZGF0YTplLGluZGV4OnQscG9zOltzKHUoZSx0KSksbyhhKGUsdCkpXSxlOmQzLmV2ZW50LGlkOml9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkYmxjbGljayIsZnVuY3Rpb24oZSx0KXtTLmVsZW1lbnREYmxDbGljayh7dmFsdWU6YShlLHQpLGRhdGE6ZSxpbmRleDp0LHBvczpbcyh1KGUsdCkpLG8oYShlLHQpKV0sZTpkMy5ldmVudCxpZDppfSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KTtPLmF0dHIoImNsYXNzIixmdW5jdGlvbihlLHQsbil7cmV0dXJuKGYoZSx0KT5sKGUsdCk/Im52LXRpY2sgbmVnYXRpdmUiOiJudi10aWNrIHBvc2l0aXZlIikrIiBudi10aWNrLSIrbisiLSIrdH0pLGQzLnRyYW5zaXRpb24oTykuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiJ0cmFuc2xhdGUoIitzKHUoZSx0KSkrIiwiK28oYyhlLHQpKSsiKSJ9KS5hdHRyKCJkIixmdW5jdGlvbih0LG4pe3ZhciByPWcvZVswXS52YWx1ZXMubGVuZ3RoKi45O3JldHVybiJtMCwwbDAsIisobyhmKHQsbikpLW8oYyh0LG4pKSkrImwiKyAtci8yKyIsMGwiK3IvMisiLDBsMCwiKyhvKGgodCxuKSktbyhmKHQsbikpKSsibDAsIisobyhsKHQsbikpLW8oaCh0LG4pKSkrImwiK3IvMisiLDBsIisgLXIvMisiLDB6In0pfSkseH12YXIgdD17dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49OTYwLHI9NTAwLGk9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCkscz1kMy5zY2FsZS5saW5lYXIoKSxvPWQzLnNjYWxlLmxpbmVhcigpLHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0sYT1mdW5jdGlvbihlKXtyZXR1cm4gZS55fSxmPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9wZW59LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xvc2V9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGlnaH0saD1mdW5jdGlvbihlKXtyZXR1cm4gZS5sb3d9LHA9W10sZD1bXSx2PSExLG09ITAsZz1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLHksYix3LEUsUz1kMy5kaXNwYXRjaCgiY2hhcnRDbGljayIsImVsZW1lbnRDbGljayIsImVsZW1lbnREYmxDbGljayIsImVsZW1lbnRNb3VzZW92ZXIiLCJlbGVtZW50TW91c2VvdXQiKTtyZXR1cm4geC5kaXNwYXRjaD1TLHgub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoeCkseC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUseCk6dX0seC55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWUseCk6YX0seC5vcGVuPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUseCk6Zn0seC5jbG9zZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLHgpOmx9LHguaGlnaD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLHgpOmN9LHgubG93PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPWUseCk6aH0seC5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQseCk6dH0seC53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHgpOm59LHguaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUseCk6cn0seC54U2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSx4KTpzfSx4LnlTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLHgpOm99LHgueERvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLHgpOnl9LHgueURvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1lLHgpOmJ9LHgueFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PWUseCk6d30seC55UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ZSx4KTpFfSx4LmZvcmNlWD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLHgpOnB9LHguZm9yY2VZPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWUseCk6ZH0seC5wYWREYXRhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUseCk6dn0seC5jbGlwRWRnZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1lLHgpOm19LHguY29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ZS51dGlscy5nZXRDb2xvcih0KSx4KTpnfSx4LmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUseCk6aX0seH0sZS5tb2RlbHMucGllPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBQKGUpe3ZhciB0PShlLnN0YXJ0QW5nbGUrZS5lbmRBbmdsZSkqOTAvTWF0aC5QSS05MDtyZXR1cm4gdD45MD90LTE4MDp0fWZ1bmN0aW9uIEgoZSl7ZS5lbmRBbmdsZT1pc05hTihlLmVuZEFuZ2xlKT8wOmUuZW5kQW5nbGUsZS5zdGFydEFuZ2xlPWlzTmFOKGUuc3RhcnRBbmdsZSk/MDplLnN0YXJ0QW5nbGUsdnx8KGUuaW5uZXJSYWRpdXM9MCk7dmFyIHQ9ZDMuaW50ZXJwb2xhdGUodGhpcy5fY3VycmVudCxlKTtyZXR1cm4gdGhpcy5fY3VycmVudD10KDApLGZ1bmN0aW9uKAplKXtyZXR1cm4gTCh0KGUpKX19ZnVuY3Rpb24gQihlKXtlLmlubmVyUmFkaXVzPTA7dmFyIHQ9ZDMuaW50ZXJwb2xhdGUoe3N0YXJ0QW5nbGU6MCxlbmRBbmdsZTowfSxlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEwodChlKSl9fXZhciBvPW4tdC5sZWZ0LXQucmlnaHQsZj1yLXQudG9wLXQuYm90dG9tLEU9TWF0aC5taW4obyxmKS8yLFM9RS1FLzUseD1kMy5zZWxlY3QodGhpcyksVD14LnNlbGVjdEFsbCgiLm52LXdyYXAubnYtcGllIikuZGF0YShlKSxOPVQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1waWUgbnYtY2hhcnQtIit1KSxDPU4uYXBwZW5kKCJnIiksaz1ULnNlbGVjdCgiZyIpO0MuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1waWUiKSxULmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSxrLnNlbGVjdCgiLm52LXBpZSIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28vMisiLCIrZi8yKyIpIikseC5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7dy5jaGFydENsaWNrKHtkYXRhOmUsaW5kZXg6dCxwb3M6ZDMuZXZlbnQsaWQ6dX0pfSk7dmFyIEw9ZDMuc3ZnLmFyYygpLm91dGVyUmFkaXVzKFMpO2cmJkwuc3RhcnRBbmdsZShnKSx5JiZMLmVuZEFuZ2xlKHkpLHYmJkwuaW5uZXJSYWRpdXMoRSpiKTt2YXIgQT1kMy5sYXlvdXQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD8wOnMoZSl9KSxPPVQuc2VsZWN0KCIubnYtcGllIikuc2VsZWN0QWxsKCIubnYtc2xpY2UiKS5kYXRhKEEpO08uZXhpdCgpLnJlbW92ZSgpO3ZhciBNPU8uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNsaWNlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiaG92ZXIiLCEwKSx3LmVsZW1lbnRNb3VzZW92ZXIoe2xhYmVsOmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhLHBvaW50SW5kZXg6dCxwb3M6W2QzLmV2ZW50LnBhZ2VYLGQzLmV2ZW50LnBhZ2VZXSxpZDp1fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSksdy5lbGVtZW50TW91c2VvdXQoe2xhYmVsOmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhLGluZGV4OnQsaWQ6dX0pfSkub24oImNsaWNrIixmdW5jdGlvbihlLHQpe3cuZWxlbWVudENsaWNrKHtsYWJlbDppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBvaW50OmUuZGF0YSxpbmRleDp0LHBvczpkMy5ldmVudCxpZDp1fSksZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKGUsdCl7dy5lbGVtZW50RGJsQ2xpY2soe2xhYmVsOmkoZS5kYXRhKSx2YWx1ZTpzKGUuZGF0YSkscG9pbnQ6ZS5kYXRhLGluZGV4OnQscG9zOmQzLmV2ZW50LGlkOnV9KSxkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pO08uYXR0cigiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQpfSkuYXR0cigic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCl9KTt2YXIgXz1NLmFwcGVuZCgicGF0aCIpLmVhY2goZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudD1lfSk7ZDMudHJhbnNpdGlvbihPLnNlbGVjdCgicGF0aCIpKS5hdHRyKCJkIixMKS5hdHRyVHdlZW4oImQiLEgpO2lmKGwpe3ZhciBEPWQzLnN2Zy5hcmMoKS5pbm5lclJhZGl1cygwKTtjJiYoRD1MKSxoJiYoRD1kMy5zdmcuYXJjKCkub3V0ZXJSYWRpdXMoTC5vdXRlclJhZGl1cygpKSksTS5hcHBlbmQoImciKS5jbGFzc2VkKCJudi1sYWJlbCIsITApLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1kMy5zZWxlY3QodGhpcyk7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe2lmKG0pe2Uub3V0ZXJSYWRpdXM9UysxMCxlLmlubmVyUmFkaXVzPVMrMTU7dmFyIHQ9KGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKS8yKigxODAvTWF0aC5QSSk7cmV0dXJuKGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKS8yPE1hdGguUEk/dC09OTA6dCs9OTAsInRyYW5zbGF0ZSgiK0QuY2VudHJvaWQoZSkrIikgcm90YXRlKCIrdCsiKSJ9cmV0dXJuIGUub3V0ZXJSYWRpdXM9RSsxMCxlLmlubmVyUmFkaXVzPUUrMTUsInRyYW5zbGF0ZSgiK0QuY2VudHJvaWQoZSkrIikifSksbi5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiI2ZmZiIpLnN0eWxlKCJmaWxsIiwiI2ZmZiIpLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMyksbi5hcHBlbmQoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLG0/KGUuc3RhcnRBbmdsZStlLmVuZEFuZ2xlKS8yPE1hdGguUEk/InN0YXJ0IjoiZW5kIjoibWlkZGxlIikuc3R5bGUoImZpbGwiLCIjMDAwIil9KSxPLnNlbGVjdCgiLm52LWxhYmVsIikudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSl7aWYobSl7ZS5vdXRlclJhZGl1cz1TKzEwLGUuaW5uZXJSYWRpdXM9UysxNTt2YXIgdD0oZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzIqKDE4MC9NYXRoLlBJKTtyZXR1cm4oZS5zdGFydEFuZ2xlK2UuZW5kQW5nbGUpLzI8TWF0aC5QST90LT05MDp0Kz05MCwidHJhbnNsYXRlKCIrRC5jZW50cm9pZChlKSsiKSByb3RhdGUoIit0KyIpIn1yZXR1cm4gZS5vdXRlclJhZGl1cz1FKzEwLGUuaW5uZXJSYWRpdXM9RSsxNSwidHJhbnNsYXRlKCIrRC5jZW50cm9pZChlKSsiKSJ9KSxPLmVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1kMy5zZWxlY3QodGhpcyk7bi5zZWxlY3QoIi5udi1sYWJlbCB0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIixtPyhlLnN0YXJ0QW5nbGUrZS5lbmRBbmdsZSkvMjxNYXRoLlBJPyJzdGFydCI6ImVuZCI6Im1pZGRsZSIpLnRleHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0oZS5lbmRBbmdsZS1lLnN0YXJ0QW5nbGUpLygyKk1hdGguUEkpLHI9e2tleTppKGUuZGF0YSksdmFsdWU6cyhlLmRhdGEpLHBlcmNlbnQ6ZDMuZm9ybWF0KCIlIikobil9O3JldHVybiBlLnZhbHVlJiZuPmQ/cltwXToiIn0pO3ZhciByPW4uc2VsZWN0KCJ0ZXh0Iikubm9kZSgpLmdldEJCb3goKTtuLnNlbGVjdCgiLm52LWxhYmVsIHJlY3QiKS5hdHRyKCJ3aWR0aCIsci53aWR0aCsxMCkuYXR0cigiaGVpZ2h0IixyLmhlaWdodCsxMCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIitbci54LTUsci55LTVdKyIpIn0pfSl9fSksRX12YXIgdD17dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LG49NTAwLHI9NTAwLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueH0scz1mdW5jdGlvbihlKXtyZXR1cm4gZS55fSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlLmRlc2NyaXB0aW9ufSx1PU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpLGE9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxmPWQzLmZvcm1hdCgiLC4yZiIpLGw9ITAsYz0hMCxoPSExLHA9ImtleSIsZD0uMDIsdj0hMSxtPSExLGc9ITEseT0hMSxiPS41LHc9ZDMuZGlzcGF0Y2goImNoYXJ0Q2xpY2siLCJlbGVtZW50Q2xpY2siLCJlbGVtZW50RGJsQ2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0Iik7cmV0dXJuIEUuZGlzcGF0Y2g9dyxFLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEUpLEUubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEUpOnR9LEUud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxFKTpufSxFLmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLEUpOnJ9LEUudmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmxvZygicGllLnZhbHVlcygpIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIiksRX0sRS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsRSk6aX0sRS55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWQzLmZ1bmN0b3IoZSksRSk6c30sRS5kZXNjcmlwdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLEUpOm99LEUuc2hvd0xhYmVscz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLEUpOmx9LEUubGFiZWxTdW5iZWFtTGF5b3V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUsRSk6bX0sRS5kb251dExhYmVsc091dHNpZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSxFKTpofSxFLnBpZUxhYmVsc091dHNpZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSxFKTpjfSxFLmxhYmVsVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLHA9cHx8ImtleSIsRSk6cH0sRS5kb251dD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1lLEUpOnZ9LEUuZG9udXRSYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1lLEUpOmJ9LEUuc3RhcnRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1lLEUpOmd9LEUuZW5kQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9ZSxFKTp5fSxFLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWUsRSk6dX0sRS5jb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLnV0aWxzLmdldENvbG9yKHQpLEUpOmF9LEUudmFsdWVGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSxFKTpmfSxFLmxhYmVsVGhyZXNob2xkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWUsRSk6ZH0sRX0sZS5tb2RlbHMucGllQ2hhcnQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB1PWQzLnNlbGVjdCh0aGlzKSxhPXRoaXMsZj0oaXx8cGFyc2VJbnQodS5zdHlsZSgid2lkdGgiKSl8fDk2MCktci5sZWZ0LXIucmlnaHQsZD0oc3x8cGFyc2VJbnQodS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXIudG9wLXIuYm90dG9tO3YudXBkYXRlPWZ1bmN0aW9uKCl7dS50cmFuc2l0aW9uKCkuY2FsbCh2KX0sdi5jb250YWluZXI9dGhpcyxsLmRpc2FibGVkPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCFjKXt2YXIgbTtjPXt9O2ZvcihtIGluIGwpbFttXWluc3RhbmNlb2YgQXJyYXk/Y1ttXT1sW21dLnNsaWNlKDApOmNbbV09bFttXX1pZighZXx8IWUubGVuZ3RoKXt2YXIgZz11LnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW2hdKTtyZXR1cm4gZy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksZy5hdHRyKCJ4IixyLmxlZnQrZi8yKS5hdHRyKCJ5IixyLnRvcCtkLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSx2fXUuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCk7dmFyIHk9dS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1waWVDaGFydCIpLmRhdGEoW2VdKSxiPXkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1waWVDaGFydCIpLmFwcGVuZCgiZyIpLHc9eS5zZWxlY3QoImciKTtiLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcGllV3JhcCIpLGIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksbyYmKG4ud2lkdGgoZikua2V5KHQueCgpKSx5LnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKG4pLHIudG9wIT1uLmhlaWdodCgpJiYoci50b3A9bi5oZWlnaHQoKSxkPShzfHxwYXJzZUludCh1LnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktci50b3Atci5ib3R0b20pLHkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1yLnRvcCsiKSIpKSx5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3IubGVmdCsiLCIrci50b3ArIikiKSx0LndpZHRoKGYpLmhlaWdodChkKTt2YXIgRT13LnNlbGVjdCgiLm52LXBpZVdyYXAiKS5kYXR1bShbZV0pO2QzLnRyYW5zaXRpb24oRSkuY2FsbCh0KSxuLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7bD1lLHAuc3RhdGVDaGFuZ2UobCksdi51cGRhdGUoKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtwLnRvb2x0aXBIaWRlKGUpfSkscC5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0idW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9dC5kaXNhYmxlZFtuXX0pLGwuZGlzYWJsZWQ9dC5kaXNhYmxlZCksdi51cGRhdGUoKX0pfSksdn12YXIgdD1lLm1vZGVscy5waWUoKSxuPWUubW9kZWxzLmxlZ2VuZCgpLHI9e3RvcDozMCxyaWdodDoyMCxib3R0b206MjAsbGVmdDoyMH0saT1udWxsLHM9bnVsbCxvPSEwLHU9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxhPSEwLGY9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+Iit0KyI8L3A+In0sbD17fSxjPW51bGwsaD0iTm8gRGF0YSBBdmFpbGFibGUuIixwPWQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLGQ9ZnVuY3Rpb24obixyKXt2YXIgaT10LmRlc2NyaXB0aW9uKCkobi5wb2ludCl8fHQueCgpKG4ucG9pbnQpLHM9bi5wb3NbMF0rKHImJnIub2Zmc2V0TGVmdHx8MCksbz1uLnBvc1sxXSsociYmci5vZmZzZXRUb3B8fDApLHU9dC52YWx1ZUZvcm1hdCgpKHQueSgpKG4ucG9pbnQpKSxhPWYoaSx1LG4sdik7ZS50b29sdGlwLnNob3coW3Msb10sYSxuLnZhbHVlPDA/Im4iOiJzIixudWxsLHIpfTtyZXR1cm4gdC5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rci5sZWZ0LGUucG9zWzFdK3IudG9wXSxwLnRvb2x0aXBTaG93KGUpfSkscC5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe2EmJmQoZSl9KSxwLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXthJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksdi5sZWdlbmQ9bix2LmRpc3BhdGNoPXAsdi5waWU9dCxkMy5yZWJpbmQodix0LCJ2YWx1ZUZvcm1hdCIsInZhbHVlcyIsIngiLCJ5IiwiZGVzY3JpcHRpb24iLCJpZCIsInNob3dMYWJlbHMiLCJkb251dExhYmVsc091dHNpZGUiLCJwaWVMYWJlbHNPdXRzaWRlIiwibGFiZWxUeXBlIiwiZG9udXQiLCJkb251dFJhdGlvIiwibGFiZWxUaHJlc2hvbGQiKSx2Lm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKHYpLHYubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyLnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnIudG9wLHIucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6ci5yaWdodCxyLmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnIuYm90dG9tLHIubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6ci5sZWZ0LHYpOnJ9LHYud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZSx2KTppfSx2LmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLHYpOnN9LHYuY29sb3I9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ZS51dGlscy5nZXRDb2xvcihyKSxuLmNvbG9yKHUpLHQuY29sb3IodSksdik6dX0sdi5zaG93TGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsdik6b30sdi50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHYpOmF9LHYudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZSx2KTpmfSx2LnN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsdik6bH0sdi5kZWZhdWx0U3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSx2KTpjfSx2Lm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLHYpOmh9LHZ9LGUubW9kZWxzLnNjYXR0ZXI9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShxKXtyZXR1cm4gcS5lYWNoKGZ1bmN0aW9uKEkpe2Z1bmN0aW9uIFEoKXtpZighZylyZXR1cm4hMTt2YXIgZSxpPWQzLm1lcmdlKEkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWVzLm1hcChmdW5jdGlvbihlLG4pe3ZhciByPWYoZSxuKSxpPWwoZSxuKTtyZXR1cm5bbyhyKStNYXRoLnJhbmRvbSgpKjFlLTcsdShpKStNYXRoLnJhbmRvbSgpKjFlLTcsdCxuLGVdfSkuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIoZVs0XSx0KX0pfSkpO2lmKEQ9PT0hMCl7aWYoeCl7dmFyIGE9WC5zZWxlY3QoImRlZnMiKS5zZWxlY3RBbGwoIi5udi1wb2ludC1jbGlwcyIpLmRhdGEoW3NdKS5lbnRlcigpO2EuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImNsYXNzIiwibnYtcG9pbnQtY2xpcHMiKS5hdHRyKCJpZCIsIm52LXBvaW50cy1jbGlwLSIrcyk7dmFyIGM9WC5zZWxlY3QoIiNudi1wb2ludHMtY2xpcC0iK3MpLnNlbGVjdEFsbCgiY2lyY2xlIikuZGF0YShpKTtjLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIixUKSxjLmV4aXQoKS5yZW1vdmUoKSxjLmF0dHIoImN4IixmdW5jdGlvbihlKXtyZXR1cm4gZVswXX0pLmF0dHIoImN5IixmdW5jdGlvbihlKXtyZXR1cm4gZVsxXX0pLFguc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5hdHRyKCJjbGlwLXBhdGgiLCJ1cmwoI252LXBvaW50cy1jbGlwLSIrcysiKSIpfWkubGVuZ3RoJiYoaS5wdXNoKFtvLnJhbmdlKClbMF0tMjAsdS5yYW5nZSgpWzBdLTIwLG51bGwsbnVsbF0pLGkucHVzaChbby5yYW5nZSgpWzFdKzIwLHUucmFuZ2UoKVsxXSsyMCxudWxsLG51bGxdKSxpLnB1c2goW28ucmFuZ2UoKVswXS0yMCx1LnJhbmdlKClbMF0rMjAsbnVsbCxudWxsXSksaS5wdXNoKFtvLnJhbmdlKClbMV0rMjAsdS5yYW5nZSgpWzFdLTIwLG51bGwsbnVsbF0pKTt2YXIgaD1kMy5nZW9tLnBvbHlnb24oW1stMTAsLTEwXSxbLTEwLHIrMTBdLFtuKzEwLHIrMTBdLFtuKzEwLC0xMF1dKSxwPWQzLmdlb20udm9yb25vaShpKS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm57ZGF0YTpoLmNsaXAoZSksc2VyaWVzOmlbdF1bMl0scG9pbnQ6aVt0XVszXX19KSxkPVguc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKHApO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtcGF0aC0iK3R9KSxkLmV4aXQoKS5yZW1vdmUoKSxkLmF0dHIoImQiLGZ1bmN0aW9uKGUpe3JldHVybiBlLmRhdGEubGVuZ3RoPT09MD8iTSAwIDAiOiJNIitlLmRhdGEuam9pbigiTCIpKyJaIn0pO3ZhciB2PWZ1bmN0aW9uKGUsbil7aWYoRilyZXR1cm4gMDt2YXIgcj1JW2Uuc2VyaWVzXTtpZih0eXBlb2Ygcj09InVuZGVmaW5lZCIpcmV0dXJuO3ZhciBpPXIudmFsdWVzW2UucG9pbnRdO24oe3BvaW50Omksc2VyaWVzOnIscG9zOltvKGYoaSxlLnBvaW50KSkrdC5sZWZ0LHUobChpLGUucG9pbnQpKSt0LnRvcF0sc2VyaWVzSW5kZXg6ZS5zZXJpZXMscG9pbnRJbmRleDplLnBvaW50fSl9O2Qub24oImNsaWNrIixmdW5jdGlvbihlKXt2KGUsXy5lbGVtZW50Q2xpY2spfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSl7dihlLF8uZWxlbWVudE1vdXNlb3Zlcil9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7dihlLF8uZWxlbWVudE1vdXNlb3V0KX0pfWVsc2UgWC5zZWxlY3QoIi5udi1ncm91cHMiKS5zZWxlY3RBbGwoIi5udi1ncm91cCIpLnNlbGVjdEFsbCgiLm52LXBvaW50Iikub24oImNsaWNrIixmdW5jdGlvbihlLG4pe2lmKEZ8fCFJW2Uuc2VyaWVzXSlyZXR1cm4gMDt2YXIgcj1JW2Uuc2VyaWVzXSxpPXIudmFsdWVzW25dO18uZWxlbWVudENsaWNrKHtwb2ludDppLHNlcmllczpyLHBvczpbbyhmKGksbikpK3QubGVmdCx1KGwoaSxuKSkrdC50b3BdLHNlcmllc0luZGV4OmUuc2VyaWVzLHBvaW50SW5kZXg6bn0pfSkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSxuKXtpZihGfHwhSVtlLnNlcmllc10pcmV0dXJuIDA7dmFyIHI9SVtlLnNlcmllc10saT1yLnZhbHVlc1tuXTtfLmVsZW1lbnRNb3VzZW92ZXIoe3BvaW50Omksc2VyaWVzOnIscG9zOltvKGYoaSxuKSkrdC5sZWZ0LHUobChpLG4pKSt0LnRvcF0sc2VyaWVzSW5kZXg6ZS5zZXJpZXMscG9pbnRJbmRleDpufSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUsdCl7aWYoRnx8IUlbZS5zZXJpZXNdKXJldHVybiAwO3ZhciBuPUlbZS5zZXJpZXNdLHI9bi52YWx1ZXNbdF07Xy5lbGVtZW50TW91c2VvdXQoe3BvaW50OnIsc2VyaWVzOm4sc2VyaWVzSW5kZXg6ZS5zZXJpZXMscG9pbnRJbmRleDp0fSl9KTtGPSExfXZhciBxPW4tdC5sZWZ0LXQucmlnaHQsUj1yLXQudG9wLXQuYm90dG9tLFU9ZDMuc2VsZWN0KHRoaXMpO0k9SS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZXM9ZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNlcmllcz10LGV9KSxlfSk7dmFyIFc9TiYmQyYmQT9bXTpkMy5tZXJnZShJLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6ZihlLHQpLHk6bChlLHQpLHNpemU6YyhlLHQpfX0pfSkpO28uZG9tYWluKE58fGQzLmV4dGVudChXLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS54fSkuY29uY2F0KGQpKSksdyYmSVswXT9vLnJhbmdlKGt8fFsocSpFK3EpLygyKklbMF0udmFsdWVzLmxlbmd0aCkscS1xKigxK0UpLygyKklbMF0udmFsdWVzLmxlbmd0aCldKTpvLnJhbmdlKGt8fFswLHFdKSx1LmRvbWFpbihDfHxkMy5leHRlbnQoVy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0pLmNvbmNhdCh2KSkpLnJhbmdlKEx8fFtSLDBdKSxhLmRvbWFpbihBfHxkMy5leHRlbnQoVy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2l6ZX0pLmNvbmNhdChtKSkpLnJhbmdlKE98fFsxNiwyNTZdKTtpZihvLmRvbWFpbigpWzBdPT09by5kb21haW4oKVsxXXx8dS5kb21haW4oKVswXT09PXUuZG9tYWluKClbMV0pTT0hMDtvLmRvbWFpbigpWzBdPT09by5kb21haW4oKVsxXSYmKG8uZG9tYWluKClbMF0/by5kb21haW4oW28uZG9tYWluKClbMF0tby5kb21haW4oKVswXSouMDEsby5kb21haW4oKVsxXStvLmRvbWFpbigpWzFdKi4wMV0pOm8uZG9tYWluKFstMSwxXSkpLHUuZG9tYWluKClbMF09PT11LmRvbWFpbigpWzFdJiYodS5kb21haW4oKVswXT91LmRvbWFpbihbdS5kb21haW4oKVswXS11LmRvbWFpbigpWzBdKi4wMSx1LmRvbWFpbigpWzFdK3UuZG9tYWluKClbMV0qLjAxXSk6dS5kb21haW4oWy0xLDFdKSksaXNOYU4oby5kb21haW4oKVswXSkmJm8uZG9tYWluKFstMSwxXSksaXNOYU4odS5kb21haW4oKVswXSkmJnUuZG9tYWluKFstMSwxXSksUD1QfHxvLEg9SHx8dSxCPUJ8fGE7dmFyIFg9VS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zY2F0dGVyIikuZGF0YShbSV0pLFY9WC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNjYXR0ZXIgbnYtY2hhcnQtIitzKyhNPyIgbnYtc2luZ2xlLXBvaW50IjoiIikpLCQ9Vi5hcHBlbmQoImRlZnMiKSxKPVYuYXBwZW5kKCJnIiksSz1YLnNlbGVjdCgiZyIpO0ouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1ncm91cHMiKSxKLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcG9pbnQtcGF0aHMiKSxYLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSwkLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsIm52LWVkZ2UtY2xpcC0iK3MpLmFwcGVuZCgicmVjdCIpLFguc2VsZWN0KCIjbnYtZWRnZS1jbGlwLSIrcysiIHJlY3QiKS5hdHRyKCJ3aWR0aCIscSkuYXR0cigiaGVpZ2h0IixSKSxLLmF0dHIoImNsaXAtcGF0aCIsUz8idXJsKCNudi1lZGdlLWNsaXAtIitzKyIpIjoiIiksRj0hMDt2YXIgRz1YLnNlbGVjdCgiLm52LWdyb3VwcyIpLnNlbGVjdEFsbCgiLm52LWdyb3VwIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSk7Ry5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMWUtNikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMWUtNiksRy5leGl0KCkucmVtb3ZlKCksRy5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtZ3JvdXAgbnYtc2VyaWVzLSIrdH0pLmNsYXNzZWQoImhvdmVyIixmdW5jdGlvbihlKXtyZXR1cm4gZS5ob3Zlcn0pLEcudHJhbnNpdGlvbigpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDEpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC41KTtpZihwKXt2YXIgWT1HLnNlbGVjdEFsbCgiY2lyY2xlLm52LXBvaW50IikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXN9LHkpO1kuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbG9yfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcn0pLmF0dHIoImN4IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhQKGYodCxuKSkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKEgobCh0LG4pKSl9KS5hdHRyKCJyIixmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLnNxcnQoYShjKGUsdCkpL01hdGguUEkpfSksWS5leGl0KCkucmVtb3ZlKCksRy5leGl0KCkuc2VsZWN0QWxsKCJwYXRoLm52LXBvaW50IikudHJhbnNpdGlvbigpLmF0dHIoImN4IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyhvKGYodCxuKSkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUudXRpbHMuTmFOdG9aZXJvKHUobCh0LG4pKSl9KS5yZW1vdmUoKSxZLmVhY2goZnVuY3Rpb24oZSx0KXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgibnYtcG9pbnQiLCEwKS5jbGFzc2VkKCJudi1wb2ludC0iK3QsITApLmNsYXNzZWQoImhvdmVyIiwhMSl9KSxZLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS51dGlscy5OYU50b1plcm8obyhmKHQsbikpKX0pLmF0dHIoImN5IixmdW5jdGlvbih0LG4pe3JldHVybiBlLnV0aWxzLk5hTnRvWmVybyh1KGwodCxuKSkpfSkuYXR0cigiciIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5zcXJ0KGEoYyhlLHQpKS9NYXRoLlBJKX0pfWVsc2V7dmFyIFk9Ry5zZWxlY3RBbGwoInBhdGgubnYtcG9pbnQiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pO1kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcn0pLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK1AoZihlLHQpKSsiLCIrSChsKGUsdCkpKyIpIn0pLmF0dHIoImQiLGQzLnN2Zy5zeW1ib2woKS50eXBlKGgpLnNpemUoZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShjKGUsdCkpfSkpLFkuZXhpdCgpLnJlbW92ZSgpLEcuZXhpdCgpLnNlbGVjdEFsbCgicGF0aC5udi1wb2ludCIpLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInRyYW5zbGF0ZSgiK28oZihlLHQpKSsiLCIrdShsKGUsdCkpKyIpIn0pLnJlbW92ZSgpLFkuZWFjaChmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJudi1wb2ludCIsITApLmNsYXNzZWQoIm52LXBvaW50LSIrdCwhMCkuY2xhc3NlZCgiaG92ZXIiLCExKX0pLFkudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4idHJhbnNsYXRlKCIrbyhmKGUsdCkpKyIsIit1KGwoZSx0KSkrIikifSkuYXR0cigiZCIsZDMuc3ZnLnN5bWJvbCgpLnR5cGUoaCkuc2l6ZShmdW5jdGlvbihlLHQpe3JldHVybiBhKGMoZSx0KSl9KSl9Y2xlYXJUaW1lb3V0KGopLGo9c2V0VGltZW91dChRLDMwMCksUD1vLmNvcHkoKSxIPXUuY29weSgpLEI9YS5jb3B5KCl9KSxJfXZhciB0PXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sbj05NjAscj01MDAsaT1lLnV0aWxzLmRlZmF1bHRDb2xvcigpLHM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNSksbz1kMy5zY2FsZS5saW5lYXIoKSx1PWQzLnNjYWxlLmxpbmVhcigpLGE9ZDMuc2NhbGUubGluZWFyKCksZj1mdW5jdGlvbihlKXtyZXR1cm4gZS54fSxsPWZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2l6ZXx8MX0saD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zaGFwZXx8ImNpcmNsZSJ9LHA9ITAsZD1bXSx2PVtdLG09W10sZz0hMCx5PW51bGwsYj1mdW5jdGlvbihlKXtyZXR1cm4hZS5ub3RBY3RpdmV9LHc9ITEsRT0uMSxTPSExLHg9ITAsVD1mdW5jdGlvbigpe3JldHVybiAyNX0sTj1udWxsLEM9bnVsbCxrPW51bGwsTD1udWxsLEE9bnVsbCxPPW51bGwsTT0hMSxfPWQzLmRpc3BhdGNoKCJlbGVtZW50Q2xpY2siLCJlbGVtZW50TW91c2VvdmVyIiwiZWxlbWVudE1vdXNlb3V0IiksRD0hMCxQLEgsQixqLEY9ITE7cmV0dXJuIEkuY2xlYXJIaWdobGlnaHRzPWZ1bmN0aW9uKCl7ZDMuc2VsZWN0QWxsKCIubnYtY2hhcnQtIitzKyIgLm52LXBvaW50LmhvdmVyIikuY2xhc3NlZCgiaG92ZXIiLCExKX0sSS5oaWdobGlnaHRQb2ludD1mdW5jdGlvbihlLHQsbil7ZDMuc2VsZWN0KCIubnYtY2hhcnQtIitzKyIgLm52LXNlcmllcy0iK2UrIiAubnYtcG9pbnQtIit0KS5jbGFzc2VkKCJob3ZlciIsbil9LF8ub24oImVsZW1lbnRNb3VzZW92ZXIucG9pbnQiLGZ1bmN0aW9uKGUpe2cmJkkuaGlnaGxpZ2h0UG9pbnQoZS5zZXJpZXNJbmRleCxlLnBvaW50SW5kZXgsITApfSksXy5vbigiZWxlbWVudE1vdXNlb3V0LnBvaW50IixmdW5jdGlvbihlKXtnJiZJLmhpZ2hsaWdodFBvaW50KGUuc2VyaWVzSW5kZXgsZS5wb2ludEluZGV4LCExKX0pLEkuZGlzcGF0Y2g9XyxJLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKEkpLEkueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1kMy5mdW5jdG9yKGUpLEkpOmZ9LEkueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1kMy5mdW5jdG9yKGUpLEkpOmx9LEkuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1kMy5mdW5jdG9yKGUpLEkpOmN9LEkubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0LnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnQudG9wLHQucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6dC5yaWdodCx0LmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnQuYm90dG9tLHQubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6dC5sZWZ0LEkpOnR9LEkud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxJKTpufSxJLmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLEkpOnJ9LEkueFNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsSSk6b30sSS55U2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ZSxJKTp1fSxJLnpTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLEkpOmF9LEkueERvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj1lLEkpOk59LEkueURvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz1lLEkpOkN9LEkuc2l6ZURvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1lLEkpOkF9LEkueFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPWUsSSk6a30sSS55UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9ZSxJKTpMfSxJLnNpemVSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTz1lLEkpOk99LEkuZm9yY2VYPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWUsSSk6ZH0sSS5mb3JjZVk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ZSxJKTp2fSxJLmZvcmNlU2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1lLEkpOm19LEkuaW50ZXJhY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ZSxJKTpnfSxJLnBvaW50S2V5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PWUsSSk6eX0sSS5wb2ludEFjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1lLEkpOmJ9LEkucGFkRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1lLEkpOnd9LEkucGFkRGF0YU91dGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPWUsSSk6RX0sSS5jbGlwRWRnZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1lLEkpOlN9LEkuY2xpcFZvcm9ub2k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9ZSxJKTp4fSxJLnVzZVZvcm9ub2k9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEQ9ZSxEPT09ITEmJih4PSExKSxJKTpEfSxJLmNsaXBSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9ZSxJKTpUfSxJLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUudXRpbHMuZ2V0Q29sb3IodCksSSk6aX0sSS5zaGFwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLEkpOmh9LEkub25seUNpcmNsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ZSxJKTpwfSxJLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWUsSSk6c30sSS5zaW5nbGVQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1lLEkpOk19LEl9LGUubW9kZWxzLnNjYXR0ZXJDaGFydD1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBGKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gSygpe2lmKFQpcmV0dXJuIFguc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSwhMTtYLnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3ZhciBpPWQzLm1vdXNlKHRoaXMpO2guZGlzdG9ydGlvbih4KS5mb2N1cyhpWzBdKSxwLmRpc3RvcnRpb24oeCkuZm9jdXMoaVsxXSksWC5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmNhbGwodCksYiYmWC5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKG4pLHcmJlguc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSxYLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblgiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKG8pLFguc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodSl9dmFyIEM9ZDMuc2VsZWN0KHRoaXMpLGs9dGhpcyxMPShmfHxwYXJzZUludChDLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1hLmxlZnQtYS5yaWdodCxJPShsfHxwYXJzZUludChDLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b207Ri51cGRhdGU9ZnVuY3Rpb24oKXtDLnRyYW5zaXRpb24oKS5kdXJhdGlvbihEKS5jYWxsKEYpfSxGLmNvbnRhaW5lcj10aGlzLEEuZGlzYWJsZWQ9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSk7aWYoIU8pe3ZhciBxO089e307Zm9yKHEgaW4gQSlBW3FdaW5zdGFuY2VvZiBBcnJheT9PW3FdPUFbcV0uc2xpY2UoMCk6T1txXT1BW3FdfWlmKCFlfHwhZS5sZW5ndGh8fCFlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZXMubGVuZ3RofSkubGVuZ3RoKXt2YXIgUj1DLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLmRhdGEoW19dKTtyZXR1cm4gUi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibnZkMyBudi1ub0RhdGEiKS5hdHRyKCJkeSIsIi0uN2VtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksUi5hdHRyKCJ4IixhLmxlZnQrTC8yKS5hdHRyKCJ5IixhLnRvcCtJLzIpLnRleHQoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxGfUMuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikucmVtb3ZlKCksUD1QfHxoLEg9SHx8cDt2YXIgVT1DLnNlbGVjdEFsbCgiZy5udi13cmFwLm52LXNjYXR0ZXJDaGFydCIpLmRhdGEoW2VdKSx6PVUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtd3JhcCBudi1zY2F0dGVyQ2hhcnQgbnYtY2hhcnQtIit0LmlkKCkpLFc9ei5hcHBlbmQoImciKSxYPVUuc2VsZWN0KCJnIik7Vy5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtYmFja2dyb3VuZCIpLFcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi14IG52LWF4aXMiKSxXLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYteSBudi1heGlzIiksVy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXNjYXR0ZXJXcmFwIiksVy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RXcmFwIiksVy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWxlZ2VuZFdyYXAiKSxXLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtY29udHJvbHNXcmFwIik7aWYoeSl7dmFyIFY9Uz9MLzI6TDtpLndpZHRoKFYpLFUuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmRhdHVtKGUpLmNhbGwoaSksYS50b3AhPWkuaGVpZ2h0KCkmJihhLnRvcD1pLmhlaWdodCgpLEk9KGx8fHBhcnNlSW50KEMuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvdHRvbSksVS5zZWxlY3QoIi5udi1sZWdlbmRXcmFwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEwtVikrIiwiKyAtYS50b3ArIikiKX1TJiYocy53aWR0aCgxODApLmNvbG9yKFsiIzQ0NCJdKSxYLnNlbGVjdCgiLm52LWNvbnRyb2xzV3JhcCIpLmRhdHVtKGopLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1hLnRvcCsiKSIpLmNhbGwocykpLFUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5sZWZ0KyIsIithLnRvcCsiKSIpLEUmJlguc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTCsiLDApIiksdC53aWR0aChMKS5oZWlnaHQoSSkuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksZCE9PTAmJnQueERvbWFpbihudWxsKSx2IT09MCYmdC55RG9tYWluKG51bGwpLFUuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpO2lmKGQhPT0wKXt2YXIgJD1oLmRvbWFpbigpWzFdLWguZG9tYWluKClbMF07dC54RG9tYWluKFtoLmRvbWFpbigpWzBdLWQqJCxoLmRvbWFpbigpWzFdK2QqJF0pfWlmKHYhPT0wKXt2YXIgSj1wLmRvbWFpbigpWzFdLXAuZG9tYWluKClbMF07dC55RG9tYWluKFtwLmRvbWFpbigpWzBdLXYqSixwLmRvbWFpbigpWzFdK3YqSl0pfSh2IT09MHx8ZCE9PTApJiZVLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh0KSxiJiYobi5zY2FsZShoKS50aWNrcyhuLnRpY2tzKCkmJm4udGlja3MoKS5sZW5ndGg/bi50aWNrcygpOkwvMTAwKS50aWNrU2l6ZSgtSSwwKSxYLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdKyIpIikuY2FsbChuKSksdyYmKHIuc2NhbGUocCkudGlja3Moci50aWNrcygpJiZyLnRpY2tzKCkubGVuZ3RoP3IudGlja3MoKTpJLzM2KS50aWNrU2l6ZSgtTCwwKSxYLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmNhbGwocikpLG0mJihvLmdldERhdGEodC54KCkpLnNjYWxlKGgpLndpZHRoKEwpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLFcuc2VsZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblgiKSxYLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK3AucmFuZ2UoKVswXSsiKSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwobykpLGcmJih1LmdldERhdGEodC55KCkpLnNjYWxlKHApLndpZHRoKEkpLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLFcuc2VsZWN0KCIubnYtZGlzdFdyYXAiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWRpc3RyaWJ1dGlvblkiKSxYLnNlbGVjdCgiLm52LWRpc3RyaWJ1dGlvblkiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRT9MOi11LnNpemUoKSkrIiwwKSIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwodSkpLGQzLmZpc2hleWUmJihYLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5hdHRyKCJ3aWR0aCIsTCkuYXR0cigiaGVpZ2h0IixJKSxYLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5vbigibW91c2Vtb3ZlIixLKSxYLnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7VD0hVH0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRDbGljay5mcmVlemVGaXNoZXllIixmdW5jdGlvbigpe1Q9IVR9KSkscy5kaXNwYXRjaC5vbigibGVnZW5kQ2xpY2siLGZ1bmN0aW9uKGUsaSl7ZS5kaXNhYmxlZD0hZS5kaXNhYmxlZCx4PWUuZGlzYWJsZWQ/MDoyLjUsWC5zZWxlY3QoIi5udi1iYWNrZ3JvdW5kIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixlLmRpc2FibGVkPyJub25lIjoiYWxsIiksWC5zZWxlY3QoIi5udi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsZS5kaXNhYmxlZD8iYWxsIjoibm9uZSIpLGUuZGlzYWJsZWQ/KGguZGlzdG9ydGlvbih4KS5mb2N1cygwKSxwLmRpc3RvcnRpb24oeCkuZm9jdXMoMCksWC5zZWxlY3QoIi5udi1zY2F0dGVyV3JhcCIpLmNhbGwodCksWC5zZWxlY3QoIi5udi14Lm52LWF4aXMiKS5jYWxsKG4pLFguc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSk6VD0hMSxGLnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe0EuZGlzYWJsZWQ9ZS5kaXNhYmxlZCxNLnN0YXRlQ2hhbmdlKEEpLEYudXBkYXRlKCl9KSx0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUpe2QzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHgtIitlLnBvaW50SW5kZXgpLmF0dHIoInkxIixmdW5jdGlvbih0LG4pe3JldHVybiBlLnBvc1sxXS1JfSksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigieDIiLGUucG9zWzBdK28uc2l6ZSgpKSxlLnBvcz1bZS5wb3NbMF0rYS5sZWZ0LGUucG9zWzFdK2EudG9wXSxNLnRvb2x0aXBTaG93KGUpfSksTS5vbigidG9vbHRpcFNob3ciLGZ1bmN0aW9uKGUpe04mJkIoZSxrLnBhcmVudE5vZGUpfSksTS5vbigiY2hhbmdlU3RhdGUiLGZ1bmN0aW9uKHQpe3R5cGVvZiB0LmRpc2FibGVkIT0idW5kZWZpbmVkIiYmKGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2UuZGlzYWJsZWQ9dC5kaXNhYmxlZFtuXX0pLEEuZGlzYWJsZWQ9dC5kaXNhYmxlZCksRi51cGRhdGUoKX0pLFA9aC5jb3B5KCksSD1wLmNvcHkoKX0pLEZ9dmFyIHQ9ZS5tb2RlbHMuc2NhdHRlcigpLG49ZS5tb2RlbHMuYXhpcygpLHI9ZS5tb2RlbHMuYXhpcygpLGk9ZS5tb2RlbHMubGVnZW5kKCkscz1lLm1vZGVscy5sZWdlbmQoKSxvPWUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLHU9ZS5tb2RlbHMuZGlzdHJpYnV0aW9uKCksYT17dG9wOjMwLHJpZ2h0OjIwLGJvdHRvbTo1MCxsZWZ0Ojc1fSxmPW51bGwsbD1udWxsLGM9ZS51dGlscy5kZWZhdWx0Q29sb3IoKSxoPWQzLmZpc2hleWU/ZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24oMCk6dC54U2NhbGUoKSxwPWQzLmZpc2hleWU/ZDMuZmlzaGV5ZS5zY2FsZShkMy5zY2FsZS5saW5lYXIpLmRpc3RvcnRpb24oMCk6dC55U2NhbGUoKSxkPTAsdj0wLG09ITEsZz0hMSx5PSEwLGI9ITAsdz0hMCxFPSExLFM9ISFkMy5maXNoZXllLHg9MCxUPSExLE49ITAsQz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIjxzdHJvbmc+Iit0KyI8L3N0cm9uZz4ifSxrPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK24rIjwvc3Ryb25nPiJ9LEw9bnVsbCxBPXt9LE89bnVsbCxNPWQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLF89Ik5vIERhdGEgQXZhaWxhYmxlLiIsRD0yNTA7dC54U2NhbGUoaCkueVNjYWxlKHApLG4ub3JpZW50KCJib3R0b20iKS50aWNrUGFkZGluZygxMCksci5vcmllbnQoRT8icmlnaHQiOiJsZWZ0IikudGlja1BhZGRpbmcoMTApLG8uYXhpcygieCIpLHUuYXhpcygieSIpLHMudXBkYXRlU3RhdGUoITEpO3ZhciBQLEgsQj1mdW5jdGlvbihpLHMpe3ZhciBvPWkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLHU9aS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSxmPWkucG9zWzBdKyhzLm9mZnNldExlZnR8fDApLGw9cC5yYW5nZSgpWzBdK2EudG9wKyhzLm9mZnNldFRvcHx8MCksYz1oLnJhbmdlKClbMF0rYS5sZWZ0KyhzLm9mZnNldExlZnR8fDApLGQ9aS5wb3NbMV0rKHMub2Zmc2V0VG9wfHwwKSx2PW4udGlja0Zvcm1hdCgpKHQueCgpKGkucG9pbnQsaS5wb2ludEluZGV4KSksbT1yLnRpY2tGb3JtYXQoKSh0LnkoKShpLnBvaW50LGkucG9pbnRJbmRleCkpO0MhPW51bGwmJmUudG9vbHRpcC5zaG93KFtmLGxdLEMoaS5zZXJpZXMua2V5LHYsbSxpLEYpLCJuIiwxLHMsIngtbnZ0b29sdGlwIiksayE9bnVsbCYmZS50b29sdGlwLnNob3coW2MsZF0sayhpLnNlcmllcy5rZXksdixtLGksRiksImUiLDEscywieS1udnRvb2x0aXAiKSxMIT1udWxsJiZlLnRvb2x0aXAuc2hvdyhbbyx1XSxMKGkuc2VyaWVzLmtleSx2LG0saSxGKSxpLnZhbHVlPDA/Im4iOiJzIixudWxsLHMpfSxqPVt7a2V5OiJNYWduaWZ5IixkaXNhYmxlZDohMH1dO3JldHVybiB0LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24oZSl7TS50b29sdGlwSGlkZShlKSxkMy5zZWxlY3QoIi5udi1jaGFydC0iK3QuaWQoKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R4LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ5MSIsMCksZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eS0iK2UucG9pbnRJbmRleCkuYXR0cigieDIiLHUuc2l6ZSgpKX0pLE0ub24oInRvb2x0aXBIaWRlIixmdW5jdGlvbigpe04mJmUudG9vbHRpcC5jbGVhbnVwKCl9KSxGLmRpc3BhdGNoPU0sRi5zY2F0dGVyPXQsRi5sZWdlbmQ9aSxGLmNvbnRyb2xzPXMsRi54QXhpcz1uLEYueUF4aXM9cixGLmRpc3RYPW8sRi5kaXN0WT11LGQzLnJlYmluZChGLHQsImlkIiwiaW50ZXJhY3RpdmUiLCJwb2ludEFjdGl2ZSIsIngiLCJ5Iiwic2hhcGUiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwielNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwic2l6ZVJhbmdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiY2xpcFZvcm9ub2kiLCJjbGlwUmFkaXVzIiwidXNlVm9yb25vaSIpLEYub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoRiksRi5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6YS50b3AsYS5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDphLnJpZ2h0LGEuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206YS5ib3R0b20sYS5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDphLmxlZnQsRik6YX0sRi53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLEYpOmZ9LEYuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsRik6bH0sRi5jb2xvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLnV0aWxzLmdldENvbG9yKHQpLGkuY29sb3IoYyksby5jb2xvcihjKSx1LmNvbG9yKGMpLEYpOmN9LEYuc2hvd0Rpc3RYPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUsRik6bX0sRi5zaG93RGlzdFk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ZSxGKTpnfSxGLnNob3dDb250cm9scz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1lLEYpOlN9LEYuc2hvd0xlZ2VuZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLEYpOnl9LEYuc2hvd1hBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUsRik6Yn0sRi5zaG93WUF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ZSxGKTp3fSxGLnJpZ2h0QWxpZ25ZQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1lLHIub3JpZW50KGU/InJpZ2h0IjoibGVmdCIpLEYpOkV9LEYuZmlzaGV5ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD1lLEYpOnh9LEYueFBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSxGKTpkfSxGLnlQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWUsRik6dn0sRi50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj1lLEYpOk59LEYudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEw9ZSxGKTpMfSxGLnRvb2x0aXBYQ29udGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz1lLEYpOkN9LEYudG9vbHRpcFlDb250ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPWUsRik6a30sRi5zdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1lLEYpOkF9LEYuZGVmYXVsdFN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhPPWUsRik6T30sRi5ub0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ZSxGKTpffSxGLnRyYW5zaXRpb25EdXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD1lLEYpOkR9LEZ9LGUubW9kZWxzLnNjYXR0ZXJQbHVzTGluZUNoYXJ0PWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEIoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiAkKCl7aWYoUylyZXR1cm4gei5zZWxlY3QoIi5udi1wb2ludC1wYXRocyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLCExO3ouc2VsZWN0KCIubnYtcG9pbnQtcGF0aHMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIik7dmFyIGk9ZDMubW91c2UodGhpcyk7aC5kaXN0b3J0aW9uKEUpLmZvY3VzKGlbMF0pLHAuZGlzdG9ydGlvbihFKS5mb2N1cyhpWzFdKSx6LnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh0KSxnJiZ6LnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobikseSYmei5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpLHouc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmRhdHVtKGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSkpLmNhbGwobyksei5zZWxlY3QoIi5udi1kaXN0cmlidXRpb25ZIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1KX12YXIgVD1kMy5zZWxlY3QodGhpcyksTj10aGlzLEM9KGZ8fHBhcnNlSW50KFQuc3R5bGUoIndpZHRoIikpfHw5NjApLWEubGVmdC1hLnJpZ2h0LGo9KGx8fHBhcnNlSW50KFQuc3R5bGUoImhlaWdodCIpKXx8NDAwKS1hLnRvcC1hLmJvdHRvbTtCLnVwZGF0ZT1mdW5jdGlvbigpe1QudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0pLmNhbGwoQil9LEIuY29udGFpbmVyPXRoaXMsay5kaXNhYmxlZD1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4hIWUuZGlzYWJsZWR9KTtpZighTCl7dmFyIEY7TD17fTtmb3IoRiBpbiBrKWtbRl1pbnN0YW5jZW9mIEFycmF5P0xbRl09a1tGXS5zbGljZSgwKTpMW0ZdPWtbRl19aWYoIWV8fCFlLmxlbmd0aHx8IWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlcy5sZW5ndGh9KS5sZW5ndGgpe3ZhciBJPVQuc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbT10pO3JldHVybiBJLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxJLmF0dHIoIngiLGEubGVmdCtDLzIpLmF0dHIoInkiLGEudG9wK2ovMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLEJ9VC5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKSxoPXQueFNjYWxlKCkscD10LnlTY2FsZSgpLF89X3x8aCxEPUR8fHA7dmFyIHE9VC5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zY2F0dGVyQ2hhcnQiKS5kYXRhKFtlXSksUj1xLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc2NhdHRlckNoYXJ0IG52LWNoYXJ0LSIrdC5pZCgpKSxVPVIuYXBwZW5kKCJnIiksej1xLnNlbGVjdCgiZyIpO1UuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LWJhY2tncm91bmQiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksVS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLFUuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxVLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc2NhdHRlcldyYXAiKSxVLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcmVncmVzc2lvbkxpbmVzV3JhcCIpLFUuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1kaXN0V3JhcCIpLFUuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1sZWdlbmRXcmFwIiksVS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWNvbnRyb2xzV3JhcCIpLHEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5sZWZ0KyIsIithLnRvcCsiKSIpLGImJnouc2VsZWN0KCIubnYteS5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQysiLDApIiksbSYmKGkud2lkdGgoQy8yKSxxLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bShlKS5jYWxsKGkpLGEudG9wIT1pLmhlaWdodCgpJiYoYS50b3A9aS5oZWlnaHQoKSxqPShsfHxwYXJzZUludChULnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktYS50b3AtYS5ib3R0b20pLHEuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MvMisiLCIrIC1hLnRvcCsiKSIpKSx3JiYocy53aWR0aCgxODApLmNvbG9yKFsiIzQ0NCJdKSx6LnNlbGVjdCgiLm52LWNvbnRyb2xzV3JhcCIpLmRhdHVtKEgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrIC1hLnRvcCsiKSIpLmNhbGwocykpLHQud2lkdGgoQykuaGVpZ2h0KGopLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGMoZSx0KX0pLmZpbHRlcihmdW5jdGlvbih0LG4pe3JldHVybiFlW25dLmRpc2FibGVkfSkpLHEuc2VsZWN0KCIubnYtc2NhdHRlcldyYXAiKS5kYXR1bShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pKS5jYWxsKHQpLHEuc2VsZWN0KCIubnYtcmVncmVzc2lvbkxpbmVzV3JhcCIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjbnYtZWRnZS1jbGlwLSIrdC5pZCgpKyIpIik7dmFyIFc9cS5zZWxlY3QoIi5udi1yZWdyZXNzaW9uTGluZXNXcmFwIikuc2VsZWN0QWxsKCIubnYtcmVnTGluZXMiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7Vy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtcmVnTGluZXMiKTt2YXIgWD1XLnNlbGVjdEFsbCgiLm52LXJlZ0xpbmUiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pLFY9WC5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibnYtcmVnTGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCk7WC50cmFuc2l0aW9uKCkuYXR0cigieDEiLGgucmFuZ2UoKVswXSkuYXR0cigieDIiLGgucmFuZ2UoKVsxXSkuYXR0cigieTEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoaC5kb21haW4oKVswXSplLnNsb3BlK2UuaW50ZXJjZXB0KX0pLmF0dHIoInkyIixmdW5jdGlvbihlLHQpe3JldHVybiBwKGguZG9tYWluKClbMV0qZS5zbG9wZStlLmludGVyY2VwdCl9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIGMoZSxuKX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kaXNhYmxlZHx8dHlwZW9mIGUuc2xvcGU9PSJ1bmRlZmluZWQifHx0eXBlb2YgZS5pbnRlcmNlcHQ9PSJ1bmRlZmluZWQiPzA6MX0pLGcmJihuLnNjYWxlKGgpLnRpY2tzKG4udGlja3MoKT9uLnRpY2tzKCk6Qy8xMDApLnRpY2tTaXplKC1qLDApLHouc2VsZWN0KCIubnYteC5udi1heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitwLnJhbmdlKClbMF0rIikiKS5jYWxsKG4pKSx5JiYoci5zY2FsZShwKS50aWNrcyhyLnRpY2tzKCk/ci50aWNrcygpOmovMzYpLnRpY2tTaXplKC1DLDApLHouc2VsZWN0KCIubnYteS5udi1heGlzIikuY2FsbChyKSksZCYmKG8uZ2V0RGF0YSh0LngoKSkuc2NhbGUoaCkud2lkdGgoQykuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksVS5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzdHJpYnV0aW9uWCIpLHouc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrcC5yYW5nZSgpWzBdKyIpIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbChvKSksdiYmKHUuZ2V0RGF0YSh0LnkoKSkuc2NhbGUocCkud2lkdGgoaikuY29sb3IoZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8YyhlLHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIWVbbl0uZGlzYWJsZWR9KSksVS5zZWxlY3QoIi5udi1kaXN0V3JhcCIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtZGlzdHJpYnV0aW9uWSIpLHouc2VsZWN0KCIubnYtZGlzdHJpYnV0aW9uWSIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhiP0M6LXUuc2l6ZSgpKSsiLDApIikuZGF0dW0oZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkuY2FsbCh1KSksZDMuZmlzaGV5ZSYmKHouc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLmF0dHIoIndpZHRoIixDKS5hdHRyKCJoZWlnaHQiLGopLHouc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9uKCJtb3VzZW1vdmUiLCQpLHouc2VsZWN0KCIubnYtYmFja2dyb3VuZCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtTPSFTfSksdC5kaXNwYXRjaC5vbigiZWxlbWVudENsaWNrLmZyZWV6ZUZpc2hleWUiLGZ1bmN0aW9uKCl7Uz0hU30pKSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxpKXtlLmRpc2FibGVkPSFlLmRpc2FibGVkLEU9ZS5kaXNhYmxlZD8wOjIuNSx6LnNlbGVjdCgiLm52LWJhY2tncm91bmQiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLGUuZGlzYWJsZWQ/Im5vbmUiOiJhbGwiKSx6LnNlbGVjdCgiLm52LXBvaW50LXBhdGhzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixlLmRpc2FibGVkPyJhbGwiOiJub25lIiksZS5kaXNhYmxlZD8oaC5kaXN0b3J0aW9uKEUpLmZvY3VzKDApLHAuZGlzdG9ydGlvbihFKS5mb2N1cygwKSx6LnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuY2FsbCh0KSx6LnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmNhbGwobiksei5zZWxlY3QoIi5udi15Lm52LWF4aXMiKS5jYWxsKHIpKTpTPSExLEIudXBkYXRlKCl9KSxpLmRpc3BhdGNoLm9uKCJzdGF0ZUNoYW5nZSIsZnVuY3Rpb24oZSl7az1lLEEuc3RhdGVDaGFuZ2UoayksQi51cGRhdGUoKX0pLHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZDMuc2VsZWN0KCIubnYtY2hhcnQtIit0LmlkKCkrIiAubnYtc2VyaWVzLSIrZS5zZXJpZXNJbmRleCsiIC5udi1kaXN0eC0iK2UucG9pbnRJbmRleCkuYXR0cigieTEiLGUucG9zWzFdLWopLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHktIitlLnBvaW50SW5kZXgpLmF0dHIoIngyIixlLnBvc1swXStvLnNpemUoKSksZS5wb3M9W2UucG9zWzBdK2EubGVmdCxlLnBvc1sxXSthLnRvcF0sQS50b29sdGlwU2hvdyhlKX0pLEEub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXt4JiZQKGUsTi5wYXJlbnROb2RlKX0pLEEub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbih0KXt0eXBlb2YgdC5kaXNhYmxlZCE9InVuZGVmaW5lZCImJihlLmZvckVhY2goZnVuY3Rpb24oZSxuKXtlLmRpc2FibGVkPXQuZGlzYWJsZWRbbl19KSxrLmRpc2FibGVkPXQuZGlzYWJsZWQpLEIudXBkYXRlKCl9KSxfPWguY29weSgpLEQ9cC5jb3B5KCl9KSxCfXZhciB0PWUubW9kZWxzLnNjYXR0ZXIoKSxuPWUubW9kZWxzLmF4aXMoKSxyPWUubW9kZWxzLmF4aXMoKSxpPWUubW9kZWxzLmxlZ2VuZCgpLHM9ZS5tb2RlbHMubGVnZW5kKCksbz1lLm1vZGVscy5kaXN0cmlidXRpb24oKSx1PWUubW9kZWxzLmRpc3RyaWJ1dGlvbigpLGE9e3RvcDozMCxyaWdodDoyMCxib3R0b206NTAsbGVmdDo3NX0sZj1udWxsLGw9bnVsbCxjPWUudXRpbHMuZGVmYXVsdENvbG9yKCksaD1kMy5maXNoZXllP2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0aW9uKDApOnQueFNjYWxlKCkscD1kMy5maXNoZXllP2QzLmZpc2hleWUuc2NhbGUoZDMuc2NhbGUubGluZWFyKS5kaXN0b3J0aW9uKDApOnQueVNjYWxlKCksZD0hMSx2PSExLG09ITAsZz0hMCx5PSEwLGI9ITEsdz0hIWQzLmZpc2hleWUsRT0wLFM9ITEseD0hMCxUPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LE49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiI8c3Ryb25nPiIrbisiPC9zdHJvbmc+In0sQz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iPGgzPiIrZSsiPC9oMz4iKyI8cD4iK3IrIjwvcD4ifSxrPXt9LEw9bnVsbCxBPWQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIKKSxPPSJObyBEYXRhIEF2YWlsYWJsZS4iLE09MjUwO3QueFNjYWxlKGgpLnlTY2FsZShwKSxuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoMTApLHIub3JpZW50KGI/InJpZ2h0IjoibGVmdCIpLnRpY2tQYWRkaW5nKDEwKSxvLmF4aXMoIngiKSx1LmF4aXMoInkiKSxzLnVwZGF0ZVN0YXRlKCExKTt2YXIgXyxELFA9ZnVuY3Rpb24oaSxzKXt2YXIgbz1pLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PWkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksZj1pLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSxsPXAucmFuZ2UoKVswXSthLnRvcCsocy5vZmZzZXRUb3B8fDApLGM9aC5yYW5nZSgpWzBdK2EubGVmdCsocy5vZmZzZXRMZWZ0fHwwKSxkPWkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksdj1uLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLG09ci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKTtUIT1udWxsJiZlLnRvb2x0aXAuc2hvdyhbZixsXSxUKGkuc2VyaWVzLmtleSx2LG0saSxCKSwibiIsMSxzLCJ4LW52dG9vbHRpcCIpLE4hPW51bGwmJmUudG9vbHRpcC5zaG93KFtjLGRdLE4oaS5zZXJpZXMua2V5LHYsbSxpLEIpLCJlIiwxLHMsInktbnZ0b29sdGlwIiksQyE9bnVsbCYmZS50b29sdGlwLnNob3coW28sdV0sQyhpLnNlcmllcy5rZXksdixtLGkucG9pbnQudG9vbHRpcCxpLEIpLGkudmFsdWU8MD8ibiI6InMiLG51bGwscyl9LEg9W3trZXk6Ik1hZ25pZnkiLGRpc2FibGVkOiEwfV07cmV0dXJuIHQuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXtBLnRvb2x0aXBIaWRlKGUpLGQzLnNlbGVjdCgiLm52LWNoYXJ0LSIrdC5pZCgpKyIgLm52LXNlcmllcy0iK2Uuc2VyaWVzSW5kZXgrIiAubnYtZGlzdHgtIitlLnBvaW50SW5kZXgpLmF0dHIoInkxIiwwKSxkMy5zZWxlY3QoIi5udi1jaGFydC0iK3QuaWQoKSsiIC5udi1zZXJpZXMtIitlLnNlcmllc0luZGV4KyIgLm52LWRpc3R5LSIrZS5wb2ludEluZGV4KS5hdHRyKCJ4MiIsdS5zaXplKCkpfSksQS5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKCl7eCYmZS50b29sdGlwLmNsZWFudXAoKX0pLEIuZGlzcGF0Y2g9QSxCLnNjYXR0ZXI9dCxCLmxlZ2VuZD1pLEIuY29udHJvbHM9cyxCLnhBeGlzPW4sQi55QXhpcz1yLEIuZGlzdFg9byxCLmRpc3RZPXUsZDMucmViaW5kKEIsdCwiaWQiLCJpbnRlcmFjdGl2ZSIsInBvaW50QWN0aXZlIiwieCIsInkiLCJzaGFwZSIsInNpemUiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ6U2NhbGUiLCJ4RG9tYWluIiwieURvbWFpbiIsInhSYW5nZSIsInlSYW5nZSIsInNpemVEb21haW4iLCJzaXplUmFuZ2UiLCJmb3JjZVgiLCJmb3JjZVkiLCJmb3JjZVNpemUiLCJjbGlwVm9yb25vaSIsImNsaXBSYWRpdXMiLCJ1c2VWb3Jvbm9pIiksQi5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChCKSxCLm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDphLnRvcCxhLnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0OmEucmlnaHQsYS5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTphLmJvdHRvbSxhLmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0OmEubGVmdCxCKTphfSxCLndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWUsQik6Zn0sQi5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxCKTpsfSxCLmNvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWUudXRpbHMuZ2V0Q29sb3IodCksaS5jb2xvcihjKSxvLmNvbG9yKGMpLHUuY29sb3IoYyksQik6Y30sQi5zaG93RGlzdFg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSxCKTpkfSxCLnNob3dEaXN0WT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1lLEIpOnZ9LEIuc2hvd0NvbnRyb2xzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PWUsQik6d30sQi5zaG93TGVnZW5kPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUsQik6bX0sQi5zaG93WEF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ZSxCKTpnfSxCLnNob3dZQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1lLEIpOnl9LEIucmlnaHRBbGlnbllBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWUsci5vcmllbnQoZT8icmlnaHQiOiJsZWZ0IiksQik6Yn0sQi5maXNoZXllPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPWUsQik6RX0sQi50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD1lLEIpOnh9LEIudG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9ZSxCKTpDfSxCLnRvb2x0aXBYQ29udGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1lLEIpOlR9LEIudG9vbHRpcFlDb250ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPWUsQik6Tn0sQi5zdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz1lLEIpOmt9LEIuZGVmYXVsdFN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPWUsQik6TH0sQi5ub0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89ZSxCKTpPfSxCLnRyYW5zaXRpb25EdXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1lLEIpOk19LEJ9LGUubW9kZWxzLnNwYXJrbGluZT1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9bi10LmxlZnQtdC5yaWdodCxkPXItdC50b3AtdC5ib3R0b20sdj1kMy5zZWxlY3QodGhpcyk7cy5kb21haW4obHx8ZDMuZXh0ZW50KGUsdSkpLnJhbmdlKGh8fFswLGldKSxvLmRvbWFpbihjfHxkMy5leHRlbnQoZSxhKSkucmFuZ2UocHx8W2QsMF0pO3ZhciBtPXYuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtc3BhcmtsaW5lIikuZGF0YShbZV0pLGc9bS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNwYXJrbGluZSIpLGI9Zy5hcHBlbmQoImciKSx3PW0uc2VsZWN0KCJnIik7bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LmxlZnQrIiwiK3QudG9wKyIpIik7dmFyIEU9bS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pO0UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxFLmV4aXQoKS5yZW1vdmUoKSxFLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGYoZSx0KX0pLmF0dHIoImQiLGQzLnN2Zy5saW5lKCkueChmdW5jdGlvbihlLHQpe3JldHVybiBzKHUoZSx0KSl9KS55KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oYShlLHQpKX0pKTt2YXIgUz1tLnNlbGVjdEFsbCgiY2lyY2xlLm52LXBvaW50IikuZGF0YShmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2lmKHQhPS0xKXt2YXIgbj1lW3RdO3JldHVybiBuLnBvaW50SW5kZXg9dCxufXJldHVybiBudWxsfXZhciB0PWUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KX0pLHI9bih0Lmxhc3RJbmRleE9mKG8uZG9tYWluKClbMV0pKSxpPW4odC5pbmRleE9mKG8uZG9tYWluKClbMF0pKSxzPW4odC5sZW5ndGgtMSk7cmV0dXJuW2kscixzXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9KX0pO1MuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLFMuZXhpdCgpLnJlbW92ZSgpLFMuYXR0cigiY3giLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModShlLGUucG9pbnRJbmRleCkpfSkuYXR0cigiY3kiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oYShlLGUucG9pbnRJbmRleCkpfSkuYXR0cigiciIsMikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSxlLnBvaW50SW5kZXgpPT1zLmRvbWFpbigpWzFdPyJudi1wb2ludCBudi1jdXJyZW50VmFsdWUiOmEoZSxlLnBvaW50SW5kZXgpPT1vLmRvbWFpbigpWzBdPyJudi1wb2ludCBudi1taW5WYWx1ZSI6Im52LXBvaW50IG52LW1heFZhbHVlIn0pfSksZH12YXIgdD17dG9wOjIscmlnaHQ6MCxib3R0b206MixsZWZ0OjB9LG49NDAwLHI9MzIsaT0hMCxzPWQzLnNjYWxlLmxpbmVhcigpLG89ZDMuc2NhbGUubGluZWFyKCksdT1mdW5jdGlvbihlKXtyZXR1cm4gZS54fSxhPWZ1bmN0aW9uKGUpe3JldHVybiBlLnl9LGY9ZS51dGlscy5nZXRDb2xvcihbIiMwMDAiXSksbCxjLGgscDtyZXR1cm4gZC5vcHRpb25zPWUudXRpbHMub3B0aW9uc0Z1bmMuYmluZChkKSxkLm1hcmdpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC50b3A9dHlwZW9mIGUudG9wIT0idW5kZWZpbmVkIj9lLnRvcDp0LnRvcCx0LnJpZ2h0PXR5cGVvZiBlLnJpZ2h0IT0idW5kZWZpbmVkIj9lLnJpZ2h0OnQucmlnaHQsdC5ib3R0b209dHlwZW9mIGUuYm90dG9tIT0idW5kZWZpbmVkIj9lLmJvdHRvbTp0LmJvdHRvbSx0LmxlZnQ9dHlwZW9mIGUubGVmdCE9InVuZGVmaW5lZCI/ZS5sZWZ0OnQubGVmdCxkKTp0fSxkLndpZHRoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsZCk6bn0sZC5oZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSxkKTpyfSxkLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ZDMuZnVuY3RvcihlKSxkKTp1fSxkLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZDMuZnVuY3RvcihlKSxkKTphfSxkLnhTY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1lLGQpOnN9LGQueVNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsZCk6b30sZC54RG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsZCk6bH0sZC55RG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWUsZCk6Y30sZC54UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSxkKTpofSxkLnlSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLGQpOnB9LGQuYW5pbWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLGQpOml9LGQuY29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ZS51dGlscy5nZXRDb2xvcih0KSxkKTpmfSxkfSxlLm1vZGVscy5zcGFya2xpbmVQbHVzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHYoZSl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbihjKXtmdW5jdGlvbiBPKCl7aWYoYSlyZXR1cm47dmFyIGU9Qy5zZWxlY3RBbGwoIi5udi1ob3ZlclZhbHVlIikuZGF0YSh1KSxyPWUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LWhvdmVyVmFsdWUiKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLDApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApO2UuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyNTApLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsMCkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCkucmVtb3ZlKCksZS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIitzKHQueCgpKGNbZV0sZSkpKyIsMCkifSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDI1MCkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwxKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwxKTtpZighdS5sZW5ndGgpcmV0dXJuO3IuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIiwtbi50b3ApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsYiksci5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LXhWYWx1ZSIpLmF0dHIoIngiLC02KS5hdHRyKCJ5Iiwtbi50b3ApLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXR0cigiZHkiLCIuOWVtIiksQy5zZWxlY3QoIi5udi1ob3ZlclZhbHVlIC5udi14VmFsdWUiKS50ZXh0KGYodC54KCkoY1t1WzBdXSx1WzBdKSkpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudi15VmFsdWUiKS5hdHRyKCJ4Iiw2KS5hdHRyKCJ5Iiwtbi50b3ApLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5hdHRyKCJkeSIsIi45ZW0iKSxDLnNlbGVjdCgiLm52LWhvdmVyVmFsdWUgLm52LXlWYWx1ZSIpLnRleHQobCh0LnkoKShjW3VbMF1dLHVbMF0pKSl9ZnVuY3Rpb24gTSgpe2Z1bmN0aW9uIHIoZSxuKXt2YXIgcj1NYXRoLmFicyh0LngoKShlWzBdLDApLW4pLGk9MDtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylNYXRoLmFicyh0LngoKShlW3NdLHMpLW4pPHImJihyPU1hdGguYWJzKHQueCgpKGVbc10scyktbiksaT1zKTtyZXR1cm4gaX1pZihhKXJldHVybjt2YXIgZT1kMy5tb3VzZSh0aGlzKVswXS1uLmxlZnQ7dT1bcihjLE1hdGgucm91bmQocy5pbnZlcnQoZSkpKV0sTygpfXZhciBtPWQzLnNlbGVjdCh0aGlzKSxnPShyfHxwYXJzZUludChtLnN0eWxlKCJ3aWR0aCIpKXx8OTYwKS1uLmxlZnQtbi5yaWdodCxiPShpfHxwYXJzZUludChtLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktbi50b3Atbi5ib3R0b207di51cGRhdGU9ZnVuY3Rpb24oKXt2KGUpfSx2LmNvbnRhaW5lcj10aGlzO2lmKCFjfHwhYy5sZW5ndGgpe3ZhciB3PW0uc2VsZWN0QWxsKCIubnYtbm9EYXRhIikuZGF0YShbZF0pO3JldHVybiB3LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJudmQzIG52LW5vRGF0YSIpLmF0dHIoImR5IiwiLS43ZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoIngiLG4ubGVmdCtnLzIpLmF0dHIoInkiLG4udG9wK2IvMikudGV4dChmdW5jdGlvbihlKXtyZXR1cm4gZX0pLHZ9bS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5yZW1vdmUoKTt2YXIgRT10LnkoKShjW2MubGVuZ3RoLTFdLGMubGVuZ3RoLTEpO3M9dC54U2NhbGUoKSxvPXQueVNjYWxlKCk7dmFyIFM9bS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zcGFya2xpbmVwbHVzIikuZGF0YShbY10pLFQ9Uy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXNwYXJrbGluZXBsdXMiKSxOPVQuYXBwZW5kKCJnIiksQz1TLnNlbGVjdCgiZyIpO04uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1zcGFya2xpbmVXcmFwIiksTi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXZhbHVlV3JhcCIpLE4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1ob3ZlckFyZWEiKSxTLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ubGVmdCsiLCIrbi50b3ArIikiKTt2YXIgaz1DLnNlbGVjdCgiLm52LXNwYXJrbGluZVdyYXAiKTt0LndpZHRoKGcpLmhlaWdodChiKSxrLmNhbGwodCk7dmFyIEw9Qy5zZWxlY3QoIi5udi12YWx1ZVdyYXAiKSxBPUwuc2VsZWN0QWxsKCIubnYtY3VycmVudFZhbHVlIikuZGF0YShbRV0pO0EuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52LWN1cnJlbnRWYWx1ZSIpLmF0dHIoImR4IixwPy04OjgpLmF0dHIoImR5IiwiLjllbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIscD8iZW5kIjoic3RhcnQiKSxBLmF0dHIoIngiLGcrKHA/bi5yaWdodDowKSkuYXR0cigieSIsaD9mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX06MCkuc3R5bGUoImZpbGwiLHQuY29sb3IoKShjW2MubGVuZ3RoLTFdLGMubGVuZ3RoLTEpKS50ZXh0KGwoRSkpLE4uc2VsZWN0KCIubnYtaG92ZXJBcmVhIikuYXBwZW5kKCJyZWN0Iikub24oIm1vdXNlbW92ZSIsTSkub24oImNsaWNrIixmdW5jdGlvbigpe2E9IWF9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dT1bXSxPKCl9KSxDLnNlbGVjdCgiLm52LWhvdmVyQXJlYSByZWN0IikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrIC1uLmxlZnQrIiwiKyAtbi50b3ArIikifSkuYXR0cigid2lkdGgiLGcrbi5sZWZ0K24ucmlnaHQpLmF0dHIoImhlaWdodCIsYituLnRvcCl9KSx2fXZhciB0PWUubW9kZWxzLnNwYXJrbGluZSgpLG49e3RvcDoxNSxyaWdodDoxMDAsYm90dG9tOjEwLGxlZnQ6NTB9LHI9bnVsbCxpPW51bGwscyxvLHU9W10sYT0hMSxmPWQzLmZvcm1hdCgiLHIiKSxsPWQzLmZvcm1hdCgiLC4yZiIpLGM9ITAsaD0hMCxwPSExLGQ9Ik5vIERhdGEgQXZhaWxhYmxlLiI7cmV0dXJuIHYuc3BhcmtsaW5lPXQsZDMucmViaW5kKHYsdCwieCIsInkiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJjb2xvciIpLHYub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQodiksdi5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4udG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6bi50b3Asbi5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDpuLnJpZ2h0LG4uYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206bi5ib3R0b20sbi5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDpuLmxlZnQsdik6bn0sdi53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHYpOnJ9LHYuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdik6aX0sdi54VGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLHYpOmZ9LHYueVRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSx2KTpsfSx2LnNob3dWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLHYpOmN9LHYuYWxpZ25WYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLHYpOmh9LHYucmlnaHRBbGlnblZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUsdik6cH0sdi5ub0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ZSx2KTpkfSx2fSxlLm1vZGVscy5zdGFja2VkQXJlYT1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKGUpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9bi10LmxlZnQtdC5yaWdodCxnPXItdC50b3AtdC5ib3R0b20sYj1kMy5zZWxlY3QodGhpcyk7cD12LnhTY2FsZSgpLGQ9di55U2NhbGUoKSxlPWUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2VyaWVzSW5kZXg9dCxlLnZhbHVlcz1lLnZhbHVlcy5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5pbmRleD1uLGUuc2VyaWVzSW5kZXg9dCxlfSksZX0pO3ZhciB3PWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkfSk7ZT1kMy5sYXlvdXQuc3RhY2soKS5vcmRlcihsKS5vZmZzZXQoZikudmFsdWVzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlc30pLngobykueSh1KS5vdXQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPXUoZSk9PT0wPzA6bjtlLmRpc3BsYXk9e3k6cix5MDp0fX0pKHcpO3ZhciBFPWIuc2VsZWN0QWxsKCJnLm52LXdyYXAubnYtc3RhY2tlZGFyZWEiKS5kYXRhKFtlXSksUz1FLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudmQzIG52LXdyYXAgbnYtc3RhY2tlZGFyZWEiKSxUPVMuYXBwZW5kKCJkZWZzIiksTj1TLmFwcGVuZCgiZyIpLEM9RS5zZWxlY3QoImciKTtOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtYXJlYVdyYXAiKSxOLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc2NhdHRlcldyYXAiKSxFLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGVmdCsiLCIrdC50b3ArIikiKSx2LndpZHRoKGEpLmhlaWdodChnKS54KG8pLnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzcGxheS55K2UuZGlzcGxheS55MH0pLmZvcmNlWShbMF0pLmNvbG9yKGUubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29sb3J8fGkoZSxlLnNlcmllc0luZGV4KX0pKTt2YXIgaz1DLnNlbGVjdCgiLm52LXNjYXR0ZXJXcmFwIikuZGF0dW0oZSk7ay5jYWxsKHYpLFQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwibnYtZWRnZS1jbGlwLSIrcykuYXBwZW5kKCJyZWN0IiksRS5zZWxlY3QoIiNudi1lZGdlLWNsaXAtIitzKyIgcmVjdCIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLGcpLEMuYXR0cigiY2xpcC1wYXRoIixoPyJ1cmwoI252LWVkZ2UtY2xpcC0iK3MrIikiOiIiKTt2YXIgTD1kMy5zdmcuYXJlYSgpLngoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChvKGUsdCkpfSkueTAoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGF5LnkwKX0pLnkxKGZ1bmN0aW9uKGUpe3JldHVybiBkKGUuZGlzcGxheS55K2UuZGlzcGxheS55MCl9KS5pbnRlcnBvbGF0ZShjKSxBPWQzLnN2Zy5hcmVhKCkueChmdW5jdGlvbihlLHQpe3JldHVybiBwKG8oZSx0KSl9KS55MChmdW5jdGlvbihlKXtyZXR1cm4gZChlLmRpc3BsYXkueTApfSkueTEoZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS5kaXNwbGF5LnkwKX0pLE89Qy5zZWxlY3QoIi5udi1hcmVhV3JhcCIpLnNlbGVjdEFsbCgicGF0aC5udi1hcmVhIikuZGF0YShmdW5jdGlvbihlKXtyZXR1cm4gZX0pO08uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4ibnYtYXJlYSBudi1hcmVhLSIrdH0pLmF0dHIoImQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEEoZS52YWx1ZXMsZS5zZXJpZXNJbmRleCl9KS5vbigibW91c2VvdmVyIixmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITApLG0uYXJlYU1vdXNlb3Zlcih7cG9pbnQ6ZSxzZXJpZXM6ZS5rZXkscG9zOltkMy5ldmVudC5wYWdlWCxkMy5ldmVudC5wYWdlWV0sc2VyaWVzSW5kZXg6dH0pfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihlLHQpe2QzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpLG0uYXJlYU1vdXNlb3V0KHtwb2ludDplLHNlcmllczplLmtleSxwb3M6W2QzLmV2ZW50LnBhZ2VYLGQzLmV2ZW50LnBhZ2VZXSxzZXJpZXNJbmRleDp0fSl9KS5vbigiY2xpY2siLGZ1bmN0aW9uKGUsdCl7ZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSksbS5hcmVhQ2xpY2soe3BvaW50OmUsc2VyaWVzOmUua2V5LHBvczpbZDMuZXZlbnQucGFnZVgsZDMuZXZlbnQucGFnZVldLHNlcmllc0luZGV4OnR9KX0pLE8uZXhpdCgpLnRyYW5zaXRpb24oKS5hdHRyKCJkIixmdW5jdGlvbihlLHQpe3JldHVybiBBKGUudmFsdWVzLHQpfSkucmVtb3ZlKCksTy5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShlLGUuc2VyaWVzSW5kZXgpfSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2xvcnx8aShlLGUuc2VyaWVzSW5kZXgpfSksTy50cmFuc2l0aW9uKCkuYXR0cigiZCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTChlLnZhbHVlcyx0KX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIuYXJlYSIsZnVuY3Rpb24oZSl7Qy5zZWxlY3QoIi5udi1jaGFydC0iK3MrIiAubnYtYXJlYS0iK2Uuc2VyaWVzSW5kZXgpLmNsYXNzZWQoImhvdmVyIiwhMCl9KSx2LmRpc3BhdGNoLm9uKCJlbGVtZW50TW91c2VvdXQuYXJlYSIsZnVuY3Rpb24oZSl7Qy5zZWxlY3QoIi5udi1jaGFydC0iK3MrIiAubnYtYXJlYS0iK2Uuc2VyaWVzSW5kZXgpLmNsYXNzZWQoImhvdmVyIiwhMSl9KX0pLGd9dmFyIHQ9e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSxuPTk2MCxyPTUwMCxpPWUudXRpbHMuZGVmYXVsdENvbG9yKCkscz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU1KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlLnh9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUueX0sYT0ic3RhY2siLGY9Inplcm8iLGw9ImRlZmF1bHQiLGM9ImxpbmVhciIsaD0hMSxwLGQsdj1lLm1vZGVscy5zY2F0dGVyKCksbT1kMy5kaXNwYXRjaCgidG9vbHRpcFNob3ciLCJ0b29sdGlwSGlkZSIsImFyZWFDbGljayIsImFyZWFNb3VzZW92ZXIiLCJhcmVhTW91c2VvdXQiKTtyZXR1cm4gdi5zaXplKDIuMikuc2l6ZURvbWFpbihbMi4yLDIuMl0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRDbGljay5hcmVhIixmdW5jdGlvbihlKXttLmFyZWFDbGljayhlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24oZSl7ZS5wb3M9W2UucG9zWzBdK3QubGVmdCxlLnBvc1sxXSt0LnRvcF0sbS50b29sdGlwU2hvdyhlKX0pLHYuZGlzcGF0Y2gub24oImVsZW1lbnRNb3VzZW91dC50b29sdGlwIixmdW5jdGlvbihlKXttLnRvb2x0aXBIaWRlKGUpfSksZy5kaXNwYXRjaD1tLGcuc2NhdHRlcj12LGQzLnJlYmluZChnLHYsImludGVyYWN0aXZlIiwic2l6ZSIsInhTY2FsZSIsInlTY2FsZSIsInpTY2FsZSIsInhEb21haW4iLCJ5RG9tYWluIiwieFJhbmdlIiwieVJhbmdlIiwic2l6ZURvbWFpbiIsImZvcmNlWCIsImZvcmNlWSIsImZvcmNlU2l6ZSIsImNsaXBWb3Jvbm9pIiwidXNlVm9yb25vaSIsImNsaXBSYWRpdXMiLCJoaWdobGlnaHRQb2ludCIsImNsZWFySGlnaGxpZ2h0cyIpLGcub3B0aW9ucz1lLnV0aWxzLm9wdGlvbnNGdW5jLmJpbmQoZyksZy54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWQzLmZ1bmN0b3IoZSksZyk6b30sZy55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWQzLmZ1bmN0b3IoZSksZyk6dX0sZy5tYXJnaW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQudG9wPXR5cGVvZiBlLnRvcCE9InVuZGVmaW5lZCI/ZS50b3A6dC50b3AsdC5yaWdodD10eXBlb2YgZS5yaWdodCE9InVuZGVmaW5lZCI/ZS5yaWdodDp0LnJpZ2h0LHQuYm90dG9tPXR5cGVvZiBlLmJvdHRvbSE9InVuZGVmaW5lZCI/ZS5ib3R0b206dC5ib3R0b20sdC5sZWZ0PXR5cGVvZiBlLmxlZnQhPSJ1bmRlZmluZWQiP2UubGVmdDp0LmxlZnQsZyk6dH0sZy53aWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLGcpOm59LGcuaGVpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsZyk6cn0sZy5jbGlwRWRnZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1lLGcpOmh9LGcuY29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZS51dGlscy5nZXRDb2xvcih0KSxnKTppfSxnLm9mZnNldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLGcpOmZ9LGcub3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZSxnKTpsfSxnLnN0eWxlPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhO2E9ZTtzd2l0Y2goYSl7Y2FzZSJzdGFjayI6Zy5vZmZzZXQoInplcm8iKSxnLm9yZGVyKCJkZWZhdWx0Iik7YnJlYWs7Y2FzZSJzdHJlYW0iOmcub2Zmc2V0KCJ3aWdnbGUiKSxnLm9yZGVyKCJpbnNpZGUtb3V0Iik7YnJlYWs7Y2FzZSJzdHJlYW0tY2VudGVyIjpnLm9mZnNldCgic2lsaG91ZXR0ZSIpLGcub3JkZXIoImluc2lkZS1vdXQiKTticmVhaztjYXNlImV4cGFuZCI6Zy5vZmZzZXQoImV4cGFuZCIpLGcub3JkZXIoImRlZmF1bHQiKX1yZXR1cm4gZ30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLGcpOmN9LGd9LGUubW9kZWxzLnN0YWNrZWRBcmVhQ2hhcnQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTyh5KXtyZXR1cm4geS5lYWNoKGZ1bmN0aW9uKHkpe3ZhciBNPWQzLnNlbGVjdCh0aGlzKSxfPXRoaXMsRD0oYXx8cGFyc2VJbnQoTS5zdHlsZSgid2lkdGgiKSl8fDk2MCktdS5sZWZ0LXUucmlnaHQsUD0oZnx8cGFyc2VJbnQoTS5zdHlsZSgiaGVpZ2h0IikpfHw0MDApLXUudG9wLXUuYm90dG9tO08udXBkYXRlPWZ1bmN0aW9uKCl7TS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTCkuY2FsbChPKX0sTy5jb250YWluZXI9dGhpcyxTLmRpc2FibGVkPXkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiEhZS5kaXNhYmxlZH0pO2lmKCF4KXt2YXIgSDt4PXt9O2ZvcihIIGluIFMpU1tIXWluc3RhbmNlb2YgQXJyYXk/eFtIXT1TW0hdLnNsaWNlKDApOnhbSF09U1tIXX1pZigheXx8IXkubGVuZ3RofHwheS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzLmxlbmd0aH0pLmxlbmd0aCl7dmFyIEI9TS5zZWxlY3RBbGwoIi5udi1ub0RhdGEiKS5kYXRhKFtUXSk7cmV0dXJuIEIuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm52ZDMgbnYtbm9EYXRhIikuYXR0cigiZHkiLCItLjdlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEIuYXR0cigieCIsdS5sZWZ0K0QvMikuYXR0cigieSIsdS50b3ArUC8yKS50ZXh0KGZ1bmN0aW9uKGUpe3JldHVybiBlfSksT31NLnNlbGVjdEFsbCgiLm52LW5vRGF0YSIpLnJlbW92ZSgpLGI9dC54U2NhbGUoKSx3PXQueVNjYWxlKCk7dmFyIGo9TS5zZWxlY3RBbGwoImcubnYtd3JhcC5udi1zdGFja2VkQXJlYUNoYXJ0IikuZGF0YShbeV0pLEY9ai5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnZkMyBudi13cmFwIG52LXN0YWNrZWRBcmVhQ2hhcnQiKS5hcHBlbmQoImciKSxJPWouc2VsZWN0KCJnIik7Ri5hcHBlbmQoInJlY3QiKS5zdHlsZSgib3BhY2l0eSIsMCksRi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm52LXggbnYtYXhpcyIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi15IG52LWF4aXMiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtc3RhY2tlZFdyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtbGVnZW5kV3JhcCIpLEYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJudi1jb250cm9sc1dyYXAiKSxGLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibnYtaW50ZXJhY3RpdmUiKSxJLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixEKS5hdHRyKCJoZWlnaHQiLFApO2lmKGgpe3ZhciBxPWM/RC1DOkQ7aS53aWR0aChxKSxJLnNlbGVjdCgiLm52LWxlZ2VuZFdyYXAiKS5kYXR1bSh5KS5jYWxsKGkpLHUudG9wIT1pLmhlaWdodCgpJiYodS50b3A9aS5oZWlnaHQoKSxQPShmfHxwYXJzZUludChNLnN0eWxlKCJoZWlnaHQiKSl8fDQwMCktdS50b3AtdS5ib3R0b20pLEkuc2VsZWN0KCIubnYtbGVnZW5kV3JhcCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhELXEpKyIsIisgLXUudG9wKyIpIil9aWYoYyl7dmFyIFI9W3trZXk6IlN0YWNrZWQiLGRpc2FibGVkOnQub2Zmc2V0KCkhPSJ6ZXJvIn0se2tleToiU3RyZWFtIixkaXNhYmxlZDp0Lm9mZnNldCgpIT0id2lnZ2xlIn0se2tleToiRXhwYW5kZWQiLGRpc2FibGVkOnQub2Zmc2V0KCkhPSJleHBhbmQifV07Qz1rLmxlbmd0aC8zKjI2MCxSPVIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBrLmluZGV4T2YoZS5rZXkpPi0xfSkscy53aWR0aChDKS5jb2xvcihbIiM0NDQiLCIjNDQ0IiwiIzQ0NCJdKSxJLnNlbGVjdCgiLm52LWNvbnRyb2xzV3JhcCIpLmRhdHVtKFIpLmNhbGwocyksdS50b3AhPU1hdGgubWF4KHMuaGVpZ2h0KCksaS5oZWlnaHQoKSkmJih1LnRvcD1NYXRoLm1heChzLmhlaWdodCgpLGkuaGVpZ2h0KCkpLFA9KGZ8fHBhcnNlSW50KE0uc3R5bGUoImhlaWdodCIpKXx8NDAwKS11LnRvcC11LmJvdHRvbSksSS5zZWxlY3QoIi5udi1jb250cm9sc1dyYXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKyAtdS50b3ArIikiKX1qLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UubGVmdCsiLCIrdS50b3ArIikiKSx2JiZJLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0QrIiwwKSIpLG0mJihvLndpZHRoKEQpLmhlaWdodChQKS5tYXJnaW4oe2xlZnQ6dS5sZWZ0LHRvcDp1LnRvcH0pLnN2Z0NvbnRhaW5lcihNKS54U2NhbGUoYiksai5zZWxlY3QoIi5udi1pbnRlcmFjdGl2ZSIpLmNhbGwobykpLHQud2lkdGgoRCkuaGVpZ2h0KFApO3ZhciBVPUkuc2VsZWN0KCIubnYtc3RhY2tlZFdyYXAiKS5kYXR1bSh5KTtVLnRyYW5zaXRpb24oKS5jYWxsKHQpLHAmJihuLnNjYWxlKGIpLnRpY2tzKEQvMTAwKS50aWNrU2l6ZSgtUCwwKSxJLnNlbGVjdCgiLm52LXgubnYtYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrUCsiKSIpLEkuc2VsZWN0KCIubnYteC5udi1heGlzIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLmNhbGwobikpLGQmJihyLnNjYWxlKHcpLnRpY2tzKHQub2Zmc2V0KCk9PSJ3aWdnbGUiPzA6UC8zNikudGlja1NpemUoLUQsMCkuc2V0VGlja0Zvcm1hdCh0Lm9mZnNldCgpPT0iZXhwYW5kIj9kMy5mb3JtYXQoIiUiKTpFKSxJLnNlbGVjdCgiLm52LXkubnYtYXhpcyIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5jYWxsKHIpKSx0LmRpc3BhdGNoLm9uKCJhcmVhQ2xpY2sudG9nZ2xlIixmdW5jdGlvbihlKXt5LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5kaXNhYmxlZH0pLmxlbmd0aD09PTE/eT15Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD0hMSxlfSk6eT15Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiB0LmRpc2FibGVkPW4hPWUuc2VyaWVzSW5kZXgsdH0pLFMuZGlzYWJsZWQ9eS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmRpc2FibGVkfSksTi5zdGF0ZUNoYW5nZShTKSxPLnVwZGF0ZSgpfSksaS5kaXNwYXRjaC5vbigic3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKGUpe1MuZGlzYWJsZWQ9ZS5kaXNhYmxlZCxOLnN0YXRlQ2hhbmdlKFMpLE8udXBkYXRlKCl9KSxzLmRpc3BhdGNoLm9uKCJsZWdlbmRDbGljayIsZnVuY3Rpb24oZSxuKXtpZighZS5kaXNhYmxlZClyZXR1cm47Uj1SLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD0hMCxlfSksZS5kaXNhYmxlZD0hMTtzd2l0Y2goZS5rZXkpe2Nhc2UiU3RhY2tlZCI6dC5zdHlsZSgic3RhY2siKTticmVhaztjYXNlIlN0cmVhbSI6dC5zdHlsZSgic3RyZWFtIik7YnJlYWs7Y2FzZSJFeHBhbmRlZCI6dC5zdHlsZSgiZXhwYW5kIil9Uy5zdHlsZT10LnN0eWxlKCksTi5zdGF0ZUNoYW5nZShTKSxPLnVwZGF0ZSgpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlbW92ZSIsZnVuY3Rpb24oaSl7dC5jbGVhckhpZ2hsaWdodHMoKTt2YXIgcyxhLGYsYz1bXTt5LmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiBlLnNlcmllc0luZGV4PXQsIWUuZGlzYWJsZWR9KS5mb3JFYWNoKGZ1bmN0aW9uKG4scil7YT1lLmludGVyYWN0aXZlQmlzZWN0KG4udmFsdWVzLGkucG9pbnRYVmFsdWUsTy54KCkpLHQuaGlnaGxpZ2h0UG9pbnQocixhLCEwKTt2YXIgbz1uLnZhbHVlc1thXTtpZih0eXBlb2Ygbz09InVuZGVmaW5lZCIpcmV0dXJuO3R5cGVvZiBzPT0idW5kZWZpbmVkIiYmKHM9byksdHlwZW9mIGY9PSJ1bmRlZmluZWQiJiYoZj1PLnhTY2FsZSgpKE8ueCgpKG8sYSkpKSxjLnB1c2goe2tleTpuLmtleSx2YWx1ZTpPLnkoKShvLGEpLGNvbG9yOmwobixuLnNlcmllc0luZGV4KX0pfSk7dmFyIGg9bi50aWNrRm9ybWF0KCkoTy54KCkocyxhKSk7by50b29sdGlwLnBvc2l0aW9uKHtsZWZ0OmYrdS5sZWZ0LHRvcDppLm1vdXNlWSt1LnRvcH0pLmNoYXJ0Q29udGFpbmVyKF8ucGFyZW50Tm9kZSkuZW5hYmxlZChnKS52YWx1ZUZvcm1hdHRlcihmdW5jdGlvbihlLHQpe3JldHVybiByLnRpY2tGb3JtYXQoKShlKX0pLmRhdGEoe3ZhbHVlOmgsc2VyaWVzOmN9KSgpLG8ucmVuZGVyR3VpZGVMaW5lKGYpfSksby5kaXNwYXRjaC5vbigiZWxlbWVudE1vdXNlb3V0IixmdW5jdGlvbihlKXtOLnRvb2x0aXBIaWRlKCksdC5jbGVhckhpZ2hsaWdodHMoKX0pLE4ub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtnJiZBKGUsXy5wYXJlbnROb2RlKX0pLE4ub24oImNoYW5nZVN0YXRlIixmdW5jdGlvbihlKXt0eXBlb2YgZS5kaXNhYmxlZCE9InVuZGVmaW5lZCImJih5LmZvckVhY2goZnVuY3Rpb24odCxuKXt0LmRpc2FibGVkPWUuZGlzYWJsZWRbbl19KSxTLmRpc2FibGVkPWUuZGlzYWJsZWQpLHR5cGVvZiBlLnN0eWxlIT0idW5kZWZpbmVkIiYmdC5zdHlsZShlLnN0eWxlKSxPLnVwZGF0ZSgpfSl9KSxPfXZhciB0PWUubW9kZWxzLnN0YWNrZWRBcmVhKCksbj1lLm1vZGVscy5heGlzKCkscj1lLm1vZGVscy5heGlzKCksaT1lLm1vZGVscy5sZWdlbmQoKSxzPWUubW9kZWxzLmxlZ2VuZCgpLG89ZS5pbnRlcmFjdGl2ZUd1aWRlbGluZSgpLHU9e3RvcDozMCxyaWdodDoyNSxib3R0b206NTAsbGVmdDo2MH0sYT1udWxsLGY9bnVsbCxsPWUudXRpbHMuZGVmYXVsdENvbG9yKCksYz0hMCxoPSEwLHA9ITAsZD0hMCx2PSExLG09ITEsZz0hMCx5PWZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIjxoMz4iK2UrIjwvaDM+IisiPHA+IituKyIgb24gIit0KyI8L3A+In0sYix3LEU9ZDMuZm9ybWF0KCIsLjJmIiksUz17c3R5bGU6dC5zdHlsZSgpfSx4PW51bGwsVD0iTm8gRGF0YSBBdmFpbGFibGUuIixOPWQzLmRpc3BhdGNoKCJ0b29sdGlwU2hvdyIsInRvb2x0aXBIaWRlIiwic3RhdGVDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIpLEM9MjUwLGs9WyJTdGFja2VkIiwiU3RyZWFtIiwiRXhwYW5kZWQiXSxMPTI1MDtuLm9yaWVudCgiYm90dG9tIikudGlja1BhZGRpbmcoNyksci5vcmllbnQodj8icmlnaHQiOiJsZWZ0Iikscy51cGRhdGVTdGF0ZSghMSk7dmFyIEE9ZnVuY3Rpb24oaSxzKXt2YXIgbz1pLnBvc1swXSsocy5vZmZzZXRMZWZ0fHwwKSx1PWkucG9zWzFdKyhzLm9mZnNldFRvcHx8MCksYT1uLnRpY2tGb3JtYXQoKSh0LngoKShpLnBvaW50LGkucG9pbnRJbmRleCkpLGY9ci50aWNrRm9ybWF0KCkodC55KCkoaS5wb2ludCxpLnBvaW50SW5kZXgpKSxsPXkoaS5zZXJpZXMua2V5LGEsZixpLE8pO2UudG9vbHRpcC5zaG93KFtvLHVdLGwsaS52YWx1ZTwwPyJuIjoicyIsbnVsbCxzKX07cmV0dXJuIHQuZGlzcGF0Y2gub24oInRvb2x0aXBTaG93IixmdW5jdGlvbihlKXtlLnBvcz1bZS5wb3NbMF0rdS5sZWZ0LGUucG9zWzFdK3UudG9wXSxOLnRvb2x0aXBTaG93KGUpfSksdC5kaXNwYXRjaC5vbigidG9vbHRpcEhpZGUiLGZ1bmN0aW9uKGUpe04udG9vbHRpcEhpZGUoZSl9KSxOLm9uKCJ0b29sdGlwSGlkZSIsZnVuY3Rpb24oKXtnJiZlLnRvb2x0aXAuY2xlYW51cCgpfSksTy5kaXNwYXRjaD1OLE8uc3RhY2tlZD10LE8ubGVnZW5kPWksTy5jb250cm9scz1zLE8ueEF4aXM9bixPLnlBeGlzPXIsTy5pbnRlcmFjdGl2ZUxheWVyPW8sZDMucmViaW5kKE8sdCwieCIsInkiLCJzaXplIiwieFNjYWxlIiwieVNjYWxlIiwieERvbWFpbiIsInlEb21haW4iLCJ4UmFuZ2UiLCJ5UmFuZ2UiLCJzaXplRG9tYWluIiwiaW50ZXJhY3RpdmUiLCJ1c2VWb3Jvbm9pIiwib2Zmc2V0Iiwib3JkZXIiLCJzdHlsZSIsImNsaXBFZGdlIiwiZm9yY2VYIiwiZm9yY2VZIiwiZm9yY2VTaXplIiwiaW50ZXJwb2xhdGUiKSxPLm9wdGlvbnM9ZS51dGlscy5vcHRpb25zRnVuYy5iaW5kKE8pLE8ubWFyZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1LnRvcD10eXBlb2YgZS50b3AhPSJ1bmRlZmluZWQiP2UudG9wOnUudG9wLHUucmlnaHQ9dHlwZW9mIGUucmlnaHQhPSJ1bmRlZmluZWQiP2UucmlnaHQ6dS5yaWdodCx1LmJvdHRvbT10eXBlb2YgZS5ib3R0b20hPSJ1bmRlZmluZWQiP2UuYm90dG9tOnUuYm90dG9tLHUubGVmdD10eXBlb2YgZS5sZWZ0IT0idW5kZWZpbmVkIj9lLmxlZnQ6dS5sZWZ0LE8pOnV9LE8ud2lkdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZSxPKTphfSxPLmhlaWdodD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1lLE8pOmZ9LE8uY29sb3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ZS51dGlscy5nZXRDb2xvcihuKSxpLmNvbG9yKGwpLHQuY29sb3IobCksTyk6bH0sTy5zaG93Q29udHJvbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ZSxPKTpjfSxPLnNob3dMZWdlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ZSxPKTpofSxPLnNob3dYQXhpcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1lLE8pOnB9LE8uc2hvd1lBeGlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPWUsTyk6ZH0sTy5yaWdodEFsaWduWUF4aXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ZSxyLm9yaWVudChlPyJyaWdodCI6ImxlZnQiKSxPKTp2fSxPLnVzZUludGVyYWN0aXZlR3VpZGVsaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWUsZT09PSEwJiYoTy5pbnRlcmFjdGl2ZSghMSksTy51c2VWb3Jvbm9pKCExKSksTyk6bX0sTy50b29sdGlwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PWUsTyk6eX0sTy50b29sdGlwcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1lLE8pOmd9LE8udG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9ZSxPKTp5fSxPLnN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPWUsTyk6U30sTy5kZWZhdWx0U3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9ZSxPKTp4fSxPLm5vRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1lLE8pOlR9LE8udHJhbnNpdGlvbkR1cmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPWUsTyk6TH0sTy5jb250cm9sc0RhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ZSxPKTprfSxyLnNldFRpY2tGb3JtYXQ9ci50aWNrRm9ybWF0LHIudGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1lLHIpOkV9LE99fSkoKTs="></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIGQzLmZpc2hleWUgPSB7CiAgICBzY2FsZTogZnVuY3Rpb24oc2NhbGVUeXBlKSB7CiAgICAgIHJldHVybiBkM19maXNoZXllX3NjYWxlKHNjYWxlVHlwZSgpLCAzLCAwKTsKICAgIH0sCiAgICBjaXJjdWxhcjogZnVuY3Rpb24oKSB7CiAgICAgIHZhciByYWRpdXMgPSAyMDAsCiAgICAgICAgICBkaXN0b3J0aW9uID0gMiwKICAgICAgICAgIGswLAogICAgICAgICAgazEsCiAgICAgICAgICBmb2N1cyA9IFswLCAwXTsKCiAgICAgIGZ1bmN0aW9uIGZpc2hleWUoZCkgewogICAgICAgIHZhciBkeCA9IGQueCAtIGZvY3VzWzBdLAogICAgICAgICAgICBkeSA9IGQueSAtIGZvY3VzWzFdLAogICAgICAgICAgICBkZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7CiAgICAgICAgaWYgKCFkZCB8fCBkZCA+PSByYWRpdXMpIHJldHVybiB7eDogZC54LCB5OiBkLnksIHo6IDF9OwogICAgICAgIHZhciBrID0gazAgKiAoMSAtIE1hdGguZXhwKC1kZCAqIGsxKSkgLyBkZCAqIC43NSArIC4yNTsKICAgICAgICByZXR1cm4ge3g6IGZvY3VzWzBdICsgZHggKiBrLCB5OiBmb2N1c1sxXSArIGR5ICogaywgejogTWF0aC5taW4oaywgMTApfTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gcmVzY2FsZSgpIHsKICAgICAgICBrMCA9IE1hdGguZXhwKGRpc3RvcnRpb24pOwogICAgICAgIGswID0gazAgLyAoazAgLSAxKSAqIHJhZGl1czsKICAgICAgICBrMSA9IGRpc3RvcnRpb24gLyByYWRpdXM7CiAgICAgICAgcmV0dXJuIGZpc2hleWU7CiAgICAgIH0KCiAgICAgIGZpc2hleWUucmFkaXVzID0gZnVuY3Rpb24oXykgewogICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHJhZGl1czsKICAgICAgICByYWRpdXMgPSArXzsKICAgICAgICByZXR1cm4gcmVzY2FsZSgpOwogICAgICB9OwoKICAgICAgZmlzaGV5ZS5kaXN0b3J0aW9uID0gZnVuY3Rpb24oXykgewogICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRpc3RvcnRpb247CiAgICAgICAgZGlzdG9ydGlvbiA9ICtfOwogICAgICAgIHJldHVybiByZXNjYWxlKCk7CiAgICAgIH07CgogICAgICBmaXNoZXllLmZvY3VzID0gZnVuY3Rpb24oXykgewogICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGZvY3VzOwogICAgICAgIGZvY3VzID0gXzsKICAgICAgICByZXR1cm4gZmlzaGV5ZTsKICAgICAgfTsKCiAgICAgIHJldHVybiByZXNjYWxlKCk7CiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gZDNfZmlzaGV5ZV9zY2FsZShzY2FsZSwgZCwgYSkgewoKICAgIGZ1bmN0aW9uIGZpc2hleWUoXykgewogICAgICB2YXIgeCA9IHNjYWxlKF8pLAogICAgICAgICAgbGVmdCA9IHggPCBhLAogICAgICAgICAgdiwKICAgICAgICAgIHJhbmdlID0gZDMuZXh0ZW50KHNjYWxlLnJhbmdlKCkpLAogICAgICAgICAgbWluID0gcmFuZ2VbMF0sCiAgICAgICAgICBtYXggPSByYW5nZVsxXSwKICAgICAgICAgIG0gPSBsZWZ0ID8gYSAtIG1pbiA6IG1heCAtIGE7CiAgICAgIGlmIChtID09IDApIG0gPSBtYXggLSBtaW47CiAgICAgIHJldHVybiAobGVmdCA/IC0xIDogMSkgKiBtICogKGQgKyAxKSAvIChkICsgKG0gLyBNYXRoLmFicyh4IC0gYSkpKSArIGE7CiAgICB9CgogICAgZmlzaGV5ZS5kaXN0b3J0aW9uID0gZnVuY3Rpb24oXykgewogICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkOwogICAgICBkID0gK187CiAgICAgIHJldHVybiBmaXNoZXllOwogICAgfTsKCiAgICBmaXNoZXllLmZvY3VzID0gZnVuY3Rpb24oXykgewogICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhOwogICAgICBhID0gK187CiAgICAgIHJldHVybiBmaXNoZXllOwogICAgfTsKCiAgICBmaXNoZXllLmNvcHkgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGQzX2Zpc2hleWVfc2NhbGUoc2NhbGUuY29weSgpLCBkLCBhKTsKICAgIH07CgogICAgZmlzaGV5ZS5uaWNlID0gc2NhbGUubmljZTsKICAgIGZpc2hleWUudGlja3MgPSBzY2FsZS50aWNrczsKICAgIGZpc2hleWUudGlja0Zvcm1hdCA9IHNjYWxlLnRpY2tGb3JtYXQ7CiAgICByZXR1cm4gZDMucmViaW5kKGZpc2hleWUsIHNjYWxlLCAiZG9tYWluIiwgInJhbmdlIik7CiAgfQp9KSgpOwo="></script>
</head>
<body style="opacity: 0">
<slides class="layout-widescreen">
<!-- LOGO SLIDE -->
<slide class="title-slide segue nobackground">
<hgroup class="auto-fadein">
<h1>Standalone HTML</h1>
<h2>Slidify and rCharts</h2>
<p><br/></p>
</hgroup>
<article></article>
</slide>
<!-- SLIDES -->
<slide class="" id="slide-1" style="background:;">
<hgroup>
<h2>Note</h2>
</hgroup>
<article data-timings="">
<p>This is a short demo of proof-of-concept of creating completely standalone HTML file using slidify with embedded rCharts. To help me test it, please do the following</p>
<ol>
<li>Download the source of this page and save as HTML</li>
<li>Turn of wi-fi </li>
<li>Refresh your browser page to make sure that there is no caching</li>
<li>Check to see if the presentation still works. </li>
</ol>
<p>Everything except fonts should work, since they have been embedded as data-URIs.</p>
</article>
<!-- Presenter Notes -->
</slide>
<slide class="" id="slide-2" style="background:;">
<article data-timings="">
<pre><code class="r">library(rCharts)
n1 &lt;- nPlot(mpg ~ wt, data = mtcars, type = &quot;scatterChart&quot;)
n1$show(&quot;inline&quot;)
</code></pre>
<div id = 'chartdd6c16c35818' class = 'rChart nvd3'></div>
<script type='text/javascript'>
$(document).ready(function(){
drawchartdd6c16c35818()
});
function drawchartdd6c16c35818(){
var opts = {
"dom": "chartdd6c16c35818",
"width": 800,
"height": 400,
"process_data": true,
"x": "wt",
"y": "mpg",
"type": "scatterChart",
"id": "chartdd6c16c35818"
},
data = [
{
"mpg": 21,
"cyl": 6,
"disp": 160,
"hp": 110,
"drat": 3.9,
"wt": 2.62,
"qsec": 16.46,
"vs": 0,
"am": 1,
"gear": 4,
"carb": 4
},
{
"mpg": 21,
"cyl": 6,
"disp": 160,
"hp": 110,
"drat": 3.9,
"wt": 2.875,
"qsec": 17.02,
"vs": 0,
"am": 1,
"gear": 4,
"carb": 4
},
{
"mpg": 22.8,
"cyl": 4,
"disp": 108,
"hp": 93,
"drat": 3.85,
"wt": 2.32,
"qsec": 18.61,
"vs": 1,
"am": 1,
"gear": 4,
"carb": 1
},
{
"mpg": 21.4,
"cyl": 6,
"disp": 258,
"hp": 110,
"drat": 3.08,
"wt": 3.215,
"qsec": 19.44,
"vs": 1,
"am": 0,
"gear": 3,
"carb": 1
},
{
"mpg": 18.7,
"cyl": 8,
"disp": 360,
"hp": 175,
"drat": 3.15,
"wt": 3.44,
"qsec": 17.02,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 2
},
{
"mpg": 18.1,
"cyl": 6,
"disp": 225,
"hp": 105,
"drat": 2.76,
"wt": 3.46,
"qsec": 20.22,
"vs": 1,
"am": 0,
"gear": 3,
"carb": 1
},
{
"mpg": 14.3,
"cyl": 8,
"disp": 360,
"hp": 245,
"drat": 3.21,
"wt": 3.57,
"qsec": 15.84,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 4
},
{
"mpg": 24.4,
"cyl": 4,
"disp": 146.7,
"hp": 62,
"drat": 3.69,
"wt": 3.19,
"qsec": 20,
"vs": 1,
"am": 0,
"gear": 4,
"carb": 2
},
{
"mpg": 22.8,
"cyl": 4,
"disp": 140.8,
"hp": 95,
"drat": 3.92,
"wt": 3.15,
"qsec": 22.9,
"vs": 1,
"am": 0,
"gear": 4,
"carb": 2
},
{
"mpg": 19.2,
"cyl": 6,
"disp": 167.6,
"hp": 123,
"drat": 3.92,
"wt": 3.44,
"qsec": 18.3,
"vs": 1,
"am": 0,
"gear": 4,
"carb": 4
},
{
"mpg": 17.8,
"cyl": 6,
"disp": 167.6,
"hp": 123,
"drat": 3.92,
"wt": 3.44,
"qsec": 18.9,
"vs": 1,
"am": 0,
"gear": 4,
"carb": 4
},
{
"mpg": 16.4,
"cyl": 8,
"disp": 275.8,
"hp": 180,
"drat": 3.07,
"wt": 4.07,
"qsec": 17.4,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 3
},
{
"mpg": 17.3,
"cyl": 8,
"disp": 275.8,
"hp": 180,
"drat": 3.07,
"wt": 3.73,
"qsec": 17.6,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 3
},
{
"mpg": 15.2,
"cyl": 8,
"disp": 275.8,
"hp": 180,
"drat": 3.07,
"wt": 3.78,
"qsec": 18,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 3
},
{
"mpg": 10.4,
"cyl": 8,
"disp": 472,
"hp": 205,
"drat": 2.93,
"wt": 5.25,
"qsec": 17.98,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 4
},
{
"mpg": 10.4,
"cyl": 8,
"disp": 460,
"hp": 215,
"drat": 3,
"wt": 5.424,
"qsec": 17.82,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 4
},
{
"mpg": 14.7,
"cyl": 8,
"disp": 440,
"hp": 230,
"drat": 3.23,
"wt": 5.345,
"qsec": 17.42,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 4
},
{
"mpg": 32.4,
"cyl": 4,
"disp": 78.7,
"hp": 66,
"drat": 4.08,
"wt": 2.2,
"qsec": 19.47,
"vs": 1,
"am": 1,
"gear": 4,
"carb": 1
},
{
"mpg": 30.4,
"cyl": 4,
"disp": 75.7,
"hp": 52,
"drat": 4.93,
"wt": 1.615,
"qsec": 18.52,
"vs": 1,
"am": 1,
"gear": 4,
"carb": 2
},
{
"mpg": 33.9,
"cyl": 4,
"disp": 71.1,
"hp": 65,
"drat": 4.22,
"wt": 1.835,
"qsec": 19.9,
"vs": 1,
"am": 1,
"gear": 4,
"carb": 1
},
{
"mpg": 21.5,
"cyl": 4,
"disp": 120.1,
"hp": 97,
"drat": 3.7,
"wt": 2.465,
"qsec": 20.01,
"vs": 1,
"am": 0,
"gear": 3,
"carb": 1
},
{
"mpg": 15.5,
"cyl": 8,
"disp": 318,
"hp": 150,
"drat": 2.76,
"wt": 3.52,
"qsec": 16.87,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 2
},
{
"mpg": 15.2,
"cyl": 8,
"disp": 304,
"hp": 150,
"drat": 3.15,
"wt": 3.435,
"qsec": 17.3,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 2
},
{
"mpg": 13.3,
"cyl": 8,
"disp": 350,
"hp": 245,
"drat": 3.73,
"wt": 3.84,
"qsec": 15.41,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 4
},
{
"mpg": 19.2,
"cyl": 8,
"disp": 400,
"hp": 175,
"drat": 3.08,
"wt": 3.845,
"qsec": 17.05,
"vs": 0,
"am": 0,
"gear": 3,
"carb": 2
},
{
"mpg": 27.3,
"cyl": 4,
"disp": 79,
"hp": 66,
"drat": 4.08,
"wt": 1.935,
"qsec": 18.9,
"vs": 1,
"am": 1,
"gear": 4,
"carb": 1
},
{
"mpg": 26,
"cyl": 4,
"disp": 120.3,
"hp": 91,
"drat": 4.43,
"wt": 2.14,
"qsec": 16.7,
"vs": 0,
"am": 1,
"gear": 5,
"carb": 2
},
{
"mpg": 30.4,
"cyl": 4,
"disp": 95.1,
"hp": 113,
"drat": 3.77,
"wt": 1.513,
"qsec": 16.9,
"vs": 1,
"am": 1,
"gear": 5,
"carb": 2
},
{
"mpg": 15.8,
"cyl": 8,
"disp": 351,
"hp": 264,
"drat": 4.22,
"wt": 3.17,
"qsec": 14.5,
"vs": 0,
"am": 1,
"gear": 5,
"carb": 4
},
{
"mpg": 19.7,
"cyl": 6,
"disp": 145,
"hp": 175,
"drat": 3.62,
"wt": 2.77,
"qsec": 15.5,
"vs": 0,
"am": 1,
"gear": 5,
"carb": 6
},
{
"mpg": 15,
"cyl": 8,
"disp": 301,
"hp": 335,
"drat": 3.54,
"wt": 3.57,
"qsec": 14.6,
"vs": 0,
"am": 1,
"gear": 5,
"carb": 8
},
{
"mpg": 21.4,
"cyl": 4,
"disp": 121,
"hp": 109,
"drat": 4.11,
"wt": 2.78,
"qsec": 18.6,
"vs": 1,
"am": 1,
"gear": 4,
"carb": 2
}
]
if(!(opts.type==="pieChart" || opts.type==="sparklinePlus" || opts.type==="bulletChart")) {
var data = d3.nest()
.key(function(d){
//return opts.group === undefined ? 'main' : d[opts.group]
//instead of main would think a better default is opts.x
return opts.group === undefined ? opts.y : d[opts.group];
})
.entries(data);
}
if (opts.disabled != undefined){
data.map(function(d, i){
d.disabled = opts.disabled[i]
})
}
nv.addGraph(function() {
var chart = nv.models[opts.type]()
.width(opts.width)
.height(opts.height)
if (opts.type != "bulletChart"){
chart
.x(function(d) { return d[opts.x] })
.y(function(d) { return d[opts.y] })
}
d3.select("#" + opts.id)
.append('svg')
.datum(data)
.transition().duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
};
</script>
</article>
<!-- Presenter Notes -->
</slide>
<slide class="backdrop"></slide>
</slides>
<div class="pagination pagination-small" id='io2012-ptoc' style="display:none;">
<ul>
<li>
<a href="#" target="_self" rel='tooltip'
data-slide=1 title='Note'>
1
</a>
</li>
<li>
<a href="#" target="_self" rel='tooltip'
data-slide=2 title=''>
2
</a>
</li>
</ul>
</div> <!--[if IE]>
<script
src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js">
</script>
<script>CFInstall.check({mode: 'overlay'});</script>
<![endif]-->
</body>
<!-- Load Javascripts for Widgets -->
<script src="data:application/javascript;base64,LyoqCiogQm9vdHN0cmFwLmpzIGJ5IEBmYXQgJiBAbWRvCiogcGx1Z2luczogYm9vdHN0cmFwLXRyYW5zaXRpb24uanMsIGJvb3RzdHJhcC1tb2RhbC5qcywgYm9vdHN0cmFwLWRyb3Bkb3duLmpzLCBib290c3RyYXAtc2Nyb2xsc3B5LmpzLCBib290c3RyYXAtdGFiLmpzLCBib290c3RyYXAtdG9vbHRpcC5qcywgYm9vdHN0cmFwLXBvcG92ZXIuanMsIGJvb3RzdHJhcC1hZmZpeC5qcywgYm9vdHN0cmFwLWFsZXJ0LmpzLCBib290c3RyYXAtYnV0dG9uLmpzLCBib290c3RyYXAtY29sbGFwc2UuanMsIGJvb3RzdHJhcC1jYXJvdXNlbC5qcywgYm9vdHN0cmFwLXR5cGVhaGVhZC5qcwoqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CiovCiFmdW5jdGlvbihhKXthKGZ1bmN0aW9uKCl7YS5zdXBwb3J0LnRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLGI9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LGM7Zm9yKGMgaW4gYilpZihhLnN0eWxlW2NdIT09dW5kZWZpbmVkKXJldHVybiBiW2NdfSgpO3JldHVybiBhJiZ7ZW5kOmF9fSgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbihiLGMpe3RoaXMub3B0aW9ucz1jLHRoaXMuJGVsZW1lbnQ9YShiKS5kZWxlZ2F0ZSgnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsImNsaWNrLmRpc21pc3MubW9kYWwiLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1ib2R5IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlKX07Yi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmIsdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5pc1Nob3duPyJoaWRlIjoic2hvdyJdKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9YS5FdmVudCgic2hvdyIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihjKTtpZih0aGlzLmlzU2hvd258fGMuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2EoImJvZHkiKS5hZGRDbGFzcygibW9kYWwtb3BlbiIpLHRoaXMuaXNTaG93bj0hMCx0aGlzLmVzY2FwZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgYz1hLnN1cHBvcnQudHJhbnNpdGlvbiYmYi4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpO2IuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RofHxiLiRlbGVtZW50LmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLGIuJGVsZW1lbnQuc2hvdygpLGMmJmIuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsYi4kZWxlbWVudC5hZGRDbGFzcygiaW4iKS5hdHRyKCJhcmlhLWhpZGRlbiIsITEpLmZvY3VzKCksYi5lbmZvcmNlRm9jdXMoKSxjP2IuJGVsZW1lbnQub25lKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2IuJGVsZW1lbnQudHJpZ2dlcigic2hvd24iKX0pOmIuJGVsZW1lbnQudHJpZ2dlcigic2hvd24iKX0pfSxoaWRlOmZ1bmN0aW9uKGIpe2ImJmIucHJldmVudERlZmF1bHQoKTt2YXIgYz10aGlzO2I9YS5FdmVudCgiaGlkZSIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKTtpZighdGhpcy5pc1Nob3dufHxiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLmlzU2hvd249ITEsYSgiYm9keSIpLnJlbW92ZUNsYXNzKCJtb2RhbC1vcGVuIiksdGhpcy5lc2NhcGUoKSxhKGRvY3VtZW50KS5vZmYoImZvY3VzaW4ubW9kYWwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIiwhMCksYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLmhpZGVXaXRoVHJhbnNpdGlvbigpOnRoaXMuaGlkZU1vZGFsKCl9LGVuZm9yY2VGb2N1czpmdW5jdGlvbigpe3ZhciBiPXRoaXM7YShkb2N1bWVudCkub24oImZvY3VzaW4ubW9kYWwiLGZ1bmN0aW9uKGEpe2IuJGVsZW1lbnRbMF0hPT1hLnRhcmdldCYmIWIuJGVsZW1lbnQuaGFzKGEudGFyZ2V0KS5sZW5ndGgmJmIuJGVsZW1lbnQuZm9jdXMoKX0pfSxlc2NhcGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQub24oImtleXVwLmRpc21pc3MubW9kYWwiLGZ1bmN0aW9uKGIpe2Iud2hpY2g9PTI3JiZhLmhpZGUoKX0pOnRoaXMuaXNTaG93bnx8dGhpcy4kZWxlbWVudC5vZmYoImtleXVwLmRpc21pc3MubW9kYWwiKX0saGlkZVdpdGhUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtiLiRlbGVtZW50Lm9mZihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLGIuaGlkZU1vZGFsKCl9LDUwMCk7dGhpcy4kZWxlbWVudC5vbmUoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGMpLGIuaGlkZU1vZGFsKCl9KX0saGlkZU1vZGFsOmZ1bmN0aW9uKGEpe3RoaXMuJGVsZW1lbnQuaGlkZSgpLnRyaWdnZXIoImhpZGRlbiIpLHRoaXMuYmFja2Ryb3AoKX0scmVtb3ZlQmFja2Ryb3A6ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxiYWNrZHJvcDpmdW5jdGlvbihiKXt2YXIgYz10aGlzLGQ9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpPyJmYWRlIjoiIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGU9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmQ7dGhpcy4kYmFja2Ryb3A9YSgnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgJytkKyciIC8+JykuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksdGhpcy5vcHRpb25zLmJhY2tkcm9wIT0ic3RhdGljIiYmdGhpcy4kYmFja2Ryb3AuY2xpY2soYS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLGUmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpLGU/dGhpcy4kYmFja2Ryb3Aub25lKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxiKTpiKCl9ZWxzZSF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wPyh0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGJhY2tkcm9wLm9uZShhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsYS5wcm94eSh0aGlzLnJlbW92ZUJhY2tkcm9wLHRoaXMpKTp0aGlzLnJlbW92ZUJhY2tkcm9wKCkpOmImJmIoKX19LGEuZm4ubW9kYWw9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoIm1vZGFsIiksZj1hLmV4dGVuZCh7fSxhLmZuLm1vZGFsLmRlZmF1bHRzLGQuZGF0YSgpLHR5cGVvZiBjPT0ib2JqZWN0IiYmYyk7ZXx8ZC5kYXRhKCJtb2RhbCIsZT1uZXcgYih0aGlzLGYpKSx0eXBlb2YgYz09InN0cmluZyI/ZVtjXSgpOmYuc2hvdyYmZS5zaG93KCl9KX0sYS5mbi5tb2RhbC5kZWZhdWx0cz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1iLGEoZnVuY3Rpb24oKXthKCJib2R5Iikub24oImNsaWNrLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihiKXt2YXIgYz1hKHRoaXMpLGQ9Yy5hdHRyKCJocmVmIiksZT1hKGMuYXR0cigiZGF0YS10YXJnZXQiKXx8ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxmPWUuZGF0YSgibW9kYWwiKT8idG9nZ2xlIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChkKSYmZH0sZS5kYXRhKCksYy5kYXRhKCkpO2IucHJldmVudERlZmF1bHQoKSxlLm1vZGFsKGYpLm9uZSgiaGlkZSIsZnVuY3Rpb24oKXtjLmZvY3VzKCl9KX0pfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihhKXtmdW5jdGlvbiBkKCl7ZShhKGIpKS5yZW1vdmVDbGFzcygib3BlbiIpfWZ1bmN0aW9uIGUoYil7dmFyIGM9Yi5hdHRyKCJkYXRhLXRhcmdldCIpLGQ7cmV0dXJuIGN8fChjPWIuYXR0cigiaHJlZiIpLGM9YyYmLyMvLnRlc3QoYykmJmMucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSksZD1hKGMpLGQubGVuZ3RofHwoZD1iLnBhcmVudCgpKSxkfXZhciBiPSJbZGF0YS10b2dnbGU9ZHJvcGRvd25dIixjPWZ1bmN0aW9uKGIpe3ZhciBjPWEoYikub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIix0aGlzLnRvZ2dsZSk7YSgiaHRtbCIpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsZnVuY3Rpb24oKXtjLnBhcmVudCgpLnJlbW92ZUNsYXNzKCJvcGVuIil9KX07Yy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmMsdG9nZ2xlOmZ1bmN0aW9uKGIpe3ZhciBjPWEodGhpcyksZixnO2lmKGMuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpcmV0dXJuO3JldHVybiBmPWUoYyksZz1mLmhhc0NsYXNzKCJvcGVuIiksZCgpLGd8fChmLnRvZ2dsZUNsYXNzKCJvcGVuIiksYy5mb2N1cygpKSwhMX0sa2V5ZG93bjpmdW5jdGlvbihiKXt2YXIgYyxkLGYsZyxoLGk7aWYoIS8oMzh8NDB8MjcpLy50ZXN0KGIua2V5Q29kZSkpcmV0dXJuO2M9YSh0aGlzKSxiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKTtpZihjLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXJldHVybjtnPWUoYyksaD1nLmhhc0NsYXNzKCJvcGVuIik7aWYoIWh8fGgmJmIua2V5Q29kZT09MjcpcmV0dXJuIGMuY2xpY2soKTtkPWEoIltyb2xlPW1lbnVdIGxpOm5vdCguZGl2aWRlcikgYSIsZyk7aWYoIWQubGVuZ3RoKXJldHVybjtpPWQuaW5kZXgoZC5maWx0ZXIoIjpmb2N1cyIpKSxiLmtleUNvZGU9PTM4JiZpPjAmJmktLSxiLmtleUNvZGU9PTQwJiZpPGQubGVuZ3RoLTEmJmkrKyx+aXx8KGk9MCksZC5lcShpKS5mb2N1cygpfX0sYS5mbi5kcm9wZG93bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiZHJvcGRvd24iKTtlfHxkLmRhdGEoImRyb3Bkb3duIixlPW5ldyBjKHRoaXMpKSx0eXBlb2YgYj09InN0cmluZyImJmVbYl0uY2FsbChkKX0pfSxhLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWMsYShmdW5jdGlvbigpe2EoImh0bWwiKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFwaSIsZCksYSgiYm9keSIpLm9uKCJjbGljay5kcm9wZG93biB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFwaSIsYixjLnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmRyb3Bkb3duLmRhdGEtYXBpIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1hcGkiLGIrIiwgW3JvbGU9bWVudV0iLGMucHJvdG90eXBlLmtleWRvd24pfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIsYyl7dmFyIGQ9YS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcyksZT1hKGIpLmlzKCJib2R5Iik/YSh3aW5kb3cpOmEoYiksZjt0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYS5mbi5zY3JvbGxzcHkuZGVmYXVsdHMsYyksdGhpcy4kc2Nyb2xsRWxlbWVudD1lLm9uKCJzY3JvbGwuc2Nyb2xsLXNweS5kYXRhLWFwaSIsZCksdGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8KGY9YShiKS5hdHRyKCJocmVmIikpJiZmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIil8fCIiKSsiIC5uYXYgbGkgPiBhIix0aGlzLiRib2R5PWEoImJvZHkiKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX1iLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YixyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjO3RoaXMub2Zmc2V0cz1hKFtdKSx0aGlzLnRhcmdldHM9YShbXSksYz10aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxjPWIuZGF0YSgidGFyZ2V0Iil8fGIuYXR0cigiaHJlZiIpLGQ9L14jXHcvLnRlc3QoYykmJmEoYyk7cmV0dXJuIGQmJmQubGVuZ3RoJiZbW2QucG9zaXRpb24oKS50b3AsY11dfHxudWxsfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yi5vZmZzZXRzLnB1c2godGhpc1swXSksYi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0scHJvY2VzczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxiPXRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHx0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxjPWItdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub2Zmc2V0cyxlPXRoaXMudGFyZ2V0cyxmPXRoaXMuYWN0aXZlVGFyZ2V0LGc7aWYoYT49YylyZXR1cm4gZiE9KGc9ZS5sYXN0KClbMF0pJiZ0aGlzLmFjdGl2YXRlKGcpO2ZvcihnPWQubGVuZ3RoO2ctLTspZiE9ZVtnXSYmYT49ZFtnXSYmKCFkW2crMV18fGE8PWRbZysxXSkmJnRoaXMuYWN0aXZhdGUoZVtnXSl9LGFjdGl2YXRlOmZ1bmN0aW9uKGIpe3ZhciBjLGQ7dGhpcy5hY3RpdmVUYXJnZXQ9YixhKHRoaXMuc2VsZWN0b3IpLnBhcmVudCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxkPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytiKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2IrJyJdJyxjPWEoZCkucGFyZW50KCJsaSIpLmFkZENsYXNzKCJhY3RpdmUiKSxjLnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKS5sZW5ndGgmJihjPWMuY2xvc2VzdCgibGkuZHJvcGRvd24iKS5hZGRDbGFzcygiYWN0aXZlIikpLGMudHJpZ2dlcigiYWN0aXZhdGUiKX19LGEuZm4uc2Nyb2xsc3B5PWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJzY3JvbGxzcHkiKSxmPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztlfHxkLmRhdGEoInNjcm9sbHNweSIsZT1uZXcgYih0aGlzLGYpKSx0eXBlb2YgYz09InN0cmluZyImJmVbY10oKX0pfSxhLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1iLGEuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzPXtvZmZzZXQ6MTB9LGEod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXthKCdbZGF0YS1zcHk9InNjcm9sbCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yi5zY3JvbGxzcHkoYi5kYXRhKCkpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGIpe3RoaXMuZWxlbWVudD1hKGIpfTtiLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YixzaG93OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmF0dHIoImRhdGEtdGFyZ2V0IiksZSxmLGc7ZHx8KGQ9Yi5hdHRyKCJocmVmIiksZD1kJiZkLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO2lmKGIucGFyZW50KCJsaSIpLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm47ZT1jLmZpbmQoIi5hY3RpdmUgYSIpLmxhc3QoKVswXSxnPWEuRXZlbnQoInNob3ciLHtyZWxhdGVkVGFyZ2V0OmV9KSxiLnRyaWdnZXIoZyk7aWYoZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47Zj1hKGQpLHRoaXMuYWN0aXZhdGUoYi5wYXJlbnQoImxpIiksYyksdGhpcy5hY3RpdmF0ZShmLGYucGFyZW50KCksZnVuY3Rpb24oKXtiLnRyaWdnZXIoe3R5cGU6InNob3duIixyZWxhdGVkVGFyZ2V0OmV9KX0pfSxhY3RpdmF0ZTpmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZygpe2UucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGIuYWRkQ2xhc3MoImFjdGl2ZSIpLGY/KGJbMF0ub2Zmc2V0V2lkdGgsYi5hZGRDbGFzcygiaW4iKSk6Yi5yZW1vdmVDbGFzcygiZmFkZSIpLGIucGFyZW50KCIuZHJvcGRvd24tbWVudSIpJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLGQmJmQoKX12YXIgZT1jLmZpbmQoIj4gLmFjdGl2ZSIpLGY9ZCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJmUuaGFzQ2xhc3MoImZhZGUiKTtmP2Uub25lKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxnKTpnKCksZS5yZW1vdmVDbGFzcygiaW4iKX19LGEuZm4udGFiPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJ0YWIiKTtlfHxkLmRhdGEoInRhYiIsZT1uZXcgYih0aGlzKSksdHlwZW9mIGM9PSJzdHJpbmciJiZlW2NdKCl9KX0sYS5mbi50YWIuQ29uc3RydWN0b3I9YixhKGZ1bmN0aW9uKCl7YSgiYm9keSIpLm9uKCJjbGljay50YWIuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwiXScsZnVuY3Rpb24oYil7Yi5wcmV2ZW50RGVmYXVsdCgpLGEodGhpcykudGFiKCJzaG93Iil9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoInRvb2x0aXAiLGEsYil9O2IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiLGluaXQ6ZnVuY3Rpb24oYixjLGQpe3ZhciBlLGY7dGhpcy50eXBlPWIsdGhpcy4kZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz10aGlzLmdldE9wdGlvbnMoZCksdGhpcy5lbmFibGVkPSEwLHRoaXMub3B0aW9ucy50cmlnZ2VyPT0iY2xpY2siP3RoaXMuJGVsZW1lbnQub24oImNsaWNrLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKTp0aGlzLm9wdGlvbnMudHJpZ2dlciE9Im1hbnVhbCImJihlPXRoaXMub3B0aW9ucy50cmlnZ2VyPT0iaG92ZXIiPyJtb3VzZWVudGVyIjoiZm9jdXMiLGY9dGhpcy5vcHRpb25zLnRyaWdnZXI9PSJob3ZlciI/Im1vdXNlbGVhdmUiOiJibHVyIix0aGlzLiRlbGVtZW50Lm9uKGUrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGYrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKSksdGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5maXhUaXRsZSgpfSxnZXRPcHRpb25zOmZ1bmN0aW9uKGIpe3JldHVybiBiPWEuZXh0ZW5kKHt9LGEuZm5bdGhpcy50eXBlXS5kZWZhdWx0cyxiLHRoaXMuJGVsZW1lbnQuZGF0YSgpKSxiLmRlbGF5JiZ0eXBlb2YgYi5kZWxheT09Im51bWJlciImJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sZW50ZXI6ZnVuY3Rpb24oYil7dmFyIGM9YShiLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpO2lmKCFjLm9wdGlvbnMuZGVsYXl8fCFjLm9wdGlvbnMuZGVsYXkuc2hvdylyZXR1cm4gYy5zaG93KCk7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksYy5ob3ZlclN0YXRlPSJpbiIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmhvdmVyU3RhdGU9PSJpbiImJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdyl9LGxlYXZlOmZ1bmN0aW9uKGIpe3ZhciBjPWEoYi5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRhdGEodGhpcy50eXBlKTt0aGlzLnRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO2lmKCFjLm9wdGlvbnMuZGVsYXl8fCFjLm9wdGlvbnMuZGVsYXkuaGlkZSlyZXR1cm4gYy5oaWRlKCk7Yy5ob3ZlclN0YXRlPSJvdXQiLHRoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5ob3ZlclN0YXRlPT0ib3V0IiYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKX0sc2hvdzpmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe2E9dGhpcy50aXAoKSx0aGlzLnNldENvbnRlbnQoKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZhLmFkZENsYXNzKCJmYWRlIiksZj10eXBlb2YgdGhpcy5vcHRpb25zLnBsYWNlbWVudD09ImZ1bmN0aW9uIj90aGlzLm9wdGlvbnMucGxhY2VtZW50LmNhbGwodGhpcyxhWzBdLHRoaXMuJGVsZW1lbnRbMF0pOnRoaXMub3B0aW9ucy5wbGFjZW1lbnQsYj0vaW4vLnRlc3QoZiksYS5yZW1vdmUoKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KS5hcHBlbmRUbyhiP3RoaXMuJGVsZW1lbnQ6ZG9jdW1lbnQuYm9keSksYz10aGlzLmdldFBvc2l0aW9uKGIpLGQ9YVswXS5vZmZzZXRXaWR0aCxlPWFbMF0ub2Zmc2V0SGVpZ2h0O3N3aXRjaChiP2Yuc3BsaXQoIiAiKVsxXTpmKXtjYXNlImJvdHRvbSI6Zz17dG9wOmMudG9wK2MuaGVpZ2h0LGxlZnQ6Yy5sZWZ0K2Mud2lkdGgvMi1kLzJ9O2JyZWFrO2Nhc2UidG9wIjpnPXt0b3A6Yy50b3AtZSxsZWZ0OmMubGVmdCtjLndpZHRoLzItZC8yfTticmVhaztjYXNlImxlZnQiOmc9e3RvcDpjLnRvcCtjLmhlaWdodC8yLWUvMixsZWZ0OmMubGVmdC1kfTticmVhaztjYXNlInJpZ2h0IjpnPXt0b3A6Yy50b3ArYy5oZWlnaHQvMi1lLzIsbGVmdDpjLmxlZnQrYy53aWR0aH19YS5jc3MoZykuYWRkQ2xhc3MoZikuYWRkQ2xhc3MoImluIil9fSxzZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKTthLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYiksYS5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0saGlkZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGQoKXt2YXIgYj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5vZmYoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5yZW1vdmUoKX0sNTAwKTtjLm9uZShhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoYiksYy5yZW1vdmUoKX0pfXZhciBiPXRoaXMsYz10aGlzLnRpcCgpO3JldHVybiBjLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoImZhZGUiKT9kKCk6Yy5yZW1vdmUoKSx0aGlzfSxmaXhUaXRsZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cigidGl0bGUiKXx8dHlwZW9mIGEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpIT0ic3RyaW5nIikmJmEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsYS5hdHRyKCJ0aXRsZSIpfHwiIikucmVtb3ZlQXR0cigidGl0bGUiKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGIpe3JldHVybiBhLmV4dGVuZCh7fSxiP3t0b3A6MCxsZWZ0OjB9OnRoaXMuJGVsZW1lbnQub2Zmc2V0KCkse3dpZHRoOnRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OnRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwodHlwZW9mIGMudGl0bGU9PSJmdW5jdGlvbiI/Yy50aXRsZS5jYWxsKGJbMF0pOmMudGl0bGUpLGF9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXA9dGhpcy4kdGlwfHxhKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSl9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudFswXS5wYXJlbnROb2RlfHwodGhpcy5oaWRlKCksdGhpcy4kZWxlbWVudD1udWxsLHRoaXMub3B0aW9ucz1udWxsKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSx0b2dnbGVFbmFibGVkOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXNbdGhpcy50aXAoKS5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCkuJGVsZW1lbnQub2ZmKCIuIit0aGlzLnR5cGUpLnJlbW92ZURhdGEodGhpcy50eXBlKX19LGEuZm4udG9vbHRpcD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgidG9vbHRpcCIpLGY9dHlwZW9mIGM9PSJvYmplY3QiJiZjO2V8fGQuZGF0YSgidG9vbHRpcCIsZT1uZXcgYih0aGlzLGYpKSx0eXBlb2YgYz09InN0cmluZyImJmVbY10oKX0pfSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3I9YixhLmZuLnRvb2x0aXAuZGVmYXVsdHM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMH19KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbihhLGIpe3RoaXMuaW5pdCgicG9wb3ZlciIsYSxiKX07Yi5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6YixzZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShiKSxhLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQgPiAqIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYyksYS5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuZ2V0Q29udGVudCgpfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cigiZGF0YS1jb250ZW50Iil8fCh0eXBlb2YgYy5jb250ZW50PT0iZnVuY3Rpb24iP2MuY29udGVudC5jYWxsKGJbMF0pOmMuY29udGVudCksYX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcHx8KHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkpLHRoaXMuJHRpcH0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fSksYS5mbi5wb3BvdmVyPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJwb3BvdmVyIiksZj10eXBlb2YgYz09Im9iamVjdCImJmM7ZXx8ZC5kYXRhKCJwb3BvdmVyIixlPW5ldyBiKHRoaXMsZikpLHR5cGVvZiBjPT0ic3RyaW5nIiYmZVtjXSgpfSl9LGEuZm4ucG9wb3Zlci5Db25zdHJ1Y3Rvcj1iLGEuZm4ucG9wb3Zlci5kZWZhdWx0cz1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuZGVmYXVsdHMse3BsYWNlbWVudDoicmlnaHQiLHRyaWdnZXI6ImNsaWNrIixjb250ZW50OiIiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJwb3BvdmVyIj48ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0icG9wb3Zlci1pbm5lciI+PGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIj48L2gzPjxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCI+PHA+PC9wPjwvZGl2PjwvZGl2PjwvZGl2Pid9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGIsYyl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGEuZm4uYWZmaXguZGVmYXVsdHMsYyksdGhpcy4kd2luZG93PWEod2luZG93KS5vbigic2Nyb2xsLmFmZml4LmRhdGEtYXBpIixhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuY2hlY2tQb3NpdGlvbigpfTtiLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJGVsZW1lbnQuaXMoIjp2aXNpYmxlIikpcmV0dXJuO3ZhciBiPWEoZG9jdW1lbnQpLmhlaWdodCgpLGM9dGhpcy4kd2luZG93LnNjcm9sbFRvcCgpLGQ9dGhpcy4kZWxlbWVudC5vZmZzZXQoKSxlPXRoaXMub3B0aW9ucy5vZmZzZXQsZj1lLmJvdHRvbSxnPWUudG9wLGg9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGk7dHlwZW9mIGUhPSJvYmplY3QiJiYoZj1nPWUpLHR5cGVvZiBnPT0iZnVuY3Rpb24iJiYoZz1lLnRvcCgpKSx0eXBlb2YgZj09ImZ1bmN0aW9uIiYmKGY9ZS5ib3R0b20oKSksaT10aGlzLnVucGluIT1udWxsJiZjK3RoaXMudW5waW48PWQudG9wPyExOmYhPW51bGwmJmQudG9wK3RoaXMuJGVsZW1lbnQuaGVpZ2h0KCk+PWItZj8iYm90dG9tIjpnIT1udWxsJiZjPD1nPyJ0b3AiOiExO2lmKHRoaXMuYWZmaXhlZD09PWkpcmV0dXJuO3RoaXMuYWZmaXhlZD1pLHRoaXMudW5waW49aT09ImJvdHRvbSI/ZC50b3AtYzpudWxsLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoaCkuYWRkQ2xhc3MoImFmZml4IisoaT8iLSIraToiIikpfSxhLmZuLmFmZml4PWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJhZmZpeCIpLGY9dHlwZW9mIGM9PSJvYmplY3QiJiZjO2V8fGQuZGF0YSgiYWZmaXgiLGU9bmV3IGIodGhpcyxmKSksdHlwZW9mIGM9PSJzdHJpbmciJiZlW2NdKCl9KX0sYS5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1iLGEuZm4uYWZmaXguZGVmYXVsdHM9e29mZnNldDowfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyksYz1iLmRhdGEoKTtjLm9mZnNldD1jLm9mZnNldHx8e30sYy5vZmZzZXRCb3R0b20mJihjLm9mZnNldC5ib3R0b209Yy5vZmZzZXRCb3R0b20pLGMub2Zmc2V0VG9wJiYoYy5vZmZzZXQudG9wPWMub2Zmc2V0VG9wKSxiLmFmZml4KGMpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGEpe3ZhciBiPSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxjPWZ1bmN0aW9uKGMpe2EoYykub24oImNsaWNrIixiLHRoaXMuY2xvc2UpfTtjLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBmKCl7ZS50cmlnZ2VyKCJjbG9zZWQiKS5yZW1vdmUoKX12YXIgYz1hKHRoaXMpLGQ9Yy5hdHRyKCJkYXRhLXRhcmdldCIpLGU7ZHx8KGQ9Yy5hdHRyKCJocmVmIiksZD1kJiZkLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpLGU9YShkKSxiJiZiLnByZXZlbnREZWZhdWx0KCksZS5sZW5ndGh8fChlPWMuaGFzQ2xhc3MoImFsZXJ0Iik/YzpjLnBhcmVudCgpKSxlLnRyaWdnZXIoYj1hLkV2ZW50KCJjbG9zZSIpKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtlLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZlLmhhc0NsYXNzKCJmYWRlIik/ZS5vbihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZik6ZigpfSxhLmZuLmFsZXJ0PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJhbGVydCIpO2V8fGQuZGF0YSgiYWxlcnQiLGU9bmV3IGModGhpcykpLHR5cGVvZiBiPT0ic3RyaW5nIiYmZVtiXS5jYWxsKGQpfSl9LGEuZm4uYWxlcnQuQ29uc3RydWN0b3I9YyxhKGZ1bmN0aW9uKCl7YSgiYm9keSIpLm9uKCJjbGljay5hbGVydC5kYXRhLWFwaSIsYixjLnByb3RvdHlwZS5jbG9zZSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxhLmZuLmJ1dHRvbi5kZWZhdWx0cyxjKX07Yi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9ImRpc2FibGVkIixjPXRoaXMuJGVsZW1lbnQsZD1jLmRhdGEoKSxlPWMuaXMoImlucHV0Iik/InZhbCI6Imh0bWwiO2ErPSJUZXh0IixkLnJlc2V0VGV4dHx8Yy5kYXRhKCJyZXNldFRleHQiLGNbZV0oKSksY1tlXShkW2FdfHx0aGlzLm9wdGlvbnNbYV0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthPT0ibG9hZGluZ1RleHQiP2MuYWRkQ2xhc3MoYikuYXR0cihiLGIpOmMucmVtb3ZlQ2xhc3MoYikucmVtb3ZlQXR0cihiKX0sMCl9LGIucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zLXJhZGlvIl0nKTthJiZhLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9LGEuZm4uYnV0dG9uPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJidXR0b24iKSxmPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztlfHxkLmRhdGEoImJ1dHRvbiIsZT1uZXcgYih0aGlzLGYpKSxjPT0idG9nZ2xlIj9lLnRvZ2dsZSgpOmMmJmUuc2V0U3RhdGUoYyl9KX0sYS5mbi5idXR0b24uZGVmYXVsdHM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sYS5mbi5idXR0b24uQ29uc3RydWN0b3I9YixhKGZ1bmN0aW9uKCl7YSgiYm9keSIpLm9uKCJjbGljay5idXR0b24uZGF0YS1hcGkiLCJbZGF0YS10b2dnbGVePWJ1dHRvbl0iLGZ1bmN0aW9uKGIpe3ZhciBjPWEoYi50YXJnZXQpO2MuaGFzQ2xhc3MoImJ0biIpfHwoYz1jLmNsb3Nlc3QoIi5idG4iKSksYy5idXR0b24oInRvZ2dsZSIpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxhLmZuLmNvbGxhcHNlLmRlZmF1bHRzLGMpLHRoaXMub3B0aW9ucy5wYXJlbnQmJih0aGlzLiRwYXJlbnQ9YSh0aGlzLm9wdGlvbnMucGFyZW50KSksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07Yi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmIsZGltZW5zaW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKTtyZXR1cm4gYT8id2lkdGgiOiJoZWlnaHQifSxzaG93OmZ1bmN0aW9uKCl7dmFyIGIsYyxkLGU7aWYodGhpcy50cmFuc2l0aW9uaW5nKXJldHVybjtiPXRoaXMuZGltZW5zaW9uKCksYz1hLmNhbWVsQ2FzZShbInNjcm9sbCIsYl0uam9pbigiLSIpKSxkPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmZpbmQoIj4gLmFjY29yZGlvbi1ncm91cCA+IC5pbiIpO2lmKGQmJmQubGVuZ3RoKXtlPWQuZGF0YSgiY29sbGFwc2UiKTtpZihlJiZlLnRyYW5zaXRpb25pbmcpcmV0dXJuO2QuY29sbGFwc2UoImhpZGUiKSxlfHxkLmRhdGEoImNvbGxhcHNlIixudWxsKX10aGlzLiRlbGVtZW50W2JdKDApLHRoaXMudHJhbnNpdGlvbigiYWRkQ2xhc3MiLGEuRXZlbnQoInNob3ciKSwic2hvd24iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudFtiXSh0aGlzLiRlbGVtZW50WzBdW2NdKX0saGlkZTpmdW5jdGlvbigpe3ZhciBiO2lmKHRoaXMudHJhbnNpdGlvbmluZylyZXR1cm47Yj10aGlzLmRpbWVuc2lvbigpLHRoaXMucmVzZXQodGhpcy4kZWxlbWVudFtiXSgpKSx0aGlzLnRyYW5zaXRpb24oInJlbW92ZUNsYXNzIixhLkV2ZW50KCJoaWRlIiksImhpZGRlbiIpLHRoaXMuJGVsZW1lbnRbYl0oMCl9LHJlc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZGltZW5zaW9uKCk7cmV0dXJuIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIilbYl0oYXx8ImF1dG8iKVswXS5vZmZzZXRXaWR0aCx0aGlzLiRlbGVtZW50W2EhPT1udWxsPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlIiksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcyxmPWZ1bmN0aW9uKCl7Yy50eXBlPT0ic2hvdyImJmUucmVzZXQoKSxlLnRyYW5zaXRpb25pbmc9MCxlLiRlbGVtZW50LnRyaWdnZXIoZCl9O3RoaXMuJGVsZW1lbnQudHJpZ2dlcihjKTtpZihjLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLnRyYW5zaXRpb25pbmc9MSx0aGlzLiRlbGVtZW50W2JdKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJjb2xsYXBzZSIpP3RoaXMuJGVsZW1lbnQub25lKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmKTpmKCl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfX0sYS5mbi5jb2xsYXBzZT1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiY29sbGFwc2UiKSxmPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztlfHxkLmRhdGEoImNvbGxhcHNlIixlPW5ldyBiKHRoaXMsZikpLHR5cGVvZiBjPT0ic3RyaW5nIiYmZVtjXSgpfSl9LGEuZm4uY29sbGFwc2UuZGVmYXVsdHM9e3RvZ2dsZTohMH0sYS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1iLGEoZnVuY3Rpb24oKXthKCJib2R5Iikub24oImNsaWNrLmNvbGxhcHNlLmRhdGEtYXBpIiwiW2RhdGEtdG9nZ2xlPWNvbGxhcHNlXSIsZnVuY3Rpb24oYil7dmFyIGM9YSh0aGlzKSxkLGU9Yy5hdHRyKCJkYXRhLXRhcmdldCIpfHxiLnByZXZlbnREZWZhdWx0KCl8fChkPWMuYXR0cigiaHJlZiIpKSYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpLGY9YShlKS5kYXRhKCJjb2xsYXBzZSIpPyJ0b2dnbGUiOmMuZGF0YSgpO2NbYShlKS5oYXNDbGFzcygiaW4iKT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJjb2xsYXBzZWQiKSxhKGUpLmNvbGxhcHNlKGYpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1jLHRoaXMub3B0aW9ucy5zbGlkZSYmdGhpcy5zbGlkZSh0aGlzLm9wdGlvbnMuc2xpZGUpLHRoaXMub3B0aW9ucy5wYXVzZT09ImhvdmVyIiYmdGhpcy4kZWxlbWVudC5vbigibW91c2VlbnRlciIsYS5wcm94eSh0aGlzLnBhdXNlLHRoaXMpKS5vbigibW91c2VsZWF2ZSIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yi5wcm90b3R5cGU9e2N5Y2xlOmZ1bmN0aW9uKGIpe3JldHVybiBifHwodGhpcy5wYXVzZWQ9ITEpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSx0bzpmdW5jdGlvbihiKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGQ9Yy5wYXJlbnQoKS5jaGlsZHJlbigpLGU9ZC5pbmRleChjKSxmPXRoaXM7aWYoYj5kLmxlbmd0aC0xfHxiPDApcmV0dXJuO3JldHVybiB0aGlzLnNsaWRpbmc/dGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7Zi50byhiKX0pOmU9PWI/dGhpcy5wYXVzZSgpLmN5Y2xlKCk6dGhpcy5zbGlkZShiPmU/Im5leHQiOiJwcmV2IixhKGRbYl0pKX0scGF1c2U6ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCYmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLHRoaXMuY3ljbGUoKSksY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLmludGVydmFsPW51bGwsdGhpc30sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGluZylyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGUoIm5leHQiKX0scHJldjpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGluZylyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGUoInByZXYiKX0sc2xpZGU6ZnVuY3Rpb24oYixjKXt2YXIgZD10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGU9Y3x8ZFtiXSgpLGY9dGhpcy5pbnRlcnZhbCxnPWI9PSJuZXh0Ij8ibGVmdCI6InJpZ2h0IixoPWI9PSJuZXh0Ij8iZmlyc3QiOiJsYXN0IixpPXRoaXMsaj1hLkV2ZW50KCJzbGlkZSIse3JlbGF0ZWRUYXJnZXQ6ZVswXX0pO3RoaXMuc2xpZGluZz0hMCxmJiZ0aGlzLnBhdXNlKCksZT1lLmxlbmd0aD9lOnRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0iKVtoXSgpO2lmKGUuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybjtpZihhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygic2xpZGUiKSl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGopO2lmKGouaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2UuYWRkQ2xhc3MoYiksZVswXS5vZmZzZXRXaWR0aCxkLmFkZENsYXNzKGcpLGUuYWRkQ2xhc3MoZyksdGhpcy4kZWxlbWVudC5vbmUoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7ZS5yZW1vdmVDbGFzcyhbYixnXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKSxkLnJlbW92ZUNsYXNzKFsiYWN0aXZlIixnXS5qb2luKCIgIikpLGkuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS4kZWxlbWVudC50cmlnZ2VyKCJzbGlkIil9LDApfSl9ZWxzZXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoaik7aWYoai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47ZC5yZW1vdmVDbGFzcygiYWN0aXZlIiksZS5hZGRDbGFzcygiYWN0aXZlIiksdGhpcy5zbGlkaW5nPSExLHRoaXMuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfXJldHVybiBmJiZ0aGlzLmN5Y2xlKCksdGhpc319LGEuZm4uY2Fyb3VzZWw9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImNhcm91c2VsIiksZj1hLmV4dGVuZCh7fSxhLmZuLmNhcm91c2VsLmRlZmF1bHRzLHR5cGVvZiBjPT0ib2JqZWN0IiYmYyksZz10eXBlb2YgYz09InN0cmluZyI/YzpmLnNsaWRlO2V8fGQuZGF0YSgiY2Fyb3VzZWwiLGU9bmV3IGIodGhpcyxmKSksdHlwZW9mIGM9PSJudW1iZXIiP2UudG8oYyk6Zz9lW2ddKCk6Zi5pbnRlcnZhbCYmZS5jeWNsZSgpfSl9LGEuZm4uY2Fyb3VzZWwuZGVmYXVsdHM9e2ludGVydmFsOjVlMyxwYXVzZToiaG92ZXIifSxhLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yPWIsYShmdW5jdGlvbigpe2EoImJvZHkiKS5vbigiY2xpY2suY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGZ1bmN0aW9uKGIpe3ZhciBjPWEodGhpcyksZCxlPWEoYy5hdHRyKCJkYXRhLXRhcmdldCIpfHwoZD1jLmF0dHIoImhyZWYiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSksZj0hZS5kYXRhKCJtb2RhbCIpJiZhLmV4dGVuZCh7fSxlLmRhdGEoKSxjLmRhdGEoKSk7ZS5jYXJvdXNlbChmKSxiLnByZXZlbnREZWZhdWx0KCl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYixjKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGEuZm4udHlwZWFoZWFkLmRlZmF1bHRzLGMpLHRoaXMubWF0Y2hlcj10aGlzLm9wdGlvbnMubWF0Y2hlcnx8dGhpcy5tYXRjaGVyLHRoaXMuc29ydGVyPXRoaXMub3B0aW9ucy5zb3J0ZXJ8fHRoaXMuc29ydGVyLHRoaXMuaGlnaGxpZ2h0ZXI9dGhpcy5vcHRpb25zLmhpZ2hsaWdodGVyfHx0aGlzLmhpZ2hsaWdodGVyLHRoaXMudXBkYXRlcj10aGlzLm9wdGlvbnMudXBkYXRlcnx8dGhpcy51cGRhdGVyLHRoaXMuJG1lbnU9YSh0aGlzLm9wdGlvbnMubWVudSkuYXBwZW5kVG8oImJvZHkiKSx0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc2hvd249ITEsdGhpcy5saXN0ZW4oKX07Yi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmIsc2VsZWN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikuYXR0cigiZGF0YS12YWx1ZSIpO3JldHVybiB0aGlzLiRlbGVtZW50LnZhbCh0aGlzLnVwZGF0ZXIoYSkpLmNoYW5nZSgpLHRoaXMuaGlkZSgpfSx1cGRhdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzaG93OmZ1bmN0aW9uKCl7dmFyIGI9YS5leHRlbmQoe30sdGhpcy4kZWxlbWVudC5vZmZzZXQoKSx7aGVpZ2h0OnRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSk7cmV0dXJuIHRoaXMuJG1lbnUuY3NzKHt0b3A6Yi50b3ArYi5oZWlnaHQsbGVmdDpiLmxlZnR9KSx0aGlzLiRtZW51LnNob3coKSx0aGlzLnNob3duPSEwLHRoaXN9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbWVudS5oaWRlKCksdGhpcy5zaG93bj0hMSx0aGlzfSxsb29rdXA6ZnVuY3Rpb24oYil7dmFyIGM7cmV0dXJuIHRoaXMucXVlcnk9dGhpcy4kZWxlbWVudC52YWwoKSwhdGhpcy5xdWVyeXx8dGhpcy5xdWVyeS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aD90aGlzLnNob3duP3RoaXMuaGlkZSgpOnRoaXM6KGM9YS5pc0Z1bmN0aW9uKHRoaXMuc291cmNlKT90aGlzLnNvdXJjZSh0aGlzLnF1ZXJ5LGEucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKTp0aGlzLnNvdXJjZSxjP3RoaXMucHJvY2VzcyhjKTp0aGlzKX0scHJvY2VzczpmdW5jdGlvbihiKXt2YXIgYz10aGlzO3JldHVybiBiPWEuZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiBjLm1hdGNoZXIoYSl9KSxiPXRoaXMuc29ydGVyKGIpLGIubGVuZ3RoP3RoaXMucmVuZGVyKGIuc2xpY2UoMCx0aGlzLm9wdGlvbnMuaXRlbXMpKS5zaG93KCk6dGhpcy5zaG93bj90aGlzLmhpZGUoKTp0aGlzfSxtYXRjaGVyOmZ1bmN0aW9uKGEpe3JldHVybn5hLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpfSxzb3J0ZXI6ZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPVtdLGU7d2hpbGUoZT1hLnNoaWZ0KCkpZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpKT9+ZS5pbmRleE9mKHRoaXMucXVlcnkpP2MucHVzaChlKTpkLnB1c2goZSk6Yi5wdXNoKGUpO3JldHVybiBiLmNvbmNhdChjLGQpfSxoaWdobGlnaHRlcjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYiKTtyZXR1cm4gYS5yZXBsYWNlKG5ldyBSZWdFeHAoIigiK2IrIikiLCJpZyIpLGZ1bmN0aW9uKGEsYil7cmV0dXJuIjxzdHJvbmc+IitiKyI8L3N0cm9uZz4ifSl9LHJlbmRlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzO3JldHVybiBiPWEoYikubWFwKGZ1bmN0aW9uKGIsZCl7cmV0dXJuIGI9YShjLm9wdGlvbnMuaXRlbSkuYXR0cigiZGF0YS12YWx1ZSIsZCksYi5maW5kKCJhIikuaHRtbChjLmhpZ2hsaWdodGVyKGQpKSxiWzBdfSksYi5maXJzdCgpLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLiRtZW51Lmh0bWwoYiksdGhpc30sbmV4dDpmdW5jdGlvbihiKXt2YXIgYz10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksZD1jLm5leHQoKTtkLmxlbmd0aHx8KGQ9YSh0aGlzLiRtZW51LmZpbmQoImxpIilbMF0pKSxkLmFkZENsYXNzKCJhY3RpdmUiKX0scHJldjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksYz1iLnByZXYoKTtjLmxlbmd0aHx8KGM9dGhpcy4kbWVudS5maW5kKCJsaSIpLmxhc3QoKSksYy5hZGRDbGFzcygiYWN0aXZlIil9LGxpc3RlbjpmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQub24oImJsdXIiLGEucHJveHkodGhpcy5ibHVyLHRoaXMpKS5vbigia2V5cHJlc3MiLGEucHJveHkodGhpcy5rZXlwcmVzcyx0aGlzKSkub24oImtleXVwIixhLnByb3h5KHRoaXMua2V5dXAsdGhpcykpLChhLmJyb3dzZXIuY2hyb21lfHxhLmJyb3dzZXIud2Via2l0fHxhLmJyb3dzZXIubXNpZSkmJnRoaXMuJGVsZW1lbnQub24oImtleWRvd24iLGEucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKSx0aGlzLiRtZW51Lm9uKCJjbGljayIsYS5wcm94eSh0aGlzLmNsaWNrLHRoaXMpKS5vbigibW91c2VlbnRlciIsImxpIixhLnByb3h5KHRoaXMubW91c2VlbnRlcix0aGlzKSl9LG1vdmU6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuc2hvd24pcmV0dXJuO3N3aXRjaChhLmtleUNvZGUpe2Nhc2UgOTpjYXNlIDEzOmNhc2UgMjc6YS5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgMzg6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHJldigpO2JyZWFrO2Nhc2UgNDA6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmV4dCgpfWEuc3RvcFByb3BhZ2F0aW9uKCl9LGtleWRvd246ZnVuY3Rpb24oYil7dGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0PSF+YS5pbkFycmF5KGIua2V5Q29kZSxbNDAsMzgsOSwxMywyN10pLHRoaXMubW92ZShiKX0sa2V5cHJlc3M6ZnVuY3Rpb24oYSl7aWYodGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0KXJldHVybjt0aGlzLm1vdmUoYSl9LGtleXVwOmZ1bmN0aW9uKGEpe3N3aXRjaChhLmtleUNvZGUpe2Nhc2UgNDA6Y2FzZSAzODpicmVhaztjYXNlIDk6Y2FzZSAxMzppZighdGhpcy5zaG93bilyZXR1cm47dGhpcy5zZWxlY3QoKTticmVhaztjYXNlIDI3OmlmKCF0aGlzLnNob3duKXJldHVybjt0aGlzLmhpZGUoKTticmVhaztkZWZhdWx0OnRoaXMubG9va3VwKCl9YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LGJsdXI6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5oaWRlKCl9LDE1MCl9LGNsaWNrOmZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0KCl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24oYil7dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGEoYi5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygiYWN0aXZlIil9fSxhLmZuLnR5cGVhaGVhZD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgidHlwZWFoZWFkIiksZj10eXBlb2YgYz09Im9iamVjdCImJmM7ZXx8ZC5kYXRhKCJ0eXBlYWhlYWQiLGU9bmV3IGIodGhpcyxmKSksdHlwZW9mIGM9PSJzdHJpbmciJiZlW2NdKCl9KX0sYS5mbi50eXBlYWhlYWQuZGVmYXVsdHM9e3NvdXJjZTpbXSxpdGVtczo4LG1lbnU6Jzx1bCBjbGFzcz0idHlwZWFoZWFkIGRyb3Bkb3duLW1lbnUiPjwvdWw+JyxpdGVtOic8bGk+PGEgaHJlZj0iIyI+PC9hPjwvbGk+JyxtaW5MZW5ndGg6MX0sYS5mbi50eXBlYWhlYWQuQ29uc3RydWN0b3I9YixhKGZ1bmN0aW9uKCl7YSgiYm9keSIpLm9uKCJmb2N1cy50eXBlYWhlYWQuZGF0YS1hcGkiLCdbZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiXScsZnVuY3Rpb24oYil7dmFyIGM9YSh0aGlzKTtpZihjLmRhdGEoInR5cGVhaGVhZCIpKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksYy50eXBlYWhlYWQoYy5kYXRhKCkpfSl9KX0od2luZG93LmpRdWVyeSk="></script>
<script src="data:application/javascript;base64,LyoqCiAqIGJvb3Rib3guanMgdjMuMC4wCiAqCiAqIGh0dHA6Ly9ib290Ym94anMuY29tL2xpY2Vuc2UudHh0CiAqLwp2YXIgYm9vdGJveD13aW5kb3cuYm9vdGJveHx8ZnVuY3Rpb24odixuKXtmdW5jdGlvbiBoKGIsYSl7bnVsbD09YSYmKGE9cik7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgbFthXVtiXT9sW2FdW2JdOmEhPXM/aChiLHMpOmJ9dmFyIHI9ImVuIixzPSJlbiIsdD0hMCxxPSJzdGF0aWMiLHU9IiIsZz17fSxtPXtzZXRMb2NhbGU6ZnVuY3Rpb24oYil7Zm9yKHZhciBhIGluIGwpaWYoYT09Yil7cj1iO3JldHVybn10aHJvdyBFcnJvcigiSW52YWxpZCBsb2NhbGU6ICIrYik7fSxhZGRMb2NhbGU6ZnVuY3Rpb24oYixhKXsidW5kZWZpbmVkIj09PXR5cGVvZiBsW2JdJiYobFtiXT17fSk7Zm9yKHZhciBjIGluIGEpbFtiXVtjXT1hW2NdfSxzZXRJY29uczpmdW5jdGlvbihiKXtnPWI7aWYoIm9iamVjdCIhPT10eXBlb2YgZ3x8bnVsbD09ZylnPXt9fSxhbGVydDpmdW5jdGlvbigpe3ZhciBiPSIiLGE9aCgiT0siKSxjPW51bGw7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpiPWFyZ3VtZW50c1swXTsKYnJlYWs7Y2FzZSAyOmI9YXJndW1lbnRzWzBdOyJmdW5jdGlvbiI9PXR5cGVvZiBhcmd1bWVudHNbMV0/Yz1hcmd1bWVudHNbMV06YT1hcmd1bWVudHNbMV07YnJlYWs7Y2FzZSAzOmI9YXJndW1lbnRzWzBdO2E9YXJndW1lbnRzWzFdO2M9YXJndW1lbnRzWzJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzOiBleHBlY3RlZCAxLTMiKTt9cmV0dXJuIG0uZGlhbG9nKGIse2xhYmVsOmEsaWNvbjpnLk9LLGNhbGxiYWNrOmN9LHtvbkVzY2FwZTpjfHwhMH0pfSxjb25maXJtOmZ1bmN0aW9uKCl7dmFyIGI9IiIsYT1oKCJDQU5DRUwiKSxjPWgoIkNPTkZJUk0iKSxlPW51bGw7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpiPWFyZ3VtZW50c1swXTticmVhaztjYXNlIDI6Yj1hcmd1bWVudHNbMF07ImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1sxXT9lPWFyZ3VtZW50c1sxXTphPWFyZ3VtZW50c1sxXTticmVhaztjYXNlIDM6Yj0KYXJndW1lbnRzWzBdO2E9YXJndW1lbnRzWzFdOyJmdW5jdGlvbiI9PXR5cGVvZiBhcmd1bWVudHNbMl0/ZT1hcmd1bWVudHNbMl06Yz1hcmd1bWVudHNbMl07YnJlYWs7Y2FzZSA0OmI9YXJndW1lbnRzWzBdO2E9YXJndW1lbnRzWzFdO2M9YXJndW1lbnRzWzJdO2U9YXJndW1lbnRzWzNdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzOiBleHBlY3RlZCAxLTQiKTt9dmFyIGo9ZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT09dHlwZW9mIGUmJmUoITEpfTtyZXR1cm4gbS5kaWFsb2coYixbe2xhYmVsOmEsaWNvbjpnLkNBTkNFTCxjYWxsYmFjazpqfSx7bGFiZWw6YyxpY29uOmcuQ09ORklSTSxjYWxsYmFjazpmdW5jdGlvbigpeyJmdW5jdGlvbiI9PT10eXBlb2YgZSYmZSghMCl9fV0se29uRXNjYXBlOmp9KX0scHJvbXB0OmZ1bmN0aW9uKCl7dmFyIGI9IiIsYT1oKCJDQU5DRUwiKSxjPWgoIkNPTkZJUk0iKSxlPW51bGwsaj0iIjtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOmI9CmFyZ3VtZW50c1swXTticmVhaztjYXNlIDI6Yj1hcmd1bWVudHNbMF07ImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1sxXT9lPWFyZ3VtZW50c1sxXTphPWFyZ3VtZW50c1sxXTticmVhaztjYXNlIDM6Yj1hcmd1bWVudHNbMF07YT1hcmd1bWVudHNbMV07ImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1syXT9lPWFyZ3VtZW50c1syXTpjPWFyZ3VtZW50c1syXTticmVhaztjYXNlIDQ6Yj1hcmd1bWVudHNbMF07YT1hcmd1bWVudHNbMV07Yz1hcmd1bWVudHNbMl07ZT1hcmd1bWVudHNbM107YnJlYWs7Y2FzZSA1OmI9YXJndW1lbnRzWzBdO2E9YXJndW1lbnRzWzFdO2M9YXJndW1lbnRzWzJdO2U9YXJndW1lbnRzWzNdO2o9YXJndW1lbnRzWzRdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzOiBleHBlY3RlZCAxLTUiKTt9dmFyIGQ9bigiPGZvcm0+PC9mb3JtPiIpO2QuYXBwZW5kKCI8aW5wdXQgYXV0b2NvbXBsZXRlPW9mZiB0eXBlPXRleHQgdmFsdWU9JyIrCmorIicgLz4iKTt2YXIgaj1mdW5jdGlvbigpeyJmdW5jdGlvbiI9PT10eXBlb2YgZSYmZShudWxsKX0saz1tLmRpYWxvZyhkLFt7bGFiZWw6YSxpY29uOmcuQ0FOQ0VMLGNhbGxiYWNrOmp9LHtsYWJlbDpjLGljb246Zy5DT05GSVJNLGNhbGxiYWNrOmZ1bmN0aW9uKCl7ImZ1bmN0aW9uIj09PXR5cGVvZiBlJiZlKGQuZmluZCgiaW5wdXRbdHlwZT10ZXh0XSIpLnZhbCgpKX19XSx7aGVhZGVyOmIsc2hvdzohMSxvbkVzY2FwZTpqfSk7ay5vbigic2hvd24iLGZ1bmN0aW9uKCl7ZC5maW5kKCJpbnB1dFt0eXBlPXRleHRdIikuZm9jdXMoKTtkLm9uKCJzdWJtaXQiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTtrLmZpbmQoIi5idG4tcHJpbWFyeSIpLmNsaWNrKCl9KX0pO2subW9kYWwoInNob3ciKTtyZXR1cm4ga30sZGlhbG9nOmZ1bmN0aW9uKGIsYSxjKXt2YXIgZT0iIixqPVtdO2M9Y3x8e307bnVsbD09YT9hPVtdOiJ1bmRlZmluZWQiPT10eXBlb2YgYS5sZW5ndGgmJihhPQpbYV0pO2Zvcih2YXIgZD1hLmxlbmd0aDtkLS07KXt2YXIgaz1udWxsLGc9bnVsbCxoPW51bGwsbD0iIixtPW51bGw7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhW2RdLmxhYmVsJiYidW5kZWZpbmVkIj09dHlwZW9mIGFbZF1bImNsYXNzIl0mJiJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXS5jYWxsYmFjayl7dmFyIGs9MCxnPW51bGwscDtmb3IocCBpbiBhW2RdKWlmKGc9cCwxPCsraylicmVhazsxPT1rJiYiZnVuY3Rpb24iPT10eXBlb2YgYVtkXVtwXSYmKGFbZF0ubGFiZWw9ZyxhW2RdLmNhbGxiYWNrPWFbZF1bcF0pfSJmdW5jdGlvbiI9PXR5cGVvZiBhW2RdLmNhbGxiYWNrJiYobT1hW2RdLmNhbGxiYWNrKTthW2RdWyJjbGFzcyJdP2g9YVtkXVsiY2xhc3MiXTpkPT1hLmxlbmd0aC0xJiYyPj1hLmxlbmd0aCYmKGg9ImJ0bi1wcmltYXJ5Iik7az1hW2RdLmxhYmVsP2FbZF0ubGFiZWw6Ik9wdGlvbiAiKyhkKzEpO2FbZF0uaWNvbiYmKGw9IjxpIGNsYXNzPSciK2FbZF0uaWNvbisiJz48L2k+ICIpOwpnPWFbZF0uaHJlZj9hW2RdLmhyZWY6ImphdmFzY3JpcHQ6OyI7ZT0iPGEgZGF0YS1oYW5kbGVyPSciK2QrIicgY2xhc3M9J2J0biAiK2grIicgaHJlZj0nIitnKyInPiIrbCsiIitrKyI8L2E+IitlO2pbZF09bX1kPVsiPGRpdiBjbGFzcz0nYm9vdGJveCBtb2RhbCcgdGFiaW5kZXg9Jy0xJyBzdHlsZT0nb3ZlcmZsb3c6aGlkZGVuOyc+Il07aWYoYy5oZWFkZXIpe2g9IiI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBjLmhlYWRlckNsb3NlQnV0dG9ufHxjLmhlYWRlckNsb3NlQnV0dG9uKWg9IjxhIGhyZWY9J2phdmFzY3JpcHQ6OycgY2xhc3M9J2Nsb3NlJz4mdGltZXM7PC9hPiI7ZC5wdXNoKCI8ZGl2IGNsYXNzPSdtb2RhbC1oZWFkZXInPiIraCsiPGgzPiIrYy5oZWFkZXIrIjwvaDM+PC9kaXY+Iil9ZC5wdXNoKCI8ZGl2IGNsYXNzPSdtb2RhbC1ib2R5Jz48L2Rpdj4iKTtlJiZkLnB1c2goIjxkaXYgY2xhc3M9J21vZGFsLWZvb3Rlcic+IitlKyI8L2Rpdj4iKTtkLnB1c2goIjwvZGl2PiIpOwp2YXIgZj1uKGQuam9pbigiXG4iKSk7KCJ1bmRlZmluZWQiPT09dHlwZW9mIGMuYW5pbWF0ZT90OmMuYW5pbWF0ZSkmJmYuYWRkQ2xhc3MoImZhZGUiKTsoZT0idW5kZWZpbmVkIj09PXR5cGVvZiBjLmNsYXNzZXM/dTpjLmNsYXNzZXMpJiZmLmFkZENsYXNzKGUpO2YuZmluZCgiLm1vZGFsLWJvZHkiKS5odG1sKGIpO2Yub24oImhpZGRlbiIsZnVuY3Rpb24oKXtmLnJlbW92ZSgpfSk7Zi5vbigia2V5dXAuZGlzbWlzcy5tb2RhbCIsZnVuY3Rpb24oYSl7aWYoMjc9PWEud2hpY2gmJmMub25Fc2NhcGUpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYy5vbkVzY2FwZSljLm9uRXNjYXBlKCk7Zi5tb2RhbCgiaGlkZSIpfX0pO2Yub24oInNob3duIixmdW5jdGlvbigpe2YuZmluZCgiYS5idG4tcHJpbWFyeTpmaXJzdCIpLmZvY3VzKCl9KTtmLm9uKCJjbGljayIsIi5tb2RhbC1mb290ZXIgYSwgYS5jbG9zZSIsZnVuY3Rpb24oYil7dmFyIGM9bih0aGlzKS5kYXRhKCJoYW5kbGVyIiksZD1qW2NdLAplPW51bGw7InVuZGVmaW5lZCIhPT10eXBlb2YgYyYmInVuZGVmaW5lZCIhPT10eXBlb2YgYVtjXS5ocmVmfHwoYi5wcmV2ZW50RGVmYXVsdCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBkJiYoZT1kKCkpLCExIT09ZSYmZi5tb2RhbCgiaGlkZSIpKX0pO24oImJvZHkiKS5hcHBlbmQoZik7Zi5tb2RhbCh7YmFja2Ryb3A6InVuZGVmaW5lZCI9PT10eXBlb2YgYy5iYWNrZHJvcD9xOmMuYmFja2Ryb3Asa2V5Ym9hcmQ6ITEsc2hvdzohMX0pO2Yub24oInNob3ciLGZ1bmN0aW9uKCl7bih2KS5vZmYoImZvY3VzaW4ubW9kYWwiKX0pOygidW5kZWZpbmVkIj09PXR5cGVvZiBjLnNob3d8fCEwPT09Yy5zaG93KSYmZi5tb2RhbCgic2hvdyIpO3JldHVybiBmfSxtb2RhbDpmdW5jdGlvbigpe3ZhciBiLGEsYyxlPXtvbkVzY2FwZTpudWxsLGtleWJvYXJkOiEwLGJhY2tkcm9wOnF9O3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6Yj1hcmd1bWVudHNbMF07YnJlYWs7Y2FzZSAyOmI9YXJndW1lbnRzWzBdOwoib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1sxXT9jPWFyZ3VtZW50c1sxXTphPWFyZ3VtZW50c1sxXTticmVhaztjYXNlIDM6Yj1hcmd1bWVudHNbMF07YT1hcmd1bWVudHNbMV07Yz1hcmd1bWVudHNbMl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHM6IGV4cGVjdGVkIDEtMyIpO31lLmhlYWRlcj1hO2M9Im9iamVjdCI9PXR5cGVvZiBjP24uZXh0ZW5kKGUsYyk6ZTtyZXR1cm4gbS5kaWFsb2coYixbXSxjKX0saGlkZUFsbDpmdW5jdGlvbigpe24oIi5ib290Ym94IikubW9kYWwoImhpZGUiKX0sYW5pbWF0ZTpmdW5jdGlvbihiKXt0PWJ9LGJhY2tkcm9wOmZ1bmN0aW9uKGIpe3E9Yn0sY2xhc3NlczpmdW5jdGlvbihiKXt1PWJ9fSxsPXtlbjp7T0s6Ik9LIixDQU5DRUw6IkNhbmNlbCIsQ09ORklSTToiT0sifSxmcjp7T0s6Ik9LIixDQU5DRUw6IkFubnVsZXIiLENPTkZJUk06IkQnYWNjb3JkIn0sZGU6e09LOiJPSyIsQ0FOQ0VMOiJBYmJyZWNoZW4iLApDT05GSVJNOiJBa3plcHRpZXJlbiJ9LGVzOntPSzoiT0siLENBTkNFTDoiQ2FuY2VsYXIiLENPTkZJUk06IkFjZXB0YXIifSxicjp7T0s6Ik9LIixDQU5DRUw6IkNhbmNlbGFyIixDT05GSVJNOiJTaW0ifSxubDp7T0s6Ik9LIixDQU5DRUw6IkFubnVsZXJlbiIsQ09ORklSTToiQWNjZXB0ZXJlbiJ9LHJ1OntPSzoiT0siLENBTkNFTDoiXHUwNDFlXHUwNDQyXHUwNDNjXHUwNDM1XHUwNDNkXHUwNDMwIixDT05GSVJNOiJcdTA0MWZcdTA0NDBcdTA0MzhcdTA0M2NcdTA0MzVcdTA0M2RcdTA0MzhcdTA0NDJcdTA0NGMifSxpdDp7T0s6Ik9LIixDQU5DRUw6IkFubnVsbGEiLENPTkZJUk06IkNvbmZlcm1hIn19O3JldHVybiBtfShkb2N1bWVudCx3aW5kb3cualF1ZXJ5KTt3aW5kb3cuYm9vdGJveD1ib290Ym94Owo="></script>
<script src="data:application/javascript;base64,dmFyIFNMSURFX0NPTkZJRyA9IHsKICAvLyBTbGlkZSBzZXR0aW5ncwogIHNldHRpbmdzOiB7CiAgICB1c2VCdWlsZHM6IHRydWUsIC8vIERlZmF1bHQ6IHRydWUuIEZhbHNlIHdpbGwgdHVybiBvZmYgc2xpZGUgYW5pbWF0aW9uIGJ1aWxkcy4KICAgIHVzZVByZXR0aWZ5OiBmYWxzZSwgLy8gRGVmYXVsdDogdHJ1ZQogICAgZW5hYmxlU2xpZGVBcmVhczogZmFsc2UsIC8vIERlZmF1bHQ6IHRydWUuIEZhbHNlIHR1cm5zIG9mZiB0aGUgY2xpY2sgYXJlYXMgb24gZWl0aGVyIHNsaWRlIG9mIHRoZSBzbGlkZXMuCiAgICBlbmFibGVUb3VjaDogdHJ1ZSwgLy8gRGVmYXVsdDogdHJ1ZS4gSWYgdG91Y2ggc3VwcG9ydCBzaG91bGQgZW5hYmxlZC4gTm90ZTogdGhlIGRldmljZSBtdXN0IHN1cHBvcnQgdG91Y2guCiAgICAvL2FuYWx5dGljczogJ1VBLVhYWFhYWFhYLTEnLCAvLyBUT0RPOiBVc2luZyB0aGlzIGJyZWFrcyBHQSBmb3Igc29tZSByZWFzb24gKHByb2JhYmx5IHJlcXVpcmVqcykuIFVwZGF0ZSB5b3VyIHRyYWNraW5nIGNvZGUgaW4gdGVtcGxhdGUuaHRtbCBpbnN0ZWFkLgogICAgZmF2SWNvbjogZmFsc2UsCiAgICBmb250czogWwogICAgICAnT3BlbiBTYW5zOnJlZ3VsYXIsc2VtaWJvbGQsaXRhbGljLGl0YWxpY3NlbWlib2xkJywKICAgICAgJ0luY29uc29sYXRhJwogICAgXSwKICAgIC8vdGhlbWU6IFsnbXl0aGVtZSddLCAvLyBBZGQgeW91ciBvd24gY3VzdG9tIHRoZW1lcyBvciBzdHlsZXMgaW4gL3RoZW1lL2Nzcy4gTGVhdmUgb2ZmIHRoZSAuY3NzIGV4dGVuc2lvbi4KICB9LAp9Ow=="></script>
<script src="data:application/javascript;base64,LyogTW9kZXJuaXpyIDIuNS4zIChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECiAqIEJ1aWxkOiBodHRwOi8vd3d3Lm1vZGVybml6ci5jb20vZG93bmxvYWQvIy1mb250ZmFjZS1iYWNrZ3JvdW5kc2l6ZS1ib3JkZXJpbWFnZS1ib3JkZXJyYWRpdXMtYm94c2hhZG93LWZsZXhib3gtZmxleGJveF9sZWdhY3ktaHNsYS1tdWx0aXBsZWJncy1vcGFjaXR5LXJnYmEtdGV4dHNoYWRvdy1jc3NhbmltYXRpb25zLWNzc2NvbHVtbnMtZ2VuZXJhdGVkY29udGVudC1jc3NncmFkaWVudHMtY3NzcmVmbGVjdGlvbnMtY3NzdHJhbnNmb3Jtcy1jc3N0cmFuc2Zvcm1zM2QtY3NzdHJhbnNpdGlvbnMtYXBwbGljYXRpb25jYWNoZS1jYW52YXMtY2FudmFzdGV4dC1kcmFnYW5kZHJvcC1oYXNoY2hhbmdlLWhpc3RvcnktYXVkaW8tdmlkZW8taW5kZXhlZGRiLWlucHV0LWlucHV0dHlwZXMtbG9jYWxzdG9yYWdlLXBvc3RtZXNzYWdlLXNlc3Npb25zdG9yYWdlLXdlYnNvY2tldHMtd2Vic3FsZGF0YWJhc2Utd2Vid29ya2Vycy1nZW9sb2NhdGlvbi1pbmxpbmVzdmctc21pbC1zdmctc3ZnY2xpcHBhdGhzLXRvdWNoLXdlYmdsLW1xLXByZWZpeGVkLXRlc3RzdHlsZXMtdGVzdHByb3AtdGVzdGFsbHByb3BzLWhhc2V2ZW50LXByZWZpeGVzLWRvbXByZWZpeGVzLWxvYWQKICovCjt3aW5kb3cuTW9kZXJuaXpyPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBDKGEpe2kuY3NzVGV4dD1hfWZ1bmN0aW9uIEQoYSxiKXtyZXR1cm4gQyhtLmpvaW4oYSsiOyIpKyhifHwiIikpfWZ1bmN0aW9uIEUoYSxiKXtyZXR1cm4gdHlwZW9mIGE9PT1ifWZ1bmN0aW9uIEYoYSxiKXtyZXR1cm4hIX4oIiIrYSkuaW5kZXhPZihiKX1mdW5jdGlvbiBHKGEsYil7Zm9yKHZhciBkIGluIGEpaWYoaVthW2RdXSE9PWMpcmV0dXJuIGI9PSJwZngiP2FbZF06ITA7cmV0dXJuITF9ZnVuY3Rpb24gSChhLGIsZCl7Zm9yKHZhciBlIGluIGEpe3ZhciBmPWJbYVtlXV07aWYoZiE9PWMpcmV0dXJuIGQ9PT0hMT9hW2VdOkUoZiwiZnVuY3Rpb24iKT9mLmJpbmQoZHx8Yik6Zn1yZXR1cm4hMX1mdW5jdGlvbiBJKGEsYixjKXt2YXIgZD1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyKDEpLGU9KGErIiAiK28uam9pbihkKyIgIikrZCkuc3BsaXQoIiAiKTtyZXR1cm4gRShiLCJzdHJpbmciKXx8RShiLCJ1bmRlZmluZWQiKT9HKGUsYik6KGU9KGErIiAiK3Auam9pbihkKyIgIikrZCkuc3BsaXQoIiAiKSxIKGUsYixjKSl9ZnVuY3Rpb24gSygpe2UuaW5wdXQ9ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT1jLmxlbmd0aDtkPGU7ZCsrKXRbY1tkXV09Y1tkXWluIGo7cmV0dXJuIHQubGlzdCYmKHQubGlzdD0hIWIuY3JlYXRlRWxlbWVudCgiZGF0YWxpc3QiKSYmISFhLkhUTUxEYXRhTGlzdEVsZW1lbnQpLHR9KCJhdXRvY29tcGxldGUgYXV0b2ZvY3VzIGxpc3QgcGxhY2Vob2xkZXIgbWF4IG1pbiBtdWx0aXBsZSBwYXR0ZXJuIHJlcXVpcmVkIHN0ZXAiLnNwbGl0KCIgIikpLGUuaW5wdXR0eXBlcz1mdW5jdGlvbihhKXtmb3IodmFyIGQ9MCxlLGcsaCxpPWEubGVuZ3RoO2Q8aTtkKyspai5zZXRBdHRyaWJ1dGUoInR5cGUiLGc9YVtkXSksZT1qLnR5cGUhPT0idGV4dCIsZSYmKGoudmFsdWU9ayxqLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuOyIsL15yYW5nZSQvLnRlc3QoZykmJmouc3R5bGUuV2Via2l0QXBwZWFyYW5jZSE9PWM/KGYuYXBwZW5kQ2hpbGQoaiksaD1iLmRlZmF1bHRWaWV3LGU9aC5nZXRDb21wdXRlZFN0eWxlJiZoLmdldENvbXB1dGVkU3R5bGUoaixudWxsKS5XZWJraXRBcHBlYXJhbmNlIT09InRleHRmaWVsZCImJmoub2Zmc2V0SGVpZ2h0IT09MCxmLnJlbW92ZUNoaWxkKGopKTovXihzZWFyY2h8dGVsKSQvLnRlc3QoZyl8fCgvXih1cmx8ZW1haWwpJC8udGVzdChnKT9lPWouY2hlY2tWYWxpZGl0eSYmai5jaGVja1ZhbGlkaXR5KCk9PT0hMTovXmNvbG9yJC8udGVzdChnKT8oZi5hcHBlbmRDaGlsZChqKSxmLm9mZnNldFdpZHRoLGU9ai52YWx1ZSE9ayxmLnJlbW92ZUNoaWxkKGopKTplPWoudmFsdWUhPWspKSxzW2FbZF1dPSEhZTtyZXR1cm4gc30oInNlYXJjaCB0ZWwgdXJsIGVtYWlsIGRhdGV0aW1lIGRhdGUgbW9udGggd2VlayB0aW1lIGRhdGV0aW1lLWxvY2FsIG51bWJlciByYW5nZSBjb2xvciIuc3BsaXQoIiAiKSl9dmFyIGQ9IjIuNS4zIixlPXt9LGY9Yi5kb2N1bWVudEVsZW1lbnQsZz0ibW9kZXJuaXpyIixoPWIuY3JlYXRlRWxlbWVudChnKSxpPWguc3R5bGUsaj1iLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksaz0iOikiLGw9e30udG9TdHJpbmcsbT0iIC13ZWJraXQtIC1tb3otIC1vLSAtbXMtICIuc3BsaXQoIiAiKSxuPSJXZWJraXQgTW96IE8gbXMiLG89bi5zcGxpdCgiICIpLHA9bi50b0xvd2VyQ2FzZSgpLnNwbGl0KCIgIikscT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LHI9e30scz17fSx0PXt9LHU9W10sdj11LnNsaWNlLHcseD1mdW5jdGlvbihhLGMsZCxlKXt2YXIgaCxpLGosaz1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9Yi5ib2R5LG09bD9sOmIuY3JlYXRlRWxlbWVudCgiYm9keSIpO2lmKHBhcnNlSW50KGQsMTApKXdoaWxlKGQtLSlqPWIuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5pZD1lP2VbZF06ZysoZCsxKSxrLmFwcGVuZENoaWxkKGopO3JldHVybiBoPVsiJiMxNzM7IiwiPHN0eWxlPiIsYSwiPC9zdHlsZT4iXS5qb2luKCIiKSxrLmlkPWcsKGw/azptKS5pbm5lckhUTUwrPWgsbS5hcHBlbmRDaGlsZChrKSxsfHwobS5zdHlsZS5iYWNrZ3JvdW5kPSIiLGYuYXBwZW5kQ2hpbGQobSkpLGk9YyhrLGEpLGw/ay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspOm0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtKSwhIWl9LHk9ZnVuY3Rpb24oYil7dmFyIGM9YS5tYXRjaE1lZGlhfHxhLm1zTWF0Y2hNZWRpYTtpZihjKXJldHVybiBjKGIpLm1hdGNoZXM7dmFyIGQ7cmV0dXJuIHgoIkBtZWRpYSAiK2IrIiB7ICMiK2crIiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgfSB9IixmdW5jdGlvbihiKXtkPShhLmdldENvbXB1dGVkU3R5bGU/Z2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlKVsicG9zaXRpb24iXT09ImFic29sdXRlIn0pLGR9LHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKGQsZSl7ZT1lfHxiLmNyZWF0ZUVsZW1lbnQoYVtkXXx8ImRpdiIpLGQ9Im9uIitkO3ZhciBmPWQgaW4gZTtyZXR1cm4gZnx8KGUuc2V0QXR0cmlidXRlfHwoZT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxlLnNldEF0dHJpYnV0ZSYmZS5yZW1vdmVBdHRyaWJ1dGUmJihlLnNldEF0dHJpYnV0ZShkLCIiKSxmPUUoZVtkXSwiZnVuY3Rpb24iKSxFKGVbZF0sInVuZGVmaW5lZCIpfHwoZVtkXT1jKSxlLnJlbW92ZUF0dHJpYnV0ZShkKSkpLGU9bnVsbCxmfXZhciBhPXtzZWxlY3Q6ImlucHV0IixjaGFuZ2U6ImlucHV0IixzdWJtaXQ6ImZvcm0iLHJlc2V0OiJmb3JtIixlcnJvcjoiaW1nIixsb2FkOiJpbWciLGFib3J0OiJpbWcifTtyZXR1cm4gZH0oKSxBPXt9Lmhhc093blByb3BlcnR5LEI7IUUoQSwidW5kZWZpbmVkIikmJiFFKEEuY2FsbCwidW5kZWZpbmVkIik/Qj1mdW5jdGlvbihhLGIpe3JldHVybiBBLmNhbGwoYSxiKX06Qj1mdW5jdGlvbihhLGIpe3JldHVybiBiIGluIGEmJkUoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbYl0sInVuZGVmaW5lZCIpfSxGdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYodHlwZW9mIGMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgZD12LmNhbGwoYXJndW1lbnRzLDEpLGU9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7dmFyIGE9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlPWMucHJvdG90eXBlO3ZhciBmPW5ldyBhLGc9Yy5hcHBseShmLGQuY29uY2F0KHYuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChnKT09PWc/ZzpmfXJldHVybiBjLmFwcGx5KGIsZC5jb25jYXQodi5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIGV9KTt2YXIgSj1mdW5jdGlvbihjLGQpe3ZhciBmPWMuam9pbigiIiksZz1kLmxlbmd0aDt4KGYsZnVuY3Rpb24oYyxkKXt2YXIgZj1iLnN0eWxlU2hlZXRzW2Iuc3R5bGVTaGVldHMubGVuZ3RoLTFdLGg9Zj9mLmNzc1J1bGVzJiZmLmNzc1J1bGVzWzBdP2YuY3NzUnVsZXNbMF0uY3NzVGV4dDpmLmNzc1RleHR8fCIiOiIiLGk9Yy5jaGlsZE5vZGVzLGo9e307d2hpbGUoZy0tKWpbaVtnXS5pZF09aVtnXTtlLnRvdWNoPSJvbnRvdWNoc3RhcnQiaW4gYXx8YS5Eb2N1bWVudFRvdWNoJiZiIGluc3RhbmNlb2YgRG9jdW1lbnRUb3VjaHx8KGoudG91Y2gmJmoudG91Y2gub2Zmc2V0VG9wKT09PTksZS5jc3N0cmFuc2Zvcm1zM2Q9KGouY3NzdHJhbnNmb3JtczNkJiZqLmNzc3RyYW5zZm9ybXMzZC5vZmZzZXRMZWZ0KT09PTkmJmouY3NzdHJhbnNmb3JtczNkLm9mZnNldEhlaWdodD09PTMsZS5nZW5lcmF0ZWRjb250ZW50PShqLmdlbmVyYXRlZGNvbnRlbnQmJmouZ2VuZXJhdGVkY29udGVudC5vZmZzZXRIZWlnaHQpPj0xLGUuZm9udGZhY2U9L3NyYy9pLnRlc3QoaCkmJmguaW5kZXhPZihkLnNwbGl0KCIgIilbMF0pPT09MH0sZyxkKX0oWydAZm9udC1mYWNlIHtmb250LWZhbWlseToiZm9udCI7c3JjOnVybCgiaHR0cHM6Ly8iKX0nLFsiQG1lZGlhICgiLG0uam9pbigidG91Y2gtZW5hYmxlZCksKCIpLGcsIikiLCJ7I3RvdWNoe3RvcDo5cHg7cG9zaXRpb246YWJzb2x1dGV9fSJdLmpvaW4oIiIpLFsiQG1lZGlhICgiLG0uam9pbigidHJhbnNmb3JtLTNkKSwoIiksZywiKSIsInsjY3NzdHJhbnNmb3JtczNke2xlZnQ6OXB4O3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDozcHg7fX0iXS5qb2luKCIiKSxbJyNnZW5lcmF0ZWRjb250ZW50OmFmdGVye2NvbnRlbnQ6IicsaywnIjt2aXNpYmlsaXR5OmhpZGRlbn0nXS5qb2luKCIiKV0sWyJmb250ZmFjZSIsInRvdWNoIiwiY3NzdHJhbnNmb3JtczNkIiwiZ2VuZXJhdGVkY29udGVudCJdKTtyLmZsZXhib3g9ZnVuY3Rpb24oKXtyZXR1cm4gSSgiZmxleE9yZGVyIil9LHJbImZsZXhib3gtbGVnYWN5Il09ZnVuY3Rpb24oKXtyZXR1cm4gSSgiYm94RGlyZWN0aW9uIil9LHIuY2FudmFzPWZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4hIWEuZ2V0Q29udGV4dCYmISFhLmdldENvbnRleHQoIjJkIil9LHIuY2FudmFzdGV4dD1mdW5jdGlvbigpe3JldHVybiEhZS5jYW52YXMmJiEhRShiLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIikuZmlsbFRleHQsImZ1bmN0aW9uIil9LHIud2ViZ2w9ZnVuY3Rpb24oKXt0cnl7dmFyIGQ9Yi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxlO2U9ISghYS5XZWJHTFJlbmRlcmluZ0NvbnRleHR8fCFkLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpJiYhZC5nZXRDb250ZXh0KCJ3ZWJnbCIpKSxkPWN9Y2F0Y2goZil7ZT0hMX1yZXR1cm4gZX0sci50b3VjaD1mdW5jdGlvbigpe3JldHVybiBlLnRvdWNofSxyLmdlb2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuISFuYXZpZ2F0b3IuZ2VvbG9jYXRpb259LHIucG9zdG1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWEucG9zdE1lc3NhZ2V9LHIud2Vic3FsZGF0YWJhc2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWEub3BlbkRhdGFiYXNlfSxyLmluZGV4ZWREQj1mdW5jdGlvbigpe3JldHVybiEhSSgiaW5kZXhlZERCIixhKX0sci5oYXNoY2hhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHooImhhc2hjaGFuZ2UiLGEpJiYoYi5kb2N1bWVudE1vZGU9PT1jfHxiLmRvY3VtZW50TW9kZT43KX0sci5oaXN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuISFhLmhpc3RvcnkmJiEhaGlzdG9yeS5wdXNoU3RhdGV9LHIuZHJhZ2FuZGRyb3A9ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gYXx8Im9uZHJhZ3N0YXJ0ImluIGEmJiJvbmRyb3AiaW4gYX0sci53ZWJzb2NrZXRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPS0xLGM9by5sZW5ndGg7KytiPGM7KWlmKGFbb1tiXSsiV2ViU29ja2V0Il0pcmV0dXJuITA7cmV0dXJuIldlYlNvY2tldCJpbiBhfSxyLnJnYmE9ZnVuY3Rpb24oKXtyZXR1cm4gQygiYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwyNTUsMTUwLC41KSIpLEYoaS5iYWNrZ3JvdW5kQ29sb3IsInJnYmEiKX0sci5oc2xhPWZ1bmN0aW9uKCl7cmV0dXJuIEMoImJhY2tncm91bmQtY29sb3I6aHNsYSgxMjAsNDAlLDEwMCUsLjUpIiksRihpLmJhY2tncm91bmRDb2xvciwicmdiYSIpfHxGKGkuYmFja2dyb3VuZENvbG9yLCJoc2xhIil9LHIubXVsdGlwbGViZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gQygiYmFja2dyb3VuZDp1cmwoaHR0cHM6Ly8pLHVybChodHRwczovLykscmVkIHVybChodHRwczovLykiKSwvKHVybFxzKlwoLio/KXszfS8udGVzdChpLmJhY2tncm91bmQpfSxyLmJhY2tncm91bmRzaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImJhY2tncm91bmRTaXplIil9LHIuYm9yZGVyaW1hZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gSSgiYm9yZGVySW1hZ2UiKX0sci5ib3JkZXJyYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gSSgiYm9yZGVyUmFkaXVzIil9LHIuYm94c2hhZG93PWZ1bmN0aW9uKCl7cmV0dXJuIEkoImJveFNoYWRvdyIpfSxyLnRleHRzaGFkb3c9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZS50ZXh0U2hhZG93PT09IiJ9LHIub3BhY2l0eT1mdW5jdGlvbigpe3JldHVybiBEKCJvcGFjaXR5Oi41NSIpLC9eMC41NSQvLnRlc3QoaS5vcGFjaXR5KX0sci5jc3NhbmltYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImFuaW1hdGlvbk5hbWUiKX0sci5jc3Njb2x1bW5zPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImNvbHVtbkNvdW50Iil9LHIuY3NzZ3JhZGllbnRzPWZ1bmN0aW9uKCl7dmFyIGE9ImJhY2tncm91bmQtaW1hZ2U6IixiPSJncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgYm90dG9tLGZyb20oIzlmOSksdG8od2hpdGUpKTsiLGM9ImxpbmVhci1ncmFkaWVudChsZWZ0IHRvcCwjOWY5LCB3aGl0ZSk7IjtyZXR1cm4gQygoYSsiLXdlYmtpdC0gIi5zcGxpdCgiICIpLmpvaW4oYithKSttLmpvaW4oYythKSkuc2xpY2UoMCwtYS5sZW5ndGgpKSxGKGkuYmFja2dyb3VuZEltYWdlLCJncmFkaWVudCIpfSxyLmNzc3JlZmxlY3Rpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImJveFJlZmxlY3QiKX0sci5jc3N0cmFuc2Zvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuISFJKCJ0cmFuc2Zvcm0iKX0sci5jc3N0cmFuc2Zvcm1zM2Q9ZnVuY3Rpb24oKXt2YXIgYT0hIUkoInBlcnNwZWN0aXZlIik7cmV0dXJuIGEmJiJ3ZWJraXRQZXJzcGVjdGl2ZSJpbiBmLnN0eWxlJiYoYT1lLmNzc3RyYW5zZm9ybXMzZCksYX0sci5jc3N0cmFuc2l0aW9ucz1mdW5jdGlvbigpe3JldHVybiBJKCJ0cmFuc2l0aW9uIil9LHIuZm9udGZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mb250ZmFjZX0sci5nZW5lcmF0ZWRjb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VuZXJhdGVkY29udGVudH0sci52aWRlbz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgidmlkZW8iKSxjPSExO3RyeXtpZihjPSEhYS5jYW5QbGF5VHlwZSljPW5ldyBCb29sZWFuKGMpLGMub2dnPWEuY2FuUGxheVR5cGUoJ3ZpZGVvL29nZzsgY29kZWNzPSJ0aGVvcmEiJykucmVwbGFjZSgvXm5vJC8sIiIpLGMuaDI2ND1hLmNhblBsYXlUeXBlKCd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40MkUwMUUiJykucmVwbGFjZSgvXm5vJC8sIiIpLGMud2VibT1hLmNhblBsYXlUeXBlKCd2aWRlby93ZWJtOyBjb2RlY3M9InZwOCwgdm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCIiKX1jYXRjaChkKXt9cmV0dXJuIGN9LHIuYXVkaW89ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImF1ZGlvIiksYz0hMTt0cnl7aWYoYz0hIWEuY2FuUGxheVR5cGUpYz1uZXcgQm9vbGVhbihjKSxjLm9nZz1hLmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz0idm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCIiKSxjLm1wMz1hLmNhblBsYXlUeXBlKCJhdWRpby9tcGVnOyIpLnJlcGxhY2UoL15ubyQvLCIiKSxjLndhdj1hLmNhblBsYXlUeXBlKCdhdWRpby93YXY7IGNvZGVjcz0iMSInKS5yZXBsYWNlKC9ebm8kLywiIiksYy5tNGE9KGEuY2FuUGxheVR5cGUoImF1ZGlvL3gtbTRhOyIpfHxhLmNhblBsYXlUeXBlKCJhdWRpby9hYWM7IikpLnJlcGxhY2UoL15ubyQvLCIiKX1jYXRjaChkKXt9cmV0dXJuIGN9LHIubG9jYWxzdG9yYWdlPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShnLGcpLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGcpLCEwfWNhdGNoKGEpe3JldHVybiExfX0sci5zZXNzaW9uc3RvcmFnZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnLGcpLHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oZyksITB9Y2F0Y2goYSl7cmV0dXJuITF9fSxyLndlYndvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuV29ya2VyfSxyLmFwcGxpY2F0aW9uY2FjaGU9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuYXBwbGljYXRpb25DYWNoZX0sci5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYhIWIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJzdmciKS5jcmVhdGVTVkdSZWN0fSxyLmlubGluZXN2Zz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEuaW5uZXJIVE1MPSI8c3ZnLz4iLChhLmZpcnN0Q2hpbGQmJmEuZmlyc3RDaGlsZC5uYW1lc3BhY2VVUkkpPT1xLnN2Z30sci5zbWlsPWZ1bmN0aW9uKCl7cmV0dXJuISFiLmNyZWF0ZUVsZW1lbnROUyYmL1NWR0FuaW1hdGUvLnRlc3QobC5jYWxsKGIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJhbmltYXRlIikpKX0sci5zdmdjbGlwcGF0aHM9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYvU1ZHQ2xpcFBhdGgvLnRlc3QobC5jYWxsKGIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJjbGlwUGF0aCIpKSl9O2Zvcih2YXIgTCBpbiByKUIocixMKSYmKHc9TC50b0xvd2VyQ2FzZSgpLGVbd109cltMXSgpLHUucHVzaCgoZVt3XT8iIjoibm8tIikrdykpO3JldHVybiBlLmlucHV0fHxLKCksQygiIiksaD1qPW51bGwsZS5fdmVyc2lvbj1kLGUuX3ByZWZpeGVzPW0sZS5fZG9tUHJlZml4ZXM9cCxlLl9jc3NvbVByZWZpeGVzPW8sZS5tcT15LGUuaGFzRXZlbnQ9eixlLnRlc3RQcm9wPWZ1bmN0aW9uKGEpe3JldHVybiBHKFthXSl9LGUudGVzdEFsbFByb3BzPUksZS50ZXN0U3R5bGVzPXgsZS5wcmVmaXhlZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI/SShhLGIsYyk6SShhLCJwZngiKX0sZX0odGhpcyx0aGlzLmRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoYSl7cmV0dXJuIWF8fGE9PSJsb2FkZWQifHxhPT0iY29tcGxldGUifHxhPT0idW5pbml0aWFsaXplZCJ9ZnVuY3Rpb24gaCgpe3ZhciBhPXAuc2hpZnQoKTtxPTEsYT9hLnQ/bShmdW5jdGlvbigpeyhhLnQ9PSJjIj9CLmluamVjdENzczpCLmluamVjdEpzKShhLnMsMCxhLmEsYS54LGEuZSwxKX0sMCk6KGEoKSxoKCkpOnE9MH1mdW5jdGlvbiBpKGEsYyxkLGUsZixpLGope2Z1bmN0aW9uIGsoYil7aWYoIW8mJmcobC5yZWFkeVN0YXRlKSYmKHUucj1vPTEsIXEmJmgoKSxsLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIpKXthIT0iaW1nIiYmbShmdW5jdGlvbigpe3QucmVtb3ZlQ2hpbGQobCl9LDUwKTtmb3IodmFyIGQgaW4geVtjXSl5W2NdLmhhc093blByb3BlcnR5KGQpJiZ5W2NdW2RdLm9ubG9hZCgpfX12YXIgaj1qfHxCLmVycm9yVGltZW91dCxsPXt9LG89MCxyPTAsdT17dDpkLHM6YyxlOmYsYTppLHg6an07eVtjXT09PTEmJihyPTEseVtjXT1bXSxsPWIuY3JlYXRlRWxlbWVudChhKSksYT09Im9iamVjdCI/bC5kYXRhPWM6KGwuc3JjPWMsbC50eXBlPWEpLGwud2lkdGg9bC5oZWlnaHQ9IjAiLGwub25lcnJvcj1sLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2suY2FsbCh0aGlzLHIpfSxwLnNwbGljZShlLDAsdSksYSE9ImltZyImJihyfHx5W2NdPT09Mj8odC5pbnNlcnRCZWZvcmUobCxzP251bGw6biksbShrLGopKTp5W2NdLnB1c2gobCkpfWZ1bmN0aW9uIGooYSxiLGMsZCxmKXtyZXR1cm4gcT0wLGI9Ynx8ImoiLGUoYSk/aShiPT0iYyI/djp1LGEsYix0aGlzLmkrKyxjLGQsZik6KHAuc3BsaWNlKHRoaXMuaSsrLDAsYSkscC5sZW5ndGg9PTEmJmgoKSksdGhpc31mdW5jdGlvbiBrKCl7dmFyIGE9QjtyZXR1cm4gYS5sb2FkZXI9e2xvYWQ6aixpOjB9LGF9dmFyIGw9Yi5kb2N1bWVudEVsZW1lbnQsbT1hLnNldFRpbWVvdXQsbj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxvPXt9LnRvU3RyaW5nLHA9W10scT0wLHI9Ik1vekFwcGVhcmFuY2UiaW4gbC5zdHlsZSxzPXImJiEhYi5jcmVhdGVSYW5nZSgpLmNvbXBhcmVOb2RlLHQ9cz9sOm4ucGFyZW50Tm9kZSxsPWEub3BlcmEmJm8uY2FsbChhLm9wZXJhKT09IltvYmplY3QgT3BlcmFdIixsPSEhYi5hdHRhY2hFdmVudCYmIWwsdT1yPyJvYmplY3QiOmw/InNjcmlwdCI6ImltZyIsdj1sPyJzY3JpcHQiOnUsdz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBBcnJheV0ifSx4PVtdLHk9e30sej17dGltZW91dDpmdW5jdGlvbihhLGIpe3JldHVybiBiLmxlbmd0aCYmKGEudGltZW91dD1iWzBdKSxhfX0sQSxCO0I9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYT1hLnNwbGl0KCIhIiksYj14Lmxlbmd0aCxjPWEucG9wKCksZD1hLmxlbmd0aCxjPXt1cmw6YyxvcmlnVXJsOmMscHJlZml4ZXM6YX0sZSxmLGc7Zm9yKGY9MDtmPGQ7ZisrKWc9YVtmXS5zcGxpdCgiPSIpLChlPXpbZy5zaGlmdCgpXSkmJihjPWUoYyxnKSk7Zm9yKGY9MDtmPGI7ZisrKWM9eFtmXShjKTtyZXR1cm4gY31mdW5jdGlvbiBnKGEsZSxmLGcsaSl7dmFyIGo9YihhKSxsPWouYXV0b0NhbGxiYWNrO2oudXJsLnNwbGl0KCIuIikucG9wKCkuc3BsaXQoIj8iKS5zaGlmdCgpLGouYnlwYXNzfHwoZSYmKGU9ZChlKT9lOmVbYV18fGVbZ118fGVbYS5zcGxpdCgiLyIpLnBvcCgpLnNwbGl0KCI/IilbMF1dfHxoKSxqLmluc3RlYWQ/ai5pbnN0ZWFkKGEsZSxmLGcsaSk6KHlbai51cmxdP2oubm9leGVjPSEwOnlbai51cmxdPTEsZi5sb2FkKGoudXJsLGouZm9yY2VDU1N8fCFqLmZvcmNlSlMmJiJjc3MiPT1qLnVybC5zcGxpdCgiLiIpLnBvcCgpLnNwbGl0KCI/Iikuc2hpZnQoKT8iYyI6YyxqLm5vZXhlYyxqLmF0dHJzLGoudGltZW91dCksKGQoZSl8fGQobCkpJiZmLmxvYWQoZnVuY3Rpb24oKXtrKCksZSYmZShqLm9yaWdVcmwsaSxnKSxsJiZsKGoub3JpZ1VybCxpLGcpLHlbai51cmxdPTJ9KSkpfWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGEsYyl7aWYoYSl7aWYoZShhKSljfHwoaj1mdW5jdGlvbigpe3ZhciBhPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrLmFwcGx5KHRoaXMsYSksbCgpfSksZyhhLGosYiwwLGgpO2Vsc2UgaWYoT2JqZWN0KGEpPT09YSlmb3IobiBpbiBtPWZ1bmN0aW9uKCl7dmFyIGI9MCxjO2ZvcihjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmYisrO3JldHVybiBifSgpLGEpYS5oYXNPd25Qcm9wZXJ0eShuKSYmKCFjJiYhLS1tJiYoZChqKT9qPWZ1bmN0aW9uKCl7dmFyIGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2suYXBwbHkodGhpcyxhKSxsKCl9Ompbbl09ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2EmJmEuYXBwbHkodGhpcyxiKSxsKCl9fShrW25dKSksZyhhW25dLGosYixuLGgpKX1lbHNlIWMmJmwoKX12YXIgaD0hIWEudGVzdCxpPWEubG9hZHx8YS5ib3RoLGo9YS5jYWxsYmFja3x8ZixrPWosbD1hLmNvbXBsZXRlfHxmLG0sbjtjKGg/YS55ZXA6YS5ub3BlLCEhaSksaSYmYyhpKX12YXIgaixsLG09dGhpcy55ZXBub3BlLmxvYWRlcjtpZihlKGEpKWcoYSwwLG0sMCk7ZWxzZSBpZih3KGEpKWZvcihqPTA7ajxhLmxlbmd0aDtqKyspbD1hW2pdLGUobCk/ZyhsLDAsbSwwKTp3KGwpP0IobCk6T2JqZWN0KGwpPT09bCYmaShsLG0pO2Vsc2UgT2JqZWN0KGEpPT09YSYmaShhLG0pfSxCLmFkZFByZWZpeD1mdW5jdGlvbihhLGIpe3pbYV09Yn0sQi5hZGRGaWx0ZXI9ZnVuY3Rpb24oYSl7eC5wdXNoKGEpfSxCLmVycm9yVGltZW91dD0xZTQsYi5yZWFkeVN0YXRlPT1udWxsJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLnJlYWR5U3RhdGU9ImxvYWRpbmciLGIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQT1mdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwwKSxiLnJlYWR5U3RhdGU9ImNvbXBsZXRlIn0sMCkpLGEueWVwbm9wZT1rKCksYS55ZXBub3BlLmV4ZWN1dGVTdGFjaz1oLGEueWVwbm9wZS5pbmplY3RKcz1mdW5jdGlvbihhLGMsZCxlLGksail7dmFyIGs9Yi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxsLG8sZT1lfHxCLmVycm9yVGltZW91dDtrLnNyYz1hO2ZvcihvIGluIGQpay5zZXRBdHRyaWJ1dGUobyxkW29dKTtjPWo/aDpjfHxmLGsub25yZWFkeXN0YXRlY2hhbmdlPWsub25sb2FkPWZ1bmN0aW9uKCl7IWwmJmcoay5yZWFkeVN0YXRlKSYmKGw9MSxjKCksay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCl9LG0oZnVuY3Rpb24oKXtsfHwobD0xLGMoMSkpfSxlKSxpP2sub25sb2FkKCk6bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShrLG4pfSxhLnllcG5vcGUuaW5qZWN0Q3NzPWZ1bmN0aW9uKGEsYyxkLGUsZyxpKXt2YXIgZT1iLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxqLGM9aT9oOmN8fGY7ZS5ocmVmPWEsZS5yZWw9InN0eWxlc2hlZXQiLGUudHlwZT0idGV4dC9jc3MiO2ZvcihqIGluIGQpZS5zZXRBdHRyaWJ1dGUoaixkW2pdKTtnfHwobi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLG4pLG0oYywwKSl9fSh0aGlzLGRvY3VtZW50KSxNb2Rlcm5penIubG9hZD1mdW5jdGlvbigpe3llcG5vcGUuYXBwbHkod2luZG93LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX07"></script>
<script src="data:application/javascript;base64,LyoKICogSGFtbWVyLkpTCiAqIHZlcnNpb24gMC40CiAqIGF1dGhvcjogRWlnaHQgTWVkaWEKICogaHR0cHM6Ly9naXRodWIuY29tL0VpZ2h0TWVkaWEvaGFtbWVyLmpzCiAqLwpmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucywgdW5kZWZpbmVkKQp7CiAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgdmFyIGRlZmF1bHRzID0gewogICAgICAgIC8vIHByZXZlbnQgdGhlIGRlZmF1bHQgZXZlbnQgb3Igbm90Li4uIG1pZ2h0IGJlIGJ1Z2d5IHdoZW4gZmFsc2UKICAgICAgICBwcmV2ZW50X2RlZmF1bHQgICAgOiBmYWxzZSwKICAgICAgICBjc3NfaGFja3MgICAgICAgICAgOiB0cnVlLAoKICAgICAgICBkcmFnICAgICAgICAgICAgICAgOiB0cnVlLAogICAgICAgIGRyYWdfdmVydGljYWwgICAgICA6IHRydWUsCiAgICAgICAgZHJhZ19ob3Jpem9udGFsICAgIDogdHJ1ZSwKICAgICAgICAvLyBtaW5pbXVtIGRpc3RhbmNlIGJlZm9yZSB0aGUgZHJhZyBldmVudCBzdGFydHMKICAgICAgICBkcmFnX21pbl9kaXN0YW5jZSAgOiAyMCwgLy8gcGl4ZWxzCgogICAgICAgIC8vIHBpbmNoIHpvb20gYW5kIHJvdGF0aW9uCiAgICAgICAgdHJhbnNmb3JtICAgICAgICAgIDogdHJ1ZSwKICAgICAgICBzY2FsZV90cmVzaG9sZCAgICAgOiAwLjEsCiAgICAgICAgcm90YXRpb25fdHJlc2hvbGQgIDogMTUsIC8vIGRlZ3JlZXMKCiAgICAgICAgdGFwICAgICAgICAgICAgICAgIDogdHJ1ZSwKICAgICAgICB0YXBfZG91YmxlICAgICAgICAgOiB0cnVlLAogICAgICAgIHRhcF9tYXhfaW50ZXJ2YWwgICA6IDMwMCwKICAgICAgICB0YXBfZG91YmxlX2Rpc3RhbmNlOiAyMCwKCiAgICAgICAgaG9sZCAgICAgICAgICAgICAgIDogdHJ1ZSwKICAgICAgICBob2xkX3RpbWVvdXQgICAgICAgOiA1MDAKICAgIH07CiAgICBvcHRpb25zID0gbWVyZ2VPYmplY3QoZGVmYXVsdHMsIG9wdGlvbnMpOwoKICAgIC8vIHNvbWUgY3NzIGhhY2tzCiAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYoIW9wdGlvbnMuY3NzX2hhY2tzKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHZhciB2ZW5kb3JzID0gWyd3ZWJraXQnLCdtb3onLCdtcycsJ28nLCcnXTsKICAgICAgICB2YXIgY3NzX3Byb3BzID0gewogICAgICAgICAgICAidXNlclNlbGVjdCI6ICJub25lIiwKICAgICAgICAgICAgInRvdWNoQ2FsbG91dCI6ICJub25lIiwKICAgICAgICAgICAgInVzZXJEcmFnIjogIm5vbmUiLAogICAgICAgICAgICAidGFwSGlnaGxpZ2h0Q29sb3IiOiAicmdiYSgwLDAsMCwwKSIKICAgICAgICB9OwoKICAgICAgICB2YXIgcHJvcCA9ICcnOwogICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2ZW5kb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGZvcih2YXIgcCBpbiBjc3NfcHJvcHMpIHsKICAgICAgICAgICAgICAgIHByb3AgPSBwOwogICAgICAgICAgICAgICAgaWYodmVuZG9yc1tpXSkgewogICAgICAgICAgICAgICAgICAgIHByb3AgPSB2ZW5kb3JzW2ldICsgcHJvcC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHByb3Auc3Vic3RyaW5nKDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZVsgcHJvcCBdID0gY3NzX3Byb3BzW3BdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSkoKTsKCiAgICAvLyBob2xkcyB0aGUgZGlzdGFuY2UgdGhhdCBoYXMgYmVlbiBtb3ZlZAogICAgdmFyIF9kaXN0YW5jZSA9IDA7CgogICAgLy8gaG9sZHMgdGhlIGV4YWN0IGFuZ2xlIHRoYXQgaGFzIGJlZW4gbW92ZWQKICAgIHZhciBfYW5nbGUgPSAwOwoKICAgIC8vIGhvbGRzIHRoZSBkaXJhY3Rpb24gdGhhdCBoYXMgYmVlbiBtb3ZlZAogICAgdmFyIF9kaXJlY3Rpb24gPSAwOwoKICAgIC8vIGhvbGRzIHBvc2l0aW9uIG1vdmVtZW50IGZvciBzbGlkaW5nCiAgICB2YXIgX3BvcyA9IHsgfTsKCiAgICAvLyBob3cgbWFueSBmaW5nZXJzIGFyZSBvbiB0aGUgc2NyZWVuCiAgICB2YXIgX2ZpbmdlcnMgPSAwOwoKICAgIHZhciBfZmlyc3QgPSBmYWxzZTsKCiAgICB2YXIgX2dlc3R1cmUgPSBudWxsOwogICAgdmFyIF9wcmV2X2dlc3R1cmUgPSBudWxsOwoKICAgIHZhciBfdG91Y2hfc3RhcnRfdGltZSA9IG51bGw7CiAgICB2YXIgX3ByZXZfdGFwX3BvcyA9IHt4OiAwLCB5OiAwfTsKICAgIHZhciBfcHJldl90YXBfZW5kX3RpbWUgPSBudWxsOwoKICAgIHZhciBfaG9sZF90aW1lciA9IG51bGw7CgogICAgdmFyIF9vZmZzZXQgPSB7fTsKCiAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBtb3VzZSBzdGF0dXMKICAgIHZhciBfbW91c2Vkb3duID0gZmFsc2U7CgogICAgdmFyIF9ldmVudF9zdGFydDsKICAgIHZhciBfZXZlbnRfbW92ZTsKICAgIHZhciBfZXZlbnRfZW5kOwoKCiAgICAvKioKICAgICAqIGFuZ2xlIHRvIGRpcmVjdGlvbiBkZWZpbmUKICAgICAqIEBwYXJhbSAgZmxvYXQgICAgYW5nbGUKICAgICAqIEByZXR1cm4gc3RyaW5nICAgZGlyZWN0aW9uCiAgICAgKi8KICAgIHRoaXMuZ2V0RGlyZWN0aW9uRnJvbUFuZ2xlID0gZnVuY3Rpb24oIGFuZ2xlICkKICAgIHsKICAgICAgICB2YXIgZGlyZWN0aW9ucyA9IHsKICAgICAgICAgICAgZG93bjogYW5nbGUgPj0gNDUgJiYgYW5nbGUgPCAxMzUsIC8vOTAKICAgICAgICAgICAgbGVmdDogYW5nbGUgPj0gMTM1IHx8IGFuZ2xlIDw9IC0xMzUsIC8vMTgwCiAgICAgICAgICAgIHVwOiBhbmdsZSA8IC00NSAmJiBhbmdsZSA+IC0xMzUsIC8vMjcwCiAgICAgICAgICAgIHJpZ2h0OiBhbmdsZSA+PSAtNDUgJiYgYW5nbGUgPD0gNDUgLy8wCiAgICAgICAgfTsKCiAgICAgICAgdmFyIGRpcmVjdGlvbiwga2V5OwogICAgICAgIGZvcihrZXkgaW4gZGlyZWN0aW9ucyl7CiAgICAgICAgICAgIGlmKGRpcmVjdGlvbnNba2V5XSl7CiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBrZXk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZGlyZWN0aW9uOwogICAgfTsKCgogICAgLyoqCiAgICAgKiBjb3VudCB0aGUgbnVtYmVyIG9mIGZpbmdlcnMgaW4gdGhlIGV2ZW50CiAgICAgKiB3aGVuIG5vIGZpbmdlcnMgYXJlIGRldGVjdGVkLCBvbmUgZmluZ2VyIGlzIHJldHVybmVkIChtb3VzZSBwb2ludGVyKQogICAgICogQHBhcmFtICBldmVudAogICAgICogQHJldHVybiBpbnQgIGZpbmdlcnMKICAgICAqLwogICAgZnVuY3Rpb24gY291bnRGaW5nZXJzKCBldmVudCApCiAgICB7CiAgICAgICAgLy8gdGhlcmUgaXMgYSBidWcgb24gYW5kcm9pZCAodW50aWwgdjQ/KSB0aGF0IHRvdWNoZXMgaXMgYWx3YXlzIDEsCiAgICAgICAgLy8gc28gbm8gbXVsdGl0b3VjaCBpcyBzdXBwb3J0ZWQsIGUuZy4gbm8sIHpvb20gYW5kIHJvdGF0aW9uLi4uCiAgICAgICAgcmV0dXJuIGV2ZW50LnRvdWNoZXMgPyBldmVudC50b3VjaGVzLmxlbmd0aCA6IDE7CiAgICB9CgoKICAgIC8qKgogICAgICogZ2V0IHRoZSB4IGFuZCB5IHBvc2l0aW9ucyBmcm9tIHRoZSBldmVudCBvYmplY3QKICAgICAqIEBwYXJhbSAgZXZlbnQKICAgICAqIEByZXR1cm4gYXJyYXkgIFt7IHg6IGludCwgeTogaW50IH1dCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFhZZnJvbUV2ZW50KCBldmVudCApCiAgICB7CiAgICAgICAgZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7CgogICAgICAgIC8vIG5vIHRvdWNoZXMsIHVzZSB0aGUgZXZlbnQgcGFnZVggYW5kIHBhZ2VZCiAgICAgICAgaWYoIWV2ZW50LnRvdWNoZXMpIHsKICAgICAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LAogICAgICAgICAgICAgICAgYm9keSA9IGRvYy5ib2R5OwoKICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB4OiBldmVudC5wYWdlWCB8fCBldmVudC5jbGllbnRYICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBkb2MuY2xpZW50TGVmdCB8fCAwICksCiAgICAgICAgICAgICAgICB5OiBldmVudC5wYWdlWSB8fCBldmVudC5jbGllbnRZICsgKCBkb2MgJiYgZG9jLnNjcm9sbFRvcCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wIHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRUb3AgfHwgYm9keSAmJiBkb2MuY2xpZW50VG9wIHx8IDAgKQogICAgICAgICAgICB9XTsKICAgICAgICB9CiAgICAgICAgLy8gbXVsdGl0b3VjaCwgcmV0dXJuIGFycmF5IHdpdGggcG9zaXRpb25zCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBwb3MgPSBbXSwgc3JjOwogICAgICAgICAgICBmb3IodmFyIHQ9MCwgbGVuPWV2ZW50LnRvdWNoZXMubGVuZ3RoOyB0PGxlbjsgdCsrKSB7CiAgICAgICAgICAgICAgICBzcmMgPSBldmVudC50b3VjaGVzW3RdOwogICAgICAgICAgICAgICAgcG9zLnB1c2goeyB4OiBzcmMucGFnZVgsIHk6IHNyYy5wYWdlWSB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcG9zOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgKiBjYWxjdWxhdGUgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIHBvaW50cwogICAgICogQHBhcmFtIG9iamVjdCBwb3MxIHsgeDogaW50LCB5OiBpbnQgfQogICAgICogQHBhcmFtIG9iamVjdCBwb3MyIHsgeDogaW50LCB5OiBpbnQgfQogICAgICovCiAgICBmdW5jdGlvbiBnZXRBbmdsZSggcG9zMSwgcG9zMiApCiAgICB7CiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIocG9zMi55IC0gcG9zMS55LCBwb3MyLnggLSBwb3MxLngpICogMTgwIC8gTWF0aC5QSTsKICAgIH0KCiAgICAvKioKICAgICAqIHRyaWdnZXIgYW4gZXZlbnQvY2FsbGJhY2sgYnkgbmFtZSB3aXRoIHBhcmFtcwogICAgICogQHBhcmFtIHN0cmluZyBuYW1lCiAgICAgKiBAcGFyYW0gYXJyYXkgIHBhcmFtcwogICAgICovCiAgICBmdW5jdGlvbiB0cmlnZ2VyRXZlbnQoIGV2ZW50TmFtZSwgcGFyYW1zICkKICAgIHsKICAgICAgICAvLyByZXR1cm4gdG91Y2hlcyBvYmplY3QKICAgICAgICBwYXJhbXMudG91Y2hlcyA9IGdldFhZZnJvbUV2ZW50KHBhcmFtcy5vcmlnaW5hbEV2ZW50KTsKICAgICAgICBwYXJhbXMudHlwZSA9IGV2ZW50TmFtZTsKCiAgICAgICAgLy8gdHJpZ2dlciBjYWxsYmFjawogICAgICAgIGlmKGlzRnVuY3Rpb24oc2VsZlsib24iKyBldmVudE5hbWVdKSkgewogICAgICAgICAgICBzZWxmWyJvbiIrIGV2ZW50TmFtZV0uY2FsbChzZWxmLCBwYXJhbXMpOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgKiBjYW5jZWwgZXZlbnQKICAgICAqIEBwYXJhbSAgIG9iamVjdCAgZXZlbnQKICAgICAqIEByZXR1cm4gIHZvaWQKICAgICAqLwoKICAgIGZ1bmN0aW9uIGNhbmNlbEV2ZW50KGV2ZW50KXsKICAgICAgICBldmVudCA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDsKICAgICAgICBpZihldmVudC5wcmV2ZW50RGVmYXVsdCl7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIHJlc2V0IHRoZSBpbnRlcm5hbCB2YXJzIHRvIHRoZSBzdGFydCB2YWx1ZXMKICAgICAqLwogICAgZnVuY3Rpb24gcmVzZXQoKQogICAgewogICAgICAgIF9wb3MgPSB7fTsKICAgICAgICBfZmlyc3QgPSBmYWxzZTsKICAgICAgICBfZmluZ2VycyA9IDA7CiAgICAgICAgX2Rpc3RhbmNlID0gMDsKICAgICAgICBfYW5nbGUgPSAwOwogICAgICAgIF9nZXN0dXJlID0gbnVsbDsKICAgIH0KCgogICAgdmFyIGdlc3R1cmVzID0gewogICAgICAgIC8vIGhvbGQgZ2VzdHVyZQogICAgICAgIC8vIGZpcmVkIG9uIHRvdWNoc3RhcnQKICAgICAgICBob2xkIDogZnVuY3Rpb24oZXZlbnQpCiAgICAgICAgewogICAgICAgICAgICAvLyBvbmx5IHdoZW4gb25lIGZpbmdlciBpcyBvbiB0aGUgc2NyZWVuCiAgICAgICAgICAgIGlmKG9wdGlvbnMuaG9sZCkgewogICAgICAgICAgICAgICAgX2dlc3R1cmUgPSAnaG9sZCc7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoX2hvbGRfdGltZXIpOwoKICAgICAgICAgICAgICAgIF9ob2xkX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZihfZ2VzdHVyZSA9PSAnaG9sZCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJob2xkIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudCAgIDogZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAgICAgICAgOiBfcG9zLnN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIG9wdGlvbnMuaG9sZF90aW1lb3V0KTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgoKICAgICAgICAvLyBkcmFnIGdlc3R1cmUKICAgICAgICAvLyBmaXJlZCBvbiBtb3VzZW1vdmUKICAgICAgICBkcmFnIDogZnVuY3Rpb24oZXZlbnQpCiAgICAgICAgewogICAgICAgICAgICAvLyBnZXQgdGhlIGRpc3RhbmNlIHdlIG1vdmVkCiAgICAgICAgICAgIHZhciBfZGlzdGFuY2VfeCA9IF9wb3MubW92ZVswXS54IC0gX3Bvcy5zdGFydFswXS54OwogICAgICAgICAgICB2YXIgX2Rpc3RhbmNlX3kgPSBfcG9zLm1vdmVbMF0ueSAtIF9wb3Muc3RhcnRbMF0ueTsKICAgICAgICAgICAgX2Rpc3RhbmNlID0gTWF0aC5zcXJ0KF9kaXN0YW5jZV94ICogX2Rpc3RhbmNlX3ggKyBfZGlzdGFuY2VfeSAqIF9kaXN0YW5jZV95KTsKCiAgICAgICAgICAgIC8vIGRyYWcKICAgICAgICAgICAgLy8gbWluaW1hbCBtb3ZlbWVudCByZXF1aXJlZAogICAgICAgICAgICBpZihvcHRpb25zLmRyYWcgJiYgKF9kaXN0YW5jZSA+IG9wdGlvbnMuZHJhZ19taW5fZGlzdGFuY2UpIHx8IF9nZXN0dXJlID09ICdkcmFnJykgewogICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBhbmdsZQogICAgICAgICAgICAgICAgX2FuZ2xlID0gZ2V0QW5nbGUoX3Bvcy5zdGFydFswXSwgX3Bvcy5tb3ZlWzBdKTsKICAgICAgICAgICAgICAgIF9kaXJlY3Rpb24gPSBzZWxmLmdldERpcmVjdGlvbkZyb21BbmdsZShfYW5nbGUpOwoKICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBtb3ZlbWVudCBhbmQgc3RvcCBpZiB3ZSBnbyBpbiB0aGUgd3JvbmcgZGlyZWN0aW9uCiAgICAgICAgICAgICAgICB2YXIgaXNfdmVydGljYWwgPSAoX2RpcmVjdGlvbiA9PSAndXAnIHx8IF9kaXJlY3Rpb24gPT0gJ2Rvd24nKTsKICAgICAgICAgICAgICAgIGlmKCgoaXNfdmVydGljYWwgJiYgIW9wdGlvbnMuZHJhZ192ZXJ0aWNhbCkgfHwgKCFpc192ZXJ0aWNhbCAmJiAhb3B0aW9ucy5kcmFnX2hvcml6b250YWwpKQogICAgICAgICAgICAgICAgICAgICYmIChfZGlzdGFuY2UgPiBvcHRpb25zLmRyYWdfbWluX2Rpc3RhbmNlKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBfZ2VzdHVyZSA9ICdkcmFnJzsKCiAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB7IHg6IF9wb3MubW92ZVswXS54IC0gX29mZnNldC5sZWZ0LAogICAgICAgICAgICAgICAgICAgIHk6IF9wb3MubW92ZVswXS55IC0gX29mZnNldC50b3AgfTsKCiAgICAgICAgICAgICAgICB2YXIgZXZlbnRfb2JqID0gewogICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQgICA6IGV2ZW50LAogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgICAgICA6IHBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiAgICAgICA6IF9kaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgICAgICAgIDogX2Rpc3RhbmNlLAogICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlWCAgICAgICA6IF9kaXN0YW5jZV94LAogICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlWSAgICAgICA6IF9kaXN0YW5jZV95LAogICAgICAgICAgICAgICAgICAgIGFuZ2xlICAgICAgICAgICA6IF9hbmdsZQogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0cmlnZ2VyIHRoZSBzdGFydCBldmVudAogICAgICAgICAgICAgICAgaWYoX2ZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJkcmFnc3RhcnQiLCBldmVudF9vYmopOwoKICAgICAgICAgICAgICAgICAgICBfZmlyc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBub3JtYWwgc2xpZGUgZXZlbnQKICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudCgiZHJhZyIsIGV2ZW50X29iaik7CgogICAgICAgICAgICAgICAgY2FuY2VsRXZlbnQoZXZlbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCgogICAgICAgIC8vIHRyYW5zZm9ybSBnZXN0dXJlCiAgICAgICAgLy8gZmlyZWQgb24gdG91Y2htb3ZlCiAgICAgICAgdHJhbnNmb3JtIDogZnVuY3Rpb24oZXZlbnQpCiAgICAgICAgewogICAgICAgICAgICBpZihvcHRpb25zLnRyYW5zZm9ybSkgewogICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gZXZlbnQuc2NhbGUgfHwgMTsKICAgICAgICAgICAgICAgIHZhciByb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uIHx8IDA7CgogICAgICAgICAgICAgICAgaWYoY291bnRGaW5nZXJzKGV2ZW50KSAhPSAyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmKF9nZXN0dXJlICE9ICdkcmFnJyAmJgogICAgICAgICAgICAgICAgICAgIChfZ2VzdHVyZSA9PSAndHJhbnNmb3JtJyB8fCBNYXRoLmFicygxLXNjYWxlKSA+IG9wdGlvbnMuc2NhbGVfdHJlc2hvbGQKICAgICAgICAgICAgICAgICAgICAgICAgfHwgTWF0aC5hYnMocm90YXRpb24pID4gb3B0aW9ucy5yb3RhdGlvbl90cmVzaG9sZCkpIHsKICAgICAgICAgICAgICAgICAgICBfZ2VzdHVyZSA9ICd0cmFuc2Zvcm0nOwoKICAgICAgICAgICAgICAgICAgICBfcG9zLmNlbnRlciA9IHsgIHg6ICgoX3Bvcy5tb3ZlWzBdLnggKyBfcG9zLm1vdmVbMV0ueCkgLyAyKSAtIF9vZmZzZXQubGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgeTogKChfcG9zLm1vdmVbMF0ueSArIF9wb3MubW92ZVsxXS55KSAvIDIpIC0gX29mZnNldC50b3AgfTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50X29iaiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudCAgIDogZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgICAgICA6IF9wb3MuY2VudGVyLAogICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSAgICAgICAgICAgOiBzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gICAgICAgIDogcm90YXRpb24KICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0cmlnZ2VyIHRoZSBzdGFydCBldmVudAogICAgICAgICAgICAgICAgICAgIGlmKF9maXJzdCkgewogICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoInRyYW5zZm9ybXN0YXJ0IiwgZXZlbnRfb2JqKTsKICAgICAgICAgICAgICAgICAgICAgICAgX2ZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoInRyYW5zZm9ybSIsIGV2ZW50X29iaik7CgogICAgICAgICAgICAgICAgICAgIGNhbmNlbEV2ZW50KGV2ZW50KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9LAoKCiAgICAgICAgLy8gdGFwIGFuZCBkb3VibGUgdGFwIGdlc3R1cmUKICAgICAgICAvLyBmaXJlZCBvbiB0b3VjaGVuZAogICAgICAgIHRhcCA6IGZ1bmN0aW9uKGV2ZW50KQogICAgICAgIHsKICAgICAgICAgICAgLy8gY29tcGFyZSB0aGUga2luZCBvZiBnZXN0dXJlIGJ5IHRpbWUKICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICAgICAgICB2YXIgdG91Y2hfdGltZSA9IG5vdyAtIF90b3VjaF9zdGFydF90aW1lOwoKICAgICAgICAgICAgLy8gZG9udCBmaXJlIHdoZW4gaG9sZCBpcyBmaXJlZAogICAgICAgICAgICBpZihvcHRpb25zLmhvbGQgJiYgIShvcHRpb25zLmhvbGQgJiYgb3B0aW9ucy5ob2xkX3RpbWVvdXQgPiB0b3VjaF90aW1lKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyB3aGVuIHByZXZpb3VzIGV2ZW50IHdhcyB0YXAgYW5kIHRoZSB0YXAgd2FzIG1heF9pbnRlcnZhbCBtcyBhZ28KICAgICAgICAgICAgdmFyIGlzX2RvdWJsZV90YXAgPSAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIGlmIChfcHJldl90YXBfcG9zICYmIG9wdGlvbnMudGFwX2RvdWJsZSAmJiBfcHJldl9nZXN0dXJlID09ICd0YXAnICYmIChfdG91Y2hfc3RhcnRfdGltZSAtIF9wcmV2X3RhcF9lbmRfdGltZSkgPCBvcHRpb25zLnRhcF9tYXhfaW50ZXJ2YWwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgeF9kaXN0YW5jZSA9IE1hdGguYWJzKF9wcmV2X3RhcF9wb3NbMF0ueCAtIF9wb3Muc3RhcnRbMF0ueCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHlfZGlzdGFuY2UgPSBNYXRoLmFicyhfcHJldl90YXBfcG9zWzBdLnkgLSBfcG9zLnN0YXJ0WzBdLnkpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAoX3ByZXZfdGFwX3BvcyAmJiBfcG9zLnN0YXJ0ICYmIE1hdGgubWF4KHhfZGlzdGFuY2UsIHlfZGlzdGFuY2UpIDwgb3B0aW9ucy50YXBfZG91YmxlX2Rpc3RhbmNlKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0pKCk7CgogICAgICAgICAgICBpZihpc19kb3VibGVfdGFwKSB7CiAgICAgICAgICAgICAgICBfZ2VzdHVyZSA9ICdkb3VibGVfdGFwJzsKICAgICAgICAgICAgICAgIF9wcmV2X3RhcF9lbmRfdGltZSA9IG51bGw7CgogICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJkb3VibGV0YXAiLCB7CiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudCAgIDogZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gICAgICAgIDogX3Bvcy5zdGFydAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBjYW5jZWxFdmVudChldmVudCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNpbmdsZSB0YXAgaXMgc2luZ2xlIHRvdWNoCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgX2dlc3R1cmUgPSAndGFwJzsKICAgICAgICAgICAgICAgIF9wcmV2X3RhcF9lbmRfdGltZSA9IG5vdzsKICAgICAgICAgICAgICAgIF9wcmV2X3RhcF9wb3MgPSBfcG9zLnN0YXJ0OwoKICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMudGFwKSB7CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJ0YXAiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQgICA6IGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAgICAgICAgOiBfcG9zLnN0YXJ0CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgY2FuY2VsRXZlbnQoZXZlbnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9OwoKCiAgICBmdW5jdGlvbiBoYW5kbGVFdmVudHMoZXZlbnQpCiAgICB7CiAgICAgICAgc3dpdGNoKGV2ZW50LnR5cGUpCiAgICAgICAgewogICAgICAgICAgICBjYXNlICdtb3VzZWRvd24nOgogICAgICAgICAgICBjYXNlICd0b3VjaHN0YXJ0JzoKICAgICAgICAgICAgICAgIF9wb3Muc3RhcnQgPSBnZXRYWWZyb21FdmVudChldmVudCk7CiAgICAgICAgICAgICAgICBfdG91Y2hfc3RhcnRfdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgX2ZpbmdlcnMgPSBjb3VudEZpbmdlcnMoZXZlbnQpOwogICAgICAgICAgICAgICAgX2ZpcnN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIF9ldmVudF9zdGFydCA9IGV2ZW50OwoKICAgICAgICAgICAgICAgIC8vIGJvcnJvd2VkIGZyb20ganF1ZXJ5IG9mZnNldCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvb2Zmc2V0LmpzCiAgICAgICAgICAgICAgICB2YXIgYm94ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgIHZhciBjbGllbnRUb3AgID0gZWxlbWVudC5jbGllbnRUb3AgIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50VG9wICB8fCAwOwogICAgICAgICAgICAgICAgdmFyIGNsaWVudExlZnQgPSBlbGVtZW50LmNsaWVudExlZnQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRMZWZ0IHx8IDA7CiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsVG9wICA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBlbGVtZW50LnNjcm9sbFRvcCAgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7CiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBlbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OwoKICAgICAgICAgICAgICAgIF9vZmZzZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgdG9wOiBib3gudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wLAogICAgICAgICAgICAgICAgICAgIGxlZnQ6IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgX21vdXNlZG93biA9IHRydWU7CgogICAgICAgICAgICAgICAgLy8gaG9sZCBnZXN0dXJlCiAgICAgICAgICAgICAgICBnZXN0dXJlcy5ob2xkKGV2ZW50KTsKCiAgICAgICAgICAgICAgICBpZihvcHRpb25zLnByZXZlbnRfZGVmYXVsdCkgewogICAgICAgICAgICAgICAgICAgIGNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAnbW91c2Vtb3ZlJzoKICAgICAgICAgICAgY2FzZSAndG91Y2htb3ZlJzoKICAgICAgICAgICAgICAgIGlmKCFfbW91c2Vkb3duKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX2V2ZW50X21vdmUgPSBldmVudDsKICAgICAgICAgICAgICAgIF9wb3MubW92ZSA9IGdldFhZZnJvbUV2ZW50KGV2ZW50KTsKCiAgICAgICAgICAgICAgICBpZighZ2VzdHVyZXMudHJhbnNmb3JtKGV2ZW50KSkgewogICAgICAgICAgICAgICAgICAgIGdlc3R1cmVzLmRyYWcoZXZlbnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdtb3VzZXVwJzoKICAgICAgICAgICAgY2FzZSAnbW91c2VvdXQnOgogICAgICAgICAgICBjYXNlICd0b3VjaGNhbmNlbCc6CiAgICAgICAgICAgIGNhc2UgJ3RvdWNoZW5kJzoKICAgICAgICAgICAgICAgIGlmKCFfbW91c2Vkb3duIHx8IChfZ2VzdHVyZSAhPSAndHJhbnNmb3JtJyAmJiBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgX21vdXNlZG93biA9IGZhbHNlOwogICAgICAgICAgICAgICAgX2V2ZW50X2VuZCA9IGV2ZW50OwoKICAgICAgICAgICAgICAgIC8vIGRyYWcgZ2VzdHVyZQogICAgICAgICAgICAgICAgLy8gZHJhZ3N0YXJ0IGlzIHRyaWdnZXJlZCwgc28gZHJhZ2VuZCBpcyBwb3NzaWJsZQogICAgICAgICAgICAgICAgaWYoX2dlc3R1cmUgPT0gJ2RyYWcnKSB7CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJkcmFnZW5kIiwgewogICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50ICAgOiBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uICAgICAgIDogX2RpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgICAgICAgIDogX2Rpc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSAgICAgICAgICAgOiBfYW5nbGUKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm0KICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybXN0YXJ0IGlzIHRyaWdnZXJlZCwgc28gdHJhbnNmb3JtZWQgaXMgcG9zc2libGUKICAgICAgICAgICAgICAgIGVsc2UgaWYoX2dlc3R1cmUgPT0gJ3RyYW5zZm9ybScpIHsKICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoInRyYW5zZm9ybWVuZCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudCAgIDogZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgICAgICA6IF9wb3MuY2VudGVyLAogICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSAgICAgICAgICAgOiBldmVudC5zY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gICAgICAgIDogZXZlbnQucm90YXRpb24KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGdlc3R1cmVzLnRhcChfZXZlbnRfc3RhcnQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIF9wcmV2X2dlc3R1cmUgPSBfZ2VzdHVyZTsKCiAgICAgICAgICAgICAgICAvLyByZXNldCB2YXJzCiAgICAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKCiAgICAvLyBiaW5kIGV2ZW50cyBmb3IgdG91Y2ggZGV2aWNlcwogICAgLy8gZXhjZXB0IGZvciB3aW5kb3dzIHBob25lIDcuNSwgaXQgZG9lc250IHN1cHBvcnQgdG91Y2ggZXZlbnRzLi4hCiAgICBpZignb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHsKICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCBoYW5kbGVFdmVudHMsIGZhbHNlKTsKICAgICA
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment