<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>HideShowForAgentTicketCompose</Name>
    <Version>10.1.3</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-10-28 14:37:58" Version="10.1.3">Added translations.</ChangeLog>
    <ChangeLog Date="2024-07-25 14:32:20" Version="10.1.2">Fix usage with PropertiesDatabase.</ChangeLog>
    <ChangeLog Date="2024-07-22 12:41:18" Version="10.1.1">Initial Release.</ChangeLog>
    <Description Lang="en">The package HideShowForAgentTicketCompose enables the usage of hiding and showing dynamic fields via ACLs in AgentTicketCompose.</Description>
    <Framework>10.1.x</Framework>
    <BuildCommitID>29a2e5e9764664ce17f54eeefc2b09804b949e34</BuildCommitID>
    <BuildDate>2026-10-28 14:38:02</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AgentTicketCompose.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjNDcyOTcxOWI5Nzg4ZGExNjM5MDkxMTMwNTVkZTQ5NWZhYzM1ZGY0IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRDb21wb3NlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldENvbXBvc2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBNYWlsOjpBZGRyZXNzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIFRyeSB0byBsb2FkIGRyYWZ0IGlmIHJlcXVlc3RlZC4KICAgIGlmICgKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpLT57Rm9ybURyYWZ0fQogICAgICAgICYmICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdMb2FkRm9ybURyYWZ0JyApCiAgICAgICAgJiYgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdElEJyApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57TG9hZGVkRm9ybURyYWZ0SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5Mb2FkRm9ybURyYWZ0KAogICAgICAgICAgICBGb3JtRHJhZnRJRCA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybURyYWZ0SUQnICksCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICRTZWxmLT57RGVidWd9ID0gJFBhcmFte0RlYnVnfSB8fCAwOwoKICAgICMgZ2V0IGZvcm0gaWQKICAgICRTZWxmLT57Rm9ybUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJFNlbGYtPntGb3JtSUR9ICkgewogICAgICAgICRTZWxmLT57Rm9ybUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyktPkZvcm1JRENyZWF0ZSgpOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTZWxmLT57VGlja2V0SUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFRpY2tldElEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKIyBSb3RoZXIgT1NTIC8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKICAgIG15ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkZpZWxkUmVzdHJpY3Rpb25zJyk7CiMgRU8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKCiAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoIENoYW5uZWxOYW1lID0+ICdFbWFpbCcgKTsKCiAgICAjIGdldCBjb25maWcgZm9yIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgICAgPT4gJENvbmZpZy0+e1Blcm1pc3Npb259LAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfQogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbiwgZG9uJ3Qgc2hvdyB0aWNrZXQKICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkQ29uZmlnLT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEFDTCByZXN0cmljdGlvbnMKICAgIG15ICVQb3NzaWJsZUFjdGlvbnMgPSAoIDEgPT4gJFNlbGYtPntBY3Rpb259ICk7CgogICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlUG9zc2libGVBY3Rpb25zLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBteSAlQWNsQWN0aW9uID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwoKICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgaWYgKCAkQUNMIHx8IElzSGFzaFJlZldpdGhEYXRhKCBcJUFjbEFjdGlvbiApICkgewoKICAgICAgICBteSAlQWNsQWN0aW9uTG9va3VwID0gcmV2ZXJzZSAlQWNsQWN0aW9uOwoKICAgICAgICAjIHNob3cgZXJyb3Igc2NyZWVuIGlmIEFDTCBwcm9oaWJpdHMgdGhpcyBhY3Rpb24KICAgICAgICBpZiAoICEkQWNsQWN0aW9uTG9va3VweyAkU2VsZi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgIH0KICAgIH0KCiAgICAjIENoZWNrIGZvciBmYWlsZWQgZHJhZnQgbG9hZGluZyByZXF1ZXN0LgogICAgaWYgKAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdMb2FkRm9ybURyYWZ0JyApCiAgICAgICAgJiYgISRTZWxmLT57TG9hZGVkRm9ybURyYWZ0SUR9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0xvYWRpbmcgZHJhZnQgZmFpbGVkIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxCiAgICApOwoKICAgICMgZ2V0IGxvY2sgc3RhdGUKICAgIG15ICRUaWNrZXRCYWNrVHlwZSA9ICdUaWNrZXRCYWNrJzsKICAgIGlmICggJENvbmZpZy0+e1JlcXVpcmVkTG9ja30gKSB7CiAgICAgICAgaWYgKCAhJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja0dldCggVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0gKSApIHsKCiAgICAgICAgICAgIG15ICRMb2NrID0gJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja1NldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgTG9jayAgICAgPT4gJ2xvY2snLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFNldCBuZXcgb3duZXIgaWYgdGlja2V0IG93bmVyIGlzIGRpZmZlcmVudCB0aGVuIGxvZ2dlZCB1c2VyLgogICAgICAgICAgICBpZiAoICRMb2NrICYmICggJFRpY2tldHtPd25lcklEfSAhPSAkU2VsZi0+e1VzZXJJRH0gKSApIHsKCiAgICAgICAgICAgICAgICAjIFJlbWVtYmVyIHByZXZpb3VzIG93bmVyLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gcmVzdG9yZSB0aWNrZXQgb3duZXIgb24gdW5kbyBhY3Rpb24uCiAgICAgICAgICAgICAgICAkVGlja2V0e1ByZXZpb3VzT3duZXJ9ID0gJFRpY2tldHtPd25lcklEfTsKCiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgU2hvdyBsb2NrIHN0YXRlLgogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFRpY2tldEJhY2tUeXBlIC49ICdVbmRvJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRBY2Nlc3NPayA9ICRUaWNrZXRPYmplY3QtPk93bmVyQ2hlY2soCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIE93bmVySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFRpY2tldHtOdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnU21hbGwnLAogICAgICAgICAgICAgICAgICAgIEJvZHlDbGFzcyA9PiAnUG9wdXAnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+V2FybmluZygKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnU29ycnksIHlvdSBuZWVkIHRvIGJlIHRoZSB0aWNrZXQgb3duZXIgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNoYW5nZSB0aGUgb3duZXIgZmlyc3QuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnU21hbGwnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwogICAgZm9yICgKICAgICAgICBxdygKICAgICAgICAgICAgVG8gQ2MgQmNjIFN1YmplY3QgQm9keSBJblJlcGx5VG8gUmVmZXJlbmNlcyBSZXNwb25zZUlEIFJlcGx5QXJ0aWNsZUlEIFN0YXRlSUQgQXJ0aWNsZUlECiAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyUHJlc2VudCBJc1Zpc2libGVGb3JDdXN0b21lciBUaW1lVW5pdHMgWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUgRm9ybUlEIFJlcGx5QWxsCiAgICAgICAgICAgIEZvcm1EcmFmdElEIFRpdGxlCiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICAkR2V0UGFyYW17JF99ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJF8gKTsKICAgIH0KCiAgICAjIE1ha2Ugc3VyZSBzZW5kZXIgaXMgY29ycmVjdCBvbmUuIFNlZSBidWcjMTQ4NzIgKCBodHRwczovL2J1Z3Mub3Rycy5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODcyICkuCiAgICAkR2V0UGFyYW17RnJvbX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGVtcGxhdGVHZW5lcmF0b3InKS0+U2VuZGVyKAogICAgICAgIFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBoYXNoIGZvciBjaGVjayBkdXBsaWNhdGVkIGVudHJpZXMKICAgIG15ICVBZGRyZXNzZXNMaXN0OwoKICAgIG15IEBNdWx0aXBsZUN1c3RvbWVyOwogICAgbXkgJEN1c3RvbWVyc051bWJlciA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDdXN0b21lclRpY2tldENvdW50ZXJUb0N1c3RvbWVyJyApIHx8IDA7CiAgICBteSAkU2VsZWN0ZWQgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyU2VsZWN0ZWQnICkgICAgICAgICAgICAgICAgfHwgJyc7CgogICAgIyBnZXQgY2hlY2sgaXRlbSBvYmplY3QKICAgIG15ICRDaGVja0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyk7CgogICAgaWYgKCRDdXN0b21lcnNOdW1iZXIpIHsKCiAgICAgICAgbXkgJEN1c3RvbWVyQ291bnRlciA9IDE7CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4uICRDdXN0b21lcnNOdW1iZXIgKSB7CiAgICAgICAgICAgIG15ICRDdXN0b21lckVsZW1lbnQgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVGlja2V0VGV4dF8nIC4gJENvdW50ICk7CiAgICAgICAgICAgIG15ICRDdXN0b21lclNlbGVjdGVkID0gKCAkU2VsZWN0ZWQgZXEgJENvdW50ID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnICk7CiAgICAgICAgICAgIG15ICRDdXN0b21lcktleSAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyS2V5XycgLiAkQ291bnQgKQogICAgICAgICAgICAgICAgfHwgJyc7CiAgICAgICAgICAgIG15ICRDdXN0b21lclF1ZXVlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyUXVldWVfJyAuICRDb3VudCApCiAgICAgICAgICAgICAgICB8fCAnJzsKICAgICAgICAgICAgaWYgKCRDdXN0b21lckVsZW1lbnQpIHsKCiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtUb30gKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1RvfSAuPSAnLCAnIC4gJEN1c3RvbWVyRWxlbWVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtUb30gPSAkQ3VzdG9tZXJFbGVtZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3JNc2cgPSAnQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3IgICAgPSAnJzsKICAgICAgICAgICAgICAgIGZvciBteSAkRW1haWwgKCBNYWlsOjpBZGRyZXNzLT5wYXJzZSgkQ3VzdG9tZXJFbGVtZW50KSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzID0+ICRFbWFpbC0+YWRkcmVzcygpICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yTXNnID0gJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFcnJvclR5cGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvciA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIGR1cGxpY2F0ZWQgZW50cmllcwogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRBZGRyZXNzZXNMaXN0eyRDdXN0b21lckVsZW1lbnR9ICYmICRDdXN0b21lckVycm9yIGVxICcnICkgewogICAgICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yTXNnID0gJ0lzRHVwbGljYXRlZFNlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvciAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEN1c3RvbWVyRGlzYWJsZWQgPSAnJzsKICAgICAgICAgICAgICAgIG15ICRDb3VudEF1eCAgICAgICAgID0gJEN1c3RvbWVyQ291bnRlcisrOwogICAgICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJFcnJvciBuZSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJEaXNhYmxlZCA9ICdkaXNhYmxlZD0iZGlzYWJsZWQiJzsKICAgICAgICAgICAgICAgICAgICAkQ291bnRBdXggICAgICAgICA9ICRDb3VudCAuICdFcnJvcic7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJRdWV1ZSBuZSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJRdWV1ZSA9ICRDb3VudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwdXNoIEBNdWx0aXBsZUN1c3RvbWVyLCB7CiAgICAgICAgICAgICAgICAgICAgQ291bnQgICAgICAgICAgICA9PiAkQ291bnRBdXgsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJFbGVtZW50ICA9PiAkQ3VzdG9tZXJFbGVtZW50LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyU2VsZWN0ZWQgPT4gJEN1c3RvbWVyU2VsZWN0ZWQsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJLZXkgICAgICA9PiAkQ3VzdG9tZXJLZXksCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJFcnJvciAgICA9PiAkQ3VzdG9tZXJFcnJvciwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lckVycm9yTXNnID0+ICRDdXN0b21lckVycm9yTXNnLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyRGlzYWJsZWQgPT4gJEN1c3RvbWVyRGlzYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJRdWV1ZSAgICA9PiAkQ3VzdG9tZXJRdWV1ZSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkQWRkcmVzc2VzTGlzdHskQ3VzdG9tZXJFbGVtZW50fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgQE11bHRpcGxlQ3VzdG9tZXJDYzsKICAgIG15ICRDdXN0b21lcnNOdW1iZXJDYyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDdXN0b21lclRpY2tldENvdW50ZXJDY0N1c3RvbWVyJyApIHx8IDA7CgogICAgaWYgKCRDdXN0b21lcnNOdW1iZXJDYykgewogICAgICAgIG15ICRDdXN0b21lckNvdW50ZXJDYyA9IDE7CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4uICRDdXN0b21lcnNOdW1iZXJDYyApIHsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRWxlbWVudENjID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NjQ3VzdG9tZXJUaWNrZXRUZXh0XycgLiAkQ291bnQgKTsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyS2V5Q2MgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NjQ3VzdG9tZXJLZXlfJyAuICRDb3VudCApCiAgICAgICAgICAgICAgICB8fCAnJzsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyUXVldWVDYyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDY0N1c3RvbWVyUXVldWVfJyAuICRDb3VudCApCiAgICAgICAgICAgICAgICB8fCAnJzsKCiAgICAgICAgICAgIGlmICgkQ3VzdG9tZXJFbGVtZW50Q2MpIHsKCiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtDY30gKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0NjfSAuPSAnLCAnIC4gJEN1c3RvbWVyRWxlbWVudENjOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0NjfSA9ICRDdXN0b21lckVsZW1lbnRDYzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVtYWlsIGFkZHJlc3MKICAgICAgICAgICAgICAgIG15ICRDdXN0b21lckVycm9yTXNnQ2MgPSAnQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3JDYyAgICA9ICcnOwogICAgICAgICAgICAgICAgZm9yIG15ICRFbWFpbCAoIE1haWw6OkFkZHJlc3MtPnBhcnNlKCRDdXN0b21lckVsZW1lbnRDYykgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFbWFpbCggQWRkcmVzcyA9PiAkRW1haWwtPmFkZHJlc3MoKSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvck1zZ0NjID0gJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFcnJvclR5cGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvckNjID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgZHVwbGljYXRlZCBlbnRyaWVzCiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQgJEFkZHJlc3Nlc0xpc3R7JEN1c3RvbWVyRWxlbWVudENjfSAmJiAkQ3VzdG9tZXJFcnJvckNjIGVxICcnICkgewogICAgICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yTXNnQ2MgPSAnSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yQ2MgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRDdXN0b21lckRpc2FibGVkQ2MgPSAnJzsKICAgICAgICAgICAgICAgIG15ICRDb3VudEF1eENjICAgICAgICAgPSAkQ3VzdG9tZXJDb3VudGVyQ2MrKzsKICAgICAgICAgICAgICAgIGlmICggJEN1c3RvbWVyRXJyb3JDYyBuZSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJEaXNhYmxlZENjID0gJ2Rpc2FibGVkPSJkaXNhYmxlZCInOwogICAgICAgICAgICAgICAgICAgICRDb3VudEF1eENjICAgICAgICAgPSAkQ291bnQgLiAnRXJyb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJEN1c3RvbWVyUXVldWVDYyBuZSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJRdWV1ZUNjID0gJENvdW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQE11bHRpcGxlQ3VzdG9tZXJDYywgewogICAgICAgICAgICAgICAgICAgIENvdW50ICAgICAgICAgICAgPT4gJENvdW50QXV4Q2MsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJFbGVtZW50ICA9PiAkQ3VzdG9tZXJFbGVtZW50Q2MsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJLZXkgICAgICA9PiAkQ3VzdG9tZXJLZXlDYywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lckVycm9yICAgID0+ICRDdXN0b21lckVycm9yQ2MsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJFcnJvck1zZyA9PiAkQ3VzdG9tZXJFcnJvck1zZ0NjLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyRGlzYWJsZWQgPT4gJEN1c3RvbWVyRGlzYWJsZWRDYywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclF1ZXVlICAgID0+ICRDdXN0b21lclF1ZXVlQ2MsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgJEFkZHJlc3Nlc0xpc3R7JEN1c3RvbWVyRWxlbWVudENjfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgQE11bHRpcGxlQ3VzdG9tZXJCY2M7CiAgICBteSAkQ3VzdG9tZXJzTnVtYmVyQmNjID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVGlja2V0Q291bnRlckJjY0N1c3RvbWVyJyApIHx8IDA7CgogICAgaWYgKCRDdXN0b21lcnNOdW1iZXJCY2MpIHsKICAgICAgICBteSAkQ3VzdG9tZXJDb3VudGVyQmNjID0gMTsKICAgICAgICBmb3IgbXkgJENvdW50ICggMSAuLi4gJEN1c3RvbWVyc051bWJlckJjYyApIHsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRWxlbWVudEJjYyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdCY2NDdXN0b21lclRpY2tldFRleHRfJyAuICRDb3VudCApOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJLZXlCY2MgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0JjY0N1c3RvbWVyS2V5XycgLiAkQ291bnQgKQogICAgICAgICAgICAgICAgfHwgJyc7CiAgICAgICAgICAgIG15ICRDdXN0b21lclF1ZXVlQmNjID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0JjY0N1c3RvbWVyUXVldWVfJyAuICRDb3VudCApCiAgICAgICAgICAgICAgICB8fCAnJzsKCiAgICAgICAgICAgIGlmICgkQ3VzdG9tZXJFbGVtZW50QmNjKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17QmNjfSApIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17QmNjfSAuPSAnLCAnIC4gJEN1c3RvbWVyRWxlbWVudEJjYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtCY2N9ID0gJEN1c3RvbWVyRWxlbWVudEJjYzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVtYWlsIGFkZHJlc3MKICAgICAgICAgICAgICAgIG15ICRDdXN0b21lckVycm9yTXNnQmNjID0gJ0N1c3RvbWVyR2VuZXJpY1NlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgICAgIG15ICRDdXN0b21lckVycm9yQmNjICAgID0gJyc7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEVtYWlsICggTWFpbDo6QWRkcmVzcy0+cGFyc2UoJEN1c3RvbWVyRWxlbWVudEJjYykgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFbWFpbCggQWRkcmVzcyA9PiAkRW1haWwtPmFkZHJlc3MoKSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvck1zZ0JjYyA9ICRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRXJyb3JUeXBlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ1NlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JCY2MgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGVkIGVudHJpZXMKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkQWRkcmVzc2VzTGlzdHskQ3VzdG9tZXJFbGVtZW50QmNjfSAmJiAkQ3VzdG9tZXJFcnJvckJjYyBlcSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvck1zZ0JjYyA9ICdJc0R1cGxpY2F0ZWRTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JCY2MgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRDdXN0b21lckRpc2FibGVkQmNjID0gJyc7CiAgICAgICAgICAgICAgICBteSAkQ291bnRBdXhCY2MgICAgICAgICA9ICRDdXN0b21lckNvdW50ZXJCY2MrKzsKICAgICAgICAgICAgICAgIGlmICggJEN1c3RvbWVyRXJyb3JCY2MgbmUgJycgKSB7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyRGlzYWJsZWRCY2MgPSAnZGlzYWJsZWQ9ImRpc2FibGVkIic7CiAgICAgICAgICAgICAgICAgICAgJENvdW50QXV4QmNjICAgICAgICAgPSAkQ291bnQgLiAnRXJyb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJEN1c3RvbWVyUXVldWVCY2MgbmUgJycgKSB7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyUXVldWVCY2MgPSAkQ291bnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcHVzaCBATXVsdGlwbGVDdXN0b21lckJjYywgewogICAgICAgICAgICAgICAgICAgIENvdW50ICAgICAgICAgICAgPT4gJENvdW50QXV4QmNjLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyRWxlbWVudCAgPT4gJEN1c3RvbWVyRWxlbWVudEJjYywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lcktleSAgICAgID0+ICRDdXN0b21lcktleUJjYywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lckVycm9yICAgID0+ICRDdXN0b21lckVycm9yQmNjLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyRXJyb3JNc2cgPT4gJEN1c3RvbWVyRXJyb3JNc2dCY2MsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJEaXNhYmxlZCA9PiAkQ3VzdG9tZXJEaXNhYmxlZEJjYywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclF1ZXVlICAgID0+ICRDdXN0b21lclF1ZXVlQmNjLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICRBZGRyZXNzZXNMaXN0eyRDdXN0b21lckVsZW1lbnRCY2N9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBEeW5hbWljIGZpZWxkcyBmb3JtIFBhcmFtT2JqZWN0CiAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzOwoKICAgICMgZ2V0IGJhY2tlbmQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JywgJ0FydGljbGUnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QKICAgICAgICAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9CiAgICAgICAgICAgICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICApOwogICAgfQoKICAgICMgY29udmVydCBkeW5hbWljIGZpZWxkIHZhbHVlcyBpbnRvIGEgc3RydWN0dXJlIGZvciBBQ0xzCiAgICBteSAlRHluYW1pY0ZpZWxkQUNMUGFyYW1ldGVyczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkSXRlbSAoIHNvcnQga2V5cyAlRHluYW1pY0ZpZWxkVmFsdWVzICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkSXRlbTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhZGVmaW5lZCAkRHluYW1pY0ZpZWxkVmFsdWVzeyREeW5hbWljRmllbGRJdGVtfTsKCiAgICAgICAgJER5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRJdGVtIH0gPSAkRHluYW1pY0ZpZWxkVmFsdWVzeyREeW5hbWljRmllbGRJdGVtfTsKICAgIH0KICAgICRHZXRQYXJhbXtEeW5hbWljRmllbGR9ID0gXCVEeW5hbWljRmllbGRBQ0xQYXJhbWV0ZXJzOwoKICAgICMgdHJhbnNmb3JtIHBlbmRpbmcgdGltZSwgdGltZSBzdGFtcCBiYXNlZCBvbiB1c2VyIHRpbWUgem9uZQogICAgaWYgKAogICAgICAgIGRlZmluZWQgJEdldFBhcmFte1llYXJ9CiAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17TW9udGh9CiAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17RGF5fQogICAgICAgICYmIGRlZmluZWQgJEdldFBhcmFte0hvdXJ9CiAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17TWludXRlfQogICAgICAgICkKICAgIHsKICAgICAgICAlR2V0UGFyYW0gPSAkTGF5b3V0T2JqZWN0LT5UcmFuc2Zvcm1EYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFVwbG9hZENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgIyBzZW5kIGVtYWlsCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VuZEVtYWlsJyB8fCAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfSApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgIGlmICggISRTZWxmLT57TG9hZGVkRm9ybURyYWZ0SUR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB2YWxpZCBzdGF0ZSBpZAogICAgICAgIGlmICggISRHZXRQYXJhbXtTdGF0ZUlEfSApIHsKICAgICAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEdldFBhcmFte1N0YXRlSUR9ID0gJFRpY2tldHtTdGF0ZUlEfTsKICAgICAgICB9CgogICAgICAgIG15ICVTdGF0ZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKS0+U3RhdGVHZXQoIElEID0+ICRHZXRQYXJhbXtTdGF0ZUlEfSApOwoKICAgICAgICBteSAlRXJyb3I7CgogICAgICAgICMgZ2V0IGNoZWNrIGl0ZW0gb2JqZWN0CiAgICAgICAgbXkgJENoZWNrSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKTsKCiAgICAgICAgIyBjaGVjayBzb21lIHZhbHVlcwogICAgICAgIExJTkU6CiAgICAgICAgZm9yIG15ICRMaW5lIChxdyhUbyBDYyBCY2MpKSB7CiAgICAgICAgICAgIG5leHQgTElORSBpZiAhJEdldFBhcmFteyRMaW5lfTsKICAgICAgICAgICAgZm9yIG15ICRFbWFpbCAoIE1haWw6OkFkZHJlc3MtPnBhcnNlKCAkR2V0UGFyYW17JExpbmV9ICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzID0+ICRFbWFpbC0+YWRkcmVzcygpICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yeyAkTGluZSAuICdFcnJvclR5cGUnIH0gPSAkTGluZSAuICRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRXJyb3JUeXBlKCkgLiAnU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgICAgICRFcnJvcnsgJExpbmUgLiAnSW52YWxpZCcgfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG15ICRJc0xvY2FsID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnKS0+U3lzdGVtQWRkcmVzc0lzTG9jYWxBZGRyZXNzKAogICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPT4gJEVtYWlsLT5hZGRyZXNzKCkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoJElzTG9jYWwpIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICRMaW5lIC4gJ0lzTG9jYWxBZGRyZXNzJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkRXJyb3J7VG9Jc0xvY2FsQWRkcmVzc30gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVG9Jc0xvY2FsQWRkcmVzc1NlcnZlckVycm9yTXNnJywKICAgICAgICAgICAgICAgIERhdGEgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJEVycm9ye0NjSXNMb2NhbEFkZHJlc3N9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NjSXNMb2NhbEFkZHJlc3NTZXJ2ZXJFcnJvck1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRFcnJvcntCY2NJc0xvY2FsQWRkcmVzc30gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQmNjSXNMb2NhbEFkZHJlc3NTZXJ2ZXJFcnJvck1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBHZXQgYW5kIHZhbGlkYXRlIGRyYWZ0IGFjdGlvbi4KICAgICAgICBteSAkRm9ybURyYWZ0QWN0aW9uID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdEFjdGlvbicgKTsKICAgICAgICBpZiAoICRGb3JtRHJhZnRBY3Rpb24gJiYgISRDb25maWctPntGb3JtRHJhZnR9ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRm9ybURyYWZ0IGZ1bmN0aW9uYWxpdHkgZGlzYWJsZWQhJyksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAlRm9ybURyYWZ0UmVzcG9uc2U7CgogICAgICAgICMgQ2hlY2sgZHJhZnQgbmFtZS4KICAgICAgICBpZiAoCiAgICAgICAgICAgICRGb3JtRHJhZnRBY3Rpb24KICAgICAgICAgICAgJiYgKCAkRm9ybURyYWZ0QWN0aW9uIGVxICdBZGQnIHx8ICRGb3JtRHJhZnRBY3Rpb24gZXEgJ1VwZGF0ZScgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkVGl0bGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybURyYWZ0VGl0bGUnICk7CgogICAgICAgICAgICAjIEEgZHJhZnQgbmFtZSBpcyByZXF1aXJlZC4KICAgICAgICAgICAgaWYgKCAhJFRpdGxlICkgewoKICAgICAgICAgICAgICAgICVGb3JtRHJhZnRSZXNwb25zZSA9ICgKICAgICAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoIkRyYWZ0IG5hbWUgaXMgcmVxdWlyZWQhIiksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENob3NlbiBkcmFmdCBuYW1lIG11c3QgYmUgdW5pcXVlLgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRGb3JtRHJhZnRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpLT5Gb3JtRHJhZnRMaXN0R2V0KAogICAgICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBEUkFGVDoKICAgICAgICAgICAgICAgIGZvciBteSAkRm9ybURyYWZ0ICggQHskRm9ybURyYWZ0TGlzdH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgTm8gZXhpc3RpbmcgZHJhZnQgd2l0aCBzYW1lIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgbmV4dCBEUkFGVCBpZiAkVGl0bGUgbmUgJEZvcm1EcmFmdC0+e1RpdGxlfTsKCiAgICAgICAgICAgICAgICAgICAgIyBTYW1lIG5hbWUgZm9yIHVwZGF0ZSBvbiBleGlzdGluZyBkcmFmdC4KICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEZvcm1EcmFmdEFjdGlvbiBlcSAnVXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9IGVxICRGb3JtRHJhZnQtPntGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEUkFGVDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgQW5vdGhlciBkcmFmdCB3aXRoIHRoZSBjaG9zZW4gbmFtZSBhbHJlYWR5IGV4aXN0cy4KICAgICAgICAgICAgICAgICAgICAlRm9ybURyYWZ0UmVzcG9uc2UgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoICJGb3JtRHJhZnQgbmFtZSAlcyBpcyBhbHJlYWR5IGluIHVzZSEiLCAkVGl0bGUgKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGxhc3QgRFJBRlQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgUGVyZm9ybSBkcmFmdCBhY3Rpb24gaW5zdGVhZCBvZiBzYXZpbmcgZm9ybSBkYXRhIGluIHRpY2tldC9hcnRpY2xlLgogICAgICAgIGlmICggJEZvcm1EcmFmdEFjdGlvbiAmJiAhJUZvcm1EcmFmdFJlc3BvbnNlICkgewoKICAgICAgICAgICAgIyBSZXNldCBGb3JtRHJhZnRJRCB0byBwcmV2ZW50IHVwZGF0aW5nIGV4aXN0aW5nIGRyYWZ0LgogICAgICAgICAgICBpZiAoICRGb3JtRHJhZnRBY3Rpb24gZXEgJ0FkZCcgJiYgJEdldFBhcmFte0Zvcm1EcmFmdElEfSApIHsKICAgICAgICAgICAgICAgICRQYXJhbU9iamVjdC0+e1F1ZXJ5fS0+cGFyYW0oCiAgICAgICAgICAgICAgICAgICAgLW5hbWUgID0+ICdGb3JtRHJhZnRJRCcsCiAgICAgICAgICAgICAgICAgICAgLXZhbHVlID0+ICcnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEZvcm1EcmFmdEFjdGlvbk9rOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkRm9ybURyYWZ0QWN0aW9uIGVxICdBZGQnCiAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgKCAkRm9ybURyYWZ0QWN0aW9uIGVxICdVcGRhdGUnICYmICRHZXRQYXJhbXtGb3JtRHJhZnRJRH0gKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRm9ybURyYWZ0QWN0aW9uT2sgPSAkUGFyYW1PYmplY3QtPlNhdmVGb3JtRHJhZnQoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRGb3JtRHJhZnRBY3Rpb24gZXEgJ0RlbGV0ZScgJiYgJEdldFBhcmFte0Zvcm1EcmFmdElEfSApIHsKICAgICAgICAgICAgICAgICRGb3JtRHJhZnRBY3Rpb25PayA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGb3JtRHJhZnQnKS0+Rm9ybURyYWZ0RGVsZXRlKAogICAgICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRHZXRQYXJhbXtGb3JtRHJhZnRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRGb3JtRHJhZnRBY3Rpb25PaykgewogICAgICAgICAgICAgICAgJEZvcm1EcmFmdFJlc3BvbnNle1N1Y2Nlc3N9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICVGb3JtRHJhZnRSZXNwb25zZSA9ICgKICAgICAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBwZXJmb3JtIHJlcXVlc3RlZCBkcmFmdCBhY3Rpb24hJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICglRm9ybURyYWZ0UmVzcG9uc2UpIHsKCiAgICAgICAgICAgICMgYnVpbGQgSlNPTiBvdXRwdXQKICAgICAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJUZvcm1EcmFmdFJlc3BvbnNlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZW5kIEpTT04gcmVzcG9uc2UKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHBlbmRpbmcgZGF0ZQogICAgICAgIGlmICggJFN0YXRlRGF0YXtUeXBlTmFtZX0gJiYgJFN0YXRlRGF0YXtUeXBlTmFtZX0gPX4gL15wZW5kaW5nL2kgKSB7CgogICAgICAgICAgICAjIGNvbnZlcnQgcGVuZGluZyBkYXRlIHRvIGEgZGF0ZXRpbWUgb2JqZWN0CiAgICAgICAgICAgIG15ICRQZW5kaW5nRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBTZWNvbmQgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBjdXJyZW50IHN5c3RlbSBlcG9jaAogICAgICAgICAgICBteSAkQ3VyU3lzdGVtRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICggISRQZW5kaW5nRGF0ZVRpbWVPYmplY3QgfHwgJFBlbmRpbmdEYXRlVGltZU9iamVjdCA8ICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdCApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRFcnJvcntEYXRlSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSByZWNpcGllbnQgaGFzIGJlZW4gY2hvc2VuCiAgICAgICAgaWYgKCAhJEdldFBhcmFte1RvfSApIHsKICAgICAgICAgICAgJEVycm9yeydUb0ludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHNvbWUgdmFsdWVzCiAgICAgICAgTElORToKICAgICAgICBmb3IgbXkgJExpbmUgKHF3KFRvIENjIEJjYykpIHsKICAgICAgICAgICAgbmV4dCBMSU5FIGlmICEkR2V0UGFyYW17JExpbmV9OwogICAgICAgICAgICBmb3IgbXkgJEVtYWlsICggTWFpbDo6QWRkcmVzcy0+cGFyc2UoICRHZXRQYXJhbXskTGluZX0gKSApIHsKICAgICAgICAgICAgICAgIGlmICggISRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRW1haWwoIEFkZHJlc3MgPT4gJEVtYWlsLT5hZGRyZXNzKCkgKSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICRMaW5lIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHN1YmplY3QKICAgICAgICBpZiAoICEkR2V0UGFyYW17U3ViamVjdH0gKSB7CiAgICAgICAgICAgICRFcnJvcntTdWJqZWN0SW52YWxpZH0gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgYm9keQogICAgICAgIGlmICggISRHZXRQYXJhbXtCb2R5fSApIHsKICAgICAgICAgICAgJEVycm9ye0JvZHlJbnZhbGlkfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB0aW1lIHVuaXRzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJykKICAgICAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICYmICRHZXRQYXJhbXtUaW1lVW5pdHN9IGVxICcnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRFcnJvcntUaW1lVW5pdHNJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgc3ViamVjdAogICAgICAgIG15ICRUbiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE51bWJlckxvb2t1cCggVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0gKTsKICAgICAgICAkR2V0UGFyYW17U3ViamVjdH0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdWJqZWN0QnVpbGQoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkVG4sCiAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAkR2V0UGFyYW17U3ViamVjdH0gfHwgJycsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJUFydGljbGVQYXJhbTsKCiAgICAgICAgIyBydW4gY29tcG9zZSBtb2R1bGVzCiAgICAgICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlQ29tcG9zZU1vZHVsZScpIGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICMgdXNlIHRpY2tldCBRdWV1ZUlEIGluIGNvbXBvc2UgbW9kdWxlcwogICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkVGlja2V0e1F1ZXVlSUR9OwoKICAgICAgICAgICAgbXkgJUpvYnMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFydGljbGVDb21wb3NlTW9kdWxlJykgfTsKICAgICAgICAgICAgZm9yIG15ICRKb2IgKCBzb3J0IGtleXMgJUpvYnMgKSB7CgogICAgICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICAgICAgaWYgKCAhJE1haW5PYmplY3QtPlJlcXVpcmUoICRKb2JzeyRKb2J9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJEpvYnN7JEpvYn0tPntNb2R1bGV9LT5uZXcoICV7JFNlbGZ9LCBEZWJ1ZyA9PiAkU2VsZi0+e0RlYnVnfSApOwoKICAgICAgICAgICAgICAgIG15ICRNdWx0aXBsZTsKCiAgICAgICAgICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICAgICAgICAgIFBBUkFNRVRFUjoKICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyICggJE9iamVjdC0+T3B0aW9uKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEpvYnN7JEpvYn0tPntQYXJhbVR5cGV9ICYmICRKb2JzeyRKb2J9LT57UGFyYW1UeXBlfSBuZSAnU2luZ2xlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQHsgJEdldFBhcmFteyRQYXJhbWV0ZXJ9IH0gPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1ldGVyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRNdWx0aXBsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgUEFSQU1FVEVSOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICAgICAgJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBTdG9yZU5ldyA9PiAxLAogICAgICAgICAgICAgICAgICAgIENvbmZpZyAgID0+ICRKb2JzeyRKb2J9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZ2V0IG9wdGlvbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb24KICAgICAgICAgICAgICAgICMgYW5kIGFkZCB0aGVtIGJhY2sgdG8gdGhlIHNlbGVjdGlvbiBzbyB0aGF0IHRoZSBzdWJtaXQKICAgICAgICAgICAgICAgICMgd2lsbCBjb250YWluIG9wdGlvbnMgdGhhdCB3ZXJlIGhpZGRlbiBmcm9tIHRoZSBhZ2VudAogICAgICAgICAgICAgICAgbXkgJEtleSA9ICRPYmplY3QtPk9wdGlvbiggJUdldFBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKTsKCiAgICAgICAgICAgICAgICBpZiAoICRPYmplY3QtPmNhbignR2V0T3B0aW9uc1RvUmVtb3ZlQUpBWCcpICkgewogICAgICAgICAgICAgICAgICAgIG15IEBSZW1vdmVkT3B0aW9ucyA9ICRPYmplY3QtPkdldE9wdGlvbnNUb1JlbW92ZUFKQVgoJUdldFBhcmFtKTsKICAgICAgICAgICAgICAgICAgICBpZiAoQFJlbW92ZWRPcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkTXVsdGlwbGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkUmVtb3ZlZE9wdGlvbiAoQFJlbW92ZWRPcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkR2V0UGFyYW17JEtleX0gfSwgJFJlbW92ZWRPcHRpb247CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17JEtleX0gPSBzaGlmdCBAUmVtb3ZlZE9wdGlvbnM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB0aWNrZXQgcGFyYW1zCiAgICAgICAgICAgICAgICAlQXJ0aWNsZVBhcmFtID0gKAogICAgICAgICAgICAgICAgICAgICVBcnRpY2xlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJE9iamVjdC0+QXJ0aWNsZU9wdGlvbiggJUdldFBhcmFtLCAlQXJ0aWNsZVBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBnZXQgZXJyb3JzCiAgICAgICAgICAgICAgICAlRXJyb3IgPSAoCiAgICAgICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAgICAgICAgICRPYmplY3QtPkVycm9yKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBSb3RoZXIgT1NTIC8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKCiAgICAgICAgIyBza2lwIHZhbGlkYXRpb24gb2YgaGlkZGVuIGZpZWxkcwogICAgICAgIG15ICVWaXNpYmlsaXR5OwoKICAgICAgICAjIHRyYW5zZm9ybSBkeW5hbWljIGZpZWxkIGRhdGEgaW50byBERk5hbWUgPT4gREZOYW1lIHBhaXIKICAgICAgICBteSAlRHluYW1pY0ZpZWxkQWNsID0gbWFwIHsgJF8tPntOYW1lfSA9PiAkXy0+e05hbWV9IH0gQHskRHluYW1pY0ZpZWxkfTsKCiAgICAgICAgIyBjYWxsIHRpY2tldCBBQ0xzIGZvciBEeW5hbWljRmllbGRzIHRvIGNoZWNrIGZpZWxkIHZpc2liaWxpdHkKICAgICAgICBteSAkQUNMUmVzdWx0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdGb3JtJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gXCVEeW5hbWljRmllbGRBY2wsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCRBQ0xSZXN1bHQpIHsKICAgICAgICAgICAgJVZpc2liaWxpdHkgPSBtYXAgeyAnRHluYW1pY0ZpZWxkXycgLiAkXy0+e05hbWV9ID0+IDAgfSBAeyREeW5hbWljRmllbGR9OwogICAgICAgICAgICBteSAlQWNsRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNvcnQga2V5cyAlQWNsRGF0YSApIHsKICAgICAgICAgICAgICAgICRWaXNpYmlsaXR5eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQgfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICVWaXNpYmlsaXR5ID0gbWFwIHsgJ0R5bmFtaWNGaWVsZF8nIC4gJF8tPntOYW1lfSA9PiAxIH0gQHskRHluYW1pY0ZpZWxkfTsKICAgICAgICB9CiMgRU8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKCiAgICAgICAgIyBjcmVhdGUgaHRtbCBzdHJpbmdzIGZvciBhbGwgZHluYW1pYyBmaWVsZHMKICAgICAgICBteSAlRHluYW1pY0ZpZWxkSFRNTDsKCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXNGaWx0ZXI7CgogICAgICAgICAgICBteSAkSXNBQ0xSZWR1Y2libGUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNBQ0xSZWR1Y2libGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRJc0FDTFJlZHVjaWJsZSkgewoKICAgICAgICAgICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UG9zc2libGVWYWx1ZXNHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgZmllbGQgaGFzIFBvc3NpYmxlVmFsdWVzIHByb3BlcnR5IGluIGl0cyBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRQb3NzaWJsZVZhbHVlcykgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBwb3NzaWJsZSB2YWx1ZXMga2V5ID0+IHZhbHVlIHRvIGtleSA9PiBrZXkgZm9yIEFDTHMgdXNpbmcgYSBIYXNoIHNsaWNlCiAgICAgICAgICAgICAgICAgICAgbXkgJUFjbERhdGEgPSAleyRQb3NzaWJsZVZhbHVlc307CiAgICAgICAgICAgICAgICAgICAgQEFjbERhdGF7IGtleXMgJUFjbERhdGEgfSA9IGtleXMgJUFjbERhdGE7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IHBvc3NpYmxlIHZhbHVlcyBmaWx0ZXIgZnJvbSBBQ0xzCiAgICAgICAgICAgICAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gXCVBY2xEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICgkQUNMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVGaWx0ZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgRmlsZXIga2V5ID0+IGtleSBiYWNrIHRvIGtleSA9PiB2YWx1ZSB1c2luZyBtYXAKICAgICAgICAgICAgICAgICAgICAgICAgJXskUG9zc2libGVWYWx1ZXNGaWx0ZXJ9ID0gbWFwIHsgJF8gPT4gJFBvc3NpYmxlVmFsdWVzLT57JF99IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJUZpbHRlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiMgICAgICAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSgKIyAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKIyAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBvc3NpYmxlVmFsdWVzRmlsdGVyLAojICAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiMgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICAgID0+CiMgICAgICAgICAgICAgICAgICAgICAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9PSAyLAojICAgICAgICAgICAgICk7CiMKIyAgICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmFsaWRhdGlvblJlc3VsdCkgKSB7CiMgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKIyAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAojICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSB2YWxpZGF0aW9uIG9uIGZpZWxkICVzIScsCiMgICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSwKIyAgICAgICAgICAgICAgICAgICAgICksCiMgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiMgICAgICAgICAgICAgICAgICk7CiMgICAgICAgICAgICAgfQojCiMgICAgICAgICAgICAgIyBwcm9wYWdhdGUgdmFsaWRhdGlvbiBlcnJvciB0byB0aGUgRXJyb3IgdmFyaWFibGUgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlIGZyb250ZW5kCiMgICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKIyAgICAgICAgICAgICAgICAgJEVycm9yeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICcgU2VydmVyRXJyb3InOwojICAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQ7CgogICAgICAgICAgICAjIGRvIG5vdCB2YWxpZGF0ZSBvbiBpbnZpc2libGUgZmllbGRzCiAgICAgICAgICAgIGlmICggJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewoKICAgICAgICAgICAgICAgICRWYWxpZGF0aW9uUmVzdWx0ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlVmFsaWRhdGUoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRDb25maWctPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID09IDIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRWYWxpZGF0aW9uUmVzdWx0KSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBwZXJmb3JtIHZhbGlkYXRpb24gb24gZmllbGQgJXMhJywgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSApLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHByb3BhZ2F0ZSB2YWxpZGF0aW9uIGVycm9yIHRvIHRoZSBFcnJvciB2YXJpYWJsZSB0byBiZSBkZXRlY3RlZCBieSB0aGUgZnJvbnRlbmQKICAgICAgICAgICAgICAgIGlmICggJFZhbGlkYXRpb25SZXN1bHQtPntTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgojIEVPIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiAgICAgICAgICAgICMgZ2V0IGZpZWxkIGh0bWwKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0KICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICAgICAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9PSAyLAogICAgICAgICAgICAgICAgICAgIFNlcnZlckVycm9yICAgICA9PiAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSAgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICRWYWxpZGF0aW9uUmVzdWx0LT57RXJyb3JNZXNzYWdlfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIEFKQVhVcGRhdGUgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVwZGF0YWJsZUZpZWxkcyA9PiAkU2VsZi0+X0dldEZpZWxkc1RvVXBkYXRlKCksCiAgICAgICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfSApIHsKCiAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGRvbid0IHNhdmUgZm9ybSBpZiBhIGRyYWZ0IHdhcyBsb2FkZWQuCiAgICAgICAgICAgICVFcnJvciA9ICggTG9hZGVkRm9ybURyYWZ0ID0+IDEgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGhlcmUgaXMgYW4gZXJyb3IKICAgICAgICBpZiAoJUVycm9yKSB7CgogICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnU21hbGwnLAogICAgICAgICAgICAgICAgQm9keUNsYXNzID0+ICdQb3B1cCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFdoZW4gYSBkcmFmdCBpcyBsb2FkZWQsIGluZm9ybSBhIHVzZXIgdGhhdCBhcnRpY2xlIHN1YmplY3Qgd2lsbCBiZSBlbXB0eQogICAgICAgICAgICAjIGlmIGNvbnRhaW5zIG9ubHkgdGhlIHRpY2tldCBob29rIChpZiBub3RoaW5nIGlzIG1vZGlmaWVkKS4KICAgICAgICAgICAgaWYgKCAkRXJyb3J7TG9hZGVkRm9ybURyYWZ0fSApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnQXJ0aWNsZSBzdWJqZWN0IHdpbGwgYmUgZW1wdHkgaWYgdGhlIHN1YmplY3QgY29udGFpbnMgb25seSB0aGUgdGlja2V0IGhvb2shJwogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkR2V0UGFyYW17U3RhbmRhcmRSZXNwb25zZX0gPSAkR2V0UGFyYW17Qm9keX07CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrKAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIE5leHRTdGF0ZXMgPT4gJFNlbGYtPl9HZXROZXh0U3RhdGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBSZXNwb25zZUZvcm1hdCAgICAgID0+ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJEdldFBhcmFte0JvZHl9ICksCiAgICAgICAgICAgICAgICBFcnJvcnMgICAgICAgICAgICAgID0+IFwlRXJyb3IsCiAgICAgICAgICAgICAgICBNdWx0aXBsZUN1c3RvbWVyICAgID0+IFxATXVsdGlwbGVDdXN0b21lciwKICAgICAgICAgICAgICAgIE11bHRpcGxlQ3VzdG9tZXJDYyAgPT4gXEBNdWx0aXBsZUN1c3RvbWVyQ2MsCiAgICAgICAgICAgICAgICBNdWx0aXBsZUN1c3RvbWVyQmNjID0+IFxATXVsdGlwbGVDdXN0b21lckJjYywKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzICAgICAgICAgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFRpY2tldEJhY2tUeXBlICAgICAgPT4gJFRpY2tldEJhY2tUeXBlLAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZEhUTUwgPT4gXCVEeW5hbWljRmllbGRIVE1MLAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAojIFJvdGhlciBPU1MgLyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQogICAgICAgICAgICAgICAgVmlzaWJpbGl0eSAgICAgICA9PiBcJVZpc2liaWxpdHksCiMgRU8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyByZXBsYWNlIDxPVE9CT19USUNLRVRfU1RBVEU+IHdpdGggbmV4dCB0aWNrZXQgc3RhdGUgbmFtZQogICAgICAgIGlmICggJFN0YXRlRGF0YXtOYW1lfSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID1+IHMvPE9UT0JPX1RJQ0tFVF9TVEFURT4vJFN0YXRlRGF0YXtOYW1lfS9nOwogICAgICAgICAgICAkR2V0UGFyYW17Qm9keX0gPX4gcy8mbHQ7T1RPQk9fVElDS0VUX1NUQVRFJmd0Oy8kU3RhdGVEYXRhe05hbWV9L2c7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBwcmUgbG9hZGVkIGF0dGFjaG1lbnRzCiAgICAgICAgbXkgQEF0dGFjaG1lbnREYXRhID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc3VibWl0IGF0dGFjaG1lbnQKICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkUGFyYW1PYmplY3QtPkdldFVwbG9hZEFsbCgKICAgICAgICAgICAgUGFyYW0gPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICk7CiAgICAgICAgaWYgKCVVcGxvYWRTdHVmZikgewogICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50RGF0YSwgXCVVcGxvYWRTdHVmZjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHJlY2lwaWVudHMKICAgICAgICBteSAkUmVjaXBpZW50cyA9ICcnOwogICAgICAgIExJTkU6CiAgICAgICAgZm9yIG15ICRMaW5lIChxdyhUbyBDYyBCY2MpKSB7CgogICAgICAgICAgICBuZXh0IExJTkUgaWYgISRHZXRQYXJhbXskTGluZX07CgogICAgICAgICAgICBpZiAoJFJlY2lwaWVudHMpIHsKICAgICAgICAgICAgICAgICRSZWNpcGllbnRzIC49ICcsICc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFJlY2lwaWVudHMgLj0gJEdldFBhcmFteyRMaW5lfTsKICAgICAgICB9CgogICAgICAgIG15ICRNaW1lVHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAkTWltZVR5cGUgPSAndGV4dC9odG1sJzsKCiAgICAgICAgICAgICMgcmVtb3ZlIHVudXNlZCBpbmxpbmUgaW1hZ2VzCiAgICAgICAgICAgIG15IEBOZXdBdHRhY2htZW50RGF0YTsKICAgICAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudERhdGEpIHsKICAgICAgICAgICAgICAgIG15ICRDb250ZW50SUQgPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgICAgICBpZiAoICRDb250ZW50SUQgJiYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvaW1hZ2UvaSApICkgewogICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SURIVE1MUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgICAgICBUZXh0ID0+ICRDb250ZW50SUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyB3b3JrYXJvdW5kIGZvciBsaW5rIGVuY29kZSBvZiByaWNoIHRleHQgZWRpdG9yLCBzZWUgYnVnIzUwNTMKICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudElETGlua0VuY29kZSA9ICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJENvbnRlbnRJRCk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID1+IHMvKENvbnRlbnRJRD0pJENvbnRlbnRJRExpbmtFbmNvZGUvJDEkQ29udGVudElEL2c7CgogICAgICAgICAgICAgICAgICAgICMgSUYgdGhlIGltYWdlIGlzIHJlZmVyZW5jZWQgaW4gdGhlIGJvZHkgc2V0IGl0IGFzIGlubGluZS4KICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtCb2R5fSA9fiAvKFxRJENvbnRlbnRJREhUTUxRdW90ZVxFfFxRJENvbnRlbnRJRFxFKS9pICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSA9ICdpbmxpbmUnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRBdHRhY2htZW50LT57RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgYXR0YWNobWVudCBpZiBub3QgbGlua2VkIGluIGJvZHkuCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciBpbmxpbmUgaW1hZ2VzIGFuZCBub3JtYWwgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgIHB1c2ggQE5ld0F0dGFjaG1lbnREYXRhLCBcJXskQXR0YWNobWVudH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQEF0dGFjaG1lbnREYXRhID0gQE5ld0F0dGFjaG1lbnREYXRhOwoKICAgICAgICAgICAgIyB2ZXJpZnkgSFRNTCBkb2N1bWVudAogICAgICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dERvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFte0JvZHl9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJElzVmlzaWJsZUZvckN1c3RvbWVyID0gJENvbmZpZy0+e0lzVmlzaWJsZUZvckN1c3RvbWVyRGVmYXVsdH07CiAgICAgICAgaWYgKCAkR2V0UGFyYW17SXNWaXNpYmxlRm9yQ3VzdG9tZXJQcmVzZW50fSApIHsKICAgICAgICAgICAgJElzVmlzaWJsZUZvckN1c3RvbWVyID0gJEdldFBhcmFte0lzVmlzaWJsZUZvckN1c3RvbWVyfSA/IDEgOiAwOwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgYXR0cmlidXRlcyBsaWtlIHNlbmRlciBhZGRyZXNzCiAgICAgICAgbXkgJURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGVtcGxhdGVHZW5lcmF0b3InKS0+QXR0cmlidXRlcygKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIERhdGEgICAgID0+IHt9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZW5kIGVtYWlsCiAgICAgICAgbXkgJEFydGljbGVJRCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVNlbmQoCiAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+ICRJc1Zpc2libGVGb3JDdXN0b21lciwKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdTZW5kQW5zd2VyJywKICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gIlwlXCUkUmVjaXBpZW50cyIsCiAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICREYXRhe0Zyb219LAogICAgICAgICAgICBUbyAgICAgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17VG99LAogICAgICAgICAgICBDYyAgICAgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17Q2N9LAogICAgICAgICAgICBCY2MgICAgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17QmNjfSwKICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJEdldFBhcmFte1N1YmplY3R9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgSW5SZXBseVRvICAgICAgICAgICAgPT4gJEdldFBhcmFte0luUmVwbHlUb30sCiAgICAgICAgICAgIFJlZmVyZW5jZXMgICAgICAgICAgID0+ICRHZXRQYXJhbXtSZWZlcmVuY2VzfSwKICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgTWltZVR5cGUgICAgICAgICAgICAgPT4gJE1pbWVUeXBlLAogICAgICAgICAgICBBdHRhY2htZW50ICAgICAgICAgICA9PiBcQEF0dGFjaG1lbnREYXRhLAogICAgICAgICAgICAlQXJ0aWNsZVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgZXJyb3IgcGFnZQogICAgICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgIyB0aW1lIGFjY291bnRpbmcKICAgICAgICBpZiAoICRHZXRQYXJhbXtUaW1lVW5pdHN9ICkgewogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVGltZVVuaXQgID0+ICRHZXRQYXJhbXtUaW1lVW5pdHN9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IGR5bmFtaWMgZmllbGRzCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkVmlzaWJpbGl0eXsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSJ9OwojIEVPIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCgogICAgICAgICAgICAjIHNldCB0aGUgb2JqZWN0IElEIChUaWNrZXRJRCBvciBBcnRpY2xlSUQpIGRlcGVuZGluZyBvbiB0aGUgZmllbGQgY29uZmlncmF0aW9uCiAgICAgICAgICAgIG15ICRPYmplY3RJRCA9ICREeW5hbWljRmllbGRDb25maWctPntPYmplY3RUeXBlfSBlcSAnQXJ0aWNsZScgPyAkQXJ0aWNsZUlEIDogJFNlbGYtPntUaWNrZXRJRH07CgogICAgICAgICAgICAjIHNldCB0aGUgdmFsdWUKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkT2JqZWN0SUQsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgc3RhdGUKICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgU3RhdGVJRCAgID0+ICRHZXRQYXJhbXtTdGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3VsZCBJIHNldCBhbiB1bmxvY2s/CiAgICAgICAgaWYgKCAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXmNsb3NlL2kgKSB7CiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tTZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIExvY2sgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgcGVuZGluZyB0aW1lCiAgICAgICAgZWxzaWYgKCAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXnBlbmRpbmcvaSApIHsKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFllYXIgICAgID0+ICRHZXRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoICAgID0+ICRHZXRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkR2V0UGFyYW17RGF5fSwKICAgICAgICAgICAgICAgIEhvdXIgICAgID0+ICRHZXRQYXJhbXtIb3VyfSwKICAgICAgICAgICAgICAgIE1pbnV0ZSAgID0+ICRHZXRQYXJhbXtNaW51dGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb2cgdXNlIHJlc3BvbnNlIGlkIGFuZCByZXBseSBhcnRpY2xlIGlkICh1c2VmdWwgZm9yIHJlc3BvbnNlIGRpYWdub3N0aWNzKQogICAgICAgICRUaWNrZXRPYmplY3QtPkhpc3RvcnlBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAiUmVzcG9uc2VUZW1wbGF0ZSAoJEdldFBhcmFte1Jlc3BvbnNlSUR9LyRHZXRQYXJhbXtSZXBseUFydGljbGVJRH0vJEFydGljbGVJRCkiLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ01pc2MnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIENyZWF0ZVVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZW1vdmUgcHJlIHN1Ym1pdGVkIGF0dGFjaG1lbnRzCiAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmUoIEZvcm1JRCA9PiAkR2V0UGFyYW17Rm9ybUlEfSApOwoKICAgICAgICAjIElmIGZvcm0gd2FzIGNhbGxlZCBiYXNlZCBvbiBhIGRyYWZ0LAogICAgICAgICMgICBkZWxldGUgZHJhZnQgc2luY2UgaXRzIGNvbnRlbnQgaGFzIG5vdyBiZWVuIHVzZWQuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9CiAgICAgICAgICAgICYmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Rm9ybURyYWZ0JyktPkZvcm1EcmFmdERlbGV0ZSgKICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRHZXRQYXJhbXtGb3JtRHJhZnRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NvdWxkIG5vdCBkZWxldGUgZHJhZnQhJyksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlZGlyZWN0CiAgICAgICAgaWYgKAogICAgICAgICAgICAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXmNsb3NlL2kKICAgICAgICAgICAgJiYgISRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UmVkaXJlY3RBZnRlckNsb3NlRGlzYWJsZWQnKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgICAgIFVSTCA9PiAoICRTZWxmLT57TGFzdFNjcmVlbk92ZXJ2aWV3fSB8fCAnQWN0aW9uPUFnZW50RGFzaGJvYXJkJyApLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgVVJMID0+ICJBY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRTZWxmLT57VGlja2V0SUR9O0FydGljbGVJRD0kQXJ0aWNsZUlEIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIFNNSU1FIC8gUEdQIGlmIGN1c3RvbWVyIGhhcyBjaGFuZ2VkCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWFVwZGF0ZScgKSB7CgogICAgICAgIG15IEBFeHRlbmRlZERhdGE7CgogICAgICAgICMgcnVuIGNvbXBvc2UgbW9kdWxlcwogICAgICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZUNvbXBvc2VNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CgogICAgICAgICAgICAjIHVzZSB0aWNrZXQgUXVldWVJRCBpbiBjb21wb3NlIG1vZHVsZXMKICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJFRpY2tldHtRdWV1ZUlEfTsKCiAgICAgICAgICAgIG15ICVKb2JzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlQ29tcG9zZU1vZHVsZScpIH07CiAgICAgICAgICAgIEpPQjoKICAgICAgICAgICAgZm9yIG15ICRKb2IgKCBzb3J0IGtleXMgJUpvYnMgKSB7CgogICAgICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICAgICAgbmV4dCBKT0IgaWYgISRNYWluT2JqZWN0LT5SZXF1aXJlKCAkSm9ic3skSm9ifS0+e01vZHVsZX0gKTsKCiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJEpvYnN7JEpvYn0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgRGVidWcgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRNdWx0aXBsZTsKCiAgICAgICAgICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICAgICAgICAgIFBBUkFNRVRFUjoKICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyICggJE9iamVjdC0+T3B0aW9uKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEpvYnN7JEpvYn0tPntQYXJhbVR5cGV9ICYmICRKb2JzeyRKb2J9LT57UGFyYW1UeXBlfSBuZSAnU2luZ2xlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQHsgJEdldFBhcmFteyRQYXJhbWV0ZXJ9IH0gPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1ldGVyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRNdWx0aXBsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgUEFSQU1FVEVSOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICAgICAgbXkgJURhdGEgPSAkT2JqZWN0LT5EYXRhKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApOwoKICAgICAgICAgICAgICAgICMgZ2V0IEFKQVggcGFyYW0gdmFsdWVzCiAgICAgICAgICAgICAgICBpZiAoICRPYmplY3QtPmNhbignR2V0UGFyYW1BSkFYJykgKSB7CiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtID0gKCAlR2V0UGFyYW0sICRPYmplY3QtPkdldFBhcmFtQUpBWCglR2V0UGFyYW0pICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBnZXQgb3B0aW9ucyB0aGF0IGhhdmUgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb24gdmlzaWJsZQogICAgICAgICAgICAgICAgIyB0byB0aGUgYWdlbnQuIFRoZXNlIG9wdGlvbnMgd2lsbCBiZSBhZGRlZCBhZ2FpbiBvbiBzdWJtaXQuCiAgICAgICAgICAgICAgICBpZiAoICRPYmplY3QtPmNhbignR2V0T3B0aW9uc1RvUmVtb3ZlQUpBWCcpICkgewogICAgICAgICAgICAgICAgICAgIG15IEBPcHRpb25zVG9SZW1vdmUgPSAkT2JqZWN0LT5HZXRPcHRpb25zVG9SZW1vdmVBSkFYKCVHZXRQYXJhbSk7CgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkT3B0aW9uVG9SZW1vdmUgKEBPcHRpb25zVG9SZW1vdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICREYXRheyRPcHRpb25Ub1JlbW92ZX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkT2JqZWN0LT5PcHRpb24oICVHZXRQYXJhbSwgQ29uZmlnID0+ICRKb2JzeyRKb2J9ICk7CiAgICAgICAgICAgICAgICBpZiAoJEtleSkgewogICAgICAgICAgICAgICAgICAgIHB1c2goCiAgICAgICAgICAgICAgICAgICAgICAgIEBFeHRlbmRlZERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17JEtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+ICRNdWx0aXBsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxNTAsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkTmV4dFN0YXRlcyA9ICRTZWxmLT5fR2V0TmV4dFN0YXRlcygKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgdXBkYXRlIER5bmFtaWMgRmllbGRzIFBvc3NpYmxlIFZhbHVlcyB2aWEgQUpBWAogICAgICAgIG15IEBEeW5hbWljRmllbGRBSkFYOwoKIyBSb3RoZXIgT1NTIC8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKIyAgICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiMgICAgICAgICBEWU5BTUlDRklFTEQ6CiMgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiMgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwojCiMgICAgICAgICAgICAgbXkgJElzQUNMUmVkdWNpYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAojICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKIyAgICAgICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0FDTFJlZHVjaWJsZScsCiMgICAgICAgICAgICAgKTsKIyAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzQUNMUmVkdWNpYmxlOwojCiMgICAgICAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlBvc3NpYmxlVmFsdWVzR2V0KAojICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKIyAgICAgICAgICAgICApOwojCiMgICAgICAgICAgICAgIyBjb252ZXJ0IHBvc3NpYmxlIHZhbHVlcyBrZXkgPT4gdmFsdWUgdG8ga2V5ID0+IGtleSBmb3IgQUNMcyB1c2luZyBhIEhhc2ggc2xpY2UKIyAgICAgICAgICAgICBteSAlQWNsRGF0YSA9ICV7JFBvc3NpYmxlVmFsdWVzfTsKIyAgICAgICAgICAgICBAQWNsRGF0YXsga2V5cyAlQWNsRGF0YSB9ID0ga2V5cyAlQWNsRGF0YTsKIwojICAgICAgICAgICAgICMgc2V0IHBvc3NpYmxlIHZhbHVlcyBmaWx0ZXIgZnJvbSBBQ0xzCiMgICAgICAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKIyAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAojICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKIyAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKIyAgICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkU2VsZi0+e1F1ZXVlSUR9LAojICAgICAgICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAojICAgICAgICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKIyAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJUFjbERhdGEsCiMgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAojICAgICAgICAgICAgICk7CiMgICAgICAgICAgICAgaWYgKCRBQ0wpIHsKIyAgICAgICAgICAgICAgICAgbXkgJUZpbHRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKIwojICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgRmlsZXIga2V5ID0+IGtleSBiYWNrIHRvIGtleSA9PiB2YWx1ZSB1c2luZyBtYXAKIyAgICAgICAgICAgICAgICAgJXskUG9zc2libGVWYWx1ZXN9ID0gbWFwIHsgJF8gPT4gJFBvc3NpYmxlVmFsdWVzLT57JF99IH0ga2V5cyAlRmlsdGVyOwojICAgICAgICAgICAgIH0KIwojICAgICAgICAgICAgIG15ICREYXRhVmFsdWVzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uRGF0YUdldCgKIyAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiMgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzICAgICA9PiAkUG9zc2libGVWYWx1ZXMsCiMgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKIyAgICAgICAgICAgICApIHx8ICRQb3NzaWJsZVZhbHVlczsKIwojICAgICAgICAgICAgICMgYWRkIGR5bmFtaWMgZmllbGQgdG8gdGhlIGxpc3Qgb2YgZmllbGRzIHRvIHVwZGF0ZQojICAgICAgICAgICAgIHB1c2goCiMgICAgICAgICAgICAgICAgIEBEeW5hbWljRmllbGRBSkFYLAojICAgICAgICAgICAgICAgICB7CiMgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiMgICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkRGF0YVZhbHVlcywKIyAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICREeW5hbWljRmllbGRWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAojICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntUcmFuc2xhdGFibGVWYWx1ZXN9IHx8IDAsCiMgICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiMgICAgICAgICAgICAgICAgIH0KIyAgICAgICAgICAgICApOwojICAgICAgICAgfQogICAgICAgIG15ICRFbGVtZW50Q2hhbmdlZCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbGVtZW50Q2hhbmdlZCcgKSB8fCAnJzsKICAgICAgICBpZiAoICRFbGVtZW50Q2hhbmdlZCBlcSAnU3RhdGVJRCcgKSB7CiAgICAgICAgICAgICRFbGVtZW50Q2hhbmdlZCA9ICdOZXh0U3RhdGVJRCc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBsaXN0IHR5cGUKICAgICAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgICAgICB9CgogICAgICAgIG15ICRBdXRvc2VsZWN0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkF1dG9zZWxlY3QnKSB8fCB1bmRlZjsKICAgICAgICBteSAkQUNMUHJlc2VsZWN0aW9uOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkFDTFByZXNlbGVjdGlvbicpICkgewoKICAgICAgICAgICAgIyBnZXQgY2FjaGVkIHByZXNlbGVjdGlvbiBydWxlcwogICAgICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGlja2V0QUNMJywKICAgICAgICAgICAgICAgIEtleSAgPT4gJ1ByZXNlbGVjdGlvbicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24gKSB7CiAgICAgICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5TZXRBQ0xQcmVzZWxlY3Rpb25DYWNoZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAlQ29udmVyZ2VuY2UgPSAoCiAgICAgICAgICAgIFN0ZEZpZWxkcyA9PiAwLAogICAgICAgICAgICBGaWVsZHMgICAgPT4gMCwKICAgICAgICApOwogICAgICAgIG15ICVDaGFuZ2VkRWxlbWVudHMgICAgICAgID0gJEVsZW1lbnRDaGFuZ2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKCAkRWxlbWVudENoYW5nZWQgPT4gMSApIDogKCk7CiAgICAgICAgbXkgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQgPSAkRWxlbWVudENoYW5nZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoICRFbGVtZW50Q2hhbmdlZCA9PiAxICkgOiAoKTsKICAgICAgICBteSAlQ2hhbmdlZFN0ZEZpZWxkcyAgICAgICA9ICRFbGVtZW50Q2hhbmdlZCAmJiAkRWxlbWVudENoYW5nZWQgIX4gL15EeW5hbWljRmllbGRfLyA/ICggJEVsZW1lbnRDaGFuZ2VkID0+IDEgKSA6ICgpOwoKICAgICAgICBteSAkTG9vcFByb3RlY3Rpb24gPSAxMDA7CiAgICAgICAgbXkgJVN0ZEZpZWxkVmFsdWVzOwogICAgICAgIG15ICVEeW5GaWVsZFN0YXRlcyA9ICgKICAgICAgICAgICAgVmlzaWJpbGl0eSA9PiB7fSwKICAgICAgICAgICAgRmllbGRzICAgICA9PiB7fSwKICAgICAgICApOwoKICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtGaWVsZHN9ICkgewoKICAgICAgICAgICAgIyBkZXRlcm1pbmUgc3RhbmRhcmQgZmllbGQgaW5wdXQKICAgICAgICAgICAgdW50aWwgKCAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSApIHsKCiAgICAgICAgICAgICAgICBteSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwoKICAgICAgICAgICAgICAgICMgd2hpY2ggc3RhbmRhcmQgZmllbGRzIHRvIGNoZWNrIC0gRmllbGRJRCA9PiBHZXRQYXJhbVZhbHVlIChuZWNjZXNzYXJ5IGZvciBEZXN0KQogICAgICAgICAgICAgICAgbXkgJUNoZWNrID0gKAogICAgICAgICAgICAgICAgICAgIE5leHRTdGF0ZUlEID0+ICdOZXh0U3RhdGVJRCcsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCRBQ0xQcmVzZWxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICBGSUVMRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJUNoZWNrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uLT57RmllbGRzfXskRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkRmllbGRJRCBub3QgZGVmaW5lZCBpbiBUaWNrZXRBQ0wgcHJlc2VsZWN0aW9uIHJ1bGVzISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPnskRmllbGRJRH0gJiYgJENoYW5nZWRFbGVtZW50c3skRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIHNvcnQga2V5cyAlQ2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24tPntSdWxlc317VGlja2V0fXskRWxlbWVudH17JEZpZWxkSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRFbGVtZW50fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRFbGVtZW50IG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxldGUgdW5hZmZlY3RlZCBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRDaGVja3skRmllbGRJRH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgdmFsdWUgb2Ygc3RhdGUKICAgICAgICAgICAgICAgICROZXh0U3RhdGVzID0gJFNlbGYtPl9HZXROZXh0U3RhdGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayB3aGV0aGVyIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgaXMgc3RpbGwgdmFsaWQgZm9yIHRoZSBmaWVsZAogICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17U3RhdGVJRH0gJiYgISROZXh0U3RhdGVzLT57ICRHZXRQYXJhbXtTdGF0ZUlEfSB9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGlmIG5vdCBlbXB0eSB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17U3RhdGVJRH0gICAgICAgICAgICAgICA9ICcnOwogICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7TmV4dFN0YXRlSUR9ID0gMTsKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3tOZXh0U3RhdGVJRH0gICA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhdXRvc2VsZWN0CiAgICAgICAgICAgICAgICBlbHNpZiAoICEkR2V0UGFyYW17U3RhdGVJRH0gJiYgJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPntOZXh0U3RhdGVJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1N0YXRlSUR9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkTmV4dFN0YXRlcywKICAgICAgICAgICAgICAgICAgICApIHx8ICcnOwogICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1N0YXRlSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTmV3Q2hhbmdlZEVsZW1lbnRze05leHRTdGF0ZUlEfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRze05leHRTdGF0ZUlEfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJU5ld0NoYW5nZWRFbGVtZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gJU5ld0NoYW5nZWRFbGVtZW50czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICgKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCwKICAgICAgICAgICAgICAgICAgICAlTmV3Q2hhbmdlZEVsZW1lbnRzLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRMb29wUHJvdGVjdGlvbi0tIDwgMSApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJhbiBpbnRvIHVucmVzb2x2YWJsZSBsb29wISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzICAgICAgICA9ICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0OwogICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICgpOwoKICAgICAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICBteSAlQ3VyRmllbGRTdGF0ZXM7CiAgICAgICAgICAgIGlmICglQ2hhbmdlZEVsZW1lbnRzKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdmFsdWVzIGFuZCB2aXNpYmlsaXR5IG9mIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgICAgICAlQ3VyRmllbGRTdGF0ZXMgPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkdldEZpZWxkU3RhdGVzKAogICAgICAgICAgICAgICAgICAgIFRpY2tldE9iamVjdCAgICAgICAgICAgICAgPT4gJFRpY2tldE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGQsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9PiAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkRWxlbWVudHMgICAgICAgICAgID0+IFwlQ2hhbmdlZEVsZW1lbnRzLCAgICAgICAgICAgICMgb3B0aW9uYWwgdG8gcmVkdWNlIEFDTCBldmFsdWF0aW9uCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgICAgICAgICAgICAgID0+ICRTZWxlY3RlZCB8fCAnJywKICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBOZXh0U3RhdGVJRCA9PiAkR2V0UGFyYW17U3RhdGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgQXV0b3NlbGVjdCAgICAgID0+ICRBdXRvc2VsZWN0LAogICAgICAgICAgICAgICAgICAgIEFDTFByZXNlbGVjdGlvbiA9PiAkQUNMUHJlc2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgIExvb3BQcm90ZWN0aW9uICA9PiBcJExvb3BQcm90ZWN0aW9uLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNvbWJpbmUgRmllbGRTdGF0ZXMKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze0ZpZWxkc30gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICMgc3RvcmUgbmV3IHZhbHVlcwogICAgICAgICAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBkeW5hbWljIGZpZWxkcyBjaGFuZ2VkLCBjaGVjayBzdGFuZGFyZCBmaWVsZHMgYWdhaW4KICAgICAgICAgICAgaWYgKCAlQ3VyRmllbGRTdGF0ZXMgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9ICkgKSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDA7CiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gbWFwIHsgJF8gPT4gMSB9IGtleXMgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtGaWVsZHN9ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJEluZGV4ICggc29ydCBrZXlzICV7ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9IH0gKSB7CiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkLT5bJEluZGV4XTsKCiAgICAgICAgICAgIG15ICREYXRhVmFsdWVzID0gJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JEluZGV4fXtOb3RBQ0xSZWR1Y2libGV9CiAgICAgICAgICAgICAgICA/ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9eyJEeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9In0KICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+QnVpbGRTZWxlY3Rpb25EYXRhR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9eyRJbmRleH17UG9zc2libGVWYWx1ZXN9LAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJEdldFBhcmFte0R5bmFtaWNGaWVsZH17IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifSwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgfHwgJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JEluZGV4fXtQb3NzaWJsZVZhbHVlc30KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBkeW5hbWljIGZpZWxkIHRvIHRoZSBsaXN0IG9mIGZpZWxkcyB0byB1cGRhdGUKICAgICAgICAgICAgcHVzaCBARHluYW1pY0ZpZWxkQUpBWCwgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gJERhdGFWYWx1ZXMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSJ9LAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntUcmFuc2xhdGFibGVWYWx1ZXN9IHx8IDAsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gKSApIHsKICAgICAgICAgICAgcHVzaCBARHluYW1pY0ZpZWxkQUpBWCwgewogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVzdHJpY3Rpb25zX1Zpc2liaWxpdHknLAogICAgICAgICAgICAgICAgRGF0YSA9PiAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQogICAgICAgIG15ICRKU09OID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb25KU09OKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBARXh0ZW5kZWREYXRhLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICROZXh0U3RhdGVzLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17U3RhdGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBARHluYW1pY0ZpZWxkQUpBWCwKCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1NtYWxsJywKICAgICAgICAgICAgQm9keUNsYXNzID0+ICdQb3B1cCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc3RkIGF0dGFjaG1lbnQgb2JqZWN0CiAgICAgICAgbXkgJFN0ZEF0dGFjaG1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RkQXR0YWNobWVudCcpOwoKICAgICAgICAjIGFkZCBzdGQuIGF0dGFjaG1lbnRzIHRvIGVtYWlsCiAgICAgICAgaWYgKCAkR2V0UGFyYW17UmVzcG9uc2VJRH0gKSB7CiAgICAgICAgICAgIG15ICVBbGxTdGRBdHRhY2htZW50cyA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJEdldFBhcmFte1Jlc3BvbnNlSUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBmb3IgKCBzb3J0IGtleXMgJUFsbFN0ZEF0dGFjaG1lbnRzICkgewogICAgICAgICAgICAgICAgbXkgJURhdGEgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudEdldCggSUQgPT4gJF8gKTsKICAgICAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGxhc3QgY3VzdG9tZXIgYXJ0aWNsZSBvciBzZWxlY3RlZCBhcnRpY2xlIC4uLgogICAgICAgIG15IEBBcnRpY2xlTGlzdDsKCiAgICAgICAgaWYgKCAkR2V0UGFyYW17QXJ0aWNsZUlEfSApIHsKCiAgICAgICAgICAgIEBBcnRpY2xlTGlzdCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkR2V0UGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBAQXJ0aWNsZUxpc3QgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICBPbmx5TGFzdCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJURhdGE7CgogICAgICAgIEFSVElDTEVNRVRBREFUQToKICAgICAgICBmb3IgbXkgJEFydGljbGVNZXRhRGF0YSAoQEFydGljbGVMaXN0KSB7CgogICAgICAgICAgICBuZXh0IEFSVElDTEVNRVRBREFUQSBpZiAhJEFydGljbGVNZXRhRGF0YTsKICAgICAgICAgICAgbmV4dCBBUlRJQ0xFTUVUQURBVEEgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRBcnRpY2xlTWV0YURhdGEpOwoKICAgICAgICAgICAgbXkgJEN1cnJlbnRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZU1ldGFEYXRhfSApOwoKICAgICAgICAgICAgJURhdGEgPSAkQ3VycmVudEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlTWV0YURhdGEtPntBcnRpY2xlSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJERhdGF7Q29tbXVuaWNhdGlvbkNoYW5uZWxOYW1lfSA9ICRDdXJyZW50QXJ0aWNsZUJhY2tlbmRPYmplY3QtPkNoYW5uZWxOYW1lR2V0KCk7CgogICAgICAgICAgICBsYXN0IEFSVElDTEVNRVRBREFUQTsKICAgICAgICB9CgogICAgICAgICMgTWVyZ2UgdGlja2V0IGRhdGEgd2l0aCBhcnRpY2xlIGRhdGEsIHNlZSBidWcjMTM5OTUgKGh0dHBzOi8vYnVncy5vdHJzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5OTUpLgogICAgICAgICVEYXRhID0gKCAlVGlja2V0LCAlRGF0YSApOwoKICAgICAgICAjIElmIGFydGljbGUgaXMgbm90IGEgTUlNRUJhc2UgYXJ0aWNsZSwgZ2V0IGN1c3RvbWVyIHJlY2lwaWVudHMgZnJvbSB0aGUgYmFja2VuZC4KICAgICAgICBpZiAoICEkRGF0YXtUb30gJiYgISREYXRhe0Zyb219ICkgewogICAgICAgICAgICBteSBAQ3VzdG9tZXJVc2VySURzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUN1c3RvbWVyUmVjaXBpZW50c0dldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkRGF0YXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CgogICAgICAgICAgICBteSBAQ3VzdG9tZXJSZWNpcGllbnRzOwoKICAgICAgICAgICAgQ1VTVE9NRVJfVVNFUl9JRDoKICAgICAgICAgICAgZm9yIG15ICRDdXN0b21lclVzZXJJRCAoQEN1c3RvbWVyVXNlcklEcykgewogICAgICAgICAgICAgICAgbXkgJUN1c3RvbWVyID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VyID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IENVU1RPTUVSX1VTRVJfSUQgaWYgISVDdXN0b21lcjsKCiAgICAgICAgICAgICAgICBwdXNoIEBDdXN0b21lclJlY2lwaWVudHMsICJcIiRDdXN0b21lcntVc2VyRmlyc3RuYW1lfSAkQ3VzdG9tZXJ7VXNlckxhc3RuYW1lfVwiIDwkQ3VzdG9tZXJ7VXNlckVtYWlsfT4iOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkRGF0YXtUb30gPSBqb2luKCAnLCcsIEBDdXN0b21lclJlY2lwaWVudHMgKSAvLyAnJzsKCiAgICAgICAgICAgICMgSW5jbHVkZSBzZW5kZXIgbmFtZSBpbiAnRnJvbScgZmllbGQgZm9yIGNvcnJlY3QgcXVvdGluZy4KICAgICAgICAgICAgbXkgJUFydGljbGVGaWVsZHMgPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlRmllbGRzKAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICREYXRhe0FydGljbGVJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICREYXRhe0Zyb219ID0gJEFydGljbGVGaWVsZHN7U2VuZGVyfS0+e1ZhbHVlfSAvLyAnJzsKICAgICAgICB9CgogICAgICAgICMgc2V0IE9yaWdGcm9tIGZvciBjb3JyZWN0IGVtYWlsIHF1b3RpbmcgKHh4eHggd3JvdGUpCiAgICAgICAgJERhdGF7T3JpZ0Zyb219ID0gJERhdGF7RnJvbX07CgogICAgICAgICMgY2hlY2sgYXJ0aWNsZSB0eXBlIGFuZCByZXBsYWNlIFRvIHdpdGggRnJvbSAoaW4gY2FzZSkKICAgICAgICBpZiAoICREYXRhe1NlbmRlclR5cGV9ICF+IC9jdXN0b21lci8gKSB7CgogICAgICAgICAgICAjIHJlcGxhY2UgRnJvbS9UbywgVG8vRnJvbSBiZWNhdXNlIHNlbmRlciBpcyBhZ2VudAogICAgICAgICAgICBteSAkVG8gPSAkRGF0YXtUb307CiAgICAgICAgICAgICREYXRhe1RvfSAgID0gJERhdGF7RnJvbX07CiAgICAgICAgICAgICREYXRhe0Zyb219ID0gJFRvOwoKICAgICAgICAgICAgJERhdGF7UmVwbHlUb30gPSAnJzsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgT3JpZ0Zyb21OYW1lICh0byBvbmx5IHVzZSB0aGUgcmVhbG5hbWUpCiAgICAgICAgJERhdGF7T3JpZ0Zyb21OYW1lfSA9ICREYXRhe09yaWdGcm9tfTsKICAgICAgICAkRGF0YXtPcmlnRnJvbU5hbWV9ID1+IHMvPC4qPnxcKC4qXCl8XCJ8O3wsLy9nOwogICAgICAgICREYXRhe09yaWdGcm9tTmFtZX0gPX4gcy8oICQpfCggICQpLy9nOwoKICAgICAgICAjIEZhbGxiYWNrIHRvIE9yaWdGcm9tIGlmIHJlYWxuYW1lIHBhcnQgaXMgZW1wdHkuCiAgICAgICAgaWYgKCAhJERhdGF7T3JpZ0Zyb21OYW1lfSApIHsKICAgICAgICAgICAgJERhdGF7T3JpZ0Zyb21OYW1lfSA9ICREYXRhe09yaWdGcm9tfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGN1c3RvbWVyIGRhdGEKICAgICAgICBteSAlQ3VzdG9tZXI7CiAgICAgICAgaWYgKCAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgJUN1c3RvbWVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYXJ0aWNsZSB0byBxdW90ZQogICAgICAgICREYXRhe0JvZHl9ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVF1b3RlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgPT4gJERhdGF7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICBVcGxvYWRDYWNoZU9iamVjdCA9PiAkVXBsb2FkQ2FjaGVPYmplY3QsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVNhZmV0eUNoZWNrUmVzdWx0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5TYWZldHkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkRGF0YXtCb2R5fSwKCiAgICAgICAgICAgICMgU3RyaXAgb3V0IGV4dGVybmFsIGNvbnRlbnQgaWYgQmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCBpcyBlbmFibGVkLgogICAgICAgICAgICBOb0V4dFNyY0xvYWQgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpCbG9ja0xvYWRpbmdSZW1vdGVDb250ZW50JyksCgogICAgICAgICAgICAjIERpc2FsbG93IHBvdGVudGlhbGx5IHVuc2FmZSBjb250ZW50LgogICAgICAgICAgICBOb0FwcGxldCAgICAgPT4gMSwKICAgICAgICAgICAgTm9PYmplY3QgICAgID0+IDEsCiAgICAgICAgICAgIE5vRW1iZWQgICAgICA9PiAxLAogICAgICAgICAgICBOb1NWRyAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9KYXZhU2NyaXB0ID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkRGF0YXtCb2R5fSA9ICRTYWZldHlDaGVja1Jlc3VsdHtTdHJpbmd9OwoKICAgICAgICAjIHJlc3RyaWN0IG51bWJlciBvZiBib2R5IGxpbmVzIGlmIGNvbmZpZ3VyZWQKICAgICAgICBpZiAoCiAgICAgICAgICAgICREYXRhe0JvZHl9CiAgICAgICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UmVzcG9uc2VRdW90ZU1heExpbmVzJykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJE1heExpbmVzID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpSZXNwb25zZVF1b3RlTWF4TGluZXMnKTsKCiAgICAgICAgICAgICMgc3BsaXQgYm9keSAtIG9uZSBlbGVtZW50IHBlciBsaW5lCiAgICAgICAgICAgIG15IEBCb2R5ID0gc3BsaXQgIlxuIiwgJERhdGF7Qm9keX07CgogICAgICAgICAgICAjIG9ubHkgbW9kaWZ5IGlmIGJvZHkgaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZAogICAgICAgICAgICBpZiAoIHNjYWxhciBAQm9keSA+ICRNYXhMaW5lcyApIHsKCiAgICAgICAgICAgICAgICAjIHNwbGljZSB0byBtYXguIGFsbG93ZWQgbGluZXMgYW5kIHJlYXNzZW1ibGUKICAgICAgICAgICAgICAgIEBCb2R5ICAgICAgID0gQEJvZHlbIDAgLi4gKCAkTWF4TGluZXMgLSAxICkgXTsKICAgICAgICAgICAgICAgICREYXRhe0JvZHl9ID0gam9pbiAiXG4iLCBAQm9keTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgICAgICMgcHJlcGFyZSBib2R5LCBzdWJqZWN0LCBSZXBseVRvIC4uLgogICAgICAgICAgICAjIHJld3JhcCBib2R5IGlmIGV4aXN0cwogICAgICAgICAgICBpZiAoICREYXRhe0JvZHl9ICkgewogICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gPX4gcy9cdC8gL2c7CiAgICAgICAgICAgICAgICBteSAkUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UXVvdGUnKSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgkUXVvdGUpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBxdW90ZSB0ZXh0CiAgICAgICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gPSAiPGJsb2NrcXVvdGUgdHlwZT1cImNpdGVcIj4kRGF0YXtCb2R5fTwvYmxvY2txdW90ZT5cbiI7CgogICAgICAgICAgICAgICAgICAgICMgY2xlYW51cCBub3QgY29tcGF0LiB0YWdzCiAgICAgICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dERvY3VtZW50Q2xlYW51cCgKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICREYXRhe0JvZHl9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gPSAiPGJyLz4iIC4gJERhdGF7Qm9keX07CgogICAgICAgICAgICAgICAgICAgIGlmICggJERhdGF7Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhe0JvZHl9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdEYXRlJykgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogJERhdGF7Q3JlYXRlVGltZX08YnIvPiIgLiAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZvciAocXcoU3ViamVjdCBSZXBseVRvIFJlcGx5LVRvIENjIFRvIEZyb20pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJERhdGF7JF99ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJF8pIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiAkRGF0YXskX308YnIvPiIgLiAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJEZyb20gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJSaWNoVGV4dCgKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICREYXRhe0Zyb219LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG15ICRNZXNzYWdlRnJvbSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTWVzc2FnZSBmcm9tJyk7CiAgICAgICAgICAgICAgICAgICAgbXkgJEVuZE1lc3NhZ2UgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdFbmQgbWVzc2FnZScpOwoKICAgICAgICAgICAgICAgICAgICAkRGF0YXtCb2R5fSA9ICI8YnIvPi0tLS0gJE1lc3NhZ2VGcm9tICRGcm9tIC0tLTxici8+PGJyLz4iIC4gJERhdGF7Qm9keX07CiAgICAgICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gLj0gIjxici8+LS0tLSAkRW5kTWVzc2FnZSAtLS08YnIvPiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIHByZXBhcmUgYm9keSwgc3ViamVjdCwgUmVwbHlUbyAuLi4KICAgICAgICAgICAgIyByZS13cmFwIGJvZHkgaWYgZXhpc3RzCiAgICAgICAgICAgIGlmICggJERhdGF7Qm9keX0gKSB7CiAgICAgICAgICAgICAgICAkRGF0YXtCb2R5fSA9fiBzL1x0LyAvZzsKICAgICAgICAgICAgICAgIG15ICRRdW90ZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UXVvdGUnKTsKICAgICAgICAgICAgICAgIGlmICgkUXVvdGUpIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtCb2R5fSA9fiBzL1xuL1xuJFF1b3RlIC9nOwogICAgICAgICAgICAgICAgICAgICREYXRhe0JvZHl9ID0gIlxuJFF1b3RlICIgLiAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICREYXRhe0JvZHl9ID0gIlxuIiAuICREYXRhe0JvZHl9OwogICAgICAgICAgICAgICAgICAgIGlmICggJERhdGF7Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhe0JvZHl9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdEYXRlJykgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogJERhdGF7Q3JlYXRlVGltZX1cbiIgLiAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZvciAocXcoU3ViamVjdCBSZXBseVRvIFJlcGx5LVRvIENjIFRvIEZyb20pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJERhdGF7JF99ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJF8pIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiAkRGF0YXskX31cbiIgLiAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJE1lc3NhZ2VGcm9tID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdNZXNzYWdlIGZyb20nKTsKICAgICAgICAgICAgICAgICAgICBteSAkRW5kTWVzc2FnZSAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0VuZCBtZXNzYWdlJyk7CgogICAgICAgICAgICAgICAgICAgICREYXRhe0JvZHl9ID0gIlxuLS0tLSAkTWVzc2FnZUZyb20gJERhdGF7RnJvbX0gLS0tXG5cbiIgLiAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtCb2R5fSAuPSAiXG4tLS0tICRFbmRNZXNzYWdlIC0tLVxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc3lzdGVtIGFkZHJlc3Mgb2JqZWN0CiAgICAgICAgbXkgJFN5c3RlbUFkZHJlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpOwoKICAgICAgICAjIGFkZCBub3QgbG9jYWwgVG8gYWRkcmVzc2VzIHRvIENjCiAgICAgICAgZm9yIG15ICRFbWFpbCAoIE1haWw6OkFkZHJlc3MtPnBhcnNlKCAkRGF0YXtUb30gKSApIHsKICAgICAgICAgICAgbXkgJElzTG9jYWwgPSAkU3lzdGVtQWRkcmVzcy0+U3lzdGVtQWRkcmVzc0lzTG9jYWxBZGRyZXNzKAogICAgICAgICAgICAgICAgQWRkcmVzcyA9PiAkRW1haWwtPmFkZHJlc3MoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJElzTG9jYWwgKSB7CiAgICAgICAgICAgICAgICBpZiAoICREYXRhe0NjfSApIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtDY30gLj0gJywgJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICREYXRhe0NjfSAuPSAkRW1haWwtPmZvcm1hdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIFJlcGx5VG8KICAgICAgICBpZiAoICREYXRhe1JlcGx5VG99ICkgewogICAgICAgICAgICAkRGF0YXtUb30gPSAkRGF0YXtSZXBseVRvfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREYXRhe1RvfSA9ICREYXRhe0Zyb219OwoKICAgICAgICAgICAgIyB0cnkgdG8gcmVtb3ZlIHNvbWUgd3JvbmcgdGV4dCB0byBmcm9tIGxpbmUgKGJ5IHdheSBvZiAuLi4pCiAgICAgICAgICAgICMgYWRkZWQgYnkgc29tZSBzdHJhbmdlIG1haWwgcHJvZ3JhbXMgb24gYm91bmNlCiAgICAgICAgICAgICREYXRhe1RvfSA9fiBzLyguKz9cPC4rP1xALis/XD4pXHMrXChieVxzK3dheVxzK29mXHMrLis/XCkvJDEvaWc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0byBlbWFpbCAoanVzdCAic29tZUBleGFtcGxlLmNvbSIpCiAgICAgICAgZm9yIG15ICRFbWFpbCAoIE1haWw6OkFkZHJlc3MtPnBhcnNlKCAkRGF0YXtUb30gKSApIHsKICAgICAgICAgICAgJERhdGF7VG9FbWFpbH0gPSAkRW1haWwtPmFkZHJlc3MoKTsKICAgICAgICB9CgogICAgICAgICMgb25seSByZXBseSB0byBzZW5kZXIKICAgICAgICBpZiAoICEkR2V0UGFyYW17UmVwbHlBbGx9ICkgewogICAgICAgICAgICAkRGF0YXtDY30gID0gJyc7CiAgICAgICAgICAgICREYXRhe0JjY30gPSAnJzsKICAgICAgICB9CgogICAgICAgICMgdXNlIGN1c3RvbWVyIGRhdGFiYXNlIGVtYWlsCiAgICAgICAgIyBkbyBub3QgYWRkIGN1c3RvbWVyIGVtYWlsIHRvIGNjLCBpZiBhcnRpY2xlIGlzIHZpc2libGUgZm9yIGN1c3RvbWVyCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkNvbXBvc2VBZGRDdXN0b21lckFkZHJlc3MnKQogICAgICAgICAgICAmJiAkRGF0YXtJc1Zpc2libGVGb3JDdXN0b21lcn0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgIyBjaGVjayBpZiBjdXN0b21lciBpcyBpbiByZWNpcGllbnQgbGlzdAogICAgICAgICAgICBpZiAoICRDdXN0b21lcntVc2VyRW1haWx9ICYmICREYXRhe1RvRW1haWx9ICF+IC9eXFEkQ3VzdG9tZXJ7VXNlckVtYWlsfVxFJC9pICkgewoKICAgICAgICAgICAgICAgIGlmICggJERhdGF7U2VuZGVyVHlwZX0gZXEgJ2FnZW50JyAmJiAhJERhdGF7SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9ICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJERhdGF7VG99ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXtUb30gLj0gJywgJyAuICRDdXN0b21lcntVc2VyRW1haWx9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7VG99ID0gJEN1c3RvbWVye1VzZXJFbWFpbH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVwbGFjZSBUbyB3aXRoIGN1c3RvbWVycyBkYXRhYmFzZSBhZGRyZXNzCiAgICAgICAgICAgICAgICBlbHNpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Q29tcG9zZVJlcGxhY2VTZW5kZXJBZGRyZXNzJykgKSB7CgogICAgICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRyZXNzICVzIHJlcGxhY2VkIHdpdGggcmVnaXN0ZXJlZCBjdXN0b21lciBhZGRyZXNzLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXtUb0VtYWlsfSwKICAgICAgICAgICAgICAgICAgICAgICAgKSwKCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtUb30gPSAkQ3VzdG9tZXJ7VXNlckVtYWlsfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCBjdXN0b21lcnMgZGF0YWJhc2UgYWRkcmVzcyB0byBDYwogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICAgICAgICAgIEluZm8gPT4gVHJhbnNsYXRhYmxlKCJDdXN0b21lciB1c2VyIGF1dG9tYXRpY2FsbHkgYWRkZWQgaW4gQ2MuIiksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICREYXRhe0NjfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Q2N9IC49ICcsICcgLiAkQ3VzdG9tZXJ7VXNlckVtYWlsfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhe0NjfSA9ICRDdXN0b21lcntVc2VyRW1haWx9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBmaW5kIGR1cGxpY2F0ZSBhZGRyZXNzZXMKICAgICAgICBteSAlUmVjaXBpZW50OwogICAgICAgIGZvciBteSAkVHlwZSAocXcoVG8gQ2MgQmNjKSkgewogICAgICAgICAgICBpZiAoICREYXRheyRUeXBlfSApIHsKICAgICAgICAgICAgICAgIG15ICROZXdMaW5lID0gJyc7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEVtYWlsICggTWFpbDo6QWRkcmVzcy0+cGFyc2UoICREYXRheyRUeXBlfSApICkgewogICAgICAgICAgICAgICAgICAgIG15ICRBZGRyZXNzID0gbGMgJEVtYWlsLT5hZGRyZXNzKCk7CgogICAgICAgICAgICAgICAgICAgICMgb25seSB1c2UgZW1haWwgYWRkcmVzc2VzIHdpdGggQCBpbnNpZGUKICAgICAgICAgICAgICAgICAgICBpZiAoICRBZGRyZXNzICYmICRBZGRyZXNzID1+IC9ALyAmJiAhJFJlY2lwaWVudHskQWRkcmVzc30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRSZWNpcGllbnR7JEFkZHJlc3N9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJElzTG9jYWwgPSAkU3lzdGVtQWRkcmVzcy0+U3lzdGVtQWRkcmVzc0lzTG9jYWxBZGRyZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9PiAkQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJElzTG9jYWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE5ld0xpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV3TGluZSAuPSAnLCAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0xpbmUgLj0gJEVtYWlsLT5mb3JtYXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICREYXRheyRUeXBlfSA9ICROZXdMaW5lOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0ZW1wbGF0ZQogICAgICAgIG15ICRUZW1wbGF0ZUdlbmVyYXRvciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUZW1wbGF0ZUdlbmVyYXRvcicpOwoKICAgICAgICAjIHVzZSBrZXkgU3RkUmVzcG9uc2UgdG8gcGFzcyB0aGUgZGF0YSB0byB0aGUgdGVtcGxhdGUgZm9yIGxlZ2FjeSByZWFzb25zLAogICAgICAgICMgICBiZWNhdXNlIGV4aXN0aW5nIHN5c3RlbXMgbWF5IGhhdmUgaXQgaW4gdGhlaXIgY29uZmlndXJhdGlvbiBhcyB0aGF0IHdhcwogICAgICAgICMgICB0aGUga2V5IHVzZWQgYmVmb3JlIHRoZSBpbnRlcm5hbCBzd2l0Y2ggdG8gU3RhbmRhcmRSZXNwb25zZSBBbmQgU3RhbmRhcmRUZW1wbGF0ZQoKICAgICAgICAkRGF0YXtTdGRSZXNwb25zZX0gPSAkVGVtcGxhdGVHZW5lcmF0b3ItPlRlbXBsYXRlKAogICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgID0+ICRHZXRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRHZXRQYXJhbXtSZXNwb25zZUlEfSwKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJURhdGEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNhbHV0YXRpb24KICAgICAgICAkRGF0YXtTYWx1dGF0aW9ufSA9ICRUZW1wbGF0ZUdlbmVyYXRvci0+U2FsdXRhdGlvbigKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIERhdGEgICAgID0+IFwlRGF0YSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNpZ25hdHVyZQogICAgICAgICREYXRhe1NpZ25hdHVyZX0gPSAkVGVtcGxhdGVHZW5lcmF0b3ItPlNpZ25hdHVyZSgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIERhdGEgICAgID0+IFwlRGF0YSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgJFRlbXBsYXRlR2VuZXJhdG9yLT5BdHRyaWJ1dGVzKCkgZG9lcyBub3Qgb3ZlcndyaXRlICVEYXRhLCBidXQgaXQgYWRkcyBtb3JlIGtleXMKICAgICAgICAlRGF0YSA9ICRUZW1wbGF0ZUdlbmVyYXRvci0+QXR0cmlidXRlcygKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEdldFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgICAgIERhdGEgICAgICA9PiBcJURhdGEsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFJlc3BvbnNlRm9ybWF0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpSZXNwb25zZUZvcm1hdCcpOwoKICAgICAgICAjIG1ha2Ugc3VyZSBib2R5IGlzIHJpY2ggdGV4dAogICAgICAgIG15ICVEYXRhSFRNTCA9ICVEYXRhOwogICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgIGlmICgkUmVzcG9uc2VGb3JtYXQpIHsKICAgICAgICAgICAgICAgICRSZXNwb25zZUZvcm1hdCA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMlJpY2hUZXh0KAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUmVzcG9uc2VGb3JtYXQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVzdG9yZSBxZGF0YSBmb3JtYXR0aW5nIGZvciBPdXRwdXQgcmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgICRSZXNwb25zZUZvcm1hdCA9fiBzLyZxdW90Oy8iL2dpOwoKICAgICAgICAgICAgICAgICMgaHRtbCBxdW90ZSB0byBoYXZlIGl0IGNvcnJlY3QgaW4gZWRpdCBhcmVhCiAgICAgICAgICAgICAgICAkUmVzcG9uc2VGb3JtYXQgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgIFRleHQgPT4gJFJlc3BvbnNlRm9ybWF0LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlc3RvcmUgcWRhdGEgZm9ybWF0dGluZyBmb3IgT3V0cHV0IHJlcGxhY2VtZW50CiAgICAgICAgICAgICAgICAkUmVzcG9uc2VGb3JtYXQgPX4gcy8mcXVvdDsvIi9naTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBxdW90ZSBhbGwgbm9uIGh0bWwgY29udGVudCB0byBoYXZlIGl0IGNvcnJlY3QgaW4gZWRpdCBhcmVhCiAgICAgICAgICAgIEtFWToKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJURhdGFIVE1MICkgewogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgISREYXRhSFRNTHskS2V5fTsKICAgICAgICAgICAgICAgIG5leHQgS0VZIGlmICRLZXkgZXEgJ1NhbHV0YXRpb24nOwogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgJEtleSBlcSAnQm9keSc7CiAgICAgICAgICAgICAgICBuZXh0IEtFWSBpZiAkS2V5IGVxICdTdGRSZXNwb25zZSc7CiAgICAgICAgICAgICAgICBuZXh0IEtFWSBpZiAkS2V5IGVxICdTaWduYXR1cmUnOwogICAgICAgICAgICAgICAgJERhdGFIVE1MeyRLZXl9ID0gJExheW91dE9iamVjdC0+QXNjaWkyUmljaFRleHQoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICREYXRhSFRNTHskS2V5fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYnVpbGQgbmV3IHJlcHNvbnNlIGZvcm1hdCBiYXNlZCBvbiB0ZW1wbGF0ZQogICAgICAgICREYXRhe1Jlc3BvbnNlRm9ybWF0fSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGUgPT4gJFJlc3BvbnNlRm9ybWF0LAogICAgICAgICAgICBEYXRhICAgICA9PiB7ICVQYXJhbSwgJURhdGFIVE1MIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzb21lIHZhbHVlcwogICAgICAgIG15ICVFcnJvcjsKICAgICAgICBMSU5FOgogICAgICAgIGZvciBteSAkTGluZSAocXcoVG8gQ2MgQmNjKSkgewogICAgICAgICAgICBuZXh0IExJTkUgaWYgISREYXRheyRMaW5lfTsKICAgICAgICAgICAgZm9yIG15ICRFbWFpbCAoIE1haWw6OkFkZHJlc3MtPnBhcnNlKCAkRGF0YXskTGluZX0gKSApIHsKICAgICAgICAgICAgICAgIGlmICggISRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRW1haWwoIEFkZHJlc3MgPT4gJEVtYWlsLT5hZGRyZXNzKCkgKSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICRMaW5lIC4gIkludmFsaWQiIH0gPSAiIFNlcnZlckVycm9yIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoICREYXRhe0Zyb219ICkgewogICAgICAgICAgICBmb3IgbXkgJEVtYWlsICggTWFpbDo6QWRkcmVzcy0+cGFyc2UoICREYXRhe0Zyb219ICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzID0+ICRFbWFpbC0+YWRkcmVzcygpICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yeyJGcm9tSW52YWxpZCJ9IC49ICRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KIyBSb3RoZXIgT1NTIC8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKCiAgICAgICAgIyBnZXQgbGlzdCB0eXBlCiAgICAgICAgbXkgJFRyZWVWaWV3ID0gMDsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgICAgICRUcmVlVmlldyA9IDE7CiAgICAgICAgfQoKICAgICAgICBteSAkQXV0b3NlbGVjdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBdXRvc2VsZWN0JykgfHwgdW5kZWY7CgogICAgICAgICMgZ2F0aGVyIGZpZWxkcyB3aGljaCBhcmUgc3VwcG9zZWQgdG8gYmUgaGlkZGVuIHdoZW4gYXV0b3NlbGVjdGVkCiAgICAgICAgbXkgJEhpZGVBdXRvc2VsZWN0ZWRKU09OOwogICAgICAgIGlmICgkQXV0b3NlbGVjdCkgewogICAgICAgICAgICBteSBASGlkZUF1dG9zZWxlY3RlZCA9IGdyZXAgeyAhcmVmKCAkQXV0b3NlbGVjdC0+eyRffSApICYmICRBdXRvc2VsZWN0LT57JF99ID09IDIgfSBrZXlzICV7JEF1dG9zZWxlY3R9OwogICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKEBIaWRlQXV0b3NlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAkSXRlbSA9ICdTdGF0ZUlEJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRBdXRvc2VsZWN0LT57RHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEhpZGVBdXRvc2VsZWN0ZWQsCiAgICAgICAgICAgICAgICAgICAgbWFwIHsgIkR5bmFtaWNGaWVsZF8iIC4gJF8gfQogICAgICAgICAgICAgICAgICAgICggZ3JlcCB7ICRBdXRvc2VsZWN0LT57RHluYW1pY0ZpZWxkfXskX30gPT0gMiB9IGtleXMgJXsgJEF1dG9zZWxlY3QtPntEeW5hbWljRmllbGR9IH0gKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKEBIaWRlQXV0b3NlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICBteSAkSlNPTk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyk7CiAgICAgICAgICAgICAgICAkSGlkZUF1dG9zZWxlY3RlZEpTT04gPSAkSlNPTk9iamVjdC0+RW5jb2RlKAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXEBIaWRlQXV0b3NlbGVjdGVkLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJEFDTFByZXNlbGVjdGlvbjsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBQ0xQcmVzZWxlY3Rpb24nKSApIHsKCiAgICAgICAgICAgICMgZ2V0IGNhY2hlZCBwcmVzZWxlY3Rpb24gcnVsZXMKICAgICAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsCiAgICAgICAgICAgICAgICBLZXkgID0+ICdQcmVzZWxlY3Rpb24nLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uICkgewogICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+U2V0QUNMUHJlc2VsZWN0aW9uQ2FjaGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJUNvbnZlcmdlbmNlID0gKAogICAgICAgICAgICBTdGRGaWVsZHMgPT4gMCwKICAgICAgICAgICAgRmllbGRzICAgID0+IDAsCiAgICAgICAgKTsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzICAgICAgICA9ICgpOwogICAgICAgIG15ICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKCk7CiAgICAgICAgbXkgJUNoYW5nZWRTdGRGaWVsZHM7CgogICAgICAgIG15ICRMb29wUHJvdGVjdGlvbiA9IDEwMDsKICAgICAgICBteSAlU3RkRmllbGRWYWx1ZXM7CiAgICAgICAgbXkgJUR5bkZpZWxkU3RhdGVzID0gKAogICAgICAgICAgICBWaXNpYmlsaXR5ID0+IHt9LAogICAgICAgICAgICBGaWVsZHMgICAgID0+IHt9LAogICAgICAgICk7CgogICAgICAgIG15ICRJbml0aWFsUnVuID0gMTsKCiAgICAgICAgIyBoYW5kbGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHN0YW5kYXJkIGZpZWxkcwogICAgICAgIGlmICggJENvbmZpZy0+e1N0YXRlRGVmYXVsdH0gKSB7CgogICAgICAgICAgICBteSAkTmV4dFN0YXRlcyA9ICRTZWxmLT5fR2V0TmV4dFN0YXRlcygKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRHZXRQYXJhbXtTdGF0ZUlEfSAvLz0geyByZXZlcnNlICROZXh0U3RhdGVzLT4lKiB9LT57ICRDb25maWctPntTdGF0ZURlZmF1bHR9IH07CiAgICAgICAgfQogICAgICAgIGlmICggJENvbmZpZy0+e0lzVmlzaWJsZUZvckN1c3RvbWVyRGVmYXVsdH0gKSB7CgogICAgICAgICAgICAkR2V0UGFyYW17SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9IC8vPSAkQ29uZmlnLT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJEZWZhdWx0fTsKICAgICAgICB9CgogICAgICAgIHVudGlsICggJENvbnZlcmdlbmNle0ZpZWxkc30gKSB7CgogICAgICAgICAgICAjIGRldGVybWluZSBzdGFuZGFyZCBmaWVsZCBpbnB1dAogICAgICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ICkgewoKICAgICAgICAgICAgICAgIG15ICVOZXdDaGFuZ2VkRWxlbWVudHM7CgogICAgICAgICAgICAgICAgIyB3aGljaCBzdGFuZGFyZCBmaWVsZHMgdG8gY2hlY2sgLSBGaWVsZElEID0+IEdldFBhcmFtVmFsdWUgKG5lY2Nlc3NhcnkgZm9yIERlc3QpCiAgICAgICAgICAgICAgICBteSAlQ2hlY2sgPSAoCiAgICAgICAgICAgICAgICAgICAgTmV4dFN0YXRlSUQgPT4gJ05leHRTdGF0ZUlEJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICRBQ0xQcmVzZWxlY3Rpb24gJiYgISRJbml0aWFsUnVuICkgewogICAgICAgICAgICAgICAgICAgIEZJRUxEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGRJRCAoIHNvcnQga2V5cyAlQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRGaWVsZElEIG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyRGaWVsZElEfSAmJiAkQ2hhbmdlZEVsZW1lbnRzeyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRFbGVtZW50ICggc29ydCBrZXlzICVDaGFuZ2VkRWxlbWVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbi0+e1J1bGVzfXtUaWNrZXR9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17JEVsZW1lbnR9eyRGaWVsZElEfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbi0+e0ZpZWxkc317JEVsZW1lbnR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEVsZW1lbnQgbm90IGRlZmluZWQgaW4gVGlja2V0QUNMIHByZXNlbGVjdGlvbiBydWxlcyEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB1bmFmZmVjdGVkIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJENoZWNreyRGaWVsZElEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjaGVjayB2YWx1ZSBvZiBzdGF0ZQogICAgICAgICAgICAgICAgbXkgJE5leHRTdGF0ZXMgPSAkU2VsZi0+X0dldE5leHRTdGF0ZXMoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHdoZXRoZXIgY3VycmVudCBzZWxlY3RlZCB2YWx1ZSBpcyBzdGlsbCB2YWxpZCBmb3IgdGhlIGZpZWxkCiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtTdGF0ZUlEfSAmJiAhJE5leHRTdGF0ZXMtPnsgJEdldFBhcmFte1N0YXRlSUR9IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgaWYgbm90IGVtcHR5IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtTdGF0ZUlEfSAgICAgICAgICAgICAgID0gJyc7CiAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3tOZXh0U3RhdGVJRH0gPSAxOwogICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRze05leHRTdGF0ZUlEfSAgID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGF1dG9zZWxlY3QKICAgICAgICAgICAgICAgIGVsc2lmICggISRHZXRQYXJhbXtTdGF0ZUlEfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+e05leHRTdGF0ZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17U3RhdGVJRH0gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkF1dG9zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+ICROZXh0U3RhdGVzLAogICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17U3RhdGVJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7TmV4dFN0YXRlSUR9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7TmV4dFN0YXRlSUR9ICAgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICElTmV3Q2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgPSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKAogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0LAogICAgICAgICAgICAgICAgICAgICVOZXdDaGFuZ2VkRWxlbWVudHMsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJExvb3BQcm90ZWN0aW9uLS0gPCAxICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmFuIGludG8gdW5yZXNvbHZhYmxlIGxvb3AhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgICAgICAgID0gJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQ7CiAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKCk7CgogICAgICAgICAgICAjIGNoZWNrIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgIG15ICVDdXJGaWVsZFN0YXRlczsKICAgICAgICAgICAgaWYgKCAlQ2hhbmdlZEVsZW1lbnRzIHx8ICRJbml0aWFsUnVuICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHZhbHVlcyBhbmQgdmlzaWJpbGl0eSBvZiBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgJUN1ckZpZWxkU3RhdGVzID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5HZXRGaWVsZFN0YXRlcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRPYmplY3QgICAgICAgICAgICAgID0+ICRUaWNrZXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPT4gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZEVsZW1lbnRzICAgICAgICAgICA9PiBcJUNoYW5nZWRFbGVtZW50cywgICAgICAgICAgICAgIyBvcHRpb25hbCB0byByZWR1Y2UgQUNMIGV2YWx1YXRpb24KICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgICAgPT4gJFRpY2tldHtDdXN0b21lclVzZXJ9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIE5leHRTdGF0ZUlEID0+ICRHZXRQYXJhbXtTdGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBBdXRvc2VsZWN0ICAgICAgPT4gJEF1dG9zZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgQUNMUHJlc2VsZWN0aW9uID0+ICRBQ0xQcmVzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24gID0+IFwkTG9vcFByb3RlY3Rpb24sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY29tYmluZSBGaWVsZFN0YXRlcwogICAgICAgICAgICAgICAgJER5bkZpZWxkU3RhdGVze0ZpZWxkc30gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze0ZpZWxkc30gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7RmllbGRzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gfSwKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgIyBzdG9yZSBuZXcgdmFsdWVzCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9IH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIGR5bmFtaWMgZmllbGRzIGNoYW5nZWQsIGNoZWNrIHN0YW5kYXJkIGZpZWxkcyBhZ2FpbgogICAgICAgICAgICBpZiAoICVDdXJGaWVsZFN0YXRlcyAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gKSApIHsKICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ID0gMDsKICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgPSBtYXAgeyAkXyA9PiAxIH0ga2V5cyAleyAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJENvbnZlcmdlbmNle0ZpZWxkc30gPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkSW5pdGlhbFJ1biA9IDA7CiAgICAgICAgfQojIEVPIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCgogICAgICAgICMgY3JlYXRlIGh0bWwgc3RyaW5ncyBmb3IgYWxsIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZEhUTUw7CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiMgICAgICAgICBEWU5BTUlDRklFTEQ6CiMgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiMgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwojCiMgICAgICAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzRmlsdGVyOwogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJGkgKCAwIC4uICQjeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICREeW5hbWljRmllbGQtPlskaV0gKTsKCiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkLT5bJGldOwoKICAgICAgICAgICAgIyBkb24ndCBzZXQgYSBkZWZhdWx0IHZhbHVlIGZvciBoaWRkZW4gZmllbGRzCiAgICAgICAgICAgIG15ICVVc2VEZWZhdWx0ID0gKCk7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX17IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifQogICAgICAgICAgICAgICAgJiYgKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRUeXBlfSBuZSAnRGF0ZScgfHwgJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gbmUgJ0RhdGVUaW1lJyApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICVVc2VEZWZhdWx0ID0gKAogICAgICAgICAgICAgICAgICAgIFVzZURlZmF1bHRWYWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQoKICAgICAgICAgICAgIyB0byBzdG9yZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gZGF0YWJhc2UgKG9yIHVuZGVmaW5lZCkKICAgICAgICAgICAgbXkgJFZhbHVlOwoKICAgICAgICAgICAgIyBvbmx5IGdldCB2YWx1ZXMgZm9yIFRpY2tldCBmaWVsZHMgKGFsbCBzY3JlZW5zIGJhc2VkIG9uIEFnZW50VGlja2V0QWN0aW9uQ29tbW9uCiAgICAgICAgICAgICMgZ2VuZXJhdGUgYSBuZXcgYXJ0aWNsZSwgdGhlbiBhcnRpY2xlIGZpZWxkcyB3aWxsIGJlIGFsd2F5cyBlbXB0eSBhdCB0aGUgYmVnaW5pZ24pCiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiMgICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57T2JqZWN0VHlwZX0gZXEgJ1RpY2tldCcgKSB7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRDb25maWctPntPYmplY3RUeXBlfSBlcSAnVGlja2V0JwogICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICFJc0hhc2hSZWZXaXRoRGF0YSggJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9ICkKICAgICAgICAgICAgICAgICAgICB8fCAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQoKICAgICAgICAgICAgICAgICMgZ2V0IHZhbHVlIHN0b3JlZCBvbiB0aGUgZGF0YWJhc2UgZnJvbSBUaWNrZXQKICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBmaWVsZCBodG1sCiAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkUmVuZGVyKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAojIFJvdGhlciBPU1MgLyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQojICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBvc3NpYmxlVmFsdWVzRmlsdGVyLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+IGRlZmluZWQgJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JGl9CiAgICAgICAgICAgICAgICAgICAgPyAkRHluRmllbGRTdGF0ZXN7RmllbGRzfXskaX17UG9zc2libGVWYWx1ZXN9CiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZiwKIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ID0+CiAgICAgICAgICAgICAgICAgICAgJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIEFKQVhVcGRhdGUgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVwZGF0YWJsZUZpZWxkcyA9PiAkU2VsZi0+X0dldEZpZWxkc1RvVXBkYXRlKCksCiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiAgICAgICAgICAgICAgICAgICAgJVVzZURlZmF1bHQsCiMgRU8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIHJlZmVyZW5jZXMgaWYgZXhpc3QKICAgICAgICBteSAkUmVmZXJlbmNlcyA9ICggJERhdGF7TWVzc2FnZUlEfSB8fCAnJyApIC4gKCAkRGF0YXtSZWZlcmVuY2VzfSB8fCAnJyApOwoKICAgICAgICAjIHJ1biBjb21wb3NlIG1vZHVsZXMKICAgICAgICBpZiAoIHJlZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFydGljbGVDb21wb3NlTW9kdWxlJykgZXEgJ0hBU0gnICkgewoKICAgICAgICAgICAgIyB1c2UgdGlja2V0IFF1ZXVlSUQgaW4gY29tcG9zZSBtb2R1bGVzCiAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRUaWNrZXR7UXVldWVJRH07CgogICAgICAgICAgICBteSAlSm9icyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZUNvbXBvc2VNb2R1bGUnKSB9OwogICAgICAgICAgICBmb3IgbXkgJEpvYiAoIHNvcnQga2V5cyAlSm9icyApIHsKCiAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICBpZiAoICEkTWFpbk9iamVjdC0+UmVxdWlyZSggJEpvYnN7JEpvYn0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkSm9ic3skSm9ifS0+e01vZHVsZX0tPm5ldyggJXskU2VsZn0sIERlYnVnID0+ICRTZWxmLT57RGVidWd9ICk7CgogICAgICAgICAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgICAgICAgICBQQVJBTUVURVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAoICRPYmplY3QtPk9wdGlvbiggJUdldFBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRKb2JzeyRKb2J9LT57UGFyYW1UeXBlfSAmJiAkSm9ic3skSm9ifS0+e1BhcmFtVHlwZX0gbmUgJ1NpbmdsZScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEB7ICRHZXRQYXJhbXskUGFyYW1ldGVyfSB9ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IFBBUkFNRVRFUjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJ1biBtb2R1bGUKICAgICAgICAgICAgICAgIG15ICROZXdQYXJhbXMgPSAkT2JqZWN0LT5SdW4oICVHZXRQYXJhbSwgQ29uZmlnID0+ICRKb2JzeyRKb2J9ICk7CgogICAgICAgICAgICAgICAgaWYgKCROZXdQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAoICRPYmplY3QtPk9wdGlvbiggJUdldFBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJE5ld1BhcmFtczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBnZXQgZXJyb3JzCiAgICAgICAgICAgICAgICAlRXJyb3IgPSAoCiAgICAgICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAgICAgICAgICRPYmplY3QtPkVycm9yKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCB2aWV3IC4uLgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrKAogICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBOZXh0U3RhdGVzID0+ICRTZWxmLT5fR2V0TmV4dFN0YXRlcygKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgQXR0YWNobWVudHMgICAgICAgICA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICBFcnJvcnMgICAgICAgICAgICAgID0+IFwlRXJyb3IsCiAgICAgICAgICAgIE11bHRpcGxlQ3VzdG9tZXIgICAgPT4gXEBNdWx0aXBsZUN1c3RvbWVyLAogICAgICAgICAgICBNdWx0aXBsZUN1c3RvbWVyQ2MgID0+IFxATXVsdGlwbGVDdXN0b21lckNjLAogICAgICAgICAgICBNdWx0aXBsZUN1c3RvbWVyQmNjID0+IFxATXVsdGlwbGVDdXN0b21lckJjYywKICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICBSZXNwb25zZUlEICAgICAgICAgID0+ICRHZXRQYXJhbXtSZXNwb25zZUlEfSwKICAgICAgICAgICAgUmVwbHlBcnRpY2xlSUQgICAgICA9PiAkR2V0UGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgIEluUmVwbHlUbyAgICAgICAgPT4gJERhdGF7TWVzc2FnZUlEfSwKICAgICAgICAgICAgUmVmZXJlbmNlcyAgICAgICA9PiAiJFJlZmVyZW5jZXMiLAogICAgICAgICAgICBUaWNrZXRCYWNrVHlwZSAgID0+ICRUaWNrZXRCYWNrVHlwZSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkSFRNTCA9PiBcJUR5bmFtaWNGaWVsZEhUTUwsCiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiAgICAgICAgICAgIE5leHRTdGF0ZSAgICAgICAgPT4gJEdldFBhcmFte1N0YXRlSUR9ID8gJFN0ZEZpZWxkVmFsdWVze05leHRTdGF0ZUlEfXsgJEdldFBhcmFte1N0YXRlSUR9IH0gOiAnJywKICAgICAgICAgICAgSGlkZUF1dG9zZWxlY3RlZCA9PiAkSGlkZUF1dG9zZWxlY3RlZEpTT04sCiAgICAgICAgICAgIFZpc2liaWxpdHkgICAgICAgPT4gJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9LAojIEVPIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigKICAgICAgICAgICAgVHlwZSA9PiAnU21hbGwnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfR2V0TmV4dFN0YXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5leHQgc3RhdGVzCiAgICBteSAlTmV4dFN0YXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3RhdGVMaXN0KAogICAgICAgICVQYXJhbSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIHJldHVybiBcJU5leHRTdGF0ZXM7Cn0KCnN1YiBfTWFzayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREeW5hbWljRmllbGROYW1lcyA9ICRTZWxmLT5fR2V0RmllbGRzVG9VcGRhdGUoCiAgICAgICAgT25seUR5bmFtaWNGaWVsZHMgPT4gMQogICAgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKIyBSb3RoZXIgT1NTIC8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKICAgIGlmICggJFBhcmFte0hpZGVBdXRvc2VsZWN0ZWR9ICkgewoKICAgICAgICAjIGFkZCBBdXRvc2VsZWN0IEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNPbkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIENvZGUgPT4gIkNvcmUuRm9ybS5Jbml0SGlkZUF1dG9zZWxlY3RlZCh7IEZpZWxkSURzOiAkUGFyYW17SGlkZUF1dG9zZWxlY3RlZH0gfSk7IiwKICAgICAgICApOwogICAgfQoKIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgIG15ICVTdGF0ZTsKICAgIGlmICggJFBhcmFte0dldFBhcmFtfS0+e1N0YXRlSUR9ICkgewogICAgICAgICRTdGF0ZXtTZWxlY3RlZElEfSA9ICRQYXJhbXtHZXRQYXJhbX0tPntTdGF0ZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTdGF0ZXtTZWxlY3RlZFZhbHVlfSA9ICRDb25maWctPntTdGF0ZURlZmF1bHR9OwogICAgfQogICAgJFBhcmFte05leHRTdGF0ZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkUGFyYW17TmV4dFN0YXRlc30sCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAlU3RhdGUsCiAgICAgICAgJVBhcmFtLAogICAgICAgIENsYXNzID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICBteSAkSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPSAkQ29uZmlnLT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJEZWZhdWx0fTsKICAgIGlmICggJFBhcmFte0dldFBhcmFtfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyUHJlc2VudH0gKSB7CiAgICAgICAgJElzVmlzaWJsZUZvckN1c3RvbWVyID0gJFBhcmFte0dldFBhcmFtfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfSA/IDEgOiAwOwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0lzVmlzaWJsZUZvckN1c3RvbWVyJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gJElzVmlzaWJsZUZvckN1c3RvbWVyLAogICAgICAgIH0sCiAgICApOwoKICAgICMgcHJlcGFyZSBlcnJvcnMhCiAgICBpZiAoICRQYXJhbXtFcnJvcnN9ICkgewogICAgICAgIGZvciBteSAkRXJyb3IgKCBzb3J0IGtleXMgJXsgJFBhcmFte0Vycm9yc30gfSApIHsKICAgICAgICAgICAgJFBhcmFteyRFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgVGV4dCA9PiAkUGFyYW17RXJyb3JzfS0+eyRFcnJvcn0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHVzZWQgY2FsZW5kYXIKICAgIG15ICRDYWxlbmRhciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0Q2FsZW5kYXJHZXQoCiAgICAgICAgUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0sCiAgICAgICAgU0xBSUQgICA9PiAkUGFyYW17U0xBSUR9LAogICAgKTsKCiAgICAjIHBlbmRpbmcgZGF0YSBzdHJpbmcKICAgICRQYXJhbXtQZW5kaW5nRGF0ZVN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVBhcmFtLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICBZZWFyUGVyaW9kUGFzdCAgICAgICA9PiAwLAogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgICAgID0+IDUsCiAgICAgICAgRGlmZlRpbWUgICAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpQZW5kaW5nRGlmZlRpbWUnKSB8fCAwLAogICAgICAgIENsYXNzICAgICAgICAgICAgICAgID0+ICRQYXJhbXtFcnJvcnN9LT57RGF0ZUludmFsaWR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJyAnLAogICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVmFsaWRhdGVEYXRlSW5GdXR1cmUgPT4gMSwKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgICA9PiAkQ2FsZW5kYXIsCiAgICApOwoKICAgICMgTXVsdGlwbGUtQXV0b2NvbXBsZXRlCiAgICAkUGFyYW17VG99ID0gKCBzY2FsYXIgQHsgJFBhcmFte011bHRpcGxlQ3VzdG9tZXJ9IH0gPyAnJyA6ICRQYXJhbXtUb30gKTsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VG99ICYmICRQYXJhbXtUb30gbmUgJycgKSB7CiAgICAgICAgJFBhcmFte1RvSW52YWxpZH0gPSAnJzsKICAgIH0KCiAgICAkUGFyYW17Q2N9ID0gKCBzY2FsYXIgQHsgJFBhcmFte011bHRpcGxlQ3VzdG9tZXJDY30gfSA/ICcnIDogJFBhcmFte0NjfSApOwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtDY30gJiYgJFBhcmFte0NjfSBuZSAnJyApIHsKICAgICAgICAkUGFyYW17Q2NJbnZhbGlkfSA9ICcnOwogICAgfQoKICAgICMgQ2MKICAgIG15ICRDdXN0b21lckNvdW50ZXJDYyA9IDA7CiAgICBpZiAoICRQYXJhbXtNdWx0aXBsZUN1c3RvbWVyQ2N9ICkgewogICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtNdWx0aXBsZUN1c3RvbWVyQ2N9IH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2NNdWx0aXBsZUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2MnIC4gJEl0ZW0tPntDdXN0b21lckVycm9yTXNnfSwKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntDdXN0b21lckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NjQ3VzdG9tZXJFcnJvckV4cGxhbnRpb24nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ3VzdG9tZXJDb3VudGVyQ2MrKzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJEN1c3RvbWVyQ291bnRlckNjICkgewogICAgICAgICRQYXJhbXtDY0N1c3RvbWVySGlkZGVuQ29udGFpbmVyfSA9ICdIaWRkZW4nOwogICAgfQoKICAgICMgc2V0IGN1c3RvbWVyIGNvdW50ZXIKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NjTXVsdGlwbGVDdXN0b21lckNvdW50ZXInLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBDdXN0b21lckNvdW50ZXIgPT4gJEN1c3RvbWVyQ291bnRlckNjLAogICAgICAgIH0sCiAgICApOwoKICAgICMgQmNjCiAgICBteSAkQ3VzdG9tZXJDb3VudGVyQmNjID0gMDsKICAgIGlmICggJFBhcmFte011bHRpcGxlQ3VzdG9tZXJCY2N9ICkgewogICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtNdWx0aXBsZUN1c3RvbWVyQmNjfSB9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0JjY011bHRpcGxlQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdCY2MnIC4gJEl0ZW0tPntDdXN0b21lckVycm9yTXNnfSwKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntDdXN0b21lckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0JjY0N1c3RvbWVyRXJyb3JFeHBsYW50aW9uJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEN1c3RvbWVyQ291bnRlckJjYysrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkQ3VzdG9tZXJDb3VudGVyQmNjICkgewogICAgICAgICRQYXJhbXtCY2NDdXN0b21lckhpZGRlbkNvbnRhaW5lcn0gPSAnSGlkZGVuJzsKICAgIH0KCiAgICAjIHNldCBjdXN0b21lciBjb3VudGVyCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdCY2NNdWx0aXBsZUN1c3RvbWVyQ291bnRlcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyQ291bnRlciA9PiAkQ3VzdG9tZXJDb3VudGVyQmNjKyssCiAgICAgICAgfSwKICAgICk7CgogICAgIyBUbwogICAgbXkgJEN1c3RvbWVyQ291bnRlciA9IDA7CiAgICBpZiAoICRQYXJhbXtNdWx0aXBsZUN1c3RvbWVyfSApIHsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17TXVsdGlwbGVDdXN0b21lcn0gfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdNdWx0aXBsZUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkSXRlbS0+e0N1c3RvbWVyRXJyb3JNc2d9LAogICAgICAgICAgICAgICAgRGF0YSA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0N1c3RvbWVyRXJyb3J9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ3VzdG9tZXJFcnJvckV4cGxhbnRpb24nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ3VzdG9tZXJDb3VudGVyKys7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRDdXN0b21lckNvdW50ZXIgKSB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVySGlkZGVuQ29udGFpbmVyfSA9ICdIaWRkZW4nOwogICAgfQoKICAgICMgc2V0IGN1c3RvbWVyIGNvdW50ZXIKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ011bHRpcGxlQ3VzdG9tZXJDb3VudGVyJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJDb3VudGVyID0+ICRDdXN0b21lckNvdW50ZXIsCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkUGFyYW17VG9JbnZhbGlkfSAmJiAkUGFyYW17RXJyb3JzfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVG9TZXJ2ZXJFcnJvck1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwoKICAgICMgc2V0IHByZXNlbGVjdGVkIHZhbHVlcyBmb3IgQ2MgZmllbGQKICAgIGlmICggJFBhcmFte0NjfSAmJiAkUGFyYW17Q2N9IG5lICcnICYmICEkQ3VzdG9tZXJDb3VudGVyQ2MgKSB7CgogICAgICAgICMgc3BsaXQgQ2MgdmFsdWVzCiAgICAgICAgbXkgQEVtYWlsQWRkcmVzc2VzQ2M7CiAgICAgICAgZm9yIG15ICRFbWFpbCAoIE1haWw6OkFkZHJlc3MtPnBhcnNlKCAkUGFyYW17Q2N9ICkgKSB7CgogICAgICAgICAgICBteSAlQ3VzdG9tZXJTZWFyY2ggPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclNlYXJjaCgKICAgICAgICAgICAgICAgIFBvc3RNYXN0ZXJTZWFyY2ggPT4gJEVtYWlsLT5hZGRyZXNzKCksCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEN1c3RvbWVyU2VhcmNoIGhhc2ggY291bGQgaGF2ZSBvbmUgaXRlbSBmcm9tIGVhY2ggYmFja2VuZCwgc28gaW5zZXJ0IGp1c3QgdGhlIGZpcnN0IG9uZS4KICAgICAgICAgICAgaWYgKCVDdXN0b21lclNlYXJjaCkgewogICAgICAgICAgICAgICAgQ1VTVE9NRVJVU0VSSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEN1c3RvbWVyVXNlcklEICggc29ydCBrZXlzICVDdXN0b21lclNlYXJjaCApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBFbWFpbEFkZHJlc3Nlc0NjLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyS2V5ICAgICAgICA9PiAkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVGlja2V0VGV4dCA9PiAkQ3VzdG9tZXJTZWFyY2h7JEN1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIGxhc3QgQ1VTVE9NRVJVU0VSSUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwdXNoIEBFbWFpbEFkZHJlc3Nlc0NjLCB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJLZXkgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVGlja2V0VGV4dCA9PiAkRW1haWwtPlswXSA/ICIkRW1haWwtPlswXSA8JEVtYWlsLT5bMV0+IiA6ICIkRW1haWwtPlsxXSIsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdFbWFpbEFkZHJlc3Nlc0NjJywKICAgICAgICAgICAgVmFsdWUgPT4gXEBFbWFpbEFkZHJlc3Nlc0NjLAogICAgICAgICk7CgogICAgICAgICRQYXJhbXtDY30gPSAnJzsKICAgIH0KCiAgICAjIHNldCBwcmVzZWxlY3RlZCB2YWx1ZXMgZm9yIFRvIGZpZWxkCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1RvfSAmJiAkUGFyYW17VG99IG5lICcnICYmICEkQ3VzdG9tZXJDb3VudGVyICkgewoKICAgICAgICAjIHNwbGl0IFRvIHZhbHVlcwogICAgICAgIG15IEBFbWFpbEFkZHJlc3Nlc1RvOwogICAgICAgIGZvciBteSAkRW1haWwgKCBNYWlsOjpBZGRyZXNzLT5wYXJzZSggJFBhcmFte1RvfSApICkgewoKICAgICAgICAgICAgbXkgJUN1c3RvbWVyU2VhcmNoID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJTZWFyY2goCiAgICAgICAgICAgICAgICBQb3N0TWFzdGVyU2VhcmNoID0+ICRFbWFpbC0+YWRkcmVzcygpLAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBDdXN0b21lclNlYXJjaCBoYXNoIGNvdWxkIGhhdmUgb25lIGl0ZW0gZnJvbSBlYWNoIGJhY2tlbmQsIHNvIGluc2VydCBqdXN0IHRoZSBmaXJzdCBvbmUuCiAgICAgICAgICAgIGlmICglQ3VzdG9tZXJTZWFyY2gpIHsKICAgICAgICAgICAgICAgIENVU1RPTUVSVVNFUklEOgogICAgICAgICAgICAgICAgZm9yIG15ICRDdXN0b21lclVzZXJJRCAoIHNvcnQga2V5cyAlQ3VzdG9tZXJTZWFyY2ggKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARW1haWxBZGRyZXNzZXNUbywgewogICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcktleSAgICAgICAgPT4gJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lclRpY2tldFRleHQgPT4gJEN1c3RvbWVyU2VhcmNoeyRDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBsYXN0IENVU1RPTUVSVVNFUklEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCBARW1haWxBZGRyZXNzZXNUbywgewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyS2V5ICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclRpY2tldFRleHQgPT4gJEVtYWlsLT5bMF0gPyAiJEVtYWlsLT5bMF0gPCRFbWFpbC0+WzFdPiIgOiAiJEVtYWlsLT5bMV0iLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnRW1haWxBZGRyZXNzZXNUbycsCiAgICAgICAgICAgIFZhbHVlID0+IFxARW1haWxBZGRyZXNzZXNUbywKICAgICAgICApOwoKICAgICAgICAkUGFyYW17VG99ID0gJyc7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17VGlja2V0QmFja1R5cGV9LAogICAgICAgIERhdGEgPT4gewoKICAgICAgICAgICAgIyAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JywgJ0FydGljbGUnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgRHluYW1pYyBmaWVsZHMKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIHNraXAgZmllbGRzIHRoYXQgSFRNTCBjb3VsZCBub3QgYmUgcmV0cmlldmVkCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKAogICAgICAgICAgICAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgaHRtbCBzdHJpbmdzIGZvcm0gJFBhcmFtCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEhUTUwgPSAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCgogICAgICAgIG15ICVIaWRkZW47CgogICAgICAgICMgaGlkZSBmaWVsZAogICAgICAgIGlmICggISRQYXJhbXtWaXNpYmlsaXR5fXsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSJ9ICkgewogICAgICAgICAgICAlSGlkZGVuID0gKAogICAgICAgICAgICAgICAgSGlkZGVuQ2xhc3MgPT4gJyBvb29BQ0xIaWRkZW4nLAogICAgICAgICAgICAgICAgSGlkZGVuU3R5bGUgPT4gJ3N0eWxlPWRpc3BsYXk6bm9uZTsnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBBQ0wgaGlkZGVuIGZpZWxkcyBjYW5ub3QgYmUgbWFuZGF0b3J5CiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiApIHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9ID1+IHMvKGNsYXNzPS4rP1ZhbGlkYXRlX1JlcXVpcmVkKS8kMV9JZlZpc2libGUvZzsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAojIFJvdGhlciBPU1MgLyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQogICAgICAgICAgICAgICAgJUhpZGRlbiwKIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZXhhbXBsZSBvZiBkeW5hbWljIGZpZWxkcyBvcmRlciBjdXN0b21pemF0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiAgICAgICAgICAgICAgICAlSGlkZGVuLAojIEVPIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgdGltZSBhY2NvdW50aW5nIGJveAogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJykgKSB7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5lZWRBY2NvdW50ZWRUaW1lJykgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGltZVVuaXRzTGFiZWxNYW5kYXRvcnknLAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFyYW17VGltZVVuaXRzUmVxdWlyZWR9ID0gJ1ZhbGlkYXRlX1JlcXVpcmVkJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGltZVVuaXRzTGFiZWwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFyYW17VGltZVVuaXRzUmVxdWlyZWR9ID0gJyc7CiAgICAgICAgfQogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHMnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFNob3cgdGhlIGN1c3RvbWVyIHVzZXIgYWRkcmVzcyBib29rIGlmIHRoZSBtb2R1bGUgaXMgcmVnaXN0ZXJlZCBhbmQgamF2YSBzY3JpcHQgc3VwcG9ydCBpcyBhdmFpbGFibGUuCiAgICBpZiAoCiAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudEN1c3RvbWVyVXNlckFkZHJlc3NCb29rfQogICAgICAgICYmICRMYXlvdXRPYmplY3QtPntCcm93c2VySmF2YVNjcmlwdFN1cHBvcnR9CiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXtPcHRpb25DdXN0b21lclVzZXJBZGRyZXNzQm9va30gPSAxOwogICAgfQoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IKICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgdXNlIGhlaWdodC93aWR0aCBkZWZpbmVkIGZvciB0aGlzIHNjcmVlbgogICAgICAgICRQYXJhbXtSaWNoVGV4dEhlaWdodH0gPSAkQ29uZmlnLT57UmljaFRleHRIZWlnaHR9IHx8IDA7CiAgICAgICAgJFBhcmFte1JpY2hUZXh0V2lkdGh9ICA9ICRDb25maWctPntSaWNoVGV4dFdpZHRofSAgfHwgMDsKCiAgICAgICAgIyBzZXQgdXAgcmljaCB0ZXh0IGVkaXRvcgogICAgICAgICRMYXlvdXRPYmplY3QtPlNldFJpY2hUZXh0UGFyYW1ldGVycygKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRBdHRhY2htZW50ICggQHsgJFBhcmFte0F0dGFjaG1lbnRzfSB9ICkgewogICAgICAgIGlmICgKICAgICAgICAgICAgJEF0dGFjaG1lbnQtPntDb250ZW50SUR9CiAgICAgICAgICAgICYmICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9CiAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gPX4gL2ltYWdlL2kgKQogICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBAeyAkUGFyYW17QXR0YWNobWVudExpc3R9IH0sICRBdHRhY2htZW50OwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnRHluYW1pY0ZpZWxkTmFtZXMnLAogICAgICAgIFZhbHVlID0+ICREeW5hbWljRmllbGROYW1lcywKICAgICk7CgogICAgbXkgJExvYWRlZEZvcm1EcmFmdDsKICAgIGlmICggJFNlbGYtPntMb2FkZWRGb3JtRHJhZnRJRH0gKSB7CiAgICAgICAgJExvYWRlZEZvcm1EcmFmdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGb3JtRHJhZnQnKS0+Rm9ybURyYWZ0R2V0KAogICAgICAgICAgICBGb3JtRHJhZnRJRCA9PiAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfSwKICAgICAgICAgICAgR2V0Q29udGVudCAgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG15IEBBcnRpY2xlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBPbmx5TGFzdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmIChAQXJ0aWNsZXMpIHsKICAgICAgICAgICAgbXkgJExhc3RBcnRpY2xlID0gJEFydGljbGVzWzBdOwoKICAgICAgICAgICAgbXkgJExhc3RBcnRpY2xlU3lzdGVtVGltZTsKICAgICAgICAgICAgaWYgKCAkTGFzdEFydGljbGUtPntDcmVhdGVUaW1lfSApIHsKICAgICAgICAgICAgICAgIG15ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTGFzdEFydGljbGUtPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgPSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lT2JqZWN0LT5Ub0Vwb2NoKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRGb3JtRHJhZnRTeXN0ZW1UaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJExvYWRlZEZvcm1EcmFmdC0+e0NoYW5nZVRpbWV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJEZvcm1EcmFmdFN5c3RlbVRpbWUgPSAkRm9ybURyYWZ0U3lzdGVtVGltZU9iamVjdC0+VG9FcG9jaCgpOwoKICAgICAgICAgICAgaWYgKCAhJExhc3RBcnRpY2xlU3lzdGVtVGltZSB8fCAkRm9ybURyYWZ0U3lzdGVtVGltZSA8PSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lICkgewogICAgICAgICAgICAgICAgJFBhcmFte0Zvcm1EcmFmdE91dGRhdGVkfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkTG9hZGVkRm9ybURyYWZ0KSApIHsKCiAgICAgICAgJExvYWRlZEZvcm1EcmFmdC0+e0NoYW5nZUJ5TmFtZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTmFtZSgKICAgICAgICAgICAgVXNlcklEID0+ICRMb2FkZWRGb3JtRHJhZnQtPntDaGFuZ2VCeX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNyZWF0ZSAmIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldENvbXBvc2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgRm9ybURyYWZ0ICAgICAgPT4gJENvbmZpZy0+e0Zvcm1EcmFmdH0sCiAgICAgICAgICAgIEZvcm1EcmFmdElEICAgID0+ICRTZWxmLT57TG9hZGVkRm9ybURyYWZ0SUR9LAogICAgICAgICAgICBGb3JtRHJhZnRUaXRsZSA9PiAkTG9hZGVkRm9ybURyYWZ0ID8gJExvYWRlZEZvcm1EcmFmdC0+e1RpdGxlfSA6ICcnLAogICAgICAgICAgICBGb3JtRHJhZnRNZXRhICA9PiAkTG9hZGVkRm9ybURyYWZ0LAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICk7Cn0KCnN1YiBfR2V0RmllbGRzVG9VcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAVXBkYXRhYmxlRmllbGRzOwoKICAgICMgc2V0IHRoZSBmaWVsZHMgdGhhdCBjYW4gYmUgdXBkYXRhYmxlIHZpYSBBSkFYVXBkYXRlCiAgICBpZiAoICEkUGFyYW17T25seUR5bmFtaWNGaWVsZHN9ICkgewogICAgICAgIEBVcGRhdGFibGVGaWVsZHMgPSBxdyggU3RhdGVJRCApOwogICAgfQoKICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdUaWNrZXQnLCAnQXJ0aWNsZScgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgIG15ICRJc0FDTFJlZHVjaWJsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQUNMUmVkdWNpYmxlJywKICAgICAgICApOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNBQ0xSZWR1Y2libGU7CgogICAgICAgIHB1c2ggQFVwZGF0YWJsZUZpZWxkcywgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwogICAgfQoKICAgIHJldHVybiBcQFVwZGF0YWJsZUZpZWxkczsKfQoKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketCompose.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjMTRjYTU1YThiMWQzZDY4NmU4MDNjMTM5ODgxM2I4M2QyMjA5MWU1IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldENvbXBvc2UudHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9ImNvbXBvc2UiIGlkPSJDb21wb3NlVGlja2V0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZW5kRW1haWwiLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkVtYWlsIiB2YWx1ZT0iWyUgRGF0YS5FbWFpbCB8IGh0bWwgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkluUmVwbHlUbyIgdmFsdWU9IlslIERhdGEuSW5SZXBseVRvIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUmVmZXJlbmNlcyIgdmFsdWU9IlslIERhdGEuUmVmZXJlbmNlcyB8IGh0bWwgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1JRCIgdmFsdWU9IlslIERhdGEuRm9ybUlEIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUmVzcG9uc2VJRCIgdmFsdWU9IlslIERhdGEuUmVzcG9uc2VJRCB8IGh0bWwgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlJlcGx5QXJ0aWNsZUlEIiB2YWx1ZT0iWyUgRGF0YS5SZXBseUFydGljbGVJRCB8IGh0bWwgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IklzVmlzaWJsZUZvckN1c3RvbWVyUHJlc2VudCIgdmFsdWU9IjEiLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1EcmFmdFRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5Gb3JtRHJhZnRUaXRsZSB8IGh0bWwgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1EcmFmdElEIiB2YWx1ZT0iWyUgRGF0YS5Gb3JtRHJhZnRJRCB8IGh0bWwgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1EcmFmdEFjdGlvbiIgaWQ9IkZvcm1EcmFmdEFjdGlvbiIgLz4KICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPHVsIGNsYXNzPSJIZWFkZXJQb3B1cCI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkhlYWRlclBvcHVwbGVmdCI+CiAgICAgICAgICAgICAgICAgICAgPGgxPlslIFRyYW5zbGF0ZSgiQ29tcG9zZSBBbnN3ZXIgZm9yICVzJXMlcyIsIENvbmZpZygnVGlja2V0OjpIb29rJyksIENvbmZpZygnVGlja2V0OjpIb29rRGl2aWRlcicpLCBEYXRhLlRpY2tldE51bWJlcikgfCBodG1sICVdICZtZGFzaDsgWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV08L2gxPgogICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0QmFjayIpICVdCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkhlYWRlclBvcHVwcmlnaHQiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIiBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldEJhY2siKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRCYWNrVW5kbyIpICVdCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkhlYWRlclBvcHVwcmlnaHQiPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGhlIHRpY2tldCBoYXMgYmVlbiBsb2NrZWQiKSB8IGh0bWwgJV0uCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IlVuZG9DbG9zZVBvcHVwIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRMb2NrO1N1YmFjdGlvbj1VbmxvY2s7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCAlXVslIElGIERhdGEuUHJldmlvdXNPd25lciAlXTtQcmV2aW91c093bmVyPVslIERhdGEuUHJldmlvdXNPd25lciAlXVslIEVORCAlXTtbJSBFbnYoIkNoYWxsZW5nZVRva2VuUGFyYW0iKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlVuZG8gJiBjbG9zZSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRCYWNrVW5kbyIpICVdCiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIFslIElOQ0xVREUgIkZvcm1FbGVtZW50cy9EcmFmdE5vdGlmaWNhdGlvbnMudHQiICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZyb20iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRnJvbSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRvQ3VzdG9tZXIiIGNsYXNzPSJNYW5kYXRvcnkiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJUbyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJUb0N1c3RvbWVyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJUb0N1c3RvbWVyIiB2YWx1ZT0iIiBjbGFzcz0iQ3VzdG9tZXJBdXRvQ29tcGxldGUgVzc1cGMgWyUgRGF0YS5Ub0lzTG9jYWxBZGRyZXNzIHwgaHRtbCAlXSBbJSBEYXRhLlRvSW52YWxpZCB8IGh0bWwgJV0iIGF1dG9jb21wbGV0ZT0ib2ZmIiAvPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVG9DdXN0b21lclNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRvSXNMb2NhbEFkZHJlc3NTZXJ2ZXJFcnJvck1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgYWRkcmVzcyBpcyByZWdpc3RlcmVkIGFzIHN5c3RlbSBhZGRyZXNzIGFuZCBjYW5ub3QgYmUgdXNlZDogJXMiLCBEYXRhLlRvKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJUb0lzTG9jYWxBZGRyZXNzU2VydmVyRXJyb3JNc2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVG9TZXJ2ZXJFcnJvck1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSBpbmNsdWRlIGF0IGxlYXN0IG9uZSByZWNpcGllbnQiKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJUb1NlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5PcHRpb25DdXN0b21lclVzZXJBZGRyZXNzQm9vayAlXQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBkYXRhLXJlY2lwaWVudC1maWVsZC1sYWJlbD0iWyUgVHJhbnNsYXRlKCJUbyIpIHwgaHRtbCAlXSIgZGF0YS1yZWNpcGllbnQtZmllbGQ9IlRvQ3VzdG9tZXIiIGRhdGEtcmVjaXBpZW50LXR5cGU9IkVtYWlsIiBpZD0iT3B0aW9uQ3VzdG9tZXJVc2VyQWRkcmVzc0Jvb2tUb0N1c3RvbWVyIiBjbGFzcz0iT3B0aW9uQ3VzdG9tZXJVc2VyQWRkcmVzc0Jvb2sgQWRkaXRpb25sRmllbGRJY29uIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZWxlY3Qgb25lIG9yIG1vcmUgcmVjaXBpZW50cyBmcm9tIHRoZSBjdXN0b21lciB1c2VyIGFkZHJlc3MgYm9vay4iKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJDdXN0b21lciB1c2VyIGFkZHJlc3MgYm9vayIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1hZGRyZXNzLWJvb2stbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBbJSBEYXRhLkN1c3RvbWVySGlkZGVuQ29udGFpbmVyIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkN1c3RvbWVyVGlja2V0VGVtcGxhdGVUb0N1c3RvbWVyIFNwYWNpbmdUb3BTbWFsbCBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkN1c3RvbWVySW5pdGlhbFZhbHVlIiBpZD0iQ3VzdG9tZXJJbml0aWFsVmFsdWUiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IlslIERhdGEuVG8gfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkN1c3RvbWVyS2V5IiBpZD0iQ3VzdG9tZXJLZXkiIGNsYXNzPSJDdXN0b21lcktleSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iQ3VzdG9tZXJRdWV1ZSIgaWQ9IkN1c3RvbWVyUXVldWUiIGNsYXNzPSJDdXN0b21lclF1ZXVlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iQ3VzdG9tZXJUaWNrZXRUZXh0IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUbyIpIHwgaHRtbCAlXSIgbmFtZT0iQ3VzdG9tZXJUaWNrZXRUZXh0IiBpZD0iQ3VzdG9tZXJUaWNrZXRUZXh0IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiByZWFkb25seT0icmVhZG9ubHkiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iUmVtb3ZlQ3VzdG9tZXJUaWNrZXQiIGNsYXNzPSJSZW1vdmVCdXR0b24gQ3VzdG9tZXJUaWNrZXRSZW1vdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSBUaWNrZXQgQ3VzdG9tZXIiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iTW92ZUN1c3RvbWVyVGlja2V0VG9DYyIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBDY01vdmUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdG8gQ2MiKSB8IGh0bWwgJV0iPjxzcGFuPkNjPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJNb3ZlQ3VzdG9tZXJUaWNrZXRUb0JjYyIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBCY2NNb3ZlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNb3ZlIHRvIEJjYyIpIHwgaHRtbCAlXSI+PHNwYW4+QmNjPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaWNrZXRDdXN0b21lckNvbnRlbnRUb0N1c3RvbWVyIiBjbGFzcz0iQ3VzdG9tZXJDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkJveExhYmVsIj5bJSBUcmFuc2xhdGUoIlRvIikgfCBodG1sICVdPC9zcGFuPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNdWx0aXBsZUN1c3RvbWVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3BTbWFsbCAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJDdXN0b21lcktleV9bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSIgaWQ9IkN1c3RvbWVyS2V5X1slIERhdGEuQ291bnQgfCBodG1sICVdIiBjbGFzcz0iQ3VzdG9tZXJLZXkiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IlslIERhdGEuQ3VzdG9tZXJLZXkgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkN1c3RvbWVyUXVldWVfWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iIGlkPSJDdXN0b21lclF1ZXVlX1slIERhdGEuQ291bnQgfCBodG1sICVdIiBjbGFzcz0iQ3VzdG9tZXJRdWV1ZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5DdXN0b21lclF1ZXVlIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iQ3VzdG9tZXJUaWNrZXRUZXh0IFslIERhdGEuQ3VzdG9tZXJFcnJvciB8IGh0bWwgJV0iIG5hbWU9IkN1c3RvbWVyVGlja2V0VGV4dF9bJSBEYXRhLkNvdW50ICVdIiBpZD0iQ3VzdG9tZXJUaWNrZXRUZXh0X1slIERhdGEuQ291bnQgJV0iIHR5cGU9InRleHQiIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyRWxlbWVudCB8IGh0bWwgJV0iIHJlYWRvbmx5PSJyZWFkb25seSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iUmVtb3ZlQ3VzdG9tZXJUaWNrZXRfWyUgRGF0YS5Db3VudCAlXSIgY2xhc3M9IlJlbW92ZUJ1dHRvbiBDdXN0b21lclRpY2tldFJlbW92ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUgVGlja2V0IEN1c3RvbWVyIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iTW92ZUN1c3RvbWVyVGlja2V0VG9DY19bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSIgIGNsYXNzPSJNb3ZlQ3VzdG9tZXJCdXR0b24gQ2NNb3ZlIiAgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTW92ZSB0byBDYyIpIHwgaHRtbCAlXSIgbmFtZT0iTW92ZUN1c3RvbWVyVGlja2V0VG9DY19bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSI+PHNwYW4+Q2M8L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJNb3ZlQ3VzdG9tZXJUaWNrZXRUb0JjY19bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBCY2NNb3ZlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNb3ZlIHRvIEJjYyIpIHwgaHRtbCAlXSIgbmFtZT0iTW92ZUN1c3RvbWVyVGlja2V0VG9CY2NfWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iPjxzcGFuPkJjYzwvc3Bhbj48L2E+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDdXN0b21lckVycm9yRXhwbGFudGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkV4cGxhbmF0aW9uIEVycm9yIj5bJSBUcmFuc2xhdGUoIlBsZWFzZSByZW1vdmUgdGhpcyBlbnRyeSBhbmQgZW50ZXIgYSBuZXcgb25lIHdpdGggdGhlIGNvcnJlY3QgdmFsdWUuIikgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiQ3VzdG9tZXJFcnJvckV4cGxhbnRpb24iKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDdXN0b21lclRpY2tldFRleHRfWyUgRGF0YS5Db3VudCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkN1c3RvbWVyR2VuZXJpY1NlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkN1c3RvbWVyR2VuZXJpY1NlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW52YWxpZENvbmZpZ1NlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGVtYWlsIGFkZHJlc3MgaXMgbm90IGFsbG93ZWQgZHVlIHRvIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJJbnZhbGlkQ29uZmlnU2VydmVyRXJyb3JNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnZhbGlkTVhTZXJ2ZXJFcnJvck1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBlbWFpbCBhZGRyZXNzIGZhaWxlZCBNWCBjaGVjay4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJJbnZhbGlkTVhTZXJ2ZXJFcnJvck1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkludmFsaWRETlNTZXJ2ZXJFcnJvck1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiRE5TIHByb2JsZW0sIHBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBlcnJvciBsb2cuIikgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiSW52YWxpZEROU1NlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW52YWxpZFN5bnRheFNlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGUgc3ludGF4IG9mIHRoaXMgZW1haWwgYWRkcmVzcyBpcyBpbmNvcnJlY3QuIikgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiSW52YWxpZFN5bnRheFNlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgYWRkcmVzcyBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgYWRkcmVzcyBsaXN0LiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIklzRHVwbGljYXRlZFNlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTXVsdGlwbGVDdXN0b21lciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNdWx0aXBsZUN1c3RvbWVyQ291bnRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJDdXN0b21lclRpY2tldENvdW50ZXJUb0N1c3RvbWVyIiBpZD0iQ3VzdG9tZXJUaWNrZXRDb3VudGVyVG9DdXN0b21lciIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5DdXN0b21lckNvdW50ZXIgfCBodG1sICVdIi8+ClslIFJlbmRlckJsb2NrRW5kKCJNdWx0aXBsZUN1c3RvbWVyQ291bnRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDY0N1c3RvbWVyIj5bJSBUcmFuc2xhdGUoIkNjIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkNjQ3VzdG9tZXIiIHR5cGU9InRleHQiIG5hbWU9IkNjQ3VzdG9tZXIiIHZhbHVlPSIiIGNsYXNzPSJDdXN0b21lckF1dG9Db21wbGV0ZSBXNzVwYyBbJSBEYXRhLkNjSXNMb2NhbEFkZHJlc3MgfCBodG1sICVdIFslIERhdGEuQ2NJbnZhbGlkIHwgaHRtbCAlXSIgYXV0b2NvbXBsZXRlPSJvZmYiIC8+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDY0N1c3RvbWVyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ2NJc0xvY2FsQWRkcmVzc1NlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBhZGRyZXNzIGlzIHJlZ2lzdGVyZWQgYXMgc3lzdGVtIGFkZHJlc3MgYW5kIGNhbm5vdCBiZSB1c2VkOiAlcyIsIERhdGEuQ2MpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNjSXNMb2NhbEFkZHJlc3NTZXJ2ZXJFcnJvck1zZyIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLk9wdGlvbkN1c3RvbWVyVXNlckFkZHJlc3NCb29rICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGRhdGEtcmVjaXBpZW50LWZpZWxkLWxhYmVsPSJbJSBUcmFuc2xhdGUoIkNjIikgfCBodG1sICVdIiBkYXRhLXJlY2lwaWVudC1maWVsZD0iQ2NDdXN0b21lciIgZGF0YS1yZWNpcGllbnQtdHlwZT0iRW1haWwiIGlkPSJPcHRpb25DdXN0b21lclVzZXJBZGRyZXNzQm9va0NjQ3VzdG9tZXIiIGNsYXNzPSJPcHRpb25DdXN0b21lclVzZXJBZGRyZXNzQm9vayBBZGRpdGlvbmxGaWVsZEljb24iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlbGVjdCBvbmUgb3IgbW9yZSByZWNpcGllbnRzIGZyb20gdGhlIGN1c3RvbWVyIHVzZXIgYWRkcmVzcyBib29rLiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkN1c3RvbWVyIHVzZXIgYWRkcmVzcyBib29rIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWFkZHJlc3MtYm9vay1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFslIERhdGEuQ2NDdXN0b21lckhpZGRlbkNvbnRhaW5lciB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDdXN0b21lclRpY2tldFRlbXBsYXRlQ2NDdXN0b21lciBTcGFjaW5nVG9wU21hbGwgSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJDY0N1c3RvbWVySW5pdGlhbFZhbHVlIiBpZD0iQ2NDdXN0b21lckluaXRpYWxWYWx1ZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5DYyB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iQ2NDdXN0b21lcktleSIgaWQ9IkNjQ3VzdG9tZXJLZXkiIGNsYXNzPSJDdXN0b21lcktleSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iQ2NDdXN0b21lclF1ZXVlIiBpZD0iQ2NDdXN0b21lclF1ZXVlIiBjbGFzcz0iQ3VzdG9tZXJRdWV1ZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9IkN1c3RvbWVyVGlja2V0VGV4dCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ2MiKSB8IGh0bWwgJV0iIG5hbWU9IkNjQ3VzdG9tZXJUaWNrZXRUZXh0IiBpZD0iQ2NDdXN0b21lclRpY2tldFRleHQiIHR5cGU9InRleHQiIHZhbHVlPSIiIHJlYWRvbmx5PSJyZWFkb25seSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJDY1JlbW92ZUN1c3RvbWVyVGlja2V0IiBjbGFzcz0iUmVtb3ZlQnV0dG9uIEN1c3RvbWVyVGlja2V0UmVtb3ZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUgQ2MiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iTW92ZUN1c3RvbWVyVGlja2V0Q2NUbyIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBUb01vdmUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdG8gVG8iKSB8IGh0bWwgJV0iPjxzcGFuPlRvPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJNb3ZlQ3VzdG9tZXJUaWNrZXRDY0JjYyIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBCY2NNb3ZlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNb3ZlIHRvIEJjYyIpIHwgaHRtbCAlXSI+PHNwYW4+QmNjPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaWNrZXRDdXN0b21lckNvbnRlbnRDY0N1c3RvbWVyIiBjbGFzcz0iQ2NDdXN0b21lckNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iQm94TGFiZWwiPlslIFRyYW5zbGF0ZSgiQ2MiKSB8IGh0bWwgJV08L3NwYW4+ClslIFJlbmRlckJsb2NrU3RhcnQoIkNjTXVsdGlwbGVDdXN0b21lciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJDY0N1c3RvbWVyS2V5X1slIERhdGEuQ291bnQgfCBodG1sICVdIiBpZD0iQ2NDdXN0b21lcktleV9bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSIgY2xhc3M9IkN1c3RvbWVyS2V5IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyS2V5IHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJDY0N1c3RvbWVyUXVldWVfWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iIGlkPSJDY0N1c3RvbWVyUXVldWVfWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iIGNsYXNzPSJDdXN0b21lclF1ZXVlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyUXVldWUgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJDdXN0b21lclRpY2tldFRleHQgWyUgRGF0YS5DdXN0b21lckVycm9yIHwgaHRtbCAlXSIgbmFtZT0iQ2NDdXN0b21lclRpY2tldFRleHRfWyUgRGF0YS5Db3VudCAlXSIgaWQ9IkNjQ3VzdG9tZXJUaWNrZXRUZXh0X1slIERhdGEuQ291bnQgJV0iIHR5cGU9InRleHQiIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyRWxlbWVudCB8IGh0bWwgJV0iIHJlYWRvbmx5PSJyZWFkb25seSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iQ2NSZW1vdmVDdXN0b21lclRpY2tldF9bJSBEYXRhLkNvdW50ICVdIiBjbGFzcz0iUmVtb3ZlQnV0dG9uIEN1c3RvbWVyVGlja2V0UmVtb3ZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSBDYyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9Ik1vdmVDdXN0b21lclRpY2tldENjVG9fWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iICBjbGFzcz0iTW92ZUN1c3RvbWVyQnV0dG9uIFRvTW92ZSIgIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdG8gVG8iKSB8IGh0bWwgJV0iICBuYW1lPSJNb3ZlQ3VzdG9tZXJUaWNrZXRDY1RvX1slIERhdGEuQ291bnQgfCBodG1sICVdIj48c3Bhbj5Ubzwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9Ik1vdmVDdXN0b21lclRpY2tldENjQmNjX1slIERhdGEuQ291bnQgfCBodG1sICVdIiBjbGFzcz0iTW92ZUN1c3RvbWVyQnV0dG9uIEJjY01vdmUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdG8gQmNjIikgfCBodG1sICVdIiBuYW1lPSJNb3ZlQ3VzdG9tZXJUaWNrZXRDY0JjY19bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSI+PHNwYW4+QmNjPC9zcGFuPjwvYT4KClslIFJlbmRlckJsb2NrU3RhcnQoIkNjQ3VzdG9tZXJFcnJvckV4cGxhbnRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJFeHBsYW5hdGlvbiBFcnJvciI+WyUgVHJhbnNsYXRlKCJQbGVhc2UgcmVtb3ZlIHRoaXMgZW50cnkgYW5kIGVudGVyIGEgbmV3IG9uZSB3aXRoIHRoZSBjb3JyZWN0IHZhbHVlLiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNjQ3VzdG9tZXJFcnJvckV4cGxhbnRpb24iKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDY0N1c3RvbWVyVGlja2V0VGV4dF9bJSBEYXRhLkNvdW50ICVdU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ2NDdXN0b21lckdlbmVyaWNTZXJ2ZXJFcnJvck1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJDY0N1c3RvbWVyR2VuZXJpY1NlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ2NJbnZhbGlkQ29uZmlnU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZW1haWwgYWRkcmVzcyBpcyBub3QgYWxsb3dlZCBkdWUgdG8gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNjSW52YWxpZENvbmZpZ1NlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ2NJbnZhbGlkTVhTZXJ2ZXJFcnJvck1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBlbWFpbCBhZGRyZXNzIGZhaWxlZCBNWCBjaGVjay4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJDY0ludmFsaWRNWFNlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ2NJbnZhbGlkRE5TU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIkROUyBwcm9ibGVtLCBwbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGFuZCB0aGUgZXJyb3IgbG9nLiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNjSW52YWxpZEROU1NlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ2NJbnZhbGlkU3ludGF4U2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoZSBzeW50YXggb2YgdGhpcyBlbWFpbCBhZGRyZXNzIGlzIGluY29ycmVjdC4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJDY0ludmFsaWRTeW50YXhTZXJ2ZXJFcnJvck1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNjSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgYWRkcmVzcyBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgYWRkcmVzcyBsaXN0LiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNjSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDY011bHRpcGxlQ3VzdG9tZXIiKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIkNjTXVsdGlwbGVDdXN0b21lckNvdW50ZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iQ3VzdG9tZXJUaWNrZXRDb3VudGVyQ2NDdXN0b21lciIgaWQ9IkN1c3RvbWVyVGlja2V0Q291bnRlckNjQ3VzdG9tZXIiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IlslIERhdGEuQ3VzdG9tZXJDb3VudGVyIHwgaHRtbCAlXSIvPgpbJSBSZW5kZXJCbG9ja0VuZCgiQ2NNdWx0aXBsZUN1c3RvbWVyQ291bnRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJCY2NDdXN0b21lciI+WyUgVHJhbnNsYXRlKCJCY2MiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iQmNjQ3VzdG9tZXIiIHR5cGU9InRleHQiIG5hbWU9IkJjY0N1c3RvbWVyIiB2YWx1ZT0iIiBjbGFzcz0iQ3VzdG9tZXJBdXRvQ29tcGxldGUgVzc1cGMgWyUgRGF0YS5CY2NJc0xvY2FsQWRkcmVzcyB8IGh0bWwgJV0gWyUgRGF0YS5CY2NJbnZhbGlkIHwgaHRtbCAlXSIgYXV0b2NvbXBsZXRlPSJvZmYiIC8+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJCY2NDdXN0b21lclNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkJjY0lzTG9jYWxBZGRyZXNzU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGFkZHJlc3MgaXMgcmVnaXN0ZXJlZCBhcyBzeXN0ZW0gYWRkcmVzcyBhbmQgY2Fubm90IGJlIHVzZWQ6ICVzIiwgRGF0YS5CY2MpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkJjY0lzTG9jYWxBZGRyZXNzU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLk9wdGlvbkN1c3RvbWVyVXNlckFkZHJlc3NCb29rICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGRhdGEtcmVjaXBpZW50LWZpZWxkLWxhYmVsPSJbJSBUcmFuc2xhdGUoIkJjYyIpIHwgaHRtbCAlXSIgZGF0YS1yZWNpcGllbnQtZmllbGQ9IkJjY0N1c3RvbWVyIiBkYXRhLXJlY2lwaWVudC10eXBlPSJFbWFpbCIgaWQ9Ik9wdGlvbkN1c3RvbWVyVXNlckFkZHJlc3NCb29rQmNjQ3VzdG9tZXIiIGNsYXNzPSJPcHRpb25DdXN0b21lclVzZXJBZGRyZXNzQm9vayBBZGRpdGlvbmxGaWVsZEljb24iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlbGVjdCBvbmUgb3IgbW9yZSByZWNpcGllbnRzIGZyb20gdGhlIGN1c3RvbWVyIHVzZXIgYWRkcmVzcyBib29rLiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkN1c3RvbWVyIHVzZXIgYWRkcmVzcyBib29rIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWFkZHJlc3MtYm9vay1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFslIERhdGEuQmNjQ3VzdG9tZXJIaWRkZW5Db250YWluZXIgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ3VzdG9tZXJUaWNrZXRUZW1wbGF0ZUJjY0N1c3RvbWVyIFNwYWNpbmdUb3BTbWFsbCBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkJjY0N1c3RvbWVySW5pdGlhbFZhbHVlIiBpZD0iQmNjQ3VzdG9tZXJJbml0aWFsVmFsdWUiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IlslIERhdGEuQmNjIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJCY2NDdXN0b21lcktleSIgaWQ9IkJjY0N1c3RvbWVyS2V5IiBjbGFzcz0iQ3VzdG9tZXJLZXkiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkJjY0N1c3RvbWVyUXVldWUiIGlkPSJCY2NDdXN0b21lclF1ZXVlIiBjbGFzcz0iQ3VzdG9tZXJRdWV1ZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9IkN1c3RvbWVyVGlja2V0VGV4dCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQmNjIikgfCBodG1sICVdIiBuYW1lPSJCY2NDdXN0b21lclRpY2tldFRleHQiIGlkPSJCY2NDdXN0b21lclRpY2tldFRleHQiIHR5cGU9InRleHQiIHZhbHVlPSIiIHJlYWRvbmx5PSJyZWFkb25seSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJCY2NSZW1vdmVDdXN0b21lclRpY2tldCIgY2xhc3M9IlJlbW92ZUJ1dHRvbiBDdXN0b21lclRpY2tldFJlbW92ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIEJjYyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJNb3ZlQ3VzdG9tZXJUaWNrZXRCY2NUbyIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBUb01vdmUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdG8gVG8iKSB8IGh0bWwgJV0iPjxzcGFuPlRvPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJNb3ZlQ3VzdG9tZXJUaWNrZXRCY2NDYyIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBDY01vdmUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdG8gQ2MiKSB8IGh0bWwgJV0iPjxzcGFuPkNjPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaWNrZXRDdXN0b21lckNvbnRlbnRCY2NDdXN0b21lciIgY2xhc3M9IkJjY0N1c3RvbWVyQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJCb3hMYWJlbCI+WyUgVHJhbnNsYXRlKCJCY2MiKSB8IGh0bWwgJV08L3NwYW4+ClslIFJlbmRlckJsb2NrU3RhcnQoIkJjY011bHRpcGxlQ3VzdG9tZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcFNtYWxsICI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkJjY0N1c3RvbWVyS2V5X1slIERhdGEuQ291bnQgfCBodG1sICVdIiBpZD0iQmNjQ3VzdG9tZXJLZXlfWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iIGNsYXNzPSJDdXN0b21lcktleSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5DdXN0b21lcktleSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iQmNjQ3VzdG9tZXJRdWV1ZV9bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSIgaWQ9IkJjY0N1c3RvbWVyUXVldWVfWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iIGNsYXNzPSJDdXN0b21lclF1ZXVlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyUXVldWUgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJDdXN0b21lclRpY2tldFRleHQgWyUgRGF0YS5DdXN0b21lckVycm9yIHwgaHRtbCAlXSIgbmFtZT0iQmNjQ3VzdG9tZXJUaWNrZXRUZXh0X1slIERhdGEuQ291bnQgJV0iIGlkPSJCY2NDdXN0b21lclRpY2tldFRleHRfWyUgRGF0YS5Db3VudCAlXSIgdHlwZT0idGV4dCIgdmFsdWU9IlslIERhdGEuQ3VzdG9tZXJFbGVtZW50IHwgaHRtbCAlXSIgcmVhZG9ubHk9InJlYWRvbmx5IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJCY2NSZW1vdmVDdXN0b21lclRpY2tldF9bJSBEYXRhLkNvdW50ICVdIiBjbGFzcz0iUmVtb3ZlQnV0dG9uIEN1c3RvbWVyVGlja2V0UmVtb3ZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSBCY2MiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJNb3ZlQ3VzdG9tZXJUaWNrZXRCY2NUb19bJSBEYXRhLkNvdW50IHwgaHRtbCAlXSIgY2xhc3M9Ik1vdmVDdXN0b21lckJ1dHRvbiBUb01vdmUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1vdmUgdG8gVG8iKSB8IGh0bWwgJV0iIG5hbWU9Ik1vdmVDdXN0b21lclRpY2tldEJjY1RvX1slIERhdGEuQ291bnQgfCBodG1sICVdIj48c3Bhbj5Ubzwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9Ik1vdmVDdXN0b21lclRpY2tldEJjY0NjX1slIERhdGEuQ291bnQgfCBodG1sICVdIiBjbGFzcz0iTW92ZUN1c3RvbWVyQnV0dG9uIENjTW92ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTW92ZSB0byBDYyIpIHwgaHRtbCAlXSIgbmFtZT0iTW92ZUN1c3RvbWVyVGlja2V0QmNjQ2NfWyUgRGF0YS5Db3VudCB8IGh0bWwgJV0iPjxzcGFuPkNjPC9zcGFuPjwvYT4KClslIFJlbmRlckJsb2NrU3RhcnQoIkJjY0N1c3RvbWVyRXJyb3JFeHBsYW50aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRXhwbGFuYXRpb24gRXJyb3IiPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHJlbW92ZSB0aGlzIGVudHJ5IGFuZCBlbnRlciBhIG5ldyBvbmUgd2l0aCB0aGUgY29ycmVjdCB2YWx1ZS4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJCY2NDdXN0b21lckVycm9yRXhwbGFudGlvbiIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkJjY0N1c3RvbWVyVGlja2V0VGV4dF9bJSBEYXRhLkNvdW50ICVdU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQmNjQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiQmNjQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCY2NJbnZhbGlkQ29uZmlnU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZW1haWwgYWRkcmVzcyBpcyBub3QgYWxsb3dlZCBkdWUgdG8gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkJjY0ludmFsaWRDb25maWdTZXJ2ZXJFcnJvck1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkJjY0ludmFsaWRNWFNlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGVtYWlsIGFkZHJlc3MgZmFpbGVkIE1YIGNoZWNrLiIpIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkJjY0ludmFsaWRNWFNlcnZlckVycm9yTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQmNjSW52YWxpZEROU1NlcnZlckVycm9yTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJETlMgcHJvYmxlbSwgcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiBhbmQgdGhlIGVycm9yIGxvZy4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJCY2NJbnZhbGlkRE5TU2VydmVyRXJyb3JNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCY2NJbnZhbGlkU3ludGF4U2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoZSBzeW50YXggb2YgdGhpcyBlbWFpbCBhZGRyZXNzIGlzIGluY29ycmVjdC4iKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJCY2NJbnZhbGlkU3ludGF4U2VydmVyRXJyb3JNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCY2NJc0R1cGxpY2F0ZWRTZXJ2ZXJFcnJvck1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBhZGRyZXNzIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBhZGRyZXNzIGxpc3QuIikgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiQmNjSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJCY2NNdWx0aXBsZUN1c3RvbWVyIikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCY2NNdWx0aXBsZUN1c3RvbWVyQ291bnRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJDdXN0b21lclRpY2tldENvdW50ZXJCY2NDdXN0b21lciIgaWQ9IkN1c3RvbWVyVGlja2V0Q291bnRlckJjY0N1c3RvbWVyIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyQ291bnRlciB8IGh0bWwgJV0iLz4KWyUgUmVuZGVyQmxvY2tFbmQoIkJjY011bHRpcGxlQ3VzdG9tZXJDb3VudGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJTdWJqZWN0Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlslIFRyYW5zbGF0ZSgiU3ViamVjdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlN1YmplY3QiIGlkPSJTdWJqZWN0IiB2YWx1ZT0iWyUgRGF0YS5TdWJqZWN0IHwgaHRtbCAlXSIgY2xhc3M9IlZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuU3ViamVjdEludmFsaWQgJV0gVzc1cGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3ViamVjdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3ViamVjdFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbHVlICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIERhdGEuSW52YWxpZCB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuRmllbGRFeHBsYW5hdGlvbi5sZW5ndGggJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoRGF0YS5GaWVsZEV4cGxhbmF0aW9uKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk9wdGlvbiIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRPcHRpb25zIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJPcHRpb25zIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgoKPCEtLSBPdXRwdXRGaWx0ZXJIb29rX1RpY2tldE9wdGlvbnNCZWdpbiAtLT4KPCEtLSBPdXRwdXRGaWx0ZXJIb29rX1RpY2tldE9wdGlvbnNFbmQgLS0+CgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE9wdGlvbnMiKSAlXQoKPCEtLSBPdXRwdXRGaWx0ZXJIb29rX05vVGlja2V0T3B0aW9uc0ZhbGxiYWNrIC0tPgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJSaWNoVGV4dCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIlRleHQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJSaWNoVGV4dCIgbmFtZT0iQm9keSIgcm93cz0iMTUiIGNvbHM9IlslIENvbmZpZygiVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFFbWFpbCIpICVdIiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5Cb2R5SW52YWxpZCB8IGh0bWwgJV0iPlslIERhdGEuUmVzcG9uc2VGb3JtYXQgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmljaFRleHRTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50cyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KWyUgSU5DTFVERSAiRm9ybUVsZW1lbnRzL0F0dGFjaG1lbnRMaXN0LnR0IiAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU3RhdGVJRCI+WyUgVHJhbnNsYXRlKCJOZXh0IHRpY2tldCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OZXh0U3RhdGVzU3RyZyAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiUGVuZGluZyBkYXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlBlbmRpbmdEYXRlU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRheVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJEYXRlIEludmFsaWQhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkRhdGUgSW52YWxpZCEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIkZvciBhbGwgcGVuZGluZyogc3RhdGVzLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJc1Zpc2libGVGb3JDdXN0b21lciIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSXNWaXNpYmxlRm9yQ3VzdG9tZXIiPlslIFRyYW5zbGF0ZSgiVmlzaWJsZSBmb3IgY3VzdG9tZXIiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IklzVmlzaWJsZUZvckN1c3RvbWVyIiBuYW1lPSJJc1Zpc2libGVGb3JDdXN0b21lciIgdmFsdWU9IjEiIFslIElGIERhdGEuSXNWaXNpYmxlRm9yQ3VzdG9tZXIgJV1jaGVja2VkPSJjaGVja2VkIlslIEVORCAlXS8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSXNWaXNpYmxlRm9yQ3VzdG9tZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGQiKSAlXQojIFJvdGhlciBPU1MgLyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQojICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXVslIERhdGEuSGlkZGVuQ2xhc3MgfCBodG1sICVdIiBbJSBEYXRhLkhpZGRlblN0eWxlIHwgaHRtbCAlXT4KIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmllbGQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZCIpICVdCgojIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBmaXhlZCBkeW5hbWljIGZpZWxkIGJsb2NrcyBmb3IgY3VzdG9taXphdGlvbnMKIyBOb3RlOiBGaWVsZDEgYW5kIEZpZWxkMiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgYW5kIGhhZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwKIyBmaWVsZCBuYW1lcwojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiMgUm90aGVyIE9TUyAvIEhpZGVTaG93Rm9yQWdlbnRUaWNrZXRDb21wb3NlCiMgIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJvdyBSb3dfRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSB8IGh0bWwgJV1bJSBEYXRhLkhpZGRlbkNsYXNzIHwgaHRtbCAlXSIgWyUgRGF0YS5IaWRkZW5TdHlsZSB8IGh0bWwgJV0+CiMgRU8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKIyAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyBSb3RoZXIgT1NTIC8gSGlkZVNob3dGb3JBZ2VudFRpY2tldENvbXBvc2UKIyAjICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXVslIERhdGEuSGlkZGVuQ2xhc3MgfCBodG1sICVdIiBbJSBEYXRhLkhpZGRlblN0eWxlIHwgaHRtbCAlXT4KIyBFTyBIaWRlU2hvd0ZvckFnZW50VGlja2V0Q29tcG9zZQojICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmllbGQgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KI1slIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVVbml0c0xhYmVsIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUaW1lVW5pdHMiPlslIFRyYW5zbGF0ZSgiVGltZSB1bml0cyIpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUaW1lVW5pdHMiKSkgfCBodG1sICVdOjwvbGFiZWw+ClslIFJlbmRlckJsb2NrRW5kKCJUaW1lVW5pdHNMYWJlbCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVVbml0c0xhYmVsTWFuZGF0b3J5IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUaW1lVW5pdHMiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJUaW1lIHVuaXRzIikgfCBodG1sICVdIFslIFRyYW5zbGF0ZShDb25maWcoIlRpY2tldDo6RnJvbnRlbmQ6OlRpbWVVbml0cyIpKSB8IGh0bWwgJV06PC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVVbml0c0xhYmVsTWFuZGF0b3J5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZVVuaXRzIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJUaW1lVW5pdHMiIGlkPSJUaW1lVW5pdHMiIHZhbHVlPSJbJSBEYXRhLlRpbWVVbml0cyB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9UaW1lVW5pdHMgWyUgRGF0YS5UaW1lVW5pdHNSZXF1aXJlZCB8IGh0bWwgJV0gWyUgRGF0YS5UaW1lVW5pdHNJbnZhbGlkIHwgaHRtbCAlXSAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRpbWVVbml0c0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaW1lVW5pdHNTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGltZVVuaXRzIikgJV0KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIvPgoKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJzdWJtaXRSaWNoVGV4dCIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZW5kIG1haWwiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNlbmQgbWFpbCIpIHwgaHRtbCAlXSIgPgogICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJTZW5kIG1haWwiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICBbJSBJTkNMVURFICJGb3JtRWxlbWVudHMvRHJhZnRCdXR0b25zLnR0IiAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZm9ybT4K</File>
        <File Location="doc/en/HideShowForAgentTicketCompose.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>