<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>OTOBO-AI</Name>
    <Version>11.1.15</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 15:08:38" Version="11.1.15">First stable release for 11.1.</ChangeLog>
    <Description Lang="en">Otobo AI Interface package to connect to Otobo AI Services.</Description>
    <Framework>11.1.x</Framework>
    <CodeInstall Type="post">

        # create the package name
        my $CodeModule = 'var::packagesetup::OTOBOAI';

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeInstall();
    </CodeInstall>
    <CodeUpgrade Type="post">

        # create the package name
        my $CodeModule = 'var::packagesetup::OTOBOAI';

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeUpgrade();
    </CodeUpgrade>
    <CodeUninstall Type="pre">

        # create the package name
        my $CodeModule = 'var::packagesetup::OTOBOAI';

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeUninstall();
    </CodeUninstall>
    <BuildCommitID>53175b77e67e510250c4ad231e07c46a1f15d3cc</BuildCommitID>
    <BuildDate>2026-10-28 15:08:42</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Output/HTML/ArticleAction/AgentTicketCompose.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBkN2RhYTczZWUzZjQzZjE2NTdjZDY4M2I2YTE3NDBiY2MyMmQ3OGQ4IC0gS2VybmVsL091dHB1dC9IVE1ML0FydGljbGVBY3Rpb24vQWdlbnRUaWNrZXRDb21wb3NlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Q29tcG9zZTsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6UXVldWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6RW1haWxBZGRyZXNzJywKIyBSb3RoZXIgT1NTIC8gT1RPQk8tQUkKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKIyBFTyBPVE9CTy1BSQopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCiMgb3B0aW9uYWwgQWNsQWN0aW9uTG9va3VwCnN1YiBDaGVja0FjY2VzcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldCBBcnRpY2xlIENoYW5uZWxOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRQYXJhbXtDaGFubmVsTmFtZX0gZXEgJ0VtYWlsJyAmJiAkUGFyYW17QXJ0aWNsZX0tPntTZW5kZXJUeXBlfSBlcSAnc3lzdGVtJyApIHsKCiAgICAgICAgIyBza2lwIGVtYWlsIG5vdGlmaWNhdGlvbnMKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBjaGVjayBpZiBtb2R1bGUgaXMgcmVnaXN0ZXJlZAogICAgcmV0dXJuIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+e0FnZW50VGlja2V0Q29tcG9zZX07CgogICAgIyBjaGVjayBBY2wKICAgIHJldHVybiBpZiAhJFBhcmFte0FjbEFjdGlvbkxvb2t1cH0tPntBZ2VudFRpY2tldENvbXBvc2V9OwoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRDb21wb3NlJyk7CiAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICBteSAkT2sgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgTG9nTm8gICAgPT4gMSwKICAgICAgICApOwogICAgICAgIHJldHVybiBpZiAhJE9rOwogICAgfQogICAgaWYgKCAkQ29uZmlnLT57UmVxdWlyZWRMb2NrfSApIHsKICAgICAgICBteSAkTG9ja2VkID0gJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja0dldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldH0tPntUaWNrZXRJRH0KICAgICAgICApOwogICAgICAgIGlmICgkTG9ja2VkKSB7CiAgICAgICAgICAgIG15ICRBY2Nlc3NPayA9ICRUaWNrZXRPYmplY3QtPk93bmVyQ2hlY2soCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0fS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIE93bmVySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gaWYgISRBY2Nlc3NPazsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBHZXRDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXQgQXJ0aWNsZSBTdGFuZGFyZFRlbXBsYXRlcyBUeXBlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IFN0YW5kYXJkUmVzcG9uc2VzU3RyZwogICAgIyBteSAlU3RhbmRhcmRSZXNwb25zZUhhc2ggPSAleyAkUGFyYW17U3RhbmRhcmRSZXNwb25zZXN9IHx8IHt9IH07CiAgICBteSAlU3RhbmRhcmRSZXNwb25zZUhhc2ggPSAleyAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZXN9LT57QW5zd2VyfSB8fCB7fSB9OwoKIyBSb3RoZXIgT1NTIC8gT1RPQk8tQUkKICAgICMgcmV0cmlldmUgdGhlIGFyaWNsZSdzIE9UT0JPQUkgZHluYW1pYyBmaWVsZCB2YWx1ZQogICAgbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ09UT0JPQUk6OkR5bmFtaWNGaWVsZE9UT0JPQUknKSB8fCAnT1RPQk9BSSc7CgogICAgbXkgJE9UT0JPQUlERkNvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICApOwogICAgbXkgJE9UT0JPQUlWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+VmFsdWVHZXQoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRPVE9CT0FJREZDb25maWcsCiAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRQYXJhbXtBcnRpY2xlfS0+e0FydGljbGVJRH0sCiAgICApIHx8ICcnOwoKICAgICMgcmVtb3ZlIE9UT0JPQUkgYW5zd2VyIHRlbXBsYXRlIGlmIHRoZSBkeW5hbWljIGZpZWxkIGhvbGRzIHRoZSBlbXB0eSBhbnN3ZXIgdG9rZW4KICAgIG15ICRFbXB0eUFuc3dlclRva2VuID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpEeW5hbWljRmllbGRPVE9CT0FJOjpFbXB0eUFuc3dlclRva2VuJyk7CiAgICBpZiAoICRFbXB0eUFuc3dlclRva2VuICYmICRPVE9CT0FJVmFsdWUgZXEgJEVtcHR5QW5zd2VyVG9rZW4gKSB7CiAgICAgICAgZGVsZXRlIEBTdGFuZGFyZFJlc3BvbnNlSGFzaHsgZ3JlcCB7ICRTdGFuZGFyZFJlc3BvbnNlSGFzaHskX30gZXEgJ09UT0JPQUkgQW5zd2VyIFRlbXBsYXRlJyB9IGtleXMgJVN0YW5kYXJkUmVzcG9uc2VIYXNoIH07CiAgICB9CiMgRU8gT1RPQk8tQUkKICAgICMgZ2V0IHJldmVycyBTdGFuZGFyZFJlc3BvbnNlSGFzaCBiZWNhdXNlIHdlIG5lZWQgdG8gc29ydCBieSBWYWx1ZXMKICAgICMgZnJvbSAlUmV2ZXJzZVN0YW5kYXJkUmVzcG9uc2VIYXNoIHdlIGdldCB2YWx1ZSBvZiBLZXkgYnkgJVN0YW5kYXJkUmVzcG9uc2VIYXNoIFZhbHVlCiAgICAjIGFuZCBAU3RhbmRhcmRSZXNwb25zZUFycmF5IGlzIGNyZWF0ZWQgYXMgYXJyYXkgb2YgaGFzaGVzIHdpdGggZWxlbWVudHMgS2V5IGFuZCBWYWx1ZQoKICAgIG15ICVSZXZlcnNlU3RhbmRhcmRSZXNwb25zZUhhc2ggPSByZXZlcnNlICVTdGFuZGFyZFJlc3BvbnNlSGFzaDsKICAgIG15IEBTdGFuZGFyZFJlc3BvbnNlQXJyYXkgICAgICAgPSBtYXAgewogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFJldmVyc2VTdGFuZGFyZFJlc3BvbnNlSGFzaHskX30sCiAgICAgICAgICAgIFZhbHVlID0+ICRfCiAgICAgICAgfQogICAgfSBzb3J0IHZhbHVlcyAlU3RhbmRhcmRSZXNwb25zZUhhc2g7CgogICAgIyB1c2UgdGhpcyBhcnJheSB0d2ljZSAoYWxzbyBmb3IgUmVwbHkgQWxsKSwgc28gY29weSBpdCBmaXJzdAogICAgbXkgQFN0YW5kYXJkUmVzcG9uc2VBcnJheVJlcGx5QWxsID0gQFN0YW5kYXJkUmVzcG9uc2VBcnJheTsKCiAgICBteSBATWVudUl0ZW1zOwogICAgaWYgKEBTdGFuZGFyZFJlc3BvbnNlQXJyYXkpIHsKCiAgICAgICAgIyBidWlsZCBIVE1MIHN0cmluZwogICAgICAgIG15ICRTdGFuZGFyZFJlc3BvbnNlc1N0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdSZXNwb25zZUlEJywKICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICdSZXNwb25zZUlEJyAuICRQYXJhbXtBcnRpY2xlfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFNtYWxsJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFxAU3RhbmRhcmRSZXNwb25zZUFycmF5LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBATWVudUl0ZW1zLCB7CiAgICAgICAgICAgIEl0ZW1UeXBlICAgICAgICAgICAgICA9PiAnRHJvcGRvd24nLAogICAgICAgICAgICBEcm9wZG93blR5cGUgICAgICAgICAgPT4gJ1JlcGx5JywKICAgICAgICAgICAgU3RhbmRhcmRSZXNwb25zZXNTdHJnID0+ICRTdGFuZGFyZFJlc3BvbnNlc1N0cmcsCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1JlcGx5JyksCiAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgID0+ICdBZ2VudFRpY2tldENvbXBvc2UnLAogICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgICAgPT4gJ1JlcGx5JyAuICRQYXJhbXtBcnRpY2xlfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIFJlc3BvbnNlRWxlbWVudElEICAgICA9PiAnUmVzcG9uc2VJRCcgLiAkUGFyYW17QXJ0aWNsZX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIH07CiAgICB9CgogICAgIyBjaGVjayBpZiByZXBseSBhbGwgaXMgbmVlZGVkCiAgICBteSAkUmVjaXBpZW50cyA9ICcnOwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKHF3KEZyb20gVG8gQ2MpKSB7CiAgICAgICAgbmV4dCBLRVkgaWYgISRQYXJhbXtBcnRpY2xlfS0+eyRLZXl9OwogICAgICAgIGlmICgkUmVjaXBpZW50cykgewogICAgICAgICAgICAkUmVjaXBpZW50cyAuPSAnLCAnOwogICAgICAgIH0KICAgICAgICAkUmVjaXBpZW50cyAuPSAkUGFyYW17QXJ0aWNsZX0tPnskS2V5fTsKICAgIH0KICAgIG15ICRSZWNpcGllbnRDb3VudCA9IDA7CiAgICBpZiAoJFJlY2lwaWVudHMpIHsKICAgICAgICBteSAkRW1haWxBZGRyZXNzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVtYWlsQWRkcmVzcycpOwogICAgICAgIG15IEBBZGRyZXNzZXMgICAgICAgICAgPSAkRW1haWxBZGRyZXNzT2JqZWN0LT5QYXJzZUFkZHJlc3NMaW5lKCBMaW5lID0+ICRSZWNpcGllbnRzICk7CiAgICAgICAgQUREUkVTUzoKICAgICAgICBmb3IgbXkgJEFkZHJlc3MgKEBBZGRyZXNzZXMpIHsKICAgICAgICAgICAgbXkgJEVtYWlsID0gJEVtYWlsQWRkcmVzc09iamVjdC0+R2V0QWRkcmVzcyggQWRkcmVzc09iamVjdCA9PiAkQWRkcmVzcyApOwoKICAgICAgICAgICAgbmV4dCBBRERSRVNTIHVubGVzcyAkRW1haWw7CgogICAgICAgICAgICBteSAkSXNMb2NhbCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzJyktPlN5c3RlbUFkZHJlc3NJc0xvY2FsQWRkcmVzcygKICAgICAgICAgICAgICAgIEFkZHJlc3MgPT4gJEVtYWlsLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBBRERSRVNTIGlmICRJc0xvY2FsOwoKICAgICAgICAgICAgJFJlY2lwaWVudENvdW50Kys7CiAgICAgICAgfQogICAgfQogICAgaWYgKCBAU3RhbmRhcmRSZXNwb25zZUFycmF5UmVwbHlBbGwgJiYgJFJlY2lwaWVudENvdW50ID4gMSApIHsKCiAgICAgICAgbXkgJFN0YW5kYXJkUmVzcG9uc2VzU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1Jlc3BvbnNlSUQnLAogICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJ1Jlc3BvbnNlSURBbGwnIC4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUgU21hbGwnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXEBTdGFuZGFyZFJlc3BvbnNlQXJyYXlSZXBseUFsbCwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQE1lbnVJdGVtcywgewogICAgICAgICAgICBJdGVtVHlwZSAgICAgICAgICAgICAgPT4gJ0Ryb3Bkb3duJywKICAgICAgICAgICAgRHJvcGRvd25UeXBlICAgICAgICAgID0+ICdSZXBseScsCiAgICAgICAgICAgIFN0YW5kYXJkUmVzcG9uc2VzU3RyZyA9PiAkU3RhbmRhcmRSZXNwb25zZXNTdHJnLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdSZXBseSBBbGwnKSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgID0+ICdBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24nLAogICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgPT4gJ0FnZW50VGlja2V0Q29tcG9zZScsCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICA9PiAnUmVwbHlBbGwnIC4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgUmVwbHlBbGwgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIFJlc3BvbnNlRWxlbWVudElEICAgICA9PiAnUmVzcG9uc2VJREFsbCcgLiAkUGFyYW17QXJ0aWNsZX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIEBNZW51SXRlbXM7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/System/TemplateGenerator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA1ZDA3Y2M1MWRlOWIwNTBjMDM4MmRkNzcxOTBiZTM3MDU0YmZlZWVhIC0gS2VybmVsL1N5c3RlbS9UZW1wbGF0ZUdlbmVyYXRvci5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUZW1wbGF0ZUdlbmVyYXRvcjsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkxheW91dE9iamVjdCkKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgVVJJOjpFc2NhcGUgcXcodXJpX2VzY2FwZV91dGY4IHVyaV91bmVzY2FwZSk7ICAgICMjIG5vIHBlcmxpbXBvcnRzLCBtZXRob2RzIGFyZSB1c2VkIGluIGEgc3Vic3RpdHV0aW9uCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgICgpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkF1dG9SZXNwb25zZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNvbW11bmljYXRpb25DaGFubmVsJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RW1haWxBZGRyZXNzJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKIyBSb3RoZXIgT1NTIC8gT1RPQk8tQUkKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCiMgRU8gT1RPQk8tQUkKICAgICdLZXJuZWw6OlN5c3RlbTo6UXVldWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTYWx1dGF0aW9uJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2lnbmF0dXJlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpUZW1wbGF0ZUdlbmVyYXRvciAtIHRlbXBsYXRlIGdlbmVyYXRvciBsaWIKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHRlbXBsYXRlIGdlbmVyYXRvciBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpEb24ndCB1c2UgdGhlIGNvbnN0cnVjdG9yIGRpcmVjdGx5LCB1c2UgdGhlIE9iamVjdE1hbmFnZXIgaW5zdGVhZDoKCiAgICBteSAkVGVtcGxhdGVHZW5lcmF0b3JPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGVtcGxhdGVHZW5lcmF0b3InKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3Mge30sICRUeXBlOwoKICAgICRTZWxmLT57UmljaFRleHR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGcm9udGVuZDo6UmljaFRleHQnKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBTYWx1dGF0aW9uKCkKCmdlbmVyYXRlIHNhbHV0YXRpb24KCiAgICBteSAkU2FsdXRhdGlvbiA9ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdC0+U2FsdXRhdGlvbigKICAgICAgICBUaWNrZXRJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMTIzLAogICAgICAgIERhdGEgICAgID0+ICRBcnRpY2xlSGFzaFJlZiwKICAgICk7CgpyZXR1cm5zCiAgICBUZXh0CiAgICBDb250ZW50VHlwZQoKPWN1dAoKc3ViIFNhbHV0YXRpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldElEIERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgdGlja2V0LgogICAgbXkgJVRpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgICMgR2V0IHF1ZXVlLgogICAgbXkgJVF1ZXVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlR2V0KAogICAgICAgIElEID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICApOwoKICAgICMgR2V0IHNhbHV0YXRpb24uCiAgICBteSAlU2FsdXRhdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTYWx1dGF0aW9uJyktPlNhbHV0YXRpb25HZXQoCiAgICAgICAgSUQgPT4gJFF1ZXVle1NhbHV0YXRpb25JRH0sCiAgICApOwoKICAgICMgZG8gdGV4dC9wbGFpbiB0byB0ZXh0L2h0bWwgY29udmVydAogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSAmJiAkU2FsdXRhdGlvbntDb250ZW50VHlwZX0gPX4gL3RleHRcL3BsYWluL2kgKSB7CiAgICAgICAgJFNhbHV0YXRpb257Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgJFNhbHV0YXRpb257VGV4dH0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgIFN0cmluZyA9PiAkU2FsdXRhdGlvbntUZXh0fSwKICAgICAgICApOwogICAgfQoKICAgICMgZG8gdGV4dC9odG1sIHRvIHRleHQvcGxhaW4gY29udmVydAogICAgaWYgKCAhJFNlbGYtPntSaWNoVGV4dH0gJiYgJFNhbHV0YXRpb257Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kgKSB7CiAgICAgICAgJFNhbHV0YXRpb257Q29udGVudFR5cGV9ID0gJ3RleHQvcGxhaW4nOwogICAgICAgICRTYWx1dGF0aW9ue1RleHR9ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgU3RyaW5nID0+ICRTYWx1dGF0aW9ue1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbGlzdCB1bnN1cHBvcnRlZCB0YWdzIGZvciBzdGFuZGFyZCB0ZW1wbGF0ZQogICAgbXkgQExpc3RPZlVuU3VwcG9ydGVkVGFnID0gcXcoT1RPQk9fQUdFTlRfU1VCSkVDVCBPVE9CT19BR0VOVF9CT0RZIE9UT0JPX0NVU1RPTUVSX0JPRFkgT1RPQk9fQ1VTVE9NRVJfU1VCSkVDVCk7CgogICAgbXkgJFNhbHV0YXRpb25UZXh0ID0gJFNlbGYtPl9SZW1vdmVVblN1cHBvcnRlZFRhZygKICAgICAgICBUZXh0ICAgICAgICAgICAgICAgICA9PiAkU2FsdXRhdGlvbntUZXh0fSB8fCAnJywKICAgICAgICBMaXN0T2ZVblN1cHBvcnRlZFRhZyA9PiBcQExpc3RPZlVuU3VwcG9ydGVkVGFnLAogICAgKTsKCiAgICAjIHJlcGxhY2UgcGxhY2UgaG9sZGVyIHN0dWZmCiAgICAkU2FsdXRhdGlvblRleHQgPSAkU2VsZi0+X1JlcGxhY2UoCiAgICAgICAgUmljaFRleHQgICA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgICAgICBUZXh0ICAgICAgID0+ICRTYWx1dGF0aW9uVGV4dCwKICAgICAgICBUaWNrZXREYXRhID0+IFwlVGlja2V0LAogICAgICAgIERhdGEgICAgICAgPT4gJFBhcmFte0RhdGF9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgYWRkIHVybHMKICAgIGlmICggJFNlbGYtPntSaWNoVGV4dH0gKSB7CiAgICAgICAgJFNhbHV0YXRpb25UZXh0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5MaW5rUXVvdGUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkU2FsdXRhdGlvblRleHQsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFNhbHV0YXRpb25UZXh0Owp9Cgo9aGVhZDIgU2lnbmF0dXJlKCkKCmdlbmVyYXRlIHNhbHV0YXRpb24KCiAgICBteSAkU2lnbmF0dXJlID0gJFRlbXBsYXRlR2VuZXJhdG9yT2JqZWN0LT5TaWduYXR1cmUoCiAgICAgICAgVGlja2V0SUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgID0+IDEyMywKICAgICAgICBEYXRhICAgICA9PiAkQXJ0aWNsZUhhc2hSZWYsCiAgICApOwoKb3IKCiAgICBteSAkU2lnbmF0dXJlID0gJFRlbXBsYXRlR2VuZXJhdG9yT2JqZWN0LT5TaWduYXR1cmUoCiAgICAgICAgUXVldWVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxMjMsCiAgICAgICAgRGF0YSAgICA9PiAkQXJ0aWNsZUhhc2hSZWYsCiAgICApOwoKcmV0dXJucwogICAgVGV4dAogICAgQ29udGVudFR5cGUKCj1jdXQKCnN1YiBTaWduYXR1cmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbmVlZCB0aWNrZXQgaWQgb3IgcXVldWUgaWQKICAgIGlmICggISRQYXJhbXtUaWNrZXRJRH0gJiYgISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVGlja2V0SUQgb3IgUXVldWVJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgdGlja2V0IGRhdGEuCiAgICBteSAlVGlja2V0OwogICAgaWYgKCAkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICVUaWNrZXQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEdldCBxdWV1ZS4KICAgIG15ICVRdWV1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUdldCgKICAgICAgICBJRCA9PiAkVGlja2V0e1F1ZXVlSUR9IHx8ICRQYXJhbXtRdWV1ZUlEfSwKICAgICk7CgogICAgIyBHZXQgc2lnbmF0dXJlLgogICAgbXkgJVNpZ25hdHVyZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTaWduYXR1cmUnKS0+U2lnbmF0dXJlR2V0KAogICAgICAgIElEID0+ICRRdWV1ZXtTaWduYXR1cmVJRH0sCiAgICApOwoKICAgICMgZG8gdGV4dC9wbGFpbiB0byB0ZXh0L2h0bWwgY29udmVydAogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSAmJiAkU2lnbmF0dXJle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvcGxhaW4vaSApIHsKICAgICAgICAkU2lnbmF0dXJle0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgICRTaWduYXR1cmV7VGV4dH0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgIFN0cmluZyA9PiAkU2lnbmF0dXJle1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBkbyB0ZXh0L2h0bWwgdG8gdGV4dC9wbGFpbiBjb252ZXJ0CiAgICBpZiAoICEkU2VsZi0+e1JpY2hUZXh0fSAmJiAkU2lnbmF0dXJle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvaHRtbC9pICkgewogICAgICAgICRTaWduYXR1cmV7Q29udGVudFR5cGV9ID0gJ3RleHQvcGxhaW4nOwogICAgICAgICRTaWduYXR1cmV7VGV4dH0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKAogICAgICAgICAgICBTdHJpbmcgPT4gJFNpZ25hdHVyZXtUZXh0fSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGxpc3QgdW5zdXBwb3J0ZWQgdGFncyBmb3Igc3RhbmRhcmQgdGVtcGxhdGUKICAgIG15IEBMaXN0T2ZVblN1cHBvcnRlZFRhZyA9IHF3KE9UT0JPX0FHRU5UX1NVQkpFQ1QgT1RPQk9fQUdFTlRfQk9EWSBPVE9CT19DVVNUT01FUl9CT0RZIE9UT0JPX0NVU1RPTUVSX1NVQkpFQ1QpOwoKICAgIG15ICRTaWduYXR1cmVUZXh0ID0gJFNlbGYtPl9SZW1vdmVVblN1cHBvcnRlZFRhZygKICAgICAgICBUZXh0ICAgICAgICAgICAgICAgICA9PiAkU2lnbmF0dXJle1RleHR9IHx8ICcnLAogICAgICAgIExpc3RPZlVuU3VwcG9ydGVkVGFnID0+IFxATGlzdE9mVW5TdXBwb3J0ZWRUYWcsCiAgICApOwoKICAgICMgcmVwbGFjZSBwbGFjZSBob2xkZXIgc3R1ZmYKICAgICRTaWduYXR1cmVUZXh0ID0gJFNlbGYtPl9SZXBsYWNlKAogICAgICAgIFJpY2hUZXh0ICAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgVGV4dCAgICAgICA9PiAkU2lnbmF0dXJlVGV4dCwKICAgICAgICBUaWNrZXREYXRhID0+IFwlVGlja2V0LAogICAgICAgIERhdGEgICAgICAgPT4gJFBhcmFte0RhdGF9LAogICAgICAgIFF1ZXVlSUQgICAgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgYWRkIHVybHMKICAgIGlmICggJFNlbGYtPntSaWNoVGV4dH0gKSB7CiAgICAgICAgJFNpZ25hdHVyZVRleHQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPkxpbmtRdW90ZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRTaWduYXR1cmVUZXh0LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRTaWduYXR1cmVUZXh0Owp9Cgo9aGVhZDIgU2VuZGVyKCkKCmdlbmVyYXRlIHNlbmRlciBhZGRyZXNzIChGUk9NIHN0cmluZykgZm9yIGVtYWlscwoKICAgIG15ICRTZW5kZXIgPSAkVGVtcGxhdGVHZW5lcmF0b3JPYmplY3QtPlNlbmRlcigKICAgICAgICBRdWV1ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgID0+IDEyMywKICAgICk7CgpyZXR1cm5zOgoKICAgIEpvaG4gRG9lIGF0IFN1cGVyIFN1cHBvcnQgPHNlcnZpY2VAZXhhbXBsZS5jb20+CgphbmQgaXQgcmV0dXJucyB0aGUgcXVvdGVkIHJlYWwgbmFtZSBpZiBuZWNlc3NhcnkKCiAgICAiSm9obiBEb2UsIFN1cHBvcnQiIDxzZXJ2aWNlQGV4YW1wbGUudGxkPgoKPWN1dAoKc3ViIFNlbmRlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIFVzZXJJRCBRdWV1ZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHNlbmRlciBhdHRyaWJ1dGVzCiAgICBteSAlQWRkcmVzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5HZXRTeXN0ZW1BZGRyZXNzKAogICAgICAgIFF1ZXVlSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIFRoaXMgaXMgdGhlIG5vdCBxdW90ZWQgcmVhbCBuYW1lCiAgICBteSAkUGhyYXNlID0gJEFkZHJlc3N7UGhyYXNlfTsKCiAgICAjIGNoZWNrIGNvbmZpZyBmb3IgYWdlbnQgcmVhbCBuYW1lCiAgICBteSAkVXNlQWdlbnRSZWFsTmFtZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpEZWZpbmVFbWFpbEZyb20nKTsKICAgIGlmICggJFVzZUFnZW50UmVhbE5hbWUgJiYgJFVzZUFnZW50UmVhbE5hbWUgPX4gL14oQWdlbnROYW1lfEFnZW50TmFtZVN5c3RlbUFkZHJlc3NOYW1lKSQvICkgewoKICAgICAgICAjIGdldCBkYXRhIGZyb20gY3VycmVudCBhZ2VudAogICAgICAgIG15ICVVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBOb091dE9mT2ZmaWNlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgcmVhbCBuYW1lIHdpdGggdXNlciBuYW1lCiAgICAgICAgaWYgKCAkVXNlQWdlbnRSZWFsTmFtZSBlcSAnQWdlbnROYW1lJyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHVzZXIgZGF0YQogICAgICAgICAgICBpZiAoICRVc2VyRGF0YXtVc2VyRnVsbG5hbWV9ICkgewoKICAgICAgICAgICAgICAgICMgcmV3cml0ZSB0aGUgcGhyYXNlLCBubyBuZWVkIHRvIGNhcmUgYWJvdXQgcXVvdGluZwogICAgICAgICAgICAgICAgJFBocmFzZSA9ICRVc2VyRGF0YXtVc2VyRnVsbG5hbWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNldCByZWFsIG5hbWUgd2l0aCB1c2VyIG5hbWUKICAgICAgICBpZiAoICRVc2VBZ2VudFJlYWxOYW1lIGVxICdBZ2VudE5hbWVTeXN0ZW1BZGRyZXNzTmFtZScgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGZvciB1c2VyIGRhdGEKICAgICAgICAgICAgaWYgKCAkVXNlckRhdGF7VXNlckZ1bGxuYW1lfSApIHsKCiAgICAgICAgICAgICAgICAjIHByZXBlbmQgdGhlIHVzZXIgbmFtZSBhbmQgdGhlIHNlcGFyYXRvciwgZS5nLiAndmlhJywgdG8gdGhlIHJlYWwgbmFtZQogICAgICAgICAgICAgICAgbXkgJFNlcGFyYXRvciA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpEZWZpbmVFbWFpbEZyb21TZXBhcmF0b3InKTsKICAgICAgICAgICAgICAgICRQaHJhc2UgPSAiJFVzZXJEYXRhe1VzZXJGdWxsbmFtZX0gJFNlcGFyYXRvciAkUGhyYXNlIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIEZvcm1hdCBzZW5kZXIgcmVhbCBuYW1lIGFuZCBhZGRyZXNzIGNvbXBsaWFudCB0byBSRkMgNTMyMi4gVGhpcyBpcyByZWxldmFudCB3aGVuIHRoZSByZWFsIG5hbWUgY29udGFpbiBjb21tYXMKICAgICMgb3Igb3RoZXIgc3BlY2lhbCBzeW1ib2xzLgogICAgbXkgJEVtYWlsQWRkcmVzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbEFkZHJlc3MnKTsKCiAgICByZXR1cm4gJEVtYWlsQWRkcmVzc09iamVjdC0+Rm9ybWF0KAogICAgICAgIFJlYWxOYW1lID0+ICRQaHJhc2UsCiAgICAgICAgQWRkcmVzcyAgPT4gJEFkZHJlc3N7RW1haWx9LAogICAgKTsKfQoKPWhlYWQyIFRlbXBsYXRlKCkKCmdlbmVyYXRlIHRlbXBsYXRlCgogICAgbXkgJFRlbXBsYXRlID0gJFRlbXBsYXRlR2VuZXJhdG9yT2JqZWN0LT5UZW1wbGF0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBUaWNrZXRJRCAgID0+IDEyMywgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFsCiAgICAgICAgRGF0YSAgICAgICA9PiAkQXJ0aWNsZUhhc2hSZWYsICAgICAgIyBPcHRpb25hbAogICAgICAgIFVzZXJJRCAgICAgPT4gMTIzLAogICAgKTsKClJldHVybnM6CgogICAgJFRlbXBsYXRlID0gJ1NvbWUgdGV4dCc7Cgo9Y3V0CgpzdWIgVGVtcGxhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YW5kYXJkVGVtcGxhdGUnKTsKCiAgICBteSAlVGVtcGxhdGUgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZUdldCgKICAgICAgICBJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICApOwoKICAgICMgZG8gdGV4dC9wbGFpbiB0byB0ZXh0L2h0bWwgY29udmVydAogICAgaWYgKAogICAgICAgICRTZWxmLT57UmljaFRleHR9CiAgICAgICAgJiYgJFRlbXBsYXRle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvcGxhaW4vaQogICAgICAgICYmICRUZW1wbGF0ZXtUZW1wbGF0ZX0KICAgICAgICApCiAgICB7CiAgICAgICAgJFRlbXBsYXRle0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgICRUZW1wbGF0ZXtUZW1wbGF0ZX0gICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICRUZW1wbGF0ZXtUZW1wbGF0ZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgIGlmICgKICAgICAgICAhJFNlbGYtPntSaWNoVGV4dH0KICAgICAgICAmJiAkVGVtcGxhdGV7Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kKICAgICAgICAmJiAkVGVtcGxhdGV7VGVtcGxhdGV9CiAgICAgICAgKQogICAgewogICAgICAgICRUZW1wbGF0ZXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgJFRlbXBsYXRle1RlbXBsYXRlfSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgU3RyaW5nID0+ICRUZW1wbGF0ZXtUZW1wbGF0ZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEdldCB1c2VyIGxhbmd1YWdlLgogICAgbXkgJExhbmd1YWdlOwogICAgbXkgJVRpY2tldDsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VGlja2V0SUR9ICkgewoKICAgICAgICAjIEdldCB0aWNrZXQgZGF0YS4KICAgICAgICAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgR2V0IHJlY2lwaWVudC4KICAgICAgICBteSAlVXNlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICApOwogICAgICAgICRMYW5ndWFnZSA9ICRVc2Vye1VzZXJMYW5ndWFnZX07CiAgICB9CgogICAgIyBJZiB0ZW1wbGF0ZSB0eXBlIGlzICdDcmVhdGUnIGFuZCB0aGVyZSBpcyBjdXN0b21lciB1c2VyIGluZm9ybWF0aW9uLCB0cmVhdCBpdCBhcyBhIHRpY2tldCBwYXJhbSBpbiBvcmRlciB0bwogICAgIyBjb3JyZWN0bHkgcmVwbGFjZSBjdXN0b21lciB1c2VyIHRhZ3MuIFNlZSBidWcjMTQ0NTUuCiAgICBpZiAoICRUZW1wbGF0ZXtUZW1wbGF0ZVR5cGV9IGVxICdDcmVhdGUnICYmICRQYXJhbXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgJFRpY2tldHtDdXN0b21lclVzZXJJRH0gPSAkUGFyYW17Q3VzdG9tZXJVc2VySUR9OwogICAgfQoKICAgICMgaWYgY3VzdG9tZXIgbGFuZ3VhZ2UgaXMgbm90IGRlZmluZWQsIHNldCBkZWZhdWx0IGxhbmd1YWdlCiAgICAkTGFuZ3VhZ2UgLy89ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGVmYXVsdExhbmd1YWdlJykgfHwgJ2VuJzsKCiAgICAjIGdldCBsaXN0IHVuc3VwcG9ydGVkIHRhZ3MgZm9yIHN0YW5kYXJkIHRlbXBsYXRlCiAgICBteSBATGlzdE9mVW5TdXBwb3J0ZWRUYWcgPSBxdyhPVE9CT19BR0VOVF9TVUJKRUNUIE9UT0JPX0FHRU5UX0JPRFkgT1RPQk9fQ1VTVE9NRVJfQk9EWSBPVE9CT19DVVNUT01FUl9TVUJKRUNUKTsKCiAgICBteSAlU3VwcG9ydGVkVHlwZXMgPSAoCiAgICAgICAgQW5zd2VyICA9PiAxLAogICAgICAgIEZvcndhcmQgPT4gMSwKICAgICAgICBOb3RlICAgID0+IDEsCiAgICApOwoKICAgIG15ICRUZW1wbGF0ZVRleHQgPSAkVGVtcGxhdGV7VGVtcGxhdGV9IHx8ICcnOwogICAgbXkgJFRlbXBsYXRlVHlwZSA9ICRUZW1wbGF0ZXtUZW1wbGF0ZVR5cGV9OwoKICAgICMgUmVtb3ZlIHVuc3VwcG9ydGVkIHRhZ3Mgb25seSBmb3Igc29tZSB0ZW1wbGF0ZSB0eXBlcy4KICAgIGlmICggISRTdXBwb3J0ZWRUeXBlc3sgJFRlbXBsYXRle1RlbXBsYXRlVHlwZX0gfSApIHsKICAgICAgICAkVGVtcGxhdGVUZXh0ID0gJFNlbGYtPl9SZW1vdmVVblN1cHBvcnRlZFRhZygKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgICAgICAgPT4gJFRlbXBsYXRle1RlbXBsYXRlfSB8fCAnJywKICAgICAgICAgICAgTGlzdE9mVW5TdXBwb3J0ZWRUYWcgPT4gXEBMaXN0T2ZVblN1cHBvcnRlZFRhZywKICAgICAgICApOwoKICAgICAgICAjIFJlc2V0IHRlbXBsYXRlIHR5cGUgZm9yIHVuc3VwcG9ydGVkIHRhZy4KICAgICAgICAkVGVtcGxhdGVUeXBlID0gJyc7CiAgICB9CgogICAgIyByZXBsYWNlIHBsYWNlIGhvbGRlciBzdHVmZgogICAgJFRlbXBsYXRlVGV4dCA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCAgID0+ICRTZWxmLT57UmljaFRleHR9LAogICAgICAgIFRleHQgICAgICAgPT4gJFRlbXBsYXRlVGV4dCB8fCAnJywKICAgICAgICBUaWNrZXREYXRhID0+IFwlVGlja2V0LAogICAgICAgIERhdGEgICAgICAgPT4gJFBhcmFte0RhdGF9IHx8IHt9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgTGFuZ3VhZ2UgICA9PiAkTGFuZ3VhZ2UsCiAgICAgICAgVGVtcGxhdGUgICA9PiAkVGVtcGxhdGVUeXBlLAogICAgKTsKCiMgUm90aGVyIE9TUyAvIE9UT0JPLUFJCiAgICAjIHdoZW4gdGVtcGxhdGUgaXMgb2YgdHlwZSBBbnN3ZXIsIHJlcGxhY2UgQUkgdGFnCiAgICBpZiAoCiAgICAgICAgJFRlbXBsYXRlVHlwZSBlcSAnQW5zd2VyJwogICAgICAgICYmICRQYXJhbXtUaWNrZXRJRH0KICAgICAgICAmJiAkUGFyYW17QXJ0aWNsZUlEfQogICAgKSB7CgogICAgICAgICMgY2hlY2sgaWYgdGFnIGlzIHByZXNlbnQgaW4gdGhlIHRlbXBsYXRlIGZpcnN0CiAgICAgICAgIyAgIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmVxdWVzdCB0cmlnZ2VyaW5nCiAgICAgICAgbXkgJFN0YXJ0ID0gJzwnOwogICAgICAgIG15ICRFbmQgICA9ICc+JzsKICAgICAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICkgewogICAgICAgICAgICAkU3RhcnQgPSAnJmx0Oyc7CiAgICAgICAgICAgICRFbmQgICA9ICcmZ3Q7JzsKICAgICAgICB9CiAgICAgICAgbXkgJEFJVGFnID0gJFN0YXJ0IC4gJ09UT0JPX0FJQW5zd2VyX09UT0JPQUknIC4gJEVuZDsKICAgICAgICBpZiAoICRUZW1wbGF0ZVRleHQgPX4gLyRBSVRhZy8gKSB7CiAgICAgICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSScpIHx8ICdPVE9CT0FJJzsKICAgICAgICAgICAgbXkgJE92ZXJ3cml0ZUZsYWcgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6Ok92ZXJ3cml0ZVByZXZpb3VzUmVzcG9uc2UnKSB8fCAwOwoKICAgICAgICAgICAgbXkgJFBsYWNlaG9sZGVyID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpQbGFjZWhvbGRlcicpIHx8ICc8fHdhaXRpbmcgZm9yIEFJIGFuc3dlcnw+JzsKICAgICAgICAgICAgJFBsYWNlaG9sZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQbGFjZWhvbGRlciApOwoKICAgICAgICAgICAgIyBmZXRjaCBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBhcnRpY2xlIGlkCiAgICAgICAgICAgIG15ICRPVE9CT0FJREZDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRPVE9CT0FJREZDb25maWcpICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pY0ZpZWxkICckRHluYW1pY0ZpZWxkTmFtZScgbm90IGZvdW5kIG9uIHRoZSBzeXN0ZW0hIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJE9UT0JPQUlWYWx1ZSA9ICcnOwogICAgICAgICAgICBpZiAoICEkT3ZlcndyaXRlRmxhZyApIHsKICAgICAgICAgICAgICAgICRPVE9CT0FJVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlR2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRSZXF1ZXN0VHlwZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6QW5zd2VyVGVtcGxhdGVSZXF1ZXN0VHlwZScpIHx8ICdTeW5jaHJvbm91cyc7CiAgICAgICAgICAgIGlmICggJFJlcXVlc3RUeXBlIGVxICdBc3luY2hyb25vdXMnICkgewogICAgICAgICAgICAgICAgIyBzdXJlIHdlIHdhbnQgdG8gc3RhcnQgYSBuZXcgcmVxdWVzdCBpZiB3ZSBoYXZlIHBsYWNlaG9sZGVyPwogICAgICAgICAgICAgICAgaWYgKCAhJE9UT0JPQUlWYWx1ZSApIHsgI3x8ICRPVE9CT0FJVmFsdWUgZXEgJFBsYWNlaG9sZGVyICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJJyktPkdldEFuc3dlckFzeW5jKAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkT1RPQk9BSVZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlU2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRPVE9CT0FJREZDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFBsYWNlaG9sZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9Xcml0ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRPVE9CT0FJVmFsdWUgPSAkUGxhY2Vob2xkZXI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFJlcXVlc3RUeXBlIGVxICdTeW5jaHJvbm91cycgKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkT1RPQk9BSVZhbHVlIHx8ICRPVE9CT0FJVmFsdWUgZXEgJFBsYWNlaG9sZGVyICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkT1RPQk9BSVZhbHVlICkgewogICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlU2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRPVE9CT0FJREZDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFBsYWNlaG9sZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9Xcml0ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScpLT5HZXRBbnN3ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdElEID0+ICRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYoSXNIYXNoUmVmV2l0aERhdGEoJFJlc3VsdCkgJiYgSXNIYXNoUmVmV2l0aERhdGEoJFJlc3VsdC0+e0RhdGF9KSkgewogICAgICAgICAgICAgICAgICAgICAgICAkT1RPQk9BSVZhbHVlID0gJFJlc3VsdC0+e0RhdGF9LT57QW5zd2VyfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgTExNIG91dHB1dCBpcyBhIHRva2VuIGluZGljYXRpbmcgYW4gZW1wdHkgYW5zd2VyIGFzIHNwZWNpZmllZCBpbiB0aGlzIHNldHRpbmcKICAgICAgICAgICAgbXkgJEVtcHR5QW5zd2VyVG9rZW4gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ09UT0JPQUk6OkR5bmFtaWNGaWVsZE9UT0JPQUk6OkVtcHR5QW5zd2VyVG9rZW4nKTsKICAgICAgICAgICAgaWYgKCAkRW1wdHlBbnN3ZXJUb2tlbiAmJiAkT1RPQk9BSVZhbHVlIGVxICRFbXB0eUFuc3dlclRva2VuICkgewogICAgICAgICAgICAgICAgJE9UT0JPQUlWYWx1ZSA9ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkSFRNTFZhbHVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJE9UT0JPQUlWYWx1ZSB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVwbGFjZSA8T1RPQk9fQUlBbnN3ZXJfREZOYW1lPiB0YWcKICAgICAgICAgICAgJFRlbXBsYXRlVGV4dCA9fiBzLyRBSVRhZy8kSFRNTFZhbHVlL2c7CiAgICAgICAgfQogICAgfQojIEVPIE9UT0JPLUFJCgogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKICAgICAgICAkVGVtcGxhdGVUZXh0ID1+IHMvJmx0Oy88L2c7CiAgICAgICAgJFRlbXBsYXRlVGV4dCA9fiBzLyZndDsvPi9nOwogICAgICAgICRUZW1wbGF0ZVRleHQgPX4gcy8mcXVvdDsvIi9nOwogICAgICAgICRUZW1wbGF0ZVRleHQgPX4gcy8mYXBvczsvJy9nOwogICAgICAgICRUZW1wbGF0ZVRleHQgPX4gcy8mbmJzcDsvIC9nOwogICAgfQoKICAgIHJldHVybiAkVGVtcGxhdGVUZXh0Owp9Cgo9aGVhZDIgR2VuZXJpY0FnZW50QXJ0aWNsZSgpCgpnZW5lcmF0ZSBpbnRlcm5hbCBvciBleHRlcm5hbCBub3RlcwoKICAgIG15ICRHZW5lcmljQWdlbnRBcnRpY2xlID0gJFRlbXBsYXRlR2VuZXJhdG9yT2JqZWN0LT5HZW5lcmljQWdlbnRBcnRpY2xlKAogICAgICAgIE5vdGlmaWNhdGlvbiA9PiAkTm90aWZpY2F0aW9uRGF0YUhhc2hSZWYsCiAgICAgICAgVGlja2V0SUQgICAgID0+IDEyMywKICAgICAgICBVc2VySUQgICAgICAgPT4gMTIzLAogICAgICAgIERhdGEgICAgICAgICA9PiAkQXJ0aWNsZUhhc2hSZWYsICAgICAgICAgICAgICMgT3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJpY0FnZW50QXJ0aWNsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgTm90aWZpY2F0aW9uIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVUZW1wbGF0ZSA9ICV7ICRQYXJhbXtOb3RpZmljYXRpb259IH07CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIEdldCB0aWNrZXQgZGF0YS4KICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICk7CgogICAgIyBkbyB0ZXh0L3BsYWluIHRvIHRleHQvaHRtbCBjb252ZXJ0CiAgICBpZiAoCiAgICAgICAgJFNlbGYtPntSaWNoVGV4dH0KICAgICAgICAmJiAkVGVtcGxhdGV7Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pCiAgICAgICAgJiYgJFRlbXBsYXRle0JvZHl9CiAgICAgICAgKQogICAgewogICAgICAgICRUZW1wbGF0ZXtDb250ZW50VHlwZX0gPSAndGV4dC9odG1sJzsKICAgICAgICAkVGVtcGxhdGV7Qm9keX0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgIFN0cmluZyA9PiAkVGVtcGxhdGV7Qm9keX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgIGlmICgKICAgICAgICAhJFNlbGYtPntSaWNoVGV4dH0KICAgICAgICAmJiAkVGVtcGxhdGV7Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kKICAgICAgICAmJiAkVGVtcGxhdGV7Qm9keX0KICAgICAgICApCiAgICB7CiAgICAgICAgJFRlbXBsYXRle0NvbnRlbnRUeXBlfSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICAkVGVtcGxhdGV7Qm9keX0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKAogICAgICAgICAgICBTdHJpbmcgPT4gJFRlbXBsYXRle0JvZHl9LAogICAgICAgICk7CiAgICB9CgogICAgIyByZXBsYWNlIHBsYWNlIGhvbGRlciBzdHVmZgogICAgJFRlbXBsYXRle0JvZHl9ID0gJFNlbGYtPl9SZXBsYWNlKAogICAgICAgIFJpY2hUZXh0ICAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgVGV4dCAgICAgICA9PiAkVGVtcGxhdGV7Qm9keX0sCiAgICAgICAgUmVjaXBpZW50ICA9PiAkUGFyYW17UmVjaXBpZW50fSwKICAgICAgICBEYXRhICAgICAgID0+ICRQYXJhbXtEYXRhfSB8fCB7fSwKICAgICAgICBUaWNrZXREYXRhID0+IFwlVGlja2V0LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwogICAgJFRlbXBsYXRle1N1YmplY3R9ID0gJFNlbGYtPl9SZXBsYWNlKAogICAgICAgIFJpY2hUZXh0ICAgPT4gMCwKICAgICAgICBUZXh0ICAgICAgID0+ICRUZW1wbGF0ZXtTdWJqZWN0fSwKICAgICAgICBSZWNpcGllbnQgID0+ICRQYXJhbXtSZWNpcGllbnR9LAogICAgICAgIERhdGEgICAgICAgPT4gJFBhcmFte0RhdGF9IHx8IHt9LAogICAgICAgIFRpY2tldERhdGEgPT4gXCVUaWNrZXQsCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgJFRlbXBsYXRle1N1YmplY3R9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3ViamVjdEJ1aWxkKAogICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgU3ViamVjdCAgICAgID0+ICRUZW1wbGF0ZXtTdWJqZWN0fSB8fCAnJywKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05ldycsCiAgICApOwoKICAgICMgYWRkIFVSTHMgYW5kIHZlcmlmeSB0byBiZSBmdWxsIEhUTUwgZG9jdW1lbnQKICAgIGlmICggJFNlbGYtPntSaWNoVGV4dH0gKSB7CgogICAgICAgICRUZW1wbGF0ZXtCb2R5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJFRlbXBsYXRle0JvZHl9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICVUZW1wbGF0ZTsKfQoKPWhlYWQyIEF0dHJpYnV0ZXMoKQoKbW9kaWZpZXMgaW5wbGFjZSB0aGUgcGFzc2VkIGluIEM8RGF0YT4gaGFzaCByZWZlcmVuY2UgYW5kIHJldHVybnMgdGhlIGVucmljaGVkIGRhdGEuCgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgU3ViamVjdCA9PiAnV2hhdCBkbyB5b3Ugd2FudCB0byB0YWxrIGFib3V0PycKICAgICk7CgogICAgbXkgJUVucmljaGVkRGF0YSA9ICRUZW1wbGF0ZUdlbmVyYXRvT2JqZWN0LT5BdHRyaWJ1dGVzKAogICAgICAgIFRpY2tldElEICAgPT4gMTIzLAogICAgICAgIERhdGEgICAgICAgPT4gXCVEYXRhLCAgICAjICREYXRhe1N1YmplY3R9IGlzIHVzZWQgYXMgaW5wdXQgZm9yIGZpbmRpbmcgdGhlIG5ldyBzdWJqZWN0CiAgICAgICAgVXNlcklEICAgICA9PiAxMjMsCiAgICAgICAgQWN0aW9uICAgICA9PiAnRm9yd2FyZCcsICMgUmVsZXZhbnQgZm9yIHRoZSBzdWJqZWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFBvc3NpYmxlIHZhbHVlcyBhcmUgJ1JlcGx5JyBhbmQgJ0ZvcndhcmQnLCAnUmVwbHknIGlzIGV2ZW50dWFsbHkgdGhlIGRlZmF1bHQuCiAgICApOwoKUmV0dXJucyB0aGUgbW9kaWZpZWQgaGFzaCByZWZlcmVuY2UgYXMga2V5IHZhbHVlIHBhaXJzLiBUaGUgcG90ZW50aWFsbHkgYWRkZWQgb3IgY2hhbmdlZCBpdGVtIGFyZToKCj1vdmVyIDQKCj1pdGVtIFN1YmplY3QKCj1pdGVtIEZyb20KCj1iYWNrCgo9Y3V0CgpzdWIgQXR0cmlidXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGdldCB0aWNrZXQgZGF0YSwgaW5jbHVkaW5nIHRoZSBxdWV1ZSBpZAogICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgKTsKCiAgICAjIHByZXBhcmUgc3ViamVjdCAuLi4KICAgICRQYXJhbXtEYXRhfS0+e1N1YmplY3R9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3ViamVjdEJ1aWxkKAogICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgU3ViamVjdCAgICAgID0+ICRQYXJhbXtEYXRhfS0+e1N1YmplY3R9IHx8ICcnLAogICAgICAgIEFjdGlvbiAgICAgICA9PiAkUGFyYW17QWN0aW9ufSAgICAgICAgICB8fCAnJywgICAgIyBUaWNrZXRTdWJqZWN0QnVpbGQoKSBmYWxscyBiYWNrIHRvIHRoZSBkZWZhdWx0ICdSZXBseScKICAgICk7CgogICAgIyBnZXQgc2VuZGVyIGFkZHJlc3MKICAgICRQYXJhbXtEYXRhfS0+e0Zyb219ID0gJFNlbGYtPlNlbmRlcigKICAgICAgICBRdWV1ZUlEID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgVXNlcklEICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRQYXJhbXtEYXRhfS0+JSo7Cn0KCj1oZWFkMiBBdXRvUmVzcG9uc2UoKQoKZ2VuZXJhdGUgcmVzcG9uc2UKCkF1dG9SZXNwb25zZQogICAgVGlja2V0SUQKICAgICAgICBPd25lcgogICAgICAgIFJlc3BvbnNpYmxlCiAgICAgICAgQ1VTVE9NRVJfREFUQQogICAgQXJ0aWNsZUlECiAgICAgICAgQ1VTVE9NRVJfU1VCSkVDVAogICAgICAgIENVU1RPTUVSX0VNQUlMCiAgICBVc2VySUQKCiAgICBUbwogICAgQ2MKICAgIEJjYwogICAgU3ViamVjdAogICAgQm9keQogICAgQ29udGVudFR5cGUKCiAgICBteSAlQXV0b1Jlc3BvbnNlID0gJFRlbXBsYXRlR2VuZXJhdG9yT2JqZWN0LT5BdXRvUmVzcG9uc2UoCiAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAxMjMsCiAgICAgICAgT3JpZ0hlYWRlciAgICAgICA9PiB7fSwKICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdhdXRvIHJlcGx5JywKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgQXV0b1Jlc3BvbnNlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXRJRCBBdXRvUmVzcG9uc2VUeXBlIE9yaWdIZWFkZXIgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBHZXQgdGlja2V0IGRhdGEuCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgICMgZ2V0IGF1dG8gZGVmYXVsdCByZXNwb25zZXMKICAgIG15ICVBdXRvUmVzcG9uc2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJyktPkF1dG9SZXNwb25zZUdldEJ5VHlwZVF1ZXVlSUQoCiAgICAgICAgUXVldWVJRCA9PiAkVGlja2V0e1F1ZXVlSUR9LAogICAgICAgIFR5cGUgICAgPT4gJFBhcmFte0F1dG9SZXNwb25zZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISVBdXRvUmVzcG9uc2U7CgogICAgIyBnZXQgb2xkIGFydGljbGUgZm9yIHF1b3RpbmcKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgQEFydGljbGVMaXN0ICAgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIFNlbmRlclR5cGUgPT4gJ2N1c3RvbWVyJywKICAgICAgICBPbmx5TGFzdCAgID0+IDEsCiAgICApOwoKICAgIGlmICggIUBBcnRpY2xlTGlzdCApIHsKICAgICAgICBAQXJ0aWNsZUxpc3QgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgIE9ubHlMYXN0ICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoQEFydGljbGVMaXN0KSB7CiAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7ICRBcnRpY2xlTGlzdFswXSB9ICktPkFydGljbGVHZXQoICV7ICRBcnRpY2xlTGlzdFswXSB9ICk7CgogICAgICAgIGZvciBteSAkS2V5IChxdyhGcm9tIFRvIENjIFN1YmplY3QgQm9keSkpIHsKICAgICAgICAgICAgaWYgKCAhJFBhcmFte09yaWdIZWFkZXJ9LT57JEtleX0gKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17T3JpZ0hlYWRlcn0tPnskS2V5fSA9ICRBcnRpY2xleyRLZXl9IHx8ICcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNob21wICRQYXJhbXtPcmlnSGVhZGVyfS0+eyRLZXl9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGZvcm1hdCBib2R5IChvbmx5IGlmIGxvbmdlciB0aGFuIDg2IGNoYXJzKQogICAgaWYgKCAkUGFyYW17T3JpZ0hlYWRlcn0tPntCb2R5fSApIHsKICAgICAgICBpZiAoIGxlbmd0aCAkUGFyYW17T3JpZ0hlYWRlcn0tPntCb2R5fSA+IDg2ICkgewogICAgICAgICAgICBteSBATGluZXMgPSBzcGxpdCAvXG4vLCAkUGFyYW17T3JpZ0hlYWRlcn0tPntCb2R5fTsKICAgICAgICAgICAgTElORToKICAgICAgICAgICAgZm9yIG15ICRMaW5lIChATGluZXMpIHsKICAgICAgICAgICAgICAgIG15ICRMaW5lV3JhcHBlZCA9ICRMaW5lID1+IHMvKF4+Lit8Lns0LDg2fSkoPzpcc3xceikvJDFcbi9nbTsKCiAgICAgICAgICAgICAgICBuZXh0IExJTkUgaWYgJExpbmVXcmFwcGVkOwoKICAgICAgICAgICAgICAgICMgaWYgdGhlIHJlZ2V4IGRvZXMgbm90IG1hdGNoIHRoZW4gd2UgbmVlZAogICAgICAgICAgICAgICAgIyB0byBhZGQgdGhlIG1pc3NpbmcgbmV3IGxpbmUgb2YgdGhlIHNwbGl0CiAgICAgICAgICAgICAgICAjIGVsc2Ugd2Ugd2lsbCBsb3NlIGUuZy4gZW1wdHkgbGluZXMgb2YgdGhlIGJvZHkuCiAgICAgICAgICAgICAgICAjIChidWcjMTA2NzkpCiAgICAgICAgICAgICAgICAkTGluZSAuPSAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRQYXJhbXtPcmlnSGVhZGVyfS0+e0JvZHl9ID0gam9pbiAnJywgQExpbmVzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGZpbGwgdXAgcmVxdWlyZWQgYXR0cmlidXRlcwogICAgZm9yIG15ICRLZXkgKHF3KFN1YmplY3QgQm9keSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17T3JpZ0hlYWRlcn0tPnskS2V5fSApIHsKICAgICAgICAgICAgJFBhcmFte09yaWdIZWFkZXJ9LT57JEtleX0gPSAiTm8gJEtleSI7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHJlY2lwaWVudAogICAgbXkgJVVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgVXNlciA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdXNlciBsYW5ndWFnZQogICAgbXkgJExhbmd1YWdlID0gJFVzZXJ7VXNlckxhbmd1YWdlfSB8fCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0RlZmF1bHRMYW5ndWFnZScpIHx8ICdlbic7CgogICAgIyBkbyB0ZXh0L3BsYWluIHRvIHRleHQvaHRtbCBjb252ZXJ0CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICYmICRBdXRvUmVzcG9uc2V7Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICRBdXRvUmVzcG9uc2V7Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgJEF1dG9SZXNwb25zZXtUZXh0fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICRBdXRvUmVzcG9uc2V7VGV4dH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgIGlmICggISRTZWxmLT57UmljaFRleHR9ICYmICRBdXRvUmVzcG9uc2V7Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kgKSB7CiAgICAgICAgJEF1dG9SZXNwb25zZXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgJEF1dG9SZXNwb25zZXtUZXh0fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkQXV0b1Jlc3BvbnNle1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgIyByZXBsYWNlIHBsYWNlIGhvbGRlciBzdHVmZgogICAgJEF1dG9SZXNwb25zZXtUZXh0fSA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgICAgICBUZXh0ICAgICA9PiAkQXV0b1Jlc3BvbnNle1RleHR9LAogICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgJXsgJFBhcmFte09yaWdIZWFkZXJ9IH0sCiAgICAgICAgICAgIEZyb20gPT4gJFBhcmFte09yaWdIZWFkZXJ9LT57VG99LAogICAgICAgICAgICBUbyAgID0+ICRQYXJhbXtPcmlnSGVhZGVyfS0+e0Zyb219LAogICAgICAgIH0sCiAgICAgICAgVGlja2V0RGF0YSAgICAgID0+IFwlVGlja2V0LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBMYW5ndWFnZSAgICAgICAgPT4gJExhbmd1YWdlLAogICAgICAgIEFkZFRpbWV6b25lSW5mbyA9PiB7CiAgICAgICAgICAgIEF1dG9SZXNwb25zZSA9PiAxLAogICAgICAgIH0sCiAgICApOwogICAgJEF1dG9SZXNwb25zZXtTdWJqZWN0fSA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCA9PiAwLAogICAgICAgIFRleHQgICAgID0+ICRBdXRvUmVzcG9uc2V7U3ViamVjdH0sCiAgICAgICAgRGF0YSAgICAgPT4gewogICAgICAgICAgICAleyAkUGFyYW17T3JpZ0hlYWRlcn0gfSwKICAgICAgICAgICAgRnJvbSA9PiAkUGFyYW17T3JpZ0hlYWRlcn0tPntUb30sCiAgICAgICAgICAgIFRvICAgPT4gJFBhcmFte09yaWdIZWFkZXJ9LT57RnJvbX0sCiAgICAgICAgfSwKICAgICAgICBUaWNrZXREYXRhICAgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIExhbmd1YWdlICAgICAgICA9PiAkTGFuZ3VhZ2UsCiAgICAgICAgQWRkVGltZXpvbmVJbmZvID0+IHsKICAgICAgICAgICAgQXV0b1Jlc3BvbnNlID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgJEF1dG9SZXNwb25zZXtTdWJqZWN0fSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RCdWlsZCgKICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgIFN1YmplY3QgICAgICA9PiAkQXV0b1Jlc3BvbnNle1N1YmplY3R9LAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTmV3JywKICAgICAgICBOb0NsZWFudXAgICAgPT4gMSwKICAgICk7CgogICAgIyBnZXQgc2VuZGVyIGF0dHJpYnV0ZXMgYmFzZWQgb24gYXV0byByZXNwb25zZSB0eXBlCiAgICBpZiAoICRBdXRvUmVzcG9uc2V7U3lzdGVtQWRkcmVzc0lEfSApIHsKCiAgICAgICAgbXkgJUFkZHJlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpLT5TeXN0ZW1BZGRyZXNzR2V0KAogICAgICAgICAgICBJRCA9PiAkQXV0b1Jlc3BvbnNle1N5c3RlbUFkZHJlc3NJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJEF1dG9SZXNwb25zZXtTZW5kZXJBZGRyZXNzfSAgPSAkQWRkcmVzc3tOYW1lfTsKICAgICAgICAkQXV0b1Jlc3BvbnNle1NlbmRlclJlYWxuYW1lfSA9ICRBZGRyZXNze1JlYWxuYW1lfTsgICAgIyBub3RlIHRoYXQgU3lzdGVtQWRkcmVzcygpIGRvZXMgbm90IGNhcGl0YWxpemUgdGhlICduJwogICAgfQoKICAgICMgZ2V0IHNlbmRlciBhdHRyaWJ1dGVzIGJhc2VkIG9uIHF1ZXVlCiAgICBlbHNlIHsKCiAgICAgICAgbXkgJUFkZHJlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+R2V0U3lzdGVtQWRkcmVzcygKICAgICAgICAgICAgUXVldWVJRCA9PiAkVGlja2V0e1F1ZXVlSUR9LAogICAgICAgICk7CgogICAgICAgICRBdXRvUmVzcG9uc2V7U2VuZGVyQWRkcmVzc30gID0gJEFkZHJlc3N7RW1haWx9OwogICAgICAgICRBdXRvUmVzcG9uc2V7U2VuZGVyUmVhbG5hbWV9ID0gJEFkZHJlc3N7UGhyYXNlfTsKICAgIH0KCiAgICAjIGFkZCB1cmxzIGFuZCB2ZXJpZnkgdG8gYmUgZnVsbCBodG1sIGRvY3VtZW50CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICkgewoKICAgICAgICAkQXV0b1Jlc3BvbnNle1RleHR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5MaW5rUXVvdGUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkQXV0b1Jlc3BvbnNle1RleHR9LAogICAgICAgICk7CgogICAgICAgICRBdXRvUmVzcG9uc2V7VGV4dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkQXV0b1Jlc3BvbnNle1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICVBdXRvUmVzcG9uc2U7Cn0KCj1oZWFkMiBOb3RpZmljYXRpb25FdmVudCgpCgpyZXBsYWNlIGFsbCBPVE9CTyBzbWFydCB0YWdzIGluIHRoZSBub3RpZmljYXRpb24gYm9keSBhbmQgc3ViamVjdAoKICAgIG15ICVOb3RpZmljYXRpb25FdmVudCA9ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdC0+Tm90aWZpY2F0aW9uRXZlbnQoCiAgICAgICAgVGlja2V0RGF0YSAgICAgICAgICAgID0+ICRUaWNrZXREYXRhSGFzaFJlZiwKICAgICAgICBSZWNpcGllbnQgICAgICAgICAgICAgPT4gJFVzZXJEYXRhSGFzaFJlZiwgICAgICAgICAgIyBBZ2VudCBvciBDdXN0b21lciBkYXRhIGdldCByZXN1bHQKICAgICAgICBOb3RpZmljYXRpb24gICAgICAgICAgPT4gJE5vdGlmaWNhdGlvbkRhdGFIYXNoUmVmLAogICAgICAgIEN1c3RvbWVyTWVzc2FnZVBhcmFtcyA9PiAkQXJ0aWNsZUhhc2hSZWYsICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgTm90aWZpY2F0aW9uRXZlbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldERhdGEgTm90aWZpY2F0aW9uIFJlY2lwaWVudCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtOb3RpZmljYXRpb259ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOb3RpZmljYXRpb24gaXMgaW52YWxpZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVOb3RpZmljYXRpb24gPSAleyAkUGFyYW17Tm90aWZpY2F0aW9ufSB9OwoKICAgICMgZXhjaGFuZ2luZyBvcmlnaW5hbCByZWZlcmVuY2UgcHJldmVudCBpdCB0byBncm93IHVwCiAgICBpZiAoIHJlZiAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSAmJiByZWYgJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30gZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVMb2NhbEN1c3RvbWVyTWVzc2FnZVBhcmFtcyA9ICV7ICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9IH07CiAgICAgICAgJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30gPSBcJUxvY2FsQ3VzdG9tZXJNZXNzYWdlUGFyYW1zOwogICAgfQoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgR2V0IGxhc3QgYXJ0aWNsZSBmcm9tIGN1c3RvbWVyLgogICAgbXkgQEN1c3RvbWVyQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgICA9PiAkUGFyYW17VGlja2V0RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgIE9ubHlMYXN0ICAgPT4gMSwKICAgICk7CgogICAgbXkgJUN1c3RvbWVyQXJ0aWNsZTsKCiAgICBBUlRJQ0xFOgogICAgZm9yIG15ICRBcnRpY2xlIChAQ3VzdG9tZXJBcnRpY2xlcykgewogICAgICAgIG5leHQgQVJUSUNMRSBpZiAhJEFydGljbGUtPntBcnRpY2xlSUR9OwoKICAgICAgICAlQ3VzdG9tZXJBcnRpY2xlID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCAleyRBcnRpY2xlfSApLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAleyRBcnRpY2xlfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CiAgICB9CgogICAgIyBHZXQgbGFzdCBhcnRpY2xlIGZyb20gYWdlbnQuCiAgICBteSBAQWdlbnRBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCAgID0+ICRQYXJhbXtUaWNrZXREYXRhfS0+e1RpY2tldElEfSwKICAgICAgICBTZW5kZXJUeXBlID0+ICdhZ2VudCcsCiAgICAgICAgT25seUxhc3QgICA9PiAxLAogICAgKTsKCiAgICBteSAlQWdlbnRBcnRpY2xlOwoKICAgIEFHRU5UQVJUSUNMRToKICAgIGZvciBteSAkQXJ0aWNsZSAoQEFnZW50QXJ0aWNsZXMpIHsKICAgICAgICBuZXh0IEFHRU5UQVJUSUNMRSBpZiAhJEFydGljbGUtPntBcnRpY2xlSUR9OwoKICAgICAgICAlQWdlbnRBcnRpY2xlID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCAleyRBcnRpY2xlfSApLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAleyRBcnRpY2xlfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgSW5jbHVkZSB0aGUgdHJhbnNtaXNzaW9uIHN0YXR1cywgaWYgYXJ0aWNsZSBpcyBhbiBlbWFpbC4KICAgICAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnKS0+Q2hhbm5lbEdldCgKICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xlLT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICRDb21tdW5pY2F0aW9uQ2hhbm5lbHtDaGFubmVsTmFtZX0gZXEgJ0VtYWlsJyApIHsKICAgICAgICAgICAgbXkgJFRyYW5zbWlzc2lvblN0YXR1cyA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKS0+QXJ0aWNsZVRyYW5zbWlzc2lvblN0YXR1cygKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJFRyYW5zbWlzc2lvblN0YXR1cyAmJiAkVHJhbnNtaXNzaW9uU3RhdHVzLT57TWVzc2FnZX0gKSB7CiAgICAgICAgICAgICAgICAkQWdlbnRBcnRpY2xle1RyYW5zbWlzc2lvblN0YXR1c01lc3NhZ2V9ID0gJFRyYW5zbWlzc2lvblN0YXR1cy0+e01lc3NhZ2V9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgQVJUSUNMRToKICAgIGZvciBteSAkQXJ0aWNsZURhdGEgKCBcJUN1c3RvbWVyQXJ0aWNsZSwgXCVBZ2VudEFydGljbGUgKSB7CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZURhdGEtPntUaWNrZXRJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZURhdGEtPntBcnRpY2xlSUR9OwoKICAgICAgICAjIEdldCBhcnRpY2xlIHByZXZpZXcgaW4gcGxhaW4gdGV4dCBhbmQgc3RvcmUgaXQgYXMgQm9keSBrZXkuCiAgICAgICAgJEFydGljbGVEYXRhLT57Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlUHJldmlldygKICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkQXJ0aWNsZURhdGEtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgPT4gJEFydGljbGVEYXRhLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgUmVzdWx0VHlwZSA9PiAncGxhaW4nLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFjY291bnRlZCB0aW1lCiAgICAgICAgbXkgJEFjY291bnRlZFRpbWUgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZURhdGEtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IHRoZSBhY2NvdW50ZWQgdGltZSBhcyBwYXJ0IG9mIHRoZSBhcnRpY2xlcyBpbmZvcm1hdGlvbgogICAgICAgICRBcnRpY2xlRGF0YS0+e1RpbWVVbml0fSA9ICRBY2NvdW50ZWRUaW1lOwogICAgfQoKICAgICMgUG9wdWxhdGUgdGhlIGhhc2ggJ0N1c3RvbWVyTWVzc2FnZVBhcmFtcycgd2l0aCBhbGwgdGhlIGN1c3RvbWVyLWFydGljbGUgZGF0YQogICAgIyBhbmQgb3ZlcndyaXRlIGl0IHdpdGggJ0N1c3RvbWVyTWVzc2FnZVBhcmFtcycgcGFzc2VkIGluIHRoZSBQYXJhbXMgKGJ1ZyAjMTMzMjUpLgogICAgJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30gPSB7CiAgICAgICAgJUN1c3RvbWVyQXJ0aWNsZSwKICAgICAgICAleyAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSB8fCB7fSB9LAogICAgfTsKCiAgICAjIGdldCBzeXN0ZW0gZGVmYXVsdCBsYW5ndWFnZQogICAgbXkgJERlZmF1bHRMYW5ndWFnZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGVmYXVsdExhbmd1YWdlJykgfHwgJ2VuJzsKCiAgICBteSAkTGFuZ3VhZ2VzID0gWyAkUGFyYW17UmVjaXBpZW50fS0+e1VzZXJMYW5ndWFnZX0sICREZWZhdWx0TGFuZ3VhZ2UsICdlbicgXTsKCiAgICBteSAkTGFuZ3VhZ2U7CiAgICBMQU5HVUFHRToKICAgIGZvciBteSAkSXRlbSAoIEB7JExhbmd1YWdlc30gKSB7CiAgICAgICAgbmV4dCBMQU5HVUFHRSBpZiAhJEl0ZW07CiAgICAgICAgbmV4dCBMQU5HVUFHRSBpZiAhJE5vdGlmaWNhdGlvbntNZXNzYWdlfS0+eyRJdGVtfTsKCiAgICAgICAgIyBzZXQgbGFuZ3VhZ2UKICAgICAgICAkTGFuZ3VhZ2UgPSAkSXRlbTsKICAgICAgICBsYXN0IExBTkdVQUdFOwogICAgfQoKICAgICMgaWYgbm8gbGFuZ3VhZ2UsIHRoZW4gdGFrZSB0aGUgZmlyc3Qgb25lIGF2YWlsYWJsZQogICAgaWYgKCAhJExhbmd1YWdlICkgewogICAgICAgIG15IEBOb3RpZmljYXRpb25MYW5ndWFnZXMgPSBzb3J0IGtleXMgJXsgJE5vdGlmaWNhdGlvbntNZXNzYWdlfSB9OwogICAgICAgICRMYW5ndWFnZSA9ICROb3RpZmljYXRpb25MYW5ndWFnZXNbMF07CiAgICB9CgogICAgIyBjb3B5IHRoZSBjb3JyZWN0IGxhbmd1YWdlIG1lc3NhZ2UgYXR0cmlidXRlcyB0byBhIGZsYXQgc3RydWN0dXJlCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoU3ViamVjdCBCb2R5IENvbnRlbnRUeXBlKSkgewogICAgICAgICROb3RpZmljYXRpb257JEF0dHJpYnV0ZX0gPSAkTm90aWZpY2F0aW9ue01lc3NhZ2V9LT57JExhbmd1YWdlfS0+eyRBdHRyaWJ1dGV9OwogICAgfQoKICAgICMgR2V0IGN1c3RvbWVyIGFydGljbGUgZmllbGRzLgogICAgbXkgJUN1c3RvbWVyQXJ0aWNsZUZpZWxkczsKCiAgICBpZiAoJUN1c3RvbWVyQXJ0aWNsZSkgewogICAgICAgICVDdXN0b21lckFydGljbGVGaWVsZHMgPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlRmllbGRzKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJEN1c3RvbWVyQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQ3VzdG9tZXJBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgIEFSVElDTEVfRklFTEQ6CiAgICBmb3IgbXkgJEFydGljbGVGaWVsZCAoIHNvcnQga2V5cyAlQ3VzdG9tZXJBcnRpY2xlRmllbGRzICkgewogICAgICAgIG5leHQgQVJUSUNMRV9GSUVMRCBpZiAhZGVmaW5lZCAkQ3VzdG9tZXJBcnRpY2xlRmllbGRzeyRBcnRpY2xlRmllbGR9LT57VmFsdWV9OwoKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEFydGljbGVGaWVsZH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEFydGljbGVGaWVsZH0gPSAkQ3VzdG9tZXJBcnRpY2xlRmllbGRzeyRBcnRpY2xlRmllbGR9LT57VmFsdWV9OwogICAgICAgIH0KICAgICAgICBjaG9tcCAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfS0+eyRBcnRpY2xlRmllbGR9OwogICAgfQoKICAgICMgZm9ybWF0IGJvZHkgKG9ubHkgaWYgbG9uZ2VyIHRoZSA4NiBjaGFycykKICAgIGlmICggJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30tPntCb2R5fSApIHsKICAgICAgICBpZiAoIGxlbmd0aCAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfS0+e0JvZHl9ID4gODYgKSB7CiAgICAgICAgICAgIG15IEBMaW5lcyA9IHNwbGl0IC9cbi8sICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57Qm9keX07CiAgICAgICAgICAgIExJTkU6CiAgICAgICAgICAgIGZvciBteSAkTGluZSAoQExpbmVzKSB7CiAgICAgICAgICAgICAgICBteSAkTGluZVdyYXBwZWQgPSAkTGluZSA9fiBzLyhePi4rfC57NCw4Nn0pKD86XHN8XHopLyQxXG4vZ207CgogICAgICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lV3JhcHBlZDsKCiAgICAgICAgICAgICAgICAjIGlmIHRoZSByZWdleCBkb2VzIG5vdCBtYXRjaCB0aGVuIHdlIG5lZWQKICAgICAgICAgICAgICAgICMgdG8gYWRkIHRoZSBtaXNzaW5nIG5ldyBsaW5lIG9mIHRoZSBzcGxpdAogICAgICAgICAgICAgICAgIyBlbHNlIHdlIHdpbGwgbG9zZSBlLmcuIGVtcHR5IGxpbmVzIG9mIHRoZSBib2R5LgogICAgICAgICAgICAgICAgIyAoYnVnIzEwNjc5KQogICAgICAgICAgICAgICAgJExpbmUgLj0gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfS0+e0JvZHl9ID0gam9pbiAnJywgQExpbmVzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGZpbGwgdXAgcmVxdWlyZWQgYXR0cmlidXRlcwogICAgZm9yIG15ICRUZXh0IChxdyhTdWJqZWN0IEJvZHkpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30tPnskVGV4dH0gKSB7CgogICAgICAgICAgICAjIFNldCB0byBsYXN0IGN1c3RvbWVyIGFydGljbGUgYXR0cmlidXRlIGlmIGl0IGlzIGVtcHR5IHN0cmluZy4KICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgaWYgQm9keSBpcyBlbXB0eSBzdHJpbmcgKG5vdCB1bmRlZiEpLCBpdCBpcyBtYXliZSBzZW50IGZyb20gTm90aWZpY2F0aW9uT3duZXJVcGRhdGUgZXZlbnQKICAgICAgICAgICAgIyBhbmQgb3ZlcnJpZGVzIGxhc3QgY3VzdG9tZXIgYXJ0aWNsZSBib2R5IChpbiAlQ3VzdG9tZXJBcnRpY2xlKSBhYm92ZSAtIHNlZSBidWcjMTQ2NzguCiAgICAgICAgICAgICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JFRleHR9ID0gJEN1c3RvbWVyQXJ0aWNsZXskVGV4dH0gfHwgIk5vICRUZXh0IjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFN0YXJ0ID0gJzwnOwogICAgbXkgJEVuZCAgID0gJz4nOwogICAgaWYgKCAkTm90aWZpY2F0aW9ue0NvbnRlbnRUeXBlfSA9fiBte3RleHRcL2h0bWx9ICkgewogICAgICAgICRTdGFydCA9ICcmbHQ7JzsKICAgICAgICAkRW5kICAgPSAnJmd0Oyc7CiAgICB9CgogICAgIyByZXBsYWNlIDxPVE9CT19DVVNUT01FUl9EQVRBXyo+IHRhZ3MgZWFybHkgZnJvbSBDdXN0b21lck1lc3NhZ2VQYXJhbXMsIHRoZSByZXN0cyB3aWxsIGJlIHJlcGxhY2VkCiAgICAjIGJ5IHRpY2tldCBjdXN0b21lciB1c2VyCiAgICBLRVk6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSB8fCB7fSB9ICkgewoKICAgICAgICBuZXh0IEtFWSBpZiAhJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30tPnskS2V5fTsKCiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSAgICA9fiBzLyR7U3RhcnR9T1RPQk9fQ1VTVE9NRVJfREFUQV8kS2V5JHtFbmR9LyRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEtleX0vZ2k7CiAgICAgICAgJE5vdGlmaWNhdGlvbntTdWJqZWN0fSA9fiBzLzxPVE9CT19DVVNUT01FUl9EQVRBXyRLZXk+LyRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEtleX17JEtleX0vZ2k7CiAgICB9CgogICAgIyBkbyB0ZXh0L3BsYWluIHRvIHRleHQvaHRtbCBjb252ZXJ0CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICYmICROb3RpZmljYXRpb257Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICROb3RpZmljYXRpb257Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICROb3RpZmljYXRpb257Qm9keX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgIGlmICggISRTZWxmLT57UmljaFRleHR9ICYmICROb3RpZmljYXRpb257Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kgKSB7CiAgICAgICAgJE5vdGlmaWNhdGlvbntDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkTm90aWZpY2F0aW9ue0JvZHl9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbm90aWZ5IHRleHRzCiAgICBmb3IgbXkgJFRleHQgKHF3KFN1YmplY3QgQm9keSkpIHsKICAgICAgICBpZiAoICEkTm90aWZpY2F0aW9ueyRUZXh0fSApIHsKICAgICAgICAgICAgJE5vdGlmaWNhdGlvbnskVGV4dH0gPSAiTm8gTm90aWZpY2F0aW9uICRUZXh0IGZvciAkUGFyYW17VHlwZX0gZm91bmQhIjsKICAgICAgICB9CiAgICB9CgogICAgIyByZXBsYWNlIHBsYWNlIGhvbGRlciBzdHVmZgogICAgJE5vdGlmaWNhdGlvbntCb2R5fSA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCAgICAgICAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgVGV4dCAgICAgICAgICAgID0+ICROb3RpZmljYXRpb257Qm9keX0sCiAgICAgICAgUmVjaXBpZW50ICAgICAgID0+ICRQYXJhbXtSZWNpcGllbnR9LAogICAgICAgIERhdGEgICAgICAgICAgICA9PiAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSwKICAgICAgICBEYXRhQWdlbnQgICAgICAgPT4gXCVBZ2VudEFydGljbGUsCiAgICAgICAgVGlja2V0RGF0YSAgICAgID0+ICRQYXJhbXtUaWNrZXREYXRhfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgTGFuZ3VhZ2UgICAgICAgID0+ICRMYW5ndWFnZSwKICAgICAgICBBZGRUaW1lem9uZUluZm8gPT4gewogICAgICAgICAgICBOb3RpZmljYXRpb25FdmVudCA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICROb3RpZmljYXRpb257U3ViamVjdH0gPSAkU2VsZi0+X1JlcGxhY2UoCiAgICAgICAgUmljaFRleHQgICAgICAgID0+IDAsCiAgICAgICAgVGV4dCAgICAgICAgICAgID0+ICROb3RpZmljYXRpb257U3ViamVjdH0sCiAgICAgICAgUmVjaXBpZW50ICAgICAgID0+ICRQYXJhbXtSZWNpcGllbnR9LAogICAgICAgIERhdGEgICAgICAgICAgICA9PiAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSwKICAgICAgICBEYXRhQWdlbnQgICAgICAgPT4gXCVBZ2VudEFydGljbGUsCiAgICAgICAgVGlja2V0RGF0YSAgICAgID0+ICRQYXJhbXtUaWNrZXREYXRhfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgTGFuZ3VhZ2UgICAgICAgID0+ICRMYW5ndWFnZSwKICAgICAgICBBZGRUaW1lem9uZUluZm8gPT4gewogICAgICAgICAgICBOb3RpZmljYXRpb25FdmVudCA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgS2VlcCB0aGUgIm9yaWdpbmFsIiAodW5tb2RpZmllZCkgc3ViamVjdCBhbmQgYm9keSBmb3IgbGF0ZXIgdXNlLgogICAgJE5vdGlmaWNhdGlvbntPcmlnaW5hbFN1YmplY3R9ID0gJE5vdGlmaWNhdGlvbntTdWJqZWN0fTsKICAgICROb3RpZmljYXRpb257T3JpZ2luYWxCb2R5fSAgICA9ICROb3RpZmljYXRpb257Qm9keX07CgogICAgJE5vdGlmaWNhdGlvbntTdWJqZWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3ViamVjdEJ1aWxkKAogICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17VGlja2V0RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgIFN1YmplY3QgICAgICA9PiAkTm90aWZpY2F0aW9ue1N1YmplY3R9IHx8ICcnLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTmV3JywKICAgICk7CgogICAgIyBhZGQgVVJMcyBhbmQgdmVyaWZ5IHRvIGJlIGZ1bGwgSFRNTCBkb2N1bWVudAogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKCiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJE5vdGlmaWNhdGlvbntCb2R5fSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAlTm90aWZpY2F0aW9uOwp9Cgo9YmVnaW4gSW50ZXJuYWw6CgpQcml2YXRlIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoaXMgcGFja2FnZSAobm90IHBhcnQgb2YgdGhlIGRvY3VtZW50ZWQgcHVibGljIEFQSSkuCgo9aGVhZDIgX0ZpeE1haWx0bygpCgpBIGhlbHBlciBtZXRob2Qgd2hpY2ggaXMgdXNlZCBieSB0aGUgaW50ZXJuYWwgbWV0aG9kIEM8X1JlcGxhY2UoKT4uClRoZSBjb21wbGV0ZSBzZXQgb2YgcGFyYW1ldGVycyBvZiBDPF9SZXBsYWNlKCk+IGlzIG5lZWRlZCBoZXJlIGFzIEM8X1JlcGxhY2UoKT4KaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5LgoKVGhlIGdvYWwgaXMgdG8gc3VwcG9ydCBwYXJhbWV0ZXIgZXhwYW5zaW9uIGluIG1haWx0byBsaW5rcy4gU28KCiAgPGEgaHJlZj0ibWFpbHRvOnVzZXJAdGltZXpvbmVpbmZvLm9yZz9zdWJqZWN0PU9UT0JPJTIwVXNlckRlZmF1bHRUaW1lWm9uZSZhbXA7Ym9keT0lM0NPVE9CT19DT05GSUdfVXNlckRlZmF1bHRUaW1lWm9uZSUzRSI+bWFpbCB0byB0aW1lem9uZWluZm88L2E+LgoKd291bGQgYmUgZXhwYW5kZWQgdG86CgogIDxhIGhyZWY9Im1haWx0bzp1c2VyQHRpbWV6b25laW5mby5vcmc/c3ViamVjdD1PVE9CTyUyMFVzZXJEZWZhdWx0VGltZVpvbmUmYW1wO2JvZHk9VVRDIj5tYWlsIHRvIHRpbWV6b25laW5mbzwvYT4uCgo9Y3V0CgpzdWIgX0ZpeE1haWx0byB7CiAgICBteSAoICRTZWxmLCAkUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG1haWx0byBsaW5rcwogICAgIyBzaW5jZSB0aGUgc3ViamVjdCBhbmQgYm9keSBvZiB0aG9zZSBtYWlsdG8gbGlua3MgYXJlCiAgICAjIHVyaSBlc2NhcGVkIHdlIGhhdmUgdG8gdXJpIHVuZXNjYXBlIHRoZW0sIHJlcGxhY2UKICAgICMgcG9zc2libGUgcGxhY2Vob2xkZXJzIGFuZCB0aGVuIHJlLXVyaSBlc2NhcGUgdGhlbQogICAgJFBhcmFtLT57VGV4dH0gPX4gc3sKICAgICAgICAoaHJlZj0ibWFpbHRvOlteXD9dK1w/KShbXiJdKyIpCiAgICB9CiAgICB7CiAgICAgICAgbXkgJE1haWxUb0hyZWYgICAgICAgID0gJDE7CiAgICAgICAgbXkgJE1haWxUb0hyZWZDb250ZW50ID0gJDI7CgogICAgICAgICMgTmVzdGVkIHMvLy9lZ3ghCiAgICAgICAgJE1haWxUb0hyZWZDb250ZW50ID1+IHN7CiAgICAgICAgICAgICgoPzpzdWJqZWN0fGJvZHkpPSkoLis/KSgifCYpCiAgICAgICAgfQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFN1YmplY3RPckJvZHlQcmVmaXggID0gJDE7CiAgICAgICAgICAgIG15ICRTdWJqZWN0T3JCb2R5Q29udGVudCA9ICQyOwogICAgICAgICAgICBteSAkU3ViamVjdE9yQm9keVN1ZmZpeCAgPSAkMzsKCiAgICAgICAgICAgIG15ICRTdWJqZWN0T3JCb2R5Q29udGVudFVuZXNjYXBlZCA9IHVyaV91bmVzY2FwZSgkU3ViamVjdE9yQm9keUNvbnRlbnQpOwoKICAgICAgICAgICAgIyBUT0RPOiBiZXdhcmUgb2YgcmVjdXJzaW9uCiAgICAgICAgICAgIG15ICRTdWJqZWN0T3JCb2R5Q29udGVudFJlcGxhY2VkID0gJFNlbGYtPl9SZXBsYWNlKAogICAgICAgICAgICAgICAgJFBhcmFtLT4lKiwKICAgICAgICAgICAgICAgIFRleHQgICAgID0+ICRTdWJqZWN0T3JCb2R5Q29udGVudFVuZXNjYXBlZCwKICAgICAgICAgICAgICAgIFJpY2hUZXh0ID0+IDAsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkU3ViamVjdE9yQm9keUNvbnRlbnRFc2NhcGVkID0gdXJpX2VzY2FwZV91dGY4KCRTdWJqZWN0T3JCb2R5Q29udGVudFJlcGxhY2VkKTsKCiAgICAgICAgICAgICRTdWJqZWN0T3JCb2R5UHJlZml4IC4gJFN1YmplY3RPckJvZHlDb250ZW50RXNjYXBlZCAuICRTdWJqZWN0T3JCb2R5U3VmZml4OwogICAgICAgIH1lZ3g7CgogICAgICAgICRNYWlsVG9IcmVmIC4gJE1haWxUb0hyZWZDb250ZW50OwogICAgfWVneDsKCiAgICAjIG5vIHJldHVybiB2YWx1ZSBuZWVkZWQgYXMgJFJlZlRvVGV4dCBpcyBtb2RpZmllZAogICAgcmV0dXJuOwp9Cgo9aGVhZDIgX0ZpbmRSZWNpcGllbnRUaW1lWm9uZSgpCgpBIGhlbHBlciBtZXRob2Qgd2hpY2ggaXMgdXNlZCBieSB0aGUgaW50ZXJuYWwgbWV0aG9kIEM8X1JlcGxhY2UoKT4uCgo9Y3V0CgpzdWIgX0ZpbmRSZWNpcGllbnRUaW1lWm9uZSB7CiAgICBteSAoICRTZWxmLCAkQWRkVGltZXpvbmVJbmZvLCAkVGlja2V0LCAkUmVjaXBpZW50ICkgPSBAXzsKCiAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwoKICAgIG15ICVDdXN0b21lclVzZXI7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRUaWNrZXQpICYmICRUaWNrZXQtPntDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgJUN1c3RvbWVyVXNlciA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoIFVzZXIgPT4gJFRpY2tldC0+e0N1c3RvbWVyVXNlcklEfSApOwogICAgfQoKICAgIG15ICVVc2VyUHJlZmVyZW5jZXM7CgogICAgaWYgKCAkQWRkVGltZXpvbmVJbmZvLT57Tm90aWZpY2F0aW9uRXZlbnR9ICkgewogICAgICAgIGlmICggJFJlY2lwaWVudC0+e1R5cGV9IGVxICdBZ2VudCcgKSB7CiAgICAgICAgICAgICVVc2VyUHJlZmVyZW5jZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUmVjaXBpZW50LT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUmVjaXBpZW50LT57VHlwZX0gZXEgJ0N1c3RvbWVyJyAmJiAkUmVjaXBpZW50LT57VXNlcklEfSApIHsKICAgICAgICAgICAgJVVzZXJQcmVmZXJlbmNlcyA9ICRDdXN0b21lclVzZXJPYmplY3QtPkdldFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRSZWNpcGllbnQtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICgKICAgICAgICAkQWRkVGltZXpvbmVJbmZvLT57QXV0b1Jlc3BvbnNlfQogICAgICAgICYmICRUaWNrZXQtPntDdXN0b21lclVzZXJJRH0KICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggXCVDdXN0b21lclVzZXIgKQogICAgICAgICkKICAgIHsKICAgICAgICAlVXNlclByZWZlcmVuY2VzID0gJEN1c3RvbWVyVXNlck9iamVjdC0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVGlja2V0LT57Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBmYWxsIGJhY2sgdG8gdGhlIE9UT0JPIHRpbWUgem9uZQogICAgcmV0dXJuICRVc2VyUHJlZmVyZW5jZXN7VXNlclRpbWVab25lfSBpZiAkVXNlclByZWZlcmVuY2Vze1VzZXJUaW1lWm9uZX07CiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPk9UT0JPVGltZVpvbmVHZXQoKTsKfQoKPWhlYWQyIF9SZXBsYWNlKCkKCnJlcGxhY2UgdGhlIHBsYWNlaG9sZGVycyBpbiB0aGUgdGV4dAoKPWN1dAoKc3ViIF9SZXBsYWNlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRleHQgUmljaFRleHQgRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIG1haWx0bywgJFBhcmFte1RleHR9IHdpbGwgYmUgbW9kaWZpZWQKICAgICRTZWxmLT5fRml4TWFpbHRvKCBcJVBhcmFtICk7CgogICAgIyBUYWdzIGxvb2sgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB3aGF0IGtpbmQgb2YgdGV4dCB3ZSdyZSB3b3JraW5nIHdpdGgKICAgIG15ICggJFN0YXJ0LCAkRW5kICkgPSAoICc8JywgJz4nICk7CiAgICBpZiAoICRQYXJhbXtSaWNoVGV4dH0gKSB7CiAgICAgICAgKCAkU3RhcnQsICRFbmQgKSA9ICggJyZsdDsnLCAnJmd0OycgKTsKICAgICAgICAkUGFyYW17VGV4dH0gPX4gcy9bXG5ccl0vL2c7CiAgICB9CgogICAgbXkgJVRpY2tldDsKICAgIGlmICggJFBhcmFte1RpY2tldERhdGF9ICkgewogICAgICAgICVUaWNrZXQgPSAkUGFyYW17VGlja2V0RGF0YX0tPiUqOwogICAgfQoKICAgICMgRGV0ZXJtaW5lIHJlY2lwaWVudCdzIHRpbWV6b25lIGlmIG5lZWRlZC4KICAgIG15ICRSZWNpcGllbnRUaW1lWm9uZTsKICAgIGlmICggJFBhcmFte0FkZFRpbWV6b25lSW5mb30gKSB7CiAgICAgICAgJFJlY2lwaWVudFRpbWVab25lID0gJFNlbGYtPl9GaW5kUmVjaXBpZW50VGltZVpvbmUoICRQYXJhbXtBZGRUaW1lem9uZUluZm99LCBcJVRpY2tldCwgJFBhcmFte1JlY2lwaWVudH0gKTsKICAgIH0KCiAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwoKICAgICMgUmVwbGFjZSBVbml4IHRpbWUgZm9ybWF0IHRhZ3MuCiAgICAjIElmIGxhbmd1YWdlIGlzIGRlZmluZWQsIHRoZXkgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhIGNvcnJlY3QgZm9ybWF0IGluIGJlbG93IElGIHN0YXRlbWVudC4KICAgIGZvciBteSAkVW5peEZvcm1hdFRpbWUgKAogICAgICAgIHF3KFJlYWxUaWxsVGltZU5vdFVzZWQgRXNjYWxhdGlvblJlc3BvbnNlVGltZSBFc2NhbGF0aW9uVXBkYXRlVGltZSBFc2NhbGF0aW9uU29sdXRpb25UaW1lKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICRUaWNrZXR7JFVuaXhGb3JtYXRUaW1lfSApIHsKICAgICAgICAgICAgJFRpY2tldHskVW5peEZvcm1hdFRpbWV9ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBFcG9jaCA9PiAkVGlja2V0eyRVbml4Rm9ybWF0VGltZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApLT5Ub1N0cmluZygpOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyYW5zbGF0ZSB0aWNrZXQgdmFsdWVzIGlmIG5lZWRlZAogICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2V9ICkgewoKICAgICAgICBteSAkTGFuZ3VhZ2VPYmplY3QgPSBLZXJuZWw6Okxhbmd1YWdlLT5uZXcoCiAgICAgICAgICAgIFVzZXJMYW5ndWFnZSA9PiAkUGFyYW17TGFuZ3VhZ2V9LAogICAgICAgICk7CgogICAgICAgICMgVHJhbnNsYXRlIHRoZSBkaWZmZXJlbnQgdmFsdWVzLgogICAgICAgIGZvciBteSAkRmllbGQgKHF3KFR5cGUgU3RhdGUgU3RhdGVUeXBlIExvY2sgUHJpb3JpdHkpKSB7CiAgICAgICAgICAgICRUaWNrZXR7JEZpZWxkfSA9ICRMYW5ndWFnZU9iamVjdC0+VHJhbnNsYXRlKCAkVGlja2V0eyRGaWVsZH0gKTsKICAgICAgICB9CgogICAgICAgICMgVHJhbnNmb3JtIHRoZSBkYXRlIHZhbHVlcyBmcm9tIHRoZSB0aWNrZXQgZGF0YSAoYnV0IG5vdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZXMpLgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlVGlja2V0ICkgewogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAkQXR0cmlidXRlID1+IG17IFxBIER5bmFtaWNGaWVsZF8gfXhtczsKICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRUaWNrZXR7JEF0dHJpYnV0ZX07CgogICAgICAgICAgICBpZiAoICRUaWNrZXR7JEF0dHJpYnV0ZX0gPX4gbXtcQShcZFxkXGRcZCktKFxkXGQpLShcZFxkKVxzKFxkXGQpOihcZFxkKTooXGRcZClcen14aSApIHsKCiAgICAgICAgICAgICAgICAjIENoYW5nZSB0aW1lIHRvIHJlY2lwaWVudCdzIHRpbWV6b25lIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgIyBhbmQgbGF0ZXIgYXBwZW5kIHRpbWV6b25lIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKICAgICAgICAgICAgICAgICMgc2VlIGJ1ZyMxMzg2NSAoaHR0cHM6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg2NSkKICAgICAgICAgICAgICAgICMgYW5kIGJ1ZyMxNDI3MCAoaHR0cHM6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MCkuCiAgICAgICAgICAgICAgICBpZiAoJFJlY2lwaWVudFRpbWVab25lKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICREYXRlVGltZU9iamVjdC0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFJlY2lwaWVudFRpbWVab25lICk7CiAgICAgICAgICAgICAgICAgICAgJFRpY2tldHskQXR0cmlidXRlfSA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkVGlja2V0eyRBdHRyaWJ1dGV9ID0gJExhbmd1YWdlT2JqZWN0LT5Gb3JtYXRUaW1lU3RyaW5nKAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJ0RhdGVGb3JtYXQnLAogICAgICAgICAgICAgICAgICAgICdOb1NlY29uZHMnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIEFwcGVuZCB0aW1lem9uZSBpbmZvcm1hdGlvbiBpZiBuZWVkZWQuCiAgICAgICAgICAgICAgICBpZiAoJFJlY2lwaWVudFRpbWVab25lKSB7CiAgICAgICAgICAgICAgICAgICAgJFRpY2tldHskQXR0cmlidXRlfSAuPSAiICgkUmVjaXBpZW50VGltZVpvbmUpIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJExvY2FsTGF5b3V0T2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dC0+bmV3KAogICAgICAgICAgICBMYW5nID0+ICRQYXJhbXtMYW5ndWFnZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBDb252ZXJ0IHRhZ3MgaW4gc2Vjb25kcyB0byBtb3JlIHJlYWRhYmxlIGFwcHJvcHJpYXRlIGZvcm1hdCBpZiBsYW5ndWFnZSBpcyBkZWZpbmVkLgogICAgICAgIGZvciBteSAkVGltZUluU2Vjb25kcyAoCiAgICAgICAgICAgIHF3KFVudGlsVGltZSBFc2NhbGF0aW9uVGltZVdvcmtpbmdUaW1lIEVzY2FsYXRpb25UaW1lIEZpcnN0UmVzcG9uc2VUaW1lV29ya2luZ1RpbWUgRmlyc3RSZXNwb25zZVRpbWUgVXBkYXRlVGltZVdvcmtpbmdUaW1lCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgU29sdXRpb25UaW1lV29ya2luZ1RpbWUgU29sdXRpb25UaW1lKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBpZiAoICRUaWNrZXR7JFRpbWVJblNlY29uZHN9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldHskVGltZUluU2Vjb25kc30gPSAkTG9jYWxMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgICAgICAgICAgICAgIEFnZSAgID0+ICRUaWNrZXR7JFRpbWVJblNlY29uZHN9LAogICAgICAgICAgICAgICAgICAgIFNwYWNlID0+ICcgJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAlUXVldWU7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAlUXVldWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVHZXQoCiAgICAgICAgICAgIElEID0+ICRQYXJhbXtRdWV1ZUlEfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgUmVwbGFjZSBjb25maWcgb3B0aW9ucy4KICAgIG15ICRUYWcgPSAkU3RhcnQgLiAnT1RPQk9fQ09ORklHXyc7CiAgICAkUGFyYW17VGV4dH0gPX4gc3sKICAgICAgICAkVGFnCiAgICAgICAgICAgICMgdGhlIGtleSBmb3IgdGhlIGNvbmZpZwogICAgICAgICAgICAoPzxrZXk+Lis/KQogICAgICAgICRFbmQKICAgIH0KICAgIHsKICAgICAgICBteSAkS2V5ICAgPSAkK3trZXl9OwogICAgICAgIG15ICRWYWx1ZSA9ICRDb25maWdPYmplY3QtPkdldCgkS2V5KSAvLyAnJzsKCiAgICAgICAgIyBNYXNrIHNlbnNpdGl2ZSBjb25maWcgb3B0aW9ucy4KICAgICAgICBteSAkUmVwbGFjZSA9ICRTZWxmLT5fTWFza1NlbnNpdGl2ZVZhbHVlKAogICAgICAgICAgICBLZXkgICAgICA9PiAkS2V5LAogICAgICAgICAgICBWYWx1ZSAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIElzQ29uZmlnID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFJlcGxhY2U7CiAgICB9ZWd4OwoKICAgICMgY2xlYW51cAogICAgJFBhcmFte1RleHR9ID1+IHMvJFRhZy4rPyRFbmQvLS9naTsKCiAgICBteSAlUmVjaXBpZW50ID0gJXsgJFBhcmFte1JlY2lwaWVudH0gfHwge30gfTsKCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgIGlmICggISVSZWNpcGllbnQgJiYgJFBhcmFte1JlY2lwaWVudElEfSApIHsKCiAgICAgICAgJVJlY2lwaWVudCA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17UmVjaXBpZW50SUR9LAogICAgICAgICAgICBOb091dE9mT2ZmaWNlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG1vZGlmeSAkUGFyYW17VGV4dH0KICAgIG15ICRIYXNoR2xvYmFsUmVwbGFjZSA9IHN1YiB7CiAgICAgICAgbXkgKCAkVGFnLCAlSCApID0gQF87CgogICAgICAgICMgR2VuZXJhdGUgb25lIHNpbmdsZSBtYXRjaGluZyBzdHJpbmcgZm9yIGFsbCBrZXlzIHRvIHNhdmUgcGVyZm9ybWFuY2UuCiAgICAgICAgbXkgJEtleXMgPSBqb2luICd8JywgbWFwIHtxdW90ZW1ldGF9IGdyZXAgeyBkZWZpbmVkICRIeyRffSB9IGtleXMgJUg7CgogICAgICAgICMgU2V0IGFsbCBrZXlzIGFzIGxvd2VyY2FzZSB0byBiZSBhYmxlIHRvIG1hdGNoIGNhc2UgaW5zZW5zaXRpdmUsCiAgICAgICAgIyAgIGUuIGcuIDxPVE9CT19DVVNUT01FUl9Gcm9tPiBhbmQgPE9UT0JPX0NVU1RPTUVSX0ZST00+LgogICAgICAgICMgICBBbHNvIG1hc2sgYW55IHZhbHVlcyBjb250YWluaW5nIHNlbnNpdGl2ZSBkYXRhLgogICAgICAgICVIID0gbWFwIHsKICAgICAgICAgICAgbGMgJF8gPT4gJFNlbGYtPl9NYXNrU2Vuc2l0aXZlVmFsdWUoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkXywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRIeyRffSwKICAgICAgICAgICAgKQogICAgICAgIH0gc29ydCBrZXlzICVIOwoKICAgICAgICAjIElmIHRhZyBpcyAnT1RPQk9fQ1VTVE9NRVJfJyBhZGQgdGhlIGJvZHkgYWxpYXMgJ2VtYWlsL25vdGUnIHRvIGJlIHJlcGxhY2VkLgogICAgICAgIGlmICggJFRhZyA9fiBtL09UT0JPXyhDVVNUT01FUnxBR0VOVClfLyApIHsKICAgICAgICAgICAgS0VZOgogICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoIGVtYWlsIG5vdGUgKSkgewogICAgICAgICAgICAgICAgbXkgJFZhbHVlID0gJEh7JEtleX07CgogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgZGVmaW5lZCgkVmFsdWUpOwoKICAgICAgICAgICAgICAgICRIeyRLZXl9ID0gJEh7J2JvZHknfTsKICAgICAgICAgICAgICAgICRLZXlzIC49ICd8JyAuIHVjZmlyc3QgJEtleTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1RleHR9ID1+IHN7CiAgICAgICAgICAgICMgZ3JvdXBpbmcgcmVxdWlyZWQgaGVyZSwgYXMgd2UgbWlnaHQgaGF2ZSBhbHRlcm5hdGlvbnMKICAgICAgICAgICAgKD86JFRhZykKICAgICAgICAgICAgICAgICMgY2FzZSBpbnNlbnNpdGl2IGtleXMKICAgICAgICAgICAgICAgICg/PGtleT4kS2V5cykKICAgICAgICAgICAgJEVuZAogICAgICAgIH0KICAgICAgICB7CiAgICAgICAgICAgIG15ICRLZXkgPSAkK3trZXl9OwogICAgICAgICAgICAkSHsgbGMgJEtleSB9CiAgICAgICAgfXhpZWc7CiAgICB9OwoKICAgICMgZ2V0IHJlY2lwaWVudCBkYXRhIGFuZCByZXBsYWNlIGl0IHdpdGggPE9UT0JPXy4uLgogICAgJFRhZyA9ICRTdGFydCAuICdPVE9CT18nOwoKICAgICMgaW5jbHVkZSBtb3JlIHJlYWRhYmxlIHRhZyA8T1RPQk9fTk9USUZJQ0FUSU9OX1JFQ0lQSUVOVAogICAgbXkgJFJlY2lwaWVudFRhZyA9ICRTdGFydCAuICdPVE9CT19OT1RJRklDQVRJT05fUkVDSVBJRU5UXyc7CgogICAgaWYgKCVSZWNpcGllbnQpIHsKCiAgICAgICAgIyBIVE1MIHF1b3Rpbmcgb2YgY29udGVudAogICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKICAgICAgICAgICAgQVRUUklCVVRFOgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlUmVjaXBpZW50ICkgewogICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRSZWNpcGllbnR7JEF0dHJpYnV0ZX07CiAgICAgICAgICAgICAgICAkUmVjaXBpZW50eyRBdHRyaWJ1dGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRSZWNpcGllbnR7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkSGFzaEdsb2JhbFJlcGxhY2UtPiggIiRUYWd8JFJlY2lwaWVudFRhZyIsICVSZWNpcGllbnQgKTsKICAgIH0KCiAgICAjIGNsZWFudXAKICAgICRQYXJhbXtUZXh0fSA9fiBzLyRSZWNpcGllbnRUYWcuKz8kRW5kLy0vZ2k7CgogICAgIyBnZXQgb3duZXIgZGF0YSBhbmQgcmVwbGFjZSBpdCB3aXRoIDxPVE9CT19PV05FUl8uLi4KICAgICRUYWcgPSAkU3RhcnQgLiAnT1RPQk9fT1dORVJfJzsKCiAgICAjIGluY2x1ZGUgbW9yZSByZWFkYWJsZSB2ZXJzaW9uIDxPVE9CT19USUNLRVRfT1dORVIKICAgIG15ICRPd25lclRhZyA9ICRTdGFydCAuICdPVE9CT19USUNLRVRfT1dORVJfJzsKCiAgICBpZiAoICRUaWNrZXR7T3duZXJJRH0gKSB7CgogICAgICAgIG15ICVPd25lciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVGlja2V0e093bmVySUR9LAogICAgICAgICAgICBOb091dE9mT2ZmaWNlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBodG1sIHF1b3Rpbmcgb2YgY29udGVudAogICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKCiAgICAgICAgICAgIEFUVFJJQlVURToKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJU93bmVyICkgewogICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRPd25lcnskQXR0cmlidXRlfTsKICAgICAgICAgICAgICAgICRPd25lcnskQXR0cmlidXRlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkT3duZXJ7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkSGFzaEdsb2JhbFJlcGxhY2UtPiggIiRUYWd8JE93bmVyVGFnIiwgJU93bmVyICk7CiAgICB9CgogICAgIyBjbGVhbnVwCiAgICAkUGFyYW17VGV4dH0gPX4gcy8kVGFnLis/JEVuZC8tL2dpOwogICAgJFBhcmFte1RleHR9ID1+IHMvJE93bmVyVGFnLis/JEVuZC8tL2dpOwoKICAgICMgZ2V0IG93bmVyIGRhdGEgYW5kIHJlcGxhY2UgaXQgd2l0aCA8T1RPQk9fUkVTUE9OU0lCTEVfLi4uCiAgICAkVGFnID0gJFN0YXJ0IC4gJ09UT0JPX1JFU1BPTlNJQkxFXyc7CgogICAgIyBpbmNsdWRlIG1vcmUgcmVhZGFibGUgdmVyc2lvbiA8T1RPQk9fVElDS0VUX1JFU1BPTlNJQkxFCiAgICBteSAkUmVzcG9uc2libGVUYWcgPSAkU3RhcnQgLiAnT1RPQk9fVElDS0VUX1JFU1BPTlNJQkxFXyc7CgogICAgaWYgKCAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9ICkgewogICAgICAgIG15ICVSZXNwb25zaWJsZSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICAgICBOb091dE9mT2ZmaWNlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBIVE1MIHF1b3Rpbmcgb2YgY29udGVudAogICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKCiAgICAgICAgICAgIEFUVFJJQlVURToKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJVJlc3BvbnNpYmxlICkgewogICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRSZXNwb25zaWJsZXskQXR0cmlidXRlfTsKICAgICAgICAgICAgICAgICRSZXNwb25zaWJsZXskQXR0cmlidXRlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUmVzcG9uc2libGV7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkSGFzaEdsb2JhbFJlcGxhY2UtPiggIiRUYWd8JFJlc3BvbnNpYmxlVGFnIiwgJVJlc3BvbnNpYmxlICk7CiAgICB9CgogICAgIyBjbGVhbnVwCiAgICAkUGFyYW17VGV4dH0gPX4gcy8kVGFnLis/JEVuZC8tL2dpOwogICAgJFBhcmFte1RleHR9ID1+IHMvJFJlc3BvbnNpYmxlVGFnLis/JEVuZC8tL2dpOwoKICAgICRUYWcgPSAkU3RhcnQgLiAnT1RPQk9fQWdlbnRfJzsKICAgIG15ICRUYWcyICAgICAgICA9ICRTdGFydCAuICdPVE9CT19DVVJSRU5UXyc7CiAgICBteSAlQ3VycmVudFVzZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBOb091dE9mT2ZmaWNlID0+IDEsCiAgICApOwoKICAgICMgSFRNTCBxdW90aW5nIG9mIGNvbnRlbnQKICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVDdXJyZW50VXNlciApIHsKICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRDdXJyZW50VXNlcnskQXR0cmlidXRlfTsKICAgICAgICAgICAgJEN1cnJlbnRVc2VyeyRBdHRyaWJ1dGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEN1cnJlbnRVc2VyeyRBdHRyaWJ1dGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkSGFzaEdsb2JhbFJlcGxhY2UtPiggIiRUYWd8JFRhZzIiLCAlQ3VycmVudFVzZXIgKTsKCiAgICAjIHJlcGxhY2Ugb3RoZXIgbmVlZGVkIHN0dWZmCiAgICAkUGFyYW17VGV4dH0gPX4gcy8kU3RhcnQgT1RPQk9fRklSU1RfTkFNRSAkRW5kLyRDdXJyZW50VXNlcntVc2VyRmlyc3RuYW1lfS9neG1zOwogICAgJFBhcmFte1RleHR9ID1+IHMvJFN0YXJ0IE9UT0JPX0xBU1RfTkFNRSAkRW5kLyRDdXJyZW50VXNlcntVc2VyTGFzdG5hbWV9L2d4bXM7CgogICAgIyBjbGVhbnVwCiAgICAkUGFyYW17VGV4dH0gPX4gcy8kVGFnMi4rPyRFbmQvLS9naTsKCiAgICAjIHRpY2tldCBkYXRhCiAgICAkVGFnID0gJFN0YXJ0IC4gJ09UT0JPX1RJQ0tFVF8nOwoKICAgICMgaHRtbCBxdW90aW5nIG9mIGNvbnRlbnQKICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVUaWNrZXQgKSB7CiAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmICEkVGlja2V0eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICAkVGlja2V0eyRBdHRyaWJ1dGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBEcm9wZG93biwgQ2hlY2tib3ggYW5kIE11bHRpU2VsZWN0IER5bmFtaWNGaWVsZHMsIGNhbiBzdG9yZSB2YWx1ZXMgKGtleXMpIHRoYXQgYXJlCiAgICAjIGRpZmZlcmVudCBmcm9tIHRoZSB2YWx1ZXMgdG8gZGlzcGxheQogICAgIyA8T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9OYW1lWD4gcmV0dXJucyB0aGUgc3RvcmVkIGtleQogICAgIyA8T1RPQk9fVElDS0VUX0R5bmFtaWNGaWVsZF9OYW1lWF9WYWx1ZT4gcmV0dXJucyB0aGUgZGlzcGxheSB2YWx1ZQoKICAgIG15ICVEeW5hbWljRmllbGRzOwoKICAgICMgRm9yIHN5c3RlbXMgd2l0aCBtYW55IER5bmFtaWMgZmllbGRzIHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlbSBhbGwgdW5sZXNzIG5lZWRlZAogICAgIyBGaW5kIHdoYXQgRHluYW1pYyBGaWVsZCBWYWx1ZXMgYXJlIHJlcXVlc3RlZAogICAgd2hpbGUgKCAkUGFyYW17VGV4dH0gPX4gbS8kVGFnIER5bmFtaWNGaWVsZF8oXFMrPykoX1ZhbHVlKT8gJEVuZC9naXhtcyApIHsKICAgICAgICAkRHluYW1pY0ZpZWxkc3skMX0gPSAxOwogICAgfQoKICAgICMgdG8gc3RvcmUgYWxsIHRoZSByZXF1aXJlZCBEeW5hbWljRmllbGQgZGlzcGxheSB2YWx1ZXMKICAgIG15ICVEeW5hbWljRmllbGREaXNwbGF5VmFsdWVzOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgb2JqZWN0cwogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRpY2tldCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSA9PiBbJ1RpY2tldCddLAogICAgKSB8fCBbXTsKCiAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkTGlzdH0gKSB7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyB3ZSBvbmx5IGxvYWQgdGhlIG9uZXMgcmVxdWVzdGVkCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfTsKCiAgICAgICAgbXkgJExhbmd1YWdlT2JqZWN0OwoKICAgICAgICAjIHRyYW5zbGF0ZSB2YWx1ZXMgaWYgbmVlZGVkCiAgICAgICAgaWYgKCAkUGFyYW17TGFuZ3VhZ2V9ICkgewogICAgICAgICAgICAkTGFuZ3VhZ2VPYmplY3QgPSBLZXJuZWw6Okxhbmd1YWdlLT5uZXcoCiAgICAgICAgICAgICAgICBVc2VyTGFuZ3VhZ2UgPT4gJFBhcmFte0xhbmd1YWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICREYXRlVGltZU9iamVjdDsKCiAgICAgICAgIyBDaGFuZ2UgRGF0ZVRpbWUgREYgdmFsdWUgZm9yIHRpY2tldCBpZiBuZWVkZWQuCiAgICAgICAgaWYgKAogICAgICAgICAgICBkZWZpbmVkICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICYmICREeW5hbWljRmllbGRDb25maWctPntGaWVsZFR5cGV9IGVxICdEYXRlVGltZScKICAgICAgICAgICAgJiYgJFJlY2lwaWVudFRpbWVab25lCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJERhdGVUaW1lT2JqZWN0LT5Ub1RpbWVab25lKCBUaW1lWm9uZSA9PiAkUmVjaXBpZW50VGltZVpvbmUgKTsKICAgICAgICAgICAgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRGF0ZVRpbWVPYmplY3QtPlRvU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgZGlzcGxheSB2YWx1ZSBmb3IgZWFjaCBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJERpc3BsYXlWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUxvb2t1cCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgICA9PiAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgTGFuZ3VhZ2VPYmplY3QgICAgID0+ICRMYW5ndWFnZU9iamVjdCwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgcmVhZGFibGUgdmFsdWUgKHZhbHVlKSBmb3IgZWFjaCBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJERpc3BsYXlWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UmVhZGFibGVWYWx1ZVJlbmRlcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRGlzcGxheVZhbHVlLAogICAgICAgICk7CgogICAgICAgICMgZmlsbCB0aGUgRHluYW1pY0ZpZWxkRGlzcGxheVZhbHVlcwogICAgICAgIGlmICgkRGlzcGxheVZhbHVlU3RyZykgewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkRGlzcGxheVZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IC4gJ19WYWx1ZScgfSA9ICREaXNwbGF5VmFsdWVTdHJnLT57VmFsdWV9OwoKICAgICAgICAgICAgIyBBZGQgdGltZXpvbmUgaW5mbyBpZiBuZWVkZWQuCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgICAgICYmIGxlbmd0aCAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAgICAgJiYgJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ0RhdGVUaW1lJwogICAgICAgICAgICAgICAgJiYgJFJlY2lwaWVudFRpbWVab25lCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGREaXNwbGF5VmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAnX1ZhbHVlJyB9CiAgICAgICAgICAgICAgICAgICAgLj0gIiAoJFJlY2lwaWVudFRpbWVab25lKSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSByZWFkYWJsZSB2YWx1ZSAoa2V5KSBmb3IgZWFjaCBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5SZWFkYWJsZVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICk7CgogICAgICAgICMgcmVwbGFjZSB0aWNrZXQgY29udGVudCB3aXRoIHRoZSB2YWx1ZSBmcm9tIFJlYWRhYmxlVmFsdWVSZW5kZXIgKGlmIGFueSkKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRWYWx1ZVN0cmcpICkgewogICAgICAgICAgICAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICRWYWx1ZVN0cmctPntWYWx1ZX07CgogICAgICAgICAgICAjIEFkZCB0aW1lem9uZSBpbmZvIGlmIG5lZWRlZC4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAgICAgJiYgbGVuZ3RoICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICAmJiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRUeXBlfSBlcSAnRGF0ZVRpbWUnCiAgICAgICAgICAgICAgICAmJiAkUmVjaXBpZW50VGltZVpvbmUKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gLj0gIiAoJFJlY2lwaWVudFRpbWVab25lKSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyByZXBsYWNlIGl0CiAgICAkSGFzaEdsb2JhbFJlcGxhY2UtPiggJFRhZywgJVRpY2tldCwgJUR5bmFtaWNGaWVsZERpc3BsYXlWYWx1ZXMgKTsKCiAgICAjIENPTVBBVAogICAgJFBhcmFte1RleHR9ID1+IHMvJFN0YXJ0IE9UT0JPX1RJQ0tFVF9JRCAkRW5kLyRUaWNrZXR7VGlja2V0SUR9L2dpeG1zOwogICAgJFBhcmFte1RleHR9ID1+IHMvJFN0YXJ0IE9UT0JPX1RJQ0tFVF9OVU1CRVIgJEVuZC8kVGlja2V0e1RpY2tldE51bWJlcn0vZ2l4bXM7CiAgICBpZiAoICRUaWNrZXR7VGlja2V0SUR9ICkgewogICAgICAgICRQYXJhbXtUZXh0fSA9fiBzLyRTdGFydCBPVE9CT19RVUVVRSAkRW5kLyRUaWNrZXR7UXVldWV9L2dpeG1zOwogICAgfQogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgJFBhcmFte1RleHR9ID1+IHMvJFN0YXJ0IE9UT0JPX1RJQ0tFVF9RVUVVRSAkRW5kLyRRdWV1ZXtOYW1lfS9naXhtczsKICAgIH0KCiAgICAjIGNsZWFudXAKICAgICRQYXJhbXtUZXh0fSA9fiBzLyRUYWcuKz8kRW5kLy0vZ2k7CgogICAgIyBGb2xsb3ctdXAgZm9yIGJ1ZyMxMDgyNS4KICAgICMgU2V0IGRhdGEgZm9yIHJlcGxhY2luZyBvZiBzcGVjaWZpYyB0YWdzIGluIFRlbXBsYXRlczoKICAgICMgLSBPVE9CT19BR0VOVF9TVUJKRUNULCBPVE9CT19BR0VOVF9CT0RZIC0gc3ViamVjdC9ib2R5IG9mIHRoZSBDVVJSRU5UL0xBVEVTVCBhZ2VudCBhcnRpY2xlCiAgICAjIC0gT1RPQk9fQ1VTVE9NRVJfU1VCSkVDVCwgT1RPQk9fQ1VTVE9NRVJfQk9EWSAtIHN1YmplY3QvYm9keSBvZiB0aGUgQ1VSUkVOVC9MQVRFU1QgY3VzdG9tZXIgYXJ0aWNsZQogICAgIyAtIE9UT0JPX0FHRU5UX1NVQkpFQ1Rbbl0gICAgLSBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIENVUlJFTlQvTEFURVNUIGFnZW50IGFydGljbGUKICAgICMgLSBPVE9CT19BR0VOVF9CT0RZW25dICAgICAgIC0gZmlyc3QgbiBsaW5lcyBvZiB0aGUgYm9keSBvZiB0aGUgQ1VSUkVOVC9MQVRFU1QgYWdlbnQgYXJ0aWNsZQogICAgIyAtIE9UT0JPX0NVU1RPTUVSX1NVQkpFQ1Rbbl0gLSBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIENVUlJFTlQvTEFURVNUIGN1c3RvbWVyIGFydGljbGUKICAgICMgLSBPVE9CT19DVVNUT01FUl9CT0RZW25dICAgIC0gZmlyc3QgbiBsaW5lcyBvZiB0aGUgYm9keSBvZiB0aGUgQ1VSUkVOVC9MQVRFU1QgY3VzdG9tZXIgYXJ0aWNsZQogICAgIwogICAgIyBGb3IgTm90ZSB0ZW1wbGF0ZSB3ZSBuZWVkIHRoZSBsYXN0IGFydGljbGUuCiAgICAjIEZvciBBbnN3ZXIsICRQYXJhbXtEYXRhfSBoYXMgc2VsZWN0ZWQgb3IgbGFzdCBhcnRpY2xlIGRhdGEsIGRlcGVuZHMgd2hldGhlciBBcnRpY2xlSUQgaXMgc2VudCBvciBub3QuCiAgICAjIEZvciBGb3J3YXJkLCAkUGFyYW17RGF0YX0gaGFzIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBkYXRhOgogICAgIyAtIGlmIEFydGljbGVJRCBpcyBzZW50LCBkYXRhIGlzIGZyb20gc2VsZWN0ZWQgYXJ0aWNsZS4KICAgICMgLSBpZiBBcnRpY2xlSUQgaXMgbm90IHNlbnQsIGRhdGEgaXMgZnJvbSBsYXN0IGN1c3RvbWVyL2FnZW50L2FueSBhcnRpY2xlLgogICAgaWYgKCAkUGFyYW17VGVtcGxhdGV9ICYmICRUaWNrZXR7VGlja2V0SUR9ICkgewogICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZX0gZXEgJ05vdGUnICkgewoKICAgICAgICAgICAgIyBHZXQgbGFzdCBhcnRpY2xlIGZyb20gYWdlbnQuCiAgICAgICAgICAgIG15IEBBZ2VudEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkUGFyYW17VGlja2V0RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICBPbmx5TGFzdCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoQEFnZW50QXJ0aWNsZXMpIHsKICAgICAgICAgICAgICAgIG15ICVBZ2VudEFydGljbGUgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7ICRBZ2VudEFydGljbGVzWzBdIH0gKS0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgICAgICAleyAkQWdlbnRBcnRpY2xlc1swXSB9LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFBhcmFte0RhdGFBZ2VudH0tPntTdWJqZWN0fSA9ICRBZ2VudEFydGljbGV7U3ViamVjdH07CiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YUFnZW50fS0+e0JvZHl9ICAgID0gJEFnZW50QXJ0aWNsZXtCb2R5fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBHZXQgbGFzdCBhcnRpY2xlIGZyb20gY3VzdG9tZXIuCiAgICAgICAgICAgIG15IEBDdXN0b21lckFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkUGFyYW17VGlja2V0RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgICAgICBPbmx5TGFzdCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoQEN1c3RvbWVyQXJ0aWNsZXMpIHsKICAgICAgICAgICAgICAgIG15ICVDdXN0b21lckFydGljbGUgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7ICRDdXN0b21lckFydGljbGVzWzBdIH0gKS0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgICAgICAleyAkQ3VzdG9tZXJBcnRpY2xlc1swXSB9LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFBhcmFte0RhdGF9LT57U3ViamVjdH0gPSAkQ3VzdG9tZXJBcnRpY2xle1N1YmplY3R9OwogICAgICAgICAgICAgICAgJFBhcmFte0RhdGF9LT57Qm9keX0gICAgPSAkQ3VzdG9tZXJBcnRpY2xle0JvZHl9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFte1RlbXBsYXRlfSBlcSAnQW5zd2VyJyB8fCAkUGFyYW17VGVtcGxhdGV9IGVxICdGb3J3YXJkJyApIHsKCiAgICAgICAgICAgICMgSWYgJFBhcmFte0RhdGF9IGhhcyBhZ2VudCBhcnRpY2xlIGRhdGEsIHdlIHdpbGwgc2V0IHN1YmplY3QgYW5kIGJvZHkgaW4gJFBhcmFte0RhdGFBZ2VudH0KICAgICAgICAgICAgIyB0byB2YWx1ZXMgZnJvbSAkUGFyYW17RGF0YX0gaW4gb3JkZXIgdG8gcmlnaHQgcmVwbGFjaW5nIG9mIE9UT0JPX0FHRU5UX1NVQkpFQ1QvQk9EWSB0YWdzLgogICAgICAgICAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1NlbmRlclR5cGV9ICYmICRQYXJhbXtEYXRhfS0+e1NlbmRlclR5cGV9IGVxICdhZ2VudCcgKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YUFnZW50fS0+e1N1YmplY3R9ID0gJFBhcmFte0RhdGF9LT57U3ViamVjdH07CiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YUFnZW50fS0+e0JvZHl9ICAgID0gJFBhcmFte0RhdGF9LT57Qm9keX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY3VzdG9tZXIgYW5kIGFnZW50IHBhcmFtcyBhbmQgcmVwbGFjZSBpdCB3aXRoIDxPVE9CT19DVVNUT01FUl8uLi4gb3IgPE9UT0JPX0FHRU5UXy4uLgogICAgbXkgJUFydGljbGVEYXRhID0gKAogICAgICAgICdPVE9CT19DVVNUT01FUl8nID0+ICRQYXJhbXtEYXRhfSAgICAgIHx8IHt9LAogICAgICAgICdPVE9CT19BR0VOVF8nICAgID0+ICRQYXJhbXtEYXRhQWdlbnR9IHx8IHt9LAogICAgKTsKCiAgICAjIHVzZSBhIGxpc3QgdG8gZ2V0IGN1c3RvbWVyIGZpcnN0CiAgICBmb3IgbXkgJERhdGFUeXBlIChxdyhPVE9CT19DVVNUT01FUl8gT1RPQk9fQUdFTlRfKSkgewogICAgICAgIG15ICVEYXRhID0gJXsgJEFydGljbGVEYXRheyREYXRhVHlwZX0gfTsKCiAgICAgICAgIyBIVE1MIHF1b3Rpbmcgb2YgY29udGVudAogICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKCiAgICAgICAgICAgIEFUVFJJQlVURToKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJURhdGEgKSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSB1bmxlc3MgJERhdGF7JEF0dHJpYnV0ZX07CgogICAgICAgICAgICAgICAgJERhdGF7JEF0dHJpYnV0ZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJERhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJURhdGEpIHsKCiAgICAgICAgICAgICMgcmVwbGFjZSA8T1RPQk9fQ1VTVE9NRVJfKj4gYW5kIDxPVE9CT19BR0VOVF8qPiB0YWdzCiAgICAgICAgICAgICRUYWcgPSAkU3RhcnQgLiAkRGF0YVR5cGU7CiAgICAgICAgICAgICRIYXNoR2xvYmFsUmVwbGFjZS0+KCAkVGFnLCAlRGF0YSApOwoKICAgICAgICAgICAgIyBwcmVwYXJlIGJvZHkgKGluc2VydCBvbGQgZW1haWwpIDxPVE9CT19DVVNUT01FUl9FTUFJTFtuXT4sIDxPVE9CT19DVVNUT01FUl9OT1RFW25dPgogICAgICAgICAgICAjICAgPE9UT0JPX0NVU1RPTUVSX0JPRFlbbl0+LCA8T1RPQk9fQUdFTlRfRU1BSUxbbl0+Li4uLCA8T1RPQk9fQ09NTUVOVD4KCiAgICAgICAgICAgICMgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBudW1iZXIgb2YgaW5jbHVkZWQgbGluZXMgY2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgIyBUaGUgc2FtZSBrZXkgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzLCBwb3NzaWJseSB3aXRoIGEgZGlmZmVyZW50IG51bWJlciBvZiBsaW5lcy4KICAgICAgICAgICAgIyBUaGUgbGFzdCBjdXN0b21lciBtYWlsIGlzIHVzZWQgZm9yIDxPVE9CT19DT01NRU5UPiBvciA8T1RPQk9fQ09NTUVOVFsxMjNdPgogICAgICAgICAgICAjIGFzIHRoZSBsb29wIHJlcGxhY2VzIHRoZSBjdXN0b21lciBtYWlsIGZpcnN0LgogICAgICAgICAgICAkUGFyYW17VGV4dH0gPX4gc3sKICAgICAgICAgICAgICAgICRTdGFydAogICAgICAgICAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgICAgICAgICAjIGUuZy4gT1RPQk9fQ09NTUVOVFsxM10sIE9UT0JPX0FHRU5UX0JPRFlbM10sIE9UT0JPX0NVU1RPTUVSX0JPRFlbMF0KICAgICAgICAgICAgICAgICAgICAgICAgKD86CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVE9CT19DT01NRU5UCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7RGF0YVR5cGV9KD86RU1BSUx8Tk9URXxCT0RZKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXFsoPzxjbnQ+Lis/KVxdCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAjIGEgc3BlY2lhbCBjYXNlIGFzIE9UT0JPX0NPTU1FTlQgd2l0aG91dCBxdWFudGlmaWVyIGlzIGhhbmRsZWQgbm93aGVyZSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIE9UT0JPX0NPTU1FTlQKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAkRW5kCiAgICAgICAgICAgIH0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIyBmb3IgPE9UT0JPX0NPTU1FTlQ+IHRydW5jYXRlIHBlciBkZWZhdWx0IGEgbG9uZyBtYWlsIGF0IDI1MDAKICAgICAgICAgICAgICAgICMgPE9UT0JPX0NVU1RPTUVSX0JPRFlbMF0gd291bGQgYWxzbyB5aWVsZCAyNTAwIGxpbmVzCiAgICAgICAgICAgICAgICBteSAkTnVtSGVhZExpbmVzID0gJCt7Y250fSB8fCAyNTAwOwoKICAgICAgICAgICAgICAgIG15ICROZXdPbGRCb2R5ICAgPSAnJzsKICAgICAgICAgICAgICAgIG15IEBCb2R5ICAgICAgICAgPSBzcGxpdCAvXG4vLCAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgIG15ICROdW1Cb2R5TGluZXMgPSBzY2FsYXIgQEJvZHk7CgogICAgICAgICAgICAgICAgQ09VTlRFUjoKICAgICAgICAgICAgICAgIGZvciBteSAkQ291bnRlciAoIDAgLi4gJE51bUhlYWRMaW5lcyAtIDEgKSB7CgogICAgICAgICAgICAgICAgICAgICMgZG8gbm90IGdvIGJleW9uZCB0aGUgY29tcGxldGUgYm9keQogICAgICAgICAgICAgICAgICAgIGxhc3QgQ09VTlRFUiBpZiAkQ291bnRlciA+PSAkTnVtQm9keUxpbmVzOwoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBubyBxdW90ZSBjaGFyLCBkbyBpdCBsYXRlciBieSB1c2luZyBEb2N1bWVudENsZWFudXAoKQogICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE5ld09sZEJvZHkgLj0gJEJvZHlbJENvdW50ZXJdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgIj4gIiBhcyBxdW90ZSBjaGFyCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICROZXdPbGRCb2R5IC49ICI+ICRCb2R5WyRDb3VudGVyXSI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBuZXcgbGluZSwgdW5sZXNzIHdlIGFyZSBhdCB0aGUgbGFzdCBpbmNsdWRlZCBsaW5lCiAgICAgICAgICAgICAgICAgICAgIyBub3Qgc3VyZSB3aHkgdGhlIGxhc3QgbGluZSBoYXMgYSBuZXdsaW5lIHdoZW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIyB0aGUgYm9keSBoYXMgbGVzcyBsaW5lcyB0aGFuIHRoZSBzcGVjaWZpZWQgbGluZSBjb3VudAogICAgICAgICAgICAgICAgICAgIGlmICggJENvdW50ZXIgPCAoICROdW1IZWFkTGluZXMgLSAxICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICROZXdPbGRCb2R5IC49ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNob21wICROZXdPbGRCb2R5OwoKICAgICAgICAgICAgICAgICMgSFRNTCBxdW90aW5nIG9mIGNvbnRlbnQKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSAmJiAkTmV3T2xkQm9keSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgbmV3IGxpbmVzCiAgICAgICAgICAgICAgICAgICAgZm9yICggMSAuLiAxMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE5ld09sZEJvZHkgPX4gcy8oPGJyXC8+KVxzezAsMjB9JC8vZ3M7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBxdW90ZQogICAgICAgICAgICAgICAgICAgICROZXdPbGRCb2R5ID0gIjxibG9ja3F1b3RlIHR5cGU9XCJjaXRlXCI+JE5ld09sZEJvZHk8L2Jsb2NrcXVvdGU+IjsKICAgICAgICAgICAgICAgICAgICAkTmV3T2xkQm9keSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+RG9jdW1lbnRDbGVhbnVwKAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJE5ld09sZEJvZHksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHRoZSByZXBsYWNlbWVudAogICAgICAgICAgICAgICAgJE5ld09sZEJvZHkKICAgICAgICAgICAgfXhlZzsgICAgIyBhIHNpbmdsZSBwYXNzIG92ZXIgdGhlIG1hY3JvcyBpbiAkUGFyYW17VGV4dH0KCiAgICAgICAgICAgICMgcmVwbGFjZSA8T1RPQk9fQ1VTVE9NRVJfU1VCSkVDVFtdPiAgYW5kICA8T1RPQk9fQUdFTlRfU1VCSkVDVFtdPiB0YWdzCiAgICAgICAgICAgICRUYWcgPSAiJFN0YXJ0JERhdGFUeXBlIiAuICdTVUJKRUNUJzsKICAgICAgICAgICAgaWYgKCAkUGFyYW17VGV4dH0gPX4gLyRUYWdcWyguKz8pXF0kRW5kL2cgKSB7CgogICAgICAgICAgICAgICAgbXkgJFN1YmplY3RDaGFyID0gJDE7CiAgICAgICAgICAgICAgICBteSAkU3ViamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFN1YmplY3RDbGVhbigKICAgICAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAkRGF0YXtTdWJqZWN0fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFN1YmplY3QgPX4gcy9eKC57JFN1YmplY3RDaGFyfSkuKiQvJDEgWy4uLl0vOwogICAgICAgICAgICAgICAgJFBhcmFte1RleHR9ID1+IHMvJFRhZ1xbLis/XF0kRW5kLyRTdWJqZWN0L2c7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJERhdGFUeXBlIGVxICdPVE9CT19DVVNUT01FUl8nICkgewoKICAgICAgICAgICAgICAgICMgR2V0IDxPVE9CT19FTUFJTF9EQVRFW10+IGZyb20gYm9keSBhbmQgcmVwbGFjZSB3aXRoIHJlY2VpdmVkIGRhdGUuCiAgICAgICAgICAgICAgICAjIFRPRE86IENsYXJpZnksIGFzIGl0IHJhdGhlciBsb29rcyBsaWtlIHRoZSBjdXJyZW50IGRhdGUgaXMgdXNlZC4KICAgICAgICAgICAgICAgICMgVGhpcyB0YWcgd2lsbCBiZSBhYmxlIHRvIHVzZSB3aXRoIHN1cHBvcnRlZCBPVE9CTyB0aW1lIHpvbmVzCiAgICAgICAgICAgICAgICAjICAgKCBlLmcuIDxPVE9CT19FTUFJTF9EQVRFW0V1cm9wZS9CZXJsaW5dPiwgPE9UT0JPX0VNQUlMX0RBVEVbQXNpYS9Ub2t5b10+LAogICAgICAgICAgICAgICAgIyAgIDxPVE9CT19FTUFJTF9EQVRFW0FtZXJpY2EvRGVudmVyXT4gLCAuLi4pLgogICAgICAgICAgICAgICAgIyBJZiB5b3UgdXNlIHRhZyB3aXRob3V0IHRpbWUgaW4gc2ltcGxlIGZvcm1hdCBhcyA8T1RPQk9fRU1BSUxfREFURT4sCiAgICAgICAgICAgICAgICAjICB0aW1lIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byBPVE9CTyBTeXN0ZW1UaW1lWm9uZS4KICAgICAgICAgICAgICAgICRUYWcgPSAkU3RhcnQgLiAnT1RPQk9fRU1BSUxfREFURSc7CgogICAgICAgICAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgICAgICAgICBteSAkU3lzdGVtVGltZVpvbmUgPSAkRGF0ZVRpbWVPYmplY3QtPk9UT0JPVGltZVpvbmVHZXQoKTsKCiAgICAgICAgICAgICAgICAkUGFyYW17VGV4dH0gPX4gc3sKICAgICAgICAgICAgICAgICAgICAkU3RhcnQKICAgICAgICAgICAgICAgICAgICAgICAgT1RPQk9fRU1BSUxfREFURQogICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSB0aW1lIHpvbmUgaXMgb3B0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgICAgKD86CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcWyg/PHR6Pi4rPylcXQogICAgICAgICAgICAgICAgICAgICAgICApPwogICAgICAgICAgICAgICAgICAgICRFbmQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkVGltZVpvbmUgPSAkK3t0en07CgogICAgICAgICAgICAgICAgICAgIGlmICggJFRpbWVab25lICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkVGltZVpvbmVWYWxpZCA9ICREYXRlVGltZU9iamVjdC0+SXNUaW1lWm9uZVZhbGlkKCBUaW1lWm9uZSA9PiAkVGltZVpvbmUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRUaW1lWm9uZVZhbGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0ZVRpbWVPYmplY3QtPlRvVGltZVpvbmUoIFRpbWVab25lID0+ICRUaW1lWm9uZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RheSBhdCB0aGUgc3lzdGVtIHRpbWUgem9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVab25lID0gJFN5c3RlbVRpbWVab25lOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVab25lID0gJFN5c3RlbVRpbWVab25lOwogICAgICAgICAgICAgICAgICAgICAgICAkRGF0ZVRpbWVPYmplY3QtPlRvVGltZVpvbmUoIFRpbWVab25lID0+ICRUaW1lWm9uZSApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBjb25zdHJ1Y3QgdGhlIHJlcGxhY2VtZW50CiAgICAgICAgICAgICAgICAgICAgbXkgJEVtYWlsRGF0ZSA9ICREYXRlVGltZU9iamVjdC0+Rm9ybWF0KCBGb3JtYXQgPT4gJyVBLCAlQiAlZSwgJVkgYXQgJVQgJyApOwogICAgICAgICAgICAgICAgICAgICRFbWFpbERhdGUgLj0gIigkVGltZVpvbmUpIjsKCiAgICAgICAgICAgICAgICAgICAgIyB0aGUgcmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICAkRW1haWxEYXRlOwogICAgICAgICAgICAgICAgfXhlZzsgICAgIyBhIHNpbmdsZSBwYXNzIG92ZXIgdGhlIG1hY3JvcyBpbiAkUGFyYW17VGV4dH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkRGF0YVR5cGUgZXEgJ09UT0JPX0NVU1RPTUVSXycgKSB7CgogICAgICAgICAgICAjIGdldCBhbmQgcHJlcGFyZSByZWFsIG5hbWUKICAgICAgICAgICAgJFRhZyA9ICRTdGFydCAuICdPVE9CT19DVVNUT01FUl9SRUFMTkFNRSc7CiAgICAgICAgICAgIGlmICggJFBhcmFte1RleHR9ID1+IC8kVGFnJEVuZC9pICkgewoKICAgICAgICAgICAgICAgIG15ICRGcm9tOwoKICAgICAgICAgICAgICAgIGlmICggJFRpY2tldHtDdXN0b21lclVzZXJJRH0gKSB7CgogICAgICAgICAgICAgICAgICAgICRGcm9tID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJOYW1lKAogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRpY2tldHtDdXN0b21lclVzZXJJRH0KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdHJ5IHRvIGdldCB0aGUgcmVhbCBuYW1lIGRpcmVjdGx5IGZyb20gdGhlIGRhdGEKICAgICAgICAgICAgICAgICRGcm9tIC8vPSAkUmVjaXBpZW50e1JlYWxuYW1lfTsKCiAgICAgICAgICAgICAgICAjIGdldCByZWFsIG5hbWUgYmFzZWQgb24gcmVwbHktdG8KICAgICAgICAgICAgICAgIGlmICggISRGcm9tICYmICREYXRhe1JlcGx5VG99ICkgewoKICAgICAgICAgICAgICAgICAgICAkRnJvbSA9ICREYXRhe1JlcGx5VG99OwoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBlbWFpbCBhZGRyZXNzZXMKICAgICAgICAgICAgICAgICAgICAkRnJvbSA9fiBzLyZsdDsuKiZndDt8PC4qPnxcKC4qXCl8XCJ8JnF1b3Q7fDt8LC8vZzsKCiAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZy90cmFpbGluZyBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAkRnJvbSA9fiBzL15ccysvL2c7CiAgICAgICAgICAgICAgICAgICAgJEZyb20gPX4gcy9ccyskLy9nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2VuZXJhdGUgcmVhbCBuYW1lIGJhc2VkIG9uIHNlbmRlciBsaW5lCiAgICAgICAgICAgICAgICBpZiAoICEkRnJvbSApIHsKICAgICAgICAgICAgICAgICAgICAkRnJvbSA9ICREYXRhe1RvfSB8fCAnJzsKCiAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgZW1haWwgYWRkcmVzc2VzCiAgICAgICAgICAgICAgICAgICAgJEZyb20gPX4gcy8mbHQ7LiomZ3Q7fDwuKj58XCguKlwpfFwifCZxdW90O3w7fCwvL2c7CgogICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgICAgICAgICAgJEZyb20gPX4gcy9eXHMrLy9nOwogICAgICAgICAgICAgICAgICAgICRGcm9tID1+IHMvXHMrJC8vZzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgPE9UT0JPX0NVU1RPTUVSX1JFQUxOQU1FPiB3aXRoIGZyb20KICAgICAgICAgICAgICAgICRQYXJhbXtUZXh0fSA9fiBzLyRUYWckRW5kLyRGcm9tL2c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY3VzdG9tZXIgZGF0YSBhbmQgcmVwbGFjZSBpdCB3aXRoIDxPVE9CT19DVVNUT01FUl9EQVRBXy4uLgogICAgJFRhZyAgPSAkU3RhcnQgLiAnT1RPQk9fQ1VTVE9NRVJfJzsKICAgICRUYWcyID0gJFN0YXJ0IC4gJ09UT0JPX0NVU1RPTUVSX0RBVEFfJzsKCiAgICBpZiAoICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9IHx8ICRQYXJhbXtEYXRhfS0+e0N1c3RvbWVyVXNlcklEfSApIHsKCiAgICAgICAgbXkgJEN1c3RvbWVyVXNlcklEID0gJFBhcmFte0RhdGF9LT57Q3VzdG9tZXJVc2VySUR9IHx8ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9OwoKICAgICAgICBteSAlQ3VzdG9tZXJVc2VyID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBIVE1MIHF1b3Rpbmcgb2YgY29udGVudAogICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKCiAgICAgICAgICAgIEFUVFJJQlVURToKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJUN1c3RvbWVyVXNlciApIHsKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmICEkQ3VzdG9tZXJVc2VyeyRBdHRyaWJ1dGV9OwogICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcnskQXR0cmlidXRlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQ3VzdG9tZXJVc2VyeyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyByZXBsYWNlIGl0CiAgICAgICAgJEhhc2hHbG9iYWxSZXBsYWNlLT4oICIkVGFnfCRUYWcyIiwgJUN1c3RvbWVyVXNlciApOwogICAgfQoKICAgICMgQ2xlYW4gdXAgYWxsIG5vdCBuZWVkZWQgJzxPVE9CT19DVVNUT01FUl8nIGFuZCAnPE9UT0JPX0NVU1RPTUVSX0RBVEFfJyB0YWdzLgogICAgIyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyB0aGUgdGFncyB3aGljaCBiZWNhbWUgcGFydCBvZiB0aGUgcmVwbGFjZSB0ZXh0CiAgICAjIGJlY2F1c2UgdGhleSB3ZXJlIHByZXNlbnQgaW4gdGhlIG1hY3JvIHZhbHVlcy4KICAgICRQYXJhbXtUZXh0fSA9fiBzLyg/OiRUYWd8JFRhZzIpLis/JEVuZC8tL2dpOwoKICAgICMgY2xlYW51cCBhbGwgbm90IG5lZWRlZCA8T1RPQk9fQUdFTlRfIHRhZ3MKICAgICRUYWcgPSAkU3RhcnQgLiAnT1RPQk9fQUdFTlRfJzsKICAgICRQYXJhbXtUZXh0fSA9fiBzLyRUYWcuKz8kRW5kLy0vZ2k7CgogICAgcmV0dXJuICRQYXJhbXtUZXh0fTsKfQoKPWhlYWQyIF9SZW1vdmVVblN1cHBvcnRlZFRhZygpCgpjbGVhbiB1cCBhbGwgbm90IHN1cHBvcnRlZCB0YWdzLiBUaGUgbm90IHN1cHBvcnRlZCB0YWdzIGFyZSByZXBsYWNlZAp3aXRoIHRoZSBtaW51cyBjaGFyYWN0ZXIgJy0nLgoKICAgIG15ICRUZXh0ID0gJFRlbXBsYXRlR2VuZXJhdG9yT2JqZWN0LT5fUmVtb3ZlVW5TdXBwb3J0ZWRUYWcoCiAgICAgICAgVGV4dCAgICAgICAgICAgICAgICAgPT4gJFNvbWVUZXh0V2l0aFRhZ3MsCiAgICAgICAgTGlzdE9mVW5TdXBwb3J0ZWRUYWcgPT4gXEBMaXN0T2ZVblN1cHBvcnRlZFRhZywKICAgICk7Cgo9Y3V0CgpzdWIgX1JlbW92ZVVuU3VwcG9ydGVkVGFnIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEl0ZW0gKHF3KFRleHQgTGlzdE9mVW5TdXBwb3J0ZWRUYWcpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEl0ZW19ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkSXRlbSEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFN0YXJ0ID0gJzwnOwogICAgbXkgJEVuZCAgID0gJz4nOwogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKICAgICAgICAkU3RhcnQgPSAnJmx0Oyc7CiAgICAgICAgJEVuZCAgID0gJyZndDsnOwogICAgICAgICRQYXJhbXtUZXh0fSA9fiBzLyhcbnxccikvL2c7CiAgICB9CgogICAgIyBDbGVhbnVwIGFsbCBub3Qgc3VwcG9ydGVkIHRhZ3Mgd2l0aCBhbmQgd2l0aG91dCBudW1iZXIsIGUuZy4gT1RPQk9fQ1VTVE9NRVJfQk9EWSBhbmQgT1RPQk9fQ1VTVE9NRVJfQk9EWVtuXS4KICAgICMgU2VlIGh0dHBzOi8vYnVncy5vdHJzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjkgYW5kIGh0dHBzOi8vYnVncy5vdHJzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MjUuCiAgICBteSAkTm90U3VwcG9ydGVkVGFnID0gJFN0YXJ0IC4gIig/OiIgLiBqb2luKCAifCIsIEB7ICRQYXJhbXtMaXN0T2ZVblN1cHBvcnRlZFRhZ30gfSApIC4gIikoXFxbLio/XFxdKT8iIC4gJEVuZDsKICAgICRQYXJhbXtUZXh0fSA9fiBzLyROb3RTdXBwb3J0ZWRUYWcvLS9naTsKCiAgICByZXR1cm4gJFBhcmFte1RleHR9Owp9Cgo9aGVhZDIgX01hc2tTZW5zaXRpdmVWYWx1ZSgpCgpNYXNrIHNlbnNpdGl2ZSB2YWx1ZSwgaS5lLiBhIHBhc3N3b3JkLCBhIHNlY3VyaXR5IHRva2VuLCBldGMuCgogICAgbXkgJE1hc2tlZFZhbHVlID0gJFNlbGYtPl9NYXNrU2Vuc2l0aXZlVmFsdWUoCiAgICAgICAgS2V5ICAgICAgPT4gJ0RhdGFiYXNlUGFzc3dvcmQnLCAjIChyZXF1aXJlZCkgTmFtZSBvZiB0aGUgZmllbGQva2V5LgogICAgICAgIFZhbHVlICAgID0+ICdzZWNyZXR2YWx1ZScsICAgICAgIyAob3B0aW9uYWwpIFZhbHVlIHRvIHBvdGVudGlhbGx5IG1hc2suCiAgICAgICAgSXNDb25maWcgPT4gMSwgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgV2hldGhlciB0aGUgdmFsdWUgaXMgYSBjb25maWcgb3B0aW9uLCBkZWZhdWx0OiAwLgogICAgKTsKClJldHVybnMgbWFza2VkIHZhbHVlIGluIGNhc2UgdGhlIGtleSBpcyBtYXRjaGVkOgoKICAgJE1hc2tlZFZhbHVlID0gJ3h4eCc7Cgo9Y3V0CgpzdWIgX01hc2tTZW5zaXRpdmVWYWx1ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnJyBpZiAhJFBhcmFte0tleX0gfHwgIWRlZmluZWQgJFBhcmFte1ZhbHVlfTsKCiAgICAjIFNraXAgbWFza2luZyBzZW5zaXRpdmUgdmFsdWVzIGZvciBEeW5hbWljIEZpZWxkcy4KICAgIHJldHVybiAkUGFyYW17VmFsdWV9IGlmICRQYXJhbXtLZXl9ID1+IHFyeyBkeW5hbWljZmllbGQgfXhpOwoKICAgICMgTWF0Y2ggZ2VuZXJhbCBrZXkgbmFtZXMsIGkuZS4gZnJvbSB0aGUgdXNlciBwcmVmZXJlbmNlcy4KICAgIG15ICRNYXRjaCA9IHFyeyBjb25maWd8c2VjcmV0fHBhc3N3fHVzZXJwd3xhdXRofHRva2VuIH14aTsKCiAgICAjIE1hdGNoIGZvcmJpZGRlbiBjb25maWcga2V5cy4KICAgIGlmICggJFBhcmFte0lzQ29uZmlnfSApIHsKICAgICAgICAkTWF0Y2ggPSBxcnsgKD86cGFzc3dvcmR8cHcpIFxkKiAkIH1zbXhpOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17VmFsdWV9IGlmICRQYXJhbXtLZXl9ICF+ICRNYXRjaDsKCiAgICByZXR1cm4gJ3h4eCc7Cn0KCj1lbmQgSW50ZXJuYWw6Cgo9Y3V0CgoxOwo=</File>
        <File Location="Custom/Kernel/System/AuthSession/FS.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL1N5c3RlbS9BdXRoU2Vzc2lvbi9GUy5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbjo6RlM7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQYXJhbU9iamVjdCkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbW9yZSBjb21tb24gcGFyYW1zCiAgICAkU2VsZi0+e1Nlc3Npb25TcG9vbH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25EaXInKTsKICAgICRTZWxmLT57U3lzdGVtSUR9ICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnU3lzdGVtSUQnKTsKCiAgICBpZiAoICEtZSAkU2VsZi0+e1Nlc3Npb25TcG9vbH0gKSB7CiAgICAgICAgaWYgKCAhbWtkaXIoICRTZWxmLT57U2Vzc2lvblNwb29sfSwgMDc3MCApICkgeyAgICAjIyBubyBjcml0aWMgcXcoVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlByb2hpYml0TGVhZGluZ1plcm9zKQogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgY3JlYXRlIGRpcmVjdG9yeSAnJFNlbGYtPntTZXNzaW9uU3Bvb2x9JzogJCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBDaGVja1Nlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgc2Vzc2lvbiBpZAogICAgaWYgKCAhJFBhcmFte1Nlc3Npb25JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gU2Vzc2lvbklEISEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFJlbW90ZUFkZHIgID0gJFBhcmFte1JlbW90ZUFkZHJ9IHx8ICRQYXJhbU9iamVjdC0+UmVtb3RlQWRkcigpIHx8ICdub25lJzsKCiAgICAjIHNldCBkZWZhdWx0IG1lc3NhZ2UKICAgICRTZWxmLT57U2Vzc2lvbklERXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnU2Vzc2lvbiBpbnZhbGlkLiBQbGVhc2UgbG9nIGluIGFnYWluLicpOwoKICAgICMgc2Vzc2lvbiBpZCBjaGVjawogICAgbXkgJURhdGEgPSAkU2VsZi0+R2V0U2Vzc2lvbklERGF0YSggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CgogICAgaWYgKCAhJERhdGF7VXNlcklEfSB8fCAhJERhdGF7VXNlckxvZ2lufSApIHsKICAgICAgICAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1Nlc3Npb24gaW52YWxpZC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi4nKTsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJTZXNzaW9uSUQ6ICckUGFyYW17U2Vzc2lvbklEfScgaXMgaW52YWxpZCEhISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyByZW1vdGUgaXAgY2hlY2sKICAgIGlmICgKICAgICAgICAkRGF0YXtVc2VyUmVtb3RlQWRkcn0gbmUgJFJlbW90ZUFkZHIKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25DaGVja1JlbW90ZUlQJykKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiUmVtb3RlSVAgb2YgJyRQYXJhbXtTZXNzaW9uSUR9JyAoJERhdGF7VXNlclJlbW90ZUFkZHJ9KSBpcyAiCiAgICAgICAgICAgICAgICAuICJkaWZmZXJlbnQgZnJvbSByZWdpc3RlcmVkIElQICgkUmVtb3RlQWRkcikuIEludmFsaWRhdGluZyBzZXNzaW9uISIKICAgICAgICAgICAgICAgIC4gIiBEaXNhYmxlIGNvbmZpZyAnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnIGlmIHlvdSBkb24ndCB3YW50IHRoaXMhIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBzZXNzaW9uIGlkIGlmIGl0IGlzbid0IHRoZSBzYW1lIHJlbW90ZSBpcD8KICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkRlbGV0ZUlmTm90UmVtb3RlSUQnKSApIHsKICAgICAgICAgICAgJFNlbGYtPlJlbW92ZVNlc3Npb25JRCggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBzZXNzaW9uIGlkbGUgdGltZQogICAgbXkgJFRpbWVOb3cgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CiAgICBteSAkTWF4U2Vzc2lvbklkbGVUaW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4SWRsZVRpbWUnKTsKCiAgICBpZiAoICggJFRpbWVOb3cgLSAkTWF4U2Vzc2lvbklkbGVUaW1lICkgPj0gJERhdGF7VXNlckxhc3RSZXF1ZXN0fSApIHsKCiAgICAgICAgJFNlbGYtPntTZXNzaW9uSURFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdTZXNzaW9uIGhhcyB0aW1lZCBvdXQuIFBsZWFzZSBsb2cgaW4gYWdhaW4uJyk7CgogICAgICAgIG15ICRUaW1lb3V0ID0gaW50KCAoICRUaW1lTm93IC0gJERhdGF7VXNlckxhc3RSZXF1ZXN0fSApIC8gKCA2MCAqIDYwICkgKTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgIlNlc3Npb25JRCAoJFBhcmFte1Nlc3Npb25JRH0pIGlkbGUgdGltZW91dCAoJFRpbWVvdXQgaCkhIERvbid0IGdyYW50IGFjY2VzcyEhISIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgc2Vzc2lvbiBpZCBpZiB0b28gb2xkPwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uRGVsZXRlSWZUaW1lVG9PbGQnKSApIHsKICAgICAgICAgICAgJFNlbGYtPlJlbW92ZVNlc3Npb25JRCggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBzZXNzaW9uIHRpbWUKICAgIG15ICRNYXhTZXNzaW9uVGltZSA9ICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbk1heFRpbWUnKTsKCiAgICBpZiAoICggJFRpbWVOb3cgLSAkTWF4U2Vzc2lvblRpbWUgKSA+PSAkRGF0YXtVc2VyU2Vzc2lvblN0YXJ0fSApIHsKCiAgICAgICAgJFNlbGYtPntTZXNzaW9uSURFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdTZXNzaW9uIGhhcyB0aW1lZCBvdXQuIFBsZWFzZSBsb2cgaW4gYWdhaW4uJyk7CgogICAgICAgIG15ICRUaW1lb3V0ID0gaW50KCAoICRUaW1lTm93IC0gJERhdGF7VXNlclNlc3Npb25TdGFydH0gKSAvICggNjAgKiA2MCApICk7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlNlc3Npb25JRCAoJFBhcmFte1Nlc3Npb25JRH0pIHRvbyBvbGQgKCRUaW1lb3V0IGgpISBEb24ndCBncmFudCBhY2Nlc3MhISEiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHNlc3Npb24gaWQgaWYgdG9vIG9sZD8KICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkRlbGV0ZUlmVGltZVRvT2xkJykgKSB7CiAgICAgICAgICAgICRTZWxmLT5SZW1vdmVTZXNzaW9uSUQoIFNlc3Npb25JRCA9PiAkUGFyYW17U2Vzc2lvbklEfSApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgU2Vzc2lvbklERXJyb3JNZXNzYWdlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57U2Vzc2lvbklERXJyb3JNZXNzYWdlfSB8fCAnJzsKfQoKc3ViIEdldFNlc3Npb25JRERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHNlc3Npb24gaWQKICAgIGlmICggISRQYXJhbXtTZXNzaW9uSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnR290IG5vIFNlc3Npb25JRCEhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIHJldHVybiAleyAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9IH0KICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwoKICAgICMgcmVhZCBkYXRhCiAgICBteSAkQ29udGVudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkZpbGVSZWFkKAogICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdEYXRhLScgLiAkUGFyYW17U2Vzc2lvbklEfSwKICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJ0xvY2FsJywKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgIERpc2FibGVXYXJuaW5ncyA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDb250ZW50OwogICAgcmV0dXJuIGlmIHJlZiAkQ29udGVudCBuZSAnU0NBTEFSJzsKCiAgICAjIHJlYWQgZGF0YSBzdHJ1Y3R1cmUgYmFjayBmcm9tIGZpbGUgZHVtcCwgdXNlIGJsb2NrIGV2YWwgZm9yIHNhZmV0eSByZWFzb25zCiAgICBteSAkU2Vzc2lvbiA9IGV2YWwgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdG9yYWJsZScpLT5EZXNlcmlhbGl6ZSggRGF0YSA9PiAkeyRDb250ZW50fSApOwogICAgfTsKCiAgICBpZiAoICEkU2Vzc2lvbiB8fCByZWYgJFNlc3Npb24gbmUgJ0hBU0gnICkgewogICAgICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfSA9ICRTZXNzaW9uOwoKICAgIHJldHVybiAleyRTZXNzaW9ufTsKfQoKc3ViIENyZWF0ZVNlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHN5c3RlbSB0aW1lCiAgICBteSAkVGltZU5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CgogICAgIyBnZXQgcmVtb3RlIGFkZHJlc3MgYW5kIHRoZSBodHRwIHVzZXIgYWdlbnQKICAgIG15ICRQYXJhbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkUmVtb3RlQWRkciAgICAgID0gJFBhcmFtT2JqZWN0LT5SZW1vdGVBZGRyKCkgICAgICAgICB8fCAnbm9uZSc7CiAgICBteSAkUmVtb3RlVXNlckFnZW50ID0gJFBhcmFtT2JqZWN0LT5IZWFkZXIoJ1VzZXItQWdlbnQnKSB8fCAnbm9uZSc7CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgICMgY3JlYXRlIHNlc3Npb24gaWQKICAgIG15ICRTZXNzaW9uSUQgPSAkU2VsZi0+e1N5c3RlbUlEfSAuICRNYWluT2JqZWN0LT5HZW5lcmF0ZVJhbmRvbVN0cmluZygKICAgICAgICBMZW5ndGggPT4gMzIsCiAgICApOwoKICAgICMgY3JlYXRlIGNoYWxsZW5nZSB0b2tlbgogICAgbXkgJENoYWxsZW5nZVRva2VuID0gJE1haW5PYmplY3QtPkdlbmVyYXRlUmFuZG9tU3RyaW5nKAogICAgICAgIExlbmd0aCA9PiAzMiwKICAgICk7CgogICAgbXkgJURhdGE7CiAgICBLRVk6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlUGFyYW0gKSB7CgogICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwoKICAgICAgICAkRGF0YXskS2V5fSA9ICRQYXJhbXskS2V5fTsKICAgIH0KCiAgICAkRGF0YXtVc2VyU2Vzc2lvblN0YXJ0fSAgICA9ICRUaW1lTm93OwogICAgJERhdGF7VXNlclJlbW90ZUFkZHJ9ICAgICAgPSAkUmVtb3RlQWRkcjsKICAgICREYXRhe1VzZXJSZW1vdGVVc2VyQWdlbnR9ID0gJFJlbW90ZVVzZXJBZ2VudDsKICAgICREYXRhe1VzZXJDaGFsbGVuZ2VUb2tlbn0gID0gJENoYWxsZW5nZVRva2VuOwoKICAgICMgZHVtcCB0aGUgZGF0YQogICAgbXkgJERhdGFDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyktPlNlcmlhbGl6ZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICAjIHdyaXRlIGRhdGEgZmlsZQogICAgbXkgJEZpbGVMb2NhdGlvbiA9ICRNYWluT2JqZWN0LT5GaWxlV3JpdGUoCiAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ0RhdGEtJyAuICRTZXNzaW9uSUQsCiAgICAgICAgQ29udGVudCAgICAgICAgID0+IFwkRGF0YUNvbnRlbnQsCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMb2NhbCcsCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywKICAgICAgICBQZXJtaXNzaW9uICAgICAgPT4gJzY2MCcsCiAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJEZpbGVMb2NhdGlvbjsKCiAgICAjIHNldCBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPnskU2Vzc2lvbklEfSA9IFwlRGF0YTsKCiAgICAjIGNyZWF0ZSBuZWVkZWQgc3RhdGUgY29udGVudAogICAgbXkgJFVzZXJUeXBlICAgICAgICAgPSAkU2VsZi0+e0NhY2hlfS0+eyRTZXNzaW9uSUR9LT57VXNlclR5cGV9ICAgICAgICAgfHwgJyc7CiAgICBteSAkVXNlckxvZ2luICAgICAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyTG9naW59ICAgICAgICB8fCAnJzsKICAgIG15ICRVc2VyU2Vzc2lvblN0YXJ0ID0gJFNlbGYtPntDYWNoZX0tPnskU2Vzc2lvbklEfS0+e1VzZXJTZXNzaW9uU3RhcnR9IHx8ICcnOwogICAgbXkgJFVzZXJMYXN0UmVxdWVzdCAgPSAkU2VsZi0+e0NhY2hlfS0+eyRTZXNzaW9uSUR9LT57VXNlckxhc3RSZXF1ZXN0fSAgfHwgJyc7CiAgICBteSAkU2Vzc2lvblNvdXJjZSAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntTZXNzaW9uU291cmNlfSAgICB8fCAnJzsKCiAgICBteSAkU3RhdGVDb250ZW50ID0gJFVzZXJUeXBlIC4gJyMjIyMnIC4gJFVzZXJMb2dpbiAuICcjIyMjJyAuICRVc2VyU2Vzc2lvblN0YXJ0IC4gJyMjIyMnIC4gJFVzZXJMYXN0UmVxdWVzdDsKCiAgICBpZiAoJFNlc3Npb25Tb3VyY2UpIHsKICAgICAgICAkU3RhdGVDb250ZW50IC49ICcjIyMjJyAuICRTZXNzaW9uU291cmNlOwogICAgfQoKICAgICMgd3JpdGUgc3RhdGUgZmlsZQogICAgJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICBEaXJlY3RvcnkgICAgICAgPT4gJFNlbGYtPntTZXNzaW9uU3Bvb2x9LAogICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAnU3RhdGUtJyAuICRTZXNzaW9uSUQsCiAgICAgICAgQ29udGVudCAgICAgICAgID0+IFwkU3RhdGVDb250ZW50LAogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnYmlubW9kZScsCiAgICAgICAgUGVybWlzc2lvbiAgICAgID0+ICc2NjAnLAogICAgICAgIERpc2FibGVXYXJuaW5ncyA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gJFNlc3Npb25JRDsKfQoKc3ViIFJlbW92ZVNlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgc2Vzc2lvbiBpZAogICAgaWYgKCAhJFBhcmFte1Nlc3Npb25JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gU2Vzc2lvbklEISEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgICMgZGVsZXRlIGZpbGUKICAgIG15ICREZWxldGVEYXRhID0gJE1haW5PYmplY3QtPkZpbGVEZWxldGUoCiAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ0RhdGEtJyAuICRQYXJhbXtTZXNzaW9uSUR9LAogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLAogICAgICAgIERpc2FibGVXYXJuaW5ncyA9PiAxLAogICAgKTsKICAgIG15ICREZWxldGVTdGF0ZSA9ICRNYWluT2JqZWN0LT5GaWxlRGVsZXRlKAogICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdTdGF0ZS0nIC4gJFBhcmFte1Nlc3Npb25JRH0sCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMb2NhbCcsCiAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJERlbGV0ZURhdGE7CiAgICByZXR1cm4gaWYgISREZWxldGVTdGF0ZTsKCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlICA9PiAiUmVtb3ZlZCBTZXNzaW9uSUQgJFBhcmFte1Nlc3Npb25JRH0uIgogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIFVwZGF0ZVNlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgKHF3KFNlc3Npb25JRCBLZXkpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRffSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJF8hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggISRTZWxmLT57Q2FjaGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH0gKSB7CiAgICAgICAgbXkgJVNlc3Npb25EYXRhID0gJFNlbGYtPkdldFNlc3Npb25JRERhdGEoIFNlc3Npb25JRCA9PiAkUGFyYW17U2Vzc2lvbklEfSApOwoKICAgICAgICAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9ID0gXCVTZXNzaW9uRGF0YTsKICAgIH0KCiAgICAjIHVwZGF0ZSB0aGUgdmFsdWUsIHNldCBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfS0+eyAkUGFyYW17S2V5fSB9ID0gJFBhcmFte1ZhbHVlfTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIEdldEFsbFNlc3Npb25JRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHJlYWQgZGF0YQogICAgbXkgQExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsdGVyICAgID0+ICdEYXRhLScgLiAkU2VsZi0+e1N5c3RlbUlEfSAuICcqJywKICAgICk7CgogICAgbXkgQFNlc3Npb25JRHM7CiAgICBmb3IgbXkgJFNlc3Npb25JRCAoQExpc3QpIHsKICAgICAgICAkU2Vzc2lvbklEID1+IHMhXi4qLyEhOwogICAgICAgICRTZXNzaW9uSUQgPX4gc3sgRGF0YS0gfSB7fXhtczsKICAgICAgICBwdXNoIEBTZXNzaW9uSURzLCAkU2Vzc2lvbklEOwogICAgfQoKICAgIHJldHVybiBAU2Vzc2lvbklEczsKfQoKc3ViIEdldEFjdGl2ZVNlc3Npb25zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1heFNlc3Npb25JZGxlVGltZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2Vzc2lvbk1heElkbGVUaW1lJyk7CgogICAgbXkgJFRpbWVOb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKS0+VG9FcG9jaCgpOwoKICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKCiAgICBteSBATGlzdCA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsdGVyICAgID0+ICdTdGF0ZS0nIC4gJFNlbGYtPntTeXN0ZW1JRH0gLiAnKicsCiAgICApOwoKICAgIG15ICRBY3RpdmVTZXNzaW9uQ291bnQgPSAwOwogICAgbXkgJUFjdGl2ZVNlc3Npb25QZXJVc2VyQ291bnQ7CiAgICBTRVNTSU9OSUQ6CiAgICBmb3IgbXkgJFNlc3Npb25JRCAoQExpc3QpIHsKCiAgICAgICAgJFNlc3Npb25JRCA9fiBzIV4uKi8hITsKICAgICAgICAkU2Vzc2lvbklEID1+IHN7IFN0YXRlLSB9IHt9eG1zOwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25JRDsKCiAgICAgICAgIyByZWFkIHN0YXRlIGRhdGEKICAgICAgICBteSAkU3RhdGVEYXRhID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgICAgICBEaXJlY3RvcnkgICAgICAgPT4gJFNlbGYtPntTZXNzaW9uU3Bvb2x9LAogICAgICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ1N0YXRlLScgLiAkU2Vzc2lvbklELAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJ0xvY2FsJywKICAgICAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywKICAgICAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgISRTdGF0ZURhdGE7CiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgcmVmICRTdGF0ZURhdGEgbmUgJ1NDQUxBUic7CgogICAgICAgIG15IEBTZXNzaW9uRGF0YSA9IHNwbGl0IC8jIyMjLywgJHskU3RhdGVEYXRhfTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIGRhdGEKICAgICAgICBteSAkVXNlclR5cGUgICAgICAgID0gJFNlc3Npb25EYXRhWzBdIHx8ICcnOwogICAgICAgIG15ICRVc2VyTG9naW4gICAgICAgPSAkU2Vzc2lvbkRhdGFbMV0gfHwgJyc7CiAgICAgICAgbXkgJFVzZXJMYXN0UmVxdWVzdCA9ICRTZXNzaW9uRGF0YVszXSB8fCAkVGltZU5vdzsKICAgICAgICBteSAkU2Vzc2lvblNvdXJjZSAgID0gJFNlc3Npb25EYXRhWzRdIHx8ICcnOwoKICAgICAgICAjIERvbid0IGNvdW50IHNlc3Npb25zIGZyb20gc291cmNlICdHZW5lcmljSW50ZXJmYWNlJy4KICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAkU2Vzc2lvblNvdXJjZSBlcSAnR2VuZXJpY0ludGVyZmFjZSc7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICRVc2VyVHlwZSBuZSAkUGFyYW17VXNlclR5cGV9OwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAoICRVc2VyTGFzdFJlcXVlc3QgKyAkTWF4U2Vzc2lvbklkbGVUaW1lICkgPCAkVGltZU5vdzsKCiAgICAgICAgJEFjdGl2ZVNlc3Npb25Db3VudCsrOwoKICAgICAgICAkQWN0aXZlU2Vzc2lvblBlclVzZXJDb3VudHskVXNlckxvZ2lufSB8fCAwOwogICAgICAgICRBY3RpdmVTZXNzaW9uUGVyVXNlckNvdW50eyRVc2VyTG9naW59Kys7CiAgICB9CgogICAgbXkgJVJlc3VsdCA9ICgKICAgICAgICBUb3RhbCAgID0+ICRBY3RpdmVTZXNzaW9uQ291bnQsCiAgICAgICAgUGVyVXNlciA9PiBcJUFjdGl2ZVNlc3Npb25QZXJVc2VyQ291bnQsCiAgICApOwoKICAgIHJldHVybiAlUmVzdWx0Owp9CgpzdWIgR2V0RXhwaXJlZFNlc3Npb25JRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjb25maWcKICAgIG15ICRNYXhTZXNzaW9uVGltZSAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25NYXhUaW1lJyk7CiAgICBteSAkTWF4U2Vzc2lvbklkbGVUaW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4SWRsZVRpbWUnKTsKCiAgICAjIGdldCBjdXJyZW50IHRpbWUKICAgIG15ICRUaW1lTm93ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKTsKCiAgICAjIGdldCBtYWluIG9iamVjdAogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgICMgcmVhZCBkYXRhCiAgICBteSBATGlzdCA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsdGVyICAgID0+ICdTdGF0ZS0nIC4gJFNlbGYtPntTeXN0ZW1JRH0gLiAnKicsCiAgICApOwoKICAgIG15IEBFeHBpcmVkU2Vzc2lvbjsKICAgIG15IEBFeHBpcmVkSWRsZTsKICAgIFNFU1NJT05JRDoKICAgIGZvciBteSAkU2Vzc2lvbklEIChATGlzdCkgewoKICAgICAgICAkU2Vzc2lvbklEID1+IHMhXi4qLyEhOwogICAgICAgICRTZXNzaW9uSUQgPX4gc3sgU3RhdGUtIH0ge314bXM7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkU2Vzc2lvbklEOwoKICAgICAgICAjIHJlYWQgc3RhdGUgZGF0YQogICAgICAgIG15ICRTdGF0ZURhdGEgPSAkTWFpbk9iamVjdC0+RmlsZVJlYWQoCiAgICAgICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAnU3RhdGUtJyAuICRTZXNzaW9uSUQsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLAogICAgICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgICAgICBEaXNhYmxlV2FybmluZ3MgPT4gMSwKICAgICAgICApOwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFN0YXRlRGF0YTsKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiByZWYgJFN0YXRlRGF0YSBuZSAnU0NBTEFSJzsKCiAgICAgICAgbXkgQFNlc3Npb25EYXRhID0gc3BsaXQgLyMjIyMvLCAkeyRTdGF0ZURhdGF9OwoKICAgICAgICAjIGdldCBuZWVkZWQgZGF0YQogICAgICAgIG15ICRVc2VyU2Vzc2lvblN0YXJ0ID0gJFNlc3Npb25EYXRhWzJdIHx8ICRUaW1lTm93OwogICAgICAgIG15ICRVc2VyTGFzdFJlcXVlc3QgID0gJFNlc3Npb25EYXRhWzNdIHx8ICRUaW1lTm93OwoKICAgICAgICAjIHRpbWUgY2FsY3VsYXRpb24KICAgICAgICBteSAkVmFsaWRUaW1lICAgICA9ICRVc2VyU2Vzc2lvblN0YXJ0ICsgJE1heFNlc3Npb25UaW1lIC0gJFRpbWVOb3c7CiAgICAgICAgbXkgJFZhbGlkSWRsZVRpbWUgPSAkVXNlckxhc3RSZXF1ZXN0ICsgJE1heFNlc3Npb25JZGxlVGltZSAtICRUaW1lTm93OwoKICAgICAgICAjIGRlbGV0ZSBpbnZhbGlkIHNlc3Npb24gdGltZQogICAgICAgIGlmICggJFZhbGlkVGltZSA8PSAwICkgewogICAgICAgICAgICBwdXNoIEBFeHBpcmVkU2Vzc2lvbiwgJFNlc3Npb25JRDsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGludmFsaWQgaWRsZSBzZXNzaW9uIHRpbWUKICAgICAgICBlbHNpZiAoICRWYWxpZElkbGVUaW1lIDw9IDAgKSB7CiAgICAgICAgICAgIHB1c2ggQEV4cGlyZWRJZGxlLCAkU2Vzc2lvbklEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKCBcQEV4cGlyZWRTZXNzaW9uLCBcQEV4cGlyZWRJZGxlICk7Cn0KCnN1YiBDbGVhblVwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgZnMgZmlsZXMKICAgIG15IEBTZXNzaW9uSURzID0gJFNlbGYtPkdldEFsbFNlc3Npb25JRHMoKTsKCiAgICByZXR1cm4gMSBpZiAhQFNlc3Npb25JRHM7CgogICAgU0VTU0lPTklEOgogICAgZm9yIG15ICRTZXNzaW9uSUQgKEBTZXNzaW9uSURzKSB7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkU2Vzc2lvbklEOwoKICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFNlc3Npb25JRCApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgREVTVFJPWSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxIGlmICEkU2VsZi0+e0NhY2hlfTsKCiAgICAjIGdldCBtYWluIG9iamVjdAogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIFNFU1NJT05JRDoKICAgIGZvciBteSAkU2Vzc2lvbklEICggc29ydCBrZXlzICV7ICRTZWxmLT57Q2FjaGV9IH0gKSB7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkU2Vzc2lvbklEOwoKICAgICAgICBteSAlU2Vzc2lvbkRhdGE7CiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0gfSApIHsKCiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwoKICAgICAgICAgICAgJFNlc3Npb25EYXRheyRLZXl9ID0gJFNlbGYtPntDYWNoZX0tPnskU2Vzc2lvbklEfS0+eyRLZXl9OwogICAgICAgIH0KCiAgICAgICAgIyBkdW1wIHRoZSBkYXRhCiAgICAgICAgbXkgJERhdGFDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyktPlNlcmlhbGl6ZSgKICAgICAgICAgICAgRGF0YSA9PiBcJVNlc3Npb25EYXRhLAogICAgICAgICk7CgogICAgICAgICMgd3JpdGUgZGF0YSBmaWxlCiAgICAgICAgJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdEYXRhLScgLiAkU2Vzc2lvbklELAogICAgICAgICAgICBDb250ZW50ICAgICAgICAgPT4gXCREYXRhQ29udGVudCwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMb2NhbCcsCiAgICAgICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnYmlubW9kZScsCiAgICAgICAgICAgIFBlcm1pc3Npb24gICAgICA9PiAnNjYwJywKICAgICAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgbmVlZGVkIHN0YXRlIGNvbnRlbnQKICAgICAgICBteSAkVXNlclR5cGUgICAgICAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyVHlwZX0gICAgICAgICB8fCAnJzsKICAgICAgICBteSAkVXNlckxvZ2luICAgICAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyTG9naW59ICAgICAgICB8fCAnJzsKICAgICAgICBteSAkVXNlclNlc3Npb25TdGFydCA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyU2Vzc2lvblN0YXJ0fSB8fCAnJzsKICAgICAgICBteSAkVXNlckxhc3RSZXF1ZXN0ICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyTGFzdFJlcXVlc3R9ICB8fCAnJzsKICAgICAgICBteSAkU2Vzc2lvblNvdXJjZSAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntTZXNzaW9uU291cmNlfSAgICB8fCAnJzsKCiAgICAgICAgbXkgJFN0YXRlQ29udGVudCA9ICRVc2VyVHlwZSAuICcjIyMjJwogICAgICAgICAgICAuICRVc2VyTG9naW4gLiAnIyMjIycKICAgICAgICAgICAgLiAkVXNlclNlc3Npb25TdGFydCAuICcjIyMjJwogICAgICAgICAgICAuICRVc2VyTGFzdFJlcXVlc3Q7CgogICAgICAgIGlmICgkU2Vzc2lvblNvdXJjZSkgewogICAgICAgICAgICAkU3RhdGVDb250ZW50IC49ICcjIyMjJyAuICRTZXNzaW9uU291cmNlOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSBzdGF0ZSBmaWxlCiAgICAgICAgJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdTdGF0ZS0nIC4gJFNlc3Npb25JRCwKICAgICAgICAgICAgQ29udGVudCAgICAgICAgID0+IFwkU3RhdGVDb250ZW50LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJ0xvY2FsJywKICAgICAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywKICAgICAgICAgICAgUGVybWlzc2lvbiAgICAgID0+ICc2NjAnLAogICAgICAgICAgICBEaXNhYmxlV2FybmluZ3MgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVtb3ZlIGNhY2hlZCBkYXRhCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX07CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/System/AuthSession/DB.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL1N5c3RlbS9BdXRoU2Vzc2lvbi9EQi5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbjo6REI7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQYXJhbU9iamVjdCkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0IHF3KGRlY29kZV9iYXNlNjQgZW5jb2RlX2Jhc2U2NCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RvcmFibGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e1Nlc3Npb25UYWJsZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1Nlc3Npb25UYWJsZScpIHx8ICdzZXNzaW9ucyc7CgogICAgIyBnZXQgZGF0YWJhc2UgdHlwZQogICAgJFNlbGYtPntEQlR5cGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPnsnREI6OlR5cGUnfSB8fCAnJzsKICAgICRTZWxmLT57REJUeXBlfSA9IGxjICRTZWxmLT57REJUeXBlfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBDaGVja1Nlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgc2Vzc2lvbiBpZAogICAgaWYgKCAhJFBhcmFte1Nlc3Npb25JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gU2Vzc2lvbklEISEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFJlbW90ZUFkZHIgID0gJFBhcmFtT2JqZWN0LT5SZW1vdGVBZGRyKCkgfHwgJ25vbmUnOwoKICAgICMgc2V0IGRlZmF1bHQgbWVzc2FnZQogICAgJFNlbGYtPntTZXNzaW9uSURFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdTZXNzaW9uIGludmFsaWQuIFBsZWFzZSBsb2cgaW4gYWdhaW4uJyk7CgogICAgIyBnZXQgc2Vzc2lvbiBkYXRhCiAgICBteSAlRGF0YSA9ICRTZWxmLT5HZXRTZXNzaW9uSUREYXRhKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKCiAgICBpZiAoICEkRGF0YXtVc2VySUR9IHx8ICEkRGF0YXtVc2VyTG9naW59ICkgewogICAgICAgICRTZWxmLT57U2Vzc2lvbklERXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnU2Vzc2lvbiBpbnZhbGlkLiBQbGVhc2UgbG9nIGluIGFnYWluLicpOwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlNlc3Npb25JRDogJyRQYXJhbXtTZXNzaW9uSUR9JyBpcyBpbnZhbGlkISEhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIHJlbW90ZSBpcCBjaGVjawogICAgaWYgKAogICAgICAgICREYXRhe1VzZXJSZW1vdGVBZGRyfSBuZSAkUmVtb3RlQWRkcgogICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnKQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJSZW1vdGVJUCBvZiAnJFBhcmFte1Nlc3Npb25JRH0nICgkRGF0YXtVc2VyUmVtb3RlQWRkcn0pIGlzICIKICAgICAgICAgICAgICAgIC4gImRpZmZlcmVudCBmcm9tIHJlZ2lzdGVyZWQgSVAgKCRSZW1vdGVBZGRyKS4gSW52YWxpZGF0aW5nIHNlc3Npb24hICIKICAgICAgICAgICAgICAgIC4gIkRpc2FibGUgY29uZmlnICdTZXNzaW9uQ2hlY2tSZW1vdGVJUCcgaWYgeW91IGRvbid0IHdhbnQgdGhpcyEiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHNlc3Npb24gaWQgaWYgaXQgaXNuJ3QgdGhlIHNhbWUgcmVtb3RlIGlwPwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uRGVsZXRlSWZOb3RSZW1vdGVJRCcpICkgewogICAgICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHNlc3Npb24gaWRsZSB0aW1lCiAgICBteSAkVGltZU5vdyAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKTsKICAgIG15ICRNYXhTZXNzaW9uSWRsZVRpbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25NYXhJZGxlVGltZScpOwoKICAgIGlmICggKCAkVGltZU5vdyAtICRNYXhTZXNzaW9uSWRsZVRpbWUgKSA+PSAkRGF0YXtVc2VyTGFzdFJlcXVlc3R9ICkgewoKICAgICAgICAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1Nlc3Npb24gaGFzIHRpbWVkIG91dC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi4nKTsKCiAgICAgICAgbXkgJFRpbWVvdXQgPSBpbnQoICggJFRpbWVOb3cgLSAkRGF0YXtVc2VyTGFzdFJlcXVlc3R9ICkgLyAoIDYwICogNjAgKSApOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiU2Vzc2lvbklEICgkUGFyYW17U2Vzc2lvbklEfSkgaWRsZSB0aW1lb3V0ICgkVGltZW91dCBoKSEgRG9uJ3QgZ3JhbnQgYWNjZXNzISEhIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBzZXNzaW9uIGlkIGlmIHRvbyBvbGQ/CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25EZWxldGVJZlRpbWVUb09sZCcpICkgewogICAgICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHNlc3Npb24gdGltZQogICAgbXkgJE1heFNlc3Npb25UaW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4VGltZScpOwoKICAgIGlmICggKCAkVGltZU5vdyAtICRNYXhTZXNzaW9uVGltZSApID49ICREYXRhe1VzZXJTZXNzaW9uU3RhcnR9ICkgewoKICAgICAgICAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1Nlc3Npb24gaGFzIHRpbWVkIG91dC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi4nKTsKCiAgICAgICAgbXkgJFRpbWVvdXQgPSBpbnQoICggJFRpbWVOb3cgLSAkRGF0YXtVc2VyU2Vzc2lvblN0YXJ0fSApIC8gKCA2MCAqIDYwICkgKTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiU2Vzc2lvbklEICgkUGFyYW17U2Vzc2lvbklEfSkgdG9vIG9sZCAoJFRpbWVvdXQgaCkhIERvbid0IGdyYW50IGFjY2VzcyEhISIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgc2Vzc2lvbiBpZCBpZiB0b28gb2xkCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25EZWxldGVJZlRpbWVUb09sZCcpICkgewogICAgICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIFNlc3Npb25JREVycm9yTWVzc2FnZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gfHwgJyc7Cn0KCnN1YiBHZXRTZXNzaW9uSUREYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBzZXNzaW9uIGlkCiAgICBpZiAoICEkUGFyYW17U2Vzc2lvbklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0dvdCBubyBTZXNzaW9uSUQhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAleyAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9IH0gaWYgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgcmVhZCBkYXRhCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgU0VMRUNUIGlkLCBkYXRhX2tleSwgZGF0YV92YWx1ZSwgc2VyaWFsaXplZAogICAgICAgICAgICBGUk9NICRTZWxmLT57U2Vzc2lvblRhYmxlfQogICAgICAgICAgICBXSEVSRSBzZXNzaW9uX2lkID0gPwogICAgICAgICAgICBPUkRFUiBCWSBpZCBBU0MiLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1Nlc3Npb25JRH0gXSwKICAgICk7CgogICAgIyBnZXQgZW5jb2RlIG9iamVjdAogICAgbXkgJEVuY29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnKTsKCiAgICAjIGdldCBzdG9yYWJsZSBvYmplY3QKICAgIG15ICRTdG9yYWJsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdG9yYWJsZScpOwoKICAgIG15ICVTZXNzaW9uOwogICAgbXkgJVNlc3Npb25JRDsKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICAjIGRlc2VyaWFsaXplIGRhdGEgaWYgbmVlZGVkCiAgICAgICAgaWYgKCAkUm93WzNdICkgewogICAgICAgICAgICBteSAkVmFsdWUgPSBldmFsIHsKICAgICAgICAgICAgICAgICRTdG9yYWJsZU9iamVjdC0+RGVzZXJpYWxpemUoIERhdGEgPT4gZGVjb2RlX2Jhc2U2NCggJFJvd1syXSApICk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAjIHdvcmthcm91bmQgZm9yIHRoZSBvcmFjbGUgcHJvYmxlbSB3aXRoIGVtcHR5CiAgICAgICAgICAgICMgc3RyaW5ncyBhbmQgTlVMTCB2YWx1ZXMgaW4gVkFSQ0hBUiBjb2x1bW5zCiAgICAgICAgICAgIGlmICggJFZhbHVlICYmIHJlZiAkVmFsdWUgZXEgJ1NDQUxBUicgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAkeyRWYWx1ZX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRFbmNvZGVPYmplY3QtPkVuY29kZU91dHB1dCggXCRWYWx1ZSApOwoKICAgICAgICAgICAgJFNlc3Npb257ICRSb3dbMV0gfSA9ICRWYWx1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZXNzaW9ueyAkUm93WzFdIH0gPSAkUm93WzJdOwogICAgICAgIH0KCiAgICAgICAgJFNlc3Npb25JRHsgJFJvd1sxXSB9ID0gJFJvd1swXTsKICAgIH0KCiAgICBpZiAoICElU2Vzc2lvbiApIHsKICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfTsKICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZUlEfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlVXBkYXRlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfSAgID0gXCVTZXNzaW9uOwogICAgJFNlbGYtPntDYWNoZUlEfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9ID0gXCVTZXNzaW9uSUQ7CgogICAgcmV0dXJuICVTZXNzaW9uOwp9CgpzdWIgQ3JlYXRlU2Vzc2lvbklEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFRpbWVOb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKS0+VG9FcG9jaCgpOwoKICAgICMgZ2V0IHJlbW90ZSBhZGRyZXNzIGFuZCB0aGUgaHR0cCB1c2VyIGFnZW50CiAgICBteSAkUGFyYW1PYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFJlbW90ZUFkZHIgICAgICA9ICRQYXJhbXtSZW1vdGVBZGRyfSB8fCAkUGFyYW1PYmplY3QtPlJlbW90ZUFkZHIoKSB8fCAnbm9uZSc7CiAgICBteSAkUmVtb3RlVXNlckFnZW50ID0gJFBhcmFtT2JqZWN0LT5IZWFkZXIoJ1VzZXItQWdlbnQnKSB8fCAnbm9uZSc7CgogICAgIyBnZXQgbWFpbiBvYmplY3QKICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKCiAgICAjIGNyZWF0ZSBzZXNzaW9uIGlkCiAgICBteSAkU2Vzc2lvbklEID0gJE1haW5PYmplY3QtPkdlbmVyYXRlUmFuZG9tU3RyaW5nKAogICAgICAgIExlbmd0aCA9PiAzMiwKICAgICk7CgogICAgIyBjcmVhdGUgY2hhbGxlbmdlIHRva2VuCiAgICBteSAkQ2hhbGxlbmdlVG9rZW4gPSAkTWFpbk9iamVjdC0+R2VuZXJhdGVSYW5kb21TdHJpbmcoCiAgICAgICAgTGVuZ3RoID0+IDMyLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIEtFWToKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVQYXJhbSApIHsKCiAgICAgICAgbmV4dCBLRVkgaWYgISRLZXk7CgogICAgICAgICREYXRheyRLZXl9ID0gJFBhcmFteyRLZXl9OwogICAgfQoKICAgICREYXRhe1VzZXJTZXNzaW9uU3RhcnR9ICAgID0gJFRpbWVOb3c7CiAgICAkRGF0YXtVc2VyUmVtb3RlQWRkcn0gICAgICA9ICRSZW1vdGVBZGRyOwogICAgJERhdGF7VXNlclJlbW90ZVVzZXJBZ2VudH0gPSAkUmVtb3RlVXNlckFnZW50OwogICAgJERhdGF7VXNlckNoYWxsZW5nZVRva2VufSAgPSAkQ2hhbGxlbmdlVG9rZW47CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBjcmVhdGUgc3FsIGRhdGEKICAgIG15IEBTUUxzOwogICAgJFNlbGYtPl9TUUxDcmVhdGUoCiAgICAgICAgRGF0YSAgICAgID0+IFwlRGF0YSwKICAgICAgICBTUUxzICAgICAgPT4gXEBTUUxzLAogICAgICAgIFNlc3Npb25JRCA9PiAkU2Vzc2lvbklELAogICAgKTsKCiAgICByZXR1cm4gaWYgIUBTUUxzOwoKICAgICMgZGVsZXRlIG9sZCBzZXNzaW9uIGRhdGEgd2l0aCB0aGUgc2FtZSBzZXNzaW9uIGlkCiAgICAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAiCiAgICAgICAgICAgIERFTEVURSBGUk9NICRTZWxmLT57U2Vzc2lvblRhYmxlfQogICAgICAgICAgICBXSEVSRSBzZXNzaW9uX2lkID0gPyIsCiAgICAgICAgQmluZCA9PiBbIFwkU2Vzc2lvbklELCBdLAogICAgKTsKCiAgICAjIHN0b3JlIHNlc3Npb24gaWQgYW5kIGRhdGEKICAgIFJPVzoKICAgIGZvciBteSAkUm93IChAU1FMcykgewoKICAgICAgICBuZXh0IFJPVyBpZiAhJFJvdzsKICAgICAgICBuZXh0IFJPVyBpZiByZWYgJFJvdyBuZSAnSEFTSCc7CiAgICAgICAgbmV4dCBST1cgaWYgISRSb3ctPntTUUx9OwogICAgICAgIG5leHQgUk9XIGlmICEkUm93LT57QmluZH07CiAgICAgICAgbmV4dCBST1cgaWYgcmVmICRSb3ctPntCaW5kfSBuZSAnQVJSQVknOwoKICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICRSb3ctPntTUUx9LAogICAgICAgICAgICBCaW5kID0+ICRSb3ctPntCaW5kfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+eyRTZXNzaW9uSUR9ID0gXCVEYXRhOwoKICAgIHJldHVybiAkU2Vzc2lvbklEOwp9CgpzdWIgUmVtb3ZlU2Vzc2lvbklEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBzZXNzaW9uIGlkCiAgICBpZiAoICEkUGFyYW17U2Vzc2lvbklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0dvdCBubyBTZXNzaW9uSUQhIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlbGV0ZSBzZXNzaW9uIGZyb20gdGhlIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0gV0hFUkUgc2Vzc2lvbl9pZCA9ID8iLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1Nlc3Npb25JRH0gXSwKICAgICk7CgogICAgIyByZXNldCBjYWNoZQogICAgZGVsZXRlICRTZWxmLT57Q2FjaGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH07CiAgICBkZWxldGUgJFNlbGYtPntDYWNoZUlEfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgZGVsZXRlICRTZWxmLT57Q2FjaGVVcGRhdGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH07CgogICAgIyBsb2cgZXZlbnQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgIE1lc3NhZ2UgID0+ICJSZW1vdmVkIFNlc3Npb25JRCAkUGFyYW17U2Vzc2lvbklEfS4iCiAgICApOwoKICAgIHJldHVybiAxOwp9CgpzdWIgVXBkYXRlU2Vzc2lvbklEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciAocXcoU2Vzc2lvbklEIEtleSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkXyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgaWYgKCAhJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfSApIHsKICAgICAgICBteSAlU2Vzc2lvbkRhdGEgPSAkU2VsZi0+R2V0U2Vzc2lvbklERGF0YSggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CgogICAgICAgICRTZWxmLT57Q2FjaGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH0gPSBcJVNlc3Npb25EYXRhOwogICAgfQoKICAgICMgdXBkYXRlIHRoZSB2YWx1ZSwgc2V0IGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9LT57ICRQYXJhbXtLZXl9IH0gICAgICAgPSAkUGFyYW17VmFsdWV9OwogICAgJFNlbGYtPntDYWNoZVVwZGF0ZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfS0+eyAkUGFyYW17S2V5fSB9ID0gJFBhcmFte1ZhbHVlfTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIEdldEFsbFNlc3Npb25JRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZ2V0IGFsbCBzZXNzaW9uIGlkcyBmcm9tIHRoZSBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgRElTVElOQ1Qoc2Vzc2lvbl9pZCkgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0iLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXNzaW9uSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAU2Vzc2lvbklEcywgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gQFNlc3Npb25JRHM7Cn0KCnN1YiBHZXRBY3RpdmVTZXNzaW9ucyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRNYXhTZXNzaW9uSWRsZVRpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1Nlc3Npb25NYXhJZGxlVGltZScpOwoKICAgICMgZ2V0IHN5c3RlbSB0aW1lCiAgICBteSAkVGltZU5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiCiAgICAgICAgICAgIFNFTEVDVCBzZXNzaW9uX2lkLCBkYXRhX2tleSwgZGF0YV92YWx1ZQogICAgICAgICAgICBGUk9NICRTZWxmLT57U2Vzc2lvblRhYmxlfQogICAgICAgICAgICBXSEVSRSBkYXRhX2tleSA9ICdVc2VyVHlwZScKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1VzZXJMYXN0UmVxdWVzdCcKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1VzZXJMb2dpbicKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1Nlc3Npb25Tb3VyY2UnCiAgICAgICAgICAgIE9SREVSIEJZIGlkIEFTQyIsCiAgICApOwoKICAgIG15ICVTZXNzaW9uRGF0YTsKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBuZXh0IFJPVyBpZiAhJFJvd1swXTsKICAgICAgICBuZXh0IFJPVyBpZiAhJFJvd1sxXTsKCiAgICAgICAgJFNlc3Npb25EYXRheyAkUm93WzBdIH0tPnsgJFJvd1sxXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICBteSAkQWN0aXZlU2Vzc2lvbkNvdW50ID0gMDsKICAgIG15ICVBY3RpdmVTZXNzaW9uUGVyVXNlckNvdW50OwogICAgU0VTU0lPTklEOgogICAgZm9yIG15ICRTZXNzaW9uSUQgKCBzb3J0IGtleXMgJVNlc3Npb25EYXRhICkgewoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25JRDsKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25EYXRheyRTZXNzaW9uSUR9OwoKICAgICAgICAjIERvbid0IGNvdW50IHNlc3Npb24gZnJvbSBzb3VyY2UgJ0dlbmVyaWNJbnRlcmZhY2UnCiAgICAgICAgbXkgJFNlc3Npb25Tb3VyY2UgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntTZXNzaW9uU291cmNlfSB8fCAnJzsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgJFNlc3Npb25Tb3VyY2UgZXEgJ0dlbmVyaWNJbnRlcmZhY2UnOwoKICAgICAgICAjIGdldCBuZWVkZWQgZGF0YQogICAgICAgIG15ICRVc2VyVHlwZSAgICAgICAgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntVc2VyVHlwZX0gICAgICAgIHx8ICcnOwogICAgICAgIG15ICRVc2VyTGFzdFJlcXVlc3QgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntVc2VyTGFzdFJlcXVlc3R9IHx8ICRUaW1lTm93OwogICAgICAgIG15ICRVc2VyTG9naW4gICAgICAgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntVc2VyTG9naW59OwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAkVXNlclR5cGUgbmUgJFBhcmFte1VzZXJUeXBlfTsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgKCAkVXNlckxhc3RSZXF1ZXN0ICsgJE1heFNlc3Npb25JZGxlVGltZSApIDwgJFRpbWVOb3c7CgogICAgICAgICRBY3RpdmVTZXNzaW9uQ291bnQrKzsKCiAgICAgICAgJEFjdGl2ZVNlc3Npb25QZXJVc2VyQ291bnR7JFVzZXJMb2dpbn0gfHwgMDsKICAgICAgICAkQWN0aXZlU2Vzc2lvblBlclVzZXJDb3VudHskVXNlckxvZ2lufSsrOwogICAgfQoKICAgIG15ICVSZXN1bHQgPSAoCiAgICAgICAgVG90YWwgICA9PiAkQWN0aXZlU2Vzc2lvbkNvdW50LAogICAgICAgIFBlclVzZXIgPT4gXCVBY3RpdmVTZXNzaW9uUGVyVXNlckNvdW50LAogICAgKTsKCiAgICByZXR1cm4gJVJlc3VsdDsKfQoKc3ViIEdldEV4cGlyZWRTZXNzaW9uSURzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY29uZmlnCiAgICBteSAkTWF4U2Vzc2lvblRpbWUgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4VGltZScpOwogICAgbXkgJE1heFNlc3Npb25JZGxlVGltZSA9ICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbk1heElkbGVUaW1lJyk7CgogICAgIyBnZXQgY3VycmVudCB0aW1lCiAgICBteSAkVGltZU5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBhbGwgbmVlZGVkIHRpbWVzdGFtcHMgdG8gaW52ZXN0aWdhdGUgdGhlIGV4cGlyZWQgc2Vzc2lvbnMKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIgogICAgICAgICAgICBTRUxFQ1Qgc2Vzc2lvbl9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUKICAgICAgICAgICAgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0KICAgICAgICAgICAgV0hFUkUgZGF0YV9rZXkgPSAnVXNlclNlc3Npb25TdGFydCcKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1VzZXJMYXN0UmVxdWVzdCcKICAgICAgICAgICAgT1JERVIgQlkgaWQgQVNDIiwKICAgICk7CgogICAgbXkgJVNlc3Npb25EYXRhOwogICAgUk9XOgogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG5leHQgUk9XIGlmICEkUm93WzBdOwogICAgICAgIG5leHQgUk9XIGlmICEkUm93WzFdOwoKICAgICAgICAkU2Vzc2lvbkRhdGF7ICRSb3dbMF0gfS0+eyAkUm93WzFdIH0gPSAkUm93WzJdOwogICAgfQoKICAgIG15IEBFeHBpcmVkU2Vzc2lvbjsKICAgIG15IEBFeHBpcmVkSWRsZTsKICAgIFNFU1NJT05JRDoKICAgIGZvciBteSAkU2Vzc2lvbklEICggc29ydCBrZXlzICVTZXNzaW9uRGF0YSApIHsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgISRTZXNzaW9uSUQ7CiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgISRTZXNzaW9uRGF0YXskU2Vzc2lvbklEfTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIHRpbWVzdGFtcHMKICAgICAgICBteSAkVXNlclNlc3Npb25TdGFydCA9ICRTZXNzaW9uRGF0YXskU2Vzc2lvbklEfS0+e1VzZXJTZXNzaW9uU3RhcnR9IHx8ICRUaW1lTm93OwogICAgICAgIG15ICRVc2VyTGFzdFJlcXVlc3QgID0gJFNlc3Npb25EYXRheyRTZXNzaW9uSUR9LT57VXNlckxhc3RSZXF1ZXN0fSAgfHwgJFRpbWVOb3c7CgogICAgICAgICMgdGltZSBjYWxjdWxhdGlvbgogICAgICAgIG15ICRWYWxpZFRpbWUgICAgID0gJFVzZXJTZXNzaW9uU3RhcnQgKyAkTWF4U2Vzc2lvblRpbWUgLSAkVGltZU5vdzsKICAgICAgICBteSAkVmFsaWRJZGxlVGltZSA9ICRVc2VyTGFzdFJlcXVlc3QgKyAkTWF4U2Vzc2lvbklkbGVUaW1lIC0gJFRpbWVOb3c7CgogICAgICAgICMgZGVsZXRlIGludmFsaWQgc2Vzc2lvbiB0aW1lCiAgICAgICAgaWYgKCAkVmFsaWRUaW1lIDw9IDAgKSB7CiAgICAgICAgICAgIHB1c2ggQEV4cGlyZWRTZXNzaW9uLCAkU2Vzc2lvbklEOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgaW52YWxpZCBpZGxlIHNlc3Npb24gdGltZQogICAgICAgIGVsc2lmICggJFZhbGlkSWRsZVRpbWUgPD0gMCApIHsKICAgICAgICAgICAgcHVzaCBARXhwaXJlZElkbGUsICRTZXNzaW9uSUQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoIFxARXhwaXJlZFNlc3Npb24sIFxARXhwaXJlZElkbGUgKTsKfQoKc3ViIENsZWFuVXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgdXNlICd0cnVuY2F0ZSB0YWJsZScgaWYgcG9zc2libGUgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIGF1dG8gaW5jcmVtZW50IHZhbHVlCiAgICBpZiAoCiAgICAgICAgJFNlbGYtPntEQlR5cGV9IGVxICdteXNxbCcKICAgICAgICB8fCAkU2VsZi0+e0RCVHlwZX0gZXEgJ3Bvc3RncmVzcWwnCiAgICAgICAgfHwgJFNlbGYtPntEQlR5cGV9IGVxICdvcmFjbGUnCiAgICAgICAgfHwgJFNlbGYtPntEQlR5cGV9IGVxICdtc3NxbCcKICAgICAgICApCiAgICB7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbyggU1FMID0+ICJUUlVOQ0FURSBUQUJMRSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0iICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oIFNRTCA9PiAiREVMRVRFIEZST00gJFNlbGYtPntTZXNzaW9uVGFibGV9IiApOwogICAgfQoKICAgICMgcmVtb3ZlIGNhY2hlZCBkYXRhCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX07CiAgICBkZWxldGUgJFNlbGYtPntDYWNoZUlEfTsKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlVXBkYXRlfTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIERFU1RST1kgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMSBpZiAhJFNlbGYtPntDYWNoZVVwZGF0ZX07CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBTRVNTSU9OSUQ6CiAgICBmb3IgbXkgJFNlc3Npb25JRCAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NhY2hlVXBkYXRlfSB9ICkgewoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25JRDsKCiAgICAgICAgIyBleHRyYWN0IHNlc3Npb24gZGF0YSB0byB1cGRhdGUKICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT57Q2FjaGVVcGRhdGV9LT57JFNlc3Npb25JRH07CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkRGF0YTsKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiByZWYgJERhdGEgbmUgJ0hBU0gnOwogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEleyREYXRhfTsKCiAgICAgICAgIyBjcmVhdGUgc3FsIGRhdGEKICAgICAgICBteSBAU1FMczsKICAgICAgICAkU2VsZi0+X1NRTENyZWF0ZSgKICAgICAgICAgICAgRGF0YSAgICAgID0+ICREYXRhLAogICAgICAgICAgICBTUUxzICAgICAgPT4gXEBTUUxzLAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlc3Npb25JRCwKICAgICAgICApOwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhQFNRTHM7CgogICAgICAgICMgc3RvcmUgc2Vzc2lvbiBpZCBhbmQgZGF0YQogICAgICAgIFJPVzoKICAgICAgICBmb3IgbXkgJFJvdyAoQFNRTHMpIHsKCiAgICAgICAgICAgIG5leHQgUk9XIGlmICEkUm93OwogICAgICAgICAgICBuZXh0IFJPVyBpZiByZWYgJFJvdyBuZSAnSEFTSCc7CiAgICAgICAgICAgIG5leHQgUk9XIGlmICEkUm93LT57U1FMfTsKICAgICAgICAgICAgbmV4dCBST1cgaWYgISRSb3ctPntCaW5kfTsKICAgICAgICAgICAgbmV4dCBST1cgaWYgcmVmICRSb3ctPntCaW5kfSBuZSAnQVJSQVknOwoKICAgICAgICAgICAgJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gJFJvdy0+e1NRTH0sCiAgICAgICAgICAgICAgICBCaW5kID0+ICRSb3ctPntCaW5kfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NhY2hlVXBkYXRlfS0+eyRTZXNzaW9uSUR9IH0gKSB7CgogICAgICAgICAgICBuZXh0IEtFWSBpZiAhJEtleTsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkYXRhYmFzZSBpZAogICAgICAgICAgICBteSAkSUQgPSAkU2VsZi0+e0NhY2hlSUR9LT57JFNlc3Npb25JRH0tPnskS2V5fSB8fCAxOwoKICAgICAgICAgICAgIyBkZWxldGUgb2xkIHNlc3Npb24gZGF0YSBmcm9tIHRoZSBkYXRhYmFzZQogICAgICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0KICAgICAgICAgICAgICAgICAgICBXSEVSRSBzZXNzaW9uX2lkID0gPwogICAgICAgICAgICAgICAgICAgICAgICBBTkQgZGF0YV9rZXkgPSA/CiAgICAgICAgICAgICAgICAgICAgICAgIEFORCBpZCA8PSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlc3Npb25JRCwgXCRLZXksIFwkSUQgXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyByZW1vdmUgY2FjaGVkIGRhdGEKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfTsKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlSUR9OwogICAgZGVsZXRlICRTZWxmLT57Q2FjaGVVcGRhdGV9OwoKICAgIHJldHVybiAxOwp9CgpzdWIgX1NRTENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhJFBhcmFte0RhdGF9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17RGF0YX0gbmUgJ0hBU0gnOwogICAgcmV0dXJuIGlmICEleyAkUGFyYW17RGF0YX0gfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1Nlc3Npb25JRH07CiAgICByZXR1cm4gaWYgISRQYXJhbXtTUUxzfTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1NRTHN9IG5lICdBUlJBWSc7CgogICAgbXkgJFN0b3JhYmxlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyk7CgogICAgaWYgKCAkU2VsZi0+e0RCVHlwZX0gZXEgJ215c3FsJyB8fCAkU2VsZi0+e0RCVHlwZX0gZXEgJ3Bvc3RncmVzcWwnICkgewoKICAgICAgICAjIGRlZmluZSByb3cKICAgICAgICBteSAkU1FMID0gIklOU0VSVCBJTlRPICRTZWxmLT57U2Vzc2lvblRhYmxlfSAiCiAgICAgICAgICAgIC4gIihzZXNzaW9uX2lkLCBkYXRhX2tleSwgZGF0YV92YWx1ZSwgc2VyaWFsaXplZCkgVkFMVUVTICI7CiAgICAgICAgbXkgQEJpbmQ7CgogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17RGF0YX0gfSApIHsKCiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwoKICAgICAgICAgICAgbXkgJFZhbHVlICAgICAgPSAkUGFyYW17RGF0YX0tPnskS2V5fTsKICAgICAgICAgICAgbXkgJFNlcmlhbGl6ZWQgPSAwOwoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgcmVmICRWYWx1ZSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgIHx8IHJlZiAkVmFsdWUgZXEgJ0FSUkFZJwogICAgICAgICAgICAgICAgfHwgcmVmICRWYWx1ZSBlcSAnU0NBTEFSJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBkdW1wIHRoZSBkYXRhCiAgICAgICAgICAgICAgICAkVmFsdWUgPSBlbmNvZGVfYmFzZTY0KAogICAgICAgICAgICAgICAgICAgICRTdG9yYWJsZU9iamVjdC0+U2VyaWFsaXplKCBEYXRhID0+ICRWYWx1ZSApCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNlcmlhbGl6ZWQgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1Nlc3Npb25JRH07CiAgICAgICAgICAgIHB1c2ggQEJpbmQsIFwkS2V5OwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFZhbHVlOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFNlcmlhbGl6ZWQ7CgogICAgICAgICAgICAkU1FMIC49ICcoPyw/LD8sPyksJzsKICAgICAgICB9CgogICAgICAgICMgcmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3RlcgogICAgICAgIGNob3AgJFNRTDsKCiAgICAgICAgbXkgJVJvdyA9ICgKICAgICAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICAgICApOwoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtTUUxzfSB9LCBcJVJvdzsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57REJUeXBlfSBlcSAnb3JhY2xlJyApIHsKCiAgICAgICAgIyBkZWZpbmUgcm93CiAgICAgICAgbXkgJFNRTCA9ICcnOwogICAgICAgIG15IEBCaW5kOwogICAgICAgIG15ICRDb3VudGVyID0gMDsKCiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRLZXk7CgogICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgbXkgJFZhbHVlICAgICAgPSAkUGFyYW17RGF0YX0tPnskS2V5fTsKICAgICAgICAgICAgbXkgJFNlcmlhbGl6ZWQgPSAwOwoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgIWRlZmluZWQgJFZhbHVlCiAgICAgICAgICAgICAgICB8fCAkVmFsdWUgZXEgJycKICAgICAgICAgICAgICAgIHx8IHJlZiAkVmFsdWUgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICB8fCByZWYgJFZhbHVlIGVxICdBUlJBWScKICAgICAgICAgICAgICAgIHx8IHJlZiAkVmFsdWUgZXEgJ1NDQUxBUicKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgd29ya2Fyb3VuZCBmb3IgdGhlIG9yYWNsZSBwcm9ibGVtIHdpdGggZW1wdHkgc3RyaW5ncwogICAgICAgICAgICAgICAgIyBhbmQgTlVMTCB2YWx1ZXMgaW4gVkFSQ0hBUiBjb2x1bW5zCiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkICRWYWx1ZSApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJEVtcHR5ID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgJFZhbHVlID0gXCRFbXB0eTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFZhbHVlIGVxICcnICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkRW1wdHkgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSBcJEVtcHR5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZHVtcCB0aGUgZGF0YQogICAgICAgICAgICAgICAgJFZhbHVlID0gZW5jb2RlX2Jhc2U2NCgKICAgICAgICAgICAgICAgICAgICAkU3RvcmFibGVPYmplY3QtPlNlcmlhbGl6ZSggRGF0YSA9PiAkVmFsdWUgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZXJpYWxpemVkID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNRTCB8fD0gJ0lOU0VSVCBBTEwgJzsKICAgICAgICAgICAgJFNRTCAuPSAiSU5UTyAkU2VsZi0+e1Nlc3Npb25UYWJsZX0gIgogICAgICAgICAgICAgICAgLiAiKHNlc3Npb25faWQsIGRhdGFfa2V5LCBkYXRhX3ZhbHVlLCBzZXJpYWxpemVkKSBWQUxVRVMgKD8sPyw/LD8pICI7CgogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1Nlc3Npb25JRH07CiAgICAgICAgICAgIHB1c2ggQEJpbmQsIFwkS2V5OwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFZhbHVlOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFNlcmlhbGl6ZWQ7CgogICAgICAgICAgICAjIHNwbGl0IFNRTHMgd2l0aCBtb3JlIHRoYW4gNGsgY2hhcmVjdGVycwogICAgICAgICAgICBuZXh0IEtFWSBpZiAkQ291bnRlciA8IDQwOwoKICAgICAgICAgICAgIyBjb3B5IGJpbmQgdG8gYmUgYWJsZSB0byBjbGVhbiB0aGUgYXJyYXkgcmVmZXJlbmNlCiAgICAgICAgICAgIG15IEBCaW5kQ29weSA9IEBCaW5kOwoKICAgICAgICAgICAgJFNRTCAuPSAnU0VMRUNUICogRlJPTSBkdWFsJzsKCiAgICAgICAgICAgIG15ICVSb3cgPSAoCiAgICAgICAgICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgICAgICAgICBCaW5kID0+IFxAQmluZENvcHksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtTUUxzfSB9LCBcJVJvdzsKCiAgICAgICAgICAgICMgY2xlYW4gdmFyaWFibGUKICAgICAgICAgICAgJFNRTCAgICAgPSAnJzsKICAgICAgICAgICAgQEJpbmQgICAgPSAoKTsKICAgICAgICAgICAgJENvdW50ZXIgPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkU1FMICYmIEBCaW5kICkgewoKICAgICAgICAgICAgJFNRTCAuPSAnU0VMRUNUICogRlJPTSBkdWFsJzsKCiAgICAgICAgICAgIG15ICVSb3cgPSAoCiAgICAgICAgICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1NRTHN9IH0sIFwlUm93OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRLZXk7CgogICAgICAgICAgICBteSAkVmFsdWUgICAgICA9ICRQYXJhbXtEYXRhfS0+eyRLZXl9OwogICAgICAgICAgICBteSAkU2VyaWFsaXplZCA9IDA7CgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICByZWYgJFZhbHVlIGVxICdIQVNIJwogICAgICAgICAgICAgICAgfHwgcmVmICRWYWx1ZSBlcSAnQVJSQVknCiAgICAgICAgICAgICAgICB8fCByZWYgJFZhbHVlIGVxICdTQ0FMQVInCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGR1bXAgdGhlIGRhdGEKICAgICAgICAgICAgICAgICRWYWx1ZSA9IGVuY29kZV9iYXNlNjQoCiAgICAgICAgICAgICAgICAgICAgJFN0b3JhYmxlT2JqZWN0LT5TZXJpYWxpemUoIERhdGEgPT4gJFZhbHVlICkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VyaWFsaXplZCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15IEBCaW5kOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1Nlc3Npb25JRH07CiAgICAgICAgICAgIHB1c2ggQEJpbmQsIFwkS2V5OwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFZhbHVlOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFNlcmlhbGl6ZWQ7CgogICAgICAgICAgICBteSAkU1FMID0gIklOU0VSVCBJTlRPICRTZWxmLT57U2Vzc2lvblRhYmxlfSAiCiAgICAgICAgICAgICAgICAuICIoc2Vzc2lvbl9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUsIHNlcmlhbGl6ZWQpIFZBTFVFUyAoPyw/LD8sPykiOwoKICAgICAgICAgICAgbXkgJVJvdyA9ICgKICAgICAgICAgICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICAgICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17U1FMc30gfSwgXCVSb3c7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/Config/Files/XML/OTOBOAIDashboard.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9IkRhc2hib2FyZEJhY2tlbmQjIyMwMTYwLU9UT0JPQUlEYXNoYm9hcmQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSB0aWNrZXRzIG92ZXJ2aWV3IGJ5IHNlYXJjaCB0ZW1wbGF0ZSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLiAiTWFuZGF0b3J5IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgYWx3YXlzIHNob3duIGFuZCBjYW4gbm90IGJlIHJlbW92ZWQgYnkgYWdlbnRzLiBOb3RlOiBPbmx5IFRpY2tldCBhdHRyaWJ1dGVzIGFuZCBEeW5hbWljIEZpZWxkcyAoRHluYW1pY0ZpZWxkX05hbWVYKSBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkRhc2hib2FyZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6Ok90b2JvQUlEYXNoYm9hcmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPk9UT0JPLUFJIEJvdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+QXV0b21hdGljIHJlc3BvbnNlcyBmcm9tIE9UT0JPIEJvdC48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZpbHRlciIgVHJhbnNsYXRhYmxlPSIxIj5BbGw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpbWUiPkFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGltaXQiPjEwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQZXJtaXNzaW9uIj5ydzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkNvbnRlbnRMYXJnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2FjaGVUVExMb2NhbCI+MC41PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Q29sdW1ucyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+MCAtIERpc2FibGVkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPjEgLSBBdmFpbGFibGU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjIiIFRyYW5zbGF0YWJsZT0iMSI+MiAtIEVuYWJsZWQgYnkgZGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2UiIFNlbGVjdGVkSUQ9IjIiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VkIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlZCIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1c3RvbWVyQ29tcGFueU5hbWUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXN0b21lcklEIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VzdG9tZXJOYW1lIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VzdG9tZXJVc2VySUQiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFc2NhbGF0aW9uUmVzcG9uc2VUaW1lIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXNjYWxhdGlvblNvbHV0aW9uVGltZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVzY2FsYXRpb25UaW1lIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXNjYWxhdGlvblVwZGF0ZVRpbWUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaWNrZXROdW1iZXIiIFNlbGVjdGVkSUQ9IjIiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NrIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3duZXIiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQZW5kaW5nVGltZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlF1ZXVlIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVzcG9uc2libGUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2UiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNMQSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBTZWxlY3RlZElEPSIyIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFuZGF0b3J5Ij4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudERhc2hib2FyZCMjIzAxNjAtT1RPQk9BSURhc2hib2FyZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLklucHV0RmllbGRzLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50Lk90b2JvQUlXaWRnZXQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPk90b2JvQUlEYXNoYm9hcmQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OlRleHRBcmVhUXVlc3Rpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGVybWl0dGVkIHdpZHRoIGZvciBjb21wb3NlIHF1ZXN0aW9uIHdpbmRvd3MuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkRhc2hib2FyZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSJeWzAtOV17MSwzfSQiPjEwMDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI090b2JvQUlEYXNoYm9hcmQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPk90b2JvIEFJIERhc2hib2FyZCBXaWRnZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik90b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpDYWNoZVRUTCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2YgaG91cnMgb2YgVFRMIGZvciB0aGUgT3RvYm8tQUkgY2FjaGUgZWxlbWVudHMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkRhc2hib2FyZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3QiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBbnN3ZXIiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik90b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpQb2xsaW5nSW50ZXJ2YWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TnVtYmVyIG9mIHNlY29uZHMgb24gdGhlIGNsaWVudCBzaWRlIGJldHdlZW4gYXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIGFuc3dlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6RGFzaGJvYXJkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9Il5bMC05XXsxLDN9JCI+NTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OlRpbWVvdXRJbnRlcnZhbCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaW1lb3V0IHRvIGNvbnNpZGVyIHRoYXQgYSByZXF1ZXN0IGhhcyBubyByZXNwb25zZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6RGFzaGJvYXJkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9Il5bMC05XXsxLDN9JCI+MzAwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=</File>
        <File Location="Kernel/Config/Files/XML/OTOBOAI.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OlRpY2tldDo6U2VhcmNoUmVzdHJpY3Rpb25zIyMjMDEwMC1EZWZhdWx0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFkZCBzZWFyY2ggcmVzdHJpY3Rpb25zIG9yIHBhcmFtZXRlcnMsIHRvIHNlbGVjdCB0aWNrZXRzIGZvciBpbXBvcnQgaW4gdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGluIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIHByb3ZpZGVkLiBQbGVhc2Ugbm90ZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBtYXkgZGVzeW5jaHJvbml6ZSB0aGUgdW5kZXJseWluZyB2ZWN0b3IgREIuIFRodXMsIGEgZnVsbCByZWltcG9ydCBvZiB0aGUgdGlja2V0IGtub3dsZWRnZSBiYXNlIHZpYSBjb25zb2xlIGNvbW1hbmQgaXMgcmVxdWlyZWQgdG8gZ3VhcmFudGVlIGEgdmFsaWQgZGF0YWJhc2Ugc3RhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5kZWZhdWx0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlF1ZXVlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5SYXc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXNlU3ViUXVldWVzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5VbmNsYXNzaWZpZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGVUeXBlIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmNsb3NlZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Y2xvc2VkIHN1Y2Nlc3NmdWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2VydmljZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaWNrZXRDbG9zZVRpbWVOZXdlck1pbnV0ZXMiPjE1NzY4MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFyY2hpdmVGbGFncyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT55PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CjwhLS0KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX0ZpZWxkTmFtZVgiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVxdWFscyI+MTIzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxpa2UiPnNvbWUgdmFsdWU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JlYXRlclRoYW4iPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JlYXRlclRoYW5FcXVhbHMiPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU21hbGxlclRoYW4iPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU21hbGxlclRoYW5FcXVhbHMiPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KLS0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6VGlja2V0OjpTZWFyY2hSZXN0cmljdGlvbnMjIyMwMjAwLUN1c3RvbTEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRkIHNlYXJjaCByZXN0cmljdGlvbnMgb3IgcGFyYW1ldGVycywgdG8gc2VsZWN0IHRpY2tldHMgZm9yIGltcG9ydCBpbiB0aGUgUkFHIHBpcGVsaW5lLiBUaGUgcGlwZWxpbmUgaW4gZGV0ZXJtaW5lZCBieSB0aGUgbGFiZWwgcHJvdmlkZWQuIFBsZWFzZSBub3RlIHRoYXQgYW55IGNoYW5nZXMgdG8gdGhpcyBzZXR0aW5nIG1heSBkZXN5bmNocm9uaXplIHRoZSB1bmRlcmx5aW5nIHZlY3RvciBEQi4gVGh1cywgYSBmdWxsIHJlaW1wb3J0IG9mIHRoZSB0aWNrZXQga25vd2xlZGdlIGJhc2UgdmlhIGNvbnNvbGUgY29tbWFuZCBpcyByZXF1aXJlZCB0byBndWFyYW50ZWUgYSB2YWxpZCBkYXRhYmFzZSBzdGF0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkN1c3RvbTE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUXVldWVzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlJhdzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJVc2VTdWJRdWV1ZXMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGVzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlVuY2xhc3NpZmllZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZVR5cGUiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Y2xvc2VkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5jbG9zZWQgc3VjY2Vzc2Z1bDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTZXJ2aWNlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpY2tldENsb3NlVGltZU5ld2VyTWludXRlcyI+MTU3NjgwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXJjaGl2ZUZsYWdzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPnk8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPm48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KPCEtLQogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfRmllbGROYW1lWCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXF1YWxzIj4xMjM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlrZSI+c29tZSB2YWx1ZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmVhdGVyVGhhbiI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmVhdGVyVGhhbkVxdWFscyI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTbWFsbGVyVGhhbiI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTbWFsbGVyVGhhbkVxdWFscyI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KCiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgotLT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpUaWNrZXQ6OlNlYXJjaFJlc3RyaWN0aW9ucyMjIzAzMDAtQ3VzdG9tMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZGQgc2VhcmNoIHJlc3RyaWN0aW9ucyBvciBwYXJhbWV0ZXJzLCB0byBzZWxlY3QgdGlja2V0cyBmb3IgaW1wb3J0IGluIHRoZSBSQUcgcGlwZWxpbmUuIFRoZSBwaXBlbGluZSBpbiBkZXRlcm1pbmVkIGJ5IHRoZSBsYWJlbCBwcm92aWRlZC4gUGxlYXNlIG5vdGUgdGhhdCBhbnkgY2hhbmdlcyB0byB0aGlzIHNldHRpbmcgbWF5IGRlc3luY2hyb25pemUgdGhlIHVuZGVybHlpbmcgdmVjdG9yIERCLiBUaHVzLCBhIGZ1bGwgcmVpbXBvcnQgb2YgdGhlIHRpY2tldCBrbm93bGVkZ2UgYmFzZSB2aWEgY29uc29sZSBjb21tYW5kIGlzIHJlcXVpcmVkIHRvIGd1YXJhbnRlZSBhIHZhbGlkIGRhdGFiYXNlIHN0YXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q3VzdG9tMjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+UmF3PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVzZVN1YlF1ZXVlcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+VW5jbGFzc2lmaWVkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlVHlwZSI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5jbG9zZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmNsb3NlZCBzdWNjZXNzZnVsPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2VzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGlja2V0Q2xvc2VUaW1lTmV3ZXJNaW51dGVzIj4xNTc2ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBcmNoaXZlRmxhZ3MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+eTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+bjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgo8IS0tCiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9GaWVsZE5hbWVYIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFbXB0eSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFcXVhbHMiPjEyMzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaWtlIj5zb21lIHZhbHVlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyZWF0ZXJUaGFuIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyZWF0ZXJUaGFuRXF1YWxzIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNtYWxsZXJUaGFuIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNtYWxsZXJUaGFuRXF1YWxzIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgoKICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+Ci0tPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OkZBUTo6U2VhcmNoUmVzdHJpY3Rpb25zIyMjMDEwMC1EZWZhdWx0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFkZCBzZWFyY2ggcmVzdHJpY3Rpb25zIG9yIHBhcmFtZXRlcnMsIHRvIHNlbGVjdCB0aWNrZXRzIGZvciBpbXBvcnQgaW4gdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGluIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIHByb3ZpZGVkLiBQbGVhc2Ugbm90ZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBtYXkgZGVzeW5jaHJvbml6ZSB0aGUgdW5kZXJseWluZyB2ZWN0b3IgREIuIFRodXMsIGEgZnVsbCByZWltcG9ydCBvZiB0aGUgdGlja2V0IGtub3dsZWRnZSBiYXNlIHZpYSBjb25zb2xlIGNvbW1hbmQgaXMgcmVxdWlyZWQgdG8gZ3VhcmFudGVlIGEgdmFsaWQgZGF0YWJhc2Ugc3RhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnlJRHMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYW5ndWFnZUlEcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+aW50ZXJuYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMiI+ZXh0ZXJuYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMyI+cHVibGljPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXBwcm92ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RkFROjpTZWFyY2hSZXN0cmljdGlvbnMjIyMwMjAwLUN1c3RvbTEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRkIHNlYXJjaCByZXN0cmljdGlvbnMgb3IgcGFyYW1ldGVycywgdG8gc2VsZWN0IEZBUSBhcnRpY2xlcyBmb3IgaW1wb3J0IGludG8gdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGlzIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIGdpdmVuLiBQbGVhc2Ugbm90ZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBtYXkgZGVzeW5jcm9uaXplIHRoZSB1bmRlcmx5aW5nIHZlY3RvciBEQi4gVGh1cywgYSBmdWxsIHJlaW1wb3J0IG9mIHRoZSBGQVEga25vd2xlZGdlIGJhc2UgdmlhIGNvbnNvbGUgY29tbWFuZCBpcyByZXF1aXJlZCB0byBndWFyYW50ZWUgYSB2YWxpZCBkYXRhYmFzZSBzdGF0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q3VzdG9tMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeUlEcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4zPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlSURzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5pbnRlcm5hbDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIyIj5leHRlcm5hbDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzIj5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBcHByb3ZlZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpGQVE6OlNlYXJjaFJlc3RyaWN0aW9ucyMjIzAzMDAtQ3VzdG9tMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZGQgc2VhcmNoIHJlc3RyaWN0aW9ucyBvciBwYXJhbWV0ZXJzLCB0byBzZWxlY3QgRkFRIGFydGljbGVzIGZvciBpbXBvcnQgaW50byB0aGUgUkFHIHBpcGVsaW5lLiBUaGUgcGlwZWxpbmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFiZWwgZ2l2ZW4uIFBsZWFzZSBub3RlIHRoYXQgYW55IGNoYW5nZXMgdG8gdGhpcyBzZXR0aW5nIG1heSBkZXN5bmNyb25pemUgdGhlIHVuZGVybHlpbmcgdmVjdG9yIERCLiBUaHVzLCBhIGZ1bGwgcmVpbXBvcnQgb2YgdGhlIEZBUSBrbm93bGVkZ2UgYmFzZSB2aWEgY29uc29sZSBjb21tYW5kIGlzIHJlcXVpcmVkIHRvIGd1YXJhbnRlZSBhIHZhbGlkIGRhdGFiYXNlIHN0YXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5DdXN0b20yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5SURzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2VJRHMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZXMiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPmludGVybmFsPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjIiPmV4dGVybmFsPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjMiPnB1YmxpYzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFwcHJvdmVkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OkRvY3VtZW50OjpTZWFyY2hSZXN0cmljdGlvbnMjIyMwMTAwLURlZmF1bHQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9jYXRpb24gZm9yIGRvY3VtZW50cyB0byBpbmNsdWRlIGZvciB0aGUgUkFHIHBpcGVsaW5lLiBUaGUgcGlwZWxpbmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFiZWwgZ2l2ZW4uIENoYW5nZXMgdG8gdGhpcyBzZXR0aW5nIGRvIG5vdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgdW5kZXJseWluZyB2ZWN0b3IgREIuIFBsZWFzZSBhcHByb3ByaWF0ZWx5IGltcG9ydC9wdXJnZS9yZWltcG9ydCB2aWEgY29uc29sZSBjb21tYW5kIGZvciB0aGVzZSBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5kZWZhdWx0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5ld2VyVGhhbkRheXMiPjMwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG9jdW1lbnRQYXRoIj4vb3B0L290b2JvL3Zhci9haS9kb2M8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RG9jdW1lbnQ6OlNlYXJjaFJlc3RyaWN0aW9ucyMjIzAyMDAtQ3VzdG9tMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2NhdGlvbiBmb3IgZG9jdW1lbnRzIHRvIGluY2x1ZGUgZm9yIHRoZSBSQUcgcGlwZWxpbmUuIFRoZSBwaXBlbGluZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsYWJlbCBnaXZlbi4gQ2hhbmdlcyB0byB0aGlzIHNldHRpbmcgZG8gbm90IGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSB1bmRlcmx5aW5nIHZlY3RvciBEQi4gUGxlYXNlIGFwcHJvcHJpYXRlbHkgaW1wb3J0L3B1cmdlL3JlaW1wb3J0IHZpYSBjb25zb2xlIGNvbW1hbmQgZm9yIHRoZXNlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkN1c3RvbTE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmV3ZXJUaGFuRGF5cyI+MzAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEb2N1bWVudFBhdGgiPi9vcHQvb3RvYm8vdmFyL2FpL2RvYzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpEb2N1bWVudDo6U2VhcmNoUmVzdHJpY3Rpb25zIyMjMDIwMC1DdXN0b20yIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvY2F0aW9uIGZvciBkb2N1bWVudHMgdG8gaW5jbHVkZSBmb3IgdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGlzIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIGdpdmVuLiBDaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBkbyBub3QgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIHVuZGVybHlpbmcgdmVjdG9yIERCLiBQbGVhc2UgYXBwcm9wcmlhdGVseSBpbXBvcnQvcHVyZ2UvcmVpbXBvcnQgdmlhIGNvbnNvbGUgY29tbWFuZCBmb3IgdGhlc2UgY2hhbmdlcyB0byB0YWtlIGVmZmVjdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q3VzdG9tMjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOZXdlclRoYW5EYXlzIj4zMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvY3VtZW50UGF0aCI+L29wdC9vdG9iby92YXIvYWkvZG9jPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OkluZ2VzdE1hbnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW52b2tlciBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5Jbmdlc3RNYW55PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5Jbmdlc3RNYW55PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OkdldEFuc3dlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbnZva2VyIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkdldEFuc3dlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+R2V0QW5zd2VyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OlB1cmdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGludm9rZXIgbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpJbnZva2VyOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHVyZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPlB1cmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OlF1ZXJ5RW1iZWRkaW5ncyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbnZva2VyIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlF1ZXJ5RW1iZWRkaW5nczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+UXVlcnlFbWJlZGRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkR5bmFtaWNGaWVsZHM6OkRyaXZlciMjI1RleHRBcmVhQUkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pY0ZpZWxkIGJhY2tlbmQgcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RHluYW1pY0ZpZWxkczo6RHJpdmVyUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpc3BsYXlOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlRleHRhcmVhIEFJPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6VGV4dEFyZWFBSTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkR5bmFtaWNGaWVsZFRleHRBcmVhQUk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpc2FibGVkQWRkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3RUeXBlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5BcnRpY2xlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRGFlbW9uOjpTY2hlZHVsZXJDcm9uVGFza01hbmFnZXI6OlRhc2sjIyNSZWJ1aWxkT3RvYm9BSUluZGV4IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiIENvbmZpZ0xldmVsPSIxMDAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlYnVpbGRzIHRoZSBPVE9CTyBBSSBWZWN0b3IgREIgaW5kZXguPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5EYWVtb246OlNjaGVkdWxlckNyb25UYXNrTWFuYWdlcjo6VGFzazwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXNrTmFtZSI+UmVidWlsZE90b2JvQUlJbmRleDwvSXRlbT4KICAgICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgICAgICAgICBydW4gam9iIG9uY2UgYXQgMDE6MDAgQU0gaW4gdGhlIE1vcm5pbmcKICAgICAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTY2hlZHVsZSI+MCAxICogKiAqPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OkltcG9ydDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRnVuY3Rpb24iPkV4ZWN1dGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1heGltdW1QYXJhbGxlbEluc3RhbmNlcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGFyYW1zIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPi0tdGFyZ2V0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT50ZmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPi0tcmVpbXBvcnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzgwMDAtUG9wdWxhdGVPVE9CT0FJRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkV2ZW50IG1vZHVsZSByZWdpc3RyYXRpb24uIEZvciBhc3luY2hyb25vdXMgTExNIHJlc3BvbnNlIGNvbGxlY3Rpb24sIHlvdSBjYW4gZGVmaW5lIHRyaWdnZXIgZXZlbnRzIChlLmcuLCBUaWNrZXRDcmVhdGUpLiBFbWl0dGVkIGV2ZW50cyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgdGhpcyBzdHJpbmcgdXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb247IG11bHRpcGxlIGV2ZW50cyBtYXkgYmUgc3BlY2lmaWVkLCBzZXBhcmF0ZWQgYnkgYW4gYXJiaXRyYXJ5IGRlbGltaXRlci4gVGhlIFRyYW5zaXRpb24gYXR0cmlidXRlIGRldGVybWluZXMgd2hlbiB0aGUgZXZlbnQgaXMgZXhlY3V0ZWQ6IGVpdGhlciBleGFjdGx5IHdoZW4gaXQgaXMgZW1pdHRlZCAoMCkgb3IgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXJlIGFjdGlvbiAoMSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6OlBvcHVsYXRlT1RPQk9BSUR5bmFtaWNGaWVsZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPkFydGljbGVDcmVhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjODEwMC1Qb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gRm9yIGFzeW5jaHJvbm91cyBMTE0gcmVzcG9uc2UgY29sbGVjdGlvbiwgeW91IGNhbiBkZWZpbmUgdHJpZ2dlciBldmVudHMgKGUuZy4sIFRpY2tldENyZWF0ZSkuIEVtaXR0ZWQgZXZlbnRzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGlzIHN0cmluZyB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbjsgbXVsdGlwbGUgZXZlbnRzIG1heSBiZSBzcGVjaWZpZWQsIHNlcGFyYXRlZCBieSBhbiBhcmJpdHJhcnkgZGVsaW1pdGVyLiBUaGUgVHJhbnNpdGlvbiBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGVuIHRoZSBldmVudCBpcyBleGVjdXRlZDogZWl0aGVyIGV4YWN0bHkgd2hlbiBpdCBpcyBlbWl0dGVkICgwKSBvciBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpcmUgYWN0aW9uICgxKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkV2ZW50OjpUaWNrZXQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpFdmVudDo6UG9wdWxhdGVPVE9CT0FJRHluYW1pY0ZpZWxkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+VGlja2V0UXVldWVVcGRhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjODIwMC1Qb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gRm9yIGFzeW5jaHJvbm91cyBMTE0gcmVzcG9uc2UgY29sbGVjdGlvbiwgeW91IGNhbiBkZWZpbmUgdHJpZ2dlciBldmVudHMgKGUuZy4sIFRpY2tldENyZWF0ZSkuIEVtaXR0ZWQgZXZlbnRzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGlzIHN0cmluZyB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbjsgbXVsdGlwbGUgZXZlbnRzIG1heSBiZSBzcGVjaWZpZWQsIHNlcGFyYXRlZCBieSBhbiBhcmJpdHJhcnkgZGVsaW1pdGVyLiBUaGUgVHJhbnNpdGlvbiBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGVuIHRoZSBldmVudCBpcyBleGVjdXRlZDogZWl0aGVyIGV4YWN0bHkgd2hlbiBpdCBpcyBlbWl0dGVkICgwKSBvciBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpcmUgYWN0aW9uICgxKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkV2ZW50OjpUaWNrZXQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpFdmVudDo6UG9wdWxhdGVPVE9CT0FJRHluYW1pY0ZpZWxkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+VGlja2V0UXVldWVVcGRhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjODMwMC1PVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gV2hlbmV2ZXIgYSBUaWNrZXQgaXMgY3JlYXRlZCBvciB1cGRhdGVkLCBlLmcuIGJ5IHJlY2VpdmluZyBuZXcgYXJ0aWNsZXMgb3IgY2hhbmdpbmcgc3RhdGUsIGl0IHNob3VsZCBiZSByZWltcG9ydGVkIGludG8gdGhlIHZlY3RvciBEQi4gVGhlcmVmb3JlLCB0aGlzIHNldHRpbmcgZGVzY3JpYmVzIHdoaWNoIGludGVybmFsIE9UT0JPIGV2ZW50cyBzaG91bGQgdHJpZ2dlciBhIHJlLWNoZWNrIG9mIHRoZSBTZWFyY2hSZXN0cmljdGlvbnMuIEZvciBhIGxpc3Qgb2Ygc3RhbmRhcmQsIFRpY2tldC1yZWxhdGVkIE9UT0JPIGV2ZW50cywgcGxlYXNlIGNvbnN1bHQgdGhlIERldmVsb3BlciBNYW51YWwuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6Ok9UT0JPQUlJbmNyZW1lbnRhbFN5bmNocm9uaXphdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPlRpY2tldENyZWF0ZXxUaWNrZXQuKlVwZGF0ZXxUaWNrZXRNZXJnZXxUaWNrZXREZWxldGV8QXJ0aWNsZUNyZWF0ZXxBcnRpY2xlVXBkYXRlfEFydGljbGVFZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGQVE6OkV2ZW50TW9kdWxlUG9zdCMjIzgzMDAtT1RPQk9BSUluY3JlbWVudGFsU3luY2hyb25pemF0aW9uIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkV2ZW50IG1vZHVsZSByZWdpc3RyYXRpb24uIFdoZW5ldmVyIGFuIEZBUSBpdGVtIGlzIGNyZWF0ZWQgb3IgdXBkYXRlZCwgaXQgc2hvdWxkIGJlIHJlaW1wb3J0ZWQgaW50byB0aGUgdmVjdG9yIERCLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RXZlbnQ6OlRpY2tldDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpGQVE6OkV2ZW50OjpPVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij5GQVFDcmVhdGV8RkFRVXBkYXRlfEZBUURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluRHluYW1pY0ZpZWxkVGV4dEFyZWFBSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgbW9kdWxlIGlzIHBhcnQgb2YgdGhlIGFkbWluIGFyZWEgb2YgT1RPQk8uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBGaWVsZHMgVGV4dEFyZWFBSSBCYWNrZW5kIEdVSTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pbkR5bmFtaWNGaWVsZFRleHRBcmVhQUkjIyMwMDMtT1RPQk9BSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5BZG1pbi5EeW5hbWljRmllbGRUZXh0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFkbWluLlN5c0NvbmZpZy5FbnRpdHkuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpBbnN3ZXJUZW1wbGF0ZVJlcXVlc3RUeXBlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZSBpZiBvcGVuaW5nIHRoZSBhbnN3ZXIgdGVtcGxhdGUgb24gYW4gYXJ0aWNsZSB3aGljaCBoYXMgbm8gQUkgYW5zd2VyIHByZS1mZXRjaGVkIHNob3VsZCBibG9jayAoc3luY2hyb25vdXMpIG9yIHNob3cgYSBwbGFjZWhvbGRlciAoYXN5bmNocm9ub3VzKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iQXN5bmNocm9ub3VzIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iU3luY2hyb25vdXMiIFRyYW5zbGF0YWJsZT0iMSI+U3luY2hyb25vdXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IkFzeW5jaHJvbm91cyIgVHJhbnNsYXRhYmxlPSIxIj5Bc3luY2hyb25vdXM8L0l0ZW0+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6UGxhY2Vob2xkZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIGEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgYXMgYSBwbGFjZWhvbGRlciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgQUkgYW5zd2VyLiBPbmx5IHZpc2libGUgaWYgQUkgYW5zd2VyIGdlbmVyYXRpb24gaXMgYXN5bmNocm9ub3VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIj48IVtDREFUQVs8fCAgICAgICAgQUkgYW5zd2VyIGdlbmVyYXRpb24gaW4gcHJvZ3Jlc3MuIFBsZWFzZSByZW9wZW4gd2luZG93IHRvIGNoZWNrIGFnYWluLi4uICAgICB8Pl1dPjwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkeW5hbWljIGZpZWxkIGluIHdoaWNoIGFuIE9UT0JPQUkgYW5zd2VyIGlzIHN0b3JlZC4gSXQgbWF5IGJlIGluY2x1ZGVkIGluIGEgcmVzcG9uc2UgdGVtcGxhdGUuIElmIGNoYW5nZWQsIHRoZSBmaWVsZCBoYXMgdG8gYmUgY3JlYXRlZCBtYW51YWxseS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+T1RPQk9BSTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSTo6RW1wdHlBbnN3ZXJUb2tlbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BbiBMTE0gbWF5IG5vdCBiZSBjYXBhYmxlIG9mIG91dHB1dHRpbmcgYW4gZW1wdHkgc3RyaW5nLiBBZGp1c3QgdGhlIHByb21wdCB0byBvdXRwdXQgdGhpcyB0b2tlbiBhcyBzdWJzdGl0dXRlIGZvciBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZC4gSWYgdGhlIGR5bmFtaWMgZmllbGQgcmVjZWl2ZXMgdGhpcyB0b2tlbiwgdGhlIHJlc3VsdGluZyBPVE9CT0FJIGFuc3dlciB0ZW1wbGF0ZSB3aWxsIGhvbGQgbm8gYW5zd2VyIHN0cmluZy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+Tk9fT1VUUFVUPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpPdmVyd3JpdGVQcmV2aW91c1Jlc3BvbnNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkJ5IGFjdGl2YXRpbmcgdGhpcyBvcHRpb24sIHByZXZpb3VzIEFJIGFuc3dlcnMgZmV0Y2hlZCBmb3IgYW4gYXJ0aWNsZSBhcmUgaWdub3JlZCBhbmQgYSBuZXcgcmVxdWVzdCB0byB0aGUgTExNIGlzIHN0YXJ0ZWQuIFRoaXMgaXMgb25seSB1c2VmdWwgaW4gZGV2ZWxvcG1lbnQgc2V0dGluZ3MgYW5kIHNob3VsZCBub3QgYmUgYWN0aXZhdGVkIGluIHByb2R1Y3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6U3RyaXBTaWduYXR1cmVSZWdleCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DdXQgb2ZmIHRoaXMgYW5kIHN1YnNlcXVlbnQgbGluZXMgZnJvbSB0aWNrZXQgYXJ0aWNsZXMgZHVyaW5nIGluZ2VzdGlvbiBpbnRvIHRoZSBSQUcuIFRoZSB2YWx1ZSBpcyBhIFJlZ3VsYXIgRXhwcmVzc2lvbi4gVGhpcyBpcyB1c2VmdWwgdG8gc3RyaXAgcmVvY2N1cnJpbmcgc3VmZml4ZXMgbGlrZSBzaWduYXR1cmVzIGZyb20gYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPl4tLVxzKiQ8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpBbGxvd2VkQXJ0aWNsZVNlbmRlclR5cGVzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFycmF5IG9mIGFsbG93ZWQgQXJ0aWNsZVNlbmRlclR5cGVzIHRvIGJlIGluZGV4ZWQgYnkgT1RPQk8gQUkuIFZhbGlkIHZhbHVlcyBhcmUgJ2N1c3RvbWVyJywgJ2FnZW50JywgYW5kICdzeXN0ZW0nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPmFnZW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Y3VzdG9tZXI8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpPbmx5VmlzaWJsZUZvckN1c3RvbWVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFsbG93IG9ubHkgYXJ0aWNsZXMgdmlzaWJsZSBmb3IgY3VzdG9tZXJzIHRvIGJlIGluZ2VzdGVkIGJ5IHRoZSBSQUcuIElmIHNldCwgbm90ZXMgd2lsbCBiZSBleGNsdWRlZCBmcm9tIGluZ2VzdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OlF1ZXVlVG9SQUdNYXBwaW5nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRldGVybWluZSB0aGUgdXNlLWNhc2Ugc3BlY2lmaWMgUkFHIHBpcGVsaW5lIHRvIGludm9rZSBkZXBlbmRpbmcgb24gcXVldWUgbmFtZS4gSWYgbm8gUkFHIHBpcGVsaW5lIGlzIGNvbmZpZ3VyZWQgaGVyZSwgdGhlIGRlZmF1bHQgUkFHIGlzIHVzZWQuIFN1YnF1ZXVlcyBoYXZlIHRvIGJlIGxpc3RlZCB1c2luZyA6Oi1ub3RhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSYXciPkN1c3RvbTE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQb3N0bWFzdGVyIj5DdXN0b20yPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RGVmYXVsdFJBRyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXQgdGhlIGRlZmF1bHQgUkFHIHBpcGVsaW5lIHVzZWQgYXMgYSBmYWxsYmFjayBhbmQgaW4gdGhlIGRhc2hib2FyZCB3aWRnZXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPmRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjNDUyLUFJQ2hhdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5PcGVuIHRoZSBPVE9CTyBBSSBDaGF0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRab29tOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldE1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+QUkgQ2hhdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q2hhdCB3aXRoIEFJIGFib3V0IHRoaXMgdGlja2V0LjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudFRpY2tldEFJQ2hhdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50VGlja2V0QUlDaGF0O1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUG9wdXBUeXBlIj5UaWNrZXRBY3Rpb248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFRpY2tldEFJQ2hhdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5UaGlzIG1vZHVsZSBpcyBwYXJ0IG9mIHRoZSBhZ2VudCBhcmVhIG9mIE9UT0JPLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkFJIENoYXQgTGF1bmNoZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPCEtLQogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50VGlja2V0QUlDaGF0IyMjMDAzLU9UT0JPQUkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KLS0+CgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6TUNQOjpIb3N0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoZSBob3N0bmFtZSBvZiB0aGUgTUNQIHNlcnZlciwgZS5nLiwgJ21jcCcgd2hlbiBydW5uaW5nIGluIERvY2tlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+bWNwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6Q2hhdDo6RW5kcG9pbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhlIGVuZHBvaW50IHVybCBvZiB0aGUgQUkgY2hhdCBpbnRlcmZhY2UuIEl0IG1heSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgcGxhY2Vob2xkZXIge3tPVE9CT19TSUR9fSwge3tUSUNLRVRfSUR9fSwgYW5kIHt7QVJUSUNMRV9JRH19IHRvIHBhc3MgdGhlIGNvbnRleHQgdG8gdGhlIGNoYXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPmh0dHBzOi8ve3tGUUROfX06OTAwMC8/bW9kZWw9YmV0YS1nZW5lcmF0ZS0yJmFtcDtxPUhhbGxvJTJDJTIwbWVya2UlMjBkaXIlMjBkaWVzZSUyMERhdGVuJTNBJTIwe3tPVE9CT19TSUR9fXt7VElDS0VUX0lEfX17e0FSVElDTEVfSUR9fTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjVGlja2V0OjpBcnRpY2xlREZVcGRhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QXJ0aWNsZURGVXBkYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zOjpQaG9uZSMjIzIwMS1PdG9ib0FJIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYXZhaWxhYmxlIGFydGljbGUgYWN0aW9ucyBmb3IgUGhvbmUgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEFJQ2hhdCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRBSUNoYXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTAwMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZTo6QWN0aW9uczo6RW1haWwjIyMyMDEtT3RvYm9BSSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGF2YWlsYWJsZSBhcnRpY2xlIGFjdGlvbnMgZm9yIEVtYWlsIGFydGljbGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRab29tOjpBcnRpY2xlQWN0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRBSUNoYXQiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0QUlDaGF0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjEwMDE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjVGlja2V0OjpMaW5rIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjVGlja2V0OjpVbkxpbmsiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+VW5MaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI1RpY2tldDo6UXVlcnlFbWJlZGRpbmdzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlF1ZXJ5RW1iZWRkaW5nczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNUaWNrZXQ6OlRpY2tldEdldEFJIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlRpY2tldEdldEFJPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0VsYXN0aWNTZWFyY2g6OkZBUVNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5GQVFTZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkVsYXN0aWNTZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0VsYXN0aWNTZWFyY2g6OlRpY2tldFNlYXJjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5UaWNrZXRTZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPkVsYXN0aWNTZWFyY2g8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20jIyNXaWRnZXRzIyMjMDQ1MC1BSVNpbWlsYXJUaWNrZXRzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFnZW50VGlja2V0Wm9vbSB3aWRnZXQgdGhhdCBkaXNwbGF5cyBzaW1pbGFyIHRpY2tldCBkYXRhIGluIHRoZSBzaWRlIGJhci4gVGhlIFJBRyBjb250YWluZXIgbXVzdCBiZSBhdmFpbGFibGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb208L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QUlTaW1pbGFyVGlja2V0czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb24iPlNpZGViYXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFzeW5jIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+Cg==</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/ArticleDFUpdate.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkFydGljbGVERlVwZGF0ZTsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldFVwZGF0ZQopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIFNjYWxhcjo6VXRpbCBxdyhyZWZ0eXBlKTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZyBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpBcnRpY2xlREZVcGRhdGUgLSBHZW5lcmljSW50ZXJmYWNlIEFydGljbGUgRHluYW1pYyBGaWVsZCBVcGRhdGUKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEM8S2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOz4uCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSBibGVzcyB7fSwgJFR5cGU7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KCBEZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQgKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICAkU2VsZi0+e0NvbmZpZ30gICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6QXJ0aWNsZURGVXBkYXRlJyk7CiAgICAkU2VsZi0+e09wZXJhdGlvbn0gPSAkUGFyYW17T3BlcmF0aW9ufTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBSdW4oKQoKcGVyZm9ybSBVcGRhdGVBcnRpY2xlRHluYW1pY0ZpZWxkIE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiB0aGUgdXBkYXRlZCBUaWNrZXRJRCBhbmQKdGhlIHVwZGF0ZWQgQXJ0aWNsZUlELgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgICAgID0+ICdzb21lIGFnZW50IGxvZ2luJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgQ3VzdG9tZXJVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCgogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAnMjAwNDA0MDUxMDQ0MDQ4NScsCgogICAgICAgICAgICBBcnRpY2xlSUQgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIG90aGVyd2lzZSBsYXN0IGN1c3RvbWVyIGFydGljbGUgaWQgaXMgdXNlZAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ3NvbWUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgID0+ICRWYWx1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIHR5cGUgZGVwZW5kcyBvbiB0aGUgZHluYW1pYyBmaWVsZAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICMgLi4uCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0ICBJRCBudW1iZXIgaW4gT1RPQk8gKGhlbHAgZGVzayBzeXN0ZW0pCiAgICAgICAgICAgIEFydGljbGVJRCAgID0+IDQzLCAgICAgICAgICAgICAgICAgICAgICAjIEFydGljbGUgSUQgbnVtYmVyIGluIE9UT0JPIChoZWxwIGRlc2sgc3lzdGVtKQogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+SW5pdCgKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQXJ0aWNsZURGVXBkYXRlLkVtcHR5UmVxdWVzdCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBUaGUgcmVxdWVzdCBkYXRhIGlzIGludmFsaWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSAmJiAhJFBhcmFte0RhdGF9LT57VGlja2V0TnVtYmVyfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJBcnRpY2xlREZVcGRhdGU6IFRpY2tldElEIG9yIFRpY2tldE51bWJlciBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1VzZXJMb2dpbn0gKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57UGFzc3dvcmR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogUGFzc3dvcmQgb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYXV0aGVudGljYXRlIHVzZXIKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggISRVc2VySUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuQXV0aEZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGNoZWNrIFRpY2tldElECiAgICBteSAkVGlja2V0SUQ7CiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUaWNrZXRJRCA9ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfTsKICAgIH0KCiAgICBpZiAoICEoJFRpY2tldElEKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogVXNlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgdGlja2V0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXREYXRhICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJBcnRpY2xlREZVcGRhdGU6IFVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRpY2tldCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBiYXNpYyBuZWVkZWQgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3M7CiAgICBpZiAoICRVc2VyVHlwZSBlcSAnVXNlcicgKSB7CgogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAncncnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdydycsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICApOwogICAgfQogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogVXNlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgdGlja2V0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkcyA9ICRQYXJhbXtEYXRhfS0+e0R5bmFtaWNGaWVsZH07CiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZHMpICkgewoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkcykgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREeW5hbWljRmllbGRzID0gWyREeW5hbWljRmllbGRzXTsKICAgIH0KCiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZHMpICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJBcnRpY2xlREZVcGRhdGU6IER5bmFtaWNGaWVsZCBFbGVtZW50IGlzIGVtcHR5LiIsCiAgICAgICAgKTsKICAgIH0KCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoICREeW5hbWljRmllbGRzLT5AKiApIHsKCiAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZCkgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkRHluYW1pY0ZpZWxkLT57TmFtZX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nIGNoaWxkIGtleSAnTmFtZScuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggISREeW5hbWljRmllbGQtPntWYWx1ZX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nIGNoaWxkIGtleSAnVmFsdWUnLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gdGhlIERGIHVwZGF0ZQoKICAgIG15ICRBcnRpY2xlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgbXkgJEJhY2tlbmRPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICBteSAkQXJ0aWNsZUlEID0gJFBhcmFte0RhdGF9LT57QXJ0aWNsZUlEfTsKICAgIGlmICggISRBcnRpY2xlSUQgKSB7CgogICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgT25seUxhc3QgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKEBBcnRpY2xlcykgewogICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVzWzBde0FydGljbGVJRH07CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRBcnRpY2xlSUQgKSB7CgogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQXJ0aWNsZURGVXBkYXRlLk5vQ3VzdG9tZXJBcnRpY2xlJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdUaGlzIHRpY2tldCBkb2VzIG5vdCBoYXZlIGEgY3VzdG9tZXIgYXJ0aWNsZS4nLAogICAgICAgICk7CiAgICB9CgogICAgJFJlc3VsdCA9IDE7CgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCAkRHluYW1pY0ZpZWxkcy0+QCogKSB7CgogICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICk7CgogICAgICAgIG15ICRTdWNjZXNzID0gJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywgICAgICAgIyBjb21wbGV0ZSBjb25maWcgb2YgdGhlIER5bmFtaWNGaWVsZAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEFydGljbGVJRCwgICAgICAgICAgICAgICAgIyBJRCBvZiB0aGUgY3VycmVudCBvYmplY3QgdGhhdCB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbXVzdCBiZSBsaW5rZWQgdG8sIGUuIGcuIFRpY2tldElECiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57VmFsdWV9LCAgICAjIFZhbHVlIHRvIHN0b3JlLCBkZXBlbmRzIG9uIGJhY2tlbmQgdHlwZQogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgRG9Xcml0ZSAgICAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgdG8gT1RPQk9BSSBERgogICAgICAgICk7CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5hYmxlIHRvIHNldCB2YWx1ZSAnIgogICAgICAgICAgICAgICAgICAgIC4gJER5bmFtaWNGaWVsZC0+e1ZhbHVlfQogICAgICAgICAgICAgICAgICAgIC4gIicgZm9yIERGICIKICAgICAgICAgICAgICAgICAgICAuICREeW5hbWljRmllbGQtPntOYW1lfQogICAgICAgICAgICAgICAgICAgIC4gIiBvbiBBcnRpY2xlSUQgJEFydGljbGVJRCB3aXRoIFRpY2tldElEICRUaWNrZXRJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkUmVzdWx0ID0gJFN1Y2Nlc3MgaWYgJFJlc3VsdDsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gJFJlc3VsdCwKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIFN1Y2Nlc3MgICA9PiAxLAogICAgICAgIH0KICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/TicketGetAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldEdldEFJOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkNvbW1vbgopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1iZWdpbiBzdG9wd29yZHMKCk9TUyBhaQoKPWVuZCBzdG9wd29yZHMKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRHZXRBSSAtIEdlbmVyaWNJbnRlcmZhY2UgVGlja2V0IEdldCBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiR290IG5vICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnBlcmZvcm0gVGlja2V0R2V0IE9wZXJhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBhYmxlIHRvIHJldHVybgpvbmUgb3IgbW9yZSB0aWNrZXQgZW50cmllcyBpbiBvbmUgY2FsbC4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBVc2VyTG9naW4gICAgICAgICAgICA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlckxvZ2luIG9yIEN1c3RvbWVyVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICByZXF1aXJlZAogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiAgICA9PiAnc29tZSBjdXN0b21lciBsb2dpbicsCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICAgICAgICAgICAgID0+ICdzb21lIHBhc3N3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICczMiwzMycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlZCwgY291bGQgYmUgY29tYSBzZXBhcmF0ZWQgSURzIG9yIGFuIEFycmF5CiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCwgMCBhcyBkZWZhdWx0LiBJbmRpY2F0ZSBpZiBEeW5hbWljIEZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHNob3VsZCBiZSBpbmNsdWRlZCBvciBub3Qgb24gdGhlIHRpY2tldCBjb250ZW50LgogICAgICAgICAgICBFeHRlbmRlZCAgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwsIDAgYXMgZGVmYXVsdAogICAgICAgICAgICBBbGxBcnRpY2xlcyAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwsIDAgYXMgZGVmYXVsdC4gU2V0IGFzIDEgd2lsbCBpbmNsdWRlIGFydGljbGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgZm9yIHRpY2tldHMuCiAgICAgICAgICAgIEFydGljbGVTZW5kZXJUeXBlICAgID0+IFsgJEFydGljbGVTZW5kZXJUeXBlMSwgJEFydGljbGVTZW5kZXJUeXBlMiBdLCAgIyBPcHRpb25hbCwgb25seSByZXF1ZXN0ZWQgYXJ0aWNsZSBzZW5kZXIgdHlwZXMKICAgICAgICAgICAgQXJ0aWNsZU9yZGVyICAgICAgICAgPT4gJ0RFU0MnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFsLCBERVNDLEFTQyAtIGRlZmF1bHQgaXMgQVNDCiAgICAgICAgICAgIEFydGljbGVMaW1pdCAgICAgICAgID0+IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbAogICAgICAgICAgICBBdHRhY2htZW50cyAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwsIDAgYXMgZGVmYXVsdC4gSWYgaXQncyBzZXQgd2l0aCB0aGUgdmFsdWUgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGF0dGFjaG1lbnRzIGZvciBhcnRpY2xlcyB3aWxsIGJlIGluY2x1ZGVkIG9uIHRpY2tldCBkYXRhCiAgICAgICAgICAgIEdldEF0dGFjaG1lbnRDb250ZW50cyA9IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCwgMSBhcyBkZWZhdWx0LiAwfDEsCiAgICAgICAgICAgIEhUTUxCb2R5QXNBdHRhY2htZW50ID0+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCwgSWYgZW5hYmxlZCB0aGUgSFRNTCBib2R5IHZlcnNpb24gb2YgZWFjaCBhcnRpY2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBpcyBhZGRlZCB0byB0aGUgYXR0YWNobWVudHMgbGlzdAojIFJvdGhlciBPU1MgLyBvdG9iby1haQogICAgICAgICAgICBMaW5rcyAgICAgICAgICAgICAgICA9PiB1bmRlZiB8IDEgfCBbICdUaWNrZXQnLCAnRkFRJywgJ0NvbmZpZ0l0ZW0nXQojIEVPIG90b2JvLWFpCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciAgICAgICA9PiAnMjAxMDEwMjcwMDAwMDEnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICA9PiAnc29tZSB0aXRsZScsCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgPT4gJ3NvbWUgc3RhdGUnLAogICAgICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgU3RhdGVUeXBlICAgICAgICAgID0+ICdzb21lIHN0YXRlIHR5cGUnLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICAgICAgICA9PiAnc29tZSBwcmlvcml0eScsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBMb2NrICAgICAgICAgICAgICAgPT4gJ2xvY2snLAogICAgICAgICAgICAgICAgICAgIExvY2tJRCAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgICAgICAgICAgID0+ICdzb21lIHF1ZXVlJywKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICAgICA9PiAnY3VzdG9tZXJfaWRfMTIzJywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCAgICAgPT4gJ2N1c3RvbWVyX3VzZXJfaWRfMTIzJywKICAgICAgICAgICAgICAgICAgICBPd25lciAgICAgICAgICAgICAgPT4gJ3NvbWVfb3duZXJfbG9naW4nLAogICAgICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgID0+ICdzb21lIHRpY2tldCB0eXBlJywKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIFNMQSAgICAgICAgICAgICAgICA9PiAnc29tZSBzbGEnLAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgU2VydmljZSAgICAgICAgICAgID0+ICdzb21lIHNlcnZpY2UnLAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgICAgICAgID0+ICdzb21lX3Jlc3BvbnNpYmxlX2xvZ2luJywKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIEFnZSAgICAgICAgICAgICAgICA9PiAzNDU2LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgICAgICAgICAgICA9PiAnMjAxMC0xMC0yNyAyMDoxNTowMCcKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIENoYW5nZWQgICAgICAgICAgICA9PiAnMjAxMC0xMC0yNyAyMDoxNToxNScsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBBcmNoaXZlRmxhZyAgICAgICAgPT4gJ3knLAogICAgICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICA9PiAxMjMsCgogICAgICAgICAgICAgICAgICAgICMgSWYgRHluYW1pY0ZpZWxkcyA9PiAxIHdhcyBwYXNzZWQsIHlvdSdsbCBnZXQgYW4gZW50cnkgbGlrZSB0aGlzIGZvciBlYWNoIGR5bmFtaWMgZmllbGQ6CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJ3NvbWUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnc29tZSB2YWx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKCiAgICAgICAgICAgICAgICAgICAgIyAodGltZSBzdGFtcHMgb2YgZXhwZWN0ZWQgZXNjYWxhdGlvbnMpCiAgICAgICAgICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZSAgICAgICAgICAgKHVuaXggdGltZSBzdGFtcCBvZiByZXNwb25zZSB0aW1lIGVzY2FsYXRpb24pCiAgICAgICAgICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWUgICAgICAgICAgICAgKHVuaXggdGltZSBzdGFtcCBvZiB1cGRhdGUgdGltZSBlc2NhbGF0aW9uKQogICAgICAgICAgICAgICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWUgICAgICAgICAgICh1bml4IHRpbWUgc3RhbXAgb2Ygc29sdXRpb24gdGltZSBlc2NhbGF0aW9uKQoKICAgICAgICAgICAgICAgICAgICAjIChnZW5lcmFsIGVzY2FsYXRpb24gaW5mbyBvZiBuZWFyZXN0IGVzY2FsYXRpb24gdHlwZSkKICAgICAgICAgICAgICAgICAgICBFc2NhbGF0aW9uRGVzdGluYXRpb25JbiAgICAgICAgICAoZXNjYWxhdGlvbiBpbiBlLiBnLiAxaCA0bSkKICAgICAgICAgICAgICAgICAgICBFc2NhbGF0aW9uRGVzdGluYXRpb25UaW1lICAgICAgICAoZGF0ZSBvZiBlc2NhbGF0aW9uIGluIHVuaXggdGltZSwgZS4gZy4gNzIxOTMyOTIpCiAgICAgICAgICAgICAgICAgICAgRXNjYWxhdGlvbkRlc3RpbmF0aW9uRGF0ZSAgICAgICAgKGRhdGUgb2YgZXNjYWxhdGlvbiwgZS4gZy4gIjIwMDktMDItMTQgMTg6MDA6MDAiKQogICAgICAgICAgICAgICAgICAgIEVzY2FsYXRpb25UaW1lV29ya2luZ1RpbWUgICAgICAgIChzZWNvbmRzIG9mIHdvcmtpbmcvc2VydmljZSB0aW1lIHRpbGwgZXNjYWxhdGlvbiwgZS4gZy4gIjE4MDAiKQogICAgICAgICAgICAgICAgICAgIEVzY2FsYXRpb25UaW1lICAgICAgICAgICAgICAgICAgIChzZWNvbmRzIHRvdGFsIHRpbGwgZXNjYWxhdGlvbiBvZiBuZWFyZXN0IGVzY2FsYXRpb24gdGltZSB0eXBlIC0gcmVzcG9uc2UsIHVwZGF0ZSBvciBzb2x1dGlvbiB0aW1lLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgICMgKGRldGFpbGVkIGVzY2FsYXRpb24gaW5mbyBhYm91dCBmaXJzdCByZXNwb25zZSwgdXBkYXRlIGFuZCBzb2x1dGlvbiB0aW1lKQogICAgICAgICAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lRXNjYWxhdGlvbiAgICAgIChpZiB0cnVlLCB0aWNrZXQgaXMgZXNjYWxhdGVkKQogICAgICAgICAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lTm90aWZpY2F0aW9uICAgIChpZiB0cnVlLCBub3RpZnkgLSB4JSBvZiBlc2NhbGF0aW9uIGhhcyByZWFjaGVkKQogICAgICAgICAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lRGVzdGluYXRpb25UaW1lIChkYXRlIG9mIGVzY2FsYXRpb24gaW4gdW5peCB0aW1lLCBlLiBnLiA3MjE5MzI5MikKICAgICAgICAgICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZURlc3RpbmF0aW9uRGF0ZSAoZGF0ZSBvZiBlc2NhbGF0aW9uLCBlLiBnLiAiMjAwOS0wMi0xNCAxODowMDowMCIpCiAgICAgICAgICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZSAgICAgKHNlY29uZHMgb2Ygd29ya2luZy9zZXJ2aWNlIHRpbWUgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMTgwMCIpCiAgICAgICAgICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICAgICAgICAgICAgICAgKHNlY29uZHMgdG90YWwgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgIFVwZGF0ZVRpbWVFc2NhbGF0aW9uICAgICAgICAgICAgIChpZiB0cnVlLCB0aWNrZXQgaXMgZXNjYWxhdGVkKQogICAgICAgICAgICAgICAgICAgIFVwZGF0ZVRpbWVOb3RpZmljYXRpb24gICAgICAgICAgIChpZiB0cnVlLCBub3RpZnkgLSB4JSBvZiBlc2NhbGF0aW9uIGhhcyByZWFjaGVkKQogICAgICAgICAgICAgICAgICAgIFVwZGF0ZVRpbWVEZXN0aW5hdGlvblRpbWUgICAgICAgIChkYXRlIG9mIGVzY2FsYXRpb24gaW4gdW5peCB0aW1lLCBlLiBnLiA3MjE5MzI5MikKICAgICAgICAgICAgICAgICAgICBVcGRhdGVUaW1lRGVzdGluYXRpb25EYXRlICAgICAgICAoZGF0ZSBvZiBlc2NhbGF0aW9uLCBlLiBnLiAiMjAwOS0wMi0xNCAxODowMDowMCIpCiAgICAgICAgICAgICAgICAgICAgVXBkYXRlVGltZVdvcmtpbmdUaW1lICAgICAgICAgICAgKHNlY29uZHMgb2Ygd29ya2luZy9zZXJ2aWNlIHRpbWUgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMTgwMCIpCiAgICAgICAgICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICAgICAgICAgICAgICAgKHNlY29uZHMgdG90YWwgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uVGltZUVzY2FsYXRpb24gICAgICAgICAgIChpZiB0cnVlLCB0aWNrZXQgaXMgZXNjYWxhdGVkKQogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uVGltZU5vdGlmaWNhdGlvbiAgICAgICAgIChpZiB0cnVlLCBub3RpZnkgLSB4JSBvZiBlc2NhbGF0aW9uIGhhcyByZWFjaGVkKQogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uVGltZURlc3RpbmF0aW9uVGltZSAgICAgIChkYXRlIG9mIGVzY2FsYXRpb24gaW4gdW5peCB0aW1lLCBlLiBnLiA3MjE5MzI5MikKICAgICAgICAgICAgICAgICAgICBTb2x1dGlvblRpbWVEZXN0aW5hdGlvbkRhdGUgICAgICAoZGF0ZSBvZiBlc2NhbGF0aW9uLCBlLiBnLiAiMjAwOS0wMi0xNCAxODowMDowMCIpCiAgICAgICAgICAgICAgICAgICAgU29sdXRpb25UaW1lV29ya2luZ1RpbWUgICAgICAgICAgKHNlY29uZHMgb2Ygd29ya2luZy9zZXJ2aWNlIHRpbWUgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMTgwMCIpCiAgICAgICAgICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICAgICAgICAgICAgICAgKHNlY29uZHMgdG90YWwgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgICMgaWYgeW91IHVzZSBwYXJhbSBFeHRlbmRlZCB0byBnZXQgZXh0ZW5kZWQgdGlja2V0IGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICBGaXJzdFJlc3BvbnNlICAgICAgICAgICAgICAgICAgICh0aW1lc3RhbXAgb2YgZmlyc3QgcmVzcG9uc2UsIGZpcnN0IGNvbnRhY3Qgd2l0aCBjdXN0b21lcikKICAgICAgICAgICAgICAgICAgICBGaXJzdFJlc3BvbnNlSW5NaW4gICAgICAgICAgICAgIChtaW51dGVzIHRpbGwgZmlyc3QgcmVzcG9uc2UpCiAgICAgICAgICAgICAgICAgICAgRmlyc3RSZXNwb25zZURpZmZJbk1pbiAgICAgICAgICAobWludXRlcyB0aWxsIG9yIG92ZXIgZmlyc3QgcmVzcG9uc2UpCgogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uSW5NaW4gICAgICAgICAgICAgICAgICAgKG1pbnV0ZXMgdGlsbCBzb2x1dGlvbiB0aW1lKQogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uRGlmZkluTWluICAgICAgICAgICAgICAgKG1pbnV0ZXMgdGlsbCBvciBvdmVyIHNvbHV0aW9uIHRpbWUpCgogICAgICAgICAgICAgICAgICAgIEZpcnN0TG9jayAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVzdGFtcCBvZiBmaXJzdCBsb2NrKQoKIyBSb3RoZXIgT1NTIC8gb3RvYm8tYWkKICAgICAgICAgICAgICAgICAgICBMaW5rcyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXJnZXRUeXBlIiA9PiAiVGlja2V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXJnZXRJRCIgICA9PiAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGlua1R5cGUiICAgPT4gIk5vcm1hbCIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiMgRU8gb3RvYm8tYWkKCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb2R5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBseVRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluUmVwbHlUbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZGVyVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlECiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbWVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNvbWluZ1RpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVVbml0CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBEeW5hbWljRmllbGRzID0+IDEgd2FzIHBhc3NlZCwgeW91J2xsIGdldCBhbiBlbnRyeSBsaWtlIHRoaXMgZm9yIGVhY2ggZHluYW1pYyBmaWVsZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAnc29tZSBuYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJ3NvbWUgdmFsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgID0+ICJ4eHh4IiwgICAgICMgYWN0dWFsIGF0dGFjaG1lbnQgY29udGVudHMsIGJhc2U2NCBlbmNvbmRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50QWx0ZXJuYXRpdmUgPT4gIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRJRCAgICAgICAgICA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgID0+ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlSUQgICAgICAgICAgICAgPT4gMzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICAgICAgICA9PiAiU3RkQXR0YWNobWVudC1UZXN0MS5wZGYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlc2l6ZVJhdyAgICAgICAgPT4gNDcyMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC4gLiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIy4gLiAuCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIy4gLiAuCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0R2V0LkF1dGhGYWlsJywKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldEdldDogQXV0aG9yaXphdGlvbiBmYWlsaW5nISIsCiAgICApIGlmICEkVXNlcklEOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldEdldC5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0R2V0OiAkTmVlZGVkIHBhcmFtZXRlciBpcyBtaXNzaW5nISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgbXkgJEVycm9yTWVzc2FnZSA9ICcnOwoKICAgICMgYWxsIG5lZWRlZCB2YXJpYWJsZXMKICAgIG15IEBUaWNrZXRJRHM7CiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSApICkgewogICAgICAgIEBUaWNrZXRJRHMgPSBzcGxpdCggLywvLCAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gKTsKICAgIH0KICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gKSApIHsKICAgICAgICBAVGlja2V0SURzID0gQHsgJFBhcmFte0RhdGF9LT57VGlja2V0SUR9IH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldEdldC5Xcm9uZ1N0cnVjdHVyZScsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0R2V0OiBTdHJ1Y3R1cmUgZm9yIFRpY2tldElEIGlzIG5vdCBjb3JyZWN0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEdldCB0aGUgbGlzdCBvZiBhcnRpY2xlIGR5bmFtaWMgZmllbGRzCiAgICBteSAkQXJ0aWNsZUR5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnQXJ0aWNsZScsCiAgICAgICAgUmVzdWx0VHlwZSA9PiAnSEFTSCcsCiAgICApOwoKICAgICMgQ3JhdGUgYSBsb29rdXAgbGlzdCBmb3IgZWFzeSBzZWFyY2gKICAgIG15ICVBcnRpY2xlRHluYW1pY0ZpZWxkTG9va3VwID0gcmV2ZXJzZSAleyRBcnRpY2xlRHluYW1pY0ZpZWxkTGlzdH07CgogICAgVElDS0VUOgogICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewoKICAgICAgICBteSAkQWNjZXNzID0gJFNlbGYtPkNoZWNrQWNjZXNzUGVybWlzc2lvbnMoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVXNlclR5cGUgPT4gJFVzZXJUeXBlLAogICAgICAgICk7CgogICAgICAgIG5leHQgVElDS0VUIGlmICRBY2Nlc3M7CgogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0R2V0LkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnVGlja2V0R2V0OiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhJywKICAgICAgICApOwogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRzICAgICAgICAgPSAkUGFyYW17RGF0YX0tPntEeW5hbWljRmllbGRzfSB8fCAwOwogICAgbXkgJEV4dGVuZGVkICAgICAgICAgICAgICA9ICRQYXJhbXtEYXRhfS0+e0V4dGVuZGVkfSAgICAgIHx8IDA7CiAgICBteSAkQWxsQXJ0aWNsZXMgICAgICAgICAgID0gJFBhcmFte0RhdGF9LT57QWxsQXJ0aWNsZXN9ICAgfHwgMDsKICAgIG15ICRBcnRpY2xlT3JkZXIgICAgICAgICAgPSAkUGFyYW17RGF0YX0tPntBcnRpY2xlT3JkZXJ9ICB8fCAnQVNDJzsKICAgIG15ICRBcnRpY2xlTGltaXQgICAgICAgICAgPSAkUGFyYW17RGF0YX0tPntBcnRpY2xlTGltaXR9ICB8fCAwOwogICAgbXkgJEF0dGFjaG1lbnRzICAgICAgICAgICA9ICRQYXJhbXtEYXRhfS0+e0F0dGFjaG1lbnRzfSAgIHx8IDA7CiAgICBteSAkR2V0QXR0YWNobWVudENvbnRlbnRzID0gJFBhcmFte0RhdGF9LT57R2V0QXR0YWNobWVudENvbnRlbnRzfSAvLyAxOwoKICAgIG15ICRSZXR1cm5EYXRhID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH07CiAgICBteSBASXRlbTsKCiAgICBteSAkQXJ0aWNsZVNlbmRlclR5cGUgPSAnJzsKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPntBcnRpY2xlU2VuZGVyVHlwZX0gKSApIHsKICAgICAgICAkQXJ0aWNsZVNlbmRlclR5cGUgPSAkUGFyYW17RGF0YX0tPntBcnRpY2xlU2VuZGVyVHlwZX07CiAgICB9CiAgICBlbHNpZiAoIElzU3RyaW5nV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+e0FydGljbGVTZW5kZXJUeXBlfSApICkgewogICAgICAgICRBcnRpY2xlU2VuZGVyVHlwZSA9IFsgJFBhcmFte0RhdGF9LT57QXJ0aWNsZVNlbmRlclR5cGV9IF07CiAgICB9CgogICAgIyBCeSBkZWZhdWx0LCBkbyBub3QgaW5jbHVkZSBIVE1MIGJvZHkgYXMgYXR0YWNobWVudCwgdW5sZXNzIGl0IGlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgogICAgbXkgJUV4Y2x1ZGVBdHRhY2htZW50cyA9ICgKICAgICAgICBFeGNsdWRlUGxhaW5UZXh0ID0+IDEsCiAgICAgICAgRXhjbHVkZUhUTUxCb2R5ICA9PiAkUGFyYW17RGF0YX0tPntIVE1MQm9keUFzQXR0YWNobWVudH0gPyAwIDogMSwKICAgICk7CgogICAgIyBzdGFydCB0aWNrZXQgbG9vcAogICAgVElDS0VUOgogICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgIG15ICRUaWNrZXRBcnRpY2xlTGltaXQgPSAkQXJ0aWNsZUxpbWl0OwoKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIGdldCB0aGUgVGlja2V0IGVudHJ5CiAgICAgICAgbXkgJVRpY2tldEVudHJ5UmF3ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAkRHluYW1pY0ZpZWxkcywKICAgICAgICAgICAgRXh0ZW5kZWQgICAgICA9PiAkRXh0ZW5kZWQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXRFbnRyeVJhdyApICkgewoKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSA9ICdDb3VsZCBub3QgZ2V0IFRpY2tldCBkYXRhJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldEdldDo6UnVuKCknOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0R2V0Lk5vdFZhbGlkVGlja2V0SUQnLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRHZXQ6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJVRpY2tldEVudHJ5OwogICAgICAgIG15IEBEeW5hbWljRmllbGRzOwoKICAgICAgICAjIHJlbW92ZSBhbGwgZHluYW1pYyBmaWVsZHMgZnJvbSBtYWluIHRpY2tldCBoYXNoIGFuZCBzZXQgdGhlbSBpbnRvIGFuIGFycmF5LgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlSYXcgKSB7CgogICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgPX4gbXtcQSBEeW5hbWljRmllbGRfKC4qKSBcen1tc3ggKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRzLCB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJDEsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRpY2tldEVudHJ5UmF3eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkVGlja2V0RW50cnl7JEF0dHJpYnV0ZX0gPSAkVGlja2V0RW50cnlSYXd7JEF0dHJpYnV0ZX07CiAgICAgICAgfQoKICAgICAgICAkVGlja2V0RW50cnl7VGltZVVuaXR9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNjb3VudGVkVGltZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICk7CgogICAgICAgICMgYWRkIGR5bmFtaWMgZmllbGRzIGFycmF5IGludG8gJ0R5bmFtaWNGaWVsZCcgaGFzaCBrZXkgaWYgYW55CiAgICAgICAgaWYgKEBEeW5hbWljRmllbGRzKSB7CiAgICAgICAgICAgICRUaWNrZXRFbnRyeXtEeW5hbWljRmllbGR9ID0gXEBEeW5hbWljRmllbGRzOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgVGlja2V0IGVudHJ5IGRhdGEKICAgICAgICBteSAkVGlja2V0QnVuZGxlID0gewogICAgICAgICAgICAlVGlja2V0RW50cnksCiAgICAgICAgfTsKCiAgICAgICAgaWYgKCAhJEFsbEFydGljbGVzICkgewojIFJvdGhlciBPU1MgLyBvdG9iby1haQogICAgICAgICAgICAkVGlja2V0QnVuZGxlLT57TGlua3N9ID0gJFNlbGYtPl9BZGRMaW5rcygKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkUGFyYW17RGF0YX0sCiAgICAgICAgICAgICAgICBUaWNrZXRCdW5kbGUgPT4gJFRpY2tldEJ1bmRsZQogICAgICAgICAgICApOwojIEVPIG90b2JvLWFpCiAgICAgICAgICAgIHB1c2ggQEl0ZW0sICRUaWNrZXRCdW5kbGU7CiAgICAgICAgICAgIG5leHQgVElDS0VUOwogICAgICAgIH0KCiAgICAgICAgbXkgJUFydGljbGVMaXN0RmlsdGVyczsKICAgICAgICBpZiAoICRVc2VyVHlwZSBlcSAnQ3VzdG9tZXInICkgewogICAgICAgICAgICAlQXJ0aWNsZUxpc3RGaWx0ZXJzID0gKAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICAgICBteSBAQXJ0aWNsZXM7CiAgICAgICAgaWYgKCRBcnRpY2xlU2VuZGVyVHlwZSkgewogICAgICAgICAgICBmb3IgbXkgJFNlbmRlclR5cGUgKCBAeyAkQXJ0aWNsZVNlbmRlclR5cGUgfHwgW10gfSApIHsKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlc0ZpbHRlcmVkID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJFNlbmRlclR5cGUsCiAgICAgICAgICAgICAgICAgICAgJUFydGljbGVMaXN0RmlsdGVycywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBwdXNoIEBBcnRpY2xlcywgQEFydGljbGVzRmlsdGVyZWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICVBcnRpY2xlTGlzdEZpbHRlcnMsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIE1vZGlmeSBBcnRpY2xlTGltaXQgaWYgaXQgaXMgZ3JlYXRlciB0aGVuIG51bWJlciBvZiBhcnRpY2xlcyAoc2VlIGJ1ZyMxNDU4NSkuCiAgICAgICAgaWYgKCAkQXJ0aWNsZUxpbWl0ID4gc2NhbGFyIEBBcnRpY2xlcyApIHsKICAgICAgICAgICAgJFRpY2tldEFydGljbGVMaW1pdCA9IHNjYWxhciBAQXJ0aWNsZXM7CiAgICAgICAgfQoKICAgICAgICAjIFNldCBudW1iZXIgb2YgYXJ0aWNsZXMgYnkgQXJ0aWNsZUxpbWl0IGFuZCBBcnRpY2xlT3JkZXIgcGFyYW1ldGVycy4KICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggXEBBcnRpY2xlcyApICYmICRUaWNrZXRBcnRpY2xlTGltaXQgKSB7CiAgICAgICAgICAgIGlmICggJEFydGljbGVPcmRlciBlcSAnREVTQycgKSB7CiAgICAgICAgICAgICAgICBAQXJ0aWNsZXMgPSByZXZlcnNlIEBBcnRpY2xlczsKICAgICAgICAgICAgfQogICAgICAgICAgICBAQXJ0aWNsZXMgPSBAQXJ0aWNsZXNbIDAgLi4gKCAkVGlja2V0QXJ0aWNsZUxpbWl0IC0gMSApIF07CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IGFydGljbGUgbG9vcAogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKTsKCiAgICAgICAgICAgIG15ICVBcnRpY2xlRGF0YSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+ICREeW5hbWljRmllbGRzLAogICAgICAgICAgICApOwogICAgICAgICAgICAkQXJ0aWNsZSA9IFwlQXJ0aWNsZURhdGE7CgogICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgISRBdHRhY2htZW50czsKCiAgICAgICAgICAgICMgZ2V0IGF0dGFjaG1lbnQgaW5kZXggKHdpdGhvdXQgYXR0YWNobWVudHMpCiAgICAgICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAlRXhjbHVkZUF0dGFjaG1lbnRzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVBdG1JbmRleCApOwoKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzOwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEZpbGVJRCAoIHNvcnQga2V5cyAlQXRtSW5kZXggKSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlSUQ7CiAgICAgICAgICAgICAgICBteSAlQXR0YWNobWVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBGaWxlSUQgICAgPT4gJEZpbGVJRCwgICAgICAgICAgICAgICAgICMgYXMgcmV0dXJuZWQgYnkgQXJ0aWNsZUF0dGFjaG1lbnRJbmRleAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCBcJUF0dGFjaG1lbnQgKTsKCiAgICAgICAgICAgICAgICAkQXR0YWNobWVudHtGaWxlSUR9ID0gJEZpbGVJRDsKICAgICAgICAgICAgICAgIGlmICgkR2V0QXR0YWNobWVudENvbnRlbnRzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBjb250ZW50IHRvIGJhc2U2NCwgYnV0IHByZXZlbnQgNzYgY2hhcnMgYnJha2UsIHNlZSBidWcjMTQ1MDAuCiAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7Q29udGVudH0gPSBlbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSwgJycgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgdW5zZXQgY29udGVudAogICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50e0NvbnRlbnR9ICAgICAgICAgICAgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudHtDb250ZW50QWx0ZXJuYXRpdmV9ID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgeyVBdHRhY2htZW50fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgQXR0YWNobWVudHMgZGF0YQogICAgICAgICAgICAkQXJ0aWNsZS0+e0F0dGFjaG1lbnR9ID0gXEBBdHRhY2htZW50czsKCiAgICAgICAgfSAgICAjIGZpbmlzaCBhcnRpY2xlIGxvb3AKCiAgICAgICAgIyBzZXQgVGlja2V0IGVudHJ5IGRhdGEKICAgICAgICBpZiAoQEFydGljbGVzKSB7CgogICAgICAgICAgICBteSBAQXJ0aWNsZUJveDsKCiAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZVJhdyAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZTsKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlRHluYW1pY0ZpZWxkczsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBhbGwgZHluYW1pYyBmaWVsZHMgZnJvbSBtYWluIGFydGljbGUgaGFzaCBhbmQgc2V0IHRoZW0gaW50byBhbiBhcnJheS4KICAgICAgICAgICAgICAgIEFUVFJJQlVURToKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7JEFydGljbGVSYXd9ICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgPX4gbXtcQSBEeW5hbWljRmllbGRfKC4qKSBcen1tc3ggKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNraXAgZHluYW1pYyBmaWVsZHMgdGhhdCBhcmUgbm90IGFydGljbGUgcmVsYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXJ0aWNsZUdldCgpIGFsc28gcmV0dXJucyB0aWNrZXQgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgKCAhJEFydGljbGVEeW5hbWljRmllbGRMb29rdXB7JDF9ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBBcnRpY2xlRHluYW1pY0ZpZWxkcywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQXJ0aWNsZVJhdy0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRBcnRpY2xleyRBdHRyaWJ1dGV9ID0gJEFydGljbGVSYXctPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkQXJ0aWNsZXtUaW1lVW5pdH0gPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlUmF3LT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBkeW5hbWljIGZpZWxkcyBhcnJheSBpbnRvICdEeW5hbWljRmllbGQnIGhhc2gga2V5IGlmIGFueQogICAgICAgICAgICAgICAgaWYgKEBBcnRpY2xlRHluYW1pY0ZpZWxkcykgewogICAgICAgICAgICAgICAgICAgICRBcnRpY2xle0R5bmFtaWNGaWVsZH0gPSBcQEFydGljbGVEeW5hbWljRmllbGRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVCb3gsIFwlQXJ0aWNsZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkVGlja2V0QnVuZGxlLT57QXJ0aWNsZX0gPSBcQEFydGljbGVCb3g7CiAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gb3RvYm8tYWkKICAgICAgICAkVGlja2V0QnVuZGxlLT57TGlua3N9ID0gJFNlbGYtPl9BZGRMaW5rcygKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRQYXJhbXtEYXRhfSwKICAgICAgICAgICAgVGlja2V0QnVuZGxlID0+ICRUaWNrZXRCdW5kbGUKICAgICAgICApOwojIEVPIG90b2JvLWFpCgogICAgICAgIHB1c2ggQEl0ZW0sICRUaWNrZXRCdW5kbGU7CiAgICB9ICAgICMgZmluaXNoIHRpY2tldCBsb29wCgogICAgaWYgKCAhc2NhbGFyIEBJdGVtICkgewogICAgICAgICRFcnJvck1lc3NhZ2UgPSAnQ291bGQgbm90IGdldCBUaWNrZXQgZGF0YScKICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldEdldDo6UnVuKCknOwoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldEdldC5Ob3RUaWNrZXREYXRhJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRHZXQ6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICk7CgogICAgfQoKICAgICMgc2V0IHRpY2tldCBkYXRhIGludG8gcmV0dXJuIHN0cnVjdHVyZQogICAgJFJldHVybkRhdGEtPntEYXRhfS0+e1RpY2tldH0gPSBcQEl0ZW07CgogICAgIyByZXR1cm4gcmVzdWx0CiAgICByZXR1cm4gJFJldHVybkRhdGE7Cn0KCiMgUm90aGVyIE9TUyAvIG90b2JvLWFpCnN1YiBfQWRkTGlua3MgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CiAgICBteSAkVGlja2V0QnVuZGxlID0gJFBhcmFte1RpY2tldEJ1bmRsZX07CiAgICBteSAkVGlja2V0SUQgICAgID0gJFRpY2tldEJ1bmRsZS0+e1RpY2tldElEfTsKCiAgICAjIGdldCBsaW5rcwogICAgbXkgJEdldExpbmtzID0gJFBhcmFte0RhdGF9LT57TGlua3N9OwogICAgaWYgKCRHZXRMaW5rcykgewoKICAgICAgICBpZiAoIHJlZiAkR2V0TGlua3MgbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEdldExpbmtzID0gWyRHZXRMaW5rc107CiAgICAgICAgfQogICAgICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKICAgICAgICBteSAkTGlua3MgICAgICA9ICRMaW5rT2JqZWN0LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICBPYmplY3QgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIEtleSAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgRGlyZWN0aW9uID0+ICdCb3RoJywKICAgICAgICApOwoKICAgICAgICBteSBATGlua3MyUmV0dXJuOwoKICAgICAgICBPQkpFQ1RUWVBFOgogICAgICAgIGZvciBteSAkVGFyZ2V0VHlwZSAoICRHZXRMaW5rcy0+QCogKSB7CgogICAgICAgICAgICBuZXh0IE9CSkVDVFRZUEUgaWYgIWV4aXN0cyAkTGlua3MtPnskVGFyZ2V0VHlwZX07CgogICAgICAgICAgICBmb3IgbXkgJExpbmtLaW5kICgga2V5cyAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPiUqICkgewoKICAgICAgICAgICAgICAgIGZvciBteSAkRGlyZWN0aW9uICgga2V5cyAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPnskTGlua0tpbmR9LT4lKiApIHsKCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRMaW5rICgga2V5cyAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPnskTGlua0tpbmR9LT57JERpcmVjdGlvbn0tPiUqICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJERhdGEgPSAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPnskTGlua0tpbmR9LT57JERpcmVjdGlvbn0tPnskTGlua307CgogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBMaW5rczJSZXR1cm4sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtUeXBlICAgPT4gJExpbmtLaW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0VHlwZSA9PiAkVGFyZ2V0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldElEICAgPT4gJExpbmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uICA9PiAkRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gXEBMaW5rczJSZXR1cm47CiAgICB9CgogICAgcmV0dXJuIFtdOwp9CgojIEVPIG90b2JvLWFpCgoxOwo=</File>
        <File Location="Kernel/GenericInterface/Operation/ElasticSearch/FAQSearch.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpFbGFzdGljU2VhcmNoOjpGQVFTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoIDphbGwgKTsKCnVzZSBwYXJlbnQgcXcoCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uCik7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkVsYXN0aWNTZWFyY2g6OkZBUVNlYXJjaCAtIEdlbmVyaWNJbnRlcmZhY2UgRVMgU2VhcmNoIE9wZXJhdGlvbiBiYWNrZW5kIGZvciBGQVFzCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBJbml0KCkKCmluaXRpYWxpemUgdGhlIG9wZXJhdGlvbiBieSBjaGVja2luZyB0aGUgd2ViIHNlcnZpY2UgY29uZmlndXJhdGlvbiBhbmQgZ2F0aGVyIG9mIHRoZSBkeW5hbWljIGZpZWxkcwoKICAgIG15ICRSZXR1cm4gPSAkQ29tbW9uT2JqZWN0LT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAxLAogICAgKTsKCnJldHVybnM6CgogICAgJFJldHVybiA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgaW4gY2FzZSBvZiBmYWlsdXJlLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgTWVzc2FnZScsCiAgICB9Cgo9Y3V0CgpzdWIgSW5pdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICBpZiAoICEkUGFyYW17V2Vic2VydmljZUlEfSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gV2Vic2VydmljZUlEISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCB3ZWIgc2VydmljZSBjb25maWd1cmF0aW9uCiAgICBteSAkV2Vic2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyktPldlYnNlcnZpY2VHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRXZWJzZXJ2aWNlKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnQ291bGQgbm90IGRldGVybWluZSBXZWIgc2VydmljZSBjb25maWd1cmF0aW9uJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkNvbW1vbjo6bmV3KCknLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgUnVuKCkKClBlcmZvcm0gRkFRU2VhcmNoIE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiBGQVEgaXRlbXMgZnJvbSBFUy4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBGdWxsdGV4dCA9PiAnc2VhcmNodGVybScKICAgICAgICAgICAgTGltaXQgICAgPT4gMTAsICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkZWZhdWx0IGlzIDEwCiAgICAgICAgfQogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSBvZiBhbiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICdBdHRhY2htZW50cycgPT4gW10sCiAgICAgICAgICAgICAgICAnQ2F0ZWdvcnlJRCcgPT4gMSwKICAgICAgICAgICAgICAgICdGaWVsZDEnID0+ICc8c3ltcHRob20+JywKICAgICAgICAgICAgICAgICdGaWVsZDInID0+ICc8cHJvYmxlbT4nLAogICAgICAgICAgICAgICAgJ0ZpZWxkMycgPT4gJzxzb2x1dGlvbj4nLAogICAgICAgICAgICAgICAgJ0l0ZW1JRCcgPT4gMiwKICAgICAgICAgICAgICAgICdLZXl3b3JkcycgPT4gJ0thdHplLCBIdW5nZXIsIEZ1dHRlcicsCiAgICAgICAgICAgICAgICAnTnVtYmVyJyA9PiAnMTAwMDInLAogICAgICAgICAgICAgICAgJ1N0YXRlVHlwZUlEJyA9PiAxLAogICAgICAgICAgICAgICAgJ1RpdGxlJyA9PiAnS2F0emUgZnVldHRlcm4hJwogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+SW5pdCgKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgIEVycm9yQ29kZSAgICA9PiAnRWxhc3RpY1NlYXJjaC5BdXRoRmFpbCcsCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJFbGFzdGljU2VhcmNoOiBBdXRob3JpemF0aW9uIGZhaWxpbmchIiwKICAgICkgaWYgISRVc2VySUQ7CgogICAgbXkgJEVTT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVsYXN0aWNzZWFyY2gnKTsKICAgIG15IEBSZXN1bHQgICA9ICRFU09iamVjdC0+RkFRU2VhcmNoKAogICAgICAgIEZ1bGx0ZXh0ID0+ICRQYXJhbXtEYXRhfS0+e0Z1bGx0ZXh0fSwKICAgICAgICBSZXN1bHQgICA9PiAnRlVMTCcsCiAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICBMaW1pdCAgICA9PiAkUGFyYW17RGF0YX0tPntMaW1pdH0gLy8gMTAsCiAgICApOwoKICAgIG15IEBSZXR1cm47CgogICAgZm9yIG15ICRJdGVtIChAUmVzdWx0KSB7CiAgICAgICAgZm9yIG15ICRLZXkgKCBrZXlzICRJdGVtLT4lKiApIHsKICAgICAgICAgICAgcHVzaCBAUmV0dXJuLCAkSXRlbS0+eyRLZXl9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+IFxAUmV0dXJuLAogICAgfTsKfQoKMTsK</File>
        <File Location="Kernel/GenericInterface/Operation/ElasticSearch/TicketSearch.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpFbGFzdGljU2VhcmNoOjpUaWNrZXRTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoIDphbGwgKTsKCnVzZSBwYXJlbnQgcXcoCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uCik7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkVsYXN0aWNTZWFyY2g6OlRpY2tldFNlYXJjaCAtIEdlbmVyaWNJbnRlcmZhY2UgRVMgU2VhcmNoIE9wZXJhdGlvbiBiYWNrZW5kIGZvciBUaWNrZXRzCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBJbml0KCkKCmluaXRpYWxpemUgdGhlIG9wZXJhdGlvbiBieSBjaGVja2luZyB0aGUgd2ViIHNlcnZpY2UgY29uZmlndXJhdGlvbiBhbmQgZ2F0aGVyIG9mIHRoZSBkeW5hbWljIGZpZWxkcwoKICAgIG15ICRSZXR1cm4gPSAkQ29tbW9uT2JqZWN0LT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAxLAogICAgKTsKCnJldHVybnM6CgogICAgJFJldHVybiA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgaW4gY2FzZSBvZiBmYWlsdXJlLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgTWVzc2FnZScsCiAgICB9Cgo9Y3V0CgpzdWIgSW5pdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICBpZiAoICEkUGFyYW17V2Vic2VydmljZUlEfSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gV2Vic2VydmljZUlEISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCB3ZWIgc2VydmljZSBjb25maWd1cmF0aW9uCiAgICBteSAkV2Vic2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyktPldlYnNlcnZpY2VHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRXZWJzZXJ2aWNlKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnQ291bGQgbm90IGRldGVybWluZSBXZWIgc2VydmljZSBjb25maWd1cmF0aW9uJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkNvbW1vbjo6bmV3KCknLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgUnVuKCkKClBlcmZvcm0gRkFRU2VhcmNoIE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiBUaWNrZXQgaXRlbXMgZnJvbSBFUy4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAoKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgRnVsbHRleHQgPT4gJ3NlYXJjaHRlcm0nCiAgICAgICAgICAgIExpbWl0ICAgID0+IDEwLCAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgZGVmYXVsdCBpcyAxMAogICAgICAgIH0KICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnQXR0YWNobWVudHMnID0+IFtdLAogICAgICAgICAgICAgICAgJ0NhdGVnb3J5SUQnID0+IDEsCiAgICAgICAgICAgICAgICAnRmllbGQxJyA9PiAnPHN5bXB0aG9tPicsCiAgICAgICAgICAgICAgICAnRmllbGQyJyA9PiAnPHByb2JsZW0+JywKICAgICAgICAgICAgICAgICdGaWVsZDMnID0+ICc8c29sdXRpb24+JywKICAgICAgICAgICAgICAgICdJdGVtSUQnID0+IDIsCiAgICAgICAgICAgICAgICAnS2V5d29yZHMnID0+ICdLYXR6ZSwgSHVuZ2VyLCBGdXR0ZXInLAogICAgICAgICAgICAgICAgJ051bWJlcicgPT4gJzEwMDAyJywKICAgICAgICAgICAgICAgICdTdGF0ZVR5cGVJRCcgPT4gMSwKICAgICAgICAgICAgICAgICdUaXRsZScgPT4gJ0thdHplIGZ1ZXR0ZXJuIScKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgfTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUmVzdWx0ID0gJFNlbGYtPkluaXQoCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdXZWJzZXJ2aWNlLkludmFsaWRDb25maWd1cmF0aW9uJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgKCAkVXNlcklELCAkVXNlclR5cGUgKSA9ICRTZWxmLT5BdXRoKAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0VsYXN0aWNTZWFyY2guQXV0aEZhaWwnLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAiRWxhc3RpY1NlYXJjaDogQXV0aG9yaXphdGlvbiBmYWlsaW5nISIsCiAgICApIGlmICEkVXNlcklEOwoKICAgIG15ICRFU09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbGFzdGljc2VhcmNoJyk7CiAgICBteSBAUmVzdWx0ICAgPSAkRVNPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICBGdWxsdGV4dCA9PiAkUGFyYW17RGF0YX0tPntGdWxsdGV4dH0sCiAgICAgICAgUmVzdWx0ICAgPT4gJ0ZVTEwnLAogICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgTGltaXQgICAgPT4gJFBhcmFte0RhdGF9LT57TGltaXR9IC8vIDEwLAogICAgKTsKCiAgICBteSBAUmV0dXJuOwoKICAgIGZvciBteSAkSXRlbSAoQFJlc3VsdCkgewogICAgICAgIGZvciBteSAkS2V5ICgga2V5cyAkSXRlbS0+JSogKSB7CiAgICAgICAgICAgIHB1c2ggQFJldHVybiwgJEl0ZW0tPnskS2V5fTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiBcQFJldHVybiwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/Link.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6Okxpbms7Cgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgcXcoCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRVcGRhdGUKKTsKCiMgY29yZSBtb2R1bGVzCnVzZSBTY2FsYXI6OlV0aWwgcXcocmVmdHlwZSk7CnVzZSBNSU1FOjpCYXNlNjQgcXcoZW5jb2RlX2Jhc2U2NCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0FycmF5UmVmV2l0aERhdGEgSXNIYXNoUmVmV2l0aERhdGEgSXNTdHJpbmcgSXNTdHJpbmdXaXRoRGF0YSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6TGluayAtIExpbmsgVGlja2V0IHRvIE9iamVjdHMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEM8S2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOz4uCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSBibGVzcyB7fSwgJFR5cGU7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KCBEZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQgKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICAkU2VsZi0+e0NvbmZpZ30gICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TGluaycpOwogICAgJFNlbGYtPntPcGVyYXRpb259ID0gJFBhcmFte09wZXJhdGlvbn07CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnBlcmZvcm0gYSBsaW5rIHRpY2tldCB0byB0YXJnZXQgT3BlcmF0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgICAgID0+ICdzb21lIGFnZW50IGxvZ2luJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgQ3VzdG9tZXJVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCgogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAnMjAwNDA0MDUxMDQ0MDQ4NScsCgogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0ZBUScsICAgICAgICAgICAjIFRpY2tldCwgQ29uZmlnSXRlbQoKICAgICAgICAgICAgVGFyZ2V0SUQgICAgID0+ICc1JywgICAgICAgICAgICAgIyBJZCBvZiB0YXJnZXQKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsICAgIyBkZWZhdWx0cyB0byBOb3JtYWwKICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICA9PiAxLAogICAgICAgIH0KICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnV2Vic2VydmljZS5JbnZhbGlkQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9ICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLkVtcHR5UmVxdWVzdCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogVGhlIHJlcXVlc3QgZGF0YSBpcyBpbnZhbGlkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gJiYgISRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldExpbms6IFRpY2tldElEIG9yIFRpY2tldE51bWJlciBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0RhdGF9LT57VGFyZ2V0VHlwZX0gfHwgISRQYXJhbXtEYXRhfS0+e1RhcmdldElEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogVGFyZ2V0VHlwZSBhbmQgVGFyZ2V0SUQgYXJlIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkTGlua1R5cGUgPSAkUGFyYW17RGF0YX0tPntMaW5rVHlwZX0gfHwgJ05vcm1hbCc7CgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldExpbms6IFVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMgcmVxdWlyZWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufSApIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX0tPntQYXNzd29yZH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldExpbms6IFBhc3N3b3JkIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGF1dGhlbnRpY2F0ZSB1c2VyCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICBpZiAoICEkVXNlcklEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0TGluay5BdXRoRmFpbCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGNoZWNrIFRpY2tldElECiAgICBteSAkVGlja2V0SUQ7CiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUaWNrZXRJRCA9ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfTsKICAgIH0KCiAgICBpZiAoICEoJFRpY2tldElEKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRMaW5rOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldERhdGEgKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRMaW5rOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgYmFzaWMgbmVlZGVkIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzOwogICAgaWYgKCAkVXNlclR5cGUgZXEgJ1VzZXInICkgewoKICAgICAgICAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ3J3JywKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3VzdG9tZXJQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAncncnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBsaW5rIHRoaXMgdGlja2V0ISIsCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgJEFjY2VzcyA9ICRMaW5rT2JqZWN0LT5PYmplY3RQZXJtaXNzaW9uKAogICAgICAgIE9iamVjdCA9PiAkUGFyYW17RGF0YX0tPntUYXJnZXRUeXBlfSwKICAgICAgICBLZXkgICAgPT4gJFBhcmFte0RhdGF9LT57VGFyZ2V0SUR9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBsaW5rIHRvIHRoaXMgb2JqZWN0ISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAkUmVzdWx0ID0gJExpbmtPYmplY3QtPkxpbmtBZGQoCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICRQYXJhbXtEYXRhfS0+e1RhcmdldFR5cGV9LAogICAgICAgIFNvdXJjZUtleSAgICA9PiAkUGFyYW17RGF0YX0tPntUYXJnZXRJRH0sCiAgICAgICAgVHlwZSAgICAgICAgID0+ICRMaW5rVHlwZSwKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+ICRSZXN1bHQsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gJFJlc3VsdCwKICAgICAgICB9CiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/UnLink.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlVuTGluazsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldFVwZGF0ZQopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIFNjYWxhcjo6VXRpbCBxdyhyZWZ0eXBlKTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZyBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpVbkxpbmsgLSBSZW1vdmUgTGluayBUaWNrZXQgdG8gT2JqZWN0cwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgQzxLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Pi4KCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICRTZWxmLT57Q29uZmlnfSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpMaW5rJyk7CiAgICAkU2VsZi0+e09wZXJhdGlvbn0gPSAkUGFyYW17T3BlcmF0aW9ufTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBSdW4oKQoKcGVyZm9ybSB1bmxpbmsgT3BlcmF0aW9uIHJlbW92aW5nIGEgbGluayBmcm9tIGEgdGlja2V0IHRvIHNvbWUgdGFyZ2V0LgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgICAgID0+ICdzb21lIGFnZW50IGxvZ2luJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgQ3VzdG9tZXJVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCgogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAnMjAwNDA0MDUxMDQ0MDQ4NScsCgogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0ZBUScsICAgICAgICAgICAjIFRpY2tldCwgQ29uZmlnSXRlbQoKICAgICAgICAgICAgVGFyZ2V0SUQgICAgID0+ICc1JywgICAgICAgICAgICAgIyBJZCBvZiB0YXJnZXQKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsICAgIyBkZWZhdWx0cyB0byBOb3JtYWwKICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICA9PiAxLAogICAgICAgIH0KICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnV2Vic2VydmljZS5JbnZhbGlkQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9ICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuRW1wdHlSZXF1ZXN0JywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRVbkxpbms6IFRoZSByZXF1ZXN0IGRhdGEgaXMgaW52YWxpZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0RhdGF9LT57VGlja2V0SUR9ICYmICEkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0VW5MaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17RGF0YX0tPntUYXJnZXRUeXBlfSB8fCAhJFBhcmFte0RhdGF9LT57VGFyZ2V0SUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0VW5MaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVGFyZ2V0VHlwZSBhbmQgVGFyZ2V0SUQgYXJlIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkTGlua1R5cGUgPSAkUGFyYW17RGF0YX0tPntMaW5rVHlwZX0gfHwgJ05vcm1hbCc7CgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0VW5MaW5rOiBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1VzZXJMb2dpbn0gKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57UGFzc3dvcmR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogUGFzc3dvcmQgb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYXV0aGVudGljYXRlIHVzZXIKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggISRVc2VySUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuQXV0aEZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGNoZWNrIFRpY2tldElECiAgICBteSAkVGlja2V0SUQ7CiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUaWNrZXRJRCA9ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfTsKICAgIH0KCiAgICBpZiAoICEoJFRpY2tldElEKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldFVuTGluay5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVXNlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgdGlja2V0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXREYXRhICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRVbkxpbms6IFVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRpY2tldCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBiYXNpYyBuZWVkZWQgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3M7CiAgICBpZiAoICRVc2VyVHlwZSBlcSAnVXNlcicgKSB7CgogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAncncnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdydycsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICApOwogICAgfQogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldFVuTGluay5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byB1cGRhdGUgdGhpcyB0aWNrZXQhIiwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKCiAgICAkQWNjZXNzID0gJExpbmtPYmplY3QtPk9iamVjdFBlcm1pc3Npb24oCiAgICAgICAgT2JqZWN0ID0+ICRQYXJhbXtEYXRhfS0+e1RhcmdldFR5cGV9LAogICAgICAgIEtleSAgICA9PiAkUGFyYW17RGF0YX0tPntUYXJnZXRJRH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldFVuTGluay5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBsaW5rIHRvIHRoaXMgb2JqZWN0ISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAkUmVzdWx0ID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGUoCiAgICAgICAgT2JqZWN0MiA9PiAnVGlja2V0JywKICAgICAgICBLZXkyICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBPYmplY3QxID0+ICRQYXJhbXtEYXRhfS0+e1RhcmdldFR5cGV9LAogICAgICAgIEtleTEgICAgPT4gJFBhcmFte0RhdGF9LT57VGFyZ2V0SUR9LAogICAgICAgIFR5cGUgICAgPT4gJExpbmtUeXBlLAogICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+ICRSZXN1bHQsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gJFJlc3VsdCwKICAgICAgICB9CiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/QueryEmbeddings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlF1ZXJ5RW1iZWRkaW5nczsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldFVwZGF0ZQopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIFNjYWxhcjo6VXRpbCBxdyhyZWZ0eXBlKTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZyBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpRdWVyeUVtYmVkZGluZ3MgLSBRdWVyeSBBSSBFbWJlZGRpbmdzIChTaW1pbGFyIEl0ZW1zKQoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgQzxLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Pi4KCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICRTZWxmLT57Q29uZmlnfSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpRdWVyeUVtYmVkZGluZ3MnKTsKICAgICRTZWxmLT57T3BlcmF0aW9ufSA9ICRQYXJhbXtPcGVyYXRpb259OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJ1bigpCgpwZXJmb3JtIHF1ZXJ5LXZlY3Rvci1kYiBmb3Igc2ltaWxhciBpdGVtcyBPcGVyYXRpb24uCgogICAgbXkgJFJlc3VsdCA9ICRPcGVyYXRpb25PYmplY3QtPlJ1bigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgVXNlckxvZ2luICAgICAgICAgPT4gJ3NvbWUgYWdlbnQgbG9naW4nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXJMb2dpbiBvciBDdXN0b21lclVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgcmVxdWlyZWQKICAgICAgICAgICAgU2Vzc2lvbklEICAgICAgICAgPT4gMTIzLAoKICAgICAgICAgICAgUGFzc3dvcmQgID0+ICdzb21lIHBhc3N3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIFVzZXJMb2dpbiBvciBjdXN0b21lclVzZXJMb2dpbiBpcyBzZW50IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGFzc3dvcmQgaXMgcmVxdWlyZWQKCiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIgaXMgcmVxdWlyZWQKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICcyMDA0MDQwNTEwNDQwNDg1JywKCiAgICAgICAgICAgIENvbGxlY3Rpb24gID0+ICdmYXFzJywKICAgICAgICAgICAgTGFiZWxzICAgICAgPT4gW10sCiAgICAgICAgICAgIEZ1bGxUZXh0ICAgID0+IDB8MSwKICAgICAgICAgICAgTGltaXQgICAgICAgPT4gMywgIyBkZWZhdWx0CiAgICAgICAgICAgIFF1ZXJ5ICAgICAgID0+ICdzZWFyY2h0ZXJtJywKICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ2lkJyA9PiAnMTNmODk0NjEtY2IzNi00ODllLWIyOTQtZTg1ZDhkYzY3Y2EyJywKICAgICAgICAgICAgICAgICdtZXRhZGF0YScgPT4gewogICAgICAgICAgICAgICAgICAgICdmdWxsdGV4dCcgPT4gJzx0aGUgRkFRIHNvbHV0aW9uIGZ1bGx0ZXh0PicsCiAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnZGVmYXVsdCcsCiAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9pZCcgPT4gJzEnICAgICAgIyBGQVEgSXRlbUlECiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ3BhZ2VfY29udGVudCcgPT4gJzx0aGUgRkFRIHRpdGxlLCBzeXB0aG9tIGFuZCBwcm9ibGVtIGZpZWxkcz4nLAogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICdEb2N1bWVudCcKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgfTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUmVzdWx0ID0gJFNlbGYtPkluaXQoCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdXZWJzZXJ2aWNlLkludmFsaWRDb25maWd1cmF0aW9uJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0gKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1F1ZXJ5RW1iZWRkaW5ncy5FbXB0eVJlcXVlc3QnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogVGhlIHJlcXVlc3QgZGF0YSBpcyBpbnZhbGlkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gJiYgISRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIgaXMgcmVxdWlyZWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e0NvbGxlY3Rpb259ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogQ29sbGVjdGlvbiBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJExpbmtUeXBlID0gJFBhcmFte0RhdGF9LT57TGlua1R5cGV9IHx8ICdOb3JtYWwnOwoKICAgIGlmICgKICAgICAgICAhJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufQogICAgICAgICYmICEkUGFyYW17RGF0YX0tPntTZXNzaW9uSUR9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGF0YX0tPntVc2VyTG9naW59ICkgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1Bhc3N3b3JkfSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJRdWVyeUVtYmVkZGluZ3M6IFBhc3N3b3JkIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGF1dGhlbnRpY2F0ZSB1c2VyCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICBpZiAoICEkVXNlcklEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkF1dGhGYWlsJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJRdWVyeUVtYmVkZGluZ3M6IFVzZXIgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBjaGVjayBUaWNrZXRJRAogICAgbXkgJFRpY2tldElEOwogICAgaWYgKCAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9ICkgewogICAgICAgICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldElETG9va3VwKAogICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFBhcmFte0RhdGF9LT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKCiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkVGlja2V0SUQgPSAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH07CiAgICB9CgogICAgaWYgKCAhKCRUaWNrZXRJRCkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJRdWVyeUVtYmVkZGluZ3M6IFVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRpY2tldCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RGF0YSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgYmFzaWMgbmVlZGVkIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFNlbGYtPkNoZWNrQWNjZXNzUGVybWlzc2lvbnMoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgVXNlclR5cGUgPT4gJFVzZXJUeXBlLAogICAgKTsKCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e0FydGljbGVJRH0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgT25seUxhc3QgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKEBBcnRpY2xlcykgewogICAgICAgICAgICAkUGFyYW17RGF0YX0tPntBcnRpY2xlSUR9ID0gJEFydGljbGVzWzBde0FydGljbGVJRH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBuZWVkIEFydGljbGVJRCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICBBcnRpY2xlSUQgPT4gJFBhcmFte0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICk7CgogICAgaWYgKCAhJEFydGljbGVCYWNrZW5kT2JqZWN0ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBBcnRpY2xlIHVuYXZhaWxhYmxlISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCA9PiAkUGFyYW17RGF0YX0tPntBcnRpY2xlSUR9LAogICAgKTsKCiAgICBteSAkUXVlcnkgPSAkUGFyYW17RGF0YX0tPntRdWVyeX0gLy8gKCAoICRBcnRpY2xle1N1YmplY3R9IC8vICcnICkgLiAnXG4nIC4gKCAkQXJ0aWNsZXtCb2R5fSAvLyAnJyApICk7CgogICAgbXkgJENvbmZpZ09iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRRdWV1ZVRvUkFHTWFwcGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6UXVldWVUb1JBR01hcHBpbmcnKSAvLyB7fTsKICAgIG15ICRSQUcgICAgICAgICAgICAgICA9ICRRdWV1ZVRvUkFHTWFwcGluZy0+eyAkVGlja2V0RGF0YXtRdWV1ZX0gfSAgICAgICAvLyAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OkRlZmF1bHRSQUcnKTsKCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiAgICBteSAkQUlXZWJzZXJ2aWNlICAgICA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuV2Vic2VydmljZVVuYXZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogV2Vic2VydmljZSBJbnZva2VyIG5vdCBmb3VuZCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFdlYnNlcnZpY2VJRCA9ICRBSVdlYnNlcnZpY2UtPntJRH07CgogICAgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJ1F1ZXJ5RW1iZWRkaW5ncycsCiAgICAgICAgQXN5bmNocm9ub3VzID0+IDAsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgQ29sbGVjdGlvbiA9PiAkUGFyYW17RGF0YX0tPntDb2xsZWN0aW9ufSwKICAgICAgICAgICAgTGFiZWxzICAgICA9PiBbJFJBR10sCiAgICAgICAgICAgIEZ1bGx0ZXh0ICAgPT4gJFBhcmFte0RhdGF9LT57RnVsbHRleHR9LAogICAgICAgICAgICBMaW1pdCAgICAgID0+ICRQYXJhbXtEYXRhfS0+e0xpbWl0fSwKICAgICAgICAgICAgUXVlcnkgICAgICA9PiAkUXVlcnksCiAgICAgICAgfQogICAgKTsKCiAgICByZXR1cm4gJFJlc3VsdCw7Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/QueryEmbeddings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6UXVlcnlFbWJlZGRpbmdzOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0IHF3KGVuY29kZV9iYXNlNjQpOwoKIyBDUEFOIG1vZHVsZXMKdXNlIFVSSTo6RXNjYXBlIHF3KHVyaV91bmVzY2FwZSk7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWZvciBzdG9wd29yZHMgYWkKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok9UT0JPQUk6OlF1ZXJ5RW1iZWRkaW5ncwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpJbnZva2VyLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3Mge30sICRUeXBlOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcyBhbmQgc3RvcmUgdGhlbSBpbiAkU2VsZgogICAgZm9yIG15ICROZWVkZWQgKHF3L0RlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRC8pIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUHJlcGFyZVJlcXVlc3QoKQoKUHJlcGFyZSB0aGUgaW52b2NhdGlvbiBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuIFRoaXMgd2lsbCBxdWVyeSB0aGUKb3RvYm8tYWktZG9ja2VyIGNvbnRhaW5lciBmb3IgYSBSQUcgYW5zd2VyLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+UHJlcGFyZVJlcXVlc3QoCiAgICAgICAgRGF0YSA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIENvbGxlY3Rpb24gID0+ICdmYXFzJywKICAgICAgICAgICAgTGFiZWxzICAgICAgPT4gW10sCiAgICAgICAgICAgIEZ1bGx0ZXh0ICAgID0+IDB8MSwKICAgICAgICAgICAgTGltaXQgICAgICAgPT4gMywgIyBkZWZhdWx0CiAgICAgICAgICAgIFF1ZXJ5ICAgICAgID0+ICdzZWFyY2h0ZXJtJywKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgInR5cGUiIDogImZhcXMiLAogICAgICAgICAgICAibGFiZWxzIiA6IFsgImRlZmF1bHQiIF0sCiAgICAgICAgICAgICJyZXRyaWV2ZV9mdWxsdGV4dCIgOiAiMSIsCiAgICAgICAgICAgICJuX3Jlc3VsdHMiIDogMywKICAgICAgICAgICAgInF1ZXJ5X3RleHQiIDogIkthdHplIgogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFByZXBhcmVSZXF1ZXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbGxlY3Rpb24gPSAkUGFyYW17RGF0YX17Q29sbGVjdGlvbn07CiAgICBteSAkTGFiZWxzICAgICA9ICRQYXJhbXtEYXRhfXtMYWJlbHN9OwogICAgbXkgJEZ1bGx0ZXh0ICAgPSAkUGFyYW17RGF0YX17RnVsbHRleHR9IC8vIDA7CiAgICBteSAkTGltaXQgICAgICA9ICRQYXJhbXtEYXRhfXtMaW1pdH0gICAgLy8gMzsKICAgIG15ICRRdWVyeSAgICAgID0gJFBhcmFte0RhdGF9e1F1ZXJ5fTsKCiAgICAjIGNoZWNrIG5lZWRlZAogICAgZm9yIG15ICROZWVkZWQgKHF3L0NvbGxlY3Rpb24gTGFiZWxzIFF1ZXJ5LykgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIHR5cGUgICAgICAgICAgICAgID0+ICRDb2xsZWN0aW9uLAogICAgICAgICAgICBsYWJlbHMgICAgICAgICAgICA9PiAkTGFiZWxzLAogICAgICAgICAgICByZXRyaWV2ZV9mdWxsdGV4dCA9PiAkRnVsbHRleHQsCiAgICAgICAgICAgIG5fcmVzdWx0cyAgICAgICAgID0+ICRMaW1pdCwKICAgICAgICAgICAgcXVlcnlfdGV4dCAgICAgICAgPT4gJFF1ZXJ5LAogICAgICAgIH0sCiAgICB9OwoKfQoKPWhlYWQyIEhhbmRsZVJlc3BvbnNlKCkKCmhhbmRsZSByZXNwb25zZSBkYXRhIG9mIHRoZSBjb25maWd1cmVkIHJlbW90ZSB3ZWIgc2VydmljZS4KVGhpcyB3aWxsIGp1c3QgcmV0dXJuIHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCgogICAgbXkgJFJlc3VsdCA9ICRJbnZva2VyT2JqZWN0LT5IYW5kbGVSZXNwb25zZSgKICAgICAgICBSZXNwb25zZVN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgIyBzdWNjZXNzIHN0YXR1cyBvZiB0aGUgcmVtb3RlIHdlYiBzZXJ2aWNlCiAgICAgICAgUmVzcG9uc2VFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICMgaW4gY2FzZSBvZiB3ZWIgc2VydmljZSBlcnJvcgogICAgICAgIERhdGEgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhdGEgcGF5bG9hZAogICAgICAgICAgICAuLi4KICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnaWQnID0+ICcxM2Y4OTQ2MS1jYjM2LTQ4OWUtYjI5NC1lODVkOGRjNjdjYTInLAogICAgICAgICAgICAgICAgJ21ldGFkYXRhJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ2Z1bGx0ZXh0JyA9PiAnYW5zd2VyOiA8c29sdXRpb24gcGFydCBvZiBGQVE+IScsCiAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnZGVmYXVsdCcsCiAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9pZCcgPT4gJzEnCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ3BhZ2VfY29udGVudCcgPT4gJzxUaXRsZSxRdWVzdGlvbiBhbmQgUHJvYmxlbSBwYXJ0IG9mIHRoZSBGQVE+JywKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnRG9jdW1lbnQnCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKfTsKCj1jdXQKCnN1YiBIYW5kbGVSZXNwb25zZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSByZXNwb25zZSwgZm9yd2FyZCBpdAogICAgaWYgKCAhJFBhcmFte1Jlc3BvbnNlU3VjY2Vzc30gKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUGFyYW17UmVzcG9uc2VFcnJvck1lc3NhZ2V9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiAkUGFyYW17RGF0YX0sCiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/QueryEmbeddings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OlF1ZXJ5RW1iZWRkaW5nczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkZvcmVhY2hUb0ZvcikKCiMgSW5mb3JtIHRoZSBvYmplY3QgbWFuYWdlciBhYm91dCB0aGUgaGFyZCBkZXBlbmRlbmNpZXMuCiMgVGhpcyBtb2R1bGUgbXVzdCBiZSBkaXNjYXJkZWQgd2hlbiBvbmUgb2YgdGhlIGhhcmQgZGVwZW5kZW5jaWVzIGhhcyBiZWVuIGRpc2NhcmRlZC4Kb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAopOwoKc3ViIENvbmZpZ3VyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5EZXNjcmlwdGlvbignUmV0cmlldmUgYW4gQUkgZ2VuZXJhdGVkIEFuc3dlciBmcm9tIHRoZSBvdG9iby1haS1zZXJ2aWNlcyBjb250YWluZXIuJyk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdjb2xsZWN0aW9uJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxc3x0aWNrZXRfcGFpcnN8dGlja2V0X2NodW5ja3N8ZG9jcycsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyL14uKyQvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3F1ZXJ5JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnc2VhcmNodGVybScsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyL14uKyQvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2Z1bGx0ZXh0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAncmV0cmlldmUgZnVsbHRleHQnLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDAsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdsYWJlbCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ2RlZmF1bHQnLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9eLiskL3NteCwKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHdoZXRoZXIgb3RvYm8tYWkgd2ViIHNlcnZpY2UgaXMgZW5hYmxlZCBhbmQgaWYgbm90LCBhY3RpdmF0ZSBpdAogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwoKICAgIG15ICRBSVdlYnNlcnZpY2UgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRBSVdlYnNlcnZpY2UgKSB7CiAgICAgICAgJFNlbGYtPlByaW50KCI8cmVkPk9UT0JPLUFJIHdlYnNlcnZpY2Ugbm90IGZvdW5kISBVbmFibGUgdG8gY29udGludWUuPC9yZWQ+XG4iKTsKICAgICAgICBkaWU7CiAgICB9CgogICAgIyBTZXQgdGhlIHdlYnNlcnZpY2UgaWQKICAgICRTZWxmLT57V2Vic2VydmljZUlEfSA9ICRBSVdlYnNlcnZpY2UtPntJRH07CgogICAgaWYgKCAkQUlXZWJzZXJ2aWNlLT57VmFsaWRJRH0gIT0gMSApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoCiAgICAgICAgICAgICI8eWVsbG93Pk9UT0JPLUFJIHdlYnNlcnZpY2UgaXMgbm93IGFjdGl2YXRlZC4gSWYgeW91IGRvbid0IHdhbnQgdG8ga2VlcCBpdCBlbmFibGVkLCBwbGVhc2UgZGlzYWJsZSBpdCBtYW51YWxseSBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLCBhZnRlciB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLjwveWVsbG93PlxuIgogICAgICAgICk7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgJXskQUlXZWJzZXJ2aWNlfSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5PVE9CTy1BSSB3ZWJzZXJ2aWNlIGNvdWxkIG5vdCBiZSBhY3RpdmF0ZWQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgICAgICBkaWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdG9ib0FJT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknKTsKICAgIG15ICRDb2xsZWN0aW9uICAgID0gJFNlbGYtPkdldE9wdGlvbignY29sbGVjdGlvbicpOwogICAgbXkgJFF1ZXJ5ICAgICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdxdWVyeScpOwogICAgbXkgJExhYmVscyAgICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdsYWJlbCcpICAgIC8vIFsnZGVmYXVsdCddOwogICAgbXkgJEZ1bGx0ZXh0ICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdmdWxsdGV4dCcpIC8vIDA7CgogICAgbXkgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgIEludm9rZXIgICAgICA9PiAnUXVlcnlFbWJlZGRpbmdzJywKICAgICAgICBBc3luY2hyb25vdXMgPT4gMCwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBDb2xsZWN0aW9uID0+ICRDb2xsZWN0aW9uLAogICAgICAgICAgICBRdWVyeSAgICAgID0+ICRRdWVyeSwKICAgICAgICAgICAgTGFiZWxzICAgICA9PiAkTGFiZWxzLAogICAgICAgICAgICBGdWxsdGV4dCAgID0+ICRGdWxsdGV4dCwKICAgICAgICB9CiAgICApOwoKICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKICAgIG15ICREdW1wICAgICAgID0gJE1haW5PYmplY3QtPkR1bXAoJFJlc3VsdCk7CgogICAgJFNlbGYtPlByaW50KCIkRHVtcFxuIik7CgogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Language/de_OTOBOAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX09UT0JPQUk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFN5c0NvbmZpZyBEcm9wZG93biBWYWx1ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3luY2hyb25vdXMnfSA9ICdTeW5jaHJvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3VyIHJlcXVlc3Qgd2FzIGNhbmNlbGVkJ30gPSAnRGllIEFuZnJhZ2Ugd3VyZGUgYWJnZWJyb2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91ciByZXF1ZXN0IGhhcyBmYWlsZWQnfSA9ICdEaWUgQW5mcmFnZSBpc3QgZmVobGdlc2NobGFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91ciByZXF1ZXN0IGhhcyB0aW1lZCBvdXQnfSA9ICdJaHJlIEFuZnJhZ2UgaXN0IGFiZ2VsYXVmZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCByZXF1ZXN0J30gPSAnQW5mcmFnZSDDvGJlcm1pdHRlbG4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ltaWxhciBUaWNrZXRzJ30gPSAnw4RobmxpY2hlIFRpY2tldHMnOwoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgICAgICdZb3VyIHJlcXVlc3Qgd2FzIGNhbmNlbGVkJywKICAgICAgICAnWW91ciByZXF1ZXN0IGhhcyBmYWlsZWQnLAogICAgICAgICdZb3VyIHJlcXVlc3QgaGFzIHRpbWVkIG91dCcsCiAgICAgICAgJ1NlbmQgcmVxdWVzdCcsCiAgICApOwp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AdminDynamicFieldTextAreaAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5EeW5hbWljRmllbGRUZXh0QXJlYUFJOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0gYmxlc3MgeyVQYXJhbX0sICRUeXBlOwoKICAgICMgU29tZSBzZXR1cAogICAgJFNlbGYtPntUZW1wbGF0ZUZpbGV9ID0gJ0FkbWluRHluYW1pY0ZpZWxkVGV4dEFyZWFBSSc7CgogICAgIyBzZXQgdXAgdGhlIGZpZWxkIHR5cGUgc3BlY2lmaWMgc2V0dGluZ3MKICAgIG15IEBGaWVsZFR5cGVTZXR0aW5nczsKICAgIHsKICAgICAgICBteSAkRmllbGRUeXBlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpZWxkVHlwZScgKTsKICAgICAgICBpZiAoJEZpZWxkVHlwZSkgewogICAgICAgICAgICBteSAkRHJpdmVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCggJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6JyAuICRGaWVsZFR5cGUgKTsKICAgICAgICAgICAgQEZpZWxkVHlwZVNldHRpbmdzID0gJERyaXZlck9iamVjdC0+R2V0RmllbGRUeXBlU2V0dGluZ3MoKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfSA9IFxARmllbGRUeXBlU2V0dGluZ3M7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBTdG9yZSBsYXN0IGVudGl0eSBzY3JlZW4uCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuRW50aXR5JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGQnICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0FkZCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZEFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0FkZEFjdGlvbigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZScgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fQ2hhbmdlKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fQ2hhbmdlQWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1VuZGVmaW5lZCBzdWJhY3Rpb24uJyksCiAgICApOwp9CgpzdWIgX0FkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGNoZWNrIGlmIHdlIGNsb25lIGZyb20gYW4gZXhpc3RpbmcgZmllbGQKICAgIG15ICRDbG9uZUZpZWxkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQ2xvbmVGaWVsZElEIiApOwogICAgaWYgKCRDbG9uZUZpZWxkSUQpIHsKICAgICAgICBteSAkRmllbGRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgSUQgPT4gJENsb25lRmllbGRJRCwKICAgICAgICApOwoKICAgICAgICAjIGlmIHdlIGZvdW5kIGEgZmllbGQgY29uZmlnLCBjb3B5IGl0cyBjb250ZW50IGZvciB1c2FnZSBpbiBfU2hvd1NjcmVlbgogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEZpZWxkQ29uZmlnKSApIHsKCiAgICAgICAgICAgICMgY29weSBzdGFuZGFyZCBzdHVmZgogICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoT2JqZWN0VHlwZSBGaWVsZFR5cGUgTGFiZWwgTmFtZSBWYWxpZElEKSkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyRLZXl9ID0gJEZpZWxkQ29uZmlnLT57JEtleX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaXRlcmF0ZSBvdmVyIHNwZWNpYWwgc3R1ZmYgYW5kIGNvcHkgaW4tZGVwdGggY29udGVudCBhcyBmbGF0IGxpc3QKICAgICAgICAgICAgQ09ORklHS0VZOgogICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0tleSAoIGtleXMgJEZpZWxkQ29uZmlnLT57Q29uZmlnfS0+JSogKSB7CiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0tFWSBpZiAkQ29uZmlnS2V5IGVxICdQYXJ0T2ZTZXQnOwoKICAgICAgICAgICAgICAgIG15ICRERkRldGFpbHMgPSAkRmllbGRDb25maWctPntDb25maWd9OwogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJERGRGV0YWlscy0+eyRDb25maWdLZXl9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENvbmZpZ0NvbnRlbnQgPSAkREZEZXRhaWxzLT57JENvbmZpZ0tleX07CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb250ZW50S2V5ICgga2V5cyAkQ29uZmlnQ29udGVudC0+JSogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskQ29udGVudEtleX0gPSAkQ29uZmlnQ29udGVudC0+eyRDb250ZW50S2V5fTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17JENvbmZpZ0tleX0gPSAkREZEZXRhaWxzLT57JENvbmZpZ0tleX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJEdldFBhcmFte0Nsb25lRmllbGRJRH0gPSAkQ2xvbmVGaWVsZElEOwogICAgfQoKICAgIGZvciBteSAkTmVlZGVkIChxdyhPYmplY3RUeXBlIEZpZWxkVHlwZSBGaWVsZE9yZGVyKSkgewogICAgICAgICRHZXRQYXJhbXskTmVlZGVkfSAvLz0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdOZWVkICVzJywgJE5lZWRlZCApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJEZpbHRlclBhcmFtIChxdyhPYmplY3RUeXBlRmlsdGVyIE5hbWVzcGFjZUZpbHRlcikpIHsKICAgICAgICAkR2V0UGFyYW17JEZpbHRlclBhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRGaWx0ZXJQYXJhbSApOwogICAgfQoKICAgICMgZ2V0IHRoZSBvYmplY3QgdHlwZSBhbmQgZmllbGQgdHlwZSBkaXNwbGF5IG5hbWUKICAgIG15ICRDb25maWdPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkT2JqZWN0VHlwZU5hbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0R5bmFtaWNGaWVsZHM6Ok9iamVjdFR5cGUnKS0+eyAkR2V0UGFyYW17T2JqZWN0VHlwZX0gfS0+e0Rpc3BsYXlOYW1lfSB8fCAnJzsKICAgIG15ICRGaWVsZFR5cGVOYW1lICA9ICRDb25maWdPYmplY3QtPkdldCgnRHluYW1pY0ZpZWxkczo6RHJpdmVyJyktPnsgJEdldFBhcmFte0ZpZWxkVHlwZX0gfS0+e0Rpc3BsYXlOYW1lfSAgICAgIHx8ICcnOwoKICAgICMgY2hlY2sgbmFtZXNwYWNlIHZhbGlkaXR5CiAgICBteSAkTmFtZXNwYWNlcyA9ICRDb25maWdPYmplY3QtPkdldCgnRHluYW1pY0ZpZWxkOjpOYW1lc3BhY2VzJyk7CiAgICBteSAkTmFtZXNwYWNlICA9ICcnOwogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoJE5hbWVzcGFjZXMpICYmICRHZXRQYXJhbXtOYW1lc3BhY2VGaWx0ZXJ9ICkgewogICAgICAgICROYW1lc3BhY2UgPSAoIGdyZXAgeyAkXyBlcSAkR2V0UGFyYW17TmFtZXNwYWNlRmlsdGVyfSB9ICROYW1lc3BhY2VzLT5AKiApID8gJEdldFBhcmFte05hbWVzcGFjZUZpbHRlcn0gOiAnJzsKICAgIH0KCiAgICByZXR1cm4gJFNlbGYtPl9TaG93U2NyZWVuKAogICAgICAgICVQYXJhbSwKICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgTW9kZSAgICAgICAgICAgPT4gJ0FkZCcsCiAgICAgICAgQnJlYWRjcnVtYlRleHQgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQWRkICVzIGZpZWxkJywgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRGaWVsZFR5cGVOYW1lKSApLAogICAgICAgIE9iamVjdFR5cGVOYW1lID0+ICRPYmplY3RUeXBlTmFtZSwKICAgICAgICBGaWVsZFR5cGVOYW1lICA9PiAkRmllbGRUeXBlTmFtZSwKICAgICAgICBOYW1lc3BhY2UgICAgICA9PiAkTmFtZXNwYWNlLAogICAgKTsKfQoKc3ViIF9BZGRBY3Rpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgbXkgJUVycm9yczsKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkTmVlZGVkIChxdyhOYW1lIExhYmVsIEZpZWxkT3JkZXIpKSB7CiAgICAgICAgJEdldFBhcmFteyROZWVkZWR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdTZXJ2ZXJFcnJvcicgfSAgICAgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ1NlcnZlckVycm9yTWVzc2FnZScgfSA9IFRyYW5zbGF0YWJsZSgnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICBpZiAoICRHZXRQYXJhbXtGaWVsZE9yZGVyfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBvcmRlciBpcyBudW1lcmljIGFuZCBwb3NpdGl2ZQogICAgICAgIGlmICggJEdldFBhcmFte0ZpZWxkT3JkZXJ9ICF+IG17XEEgKD86IFxkICkrIFx6fXhtcyApIHsKCiAgICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze0ZpZWxkT3JkZXJTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tGaWVsZE9yZGVyU2VydmVyRXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnVGhlIGZpZWxkIG11c3QgYmUgbnVtZXJpYy4nKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRDb25maWdQYXJhbSAoCiAgICAgICAgcXcoT2JqZWN0VHlwZSBPYmplY3RUeXBlTmFtZSBGaWVsZFR5cGUgRmllbGRUeXBlTmFtZSBWYWxpZElEIE5hbWVzcGFjZSkKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRDb25maWdQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkQ29uZmlnUGFyYW0gKTsKICAgIH0KCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICBpZiAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9LT5AKiA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICROYW1lICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5hbWUgKTsKICAgICAgICB9CgogICAgICAgICMgdmFsaWRhdGUgaW5wdXQgaWYgbmVjZXNzYXJ5CiAgICAgICAgaWYgKCAkU2V0dGluZy0+e01hbmRhdG9yeX0gKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskTmFtZX0gfHwgKCAkU2V0dGluZy0+e011bHRpcGxlfSAmJiAhJEdldFBhcmFteyROYW1lfS0+QCogKSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROYW1lIC4gJ1NlcnZlckVycm9yJyB9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3JzeyAkTmFtZSAuICdTZXJ2ZXJFcnJvck1lc3NhZ2UnIH0gPSBUcmFuc2xhdGFibGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRGaWx0ZXJQYXJhbSAocXcoT2JqZWN0VHlwZUZpbHRlciBOYW1lc3BhY2VGaWx0ZXIpKSB7CiAgICAgICAgJEdldFBhcmFteyRGaWx0ZXJQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkRmlsdGVyUGFyYW0gKTsKICAgIH0KCiAgICBpZiAoICRHZXRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBuYW1lIGlzIGFscGhhbnVtZXJpYwogICAgICAgIGlmICggJEdldFBhcmFte05hbWV9ICF+IG17XEEgKD86IFthLXpBLVpdIHwgXGQgKSsgXHp9eG1zICkgewoKICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGVycm9yIGNsYXNzCiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPQogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlKCdUaGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBvbmx5IEFTQ0lJIGxldHRlcnMgYW5kIG51bWJlcnMuJyk7CiAgICAgICAgfQoKICAgICAgICAkR2V0UGFyYW17TmFtZX0gPSAkR2V0UGFyYW17TmFtZXNwYWNlfSA/ICRHZXRQYXJhbXtOYW1lc3BhY2V9IC4gJy0nIC4gJEdldFBhcmFte05hbWV9IDogJEdldFBhcmFte05hbWV9OwoKICAgICAgICAjIGNoZWNrIGlmIG5hbWUgaXMgZHVwbGljYXRlZAogICAgICAgIG15ICVEeW5hbWljRmllbGRzTGlzdCA9ICV7CiAgICAgICAgICAgICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgICAgICAgICBWYWxpZCAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgICAgICAgICAgKQogICAgICAgIH07CgogICAgICAgICVEeW5hbWljRmllbGRzTGlzdCA9IHJldmVyc2UgJUR5bmFtaWNGaWVsZHNMaXN0OwoKICAgICAgICBpZiAoICREeW5hbWljRmllbGRzTGlzdHsgJEdldFBhcmFte05hbWV9IH0gKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1RoZXJlIGlzIGFub3RoZXIgZmllbGQgd2l0aCB0aGUgc2FtZSBuYW1lLicpOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgdW5jb3JyZWN0YWJsZSBlcnJvcnMKICAgIGlmICggISRHZXRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIFZhbGlkSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgcmV0dXJuIHRvIGFkZCBzY3JlZW4gaWYgZXJyb3JzCiAgICBpZiAoJUVycm9ycykgewogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBNb2RlID0+ICdBZGQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAlRmllbGRDb25maWcgPSAoKTsKCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICAkRmllbGRDb25maWd7JE5hbWV9ID0gJEdldFBhcmFteyROYW1lfTsKICAgIH0KCiAgICAjIGNyZWF0ZSBhIG5ldyBmaWVsZAogICAgbXkgJEZpZWxkSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgTGFiZWwgICAgICA9PiAkR2V0UGFyYW17TGFiZWx9LAogICAgICAgIEZpZWxkT3JkZXIgPT4gJEdldFBhcmFte0ZpZWxkT3JkZXJ9LAogICAgICAgIEZpZWxkVHlwZSAgPT4gJEdldFBhcmFte0ZpZWxkVHlwZX0sCiAgICAgICAgT2JqZWN0VHlwZSA9PiAkR2V0UGFyYW17T2JqZWN0VHlwZX0sCiAgICAgICAgQ29uZmlnICAgICA9PiBcJUZpZWxkQ29uZmlnLAogICAgICAgIFZhbGlkSUQgICAgPT4gJEdldFBhcmFte1ZhbGlkSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkRmllbGRJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDb3VsZCBub3QgY3JlYXRlIHRoZSBuZXcgZmllbGQnKSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRSZWRpcmVjdFN0cmluZyA9ICJBY3Rpb249QWRtaW5EeW5hbWljRmllbGQiOwoKICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJEdldFBhcmFte09iamVjdFR5cGVGaWx0ZXJ9ICkgKSB7CiAgICAgICAgJFJlZGlyZWN0U3RyaW5nIC49ICI7T2JqZWN0VHlwZUZpbHRlcj0iIC4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV0nLAogICAgICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJEdldFBhcmFte09iamVjdFR5cGVGaWx0ZXJ9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRHZXRQYXJhbXtOYW1lc3BhY2VGaWx0ZXJ9ICkgKSB7CiAgICAgICAgJFJlZGlyZWN0U3RyaW5nIC49ICI7TmFtZXNwYWNlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkR2V0UGFyYW17TmFtZXNwYWNlRmlsdGVyfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gJFJlZGlyZWN0U3RyaW5nICk7Cn0KCnN1YiBfQ2hhbmdlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICROZWVkZWQgKHF3KE9iamVjdFR5cGUgRmllbGRUeXBlKSkgewogICAgICAgICRHZXRQYXJhbXskTmVlZGVkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTmVlZCAlcycsICROZWVkZWQgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRGaWx0ZXJQYXJhbSAocXcoT2JqZWN0VHlwZUZpbHRlciBOYW1lc3BhY2VGaWx0ZXIpKSB7CiAgICAgICAgJEdldFBhcmFteyRGaWx0ZXJQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkRmlsdGVyUGFyYW0gKTsKICAgIH0KCiAgICAjIGdldCB0aGUgb2JqZWN0IHR5cGUgYW5kIGZpZWxkIHR5cGUgZGlzcGxheSBuYW1lCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJE9iamVjdFR5cGVOYW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdEeW5hbWljRmllbGRzOjpPYmplY3RUeXBlJyktPnsgJEdldFBhcmFte09iamVjdFR5cGV9IH0tPntEaXNwbGF5TmFtZX0gfHwgJyc7CiAgICBteSAkRmllbGRUeXBlTmFtZSAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0R5bmFtaWNGaWVsZHM6OkRyaXZlcicpLT57ICRHZXRQYXJhbXtGaWVsZFR5cGV9IH0tPntEaXNwbGF5TmFtZX0gICAgICB8fCAnJzsKCiAgICBteSAkRmllbGRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKICAgIGlmICggISRGaWVsZElEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWQgSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgZGF0YQogICAgbXkgJER5bmFtaWNGaWVsZERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICk7CgogICAgIyBjaGVjayBmb3IgdmFsaWQgZHluYW1pYyBmaWVsZCBjb25maWd1cmF0aW9uCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkRGF0YSkgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgZ2V0IGRhdGEgZm9yIGR5bmFtaWMgZmllbGQgJXMnLCAkRmllbGRJRCApLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJUNvbmZpZzsKCiAgICAjIGV4dHJhY3QgY29uZmlndXJhdGlvbgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJER5bmFtaWNGaWVsZERhdGEtPntDb25maWd9ICkgKSB7CiAgICAgICAgJUNvbmZpZyA9ICREeW5hbWljRmllbGREYXRhLT57Q29uZmlnfS0+JSo7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5fU2hvd1NjcmVlbigKICAgICAgICAlUGFyYW0sCiAgICAgICAgJUdldFBhcmFtLAogICAgICAgICREeW5hbWljRmllbGREYXRhLT4lKiwKICAgICAgICAlQ29uZmlnLAogICAgICAgIElEICAgICAgICAgICAgID0+ICRGaWVsZElELAogICAgICAgIE1vZGUgICAgICAgICAgID0+ICdDaGFuZ2UnLAogICAgICAgIEJyZWFkY3J1bWJUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAlcyBmaWVsZCcsICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkRmllbGRUeXBlTmFtZSkgKSwKICAgICAgICBPYmplY3RUeXBlTmFtZSA9PiAkT2JqZWN0VHlwZU5hbWUsCiAgICAgICAgRmllbGRUeXBlTmFtZSAgPT4gJEZpZWxkVHlwZU5hbWUsCiAgICApOwp9CgpzdWIgX0NoYW5nZUFjdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICVFcnJvcnM7CiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBMYWJlbCBGaWVsZE9yZGVyKSkgewogICAgICAgICRHZXRQYXJhbXskTmVlZGVkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnU2VydmVyRXJyb3InIH0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdTZXJ2ZXJFcnJvck1lc3NhZ2UnIH0gPSBUcmFuc2xhdGFibGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyk7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRGaWVsZElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApOwogICAgaWYgKCAhJEZpZWxkSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTmVlZCBJRCcpLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGRhdGEKICAgIG15ICREeW5hbWljRmllbGREYXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIElEID0+ICRGaWVsZElELAogICAgKTsKCiAgICAjIGNoZWNrIGZvciB2YWxpZCBkeW5hbWljIGZpZWxkIGNvbmZpZ3VyYXRpb24KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGREYXRhKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBnZXQgZGF0YSBmb3IgZHluYW1pYyBmaWVsZCAlcycsICRGaWVsZElEICksCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRHZXRQYXJhbXtGaWVsZE9yZGVyfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBvcmRlciBpcyBudW1lcmljIGFuZCBwb3NpdGl2ZQogICAgICAgIGlmICggJEdldFBhcmFte0ZpZWxkT3JkZXJ9ICF+IG17XEEgKD86IFxkICkrIFx6fXhtcyApIHsKCiAgICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze0ZpZWxkT3JkZXJTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tGaWVsZE9yZGVyU2VydmVyRXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnVGhlIGZpZWxkIG11c3QgYmUgbnVtZXJpYy4nKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRDb25maWdQYXJhbSAoCiAgICAgICAgcXcoT2JqZWN0VHlwZSBPYmplY3RUeXBlTmFtZSBGaWVsZFR5cGUgRmllbGRUeXBlTmFtZSBWYWxpZElEIE5hbWVzcGFjZSkKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRDb25maWdQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkQ29uZmlnUGFyYW0gKTsKICAgIH0KCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICBpZiAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9LT5AKiA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICROYW1lICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5hbWUgKTsKICAgICAgICB9CgogICAgICAgICMgdmFsaWRhdGUgaW5wdXQgaWYgbmVjZXNzYXJ5CiAgICAgICAgaWYgKCAkU2V0dGluZy0+e01hbmRhdG9yeX0gKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyROYW1lfSB8fCAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICYmICEkR2V0UGFyYW17JE5hbWV9LT5AKiApICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJE5hbWUgLiAnU2VydmVyRXJyb3InIH0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROYW1lIC4gJ1NlcnZlckVycm9yTWVzc2FnZScgfSA9IFRyYW5zbGF0YWJsZSgnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJEZpbHRlclBhcmFtIChxdyhPYmplY3RUeXBlRmlsdGVyIE5hbWVzcGFjZUZpbHRlcikpIHsKICAgICAgICAkR2V0UGFyYW17JEZpbHRlclBhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRGaWx0ZXJQYXJhbSApOwogICAgfQoKICAgIGlmICggJEdldFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIG5hbWUgaXMgbG93ZXJjYXNlCiAgICAgICAgaWYgKCAkR2V0UGFyYW17TmFtZX0gIX4gbXtcQSAoPzogW2EtekEtWl0gfCBcZCApKyBcen14bXMgKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9CiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUoJ1RoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIG9ubHkgQVNDSUkgbGV0dGVycyBhbmQgbnVtYmVycy4nKTsKICAgICAgICB9CgogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRHZXRQYXJhbXtOYW1lc3BhY2V9ID8gJEdldFBhcmFte05hbWVzcGFjZX0gLiAnLScgLiAkR2V0UGFyYW17TmFtZX0gOiAkR2V0UGFyYW17TmFtZX07CgogICAgICAgICMgY2hlY2sgaWYgbmFtZSBpcyBkdXBsaWNhdGVkCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZHNMaXN0ID0gJXsKICAgICAgICAgICAgJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdCgKICAgICAgICAgICAgICAgIFZhbGlkICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFJlc3VsdFR5cGUgPT4gJ0hBU0gnLAogICAgICAgICAgICApCiAgICAgICAgfTsKCiAgICAgICAgJUR5bmFtaWNGaWVsZHNMaXN0ID0gcmV2ZXJzZSAlRHluYW1pY0ZpZWxkc0xpc3Q7CgogICAgICAgIGlmICgKICAgICAgICAgICAgJER5bmFtaWNGaWVsZHNMaXN0eyAkR2V0UGFyYW17TmFtZX0gfSAmJgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkc0xpc3R7ICRHZXRQYXJhbXtOYW1lfSB9IG5lICRGaWVsZElECiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1RoZXJlIGlzIGFub3RoZXIgZmllbGQgd2l0aCB0aGUgc2FtZSBuYW1lLicpOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBpdCdzIGFuIGludGVybmFsIGZpZWxkLCBpdCdzIG5hbWUgc2hvdWxkIG5vdCBjaGFuZ2UKICAgICAgICBpZiAoCiAgICAgICAgICAgICREeW5hbWljRmllbGREYXRhLT57SW50ZXJuYWxGaWVsZH0gJiYKICAgICAgICAgICAgJER5bmFtaWNGaWVsZHNMaXN0eyAkR2V0UGFyYW17TmFtZX0gfSBuZSAkRmllbGRJRAogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGNsYXNzCiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yfSAgICAgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3Jze05hbWVTZXJ2ZXJFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdUaGUgbmFtZSBmb3IgdGhpcyBmaWVsZCBzaG91bGQgbm90IGNoYW5nZS4nKTsKICAgICAgICAgICAgJFBhcmFte0ludGVybmFsRmllbGR9ICAgICAgICAgICA9ICREeW5hbWljRmllbGREYXRhLT57SW50ZXJuYWxGaWVsZH07CiAgICAgICAgfQogICAgfQoKICAgICMgdW5jb3JyZWN0YWJsZSBlcnJvcnMKICAgIGlmICggISRHZXRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIFZhbGlkSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgQ2hlY2sgaWYgZHluYW1pYyBmaWVsZCBpcyBwcmVzZW50IGluIFN5c0NvbmZpZyBzZXR0aW5nCiAgICBteSAkVXBkYXRlRW50aXR5ICAgICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdVcGRhdGVFbnRpdHknICkgfHwgJyc7CiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKICAgIG15ICVEeW5hbWljRmllbGRPbGREYXRhICAgICAgID0gJXskRHluYW1pY0ZpZWxkRGF0YX07CiAgICBteSBASXNEeW5hbWljRmllbGRJblN5c0NvbmZpZyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ3VyYXRpb25FbnRpdHlDaGVjaygKICAgICAgICBFbnRpdHlUeXBlID0+ICdEeW5hbWljRmllbGQnLAogICAgICAgIEVudGl0eU5hbWUgPT4gJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSwKICAgICk7CiAgICBpZiAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKCiAgICAgICAgIyBBbiBlbnRpdHkgcHJlc2VudCBpbiBTeXNDb25maWcgY291bGRuJ3QgYmUgaW52YWxpZGF0ZWQuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoIFZhbGlkSUQgPT4gJEdldFBhcmFte1ZhbGlkSUR9ICkKICAgICAgICAgICAgbmUgJ3ZhbGlkJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRXJyb3Jze1ZhbGlkSURJbnZhbGlkfSAgICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tWYWxpZE9wdGlvblNlcnZlckVycm9yfSA9ICdJblNldHRpbmcnOwogICAgICAgIH0KCiAgICAgICAgIyBJbiBjYXNlIGNoYW5naW5nIG5hbWUgYW4gYXV0aG9yaXphdGlvbiAoVXBkYXRlRW50aXR5KSBzaG91bGQgYmUgc2VudAogICAgICAgIGVsc2lmICggJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSBuZSAkR2V0UGFyYW17TmFtZX0gJiYgISRVcGRhdGVFbnRpdHkgKSB7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZUludmFsaWR9ICAgICAgICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7SW5TZXR0aW5nTmFtZVNlcnZlckVycm9yfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIHRvIGNoYW5nZSBzY3JlZW4gaWYgZXJyb3JzCiAgICBpZiAoJUVycm9ycykgewogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBJRCAgID0+ICRGaWVsZElELAogICAgICAgICAgICBNb2RlID0+ICdDaGFuZ2UnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAlRmllbGRDb25maWcgPSAoKTsKCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICAkRmllbGRDb25maWd7JE5hbWV9ID0gJEdldFBhcmFteyROYW1lfTsKICAgIH0KCiAgICAjIHVwZGF0ZSBkeW5hbWljIGZpZWxkIChGaWVsZFR5cGUgYW5kIE9iamVjdFR5cGUgY2Fubm90IGJlIGNoYW5nZWQ7IHVzZSBvbGQgdmFsdWVzKQogICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgSUQgICAgICAgICA9PiAkRmllbGRJRCwKICAgICAgICBOYW1lICAgICAgID0+ICRHZXRQYXJhbXtOYW1lfSwKICAgICAgICBMYWJlbCAgICAgID0+ICRHZXRQYXJhbXtMYWJlbH0sCiAgICAgICAgRmllbGRPcmRlciA9PiAkR2V0UGFyYW17RmllbGRPcmRlcn0sCiAgICAgICAgRmllbGRUeXBlICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e0ZpZWxkVHlwZX0sCiAgICAgICAgT2JqZWN0VHlwZSA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e09iamVjdFR5cGV9LAogICAgICAgIENvbmZpZyAgICAgPT4gXCVGaWVsZENvbmZpZywKICAgICAgICBWYWxpZElEICAgID0+ICRHZXRQYXJhbXtWYWxpZElEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCAhJFVwZGF0ZVN1Y2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCB1cGRhdGUgdGhlIGZpZWxkICVzJywgJEdldFBhcmFte05hbWV9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoCiAgICAgICAgQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcKICAgICAgICAmJiAkRHluYW1pY0ZpZWxkT2xkRGF0YXtOYW1lfSBuZSAkR2V0UGFyYW17TmFtZX0KICAgICAgICAmJiAkVXBkYXRlRW50aXR5CiAgICAgICAgKQogICAgewogICAgICAgIFNFVFRJTkc6CiAgICAgICAgZm9yIG15ICRTZXR0aW5nTmFtZSAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKCiAgICAgICAgICAgIG15ICVTZXR0aW5nID0gJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ0dldCgKICAgICAgICAgICAgICAgIE5hbWUgPT4gJFNldHRpbmdOYW1lLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBTRVRUSU5HIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVTZXR0aW5nICk7CgogICAgICAgICAgICAkU2V0dGluZ3tFZmZlY3RpdmVWYWx1ZX0gPX4gcy8kRHluYW1pY0ZpZWxkT2xkRGF0YXtOYW1lfS8kR2V0UGFyYW17TmFtZX0vZzsKCiAgICAgICAgICAgIG15ICRFeGNsdXNpdmVMb2NrR1VJRCA9ICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdMb2NrKAogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRTZXR0aW5ne05hbWV9LAogICAgICAgICAgICAgICAgRm9yY2UgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZXR0aW5ne0V4Y2x1c2l2ZUxvY2tHVUlEfSA9ICRFeGNsdXNpdmVMb2NrR1VJRDsKCiAgICAgICAgICAgICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdVcGRhdGUoCiAgICAgICAgICAgICAgICAlU2V0dGluZywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWd1cmF0aW9uRGVwbG95KAogICAgICAgICAgICBDb21tZW50cyAgICAgID0+ICJEeW5hbWljRmllbGQgbmFtZSBjaGFuZ2UiLAogICAgICAgICAgICBEaXJ0eVNldHRpbmdzID0+IFxASXNEeW5hbWljRmllbGRJblN5c0NvbmZpZywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEZvcmNlICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRGaWx0ZXJTdHJpbmcgPSAnJzsKCiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRHZXRQYXJhbXtPYmplY3RUeXBlRmlsdGVyfSApICkgewogICAgICAgICRGaWx0ZXJTdHJpbmcgLj0gIjtPYmplY3RUeXBlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkR2V0UGFyYW17T2JqZWN0VHlwZUZpbHRlcn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJEdldFBhcmFte05hbWVzcGFjZUZpbHRlcn0gKSApIHsKICAgICAgICAkRmlsdGVyU3RyaW5nIC49ICI7TmFtZXNwYWNlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkR2V0UGFyYW17TmFtZXNwYWNlRmlsdGVyfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgaWYgdGhlIHVzZXIgd291bGQgbGlrZSB0byBjb250aW51ZSBlZGl0aW5nIHRoZSBkeW5hbWljIGZpZWxkLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBjaGFuZ2Ugc2NyZWVuCiAgICBpZiAoCiAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAmJiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKSBlcSAnMScgKQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO09iamVjdFR5cGU9JER5bmFtaWNGaWVsZERhdGEtPntPYmplY3RUeXBlfTtGaWVsZFR5cGU9JER5bmFtaWNGaWVsZERhdGEtPntGaWVsZFR5cGV9O0lEPSRGaWVsZElEJEZpbHRlclN0cmluZyIKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byBvdmVydmlldwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj1BZG1pbkR5bmFtaWNGaWVsZCRGaWx0ZXJTdHJpbmciICk7CiAgICB9Cn0KCnN1YiBfU2hvd1NjcmVlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICROYW1lc3BhY2UgPSAkUGFyYW17TmFtZXNwYWNlfTsKICAgICRQYXJhbXtEaXNwbGF5RmllbGROYW1lfSA9ICdOZXcnOwoKICAgIGlmICggJFBhcmFte01vZGV9IGVxICdDaGFuZ2UnIHx8ICRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgaWYgKCAhJFBhcmFte0Nsb25lRmllbGRJRH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtTaG93V2FybmluZ30gICAgICA9ICdTaG93V2FybmluZyc7CiAgICAgICAgICAgICRQYXJhbXtEaXNwbGF5RmllbGROYW1lfSA9ICRQYXJhbXtOYW1lfTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIG5hbWVzcGFjZQogICAgICAgIGlmICggJFBhcmFte05hbWV9ID1+IC8oLiopLSguKikvICkgewogICAgICAgICAgICAkTmFtZXNwYWNlID0gJDE7CiAgICAgICAgICAgICRQYXJhbXtQbGFpbkZpZWxkTmFtZX0gPSAkMiB1bmxlc3MgJFBhcmFte0Nsb25lRmllbGRJRH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17UGxhaW5GaWVsZE5hbWV9ID0gJFBhcmFte05hbWV9OwogICAgICAgIH0KICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gam9pbiAnJywKICAgICAgICAkTGF5b3V0T2JqZWN0LT5IZWFkZXIsCiAgICAgICAgJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcjsKCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgZ2V0IGFsbCBmaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBvcmRlciBudW1iZXJzIChpcyBhbHJlYWR5IHNvcnRlZCkuCiAgICBteSBARHluYW1pY2ZpZWxkT3JkZXJMaXN0OwogICAgbXkgJUR5bmFtaWNmaWVsZE5hbWVzTGlzdDsKICAgIGZvciBteSAkRHluYW1pY2ZpZWxkICggQHskRHluYW1pY0ZpZWxkTGlzdH0gKSB7CiAgICAgICAgcHVzaCBARHluYW1pY2ZpZWxkT3JkZXJMaXN0LCAkRHluYW1pY2ZpZWxkLT57RmllbGRPcmRlcn07CiAgICAgICAgJER5bmFtaWNmaWVsZE5hbWVzTGlzdHsgJER5bmFtaWNmaWVsZC0+e0ZpZWxkT3JkZXJ9IH0gPSAkRHluYW1pY2ZpZWxkLT57TGFiZWx9OwogICAgfQoKICAgICMgd2hlbiBhZGRpbmcgd2UgbmVlZCB0byBjcmVhdGUgYW4gZXh0cmEgb3JkZXIgbnVtYmVyIGZvciB0aGUgbmV3IGZpZWxkCiAgICBpZiAoICRQYXJhbXtNb2RlfSBlcSAnQWRkJyApIHsKCiAgICAgICAgIyBnZXQgdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRoZSBvcmRlciBsaXN0IGFuZCBhZGQgMQogICAgICAgIG15ICRMYXN0T3JkZXJOdW1iZXIgPSAkRHluYW1pY2ZpZWxkT3JkZXJMaXN0Wy0xXTsKICAgICAgICAkTGFzdE9yZGVyTnVtYmVyKys7CgogICAgICAgICMgYWRkIHRoaXMgbmV3IG9yZGVyIG51bWJlciB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAgICAgICAgcHVzaCBARHluYW1pY2ZpZWxkT3JkZXJMaXN0LCAkTGFzdE9yZGVyTnVtYmVyOwogICAgfQoKICAgICMgc2hvdyB0aGUgbmFtZXMgb2YgdGhlIG90aGVyIGZpZWxkcyB0byBlYXNlIG9yZGVyaW5nCiAgICBteSAlT3JkZXJOYW1lc0xpc3Q7CiAgICBteSAkQ3VycmVudGx5VGV4dCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3VycmVudGx5JykgLiAnOiAnOwogICAgZm9yIG15ICRPcmRlck51bWJlciAoIHNvcnQgQER5bmFtaWNmaWVsZE9yZGVyTGlzdCApIHsKICAgICAgICAkT3JkZXJOYW1lc0xpc3R7JE9yZGVyTnVtYmVyfSA9ICRPcmRlck51bWJlcjsKICAgICAgICBpZiAoICREeW5hbWljZmllbGROYW1lc0xpc3R7JE9yZGVyTnVtYmVyfSAmJiAkT3JkZXJOdW1iZXIgbmUgJFBhcmFte0ZpZWxkT3JkZXJ9ICkgewogICAgICAgICAgICAkT3JkZXJOYW1lc0xpc3R7JE9yZGVyTnVtYmVyfSA9ICRPcmRlck51bWJlciAuICcgLSAnCiAgICAgICAgICAgICAgICAuICRDdXJyZW50bHlUZXh0CiAgICAgICAgICAgICAgICAuICREeW5hbWljZmllbGROYW1lc0xpc3R7JE9yZGVyTnVtYmVyfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9yZGVyU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVPcmRlck5hbWVzTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgID0+ICdGaWVsZE9yZGVyJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRQYXJhbXtGaWVsZE9yZGVyfSB8fCAxLAogICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMCwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDAsCiAgICAgICAgU29ydCAgICAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjIFZhbGlkYXRlX051bWJlcicsCiAgICApOwoKICAgICMgQWRkIGZpZWxkIHR5cGUgc3BlY2lmaWMgaW5wdXRzLiBDdXJyZW50bHkgb25seSBTZWxlY3Rpb25zIGFyZSBzdXBwb3J0ZWQuCiAgICAjIFNlbGVjdGlvbnMgbWF5IGJlIHNldCB1cCBpbiBhIGRlY2xhcmF0aXZlIHdheS4KICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CiAgICAgICAgbmV4dCBTRVRUSU5HIHVubGVzcyAkU2V0dGluZy0+e0lucHV0VHlwZX07CgogICAgICAgIGlmICggJFNldHRpbmctPntJbnB1dFR5cGV9IGVxICdTZWxlY3Rpb24nICkgewogICAgICAgICAgICBteSAkTmFtZSAgICAgICA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICAgICAgbXkgQENzc0NsYXNzZXMgPSBxdyhNb2Rlcm5pemUgVzUwcGMpOwogICAgICAgICAgICBwdXNoIEBDc3NDbGFzc2VzLCAkU2V0dGluZy0+e01hbmRhdG9yeX0gICAgICAgICAgID8gJ1ZhbGlkYXRlX1JlcXVpcmVkJyA6ICgpOwogICAgICAgICAgICBwdXNoIEBDc3NDbGFzc2VzLCAkUGFyYW17ICROYW1lIC4gJ1NlcnZlckVycm9yJyB9ID8gJ1NlcnZlckVycm9yJyAgICAgICA6ICgpOwogICAgICAgICAgICBteSAkRmllbGRTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+ICRTZXR0aW5nLT57U2VsZWN0aW9uRGF0YX0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICA9PiAoICRTZXR0aW5nLT57UG9zc2libGVOb25lfSAvLyAwICksCiAgICAgICAgICAgICAgICBEaXNhYmxlZCAgICAgICA9PiAoICRTZXR0aW5nLT57RGlzYWJsZWR9ICAgICAvLyAwICksCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgICA9PiAkUGFyYW17JE5hbWV9IHx8ICcwJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICggam9pbiAnICcsIEBDc3NDbGFzc2VzICksCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgICA9PiAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICAgIC8vIDAgKSwKICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICggJFNldHRpbmctPntUcmVlVmlld30gICAgLy8gMCApLAogICAgICAgICAgICAgICAgU29ydCAgICAgICAgICAgPT4gKCAkU2V0dGluZy0+e1NvcnR9ICAgICAgICAvLyAwICksCiAgICAgICAgICAgICAgICBTb3J0UmV2ZXJzZSAgICA9PiAoICRTZXR0aW5nLT57U29ydFJldmVyc2V9IC8vIDAgKSwKICAgICAgICAgICAgICAgIFNvcnRJbmRpdmlkdWFsID0+ICRTZXR0aW5nLT57U29ydEluZGl2aWR1YWx9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NvbmZpZ1BhcmFtUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENvbmZpZ1BhcmFtTmFtZSAgICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgICAgPT4gJFNldHRpbmctPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgRmllbGRTdHJnICAgICAgICAgID0+ICRGaWVsZFN0cmcsCiAgICAgICAgICAgICAgICAgICAgRXhwbGFuYXRpb24gICAgICAgID0+ICRTZXR0aW5nLT57RXhwbGFuYXRpb259LAogICAgICAgICAgICAgICAgICAgIFNlcnZlckVycm9yTWVzc2FnZSA9PiAkUGFyYW17ICROYW1lIC4gJ1NlcnZlckVycm9yTWVzc2FnZScgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFNFVFRJTkc7CiAgICAgICAgfQoKICAgICAgICAjIG1vcmUgaW5wdXQgdHlwZXMgbWlnaHQgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZQogICAgfQoKICAgIG15ICROYW1lc3BhY2VMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdEeW5hbWljRmllbGQ6Ok5hbWVzcGFjZXMnKTsKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCROYW1lc3BhY2VMaXN0KSApIHsKICAgICAgICBteSAkTmFtZXNwYWNlU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgID0+ICROYW1lc3BhY2VMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdOYW1lc3BhY2UnLAogICAgICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICROYW1lc3BhY2UgfHwgJycsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gICA9PiAwLAogICAgICAgICAgICBTb3J0ICAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIENsYXNzICAgICAgICAgPT4gJ01vZGVybml6ZSBXNzVwYycsCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZE5hbWVzcGFjZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZXNwYWNlU3RyZyA9PiAkTmFtZXNwYWNlU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgIyBjcmVhdGUgdGhlIFZhbGlkaXR5IHNlbGVjdAogICAgbXkgJFZhbGlkaXR5U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VmFsaWRJRH0gfHwgMSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMCwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZSBXNTBwYycsCiAgICApOwoKICAgICMgSW50ZXJuYWwgZmllbGRzIGNhbiBub3QgYmUgZGVsZXRlZCBhbmQgbmFtZSBzaG91bGQgbm90IGNoYW5nZS4KICAgIG15ICRSZWFkb25seUludGVybmFsRmllbGQgPSAnJzsKICAgIGlmICggJFBhcmFte0ludGVybmFsRmllbGR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdJbnRlcm5hbEZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgICAgICRSZWFkb25seUludGVybmFsRmllbGQgPSAncmVhZG9ubHknOwogICAgfQoKICAgICMgZ2V0IHRoZSBmaWVsZCBpZAogICAgbXkgJEZpZWxkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgIyBvbmx5IGlmIHRoZSBkeW5hbWljIGZpZWxkIGV4aXN0cyBhbmQgc2hvdWxkIGJlIGVkaXRlZCwKICAgICMgbm90IGlmIHRoZSBmaWVsZCBpcyBhZGRlZCBmb3IgdGhlIGZpcnN0IHRpbWUKICAgIGlmICgkRmllbGRJRCkgewoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICAgICApOwoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICREeW5hbWljRmllbGQtPntOYW1lfTsKCiAgICAgICAgIyBBZGQgd2FybmluZyBpbiBjYXNlIHRoZSBEeW5hbWljRmllbGQgYmVsb25ncyBhIFN5c0NvbmZpZyBzZXR0aW5nLgogICAgICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgICAgICMgSW4gY2FzZSBkaXJ0eSBzZXR0aW5nIGRpc2FibGUgZm9ybQogICAgICAgIG15ICRJc0RpcnR5Q29uZmlnID0gMDsKICAgICAgICBteSBASXNEaXJ0eVJlc3VsdCA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ3VyYXRpb25EaXJ0eVNldHRpbmdzTGlzdCgpOwogICAgICAgIG15ICVJc0RpcnR5TGlzdCAgID0gbWFwIHsgJF8gPT4gMSB9IEBJc0RpcnR5UmVzdWx0OwoKICAgICAgICBteSBASXNEeW5hbWljRmllbGRJblN5c0NvbmZpZyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ3VyYXRpb25FbnRpdHlDaGVjaygKICAgICAgICAgICAgRW50aXR5VHlwZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRW50aXR5TmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSAvLyAnJywKICAgICAgICApOwoKICAgICAgICBpZiAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRJblN5c0NvbmZpZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBPbGROYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRTZXR0aW5nTmFtZSAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZEluU3lzQ29uZmlnUm93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ05hbWUgPT4gJFNldHRpbmdOYW1lLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgVmVyaWZ5IGlmIGRpcnR5IHNldHRpbmcKICAgICAgICAgICAgICAgIGlmICggJElzRGlydHlMaXN0eyRTZXR0aW5nTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJElzRGlydHlDb25maWcgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRJc0RpcnR5Q29uZmlnKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkSW5TeXNDb25maWdEaXJ0eScsCgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICB9CgogICAgbXkgJEZpbHRlclN0cmcgPSAnJzsKICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte09iamVjdFR5cGVGaWx0ZXJ9ICkgKSB7CiAgICAgICAgJEZpbHRlclN0cmcgLj0gIjtPYmplY3RUeXBlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17T2JqZWN0VHlwZUZpbHRlcn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZXNwYWNlTGlzdCkgKSB7CiAgICAgICAgaWYgKCBJc1N0cmluZ1dpdGhEYXRhKCAkUGFyYW17TmFtZXNwYWNlRmlsdGVyfSApICkgewogICAgICAgICAgICAkRmlsdGVyU3RyZyAuPSAiO05hbWVzcGFjZUZpbHRlcj0iIC4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuRmlsdGVyIHwgdXJpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte05hbWVzcGFjZUZpbHRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgcmV0dXJuIGpvaW4gJycsCiAgICAgICAgJE91dHB1dCwKICAgICAgICAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAkU2VsZi0+e1RlbXBsYXRlRmlsZX0sCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBGaWx0ZXJTdHJnICAgICAgICAgICAgPT4gJEZpbHRlclN0cmcsCiAgICAgICAgICAgICAgICBWYWxpZGl0eVN0cmcgICAgICAgICAgPT4gJFZhbGlkaXR5U3RyZywKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZE9yZGVyU3RyZyA9PiAkRHluYW1pY0ZpZWxkT3JkZXJTdHJnLAogICAgICAgICAgICAgICAgUmVhZG9ubHlJbnRlcm5hbEZpZWxkID0+ICRSZWFkb25seUludGVybmFsRmllbGQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICAgICAkTGF5b3V0T2JqZWN0LT5Gb290ZXI7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/OtoboAIDashboard.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6T3RvYm9BSURhc2hib2FyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ2FjaGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgbXkgJE90b2JvQUlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScpOwogICAgbXkgJE1haW5PYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICRTdWJhY3Rpb24gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3ViYWN0aW9uJyApIHx8ICcnOwogICAgbXkgJFF1ZXN0aW9uICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWVzdGlvbicgKSAgfHwgJyc7CgogICAgIyBhdHRlbnRpb24gTUQ1U3VtIGNhbiBjaGFuZ2UgdXRmOF9mbGFnIG9mIHBhc3NlZCBzdHJpbmcgcmVmCiAgICBteSAkUXVlc3Rpb25Db3B5Rm9yTUQ1Q2FsYyA9ICRRdWVzdGlvbjsKICAgIG15ICRRdWVzdGlvbk1kNSAgICAgICAgICAgID0gJE1haW5PYmplY3QtPk1ENXN1bSggU3RyaW5nID0+IFwkUXVlc3Rpb25Db3B5Rm9yTUQ1Q2FsYyApOwogICAgbXkgJENhY2hlS2V5UXVlc3Rpb24gICAgICAgPSAnT3RvYm9BSS1DdXN0b20tUmVzcG9uc2UtJyAuICRRdWVzdGlvbk1kNTsKICAgIG15ICRDYWNoZUtleVJlcXVlc3QgICAgICAgID0gJ090b2JvQUktQ3VzdG9tLVJlcXVlc3QtJyAuICRTZWxmLT57VXNlcklEfTsKCiAgICBteSAkSlNPTjsKICAgIGlmICggJFN1YmFjdGlvbiBlcSAiR2V0QUlBbnN3ZXIiICkgewogICAgICAgIG15ICRBbnN3ZXIgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5UXVlc3Rpb24sCiAgICAgICAgKTsKICAgICAgICBpZiAoJEFuc3dlcikgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPT4gJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkQW5zd2VyLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFJlcXVlc3RFeGlzdHMgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ090b2JvQUknLAogICAgICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXlSZXF1ZXN0LAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJFJlcXVlc3RFeGlzdHMpIHsKICAgICAgICAgICAgICAgICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0+ICdvbmdvaW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgID0+ICRSZXF1ZXN0RXhpc3RzLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE90b2JvQUlPYmplY3QtPkdldEFuc3dlckFzeW5jKAogICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uID0+ICRRdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkVFRMID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPdG9ib0FJRGFzaGJvYXJkOjpGcm9udGVuZDo6Q2FjaGVUVEwnKS0+e1JlcXVlc3R9IHx8IDI0OwogICAgICAgICAgICAgICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgPT4gJ090b2JvQUknLAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleVJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgIFRUTCAgID0+IDYwICogNjAgKiAkVFRMLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0+ICdwZW5kaW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgID0+ICRRdWVzdGlvbk1kNSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFN1YmFjdGlvbiBlcSAiUG9sbEFJQW5zd2VyIiApIHsKICAgICAgICBteSAkQW5zd2VyID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJ090b2JvQUknLAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleVF1ZXN0aW9uLAogICAgICAgICk7CiAgICAgICAgaWYgKCRBbnN3ZXIpIHsKICAgICAgICAgICAgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0+ICdzdWNjZXNzJywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJEFuc3dlciwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgICAgICAgICAgVHlwZSA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleVJlcXVlc3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkUmVxdWVzdEV4aXN0cyA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgVHlwZSA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleVJlcXVlc3QsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkUmVxdWVzdEV4aXN0cykgewogICAgICAgICAgICAgICAgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPT4gJ3BlbmRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFF1ZXN0aW9uTWQ1LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPT4gJ2ZhaWwnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICJDYW5jZWxBSVJlcXVlc3QiICkgewogICAgICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICdPdG9ib0FJJywKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXlSZXF1ZXN0LAogICAgICAgICk7CiAgICAgICAgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFN0YXR1cyA9PiAnY2FuY2VsZWQnLAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRRdWVzdGlvbk1kNSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgIH0KCiAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgKTsKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentTicketAIChat.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRBSUNoYXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTmV0OjpETlM7CnVzZSBVUkk6OkVzY2FwZSBxdyh1cmlfZXNjYXBlX3V0ZjgpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJEF1dGhTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyk7CiAgICBteSAkVXNlck9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZmV0Y2ggZGF0YQogICAgbXkgJE1DUEhvc3QgICA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6TUNQOjpIb3N0Jyk7CiAgICBteSAkQ2hhdFVSTCAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpDaGF0OjpFbmRwb2ludCcpOwogICAgbXkgJENoZWNrSVAgICA9ICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnKTsKICAgIG15ICRUaWNrZXRJRCAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICk7CiAgICBteSAkQXJ0aWNsZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FydGljbGVJRCcgKTsKICAgIG15ICVVc2VyRGF0YSAgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0gKTsKICAgIG15ICRGUUROICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZRRE4nKTsKCiAgICAjIG9ubHkgZ2VuZXJhdGUgYW4gT1RPQk8gc2Vzc2lvbiBpZCBpZiBhc2tlZCBmb3IKICAgIGlmICggJENoYXRVUkwgPX4gL1x7XHtPVE9CT19TSURcfVx9LyApIHsKCiAgICAgICAgIyBkZXRlcm1pbmUgcmVtb3RlIElQIG9mIG1jcCBzZXJ2ZXIgdG8gYmluZCBzZXNzaW9uIHRvCiAgICAgICAgbXkgJFJlbW90ZUlQID0gJ25vbmUnOwoKICAgICAgICBpZiAoJENoZWNrSVApIHsKCiAgICAgICAgICAgICRSZW1vdGVJUCA9ICRTZWxmLT5HZXRNQ1BSZW1vdGVBZGRyKCBNQ1AgPT4gJE1DUEhvc3QgKTsKICAgICAgICAgICAgaWYgKCAhJFJlbW90ZUlQICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkNhbm5vdCByZXNvbHZlIElQIGFkZHJlc3Mgb2YgTUNQLiBVbmFibGUgdG8gY3JlYXRlIGEgY2hhdCBzZXNzaW9uLiIgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgbWNwIGJvdW5kIHdlYnNlcnZpY2Ugc2Vzc2lvbgogICAgICAgIG15ICRTZXNzaW9uSUQgPSAkQXV0aFNlc3Npb25PYmplY3QtPkNyZWF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgJVVzZXJEYXRhLAogICAgICAgICAgICBVc2VyTGFzdFJlcXVlc3QgPT4gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKSwKICAgICAgICAgICAgVXNlclR5cGUgICAgICAgID0+ICdVc2VyJywKICAgICAgICAgICAgU2Vzc2lvblNvdXJjZSAgID0+ICdHZW5lcmljSW50ZXJmYWNlJywKICAgICAgICAgICAgUmVtb3RlQWRkciAgICAgID0+ICRSZW1vdGVJUCwKICAgICAgICApOwogICAgICAgIGlmICggISRTZXNzaW9uSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJDYW5ub3QgY3JlYXRlIG5ldyBjaGF0IHNlc3Npb24uIiApOwogICAgICAgIH0KCiAgICAgICAgJFNlc3Npb25JRCA9IHVyaV9lc2NhcGVfdXRmOCgkU2Vzc2lvbklEKTsKICAgICAgICAkQ2hhdFVSTCA9fiBzL1x7XHtPVE9CT19TSURcfVx9L290b2JvX3NpZFwlM0QkU2Vzc2lvbklELzsKICAgIH0KCiAgICAkQ2hhdFVSTCA9fiBzL1x7XHtGUUROXH1cfS8kRlFETi87CgogICAgaWYgKCRUaWNrZXRJRCkgewogICAgICAgICRDaGF0VVJMID1+IHMvXHtce1RJQ0tFVF9JRFx9XH0vK3RpY2tldF9pZFwlM0QkVGlja2V0SUQvOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJENoYXRVUkwgPX4gcy9ce1x7VElDS0VUX0lEXH1cfS8vOwogICAgfQoKICAgIGlmICgkQXJ0aWNsZUlEKSB7CiAgICAgICAgJENoYXRVUkwgPX4gcy9ce1x7QVJUSUNMRV9JRFx9XH0vK2FydGljbGVfaWRcJTNEJEFydGljbGVJRC87CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQ2hhdFVSTCA9fiBzL1x7XHtBUlRJQ0xFX0lEXH1cfS8vOwogICAgfQoKICAgICMgcmVkaXJlY3QgdG8gY2hhdAogICAgJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgRXh0VVJMID0+ICRDaGF0VVJMLAogICAgKTsKICAgIHJldHVybjsKfQoKc3ViIEdldE1DUFJlbW90ZUFkZHIgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1DUCA9ICRQYXJhbXsnTUNQJ30gfHwgJ21jcCc7CgogICAgbXkgJFJlc29sdmVyID0gTmV0OjpETlM6OlJlc29sdmVyLT5uZXc7CiAgICAkUmVzb2x2ZXItPnRjcF90aW1lb3V0KDEwKTsKICAgICRSZXNvbHZlci0+dWRwX3RpbWVvdXQoMTApOwoKICAgIG15ICRSZXN1bHQgPSAkUmVzb2x2ZXItPnNlYXJjaCgkTUNQKTsKICAgIHJldHVybiBpZiAhJFJlc3VsdDsKCiAgICBSRUNPUkQ6CiAgICBmb3IgbXkgJFJlY29yZCAoICRSZXN1bHQtPmFuc3dlciApIHsKCiAgICAgICAgaWYgKCAkUmVjb3JkLT5jYW4oJ2FkZHJlc3MnKSApIHsKCiAgICAgICAgICAgIHJldHVybiAkUmVjb3JkLT5hZGRyZXNzOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/ArticleAction/AgentTicketAIChat.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEFJQ2hhdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKIyBvcHRpb25hbCBBY2xBY3Rpb25Mb29rdXAKc3ViIENoZWNrQWNjZXNzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0IEFydGljbGUgQ2hhbm5lbE5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgYmFzaWMgY29uZGl0aW9ucwogICAgaWYgKCAkUGFyYW17Q2hhbm5lbE5hbWV9IGVxICdJbnRlcm5hbCcgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgY2hlY2sgaWYgbW9kdWxlIGlzIHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudFRpY2tldEFJQ2hhdH07CgogICAgIyBjaGVjayBBY2wKICAgIHJldHVybiBpZiAhJFBhcmFte0FjbEFjdGlvbkxvb2t1cH0tPntBZ2VudFRpY2tldEFJQ2hhdH07CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBHZXRDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXQgQXJ0aWNsZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJExpbmsgICAgICAgID0gIkFjdGlvbj1BZ2VudFRpY2tldEFJQ2hhdDtUaWNrZXRJRD0kUGFyYW17VGlja2V0fS0+e1RpY2tldElEfTtBcnRpY2xlSUQ9JFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSI7CiAgICBteSAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ0FJJyk7CgogICAgbXkgJU1lbnVJdGVtID0gKAogICAgICAgIEl0ZW1UeXBlICAgID0+ICdMaW5rJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAkRGVzY3JpcHRpb24sCiAgICAgICAgTmFtZSAgICAgICAgPT4gJERlc2NyaXB0aW9uLAogICAgICAgIENsYXNzICAgICAgID0+ICdBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24nLAogICAgICAgIExpbmsgICAgICAgID0+ICRMaW5rLAogICAgKTsKCiAgICByZXR1cm4gKCBcJU1lbnVJdGVtICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Dashboard/OtoboAIDashboard.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6Ok90b2JvQUlEYXNoYm9hcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgcGFyYW1ldGVycwogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZyBOYW1lIFVzZXJJRCkpIHsKICAgICAgICBkaWUgIkdvdCBubyAkTmVlZGVkISIgaWYgKCAhJFNlbGYtPnskTmVlZGVkfSApOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFByZWZlcmVuY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFBhcmFtczsKCiAgICByZXR1cm4gQFBhcmFtczsKfQoKc3ViIENvbmZpZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgaWYgZnJvbnRlbmQgbW9kdWxlIG9mIGxpbmsgaXMgdXNlZAogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ317TGlua30gJiYgJFNlbGYtPntDb25maWd9e0xpbmt9ID1+IC9BY3Rpb249KC4rPykoWyY7XS4rP3wpJC8gKSB7CiAgICAgICAgbXkgJEFjdGlvbiA9ICQxOwogICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn0gKSB7CiAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfXtMaW5rfSA9ICcnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAoKICAgICAgICAjIERvbid0IGNhY2hlIHRoaXMgZ2xvYmFsbHkgYXMgaXQgY29udGFpbnMgSlMgdGhhdCBpcyBub3QgaW5zaWRlIG9mIHRoZSBIVE1MLgogICAgICAgIENhY2hlVFRMID0+IHVuZGVmLAogICAgICAgIENhY2hlS2V5ID0+IHVuZGVmLAogICAgKTsKfQoKc3ViIEZpbHRlckNvbnRlbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRQb2xsaW5nSW50ZXJ2YWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ090b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpQb2xsaW5nSW50ZXJ2YWwnKSB8fCAzMDsKICAgIG15ICRUaW1lb3V0SW50ZXJ2YWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ090b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpUaW1lb3V0SW50ZXJ2YWwnKSB8fCAzMDA7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1BvbGxpbmdJbnRlcnZhbCcsCiAgICAgICAgVmFsdWUgPT4gJFBvbGxpbmdJbnRlcnZhbCwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpbWVvdXRJbnRlcnZhbCcsCiAgICAgICAgVmFsdWUgPT4gJFRpbWVvdXRJbnRlcnZhbCwKICAgICk7CiAgICBteSAkQ2FjaGVPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICBteSAkQ2FjaGVLZXlSZXF1ZXN0ID0gJ090b2JvQUktQ3VzdG9tLVJlcXVlc3QtJyAuICRTZWxmLT57VXNlcklEfTsKICAgIG15ICRSZXF1ZXN0RXhpc3RzICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICdPdG9ib0FJJywKICAgICAgICBLZXkgID0+ICRDYWNoZUtleVJlcXVlc3QsCiAgICApOwoKICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgUXVlc3Rpb24gPT4gJFJlcXVlc3RFeGlzdHMsCiAgICAgICAgfQogICAgKTsKCiAgICByZXR1cm4gJENvbnRlbnQ7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/AISimilarTickets.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKERhdGEuV2lkZ2V0VGl0bGUpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTaW1pbGFyVGlja2V0cyIpICVdClslIEZPUkVBQ0ggVGlja2V0IElOIERhdGEgJV0KICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iWyUgVGlja2V0LnBhZ2VfY29udGVudCB8IGh0bWwgJV0iIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTogbm93cmFwOyIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ii9vdG9iby9pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPVslIFRpY2tldC5tZXRhZGF0YS5zb3VyY2VfaWQgfCB1cmwgJV0iPgogICAgICAgICAgICAgICAgICAgIFslIFRpY2tldC5wYWdlX2NvbnRlbnQgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9hPgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNpbWlsYXJUaWNrZXRzIikgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AdminDynamicFieldTextAreaAI.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSW52aXNpYmxlVGV4dCI+CiAgICAgICAgWyUgVHJhbnNsYXRlKCJEeW5hbWljIEZpZWxkcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGVOYW1lKSB8IGh0bWwgJV06CiAgICAgICAgWyUgVVNFIFRpdGxlID0gU3RyaW5nKERhdGEuQnJlYWRjcnVtYlRleHQpICVdCiAgICAgICAgWyUgVGl0bGUgfCBodG1sICVdCiAgICA8L2gxPgoKICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnRHluYW1pYyBGaWVsZHMgTWFuYWdlbWVudCcpLAogICAgICAgICAgICAgICAgTGluayA9PiAnQWRtaW5EeW5hbWljRmllbGQnIF8gRGF0YS5GaWx0ZXJTdHJnLAogICAgICAgICAgICB9LAogICAgICAgIF0KICAgICVdCgogICAgWyUgVVNFIEJyZWFkY3J1bWJOYW1lID0gU3RyaW5nKFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGVOYW1lKSkgJV0KCiAgICBbJSBTV0lUQ0ggRGF0YS5Nb2RlICVdCiAgICAgICAgWyUgQ0FTRSAnQWRkJyAlXQogICAgICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBCcmVhZGNydW1iTmFtZS5hcHBlbmQoICc6ICcsIFRpdGxlICkgfSkgJV0KICAgICAgICBbJSBDQVNFICdDaGFuZ2UnICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEJyZWFkY3J1bWJOYW1lLmFwcGVuZCggJzogJywgVGl0bGUsICcgLSAnLCBEYXRhLk5hbWUgKSB9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pbkR5bmFtaWNGaWVsZFslIERhdGEuRmlsdGVyU3RyZyAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gYmFjayB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGZvcm0gaWQ9IkVudGl0eVVwZGF0ZSIgYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWRtaW5EeW5hbWljRmllbGRUZXh0QXJlYUFJIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5Nb2RlIHwgaHRtbCAlXUFjdGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik9iamVjdFR5cGUiIHZhbHVlPSJbJSBEYXRhLk9iamVjdFR5cGUgfCBodG1sICVdIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRmllbGRUeXBlIiB2YWx1ZT0iWyUgRGF0YS5GaWVsZFR5cGUgfCBodG1sICVdIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT2JqZWN0VHlwZUZpbHRlciIgdmFsdWU9IlslIERhdGEuT2JqZWN0VHlwZUZpbHRlciB8IGh0bWwgJV0iPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJOYW1lc3BhY2VGaWx0ZXIiIHZhbHVlPSJbJSBEYXRhLk5hbWVzcGFjZUZpbHRlciB8IGh0bWwgJV0iPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiR2VuZXJhbCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxheW91dEdyaWQgQ29sdW1uc1dpdGhTcGFjaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU2l6ZTFvZjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJOYW1lIiBjbGFzcz0iVzUwcGMgWyUgRGF0YS5OYW1lU2VydmVyRXJyb3IgfCBodG1sICVdIFslIERhdGEuU2hvd1dhcm5pbmcgfCBodG1sICVdICBWYWxpZGF0ZV9BbHBoYW51bWVyaWMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMjAwIiB2YWx1ZT0iWyUgRGF0YS5QbGFpbkZpZWxkTmFtZSB8IGh0bWwgJV0iIG5hbWU9Ik5hbWUiIFslIERhdGEuUmVhZG9ubHlJbnRlcm5hbEZpZWxkIHwgaHRtbCAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLCBhbmQgdGhlIHZhbHVlIHNob3VsZCBiZSBhbHBoYWJldGljIGFuZCBudW1lcmljIGNoYXJhY3RlcnMgb25seS4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZShEYXRhLk5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiTXVzdCBiZSB1bmlxdWUgYW5kIG9ubHkgYWNjZXB0IGFscGhhYmV0aWMgYW5kIG51bWVyaWMgY2hhcmFjdGVycy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJXYXJuaW5nIEhpZGRlbiI+WyUgVHJhbnNsYXRlKCJDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwgcmVxdWlyZSBtYW51YWwgY2hhbmdlcyBpbiB0aGUgc3lzdGVtLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkxhYmVsIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIkxhYmVsIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkxhYmVsIiBjbGFzcz0iVzUwcGMgWyUgRGF0YS5MYWJlbFNlcnZlckVycm9yIHwgaHRtbCAlXSBWYWxpZGF0ZV9SZXF1aXJlZCIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIyMDAiIHZhbHVlPSJbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXSIgbmFtZT0iTGFiZWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTGFiZWxFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkxhYmVsU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbFNlcnZlckVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJUaGlzIGlzIHRoZSBuYW1lIHRvIGJlIHNob3duIG9uIHRoZSBzY3JlZW5zIHdoZXJlIHRoZSBmaWVsZCBpcyBhY3RpdmUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iRmllbGRPcmRlciI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJGaWVsZCBvcmRlciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5EeW5hbWljRmllbGRPcmRlclN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRmllbGRPcmRlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIG51bWVyaWMuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGaWVsZE9yZGVyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5GaWVsZE9yZGVyU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlRoaXMgaXMgdGhlIG9yZGVyIGluIHdoaWNoIHRoaXMgZmllbGQgd2lsbCBiZSBzaG93biBvbiB0aGUgc2NyZWVucyB3aGVyZSBpcyBhY3RpdmUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZE5hbWVzcGFjZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTmFtZXNwYWNlIj5bJSBUcmFuc2xhdGUoIk5hbWVzcGFjZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lc3BhY2VTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlRoaXMgaXMgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0aGlzIGZpZWxkIHdpbGwgYmUgdXNlZCBhcyBwcmVmaXggd2l0aCB0aGUgbmFtZS4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkTmFtZXNwYWNlIikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVG9vbHRpcFZhbHVlIj5bJSBUcmFuc2xhdGUoIlRvb2x0aXAgbWVzc2FnZToiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJUb29sdGlwVmFsdWUiIGNsYXNzPSJXNzVwYyIgcm93cz0iMyIgY29scz0iODAiIG5hbWU9IlRvb2x0aXAiPlslIERhdGEuVG9vbHRpcCB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJUaGlzIGlzIHRoZSB0b29sdGlwIG1lc3NhZ2Ugc2hvd24gaW5zaWRlIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTaXplMW9mMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZGl0eVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVxdWlyZWRWYWxpZE9wdGlvblNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJSZXF1aXJlZFZhbGlkT3B0aW9uU2VydmVyRXJyb3IiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJblNldHRpbmdWYWxpZE9wdGlvblNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIklzIG5vdCBwb3NzaWJsZSB0byBpbnZhbGlkYXRlIHRoaXMgZW50cnksIGFsbCBjb25maWcgc2V0dGluZ3MgaGF2ZSB0byBiZSBjaGFuZ2VkIGJlZm9yZWhhbmQuIikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJJblNldHRpbmdWYWxpZE9wdGlvblNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJGaWVsZFR5cGVOYW1lIj5bJSBUcmFuc2xhdGUoIkZpZWxkIHR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iRmllbGRUeXBlTmFtZSIgcmVhZG9ubHkgY2xhc3M9Ilc1MHBjIiB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjIwMCIgdmFsdWU9IlslIFRyYW5zbGF0ZShEYXRhLkZpZWxkVHlwZU5hbWUpIHwgaHRtbCAlXSIgbmFtZT0iRmllbGRUeXBlTmFtZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik9iamVjdFR5cGVOYW1lIj5bJSBUcmFuc2xhdGUoIk9iamVjdCB0eXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik9iamVjdFR5cGVOYW1lIiByZWFkb25seSBjbGFzcz0iVzUwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMjAwIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0VHlwZU5hbWUpIHwgaHRtbCAlXSIgbmFtZT0iT2JqZWN0VHlwZU5hbWUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW50ZXJuYWxGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW50ZXJuYWxGaWVsZCI+WyUgVHJhbnNsYXRlKCJJbnRlcm5hbCBmaWVsZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJJbnRlcm5hbEZpZWxkIiByZWFkb25seSBjbGFzcz0iVzUwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMSIgdmFsdWU9IlslIERhdGEuSW50ZXJuYWxGaWVsZCB8IGh0bWwgJV0iIG5hbWU9IkludGVybmFsRmllbGQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHByb3RlY3RlZCBhbmQgY2FuJ3QgYmUgZGVsZXRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnRlcm5hbEZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZEluU3lzQ29uZmlnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik9sZE5hbWUiIGlkPSJPbGROYW1lIiB2YWx1ZT0iWyUgRGF0YS5PbGROYW1lIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVXBkYXRlRW50aXR5IiBpZD0iVXBkYXRlRW50aXR5IiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJFbnRpdHlJblNldHRpbmciIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlRleHREaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJUaGlzIGR5bmFtaWMgZmllbGQgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIGNvbmZpZyBzZXR0aW5nczoiKSB8IGh0bWwgJV08L2gxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZEluU3lzQ29uZmlnUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iSW5TeXNDb25maWdTZXR0aW5nIj5bJSBEYXRhLlNldHRpbmdOYW1lICVdPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZEluU3lzQ29uZmlnUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkSW5TeXNDb25maWciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRJblN5c0NvbmZpZ0RpcnR5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN5c0NvbmZpZ0RpcnR5IiBpZD0iU3lzQ29uZmlnRGlydHkiIHZhbHVlPSIxIi8+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRJblN5c0NvbmZpZ0RpcnR5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoRGF0YS5GaWVsZFR5cGVOYW1lKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJGaWVsZCBTZXR0aW5ncyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29sc1Jvd3NWYWx1ZXMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSb3dzIj5bJSBUcmFuc2xhdGUoIk51bWJlciBvZiByb3dzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iUm93cyIgY2xhc3M9IlcyNXBjIFZhbGlkYXRlX051bWJlciBbJSBEYXRhLlJvd3NTZXJ2ZXJFcnJvciAlXSIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIzIiB2YWx1ZT0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgbmFtZT0iUm93cyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUm93c0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIG11c3QgYmUgbnVtZXJpYy4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSb3dzU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5Sb3dzU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJTcGVjaWZ5IHRoZSBoZWlnaHQgKGluIGxpbmVzKSBmb3IgdGhpcyBmaWVsZCBpbiB0aGUgZWRpdCBtb2RlLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29scyI+WyUgVHJhbnNsYXRlKCJOdW1iZXIgb2YgY29scyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkNvbHMiIGNsYXNzPSJXMjVwYyBWYWxpZGF0ZV9OdW1iZXIgWyUgRGF0YS5Db2xzU2VydmVyRXJyb3IgJV0iIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMyIgdmFsdWU9IlslIERhdGEuQ29scyB8IGh0bWwgJV0iIG5hbWU9IkNvbHMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNvbHNFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBtdXN0IGJlIG51bWVyaWMuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29sc1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKERhdGEuQ29sc1NlcnZlckVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiU3BlY2lmeSB0aGUgd2lkdGggKGluIGNoYXJhY3RlcnMpIGZvciB0aGlzIGZpZWxkIGluIHRoZSBlZGl0IG1vZGUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQ29sc1Jvd3NWYWx1ZXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29uZmlnUGFyYW1Sb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLkNvbmZpZ1BhcmFtTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5Db25maWdQYXJhbU5hbWUgfCBodG1sICVdRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQsIGFuZCB0aGUgdmFsdWUgc2hvdWxkIGJlIGFscGhhYmV0aWMgYW5kIG51bWVyaWMgY2hhcmFjdGVycyBvbmx5LiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuQ29uZmlnUGFyYW1OYW1lIHwgaHRtbCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKERhdGEuU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRXhwbGFuYXRpb24pIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbmZpZ1BhcmFtUm93IikgJV0KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5Nb2RlID09ICdDaGFuZ2UnICVdCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pbkR5bmFtaWNGaWVsZFslIERhdGEuRmlsdGVyU3RyZyAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/DynamicField/Agent/TextAreaAI.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8dGV4dGFyZWEgY2xhc3M9IlslIERhdGEuRmllbGRDbGFzcyAlXSIgaWQ9IlslIERhdGEuRmllbGROYW1lICVdIiBuYW1lPSJbJSBEYXRhLkZpZWxkTmFtZSAlXSIgdGl0bGU9IlslIERhdGEuRmllbGRMYWJlbEVzY2FwZWQgJV0iIHJvd3M9IlslIERhdGEuUm93c051bWJlciAlXSIgY29scz0iWyUgRGF0YS5Db2xzTnVtYmVyICVdIiBkYXRhLW1heGxlbmd0aD0iWyUgRGF0YS5NYXhMZW5ndGggJV0iIHJlYWRvbmx5PlslIERhdGEuVmFsdWVFc2NhcGVkICVdPC90ZXh0YXJlYT4KPGRpdiBpZD0iWyUgRGF0YS5EaXZJRCAlXSIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgPHA+CiAgICAgICAgWyUgRGF0YS5FcnJvck1lc3NhZ2UyICVdIFslIERhdGEuRXJyb3JNZXNzYWdlMyAlXQogICAgPC9wPgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/OtoboAIDashboard.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJDb21wb3NlUmVxdWVzdCIgaWQ9IkNvbXBvc2VSZXF1ZXN0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CgogICAgICAgIDxkaXYgY2xhc3M9IlJvdyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDZWxsIiBzdHlsZT0iZ3JpZC1jb2x1bW46IDEgLyBzcGFuIDEiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iT3RvYm9BSVRleHRBcmVhIiB0aXRsZT0iWW91ciBxdWVzdGlvbj8iIHBsYWNlaG9sZGVyPSJZb3VyIHF1ZXN0aW9uPyIgaWQ9IlJlcXVlc3QiIG5hbWU9IlJlcXVlc3QiIHJvd3M9IjUiIGNvbHM9IlslIENvbmZpZygiT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OlRleHRBcmVhUXVlc3Rpb24iKSAlXSIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuQm9keUludmFsaWQgfCBodG1sICVdIj5bJSBEYXRhLlF1ZXN0aW9uICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSZXF1ZXN0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlcXVlc3RTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iUmVwbHlCb3giIGNsYXNzPSJSb3ciIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkQ2VsbCIgc3R5bGU9ImdyaWQtY29sdW1uOiAxIC8gc3BhbiAxIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9Ik90b2JvQUlUZXh0QXJlYSIgaWQ9IlJlcGx5IiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJPdG9ib0FJRGFzaGJvYXJkOjpGcm9udGVuZDo6VGV4dEFyZWFRdWVzdGlvbiIpICVdIiByZWFkb25seSBjbGFzcz0iUmVhZG9ubHkgUmljaFRleHQiPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmVxdWVzdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSZXF1ZXN0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJTdWJtaXRRdWVzdGlvbiIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZW5kIHF1ZXN0aW9uIikgfCBodG1sICVdIChnKSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2VuZCByZXF1ZXN0IikgfCBodG1sICVdIiA+CiAgICAgICAgICAgICAgICA8c3Bhbj48c3Bhbj48aSBjbGFzcz0ib29vZm8gb29vZm8tYWRkIj48L2k+WyUgVHJhbnNsYXRlKCJTZW5kIHJlcXVlc3QiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJDYW5jZWxRdWVzdGlvbiIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZW5kIHF1ZXN0aW9uIikgfCBodG1sICVdIChnKSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdIiA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxpbWcgaWQ9Ik90b2JvQUlMb2FkZXIiIHNyYz1bJSBDb25maWcoIkZyb250ZW5kOjpXZWJQYXRoIikgJV1za2lucy9BZ2VudC9kZWZhdWx0L2ltZy9sb2FkZXIuZ2lmIGFsdD0iWyUgVHJhbnNsYXRlKCJXYWl0aW5nIHJlcGx5IikgfCBodG1sICVdIi8+CiAgICAgICAgPC9kaXY+CiAgICA8L2ZpZWxkc2V0Pgo8L2Zvcm0+Cg==</File>
        <File Location="Kernel/Output/HTML/TicketZoom/AISimilarTickets.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBSVNpbWlsYXJUaWNrZXRzOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7Cgp1c2UgcGFyZW50ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6QmFzZSc7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJFVzZXJPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgbXkgJVRpY2tldCAgICA9ICRQYXJhbXtUaWNrZXR9LT4lKjsKICAgIG15ICVBY2xBY3Rpb24gPSAkUGFyYW17QWNsQWN0aW9ufS0+JSo7CiAgICBteSAkVGlja2V0SUQgID0gJFRpY2tldHtUaWNrZXRJRH07CiAgICBteSAkQXJ0aWNsZUlEOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgQEFydGljbGVzICAgICAgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICBPbmx5Rmlyc3QgPT4gMSwKICAgICk7CiAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgJEFydGljbGVJRCA9ICRBcnRpY2xlc1swXXtBcnRpY2xlSUR9OwogICAgfQogICAgcmV0dXJuICcnIGlmICEkQXJ0aWNsZUlEOwoKICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgKTsKCiAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgKTsKCiAgICByZXR1cm4gJycgaWYgISRBcnRpY2xle1N1YmplY3R9ICYmICEkQXJ0aWNsZXtCb2R5fTsKCiAgICBteSAkTW9yZUxpa2VUaGlzID0gKCAkQXJ0aWNsZXtTdWJqZWN0fSAvLyAnJyApIC4gIlxuIiAuICggJEFydGljbGV7Qm9keX0gLy8gJycgKTsKCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtXaWRnZXRUaXRsZX0gPSBUcmFuc2xhdGFibGUoJ1NpbWlsYXIgVGlja2V0cycpOwoKICAgICMgZ2V0IHpvb20gc2V0dGluZ3MgZGVwZW5kaW5nIG9uIHRpY2tldCB0eXBlCiAgICAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpOwoKICAgICMgc2ltaWxhciBzZWFyY2ggcXVlcnkgdmlhIG90b2JvLWFpLXJhZyBJbnZva2VyCiAgICBteSAkUXVldWVUb1JBR01hcHBpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OlF1ZXVlVG9SQUdNYXBwaW5nJykgLy8ge307CiAgICBteSAkUkFHICAgICAgICAgICAgICAgPSAkUXVldWVUb1JBR01hcHBpbmctPnsgJFRpY2tldHtRdWV1ZX0gfSAgICAgICAgICAgLy8gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpEZWZhdWx0UkFHJyk7CgogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwogICAgbXkgJEFJV2Vic2VydmljZSAgICAgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRBSVdlYnNlcnZpY2UgKSB7CgogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBteSAkV2Vic2VydmljZUlEID0gJEFJV2Vic2VydmljZS0+e0lEfTsKCiAgICBteSAkVGlja2V0UGFpcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpLT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICdRdWVyeUVtYmVkZGluZ3MnLAogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIENvbGxlY3Rpb24gPT4gJ3RpY2tldF9wYWlycycsCiAgICAgICAgICAgIExhYmVscyAgICAgPT4gWyRSQUddLAogICAgICAgICAgICBGdWxsdGV4dCAgID0+IDAsCiAgICAgICAgICAgIExpbWl0ICAgICAgPT4gNSwKICAgICAgICAgICAgUXVlcnkgICAgICA9PiAkTW9yZUxpa2VUaGlzLAogICAgICAgIH0KICAgICk7CgogICAgbXkgJFRpY2tldENodW5rcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJ1F1ZXJ5RW1iZWRkaW5ncycsCiAgICAgICAgQXN5bmNocm9ub3VzID0+IDAsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgQ29sbGVjdGlvbiA9PiAndGlja2V0X2NodW5rcycsCiAgICAgICAgICAgIExhYmVscyAgICAgPT4gWyRSQUddLAogICAgICAgICAgICBGdWxsdGV4dCAgID0+IDAsCiAgICAgICAgICAgIExpbWl0ICAgICAgPT4gNSwKICAgICAgICAgICAgUXVlcnkgICAgICA9PiAkTW9yZUxpa2VUaGlzLAogICAgICAgIH0KICAgICk7CgogICAgbXkgJVRpY2tldHM7CgogICAgZm9yIG15ICRJdGVtICggJFRpY2tldFBhaXJzLT57RGF0YX0tPkAqICkgewoKICAgICAgICBteSAkSXRlbVRpY2tldElEID0gJEl0ZW0tPnttZXRhZGF0YX0tPntzb3VyY2VfaWR9OwoKICAgICAgICBpZiAoICRJdGVtVGlja2V0SUQgbmUgJFRpY2tldElEICkgewoKICAgICAgICAgICAgJFRpY2tldHN7JEl0ZW1UaWNrZXRJRH0gPSAkSXRlbTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRJdGVtICggJFRpY2tldENodW5rcy0+e0RhdGF9LT5AKiApIHsKCiAgICAgICAgbXkgJEl0ZW1UaWNrZXRJRCA9ICRJdGVtLT57bWV0YWRhdGF9LT57c291cmNlX2lkfTsKCiAgICAgICAgaWYgKCAkSXRlbVRpY2tldElEIG5lICRUaWNrZXRJRCApIHsKICAgICAgICAgICAgJFRpY2tldHN7JEl0ZW1UaWNrZXRJRH0gPSAkSXRlbTsKICAgICAgICB9CiAgICB9CgogICAgbXkgQERhdGEgPSB2YWx1ZXMgJVRpY2tldHM7CgogICAgcmV0dXJuICcnIGlmIHNjYWxhciBARGF0YSA9PSAwOwoKICAgICMgcmVuZGVyIHRoZSB3aWRnZXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NpbWlsYXJUaWNrZXRzJywKICAgICAgICBEYXRhID0+IFxARGF0YSwKICAgICk7CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbS9BSVNpbWlsYXJUaWNrZXRzJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyAlUGFyYW0sICVUaWNrZXQsICVBY2xBY3Rpb24gfSwKICAgICk7CgogICAgcmV0dXJuIHsKICAgICAgICBPdXRwdXQgPT4gJE91dHB1dCwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/OtoboAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkFzeW5jaHJvbm91c0V4ZWN1dG9yKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPdG9ib0FJIC0gZ2V0IE90b2JvQUkgR2V0QW5zd2VyIGZvciBhIFF1ZXN0aW9uIG9yIGFuIEFydGljbGVJRAoKPWhlYWQxIERFU0NSSVBUSU9OCgpjYWxsIE90b2JvQUkgR2V0QW5zd2VyIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGEgT3RvYm9BSSBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIG15ICRPdG9ib0FJT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknKTsKCj1jdXQKCnN1YiBuZXcgewoKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIG15ICRTdHJpcFNpZ25hdHVyZVJlZ0V4ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpTdHJpcFNpZ25hdHVyZVJlZ2V4Jyk7CiAgICBpZiAoJFN0cmlwU2lnbmF0dXJlUmVnRXgpIHsKCiAgICAgICAgbXkgJFJlZ2V4ID0gcXIvJFN0cmlwU2lnbmF0dXJlUmVnRXgvbTsKICAgICAgICAkU2VsZi0+e1N0cmlwU2lnbmF0dXJlUmVnRXh9ID0gJFJlZ2V4OwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldEFuc3dlckFzeW5jKCkKCkdldCBhbiBPdG9ib0FJIEFuc3dlciBhc3luY2hyb25vdXNseS4KCiAgICBteSAkU3VjY2VzcyA9ICRPdG9ib0FJT2JqZWN0LT5HZXRBbnN3ZXJBc3luYygKICAgICAgICBRdWVzdGlvbiA9PiAnPHNvbWUgYWkgcXVlc3Rpb24+JywgICMgdGhlIHF1ZXN0aW9uIHRvIGFzayB0aGUgTExNCiAgICAgICAgT2JqZWN0SUQgPT4gJEFydGljbGVJRCwgICAgICAgICAgICAjIGlmIGdpdmVuLCBjb25zdHJ1Y3QgcXVlc3Rpb24gZnJvbSBBcnRpY2xlIFN1YmplY3QrQm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHRzIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgQXJ0aWNsZXMgQUlSZXN1bHQgRHluYW1pY0ZpZWxkCiAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwgICAgICAgICAgICAgICAjIGlmIHNwZWNpZmllZCwgYW5kIHRoaXMgd2FzIGEgcXVlc3Rpb24sIHBvcHVsYXRlIHVzZXIgc3BlY2ZpYyBjYWNoZSBrZXkKICAgICk7Cgo9Y3V0CgpzdWIgR2V0QW5zd2VyQXN5bmMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17T2JqZWN0SUR9ICYmICEkUGFyYW17UXVlc3Rpb259ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgZWl0aGVyIE9iamVjdElEIG9yIFF1ZXN0aW9uIHBhcmFtLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiT3RvYm9BSTo6R2V0QW5zd2VyQXN5bmMgY2FsbCBpbml0aWF0ZWQuIiwKICAgICk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+QXN5bmNDYWxsKAogICAgICAgIE9iamVjdE5hbWUgICAgICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknLCAgICAjIG9wdGlvbmFsLCBpZiBub3QgZ2l2ZW4gdGhlIG9iamVjdCBpcyB1c2VkIGZyb20gd2hlcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQKICAgICAgICBGdW5jdGlvbk5hbWUgICAgICAgICAgICAgPT4gJ0dldEFuc3dlcicsICAgICAgICAgICAgICAgICAgIyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZQogICAgICAgIEZ1bmN0aW9uUGFyYW1zICAgICAgICAgICA9PiBcJVBhcmFtLCAgICAgICAgICAgICAgICAgICAgICAjIGEgcmVmIHdpdGggdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbgogICAgICAgIEF0dGVtcHRzICAgICAgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkZWZhdWx0OiAxLCBudW1iZXIgb2YgdHJpZXMgdG8gbG9jayB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHRhc2sgYnkgdGhlIHNjaGVkdWxlcgogICAgICAgIE1heGltdW1QYXJhbGxlbEluc3RhbmNlcyA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkZWZhdWx0OiAwICh1bmxpbWl0ZWQpLCBudW1iZXIgb2Ygc2FtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZnVuY3Rpb24gY2FsbHMgZnJvbSB0aGUgc2FtZSBvYmplY3QgdGhhdCBjYW4gYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSW5pdGlhbGl6ZSBhc3luYyBjYWxsIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgR2V0QW5zd2VyKCkKCkdldCBhbiBPdG9ib0FJIEFuc3dlciBzeW5jaHJvbm91c2x5LiBJZiBjYWxsZWQgZnJvbSBHZXRBbnN3ZXJBc3luYygpLCB0aGlzIHdpbGwgaGFwcGVuIG9uIGEgRGFlbW9uIHRocmVhZC4KCiAgICBteSAkUmVzdWx0ID0gJE90b2JvQUlPYmplY3QtPkdldEFuc3dlcigKICAgICAgICBRdWVzdGlvbiAgPT4gJzxzb21lIGFpIHF1ZXN0aW9uPicsICMgdGhlIHF1ZXN0aW9uIHRvIGFzayB0aGUgTExNCiAgICAgICAgT2JqZWN0SUQgID0+ICRBcnRpY2xlSUQsICAgICAgICAgICAjIGlmIGdpdmVuLCBjb25zdHJ1Y3QgcXVlc3Rpb24gZnJvbSBBcnRpY2xlIFN1YmplY3QrQm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHRzIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgQXJ0aWNsZXMgQUlSZXN1bHQgRHluYW1pY0ZpZWxkCiAgICAgICAgVXNlcklEICAgID0+ICRVc2VySUQsICAgICAgICAgICAgICAjIGlmIHNwZWNpZmllZCwgYW5kIHRoaXMgd2FzIGEgcXVlc3Rpb24sIHBvcHVsYXRlIHVzZXIgc3BlY2ZpYyBjYWNoZSBrZXkKICAgICAgICBQZXJzaXN0ICAgPT4gMXwwLCAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIGRlZmF1bHQgaXMgMS4gV2hldGhlciB0byBwZXJzaXN0IFJlc3VsdCBpbiBERiAod2l0aCBPYmplY3RJRCkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcG9wbGF0ZSB0aGUgdXNlIHNwZWNpZmljIGNhY2hlIGtleQogICAgICAgIERvU2NvcmluZyA9PiAwfDEsICAgICAgICAgICAgICAgICAgIyBhc2sgTExNIHRvIGRvIHRoZSBleHRyYSBldmFsdWF0aW9uIHN0ZXAsIHVzZWQgYnkgTWFpbnQ6OkFJOjpTY29yaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnNvbGUgY29tbWFuZAogICAgICAgIFJBRyAgICAgICA9PiAnQ3VzdG9tMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpLCBkZWZhdWx0OiAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OkRlZmF1bHRSQUcnKSwgdGhlIFJBRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBhbnN3ZXIsIG9ubHkgd29ya3MgZm9yIHF1ZXN0aW9uIGNhbGxzCiAgICApOwoKICAgICMgb24gc3VjY2VzcwogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEFuc3dlciA9PiAndGhlIEFJIGFuc3dlciBhcyB0ZXh0JywKICAgICAgICAgICAgU2NvcmUgID0+ICdUaGUgQUkgZXZhbHVhdGlvbiBzY29yZSAlLicsICAjIG9ubHkgaWYgc2NvcmluZyBpcyBhY3RpdmF0ZWQsIHNlZSBTeXNDb25maWcKICAgICAgICB9LAogICAgfQoKICAgICMgb24gZXJyb3IKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgIEVycm9yID0+ICJTb21lRXJyb3JNc2ciLAogICAgfQoKPWN1dAoKc3ViIEdldEFuc3dlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtPYmplY3RJRH0gJiYgISRQYXJhbXtRdWVzdGlvbn0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBlaXRoZXIgT2JqZWN0SUQgb3IgUXVlc3Rpb24gcGFyYW0uIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkRG9TY29yaW5nID0gJFBhcmFte0RvU2NvcmluZ30gLy8gMDsKCiAgICBteSAkRXJyb3JNZXNzYWdlID0gJyc7CiAgICBteSAkU3VjY2VzcyAgICAgID0gMDsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGNoZWNrIHdoZXRoZXIgb3RvYm8gQUkgaXMgZW5hYmxlZCBhbmQgaWYgbm90LCBhY3RpdmF0ZSBpdAogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwoKICAgIG15ICRBSVdlYnNlcnZpY2UgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRBSVdlYnNlcnZpY2UgKSB7CgogICAgICAgICRFcnJvck1lc3NhZ2UgPSAiT1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIFVuYWJsZSB0byBjb250aW51ZS4iOwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAkRXJyb3JNZXNzYWdlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gJFN1Y2Nlc3MsCiAgICAgICAgICAgIEVycm9yICAgPT4gJEVycm9yTWVzc2FnZSwKICAgICAgICB9OwogICAgfQoKICAgICMgU2V0IHRoZSB3ZWJzZXJ2aWNlIGlkCiAgICAkU2VsZi0+e1dlYnNlcnZpY2VJRH0gPSAkQUlXZWJzZXJ2aWNlLT57SUR9OwoKICAgICMgcHJlcGFyZSB0aGUgcXVlc3Rpb24KICAgIG15ICRPYmplY3RJRCA9ICRQYXJhbXtPYmplY3RJRH07CiAgICBteSAkVXNlcklEICAgPSAkUGFyYW17VXNlcklEfTsKICAgIG15ICRQZXJzaXN0ICA9ICRQYXJhbXtQZXJzaXN0fSAvLyAxOwogICAgbXkgJFF1ZXN0aW9uOwogICAgbXkgJFJBRyA9ICRQYXJhbXtSQUd9IC8vICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6RGVmYXVsdFJBRycpOwoKICAgIGlmICgkT2JqZWN0SUQpIHsKCiAgICAgICAgbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICAgICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgICAgIG15ICRBcnRpY2xlSUQgPSAkT2JqZWN0SUQ7CiAgICAgICAgbXkgJFRpY2tldElEICA9ICRBcnRpY2xlT2JqZWN0LT5UaWNrZXRJRExvb2t1cCgKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwoKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICk7CgogICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkQXJ0aWNsZXtCb2R5fSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJObyBib2R5IGluIHRoZSBhcnRpY2xlISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSAkU3ViamVjdCA9ICRBcnRpY2xle1N1YmplY3R9IC8vICcnOwogICAgICAgIG15ICRCb2R5ICAgID0gJEFydGljbGV7Qm9keX0gICAgLy8gJyc7CgogICAgICAgICRCb2R5ICAgICA9ICRTZWxmLT5fU3RyaXBTaWduYXR1cmUoIEJvZHkgPT4gJEJvZHkgKTsKICAgICAgICAkUXVlc3Rpb24gPSAiU3ViamVjdDogIiAuICRTdWJqZWN0IC4gJ1xuXG4nIC4gJEJvZHk7CgogICAgICAgIG15ICRRdWV1ZVRvUkFHTWFwcGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6UXVldWVUb1JBR01hcHBpbmcnKSAvLyB7fTsKICAgICAgICAkUkFHID0gJFF1ZXVlVG9SQUdNYXBwaW5nLT57ICRUaWNrZXREYXRhe1F1ZXVlfSB9IC8vICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6RGVmYXVsdFJBRycpOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICRRdWVzdGlvbiA9ICRQYXJhbXtRdWVzdGlvbn07CiAgICB9CgogICAgbXkgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgIEludm9rZXIgICAgICA9PiAnR2V0QW5zd2VyJywKICAgICAgICBBc3luY2hyb25vdXMgPT4gMCwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBRdWVzdGlvbiAgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICBEb1Njb3JpbmcgPT4gJERvU2NvcmluZywKICAgICAgICAgICAgUkFHICAgICAgID0+ICRSQUcsCiAgICAgICAgfQogICAgKTsKCiAgICBteSAkTWFpbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkRHVtcCAgICAgICA9ICRNYWluT2JqZWN0LT5EdW1wKCRSZXN1bHQpOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgTWVzc2FnZSAgPT4gIk90b2JvQUkgR2V0QW5zd2VyIFJlc3VsdDogJER1bXAiLAogICAgKTsKCiAgICBteSAkQW5zd2VyID0gJFJlc3VsdC0+e0RhdGF9e0Fuc3dlcn0gfHwgIiI7CgogICAgIyBzZXQgZHluYW1pYyBmaWVsZCB2YWx1ZSBpZiBPYmplY3RJRCB3YXMgZ2l2ZW4KICAgIGlmICggJE9iamVjdElEICYmICRQZXJzaXN0ICkgewoKICAgICAgICAjIGZldGNoaW5nIGR5bmFtaWMgZmllbGQgY29uZmlnCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ09UT0JPQUk6OkR5bmFtaWNGaWVsZE9UT0JPQUknKSB8fCAnT1RPQk9BSSc7CiAgICAgICAgbXkgJE9UT0JPQUlERkNvbmZpZyAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICAgICApOwogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRPVE9CT0FJREZDb25maWcpICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pY0ZpZWxkICckRHluYW1pY0ZpZWxkTmFtZScgbm90IGZvdW5kIG9uIHRoZSBzeXN0ZW0hIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5WYWx1ZVNldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRPVE9CT0FJREZDb25maWcsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkT2JqZWN0SUQsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkQW5zd2VyLAogICAgICAgICAgICBEb1dyaXRlICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFVzZXJJRCAmJiAkUGVyc2lzdCApIHsKICAgICAgICBteSAkQ2FjaGVPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgIG15ICRNYWluT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKICAgICAgICBteSAkUXVlc3Rpb25NZDUgICAgICA9ICRNYWluT2JqZWN0LT5NRDVzdW0oIFN0cmluZyA9PiBcJFF1ZXN0aW9uICk7CiAgICAgICAgbXkgJENhY2hlS2V5UXVlc3Rpb24gPSAnT3RvYm9BSS1DdXN0b20tUmVzcG9uc2UtJyAuICRRdWVzdGlvbk1kNTsKICAgICAgICBteSAkVFRMICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OkNhY2hlVFRMJyktPntBbnN3ZXJ9IHx8IDI0OwogICAgICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleVF1ZXN0aW9uLAogICAgICAgICAgICBWYWx1ZSA9PiAkQW5zd2VyLAogICAgICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogJFRUTCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4gJFJlc3VsdC0+e0RhdGF9LAogICAgfTsKfQoKc3ViIF9TdHJpcFNpZ25hdHVyZSB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQm9keSA9ICRQYXJhbXtCb2R5fTsKCiAgICBteSAkUmVnRXggPSAkU2VsZi0+e1N0cmlwU2lnbmF0dXJlUmVnRXh9OwogICAgcmV0dXJuICRCb2R5IGlmICggISRSZWdFeCApOwoKICAgIGlmICggJEJvZHkgPX4gLyRSZWdFeC8gKSB7CgogICAgICAgIHJldHVybiBzdWJzdHIoICRCb2R5LCAwLCAkLVswXSApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgIHJldHVybiAkQm9keTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/System/OtoboAI/Import.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOjpJbXBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgUGF0aDo6Q2xhc3MgICAgcXcoZmlsZSk7CnVzZSBGaWxlOjpGaW5kICAgICBxdyhmaW5kKTsKdXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOwp1c2UgSlNPTiAgICAgICAgICAgcXcoZW5jb2RlX2pzb24gZnJvbV9qc29uKTsKdXNlIFN0b3JhYmxlICAgICAgIHF3KGRjbG9uZSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpBc3luY2hyb25vdXNFeGVjdXRvcik7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6UGFja2FnZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkZBUScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCAtIGluZ2VzdCBUaWNrZXRzIG9yIEZBUXMKCj1oZWFkMSBERVNDUklQVElPTgoKY2FsbCBPdG9ib0FJIEltcG9ydCBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBJbXBvcnQgb2JqZWN0LiBEbyBub3QgdXNlIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIHVzZToKCiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKPWN1dAoKc3ViIG5ldyB7CgogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgJFNlbGYtPkluaXRJbXBvcnQoKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBJbml0SW1wb3J0KCkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIEFJIHdlYiBzZXJ2aWNlIGlzIGVuYWJsZWQgYW5kIGlmIG5vdCwgYWN0aXZhdGUgaXQKICAgIG15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKCiAgICBteSAkQUlXZWJzZXJ2aWNlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VHZXQoCiAgICAgICAgTmFtZSA9PiAnT1RPQk8tQUknLAogICAgKTsKCiAgICBpZiAoICEkQUlXZWJzZXJ2aWNlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgICMgU2V0IHRoZSB3ZWJzZXJ2aWNlIGlkCiAgICAkU2VsZi0+e1dlYnNlcnZpY2VJRH0gPSAkQUlXZWJzZXJ2aWNlLT57SUR9OwoKICAgIGlmICggJEFJV2Vic2VydmljZS0+e1ZhbGlkSUR9ICE9IDEgKSB7CgogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgICMgZmV0Y2ggY29uZmlnCiAgICBteSAkU3RyaXBTaWduYXR1cmVSZWdFeCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6U3RyaXBTaWduYXR1cmVSZWdleCcpOwogICAgaWYgKCRTdHJpcFNpZ25hdHVyZVJlZ0V4KSB7CgogICAgICAgIG15ICRSZWdleCA9IHFyLyRTdHJpcFNpZ25hdHVyZVJlZ0V4L207CiAgICAgICAgJFNlbGYtPntTdHJpcFNpZ25hdHVyZVJlZ0V4fSA9ICRSZWdleDsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE1pZ3JhdGVUaWNrZXRzKCkKClN5bmNocm9uaXplIHRoZSBPVE9CTy1BSSB2ZWN0b3IgREIgd2l0aCB0aGUgdXBkYXRlZCBzdGF0ZXMgb2Ygb25lIG9yIG1vcmUgVGlja2V0cyBmb3Igb25lIG9yIG1vcmUgdXNlLWNhc2VzLgoKcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5NaWdyYXRlVGlja2V0cygKICAgICAgICBUaWNrZXRJRCA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgY29uc2lkZXIgb25seSB0aGlzIHRpY2tldCBmb3IgbWlncmF0aW9uCiAgICAgICAgVXNlQ2FzZXMgPT4gWyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIGNvbnNpZGVyIG9ubHkgdGhlc2UgdXNlLWNhc2VzIGZvciBtaWdyYXRpb24KICAgICAgICAgICAgJ2RlZmF1bHQnLAogICAgICAgICAgICAnc2FsZXMnLAogICAgICAgIF0sCiAgICAgICAgU2FtcGxlICAgICAgID0+ICcvaG9tZS9zYW1wbGUuanNvbicsICAgICMgb3B0aW9uYWwsIGZpbGUgcGF0aCBvciBkaXJlY3RvcnkgdG8gd3JpdGUgYSBzYW1wbGUuanNvbiBjb250YWluaW5nIFRpY2tldElEcyB0byBzYW1wbGUKICAgICAgICBTYW1wbGVOdGggICAgPT4gMTAsICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgc2FtcGxlIHNpemUgKGRlZmF1bHQ6IDEwKQogICAgICAgIFJlZmVyZW5jZSAgICA9PiAnL2hvbWUvc2FtcGxlLmpzb24nLCAgICAjIG9wdGlvbmFsLCBwYXRoIHRvIGFuIGV4aXN0aW5nIHNhbXBsZS5qc29uIGNvbnRhaW5pbmcgVGlja2V0SURzIHRvIHJlZmVyZW5jZQogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkbyBub3QgbWFudWFsbHkgc2V0IHRoaXMsIHVubGVzcyB5b3UgYXJlIGV4cGxpY2l0bHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBydW5uaW5nIHRoZSBSZXF1ZXN0ZXIgaW4gYW4gYXN5bmNocm9ub3VzIGNvbnRleHQgKGRlZmF1bHQ6IDApCiAgICAgICAgQ29uc29sZSAgICAgID0+ICRDb25zb2xlT2JqZWN0LCAgICAgICAgICMgb3B0aW9uYWwsIGdpdmUgcmVhbHRpbWUgc3RhdHVzIHVwZGF0ZXMgb24gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIChhc3N1bWVzIHByaW50IHRvIFNURE9VVCkKICAgICk7Cgo9Y3V0CgpzdWIgTWlncmF0ZVRpY2tldHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPkluaXRJbXBvcnQoKSA9PSAwOwoKICAgIG15ICRVc2VDYXNlcyAgICAgPSAkUGFyYW17VXNlQ2FzZXN9OwogICAgbXkgJFNhbXBsZSAgICAgICA9ICRQYXJhbXtTYW1wbGV9OwogICAgbXkgJFNhbXBsZU50aCAgICA9ICRQYXJhbXtTYW1wbGVOdGh9IHx8IDEwOwogICAgbXkgJFJlZmVyZW5jZSAgICA9ICRQYXJhbXtSZWZlcmVuY2V9OwogICAgbXkgJEFzeW5jaHJvbm91cyA9ICRQYXJhbXtBc3luY2hyb25vdXN9OwogICAgbXkgJENvbnNvbGUgICAgICA9ICRQYXJhbXtDb25zb2xlfSAmJiAkUGFyYW17Q29uc29sZX0tPmNhbignUHJpbnQnKSA/ICRQYXJhbXtDb25zb2xlfSA6IHVuZGVmOwoKICAgIG15ICRCYXRjaFNpemUgPSAxMDA7CgogICAgIyBoYW5kbGUgc2FtcGxlIG9wdGlvbiBmb3IgY29uc29sZSBjb21tYW5kCiAgICBpZiAoJFNhbXBsZSkgewoKICAgICAgICBteSAkRnVsbFBhdGggPSAkU2FtcGxlOwoKICAgICAgICBpZiAoIC1kICRTYW1wbGUgKSB7CiAgICAgICAgICAgICRGdWxsUGF0aCAuPSAiL3NhbXBsZS5qc29uIjsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57U2FtcGxlUGF0aH0gPSAkRnVsbFBhdGg7CgogICAgICAgIG15ICRTYW1wbGVEaXIgPSBkaXJuYW1lKCRGdWxsUGF0aCk7CiAgICAgICAgaWYgKCAhLWQgJFNhbXBsZURpciApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gImRvLXNhbXBsZSBwYXJhbWV0ZXIgbmVlZHMgYSB2YWxpZCBwYXRoIHRvIGFuIG91dHB1dCBmaWxlLCBidXQgcGFyZW50IHBhdGggIiAuICRTYW1wbGVEaXIgLiAiIGRvZXMgbm90IGV4aXN0LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGRpZTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkUmVmZXJlbmNlICYmIC1lICRSZWZlcmVuY2UgKSB7CgogICAgICAgIG15ICRSZWZJRHNKU09OID0gZmlsZSgkUmVmZXJlbmNlKS0+c2x1cnA7CiAgICAgICAgJFNlbGYtPntSZWZJRHN9ID0gZnJvbV9qc29uKCRSZWZJRHNKU09OKTsKICAgIH0KCiAgICBteSAkVGlja2V0T2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJEFydGljbGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwoKICAgIG15ICRPbmx5VmlzaWJsZUZvckN1c3RvbWVyICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpPbmx5VmlzaWJsZUZvckN1c3RvbWVyJykgLy8gMTsKICAgIG15ICRBbGxvd2VkQXJ0aWNsZVNlbmRlclR5cGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpBbGxvd2VkQXJ0aWNsZVNlbmRlclR5cGVzJyk7CiAgICBteSAkU2VhcmNoUmVzdHJpY3Rpb25zSGFzaCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6VGlja2V0OjpTZWFyY2hSZXN0cmljdGlvbnMnKSAvLyB7fTsKCiAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAkQ29uc29sZS0+UHJpbnQoIjxncmVlbj5Jbmdlc3RpbmcgVGlja2V0cyAuLi48L2dyZWVuPlxuIik7CiAgICB9CgogICAgbXkgJVRpY2tldFNhbXBsZTsKCiAgICBTRUFSQ0hSRVNUUklDVElPTjoKICAgIGZvciBteSAkU2VhcmNoUmVzdHJpY3Rpb25zS2V5ICgga2V5cyAkU2VhcmNoUmVzdHJpY3Rpb25zSGFzaC0+JSogKQogICAgewogICAgICAgIG15ICRTZWFyY2hSZXN0cmljdGlvbnMgPSBkY2xvbmUoICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoLT57JFNlYXJjaFJlc3RyaWN0aW9uc0tleX0gKTsKCiAgICAgICAgbXkgJEluY2x1ZGVVc2VDYXNlID0gMDsKICAgICAgICBpZiAoICRVc2VDYXNlcyAmJiBzY2FsYXIgJFVzZUNhc2VzLT5AKiApIHsKCiAgICAgICAgICAgICRJbmNsdWRlVXNlQ2FzZSA9IGdyZXAgeyAkXyBlcSAkU2VhcmNoUmVzdHJpY3Rpb25zS2V5IH0gJFVzZUNhc2VzLT5AKjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRJbmNsdWRlVXNlQ2FzZSA9IDE7CiAgICAgICAgfQoKICAgICAgICBuZXh0IFNFQVJDSFJFU1RSSUNUSU9OIGlmICRJbmNsdWRlVXNlQ2FzZSA9PSAwOwoKICAgICAgICBteSBAVXNlQ2FzZUxhYmVscyA9ICggZGVsZXRlICRTZWFyY2hSZXN0cmljdGlvbnMtPntMYWJlbH0gKS0+QCo7CgogICAgICAgIGlmICggIWV4aXN0cyAkVGlja2V0U2FtcGxleyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9ICkgewogICAgICAgICAgICAkVGlja2V0U2FtcGxleyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9ID0gW107CiAgICAgICAgfQoKICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PlVzZSBDYXNlOiAkU2VhcmNoUmVzdHJpY3Rpb25zS2V5LjwveWVsbG93PlxuIik7CiAgICAgICAgfQoKICAgICAgICAjIHJlbW92ZSBzZWFyY2ggcGFyYW1ldGVycyB3aXRoIGVtcHR5IGFycmF5cyBhcyB0aGV5IHByZXZlbnQgc2VhcmNoIHJlc3VsdHMgZW50aXJlbHkKICAgICAgICBmb3IgbXkgJEFycmF5UGFyYW0gKHF3KFF1ZXVlcyBTZXJ2aWNlcyBTdGF0ZVR5cGVzIFR5cGVzKSkgewogICAgICAgICAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoICRTZWFyY2hSZXN0cmljdGlvbnMtPnskQXJyYXlQYXJhbX0gKSApIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkU2VhcmNoUmVzdHJpY3Rpb25zLT57JEFycmF5UGFyYW19OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGZldGNoIGFsbCBUaWNrZXRJRHMgc2F0aXNmeWluZyB0aGlzIHNlYXJjaCByZXN0cmljdGlvbgogICAgICAgIG15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgIFJlc3VsdCAgICAgPT4gJ0FSUkFZJywKICAgICAgICAgICAgTGltaXQgICAgICA9PiAxMDBfMDAwXzAwMCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICBQZXJtaXNzaW9uID0+ICdybycsCiAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgJXskU2VhcmNoUmVzdHJpY3Rpb25zfSwKICAgICAgICApOwoKICAgICAgICBteSAkRXJyb3JzID0gMDsKICAgICAgICBteSAkQ291bnQgID0gMDsKCiAgICAgICAgIyBvbmx5IHJlcXVpcmVkIGZvciBjb25zb2xlIGNvbW1hbmQKICAgICAgICBteSAkSGFuZGxlZCAgID0gMDsKICAgICAgICBteSAkSW1wb3J0ZWQgID0gMDsKICAgICAgICBteSAkUGVyY2VudDEwID0gKCBzb3J0IHsgJGEgPD0+ICRiIH0gKCAxMCwgaW50KCBzY2FsYXIoQFRpY2tldElEcykgLyAxMCApICkgKVsxXTsKICAgICAgICBteSAkUGVyY2VudDEgID0gKCBzb3J0IHsgJGEgPD0+ICRiIH0gKCAxLCAgaW50KCBzY2FsYXIoQFRpY2tldElEcykgLyAxMDAgKSApIClbMV07CgogICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoCiAgICAgICAgICAgICAgICAiPHllbGxvdz4iIC4gKCBzY2FsYXIgQFRpY2tldElEcyApIC4gIiBUaWNrZXRzIGFyZSBjb25zaWRlcmVkIGZvciB0cmFuc2Zlci4gVGhpcyBjYW4gdGFrZSBzZXZlcmFsIGhvdXJzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiB0aWNrZXRzLjwveWVsbG93PlxuIgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgQkFUQ0g6CiAgICAgICAgd2hpbGUgKCAkQ291bnQgPCBzY2FsYXIgQFRpY2tldElEcyApIHsKICAgICAgICAgICAgbXkgJFVudGlsID0gJENvdW50ICsgJEJhdGNoU2l6ZSAtIDE7CiAgICAgICAgICAgIGlmICggJFVudGlsID4gJCNUaWNrZXRJRHMgKSB7CiAgICAgICAgICAgICAgICAkVW50aWwgPSAkI1RpY2tldElEczsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSBAQmF0Y2ggPSBAVGlja2V0SURzWyAkQ291bnQgLi4gJFVudGlsIF07CgogICAgICAgICAgICBteSBASW1wb3J0VGlja2V0c1FBOwogICAgICAgICAgICBteSBASW1wb3J0VGlja2V0c0FnZW50QXJ0aWNsZXM7CgogICAgICAgICAgICBUSUNLRVRJRDoKICAgICAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQEJhdGNoKSB7CgogICAgICAgICAgICAgICAgIyBzaG93IHByb2dyZXNzCiAgICAgICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb3VudCAmJiAkQ291bnQgJSAkUGVyY2VudDEwID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQZXJjZW50ID0gaW50KCAkQ291bnQgLyAoIHNjYWxhcihAVGlja2V0SURzKSAvIDEwMCApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8eWVsbG93PiRDb3VudDwveWVsbG93PiBvZiA8eWVsbG93PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIHNjYWxhcihAVGlja2V0SURzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIjwveWVsbG93PiBwcm9jZXNzZWQgKDx5ZWxsb3c+JFBlcmNlbnQgJTwveWVsbG93PiBkb25lLiAkSGFuZGxlZCBUaWNrZXRzIGhhbmRsZWQsICRJbXBvcnRlZCBUaWNrZXRzIGltcG9ydGVkKS5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCBzY2FsYXIoQFRpY2tldElEcykgPiA1MCAmJiAkQ291bnQgJSAkUGVyY2VudDEgPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCcuICcpOwogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoKS0+Zmx1c2goKTsgICAgIyBzaG93IHRoZSBkb3QgaW1tZWRpYXRlbHksIGJld2FyZSB0aGlzIGFzc3VtZXMgQ29uc29sZU9iamVjdCBwcmludHMgdG8gU1RET1VUCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRDb3VudCsrOwoKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICgkUmVmZXJlbmNlKSB7CgogICAgICAgICAgICAgICAgICAgIG15ICRJc1BhcnRPZlNhbXBsZSA9IGdyZXAgeyAkXyBlcSAiJFRpY2tldElEIiB9ICRTZWxmLT57UmVmSURzfS0+eyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9LT5AKjsKICAgICAgICAgICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICgkSXNQYXJ0T2ZTYW1wbGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgIUBBcnRpY2xlczsKCiAgICAgICAgICAgICAgICBteSAlU2VuZGVyTG9va3VwID0gbWFwIHsgJF8gPT4gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTG9va3VwKCBTZW5kZXJUeXBlID0+ICRfICkgfSBxdy9hZ2VudCBjdXN0b21lci87CgogICAgICAgICAgICAgICAgIyBTZWxlY3Rpb25SdWxlOiBvbmx5IGNvbnNpZGVyIHRpY2tldHMgc3RhcnRlZCBieSBhIGN1c3RvbWVyCiAgICAgICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICRBcnRpY2xlc1swXXtTZW5kZXJUeXBlSUR9IG5lICRTZW5kZXJMb29rdXB7Y3VzdG9tZXJ9OwoKICAgICAgICAgICAgICAgIG15ICRRdWVzdGlvbkFydGljbGUgPSBzaGlmdCBAQXJ0aWNsZXM7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyQXJ0aWNsZXM7CgogICAgICAgICAgICAgICAgaWYgKCRTYW1wbGUpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBrZWVwIDEwJSBzYW1wbGUgb2YgdGlja2V0cyBmb3IgdGVzdGluZyBhbmQgZG8gTk9UIGltcG9ydCB0aGVtCgogICAgICAgICAgICAgICAgICAgIGlmICggJEhhbmRsZWQgJSAkU2FtcGxlTnRoID09IDAgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkSGFuZGxlZCsrOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoICRUaWNrZXRTYW1wbGV7JFNlYXJjaFJlc3RyaWN0aW9uc0tleX0tPkAqLCAkVGlja2V0SUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEFSVElDTEU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewoKICAgICAgICAgICAgICAgICAgICAjIFNlbGVjdGlvblJ1bGU6IHNraXAgdGlja2V0cyB3aGVyZSB0aGUgY3VzdG9tZXIgc2VudCBpbmZvIHR3aWNlIHdpdGhvdXQgYW55IGFnZW50IGludGVyZmVyZW5jZQogICAgICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgJEFydGljbGUtPntTZW5kZXJUeXBlSUR9IGVxICRTZW5kZXJMb29rdXB7Y3VzdG9tZXJ9ICYmICFAQW5zd2VyQXJ0aWNsZXM7CgogICAgICAgICAgICAgICAgICAgICMgU2VsZWN0aW9uUnVsZTogc2tpcCBhcnRpY2xlcyBpZiB0aGV5IGFyZSBub3QgY3VzdG9tZXIgdmlzaWJsZQogICAgICAgICAgICAgICAgICAgIGlmICgkT25seVZpc2libGVGb3JDdXN0b21lcikgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgJEFydGljbGUtPntJc1Zpc2libGVGb3JDdXN0b21lcn0gbmUgMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgU2VsZWN0aW9uUnVsZTogc2tpcCBhcnRpY2xlcyBpZiB0aGVpciBzZW5kZXJ0eXBlIGlzIG5vdCBvbiB0aGUgd2hpdGVsaXN0IChpZiBlbmFibGVkKQogICAgICAgICAgICAgICAgICAgIGlmICgkQWxsb3dlZEFydGljbGVTZW5kZXJUeXBlcykgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkQWxsb3dlZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVTOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFR5cGUgKCAkQWxsb3dlZEFydGljbGVTZW5kZXJUeXBlcy0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRTZW5kZXJMb29rdXB7JFR5cGV9ID09ICRBcnRpY2xlLT57U2VuZGVyVHlwZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWxsb3dlZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBUWVBFUzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQWxsb3dlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVJUSUNMRTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQW5zd2VyQXJ0aWNsZXMsICRBcnRpY2xlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgIUBBbnN3ZXJBcnRpY2xlczsKCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFF1ZXN0aW9uQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmQtPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkUXVlc3Rpb25BcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICEkQXJ0aWNsZXtCb2R5fTsKCiAgICAgICAgICAgICAgICAgICAgJFF1ZXN0aW9uQXJ0aWNsZSA9IFwlQXJ0aWNsZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSBAQW5zd2VyQXJ0aWNsZXNXaXRoQm9keTsKCiAgICAgICAgICAgICAgICBBTlNXRVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJGkgKCAwIC4uICQjQW5zd2VyQXJ0aWNsZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFuc3dlckFydGljbGVzWyRpXXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFuc3dlckFydGljbGVzWyRpXXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG5leHQgQU5TV0VSIGlmICEkQXJ0aWNsZXtCb2R5fTsKCiAgICAgICAgICAgICAgICAgICAgIyBTZWxlY3Rpb25SdWxlOiBSZW1vdmUgY2l0YXRpb25zIGZyb20gYWdlbnQgYXJ0aWNsZXMKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZXtCb2R5fSA9fiBzL15ccyo+Lis/JC8vbXNnOwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBBbnN3ZXJBcnRpY2xlc1dpdGhCb2R5LCBcJUFydGljbGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhQEFuc3dlckFydGljbGVzV2l0aEJvZHk7CgogICAgICAgICAgICAgICAgJEhhbmRsZWQrKzsKICAgICAgICAgICAgICAgICRJbXBvcnRlZCsrOwoKICAgICAgICAgICAgICAgIG15ICRRdWVzdGlvblN1YmplY3QgPSAkUXVlc3Rpb25BcnRpY2xlLT57U3ViamVjdH0gICAgICAgICAvLyAnJzsKICAgICAgICAgICAgICAgIG15ICRRdWVzdGlvbkJvZHkgICAgPSAkUXVlc3Rpb25BcnRpY2xlLT57Qm9keX0gICAgICAgICAgICAvLyAnJzsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJTdWJqZWN0ICAgPSAkQW5zd2VyQXJ0aWNsZXNXaXRoQm9keVswXXtTdWJqZWN0fSAvLyAnJzsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJCb2R5ICAgICAgPSAkQW5zd2VyQXJ0aWNsZXNXaXRoQm9keVswXXtCb2R5fTsKCiAgICAgICAgICAgICAgICAkUXVlc3Rpb25Cb2R5ID0gJFNlbGYtPlN0cmlwU2lnbmF0dXJlKCBCb2R5ID0+ICRRdWVzdGlvbkJvZHkgKTsKICAgICAgICAgICAgICAgICRBbnN3ZXJCb2R5ICAgPSAkU2VsZi0+U3RyaXBTaWduYXR1cmUoIEJvZHkgPT4gJEFuc3dlckJvZHkgKTsKCiAgICAgICAgICAgICAgICBteSAkSW1wb3J0UUFUaWNrZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgInNvdXJjZV9pZCIgICAgID0+ICIkVGlja2V0SUQiLAogICAgICAgICAgICAgICAgICAgICJjb250ZW50X2l0ZW1zIiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gJ3F1ZXN0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPT4gJFF1ZXN0aW9uU3ViamVjdCAuICcuICcgLiAkUXVlc3Rpb25Cb2R5LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICdhbnN3ZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9PiAkQW5zd2VyU3ViamVjdCAuICcuICcgLiAkQW5zd2VyQm9keSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICRJbXBvcnRRQVRpY2tldC0+e2xhYmVsc30gPSBcQFVzZUNhc2VMYWJlbHM7CgogICAgICAgICAgICAgICAgcHVzaCBASW1wb3J0VGlja2V0c1FBLCAkSW1wb3J0UUFUaWNrZXQ7CgogICAgICAgICAgICAgICAgbXkgQENvbnRlbnRJdGVtczsKICAgICAgICAgICAgICAgIGZvciBteSAkQW5zd2VyQXJ0aWNsZVdpdGhCb2R5IChAQW5zd2VyQXJ0aWNsZXNXaXRoQm9keSkgewoKICAgICAgICAgICAgICAgICAgICBteSAkU3ViamVjdCA9ICRBbnN3ZXJBcnRpY2xlV2l0aEJvZHktPntTdWJqZWN0fSAvLyAnJzsKICAgICAgICAgICAgICAgICAgICBteSAkQm9keSAgICA9ICRBbnN3ZXJBcnRpY2xlV2l0aEJvZHktPntCb2R5fSAgICAvLyAnJzsKCiAgICAgICAgICAgICAgICAgICAgJEJvZHkgPSAkU2VsZi0+U3RyaXBTaWduYXR1cmUoIEJvZHkgPT4gJEJvZHkgKTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDb250ZW50SXRlbXMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PiAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPT4gJFN1YmplY3QgLiAnLiAnIC4gJEJvZHksCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkSW1wb3J0QWdlbnRBcnRpY2xlcyA9IHsKICAgICAgICAgICAgICAgICAgICAic291cmNlX2lkIiAgICAgPT4gIiRUaWNrZXRJRCIsCiAgICAgICAgICAgICAgICAgICAgImNvbnRlbnRfaXRlbXMiID0+IFxAQ29udGVudEl0ZW1zLAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAkSW1wb3J0QWdlbnRBcnRpY2xlcy0+e2xhYmVsc30gPSBcQFVzZUNhc2VMYWJlbHM7CgogICAgICAgICAgICAgICAgcHVzaCBASW1wb3J0VGlja2V0c0FnZW50QXJ0aWNsZXMsICRJbXBvcnRBZ2VudEFydGljbGVzOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkUmVzdWx0OwogICAgICAgICAgICBpZiAoQEltcG9ydFRpY2tldHNRQSkgewoKICAgICAgICAgICAgICAgICMgSW5nZXN0IFEvQSBhcnRpY2xlcwogICAgICAgICAgICAgICAgJFJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnSW5nZXN0TWFueScsCiAgICAgICAgICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+ICRBc3luY2hyb25vdXMsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAndGlja2V0X3BhaXJzJywgICAgICAjIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGZhcSwgZG9jdW1lbnRhdGlvbiwgdGlja2V0X3BhaXJzLCB0aWNrZXRfY2h1bmtzCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gXEBJbXBvcnRUaWNrZXRzUUEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnMrKzsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFNvdXJjZUlEcyA9IGpvaW4oICcsJywgbWFwIHsgJF8tPntzb3VyY2VfaWR9IH0gQEltcG9ydFRpY2tldHNRQSApOwoKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZhaWxlZCB0byBpbmdlc3QgUS9BIGFydGljbGUgcGFpcnMgb2YgVGlja2V0SUQocykgJFNvdXJjZUlEczogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBUaWNrZXRJRChzKSAkU291cmNlSURzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoQEltcG9ydFRpY2tldHNBZ2VudEFydGljbGVzKSB7CgogICAgICAgICAgICAgICAgIyBJbmdlc3QgYWdlbnQgYXJ0aWNsZXMKICAgICAgICAgICAgICAgICRSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ0luZ2VzdE1hbnknLAogICAgICAgICAgICAgICAgICAgIEFzeW5jaHJvbm91cyA9PiAkQXN5bmNocm9ub3VzLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ3RpY2tldF9jaHVua3MnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+IFxASW1wb3J0VGlja2V0c0FnZW50QXJ0aWNsZXMsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnMrKzsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFNvdXJjZUlEcyA9IGpvaW4oICcsJywgbWFwIHsgJF8tPntzb3VyY2VfaWR9IH0gQEltcG9ydFRpY2tldHNRQSApOwoKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZhaWxlZCB0byBpbmdlc3QgYWdlbnQgYXJ0aWNsZXMgb2YgVGlja2V0SUQocykgJFNvdXJjZUlEczogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBUaWNrZXRJRChzKSAkU291cmNlSURzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJEVycm9ycykgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnVGlja2V0IHRyYW5zZmVyIGNvbXBsZXRlLiAnIC4gJEVycm9ycyAuICcgZXJyb3Iocykgb2NjdXJyZWQhJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PlRpY2tldCB0cmFuc2ZlciBjb21wbGV0ZS4gJEVycm9ycyBlcnJvcihzKSBvY2N1cnJlZCE8L3llbGxvdz5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPlRpY2tldCB0cmFuc2ZlciBjb21wbGV0ZS4gQ29uc2lkZXJlZCAkQ291bnQgdGlja2V0cywgb2Ygd2ljaCAkSW1wb3J0ZWQgd2hlcmUgaW1wb3J0ZWQuPC9ncmVlbj5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkU2FtcGxlKSB7CgogICAgICAgIG15ICRKU09OID0gZW5jb2RlX2pzb24oIFwlVGlja2V0U2FtcGxlICk7CiAgICAgICAgZmlsZSggJFNlbGYtPntTYW1wbGVQYXRofSApLT5zcGV3KCRKU09OKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIE1pZ3JhdGVUaWNrZXRzQXN5bmMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGxldCB0aGUgcmVxdWVzdGVyIGtub3cgaXQgaXMgcnVuIGluIGFuIGFzeW5jaHJvbm91cyBjb250ZXh0CiAgICAkUGFyYW17QXN5bmNocm9ub3VzfSA9IDE7CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiT3RvYm9BSTo6SW1wb3J0OjpNaWdyYXRlVGlja2V0c0FzeW5jIGNhbGwgaW5pdGlhdGVkLiIsCiAgICApOwoKICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPkFzeW5jQ2FsbCgKICAgICAgICBPYmplY3ROYW1lICAgICAgICAgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOjpJbXBvcnQnLAogICAgICAgIEZ1bmN0aW9uTmFtZSAgICAgICAgICAgICA9PiAnTWlncmF0ZVRpY2tldHMnLAogICAgICAgIEZ1bmN0aW9uUGFyYW1zICAgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgIEF0dGVtcHRzICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIE1heGltdW1QYXJhbGxlbEluc3RhbmNlcyA9PiAwLAogICAgKTsKCiAgICBpZiAoICEkU3VjY2VzcyApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbml0aWFsaXplIGFzeW5jIGNhbGwgZmFpbGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBNaWdyYXRlRkFRcygpCgpTeW5jaHJvbml6ZSB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIHdpdGggdGhlIHVwZGF0ZWQgc3RhdGVzIG9mIG9uZSBvciBtb3JlIEZBUSBpdGVtcyBmb3Igb25lIG9yIG1vcmUgdXNlLWNhc2VzLgoKcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5NaWdyYXRlRkFRcygKICAgICAgICBGQVFJRCAgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIGNvbnNpZGVyIG9ubHkgdGhpcyBGQVEgaXRlbSBmb3IgbWlncmF0aW9uCiAgICAgICAgVXNlQ2FzZXMgPT4gWyAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBjb25zaWRlciBvbmx5IHRoZXNlIHVzZS1jYXNlcyBmb3IgbWlncmF0aW9uCiAgICAgICAgICAgICdkZWZhdWx0JywKICAgICAgICAgICAgJ3NhbGVzJywKICAgICAgICBdLAogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLCAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgZG8gbm90IG1hbnVhbGx5IHNldCB0aGlzLCB1bmxlc3MgeW91IGFyZSBleHBsaWNpdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJ1bm5pbmcgdGhlIFJlcXVlc3RlciBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dCAoZGVmYXVsdDogMCkKICAgICAgICBDb25zb2xlICAgICAgPT4gJENvbnNvbGVPYmplY3QsICAgICMgb3B0aW9uYWwsIGdpdmUgcmVhbHRpbWUgc3RhdHVzIHVwZGF0ZXMgb24gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIChhc3N1bWVzIHByaW50IHRvIFNURE9VVCkKICAgICk7Cgo9Y3V0CgpzdWIgTWlncmF0ZUZBUXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPkluaXRJbXBvcnQoKSA9PSAwOwoKICAgIG15ICRVc2VDYXNlcyAgICAgPSAkUGFyYW17VXNlQ2FzZXN9OwogICAgbXkgJEFzeW5jaHJvbm91cyA9ICRQYXJhbXtBc3luY2hyb25vdXN9OwogICAgbXkgJENvbnNvbGUgICAgICA9ICRQYXJhbXtDb25zb2xlfSAmJiAkUGFyYW17Q29uc29sZX0tPmNhbignUHJpbnQnKSA/ICRQYXJhbXtDb25zb2xlfSA6IHVuZGVmOwoKICAgICMgY2hlY2sgd2hldGhlciBGQVEgcGFja2FnZSBpcyBpbnN0YWxsZWQKICAgIG15ICRQYWNrYWdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBhY2thZ2UnKTsKICAgIG15ICRJc0luc3RhbGxlZCAgID0gJFBhY2thZ2VPYmplY3QtPlBhY2thZ2VJc0luc3RhbGxlZCgKICAgICAgICBOYW1lID0+ICdGQVEnLAogICAgKTsKICAgIGlmICggISRJc0luc3RhbGxlZCApIHsKICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PlNraXBwaW5nIEZBUSBhcnRpY2xlcyAoRkFRIG5vdCBpbnN0YWxsZWQpLi4uPC95ZWxsb3c+XG4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPkluZ2VzdGluZyBGQVFzIC4uLjwvZ3JlZW4+XG4iKTsKICAgIH0KCiAgICAjIHByZXBhcmUgdGhlIGltcG9ydAogICAgbXkgJEZBUU9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKCiAgICAjIGRldGVybWluZSBzZWFyY2ggcmVzdHJpY3Rpb25zIGZvciBGQVFTZWFyY2gKICAgIG15ICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpGQVE6OlNlYXJjaFJlc3RyaWN0aW9ucycpIC8vIHt9OwoKICAgIFNFQVJDSFJFU1RSSUNUSU9OOgogICAgZm9yIG15ICRTZWFyY2hSZXN0cmljdGlvbnNLZXkgKCBrZXlzICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoLT4lKiApCiAgICB7CiAgICAgICAgbXkgJFNlYXJjaFJlc3RyaWN0aW9ucyA9IGRjbG9uZSggJFNlYXJjaFJlc3RyaWN0aW9uc0hhc2gtPnskU2VhcmNoUmVzdHJpY3Rpb25zS2V5fSApOwogICAgICAgIG15IEBVc2VDYXNlTGFiZWxzICAgICAgPSAoIGRlbGV0ZSAkU2VhcmNoUmVzdHJpY3Rpb25zLT57TGFiZWx9ICktPkAqOwoKICAgICAgICBteSAkSW5jbHVkZVVzZUNhc2UgPSAwOwogICAgICAgIGlmICggJFVzZUNhc2VzICYmIHNjYWxhciAkVXNlQ2FzZXMtPkAqICkgewoKICAgICAgICAgICAgJEluY2x1ZGVVc2VDYXNlID0gZ3JlcCB7ICRfIGVxICRTZWFyY2hSZXN0cmljdGlvbnNLZXkgfSAkVXNlQ2FzZXMtPkAqOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEluY2x1ZGVVc2VDYXNlID0gMTsKICAgICAgICB9CgogICAgICAgIG5leHQgU0VBUkNIUkVTVFJJQ1RJT04gaWYgJEluY2x1ZGVVc2VDYXNlID09IDA7CgogICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoIjx5ZWxsb3c+VXNlIENhc2U6ICRTZWFyY2hSZXN0cmljdGlvbnNLZXk8L3llbGxvdz5cbiIpOwogICAgICAgIH0KCiAgICAgICAgIyBmZXRjaCBhbGwgRkFRSURzIHNhdGlzZnlpbmcgdGhpcyBzZWFyY2ggcmVzdHJpY3Rpb24KICAgICAgICBteSBARkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgICAgICBMaW1pdCAgICAgID0+IDEwMF8wMDBfMDAwLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICAgICAgRkFRSUQgICAgICA9PiAkUGFyYW17RkFRSUR9LAogICAgICAgICAgICAleyRTZWFyY2hSZXN0cmljdGlvbnN9LAogICAgICAgICk7CgogICAgICAgICMgaXRlcmF0ZSBvdmVyIHRoZSBmYXFzCiAgICAgICAgbXkgJENvdW50ICAgICA9IDA7CiAgICAgICAgbXkgJFBlcmNlbnQxMCA9ICggc29ydCB7ICRhIDw9PiAkYiB9ICggMTAsIGludCggc2NhbGFyKEBGQVFJRHMpIC8gMTAgKSApIClbMV07CiAgICAgICAgbXkgJFBlcmNlbnQxICA9ICggc29ydCB7ICRhIDw9PiAkYiB9ICggMSwgIGludCggc2NhbGFyKEBGQVFJRHMpIC8gMTAwICkgKSApWzFdOwoKICAgICAgICBpZiAoIHNjYWxhcihARkFRSURzKSA+IDEwMCAmJiAkQ29uc29sZSApIHsKICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PkZBUSBhcnRpY2xlIGFyZSB0cmFuc2ZlcnJlZC4gVGhpcyBjYW4gdGFrZSBzZXZlcmFsIGhvdXJzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBmYXEgYXJ0aWNsZS48L3llbGxvdz5cbiIpOwogICAgICAgIH0KCiAgICAgICAgbXkgJEVycm9ycyA9IDA7CiAgICAgICAgbXkgQEZBUURhdGE7CgogICAgICAgIEZBUUlEOgogICAgICAgIGZvciBteSAkRkFRSUQgKEBGQVFJRHMpIHsKCiAgICAgICAgICAgICRDb3VudCsrOwoKICAgICAgICAgICAgbXkgJUZBUSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgSXRlbUZpZWxkcyAgICA9PiAxLCAgICAgICAgIyBPcHRpb25hbCwgZGVmYXVsdCAwLiBUbyBpbmNsdWRlIHRoZSBpdGVtIGZpZWxkIGNvbnRlbnQgZm9yIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRkFRIGl0ZW0gb24gdGhlIHJldHVybiBzdHJ1Y3R1cmUuCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsICAgICAgICAjIE9wdGlvbmFsLCBkZWZhdWx0IDAuIFRvIGluY2x1ZGUgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZBUSBpdGVtIG9uIHRoZSByZXR1cm4gc3RydWN0dXJlLgogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzY3J1YiBIVE1MCiAgICAgICAgICAgIG15ICRRdWVzdGlvbiA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoIFN0cmluZyA9PiAkRkFRe1RpdGxlfSAvLyAnJyApCiAgICAgICAgICAgICAgICAuICIuICIgLiAkSFRNTFV0aWxzT2JqZWN0LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJEZBUXtGaWVsZDF9IC8vICcnICkKICAgICAgICAgICAgICAgIC4gIi4gIiAuICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoIFN0cmluZyA9PiAkRkFRe0ZpZWxkMn0gLy8gJycgKTsKCiAgICAgICAgICAgIG15ICRBbnN3ZXIgPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJEZBUXtGaWVsZDN9IC8vICcnICk7CgogICAgICAgICAgICAjIHByZXBhcmUgZGF0YSBpdGVtIGZvciBpbnZva2VyCgogICAgICAgICAgICBteSAkRGF0YSA9IHsKICAgICAgICAgICAgICAgICJzb3VyY2VfaWQiICAgICA9PiAiJEZBUUlEIiwKICAgICAgICAgICAgICAgICJjb250ZW50X2l0ZW1zIiA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICdxdWVzdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICdhbnN3ZXInLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0+ICRBbnN3ZXIsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgJERhdGEtPntsYWJlbHN9ID0gXEBVc2VDYXNlTGFiZWxzOwoKICAgICAgICAgICAgcHVzaCBARkFRRGF0YSwgJERhdGE7CgogICAgICAgICAgICAjIGJhdGNoZXMgb2YgMTAgRkFRcwogICAgICAgICAgICBpZiAoICRDb3VudCAlIDEwID09IDAgKSB7CgogICAgICAgICAgICAgICAgIyBpbmdlc3QKICAgICAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ0luZ2VzdE1hbnknLAogICAgICAgICAgICAgICAgICAgIEFzeW5jaHJvbm91cyA9PiAkQXN5bmNocm9ub3VzLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ2ZhcXMnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+IFxARkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ycysrOwoKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkVycm9yIGltcG9ydGluZyBGQVFzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCggIjxyZWQ+RXJyb3IgaW1wb3J0aW5nIEZBUXM6ICIgLiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSAuICI8L3JlZD5cbiIgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQEZBUURhdGEgPSAoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93IHByb2dyZXNzIGFuZCBwb3RlbnRpYWxseSBzbGVlcAogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgIGlmICggJENvdW50ICUgJFBlcmNlbnQxMCA9PSAwICkgewogICAgICAgICAgICAgICAgICAgIG15ICRQZXJjZW50ID0gaW50KCAkQ291bnQgLyAoIHNjYWxhcihARkFRSURzKSAvIDEwMCApICk7CiAgICAgICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KAogICAgICAgICAgICAgICAgICAgICAgICAiPHllbGxvdz4kQ291bnQ8L3llbGxvdz4gb2YgPHllbGxvdz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIHNjYWxhcihARkFRSURzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiPC95ZWxsb3c+IHByb2Nlc3NlZCAoPHllbGxvdz4kUGVyY2VudCAlPC95ZWxsb3c+IGRvbmUpLlxuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoIHNjYWxhcihARkFRSURzKSA+IDUwICYmICRDb3VudCAlICRQZXJjZW50MSA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgnLiAnKTsKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoKS0+Zmx1c2goKTsgICAgIyBzaG93IHRoZSBkb3QgaW1tZWRpYXRlbHksIGJld2FyZSB0aGlzIGFzc3VtZXMgQ29uc29sZU9iamVjdCBwcmludHMgdG8gU1RET1VUCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaW5nZXN0IGxlZnRvdmVycwogICAgICAgIGlmIChARkFRRGF0YSkgewoKICAgICAgICAgICAgbXkgJFJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ0luZ2VzdE1hbnknLAogICAgICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+ICRBc3luY2hyb25vdXMsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ2ZhcXMnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gXEBGQVFEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnMrKzsKCiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJFcnJvciBpbXBvcnRpbmcgRkFRczogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBGQVFzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkRXJyb3JzKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdGQVEgdHJhbnNmZXIgY29tcGxldGUuICcgLiAkRXJyb3JzIC4gJyBlcnJvcihzKSBvY2N1cnJlZCEnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoIjx5ZWxsb3c+RkFRIHRyYW5zZmVyIGNvbXBsZXRlLiAkRXJyb3JzIGVycm9yKHMpIG9jY3VycmVkITwveWVsbG93PlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8Z3JlZW4+RkFRIHRyYW5zZmVyIGNvbXBsZXRlLiBJbXBvcnRlZCAkQ291bnQgRkFRIGl0ZW1zLjwvZ3JlZW4+XG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgTWlncmF0ZUZBUXNBc3luYyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbGV0IHRoZSByZXF1ZXN0ZXIga25vdyBpdCBpcyBydW4gaW4gYW4gYXN5bmNocm9ub3VzIGNvbnRleHQKICAgICRQYXJhbXtBc3luY2hyb25vdXN9ID0gMTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgIE1lc3NhZ2UgID0+ICJPdG9ib0FJOjpJbXBvcnQ6Ok1pZ3JhdGVGQVFzQXN5bmMgY2FsbCBpbml0aWF0ZWQuIiwKICAgICk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+QXN5bmNDYWxsKAogICAgICAgIE9iamVjdE5hbWUgICAgICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcsCiAgICAgICAgRnVuY3Rpb25OYW1lICAgICAgICAgICAgID0+ICdNaWdyYXRlRkFRcycsCiAgICAgICAgRnVuY3Rpb25QYXJhbXMgICAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgQXR0ZW1wdHMgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgTWF4aW11bVBhcmFsbGVsSW5zdGFuY2VzID0+IDAsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkluaXRpYWxpemUgYXN5bmMgY2FsbCBmYWlsZWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE1pZ3JhdGVEb2NzKCkKClN5bmNocm9uaXplIHRoZSBPVE9CTy1BSSB2ZWN0b3IgREIgd2l0aCBvbmUgb3IgbW9yZSBkb2N1bWVudHMgZm9yIG9uZSBvciBtb3JlIHVzZS1jYXNlcy4KCnJldHVybnMgMSBpZiBzdWNjZXNzZnVsIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRTdWNjZXNzID0gJE9iamVjdC0+TWlncmF0ZURvY3MoCiAgICAgICAgVXNlQ2FzZXMgPT4gWyAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBjb25zaWRlciBvbmx5IHRoZXNlIHVzZS1jYXNlcyBmb3IgbWlncmF0aW9uCiAgICAgICAgICAgICdkZWZhdWx0JywKICAgICAgICAgICAgJ3NhbGVzJywKICAgICAgICBdLAogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLCAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgZG8gbm90IG1hbnVhbGx5IHNldCB0aGlzLCB1bmxlc3MgeW91IGFyZSBleHBsaWNpdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJ1bm5pbmcgdGhlIFJlcXVlc3RlciBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dCAoZGVmYXVsdDogMCkKICAgICAgICBDb25zb2xlICAgICAgPT4gJENvbnNvbGVPYmplY3QsICAgICMgb3B0aW9uYWwsIGdpdmUgcmVhbHRpbWUgc3RhdHVzIHVwZGF0ZXMgb24gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIChhc3N1bWVzIHByaW50IHRvIFNURE9VVCkKICAgICk7Cgo9Y3V0CgpzdWIgTWlncmF0ZURvY3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPkluaXRJbXBvcnQoKSA9PSAwOwoKICAgIG15ICRVc2VDYXNlcyAgICAgPSAkUGFyYW17VXNlQ2FzZXN9OwogICAgbXkgJEFzeW5jaHJvbm91cyA9ICRQYXJhbXtBc3luY2hyb25vdXN9OwogICAgbXkgJEJhdGNoU2l6ZSAgICA9ICRQYXJhbXtCYXRjaFNpemV9OwogICAgbXkgJENvbnNvbGUgICAgICA9ICRQYXJhbXtDb25zb2xlfSAmJiAkUGFyYW17Q29uc29sZX0tPmNhbignUHJpbnQnKSA/ICRQYXJhbXtDb25zb2xlfSA6IHVuZGVmOwoKICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPkluZ2VzdGluZyBEb2N1bWVudHMgLi4uPC9ncmVlbj5cbiIpOwogICAgfQoKICAgICMgcHJlcGFyZSB0aGUgaW1wb3J0CiAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKCiAgICAjIGRldGVybWluZSBzZWFyY2ggcmVzdHJpY3Rpb25zIGZvciBkb2N1bWVudCBzZWFyY2gKICAgIG15ICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpEb2N1bWVudDo6U2VhcmNoUmVzdHJpY3Rpb25zJykgLy8ge307CgogICAgU0VBUkNIUkVTVFJJQ1RJT046CiAgICBmb3IgbXkgJFNlYXJjaFJlc3RyaWN0aW9uc0tleSAoIGtleXMgJFNlYXJjaFJlc3RyaWN0aW9uc0hhc2gtPiUqICkKICAgIHsKICAgICAgICBteSAkU2VhcmNoUmVzdHJpY3Rpb25zID0gZGNsb25lKCAkU2VhcmNoUmVzdHJpY3Rpb25zSGFzaC0+eyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9ICk7CiAgICAgICAgbXkgQFVzZUNhc2VMYWJlbHMgICAgICA9ICggZGVsZXRlICRTZWFyY2hSZXN0cmljdGlvbnMtPntMYWJlbH0gKS0+QCo7CgogICAgICAgIG15ICRJbmNsdWRlVXNlQ2FzZSA9IDA7CiAgICAgICAgaWYgKCAkVXNlQ2FzZXMgJiYgc2NhbGFyICRVc2VDYXNlcy0+QCogKSB7CgogICAgICAgICAgICAkSW5jbHVkZVVzZUNhc2UgPSBncmVwIHsgJF8gZXEgJFNlYXJjaFJlc3RyaWN0aW9uc0tleSB9ICRVc2VDYXNlcy0+QCo7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkSW5jbHVkZVVzZUNhc2UgPSAxOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBTRUFSQ0hSRVNUUklDVElPTiBpZiAkSW5jbHVkZVVzZUNhc2UgPT0gMDsKCiAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPHllbGxvdz5Vc2UgQ2FzZTogJFNlYXJjaFJlc3RyaWN0aW9uc0tleTwveWVsbG93PlxuIik7CiAgICAgICAgfQoKICAgICAgICBteSAkRG9jdW1lbnRQYXRocyA9ICRTZWxmLT5fRG9jdW1lbnRTZWFyY2goCiAgICAgICAgICAgICUkU2VhcmNoUmVzdHJpY3Rpb25zLAogICAgICAgICAgICBDb25zb2xlID0+ICRDb25zb2xlLAogICAgICAgICk7CgogICAgICAgIG15IEBDb250ZW50OwogICAgICAgIG15ICRDb3VudCAgPSAwOwogICAgICAgIG15ICRFcnJvcnMgPSAwOwogICAgICAgIG15ICRCYXRjaCAgPSAxOwoKICAgICAgICBET0NVTUVOVDoKICAgICAgICBmb3IgbXkgJERvY3VtZW50UGF0aCAoQCREb2N1bWVudFBhdGhzKSB7CgogICAgICAgICAgICAkQ291bnQrKzsKCiAgICAgICAgICAgICMgc2x1cnAgY29udGVudCBvZiBmaWxlCiAgICAgICAgICAgIG15ICRGaWxlQ29udGVudCA9IGZpbGUoJERvY3VtZW50UGF0aCktPnNsdXJwKCBpb21vZGUgPT4gJzw6ZW5jb2RpbmcoVVRGLTgpJyApIC8vICcnOwoKICAgICAgICAgICAgbXkgJERhdGEgPSB7CiAgICAgICAgICAgICAgICAic291cmNlX2lkIiAgICAgPT4gIiREb2N1bWVudFBhdGgiLAogICAgICAgICAgICAgICAgImNvbnRlbnRfaXRlbXMiID0+IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gJ3RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0+ICRGaWxlQ29udGVudCwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAkRGF0YS0+e2xhYmVsc30gPSBcQFVzZUNhc2VMYWJlbHM7CgogICAgICAgICAgICBwdXNoIEBDb250ZW50LCAkRGF0YTsKCiAgICAgICAgICAgICMgaW5nZXN0IGluIGJhdGNoZXMgb2YgMTAKICAgICAgICAgICAgaWYgKCAkQ291bnQgPj0gKCAkQmF0Y2hTaXplICogJEJhdGNoICkgKSB7CgogICAgICAgICAgICAgICAgJEJhdGNoID0gJEJhdGNoICsgMTsKCiAgICAgICAgICAgICAgICAjIGluZ2VzdAogICAgICAgICAgICAgICAgbXkgJFJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnSW5nZXN0TWFueScsCiAgICAgICAgICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+ICRBc3luY2hyb25vdXMsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnZG9jcycsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gXEBDb250ZW50LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzKys7CgogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRXJyb3IgaW1wb3J0aW5nIERvY3VtZW50ICckRG9jdW1lbnRQYXRoJzogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBEb2N1bWVudCAnJERvY3VtZW50UGF0aCc6ICIgLiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSAuICI8L3JlZD5cbiIgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQENvbnRlbnQgPSAoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpbmdlc3QgbGVmdG92ZXJzCiAgICAgICAgaWYgKEBDb250ZW50KSB7CgogICAgICAgICAgICBteSAkUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnSW5nZXN0TWFueScsCiAgICAgICAgICAgICAgICBBc3luY2hyb25vdXMgPT4gJEFzeW5jaHJvbm91cywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnZG9jcycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiBcQENvbnRlbnQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgJEVycm9ycysrOwoKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0Vycm9yIGltcG9ydGluZyBEb2N1bWVudHM6ICcgLiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCAiPHJlZD5FcnJvciBpbXBvcnRpbmcgRG9jdW1lbnRzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkRXJyb3JzKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdEb2N1bWVudCB0cmFuc2ZlciBjb21wbGV0ZS4gJyAuICRFcnJvcnMgLiAnIGVycm9yKHMpIG9jY3VycmVkIScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPHllbGxvdz5Eb2N1bWVudCB0cmFuc2ZlciBjb21wbGV0ZS4gJEVycm9ycyBlcnJvcihzKSBvY2N1cnJlZCE8L3llbGxvdz5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPkRvY3VtZW50IHRyYW5zZmVyIGNvbXBsZXRlLiBUcmFuc2ZlcnJlZCAkQ291bnQgRG9jdW1lbnQgaXRlbXMuPC9ncmVlbj5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBNaWdyYXRlRG9jc0FzeW5jIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBsZXQgdGhlIHJlcXVlc3RlciBrbm93IGl0IGlzIHJ1biBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dAogICAgJFBhcmFte0FzeW5jaHJvbm91c30gPSAxOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgTWVzc2FnZSAgPT4gIk90b2JvQUk6OkltcG9ydDo6TWlncmF0ZURvY3NBc3luYyBjYWxsIGluaXRpYXRlZC4iLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5Bc3luY0NhbGwoCiAgICAgICAgT2JqZWN0TmFtZSAgICAgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSTo6SW1wb3J0JywKICAgICAgICBGdW5jdGlvbk5hbWUgICAgICAgICAgICAgPT4gJ01pZ3JhdGVEb2NzJywKICAgICAgICBGdW5jdGlvblBhcmFtcyAgICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICBBdHRlbXB0cyAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBNYXhpbXVtUGFyYWxsZWxJbnN0YW5jZXMgPT4gMCwKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSW5pdGlhbGl6ZSBhc3luYyBjYWxsIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgUHVyZ2VUaWNrZXRzKCkKClB1cmdlcyB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIG9mIG9uZSBvciBtb3JlIFRpY2tldHMuCgpyZXR1cm5zIDEgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IGhhcyBiZWVuIHB1cmdlZAoKICAgIG15ICRTdWNjZXNzID0gJE9iamVjdC0+UHVyZ2VUaWNrZXRzKAogICAgICAgIFRpY2tldElEID0+IDEyMywgICAgIyBvcHRpb25hbCwgcHVyZ2Ugb25seSB0aGlzIHRpY2tldAogICAgKTsKCj1jdXQKCnN1YiBQdXJnZVRpY2tldHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+SW5pdEltcG9ydCgpOwoKICAgIG15ICRSZXN1bHRQYWlycyA9ICRTZWxmLT5fUHVyZ2UoCiAgICAgICAgQ29sbGVjdGlvbiA9PiAndGlja2V0X3BhaXJzJywKICAgICAgICBTb3VyY2VJRCAgID0+ICRQYXJhbXtUaWNrZXRJRH0KICAgICk7CiAgICBteSAkUmVzdWx0Q2h1bmtzID0gJFNlbGYtPl9QdXJnZSgKICAgICAgICBDb2xsZWN0aW9uID0+ICd0aWNrZXRfY2h1bmtzJywKICAgICAgICBTb3VyY2VJRCAgID0+ICRQYXJhbXtUaWNrZXRJRH0KICAgICk7CgogICAgcmV0dXJuICRSZXN1bHRQYWlycyB8fCAkUmVzdWx0Q2h1bmtzOwp9Cgo9aGVhZDIgUHVyZ2VGQVFzKCkKClB1cmdlcyB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIG9mIG9uZSBvciBtb3JlIEZBUSBpdGVtcy4KCnJldHVybnMgMSBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGJlZW4gcHVyZ2VkCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5QdXJnZUZBUXMoCiAgICAgICAgRkFRSUQgPT4gMTIzLCAgICAjIG9wdGlvbmFsLCBwdXJnZSBvbmx5IHRoaXMgRkFRIGl0ZW0KICAgICk7Cgo9Y3V0CgpzdWIgUHVyZ2VGQVFzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkluaXRJbXBvcnQoKTsKCiAgICByZXR1cm4gJFNlbGYtPl9QdXJnZSgKICAgICAgICBDb2xsZWN0aW9uID0+ICdmYXFzJywKICAgICAgICBTb3VyY2VJRCAgID0+ICRQYXJhbXtGQVFJRH0sCiAgICApOwp9Cgo9aGVhZDIgUHVyZ2VEb2NzKCkKClB1cmdlcyB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIG9mIGFsbCBEb2N1bWVudCBpdGVtcy4KCnJldHVybnMgMSBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGJlZW4gcHVyZ2VkCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5QdXJnZURvY3MoKTsKCj1jdXQKCnN1YiBQdXJnZURvY3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+SW5pdEltcG9ydCgpOwoKICAgIHJldHVybiAkU2VsZi0+X1B1cmdlKCBDb2xsZWN0aW9uID0+ICdkb2NzJyApOwp9CgpzdWIgX1B1cmdlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlcXVlc3Rlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CgogICAgbXkgJFJlc3VsdDsKCiAgICBpZiAoICRQYXJhbXtTb3VyY2VJRH0gKSB7CgogICAgICAgICRSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnRGVsZXRlQnlJRCcsCiAgICAgICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgdHlwZSAgICAgICA9PiAkUGFyYW17Q29sbGVjdGlvbn0sCiAgICAgICAgICAgICAgICBzb3VyY2VfaWRzID0+IFsiJFBhcmFte1NvdXJjZUlEfSJdLAogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAkUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ1B1cmdlJywKICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+IDAsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBDb2xsZWN0aW9uID0+ICRQYXJhbXtDb2xsZWN0aW9ufQogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gSXNIYXNoUmVmV2l0aERhdGEoJFJlc3VsdCkgICAgICAgICYmCiAgICAgICAgJFJlc3VsdC0+e1N1Y2Nlc3N9ICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoICRSZXN1bHQtPntEYXRhfSApICYmCiAgICAgICAgJFJlc3VsdC0+e0RhdGF9e3N1Y2Nlc3N9Owp9CgpzdWIgX0RvY3VtZW50U2VhcmNoIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREb2N1bWVudFJvb3QgID0gJFBhcmFte0RvY3VtZW50UGF0aH07CiAgICBteSAkTmV3ZXJUaGFuRGF5cyA9ICRQYXJhbXtOZXdlclRoYW5EYXlzfTsKICAgIG15ICRDb25zb2xlICAgICAgID0gJFBhcmFte0NvbnNvbGV9OwoKICAgIGlmICggIS1kICREb2N1bWVudFJvb3QgKSB7CiAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPHllbGxvdz5Ta2lwcGluZyBEb2N1bWVudHMgKERvY3VtZW50IGZvbGRlciAnJERvY3VtZW50Um9vdCcgZG9lcyBub3QgZXhpc3QpLi4uPC95ZWxsb3c+XG4iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRTZWNvbmRzUGVyRGF5ID0gNjAgKiA2MCAqIDI0OwoKICAgICMgZ2xvYiBmaWxlcyByZWN1cnNpdmVseSBzdGFydGluZyBpbiAkRG9jdW1lbnRSb290CiAgICBteSBARmlsZXM7CiAgICBmaW5kKAogICAgICAgIHsKICAgICAgICAgICAgd2FudGVkID0+IHN1YiB7CgogICAgICAgICAgICAgICAgIyBvbmx5IGhhbmRsZSBmaWxlcywgbm90IGRpcmVjdG9yaWVzCiAgICAgICAgICAgICAgICBpZiAoICEtZCAkXyApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCROZXdlclRoYW5EYXlzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGxhc3Qgd3JpdGUgdGltZSBzdGFtcAogICAgICAgICAgICAgICAgICAgICAgICBteSAoJFdyaXRlVGltZSkgPSAoIHN0YXQoJF8pIClbOV07CgogICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxhc3Qgd3JpdGUgdGltZSBpcyBOZXdlclRoYW5EYXlzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCB0aW1lKCkgLSAkV3JpdGVUaW1lICkgPCAoICROZXdlclRoYW5EYXlzICogJFNlY29uZHNQZXJEYXkgKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGlzIGZpbGUgdG8gcmVzdWx0IHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARmlsZXMsICRfOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGlzIGZpbGUgdG8gcmVzdWx0IHNldAogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBGaWxlcywgJF87CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBub19jaGRpciA9PiAxCiAgICAgICAgfSwKICAgICAgICAkRG9jdW1lbnRSb290CiAgICApOwoKICAgIHJldHVybiBcQEZpbGVzOwp9CgpzdWIgU3RyaXBTaWduYXR1cmUgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEJvZHkgPSAkUGFyYW17Qm9keX07CgogICAgbXkgJFJlZ0V4ID0gJFNlbGYtPntTdHJpcFNpZ25hdHVyZVJlZ0V4fTsKICAgIHJldHVybiAkQm9keSBpZiAoICEkUmVnRXggKTsKCiAgICBpZiAoICRCb2R5ID1+IC8kUmVnRXgvICkgewoKICAgICAgICByZXR1cm4gc3Vic3RyKCAkQm9keSwgMCwgJC1bMF0gKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICByZXR1cm4gJEJvZHk7CiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/DynamicField/Driver/TextAreaAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6VGV4dEFyZWFBSTsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBhcmFtT2JqZWN0KQoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6VGV4dEFyZWEpOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKCk7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6RHJpdmVyOjpUZXh0QXJlYUFJIC0gZHJpdmVyIGZvciB0aGUgVGV4dEFyZWFBSSBkeW5hbWljIGZpZWxkCgo9aGVhZDEgREVTQ1JJUFRJT04KCkR5bmFtaWNGaWVsZHMgVGV4dEFyZWFBSSBEcml2ZXIgZGVsZWdhdGUKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgpUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIEw8S2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZD4uClBsZWFzZSBsb29rIHRoZXJlIGZvciBhIGRldGFpbGVkIHJlZmVyZW5jZSBvZiB0aGUgZnVuY3Rpb25zLgoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCRUeXBlKSA9IEBfOwoKICAgICMgQ2FsbCBjb25zdHJ1Y3RvciBvZiB0aGUgYmFzZSBjbGFzcy4KICAgIG15ICRTZWxmID0gJFR5cGUtPlNVUEVSOjpuZXc7CgogICAgIyBTZXR0aW5ncyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgVGV4dEFyZWFBSSBkeW5hbWljIGZpZWxkCiAgICAkU2VsZi0+e0JlaGF2aW9yc317SXNDdXN0b21lckludGVyZmFjZUNhcGFibGV9ID0gMDsKICAgICRTZWxmLT57QmVoYXZpb3JzfXtJc1NldENhcGFibGV9ICAgICAgICAgICAgICAgPSAwOwogICAgJFNlbGYtPntCZWhhdmlvcnN9e0lzU3RhdHNDb25kaXRpb259ICAgICAgICAgICA9IDA7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgVmFsdWVTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17RG9Xcml0ZX0gKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5TVVBFUjo6VmFsdWVTZXQoJVBhcmFtKTsKfQoKc3ViIEVkaXRGaWVsZFZhbHVlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB0aGlzIGZpZWxkIGlzIGludGVuZGVkIHRvIGJlIHJlYWRvbmx5IGFuZCB0aGVyZWZvciBtdXN0IG5ldmVyIGhhdmUgYW4gRWRpdEZpZWxkVmFsdWUKICAgIHJldHVybjsKfQoKc3ViIEVkaXRGaWVsZFJlbmRlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBjb25maWcgZnJvbSBmaWVsZCBjb25maWcKICAgIG15ICRGaWVsZENvbmZpZyA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9e0NvbmZpZ307CiAgICBteSAkRmllbGROYW1lICAgPSAnRHluYW1pY0ZpZWxkXycgLiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfXtOYW1lfTsKICAgIG15ICRGaWVsZExhYmVsICA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9e0xhYmVsfTsKCiAgICBteSAkVmFsdWUgPSAnJzsKCiAgICAjIHNldCB0aGUgZmllbGQgdmFsdWUgb3IgZGVmYXVsdAogICAgaWYgKCAkUGFyYW17VXNlRGVmYXVsdFZhbHVlfSApIHsKICAgICAgICAkVmFsdWUgPSAkRmllbGRDb25maWctPntEZWZhdWx0VmFsdWV9IC8vICcnOwogICAgfQogICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfSAvLyAkVmFsdWU7CgogICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHdlYiByZXF1ZXN0CiAgICBteSAkRmllbGRWYWx1ZSA9ICRTZWxmLT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggZGVmaW5lZCAkRmllbGRWYWx1ZSApIHsKICAgICAgICAkVmFsdWUgPSAkRmllbGRWYWx1ZTsKICAgIH0KCiAgICBpZiAoICFyZWYgJFZhbHVlICkgewogICAgICAgICRWYWx1ZSA9IFskVmFsdWVdOwogICAgfQogICAgZWxzaWYgKCAhJFZhbHVlLT5AKiApIHsKICAgICAgICAkVmFsdWUgPSBbdW5kZWZdOwogICAgfQoKICAgICMgc2V0IHRoZSByb3dzIG51bWJlcgogICAgbXkgJFJvd3NOdW1iZXIgPSBkZWZpbmVkICRGaWVsZENvbmZpZy0+e1Jvd3N9ICYmICRGaWVsZENvbmZpZy0+e1Jvd3N9ID8gJEZpZWxkQ29uZmlnLT57Um93c30gOiAnNyc7CgogICAgIyBzZXQgdGhlIGNvbHMgbnVtYmVyCiAgICBteSAkQ29sc051bWJlciA9IGRlZmluZWQgJEZpZWxkQ29uZmlnLT57Q29sc30gJiYgJEZpZWxkQ29uZmlnLT57Q29sc30gPyAkRmllbGRDb25maWctPntDb2xzfSA6ICc0Mic7CgogICAgIyBjaGVjayBhbmQgc2V0IGNsYXNzIGlmIG5lY2Vzc2FyeQogICAgbXkgJEZpZWxkQ2xhc3MgPSAnRHluYW1pY0ZpZWxkVGV4dEFyZWEnOwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtDbGFzc30gJiYgJFBhcmFte0NsYXNzfSBuZSAnJyApIHsKICAgICAgICAkRmllbGRDbGFzcyAuPSAnICcgLiAkUGFyYW17Q2xhc3N9OwogICAgfQoKICAgICMgc2V0IGNsYXNzZXMgYWNjb3JkaW5nIHRvIG1hbmRhdG9yeSBhbmQgYWNsIGhpZGRlbiBwYXJhbXMKICAgIGlmICggJFBhcmFte0FDTEhpZGRlbn0gJiYgJFBhcmFte01hbmRhdG9yeX0gKSB7CiAgICAgICAgJEZpZWxkQ2xhc3MgLj0gJyBWYWxpZGF0ZV9SZXF1aXJlZF9JZlZpc2libGUnOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TWFuZGF0b3J5fSApIHsKICAgICAgICAkRmllbGRDbGFzcyAuPSAnIFZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICAjIHNldCBlcnJvciBjc3MgY2xhc3MKICAgIGlmICggJFBhcmFte1NlcnZlckVycm9yfSApIHsKICAgICAgICAkRmllbGRDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIHNldCB2YWxpZGF0aW9uIGNsYXNzIGZvciBtYXhpbXVtIGNoYXJhY3RlcnMKICAgICRGaWVsZENsYXNzIC49ICcgVmFsaWRhdGVfTWF4TGVuZ3RoJzsKCiAgICBteSAkRmllbGRMYWJlbEVzY2FwZWQgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICBUZXh0ID0+ICRQYXJhbXtMYXlvdXRPYmplY3R9e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRGaWVsZExhYmVsKSwKICAgICk7CgogICAgIyBjcmVhdGUgZmllbGQgSFRNTAogICAgIyB0aGUgWEhUTUwgZGVmaW5pdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG1heGxlbmd0aCBhdHRyaWJ1dGUgZm9yIGEgdGV4dC1hcmVhIGZpZWxkLAogICAgIyB3ZSB1c2UgZGF0YS1tYXhsZW5ndGggaW5zdGVhZAogICAgIyBOb3RpY2UgdGhhdCBzb21lIGJyb3dzZXJzIGNvdW50IG5ldyBsaW5lcyBcblxyIGFzIG9ubHkgMSBjaGFyYWN0ZXIuIEluIHRoZXNlIGNhc2VzIHRoZQogICAgIyB2YWxpZGF0aW9uIGZyYW1ld29yayBtaWdodCBnZW5lcmF0ZSBhbiBlcnJvciB3aGlsZSB0aGUgdXNlciBpcyBzdGlsbCBjYXBhYmxlIHRvIGVudGVyIHRleHQgaW4gdGhlCiAgICAjIHRleHQtYXJlYS4gT3RoZXJ3aXNlIHRoZSBtYXhsZW5ndGggcHJvcGVydHkgd2lsbCBwcmV2ZW50IHRvIGVudGVyIG1vcmUgdGV4dCB0aGFuIHRoZSBtYXhpbXVtLgogICAgbXkgJE1heExlbmd0aCA9ICRQYXJhbXtNYXhMZW5ndGh9IC8vICRTZWxmLT57TWF4TGVuZ3RofTsKCiAgICBteSAkRXJyb3JNZXNzYWdlMSA9ICRQYXJhbXtMYXlvdXRPYmplY3R9e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIG9yIik7CiAgICBteSAkRXJyb3JNZXNzYWdlMiA9ICRQYXJhbXtMYXlvdXRPYmplY3R9e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUaGUgZmllbGQgY29udGVudCBpcyB0b28gbG9uZyEiKTsKICAgIG15ICRFcnJvck1lc3NhZ2UzID0gJFBhcmFte0xheW91dE9iamVjdH17TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICJNYXhpbXVtIHNpemUgaXMgJXMgY2hhcmFjdGVycy4iLCAkTWF4TGVuZ3RoICk7CgogICAgbXkgJUZpZWxkVGVtcGxhdGVEYXRhID0gKAogICAgICAgIEZpZWxkQ2xhc3MgICAgICAgID0+ICRGaWVsZENsYXNzLAogICAgICAgIEZpZWxkTmFtZSAgICAgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgRmllbGRMYWJlbEVzY2FwZWQgPT4gJEZpZWxkTGFiZWxFc2NhcGVkLAogICAgICAgIFJlYWRvbmx5ICAgICAgICAgID0+ICRQYXJhbXtSZWFkb25seX0sCiAgICAgICAgUm93c051bWJlciAgICAgICAgPT4gJFJvd3NOdW1iZXIsCiAgICAgICAgQ29sc051bWJlciAgICAgICAgPT4gJENvbHNOdW1iZXIsCiAgICAgICAgTWF4TGVuZ3RoICAgICAgICAgPT4gJE1heExlbmd0aCwKICAgICAgICBFcnJvck1lc3NhZ2UxICAgICA9PiAkRXJyb3JNZXNzYWdlMSwKICAgICAgICBFcnJvck1lc3NhZ2UyICAgICA9PiAkRXJyb3JNZXNzYWdlMiwKICAgICAgICBFcnJvck1lc3NhZ2UzICAgICA9PiAkRXJyb3JNZXNzYWdlMywKICAgICAgICBEaXZJRCAgICAgICAgICAgICA9PiAkRmllbGROYW1lIC4gJ0Vycm9yJywKICAgICk7CgogICAgbXkgJEZpZWxkVGVtcGxhdGVGaWxlID0gJ0R5bmFtaWNGaWVsZC9BZ2VudC9UZXh0QXJlYSc7CgogICAgbXkgJUVycm9yID0gKAogICAgICAgIFNlcnZlckVycm9yID0+ICRQYXJhbXtTZXJ2ZXJFcnJvcn0sCiAgICAgICAgTWFuZGF0b3J5ICAgPT4gJFBhcmFte01hbmRhdG9yeX0sCiAgICApOwogICAgbXkgQFJlc3VsdEhUTUw7CiAgICBmb3IgbXkgJFZhbHVlSW5kZXggKCAwIC4uICQjeyRWYWx1ZX0gKSB7CiAgICAgICAgJEZpZWxkVGVtcGxhdGVEYXRhe0ZpZWxkSUR9ICAgICAgPSAkRmllbGRDb25maWctPntNdWx0aVZhbHVlfSA/ICRGaWVsZE5hbWUgLiAnXycgLiAkVmFsdWVJbmRleCA6ICRGaWVsZE5hbWU7CiAgICAgICAgJEZpZWxkVGVtcGxhdGVEYXRhe1ZhbHVlRXNjYXBlZH0gPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCA9PiAkVmFsdWUtPlskVmFsdWVJbmRleF0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFZhbHVlSW5kZXggKSB7CiAgICAgICAgICAgIGlmICggJEVycm9ye1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcntEaXZJRFNlcnZlckVycm9yfSA9ICRGaWVsZFRlbXBsYXRlRGF0YXtGaWVsZElEfSAuICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3J7RXJyb3JNZXNzYWdlfSAgICAgPSBUcmFuc2xhdGFibGUoICRQYXJhbXtFcnJvck1lc3NhZ2V9IHx8ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRFcnJvcntNYW5kYXRvcnl9ICkgewogICAgICAgICAgICAgICAgJEVycm9ye0RpdklETWFuZGF0b3J5fSAgICAgICA9ICRGaWVsZFRlbXBsYXRlRGF0YXtGaWVsZElEfSAuICdFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3J7RmllbGRSZXF1aXJlZE1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBSZXN1bHRIVE1MLCAkUGFyYW17TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJEZpZWxkVGVtcGxhdGVGaWxlLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJUZpZWxkVGVtcGxhdGVEYXRhLAogICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjYWxsIEVkaXRMYWJlbFJlbmRlciBvbiB0aGUgY29tbW9uIERyaXZlcgogICAgbXkgJExhYmVsU3RyaW5nID0gJFNlbGYtPkVkaXRMYWJlbFJlbmRlcigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTWFuZGF0b3J5ID0+ICRQYXJhbXtNYW5kYXRvcnl9IHx8ICcwJywKICAgICAgICBGaWVsZE5hbWUgPT4gJEZpZWxkTmFtZSwKICAgICk7CgogICAgbXkgJERhdGEgPSB7CiAgICAgICAgTGFiZWwgPT4gJExhYmVsU3RyaW5nLAogICAgICAgIEZpZWxkID0+ICRSZXN1bHRIVE1MWzBdLAogICAgfTsKCiAgICByZXR1cm4gJERhdGE7Cn0KCnN1YiBHZXRGaWVsZFR5cGVTZXR0aW5ncyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAoKTsKfQoKMTsK</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/Import.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OkltcG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOjpJbXBvcnQnLAopOwoKc3ViIENvbmZpZ3VyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5EZXNjcmlwdGlvbignSW1wb3J0IGV4aXN0aW5nIHRpY2tldHMgYW5kIGZhcSBhcnRpY2xlcyB0byB0aGUgQUkgdmVjdG9yIGRhdGFiYXNlLicpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGFyZ2V0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAiU3BlY2lmeSB3aGljaCBvYmplY3RzIHdpbGwgYmUgbWlncmF0ZWQuIHQ6IFRpY2tldHM7IGY6IEZBUSBhcnRpY2xlczsgZDogZG9jdW1lbnRzLiBJZiBub3Qgc3BlY2lmaWVkIGFsbCBzb3VyY2VzIHdpbGwgYmUgaGFuZGxlZC4iLAogICAgICAgIFJlcXVpcmVkICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCA9PiBxci9eW3RmZF0rJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncmVpbXBvcnQnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJEbyBhIHJlLWltcG9ydCwgd2hpY2ggbWVhbnMgdGhlIEFJIHZlY3RvcnN0b3JlIGFuZCBmdWxsdGV4dCBwb3N0Z3JlcyBEQnMgd2lsbCBiZSBwdXJnZWQgZm9yIHRoZSB0YXJnZXQgY29sbGVjdGlvbnMuIiwKICAgICAgICBSZXF1aXJlZCA9PiAwLAogICAgICAgIEhhc1ZhbHVlID0+IDAsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncHVyZ2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJwdXJnZSB0YXJnZXQgY29sbGVjdGlvbnMpLiIsCiAgICAgICAgUmVxdWlyZWQgPT4gMCwKICAgICAgICBIYXNWYWx1ZSA9PiAwLAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NhbXBsZS1udGgnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJPbmx5IHJlbGV2YW50IHdpdGggLS1kby1zY29yaW5nLCBzcGVjaWZpZXMgdGhlIHNhbXBsZSBzaXplLiBUYWtlIGV2ZXJ5IG50aCBudW0gZm9yIHNhbXBsaW5nLiBTcGVjaWZ5aW5nIDEwIHdpbGwgdGFrZSBldmVyeSB0ZW50aCwgcmVzdWx0aW5nIGluIGEgMTAlIHNhbXBsZSBzaXplLiBTcGVjaWZ5IDUgdG8gdGFrZSBldmVyeSA1dGggd2hpY2ggd2lsbCBnaXZlIDIwJSBTYW1wZWxzaXplLiBTcGVjaWZ5IDIwIHRvIHRha2UgZXZlcnkgMjB0aCB3aGljaCB3aWxsIHlpZWxkIDUlIHNhbXBsZSBzaXplLiBUaGUgZGVmYXVsdCBpcyAxMC4iLAogICAgICAgIFJlcXVpcmVkICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCA9PiBxci9bMC05XSsvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NhbXBsZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlNwZWNpZnkgYSBmaWxlIHBhdGggdG8gd3JpdGUgYSBzYW1wbGUuanNvbiBmaWxlIGNvbnRhaW5pbmcgVGlja2V0SURzIHRvIHNhbXBsZS4gV2hlbiBzcGVjaWZpZWQsIHRoZW4gc2V2ZXJ5IHNhbXBsZS1udGggVGlja2V0IHdpbGwgbm90IGJlIGltcG9ydGVkLCBidXQgYWRkZWQgdG8gdGhlIGxpc3Qgb2Ygc2FtcGxlIGlkcy4gVGhlIGRlZmF1bHQgZm9yIHNhbXBsZS1udGggaXMgMTAgdG8gc2FtcGxlIGV2ZXJ5IDEwdGggVGlja2V0ICgxMCUgc2FtcGxlIHNpemUpLiBPdmVycmlkZSB3aXRoIHRoZSAtLXNhbXBsZS1udGggcGFyYW1ldGVyLiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdyZWZlcmVuY2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJTcGVjaWZ5IGEgZmlsZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHNhbXBsZS5qc29uIGZpbGUgY29udGFpbmluZyBUaWNrZXRJRHMgdG8gcmVmZXJlbmNlLiBXaGVuIHNwZWNpZmllZCwgbm8gbmV3IHNhbXBsZSB3aWxsIGJlIGdlbmVyYXRlZCwgYnV0IGFsbCBUaWNrZXRJRHMgZnJvbSB0aGUgcmVmZXJlbmNlIHNhbXBsZSBmaWxlIHdpbGwgYmUgaG9sZCBiYWNrIGFnYWluIGZvciBzY29yaW5nLiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICd1c2UtY2FzZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlRoZSB1c2UtY2FzZSBuYW1lKHMpIHRvIGluZ2VzdCBkYXRhIGZvci4gSWYgbGVmdCBlbXB0eSwgYWxsIHVzZSBjYXNlcyB3aWxsIGJlIGluZ2VzdGVkLiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnYmF0Y2gtc2l6ZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlRoZSBiYXRjaCBzaXplIGZvciBpbXBvcnRpbmcgZG9jdW1lbnRzLiBEZWZhdWx0cyB0byA1LiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyL1swLTldKy9zbXgsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTYW1wbGUgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdzYW1wbGUnKTsKICAgIG15ICRSZWZlcmVuY2UgPSAkU2VsZi0+R2V0T3B0aW9uKCdyZWZlcmVuY2UnKTsKICAgIG15ICRTYW1wbGVOdGggPSAkU2VsZi0+R2V0T3B0aW9uKCdzYW1wbGUtbnRoJykgfHwgMTA7CiAgICBteSAkUmVJbXBvcnQgID0gJFNlbGYtPkdldE9wdGlvbigncmVpbXBvcnQnKTsKICAgIG15ICRQdXJnZSAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdwdXJnZScpOwogICAgbXkgJFVzZUNhc2VzICA9ICRTZWxmLT5HZXRPcHRpb24oJ3VzZS1jYXNlJyk7CiAgICBteSAkQmF0Y2hTaXplID0gJFNlbGYtPkdldE9wdGlvbignYmF0Y2gtc2l6ZScpIHx8IDU7CgogICAgbXkgJFRhcmdldHMgPSAkU2VsZi0+R2V0T3B0aW9uKCd0YXJnZXQnKSB8fCAidGRmIjsKCiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKICAgIGlmICggJFRhcmdldHMgPX4gL3QvICkgewoKICAgICAgICBpZiAoICRSZUltcG9ydCB8fCAkUHVyZ2UgKSB7CiAgICAgICAgICAgICRJbXBvcnRPYmplY3QtPlB1cmdlVGlja2V0cygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJFB1cmdlICkgewogICAgICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlVGlja2V0cygKICAgICAgICAgICAgICAgIFNhbXBsZSAgICA9PiAkU2FtcGxlLAogICAgICAgICAgICAgICAgU2FtcGxlTnRoID0+ICRTYW1wbGVOdGgsCiAgICAgICAgICAgICAgICBSZWZlcmVuY2UgPT4gJFJlZmVyZW5jZSwKICAgICAgICAgICAgICAgIFVzZUNhc2VzICA9PiAkVXNlQ2FzZXMsCiAgICAgICAgICAgICAgICBDb25zb2xlICAgPT4gJFNlbGYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFRhcmdldHMgPX4gL2YvICkgewoKICAgICAgICBpZiAoICRSZUltcG9ydCB8fCAkUHVyZ2UgKSB7CiAgICAgICAgICAgICRJbXBvcnRPYmplY3QtPlB1cmdlRkFRcygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJFB1cmdlICkgewogICAgICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlRkFRcygKICAgICAgICAgICAgICAgIFVzZUNhc2VzID0+ICRVc2VDYXNlcywKICAgICAgICAgICAgICAgIENvbnNvbGUgID0+ICRTZWxmLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRUYXJnZXRzID1+IC9kLyApIHsKCiAgICAgICAgaWYgKCAkUmVJbXBvcnQgfHwgJFB1cmdlICkgewogICAgICAgICAgICAkSW1wb3J0T2JqZWN0LT5QdXJnZURvY3MoKTsKICAgICAgICB9CgogICAgICAgIGlmICggISRQdXJnZSApIHsKICAgICAgICAgICAgJEltcG9ydE9iamVjdC0+TWlncmF0ZURvY3MoCiAgICAgICAgICAgICAgICBVc2VDYXNlcyAgPT4gJFVzZUNhc2VzLAogICAgICAgICAgICAgICAgQ29uc29sZSAgID0+ICRTZWxmLAogICAgICAgICAgICAgICAgQmF0Y2hTaXplID0+ICRCYXRjaFNpemUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVPaygpOwp9CgoxOwo=</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/Scoring.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OlNjb3Jpbmc7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgUGF0aDo6Q2xhc3MgcXcoZmlsZSk7CnVzZSBGaWxlOjpGaW5kICBxdyhmaW5kKTsKdXNlIExXUDo6VXNlckFnZW50Owp1c2UgRmlsZTo6QmFzZW5hbWUgICAgICAgIHF3KGJhc2VuYW1lIGRpcm5hbWUpOwp1c2UgSFRUUDo6UmVxdWVzdDo6Q29tbW9uIHF3eyBQT1NUIH07CnVzZSBKU09OOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdyhLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6QmFzZUNvbW1hbmQpOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6Rm9yZWFjaFRvRm9yKQoKIyBJbmZvcm0gdGhlIG9iamVjdCBtYW5hZ2VyIGFib3V0IHRoZSBoYXJkIGRlcGVuZGVuY2llcy4KIyBUaGlzIG1vZHVsZSBtdXN0IGJlIGRpc2NhcmRlZCB3aGVuIG9uZSBvZiB0aGUgaGFyZCBkZXBlbmRlbmNpZXMgaGFzIGJlZW4gZGlzY2FyZGVkLgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPntUaWNrZXRTYW1wbGV9ID0gW107CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdEbyBhIHF1YWxpdHkgZXZhbHVhdGlvbiBhbmQgd3JpdGUgdGhlIGNvcmluZyByZXN1bHQgaW50byBhIGZpbGUnKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NhbXBsZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlNwZWNpZnkgd2ZpbGUgcGF0aCB0byBzYW1wbGUuanNvbiBmaWxlIHdpdGggdGhlIFRpY2tldElEcyB0byBzYW1wbGUuIFRoaXMgZmlsZSBjYW4gYmUgcHJvZHVjZWQgYnkgdGhlICdNYWludDo6QUk6OkltcG9ydCcgY29uc29sZSBjb21tYW5kIHVzaW5nIHRoZSAtLXNhbXBsZSBvcHRpb24uIiwKICAgICAgICBSZXF1aXJlZCAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3Jlc3VsdCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlNwZWNpZnkgdGhlIGZpbGUgcGF0aCBmb3IgdGhlIHNjb3Jpbmcgb3V0cHV0IHNob3VsZCBiZSB3cml0dGVuIHRvIGluIENTViAodGFiIHNlcGFyYXRlZCkgZm9ybWF0LiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdqc29uJywKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAid2hlbiBzY29yaW5nLCByZXBvcnQgdmVyYm9zZWx5IGZvciBlYWNoIHRpY2tldCBwcm9jZXNzZWQgaW4gdGhlIHNwZWNpZmllZCBKU09OIGZpbGUuIiwKICAgICAgICBSZXF1aXJlZCAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2xpbWl0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAid2hlbiBzY29yaW5nLCBtYXggbnVtYmVyIG9mIHRpY2tldCBpZHMgdG8gdGFrZSBmcm9tIHNhbXBsZS4iLAogICAgICAgIFJlcXVpcmVkID0+IDAsCiAgICAgICAgSGFzVmFsdWUgPT4gMSwKCiAgICAgICAgVmFsdWVSZWdleCA9PiBxci9eWzAtOV0rJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndXNlLWNhc2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJVc2UgY2FzZSB0byB1c2UgZm9yIHNhbXBsaW5nLiBEZWZhdWx0cyB0byAnRGVmYXVsdCcuIiwKICAgICAgICBSZXF1aXJlZCAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggPT4gcXIvLiovc214LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2FtcGxlID0gJFNlbGYtPkdldE9wdGlvbignc2FtcGxlJyk7CiAgICBpZiAoJFNhbXBsZSkgewoKICAgICAgICBpZiAoICEtZSAkU2FtcGxlICkgewogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIjxyZWQ+c2FtcGxlIHBhcmFtZXRlciBuZWVkcyBhIHZhbGlkIHBhdGggdG8gYSBzYW1wbGUuanNvbiBmaWxlIGNvbnRhaW5pbmcgVGlja2V0SURzLjwvcmVkPlxuIik7CiAgICAgICAgICAgIGRpZTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayB3aGV0aGVyIHRoZSBBSSB3ZWIgc2VydmljZSBpcyBlbmFibGVkIGFuZCBpZiBub3QsIGFjdGl2YXRlIGl0CiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJEFJV2Vic2VydmljZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjxyZWQ+T1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICAjIFNldCB0aGUgd2Vic2VydmljZSBpZAogICAgJFNlbGYtPntXZWJzZXJ2aWNlSUR9ID0gJEFJV2Vic2VydmljZS0+e0lEfTsKCiAgICBpZiAoICRBSVdlYnNlcnZpY2UtPntWYWxpZElEfSAhPSAxICkgewogICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5PVE9CTy1BSSB3ZWJzZXJ2aWNlIG5vdCBhY3RpdmUhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICBteSAkU2FtcGxlICAgICA9ICRTZWxmLT5HZXRPcHRpb24oJ3NhbXBsZScpOwogICAgbXkgJE91dHB1dCAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdyZXN1bHQnKSB8fCAxMDsKICAgIG15ICRKU09OT3V0cHV0ID0gJFNlbGYtPkdldE9wdGlvbignanNvbicpOwogICAgbXkgJExpbWl0ICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdsaW1pdCcpOwogICAgbXkgJFVzZUNhc2UgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCd1c2UtY2FzZScpIC8vICdEZWZhdWx0JzsKCiAgICBteSAkSlNPTiAgICAgICAgICAgID0gZmlsZSgkU2FtcGxlKS0+c2x1cnAoKTsKICAgIG15ICRTYW1wbGVUaWNrZXRJRHMgPSBkZWNvZGVfanNvbigkSlNPTik7CgogICAgJFNlbGYtPkRvU2NvcmluZygKICAgICAgICBTYW1wbGVUaWNrZXRJRHMgPT4gJFNhbXBsZVRpY2tldElEcywKICAgICAgICBPdXRwdXRGaWxlICAgICAgPT4gJE91dHB1dCwKICAgICAgICBKU09OT3V0cHV0ICAgICAgPT4gJEpTT05PdXRwdXQsCiAgICAgICAgTGltaXQgICAgICAgICAgID0+ICRMaW1pdCB8fCBzY2FsYXIgJFNhbXBsZVRpY2tldElEcy0+eyRVc2VDYXNlfS0+QCosCiAgICAgICAgVXNlQ2FzZSAgICAgICAgID0+ICRVc2VDYXNlLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKc3ViIERvU2NvcmluZyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3RvYm9BSU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJJyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICBteSAkT3V0cHV0Q1NWRmlsZUhhbmRsZTsKICAgIG15ICRTYW1wbGVUaWNrZXRJRHMgPSAkUGFyYW17U2FtcGxlVGlja2V0SURzfTsKICAgIG15ICRKU09OT3V0cHV0ICAgICAgPSAkUGFyYW17SlNPTk91dHB1dH07CiAgICBteSAkTGltaXQgICAgICAgICAgID0gJFBhcmFte0xpbWl0fTsKICAgIG15ICRVc2VDYXNlICAgICAgICAgPSAkUGFyYW17VXNlQ2FzZX07CgogICAgIyMgbm8gY3JpdGljKE9UT0JPOjpQcm9oaWJpdE9wZW4gSW5wdXRPdXRwdXQ6OlJlcXVpcmVCcmllZk9wZW4pCiAgICBvcGVuKCAkT3V0cHV0Q1NWRmlsZUhhbmRsZSwgJz4nLCAkUGFyYW17T3V0cHV0RmlsZX0gKSB8fCBkaWUoImZhaWxlZCB0byBvcGVuIGZpbGUgJyRQYXJhbXtPdXRwdXRGaWxlfSciKTsKCiAgICBteSAkSlNPTk91dHB1dEZpbGVIYW5kbGU7CiAgICBpZiAoJEpTT05PdXRwdXQpIHsKICAgICAgICBvcGVuKCAkSlNPTk91dHB1dEZpbGVIYW5kbGUsICc+JywgJFBhcmFte0pTT05PdXRwdXR9ICkgfHwgZGllKCJmYWlsZWQgdG8gb3BlbiBmaWxlICckUGFyYW17SlNPTk91dHB1dH0nIik7CiAgICB9CgogICAgbXkgJEZpcnN0bGluZSAgPSAxOwogICAgbXkgJE51bVNjb3JlcyAgPSAwOwogICAgbXkgJFNhbXBsZVNpemUgPSBzY2FsYXIgJFNhbXBsZVRpY2tldElEcy0+eyRVc2VDYXNlfS0+QCo7CgogICAgbXkgJFZlcmJvc2VKU09OID0gewogICAgICAgIERhdGEgPT4gW10sCiAgICB9OwoKICAgIGlmICgkSlNPTk91dHB1dCkgewogICAgICAgICRWZXJib3NlSlNPTi0+e1NhbXBsZVNpemV9ID0gJFNhbXBsZVNpemU7CiAgICB9CgogICAgbXkgJENvdW50ID0gMDsKICAgIFRJQ0tFVElEOgogICAgZm9yIG15ICRUaWNrZXRJRCAoICRTYW1wbGVUaWNrZXRJRHMtPnskVXNlQ2FzZX0tPkAqICkgewoKICAgICAgICBteSAkVmVyYm9zZUpTT05JdGVtID0ge307CgogICAgICAgIGxhc3QgVElDS0VUSUQgaWYgKCAkQ291bnQgPj0gJExpbWl0ICk7CiAgICAgICAgJENvdW50Kys7CgogICAgICAgIG15ICRBcnRpY2xlSUQ7CiAgICAgICAgbXkgQEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICBPbmx5Rmlyc3QgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZXNbMF17QXJ0aWNsZUlEfTsKICAgICAgICB9CgogICAgICAgIGlmICgkQXJ0aWNsZUlEKSB7CgogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIlRpY2tldElEOiAkVGlja2V0SURcbiIpOwoKICAgICAgICAgICAgaWYgKCRKU09OT3V0cHV0KSB7CgogICAgICAgICAgICAgICAgJFZlcmJvc2VKU09OSXRlbS0+e1RpY2tldElEfSA9ICRUaWNrZXRJRDsKCiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFZlcmJvc2VKU09OSXRlbS0+e1F1ZXN0aW9ufSA9ICRBcnRpY2xle1N1YmplY3R9IC4gIlxyXG4iIC4gJEFydGljbGV7Qm9keX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkT3RvYm9BSU9iamVjdC0+R2V0QW5zd2VyKAogICAgICAgICAgICAgICAgT2JqZWN0SUQgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICBQZXJzaXN0ICAgPT4gMCwKICAgICAgICAgICAgICAgIERvU2NvcmluZyA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkUmVzdWx0KSAmJiAkUmVzdWx0LT57U3VjY2Vzc30gPT0gMSApIHsKICAgICAgICAgICAgICAgIGlmICgkSlNPTk91dHB1dCkgewoKICAgICAgICAgICAgICAgICAgICAkVmVyYm9zZUpTT05JdGVtLT57QW5zd2VyfSA9ICRSZXN1bHQtPntEYXRhfS0+e0Fuc3dlcn07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJE51bVNjb3JlcysrOwogICAgICAgICAgICAgICAgbXkgQExpbmVJdGVtcyA9ICgKICAgICAgICAgICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRTY29yZUpTT04gPSAkUmVzdWx0LT57RGF0YX0tPntTY29yZX07CiAgICAgICAgICAgICAgICBteSAkU2NvcmVzICAgID0gZnJvbV9qc29uKCRTY29yZUpTT04pOwogICAgICAgICAgICAgICAgbXkgJFJlYXNvbmluZyA9IGRlbGV0ZSAkU2NvcmVzLT57cmVhc29uaW5nfTsKCiAgICAgICAgICAgICAgICBpZiAoJEpTT05PdXRwdXQpIHsKCiAgICAgICAgICAgICAgICAgICAgJFZlcmJvc2VKU09OSXRlbS0+e1JlYXNvbmluZ30gPSAkUmVhc29uaW5nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkRmlyc3RsaW5lKSB7CgogICAgICAgICAgICAgICAgICAgIG15IEBLZXlzID0gc29ydCBrZXlzICRTY29yZXMtPiUqOwogICAgICAgICAgICAgICAgICAgIG15ICRMaW5lID0gam9pbiAiOyIsIEBLZXlzOwoKICAgICAgICAgICAgICAgICAgICBwcmludCAkT3V0cHV0Q1NWRmlsZUhhbmRsZSAiVGlja2V0SUQ7JExpbmVcclxuIjsKICAgICAgICAgICAgICAgICAgICAkRmlyc3RsaW5lID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAkU2NvcmVzLT4lKiApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFNjb3JlID0gJFNjb3Jlcy0+eyRLZXl9OwoKICAgICAgICAgICAgICAgICAgICAkU2NvcmUgPX4gcy9mYWxzZS8wL2k7CiAgICAgICAgICAgICAgICAgICAgJFNjb3JlID1+IHMvdHJ1ZS8xL2k7CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQExpbmVJdGVtcywgJFNjb3JlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJEpTT05PdXRwdXQpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRWZXJib3NlSlNPTkl0ZW0tPnskS2V5fSA9ICRTY29yZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJExpbmUgPSBqb2luICI7IiwgQExpbmVJdGVtczsKCiAgICAgICAgICAgICAgICBwcmludCAkT3V0cHV0Q1NWRmlsZUhhbmRsZSAiJExpbmVcclxuIjsKCiAgICAgICAgICAgICAgICBwdXNoICRWZXJib3NlSlNPTi0+e0RhdGF9LT5AKiwgJFZlcmJvc2VKU09OSXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5QcmludCggIjxyZWQ+RXJyb3I6ICIgLiAkUmVzdWx0LT57RXJyb3J9IC4gIjwvcmVkPlxuIiApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGNsb3NlKCRPdXRwdXRDU1ZGaWxlSGFuZGxlKTsKCiAgICBpZiAoJEpTT05PdXRwdXQpIHsKICAgICAgICAkVmVyYm9zZUpTT04tPntTY29yZWR9ID0gJE51bVNjb3JlczsKICAgICAgICBwcmludCAkSlNPTk91dHB1dEZpbGVIYW5kbGUgZW5jb2RlX2pzb24oJFZlcmJvc2VKU09OKTsKICAgICAgICBjbG9zZSgkSlNPTk91dHB1dEZpbGVIYW5kbGUpOwogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/GetAnswer.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OkdldEFuc3dlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkZvcmVhY2hUb0ZvcikKCiMgSW5mb3JtIHRoZSBvYmplY3QgbWFuYWdlciBhYm91dCB0aGUgaGFyZCBkZXBlbmRlbmNpZXMuCiMgVGhpcyBtb2R1bGUgbXVzdCBiZSBkaXNjYXJkZWQgd2hlbiBvbmUgb2YgdGhlIGhhcmQgZGVwZW5kZW5jaWVzIGhhcyBiZWVuIGRpc2NhcmRlZC4Kb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdSZXRyaWV2ZSBhbiBBSSBnZW5lcmF0ZWQgQW5zd2VyIGZyb20gdGhlIG90b2JvLWFpLXNlcnZpY2VzIGNvbnRhaW5lci4nKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2FydGljbGUtaWQnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdBcnRpY2xlSUQnLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9eXGQrJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGlja2V0LWlkJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGlja2V0SUQnLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9eXGQrJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncXVlc3Rpb24nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdRdWVzdGlvbicsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyL14uKyQvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3JhZycsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gInRoZSByYWcgdG8gaW52b2tlLCBkZWZhdWx0cyB0byAnT1RPQk9BSTo6RGVmYXVsdFJBRycgc3lzY29uZmlnIHNldHRpbmcuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvXi4rJC9zbXgsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgd2hldGhlciBvdG9iby1haSB3ZWIgc2VydmljZSBpcyBlbmFibGVkIGFuZCBpZiBub3QsIGFjdGl2YXRlIGl0CiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJEFJV2Vic2VydmljZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjxyZWQ+T1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICAjIFNldCB0aGUgd2Vic2VydmljZSBpZAogICAgJFNlbGYtPntXZWJzZXJ2aWNlSUR9ID0gJEFJV2Vic2VydmljZS0+e0lEfTsKCiAgICBpZiAoICRBSVdlYnNlcnZpY2UtPntWYWxpZElEfSAhPSAxICkgewogICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5PVE9CTy1BSSB3ZWJzZXJ2aWNlIGlzIG5vdCBhY3RpdmF0ZWQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3RvYm9BSU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJJyk7CiAgICBteSAkUmVzdWx0OwogICAgbXkgJFJBRyA9ICRTZWxmLT5HZXRPcHRpb24oJ3JhZycpOwoKICAgIG15ICRRdWVzdGlvbiA9ICRTZWxmLT5HZXRPcHRpb24oJ3F1ZXN0aW9uJyk7CiAgICBpZiAoJFF1ZXN0aW9uKSB7CgogICAgICAgICRSZXN1bHQgPSAkT3RvYm9BSU9iamVjdC0+R2V0QW5zd2VyKAogICAgICAgICAgICBRdWVzdGlvbiA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgIFJBRyAgICAgID0+ICRSQUcsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICBteSAkVGlja2V0SUQgID0gJFNlbGYtPkdldE9wdGlvbigndGlja2V0LWlkJyk7CiAgICAgICAgbXkgJEFydGljbGVJRCA9ICRTZWxmLT5HZXRPcHRpb24oJ2FydGljbGUtaWQnKTsKCiAgICAgICAgaWYgKCAhJEFydGljbGVJRCApIHsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgICAgICAgICBteSBAQXJ0aWNsZXMgICAgICA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICAgICAgT25seUZpcnN0ICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVzWzBde0FydGljbGVJRH07CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewoKICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8cmVkPkVpdGhlciBRdWVzdGlvbiBvciBBcnRpY2xlSUQgb3IgVGlja2V0SUQgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLjwvcmVkPlxuIik7CiAgICAgICAgICAgIGRpZTsKICAgICAgICB9CgogICAgICAgICRSZXN1bHQgPSAkT3RvYm9BSU9iamVjdC0+R2V0QW5zd2VyKAogICAgICAgICAgICBPYmplY3RJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICk7CiAgICB9CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwogICAgbXkgJER1bXAgICAgICAgPSAkTWFpbk9iamVjdC0+RHVtcCgkUmVzdWx0KTsKCiAgICAkU2VsZi0+UHJpbnQoIiREdW1wXG4iKTsKCiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKMTsK</File>
        <File Location="Kernel/System/Ticket/Event/OTOBOAIIncrementalSynchronization.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpPVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSTo6SW1wb3J0JwopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEV2ZW50IERhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgcGFyYW0gaW4gZGF0YQogICAgaWYgKCAhJFBhcmFte0RhdGF9e1RpY2tldElEfSAmJiAoICEkUGFyYW17RGF0YX17TWVyZ2VUaWNrZXRJRH0gfHwgISRQYXJhbXtEYXRhfXtNYWluVGlja2V0SUR9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFRpY2tldElEKHMpIGluIERhdGEhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgZXhlY3V0ZSB0aGlzIGhhbmRsZXIgb25jZSBmb3IgZWFjaCB3ZWIgcmVxdWVzdCwgYXMgbXVsdGlwbGUgZXZlbnRzIG1heSBiZQogICAgIyBmaXJlZCBwZXIgb25lIHVzZXIgYWN0aW9uLCBmb3IgZXhhbXBsZSBBcnRpY2xlQ3JlYXRlIGFuZCBUaWNrZXRDdXN0b21lclVwZGF0ZQogICAgbXkgJENhY2hlS2V5ID0gJ19PVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb246OkFscmVhZHlQcm9jZXNzZWQnOwoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKICAgIGlmICggJFBhcmFte0RhdGF9e1RpY2tldElEfSApIHsKCiAgICAgICAgcmV0dXJuIGlmICggJFRpY2tldE9iamVjdC0+eyRDYWNoZUtleX0tPnsgJFBhcmFte0RhdGF9e1RpY2tldElEfSB9ICk7CgogICAgICAgICMgcmVpbXBvcnQgdGlja2V0CiAgICAgICAgJEltcG9ydE9iamVjdC0+UHVyZ2VUaWNrZXRzKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17VGlja2V0SUR9CiAgICAgICAgKTsKICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlVGlja2V0c0FzeW5jKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17VGlja2V0SUR9CiAgICAgICAgKTsKCiAgICAgICAgIyBzdG9yZSBpbmZvcm1hdGlvbiB0aGF0IHRpY2tldCB3YXMgcHJvY2Vzc2VkIG9uIHRpY2tldG9iamVjdAogICAgICAgICRUaWNrZXRPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0gfSA9IDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtNZXJnZVRpY2tldElEfSB9CiAgICAgICAgICAgICAgICAmJiAkVGlja2V0T2JqZWN0LT57JENhY2hlS2V5fS0+eyAkUGFyYW17RGF0YX17TWFpblRpY2tldElEfSB9CiAgICAgICAgICAgICk7CgogICAgICAgICMgcmVpbXBvcnQgbWVyZ2UgdGlja2V0CiAgICAgICAgJEltcG9ydE9iamVjdC0+UHVyZ2VUaWNrZXRzKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17TWVyZ2VUaWNrZXRJRH0KICAgICAgICApOwogICAgICAgICRJbXBvcnRPYmplY3QtPk1pZ3JhdGVUaWNrZXRzQXN5bmMoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtNZXJnZVRpY2tldElEfQogICAgICAgICk7CgogICAgICAgICMgcmVpbXBvcnQgbWFpbiB0aWNrZXQKICAgICAgICAkSW1wb3J0T2JqZWN0LT5QdXJnZVRpY2tldHMoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtNYWluVGlja2V0SUR9CiAgICAgICAgKTsKICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlVGlja2V0c0FzeW5jKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17TWFpblRpY2tldElEfQogICAgICAgICk7CgogICAgICAgICMgc3RvcmUgaW5mb3JtYXRpb24gdGhhdCB0aWNrZXRzIHdlcmUgcHJvY2Vzc2VkIG9uIHRpY2tldG9iamVjdAogICAgICAgICRUaWNrZXRPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtNZXJnZVRpY2tldElEfSB9ID0gMTsKICAgICAgICAkVGlja2V0T2JqZWN0LT57JENhY2hlS2V5fS0+eyAkUGFyYW17RGF0YX17TWFpblRpY2tldElEfSB9ICA9IDE7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/FAQ/Event/OTOBOAIIncrementalSynchronization.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGQVE6OkV2ZW50OjpPVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RkFRJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSTo6SW1wb3J0JwopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEV2ZW50IERhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgcGFyYW0gaW4gZGF0YQogICAgZm9yIG15ICRJRE5hbWUgKHF3KEl0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX17JElETmFtZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRJRE5hbWUgaW4gRGF0YSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgb25seSBleGVjdXRlIHRoaXMgaGFuZGxlciBvbmNlIGZvciBlYWNoIHdlYiByZXF1ZXN0LCBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgdHJhbnNhY3Rpb24KICAgICMgZnVuY3Rpb25hbGl0eSBhcyBmb3IgdGlja2V0cywgZXZlbiB0aG91Z2ggdGhlcmUgYXJlIGN1cnJlbnRseSBubyBvcHRpb25hbCBldmVudCB0eXBlcyBmb3IgZmFxcwogICAgbXkgJENhY2hlS2V5ID0gJ19PVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb246OkFscmVhZHlQcm9jZXNzZWQnOwoKICAgIG15ICRGQVFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKICAgIHJldHVybiBpZiAoICRGQVFPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtJdGVtSUR9IH0gKTsKCiAgICAkSW1wb3J0T2JqZWN0LT5QdXJnZUZBUXMoCiAgICAgICAgRkFRSUQgPT4gJFBhcmFte0RhdGF9e0l0ZW1JRH0KICAgICk7CiAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlRkFRc0FzeW5jKAogICAgICAgIEZBUUlEID0+ICRQYXJhbXtEYXRhfXtJdGVtSUR9CiAgICApOwoKICAgICMgc3RvcmUgaW5mb3JtYXRpb24gdGhhdCBmYXEgaXRlbSB3YXMgcHJvY2Vzc2VkIG9uIGZhcW9iamVjdAogICAgJEZBUU9iamVjdC0+eyRDYWNoZUtleX0tPnsgJFBhcmFte0RhdGF9e0l0ZW1JRH0gfSA9IDE7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/Ticket/Event/PopulateOTOBOAIDynamicField.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpQb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTGlzdDo6VXRpbCBxdyhmaXJzdCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KERhdGEgRXZlbnQgQ29uZmlnIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbSBpbiBkYXRhCiAgICBmb3IgbXkgJElETmFtZSAocXcoVGlja2V0SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9eyRJRE5hbWV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkSUROYW1lIGluIERhdGEhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJEFJV2Vic2VydmljZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9UT0JPLUFJIHdlYnNlcnZpY2Ugbm90IGZvdW5kISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkQUlXZWJzZXJ2aWNlLT57VmFsaWRJRH0gIT0gMSApIHsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnVGlja2V0UXVldWVVcGRhdGUnICkgewogICAgICAgICRTZWxmLT5fUHVyZ2VBSUR5bmFtaWNGaWVsZHMoIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0gKTsKICAgIH0KCiAgICAjIGdldCBuZWNlc3Nhcnkgb2JqZWN0cwogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBoYW5kbGUgbWlzc2luZyBhcnRpY2xlIGRhdGEgYnkgZmV0Y2hpbmcgbGFzdCBjdXN0b21lciBhcnRpY2xlCiAgICBteSAkQXJ0aWNsZUlEOwogICAgaWYgKCAkUGFyYW17RGF0YX17QXJ0aWNsZUlEfSApIHsKICAgICAgICAkQXJ0aWNsZUlEID0gJFBhcmFte0RhdGF9e0FydGljbGVJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSBAQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFBhcmFte0RhdGF9e1RpY2tldElEfSwKICAgICAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICBPbmx5TGFzdCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZXNbMF17QXJ0aWNsZUlEfTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJEFydGljbGVJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIEFydGljbGVJRCBpbiBEYXRhIGFuZCBmb3VuZCBubyBjdXN0b21lciBhcnRpY2xlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVRpY2tldE5ldyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgcXVldWUgcmVzdHJpY3Rpb24KICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17Q29uZmlnfXtRdWV1ZXN9ICkgKSB7CiAgICAgICAgcmV0dXJuIHVubGVzcyBmaXJzdCB7ICRfIGVxICRUaWNrZXROZXd7UXVldWV9IH0gJFBhcmFte0NvbmZpZ317UXVldWVzfS0+QCo7CiAgICB9CgogICAgIyBjaGVjayBzZW5kZXJ0eXBlIC0gb25seSBhdXRvLXBvcHVsYXRlIGN1c3RvbWVyIGFydGljbGVzCiAgICBteSAlU2VuZGVyTG9va3VwID0gbWFwIHsKICAgICAgICAkXyA9PiAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlbmRlclR5cGVMb29rdXAoIFNlbmRlclR5cGUgPT4gJF8gKQogICAgfSBxdy9hZ2VudCBjdXN0b21lciBzeXN0ZW0vOwoKICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICBUaWNrZXRJRCAgPT4gJFBhcmFte0RhdGF9e1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICk7CgogICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgVGlja2V0SUQgID0+ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0sCiAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICApOwoKICAgIHJldHVybiBpZiAoICRBcnRpY2xle1NlbmRlclR5cGVJRH0gIT0gJFNlbmRlckxvb2t1cHsnY3VzdG9tZXInfSApOwoKICAgICMgbG9vcCBwcm90ZWN0aW9uOiBvbmx5IGV4ZWN1dGUgdGhpcyBoYW5kbGVyIG9uY2UgZm9yIGVhY2ggYXJ0aWNsZQogICAgbXkgJENhY2hlS2V5ID0gJ19Qb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQ6OkFscmVhZHlQcm9jZXNzZWQnOwogICAgcmV0dXJuIGlmICggJEFydGljbGVPYmplY3QtPnskQ2FjaGVLZXl9eyRBcnRpY2xlSUR9ICk7CgogICAgIyBwcmVwb3B1bGF0ZSBBSSBkeW5hbWljIGZpZWxkIHdpdGggZGVmYXVsdCBhbnN3ZXIKICAgIG15ICREeW5hbWljRmllbGROYW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpEeW5hbWljRmllbGRPVE9CT0FJJykgfHwgJ09UT0JPQUknOwogICAgbXkgJE9UT0JPQUlERkNvbmZpZyAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgKTsKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRPVE9CT0FJREZDb25maWcpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pY0ZpZWxkICckRHluYW1pY0ZpZWxkTmFtZScgbm90IGZvdW5kIG9uIHRoZSBzeXN0ZW0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGlmIGEgdmFsdWUgZXhpc3RzLCBhYm9ydAogICAgIyAgIHZhbHVlIGVpdGhlciBiZWluZyB0aGUgcGxhY2Vob2xkZXIgb3IgYW4gYWN0dWFsIHZhbHVlCiAgICAjICAgaW4gYm90aCBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byB0cmlnZ2VyIGEgbmV3IHJlcXVlc3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJEN1cnJlbnRWYWx1ZSAgICAgICAgICAgICAgPSAnJzsKICAgIG15ICRPdmVyd3JpdGVGbGFnICAgICAgICAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpPdmVyd3JpdGVQcmV2aW91c1Jlc3BvbnNlJykgfHwgMDsKICAgIGlmICggISRPdmVyd3JpdGVGbGFnICkgewogICAgICAgICRDdXJyZW50VmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIGlmICRDdXJyZW50VmFsdWU7CgogICAgbXkgJFBsYWNlaG9sZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpQbGFjZWhvbGRlcicpIHx8ICc8fHdhaXRpbmcgZm9yIEFJIGFuc3dlcnw+JzsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+VmFsdWVTZXQoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRPVE9CT0FJREZDb25maWcsCiAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRQbGFjZWhvbGRlciwKICAgICAgICBEb1dyaXRlICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgcmVzdHJpY3QgcG9wdWxhdGlvbiB0byBSQUcgbWFwcGluZyBzZXR0aW5nCiAgICBteSAkUXVldWVUb1JBR01hcHBpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OlF1ZXVlVG9SQUdNYXBwaW5nJyk7CiAgICByZXR1cm4gaWYgKCAkUXVldWVUb1JBR01hcHBpbmcgJiYgISRRdWV1ZVRvUkFHTWFwcGluZy0+eyAkVGlja2V0TmV3e1F1ZXVlfSB9ICk7CgogICAgIyB0cmlnZ2VyIGFzeW5jaHJvbm91c2x5IGZldGNoaW5nIEFJIGFuc3dlcgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknKS0+R2V0QW5zd2VyQXN5bmMoCiAgICAgICAgT2JqZWN0SUQgPT4gJEFydGljbGVJRCwKICAgICk7CgogICAgJEFydGljbGVPYmplY3QtPnskQ2FjaGVLZXl9eyRBcnRpY2xlSUR9ID0gMTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QdXJnZUFJRHluYW1pY0ZpZWxkcyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQXJ0aWNsZU9iamVjdCAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgKTsKCiAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSScpIHx8ICdPVE9CT0FJJzsKICAgIG15ICRPVE9CT0FJREZDb25maWcgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICk7CgogICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIERvV3JpdGUgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZhaWxlZCB0byBjbGVhciBPVE9CTyBBSSBEeW5hbWljRmllbGQgZm9yIEFydGljbGUgJEFydGljbGUtPntBcnRpY2xlSUR9LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNsZWFyZWQgT1RPQk8gQUkgRHluYW1pY0ZpZWxkIGZvciBBcnRpY2xlICRBcnRpY2xlLT57QXJ0aWNsZUlEfS4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/GetAnswer.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6R2V0QW5zd2VyOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0IHF3KGVuY29kZV9iYXNlNjQpOwoKIyBDUEFOIG1vZHVsZXMKdXNlIFVSSTo6RXNjYXBlIHF3KHVyaV91bmVzY2FwZSk7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWZvciBzdG9wd29yZHMgYWkKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok9UT0JPQUk6OkdldEFuc3dlcgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpJbnZva2VyLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3Mge30sICRUeXBlOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcyBhbmQgc3RvcmUgdGhlbSBpbiAkU2VsZgogICAgZm9yIG15ICROZWVkZWQgKHF3L0RlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRC8pIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUHJlcGFyZVJlcXVlc3QoKQoKcHJlcGFyZSB0aGUgaW52b2NhdGlvbiBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuIFRoaXMgd2lsbCBxdWVyeSB0aGUKb3RvYm8tYWktZG9ja2VyIGNvbnRhaW5lciBmb3IgYW4gQW5zd2VyLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+UHJlcGFyZVJlcXVlc3QoCiAgICAgICAgRGF0YSA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIFF1ZXN0aW9uICA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgIFJBRyAgICAgICA9PiAkUkFHLCAgICAgICAgICAgICAgICAgICMgdGhlIFJBRyBlbmRwb2ludCwgb3IgdW5kZWYgZm9yIGRlZmF1bHQKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgaW5wdXQgPT4gewogICAgICAgICAgICAgICAgcXVlc3Rpb24gICA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICBkb19zY29yaW5nID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyktPlRydWUoKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29uZmlnID0+IHt9LAogICAgICAgICAgICBrd2FyZ3MgPT4ge30sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUHJlcGFyZVJlcXVlc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUkFHICAgICAgID0gJFBhcmFte0RhdGF9e1JBR30gLy8gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpEZWZhdWx0UkFHJyk7CiAgICBteSAkUXVlc3Rpb24gID0gJFBhcmFte0RhdGF9e1F1ZXN0aW9ufTsKICAgIG15ICREb1Njb3JpbmcgPSAkUGFyYW17RGF0YX17RG9TY29yaW5nfQogICAgICAgID8gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKS0+VHJ1ZSgpCiAgICAgICAgOiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpLT5GYWxzZSgpOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvUXVlc3Rpb24vKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9eyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgaW5wdXQgPT4gewogICAgICAgICAgICAgICAgcXVlc3Rpb24gICA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICBkb19zY29yaW5nID0+ICREb1Njb3JpbmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJBRyAgICA9PiAkUkFHLAogICAgICAgICAgICBjb25maWcgPT4ge30sCiAgICAgICAgICAgIGt3YXJncyA9PiB7fSwKICAgICAgICB9LAogICAgfTsKCn0KCj1oZWFkMiBIYW5kbGVSZXNwb25zZSgpCgpoYW5kbGUgcmVzcG9uc2UgZGF0YSBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuClRoaXMgd2lsbCBqdXN0IHJldHVybiB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+SGFuZGxlUmVzcG9uc2UoCiAgICAgICAgUmVzcG9uc2VTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICMgc3VjY2VzcyBzdGF0dXMgb2YgdGhlIHJlbW90ZSB3ZWIgc2VydmljZQogICAgICAgIFJlc3BvbnNlRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAjIGluIGNhc2Ugb2Ygd2ViIHNlcnZpY2UgZXJyb3IKICAgICAgICBEYXRhID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQKICAgICAgICAgICAgLi4uCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgICAgPT4gJycsICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIEFuc3dlciA9PiAkUGFyYW17RGF0YX17b3V0cHV0fXtnZW5lcmF0aW9ufSwKICAgICAgICAgICAgU2NvcmUgID0+ICRQYXJhbXtEYXRhfXtvdXRwdXR9e3Njb3JlfSwKICAgICAgICB9LAogICAgfTsKCj1jdXQKCnN1YiBIYW5kbGVSZXNwb25zZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSByZXNwb25zZSwgZm9yd2FyZCBpdAogICAgaWYgKCAhJFBhcmFte1Jlc3BvbnNlU3VjY2Vzc30gKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUGFyYW17UmVzcG9uc2VFcnJvck1lc3NhZ2V9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIEFuc3dlciA9PiAkUGFyYW17RGF0YX17b3V0cHV0fXtnZW5lcmF0aW9ufSwKICAgICAgICAgICAgU2NvcmUgID0+ICRQYXJhbXtEYXRhfXtvdXRwdXR9e3Njb3JlfSwKICAgICAgICB9LAogICAgfTsKfQoKMTsK</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/IngestMany.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6SW5nZXN0TWFueTsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBVUkk6OkVzY2FwZSBxdyh1cmlfdW5lc2NhcGUpOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok9UT0JPQUk6OkluZ2VzdE1hbnkKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlci0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbXMgYW5kIHN0b3JlIHRoZW0gaW4gJFNlbGYKICAgIGZvciBteSAkTmVlZGVkIChxdy9EZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQvKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFByZXBhcmVSZXF1ZXN0KCkKCnByZXBhcmUgdGhlIGludm9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyZWQgcmVtb3RlIHdlYiBzZXJ2aWNlLiBUaGlzIHdpbGwgaW5nZXN0IGRhdGEKaW50byB0aGUgT3RvYm8gQUkgdmVjdG9yIERCLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+UHJlcGFyZVJlcXVlc3QoCiAgICAgICAgRGF0YSA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIENvbnRlbnQgPT4gJENvbnRlbnQsICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ2ZhcScsICAgICAgICAgICAgICAgICAgICMgb25lIG9mIGZhcXx0aWNrZXRfcGFpcnN8dGlja2V0X2NodW5rc3xkb2MKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgdHlwZSAgICA9PiAkUGFyYW17RGF0YX17VHlwZX0sCiAgICAgICAgICAgIGNvbnRlbnQgPT4gJFBhcmFte0RhdGF9e0NvbnRlbnR9LAogICAgICAgICAgICAkVHlwZVNldHRpbmdzeyAkUGFyYW17RGF0YX17VHlwZX0gfS0+JSosCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUHJlcGFyZVJlcXVlc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBJCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQ29udGVudCBUeXBlLykgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJEpTT05PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwoKICAgIG15ICVUeXBlU2V0dGluZ3MgPSAoCiAgICAgICAgZmFxcyA9PiB7CiAgICAgICAgICAgIGVtYmVkX2NvbnRlbnRfdHlwZXMgPT4gWydxdWVzdGlvbiddLAogICAgICAgICAgICBzdG9yZV9mdWxsdGV4dCAgICAgID0+ICRKU09OT2JqZWN0LT5UcnVlKCksCiAgICAgICAgICAgIGZ1bGx0ZXh0X3R5cGVzICAgICAgPT4gWydhbnN3ZXInXSwKICAgICAgICB9LAogICAgICAgIGRvY3MgPT4gewogICAgICAgICAgICBlbWJlZF9jb250ZW50X3R5cGVzID0+IFsndGV4dCddLAogICAgICAgICAgICBzdG9yZV9mdWxsdGV4dCAgICAgID0+ICRKU09OT2JqZWN0LT5GYWxzZSgpLAogICAgICAgICAgICBmdWxsdGV4dF90eXBlcyAgICAgID0+IFsndGV4dCddLAogICAgICAgIH0sCiAgICAgICAgdGlja2V0X3BhaXJzID0+IHsKICAgICAgICAgICAgZW1iZWRfY29udGVudF90eXBlcyA9PiBbJ3F1ZXN0aW9uJ10sCiAgICAgICAgICAgIHN0b3JlX2Z1bGx0ZXh0ICAgICAgPT4gJEpTT05PYmplY3QtPlRydWUoKSwKICAgICAgICAgICAgZnVsbHRleHRfdHlwZXMgICAgICA9PiBbJ2Fuc3dlciddLAogICAgICAgIH0sCiAgICAgICAgdGlja2V0X2NodW5rcyA9PiB7CiAgICAgICAgICAgIGVtYmVkX2NvbnRlbnRfdHlwZXMgPT4gWyd0ZXh0J10sCiAgICAgICAgICAgIHN0b3JlX2Z1bGx0ZXh0ICAgICAgPT4gJEpTT05PYmplY3QtPkZhbHNlKCksCiAgICAgICAgICAgIGZ1bGx0ZXh0X3R5cGVzICAgICAgPT4gWyd0ZXh0J10sCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAhJFR5cGVTZXR0aW5nc3sgJFBhcmFte0RhdGF9e1R5cGV9IH0gKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVHlwZSAkUGFyYW17RGF0YX17VHlwZX0gbm90IHN1cHBvcnRlZC4iLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIGhhc19sYWJlbHMgPT4gJEpTT05PYmplY3QtPlRydWUoKSwKICAgICAgICAgICAgdHlwZSAgICAgICA9PiAkUGFyYW17RGF0YX17VHlwZX0sCiAgICAgICAgICAgIGNvbnRlbnQgICAgPT4gJFBhcmFte0RhdGF9e0NvbnRlbnR9LAogICAgICAgICAgICAkVHlwZVNldHRpbmdzeyAkUGFyYW17RGF0YX17VHlwZX0gfS0+JSosCiAgICAgICAgfSwKICAgIH07Cn0KCj1oZWFkMiBIYW5kbGVSZXNwb25zZSgpCgpoYW5kbGUgcmVzcG9uc2UgZGF0YSBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuClRoaXMgd2lsbCBqdXN0IHJldHVybiB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+SGFuZGxlUmVzcG9uc2UoCiAgICAgICAgUmVzcG9uc2VTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICMgc3VjY2VzcyBzdGF0dXMgb2YgdGhlIHJlbW90ZSB3ZWIgc2VydmljZQogICAgICAgIFJlc3BvbnNlRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAjIGluIGNhc2Ugb2Ygd2ViIHNlcnZpY2UgZXJyb3IKICAgICAgICBEYXRhID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQKICAgICAgICAgICAgLi4uCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgICAgPT4gJycsICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgICAgID0+IHsgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkIGFmdGVyIEludm9rZXIKICAgICAgICAgICAgLi4uCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgSGFuZGxlUmVzcG9uc2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgcmVzcG9uc2UsIGZvcndhcmQgaXQKICAgIGlmICggISRQYXJhbXtSZXNwb25zZVN1Y2Nlc3N9ICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFBhcmFte1Jlc3BvbnNlRXJyb3JNZXNzYWdlfSwKICAgICAgICB9OwogICAgfQoKICAgICMgZXh0cmEgaGFuZGxpbmcgZm9yIGVycm9ycyBmcm9tIHB5dGhvbiBhaSBjb250YWluZXIKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfSApICYmIGV4aXN0cyggJFBhcmFte0RhdGF9e3N1Y2Nlc3N9ICkgKSB7CiAgICAgICAgaWYgKCAkUGFyYW17RGF0YX17c3VjY2Vzc30gPT0gMCApIHsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUGFyYW17UmVzcG9uc2VFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+ICRQYXJhbXtEYXRhfSwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/Purge.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6UHVyZ2U7Cgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCnVzZSBNSU1FOjpCYXNlNjQgcXcoZW5jb2RlX2Jhc2U2NCk7CgojIENQQU4gbW9kdWxlcwp1c2UgVVJJOjpFc2NhcGUgcXcodXJpX3VuZXNjYXBlKTsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9Zm9yIHN0b3B3b3JkcyBwb3N0Z3JlcyBhaSBmdWxsdGV4dAoKPWhlYWQxIE5BTUUKCktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6UHVyZ2UKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlci0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbXMgYW5kIHN0b3JlIHRoZW0gaW4gJFNlbGYKICAgIGZvciBteSAkTmVlZGVkIChxdy9EZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQvKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFByZXBhcmVSZXF1ZXN0KCkKCnByZXBhcmUgdGhlIGludm9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyZWQgcmVtb3RlIHdlYiBzZXJ2aWNlLiBUaGlzIHdpbGwKY2FsbCB0aGUgUHVyZ2UgZW5kcG9pbnQgb24gdGhlIG90b2JvLWFpLWRvY2tlciBjb250YWluZXIgdG8KcmVzZXQgdGhlIG90b2JvIEFJIHZlY3RvciBkYiBhbmQgdGhlIGZ1bGx0ZXh0IHBvc3RncmVzIGRiLgpDYWxsIHRoaXMgYmVmb3JlIGRvaW5nIGEgcmUtaW1wb3J0IHNvIHlvdSBjYW4gc3RhcnQgb3ZlciBmcm9tIHNjcmF0Y2guCgogICAgbXkgJFJlc3VsdCA9ICRJbnZva2VyT2JqZWN0LT5QcmVwYXJlUmVxdWVzdCgKICAgICAgICBEYXRhID0+IHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICcnLCAgICAgICAgICAgICAgICAgICMgaW4gY2FzZSBvZiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICAgICA9PiB7fSAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQgYWZ0ZXIgSW52b2tlcgogICAgfTsKCj1jdXQKCnN1YiBQcmVwYXJlUmVxdWVzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4gJFBhcmFte0RhdGF9LAogICAgfTsKfQoKPWhlYWQyIEhhbmRsZVJlc3BvbnNlKCkKCmhhbmRsZSByZXNwb25zZSBkYXRhIG9mIHRoZSBjb25maWd1cmVkIHJlbW90ZSB3ZWIgc2VydmljZS4KVGhpcyB3aWxsIGp1c3QgcmV0dXJuIHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCgogICAgbXkgJFJlc3VsdCA9ICRJbnZva2VyT2JqZWN0LT5IYW5kbGVSZXNwb25zZSgKICAgICAgICBSZXNwb25zZVN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgIyBzdWNjZXNzIHN0YXR1cyBvZiB0aGUgcmVtb3RlIHdlYiBzZXJ2aWNlCiAgICAgICAgUmVzcG9uc2VFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICMgaW4gY2FzZSBvZiB3ZWIgc2VydmljZSBlcnJvcgogICAgICAgIERhdGEgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhdGEgcGF5bG9hZAogICAgICAgICAgICAuLi4KICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQgYWZ0ZXIgSW52b2tlcgogICAgICAgICAgICBzdWNjZXNzID0+ICd0cnVlJwogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIEhhbmRsZVJlc3BvbnNlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHJlc3BvbnNlLCBmb3J3YXJkIGl0CiAgICBpZiAoICEkUGFyYW17UmVzcG9uc2VTdWNjZXNzfSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRQYXJhbXtSZXNwb25zZUVycm9yTWVzc2FnZX0sCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+ICRQYXJhbXtEYXRhfSwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.OtoboAIWidget.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5PdG9ib0FJV2lkZ2V0CiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBhdXRob3IKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIE90b2JvQUlXaWRnZXQuCiAqLwpDb3JlLkFnZW50Lk90b2JvQUlXaWRnZXQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5PdG9ib0FJV2lkZ2V0CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyB0aGUgT3RvYm9BSVdpZGdldCBtb2R1bGUuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgIHZhciBUaW1lcjsKICAgICAgICB2YXIgVGltZW91dDsKCiAgICAgICAgZnVuY3Rpb24gU2V0SW5pdGlhbFN0YXRlICgpIHsKICAgICAgICAgICAgJCgnI1JlcXVlc3QnKS50b2dnbGVDbGFzcygnT3RvYm9BSUVtcHR5UXVlc3Rpb25FcnJvcicsIGZhbHNlKTsKICAgICAgICAgICAgJCgnI090b2JvQUlMb2FkZXInKS5oaWRlKCk7CiAgICAgICAgICAgICQoJyNDYW5jZWxRdWVzdGlvbicpLmhpZGUoKTsKICAgICAgICAgICAgJCgnI1N1Ym1pdFF1ZXN0aW9uJykuc2hvdygpOwogICAgICAgICAgICBjbGVhckludGVydmFsKFRpbWVyKTsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KFRpbWVvdXQpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gU2V0UmVxdWVzdFBlbmRpbmdTdGF0ZSAoKSB7CiAgICAgICAgICAgICQoJyNTdWJtaXRRdWVzdGlvbicpLmhpZGUoKTsKICAgICAgICAgICAgJCgnI0NhbmNlbFF1ZXN0aW9uJykuc2hvdygpOwogICAgICAgICAgICAkKCcjUmVwbHlCb3gnKS5oaWRlKCk7CiAgICAgICAgICAgICQoJyNSZXBseScpLnZhbCgnJyk7CiAgICAgICAgICAgICQoJyNSZXBseScpLnRvZ2dsZUNsYXNzKCdPdG9ib0FJUmVzcG9uc2VFcnJvcicsIGZhbHNlKTsKICAgICAgICAgICAgJCgnI090b2JvQUlMb2FkZXInKS5zaG93KCk7CiAgICAgICAgICAgICQoJyNSZXF1ZXN0JykudG9nZ2xlQ2xhc3MoJ090b2JvQUlFbXB0eVF1ZXN0aW9uRXJyb3InLCBmYWxzZSk7CgogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gU3RhcnRQb2xsaW5nICgpIHsKICAgICAgICAgICAgdmFyIFBvbGxpbmdJbnRlcnZhbCA9IENvcmUuQ29uZmlnLkdldCgnUG9sbGluZ0ludGVydmFsJyk7CiAgICAgICAgICAgIHZhciBUaW1lb3V0SW50ZXJ2YWwgPSBDb3JlLkNvbmZpZy5HZXQoJ1RpbWVvdXRJbnRlcnZhbCcpOwogICAgICAgICAgICBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkKCcjUmVwbHknKS50b2dnbGVDbGFzcygnT3RvYm9BSVJlc3BvbnNlRXJyb3InLCB0cnVlKTsKICAgICAgICAgICAgICAgICQoJyNSZXBseScpLnZhbChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnWW91ciByZXF1ZXN0IGhhcyB0aW1lZCBvdXQnKSk7CiAgICAgICAgICAgICAgICAkKCcjUmVwbHlCb3gnKS5zaG93KCk7CiAgICAgICAgICAgICAgICBTZXRJbml0aWFsU3RhdGUoKTsKICAgICAgICAgICAgfSwgVGltZW91dEludGVydmFsICogMTAwMCk7CiAgICAgICAgICAgIFRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uOiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgICAgICAgICAgICAgU3ViYWN0aW9uOiAnUG9sbEFJQW5zd2VyJywKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbjogJCgnI1JlcXVlc3QnKS52YWwoKQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbiAoUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoUmVzcG9uc2UuU3RhdHVzID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudmFsKFJlc3BvbnNlLlZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5Qm94Jykuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICBTZXRJbml0aWFsU3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoUmVzcG9uc2UuU3RhdHVzID09PSAnZmFpbCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudG9nZ2xlQ2xhc3MoJ090b2JvQUlSZXNwb25zZUVycm9yJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNSZXBseScpLnZhbChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnWW91ciByZXF1ZXN0IGhhcyBmYWlsZWQnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNSZXBseUJveCcpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICAgICAgU2V0SW5pdGlhbFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sIFBvbGxpbmdJbnRlcnZhbCAqIDEwMDApOwogICAgICAgIH0KCiAgICAgICAgJCgnI1N1Ym1pdFF1ZXN0aW9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKCEkKCcjUmVxdWVzdCcpLnZhbCgpLnRyaW0oKSkgewogICAgICAgICAgICAgICAgJCgnI1JlcXVlc3QnKS50b2dnbGVDbGFzcygnT3RvYm9BSUVtcHR5UXVlc3Rpb25FcnJvcicsIHRydWUpOwogICAgICAgICAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBTZXRSZXF1ZXN0UGVuZGluZ1N0YXRlKCk7CiAgICAgICAgICAgIHZhciBEYXRhID0gewogICAgICAgICAgICAgICAgQWN0aW9uOiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdHZXRBSUFuc3dlcicsCiAgICAgICAgICAgICAgICBRdWVzdGlvbjogJCgnI1JlcXVlc3QnKS52YWwoKQogICAgICAgICAgICB9OwogICAgICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwgRGF0YSwgZnVuY3Rpb24gKFJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICBpZiAoUmVzcG9uc2UuU3RhdHVzID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgICAgICAgICAkKCcjUmVwbHknKS52YWwoUmVzcG9uc2UuVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICQoJyNSZXBseUJveCcpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICBTZXRJbml0aWFsU3RhdGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKFJlc3BvbnNlLlN0YXR1cyA9PT0gJ29uZ29pbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudG9nZ2xlQ2xhc3MoJ090b2JvQUlSZXNwb25zZUVycm9yJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudmFsKCdZb3UgYWxyZWFkeSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCBnb2luZyBvbjogIicgKyBSZXNwb25zZS5WYWx1ZSArICciJyk7CiAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5Qm94Jykuc2hvdygpOwogICAgICAgICAgICAgICAgICAgIFNldEluaXRpYWxTdGF0ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgU3RhcnRQb2xsaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgIH0pOwoKICAgICAgICAkKCcjQ2FuY2VsUXVlc3Rpb24nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBEYXRhID0gewogICAgICAgICAgICAgICAgQWN0aW9uOiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdDYW5jZWxBSVJlcXVlc3QnLAogICAgICAgICAgICB9OwogICAgICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwgRGF0YSwgZnVuY3Rpb24gKCkge30pOwogICAgICAgICAgICAkKCcjUmVwbHknKS50b2dnbGVDbGFzcygnT3RvYm9BSVJlc3BvbnNlRXJyb3InLCB0cnVlKTsKICAgICAgICAgICAgJCgnI1JlcGx5JykudmFsKENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdZb3VyIHJlcXVlc3Qgd2FzIGNhbmNlbGVkJykpOwogICAgICAgICAgICAkKCcjUmVwbHlCb3gnKS5zaG93KCk7CiAgICAgICAgICAgIFNldEluaXRpYWxTdGF0ZSgpOwogICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgIH0pOwoKICAgICAgICBpZiAoJCgnI1JlcXVlc3QnKS52YWwoKSkgewogICAgICAgICAgICBTZXRSZXF1ZXN0UGVuZGluZ1N0YXRlKCk7CiAgICAgICAgICAgIFN0YXJ0UG9sbGluZygpOwogICAgICAgIH0KICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKCn0oQ29yZS5BZ2VudC5PdG9ib0FJV2lkZ2V0IHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/OtoboAIDashboard.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIFdpZGdldHMKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLk90b2JvQUlSZXNwb25zZUVycm9yIHsKICBjb2xvcjogZGFya3JlZDsKfQoKI0NhbmNlbFF1ZXN0aW9uIHsKICBkaXNwbGF5OiBub25lOwp9CgojT3RvYm9BSUxvYWRlciB7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICBtYXJnaW4tbGVmdDogMTBweDsKICBkaXNwbGF5OiBub25lOwp9CgouT3RvYm9BSVRleHRBcmVhIHsKICBwYWRkaW5nOiAxMHB4OwogIHdpZHRoOiA3MCU7Cn0KCi5PdG9ib0FJVGV4dEFyZWFbcmVhZG9ubHldIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgoKI1JlcGx5Qm94IHsKICBkaXNwbGF5OiBub25lOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8K</File>
        <File Location="var/packagesetup/OTOBOAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpPVE9CT0FJOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCik7Cgo9aGVhZDEgTkFNRQoKdmFyOjpwYWNrYWdlc2V0dXA6Ok9UT0JPQUkgLSBjb2RlIHRvIGV4ZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpPVE9CT0FJJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IGR5bmFtaWMgZmllbGQgbmFtZSBoZXJlCiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZE5hbWV9ID0gJ09UT0JPQUknOwoKICAgICMgYWx3YXlzIGRpc2NhcmQgdGhlIGNvbmZpZyBvYmplY3QgYmVmb3JlIHBhY2thZ2UgY29kZSBpcyBleGVjdXRlZCwKICAgICMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbmZpZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIG5ld2x5LCBzbyB0aGF0IGl0CiAgICAjIHdpbGwgdXNlIHRoZSByZWNlbnRseSB3cml0dGVuIG5ldyBjb25maWcgZnJvbSB0aGUgcGFja2FnZQogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgICAgIE9iamVjdHMgPT4gWydLZXJuZWw6OkNvbmZpZyddLAogICAgKTsKCiAgICAkU2VsZi0+e0ludm9rZXJ9ID0gewogICAgICAgIEluZ2VzdE1hbnkgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnSW1wb3J0IGNvbnRlbnQgdG8gb3VyIHJvYm90byBhaS4nLAogICAgICAgICAgICBFdmVudHMgICAgICA9PiBbCgogICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICBBc3luY2hyb25vdXMgPT4gJzAnLAogICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgRXZlbnQgICAgICAgID0+ICdUaWNrZXRDcmVhdGUnLAogICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBUeXBlID0+ICdPVE9CT0FJOjpJbmdlc3RNYW55JywKICAgICAgICB9LAogICAgICAgIEdldEFuc3dlciA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdHZXQgYW4gYW5zd2VyIGJhc2VkIG9uIHRoZSBpbmdlc3RlZCBkYXRhLicsCiAgICAgICAgICAgIEV2ZW50cyAgICAgID0+IFsKICAgICAgICAgICAgXSwKICAgICAgICAgICAgVHlwZSA9PiAnT1RPQk9BSTo6R2V0QW5zd2VyJywKICAgICAgICB9LAogICAgICAgIFB1cmdlID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1B1cmdlIHRoZSBvdG9iby1haSB2ZWN0b3Igc3RvcmUuJywKICAgICAgICAgICAgRXZlbnRzICAgICAgPT4gWwogICAgICAgICAgICBdLAogICAgICAgICAgICBUeXBlID0+ICdPVE9CT0FJOjpQdXJnZScsCiAgICAgICAgfSwKICAgICAgICBEZWxldGVCeUlEID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1B1cmdlIGEgc2luZ2xlIGl0ZW0gdGhlIG90b2JvLWFpIHZlY3RvciBzdG9yZS4nLAogICAgICAgICAgICBFdmVudHMgICAgICA9PiBbCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFR5cGUgPT4gJ09UT0JPQUk6OlB1cmdlJywKICAgICAgICB9LAogICAgICAgIFF1ZXJ5RW1iZWRkaW5ncyA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdFeGVjdXRlIFNpbWlsYXJpdHkgU2VhcmNoIHVzaW5nIHRoZSBvdG9iby1haSB2ZWN0b3Igc3RvcmUuJywKICAgICAgICAgICAgRXZlbnRzICAgICAgPT4gWwogICAgICAgICAgICBdLAogICAgICAgICAgICBUeXBlID0+ICdPVE9CT0FJOjpRdWVyeUVtYmVkZGluZ3MnLAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWxmLT57SW52b2tlckNvbnRyb2xsZXJNYXBwaW5nfSA9IHsKICAgICAgICBJbmdlc3RNYW55ID0+IHsKICAgICAgICAgICAgQ29tbWFuZCAgICA9PiAnUFVUJywKICAgICAgICAgICAgQ29udHJvbGxlciA9PiAnL290b2JvLWFpL2VtYmVkZGluZy9pbmdlc3QtbWFueScsCiAgICAgICAgfSwKICAgICAgICBHZXRBbnN3ZXIgPT4gewogICAgICAgICAgICBDb21tYW5kICAgID0+ICdQT1NUJywKICAgICAgICAgICAgQ29udHJvbGxlciA9PiAnL290b2JvLWFpLzpSQUcvaW52b2tlJywKICAgICAgICB9LAogICAgICAgIFB1cmdlID0+IHsKICAgICAgICAgICAgQ29tbWFuZCAgICA9PiAnREVMRVRFJywKICAgICAgICAgICAgQ29udHJvbGxlciA9PiAnL290b2JvLWFpL2VtYmVkZGluZy9wdXJnZS86Q29sbGVjdGlvbicsCiAgICAgICAgfSwKICAgICAgICBEZWxldGVCeUlEID0+IHsKICAgICAgICAgICAgQ29tbWFuZCAgICA9PiAnUE9TVCcsCiAgICAgICAgICAgIENvbnRyb2xsZXIgPT4gJy9vdG9iby1haS9lbWJlZGRpbmcvZGVsZXRlJywKICAgICAgICB9LAogICAgICAgIFF1ZXJ5RW1iZWRkaW5ncyA9PiB7CiAgICAgICAgICAgIENvbW1hbmQgICAgPT4gJ1BPU1QnLAogICAgICAgICAgICBDb250cm9sbGVyID0+ICcvb3RvYm8tYWkvZW1iZWRkaW5nL3F1ZXJ5JywKICAgICAgICB9LAogICAgfTsKCiAgICAkU2VsZi0+e09wZXJhdGlvbn0gPSB7CgogICAgICAgIEFydGljbGVERlVwZGF0ZSA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdBcnRpY2xlREZVcGRhdGUnLAogICAgICAgICAgICBJbmNsdWRlVGlja2V0RGF0YSA9PiAnMCcsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgID0+ICdUaWNrZXQ6OkFydGljbGVERlVwZGF0ZScKICAgICAgICB9LAogICAgICAgIFRpY2tldEdldCA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdSZXRyaWV2ZSBhIFRpY2tldCcsCiAgICAgICAgICAgIEluY2x1ZGVUaWNrZXREYXRhID0+ICcwJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1RpY2tldDo6VGlja2V0R2V0QUknLAogICAgICAgICAgICBNYXBwaW5nT3V0Ym91bmQgICA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ1hTTFQnLAogICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICBEYXRhSW5jbHVkZSA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZSAgICA9PiAkU2VsZi0+X1RpY2tldEdldFhTTFQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgVGlja2V0VXBkYXRlID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgPT4gJ1VwZGF0ZSBhIFRpY2tldCcsCiAgICAgICAgICAgIEluY2x1ZGVUaWNrZXREYXRhID0+ICcwJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1RpY2tldDo6VGlja2V0VXBkYXRlJywKICAgICAgICB9LAogICAgICAgIFRpY2tldExpbmsgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICA9PiAnTGluayBhIHRpY2tldCB0byBhIHRhcmdldCBvYmplY3QuJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnVGlja2V0OjpMaW5rJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFVubGluayA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdVbmxpbmsgYSB0aWNrZXQgdG8gYSB0YXJnZXQgb2JqZWN0LicsCiAgICAgICAgICAgIEluY2x1ZGVUaWNrZXREYXRhID0+ICcwJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1RpY2tldDo6VW5MaW5rJywKICAgICAgICB9LAogICAgICAgIEZBUVNlYXJjaCA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdTZWFyY2ggRkFRcyB3aXRoIEVTJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnRWxhc3RpY1NlYXJjaDo6RkFRU2VhcmNoJywKICAgICAgICAgICAgTWFwcGluZ091dGJvdW5kICAgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdYU0xUJywKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGF0YUluY2x1ZGUgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGUgICAgPT4gJFNlbGYtPl9GQVFTZWFyY2hYU0xUKCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFRpY2tldFNlYXJjaCA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdTZWFyY2ggVGlja2V0cyB3aXRoIEVTJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnRWxhc3RpY1NlYXJjaDo6VGlja2V0U2VhcmNoJywKICAgICAgICAgICAgTWFwcGluZ091dGJvdW5kICAgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdYU0xUJywKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGF0YUluY2x1ZGUgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGUgICAgPT4gJFNlbGYtPl9UaWNrZXRTZWFyY2hYU0xUKCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFF1ZXJ5RW1iZWRkaW5ncyA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdGaW5kIHNpbWlsYXIgaXRlbXMgaW4gdmVjdG9yIGRiJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnVGlja2V0OjpRdWVyeUVtYmVkZGluZ3MnLAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWxmLT57Um91dGVPcGVyYXRpb25NYXBwaW5nfSA9IHsKICAgICAgICBBcnRpY2xlREZVcGRhdGUgPT4gewogICAgICAgICAgICBSZXF1ZXN0TWV0aG9kID0+IFsnUFVUJ10sCiAgICAgICAgICAgIFJvdXRlICAgICAgICAgPT4gJy9UaWNrZXQvOlRpY2tldElEL0FydGljbGUvREYnCiAgICAgICAgfSwKICAgICAgICBUaWNrZXRHZXQgPT4gewogICAgICAgICAgICBSZXF1ZXN0TWV0aG9kID0+IFsnR0VUJ10sCiAgICAgICAgICAgIFJvdXRlICAgICAgICAgPT4gJy9UaWNrZXQvOlRpY2tldElEJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydQVVQnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldC86VGlja2V0SUQnLAogICAgICAgIH0sCiAgICAgICAgRkFRU2VhcmNoID0+IHsKICAgICAgICAgICAgUmVxdWVzdE1ldGhvZCA9PiBbJ0dFVCddLAogICAgICAgICAgICBSb3V0ZSAgICAgICAgID0+ICcvRkFRJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFNlYXJjaCA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydHRVQnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldCcsCiAgICAgICAgfSwKICAgICAgICBRdWVyeUVtYmVkZGluZ3MgPT4gewogICAgICAgICAgICBSZXF1ZXN0TWV0aG9kID0+IFsnR0VUJ10sCiAgICAgICAgICAgIFJvdXRlICAgICAgICAgPT4gJy9UaWNrZXQvOlRpY2tldElEL0VtYmVkZGluZ3MvOkNvbGxlY3Rpb24nLAogICAgICAgIH0sCiAgICAgICAgVGlja2V0TGluayA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydQVVQnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldC86VGlja2V0SUQvTGluay86VGFyZ2V0VHlwZS86TGlua1R5cGUvOlRhcmdldElEJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFVubGluayA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydERUxFVEUnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldC86VGlja2V0SUQvTGluay86VGFyZ2V0VHlwZS86TGlua1R5cGUvOlRhcmdldElEJywKICAgICAgICB9LAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjcmVhdGUgT1RPQk9BSSBkeW5hbWljIGZpZWxkCiAgICAkU2VsZi0+X0NyZWF0ZUFJRHluYW1pY0ZpZWxkKCk7CgogICAgIyBjcmVhdGUgQUkgYW5zd2VyIHRlbXBsYXRlCiAgICAkU2VsZi0+X0NyZWF0ZUFJQW5zd2VyVGVtcGxhdGUoKTsKCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiAgICBteSAkSUQgICAgICAgICAgICAgICA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICA9PiAnT1RPQk8tQUknLAogICAgICAgIENvbmZpZyA9PiB7CgogICAgICAgICAgICAjIFdlYnNlcnZpY2UgQ29uZmlnCiAgICAgICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAnMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICcnLAogICAgICAgICAgICBQcm92aWRlciAgICA9PiB7CiAgICAgICAgICAgICAgICBPcGVyYXRpb24gPT4gJFNlbGYtPntPcGVyYXRpb259LAogICAgICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSGVhZGVycyAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIEtlZXBBbGl2ZSAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgICAgICAgICAgID0+ICcxMDAwMDAnLAogICAgICAgICAgICAgICAgICAgICAgICBPdXRib3VuZEhlYWRlcnMgICAgICAgPT4ge30sCiAgICAgICAgICAgICAgICAgICAgICAgIFJvdXRlT3BlcmF0aW9uTWFwcGluZyA9PiAkU2VsZi0+e1JvdXRlT3BlcmF0aW9uTWFwcGluZ30sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdIVFRQOjpSRVNUJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlbW90ZVN5c3RlbSA9PiAnJywKICAgICAgICAgICAgUmVxdWVzdGVyICAgID0+IHsKICAgICAgICAgICAgICAgIEludm9rZXIgICA9PiAkU2VsZi0+e0ludm9rZXJ9LAogICAgICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0Q29tbWFuZCAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgICAgICBIb3N0ICAgICAgICAgICAgICAgICAgICAgPT4gJ2h0dHA6Ly9yYWc6ODAwMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZXJDb250cm9sbGVyTWFwcGluZyA9PiAkU2VsZi0+e0ludm9rZXJDb250cm9sbGVyTWFwcGluZ30sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXQgICAgICAgICAgICAgICAgICA9PiAnMzAwJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0hUVFA6OlJFU1QnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBFTyBXZWJzZXJ2aWNlIENvbmZpZwogICAgICAgIH0sCiAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgaWYgKCAhJElEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IGluc3RhbGwgdGhlIE9UT0JPQUkgd2Vic2VydmljZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRTZWxmLT5fVXBkYXRlQXJ0aWNsZUFjdGlvbnMoIENoYW5uZWwgPT4gJ0VtYWlsJyApOwogICAgJFNlbGYtPl9VcGRhdGVBcnRpY2xlQWN0aW9ucyggQ2hhbm5lbCA9PiAnUGhvbmUnICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwogICAgbXkgJFdlYnNlcnZpY2UgICAgICAgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRXZWJzZXJ2aWNlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRGlkIG5vdCBmaW5kIHRoZSBPVE9CT0FJIHdlYnNlcnZpY2UhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHVwZ3JhZGUgd2Vic2VydmljZSBhcyBuZWNlc3NhcnkKICAgICRXZWJzZXJ2aWNlLT57Q29uZmlnfSA9IHsKCiAgICAgICAgIyBXZWJzZXJ2aWNlIENvbmZpZwogICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57RGVidWdnZXJ9LT57RGVidWdUaHJlc2hvbGR9IC8vICdlcnJvcicsCiAgICAgICAgICAgIFRlc3RNb2RlICAgICAgID0+ICcwJywKICAgICAgICB9LAogICAgICAgIERlc2NyaXB0aW9uID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e0Rlc2NyaXB0aW9ufSAvLyAnZXJyb3InLAogICAgICAgIFByb3ZpZGVyICAgID0+IHsKICAgICAgICAgICAgT3BlcmF0aW9uID0+ICRTZWxmLT57T3BlcmF0aW9ufSwKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbEhlYWRlcnMgICAgID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e1Byb3ZpZGVyfS0+e1RyYW5zcG9ydH0tPntDb25maWd9LT57QWRkaXRpb25hbEhlYWRlcnN9LAogICAgICAgICAgICAgICAgICAgIEtlZXBBbGl2ZSAgICAgICAgICAgICA9PiAkV2Vic2VydmljZS0+e0NvbmZpZ30tPntQcm92aWRlcn0tPntUcmFuc3BvcnR9LT57Q29uZmlnfS0+e0tlZXBBbGl2ZX0sCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgICAgICAgICAgID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e1Byb3ZpZGVyfS0+e1RyYW5zcG9ydH0tPntDb25maWd9LT57TWF4TGVuZ3RofSwKICAgICAgICAgICAgICAgICAgICBPdXRib3VuZEhlYWRlcnMgICAgICAgPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57UHJvdmlkZXJ9LT57VHJhbnNwb3J0fS0+e0NvbmZpZ30tPntPdXRib3VuZEhlYWRlcnN9LAogICAgICAgICAgICAgICAgICAgIFJvdXRlT3BlcmF0aW9uTWFwcGluZyA9PiAkU2VsZi0+e1JvdXRlT3BlcmF0aW9uTWFwcGluZ30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVHlwZSA9PiAnSFRUUDo6UkVTVCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZW1vdGVTeXN0ZW0gPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57UmVtb3RlU3lzdGVtfSwKICAgICAgICBSZXF1ZXN0ZXIgICAgPT4gewogICAgICAgICAgICBJbnZva2VyICAgPT4gJFNlbGYtPntJbnZva2VyfSwKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdENvbW1hbmQgPT4gJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgIEhvc3QgICAgICAgICAgID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e1JlcXVlc3Rlcn0tPntUcmFuc3BvcnR9LT57Q29uZmlnfS0+e0hvc3R9ID09ICdodHRwOi8vb3RvYm8tYWk6ODAwMCcKICAgICAgICAgICAgICAgICAgICA/CiAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vcmFnOjgwMDAnCiAgICAgICAgICAgICAgICAgICAgOiAkV2Vic2VydmljZS0+e0NvbmZpZ30tPntSZXF1ZXN0ZXJ9LT57VHJhbnNwb3J0fS0+e0NvbmZpZ30tPntIb3N0fSwKICAgICAgICAgICAgICAgICAgICBJbnZva2VyQ29udHJvbGxlck1hcHBpbmcgPT4gJFNlbGYtPntJbnZva2VyQ29udHJvbGxlck1hcHBpbmd9LAogICAgICAgICAgICAgICAgICAgIFRpbWVvdXQgICAgICAgICAgICAgICAgICA9PiAkV2Vic2VydmljZS0+e0NvbmZpZ30tPntSZXF1ZXN0ZXJ9LT57VHJhbnNwb3J0fS0+e0NvbmZpZ30tPntUaW1lb3V0fSwKICAgICAgICAgICAgICAgICAgICBPdXRib3VuZEhlYWRlcnMgICAgICAgICAgPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57UmVxdWVzdGVyfS0+e1RyYW5zcG9ydH0tPntDb25maWd9LT57T3V0Ym91bmRIZWFkZXJzfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUeXBlID0+ICdIVFRQOjpSRVNUJywKICAgICAgICAgICAgfSwKICAgICAgICB9CiAgICB9OwoKICAgIG15ICRTdWNjZXNzID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VVcGRhdGUoCiAgICAgICAgJXskV2Vic2VydmljZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgT1RPQk9BSSB3ZWJzZXJ2aWNlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFNlbGYtPl9VcGRhdGVBcnRpY2xlQWN0aW9ucyggQ2hhbm5lbCA9PiAnRW1haWwnICk7CiAgICAkU2VsZi0+X1VwZGF0ZUFydGljbGVBY3Rpb25zKCBDaGFubmVsID0+ICdQaG9uZScgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5fQ2xlYW51cEFydGljbGVBY3Rpb25zKCBDaGFubmVsID0+ICdQaG9uZScgKTsKICAgICRTZWxmLT5fQ2xlYW51cEFydGljbGVBY3Rpb25zKCBDaGFubmVsID0+ICdFbWFpbCcgKTsKCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJFdlYnNlcnZpY2UgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwogICAgJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VEZWxldGUoCiAgICAgICAgSUQgICAgID0+ICRXZWJzZXJ2aWNlLT57SUR9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGRlbGV0ZSBPVE9CT0FJIGR5bmFtaWMgZmllbGQKICAgICRTZWxmLT5fRGVsZXRlQUlEeW5hbWljRmllbGQoKTsKCiAgICAjIGRlbGV0ZSBBbnN3ZXIgdGVtcGxhdGUKICAgICRTZWxmLT5fRGVsZXRlQUlBbnN3ZXJUZW1wbGF0ZSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0NyZWF0ZUFJRHluYW1pY0ZpZWxkKCkKCmNyZWF0ZXMgdGhlIGR5bmFtaWMgZmllbGQgbmVlZGVkIGZvciB0aGUgQUkgcmVzcG9uc2UgZnVuY3Rpb25hbGl0eQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0NyZWF0ZUFJRHluYW1pY0ZpZWxkKCk7Cgo9Y3V0CgpzdWIgX0NyZWF0ZUFJRHluYW1pY0ZpZWxkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFZhbGlkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoCiAgICAgICAgVmFsaWQgPT4gJ3ZhbGlkJywKICAgICk7CgogICAgIyBnZXQgYWxsIGN1cnJlbnQgZHluYW1pYyBmaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsaXN0IG9mIG9yZGVyIG51bWJlcnMgKGlzIGFscmVhZHkgc29ydGVkKS4KICAgIG15IEBEeW5hbWljZmllbGRPcmRlckxpc3Q7CiAgICBmb3IgbXkgJER5bmFtaWNmaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIHB1c2ggQER5bmFtaWNmaWVsZE9yZGVyTGlzdCwgJER5bmFtaWNmaWVsZC0+e0ZpZWxkT3JkZXJ9OwogICAgfQoKICAgICMgZ2V0IHRoZSBsYXN0IGVsZW1lbnQgZnJvbSB0aGUgb3JkZXIgbGlzdCBhbmQgYWRkIDEKICAgIG15ICROZXh0T3JkZXJOdW1iZXIgPSAxOwogICAgaWYgKEBEeW5hbWljZmllbGRPcmRlckxpc3QpIHsKICAgICAgICAkTmV4dE9yZGVyTnVtYmVyID0gJER5bmFtaWNmaWVsZE9yZGVyTGlzdFstMV0gKyAxOwogICAgfQoKICAgICMgY3JlYXRlIGEgZHluYW1pYyBmaWVsZHMgbG9va3VwIHRhYmxlCiAgICBteSAlRHluYW1pY0ZpZWxkTG9va3VwOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiByZWYgJER5bmFtaWNGaWVsZCBuZSAnSEFTSCc7CiAgICAgICAgJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgY2hlY2sgaWYgdGhlIGR5bmFtaWMgZmllbGQgYWxyZWFkeSBleGlzdHMKICAgIGlmICggcmVmICREeW5hbWljRmllbGRMb29rdXB7ICRTZWxmLT57RHluYW1pY0ZpZWxkTmFtZX0gfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICMgY3JlYXRlIGEgbmV3IGZpZWxkCiAgICAgICAgbXkgJEZpZWxkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZE5hbWV9LAogICAgICAgICAgICBMYWJlbCAgICAgID0+ICdPVE9CTyBBSScsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHRBcmVhQUknLAogICAgICAgICAgICBGaWVsZE9yZGVyID0+ICROZXh0T3JkZXJOdW1iZXIsCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ0FydGljbGUnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnJywKICAgICAgICAgICAgICAgIFJlZ0V4TGlzdCAgICA9PiBbXSwKICAgICAgICAgICAgICAgIFRvb2x0aXAgICAgICA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW50ZXJuYWxGaWVsZCA9PiAxLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRWYWxpZElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJEZpZWxkSUQgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgY3JlYXRlIGR5bmFtaWMgZmllbGQgJFNlbGYtPntEeW5hbWljRmllbGROYW1lfS4gUGxlYXNlIHJldmlldyB0aGUgbG9ncy4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pYyBmaWVsZCB3aXRoIG5hbWUgJFNlbGYtPntEeW5hbWljRmllbGROYW1lfSBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRGVsZXRlQUlEeW5hbWljRmllbGQoKQoKRGVsZXRlcyB0aGUgZHluYW1pYyBmaWVsZCBmb3IgQUkgZnVuY3Rpb25hbGl0eS4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9EZWxldGVBSUR5bmFtaWNGaWVsZCgpOwoKPWN1dAoKc3ViIF9EZWxldGVBSUR5bmFtaWNGaWVsZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lY2Vzc2FyeSBvYmplY3RzCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJExvZ09iamVjdCAgICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBydW5uaW5nIHByZS11bmluc3RhbGwsIHNvIHdlIGRvIGhhdmUgdGhlIHN5c2NvbmZpZyBhdCBoYW5kCiAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSScpIHx8ICRTZWxmLT57RHluYW1pY0ZpZWxkTmFtZX07CgogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICdQcmlvcml0eScgPT4gJ2Vycm9yJywKICAgICAgICAgICAgJ01lc3NhZ2UnICA9PiAiRHluYW1pY0ZpZWxkICckRHluYW1pY0ZpZWxkTmFtZScgbm90IGZvdW5kIG9uIHRoZSBzeXN0ZW0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkVmFsdWVzRGVsZXRlU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5BbGxWYWx1ZXNEZWxldGUoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIGlmICggISRWYWx1ZXNEZWxldGVTdWNjZXNzICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgJ1ByaW9yaXR5JyA9PiAnZXJyb3InLAogICAgICAgICAgICAnTWVzc2FnZScgID0+ICJDb3VsZCBub3QgZGVsZXRlIHZhbHVlcyBmb3IgRHluYW1pY0ZpZWxkICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGREZWxldGUoCiAgICAgICAgSUQgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntJRH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgJ1ByaW9yaXR5JyA9PiAnZXJyb3InLAogICAgICAgICAgICAnTWVzc2FnZScgID0+ICJDb3VsZCBub3QgZGVsZXRlIER5bmFtaWNGaWVsZCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0hIiwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX0NyZWF0ZUFJQW5zd2VyVGVtcGxhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBhbGwgdmFsaWQgcXVldWVzCiAgICBteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKICAgIG15ICVRdWV1ZURhdGEgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0KCBWYWxpZCA9PiAxICk7CgogICAgIyBhZGQgZW5nbGlzaCB0ZW1wbGF0ZQogICAgewogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YW5kYXJkVGVtcGxhdGUnKS0+U3RhbmRhcmRUZW1wbGF0ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdPVE9CT0FJIEFuc3dlciBUZW1wbGF0ZScsCiAgICAgICAgICAgIFRlbXBsYXRlICAgICA9PiAnPE9UT0JPX0FJQW5zd2VyXycgLiAkU2VsZi0+e0R5bmFtaWNGaWVsZE5hbWV9IC4gJz4nLAogICAgICAgICAgICBDb250ZW50VHlwZSAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0Fuc3dlcicsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0ZW1wbGF0ZSB0byBldmVyeSB2YWxpZCBxdWV1ZQogICAgICAgIGZvciBteSAkUXVldWVJRCAoIGtleXMgJVF1ZXVlRGF0YSApIHsKICAgICAgICAgICAgJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9EZWxldGVBSUFuc3dlclRlbXBsYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScpOwoKICAgICMgZGVsZXRlIHRlbXBsYXRlCiAgICBmb3IgbXkgJFRlbXBsYXRlTmFtZSAoICgnT1RPQk9BSSBBbnN3ZXIgVGVtcGxhdGUnKSApIHsKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlTG9va3VwKAogICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlID0+ICRUZW1wbGF0ZU5hbWUsCiAgICAgICAgKTsKCiAgICAgICAgIyBhbHNvIGNsZWFucyB1cCB0aGUgcXVldWUgcmVsYXRpb25zIGJlZm9yZSBkZWxldGluZwogICAgICAgICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlRGVsZXRlKAogICAgICAgICAgICBJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1VwZGF0ZUFydGljbGVBY3Rpb25zIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgbXkgJENoYW5uZWwgPSAkUGFyYW17Q2hhbm5lbH07CgogICAgIyB3ZSBvbmx5IGRvIHRoaXMgb24gcmVsLTExLjAKICAgICMgZm9yIHJlbC0xMV8xIHdlIGNhbiBqdXN0IHVzZSBYTUwKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICRSZWxlYXNlSW5mbyA9ICRNYWluT2JqZWN0LT5HZXRSZWxlYXNlSW5mbygKICAgICAgICBEaXJlY3RvcnkgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdIb21lJyksCiAgICAgICAgRmlsZW5hbWUgID0+ICdSRUxFQVNFJywKICAgICk7CgogICAgbXkgJFZlcnNpb24gPSAkUmVsZWFzZUluZm8tPntWZXJzaW9ufTsKICAgIGlmICggJFZlcnNpb24gIX4gL14xMVwuMC8gKSB7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0NsZWFudXBBcnRpY2xlQWN0aW9ucyggQ2hhbm5lbCA9PiAkQ2hhbm5lbCApOwogICAgfQoKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgbXkgJVNldHRpbmcgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nR2V0KAogICAgICAgIE5hbWUgICAgID0+ICJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjJENoYW5uZWwiLCAgICAjIChyZXF1aXJlZCkgU2V0dGluZyBuYW1lCiAgICAgICAgRGVwbG95ZWQgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBHZXQgZGVwbG95ZWQgc2V0dGluZyB2YWx1ZS4gRGVmYXVsdCAwLgogICAgKTsKCiAgICByZXR1cm4gaWYgISVTZXR0aW5nOwoKICAgIG15ICRFZmZlY3RpdmVWYWx1ZSA9ICRTZXR0aW5ne0VmZmVjdGl2ZVZhbHVlfTsKCiAgICBpZiAoICEkRWZmZWN0aXZlVmFsdWUtPntBZ2VudFRpY2tldEFJQ2hhdH0gKSB7CgogICAgICAgIG15ICRFeGNsdXNpdmVMb2NrR1VJRCA9ICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdMb2NrKAogICAgICAgICAgICBMb2NrQWxsID0+IDEsCiAgICAgICAgICAgIEZvcmNlICAgPT4gMSwgICAgIyAob3B0aW9uYWwpIEZvcmNlIGxvY2tpbmcgKGRvIG5vdCBjaGVjayBpZiBpdCdzIGFscmVhZHkgbG9ja2VkIGJ5IGFub3RoZXIgdXNlcikuIERlZmF1bHQ6IDAuCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwgICAgIyAocmVxdWlyZWQpCiAgICAgICAgKTsKCiAgICAgICAgJEVmZmVjdGl2ZVZhbHVlLT57QWdlbnRUaWNrZXRBSUNoYXR9ID0gewogICAgICAgICAgICAnUHJpbycgICA9PiAnMTAwNycsCiAgICAgICAgICAgICdNb2R1bGUnID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRBSUNoYXQnLAogICAgICAgICAgICAnVmFsaWQnICA9PiAnMScKICAgICAgICB9OwoKICAgICAgICBteSAlUmVzdWx0ID0gJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ1VwZGF0ZSgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gIlRpY2tldDo6RnJvbnRlbmQ6OkFydGljbGU6OkFjdGlvbnMjIyMkQ2hhbm5lbCIsICAgICMgKHJlcXVpcmVkKSBzZXR0aW5nIG5hbWUKICAgICAgICAgICAgSXNWYWxpZCAgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSAxIG9yIDAsIG1vZGlmaWVkIDAKICAgICAgICAgICAgRWZmZWN0aXZlVmFsdWUgICAgPT4gJEVmZmVjdGl2ZVZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvbmx5IG5lZWRlZCB3aGVuIElzVmFsaWQgaXMgdHVybmVkIG9uCiAgICAgICAgICAgIEV4Y2x1c2l2ZUxvY2tHVUlEID0+ICRFeGNsdXNpdmVMb2NrR1VJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKHJlcXVpcmVkKSBVc2VySUQKICAgICAgICAgICAgTm9WYWxpZGF0aW9uICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBubyB2YWx1ZSB0eXBlIHZhbGlkYXRpb24uCiAgICAgICAgKTsKCiAgICAgICAgJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ1VubG9jaygKICAgICAgICAgICAgVW5sb2NrQWxsID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlndXJhdGlvbkRlcGxveSgKICAgICAgICAgICAgQ29tbWVudHMgICAgPT4gIm90b2JvLWFpIHBhY2thZ2UgaW5zdGFsbCIsCiAgICAgICAgICAgIEFsbFNldHRpbmdzID0+IDEsCiAgICAgICAgICAgIEZvcmNlICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgX0NsZWFudXBBcnRpY2xlQWN0aW9ucyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15ICRDaGFubmVsID0gJFBhcmFte0NoYW5uZWx9OwoKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgbXkgJVNldHRpbmcgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nR2V0KAogICAgICAgIE5hbWUgICAgID0+ICJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjJENoYW5uZWwiLCAgICAjIChyZXF1aXJlZCkgU2V0dGluZyBuYW1lCiAgICAgICAgRGVwbG95ZWQgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBHZXQgZGVwbG95ZWQgc2V0dGluZyB2YWx1ZS4gRGVmYXVsdCAwLgogICAgICAgIE5vTG9nICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJVNldHRpbmc7CgogICAgbXkgJEVmZmVjdGl2ZVZhbHVlID0gJFNldHRpbmd7RWZmZWN0aXZlVmFsdWV9OwoKICAgIGlmICggJEVmZmVjdGl2ZVZhbHVlLT57QWdlbnRUaWNrZXRBSUNoYXR9ICkgewoKICAgICAgICBteSAkRXhjbHVzaXZlTG9ja0dVSUQgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nTG9jaygKICAgICAgICAgICAgTG9ja0FsbCA9PiAxLAogICAgICAgICAgICBGb3JjZSAgID0+IDEsICAgICMgKG9wdGlvbmFsKSBGb3JjZSBsb2NraW5nIChkbyBub3QgY2hlY2sgaWYgaXQncyBhbHJlYWR5IGxvY2tlZCBieSBhbm90aGVyIHVzZXIpLiBEZWZhdWx0OiAwLgogICAgICAgICAgICBVc2VySUQgID0+IDEsICAgICMgKHJlcXVpcmVkKQogICAgICAgICk7CgogICAgICAgIGRlbGV0ZSAkRWZmZWN0aXZlVmFsdWUtPntBZ2VudFRpY2tldEFJQ2hhdH07CgogICAgICAgIG15ICVSZXN1bHQgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nVXBkYXRlKAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAiVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZTo6QWN0aW9ucyMjIyRDaGFubmVsIiwgICAgIyAocmVxdWlyZWQpIHNldHRpbmcgbmFtZQogICAgICAgICAgICBJc1ZhbGlkICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIDEgb3IgMCwgbW9kaWZpZWQgMAogICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSAgICA9PiAkRWZmZWN0aXZlVmFsdWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9ubHkgbmVlZGVkIHdoZW4gSXNWYWxpZCBpcyB0dXJuZWQgb24KICAgICAgICAgICAgRXhjbHVzaXZlTG9ja0dVSUQgPT4gJEV4Y2x1c2l2ZUxvY2tHVUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAocmVxdWlyZWQpIFVzZXJJRAogICAgICAgICAgICBOb1ZhbGlkYXRpb24gICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vIHZhbHVlIHR5cGUgdmFsaWRhdGlvbi4KICAgICAgICApOwoKICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nVW5sb2NrKAogICAgICAgICAgICBVbmxvY2tBbGwgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWd1cmF0aW9uRGVwbG95KAogICAgICAgICAgICBDb21tZW50cyAgICA9PiAib3RvYm8tYWkgcGFja2FnZSBpbnN0YWxsIiwKICAgICAgICAgICAgQWxsU2V0dGluZ3MgPT4gMSwKICAgICAgICAgICAgRm9yY2UgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwoKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBfRkFRU2VhcmNoWFNMVCB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkWFNMVCA9IDw8J1hTTFQnOwo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CiAgIDx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIvPgoKICAgPCEtLSBuby1vcCBmYWxsYmFjayB0ZW1wbGF0ZSB0byBkcm9wIHVud2FudGVkIGNvbnRlbnQgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiPjwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBhbHdheXMgY29weSBmdWxsIEVycm9yIGluZm8gLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkVycm9yIj4KICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9Ii4iIC8+CiAgIDwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBGQVEgbWFwcGluZyAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYW5vbiI+CiAgICAgICA8ZmFxPgogICAgICAgICAgIDxmYXFfaWQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ikl0ZW1JRCIvPjwvZmFxX2lkPgogICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGl0bGUiLz48L3RpdGxlPgogICAgICAgICAgIDxzeW1wdGhvbT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRmllbGQxIiAvPjwvc3ltcHRob20+CiAgICAgICAgICAgPHByb2JsZW0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkZpZWxkMSIgLz48L3Byb2JsZW0+CiAgICAgICAgICAgPHNvbHV0aW9uPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJGaWVsZDEiIC8+PC9zb2x1dGlvbj4KICAgICAgIDwvZmFxPgogICAgPC94c2w6dGVtcGxhdGU+CgogICA8IS0tIG1haW4gdGVtcGxhdGUgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9Sb290RWxlbWVudCI+CiAgICAgPFJvb3RFbGVtZW50PgogICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CiAgICAgPC9Sb290RWxlbWVudD4KICAgIDwveHNsOnRlbXBsYXRlPgoKPC94c2w6c3R5bGVzaGVldD4KWFNMVAoKICAgIHJldHVybiAkWFNMVDsKfQoKc3ViIF9UaWNrZXRHZXRYU0xUIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRYU0xUID0gPDwnWFNMVCc7Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGluZGVudD0ieWVzIi8+CgogICA8IS0tIG5vLW9wIGZhbGxiYWNrIHRlbXBsYXRlIHRvIGRyb3AgdW53YW50ZWQgY29udGVudCAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiI+PC94c2w6dGVtcGxhdGU+CgogICA8IS0tIGFsd2F5cyBjb3B5IGZ1bGwgRXJyb3IgaW5mbyAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iRXJyb3IiPgogICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iLiIgLz4KICAgPC94c2w6dGVtcGxhdGU+CgogICA8IS0tIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGR5bmFtaWMgZmllbGRzCiAgICAgICAgYnkgZGVmYXVsdCBvbmx5IHRoZSBPVE9CT0FJIGZpZWxkIGlzIGtlcHQKICAgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkR5bmFtaWNGaWVsZCI+CiAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRmbmFtZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vTmFtZSIgLz48L3hzbDp2YXJpYWJsZT4KICAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJzdGFydHMtd2l0aCgkZGZuYW1lLCdPVE9CT0FJJykiPgogICAgICAgICAgICAgICA8Z2VuZXJhdGVkX2Fuc3dlcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9WYWx1ZSIgLz48L2dlbmVyYXRlZF9hbnN3ZXI+CiAgICAgICAgICAgPC94c2w6d2hlbj4KICAgICAgICAgICA8eHNsOm90aGVyd2lzZT48L3hzbDpvdGhlcndpc2U+CiAgICAgICA8L3hzbDpjaG9vc2U+CiAgIDwveHNsOnRlbXBsYXRlPgoKICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iTGlua3NbVGFyZ2V0VHlwZT0nVGlja2V0J10iPgogICAgICAgPGxpbmtlZD4KICAgICAgICAgICA8dGlja2V0PgogICAgICAgICAgICA8dGlja2V0X2lkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUYXJnZXRJRCIgLz48L3RpY2tldF9pZD4KICAgICAgICAgICAgPHR5cGU+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkxpbmtUeXBlIiAvPjwvdHlwZT4KICAgICAgICAgICAgPGRpcmVjdGlvbj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGlyZWN0aW9uIi8+PC9kaXJlY3Rpb24+CiAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJEYXRhIj4KICAgICAgICAgICAgICAgPHRpY2tldF9udW1iZXI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlRpY2tldE51bWJlciIvPjwvdGlja2V0X251bWJlcj4KICAgICAgICAgICAgICAgPHRpdGxlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUaXRsZSIvPjwvdGl0bGU+CiAgICAgICAgICAgICAgIDxzdGF0ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdGUiLz48L3N0YXRlPgogICAgICAgICAgICAgICA8cHJpb3JpdHk+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlByaW9yaXR5Ii8+PC9wcmlvcml0eT4KICAgICAgICAgICAgICAgPHF1ZXVlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJRdWV1ZSIvPjwvcXVldWU+CiAgICAgICAgICAgICAgIDxjdXN0b21lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQ3VzdG9tZXJVc2VySUQiLz48L2N1c3RvbWVyPgogICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyAvPgogICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KICAgICAgICA8L3RpY2tldD4KICAgICAgIDwvbGlua2VkPgogICA8L3hzbDp0ZW1wbGF0ZT4KCiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkxpbmtzW1RhcmdldFR5cGU9J0ZBUSddIj4KICAgICAgIDxsaW5rZWQ+CiAgICAgICAgICAgPGZhcT4KICAgICAgICAgICAgPGZhcV9pZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGFyZ2V0SUQiIC8+PC9mYXFfaWQ+CiAgICAgICAgICAgIDx0eXBlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJMaW5rVHlwZSIgLz48L3R5cGU+CiAgICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGF0YS9UaXRsZSIgLz48L3RpdGxlPgogICAgICAgICAgICA8c3lwdGhvbT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGF0YS9GaWVsZDEiIC8+PC9zeXB0aG9tPnhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkN1c3RvbWVyVXNlcklEIi8+CiAgICAgICAgICAgIDxwcm9ibGVtPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJEYXRhL0ZpZWxkMiIgLz48L3Byb2JsZW0+CiAgICAgICAgICAgIDxzb2x1dGlvbj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGF0YS9GaWVsZDMiIC8+PC9zb2x1dGlvbj4KICAgICAgICAgICAgPGRpcmVjdGlvbj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGlyZWN0aW9uIi8+PC9kaXJlY3Rpb24+CiAgICAgICAgICAgPC9mYXE+CiAgICAgICA8L2xpbmtlZD4KICAgPC94c2w6dGVtcGxhdGU+CgogICAgPCEtLSBBcnRpY2xlIG1hcHBpbmcgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkFydGljbGUiPgogICAgICAgPGFydGljbGU+CiAgICAgICAgICAgPGFydGljbGVfaWQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkFydGljbGVJRCIvPjwvYXJ0aWNsZV9pZD4KICAgICAgICAgICA8ZnJvbT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRnJvbSIvPjwvZnJvbT4KICAgICAgICAgICA8dG8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlRvIi8+PC90bz4KICAgICAgICAgICA8c3ViamVjdD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3ViamVjdCIvPjwvc3ViamVjdD4KICAgICAgICAgICA8Ym9keT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQm9keSIvPjwvYm9keT4KICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9IkNyZWF0ZWQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDcmVhdGVUaW1lIiAvPjwveHNsOnZhcmlhYmxlPgogICAgICAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0ibm90KCRDcmVhdGVkID0gJycpIj4KICAgICAgICAgICAgICAgICAgIDxjcmVhdGVkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSckQ3JlYXRlZCcgLz48L2NyZWF0ZWQ+CiAgICAgICAgICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICAgICAgICAgICAgICAgPGNyZWF0ZWQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkNyZWF0ZWQiIC8+PC9jcmVhdGVkPgogICAgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+CiAgICAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iQ2hhbm5lbCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkNvbW11bmljYXRpb25DaGFubmVsSUQiIC8+PC94c2w6dmFyaWFibGU+CiAgICAgICAgICAgPGNoYW5uZWw+CiAgICAgICAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJENoYW5uZWwgPSAnMSciPkVtYWlsPC94c2w6d2hlbj4KICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRDaGFubmVsID0gJzInIj5QaG9uZTwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkQ2hhbm5lbCA9ICczJyI+SW50ZXJuYWw8L3hzbDp3aGVuPgogICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT5PdGhlcjwveHNsOm90aGVyd2lzZT4KICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICAgICAgIDwvY2hhbm5lbD4KICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9IlNlbmRlclR5cGUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTZW5kZXJUeXBlSUQiIC8+PC94c2w6dmFyaWFibGU+CiAgICAgICAgICAgPHNlbmRlcl90eXBlPgogICAgICAgICAgICA8eHNsOmNob29zZT4KICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRTZW5kZXJUeXBlID0gJzEnIj5hZ2VudDwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkU2VuZGVyVHlwZSA9ICcyJyI+c3lzdGVtPC94c2w6d2hlbj4KICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRTZW5kZXJUeXBlID0gJzMnIj5jdXN0b21lcjwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPk90aGVyPC94c2w6b3RoZXJ3aXNlPgogICAgICAgICAgICA8L3hzbDpjaG9vc2U+CiAgICAgICAgICAgPC9zZW5kZXJfdHlwZT4KICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyAvPgogICAgICAgPC9hcnRpY2xlPgogICA8L3hzbDp0ZW1wbGF0ZT4KCiAgIDwhLS0gVGlja2V0IG1hcHBpbmcgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iVGlja2V0IiBtYXRjaD0iVGlja2V0Ij4KICAgICAgIDx0aWNrZXQ+CiAgICAgICAgICAgPHRpY2tldF9pZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGlja2V0SUQiLz48L3RpY2tldF9pZD4KICAgICAgICAgICA8dGlja2V0X251bWJlcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGlja2V0TnVtYmVyIi8+PC90aWNrZXRfbnVtYmVyPgogICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGl0bGUiLz48L3RpdGxlPgogICAgICAgICAgIDxzdGF0ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdGUiLz48L3N0YXRlPgogICAgICAgICAgIDxwcmlvcml0eT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iUHJpb3JpdHkiLz48L3ByaW9yaXR5PgogICAgICAgICAgIDxxdWV1ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iUXVldWUiLz48L3F1ZXVlPgogICAgICAgICAgIDxjdXN0b21lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQ3VzdG9tZXJVc2VySUQiLz48L2N1c3RvbWVyPgogICAgICAgICAgIDxvd25lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iT3duZXIiLz48L293bmVyPgogICAgICAgICAgIDxjcmVhdGVkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDcmVhdGVkIi8+PC9jcmVhdGVkPgogICAgICAgICAgIDxjaGFuZ2VkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDaGFuZ2VkIi8+PC9jaGFuZ2VkPgogICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIC8+CiAgICAgICA8L3RpY2tldD4KICAgIDwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBtYWluIHRlbXBsYXRlIC0tPgogICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvUm9vdEVsZW1lbnQiPgogICAgIDxSb290RWxlbWVudD4KICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgogICAgIDwvUm9vdEVsZW1lbnQ+CiAgICA8L3hzbDp0ZW1wbGF0ZT4KCjwveHNsOnN0eWxlc2hlZXQ+ClhTTFQKCiAgICByZXR1cm4gJFhTTFQ7Cn0KCnN1YiBfVGlja2V0U2VhcmNoWFNMVCB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkWFNMVCA9IDw8J1hTTFQnOwo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CiAgIDx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIvPgoKICAgPCEtLSBuby1vcCBmYWxsYmFjayB0ZW1wbGF0ZSB0byBkcm9wIHVud2FudGVkIGNvbnRlbnQgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiPjwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBhbHdheXMgY29weSBmdWxsIEVycm9yIGluZm8gLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkVycm9yIj4KICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9Ii4iIC8+CiAgIDwveHNsOnRlbXBsYXRlPgoKICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iVG8iPgogICAgICAgPHRvPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC90bz4KICAgPC94c2w6dGVtcGxhdGU+CgogICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJBcnRpY2xlc0V4dGVybmFsIj4KICAgICAgIDxhcnRpY2xlPgogICAgICAgICAgIDxzdWJqZWN0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdWJqZWN0Ii8+PC9zdWJqZWN0PgogICAgICAgICAgIDxmcm9tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJGcm9tIi8+PC9mcm9tPgogICAgICAgICAgIDxib2R5Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJCb2R5Ii8+PC9ib2R5PgogICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KICAgICAgIDwvYXJ0aWNsZT4KICAgPC94c2w6dGVtcGxhdGU+CiAgIDwhLS0gdGlja2V0IG1hcHBpbmcgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFub24iPgogICAgICAgPHRpY2tldD4KICAgICAgICAgICA8dGlja2V0X2lkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUaWNrZXRJRCIvPjwvdGlja2V0X2lkPgogICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGl0bGUiLz48L3RpdGxlPgogICAgICAgICAgIDx0aWNrZXRfbnVtYmVyPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUaWNrZXROdW1iZXIiIC8+PC90aWNrZXRfbnVtYmVyPgogICAgICAgICAgIDxjdXN0b21lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQ3VzdG9tZXJJRCIgLz48L2N1c3RvbWVyPgogICAgICAgICAgIDxjdXN0b21lcl91c2VyPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDdXN0b21lclVzZXJJRCIgLz48L2N1c3RvbWVyX3VzZXI+CiAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgogICAgICAgPC90aWNrZXQ+CiAgICA8L3hzbDp0ZW1wbGF0ZT4KCiAgIDwhLS0gbWFpbiB0ZW1wbGF0ZSAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL1Jvb3RFbGVtZW50Ij4KICAgICA8Um9vdEVsZW1lbnQ+CiAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KICAgICA8L1Jvb3RFbGVtZW50PgogICAgPC94c2w6dGVtcGxhdGU+Cgo8L3hzbDpzdHlsZXNoZWV0PgpYU0xUCgogICAgcmV0dXJuICRYU0xUOwp9CgoxOwo=</File>
        <File Location="var/webservices/metadata/OtoboAIProvider.yml" Permission="660" Encode="Base64">LS0tIApjb21wb25lbnRzOgoKICBzY2hlbWFzOgogICAgQXJ0aWNsZURGVXBkYXRlUmVxdWVzdDoKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlZGVudGlhbHMnCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIER5bmFtaWNGaWVsZDoKICAgICAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL0R5bmFtaWNGaWVsZHMnCiAgICAgICAgICAgIFRpY2tldElEOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgVGlja2V0SUQgdG8gdXBkYXRlCiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIEFydGljbGVJRDoKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIEFydGljbGVJRCB0byB1cGRhdGUKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAtIFRpY2tldElECgogICAgQXJ0aWNsZURGVXBkYXRlUmVzcG9uc2U6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0FwaUVycm9yJwogICAgICAgIC0gdHlwZTogb2JqZWN0CiAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICBUaWNrZXRJRDoKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgQXJ0aWNsZUlEOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBTdWNjZXNzOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwoKICAgIEVTU2VhcmNoUmVxdWVzdDoKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlZGVudGlhbHMnCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIEZ1bGx0ZXh0OgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgZnVsbHRleHQgc2VhcmNoIHRlcm0KICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgTGltaXQ6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzCiAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gUXVlcnkKCgogICAgRVNGQVFTZWFyY2hSZXNwb25zZToKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQXBpRXJyb3InCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGZhcToKICAgICAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICBJdGVtSUQ6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICAgICAgICBUaXRsZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgICAgRmllbGQxOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgICBGaWVsZDI6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgIEZpZWxkMzoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCiAgICBFU1RpY2tldFNlYXJjaFJlc3BvbnNlOgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcGlFcnJvcicKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgdGlja2V0OgogICAgICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQ6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgICBUaWNrZXRJRDoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgICBUaXRsZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgICAgQXJ0aWNsZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICAgICAgU3ViamVjdDoKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICBCb2R5OiAKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICBGcm9tOiAKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICBUbzoKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCgogICAgUXVlcnlFbWJlZGRpbmdzUmVxdWVzdDoKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlZGVudGlhbHMnCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIFRpY2tldElEOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaWNrZXRJRAogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBBcnRpY2xlSUQ6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IEFydGljbGVJRAogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBDb2xsZWN0aW9uOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBDb2xsZWN0aW9uCiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZW51bToKICAgICAgICAgICAgICAgIC0gZmFxcwogICAgICAgICAgICAgICAgLSB0aWNrZXRfcGFpcnMKICAgICAgICAgICAgICAgIC0gdGlja2V0X2NodW5rcwogICAgICAgICAgICAgICAgLSBkb2NzCgogICAgUXVlcnlFbWJlZGRpbmdzUmVzcG9uc2U6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0FwaUVycm9yJwogICAgICAgIC0gdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOiAgICAgICAgICAgIAogICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgICBwYWdlX2NvbnRlbnQ6CiAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgaWQ6CiAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgbWV0YWRhdGE6CiAgICAgICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICAgIGZ1bGx0ZXh0OgogICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgc291cmNlX2lkOgogICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgbGFiZWw6CiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCgogICAgVGlja2V0TGlua1JlcXVlc3Q6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWRlbnRpYWxzJwogICAgICAgIC0gdHlwZTogb2JqZWN0CiAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICBUaWNrZXRJRDoKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGlja2V0SUQKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgVGFyZ2V0VHlwZToKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGFyZ2V0IE9iamVjdCBUeXBlCiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZW51bToKICAgICAgICAgICAgICAgIC0gVGlja2V0CiAgICAgICAgICAgICAgICAtIEZBUQogICAgICAgICAgICAgICAgLSBDb25maWdJdGVtICAgICAgICAgICAgICAgIAogICAgICAgICAgICBMaW5rVHlwZToKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGFyZ2V0IExpbmsgVHlwZQogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGVudW06CiAgICAgICAgICAgICAgICAtIE5vcm1hbAogICAgICAgICAgICAgICAgLSBQYXJlbnRDaGlsZAogICAgICAgICAgICAgICAgLSBMb2NhdGlvbk9mCiAgICAgICAgICAgICAgICAtIEluY2x1ZGVzCiAgICAgICAgICAgICAgICAtIEFsdGVybmF0aXZlVG8KICAgICAgICAgICAgICAgIC0gQ29ubmVjdGVkVG8KICAgICAgICAgICAgICAgIC0gRGVwZW5kc09uCiAgICAgICAgICAgICAgICAtIFJlbGV2YW50VG8gICAgICAgICAgICAgICAgCiAgICAgICAgICAgIFRhcmdldElEOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUYXJnZXQgT2JqZWN0IElECiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCgogICAgVGlja2V0TGlua1Jlc3BvbnNlOgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcGlFcnJvcicKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgU3VjY2VzczoKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCiAgICBUaWNrZXRVbmxpbmtSZXF1ZXN0OgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVkZW50aWFscycKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgVGlja2V0SUQ6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFRpY2tldElECiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIFRhcmdldFR5cGU6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFRhcmdldCBPYmplY3QgVHlwZQogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGVudW06CiAgICAgICAgICAgICAgICAtIFRpY2tldAogICAgICAgICAgICAgICAgLSBGQVEKICAgICAgICAgICAgICAgIC0gQ29uZmlnSXRlbSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgTGlua1R5cGU6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFRhcmdldCBMaW5rIFR5cGUKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICBlbnVtOgogICAgICAgICAgICAgICAgLSBOb3JtYWwKICAgICAgICAgICAgICAgIC0gUGFyZW50Q2hpbGQKICAgICAgICAgICAgICAgIC0gTG9jYXRpb25PZgogICAgICAgICAgICAgICAgLSBJbmNsdWRlcwogICAgICAgICAgICAgICAgLSBBbHRlcm5hdGl2ZVRvCiAgICAgICAgICAgICAgICAtIENvbm5lY3RlZFRvCiAgICAgICAgICAgICAgICAtIERlcGVuZHNPbgogICAgICAgICAgICAgICAgLSBSZWxldmFudFRvICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBUYXJnZXRJRDoKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGFyZ2V0IE9iamVjdCBJRAogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwoKICAgIFRpY2tldFVubGlua1Jlc3BvbnNlOgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcGlFcnJvcicKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgU3VjY2VzczoKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCgpUaWNrZXQ6OkFydGljbGVERlVwZGF0ZTogCiAgUXVlcnlQYXJhbXM6CiAgICBHRVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcgIAogICAgLSBkZXNjcmlwdGlvbjogQXJ0aWNsZUlECiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBBcnRpY2xlSUQKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcgICAgCiAgICBQVVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcgIAogICAgLSBkZXNjcmlwdGlvbjogQXJ0aWNsZUlECiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBBcnRpY2xlSUQKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcgICAgCiAgUmVxdWVzdEJvZHk6CiAgICBjb250ZW50OgogICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgU2ltcGxlOgogICAgICAgICAgICB2YWx1ZToKICAgICAgICAgICAgICBUaWNrZXRJRDogMQogICAgICAgICAgICAgIER5bmFtaWNGaWVsZDoKICAgICAgICAgICAgICAtIE5hbWU6IE15RHluYW1pY0ZpZWxkTmFtZQogICAgICAgICAgICAgICAgVmFsdWU6IFNvbWVWYWx1ZQogICAgICAgICAgV2l0aEFydGljbGVJRDoKICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgVGlja2V0SUQ6IDEKICAgICAgICAgICAgICBBcnRpY2xlSUQ6IDE4CiAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkOgogICAgICAgICAgICAgIC0gTmFtZTogTXlEeW5hbWljRmllbGROYW1lCiAgICAgICAgICAgICAgICBWYWx1ZTogU29tZVZhbHVlCiAgICAgICAgc2NoZW1hOgogICAgICAgICAgJHJlZiA6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcnRpY2xlREZVcGRhdGVSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBmb286CiAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgICBBcnRpY2xlSUQ6IDcKICAgICAgICAgICAgICAgIFRpY2tldElEOiA3CiAgICAgICAgICAgICAgICBTdWNlc3MgOiAxCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQXJ0aWNsZURGVXBkYXRlUmVzcG9uc2UnCiAgICAgIGRlc2NyaXB0aW9uOiAyMDAgcmVzcG9uc2UKCkVsYXN0aWNTZWFyY2g6OkZBUVNlYXJjaDoKICBRdWVyeVBhcmFtczogCiAgICBHRVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcKICAgIC0gZGVzY3JpcHRpb246IEZ1bGx0ZXh0IHF1ZXJ5IHRlcm0KICAgICAgaW46IHF1ZXJ5CiAgICAgIG5hbWU6IEZ1bGx0ZXh0CiAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgIC0gZGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzCiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBMaW1pdAogICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IGludGVnZXIKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFF1ZXJ5OiAnV2hvIGxldCB0aGUgZG9ncyBvdXQ/JwogICAgICAgIHNjaGVtYToKICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvRVNTZWFyY2hSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBmYXFzOgogICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgLSBmYXE6CiAgICAgICAgICAgICAgICAgIGZhcV9pZDogMgogICAgICAgICAgICAgICAgICBzeW1wdGhvbSA6ICJBIHN5bXB0aG9tIgogICAgICAgICAgICAgICAgICBwcm9ibGVtOiAiQSBwcm9ibGVtIgogICAgICAgICAgICAgICAgICBzb2x1dGlvbjogIlRoZSBzb2x1dGlvbiIKICAgICAgICAgICAgICAgICAgdGl0bGU6ICJzb21lIHRpdGxlIgogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL0VTRkFRU2VhcmNoUmVzcG9uc2UnCiAgICAgIGRlc2NyaXB0aW9uOiAyMDAgcmVzcG9uc2UKCkVsYXN0aWNTZWFyY2g6OlRpY2tldFNlYXJjaDoKICBRdWVyeVBhcmFtczogCiAgICBHRVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcKICAgIC0gZGVzY3JpcHRpb246IEZ1bGx0ZXh0IHF1ZXJ5IHRlcm0KICAgICAgaW46IHF1ZXJ5CiAgICAgIG5hbWU6IEZ1bGx0ZXh0CiAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgIC0gZGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzCiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBMaW1pdAogICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IGludGVnZXIKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFF1ZXJ5OiAnV2hvIGxldCB0aGUgZG9ncyBvdXQ/JwogICAgICAgIHNjaGVtYToKICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvRVNTZWFyY2hSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBmYXFzOgogICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgLSB0aWNrZXQgCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvRVNUaWNrZXRTZWFyY2hSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKVGlja2V0OjpRdWVyeUVtYmVkZGluZ3M6CiAgUXVlcnlQYXJhbXM6IAogICAgR0VUOgogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvVXNlckxvZ2luJwogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvUGFzc3dvcmQnCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9TZXNzaW9uSUQnCiAgICAtIGRlc2NyaXB0aW9uOiBUaWNrZXRJRAogICAgICBpbjogcXVlcnkKICAgICAgbmFtZTogVGlja2V0SUQKICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IHN0cmluZwogICAgLSBkZXNjcmlwdGlvbjogQXJ0aWNsZUlECiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBBcnRpY2xlSUQKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgIC0gZGVzY3JpcHRpb246IENvbGxlY3Rpb24gbmFtZQogICAgICBpbjogcXVlcnkKICAgICAgbmFtZTogQ29sbGVjdGlvbgogICAgICByZXF1aXJlZDogdHJ1ZQogICAgICBzY2hlbWE6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgZW51bToKICAgICAgICAgIC0gZmFxcwogICAgICAgICAgLSB0aWNrZXRfcGFpcnMKICAgICAgICAgIC0gdGlja2V0X2NodW5rcwogICAgICAgICAgLSBkb2NzCiAgICAtIGRlc2NyaXB0aW9uOiBRdWVyeSBmb3Igc2ltaWxhciBpdGVtIHNlYXJjaC4gaWYgb21pdHRlZCwgc3ViamVjdCArIGJvZHkgb2YgdGhlIHJlZmVyZW5jZWQgYXJ0aWNsZSBpcyB1c2VkCiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBRdWVyeQogICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IHN0cmluZwoKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFRpY2tldElEOiAxLAogICAgICAgICAgICAgIEFydGljbGVJRDogMSwKICAgICAgICAgICAgICBDb2xsZWN0aW9uczogZmFxcywKICAgICAgICBzY2hlbWE6CiAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL1F1ZXJ5RW1iZWRkaW5nc1JlcXVlc3QnCiAgICByZXF1aXJlZDogdHJ1ZQogIFJlc3BvbnNlczoKICAgIDIwMDoKICAgICAgY29udGVudDoKICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICAgIGZhcXM6CiAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgICAtIGlkOiA8dXVpZD4KICAgICAgICAgICAgICAgICAgcGFnZV9jb250ZW50OiAnZW1iZWRkZWQgdGV4dCcKICAgICAgICAgICAgICAgICAgdHlwZTogRG9jdW1lbnQKICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6CiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRlZmF1bHQKICAgICAgICAgICAgICAgICAgICBzb3VyY2VfaWQ6IDEKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZiA6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9RdWVyeUVtYmVkZGluZ3NSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKClRpY2tldDo6TGluazoKICBRdWVyeVBhcmFtczoKICAgIFBVVDoKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1VzZXJMb2dpbicKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Bhc3N3b3JkJwogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvU2Vzc2lvbklEJyAgICAKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFRpY2tldElEOiAxLAogICAgICAgICAgICAgIFRhcmdldFR5cGU6IFRpY2tldAogICAgICAgICAgICAgIExpbmtUeXBlOiBOb3JtYWwKICAgICAgICAgICAgICBUYXJnZXRJRDogMiwKICAgICAgICAgIFBhcmVudENoaWxkOgogICAgICAgICAgICB2YWx1ZToKICAgICAgICAgICAgICBUaWNrZXRJRDogMSwKICAgICAgICAgICAgICBUYXJnZXRUeXBlOiBUaWNrZXQKICAgICAgICAgICAgICBMaW5rVHlwZTogUGFyZW50Q2hpbGQKICAgICAgICAgICAgICBUYXJnZXRJRDogMiwKICAgICAgICBzY2hlbWE6CiAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL1RpY2tldExpbmtSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBTdWNjZXNzIDogMQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL1RpY2tldExpbmtSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKClRpY2tldDo6VW5MaW5rOgogIFF1ZXJ5UGFyYW1zOgogICAgREVMRVRFOgogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvVXNlckxvZ2luJwogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvUGFzc3dvcmQnCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9TZXNzaW9uSUQnICAgIAogIFJlcXVlc3RCb2R5OgogICAgY29udGVudDoKICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIFNpbXBsZToKICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgVGlja2V0SUQ6IDEsCiAgICAgICAgICAgICAgVGFyZ2V0VHlwZTogVGlja2V0CiAgICAgICAgICAgICAgTGlua1R5cGU6IE5vcm1hbAogICAgICAgICAgICAgIFRhcmdldElEOiAyLAogICAgICAgICAgUGFyZW50Q2hpbGQ6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFRpY2tldElEOiAxLAogICAgICAgICAgICAgIFRhcmdldFR5cGU6IFRpY2tldAogICAgICAgICAgICAgIExpbmtUeXBlOiBQYXJlbnRDaGlsZAogICAgICAgICAgICAgIFRhcmdldElEOiAyLAogICAgICAgIHNjaGVtYToKICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvVGlja2V0VW5saW5rUmVxdWVzdCcKICAgIHJlcXVpcmVkOiB0cnVlCiAgUmVzcG9uc2VzOgogICAgMjAwOgogICAgICBjb250ZW50OgogICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICBleGFtcGxlczoKICAgICAgICAgICAgU3VjY2VzcyA6IDEKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZiA6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9UaWNrZXRVbmxpbmtSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKCg==</File>
        <File Location="doc/en/OTOBO-AI.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>