TTO-CIsInIncident
6.0.0
TTO GmbH
http://tto.de
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Migrated to v6.x
Fixed AJAX error on dashboard auto-refresh.
Migration to standalone package
First public release
Widget that lists CIs in incident on the dashboard.
Widget das CIs im Vorfallsstatus auf dem Dashboard listet.
6.x
ITSM
2018-01-04 14:44:08
10.17.1.83
IyAtLQojIEFnZW50RGFzaGJvYXJkQ0lzSW5JbmNpZGVudC50dCAtIHByb3ZpZGVzIEhUTUwgZm9yIGdsb2JhbCBkYXNoYm9hcmQKIyBDb3B5cmlnaHQgKEMpIDIwMTcgVFRPIEdtYkgsIGh0dHA6Ly93d3cudHRvLmRlCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb250ZW50U21hbGxDSXNJbkluY2lkZW50RmlsdGVyUm93IikgJV0KPHVsIGNsYXNzPSJVc2VyRmlsdGVyIFRhYiBBY3Rpb25zIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGVudFNtYWxsQ0lzSW5JbmNpZGVudEZpbHRlckVudHJ5IikgJV0KICAgICA8bGkgY2xhc3M9IlslIERhdGEuQ1NTQ2xhc3MgfCBodG1sICVdIj48YSBocmVmPSIjIiBpZD0iRGFzaGJvYXJkWyUgRGF0YS5OYW1lIHwgaHRtbCAlXVslIERhdGEuQ0lOYW1lIHwgaHRtbCAlXSIgY2xhc3M9IlslIERhdGEuQ1NTQ2xhc3MgfCBodG1sICVdIj5bJSBEYXRhLkNJTmFtZSB8IFRyYW5zbGF0ZSB8IGh0bWwgJV0gKFslIERhdGEuQ291bnQgfCBodG1sICVdKTwvYT48L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQ29udGVudFNtYWxsQ0lzSW5JbmNpZGVudEZpbHRlckVudHJ5IikgJV0KPC91bD4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKClslIFJlbmRlckJsb2NrU3RhcnQoIkNvbnRlbnRTbWFsbENJc0luSW5jaWRlbnRGaWx0ZXJFbnRyeUpTIikgJV0KICAgICQoJyNEYXNoYm9hcmRbJSBEYXRhLk5hbWUgfCBodG1sICVdWyUgRGF0YS5DSU5hbWUgfCBodG1sICVdJykudW5iaW5kKCdjbGljaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICBDb3JlLkFKQVguQ29udGVudFVwZGF0ZSgkKCcjRGFzaGJvYXJkWyUgRGF0YS5OYW1lIHwgaHRtbCAlXScpLCAnWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUVsZW1lbnQ7TmFtZT1bJSBEYXRhLk5hbWUgfCBodG1sICVdO0ZpbHRlcj1bJSBEYXRhLkNJTmFtZSB8IGh0bWwgJV0nLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7ClslIFJlbmRlckJsb2NrRW5kKCJDb250ZW50U21hbGxDSXNJbkluY2lkZW50RmlsdGVyRW50cnlKUyIpICVdCi8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb250ZW50U21hbGxUaWNrZXRHZW5lcmljRmlsdGVyTmF2QmFyIikgJV0KPHNwYW4gY2xhc3M9IlBhZ2luYXRpb24iPgogICAgWyUgRGF0YS5TaXRlTmF2QmFyICVdCjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbnRlbnRTbWFsbFRpY2tldEdlbmVyaWNGaWx0ZXJOYXZCYXIiKSAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIkNvbnRlbnRTbWFsbENJc0luSW5jaWRlbnRGaWx0ZXJSb3ciKSAlXQo8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIkNvbnRlbnRTbWFsbENJSW5JbmNpZGVudFJvdyIpICVdCiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQ+CiAgICAgICAgCQk8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIiBzdHlsZT0iZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDttYXJnaW4tcmlnaHQ6MTBweDsiPgogICAgICAgIAkJICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkluY2lMRUQgJV0iPjwvc3Bhbj4KICAgIAkgICAgICAgIDwvZGl2PgogICAgICAgIAkJPGEgaHJlZj0iWyUgRGF0YS5MaW5rICVdIiA+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0gLSBbJSBEYXRhLkNJTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiQ29udGVudFNtYWxsQ0lJbkluY2lkZW50Um93IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGVudFNtYWxsQ0lzSW5JbmNpZGVudE5vbmUiKSAlXQogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJub25lIikgfCBodG1sICVdCiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbnRlbnRTbWFsbENJc0luSW5jaWRlbnROb25lIikgJV0KICAgIDwvdGJvZHk+CjwvdGFibGU+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb250ZW50U21hbGxDSXNJbkluY2lkZW50UmVmcmVzaCIpICVdClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCkNvcmUuQ29uZmlnLlNldCgnUmVmcmVzaFNlY29uZHNfWyUgRGF0YS5OYW1lSFRNTCB8IGh0bWwgJV0nLCBwYXJzZUludCgiWyUgRGF0YS5SZWZyZXNoVGltZSB8IGh0bWwgJV0iLCAxMCkgfHwgMCk7CmlmIChDb3JlLkNvbmZpZy5HZXQoJ1JlZnJlc2hTZWNvbmRzX1slIERhdGEuTmFtZUhUTUwgfCBodG1sICVdJykpIHsKICAgIENvcmUuQ29uZmlnLlNldCgnVGltZXJfWyUgRGF0YS5OYW1lSFRNTCB8IGh0bWwgJV0nLCB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKCiAgICAgICAgJCgnI0Rhc2hib2FyZFslIERhdGEuTmFtZSB8IGh0bWwgJV0tYm94JykuYWRkQ2xhc3MoJ0xvYWRpbmcnKTsKICAgICAgICBDb3JlLkFKQVguQ29udGVudFVwZGF0ZSgkKCcjRGFzaGJvYXJkWyUgRGF0YS5OYW1lIHwgaHRtbCAlXScpLCAnWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUVsZW1lbnQ7TmFtZT1bJSBEYXRhLk5hbWUgfCBodG1sICVdJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCcjRGFzaGJvYXJkWyUgRGF0YS5OYW1lIHwgaHRtbCAlXS1ib3gnKS5yZW1vdmVDbGFzcygnTG9hZGluZycpOwogICAgICAgIH0pOwogICAgICAgIGNsZWFyVGltZW91dChDb3JlLkNvbmZpZy5HZXQoJ1RpbWVyX1slIERhdGEuTmFtZUhUTUwgfCBodG1sICVdJykpOwogICAgfSwgQ29yZS5Db25maWcuR2V0KCdSZWZyZXNoU2Vjb25kc19bJSBEYXRhLk5hbWVIVE1MIHwgaHRtbCAlXScpICogMTAwMCkpOwp9Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiQ29udGVudFNtYWxsQ0lzSW5JbmNpZGVudFJlZnJlc2giKSAlXQo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9EYXNoYm9hcmQvQ0lzSW5JbmNpZGVudC5wbQojIENvcHlyaWdodCAoQykgVFRPIDIwMTYtMjAxOCwgd3d3LnR0by5kZQojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OkNJc0luSW5jaWRlbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJFNlc3Npb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKTsKCiAgICAjIGdldCBjdXJyZW50IGZpbHRlcgogICAgbXkgJE5hbWUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTmFtZScgKSB8fCAnJzsKICAgIG15ICRQcmVmZXJlbmNlc0tleSA9ICdVc2VyRGFzaGJvYXJkQ0lzSW5JbmNpZGVudEZpbHRlcicgLiAkU2VsZi0+e05hbWV9OwogICAgaWYgKCAkU2VsZi0+e05hbWV9IGVxICROYW1lICkgewogICAgICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJyc7CiAgICB9CgogICAgIyByZW1lbWJlciBmaWx0ZXIKICAgIGlmICggJFNlbGYtPntGaWx0ZXJ9ICkgewoKICAgICAgICAjIHVwZGF0ZSBzZXNzaW9uCiAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICRQcmVmZXJlbmNlc0tleSwKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICApOwoKICAgIH0KCiAgICBpZiAoICEkU2VsZi0+e0ZpbHRlcn0gKSB7CiAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJFNlbGYtPnskUHJlZmVyZW5jZXNLZXl9IHx8ICdBbGwnOwogICAgfQoKICAgICRTZWxmLT57UHJlZktleX0gPSAnVXNlckRhc2hib2FyZFByZWYnIC4gJFNlbGYtPntOYW1lfSAuICctU2hvd24nOwoKICAgICRTZWxmLT57UGFnZVNob3dufSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+eyAkU2VsZi0+e1ByZWZLZXl9IH0gCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57TGltaXR9IHx8IDEwOwoKICAgICRTZWxmLT57U3RhcnRIaXR9ID0gaW50KCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwoKICAgICRTZWxmLT57Q2FjaGVLZXl9ID0gJFNlbGYtPntOYW1lfSAuICc6OicgLiAkU2VsZi0+e0ZpbHRlcn07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUHJlZmVyZW5jZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAUGFyYW1zID0gKAogICAgICAgIHsKICAgICAgICAgICAgRGVzYyAgPT4gVHJhbnNsYXRhYmxlKCdTaG93bicpLAogICAgICAgICAgICBOYW1lICA9PiAkU2VsZi0+e1ByZWZLZXl9LAogICAgICAgICAgICBCbG9jayA9PiAnT3B0aW9uJywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgNSAgPT4gJyA1JywKICAgICAgICAgICAgICAgIDEwID0+ICcxMCcsCiAgICAgICAgICAgICAgICAxNSA9PiAnMTUnLAogICAgICAgICAgICAgICAgMjAgPT4gJzIwJywKICAgICAgICAgICAgICAgIDI1ID0+ICcyNScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRTZWxmLT57UGFnZVNob3dufSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQFBhcmFtczsKfQoKc3ViIENvbmZpZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAoCiAgICAgICAgJXsgJFNlbGYtPntDb25maWd9IH0sCgogICAgICAgICMgcmVtZW1iZXIsIGRvIG5vdCBhbGxvdyB0byB1c2UgcGFnZSBjYWNoZQogICAgICAgICMgKGl0J3Mgbm90IHdvcmtpbmcgYmVjYXVzZSBvZiBpbnRlcm5hbCBmaWx0ZXIpCiAgICAgICAgQ2FjaGVLZXkgPT4gdW5kZWYsCiAgICAgICAgQ2FjaGVUVEwgPT4gdW5kZWYsCiAgICApOwp9CgpzdWIgX1hNTF9Mb29rdXAgewogICAgbXkgKCRYTUxEYXRhLCAkV2hhdCkgPSBAXzsKICAgIGZvcmVhY2ggbXkgJEtleSAoIGtleXMgJXsgJFhNTERhdGEgfSApIHsKICAgICAgICBpZiAoICRLZXkgZXEgJFdoYXQgKSB7CiAgICAgICAgICAgIHJldHVybiAkWE1MRGF0YS0+eyAkS2V5IH0tPlsxXS0+e0NvbnRlbnR9OwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIHJlZiAoJFhNTERhdGEtPnsgJEtleSB9KSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBteSAkUmVzdWx0ID0gX1hNTF9Mb29rdXAgKCAkWE1MRGF0YS0+eyAkS2V5IH0tPlsxXSwgJFdoYXQpOwogICAgICAgICAgICBpZiAoICRSZXN1bHQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgQ3JlYXRlIERhdGEgT2JqZWN0OgogICAgbXkgJEluY2lkZW50cyA9IHt9OwogICAgbXkgJEluY2lMb29rdXAgPSB7CiAgICAgICAgMSA9PiAnZ3JlZW5sZWQnLCAjIFNob3VsZCBuZXZlciBiZSB2aXNpYmxlCiAgICAgICAgMiA9PiAieWVsbG93bGVkIiwKICAgICAgICAzID0+ICJyZWRsZWQiLAogICAgfTsKCiAgICAjIFdlIHdhbnQgdG8gZ2V0IGEgbGlzdCBwZXIgZmlsdGVyLgogICAgIyBGaXJzdCB3ZSBnZXQgdGhlIElEcyBvZiBhbGwgY29uZmlndXJlZCBmaWx0ZXIKICAgICMgVGhlbiB3ZSBnZXQgYSBsaXN0IHBlciBjb25maWd1cmVkIGZpbHRlcgogICAgIyBUaGVuIHdlIGdldCBhIGxpc3Qgb2YgYWxsIGNsYXNzIGlkcyBhbmQgcmVtb3ZlIHRob3NlIHdlIGFscmVhZHkgd29ya2VkIG9uCiAgICAjIENyZWF0ZSBhIGxpc3Qgb2YgdGhlICJyZXN0IgoKICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwogICAgIyAkQ2xhc3NMaXN0IHdpbGwgYmUgbGF0ZXIgcmVkdWNlZCB0byBob2xkIGFsbCBDSXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkKICAgICMgY29uZmlndXJlZC4gV2Ugd2FudCB0byBoYXZlIGEgbG9va3VwIGZvciBJRCA8LT4gTmFtZSwgdGh1cyBoZXJlIGlzIGEgY29weQogICAgbXkgJENsYXNzTG9va3VwID0geyAlJENsYXNzTGlzdCB9OwoKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Rhc2hib2FyZEJhY2tlbmQnKTsKICAgIG15ICRGaWx0ZXIgPSAkQ29uZmlnLT57JzE1NTAtQ0lzSW5JbmNpZGVudCd9LT57RmlsdGVyfTsKCiAgICBmb3JlYWNoIG15ICRDdXJyRmlsdGVyICggc29ydCBrZXlzICV7ICRGaWx0ZXIgfSApIHsKICAgICAgICBmb3JlYWNoIG15ICRDdXJyQ2xhc3NJRCAoa2V5cyAleyAkQ2xhc3NMaXN0IH0gKSB7CiAgICAgICAgICAgIGlmICgkQ2xhc3NMaXN0LT57JEN1cnJDbGFzc0lEfSBlcSAkQ3VyckZpbHRlcikgewogICAgICAgICAgICAgICAgJEluY2lkZW50cy0+eyRDdXJyRmlsdGVyfSA9IHsKICAgICAgICAJCSAgICBDbGFzc0lEcyA9PiBbICRDdXJyQ2xhc3NJRCBdLAogICAgICAgIAkJICAgIENvdW50ID0+IDAsCiAgICAgICAgCQkgICAgRGF0YSA9PiBbXSwKICAgICAgICAJCX07CiAJCSAgICAgICAgZGVsZXRlICRDbGFzc0xpc3QtPnskQ3VyckNsYXNzSUR9OwogICAgICAgIAkJbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkSW5jaWRlbnRzLT57IkFsbCJ9ID0gewogICAgICAgIENsYXNzSURzID0+IFsgc29ydCBrZXlzICV7ICRDbGFzc0xpc3QgfSBdLAogICAgICAgIENvdW50ID0+IDAsCiAgICAgICAgRGF0YSA9PiBbXSwKICAgIH07CgogICAgIyBHZXQgdGhlIEluY2lTdGF0ZUlEIG9mIFN0YXRlICJJbmNpZGVudCIgYW5kICJXYXJuaW5nIgogICAgbXkgJENNREJJbmNpZGVudFN0YXRlTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICApOwoKICAgIG15IEBJbmNpZGVudElEczsKICAgIGZvcmVhY2ggbXkgJENsYXNzSXRlbUlEIChrZXlzICV7ICRDTURCSW5jaWRlbnRTdGF0ZUxpc3QgfSApIHsKICAgICAgICBpZiAoJENNREJJbmNpZGVudFN0YXRlTGlzdC0+eyRDbGFzc0l0ZW1JRH0gbmUgJ09wZXJhdGlvbmFsJyl7CiAgICAgICAgICAgIHB1c2ggQEluY2lkZW50SURzLCAkQ2xhc3NJdGVtSUQ7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IHRoZSBEZXBsb3ltZW50IHN0YXRlIElEcyBvZiBhbGwgc3RhdGVzIHRoYXQgYXJlIG5laXRoZXI6CiAgICAjIGluYWN0aXZlLCByZXRpcmVkCiAgICBteSAkQ01EQkRlcGxveW1lbnRTdGF0ZUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNPTkZJR0lURU06OkRFUExPWU1FTlRTVEFURScsCiAgICApOwogICAgbXkgQERlcGxveW1lbnRJRHM7CiAgICBmb3JlYWNoIG15ICRDbGFzc0l0ZW1JRCAoa2V5cyAleyAkQ01EQkRlcGxveW1lbnRTdGF0ZUxpc3QgfSkgewogICAgICAgIGlmICgkQ01EQkRlcGxveW1lbnRTdGF0ZUxpc3QtPnskQ2xhc3NJdGVtSUR9IG5lICdJbmFjdGl2ZScgCiAgICAgICAgICYmICRDTURCRGVwbG95bWVudFN0YXRlTGlzdC0+eyRDbGFzc0l0ZW1JRH0gbmUgJ1JldGlyZWQnICl7CiAgICAgICAgICAgIHB1c2ggQERlcGxveW1lbnRJRHMsICRDbGFzc0l0ZW1JRDsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgYWxsIENJLUlEcyBpbiBJbmNpZGVudDoKICAgIGZvcmVhY2ggbXkgJEN1cnJlbnRGaWx0ZXIgKGtleXMgJXsgJEluY2lkZW50cyB9ICkgewogICAgICAgIG15ICRDSUlEcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtU2VhcmNoKAogICAgICAgICAgICBDbGFzc0lEcyAgICAgPT4gJEluY2lkZW50cy0+eyAkQ3VycmVudEZpbHRlciB9LT57Q2xhc3NJRHN9LAogICAgICAgICAgICBJbmNpU3RhdGVJRHMgPT4gXEBJbmNpZGVudElEcywKICAgICAgICAgICAgRGVwbFN0YXRlSURzID0+IFxARGVwbG95bWVudElEcywKICAgICAgICApOwoKCiAgICAgICAgIyBDcmVhdGUgb25lIGVudHJ5IHBlciBmb3VuZCBDSQogICAgICAgIENPTkZJR0lURU06CiAgICAgICAgZm9yZWFjaCBteSAkQ29uZmlnSXRlbUlEICggQHsgJENJSURzIH0pIHsKICAgICAgICAgICAgIyBnZXQgQ0kgZGF0YQogICAgICAgICAgICBteSAkRGF0YSA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBleHRlbmRlZCBkYXRhIGZvciB0aGUgQ0kgTmFtZToKICAgICAgICAgICAgbXkgJFZlcnNpb24gPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkdldCgKICAgICAgICAgICAgICAgIFZlcnNpb25JRCAgPT4gJERhdGEtPntMYXN0VmVyc2lvbklEfSwKICAgICAgICAgICAgICAgIFhNTERhdGFHZXQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgCiAgICAgICAgICAgICMgR2V0IGNvbG9yIGZvciB0aGUgTEVECiAgICAgICAgICAgICREYXRhLT57SW5jaUxFRH0gPSAkSW5jaUxvb2t1cC0+eyAkVmVyc2lvbi0+e0N1ckluY2lTdGF0ZUlEfSB9OwogICAgCiAgICAgICAgICAgICMgQWRkIE5hbWUgdG8gRGF0YQogICAgICAgICAgICAkRGF0YS0+e0NJTmFtZX0gPSAkVmVyc2lvbi0+e05hbWV9OwoKICAgICAgICAgICAgIyBDbGFzc0lEIGlzIGFsd2F5cyBnaXZlbiwgYnV0IG5vdCBzbyB0aGUgY2xhc3MuIE1ha2Ugc3VyZSBpdCBpcyBzZXQ6CiAgICAgICAgICAgICREYXRhLT57Q2xhc3N9ID0gJENsYXNzTG9va3VwLT57ICREYXRhLT57Q2xhc3NJRH0gfTsKICAgIAogICAgICAgICAgICAjIEFkZCBMaW5rIHRvIERhdGEKICAgICAgICAgICAgJERhdGEtPntMaW5rfSA9ICJpbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPSIgLiAkQ29uZmlnSXRlbUlEOwoKICAgICAgICAgICAgIyBUcnkgdG8gZmluZCB0aGUgY29uZmlndXJlZCBhdHRyaWJ1dGUgaW4gdGhpcyBoYXNoCiAgICAgICAgICAgIG15ICRBdHRyaWJ1dGUgPSAkRmlsdGVyLT57JEN1cnJlbnRGaWx0ZXJ9OwogICAgICAgICAgIAogICAgICAgICAgICBpZiAoJEF0dHJpYnV0ZSkgewogICAgICAgICAgICAgICAgIyBBcGVuZCBjdXN0b20gYXR0cmlidXRlIHRvIG5hbWUgaWYgY29uZmlndXJlZAogICAgICAgICAgICAgICAgbXkgJFZlcnNpb25EYXRhID0gJFZlcnNpb24tPntYTUxEYXRhfS0+WzFdLT57VmVyc2lvbn0tPlsxXTsKCQkgICAgICAgIG15ICRSZXN1bHQgPSBfWE1MX0xvb2t1cCgkVmVyc2lvbkRhdGEsICRBdHRyaWJ1dGUpIHx8ICIiOwogICAgICAgIAkJJERhdGEtPntDSU5hbWV9IC49ICIgLSAiIC4gJFJlc3VsdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI3JlbWVtYmVyIGRhdGEgYW5kIGNvdW50CiAgICAgICAgICAgIHB1c2ggQHsgJEluY2lkZW50cy0+eyRDdXJyZW50RmlsdGVyfS0+e0RhdGF9IH0sICREYXRhOwogICAgICAgICAgICAkSW5jaWRlbnRzLT57JEN1cnJlbnRGaWx0ZXJ9LT57Q291bnR9Kys7CiAgICAgICAgfQogICAgfQoKICAgICMgZmlsdGVyIGJhcgoKICAgICMgYWRkIHBhZ2UgbmF2IGJhcgogICAgbXkgJFRvdGFsICAgID0gJEluY2lkZW50cy0+eyAkU2VsZi0+e0ZpbHRlcn0gfS0+e0NvdW50fSB8fCAwOwogICAgbXkgJExpbmtQYWdlID0gJ1N1YmFjdGlvbj1FbGVtZW50O05hbWU9JyAuICRTZWxmLT57TmFtZX0gLiAnO0ZpbHRlcj0nIC4gJFNlbGYtPntGaWx0ZXJ9IC4gJzsnOwogICAgbXkgJVBhZ2VOYXYgID0gJExheW91dE9iamVjdC0+UGFnZU5hdkJhcigKICAgICAgICBTdGFydEhpdCAgICAgICA9PiAkU2VsZi0+e1N0YXJ0SGl0fSwKICAgICAgICBQYWdlU2hvd24gICAgICA9PiAkU2VsZi0+e1BhZ2VTaG93bn0sCiAgICAgICAgQWxsSGl0cyAgICAgICAgPT4gJFRvdGFsIHx8IDEsCiAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJ0FjdGlvbj0nIC4gJExheW91dE9iamVjdC0+e0FjdGlvbn0sCiAgICAgICAgTGluayAgICAgICAgICAgPT4gJExpbmtQYWdlLAogICAgICAgIFdpbmRvd1NpemUgICAgID0+IDUsCiAgICAgICAgQUpBWFJlcGxhY2UgICAgPT4gJ0Rhc2hib2FyZCcgLiAkU2VsZi0+e05hbWV9LAogICAgICAgIElEUHJlZml4ICAgICAgID0+ICdEYXNoYm9hcmQnIC4gJFNlbGYtPntOYW1lfSwKICAgICAgICBLZWVwU2NyaXB0VGFncyA9PiAkUGFyYW17QUpBWH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NvbnRlbnRTbWFsbENJc0luSW5jaWRlbnRGaWx0ZXJSb3cnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAleyAkU2VsZi0+e0NvbmZpZ30gfSwKICAgICAgICAgICAgTmFtZSA9PiAkU2VsZi0+e05hbWV9LAogICAgICAgIH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NvbnRlbnRTbWFsbFRpY2tldEdlbmVyaWNGaWx0ZXJOYXZCYXInLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAleyAkU2VsZi0+e0NvbmZpZ30gfSwKICAgICAgICAgICAgTmFtZSA9PiAkU2VsZi0+e05hbWV9LAogICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICB9LAogICAgKTsKCiAgICAjIE9uZSBmaWx0ZXIgcGVyIGVudHJ5IGluIEluY2lkZW50cwogICAgZm9yZWFjaCBteSAkQ3VycmVudEZpbHRlciAoc29ydCBrZXlzICV7ICRJbmNpZGVudHMgfSkgewogICAgICAgIG15ICRDU1NDbGFzcyA9ICIiOwogICAgICAgIGlmICggJFNlbGYtPntGaWx0ZXJ9IGVxICRDdXJyZW50RmlsdGVyKSB7CgkgICAgJENTU0NsYXNzID0gIlNlbGVjdGVkIjsKICAgICAgICB9CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0NvbnRlbnRTbWFsbENJc0luSW5jaWRlbnRGaWx0ZXJFbnRyeScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiAkU2VsZi0+e05hbWV9LCAjIG5lZWRlZCBmb3IgQUpBWAogICAgICAgICAgICAgICAgQ0lOYW1lID0+ICRDdXJyZW50RmlsdGVyLAogICAgICAgICAgICAgICAgQ291bnQgPT4gJEluY2lkZW50cy0+eyRDdXJyZW50RmlsdGVyfS0+e0NvdW50fSwKICAgICAgICAgICAgICAgIENTU0NsYXNzID0+ICRDU1NDbGFzcywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDb250ZW50U21hbGxDSXNJbkluY2lkZW50RmlsdGVyRW50cnlKUycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiAkU2VsZi0+e05hbWV9LCAjIG5lZWRlZCBmb3IgQUpBWAogICAgICAgICAgICAgICAgQ0lOYW1lID0+ICRDdXJyZW50RmlsdGVyLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBUaGVuIG9uZSBibG9jayBwZXIgQ0kKICAgIG15ICRDb3VudCA9IDA7CiAgICBDSToKICAgIGZvciBteSAkQ3VycmVudENJICggQHsgJEluY2lkZW50cy0+eyAkU2VsZi0+e0ZpbHRlcn0gfS0+e0RhdGF9IH0gKSB7CgogICAgICAgICRDb3VudCArKzsKICAgICAgICAKICAgICAgICBuZXh0IENJIGlmICEkQ3VycmVudENJOwogICAgICAgIG5leHQgQ0kgaWYgJENvdW50IDwgJFNlbGYtPntTdGFydEhpdH07CiAgICAgICAgbGFzdCBDSSBpZiAkQ291bnQgPj0gKCAkU2VsZi0+e1N0YXJ0SGl0fSArICRTZWxmLT57UGFnZVNob3dufSApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ29udGVudFNtYWxsQ0lJbkluY2lkZW50Um93JywKICAgICAgICAgICAgRGF0YSA9PiAkQ3VycmVudENJLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCBzY2FsYXIgQHsgJEluY2lkZW50cy0+eyAkU2VsZi0+e0ZpbHRlcn0gfS0+e0RhdGF9IH0gZXEgMCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ29udGVudFNtYWxsQ0lzSW5JbmNpZGVudE5vbmUnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgcmVmcmVzaCB0aW1lCiAgICBteSAkUmVmcmVzaCA9ICcnOwogICAgaWYgKCAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gKSB7CiAgICAgICAgJFJlZnJlc2ggPSA2MCAqICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfTsKICAgICAgICBteSAkTmFtZUhUTUwgPSAkU2VsZi0+e05hbWV9OwogICAgICAgICROYW1lSFRNTCA9fiBzey19e199eG1zZzsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ29udGVudFNtYWxsQ0lzSW5JbmNpZGVudFJlZnJlc2gnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlbGYtPntOYW1lfSwKICAgICAgICAgICAgICAgIE5hbWVIVE1MICAgID0+ICROYW1lSFRNTCwKICAgICAgICAgICAgICAgIFJlZnJlc2hUaW1lID0+ICRSZWZyZXNoLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudERhc2hib2FyZENJc0luSW5jaWRlbnQnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAogICAgICAgICAgICBOYW1lID0+ICRTZWxmLT57TmFtZX0sCiAgICAgICAgfSwKICAgICAgICBLZWVwU2NyaXB0VGFncyA9PiAkUGFyYW17QUpBWH0sCiAgICApOwoKICAgIHJldHVybiAkQ29udGVudDsKfQoKCjE7Cg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJEYXNoYm9hcmRCYWNrZW5kIyMjMTU1MC1DSXNJbkluY2lkZW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlZ2lzdGVycyBhIHdpZGdldCBpbiB0aGUgZGFzaGJvYXJkIHRoYXQgbGlzdHMgYWxsIENJcyB0aGF0IGFyZSBpbiB0aGUgaW5jaWRlbnQgc3RhdGUgKGFuZCBub3Qgb3V0LW9mLW9yZGVyKS4gSW4gdGhlIGZpbHRlciBhcnJheSBvbmUgY2FuIGRlZmluZSBjbGFzc2VzIHRoYXQgYSBsaXN0ZWQgaW4gaXQncyBvd24gdGFiLiBUaGUga2V5IGRlZmluZXMgYW4gYWRkaXRpb25hbCBhdHRyaWJ1dGUgeW91IHdhbnQgdG8gc2hvdy4gSWYgdGhhdCBhdHRyaWJ1dGUgaXMgaW4gYSBzdWJncm91cCwgdXNlIHRoaXMgc3ludGF4OiAiUGFyZW50R3JvdXA6OkF0dHJpYnV0ZSIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkRhc2hib2FyZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OkNJc0luSW5jaWRlbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5DSXMgaW4gSW5jaWRlbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IklkbGVNaW51dGVzIj42MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkNvbnRlbnRTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGltaXQiPjEwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYWNoZVRUTExvY2FsIj41PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGaWx0ZXIiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbXB1dGVyIj5GUUROPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFuZGF0b3J5Ij4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdHJzX2NvbmZpZz4K