<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>LightAdmin</Name>
    <Version>10.1.2</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:48:40" Version="10.1.2">Added hungarian translation; tidied.</ChangeLog>
    <ChangeLog Date="2023-04-26 08:01:23" Version="10.1.1">Initial release.</ChangeLog>
    <Description Lang="en">Enables creating and managing of templates, attachments and ticket notifications with a queue- or group-based permission concept.</Description>
    <Description Lang="de">Erlaubt das Erstellen und Verwalten von Vorlagen, Anhängen und Ticket-Benachrichtigungen mit einer Queue-/Gruppen-basierten Berechtigung.</Description>
    <Description Lang="hu">Lehetővé teszi a sablonok, mellékletek és jegyértesítések létrehozását és kezelését várólista- vagy csoportalapú jogosultság-elképzeléssel.</Description>
    <Framework>10.1.x</Framework>
    <BuildCommitID>b60ee3f563c7e4d684c7cfe7a8c29b4dc1d936ae</BuildCommitID>
    <BuildDate>2026-10-28 14:48:44</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="doc/content/index.rst" Permission="660" Encode="Base64">Li4gaW1hZ2U6OiAuLi9pbWFnZXMvb3RvYm8tbG9nby5wbmcKICAgOmFsaWduOiBjZW50ZXIKfAoKLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKICAgIDpjYXB0aW9uOiBDb250ZW50cwoKU2FjcmlmaWNlIHRvIFNwaGlueAo9PT09PT09PT09PT09PT09PT09CgpEZXNjcmlwdGlvbgo9PT09PT09PT09PQoKVGhlIG1vZHVsZSBhZGRzIGEgbGlnaHQgYWRtaW4gZnVuY3Rpb25hbGl0eS4gVXNpbmcgdGhpcywgYWdlbnRzIGNhbiBiZSBncmFudGVkIHJlc3RyaWN0ZWQgYWRtaW4gcGVybWlzc2lvbnMgdG8gdGlja2V0IG5vdGlmaWNhdGlvbnMgYW5kIHRlbXBsYXRlcyB3aGljaCBhcmUgbGlua2VkIHRvIHF1ZXVlcyB0aGUgdXNlciBoYXMgYWNjZXNzIHRvLgoKU3lzdGVtIHJlcXVpcmVtZW50cwo9PT09PT09PT09PT09PT09PT09CgpGcmFtZXdvcmsKLS0tLS0tLS0tCk9UT0JPIDEwLjEueAoKUGFja2FnZXMKLS0tLS0tLS0KXC0KClRoaXJkLXBhcnR5IHNvZnR3YXJlCi0tLS0tLS0tLS0tLS0tLS0tLS0tClwtCgpVc2FnZQo9PT09PQoKVGhlIG1vZHVsZSBhZGRzIGEgbGlnaHQgYWRtaW4gZnVuY3Rpb25hbGl0eS4gVXNpbmcgdGhpcywgYWdlbnRzIGNhbiBiZSBncmFudGVkIHJlc3RyaWN0ZWQgYWRtaW4gcGVybWlzc2lvbnMgdG8gdGhlIGZvbGxvd2luZyBhcmVhczoKCiogVGlja2V0IG5vdGlmaWNhdGlvbnMKKiBUZW1wbGF0ZXMgaW5jbHVkaW5nIGF0dGFjaG1lbnRzIGFuZCBsaW5rZWQgcXVldWVzCgpBZnRlciBwYWNrYWdlIGluc3RhbGxhdGlvbiBhbmQgY29uZmlndXJhdGlvbiwgdGhlIGxpZ2h0IGFkbWluIHVzZXIgaGFzIGFjY2VzcyB0byB0aWNrZXQgbm90aWZpY2F0aW9ucyBhbmQgdGVtcGxhdGVzIGluIGdlbmVyYWwuIFJlZ2FyZGluZyB0aGUgYWNjZXNzLCB0aHJlZSBzdGF0ZXMgYXJlIGRpc3Rpbmd1aXNoZWQ6CgojLiBMaWdodCBhZG1pbiB1c2VyIGhhcyBmdWxsIGFjY2VzcyBpZiBoZSBoYXMgcncgYWNjZXNzIG9uIGFsbCBxdWV1ZXMgd2hpY2ggYWZmZWN0IHRoZSBvYmplY3QuCiMuIExpZ2h0IGFkbWluIHVzZXIgY2FuIHZpZXcsIGJ1dCBub3QgZWRpdCwgaWYgaGUgaGFzIGF0IGxlYXN0IHJvIGFjY2VzcyBvbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHF1ZXVlcyB3aGljaCBhZmZlY3QgdGhlIG9iamVjdC4gSW4gY2FzZSBvZiB0ZW1wbGF0ZXMgbm8gZXhwbGljaXQgcXVldWUgbWVhbnMgJ2luIHVzZSBmb3Igbm8gcXVldWUnIGFuZCB0aHVzIHJ3IGFjY2Vzcy4gSW4gY2FzZSBvZiB0aWNrZXQgbm90aWZpY2F0aW9ucyBubyBleHBsaWNpdCBxdWV1ZSBtZWFucyAnaW4gdXNlIGZvciBhbGwgcXVldWVzJyBhbmQgdGh1cyBsaWtlbHkgcm8gYWNjZXNzIChkZXBlbmRpbmcgb24gdGhlIHJpZ2h0cyBvZiB0aGUgYWdlbnQpLgojLiBPYmplY3QgaXMgcmVsYXRlZCB0byBxdWV1ZXMgb24gd2hpY2ggdGhlIHVzZXIgaGFzIG5vIHBlcm1pc3Npb25zIGF0IGFsbC4gVGhlc2Ugb2JqZWN0cyBhcmUgaGlkZGVuLgoKU2V0dXAKLS0tLS0KClRoZSBwZXJtaXNzaW9ucyBjYW4gYmUgYXNzaWduZWQgdG8gZXZlcnkgZ3JvdXAuIEZvciBjb252ZW5pZW5jZSByZWFzb25zLCBhIHNwZWNpYWxpemVkIGxpZ2h0IGFkbWluIGdyb3VwIGNhbiBiZSBjcmVhdGVkLgoKVG8gZ3JhbnQgbGlnaHQgYWRtaW4gcGVybWlzc2lvbnMgdG8gdGhlIGdyb3VwLCBpdCBoYXMgdG8gYmUgYWRkZWQgdG8gR3JvdXBSbyBpbiB0aGUgZm9sbG93aW5nIHN5c3RlbSBjb25maWd1cmF0aW9uIHNldHRpbmdzOgoKKiBFbmFibGUgcmVzdHJpY3RlZCBhY2Nlc3MgdG8gdGhlIGdlbmVyYWwgYWRtaW46CiAgICAqIEZyb250ZW5kOjpNb2R1bGUjIyNBZG1pbgogICAgKiBGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluIyMjMDAxLUZyYW1ld29yawoKKiBJbmNsdWRlIG5vdGlmaWNhdGlvbnM6CiAgICAqIEZyb250ZW5kOjpOYXZpZ2F0aW9uTW9kdWxlIyMjQWRtaW5Ob3RpZmljYXRpb25FdmVudAogICAgKiBGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5Ob3RpZmljYXRpb25FdmVudAoKKiBJbmNsdWRlIHRlbXBsYXRlczoKICAgICogRnJvbnRlbmQ6Ok5hdmlnYXRpb25Nb2R1bGUjIyNBZG1pblRlbXBsYXRlCiAgICAqIEZyb250ZW5kOjpOYXZpZ2F0aW9uTW9kdWxlIyMjQWRtaW5UZW1wbGF0ZUF0dGFjaG1lbnQKICAgICogRnJvbnRlbmQ6Ok5hdmlnYXRpb25Nb2R1bGUjIyNBZG1pblF1ZXVlVGVtcGxhdGVzCiAgICAqIEZyb250ZW5kOjpOYXZpZ2F0aW9uTW9kdWxlIyMjQWRtaW5BdHRhY2htZW50CiAgICAqIEZyb250ZW5kOjpNb2R1bGUjIyNBZG1pblRlbXBsYXRlCiAgICAqIEZyb250ZW5kOjpNb2R1bGUjIyNBZG1pblRlbXBsYXRlQXR0YWNobWVudAogICAgKiBGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5RdWV1ZVRlbXBsYXRlcwogICAgKiBGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5BdHRhY2htZW50CgpBYm91dAo9PT09PT09CgpDb250YWN0Ci0tLS0tLS0KfCBSb3RoZXIgT1NTIEdtYkgKfCBFbWFpbDogaGVsbG9Ab3RvYm8uZGUKfCBXZWI6IGh0dHBzOi8vb3RvYm8uZGUKClZlcnNpb24KLS0tLS0tLQpBdXRob3I6IHxkb2MtdmVuZG9yfCAvIFZlcnNpb246IHxkb2MtdmVyc2lvbnwgLyBEYXRlIG9mIHJlbGVhc2U6IHxkb2MtZGF0ZXN0YW1wfAo=</File>
        <File Location="Custom/Kernel/Modules/AdminAttachment.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQWRtaW5BdHRhY2htZW50LnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbkF0dGFjaG1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgaWYgKCAhJFBhcmFte0FjY2Vzc1J3fSAmJiAkUGFyYW17QWNjZXNzUm99ICkgewogICAgICAgICRTZWxmLT57TGlnaHRBZG1pbn0gPSAxOwogICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFN0ZEF0dGFjaG1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RkQXR0YWNobWVudCcpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICBteSAkTGlnaHRBZG1pbk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaWdodEFkbWluJyk7CiMgRU8gTGlnaHRBZG1pbgoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICBteSAkSUQgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICBteSAlRGF0YSA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50R2V0KAogICAgICAgICAgICBJRCA9PiAkSUQsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbiBmb3IgYWxsIGxpbmtlZCB0ZW1wbGF0ZXMuCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICAkRGF0YXtQZXJtaXNzaW9ufSA9ICRMaWdodEFkbWluT2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZVBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBJRCAgICAgID0+ICRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgRGVmYXVsdCA9PiAncm8nLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkRGF0YXtQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgICAgICVEYXRhID0gKCk7CiAgICAgICAgICAgIH0gZWxzaWYgKCAkRGF0YXtQZXJtaXNzaW9ufSBlcSAncm8nICkgewogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ05vdGljZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdObyBwZXJtaXNzaW9uIHRvIGVkaXQgdGhpcyBhdHRhY2htZW50LicgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF0dGFjaG1lbnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgQE5ld0lEcyA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJRHMnICk7CiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoSUQgTmFtZSBDb21tZW50IFZhbGlkSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGF0dGFjaG1lbnQKICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkUGFyYW1PYmplY3QtPkdldFVwbG9hZEFsbCgKICAgICAgICAgICAgUGFyYW0gPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBWYWxpZElEKSkgewogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+U3RkQXR0YWNobWVudFN0YW5kYXJkVGVtcGxhdGVQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgSUQgICAgID0+ICRHZXRQYXJhbXtJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIHRvIGNoYW5nZSB0aGUgYXR0YWNobWVudC4KICAgICAgICAgICAgaWYgKCRQZXJtaXNzaW9uIG5lICdydycpIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7Tm9QZXJtaXNzaW9ufSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAjIGlmIG5vIGVycm9ycyBvY2N1cnJlZAogICAgICAgIGlmICggISVFcnJvcnMgKSB7CgogICAgICAgICAgICAjIHVwZGF0ZSBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICRVcGRhdGUgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudFVwZGF0ZSgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVVcGxvYWRTdHVmZiwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkVXBkYXRlKSB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIGVkaXRpbmcgdGhlIGF0dGFjaG1lbnQsIGp1c3QgcmVkaXJlY3QgdG8gdGhlIGVkaXQgc2NyZWVuCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAgICAgICAgICAgICAmJiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKSBlcSAnMScgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO0lEPSRJRCIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSByZXR1cm4gdG8gb3ZlcnZpZXcKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdDaGFuZ2UnLAogICAgICAgICAgICBFcnJvcnMgPT4gXCVFcnJvcnMsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQXR0YWNobWVudCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZCcgKSB7CiAgICAgICAgbXkgJUdldFBhcmFtOwogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQWRkJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5BdHRhY2htZW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkIGFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZEFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15IEBOZXdJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSURzJyApOwogICAgICAgIG15ICggJUdldFBhcmFtLCAlRXJyb3JzICk7CiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KElEIE5hbWUgQ29tbWVudCBWYWxpZElEKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtZXRlcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhdHRhY2htZW50CiAgICAgICAgbXkgJVVwbG9hZFN0dWZmID0gJFBhcmFtT2JqZWN0LT5HZXRVcGxvYWRBbGwoCiAgICAgICAgICAgIFBhcmFtID0+ICdGaWxlVXBsb2FkJywKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBkYXRhCiAgICAgICAgaWYgKCAhJVVwbG9hZFN0dWZmICkgewogICAgICAgICAgICAkRXJyb3Jze0ZpbGVVcGxvYWRJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQogICAgICAgIGZvciBteSAkTmVlZGVkIChxdyhOYW1lIFZhbGlkSUQpKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnSW52YWxpZCcgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9ycyApIHsKCiAgICAgICAgICAgICMgYWRkIHN0YXRlCiAgICAgICAgICAgIG15ICRTdGRBdHRhY2htZW50SUQgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudEFkZCgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVVcGxvYWRTdHVmZiwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkU3RkQXR0YWNobWVudElEKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnQXR0YWNobWVudCBhZGRlZCEnKSApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIFByaW9yaXR5ID0+ICdFcnJvcicgKTsKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQWRkJywKICAgICAgICAgICAgRXJyb3JzID0+IFwlRXJyb3JzLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkF0dGFjaG1lbnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVsZXRlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJElEICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlUGVybWlzc2lvbigKICAgICAgICAgICAgICAgIElEICAgICA9PiAkSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBObyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSB0aGUgYXR0YWNobWVudC4KICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgIG15ICREZWxldGUgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgSUQgPT4gJElELAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gKCREZWxldGUpID8gJElEIDogMCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRvd25sb2FkIGFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Rvd25sb2FkJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApOwoKICAgICAgICBteSAlRGF0YSA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50R2V0KAogICAgICAgICAgICBJRCA9PiAkSUQsCiAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlUGVybWlzc2lvbigKICAgICAgICAgICAgICAgIElEICAgICAgPT4gJElELAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ID0+ICdybycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIE5vIHBlcm1pc3Npb24gdG8gZG93bmxvYWQgdGhlIGF0dGFjaG1lbnQuCiAgICAgICAgICAgIGlmICggISRQZXJtaXNzaW9uICkgewogICAgICAgICAgICAgICAgJURhdGEgPSAoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgIGlmICggISVEYXRhICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgVHlwZSA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5BdHRhY2htZW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKfQoKc3ViIF9FZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25MaXN0JywKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICApOwoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgJFBhcmFte1ZhbGlkT3B0aW9ufSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSBWYWxpZGF0ZV9SZXF1aXJlZCAnIC4gKCAkUGFyYW17RXJyb3JzfS0+eydWYWxpZElESW52YWxpZCd9IHx8ICcnICksCiAgICApOwoKICAgICMgYWRkIGNsYXNzIGZvciB2YWxpZGF0aW9uCiAgICBpZiAoICRQYXJhbXtBY3Rpb259IGVxICdBZGQnICkgewogICAgICAgICRQYXJhbXtWYWxpZGF0ZUNvbnRlbnR9ID0gIlZhbGlkYXRlX1JlcXVpcmVkIjsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte0Vycm9yc30gfSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9PdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFN0ZEF0dGFjaG1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RkQXR0YWNobWVudCcpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICBteSAkTGlnaHRBZG1pbk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaWdodEFkbWluJyk7CiMgRU8gTGlnaHRBZG1pbgoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uTGlzdCcsCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQWN0aW9uQWRkJywKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdGaWx0ZXInLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwogICAgbXkgJUxpc3QgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICApOwoKICAgICMgaWYgdGhlcmUgYXJlIGFueSByZXN1bHRzLCB0aGV5IGFyZSBzaG93bgogICAgaWYgKCVMaXN0KSB7CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKCBzb3J0IHsgJExpc3R7JGF9IGNtcCAkTGlzdHskYn0gfSBrZXlzICVMaXN0ICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50R2V0KAogICAgICAgICAgICAgICAgSUQgPT4gJElELAogICAgICAgICAgICApOwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24gZm9yIGFsbCBsaW5rZWQgdGVtcGxhdGVzLgogICAgICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICAgICAkRGF0YXtQZXJtaXNzaW9ufSA9ICRMaWdodEFkbWluT2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZVBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgSUQgICAgICA9PiAkSUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJERhdGF7UGVybWlzc2lvbn07CiAgICAgICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZExpc3R7ICREYXRhe1ZhbGlkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBhIG5vIGRhdGEgbWVzc2FnZSBpcyBkaXNwbGF5ZWQKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAxOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Modules/AdminNotificationEvent.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQWRtaW5Ob3RpZmljYXRpb25FdmVudC5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5Ob3RpZmljYXRpb25FdmVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIGlmICggISRQYXJhbXtBY2Nlc3NSd30gJiYgJFBhcmFte0FjY2Vzc1JvfSApIHsKICAgICAgICAkU2VsZi0+e0xpZ2h0QWRtaW59ID0gMTsKICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIG15ICRMaWdodEFkbWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpZ2h0QWRtaW4nKTsKICAgIG15ICRRdWV1ZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKIyBFTyBMaWdodEFkbWluCiAgICBteSAkUmljaFRleHQgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6UmljaFRleHQnKTsKICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgPT4gWydUaWNrZXQnXSwKICAgICk7CgogICAgaWYgKCAkUmljaFRleHQgJiYgISRDb25maWdPYmplY3QtPkdldCgiRnJvbnRlbmQ6OkFkbWluOjokU2VsZi0+e0FjdGlvbn0iKS0+e1JpY2hUZXh0fSApIHsKICAgICAgICAkUmljaFRleHQgPSAwOwogICAgfQoKICAgICMgc2V0IHR5cGUgZm9yIG5vdGlmaWNhdGlvbnMKICAgIG15ICRDb250ZW50VHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgIGlmICgkUmljaFRleHQpIHsKICAgICAgICAkQ29udGVudFR5cGUgPSAndGV4dC9odG1sJzsKICAgIH0KCiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkTm90aWZpY2F0aW9uRXZlbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Tm90aWZpY2F0aW9uRXZlbnQnKTsKICAgIG15ICRCYWNrZW5kT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkTm90aWZpY2F0aW9uICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTm90aWZpY2F0aW9uJyApOwoKICAgICMgZ2V0IHRoZSBzZWFyY2ggYXJ0aWNsZSBmaWVsZHMgdG8gcmV0cmlldmUgdmFsdWVzIGZvcgogICAgbXkgJUFydGljbGVTZWFyY2hhYmxlRmllbGRzICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZVNlYXJjaGFibGVGaWVsZHNMaXN0KCk7CiAgICBteSBAQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHNLZXlzID0gc29ydCBrZXlzICVBcnRpY2xlU2VhcmNoYWJsZUZpZWxkczsKCiAgICAjIGdldCByZWdpc3RlcmVkIHRyYW5zcG9ydCBsYXllcnMKICAgIG15ICVSZWdpc3RlcmVkVHJhbnNwb3J0cyA9ICV7ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnTm90aWZpY2F0aW9uOjpUcmFuc3BvcnQnKSB8fCB7fSB9OwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgIyBHZXQgcGVybWlzc2lvbiBsZXZlbC4KICAgIG15ICRQZXJtaXNzaW9uID0gJFNlbGYtPntMaWdodEFkbWlufSA/ICcnIDogJ3J3JzsKIyBFTyBMaWdodEFkbWluCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2UnICkgewoKICAgICAgICAjIGdldCBub3RpZmljYXRpb24gaWQKICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CgogICAgICAgICMgZ2V0IG5vdGlmaWNhdGlvbiBkYXRhCiAgICAgICAgbXkgJURhdGEgPSAkTm90aWZpY2F0aW9uRXZlbnRPYmplY3QtPk5vdGlmaWNhdGlvbkdldCgKICAgICAgICAgICAgSUQgPT4gJElELAogICAgICAgICk7CgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJExpZ2h0QWRtaW5PYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiAkRGF0YXtEYXRhfXtRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgTm8gcGVybWlzc2lvbiBmb3IgdGhlIG5vdGlmaWNhdGlvbi4KICAgICAgICAgICAgaWYgKCAhJERhdGF7UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICAgICAlRGF0YSA9ICgpOwogICAgICAgICAgICB9IGVsc2lmICggJERhdGF7UGVybWlzc2lvbn0gZXEgJ3JvJyApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdOb3RpY2UnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTm8gcGVybWlzc2lvbiB0byBlZGl0IHRoaXMgdGlja2V0IG5vdGlmaWNhdGlvbi4nICksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIEluZm8gPT4gVHJhbnNsYXRhYmxlKCdOb3RpZmljYXRpb24gdXBkYXRlZCEnKSApCiAgICAgICAgICAgIGlmICggJE5vdGlmaWNhdGlvbiAmJiAkTm90aWZpY2F0aW9uIGVxICdVcGRhdGUnICk7CiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgID0+ICdDaGFuZ2UnLAogICAgICAgICAgICBSaWNoVGV4dCAgICAgICAgICAgPT4gJFJpY2hUZXh0LAogICAgICAgICAgICBEeW5hbWljRmllbGRWYWx1ZXMgPT4gJERhdGF7RGF0YX0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbk5vdGlmaWNhdGlvbkV2ZW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNoYW5nZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIFRPRE86CiAgICAgICAgIyBFdmVudHMsIElzVmlzaWJsZUZvckN1c3RvbWVyLCBBcnRpY2xlU2VuZGVyVHlwZUlELCBBcnRpY2xlSXNWaXNpYmxlRm9yQ3VzdG9tZXIsCiAgICAgICAgIyBBcnRpY2xlQ29tbXVuaWNhdGlvbkNoYW5uZWxJRCwgVHJhbnNwb3J0cyBhcmUgdXNlZCB0d2ljZSEgV2h5PyBTZWUgYmVsb3cuCiAgICAgICAgIyBUaGUgc2FtZSBpcyBkb25lIGluIHRoZSBvdGhlciBzdWJhY3Rpb25zLgogICAgICAgICMgQWxzbyBjaGVjayBlYWNoIHRyYW5zcG9ydCAoRW1haWwsIFNNUywgV2VidmlldykgdGVtcGxhdGUgZmlsZSBmb3IgZHVwbGljYXRlIGlkcyBsaWtlIElzVmlzaWJsZUZvckN1c3RvbWVyIQoKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKAogICAgICAgICAgICBAQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHNLZXlzLAogICAgICAgICAgICBxdyhJRCBOYW1lIENvbW1lbnQgVmFsaWRJRCBFdmVudHMgSXNWaXNpYmxlRm9yQ3VzdG9tZXIKICAgICAgICAgICAgQXJ0aWNsZVNlbmRlclR5cGVJRCBBcnRpY2xlSXNWaXNpYmxlRm9yQ3VzdG9tZXIgQXJ0aWNsZUNvbW11bmljYXRpb25DaGFubmVsSUQKICAgICAgICAgICAgVHJhbnNwb3J0cykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KICAgICAgICBQQVJBTUVURVI6CiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKAogICAgICAgICAgICBAQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHNLZXlzLAogICAgICAgICAgICBxdyhSZWNpcGllbnRzIFJlY2lwaWVudEFnZW50cyBSZWNpcGllbnRHcm91cHMgUmVjaXBpZW50Um9sZXMKICAgICAgICAgICAgRXZlbnRzIFN0YXRlSUQgUXVldWVJRCBQcmlvcml0eUlEIExvY2tJRCBUeXBlSUQgU2VydmljZUlEIFNMQUlECiAgICAgICAgICAgIEN1c3RvbWVySUQgQ3VzdG9tZXJVc2VySUQgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgQXJ0aWNsZUF0dGFjaG1lbnRJbmNsdWRlCiAgICAgICAgICAgIEFydGljbGVTZW5kZXJUeXBlSUQgQXJ0aWNsZUlzVmlzaWJsZUZvckN1c3RvbWVyIEFydGljbGVDb21tdW5pY2F0aW9uQ2hhbm5lbElECiAgICAgICAgICAgIFRyYW5zcG9ydHMgT25jZVBlckRheSBTZW5kT25PdXRPZk9mZmljZSBWaXNpYmxlRm9yQWdlbnQgVmlzaWJsZUZvckFnZW50VG9vbHRpcAogICAgICAgICAgICBMYW5ndWFnZUlEIEFnZW50RW5hYmxlZEJ5RGVmYXVsdCkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgQERhdGEgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1ldGVyICk7CiAgICAgICAgICAgIG5leHQgUEFSQU1FVEVSIGlmICFARGF0YTsKICAgICAgICAgICAgJEdldFBhcmFte0RhdGF9LT57JFBhcmFtZXRlcn0gPSBcQERhdGE7CiAgICAgICAgfQoKICAgICAgICBteSAkRXJyb3I7CgogICAgICAgICMgZ2V0IHRoZSBzdWJqZWN0IGFuZCBib2R5IGZvciBhbGwgbGFuZ3VhZ2VzCiAgICAgICAgZm9yIG15ICRMYW5ndWFnZUlEICggQHsgJEdldFBhcmFte0RhdGF9LT57TGFuZ3VhZ2VJRH0gfSApIHsKCiAgICAgICAgICAgIG15ICRTdWJqZWN0ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJExhbmd1YWdlSUQgLiAnX1N1YmplY3QnICkgfHwgJyc7CiAgICAgICAgICAgIG15ICRCb2R5ICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJExhbmd1YWdlSUQgLiAnX0JvZHknICkgICAgfHwgJyc7CgogICAgICAgICAgICAkR2V0UGFyYW17TWVzc2FnZX0tPnskTGFuZ3VhZ2VJRH0gPSB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAkU3ViamVjdCwKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgID0+ICRCb2R5LAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJENvbnRlbnRUeXBlLAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgbXkgJENoZWNrID0gJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0LT5Ob3RpZmljYXRpb25Cb2R5Q2hlY2soCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRCb2R5LAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCBzZXJ2ZXIgZXJyb3IgZmxhZyBpZiBmaWVsZCBpcyBlbXB0eQogICAgICAgICAgICBpZiAoICEkU3ViamVjdCApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJExhbmd1YWdlSUQgLiAnX1N1YmplY3RTZXJ2ZXJFcnJvcicgfSA9ICJTZXJ2ZXJFcnJvciI7CiAgICAgICAgICAgICAgICAkRXJyb3IgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggISRCb2R5IHx8ICEkQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRMYW5ndWFnZUlEIC4gJ19Cb2R5U2VydmVyRXJyb3InIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgJEVycm9yID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiAkR2V0UGFyYW17RGF0YX0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgUXVldWUgaXMgbWFuZGF0b3J5IGFuZCBjYW4gb25seSBjb250YWluIHF1ZXVlcyB3aXRoICdydycgcGVybWlzc2lvbi4KICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte0RhdGF9LT57UXVldWVJRH0gfHwgJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEU2VydmVyRXJyb3J9ID0gIlNlcnZlckVycm9yIjsKICAgICAgICAgICAgICAgICRFcnJvciA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAjIHRvIHN0b3JlIGR5bmFtaWMgZmllbGRzIHByb2ZpbGUgZGF0YQogICAgICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXM7CgogICAgICAgICMgZ2V0IER5bmFtaWMgZmllbGRzIGZvciBzZWFyY2ggZnJvbSB3ZWIgcmVxdWVzdAogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHdlYiByZXF1ZXN0CiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICBSZXR1cm5Qcm9maWxlU3RydWN0dXJlID0+IDEsCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCB0aGUgY29tcGxldGUgdmFsdWUgc3RydWN0dXJlIGluIEdldFBhcmFtIHRvIHN0b3JlIGl0IGxhdGVyIGluIHRoZSBOb3RpZmljYXRpb24gSXRlbQogICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRWYWx1ZSkgKSB7CgogICAgICAgICAgICAgICAgIyBzZXQgc2VhcmNoIHN0cnVjdHVyZSBmb3IgZGlzcGxheQogICAgICAgICAgICAgICAgJUR5bmFtaWNGaWVsZFZhbHVlcyA9ICggJUR5bmFtaWNGaWVsZFZhbHVlcywgJXskRHluYW1pY0ZpZWxkVmFsdWV9ICk7CgogICAgICAgICAgICAgICAgI21ha2UgYWxsIHZhbHVlcyBhcnJheSByZWZzCiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkTmFtZSAoIHNvcnQga2V5cyAleyREeW5hbWljRmllbGRWYWx1ZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCByZWYgJER5bmFtaWNGaWVsZFZhbHVlLT57JEZpZWxkTmFtZX0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlLT57JEZpZWxkTmFtZX0gPSBbICREeW5hbWljRmllbGRWYWx1ZS0+eyRGaWVsZE5hbWV9IF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc3RvcmUgc3BlY2lhbCBzdHJ1Y3R1cmUgZm9yIG1hdGNoCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17RGF0YX0gPSB7ICV7ICRHZXRQYXJhbXtEYXRhfSB9LCAleyREeW5hbWljRmllbGRWYWx1ZX0gfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdHJhbnNwb3J0IHNldHRpbmdzIHZhbHVlcwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoIFwlUmVnaXN0ZXJlZFRyYW5zcG9ydHMgKSApIHsKCiAgICAgICAgICAgIFRSQU5TUE9SVDoKICAgICAgICAgICAgZm9yIG15ICRUcmFuc3BvcnQgKCBzb3J0IGtleXMgJVJlZ2lzdGVyZWRUcmFuc3BvcnRzICkgewoKICAgICAgICAgICAgICAgIG5leHQgVFJBTlNQT1JUIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggJFJlZ2lzdGVyZWRUcmFuc3BvcnRzeyRUcmFuc3BvcnR9ICk7CiAgICAgICAgICAgICAgICBuZXh0IFRSQU5TUE9SVCBpZiAhJFJlZ2lzdGVyZWRUcmFuc3BvcnRzeyRUcmFuc3BvcnR9LT57TW9kdWxlfTsKCiAgICAgICAgICAgICAgICBpZiAoICEkTWFpbk9iamVjdC0+UmVxdWlyZSggJFJlZ2lzdGVyZWRUcmFuc3BvcnRzeyRUcmFuc3BvcnR9LT57TW9kdWxlfSwgU2lsZW50ID0+IDEgKSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IFRSQU5TUE9SVDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCB0cmFuc3BvcnQgc2V0dGluZ3Mgc3RyaW5nIGZyb20gdHJhbnNwb3J0IG9iamVjdAogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCggJFJlZ2lzdGVyZWRUcmFuc3BvcnRzeyRUcmFuc3BvcnR9LT57TW9kdWxlfSApLT5UcmFuc3BvcnRQYXJhbVNldHRpbmdzR2V0KAogICAgICAgICAgICAgICAgICAgIEdldFBhcmFtID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGZvciAnQWRkaXRpb25hbCByZWNpcGllbnQnIGZpZWxkIHZhbHVlIGxlbmd0aC4KICAgICAgICBpZiAoICRHZXRQYXJhbXtEYXRhfS0+e1JlY2lwaWVudEVtYWlsfSAmJiBsZW5ndGggJEdldFBhcmFte0RhdGF9LT57UmVjaXBpZW50RW1haWx9ID4gMjAwICkgewogICAgICAgICAgICAkR2V0UGFyYW17UmVjaXBpZW50RW1haWxTZXJ2ZXJFcnJvcn0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAkRXJyb3IgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUKICAgICAgICBteSAkT2s7CiAgICAgICAgbXkgJEFydGljbGVGaWx0ZXJNaXNzaW5nOwoKICAgICAgICAjIGNoZWNraW5nIGlmIGFydGljbGUgZmlsdGVyIGV4aXN0IGlmIG5lY2Vzc2FyeQogICAgICAgIGlmICgKICAgICAgICAgICAgZ3JlcCB7ICRfIGVxICdBcnRpY2xlQ3JlYXRlJyB8fCAkXyBlcSAnQXJ0aWNsZVNlbmQnIH0KICAgICAgICAgICAgQHsgJEdldFBhcmFte0RhdGF9LT57RXZlbnRzfSB8fCBbXSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRBcnRpY2xlRmlsdGVyVmFsdWVTZXQgPSAwOwogICAgICAgICAgICBmb3IgbXkgJEFydGljbGVGaWx0ZXIgKHF3KEFydGljbGVTZW5kZXJUeXBlSUQgQXJ0aWNsZUlzVmlzaWJsZUZvckN1c3RvbWVyIEFydGljbGVDb21tdW5pY2F0aW9uQ2hhbm5lbElEKSkgewogICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17JEFydGljbGVGaWx0ZXJ9ICkgewogICAgICAgICAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyVmFsdWVTZXQgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBBUlRJQ0xFRklFTERLRVk6CiAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZUZpZWxkS2V5IChAQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHNLZXlzKSB7CgogICAgICAgICAgICAgICAgbGFzdCBBUlRJQ0xFRklFTERLRVkgaWYgJEFydGljbGVGaWx0ZXJWYWx1ZVNldDsKICAgICAgICAgICAgICAgIG5leHQgQVJUSUNMRUZJRUxES0VZIGlmICEkR2V0UGFyYW17JEFydGljbGVGaWVsZEtleX07CgogICAgICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJWYWx1ZVNldCA9IDE7CgogICAgICAgICAgICAgICAgbGFzdCBBUlRJQ0xFRklFTERLRVk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyTWlzc2luZyA9IDEgaWYgISRBcnRpY2xlRmlsdGVyVmFsdWVTZXQ7CiAgICAgICAgfQoKICAgICAgICAjIHJlcXVpcmVkIEFydGljbGUgZmlsdGVyIG9ubHkgb24gQXJ0aWNsZUNyZWF0ZSBhbmQgQXJ0aWNsZVNlbmQgZXZlbnQKICAgICAgICAjIGlmIGlzbid0IHNlbGVjdGVkIGF0IGxlYXN0IG9uZSBvZiB0aGUgYXJ0aWNsZSBmaWx0ZXIgZmllbGRzLCBub3RpZmljYXRpb24gaXNuJ3QgdXBkYXRlZAogICAgICAgIGlmICggISRBcnRpY2xlRmlsdGVyTWlzc2luZyAmJiAhJEVycm9yICkgewoKICAgICAgICAgICAgJE9rID0gJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0LT5Ob3RpZmljYXRpb25VcGRhdGUoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRPaykgewoKICAgICAgICAgICAgIyBpZiB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIGVkaXRpbmcgdGhlIG5vdGlmaWNhdGlvbiBldmVudCwganVzdCByZWRpcmVjdCB0byB0aGUgZWRpdCBzY3JlZW4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO0lEPSRJRDtOb3RpZmljYXRpb249VXBkYXRlIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0dXJuIHRvIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O05vdGlmaWNhdGlvbj1VcGRhdGUiICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciBteSAkTmVlZGVkIChxdyhOYW1lIEV2ZW50cyBUcmFuc3BvcnRzKSkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkTmVlZGVkIC4gIlNlcnZlckVycm9yIiB9ID0gIiI7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskTmVlZGVkfSBlcSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICROZWVkZWQgLiAiU2VydmVyRXJyb3IiIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGRlZmluZSBTZXJ2ZXJFcnJvciBDbGFzcyBhdHRyaWJ1dGUgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICRHZXRQYXJhbXtBcnRpY2xlU2VuZGVyVHlwZUlEU2VydmVyRXJyb3J9ID0gIiI7CgogICAgICAgICAgICBpZiAoJEFydGljbGVGaWx0ZXJNaXNzaW5nKSB7CgogICAgICAgICAgICAgICAgJEdldFBhcmFte0FydGljbGVTZW5kZXJUeXBlSURTZXJ2ZXJFcnJvcn0gPSAiU2VydmVyRXJyb3IiOwoKICAgICAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZUZpZWxkIChAQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHNLZXlzKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkQXJ0aWNsZUZpZWxkIC4gJ1NlcnZlckVycm9yJyB9ID0gIlNlcnZlckVycm9yIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIFByaW9yaXR5ID0+ICdFcnJvcicgKTsKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgID0+ICdDaGFuZ2UnLAogICAgICAgICAgICAgICAgUmljaFRleHQgICAgICAgICAgID0+ICRSaWNoVGV4dCwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZFZhbHVlcyA9PiBcJUR5bmFtaWNGaWVsZFZhbHVlcywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluTm90aWZpY2F0aW9uRXZlbnQnLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGQnICkgewoKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gICA9PiAnQWRkJywKICAgICAgICAgICAgUmljaFRleHQgPT4gJFJpY2hUZXh0LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5Ob3RpZmljYXRpb25FdmVudCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJUdldFBhcmFtOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyICgKICAgICAgICAgICAgQEFydGljbGVTZWFyY2hhYmxlRmllbGRzS2V5cywKICAgICAgICAgICAgcXcoTmFtZSBDb21tZW50IFZhbGlkSUQgRXZlbnRzIElzVmlzaWJsZUZvckN1c3RvbWVyCiAgICAgICAgICAgIEFydGljbGVTZW5kZXJUeXBlSUQgQXJ0aWNsZUlzVmlzaWJsZUZvckN1c3RvbWVyIEFydGljbGVDb21tdW5pY2F0aW9uQ2hhbm5lbElECiAgICAgICAgICAgIFRyYW5zcG9ydHMpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CiAgICAgICAgUEFSQU1FVEVSOgogICAgICAgIGZvciBteSAkUGFyYW1ldGVyICgKICAgICAgICAgICAgQEFydGljbGVTZWFyY2hhYmxlRmllbGRzS2V5cywKICAgICAgICAgICAgcXcoUmVjaXBpZW50cyBSZWNpcGllbnRBZ2VudHMgUmVjaXBpZW50Um9sZXMgUmVjaXBpZW50R3JvdXBzIEV2ZW50cyBTdGF0ZUlEIFF1ZXVlSUQKICAgICAgICAgICAgUHJpb3JpdHlJRCBMb2NrSUQgVHlwZUlEIFNlcnZpY2VJRCBTTEFJRCBDdXN0b21lcklEIEN1c3RvbWVyVXNlcklECiAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyIEFydGljbGVBdHRhY2htZW50SW5jbHVkZQogICAgICAgICAgICBBcnRpY2xlU2VuZGVyVHlwZUlEIEFydGljbGVJc1Zpc2libGVGb3JDdXN0b21lciBBcnRpY2xlQ29tbXVuaWNhdGlvbkNoYW5uZWxJRAogICAgICAgICAgICBUcmFuc3BvcnRzIE9uY2VQZXJEYXkgU2VuZE9uT3V0T2ZPZmZpY2UgVmlzaWJsZUZvckFnZW50IFZpc2libGVGb3JBZ2VudFRvb2x0aXAKICAgICAgICAgICAgTGFuZ3VhZ2VJRCBBZ2VudEVuYWJsZWRCeURlZmF1bHQpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBEYXRhID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgICAgICBuZXh0IFBBUkFNRVRFUiBpZiAhQERhdGE7CiAgICAgICAgICAgICRHZXRQYXJhbXtEYXRhfS0+eyRQYXJhbWV0ZXJ9ID0gXEBEYXRhOwogICAgICAgIH0KCiAgICAgICAgbXkgJEVycm9yOwoKICAgICAgICAjIGdldCB0aGUgc3ViamVjdCBhbmQgYm9keSBmb3IgYWxsIGxhbmd1YWdlcwogICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIEB7ICRHZXRQYXJhbXtEYXRhfS0+e0xhbmd1YWdlSUR9IH0gKSB7CgogICAgICAgICAgICBteSAkU3ViamVjdCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRMYW5ndWFnZUlEIC4gJ19TdWJqZWN0JyApIHx8ICcnOwogICAgICAgICAgICBteSAkQm9keSAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRMYW5ndWFnZUlEIC4gJ19Cb2R5JyApICAgIHx8ICcnOwoKICAgICAgICAgICAgJEdldFBhcmFte01lc3NhZ2V9LT57JExhbmd1YWdlSUR9ID0gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgPT4gJFN1YmplY3QsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICA9PiAkQm9keSwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICRDb250ZW50VHlwZSwKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIG15ICRDaGVjayA9ICROb3RpZmljYXRpb25FdmVudE9iamVjdC0+Tm90aWZpY2F0aW9uQm9keUNoZWNrKAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkQm9keSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgc2VydmVyIGVycm9yIGZsYWcgaWYgZmllbGQgaXMgZW1wdHkKICAgICAgICAgICAgaWYgKCAhJFN1YmplY3QgKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRMYW5ndWFnZUlEIC4gJ19TdWJqZWN0U2VydmVyRXJyb3InIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgJEVycm9yID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkQm9keSB8fCAhJENoZWNrICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkTGFuZ3VhZ2VJRCAuICdfQm9keVNlcnZlckVycm9yJyB9ID0gIlNlcnZlckVycm9yIjsKICAgICAgICAgICAgICAgICRFcnJvciA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICAkUGVybWlzc2lvbiA9ICRMaWdodEFkbWluT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gJEdldFBhcmFte0RhdGF9LT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFF1ZXVlIGlzIG1hbmRhdG9yeSBhbmQgY2FuIG9ubHkgY29udGFpbiBxdWV1ZXMgd2l0aCAncncnIHBlcm1pc3Npb24uCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtEYXRhfS0+e1F1ZXVlSUR9IHx8ICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRFNlcnZlckVycm9yfSA9ICJTZXJ2ZXJFcnJvciI7CiAgICAgICAgICAgICAgICAkRXJyb3IgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICAgICAgIyB0byBzdG9yZSBkeW5hbWljIGZpZWxkcyBwcm9maWxlIGRhdGEKICAgICAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzOwoKICAgICAgICAjIGdldCBEeW5hbWljIGZpZWxkcyBmb3Igc2VhcmNoIGZyb20gd2ViIHJlcXVlc3QKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdAogICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgUmV0dXJuUHJvZmlsZVN0cnVjdHVyZSA9PiAxLAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgdGhlIGNvbXBsZXRlIHZhbHVlIHN0cnVjdHVyZSBpbiBHZXRQYXJhbSB0byBzdG9yZSBpdCBsYXRlciBpbiB0aGUgR2VuZXJpYyBBZ2VudCBKb2IKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkVmFsdWUpICkgewoKICAgICAgICAgICAgICAgICMgc2V0IHNlYXJjaCBzdHJ1Y3R1cmUgZm9yIGRpc3BsYXkKICAgICAgICAgICAgICAgICVEeW5hbWljRmllbGRWYWx1ZXMgPSAoICVEeW5hbWljRmllbGRWYWx1ZXMsICV7JER5bmFtaWNGaWVsZFZhbHVlfSApOwoKICAgICAgICAgICAgICAgICNtYWtlIGFsbCB2YWx1ZXMgYXJyYXkgcmVmcwogICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZE5hbWUgKCBzb3J0IGtleXMgJXskRHluYW1pY0ZpZWxkVmFsdWV9ICkgewogICAgICAgICAgICAgICAgICAgIGlmICggcmVmICREeW5hbWljRmllbGRWYWx1ZS0+eyRGaWVsZE5hbWV9IG5lICdBUlJBWScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRWYWx1ZS0+eyRGaWVsZE5hbWV9ID0gWyAkRHluYW1pY0ZpZWxkVmFsdWUtPnskRmllbGROYW1lfSBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHN0b3JlIHNwZWNpYWwgc3RydWN0dXJlIGZvciBtYXRjaAogICAgICAgICAgICAgICAgJEdldFBhcmFte0RhdGF9ID0geyAleyAkR2V0UGFyYW17RGF0YX0gfSwgJXskRHluYW1pY0ZpZWxkVmFsdWV9IH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IHRyYW5zcG9ydCBzZXR0aW5ncyB2YWx1ZXMKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCBcJVJlZ2lzdGVyZWRUcmFuc3BvcnRzICkgKSB7CgogICAgICAgICAgICBUUkFOU1BPUlQ6CiAgICAgICAgICAgIGZvciBteSAkVHJhbnNwb3J0ICggc29ydCBrZXlzICVSZWdpc3RlcmVkVHJhbnNwb3J0cyApIHsKCiAgICAgICAgICAgICAgICBuZXh0IFRSQU5TUE9SVCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fSApOwogICAgICAgICAgICAgICAgbmV4dCBUUkFOU1BPUlQgaWYgISRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fS0+e01vZHVsZX07CgogICAgICAgICAgICAgICAgaWYgKCAhJE1haW5PYmplY3QtPlJlcXVpcmUoICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fS0+e01vZHVsZX0sIFNpbGVudCA9PiAxICkgKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBUUkFOU1BPUlQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBnZXQgdHJhbnNwb3J0IHNldHRpbmdzIHN0cmluZyBmcm9tIHRyYW5zcG9ydCBvYmplY3QKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fS0+e01vZHVsZX0gKS0+VHJhbnNwb3J0UGFyYW1TZXR0aW5nc0dldCgKICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBmb3IgJ0FkZGl0aW9uYWwgcmVjaXBpZW50JyBmaWVsZCB2YWx1ZSBsZW5ndGguCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RGF0YX0tPntSZWNpcGllbnRFbWFpbH0gJiYgbGVuZ3RoICRHZXRQYXJhbXtEYXRhfS0+e1JlY2lwaWVudEVtYWlsfSA+IDIwMCApIHsKICAgICAgICAgICAgJEdldFBhcmFte1JlY2lwaWVudEVtYWlsU2VydmVyRXJyb3J9ID0gIlNlcnZlckVycm9yIjsKICAgICAgICAgICAgJEVycm9yID0gMTsKICAgICAgICB9CgogICAgICAgICMgYWRkCiAgICAgICAgbXkgJElEOwogICAgICAgIG15ICRBcnRpY2xlRmlsdGVyTWlzc2luZzsKCiAgICAgICAgIyBkZWZpbmUgU2VydmVyRXJyb3IgTWVzc2FnZSBpZiBuZWNlc3NhcnkKICAgICAgICBpZiAoCiAgICAgICAgICAgIGdyZXAgeyAkXyBlcSAnQXJ0aWNsZUNyZWF0ZScgfHwgJF8gZXEgJ0FydGljbGVTZW5kJyB9CiAgICAgICAgICAgIEB7ICRHZXRQYXJhbXtEYXRhfS0+e0V2ZW50c30gfHwgW10gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkQXJ0aWNsZUZpbHRlclZhbHVlU2V0ID0gMDsKICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlRmlsdGVyIChxdyhBcnRpY2xlU2VuZGVyVHlwZUlEIEFydGljbGVJc1Zpc2libGVGb3JDdXN0b21lciBBcnRpY2xlQ29tbXVuaWNhdGlvbkNoYW5uZWxJRCkpIHsKICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyRBcnRpY2xlRmlsdGVyfSApIHsKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZUZpbHRlclZhbHVlU2V0ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQVJUSUNMRUZJRUxES0VZOgogICAgICAgICAgICBmb3IgbXkgJEFydGljbGVGaWVsZEtleSAoQEFydGljbGVTZWFyY2hhYmxlRmllbGRzS2V5cykgewoKICAgICAgICAgICAgICAgIGxhc3QgQVJUSUNMRUZJRUxES0VZIGlmICRBcnRpY2xlRmlsdGVyVmFsdWVTZXQ7CiAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEVGSUVMREtFWSBpZiAhJEdldFBhcmFteyRBcnRpY2xlRmllbGRLZXl9OwoKICAgICAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyVmFsdWVTZXQgPSAxOwoKICAgICAgICAgICAgICAgIGxhc3QgQVJUSUNMRUZJRUxES0VZOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkQXJ0aWNsZUZpbHRlck1pc3NpbmcgPSAxIGlmICEkQXJ0aWNsZUZpbHRlclZhbHVlU2V0OwogICAgICAgIH0KCiAgICAgICAgIyByZXF1aXJlZCBBcnRpY2xlIGZpbHRlciBvbmx5IG9uIEFydGljbGVDcmVhdGUgYW5kIEFydGljbGUgU2VuZCBldmVudAogICAgICAgICMgaWYgaXNuJ3Qgc2VsZWN0ZWQgYXQgbGVhc3Qgb25lIG9mIHRoZSBhcnRpY2xlIGZpbHRlciBmaWVsZHMsIG5vdGlmaWNhdGlvbiBpc24ndCBhZGRlZAogICAgICAgIGlmICggISRBcnRpY2xlRmlsdGVyTWlzc2luZyAmJiAhJEVycm9yICkgewogICAgICAgICAgICAkSUQgPSAkTm90aWZpY2F0aW9uRXZlbnRPYmplY3QtPk5vdGlmaWNhdGlvbkFkZCgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkR2V0UGFyYW17RGF0YX0tPntUcmFuc3BvcnRzfSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1RyYW5zcG9ydFNlcnZlckVycm9yfSA9ICJTZXJ2ZXJFcnJvciI7CiAgICAgICAgfQoKICAgICAgICBpZiAoJElEKSB7CiAgICAgICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIEluZm8gPT4gVHJhbnNsYXRhYmxlKCdOb3RpZmljYXRpb24gYWRkZWQhJykgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluTm90aWZpY2F0aW9uRXZlbnQnLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciBteSAkTmVlZGVkIChxdyhOYW1lIEV2ZW50cyBUcmFuc3BvcnRzKSkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkTmVlZGVkIC4gIlNlcnZlckVycm9yIiB9ID0gIiI7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskTmVlZGVkfSBlcSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICROZWVkZWQgLiAiU2VydmVyRXJyb3IiIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNraW5nIGlmIGFydGljbGUgZmlsdGVyIGV4aXN0IGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAkR2V0UGFyYW17QXJ0aWNsZVNlbmRlclR5cGVJRFNlcnZlckVycm9yfSA9ICIiOwoKICAgICAgICAgICAgaWYgKCRBcnRpY2xlRmlsdGVyTWlzc2luZykgewoKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtBcnRpY2xlU2VuZGVyVHlwZUlEU2VydmVyRXJyb3J9ID0gIlNlcnZlckVycm9yIjsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJEFydGljbGVGaWVsZCAoQEFydGljbGVTZWFyY2hhYmxlRmllbGRzS2V5cykgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJEFydGljbGVGaWVsZCAuICdTZXJ2ZXJFcnJvcicgfSA9ICJTZXJ2ZXJFcnJvciI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBQcmlvcml0eSA9PiAnRXJyb3InICk7CiAgICAgICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICA9PiAnQWRkJywKICAgICAgICAgICAgICAgIFJpY2hUZXh0ICAgICAgICAgICA9PiAkUmljaFRleHQsCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRWYWx1ZXMgPT4gXCVEeW5hbWljRmllbGRWYWx1ZXMsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbk5vdGlmaWNhdGlvbkV2ZW50JywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZGVsZXRlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVsZXRlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJUdldFBhcmFtOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhJRCkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVOb3RpZmljYXRpb24gPSAkTm90aWZpY2F0aW9uRXZlbnRPYmplY3QtPk5vdGlmaWNhdGlvbkdldCgKICAgICAgICAgICAgICAgIElEICAgICA9PiAkR2V0UGFyYW17SUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiAkTm90aWZpY2F0aW9ue0RhdGF9e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAjIE5vIHBlcm1pc3Npb24gdG8gZGVsZXRlIHRoZSBub3RpZmljYXRpb24uCiAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICBteSAkRGVsZXRlID0gJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0LT5Ob3RpZmljYXRpb25EZWxldGUoCiAgICAgICAgICAgIElEICAgICA9PiAkR2V0UGFyYW17SUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJERlbGV0ZSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgTm90aWZpY2F0aW9uRXhwb3J0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTm90aWZpY2F0aW9uRXhwb3J0JyApIHsKCiAgICAgICAgbXkgJE5vdGlmaWNhdGlvbklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApIHx8ICcnOwogICAgICAgIG15ICROb3RpZmljYXRpb25EYXRhOwogICAgICAgIG15ICVOb3RpZmljYXRpb25TaW5nbGVEYXRhOwogICAgICAgIG15ICRGaWxlbmFtZSA9ICdFeHBvcnRfTm90aWZpY2F0aW9uLnltbCc7CgogICAgICAgIGlmICgkTm90aWZpY2F0aW9uSUQpIHsKCiAgICAgICAgICAgICVOb3RpZmljYXRpb25TaW5nbGVEYXRhID0gJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0LT5Ob3RpZmljYXRpb25HZXQoCiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJE5vdGlmaWNhdGlvbklELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiAkTm90aWZpY2F0aW9uU2luZ2xlRGF0YXtEYXRhfXtRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVOb3RpZmljYXRpb25TaW5nbGVEYXRhICkgfHwgJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKIyBFTyBMaWdodEFkbWluCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdUaGVyZSB3YXMgYW4gZXJyb3IgZ2V0dGluZyBkYXRhIGZvciBOb3RpZmljYXRpb24gd2l0aCBJRDolcyEnLCAkTm90aWZpY2F0aW9uSUQgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICROb3RpZmljYXRpb25OYW1lID0gJE5vdGlmaWNhdGlvblNpbmdsZURhdGF7TmFtZX07CiAgICAgICAgICAgICROb3RpZmljYXRpb25OYW1lID1+IHN7W15hLXpBLVowLTktX119e199eG1zZzsgICAgIyBjbGVhbnVwIG5hbWUgZm9yIHNhdmluZwoKICAgICAgICAgICAgJEZpbGVuYW1lICAgICAgICAgPSAnRXhwb3J0X05vdGlmaWNhdGlvbl8nIC4gJE5vdGlmaWNhdGlvbk5hbWUgLiAnLnltbCc7CiAgICAgICAgICAgICROb3RpZmljYXRpb25EYXRhID0gWyBcJU5vdGlmaWNhdGlvblNpbmdsZURhdGEgXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBteSAlTm90aWZpY2F0aW9uZGV0YWlscyA9ICROb3RpZmljYXRpb25FdmVudE9iamVjdC0+Tm90aWZpY2F0aW9uTGlzdCgKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgRGV0YWlscyA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgQERhdGE7CiAgICAgICAgICAgIGZvciBteSAkSXRlbUlEICggc29ydCBrZXlzICVOb3RpZmljYXRpb25kZXRhaWxzICkgewojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgICAgICAgICAjIGZpbHRlciBvdXQgbm90aWZpY2F0aW9ucyB3aXRob3V0IHJ3IHBlcm1pc3Npb24gb24gYWxsIHF1ZXVlcy4KICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uID0gJFNlbGYtPntMaWdodEFkbWlufSA/ICcnIDogJ3J3JzsKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgICAgICAgICAkUGVybWlzc2lvbiA9ICRMaWdodEFkbWluT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiAkTm90aWZpY2F0aW9uZGV0YWlsc3skSXRlbUlEfXtEYXRhfXtRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIGVxICdydycgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJE5vdGlmaWNhdGlvbmRldGFpbHN7JEl0ZW1JRH07CiAgICAgICAgICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgogICAgICAgICAgICB9CiAgICAgICAgICAgICROb3RpZmljYXRpb25EYXRhID0gXEBEYXRhOwogICAgICAgIH0KCiAgICAgICAgIyBjb252ZXJ0IHRoZSBOb3RpZmljYXRpb24gZGF0YSBoYXNoIHRvIHN0cmluZwogICAgICAgIG15ICROb3RpZmljYXRpb25EYXRhWUFNTCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpZQU1MJyktPkR1bXAoIERhdGEgPT4gJE5vdGlmaWNhdGlvbkRhdGEgKTsKCiAgICAgICAgIyBzZW5kIHRoZSByZXN1bHQgdG8gdGhlIGJyb3dzZXIKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbDsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkTm90aWZpY2F0aW9uRGF0YVlBTUwsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBOb3RpZmljYXRpb25Db3B5CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTm90aWZpY2F0aW9uQ29weScgKSB7CgogICAgICAgIG15ICROb3RpZmljYXRpb25JRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBnZXQgTm90aWZpY2F0aW9uIGRhdGEKICAgICAgICBteSAlTm90aWZpY2F0aW9uRGF0YSA9ICROb3RpZmljYXRpb25FdmVudE9iamVjdC0+Tm90aWZpY2F0aW9uR2V0KAogICAgICAgICAgICBJRCAgICAgPT4gJE5vdGlmaWNhdGlvbklELAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICAkUGVybWlzc2lvbiA9ICRMaWdodEFkbWluT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gJE5vdGlmaWNhdGlvbkRhdGF7RGF0YX17UXVldWVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJU5vdGlmaWNhdGlvbkRhdGEgKSB8fCAkUGVybWlzc2lvbiBuZSAncncnICkgewojIEVPIExpZ2h0QWRtaW4KICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdVbmtub3duIE5vdGlmaWNhdGlvbiAlcyEnLCAkTm90aWZpY2F0aW9uSUQgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIG5ldyBOb3RpZmljYXRpb24gbmFtZQogICAgICAgIG15ICROb3RpZmljYXRpb25OYW1lID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnJXMgKGNvcHkpJywgJE5vdGlmaWNhdGlvbkRhdGF7TmFtZX0gKTsKCiAgICAgICAgIyBvdGhlcndpc2Ugc2F2ZSBjb25maWd1cmF0aW9uIGFuZCByZXR1cm4gdG8gb3ZlcnZpZXcgc2NyZWVuCiAgICAgICAgbXkgJE5ld05vdGlmaWNhdGlvbklEID0gJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0LT5Ob3RpZmljYXRpb25BZGQoCiAgICAgICAgICAgICVOb3RpZmljYXRpb25EYXRhLAogICAgICAgICAgICBOYW1lICAgPT4gJE5vdGlmaWNhdGlvbk5hbWUsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGVycm9yIGlmIGNhbid0IGNyZWF0ZQogICAgICAgIGlmICggISROZXdOb3RpZmljYXRpb25JRCApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoIlRoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgTm90aWZpY2F0aW9uIiksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJldHVybiB0byBvdmVydmlldwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBOb3RpZmljYXRpb25JbXBvcnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdOb3RpZmljYXRpb25JbXBvcnQnICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAkRm9ybUlEICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybUlEJyApIHx8ICcnOwogICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICBQYXJhbSAgPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICAgICBTb3VyY2UgPT4gJ3N0cmluZycsCiAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICAjIGltcG9ydCBvbmx5IHdvcmtzIGlmIHVzZXIgaGFzICdydycgcGVybWlzc2lvbiBvbiBhbGwgcXVldWVzLgogICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgbXkgJE5vdGlmaWNhdGlvbnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WUFNTCcpLT5Mb2FkKCBEYXRhID0+ICRVcGxvYWRTdHVmZntDb250ZW50fSApOwoKICAgICAgICAgICAgbXkgJE5vUGVybWlzc2lvbjsKICAgICAgICAgICAgTk9USUZJQ0FUSU9OOgogICAgICAgICAgICBmb3IgbXkgJE5vdGlmaWNhdGlvbiAoIEB7JE5vdGlmaWNhdGlvbnN9ICkgewogICAgICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiAkTm90aWZpY2F0aW9uLT57RGF0YX0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgICAgICROb1Blcm1pc3Npb24gPSAxOwogICAgICAgICAgICAgICAgICAgIGxhc3QgTk9USUZJQ0FUSU9OOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkTm9QZXJtaXNzaW9uKSB7CiAgICAgICAgICAgICAgICBteSAkTWVzc2FnZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICdydycgKTsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRNZXNzYWdlLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgIG15ICRPdmVyd3JpdGVFeGlzdGluZ05vdGlmaWNhdGlvbnMgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3ZlcndyaXRlRXhpc3RpbmdOb3RpZmljYXRpb25zJyApIHx8ICcnOwoKICAgICAgICBteSAkTm90aWZpY2F0aW9uSW1wb3J0ID0gJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0LT5Ob3RpZmljYXRpb25JbXBvcnQoCiAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICA9PiAkVXBsb2FkU3R1ZmZ7Q29udGVudH0sCiAgICAgICAgICAgIE92ZXJ3cml0ZUV4aXN0aW5nTm90aWZpY2F0aW9ucyA9PiAkT3ZlcndyaXRlRXhpc3RpbmdOb3RpZmljYXRpb25zLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISROb3RpZmljYXRpb25JbXBvcnQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAkTm90aWZpY2F0aW9uSW1wb3J0LT57TWVzc2FnZX0KICAgICAgICAgICAgICAgIHx8IFRyYW5zbGF0YWJsZSgKICAgICAgICAgICAgICAgICAgICAnTm90aWZpY2F0aW9ucyBjb3VsZCBub3QgYmUgSW1wb3J0ZWQgZHVlIHRvIGEgdW5rbm93biBlcnJvciwgcGxlYXNlIGNoZWNrIE9UT0JPIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24nCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkTm90aWZpY2F0aW9uSW1wb3J0LT57QWRkZWROb3RpZmljYXRpb25zfSApIHsKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17Tm90aWZ5RGF0YX0gfSwgewogICAgICAgICAgICAgICAgSW5mbyA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ1RoZSBmb2xsb3dpbmcgTm90aWZpY2F0aW9ucyBoYXZlIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5OiAlcycsCiAgICAgICAgICAgICAgICAgICAgJE5vdGlmaWNhdGlvbkltcG9ydC0+e0FkZGVkTm90aWZpY2F0aW9uc30KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICggJE5vdGlmaWNhdGlvbkltcG9ydC0+e1VwZGF0ZWROb3RpZmljYXRpb25zfSApIHsKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17Tm90aWZ5RGF0YX0gfSwgewogICAgICAgICAgICAgICAgSW5mbyA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ1RoZSBmb2xsb3dpbmcgTm90aWZpY2F0aW9ucyBoYXZlIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHk6ICVzJywKICAgICAgICAgICAgICAgICAgICAkTm90aWZpY2F0aW9uSW1wb3J0LT57VXBkYXRlZE5vdGlmaWNhdGlvbnN9CiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoICROb3RpZmljYXRpb25JbXBvcnQtPntOb3RpZmljYXRpb25FcnJvcnN9ICkgewogICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtOb3RpZnlEYXRhfSB9LCB7CiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgSW5mbyAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdUaGVyZSB3aGVyZSBlcnJvcnMgYWRkaW5nL3VwZGF0aW5nIHRoZSBmb2xsb3dpbmcgTm90aWZpY2F0aW9uczogJXMuIFBsZWFzZSBjaGVjayB0aGUgbG9nIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywKICAgICAgICAgICAgICAgICAgICAkTm90aWZpY2F0aW9uSW1wb3J0LT57Tm90aWZpY2F0aW9uRXJyb3JzfQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgc2hvdyBub3RpZmljYXRpb25zIGlmIGFueQogICAgICAgIGlmICggJFBhcmFte05vdGlmeURhdGF9ICkgewogICAgICAgICAgICBmb3IgbXkgJE5vdGlmaWNhdGlvbiAoIEB7ICRQYXJhbXtOb3RpZnlEYXRhfSB9ICkgewogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICAgICAgJXskTm90aWZpY2F0aW9ufSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluTm90aWZpY2F0aW9uRXZlbnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPl9PdmVydmlldygpOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggSW5mbyA9PiBUcmFuc2xhdGFibGUoJ05vdGlmaWNhdGlvbiB1cGRhdGVkIScpICkKICAgICAgICAgICAgaWYgKCAkTm90aWZpY2F0aW9uICYmICROb3RpZmljYXRpb24gZXEgJ1VwZGF0ZScgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbk5vdGlmaWNhdGlvbkV2ZW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBfRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIG15ICRRdWV1ZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKIyBFTyBMaWdodEFkbWluCgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgJFBhcmFte1JlY2lwaWVudHNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBBZ2VudENyZWF0ZUJ5ICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQWdlbnQgd2hvIGNyZWF0ZWQgdGhlIHRpY2tldCcpLAogICAgICAgICAgICBBZ2VudE93bmVyICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQWdlbnQgd2hvIG93bnMgdGhlIHRpY2tldCcpLAogICAgICAgICAgICBBZ2VudFJlc3BvbnNpYmxlICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQWdlbnQgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgdGlja2V0JyksCiAgICAgICAgICAgIEFnZW50V2F0Y2hlciAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBbGwgYWdlbnRzIHdhdGNoaW5nIHRoZSB0aWNrZXQnKSwKICAgICAgICAgICAgQWdlbnRXcml0ZVBlcm1pc3Npb25zICAgICA9PiBUcmFuc2xhdGFibGUoJ0FsbCBhZ2VudHMgd2l0aCB3cml0ZSBwZXJtaXNzaW9uIGZvciB0aGUgdGlja2V0JyksCiAgICAgICAgICAgIEFnZW50TXlRdWV1ZXMgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBbGwgYWdlbnRzIHN1YnNjcmliZWQgdG8gdGhlIHRpY2tldFwncyBxdWV1ZScpLAogICAgICAgICAgICBBZ2VudE15U2VydmljZXMgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQWxsIGFnZW50cyBzdWJzY3JpYmVkIHRvIHRoZSB0aWNrZXRcJ3Mgc2VydmljZScpLAogICAgICAgICAgICBBZ2VudE15UXVldWVzTXlTZXJ2aWNlcyAgID0+IFRyYW5zbGF0YWJsZSgnQWxsIGFnZW50cyBzdWJzY3JpYmVkIHRvIGJvdGggdGhlIHRpY2tldFwncyBxdWV1ZSBhbmQgc2VydmljZScpLAogICAgICAgICAgICBDdXN0b21lciAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQ3VzdG9tZXIgdXNlciBvZiB0aGUgdGlja2V0JyksCiAgICAgICAgICAgIEFsbFJlY2lwaWVudHNGaXJzdEFydGljbGUgPT4gVHJhbnNsYXRhYmxlKCdBbGwgcmVjaXBpZW50cyBvZiB0aGUgZmlyc3QgYXJ0aWNsZScpLAogICAgICAgICAgICBBbGxSZWNpcGllbnRzTGFzdEFydGljbGUgID0+IFRyYW5zbGF0YWJsZSgnQWxsIHJlY2lwaWVudHMgb2YgdGhlIGxhc3QgYXJ0aWNsZScpLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnUmVjaXBpZW50cycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gOCwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtEYXRhfS0+e1JlY2lwaWVudHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSBXNzVwYycsCiAgICApOwoKICAgIG15ICVBbGxBZ2VudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTGlzdCgKICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CiAgICAkUGFyYW17UmVjaXBpZW50QWdlbnRzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlQWxsQWdlbnRzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1JlY2lwaWVudEFnZW50cycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gNCwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtEYXRhfS0+e1JlY2lwaWVudEFnZW50c30sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjJywKICAgICk7CgogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgJFBhcmFte1JlY2lwaWVudEdyb3Vwc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiB7ICRHcm91cE9iamVjdC0+R3JvdXBMaXN0KCBWYWxpZCA9PiAxICkgfSwKICAgICAgICBTaXplICAgICAgID0+IDYsCiAgICAgICAgTmFtZSAgICAgICA9PiAnUmVjaXBpZW50R3JvdXBzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17RGF0YX0tPntSZWNpcGllbnRHcm91cHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSBXNzVwYycsCiAgICApOwogICAgJFBhcmFte1JlY2lwaWVudFJvbGVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IHsgJEdyb3VwT2JqZWN0LT5Sb2xlTGlzdCggVmFsaWQgPT4gMSApIH0sCiAgICAgICAgU2l6ZSAgICAgICA9PiA2LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1JlY2lwaWVudFJvbGVzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17RGF0YX0tPntSZWNpcGllbnRSb2xlc30sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjJywKICAgICk7CgogICAgIyBTZXQgY2xhc3MgbmFtZSBmb3IgZXZlbnQgc3RyaW5nLi4uCiAgICBteSAkRXZlbnRDbGFzcyA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICBpZiAoICRQYXJhbXtFdmVudHNTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJEV2ZW50Q2xhc3MgLj0gJyAnIC4gJFBhcmFte0V2ZW50c1NlcnZlckVycm9yfTsKICAgIH0KCiAgICAjIFNldCBjbGFzcyBuYW1lIGZvciBhcnRpY2xlIHNlbmRlciB0eXBlLi4uCiAgICBteSAkQXJ0aWNsZVNlbmRlclR5cGVJRENsYXNzID0gJyc7CiAgICBpZiAoICRQYXJhbXtBcnRpY2xlU2VuZGVyVHlwZUlEU2VydmVyRXJyb3J9ICkgewogICAgICAgICRBcnRpY2xlU2VuZGVyVHlwZUlEQ2xhc3MgLj0gJyAnIC4gJFBhcmFte0FydGljbGVTZW5kZXJUeXBlSURTZXJ2ZXJFcnJvcn07CiAgICB9CgogICAgbXkgJVJlZ2lzdGVyZWRFdmVudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RXZlbnQnKS0+RXZlbnRMaXN0KAogICAgICAgIE9iamVjdFR5cGVzID0+IFsgJ1RpY2tldCcsICdBcnRpY2xlJywgXSwKICAgICk7CgogICAgbXkgQEV2ZW50czsKICAgIGZvciBteSAkT2JqZWN0VHlwZSAoIHNvcnQga2V5cyAlUmVnaXN0ZXJlZEV2ZW50cyApIHsKICAgICAgICBwdXNoIEBFdmVudHMsIEB7ICRSZWdpc3RlcmVkRXZlbnRzeyRPYmplY3RUeXBlfSB8fCBbXSB9OwogICAgfQoKICAgICMgU3VwcHJlc3MgdGhlc2UgZXZlbnRzIGJlY2F1c2Ugb2YgZGFuZ2VyIG9mIGVuZGxlc3MgbG9vcHMuCiAgICBteSAlRXZlbnRCbGFja2xpc3QgPSAoCiAgICAgICAgQXJ0aWNsZUFnZW50Tm90aWZpY2F0aW9uICAgID0+IDEsCiAgICAgICAgQXJ0aWNsZUN1c3RvbWVyTm90aWZpY2F0aW9uID0+IDEsCiAgICApOwoKICAgIEBFdmVudHMgPSBncmVwIHsgISRFdmVudEJsYWNrbGlzdHskX30gfSBARXZlbnRzOwoKICAgICMgQnVpbGQgdGhlIGxpc3QuLi4KICAgICRQYXJhbXtFdmVudHNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXEBFdmVudHMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnRXZlbnRzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiAxMCwKICAgICAgICBDbGFzcyAgICAgID0+ICRFdmVudENsYXNzIC4gJyBNb2Rlcm5pemUgVzc1cGMnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0RhdGF9LT57RXZlbnRzfSwKICAgICk7CgogICAgJFBhcmFte1N0YXRlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0RhdGF9LT57U3RhdGVJRH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjJywKICAgICk7CgogICAgJFBhcmFte1F1ZXVlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QWdlbnRRdWV1ZUxpc3RPcHRpb24oCiAgICAgICAgRGF0YSAgICAgICAgICAgICAgID0+IHsgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPkdldEFsbFF1ZXVlcygpLCB9LAogICAgICAgIFNpemUgICAgICAgICAgICAgICA9PiA1LAogICAgICAgIE11bHRpcGxlICAgICAgICAgICA9PiAxLAogICAgICAgIE5hbWUgICAgICAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgVHJlZVZpZXcgICAgICAgICAgID0+ICRUcmVlVmlldywKICAgICAgICBTZWxlY3RlZElEUmVmQXJyYXkgPT4gJFBhcmFte0RhdGF9LT57UXVldWVJRH0sCiAgICAgICAgT25DaGFuZ2VTdWJtaXQgICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgICAgICAgID0+ICdNb2Rlcm5pemUgVzc1cGMnLAogICAgKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAjIE1ha2UgdGhlIHF1ZXVlIGZpZWxkIG1hbmRhdG9yeS4KICAgICAgICAkUGFyYW17TGlnaHRBZG1pbn0gPSAxOwoKICAgICAgICBteSAlUm9RdWV1ZXMgPSAkUXVldWVPYmplY3QtPkdldEFsbFF1ZXVlcyggVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSApOwogICAgICAgIG15ICVSd1F1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+R2V0QWxsUXVldWVzKAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICApOwoKICAgICAgICAjIEFkZCBkaXNhYmxlZCBxdWV1ZXMKICAgICAgICBteSBARGlzYWJsZWRRdWV1ZXM7CiAgICAgICAgbXkgQFZpc2libGVTZWxlY3RlZDsKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9LT57UXVldWVJRH0gKSApIHsKICAgICAgICAgICAgZm9yIG15ICRRdWV1ZUlEICggQHsgJFBhcmFte0RhdGF9LT57UXVldWVJRH0gfSApIHsKICAgICAgICAgICAgICAgIGlmICggJFJ3UXVldWVzeyAkUXVldWVJRCB9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFZpc2libGVTZWxlY3RlZCwgJFF1ZXVlSUQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzaWYgKCAkUm9RdWV1ZXN7ICRRdWV1ZUlEIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgIyBzaG93IHRoZSBxdWV1ZSBidXQgZGlzYWJsZSBpdAogICAgICAgICAgICAgICAgICAgICRSd1F1ZXVlc3sgJFF1ZXVlSUQgfSA9ICRSb1F1ZXVlc3sgJFF1ZXVlSUQgfTsKCiAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGNhbiBoYXZlIHRoZSBzaWRlZWZmZWN0IHRoYXQgaWYgdGhlIGFnZW50IGhhcyBydyBvbiBxdWV1ZSBYOjpZLCBidXQgcXVldWUgWCBnZXRzIGFkZGVkIGhlcmUsCiAgICAgICAgICAgICAgICAgICAgIyBYOjpZIHdpbGwgYmUgZGlzYWJsZWQgYXMgcGFydCBvZiB0aGUgYnJhbmNoLCB0b28sIGJ1dCB0aGUgYWdlbnQgY2Fubm90IGFsdGVyIHRoaXMgbm90aWZpY2F0aW9uIGFueXdheXMKICAgICAgICAgICAgICAgICAgICBwdXNoIEBEaXNhYmxlZFF1ZXVlcywgJFF1ZXVlSUQ7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAVmlzaWJsZVNlbGVjdGVkLCAkUXVldWVJRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGVsc2UgLT4gZG9uJ3Qgc2hvdyBxdWV1ZXMgeW91IGhhdmUgbm8gcm8gYWNjZXNzCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRQYXJhbXtRdWV1ZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgICA9PiBcJVJ3UXVldWVzLAogICAgICAgICAgICBTaXplICAgICAgICAgICA9PiA1LAogICAgICAgICAgICBNdWx0aXBsZSAgICAgICA9PiAxLAogICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICRUcmVlVmlldywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgICAgPT4gXEBWaXNpYmxlU2VsZWN0ZWQsCiAgICAgICAgICAgIERpc2FibGVkQnJhbmNoID0+IFxARGlzYWJsZWRRdWV1ZXMsCiAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICdNb2Rlcm5pemUgVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQnLAogICAgICAgICk7CiAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICRQYXJhbXtQcmlvcml0aWVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TGlzdCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17RGF0YX0tPntQcmlvcml0eUlEfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgVzc1cGMnLAogICAgKTsKCiAgICAkUGFyYW17TG9ja3NTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9jaycpLT5Mb2NrTGlzdCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ0xvY2tJRCcsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gMywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtEYXRhfS0+e0xvY2tJRH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjJywKICAgICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkUGFyYW17VmFsaWRPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFc1MHBjJywKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZScsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIGJ1aWxkIHR5cGUgc3RyaW5nCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgKSB7CiAgICAgICAgbXkgJVR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgICRQYXJhbXtUeXBlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlVHlwZSwKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtEYXRhfS0+e1R5cGVJRH0sCiAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIFNpemUgICAgICAgID0+IDMsCiAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUgVzc1cGMnLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3VXBkYXRlVHlwZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgYnVpbGQgc2VydmljZSBzdHJpbmcKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKCiAgICAgICAgIyBnZXQgbGlzdCB0eXBlCiAgICAgICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVmFsaWQgICAgICAgID0+IDEsCiAgICAgICAgICAgIEtlZXBDaGlsZHJlbiA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJykgLy8gMCwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgICRQYXJhbXtTZXJ2aWNlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlU2VydmljZSwKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtEYXRhfS0+e1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgICAgIE1heCAgICAgICAgID0+IDIwMCwKICAgICAgICAgICAgVHJlZVZpZXcgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjJywKICAgICAgICApOwogICAgICAgIG15ICVTTEEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17U0xBc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlU0xBLAogICAgICAgICAgICBOYW1lICAgICAgICA9PiAnU0xBSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17RGF0YX0tPntTTEFJRH0sCiAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgICAgIE1heCAgICAgICAgID0+IDIwMCwKICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZSBXNzVwYycsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdVcGRhdGVTZXJ2aWNlJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBjcmVhdGUgZHluYW1pYyBmaWVsZCBIVE1MIGZvciBzZXQgd2l0aCBoaXN0b3JpY2FsIGRhdGEgb3B0aW9ucwogICAgbXkgJFByaW50RHluYW1pY0ZpZWxkc1NlYXJjaEhlYWRlciA9IDE7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgPT4gWydUaWNrZXQnXSwKICAgICk7CgogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBza2lwIGFsbCBkeW5hbWljIGZpZWxkcyB0aGF0IGFyZSBub3QgZGVzaWduZWQgdG8gYmUgbm90aWZpY2F0aW9uIHRyaWdnZXJzCiAgICAgICAgbXkgJElzTm90aWZpY2F0aW9uRXZlbnRDb25kaXRpb24gPSAkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzTm90aWZpY2F0aW9uRXZlbnRDb25kaXRpb24nLAogICAgICAgICk7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNOb3RpZmljYXRpb25FdmVudENvbmRpdGlvbjsKCiAgICAgICAgIyBnZXQgZmllbGQgSFRNTAogICAgICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFByb2ZpbGUgICAgICAgICAgICAgICAgPT4gJFBhcmFte0R5bmFtaWNGaWVsZFZhbHVlc30gfHwge30sCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgQ29uZmlybWF0aW9uQ2hlY2tib3hlcyA9PiAxLAogICAgICAgICAgICBVc2VMYWJlbEhpbnRzICAgICAgICAgID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRIVE1MKTsKCiAgICAgICAgaWYgKCRQcmludER5bmFtaWNGaWVsZHNTZWFyY2hIZWFkZXIpIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZCcgKTsKICAgICAgICAgICAgJFByaW50RHluYW1pY0ZpZWxkc1NlYXJjaEhlYWRlciA9IDA7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBkeW5hbWljIGZpZWxkCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZEVsZW1lbnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRQYXJhbXtSaWNoVGV4dH0gKSB7CgogICAgICAgICMgdXNlIGhlaWdodC93aWR0aCBkZWZpbmVkIGZvciB0aGlzIHNjcmVlbgogICAgICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIkZyb250ZW5kOjpBZG1pbjo6JFNlbGYtPntBY3Rpb259Iik7CiAgICAgICAgJFBhcmFte1JpY2hUZXh0SGVpZ2h0fSA9ICRDb25maWctPntSaWNoVGV4dEhlaWdodH0gfHwgMDsKICAgICAgICAkUGFyYW17UmljaFRleHRXaWR0aH0gID0gJENvbmZpZy0+e1JpY2hUZXh0V2lkdGh9ICB8fCAwOwoKICAgICAgICAjIHNldCB1cCByaWNoIHRleHQgZWRpdG9yCiAgICAgICAgJExheW91dE9iamVjdC0+U2V0UmljaFRleHRQYXJhbWV0ZXJzKAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuYW1lcyBvZiBsYW5ndWFnZXMgaW4gRW5nbGlzaAogICAgbXkgJURlZmF1bHRVc2VkTGFuZ3VhZ2VzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdEZWZhdWx0VXNlZExhbmd1YWdlcycpIHx8IHt9IH07CgogICAgIyBnZXQgbGFuZ3VhZ2UgaWRzIGZyb20gbWVzc2FnZSBwYXJhbWV0ZXIsIHVzZSBFbmdsaXNoIGlmIG5vIG1lc3NhZ2UgaXMgZ2l2ZW4KICAgICMgbWFrZSBzdXJlIEVuZ2xpc2ggaXMgdGhlIGZpcnN0IGxhbmd1YWdlCiAgICBteSBATGFuZ3VhZ2VJRHM7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17TWVzc2FnZX0gKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtNZXNzYWdlfS0+e2VufSApIHsKICAgICAgICAgICAgcHVzaCBATGFuZ3VhZ2VJRHMsICdlbic7CiAgICAgICAgfQogICAgICAgIExBTkdVQUdFSUQ6CiAgICAgICAgZm9yIG15ICRMYW5ndWFnZUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtNZXNzYWdlfSB9ICkgewogICAgICAgICAgICBuZXh0IExBTkdVQUdFSUQgaWYgJExhbmd1YWdlSUQgZXEgJ2VuJzsKICAgICAgICAgICAgcHVzaCBATGFuZ3VhZ2VJRHMsICRMYW5ndWFnZUlEOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJERlZmF1bHRVc2VkTGFuZ3VhZ2Vze2VufSApIHsKICAgICAgICBwdXNoIEBMYW5ndWFnZUlEcywgJ2VuJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHB1c2ggQExhbmd1YWdlSURzLCAoIHNvcnQga2V5cyAlRGVmYXVsdFVzZWRMYW5ndWFnZXMgKVswXTsKICAgIH0KCiAgICAjIGdldCBuYXRpdmUgbmFtZXMgb2YgbGFuZ3VhZ2VzCiAgICBteSAlRGVmYXVsdFVzZWRMYW5ndWFnZXNOYXRpdmUgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0RlZmF1bHRVc2VkTGFuZ3VhZ2VzTmF0aXZlJykgfHwge30gfTsKCiAgICBteSAlTGFuZ3VhZ2VzOwogICAgTEFOR1VBR0VJRDoKICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIHNvcnQga2V5cyAlRGVmYXVsdFVzZWRMYW5ndWFnZXMgKSB7CgogICAgICAgICMgbmV4dCBsYW5ndWFnZSBpZiB0aGVyZSBpcyBub3Qgc2V0IGFueSBuYW1lIGZvciBjdXJyZW50IGxhbmd1YWdlCiAgICAgICAgaWYgKCAhJERlZmF1bHRVc2VkTGFuZ3VhZ2VzeyRMYW5ndWFnZUlEfSAmJiAhJERlZmF1bHRVc2VkTGFuZ3VhZ2VzTmF0aXZleyRMYW5ndWFnZUlEfSApIHsKICAgICAgICAgICAgbmV4dCBMQU5HVUFHRUlEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGV4dHMgaW4gbmF0aXZlIGFuZCBkZWZhdWx0IGxhbmd1YWdlCiAgICAgICAgbXkgJFRleHQgICAgICAgID0gJERlZmF1bHRVc2VkTGFuZ3VhZ2VzTmF0aXZleyRMYW5ndWFnZUlEfSB8fCAnJzsKICAgICAgICBteSAkVGV4dEVuZ2xpc2ggPSAkRGVmYXVsdFVzZWRMYW5ndWFnZXN7JExhbmd1YWdlSUR9ICAgICAgIHx8ICcnOwoKICAgICAgICAjIHRyYW5zbGF0ZSB0byBjdXJyZW50IHVzZXIncyBsYW5ndWFnZQogICAgICAgIG15ICRUZXh0VHJhbnNsYXRlZCA9CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRUZXh0RW5nbGlzaCk7CgogICAgICAgIGlmICggJFRleHRUcmFuc2xhdGVkICYmICRUZXh0VHJhbnNsYXRlZCBuZSAkVGV4dCApIHsKICAgICAgICAgICAgJFRleHQgLj0gJyAtICcgLiAkVGV4dFRyYW5zbGF0ZWQ7CiAgICAgICAgfQoKICAgICAgICAjIG5leHQgbGFuZ3VhZ2UgaWYgdGhlcmUgaXMgbm90IHNldCBFbmdsaXNoIG5vciBuYXRpdmUgbmFtZSBvZiBsYW5ndWFnZS4KICAgICAgICBuZXh0IExBTkdVQUdFSUQgaWYgISRUZXh0OwoKICAgICAgICAkTGFuZ3VhZ2VzeyRMYW5ndWFnZUlEfSA9ICRUZXh0OwogICAgfQoKICAgICMgY29weSBvcmlnaW5hbCBsaXN0IG9mIGxhbmd1YWdlcyB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHJlYnVpbGRpbmcgbGFuZ3VhZ2Ugc2VsZWN0aW9uCiAgICBteSAlT3JpZ2luYWxEZWZhdWx0VXNlZExhbmd1YWdlcyA9ICVMYW5ndWFnZXM7CgogICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKCiAgICBmb3IgbXkgJExhbmd1YWdlSUQgKEBMYW5ndWFnZUlEcykgewoKICAgICAgICAjIGZvcm1hdCB0aGUgY29udGVudCBhY2NvcmRpbmcgdG8gdGhlIGNvbnRlbnQgdHlwZQogICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKCiAgICAgICAgICAgICMgbWFrZSBzdXJlIGJvZHkgaXMgcmljaCB0ZXh0IChpZiBib2R5IGlzIGJhc2VkIG9uIGNvbmZpZykKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte01lc3NhZ2V9LT57JExhbmd1YWdlSUR9LT57Q29udGVudFR5cGV9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17TWVzc2FnZX0tPnskTGFuZ3VhZ2VJRH0tPntDb250ZW50VHlwZX0gPX4gbXt0ZXh0XC9wbGFpbn14bXNpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRQYXJhbXtNZXNzYWdlfS0+eyRMYW5ndWFnZUlEfS0+e0JvZHl9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17TWVzc2FnZX0tPnskTGFuZ3VhZ2VJRH0tPntCb2R5fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIHJlZm9ybWF0IGZyb20gSFRNTCB0byBwbGFpbgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkUGFyYW17TWVzc2FnZX0tPnskTGFuZ3VhZ2VJRH0tPntDb250ZW50VHlwZX0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtNZXNzYWdlfS0+eyRMYW5ndWFnZUlEfS0+e0NvbnRlbnRUeXBlfSA9fiBte3RleHRcL2h0bWx9eG1zaQogICAgICAgICAgICAgICAgJiYgJFBhcmFte01lc3NhZ2V9LT57JExhbmd1YWdlSUR9LT57Qm9keX0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFte01lc3NhZ2V9LT57JExhbmd1YWdlSUR9LT57Qm9keX0gPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0FzY2lpKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17TWVzc2FnZX0tPnskTGFuZ3VhZ2VJRH0tPntCb2R5fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2hvdyB0aGUgbm90aWZpY2F0aW9uIGZvciB0aGlzIGxhbmd1YWdlCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vdGlmaWNhdGlvbkxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgPT4gJFBhcmFte01lc3NhZ2V9LT57JExhbmd1YWdlSUR9LT57U3ViamVjdH0gfHwgJycsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgPT4gJFBhcmFte01lc3NhZ2V9LT57JExhbmd1YWdlSUR9LT57Qm9keX0gICAgfHwgJycsCiAgICAgICAgICAgICAgICBMYW5ndWFnZUlEICAgICAgICAgPT4gJExhbmd1YWdlSUQsCiAgICAgICAgICAgICAgICBMYW5ndWFnZSAgICAgICAgICAgPT4gJExhbmd1YWdlc3skTGFuZ3VhZ2VJRH0sCiAgICAgICAgICAgICAgICBTdWJqZWN0U2VydmVyRXJyb3IgPT4gJFBhcmFteyAkTGFuZ3VhZ2VJRCAuICdfU3ViamVjdFNlcnZlckVycm9yJyB9IHx8ICcnLAogICAgICAgICAgICAgICAgQm9keVNlcnZlckVycm9yICAgID0+ICRQYXJhbXsgJExhbmd1YWdlSUQgLiAnX0JvZHlTZXJ2ZXJFcnJvcicgfSAgICB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm90aWZpY2F0aW9uTGFuZ3VhZ2VSZW1vdmVCdXR0b24nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJExhbmd1YWdlSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgbGFuZ3VhZ2UgZnJvbSBkcm9wLWRvd24gbGlzdCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd24KICAgICAgICBkZWxldGUgJExhbmd1YWdlc3skTGFuZ3VhZ2VJRH07CiAgICB9CgogICAgJFBhcmFte0xhbmd1YWdlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVMYW5ndWFnZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdMYW5ndWFnZScsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUgVzUwcGMgTGFuZ3VhZ2VBZGQnLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIEhUTUxRdW90ZSAgICA9PiAwLAogICAgKTsKICAgICRQYXJhbXtMYW5ndWFnZU9yaWdTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJU9yaWdpbmFsRGVmYXVsdFVzZWRMYW5ndWFnZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdMYW5ndWFnZU9yaWcnLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIEhUTUxRdW90ZSAgICA9PiAwLAogICAgKTsKCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICAkUGFyYW17QXJ0aWNsZVNlbmRlclR5cGVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiB7ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VuZGVyVHlwZUxpc3QoKSwgfSwKICAgICAgICBOYW1lICAgICAgICA9PiAnQXJ0aWNsZVNlbmRlclR5cGVJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte0RhdGF9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0sCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJEFydGljbGVTZW5kZXJUeXBlSURDbGFzcyAuICcgTW9kZXJuaXplIFc3NXBjJywKICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICBNYXggICAgICAgICA9PiAyMDAsCiAgICApOwoKICAgICRQYXJhbXtBcnRpY2xlQ3VzdG9tZXJWaXNpYmlsaXR5U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgMCA9PiBUcmFuc2xhdGFibGUoJ0ludmlzaWJsZSB0byBjdXN0b21lcicpLAogICAgICAgICAgICAxID0+IFRyYW5zbGF0YWJsZSgnVmlzaWJsZSB0byBjdXN0b21lcicpLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdBcnRpY2xlSXNWaXNpYmxlRm9yQ3VzdG9tZXInLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17RGF0YX0tPntBcnRpY2xlSXNWaXNpYmxlRm9yQ3VzdG9tZXJ9LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjJywKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CgogICAgbXkgQENvbW11bmljYXRpb25DaGFubmVsTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb21tdW5pY2F0aW9uQ2hhbm5lbCcpLT5DaGFubmVsTGlzdCgpOwogICAgbXkgJUNvbW11bmljYXRpb25DaGFubmVscyAgICA9IG1hcCB7ICRfLT57Q2hhbm5lbElEfSA9PiAkXy0+e0Rpc3BsYXlOYW1lfSB9IEBDb21tdW5pY2F0aW9uQ2hhbm5lbExpc3Q7CgogICAgJFBhcmFte0FydGljbGVDb21tdW5pY2F0aW9uQ2hhbm5lbFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4gXCVDb21tdW5pY2F0aW9uQ2hhbm5lbHMsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0FydGljbGVDb21tdW5pY2F0aW9uQ2hhbm5lbElEJywKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17RGF0YX0tPntBcnRpY2xlQ29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZSBXNzVwYycsCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICApOwoKICAgICRQYXJhbXtBcnRpY2xlQXR0YWNobWVudEluY2x1ZGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAwID0+IFRyYW5zbGF0YWJsZSgnTm8nKSwKICAgICAgICAgICAgMSA9PiBUcmFuc2xhdGFibGUoJ1llcycpLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0FydGljbGVBdHRhY2htZW50SW5jbHVkZScsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhcmFte0RhdGF9LT57QXJ0aWNsZUF0dGFjaG1lbnRJbmNsdWRlfSB8fCAwLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgTWF4ICAgICAgICAgPT4gMjAwLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUgVzc1cGMnLAogICAgKTsKCiAgICAjIGdldCBhbGwgc2VhcmNoYWJsZSBhcnRpY2xlIGZpZWxkIGRlZmluaXRpb25zCiAgICBteSAlQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVTZWFyY2hhYmxlRmllbGRzTGlzdCgpOwoKICAgIGZvciBteSAkQXJ0aWNsZUZpZWxkS2V5ICggc29ydCBrZXlzICVBcnRpY2xlU2VhcmNoYWJsZUZpZWxkcyApIHsKCiAgICAgICAgbXkgJFZhbHVlID0gJyc7CgogICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPnskQXJ0aWNsZUZpZWxkS2V5fSApICkgewogICAgICAgICAgICAkVmFsdWUgPSAkUGFyYW17RGF0YX0tPnskQXJ0aWNsZUZpZWxkS2V5fS0+WzBdOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0JhY2tlbmRBcnRpY2xlRmllbGQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExhYmVsID0+IFRyYW5zbGF0YWJsZSggJEFydGljbGVTZWFyY2hhYmxlRmllbGRzeyRBcnRpY2xlRmllbGRLZXl9LT57TGFiZWx9ICksCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHN7JEFydGljbGVGaWVsZEtleX0tPntLZXl9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB0YWtlIG92ZXIgZGF0YSBmaWVsZHMKICAgIEtFWToKICAgIGZvciBteSAkS2V5ICgKICAgICAgICBxdyhWaXNpYmxlRm9yQWdlbnQgVmlzaWJsZUZvckFnZW50VG9vbHRpcCBDdXN0b21lcklEIEN1c3RvbWVyVXNlcklEKQogICAgICAgICkKICAgIHsKICAgICAgICBuZXh0IEtFWSBpZiAhJFBhcmFte0RhdGF9LT57JEtleX07CiAgICAgICAgbmV4dCBLRVkgaWYgIWRlZmluZWQgJFBhcmFte0RhdGF9LT57JEtleX0tPlswXTsKICAgICAgICAkUGFyYW17JEtleX0gPSAkUGFyYW17RGF0YX0tPnskS2V5fS0+WzBdOwogICAgfQoKICAgICMgc2V0IHNlbmQgb24gb3V0IG9mIG9mZmljZSBjaGVja2VkIHZhbHVlCiAgICAkUGFyYW17U2VuZE9uT3V0T2ZPZmZpY2VDaGVja2VkfSA9ICggJFBhcmFte0RhdGF9LT57U2VuZE9uT3V0T2ZPZmZpY2V9ID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnICk7CgogICAgIyBzZXQgb25jZSBwZXIgZGF5IGNoZWNrZWQgdmFsdWUKICAgICRQYXJhbXtPbmNlUGVyRGF5Q2hlY2tlZH0gPSAoICRQYXJhbXtEYXRhfS0+e09uY2VQZXJEYXl9ID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnICk7CgogICAgJFBhcmFte1Zpc2libGVGb3JBZ2VudFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICcwJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnTm8nKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJzEnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdZZXMnKSwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1Zpc2libGVGb3JBZ2VudCcsCiAgICAgICAgU29ydCAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgU2l6ZSAgICAgICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1Zpc2libGVGb3JBZ2VudH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFc1MHBjJywKICAgICk7CgogICAgIyBpbmNsdWRlIHJlYWQtb25seSBhdHRyaWJ1dGUKICAgIGlmICggISRQYXJhbXtWaXNpYmxlRm9yQWdlbnR9ICkgewogICAgICAgICRQYXJhbXtWaXNpYmxlRm9yQWdlbnRUb29sdGlwUmVhZG9ubHl9ID0gJ3JlYWRvbmx5PSJyZWFkb25seSInOwogICAgfQoKICAgICMgZ2V0IHJlZ2lzdGVyZWQgdHJhbnNwb3J0IGxheWVycwogICAgbXkgJVJlZ2lzdGVyZWRUcmFuc3BvcnRzID0gJXsgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdOb3RpZmljYXRpb246OlRyYW5zcG9ydCcpIHx8IHt9IH07CgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggXCVSZWdpc3RlcmVkVHJhbnNwb3J0cyApICkgewoKICAgICAgICBteSAkTWFpbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgICAgIFRSQU5TUE9SVDoKICAgICAgICBmb3IgbXkgJFRyYW5zcG9ydCAoCiAgICAgICAgICAgIHNvcnQgeyAkUmVnaXN0ZXJlZFRyYW5zcG9ydHN7JGF9LT57UHJpb30gPD0+ICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skYn0tPntQcmlvfSB9CiAgICAgICAgICAgIGtleXMgJVJlZ2lzdGVyZWRUcmFuc3BvcnRzCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICBuZXh0IFRSQU5TUE9SVCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fSApOwogICAgICAgICAgICBuZXh0IFRSQU5TUE9SVCBpZiAhJFJlZ2lzdGVyZWRUcmFuc3BvcnRzeyRUcmFuc3BvcnR9LT57TW9kdWxlfTsKCiAgICAgICAgICAgICMgdHJhbnNwb3J0CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJhbnNwb3J0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCAgICAgPT4gJFRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnROYW1lID0+ICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fS0+e05hbWV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRNYWluT2JqZWN0LT5SZXF1aXJlKCAkUmVnaXN0ZXJlZFRyYW5zcG9ydHN7JFRyYW5zcG9ydH0tPntNb2R1bGV9LCBTaWxlbnQgPT4gMSApICkgewoKICAgICAgICAgICAgICAgICMgYmFja2VuZCBmb3IgdGhpcyB0cmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJhbnNwb3J0Um93RGlzYWJsZWQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgICAgID0+ICRUcmFuc3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydE5hbWUgPT4gJFJlZ2lzdGVyZWRUcmFuc3BvcnRzeyRUcmFuc3BvcnR9LT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBUUkFOU1BPUlQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgbXkgJFRyYW5zcG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fS0+e01vZHVsZX0gKTsKCiAgICAgICAgICAgICAgICBteSAkSXNBY3RpdmUgPSAxOwoKICAgICAgICAgICAgICAgICMgQ2hlY2sgb25seSBpZiBmdW5jdGlvbiBpcyBhdmFpbGFibGUgZHVlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogICAgICAgICAgICAgICAgaWYgKCAkVHJhbnNwb3J0T2JqZWN0LT5jYW4oJ0lzQWN0aXZlJykgKSB7CiAgICAgICAgICAgICAgICAgICAgJElzQWN0aXZlID0gJFRyYW5zcG9ydE9iamVjdC0+SXNBY3RpdmUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJElzQWN0aXZlKSB7CgogICAgICAgICAgICAgICAgICAgIG15ICRUcmFuc3BvcnRDaGVja2VkID0gJyc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBncmVwIHsgJF8gZXEgJFRyYW5zcG9ydCB9IEB7ICRQYXJhbXtEYXRhfS0+e1RyYW5zcG9ydHN9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUcmFuc3BvcnRDaGVja2VkID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgc2V0IEVtYWlsIHRyYW5zcG9ydCBzZWxlY3RlZCBvbiBhZGQgc2NyZWVuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVHJhbnNwb3J0IGVxICdFbWFpbCcgJiYgISRQYXJhbXtJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUcmFuc3BvcnRDaGVja2VkID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRyYW5zcG9ydCBzZXR0aW5ncyBzdHJpbmcgZnJvbSB0cmFuc3BvcnQgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgbXkgJFRyYW5zcG9ydFNldHRpbmdzID0KICAgICAgICAgICAgICAgICAgICAgICAgJFRyYW5zcG9ydE9iamVjdC0+VHJhbnNwb3J0U2V0dGluZ3NEaXNwbGF5R2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGl0IHNob3VsZCBkZWNpZGUgaWYgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgICMgbm90aWZpY2F0aW9uIG9uIEFnZW50UHJlZmVyZW5jZXMgaXMgZW5hYmxlZCBvciBub3QKICAgICAgICAgICAgICAgICAgICBteSAkQWdlbnRFbmFibGVkQnlEZWZhdWx0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkVHJhbnNwb3J0IH0gQHsgJFBhcmFte0RhdGF9LT57QWdlbnRFbmFibGVkQnlEZWZhdWx0fSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQWdlbnRFbmFibGVkQnlEZWZhdWx0ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAhJFBhcmFte0lEfSAmJiBkZWZpbmVkICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fS0+e0FnZW50RW5hYmxlZEJ5RGVmYXVsdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRBZ2VudEVuYWJsZWRCeURlZmF1bHQgPSAkUmVnaXN0ZXJlZFRyYW5zcG9ydHN7JFRyYW5zcG9ydH0tPntBZ2VudEVuYWJsZWRCeURlZmF1bHR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBteSAkQWdlbnRFbmFibGVkQnlEZWZhdWx0Q2hlY2tlZCA9ICggJEFnZW50RW5hYmxlZEJ5RGVmYXVsdCA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJyApOwoKICAgICAgICAgICAgICAgICAgICAjIHRyYW5zcG9ydAogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmFuc3BvcnRSb3dFbmFibGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgICAgICAgICAgICAgICAgICAgID0+ICRUcmFuc3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnROYW1lICAgICAgICAgICAgICAgID0+ICRSZWdpc3RlcmVkVHJhbnNwb3J0c3skVHJhbnNwb3J0fS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0Q2hlY2tlZCAgICAgICAgICAgICA9PiAkVHJhbnNwb3J0Q2hlY2tlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzU3RyaW5nICAgICAgICAgICAgICAgPT4gJFRyYW5zcG9ydFNldHRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdlbnRFbmFibGVkQnlEZWZhdWx0Q2hlY2tlZCA9PiAkQWdlbnRFbmFibGVkQnlEZWZhdWx0Q2hlY2tlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydHNTZXJ2ZXJFcnJvciAgICAgICAgPT4gJFBhcmFte1RyYW5zcG9ydHNTZXJ2ZXJFcnJvcn0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIFRoaXMgdHJhc25wb3J0IG5lZWRzIHRvIGJlIGFjdGl2ZSBiZWZvcmUgdXNlIGl0LgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmFuc3BvcnRSb3dOb3RBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCAgICAgPT4gJFRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydE5hbWUgPT4gJFJlZ2lzdGVyZWRUcmFuc3BvcnRzeyRUcmFuc3BvcnR9LT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgbm8gdHJhbnNwb3J0cwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZ1RyYW5zcG9ydCcsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9PdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkltcG9ydCcgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdGaWx0ZXInICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgbXkgJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok5vdGlmaWNhdGlvbkV2ZW50Jyk7CgogICAgbXkgJUxpc3QgPSAkTm90aWZpY2F0aW9uRXZlbnRPYmplY3QtPk5vdGlmaWNhdGlvbkxpc3QoKTsKCiAgICAjIGlmIHRoZXJlIGFyZSBhbnkgbm90aWZpY2F0aW9ucywgdGhleSBhcmUgc2hvd24KICAgIGlmICglTGlzdCkgewoKICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgICAgICBOT1RJRklDQVRJT05JRDoKICAgICAgICBmb3IgbXkgJE5vdGlmaWNhdGlvbklEICggc29ydCB7ICRMaXN0eyRhfSBjbXAgJExpc3R7JGJ9IH0ga2V5cyAlTGlzdCApIHsKCiAgICAgICAgICAgIG15ICVEYXRhID0gJE5vdGlmaWNhdGlvbkV2ZW50T2JqZWN0LT5Ob3RpZmljYXRpb25HZXQoCiAgICAgICAgICAgICAgICBJRCA9PiAkTm90aWZpY2F0aW9uSUQsCiAgICAgICAgICAgICk7CgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgICAgICREYXRhe1Blcm1pc3Npb259ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpZ2h0QWRtaW4nKS0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiAkRGF0YXtEYXRhfXtRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgTk9USUZJQ0FUSU9OSUQgaWYgISREYXRhe1Blcm1pc3Npb259OwogICAgICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyAkRGF0YXtWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Modules/AdminQueueTemplates.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQWRtaW5RdWV1ZVRlbXBsYXRlcy5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5RdWV1ZVRlbXBsYXRlczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIGlmICggISRQYXJhbXtBY2Nlc3NSd30gJiYgJFBhcmFte0FjY2Vzc1JvfSApIHsKICAgICAgICAkU2VsZi0+e0xpZ2h0QWRtaW59ID0gMTsKICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRRdWV1ZU9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIG15ICRMaWdodEFkbWluT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpZ2h0QWRtaW4nKTsKIyBFTyBMaWdodEFkbWluCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0ZW1wbGF0ZSA8LT4gcXVldWVzIDE6bgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1RlbXBsYXRlJyApIHsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgICAgIG15ICRJRCAgICAgICAgICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKICAgICAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZURhdGEgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZUdldCggSUQgPT4gJElEICk7CgogICAgICAgICMgZ2V0IHF1ZXVlcwogICAgICAgIG15ICVRdWV1ZURhdGEgPSAkUXVldWVPYmplY3QtPlF1ZXVlTGlzdCggVmFsaWQgPT4gMSApOwoKICAgICAgICAjIGdldCBhc3NpZ25lZCBxdWV1ZXMKICAgICAgICBteSAlTWVtYmVyID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJElELAogICAgICAgICk7CgogICAgICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlVHlwZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGVEYXRhe1RlbXBsYXRlVHlwZX0sCiAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICMgRmlsdGVyIG91dCBxdWV1ZXMgd2l0aG91dCBwZXJtaXNzaW9uLgogICAgICAgICAgICBteSAlUndRdWV1ZXMgPSAkUXVldWVPYmplY3QtPkdldEFsbFF1ZXVlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciBteSAkUXVldWVJRCAoIGtleXMgJVF1ZXVlRGF0YSApIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkUXVldWVEYXRheyRRdWV1ZUlEfSBpZiAhJFJ3UXVldWVzeyRRdWV1ZUlEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDaGVjayB0aGUgcGVybWlzc2lvbi4KICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCggU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRJRCApOwogICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRMaWdodEFkbWluT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICB1bmRlZiAlU3RhbmRhcmRUZW1wbGF0ZURhdGE7CiAgICAgICAgICAgICAgICB1bmRlZiAlTWVtYmVyOwogICAgICAgICAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGVUeXBlID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X0NoYW5nZSgKICAgICAgICAgICAgU2VsZWN0ZWQgPT4gXCVNZW1iZXIsCiAgICAgICAgICAgIERhdGEgICAgID0+IFwlUXVldWVEYXRhLAogICAgICAgICAgICBJRCAgICAgICA9PiAkU3RhbmRhcmRUZW1wbGF0ZURhdGF7SUR9LAogICAgICAgICAgICBOYW1lICAgICA9PiAkU3RhbmRhcmRUZW1wbGF0ZVR5cGUgLiAnIC0gJyAuICRTdGFuZGFyZFRlbXBsYXRlRGF0YXtOYW1lfSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ1RlbXBsYXRlJywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0ZW1wbGF0ZXMgPC0+IFF1ZXVlIG46MQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1F1ZXVlJyApIHsKCiAgICAgICAgIyBnZXQgcXVldWUgZGF0YQogICAgICAgIG15ICRJRCAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CiAgICAgICAgbXkgJVF1ZXVlRGF0YSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoIElEID0+ICRJRCApOwoKICAgICAgICAjIGdldCB0ZW1wbGF0ZXMKICAgICAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZURhdGEgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZUxpc3QoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCVTdGFuZGFyZFRlbXBsYXRlRGF0YSkgewogICAgICAgICAgICBmb3IgbXkgJFN0YW5kYXJkVGVtcGxhdGVJRCAoIHNvcnQga2V5cyAlU3RhbmRhcmRUZW1wbGF0ZURhdGEgKSB7CiAgICAgICAgICAgICAgICBteSAlRGF0YSA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlR2V0KAogICAgICAgICAgICAgICAgICAgIElEID0+ICRTdGFuZGFyZFRlbXBsYXRlSUQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU3RhbmRhcmRUZW1wbGF0ZURhdGF7JFN0YW5kYXJkVGVtcGxhdGVJRH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICREYXRhe1RlbXBsYXRlVHlwZX0gKQogICAgICAgICAgICAgICAgICAgIC4gJyAtICcKICAgICAgICAgICAgICAgICAgICAuICREYXRhe05hbWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhc3NpZ25lZCB0ZW1wbGF0ZXMKICAgICAgICBteSAlTWVtYmVyID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgICAgICBRdWV1ZUlEID0+ICRJRCwKICAgICAgICApOwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgIyBGaWx0ZXIgb3V0IHRlbXBsYXRlcyB3aXRob3V0IHBlcm1pc3Npb24uCiAgICAgICAgICAgIGZvciBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEICgga2V5cyAlU3RhbmRhcmRUZW1wbGF0ZURhdGEgKSB7CiAgICAgICAgICAgICAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFN0YW5kYXJkVGVtcGxhdGVJRCApOwogICAgICAgICAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbIGtleXMgJVF1ZXVlcyBdLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRTdGFuZGFyZFRlbXBsYXRlSUR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIHRoZSBwZXJtaXNzaW9uLgogICAgICAgICAgICBteSAlUndRdWV1ZXMgPSAkUXVldWVPYmplY3QtPkdldEFsbFF1ZXVlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSd1F1ZXVlc3skSUR9ICkgewogICAgICAgICAgICAgICAgdW5kZWYgJVF1ZXVlRGF0YTsKICAgICAgICAgICAgICAgIHVuZGVmICVNZW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X0NoYW5nZSgKICAgICAgICAgICAgU2VsZWN0ZWQgPT4gXCVNZW1iZXIsCiAgICAgICAgICAgIERhdGEgICAgID0+IFwlU3RhbmRhcmRUZW1wbGF0ZURhdGEsCiAgICAgICAgICAgIElEICAgICAgID0+ICRRdWV1ZURhdGF7UXVldWVJRH0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRRdWV1ZURhdGF7TmFtZX0sCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdRdWV1ZScsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkIHRlbXBsYXRlcyB0byBxdWV1ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZVF1ZXVlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBnZXQgbmV3IHRlbXBsYXRlcwogICAgICAgIG15IEBUZW1wbGF0ZXNTZWxlY3RlZCA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJdGVtc1NlbGVjdGVkJyApOwogICAgICAgIG15IEBUZW1wbGF0ZXNBbGwgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJdGVtc0FsbCcgKTsKCiAgICAgICAgbXkgJFF1ZXVlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgICAgICMgY3JlYXRlIGhhc2ggd2l0aCBzZWxlY3RlZCB0ZW1wbGF0ZXMKICAgICAgICBteSAlVGVtcGxhdGVzU2VsZWN0ZWQgPSBtYXAgeyAkXyA9PiAxIH0gQFRlbXBsYXRlc1NlbGVjdGVkOwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgU1RBTkRBUkRURU1QTEFURUlEOgogICAgICAgICAgICBmb3IgbXkgJFN0YW5kYXJkVGVtcGxhdGVJRCAoIGtleXMgJVRlbXBsYXRlc1NlbGVjdGVkICkgewogICAgICAgICAgICAgICAgbmV4dCBTVEFOREFSRFRFTVBMQVRFSUQgaWYgISRTdGFuZGFyZFRlbXBsYXRlSUQ7ICAjIENhbiBjb250YWluIGVtcHR5IHN0cmluZy4KCiAgICAgICAgICAgICAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFN0YW5kYXJkVGVtcGxhdGVJRCApOwogICAgICAgICAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbIGtleXMgJVF1ZXVlcyBdLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAjIGNoZWNrIGFsbCB1c2VkIHRlbXBsYXRlcwogICAgICAgIGZvciBteSAkVGVtcGxhdGVJRCAoQFRlbXBsYXRlc0FsbCkgewogICAgICAgICAgICBteSAkQWN0aXZlID0gJFRlbXBsYXRlc1NlbGVjdGVkeyRUZW1wbGF0ZUlEfSA/IDEgOiAwOwoKICAgICAgICAgICAgIyBzZXQgY3VzdG9tZXIgdXNlciBzZXJ2aWNlIG1lbWJlcgogICAgICAgICAgICAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckFkZCgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgICA9PiAkQWN0aXZlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgaWYgdGhlIHVzZXIgd291bGQgbGlrZSB0byBjb250aW51ZSBlZGl0aW5nIHRoZSB0ZW1wbGF0ZXMgLSBxdWV1ZSByZWxhdGlvbiBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byByZWxhdGlvbnMgb3ZlcnZpZXcKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1RdWV1ZTtJRD0kUXVldWVJRCIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBxdWV1ZXMgdG8gdGVtcGxhdGUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VUZW1wbGF0ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgZ2V0IG5ldyBxdWV1ZXMKICAgICAgICBteSBAUXVldWVzU2VsZWN0ZWQgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSXRlbXNTZWxlY3RlZCcgKTsKICAgICAgICBteSBAUXVldWVzQWxsICAgICAgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSXRlbXNBbGwnICk7CgogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApOwoKICAgICAgICAjIGNyZWF0ZSBoYXNoIHdpdGggc2VsZWN0ZWQgcXVldWVzCiAgICAgICAgbXkgJVF1ZXVlc1NlbGVjdGVkID0gbWFwIHsgJF8gPT4gMSB9IEBRdWV1ZXNTZWxlY3RlZDsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICAjIGJhY2tlbmQgY2hlY2sgdG8gcHJldmVudCBzYXZpbmcgd2l0aG91dCBwZXJtaXNzaW9uLgogICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgbXkgJVJ3UXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxRdWV1ZXMoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIFFVRVVFSUQ6CiAgICAgICAgICAgIGZvciBteSAkUXVldWVJRCAoIGtleXMgJVF1ZXVlc1NlbGVjdGVkICkgewogICAgICAgICAgICAgICAgbmV4dCBRVUVVRUlEIGlmICEkUXVldWVJRDsgICMgQ2FuIGNvbnRhaW4gZW1wdHkgc3RyaW5nLgogICAgICAgICAgICAgICAgaWYgKCAhJFJ3UXVldWVzeyRRdWV1ZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAjIGNoZWNrIGFsbCB1c2VkIHF1ZXVlcwogICAgICAgIGZvciBteSAkUXVldWVJRCAoQFF1ZXVlc0FsbCkgewogICAgICAgICAgICBteSAkQWN0aXZlID0gJFF1ZXVlc1NlbGVjdGVkeyRRdWV1ZUlEfSA/IDEgOiAwOwoKICAgICAgICAgICAgIyBzZXQgY3VzdG9tZXIgdXNlciBzZXJ2aWNlIG1lbWJlcgogICAgICAgICAgICAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckFkZCgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgICA9PiAkQWN0aXZlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgaWYgdGhlIHVzZXIgd291bGQgbGlrZSB0byBjb250aW51ZSBlZGl0aW5nIHRoZSBxdWV1ZSAtIHRlbXBsYXRlcyByZWxhdGlvbiBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byByZWxhdGlvbnMgb3ZlcnZpZXcKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1UZW1wbGF0ZTtJRD0kVGVtcGxhdGVJRCIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPl9PdmVydmlldygpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX0NoYW5nZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVEYXRhICAgPSAleyAkUGFyYW17RGF0YX0gfTsKICAgIG15ICRUeXBlICAgPSAkUGFyYW17VHlwZX0gfHwgJ1RlbXBsYXRlJzsKICAgIG15ICROZVR5cGUgPSAkVHlwZSBlcSAnUXVldWUnID8gJ1RlbXBsYXRlJyA6ICdRdWV1ZSc7CgogICAgbXkgJVZpc2libGVUeXBlID0gKAogICAgICAgIFRlbXBsYXRlID0+ICdUZW1wbGF0ZScsCiAgICAgICAgUXVldWUgICAgPT4gJ1F1ZXVlJywKICAgICk7CgogICAgbXkgJE15VHlwZSAgICAgICA9ICRWaXNpYmxlVHlwZXskVHlwZX07CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRCcmVhZGNydW1iVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NoYW5nZSBRdWV1ZSBSZWxhdGlvbnMgZm9yIFRlbXBsYXRlJyk7CgogICAgaWYgKCAkVmlzaWJsZVR5cGV7JFR5cGV9IGVxICdRdWV1ZScgKSB7CiAgICAgICAgJEJyZWFkY3J1bWJUaXRsZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2hhbmdlIFRlbXBsYXRlIFJlbGF0aW9ucyBmb3IgUXVldWUnKTsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIEJyZWFkY3J1bWJUaXRsZSA9PiAkQnJlYWRjcnVtYlRpdGxlLAogICAgICAgIH0sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyJyApOwoKICAgICNmaXhlZCBsaW5rCiAgICBteSAkUXVldWVUYWc7CgogICAgJFF1ZXVlVGFnID0gJFR5cGUgZXEgJ1F1ZXVlJyA/ICdRdWV1ZScgOiAnJzsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdDaGFuZ2UnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbkhvbWUgICAgICA9PiAnQWRtaW4nIC4gJFR5cGUsCiAgICAgICAgICAgIE5lVHlwZSAgICAgICAgICA9PiAkTmVUeXBlLAogICAgICAgICAgICBWaXNpYmxlVHlwZSAgICAgPT4gJFZpc2libGVUeXBleyRUeXBlfSwKICAgICAgICAgICAgVmlzaWJsZU5lVHlwZSAgID0+ICRWaXNpYmxlVHlwZXskTmVUeXBlfSwKICAgICAgICAgICAgUXVldWUgICAgICAgICAgID0+ICRRdWV1ZVRhZywKICAgICAgICAgICAgQnJlYWRjcnVtYlRpdGxlID0+ICRCcmVhZGNydW1iVGl0bGUsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayBpZiB0aGVyZSBhcmUgcXVldWUvdGVtcGxhdGUKICAgIGlmICggISVEYXRhICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZ0xpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbFNwYW4gPT4gMiwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NoYW5nZUhlYWRlcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgTmVUeXBlICAgICAgICA9PiAkTmVUeXBlLAogICAgICAgICAgICBWaXNpYmxlVHlwZSAgID0+ICRWaXNpYmxlVHlwZXskVHlwZX0sCiAgICAgICAgICAgIFZpc2libGVOZVR5cGUgPT4gJFZpc2libGVUeXBleyROZVR5cGV9LAogICAgICAgIH0sCiAgICApOwoKICAgIGZvciBteSAkSUQgKCBzb3J0IHsgdWMoICREYXRheyRhfSApIGNtcCB1YyggJERhdGF7JGJ9ICkgfSBrZXlzICVEYXRhICkgewoKICAgICAgICAjIHNldCBvdXRwdXQgY2xhc3MKICAgICAgICBteSAkU2VsZWN0ZWQgPSAkUGFyYW17U2VsZWN0ZWR9LT57JElEfSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CgogICAgICAgICRRdWV1ZVRhZyA9ICRUeXBlIG5lICdRdWV1ZScgPyAnUXVldWUnIDogJyc7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDaGFuZ2VSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJFBhcmFte0RhdGF9LT57JElEfSwKICAgICAgICAgICAgICAgIE5lVHlwZSAgICAgICAgPT4gJE5lVHlwZSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICBJRCAgICAgICAgICAgID0+ICRJRCwKICAgICAgICAgICAgICAgIFNlbGVjdGVkICAgICAgPT4gJFNlbGVjdGVkLAogICAgICAgICAgICAgICAgVmlzaWJsZVR5cGUgICA9PiAkVmlzaWJsZVR5cGV7JFR5cGV9LAogICAgICAgICAgICAgICAgVmlzaWJsZU5lVHlwZSA9PiAkVmlzaWJsZVR5cGV7JE5lVHlwZX0sCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZVRhZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblF1ZXVlVGVtcGxhdGVzJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICBWaXNpYmxlVHlwZSAgPT4gJE15VHlwZSwKICAgICk7Cn0KCnN1YiBfT3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICBteSAkTGlnaHRBZG1pbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaWdodEFkbWluJyk7CiAgICBteSAkUXVldWVPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwojIEVPIExpZ2h0QWRtaW4KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CgogICAgIyBubyBhY3Rpb25zIGluIGFjdGlvbiBsaXN0CiAgICAjICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKE5hbWU9PidBY3Rpb25MaXN0Jyk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyVGVtcGxhdGUnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyUXVldWUnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnICk7CgogICAgbXkgJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScpOwoKICAgICMgZ2V0IHN0ZCB0ZW1wbGF0ZSBsaXN0CiAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZURhdGEgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZUxpc3QoCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBpZiB0aGVyZSBhcmUgcmVzdWx0cyB0byBzaG93CiAgICBpZiAoJVN0YW5kYXJkVGVtcGxhdGVEYXRhKSB7CiAgICAgICAgZm9yIG15ICRTdGFuZGFyZFRlbXBsYXRlSUQgKCBzb3J0IGtleXMgJVN0YW5kYXJkVGVtcGxhdGVEYXRhICkgewogICAgICAgICAgICBteSAlRGF0YSA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlR2V0KAogICAgICAgICAgICAgICAgSUQgPT4gJFN0YW5kYXJkVGVtcGxhdGVJRCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRTdGFuZGFyZFRlbXBsYXRlSUR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRGF0YXtUZW1wbGF0ZVR5cGV9ICkKICAgICAgICAgICAgICAgIC4gJyAtICcKICAgICAgICAgICAgICAgIC4gJERhdGF7TmFtZX07CiAgICAgICAgfQogICAgICAgIFNUQU5EQVJEVEVNUExBVEVJRDoKICAgICAgICBmb3IgbXkgJFN0YW5kYXJkVGVtcGxhdGVJRCAoCiAgICAgICAgICAgIHNvcnQgeyB1YyggJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRhfSApIGNtcCB1YyggJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRifSApIH0KICAgICAgICAgICAga2V5cyAlU3RhbmRhcmRUZW1wbGF0ZURhdGEKICAgICAgICAgICAgKQogICAgICAgIHsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFN0YW5kYXJkVGVtcGxhdGVJRCApOwogICAgICAgICAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbIGtleXMgJVF1ZXVlcyBdLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gbmUgJ3J3JyApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IFNUQU5EQVJEVEVNUExBVEVJRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICAgICAgICAgICMgc2V0IG91dHB1dCBjbGFzcwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0xpc3QxbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRTdGFuZGFyZFRlbXBsYXRlSUR9LAogICAgICAgICAgICAgICAgICAgIFN1YmFjdGlvbiA9PiAnVGVtcGxhdGUnLAogICAgICAgICAgICAgICAgICAgIElEICAgICAgICA9PiAkU3RhbmRhcmRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb1RlbXBsYXRlc0ZvdW5kTXNnJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHF1ZXVlIGRhdGEKICAgIG15ICVRdWV1ZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMaXN0KCBWYWxpZCA9PiAxICk7CgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgIyBGaWx0ZXIgb3V0IHF1ZXVlcyB3aXRob3V0IHBlcm1pc3Npb24uCiAgICAgICAgbXkgJVJ3UXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxRdWV1ZXMoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkUXVldWVJRCAoIGtleXMgJVF1ZXVlRGF0YSApIHsKICAgICAgICAgICAgZGVsZXRlICRRdWV1ZURhdGF7JFF1ZXVlSUR9IGlmICEkUndRdWV1ZXN7JFF1ZXVlSUR9OwogICAgICAgIH0KICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgIyBpZiB0aGVyZSBhcmUgcmVzdWx0cyB0byBzaG93CiAgICBpZiAoJVF1ZXVlRGF0YSkgewogICAgICAgIGZvciBteSAkUXVldWVJRCAoIHNvcnQgeyB1YyggJFF1ZXVlRGF0YXskYX0gKSBjbXAgdWMoICRRdWV1ZURhdGF7JGJ9ICkgfSBrZXlzICVRdWV1ZURhdGEgKSB7CgogICAgICAgICAgICAjIHNldCBvdXRwdXQgY2xhc3MKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdMaXN0bjEnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRRdWV1ZURhdGF7JFF1ZXVlSUR9LAogICAgICAgICAgICAgICAgICAgIFN1YmFjdGlvbiA9PiAnUXVldWUnLAogICAgICAgICAgICAgICAgICAgIElEICAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9RdWV1ZXNGb3VuZE1zZycsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblF1ZXVlVGVtcGxhdGVzJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Modules/AdminTemplate.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQWRtaW5UZW1wbGF0ZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5UZW1wbGF0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICBpZiAoICEkUGFyYW17QWNjZXNzUnd9ICYmICRQYXJhbXtBY2Nlc3NSb30gKSB7CiAgICAgICAgJFNlbGYtPntMaWdodEFkbWlufSA9IDE7CiAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyk7CiAgICBteSAkU3RkQXR0YWNobWVudE9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGRBdHRhY2htZW50Jyk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIG15ICRMaWdodEFkbWluT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpZ2h0QWRtaW4nKTsKICAgIG15ICRRdWV1ZU9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiMgRU8gTGlnaHRBZG1pbgoKICAgIG15ICROb3RpZmljYXRpb24gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTm90aWZpY2F0aW9uJyApIHx8ICcnOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICBteSAkSUQgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICBteSAlRGF0YSA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlR2V0KAogICAgICAgICAgICBJRCA9PiAkSUQsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFNlbGVjdGVkQXR0YWNobWVudDsKICAgICAgICBteSAlU2VsZWN0ZWRBdHRhY2htZW50RGF0YSA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkSUQsCiAgICAgICAgKTsKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlU2VsZWN0ZWRBdHRhY2htZW50RGF0YSApIHsKICAgICAgICAgICAgcHVzaCBAU2VsZWN0ZWRBdHRhY2htZW50LCAkS2V5OwogICAgICAgIH0KCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCggU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRJRCApOwogICAgICAgICAgICAkRGF0YXtQZXJtaXNzaW9ufSA9ICRMaWdodEFkbWluT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgUXVldWVJRHMgPT4gWyBrZXlzICVRdWV1ZXMgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIE5vIHBlcm1pc3Npb24gZm9yIHRoZSB0ZW1wbGF0ZS4KICAgICAgICAgICAgaWYgKCAhJERhdGF7UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICAgICAlRGF0YSA9ICgpOwogICAgICAgICAgICB9IGVsc2lmICggJERhdGF7UGVybWlzc2lvbn0gZXEgJ3JvJyAgKSB7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnTm90aWNlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ05vIHBlcm1pc3Npb24gdG8gZWRpdCB0aGlzIHRlbXBsYXRlLicgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggSW5mbyA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlIHVwZGF0ZWQhJykgKQogICAgICAgICAgICBpZiAoICROb3RpZmljYXRpb24gJiYgJE5vdGlmaWNhdGlvbiBlcSAnVXBkYXRlJyApOwoKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgIFNlbGVjdGVkQXR0YWNobWVudHMgPT4gXEBTZWxlY3RlZEF0dGFjaG1lbnQsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblRlbXBsYXRlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlIGFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZUFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15IEBOZXdJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSURzJyApOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICBteSBAQ2hlY2tlZElEczsKICAgICAgICAgICAgZm9yIG15ICRJRCAoIEBOZXdJRHMgKSB7CiAgICAgICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRMaWdodEFkbWluT2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZVBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgSUQgICAgID0+ICRJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gZXEgJ3J3JyApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDaGVja2VkSURzLCAkSUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQE5ld0lEcyA9IEBDaGVja2VkSURzOwogICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgIG15ICggJUdldFBhcmFtLCAlRXJyb3JzICk7CiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KElEIE5hbWUgQ29tbWVudCBWYWxpZElEIFRlbXBsYXRlVHlwZSkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgJEdldFBhcmFteydUZW1wbGF0ZSd9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSgKICAgICAgICAgICAgUGFyYW0gPT4gJ1RlbXBsYXRlJywKICAgICAgICAgICAgUmF3ICAgPT4gMQogICAgICAgICkgfHwgJyc7CgogICAgICAgICMgZ2V0IGNvbXBvc2VkIGNvbnRlbnQgdHlwZQogICAgICAgICRHZXRQYXJhbXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBuZWVkZWQgZGF0YQogICAgICAgIGZvciBteSAkTmVlZGVkIChxdyhOYW1lIFZhbGlkSUQgVGVtcGxhdGVUeXBlKSkgewogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGEgc3RhbmRhcmQgdGVtcGxhdGUgZXhpc3Qgd2l0aCB0aGlzIG5hbWUKICAgICAgICBteSAkTmFtZUV4aXN0cyA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5OYW1lRXhpc3RzQ2hlY2soCiAgICAgICAgICAgIE5hbWUgPT4gJEdldFBhcmFte05hbWV9LAogICAgICAgICAgICBJRCAgID0+ICRHZXRQYXJhbXtJRH0KICAgICAgICApOwoKICAgICAgICBpZiAoJE5hbWVFeGlzdHMpIHsKICAgICAgICAgICAgJEVycm9yc3tOYW1lRXhpc3RzfSAgICA9IDE7CiAgICAgICAgICAgICRFcnJvcnN7J05hbWVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkR2V0UGFyYW17SUR9ICk7CiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbIGtleXMgJVF1ZXVlcyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgRGVmYXVsdCAgPT4gJ3J3JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgTm8gcGVybWlzc2lvbiB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlLgogICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICAkRXJyb3Jze05vUGVybWlzc2lvbn0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyB1cGRhdGUgZ3JvdXAKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICVBdHRhY2htZW50c0FsbCA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50TGlzdCgpOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIGhhc2ggd2l0aCBzZWxlY3RlZCBxdWV1ZXMKICAgICAgICAgICAgICAgIG15ICVBdHRhY2htZW50c1NlbGVjdGVkID0gbWFwIHsgJF8gPT4gMSB9IEBOZXdJRHM7CgogICAgICAgICAgICAgICAgIyBjaGVjayBhbGwgdXNlZCBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50SUQgKCBzb3J0IGtleXMgJUF0dGFjaG1lbnRzQWxsICkgewogICAgICAgICAgICAgICAgICAgIG15ICRBY3RpdmUgPSAkQXR0YWNobWVudHNTZWxlY3RlZHskQXR0YWNobWVudElEfSA/IDEgOiAwOwoKICAgICAgICAgICAgICAgICAgICAjIHNldCBhdHRhY2htZW50IHRvIHN0YW5kYXJkIHRlbXBsYXRlIHJlbGF0aW9uCiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudFN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRJRCAgICAgICA9PiAkQXR0YWNobWVudElELAogICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJEdldFBhcmFte0lEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlICAgICAgICAgICAgID0+ICRBY3RpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgdGVtcGxhdGUsIGp1c3QgcmVkaXJlY3QgdG8gdGhlIGVkaXQgc2NyZWVuCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAgICAgICAgICAgICAmJiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKSBlcSAnMScgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO0lEPSRJRDtOb3RpZmljYXRpb249VXBkYXRlIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0dXJuIHRvIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtOb3RpZmljYXRpb249VXBkYXRlIiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgRXJyb3JzICAgICAgICAgICAgICA9PiBcJUVycm9ycywKICAgICAgICAgICAgU2VsZWN0ZWRBdHRhY2htZW50cyA9PiBcQE5ld0lEcywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5UZW1wbGF0ZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZCcgKSB7CiAgICAgICAgbXkgJUdldFBhcmFtOwogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQWRkJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5UZW1wbGF0ZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSBATmV3SURzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJ0lEcycgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICAgICAgbXkgQENoZWNrZWRJRHM7CiAgICAgICAgICAgIGZvciBteSAkSUQgKCBATmV3SURzICkgewogICAgICAgICAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+U3RkQXR0YWNobWVudFN0YW5kYXJkVGVtcGxhdGVQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIElEICAgICA9PiAkSUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIGVxICdydycgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQ2hlY2tlZElEcywgJElEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIEBOZXdJRHMgPSBAQ2hlY2tlZElEczsKICAgICAgICB9CiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICBteSAoICVHZXRQYXJhbSwgJUVycm9ycyApOwoKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoSUQgTmFtZSBDb21tZW50IFZhbGlkSUQgVGVtcGxhdGVUeXBlKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtZXRlcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAkR2V0UGFyYW17J1RlbXBsYXRlJ30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKAogICAgICAgICAgICBQYXJhbSA9PiAnVGVtcGxhdGUnLAogICAgICAgICAgICBSYXcgICA9PiAxCiAgICAgICAgKSB8fCAnJzsKCiAgICAgICAgIyBnZXQgY29tcG9zZWQgY29udGVudCB0eXBlCiAgICAgICAgJEdldFBhcmFte0NvbnRlbnRUeXBlfSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBkYXRhCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KE5hbWUgVmFsaWRJRCBUZW1wbGF0ZVR5cGUpKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnSW52YWxpZCcgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgYSBzdGFuZGFyZCB0ZW1wbGF0ZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUKICAgICAgICBteSAkTmFtZUV4aXN0cyA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5OYW1lRXhpc3RzQ2hlY2soIE5hbWUgPT4gJEdldFBhcmFte05hbWV9ICk7CiAgICAgICAgaWYgKCROYW1lRXhpc3RzKSB7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZUV4aXN0c30gICAgPSAxOwogICAgICAgICAgICAkRXJyb3JzeydOYW1lSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9ycyApIHsKCiAgICAgICAgICAgICMgYWRkIHRlbXBsYXRlCiAgICAgICAgICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlSUQgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZUFkZCgKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkU3RhbmRhcmRUZW1wbGF0ZUlEKSB7CgogICAgICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnRzQWxsID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRMaXN0KCk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgaGFzaCB3aXRoIHNlbGVjdGVkIHF1ZXVlcwogICAgICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnRzU2VsZWN0ZWQgPSBtYXAgeyAkXyA9PiAxIH0gQE5ld0lEczsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGFsbCB1c2VkIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnRJRCAoIHNvcnQga2V5cyAlQXR0YWNobWVudHNBbGwgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFjdGl2ZSA9ICRBdHRhY2htZW50c1NlbGVjdGVkeyRBdHRhY2htZW50SUR9ID8gMSA6IDA7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IGF0dGFjaG1lbnQgdG8gc3RhbmRhcmQgdGVtcGxhdGUgcmVsYXRpb24KICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZU1lbWJlckFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudElEICAgICAgID0+ICRBdHRhY2htZW50SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkU3RhbmRhcmRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gJEFjdGl2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgICAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICAgICAgSW5mbyA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlIGFkZGVkIScpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5UZW1wbGF0ZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwogICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICA9PiAnQWRkJywKICAgICAgICAgICAgRXJyb3JzICAgICAgICAgICAgICA9PiBcJUVycm9ycywKICAgICAgICAgICAgU2VsZWN0ZWRBdHRhY2htZW50cyA9PiBcQE5ld0lEcywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5UZW1wbGF0ZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlbGV0ZSBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGUnICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJElEICk7CiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbIGtleXMgJVF1ZXVlcyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgRGVmYXVsdCAgPT4gJ3J3JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgTm8gcGVybWlzc2lvbiB0byBkZWxldGUgdGhlIHRlbXBsYXRlLgogICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgIG15ICREZWxldGUgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZURlbGV0ZSgKICAgICAgICAgICAgSUQgPT4gJElELAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJERlbGV0ZSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICREZWxldGUsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+X092ZXJ2aWV3KCk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgdXBkYXRlZCEnKSApCiAgICAgICAgICAgIGlmICggJE5vdGlmaWNhdGlvbiAmJiAkTm90aWZpY2F0aW9uIGVxICdVcGRhdGUnICk7CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluVGVtcGxhdGUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkUGFyYW17VmFsaWRPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRQYXJhbXtFcnJvcnN9LT57J1ZhbGlkSURJbnZhbGlkJ30gfHwgJycgKSwKICAgICk7CgogICAgbXkgJFRlbXBsYXRlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1N0YW5kYXJkVGVtcGxhdGU6OlR5cGVzJyk7CgogICAgJFBhcmFte1RlbXBsYXRlVHlwZVN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRUZW1wbGF0ZVR5cGVMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RlbXBsYXRlVHlwZScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VGVtcGxhdGVUeXBlfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgVmFsaWRhdGVfUmVxdWlyZWQgJyAuICggJFBhcmFte0Vycm9yc30tPnsnVGVtcGxhdGVUeXBlSW52YWxpZCd9IHx8ICcnICksCiAgICApOwoKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgojICAgIG15ICVBdHRhY2htZW50RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGRBdHRhY2htZW50JyktPlN0ZEF0dGFjaG1lbnRMaXN0KCBWYWxpZCA9PiAxICk7CiAgICBteSAkTGlnaHRBZG1pbk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaWdodEFkbWluJyk7CiAgICBteSAkU3RkQXR0YWNobWVudE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGRBdHRhY2htZW50Jyk7CiAgICBteSAlQXR0YWNobWVudERhdGEgICAgICA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50TGlzdCggVmFsaWQgPT4gMSApOwoKICAgIGlmICggJFNlbGYtPntMaWdodEFkbWlufSApIHsKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlQXR0YWNobWVudERhdGEgKSB7CiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlUGVybWlzc2lvbigKICAgICAgICAgICAgICAgIElEICAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRBdHRhY2htZW50RGF0YXskS2V5fTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgJFBhcmFte0F0dGFjaG1lbnRPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlQXR0YWNobWVudERhdGEsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdJRHMnLAogICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgICA9PiA2LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U2VsZWN0ZWRBdHRhY2htZW50c30sCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICBteSAkSFRNTFV0aWxzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpOwoKICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgcmVmb3JtYXQgZnJvbSBwbGFpbiB0byBodG1sCiAgICAgICAgaWYgKCAkUGFyYW17Q29udGVudFR5cGV9ICYmICRQYXJhbXtDb250ZW50VHlwZX0gPX4gL3RleHRcL3BsYWluL2kgKSB7CiAgICAgICAgICAgICRQYXJhbXtUZW1wbGF0ZX0gPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0hUTUwoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1RlbXBsYXRlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyByZWZvcm1hdCBmcm9tIGh0bWwgdG8gcGxhaW4KICAgICAgICBpZiAoICRQYXJhbXtDb250ZW50VHlwZX0gJiYgJFBhcmFte0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvaHRtbC9pICkgewogICAgICAgICAgICAkUGFyYW17VGVtcGxhdGV9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17VGVtcGxhdGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte0Vycm9yc30gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIHNob3cgYXBwcm9wcmlhdGUgbWVzc2FnZXMgZm9yIFNlcnZlckVycm9yCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0Vycm9yc30tPntOYW1lRXhpc3RzfSAmJiAkUGFyYW17RXJyb3JzfS0+e05hbWVFeGlzdHN9ID09IDEgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0V4aXN0TmFtZVNlcnZlckVycm9yJyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ05hbWVTZXJ2ZXJFcnJvcicgKTsKICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAjIHNldCB1cCByaWNoIHRleHQgZWRpdG9yCiAgICAgICAgJExheW91dE9iamVjdC0+U2V0UmljaFRleHRQYXJhbWV0ZXJzKAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX092ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgbXkgJExpZ2h0QWRtaW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlnaHRBZG1pbicpOwogICAgbXkgJFF1ZXVlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKIyBFTyBMaWdodEFkbWluCgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0ZpbHRlcicgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdCcsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyk7CiAgICBteSAlTGlzdCAgICAgICAgICAgICAgICAgICA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICk7CgogICAgIyBpZiB0aGVyZSBhcmUgYW55IHJlc3VsdHMsIHRoZXkgYXJlIHNob3duCiAgICBpZiAoJUxpc3QpIHsKCiAgICAgICAgbXkgJUxpc3RHZXQ7CiAgICAgICAgZm9yIG15ICRJRCAoIHNvcnQga2V5cyAlTGlzdCApIHsKICAgICAgICAgICAgJXsgJExpc3RHZXR7JElEfSB9ID0gJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVHZXQoCiAgICAgICAgICAgICAgICBJRCA9PiAkSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMaXN0R2V0eyRJRH0tPntTb3J0TmFtZX0gPSAkTGlzdEdldHskSUR9LT57VGVtcGxhdGVUeXBlfSAuICRMaXN0R2V0eyRJRH0tPntOYW1lfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKCBzb3J0IHsgJExpc3RHZXR7JGF9LT57U29ydE5hbWV9IGNtcCAkTGlzdEdldHskYn0tPntTb3J0TmFtZX0gfSBrZXlzICVMaXN0R2V0ICkKICAgICAgICB7CgogICAgICAgICAgICBteSAlRGF0YSA9ICV7ICRMaXN0R2V0eyRJRH0gfTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICAgICAgIyBjaGVjayBxdWV1ZSBwZXJtaXNzaW9ucyBvZiBsaW5rZWQgdGVtcGxhdGVzLgogICAgICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJERhdGF7SUR9ICk7CiAgICAgICAgICAgICAgICAkRGF0YXtQZXJtaXNzaW9ufSA9ICRMaWdodEFkbWluT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJERhdGF7UGVybWlzc2lvbn07CiAgICAgICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgICAgICBteSBAU2VsZWN0ZWRBdHRhY2htZW50OwogICAgICAgICAgICBteSAlU2VsZWN0ZWRBdHRhY2htZW50RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGRBdHRhY2htZW50JyktPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVTZWxlY3RlZEF0dGFjaG1lbnREYXRhICkgewogICAgICAgICAgICAgICAgcHVzaCBAU2VsZWN0ZWRBdHRhY2htZW50LCAkS2V5OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJERhdGF7VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50cyA9PiBzY2FsYXIgQFNlbGVjdGVkQXR0YWNobWVudCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Modules/AdminTemplateAttachment.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQWRtaW5UZW1wbGF0ZUF0dGFjaG1lbnQucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluVGVtcGxhdGVBdHRhY2htZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgIGlmICggISRQYXJhbXtBY2Nlc3NSd30gJiYgJFBhcmFte0FjY2Vzc1JvfSApIHsKICAgICAgICAkU2VsZi0+e0xpZ2h0QWRtaW59ID0gMTsKICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YW5kYXJkVGVtcGxhdGUnKTsKICAgIG15ICRTdGRBdHRhY2htZW50T2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0ZEF0dGFjaG1lbnQnKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgbXkgJExpZ2h0QWRtaW5PYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlnaHRBZG1pbicpOwogICAgbXkgJFF1ZXVlT2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKIyBFTyBMaWdodEFkbWluCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0ZW1wbGF0ZSA8LT4gYXR0YWNobWVudCAxOm4KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUZW1wbGF0ZScgKSB7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgICAgICBteSAkSUQgICAgICAgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CiAgICAgICAgbXkgJVN0YW5kYXJkVGVtcGxhdGVEYXRhID0gJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVHZXQoCiAgICAgICAgICAgIElEID0+ICRJRCwKICAgICAgICApOwoKICAgICAgICAjIGdldCBhdHRhY2htZW50IGRhdGEKICAgICAgICBteSAlU3RkQXR0YWNobWVudERhdGEgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudExpc3QoIFZhbGlkID0+IDEgKTsKCiAgICAgICAgbXkgJU1lbWJlciA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkSUQsCiAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBpZiAoICRTZWxmLT57TGlnaHRBZG1pbn0gKSB7CiAgICAgICAgICAgICMgRmlsdGVyIG91dCBhdHRhY2htZW50cyB3aXRob3V0IHBlcm1pc3Npb24uCiAgICAgICAgICAgIGlmICggJVN0ZEF0dGFjaG1lbnREYXRhICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRTdGRBdHRhY2htZW50SUQgKCBzb3J0IGtleXMgJVN0ZEF0dGFjaG1lbnREYXRhICkgewogICAgICAgICAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlUGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgSUQgICAgID0+ICRTdGRBdHRhY2htZW50SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkU3RkQXR0YWNobWVudERhdGF7JFN0ZEF0dGFjaG1lbnRJRH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkSUQgKTsKICAgICAgICAgICAgbXkgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgdW5kZWYgJVN0YW5kYXJkVGVtcGxhdGVEYXRhOwogICAgICAgICAgICAgICAgdW5kZWYgJU1lbWJlcjsKICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBMaWdodEFkbWluCgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fQ2hhbmdlKAogICAgICAgICAgICBTZWxlY3RlZCA9PiBcJU1lbWJlciwKICAgICAgICAgICAgRGF0YSAgICAgPT4gXCVTdGRBdHRhY2htZW50RGF0YSwKICAgICAgICAgICAgSUQgICAgICAgPT4gJFN0YW5kYXJkVGVtcGxhdGVEYXRhe0lEfSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFN0YW5kYXJkVGVtcGxhdGVEYXRhe1RlbXBsYXRlVHlwZX0gLiAnIC0gJyAuICRTdGFuZGFyZFRlbXBsYXRlRGF0YXtOYW1lfSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ1RlbXBsYXRlJywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhdHRhY2htZW50IDwtPiB0ZW1wbGF0ZSBuOjEKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBdHRhY2htZW50JyApIHsKCiAgICAgICAgIyBnZXQgZ3JvdXAgZGF0YQogICAgICAgIG15ICRJRCAgICAgICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKICAgICAgICBteSAlU3RkQXR0YWNobWVudERhdGEgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudEdldCggSUQgPT4gJElEICk7CgogICAgICAgICMgZ2V0IHVzZXIgbGlzdAogICAgICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlRGF0YSA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlTGlzdCgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoJVN0YW5kYXJkVGVtcGxhdGVEYXRhKSB7CiAgICAgICAgICAgIGZvciBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEICggc29ydCBrZXlzICVTdGFuZGFyZFRlbXBsYXRlRGF0YSApIHsKICAgICAgICAgICAgICAgIG15ICVEYXRhID0gJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVHZXQoCiAgICAgICAgICAgICAgICAgICAgSUQgPT4gJFN0YW5kYXJkVGVtcGxhdGVJRAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTdGFuZGFyZFRlbXBsYXRlRGF0YXskU3RhbmRhcmRUZW1wbGF0ZUlEfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJERhdGF7VGVtcGxhdGVUeXBlfSApCiAgICAgICAgICAgICAgICAgICAgLiAnIC0gJwogICAgICAgICAgICAgICAgICAgIC4gJERhdGF7TmFtZX07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVNZW1iZXIgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudFN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgICAgICBBdHRhY2htZW50SUQgPT4gJElELAogICAgICAgICk7CgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICkgewogICAgICAgICAgICAjIEZpbHRlciBvdXQgdGVtcGxhdGVzIHdpdGhvdXQgcGVybWlzc2lvbi4KICAgICAgICAgICAgZm9yIG15ICRTdGFuZGFyZFRlbXBsYXRlSUQgKCBrZXlzICVTdGFuZGFyZFRlbXBsYXRlRGF0YSApIHsKICAgICAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkU3RhbmRhcmRUZW1wbGF0ZUlEICk7CiAgICAgICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRMaWdodEFkbWluT2JqZWN0LT5RdWV1ZUxpc3RQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIERlZmF1bHQgID0+ICdydycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkU3RhbmRhcmRUZW1wbGF0ZURhdGF7JFN0YW5kYXJkVGVtcGxhdGVJRH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQ2hlY2sgdGhlIHBlcm1pc3Npb24uCiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlUGVybWlzc2lvbigKICAgICAgICAgICAgICAgIElEICAgICA9PiAkSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIG5lICdydycgKSB7CiAgICAgICAgICAgICAgICB1bmRlZiAlU3RkQXR0YWNobWVudERhdGE7CiAgICAgICAgICAgICAgICB1bmRlZiAlTWVtYmVyOwogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9DaGFuZ2UoCiAgICAgICAgICAgIFNlbGVjdGVkID0+IFwlTWVtYmVyLAogICAgICAgICAgICBEYXRhICAgICA9PiBcJVN0YW5kYXJkVGVtcGxhdGVEYXRhLAogICAgICAgICAgICBJRCAgICAgICA9PiAkU3RkQXR0YWNobWVudERhdGF7SUR9LAogICAgICAgICAgICBOYW1lICAgICA9PiAkU3RkQXR0YWNobWVudERhdGF7TmFtZX0sCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBdHRhY2htZW50JywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgdXNlciB0byBncm91cHMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VBdHRhY2htZW50JyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBnZXQgbmV3IHRlbXBsYXRlcwogICAgICAgIG15IEBUZW1wbGF0ZXNTZWxlY3RlZCA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJdGVtc1NlbGVjdGVkJyApOwogICAgICAgIG15IEBUZW1wbGF0ZXNBbGwgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJdGVtc0FsbCcgKTsKCiAgICAgICAgbXkgJEF0dGFjaG1lbnRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKCiAgICAgICAgIyBjcmVhdGUgaGFzaCB3aXRoIHNlbGVjdGVkIHRlbXBsYXRlcwogICAgICAgIG15ICVUZW1wbGF0ZXNTZWxlY3RlZCA9IG1hcCB7ICRfID0+IDEgfSBAVGVtcGxhdGVzU2VsZWN0ZWQ7CgogICAgICAgICMgY2hlY2sgYWxsIHVzZWQgdGVtcGxhdGVzCiAgICAgICAgZm9yIG15ICRUZW1wbGF0ZUlEIChAVGVtcGxhdGVzQWxsKSB7CiAgICAgICAgICAgIG15ICRBY3RpdmUgPSAkVGVtcGxhdGVzU2VsZWN0ZWR7JFRlbXBsYXRlSUR9ID8gMSA6IDA7CgogICAgICAgICAgICAjIHNldCBhdHRhY2htZW50IHRvIHN0YW5kYXJkIHRlbXBsYXRlIHJlbGF0aW9uCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgQXR0YWNobWVudElEICAgICAgID0+ICRBdHRhY2htZW50SUQsCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gJEFjdGl2ZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgdGVtcGxhdGUtYXR0YWNobWVudCByZWxhdGlvbiBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byByZWxhdGlvbnMgb3ZlcnZpZXcKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1BdHRhY2htZW50O0lEPSRBdHRhY2htZW50SUQ7Tm90aWZpY2F0aW9uPVVwZGF0ZSIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07Tm90aWZpY2F0aW9uPVVwZGF0ZSIgKTsKICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBncm91cHMgdG8gdXNlcgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZVRlbXBsYXRlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBnZXQgbmV3IGF0dGFjaG1lbnRzCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzU2VsZWN0ZWQgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSXRlbXNTZWxlY3RlZCcgKTsKICAgICAgICBteSBAQXR0YWNobWVudHNBbGwgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJdGVtc0FsbCcgKTsKCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgICAgICMgY3JlYXRlIGhhc2ggd2l0aCBzZWxlY3RlZCBxdWV1ZXMKICAgICAgICBteSAlQXR0YWNobWVudHNTZWxlY3RlZCA9IG1hcCB7ICRfID0+IDEgfSBAQXR0YWNobWVudHNTZWxlY3RlZDsKCiAgICAgICAgIyBjaGVjayBhbGwgdXNlZCBhdHRhY2htZW50cwogICAgICAgIGZvciBteSAkQXR0YWNobWVudElEIChAQXR0YWNobWVudHNBbGwpIHsKICAgICAgICAgICAgbXkgJEFjdGl2ZSA9ICRBdHRhY2htZW50c1NlbGVjdGVkeyRBdHRhY2htZW50SUR9ID8gMSA6IDA7CgogICAgICAgICAgICAjIHNldCBhdHRhY2htZW50IHRvIHN0YW5kYXJkIHRlbXBsYXRlIHJlbGF0aW9uCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgQXR0YWNobWVudElEICAgICAgID0+ICRBdHRhY2htZW50SUQsCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gJEFjdGl2ZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgdGVtcGxhdGUtYXR0YWNobWVudCByZWxhdGlvbiBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byByZWxhdGlvbnMgb3ZlcnZpZXcKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1UZW1wbGF0ZTtJRD0kVGVtcGxhdGVJRDtOb3RpZmljYXRpb249VXBkYXRlIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtOb3RpZmljYXRpb249VXBkYXRlIiApOwogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPl9PdmVydmlldygpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX0NoYW5nZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVEYXRhICAgPSAleyAkUGFyYW17RGF0YX0gfTsKICAgIG15ICRUeXBlICAgPSAkUGFyYW17VHlwZX0gfHwgJ1RlbXBsYXRlJzsKICAgIG15ICROZVR5cGUgPSAkVHlwZSBlcSAnQXR0YWNobWVudCcgPyAnVGVtcGxhdGUnIDogJ0F0dGFjaG1lbnQnOwoKICAgIG15ICVWaXNpYmxlVHlwZSA9ICgKICAgICAgICBUZW1wbGF0ZSAgID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUnKSwKICAgICAgICBBdHRhY2htZW50ID0+IFRyYW5zbGF0YWJsZSgnQXR0YWNobWVudCcpLAogICAgKTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRCcmVhZGNydW1iVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NoYW5nZSBBdHRhY2htZW50IFJlbGF0aW9ucyBmb3IgVGVtcGxhdGUnKTsKCiAgICBpZiAoICRWaXNpYmxlVHlwZXskVHlwZX0gZXEgJ0F0dGFjaG1lbnQnICkgewogICAgICAgICRCcmVhZGNydW1iVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NoYW5nZSBUZW1wbGF0ZSBSZWxhdGlvbnMgZm9yIEF0dGFjaG1lbnQnKTsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIEJyZWFkY3J1bWJUaXRsZSA9PiAkQnJlYWRjcnVtYlRpdGxlLAogICAgICAgIH0sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyJyApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NoYW5nZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uSG9tZSAgICAgID0+ICdBZG1pbicgLiAkVHlwZSwKICAgICAgICAgICAgTmVUeXBlICAgICAgICAgID0+ICROZVR5cGUsCiAgICAgICAgICAgIFZpc2libGVUeXBlICAgICA9PiAkVmlzaWJsZVR5cGV7JFR5cGV9LAogICAgICAgICAgICBWaXNpYmxlTmVUeXBlICAgPT4gJFZpc2libGVUeXBleyROZVR5cGV9LAogICAgICAgICAgICBCcmVhZGNydW1iVGl0bGUgPT4gJEJyZWFkY3J1bWJUaXRsZSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHRoZXJlIGFyZSBhdHRhY2htZW50cy90ZW1wbGF0ZXMKICAgIGlmICggISVEYXRhICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZ0xpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbFNwYW4gPT4gMiwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NoYW5nZUhlYWRlcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICAgICB9LAogICAgKTsKCiAgICBmb3IgbXkgJElEICggc29ydCB7IHVjKCAkRGF0YXskYX0gKSBjbXAgdWMoICREYXRheyRifSApIH0ga2V5cyAlRGF0YSApIHsKCiAgICAgICAgbXkgJFNlbGVjdGVkID0gJFBhcmFte1NlbGVjdGVkfS0+eyRJRH0gPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlUm93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBOYW1lICAgICA9PiAkUGFyYW17RGF0YX0tPnskSUR9LAogICAgICAgICAgICAgICAgTmVUeXBlICAgPT4gJE5lVHlwZSwKICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICRUeXBlLAogICAgICAgICAgICAgICAgSUQgICAgICAgPT4gJElELAogICAgICAgICAgICAgICAgU2VsZWN0ZWQgPT4gJFNlbGVjdGVkLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluVGVtcGxhdGVBdHRhY2htZW50JywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7Cn0KCnN1YiBfT3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICBteSAkTGlnaHRBZG1pbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaWdodEFkbWluJyk7CiAgICBteSAkUXVldWVPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwojIEVPIExpZ2h0QWRtaW4KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7fSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0ZpbHRlcnMnICk7CgogICAgIyBubyBhY3Rpb25zIGluIGFjdGlvbiBsaXN0CiAgICAjICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0JyApOwoKICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YW5kYXJkVGVtcGxhdGUnKTsKCiAgICAjIGdldCBTdGFuZGFyZFRlbXBsYXRlIGRhdGEKICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlRGF0YSA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlTGlzdCgKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICYmICVTdGFuZGFyZFRlbXBsYXRlRGF0YSApIHsKICAgICAgICBmb3IgbXkgJFN0YW5kYXJkVGVtcGxhdGVJRCAoIHNvcnQga2V5cyAlU3RhbmRhcmRUZW1wbGF0ZURhdGEgKSB7CiAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkU3RhbmRhcmRUZW1wbGF0ZUlEICk7CiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBRdWV1ZUlEcyA9PiBbIGtleXMgJVF1ZXVlcyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgRGVmYXVsdCAgPT4gJ3J3JywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRTdGFuZGFyZFRlbXBsYXRlRGF0YXskU3RhbmRhcmRUZW1wbGF0ZUlEfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICAjIGlmIHRoZXJlIGFyZSBhbnkgdGVtcGxhdGVzLCB0aGV5IGFyZSBzaG93bgogICAgaWYgKCVTdGFuZGFyZFRlbXBsYXRlRGF0YSkgewogICAgICAgIGZvciBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEICggc29ydCBrZXlzICVTdGFuZGFyZFRlbXBsYXRlRGF0YSApIHsKICAgICAgICAgICAgbXkgJURhdGEgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZUdldCgKICAgICAgICAgICAgICAgIElEID0+ICRTdGFuZGFyZFRlbXBsYXRlSUQKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRTdGFuZGFyZFRlbXBsYXRlSUR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRGF0YXtUZW1wbGF0ZVR5cGV9ICkKICAgICAgICAgICAgICAgIC4gJyAtICcKICAgICAgICAgICAgICAgIC4gJERhdGF7TmFtZX07CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFN0YW5kYXJkVGVtcGxhdGVJRCAoCiAgICAgICAgICAgIHNvcnQgeyB1YyggJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRhfSApIGNtcCB1YyggJFN0YW5kYXJkVGVtcGxhdGVEYXRheyRifSApIH0KICAgICAgICAgICAga2V5cyAlU3RhbmRhcmRUZW1wbGF0ZURhdGEKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdMaXN0MW4nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTdGFuZGFyZFRlbXBsYXRlRGF0YXskU3RhbmRhcmRUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBTdWJhY3Rpb24gPT4gJ1RlbXBsYXRlJywKICAgICAgICAgICAgICAgICAgICBJRCAgICAgICAgPT4gJFN0YW5kYXJkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vVGVtcGxhdGVzRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgcXVldWUgZGF0YQogICAgbXkgJVN0ZEF0dGFjaG1lbnREYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0ZEF0dGFjaG1lbnQnKS0+U3RkQXR0YWNobWVudExpc3QoIFZhbGlkID0+IDEgKTsKIyBSb3RoZXIgT1NTIC8gTGlnaHRBZG1pbgogICAgaWYgKCAkU2VsZi0+e0xpZ2h0QWRtaW59ICYmICVTdGRBdHRhY2htZW50RGF0YSApIHsKICAgICAgICBmb3IgbXkgJFN0ZEF0dGFjaG1lbnRJRCAoIHNvcnQga2V5cyAlU3RkQXR0YWNobWVudERhdGEgKSB7CiAgICAgICAgICAgIG15ICRQZXJtaXNzaW9uID0gJExpZ2h0QWRtaW5PYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlUGVybWlzc2lvbigKICAgICAgICAgICAgICAgIElEICAgICA9PiAkU3RkQXR0YWNobWVudElELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBuZSAncncnICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRTdGRBdHRhY2htZW50RGF0YXskU3RkQXR0YWNobWVudElEfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQojIEVPIExpZ2h0QWRtaW4KCiAgICAjIGlmIHRoZXJlIGFyZSBhbnkgYXR0YWNobWVudHMsIHRoZXkgYXJlIHNob3duCiAgICBpZiAoJVN0ZEF0dGFjaG1lbnREYXRhKSB7CiAgICAgICAgZm9yIG15ICRTdGRBdHRhY2htZW50SUQgKAogICAgICAgICAgICBzb3J0IHsgdWMoICRTdGRBdHRhY2htZW50RGF0YXskYX0gKSBjbXAgdWMoICRTdGRBdHRhY2htZW50RGF0YXskYn0gKSB9CiAgICAgICAgICAgIGtleXMgJVN0ZEF0dGFjaG1lbnREYXRhCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTGlzdG4xJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU3RkQXR0YWNobWVudERhdGF7JFN0ZEF0dGFjaG1lbnRJRH0sCiAgICAgICAgICAgICAgICAgICAgU3ViYWN0aW9uID0+ICdBdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICBJRCAgICAgICAgPT4gJFN0ZEF0dGFjaG1lbnRJRCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBtZXNzYWdlIGlzIGRpc3BsYXllZAogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vQXR0YWNobWVudHNGb3VuZE1zZycsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblRlbXBsYXRlQXR0YWNobWVudCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminAttachment.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkF0dGFjaG1lbnQudHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50IE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnQXR0YWNobWVudCBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBTV0lUQ0ggRGF0YS5BY3Rpb24gJV0KICAgICAgICBbJSBDQVNFICdBZGQnICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IFRyYW5zbGF0ZSgiQWRkIEF0dGFjaG1lbnQiKSx9KSAlXQogICAgICAgIFslIENBU0UgJ0NoYW5nZScgJV0KICAgICAgICAgICAgWyUgVVNFIEVkaXRUaXRsZSA9IFN0cmluZyhUcmFuc2xhdGUoIkVkaXQgQXR0YWNobWVudCIpKSAlXQogICAgICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBFZGl0VGl0bGUuYXBwZW5kKCAnOiAnLCBEYXRhLk5hbWUgKSB9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25MaXN0IikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1sZWZ0Ij48L2k+WyUgVHJhbnNsYXRlKCJHbyB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUFkZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUiPjwvaT5bJSBUcmFuc2xhdGUoIkFkZCBBdHRhY2htZW50IikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRmlsdGVyIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlckF0dGFjaG1lbnRzIj5bJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgQXR0YWNobWVudHMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyQXR0YWNobWVudHMiIGNsYXNzPSJGaWx0ZXJCb3giIHBsYWNlaG9sZGVyPSJbJSBUcmFuc2xhdGUoIkp1c3Qgc3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLiIpIHwgaHRtbCAlXSIgbmFtZT0iRmlsdGVyQXR0YWNobWVudHMiIHZhbHVlPSIiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgYXR0YWNobWVudHMiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZpbHRlciIpICVdCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IkF0dGFjaG1lbnRzIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiRmlsZW5hbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgWyUgSUYgRGF0YS5WYWxpZElEICE9IDEgJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0gaWQ9IkF0dGFjaG1lbnRJRF9bJSBEYXRhLklEICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUNoYW5nZTtJRD1bJSBEYXRhLklEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRG93bmxvYWQgZmlsZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1Eb3dubG9hZDtJRD1bJSBEYXRhLklEIHwgdXJpICVdO1slIEVudigiQ2hhbGxlbmdlVG9rZW5QYXJhbSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmlsZW5hbWUgfCB0cnVuY2F0ZSgzMCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlBlcm1pc3Npb24gIT0gJ3JvJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJUcmFzaENhbiBBdHRhY2htZW50RGVsZXRlIiBocmVmPSIjIiBkYXRhLWlkPSJbJSBEYXRhLklEICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUgdGhpcyBhdHRhY2htZW50IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJEZWxldGUgdGhpcyBhdHRhY2htZW50IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10cmFzaC1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiMgRU8gTGlnaHRBZG1pbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNyI+WyUgVHJhbnNsYXRlKCJObyBtYXRjaGVzIGZvdW5kLiIpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIaWRkZW4iIGlkPSJEZWxldGVBdHRhY2htZW50RGlhbG9nQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgaWQgPSJEZWxldGVBdHRhY2htZW50RGlhbG9nIiBjbGFzcz0iSW5uZXJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iQ2VudGVyIFNwYWNpbmciPlslIFRyYW5zbGF0ZSgiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGF0dGFjaG1lbnQ/IikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSZXN1bHQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1VwZGF0ZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLkFjdGlvbiA9PSAnQWRkJyAlXQogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBBdHRhY2htZW50IikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJFZGl0IEF0dGFjaG1lbnQiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgWyUgRU5EICVdCgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCB1cmkgJV1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLkFjdGlvbiA9PSAnQWRkJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iRmlsZVVwbG9hZCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJBdHRhY2htZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkZpbGVVcGxvYWQiPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkZpbGVVcGxvYWQiIGlkPSJGaWxlVXBsb2FkIiB0eXBlPSJmaWxlIiBjbGFzcz0iVzUwcGMgWyUgRGF0YS5WYWxpZGF0ZUNvbnRlbnQgfCBodG1sICVdIFslIERhdGEuRmlsZVVwbG9hZEludmFsaWQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGaWxlVXBsb2FkRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGaWxlVXBsb2FkU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJWYWxpZElEIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlZhbGlkSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlZhbGlkSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlBlcm1pc3Npb24gIT0gJ3JvJyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIFNhdmVCdXR0b25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdEFuZENvbnRpbnVlIiB0eXBlPSJidXR0b24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUgYW5kIGZpbmlzaCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQojIEVPIExpZ2h0QWRtaW4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3VXBkYXRlIikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminNotificationEvent.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbk5vdGlmaWNhdGlvbkV2ZW50LnR0CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiVGlja2V0IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ1RpY2tldCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCcpLAogICAgICAgICAgICAgICAgTGluayA9PiBFbnYoIkFjdGlvbiIpLAogICAgICAgICAgICB9LAogICAgICAgIF0KICAgICVdCgogICAgWyUgU1dJVENIIERhdGEuQWN0aW9uICVdCiAgICAgICAgWyUgQ0FTRSAnQWRkJyAlXQogICAgICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBUcmFuc2xhdGUoIkFkZCBOb3RpZmljYXRpb24iKSx9KSAlXQogICAgICAgIFslIENBU0UgJ0NoYW5nZScgJV0KICAgICAgICAgICAgWyUgVVNFIEVkaXRUaXRsZSA9IFN0cmluZyhUcmFuc2xhdGUoIkVkaXQgTm90aWZpY2F0aW9uIikpICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuTmFtZSApIH0pICVdCiAgICBbJSBFTkQgJV0KCiAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIE5vdGlmaWNhdGlvbiIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1Ob3RpZmljYXRpb25FeHBvcnQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWRvd25sb2FkIj48L2k+WyUgVHJhbnNsYXRlKCJFeHBvcnQgTm90aWZpY2F0aW9ucyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRmlsdGVyIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlck5vdGlmaWNhdGlvbnMiPlslIFRyYW5zbGF0ZSgiRmlsdGVyIGZvciBOb3RpZmljYXRpb25zIikgfCBodG1sICVdPC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlck5vdGlmaWNhdGlvbnMiIGNsYXNzPSJGaWx0ZXJCb3giIHBsYWNlaG9sZGVyPSJbJSBUcmFuc2xhdGUoIkp1c3Qgc3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLiIpIHwgaHRtbCAlXSIgbmFtZT0iRmlsdGVyTm90aWZpY2F0aW9ucyIgdmFsdWU9IiIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRmlsdGVyIGZvciBub3RpZmljYXRpb25zIikgfCBodG1sICVdIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGaWx0ZXIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uSW1wb3J0IikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQ29uZmlndXJhdGlvbiBJbXBvcnQiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJIZXJlIHlvdSBjYW4gdXBsb2FkIGEgY29uZmlndXJhdGlvbiBmaWxlIHRvIGltcG9ydCBUaWNrZXQgTm90aWZpY2F0aW9ucyB0byB5b3VyIHN5c3RlbS4gVGhlIGZpbGUgbmVlZHMgdG8gYmUgaW4gLnltbCBmb3JtYXQgYXMgZXhwb3J0ZWQgYnkgdGhlIFRpY2tldCBOb3RpZmljYXRpb24gbW9kdWxlLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0IFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ik5vdGlmaWNhdGlvbkltcG9ydCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybUlEIiB2YWx1ZT0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iRmlsZVVwbG9hZCIgaWQ9IkZpbGVVcGxvYWQiIHR5cGU9ImZpbGUiIHNpemU9IjE4IiBjbGFzcz0iRml4ZWQgVzEwMHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuRmlsZVVwbG9hZEludmFsaWQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGaWxlVXBsb2FkRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRmlsZVVwbG9hZFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iU2VwYXJhdGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJPdmVyd3JpdGVFeGlzdGluZ05vdGlmaWNhdGlvbnMiIG5hbWU9Ik92ZXJ3cml0ZUV4aXN0aW5nTm90aWZpY2F0aW9ucyIgdmFsdWU9IjEiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iT3ZlcndyaXRlRXhpc3RpbmdOb3RpZmljYXRpb25zIj5bJSBUcmFuc2xhdGUoIk92ZXJ3cml0ZSBleGlzdGluZyBub3RpZmljYXRpb25zPyIpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlVwbG9hZCBOb3RpZmljYXRpb24gY29uZmlndXJhdGlvbiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXVwbG9hZCI+PC9pPlslIFRyYW5zbGF0ZSgiSW1wb3J0IE5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25JbXBvcnQiKSAlXQogICAgPC9kaXY+CgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9Ik5vdGlmaWNhdGlvbnMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXMjBwYyI+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIFcxMHBjIj5bJSBUcmFuc2xhdGUoIkV4cG9ydCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNlbnRlciBXMTBwYyI+WyUgVHJhbnNsYXRlKCJDb3B5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIFcxMHBjIj5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUNoYW5nZTtJRD1bJSBEYXRhLklEIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjYpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuUGVybWlzc2lvbiAhPSAncm8nICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+PGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPU5vdGlmaWNhdGlvbkV4cG9ydDtJRD1bJSBEYXRhLklEIHwgdXJpICVdO1slIEVudigiQ2hhbGxlbmdlVG9rZW5QYXJhbSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWRvd25sb2FkIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRXhwb3J0IikgfCBodG1sICVdPC9zcGFuPjwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1Ob3RpZmljYXRpb25Db3B5O0lEPVslIERhdGEuSUQgfCB1cmkgJV07WyUgRW52KCJDaGFsbGVuZ2VUb2tlblBhcmFtIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkNvcHkiKSB8IGh0bWwgJV08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IlRyYXNoQ2FuIE5vdGlmaWNhdGlvbkRlbGV0ZSIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPURlbGV0ZTtJRD1bJSBEYXRhLklEIHwgdXJpICVdO1slIEVudigiQ2hhbGxlbmdlVG9rZW5QYXJhbSIpIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIHRoaXMgbm90aWZpY2F0aW9uIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQojIEVPIExpZ2h0QWRtaW4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iOCI+WyUgVHJhbnNsYXRlKCJObyBtYXRjaGVzIGZvdW5kLiIpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3VXBkYXRlIikgJV0KCiAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIiBuYW1lPSJjb21wb3NlIiBpZD0iTm90aWZpY2F0aW9uRXZlbnQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdBZGQnICVdCiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWRkIE5vdGlmaWNhdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBOb3RpZmljYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCB1cmkgJV1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5hbWUiIGNsYXNzPSJNYW5kYXRvcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZVNlcnZlckVycm9yICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmlzaWJsZUZvckFnZW50Ij5bJSBUcmFuc2xhdGUoIlNob3cgaW4gYWdlbnQgcHJlZmVyZW5jZXMiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmlzaWJsZUZvckFnZW50U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmlzaWJsZUZvckFnZW50VG9vbHRpcCI+WyUgVHJhbnNsYXRlKCJBZ2VudCBwcmVmZXJlbmNlcyB0b29sdGlwIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVmlzaWJsZUZvckFnZW50VG9vbHRpcCIgaWQ9IlZpc2libGVGb3JBZ2VudFRvb2x0aXAiIGNsYXNzPSJXNTBwYyIgdmFsdWU9IlslIERhdGEuVmlzaWJsZUZvckFnZW50VG9vbHRpcCB8IGh0bWwgJV0iIFslIERhdGEuVmlzaWJsZUZvckFnZW50VG9vbHRpcFJlYWRvbmx5ICVdLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlRoaXMgbWVzc2FnZSB3aWxsIGJlIHNob3duIG9uIHRoZSBhZ2VudCBwcmVmZXJlbmNlcyBzY3JlZW4gYXMgYSB0b29sdGlwIGZvciB0aGlzIG5vdGlmaWNhdGlvbi4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRvZ2dsZSB0aGlzIHdpZGdldCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRXZlbnRzIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkV2ZW50cyIgY2xhc3M9Ik1hbmRhdG9yeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFdmVudCIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5FdmVudHNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJFdmVudHNFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkV2ZW50c1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiSGVyZSB5b3UgY2FuIGNob29zZSB3aGljaCBldmVudHMgd2lsbCB0cmlnZ2VyIHRoaXMgbm90aWZpY2F0aW9uLiBBbiBhZGRpdGlvbmFsIHRpY2tldCBmaWx0ZXIgY2FuIGJlIGFwcGxpZWQgYmVsb3cgdG8gb25seSBzZW5kIGZvciB0aWNrZXQgd2l0aCBjZXJ0YWluIGNyaXRlcmlhLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIENvbGxhcHNlZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUb2dnbGUgdGhpcyB3aWRnZXQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlRpY2tldCBGaWx0ZXIiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdVcGRhdGVUeXBlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVHlwZUlEIj5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVHlwZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZVR5cGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTdGF0ZUlEIj5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlN0YXRlc1N0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlByaW9yaXR5SUQiPlslIFRyYW5zbGF0ZSgiUHJpb3JpdHkiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUHJpb3JpdGllc1N0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLkxpZ2h0QWRtaW4gJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUXVldWVJRCIgY2xhc3M9Ik1hbmRhdG9yeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlslIFRyYW5zbGF0ZSgiUXVldWUiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUXVldWVzU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUXVldWVJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUXVldWVJRCI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5RdWV1ZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiMgRU8gTGlnaHRBZG1pbgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTG9ja0lEIj5bJSBUcmFuc2xhdGUoIkxvY2siKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTG9ja3NTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1VwZGF0ZVNlcnZpY2UiKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2VydmljZUlEIj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU2VydmljZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTTEFJRCI+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU0xBc1N0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3VXBkYXRlU2VydmljZSIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDdXN0b21lcklEIj5bJSBUcmFuc2xhdGUoIkN1c3RvbWVyIElEIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ3VzdG9tZXJJRCIgaWQ9IkN1c3RvbWVySUQiIGNsYXNzPSJXNzVwYyIgdmFsdWU9IlslIERhdGEuQ3VzdG9tZXJJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkN1c3RvbWVyVXNlcklEIj5bJSBUcmFuc2xhdGUoIkN1c3RvbWVyIFVzZXIgSUQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDdXN0b21lclVzZXJJRCIgaWQ9IkN1c3RvbWVyVXNlcklEIiBjbGFzcz0iVzc1cGMiIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyVXNlcklEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aDQ+WyUgVHJhbnNsYXRlKCJEeW5hbWljIEZpZWxkcyIpIHwgaHRtbCAlXTwvaDQ+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkRWxlbWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkRWxlbWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkIikgJV0KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIENvbGxhcHNlZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUb2dnbGUgdGhpcyB3aWRnZXQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFydGljbGUgRmlsdGVyIikgfCBodG1sICVdIDxzcGFuIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4oWyUgVHJhbnNsYXRlKCJPbmx5IGZvciBBcnRpY2xlQ3JlYXRlIGFuZCBBcnRpY2xlU2VuZCBldmVudCIpIHwgaHRtbCAlXSk8L3NwYW4+PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFydGljbGVTZW5kZXJUeXBlSUQiPlslIFRyYW5zbGF0ZSgiQXJ0aWNsZSBzZW5kZXIgdHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BcnRpY2xlU2VuZGVyVHlwZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBcnRpY2xlU2VuZGVyVHlwZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIklmIEFydGljbGVDcmVhdGUgb3IgQXJ0aWNsZVNlbmQgaXMgdXNlZCBhcyBhIHRyaWdnZXIgZXZlbnQsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYW4gYXJ0aWNsZSBmaWx0ZXIgYXMgd2VsbC4gUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgb2YgdGhlIGFydGljbGUgZmlsdGVyIGZpZWxkcy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFydGljbGVJc1Zpc2libGVGb3JDdXN0b21lciI+WyUgVHJhbnNsYXRlKCJDdXN0b21lciB2aXNpYmlsaXR5IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkFydGljbGVDdXN0b21lclZpc2liaWxpdHlTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJBcnRpY2xlQ29tbXVuaWNhdGlvbkNoYW5uZWxJRCI+WyUgVHJhbnNsYXRlKCJDb21tdW5pY2F0aW9uIGNoYW5uZWwiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQXJ0aWNsZUNvbW11bmljYXRpb25DaGFubmVsU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQXJ0aWNsZUF0dGFjaG1lbnRJbmNsdWRlIj5bJSBUcmFuc2xhdGUoIkluY2x1ZGUgYXR0YWNobWVudHMgdG8gbm90aWZpY2F0aW9uIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkFydGljbGVBdHRhY2htZW50SW5jbHVkZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkJhY2tlbmRBcnRpY2xlRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLktleSAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5LZXkgJV0iIGlkPSJbJSBEYXRhLktleSAlXSIgY2xhc3M9Ilc3NXBjIFslIERhdGEuS2V5ICVdU2VydmVyRXJyb3IiIHZhbHVlPSJbJSBEYXRhLlZhbHVlIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5LZXkgJV1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiSWYgQXJ0aWNsZUNyZWF0ZSBvciBBcnRpY2xlU2VuZCBpcyB1c2VkIGFzIGEgdHJpZ2dlciBldmVudCwgeW91IG5lZWQgdG8gc3BlY2lmeSBhbiBhcnRpY2xlIGZpbHRlciBhcyB3ZWxsLiBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBvZiB0aGUgYXJ0aWNsZSBmaWx0ZXIgZmllbGRzLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQmFja2VuZEFydGljbGVGaWVsZCIpICVdCgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUb2dnbGUgdGhpcyB3aWRnZXQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlJlY2lwaWVudHMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUmVjaXBpZW50cyI+WyUgVHJhbnNsYXRlKCJTZW5kIHRvIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlJlY2lwaWVudHNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSZWNpcGllbnRBZ2VudHMiPlslIFRyYW5zbGF0ZSgiU2VuZCB0byB0aGVzZSBhZ2VudHMiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUmVjaXBpZW50QWdlbnRzU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUmVjaXBpZW50R3JvdXBzIj5bJSBUcmFuc2xhdGUoIlNlbmQgdG8gYWxsIGdyb3VwIG1lbWJlcnMgKGFnZW50cyBvbmx5KSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SZWNpcGllbnRHcm91cHNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSZWNpcGllbnRSb2xlcyI+WyUgVHJhbnNsYXRlKCJTZW5kIHRvIGFsbCByb2xlIG1lbWJlcnMiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUmVjaXBpZW50Um9sZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTZW5kT25PdXRPZk9mZmljZSI+WyUgVHJhbnNsYXRlKCJTZW5kIG9uIG91dCBvZiBvZmZpY2UiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iU2VuZE9uT3V0T2ZPZmZpY2UiIGlkPSJTZW5kT25PdXRPZk9mZmljZSIgdmFsdWU9IjEiIFslIERhdGEuU2VuZE9uT3V0T2ZPZmZpY2VDaGVja2VkICVdIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkFsc28gc2VuZCBpZiB0aGUgdXNlciBpcyBjdXJyZW50bHkgb3V0IG9mIG9mZmljZS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik9uY2VQZXJEYXkiPlslIFRyYW5zbGF0ZSgiT25jZSBwZXIgZGF5IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ik9uY2VQZXJEYXkiIGlkPSJPbmNlUGVyRGF5IiB2YWx1ZT0iMSIgWyUgRGF0YS5PbmNlUGVyRGF5Q2hlY2tlZCAlXSAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJOb3RpZnkgdXNlciBqdXN0IG9uY2UgcGVyIGRheSBhYm91dCBhIHNpbmdsZSB0aWNrZXQgdXNpbmcgYSBzZWxlY3RlZCB0cmFuc3BvcnQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUb2dnbGUgdGhpcyB3aWRnZXQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIk5vdGlmaWNhdGlvbiBNZXRob2RzIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgVHJhbnNwb3J0c0NvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGVzZSBhcmUgdGhlIHBvc3NpYmxlIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoaXMgbm90aWZpY2F0aW9uIHRvIGVhY2ggb2YgdGhlIHJlY2lwaWVudHMuIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG1ldGhvZCBiZWxvdy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyYW5zcG9ydFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD48c3Bhbj5bJSBUcmFuc2xhdGUoRGF0YS5UcmFuc3BvcnROYW1lKSB8IGh0bWwgJV08L3NwYW4+PC9sZWdlbmQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyYW5zcG9ydFJvd0VuYWJsZWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUcmFuc3BvcnRbJSBEYXRhLlRyYW5zcG9ydCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFbmFibGUgdGhpcyBub3RpZmljYXRpb24gbWV0aG9kIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IlRyYW5zcG9ydHMiIGlkPSJUcmFuc3BvcnRbJSBEYXRhLlRyYW5zcG9ydCB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlRyYW5zcG9ydCB8IGh0bWwgJV0iIGNsYXNzPSJWYWxpZGF0ZV9PbmVDaGVja2VkIFslIERhdGEuVHJhbnNwb3J0c1NlcnZlckVycm9yIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVHJhbnNwb3J0IikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoRGF0YS5UcmFuc3BvcnQpIHwgaHRtbCAlXSIgWyUgRGF0YS5UcmFuc3BvcnRDaGVja2VkICVdIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUcmFuc3BvcnRbJSBEYXRhLlRyYW5zcG9ydCB8IGh0bWwgJV1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiQXQgbGVhc3Qgb25lIG1ldGhvZCBpcyBuZWVkZWQgcGVyIG5vdGlmaWNhdGlvbi4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRyYW5zcG9ydFslIERhdGEuVHJhbnNwb3J0IHwgaHRtbCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJBdCBsZWFzdCBvbmUgbWV0aG9kIGlzIG5lZWRlZCBwZXIgbm90aWZpY2F0aW9uLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQWdlbnRFbmFibGVkQnlEZWZhdWx0WyUgRGF0YS5UcmFuc3BvcnQgfCBodG1sICVdIiBjbGFzcz0iQWdlbnRFbmFibGVkQnlEZWZhdWx0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQWN0aXZlIGJ5IGRlZmF1bHQgaW4gYWdlbnQgcHJlZmVyZW5jZXMiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIEFnZW50RW5hYmxlZEJ5RGVmYXVsdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IkFnZW50RW5hYmxlZEJ5RGVmYXVsdCIgaWQ9IkFnZW50RW5hYmxlZEJ5RGVmYXVsdFslIERhdGEuVHJhbnNwb3J0IHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuVHJhbnNwb3J0IHwgaHRtbCAlXSIgIHRpdGxlPSIiIFslIERhdGEuQWdlbnRFbmFibGVkQnlEZWZhdWx0Q2hlY2tlZCAlXSAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYXNzaWduZWQgcmVjaXBpZW50IGFnZW50cyB3aG8gZGlkbid0IG1ha2UgYSBjaG9pY2UgZm9yIHRoaXMgbm90aWZpY2F0aW9uIGluIHRoZWlyIHByZWZlcmVuY2VzIHlldC4gSWYgdGhlIGJveCBpcyBlbmFibGVkLCB0aGUgbm90aWZpY2F0aW9uIHdpbGwgYmUgc2VudCB0byBzdWNoIGFnZW50cy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlNldHRpbmdzU3RyaW5nICVdClslIFJlbmRlckJsb2NrRW5kKCJUcmFuc3BvcnRSb3dFbmFibGVkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJhbnNwb3J0Um93RGlzYWJsZWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGlzIGZlYXR1cmUgaXMgY3VycmVudGx5IG5vdCBhdmFpbGFibGUuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJhbnNwb3J0Um93RGlzYWJsZWQiKSAlXQojIFN2ZW5jaGVjawpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmFuc3BvcnRSb3dSZWNvbW1lbmRhdGlvbiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBJbmZvIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWRtaW5PVE9CT0NvbW11bml0eSIgY2xhc3M9IkJ1dHRvbiI+PGkgY2xhc3M9ImZhIGZhLWFuZ2xlLWRvdWJsZS11cCI+PC9pPiBbJSBUcmFuc2xhdGUoIlVwZ3JhZGUgdG8gJXMiKSB8IGh0bWwgfCBSZXBsYWNlUGxhY2Vob2xkZXJzKE9UT0JPQ29tbXVuaXR5TGFiZWwpICVdPC9hPgojICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUcmFuc3BvcnRSb3dSZWNvbW1lbmRhdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRyYW5zcG9ydFJvd05vdEFjdGl2ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIEluZm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFkbWluQ2xvdWRTZXJ2aWNlcyIgY2xhc3M9IkJ1dHRvbiI+PGkgY2xhc3M9ImZhIGZhLWFuZ2xlLWRvdWJsZS11cCI+PC9pPiBbJSBUcmFuc2xhdGUoIlBsZWFzZSBhY3RpdmF0ZSB0aGlzIHRyYW5zcG9ydCBpbiBvcmRlciB0byB1c2UgaXQuIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyYW5zcG9ydFJvd05vdEFjdGl2ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJhbnNwb3J0Um93IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2dUcmFuc3BvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPjxzcGFuPlslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZCIpIHwgaHRtbCAlXTwvc3Bhbj48L2xlZ2VuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBub3RpZmljYXRpb24gbWV0aG9kIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnVHJhbnNwb3J0IikgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRvZ2dsZSB0aGlzIHdpZGdldCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTm90aWZpY2F0aW9uIFRleHQiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyA9Ik5vdGlmaWNhdGlvbkxhbmd1YWdlQ29udGFpbmVyIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk5vdGlmaWNhdGlvbkxhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTm90aWZpY2F0aW9uTGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgWyUgSUYgIURhdGEuTGFuZ3VhZ2UgJV0gQ29sbGFwc2VkIFslIEVORCAlXSAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIHRoaXMgd2lkZ2V0IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iVGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5MYW5ndWFnZSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5MYW5ndWFnZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iV2FybmluZyI+J1slIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0nICZtZGFzaDsgWyUgVHJhbnNsYXRlKCJUaGlzIGxhbmd1YWdlIGlzIG5vdCBwcmVzZW50IG9yIGVuYWJsZWQgb24gdGhlIHN5c3RlbS4gVGhpcyBub3RpZmljYXRpb24gdGV4dCBjb3VsZCBiZSBkZWxldGVkIGlmIGl0IGlzIG5vdCBuZWVkZWQgYW55bW9yZS4iKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm90aWZpY2F0aW9uTGFuZ3VhZ2VSZW1vdmVCdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJBZGRpdGlvbmFsSW5mb3JtYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdmFsdWU9IlJlbW92ZSBMYW5ndWFnZSIgY2xhc3M9IlJlbW92ZUJ1dHRvbiBMYW5ndWFnZVJlbW92ZSIgaWQ9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fTGFuZ3VhZ2VfUmVtb3ZlIiBocmVmPSIiIG5hbWU9IkRhdGEuTGFuZ3VhZ2VJRF9MYW5ndWFnZV9SZW1vdmUiPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSBOb3RpZmljYXRpb24gTGFuZ3VhZ2UiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vdGlmaWNhdGlvbkxhbmd1YWdlUmVtb3ZlQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTGFuZ3VhZ2VJRCIgY2xhc3M9Ikxhbmd1YWdlSUQiIHZhbHVlPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdIi8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9TdWJqZWN0IiBpZD0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9MYWJlbF9TdWJqZWN0IiBjbGFzcz0iTWFuZGF0b3J5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJTdWJqZWN0IikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9TdWJqZWN0IiBpZD0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9TdWJqZWN0IiB2YWx1ZT0iWyUgRGF0YS5TdWJqZWN0IHwgaHRtbCAlXSIgY2xhc3M9Ilc3NXBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuU3ViamVjdFNlcnZlckVycm9yIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX1N1YmplY3RFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fU3ViamVjdFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0JvZHkiIGlkPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0xhYmVsX0JvZHkiIGNsYXNzPSJNYW5kYXRvcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRleHQiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fQm9keSIgaWQ9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fQm9keSIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkUmljaFRleHQgWyUgRGF0YS5Cb2R5U2VydmVyRXJyb3IgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNZXNzYWdlIGJvZHkiKSB8IGh0bWwgJV0iIHJvd3M9IjE1IiBjb2xzPSJbJSBDb25maWcoIlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhTm90ZSIpIHwgaHRtbCAlXSI+WyUgRGF0YS5Cb2R5IHwgaHRtbCAlXTwvdGV4dGFyZWE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fQm9keUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9Cb2R5U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGhhdmUgbGVzcyB0aGFuIDQwMDAgY2hhcmFjdGVycy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJOb3RpZmljYXRpb25MYW5ndWFnZSIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIaWRkZW4gVGVtcGxhdGUgTm90aWZpY2F0aW9uTGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIHRoaXMgd2lkZ2V0IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iVGl0bGUiPjwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2YWx1ZT0iUmVtb3ZlIExhbmd1YWdlIiBjbGFzcz0iUmVtb3ZlQnV0dG9uIExhbmd1YWdlUmVtb3ZlIiBpZD0iVGVtcGxhdGVfTGFuZ3VhZ2VfUmVtb3ZlIiBocmVmPSIiIG5hbWU9IlRlbXBsYXRlX0xhbmd1YWdlX1JlbW92ZSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIE5vdGlmaWNhdGlvbiBMYW5ndWFnZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIGNsYXNzPSJMYW5ndWFnZUlEIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUZW1wbGF0ZV9TdWJqZWN0IiBpZD0iVGVtcGxhdGVfTGFiZWxfU3ViamVjdCIgY2xhc3M9Ik1hbmRhdG9yeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJUZW1wbGF0ZV9TdWJqZWN0IiBpZD0iVGVtcGxhdGVfU3ViamVjdCIgdmFsdWU9IiIgY2xhc3M9Ilc3NXBjIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlX1N1YmplY3RFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVGVtcGxhdGVfQm9keSIgaWQ9IlRlbXBsYXRlX0xhYmVsX0JvZHkiIGNsYXNzPSJNYW5kYXRvcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUZXh0IikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iVGVtcGxhdGVfQm9keSIgY2xhc3M9IiIgbmFtZT0iVGVtcGxhdGVfQm9keSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTWVzc2FnZSBib2R5IikgfCBodG1sICVdIiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUiKSB8IGh0bWwgJV0iPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVfQm9keUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJMYW5ndWFnZSI+WyUgVHJhbnNsYXRlKCJBZGQgbmV3IG5vdGlmaWNhdGlvbiBsYW5ndWFnZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhbmd1YWdlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYW5ndWFnZU9yaWdTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiMgUm90aGVyIE9TUyAvIExpZ2h0QWRtaW4KICAgICAgICBbJSBJRiBEYXRhLlBlcm1pc3Npb24gIT0gJ3JvJyAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNhdmUgQ2hhbmdlcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQWN0aW9uID09ICdDaGFuZ2UnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIFslIEVORCAlXQojIEVPIExpZ2h0QWRtaW4KICAgICAgICA8L2Zvcm0+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIENvbGxhcHNlZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUb2dnbGUgdGhpcyB3aWRnZXQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJUYWcgUmVmZXJlbmNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIk5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gYW4gYWdlbnQgb3IgYSBjdXN0b21lci4iKSB8IGh0bWwgJV08L3A+CgogICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHRhZ3MiKSB8IGh0bWwgJV06PC9wPgoKICAgICAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0FHRU5UX1NVQkpFQ1RbMjBdJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUbyBnZXQgdGhlIGZpcnN0IDIwIGNoYXJhY3RlciBvZiB0aGUgc3ViamVjdCAob2YgdGhlIGxhdGVzdCBhZ2VudCBhcnRpY2xlKS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0FHRU5UX0JPRFlbNV0mZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGdldCB0aGUgZmlyc3QgNSBsaW5lcyBvZiB0aGUgYm9keSAob2YgdGhlIGxhdGVzdCBhZ2VudCBhcnRpY2xlKS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0FHRU5UXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGdldCB0aGUgYXJ0aWNsZSBhdHRyaWJ1dGUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19BR0VOVF9Gcm9tJmd0OywgJmx0O09UT0JPX0FHRU5UX1RvJmd0OywgJmx0O09UT0JPX0FHRU5UX0NjJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fQ1VTVE9NRVJfU1VCSkVDVFsyMF0mZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGdldCB0aGUgZmlyc3QgMjAgY2hhcmFjdGVyIG9mIHRoZSBzdWJqZWN0IChvZiB0aGUgbGF0ZXN0IGN1c3RvbWVyIGFydGljbGUpLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fQ1VTVE9NRVJfQk9EWVs1XSZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gZ2V0IHRoZSBmaXJzdCA1IGxpbmVzIG9mIHRoZSBib2R5IChvZiB0aGUgbGF0ZXN0IGN1c3RvbWVyIGFydGljbGUpLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fQ1VTVE9NRVJfUkVBTE5BTUUmZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGdldCB0aGUgbmFtZSBvZiB0aGUgdGlja2V0J3MgY3VzdG9tZXIgdXNlciAoaWYgZ2l2ZW4pLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fQ1VTVE9NRVJfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gZ2V0IHRoZSBhcnRpY2xlIGF0dHJpYnV0ZSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSX0Zyb20mZ3Q7LCAmbHQ7T1RPQk9fQ1VTVE9NRVJfVG8mZ3Q7LAogICAgICAgICAgICAgICAgICAgICAgICAmbHQ7T1RPQk9fQ1VTVE9NRVJfQ2MmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgY3VzdG9tZXIgdXNlciBkYXRhIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fQ1VTVE9NRVJfREFUQV9Vc2VyRmlyc3RuYW1lJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fT1dORVJfKiZndDs8L2NvZGU+IFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9PV05FUl8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IHRpY2tldCBvd25lciB1c2VyIGRhdGEiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19PV05FUl9Vc2VyRmlyc3RuYW1lJmd0OzwvY29kZT4gWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX09XTkVSX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19SRVNQT05TSUJMRV8qJmd0OzwvY29kZT4gWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX1JFU1BPTlNJQkxFXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgdGlja2V0IHJlc3BvbnNpYmxlIHVzZXIgZGF0YSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1JFU1BPTlNJQkxFX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPiBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19USUNLRVRfUkVTUE9OU0lCTEVfVXNlckZpcnN0bmFtZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVUlJFTlRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBhZ2VudCB1c2VyIHdobyByZXF1ZXN0ZWQgdGhpcyBhY3Rpb24iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19DVVJSRU5UX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT18qJmd0OzwvY29kZT4gWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fTk9USUZJQ0FUSU9OX1JFQ0lQSUVOVF8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBdHRyaWJ1dGVzIG9mIHRoZSByZWNpcGllbnQgdXNlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1VzZXJGdWxsbmFtZSZndDs8L2NvZGU+IFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX05PVElGSUNBVElPTl9SRUNJUElFTlRfVXNlckZ1bGxuYW1lJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fVElDS0VUXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkF0dHJpYnV0ZXMgb2YgdGhlIHRpY2tldCBkYXRhIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX1RpY2tldE51bWJlciZndDssICZsdDtPVE9CT19USUNLRVRfVGlja2V0SUQmZ3Q7LAogICAgICAgICAgICAgICAgICAgICAgICAmbHQ7T1RPQk9fVElDS0VUX1F1ZXVlJmd0OywgJmx0O09UT0JPX1RJQ0tFVF9TdGF0ZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGlja2V0IGR5bmFtaWMgZmllbGRzIGludGVybmFsIGtleSB2YWx1ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19USUNLRVRfRHluYW1pY0ZpZWxkX1Rlc3RGaWVsZCZndDssCiAgICAgICAgICAgICAgICAgICAgICAgICZsdDtPVE9CT19USUNLRVRfRHluYW1pY0ZpZWxkX1RpY2tldEZyZWVUZXh0MSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfKl9WYWx1ZSZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGlja2V0IGR5bmFtaWMgZmllbGRzIGRpc3BsYXkgdmFsdWVzLCB1c2VmdWwgZm9yIERyb3Bkb3duIGFuZCBNdWx0aXNlbGVjdCBmaWVsZHMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiIGUuIGcuIikgfCBodG1sICVdIDxjb2RlPiZsdDtPVE9CT19USUNLRVRfRHluYW1pY0ZpZWxkX1Rlc3RGaWVsZF9WYWx1ZSZndDssCiAgICAgICAgICAgICAgICAgICAgICAgICZsdDtPVE9CT19USUNLRVRfRHluYW1pY0ZpZWxkX1RpY2tldEZyZWVUZXh0MV9WYWx1ZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NPTkZJR18qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJDb25maWcgb3B0aW9ucyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX0NPTkZJR19IdHRwVHlwZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFeGFtcGxlIG5vdGlmaWNhdGlvbiIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlN1YmplY3RFeGFtcGxlIj5bJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV08L2xhYmVsPjoKICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJTdWJqZWN0RXhhbXBsZSIgaWQ9IlN1YmplY3RFeGFtcGxlIiB2YWx1ZT0iVGlja2V0IENyZWF0ZWQ6ICZsdDtPVE9CT19USUNLRVRfVGl0bGUmZ3Q7IiBzaXplPSI4MCIgbWF4bGVuZ3RoPSI4MCIgcmVhZG9ubHkgLz4KICAgICAgICAgICAgICAgIDxici8+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSZXNwb25zZUV4YW1wbGUiPlslIFRyYW5zbGF0ZSgiVGV4dCIpIHwgaHRtbCAlXTwvbGFiZWw+OgogICAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSIxMiIgY29scz0iNzAiIG5hbWU9IlJlc3BvbnNlRXhhbXBsZSIgaWQ9IlJlc3BvbnNlRXhhbXBsZSIgcmVhZG9ubHk+CkhpICZsdDtPVE9CT19OT1RJRklDQVRJT05fUkVDSVBJRU5UX1VzZXJGaXJzdG5hbWUmZ3Q7LAoKdGlja2V0IFsmbHQ7T1RPQk9fQ09ORklHX1RpY2tldEhvb2smZ3Q7Jmx0O09UT0JPX1RJQ0tFVF9UaWNrZXROdW1iZXImZ3Q7XSBoYXMgYmVlbiBjcmVhdGVkIGluIHF1ZXVlICZsdDtPVE9CT19USUNLRVRfUXVldWUmZ3Q7LgoKJmx0O09UT0JPX0NVU1RPTUVSX1JFQUxOQU1FJmd0OyB3cm90ZToKJmx0O09UT0JPX0NVU1RPTUVSX0JvZHlbMzBdJmd0OwoKJmx0O09UT0JPX0NPTkZJR19IdHRwVHlwZSZndDs6Ly8mbHQ7T1RPQk9fQ09ORklHX0ZRRE4mZ3Q7LyZsdDtPVE9CT19DT05GSUdfU2NyaXB0QWxpYXMmZ3Q7aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0mbHQ7T1RPQk9fVElDS0VUX1RpY2tldElEJmd0OwoKLS0gJmx0O09UT0JPX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lJmd0OwogICAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZSIpICVdCgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminTemplate.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblRlbXBsYXRlLnR0CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiVGVtcGxhdGUgTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdUZW1wbGF0ZSBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBTV0lUQ0ggRGF0YS5BY3Rpb24gJV0KICAgICAgICBbJSBDQVNFICdBZGQnICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IFRyYW5zbGF0ZSgiQWRkIFRlbXBsYXRlIiksfSkgJV0KICAgICAgICBbJSBDQVNFICdDaGFuZ2UnICVdCiAgICAgICAgICAgIFslIFVTRSBFZGl0VGl0bGUgPSBTdHJpbmcoVHJhbnNsYXRlKCJFZGl0IFRlbXBsYXRlIikpICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuTmFtZSApIH0pICVdCiAgICBbJSBFTkQgJV0KCiAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj48aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIFRlbXBsYXRlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGaWx0ZXIiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyIj5bJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgVGVtcGxhdGVzIikgfCBodG1sICVdPC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlciIgY2xhc3M9IkZpbHRlckJveCIgcGxhY2Vob2xkZXI9IlslIFRyYW5zbGF0ZSgiSnVzdCBzdGFydCB0eXBpbmcgdG8gZmlsdGVyLi4uIikgfCBodG1sICVdIiBuYW1lPSJGaWx0ZXIiIHZhbHVlPSIiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgdGVtcGxhdGVzIikgfCBodG1sICVdIiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZpbHRlciIpICVdClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkhpbnQiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQSB0ZW1wbGF0ZSBpcyBhIGRlZmF1bHQgdGV4dCB3aGljaCBoZWxwcyB5b3VyIGFnZW50cyB0byB3cml0ZSBmYXN0ZXIgdGlja2V0cywgYW5zd2VycyBvciBmb3J3YXJkcy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQXR0ZW50aW9uIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pblF1ZXVlVGVtcGxhdGVzIj5bJSBUcmFuc2xhdGUoIkRvbid0IGZvcmdldCB0byBhZGQgbmV3IHRlbXBsYXRlcyB0byBxdWV1ZXMuIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1Jlc3VsdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IlRlbXBsYXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudHMiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNyI+WyUgVHJhbnNsYXRlKCJObyBtYXRjaGVzIGZvdW5kLiIpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxICVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlRlbXBsYXRlVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUNoYW5nZTtJRD1bJSBEYXRhLklEIHwgdXJpICVdO1R5cGU9WyUgRGF0YS5UZW1wbGF0ZVR5cGUgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQXR0YWNobWVudHMgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjYpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlBlcm1pc3Npb24gIT0gJ3JvJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJUcmFzaENhbiBUZW1wbGF0ZURlbGV0ZSIgaHJlZj0iIyIgZGF0YS1xdWVyeS1zdHJpbmc9IkFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1EZWxldGU7SUQ9WyUgRGF0YS5JRCB8IHVyaSAlXTtbJSBFbnYoIkNoYWxsZW5nZVRva2VuUGFyYW0iKSB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJEZWxldGUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQojIEVPIExpZ2h0QWRtaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiIgaWQ9IkRlbGV0ZVRlbXBsYXRlRGlhbG9nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBpZCA9IkRlbGV0ZVRlbXBsYXRlRGlhbG9nIiBjbGFzcz0iSW5uZXJDb250ZW50IEdlbmVyaWNJbnRlcmZhY2VEaWFsb2ciPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9IkNlbnRlciBTcGFjaW5nIj5bJSBUcmFuc2xhdGUoIkRvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZT8iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1Jlc3VsdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3VXBkYXRlIikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0FkZCcgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBUZW1wbGF0ZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkVkaXQgVGVtcGxhdGUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCB1cmkgJV1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVGVtcGxhdGVUeXBlIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UZW1wbGF0ZVR5cGVTdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlVHlwZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVUeXBlU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTmFtZVNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiTmFtZVNlcnZlckVycm9yIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRXhpc3ROYW1lU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiQSBzdGFuZGFyZCB0ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cyEiKSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJOYW1lU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlJpY2hUZXh0Ij5bJSBUcmFuc2xhdGUoIlRlbXBsYXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJSaWNoVGV4dCIgY2xhc3M9IlJpY2hUZXh0IiByb3dzPSIxMCIgY29scz0iNjAiIG5hbWU9IlRlbXBsYXRlIj5bJSBEYXRhLlRlbXBsYXRlIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJJRHMiPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudHMiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BdHRhY2htZW50T3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJWYWxpZElEIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlZhbGlkSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlZhbGlkSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgojIFJvdGhlciBPU1MgLyBMaWdodEFkbWluCiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5QZXJtaXNzaW9uICE9ICdybycgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BY3Rpb24gPT0gJ0NoYW5nZScgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXRBbmRDb250aW51ZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUgYW5kIGZpbmlzaCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiMgRU8gTGlnaHRBZG1pbgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlJlZmVyZW5jZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIllvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdGFncyIpIHwgaHRtbCAlXTo8L3A+CiAgICAgICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19BR0VOVF9TVUJKRUNUWzIwXSZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gZ2V0IHRoZSBmaXJzdCAyMCBjaGFyYWN0ZXJzIG9mIHRoZSBzdWJqZWN0IG9mIHRoZSBjdXJyZW50L2xhdGVzdCBhZ2VudCBhcnRpY2xlIChjdXJyZW50IGZvciBBbnN3ZXIgYW5kIEZvcndhcmQsIGxhdGVzdCBmb3IgTm90ZSB0ZW1wbGF0ZSB0eXBlKS4gVGhpcyB0YWcgaXMgbm90IHN1cHBvcnRlZCBmb3Igb3RoZXIgdGVtcGxhdGUgdHlwZXMuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19BR0VOVF9CT0RZWzVdJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUbyBnZXQgdGhlIGZpcnN0IDUgbGluZXMgb2YgdGhlIGJvZHkgb2YgdGhlIGN1cnJlbnQvbGF0ZXN0IGFnZW50IGFydGljbGUgKGN1cnJlbnQgZm9yIEFuc3dlciBhbmQgRm9yd2FyZCwgbGF0ZXN0IGZvciBOb3RlIHRlbXBsYXRlIHR5cGUpLiBUaGlzIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBvdGhlciB0ZW1wbGF0ZSB0eXBlcy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSX1NVQkpFQ1RbMjBdJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUbyBnZXQgdGhlIGZpcnN0IDIwIGNoYXJhY3RlcnMgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIGN1cnJlbnQvbGF0ZXN0IGFydGljbGUgKGN1cnJlbnQgZm9yIEFuc3dlciBhbmQgRm9yd2FyZCwgbGF0ZXN0IGZvciBOb3RlIHRlbXBsYXRlIHR5cGUpLiBUaGlzIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBvdGhlciB0ZW1wbGF0ZSB0eXBlcy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVU1RPTUVSX0JPRFlbNV0mZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGdldCB0aGUgZmlyc3QgNSBsaW5lcyBvZiB0aGUgYm9keSBvZiB0aGUgY3VycmVudC9sYXRlc3QgYXJ0aWNsZSAoY3VycmVudCBmb3IgQW5zd2VyIGFuZCBGb3J3YXJkLCBsYXRlc3QgZm9yIE5vdGUgdGVtcGxhdGUgdHlwZSkuIFRoaXMgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG90aGVyIHRlbXBsYXRlIHR5cGVzLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fT1dORVJfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGlja2V0IG93bmVyIG9wdGlvbnMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Jmx0O09UT0JPX09XTkVSX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19SRVNQT05TSUJMRV8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgcmVzcG9uc2libGUgb3B0aW9ucyIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJlLiBnLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4mbHQ7T1RPQk9fUkVTUE9OU0lCTEVfVXNlckZpcnN0bmFtZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX0NVUlJFTlRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aGUgY3VycmVudCB1c2VyIHdobyByZXF1ZXN0ZWQgdGhpcyBhY3Rpb24iKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Jmx0O09UT0JPX0NVUlJFTlRfVXNlckZpcnN0bmFtZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF8qJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJPcHRpb25zIG9mIHRoZSB0aWNrZXQgZGF0YSIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJlLiBnLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX1RpY2tldE51bWJlcj4sICZsdDtPVE9CT19USUNLRVRfVGlja2V0SUQmZ3Q7LCAmbHQ7T1RPQk9fVElDS0VUX1F1ZXVlJmd0OywgJmx0O09UT0JPX1RJQ0tFVF9TdGF0ZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+PGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiT3B0aW9ucyBvZiB0aWNrZXQgZHluYW1pYyBmaWVsZHMgaW50ZXJuYWwga2V5IHZhbHVlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAoWyUgVHJhbnNsYXRlKCIgZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfVGVzdEZpZWxkJmd0OywKICAgICAgICAgICAgICAgICAgICAgICAgJmx0O09UT0JPX1RJQ0tFVF9EeW5hbWljRmllbGRfVGlja2V0RnJlZVRleHQxJmd0OzwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD48Y29kZT4mbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF8qX1ZhbHVlJmd0OzwvY29kZT48L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJPcHRpb25zIG9mIHRpY2tldCBkeW5hbWljIGZpZWxkcyBkaXNwbGF5IHZhbHVlcywgdXNlZnVsIGZvciBEcm9wZG93biBhbmQgTXVsdGlzZWxlY3QgZmllbGRzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoIiBlLiBnLiIpIHwgaHRtbCAlXSA8Y29kZT4mbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9UZXN0RmllbGRfVmFsdWUmZ3Q7LAogICAgICAgICAgICAgICAgICAgICAgICAmbHQ7T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9UaWNrZXRGcmVlVGV4dDFfVmFsdWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBXyomZ3Q7PC9jb2RlPjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgY3VzdG9tZXIgdXNlciBkYXRhIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuIGcuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPiZsdDtPVE9CT19DVVNUT01FUl9EQVRBX1VzZXJGaXJzdG5hbWUmZ3Q7PC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0Pjxjb2RlPiZsdDtPVE9CT19DT05GSUdfKiZndDs8L2NvZGU+PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ29uZmlnIG9wdGlvbnMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS4gZy4iKSB8IGh0bWwgJV0gPGNvZGU+Jmx0O09UT0JPX0NPTkZJR19IdHRwVHlwZSZndDs8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgVHJhbnNsYXRlKCJOb3RlIikgfCBodG1sICVdOjwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiQ3JlYXRlIHR5cGUgdGVtcGxhdGVzIG9ubHkgc3VwcG9ydHMgdGhpcyBzbWFydCB0YWdzIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgIDxjb2RlPjxzdHJvbmc+ICZsdDtPVE9CT19DVVJSRU5UXyomZ3Q7PC9zdHJvbmc+PC9jb2RlPiBbJSBUcmFuc2xhdGUoImFuZCIpIHwgaHRtbCAlXSA8Y29kZT48c3Ryb25nPiAmbHQ7T1RPQk9fQ09ORklHXyomZ3Q7PC9zdHJvbmc+PC9jb2RlPgogICAgICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkV4YW1wbGUgdGVtcGxhdGUiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz0iNSIgY29scz0iNjAiIG5hbWU9IlRlbXBsYXRlZSI+ClslIFRyYW5zbGF0ZSgiVGhlIGN1cnJlbnQgdGlja2V0IHN0YXRlIGlzIikgfCBodG1sICVdOiAiJmx0O09UT0JPX1RJQ0tFVF9TdGF0ZSZndDsiCgpbJSBUcmFuc2xhdGUoIllvdXIgZW1haWwgYWRkcmVzcyBpcyIpIHwgaHRtbCAlXTogIiZsdDtPVE9CT19DVVNUT01FUl9Vc2VyRW1haWwmZ3Q7IgogICAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1VwZGF0ZSIpICVdCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==</File>
        <File Location="Kernel/Language/de_LightAdmin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0xpZ2h0QWRtaW47Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkF0dGFjaG1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHBlcm1pc3Npb24gdG8gZWRpdCB0aGlzIGF0dGFjaG1lbnQuJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbk5vdGlmaWNhdGlvbkV2ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBwZXJtaXNzaW9uIHRvIGVkaXQgdGhpcyB0aWNrZXQgbm90aWZpY2F0aW9uLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5UZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcGVybWlzc2lvbiB0byBlZGl0IHRoaXMgdGVtcGxhdGUuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/hu_LightAdmin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X0xpZ2h0QWRtaW47Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkF0dGFjaG1lbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHBlcm1pc3Npb24gdG8gZWRpdCB0aGlzIGF0dGFjaG1lbnQuJ30gPSAnTmluY3Mgam9nb3N1bHRzw6FnYSBhIG1lbGzDqWtsZXQgc3plcmtlc3p0w6lzw6loZXouJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbk5vdGlmaWNhdGlvbkV2ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBwZXJtaXNzaW9uIHRvIGVkaXQgdGhpcyB0aWNrZXQgbm90aWZpY2F0aW9uLid9ID0gJ05pbmNzIGpvZ29zdWx0c8OhZ2EgYSBqZWd5w6lydGVzw610w6lzIHN6ZXJrZXN6dMOpc8OpaGV6Lic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5UZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcGVybWlzc2lvbiB0byBlZGl0IHRoaXMgdGVtcGxhdGUuJ30gPSAnTmluY3Mgam9nb3N1bHRzw6FnYSBhIHNhYmxvbiBzemVya2VzenTDqXPDqWhlei4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/System/LightAdmin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjMgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpMaWdodEFkbWluOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1JTUU6OkJhc2U2NDsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0FycmF5UmVmV2l0aERhdGEpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6TGlnaHRBZG1pbiAtIGxpYiBmb3IgbGlnaHQgYWRtaW4gcGFja2FnZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpUd28gZnVuY3Rpb25zIHJlbGV2YW50IGZvciB0aGUgcGFja2FnZSBhbmQgZ3JvdXBlZCBoZXJlLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKRG9uJ3QgdXNlIHRoZSBjb25zdHJ1Y3RvciBkaXJlY3RseSwgdXNlIHRoZSBPYmplY3RNYW5hZ2VyIGluc3RlYWQ6CgogICAgbXkgJExpZ2h0QWRtaW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlnaHRBZG1pbicpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBTdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZVBlcm1pc3Npb24oKQoKR2V0IHRoZSBsb3dlc3QgcGVybWlzc2lvbiBsZXZlbCBvZiBhbGwgbGlua2VkIHF1ZXVlcyAoYXR0YWNobWVudC0+dGVtcGxhdGUtPnF1ZXVlKS4KUmV0dXJucyBub3RoaW5nIGlmIHRoZSB1c2VyIGhhcyBubyAncm8nIG9uIGF0IGxlYXN0IG9uZSBsaW5rZWQgcXVldWUsICdybycgaWYgdGhlIHVzZXIgaGFzIG5vICdydycgb24KYXQgbGVhc3Qgb25lIGxpbmtlZCBxdWV1ZSBhbmQgJ3J3JyBpZiB0aGUgdXNlciBoYXMgZnVsbCBwZXJtaXNzaW9uIG9uIGFsbCBxdWV1ZXMgb3Igbm8gbGluayBleGlzdHMgYXQgYWxsLgoKICAgIG15ICRQZXJtaXNzaW9uID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICBJRCAgICAgID0+ICRBdHRhY2htZW50SUQsCiAgICAgICAgVXNlcklEICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBEZWZhdWx0ID0+ICdybycsICAgICAgICAgICAgIyAob3B0aW9uYWwpIGxvd2VzdCBwZXJtaXNzaW9uIGxldmVsCiAgICApOwoKPWN1dAoKc3ViIFN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlUGVybWlzc2lvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkUXVldWVPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgbXkgJFN0ZEF0dGFjaG1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RkQXR0YWNobWVudCcpOwoKICAgICMgR2V0IGFsbCBsaW5rZWQgdGVtcGxhdGVzLgogICAgbXkgJVRlbXBsYXRlTGlzdCA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoIEF0dGFjaG1lbnRJRCA9PiAkUGFyYW17SUR9ICk7CgogICAgIyAncncnIGlzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb24gb24gbm90IGxpbmtlZCBhdHRhY2htZW50cy4KICAgIHJldHVybiAncncnIGlmICElVGVtcGxhdGVMaXN0OwoKICAgIG15ICRQZXJtaXNzaW9uOwoKICAgIGZvciBteSAkVGVtcGxhdGVJRCAoIGtleXMgJVRlbXBsYXRlTGlzdCApIHsKICAgICAgICAjIEdldCBhbGwgcXVldWVzIGxpbmtlZCB3aXRoIHRoZSB0ZW1wbGF0ZS4KICAgICAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KCBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQgKTsKICAgICAgICBteSAkVGVtcGxhdGVQZXJtaXNzaW9uID0gJFNlbGYtPlF1ZXVlTGlzdFBlcm1pc3Npb24oCiAgICAgICAgICAgIFF1ZXVlSURzID0+IFsga2V5cyAlUXVldWVzIF0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBEZWZhdWx0ICA9PiAncncnLAogICAgICAgICk7CgogICAgICAgIGlmICggIWRlZmluZWQgJFBlcm1pc3Npb24gKSB7CiAgICAgICAgICAgICRQZXJtaXNzaW9uID0gJFRlbXBsYXRlUGVybWlzc2lvbiAvLyAnJzsKCiAgICAgICAgICAgIHJldHVybiAncm8nIGlmICRQZXJtaXNzaW9uIGVxICdybyc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBlcm1pc3Npb24gbmUgJFRlbXBsYXRlUGVybWlzc2lvbiApIHsKICAgICAgICAgICAgcmV0dXJuICdybyc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGVybWlzc2lvbjsKfQoKPWhlYWQyIFF1ZXVlTGlzdFBlcm1pc3Npb24oKQoKR2V0IHRoZSBwZXJtaXNzaW9uIGZvciBhIGxpc3Qgb2YgcXVldWVzLgpSZXR1cm5zIG5vdGhpbmcgaWYgdGhlIHVzZXIgaGFzIG5vICdybycgb24gYW55IHF1ZXVlLCAncm8nIGlmIHRoZSB1c2VyIGhhcyBubyAncncnIG9uIGF0IGxlYXN0IG9uZSBxdWV1ZQphbmQgJ3J3JyBpZiB0aGUgdXNlciBoYXMgZnVsbCBwZXJtaXNzaW9uIG9uIGFsbCBxdWV1ZXMuCgogICAgbXkgJFBlcm1pc3Npb24gPSAkTGlnaHRBZG1pbk9iamVjdC0+UXVldWVMaXN0UGVybWlzc2lvbigKICAgICAgICBRdWV1ZUlEcyA9PiBcQFF1ZXVlSURzLCAgICAgICMgb3B0aW9uYWwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBEZWZhdWx0ICA9PiAncncnLCAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0ICdybycgKHJvfHJ3KSBmYWxsYmFjayBwZXJtaXNzaW9uIGlmIG5vIHF1ZXVlcyBnaXZlbgogICAgKTsKCj1jdXQKCnN1YiBRdWV1ZUxpc3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFF1ZXVlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CgogICAgbXkgJVJvUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxRdWV1ZXMoIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSApOwogICAgbXkgJVJ3UXVldWVzID0gJFF1ZXVlT2JqZWN0LT5HZXRBbGxRdWV1ZXMoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgKTsKCiAgICAjICdybycgaXMgdGhlIGRlZmF1bHQgcGVybWlzc2lvbiBpZiBubyBxdWV1ZSBpcyBnaXZlbiBhbmQgcGFyYW1ldGVyICdEZWZhdWx0JyBpcyBub3Qgc2V0LgogICAgbXkgJERlZmF1bHRQZXJtaXNzaW9uID0gJFBhcmFte0RlZmF1bHR9IHx8ICdybyc7CgogICAgcmV0dXJuICREZWZhdWx0UGVybWlzc2lvbiBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17UXVldWVJRHN9ICk7CgogICAgIyBmaW5hbCBwZXJtaXNzaW9uIGlzIHJ3IG9yICcnIGlmIGFsbCBhcmUgb2YgdGhhdCBraW5kLCBlbHNlIHJvCiAgICBteSAkUGVybWlzc2lvbjsKICAgIFFVRVVFOgogICAgZm9yIG15ICRRdWV1ZUlEICggQHsgJFBhcmFte1F1ZXVlSURzfSB9ICkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBlcm1pc3Npb24gKSB7CiAgICAgICAgICAgIGlmICggJFJ3UXVldWVzeyRRdWV1ZUlEfSApIHsKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uID0gJ3J3JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRSb1F1ZXVlc3skUXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAkUGVybWlzc2lvbiA9ICdybyc7CiAgICAgICAgICAgICAgICBsYXN0IFFVRVVFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFBlcm1pc3Npb24gPSAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAkUGVybWlzc2lvbiBlcSAnJyApIHsKICAgICAgICAgICAgaWYgKCAkUndRdWV1ZXN7JFF1ZXVlSUR9IHx8ICRSd1F1ZXVlc3skUXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAkUGVybWlzc2lvbiA9ICdybyc7CiAgICAgICAgICAgICAgICBsYXN0IFFVRVVFOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNpZiAoICEkUndRdWV1ZXN7JFF1ZXVlSUR9ICkgewogICAgICAgICAgICAkUGVybWlzc2lvbiA9ICdybyc7CiAgICAgICAgICAgIGxhc3QgUVVFVUU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGVybWlzc2lvbjsKfQoKMTsK</File>
        <File Location="doc/en/LightAdmin.pdf" Permission="644" Encode="Base64">JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA4MjgvSGVpZ2h0IDI1My9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgODI4L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyNDQzPj4Kc3RyZWFtCnja7d2LddpYAgZgUkGYCqKtIGwFZisIqWCYCsJUsGwFw1QwuIJlKli5gpUrGKhgTQVZJ465AoORhB7X6PvOmXMSGzsaSf/VfWswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgF5LktEwSR7/kC3WNf3K8TSp/LOr5cN1nufZ5PxnsodsnTV5EE9XJh2s19mDW/+yUzke34S/bcf1XLflz5f89P34Gq/qMP1Y8JPb1WrV1FHkr8wmS9NMBKpdzcnk0+FlS+q4bef/vOzn70dXeLbTmxIf3i4WjZQfk38ffGGTLlNJKP/wPvZw+HVRw69+eH/hL/jH9V3P0X/LfX47XzRwFNmRZ99muVyLQwnT+YejX//XvIb201+X/oY6jiK2ouo/ZX/iblL/o+fr8S/fzqXn0uTEkp1fF7JTX+vzfHakp/BlnJ+uev+yrOEfWH+48Bf8PZOdRsKz+nTyW7/P9bud7SGYfzn9zc2ojhP4okVatrYyHshOI+F57Si205V0vH72lq88FDaTeq7V7LeLojN5kJ06y7J8bf2PV77559Sj5xWnuo/vBoOHbL2q69wlk+GJ7+z+/bv0VL3iKsccQnZuT7csRsPkoGS7ndZ8HMl08PhUTz40WnZeZX1t+bK+u02ztMUh5q919kq8yey83gGfjKd7rdGmuutHyXj8saH27lVG58XQdpND2LJTJTvfPrr42E7b78jg+OD3mZwcK2rSgzHLu2X7pYzsFHiS5GfONDtOnEynTdcSrzE6d/O0g6OQnSJhyIWn8Xv5cLBPeM5FZzNNOzkM2Sn0IMnNfnvXeFV+NnsvPMXbOp3dubJTKDtJtrudPzffIk2WN8Jz2t4swPtpZ32RslOsARNqba2cqNk8/+jR23aq9Tm4nXU3BiY7xbIT5l23M8titMq3eq5wInv19uAfMdTXZKfEfbmbFLhJ2q/U17OO6yrkas9dP5Blp2B2Qm/Bu3aOcLjKNXqucUphNfk1ix3XZWWnYHbC7Kl3bR1jfpb1FS4DqdYQ/C2eZmBfsxOuQbzZyVfbtqO14DyeknWosXU+5aKv2QlRiDc7e+H5cyI5e31s3VdjZSfi7OwNoOtr21sCHUH3iewUvCcXXzrITr5DVnfB3mMngqJEdsr2s22HbR5nrr/Agyf32IlhroXslB3fabf8zzWOPXjCYyeKAS/ZKZadUOS13L2Tq7X1/cGTK0eiuFtlp9gdGW7hzy2vTgwzH/s+JzRcg00ykJ03k50wnP1Ty7WF3K4kP/V7Zk4oReIYKZadQtkJN3D7rY5wy/R7PnWoNkcyvU92Sq59a//+DVWVfo+PhqkgkWziIDtFshM+3UWRF/bi73WlLXTXR7JP7dee1gfCXqkFLkSur6uLIiYMy/a60vY1rp6C3LDF39b9rDyfH+ocLsJodic17bDurs89baHJGcu+W8/lb+/2AXuuAZztstnb9bibDp5dAXeVbxEr3dyJZpzrqULQv62PfywtO1NmJJNpfmOJjob2w3h6jxs84SS8i+aYksd6QJr28GJMHgvxg1esTcf7VenR/hZ6tW/lXlBob/V4asGuq9PcpHgfRSc18PKqko2zPi8f/Rpbc4cX1df4ouO+2TsHlp/HfHWOR6fDVc/qK+U3mKCTq3PcZr7s6tB2w4KyIztvMTuPd+60o0fPbl5Duwvv4rw679yq8Xl4f+4TXb0DtJPNEuIS+hpl5+31FXzXzayYMC7Y2xtH8RG3vV3CYwqPCkuk2RmPs2zdw6sxHI8O3+w6PXin8bF36HbRVJWdKOtsT9O1ejhu8L0g287OPEaGo/F4f8S0i+mg6mwxFh/Pc3R7F57nOkCB7QeG01n++dPBCjSV/Vx2Ilm9kxt169kahOH/fvxhkxQq+PPvkmq/1qaPOsbxnb6ufQuXolihMVqG+dTtD1AaG41xTo411wWLsfy+6q2XfObkxDinT3aKBiG3r3rryzfNBY2x/JCdwg+R0NnVdqsjLLru8Rzi+Na+yU7xCthu6XPbe4Na+7ZXdH1eyc5by064ei2fLGuu9x6+sVRcZad4dsLyzZar3LtJqn3e6yOchU0iO28tO62/J/6HsJdcr5cbx7u3oeyUuXqtNldDlS2Wmn4nQqsvkh4T2SmRnY6mxoTNsHs9/X43FSSWcXzZqZSdVmcw7bLT83dd7x77kcwfk51K2Wm1r3j3z/b7HSK7eVSxFCHtZOfbuph0cVH/6nQ6yi78FW81O8/vCux1L9v3e2Dx7UREs4dtK9l5auxetL/Z0wucNuO6ntaVpuV2tRRgtPrWwXc/fuh5dgbD6fAhjWUJQivZee4gueDiP28lUNvASqXshA0NWm60D0fjQbYaEJU2srN76V/lOZShe7KuZmKl7OjwouXshP02KzZ2c1OY62poVMrO7n/EduK0nZ1q4UmysGizy+yE8f2+v62dtrIThuMrhSe/6qy2jTaqZCeM7/e8s5jWsrO3WW3p2y6/2rm+o6yQnTAVtG+bO9BZdnJ9u+XDk2vr1NnOqJCd0FPQ+4EWWsvOXq2tXGPhaTis7hpblezkNg31Bhhay06+yfJYbE+KVnnyr5iu9+VRpbOz7Phl1/Q0O3tdZY8337xYwb33iul6W+gls9NMowvZKdtseXz0zM7fscl8f2v1Wju3SmVn/0g8dmg1O4fhGdzNX79nh7PZ++aiUyI7yWRy0+CBIDulwzO4W5yeoTWaHb7Oo+Y7NmTn9rXGV5KMDl9o1fNFNHSQnf02w1PtZ7lKj5b00xefnNUbnQIvSDzBbGbaz85guLp58bVtmmb5l+CMRqPJy5fe1P969qrZER26yM7BIGkuGtngIRsMR0ffFfWtdjep/YatmB3RoaPsHPY6F9PEoVXLTjRLFokpOy2NlQ/nX0r+xP20iYWCVbJTdFiKfthtttjafnHjxccI7tewQ2thtzMPHY60QNqc3jidF624bReLpu7X7GOpj29X87W7hb061NNMs82k1R0UiqWnweQcGW56xSZd2SyAl2aTWjdvKlpzm/58rp2zWDV6UMP56OZceB8LlPU6yzxxiOuJN5l8Oh2c5coNC6fjMx4fKfvvszQVHDjf8BiOH/97+nM6yB5SpwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDL/B9n0iy4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDQgMCBSL1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgyOC9IZWlnaHQgMjUzL0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMy9Db2x1bW5zIDgyOC9QcmVkaWN0b3IgMTU+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoCjE4NDg+PgpzdHJlYW0KeNrt3Gtu2zoQgNG48JK6/xVkT6qBAEZao7FEkeLM8Bz0133gOpRIfqJyfdu27QMAgNh+GQIAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQBAtAEAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgAg2gAAEG0AAIg2AADRBgCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAABEGwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AADRBgCAaAMAQLQBABRzNwSF3W6/f/4Htu1zzR88rKpXBNPHzW8Zp8P9sG2bUVh5wa034fMWmyUYc8cUsJ7zAydtqy+1j3+30jzPXmzAcxYvniANq5mhK8/vtKWf1TLFSg0lbzxz4eTWYADrcdJmhTUmQOhJ7dzIAPLFSVvWRyjjAHgew64h2jDxUvI0CboNO4how2RDeoJuM4yINubNsWKJoHjAYmg1cwog2lBsum34JxedwDWrmW5LmQS+XHeFXJMC4y6EsWWRBWfQrd6w0Jl0HTcIg5mLr/yoOSHNQyCF52Ll4Kd5kff96qKNlMVm7gGpK2TP6qcz+oav8UzE77QVKTa/DgVU6g+aN4KGMXTMKdq4qNjkGqDbODmGuk20MXbOyDXAakmvDcKoijY8jAJY33Kkm24TbfSfKlY0AEZsGbpNtNFtknglCugMdJtoI0GxGS4AdLBow3wDoPI+snMrcdgm2mifGIoNgIDbE6LNlFBsAAxhTxFtmF0AlNpZHLaJNkwGAJwIINpMKgDotMU4XxBt7JoGig0AEG0A5H6y5TyHbaKNDhPAMRsAQboN0YYpBEACDttEGwC0JIIn276Mp2jD8woAINo88QB4suWqrcd1EW0AcKwMPNmyrLshyPWsA1ByaXKQA285aQv3EImdDFa7mfevjSadBU20ARYyuHoKPFrt64/JmIJzh+m8HhUH7Lo0/6xWLhZVl6DmW92ODqINJDWEvtWvyTVzELweBcBTE8ZZtAGAkgDRlotf+ACsbBZPEG0AVE5D6QaiLQrn/4C16226GXBEGwAkoNsQbQDQ6OIXBbqNZfmeNmjZKrzOZoX7fP+t/voF1KM/pDmIaAN2PdnbM3Crv3Zbl/+iboP/8XoUGjcV72hwq5/3CK/nH5cARFvu5RJXDRa5mY/WmwmIaAOAmXnk1A1E2/yHSIMA0HHBdNiGaAMAD7og2gBAt8Xj5FK0AcCobtMZiDY84gAAog0ASMXbatHmjgfAyjmftz2iDXMGABBtAMB4zjtFGwCc5R0Fog0PKwBAFHdDIOmgr9djj6Q3dpkfBOxNNThpc/fD2ND5yPn2qswPYlHFMIo2Os+Nx18xYShZbBlzR5xhb7I3BeT1qGca4ECxPf6uyYu9iSmctAEhYsiHBBBtgCRSbG4bEG0AJTZgZQCINoDoebT/I/mNH3cLiDYgvf1BE2onVmyL3HUg2gASd5uDnMhcHfjOV34Ak7fkWSclR4PAiY5ig7mctAGdHY2bKXuzYgueazsvkOvCUpy0AUO67VAVXXnk1tCIyiBsTINoA7i62y5It7YgUGxhW82lQbQBTOu2QenWfH4jC86P4bi7y0VBtAFM7rbviXBmbz7ZGbIAEG2AbmsMr7ch1etASLEFv6kMAqINYNQW2yWnrnlJpwkUGwTkKz8Ae+1fH1ITuItAtAF23E8fDz0NbbweBSaEkf8VERcIjnLSBjaSOUMXZ/Rcx8iD4IANnpy0AZNDYeKpmxoQkZDIbds2owDvp8pLWNhURo+wJih/FVwXEG2AaNAEQDVejwKBPKOqb71pNUC0AYytt7aGU2mAaAOY33AAC/KVHwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AABEGwCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAAAQbQAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAACiDQBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAADRBgAg2gAAEG0AAKINAIBI/gCkqoRBCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDMwMj4+CnN0cmVhbQp42nVRy07DQAy88xX+gbhj79NSlQPiIbhV5IY4pI9woUI98ft4k0KRACXW7mTWM54snUgI/ggV9Re0Ozq693r9dz0Rm+VAH44645gTHSnm+gXe6Ik2f3SJVXaLYLNjRgOipNlYvbkUzim3AVYPR9DNu4tcD7S6E9LIpRahYaIQAguMOpHASZWG/fMayCMkBkgoXgfIuAcQIeI4x4XLuX8ZHmdBKaySYhPUwIZAnRauls5yo/Vx7d2ulLa9YN73XXBqcqVRFqy1MYed1xaq07xf1v3s1UWwaJs2KiPVi3zyxpbfB50HblZmLlnMD1QFttLqbILonKyXMJiAhEsYYUtJW5jqP7W0MAkc/IoWu6p9V1oENL/vsd3Zw6iOP794kIWRWf92+HWRm6tPa958wgplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzQ+PgpzdHJlYW0KeNpTKFQwVDAAQkMFcyMgMlBIzgXy3IE4nSAdyAUAh+oMRwplbmRzdHJlYW0KZW5kb2JqCjI3IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNzAwPj4Kc3RyZWFtCnja7ZhLb9swDMfv+xT6AtZIkXoQCHwYsBXYrVtuww5pbO+yHrrLvv4o2/FDTZCizU412kayUvAh8+c/ZfNk0ID+oIlOf8EcH/XqTv9+PRs/7c3HL2iQLXFwZt8ZEmedeFPFaCOI2Tc/dgAOAZIDiAHgoQUgnOcPWP/cfzWf9wasg6SfFFk/OQXz7e7M4p/Jr1gJLmS3YCqMYsmlwSO2x7pCpJCdp7pKuoQt4AF1BEARQCYdg641w1xzxRCmYNYpzq40UZueuWtvk4SGYB37k9WmriTwLm8SYMO17IYUDk3tx4wC15WL+QuR2uG4KgnwwY856rqb/nsc+7x1iwaLL0rakSsD7OCVadPCtlaPMKtpJOumzMG5bryNPkcJnOo0ZImaDXQ0Z3Nsh7uX76pPZ5NZOpRoOdLKoTqrKxYZZx5gm72v2bWiyQR4wnWZLur/9GS8AQfOW/ShJCHT6pJiD4dQ80hAfpZpxZ8uKdYOpkfddRDAhpQKjxe3asNjg+IiFKua/T9YULSIWGLRKhZEWRG0mUBqZ83rtTCCY+51vgckK0TW+6ZXTTfKadYOCnVFu0EVOTN0VMsnrmZpvbolyBpvKOPdAHoPEKwq9M0QlK2hFwtO5oazkqgNERx9/6zPLe5JA/qu7kKtll0d9ZGvbHfull1dBCuJp7CXfV0IY2vb61UztKwSru64miTyhe0NsW12O6ATSVm7CyxuA7QelQWmE49GGCXrGKheQTeoUgZCFeklIHsuTXZ8Q44J2CYfp2iXHBMMZ/zxCN2zPLWnF8Jf+kikUZc+Np632evYZcGyXhco3K4jJQw2oSuR6A9qkqWtaeY3L33niVffNJ3FYulnw2KbvQWLVc2ewWIcn4wlSd78zUoVgreR2DyqnTRf/jbfzf05MfI2sMpniNGmdHpFylT6uv/wD6PJ8pIKZW5kc3RyZWFtCmVuZG9iagozMCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDExMD4+CnN0cmVhbQp42lMoVDBUMABCQwVzIyAyUEjOBfLcgTgdJ12ooGdsaWGqUA7k6ZqZmeqZG5so5CqYmFkguDkKwQqBCk4hCvpuhgqWepZmRmYKIWlgDebmehYWFgohKdE2BoYmxiBsFxvipeAaArchkAsAV8Qf1QplbmRzdHJlYW0KZW5kb2JqCjMzIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjU3Pj4Kc3RyZWFtCnjaZVC7bsMwDNz7FfwBK0eJpiQg8FD0gXYL6q3oYMd2lhpFpv5+aTlxgxYSQZ7IA3VHZ2KCHabo7YKOs6Fni9OW71vaPTFll9UrtRMFEQdfk09OcqB2eN8D2oElgEO0GMHdAEDAbFhl7anC+66pfIIxutzI3gZsuO4bRqmbKlhrsuGOV1yGeTxa9EafSr3mofloX+mxpTO5kFNN3/ZhLy4i0kyi6Qo+6Y0OmyATnZMztSEX8YoFsCcO4lSoKg+LFbuXGfTwdcP9m283V6q1i0Euuze4bv9n40KI0aWULhZ6BpIHogL9CAT+rXsuWkXFhSjGLRSz4mrB9UOHux+zIWbLCmVuZHN0cmVhbQplbmRvYmoKMzYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyMTk+PgpzdHJlYW0KeNptUDFOBDEM7HmFP7BhnHidRDqlQAIkuhPpEEX2dpeGK67i+5gNeyCBEsuezIw0Dl2ICXaYorcLOp0NPVq9XftdpdsHpuyyeqW62qNPTnKgOr8cAG1gCeAQrRZwmwEImA2rdE4V3rcy+ARztFzkYAITj1NhbHMZglGriRt3vIl5OVlNZl+3ufe5vNYnuq90IRdyGunjK5W4iEhnEk07eKdnOv5Z6bdrUB1dDPLtu8Lu/Gf5QWN0KaW+/p5FeHTio/H9VzwDyQNRgWkBAv/ME+/x90DHm08eUVeiCmVuZHN0cmVhbQplbmRvYmoKMzkgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1Mzk+PgpzdHJlYW0KeNp9VD2P2zAM3fsr9AeskvqgJMDwUKAt0O1Qb0UHO3Fu6Q033d8/UpRsJ9c2iSCLfnx8pBiaV4MG+IsmOf6Bubzw6Tuv5w/7q7GlkDdvfBqKDRTNiwmU++GP+WmezJfZfP6GpthCjsx8M8F5G3wyg0s2l2jm668RwCFABP4EgIUA1g3As20p0+/5R6XAYH0gJxz8WFxgCm8LYqPIDiCRuFWXr/O9QnLWUeoS2+lO4ymAT9EikRkQyFLXmFXTiqp3Kaw5HnrlWUU0zf6U9rBTxmRTDo2T/dDzwm0aPMYRkAIgVx4xTQMSG9YIGNepjB0V2O/mBaFrwebLVnkSp7gCBsb4pPzL9cCol8QRBFGP7EmDEe+cHvsoQtSwrXp2Xnl3DeDcbRpCQea9RFHSOSVy5xWsaKh+yD4Lv3HUtDAONTf1E6XVoGlJMiymQg+pcDuXTJIsZUIcO67SxMaKqVVNQA6bVbSKslJUmWb84PT/ghVSLFO4EOqlc6Mh2hJbX+9ONRre1bMm6JKvFZpEXnJicONRehEV80n0tSOEQIg6cqOjTg8XdwTaqyPZ3YWu1Q+aEt9xo9mroQwS97Idlynq/HbmPgrc8b1hJOo5E1Xg/pZ8ydqHAuv7uVbHP0Yta+s8vYpuZYxmcZe8SK6rd8DHO6hN3SbIadb5kmObJBRt8mEfJe34r3nHo0ZQicddzq0ttu0xwtOnd1bUNi8KZW5kc3RyZWFtCmVuZG9iago0MiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI1MD4+CnN0cmVhbQp42m1Ru24DIRDs8xX7A5BdHgsrnSgiJZHSWaGLUpx9d27iwpV/33twZ0VKBCt2YAYxA1yBAHUQJKcT4XRR9K51fqwvFZ7fCMQKO4a66KbLNoiHOn0NiDwiBY/kk9aMNE6IGJBIMYd+xozOjcW4jKoYpYRBCUqOx0LY+mK8Hi1KHqnjRqb5pHVU+dL6vk7lu37Aa4UrWC85wm19VbAJE1wgcN7BD3zC4Y+l3yrDHG3yYdM9YFf+Y95wSjbn3O3TvLS3+CiWNRPcUnHU0miGhNdUStw8i6i3JMPupxiOYZXkYvLGaRngyu0B9it6r/+kge4J7J4OT3cr1mafCmVuZHN0cmVhbQplbmRvYmoKNDUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0ODM+PgpzdHJlYW0KeNq1lD1v2zAQhvf+Cv4BsXe84xcQcCjQBuiWVlvRwZbkLM2QLv37fUlRSSwnQAbHNk0fRd/Hw5dnHg0bwptNdPiQmR5g3WLcX8yPxuYcxPyDNWSrwZsHoyFtxh/z09yZL6P5/I1Ntjm4YMaTUSdWJZrBRZuyN+P864bIMZEnvJToEIiOC5Fg7ZDL7/F7c8FqRYOrPpgtZYELsZm5uzguZWDCj3kpiim59tev43mmwVkX4pZqt85yfRFIiGxKbOA42LAF4sI1wKLF+WY/5xu1oLB8UzPvFSSiCaV5/7wWtc+9UnjsqT5BtgxchOQE3xLY/Lh9ZfHv/StJo0iO6/OWMC8zOXfCPF2EuUI4HELwcReTNBVQ4JwLO5gnIQ5KzAvxhAFt4RmxT/uUWgB5IRiU43AMm2McK+f1uB01G+qhtg7yrpY7YRy3ktd5lisTdpJtpAvC84cQDtinu5i4Jk3mlSykVElupsSGpsE+8LsAh2iz9svoVK8MSyhar3EPa/kQWN7mCussZr1lLBgqTZOu6gSCRamww4qt6vEwQyvbHQa8VakSyiDVnsugleyEXrPRru640X4PaRFvY+Y3SaNXSU6+96qAzaJPzaqbb3XW2szEYV9Ea02p4z7RPsbdp/8uG0jUCmVuZHN0cmVhbQplbmRvYmoKNDggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNjY+PgpzdHJlYW0KeNptULtuAyEQ7PMV+wOQXR4LSBZFJCdSOit0UYo7ny9NXLjK73uB42Qp0bFahp3hmIEbEKB8BMHIQjhfBb1Jfe/9pcDzK0HSiQ1DWeXQRO2ShbJ8HhB5QnIWyQapC9K0IKJDIsHs+owZjZmyMhFFMaXsDkIQsp8zYdtnZWW0CnmijhuZLmepWeRr2/e+5K/yDscCN9A2RQ+/9VVOBwxwBcdxgB/4gNMfS48qxex1sG7T7bAr/zGvOAQdY+z2aaX2FotJRyvjHoqhFkbzk7iGkv1mOSWxFlK1tlQ7WbGXOHAWyeJyHdQEHhTshkK0hsY9EWn2Pd96bnb21vtvFfUbR2Ijg9PTHZWmcfcKZW5kc3RyZWFtCmVuZG9iago1MSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDIwMTE+PgpzdHJlYW0KeNrdWkuP2zYQvvdX6A+Y4ZsisPChQBOgt7R7K3rwruVcmkN66d/vzPA1lCmv7DRB0CTOriTOcB7fPDjy9GVSk4S/agoa/snp9TNcfYDPp6ufXyYRozfTP3B1iMJ6N32erJ/LxV/T79PH6efn6d17NUURvfbT82Wy2ghrwnTQQczRTc/nP56k1EpKJ+GPlfLkpXxZpDRw7xSPfz7/SiyUFcZ6jTwOCsiNiEplclyO5KeYyIwisl+eeym9FtqHIma+6uRkm1ithQqwTkkvfN7o1R0j7qdQ1KODX22s2717b5iih8rABRFm20RVBj5qOR6MAg7KW6nA1kqF40F5uPHipHIvuFFeZYHuYnBF+pxUpoW7+BsSuRepLKwxIfE/nduaRIX74Arvy87Gp808/ASNgCatQGngHlEWvvjsbKXWl+PBRkW2QEkKT9y58MW1KAPRKaA5wRPtsyywTiXdEh1KSjeSWqgMmvfSiSov3GSoZIxHpZ7KOmLjMlcVstVwkVb5LsqKksWYJEsar4huGyz6tBZYaGvJ6QArpUR0GcmViHZTnT1JQR0MWeiI4gWNNzQzGeqYlqBzkBAdkNGAl69Lb3EiJ5GbriBuvkfWjyUYSugS2DlWlRdOIdSjFTrkqNJ6fpNQWxFlWBESxouF3XzUunjgXNT1WbmCuMU3p69QiFbbK79WENPS3i9/RwjyH5WWBaI2+R38kMWrkEn+RH2KR0jjF/ItBhaiaOwsVBI+CWsy+R534kFBIlTMVKCrUCBSYhPvop0Vg3KSK85ZkKX9zPY8VN8FEY3JqkMCBuQRgApIE+CBo7cpBKrQsKdpQZ0tVhYWwXLY1WTS7MjdjFRuraR3KRdUKCzJjiGbF1MANyhDDeUc7f06tIjlKFfS2mHoJ5qXnO2aNSgRLSXOuAIoMn1K1ilPu7j3JVXyUFE8VMiOd4bKtR1HWYqBeIBvu4HvmppWGTzbpPoCWFGdMB7hATU8MTym1H10LGFRahhFyXVG3DBtdnVOq4mGp/1ETxwZEkdaXmXRRFbEK/WDiVqAWB4neYlkV9q1YoakAy6TQurim+WVrLc7dXFi6U8DaFflrqBNVruCdnIyh3atSKk3oSR30yuFhmTxjCevcFc74O4O08jrso99TR51bSfcKv9Bn9H53DylempYvTLdzovJDpXFlGZYrFEObFGc4+t3+REqjw0G+2HIw24uIDjfBwJOPAZBVFsgiHoEArrLG7F057UkrIVsl4IvhtyiEZdzWdtSV+W3sHg6c+oKFFpXrVuuGlBiy/jlOW+WW+PDFpSgprzbDDGCFa2vsHpks5KMm/x4p+nWoSe+UaXXiXsEV2P8BlzpSbdhunMDrgfn8LjhXO57TWAwSADhXKhXyLvUjPpGy2SMq+CoOyyUTM+mUlYVrSnKuKGtigCpfYLTCT8UqLyBtgtr5o3vEF/ulJYb8Z95dkIO/KTthTvgZslNXkjb4olCrzOeqRV0WObw5DVr7hxlRs5RHHPp6labkVbc22ZwqnK1x4lKbzkxMdxyIj7tnajM2onEoXMib0moLCSqccBlZ1aaO5yZOoWiMLcwbEpHx7OtPTlPRkG/VeO0yTmTMrNnXddV23RVEQeVqpx+u9rQHTRauhqz2DjEg6CXvQUvWjVB1CgRnC8Fb7mr4HXEch7mM+yF41PpzlB6uRoJDBJUOnjEda8et9N05tsML7faisyW21MO+y951R1JFmxZjzaL2DF0kLyO1at8HsvNuu7GUy2umn5DGzfwyFEPTUpXU4SGZTqlXXlcCgWelkJ7A/8br6bfPgxu/v1pMLKDKDVBCeNCBypsqa+2+Q+2w0kmQLDfE2eDObXmQ6p/E9QgNzhQmDoO7YaE2t7pbaPdeoZGPOoMTTveuKiWEMphjmZhenVgNdokn1pqA2vEoEiY3dImeTSXM1wxQW4t1IwT0/mo7BNL0tp0x/w1fxSqdJxlxsIMM556MYPk+SNW8DQvTYqpZtRcoLp553k5Rj4Z1GZryKo3ZoajujG2Tj1p8m6bkm9xWbpCOYf6ttaLTp6Xujcf7eBUS8XiTBW256j56XikHDcnpPO9OCUKjrB8g0/I51uYorlyTfHnup6lzo1N2jx5Xg3X2yx4RIjz/pEsOOVwnW17u/RKxf3z3cQMzQcxFusUg41vhkB7aGrGByUlha0mHlmCe4bK1iuhbgyVOwZqUOs7Bvh+p76coHoEDVadPIZ4/9CfiLZ7sFmu5/VXVZyWvD0U67bqomdkz02zOCeM0WCWEIWSObq1fXtK7h3UK7sixHQ8P7VhXA3QPgGniRZ9ZOAvrNz6hRWsaR+aJw/y4lrMoX4xCGn8A/pxwkf0I3SR5+q4g40trybNN9XtnqvlJX9e8QUSCZcR204dtg5XcomkA8XeaHPQoEQfH4+2jkE+atYXG4692GgBd9/Z8SGwOwOnBqnvB0NH+M3B8JWxQdvtNSW+dqYtVr0SKLM3xMC7Yjb2Aatywu+eQr6lmYYx5WcRfPiKmOIM9sXU3nHaY9E0exEe8Hoj+9Ej6Wjk7he5u8PFSyu8eaDidoT/J9OVr8HseZ+928paC+fdA1bmhD9+qj9dD0Gtu+/bB7tNaqWwcX7ApJzwxzfpw2D8MgkTZ5e/JgbaByhu5Xti+XLrC21eg5EVrAtBzHN5gXfR6z0+/vQvem6+GAplbmRzdHJlYW0KZW5kb2JqCjU0IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNDA5Pj4Kc3RyZWFtCnjazZTNTsMwDMfvPIVfoMF2vqUpByRA4jbRG+LQbi0XdtiJ18dJ2tFJldg4AGqjxLX/SfxrYjgCAcpD4FlehN1BrEdpb6f+roXbB4KoomMH7SgfOSgTNbT7lw2i65CMRtJe2oDU7RHRIJHYzlSfc8jcpYYDiqKLyWwkQIJtnwjLODVaXKMEd1TtEkzDTlov8rGMa79Pr+0T3LdwBKVjsPCRd2WURw8HMC7Mxjs8w/b7lKxVWjM0+cuUFxuaFzmT6YXMWWWsOZOhCSnItmNMzNIL1Jy9UEl2yjmbAoc5lobe1DDyqaEc1NsCJtZ45q+2AjbpjLQfEjHOC4gzujzHBHReezWhNQ7sVYj2ehBL3b8mkfVlKKe1nNjsJawnOKvm7XX7i6EZqwKH66Etdb8OTW5jqJI8d+2TsZeDlOt6MSGnlXd0PaGl7g8I/fioLKtT4yQbr81Un05mrVArRbZxXm5TmA4GjbrMrgPnOcVfaTCVjZRNxXMMQkguZE5yyMmNqXFW6i7ubPlpTZjqrfaJ4mp92N58ApDmXQAKZW5kc3RyZWFtCmVuZG9iago1OSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDU4Mj4+CnN0cmVhbQp42rVVy27bMBC89yv4A2Z3uSRFAoIOBZoAvaX1rejBsqRcmkNy6e9nlqIUW7aBPlLba4qkNDP7Es2zYUP4smkcfmSOT5jdwx4vxmdjc45ifmG2y9bHYJ6Mj2mZ/DTfzIP5tDcf79hkm6OLZj8Z78R6aczONTblYPbD95bIMVEgfDzRIRL1I5Fg7ZC7H/svBYK9FR+dYgTbNAwEsZm5IvjUZQzJER3D+uDn/bnO6KyLzSK0zs6UntB4hifBmR1TtLHyqEJwrET9uBCtAbIMVwnQgn+JbL7eX1l8ebxCCYnczPuFjseJnJswHi9o3oHORdznN5yaDEbyOUbiw0A0CTFygeubGupYGOQk2/AHcbKSc8VGXkI7wwOaZQQ0LOcOBSE1gT2rLSs+Q4onpklr5JaEq9RwlX1TqVFPilPc8bDQI7RrmSBWrBHzkjViKc1h3C6+XGESsjGEDd3qGmhgWpzqtUuHxfs1EHCsbGmekQk89VdxPmuoYezYt7MCmt7JUZRLIN5QFUc1l2pZS4aVjpyEYmuu/9DVf+siF7NtJG27aPgvXZRsyG7DScPQOWmX8i5hKWU3d9ZWx7WMinZO9OuLp9RQH946R6EArcndSZS5vfzN9nK/017zKhK37Ksf7qYfJ+R4R8H65X21RvwC0aW5CdECc4lWcQVSYr1NRTtulybqmOq9ClEe57JXBSjSOBQBZZxQhd6/iSrXui7b0OOAkJxCPSAiDhfx6wlRp7cOM5wgAe/P2KAh0lJtk99SPHx4BepmnAMKZW5kc3RyZWFtCmVuZG9iagoxMTIgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1MDA+PgpzdHJlYW0KeNpdlEFvozAQhe/8Ch+7WlVgg+1EipAAwyqH3W03rbRXAk6K2gAy5JB/vzDPqVZFCtLHDDPvTcaExd7s+25m4ZMbmoOd2anrW2en4eoay4723PUBF6ztmtkT3ZtLPQZh8bMef9UXy8If1VP513x/vnbN+1T37WM+fLSPry8VV6y1J6S+3EbLhOe9Odym2V72/Wlgu13AWPhnqTzN7sYesnY42m/rs9+uta7rz+zhtTjQk8N1HD/sxfYzi4I0pXIc2pqhtdNYN9bV/dkGu2i5UrarlisNbN9+iScSrx1PzVvtKD1Z0pc7T1cSEUiAOCgGbUAJUexjkijxMQXagjSR9DU3IAnaEqkMVBBpr8WAFKgk2ghQRZQhtpQmQncJDxm6S3jIoVPCQ16C4KGAFgkPxoDgwfhMeCihTEJ1FRMp6sejCkT9OIdbFYM0KAGhpqJ+PIYHpUA+U4N8Js2MJ74fdecSblUOykE0Qa6gUxmQ70AT5BoTVDRBvkVMRyDU1HC0xQQ1HGWYoIajDFPScJRjghqOCqjW8GCgRUN1eXcLH8tq+h3k9428bzAvyRKv8H4c+WzEvy6wEBAbZykRFkoUIPw1ggYgktWIWIYLQnlh/heznpj1nH8e8+bq3HLu6GNAJ3o9fF1vP78X4zCub9HvH5kRD6cKZW5kc3RyZWFtCmVuZG9iagoxMTMgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1NDk+PgpzdHJlYW0KeNpdlN2OmzAQhe95Cl9uVa2CDdggRUj8Sqhqt012H4CAk6JuABlykbevmeNNf5BC9OFhZs7RMLuiKZtxWNnuu5m6o17ZeRh7o5fpZjrNTvoyjB4XrB+61RHdu2s7e7viazt/a6+a7Q71y5fm8PnHbeh+Le3YPx/05fbemue315pL1uszol/vs2bCcVMe78uqr814nth+7zGbxyZfVnNnT1k/nfSn7dmL6bUZxgt7eiuO9OR4m+d3fdXjynwvTSkdR3vd1Otlbjtt2vGivb1vr5Tta3ulnh77/87DBK+dzt3P1lB4aMPtnacbCR8kQBwUgGJQSBS4s4godGcSlIAUUeRyxqAIlBDJDFQQKddLCZKgiigWoJoow5lNTYTqETRkqB5BQ44+I2jIKxA0FOglgoayBEFD6SKhoQ6IJFXgfg2iCpxDnwxAChSCkEVSBR6gaylBLlKBXCS5xENXj1zizjNrFhHUyhyUg8hBLuGgLEGuHjnIFRyU5CBPcKZ8EHIq6EvgoIK+DA4q6MvgkoK+HJ0p6CvcGfQVUKSgr4QiBX0l+lTQ57xW0Fc57fLhVCX/PElorN388o9p/ph+XpEdvEb+wHfROLcf9r/TL2imhf1PiaA7yECYTVGA0KMIQJgAQc6KAC6IGuQiY5CLJKUiRF+iBFVUnSMyrEGIjN2X4f+td/ugt030WETdzRi7Fmhd0cLZdsMw6sdGm6d5e4t+vwELvjCJCmVuZHN0cmVhbQplbmRvYmoKMTE2IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTM+PgpzdHJlYW0KeNqr/08d8AMAXstIMQplbmRzdHJlYW0KZW5kb2JqCjExNyAwIG9iago8PC9MZW5ndGgxIDE4ODQzL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggODk4MT4+CnN0cmVhbQp42s18CXQbx5VgVTXQAMEDxH0D3WgcJAGeIEFKpCSQ4CVRlqmbkC2RFElRts5YliwrtuTYk9iRnWTnReNM1kk8k0QzmbyM05Sd2BnLVw4/Z7NvPM7LZBPnzc5sVi+T5GXebHZ2nXgTgft/dQMEKUo+xvEuSkD/qvpd9a/6/1d1U4QSQqrJfUQgbTdvb+0obPrzLmi5DN+pmVN3Sn29whQhNAj1Pz1wfP7IqdlzZ6D+FCG17vnDdx84mD44S0jdfyak8ZWDc9Oz9Nj0lwjpuQD42YPQYFon7oA69JPYwSN3nn7YWf0g1P8HIVX1h4/NTId7m3oIGYBuwyNHpk8fFx6t20rI8CPQIB2dPjJ3yrB5GupfIYRtOn7H3PE12S3HCBn9LfR/gRhYN7tMjNB3nk1Ay5h2pftIB0UuiJloH4kQK1yoXiXjB4ZmyZ8R8jsm/HxRhLkfp60SoZ/EPiawy/wWgbzV5zSUo+Qo4rMrrJaQxR7D48XX2MuLb0BdXnxDq5fwyF8urlnW/sKKemm8H5BvLBtPq5fxVJKWVLJzYqggSWPPkLqtY6q4fc+E2hlQGwpTB6TzOydUFp/+hhn4n5lR9gdkWSUFleSVwUsgg/zUQLNK06o0daBZZWlpVlJfHFcNiT2XGqglPzQzpIpDE7IqxAvbbpmQFTlwfkJSx8ehKVcISGoPQj2FgrSgYU/Pqg3QpNcktQ372xDzxfEJCag5Py2plvGJKWiRsM+CUBah7FRgqlAoBFSaKhQUlYxPzBUKzaqQlmAcQ3waKDPmxydUozKgisoA8FFQ6VSzakgrQJc0u2DcPyBhD1Ic0CjAX1WYGppRhSYZOvPSeek8TLDQZowDk1snpsYD09sKE0pBLkhqbvsE9AWQNX3+ZtWYVk351CXCNEmJUFUGFJC4MjCtsv0HVDoDVKjGpmbVlJaQ1Or8zDMGsl/CEdTcVAFRpgY5qeb0JVM1yQ8NNMll2Vell+vCoo1CU0BCHviekobOK9OoFy4vEkCZqlIAiCxRCdpRpge1Kaqvc7sag7tIYIm1yptq0pyhS9UWAZQdUORCk9ys1qYXGBtSZ6cHm9W6NCBKklqT34S3A6AMFNRarG2DWi3UmlUrDFPPRSKBBGZgXrUuPyWdn5LUOhBas1qfHtsxsWCYHSzE1No55XSzakuPbZ0Y2641BmRod/B2e3qBWPM7Jxas1rxKpwdUawptFix5YKEGf2rhR6Vu0IQQH59YQOEBtwPnQb84bZOswG0lOKD14y2wFLClAJyMAP0j0LpcVddR4AIhDgWklVfJ+kuUUq4rR5osEDa0Y0K1KgPSkFoNxmdRwOAGpCmY/ms2GyV1ZGDg/NSCXUypH00FoiAmJ/DmSDWrrvQCxasb5IxXT3pBwKs3vWDAqy+9YMSrP70g4jWQXjDhNZheMOM1lF6owmtjWinJXRWnQMKK1KLSvbhAmtWmik53ufMDWmeqojNR7rxD6wyniVqbehf8RYC/MNAlAX94lYE/vEaBP7wqwB9eY8AfXuPAH14TwB9ek8AfXhuAP7ym01IfN9PmNExrm5LyoNupPFclLL002mpLWm1Oqc2wClthAYxI19GiMt2joEe8IUYAuW8rq5a61damBSN1DU2AI0MG2yslc213R1rq4vRmAI8OXTsJrM5VJ8d24n6KR5PB9UrPQgd1IXOdIACgeHWCYVVM9zSrXekWT1+zmn0rVLDgGUDvBp0Qd1xqkUZw5YMsN54/P6KMgKuYgBABnhXcQZZSlxNE2gMuyq3WA5oBvGaco6lV+dTc+RZFkvrOw3hrlqNILdpYqgFaAFNSp9Bp5LZOPMkkQQo8yRKCvzCAjtQMPlnh2MowLOH8yvU4hc5MixssPzUL1pefnoVulp8OADyFjmzlPdNAFrh3ZRiUqcAMw8AfXPgsMN4qkyiayzSAlwAlGMGyjNeMCiMiR3FOBPyOa65yaS7Q/dqSHCRoNSZ0OSh9IKLecpdq5v3DyghOitrrK4sPmdElTHZMtEh9EHKRer1RQrpKKhDjUNtYGd015a1m1rqmFLTtdRWU5EuqmsIUYCXLJfWuB0fRglIcVuvzE+MBCJlSX6FloYU6YYFuWNa7LTC+rDe36r03uqM/rfakbjThQFpdkzoPtKF9AVPXRQWFtqgtcEees4y2WdIJmqUCi6UF1pk26iD4HQghJcR3YMQj75XdIhfoovoU8EIVFiIXdBqHwLf2pEpyGIbampSs6JLQOSkzPQJMu7QFDukFrGVHi9oJ63n0Ou0bYTjqdKhdAG9Kq91wGUO5DYGApWGIpSVJbU6jCatjAN6UvgTOCoAtAFAEbk5forxlHADeshVxhgDYhjgIbEccBHYgDgI700+C1+sHaBdAlEO7009SrW0CIK2tgHgUoT2Ix6FbEI9DtyIeh/binHkA9uGcCEzinAhM4ZwITCPOMAD7EQeBGcRBYBZxEJjjdA0AdIDThdA8pwuhg5wuhG7jdCF0O6cLoUOcLoQOc7oQOgIyXltW4FFeU9cDeEwDNwB4HIXOazmofQDCqI5zhwYizgmOQ3WcO+Hm3vKoJ3mN33FKA/GOuzQQ0U/DODrC3RqICGc0EBE+CLh95fHu4TWOfq8GIvpZDUT0c3CnjnCfBiLChzQQEe4H3HXl8R7gNY7+RxqI6B/WQET/CNypIzyogYjwkAYiwkfTT1YZWClZHUip5jlViI2fLsXhZtCZQBpgJybBfqyauIlMLE+HPfU1IhHaUvaM3OGyORU52mXLih7qznbZOhWZQXM2SROiy9ag0EuKUtyidDJG/4wZjMX9PiP9rMBYcZoZ2GXl6nlFYaeMBnb1rwRqYLuMV+8zMLYb4Ktfxr3lWqDgEvOQWtIwpibGJ3LVYBSeMWh1kc0BXiOTWq3wVFxmJncqKyrRBBCSzXS4XbZLUb8/il9FUfz0s374Lc5gZkAXx9nE4t+yV2HsxII4O5gLEBxtN/ZNMoDozQDWkpq4YHKlFkQyyBJdXdqwLqeoXAiGZSUYUtiEO+gIuuEn5MKtLrEs/o6dZN8kfhIi8Vw0RA0C3UQMwI2BHiCC4BxjlFPs9CoOxWjypWI4XjSRTMomkVPf2e3IZj0dbo8jnkmyk1G3PWTuLP6w0xSy+QPCm2bJaY+Y3ije9spcf7VfdjvuPuNwBb1VFrbL6WYux9Wvf/OXhOsOJMXmQXcOEiRx0pXrcGjUCMRgFAxzBNSyF7h2jonUaCR7NUmGQqF4KJaUgQ4TUEfcSF5JqJkOqJkSCUVxZTqyXSzb1clhFss/tO9NlO/vn081tDbGL34p3Fzftb75r5+ix3YN3rVP8bMBv3Kpecj56cbPNESL5zraemMvgVQaYGe/k71EkqQtBxZHBUqEs0RgVGD3AG3GSWI0OseAVMMkMRhChs2JZDQejYkmf4q4nCYQWDKhREXR5XRnOrpBPx4kGNsTwEEWG9gOa73PZmtfM3yw59z8umZ7nd9urbdumdj/xf17vzhf2MzOKy6nq8rTe2jo1BmP2e1w1/tNye2fP3Hg87ckQacoxy+AHOuJj6RzjVxuBoqCM1JBKAnOZiPE5rN5PS5ArMuKYDfEjcRUiM+uCcyWoX//4MjIg/v+FUX2r+N7bilcvMgu7318//7H92qiuvr0hw8c+HCxCdcBzu+E+SXSmkvfWHv8nCUSk2Oa9mJce7I+vdyhVV0ZDVBcMv01rokFJIPe7FeigeKvf4qXn1LrCcXjkzRiZL8v8mX8+QYp0WMBegKkMZfAFkbonJEaDMJebuFAmoshKQHi71JismjyphxLkzrLa1Qn6JUf4fw/ivuCSMYQVthGVfa7o79AWjQK3FE+N9rLw+xl0krW53oT1GAEe2aCKDDxrImKxGgQjXNABJ0E0QTHwGS4hwhxybSSZiUBdpEwo/XgQl5mJ1xZFfYEBpXt7uIrElTHbotG9p+c+dL+/V+amdlotcpeqz27Nnd4w4bDuWDOuw+p/iI9o/h/oDjWTV/cv//idIPZb/XFzZ7+o/3wz2K+H12RLr8/AvlFSDIX033DnGhkFd4BqI2QsCOuOOL6KrRpYuuSK+SHzkhG6tj+aCzoixVfSvgCCkJ0Q8LHLkcDV59Hun7xCy7TAfz92c/8ikYDeQVoqCWOXD03I82AVnOjr5RGVcqjXH2+wg7sJJIL8jEEyhjZVzZFO7HFOw0w3nI7xDFl+s9oec/6NXKNJ8G85PLob5Tt7OfsOfBdiZwi2+ssBsLoJgMEEOYco2VBxUks3hI3mjwVYrKBL02KiaRgq5SWxwGeNcO+FY8Gg8pFi7+u1m+5KPl9UtxvDZtf/ydzoI49B9M/h2ZHP/n7Giul1hpqLM4GokBb3hez1hQX6M011jJ9F4D/EInlZJ+FrUpdiATjieXUJelyqihe2amw4q8LiMU/jvi8AFpDJno44mWXJe/Vb/iVKjP9fnGnV5K8bMSv1FiKbfQJr8SPV/maeBXWhBVsBjUBnkE3f/BOuvmD1UcNsA5jYoXJg8W3sAprB4/+6sRj09OP7d6NvxP3Z6f61k12dU2u65vK/u7i1NTFmRn+mz+S23A0nz+6IXckr9GAssiALJxAA3hykRpAQgaCa5HtNVKUCabJdLML4qQr4gqHAoBrVxImMI+yn6ywbfCV6Cx5eKGP39rTc2vmCVSV4r/iiHs8cccTT7DL6+bX9R1c9xzXDlhOUZUywWAm8g8lufQINSCXLBkmm3IjjV5mFOkmMzWK4CUMZ0Fd6LrOEhEuIp0nJpMwCfQuuQ0fajDf37sGhuhqTsdi8SpYjAaNWNBjAl1FOWp3t7CyWAEBGHN7NCeynmWILuDOhOZe2M9j+elEbizhk9w19bW1bptXUWa2nB7QJJ+/e8s6T9IXaQn5YjbR67Rc/S+aFjSNBGPuUJfkc1trcZ64J1kbt81d2KUpZ9eFOZtHqK+z1VvrjA4L7eZq0lSm6WpxkT0CumogGZLNZWQIs3EUxSaIJGDWRjpHyr5c90eNjY2Zxo721i4lDg7Jyxe0Fny1DGCZT+cRGHh3gQDYkhbZvdYaa8TrHG1NPxvyhlLg66XOW7uzqQ2iYDDXPRt1u6P2n/xkj7/ObrVXN56NNX2zpNie/es6JoPpTfXWSMBEDdE1crA1+N9L8aAZdMw5IYKBGATQKJoevQe4YJOwGoJjPJPAOBky4prMkA4l0YS250u5E0nu4Ds0XQGxydLq8JQCAqoMlognzLjmrxxvD0S9DmvD5s6ereO7fzJwx/CGY/FQ1GOt8e+Nbxga2bxrvnPk1KAllvKGPEqNHO6IN2dqpa9s2NueiHjCHqXKpbQmUuk6a+vW/IbJDPARBsXsAJ1Alp0Lo9AFSDF4MOWrBoh2E6eixHRHgoG05ET0CCWzjmg08NlEMBj7LMqNXgbf4fdHrv4v7vxrcPEQzW9BjnoK/GoE5wKHxb0/OO5JUhF7wGEsOS3NZ5R8d8lZcLe1Sxo+u3XrueFY0BtrGmlMjTWH/ew5SCQe3X7f6Oh92+ntPO1+tG2soWGsjd4e0OI48vsQewGWGNDgAuujm8BzLsUhvvq8yaSBuwcwNgGISIBD15RVcuUzcfE3VZLdFjL/xtjgsoXN333GHLax56Pe2rqrzzuc1GFngxZrQHY6ikn6Y7sT564H6T4OczeSm56Oh2oEAknxmBqCDYYDNiPcVQlCpOTDAzk35KOQZJCzeq/eUcjVApWNpAEsJok5TolOE7gGYTV6PVmdbuFUo/AdMWy3S1Uf/wTQbw+L3xEafU5J/JP7zWGHI2T+4AVRdrIX4sGq6quXbU7qdNB88TlgyGljg9VVwbjLXuyjPXYXmIe9+D36kt3F5QpJKBvicg3l/A4LUA2SZXRJsLEG2NKAXk1CadHqJHo83Vy9bKj6tajXp/ydvdETdKkXXSFvjB2xFf+e2xFl1On1+JXgv/06HPNrflaBNdjCZEj3kuThnMUDe7kqcCMMhOoBofr4OhQxMEbGTJisTpZEq23rQpUISCXH4jEsREH+Ych4mWE3R9CMdBlCoZBzBoOEBJPBRFTCpDMRi5uXBdxlQc/DMyaeifNlnWE1uEmUqW9n69Dx/tyxfNuOUNT/0W3b+nPbtvYzGYy5ABmBP9Q4cnZ8/NyIEqAQa/KTo6NTU6Ojk1wG/SCDzewK7LQayIGcxQc7LYsuA41FxtwYVwRwQ2hcS3IIoYkFoJXn9fMccVkvsBcKAdQQSioyTBCIxxMae+VAtCInBDbtFfzRxzSudgZL+2HvrtZ2YK0fWGSyxlQyKPJk+07U8mvh5mIeeUMeuV2Bjum/gI6TZFbjKL7aZg1dbKRytxbIKSvwSjFmvgKrkKuDSZIkEYcQG1vadoLOys4XdncQRjtKLGvKpOcO+l31TkeVJVkztnNXvt0ruuy1vlDPrZ03nczlT29mclfaLVdZjUbz3rHRyRrBapZ83ibf6LktW8+OlG33CrfdC9fabgi1xRXHI8nq9iuvRFrFhiMwF1rxvI77fhvxFdgLPLrciL8Nu8z7loxYk4UMOpZAFvMaawloppAoneUvBRjJHGyyRK62CEYmni+FBOAvVkY0AApsw+ZLd1SgFXJWWZaTcsKVSMSiMt+GwbZACyea93GaViSoMZPcBTbApJi3+PWaXdnGloDRXu8KB4P72nbcOzh6Kj9wcrj4CRcVDZtaIa705q02oSrsDLg90vAHb9p1/9DomZHHjpia+kpxh6qg7ybysTE1AByGzSYmivycwQ37FzxSMoB2PfouNlCydtFETCI5a6Ym0/WRwdp1PGiGfpDJfMUdGhaoGiIQUNDoVGBLFVOqTAGQg6u8Q14R2DP6uZNmBQmFSsFbcCNwC67kLELZ+el4d9BprBa99exM0tMa8Xojxc9xf70f4ZaxfeGIF/IKUdNzD+sBPadIN/lIri4JovNRwVQN+hN0f9UEi5bBbg6SY1C3GQwXFF5F9Qw5VE4XfOi8GkrIiAcCAOWvjlrIudNpQtLd6WxHG0zflIgrDXFL5QYXk6/u7FI61vUWVu+OfurO8G3udkEM2SxVhlvimza6C5nhEwP9HxjKTASi/kd27sznd+zIczeeP3PSaXHFTVVuj0CV3mxbpENbDU3h6hUuHc/PQVhVYCtRsuVrEUoNVBeOh/AlDC2TeOoRKSXJgZzLSLXt/DxHYZWJQpTIcfjoiUJ5B8g5sV3jv+lzm1G9qWzPhpLTDmzPMPnuQ4uE65V0b8hnNJjxFOsfYpnFRdAoIV9jr5IofzdHAG3/c3mvagNeZNKfq5I8ZpNBy3qQH5sWnATBs5TzlNvKzq7wdYg7Ct9Damlx0rQ87NhKK9jkYbak229/qr1E+g8dPrfi/dRXd/p8UefzzbctUV38+KuOuMPrevh5UqKTfAvoLJ1LuG9wLvEtxe+L8m95uKuPanoTCmDfXeSeXHUzxCW6qQPW6kbNpbtx3RonzSZRMBo9Y5DSVfpyP8FGRBEnuWeILGHkvNgCfQR3ixgHSl36ku4inXHtw5f0dbV8HZ13eDA1rF2m+BUGcFbx7O1d3QqWwfysuz6WOdo0uGTLDpBJlNyOtsx1j9JwcPcMiS1qny0Lax5uEW9p5mSyZObvys6/swVZa+lZO1Bmc3fndTjkXNlinXqsgjXNzzz6NHpdpYOPSOXBRwBZJOie5itaC19/uwci+dF7xzbfMzp6z+axe0dPNw41NQ01ar/PnhsePofOY+TcePtNTU03tbdvbmra3K7ngz2QD8o8H4S8wgt5haUyr1hKeT16ToGEobR9tJxXEOy9JmmsRMxFyoljZacuCJ+WV7wv2eO3efY4hxoyLMsetXhT2h/8pca/LhAKAgnwiqBVCteIJ1KRJo3pEaci7fKsyM2WIy6lXRV9eFs5Il2bdsWXp10rI1B2tbQrWs662ncEBdlbTrs8kHY9hjJ5OajnXbGAJ1y8qSLQ8LVJP8fzrr8YU+3jE18LYfKwKQBXXKgF3phzoB8uL9VydqLtsMAICD2OHn9qJYK2/dAReA8hhiltRZfSloDej+uaQAzHpcKFytMVbV1LJAL+P1ba6JYPRkTXtfZDTzZKbqtDcNX42yIls/Hsaocg7IlEIEGU+pv/ZWlJ1zamUA4+2GO8AHLIkr0a2bHrHOhExkqPhkJGoD66Eg10LoDOK5AKuaq0kkwp/MFRFlMMLcPg5z3lcztP+VQLGEMXUDrxgUXi89dZXY5wf8uWrp61G7u6Cx2ZA6FaR53dXWdfE9scTCWzox1rb2kbuCM2affbqxyRsNATClvrpf7utpFkIl7v9Fir69z+bnfAWm2VBrLtGxPpduTbCj+H2XnSWM5JYa8kPGCEIMQgv0QnwENR6YCmnJMiFqSXVKQm8WwlOqlAhpx0GR5gAKqJgfNewtIDWCNpcPCUNIYBLOZ2rZ6JVmSq2lM3utXTG1+/swWT0RaMyCMIjbgd5rqa6g8E3IF41y7qlLyeSA71nUOo+GuXw2Dk9g++3MI8sPrWa5zZ+aGUp5w6cjfOGxl9oKKxkKvRnjJBvNEPq3SKy49qtSQSavTn0buOHj3Fc2bYa0T9zAPZx+EzZw4XeR6yrrd3HUB8j7C4yH4K9DSQ7U/H8HzIWMqUvMQIlmYkZ00iZMSQJzBcN1pMxCaj4QHY9hgfKLfDjgcobCDJeNLmtHn0B0/aaVYyASmUaOKnReVTIp5DeTz8cOsl2fBpMWI3R207t9qiZntE/LRBDjhD4uGb65Muj/mmQ2LYDWwEquqKs3YXZbE33ogx6rLTz1TX+OIOR/EnP4zbHa9RyeHQ5NzD5dxBPpCz+KlgxIy/dEIRKyXxOmuwblbL9WMlNkv7g9XQNK47SHs8EYs1xHWuVyb4YaYl+CvOFrHRpinskZPRkVJqb1KSrpF859HO8TTqsLurc42uw93331VdpSf1Ql3Vuk2W/vbdPTSGal0kG7rXraGQPkBujGeOuzCfp1kgTwH38OdajsweKj9HWc+fowT057ycoSB/zEsn8ZEv7NTrYaHUB+r9bicg1iXwOa+7In9Ad5GtCBD/ePf69Xfv2MF/cxs35vBr2fOFQ4e+sEf7PX3m1Kkz+OWxABeEzM+BG3JxiImMbsKHFJBinRW0pyil41E3ccXj+vHo0lMvbaV2gxmRxSieBa+32nyKre5TNj+7jM/tuNd9PVGV8NQHzXuqcM5W+Pk/wHcjacmlYCrwEIazpW07cm8wVDxfBh+RVJo6Rf0pgPZYrxNm1Jku01AWiMmUoa+DPyh+xR+2vx5P5ZpCvV570B13OhOzLQOz2f7uc397FH2C5PM5ftGwNdo8kJS8UZc14ky09Oxfv+5DvQ/ydfkG/SnIppOcHVPrwGabwakZBaNJAKcmUKMArh+dG7sHrFLcC+7NudyFZMr4EDEgZ4KAQo2GG9+lOcZO0gnMxcFStcx+6RGQ/uxAf7hTyX936WBe2xTRyZ0tA6fHY6OBeNTr9KQ6Iz1Kf4szLPhtbr+l5rGX0WXSjrDk/Qj9m77p7o1H1tqtzqi3wSpHehPZPjM1Rzx17tq/QkHJAa/3AtrsHvi5E2QShDwYtBfhb3gYYY3iwy0tkC89QwiHMAFMgIM3laN46dlNl6ZGqi3DjJzpYjuAoCb05sXfuxNW2ueI+KJNxcufp2kk4UNoSR9SvG47fcALy/CvX+Hv7ICOrgI9WTKcy2eoYMK3XwQqGChYFHqMe0AHIH2TgOHHuLf0ekfFY/os6Yp1x+IQhVfKejVhlx6+ZcuvEygmzEB2Hlq3+ezG5HZ/TX3EZw80SY2jqU0ZT8xnd1UnZRoxyB4qo8h/63Cs9dMfrru9P39H3uuyxOrtIYc/kYtnB2tqqsxNIYvht64AcvzH1XUlP0F/z17guX02lwFPCqsUDAjYYsK8/k7G0psHy9PvhmVPPPXEUt85IzumFdn37rnchttzQ4fXZh68s6baHw15NxzydeQiAwOtbf39bfTlDYfWw7+b7h3Z+NXPyEIg5JZN9ltzqeLnhjs7h/HL/Urf4u9g/49+RXtWz/Ze406c8aWnLbT8KpKsGzH9ZVIsvmkK231x8RfFN7ix3souy/7auqvP2sFO62ppEaWkvXvUB4Kqh/n8JAGBYF1urb8GbXJT5TEoz8edS7saICSZDASSHcn25lQgEYinUqVcvCyr7mWu1pQQ9RAPAlsmtp90bTiUyx3aMK00r53p65tZ06qo3d1Njd3djW0DA234pVu3N6+Z6umZWjPV5xxs6b41m721u6Pf8d+6Ghq7sg0NXUWptynV25tq6tWfJ4Mgf8++W9K7nR8JiRVbYTaJT7qDY6U3qSr13thQofcKH9m9tLtYxsCulRrv5IaAOm8F3bPvXqNxzRCW6Z0R/P0eq+f75M36vt5A9RfneIYFWwrQhQsPcV2wM9AOLSvbCzk7j3mR+pDXBQPVdmHMs2tJVumFOIWtqM9FIqHa0PIf+mAkZEMIfop3L8EgwODiXeTH5A6IvMGcz8afBwL18G9Gc17Jpig+tnLrdolLhgvLVLYH14+j2ZDbX+8wBF02W3VNbTjtSndYhzsdrvpakVl91TaTsb7eqbi6M9qZyFr4vkDOA0u+nLv05p/+tBXZxFf/sivYKiwxs4z+DvIm/T49TGpJWH+XcCeOuJe/S3gTf5ewulMfsOJVrJ0YjRM8AX39TdnnkyACyoSP9xu6hx59u+OVEnIc7wkc7onfRLXDMZnof6en//XdpLXvf4Op/hzh//TsJ/8DXn8w8tFvF6PF14xthscB14SSJ/p92t/zGbcXo4tPG9uW/uJP+7A8G4XV8Ct8V3NxnLecIxbyPn7YJ8gYO4Fr8zr93+Nnijceo++tcd41fR1A3zM3oO/Va+emjveeHqTj7eAJGQ2P/eM7o4H95vo8/r/4sFt0Pv6NNLCv3pgXtvOd087uwP3Edfpe+sPZEx//L0hY+Cq+x7BK3w58B+BdjnsMdkXvp46OkX4mXH/OG9HDBv+wtMLeMMzuvsH8m/DcbsXnV/z5y3srozVLtkTr3tquhP+o0QV20P+O5jnw/ur+7dhGyQbopRvzQn9KfO9It5/mf71+/bnH3pns3s0HwnH4Dzk3+9i144OOGyBHMTIvaWUWsO9vkz0sT9ayGPjINaSPbYZv7P8vP/6erGUbGab4VxArP2/yvzH598vaQDroIxzsgO96cpj8KZT/+u4KbaP3LyvfXFmY5R2VUfblZeVXpSLUve2yfpXycSjfX70YnO9R2Qfll8bxFeWp65ZfVhYx/Q7L7eKPlorJfsNy4d0Vs8F8fFl5o7JUHXyH5ZeWs8vKj8rlytst1T287LmmXKm+UrP5OuUz702pjUK5VJddUS6tXqwdK8qZd1x+tlTqD7yNcqpcnqn/n7Zh29/Zvfbz9iuOoOMjjn96v4qz03m0XC68jXKZlyu4W2ND5CDs6P6EiLCrayK95GHwUA/VuvGtd/4fuhyAUEQNeBBs52EJYUrsUNNgRsw0psMC+Lm0DhtIkO7TYSPx0zM6LEL7BR2uI51UJXlyjBwnd8Pu/jYyD9TcSSTwk22kHYpEdkDLHFy3kpPQP0MOkRNkmhwls9A2DvccI7dD/wy/qx9w7gT8Y9B+AuoNfLQ7YfQT4MlboczDGIhxkuwnLXDXMXIEWrXx7oBx7iLNgD0NeIcB8yhAd/He1lXmH4brEWg7DLQ3kjTMd5c+ukS2wVgn4HsHOQW/SOswzHWUU7mF3wc8ScFrR5VCQNe1cw3A3YfhmoHeNl56gfsDZAjaelfBby7fsZrcSn27OIUnoB9pkypGv9GIJZlqEj0BWKi549B2Au4/wSXSwnUwD/03A+d4YjL2DHll28QCpR8vqFT7Y/rjC8Q08NRIJiKQJgSfXmtOmO1mwazVBsU2MSjymmXgct2LVS8aXgTDqYJ67cBlkuOF1wUyuBCjD22dUHMPTSwIs4MLCaz9jfk+MLPcQzM7JhClAJ+n+8wNZqdZqGl6hi5+WDV8bIGRwSeNsyIZHPy/jJWBkgplbmRzdHJlYW0KZW5kb2JqCjEyMCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEzPj4Kc3RyZWFtCnjaq/9PZfAAABWrURAKZW5kc3RyZWFtCmVuZG9iagoxMjEgMCBvYmoKPDwvTGVuZ3RoMSAyMDM5OS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEwMDk2Pj4Kc3RyZWFtCnja3XwJeBtXueg5Z0Yz0mhGu+RFdix5JHmR5E2W5C2OvMeWYztxFiuJYzuxs2+kadqmkJamtI2BPuDyeguUltJe1g+QU3rbS3tpv95S4H69FHispRS4l1v6Ab2vfewFy+8/ZyRZjp10eb3wfU+nnjlz5p9z/n05MynCCCEjuhFxqGF0vL5povjuKIw8Cn/T+86c9rR9logI4TK4vnP/yQPHzszecBauv4iQ4jpw9Lr9n/9cCmYwPY1Q3fsOzs3M4q/N/BtC63cDfOwgDIh/L1wP1x+Ea9/BY6ev/fCt5gBcP4yQ4eGjJ/bNvLpRvB+hgZMI6YqPzVx7knvBNIbQ8G0A7zk+c2zu2ltHoT/8KYTI3pOn5k62xkZOIDQqw/37EE88+H1IB/fmyQSMJLUz3oOacD1c01vs50HIDCecvURj+/tm0eMI/ZlwLy4JCPH34HoPwn9H7+FXyaPsEQ691q8DWgtqofDkPwjMs9TC35P5Fnlq6fdwbVz6vXadg0PHl1rIz2H8T9nxm5YaV1zn5nsF/e8V82nX+fnSKORJo20TfSmPJ/kwMm1OpoXxnRPpZne6OjW93zO/bSJN/DP/pEd6tG+futft9aZRKo161N6LwIOe6e5wGofSnun94TQJeWY96cfH0nxg58VqLPX07etLC30T3jTnT23ZNeFVve75CU96bAyGEim3J91Cey2plGdBg56ZTVfDUPbKk26g9xso5ONjEx7AZn7Gk5bGJqZhxEPvSbQXo73YtHs6lUq50ziYSqlpNDYxl0qF01zIA/Pw/hnATNczNpHWqd1pQe0GOlJpPB1O8yEV8PLMLuj2dnvoHYqxW8OAHtPcdN++NFfrhZs9nnnPPCyw0KDzA5GbJ6bH3DNbUhNqypvypBPjE3DPTUnLrh9O60JpsSd4ERGNUwJcqt0qcFztnkmTvfvTeB9gkdbVhtNiyENRNfbse5hHez10hnRiOkVBpnsZqvrQRdGIevq6a7153htCK2UhabPgIKDQA3RPe/rm1RkqF8Yv5KY8TXvcgGQOS5COOtOrLWG8zONpHzyF3MukFT4khxhBF40SB8J2q95UrTecVkILhPSlZ2d6w2lTCAA9nrTcM0Qfh47anUor9GoLXClwFU6bYRoLY4kHOLAP1k2beqY989OetAmYFk5bQsmtEwv8bG/Kl1bm1GvDaWsouXkiOa4Nur0wbmfjttACMvdsm1gwm3vSeKY7bQ5SnQVN7l6Q6UGBQxq7QBKcf2xigTIPqO2eB/nSZWu9KjyW67u1+/QRMAU6kgJKBgD/ARhdKarLCHABIbsK3OpJo86LGGMmK3sILSDSt3UibVa7PX1pIyifpILCdXumYfkHrVaMTKi7e356wSYE0xeC7kpgkwNoswfDaWdoAdOzC/hMz0WhBY6ei0MLPD2XhBZ09FwaWhDo2R1aEOm5LLSgp+fy0IKBnmtCao7vaWEaOKx66tJ4khpIOF1bcNOVv/k27Waw4GYgf/OUdnNdCKWV4JugrwLoWwd4eYA+evYCffRcCfTRswr00bMP6KNnP9BHzwGgj56rgD56rgb66DkU8nQwNQ2HYFnrtKcHZDvdw0QJpheiuloXSoeD6TBYYT0YwIDnMlJUZ1pU6hGvCOGm1DfkRYtd6fraBR129k2AI6MENhZyZvXtppAnyvCNABzuW70IWOeai9Nx5Poiiya9nWrLQhN2UuKagQGA8doIg1XMtITT0VBdUUc4HXstUNDgfQAeB5kgl99T5xmglg+8HJyfH1AHwFVMQIgAzwruIIax0wEsbQEX5UpbAIwHr+lnYGlDT3Buvk71eDrmYb7WlSCeOm2uNA8jAOlJT1Onkdg88QDxcB73AyTAlaa6qSPVg09WGbTaDybcc6k9TlNnpsUN0jM9C9rXMzMLt0nPjBv609SRXfrMDKAF7l3tB2GqsEI/0AcntgrMt8YiquYyefASIAQdaJZu1awwI6XIz5CA45jmKpfXAtm35fjggVFdIMsHtQNY1J6/ldaz+/3qAF2USq8jzz5KTJbDaOtEnacDQi7FPjvooXjlRCD44WqwMLprwltLrbOSUqlury/ApCcnqmmaAlxKck68neAo6igX+9OWnokxN4RMT0eqbqEOO8BAN6y4u8U9tuJuYs1nr/REVyjdErzSgt2hdGtwHnCj+gVEXRYUBFqXroMnehjJVDdzMqFqqYKx1IGdabP2gt+BEJIDfANKPPBW6S2lgrqoDhW8UIGGeFNZHPvAt7YEc3zoh6vWoFfNciJLSZ7oASDaqRk4pBdgy/a6dDPY88bLjA/CdNhhT0ehPxRKx+GUpHzrAwZ7+iGW5jg1HKIqnE5Cd1PoIjgr6IxAB9POaOgiZiNj0GEjmylMH3S2UBjaGacwtLOVwtDOttAD4PW6oLcdepj1doQewNrYBPS0sRSFw7S3k8Kx3i4Kx3q7KRzrTdI1e6Czh65JO1N0TdqZpmvSzgyF6YfOXgpDO/soDO3MUhjamWN4dUNvP8OL9g4wvGjvIMOL9g4xvGjvMMOL9o4wvGjvKMOL9o4Bj9vyAjzOrtKd0D2hdTdA9yRlOrtKwNXbIIxmYU5pXQpzFYPBWZjT8HB7ftar2RV74ozWpU9co3Up+LUwTxbgOq1LAc5qXQpwPcB25Od7O7ti4O/QuhT8nNal4DfAk1mAG7UuBXin1qUANwHs+vx859kVA79Z61Lwd2ldCn4LPJkFuFXrUoDbtC4FuBB6wMCTXLLaHUzr59Kcb+zaXBwOg8w4VA2VmAfqMSNyIS+SHlpXZJEFxDUEbRFvk9PqUL2VUWtMKMKuWNTarHoJDMeqcEBwWqtVfFFVMyNqMyH4Y4TXZfaW6PBHOUIyM4Qnj6qL86pKzuh4svhpDvNku27xRp6QHdBf/AytLTcBBheIHinInrCAPhQlYcCJhv1eIrqCMUGtDMCasUiTy2m9YFUUK/uDI36a9jPNCC9dT4aXvkE+hmQUWBBmexNumBijHbQsnSLQw6PQlZHRz4nO4IKAekkgGqVzOp0OQT3hKnJUOx1k2G6TbHY//MFzS79eakN34kVApSThgseLkjATLsHDDD1HiE4lsGnisVgeQ4cgqLzFJPsbKZrBnsqnLDJvNBMxEiQ8xXfxN3V9fmA3Kl9aIofJY6gElaGaRKAM85wZMCVDiAeu8Hg/4jgHrMmY4aiqtKs6sSToowhXBqqqvCI7R5vjmK5chP1ejhy2yZKZT2YeGdLbTSZAV693wQAWMyPY9R4Pr1iMhocecphkTuDILQ6jYfEdP8bbEdOBPYDUbtABBypHARRNNDkAIzwEd3gdx88hEO8kcNWRFLBOhyY1Ia1bty6wzl/lBTxEwA65KHrerMS8TfRSjAVU1RkBHpFYtBn61gixDF+3M/Mbyg5s2DrV3ODravvJT2J99ePbel54Ec/t3Lh3xqqQGxXr7rHoVvs3NryKezdkGnp7+7szL1OdaVj6PTlKvoJqUEMCNBhzGHHnEEcwR94OOOqmkE5XlgSU+SnE8+X8cKCqMqACLqVB5HRQzlUF1EpBcDpcrkhTHBhY5KLjlKUBkCjjKDkqGkx6/djU5vPJ4fNjU6N6g8kgmqpOxabundrzsZmWI0Fyg8VgNOqiwxd2pC4km3Wy3mjRl6q77j809w+TnnJE5Uz5eg/w1YJKUShRw/jIY8pIHea4HCOtVoSspdaSYhcAmmICKBdyUfYVsNNG+ccYiH90vqvr/PQSpixES8fPNB3Z/J3vkEen7pned/ekxrrFG+69afP50cUvAb8oDgbAwYPqE6ErS5Tt4VT4vD5Nor41JKp6nbmO1Yv/SI3w/UyWJ5hBXsRedv4JHmm3yYpFQwfMwfJneqASRFmcBMDJTbUfrgmHyRzc4Sd1mOcdSVB/J0fRcaMSFfARxOKcfi0v78i7By/+HV30Aexhi//UqpgoSkfJo1ZFtv7ZQlf+Nr1Fkcnp0PXkKdSAOhPtVZjXga4TahfCORELSMcLujnAAU8Bi0CXeB5NATLljEMNqE4NgKpU6alGuZyrdIeht0LJYvEoRRUwjZDDVnP4eOv++/fsuX9/dF+VyWqU9Mmt224dHr51W3BH5d2KzaY8hsEEXrFKFZUABKClxQaLYtPVjFzYtu3CSLHzKepfcnw8BXysQHWJoMwRQDfnQuYEHSlwIoB4BVpn96t2f9ZYrYLGP2+uk/ViXtohM1ZsUxRb5jCcTFabSbHhO+wKMNS0eBNcK7g28z3FZjWRc/Qq8wIuVWx52aKPAk4K9Z0KZihRRbu8Z78rt4QtP+HiTbm58BLMZUMViTI2CygKKVBXG7L6m3mYcaWuMjrwf1Fl+IiiYd/bblFyKgCe+KN5Pfwx+TJSKf88VonD1OthDoFTOQdhayUDVaQ6/QF/Vhlz+scJVSBtrkAdqUfGsSLyNBBisv1KUogs/Yqqv1URLTwWMHgKqpqLDBUSyNylYBnvX/yBhp9sE4XMNfiCmeRxPAs8KEO+hLdYIojgIR5CLHEkcR61MuT2Vzl1YtEyZlW4EKUizMR6xGxTRIXPjFuNssUqW/T4CxaZPGqRF280WwWedC8+Y7RYjOS8yWJcfIQ0yxbmx6i9fAPsxQxKRCUB3iNrGuDFsqYRCAQqeWCNb4U1uJx1pMAQIBB8Y/udMzN3bteOib7rR0ev79OOf7h/cvL+Awfv3737/oM7LgyDY9WOKO9La7IxCjy/gHngDo+onRJwG5QfNE3Hw04ncKXcWeYuAVibGhBBPXL+VC3gScSWi0n4YxONjRPxZ7QM46W2jRvbnnmGPBrZ1dq6J5b5fU5tMp/YuqFzJPMzlOXJFq4EeBJD/Wgg0VtdRHQCHtJjOAo6fA7ExGPCn0MCxHUBHwCzhP/2IVHkpgDlMhHE1tPV3grPR8Mh1ec3gFnyGpYgvAB1HyzMQ5SP15E8O+E+EARehvkVmn9EUJa1zQHN53AGS/sOf+umOn+zqjjNLkm2Ws/vuCWpsbzr9KZD5fW+mkR1ZWORQRLN4uKpQim0WIyuWndJkcMmiJJNdgj1hpm7pjWppD6416pydqvTaTPpJMGANxSKSZMReF3IKZtQLBGphHCMWV4DUQZUWYfnwJdyk4XZTU1NTVNNU2N9VA2AZyqmSQ7zp1VUhQIrBObV6NeoL+I6iQZAjvK8SS+JZZUjsectiskBrt/UujPSEwu1YGy2flPt8G3qfDFk1ulFPW/ZONrfquUfVKaN22OJGZt1c1tnk4RDXHVvqDVJJYyRD3SegHyjlBLE8Yjn0DmmcvjtQAWZAisoS7KMg8bQch21wyhqVgPhygD1sS6QIks0i6h4qHSq8nLMBwkqMbCNonWESf5/nWiW7bIsjVy9cap+uD2xI9Z6oGf9EY/ZIUuie2fj4O6JLQM7W9sP9UgNEckkO6TtvfFgq89ur9vUHt1SXxOwyka76KnuamnrLHWGNndHxhs0v1wJsmkD2UCWn1hHmc9BKkIFoVkNwLiQQ1V9WSfiKDCWbPDykhrg2jPUWz/DYv5z4DkUxbz4EcbNOYvC3AX1WUt/IEdYXIK1wFkx/w+OezmKQjACh7HssDSfkc+ksxrNfNZOa/+1Gwev7beaZVtsMhafjFtoIFIyewfP9vefHcR3s6i/t2VPPL6nhV4xHFSg9xryz6gYVSYqHITFRnCby6EIjsWoqKqKZ/4B1A5rpoezUrPbQVRkzsZlfsdbDAYzn/k9ZzM6Da+8pDPryT9bjaJ+8SaDUTKQdwiSYnEtPk66DUa29jrg7qcgrvhQU6KeZqbeUgmCCuT3EKMJx2LLSgfug9hS5QtkY4vIMRPgOIYQpyHkohgVxdgpwt1hIz/mzIYi8XOfMzgNZrhwypKFe/JTBjtk/Z98Qu8iX7aYIMYYJDv+bGabHfC8URBMVsmw+CS+z4Gx0ZCZJB126svCoOsyMUIYCaGD/whBRsfjoWS6eGwiUS6AkhQlcxpfkRRpwjiVxdyd8F56nzKXAbEQUY6HUwlHOaTD5aHyoF+lkSrg9+sLI1U0ujKBotSSAn9GtQH/mdV+JbPtPUfWdx7p6pgtsSp3jdfXjzc3j9fXjUfxEqQhnVQTesKd/WeHh6/rbavvhAymPj7T0TYdj011dMzEgdZRoDVM/iNLa0mO1kpKKxDgoqRwU5SqQlrLGa2X3qemkwXSNHsVrX5/QKM179mdjhXJD5Bsu5TWm4+uX3+ku3VmXa7kde9tq2e0RrfW1Y9HibH3uuHk9f2t9d00XSSfZgbww8aOjNoy094xFYtOM2KZLoJs8fMg2zDzY2vUS9R7VRQWTPBYGIX8YJ/ZXNGVLTyzYSmf1bLo05SjTJMf3rW50WyUFL0imxvL4ruam1KtvqBTtOplUTY1bI0MntqQOJ0kRqfPabTp9YogGlqm2zqm47KRN4miWbZWlfWdHR68bqMWZzXd/PllddP1Grrpekt103oF3dzX0X2kE3Szfba0QDfhSH4Oyd4EFVJ/XQJoS57ta6/HfqjThmIzHe3T8fh0OzAgTy/kvEaoxGpQSyIKI1AfQT5B39nr0Bz1UkxQTPtYLlHODXu93hpvtYtWiF5Wl0AunBMSk9DKGsVVBCWVNwqpGZiNnLmlcVdnw3CRUZIskmcmtulMd9fR9R2HunHm+X0mvE3XlKzGVmvHVLy6wmCRjFJVU/c1I1uu72o5OvTFsaQ+3KMCjsBGvJX8FLDen0yvA+n4kSAiUUDn9FgUWVnugvQdhANxh26pgEScBKSk5uBgGO4DvXMFT2hQqQSNLDWo2qf6IEapBtEdtAlOp6Z9qyJVRHOYuULsZ+pJo9VqPEmlNChbLPLg4PqyBotkUFwK+Wyt/4BFli2ZGRbT7rEaFfOBDX1Wu2zRCUweLaQc5BFCHWgw0V9dSgSdFdAkQyLUqkCGTsekUJHUg2iYopVT0TCXUIKGw2Ewp45wezQCUwQD/nDAkC8gmExolsC2IbQ84XU4QyJbu942qG6K86KBFwSrszOWmis52t53IpE40bvhELjGj+9obNwRj9FjDC9ZTZnRkRNttjKzaJAETjQUz23vjK3XVHFDKEHdZHRm/frpaE4TMRqFwy/B7lQUTtR6tDqOWRPG/JSOkV5YGlVCZXRpadSsoWxd5fHwByaoLDq7a5N1eR833US4t6Uy/8nE4O7aXN1TpV2QTzH/9qNgHC0toS5Y7oPkHshnYHUsgoSeglHDAsYPLy2lI0GAYft395GPAQzH9rcI+i7zhdvg8BLQ5KW1lKdIL/KIFnzMq9MolvUc4LRVXstFqQJViZf4bH/WpsQi/JLToBh+nMwRgb0G2WgzfuOHQbgw/jLx9wX4t/xJshtl4xdeRDlc0PsBl9zep+sKFfL7C/c+tekWJzQZcd2QT7Sg6/4xWs9SHC2Suaih6ab0osDpdEVJyDY0l5hMN8LdUkQHKYgAIEQQCiASpSvGEXWouZspzQxbUBw4ROVNzfAK8l5L/E5NrWlq9dI2StKGnBJ0JGoGw3lt2B1p22pznmwl3IldWZ0o7h6v7qvOvLhKQfDj9NhWE2uJhbpzuvtbsFkVjT2oqa5GeBGTcl6DK3Ia7IY7y4OsqM3eSSWUN6belD780R02WbF29QY3NeQJmoOwfWxn5lmGsKph/+Nl7CGLX453VYD7JbV2xZuptau6Tw8MnO7Wjh1NqVhsIhKZiMVSTQ+e7es7m0zSBDrZQQMQDUOx6Q4Nh1HweWHQKxpz2xMt2SSJxVGBbj0UFSQ9lJ0lePi10p7VXLpM2tM2U57jWene9nzaU7c1Sriea4aS1/TG6zJ/ZHb1Hpr99NbHMnXRPe1tk9Hmyfb2PdGsz75cPrtMRUVBKpDUnPUa+ewqmNfOGayvP5+9fM6AbcriaaYfpuWkoQs8dfjSnEHT91NA7zp07kE3jaBZYovyXi2v21rQ1cwByhQMek7OXWoWudC8DLDCOhhnaFTWrGMdKvcHKh3Lm7SVGp3OS0Uex1s8FqOuXPEP1udkXDS5gRgtFqhLWnfW/WHZHiZak5jRVgv50KeBtgjb71+7Dq9I5nb+oQwPqlXBSh/d749lA2u2/q5asUcrLtffrmz9DQO1iiDJUvvehoHu9vE9daNNwR0VBkk0Svri7kB9D+nrae4NHtx0duMegyIK0kg4WFtrdvZ01XT5vD5RkQ2C3l0WClXXWhVPW0PXpl2MBrpZGyHzkMDMJNNhxnkdrzsPPpbj+EmBBVMqpRxj3ZA8UYDcVuQKQLQMl0+LICfy+Srt1B/boXoGenPpT2B1VpTLmh4oKxJsOoPicblrqwZlq1UepBKZNVotMv5KZiHg1pklk11qArnRDIlt8Z+wGWUz07mlP+Ff4b8gN+rUtMnGCv2iwkLfrQ0SfL5gMJWQ2c5+qd/v1620m3z5TwVGr/Cz1uMz08coWsN9/ZtAOf4CkfSFvYcO7cWlLKq+sDGZ3Ej72p7NEsR3CZXSfQcXzpf8FcslfykqrV4u+WmdLUCF3VxQYseK8I9s/JO8WS9Z+K9wFjOU/p/5LG+WiMFkNOgzzXojliT8NNHzshWK6CP4fxqMmq7C+uRpWD+Qq/vVcnl13V9RUPcHkN9fFSjO2Q5FqIqW/DnECvDStiQi5BEr92GdxWAw8eevpkhaubs5m2Iwc++6BhIV/TvOCy4iWUxYzjQDXpIBN2eeBpSNBvy0ICoU47fhoN2e+T5+r4PuCy39BT9BeIhxnkR5ZYkFciICbMPUy2fx9NX6VuZDuX3J3AZXUXw5I3rCJpuMH/qQwWy0ifd/UrDLZsNdd0hmxSx+/H6/JNtNT31VNstG/be/r5dkm/L1rytmo1H/3e9qOtUCOaceNaFEYn0J1vEy6A6hO/L0DdE5USCFGXd5XtVKGC+bUCOoVGV1IPtmxprbS6VuIO8HosJqXcsq2w+tncf7ageLnYQz6QUh0TY+U7InvmMnS1N6apKQnRA96NzA6Mk2m1mxEL0kcerBnWpt5GAKR5g+fm/jUE1PANeCQkLtDURdJAIouz8B+Somk4iylS94+aeZQrO/mZrC8luM5jjO7boxxmIvvstiUTKPKBYDrv4zNVYckS16kKKphRqnXVIk/GHas8lGY2Y/orkyhCnyINRklThG82AcwzO5cfy7/DhUb3Sc5tKkiuXSJJdLQyyNQz5Sxvb+3dl3mIzlZewVJp6irzOhkLaAI7K4LaUuBwCaAvQdpqsgMaGSYBFQ2+6MPHs0Hjs2OnosHj82un1ycvu2yclt0p77Dhz8+J7J+w4euG9P570X5u+9d/7Cvcyu6EfpL5MvIxcqTjgtEsEbYRCcSjZbpwmzbdmLZNUzFo/Hin5mtpsU2ztEUQHn+GnJBNYjZ9+7DA7xDlk08fsFQtcYAWIloLMaNScaS0HvaGGQ3cPPFtqUZp4vkFw1qqpSa5up9RaKLp4jNY9Jbp9EFL34TyC7zAWTTf+LltiWwcZNdqPZ6NALpQc750519D2MI21WWYGIaJSWOqbqekfqG2wWSbDoYx3HU/Grhp/J7ul8mzwKMfGUlu9X5UwEKmfQLixyB8BKhEkkCI6VDjkM8RNzPAai6ANvhwcgqF4OXgswEdTU7PfSl55awr/8lmJ5fzuX3mQ9g7dQecUIjs20d53sDY6VmWyyrNQONWxpaBwNyQGdbJYey/yS6fOYxSw9JOBHmmd7ew+3l5VJJtlpDIfGmuJDqgg2KH2H7jDT7fGnQS/pfjZh78XY288K9sWCDjwEJCyQHBxAhXvb68pZogZhUsxnKWo2P4lm7U3zBxFvxIpfAXR6bPS18bOyTcTdYPTWnsz/+D/YQg3sS1R9vgR46PE/yGDyp3ACZBJfyuCfAD4xNJQYiGBO9AFG9IuOy7BbEHSTwPNldmsqFUNRX1z1q1WreJ1jdo7bBS+I6E517r24SAuQ9Qfau04P1Y5XCKIV3EHp+orWVOPeLRVRb7FotuMgAXaHKdMzL1aWDvjxt1oPJPpPdJaV8mZRshscLki3hydtZtmu6Dhskcz0Rfozik3zB/iP5FvAzyDa/WAJY7uW1JTqIPXkeALE0XeDNFtZ1rtSmkmez0MU3kwl7CyhDpbX+iqpnKpXvLPLZtLLG1kiKx5WptOzU9HW2c7kwcjG+Sm9TrEVj723dN22xpad/v6G5pHa6uEIfiRxuL39QGf/qe5t/3Kfj1jMTr33k3vUmszVk4PhkYb60YbQUFjLpzuWFvEL7F1JTSIAnoAYta9zqAfntFeNOXm5kMN/6SsEqk05A8DfN3OZl3iLQbaDImQeY5p+kr5y1RkWbzAYLTIkd7vYqxMO9S79Eb+ifReB4mh9os2tUH0GR4R4HeEPCDj7UYJjxa5zbW1ZWW28NtZYX1ZTVh0K5cqRZe7FV/hiKO3zNSLo0QpeRvDFDa372tv3tnY2VMeiu2KxXc3x6vuGAxt8vg3+4Y7e7bUDNTX9tdt68XCqJbqzuXlntG17sXM8Et3R1LQj2jzmwhVD7VXrKyvXV7UPLX5hU0dVwu9PVHVs0mrL+NIfQH++ymqzWAKMjSoQfZtLv1o4wKoL+ja3LKnRtrLUqqku0Iyc9oNuFBRcq8rKyYORgXdP6XnFXrzl3SXl2xrb98Ra5zobR2pAK+o21vj6G8lXQSu2fvluH7EpTr36kV3eqg2HqLJkrqkbrQe1qB1uCG+qZ7oRRD/FIfxTCHPr1v7WjMY/+oFY7JL4d6FdVdsrVXpUf1rJLrRjli9wvBlyRFr3Q5ylcZXJlyXU3BSNtk5Oi7MVlvJiJwAqURpnbdr3bCyzp26NXHI9aLNZRevKA77XYXPanPCfzZGZcthcNgc7sBz2AroLdUGi3P6gLbt3IoF1WxmtJ3L7EeBW3TQ4YHRzwVDqQX+wkgPtc2UNIRbLBUMxm8o67yoPOY1myakzmWXJYpR9zlJvSavfCDWWwIlui9FkkEw2t7dc40sxHM6ATfShQbQtscXjIlBRDFnNIocFyKbpl0My5OOOpEkPcdwwaVGMnMFQlMwyrL8fof7B/sGNAzBDb9eGjvaWWKTR6/OpDvplkU0sz4UDMbeZrO2VR+Pxgl62glruMMFCZMt3OAAnszabaVdgpwlOs25ikRUbLn7Sja2ss1mx20y7/SmT3W6aLSVWo8XKFT1ZCmC0M/aY/8kAgfxYsTxng8NHZJPdpH9P9mSHYPQcvXeHbCqy3qYdMy889xzTyWY4vhPtBZXQvldk2ph9q0vVhKpj0yVq0Z9XBqYFTB/oXPqlc/hVrgJq1vJEKVPqITp8ns54GuazIksVx9I7FjSzXpk6vmILjx8QzUYomzKbRJN0kxV8GzepGM2ywfCXj8sSwzW6lMC7yBOQs9tZclGW3UBaV03TOF6Lc8vOnr4cZ2LBbfqz5991nSjCdAfPnD4sm+TH+c5Xbp//1UbeKpkMHc9ed/1zrYLFmH0HXbrUhbvIv8A6Gk/KCr7hLEHF6/I0xLS9gVx0pf5RUGvMysEzVx+CUkYvnr35lmtF/WMrF+E3vHz7/K8HeLZWG/oF3oQrkZL3CXR3F08y9lG/pyBjs+YTcjKgIhiCjJ599PODX9DPg2z59+friIzuANxLUVmixKbJgL4FIrPsW5/hrJHZ8q/fNEZFmuLZoj+6rtDITAozMrK/1bfSyqzMysDmYb272Hpr2zzEPfa5Q4HNLw/lbd72Om0+h86htdEBm69e2sN9FHLxUfCAv9HeJlk8WCJ+t8LxUjcWRG7IzYa4wqGUBtqARCQgUThnhPQdIyhoD8K1XtDvg3zLMCVjgwGUTpLIFKtyJbod5oHnml/Xc2yrjD6MtGcTcSjuJcJJ5173stqTqRTVy907t40DnSNVvkCg2gd6qDCPlAveNJdeuZtITYNtFDgdKz/7yUb0tb5otUWb8/GdgpDP372581hXMIq5yrlYbU+g63h3U79J4t1uXI/dtrrNDUO37rzw/A197z8e2RQNCYIsENuG/UM3fmrk9t/eEUxEYuN18Zq63Z2YPLX19okt98zWBQy6kvZEKFmXuG1nLJxwl4h85js6Q0nJ9gsDI9f1HH/m3Vs/sNPscnEmgTMZKrwHPzlz539en7nZ1LwheSIS60zMNWf/vXH2XxFPmTt+B9xmr0v+9ZG/ex89f2fgwpOZW5eqdX7+GFzStz/aj37Pwv5dsm4c7n9T51/+l8vaj2wmG6Fe+x795nzpevTK0q/Jragc/RV/5N1oD3kvarjs/WfYt5NXnqPltWHeNH4xwO+hK+D3zTXWfvWtx4c4Xt+cXLsGR37wxnAgmcvT+Lf4ka0a/pyIGsjdV6aFNCHfG55/N6q87L2v//fpE5v/Q0jlnqLfQ73F8+5E4b+qjHaiUSjTw28GHxL678UVz6BycvQK67fQ90OX/L7H3qP/v//Aj+bXKWJZj/Z7oaB/Oft9n4YX6V4DvyvJYvyvK/vXoxs5HcDvvDIt+Luo9g3Jdpy+O7rC2q1vjHdvmDYr5IYvr/Y5+Oeock29WouGn6yWF+T/+dhL4qvjMMg4DomzDu6NED0Kgw1VEj+KkxL4E1AHiaJeUsNq5v9vfng7CqJHgKYnVvKb3A418IOsxlstHwnpX3PeMygKf6Wrxm+BuuX1/J4A/w04cU//TdhSDX+daBrNoy/Rl0Fvqk3gz69oL1/aSNsbamfJ84WNq863kdfdzq3Rvsl9k7ddpm19i9pd/F26gO49l7TfXq4JtSva0TfYPiOS192ufZPtZf3Yiva1wmbwvcH2Pkle0Sby7fDraGdYe5S15y9txsPQvrZ2k6W3qB2G9u/K2CXt4trNVHZJ2/8G2yfMKN/6zZ9fo/1Xvr1Km2X5t8Vys+VZ627r/bZi27ztKXuL/c6/UnvSoXeMZdu/O/UFrWVVO+r8eL796+rmIq6hv0Uroq9AaU15GKrgDyD6pWotakfvBm/5AcVF/9UR9PRoP1TTmDeAt7exypr2MbLBldYnyIR92T6HWnBTts+jSnw429ehUvyebF+A8U9k+ybUjL+GetAJdBJdh06hQ+gAOohOIw9qggqrEZoHbYWROThvRlfD/X3oCLoKzaDjaBbGxuCZE4D/HIzTp7oA5jTAn4Dxq+C6ms12Gma/CiJVPbQDMAeFuBrtRXXw1Al0DEa1+U7BPNdApnESrg+gowB5HHrXsLv1a6zfD+djMHYUcK9BIVjvmuzsHrQF5roK/k6hM3CkuPbDWscZliPsOaDJU7Z6Vk854LV6LTrfARg9CtenUARgGlhrBx7sR30A0b7GU+FLnluLhyshtjOcrwIoiq2nYKXXnj3Ha43TVwEslehJGLsKZrmKcaqOyeYA3B8FjtCd1OTD6GtbJhYwvj2Vxtr/YOXkAhK7vzgQqeBQLe0+1KYP6G16Tq9d9QoNQpnArqTuR02PGx7nHweFMsC10v0oSrDGrjnUu+DDt22eSCdum1jgZnsXAvTqS/obQf0St+3bOkFBUvB7qENfrXfoObn2Ybz0rjT/3gWCeh/QzQqot/f/AkteTDIKZW5kc3RyZWFtCmVuZG9iagoxMCAwIG9iago8PC9UeXBlL09ialN0bS9OIDk5L0ZpcnN0IDc4OS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI4OTA+PgpzdHJlYW0KeNrdWttyG8cRfc9XzJsJu7g794tKhQolmhbLsqRQcqxkvQ8gsSIRg1gWsHSkv8/pmV1gAQII5KAqqbgkD+bap0/39PTsKDDOhGLeMIE/ChXLpNZMBKaMZ5Iz7VAIZgIKyRw6JMYrjWEsGMMk5nHHmbRMiCCY9FhHSKYESqyLkUJrz5SDCKWYhgwTLNMKsmxgGvOckkwHJjw3zEiU1jMsLYKGYAcUQjNCI7RjFqKk08yiXaHuAEFDjleAgPUJgnOCBclkMJxZKn1gVjHFBeZrlBrjAZE7xawFVC4YRAK2ZYCkhBEMKinhUBdMAQDzmCehrKM61nWYL8ENllCKWwZISkFZTFEKQp1DGTAO62qBcVhXQ1mPdTUGEzWGS+Yx3oB4j/EGSnpBzGMc5lnoDejKasmwlLIAZTHPwhgBch1MEVB34ClgvjewCeYFgA6glgMMUQ3CGOmoNcwnOIyqA/2ANSzZhWuYWcFwwKO9CiygIZAkZjg6BczAQRQMzUz0EthDYrCA4kYCsgzMKGgHQxotABWGJC0FJ0tiafwxluRgKQuu4WOGzC44ZjoCiaU9eAO1JsAOBrIDlBYQbjkUM7AFOZrA8iCG8BtYF04pYVwgwzhD2sCT4Vg0MMCK0IKcJGpB1gE/MBZ5BoziOcwp6IcEJniHN/jf8+f5x7fX/6huGvy6vAcg7JKr4TC/qGfUdAFJbcu7eX3zvmqK/N35Rf6h+txg/Oi2epmKF6m4LIfDP2HeVw3+8OWhys9ms7rJ3z9eN1R7PZn9lr+o5+NqXnAA4GX+Kr/MXxYiVc4w7X3+Q/2hzs9Pbu5GD001z8QAMK+gSwGPhSUyAc8XWmQgzhieWWWOLFGuSRQ2k9hzwocMxoGzZE64I0lcQMiknmWyp6W3WSDn4jpT8C1hTaYSDGfl0eXKTbk6yEzBW4VxmVIRBpzs6HLVE7meZ4piNPeZwuYgHN7II5tW9U2rjc+0p/1DEBBdHM+C0kfWVT21LcJoZui8USHjiDwEJLhwZF31mq5SZxaxDMElMziStHIZt+LIuuotugqZIaxhx0JHQUBMhqh7dMFPHZkjNuBQwZmbURTXApYwncYbkTC/UBQ9/0BM/A9D6tPp2yP3fxHT/wo3/3c4/vhCX7NtkCcw0W2bn68u6e/J/Wgybepnd9V0Wv+5burrOhtXyx2ENAp7FhkQVxmlgsLhLEKKYxA8vLDHAnHXNA+LZ3n+RH7wmaFsD0cuZZBRPHIzZJuIWe7YZL6e3E+aRXFyXt+cvm9G82bQyz3K/M3ovlrrtRSIrk4um+oeA0DPsiYHSNKXNTVA2kC1drVvabTpt1BDBL+BZJWInDwAKCL5EsaqC/lefylIC2sNeuB4bIhLiIETq5ocOLmqqYFTqxrm6S2YYp9pAU0mK0Rth7OrJezAuVXNDZxf1fzAhVUtDHwP5GTgeyAhxMstSNqY/y3R04//S0S9AT5ZoJ9nebPRhFF2o0kNvFtrokPc+7UmOut82GiSg8B7kH+cjBeFjUvRPY8KH6mmW147rDBxRv7xb3+nO5l2JsPVb/Y4nZZP+pCTIUXa3odETSz7ZFj14SqIedCx7VO+P8/hitx2aL2jY11Sv8Pu6FC72uUBHU8Am8OU2ezTYk+f3tPndvf1qXjSp/b02cOwINNHFmr9jj4ystjep5VFsO76hD5MB4nLN8+M3W5R3HAzLbb3aSd7Did2+A42wXm1aBb0OSPG5nhyTJpp9fxT9ekTLufI0ywu6U6hxF9M5bj84qKMvzr9thhnq+Ge++G70byaNXTtJxRvEPHpu8F2gbYVIvB33Ap3SUhsvx7uvaR1omxPlN8uCisnMaTbdfvbdfoO997J1sW8m1e/0xeSlciwQyRR5lsKSRvU5TjRSeKpjWh16Je8pZ3otW27W42zZrj3+rYN4i4mVBJJ4lxrcSI/QpAtIyTW9KCblYFs1cJTwz139ovJfNF0NL0eLTqa8pf1I4Ceqg0/SZDNilX6tLQTf8SoE0bHh3tve62c3et1Hr/0iOGeC2vSiz6ALRXrKq1mYqtmtq/Zrv3XOUDLcOevTg/33vGWGsq+EL1DXdvSJ1u1d23qjfvchpCoFX31264JIZftRjZbNFi7GHecqj6nus+p3MbpmkVbfzP9JWRvCZ2GXVWL+nF+UyEIxs6YOL9DirPSz7azZg3qi8L3cojVbKEOnC6WaVMhUtYhbCoiAPoqHguRCpmKlJhInYo0T6b0dB2H9AfikHEnlumSsIhfX1eW62YvWrLUaplEaEyeEiiRkAq9lRclduHx63gU3z5fHzpfbZ/vDp3fT/YPJCBlcizlRyylQk8QaL4LQdhAELbPVwfO13L7fHvofPP1DKQUj6VsjuntPqB3bS3BNxBs31tGHjjfiO3zzaHz9SrxTxcD47fsMcsPXS+s77G0VXYQrLcSrFscKSqkLJaZvb4qVJrabvnO1TuDdzDL/KdqPBm9qD/HzwEWgcmF7pvuy3k1aur5yevRh+oj++ekuWN3kDOfV58G64H9pj0xXMpt6JiKwV63CUJoT5LH5q6ed0dOdxJ0CVF7/FDGodsTnf7GumsXQkX7+Plg/HhTzU8+j3+fPIw/3X9mv55ILiXlKL8OBgk6zqnzUVOdnD9DF45N6emdUKvvuPiG828GScu3D9XsLB5q7aXoYtKUkcuf6nGV/7yo3j4208kM1FLj69F1NV1g3pvH+0XB4/F1PhzK+GM+HOquBSSm+y49pNG63TLL44rMtTR0tODLUTOa1rfke7qwKpRKFvSdx0pXal44YUod4JaydBLZvmQ22NJTRyi9QTg3JQxOPaUQtvBoFsIXTqFdYZhB3drCcoUS7bS0d6VwDm6KMvDCSovSFY6bUkqBy7EHYIXfHmNsKUkycEgPOZ6XSnDc4xyzSuE3xngL1KqQCqXWwAIttAM2jDW2CFKiTGvhZlNYoaFaKLRCKRy2vyy1RJ2HUivgAj5tZeGsR+lTHbKtUeBC0Hx6vsSuoIdCuC+9B7rAjKb3QJTe0+/SGGByihFHxoRC6lAa0lvYEnog8NqyjLRrl2iPr32J9hBpB4JIOz3hmki75JF2wxPtqqUd1oq0S59otzbSTipH2h1oBx2RdjIV0c51ol2oRLs1SA87unWi29hIt0IEwE5IdANUpBtjlBZQSyTaYfJIu2ppFy3tzkfaDTQg2pU3iXaYiWhXqqWd6lYUBsebMzCJJdPQGynM4DxCEvq9gpvYaA5jXTSHoddiepay9BTHEXZhFk1vt/SwSyYx9FwLE8hCaXqJd/QKj7oH5fSKJ0qMgVwJ8+hC0au3062JeGnAFcbHOYgYRcBeKJcRkD45Lr91vrw8pzp1yPzFaFHF3h8u3n3/8fy7vzxObn5bjGbj0xf1dBwn4hp8M588IOLFh9wYxC/P339ZNNX95exTHcP/7WTRzL+cnI3r62qQv6UPqZPZ7cnlGEF70nwZQPrDw7S6pxjOEQHOf4GpVP5LfDRul/xQ/3B5/tPoIe9m9WL4OpD8bHHTXlM4XdNj5RT+lr8HqL/S2yNixsOranJ71446+/32l8kYoRoWiKu9oOB+Sv/I4lQhmRaK/v2E8KrMLxFsJjdns9tpxXh+MR3dInW0UsTlvyC6P0eMmtWL6jnv/vN87b9h+2RNcW4Hs0RhRcdi+xEYoy8m0wqWF5vJ5pr1qIX/O7N9P7upx+B/yeTpq5am8Qhyajp/2xT3Q/3zbILRFQTLfYK3u83VxdsfL6968uEKj9PR/Knn+CN6DpfRc8LxPce73Y6jdc9xlHOYJ+gtVNA/fVA7HMfu9Bmzx2d20tq5TboJ9d1Giq9wm53rH+I5yZTrrtNdbf8F7ardzwplbmRzdHJlYW0KZW5kb2JqCjEyMiAwIG9iago8PC9UeXBlL1hSZWYvSURbPDkyMGUxZjk2MTMwMzY2ODU4N2I2ZjI5NjI4NWViZTMzPjw5MjBlMWY5NjEzMDM2Njg1ODdiNmYyOTYyODVlYmUzMz5dL1Jvb3QKMSAwIFIvSW5mbyAyIDAgUi9TaXplIDEyMy9XWzEgMiAyXS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI4OT4+CnN0cmVhbQp42iXSSTJDURSA4XuijybEI42IRB+PJ/Ki7/u+J0L0CzAyQlmAMRswo8pKrMAKbMA83l9n8tX5z626g1vXGFMs+ozfnMEpLIsJGCP+J2PIK7iQ4LumkecvnVbEsnQSWAMflMAtXEMplEE5VEAlVIEfqsV60KtqYENCj5q1sClhR7MOtiRyrxmAHYm+atbDrsT+NBtgT+KuZhAOJFHQbIRDSX5qWnAkqW/NJshBM4TE/tCDMHRDHNogAWPQDhHogE7ogl5IQR/YEIV+GAAHBiENWUhCC/TAEGTAhWEYgVGIQSuMwxJMwAxMwhRMwxzMwiLMwwLkYR1WYRv24QSOxcl6XyB9p69xCQXJ/Hg719bdDZxL7s3b5X49XvLG/ANmzCjMCmVuZHN0cmVhbQplbmRvYmoKc3RhcnR4cmVmCjM1NDE2CiUlRU9GCg==</File>
    </Filelist>
</otrs_package>