-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathb0xfile__chunk-3b888a65.4da69ee0.js.go
22 lines (18 loc) · 47.7 KB
/
b0xfile__chunk-3b888a65.4da69ee0.js.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package knife4go
import (
"os"
)
func init() {
f, err := FS.OpenFile(CTX, "/chunk-3b888a65.4da69ee0.js", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
if err != nil {
panic(err)
}
_, err = f.Write([] byte(base64Decoding("KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1siY2h1bmstM2I4ODhhNjUiXSx7IjFkMjkiOmZ1bmN0aW9uKGUsdCl7YWNlLmRlZmluZSgiYWNlL3RoZW1lL2VjbGlwc2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLChmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuaXNEYXJrPSExLHQuY3NzVGV4dD0nLmFjZS1lY2xpcHNlIC5hY2VfZ3V0dGVyIHtiYWNrZ3JvdW5kOiAjZWJlYmViO2JvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYigxNTksIDE1OSwgMTU5KTtjb2xvcjogcmdiKDEzNiwgMTM2LCAxMzYpO30uYWNlLWVjbGlwc2UgLmFjZV9wcmludC1tYXJnaW4ge3dpZHRoOiAxcHg7YmFja2dyb3VuZDogI2ViZWJlYjt9LmFjZS1lY2xpcHNlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO2NvbG9yOiBibGFjazt9LmFjZS1lY2xpcHNlIC5hY2VfZm9sZCB7YmFja2dyb3VuZC1jb2xvcjogcmdiKDYwLCA3NiwgMTE0KTt9LmFjZS1lY2xpcHNlIC5hY2VfY3Vyc29yIHtjb2xvcjogYmxhY2s7fS5hY2UtZWNsaXBzZSAuYWNlX3N0b3JhZ2UsLmFjZS1lY2xpcHNlIC5hY2Vfa2V5d29yZCwuYWNlLWVjbGlwc2UgLmFjZV92YXJpYWJsZSB7Y29sb3I6IHJnYigxMjcsIDAsIDg1KTt9LmFjZS1lY2xpcHNlIC5hY2VfY29uc3RhbnQuYWNlX2J1aWxkaW4ge2NvbG9yOiByZ2IoODgsIDcyLCAyNDYpO30uYWNlLWVjbGlwc2UgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7Y29sb3I6IHJnYig2LCAxNTAsIDE0KTt9LmFjZS1lY2xpcHNlIC5hY2VfZnVuY3Rpb24ge2NvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO30uYWNlLWVjbGlwc2UgLmFjZV9zdHJpbmcge2NvbG9yOiByZ2IoNDIsIDAsIDI1NSk7fS5hY2UtZWNsaXBzZSAuYWNlX2NvbW1lbnQge2NvbG9yOiByZ2IoMTEzLCAxNTAsIDEzMCk7fS5hY2UtZWNsaXBzZSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7Y29sb3I6IHJnYig2MywgOTUsIDE5MSk7fS5hY2UtZWNsaXBzZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHtjb2xvcjogcmdiKDEyNywgMTU5LCAxOTEpO30uYWNlLWVjbGlwc2UgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7Y29sb3I6IGRhcmtibHVlO30uYWNlLWVjbGlwc2UgLmFjZV90YWcge2NvbG9yOiByZ2IoMjUsIDExOCwgMTE2KTt9LmFjZS1lY2xpcHNlIC5hY2VfdHlwZSB7Y29sb3I6IHJnYigxMjcsIDAsIDEyNyk7fS5hY2UtZWNsaXBzZSAuYWNlX3htbC1wZSB7Y29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO30uYWNlLWVjbGlwc2UgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge2JhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTt9LmFjZS1lY2xpcHNlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7bWFyZ2luOiAtMXB4IDAgMCAtMXB4O2JvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTt9LmFjZS1lY2xpcHNlIC5hY2VfbWV0YS5hY2VfdGFnIHtjb2xvcjpyZ2IoMjUsIDExOCwgMTE2KTt9LmFjZS1lY2xpcHNlIC5hY2VfaW52aXNpYmxlIHtjb2xvcjogI2RkZDt9LmFjZS1lY2xpcHNlIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge2NvbG9yOnJnYigxMjcsIDAsIDEyNyk7fS5hY2UtZWNsaXBzZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge2JhY2tncm91bmQ6IHJnYigyNTUsIDI1NSwgMCk7fS5hY2UtZWNsaXBzZSAuYWNlX2FjdGl2ZS1saW5lIHtiYWNrZ3JvdW5kOiByZ2IoMjMyLCAyNDIsIDI1NCk7fS5hY2UtZWNsaXBzZSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7YmFja2dyb3VuZC1jb2xvciA6ICNEQURBREE7fS5hY2UtZWNsaXBzZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge2JvcmRlcjogMXB4IHNvbGlkIHJnYigxODEsIDIxMywgMjU1KTt9LmFjZS1lY2xpcHNlIC5hY2VfaW5kZW50LWd1aWRlIHtiYWNrZ3JvdW5kOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9Cd0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PSIpIHJpZ2h0IHJlcGVhdC15O30nLHQuY3NzQ2xhc3M9ImFjZS1lY2xpcHNlIixlKCIuLi9saWIvZG9tIikuaW1wb3J0Q3NzU3RyaW5nKHQuY3NzVGV4dCx0LmNzc0NsYXNzKX0pKX0sMjA5OTpmdW5jdGlvbihlLHQpe2FjZS5kZWZpbmUoImFjZS9zbmlwcGV0cyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL2FuY2hvciIsImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLCJhY2UvdG9rZW5pemVyIiwiYWNlL2xpYi9kb20iLCJhY2UvZWRpdG9yIl0sKGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9saWIvb29wIiksbz1lKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLHI9ZSgiLi9saWIvbGFuZyIpLHM9ZSgiLi9yYW5nZSIpLlJhbmdlLGE9ZSgiLi9hbmNob3IiKS5BbmNob3IsYz1lKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyLGw9ZSgiLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIscD1zLmNvbXBhcmVQb2ludHMsaD1mdW5jdGlvbigpe3RoaXMuc25pcHBldE1hcD17fSx0aGlzLnNuaXBwZXROYW1lTWFwPXt9fTsoZnVuY3Rpb24oKXtuLmltcGxlbWVudCh0aGlzLG8pLHRoaXMuZ2V0VG9rZW5pemVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsaSl7cmV0dXJuIGU9ZS5zdWJzdHIoMSksL15cZCskLy50ZXN0KGUpJiYhaS5pbkZvcm1hdFN0cmluZz9be3RhYnN0b3BJZDpwYXJzZUludChlLDEwKX1dOlt7dGV4dDplfV19ZnVuY3Rpb24gdChlKXtyZXR1cm4iKD86W15cXFxcIitlKyJdfFxcXFwuKSJ9cmV0dXJuIGguJHRva2VuaXplcj1uZXcgbCh7c3RhcnQ6W3tyZWdleDovOi8sb25NYXRjaDpmdW5jdGlvbihlLHQsaSl7cmV0dXJuIGkubGVuZ3RoJiZpWzBdLmV4cGVjdElmPyhpWzBdLmV4cGVjdElmPSExLGlbMF0uZWxzZUJyYW5jaD1pWzBdLFtpWzBdXSk6IjoifX0se3JlZ2V4Oi9cXC4vLG9uTWF0Y2g6ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWVbMV07cmV0dXJuIn0iPT1uJiZpLmxlbmd0aHx8LTEhPSJgJFxcIi5pbmRleE9mKG4pP2U9bjppLmluRm9ybWF0U3RyaW5nJiYoIm4iPT1ufHwidCI9PW4/ZT0iXG4iOi0xIT0idWxVTEUiLmluZGV4T2YobikmJihlPXtjaGFuZ2VDYXNlOm4sbG9jYWw6bj4iYSJ9KSksW2VdfX0se3JlZ2V4Oi99Lyxvbk1hdGNoOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm5baS5sZW5ndGg/aS5zaGlmdCgpOmVdfX0se3JlZ2V4Oi9cJCg/OlxkK3xcdyspLyxvbk1hdGNoOmV9LHtyZWdleDovXCRce1tcZEEtWl9hLXpdKy8sb25NYXRjaDpmdW5jdGlvbih0LGksbil7dmFyIG89ZSh0LnN1YnN0cigxKSwwLG4pO3JldHVybiBuLnVuc2hpZnQob1swXSksb30sbmV4dDoic25pcHBldFZhciJ9LHtyZWdleDovXG4vLHRva2VuOiJuZXdsaW5lIixtZXJnZTohMX1dLHNuaXBwZXRWYXI6W3tyZWdleDoiXFx8Iit0KCJcXHwiKSsiKlxcfCIsb25NYXRjaDpmdW5jdGlvbihlLHQsaSl7aVswXS5jaG9pY2VzPWUuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKX0sbmV4dDoic3RhcnQifSx7cmVnZXg6Ii8oIit0KCIvIikrIispLyg/OigiK3QoIi8iKSsiKikvKShcXHcqKTo/Iixvbk1hdGNoOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1pWzBdO3JldHVybiBuLmZtdFN0cmluZz1lLGU9dGhpcy5zcGxpdFJlZ2V4LmV4ZWMoZSksbi5ndWFyZD1lWzFdLG4uZm10PWVbMl0sbi5mbGFnPWVbM10sIiJ9LG5leHQ6InN0YXJ0In0se3JlZ2V4OiJgIit0KCJgIikrIipgIixvbk1hdGNoOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gaVswXS5jb2RlPWUuc3BsaWNlKDEsLTEpLCIifSxuZXh0OiJzdGFydCJ9LHtyZWdleDoiXFw/Iixvbk1hdGNoOmZ1bmN0aW9uKGUsdCxpKXtpWzBdJiYoaVswXS5leHBlY3RJZj0hMCl9LG5leHQ6InN0YXJ0In0se3JlZ2V4OiIoW146fVxcXFxdfFxcXFwuKSo6PyIsdG9rZW46IiIsbmV4dDoic3RhcnQifV0sZm9ybWF0U3RyaW5nOlt7cmVnZXg6Ii8oIit0KCIvIikrIispLyIsdG9rZW46InJlZ2V4In0se3JlZ2V4OiIiLG9uTWF0Y2g6ZnVuY3Rpb24oZSx0LGkpe2kuaW5Gb3JtYXRTdHJpbmc9ITB9LG5leHQ6InN0YXJ0In1dfSksaC5wcm90b3R5cGUuZ2V0VG9rZW5pemVyPWZ1bmN0aW9uKCl7cmV0dXJuIGguJHRva2VuaXplcn0saC4kdG9rZW5pemVyfSx0aGlzLnRva2VuaXplVG1TbmlwcGV0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhlLHQpLnRva2Vucy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfHxlfSkpfSx0aGlzLiRnZXREZWZhdWx0VmFsdWU9ZnVuY3Rpb24oZSx0KXtpZigvXltBLVpdXGQrJC8udGVzdCh0KSl7dmFyIGk9dC5zdWJzdHIoMSk7cmV0dXJuKHRoaXMudmFyaWFibGVzW3RbMF0rIl9fIl18fHt9KVtpXX1pZigvXlxkKyQvLnRlc3QodCkpcmV0dXJuKHRoaXMudmFyaWFibGVzLl9ffHx7fSlbdF07aWYodD10LnJlcGxhY2UoL15UTV8vLCIiKSxlKXt2YXIgbj1lLnNlc3Npb247c3dpdGNoKHQpe2Nhc2UiQ1VSUkVOVF9XT1JEIjp2YXIgbz1uLmdldFdvcmRSYW5nZSgpO2Nhc2UiU0VMRUNUSU9OIjpjYXNlIlNFTEVDVEVEX1RFWFQiOnJldHVybiBuLmdldFRleHRSYW5nZShvKTtjYXNlIkNVUlJFTlRfTElORSI6cmV0dXJuIG4uZ2V0TGluZShlLmdldEN1cnNvclBvc2l0aW9uKCkucm93KTtjYXNlIlBSRVZfTElORSI6cmV0dXJuIG4uZ2V0TGluZShlLmdldEN1cnNvclBvc2l0aW9uKCkucm93LTEpO2Nhc2UiTElORV9JTkRFWCI6cmV0dXJuIGUuZ2V0Q3Vyc29yUG9zaXRpb24oKS5jb2x1bW47Y2FzZSJMSU5FX05VTUJFUiI6cmV0dXJuIGUuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3crMTtjYXNlIlNPRlRfVEFCUyI6cmV0dXJuIG4uZ2V0VXNlU29mdFRhYnMoKT8iWUVTIjoiTk8iO2Nhc2UiVEFCX1NJWkUiOnJldHVybiBuLmdldFRhYlNpemUoKTtjYXNlIkZJTEVOQU1FIjpjYXNlIkZJTEVQQVRIIjpyZXR1cm4iIjtjYXNlIkZVTExOQU1FIjpyZXR1cm4iQWNlIn19fSx0aGlzLnZhcmlhYmxlcz17fSx0aGlzLmdldFZhcmlhYmxlVmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy52YXJpYWJsZXMuaGFzT3duUHJvcGVydHkodCk/dGhpcy52YXJpYWJsZXNbdF0oZSx0KXx8IiI6dGhpcy4kZ2V0RGVmYXVsdFZhbHVlKGUsdCl8fCIifSx0aGlzLnRtU3RyRm9ybWF0PWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10LmZsYWd8fCIiLG89dC5ndWFyZDtvPW5ldyBSZWdFeHAobyxuLnJlcGxhY2UoL1teZ2ldLywiIikpO3ZhciByPXRoaXMudG9rZW5pemVUbVNuaXBwZXQodC5mbXQsImZvcm1hdFN0cmluZyIpLHM9dGhpcyxhPWUucmVwbGFjZShvLChmdW5jdGlvbigpe3MudmFyaWFibGVzLl9fPWFyZ3VtZW50cztmb3IodmFyIGU9cy5yZXNvbHZlVmFyaWFibGVzKHIsaSksdD0iRSIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1lW25dO2lmKCJvYmplY3QiPT10eXBlb2YgbylpZihlW25dPSIiLG8uY2hhbmdlQ2FzZSYmby5sb2NhbCl7dmFyIGE9ZVtuKzFdO2EmJiJzdHJpbmciPT10eXBlb2YgYSYmKCJ1Ij09by5jaGFuZ2VDYXNlP2Vbbl09YVswXS50b1VwcGVyQ2FzZSgpOmVbbl09YVswXS50b0xvd2VyQ2FzZSgpLGVbbisxXT1hLnN1YnN0cigxKSl9ZWxzZSBvLmNoYW5nZUNhc2UmJih0PW8uY2hhbmdlQ2FzZSk7ZWxzZSJVIj09dD9lW25dPW8udG9VcHBlckNhc2UoKToiTCI9PXQmJihlW25dPW8udG9Mb3dlckNhc2UoKSl9cmV0dXJuIGUuam9pbigiIil9KSk7cmV0dXJuIHRoaXMudmFyaWFibGVzLl9fPW51bGwsYX0sdGhpcy5yZXNvbHZlVmFyaWFibGVzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIG89ZVtuXTtpZigic3RyaW5nIj09dHlwZW9mIG8paS5wdXNoKG8pO2Vsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBvKWNvbnRpbnVlO2lmKG8uc2tpcClzKG8pO2Vsc2V7aWYoby5wcm9jZXNzZWQ8biljb250aW51ZTtpZihvLnRleHQpe3ZhciByPXRoaXMuZ2V0VmFyaWFibGVWYWx1ZSh0LG8udGV4dCk7ciYmby5mbXRTdHJpbmcmJihyPXRoaXMudG1TdHJGb3JtYXQocixvKSksby5wcm9jZXNzZWQ9bixudWxsPT1vLmV4cGVjdElmP3ImJihpLnB1c2gocikscyhvKSk6cj9vLnNraXA9by5lbHNlQnJhbmNoOnMobyl9ZWxzZShudWxsIT1vLnRhYnN0b3BJZHx8bnVsbCE9by5jaGFuZ2VDYXNlKSYmaS5wdXNoKG8pfX19ZnVuY3Rpb24gcyh0KXt2YXIgaT1lLmluZGV4T2YodCxuKzEpOy0xIT1pJiYobj1pKX1yZXR1cm4gaX0sdGhpcy5pbnNlcnRTbmlwcGV0Rm9yU2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5nZXRDdXJzb3JQb3NpdGlvbigpLG49ZS5zZXNzaW9uLmdldExpbmUoaS5yb3cpLG89ZS5zZXNzaW9uLmdldFRhYlN0cmluZygpLHI9bi5tYXRjaCgvXlxzKi8pWzBdO2kuY29sdW1uPHIubGVuZ3RoJiYocj1yLnNsaWNlKDAsaS5jb2x1bW4pKSx0PXQucmVwbGFjZSgvXHIvZywiIik7dmFyIHM9dGhpcy50b2tlbml6ZVRtU25pcHBldCh0KTtzPShzPXRoaXMucmVzb2x2ZVZhcmlhYmxlcyhzLGUpKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiJcbiI9PWU/ZStyOiJzdHJpbmciPT10eXBlb2YgZT9lLnJlcGxhY2UoL1x0L2csbyk6ZX0pKTt2YXIgYT1bXTtzLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgaT1lLnRhYnN0b3BJZCxuPWFbaV07aWYobnx8KChuPWFbaV09W10pLmluZGV4PWksbi52YWx1ZT0iIiksLTE9PT1uLmluZGV4T2YoZSkpe24ucHVzaChlKTt2YXIgbz1zLmluZGV4T2YoZSx0KzEpO2lmKC0xIT09byl7dmFyIHI9cy5zbGljZSh0KzEsbyk7ci5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGV9KSkmJiFuLnZhbHVlP24udmFsdWU9cjohci5sZW5ndGh8fG4udmFsdWUmJiJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZXx8KG4udmFsdWU9ci5qb2luKCIiKSl9fX19KSksYS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmxlbmd0aD0wfSkpO3ZhciBjPXt9O2Z1bmN0aW9uIGwoZSl7Zm9yKHZhciB0PVtdLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG49ZVtpXTtpZigib2JqZWN0Ij09dHlwZW9mIG4pe2lmKGNbbi50YWJzdG9wSWRdKWNvbnRpbnVlO249dFtlLmxhc3RJbmRleE9mKG4saS0xKV18fHt0YWJzdG9wSWQ6bi50YWJzdG9wSWR9fXRbaV09bn1yZXR1cm4gdH1mb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKyl7dmFyIGg9c1twXTtpZigib2JqZWN0Ij09dHlwZW9mIGgpe3ZhciB1PWgudGFic3RvcElkLGc9cy5pbmRleE9mKGgscCsxKTtpZihjW3VdKWNbdV09PT1oJiYoY1t1XT1udWxsKTtlbHNle3ZhciBmPWFbdV0sbT0ic3RyaW5nIj09dHlwZW9mIGYudmFsdWU/W2YudmFsdWVdOmwoZi52YWx1ZSk7bS51bnNoaWZ0KHArMSxNYXRoLm1heCgwLGctcCkpLG0ucHVzaChoKSxjW3VdPWgscy5zcGxpY2UuYXBwbHkocyxtKSwtMT09PWYuaW5kZXhPZihoKSYmZi5wdXNoKGgpfX19dmFyIGI9MCx2PTAseD0iIjtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIHQ9ZS5zcGxpdCgiXG4iKTt0Lmxlbmd0aD4xPyh2PXRbdC5sZW5ndGgtMV0ubGVuZ3RoLGIrPXQubGVuZ3RoLTEpOnYrPWUubGVuZ3RoLHgrPWV9ZWxzZSBlLnN0YXJ0P2UuZW5kPXtyb3c6Yixjb2x1bW46dn06ZS5zdGFydD17cm93OmIsY29sdW1uOnZ9fSkpO3ZhciB3PWUuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxUPWUuc2Vzc2lvbi5yZXBsYWNlKHcseCkseT1uZXcgZChlKSxrPWUuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSYmZS5zZWxlY3Rpb24uaW5kZXg7eS5hZGRUYWJzdG9wcyhhLHcuc3RhcnQsVCxrKX0sdGhpcy5pbnNlcnRTbmlwcGV0PWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcztpZihlLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpcmV0dXJuIGkuaW5zZXJ0U25pcHBldEZvclNlbGVjdGlvbihlLHQpO2UuZm9yRWFjaFNlbGVjdGlvbigoZnVuY3Rpb24oKXtpLmluc2VydFNuaXBwZXRGb3JTZWxlY3Rpb24oZSx0KX0pLG51bGwse2tlZXBPcmRlcjohMH0pLGUudGFic3RvcE1hbmFnZXImJmUudGFic3RvcE1hbmFnZXIudGFiTmV4dCgpfSx0aGlzLiRnZXRTY29wZT1mdW5jdGlvbihlKXt2YXIgdD1lLnNlc3Npb24uJG1vZGUuJGlkfHwiIjtpZigiaHRtbCI9PT0odD10LnNwbGl0KCIvIikucG9wKCkpfHwicGhwIj09PXQpeyJwaHAiIT09dHx8ZS5zZXNzaW9uLiRtb2RlLmlubGluZVBocHx8KHQ9Imh0bWwiKTt2YXIgaT1lLmdldEN1cnNvclBvc2l0aW9uKCksbj1lLnNlc3Npb24uZ2V0U3RhdGUoaS5yb3cpOyJvYmplY3QiPT10eXBlb2YgbiYmKG49blswXSksbi5zdWJzdHJpbmcmJigianMtIj09bi5zdWJzdHJpbmcoMCwzKT90PSJqYXZhc2NyaXB0IjoiY3NzLSI9PW4uc3Vic3RyaW5nKDAsNCk/dD0iY3NzIjoicGhwLSI9PW4uc3Vic3RyaW5nKDAsNCkmJih0PSJwaHAiKSl9cmV0dXJuIHR9LHRoaXMuZ2V0QWN0aXZlU2NvcGVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJGdldFNjb3BlKGUpLGk9W3RdLG49dGhpcy5zbmlwcGV0TWFwO3JldHVybiBuW3RdJiZuW3RdLmluY2x1ZGVTY29wZXMmJmkucHVzaC5hcHBseShpLG5bdF0uaW5jbHVkZVNjb3BlcyksaS5wdXNoKCJfIiksaX0sdGhpcy5leHBhbmRXaXRoVGFiPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcyxuPWUuZm9yRWFjaFNlbGVjdGlvbigoZnVuY3Rpb24oKXtyZXR1cm4gaS5leHBhbmRTbmlwcGV0Rm9yU2VsZWN0aW9uKGUsdCl9KSxudWxsLHtrZWVwT3JkZXI6ITB9KTtyZXR1cm4gbiYmZS50YWJzdG9wTWFuYWdlciYmZS50YWJzdG9wTWFuYWdlci50YWJOZXh0KCksbn0sdGhpcy5leHBhbmRTbmlwcGV0Rm9yU2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIGksbj1lLmdldEN1cnNvclBvc2l0aW9uKCksbz1lLnNlc3Npb24uZ2V0TGluZShuLnJvdykscj1vLnN1YnN0cmluZygwLG4uY29sdW1uKSxzPW8uc3Vic3RyKG4uY29sdW1uKSxhPXRoaXMuc25pcHBldE1hcDtyZXR1cm4gdGhpcy5nZXRBY3RpdmVTY29wZXMoZSkuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9YVtlXTtyZXR1cm4gdCYmKGk9dGhpcy5maW5kTWF0Y2hpbmdTbmlwcGV0KHQscixzKSksISFpfSksdGhpcyksISFpJiYodCYmdC5kcnlSdW58fChlLnNlc3Npb24uZG9jLnJlbW92ZUluTGluZShuLnJvdyxuLmNvbHVtbi1pLnJlcGxhY2VCZWZvcmUubGVuZ3RoLG4uY29sdW1uK2kucmVwbGFjZUFmdGVyLmxlbmd0aCksdGhpcy52YXJpYWJsZXMuTV9fPWkubWF0Y2hCZWZvcmUsdGhpcy52YXJpYWJsZXMuVF9fPWkubWF0Y2hBZnRlcix0aGlzLmluc2VydFNuaXBwZXRGb3JTZWxlY3Rpb24oZSxpLmNvbnRlbnQpLHRoaXMudmFyaWFibGVzLk1fXz10aGlzLnZhcmlhYmxlcy5UX189bnVsbCksITApfSx0aGlzLmZpbmRNYXRjaGluZ1NuaXBwZXQ9ZnVuY3Rpb24oZSx0LGkpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KXt2YXIgbz1lW25dO2lmKCghby5zdGFydFJlfHxvLnN0YXJ0UmUudGVzdCh0KSkmJighby5lbmRSZXx8by5lbmRSZS50ZXN0KGkpKSYmKG8uc3RhcnRSZXx8by5lbmRSZSkpcmV0dXJuIG8ubWF0Y2hCZWZvcmU9by5zdGFydFJlP28uc3RhcnRSZS5leGVjKHQpOlsiIl0sby5tYXRjaEFmdGVyPW8uZW5kUmU/by5lbmRSZS5leGVjKGkpOlsiIl0sby5yZXBsYWNlQmVmb3JlPW8udHJpZ2dlclJlP28udHJpZ2dlclJlLmV4ZWModClbMF06IiIsby5yZXBsYWNlQWZ0ZXI9by5lbmRUcmlnZ2VyUmU/by5lbmRUcmlnZ2VyUmUuZXhlYyhpKVswXToiIixvfX0sdGhpcy5zbmlwcGV0TWFwPXt9LHRoaXMuc25pcHBldE5hbWVNYXA9e30sdGhpcy5yZWdpc3Rlcj1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuc25pcHBldE1hcCxuPXRoaXMuc25pcHBldE5hbWVNYXAsbz10aGlzO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJiEvXlxeP1woLipcKVwkPyR8XlxcYiQvLnRlc3QoZSkmJihlPSIoPzoiK2UrIikiKSxlfHwiIn1mdW5jdGlvbiBhKGUsdCxpKXtyZXR1cm4gZT1zKGUpLHQ9cyh0KSxpPyhlPXQrZSkmJiIkIiE9ZVtlLmxlbmd0aC0xXSYmKGUrPSIkIik6KGUrPXQpJiYiXiIhPWVbMF0mJihlPSJeIitlKSxuZXcgUmVnRXhwKGUpfWZ1bmN0aW9uIGMoZSl7ZS5zY29wZXx8KGUuc2NvcGU9dHx8Il8iKSx0PWUuc2NvcGUsaVt0XXx8KGlbdF09W10sblt0XT17fSk7dmFyIHM9blt0XTtpZihlLm5hbWUpe3ZhciBjPXNbZS5uYW1lXTtjJiZvLnVucmVnaXN0ZXIoYyksc1tlLm5hbWVdPWV9aVt0XS5wdXNoKGUpLGUudGFiVHJpZ2dlciYmIWUudHJpZ2dlciYmKCFlLmd1YXJkJiYvXlx3Ly50ZXN0KGUudGFiVHJpZ2dlcikmJihlLmd1YXJkPSJcXGIiKSxlLnRyaWdnZXI9ci5lc2NhcGVSZWdFeHAoZS50YWJUcmlnZ2VyKSksKGUudHJpZ2dlcnx8ZS5ndWFyZHx8ZS5lbmRUcmlnZ2VyfHxlLmVuZEd1YXJkKSYmKGUuc3RhcnRSZT1hKGUudHJpZ2dlcixlLmd1YXJkLCEwKSxlLnRyaWdnZXJSZT1uZXcgUmVnRXhwKGUudHJpZ2dlciwiIiwhMCksZS5lbmRSZT1hKGUuZW5kVHJpZ2dlcixlLmVuZEd1YXJkLCEwKSxlLmVuZFRyaWdnZXJSZT1uZXcgUmVnRXhwKGUuZW5kVHJpZ2dlciwiIiwhMCkpfWV8fChlPVtdKSxlJiZlLmNvbnRlbnQ/YyhlKTpBcnJheS5pc0FycmF5KGUpJiZlLmZvckVhY2goYyksdGhpcy5fc2lnbmFsKCJyZWdpc3RlclNuaXBwZXRzIix7c2NvcGU6dH0pfSx0aGlzLnVucmVnaXN0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLnNuaXBwZXRNYXAsbj10aGlzLnNuaXBwZXROYW1lTWFwO2Z1bmN0aW9uIG8oZSl7dmFyIG89bltlLnNjb3BlfHx0XTtpZihvJiZvW2UubmFtZV0pe2RlbGV0ZSBvW2UubmFtZV07dmFyIHI9aVtlLnNjb3BlfHx0XSxzPXImJnIuaW5kZXhPZihlKTtzPj0wJiZyLnNwbGljZShzLDEpfX1lLmNvbnRlbnQ/byhlKTpBcnJheS5pc0FycmF5KGUpJiZlLmZvckVhY2gobyl9LHRoaXMucGFyc2VTbmlwcGV0RmlsZT1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSgvXHIvZywiIik7Zm9yKHZhciB0LGk9W10sbj17fSxvPS9eIy4qfF4oe1tcc1xTXSp9KVxzKiR8XihcUyspICguKikkfF4oKD86XG4qXHQuKikrKS9nbTt0PW8uZXhlYyhlKTspe2lmKHRbMV0pdHJ5e249SlNPTi5wYXJzZSh0WzFdKSxpLnB1c2gobil9Y2F0Y2goZSl7fWlmKHRbNF0pbi5jb250ZW50PXRbNF0ucmVwbGFjZSgvXlx0L2dtLCIiKSxpLnB1c2gobiksbj17fTtlbHNle3ZhciByPXRbMl0scz10WzNdO2lmKCJyZWdleCI9PXIpe3ZhciBhPS9cLygoPzpbXlwvXFxdfFxcLikqKXwkL2c7bi5ndWFyZD1hLmV4ZWMocylbMV0sbi50cmlnZ2VyPWEuZXhlYyhzKVsxXSxuLmVuZFRyaWdnZXI9YS5leGVjKHMpWzFdLG4uZW5kR3VhcmQ9YS5leGVjKHMpWzFdfWVsc2Uic25pcHBldCI9PXI/KG4udGFiVHJpZ2dlcj1zLm1hdGNoKC9eXFMqLylbMF0sbi5uYW1lfHwobi5uYW1lPXMpKTpuW3JdPXN9fXJldHVybiBpfSx0aGlzLmdldFNuaXBwZXRCeU5hbWU9ZnVuY3Rpb24oZSx0KXt2YXIgaSxuPXRoaXMuc25pcHBldE5hbWVNYXA7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlU2NvcGVzKHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciBvPW5bdF07cmV0dXJuIG8mJihpPW9bZV0pLCEhaX0pLHRoaXMpLGl9fSkuY2FsbChoLnByb3RvdHlwZSk7dmFyIGQ9ZnVuY3Rpb24oZSl7aWYoZS50YWJzdG9wTWFuYWdlcilyZXR1cm4gZS50YWJzdG9wTWFuYWdlcjtlLnRhYnN0b3BNYW5hZ2VyPXRoaXMsdGhpcy4kb25DaGFuZ2U9dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpLHRoaXMuJG9uQ2hhbmdlU2VsZWN0aW9uPXIuZGVsYXllZENhbGwodGhpcy5vbkNoYW5nZVNlbGVjdGlvbi5iaW5kKHRoaXMpKS5zY2hlZHVsZSx0aGlzLiRvbkNoYW5nZVNlc3Npb249dGhpcy5vbkNoYW5nZVNlc3Npb24uYmluZCh0aGlzKSx0aGlzLiRvbkFmdGVyRXhlYz10aGlzLm9uQWZ0ZXJFeGVjLmJpbmQodGhpcyksdGhpcy5hdHRhY2goZSl9OyhmdW5jdGlvbigpe3RoaXMuYXR0YWNoPWZ1bmN0aW9uKGUpe3RoaXMuaW5kZXg9MCx0aGlzLnJhbmdlcz1bXSx0aGlzLnRhYnN0b3BzPVtdLHRoaXMuJG9wZW5UYWJzdG9wcz1udWxsLHRoaXMuc2VsZWN0ZWRUYWJzdG9wPW51bGwsdGhpcy5lZGl0b3I9ZSx0aGlzLmVkaXRvci5vbigiY2hhbmdlIix0aGlzLiRvbkNoYW5nZSksdGhpcy5lZGl0b3Iub24oImNoYW5nZVNlbGVjdGlvbiIsdGhpcy4kb25DaGFuZ2VTZWxlY3Rpb24pLHRoaXMuZWRpdG9yLm9uKCJjaGFuZ2VTZXNzaW9uIix0aGlzLiRvbkNoYW5nZVNlc3Npb24pLHRoaXMuZWRpdG9yLmNvbW1hbmRzLm9uKCJhZnRlckV4ZWMiLHRoaXMuJG9uQWZ0ZXJFeGVjKSx0aGlzLmVkaXRvci5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcih0aGlzLmtleWJvYXJkSGFuZGxlcil9LHRoaXMuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy50YWJzdG9wcy5mb3JFYWNoKHRoaXMucmVtb3ZlVGFic3RvcE1hcmtlcnMsdGhpcyksdGhpcy5yYW5nZXM9bnVsbCx0aGlzLnRhYnN0b3BzPW51bGwsdGhpcy5zZWxlY3RlZFRhYnN0b3A9bnVsbCx0aGlzLmVkaXRvci5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiRvbkNoYW5nZSksdGhpcy5lZGl0b3IucmVtb3ZlTGlzdGVuZXIoImNoYW5nZVNlbGVjdGlvbiIsdGhpcy4kb25DaGFuZ2VTZWxlY3Rpb24pLHRoaXMuZWRpdG9yLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2VTZXNzaW9uIix0aGlzLiRvbkNoYW5nZVNlc3Npb24pLHRoaXMuZWRpdG9yLmNvbW1hbmRzLnJlbW92ZUxpc3RlbmVyKCJhZnRlckV4ZWMiLHRoaXMuJG9uQWZ0ZXJFeGVjKSx0aGlzLmVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLmtleWJvYXJkSGFuZGxlciksdGhpcy5lZGl0b3IudGFic3RvcE1hbmFnZXI9bnVsbCx0aGlzLmVkaXRvcj1udWxsfSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PSJyIj09ZS5hY3Rpb25bMF0saT1lLnN0YXJ0LG49ZS5lbmQsbz1pLnJvdyxyPW4ucm93LW8scz1uLmNvbHVtbi1pLmNvbHVtbjtpZih0JiYocj0tcixzPS1zKSwhdGhpcy4kaW5DaGFuZ2UmJnQpe3ZhciBhPXRoaXMuc2VsZWN0ZWRUYWJzdG9wO2lmKGEmJiFhLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBwKGUuc3RhcnQsaSk8PTAmJnAoZS5lbmQsbik+PTB9KSkpcmV0dXJuIHRoaXMuZGV0YWNoKCl9Zm9yKHZhciBjPXRoaXMucmFuZ2VzLGw9MDtsPGMubGVuZ3RoO2wrKyl7dmFyIGg9Y1tsXTtoLmVuZC5yb3c8aS5yb3d8fCh0JiZwKGksaC5zdGFydCk8MCYmcChuLGguZW5kKT4wPyh0aGlzLnJlbW92ZVJhbmdlKGgpLGwtLSk6KGguc3RhcnQucm93PT1vJiZoLnN0YXJ0LmNvbHVtbj5pLmNvbHVtbiYmKGguc3RhcnQuY29sdW1uKz1zKSxoLmVuZC5yb3c9PW8mJmguZW5kLmNvbHVtbj49aS5jb2x1bW4mJihoLmVuZC5jb2x1bW4rPXMpLGguc3RhcnQucm93Pj1vJiYoaC5zdGFydC5yb3crPXIpLGguZW5kLnJvdz49byYmKGguZW5kLnJvdys9cikscChoLnN0YXJ0LGguZW5kKT4wJiZ0aGlzLnJlbW92ZVJhbmdlKGgpKSl9Yy5sZW5ndGh8fHRoaXMuZGV0YWNoKCl9LHRoaXMudXBkYXRlTGlua2VkRmllbGRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZWxlY3RlZFRhYnN0b3A7aWYoZSYmZS5oYXNMaW5rZWRSYW5nZXMpe3RoaXMuJGluQ2hhbmdlPSEwO2Zvcih2YXIgaT10aGlzLmVkaXRvci5zZXNzaW9uLG49aS5nZXRUZXh0UmFuZ2UoZS5maXJzdE5vbkxpbmtlZCksbz1lLmxlbmd0aDtvLS07KXt2YXIgcj1lW29dO2lmKHIubGlua2VkKXt2YXIgcz10LnNuaXBwZXRNYW5hZ2VyLnRtU3RyRm9ybWF0KG4sci5vcmlnaW5hbCk7aS5yZXBsYWNlKHIscyl9fXRoaXMuJGluQ2hhbmdlPSExfX0sdGhpcy5vbkFmdGVyRXhlYz1mdW5jdGlvbihlKXtlLmNvbW1hbmQmJiFlLmNvbW1hbmQucmVhZE9ubHkmJnRoaXMudXBkYXRlTGlua2VkRmllbGRzKCl9LHRoaXMub25DaGFuZ2VTZWxlY3Rpb249ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRvcil7Zm9yKHZhciBlPXRoaXMuZWRpdG9yLnNlbGVjdGlvbi5sZWFkLHQ9dGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmFuY2hvcixpPXRoaXMuZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCksbj10aGlzLnJhbmdlcy5sZW5ndGg7bi0tOylpZighdGhpcy5yYW5nZXNbbl0ubGlua2VkKXt2YXIgbz10aGlzLnJhbmdlc1tuXS5jb250YWlucyhlLnJvdyxlLmNvbHVtbikscj1pfHx0aGlzLnJhbmdlc1tuXS5jb250YWlucyh0LnJvdyx0LmNvbHVtbik7aWYobyYmcilyZXR1cm59dGhpcy5kZXRhY2goKX19LHRoaXMub25DaGFuZ2VTZXNzaW9uPWZ1bmN0aW9uKCl7dGhpcy5kZXRhY2goKX0sdGhpcy50YWJOZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudGFic3RvcHMubGVuZ3RoLGk9dGhpcy5pbmRleCsoZXx8MSk7KGk9TWF0aC5taW4oTWF0aC5tYXgoaSwxKSx0KSk9PXQmJihpPTApLHRoaXMuc2VsZWN0VGFic3RvcChpKSwwPT09aSYmdGhpcy5kZXRhY2goKX0sdGhpcy5zZWxlY3RUYWJzdG9wPWZ1bmN0aW9uKGUpe3RoaXMuJG9wZW5UYWJzdG9wcz1udWxsO3ZhciB0PXRoaXMudGFic3RvcHNbdGhpcy5pbmRleF07aWYodCYmdGhpcy5hZGRUYWJzdG9wTWFya2Vycyh0KSx0aGlzLmluZGV4PWUsKHQ9dGhpcy50YWJzdG9wc1t0aGlzLmluZGV4XSkmJnQubGVuZ3RoKXtpZih0aGlzLnNlbGVjdGVkVGFic3RvcD10LHRoaXMuZWRpdG9yLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnNldFJhbmdlKHQuZmlyc3ROb25MaW5rZWQpO2Vsc2V7dmFyIGk9dGhpcy5lZGl0b3IubXVsdGlTZWxlY3Q7aS50b1NpbmdsZVJhbmdlKHQuZmlyc3ROb25MaW5rZWQuY2xvbmUoKSk7Zm9yKHZhciBuPXQubGVuZ3RoO24tLTspdC5oYXNMaW5rZWRSYW5nZXMmJnRbbl0ubGlua2VkfHxpLmFkZFJhbmdlKHRbbl0uY2xvbmUoKSwhMCk7aS5yYW5nZXNbMF0mJmkuYWRkUmFuZ2UoaS5yYW5nZXNbMF0uY2xvbmUoKSl9dGhpcy5lZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIodGhpcy5rZXlib2FyZEhhbmRsZXIpfX0sdGhpcy5hZGRUYWJzdG9wcz1mdW5jdGlvbihlLHQsaSl7aWYodGhpcy4kb3BlblRhYnN0b3BzfHwodGhpcy4kb3BlblRhYnN0b3BzPVtdKSwhZVswXSl7dmFyIG49cy5mcm9tUG9pbnRzKGksaSk7ZihuLnN0YXJ0LHQpLGYobi5lbmQsdCksZVswXT1bbl0sZVswXS5pbmRleD0wfXZhciBvPVt0aGlzLmluZGV4KzEsMF0scj10aGlzLnJhbmdlcztlLmZvckVhY2goKGZ1bmN0aW9uKGUsaSl7Zm9yKHZhciBuPXRoaXMuJG9wZW5UYWJzdG9wc1tpXXx8ZSxhPWUubGVuZ3RoO2EtLTspe3ZhciBjPWVbYV0sbD1zLmZyb21Qb2ludHMoYy5zdGFydCxjLmVuZHx8Yy5zdGFydCk7ZyhsLnN0YXJ0LHQpLGcobC5lbmQsdCksbC5vcmlnaW5hbD1jLGwudGFic3RvcD1uLHIucHVzaChsKSxuIT1lP24udW5zaGlmdChsKTpuW2FdPWwsYy5mbXRTdHJpbmc/KGwubGlua2VkPSEwLG4uaGFzTGlua2VkUmFuZ2VzPSEwKTpuLmZpcnN0Tm9uTGlua2VkfHwobi5maXJzdE5vbkxpbmtlZD1sKX1uLmZpcnN0Tm9uTGlua2VkfHwobi5oYXNMaW5rZWRSYW5nZXM9ITEpLG49PT1lJiYoby5wdXNoKG4pLHRoaXMuJG9wZW5UYWJzdG9wc1tpXT1uKSx0aGlzLmFkZFRhYnN0b3BNYXJrZXJzKG4pfSksdGhpcyksby5sZW5ndGg+MiYmKHRoaXMudGFic3RvcHMubGVuZ3RoJiZvLnB1c2goby5zcGxpY2UoMiwxKVswXSksdGhpcy50YWJzdG9wcy5zcGxpY2UuYXBwbHkodGhpcy50YWJzdG9wcyxvKSl9LHRoaXMuYWRkVGFic3RvcE1hcmtlcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lZGl0b3Iuc2Vzc2lvbjtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UubWFya2VySWR8fChlLm1hcmtlcklkPXQuYWRkTWFya2VyKGUsImFjZV9zbmlwcGV0LW1hcmtlciIsInRleHQiKSl9KSl9LHRoaXMucmVtb3ZlVGFic3RvcE1hcmtlcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lZGl0b3Iuc2Vzc2lvbjtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucmVtb3ZlTWFya2VyKGUubWFya2VySWQpLGUubWFya2VySWQ9bnVsbH0pKX0sdGhpcy5yZW1vdmVSYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLnRhYnN0b3AuaW5kZXhPZihlKTtlLnRhYnN0b3Auc3BsaWNlKHQsMSksdD10aGlzLnJhbmdlcy5pbmRleE9mKGUpLHRoaXMucmFuZ2VzLnNwbGljZSh0LDEpLHRoaXMuZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKGUubWFya2VySWQpLGUudGFic3RvcC5sZW5ndGh8fCgtMSE9KHQ9dGhpcy50YWJzdG9wcy5pbmRleE9mKGUudGFic3RvcCkpJiZ0aGlzLnRhYnN0b3BzLnNwbGljZSh0LDEpLHRoaXMudGFic3RvcHMubGVuZ3RofHx0aGlzLmRldGFjaCgpKX0sdGhpcy5rZXlib2FyZEhhbmRsZXI9bmV3IGMsdGhpcy5rZXlib2FyZEhhbmRsZXIuYmluZEtleXMoe1RhYjpmdW5jdGlvbihlKXt0LnNuaXBwZXRNYW5hZ2VyJiZ0LnNuaXBwZXRNYW5hZ2VyLmV4cGFuZFdpdGhUYWIoZSl8fGUudGFic3RvcE1hbmFnZXIudGFiTmV4dCgxKX0sIlNoaWZ0LVRhYiI6ZnVuY3Rpb24oZSl7ZS50YWJzdG9wTWFuYWdlci50YWJOZXh0KC0xKX0sRXNjOmZ1bmN0aW9uKGUpe2UudGFic3RvcE1hbmFnZXIuZGV0YWNoKCl9LFJldHVybjpmdW5jdGlvbihlKXtyZXR1cm4hMX19KX0pLmNhbGwoZC5wcm90b3R5cGUpO3ZhciB1PXt9O3Uub25DaGFuZ2U9YS5wcm90b3R5cGUub25DaGFuZ2UsdS5zZXRQb3NpdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMucG9zLnJvdz1lLHRoaXMucG9zLmNvbHVtbj10fSx1LnVwZGF0ZT1mdW5jdGlvbihlLHQsaSl7dGhpcy4kaW5zZXJ0UmlnaHQ9aSx0aGlzLnBvcz1lLHRoaXMub25DaGFuZ2UodCl9O3ZhciBnPWZ1bmN0aW9uKGUsdCl7MD09ZS5yb3cmJihlLmNvbHVtbis9dC5jb2x1bW4pLGUucm93Kz10LnJvd30sZj1mdW5jdGlvbihlLHQpe2Uucm93PT10LnJvdyYmKGUuY29sdW1uLT10LmNvbHVtbiksZS5yb3ctPXQucm93fTtlKCIuL2xpYi9kb20iKS5pbXBvcnRDc3NTdHJpbmcoIi5hY2Vfc25pcHBldC1tYXJrZXIgeyAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7ICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7ICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAxOTMsIDIwOCwgMC4wOSk7ICAgIGJvcmRlcjogMXB4IGRvdHRlZCByZ2JhKDIxMSwgMjA4LCAyMzUsIDAuNjIpOyAgICBwb3NpdGlvbjogYWJzb2x1dGU7fSIpLHQuc25pcHBldE1hbmFnZXI9bmV3IGg7dmFyIG09ZSgiLi9lZGl0b3IiKS5FZGl0b3I7KGZ1bmN0aW9uKCl7dGhpcy5pbnNlcnRTbmlwcGV0PWZ1bmN0aW9uKGUsaSl7cmV0dXJuIHQuc25pcHBldE1hbmFnZXIuaW5zZXJ0U25pcHBldCh0aGlzLGUsaSl9LHRoaXMuZXhwYW5kU25pcHBldD1mdW5jdGlvbihlKXtyZXR1cm4gdC5zbmlwcGV0TWFuYWdlci5leHBhbmRXaXRoVGFiKHRoaXMsZSl9fSkuY2FsbChtLnByb3RvdHlwZSl9KSksYWNlLmRlZmluZSgiYWNlL2F1dG9jb21wbGV0ZS9wb3B1cCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS92aXJ0dWFsX3JlbmRlcmVyIiwiYWNlL2VkaXRvciIsImFjZS9yYW5nZSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL2RvbSJdLChmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL3ZpcnR1YWxfcmVuZGVyZXIiKS5WaXJ0dWFsUmVuZGVyZXIsbz1lKCIuLi9lZGl0b3IiKS5FZGl0b3Iscj1lKCIuLi9yYW5nZSIpLlJhbmdlLHM9ZSgiLi4vbGliL2V2ZW50IiksYT1lKCIuLi9saWIvbGFuZyIpLGM9ZSgiLi4vbGliL2RvbSIpLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IG4oZSk7dC4kbWF4TGluZXM9NDt2YXIgaT1uZXcgbyh0KTtyZXR1cm4gaS5zZXRIaWdobGlnaHRBY3RpdmVMaW5lKCExKSxpLnNldFNob3dQcmludE1hcmdpbighMSksaS5yZW5kZXJlci5zZXRTaG93R3V0dGVyKCExKSxpLnJlbmRlcmVyLnNldEhpZ2hsaWdodEd1dHRlckxpbmUoITEpLGkuJG1vdXNlSGFuZGxlci4kZm9jdXNXYWl0VGltb3V0PTAsaS4kaGlnaGxpZ2h0VGFnUGVuZGluZz0hMCxpfTtjLmltcG9ydENzc1N0cmluZygiLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHsgICAgYmFja2dyb3VuZC1jb2xvcjogI0NBRDZGQTsgICAgei1pbmRleDogMTt9LmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX2xpbmUtaG92ZXIgeyAgICBib3JkZXI6IDFweCBzb2xpZCAjYWJiZmZlOyAgICBtYXJnaW4tdG9wOiAtMXB4OyAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzMywyMzMsMjUzLDAuNCk7fS5hY2VfZWRpdG9yLmFjZV9hdXRvY29tcGxldGUgLmFjZV9saW5lLWhvdmVyIHsgICAgcG9zaXRpb246IGFic29sdXRlOyAgICB6LWluZGV4OiAyO30uYWNlX2VkaXRvci5hY2VfYXV0b2NvbXBsZXRlIC5hY2Vfc2Nyb2xsZXIgeyAgIGJhY2tncm91bmQ6IG5vbmU7ICAgYm9yZGVyOiBub25lOyAgIGJveC1zaGFkb3c6IG5vbmU7fS5hY2VfcmlnaHRBbGlnbmVkVGV4dCB7ICAgIGNvbG9yOiBncmF5OyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgICAgcmlnaHQ6IDRweDsgICAgdGV4dC1hbGlnbjogcmlnaHQ7ICAgIHotaW5kZXg6IC0xO30uYWNlX2VkaXRvci5hY2VfYXV0b2NvbXBsZXRlIC5hY2VfY29tcGxldGlvbi1oaWdobGlnaHR7ICAgIGNvbG9yOiAjMDAwOyAgICB0ZXh0LXNoYWRvdzogMCAwIDAuMDFlbTt9LmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSB7ICAgIHdpZHRoOiAyODBweDsgICAgei1pbmRleDogMjAwMDAwOyAgICBiYWNrZ3JvdW5kOiAjZmJmYmZiOyAgICBjb2xvcjogIzQ0NDsgICAgYm9yZGVyOiAxcHggbGlnaHRncmF5IHNvbGlkOyAgICBwb3NpdGlvbjogZml4ZWQ7ICAgIGJveC1zaGFkb3c6IDJweCAzcHggNXB4IHJnYmEoMCwwLDAsLjIpOyAgICBsaW5lLWhlaWdodDogMS40O30iKSx0LkFjZVBvcHVwPWZ1bmN0aW9uKGUpe3ZhciB0PWMuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1uZXcgbCh0KTtlJiZlLmFwcGVuZENoaWxkKHQpLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsaS5yZW5kZXJlci5jb250ZW50LnN0eWxlLmN1cnNvcj0iZGVmYXVsdCIsaS5yZW5kZXJlci5zZXRTdHlsZSgiYWNlX2F1dG9jb21wbGV0ZSIpLGkuc2V0T3B0aW9uKCJkaXNwbGF5SW5kZW50R3VpZGVzIiwhMSksaS5zZXRPcHRpb24oImRyYWdEZWxheSIsMTUwKTt2YXIgbixvPWZ1bmN0aW9uKCl7fTtpLmZvY3VzPW8saS4kaXNGb2N1c2VkPSEwLGkucmVuZGVyZXIuJGN1cnNvckxheWVyLnJlc3RhcnRUaW1lcj1vLGkucmVuZGVyZXIuJGN1cnNvckxheWVyLmVsZW1lbnQuc3R5bGUub3BhY2l0eT0wLGkucmVuZGVyZXIuJG1heExpbmVzPTgsaS5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3I9ITEsaS5zZXRIaWdobGlnaHRBY3RpdmVMaW5lKCExKSxpLnNlc3Npb24uaGlnaGxpZ2h0KCIiKSxpLnNlc3Npb24uJHNlYXJjaEhpZ2hsaWdodC5jbGF6ej0iYWNlX2hpZ2hsaWdodC1tYXJrZXIiLGkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpO2kuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHQpLGguc3RhcnQucm93PWguZW5kLnJvdz10LnJvdyxlLnN0b3AoKX0pKTt2YXIgcD1uZXcgcigtMSwwLC0xLDEvMCksaD1uZXcgcigtMSwwLC0xLDEvMCk7aC5pZD1pLnNlc3Npb24uYWRkTWFya2VyKGgsImFjZV9hY3RpdmUtbGluZSIsImZ1bGxMaW5lIiksaS5zZXRTZWxlY3RPbkhvdmVyPWZ1bmN0aW9uKGUpe2U/cC5pZCYmKGkuc2Vzc2lvbi5yZW1vdmVNYXJrZXIocC5pZCkscC5pZD1udWxsKTpwLmlkPWkuc2Vzc2lvbi5hZGRNYXJrZXIocCwiYWNlX2xpbmUtaG92ZXIiLCJmdWxsTGluZSIpfSxpLnNldFNlbGVjdE9uSG92ZXIoITEpLGkub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKGUpe2lmKG4pe2lmKG4ueCE9ZS54fHxuLnkhPWUueSl7KG49ZSkuc2Nyb2xsVG9wPWkucmVuZGVyZXIuc2Nyb2xsVG9wO3ZhciB0PW4uZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdztwLnN0YXJ0LnJvdyE9dCYmKHAuaWR8fGkuc2V0Um93KHQpLHUodCkpfX1lbHNlIG49ZX0pKSxpLnJlbmRlcmVyLm9uKCJiZWZvcmVSZW5kZXIiLChmdW5jdGlvbigpe2lmKG4mJi0xIT1wLnN0YXJ0LnJvdyl7bi4kcG9zPW51bGw7dmFyIGU9bi5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93O3AuaWR8fGkuc2V0Um93KGUpLHUoZSwhMCl9fSkpLGkucmVuZGVyZXIub24oImFmdGVyUmVuZGVyIiwoZnVuY3Rpb24oKXt2YXIgZT1pLmdldFJvdygpLHQ9aS5yZW5kZXJlci4kdGV4dExheWVyLG49dC5lbGVtZW50LmNoaWxkTm9kZXNbZS10LmNvbmZpZy5maXJzdFJvd107biE9dC5zZWxlY3RlZE5vZGUmJih0LnNlbGVjdGVkTm9kZSYmYy5yZW1vdmVDc3NDbGFzcyh0LnNlbGVjdGVkTm9kZSwiYWNlX3NlbGVjdGVkIiksdC5zZWxlY3RlZE5vZGU9bixuJiZjLmFkZENzc0NsYXNzKG4sImFjZV9zZWxlY3RlZCIpKX0pKTt2YXIgZD1mdW5jdGlvbigpe3UoLTEpfSx1PWZ1bmN0aW9uKGUsdCl7ZSE9PXAuc3RhcnQucm93JiYocC5zdGFydC5yb3c9cC5lbmQucm93PWUsdHx8aS5zZXNzaW9uLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIiksaS5fZW1pdCgiY2hhbmdlSG92ZXJNYXJrZXIiKSl9O2kuZ2V0SG92ZXJlZFJvdz1mdW5jdGlvbigpe3JldHVybiBwLnN0YXJ0LnJvd30scy5hZGRMaXN0ZW5lcihpLmNvbnRhaW5lciwibW91c2VvdXQiLGQpLGkub24oImhpZGUiLGQpLGkub24oImNoYW5nZVNlbGVjdGlvbiIsZCksaS5zZXNzaW9uLmRvYy5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gaS5kYXRhLmxlbmd0aH0saS5zZXNzaW9uLmRvYy5nZXRMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PWkuZGF0YVtlXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dDp0JiZ0LnZhbHVlfHwiIn07dmFyIGc9aS5zZXNzaW9uLmJnVG9rZW5pemVyO3JldHVybiBnLiR0b2tlbml6ZVJvdz1mdW5jdGlvbihlKXt2YXIgdD1pLmRhdGFbZV0sbj1bXTtpZighdClyZXR1cm4gbjsic3RyaW5nIj09dHlwZW9mIHQmJih0PXt2YWx1ZTp0fSksdC5jYXB0aW9ufHwodC5jYXB0aW9uPXQudmFsdWV8fHQubmFtZSk7Zm9yKHZhciBvLHIscz0tMSxhPTA7YTx0LmNhcHRpb24ubGVuZ3RoO2ErKylyPXQuY2FwdGlvblthXSxzIT09KG89dC5tYXRjaE1hc2smMTw8YT8xOjApPyhuLnB1c2goe3R5cGU6dC5jbGFzc05hbWV8fChvPyJjb21wbGV0aW9uLWhpZ2hsaWdodCI6IiIpLHZhbHVlOnJ9KSxzPW8pOm5bbi5sZW5ndGgtMV0udmFsdWUrPXI7aWYodC5tZXRhKXt2YXIgYz1pLnJlbmRlcmVyLiRzaXplLnNjcm9sbGVyV2lkdGgvaS5yZW5kZXJlci5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aCxsPXQubWV0YTtsLmxlbmd0aCt0LmNhcHRpb24ubGVuZ3RoPmMtMiYmKGw9bC5zdWJzdHIoMCxjLXQuY2FwdGlvbi5sZW5ndGgtMykrIuKApiIpLG4ucHVzaCh7dHlwZToicmlnaHRBbGlnbmVkVGV4dCIsdmFsdWU6bH0pfXJldHVybiBufSxnLiR1cGRhdGVPbkNoYW5nZT1vLGcuc3RhcnQ9byxpLnNlc3Npb24uJGNvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcmVlbldpZHRoPTB9LGkuJGJsb2NrU2Nyb2xsaW5nPTEvMCxpLmlzT3Blbj0hMSxpLmlzVG9wZG93bj0hMSxpLmF1dG9TZWxlY3Q9ITAsaS5kYXRhPVtdLGkuc2V0RGF0YT1mdW5jdGlvbihlKXtpLnNldFZhbHVlKGEuc3RyaW5nUmVwZWF0KCJcbiIsZS5sZW5ndGgpLC0xKSxpLmRhdGE9ZXx8W10saS5zZXRSb3coMCl9LGkuZ2V0RGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gaS5kYXRhW2VdfSxpLmdldFJvdz1mdW5jdGlvbigpe3JldHVybiBoLnN0YXJ0LnJvd30saS5zZXRSb3c9ZnVuY3Rpb24oZSl7ZT1NYXRoLm1heCh0aGlzLmF1dG9TZWxlY3Q/MDotMSxNYXRoLm1pbih0aGlzLmRhdGEubGVuZ3RoLGUpKSxoLnN0YXJ0LnJvdyE9ZSYmKGkuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksaC5zdGFydC5yb3c9aC5lbmQucm93PWV8fDAsaS5zZXNzaW9uLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIiksaS5tb3ZlQ3Vyc29yVG8oZXx8MCwwKSxpLmlzT3BlbiYmaS5fc2lnbmFsKCJzZWxlY3QiKSl9LGkub24oImNoYW5nZVNlbGVjdGlvbiIsKGZ1bmN0aW9uKCl7aS5pc09wZW4mJmkuc2V0Um93KGkuc2VsZWN0aW9uLmxlYWQucm93KSxpLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCl9KSksaS5oaWRlPWZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fc2lnbmFsKCJoaWRlIiksaS5pc09wZW49ITF9LGkuc2hvdz1mdW5jdGlvbihlLHQsbyl7dmFyIHI9dGhpcy5jb250YWluZXIscz13aW5kb3cuaW5uZXJIZWlnaHQsYT13aW5kb3cuaW5uZXJXaWR0aCxjPXRoaXMucmVuZGVyZXIsbD1jLiRtYXhMaW5lcyp0KjEuNCxwPWUudG9wK3RoaXMuJGJvcmRlclNpemU7cD5zLzImJiFvJiZwK3QrbD5zPyhjLiRtYXhQaXhlbEhlaWdodD1wLTIqdGhpcy4kYm9yZGVyU2l6ZSxyLnN0eWxlLnRvcD0iIixyLnN0eWxlLmJvdHRvbT1zLXArInB4IixpLmlzVG9wZG93bj0hMSk6KHArPXQsYy4kbWF4UGl4ZWxIZWlnaHQ9cy1wLS4yKnQsci5zdHlsZS50b3A9cCsicHgiLHIuc3R5bGUuYm90dG9tPSIiLGkuaXNUb3Bkb3duPSEwKSxyLnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5yZW5kZXJlci4kdGV4dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTt2YXIgaD1lLmxlZnQ7aCtyLm9mZnNldFdpZHRoPmEmJihoPWEtci5vZmZzZXRXaWR0aCksci5zdHlsZS5sZWZ0PWgrInB4Iix0aGlzLl9zaWduYWwoInNob3ciKSxuPW51bGwsaS5pc09wZW49ITB9LGkuZ2V0VGV4dExlZnRPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYm9yZGVyU2l6ZSt0aGlzLnJlbmRlcmVyLiRwYWRkaW5nK3RoaXMuJGltYWdlU2l6ZX0saS4kaW1hZ2VTaXplPTAsaS4kYm9yZGVyU2l6ZT0xLGl9fSkpLGFjZS5kZWZpbmUoImFjZS9hdXRvY29tcGxldGUvdXRpbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLChmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QucGFyRm9yRWFjaD1mdW5jdGlvbihlLHQsaSl7dmFyIG49MCxvPWUubGVuZ3RoOzA9PT1vJiZpKCk7Zm9yKHZhciByPTA7cjxvO3IrKyl0KGVbcl0sKGZ1bmN0aW9uKGUsdCl7KytuPT09byYmaShlLHQpfSkpfTt2YXIgbj0vW2EtekEtWl8wLTlcJFwtXHUwMEEyLVx1RkZGRl0vO3QucmV0cmlldmVQcmVjZWRpbmdJZGVudGlmaWVyPWZ1bmN0aW9uKGUsdCxpKXtpPWl8fG47Zm9yKHZhciBvPVtdLHI9dC0xO3I+PTAmJmkudGVzdChlW3JdKTtyLS0pby5wdXNoKGVbcl0pO3JldHVybiBvLnJldmVyc2UoKS5qb2luKCIiKX0sdC5yZXRyaWV2ZUZvbGxvd2luZ0lkZW50aWZpZXI9ZnVuY3Rpb24oZSx0LGkpe2k9aXx8bjtmb3IodmFyIG89W10scj10O3I8ZS5sZW5ndGgmJmkudGVzdChlW3JdKTtyKyspby5wdXNoKGVbcl0pO3JldHVybiBvfSx0LmdldENvbXBsZXRpb25QcmVmaXg9ZnVuY3Rpb24oZSl7dmFyIHQsaT1lLmdldEN1cnNvclBvc2l0aW9uKCksbj1lLnNlc3Npb24uZ2V0TGluZShpLnJvdyk7cmV0dXJuIGUuY29tcGxldGVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaWRlbnRpZmllclJlZ2V4cHMmJmUuaWRlbnRpZmllclJlZ2V4cHMuZm9yRWFjaChmdW5jdGlvbihlKXshdCYmZSYmKHQ9dGhpcy5yZXRyaWV2ZVByZWNlZGluZ0lkZW50aWZpZXIobixpLmNvbHVtbixlKSl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpKSx0fHx0aGlzLnJldHJpZXZlUHJlY2VkaW5nSWRlbnRpZmllcihuLGkuY29sdW1uKX19KSksYWNlLmRlZmluZSgiYWNlL2F1dG9jb21wbGV0ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLCJhY2UvYXV0b2NvbXBsZXRlL3BvcHVwIiwiYWNlL2F1dG9jb21wbGV0ZS91dGlsIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvZG9tIiwiYWNlL3NuaXBwZXRzIl0sKGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKS5IYXNoSGFuZGxlcixvPWUoIi4vYXV0b2NvbXBsZXRlL3BvcHVwIikuQWNlUG9wdXAscj1lKCIuL2F1dG9jb21wbGV0ZS91dGlsIikscz0oZSgiLi9saWIvZXZlbnQiKSxlKCIuL2xpYi9sYW5nIikpLGE9ZSgiLi9saWIvZG9tIiksYz1lKCIuL3NuaXBwZXRzIikuc25pcHBldE1hbmFnZXIsbD1mdW5jdGlvbigpe3RoaXMuYXV0b0luc2VydD0hMSx0aGlzLmF1dG9TZWxlY3Q9ITAsdGhpcy5leGFjdE1hdGNoPSExLHRoaXMuZ2F0aGVyQ29tcGxldGlvbnNJZD0wLHRoaXMua2V5Ym9hcmRIYW5kbGVyPW5ldyBuLHRoaXMua2V5Ym9hcmRIYW5kbGVyLmJpbmRLZXlzKHRoaXMuY29tbWFuZHMpLHRoaXMuYmx1ckxpc3RlbmVyPXRoaXMuYmx1ckxpc3RlbmVyLmJpbmQodGhpcyksdGhpcy5jaGFuZ2VMaXN0ZW5lcj10aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyksdGhpcy5tb3VzZWRvd25MaXN0ZW5lcj10aGlzLm1vdXNlZG93bkxpc3RlbmVyLmJpbmQodGhpcyksdGhpcy5tb3VzZXdoZWVsTGlzdGVuZXI9dGhpcy5tb3VzZXdoZWVsTGlzdGVuZXIuYmluZCh0aGlzKSx0aGlzLmNoYW5nZVRpbWVyPXMuZGVsYXllZENhbGwoZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUNvbXBsZXRpb25zKCEwKX0uYmluZCh0aGlzKSksdGhpcy50b29sdGlwVGltZXI9cy5kZWxheWVkQ2FsbCh0aGlzLnVwZGF0ZURvY1Rvb2x0aXAuYmluZCh0aGlzKSw1MCl9OyhmdW5jdGlvbigpe3RoaXMuJGluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3B1cD1uZXcgbyhkb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHRoaXMucG9wdXAub24oImNsaWNrIixmdW5jdGlvbihlKXt0aGlzLmluc2VydE1hdGNoKCksZS5zdG9wKCl9LmJpbmQodGhpcykpLHRoaXMucG9wdXAuZm9jdXM9dGhpcy5lZGl0b3IuZm9jdXMuYmluZCh0aGlzLmVkaXRvciksdGhpcy5wb3B1cC5vbigic2hvdyIsdGhpcy50b29sdGlwVGltZXIuYmluZChudWxsLG51bGwpKSx0aGlzLnBvcHVwLm9uKCJzZWxlY3QiLHRoaXMudG9vbHRpcFRpbWVyLmJpbmQobnVsbCxudWxsKSksdGhpcy5wb3B1cC5vbigiY2hhbmdlSG92ZXJNYXJrZXIiLHRoaXMudG9vbHRpcFRpbWVyLmJpbmQobnVsbCxudWxsKSksdGhpcy5wb3B1cH0sdGhpcy5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcHVwfHx0aGlzLiRpbml0KCl9LHRoaXMub3BlblBvcHVwPWZ1bmN0aW9uKGUsdCxpKXt0aGlzLnBvcHVwfHx0aGlzLiRpbml0KCksdGhpcy5wb3B1cC5hdXRvU2VsZWN0PXRoaXMuYXV0b1NlbGVjdCx0aGlzLnBvcHVwLnNldERhdGEodGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZCksZS5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcih0aGlzLmtleWJvYXJkSGFuZGxlcik7dmFyIG49ZS5yZW5kZXJlcjtpZih0aGlzLnBvcHVwLnNldFJvdyh0aGlzLmF1dG9TZWxlY3Q/MDotMSksaSlpJiYhdCYmdGhpcy5kZXRhY2goKTtlbHNle3RoaXMucG9wdXAuc2V0VGhlbWUoZS5nZXRUaGVtZSgpKSx0aGlzLnBvcHVwLnNldEZvbnRTaXplKGUuZ2V0Rm9udFNpemUoKSk7dmFyIG89bi5sYXllckNvbmZpZy5saW5lSGVpZ2h0LHI9bi4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih0aGlzLmJhc2UsITApO3IubGVmdC09dGhpcy5wb3B1cC5nZXRUZXh0TGVmdE9mZnNldCgpO3ZhciBzPWUuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IudG9wKz1zLnRvcC1uLmxheWVyQ29uZmlnLm9mZnNldCxyLmxlZnQrPXMubGVmdC1lLnJlbmRlcmVyLnNjcm9sbExlZnQsci5sZWZ0Kz1uLmd1dHRlcldpZHRoLHRoaXMucG9wdXAuc2hvdyhyLG8pfX0sdGhpcy5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLmVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLmtleWJvYXJkSGFuZGxlciksdGhpcy5lZGl0b3Iub2ZmKCJjaGFuZ2VTZWxlY3Rpb24iLHRoaXMuY2hhbmdlTGlzdGVuZXIpLHRoaXMuZWRpdG9yLm9mZigiYmx1ciIsdGhpcy5ibHVyTGlzdGVuZXIpLHRoaXMuZWRpdG9yLm9mZigibW91c2Vkb3duIix0aGlzLm1vdXNlZG93bkxpc3RlbmVyKSx0aGlzLmVkaXRvci5vZmYoIm1vdXNld2hlZWwiLHRoaXMubW91c2V3aGVlbExpc3RlbmVyKSx0aGlzLmNoYW5nZVRpbWVyLmNhbmNlbCgpLHRoaXMuaGlkZURvY1Rvb2x0aXAoKSx0aGlzLmdhdGhlckNvbXBsZXRpb25zSWQrPTEsdGhpcy5wb3B1cCYmdGhpcy5wb3B1cC5pc09wZW4mJnRoaXMucG9wdXAuaGlkZSgpLHRoaXMuYmFzZSYmdGhpcy5iYXNlLmRldGFjaCgpLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuY29tcGxldGlvbnM9dGhpcy5iYXNlPW51bGx9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmxlYWQ7KHQucm93IT10aGlzLmJhc2Uucm93fHx0LmNvbHVtbjx0aGlzLmJhc2UuY29sdW1uKSYmdGhpcy5kZXRhY2goKSx0aGlzLmFjdGl2YXRlZD90aGlzLmNoYW5nZVRpbWVyLnNjaGVkdWxlKCk6dGhpcy5kZXRhY2goKX0sdGhpcy5ibHVyTGlzdGVuZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCxpPXRoaXMuZWRpdG9yLnRleHRJbnB1dC5nZXRFbGVtZW50KCksbj1lLnJlbGF0ZWRUYXJnZXQmJnRoaXMudG9vbHRpcE5vZGUmJnRoaXMudG9vbHRpcE5vZGUuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSxvPXRoaXMucG9wdXAmJnRoaXMucG9wdXAuY29udGFpbmVyO3Q9PWl8fHQucGFyZW50Tm9kZT09b3x8bnx8dD09dGhpcy50b29sdGlwTm9kZXx8ZS5yZWxhdGVkVGFyZ2V0PT1pfHx0aGlzLmRldGFjaCgpfSx0aGlzLm1vdXNlZG93bkxpc3RlbmVyPWZ1bmN0aW9uKGUpe3RoaXMuZGV0YWNoKCl9LHRoaXMubW91c2V3aGVlbExpc3RlbmVyPWZ1bmN0aW9uKGUpe3RoaXMuZGV0YWNoKCl9LHRoaXMuZ29Ubz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvcHVwLmdldFJvdygpLGk9dGhpcy5wb3B1cC5zZXNzaW9uLmdldExlbmd0aCgpLTE7c3dpdGNoKGUpe2Nhc2UidXAiOnQ9dDw9MD9pOnQtMTticmVhaztjYXNlImRvd24iOnQ9dD49aT8tMTp0KzE7YnJlYWs7Y2FzZSJzdGFydCI6dD0wO2JyZWFrO2Nhc2UiZW5kIjp0PWl9dGhpcy5wb3B1cC5zZXRSb3codCl9LHRoaXMuaW5zZXJ0TWF0Y2g9ZnVuY3Rpb24oZSx0KXtpZihlfHwoZT10aGlzLnBvcHVwLmdldERhdGEodGhpcy5wb3B1cC5nZXRSb3coKSkpLCFlKXJldHVybiExO2lmKGUuY29tcGxldGVyJiZlLmNvbXBsZXRlci5pbnNlcnRNYXRjaCllLmNvbXBsZXRlci5pbnNlcnRNYXRjaCh0aGlzLmVkaXRvcixlKTtlbHNle2lmKHRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dClmb3IodmFyIGksbj10aGlzLmVkaXRvci5zZWxlY3Rpb24uZ2V0QWxsUmFuZ2VzKCksbz0wO2k9bltvXTtvKyspaS5zdGFydC5jb2x1bW4tPXRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dC5sZW5ndGgsdGhpcy5lZGl0b3Iuc2Vzc2lvbi5yZW1vdmUoaSk7ZS5zbmlwcGV0P2MuaW5zZXJ0U25pcHBldCh0aGlzLmVkaXRvcixlLnNuaXBwZXQpOnRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCJpbnNlcnRzdHJpbmciLGUudmFsdWV8fGUpfXRoaXMuZGV0YWNoKCl9LHRoaXMuY29tbWFuZHM9e1VwOmZ1bmN0aW9uKGUpe2UuY29tcGxldGVyLmdvVG8oInVwIil9LERvd246ZnVuY3Rpb24oZSl7ZS5jb21wbGV0ZXIuZ29UbygiZG93biIpfSwiQ3RybC1VcHxDdHJsLUhvbWUiOmZ1bmN0aW9uKGUpe2UuY29tcGxldGVyLmdvVG8oInN0YXJ0Iil9LCJDdHJsLURvd258Q3RybC1FbmQiOmZ1bmN0aW9uKGUpe2UuY29tcGxldGVyLmdvVG8oImVuZCIpfSxFc2M6ZnVuY3Rpb24oZSl7ZS5jb21wbGV0ZXIuZGV0YWNoKCl9LFJldHVybjpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb21wbGV0ZXIuaW5zZXJ0TWF0Y2goKX0sIlNoaWZ0LVJldHVybiI6ZnVuY3Rpb24oZSl7ZS5jb21wbGV0ZXIuaW5zZXJ0TWF0Y2gobnVsbCx7ZGVsZXRlU3VmZml4OiEwfSl9LFRhYjpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbXBsZXRlci5pbnNlcnRNYXRjaCgpO2lmKHR8fGUudGFic3RvcE1hbmFnZXIpcmV0dXJuIHQ7ZS5jb21wbGV0ZXIuZ29UbygiZG93biIpfSxQYWdlVXA6ZnVuY3Rpb24oZSl7ZS5jb21wbGV0ZXIucG9wdXAuZ290b1BhZ2VVcCgpfSxQYWdlRG93bjpmdW5jdGlvbihlKXtlLmNvbXBsZXRlci5wb3B1cC5nb3RvUGFnZURvd24oKX19LHRoaXMuZ2F0aGVyQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLmdldFNlc3Npb24oKSxuPWUuZ2V0Q3Vyc29yUG9zaXRpb24oKSxvPXIuZ2V0Q29tcGxldGlvblByZWZpeChlKTt0aGlzLmJhc2U9aS5kb2MuY3JlYXRlQW5jaG9yKG4ucm93LG4uY29sdW1uLW8ubGVuZ3RoKSx0aGlzLmJhc2UuJGluc2VydFJpZ2h0PSEwO3ZhciBzPVtdLGE9ZS5jb21wbGV0ZXJzLmxlbmd0aDtyZXR1cm4gZS5jb21wbGV0ZXJzLmZvckVhY2goKGZ1bmN0aW9uKGMsbCl7Yy5nZXRDb21wbGV0aW9ucyhlLGksbixvLChmdW5jdGlvbihpLG4peyFpJiZuJiYocz1zLmNvbmNhdChuKSksdChudWxsLHtwcmVmaXg6ci5nZXRDb21wbGV0aW9uUHJlZml4KGUpLG1hdGNoZXM6cyxmaW5pc2hlZDowPT0tLWF9KX0pKX0pKSwhMH0sdGhpcy5zaG93UG9wdXA9ZnVuY3Rpb24oZSl7dGhpcy5lZGl0b3ImJnRoaXMuZGV0YWNoKCksdGhpcy5hY3RpdmF0ZWQ9ITAsdGhpcy5lZGl0b3I9ZSxlLmNvbXBsZXRlciE9dGhpcyYmKGUuY29tcGxldGVyJiZlLmNvbXBsZXRlci5kZXRhY2goKSxlLmNvbXBsZXRlcj10aGlzKSxlLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLHRoaXMuY2hhbmdlTGlzdGVuZXIpLGUub24oImJsdXIiLHRoaXMuYmx1ckxpc3RlbmVyKSxlLm9uKCJtb3VzZWRvd24iLHRoaXMubW91c2Vkb3duTGlzdGVuZXIpLGUub24oIm1vdXNld2hlZWwiLHRoaXMubW91c2V3aGVlbExpc3RlbmVyKSx0aGlzLnVwZGF0ZUNvbXBsZXRpb25zKCl9LHRoaXMudXBkYXRlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSl7aWYoZSYmdGhpcy5iYXNlJiZ0aGlzLmNvbXBsZXRpb25zKXt2YXIgdD10aGlzLmVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpLGk9dGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2Uoe3N0YXJ0OnRoaXMuYmFzZSxlbmQ6dH0pO2lmKGk9PXRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dClyZXR1cm47cmV0dXJuIHRoaXMuY29tcGxldGlvbnMuc2V0RmlsdGVyKGkpLHRoaXMuY29tcGxldGlvbnMuZmlsdGVyZWQubGVuZ3RoJiYoMSE9dGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZC5sZW5ndGh8fHRoaXMuY29tcGxldGlvbnMuZmlsdGVyZWRbMF0udmFsdWUhPWl8fHRoaXMuY29tcGxldGlvbnMuZmlsdGVyZWRbMF0uc25pcHBldCk/dm9pZCB0aGlzLm9wZW5Qb3B1cCh0aGlzLmVkaXRvcixpLGUpOnRoaXMuZGV0YWNoKCl9dmFyIG49dGhpcy5nYXRoZXJDb21wbGV0aW9uc0lkO3RoaXMuZ2F0aGVyQ29tcGxldGlvbnModGhpcy5lZGl0b3IsZnVuY3Rpb24odCxpKXt2YXIgbz1mdW5jdGlvbigpe2lmKGkuZmluaXNoZWQpcmV0dXJuIHRoaXMuZGV0YWNoKCl9LmJpbmQodGhpcykscj1pLnByZWZpeCxzPWkmJmkubWF0Y2hlcztpZighc3x8IXMubGVuZ3RoKXJldHVybiBvKCk7aWYoMD09PXIuaW5kZXhPZihpLnByZWZpeCkmJm49PXRoaXMuZ2F0aGVyQ29tcGxldGlvbnNJZCl7dGhpcy5jb21wbGV0aW9ucz1uZXcgcChzKSx0aGlzLmV4YWN0TWF0Y2gmJih0aGlzLmNvbXBsZXRpb25zLmV4YWN0TWF0Y2g9ITApLHRoaXMuY29tcGxldGlvbnMuc2V0RmlsdGVyKHIpO3ZhciBhPXRoaXMuY29tcGxldGlvbnMuZmlsdGVyZWQ7cmV0dXJuIGEubGVuZ3RoJiYoMSE9YS5sZW5ndGh8fGFbMF0udmFsdWUhPXJ8fGFbMF0uc25pcHBldCk/dGhpcy5hdXRvSW5zZXJ0JiYxPT1hLmxlbmd0aCYmaS5maW5pc2hlZD90aGlzLmluc2VydE1hdGNoKGFbMF0pOnZvaWQgdGhpcy5vcGVuUG9wdXAodGhpcy5lZGl0b3IscixlKTpvKCl9fS5iaW5kKHRoaXMpKX0sdGhpcy5jYW5jZWxDb250ZXh0TWVudT1mdW5jdGlvbigpe3RoaXMuZWRpdG9yLiRtb3VzZUhhbmRsZXIuY2FuY2VsQ29udGV4dE1lbnUoKX0sdGhpcy51cGRhdGVEb2NUb29sdGlwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3B1cCx0PWUuZGF0YSxpPXQmJih0W2UuZ2V0SG92ZXJlZFJvdygpXXx8dFtlLmdldFJvdygpXSksbj1udWxsO3JldHVybiBpJiZ0aGlzLmVkaXRvciYmdGhpcy5wb3B1cC5pc09wZW4/KHRoaXMuZWRpdG9yLmNvbXBsZXRlcnMuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RG9jVG9vbHRpcCYmKG49ZS5nZXREb2NUb29sdGlwKGkpKSxufSkpLG58fChuPWkpLCJzdHJpbmciPT10eXBlb2YgbiYmKG49e2RvY1RleHQ6bn0pLG4mJihuLmRvY0hUTUx8fG4uZG9jVGV4dCk/dm9pZCB0aGlzLnNob3dEb2NUb29sdGlwKG4pOnRoaXMuaGlkZURvY1Rvb2x0aXAoKSk6dGhpcy5oaWRlRG9jVG9vbHRpcCgpfSx0aGlzLnNob3dEb2NUb29sdGlwPWZ1bmN0aW9uKGUpe3RoaXMudG9vbHRpcE5vZGV8fCh0aGlzLnRvb2x0aXBOb2RlPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy50b29sdGlwTm9kZS5jbGFzc05hbWU9ImFjZV90b29sdGlwIGFjZV9kb2MtdG9vbHRpcCIsdGhpcy50b29sdGlwTm9kZS5zdHlsZS5tYXJnaW49MCx0aGlzLnRvb2x0aXBOb2RlLnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iLHRoaXMudG9vbHRpcE5vZGUudGFiSW5kZXg9LTEsdGhpcy50b29sdGlwTm9kZS5vbmJsdXI9dGhpcy5ibHVyTGlzdGVuZXIuYmluZCh0aGlzKSx0aGlzLnRvb2x0aXBOb2RlLm9uY2xpY2s9dGhpcy5vblRvb2x0aXBDbGljay5iaW5kKHRoaXMpKTt2YXIgdD10aGlzLnRvb2x0aXBOb2RlO2UuZG9jSFRNTD90LmlubmVySFRNTD1lLmRvY0hUTUw6ZS5kb2NUZXh0JiYodC50ZXh0Q29udGVudD1lLmRvY1RleHQpLHQucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTt2YXIgaT10aGlzLnBvcHVwLG49aS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5zdHlsZS50b3A9aS5jb250YWluZXIuc3R5bGUudG9wLHQuc3R5bGUuYm90dG9tPWkuY29udGFpbmVyLnN0eWxlLmJvdHRvbSx3aW5kb3cuaW5uZXJXaWR0aC1uLnJpZ2h0PDMyMD8odC5zdHlsZS5yaWdodD13aW5kb3cuaW5uZXJXaWR0aC1uLmxlZnQrInB4Iix0LnN0eWxlLmxlZnQ9IiIpOih0LnN0eWxlLmxlZnQ9bi5yaWdodCsxKyJweCIsdC5zdHlsZS5yaWdodD0iIiksdC5zdHlsZS5kaXNwbGF5PSJibG9jayJ9LHRoaXMuaGlkZURvY1Rvb2x0aXA9ZnVuY3Rpb24oKXtpZih0aGlzLnRvb2x0aXBUaW1lci5jYW5jZWwoKSx0aGlzLnRvb2x0aXBOb2RlKXt2YXIgZT10aGlzLnRvb2x0aXBOb2RlO3RoaXMuZWRpdG9yLmlzRm9jdXNlZCgpfHxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT1lfHx0aGlzLmVkaXRvci5mb2N1cygpLHRoaXMudG9vbHRpcE5vZGU9bnVsbCxlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX19LHRoaXMub25Ub29sdGlwQ2xpY2s9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUudGFyZ2V0O3QmJnQhPXRoaXMudG9vbHRpcE5vZGU7KXtpZigiQSI9PXQubm9kZU5hbWUmJnQuaHJlZil7dC5yZWw9Im5vcmVmZXJyZXIiLHQudGFyZ2V0PSJfYmxhbmsiO2JyZWFrfXQ9dC5wYXJlbnROb2RlfX19KS5jYWxsKGwucHJvdG90eXBlKSxsLnN0YXJ0Q29tbWFuZD17bmFtZToic3RhcnRBdXRvY29tcGxldGUiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5jb21wbGV0ZXJ8fChlLmNvbXBsZXRlcj1uZXcgbCksZS5jb21wbGV0ZXIuYXV0b0luc2VydD0hMSxlLmNvbXBsZXRlci5hdXRvU2VsZWN0PSEwLGUuY29tcGxldGVyLnNob3dQb3B1cChlKSxlLmNvbXBsZXRlci5jYW5jZWxDb250ZXh0TWVudSgpfSxiaW5kS2V5OiJDdHJsLVNwYWNlfEN0cmwtU2hpZnQtU3BhY2V8QWx0LVNwYWNlIn07dmFyIHA9ZnVuY3Rpb24oZSx0KXt0aGlzLmFsbD1lLHRoaXMuZmlsdGVyZWQ9ZSx0aGlzLmZpbHRlclRleHQ9dHx8IiIsdGhpcy5leGFjdE1hdGNoPSExfTsoZnVuY3Rpb24oKXt0aGlzLnNldEZpbHRlcj1mdW5jdGlvbihlKXtpZihlLmxlbmd0aD50aGlzLmZpbHRlclRleHQmJjA9PT1lLmxhc3RJbmRleE9mKHRoaXMuZmlsdGVyVGV4dCwwKSl2YXIgdD10aGlzLmZpbHRlcmVkO2Vsc2UgdD10aGlzLmFsbDt0aGlzLmZpbHRlclRleHQ9ZSx0PSh0PXRoaXMuZmlsdGVyQ29tcGxldGlvbnModCx0aGlzLmZpbHRlclRleHQpKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiB0LmV4YWN0TWF0Y2gtZS5leGFjdE1hdGNofHx0LnNjb3JlLWUuc2NvcmV9KSk7dmFyIGk9bnVsbDt0PXQuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgdD1lLnNuaXBwZXR8fGUuY2FwdGlvbnx8ZS52YWx1ZTtyZXR1cm4gdCE9PWkmJihpPXQsITApfSkpLHRoaXMuZmlsdGVyZWQ9dH0sdGhpcy5maWx0ZXJDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQpe3ZhciBpPVtdLG49dC50b1VwcGVyQ2FzZSgpLG89dC50b0xvd2VyQ2FzZSgpO2U6Zm9yKHZhciByLHM9MDtyPWVbc107cysrKXt2YXIgYT1yLnZhbHVlfHxyLmNhcHRpb258fHIuc25pcHBldDtpZihhKXt2YXIgYyxsLHA9LTEsaD0wLGQ9MDtpZih0aGlzLmV4YWN0TWF0Y2gpe2lmKHQhPT1hLnN1YnN0cigwLHQubGVuZ3RoKSljb250aW51ZSBlfWVsc2UgZm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBnPWEuaW5kZXhPZihvW3VdLHArMSksZj1hLmluZGV4T2Yoblt1XSxwKzEpO2lmKChjPWc+PTAmJihmPDB8fGc8Zik/ZzpmKTwwKWNvbnRpbnVlIGU7KGw9Yy1wLTEpPjAmJigtMT09PXAmJihkKz0xMCksZCs9bCksaHw9MTw8YyxwPWN9ci5tYXRjaE1hc2s9aCxyLmV4YWN0TWF0Y2g9ZD8wOjEsci5zY29yZT0oci5zY29yZXx8MCktZCxpLnB1c2gocil9fXJldHVybiBpfX0pLmNhbGwocC5wcm90b3R5cGUpLHQuQXV0b2NvbXBsZXRlPWwsdC5GaWx0ZXJlZExpc3Q9cH0pKSxhY2UuZGVmaW5lKCJhY2UvYXV0b2NvbXBsZXRlL3RleHRfY29tcGxldGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sKGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1lKCIuLi9yYW5nZSIpLlJhbmdlLG89L1teYS16QS1aXzAtOVwkXC1cdTAwQzAtXHUxRkZGXHUyQzAwLVx1RDdGRlx3XSsvO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZS5nZXRUZXh0UmFuZ2Uobi5mcm9tUG9pbnRzKHtyb3c6MCxjb2x1bW46MH0sdCkpLnNwbGl0KG8pLmxlbmd0aC0xfWZ1bmN0aW9uIHMoZSx0KXt2YXIgaT1yKGUsdCksbj1lLmdldFZhbHVlKCkuc3BsaXQobykscz1PYmplY3QuY3JlYXRlKG51bGwpLGE9bltpXTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKGUmJmUhPT1hKXt2YXIgbz1NYXRoLmFicyhpLXQpLHI9bi5sZW5ndGgtbztzW2VdP3NbZV09TWF0aC5tYXgocixzW2VdKTpzW2VdPXJ9fSkpLHN9dC5nZXRDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsaSxuLG8pe3ZhciByPXModCxpKTtvKG51bGwsT2JqZWN0LmtleXMocikubWFwKChmdW5jdGlvbihlKXtyZXR1cm57Y2FwdGlvbjplLHZhbHVlOmUsc2NvcmU6cltlXSxtZXRhOiJsb2NhbCJ9fSkpKX19KSksYWNlLmRlZmluZSgiYWNlL2V4dC9sYW5ndWFnZV90b29scyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9zbmlwcGV0cyIsImFjZS9hdXRvY29tcGxldGUiLCJhY2UvY29uZmlnIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2F1dG9jb21wbGV0ZS91dGlsIiwiYWNlL2F1dG9jb21wbGV0ZS90ZXh0X2NvbXBsZXRlciIsImFjZS9lZGl0b3IiLCJhY2UvY29uZmlnIl0sKGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vc25pcHBldHMiKS5zbmlwcGV0TWFuYWdlcixvPWUoIi4uL2F1dG9jb21wbGV0ZSIpLkF1dG9jb21wbGV0ZSxyPWUoIi4uL2NvbmZpZyIpLHM9ZSgiLi4vbGliL2xhbmciKSxhPWUoIi4uL2F1dG9jb21wbGV0ZS91dGlsIiksYz1lKCIuLi9hdXRvY29tcGxldGUvdGV4dF9jb21wbGV0ZXIiKSxsPXtnZXRDb21wbGV0aW9uczpmdW5jdGlvbihlLHQsaSxuLG8pe2lmKHQuJG1vZGUuY29tcGxldGVyKXJldHVybiB0LiRtb2RlLmNvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhlLHQsaSxuLG8pO3ZhciByPWUuc2Vzc2lvbi5nZXRTdGF0ZShpLnJvdyk7byhudWxsLHQuJG1vZGUuZ2V0Q29tcGxldGlvbnMocix0LGksbikpfX0scD17Z2V0Q29tcGxldGlvbnM6ZnVuY3Rpb24oZSx0LGksbyxyKXt2YXIgcz1uLnNuaXBwZXRNYXAsYT1bXTtuLmdldEFjdGl2ZVNjb3BlcyhlKS5mb3JFYWNoKChmdW5jdGlvbihlKXtmb3IodmFyIHQ9c1tlXXx8W10saT10Lmxlbmd0aDtpLS07KXt2YXIgbj10W2ldLG89bi5uYW1lfHxuLnRhYlRyaWdnZXI7byYmYS5wdXNoKHtjYXB0aW9uOm8sc25pcHBldDpuLmNvbnRlbnQsbWV0YTpuLnRhYlRyaWdnZXImJiFuLm5hbWU/bi50YWJUcmlnZ2VyKyLih6UgIjoic25pcHBldCIsdHlwZToic25pcHBldCJ9KX19KSx0aGlzKSxyKG51bGwsYSl9LGdldERvY1Rvb2x0aXA6ZnVuY3Rpb24oZSl7InNuaXBwZXQiIT1lLnR5cGV8fGUuZG9jSFRNTHx8KGUuZG9jSFRNTD1bIjxiPiIscy5lc2NhcGVIVE1MKGUuY2FwdGlvbiksIjwvYj4iLCI8aHI+PC9ocj4iLHMuZXNjYXBlSFRNTChlLnNuaXBwZXQpXS5qb2luKCIiKSl9fSxoPVtwLGMsbF07dC5zZXRDb21wbGV0ZXJzPWZ1bmN0aW9uKGUpe2gubGVuZ3RoPTAsZSYmaC5wdXNoLmFwcGx5KGgsZSl9LHQuYWRkQ29tcGxldGVyPWZ1bmN0aW9uKGUpe2gucHVzaChlKX0sdC50ZXh0Q29tcGxldGVyPWMsdC5rZXlXb3JkQ29tcGxldGVyPWwsdC5zbmlwcGV0Q29tcGxldGVyPXA7dmFyIGQ9e25hbWU6ImV4cGFuZFNuaXBwZXQiLGV4ZWM6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZXhwYW5kV2l0aFRhYihlKX0sYmluZEtleToiVGFiIn0sdT1mdW5jdGlvbihlLHQpe2codC5zZXNzaW9uLiRtb2RlKX0sZz1mdW5jdGlvbihlKXt2YXIgdD1lLiRpZDtuLmZpbGVzfHwobi5maWxlcz17fSksZih0KSxlLm1vZGVzJiZlLm1vZGVzLmZvckVhY2goZyl9LGY9ZnVuY3Rpb24oZSl7aWYoZSYmIW4uZmlsZXNbZV0pe3ZhciB0PWUucmVwbGFjZSgibW9kZSIsInNuaXBwZXRzIik7bi5maWxlc1tlXT17fSxyLmxvYWRNb2R1bGUodCwoZnVuY3Rpb24odCl7dCYmKG4uZmlsZXNbZV09dCwhdC5zbmlwcGV0cyYmdC5zbmlwcGV0VGV4dCYmKHQuc25pcHBldHM9bi5wYXJzZVNuaXBwZXRGaWxlKHQuc25pcHBldFRleHQpKSxuLnJlZ2lzdGVyKHQuc25pcHBldHN8fFtdLHQuc2NvcGUpLHQuaW5jbHVkZVNjb3BlcyYmKG4uc25pcHBldE1hcFt0LnNjb3BlXS5pbmNsdWRlU2NvcGVzPXQuaW5jbHVkZVNjb3Blcyx0LmluY2x1ZGVTY29wZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZigiYWNlL21vZGUvIitlKX0pKSkpfSkpfX0sbT1mdW5jdGlvbihlKXt2YXIgdD1lLmVkaXRvcixpPXQuY29tcGxldGVyJiZ0LmNvbXBsZXRlci5hY3RpdmF0ZWQ7aWYoImJhY2tzcGFjZSI9PT1lLmNvbW1hbmQubmFtZSlpJiYhYS5nZXRDb21wbGV0aW9uUHJlZml4KHQpJiZ0LmNvbXBsZXRlci5kZXRhY2goKTtlbHNlIGlmKCJpbnNlcnRzdHJpbmciPT09ZS5jb21tYW5kLm5hbWUpe2EuZ2V0Q29tcGxldGlvblByZWZpeCh0KSYmIWkmJih0LmNvbXBsZXRlcnx8KHQuY29tcGxldGVyPW5ldyBvKSx0LmNvbXBsZXRlci5hdXRvSW5zZXJ0PSExLHQuY29tcGxldGVyLnNob3dQb3B1cCh0KSl9fSxiPWUoIi4uL2VkaXRvciIpLkVkaXRvcjtlKCIuLi9jb25maWciKS5kZWZpbmVPcHRpb25zKGIucHJvdG90eXBlLCJlZGl0b3IiLHtlbmFibGVCYXNpY0F1dG9jb21wbGV0aW9uOntzZXQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5jb21wbGV0ZXJzfHwodGhpcy5jb21wbGV0ZXJzPUFycmF5LmlzQXJyYXkoZSk/ZTpoKSx0aGlzLmNvbW1hbmRzLmFkZENvbW1hbmQoby5zdGFydENvbW1hbmQpKTp0aGlzLmNvbW1hbmRzLnJlbW92ZUNvbW1hbmQoby5zdGFydENvbW1hbmQpfSx2YWx1ZTohMX0sZW5hYmxlTGl2ZUF1dG9jb21wbGV0aW9uOntzZXQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5jb21wbGV0ZXJzfHwodGhpcy5jb21wbGV0ZXJzPUFycmF5LmlzQXJyYXkoZSk/ZTpoKSx0aGlzLmNvbW1hbmRzLm9uKCJhZnRlckV4ZWMiLG0pKTp0aGlzLmNvbW1hbmRzLnJlbW92ZUxpc3RlbmVyKCJhZnRlckV4ZWMiLG0pfSx2YWx1ZTohMX0sZW5hYmxlU25pcHBldHM6e3NldDpmdW5jdGlvbihlKXtlPyh0aGlzLmNvbW1hbmRzLmFkZENvbW1hbmQoZCksdGhpcy5vbigiY2hhbmdlTW9kZSIsdSksdSgwLHRoaXMpKToodGhpcy5jb21tYW5kcy5yZW1vdmVDb21tYW5kKGQpLHRoaXMub2ZmKCJjaGFuZ2VNb2RlIix1KSl9LHZhbHVlOiExfX0pfSkpLGFjZS5hY2VxdWlyZShbImFjZS9leHQvbGFuZ3VhZ2VfdG9vbHMiXSwoZnVuY3Rpb24oKXt9KSl9fV0pOw==")))
if err != nil {
panic(err)
}
err = f.Close()
if err != nil {
panic(err)
}
}