ITSMCore
0.1.5
OTRS GmbH
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Code cleanup.
Fixed db insert creations.
Fixed db insert creations.
Code cleanup.
Init release.
The OTRS::ITSM core package.
Das OTRS::ITSM Core Paket.
2.2.x
GeneralCatalog
2007-03-22 14:38:57
opms.otrs.com
IyAtLQojIENIQU5HRVMuSVRTTUNvcmUgLSBjaGFuZ2UgbG9nIG9mIElUU01Db3JlIHBhY2thZ2UKIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRJZDogQ0hBTkdFUy5JVFNNQ29yZSx2IDEuMSAyMDA3LzAzLzA3IDE0OjM0OjA0IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKMC45LjEgQkVUQTEgKDIwMDcvPz8vPz8pCiAtICgyMDA3Lz8/Lz8/KSBmaXJzdCBiZXRhIHJlbGVhc2UKCkVPRgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQ29uZmlnIj4KICAgIDxDVlM+JElkOiBJVFNNQ29yZS54bWwsdiAxLjQgMjAwNy8wMy8yMCAxMTo0OTo0MiBtaCBFeHAgJDwvQ1ZTPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluVGlja2V0UHJpb3JpdHkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5UaWNrZXRQcmlvcml0eSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5Gcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXIgQWRtaW5UaWNrZXRQcmlvcml0eSBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5Qcmlvcml0eTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5Qcmlvcml0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+QmxvY2szPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MjA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+RnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVyIEFkbWluSVRTTUNJUEFsbG9jYXRlIEtvbmZpZ3VyYXRpb24gaW0gQWRtaW4tQmVyZWljaC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5Dcml0aWNhbGl0eSAmbHQ7LSZndDsgSW1wYWN0ICZsdDstJmd0OyBQcmlvcml0eTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5Dcml0aWNhbGl0eSAmbHQ7LSZndDsgSW1wYWN0ICZsdDstJmd0OyBQcmlvcml0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+QmxvY2szPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MzA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxDVlM+JElkOiBGcmFtZXdvcmtJVFNNQ29yZS54bWwsdiAxLjEgMjAwNy8wMy8yMCAxNjoxMTowNCBtaCBFeHAgJDwvQ1ZTPgogICAgPENWUz4kSWQ6IEZyYW1ld29ya0lUU01Db3JlLnhtbCx2IDEuMSAyMDA3LzAzLzIwIDE2OjExOjA0IG1oIEV4cCAkPC9DVlM+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcm9kdWN0TmFtZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IGlzIHNob3duIGluIHRoZSBmcm9udGVuZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+SW0gV2ViRnJvbnRlbmQgYW5nZXplaWd0ZXIgTmFtZSBkZXIgU29mdHdhcmUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+T1RSUzo6SVRTTTwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9JVFNNQ29yZS5wbSAtIHRoZSBnZXJtYW4gdHJhbnNsYXRpb24gb2YgSVRTTUNvcmUKIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRJZDogZGVfSVRTTUNvcmUucG0sdiAxLjMgMjAwNy8wMy8yMCAxMTo0OTo0MiBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIEFkbWluVGlja2V0UHJpb3JpdHkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IE1hbmFnZW1lbnQnfSA9ICdQcmlvcml05HQgVmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IHByaW9yaXR5IGZhaWxlZCEgU2VlIFN5c3RlbSBMb2cgZm9yIGRldGFpbHMuJ30gPSAnSGluenVm/GdlbiBkZXIgbmV1ZW4gUHJpb3JpdOR0IGZlaGxnZXNjaGxhZ2VuISBJbSBTeXN0ZW0gTG9nIGZpbmRlbiBTaWUgd2VpdGVyZSBJbmZvcm1hdGlvbmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVcGRhdGUgcHJpb3JpdHkgZmFpbGQhIFNlZSBTeXN0ZW0gTG9nIGZvciBkZXRhaWxzLid9ID0gJ1VwZGF0ZW4gZGVyIFByaW9yaXR5IGZlaGxnZXNjaGxhZ2VuISBJbSBTeXN0ZW0gTG9nIGZpbmRlbiBTaWUgd2VpdGVyZSBJbmZvcm1hdGlvbmVuLic7CgogICAgIyBBZG1pbkNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsaXTkdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdBdXN3aXJrdW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnS3JpdGlrYWxpdOR0IDwtPiBBdXN3aXJrdW5nIDwtPiBQcmlvcml05HQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgQWxsb2NhdGlvbid9ID0gJ1ByaW9yaXTkdHN6dXdlaXN1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGUnfSA9ICd6dW9yZG5lbic7Cn0KCjE7
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWRtaW4gZnJvbnRlbmQgb2YgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRJZDogQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0sdiAxLjEgMjAwNy8wMy8yMCAxMTo1MDowOCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01DSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9ICckUmV2aXNpb246IDEuMSAkJzsKJFZFUlNJT04gPX4gcy9eXCQuKjpcVyguKilcVy4rPyQvJDEvOwoKc3ViIG5ldyB7CiAgICBteSAkVHlwZSA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MgKCRTZWxmLCAkVHlwZSk7CgogICAgIyBnZXQgY29tbW9uIG9wamVjdHMKICAgIGZvcmVhY2ggKGtleXMgJVBhcmFtKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99OwogICAgfQoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3JlYWNoIChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgTG9nT2JqZWN0IExheW91dE9iamVjdCkpIHsKICAgICAgICBpZiAoISRTZWxmLT57JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcihNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIik7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntQcmlvcml0eU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDSVBBbGxvY2F0ZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ0lQQWxsb2NhdGUnKSB7CiAgICAgICAgIyBnZXQgb3B0aW9uIGxpc3RzCiAgICAgICAgbXkgJU9iamVjdE9wdGlvbjsKICAgICAgICAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH0gPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpDcml0aWNhbGl0eScsCiAgICAgICAgKTsKICAgICAgICAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW1wYWN0JywKICAgICAgICApOwogICAgICAgIG15ICVPcHRpb25Qcmlvcml0eUxpc3QgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlMaXN0KFVzZXJJRCA9PiAxKTsKICAgICAgICAkT2JqZWN0T3B0aW9ue1ByaW9yaXR5TGlzdH0gPSBcJU9wdGlvblByaW9yaXR5TGlzdDsKCiAgICAgICAgIyBnZXQgYWxsIFByaW9yaXR5SURzIG9mIHRoZSBtYXRyaXgKICAgICAgICBteSAkQWxsb2NhdGVEYXRhOwogICAgICAgIGZvcmVhY2ggbXkgJEltcGFjdElEIChzb3J0IGtleXMgJXskT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9fSkgewogICAgICAgICAgICBmb3JlYWNoIG15ICRDcml0aWNhbGl0eUlEIChzb3J0IGtleXMgJXskT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH19KSB7CiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAiUHJpb3JpdHlJRCIgLiAkSW1wYWN0SUQgLictJy4gJENyaXRpY2FsaXR5SUQsCiAgICAgICAgICAgICAgICApIHx8ICcnOwoKICAgICAgICAgICAgICAgIGlmICgkUHJpb3JpdHlJRCkgewogICAgICAgICAgICAgICAgICAgICRBbGxvY2F0ZURhdGEtPnskSW1wYWN0SUR9LT57JENyaXRpY2FsaXR5SUR9ID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgIyB1cGRhdGUgYWxsb2NhdGlvbnMKICAgICAgICAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fS0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259Iik7CiAgICB9CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2V0IG9wdGlvbiBsaXN0cwogICAgICAgIG15ICVPYmplY3RPcHRpb247CiAgICAgICAgJE9iamVjdE9wdGlvbntDcml0aWNhbGl0eUxpc3R9ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6Q3JpdGljYWxpdHknLAogICAgICAgICk7CiAgICAgICAgJE9iamVjdE9wdGlvbntJbXBhY3RMaXN0fSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkltcGFjdCcsCiAgICAgICAgKTsKICAgICAgICBteSAlT3B0aW9uUHJpb3JpdHlMaXN0ID0gJFNlbGYtPntQcmlvcml0eU9iamVjdH0tPlByaW9yaXR5TGlzdChVc2VySUQgPT4gMSk7CiAgICAgICAgJE9iamVjdE9wdGlvbntQcmlvcml0eUxpc3R9ID0gXCVPcHRpb25Qcmlvcml0eUxpc3Q7CgogICAgICAgICMgZ2V0IGFsbG9jYXRpb24gZGF0YQogICAgICAgIG15ICRBbGxvY2F0ZURhdGEgPSAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fS0+QWxsb2NhdGVMaXN0KFVzZXJJRCA9PiAxKTsKCiAgICAgICAgbXkgJEFsbG9jYXRlTWF0cml4OwogICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bMF0tPntDbGFzc30gPSAnRGVzY3JpcHRpb24nOwogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKEltcGFjdCkKICAgICAgICBteSAkQ291bnRlcjEgPSAxOwogICAgICAgIGZvcmVhY2ggKHNvcnQgeyRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0tPnskYX0gY21wICRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0tPnskYn19IGtleXMgJXskT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9fSkgewogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RUeXBlfSA9ICdJbXBhY3QnOwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntJbXBhY3RLZXl9ID0gJF87CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRDb3VudGVyMV0tPlswXS0+e09iamVjdE9wdGlvbn0gPSAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9eyRffTsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57Q2xhc3N9ID0gJ0Rlc2NyaXB0aW9uJzsKICAgICAgICAgICAgJENvdW50ZXIxKys7CiAgICAgICAgfQogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKENyaXRpY2FsaXR5KQogICAgICAgIG15ICRDb3VudGVyMiA9IDE7CiAgICAgICAgZm9yZWFjaCAoc29ydCB7JE9iamVjdE9wdGlvbntDcml0aWNhbGl0eUxpc3R9LT57JGF9IGNtcCAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH0tPnskYn19IGtleXMgJXskT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH19KSB7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdFR5cGV9ID0gJ0NyaXRpY2FsaXR5JzsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57Q3JpdGljYWxpdHlLZXl9ID0gJF87CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdE9wdGlvbn0gPSAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH17JF99OwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb3VudGVyMl0tPntDbGFzc30gPSAnRGVzY3JpcHRpb24nOwogICAgICAgICAgICAkQ291bnRlcjIrKzsKICAgICAgICB9CiAgICAgICAgIyBnZW5lcmF0ZSBjb250ZW50CiAgICAgICAgZm9yZWFjaCBteSAkUm93ICgxLi4oJENvdW50ZXIxLTEpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJENvbHVtbiAoMS4uKCRDb3VudGVyMi0xKSkgewogICAgICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXS0+e0NsYXNzfSA9ICdDb250ZW50JzsKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3B0aW9uU3RyZ0hhc2hSZWYoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJpb3JpdHlJRCcuCiAgICAgICAgICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bMF0tPntJbXBhY3RLZXl9LictJy4KICAgICAgICAgICAgICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ29sdW1uXS0+e0NyaXRpY2FsaXR5S2V5fSwKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRPYmplY3RPcHRpb257UHJpb3JpdHlMaXN0fSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRBbGxvY2F0ZURhdGEtPnskQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WzBdLT57SW1wYWN0S2V5fX17JEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ29sdW1uXS0+e0NyaXRpY2FsaXR5S2V5fX0gfHwgJycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgb3V0cHV0IGFsbG9jYXRpb24gbWF0cml4CiAgICAgICAgZm9yZWFjaCBteSAkUm93UmVmIChAeyRBbGxvY2F0ZU1hdHJpeH0pIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NJUEFsbG9jYXRlUm93JywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yZWFjaCBteSAkQ2VsbCAoQHskUm93UmVmfSkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDSVBBbGxvY2F0ZVJvd0NvbHVtbicuICRDZWxsLT57Q2xhc3N9LAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJENlbGwsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01DSVBBbGxvY2F0ZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKMTs=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluVGlja2V0UHJpb3JpdHkucG0gLSBhZG1pbiBmcm9udGVuZCBvZiB0aWNrZXQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRJZDogQWRtaW5UaWNrZXRQcmlvcml0eS5wbSx2IDEuMiAyMDA3LzAzLzIwIDExOjUwOjM2IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluVGlja2V0UHJpb3JpdHk7Cgp1c2Ugc3RyaWN0Owp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwp1c2UgS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5OwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9ICckUmV2aXNpb246IDEuMiAkJzsKJFZFUlNJT04gPX4gcy9eXCQuKjpcVyguKilcVy4rPyQvJDEvOwoKc3ViIG5ldyB7CiAgICBteSAkVHlwZSA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MgKCRTZWxmLCAkVHlwZSk7CgogICAgIyBnZXQgY29tbW9uIG9wamVjdHMKICAgIGZvcmVhY2ggKGtleXMgJVBhcmFtKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99OwogICAgfQoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3JlYWNoIChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgTG9nT2JqZWN0IExheW91dE9iamVjdCkpIHsKICAgICAgICBpZiAoISRTZWxmLT57JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcihNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIik7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntQcmlvcml0eU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHktPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwcmlvcml0eSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdQcmlvcml0eUVkaXQnKSB7CiAgICAgICAgbXkgJVByaW9yaXR5RGF0YTsKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICAkUHJpb3JpdHlEYXRhe1ByaW9yaXR5SUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJQcmlvcml0eUlEIik7CiAgICAgICAgaWYgKCRQcmlvcml0eURhdGF7UHJpb3JpdHlJRH0gZXEgJ05FVycpIHsKICAgICAgICAgICAgJFByaW9yaXR5RGF0YXtOYW1lfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAiTmFtZSIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJVByaW9yaXR5RGF0YSA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eUdldCgKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5RGF0YXtQcmlvcml0eUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQcmlvcml0eURhdGF7UHJpb3JpdHlJRH0gPSAkUHJpb3JpdHlEYXRhe0lEfTsKICAgICAgICB9CiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgIyBnZW5lcmF0ZSBWYWxpZE9wdGlvblN0cmcKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwogICAgICAgICRQcmlvcml0eURhdGF7VmFsaWRPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgICAgIE5hbWUgPT4gJ1ZhbGlkSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQcmlvcml0eURhdGF7VmFsaWRJRH0sCiAgICAgICAgKTsKICAgICAgICAjIG91dHB1dCBzZXJ2aWNlIGVkaXQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQcmlvcml0eUVkaXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCgogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluVGlja2V0UHJpb3JpdHknLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwcmlvcml0eSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdQcmlvcml0eVNhdmUnKSB7CiAgICAgICAgbXkgJEVycm9yTm90aWZ5ID0gJyc7CiAgICAgICAgbXkgJVByaW9yaXR5RGF0YTsKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBmb3JlYWNoIChxdyhQcmlvcml0eUlEIE5hbWUgVmFsaWRJRCkpIHsKICAgICAgICAgICAgJFByaW9yaXR5RGF0YXskX30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIiRfIikgfHwgJyc7CiAgICAgICAgfQogICAgICAgICRQcmlvcml0eURhdGF7SUR9ID0gJFByaW9yaXR5RGF0YXtQcmlvcml0eUlEfTsKICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICBpZiAoJFByaW9yaXR5RGF0YXtQcmlvcml0eUlEfSBlcSAnTkVXJykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eUFkZCgKICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoISRTdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JOb3RpZnkgLj0gIiZFcnJvckFkZD0xIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlVcGRhdGUoCiAgICAgICAgICAgICAgICAlUHJpb3JpdHlEYXRhLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCEkU3VjY2VzcykgewogICAgICAgICAgICAgICAgJEVycm9yTm90aWZ5IC49ICImRXJyb3JVcGRhdGU9MSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgIyByZWRpcmVjdCB0byBvdmVydmlldwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259JEVycm9yTm90aWZ5Iik7CiAgICB9CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgb3V0cHV0IGVycm9yIG5vdGlmeQogICAgICAgIGlmICgkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIkVycm9yQWRkIikpIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhID0+ICckVGV4dHsiQWRkIG5ldyBwcmlvcml0eSBmYWlsZWQhIFNlZSBTeXN0ZW0gTG9nIGZvciBkZXRhaWxzLiJ9JywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAiRXJyb3JVcGRhdGUiKSkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJyRUZXh0eyJVcGRhdGUgcHJpb3JpdHkgZmFpbGQhIFNlZSBTeXN0ZW0gTG9nIGZvciBkZXRhaWxzLiJ9JywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcmVzdWx0CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAjIGdldCBwcmlvcml0eSBsaXN0CiAgICAgICAgbXkgJVByaW9yaXR5TGlzdCA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eUxpc3QoCiAgICAgICAgICAgIFZhbGlkID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoKTsKCiAgICAgICAgbXkgJENzc0NsYXNzOwogICAgICAgIGZvcmVhY2ggbXkgJFByaW9yaXR5SUQgKHNvcnQgeyRQcmlvcml0eUxpc3R7JGF9IGNtcCAkUHJpb3JpdHlMaXN0eyRifX0ga2V5cyAlUHJpb3JpdHlMaXN0KSB7CiAgICAgICAgICAgICMgc2V0IG91dHB1dCBjbGFzcwogICAgICAgICAgICBpZiAoJENzc0NsYXNzICYmICRDc3NDbGFzcyBlcSAnc2VhcmNoYWN0aXZlJykgewogICAgICAgICAgICAgICAgJENzc0NsYXNzID0gJ3NlYXJjaHBhc3NpdmUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJENzc0NsYXNzID0gJ3NlYXJjaGFjdGl2ZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgIyBnZXQgcHJpb3JpdHkgZGF0YQogICAgICAgICAgICBteSAlUHJpb3JpdHlEYXRhID0gJFNlbGYtPntQcmlvcml0eU9iamVjdH0tPlByaW9yaXR5R2V0KAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3RSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVByaW9yaXR5RGF0YSwKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgICAgIENzc0NsYXNzID0+ICRDc3NDbGFzcywKICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyRQcmlvcml0eURhdGF7VmFsaWRJRH19LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluVGlja2V0UHJpb3JpdHknLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7
IyAtLQojIEFkbWluSVRTTUNJUEFsbG9jYXRlLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWRtaW5JVFNNQ0lQQWxsb2NhdGUKIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRJZDogQWRtaW5JVFNNQ0lQQWxsb2NhdGUuZHRsLHYgMS4xIDIwMDcvMDMvMjAgMTE6NTA6MDggbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICA8dHI+CiAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9Im1haW5oZWFkIj4KICAgICAgJEVudnsiQm94MCJ9JFRleHR7IlByaW9yaXR5IEFsbG9jYXRpb24ifSRFbnZ7IkJveDEifQogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmJvZHkiIGFsaWduPSJjZW50ZXIiPgogICAgICA8YnI+CiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNJUEFsbG9jYXRlIj4KICAgICAgICA8dGFibGUgd2lkdGg9IjgwMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+CiAgICAgICAgICAgICAgJFRleHR7IlByaW9yaXR5In0gJFRleHR7ImFsbG9jYXRlIn06CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIHdpZHRoPSIxMDAlIj4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3cgLS0+CiAgICAgICAgICAgICAgICA8dHI+CjwhLS0gZHRsOmJsb2NrOkNJUEFsbG9jYXRlUm93Q29sdW1uRGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiBhbGlnbj0iY2VudGVyIj4kVGV4dHsiJFFEYXRheyJPYmplY3RUeXBlIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiIGFsaWduPSJjZW50ZXIiPiRUZXh0eyIkUURhdGF7Ik9iamVjdE9wdGlvbiJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpDSVBBbGxvY2F0ZVJvd0NvbHVtbkRlc2NyaXB0aW9uIC0tPgo8IS0tIGR0bDpibG9jazpDSVBBbGxvY2F0ZVJvd0NvbHVtbkNvbnRlbnQgLS0+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIiBhbGlnbj0iY2VudGVyIj4kRGF0YXsiT3B0aW9uU3RyZyJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3dDb2x1bW5Db250ZW50IC0tPgogICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3cgLS0+CiAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTYXZlIn0iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Zvcm0+CiAgICAgIDxicj4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4K
IyAtLQojIEFkbWluVGlja2V0UHJpb3JpdHkuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pblRpY2tldFByaW9yaXR5CiMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkSWQ6IEFkbWluVGlja2V0UHJpb3JpdHkuZHRsLHYgMS4yIDIwMDcvMDMvMjAgMTE6NTA6MzYgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4KPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgPHRyPgogICAgPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJtYWluaGVhZCI+CiAgICAgICRFbnZ7IkJveDAifSRUZXh0eyJQcmlvcml0eSBNYW5hZ2VtZW50In0kRW52eyJCb3gxIn0KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjMwJSIgY2xhc3M9Im1haW5ib2R5Ij4KICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJnZXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJQcmlvcml0eUVkaXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlByaW9yaXR5SUQiIHZhbHVlPSJORVciPgogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7IkFkZCJ9OjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlByaW9yaXR5In06PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBzaXplPSIyNSIgbWF4bGVuZ3RoPSIxMDAiPjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiQWRkIn0iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Zvcm0+CiAgICA8L3RkPgogICAgPHRkIHdpZHRoPSI3MCUiIGNsYXNzPSJtYWluYm9keSI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdCAtLT4KICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGhlYWQiPiRUZXh0eyJMaXN0In06PC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiIHdpZHRoPSI2MCUiPiRUZXh0eyJQcmlvcml0eSJ9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlZhbGlkIn08L3RkPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IiRRRGF0YXsiQ3NzQ2xhc3MifSI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0mU3ViYWN0aW9uPVByaW9yaXR5RWRpdCZQcmlvcml0eUlEPSRRRGF0YXsiUHJpb3JpdHlJRCJ9Ij4KICAgICAgICAgICAgICAgICAgJFFEYXRheyJOYW1lIn0KICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBjbGFzcz0iJFFEYXRheyJDc3NDbGFzcyJ9Ij4KICAgICAgICAgICAgICAgICAgJFRleHR7IiRRRGF0YXsiVmFsaWQifSJ9CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAmbmJzcDsKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdMaXN0IC0tPgo8IS0tIGR0bDpibG9jazpQcmlvcml0eUVkaXQgLS0+CiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUHJpb3JpdHlTYXZlIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQcmlvcml0eUlEIiB2YWx1ZT0iJFFEYXRheyJQcmlvcml0eUlEIn0iPgogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7IkVkaXQifTo8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Ym9keSI+CiAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiUHJpb3JpdHkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiB2YWx1ZT0iJFFEYXRheyJOYW1lIn0iIHNpemU9IjQ1IiBtYXhsZW5ndGg9IjIwMCI+CiAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJWYWxpZCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IlZhbGlkT3B0aW9uU3RyZyJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZm9ybT4KPCEtLSBkdGw6YmxvY2s6UHJpb3JpdHlFZGl0IC0tPgogICAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4K
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkSWQ6IElUU01DSVBBbGxvY2F0ZS5wbSx2IDEuMiAyMDA3LzAzLzIyIDEzOjI3OjEwIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwoKdXNlIHN0cmljdDsKCnVzZSB2YXJzIHF3KEBJU0EgJFZFUlNJT04pOwokVkVSU0lPTiA9ICckUmV2aXNpb246IDEuMiAkJzsKJFZFUlNJT04gPX4gcy9eXCQuKjpcVyguKilcVy4rPyQvJDEvOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpDSVBBbGxvY2F0ZSAtIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBjcml0aWNhbGl0eSwgaW1wYWN0IGFuZCBwcmlvcml0eSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGEgb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpQcmlvcml0eTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkQ0lQQWxsb2NhdGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6Q0lQQWxsb2NhdGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCA9PiAkREJPYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAkVHlwZSA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyAoJFNlbGYsICRUeXBlKTsKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvcmVhY2ggKHF3KERCT2JqZWN0IENvbmZpZ09iamVjdCBMb2dPYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBBbGxvY2F0ZUxpc3QoKQoKcmV0dXJuIGEgMmQgaGFzaCByZWZlcmVuY2Ugb2YgYWxsb2NhdGlvbnMKCiAgICBteSAkTGlzdFJlZiA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBbGxvY2F0ZUxpc3QgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvcmVhY2ggKHF3KFVzZXJJRCkpIHsKICAgICAgICBpZiAoISRQYXJhbXskX30pIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgICMgcXVvdGUKICAgIGZvcmVhY2ggKHF3KFVzZXJJRCkpIHsKICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQYXJhbXskX30sICdJbnRlZ2VyJyk7CiAgICB9CiAgICAjIGFzayBkYXRhYmFzZQogICAgbXkgJUFsbG9jYXRlRGF0YSA9ICgpOwogICAgaWYgKCRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKFNRTCA9PiAnU0VMRUNUIGNyaXRpY2FsaXR5X2lkLCBpbXBhY3RfaWQsIHByaW9yaXR5X2lkIEZST00gY2lwX2FsbG9jYXRlJykpIHsKICAgICAgICB3aGlsZSAobXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkpIHsKICAgICAgICAgICAgJEFsbG9jYXRlRGF0YXskUm93WzFdfXskUm93WzBdfSA9ICRSb3dbMl07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJUFsbG9jYXRlRGF0YTsKfQoKPWl0ZW0gQWxsb2NhdGVVcGRhdGUoKQoKdXBkYXRlIHRoZSBhbGxvY2F0aW9uIG9mIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5CgogICAgbXkgJFRydWUgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgICAgIEFsbG9jYXRlRGF0YSA9PiAkRGF0YVJlZiwgICMgMkQgaGFzaCByZWZlcmVuY2UKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQWxsb2NhdGVVcGRhdGUgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvcmVhY2ggKHF3KEFsbG9jYXRlRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCEkUGFyYW17JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJF8hIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBpZiAoIXJlZigkUGFyYW17QWxsb2NhdGVEYXRhfSkgZXEgJ0hBU0gnKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiQWxsb2NhdGVEYXRhIG11c3QgYmUgYSAyRCBoYXNoIHJlZmVyZW5jZSEiKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAjIHF1b3RlCiAgICBmb3JlYWNoIChxdyhVc2VySUQpKSB7CiAgICAgICAgJFBhcmFteyRffSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFyYW17JF99LCAnSW50ZWdlcicpOwogICAgfQogICAgIyBkZWxldGUgb2xkIGFsbG9jYXRpb25zCiAgICBteSAkU1FMID0gIkRFTEVURSBGUk9NIGNpcF9hbGxvY2F0ZSI7CiAgICBteSAkRGVsZXRlID0gJFNlbGYtPntEQk9iamVjdH0tPkRvKFNRTCA9PiAkU1FMKTsKICAgIG15ICRSZXR1cm4gPSAwOwoKICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9ucwogICAgaWYgKCREZWxldGUpIHsKICAgICAgICBmb3JlYWNoIG15ICRJbXBhY3RJRCAoa2V5cyAleyRQYXJhbXtBbGxvY2F0ZURhdGF9fSkgewogICAgICAgICAgICAjIGFib3J0IGluc2VydCwgaWYgbm8gMmQgaGFzaCByZWZlcmVuY2Ugd2FzIGZvdW5kCiAgICAgICAgICAgIGlmIChyZWYoJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0SUR9KSBuZSAnSEFTSCcpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIkFsbG9jYXRlRGF0YSBtdXN0IGJlIGEgMkQgaGFzaCByZWZlcmVuY2UhIik7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJENyaXRpY2FsaXR5SUQgKGtleXMgJXskUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3RJRH19KSB7CiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRQYXJhbXtBbGxvY2F0ZURhdGF9LT57JEltcGFjdElEfS0+eyRDcml0aWNhbGl0eUlEfTsKICAgICAgICAgICAgICAgICMgcXVvdGUKICAgICAgICAgICAgICAgICRDcml0aWNhbGl0eUlEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRDcml0aWNhbGl0eUlELCAnSW50ZWdlcicpOwogICAgICAgICAgICAgICAgJEltcGFjdElEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRJbXBhY3RJRCwgJ0ludGVnZXInKTsKICAgICAgICAgICAgICAgICRQcmlvcml0eUlEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQcmlvcml0eUlELCAnSW50ZWdlcicpOwoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9uCiAgICAgICAgICAgICAgICBteSAkU1FMID0gIklOU0VSVCBJTlRPIGNpcF9hbGxvY2F0ZSAoY3JpdGljYWxpdHlfaWQsIGltcGFjdF9pZCwgcHJpb3JpdHlfaWQsICIuCiAgICAgICAgICAgICAgICAgICAgImNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpIFZBTFVFUyAiLgogICAgICAgICAgICAgICAgICAgICIoJENyaXRpY2FsaXR5SUQsICRJbXBhY3RJRCwgJFByaW9yaXR5SUQsICIuCiAgICAgICAgICAgICAgICAgICAgImN1cnJlbnRfdGltZXN0YW1wLCAkUGFyYW17VXNlcklEfSwgY3VycmVudF90aW1lc3RhbXAsICRQYXJhbXtVc2VySUR9KSI7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICRTUUwpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRSZXR1cm4gPSAxOwogICAgfQogICAgcmV0dXJuICRSZXR1cm47Cn0KCj1pdGVtIFByaW9yaXR5QWxsb2NhdGlvbkdldCgpCgpyZXR1cm4gdGhlIHByaW9yaXR5IGlkIG9mIGEgY3JpdGljYWxpdHkgYW5kIGFuIGltcGFjdAoKICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgQ3JpdGljYWxpdHlJRCA9PiAzMjEsCiAgICAgICAgSW1wYWN0SUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBQcmlvcml0eUFsbG9jYXRpb25HZXQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvcmVhY2ggKHF3KENyaXRpY2FsaXR5SUQgSW1wYWN0SUQpKSB7CiAgICAgICAgaWYgKCEkUGFyYW17JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJF8hIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICAjIHF1b3RlCiAgICBmb3JlYWNoIChxdyhDcml0aWNhbGl0eUlEIEltcGFjdElEKSkgewogICAgICAgICRQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcmFteyRffSwgJ0ludGVnZXInKTsKICAgIH0KICAgICMgZ2V0IHByaW9yaXR5IGlkIGZyb20gZGIKICAgIG15ICRQcmlvcml0eUlEOwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgcHJpb3JpdHlfaWQgRlJPTSBjaXBfYWxsb2NhdGUgIi4KICAgICAgICAgICAgIldIRVJFIGNyaXRpY2FsaXR5X2lkID0gJFBhcmFte0NyaXRpY2FsaXR5SUR9IEFORCBpbXBhY3RfaWQgPSAkUGFyYW17SW1wYWN0SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKICAgIHdoaWxlIChteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSkgewogICAgICAgICRQcmlvcml0eUlEID0gJFJvd1swXTsKICAgIH0KICAgIHJldHVybiAkUHJpb3JpdHlJRDsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCgo9Y3V0Cgo9aGVhZDEgVkVSU0lPTgoKJFJldmlzaW9uOiAxLjIgJCAkRGF0ZTogMjAwNy8wMy8yMiAxMzoyNzoxMCAkCgo9Y3V0
ITSM::Core::Criticality
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
5 very high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
5 very high
1
current_timestamp
1
current_timestamp
1
1
6
1
current_timestamp
1
current_timestamp
1
1
7
1
current_timestamp
1
current_timestamp
1
1
8
2
current_timestamp
1
current_timestamp
1
1
9
2
current_timestamp
1
current_timestamp
1
1
10
3
current_timestamp
1
current_timestamp
1
2
6
1
current_timestamp
1
current_timestamp
1
2
7
2
current_timestamp
1
current_timestamp
1
2
8
2
current_timestamp
1
current_timestamp
1
2
9
3
current_timestamp
1
current_timestamp
1
2
10
4
current_timestamp
1
current_timestamp
1
3
6
2
current_timestamp
1
current_timestamp
1
3
7
2
current_timestamp
1
current_timestamp
1
3
8
3
current_timestamp
1
current_timestamp
1
3
9
4
current_timestamp
1
current_timestamp
1
3
10
4
current_timestamp
1
current_timestamp
1
4
6
2
current_timestamp
1
current_timestamp
1
4
7
3
current_timestamp
1
current_timestamp
1
4
8
4
current_timestamp
1
current_timestamp
1
4
9
4
current_timestamp
1
current_timestamp
1
4
10
5
current_timestamp
1
current_timestamp
1
5
6
3
current_timestamp
1
current_timestamp
1
5
7
4
current_timestamp
1
current_timestamp
1
5
8
4
current_timestamp
1
current_timestamp
1
5
9
5
current_timestamp
1
current_timestamp
1
5
10
5
current_timestamp
1
current_timestamp
1