<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>ServiceCatalog</Name>
    <Version>11.1.4</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-21 17:29:59" Version="11.1.4">Fix the console command Admin::ServiceCatalog::AddBulkACL. This command did not execute because of a syntax error.</ChangeLog>
    <ChangeLog Date="2026-10-16 11:03:01" Version="11.1.3">Fix several bugs regarding the ACLs that show services in dependence on ticket types.
- Remove service from ACLs when a service is invalidated
- Remove service from ACLs when a ticket type has been removed from a service

Some improvements have been implemented:
- Handle the case where a service is renamed
- Only deploy ACLs when at least on ACL has been changed
- Added a test script
- Order the ticket type IDs in ServiceGet()
- Use SelectColArray() for getting the ticket type IDs
- Incorporate recent changes from the original file in ITSMCore
- Update translations</ChangeLog>
    <ChangeLog Date="2026-09-03 08:54:00" Version="11.1.2">Fix missing sysconfig for dynamic field screens. (#23)</ChangeLog>
    <ChangeLog Date="2026-06-24 10:45:21" Version="11.1.1">Update to OTOBO 11.1.</ChangeLog>
    <Description Lang="de">Ein ausführlicher Leistungskatalog.</Description>
    <Description Lang="en">A detailed service catalog.</Description>
    <Description Lang="es">Catálogo de Servicios detallado.</Description>
    <Framework>11.1.x</Framework>
    <IntroInstall Lang="en" Title="Install Information" Type="pre">
        &lt;br&gt;
        WELCOME!&lt;br&gt;
        &lt;br&gt;
        You are about to install the Rother OSS Service Catalog package.&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        For more information visit:&lt;br&gt;
        &lt;br&gt;
        https://otobo.de &lt;br&gt;
        &lt;br&gt;
    </IntroInstall>
    <IntroInstall Lang="de" Title="Installationsinformationen" Type="pre">
        &lt;br&gt;
        Herzlich willkommen!&lt;br&gt;
        &lt;br&gt;
        Sie sind dabei, das Rother OSS Service Catalog-Paket zu installieren.&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        Weitere Informationen finden Sie unter der URL:&lt;br&gt;
        &lt;br&gt;
        https://otobo.de &lt;br&gt;
        &lt;br&gt;
    </IntroInstall>
    <IntroInstall Lang="es" Title="Información de Instalación" Type="pre">
        &lt;br&gt;
        BIENVENIDO!&lt;br&gt;
        &lt;br&gt;
        Usted está a punto de instalar el paquete del Catálogo de Servicios de Rother OSS.&lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        &lt;br&gt;
        Para más información visite:&lt;br&gt;
        &lt;br&gt;
        https://otobo.de &lt;br&gt;
        &lt;br&gt;
    </IntroInstall>
    <IntroInstall Lang="en" Title="Install Information" Type="post">
        &lt;br&gt;
        NOTE:&lt;br&gt;
        &lt;br&gt;
        To show the service catalog to your customers you have to enable the dashboard tile 'CustomerDashboard::Tiles###ServiceCatalog-01'.&lt;br&gt;
        If you don't want to spend time setting your customer dashboard, and just have a look,
        we suggest to temporarily disable your other tile with order 7, which is on a standard installation '###InfoTile-01'.&lt;br&gt;
        &lt;br&gt;
    </IntroInstall>
    <IntroInstall Lang="de" Title="Installationsinformationen" Type="post">
        &lt;br&gt;
        BEACHTE:&lt;br&gt;
        &lt;br&gt;
        Um den Service Catalog Ihren Kunden zugänglich zu machen, ist es nötig die Dashboard-Kachel 'CustomerDashboard::Tiles###ServiceCatalog-01' zu aktivieren.&lt;br&gt;
        Um diese einfach erst einmal anzusehen, ohne das gesamte Dashboard neu setzen zu müssen,
        empfehlen wir vorübergehend die andere Kachel mit &quot;order&quot; 7 zu deaktivieren, auf einer Standart-Installation ist dies '###InfoTile-01'.&lt;br&gt;
        &lt;br&gt;
    </IntroInstall>
    <IntroUpgrade Lang="en" Title="Upgrade Information" Type="post">
        &lt;br&gt;
        NOTE:&lt;br&gt;
        &lt;br&gt;
        When upgrading from version 11.0.2 or lower, please check that 'CustomerDashboard::Tiles###ServiceCatalog-01' is still enabled.&lt;br&gt;
        &lt;br&gt;
    </IntroUpgrade>
    <IntroUpgrade Lang="de" Title="Upgrade-Informationen" Type="post">
        &lt;br&gt;
        BEACHTE:&lt;br&gt;
        &lt;br&gt;
        Wenn Sie von Version 11.0.2 oder niedriger updaten, prüfen Sie bitte, ob 'CustomerDashboard::Tiles###ServiceCatalog-01' noch aktiviert ist.&lt;br&gt;
        &lt;br&gt;
    </IntroUpgrade>
    <PackageMerge Name="RotherOSS-ServiceCatalog" TargetVersion="10.0.4"></PackageMerge>
    <PackageRequired Version="11.1.0">ITSMCore</PackageRequired>
    <CodeUpgrade Type="post" Version="11.0.3">
        # create the package name
        my $CodeModule = 'var::packagesetup::' . $Param{Structure}-&gt;{Name}-&gt;{Content};

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

        # create the package name
        my $CodeModule = 'var::packagesetup::' . $Param{Structure}-&gt;{Name}-&gt;{Content};

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeUninstall();
    </CodeUninstall>
    <BuildCommitID>2a528dea67cbb711a3e433256016cd1aace84d9e</BuildCommitID>
    <BuildDate>2026-10-21 17:30:03</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AdminService.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBlYTIxMTkwMjEzMGNhNWI3OTZkOTY2ODQ1OTcwY2ZjNTQ2NDQ0NTQ4IC0gS2VybmVsL01vZHVsZXMvQWRtaW5TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pblNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKIyBFTyBJVFNNQ29yZQoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIHNldCBwcmVmIGZvciBjb2x1bW5zIGtleQogICAgJFNlbGYtPntQcmVmS2V5SW5jbHVkZUludmFsaWR9ID0gJ0luY2x1ZGVJbnZhbGlkJyAuICctJyAuICRTZWxmLT57QWN0aW9ufTsKCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA9ICRQcmVmZXJlbmNlc3sgJFNlbGYtPntQcmVmS2V5SW5jbHVkZUludmFsaWR9IH07CgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgIyBnZXQgZm9ybSBpZAogICAgJFNlbGYtPntGb3JtSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1JRCcgKTsKCiAgICAjIGNyZWF0ZSBmb3JtIGlkCiAgICBpZiAoICEkU2VsZi0+e0Zvcm1JRH0gKSB7CiAgICAgICAgJFNlbGYtPntGb3JtSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKS0+Rm9ybUlEQ3JlYXRlKCk7CiAgICB9CgogICAgJFNlbGYtPntEeW5hbWljRmllbGRMb29rdXB9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1NlcnZpY2UnLAogICAgKTsKIyBFTyBTZXJ2aWNlQ2F0YWxvZwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgogICAgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbmNsdWRlSW52YWxpZCcgKTsKCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgS2V5ICAgID0+ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSwKICAgICAgICAgICAgVmFsdWUgID0+ICRQYXJhbXtJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUGFyYW17SW5jbHVkZUludmFsaWR9OwogICAgfQoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CiMgRU8gU2VydmljZUNhdGFsb2cKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmIH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIHNldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9ID0gJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX07CiMgRU8gSVRTTUNvcmUKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNlcnZpY2UgZWRpdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlcnZpY2VFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICVHZXRQYXJhbTsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMjIFJvdGhlciBPU1MgLyBJVFNNQ29yZQojIyAgICAgICAgZm9yIChxdyhTZXJ2aWNlSUQgUGFyZW50SUQgTmFtZSBWYWxpZElEIENvbW1lbnQpKSB7CiMgICAgICAgIGZvciAocXcoU2VydmljZUlEIFBhcmVudElEIE5hbWUgVmFsaWRJRCBDb21tZW50IFR5cGVJRCBDcml0aWNhbGl0eSkpIHsKIyMgRU8gSVRTTUNvcmUKCiAgICAgICAgQHsgJEdldFBhcmFte1RpY2tldFR5cGVJRHN9IH0gPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnVGlja2V0VHlwZUlEcycgKTsKICAgICAgICBAeyAkR2V0UGFyYW17TGFuZ3VhZ2VJRH0gfSAgICA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdMYW5ndWFnZUlEJyApOwoKICAgICAgICBmb3IgKHF3KFNlcnZpY2VJRCBQYXJlbnRJRCBOYW1lIFZhbGlkSUQgQ29tbWVudCBDcml0aWNhbGl0eSBDdXN0b21lckRlZmF1bHRTZXJ2aWNlIERlc3RRdWV1ZUlEIEtleXdvcmRzKSkgewojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgICRHZXRQYXJhbXskX30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgbXkgJUVycm9yOwoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKCiAgICAgICAgIyBnZXQgY29tcG9zZWQgY29udGVudCB0eXBlCiAgICAgICAgJEdldFBhcmFte0NvbnRlbnRUeXBlfSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgc3ViamVjdCBhbmQgYm9keSBmb3IgYWxsIGxhbmd1YWdlcwogICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIEB7ICRHZXRQYXJhbXtMYW5ndWFnZUlEfSB9ICkgewoKICAgICAgICAgICAgbXkgJERlc2NyaXB0aW9uU2hvcnQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkTGFuZ3VhZ2VJRCAuICdfRGVzY3JpcHRpb25TaG9ydCcgKSB8fCAnJzsKICAgICAgICAgICAgbXkgJERlc2NyaXB0aW9uTG9uZyAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkTGFuZ3VhZ2VJRCAuICdfRGVzY3JpcHRpb25Mb25nJyApICAgIHx8ICcnOwoKICAgICAgICAgICAgJEdldFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2VJRH0gPSB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICREZXNjcmlwdGlvblNob3J0LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICA9PiAkRGVzY3JpcHRpb25Mb25nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICA9PiAkR2V0UGFyYW17Q29udGVudFR5cGV9LAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgIyBzZXQgc2VydmVyIGVycm9yIGZsYWcgaWYgZmllbGQgaXMgZW1wdHkKICAgICAgICAgICAgaWYgKCAhJERlc2NyaXB0aW9uU2hvcnQgKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7ICRMYW5ndWFnZUlEIC4gJ19EZXNjcmlwdGlvblNob3J0U2VydmVyRXJyb3InIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIHZhbHVlcwogICAgICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkTG9va3VwfSB9KSB7CgogICAgICAgICAgICAkR2V0UGFyYW17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGQtPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGQsCiAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgICAgIGlmICggISRHZXRQYXJhbXtOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydOYW1lSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICcnOwogICAgICAgIGlmICggJEdldFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICAgICAgbXkgJFByZWZpeCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtQYXJlbnRJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFByZWZpeCkgewogICAgICAgICAgICAgICAgJFNlcnZpY2VOYW1lID0gJFByZWZpeCAuICI6OiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJFNlcnZpY2VOYW1lIC49ICRHZXRQYXJhbXtOYW1lfTsKCiAgICAgICAgaWYgKCBsZW5ndGggJFNlcnZpY2VOYW1lID4gMjAwICkgewogICAgICAgICAgICAkRXJyb3J7J05hbWVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3J7TG9uZ05hbWV9ICAgICAgPSAxOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAgICAgICAgICMgc2F2ZSB0byBkYXRhYmFzZQogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtTZXJ2aWNlSUR9IGVxICdORVcnICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte1NlcnZpY2VJRH0gPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkTG9nT2JqZWN0LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkTG9nT2JqZWN0LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAjIHNldCBjdXN0b21lciB1c2VyIHNlcnZpY2UgbWVtYmVyCiAgICAgICAgICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgID0+ICRHZXRQYXJhbXtDdXN0b21lckRlZmF1bHRTZXJ2aWNlfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKIyBFTyBTZXJ2aWNlQ2F0YWxvZwoKICAgICAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgICAgICMgdXBkYXRlIHByZWZlcmVuY2VzCiAgICAgICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NlcnZpY2VQcmVmZXJlbmNlcycpIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewogICAgICAgICAgICAgICAgICAgIG15ICRNb2R1bGUgPSAkUHJlZmVyZW5jZXN7JEl0ZW19LT57TW9kdWxlfQogICAgICAgICAgICAgICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlNlcnZpY2VQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG15ICROb3RlOwogICAgICAgICAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSApOwogICAgICAgICAgICAgICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRQYXJhbUl0ZW0tPntOYW1lfSB9ID0gXEBBcnJheTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcmFtICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTm90ZSAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIEluZm8gPT4gJE9iamVjdC0+RXJyb3IoKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKCiAgICAgICAgICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNEYXRhKAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgR2V0IGFsbCBleGlzdGluZyBhdHRhY2htZW50cy4KICAgICAgICAgICAgICAgIG15IEBFeGlzdGluZ0F0dGFjaG1lbnRzID0gJFNlcnZpY2VPYmplY3QtPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dJbmxpbmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRMYW5ndWFnZUlEICggQHsgJEdldFBhcmFte0xhbmd1YWdlSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgIyBMb29rdXAgb2xkIGlubGluZSBhdHRhY2htZW50cyAoaW5pdGlhbGx5IGxvYWRlZCB0byBBZG1pblNlcnZpY2UucG0gc2NyZWVuKQogICAgICAgICAgICAgICAgICAgICMgYW5kIHB1c2ggdG8gQXR0YWNobWVudHMgYXJyYXkgaWYgdGhleSBzdGlsbCBleGlzdCBpbiB0aGUgZm9ybS4KICAgICAgICAgICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2VJRH0tPntEZXNjcmlwdGlvbkxvbmd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9fiBteyBBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtTZXJ2aWNlSUQ9JEdldFBhcmFte1NlcnZpY2VJRH07RmlsZUlEPSRBdHRhY2htZW50LT57RmlsZUlEfSB9bXN4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2V0IHRoZSBleGlzdGluZyBpbmxpbmUgYXR0YWNobWVudCBkYXRhLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUZpbGUgPSAkU2VydmljZU9iamVjdC0+QXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlEICAgID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRGaWxle0NvbnRlbnR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICRGaWxle0NvbnRlbnRUeXBlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkRmlsZXtGaWxlbmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXNpemUgICAgPT4gJEZpbGV7RmlsZXNpemV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJRCAgICAgID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBCdWlsZCBhIGxvb2t1cCBoYXNoIG9mIHRoZSBuZXcgYXR0YWNobWVudHMuCiAgICAgICAgICAgICAgICBteSAlTmV3QXR0YWNobWVudDsKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAgICAgICAgICMgVGhlIGtleSBpcyB0aGUgZmlsZW5hbWUgKyBmaWxlc2l6ZSArIGNvbnRlbnQgdHlwZS4KICAgICAgICAgICAgICAgICAgICBteSAkS2V5ID0gJEF0dGFjaG1lbnQtPntGaWxlbmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudC0+e0ZpbGVzaXplfQogICAgICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9OwoKICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBjb250ZW50IGlkIGlmIGF2YWlsYWJsZSAoZm9yIG5ldyBpbmxpbmUgaW1hZ2VzKS4KICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtleSAuPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIFN0b3JlIGFsbCBvZiB0aGUgbmV3IGF0dGFjaG1lbnQgZGF0YS4KICAgICAgICAgICAgICAgICAgICAkTmV3QXR0YWNobWVudHskS2V5fSA9ICRBdHRhY2htZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnRzLgogICAgICAgICAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICAgICAjIFRoZSBrZXkgaXMgdGhlIGZpbGVuYW1lICsgZmlsZXNpemVyYXcgKyBjb250ZW50IHR5cGUgKG5vIGNvbnRlbnQgaWQsIGFzIGV4aXN0aW5nIGF0dGFjaG1lbnRzIGRvbid0IGhhdmUgaXQpLgogICAgICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkQXR0YWNobWVudC0+e0ZpbGVuYW1lfQogICAgICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57RmlsZXNpemVSYXd9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX07CgogICAgICAgICAgICAgICAgICAgICMgQXR0YWNobWVudCBpcyBhbHJlYWR5IGV4aXN0aW5nLCB3ZSBjYW4gZGVsZXRlIGl0IGZyb20gdGhlIG5ldyBhdHRhY2htZW50IGhhc2guCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTmV3QXR0YWNobWVudHskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICROZXdBdHRhY2htZW50eyRLZXl9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBFeGlzdGluZyBhdHRhY2htZW50IGlzIG5vIGxvbmdlciBpbiBuZXcgYXR0YWNobWVudHMgaGFzaC4KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgRGVsZXRlIHRoZSBleGlzdGluZyBhdHRhY2htZW50LgogICAgICAgICAgICAgICAgICAgICAgICBteSAkRGVsZXRlU3VjY2Vzc2Z1bCA9ICRTZXJ2aWNlT2JqZWN0LT5BdHRhY2htZW50RGVsZXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlEICAgID0+ICRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISREZWxldGVTdWNjZXNzZnVsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewogICAgICAgICAgICAgICAgICAgICMgVXBsb2FkIGF0dGFjaG1lbnRzLgogICAgICAgICAgICAgICAgICAgIG15ICRGaWxlSUQgPSAkU2VydmljZU9iamVjdC0+QXR0YWNobWVudEFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVOYW1lICAgID0+ICRBdHRhY2htZW50LT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50U2l6ZSA9PiAkQXR0YWNobWVudC0+e0ZpbGVzaXplfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRBdHRhY2htZW50LT57Q29udGVudH0sCiAgICAgICAgICAgICAgICAgICAgICAgIElubGluZSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkRmlsZUlEICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBSZXdyaXRlIHRoZSBVUkxzIG9mIHRoZSBpbmxpbmUgaW1hZ2VzIGZvciB0aGUgdXBsb2FkZWQgcGljdHVyZXMuCiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUlubGluZUF0dGFjaG1lbnRVUkxVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBGaWxlSUQgICAgID0+ICRGaWxlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgdXBkYXRlIHRoZSBpbmxpbmUgaW1hZ2UgVVJMcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiZm9yIFNlcnZpY2VJRCAnJEdldFBhcmFte1NlcnZpY2VJRH0nISIsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEUmVtb3ZlKCBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9ICk7CgogICAgICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZExvb2t1cH0gfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTZXQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGQtPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICggISRWYWx1ZVNldCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gc2V0IHZhbHVlIGZvciBkeW5hbWljIGZpZWxkICVzIScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgQ3JlYXRlIEFjbCBpZiBjb25maWcgaXMgZW5hYmxlZAogICAgICAgICAgICAgICAgIyBXZSBjcmVhdGUgb25lIEFjbCBwZXIgVGlja2V0LVR5cGUKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscycpICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlT2JqZWN0LT5VcGRhdGVUeXBlU2VydmljZUFDTCgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0VHlwZUlEcyA9PiAkR2V0UGFyYW17VGlja2V0VHlwZUlEc30sCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VWYWxpZCAgPT4gJEdldFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KIyBFTyBTZXJ2aWNlQ2F0YWxvZwoKICAgICAgICAgICAgICAgICMgaWYgdGhlIHVzZXIgd291bGQgbGlrZSB0byBjb250aW51ZSBlZGl0aW5nIHRoZSBzZXJ2aWNlLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkgZXEgJzEnICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlcnZpY2VJRCcgKSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1TZXJ2aWNlRWRpdDtTZXJ2aWNlSUQ9JElEIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0dXJuIHRvIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzb21ldGhpbmcgd2VudCB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRFcnJvcntNZXNzYWdlfQogICAgICAgICAgICA/ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBJbmZvICAgICA9PiAkRXJyb3J7TWVzc2FnZX0sCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAnJzsKCiAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrTmV3KAogICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgaXMgZW5hYmxlZCB0byB1c2UgaXQgaGVyZQogICAgICAgIGlmICggISRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggIlBsZWFzZSBhY3RpdmF0ZSAlcyBmaXJzdCEiLCAiU2VydmljZSIgKSwKICAgICAgICAgICAgICAgIExpbmsgICAgID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZG1pblN5c3RlbUNvbmZpZ3VyYXRpb247U3ViYWN0aW9uPVZpZXc7U2V0dGluZz1UaWNrZXQlM0ElM0FTZXJ2aWNlOycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkFkZCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW5jbHVkZUludmFsaWQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEluY2x1ZGVJbnZhbGlkICAgICAgICA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSwKICAgICAgICAgICAgICAgIEluY2x1ZGVJbnZhbGlkQ2hlY2tlZCA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/ICdjaGVja2VkJyA6ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0ZpbHRlcicgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnSW1wb3J0RXhwb3J0V2lkZ2V0JyApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByZXN1bHQKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAkU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICA9PiAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA/IDAgOiAxLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBzZXJ2aWNlcyBkZWZpbmVkLCB0aGV5IGFyZSBzaG93bgogICAgICAgIGlmICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwoKICAgICAgICAgICAgIyBzb3J0IHRoZSBzZXJ2aWNlIGxpc3QgYnkgbG9uZyBzZXJ2aWNlIG5hbWUKICAgICAgICAgICAgQHskU2VydmljZUxpc3R9ID0gc29ydCB7ICRhLT57TmFtZX0gLiAnOjonIGNtcCAkYi0+e05hbWV9IC4gJzo6JyB9IEB7JFNlcnZpY2VMaXN0fTsKCiAgICAgICAgICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3RSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyRTZXJ2aWNlRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZExpc3R7ICRTZXJ2aWNlRGF0YS0+e1ZhbGlkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBhIG5vIGRhdGEgZm91bmQgbXNnIGlzIGRpc3BsYXllZAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2VydmljZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CiAgICByZXR1cm47Cn0KCnN1YiBfTWFza05ldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgIG15ICVTZXJ2aWNlRGF0YTsKCiAgICAjIGdldCBwYXJhbXMKICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKTsKICAgIGlmICggJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gbmUgJ05FVycgKSB7CiAgICAgICAgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICAgICAkUGFyYW17RGVzY3JpcHRpb25zfSA9ICRTZXJ2aWNlRGF0YXtEZXNjcmlwdGlvbnN9OwojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICB9CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAkUGFyYW17Rm9ybUlEfSA9ICRTZWxmLT57Rm9ybUlEfTsKCiAgICBteSAkSFRNTFV0aWxzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpOwojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgU2VydmljZUlEICAgPT4gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFNlcnZpY2VOYW1lID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICMgb3V0cHV0IHNlcnZpY2Ugb3B0aW9uIHJlZmVyZW5jZQogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2VydmljZVJlZmVyZW5jZScsCiAgICApOwojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkTGlzdFR5cGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJyk7CgogICAgIyBnZW5lcmF0ZSBQYXJlbnRPcHRpb25TdHJnCiAgICBteSAkS2VlcENoaWxkcmVuID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OktlZXBDaGlsZHJlbicpIC8vIDA7CiAgICBteSAlU2VydmljZUxpc3QgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICAgICAgICA9PiAhJEtlZXBDaGlsZHJlbiwKICAgICAgICBLZWVwQ2hpbGRyZW4gPT4gJEtlZXBDaGlsZHJlbiwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZXJ2aWNlRGF0YXtQYXJlbnRPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1BhcmVudElEJywKICAgICAgICBTZWxlY3RlZElEICAgICA9PiAkUGFyYW17UGFyZW50SUR9IHx8ICRTZXJ2aWNlRGF0YXtQYXJlbnRJRH0sCiAgICAgICAgUG9zc2libGVOb25lICAgPT4gMSwKICAgICAgICBUcmVlVmlldyAgICAgICA9PiAoICRMaXN0VHlwZSBlcSAndHJlZScgKSA/IDEgOiAwLAogICAgICAgIERpc2FibGVkQnJhbmNoID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICBUcmFuc2xhdGlvbiAgICA9PiAwLAogICAgICAgIENsYXNzICAgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMjIFJvdGhlciBPU1MgLyBJVFNNQ29yZQojICAgICMgZ2VuZXJhdGUgVHlwZU9wdGlvblN0cmcKIyAgICBteSAkVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiMgICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKIyAgICApOwojCiMgICAgIyBidWlsZCB0aGUgdHlwZSBkcm9wZG93bgojICAgICRTZXJ2aWNlRGF0YXtUeXBlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKIyAgICAgICAgRGF0YSAgICAgICA9PiAkVHlwZUxpc3QsCiMgICAgICAgIE5hbWUgICAgICAgPT4gJ1R5cGVJRCcsCiMgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1R5cGVJRH0gfHwgJFNlcnZpY2VEYXRhe1R5cGVJRH0sCiMgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiMgICAgKTsKCiAgICBteSAlVGlja2V0VHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCgKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKCiAgICAjIEJ1aWxkIHRpY2tldCB0eXBlIHNlbGVjdGlvbi4KICAgICRTZXJ2aWNlRGF0YXtUaWNrZXRUeXBlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVUaWNrZXRUeXBlTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1RpY2tldFR5cGVJRHMnLAogICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VGlja2V0VHlwZUlEc30gfHwgJFNlcnZpY2VEYXRhe1RpY2tldFR5cGVJRHN9LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBNb3ZlIFRpY2tldCB0byBxdWV1ZQogICAgbXkgJVRpY2tldFF1ZXVlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5HZXRBbGxRdWV1ZXMoCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBCdWlsZCB0aWNrZXQgcXVldWUgc2VsZWN0aW9uLgogICAgJFNlcnZpY2VEYXRhe1RpY2tldFF1ZXVlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVUaWNrZXRRdWV1ZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdEZXN0UXVldWVJRCcsCiAgICAgICAgTXVsdGlwbGUgICAgID0+IDAsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgVHJlZVZpZXcgICAgICAgPT4gKCAkTGlzdFR5cGUgZXEgJ3RyZWUnICkgPyAxIDogMCwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0Rlc3RRdWV1ZUlEfSB8fCAkU2VydmljZURhdGF7RGVzdFF1ZXVlSUR9LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgbXkgJURlZmF1bHRTZXJ2aWNlcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMSwKICAgICk7CgogICAgJFNlcnZpY2VEYXRhe0N1c3RvbWVyU2VydmljZUNoZWNrZWR9ID0gJyc7CgogICAgREVGQVVMVFNFUlZJQ0U6CiAgICBmb3IgbXkgJERlZlNlcnZpY2UgKCBrZXlzICVEZWZhdWx0U2VydmljZXMgKSB7CgogICAgICAgIGlmICggJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gZXEgJERlZlNlcnZpY2UgKSB7CiAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXN0b21lclNlcnZpY2VDaGVja2VkfSA9ICdjaGVja2VkJzsKICAgICAgICAgICAgbGFzdCBERUZBVUxUU0VSVklDRTsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvcgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgIyBzZXQgdXAgcmljaCB0ZXh0IGVkaXRvcgogICAgICAgICRMYXlvdXRPYmplY3QtPlNldFJpY2hUZXh0UGFyYW1ldGVycygKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CiMgRU8gU2VydmljZUNhdGFsb2cKCiAgICAjIGJ1aWxkIHRoZSBjcml0aWNhbGl0eSBkcm9wZG93bgogICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5T3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSwKICAgICAgICBOYW1lICAgICAgID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17Q3JpdGljYWxpdHl9IHx8ICRTZXJ2aWNlRGF0YXtDcml0aWNhbGl0eX0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiMgRU8gSVRTTUNvcmUKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRTZXJ2aWNlRGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRTZXJ2aWNlRGF0YXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBvdXRwdXQgc2VydmljZSBlZGl0CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZXJ2aWNlRWRpdCcsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJVNlcnZpY2VEYXRhLCB9LAogICAgKTsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAjIEdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0LgogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkTG9va3VwfSB9ICkgewoKICAgICAgICBteSAkVmFsdWVHZXQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBHZXQgSFRNTCBmb3IgZHluYW1pYyBmaWVsZAogICAgICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFJlbmRlcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGQsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWVHZXQsCiAgICAgICAgICAgICMgTWFuZGF0b3J5ICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAoKICAgICAgICAgICAgIyBTZXJ2ZXIgZXJyb3IsIGlmIGFueQogICAgICAgICAgICAjICV7ICRQYXJhbXtFcnJvcnN9LT57ICRFbnRyeS0+WzBdIH0gfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZEhUTUwpOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmFtZXMgb2YgbGFuZ3VhZ2VzIGluIEVuZ2xpc2gKICAgIG15ICVEZWZhdWx0VXNlZExhbmd1YWdlcyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnRGVmYXVsdFVzZWRMYW5ndWFnZXMnKSB8fCB7fSB9OwoKICAgICMgZ2V0IG5hdGl2ZSBuYW1lcyBvZiBsYW5ndWFnZXMKICAgIG15ICVEZWZhdWx0VXNlZExhbmd1YWdlc05hdGl2ZSA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnRGVmYXVsdFVzZWRMYW5ndWFnZXNOYXRpdmUnKSB8fCB7fSB9OwoKICAgIG15ICVMYW5ndWFnZXM7CiAgICBMQU5HVUFHRUlEOgogICAgZm9yIG15ICRMYW5ndWFnZUlEICggc29ydCBrZXlzICVEZWZhdWx0VXNlZExhbmd1YWdlcyApIHsKCiAgICAgICAgIyBuZXh0IGxhbmd1YWdlIGlmIHRoZXJlIGlzIG5vdCBzZXQgYW55IG5hbWUgZm9yIGN1cnJlbnQgbGFuZ3VhZ2UKICAgICAgICBpZiAoICEkRGVmYXVsdFVzZWRMYW5ndWFnZXN7JExhbmd1YWdlSUR9ICYmICEkRGVmYXVsdFVzZWRMYW5ndWFnZXNOYXRpdmV7JExhbmd1YWdlSUR9ICkgewogICAgICAgICAgICBuZXh0IExBTkdVQUdFSUQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0ZXh0cyBpbiBuYXRpdmUgYW5kIGRlZmF1bHQgbGFuZ3VhZ2UKICAgICAgICBteSAkVGV4dCAgICAgICAgPSAkRGVmYXVsdFVzZWRMYW5ndWFnZXNOYXRpdmV7JExhbmd1YWdlSUR9IHx8ICcnOwogICAgICAgIG15ICRUZXh0RW5nbGlzaCA9ICREZWZhdWx0VXNlZExhbmd1YWdlc3skTGFuZ3VhZ2VJRH0gICAgICAgfHwgJyc7CgogICAgICAgICMgdHJhbnNsYXRlIHRvIGN1cnJlbnQgdXNlcidzIGxhbmd1YWdlCiAgICAgICAgbXkgJFRleHRUcmFuc2xhdGVkID0KICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJFRleHRFbmdsaXNoKTsKCiAgICAgICAgaWYgKCAkVGV4dFRyYW5zbGF0ZWQgJiYgJFRleHRUcmFuc2xhdGVkIG5lICRUZXh0ICkgewogICAgICAgICAgICAkVGV4dCAuPSAnIC0gJyAuICRUZXh0VHJhbnNsYXRlZDsKICAgICAgICB9CgogICAgICAgICMgbmV4dCBsYW5ndWFnZSBpZiB0aGVyZSBpcyBub3Qgc2V0IEVuZ2xpc2ggbm9yIG5hdGl2ZSBuYW1lIG9mIGxhbmd1YWdlLgogICAgICAgIG5leHQgTEFOR1VBR0VJRCBpZiAhJFRleHQ7CgogICAgICAgICRMYW5ndWFnZXN7JExhbmd1YWdlSUR9ID0gJFRleHQ7CiAgICB9CgogICAgIyBjb3B5IG9yaWdpbmFsIGxpc3Qgb2YgbGFuZ3VhZ2VzIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgcmVidWlsZGluZyBsYW5ndWFnZSBzZWxlY3Rpb24KICAgIG15ICVPcmlnaW5hbERlZmF1bHRVc2VkTGFuZ3VhZ2VzID0gJUxhbmd1YWdlczsKCiAgICAjIGdldCBsYW5ndWFnZSBpZHMgZnJvbSBEZXNjcmlwdGlvbnMgcGFyYW1ldGVyLCB1c2UgRW5nbGlzaCBpZiBubyBEZXNjcmlwdGlvbnMgaXMgZ2l2ZW4KICAgICMgbWFrZSBzdXJlIEVuZ2xpc2ggaXMgdGhlIGZpcnN0IGxhbmd1YWdlCiAgICBteSBATGFuZ3VhZ2VJRHM7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RGVzY3JpcHRpb25zfSApICkgewogICAgICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uc30tPntlbn0gKSB7CiAgICAgICAgICAgIHB1c2ggQExhbmd1YWdlSURzLCAnZW4nOwogICAgICAgIH0KICAgICAgICBMQU5HVUFHRUlEOgogICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17RGVzY3JpcHRpb25zfSB9ICkgewogICAgICAgICAgICBuZXh0IExBTkdVQUdFSUQgaWYgJExhbmd1YWdlSUQgZXEgJ2VuJzsKICAgICAgICAgICAgcHVzaCBATGFuZ3VhZ2VJRHMsICRMYW5ndWFnZUlEOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJERlZmF1bHRVc2VkTGFuZ3VhZ2Vze2VufSApIHsKICAgICAgICBwdXNoIEBMYW5ndWFnZUlEcywgJ2VuJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHB1c2ggQExhbmd1YWdlSURzLCAoIHNvcnQga2V5cyAlRGVmYXVsdFVzZWRMYW5ndWFnZXMgKVswXTsKICAgIH0KCiAgICBmb3IgbXkgJExhbmd1YWdlSUQgKEBMYW5ndWFnZUlEcykgewogICAgICAgICMgZm9ybWF0IHRoZSBjb250ZW50IGFjY29yZGluZyB0byB0aGUgY29udGVudCB0eXBlCiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgICAgICMgbWFrZSBzdXJlIERlc2NyaXB0aW9uTG9uZyBpcyByaWNoIHRleHQgKGlmIERlc2NyaXB0aW9uTG9uZyBpcyBiYXNlZCBvbiBjb25maWcpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRQYXJhbXtEZXNjcmlwdGlvbnN9LT57JExhbmd1YWdlSUR9LT57Q29udGVudFR5cGV9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZUlEfS0+e0NvbnRlbnRUeXBlfSA9fiBte3RleHRcL3BsYWlufXhtc2kKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2VJRH0tPntEZXNjcmlwdGlvbkxvbmd9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZUlEfS0+e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyByZWZvcm1hdCBmcm9tIEhUTUwgdG8gcGxhaW4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2VJRH0tPntDb250ZW50VHlwZX0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtEZXNjcmlwdGlvbnN9LT57JExhbmd1YWdlSUR9LT57Q29udGVudFR5cGV9ID1+IG17dGV4dFwvaHRtbH14bXNpCiAgICAgICAgICAgICAgICAmJiAkUGFyYW17RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZUlEfS0+e0Rlc2NyaXB0aW9uTG9uZ30KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2VJRH0tPntEZXNjcmlwdGlvbkxvbmd9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2VJRH0tPntEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzaG93IHRoZSBkZXNjcmlwdGlvbnMgZm9yIHRoaXMgbGFuZ3VhZ2UKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZUxhbmd1YWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgICAgICAgICAgPT4gJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2VJRH0tPntEZXNjcmlwdGlvblNob3J0fSB8fCAnJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgICAgICAgICA9PiAkUGFyYW17RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZUlEfS0+e0Rlc2NyaXB0aW9uTG9uZ30gIHx8ICcnLAogICAgICAgICAgICAgICAgTGFuZ3VhZ2VJRCAgICAgICAgICAgICAgICAgID0+ICRMYW5ndWFnZUlELAogICAgICAgICAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgID0+ICRMYW5ndWFnZXN7JExhbmd1YWdlSUR9LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydFNlcnZlckVycm9yID0+ICRQYXJhbXsgJExhbmd1YWdlSUQgLiAnX0Rlc2NyaXB0aW9uU2hvcnRTZXJ2ZXJFcnJvcicgfSB8fCAnJwogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlTGFuZ3VhZ2VSZW1vdmVCdXR0b24nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJExhbmd1YWdlSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgbGFuZ3VhZ2UgZnJvbSBkcm9wLWRvd24gbGlzdCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd24KICAgICAgICBkZWxldGUgJExhbmd1YWdlc3skTGFuZ3VhZ2VJRH07CiAgICB9CgogICAgJFBhcmFte0xhbmd1YWdlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVMYW5ndWFnZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdMYW5ndWFnZScsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUgVzUwcGMgTGFuZ3VhZ2VBZGQnLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIEhUTUxRdW90ZSAgICA9PiAwLAogICAgKTsKCiAgICAkUGFyYW17TGFuZ3VhZ2VPcmlnU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVPcmlnaW5hbERlZmF1bHRVc2VkTGFuZ3VhZ2VzLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnTGFuZ3VhZ2VPcmlnJywKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBIVE1MUXVvdGUgICAgPT4gMCwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTGFuZ3VhZ2VPcHRpb25zJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgIyBzaG93IGVhY2ggcHJlZmVyZW5jZXMgc2V0dGluZwogICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSB9OwogICAgfQogICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTZXJ2aWNlUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICApOwogICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSApOwogICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICVCdWlsZFNlbGVjdGlvblBhcmFtcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSA9IGpvaW4oICcgJywgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSAvLyAnJywgJ01vZGVybml6ZScgKTsKCiAgICAgICAgICAgICAgICAgICAgJFBhcmFtSXRlbS0+eydPcHRpb24nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAlQnVpbGRTZWxlY3Rpb25QYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNlcnZpY2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtCiAgICApOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Modules/AgentITSMServiceZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSAgLSBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlWm9vbS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU2VydmljZVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNIYXNoUmVmV2l0aERhdGEpOwojIEVPIFNlcnZpY2VDYXRhbG9nCgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJFNlcnZpY2VJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNlcnZpY2VJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UKICAgIG15ICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISRTZXJ2aWNle1NlcnZpY2VJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFNlcnZpY2VJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEhUTUxWaWV3IFN1YmFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdIVE1MVmlldycgKSB7CgogICAgICAgICRTZXJ2aWNle0Rlc2NyaXB0aW9uTG9uZ30gPSAkTGF5b3V0T2JqZWN0LT5IVE1MTGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJFNlcnZpY2V7RGVzY3JpcHRpb25zfXskTGF5b3V0T2JqZWN0LT57VXNlckxhbmd1YWdlfX17RGVzY3JpcHRpb25Mb25nfQogICAgICAgICAgICAgICAgfHwgJFNlcnZpY2V7RGVzY3JpcHRpb25zfXskS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0RlZmF1bHRMYW5ndWFnZScpfXtEZXNjcmlwdGlvbkxvbmd9CiAgICAgICAgICAgICAgICB8fCAkU2VydmljZXtEZXNjcmlwdGlvbnN9eydlbid9e0Rlc2NyaXB0aW9uTG9uZ30KICAgICAgICAgICAgICAgIHx8ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0Rlc2NyaXB0aW9uIG5vdCBhdmFpbGFibGUuJyApLAogICAgICAgICk7CgogICAgICAgICMgYWRkIG5lZWRlZCBIVE1MIGhlYWRlcnMKICAgICAgICAkU2VydmljZXtEZXNjcmlwdGlvbkxvbmd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Eb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICBTdHJpbmcgID0+ICRTZXJ2aWNle0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIENoYXJzZXQgPT4gJ3V0Zi04JywKICAgICAgICApOwoKICAgICAgICAjIHJldHVybiBjb21wbGV0ZSBIVE1MIGFzIGFuIGF0dGFjaG1lbnQKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU2VydmljZXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICk7CiAgICB9CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBEb3dubG9hZEF0dGFjaG1lbnQgU3ViYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Rvd25sb2FkQXR0YWNobWVudCcgKSB7CgogICAgICAgIG15ICRGaWxlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsZUlEJyApOwoKICAgICAgICBpZiAoICFkZWZpbmVkICRGaWxlSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWQgRmlsZUlEIScpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgYXR0YWNobWVudHMuCiAgICAgICAgbXkgJUZpbGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5BdHRhY2htZW50R2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgRmlsZUlEICAgID0+ICRGaWxlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJUZpbGUpIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoJUZpbGUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkRmlsZUlEKSEgTWF5IGJlIGFuIGF0dGFjayEhISIsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CiAgICB9CgogICAgJFNlcnZpY2V7RGVzY3JpcHRpb25TaG9ydH0gPSAkU2VydmljZXtEZXNjcmlwdGlvbnN9eyRMYXlvdXRPYmplY3QtPntVc2VyTGFuZ3VhZ2V9fXtEZXNjcmlwdGlvblNob3J0fSB8fAogICAgICAgICAgICAkU2VydmljZXtEZXNjcmlwdGlvbnN9eyRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGVmYXVsdExhbmd1YWdlJyl9e0Rlc2NyaXB0aW9uU2hvcnR9IHx8CiAgICAgICAgICAgICRTZXJ2aWNle0Rlc2NyaXB0aW9uc317J2VuJ317RGVzY3JpcHRpb25TaG9ydH0gfHwKICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnRGVzY3JpcHRpb24gbm90IGF2YWlsYWJsZS4nICk7CgogICAgIyBidWlsZCBkeW5hbWljIGZpZWxkcy4KICAgIG15IEBEeW5hbWljRmllbGRMaXN0OwogICAgbXkgJER5bmFtaWNGaWVsZExvb2t1cCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBPYmplY3RUeXBlID0+ICdTZXJ2aWNlJywKICAgICk7CgogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMb29rdXB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkKTsKCiAgICAgICAgbXkgJFZhbHVlR2V0ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRWYWx1ZUdldDsKCiAgICAgICAgIyB1c2UgdHJhbnNsYXRpb24gaGVyZSB0byBiZSBhYmxlIHRvIHJlZHVjZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBpbiB0aGUgdGVtcGxhdGUKICAgICAgICBteSAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICREeW5hbWljRmllbGQtPntMYWJlbH0gKTsKCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlR2V0LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgVmFsdWVNYXhDaGFycyAgICAgID0+IDEzMCwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRMaXN0LCB7CiAgICAgICAgICAgICREeW5hbWljRmllbGQtPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgIExhYmVsICAgICAgICAgICAgICAgICA9PiAkTGFiZWwsCiAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9LAogICAgICAgICAgICBUaXRsZUZpZWxkQ29uZmlnICAgICAgPT4gKCAkRHluYW1pY0ZpZWxkLT57RmllbGRUeXBlfSBlcSAnVGl0bGUnICkgPyAkRHluYW1pY0ZpZWxkLT57Q29uZmlnfSA6IHVuZGVmLAoKICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkLT57TmFtZX0iID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIG91dHB1dCBkeW5hbWljIGZpZWxkcwogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkIChARHluYW1pY0ZpZWxkTGlzdCkgewoKICAgICAgICAjIGhhbmRsZSB0aXRsZXMgc2VwYXJhdGVseQogICAgICAgIGlmICggJEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ30gKSB7CiAgICAgICAgICAgIG15ICRTdHlsZSA9ICJwYWRkaW5nLWxlZnQ6NHB4O2ZvbnQtc2l6ZTokRmllbGQtPntUaXRsZUZpZWxkQ29uZmlnfXtGb250U2l6ZX1weDtjb2xvcjokRmllbGQtPntUaXRsZUZpZWxkQ29uZmlnfXtGb250Q29sb3J9OyI7CgogICAgICAgICAgICBpZiAoICRGaWVsZC0+e1RpdGxlRmllbGRDb25maWd9e0NCRm9udFN0eWxlVW5kZXJMaW5lVmFsdWV9ICkgewogICAgICAgICAgICAgICAgJFN0eWxlIC49ICJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkRmllbGQtPntUaXRsZUZpZWxkQ29uZmlnfXtDQkZvbnRTdHlsZUl0YWxpY1ZhbHVlfSApIHsKICAgICAgICAgICAgICAgICRTdHlsZSAuPSAiZm9udC1zdHlsZTppdGFsaWM7IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRGaWVsZC0+e1RpdGxlRmllbGRDb25maWd9e0NCRm9udFN0eWxlQm9sZFZhbHVlfSApIHsKICAgICAgICAgICAgICAgICRTdHlsZSAuPSAiZm9udC13ZWlnaHQ6Ym9sZDsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBUZXh0ICAgICAgID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICBTdHlsZSAgICAgID0+ICRTdHlsZSwKICAgICAgICAgICAgICAgICAgICBUaXRsZUZpZWxkID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkRmllbGQtPntMaW5rfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlRHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAkRmllbGQtPntOYW1lfSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAkRmllbGQtPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyAgICA9PiAkRmllbGQtPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRGaWVsZC0+e05hbWV9IiA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlRHluYW1pY0ZpZWxkUGxhaW4nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgIyBydW4gY29uZmlnIGl0ZW0gbWVudSBtb2R1bGVzCiAgICBpZiAoIHJlZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01TZXJ2aWNlOjpGcm9udGVuZDo6TWVudU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICBteSAlTWVudXMgICA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNle1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGNsYXNzZXMKICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnQmFjaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0hpc3RvcnlCYWNrJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiBcJVNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgQ291bnRlciA9PiAkQ291bnRlciwKICAgICAgICAgICAgICAgICAgICBDb25maWcgID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBzbGEgb2JqZWN0CiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKICAgICMgZ2V0IHNsYSBsaXN0CiAgICBteSAlU0xBTGlzdCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoJVNMQUxpc3QpIHsKCiAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NMQScsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTTEFSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVNMQSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzCiAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBLZXkgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsaW5rIHRhYmxlIHZpZXcgbW9kZQogICAgbXkgJExpbmtUYWJsZVZpZXdNb2RlID0gJENvbmZpZ09iamVjdC0+R2V0KCdMaW5rT2JqZWN0OjpWaWV3TW9kZScpOwoKICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICBteSAkTGlua1RhYmxlU3RyZyA9ICRMYXlvdXRPYmplY3QtPkxpbmtPYmplY3RUYWJsZUNyZWF0ZSgKICAgICAgICBMaW5rTGlzdFdpdGhEYXRhID0+ICRMaW5rTGlzdFdpdGhEYXRhLAogICAgICAgIFZpZXdNb2RlICAgICAgICAgPT4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgIE9iamVjdCAgICAgICAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIEtleSAgICAgICAgICAgICAgPT4gJFNlcnZpY2VJRCwKICAgICk7CgogICAgIyBvdXRwdXQgdGhlIGxpbmsgdGFibGUKICAgIGlmICgkTGlua1RhYmxlU3RyZykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMaW5rVGFibGUnIC4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBUcmFuc2xhdGFibGUoJ29wZXJhdGlvbmFsJykgPT4gJ2dyZWVubGVkJywKICAgICAgICBUcmFuc2xhdGFibGUoJ3dhcm5pbmcnKSAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICAgICAgVHJhbnNsYXRhYmxlKCdpbmNpZGVudCcpICAgID0+ICdyZWRsZWQnLAogICAgICAgIFRyYW5zbGF0YWJsZSgndW5rbm93bicpICAgICA9PiAnZ3JheWxlZCcsCiAgICApOwoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBnZXQgY3JlYXRlIHVzZXIgZGF0YQogICAgJFNlcnZpY2V7Q3JlYXRlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNlcnZpY2V7Q3JlYXRlQnl9LAogICAgKTsKCiAgICAjIGdldCBjaGFuZ2UgdXNlciBkYXRhCiAgICAkU2VydmljZXtDaGFuZ2VCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VydmljZXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICRTZXJ2aWNle0N1ckluY2lTdGF0ZVR5cGV9IHx8PSAndW5rbm93bic7CgogICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkU2VydmljZXtDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AdminService.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2Mzk3ZjM2ZmYwOWQwODVlNGMzMWQ1ZGRhNDExMGE3MzMxOWY5MDZkIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNlcnZpY2UudHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnU2VydmljZSBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBJRiBEYXRhLlNlcnZpY2VJRCA9PSAiTkVXIiAgJV0KICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBUcmFuc2xhdGUoIkFkZCBTZXJ2aWNlIiksfSkgJV0KICAgIFslIEVMU0lGIERhdGEuU2VydmljZUlEICVdCiAgICAgICAgWyUgVVNFIEVkaXRUaXRsZSA9IFN0cmluZyhUcmFuc2xhdGUoIkVkaXQgU2VydmljZSIpKSAlXQogICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuU2VydmljZU5hbWUgKSB9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkluY2x1ZGVJbnZhbGlkIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRmlsdGVyIGJ5IHZhbGlkIHN0YXRlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iSW5jbHVkZUludmFsaWQiIG5hbWU9IkluY2x1ZGVJbnZhbGlkIiB2YWx1ZT0iMSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW5jbHVkZSBpbnZhbGlkIHNlcnZpY2VzIikgfCBodG1sICVdIiBbJSBEYXRhLkluY2x1ZGVJbnZhbGlkQ2hlY2tlZCB8IGh0bWwgJV0vPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW5jbHVkZUludmFsaWQiPlslIFRyYW5zbGF0ZSgiSW5jbHVkZSBpbnZhbGlkIHNlcnZpY2VzIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbmNsdWRlSW52YWxpZCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlcnZpY2VFZGl0O1NlcnZpY2VJRD1ORVciIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgU2VydmljZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRmlsdGVyIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlclNlcnZpY2VzIj5bJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgU2VydmljZXMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyU2VydmljZXMiIGNsYXNzPSJGaWx0ZXJCb3giIHBsYWNlaG9sZGVyPSJbJSBUcmFuc2xhdGUoIkp1c3Qgc3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLiIpIHwgaHRtbCAlXSIgbmFtZT0iRmlsdGVyU2VydmljZXMiIHZhbHVlPSIiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkZpbHRlciBmb3Igc2VydmljZXMiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZpbHRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkltcG9ydEV4cG9ydFdpZGdldCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0nV2lkZ2V0U2ltcGxlJyBpZD0nU2VydmljZUltcG9ydEV4cG9ydFdpZGdldCc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0hlYWRlcic+CiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSW1wb3J0IC8gRXhwb3J0IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2gxPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ0ltcG9ydCAvIEV4cG9ydCcpLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICVdCgogICAgICAgICAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NvbnRlbnQnPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9J0ZpZWxkRXhwbGFuYXRpb24nPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnSGVyZSB5b3UgY2FuIHVwbG9hZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBpbXBvcnQgc2VydmljZXMgdG8geW91ciBzeXN0ZW0uIFRoZSBmaWxlIG5lZWRzIHRvIGJlIGluIC55bWwgZm9ybWF0IGFzIGV4cG9ydGVkIGJ5IHRoZSBzZXJ2aWNlIG1hbmFnZW1lbnQgbW9kdWxlLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSdBY3Rpb25MaXN0IFNwYWNpbmdUb3AnPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSdbJSBFbnYoIkNHSUhhbmRsZSIpICVdJyBtZXRob2Q9J3Bvc3QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnIGNsYXNzPSdWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0NoYWxsZW5nZVRva2VuJyB2YWx1ZT1bJSBFbnYoIlVzZXJDaGFsbGVuZ2VUb2tlbiIpIHwgSlNPTiAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0FjdGlvbicgdmFsdWU9J0FkbWluU2VydmljZUltcG9ydEV4cG9ydCcvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nU3ViYWN0aW9uJyB2YWx1ZT0nSW1wb3J0Jy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0nRmlsZVVwbG9hZCcgaWQ9J0ZpbGVVcGxvYWQnIHR5cGU9J2ZpbGUnIHNpemU9JzE4JyBjbGFzcz0nRml4ZWQgVzEwMHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuRmlsZVVwbG9hZEludmFsaWQgfCBodG1sICVdJy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSdGaWxlVXBsb2FkRXJyb3InIGNsYXNzPSdUb29sdGlwRXJyb3JNZXNzYWdlJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0nRmlsZVVwbG9hZFNlcnZlckVycm9yJyBjbGFzcz0nVG9vbHRpcEVycm9yTWVzc2FnZSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgVHJhbnNsYXRlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSdTcGFjaW5nVG9wJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0nY2hlY2tib3gnIGlkPSdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzRXhhbXBsZScgbmFtZT0nT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcycgdmFsdWU9JzEnLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzRXhhbXBsZSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnT3ZlcndyaXRlIGV4aXN0aW5nIGVudGl0aWVzJykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciBTcGFjaW5nVG9wJyBpZD0nU2VydmljZUltcG9ydCcgdHlwZT0nc3VibWl0Jz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0nZmEgZmEtdXBsb2FkJz48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnU2VydmljZXMgSW1wb3J0JykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFkbWluU2VydmljZUltcG9ydEV4cG9ydDtTdWJhY3Rpb249RXhwb3J0JyBpZD0nU2VydmljZUV4cG9ydCcgY2xhc3M9J0NhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSdmYSBmYS1kb3dubG9hZCc+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnU2VydmljZXMgRXhwb3J0JykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRFeHBvcnRXaWRnZXQiKSAlXQogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiMgUm90aGVyIE9TUyAvIFNlcnZpY2UgQ2F0YWxvZwojICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiMgRU8gU2VydmljZSBDYXRhbG9nCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaXN0IikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBpZD0iU2VydmljZXMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbJSBJRiBEYXRhLlZhbGlkSUQgIT0gMSVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBEYXRhLkxldmVsU3BhY2UgfCBodG1sICVdPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TZXJ2aWNlRWRpdDtTZXJ2aWNlSUQ9WyUgRGF0YS5TZXJ2aWNlSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IHRydW5jYXRlKDgwKSB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNSI+WyUgVHJhbnNsYXRlKCJObyBtYXRjaGVzIGZvdW5kLiIpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CgogICAgICAgICAgICA8L2Rpdj4KIyBSb3RoZXIgT1NTIC8gU2VydmljZSBDYXRhbG9nCiAgICAgICAgPC9kaXY+CiMgRU8gU2VydmljZUNhdGFsb2cKWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlRWRpdCIpICVdCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMjIGluc3RlYWQgb2YKIyMgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KIyMgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgojIyAgICAgICAgICAgICAgIDxmb3JtPgojIyB3ZSBqdXN0IHNldCB0aGUgZm9ybSBhcyB0aGUgb3V0ZXIgbW9zdCBlbGVtZW50CiMjIHRvIGluY2x1ZGUgdGhlIGxhbmd1YWdlcyBhcyBzZXBhcmF0ZSB3aWRnZXQKIwojICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KIyAgICAgICAgICAgIFslIElGIERhdGEuU2VydmljZUlEID09ICdORVcnICVdCiMgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWRkIFNlcnZpY2UiKSB8IGh0bWwgJV08L2gyPgojICAgICAgICAgICAgWyUgRUxTRSAlXQojICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkVkaXQgU2VydmljZSIpIHwgaHRtbCAlXTwvaDI+CiMgICAgICAgICAgICBbJSBFTkQgJV0KIyAgICAgICAgICAgIDwvZGl2PgojICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiMKIyAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgojICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiMgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNlcnZpY2VTYXZlIi8+CiMgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNlcnZpY2VJRCIgdmFsdWU9IlslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXSIvPgojICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlNlcnZpY2VJRCAhPSAnTkVXJyAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgojICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGb3JtSUQiIHZhbHVlPSJbJSBEYXRhLkZvcm1JRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZXJ2aWNlU2F2ZSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSJbJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgWyUgSUYgRGF0YS5TZXJ2aWNlSUQgIT0gJ05FVycgJV0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNvbnRpbnVlQWZ0ZXJTYXZlIiBpZD0iQ29udGludWVBZnRlclNhdmUiIHZhbHVlPSIiLz4KICAgICAgICAgICAgWyUgRU5EICVdCgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIFslIElGIERhdGEuU2VydmljZUlEID09ICdORVcnICVdCiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWRkIFNlcnZpY2UiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkVkaXQgU2VydmljZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiMgRU8gU2VydmljZUNhdGFsb2cKCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmFtZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZVNob3J0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZUludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLkxvbmdOYW1lICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIG5hbWUgbWF4aW11bSBsZW5ndGggaXMgMjAwIGNoYXJhY3RlcnMgKHdpdGggU3ViLXNlcnZpY2UpLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQYXJlbnRJRCI+WyUgVHJhbnNsYXRlKCJTdWItc2VydmljZSBvZiIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5QYXJlbnRPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMjIFJvdGhlciBPU1MgLyBJVFNNQ29yZQojICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVHlwZUlEIj5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UeXBlT3B0aW9uU3RyZyAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMKIyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNyaXRpY2FsaXR5Ij5bJSBUcmFuc2xhdGUoIkNyaXRpY2FsaXR5IikgfCBodG1sICVdOiA8L2xhYmVsPgojICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JpdGljYWxpdHlPcHRpb25TdHJnICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyMgRU8gSVRTTUNvcmUKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVGlja2V0VHlwZUlEcyI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyB0aWNrZXQgdHlwZXMiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVGlja2V0VHlwZU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRlc3RRdWV1ZUlEIj5bJSBUcmFuc2xhdGUoIlRpY2tldCBkZXN0aW5hdGlvbiBxdWV1ZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UaWNrZXRRdWV1ZU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ3VzdG9tZXJEZWZhdWx0U2VydmljZSI+WyUgVHJhbnNsYXRlKCJDdXN0b21lciBkZWZhdWx0IHNlcnZpY2UiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iQ3VzdG9tZXJEZWZhdWx0U2VydmljZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIGFjdGl2ZSBzdGF0ZSBmb3IgJXMiLCBEYXRhLk5hbWUpIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXSIgWyUgRGF0YS5DdXN0b21lclNlcnZpY2VDaGVja2VkIHwgaHRtbCAlXS8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNyaXRpY2FsaXR5Ij5bJSBUcmFuc2xhdGUoIkNyaXRpY2FsaXR5IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyaXRpY2FsaXR5T3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iS2V5d29yZHMiPlslIFRyYW5zbGF0ZSgiS2V5d29yZHMiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJLZXl3b3JkcyIgaWQ9IktleXdvcmRzIiB2YWx1ZT0iWyUgRGF0YS5LZXl3b3JkcyB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJvdyBSb3dfRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmllbGQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZCIpICVdCiMgRU8gU2VydmljZUNhdGFsb2cKCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlZhbGlkSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbW1lbnQiIGlkPSJDb21tZW50IiB2YWx1ZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSXRlbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0S2V5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9IlcyNXBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dEtleSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9IlcyNXBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZXh0QXJlYSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGV4dEFyZWEiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3B0aW9uIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVXBsb2FkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdHlwZT0iZmlsZSIgc2l6ZT0iMzAiIGNsYXNzPSJmaXhlZCIvPjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiPlslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVXBsb2FkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFzc3dvcmQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJXMjVwYyIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYXNzd29yZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJJdGVtIikgJV0KCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRvZ2dsZSB0aGlzIHdpZGdldCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2VydmljZSBEZXNjcmlwdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MgPSJTZXJ2aWNlTGFuZ3VhZ2VDb250YWluZXIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlTGFuZ3VhZ2UiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTZXJ2aWNlTGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgWyUgSUYgIURhdGEuTGFuZ3VhZ2UgJV0gQ29sbGFwc2VkIFslIEVORCAlXSAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIHRoaXMgd2lkZ2V0IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iVGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5MYW5ndWFnZSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5MYW5ndWFnZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iV2FybmluZyI+J1slIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0nICZtZGFzaDsgWyUgVHJhbnNsYXRlKCJUaGlzIGxhbmd1YWdlIGlzIG5vdCBwcmVzZW50IG9yIGVuYWJsZWQgb24gdGhlIHN5c3RlbS4gVGhpcyBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNvdWxkIGJlIGRlbGV0ZWQgaWYgaXQgaXMgbm90IG5lZWRlZCBhbnltb3JlLiIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlTGFuZ3VhZ2VSZW1vdmVCdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJBZGRpdGlvbmFsSW5mb3JtYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdmFsdWU9IlJlbW92ZSBMYW5ndWFnZSIgY2xhc3M9IlJlbW92ZUJ1dHRvbiBMYW5ndWFnZVJlbW92ZSIgaWQ9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fTGFuZ3VhZ2VfUmVtb3ZlIiBocmVmPSIiIG5hbWU9IkRhdGEuTGFuZ3VhZ2VJRF9MYW5ndWFnZV9SZW1vdmUiPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSBTZXJ2aWNlIERlc2NyaXB0aW9uIExhbmd1YWdlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlTGFuZ3VhZ2VSZW1vdmVCdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMYW5ndWFnZUlEIiBjbGFzcz0iTGFuZ3VhZ2VJRCIgdmFsdWU9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fRGVzY3JpcHRpb25TaG9ydCIgaWQ9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fTGFiZWxfRGVzY3JpcHRpb25TaG9ydCIgY2xhc3M9Ik1hbmRhdG9yeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkRlc2NyaXB0aW9uIChzaG9ydCkiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0Rlc2NyaXB0aW9uU2hvcnQiIGlkPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0Rlc2NyaXB0aW9uU2hvcnQiIHZhbHVlPSJbJSBEYXRhLkRlc2NyaXB0aW9uU2hvcnQgfCBodG1sICVdIiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5EZXNjcmlwdGlvblNob3J0U2VydmVyRXJyb3IgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fRGVzY3JpcHRpb25TaG9ydEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9EZXNjcmlwdGlvblNob3J0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9EZXNjcmlwdGlvbkxvbmciIGlkPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0xhYmVsX0Rlc2NyaXB0aW9uTG9uZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiAobG9uZykiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlslIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fRGVzY3JpcHRpb25Mb25nIiBpZD0iWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9EZXNjcmlwdGlvbkxvbmciIGNsYXNzPSJSaWNoVGV4dCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVzY3JpcHRpb24gKGxvbmcpIikgfCBodG1sICVdIiByb3dzPSIxMCIgY29scz0iWyUgQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUiKSB8IGh0bWwgJV0iPlslIERhdGEuRGVzY3JpcHRpb25Mb25nIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2VMYW5ndWFnZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiBUZW1wbGF0ZSBTZXJ2aWNlTGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIHRoaXMgd2lkZ2V0IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iVGl0bGUiPjwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2YWx1ZT0iUmVtb3ZlIExhbmd1YWdlIiBjbGFzcz0iUmVtb3ZlQnV0dG9uIExhbmd1YWdlUmVtb3ZlIiBpZD0iVGVtcGxhdGVfTGFuZ3VhZ2VfUmVtb3ZlIiBocmVmPSIiIG5hbWU9IlRlbXBsYXRlX0xhbmd1YWdlX1JlbW92ZSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIFNlcnZpY2UgRGVzY3JpcHRpb24gTGFuZ3VhZ2UiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iIiBjbGFzcz0iTGFuZ3VhZ2VJRCIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVGVtcGxhdGVfRGVzY3JpcHRpb25TaG9ydCIgaWQ9IlRlbXBsYXRlX0xhYmVsX0Rlc2NyaXB0aW9uU2hvcnQiIGNsYXNzPSJNYW5kYXRvcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiAoc2hvcnQpIikgfCBodG1sICVdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGVtcGxhdGVfRGVzY3JpcHRpb25TaG9ydCIgaWQ9IlRlbXBsYXRlX0Rlc2NyaXB0aW9uU2hvcnQiIHZhbHVlPSIiIGNsYXNzPSJXNzVwYyIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUZW1wbGF0ZV9EZXNjcmlwdGlvblNob3J0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRlbXBsYXRlX0Rlc2NyaXB0aW9uTG9uZyIgaWQ9IlRlbXBsYXRlX0xhYmVsX0Rlc2NyaXB0aW9uTG9uZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiAobG9uZykiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJUZW1wbGF0ZV9EZXNjcmlwdGlvbkxvbmciIGNsYXNzPSIiIG5hbWU9IlRlbXBsYXRlX0Rlc2NyaXB0aW9uTG9uZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVzY3JpcHRpb24gKGxvbmcpIikgfCBodG1sICVdIiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUiKSB8IGh0bWwgJV0iPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVfRGVzY3JpcHRpb25Mb25nRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMYW5ndWFnZU9wdGlvbnMiKSAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTGFuZ3VhZ2UiPlslIFRyYW5zbGF0ZSgiQWRkIG5ldyBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFuZ3VhZ2VTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhbmd1YWdlT3JpZ1N0cmcgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkxhbmd1YWdlT3B0aW9ucyIpICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNhdmUgQ2hhbmdlcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU2VydmljZUlEICE9ICdORVcnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMgICAgICAgICAgICAgICAgPC9mb3JtPgojICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PgojIEVPIFNlcnZpY2VDYXRhbG9nClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlRWRpdCIpICVdCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMgICAgICAgIDwvZGl2PgojIEVPIFNlcnZpY2VDYXRhbG9nCgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlUmVmZXJlbmNlIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBDb2xsYXBzZWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIHRoaXMgd2lkZ2V0IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiT3B0aW9uIFJlZmVyZW5jZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIllvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyIpIHwgaHRtbCAlXTo8L3A+CiAgICAgICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgICAgICAgPGR0PlslIFRyYW5zbGF0ZSgiU2VydmljZSBkZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcgdGlja2V0IHR5cGVzIikgfCBodG1sICVdOjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoJ1dpdGhpbiB0aGUgU2VydmljZUNhdGFsb2d1ZSB0aWxlIGluIHRoZSBjdXN0b21lciBkYXNoYm9hcmQsIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGlja2V0IHR5cGVzIGZvciBwcmVjb25maWd1cmVkIHRpY2tldCBjcmVhdGlvbiBpbnNpZGUgdGhlIHNlcnZpY2UgZGVzY3JpcHRpb24uIEZ1cnRoZXJtb3JlLCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgZm9yIG90aGVyIHNjcmVlbnMgdXNpbmcgdGhlIHRpY2tldCB0eXBlcyBzZXQgaGVyZS4gSWYgeW91IHdpc2ggdG8gZG8gdGhpcywgcGxlYXNlIGFjdGl2YXRlIHRoZSBvcHRpb25zICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscyIgYW5kICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNsczo6T3B0aW9ucyIgaW4gdGhlIE9UT0JPIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGUgcmVzdHJpY3Rpb24gaXMgbWFkZSB2aWEgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgQUNMcywgd2hpY2ggY2FuIGJlIHZpZXdlZCB1bmRlciAiQWRtaW4gLT4gQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTCkiLiBJZiBuZWNlc3NhcnksIHBsZWFzZSBhZGp1c3QgdGhlIG9wdGlvbiAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnMiIGFjY29yZGluZyB0byB5b3VyIHJlcXVpcmVtZW50cy4nKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+WyUgVHJhbnNsYXRlKCJUaWNrZXQgZGVzdGluYXRpb24gcXVldWUiKSB8IGh0bWwgJV06PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnSWYgd2Ugd29yayBzZXJ2aWNlLWJhc2VkLCB3ZSBkbyBub3Qgd2FudCB0byBvZmZlciB0aGUgY3VzdG9tZXIgYSBjaG9pY2Ugb2YgcXVldWVzIGluIHRoZSBjdXN0b21lciBwb3J0YWwgd2hlbiBjcmVhdGluZyBhIHRpY2tldCwgYnV0IGRlY2lkZSBvbiB0aGUgYmFzaXMgb2YgdGhlIHNlcnZpY2UgaW50byB3aGljaCBxdWV1ZSAob3Igd2hpY2ggdGVhbSBvZiBhZ2VudHMpIHRoZSB0aWNrZXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBmaXJzdC4gSW4gb3JkZXIgdG8gdXNlIHRoaXMgb3B0aW9uIHNlbnNpYmx5LCBwbGVhc2UgZGVhY3RpdmF0ZSB0aGUgb3B0aW9uICJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNRdWV1ZSIgYW5kIHNldCBhIHNlbnNpYmxlIGRlZmF1bHQgcXVldWUgaW4gdGhlIG9wdGlvbiAiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIyMjUXVldWVEZWZhdWx0Ii4gQXMgc29vbiBhcyB5b3Ugc2V0IGEgIlRpY2tldCBkZXN0aW5hdGlvbiBxdWV1ZSIgaGVyZSBpbiB0aGUgc2VydmljZSwgdGhlIHRpY2tldCB3aWxsIGltbWVkaWF0ZWx5IGJlIGNyZWF0ZWQgaW4gdGhpcyBxdWV1ZS4gSWYgdGhlIGZpZWxkIHJlbWFpbnMgZW1wdHksIHRoZSBkZWZhdWx0IHF1ZXVlIGNvbmZpZ3VyZWQgYWJvdmUgd2lsbCBiZSB1c2VkLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD5bJSBUcmFuc2xhdGUoIkN1c3RvbWVyIGRlZmF1bHQgc2VydmljZSIpIHwgaHRtbCAlXTo8L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJJZiB5b3UgZG8gbm90IGFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lcnMgb3IgY29tcGFuaWVzIGluZGl2aWR1YWxseSwgYnV0IGFsbCBzZXJ2aWNlcyBhcmUgaW5pdGlhbGx5IG9mZmVyZWQgdG8geW91ciBjdXN0b21lcnMgZm9yIHNlbGVjdGlvbiwgdGhlIHN0ZXAgb2YgcmVsZWFzaW5nIGVhY2ggc2VydmljZSBhcyBhIFwiZGVmYXVsdFwiIHNlcnZpY2UgdW5kZXIgXCJBZG1pbiAtPiBDdXN0b21lciB1c2VyIDwtPiBTZXJ2aWNlXCIgKG9yIFwiQ3VzdG9tZXIgPC0+IFNlcnZpY2VcIikgY2FuIGJlIGJ5cGFzc2VkIGhlcmUuIE9mIGNvdXJzZSwgaW4gdGhlIG5leHQgc3RlcCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgdmlhIEFDTHMuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0PlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkiKSB8IGh0bWwgJV06PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGVyZSwgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgYmFja2dyb3VuZCBiYXNlZCBvbiB0aGUgZHluYW1pYyBmaWVsZCBcIklUU01Dcml0aWNhbGl0eVwiIGFuZCBcIklUU01JbXBhY3RcIi4gUGxlYXNlIGFjdGl2YXRlIHRoZSBvcHRpb24gXCJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk3MDAtU2V0RHluYW1pY0ZpZWxkQ3JpdGljYWxpdHlGcm9tU2VydmljZVwiIGFuZCB0aGUgb3B0aW9uIFwiVGlja2V0OjpFdmVudE1vZHVsZVBvc3QjIyM5ODAwLVNldFByaW9yaXR5RnJvbUNyaXRpY2FsaXR5QW5kSW1wYWN0TWF0cml4XCIuIEluIHRoZSBuZXh0IHN0ZXAsIHlvdSBoYXZlIHRoZSBwb3NzaWJpbGl0eSB1c2luZyBcIkFkbWluIC0+IENyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5XCIgdG8gc2V0IHRoZSBwcmlvcml0eSB1c2luZyBhIG1hdHJpeC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2RkPgoKICAgICAgICAgICAgICAgICAgICA8ZHQ+WyUgVHJhbnNsYXRlKCJLZXl3b3JkcyIpIHwgaHRtbCAlXTo8L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJLZXl3b3JkcyB0byBmYWNpbGl0YXRlIHRoZSBzZWFyY2ggZm9yIHNlcnZpY2VzIHdpdGhpbiB0aGUgc2VydmljZSBjYXRhbG9nLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgRGVzY3JpcHRpb24iKSB8IGh0bWwgJV06PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU2VydmljZSBkZXNjcmlwdGlvbnMgKHNob3J0ICYgbG9uZykgc3BlY2lmaWVkIGJ5IFVzZXIgTGFuZ3VhZ2UuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0PlslIFRyYW5zbGF0ZSgiRGVzY3JpcHRpb24gKHNob3J0KSIpIHwgaHRtbCAlXTo8L2R0PgogICAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJTaG9ydCBzdW1tYXJ5IG9mIHRoZSBzZXJ2aWNlLCBtYWlubHkgdXNlZCBpbiB0aGUgQ3VzdG9tZXJEYXNoYm9hcmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICAgICAgPGR0PlslIFRyYW5zbGF0ZSgiRGVzY3JpcHRpb24gKGxvbmcpIikgfCBodG1sICVdOjwvZHQ+CiAgICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLiBTY3JlZW5zaG90cyBhbmQgdGFibGVzIGFyZSBhbHNvIGFsbG93ZWQuIFBsZWFzZSBlbnN1cmUgdGhlIGNvcnJlY3Qgd2lkdGggb2YgdGhlIGltYWdlIGZvciBzY3JlZW5zaG90cy4gVGhpcyBjYW4gYmUgYWRqdXN0ZWQgaW4gdGhlIGNrZWRpdG9yIGFmdGVyIHVwbG9hZGluZyB0aGUgc2NyZWVuc2hvdC4gQSB3aWR0aCBvZiA2MDBweCBoYXMgcHJvdmVuIHRvIGJlIHVzZWZ1bCBvciB5b3UgY2FuIGNvbmZpZ3VyZSBhIFwibWF4LXdpZHRoXCIgb2YgOTUlIHVuZGVyIEFkdmFuY2VkLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGQ+CgogICAgICAgICAgICAgICAgICAgIDxkdD5bJSBUcmFuc2xhdGUoIkFkZCBtb3JlIHNlcnZpY2UgY2F0YWxvZyBmaWVsZHMiKSB8IGh0bWwgJV06PC9kdD4KICAgICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiWW91IGhhdmUgdGhlIG9wdGlvbiBvZiBhZGRpbmcgZnVydGhlciBmaWVsZHMgaGVyZSBpbiB0aGUgc2VydmljZSBjYXRhbG9nIGF0IGFueSB0aW1lLiBUbyBkbyB0aGlzLCBwbGVhc2UgZ28gdG8gXCJBZG1pbiAtPiBEeW5hbWljRmllbGRzXCIgYW5kIGNyZWF0ZSB0aGUgbmV3IGZpZWxkIG9mIHRoZSBvYmplY3QgdHlwZSBcIlNlcnZpY2VcIi4gWW91IGNhbiB0aGVuIGFjdGl2YXRlIHRoZSBmaWVsZCBmb3IgdGhlIGN1c3RvbWVyIGRhc2hib2FyZCB1bmRlciBcIkFkbWluIC0+IER5bmFtaWNGaWVsZCBTY3JlZW5zXCIgYnkgYXNzaWduaW5nIGl0IHVuZGVyIFwiQ3VzdG9tZXJEYXNoYm9hcmRUaWxlIFNlcnZpY2VDYXRhbG9nXCIuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kZD4KCiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2VSZWZlcmVuY2UiKSAlXQojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentITSMService.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSAgLSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FnZW50SVRTTVNlcnZpY2UudHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFyaWFSb2xlTWFpbiBTcGFjaW5nVG9wIj4KICAgIDxkaXYgY2xhc3M9Ilc3NXBjIFNwYWNpbmdCb3R0b20gQ2VudGVyQm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiT3ZlcnZpZXciKSB8IGh0bWwgJV06IFslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IFNwYWNpbmdCb3R0b20iPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTdGF0ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiAoc2hvcnQpIikgfCBodG1sICVdPC90aD4KIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgJV0iIHRpdGxlPSJbJSBEYXRhLlN0YXRlICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGV2ZWxTcGFjZSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkRlc2NyaXB0aW9uU2hvcnQgfCBodG1sICVdIj5bJSBEYXRhLkRlc2NyaXB0aW9uU2hvcnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiMgRU8gU2VydmljZUNhdGFsb2cKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3Um93IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentITSMServiceZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSAgLSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FnZW50SVRTTVNlcnZpY2Vab29tLnR0CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDEgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgVGlnaHQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBpbmNpZGVudCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkxpbmtUYWJsZVNpbXBsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBEb250UHJpbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaW5rZWQgT2JqZWN0cyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGlua1RhYmxlU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlU2ltcGxlIikgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgQXV0b0hlaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVzY3JpcHRpb24gKHNob3J0KSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiAoc2hvcnQpIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvblNob3J0KSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiAobG9uZykiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiRGVzY3JpcHRpb24gKGxvbmcpIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXBvcHVwcyBtcy1hbGxvdy1wb3B1cHMgYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94IiB3aWR0aD0iMTAwJSIgZnJhbWVib3JkZXI9IjAiIGlkPSJTZXJ2aWNlSURbJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV0iIG9ubG9hZD0iQ29yZS5BZ2VudC5JVFNNU2VydmljZVpvb20uUmVzaXplSWZyYW1lKHRoaXMpOyIgc3JjPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U3ViYWN0aW9uPUhUTUxWaWV3O1NlcnZpY2VJRD1bJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV1bJSBJRiAhQ29uZmlnKCJTZXNzaW9uVXNlQ29va2llIikgJV1bJSBFbnYoIlNlc3Npb25OYW1lIikgfCBodG1sICVdPVslIEVudigiU2Vzc2lvbklEIikgfCBodG1sICVdWyUgRU5EICVdIj48L2lmcmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiMgVG9EbzogTW92ZSB0aGlzIHRvIGEgY3VzdG9tIENTUyB3aGVuIHBvcnRpbmcgaW50byB0aGUgY29yZS4KPHN0eWxlPgogICAgLk1haW5Cb3ggLkNvbnRlbnRDb2x1bW4gLkNvbnRlbnQgPiBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbFNtYWxsID4gbGFiZWwgewogICAgICAgIHdpZHRoOiAxNDBweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5Db250ZW50Q29sdW1uID4gLldpZGdldEJveCA+IC5Db250ZW50ID4gZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IC5GaWVsZCwKICAgIC5Db250ZW50Q29sdW1uID4gLldpZGdldEJveCA+IC5Db250ZW50ID4gZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IC5Sb3cgPiAuRmllbGQsCiAgICAuQ29udGVudENvbHVtbiA+IC5XaWRnZXRCb3ggPiAuQ29udGVudCA+IGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsU21hbGwgPiAuVmFsdWUsCiAgICAuQ29udGVudENvbHVtbiA+IC5XaWRnZXRCb3ggPiAuQ29udGVudCA+IGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsU21hbGwgPiAuUm93ID4gLlZhbHVlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMTQwcHggIWltcG9ydGFudDsKICAgIH0KPC9zdHlsZT4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VEeW5hbWljRmllbGQiKSAlXQpbJSBJRiBEYXRhLlRpdGxlRmllbGQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgdGl0bGU9IlslIERhdGEuVGV4dCB8IGh0bWwgJV0iIHN0eWxlPSJbJSBEYXRhLlN0eWxlIHwgaHRtbCAlXSI+WyUgRGF0YS5UZXh0IHwgaHRtbCAlXTwvcD4KWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlRHluYW1pY0ZpZWxkTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSAlXSI+PGEgaHJlZj0iWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iWyUgSUYgRGF0YS5MaW5rUHJldmlldyAlXSBkYXRhLXRyaWdnZXI9ImZsb2F0ZXIiIGRhdGEtZmxvYXRlci11cmw9IlslIERhdGEuTGlua1ByZXZpZXcgfCBJbnRlcnBvbGF0ZSAlXSJbJSBFTkQgJV0gdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJEeW5hbWljRmllbGRMaW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2VEeW5hbWljRmllbGRMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VydmljZUR5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZUR5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZUR5bmFtaWNGaWVsZCIpICVdCgojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLkNvbW1lbnQpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIERvbnRQcmludCBTcGFjaW5nVG9wICBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQXNzb2NpYXRlZCBTTEFzIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU0xBWm9vbTtTTEFJRD1bJSBEYXRhLlNMQUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJTTEFSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTTEEiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTGlua1RhYmxlQ29tcGxleCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgWyUgRGF0YS5MaW5rVGFibGVTdHJnICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlQ29tcGxleCIpICVdCgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentITSMSLAZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSAgLSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FnZW50SVRTTVNMQVpvb20udHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkhlYWRsaW5lIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV08L2gxPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU0xBIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIFRpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuTWVudUNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiTWVudUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRCb3ggU3BhY2luZ1RvcCBFeHBhbmRlZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJMaWdodFJvdyBIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudC4iKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgQXV0b0hlaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2FsZW5kYXIiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2FsZW5kYXJOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRmlyc3QgUmVzcG9uc2UgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaXJzdFJlc3BvbnNlVGltZSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJVcGRhdGUgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5VcGRhdGVUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlNvbHV0aW9uIFRpbWUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU29sdXRpb25UaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5NaW5UaW1lQmV0d2VlbkluY2lkZW50cyB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFzc29jaWF0ZWQgU2VydmljZXMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTdGF0ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGg+CiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiAoc2hvcnQpIikgfCBodG1sICVdPC90aD4KIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyaXRpY2FsaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VydmljZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlKSB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9WyUgRGF0YS5TZXJ2aWNlSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5EZXNjcmlwdGlvblNob3J0IHwgaHRtbCAlXSI+WyUgRGF0YS5EZXNjcmlwdGlvblNob3J0IHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L3RkPgojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2UiKSAlXQoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Custom/Kernel/System/Console/Command/Admin/Service/Add.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL1N5c3RlbS9Db25zb2xlL0NvbW1hbmQvQWRtaW4vU2VydmljZS9BZGQucG0KIyAtLQojICRvcmlnaW46IG90b2JvIC0gZmY5ZTI5N2JhZjI4N2UxNjA3MWQzYWM2YWQ3ZjZjMTNmMTFhYzdmYSAtIEtlcm5lbC9TeXN0ZW0vQ29uc29sZS9Db21tYW5kL0FkbWluL1NlcnZpY2UvQWRkLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpTZXJ2aWNlOjpBZGQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwojIC0tLQoKdXNlIHBhcmVudCBxdyhLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6QmFzZUNvbW1hbmQpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnLAojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgJ0tlcm5lbDo6Q29uZmlnJywKIyBFTyBTZXJ2aWNlQ2F0YWxvZwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKIyAtLS0KKTsKCnN1YiBDb25maWd1cmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+RGVzY3JpcHRpb24oJ0FkZCBuZXcgc2VydmljZS4nKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ25hbWUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJOYW1lIG9mIHRoZSBuZXcgc2VydmljZS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnZGVzY3JpcHRpb24nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJEZXNjcmlwdGlvbiBvZiB0aGUgbmV3IHNlcnZpY2UuIE5vdGUgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGRlc2NyaXB0aW9uIGlzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIG9mIHRoZSBzeXN0ZW0gYW5kIHRoYXQgdGhlIGNvbnRlbnQgaXMgdXNlZCBhcyBib3RoIHNob3J0IGFuZCBsb25nIGRlc2NyaXB0aW9uLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiMgRU8gU2VydmljZUNhdGFsb2cKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnY3JpdGljYWxpdHknLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJDcml0aWNhbGl0eSBvZiB0aGUgbmV3IHNlcnZpY2UuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3R5cGUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJUeXBlIG9mIHRoZSBuZXcgc2VydmljZS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwojIC0tLQogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncGFyZW50LW5hbWUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJQYXJlbnQgc2VydmljZSBuYW1lLiBJZiBnaXZlbiwgdGhlIG5ldyBzZXJ2aWNlIHdpbGwgYmUgYSBzdWJzZXJ2aWNlIG9mIHRoZSBnaXZlbiBwYXJlbnQuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2NvbW1lbnQnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJDb21tZW50IGZvciB0aGUgbmV3IHNlcnZpY2UuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIEdldCBhbGwgc2VydmljZXMuCiAgICAkU2VsZi0+e05hbWV9ID0gJFNlbGYtPkdldE9wdGlvbignbmFtZScpOwogICAgbXkgJVNlcnZpY2VMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVJldmVyc2UgPSByZXZlcnNlICVTZXJ2aWNlTGlzdDsKCiAgICAkU2VsZi0+e1BhcmVudE5hbWV9ID0gJFNlbGYtPkdldE9wdGlvbigncGFyZW50LW5hbWUnKTsKICAgIGlmICggJFNlbGYtPntQYXJlbnROYW1lfSApIHsKCiAgICAgICAgIyBDaGVjayBpZiBQYXJlbnQgc2VydmljZSBleGlzdHMuCiAgICAgICAgJFNlbGYtPntQYXJlbnRJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBOYW1lICAgPT4gJFNlbGYtPntQYXJlbnROYW1lfSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICBkaWUgIlBhcmVudCBzZXJ2aWNlICRTZWxmLT57UGFyZW50TmFtZX0gZG9lcyBub3QgZXhpc3QuXG4iIGlmICEkU2VsZi0+e1BhcmVudElEfTsKCiAgICAgICAgIyBDaGVjayBpZiBQYXJlbnQ6OkNoaWxkIHNlcnZpY2UgY29tYmluYXRpb24gZXhpc3RzLgogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRTZWxmLT57UGFyZW50TmFtZX0gLiAnOjonIC4gJFNlbGYtPntOYW1lfTsKICAgICAgICBkaWUgIlNlcnZpY2UgJyRTZXJ2aWNlTmFtZScgYWxyZWFkeSBleGlzdHMhXG4iIGlmICRSZXZlcnNleyRTZXJ2aWNlTmFtZX07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBDaGVjayBpZiBzZXJ2aWNlIGFscmVhZHkgZXhpc3RzLgogICAgICAgIGRpZSAiU2VydmljZSAnJFNlbGYtPntOYW1lfScgYWxyZWFkeSBleGlzdHMhXG4iIGlmICRSZXZlcnNleyAkU2VsZi0+e05hbWV9IH07CiAgICB9CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCBjb25maWcgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JyBdLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWVzIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmIH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICBteSAlQ3JpdGljYWxpdHkgPSAleyAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fSB9OwoKICAgICRTZWxmLT57Q3JpdGljYWxpdHl9ID0gJENyaXRpY2FsaXR5eyAkU2VsZi0+R2V0T3B0aW9uKCdjcml0aWNhbGl0eScpIH07CgogICAgaWYgKCAhJFNlbGYtPntDcml0aWNhbGl0eX0gKSB7CiAgICAgICAgZGllICJDcml0aWNhbGl0eSAnIiAuICRTZWxmLT5HZXRPcHRpb24oJ2NyaXRpY2FsaXR5JykgLiAiJyBkb2VzIG5vdCBleGlzdC5cbiI7CiAgICB9CgogICAgIyBnZXQgc2VydmljZSB0eXBlIGxpc3QKICAgIG15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKCiAgICBteSAlU2VydmljZVR5cGUgPSByZXZlcnNlICV7JFNlcnZpY2VUeXBlTGlzdH07CgogICAgJFNlbGYtPntUeXBlSUR9ID0gJFNlcnZpY2VUeXBleyAkU2VsZi0+R2V0T3B0aW9uKCd0eXBlJykgfTsKCiAgICBpZiAoICEkU2VsZi0+e1R5cGVJRH0gKSB7CiAgICAgICAgZGllICJUeXBlICciIC4gJFNlbGYtPkdldE9wdGlvbigndHlwZScpIC4gIicgZG9lcyBub3QgZXhpc3QuXG4iOwogICAgfQojIC0tLQoKICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5BZGRpbmcgYSBuZXcgc2VydmljZS4uLjwveWVsbG93PlxuIik7CgogICAgbXkgJExhbmd1YWdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdEZWZhdWx0TGFuZ3VhZ2UnKSB8fCAnZW4nOwoKICAgICMgYWRkIHNlcnZpY2UKICAgIGlmICgKICAgICAgICAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFNlbGYtPntOYW1lfSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJFNlbGYtPkdldE9wdGlvbignY29tbWVudCcpLAojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICBEZXNjcmlwdGlvbnMgPT4gewogICAgICAgICAgICAgICAgJExhbmd1YWdlID0+IHsKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRTZWxmLT5HZXRPcHRpb24oJ2Rlc2NyaXB0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICA9PiAkU2VsZi0+R2V0T3B0aW9uKCdkZXNjcmlwdGlvbicpLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgIFBhcmVudElEID0+ICRTZWxmLT57UGFyZW50SUR9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+ICRTZWxmLT57VHlwZUlEfSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJFNlbGYtPntDcml0aWNhbGl0eX0sCiMgLS0tCiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiQ2FuJ3QgYWRkIHNlcnZpY2UuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKMTsK</File>
        <File Location="Custom/Kernel/System/Service.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA1YWE0ODUyNzEzZWU0YjM4NDU4OTE2ODJmNDM4NTkzOWZkMDg2NTQ2IC0gS2VybmVsL1N5c3RlbS9TZXJ2aWNlLnBtCiMgJG9yaWdpbjogaXRzbWNvcmUgLSAzZmE0ZDdmMDZmYjBjMDYwNWVmNGY2OTM1MzU1MDlmMDliOTA4ZWQzIC0gS2VybmVsL1N5c3RlbS9TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgKHF3KDphbGwpKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiMgRU8gSVRTTUNvcmUKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRyYW5zbGF0aW9ucycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKIyBSb3RoZXIgT1NTIFNlcnZpY2VDYXRhbG9nCiAgICAnS2VybmVsOjpTeXN0ZW06OkFDTDo6REI6OkFDTCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkVuY29kZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlR5cGUnCiMgRU8gU2VydmljZUNhdGFsb2cKKTsKIyBSb3RoZXIgT1NTIFNlcnZpY2VDYXRhbG9nCgo9Zm9yIHN0b3B3b3JkcyBPU1MgZGUgaXN0Cgo9Y3V0CgojIEVPIFNlcnZpY2VDYXRhbG9nCgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UgLSBzZXJ2aWNlIGxpYgoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgc2VydmljZSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnU2VydmljZSc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQgKiAyMDsKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdUaWNrZXQnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBzZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSA9ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9OwojIEVPIElUU01Db3JlCgogICAgIyBsb2FkIGdlbmVyYXRvciBwcmVmZXJlbmNlcyBtb2R1bGUKICAgIG15ICRHZW5lcmF0b3JNb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NlcnZpY2U6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U6OlByZWZlcmVuY2VzREInOwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRHZW5lcmF0b3JNb2R1bGUpICkgewogICAgICAgICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9ID0gJEdlbmVyYXRvck1vZHVsZS0+bmV3KCk7CiAgICB9CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAkU2VsZi0+e0RCT2JqZWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwojIEVPIElUU01Db3JlCgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgU2VydmljZUxpc3QoKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHNlcnZpY2VzCgogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLCAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgcGFyYW0KICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIHJlYWQgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdTZXJ2aWNlTGlzdDo6VmFsaWQ6OicgLiAkUGFyYW17VmFsaWR9OwoKICAgIGlmICggJFBhcmFte1ZhbGlkfSAmJiBkZWZpbmVkICRQYXJhbXtLZWVwQ2hpbGRyZW59ICYmICRQYXJhbXtLZWVwQ2hpbGRyZW59IGVxICcxJyApIHsKICAgICAgICAkQ2FjaGVLZXkgLj0gJzo6S2VlcENoaWxkcmVuOjonIC4gJFBhcmFte0tlZXBDaGlsZHJlbn07CiAgICB9CgogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQgRlJPTSBzZXJ2aWNlJywKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU2VydmljZUxpc3Q7CiAgICBteSAlU2VydmljZVZhbGlkTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTZXJ2aWNlTGlzdHsgJFJvd1swXSB9ICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlVmFsaWRMaXN0eyAkUm93WzBdIH0gPSAkUm93WzJdOwogICAgfQoKICAgIGlmICggISRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJVNlcnZpY2VMaXN0LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICVTZXJ2aWNlTGlzdCBpZiAhJFBhcmFte1ZhbGlkfTsKICAgIH0KCiAgICAjIGdldCB2YWxpZCBpZHMKICAgIG15IEBWYWxpZElEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwoKICAgICMgZHVwbGljYXRlIHNlcnZpY2UgbGlzdAogICAgbXkgJVNlcnZpY2VMaXN0VG1wID0gJVNlcnZpY2VMaXN0OwoKICAgICMgYWRkIHN1ZmZpeCBmb3IgY29ycmVjdCBzb3J0aW5nCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3RUbXAgKSB7CiAgICAgICAgJFNlcnZpY2VMaXN0VG1weyRTZXJ2aWNlSUR9IC49ICc6Oic7CiAgICB9CgogICAgbXkgJVNlcnZpY2VJbnZhbGlkTGlzdDsKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCB7ICRTZXJ2aWNlTGlzdFRtcHskYX0gY21wICRTZXJ2aWNlTGlzdFRtcHskYn0gfSBrZXlzICVTZXJ2aWNlTGlzdFRtcCApCiAgICB7CgogICAgICAgIG15ICRWYWxpZCA9IHNjYWxhciBncmVwIHsgJF8gZXEgJFNlcnZpY2VWYWxpZExpc3R7JFNlcnZpY2VJRH0gfSBAVmFsaWRJRHM7CgogICAgICAgIG5leHQgU0VSVklDRUlEIGlmICRWYWxpZDsKCiAgICAgICAgJFNlcnZpY2VJbnZhbGlkTGlzdHsgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IH0gPSAxOwogICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH07CiAgICB9CgogICAgIyBkZWxldGUgaW52YWxpZCBzZXJ2aWNlcyBhbmQgY2hpbGRyZW4KICAgIGlmICggIWRlZmluZWQgJFBhcmFte0tlZXBDaGlsZHJlbn0gfHwgISRQYXJhbXtLZWVwQ2hpbGRyZW59ICkgewogICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKCiAgICAgICAgICAgIElOVkFMSUROQU1FOgogICAgICAgICAgICBmb3IgbXkgJEludmFsaWROYW1lICggc29ydCBrZXlzICVTZXJ2aWNlSW52YWxpZExpc3QgKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gPX4gbXsgXEEgXFEkSW52YWxpZE5hbWVcRSA6OiB9eG1zICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH07CiAgICAgICAgICAgICAgICAgICAgbGFzdCBJTlZBTElETkFNRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlU2VydmljZUxpc3QsCiAgICApOwoKICAgIHJldHVybiAlU2VydmljZUxpc3Q7Cn0KCj1oZWFkMiBTZXJ2aWNlTGlzdEdldCgpCgpyZXR1cm4gYSBsaXN0IG9mIHNlcnZpY2VzIHdpdGggdGhlIGNvbXBsZXRlIGxpc3Qgb2YgYXR0cmlidXRlcyBmb3IgZWFjaCBzZXJ2aWNlCgogICAgbXkgJFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0R2V0KAogICAgICAgIFZhbGlkICA9PiAwLCAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJucwoKICAgICRTZXJ2aWNlTGlzdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIFNlcnZpY2VJRCAgPT4gMSwKICAgICAgICAgICAgUGFyZW50SUQgICA9PiAwLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdNeVNlcnZpY2UnLAogICAgICAgICAgICBOYW1lU2hvcnQgID0+ICdNeVNlcnZpY2UnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJ1NvbWUgQ29tbWVudCcKICAgICAgICAgICAgQ3JlYXRlVGltZSA9PiAnMjAxMS0wMi0wOCAxNTowODowMCcsCiAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJzIwMTEtMDYtMTEgMTc6MjI6MDAnLAogICAgICAgICAgICBDcmVhdGVCeSAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgPT4gMSwKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICA9PiAxNiwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQmFja2VuZCcsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAxLAogICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKIyBFTyBJVFNNQ29yZQojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICBEZXNjcmlwdGlvbnMgPT4gewogICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgID0+ICdTZXJ2aWNlIEEnLAogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgID0+ICdUaGlzIGlzIFNlcnZpY2UgQS4nLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICA9PiAnU2VydmljZSBBJywKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICA9PiAnRGFzIGlzdCBTZXJ2aWNlIEEuJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0KICAgICAgICAgICAgVGlja2V0VHlwZUlEcyAgICA9PiBbIDEsIDIsIDMgXSwKICAgICAgICAgICAgS2V5d29yZHMgICAgICAgICA9PiAnc2VydmljZSBoaW50cyBmb3IgZmlsdGVyJywKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBTZXJ2aWNlSUQgID0+IDIsCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gMSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTXlTZXJ2aWNlOjpNeVN1YlNlcnZpY2UnLAogICAgICAgICAgICBOYW1lU2hvcnQgID0+ICdNeVN1YlNlcnZpY2UnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJ1NvbWUgQ29tbWVudCcKICAgICAgICAgICAgQ3JlYXRlVGltZSA9PiAnMjAxMS0wMi0wOCAxNTowODowMCcsCiAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJzIwMTEtMDYtMTEgMTc6MjI6MDAnLAogICAgICAgICAgICBDcmVhdGVCeSAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgPT4gMSwKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICA9PiAxNiwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQmFja2VuZCcsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAxLAogICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKIyBFTyBJVFNNQ29yZQogICAgICAgIH0sCiAgICAgICAgIyAuLi4KICAgIF07Cgo9Y3V0CgpzdWIgU2VydmljZUxpc3RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgcGFyYW0KICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlZCByZXN1bHRzCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VMaXN0R2V0OjpWYWxpZDo6JyAuICRQYXJhbXtWYWxpZH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgIyBjcmVhdGUgU1FMIHF1ZXJ5CiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAuICIsIHR5cGVfaWQsIGNyaXRpY2FsaXR5ICIKIyBFTyBJVFNNQ29yZQojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgIC4gIiwga2V5d29yZHMgIgojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgLiAnRlJPTSBzZXJ2aWNlJzsKCiAgICBpZiAoICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIHZhbGlkX2lkIElOICgnIC4gam9pbiAnLCAnLAogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSAuICcpJzsKICAgIH0KCiAgICAkU1FMIC49ICcgT1JERVIgQlkgbmFtZSc7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAkU1FMLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgIG15ICVTZXJ2aWNlTmFtZTJJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVTZXJ2aWNlRGF0YTsKICAgICAgICAkU2VydmljZURhdGF7U2VydmljZUlEfSAgPSAkUm93WzBdOwogICAgICAgICRTZXJ2aWNlRGF0YXtOYW1lfSAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNlcnZpY2VEYXRhe1ZhbGlkSUR9ICAgID0gJFJvd1syXTsKICAgICAgICAkU2VydmljZURhdGF7Q29tbWVudH0gICAgPSAkUm93WzNdIHx8ICcnOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s1XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0gPSAkUm93WzZdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbN107CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgRU8gSVRTTUNvcmUKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICAgICAkU2VydmljZURhdGF7S2V5d29yZHN9ICAgICAgICAgPSAkUm93WzEwXTsKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICMgYWRkIHNlcnZpY2UgZGF0YSB0byBzZXJ2aWNlIGxpc3QKICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgXCVTZXJ2aWNlRGF0YTsKCiAgICAgICAgIyBidWlsZCBzZXJ2aWNlIGlkIGxvb2t1cCBoYXNoCiAgICAgICAgJFNlcnZpY2VOYW1lMklEeyAkU2VydmljZURhdGF7TmFtZX0gfSA9ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9OwogICAgfQoKICAgIGZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAjIGNyZWF0ZSBzaG9ydCBuYW1lIGFuZCBwYXJlbnQgaWQKICAgICAgICAkU2VydmljZURhdGEtPntOYW1lU2hvcnR9ID0gJFNlcnZpY2VEYXRhLT57TmFtZX07CiAgICAgICAgaWYgKCAkU2VydmljZURhdGEtPntOYW1lfSA9fiBteyBcQSAoLiopIDo6ICguKz8pIFx6IH14bXMgKSB7CiAgICAgICAgICAgIG15ICRQYXJlbnROYW1lID0gJDE7CiAgICAgICAgICAgICRTZXJ2aWNlRGF0YS0+e05hbWVTaG9ydH0gPSAkMjsKICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT57UGFyZW50SUR9ICA9ICRTZXJ2aWNlTmFtZTJJRHskUGFyZW50TmFtZX07CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZXJ2aWNlIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPlNlcnZpY2VQcmVmZXJlbmNlc0dldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBtZXJnZSBoYXNoCiAgICAgICAgaWYgKCVQcmVmZXJlbmNlcykgewogICAgICAgICAgICAleyRTZXJ2aWNlRGF0YX0gPSAoICV7JFNlcnZpY2VEYXRhfSwgJVByZWZlcmVuY2VzICk7CiAgICAgICAgfQojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwoKICAgICAgICAjIEdldCBhbGwgbGlua2VkIHRpY2tldCB0eXBlIElEcy4KICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PgogICAgICAgICAgICAgICAgJ1NFTEVDVCB0aWNrZXRfdHlwZV9pZCBGUk9NIHNlcnZpY2VfdHlwZSBXSEVSRSBzZXJ2aWNlX2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH0gXSwKICAgICAgICApOwoKICAgICAgICBteSBAVGlja2V0VHlwZUlEczsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgcHVzaCBAVGlja2V0VHlwZUlEcywgJFJvd1swXTsKICAgICAgICB9CiAgICAgICAgJFNlcnZpY2VEYXRhLT57VGlja2V0VHlwZUlEc30gPSBcQFRpY2tldFR5cGVJRHM7CgojIEVPIFNlcnZpY2VDYXRhbG9nCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgIyBnZXQgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwgY2FsY3VsYXRlZCBmcm9tIHJlbGF0ZWQgY29uZmlnIGl0ZW1zIGFuZCBjaGlsZCBzZXJ2aWNlcwogICAgICAgIG15ICVOZXdTZXJ2aWNlRGF0YSA9ICRTZWxmLT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgICAgICBTZXJ2aWNlRGF0YSA9PiAkU2VydmljZURhdGEsCiAgICAgICAgICAgIFByZWZlcmVuY2VzID0+IFwlUHJlZmVyZW5jZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFNlcnZpY2VEYXRhID0gXCVOZXdTZXJ2aWNlRGF0YTsKIyBFTyBJVFNNQ29yZQojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBkYXRhCiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgU0VMRUNUIGRlc2NyaXB0aW9uX3Nob3J0LCBkZXNjcmlwdGlvbl9sb25nLCBjb250ZW50X3R5cGUsIGxhbmd1YWdlCiAgICAgICAgICAgICAgICBGUk9NIHNlcnZpY2VfZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgIFdIRVJFIHNlcnZpY2VfaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9IF0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJURlc2NyaXB0aW9uczsKCiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgICAgICAjIGFkZCB0byBkZXNjcmlwdGlvbnMgaGFzaCB3aXRoIHRoZSBsYW5ndWFnZSBhcyBrZXkKICAgICAgICAgICAgJERlc2NyaXB0aW9uc3sgJFJvd1szXSB9ID0gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCA9PiAkUm93WzBdLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICA9PiAkUm93WzFdLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICA9PiAkUm93WzJdLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlcnZpY2VEYXRhLT57RGVzY3JpcHRpb25zfSA9IFwlRGVzY3JpcHRpb25zOwoKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgfQoKICAgIGlmIChAU2VydmljZUxpc3QpIHsKCiAgICAgICAgIyBzZXQgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFxAU2VydmljZUxpc3QsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gXEBTZXJ2aWNlTGlzdDsKfQoKPWhlYWQyIFNlcnZpY2VHZXQoKQoKcmV0dXJuIGEgc2VydmljZSBhcyBoYXNoCgpSZXR1cm4KICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9CiAgICAkU2VydmljZURhdGF7UGFyZW50SUR9CiAgICAkU2VydmljZURhdGF7TmFtZX0KICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9CiAgICAkU2VydmljZURhdGF7VmFsaWRJRH0KICAgICRTZXJ2aWNlRGF0YXtDb21tZW50fQogICAgJFNlcnZpY2VEYXRhe0NyZWF0ZVRpbWV9CiAgICAkU2VydmljZURhdGF7Q3JlYXRlQnl9CiAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0KICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0KIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgIERlc2NyaXB0aW9ucyA9PiB7CiAgICAgICAgZW4gPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICA9PiAnU2VydmljZSBBJywKICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgPT4gJ1RoaXMgaXMgU2VydmljZSBBLicsCiAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgID0+ICd0ZXh0L2h0bWwnLAogICAgICAgIH0sCiAgICAgICAgZGUgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICA9PiAnU2VydmljZSBBJywKICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgPT4gJ0RhcyBpc3QgU2VydmljZSBBLicsCiAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgID0+ICd0ZXh0L2h0bWwnLAogICAgICAgIH0sCiAgICB9CiAgICAkU2VydmljZURhdGF7VGlja2V0VHlwZUlEc30KICAgICRTZXJ2aWNlRGF0YXtEZXN0UXVldWVJRH0KICAgICRTZXJ2aWNlRGF0YXtLZXl3b3Jkc30KIyBFTyBTZXJ2aWNlQ2F0YWxvZwojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0KICAgICRTZXJ2aWNlRGF0YXtUeXBlfQogICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSAgICAjIE9ubHkgaWYgSW5jaWRlbnRTdGF0ZSBpcyAxCiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlfSAgICAgICMgT25seSBpZiBJbmNpZGVudFN0YXRlIGlzIDEKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSAgIyBPbmx5IGlmIEluY2lkZW50U3RhdGUgaXMgMQoKICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gMTIzLAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwgIyBPcHRpb25hbCwgcmV0dXJucyBDdXJJbmNpU3RhdGUgZXRjLgogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CiMgRU8gSVRTTUNvcmUKCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBOYW1lICAgID0+ICdTZXJ2aWNlOjpTdWJTZXJ2aWNlJywKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZWl0aGVyIFNlcnZpY2VJRCBvciBOYW1lIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdGhhdCBub3QgYm90aCBTZXJ2aWNlSUQgYW5kIE5hbWUgYXJlIGdpdmVuCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICYmICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIFNlcnZpY2VJRCBPUiBOYW1lIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvb2t1cCB0aGUgU2VydmljZUlECiAgICBpZiAoICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkUGFyYW17U2VydmljZUlEfSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGVkIHJlc3VsdHMKICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUdldDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgIyBhZGQgdGhlIEluY2lkZW50U3RhdGUgcGFyYW1ldGVyIHRvIHRoZSBjYWNoZSBrZXkKICAgICRQYXJhbXtJbmNpZGVudFN0YXRlfSB8fD0gMDsKICAgICRDYWNoZUtleSAuPSAnOjpJbmNpZGVudFN0YXRlOjonIC4gJFBhcmFte0luY2lkZW50U3RhdGV9OwojIEVPIElUU01Db3JlCiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBzZXJ2aWNlIGZyb20gZGIKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAgICAgLiAiLCB0eXBlX2lkLCBjcml0aWNhbGl0eSAiCiMgRU8gSVRTTUNvcmUKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICAgICAgICAgLiAiLCBkZXN0X3F1ZXVlaWQsIGtleXdvcmRzICIKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAuICdGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNlcnZpY2VEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gID0gJFJvd1swXTsKICAgICAgICAkU2VydmljZURhdGF7TmFtZX0gICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbMl07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NvbW1lbnR9ICAgID0gJFJvd1szXSB8fCAnJzsKICAgICAgICAkU2VydmljZURhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzRdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNV07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s2XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzddOwojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgICRTZXJ2aWNlRGF0YXtUeXBlSUR9ICAgICAgPSAkUm93WzhdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcml0aWNhbGl0eX0gPSAkUm93WzldIHx8ICcnOwojIEVPIElUU01Db3JlCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgJFNlcnZpY2VEYXRhe0Rlc3RRdWV1ZUlEfSAgICAgID0gJFJvd1sxMF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0tleXdvcmRzfSAgICAgICAgID0gJFJvd1sxMV07CiMgRU8gU2VydmljZUNhdGFsb2cKICAgIH0KCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAjIGdldCBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBkYXRhCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIGRlc2NyaXB0aW9uX3Nob3J0LCBkZXNjcmlwdGlvbl9sb25nLCBjb250ZW50X3R5cGUsIGxhbmd1YWdlCiAgICAgICAgICAgIEZST00gc2VydmljZV9kZXNjcmlwdGlvbgogICAgICAgICAgICBXSEVSRSBzZXJ2aWNlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZURhdGF7U2VydmljZUlEfSBdLAogICAgKTsKCiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgIyBhZGQgdG8gZGVzY3JpcHRpb25zIGhhc2ggd2l0aCB0aGUgbGFuZ3VhZ2UgYXMga2V5CiAgICAgICAgJFNlcnZpY2VEYXRhe0Rlc2NyaXB0aW9uc30tPnsgJFJvd1szXSB9ID0gewogICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRSb3dbMF0sCiAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICA9PiAkUm93WzJdLAogICAgICAgIH07CiAgICB9CgogICAgIyBHZXQgYWxsIGxpbmtlZCB0aWNrZXQgdHlwZSBJRHMuCiAgICBteSBAVGlja2V0VHlwZUlEcyA9ICREQk9iamVjdC0+U2VsZWN0Q29sQXJyYXkoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIHRpY2tldF90eXBlX2lkIEZST00gc2VydmljZV90eXBlIFdIRVJFIHNlcnZpY2VfaWQgPSA/IE9SREVSIEJZIHRpY2tldF90eXBlX2lkJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICApOwogICAgJFNlcnZpY2VEYXRhe1RpY2tldFR5cGVJRHN9ID0gXEBUaWNrZXRUeXBlSURzOwoKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgIyBjaGVjayBzZXJ2aWNlCiAgICBpZiAoICEkU2VydmljZURhdGF7U2VydmljZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggU2VydmljZUlEICgkUGFyYW17U2VydmljZUlEfSkhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBzaG9ydCBuYW1lIGFuZCBwYXJlbnQgaWQKICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9ID0gJFNlcnZpY2VEYXRhe05hbWV9OwogICAgaWYgKCAkU2VydmljZURhdGF7TmFtZX0gPX4gbXsgXEEgKC4qKSA6OiAoLis/KSBceiB9eG1zICkgewogICAgICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9ID0gJDI7CgogICAgICAgICMgbG9va3VwIHBhcmVudAogICAgICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkMSwKICAgICAgICApOwogICAgICAgICRTZXJ2aWNlRGF0YXtQYXJlbnRJRH0gPSAkU2VydmljZUlEOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZWxmLT5TZXJ2aWNlUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlU2VydmljZURhdGEgPSAoICVTZXJ2aWNlRGF0YSwgJVByZWZlcmVuY2VzICk7CiAgICB9CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICBpZiAoICRQYXJhbXtJbmNpZGVudFN0YXRlfSApIHsKICAgICAgICAjIGdldCBjdXJyZW50IGluY2lkZW50IHN0YXRlLCBjYWxjdWxhdGVkIGZyb20gcmVsYXRlZCBjb25maWcgaXRlbXMgYW5kIGNoaWxkIHNlcnZpY2VzCiAgICAgICAgJVNlcnZpY2VEYXRhID0gJFNlbGYtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEsCiAgICAgICAgICAgIFByZWZlcmVuY2VzID0+IFwlUHJlZmVyZW5jZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlU2VydmljZURhdGEsCiAgICApOwoKICAgIHJldHVybiAlU2VydmljZURhdGE7Cn0KCj1oZWFkMiBTZXJ2aWNlTG9va3VwKCkKCnJldHVybiBhIHNlcnZpY2UgbmFtZSBhbmQgaWQKCiAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCgKICAgICAgICBOYW1lID0+ICdTZXJ2aWNlOjpTdWJTZXJ2aWNlJywKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VMb29rdXA6OklEOjonIC4gJFBhcmFte1NlcnZpY2VJRH07CiAgICAgICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRDYWNoZSBpZiBkZWZpbmVkICRDYWNoZTsKCiAgICAgICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgbG9va3VwCiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIG5hbWUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFJlc3VsdCA9ICcnOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUmVzdWx0ID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gJFJlc3VsdCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTZXJ2aWNlTG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGxvb2t1cAogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkUmVzdWx0ID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRSZXN1bHQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiAkUmVzdWx0LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkUmVzdWx0OwogICAgfQp9Cgo9aGVhZDIgU2VydmljZUFkZCgpCgphZGQgYSBzZXJ2aWNlCgogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIFBhcmVudElEID0+IDEsICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgIENvbW1lbnQgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgPT4gMSwKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgRU8gSVRTTUNvcmUKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICAgICBEZXNjcmlwdGlvbnMgPT4gewogICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICA9PiAnU2VydmljZSBBJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgID0+ICdUaGlzIGlzIFNlcnZpY2UgQS4nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgID0+ICdTZXJ2aWNlIEEnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgPT4gJ0RhcyBpc3QgU2VydmljZSBBLicsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFRpY2tldFR5cGVJRHMgICAgPT4gWyAxLCAyLCAzIF0sCiAgICAgICAgS2V5d29yZHMgICAgICAgICA9PiAnc2VydmljZSBoaW50cyBmb3IgZmlsdGVyJywKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKIyMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMjICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVmFsaWRJRCBVc2VySUQpKSB7CiMgICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVmFsaWRJRCBVc2VySUQgVHlwZUlEIENyaXRpY2FsaXR5KSkgewojIyBFTyBJVFNNQ29yZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCBEZXNjcmlwdGlvbnMgQ3JpdGljYWxpdHkpKSB7CiMgRU8gU2VydmljZUNhdGFsb2cKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgY29tbWVudAogICAgJFBhcmFte0NvbW1lbnR9IHx8PSAnJzsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAkUGFyYW17RGVzdFF1ZXVlSUR9IHx8PSAnJzsKCiMgRU8gU2VydmljZUNhdGFsb2cKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgbmFtZQogICAgaWYgKCAkUGFyYW17TmFtZX0gPX4gbXsgOjogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGFkZCBzZXJ2aWNlISBJbnZhbGlkIFNlcnZpY2UgbmFtZSAnJFBhcmFte05hbWV9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICMgY2hlY2sgc2VydmljZSBkZXNjcmlwdGlvbnMgcGFyYW1ldGVyCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Rlc2NyaXB0aW9uc30gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgU2VydmljZSBkZXNjcmlwdGlvbnMhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGVhY2ggYXJndW1lbnQgZm9yIGVhY2ggc2VydmljZSBkZXNjcmlwdGlvbnMgbGFuZ3VhZ2UKICAgIGZvciBteSAkTGFuZ3VhZ2UgKCBzb3J0IGtleXMgJXsgJFBhcmFte0Rlc2NyaXB0aW9uc30gfSApIHsKCiAgICAgICAgZm9yIG15ICRBcmd1bWVudCAocXcoRGVzY3JpcHRpb25TaG9ydCBDb250ZW50VHlwZSkpIHsKCiAgICAgICAgICAgICMgZXJyb3IgaWYgbWVzc2FnZSBkYXRhIGlzIGluY29tcGxldGUKICAgICAgICAgICAgaWYgKCAhJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2V9LT57JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgc2VydmljZSBkZXNjcmlwdGlvbiBhcmd1bWVudCAnJEFyZ3VtZW50JyBmb3IgbGFuZ3VhZ2UgJyRMYW5ndWFnZSchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZml4IHNvbWUgYmFkIHN0dWZmIGZyb20gc29tZSBicm93c2VycyAoT3BlcmEpIQogICAgICAgICAgICAkUGFyYW17RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZX0tPntEZXNjcmlwdGlvbkxvbmd9IHx8PSAnJzsKICAgICAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2V9LT57RGVzY3JpcHRpb25Mb25nfSA9fiBzLyhcblxyfFxyXHJcbnxcclxufFxyKS9cbi9nOwogICAgICAgIH0KICAgIH0KCiMgRU8gU2VydmljZUNhdGFsb2cKICAgICMgY3JlYXRlIGZ1bGwgbmFtZQogICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJhbXtOYW1lfTsKCiAgICAjIGdldCBwYXJlbnQgbmFtZQogICAgaWYgKCAkUGFyYW17UGFyZW50SUR9ICkgewogICAgICAgIG15ICRQYXJlbnROYW1lID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17UGFyZW50SUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCRQYXJlbnROYW1lKSB7CiAgICAgICAgICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyZW50TmFtZSAuICc6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIGV4aXN0aW5nIHNlcnZpY2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICRFeGlzdHM7CiAgICB3aGlsZSAoICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRFeGlzdHMgPSAxOwogICAgfQoKICAgICMgYWRkIHNlcnZpY2UgdG8gZGF0YWJhc2UKICAgIGlmICgkRXhpc3RzKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBIHNlcnZpY2Ugd2l0aCB0aGUgbmFtZSBhbmQgcGFyZW50ICckUGFyYW17RnVsbE5hbWV9JyBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKIyMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMjICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2UgJwojIyAgICAgICAgICAgIC4gJyhuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpICcKIyMgICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAojIyAgICAgICAgQmluZCA9PiBbCiMjICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMjICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiMjICAgICAgICBdLAojICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlICcKIyAgICAgICAgICAgICAuICcobmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5LCAnCiMgICAgICAgICAgICAgLiAndHlwZV9pZCwgY3JpdGljYWxpdHkpICcKIyAgICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgPywgPyknLAojICAgICAgICAgQmluZCA9PiBbCiMgICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtDcml0aWNhbGl0eX0sCiMgICAgICAgICBdLAojIyBFTyBJVFNNQ29yZQogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2VydmljZSAnCiAgICAgICAgICAgIC4gJyhuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnksICcKICAgICAgICAgICAgLiAndHlwZV9pZCwgY3JpdGljYWxpdHksIGRlc3RfcXVldWVpZCwga2V5d29yZHMpICcKICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8sID8sID8sID8sID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1R5cGVJRH0sIFwkUGFyYW17Q3JpdGljYWxpdHl9LAogICAgICAgICAgICBcJFBhcmFte0Rlc3RRdWV1ZUlEfSwgXCRQYXJhbXtLZXl3b3Jkc30sCiAgICAgICAgXSwKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGlkCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtGdWxsTmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKICAgIG15ICRTZXJ2aWNlSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2VydmljZUlEID0gJFJvd1swXTsKICAgIH0KCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAjIEluc2VydCBuZXcgdGlja2V0IHR5cGUgcmVsYXRpb25zLgogICAgVElDS0VUVFlQRUlEOgogICAgZm9yIG15ICRUaWNrZXRUeXBlSUQgKCBAeyAkUGFyYW17VGlja2V0VHlwZUlEc30gfSApIHsKICAgICAgICBuZXh0IFRJQ0tFVFRZUEVJRCBpZiAhJFRpY2tldFR5cGVJRDsKCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2VfdHlwZSAnCiAgICAgICAgICAgICAgICAuICcoc2VydmljZV9pZCwgdGlja2V0X3R5cGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkpICcKICAgICAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZUlELCBcJFRpY2tldFR5cGVJRCwgXCRQYXJhbXtVc2VySUR9IF0KICAgICAgICApOwogICAgfQoKICAgICMgaW5zZXJ0IHNlcnZpY2UgZGVzY3JpcHRpb25zIGRhdGEKICAgIGZvciBteSAkTGFuZ3VhZ2UgKCBzb3J0IGtleXMgJXsgJFBhcmFte0Rlc2NyaXB0aW9uc30gfSApIHsKCiAgICAgICAgbXkgJURlc2NyaXB0aW9uID0gJXsgJFBhcmFte0Rlc2NyaXB0aW9uc30tPnskTGFuZ3VhZ2V9IH07CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHNlcnZpY2VfZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICAgICAoc2VydmljZV9pZCwgZGVzY3JpcHRpb25fc2hvcnQsIGRlc2NyaXB0aW9uX2xvbmcsIGNvbnRlbnRfdHlwZSwgbGFuZ3VhZ2UpCiAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sID8sID8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFwkRGVzY3JpcHRpb257RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBcJERlc2NyaXB0aW9ue0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICBcJERlc2NyaXB0aW9ue0NvbnRlbnRUeXBlfSwKICAgICAgICAgICAgICAgIFwkTGFuZ3VhZ2UsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KCiMgRU8gU2VydmljZUNhdGFsb2cKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICBteSAlU2VydmljZXMgPSAkU2VsZi0+U2VydmljZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdlbmVyYXRlIGNoYWluZWQgdHJhbnNsYXRpb25zIGF1dG9tYXRpY2FsbHkKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUcmFuc2xhdGlvbnMnKS0+VHJhbnNsYXRlUGFyZW50Q2hpbGRFbGVtZW50cygKICAgICAgICBTdHJpbmdzID0+IFsgdmFsdWVzICVTZXJ2aWNlcyBdLAogICAgKTsKCiAgICByZXR1cm4gJFNlcnZpY2VJRDsKfQoKPWhlYWQyIFNlcnZpY2VVcGRhdGUoKQoKdXBkYXRlIGFuIGV4aXN0aW5nIHNlcnZpY2UKCiAgICBteSAkVHJ1ZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgUGFyZW50SUQgID0+IDEsICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBOYW1lICAgICAgPT4gJ1NlcnZpY2UgTmFtZScsCiAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgID0+IDEsCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIEVPIElUU01Db3JlCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgRGVzY3JpcHRpb25zID0+IHsKICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCAgPT4gJ1NlcnZpY2UgQScsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICA9PiAnVGhpcyBpcyBTZXJ2aWNlIEEuJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICA9PiAnU2VydmljZSBBJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgID0+ICdEYXMgaXN0IFNlcnZpY2UgQS4nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBUaWNrZXRUeXBlSURzICAgID0+IFsgMSwgMiwgMyBdLAogICAgICAgIEtleXdvcmQgICAgICAgICAgPT4gJ3NlcnZpY2UgaGludHMgZm9yIGZpbHRlcicsCiMgRU8gU2VydmljZUNhdGFsb2cKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMjIFJvdGhlciBPU1MgLyBJVFNNQ29yZQojIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQgQ3JpdGljYWxpdHkpKSB7CiMjIEVPIElUU01Db3JlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgTmFtZSBEZXNjcmlwdGlvbnMgVmFsaWRJRCBVc2VySUQgQ3JpdGljYWxpdHkpKSB7CiMgRU8gU2VydmljZUNhdGFsb2cKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBjb21tZW50CiAgICAkUGFyYW17Q29tbWVudH0gfHw9ICcnOwoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICRQYXJhbXtEZXN0UXVldWVJRH0gfHw9ICcnOwoKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiBteyA6OiB9eG1zICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIHNlcnZpY2UhIEludmFsaWQgU2VydmljZSBuYW1lICckUGFyYW17TmFtZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgb2xkIG5hbWUgb2Ygc2VydmljZQogICAgbXkgJE9sZFNlcnZpY2VOYW1lID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkT2xkU2VydmljZU5hbWUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgc2VydmljZSEgU2VydmljZSAnJFBhcmFte1NlcnZpY2VJRH0nIGRvZXMgbm90IGV4aXN0LiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgIyBjaGVjayBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBwYXJhbWV0ZXIKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RGVzY3JpcHRpb25zfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBTZXJ2aWNlIGRlc2NyaXB0aW9ucyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgZWFjaCBhcmd1bWVudCBmb3IgZWFjaCBzZXJ2aWNlIGRlc2NyaXB0aW9ucyBsYW5ndWFnZQogICAgZm9yIG15ICRMYW5ndWFnZSAoIHNvcnQga2V5cyAleyAkUGFyYW17RGVzY3JpcHRpb25zfSB9ICkgewoKICAgICAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhEZXNjcmlwdGlvblNob3J0IENvbnRlbnRUeXBlKSkgewoKICAgICAgICAgICAgIyBlcnJvciBpZiBtZXNzYWdlIGRhdGEgaXMgaW5jb21wbGV0ZQogICAgICAgICAgICBpZiAoICEkUGFyYW17RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZX0tPnskQXJndW1lbnR9ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBzZXJ2aWNlIGRlc2NyaXB0aW9uIGFyZ3VtZW50ICckQXJndW1lbnQnIGZvciBsYW5ndWFnZSAnJExhbmd1YWdlJyEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBmaXggc29tZSBiYWQgc3R1ZmYgZnJvbSBzb21lIGJyb3dzZXJzIChPcGVyYSkhCiAgICAgICAgICAgICRQYXJhbXtEZXNjcmlwdGlvbnN9LT57JExhbmd1YWdlfS0+e0Rlc2NyaXB0aW9uTG9uZ30gfHw9ICcnOwogICAgICAgICAgICAkUGFyYW17RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZX0tPntEZXNjcmlwdGlvbkxvbmd9ID1+IHMvKFxuXHJ8XHJcclxufFxyXG58XHIpL1xuL2c7CiAgICAgICAgfQogICAgfQoKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgIyBjcmVhdGUgZnVsbCBuYW1lCiAgICAkUGFyYW17RnVsbE5hbWV9ID0gJFBhcmFte05hbWV9OwoKICAgICMgZ2V0IHBhcmVudCBuYW1lCiAgICBpZiAoICRQYXJhbXtQYXJlbnRJRH0gKSB7CgogICAgICAgICMgbG9va3VwIHNlcnZpY2UKICAgICAgICBteSAkUGFyZW50TmFtZSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1BhcmVudElEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFBhcmVudE5hbWUpIHsKICAgICAgICAgICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJlbnROYW1lIC4gJzo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2ssIGlmIHNlbGVjdGVkIHBhcmVudCB3YXMgYSBjaGlsZCBvZiB0aGlzIHNlcnZpY2UKICAgICAgICBpZiAoICRQYXJhbXtGdWxsTmFtZX0gPX4gbXsgXEEgKCBcUSRPbGRTZXJ2aWNlTmFtZVxFICkgOjogfXhtcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NhblwndCB1cGRhdGUgc2VydmljZSEgSW52YWxpZCBwYXJlbnQgd2FzIHNlbGVjdGVkLicKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZmluZCBleGlzdHMgc2VydmljZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17RnVsbE5hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CiAgICBteSAkRXhpc3RzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSBuZSAkUm93WzBdICkgewogICAgICAgICAgICAkRXhpc3RzID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgaWYgKCRFeGlzdHMpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkEgc2VydmljZSB3aXRoIHRoZSBuYW1lIGFuZCBwYXJlbnQgJyRQYXJhbXtGdWxsTmFtZX0nIGFscmVhZHkgZXhpc3RzLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CgogICAgfQoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICMgRGVsZXRlIGV4aXN0aW5nIHRpY2tldCB0eXBlIHJlbGF0aW9ucy4KICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBzZXJ2aWNlX3R5cGUgV0hFUkUgc2VydmljZV9pZCA9ID87JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9LCBdLAogICAgKTsKCiMgRU8gU2VydmljZUNhdGFsb2cKICAgICMgdXBkYXRlIHNlcnZpY2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKIyMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMjICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKIyMgICAgICAgICAgICAuICcgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPyBXSEVSRSBpZCA9ID8nLAojIyAgICAgICAgQmluZCA9PiBbCiMjICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMjICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1NlcnZpY2VJRH0sCiMjICAgICAgICBdLAojICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKIyAgICAgICAgICAgIC4gJyBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/LCB0eXBlX2lkID0gPywgY3JpdGljYWxpdHkgPSA/JwojICAgICAgICAgICAgLiAnIFdIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtDcml0aWNhbGl0eX0sIFwkUGFyYW17U2VydmljZUlEfSwKIyAgICAgICAgXSwKIyMgRU8gSVRTTUNvcmUKICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKICAgICAgICAgICAgLiAnIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8sIGNyaXRpY2FsaXR5ID0gPywgJwogICAgICAgICAgICAuICcgZGVzdF9xdWV1ZWlkID0gPywga2V5d29yZHMgPSA/JwogICAgICAgICAgICAuICcgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtDcml0aWNhbGl0eX0sCiAgICAgICAgICAgIFwkUGFyYW17RGVzdFF1ZXVlSUR9LCBcJFBhcmFte0tleXdvcmRzfSwgXCRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgIF0sCiMgRU8gU2VydmljZUNhdGFsb2cKICAgICk7CgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwoKICAgICMgSW5zZXJ0IG5ldyB0aWNrZXQgdHlwZSByZWxhdGlvbnMuCiAgICBUSUNLRVRUWVBFSUQ6CiAgICBmb3IgbXkgJFRpY2tldFR5cGVJRCAoIEB7ICRQYXJhbXtUaWNrZXRUeXBlSURzfSB9ICkgewogICAgICAgIG5leHQgVElDS0VUVFlQRUlEIGlmICEkVGlja2V0VHlwZUlEOwogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX3R5cGUgJwogICAgICAgICAgICAgICAgLiAnKHNlcnZpY2VfaWQsIHRpY2tldF90eXBlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KSAnCiAgICAgICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1NlcnZpY2VJRH0sIFwkVGlja2V0VHlwZUlELCBcJFBhcmFte1VzZXJJRH0gXQogICAgICAgICk7CiAgICB9CgogICAgIyBGb3Iga2VlcGluZyB0cmFjayBvZiByZW5hbWVkIHNlcnZpY2VzCiAgICBteSAlU2VydmljZU5hbWVPbGQyTmV3ID0gKAogICAgICAgICRPbGRTZXJ2aWNlTmFtZSA9PiAkUGFyYW17RnVsbE5hbWV9LAogICAgKTsKCiMgRU8gU2VydmljZUNhdGFsb2cKICAgIG15ICRMaWtlU2VydmljZSA9ICREQk9iamVjdC0+UXVvdGUoICRPbGRTZXJ2aWNlTmFtZSwgJ0xpa2UnICkgLiAnOjolJzsKCiAgICAjIGZpbmQgYWxsIGNoaWxkcmVuCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAiU0VMRUNUIGlkLCBuYW1lIEZST00gc2VydmljZSBXSEVSRSBuYW1lIExJS0UgPyIsCiAgICAgICAgQmluZCA9PiBbIFwkTGlrZVNlcnZpY2UgXSwKICAgICk7CgogICAgbXkgQENoaWxkczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVDaGlsZDsKICAgICAgICAkQ2hpbGR7U2VydmljZUlEfSA9ICRSb3dbMF07CiAgICAgICAgJENoaWxke05hbWV9ICAgICAgPSAkUm93WzFdOwogICAgICAgIHB1c2ggQENoaWxkcywgXCVDaGlsZDsKICAgIH0KCiAgICAjIHVwZGF0ZSBjaGlsZHJlbgogICAgZm9yIG15ICRDaGlsZCAoQENoaWxkcykgewojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgIG15ICRPbGRDaGlsZE5hbWUgPSAkQ2hpbGQtPntOYW1lfTsKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICRDaGlsZC0+e05hbWV9ID1+IHN7IFxBICggXFEkT2xkU2VydmljZU5hbWVcRSApIDo6IH17JFBhcmFte0Z1bGxOYW1lfTo6fXhtczsKICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICdVUERBVEUgc2VydmljZSBTRVQgbmFtZSA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2hpbGQtPntOYW1lfSwgXCRDaGlsZC0+e1NlcnZpY2VJRH0gXSwKICAgICAgICApOwojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICRTZXJ2aWNlTmFtZU9sZDJOZXd7JE9sZENoaWxkTmFtZX0gPSAkQ2hpbGQtPntOYW1lfTsKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgfQoKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKCiAgICAjIFRoZSB0eXBlIGJhc2VkIEFDTHMgcmVmZXJlbmNlIHRoZSBzZXJ2aWNlcyBieSB0aGVpciBmdWxsIG5hbWUuCiAgICAjIFdoZW4gdGhlIGZ1bGwgbmFtZSBoYXMgY2hhbmdlZCwgdGhlIHNlcnZpY2UgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIHRvIGJlIHJlbmFtZWQgdGhlcmUgYXMgd2VsbC4KICAgIG15ICRTZXJ2aWNlTmFtZUNoYW5nZWQgPSAkT2xkU2VydmljZU5hbWUgbmUgJFBhcmFte0Z1bGxOYW1lfTsKICAgIG15ICRUeXBlQUNMc0VuYWJsZWQgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzJyk7CgogICAgaWYgKCAkU2VydmljZU5hbWVDaGFuZ2VkICYmICRUeXBlQUNMc0VuYWJsZWQgKSB7CiAgICAgICAgJFNlbGYtPlJlbmFtZVNlcnZpY2VzSW5UeXBTZXJ2aWNlQUNMcygKICAgICAgICAgICAgU2VydmljZU5hbWVPbGQyTmV3ID0+IFwlU2VydmljZU5hbWVPbGQyTmV3LAogICAgICAgICk7CiAgICB9CgogICAgIyBEZWxldGUgZXhpc3Rpbmcgc2VydmljZSBkZXNjcmlwdGlvbnMgZGF0YS4KICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gc2VydmljZV9kZXNjcmlwdGlvbiBXSEVSRSBzZXJ2aWNlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgKTsKCiAgICAjIEluc2VydCBuZXcgc2VydmljZSBkZXNjcmlwdGlvbnMgZGF0YS4KICAgIGZvciBteSAkTGFuZ3VhZ2UgKCBzb3J0IGtleXMgJXsgJFBhcmFte0Rlc2NyaXB0aW9uc30gLy8ge30gfSApIHsKCiAgICAgICAgbXkgJURlc2NyaXB0aW9ucyA9ICV7ICRQYXJhbXtEZXNjcmlwdGlvbnN9LT57JExhbmd1YWdlfSB9OwoKICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gc2VydmljZV9kZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgICAgIChzZXJ2aWNlX2lkLCBkZXNjcmlwdGlvbl9zaG9ydCwgZGVzY3JpcHRpb25fbG9uZywgY29udGVudF90eXBlLCBsYW5ndWFnZSkKICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkUGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIFwkRGVzY3JpcHRpb25ze0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgXCREZXNjcmlwdGlvbnN7RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFwkRGVzY3JpcHRpb25ze0NvbnRlbnRUeXBlfSwKICAgICAgICAgICAgICAgIFwkTGFuZ3VhZ2UsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KCiMgRU8gU2VydmljZUNhdGFsb2cKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICBteSAlU2VydmljZXMgPSAkU2VsZi0+U2VydmljZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdlbmVyYXRlIGNoYWluZWQgdHJhbnNsYXRpb25zIGF1dG9tYXRpY2FsbHkKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUcmFuc2xhdGlvbnMnKS0+VHJhbnNsYXRlUGFyZW50Q2hpbGRFbGVtZW50cygKICAgICAgICBTdHJpbmdzID0+IFsgdmFsdWVzICVTZXJ2aWNlcyBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFNlcnZpY2VTZWFyY2goKQoKcmV0dXJuIHNlcnZpY2UgaWRzIGFzIGFuIGFycmF5CgogICAgbXkgQFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VTZWFyY2goCiAgICAgICAgTmFtZSAgID0+ICdTZXJ2aWNlIE5hbWUnLCAjIChvcHRpb25hbCkKICAgICAgICBMaW1pdCAgPT4gMTIyLCAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEwMDAKICAgICAgICBVc2VySUQgPT4gMSwKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICBUeXBlSURzICAgICAgID0+IDIsCiAgICAgICAgQ3JpdGljYWxpdGllcyA9PiBbICcyIGxvdycsICczIG5vcm1hbCcgXSwKIyBFTyBJVFNNQ29yZQogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGxpbWl0CiAgICAkUGFyYW17TGltaXR9IHx8PSAxMDAwOwoKICAgICMgY3JlYXRlIHNxbCBxdWVyeQogICAgbXkgJFNRTCA9ICJTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIHZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkpfSApIjsKICAgIG15IEBCaW5kOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgaWYgKCAkUGFyYW17TmFtZX0gKSB7CgogICAgICAgICMgcXVvdGUKICAgICAgICAkUGFyYW17TmFtZX0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17TmFtZX0sICdMaWtlJyApOwoKICAgICAgICAjIHJlcGxhY2UgKiB3aXRoICUgYW5kIGNsZWFuIHRoZSBzdHJpbmcKICAgICAgICAkUGFyYW17TmFtZX0gPX4gc3sgXCorIH17JX14bXNnOwogICAgICAgICRQYXJhbXtOYW1lfSA9fiBzeyAlKyB9eyV9eG1zZzsKICAgICAgICBteSAkTGlrZVN0cmluZyA9ICclJyAuICRQYXJhbXtOYW1lfSAuICclJzsKICAgICAgICBwdXNoIEBCaW5kLCBcJExpa2VTdHJpbmc7CgogICAgICAgICRTUUwgLj0gIiBBTkQgbmFtZSBMSUtFID8iOwogICAgfQojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgIyBhZGQgdHlwZSBpZHMKICAgIGlmICggJFBhcmFte1R5cGVJRHN9ICYmIHJlZiAkUGFyYW17VHlwZUlEc30gZXEgJ0FSUkFZJyAmJiBAeyAkUGFyYW17VHlwZUlEc30gfSApIHsKCiAgICAgICAgIyBxdW90ZSBhcyBpbnRlZ2VyCiAgICAgICAgZm9yIG15ICRUeXBlSUQgKCBAeyAkUGFyYW17VHlwZUlEc30gfSApIHsKICAgICAgICAgICAgJFR5cGVJRCA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFR5cGVJRCwgJ0ludGVnZXInICk7CiAgICAgICAgfQoKICAgICAgICAkU1FMIC49ICIgQU5EIHR5cGVfaWQgSU4gKCIgLiBqb2luKCcsICcsIEB7ICRQYXJhbXtUeXBlSURzfSB9KSAuICIpICI7CiAgICB9CgogICAgIyBhZGQgY3JpdGljYWxpdGllcwogICAgaWYgKCRQYXJhbXtDcml0aWNhbGl0aWVzfSAmJiByZWYgJFBhcmFte0NyaXRpY2FsaXRpZXN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte0NyaXRpY2FsaXRpZXN9IH0gKSB7CgogICAgICAgICMgcXVvdGUgYW5kIHdyYXAgaW4gc2luZ2xlIHF1b3RlcwogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBAeyAkUGFyYW17Q3JpdGljYWxpdGllc30gfSApIHsKICAgICAgICAgICAgJENyaXRpY2FsaXR5ID0gIiciIC4gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkQ3JpdGljYWxpdHkgKSAuICInIjsKICAgICAgICB9CgogICAgICAgICRTUUwgLj0gIkFORCBjcml0aWNhbGl0eSBJTiAoIiAuIGpvaW4oJywgJywgQHsgJFBhcmFte0NyaXRpY2FsaXRpZXN9IH0pIC4gIikgIjsKICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICRTUUwgLj0gJyBPUkRFUiBCWSBuYW1lJzsKCiAgICAjIHNlYXJjaCBzZXJ2aWNlIGluIGRiCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgKTsKCiAgICBteSBAU2VydmljZUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gQFNlcnZpY2VMaXN0Owp9Cgo9aGVhZDIgQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoKQoKcmV0dXJucyBhIGxpc3Qgb2YgY3VzdG9tZXJ1c2VyL3NlcnZpY2UgbWVtYmVycwoKICAgIFNlcnZpY2VJRDogc2VydmljZSBpZAogICAgQ3VzdG9tZXJVc2VyTG9naW46IGN1c3RvbWVyIHVzZXIgbG9naW4KICAgIERlZmF1bHRTZXJ2aWNlczogYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSBkZWZhdWx0IHNlcnZpY2VzCgogICAgUmVzdWx0OiBIQVNIIC0+IHJldHVybnMgYSBoYXNoIG9mIGtleSA9PiBzZXJ2aWNlIGlkLCB2YWx1ZSA9PiBzZXJ2aWNlIG5hbWUKICAgICAgICAgICAgTmFtZSAtPiByZXR1cm5zIGFuIGFycmF5IG9mIHVzZXIgbmFtZXMKICAgICAgICAgICAgSUQgICAtPiByZXR1cm5zIGFuIGFycmF5IG9mIHVzZXIgaWRzCgogICAgRXhhbXBsZSAoZ2V0IHNlcnZpY2VzIG9mIGN1c3RvbWVyIHVzZXIpOgoKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnVGVzdCcsCiAgICAgICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCiAgICApOwoKICAgIEV4YW1wbGUgKGdldCBjdXN0b21lciB1c2VyIG9mIHNlcnZpY2UpOgoKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJElELAogICAgICAgIFJlc3VsdCAgICA9PiAnSEFTSCcsCiAgICApOwoKPWN1dAoKc3ViIEN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtSZXN1bHR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBSZXN1bHQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IChvbmx5IDEgb3IgMCBpcyBhbGxvd2VkIHRvIGNvcnJlY3RseSBzZXQgdGhlIGNhY2hlIGtleSkKICAgIGlmICggIWRlZmluZWQgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gfHwgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gKSB7CiAgICAgICAgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gPSAxOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gPSAwOwogICAgfQoKICAgICMgZ2V0IG9wdGlvbnMgZm9yIGRlZmF1bHQgc2VydmljZXMgZm9yIHVua25vd24gY3VzdG9tZXJzCiAgICBteSAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6U2VydmljZTo6RGVmYXVsdDo6VW5rbm93bkN1c3RvbWVyJyk7CiAgICBpZiAoCiAgICAgICAgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyCiAgICAgICAgJiYgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30KICAgICAgICAmJiAhJFBhcmFte1NlcnZpY2VJRH0KICAgICAgICAmJiAhJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufQogICAgICAgICkKICAgIHsKICAgICAgICAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ID0gJzxERUZBVUxUPic7CiAgICB9CgogICAgIyBjaGVjayBtb3JlIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NlcnZpY2VJRH0gJiYgISRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNlcnZpY2VJRCBvciBDdXN0b21lclVzZXJMb2dpbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIGNhY2hlIGtleQogICAgbXkgJENhY2hlS2V5ID0gJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0OjonIC4gJFBhcmFte1Jlc3VsdH0gLiAnOjonCiAgICAgICAgLiAnRGVmYXVsdFNlcnZpY2VzOjonIC4gJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gLiAnOjonOwogICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAkQ2FjaGVLZXkgLj0gJ1NlcnZpY2VJRDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ICkgewogICAgICAgICRDYWNoZUtleSAuPSAnQ3VzdG9tZXJVc2VyTG9naW46OicgLiAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59OwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgaWYgKCAkUGFyYW17UmVzdWx0fSBlcSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICV7JENhY2hlfSBpZiByZWYgJENhY2hlIGVxICdIQVNIJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiBAeyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnQVJSQVknOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBkYiBxdW90ZQogICAgZm9yICggc29ydCBrZXlzICVQYXJhbSApIHsKICAgICAgICAkUGFyYW17JF99ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFteyRffSApOwogICAgfQogICAgZm9yIChxdyhTZXJ2aWNlSUQpKSB7CiAgICAgICAgJFBhcmFteyRffSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXskX30sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgc3FsCiAgICBteSAlRGF0YTsKICAgIG15IEBEYXRhOwogICAgbXkgJFNRTCA9ICdTRUxFQ1Qgc2N1LnNlcnZpY2VfaWQsIHNjdS5jdXN0b21lcl91c2VyX2xvZ2luLCBzLm5hbWUgJwogICAgICAgIC4gJyBGUk9NICcKICAgICAgICAuICcgc2VydmljZV9jdXN0b21lcl91c2VyIHNjdSwgc2VydmljZSBzJwogICAgICAgIC4gJyBXSEVSRSAnCiAgICAgICAgLiAiIHMudmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSl9ICkgQU5EICIKICAgICAgICAuICcgcy5pZCA9IHNjdS5zZXJ2aWNlX2lkIEFORCAnOwoKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAiIHNjdS5zZXJ2aWNlX2lkID0gJFBhcmFte1NlcnZpY2VJRH0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ICkgewogICAgICAgICRTUUwgLj0gIiBzY3UuY3VzdG9tZXJfdXNlcl9sb2dpbiA9ICckUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59JyI7CiAgICB9CgogICAgJERCT2JqZWN0LT5QcmVwYXJlKCBTUUwgPT4gJFNRTCApOwoKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBteSAkVmFsdWUgPSAnJzsKICAgICAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAkRGF0YXsgJFJvd1sxXSB9ID0gJFJvd1swXTsKICAgICAgICAgICAgJFZhbHVlID0gJFJvd1swXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREYXRheyAkUm93WzBdIH0gPSAkUm93WzJdOwogICAgICAgIH0KICAgIH0KICAgIGlmICgKICAgICAgICAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59CiAgICAgICAgJiYgJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSBuZSAnPERFRkFVTFQ+JwogICAgICAgICYmICRQYXJhbXtEZWZhdWx0U2VydmljZXN9CiAgICAgICAgJiYgIWtleXMoJURhdGEpCiAgICAgICAgKQogICAgewogICAgICAgICVEYXRhID0gJFNlbGYtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgICAgICAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAogICAgICAgICk7CiAgICB9CgogICAgIyByZXR1cm4gcmVzdWx0CiAgICBpZiAoICRQYXJhbXtSZXN1bHR9IGVxICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICAgICApOwogICAgICAgIHJldHVybiAlRGF0YTsKICAgIH0KICAgIGlmICggJFBhcmFte1Jlc3VsdH0gZXEgJ05hbWUnICkgewogICAgICAgIEBEYXRhID0gdmFsdWVzICVEYXRhOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgQERhdGEgPSBrZXlzICVEYXRhOwogICAgfQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxARGF0YSwKICAgICk7CiAgICByZXR1cm4gQERhdGE7Cn0KCj1oZWFkMiBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkKCnRvIGFkZCBhIG1lbWJlciB0byBhIHNlcnZpY2UKCmlmICdBY3RpdmUnIGlzIDAsIHRoZSBjdXN0b21lciBpcyByZW1vdmVkIGZyb20gdGhlIHNlcnZpY2UKCiAgICAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnVGVzdDEnLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+IDYsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VzdG9tZXJVc2VyTG9naW4gU2VydmljZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGRlbGV0ZSBleGlzdGluZyByZWxhdGlvbgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHNlcnZpY2VfY3VzdG9tZXJfdXNlciBXSEVSRSBjdXN0b21lcl91c2VyX2xvZ2luID0gPyBBTkQgc2VydmljZV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSwgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICApOwoKICAgICMgcmV0dXJuIGlmIHJlbGF0aW9uIGlzIG5vdCBhY3RpdmUKICAgIGlmICggISRQYXJhbXtBY3RpdmV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGluc2VydCBuZXcgcmVsYXRpb24KICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2VfY3VzdG9tZXJfdXNlciAnCiAgICAgICAgICAgIC4gJyhjdXN0b21lcl91c2VyX2xvZ2luLCBzZXJ2aWNlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0sIFwkUGFyYW17U2VydmljZUlEfSwgXCRQYXJhbXtVc2VySUR9IF0KICAgICk7CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAkU3VjY2VzczsKfQoKPWhlYWQyIFNlcnZpY2VQcmVmZXJlbmNlc1NldCgpCgpzZXQgc2VydmljZSBwcmVmZXJlbmNlcwoKICAgICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJDb21tZW50JywKICAgICAgICBWYWx1ZSAgICAgPT4gJ3NvbWUgY29tbWVudCcsCiAgICAgICAgVXNlcklEICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZVByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNlcnZpY2VQcmVmZXJlbmNlc1NldCglUGFyYW0pOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgU2VydmljZVByZWZlcmVuY2VzR2V0KCkKCmdldCBzZXJ2aWNlIHByZWZlcmVuY2VzCgogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQcmVmZXJlbmNlc0dldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VQcmVmZXJlbmNlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+U2VydmljZVByZWZlcmVuY2VzR2V0KCVQYXJhbSk7Cn0KCj1oZWFkMiBTZXJ2aWNlUGFyZW50c0dldCgpCgpyZXR1cm4gYW4gb3JkZXJlZCBsaXN0IGFsbCBwYXJlbnQgc2VydmljZSBJRHMgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIGZyb20gdGhlIHJvb3QgcGFyZW50IHRvIHRoZQpjdXJyZW50IHNlcnZpY2UgcGFyZW50CgogICAgbXkgJFNlcnZpY2VQYXJlbnRzTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm5zCgogICAgJFNlcnZpY2VQYXJlbnRzTGlzdCA9IFsgMSwgMiwgLi4uXTsKCj1jdXQKCnN1YiBTZXJ2aWNlUGFyZW50c0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVXNlcklEIFNlcnZpY2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkICROZWVkZWQhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHJlYWQgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdTZXJ2aWNlUGFyZW50c0dldDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmIHJlZiAkQ2FjaGU7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZXMKICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRTZWxmLT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgYSBzZXJ2aWNlIGxvb2t1cCB0YWJsZQogICAgbXkgJVNlcnZpY2VMb29rdXA7CiAgICBTRVJWSUNFOgogICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoIEB7JFNlcnZpY2VMaXN0fSApIHsKICAgICAgICBuZXh0IFNFUlZJQ0UgaWYgISRTZXJ2aWNlRGF0YTsKICAgICAgICBuZXh0IFNFUlZJQ0UgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRTZXJ2aWNlRGF0YSk7CiAgICAgICAgbmV4dCBTRVJWSUNFIGlmICEkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9OwoKICAgICAgICAkU2VydmljZUxvb2t1cHsgJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSB9ID0gJFNlcnZpY2VEYXRhOwogICAgfQoKICAgICMgZXhpdCBpZiBTZXJ2aWNlSUQgaXMgaW52YWxpZAogICAgcmV0dXJuIGlmICEkU2VydmljZUxvb2t1cHsgJFBhcmFte1NlcnZpY2VJRH0gfTsKCiAgICAjIHRvIHN0b3JlIHRoZSByZXR1cm4gc3RydWN0dXJlCiAgICBteSBAU2VydmljZVBhcmVudHM7CgogICAgIyBnZXQgdGhlIFNlcnZpY2VQYXJlbnRJRCBmcm9tIHRoZSByZXF1ZXN0ZWQgc2VydmljZQogICAgbXkgJFNlcnZpY2VQYXJlbnRJRCA9ICRTZXJ2aWNlTG9va3VweyAkUGFyYW17U2VydmljZUlEfSB9LT57UGFyZW50SUR9OwoKICAgICMgZ2V0IGFsbCBwYXJlbnRzIGZvciB0aGUgcmVxdWVzdGVkIHNlcnZpY2UKICAgIHdoaWxlICgkU2VydmljZVBhcmVudElEKSB7CgogICAgICAgICMgYWRkIHNlcnZpY2UgcGFyZW50IElEIHRvIHRoZSByZXR1cm4gc3RydWN0dXJlCiAgICAgICAgcHVzaCBAU2VydmljZVBhcmVudHMsICRTZXJ2aWNlUGFyZW50SUQ7CgogICAgICAgICMgc2V0IG5leHQgU2VydmljZVBhcmVudElEICh0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50IHBhcmVudCkKICAgICAgICAkU2VydmljZVBhcmVudElEID0gJFNlcnZpY2VMb29rdXB7JFNlcnZpY2VQYXJlbnRJRH0tPntQYXJlbnRJRH0gfHwgMDsKCiAgICB9CgogICAgIyByZXZlcnNlIHRoZSByZXR1cm4gYXJyYXkgdG8gZ2V0IHRoZSBsaXN0IG9yZGVyZWQgZnJvbSBvbGQgdG8geW91bmcgKGluIHBhcmVudCBjb250ZXh0KQogICAgbXkgQERhdGEgPSByZXZlcnNlIEBTZXJ2aWNlUGFyZW50czsKCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxARGF0YSwKICAgICk7CgogICAgcmV0dXJuIFxARGF0YTsKfQoKPWhlYWQyIEdldEFsbEN1c3RvbVNlcnZpY2VzKCkKCmdldCBhbGwgY3VzdG9tIHNlcnZpY2VzIG9mIG9uZSB1c2VyCgogICAgbXkgQFNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkdldEFsbEN1c3RvbVNlcnZpY2VzKCBVc2VySUQgPT4gMTIzICk7Cgo9Y3V0CgpzdWIgR2V0QWxsQ3VzdG9tU2VydmljZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdHZXRBbGxDdXN0b21TZXJ2aWNlczo6JyAuICRQYXJhbXtVc2VySUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgcmV0dXJuIEB7JENhY2hlfSBpZiAkQ2FjaGU7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIHNlYXJjaCBhbGwgY3VzdG9tIHNlcnZpY2VzCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1Qgc2VydmljZV9pZAogICAgICAgICAgICBGUk9NIHBlcnNvbmFsX3NlcnZpY2VzCiAgICAgICAgICAgIFdIRVJFIHVzZXJfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQFNlcnZpY2VJRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkUm93WzBdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBTZXJ2aWNlSURzLAogICAgKTsKCiAgICByZXR1cm4gQFNlcnZpY2VJRHM7Cn0KCnN1YiBFeHBvcnRTZXJ2aWNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRVc2VySUQgPSAkU2VsZi0+e1VzZXJJRH0gfHwgJFBhcmFte1VzZXJJRH07CgogICAgbXkgJVNlcnZpY2VGaWx0ZXI7CiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte1NlcnZpY2VzfSApICkgewogICAgICAgICVTZXJ2aWNlRmlsdGVyID0gbWFwIHsgJF8gPT4gMSB9ICRQYXJhbXtTZXJ2aWNlc30tPkAqOwogICAgfQoKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZWxmLT5TZXJ2aWNlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICk7CgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwojICMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMgICAgIG15ICRUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKIyAgICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKIyAgICAgKTsKIyAjIEVPIElUU01Db3JlCiMgRU8gU2VydmljZUNhdGFsb2cKCiAgICBteSAlRXhwb3J0RGF0YTsKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKCiAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlbGYtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoJVNlcnZpY2VGaWx0ZXIpIHsKICAgICAgICAgICAgbmV4dCBTRVJWSUNFSUQgdW5sZXNzICRTZXJ2aWNlRmlsdGVyeyAkU2VydmljZURhdGF7TmFtZX0gfTsKICAgICAgICB9CgogICAgICAgICMgdHJhbnNsYXRlIElEcyBpbnRvIG5hbWVzIG9yIG5hbWUtbGlrZSBpZGVudGlmaWVycwojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgIG15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgICAgIG15ICRUeXBlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7CiMgRU8gU2VydmljZUNhdGFsb2cKICAgICAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICgga2V5cyAlU2VydmljZURhdGEgKSB7CgogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSB1bmxlc3MgJEF0dHJpYnV0ZSA9fiAvSUQvOwoKICAgICAgICAgICAgaWYgKCAkQXR0cmlidXRlIGVxICdQYXJlbnRJRCcgKSB7CiAgICAgICAgICAgICAgICBteSAkUGFyZW50U2VydmljZSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGF7UGFyZW50SUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtQYXJlbnR9ID0gJFBhcmVudFNlcnZpY2U7CiAgICAgICAgICAgICAgICBkZWxldGUgJFNlcnZpY2VEYXRhe1BhcmVudElEfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgZXEgJ1ZhbGlkSUQnICkgewogICAgICAgICAgICAgICAgbXkgJFZhbGlkID0gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCgKICAgICAgICAgICAgICAgICAgICBWYWxpZElEID0+ICRTZXJ2aWNlRGF0YXtWYWxpZElEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7VmFsaWR9ID0gJFZhbGlkOwogICAgICAgICAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtWYWxpZElEfTsKICAgICAgICAgICAgfQojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwojICMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMgICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdUeXBlSUQnICYmIElzSGFzaFJlZldpdGhEYXRhKCRUeXBlTGlzdCkgKSB7CiMgICAgICAgICAgICAgICAgIG15ICRUeXBlID0gJFR5cGVMaXN0LT57JFNlcnZpY2VEYXRhe1R5cGVJRH19OwojICAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7VHlwZX0gPSAkVHlwZTsKIyAgICAgICAgICAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtUeXBlSUR9OwojICAgICAgICAgICAgIH0KIyAjIEVPIElUU01Db3JlCiAgICAgICAgICAgIGVsc2lmICggJEF0dHJpYnV0ZSBlcSAnRGVzdFF1ZXVlSUQnICkgewogICAgICAgICAgICAgICAgbXkgJFF1ZXVlID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEID0+ICRTZXJ2aWNlRGF0YXtEZXN0UXVldWVJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0Rlc3RRdWV1ZX0gPSAkUXVldWU7CiAgICAgICAgICAgICAgICBkZWxldGUgJFNlcnZpY2VEYXRhe0Rlc3RRdWV1ZUlEfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgZXEgJ1RpY2tldFR5cGVJRHMnICkgewogICAgICAgICAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRTZXJ2aWNlRGF0YXtUaWNrZXRUeXBlSURzfSApICkgewogICAgICAgICAgICAgICAgICAgIG15IEBUaWNrZXRUeXBlczsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFRpY2tldFR5cGVJRCAoICRTZXJ2aWNlRGF0YXtUaWNrZXRUeXBlSURzfS0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFRpY2tldFR5cGVzLCAkVHlwZU9iamVjdC0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCA9PiAkVGlja2V0VHlwZUlELAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7VGlja2V0VHlwZXN9ID0gXEBUaWNrZXRUeXBlczsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFNlcnZpY2VEYXRhe1RpY2tldFR5cGVJRHN9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiMgRU8gU2VydmljZUNhdGFsb2cKICAgICAgICB9CgogICAgICAgIGRlbGV0ZSAkU2VydmljZURhdGF7Q2hhbmdlQnl9OwogICAgICAgIGRlbGV0ZSAkU2VydmljZURhdGF7Q2hhbmdlVGltZX07CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX07CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfTsKICAgICAgICBkZWxldGUgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH07CgogICAgICAgICRFeHBvcnREYXRheyAkU2VydmljZURhdGF7TmFtZX0gfSA9IFwlU2VydmljZURhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlRXhwb3J0RGF0YTsKfQoKc3ViIEltcG9ydFNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFVzZXJJRCA9ICRTZWxmLT57VXNlcklEfSB8fCAkUGFyYW17VXNlcklEfTsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICBteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKICAgIG15ICRUeXBlT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKIyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CiAgICBteSAlU2VydmljZUxpc3QgPSAkU2VsZi0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICApOwogICAgbXkgJVNlcnZpY2VMb29rdXAgPSByZXZlcnNlICVTZXJ2aWNlTGlzdDsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiMgIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyAgICAgbXkgJFR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAojICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAojICAgICApOwojCiMgICAgIG15ICVUeXBlTG9va3VwID0gSXNIYXNoUmVmV2l0aERhdGEoJFR5cGVMaXN0KSA/IHJldmVyc2UgJFR5cGVMaXN0LT4lKiA6ICgpOwojICMgRU8gSVRTTUNvcmUKIyBFTyBTZXJ2aWNlQ2F0YWxvZwoKICAgICMgc29ydCBzZXJ2aWNlcyBieSBwYXJlbnQgYXR0cmlidXRlCiAgICBteSBARmlyc3RMZXZlbFNlcnZpY2VzOwogICAgbXkgQENoaWxkU2VydmljZXM7CiAgICBmb3IgbXkgJFNlcnZpY2VOYW1lICgga2V5cyAkUGFyYW17U2VydmljZXN9LT4lKiApIHsKICAgICAgICBpZiAoICRQYXJhbXtTZXJ2aWNlc317JFNlcnZpY2VOYW1lfXtQYXJlbnR9ICkgewogICAgICAgICAgICBwdXNoIEBDaGlsZFNlcnZpY2VzLCAkU2VydmljZU5hbWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwdXNoIEBGaXJzdExldmVsU2VydmljZXMsICRTZXJ2aWNlTmFtZTsKICAgICAgICB9CiAgICB9CiAgICBteSBAQ2hpbGRTZXJ2aWNlc1NvcnRlZCA9IHNvcnQgewogICAgICAgIGlmICggKCAkUGFyYW17U2VydmljZXN9eyRhfXtQYXJlbnR9IC8vICcnICkgZXEgJFBhcmFte1NlcnZpY2VzfXskYn17TmFtZX0gKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICggJFBhcmFte1NlcnZpY2VzfXskYn17UGFyZW50fSAvLyAnJyApIGVxICRQYXJhbXtTZXJ2aWNlc317JGF9e05hbWV9ICkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9IEBDaGlsZFNlcnZpY2VzOwoKICAgIFNFUlZJQ0VOQU1FOgogICAgZm9yIG15ICRTZXJ2aWNlTmFtZSAoIEBGaXJzdExldmVsU2VydmljZXMsIEBDaGlsZFNlcnZpY2VzU29ydGVkICkgewogICAgICAgIG15ICRTZXJ2aWNlRGF0YSA9ICRQYXJhbXtTZXJ2aWNlc317JFNlcnZpY2VOYW1lfTsKCiAgICAgICAgIyBza2lwIGlmIHBhcmVudCBhdHRyaWJ1dGUgcHJlc2VudCBidXQgbm8gY29ycmVzcG9uZGluZyBzZXJ2aWNlCiAgICAgICAgaWYgKCAkU2VydmljZURhdGEtPntQYXJlbnR9ICkgewogICAgICAgICAgICBteSAkUGFyZW50U2VydmljZUlEID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICBOYW1lID0+ICRTZXJ2aWNlRGF0YS0+e1BhcmVudH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFNFUlZJQ0VOQU1FIHVubGVzcyAkUGFyZW50U2VydmljZUlEOwoKICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT57UGFyZW50SUR9ID0gJFBhcmVudFNlcnZpY2VJRDsKICAgICAgICB9CgogICAgICAgICMgaW4gY2FzZSBvZiBjaGlsZCBzZXJ2aWNlLCBjaGVjayBpZiBhbGwgcGFyZW50IHNlcnZpY2VzIGFyZSBwcmVzZW50CiAgICAgICAgIyAgIGVpdGhlciBpbiB0aGUgc3lzdGVtIG9yIGluIHRoZSBpbXBvcnQgZGF0YQogICAgICAgIG15IEBOYW1lRWxlbWVudHMgPSBzcGxpdCggLzo6LywgJFNlcnZpY2VEYXRhLT57TmFtZX0gKTsKICAgICAgICBpZiAoIHNjYWxhciBATmFtZUVsZW1lbnRzID4gMSApIHsKICAgICAgICAgICAgbXkgJE5hbWVTdHJnID0gJyc7CiAgICAgICAgICAgIGZvciBteSAkSW5kZXggKCAwIC4uICQjTmFtZUVsZW1lbnRzIC0gMSApIHsKICAgICAgICAgICAgICAgIGlmICgkTmFtZVN0cmcpIHsKICAgICAgICAgICAgICAgICAgICAkTmFtZVN0cmcgLj0gJzo6JyAuICROYW1lRWxlbWVudHNbJEluZGV4XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICROYW1lU3RyZyAuPSAkTmFtZUVsZW1lbnRzWyRJbmRleF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJFNlcnZpY2VMb29rdXB7JE5hbWVTdHJnfSAmJiAhJFBhcmFte1NlcnZpY2VzfXskTmFtZVN0cmd9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHBhcmVudCBlbGVtZW50IG5vdCBmb3VuZCwgc2tpcHBpbmcKICAgICAgICAgICAgICAgICAgICBuZXh0IFNFUlZJQ0VOQU1FOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VMb29rdXB7ICRTZXJ2aWNlRGF0YS0+e05hbWV9IH07CgogICAgICAgICMgc2tpcCBpZiBzZXJ2aWNlIHdpdGggc2FtZSBuYW1lIGV4aXN0cyBhbmQgb3ZlcndyaXRlIGlzIG5vdCBzZXQKICAgICAgICBuZXh0IFNFUlZJQ0VOQU1FIGlmICggISRQYXJhbXtPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzfSAmJiAkU2VydmljZUlEICk7CgogICAgICAgICMgdHJhbnNsYXRlIG5hbWVkIGRhdGEgYmFjayB0byBJRHMKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKIyAjIFJvdGhlciBPU1MgLyBJVFNNQ29yZQojICAgICAgICAgaWYgKCAkU2VydmljZURhdGEtPntUeXBlfSApIHsKIyAgICAgICAgICAgICAkU2VydmljZURhdGEtPntUeXBlSUR9ID0gJFR5cGVMb29rdXB7JFNlcnZpY2VEYXRhLT57VHlwZX19OwojICAgICAgICAgfQojICMgRU8gSVRTTUNvcmUKICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YS0+e0Rlc3RRdWV1ZX0gKSB7CiAgICAgICAgICAgICRTZXJ2aWNlRGF0YS0+e0Rlc3RRdWV1ZUlEfSA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoCiAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkU2VydmljZURhdGEtPntEZXN0UXVldWV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFNlcnZpY2VEYXRhLT57VGlja2V0VHlwZXN9ICkgKSB7CiAgICAgICAgICAgIG15IEBUaWNrZXRUeXBlSURzOwogICAgICAgICAgICBmb3IgbXkgJFRpY2tldFR5cGUgKCAkU2VydmljZURhdGEtPntUaWNrZXRUeXBlc30tPkAqICkgewogICAgICAgICAgICAgICAgcHVzaCBAVGlja2V0VHlwZUlEcywgJFR5cGVPYmplY3QtPlR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAkVGlja2V0VHlwZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT57VGlja2V0VHlwZUlEc30gPSBcQFRpY2tldFR5cGVJRHM7CiAgICAgICAgfQojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgJFNlcnZpY2VEYXRhLT57VmFsaWRJRH0gPSAkVmFsaWRPYmplY3QtPlZhbGlkTG9va3VwKAogICAgICAgICAgICBWYWxpZCA9PiAkU2VydmljZURhdGEtPntWYWxpZH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRTZXJ2aWNlSUQpIHsKCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICAgICAkU2VydmljZURhdGEtPiUqLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlRGF0YS0+e05hbWVTaG9ydH0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkVXNlcklELAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZWxmLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT4lKiwKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZURhdGEtPntOYW1lU2hvcnR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgJFNlcnZpY2VJRDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKCj1oZWFkMiBfU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKCkKClJldHVybnMgYSBoYXNoIHdpdGggdGhlIG9yaWdpbmFsIHNlcnZpY2UgZGF0YSwKZW5oYW5jZWQgd2l0aCBhZGRpdGlvbmFsIHNlcnZpY2UgZGF0YSBhYm91dCB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwKYmFzZWQgb24gY29uZmlndXJhdGlvbiBpdGVtcyBhbmQgb3RoZXIgc2VydmljZXMuCgogICAgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiBcJVByZWZlcmVuY2VzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZURhdGEgUHJlZmVyZW5jZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZURhdGEgUHJlZmVyZW5jZXMpKSB7CiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0hBU0gnICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFyZ3VtZW50IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbWFrZSBsb2NhbCBjb3BpZXMKICAgIG15ICVTZXJ2aWNlRGF0YSA9ICV7ICRQYXJhbXtTZXJ2aWNlRGF0YX0gfTsKICAgIG15ICVQcmVmZXJlbmNlcyA9ICV7ICRQYXJhbXtQcmVmZXJlbmNlc30gfTsKCiAgICAjIGdldCBzZXJ2aWNlIHR5cGUgbGlzdAogICAgbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICApOwogICAgaWYgKCAkU2VydmljZURhdGF7VHlwZUlEfSApIHsKICAgICAgICAkU2VydmljZURhdGF7VHlwZX0gPSAkU2VydmljZVR5cGVMaXN0LT57ICRTZXJ2aWNlRGF0YXtUeXBlSUR9IH0gfHwgJyc7CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZSB0eXBlCiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAnb3BlcmF0aW9uYWwnOwoKICAgICMgZ2V0IElUU00gbW9kdWxlIGRpcmVjdG9yeQogICAgbXkgJENvbmZpZ0l0ZW1Nb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0hvbWUnKSAuICcvS2VybmVsL1N5c3RlbS9JVFNNQ29uZmlnSXRlbS5wbSc7CgogICAgIyBjaGVjayBpZiBJVFNNQ29uZmlndXJhdGlvbk1hbmFnZW1lbnQgcGFja2FnZSBpcyBpbnN0YWxsZWQKICAgIGlmICggLWUgJENvbmZpZ0l0ZW1Nb2R1bGUgKSB7CgogICAgICAgICMgY2hlY2sgaWYgYSBwcmVmZXJlbmNlIHNldHRpbmcgZm9yIEN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzIGV4aXN0cwogICAgICAgIGlmICggJFByZWZlcmVuY2Vze0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzfSApIHsKCiAgICAgICAgICAgICMgc2V0IGRlZmF1bHQgaW5jaWRlbnQgc3RhdGUgdHlwZSBmcm9tIHNlcnZpY2UgcHJlZmVyZW5jZXMgJ0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzJwogICAgICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAkUHJlZmVyZW5jZXN7Q3VySW5jaVN0YXRlVHlwZUZyb21DSXN9OwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgdGhlIHByZWZlcmVuY2VzIHNldHRpbmcgZm9yIEN1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGdldCBpbmNpZGVudCBsaW5rIHR5cGVzIGFuZCBkaXJlY3Rpb25zIGZyb20gY29uZmlnCiAgICAgICAgICAgIG15ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNOjpDb3JlOjpJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uJyk7CgogICAgICAgICAgICAjIHRvIHN0b3JlIGFsbCBsaW5rZWQgY29uZmlnIGl0ZW0gaWRzIG9mIHRoaXMgc2VydmljZSAoZm9yIGFsbCBjb25maWd1cmVkIGxpbmsgdHlwZXMpCiAgICAgICAgICAgIG15ICVBbGxMaW5rZWRDb25maWdJdGVtSURzOwoKICAgICAgICAgICAgTElOS1RZUEU6CiAgICAgICAgICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgZGlyZWN0aW9uCiAgICAgICAgICAgICAgICBteSAkTGlua0RpcmVjdGlvbiA9ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uLT57JExpbmtUeXBlfTsKCiAgICAgICAgICAgICAgICAjIHJldmVyc2UgdGhlIGxpbmsgZGlyZWN0aW9uLCBhcyB0aGlzIGlzIHRoZSBwZXJzcGVjdGl2ZSBmcm9tIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICAgICAjIG5vIG5lZWQgdG8gcmV2ZXJzZSBpZiBkaXJlY3Rpb24gaXMgJ0JvdGgnCiAgICAgICAgICAgICAgICBpZiAoICRMaW5rRGlyZWN0aW9uIGVxICdTb3VyY2UnICkgewogICAgICAgICAgICAgICAgICAgICRMaW5rRGlyZWN0aW9uID0gJ1RhcmdldCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRMaW5rRGlyZWN0aW9uIGVxICdUYXJnZXQnICkgewogICAgICAgICAgICAgICAgICAgICRMaW5rRGlyZWN0aW9uID0gJ1NvdXJjZSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBmaW5kIGFsbCBsaW5rZWQgY29uZmlnIGl0ZW1zIHdpdGggdGhpcyBsaW5rdHlwZSBhbmQgZGlyZWN0aW9uCiAgICAgICAgICAgICAgICBteSAlTGlua2VkQ29uZmlnSXRlbUlEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtLZXlMaXN0V2l0aERhdGEoCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0MSAgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgICAgICAgICBLZXkxICAgICAgPT4gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0MiAgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICRMaW5rVHlwZSwKICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb24gPT4gJExpbmtEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdGhlIGxpbmtlZCBjb25maWcgaXRlbXMKICAgICAgICAgICAgICAgICVBbGxMaW5rZWRDb25maWdJdGVtSURzID0gKCAlQWxsTGlua2VkQ29uZmlnSXRlbUlEcywgJUxpbmtlZENvbmZpZ0l0ZW1JRHMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGludmVzdGlnYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIG9mIGVhY2ggY29uZmlnIGl0ZW0KICAgICAgICAgICAgQ09ORklHSVRFTUlEOgogICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIHNvcnQga2V5cyAlQWxsTGlua2VkQ29uZmlnSXRlbUlEcyApIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgY29uZmlnIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgbXkgJENvbmZpZ0l0ZW1EYXRhID0gJEFsbExpbmtlZENvbmZpZ0l0ZW1JRHN7JENvbmZpZ0l0ZW1JRH07CgogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJENvbmZpZ0l0ZW1EYXRhLT57Q3VyRGVwbFN0YXRlVHlwZX0gbmUgJ3Byb2R1Y3RpdmUnOwogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQgaWYgJENvbmZpZ0l0ZW1EYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ29wZXJhdGlvbmFsJzsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgbXVzdCBiZSBzZXQgdG8gJ3dhcm5pbmcnCiAgICAgICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICd3YXJuaW5nJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAnd2FybmluZyc7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIG11c3QgYmUgc2V0IHRvICdpbmNpZGVudCcKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW1EYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ2luY2lkZW50JyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAnaW5jaWRlbnQnOwogICAgICAgICAgICAgICAgICAgIGxhc3QgQ09ORklHSVRFTUlEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVwZGF0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSB0eXBlIGZyb20gQ0lzIG9mIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICRTZWxmLT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJ0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzJywKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IHRoZSBwcmVmZXJlbmNlcyBsb2NhbGx5CiAgICAgICAgICAgICRQcmVmZXJlbmNlc3tDdXJJbmNpU3RhdGVUeXBlRnJvbUNJc30gPSAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX07CiAgICAgICAgfQogICAgfQoKICAgICMgaW52ZXN0aWdhdGUgdGhlIHN0YXRlIG9mIGFsbCBjaGlsZCBzZXJ2aWNlcwogICAgaWYgKCAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ29wZXJhdGlvbmFsJyApIHsKCiAgICAgICAgIyBjcmVhdGUgdGhlIHZhbGlkIHN0cmluZwogICAgICAgIG15ICRWYWxpZElEU3RyaW5nID0gam9pbiBxeywgfSwgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CgogICAgICAgICMgcHJlcGFyZSBuYW1lCiAgICAgICAgbXkgJE5hbWUgPSAkU2VydmljZURhdGF7TmFtZX07CiAgICAgICAgJE5hbWUgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICROYW1lLCAnTGlrZScgKTsKCiAgICAgICAgIyBnZXQgbGlzdCBvZiBhbGwgdmFsaWQgY2hpbGRzCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBuYW1lIEZST00gc2VydmljZSAiCiAgICAgICAgICAgICAgICAuICJXSEVSRSBuYW1lIExJS0UgJyIgLiAkTmFtZSAuICI6OiUnICIKICAgICAgICAgICAgICAgIC4gIkFORCB2YWxpZF9pZCBJTiAoIiAuICRWYWxpZElEU3RyaW5nIC4gIikiLAogICAgICAgICk7CgogICAgICAgICMgZmluZCBsZW5ndGggb2YgY2hpbGRzIHByZWZpeAogICAgICAgIG15ICRQcmVmaXhMZW5ndGggPSBsZW5ndGggIiRTZXJ2aWNlRGF0YXtOYW1lfTo6IjsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgQENoaWxkSURzOwogICAgICAgIFJPVzoKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGNoaWxkIHBhcnQKICAgICAgICAgICAgbXkgJENoaWxkUGFydCA9IHN1YnN0ciAkUm93WzFdLCAkUHJlZml4TGVuZ3RoOwoKICAgICAgICAgICAgbmV4dCBST1cgaWYgJENoaWxkUGFydCA9fiBteyA6OiB9eG1zOwoKICAgICAgICAgICAgcHVzaCBAQ2hpbGRJRHMsICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICBTRVJWSUNFSUQ6CiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBAQ2hpbGRJRHMgKSB7CgogICAgICAgICAgICAjIGdldCBkYXRhIG9mIGNoaWxkIHNlcnZpY2UKICAgICAgICAgICAgbXkgJUNoaWxkU2VydmljZURhdGEgPSAkU2VsZi0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFNFUlZJQ0VJRCBpZiAkQ2hpbGRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnOwoKICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJ3dhcm5pbmcnOwogICAgICAgICAgICBsYXN0IFNFUlZJQ0VJRDsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWZpbmUgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZXMKICAgIG15ICVEZWZhdWx0SW5jaVN0YXRlcyA9ICgKICAgICAgICBvcGVyYXRpb25hbCA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICdXYXJuaW5nJywKICAgICAgICBpbmNpZGVudCAgICA9PiAnSW5jaWRlbnQnLAogICAgKTsKCiAgICAjIGdldCB0aGUgaW5jaWRlbnQgc3RhdGUgbGlzdCBvZiB0aGlzIHR5cGUKICAgIG15ICRJbmNpU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgIFByZWZlcmVuY2VzICAgPT4gewogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAlUmV2ZXJzZUluY2lTdGF0ZUxpc3QgPSByZXZlcnNlICV7ICRJbmNpU3RhdGVMaXN0IH07CiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlSUR9CiAgICAgICAgPSAkUmV2ZXJzZUluY2lTdGF0ZUxpc3R7ICREZWZhdWx0SW5jaVN0YXRlc3sgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9IH0gfTsKCiAgICAjIGZhbGxiYWNrIGlmIHRoZSBkZWZhdWx0IGluY2lkZW50IHN0YXRlIGlzIGRlYWN0aXZhdGVkCiAgICBpZiAoICEkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlSUR9ICkgewogICAgICAgIG15IEBTb3J0ZWRJbmNpTGlzdCA9IHNvcnQga2V5cyAleyAkSW5jaVN0YXRlTGlzdCB9OwogICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0gPSAkU29ydGVkSW5jaUxpc3RbMF07CiAgICB9CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgZnVuY3Rpb25hbGl0eQogICAgbXkgJEluY2lTdGF0ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgIEl0ZW1JRCA9PiAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlSUR9LAogICAgKTsKCiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlfSAgICAgPSAkSW5jaVN0YXRlLT57TmFtZX07CiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAkSW5jaVN0YXRlLT57RnVuY3Rpb25hbGl0eX1bMF0gLy8gJyc7CgogICAgJVNlcnZpY2VEYXRhID0gKCVTZXJ2aWNlRGF0YSwgJVByZWZlcmVuY2VzKTsKCiAgICByZXR1cm4gJVNlcnZpY2VEYXRhOwp9CgojIEVPIElUU01Db3JlCgojIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwoKPWhlYWQyIEF0dGFjaG1lbnRBZGQoKQoKYWRkIGFydGljbGUgYXR0YWNobWVudHMsIHJldHVybnMgdGhlIGF0dGFjaG1lbnQgaWQKCiAgICBteSAkQXR0YWNobWVudElEID0gJFNlcnZpY2VPYmplY3QtPkF0dGFjaG1lbnRBZGQoCiAgICAgICAgU2VydmljZUlEICAgPT4gJDEyMywKICAgICAgICBGaWxlTmFtZSAgICA9PiAnRjxpbWFnZS5wbmc+JywKICAgICAgICBDb250ZW50U2l6ZSA9PiAnMTIzJywKICAgICAgICBDb250ZW50VHlwZSA9PiAnaW1hZ2UvcG5nOycsCiAgICAgICAgQ29udGVudCAgICAgPT4gJENvbnRlbnQsCiAgICAgICAgSW5saW5lICAgICAgPT4gMSwgICAoMHwxLCBkZWZhdWx0IDApCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRBdHRhY2htZW50SUQgPSAxMjMgOyAgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgY2FuJ3QgYWRkIHRoZSBhdHRhY2htZW50Cgo9Y3V0CgpzdWIgQXR0YWNobWVudEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VJRCBGaWxlTmFtZSBDb250ZW50U2l6ZSBDb250ZW50VHlwZSBDb250ZW50IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQKICAgICRQYXJhbXtJbmxpbmV9IHx8PSAwOwoKICAgICMgZ2V0IGFsbCBleGlzdGluZyBhdHRhY2htZW50cwogICAgbXkgQEluZGV4ID0gJFNlbGYtPkF0dGFjaG1lbnRJbmRleCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZmlsZW5hbWUKICAgIG15ICROZXdGaWxlTmFtZSA9ICRQYXJhbXtGaWxlTmFtZX07CgogICAgIyBidWlsZCBhIGxvb2t1cCBoYXNoIG9mIGFsbCBleGlzdGluZyBmaWxlIG5hbWVzCiAgICBteSAlVXNlZEZpbGU7CiAgICBmb3IgbXkgJEZpbGUgKEBJbmRleCkgewogICAgICAgIGlmICggJEZpbGUtPntGaWxlTmFtZX0gKSB7CiAgICAgICAgICAgICRVc2VkRmlsZXsgJEZpbGUtPntGaWxlTmFtZX0gfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgdHJ5IHRvIG1vZGlmeSB0aGUgdGhlIGZpbGUgbmFtZSBieSBhZGRpbmcgYSBudW1iZXIgaWYgaXQgZXhpc3RzIGFscmVhZHkKICAgIG15ICRDb3VudCA9IDA7CiAgICB3aGlsZSAoICRDb3VudCA8IDUwICkgewoKICAgICAgICAjIGluY3JlYXNlIGNvdW50ZXIKICAgICAgICAkQ291bnQrKzsKCiAgICAgICAgIyBpZiB0aGUgZmlsZSBuYW1lIGV4aXN0cwogICAgICAgIGlmICggZXhpc3RzICRVc2VkRmlsZXskTmV3RmlsZU5hbWV9ICkgewoKICAgICAgICAgICAgIyBmaWxlbmFtZSBoYXMgYSBmaWxlIG5hbWUgZXh0ZW5zaW9uCiAgICAgICAgICAgIGlmICggJFBhcmFte0ZpbGVOYW1lfSA9fiBteyBcQSAoLiopIFwuICguKz8pIFx6IH14bXMgKSB7CiAgICAgICAgICAgICAgICAkTmV3RmlsZU5hbWUgPSAiJDEtJENvdW50LiQyIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICROZXdGaWxlTmFtZSA9ICIkUGFyYW17RmlsZU5hbWV9LSRDb3VudCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBzdG9yZSB0aGUgbmV3IGZpbGVuYW1lCiAgICAkUGFyYW17RmlsZU5hbWV9ID0gJE5ld0ZpbGVOYW1lOwoKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZW5jb2RlIGF0dGFjaG1lbnQgaWYgaXQncyBhIHBvc3RncmVzcWwgYmFja2VuZAogICAgbXkgJUV4dHJhRG9QYXJhbXM7CiAgICBpZiAoICREQk9iamVjdC0+R2V0RGF0YWJhc2VGdW5jdGlvbignRGlyZWN0QmxvYicpICkgewoKICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb250ZW50IGlzIHBhc3NlZCBhcyBhIGJ5dGUgYXJyYXkgYW5kIGlzIGJvdW5kIGFzIGJpbmFyeQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnKS0+RW5jb2RlT3V0cHV0KCBcJFBhcmFte0NvbnRlbnR9ICk7CiAgICAgICAgJEV4dHJhRG9QYXJhbXN7QmluZEFzQmluYXJ5fSA9IFsgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgXTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJyktPkVuY29kZU91dHB1dCggXCRQYXJhbXtDb250ZW50fSApOwogICAgICAgICRQYXJhbXtDb250ZW50fSA9IE1JTUU6OkJhc2U2NDo6ZW5jb2RlX2Jhc2U2NCggJFBhcmFte0NvbnRlbnR9ICk7CiAgICB9CgogICAgIyB3cml0ZSBhdHRhY2htZW50IHRvIGRiCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2F0dGFjaG1lbnQgJyAuCiAgICAgICAgICAgICcgKHNlcnZpY2VfaWQsIGZpbGVuYW1lLCBjb250ZW50X3NpemUsIGNvbnRlbnRfdHlwZSwgY29udGVudCwgaW5saW5lYXR0YWNobWVudCwgJyAuCiAgICAgICAgICAgICcgY3JlYXRlZCwgY3JlYXRlZF9ieSwgY2hhbmdlZCwgY2hhbmdlZF9ieSkgVkFMVUVTICcgLgogICAgICAgICAgICAnICg/LCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte0ZpbGVOYW1lfSwgXCRQYXJhbXtDb250ZW50U2l6ZX0sIFwkUGFyYW17Q29udGVudFR5cGV9LAogICAgICAgICAgICBcJFBhcmFte0NvbnRlbnR9LCBcJFBhcmFte0lubGluZX0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtVc2VySUR9LAogICAgICAgIF0sCiAgICAgICAgJUV4dHJhRG9QYXJhbXMsCiAgICApOwoKICAgICMgZ2V0IHRoZSBhdHRhY2htZW50IGlkCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCAnCiAgICAgICAgICAgIC4gJ0ZST00gc2VydmljZV9hdHRhY2htZW50ICcKICAgICAgICAgICAgLiAnV0hFUkUgc2VydmljZV9pZCA9ID8gQU5EIGZpbGVuYW1lID0gPyAnCiAgICAgICAgICAgIC4gJ0FORCBjb250ZW50X3NpemUgPSA/IEFORCAgY29udGVudF90eXBlID0gPyAnCiAgICAgICAgICAgIC4gJ0FORCBpbmxpbmVhdHRhY2htZW50ID0gPyAnCiAgICAgICAgICAgIC4gJ0FORCBjcmVhdGVkX2J5ID0gPyBBTkQgY2hhbmdlZF9ieSA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte1NlcnZpY2VJRH0sIFwkUGFyYW17RmlsZU5hbWV9LCBcJFBhcmFte0NvbnRlbnRTaXplfSwgXCRQYXJhbXtDb250ZW50VHlwZX0sCiAgICAgICAgICAgIFwkUGFyYW17SW5saW5lfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkQXR0YWNobWVudElEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEF0dGFjaG1lbnRJRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRBdHRhY2htZW50SUQ7Cn0KCj1oZWFkMiBTZXJ2aWNlSW5saW5lQXR0YWNobWVudFVSTFVwZGF0ZSgpCgpVcGRhdGVzIHRoZSBVUkxzIG9mIHVwbG9hZGVkIGlubGluZSBhdHRhY2htZW50cy4KCiAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlSW5saW5lQXR0YWNobWVudFVSTFVwZGF0ZSgKICAgICAgICBTZXJ2aWNlSUQgID0+IDEyLAogICAgICAgIEZvcm1JRCAgICAgPT4gNDU2LAogICAgICAgIEZpbGVJRCAgICAgPT4gNSwKICAgICAgICBBdHRhY2htZW50ID0+IFwlQXR0YWNobWVudCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICAkU3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgIyBvZiB1bmRlZiBpZiBhdHRhY2htZW50IFVSTCBjb3VsZCBub3QgYmUgdXBkYXRlZAoKPWN1dAoKc3ViIFNlcnZpY2VJbmxpbmVBdHRhY2htZW50VVJMVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEF0dGFjaG1lbnQgRm9ybUlEIEZpbGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGF0dGFjaG1lbnQgaXMgYSBoYXNoIHJlZmVyZW5jZQogICAgaWYgKCByZWYgJFBhcmFte0F0dGFjaG1lbnR9IG5lICdIQVNIJyAmJiAhJXsgJFBhcmFte0F0dGFjaG1lbnR9IH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBdHRhY2htZW50IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgY29uc2lkZXIgaW5saW5lIGF0dGFjaG1lbnRzIGhlcmUgKHRoZXkgaGF2ZSBhIGNvbnRlbnQgaWQpCiAgICByZXR1cm4gMSBpZiAhJFBhcmFte0F0dGFjaG1lbnR9LT57Q29udGVudElEfTsKCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VsZi0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgcGljdHVyZSBVUkwgaW4gdXBsb2FkIGNhY2hlCiAgICBteSAkU2VhcmNoID0gIkFjdGlvbj1QaWN0dXJlVXBsb2FkIC4gRm9ybUlEPVxRJFBhcmFte0Zvcm1JRH1cRSAuICIKICAgICAgICAuICJDb250ZW50SUQ9XFEkUGFyYW17QXR0YWNobWVudH0tPntDb250ZW50SUR9XEUiOwoKICAgICMgcGljdHVyZSBVUkwgaW4gU2VydmljZSBhdHRhY2htZW50CiAgICBteSAkUmVwbGFjZSA9ICJBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDsiCiAgICAgICAgLiAiU2VydmljZUlEPSRQYXJhbXtTZXJ2aWNlSUR9O0ZpbGVJRD0kUGFyYW17RmlsZUlEfSI7CgogICAgIyByZXdyaXRlIHBpY3R1cmUgVVJMcwogICAgZm9yIG15ICRMYW5ndWFnZUlEICgga2V5cyAleyRTZXJ2aWNlRGF0YXtEZXNjcmlwdGlvbnN9fSApIHsKICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YXtEZXNjcmlwdGlvbnN9LT57JExhbmd1YWdlSUR9LT57RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAgICAgIyByZXBsYWNlIFVSTAogICAgICAgICAgICAkU2VydmljZURhdGF7RGVzY3JpcHRpb25zfS0+eyRMYW5ndWFnZUlEfS0+e0Rlc2NyaXB0aW9uTG9uZ30gPX4gc3skU2VhcmNofXskUmVwbGFjZX14bXM7CiAgICAgICAgfQogICAgfQoKICAgICMgQ3V0IG9mZiBzdWIgc2VydmljZXMgZnJvbSBzZXJ2aWNlIG5hbWUKICAgICRTZXJ2aWNlRGF0YXtOYW1lfSA9IChzcGxpdCAvOjovLCAkU2VydmljZURhdGF7TmFtZX0pWy0xXTsKCiAgICAjIHVwZGF0ZSBzZXJ2aWNlCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICVTZXJ2aWNlRGF0YSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgdXBkYXRlIHdhcyBzdWNjZXNzZnVsCiAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCB1cGRhdGUgU2VydmljZUlEJyRQYXJhbXtTZXJ2aWNlSUR9JyEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIEF0dGFjaG1lbnRHZXQoKQoKZ2V0IGF0dGFjaG1lbnQgb2Ygc2VydmljZSBJRAoKICAgIG15ICVGaWxlID0gJFNlcnZpY2VPYmplY3QtPkF0dGFjaG1lbnRHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBGaWxlSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICVGaWxlID0gKAogICAgICAgIEZpbGVzaXplICAgID0+ICc1NDAyODYnLCAgICAgICAgICAgICAgICAjIGZpbGUgc2l6ZSBpbiBieXRlcwogICAgICAgIENvbnRlbnRUeXBlID0+ICdpbWFnZS9qcGVnJywKICAgICAgICBGaWxlbmFtZSAgICA9PiAnRjxFcnJvci5qcGc+JywKICAgICAgICBDb250ZW50ICAgICA9PiAnLi4uJyAgICAgICAgICAgICAgICAgICAgIyBmaWxlIGJpbmFyeSBjb250ZW50CiAgICApOwoKPWN1dAoKc3ViIEF0dGFjaG1lbnRHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgRmlsZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgZmlsZW5hbWUsIGNvbnRlbnRfdHlwZSwgY29udGVudF9zaXplLCBjb250ZW50ICcKICAgICAgICAgICAgLiAnRlJPTSBzZXJ2aWNlX2F0dGFjaG1lbnQgJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8gQU5EIHNlcnZpY2VfaWQgPSA/ICcKICAgICAgICAgICAgLiAnT1JERVIgQlkgY3JlYXRlZCcsCiAgICAgICAgQmluZCAgID0+IFsgXCRQYXJhbXtGaWxlSUR9LCBcJFBhcmFte1NlcnZpY2VJRH0gXSwKICAgICAgICBFbmNvZGUgPT4gWyAxLCAxLCAxLCAwIF0sCiAgICAgICAgTGltaXQgID0+IDEsCiAgICApOwoKICAgIG15ICVGaWxlOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgICMgZGVjb2RlIGF0dGFjaG1lbnQgaWYgaXQncyBhIHBvc3RncmVzcWwgYmFja2VuZCBhbmQgbm90IEJMT0IKICAgICAgICBpZiAoICEkREJPYmplY3QtPkdldERhdGFiYXNlRnVuY3Rpb24oJ0RpcmVjdEJsb2InKSApIHsKICAgICAgICAgICAgJFJvd1szXSA9IE1JTUU6OkJhc2U2NDo6ZGVjb2RlX2Jhc2U2NCggJFJvd1szXSApOwogICAgICAgIH0KCiAgICAgICAgJEZpbGV7RmlsZW5hbWV9ICAgID0gJFJvd1swXTsKICAgICAgICAkRmlsZXtDb250ZW50VHlwZX0gPSAkUm93WzFdOwogICAgICAgICRGaWxle0ZpbGVzaXplfSAgICA9ICRSb3dbMl07CiAgICAgICAgJEZpbGV7Q29udGVudH0gICAgID0gJFJvd1szXTsKICAgIH0KCiAgICByZXR1cm4gJUZpbGU7Cn0KCj1oZWFkMiBBdHRhY2htZW50SW5kZXgoKQoKcmV0dXJuIGFuIGF0dGFjaG1lbnQgaW5kZXggb2YgYW4gc2VydmljZSBpZAoKICAgIG15IEBJbmRleCA9ICRTZXJ2aWNlT2JqZWN0LT5BdHRhY2htZW50SW5kZXgoCiAgICAgICAgU2VydmljZUlEICA9PiAxMjMsCiAgICAgICAgU2hvd0lubGluZSA9PiAwLCAgICggMHwxLCBkZWZhdWx0IDEpCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgQEluZGV4ID0gKAogICAgICAgIHsKICAgICAgICAgICAgRmlsZXNpemUgICAgPT4gJzUyNy42IEtCeXRlcycsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ0Y8RXJyb3IuanBnPicsCiAgICAgICAgICAgIEZpbGVzaXplUmF3ID0+IDU0MDI4NiwKICAgICAgICAgICAgRmlsZUlEICAgICAgPT4gNiwKICAgICAgICAgICAgSW5saW5lICAgICAgPT4gMCwKICAgICAgICB9LAogICAgICAgIHssCiAgICAgICAgICAgIEZpbGVzaXplID0+ICc0MzAuMCBLQnl0ZXMnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnaW1hZ2UvanBlZycsCiAgICAgICAgICAgIEZpbGVuYW1lID0+ICdGPFNvbHV0aW9uLmpwZz4nLAogICAgICAgICAgICBGaWxlc2l6ZVJhdyA9PiA0NDAyODYsCiAgICAgICAgICAgIEZpbGVJRCA9PiA1LAogICAgICAgICAgICBJbmxpbmUgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmlsZXNpemUgPT4gJzI5NiBCeXRlcycsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJ0Y8QWRkaXRpb25hbENvbW1lbnRzLnR4dD4nLAogICAgICAgICAgICBGaWxlc2l6ZVJhdyA9PiAyOTYsCiAgICAgICAgICAgIEZpbGVJRCA9PiA3LAogICAgICAgICAgICBJbmxpbmUgPT4gMCwKICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBBdHRhY2htZW50SW5kZXggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgZmlsZW5hbWUsIGNvbnRlbnRfdHlwZSwgY29udGVudF9zaXplLCBpbmxpbmVhdHRhY2htZW50ICcKICAgICAgICAgICAgLiAnRlJPTSBzZXJ2aWNlX2F0dGFjaG1lbnQgJwogICAgICAgICAgICAuICdXSEVSRSBzZXJ2aWNlX2lkID0gPyAnCiAgICAgICAgICAgIC4gJ09SREVSIEJZIGZpbGVuYW1lJywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEwMCwKICAgICk7CgogICAgbXkgQEluZGV4OwogICAgQVRUQUNITUVOVDoKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBteSAkSUQgICAgICAgICAgPSAkUm93WzBdOwogICAgICAgIG15ICRGaWxlbmFtZSAgICA9ICRSb3dbMV07CiAgICAgICAgbXkgJENvbnRlbnRUeXBlID0gJFJvd1syXTsKICAgICAgICBteSAkRmlsZXNpemUgICAgPSAkUm93WzNdOwogICAgICAgIG15ICRJbmxpbmUgICAgICA9ICRSb3dbNF07CgogICAgICAgICMgZG8gbm90IHNob3cgaW5saW5lIGF0dGFjaG1lbnRzCiAgICAgICAgaWYgKCBkZWZpbmVkICRQYXJhbXtTaG93SW5saW5lfSAmJiAhJFBhcmFte1Nob3dJbmxpbmV9ICYmICRJbmxpbmUgKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgICMgY29udmVydCB0byBodW1hbiByZWFkYWJsZSBmaWxlIHNpemUKICAgICAgICBteSAkRmlsZVNpemVSYXcgPSAkRmlsZXNpemU7CiAgICAgICAgaWYgKCRGaWxlc2l6ZSkgewogICAgICAgICAgICBpZiAoICRGaWxlc2l6ZSA+ICggMTAyNCAqIDEwMjQgKSApIHsKICAgICAgICAgICAgICAgICRGaWxlc2l6ZSA9IHNwcmludGYgIiUuMWYgTUJ5dGVzIiwgKCAkRmlsZXNpemUgLyAoIDEwMjQgKiAxMDI0ICkgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRGaWxlc2l6ZSA+IDEwMjQgKSB7CiAgICAgICAgICAgICAgICAkRmlsZXNpemUgPSBzcHJpbnRmICIlLjFmIEtCeXRlcyIsICggKCAkRmlsZXNpemUgLyAxMDI0ICkgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRGaWxlc2l6ZSA9ICRGaWxlc2l6ZSAuICcgQnl0ZXMnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBJbmRleCwgewogICAgICAgICAgICBGaWxlSUQgICAgICA9PiAkSUQsCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJENvbnRlbnRUeXBlLAogICAgICAgICAgICBGaWxlc2l6ZSAgICA9PiAkRmlsZXNpemUsCiAgICAgICAgICAgIEZpbGVzaXplUmF3ID0+ICRGaWxlU2l6ZVJhdywKICAgICAgICAgICAgSW5saW5lICAgICAgPT4gJElubGluZSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBASW5kZXg7Cn0KCj1oZWFkMiBBdHRhY2htZW50RGVsZXRlKCkKCmRlbGV0ZSBhdHRhY2htZW50IG9mIGFydGljbGUKICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPkF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBGaWxlSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICRTdWNjZXNzID0gMSA7ICAgICAgICAgICAgICAjIG9yIHVuZGVmIGlmIGF0dGFjaG1lbnQgY291bGQgbm90IGJlIGRlbGV0ZWQKCj1jdXQKCnN1YiBBdHRhY2htZW50RGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIEZpbGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHNlcnZpY2VfYXR0YWNobWVudCBXSEVSRSBpZCA9ID8gQU5EIHNlcnZpY2VfaWQgPSA/ICcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17RmlsZUlEfSwgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9Zm9yIHN0b3B3b3JkcyBhY2wKCj1oZWFkMiBVcGRhdGVUeXBlU2VydmljZUFDTCgpCgpjcmVhdGUgb3IgdXBkYXRlIGFuIEFDTCB0aGF0IHNob3dzIG9yIGhpZGVzIHRoZSByZWxldmFudCBzZXJ2aWNlIGRlcGVuZGluZyBvbiB0aGUgdGlja2V0IHR5cGUuCgogICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+VXBkYXRlVHlwZVNlcnZpY2VBQ0woCiAgICAgICAgU2VydmljZUlEICAgICA9PiAxMjMsCiAgICAgICAgVGlja2V0VHlwZUlEcyA9PiBbMSwgMiwgM10sICMgT3B0aW9uYWwsIHJlbW92ZSBzZXJ2aWNlIGZyb20gYWxsIEFDTHMgd2hlbiB0aGUgdGlja2V0IHR5cGUgaXMgbm90IGdpdmVuCiAgICAgICAgU2VydmljZVZhbGlkICA9PiAwfDF8MiwgICAgICMgd2hldGhlciBhIHNlcnZpY2Ugc2hvdWxkIGJlIHZhbGlkLCBpbnZhbGlkLCBvciB0ZW1wb3JhcmlseSBpbnZhbGlkCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJFN1Y2Nlc3MgPSAxIDsgICAgICAgICAgICAgICMgb3IgdW5kZWYgaWYgYWNsIGNvdWxkIG5vdCBiZSBhZGRlZC9jaGFuZ2VkL2RlbGV0ZWQKCj1jdXQKCnN1YiBVcGRhdGVUeXBlU2VydmljZUFDTCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMb2dPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgdmFsaWRhdGUgcGFyYW1ldGVycwogICAgZm9yIG15ICROZWVkZWQgKHF3KFNlcnZpY2VJRCBTZXJ2aWNlVmFsaWQgVGlja2V0VHlwZUlEcyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgdGhlIGxpc3Qgb2YgdHlwZXMgY2FuIGJlIGVtcHR5CiAgICBpZiAoIHJlZiAkUGFyYW17VGlja2V0VHlwZUlEc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyIFRpY2tldFR5cGVJRHMgbXVzdCBiZSBhbiBhcnJheXJlZiEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkQUNMT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBQ0w6OkRCOjpBQ0wnKTsKICAgIG15ICRDb25maWdPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgIG15ICRUeXBlT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKCiAgICBteSAkQUNMT3B0aW9ucyA9ICRDb25maWdPYmplY3QtPkdldCgnU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnMnKTsKCiAgICBteSAkR2VuZXJhdGVJbml0YWxBQ0xUb0Rpc2FibGVBbGxTZXJ2aWNlcyA9ICRQYXJhbXtHZW5lcmF0ZUluaXRhbEFDTFRvRGlzYWJsZUFsbFNlcnZpY2VzfSB8fCAkQUNMT3B0aW9ucy0+e0dlbmVyYXRlSW5pdGFsQUNMVG9EaXNhYmxlQWxsU2VydmljZXN9OwogICAgbXkgJEZyb250ZW5kQWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgPSAkUGFyYW17RnJvbnRlbmRBY3Rpb259ICAgICAgICAgICAgICAgICAgICAgICAgfHwgJEFDTE9wdGlvbnMtPntGcm9udGVuZEFjdGlvbn07CiAgICBteSAkUG9zc2libGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRQYXJhbXtDb25maWdDaGFuZ2V9ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkQUNMT3B0aW9ucy0+e0NvbmZpZ0NoYW5nZX07CiAgICBteSAkQUNMRGVwbG95ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRQYXJhbXtBQ0xEZXBsb3l9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkQUNMT3B0aW9ucy0+e0FDTERlcGxveX07CiAgICBteSAkQUNMVmFsaWRJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRQYXJhbXtBQ0xWYWxpZElEfSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkQUNMT3B0aW9ucy0+e0FDTFZhbGlkSUR9OwoKICAgICMgR2VuZXJhdGUgYSBpbml0aWFsIEFDTCwgd2hpY2ggZGlzYWJsZSBhbGwgc2VydmljZXMKICAgIGlmICggJEdlbmVyYXRlSW5pdGFsQUNMVG9EaXNhYmxlQWxsU2VydmljZXMgZXEgJzEnICkgewogICAgICAgIG15ICRBQ0xEaXNhYmxlTmFtZSA9ICd6emEgLSBEaXNhYmxlIGFsbCBTZXJ2aWNlcyBpZiBubyBUaWNrZXQtVHlwZSBpcyBzZWxlY3RlZC4nOwoKICAgICAgICAjIENoZWNrIGlmIHRoZSBkaXNhYmxlIEFDTCBleGlzdHMKICAgICAgICBteSAkQUNMID0gJEFDTE9iamVjdC0+QUNMR2V0KAogICAgICAgICAgICBOYW1lICAgPT4gJEFDTERpc2FibGVOYW1lLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBBQ0wgaWYgaXQgZG9lcyBub3QgZXhpc3QKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQUNMKSApIHsKICAgICAgICAgICAgbXkgJERpc2FibGVDb25maWdNYXRjaEhhc2hSZWYgPSB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBGcm9udGVuZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkRnJvbnRlbmRBY3Rpb24KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBteSAkRGlzYWJsZUNvbmZpZ0NoYW5nZUhhc2hSZWYgPSB7CiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiBbJ1tSZWdFeHBdLionXSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEFDTE9iamVjdC0+QUNMQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJEFDTERpc2FibGVOYW1lLAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICAgPT4gJ1RoaXMgQUNMIHdhcyBnZW5lcmF0ZWQgd2hlbiBhIHNlcnZpY2Ugd2FzIGFkZGVkIG9yIGNoYW5nZWQuJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+ICdUaGlzIEFDTCBpcyB1c2VkIHRvIGRpc2FibGUgYWxsIHRpY2tldCBzZXJ2aWNlcyBpcnJlZ2FyZGxlc3Mgb2YgdGhlIHRpY2tldCB0eXBlLicsCiAgICAgICAgICAgICAgICBTdG9wQWZ0ZXJNYXRjaCA9PiAwLAogICAgICAgICAgICAgICAgQ29uZmlnTWF0Y2ggICAgPT4gJERpc2FibGVDb25maWdNYXRjaEhhc2hSZWYsCiAgICAgICAgICAgICAgICBDb25maWdDaGFuZ2UgICA9PiAkRGlzYWJsZUNvbmZpZ0NoYW5nZUhhc2hSZWYsCiAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgICA9PiAkQUNMVmFsaWRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgTG9vcCBvdmVyIGFsbCB0aWNrZXQgdHlwZXMgYW5kIGhhbmRsZSB0aGUgZGlmZmVyZW50IGNhc2VzOgogICAgIwogICAgIyBBKSBBQ0wgZG9lcyBub3QgZXhpc3QKICAgICMgICBBOzEpIHRoZSBzZXJ2aWNlIGRvZXMgbm90IGhhdmUgdGhlIHR5cGUgPT4gZG8gbm90aGluZwogICAgIyAgIEE7MikgdGhlIHNlcnZpY2UgaGFzIHRoZSB0eXBlICAgICAgICAgICA9PiBjcmVhdGUgdGhlIEFDTCB3aXRoIHRoZSBzaW5nbGUgc2VydmljZQogICAgIwogICAgIyBCKSBBQ0wgZXhpc3RzCiAgICAjICAgQjsxKSB0aGUgc2VydmljZSBoYXMgdGhlIHR5cGUKICAgICMgICAgIEI7MTsxKSB0aGUgc2VydmljZSBpcyBpbiB0aGUgQUNMICAgICAgICAgICAgPT4gZG8gbm90aGluZwogICAgIyAgICAgQjsxOzIpIHRoZSBzZXJ2aWNlIGlzbid0IGluIHRoZSBBQ0wgICAgICAgICA9PiBhZGQgdGhlIHNlcnZpY2UgdG8gdGhlIEFDTAogICAgIyAgIEI7MikgdGhlIHNlcnZpY2UgZG9lcyBub3QgaGF2ZSB0aGUgdHlwZQogICAgIyAgICAgQjsyOzEpIHRoZSBzZXJ2aWNlIGlzIG5vdCBpbiB0aGUgQUNMICAgICAgICA9PiBkbyBub3RoaW5nCiAgICAjICAgICBCOzI7MikgdGhlIHNlcnZpY2UgaXMgaW4gdGhlIEFDTAogICAgIyAgICAgICBCOzI7MjsxKSB0aGUgc2VydmljZSBpcyB0aGUgb25seSBvbmUgICAgICA9PiByZW1vdmUgdGhlIEFDTAogICAgIyAgICAgICBCOzI7MjsxKSB0aGUgc2VydmljZSBpcyBub3QgdGhlIG9ubHkgb25lICA9PiByZW1vdmUgdGhlIHNlcnZpY2UgZnJvbSB0aGUgQUNMCiAgICAjCiAgICAjIEZpcnN0IHRoZSBuZWNlc3NhcnkgYWN0aW9ucyBhcmUgY29sbGVjdGVkIGFuZCB0aGVuIGV4ZWN1dGVkCiAgICBteSBAQWN0aW9uczsKICAgIHsKICAgICAgICBteSAkU2VydmljZUlEICAgICAgICA9ICRQYXJhbXtTZXJ2aWNlSUR9OwoKICAgICAgICAjIEFuIGludmFsaWQgc2VydmljZSBpcyBoYW5kbGVkIGp1c3QgbGlrZSBhIHNlcnZpY2Ugd2l0aCBubyB0aWNrZXQgdHlwZXMKICAgICAgICBteSAlU2VydmljZUhhc1R5cGVJRCA9ICRQYXJhbXtTZXJ2aWNlVmFsaWR9ID09IDEgPwogICAgICAgICAgICBtYXAgeyAkXyA9PiAxIH0gJFBhcmFte1RpY2tldFR5cGVJRHN9LT5AKgogICAgICAgICAgICA6CiAgICAgICAgICAgICgpOwogICAgICAgIG15ICVUeXBlSUQyTmFtZSA9ICRUeXBlT2JqZWN0LT5UeXBlTGlzdCgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwogICAgICAgIG15ICVUeXBlSUQyQUNMTmFtZSA9IG1hcCB7ICRfID0+ICd6enogLSBTaG93IFNlcnZpY2UgYmFzZWQgb24gVGlja2V0LVR5cGU6ICcgLiAkVHlwZUlEMk5hbWV7JF99IH0ga2V5cyAlVHlwZUlEMk5hbWU7CiAgICAgICAgVFlQRV9JRDoKICAgICAgICBmb3IgbXkgJFR5cGVJRCAoa2V5cyAlVHlwZUlEMk5hbWUpIHsKICAgICAgICAgICAgbXkgJFNlcnZpY2VIYXNUeXBlID0gJFNlcnZpY2VIYXNUeXBlSUR7JFR5cGVJRH07CgogICAgICAgICAgICAjIENoZWNrIGlmIHp6eiBBQ0wgZXhpc3RzCiAgICAgICAgICAgIG15ICRBQ0xOYW1lID0gJFR5cGVJRDJBQ0xOYW1leyRUeXBlSUR9OwogICAgICAgICAgICBteSAkQUNMICAgICA9ICRBQ0xPYmplY3QtPkFDTEdldCgKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkQUNMTmFtZSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBBKSBBQ0wgZG9lcyBub3QgZXhpc3QKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkQUNMKSB7CgogICAgICAgICAgICAgICAgIyBBOzEpIHRoZSBzZXJ2aWNlIGRvZXMgbm90IGhhdmUgdGhlIHR5cGUKICAgICAgICAgICAgICAgIG5leHQgVFlQRV9JRCB1bmxlc3MgJFNlcnZpY2VIYXNUeXBlOwoKICAgICAgICAgICAgICAgICMgQTsyKSB0aGUgc2VydmljZSBoYXMgdGhlIHR5cGUKICAgICAgICAgICAgICAgIHB1c2ggQEFjdGlvbnMsIFsgJ0NyZWF0ZUFDTCcsICRUeXBlSUQsICRTZXJ2aWNlSUQgXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBCKSBBQ0wgZXhpc3RzCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2VOYW1lICAgICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggU2VydmljZUlEID0+ICRTZXJ2aWNlSUQgKTsKICAgICAgICAgICAgICAgIG15IEBTZXJ2aWNlc09mQUNMICAgID0gKCAkQUNMLT57Q29uZmlnQ2hhbmdlfS0+eyRQb3NzaWJsZX0tPntUaWNrZXR9LT57U2VydmljZX0gLy8gW10gKS0+QCo7CiAgICAgICAgICAgICAgICBteSAkTnVtU2VydmljZXNJbkFDTCA9IEBTZXJ2aWNlc09mQUNMOwogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2VJc0luQUNMICAgPSBncmVwIHsgJF8gZXEgJFNlcnZpY2VOYW1lIH0gQFNlcnZpY2VzT2ZBQ0w7CgogICAgICAgICAgICAgICAgIyBCOzEpIHRoZSBzZXJ2aWNlIGhhcyB0aGUgdHlwZQogICAgICAgICAgICAgICAgaWYgKCRTZXJ2aWNlSGFzVHlwZSkgewoKICAgICAgICAgICAgICAgICAgICAjIEI7MTsxKSB0aGUgc2VydmljZSBpcyBpbiB0aGUgQUNMCiAgICAgICAgICAgICAgICAgICAgbmV4dCBUWVBFX0lEIGlmICRTZXJ2aWNlSXNJbkFDTDsKCiAgICAgICAgICAgICAgICAgICAgIyBCOzE7MikgdGhlIHNlcnZpY2UgaXNuJ3QgaW4gdGhlIEFDTAogICAgICAgICAgICAgICAgICAgIHB1c2ggQEFjdGlvbnMsIFsgJ0FkZFNlcnZpY2VUb0FDTCcsICRUeXBlSUQsICRTZXJ2aWNlSUQgXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEI7MikgdGhlIHNlcnZpY2UgZG9lcyBub3QgaGF2ZSB0aGUgdHlwZQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgQjsyOzEpIHRoZSBzZXJ2aWNlIGlzIG5vdCBpbiB0aGUgQUNMCiAgICAgICAgICAgICAgICAgICAgbmV4dCBUWVBFX0lEIHVubGVzcyAkU2VydmljZUlzSW5BQ0w7CgogICAgICAgICAgICAgICAgICAgICMgQjsyOzI7MSkgdGhlIHNlcnZpY2UgaXMgdGhlIG9ubHkgb25lICAgICAgPT4gcmVtb3ZlIHRoZSBBQ0wKICAgICAgICAgICAgICAgICAgICBpZiAoJE51bVNlcnZpY2VzSW5BQ0wgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBBY3Rpb25zLCBbICdEZWxldGVBQ0wnLCAkVHlwZUlEIF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIEI7MjsyOzEpIHRoZSBzZXJ2aWNlIGlzIG5vdCB0aGUgb25seSBvbmUgID0+IHJlbW92ZSB0aGUgc2VydmljZSBmcm9tIHRoZSBBQ0wKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAQWN0aW9ucywgWyAnUmVtb3ZlU2VydmljZUZyb21BQ0wnLCAkVHlwZUlELCAkU2VydmljZUlEIF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEFjdGlvbiAoQEFjdGlvbnMpIHsKICAgICAgICAgICAgbXkgKCRDb21tYW5kLCAkVHlwZUlELCBAUGFyYW0pID0gJEFjdGlvbi0+QCo7CgogICAgICAgICAgICBteSAkQUNMTmFtZSA9ICRUeXBlSUQyQUNMTmFtZXskVHlwZUlEfTsKCiAgICAgICAgICAgIGlmICggJENvbW1hbmQgZXEgJ1JlbW92ZVNlcnZpY2VGcm9tQUNMJyApIHsKICAgICAgICAgICAgICAgIG15ICgkU2VydmljZUlEKSA9IEBQYXJhbTsKICAgICAgICAgICAgICAgIG15ICRBQ0wgICAgID0gJEFDTE9iamVjdC0+QUNMR2V0KAogICAgICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkQUNMTmFtZSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkU2VydmljZU5hbWUgICAgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKCBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCApOwogICAgICAgICAgICAgICAgbXkgQFNlcnZpY2VzT2ZBQ0wgICAgPSAoICRBQ0wtPntDb25maWdDaGFuZ2V9LT57JFBvc3NpYmxlfS0+e1RpY2tldH0tPntTZXJ2aWNlfSAvLyBbXSApLT5AKjsKICAgICAgICAgICAgICAgIG15IEBOZXdTZXJ2aWNlc09mQUNMID0gZ3JlcCB7ICRfIG5lICRTZXJ2aWNlTmFtZSB9IEBTZXJ2aWNlc09mQUNMOwogICAgICAgICAgICAgICAgbXkgJUNvbmZpZ0NoYW5nZSAgICAgPSAoCiAgICAgICAgICAgICAgICAgICAgJFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gXEBOZXdTZXJ2aWNlc09mQUNMLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQUNMT2JqZWN0LT5BQ0xVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgJEFDTC0+JSosCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnQ2hhbmdlID0+IFwlQ29uZmlnQ2hhbmdlLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICghJFN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgdXBkYXRlIEFDTCAkQUNMTmFtZSEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkQ29tbWFuZCBlcSAnQWRkU2VydmljZVRvQUNMJyApIHsKICAgICAgICAgICAgICAgIG15ICgkU2VydmljZUlEKSA9IEBQYXJhbTsKICAgICAgICAgICAgICAgIG15ICRBQ0wgICAgID0gJEFDTE9iamVjdC0+QUNMR2V0KAogICAgICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkQUNMTmFtZSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkU2VydmljZU5hbWUgICAgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKCBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCApOwogICAgICAgICAgICAgICAgbXkgQFNlcnZpY2VzT2ZBQ0wgICAgPSAoICRBQ0wtPntDb25maWdDaGFuZ2V9LT57JFBvc3NpYmxlfS0+e1RpY2tldH0tPntTZXJ2aWNlfSAvLyBbXSApLT5AKjsKICAgICAgICAgICAgICAgIG15IEBOZXdTZXJ2aWNlc09mQUNMID0gKCBAU2VydmljZXNPZkFDTCwgJFNlcnZpY2VOYW1lICk7CiAgICAgICAgICAgICAgICBteSAlQ29uZmlnQ2hhbmdlICAgICA9ICgKICAgICAgICAgICAgICAgICAgICAkUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiBcQE5ld1NlcnZpY2VzT2ZBQ0wsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRBQ0xPYmplY3QtPkFDTFVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAkQUNMLT4lKiwKICAgICAgICAgICAgICAgICAgICBDb25maWdDaGFuZ2UgPT4gXCVDb25maWdDaGFuZ2UsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCEkU3VjY2VzcykgewogICAgICAgICAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCB1cGRhdGUgQUNMICRBQ0xOYW1lISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRDb21tYW5kIGVxICdDcmVhdGVBQ0wnICkgewogICAgICAgICAgICAgICAgbXkgKCRTZXJ2aWNlSUQpID0gQFBhcmFtOwogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEICk7CiAgICAgICAgICAgICAgICBteSAkVGlja2V0VHlwZSAgPSAkVHlwZU9iamVjdC0+VHlwZUxvb2t1cCggVHlwZUlEID0+ICRUeXBlSUQgKTsKICAgICAgICAgICAgICAgIG15ICVDb25maWdNYXRjaCA9ICgKICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gWyIkVGlja2V0VHlwZSJdCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZyb250ZW5kID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkRnJvbnRlbmRBY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICVDb25maWdDaGFuZ2UgPSAoCiAgICAgICAgICAgICAgICAgICAgJFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gWyRTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRBQ0xPYmplY3QtPkFDTEFkZCgKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAkQUNMTmFtZSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgICA9PiAnVGhpcyBBQ0wgd2FzIGdlbmVyYXRlZCB3aGVuIGEgc2VydmljZSB3YXMgYWRkZWQgb3IgY2hhbmdlZC4nLAogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+ICdUaGlzIEFDTCBpcyB1c2VkIHRvIHJlc3RyaWN0IFNlcnZpY2VzIHBlciBUaWNrZXQtVHlwZScsCiAgICAgICAgICAgICAgICAgICAgU3RvcEFmdGVyTWF0Y2ggPT4gMCwKICAgICAgICAgICAgICAgICAgICBDb25maWdNYXRjaCAgICA9PiBcJUNvbmZpZ01hdGNoLAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0NoYW5nZSAgID0+IFwlQ29uZmlnQ2hhbmdlLAogICAgICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICAgID0+ICRBQ0xWYWxpZElELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICghJFN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgY3JlYXRlIEFDTCAkQUNMTmFtZSEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkQ29tbWFuZCBlcSAnRGVsZXRlQUNMJyApIHsKCiAgICAgICAgICAgICAgICAjIERlbGV0aW9uIGlzIGZpbmUgYXMgdGhlIHp6YSBBQ0wgZGljdGF0ZXMgd2hldGhlciBubyBvciBhbGwgc2VydmljZXMKICAgICAgICAgICAgICAgICMgYXJlIHNob3duIHdoZW4gdGhlcmUgaXMgenp6IEFDTCBmb3IgdGhlIHRpY2tldCB0eXBlLgogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAwOwogICAgICAgICAgICAgICAgbXkgJEFDTCAgICAgPSAkQUNMT2JqZWN0LT5BQ0xHZXQoCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICRBQ0xOYW1lLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgkQUNMICYmICRBQ0wtPntJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkQUNMT2JqZWN0LT5BQ0xEZWxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgIElEID0+ICRBQ0wtPntJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoISRTdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IGRlbGV0ZSBBQ0wgJEFDTE5hbWUhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgRG9uJ3QgZGVwbG95IG5ldyBBQ0wsIGNhdXNlIFNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25zIC0+IERlcGxveSBpcyBkaXNhYmxlZAogICAgcmV0dXJuIDEgdW5sZXNzICRBQ0xEZXBsb3kgZXEgJzEnOwogICAgcmV0dXJuIDEgdW5sZXNzIEBBY3Rpb25zOwoKICAgIHJldHVybiAkU2VsZi0+VHlwU2VydmljZUFDTERlcGxveSgpOwp9Cgo9aGVhZDIgUmVuYW1lU2VydmljZXNJblR5cFNlcnZpY2VBQ0xzKCkKCnJlbmFtZSBhIHNlcnZpY2UgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4gaW4gdGhlIEFDTHMgZ2VuZXJhdGVkIGJ5IEM8VXBkYXRlVHlwU2VydmljZUFDTCgpPi4KCiAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5SZW5hbWVTZXJ2aWNlc0luVHlwU2VydmljZUFDTHMoCiAgICAgICBTZXJ2aWNlTmFtZU9sZDJOZXcgPT4gewogICAgICAgICdPbGQnICAgICAgICAgPT4gJ05ldycsCiAgICAgICAgJ09sZDo6Q2hpbGQxJyA9PiAnTmV3OjpDaGlsZDEsCiAgICAgICAgJ09sZDo6Q2hpbGQyJyA9PiAnTmV3OjpDaGlsZDIsCiAgICApOwoKPWN1dAoKc3ViIFJlbmFtZVNlcnZpY2VzSW5UeXBTZXJ2aWNlQUNMcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRBQ0xPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBQ0w6OkRCOjpBQ0wnKTsKCiAgICBteSAkQUNMT3B0aW9ucyAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25zJyk7CiAgICBteSAkUG9zc2libGUgICAgICAgPSAkQUNMT3B0aW9ucy0+e0NvbmZpZ0NoYW5nZX07CiAgICBteSAlT2xkMk5ldyAgICAgICAgPSAkUGFyYW17U2VydmljZU5hbWVPbGQyTmV3fS0+JSo7CgogICAgIyBsb29wIG92ZXIgYWxsIHZhbGlkIHRpY2tldCB0eXBlcwogICAgbXkgJVR5cGVJRDJOYW1lICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUxpc3QoCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CiAgICBteSAkTnVtQUNMc0NoYW5nZWQgPSAwOwogICAgVElDS0VUX1RZUEVfTkFNRToKICAgIGZvciBteSAkVGlja2V0VHlwZU5hbWUgKCB2YWx1ZXMgJVR5cGVJRDJOYW1lICkgewoKICAgICAgICBteSAkQUNMID0gJEFDTE9iamVjdC0+QUNMR2V0KAogICAgICAgICAgICBOYW1lICAgPT4gJ3p6eiAtIFNob3cgU2VydmljZSBiYXNlZCBvbiBUaWNrZXQtVHlwZTogJyAuICRUaWNrZXRUeXBlTmFtZSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBUSUNLRVRfVFlQRV9OQU1FIHVubGVzcyBJc0hhc2hSZWZXaXRoRGF0YSgkQUNMKTsKCiAgICAgICAgbXkgJE9sZFNlcnZpY2VOYW1lcyA9ICRBQ0wtPntDb25maWdDaGFuZ2V9LT57JFBvc3NpYmxlfS0+e1RpY2tldH0tPntTZXJ2aWNlfTsKCiAgICAgICAgbmV4dCBUSUNLRVRfVFlQRV9OQU1FIHVubGVzcyBJc0FycmF5UmVmV2l0aERhdGEoJE9sZFNlcnZpY2VOYW1lcyk7CgogICAgICAgIG15IEBOZXdTZXJ2aWNlTmFtZXM7CiAgICAgICAgbXkgJUFscmVhZHlBZGRlZDsKICAgICAgICBteSAkTnVtU2VydmljZXNDaGFuZ2VkID0gMDsKCiAgICAgICAgZm9yIG15ICRPbGRTZXJ2aWNlTmFtZSAoICRPbGRTZXJ2aWNlTmFtZXMtPkAqICkgewoKICAgICAgICAgICAgbXkgJE5ld1NlcnZpY2VOYW1lID0gJE9sZDJOZXd7JE9sZFNlcnZpY2VOYW1lfTsKCiAgICAgICAgICAgICMgY2hlY2sgd2hldGhlciB0aGF0IHNlcnZpY2UgdHJpZ2dlcnMgYW4gdXBkYXRlCiAgICAgICAgICAgIGlmICggISROZXdTZXJ2aWNlTmFtZSB8fCAkTmV3U2VydmljZU5hbWUgZXEgJE9sZFNlcnZpY2VOYW1lICkgewoKICAgICAgICAgICAgICAgICMgc3RpbGwgZG8gdGhlIGR1cGxpY2F0ZSBjaGVjaywgc2tpcHBpbmcgYSBkdXBsaWNhdGUgY29uc3RpdHV0ZXMgYSBjaGFuZ2UKICAgICAgICAgICAgICAgIGlmICggJEFscmVhZHlBZGRlZHskT2xkU2VydmljZU5hbWV9ICkgewogICAgICAgICAgICAgICAgICAgICROdW1TZXJ2aWNlc0NoYW5nZWQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIGtlZXAgdGhlIG9sZCBuYW1lCiAgICAgICAgICAgICAgICAgICAgcHVzaCBATmV3U2VydmljZU5hbWVzLCAkT2xkU2VydmljZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgJEFscmVhZHlBZGRlZHskT2xkU2VydmljZU5hbWV9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHdlIGhhdmUgYSBjaGFuZ2UKICAgICAgICAgICAgICAgICROdW1TZXJ2aWNlc0NoYW5nZWQrKzsKCiAgICAgICAgICAgICAgICAjIHRoZSBuZXcgbmFtZSBjb3VsZCBhbHJlYWR5IGJlIHBhcnQgb2YgdGhlIEFDTCwgYXZvaWQgZHVwbGljYXRlIGVudHJpZXMKICAgICAgICAgICAgICAgIGlmICghJEFscmVhZHlBZGRlZHskTmV3U2VydmljZU5hbWV9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQE5ld1NlcnZpY2VOYW1lcywgJE5ld1NlcnZpY2VOYW1lOwogICAgICAgICAgICAgICAgICAgICRBbHJlYWR5QWRkZWR7JE5ld1NlcnZpY2VOYW1lfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG5leHQgVElDS0VUX1RZUEVfTkFNRSB1bmxlc3MgJE51bVNlcnZpY2VzQ2hhbmdlZDsKCiAgICAgICAgJEFDTC0+e0NvbmZpZ0NoYW5nZX17JFBvc3NpYmxlfXtUaWNrZXR9e1NlcnZpY2V9ID0gXEBOZXdTZXJ2aWNlTmFtZXM7CgogICAgICAgIG15ICRTdWNjZXNzID0gJEFDTE9iamVjdC0+QUNMVXBkYXRlKAogICAgICAgICAgICAkQUNMLT4lKiwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIHVubGVzcyAkU3VjY2VzczsKCiAgICAgICAgJE51bUFDTHNDaGFuZ2VkKys7CiAgICB9CgogICAgIyBkZXBsb3kgb25seSBpZiBzb21ldGhpbmcgd2FzIGNoYW5nZWQgYW5kIGRlcGxveWluZyBpcyB3YW50ZWQKICAgIHJldHVybiAxIHVubGVzcyAkTnVtQUNMc0NoYW5nZWQ7CiAgICByZXR1cm4gMSB1bmxlc3MgKCAkQUNMT3B0aW9ucy0+e0FDTERlcGxveX0gLy8gJycgKSBlcSAnMSc7CgogICAgcmV0dXJuICRTZWxmLT5UeXBTZXJ2aWNlQUNMRGVwbG95KCk7Cn0KCj1oZWFkMiBUeXBTZXJ2aWNlQUNMRGVwbG95KCkKCmRlcGxveSB0aGUgQUNMcyBnZW5lcmF0ZWQgYnkgQzxVcGRhdGVUeXBTZXJ2aWNlQUNMKCk+LgoKICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlR5cFNlcnZpY2VBQ0xEZXBsb3koKTsKCj1jdXQKCnN1YiBUeXBTZXJ2aWNlQUNMRGVwbG95IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJEFDTE9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBQ0w6OkRCOjpBQ0wnKTsKCiAgICAjIGRlcGxveSBuZXcgQUNMcyAtIHRha2VuIGZyb20gS2VybmVsL01vZHVsZXMvQWRtaW5BQ0wKICAgIG15ICRMb2NhdGlvbiA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpIC4gJy9LZXJuZWwvQ29uZmlnL0ZpbGVzL1paWkFDTC5wbSc7CgogICAgbXkgJFN1Y2Nlc3MgPSAkQUNMT2JqZWN0LT5BQ0xEdW1wKAogICAgICAgIFJlc3VsdFR5cGUgPT4gJ0ZJTEUnLAogICAgICAgIExvY2F0aW9uICAgPT4gJExvY2F0aW9uLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgaWYgKCRTdWNjZXNzKSB7CiAgICAgICAgJFN1Y2Nlc3MgPSAkQUNMT2JqZWN0LT5BQ0xzTmVlZFN5bmNSZXNldCgpOwoKICAgICAgICAjIHJlbW92ZSBwcmVzZWxlY3Rpb24gY2FjaGUgVE9ETzogcmVidWlsZCB0aGUgY2FjaGUgcHJvcGVybHkgKGEgc2ltcGxlICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+U2V0QUNMUHJlc2VsZWN0aW9uQ2FjaGUoKTsgdXNlcyB0aGUgb2xkIEFDTHMpCiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsICAgICAgIyBvbmx5IFthLXpBLVowLTlfXSBjaGFycyB1c2FibGUKICAgICAgICAgICAgS2V5ICA9PiAnUHJlc2VsZWN0aW9uJywKICAgICAgICApOwogICAgfQoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvdWxkIG5vdCBkZXBsb3kgQUNMcyAtIG1hbnVhbCBmaXggbmVlZGVkIScsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKIyBFTyBTZXJ2aWNlQ2F0YWxvZwoxOwo=</File>
        <File Location="Kernel/Config/Files/XML/ServiceCatalog.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5TZXJ2aWNlSW1wb3J0RXhwb3J0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZG1pbiBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+YWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPlNlcnZpY2UgSW1wb3J0IEV4cG9ydDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5TZXJ2aWNlSW1wb3J0RXhwb3J0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFkbWluU2VydmljZUltcG9ydEV4cG9ydCMjIzAwMi1TZXJ2aWNlQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFkbWluLlNlcnZpY2VJbXBvcnRFeHBvcnQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5TTEFJbXBvcnRFeHBvcnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFkbWluIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+U0xBIEltcG9ydCBFeHBvcnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+U0xBSW1wb3J0RXhwb3J0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFkbWluU0xBSW1wb3J0RXhwb3J0IyMjMDAyLVNlcnZpY2VDYXRhbG9nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuQWRtaW4uU0xBSW1wb3J0RXhwb3J0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iQ3VzdG9tZXJEYXNoYm9hcmQ6OlRpbGVzIyMjU2VydmljZUNhdGFsb2ctMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGlsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBDdXN0b21lckRhc2hib2FyZC4gTW9kdWxlIGlzIHJlcXVpcmVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3OjpEYXNoYm9hcmQ6OlRpbGVzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9yZGVyIj43PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpDdXN0b21lckRhc2hib2FyZDo6VGlsZVNlcnZpY2VDYXRhbG9nPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWciPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkhlYWRlclRleHQiIFRyYW5zbGF0YWJsZT0iMSI+RmluZCB0aGUgcmlnaHQgc2VydmljZSBmb3IgeW91ciB0aWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDwhLS0gRklYTUU6IFRoaXMgY291bGQgYmUgcmVuYW1lZDsgd291bGQgcHJvYmFibHkgYnJlYWsgZXhpc3RpbmcgY29uZmlncyBvbiBpbnN0YWxsZWQgc3lzdGVtcyAtLT4KICAgIDxTZXR0aW5nIE5hbWU9IkN1c3RvbWVyRGFzaGJvYXJkOjpDb25maWd1cmF0aW9uOjpTZXJ2aWNlQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgc2VydmljZSBjYXRhbG9nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3OjpEYXNoYm9hcmQ6OkNvbmZpZ3VyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW5jaWRlbnQiPm9vb2ZvLWJhbmcgb29vQ29sb3ItUmVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbmNpZGVudDo6TWFqb3IiPm9vb2ZvLWJhbmcgb29vQ29sb3ItUmVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTZXJ2aWNlUmVxdWVzdCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcm9ibGVtIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJmQyI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkN1c3RvbWVyRGFzaGJvYXJkOjpDb25maWd1cmF0aW9uOjpTZXJ2aWNlQ2F0YWxvZyMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgc2VydmljZSBjYXRhbG9nIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3OjpEYXNoYm9hcmQ6OkNvbmZpZ3VyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIwIiBUcmFuc2xhdGFibGU9IjEiPjAgLSBEaXNhYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjEiIFRyYW5zbGF0YWJsZT0iMSI+MSAtIEVuYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkR5bmFtaWNGaWVsZFNjcmVlbnMjIyNTZXJ2aWNlQ2F0YWxvZyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIGNvbmZpZ3VyYXRpb24gZGVmaW5lcyBhbGwgcG9zc2libGUgc2NyZWVucyB0byBlbmFibGUgb3IgZGlzYWJsZSBkeW5hbWljIGZpZWxkcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpEeW5hbWljRmllbGRTY3JlZW5zPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1c3RvbWVyRGFzaGJvYXJkOjpDb25maWd1cmF0aW9uOjpTZXJ2aWNlQ2F0YWxvZyMjI0R5bmFtaWNGaWVsZCI+Q3VzdG9tZXJEYXNoYm9hcmRUaWxlIFNlcnZpY2VDYXRhbG9nPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkR5bmFtaWNGaWVsZFNjcmVlbnM6Ok9iamVjdFR5cGVzIyMjU2VydmljZUNhdGFsb2ciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIGEgbGlzdCBvZiBkeW5hbWljIGZpZWxkIG9iamVjdCB0eXBlcyB3aGljaCBhcmUgYWxsb3dlZCB0byBiZSBhc3NpZ25lZCB0byBhY3Rpb25zIG9mIHRoaXMgcGFja2FnZSB2aWEgdGhlIGR5bmFtaWMgZmllbGQgc2NyZWVucyBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QmFzZTo6RHluYW1pY0ZpZWxkU2NyZWVuczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkN1c3RvbWVyRGFzaGJvYXJkOjpDb25maWd1cmF0aW9uOjpTZXJ2aWNlQ2F0YWxvZyMjI1NvcnRCeVRpY2tldFR5cGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyBzZXJ2aWNlcyB3aXRoIHRoZSBmb2xsb3dpbmcgdGlja2V0IHR5cGUgbGFzdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6Vmlldzo6RGFzaGJvYXJkOjpDb25maWd1cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+SW5jaWRlbnQ8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkN1c3RvbWVyRGFzaGJvYXJkOjpDb25maWd1cmF0aW9uOjpTZXJ2aWNlQ2F0YWxvZyMjI0ZBUURlc2NyaXB0aW9uRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhlIEZBUSBmaWVsZCB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkZXNjcmlwdGlvbiBvZiBhbiBGQVEgYXJ0aWNsZSBpbiB0aGUgc2lkZWJhciAoZS5nLiBGaWVsZDEsIEZpZWxkMiwgRmllbGQzLi4uKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6Vmlldzo6RGFzaGJvYXJkOjpDb25maWd1cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+RmllbGQxPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6Q3VzdG9tZXJEYXNoYm9hcmQjIyMwMDMtQ3VzdG9tZXJEYXNoYm9hcmQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkRhc2hib2FyZC5UaWxlU2VydmljZUNhdGFsb2cuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLldpZGdldC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLm9vb1dpZGdldC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5DdXN0b21lci5UaWxlU2VydmljZUNhdGFsb2cuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpNb2R1bGUjIyNDdXN0b21lclRpbGVTZXJ2aWNlQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cgQUpBWCBNb2R1bGUuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+U2VydmljZSBDYXRhbG9nPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkR5bmFtaWNGaWVsZHM6Ok9iamVjdFR5cGUjIyNTZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWNGaWVsZCBvYmplY3QgcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RHluYW1pY0ZpZWxkczo6T2JqZWN0VHlwZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEaXNwbGF5TmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6Ok9iamVjdFR5cGU6OlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjE0MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXNlT2JqZWN0TmFtZSI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgQUNMcyBmb3IgZGlmZmVyZW50IGludGVyZmFjZXMgd2hlbiBjcmVhdGluZyBzZXJ2aWNlcy4gU2VydmljZXMgd2lsbCB0aGVuIG9ubHkgYmUgZGlzcGxheWVkIGlmIHRoZSB0aWNrZXQgdHlwZSBzdG9yZWQgaW4gdGhlIHNlcnZpY2UgaGFzIGJlZW4gc2VsZWN0ZWQuIFRoZSAiQWRkQnVsa0FDTCIgY29uc29sZSBzY3JpcHQgY2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgQUNMcyBmb3Igc2VydmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBjcmVhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpBY2w8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+MCAtIERpc2FibGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPjEgLSBFbmFibGVkPC9JdGVtPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25zIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHByZWNvbmZpZ3VyZSB0aGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgQUNMcy4gVGhlIGFpbSBpcyB0byBvbmx5IGRpc3BsYXkgdGhlIHNlcnZpY2VzIHRoYXQgaGF2ZSBhbHNvIGJlZW4gYXNzaWduZWQgdG8gdGhlIHNlcnZpY2UgaW4gdGhlIHNlcnZpY2UgY2F0YWxvZy4gVG8gdXNlIHRoaXMgZnVuY3Rpb24sIHBsZWFzZSBmaXJzdCBlbmFibGUgdGhlICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscyIgb3B0aW9uLiAiR2VuZXJhdGVJbml0YWxBQ0xUb0Rpc2FibGVBbGxTZXJ2aWNlcyIgZ2VuZXJhdGVzIGFuIEFDTCB0aGF0IGluaXRpYWxseSBoaWRlcyBhbGwgc2VydmljZXMuIFRoZSB2YWx1ZSAiUG9zc2libGUiIG9yICJQb3NzaWJsZUFkZCIgY2FuIGJlIHNldCBmb3IgdGhlIGtleSAiQ29uZmlnQ2hhbmdlIi4gVGhlICJBQ0xEZXBsb3kiIGtleSBkZWNpZGVzIHdoZXRoZXIgdGhlIGNoYW5nZWQgQUNMIHNob3VsZCBhbHNvIGJlIGRlcGxveWVkIGltbWVkaWF0ZWx5LiAiQUNMVmFsaWRJRCIgKDEsIDIsIDMpIHNldHMgdGhlIEFDTHMgdG8gdmFsaWQsIGludmFsaWQgb3IgdGVtcG9yYXJpbHkgaW52YWxpZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkFjbDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGcm9udGVuZEFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5DdXN0b21lclRpY2tldE1lc3NhZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkFnZW50VGlja2V0UGhvbmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkFnZW50VGlja2V0RW1haWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkFnZW50VGlja2V0RnJlZVRleHQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR2VuZXJhdGVJbml0YWxBQ0xUb0Rpc2FibGVBbGxTZXJ2aWNlcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnQ2hhbmdlIj5Qb3NzaWJsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQUNMRGVwbG95Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBQ0xWYWxpZElEIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjOTcwMC1TZXREeW5hbWljRmllbGRDcml0aWNhbGl0eUZyb21TZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkV2ZW50IG1vZHVsZSByZWdpc3RyYXRpb24uIEN1cnJlbnRseSwgdGhlIGNyaXRpY2FsaXR5IG9mIHRoZSBzZXJ2aWNlIGNhbiBhbHNvIGJlIHNldCBpbiB0aGUgc2VydmljZSwgYnV0IHRoaXMgaGFzIG5vIGVmZmVjdC4gVGhlcmVmb3JlLCB0aGlzIGV2ZW50IG1vZHVsZSBoYXMgYmVlbiBpbXBsZW1lbnRlZCB0aGF0IGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgRHluYW1pY0ZpZWxkIENyaXRpY2FsaXR5IGluIGEgdGlja2V0IGFzIHNvb24gYXMgYSBzZXJ2aWNlIGhhcyBiZWVuIGFzc2lnbmVkLiBQbGVhc2UgYWN0aXZhdGUgdGhlIFN5c0NvbmZpZyBvcHRpb24gU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXggdG8gc2V0IHRoZSBwcmlvcml0eSBpbiB0aGUgbmV4dCBzdGVwIGJhc2VkIGFuIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6OlNldER5bmFtaWNGaWVsZENyaXRpY2FsaXR5RnJvbVNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+VGlja2V0U2VydmljZVVwZGF0ZXxUaWNrZXRDcmVhdGU8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpFdmVudE1vZHVsZVBvc3QjIyM5ODAwLVNldFByaW9yaXR5RnJvbUNyaXRpY2FsaXR5QW5kSW1wYWN0TWF0cml4IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkV2ZW50IG1vZHVsZSByZWdpc3RyYXRpb24uIEN1cnJlbnRseSwgdGhlIGNyaXRpY2FsaXR5IG9mIHRoZSBzZXJ2aWNlIGNhbiBhbHNvIGJlIHNldCBpbiB0aGUgc2VydmljZSwgYnV0IHRoaXMgaGFzIG5vIGVmZmVjdC4gVGhlcmVmb3JlLCB0aGlzIGV2ZW50IG1vZHVsZSBoYXMgYmVlbiBpbXBsZW1lbnRlZCB0aGF0IGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcHJpb3JpdHkgcmVnYXJkaW5nIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QgaW4gYSB0aWNrZXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6OlNldFByaW9yaXR5RnJvbUNyaXRpY2FsaXR5QW5kSW1wYWN0TWF0cml4PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPlRpY2tldER5bmFtaWNGaWVsZFVwZGF0ZV9JVFNNQ3JpdGljYWxpdHl8VGlja2V0RHluYW1pY0ZpZWxkVXBkYXRlX0lUU01JbXBhY3Q8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50SVRTTVNlcnZpY2Vab29tIyMjMDAyLVNlcnZpY2VDYXRhbG9nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuSVRTTVNlcnZpY2Vab29tLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4K</File>
        <File Location="Kernel/Language/de_ServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX1NlcnZpY2VDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEFJbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgdG8gJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyBvZiB0aGlzIHNlcnZpY2UuJ30gPSAnWmVpZ2UgZGllIERldGFpbHMgdm9uIGRpZXNlbSBTZXJ2aWNlLic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsaXTDpHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBkZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcgdGlja2V0IHR5cGVzJ30gPSAnRGVyIFNlcnZpY2Ugd2lyZCBmw7xyIGZvbGdlbmRlIFRpY2tldC1UeXBlbiBhbmdlemVpZ3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGRlc3RpbmF0aW9uIHF1ZXVlJ30gPSAnVGlja2V0IFppZWwtUXVldWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgZGVmYXVsdCBzZXJ2aWNlJ30gPSAnU2VydmljZSBmw7xyIGFsbGUgS3VuZGVuIGFuemVpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnU2NobMO8c3NlbHfDtnJ0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBEZXNjcmlwdGlvbid9ID0gJ1NlcnZpY2UtQmVzY2hyZWlidW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgbm90IHByZXNlbnQgb3IgZW5hYmxlZCBvbiB0aGUgc3lzdGVtLiBUaGlzIHNlcnZpY2UgZGVzY3JpcHRpb24gY291bGQgYmUgZGVsZXRlZCBpZiBpdCBpcyBub3QgbmVlZGVkIGFueW1vcmUuJ30gPQogICAgICAgICdEaWVzZSBTcHJhY2hlIGlzdCBuaWNodCB2ZXJmw7xnYmFyIG9kZXIgYXVmIGRlbSBTeXN0ZW0gYWt0aXZpZXJ0LiBEaWUgU2VydmljZS1CZXNjaHJlaWJ1bmcga2FubiBnZWzDtnNjaHQgd2VyZGVuLCBzb2Zlcm4gc2llIG5pY2h0IG1laHIgYmVuw7Z0aWd0IHdpcmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbW92ZSBTZXJ2aWNlIERlc2NyaXB0aW9uIExhbmd1YWdlJ30gPSAnU3ByYWNoZSBkZXIgU2VydmljZS1CZXNjaHJlaWJ1bmcgZW50ZmVybmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZSd9ID0gJ05ldWUgU3ByYWNoZSBkZXIgU2VydmljZS1CZXNjaHJlaWJ1bmcgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3B0aW9uIFJlZmVyZW5jZSd9ID0gJ0tvbmZpZ3VyYXRpb25zcmVmZXJlbnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zJ30gPSAnRGllIGZvbGdlbmRlbiBPcHRpb25lbiBrw7ZubmVuIHZlcndlbmRldCB3ZXJkZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aGluIHRoZSBTZXJ2aWNlQ2F0YWxvZ3VlIHRpbGUgaW4gdGhlIGN1c3RvbWVyIGRhc2hib2FyZCwgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aWNrZXQgdHlwZXMgZm9yIHByZWNvbmZpZ3VyZWQgdGlja2V0IGNyZWF0aW9uIGluc2lkZSB0aGUgc2VydmljZSBkZXNjcmlwdGlvbi4gRnVydGhlcm1vcmUsIGl0IGlzIHBvc3NpYmxlIHRvIHJlc3RyaWN0IHRoZSBzZXJ2aWNlcyBmb3Igb3RoZXIgc2NyZWVucyB1c2luZyB0aGUgdGlja2V0IHR5cGVzIHNldCBoZXJlLiBJZiB5b3Ugd2lzaCB0byBkbyB0aGlzLCBwbGVhc2UgYWN0aXZhdGUgdGhlIG9wdGlvbnMgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzIiBhbmQgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25zIiBpbiB0aGUgT1RPQk8gc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSByZXN0cmljdGlvbiBpcyBtYWRlIHZpYSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBBQ0xzLCB3aGljaCBjYW4gYmUgdmlld2VkIHVuZGVyICJBZG1pbiAtPiBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMKSIuIElmIG5lY2Vzc2FyeSwgcGxlYXNlIGFkanVzdCB0aGUgb3B0aW9uICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNsczo6T3B0aW9ucyIgYWNjb3JkaW5nIHRvIHlvdXIgcmVxdWlyZW1lbnRzLid9ID0KICAgICAgICAnSW5uZXJoYWxiIGRlciBTZXJ2aWNla2F0YWxvZy1LYWNoZWwgaW0gS3VuZGVuLURhc2hib2FyZCBpc3QgZXMgbcO2Z2xpY2gsIFRpY2tldHR5cGVuIGluIGRlciBTZXJ2aWNlLUJlc2NocmVpYnVuZyBmw7xyIGVpbmUgdm9ya29uZmlndXJpZXJ0ZSBUaWNrZXRlcnN0ZWxsdW5nIGFuenV6ZWlnZW4uIFdlaXRlcmhpbiBpc3QgZXMgbcO2Z2xpY2gsIGRpZSBTZXJ2aWNlcyBmw7xyIGFuZGVyZSBPYmVyZmzDpGNoZW4gZWluenVzY2hyw6Rua2VuLCBhdWYgR3J1bmRsYWdlIGRlciBoaWVyIHZlcndlbmRldGVuIFRpY2tldHR5cGVuLiBJc3QgZGllc2VzIHZlcmhhbHRlbiBnZXfDvG5zY2h0LCBiaXR0ZSBkaWUgRWluc3RlbGx1bmdlbiAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHMiIHVuZCAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnMiIGluIGRlciBPVE9CTyBTeXN0ZW1rb25maWd1cmF0aW9uIGFrdGl2aWVyZW4uIERpZXNlIEVpbnNjaHLDpG5rdW5nIHdpcmQgw7xiZXIgYXV0b21hdGlzY2ggZXJzdGVsbHRlIEFDTHMgdW1nZXNldHp0LCBkaWUgdW50ZXIgIkFkbWluIC0+IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0wpIiBhbmdlc2VoZW4gd2VyZGVuIGvDtm5uZW4uIFNvZmVybiBuw7Z0aWcsIGJpdHRlIGRpZSBFaW5zdGVsbHVuZyAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnMiIGFuIGRpZSBBbmZvcmRlcnVuZ2VuIGFucGFzc2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB3ZSB3b3JrIHNlcnZpY2UtYmFzZWQsIHdlIGRvIG5vdCB3YW50IHRvIG9mZmVyIHRoZSBjdXN0b21lciBhIGNob2ljZSBvZiBxdWV1ZXMgaW4gdGhlIGN1c3RvbWVyIHBvcnRhbCB3aGVuIGNyZWF0aW5nIGEgdGlja2V0LCBidXQgZGVjaWRlIG9uIHRoZSBiYXNpcyBvZiB0aGUgc2VydmljZSBpbnRvIHdoaWNoIHF1ZXVlIChvciB3aGljaCB0ZWFtIG9mIGFnZW50cykgdGhlIHRpY2tldCBzaG91bGQgYmUgcHJvY2Vzc2VkIGZpcnN0LiBJbiBvcmRlciB0byB1c2UgdGhpcyBvcHRpb24gc2Vuc2libHksIHBsZWFzZSBkZWFjdGl2YXRlIHRoZSBvcHRpb24gIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSMjI1F1ZXVlIiBhbmQgc2V0IGEgc2Vuc2libGUgZGVmYXVsdCBxdWV1ZSBpbiB0aGUgb3B0aW9uICJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNRdWV1ZURlZmF1bHQiLiBBcyBzb29uIGFzIHlvdSBzZXQgYSAiVGlja2V0IGRlc3RpbmF0aW9uIHF1ZXVlIiBoZXJlIGluIHRoZSBzZXJ2aWNlLCB0aGUgdGlja2V0IHdpbGwgaW1tZWRpYXRlbHkgYmUgY3JlYXRlZCBpbiB0aGlzIHF1ZXVlLiBJZiB0aGUgZmllbGQgcmVtYWlucyBlbXB0eSwgdGhlIGRlZmF1bHQgcXVldWUgY29uZmlndXJlZCBhYm92ZSB3aWxsIGJlIHVzZWQuJ30gPQogICAgICAgICdTb2Zlcm4gU2VyaXZjZS1iYXNpZXJ0IGdlYXJiZWl0ZXQgd2lyZCwgc29sbCBkZW0gS3VuZGVuIGltIEt1bmRlbnBvcnRhbCB3w6RocmVuZCBkZXIgVGlja2V0ZXJzdGVsbHVuZyB6d2FyIGVpbmUgQXVzd2FobCBkZXIgUXVldWVzIGFuZ2V6ZWlndCB3ZXJkZW4sIGplZG9jaCBzb2xsIGRpZSBFbnRzY2hlaWR1bmcgLCBpbiB3ZWxjaGVyIFF1ZXVlIChvZGVyIHdlbGNoZW0gQWdlbnRlbi1UZWFtKSBkYXMgVGlja2V0IHp1bsOkY2hzdCBiZWFyYmVpdGV0IHdlcmRlbiBzb2xsLCBhdWYgQmFzaXMgZGVzIFNlcnZpY2UgZ2V0cm9mZmVuIHdlcmRlbi4gVW0gZGllc2UgT3B0aW9uIHZlcm7DvG5mdGlnIHp1IHZlcndlbmRlbiwgc29sbHRlIGRpZSBFaW5zdGVsbHVuZyAiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIyMjUXVldWUiIGRlYWt0aXZpZXJ0IHdlcmRlbiB1bmQgZWluZSBzaW5udm9sbGUgU3RhbmRhcmQtUXVldWUgaW4gZGVyIEVpbnN0ZWxsdW5nICJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNRdWV1ZURlZmF1bHQiIGdlc2V0enQgd2VyZGVuLiBTb2JhbGQgaGllciBpbSBTZXJ2aWNlIGVpbmUgIlRpY2tldCBaaWVsLVF1ZXVlIiBlaW5nZXN0ZWxsdCB3dXJkZSwgd2lyZCBkYXMgVGlja2V0IHVubWl0dGVsYmFyIGluIGRpZXNlciBRdWV1ZSBlcnN0ZWxsdC4gU29mZXJuIGRhcyBGZWxkIGxlZXIgYmxlaWJ0LCB3aXJkIGRpZSBvYmVuIGdlc2V0enRlIERlZmF1bHQtUXVldWUgdmVyd2VuZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3UgZG8gbm90IGFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lcnMgb3IgY29tcGFuaWVzIGluZGl2aWR1YWxseSwgYnV0IGFsbCBzZXJ2aWNlcyBhcmUgaW5pdGlhbGx5IG9mZmVyZWQgdG8geW91ciBjdXN0b21lcnMgZm9yIHNlbGVjdGlvbiwgdGhlIHN0ZXAgb2YgcmVsZWFzaW5nIGVhY2ggc2VydmljZSBhcyBhICJkZWZhdWx0IiBzZXJ2aWNlIHVuZGVyICJBZG1pbiAtPiBDdXN0b21lciB1c2VyIDwtPiBTZXJ2aWNlIiAob3IgIkN1c3RvbWVyIDwtPiBTZXJ2aWNlIikgY2FuIGJlIGJ5cGFzc2VkIGhlcmUuIE9mIGNvdXJzZSwgaW4gdGhlIG5leHQgc3RlcCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgdmlhIEFDTHMuJ30gPQogICAgICAgICdTb2Zlcm4gZGVuIEt1bmRlbmJlbnV0emVybiBvZGVyIEt1bmRlbiAoRmlybWVuKSBrZWluZSBTZXJ2aWNlcyBpbmRpdmlkdWVsbCB6dWdlb3JkbmV0IHdlcmRlbiwgYWJlciBhbGxlIFNlcnZpY2VzIGRlbiBLdW5kZW4genVyIEF1c3dhaGwgYW5nZWJvdGVuIHdlcmRlbiwga2FubiBkZXIgU2Nocml0dGUgYWxsZSBTZXJ2aWNlcyBhbHMgIlN0YW5kYXJkIi1TZXJ2aWNlIHVudGVyICJBZG1pbiAtPiBLdW5kZW5iZW51dHplciA8LT4gU2VydmljZSIgKGJ6dy4gIkFkbWluIC0+IEt1bmRlIDwtPiBTZXJ2aWNlIikgaGllciB1bWdhbmdlbiB3ZXJkZW4uIE5hdMO8cmxpY2ggaXN0IGVzIGltIG7DpGNoc3RlbiBTY2hyaXR0IG3DtmdsaWNoLCBkaWUgU2VydmljZXMgdmlhIEFDTHMgZWluenVzY2hyw6Rua2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIZXJlLCB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgdG8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgdGlja2V0IHByaW9yaXR5IGluIHRoZSBiYWNrZ3JvdW5kIGJhc2VkIG9uIHRoZSBkeW5hbWljIGZpZWxkICJJVFNNQ3JpdGljYWxpdHkiIGFuZCAiSVRTTUltcGFjdCIuIFBsZWFzZSBhY3RpdmF0ZSB0aGUgb3B0aW9uICJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk3MDAtU2V0RHluYW1pY0ZpZWxkQ3JpdGljYWxpdHlGcm9tU2VydmljZSIgYW5kIHRoZSBvcHRpb24gIlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjOTgwMC1TZXRQcmlvcml0eUZyb21Dcml0aWNhbGl0eUFuZEltcGFjdE1hdHJpeCIuIEluIHRoZSBuZXh0IHN0ZXAsIHlvdSBoYXZlIHRoZSBwb3NzaWJpbGl0eSB1c2luZyAiQWRtaW4gLT4gQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHkiIHRvIHNldCB0aGUgcHJpb3JpdHkgdXNpbmcgYSBtYXRyaXguJ30gPQogICAgICAgICdIaWVyIGdpYnQgZXMgZGllIE3DtmdsaWNoa2VpdCwgZGllIGtvcnJla3RlIFRpY2tldC1Qcmlvcml0w6R0IGJhc2llcmVuZCBhdWYgZGVuIER5bmFtaXNjaGVuIEZlbGRlcm4gIklUU01Dcml0aWNhbGl0eSIgdW5kICJJVFNNSW1wYWN0IiBpbSBIaW50ZXJncnVuZCB6dSBiZXJlY2huZW4uIEhpZXJmw7xyIGJpdHRlIGRpZSBFaW5zdGVsbHVuZyJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk3MDAtU2V0RHluYW1pY0ZpZWxkQ3JpdGljYWxpdHlGcm9tU2VydmljZSIgdW5kIGRpZSBFaW5zdGVsbHVuZyAiVGlja2V0OjpFdmVudE1vZHVsZVBvc3QjIyM5ODAwLVNldFByaW9yaXR5RnJvbUNyaXRpY2FsaXR5QW5kSW1wYWN0TWF0cml4IiBha3RpdmllcmVuLiBJbSBuw6RjaHN0ZW4gU2Nocml0dCBnaWJ0IGVzIGRpZSBNw7ZnbGljaGtlaXQgZGllIFByaW9yaXTDpHQgaW4gZWluZXIgTWF0cml4IHVudGVyICJBZG1pbiAtPiBLcml0aWthbGl0w6R0IOKGlCBBdXN3aXJrdW5nIOKGlCBQcmlvcml0w6R0IiB6dSBzZXR6ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzIHRvIGZhY2lsaXRhdGUgdGhlIHNlYXJjaCBmb3Igc2VydmljZXMgd2l0aGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cuJ30gPQogICAgICAgICdTY2hsw7xzc2Vsd8O2cnRlciB1bSBkaWUgU3VjaGUgbmFjaCBTZXJ2aWNlcyBpbm5lcmhhbGIgZGVzIFNlcnZpY2VrYXRhbG9ncyB6dSBlcmxlaWNodGVybi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBkZXNjcmlwdGlvbnMgKHNob3J0ICYgbG9uZykgc3BlY2lmaWVkIGJ5IFVzZXIgTGFuZ3VhZ2UuJ30gPQogICAgICAgICdTZXJ2aWNlLUJlc2NocmVpYnVuZyAoa3VyeiB1bmQgbGFuZyksIGZlc3RnZWxlZ3QgZHVyY2ggZGllIEFud2VuZGVyc3ByYWNoZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvcnQgc3VtbWFyeSBvZiB0aGUgc2VydmljZSwgbWFpbmx5IHVzZWQgaW4gdGhlIEN1c3RvbWVyRGFzaGJvYXJkLid9ID0KICAgICAgICAnS3VyemJlc2NocmVpYnVuZyBkZXMgU2VydmljZSwgdm9yIGFsbGVtIHZlcndlbmRldCBpbSBEaWFsb2cgQ3VzdG9tZXJEYXNoYm9hcmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLiBTY3JlZW5zaG90cyBhbmQgdGFibGVzIGFyZSBhbHNvIGFsbG93ZWQuIFBsZWFzZSBlbnN1cmUgdGhlIGNvcnJlY3Qgd2lkdGggb2YgdGhlIGltYWdlIGZvciBzY3JlZW5zaG90cy4gVGhpcyBjYW4gYmUgYWRqdXN0ZWQgaW4gdGhlIGNrZWRpdG9yIGFmdGVyIHVwbG9hZGluZyB0aGUgc2NyZWVuc2hvdC4gQSB3aWR0aCBvZiA2MDBweCBoYXMgcHJvdmVuIHRvIGJlIHVzZWZ1bCBvciB5b3UgY2FuIGNvbmZpZ3VyZSBhICJtYXgtd2lkdGgiIG9mIDk1JSB1bmRlciBBZHZhbmNlZC4nfSA9CiAgICAgICAgJ0Jlc2NocmVpYnVuZyBkZXMgU2VydmljZS4gU2NyZWVuc2hvdHMgdW5kIFRhYmVsbGVuIHNpbmQgYXVjaCBlcmxhdWJ0LiBCaXR0ZSBzaWNoZXJzdGVsbGVuLCBkYXNzIGRpZSBrb3JyZWt0ZSBCaWxkYnJlaXRlIGbDvHIgU2NyZWVuc2hvdHMgdmVyd2VuZGV0IHdpcmQuICBEaWVzZSBrYW5uIG5hY2ggZGVtIEhvY2hsYWRlbiBkZXMgU2NyZWVuc2hvdHMgaW0gRWRpdG9yIGFuZ2VwYXNzdCB3ZXJkZW4uIEVpbmUgQnJlaXRlIHZvbiA2MDBweCB3dXJkZSBhbHMgc2lubnZvbGwgZXJhY2h0ZXQuIEFsdGVybmF0aXYga2FubiB1bnRlciAiRXJ3ZWl0ZXJ0IiBlaW5lIE1heGltYWxicmVpdGUgdm9uIDk1JSBrb25maWd1cmllcnQgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbW9yZSBzZXJ2aWNlIGNhdGFsb2cgZmllbGRzJ30gPSAnV2VpdGVyZSBTZXJ2aWNla2F0YWxvZy1GZWxkZXIgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgdGhlIG9wdGlvbiBvZiBhZGRpbmcgZnVydGhlciBmaWVsZHMgaGVyZSBpbiB0aGUgc2VydmljZSBjYXRhbG9nIGF0IGFueSB0aW1lLiBUbyBkbyB0aGlzLCBwbGVhc2UgZ28gdG8gIkFkbWluIC0+IER5bmFtaWNGaWVsZHMiIGFuZCBjcmVhdGUgdGhlIG5ldyBmaWVsZCBvZiB0aGUgb2JqZWN0IHR5cGUgIlNlcnZpY2UiLiBZb3UgY2FuIHRoZW4gYWN0aXZhdGUgdGhlIGZpZWxkIGZvciB0aGUgY3VzdG9tZXIgZGFzaGJvYXJkIHVuZGVyICJBZG1pbiAtPiBEeW5hbWljRmllbGQgU2NyZWVucyIgYnkgYXNzaWduaW5nIGl0IHVuZGVyICJDdXN0b21lckRhc2hib2FyZFRpbGUgU2VydmljZUNhdGFsb2ciLid9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEtSW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdadWxldHp0IGdlw6RuZGVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdadWxldHp0IGdlw6RuZGVydCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdadWdlaMO2cmlnZSBTZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdTZXJ2aWNlLUluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0FrdHVlbGxlciBWb3JmYWxsc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1p1Z2Vow7ZyaWdlIFNMQXMnOwoKICAgICMgSlMgVGVtcGxhdGU6IFRpbGVTZXJ2aWNlQ2F0YWxvZ0NvbnRhaW5lcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgbmV3IHRpY2tldCBmb3IgdGhpcyBzZXJ2aWNlLid9ID0gJ05ldWVzIFRpY2tldCBmw7xyIGRpZXNlbiBTZXJ2aWNlIGhpbnp1ZsO8Z2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgJXMnfSA9ICclcyBlcnN0ZWxsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAlcyBzdWItc2VydmljZShzKSd9ID0gJ1plaWdlICVzIFVudGVyLVNlcnZpY2UocyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9yZSBkZXRhaWxzJ30gPSAnV2VpdGVyZSBEZXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Yi1TZXJ2aWNlKHMpJ30gPSAnVW50ZXItU2VydmljZShzKSc7CgogICAgIyBKUyBUZW1wbGF0ZTogVGlsZVNlcnZpY2VDYXRhbG9nRGV0YWlsZWQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3N1Yi1zZXJ2aWNlKHMpIGF2YWlsYWJsZSd9ID0gJ3ZlcmbDvGdiYXJlKHIpIFVudGVyc2VydmljZShzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBuZXcgdGlja2V0IG9mIHR5cGUgJXMuJ30gPSAnRWluIG5ldWVzIFRpY2tldCB2b20gVHlwICVzIGVyc3RlbGxlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGUgb24gdGhpcyB0b3BpYyd9ID0gJ0ZBUS1BcnRpa2VsIHp1IGRpZXNlbSBUaGVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRpdGlvbmFsIGluZm9ybWF0aW9uJ30gPSAnWnVzw6R0emxpY2hlIEluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBob3Vycyd9ID0gJ1NlcnZpY2UtWmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29cJ2Nsb2NrJ30gPSAnVWhyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFkZGl0aW9uYWwgZGF0YSBhcmUgYXZhaWxhYmxlLid9ID0gJ0VzIHNpbmQga2VpbmUgd2VpdGVyZW4gRGF0ZW4gdmVyZsO8Z2Jhci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVydGhlciBpbmZvcm1hdGlvbid9ID0gJ1dlaXRlcmUgSW5mb3JtYXRpb25lbic7CgogICAgIyBKUyBUZW1wbGF0ZTogVGlsZVNlcnZpY2VDYXRhbG9nTW9kYWwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjYXRhbG9nJ30gPSAnU3VjaGthdGFsb2cnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0N1c3RvbWVyVGlsZVNlcnZpY2VDYXRhbG9nLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNjcmlwdGlvbiBub3QgYXZhaWxhYmxlLid9ID0gJ0Jlc2NocmVpYnVuZyBuaWNodCB2ZXJmw7xnYmFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIEZpbGVJRCEnfSA9ICdCZW7DtnRpZ2UgRmlsZUlEISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICdLZWluZSBTZXJ2aWNlSUQgdm9yaGFuZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1NlcnZpY2VJRCAlcyBuaWNodCBpbiBEYXRlbmJhbmsgZ2VmdW5kZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnb3BlcmF0aXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJ1dhcm51bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICdWb3JmYWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZT8nfSA9CiAgICAgICAgJ1NvbGwgZGllc2UgU3ByYWNoZSBkZXIgU2VydmljZS1CZXNjaHJlaWJ1bmcgd2lya2xpY2ggZ2Vsw7ZzY2h0IHdlcmRlbj8nOwoKICAgICMgSlMgRmlsZTogQ29yZS5DdXN0b21lci5UaWxlU2VydmljZUNhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3VsdHMgZm9yICVzJ30gPSAnRXJnZWJuaXNzZSBmw7xyICVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHNlcnZpY2UgY2F0YWxvZy4nfSA9ICdadXPDpHR6bGljaGUgRWluc3RlbGx1bmdlbiBmw7xyIGRlbiBTZXJ2aWNla2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cgQUpBWCBNb2R1bGUuJ30gPSAnQ3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cgQUpBWCBNb2R1bC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGEgbGlzdCBvZiBkeW5hbWljIGZpZWxkIG9iamVjdCB0eXBlcyB3aGljaCBhcmUgYWxsb3dlZCB0byBiZSBhc3NpZ25lZCB0byBhY3Rpb25zIG9mIHRoaXMgcGFja2FnZSB2aWEgdGhlIGR5bmFtaWMgZmllbGQgc2NyZWVucyBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHNlcnZpY2UgY2F0YWxvZyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0R5bmFtaXNjaGUgRmVsZGVyLCBkaWUgaW4gZGVyIFNlcnZpY2VrYXRhbG9nLU9iZXJmbMOkY2hlIGRlcyBLdW5kZW5iZXJlaWNocyBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBDdXJyZW50bHksIHRoZSBjcml0aWNhbGl0eSBvZiB0aGUgc2VydmljZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIHNlcnZpY2UsIGJ1dCB0aGlzIGhhcyBubyBlZmZlY3QuIFRoZXJlZm9yZSwgdGhpcyBldmVudCBtb2R1bGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIER5bmFtaWNGaWVsZCBDcml0aWNhbGl0eSBpbiBhIHRpY2tldCBhcyBzb29uIGFzIGEgc2VydmljZSBoYXMgYmVlbiBhc3NpZ25lZC4gUGxlYXNlIGFjdGl2YXRlIHRoZSBTeXNDb25maWcgb3B0aW9uIFNldFByaW9yaXR5RnJvbUNyaXRpY2FsaXR5QW5kSW1wYWN0TWF0cml4IHRvIHNldCB0aGUgcHJpb3JpdHkgaW4gdGhlIG5leHQgc3RlcCBiYXNlZCBhbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0Lid9ID0KICAgICAgICAnRXZlbnQtTW9kdWxyZWdpc3RyaWVydW5nLiBNb21lbnRhbiBrYW5uIGRpZSBLcml0aWthbGl0w6R0IGRlcyBTZXJ2aWNlIGF1Y2ggaW0gU2VydmljZSBmZXN0Z2VsZWd0IHdlcmRlbiwgaGF0IGFsbGVyZGluZ3Mga2VpbmUgV2lya3VuZy4gRGFoZXIgd3VyZGUgZGllc2VzIEV2ZW50LU1vZHVsIGltcGxlbWVudGllcnQsIGRhcyBhdXRvbWF0aXNjaCBkYXMgRHluYW1pc2NoZSBGZWxkIEtyaXRpa2FsaXTDpHQgaW4gZWluZW0gVGlja2V0IGFrdHVhbGlzaWVydCwgc29iYWxkIGVpbiBTZXJ2aWNlIHp1Z2VvcmRuZXQgd3VyZGUuIEJpdHRlIGRpZSBTeXN0ZW1rb25maWd1cmF0aW9ucy1FaW5zdGVsbHVuZyAiU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXgiIGFrdGl2aWVyZW4sIHVtIGRpZSBQcmlvcml0w6R0IGF1ZiBCYXNpcyBkZXIgS3JpdGlrYWxpdMOkdCB1bmQgZGllIEF1c3dpcmt1bmcgaW0gbsOkY2hzdGVuIFNjaHJpdHQgenUgc2V0emVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBDdXJyZW50bHksIHRoZSBjcml0aWNhbGl0eSBvZiB0aGUgc2VydmljZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIHNlcnZpY2UsIGJ1dCB0aGlzIGhhcyBubyBlZmZlY3QuIFRoZXJlZm9yZSwgdGhpcyBldmVudCBtb2R1bGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHByaW9yaXR5IHJlZ2FyZGluZyBDcml0aWNhbGl0eSBhbmQgSW1wYWN0IGluIGEgdGlja2V0Lid9ID0KICAgICAgICAnRXZlbnQtTW9kdWxyZWdpc3RyaWVydW5nLiBNb21lbnRhbiBrYW5uIGRpZSBLcml0aWthbGl0w6R0IGRlcyBTZXJ2aWNlIGF1Y2ggaW0gU2VydmljZSBmZXN0Z2VsZWd0IHdlcmRlbiwgaGF0IGFsbGVyZGluZ3Mga2VpbmUgV2lya3VuZy4gRGFoZXIgd3VyZGUgZGllc2VzIEV2ZW50LU1vZHVsIGltcGxlbWVudGllcnQsIGRhcyBhdXRvbWF0aXNjaCBkaWUgUHJpb3JpdMOkdCB1bmQgZGllIEF1c3dpcmt1bmcgaW4gZWluZW0gVGlja2V0IGFrdHVhbGlzaWVydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmluZCB0aGUgcmlnaHQgc2VydmljZSBmb3IgeW91ciB0aWNrZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBzZXJ2aWNlcyB3aXRoIHRoZSBmb2xsb3dpbmcgdGlja2V0IHR5cGUgbGFzdC4nfSA9ICdTZXJ2aWNlcyBtaXQgZGVtIGZvbGdlbmRlbiBUaWNrZXR0eXBlbiB6dWxldHp0IGFuemVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgRkFRIGZpZWxkIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIEZBUSBhcnRpY2xlIGluIHRoZSBzaWRlYmFyIChlLmcuIEZpZWxkMSwgRmllbGQyLCBGaWVsZDMuLi4pLid9ID0KICAgICAgICAnRGFzIEZBUS1GZWxkLCB3ZWxjaGVzIGluIGRlciBCZXNjaHJlaWJ1bmcgZWluZXMgRkFRLUFydGlrZWwgaW4gZGVyIFNlaXRlbmxlaXN0ZSBhbmdlemVpZ3Qgd2VyZGVuIHNvbGwgKHouQi4gRmllbGQxLCBGaWVsZDIsIEZpZWxkMywgLi4uKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIEFDTHMgZm9yIGRpZmZlcmVudCBpbnRlcmZhY2VzIHdoZW4gY3JlYXRpbmcgc2VydmljZXMuIFNlcnZpY2VzIHdpbGwgdGhlbiBvbmx5IGJlIGRpc3BsYXllZCBpZiB0aGUgdGlja2V0IHR5cGUgc3RvcmVkIGluIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGUgIkFkZEJ1bGtBQ0wiIGNvbnNvbGUgc2NyaXB0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIEFDTHMgZm9yIHNlcnZpY2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlLid9ID0KICAgICAgICAnRGllc2UgT3B0aW9uIGVybcO2Z2xpY2h0IGVzLCBkYXNzIGJlaSBkZXIgU2VydmljZS1FcnN0ZWxsdW5nIGF1dG9tYXRpc2NoIEFDTHMgZsO8ciB2ZXJzY2hpZWRlbmUgT2JlcmZsw6RjaGVuIGdlbmVyaWVydCB3ZXJkZW4uIFNlcnZpY2VzIHdlcmRlbiBkYW5uIG51ciBhbmdlemVpZ3QsIHNvYmFsZCBkZXIgaW0gU2VydmljZSBnZXNwZWljaGVydGUgVGlja2V0dHlwIGF1c2dld8OkaGx0IHd1cmRlLiBEYXMgS29uc29sZW5za3JpcHQgIkFkZEJ1bGtBQ0wiIGthbm4gYXVjaCBmw7xyIGRpZSBBQ0wtRXJzdGVsbHVuZyBmw7xyIGRpZSBTZXJ2aWNlcyB2ZXJ3ZW5kZXQgd2VyZGVuLCBkaWUgYmVyZWl0cyB2b3IgZGllc2VyIEFrdGl2aWVydW5nIGVyc3RlbGx0IHd1cmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBvcHRpb24gbWFrZXMgaXQgcG9zc2libGUgdG8gcHJlY29uZmlndXJlIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBBQ0xzLiBUaGUgYWltIGlzIHRvIG9ubHkgZGlzcGxheSB0aGUgc2VydmljZXMgdGhhdCBoYXZlIGFsc28gYmVlbiBhc3NpZ25lZCB0byB0aGUgc2VydmljZSBpbiB0aGUgc2VydmljZSBjYXRhbG9nLiBUbyB1c2UgdGhpcyBmdW5jdGlvbiwgcGxlYXNlIGZpcnN0IGVuYWJsZSB0aGUgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzIiBvcHRpb24uICJHZW5lcmF0ZUluaXRhbEFDTFRvRGlzYWJsZUFsbFNlcnZpY2VzIiBnZW5lcmF0ZXMgYW4gQUNMIHRoYXQgaW5pdGlhbGx5IGhpZGVzIGFsbCBzZXJ2aWNlcy4gVGhlIHZhbHVlICJQb3NzaWJsZSIgb3IgIlBvc3NpYmxlQWRkIiBjYW4gYmUgc2V0IGZvciB0aGUga2V5ICJDb25maWdDaGFuZ2UiLiBUaGUgIkFDTERlcGxveSIga2V5IGRlY2lkZXMgd2hldGhlciB0aGUgY2hhbmdlZCBBQ0wgc2hvdWxkIGFsc28gYmUgZGVwbG95ZWQgaW1tZWRpYXRlbHkuICJBQ0xWYWxpZElEIiAoMSwgMiwgMykgc2V0cyB0aGUgQUNMcyB0byB2YWxpZCwgaW52YWxpZCBvciB0ZW1wb3JhcmlseSBpbnZhbGlkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQ3VzdG9tZXJEYXNoYm9hcmQuIE1vZHVsZSBpcyByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0FkZGl0aW9uYWwgaW5mb3JtYXRpb24nLAogICAgJ0FsbCcsCiAgICAnQ2xvc2UgdGhpcyBkaWFsb2cnLAogICAgJ0NyZWF0ZSAlcycsCiAgICAnQ3JlYXRlIFRpY2tldCcsCiAgICAnQ3JlYXRlIGEgbmV3IHRpY2tldCBmb3IgdGhpcyBzZXJ2aWNlLicsCiAgICAnQ3JlYXRlIGEgbmV3IHRpY2tldCBvZiB0eXBlICVzLicsCiAgICAnRGV0YWlscycsCiAgICAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2U/JywKICAgICdGQVEgYXJ0aWNsZSBvbiB0aGlzIHRvcGljJywKICAgICdGaXJzdCBSZXNwb25zZSBUaW1lJywKICAgICdGdXJ0aGVyIGluZm9ybWF0aW9uJywKICAgICdNb3JlIGRldGFpbHMnLAogICAgJ05vIGFkZGl0aW9uYWwgZGF0YSBhcmUgYXZhaWxhYmxlLicsCiAgICAnT0snLAogICAgJ1Jlc3VsdHMnLAogICAgJ1Jlc3VsdHMgZm9yICVzJywKICAgICdTZWFyY2gnLAogICAgJ1NlYXJjaCBjYXRhbG9nJywKICAgICdTZXJ2aWNlIEluZm9ybWF0aW9uJywKICAgICdTZXJ2aWNlIGhvdXJzJywKICAgICdTaG93ICVzIHN1Yi1zZXJ2aWNlKHMpJywKICAgICdTaG93IGRldGFpbHMgb2YgdGhpcyBzZXJ2aWNlLicsCiAgICAnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50JywKICAgICdTb2x1dGlvbiBUaW1lJywKICAgICdTdWItU2VydmljZShzKScsCiAgICAnaG91cihzKScsCiAgICAnb1wnY2xvY2snLAogICAgJ3N1Yi1zZXJ2aWNlKHMpIGF2YWlsYWJsZScsCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/es_ServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX1NlcnZpY2VDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEFJbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgdG8gJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyBvZiB0aGlzIHNlcnZpY2UuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZGVwZW5kcyBvbiB0aGUgZm9sbG93aW5nIHRpY2tldCB0eXBlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZGVzdGluYXRpb24gcXVldWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgZGVmYXVsdCBzZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyBub3QgcHJlc2VudCBvciBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoaXMgc2VydmljZSBkZXNjcmlwdGlvbiBjb3VsZCBiZSBkZWxldGVkIGlmIGl0IGlzIG5vdCBuZWVkZWQgYW55bW9yZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1vdmUgU2VydmljZSBEZXNjcmlwdGlvbiBMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3B0aW9uIFJlZmVyZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aGluIHRoZSBTZXJ2aWNlQ2F0YWxvZ3VlIHRpbGUgaW4gdGhlIGN1c3RvbWVyIGRhc2hib2FyZCwgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aWNrZXQgdHlwZXMgZm9yIHByZWNvbmZpZ3VyZWQgdGlja2V0IGNyZWF0aW9uIGluc2lkZSB0aGUgc2VydmljZSBkZXNjcmlwdGlvbi4gRnVydGhlcm1vcmUsIGl0IGlzIHBvc3NpYmxlIHRvIHJlc3RyaWN0IHRoZSBzZXJ2aWNlcyBmb3Igb3RoZXIgc2NyZWVucyB1c2luZyB0aGUgdGlja2V0IHR5cGVzIHNldCBoZXJlLiBJZiB5b3Ugd2lzaCB0byBkbyB0aGlzLCBwbGVhc2UgYWN0aXZhdGUgdGhlIG9wdGlvbnMgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzIiBhbmQgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25zIiBpbiB0aGUgT1RPQk8gc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSByZXN0cmljdGlvbiBpcyBtYWRlIHZpYSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBBQ0xzLCB3aGljaCBjYW4gYmUgdmlld2VkIHVuZGVyICJBZG1pbiAtPiBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMKSIuIElmIG5lY2Vzc2FyeSwgcGxlYXNlIGFkanVzdCB0aGUgb3B0aW9uICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNsczo6T3B0aW9ucyIgYWNjb3JkaW5nIHRvIHlvdXIgcmVxdWlyZW1lbnRzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHdlIHdvcmsgc2VydmljZS1iYXNlZCwgd2UgZG8gbm90IHdhbnQgdG8gb2ZmZXIgdGhlIGN1c3RvbWVyIGEgY2hvaWNlIG9mIHF1ZXVlcyBpbiB0aGUgY3VzdG9tZXIgcG9ydGFsIHdoZW4gY3JlYXRpbmcgYSB0aWNrZXQsIGJ1dCBkZWNpZGUgb24gdGhlIGJhc2lzIG9mIHRoZSBzZXJ2aWNlIGludG8gd2hpY2ggcXVldWUgKG9yIHdoaWNoIHRlYW0gb2YgYWdlbnRzKSB0aGUgdGlja2V0IHNob3VsZCBiZSBwcm9jZXNzZWQgZmlyc3QuIEluIG9yZGVyIHRvIHVzZSB0aGlzIG9wdGlvbiBzZW5zaWJseSwgcGxlYXNlIGRlYWN0aXZhdGUgdGhlIG9wdGlvbiAiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIyMjUXVldWUiIGFuZCBzZXQgYSBzZW5zaWJsZSBkZWZhdWx0IHF1ZXVlIGluIHRoZSBvcHRpb24gIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSMjI1F1ZXVlRGVmYXVsdCIuIEFzIHNvb24gYXMgeW91IHNldCBhICJUaWNrZXQgZGVzdGluYXRpb24gcXVldWUiIGhlcmUgaW4gdGhlIHNlcnZpY2UsIHRoZSB0aWNrZXQgd2lsbCBpbW1lZGlhdGVseSBiZSBjcmVhdGVkIGluIHRoaXMgcXVldWUuIElmIHRoZSBmaWVsZCByZW1haW5zIGVtcHR5LCB0aGUgZGVmYXVsdCBxdWV1ZSBjb25maWd1cmVkIGFib3ZlIHdpbGwgYmUgdXNlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3UgZG8gbm90IGFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lcnMgb3IgY29tcGFuaWVzIGluZGl2aWR1YWxseSwgYnV0IGFsbCBzZXJ2aWNlcyBhcmUgaW5pdGlhbGx5IG9mZmVyZWQgdG8geW91ciBjdXN0b21lcnMgZm9yIHNlbGVjdGlvbiwgdGhlIHN0ZXAgb2YgcmVsZWFzaW5nIGVhY2ggc2VydmljZSBhcyBhICJkZWZhdWx0IiBzZXJ2aWNlIHVuZGVyICJBZG1pbiAtPiBDdXN0b21lciB1c2VyIDwtPiBTZXJ2aWNlIiAob3IgIkN1c3RvbWVyIDwtPiBTZXJ2aWNlIikgY2FuIGJlIGJ5cGFzc2VkIGhlcmUuIE9mIGNvdXJzZSwgaW4gdGhlIG5leHQgc3RlcCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgdmlhIEFDTHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGVyZSwgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgYmFja2dyb3VuZCBiYXNlZCBvbiB0aGUgZHluYW1pYyBmaWVsZCAiSVRTTUNyaXRpY2FsaXR5IiBhbmQgIklUU01JbXBhY3QiLiBQbGVhc2UgYWN0aXZhdGUgdGhlIG9wdGlvbiAiVGlja2V0OjpFdmVudE1vZHVsZVBvc3QjIyM5NzAwLVNldER5bmFtaWNGaWVsZENyaXRpY2FsaXR5RnJvbVNlcnZpY2UiIGFuZCB0aGUgb3B0aW9uICJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk4MDAtU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXgiLiBJbiB0aGUgbmV4dCBzdGVwLCB5b3UgaGF2ZSB0aGUgcG9zc2liaWxpdHkgdXNpbmcgIkFkbWluIC0+IENyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5IiB0byBzZXQgdGhlIHByaW9yaXR5IHVzaW5nIGEgbWF0cml4Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzIHRvIGZhY2lsaXRhdGUgdGhlIHNlYXJjaCBmb3Igc2VydmljZXMgd2l0aGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBkZXNjcmlwdGlvbnMgKHNob3J0ICYgbG9uZykgc3BlY2lmaWVkIGJ5IFVzZXIgTGFuZ3VhZ2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvcnQgc3VtbWFyeSBvZiB0aGUgc2VydmljZSwgbWFpbmx5IHVzZWQgaW4gdGhlIEN1c3RvbWVyRGFzaGJvYXJkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLiBTY3JlZW5zaG90cyBhbmQgdGFibGVzIGFyZSBhbHNvIGFsbG93ZWQuIFBsZWFzZSBlbnN1cmUgdGhlIGNvcnJlY3Qgd2lkdGggb2YgdGhlIGltYWdlIGZvciBzY3JlZW5zaG90cy4gVGhpcyBjYW4gYmUgYWRqdXN0ZWQgaW4gdGhlIGNrZWRpdG9yIGFmdGVyIHVwbG9hZGluZyB0aGUgc2NyZWVuc2hvdC4gQSB3aWR0aCBvZiA2MDBweCBoYXMgcHJvdmVuIHRvIGJlIHVzZWZ1bCBvciB5b3UgY2FuIGNvbmZpZ3VyZSBhICJtYXgtd2lkdGgiIG9mIDk1JSB1bmRlciBBZHZhbmNlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbW9yZSBzZXJ2aWNlIGNhdGFsb2cgZmllbGRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRoZSBvcHRpb24gb2YgYWRkaW5nIGZ1cnRoZXIgZmllbGRzIGhlcmUgaW4gdGhlIHNlcnZpY2UgY2F0YWxvZyBhdCBhbnkgdGltZS4gVG8gZG8gdGhpcywgcGxlYXNlIGdvIHRvICJBZG1pbiAtPiBEeW5hbWljRmllbGRzIiBhbmQgY3JlYXRlIHRoZSBuZXcgZmllbGQgb2YgdGhlIG9iamVjdCB0eXBlICJTZXJ2aWNlIi4gWW91IGNhbiB0aGVuIGFjdGl2YXRlIHRoZSBmaWVsZCBmb3IgdGhlIGN1c3RvbWVyIGRhc2hib2FyZCB1bmRlciAiQWRtaW4gLT4gRHluYW1pY0ZpZWxkIFNjcmVlbnMiIGJ5IGFzc2lnbmluZyBpdCB1bmRlciAiQ3VzdG9tZXJEYXNoYm9hcmRUaWxlIFNlcnZpY2VDYXRhbG9nIi4nfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnJzsKCiAgICAjIEpTIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2dDb250YWluZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIG5ldyB0aWNrZXQgZm9yIHRoaXMgc2VydmljZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgJXMgc3ViLXNlcnZpY2UocyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9yZSBkZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Yi1TZXJ2aWNlKHMpJ30gPSAnJzsKCiAgICAjIEpTIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2dEZXRhaWxlZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3ViLXNlcnZpY2UocykgYXZhaWxhYmxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIG5ldyB0aWNrZXQgb2YgdHlwZSAlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGUgb24gdGhpcyB0b3BpYyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRpdGlvbmFsIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgaG91cnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb1wnY2xvY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWRkaXRpb25hbCBkYXRhIGFyZSBhdmFpbGFibGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1cnRoZXIgaW5mb3JtYXRpb24nfSA9ICcnOwoKICAgICMgSlMgVGVtcGxhdGU6IFRpbGVTZXJ2aWNlQ2F0YWxvZ01vZGFsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY2F0YWxvZyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQ3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2NyaXB0aW9uIG5vdCBhdmFpbGFibGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgRmlsZUlEISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IENvcmUuQWdlbnQuQWRtaW4uU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2U/J30gPQogICAgICAgICcnOwoKICAgICMgSlMgRmlsZTogQ29yZS5DdXN0b21lci5UaWxlU2VydmljZUNhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3VsdHMgZm9yICVzJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHNlcnZpY2UgY2F0YWxvZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cgQUpBWCBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBhIGxpc3Qgb2YgZHluYW1pYyBmaWVsZCBvYmplY3QgdHlwZXMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gYmUgYXNzaWduZWQgdG8gYWN0aW9ucyBvZiB0aGlzIHBhY2thZ2UgdmlhIHRoZSBkeW5hbWljIGZpZWxkIHNjcmVlbnMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gQ3VycmVudGx5LCB0aGUgY3JpdGljYWxpdHkgb2YgdGhlIHNlcnZpY2UgY2FuIGFsc28gYmUgc2V0IGluIHRoZSBzZXJ2aWNlLCBidXQgdGhpcyBoYXMgbm8gZWZmZWN0LiBUaGVyZWZvcmUsIHRoaXMgZXZlbnQgbW9kdWxlIGhhcyBiZWVuIGltcGxlbWVudGVkIHRoYXQgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBEeW5hbWljRmllbGQgQ3JpdGljYWxpdHkgaW4gYSB0aWNrZXQgYXMgc29vbiBhcyBhIHNlcnZpY2UgaGFzIGJlZW4gYXNzaWduZWQuIFBsZWFzZSBhY3RpdmF0ZSB0aGUgU3lzQ29uZmlnIG9wdGlvbiBTZXRQcmlvcml0eUZyb21Dcml0aWNhbGl0eUFuZEltcGFjdE1hdHJpeCB0byBzZXQgdGhlIHByaW9yaXR5IGluIHRoZSBuZXh0IHN0ZXAgYmFzZWQgYW4gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBDdXJyZW50bHksIHRoZSBjcml0aWNhbGl0eSBvZiB0aGUgc2VydmljZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIHNlcnZpY2UsIGJ1dCB0aGlzIGhhcyBubyBlZmZlY3QuIFRoZXJlZm9yZSwgdGhpcyBldmVudCBtb2R1bGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHByaW9yaXR5IHJlZ2FyZGluZyBDcml0aWNhbGl0eSBhbmQgSW1wYWN0IGluIGEgdGlja2V0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbmQgdGhlIHJpZ2h0IHNlcnZpY2UgZm9yIHlvdXIgdGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgc2VydmljZXMgd2l0aCB0aGUgZm9sbG93aW5nIHRpY2tldCB0eXBlIGxhc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBGQVEgZmllbGQgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZGVzY3JpcHRpb24gb2YgYW4gRkFRIGFydGljbGUgaW4gdGhlIHNpZGViYXIgKGUuZy4gRmllbGQxLCBGaWVsZDIsIEZpZWxkMy4uLikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIEFDTHMgZm9yIGRpZmZlcmVudCBpbnRlcmZhY2VzIHdoZW4gY3JlYXRpbmcgc2VydmljZXMuIFNlcnZpY2VzIHdpbGwgdGhlbiBvbmx5IGJlIGRpc3BsYXllZCBpZiB0aGUgdGlja2V0IHR5cGUgc3RvcmVkIGluIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGUgIkFkZEJ1bGtBQ0wiIGNvbnNvbGUgc2NyaXB0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIEFDTHMgZm9yIHNlcnZpY2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHByZWNvbmZpZ3VyZSB0aGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgQUNMcy4gVGhlIGFpbSBpcyB0byBvbmx5IGRpc3BsYXkgdGhlIHNlcnZpY2VzIHRoYXQgaGF2ZSBhbHNvIGJlZW4gYXNzaWduZWQgdG8gdGhlIHNlcnZpY2UgaW4gdGhlIHNlcnZpY2UgY2F0YWxvZy4gVG8gdXNlIHRoaXMgZnVuY3Rpb24sIHBsZWFzZSBmaXJzdCBlbmFibGUgdGhlICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscyIgb3B0aW9uLiAiR2VuZXJhdGVJbml0YWxBQ0xUb0Rpc2FibGVBbGxTZXJ2aWNlcyIgZ2VuZXJhdGVzIGFuIEFDTCB0aGF0IGluaXRpYWxseSBoaWRlcyBhbGwgc2VydmljZXMuIFRoZSB2YWx1ZSAiUG9zc2libGUiIG9yICJQb3NzaWJsZUFkZCIgY2FuIGJlIHNldCBmb3IgdGhlIGtleSAiQ29uZmlnQ2hhbmdlIi4gVGhlICJBQ0xEZXBsb3kiIGtleSBkZWNpZGVzIHdoZXRoZXIgdGhlIGNoYW5nZWQgQUNMIHNob3VsZCBhbHNvIGJlIGRlcGxveWVkIGltbWVkaWF0ZWx5LiAiQUNMVmFsaWRJRCIgKDEsIDIsIDMpIHNldHMgdGhlIEFDTHMgdG8gdmFsaWQsIGludmFsaWQgb3IgdGVtcG9yYXJpbHkgaW52YWxpZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEN1c3RvbWVyRGFzaGJvYXJkLiBNb2R1bGUgaXMgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdBZGRpdGlvbmFsIGluZm9ybWF0aW9uJywKICAgICdBbGwnLAogICAgJ0Nsb3NlIHRoaXMgZGlhbG9nJywKICAgICdDcmVhdGUgJXMnLAogICAgJ0NyZWF0ZSBUaWNrZXQnLAogICAgJ0NyZWF0ZSBhIG5ldyB0aWNrZXQgZm9yIHRoaXMgc2VydmljZS4nLAogICAgJ0NyZWF0ZSBhIG5ldyB0aWNrZXQgb2YgdHlwZSAlcy4nLAogICAgJ0RldGFpbHMnLAogICAgJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlPycsCiAgICAnRkFRIGFydGljbGUgb24gdGhpcyB0b3BpYycsCiAgICAnRmlyc3QgUmVzcG9uc2UgVGltZScsCiAgICAnRnVydGhlciBpbmZvcm1hdGlvbicsCiAgICAnTW9yZSBkZXRhaWxzJywKICAgICdObyBhZGRpdGlvbmFsIGRhdGEgYXJlIGF2YWlsYWJsZS4nLAogICAgJ09LJywKICAgICdSZXN1bHRzJywKICAgICdSZXN1bHRzIGZvciAlcycsCiAgICAnU2VhcmNoJywKICAgICdTZWFyY2ggY2F0YWxvZycsCiAgICAnU2VydmljZSBJbmZvcm1hdGlvbicsCiAgICAnU2VydmljZSBob3VycycsCiAgICAnU2hvdyAlcyBzdWItc2VydmljZShzKScsCiAgICAnU2hvdyBkZXRhaWxzIG9mIHRoaXMgc2VydmljZS4nLAogICAgJ1Nob3cgb3IgaGlkZSB0aGUgY29udGVudCcsCiAgICAnU29sdXRpb24gVGltZScsCiAgICAnU3ViLVNlcnZpY2UocyknLAogICAgJ2hvdXIocyknLAogICAgJ29cJ2Nsb2NrJywKICAgICdzdWItc2VydmljZShzKSBhdmFpbGFibGUnLAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/es_CO_ServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0NPX1NlcnZpY2VDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEFJbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgdG8gJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyBvZiB0aGlzIHNlcnZpY2UuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZGVwZW5kcyBvbiB0aGUgZm9sbG93aW5nIHRpY2tldCB0eXBlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZGVzdGluYXRpb24gcXVldWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgZGVmYXVsdCBzZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyBub3QgcHJlc2VudCBvciBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoaXMgc2VydmljZSBkZXNjcmlwdGlvbiBjb3VsZCBiZSBkZWxldGVkIGlmIGl0IGlzIG5vdCBuZWVkZWQgYW55bW9yZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1vdmUgU2VydmljZSBEZXNjcmlwdGlvbiBMYW5ndWFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3B0aW9uIFJlZmVyZW5jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2l0aGluIHRoZSBTZXJ2aWNlQ2F0YWxvZ3VlIHRpbGUgaW4gdGhlIGN1c3RvbWVyIGRhc2hib2FyZCwgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aWNrZXQgdHlwZXMgZm9yIHByZWNvbmZpZ3VyZWQgdGlja2V0IGNyZWF0aW9uIGluc2lkZSB0aGUgc2VydmljZSBkZXNjcmlwdGlvbi4gRnVydGhlcm1vcmUsIGl0IGlzIHBvc3NpYmxlIHRvIHJlc3RyaWN0IHRoZSBzZXJ2aWNlcyBmb3Igb3RoZXIgc2NyZWVucyB1c2luZyB0aGUgdGlja2V0IHR5cGVzIHNldCBoZXJlLiBJZiB5b3Ugd2lzaCB0byBkbyB0aGlzLCBwbGVhc2UgYWN0aXZhdGUgdGhlIG9wdGlvbnMgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzIiBhbmQgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25zIiBpbiB0aGUgT1RPQk8gc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSByZXN0cmljdGlvbiBpcyBtYWRlIHZpYSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBBQ0xzLCB3aGljaCBjYW4gYmUgdmlld2VkIHVuZGVyICJBZG1pbiAtPiBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMKSIuIElmIG5lY2Vzc2FyeSwgcGxlYXNlIGFkanVzdCB0aGUgb3B0aW9uICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNsczo6T3B0aW9ucyIgYWNjb3JkaW5nIHRvIHlvdXIgcmVxdWlyZW1lbnRzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHdlIHdvcmsgc2VydmljZS1iYXNlZCwgd2UgZG8gbm90IHdhbnQgdG8gb2ZmZXIgdGhlIGN1c3RvbWVyIGEgY2hvaWNlIG9mIHF1ZXVlcyBpbiB0aGUgY3VzdG9tZXIgcG9ydGFsIHdoZW4gY3JlYXRpbmcgYSB0aWNrZXQsIGJ1dCBkZWNpZGUgb24gdGhlIGJhc2lzIG9mIHRoZSBzZXJ2aWNlIGludG8gd2hpY2ggcXVldWUgKG9yIHdoaWNoIHRlYW0gb2YgYWdlbnRzKSB0aGUgdGlja2V0IHNob3VsZCBiZSBwcm9jZXNzZWQgZmlyc3QuIEluIG9yZGVyIHRvIHVzZSB0aGlzIG9wdGlvbiBzZW5zaWJseSwgcGxlYXNlIGRlYWN0aXZhdGUgdGhlIG9wdGlvbiAiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIyMjUXVldWUiIGFuZCBzZXQgYSBzZW5zaWJsZSBkZWZhdWx0IHF1ZXVlIGluIHRoZSBvcHRpb24gIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSMjI1F1ZXVlRGVmYXVsdCIuIEFzIHNvb24gYXMgeW91IHNldCBhICJUaWNrZXQgZGVzdGluYXRpb24gcXVldWUiIGhlcmUgaW4gdGhlIHNlcnZpY2UsIHRoZSB0aWNrZXQgd2lsbCBpbW1lZGlhdGVseSBiZSBjcmVhdGVkIGluIHRoaXMgcXVldWUuIElmIHRoZSBmaWVsZCByZW1haW5zIGVtcHR5LCB0aGUgZGVmYXVsdCBxdWV1ZSBjb25maWd1cmVkIGFib3ZlIHdpbGwgYmUgdXNlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3UgZG8gbm90IGFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lcnMgb3IgY29tcGFuaWVzIGluZGl2aWR1YWxseSwgYnV0IGFsbCBzZXJ2aWNlcyBhcmUgaW5pdGlhbGx5IG9mZmVyZWQgdG8geW91ciBjdXN0b21lcnMgZm9yIHNlbGVjdGlvbiwgdGhlIHN0ZXAgb2YgcmVsZWFzaW5nIGVhY2ggc2VydmljZSBhcyBhICJkZWZhdWx0IiBzZXJ2aWNlIHVuZGVyICJBZG1pbiAtPiBDdXN0b21lciB1c2VyIDwtPiBTZXJ2aWNlIiAob3IgIkN1c3RvbWVyIDwtPiBTZXJ2aWNlIikgY2FuIGJlIGJ5cGFzc2VkIGhlcmUuIE9mIGNvdXJzZSwgaW4gdGhlIG5leHQgc3RlcCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgdmlhIEFDTHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGVyZSwgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgYmFja2dyb3VuZCBiYXNlZCBvbiB0aGUgZHluYW1pYyBmaWVsZCAiSVRTTUNyaXRpY2FsaXR5IiBhbmQgIklUU01JbXBhY3QiLiBQbGVhc2UgYWN0aXZhdGUgdGhlIG9wdGlvbiAiVGlja2V0OjpFdmVudE1vZHVsZVBvc3QjIyM5NzAwLVNldER5bmFtaWNGaWVsZENyaXRpY2FsaXR5RnJvbVNlcnZpY2UiIGFuZCB0aGUgb3B0aW9uICJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk4MDAtU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXgiLiBJbiB0aGUgbmV4dCBzdGVwLCB5b3UgaGF2ZSB0aGUgcG9zc2liaWxpdHkgdXNpbmcgIkFkbWluIC0+IENyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5IiB0byBzZXQgdGhlIHByaW9yaXR5IHVzaW5nIGEgbWF0cml4Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzIHRvIGZhY2lsaXRhdGUgdGhlIHNlYXJjaCBmb3Igc2VydmljZXMgd2l0aGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBkZXNjcmlwdGlvbnMgKHNob3J0ICYgbG9uZykgc3BlY2lmaWVkIGJ5IFVzZXIgTGFuZ3VhZ2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvcnQgc3VtbWFyeSBvZiB0aGUgc2VydmljZSwgbWFpbmx5IHVzZWQgaW4gdGhlIEN1c3RvbWVyRGFzaGJvYXJkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLiBTY3JlZW5zaG90cyBhbmQgdGFibGVzIGFyZSBhbHNvIGFsbG93ZWQuIFBsZWFzZSBlbnN1cmUgdGhlIGNvcnJlY3Qgd2lkdGggb2YgdGhlIGltYWdlIGZvciBzY3JlZW5zaG90cy4gVGhpcyBjYW4gYmUgYWRqdXN0ZWQgaW4gdGhlIGNrZWRpdG9yIGFmdGVyIHVwbG9hZGluZyB0aGUgc2NyZWVuc2hvdC4gQSB3aWR0aCBvZiA2MDBweCBoYXMgcHJvdmVuIHRvIGJlIHVzZWZ1bCBvciB5b3UgY2FuIGNvbmZpZ3VyZSBhICJtYXgtd2lkdGgiIG9mIDk1JSB1bmRlciBBZHZhbmNlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbW9yZSBzZXJ2aWNlIGNhdGFsb2cgZmllbGRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRoZSBvcHRpb24gb2YgYWRkaW5nIGZ1cnRoZXIgZmllbGRzIGhlcmUgaW4gdGhlIHNlcnZpY2UgY2F0YWxvZyBhdCBhbnkgdGltZS4gVG8gZG8gdGhpcywgcGxlYXNlIGdvIHRvICJBZG1pbiAtPiBEeW5hbWljRmllbGRzIiBhbmQgY3JlYXRlIHRoZSBuZXcgZmllbGQgb2YgdGhlIG9iamVjdCB0eXBlICJTZXJ2aWNlIi4gWW91IGNhbiB0aGVuIGFjdGl2YXRlIHRoZSBmaWVsZCBmb3IgdGhlIGN1c3RvbWVyIGRhc2hib2FyZCB1bmRlciAiQWRtaW4gLT4gRHluYW1pY0ZpZWxkIFNjcmVlbnMiIGJ5IGFzc2lnbmluZyBpdCB1bmRlciAiQ3VzdG9tZXJEYXNoYm9hcmRUaWxlIFNlcnZpY2VDYXRhbG9nIi4nfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnJzsKCiAgICAjIEpTIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2dDb250YWluZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIG5ldyB0aWNrZXQgZm9yIHRoaXMgc2VydmljZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgJXMgc3ViLXNlcnZpY2UocyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9yZSBkZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Yi1TZXJ2aWNlKHMpJ30gPSAnJzsKCiAgICAjIEpTIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2dEZXRhaWxlZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3ViLXNlcnZpY2UocykgYXZhaWxhYmxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIG5ldyB0aWNrZXQgb2YgdHlwZSAlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGUgb24gdGhpcyB0b3BpYyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRpdGlvbmFsIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgaG91cnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb1wnY2xvY2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gYWRkaXRpb25hbCBkYXRhIGFyZSBhdmFpbGFibGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1cnRoZXIgaW5mb3JtYXRpb24nfSA9ICcnOwoKICAgICMgSlMgVGVtcGxhdGU6IFRpbGVTZXJ2aWNlQ2F0YWxvZ01vZGFsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggY2F0YWxvZyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQ3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2NyaXB0aW9uIG5vdCBhdmFpbGFibGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgRmlsZUlEISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IENvcmUuQWdlbnQuQWRtaW4uU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2U/J30gPQogICAgICAgICcnOwoKICAgICMgSlMgRmlsZTogQ29yZS5DdXN0b21lci5UaWxlU2VydmljZUNhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3VsdHMgZm9yICVzJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHNlcnZpY2UgY2F0YWxvZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cgQUpBWCBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBhIGxpc3Qgb2YgZHluYW1pYyBmaWVsZCBvYmplY3QgdHlwZXMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gYmUgYXNzaWduZWQgdG8gYWN0aW9ucyBvZiB0aGlzIHBhY2thZ2UgdmlhIHRoZSBkeW5hbWljIGZpZWxkIHNjcmVlbnMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gQ3VycmVudGx5LCB0aGUgY3JpdGljYWxpdHkgb2YgdGhlIHNlcnZpY2UgY2FuIGFsc28gYmUgc2V0IGluIHRoZSBzZXJ2aWNlLCBidXQgdGhpcyBoYXMgbm8gZWZmZWN0LiBUaGVyZWZvcmUsIHRoaXMgZXZlbnQgbW9kdWxlIGhhcyBiZWVuIGltcGxlbWVudGVkIHRoYXQgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBEeW5hbWljRmllbGQgQ3JpdGljYWxpdHkgaW4gYSB0aWNrZXQgYXMgc29vbiBhcyBhIHNlcnZpY2UgaGFzIGJlZW4gYXNzaWduZWQuIFBsZWFzZSBhY3RpdmF0ZSB0aGUgU3lzQ29uZmlnIG9wdGlvbiBTZXRQcmlvcml0eUZyb21Dcml0aWNhbGl0eUFuZEltcGFjdE1hdHJpeCB0byBzZXQgdGhlIHByaW9yaXR5IGluIHRoZSBuZXh0IHN0ZXAgYmFzZWQgYW4gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBDdXJyZW50bHksIHRoZSBjcml0aWNhbGl0eSBvZiB0aGUgc2VydmljZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIHNlcnZpY2UsIGJ1dCB0aGlzIGhhcyBubyBlZmZlY3QuIFRoZXJlZm9yZSwgdGhpcyBldmVudCBtb2R1bGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHByaW9yaXR5IHJlZ2FyZGluZyBDcml0aWNhbGl0eSBhbmQgSW1wYWN0IGluIGEgdGlja2V0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbmQgdGhlIHJpZ2h0IHNlcnZpY2UgZm9yIHlvdXIgdGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgc2VydmljZXMgd2l0aCB0aGUgZm9sbG93aW5nIHRpY2tldCB0eXBlIGxhc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBGQVEgZmllbGQgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZGVzY3JpcHRpb24gb2YgYW4gRkFRIGFydGljbGUgaW4gdGhlIHNpZGViYXIgKGUuZy4gRmllbGQxLCBGaWVsZDIsIEZpZWxkMy4uLikuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIEFDTHMgZm9yIGRpZmZlcmVudCBpbnRlcmZhY2VzIHdoZW4gY3JlYXRpbmcgc2VydmljZXMuIFNlcnZpY2VzIHdpbGwgdGhlbiBvbmx5IGJlIGRpc3BsYXllZCBpZiB0aGUgdGlja2V0IHR5cGUgc3RvcmVkIGluIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGUgIkFkZEJ1bGtBQ0wiIGNvbnNvbGUgc2NyaXB0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIEFDTHMgZm9yIHNlcnZpY2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHByZWNvbmZpZ3VyZSB0aGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgQUNMcy4gVGhlIGFpbSBpcyB0byBvbmx5IGRpc3BsYXkgdGhlIHNlcnZpY2VzIHRoYXQgaGF2ZSBhbHNvIGJlZW4gYXNzaWduZWQgdG8gdGhlIHNlcnZpY2UgaW4gdGhlIHNlcnZpY2UgY2F0YWxvZy4gVG8gdXNlIHRoaXMgZnVuY3Rpb24sIHBsZWFzZSBmaXJzdCBlbmFibGUgdGhlICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscyIgb3B0aW9uLiAiR2VuZXJhdGVJbml0YWxBQ0xUb0Rpc2FibGVBbGxTZXJ2aWNlcyIgZ2VuZXJhdGVzIGFuIEFDTCB0aGF0IGluaXRpYWxseSBoaWRlcyBhbGwgc2VydmljZXMuIFRoZSB2YWx1ZSAiUG9zc2libGUiIG9yICJQb3NzaWJsZUFkZCIgY2FuIGJlIHNldCBmb3IgdGhlIGtleSAiQ29uZmlnQ2hhbmdlIi4gVGhlICJBQ0xEZXBsb3kiIGtleSBkZWNpZGVzIHdoZXRoZXIgdGhlIGNoYW5nZWQgQUNMIHNob3VsZCBhbHNvIGJlIGRlcGxveWVkIGltbWVkaWF0ZWx5LiAiQUNMVmFsaWRJRCIgKDEsIDIsIDMpIHNldHMgdGhlIEFDTHMgdG8gdmFsaWQsIGludmFsaWQgb3IgdGVtcG9yYXJpbHkgaW52YWxpZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEN1c3RvbWVyRGFzaGJvYXJkLiBNb2R1bGUgaXMgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdBZGRpdGlvbmFsIGluZm9ybWF0aW9uJywKICAgICdBbGwnLAogICAgJ0Nsb3NlIHRoaXMgZGlhbG9nJywKICAgICdDcmVhdGUgJXMnLAogICAgJ0NyZWF0ZSBUaWNrZXQnLAogICAgJ0NyZWF0ZSBhIG5ldyB0aWNrZXQgZm9yIHRoaXMgc2VydmljZS4nLAogICAgJ0NyZWF0ZSBhIG5ldyB0aWNrZXQgb2YgdHlwZSAlcy4nLAogICAgJ0RldGFpbHMnLAogICAgJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlPycsCiAgICAnRkFRIGFydGljbGUgb24gdGhpcyB0b3BpYycsCiAgICAnRmlyc3QgUmVzcG9uc2UgVGltZScsCiAgICAnRnVydGhlciBpbmZvcm1hdGlvbicsCiAgICAnTW9yZSBkZXRhaWxzJywKICAgICdObyBhZGRpdGlvbmFsIGRhdGEgYXJlIGF2YWlsYWJsZS4nLAogICAgJ09LJywKICAgICdSZXN1bHRzJywKICAgICdSZXN1bHRzIGZvciAlcycsCiAgICAnU2VhcmNoJywKICAgICdTZWFyY2ggY2F0YWxvZycsCiAgICAnU2VydmljZSBJbmZvcm1hdGlvbicsCiAgICAnU2VydmljZSBob3VycycsCiAgICAnU2hvdyAlcyBzdWItc2VydmljZShzKScsCiAgICAnU2hvdyBkZXRhaWxzIG9mIHRoaXMgc2VydmljZS4nLAogICAgJ1Nob3cgb3IgaGlkZSB0aGUgY29udGVudCcsCiAgICAnU29sdXRpb24gVGltZScsCiAgICAnU3ViLVNlcnZpY2UocyknLAogICAgJ2hvdXIocyknLAogICAgJ29cJ2Nsb2NrJywKICAgICdzdWItc2VydmljZShzKSBhdmFpbGFibGUnLAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/hu_ServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X1NlcnZpY2VDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEFJbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgdG8gJ30gPSAnVsOhbGFzc3phIGtpIGF6b2thdCBheiBlbGVtZWtldCwgYW1lbHlla2tlbCBlenQgc3plcmV0bsOpIHRlbm5pOiAnOwoKICAgICMgVGVtcGxhdGU6IFRpbGVTZXJ2aWNlQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzIG9mIHRoaXMgc2VydmljZS4nfSA9ICdBIHN6b2xnw6FsdGF0w6FzIHLDqXN6bGV0ZWluZWsgbWVnamVsZW7DrXTDqXNlLic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa3Vzc8OhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyB0aWNrZXQgdHlwZXMnfSA9ICdBIHN6b2xnw6FsdGF0w6FzIGEga8O2dmV0a2V6xZEgamVneXTDrXB1c29rdMOzbCBmw7xnZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZGVzdGluYXRpb24gcXVldWUnfSA9ICdKZWd5IGPDqWx2w6Fyw7NsaXN0w6FqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBkZWZhdWx0IHNlcnZpY2UnfSA9ICfDnGd5ZsOpbCBhbGFww6lydGVsbWV6ZXR0IHN6b2xnw6FsdGF0w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3Jkcyd9ID0gJ0t1bGNzc3phdmFrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgRGVzY3JpcHRpb24nfSA9ICdTem9sZ8OhbHRhdMOhcyBsZcOtcsOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBsYW5ndWFnZSBpcyBub3QgcHJlc2VudCBvciBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoaXMgc2VydmljZSBkZXNjcmlwdGlvbiBjb3VsZCBiZSBkZWxldGVkIGlmIGl0IGlzIG5vdCBuZWVkZWQgYW55bW9yZS4nfSA9CiAgICAgICAgJ0V6IGEgbnllbHYgbmluY3MgamVsZW4gdmFneSBuaW5jcyBlbmdlZMOpbHllenZlIGEgcmVuZHN6ZXJlbi4gRXogYSBzem9sZ8OhbHRhdMOhc2xlw61yw6FzIHTDtnLDtmxoZXTFkSwgaGEgdMO2YmLDqSBuaW5jcyByw6Egc3rDvGtzw6lnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1vdmUgU2VydmljZSBEZXNjcmlwdGlvbiBMYW5ndWFnZSd9ID0gJ1N6b2xnw6FsdGF0w6FzbGXDrXLDoXMtbnllbHYgZWx0w6F2b2zDrXTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZSd9ID0gJ8OaaiBzem9sZ8OhbHRhdMOhc2xlw61yw6FzLW55ZWx2IGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcHRpb24gUmVmZXJlbmNlJ30gPSAnQmXDoWxsw610w6Fzb2sgaGl2YXRrb3rDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyd9ID0gJ0Ega8O2dmV0a2V6xZEgYmXDoWxsw610w6Fzb2thdCBoYXN6bsOhbGhhdGphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpdGhpbiB0aGUgU2VydmljZUNhdGFsb2d1ZSB0aWxlIGluIHRoZSBjdXN0b21lciBkYXNoYm9hcmQsIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGlja2V0IHR5cGVzIGZvciBwcmVjb25maWd1cmVkIHRpY2tldCBjcmVhdGlvbiBpbnNpZGUgdGhlIHNlcnZpY2UgZGVzY3JpcHRpb24uIEZ1cnRoZXJtb3JlLCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgZm9yIG90aGVyIHNjcmVlbnMgdXNpbmcgdGhlIHRpY2tldCB0eXBlcyBzZXQgaGVyZS4gSWYgeW91IHdpc2ggdG8gZG8gdGhpcywgcGxlYXNlIGFjdGl2YXRlIHRoZSBvcHRpb25zICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscyIgYW5kICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNsczo6T3B0aW9ucyIgaW4gdGhlIE9UT0JPIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGUgcmVzdHJpY3Rpb24gaXMgbWFkZSB2aWEgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgQUNMcywgd2hpY2ggY2FuIGJlIHZpZXdlZCB1bmRlciAiQWRtaW4gLT4gQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTCkiLiBJZiBuZWNlc3NhcnksIHBsZWFzZSBhZGp1c3QgdGhlIG9wdGlvbiAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnMiIGFjY29yZGluZyB0byB5b3VyIHJlcXVpcmVtZW50cy4nfSA9CiAgICAgICAgJ0F6IMO8Z3lmw6lsIHZlesOpcmzFkXB1bHRqw6FuIGzDqXbFkSDigJ5TZXJ2aWNlQ2F0YWxvZ3Vl4oCdIGNzZW1ww6luIGJlbMO8bCBsZWhldMWRc8OpZyB2YW4gbWVnamVsZW7DrXRlbmkgYSBqZWd5dMOtcHVzb2thdCBheiBlbMWRcmUgYmXDoWxsw610b3R0IGplZ3lsw6l0cmVob3rDoXPDoWhveiBhIHN6b2xnw6FsdGF0w6FzIGxlw61yw6Fzw6FuIGJlbMO8bC4gRXplbmZlbMO8bCBsZWhldMWRc8OpZyB2YW4gYSBzem9sZ8OhbHRhdMOhc29rIGtvcmzDoXRvesOhc8OhcmEgbcOhcyBrw6lwZXJuecWRa27DqWwgYXogaXR0IGJlw6FsbMOtdG90dCBqZWd5dMOtcHVzb2sgaGFzem7DoWxhdMOhdmFsLiBIYSBlenQgc3plcmV0bsOpIG1lZ3Rlbm5pLCBha2tvciBha3RpdsOhbGphIGEg4oCeU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHPigJ0gw6lzIGEg4oCeU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnPigJ0gYmXDoWxsw610w6Fzb2thdCBheiBPVE9CTyByZW5kc3plcmJlw6FsbMOtdMOhc2FpYmFuLiBBIGtvcmzDoXRvesOhcyBhdXRvbWF0aWt1c2FuIGVsxZHDoWxsw610b3R0IEFDTC1la2VuIGtlcmVzenTDvGwgdMO2cnTDqW5paywgYW1lbHllayBheiDigJ5BZG1pbmlzenRyw6FjacOzIOKGkiBIb3p6w6Fmw6lyw6lzLXZlesOpcmzDqXNpIGxpc3TDoWsgKEFDTCnigJ0gYWxhdHQgdGVraW50aGV0xZFrIG1lZy4gSGEgc3rDvGtzw6lnZXMsIGFra29yIMOhbGzDrXRzYSBiZSBhIOKAnlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25z4oCdIGJlw6FsbMOtdMOhc3QgYXogaWfDqW55ZWluZWsgbWVnZmVsZWzFkWVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB3ZSB3b3JrIHNlcnZpY2UtYmFzZWQsIHdlIGRvIG5vdCB3YW50IHRvIG9mZmVyIHRoZSBjdXN0b21lciBhIGNob2ljZSBvZiBxdWV1ZXMgaW4gdGhlIGN1c3RvbWVyIHBvcnRhbCB3aGVuIGNyZWF0aW5nIGEgdGlja2V0LCBidXQgZGVjaWRlIG9uIHRoZSBiYXNpcyBvZiB0aGUgc2VydmljZSBpbnRvIHdoaWNoIHF1ZXVlIChvciB3aGljaCB0ZWFtIG9mIGFnZW50cykgdGhlIHRpY2tldCBzaG91bGQgYmUgcHJvY2Vzc2VkIGZpcnN0LiBJbiBvcmRlciB0byB1c2UgdGhpcyBvcHRpb24gc2Vuc2libHksIHBsZWFzZSBkZWFjdGl2YXRlIHRoZSBvcHRpb24gIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSMjI1F1ZXVlIiBhbmQgc2V0IGEgc2Vuc2libGUgZGVmYXVsdCBxdWV1ZSBpbiB0aGUgb3B0aW9uICJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNRdWV1ZURlZmF1bHQiLiBBcyBzb29uIGFzIHlvdSBzZXQgYSAiVGlja2V0IGRlc3RpbmF0aW9uIHF1ZXVlIiBoZXJlIGluIHRoZSBzZXJ2aWNlLCB0aGUgdGlja2V0IHdpbGwgaW1tZWRpYXRlbHkgYmUgY3JlYXRlZCBpbiB0aGlzIHF1ZXVlLiBJZiB0aGUgZmllbGQgcmVtYWlucyBlbXB0eSwgdGhlIGRlZmF1bHQgcXVldWUgY29uZmlndXJlZCBhYm92ZSB3aWxsIGJlIHVzZWQuJ30gPQogICAgICAgICdIYSBzem9sZ8OhbHRhdMOhc2FsYXDDuiByZW5kc3plcmJlbiBkb2xnb3p1bmssIGFra29yIG5lbSBzemVyZXRuw6luayBmZWxhasOhbmxhbmkgYXogw7xneWbDqWxuZWsgYSB2w6Fyw7NsaXN0w6FrIGvDtnrDtnR0aSB2w6FsYXN6dMOhc3QgYXogw7xneWbDqWxwb3J0w6Fsb24gYSBqZWd5IGzDqXRyZWhvesOhc2Frb3IsIGhhbmVtIGEgc3pvbGfDoWx0YXTDoXMgYWxhcGrDoW4gc3plcmV0bsOpbmsgZWxkw7ZudGVuaSwgaG9neSBtZWx5aWsgdsOhcsOzbGlzdMOhYmEgKHZhZ3kgbWVseWlrIMO8Z3lpbnTDqXrFkWkgY3NhcGF0bmFrKSBrZWxsIGVsc8WRa8OpbnQgZmVsZG9sZ296bmkgYSBqZWd5ZXQuIEFoaG96LCBob2d5IGV6dCBhIGxlaGV0xZFzw6lnZXQgw6lzenN6ZXLFsWVuIGxlaGVzc2VuIGhhc3puw6FsbmksIGthcGNzb2xqYSBraSBhIOKAnlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSMjI1F1ZXVl4oCdIGJlw6FsbMOtdMOhc3QsIMOpcyDDoWxsw610c29uIGJlIMOpc3pzemVyxbEgYWxhcMOpcnRlbG1lemV0dCB2w6Fyw7NsaXN0w6F0IGEg4oCeVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIyMjUXVldWVEZWZhdWx04oCdIGJlw6FsbMOtdMOhc2Jhbi4gQW1pbnQgaXR0IGEgc3pvbGfDoWx0YXTDoXNiYW4gYmXDoWxsw610IGVneSDigJ5KZWd5IGPDqWx2w6Fyw7NsaXN0w6FqYeKAnSDDqXJ0w6lrZXQsIGEgamVneSBhem9ubmFsIGViYmVuIGEgdsOhcsOzbGlzdMOhYmFuIGxlc3ogbMOpdHJlaG96dmEuIEhhIGEgbWV6xZEgw7xyZXMgbWFyYWQsIGFra29yIGEgZmVudCBiZcOhbGzDrXRvdHQgYWxhcMOpcnRlbG1lemV0dCB2w6Fyw7NsaXN0YSBsZXN6IGhhc3puw6FsdmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHlvdSBkbyBub3QgYXNzaWduIHNlcnZpY2VzIHRvIGN1c3RvbWVycyBvciBjb21wYW5pZXMgaW5kaXZpZHVhbGx5LCBidXQgYWxsIHNlcnZpY2VzIGFyZSBpbml0aWFsbHkgb2ZmZXJlZCB0byB5b3VyIGN1c3RvbWVycyBmb3Igc2VsZWN0aW9uLCB0aGUgc3RlcCBvZiByZWxlYXNpbmcgZWFjaCBzZXJ2aWNlIGFzIGEgImRlZmF1bHQiIHNlcnZpY2UgdW5kZXIgIkFkbWluIC0+IEN1c3RvbWVyIHVzZXIgPC0+IFNlcnZpY2UiIChvciAiQ3VzdG9tZXIgPC0+IFNlcnZpY2UiKSBjYW4gYmUgYnlwYXNzZWQgaGVyZS4gT2YgY291cnNlLCBpbiB0aGUgbmV4dCBzdGVwIGl0IGlzIHBvc3NpYmxlIHRvIHJlc3RyaWN0IHRoZSBzZXJ2aWNlcyB2aWEgQUNMcy4nfSA9CiAgICAgICAgJ0hhIG5lbSByZW5kZWwgaG96esOhIGVneWVua8OpbnQgc3pvbGfDoWx0YXTDoXNva2F0IGF6IMO8Z3lmZWxla2hleiB2YWd5IGEgdsOhbGxhbGF0b2tob3osIGhhbmVtIGF6IMO2c3N6ZXMgc3pvbGfDoWx0YXTDoXN0IGVsZXZlIGZlbGFqw6FubGphIGF6IMO8Z3lmZWxlaW5layB2w6FsYXN6dMOhc3JhLCBha2tvciBheiDigJ5BZG1pbmlzenRyw6FjacOzIOKGkiDDnGd5ZsOpbC1mZWxoYXN6bsOhbMOzIOKGlCBTem9sZ8OhbHRhdMOhc+KAnSAodmFneSDigJ7DnGd5ZsOpbCDihpQgU3pvbGfDoWx0YXTDoXPigJ0pIGFsYXR0IGF6IGVneWVzIHN6b2zDoWx0YXTDoXNvayDigJ5hbGFww6lydGVsbWV6ZXR04oCdIHN6b2xnw6FsdGF0w6Fza8OpbnQgdMO2cnTDqW7FkSBraWFkw6Fzw6FuYWsgbMOpcMOpc2UgaXR0IG1lZ2tlcsO8bGhldMWRLiBUZXJtw6lzemV0ZXNlbiBhIGvDtnZldGtlesWRIGzDqXDDqXNiZW4gbGVoZXTFkXPDqWcgdmFuIGEgc3pvbGfDoWx0YXTDoXNvayBBQ0wtZWtlbiBrZXJlc3p0w7xsIHTDtnJ0w6luxZEga29ybMOhdG96w6Fzw6FyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGVyZSwgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgYmFja2dyb3VuZCBiYXNlZCBvbiB0aGUgZHluYW1pYyBmaWVsZCAiSVRTTUNyaXRpY2FsaXR5IiBhbmQgIklUU01JbXBhY3QiLiBQbGVhc2UgYWN0aXZhdGUgdGhlIG9wdGlvbiAiVGlja2V0OjpFdmVudE1vZHVsZVBvc3QjIyM5NzAwLVNldER5bmFtaWNGaWVsZENyaXRpY2FsaXR5RnJvbVNlcnZpY2UiIGFuZCB0aGUgb3B0aW9uICJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk4MDAtU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXgiLiBJbiB0aGUgbmV4dCBzdGVwLCB5b3UgaGF2ZSB0aGUgcG9zc2liaWxpdHkgdXNpbmcgIkFkbWluIC0+IENyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5IiB0byBzZXQgdGhlIHByaW9yaXR5IHVzaW5nIGEgbWF0cml4Lid9ID0KICAgICAgICAnSXR0IGxlaGV0xZFzw6lnIHZhbiBhcnJhLCBob2d5IGF1dG9tYXRpa3VzYW4ga2lzesOhbcOtdHNhIGEgbWVnZmVsZWzFkSBqZWd5cHJpb3JpdMOhc3QgYSBow6F0dMOpcmJlbiBheiDigJ5JVFNNQ3JpdGljYWxpdHnigJ0gw6lzIOKAnklUU01JbXBhY3TigJ0gZGluYW1pa3VzIG1lesWRayBhbGFwasOhbi4gQWt0aXbDoWxqYSBhIOKAnlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjOTcwMC1TZXREeW5hbWljRmllbGRDcml0aWNhbGl0eUZyb21TZXJ2aWNl4oCdIMOpcyBhIOKAnlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjOTgwMC1TZXRQcmlvcml0eUZyb21Dcml0aWNhbGl0eUFuZEltcGFjdE1hdHJpeOKAnSBiZcOhbGzDrXTDoXNva2F0LiBBIGvDtnZldGtlesWRIGzDqXDDqXNiZW4gbGVoZXTFkXPDqWdlIHZhbiBheiDigJ5BZG1pbmlzenRyw6FjacOzIOKGkiBLcml0aWt1c3PDoWcg4oaUIEhhdMOhcyDihpQgUHJpb3JpdMOhc+KAnSBoYXN6bsOhbGF0w6F2YWwgZWd5IG3DoXRyaXggc2Vnw610c8OpZ8OpdmVsIGJlw6FsbMOtdGFuaSBhIHByaW9yaXTDoXN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3JkcyB0byBmYWNpbGl0YXRlIHRoZSBzZWFyY2ggZm9yIHNlcnZpY2VzIHdpdGhpbiB0aGUgc2VydmljZSBjYXRhbG9nLid9ID0KICAgICAgICAnS3VsY3NzemF2YWsgYSBzem9sZ8OhbHRhdMOhc29rIGtlcmVzw6lzw6luZWsgbWVna8O2bm55w610w6lzw6loZXogYSBzem9sZ8OhbHRhdMOhc2thdGFsw7NndXNvbiBiZWzDvGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgZGVzY3JpcHRpb25zIChzaG9ydCAmIGxvbmcpIHNwZWNpZmllZCBieSBVc2VyIExhbmd1YWdlLid9ID0KICAgICAgICAnQSBmZWxoYXN6bsOhbMOzIG55ZWx2ZSDDoWx0YWwgbWVnYWRvdHQgc3pvbGfDoWx0YXTDoXNsZcOtcsOhc29rIChyw7Z2aWQgw6lzIGhvc3N6w7opLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG9ydCBzdW1tYXJ5IG9mIHRoZSBzZXJ2aWNlLCBtYWlubHkgdXNlZCBpbiB0aGUgQ3VzdG9tZXJEYXNoYm9hcmQuJ30gPQogICAgICAgICdBIHN6b2xnw6FsdGF0w6FzIHLDtnZpZCDDtnNzemVmb2dsYWzDoXNhLCBhbWVseSBlbHPFkXNvcmJhbiBheiDDvGd5ZsOpbCB2ZXrDqXJsxZFwdWx0asOhbiB2YW4gaGFzem7DoWx2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVzY3JpcHRpb24gb2YgdGhlIHNlcnZpY2UuIFNjcmVlbnNob3RzIGFuZCB0YWJsZXMgYXJlIGFsc28gYWxsb3dlZC4gUGxlYXNlIGVuc3VyZSB0aGUgY29ycmVjdCB3aWR0aCBvZiB0aGUgaW1hZ2UgZm9yIHNjcmVlbnNob3RzLiBUaGlzIGNhbiBiZSBhZGp1c3RlZCBpbiB0aGUgY2tlZGl0b3IgYWZ0ZXIgdXBsb2FkaW5nIHRoZSBzY3JlZW5zaG90LiBBIHdpZHRoIG9mIDYwMHB4IGhhcyBwcm92ZW4gdG8gYmUgdXNlZnVsIG9yIHlvdSBjYW4gY29uZmlndXJlIGEgIm1heC13aWR0aCIgb2YgOTUlIHVuZGVyIEFkdmFuY2VkLid9ID0KICAgICAgICAnQSBzem9sZ8OhbHRhdMOhcyBsZcOtcsOhc2EuIEvDqXBlcm55xZFrw6lwZWsgw6lzIHTDoWJsw6F6YXRvayBpcyBtZWdlbmdlZGV0dGVrLiBHecWResWRZGrDtm4gbWVnIGFycsOzbCwgaG9neSBhIGvDqXBlayBzesOpbGVzc8OpZ2UgbWVnZmVsZWzFkSBsZWd5ZW4gYSBrw6lwZXJuecWRa8OpcGVrbsOpbC4gRXogYSBDS0VkaXRvciBzemVya2VzenTFkWJlbiDDoWxsw610aGF0w7MgYmUgYSBrw6lwZXJuecWRa8OpcCBmZWx0w7ZsdMOpc2UgdXTDoW4uIEEgNjAwIGvDqXBwb250b3Mgc3rDqWxlc3PDqWcgasOzbCBiZXbDoWx0LCB2YWd5IGJlw6FsbMOtdGhhdGphIGEg4oCebWF4LXdpZHRo4oCdIMOpcnTDqWtldCA5NSUtcmEgYSDigJ5TcGVjacOhbGlz4oCdIG1lbsO8cG9udCBhbGF0dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG1vcmUgc2VydmljZSBjYXRhbG9nIGZpZWxkcyd9ID0gJ1RvdsOhYmJpIHN6b2xnw6FsdGF0w6Fza2F0YWzDs2d1cyBtZXrFkWsgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRoZSBvcHRpb24gb2YgYWRkaW5nIGZ1cnRoZXIgZmllbGRzIGhlcmUgaW4gdGhlIHNlcnZpY2UgY2F0YWxvZyBhdCBhbnkgdGltZS4gVG8gZG8gdGhpcywgcGxlYXNlIGdvIHRvICJBZG1pbiAtPiBEeW5hbWljRmllbGRzIiBhbmQgY3JlYXRlIHRoZSBuZXcgZmllbGQgb2YgdGhlIG9iamVjdCB0eXBlICJTZXJ2aWNlIi4gWW91IGNhbiB0aGVuIGFjdGl2YXRlIHRoZSBmaWVsZCBmb3IgdGhlIGN1c3RvbWVyIGRhc2hib2FyZCB1bmRlciAiQWRtaW4gLT4gRHluYW1pY0ZpZWxkIFNjcmVlbnMiIGJ5IGFzc2lnbmluZyBpdCB1bmRlciAiQ3VzdG9tZXJEYXNoYm9hcmRUaWxlIFNlcnZpY2VDYXRhbG9nIi4nfSA9CiAgICAgICAgJ0xlaGV0xZFzw6lnZSB2YW4gdG92w6FiYmkgbWV6xZFrZXQgaG96esOhYWRuaWEgYsOhcm1pa29yIGl0dCwgYSBzem9sZ8OhbHRhdMOhc2thdGFsw7NndXNiYW4uIEVoaGV6IG1lbmplbiBheiDigJ5BZG1pbmlzenRyw6FjacOzIOKGkiBEaW5hbWlrdXMgbWV6xZFr4oCdIG1vZHVsaG96LCDDqXMgaG96emEgbMOpdHJlIGEg4oCeU3pvbGfDoWx0YXTDoXPigJ0gb2JqZWt0dW10w61wdXPDuiDDumogbWV6xZF0LiBFenV0w6FuIGFrdGl2w6FsaGF0amEgYSBtZXrFkXQgYXogw7xneWbDqWwgdmV6w6lybMWRcHVsdGrDoWhveiBheiDigJ5BZG1pbmlzenRyw6FjacOzIOKGkiBEaW5hbWlrdXMgbWV6xZFrIGvDqXBlcm55xZFp4oCdIGFsYXR0IGF6w6FsdGFsLCBob2d5IGhvenrDoXJlbmRlbGkgYSBtZXrFkXQgYSDigJ5DdXN0b21lckRhc2hib2FyZFRpbGUgU2VydmljZUNhdGFsb2figJ0gYWxhdHQuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEgaW5mb3Jtw6FjacOzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdVdG9sasOhcmEgbcOzZG9zw610dmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnVXRvbGrDoXJhIG3Ds2Rvc8OtdG90dGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnQXogaW5jaWRlbnNlayBrw7Z6dGkgbGVna2lzZWJiIGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ0hvenrDoXJlbmRlbHQgc3pvbGfDoWx0YXTDoXNvayc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdTem9sZ8OhbHRhdMOhc2luZm9ybcOhY2nDs2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0plbGVubGVnaSBpbmNpZGVuc8OhbGxhcG90JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ0hvenrDoXJlbmRlbHQgU0xBLWsnOwoKICAgICMgSlMgVGVtcGxhdGU6IFRpbGVTZXJ2aWNlQ2F0YWxvZ0NvbnRhaW5lcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgbmV3IHRpY2tldCBmb3IgdGhpcyBzZXJ2aWNlLid9ID0gJ8OaaiBqZWd5IGzDqXRyZWhvesOhc2EgZWhoZXogYSBzem9sZ8OhbHRhdMOhc2hvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlICVzJ30gPSAnJXMgbMOpdHJlaG96w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93ICVzIHN1Yi1zZXJ2aWNlKHMpJ30gPSAnJXMgYWxzem9sZ8OhbHRhdMOhc2FpbmFrIG1lZ2plbGVuw610w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3JlIGRldGFpbHMnfSA9ICdUb3bDoWJiaSByw6lzemxldGVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Yi1TZXJ2aWNlKHMpJ30gPSAnQWxzem9sZ8OhbHRhdMOhc29rJzsKCiAgICAjIEpTIFRlbXBsYXRlOiBUaWxlU2VydmljZUNhdGFsb2dEZXRhaWxlZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3ViLXNlcnZpY2UocykgYXZhaWxhYmxlJ30gPSAnYWxzem9sZ8OhbHRhdMOhcyDDqXJoZXTFkSBlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBuZXcgdGlja2V0IG9mIHR5cGUgJXMuJ30gPSAnw5pqICVzIHTDrXB1c8O6IGplZ3kgbMOpdHJlaG96w6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGUgb24gdGhpcyB0b3BpYyd9ID0gJ0d5SUsgYmVqZWd5esOpcyBlYmJlbiBhIHTDqW3DoWJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRpdGlvbmFsIGluZm9ybWF0aW9uJ30gPSAnVG92w6FiYmkgaW5mb3Jtw6FjacOzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIGhvdXJzJ30gPSAnU3pvbGfDoWx0YXTDoXNpIGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb1wnY2xvY2snfSA9ICfDs3JhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGFkZGl0aW9uYWwgZGF0YSBhcmUgYXZhaWxhYmxlLid9ID0gJ05lbSDDqXJoZXTFkWsgZWwgdG92w6FiYmkgYWRhdG9rLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdXJ0aGVyIGluZm9ybWF0aW9uJ30gPSAnVG92w6FiYmkgaW5mb3Jtw6FjacOzayc7CgogICAgIyBKUyBUZW1wbGF0ZTogVGlsZVNlcnZpY2VDYXRhbG9nTW9kYWwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjYXRhbG9nJ30gPSAnS2F0YWzDs2d1cyBrZXJlc8Opc2UnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0N1c3RvbWVyVGlsZVNlcnZpY2VDYXRhbG9nLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNjcmlwdGlvbiBub3QgYXZhaWxhYmxlLid9ID0gJ0xlw61yw6FzIG5lbSDDqXJoZXTFkSBlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBGaWxlSUQhJ30gPSAnRsOhamxhem9ub3PDrXTDsyBzesO8a3PDqWdlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2Vab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnTmluY3Mgc3pvbGfDoWx0YXTDoXNhem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ0EoeikgJXMgc3pvbGfDoWx0YXTDoXNhem9ub3PDrXTDsyBuZW0gdGFsw6FsaGF0w7MgYXogYWRhdGLDoXppc2JhbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICfDvHplbWvDqXBlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnZmlneWVsbWV6dGV0w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnaW5jaWRlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJ2lzbWVyZXRsZW4nOwoKICAgICMgSlMgRmlsZTogQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZT8nfSA9CiAgICAgICAgJ1ZhbMOzYmFuIHTDtnLDtmxuaSBzemVyZXRuw6kgZXp0IGEgc3pvbGfDoWx0YXTDoXNsZcOtcsOhcy1ueWVsdmV0Pyc7CgogICAgIyBKUyBGaWxlOiBDb3JlLkN1c3RvbWVyLlRpbGVTZXJ2aWNlQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdWx0cyBmb3IgJXMnfSA9ICdUYWzDoWxhdG9rIGVycmU6ICVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHNlcnZpY2UgY2F0YWxvZy4nfSA9ICdUb3bDoWJiaSBiZcOhbGzDrXTDoXNvayBhIHN6b2xnw6FsdGF0w6Fza2F0YWzDs2d1c2hvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2cgQUpBWCBNb2R1bGUuJ30gPSAnw5xneWbDqWxjc2VtcGUtc3pvbGfDoWx0YXTDoXNrYXRhbMOzZ3VzIEFKQVgtbW9kdWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBhIGxpc3Qgb2YgZHluYW1pYyBmaWVsZCBvYmplY3QgdHlwZXMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gYmUgYXNzaWduZWQgdG8gYWN0aW9ucyBvZiB0aGlzIHBhY2thZ2UgdmlhIHRoZSBkeW5hbWljIGZpZWxkIHNjcmVlbnMgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQXpvbiBkaW5hbWlrdXMgbWV6xZEgb2JqZWt0dW10w61wdXNvayBsaXN0w6Fqw6FuYWsgbWVnaGF0w6Fyb3rDoXNhLCBhbWVseWVrIGhvenrDoXJlbmRlbGhldMWRayBhIGNzb21hZyBtxbF2ZWxldGVpaGV6IGEgZGluYW1pa3VzIG1lesWRIGvDqXBlcm55xZFpbmVrIGZlbMO8bGV0w6luIGtlcmVzenTDvGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cgc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBeiDDvGd5ZsOpbGZlbMO8bGV0IHN6b2xnw6FsdGF0w6Fza2F0YWzDs2d1cyBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBDdXJyZW50bHksIHRoZSBjcml0aWNhbGl0eSBvZiB0aGUgc2VydmljZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIHNlcnZpY2UsIGJ1dCB0aGlzIGhhcyBubyBlZmZlY3QuIFRoZXJlZm9yZSwgdGhpcyBldmVudCBtb2R1bGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIER5bmFtaWNGaWVsZCBDcml0aWNhbGl0eSBpbiBhIHRpY2tldCBhcyBzb29uIGFzIGEgc2VydmljZSBoYXMgYmVlbiBhc3NpZ25lZC4gUGxlYXNlIGFjdGl2YXRlIHRoZSBTeXNDb25maWcgb3B0aW9uIFNldFByaW9yaXR5RnJvbUNyaXRpY2FsaXR5QW5kSW1wYWN0TWF0cml4IHRvIHNldCB0aGUgcHJpb3JpdHkgaW4gdGhlIG5leHQgc3RlcCBiYXNlZCBhbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0Lid9ID0KICAgICAgICAnRXNlbcOpbnltb2R1bCByZWdpc3p0csOhY2nDsy4gSmVsZW5sZWcgYSBzem9sZ8OhbHRhdMOhcyBrcml0aWt1c3PDoWdhIGJlw6FsbMOtdGhhdMOzIGEgc3pvbGfDoWx0YXTDoXNiYW4gaXMsIGRlIGVubmVrIG5pbmNzIGhhdMOhc2EuIEV6w6lydCBrZXLDvGx0IG1lZ3ZhbMOzc8OtdMOhc3JhIGV6IGF6IGVzZW3DqW55bW9kdWwsIGFtZWx5IGF1dG9tYXRpa3VzYW4gZnJpc3PDrXRpIGEga3JpdGlrdXNzw6FnIGRpbmFtaWt1cyBtZXrFkXQgYSBqZWd5YmVuLCBhbWludCBlZ3kgc3pvbGfDoWx0YXTDoXMgaG96esOhcmVuZGVsw6lzcmUga2Vyw7xsLiBBa3RpdsOhbGphIGEg4oCeU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXjigJ0gcmVuZHN6ZXJiZcOhbGzDrXTDoXNpIGxlaGV0xZFzw6lnZXQsIGhvZ3kgYmXDoWxsw610c2EgYSBwcmlvcml0w6FzdCBhIGvDtnZldGtlesWRIGzDqXDDqXNiZW4gZWd5IGtyaXRpa3Vzc8OhZyDDqXMgaGF0w6FzIGFsYXBqw6FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBDdXJyZW50bHksIHRoZSBjcml0aWNhbGl0eSBvZiB0aGUgc2VydmljZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIHNlcnZpY2UsIGJ1dCB0aGlzIGhhcyBubyBlZmZlY3QuIFRoZXJlZm9yZSwgdGhpcyBldmVudCBtb2R1bGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHByaW9yaXR5IHJlZ2FyZGluZyBDcml0aWNhbGl0eSBhbmQgSW1wYWN0IGluIGEgdGlja2V0Lid9ID0KICAgICAgICAnRXNlbcOpbnltb2R1bCByZWdpc3p0csOhY2nDsy4gSmVsZW5sZWcgYSBzem9sZ8OhbHRhdMOhcyBrcml0aWt1c3PDoWdhIGJlw6FsbMOtdGhhdMOzIGEgc3pvbGfDoWx0YXTDoXNiYW4gaXMsIGRlIGVubmVrIG5pbmNzIGhhdMOhc2EuIEV6w6lydCBrZXLDvGx0IG1lZ3ZhbMOzc8OtdMOhc3JhIGV6IGF6IGVzZW3DqW55bW9kdWwsIGFtZWx5IGF1dG9tYXRpa3VzYW4gZnJpc3PDrXRpIGEgcHJpb3JpdMOhc3QgYSBrcml0aWt1c3PDoWdyYSDDqXMgaGF0w6FzcmEgdm9uYXRrb3rDs2FuIGEgamVneWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmluZCB0aGUgcmlnaHQgc2VydmljZSBmb3IgeW91ciB0aWNrZXQnfSA9ICdBIG1lZ2ZlbGVsxZEgc3pvbGfDoWx0YXTDoXMgbWVndGFsw6Fsw6FzYSBhIGplZ3loZXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBzZXJ2aWNlcyB3aXRoIHRoZSBmb2xsb3dpbmcgdGlja2V0IHR5cGUgbGFzdC4nfSA9ICdBIGvDtnZldGtlesWRIGplZ3l0w61wdXNva2thbCByZW5kZWxrZXrFkSBzem9sZ8OhbHRhdMOhc29rIG1lZ2plbGVuw610w6lzZSB1dG9sasOhcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBGQVEgZmllbGQgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZGVzY3JpcHRpb24gb2YgYW4gRkFRIGFydGljbGUgaW4gdGhlIHNpZGViYXIgKGUuZy4gRmllbGQxLCBGaWVsZDIsIEZpZWxkMy4uLikuJ30gPQogICAgICAgICdBeiBhIEd5SUsgbWV6xZEsIGFtZWx5ZXQgZWd5IEd5SUsgYmVqZWd5esOpcyBsZcOtcsOhc2Frw6ludCBrZWxsIGhhc3puw6FsbmkgYXogb2xkYWxzw6F2YmFuIChww6lsZMOhdWwgTWV6xZExLCBNZXrFkTIsIE1lesWRMyBzdGIuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIEFDTHMgZm9yIGRpZmZlcmVudCBpbnRlcmZhY2VzIHdoZW4gY3JlYXRpbmcgc2VydmljZXMuIFNlcnZpY2VzIHdpbGwgdGhlbiBvbmx5IGJlIGRpc3BsYXllZCBpZiB0aGUgdGlja2V0IHR5cGUgc3RvcmVkIGluIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIHNlbGVjdGVkLiBUaGUgIkFkZEJ1bGtBQ0wiIGNvbnNvbGUgc2NyaXB0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIEFDTHMgZm9yIHNlcnZpY2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgbGVoZXTFkXbDqSB0ZXN6aSBBQ0wtZWsgYXV0b21hdGlrdXMgZWzFkcOhbGzDrXTDoXPDoXQgYSBrw7xsw7ZuYsO2esWRIGZlbMO8bGV0ZWtoZXogYSBzem9sZ8OhbHRhdMOhc29rIGzDqXRyZWhvesOhc2Frb3IuIEEgc3pvbGfDoWx0YXTDoXNvayBlenV0w6FuIGNzYWsgYWtrb3IgamVsZW5uZWsgbWVnLCBoYSBhIHN6b2xnw6FsdGF0w6FzYmFuIHTDoXJvbHQgamVneXTDrXB1c3Qga2l2w6FsYXN6dG90dMOhay4gQXog4oCeQWRkQnVsa0FDTOKAnSBrb256b2xwYXJhbmNzIGlzIGhhc3puw6FsaGF0w7MgYSBtw6FyIGzDqXRyZWhvem90dCBzem9sZ8OhbHRhdMOhc29raG96IHRhcnRvesOzIEFDTC1layBsw6l0cmVob3rDoXPDoXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBwcmVjb25maWd1cmUgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIEFDTHMuIFRoZSBhaW0gaXMgdG8gb25seSBkaXNwbGF5IHRoZSBzZXJ2aWNlcyB0aGF0IGhhdmUgYWxzbyBiZWVuIGFzc2lnbmVkIHRvIHRoZSBzZXJ2aWNlIGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cuIFRvIHVzZSB0aGlzIGZ1bmN0aW9uLCBwbGVhc2UgZmlyc3QgZW5hYmxlIHRoZSAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHMiIG9wdGlvbi4gIkdlbmVyYXRlSW5pdGFsQUNMVG9EaXNhYmxlQWxsU2VydmljZXMiIGdlbmVyYXRlcyBhbiBBQ0wgdGhhdCBpbml0aWFsbHkgaGlkZXMgYWxsIHNlcnZpY2VzLiBUaGUgdmFsdWUgIlBvc3NpYmxlIiBvciAiUG9zc2libGVBZGQiIGNhbiBiZSBzZXQgZm9yIHRoZSBrZXkgIkNvbmZpZ0NoYW5nZSIuIFRoZSAiQUNMRGVwbG95IiBrZXkgZGVjaWRlcyB3aGV0aGVyIHRoZSBjaGFuZ2VkIEFDTCBzaG91bGQgYWxzbyBiZSBkZXBsb3llZCBpbW1lZGlhdGVseS4gIkFDTFZhbGlkSUQiICgxLCAyLCAzKSBzZXRzIHRoZSBBQ0xzIHRvIHZhbGlkLCBpbnZhbGlkIG9yIHRlbXBvcmFyaWx5IGludmFsaWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBDdXN0b21lckRhc2hib2FyZC4gTW9kdWxlIGlzIHJlcXVpcmVkLid9ID0KICAgICAgICAnQ3NlbXBlcmVnaXN6dHLDoWNpw7MgYXogw7xneWbDqWwgdmV6w6lybMWRcHVsdGrDoWhvei4gQSBtb2R1bCBrw7Z0ZWxlesWRLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0FkZGl0aW9uYWwgaW5mb3JtYXRpb24nLAogICAgJ0FsbCcsCiAgICAnQ2xvc2UgdGhpcyBkaWFsb2cnLAogICAgJ0NyZWF0ZSAlcycsCiAgICAnQ3JlYXRlIFRpY2tldCcsCiAgICAnQ3JlYXRlIGEgbmV3IHRpY2tldCBmb3IgdGhpcyBzZXJ2aWNlLicsCiAgICAnQ3JlYXRlIGEgbmV3IHRpY2tldCBvZiB0eXBlICVzLicsCiAgICAnRGV0YWlscycsCiAgICAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2U/JywKICAgICdGQVEgYXJ0aWNsZSBvbiB0aGlzIHRvcGljJywKICAgICdGaXJzdCBSZXNwb25zZSBUaW1lJywKICAgICdGdXJ0aGVyIGluZm9ybWF0aW9uJywKICAgICdNb3JlIGRldGFpbHMnLAogICAgJ05vIGFkZGl0aW9uYWwgZGF0YSBhcmUgYXZhaWxhYmxlLicsCiAgICAnT0snLAogICAgJ1Jlc3VsdHMnLAogICAgJ1Jlc3VsdHMgZm9yICVzJywKICAgICdTZWFyY2gnLAogICAgJ1NlYXJjaCBjYXRhbG9nJywKICAgICdTZXJ2aWNlIEluZm9ybWF0aW9uJywKICAgICdTZXJ2aWNlIGhvdXJzJywKICAgICdTaG93ICVzIHN1Yi1zZXJ2aWNlKHMpJywKICAgICdTaG93IGRldGFpbHMgb2YgdGhpcyBzZXJ2aWNlLicsCiAgICAnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50JywKICAgICdTb2x1dGlvbiBUaW1lJywKICAgICdTdWItU2VydmljZShzKScsCiAgICAnaG91cihzKScsCiAgICAnb1wnY2xvY2snLAogICAgJ3N1Yi1zZXJ2aWNlKHMpIGF2YWlsYWJsZScsCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/ja_ServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX1NlcnZpY2VDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEFJbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgdG8gJ30gPSAn5b+F6KaB44Gq6aCF55uu44KS6YG45oqe44GX44Gm44GP44Gg44GV44GEICc7CgogICAgIyBUZW1wbGF0ZTogVGlsZVNlcnZpY2VDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGRldGFpbHMgb2YgdGhpcyBzZXJ2aWNlLid9ID0gJ+OBk+OBruOCteODvOODk+OCueOBruips+e0sOOCkuihqOekuuOBl+OBvuOBmeOAgic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ+mHjeimgeW6pic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyB0aWNrZXQgdHlwZXMnfSA9ICfjgrXjg7zjg5PjgrnjgYzkvp3lrZjjgZnjgovjg4HjgrHjg4Pjg4jjgr/jgqTjg5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGRlc3RpbmF0aW9uIHF1ZXVlJ30gPSAn44OB44Kx44OD44OI44Gu5a6b5YWI44Kt44Ol44O8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIGRlZmF1bHQgc2VydmljZSd9ID0gJ+mhp+WuouOBruODh+ODleOCqeODq+ODiOOCteODvOODk+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydLZXl3b3Jkcyd9ID0gJ+OCreODvOODr+ODvOODiSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIERlc2NyaXB0aW9uJ30gPSAn44K144O844OT44K544Gu6Kqs5piOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbGFuZ3VhZ2UgaXMgbm90IHByZXNlbnQgb3IgZW5hYmxlZCBvbiB0aGUgc3lzdGVtLiBUaGlzIHNlcnZpY2UgZGVzY3JpcHRpb24gY291bGQgYmUgZGVsZXRlZCBpZiBpdCBpcyBub3QgbmVlZGVkIGFueW1vcmUuJ30gPQogICAgICAgICfjgZPjga7oqIDoqp7jga/jgrfjgrnjg4bjg6DjgavlrZjlnKjjgZfjgarjgYTjgYvjgIHmnInlirnjgavjgarjgaPjgabjgYTjgb7jgZvjgpPjgILkuI3opoHjgafjgYLjgozjgbDjgIHjgZPjga7jgrXjg7zjg5Pjgrnjga7oqqzmmI7jgpLliYrpmaTjgafjgY3jgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtb3ZlIFNlcnZpY2UgRGVzY3JpcHRpb24gTGFuZ3VhZ2UnfSA9ICfjgrXjg7zjg5Pjgrnjga7oqqzmmI7jga7oqIDoqp7jgpLliYrpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlJ30gPSAn44K144O844OT44K544Gu6Kqs5piO44Gu6KiA6Kqe44KS6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wdGlvbiBSZWZlcmVuY2UnfSA9ICfjgqrjg5fjgrfjg6fjg7Pjga7jg6rjg5XjgqHjg6zjg7PjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zJ30gPSAn5qyh44Gu44Kq44OX44K344On44Oz44KS5L2/55So44Gn44GN44G+44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpdGhpbiB0aGUgU2VydmljZUNhdGFsb2d1ZSB0aWxlIGluIHRoZSBjdXN0b21lciBkYXNoYm9hcmQsIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGlja2V0IHR5cGVzIGZvciBwcmVjb25maWd1cmVkIHRpY2tldCBjcmVhdGlvbiBpbnNpZGUgdGhlIHNlcnZpY2UgZGVzY3JpcHRpb24uIEZ1cnRoZXJtb3JlLCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgZm9yIG90aGVyIHNjcmVlbnMgdXNpbmcgdGhlIHRpY2tldCB0eXBlcyBzZXQgaGVyZS4gSWYgeW91IHdpc2ggdG8gZG8gdGhpcywgcGxlYXNlIGFjdGl2YXRlIHRoZSBvcHRpb25zICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNscyIgYW5kICJTZXJ2aWNlQ2F0YWxvZzo6Q3JlYXRlVHlwZVNlcnZpY2VSZWxhdGVkQWNsczo6T3B0aW9ucyIgaW4gdGhlIE9UT0JPIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGUgcmVzdHJpY3Rpb24gaXMgbWFkZSB2aWEgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgQUNMcywgd2hpY2ggY2FuIGJlIHZpZXdlZCB1bmRlciAiQWRtaW4gLT4gQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTCkiLiBJZiBuZWNlc3NhcnksIHBsZWFzZSBhZGp1c3QgdGhlIG9wdGlvbiAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnMiIGFjY29yZGluZyB0byB5b3VyIHJlcXVpcmVtZW50cy4nfSA9CiAgICAgICAgJ+mhp+WuouODgOODg+OCt+ODpeODnOODvOODieOBriBTZXJ2aWNlQ2F0YWxvZ3VlIOOCv+OCpOODq+OBp+OBr+OAgeOCteODvOODk+OCueOBruiqrOaYjuWGheOBq+OAgeOBguOCieOBi+OBmOOCgeioreWumuOBl+OBn+ODgeOCseODg+ODiOS9nOaIkOeUqOOBruODgeOCseODg+ODiOOCv+OCpOODl+OCkuihqOekuuOBp+OBjeOBvuOBmeOAguOBleOCieOBq+OAgeOBk+OBk+OBp+ioreWumuOBl+OBn+ODgeOCseODg+ODiOOCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeS7luOBrueUu+mdouOBp+OBruOCteODvOODk+OCueOCkuWItumZkOOBmeOCi+OBk+OBqOOCguOBp+OBjeOBvuOBmeOAguOBneOBruWgtOWQiOOBr+OAgU9UT0JPIOOBruOCt+OCueODhuODoOioreWumuOBp+OCquODl+OCt+ODp+ODsyAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHMiIOOBqCAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHM6Ok9wdGlvbnMiIOOCkuacieWKueOBq+OBl+OBpuOBj+OBoOOBleOBhOOAguWItumZkOOBr+iHquWLleeUn+aIkOOBleOCjOOCiyBBQ0wg44Gr44KI44Gj44Gm6KGM44KP44KM44CBIkFkbWluIC0+IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0wpIiDjgafnorroqo3jgafjgY3jgb7jgZnjgILlv4XopoHjgavlv5zjgZjjgabjgIHjgqrjg5fjgrfjg6fjg7MgIlNlcnZpY2VDYXRhbG9nOjpDcmVhdGVUeXBlU2VydmljZVJlbGF0ZWRBY2xzOjpPcHRpb25zIiDjgpLopoHku7bjgavlkIjjgo/jgZvjgaboqr/mlbTjgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgd2Ugd29yayBzZXJ2aWNlLWJhc2VkLCB3ZSBkbyBub3Qgd2FudCB0byBvZmZlciB0aGUgY3VzdG9tZXIgYSBjaG9pY2Ugb2YgcXVldWVzIGluIHRoZSBjdXN0b21lciBwb3J0YWwgd2hlbiBjcmVhdGluZyBhIHRpY2tldCwgYnV0IGRlY2lkZSBvbiB0aGUgYmFzaXMgb2YgdGhlIHNlcnZpY2UgaW50byB3aGljaCBxdWV1ZSAob3Igd2hpY2ggdGVhbSBvZiBhZ2VudHMpIHRoZSB0aWNrZXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBmaXJzdC4gSW4gb3JkZXIgdG8gdXNlIHRoaXMgb3B0aW9uIHNlbnNpYmx5LCBwbGVhc2UgZGVhY3RpdmF0ZSB0aGUgb3B0aW9uICJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNRdWV1ZSIgYW5kIHNldCBhIHNlbnNpYmxlIGRlZmF1bHQgcXVldWUgaW4gdGhlIG9wdGlvbiAiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIyMjUXVldWVEZWZhdWx0Ii4gQXMgc29vbiBhcyB5b3Ugc2V0IGEgIlRpY2tldCBkZXN0aW5hdGlvbiBxdWV1ZSIgaGVyZSBpbiB0aGUgc2VydmljZSwgdGhlIHRpY2tldCB3aWxsIGltbWVkaWF0ZWx5IGJlIGNyZWF0ZWQgaW4gdGhpcyBxdWV1ZS4gSWYgdGhlIGZpZWxkIHJlbWFpbnMgZW1wdHksIHRoZSBkZWZhdWx0IHF1ZXVlIGNvbmZpZ3VyZWQgYWJvdmUgd2lsbCBiZSB1c2VkLid9ID0KICAgICAgICAn44K144O844OT44K544OZ44O844K544Gn6YGL55So44GZ44KL5aC05ZCI44CB6aGn5a6i44Od44O844K/44Or44Gn44OB44Kx44OD44OI44KS5L2c5oiQ44GZ44KL6Zqb44Gr6aGn5a6i44Gr44Kt44Ol44O844KS6YG444Gw44Gb44KL44Gu44Gn44Gv44Gq44GP44CB44K144O844OT44K544Gr5Z+644Gl44GE44Gm44CB44OB44Kx44OD44OI44KS5pyA5Yid44Gr44Gp44Gu44Kt44Ol44O877yI44Gp44Gu5ouF5b2T6ICF44OB44O844Og77yJ44Gn5Yem55CG44GZ44KL44GL44KS5rG644KB44Gf44GE44Gv44Ga44Gn44GZ44CC44GT44Gu44Kq44OX44K344On44Oz44KS5pyJ5Yq544Gr5rS755So44GZ44KL44Gr44Gv44CB44Kq44OX44K344On44OzICJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNRdWV1ZSIg44KS54Sh5Yq544Gr44GX44CB44Kq44OX44K344On44OzICJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNRdWV1ZURlZmF1bHQiIOOBq+mBqeWIh+OBquODh+ODleOCqeODq+ODiOOCreODpeODvOOCkuioreWumuOBl+OBpuOBj+OBoOOBleOBhOOAguOBk+OBk+OBp+OCteODvOODk+OCueOBqyAiVGlja2V0IGRlc3RpbmF0aW9uIHF1ZXVlIu+8iOODgeOCseODg+ODiOOBruWum+WFiOOCreODpeODvO+8ieOCkuioreWumuOBmeOCi+OBqOOAgeODgeOCseODg+ODiOOBr+OBmeOBkOOBq+OBk+OBruOCreODpeODvOOBq+S9nOaIkOOBleOCjOOBvuOBmeOAguepuuashOOBruWgtOWQiOOBr+OAgeS4iuiomOOBp+ioreWumuOBl+OBn+ODh+ODleOCqeODq+ODiOOCreODpeODvOOBjOS9v+eUqOOBleOCjOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB5b3UgZG8gbm90IGFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lcnMgb3IgY29tcGFuaWVzIGluZGl2aWR1YWxseSwgYnV0IGFsbCBzZXJ2aWNlcyBhcmUgaW5pdGlhbGx5IG9mZmVyZWQgdG8geW91ciBjdXN0b21lcnMgZm9yIHNlbGVjdGlvbiwgdGhlIHN0ZXAgb2YgcmVsZWFzaW5nIGVhY2ggc2VydmljZSBhcyBhICJkZWZhdWx0IiBzZXJ2aWNlIHVuZGVyICJBZG1pbiAtPiBDdXN0b21lciB1c2VyIDwtPiBTZXJ2aWNlIiAob3IgIkN1c3RvbWVyIDwtPiBTZXJ2aWNlIikgY2FuIGJlIGJ5cGFzc2VkIGhlcmUuIE9mIGNvdXJzZSwgaW4gdGhlIG5leHQgc3RlcCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGUgc2VydmljZXMgdmlhIEFDTHMuJ30gPQogICAgICAgICfjgrXjg7zjg5PjgrnjgpLpoaflrqLjgoTkvIHmpa3jgZTjgajjgavlgIvliKXjgavlibLjgorlvZPjgabjgZrjgIHmnIDliJ3jgYvjgonjgZnjgbnjgabjga7jgrXjg7zjg5PjgrnjgpLpoaflrqLjgavpgbjmip7ogqLjgajjgZfjgabmj5DkvpvjgZnjgovloLTlkIjjga/jgIEiQWRtaW4gLT4gQ3VzdG9tZXIgdXNlciA8LT4gU2VydmljZSLvvIjjgb7jgZ/jga8gIkN1c3RvbWVyIDwtPiBTZXJ2aWNlIu+8ieOBp+WQhOOCteODvOODk+OCueOCkiAiZGVmYXVsdCIg44K144O844OT44K544Go44GX44Gm5YWs6ZaL44GZ44KL5omL6aCG44KS44GT44GT44Gn55yB55Wl44Gn44GN44G+44GZ44CC44KC44Gh44KN44KT44CB5qyh44Gu44K544OG44OD44OX44GnIEFDTCDjgavjgojjgaPjgabjgrXjg7zjg5PjgrnjgpLliLbpmZDjgZnjgovjgZPjgajjgoLlj6/og73jgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGVyZSwgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgYmFja2dyb3VuZCBiYXNlZCBvbiB0aGUgZHluYW1pYyBmaWVsZCAiSVRTTUNyaXRpY2FsaXR5IiBhbmQgIklUU01JbXBhY3QiLiBQbGVhc2UgYWN0aXZhdGUgdGhlIG9wdGlvbiAiVGlja2V0OjpFdmVudE1vZHVsZVBvc3QjIyM5NzAwLVNldER5bmFtaWNGaWVsZENyaXRpY2FsaXR5RnJvbVNlcnZpY2UiIGFuZCB0aGUgb3B0aW9uICJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk4MDAtU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXgiLiBJbiB0aGUgbmV4dCBzdGVwLCB5b3UgaGF2ZSB0aGUgcG9zc2liaWxpdHkgdXNpbmcgIkFkbWluIC0+IENyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5IiB0byBzZXQgdGhlIHByaW9yaXR5IHVzaW5nIGEgbWF0cml4Lid9ID0KICAgICAgICAn44GT44GT44Gn44Gv44CB44OA44Kk44OK44Of44OD44Kv44OV44Kj44O844Or44OJICJJVFNNQ3JpdGljYWxpdHkiIOOBqCAiSVRTTUltcGFjdCIg44Gr5Z+644Gl44GE44Gm44CB5q2j44GX44GE44OB44Kx44OD44OI44Gu5YSq5YWI5bqm44KS44OQ44OD44Kv44Kw44Op44Km44Oz44OJ44Gn6Ieq5YuV6KiI566X44GV44Gb44KL44GT44Go44GM44Gn44GN44G+44GZ44CC44Kq44OX44K344On44OzICJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk3MDAtU2V0RHluYW1pY0ZpZWxkQ3JpdGljYWxpdHlGcm9tU2VydmljZSIg44GoICJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk4MDAtU2V0UHJpb3JpdHlGcm9tQ3JpdGljYWxpdHlBbmRJbXBhY3RNYXRyaXgiIOOCkuacieWKueOBq+OBl+OBpuOBj+OBoOOBleOBhOOAguasoeOBruOCueODhuODg+ODl+OBp+OAgSJBZG1pbiAtPiBDcml0aWNhbGl0eSDihpQgSW1wYWN0IOKGlCBQcmlvcml0eSIg44KS5L2/55So44GX44Gm44CB44Oe44OI44Oq44OD44Kv44K544Gn5YSq5YWI5bqm44KS6Kit5a6a44Gn44GN44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0tleXdvcmRzIHRvIGZhY2lsaXRhdGUgdGhlIHNlYXJjaCBmb3Igc2VydmljZXMgd2l0aGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cuJ30gPQogICAgICAgICfjgrXjg7zjg5Pjgrnjgqvjgr/jg63jgrDlhoXjgafjgrXjg7zjg5PjgrnjgpLmpJzntKLjgZfjgoTjgZnjgY/jgZnjgovjgZ/jgoHjga7jgq3jg7zjg6/jg7zjg4njgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBkZXNjcmlwdGlvbnMgKHNob3J0ICYgbG9uZykgc3BlY2lmaWVkIGJ5IFVzZXIgTGFuZ3VhZ2UuJ30gPQogICAgICAgICfjg6bjg7zjgrbjg7zjga7oqIDoqp7jgZTjgajjgavmjIflrprjgZnjgovjgrXjg7zjg5Pjgrnjga7oqqzmmI7vvIjnn63jgYToqqzmmI7jgajoqbPjgZfjgYToqqzmmI7vvInjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvcnQgc3VtbWFyeSBvZiB0aGUgc2VydmljZSwgbWFpbmx5IHVzZWQgaW4gdGhlIEN1c3RvbWVyRGFzaGJvYXJkLid9ID0KICAgICAgICAn44K144O844OT44K544Gu55+t44GE5qaC6KaB44CC5Li744GrIEN1c3RvbWVyRGFzaGJvYXJkIOOBp+S9v+eUqOOBleOCjOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXNjcmlwdGlvbiBvZiB0aGUgc2VydmljZS4gU2NyZWVuc2hvdHMgYW5kIHRhYmxlcyBhcmUgYWxzbyBhbGxvd2VkLiBQbGVhc2UgZW5zdXJlIHRoZSBjb3JyZWN0IHdpZHRoIG9mIHRoZSBpbWFnZSBmb3Igc2NyZWVuc2hvdHMuIFRoaXMgY2FuIGJlIGFkanVzdGVkIGluIHRoZSBja2VkaXRvciBhZnRlciB1cGxvYWRpbmcgdGhlIHNjcmVlbnNob3QuIEEgd2lkdGggb2YgNjAwcHggaGFzIHByb3ZlbiB0byBiZSB1c2VmdWwgb3IgeW91IGNhbiBjb25maWd1cmUgYSAibWF4LXdpZHRoIiBvZiA5NSUgdW5kZXIgQWR2YW5jZWQuJ30gPQogICAgICAgICfjgrXjg7zjg5Pjgrnjga7oqqzmmI7jgILjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4jjgoTooajjgoLkvb/nlKjjgafjgY3jgb7jgZnjgILjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4jjga7loLTlkIjjga/jgIHnlLvlg4/jga7luYXjgYzpganliIfjgavjgarjgovjgojjgYbjgavjgZfjgabjgY/jgaDjgZXjgYTjgILluYXjga/jgIHjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4jjgpLjgqLjg4Pjg5fjg63jg7zjg4njgZfjgZ/lvozjgasgQ0tFZGl0b3Ig44Gn6Kq/5pW044Gn44GN44G+44GZ44CC5bmFIDYwMHB4IOOBjOWun+eUqOeahOOBp+OBmeOAguOBvuOBn+OBr+OAgeips+e0sOioreWumuOBpyAibWF4LXdpZHRoIiDjgpIgOTUlIOOBq+ioreWumuOBmeOCi+OBk+OBqOOCguOBp+OBjeOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbW9yZSBzZXJ2aWNlIGNhdGFsb2cgZmllbGRzJ30gPSAn44K144O844OT44K544Kr44K/44Ot44Kw44Gu44OV44Kj44O844Or44OJ44KS6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRoZSBvcHRpb24gb2YgYWRkaW5nIGZ1cnRoZXIgZmllbGRzIGhlcmUgaW4gdGhlIHNlcnZpY2UgY2F0YWxvZyBhdCBhbnkgdGltZS4gVG8gZG8gdGhpcywgcGxlYXNlIGdvIHRvICJBZG1pbiAtPiBEeW5hbWljRmllbGRzIiBhbmQgY3JlYXRlIHRoZSBuZXcgZmllbGQgb2YgdGhlIG9iamVjdCB0eXBlICJTZXJ2aWNlIi4gWW91IGNhbiB0aGVuIGFjdGl2YXRlIHRoZSBmaWVsZCBmb3IgdGhlIGN1c3RvbWVyIGRhc2hib2FyZCB1bmRlciAiQWRtaW4gLT4gRHluYW1pY0ZpZWxkIFNjcmVlbnMiIGJ5IGFzc2lnbmluZyBpdCB1bmRlciAiQ3VzdG9tZXJEYXNoYm9hcmRUaWxlIFNlcnZpY2VDYXRhbG9nIi4nfSA9CiAgICAgICAgJ+OBk+OBk+OBp+OBr+OAgeOBhOOBpOOBp+OCguOCteODvOODk+OCueOCq+OCv+ODreOCsOOBq+ODleOCo+ODvOODq+ODieOCkui/veWKoOOBp+OBjeOBvuOBmeOAguOBneOBruOBn+OCgeOBq+OBr+OAgSJBZG1pbiAtPiBEeW5hbWljRmllbGRzIiDjgafjgqrjg5bjgrjjgqfjgq/jg4jjgr/jgqTjg5cgIlNlcnZpY2UiIOOBruaWsOOBl+OBhOODleOCo+ODvOODq+ODieOCkuS9nOaIkOOBl+OBpuOBj+OBoOOBleOBhOOAguOBneOBruW+jOOAgSJBZG1pbiAtPiBEeW5hbWljRmllbGQgU2NyZWVucyIg44GnICJDdXN0b21lckRhc2hib2FyZFRpbGUgU2VydmljZUNhdGFsb2ciIOOBq+WJsuOCiuW9k+OBpuOCi+OBk+OBqOOBp+OAgemhp+WuouODgOODg+OCt+ODpeODnOODvOODieOBp+OBneOBruODleOCo+ODvOODq+ODieOCkuacieWKueOBq+OBp+OBjeOBvuOBmeOAgic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xBIOaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDntYLmm7TmlrDml6XmmYInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn5pyA57WC5pu05paw6ICFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOmWk+OBruacgOWwj+aZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn6Zai6YCj44GZ44KL44K144O844OT44K5JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+OCteODvOODk+OCueaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn54++5Zyo44Gu44Kk44Oz44K344OH44Oz44OI54q25rOBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+mWoumAo+OBmeOCiyBTTEEnOwoKICAgICMgSlMgVGVtcGxhdGU6IFRpbGVTZXJ2aWNlQ2F0YWxvZ0NvbnRhaW5lcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgbmV3IHRpY2tldCBmb3IgdGhpcyBzZXJ2aWNlLid9ID0gJ+OBk+OBruOCteODvOODk+OCueOBruaWsOimj+ODgeOCseODg+ODiOOCkuS9nOaIkOOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgJXMnfSA9ICclcyDjgpLkvZzmiJAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyAlcyBzdWItc2VydmljZShzKSd9ID0gJyVzIOS7tuOBruOCteODluOCteODvOODk+OCueOCkuihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3JlIGRldGFpbHMnfSA9ICfoqbPntLAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3ViLVNlcnZpY2UocyknfSA9ICfjgrXjg5bjgrXjg7zjg5PjgrknOwoKICAgICMgSlMgVGVtcGxhdGU6IFRpbGVTZXJ2aWNlQ2F0YWxvZ0RldGFpbGVkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWItc2VydmljZShzKSBhdmFpbGFibGUnfSA9ICfku7bjga7jgrXjg5bjgrXjg7zjg5PjgrnjgYzjgYLjgorjgb7jgZknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgbmV3IHRpY2tldCBvZiB0eXBlICVzLid9ID0gJ+OCv+OCpOODlyAlcyDjga7mlrDopo/jg4HjgrHjg4Pjg4jjgpLkvZzmiJDjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRkFRIGFydGljbGUgb24gdGhpcyB0b3BpYyd9ID0gJ+OBk+OBruODiOODlOODg+OCr+OBq+mWouOBmeOCiyBGQVEg6KiY5LqLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZGl0aW9uYWwgaW5mb3JtYXRpb24nfSA9ICfov73liqDmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBob3Vycyd9ID0gJ+OCteODvOODk+OCueaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvXCdjbG9jayd9ID0gJ+aZgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhZGRpdGlvbmFsIGRhdGEgYXJlIGF2YWlsYWJsZS4nfSA9ICfov73liqDjg4fjg7zjgr/jga/jgYLjgorjgb7jgZvjgpPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVydGhlciBpbmZvcm1hdGlvbid9ID0gJ+OBneOBruS7luOBruaDheWgsSc7CgogICAgIyBKUyBUZW1wbGF0ZTogVGlsZVNlcnZpY2VDYXRhbG9nTW9kYWwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBjYXRhbG9nJ30gPSAn44Kr44K/44Ot44Kw44KS5qSc57SiJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9DdXN0b21lclRpbGVTZXJ2aWNlQ2F0YWxvZy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVzY3JpcHRpb24gbm90IGF2YWlsYWJsZS4nfSA9ICfoqqzmmI7jga/jgYLjgorjgb7jgZvjgpPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBGaWxlSUQhJ30gPSAnRmlsZUlEIOOBjOW/heimgeOBp+OBme+8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICdTZXJ2aWNlSUQg44GM5oyH5a6a44GV44KM44Gm44GE44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzIOOBjOODh+ODvOOCv+ODmeODvOOCueOBq+imi+OBpOOBi+OCiuOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJ+eovOWDjeS4rSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAn6K2m5ZGKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAn44Kk44Oz44K344OH44Oz44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICfkuI3mmI4nOwoKICAgICMgSlMgRmlsZTogQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZT8nfSA9CiAgICAgICAgJ+OBk+OBruOCteODvOODk+OCueOBruiqrOaYjuOBruiogOiqnuOCkuacrOW9k+OBq+WJiumZpOOBl+OBvuOBmeOBi++8nyc7CgogICAgIyBKUyBGaWxlOiBDb3JlLkN1c3RvbWVyLlRpbGVTZXJ2aWNlQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdWx0cyBmb3IgJXMnfSA9ICclcyDjga7mpJzntKLntZDmnpwnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgc2VydmljZSBjYXRhbG9nLid9ID0gJ+OCteODvOODk+OCueOCq+OCv+ODreOCsOOBrui/veWKoOioreWumuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lclRpbGVTZXJ2aWNlQ2F0YWxvZyBBSkFYIE1vZHVsZS4nfSA9ICdDdXN0b21lclRpbGVTZXJ2aWNlQ2F0YWxvZyDjga4gQUpBWCDjg6Ljgrjjg6Xjg7zjg6vjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIGEgbGlzdCBvZiBkeW5hbWljIGZpZWxkIG9iamVjdCB0eXBlcyB3aGljaCBhcmUgYWxsb3dlZCB0byBiZSBhc3NpZ25lZCB0byBhY3Rpb25zIG9mIHRoaXMgcGFja2FnZSB2aWEgdGhlIGR5bmFtaWMgZmllbGQgc2NyZWVucyBpbnRlcmZhY2UuJ30gPQogICAgICAgICfjg4DjgqTjg4rjg5/jg4Pjgq/jg5XjgqPjg7zjg6vjg4nnlLvpnaLjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgpLku4vjgZfjgabjgIHjgZPjga7jg5Hjg4PjgrHjg7zjgrjjga7jgqLjgq/jgrfjg6fjg7PjgavlibLjgorlvZPjgabjgovjgZPjgajjgYzjgafjgY3jgovjg4DjgqTjg4rjg5/jg4Pjgq/jg5XjgqPjg7zjg6vjg4njga7jgqrjg5bjgrjjgqfjgq/jg4jjgr/jgqTjg5fjga7kuIDopqfjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHNlcnZpY2UgY2F0YWxvZyBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+mhp+WuouOCpOODs+OCv+ODleOCp+ODvOOCueOBruOCteODvOODk+OCueOCq+OCv+ODreOCsOeUu+mdouOBq+ihqOekuuOBmeOCi+ODgOOCpOODiuODn+ODg+OCr+ODleOCo+ODvOODq+ODieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVudCBtb2R1bGUgcmVnaXN0cmF0aW9uLiBDdXJyZW50bHksIHRoZSBjcml0aWNhbGl0eSBvZiB0aGUgc2VydmljZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIHNlcnZpY2UsIGJ1dCB0aGlzIGhhcyBubyBlZmZlY3QuIFRoZXJlZm9yZSwgdGhpcyBldmVudCBtb2R1bGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIER5bmFtaWNGaWVsZCBDcml0aWNhbGl0eSBpbiBhIHRpY2tldCBhcyBzb29uIGFzIGEgc2VydmljZSBoYXMgYmVlbiBhc3NpZ25lZC4gUGxlYXNlIGFjdGl2YXRlIHRoZSBTeXNDb25maWcgb3B0aW9uIFNldFByaW9yaXR5RnJvbUNyaXRpY2FsaXR5QW5kSW1wYWN0TWF0cml4IHRvIHNldCB0aGUgcHJpb3JpdHkgaW4gdGhlIG5leHQgc3RlcCBiYXNlZCBhbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0Lid9ID0KICAgICAgICAn44Kk44OZ44Oz44OI44Oi44K444Ol44O844Or44Gu55m76Yyy44CC54++5Zyo44CB44K144O844OT44K544Gu6YeN6KaB5bqm44Gv44K144O844OT44K55YG044Gn44KC6Kit5a6a44Gn44GN44G+44GZ44GM44CB5Yq55p6c44Gv44GC44KK44G+44Gb44KT44CC44Gd44Gu44Gf44KB44CB44K144O844OT44K544GM5Ymy44KK5b2T44Gm44KJ44KM44Gf5pmC54K544Gn44OB44Kx44OD44OI44Gu44OA44Kk44OK44Of44OD44Kv44OV44Kj44O844Or44OJIENyaXRpY2FsaXR5IOOCkuiHquWLleeahOOBq+abtOaWsOOBmeOCi+OCpOODmeODs+ODiOODouOCuOODpeODvOODq+OCkuWun+ijheOBl+OBpuOBhOOBvuOBmeOAguasoeOBruOCueODhuODg+ODl+OBp+mHjeimgeW6puOBqOW9semfv+W6puOBq+WfuuOBpeOBhOOBpuWEquWFiOW6puOCkuioreWumuOBmeOCi+OBq+OBr+OAgeOCt+OCueODhuODoOioreWumuOCquODl+OCt+ODp+ODsyBTZXRQcmlvcml0eUZyb21Dcml0aWNhbGl0eUFuZEltcGFjdE1hdHJpeCDjgpLmnInlirnjgavjgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gQ3VycmVudGx5LCB0aGUgY3JpdGljYWxpdHkgb2YgdGhlIHNlcnZpY2UgY2FuIGFsc28gYmUgc2V0IGluIHRoZSBzZXJ2aWNlLCBidXQgdGhpcyBoYXMgbm8gZWZmZWN0LiBUaGVyZWZvcmUsIHRoaXMgZXZlbnQgbW9kdWxlIGhhcyBiZWVuIGltcGxlbWVudGVkIHRoYXQgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwcmlvcml0eSByZWdhcmRpbmcgQ3JpdGljYWxpdHkgYW5kIEltcGFjdCBpbiBhIHRpY2tldC4nfSA9CiAgICAgICAgJ+OCpOODmeODs+ODiOODouOCuOODpeODvOODq+OBrueZu+mMsuOAguePvuWcqOOAgeOCteODvOODk+OCueOBrumHjeimgeW6puOBr+OCteODvOODk+OCueWBtOOBp+OCguioreWumuOBp+OBjeOBvuOBmeOBjOOAgeWKueaenOOBr+OBguOCiuOBvuOBm+OCk+OAguOBneOBruOBn+OCgeOAgeODgeOCseODg+ODiOOBrumHjeimgeW6puOBqOW9semfv+W6puOBq+W/nOOBmOOBpuWEquWFiOW6puOCkuiHquWLleeahOOBq+abtOaWsOOBmeOCi+OCpOODmeODs+ODiOODouOCuOODpeODvOODq+OCkuWun+ijheOBl+OBpuOBhOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaW5kIHRoZSByaWdodCBzZXJ2aWNlIGZvciB5b3VyIHRpY2tldCd9ID0gJ+ODgeOCseODg+ODiOOBq+WQiOOBo+OBn+OCteODvOODk+OCueOCkuaOouOBmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHNlcnZpY2VzIHdpdGggdGhlIGZvbGxvd2luZyB0aWNrZXQgdHlwZSBsYXN0Lid9ID0gJ+asoeOBruODgeOCseODg+ODiOOCv+OCpOODl+OBruOCteODvOODk+OCueOCkuacgOW+jOOBq+ihqOekuuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgRkFRIGZpZWxkIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIEZBUSBhcnRpY2xlIGluIHRoZSBzaWRlYmFyIChlLmcuIEZpZWxkMSwgRmllbGQyLCBGaWVsZDMuLi4pLid9ID0KICAgICAgICAn44K144Kk44OJ44OQ44O844GnIEZBUSDoqJjkuovjga7oqqzmmI7jgajjgZfjgabkvb/nlKjjgZnjgosgRkFRIOOBruODleOCo+ODvOODq+ODie+8iOS+izogRmllbGQx44CBRmllbGQy44CBRmllbGQzLi4u77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBBQ0xzIGZvciBkaWZmZXJlbnQgaW50ZXJmYWNlcyB3aGVuIGNyZWF0aW5nIHNlcnZpY2VzLiBTZXJ2aWNlcyB3aWxsIHRoZW4gb25seSBiZSBkaXNwbGF5ZWQgaWYgdGhlIHRpY2tldCB0eXBlIHN0b3JlZCBpbiB0aGUgc2VydmljZSBoYXMgYmVlbiBzZWxlY3RlZC4gVGhlICJBZGRCdWxrQUNMIiBjb25zb2xlIHNjcmlwdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBBQ0xzIGZvciBzZXJ2aWNlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZS4nfSA9CiAgICAgICAgJ+OBk+OBruOCquODl+OCt+ODp+ODs+OBq+OCiOOCiuOAgeOCteODvOODk+OCueOBruS9nOaIkOaZguOBq+WQhOOCpOODs+OCv+ODleOCp+ODvOOCueeUqOOBriBBQ0wg44KS6Ieq5YuV55Sf5oiQ44Gn44GN44G+44GZ44CC44Gd44Gu5aC05ZCI44CB44K144O844OT44K544Gr55m76Yyy44GV44KM44Gf44OB44Kx44OD44OI44K/44Kk44OX44GM6YG45oqe44GV44KM44Gf44Go44GN44Gr44Gu44G/44CB44Gd44Gu44K144O844OT44K544GM6KGo56S644GV44KM44G+44GZ44CC44GZ44Gn44Gr5L2c5oiQ5riI44G/44Gu44K144O844OT44K544GuIEFDTCDjgpLkvZzmiJDjgZnjgovjgavjga/jgIHjgrPjg7Pjgr3jg7zjg6vjgrnjgq/jg6rjg5fjg4ggIkFkZEJ1bGtBQ0wiIOOCguS9v+eUqOOBp+OBjeOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBwcmVjb25maWd1cmUgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIEFDTHMuIFRoZSBhaW0gaXMgdG8gb25seSBkaXNwbGF5IHRoZSBzZXJ2aWNlcyB0aGF0IGhhdmUgYWxzbyBiZWVuIGFzc2lnbmVkIHRvIHRoZSBzZXJ2aWNlIGluIHRoZSBzZXJ2aWNlIGNhdGFsb2cuIFRvIHVzZSB0aGlzIGZ1bmN0aW9uLCBwbGVhc2UgZmlyc3QgZW5hYmxlIHRoZSAiU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHMiIG9wdGlvbi4gIkdlbmVyYXRlSW5pdGFsQUNMVG9EaXNhYmxlQWxsU2VydmljZXMiIGdlbmVyYXRlcyBhbiBBQ0wgdGhhdCBpbml0aWFsbHkgaGlkZXMgYWxsIHNlcnZpY2VzLiBUaGUgdmFsdWUgIlBvc3NpYmxlIiBvciAiUG9zc2libGVBZGQiIGNhbiBiZSBzZXQgZm9yIHRoZSBrZXkgIkNvbmZpZ0NoYW5nZSIuIFRoZSAiQUNMRGVwbG95IiBrZXkgZGVjaWRlcyB3aGV0aGVyIHRoZSBjaGFuZ2VkIEFDTCBzaG91bGQgYWxzbyBiZSBkZXBsb3llZCBpbW1lZGlhdGVseS4gIkFDTFZhbGlkSUQiICgxLCAyLCAzKSBzZXRzIHRoZSBBQ0xzIHRvIHZhbGlkLCBpbnZhbGlkIG9yIHRlbXBvcmFyaWx5IGludmFsaWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBDdXN0b21lckRhc2hib2FyZC4gTW9kdWxlIGlzIHJlcXVpcmVkLid9ID0KICAgICAgICAnQ3VzdG9tZXJEYXNoYm9hcmQg44Gu44K/44Kk44Or55m76Yyy44CCTW9kdWxlIOOBr+W/hemgiOOBp+OBmeOAgic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0FkZGl0aW9uYWwgaW5mb3JtYXRpb24nLAogICAgJ0FsbCcsCiAgICAnQ2xvc2UgdGhpcyBkaWFsb2cnLAogICAgJ0NyZWF0ZSAlcycsCiAgICAnQ3JlYXRlIFRpY2tldCcsCiAgICAnQ3JlYXRlIGEgbmV3IHRpY2tldCBmb3IgdGhpcyBzZXJ2aWNlLicsCiAgICAnQ3JlYXRlIGEgbmV3IHRpY2tldCBvZiB0eXBlICVzLicsCiAgICAnRGV0YWlscycsCiAgICAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNlcnZpY2UgZGVzY3JpcHRpb24gbGFuZ3VhZ2U/JywKICAgICdGQVEgYXJ0aWNsZSBvbiB0aGlzIHRvcGljJywKICAgICdGaXJzdCBSZXNwb25zZSBUaW1lJywKICAgICdGdXJ0aGVyIGluZm9ybWF0aW9uJywKICAgICdNb3JlIGRldGFpbHMnLAogICAgJ05vIGFkZGl0aW9uYWwgZGF0YSBhcmUgYXZhaWxhYmxlLicsCiAgICAnT0snLAogICAgJ1Jlc3VsdHMnLAogICAgJ1Jlc3VsdHMgZm9yICVzJywKICAgICdTZWFyY2gnLAogICAgJ1NlYXJjaCBjYXRhbG9nJywKICAgICdTZXJ2aWNlIEluZm9ybWF0aW9uJywKICAgICdTZXJ2aWNlIGhvdXJzJywKICAgICdTaG93ICVzIHN1Yi1zZXJ2aWNlKHMpJywKICAgICdTaG93IGRldGFpbHMgb2YgdGhpcyBzZXJ2aWNlLicsCiAgICAnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50JywKICAgICdTb2x1dGlvbiBUaW1lJywKICAgICdTdWItU2VydmljZShzKScsCiAgICAnaG91cihzKScsCiAgICAnb1wnY2xvY2snLAogICAgJ3N1Yi1zZXJ2aWNlKHMpIGF2YWlsYWJsZScsCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Modules/AdminServiceImportExport.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5TZXJ2aWNlSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKdXNlIExpc3Q6OkFsbFV0aWxzIHF3KGZpcnN0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6WUFNTCcsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBvYmplY3RzCiAgICBteSAkTGF5b3V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFlBTUxPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WUFNTCcpOwogICAgbXkgJENhY2hlT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICAkU2VsZi0+e1N1YmFjdGlvbn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3ViYWN0aW9uJyApIHx8ICcnOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgSW1wb3J0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSW1wb3J0JyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJVVwbG9hZFN0dWZmID0gJFBhcmFtT2JqZWN0LT5HZXRVcGxvYWRBbGwoCiAgICAgICAgICAgIFBhcmFtID0+ICdGaWxlVXBsb2FkJywKICAgICAgICApOwoKICAgICAgICBteSAkT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzJyApOwoKICAgICAgICBteSAkUGVybFN0cnVjdHVyZSA9ICRZQU1MT2JqZWN0LT5Mb2FkKAogICAgICAgICAgICBEYXRhID0+ICRVcGxvYWRTdHVmZntDb250ZW50fSwKICAgICAgICApOwoKICAgICAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0FkbWluU2VydmljZUltcG9ydEV4cG9ydCcsCiAgICAgICAgICAgIEtleSAgID0+ICdBZG1pblNlcnZpY2VJbXBvcnRFeHBvcnQ6OicgLiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFZhbHVlID0+ICRQZXJsU3RydWN0dXJlLAogICAgICAgICAgICBUVEwgICA9PiA2MCAqIDYwLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2soCiAgICAgICAgICAgIERhdGEgICAgICAgICAgICAgICAgICAgICAgPT4gJFBlcmxTdHJ1Y3R1cmUsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntTdWJhY3Rpb259LAogICAgICAgICAgICBPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzID0+ICRPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzIHx8IDAsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEltcG9ydEFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0ltcG9ydEFjdGlvbicgKSB7CgogICAgICAgIG15ICRJbXBvcnREYXRhID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJ0FkbWluU2VydmljZUltcG9ydEV4cG9ydCcsCiAgICAgICAgICAgIEtleSAgPT4gJ0FkbWluU2VydmljZUltcG9ydEV4cG9ydDo6JyAuICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkSW1wb3J0RGF0YSkgKSB7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIEFkbWluU2VydmljZQogICAgICAgICAgICBteSAkSFRNTCA9ICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZG1pblNlcnZpY2UiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJEhUTUw7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBteSBAU2VydmljZXNTZWxlY3RlZCAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdTZXJ2aWNlcycgKTsKICAgICAgICBteSAkT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzJyApIHx8IDA7CgogICAgICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICdBZG1pblNlcnZpY2VJbXBvcnRFeHBvcnQnLAogICAgICAgICAgICBLZXkgID0+ICdBZG1pblNlcnZpY2VJbXBvcnRFeHBvcnQ6OicgLiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgICAgICMgSW1wb3J0IFNlcnZpY2VzCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRJbXBvcnREYXRhLT57U2VydmljZXN9ICkgKSB7CgogICAgICAgICAgICBteSAlU2VydmljZXNJbXBvcnQ7CiAgICAgICAgICAgIFNFUlZJQ0VOQU1FOgogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VOYW1lICgga2V5cyAkSW1wb3J0RGF0YS0+e1NlcnZpY2VzfS0+JSogKSB7CgogICAgICAgICAgICAgICAgbXkgJFNlbGVjdGVkID0gZ3JlcCB7ICRTZXJ2aWNlTmFtZSBlcSAkXyB9IEBTZXJ2aWNlc1NlbGVjdGVkOwogICAgICAgICAgICAgICAgbmV4dCBTRVJWSUNFTkFNRSBpZiAhJFNlbGVjdGVkOwoKICAgICAgICAgICAgICAgIG5leHQgU0VSVklDRU5BTUUgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkSW1wb3J0RGF0YS0+e1NlcnZpY2VzfXskU2VydmljZU5hbWV9ICk7CgogICAgICAgICAgICAgICAgJFNlcnZpY2VzSW1wb3J0eyRTZXJ2aWNlTmFtZX0gPSAkSW1wb3J0RGF0YS0+e1NlcnZpY2VzfXskU2VydmljZU5hbWV9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VydmljZU9iamVjdC0+SW1wb3J0U2VydmljZXMoCiAgICAgICAgICAgICAgICBTZXJ2aWNlcyAgICAgICAgICAgICAgICAgID0+IFwlU2VydmljZXNJbXBvcnQsCiAgICAgICAgICAgICAgICBPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzID0+ICRPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlZGlyZWN0IHRvIEFkbWluU2VydmljZQogICAgICAgIG15ICRIVE1MID0gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWRtaW5TZXJ2aWNlIgogICAgICAgICk7CgogICAgICAgIHJldHVybiAkSFRNTDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEV4cG9ydAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0V4cG9ydCcgKSB7CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2soCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e1N1YmFjdGlvbn0sCiAgICAgICAgKTsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBFeHBvcnRBY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdFeHBvcnRBY3Rpb24nICkgewoKICAgICAgICAjIGNoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMKICAgICAgICBteSBAU2VydmljZXMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnU2VydmljZXMnICk7CgogICAgICAgIG15ICVEYXRhOwogICAgICAgIG15ICRIVE1MOwoKICAgICAgICBpZiAoQFNlcnZpY2VzKSB7CgogICAgICAgICAgICAkRGF0YXtTZXJ2aWNlc30gPSAkU2VydmljZU9iamVjdC0+RXhwb3J0U2VydmljZXMoCiAgICAgICAgICAgICAgICBTZXJ2aWNlcyA9PiBcQFNlcnZpY2VzLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJURhdGEgKSB7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIEFkbWluU2VydmljZUltcG9ydEV4cG9ydAogICAgICAgICAgICAkSFRNTCAuPSAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWRtaW5TZXJ2aWNlSW1wb3J0RXhwb3J0O1N1YmFjdGlvbj1FeHBvcnQiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJEhUTUw7CiAgICAgICAgfQoKICAgICAgICAjIGNvbnZlcnQgdGhlIHNlcnZpY2UgZGF0YSBoYXNoIHRvIHN0cmluZwogICAgICAgIG15ICRTZXJ2aWNlRGF0YVlBTUwgPSAkWUFNTE9iamVjdC0+RHVtcCggRGF0YSA9PiBcJURhdGEgKTsKCiAgICAgICAgIyBHZXQgdGhlIGN1cnJlbnQgdGltZSBmb3JtYXR0ZWQgbGlrZSAnMjAxNi0wMS0zMSAxNDowNTo0NScuCiAgICAgICAgIyBIb3BpbmcgdGhhdCBub2JvZHkgaGFzIHJlZ2lzdGVyZWQgb2JqZWN0IHBhcmFtcyBmb3IgS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lCiAgICAgICAgbXkgJFRpbWVTdGFtcCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub1N0cmluZygpOwoKICAgICAgICAjIHNlbmQgdGhlIHJlc3VsdCB0byB0aGUgYnJvd3NlcgogICAgICAgICRIVE1MID0gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbDsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU2VydmljZURhdGFZQU1MLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICJFeHBvcnRfU2VydmljZXNfJFRpbWVTdGFtcC55bWwiLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkSFRNTDsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgcmVkaXJlY3QgdG8gQWRtaW5TZXJ2aWNlCiAgICAgICAgbXkgJEhUTUwgPSAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZG1pblNlcnZpY2UiCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRIVE1MOwogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIF9NYXNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICMgY2FsbCBoaW50IGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtUeXBlfSAuICdIaW50JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggISRQYXJhbXtEYXRhfSApIHsKCiAgICAgICAgJFBhcmFte0RhdGF9e1NlcnZpY2VzfSA9IHt9OwoKICAgICAgICAjIFRPRE8gY2hhbmdlIHRvIFNlcnZpY2VMaXN0R2V0KCkKICAgICAgICAjIGV4cG9ydAogICAgICAgIG15ICVTZXJ2aWNlcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBrZXlzICVTZXJ2aWNlcyApIHsKICAgICAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUGFyYW17RGF0YX17U2VydmljZXN9eyAkU2VydmljZURhdGF7TmFtZX0gfSA9IFwlU2VydmljZURhdGE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgcHJpbnQgdGhlIGxpc3Qgb2Ygc2VydmljZXMKICAgICRTZWxmLT5fU2VydmljZVNob3coCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TZXJ2aWNlSW1wb3J0RXhwb3J0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICk7CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX1NlcnZpY2VTaG93IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRWYWxpZE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKCiAgICAjIGNoZWNrIGlmIGF0IGxlYXN0IDEgZHluYW1pYyBmaWVsZCBpcyByZWdpc3RlcmVkIGluIHRoZSBzeXN0ZW0KICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfXtTZXJ2aWNlc30gKSApIHsKCiAgICAgICAgbXkgQFNlcnZpY2VzQWxyZWFkeVVzZWQ7CgogICAgICAgIFNFUlZJQ0VOQU1FOgogICAgICAgIGZvciBteSAkU2VydmljZU5hbWUgKCBzb3J0IGtleXMgJFBhcmFte0RhdGF9e1NlcnZpY2VzfS0+JSogKSB7CgogICAgICAgICAgICBteSAkU2VydmljZURhdGEgPSAkUGFyYW17RGF0YX17U2VydmljZXN9eyRTZXJ2aWNlTmFtZX07CgogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlc0FscmVhZHlVc2VkLCAkU2VydmljZURhdGEtPntOYW1lfTsKCiAgICAgICAgICAgIG5leHQgU0VSVklDRU5BTUUgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRTZXJ2aWNlRGF0YSk7CgogICAgICAgICAgICAjIGNvbnZlcnQgVmFsaWRJRCB0byBWYWxpZGl0eSBzdHJpbmcKICAgICAgICAgICAgbXkgJFZhbGlkID0gJFNlcnZpY2VEYXRhLT57VmFsaWR9IHx8ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoCiAgICAgICAgICAgICAgICBWYWxpZElEID0+ICRTZXJ2aWNlRGF0YS0+e1ZhbGlkSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gKAogICAgICAgICAgICAgICAgJXskU2VydmljZURhdGF9LAogICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRCbG9ja3MgKCAnU2VydmljZXNSb3cnLCAnU2VydmljZUNoZWNrYm94JywgJFBhcmFte1R5cGV9ICkgewoKICAgICAgICAgICAgICAgICMgcHJpbnQgZWFjaCBzZXJ2aWNlIHJvdwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkQmxvY2tzLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlU2VydmljZURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2Ugc2hvdyBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AdminSLAImportExport.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5TTEFJbXBvcnRFeHBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTGlzdDo6QWxsVXRpbHMgcXcoZmlyc3QpOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTTEEnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OllBTUwnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRTTEFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFlBTUxPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpZQU1MJyk7CiAgICBteSAkQ2FjaGVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgJFNlbGYtPntTdWJhY3Rpb259ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKSB8fCAnJzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEltcG9ydAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0ltcG9ydCcgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICBQYXJhbSA9PiAnRmlsZVVwbG9hZCcsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJE92ZXJ3cml0ZUV4aXN0aW5nRW50aXRpZXMgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcycgKTsKCiAgICAgICAgbXkgJFBlcmxTdHJ1Y3R1cmUgPSAkWUFNTE9iamVjdC0+TG9hZCgKICAgICAgICAgICAgRGF0YSA9PiAkVXBsb2FkU3R1ZmZ7Q29udGVudH0sCiAgICAgICAgKTsKCiAgICAgICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICdBZG1pblNMQUltcG9ydEV4cG9ydCcsCiAgICAgICAgICAgIEtleSAgID0+ICdBZG1pblNMQUltcG9ydEV4cG9ydDo6JyAuICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVmFsdWUgPT4gJFBlcmxTdHJ1Y3R1cmUsCiAgICAgICAgICAgIFRUTCAgID0+IDYwICogNjAsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFzaygKICAgICAgICAgICAgRGF0YSAgICAgICAgICAgICAgICAgICAgICA9PiAkUGVybFN0cnVjdHVyZSwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1N1YmFjdGlvbn0sCiAgICAgICAgICAgIE92ZXJ3cml0ZUV4aXN0aW5nRW50aXRpZXMgPT4gJE92ZXJ3cml0ZUV4aXN0aW5nRW50aXRpZXMgfHwgMCwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgSW1wb3J0QWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSW1wb3J0QWN0aW9uJyApIHsKCiAgICAgICAgbXkgJEltcG9ydERhdGEgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAnQWRtaW5TTEFJbXBvcnRFeHBvcnQnLAogICAgICAgICAgICBLZXkgID0+ICdBZG1pblNMQUltcG9ydEV4cG9ydDo6JyAuICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkSW1wb3J0RGF0YSkgKSB7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIEFkbWluU0xBCiAgICAgICAgICAgIG15ICRIVE1MID0gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFkbWluU0xBIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRIVE1MOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgbXkgQFNMQXNTZWxlY3RlZCAgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnU0xBcycgKTsKICAgICAgICBteSAkT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzJyApIHx8IDA7CgogICAgICAgICRDYWNoZU9iamVjdC0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICdBZG1pblNMQUltcG9ydEV4cG9ydCcsCiAgICAgICAgICAgIEtleSAgPT4gJ0FkbWluU0xBSW1wb3J0RXhwb3J0OjonIC4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICAgICAjIEltcG9ydCBTTEFzCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRJbXBvcnREYXRhLT57U0xBc30gKSApIHsKCiAgICAgICAgICAgIG15ICVTTEFJbXBvcnQ7CiAgICAgICAgICAgIFNMQU5BTUU6CiAgICAgICAgICAgIGZvciBteSAkU0xBTmFtZSAoIGtleXMgJEltcG9ydERhdGEtPntTTEFzfS0+JSogKSB7CgogICAgICAgICAgICAgICAgbXkgJFNlbGVjdGVkID0gZ3JlcCB7ICRTTEFOYW1lIGVxICRfIH0gQFNMQXNTZWxlY3RlZDsKICAgICAgICAgICAgICAgIG5leHQgU0xBTkFNRSBpZiAhJFNlbGVjdGVkOwoKICAgICAgICAgICAgICAgIG5leHQgU0xBTkFNRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICRJbXBvcnREYXRhLT57U0xBc317JFNMQU5hbWV9ICk7CgogICAgICAgICAgICAgICAgJFNMQUltcG9ydHskU0xBTmFtZX0gPSAkSW1wb3J0RGF0YS0+e1NMQXN9eyRTTEFOYW1lfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNMQU9iamVjdC0+SW1wb3J0U0xBcygKICAgICAgICAgICAgICAgIFNMQXMgICAgICAgICAgICAgICAgICAgICAgPT4gXCVTTEFJbXBvcnQsCiAgICAgICAgICAgICAgICBPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzID0+ICRPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlZGlyZWN0IHRvIEFkbWluU0xBCiAgICAgICAgbXkgJEhUTUwgPSAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZG1pblNMQSIKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJEhUTUw7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBFeHBvcnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdFeHBvcnQnICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntTdWJhY3Rpb259LAogICAgICAgICk7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgRXhwb3J0QWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRXhwb3J0QWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICAgICAgbXkgQFNMQXMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnU0xBcycgKTsKCiAgICAgICAgbXkgJURhdGE7CiAgICAgICAgbXkgJEhUTUw7CgogICAgICAgIGlmIChAU0xBcykgewoKICAgICAgICAgICAgJERhdGF7U0xBc30gPSAkU0xBT2JqZWN0LT5FeHBvcnRTTEFzKAogICAgICAgICAgICAgICAgU0xBcyAgID0+IFxAU0xBcywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICElRGF0YSApIHsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gQWRtaW5TTEFJbXBvcnRFeHBvcnQKICAgICAgICAgICAgJEhUTUwgLj0gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFkbWluU0xBSW1wb3J0RXhwb3J0O1N1YmFjdGlvbj1FeHBvcnQiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJEhUTUw7CiAgICAgICAgfQoKICAgICAgICAjIGNvbnZlcnQgdGhlIFNMQSBkYXRhIGhhc2ggdG8gc3RyaW5nCiAgICAgICAgbXkgJFNMQURhdGFZQU1MID0gJFlBTUxPYmplY3QtPkR1bXAoIERhdGEgPT4gXCVEYXRhICk7CgogICAgICAgICMgR2V0IHRoZSBjdXJyZW50IHRpbWUgZm9ybWF0dGVkIGxpa2UgJzIwMTYtMDEtMzEgMTQ6MDU6NDUnLgogICAgICAgICMgSG9waW5nIHRoYXQgbm9ib2R5IGhhcyByZWdpc3RlcmVkIG9iamVjdCBwYXJhbXMgZm9yIEtlcm5lbDo6U3lzdGVtOjpEYXRlVGltZQogICAgICAgIG15ICRUaW1lU3RhbXAgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKS0+VG9TdHJpbmcoKTsKCiAgICAgICAgIyBzZW5kIHRoZSByZXN1bHQgdG8gdGhlIGJyb3dzZXIKICAgICAgICAkSFRNTCA9ICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFNMQURhdGFZQU1MLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICJFeHBvcnRfU0xBc18kVGltZVN0YW1wLnltbCIsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRIVE1MOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyByZWRpcmVjdCB0byBBZG1pblNMQQogICAgICAgIG15ICRIVE1MID0gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWRtaW5TTEEiCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRIVE1MOwogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIF9NYXNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRTTEFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICMgY2FsbCBoaW50IGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtUeXBlfSAuICdIaW50JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggISRQYXJhbXtEYXRhfSApIHsKCiAgICAgICAgJFBhcmFte0RhdGF9e1NMQXN9ID0ge307CgogICAgICAgICMgVE9ETyBjaGFuZ2UgdG8gU0xBTGlzdEdldCgpCiAgICAgICAgIyBleHBvcnQKICAgICAgICBteSAlU0xBcyA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICAgICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IFNMQSBkYXRhCiAgICAgICAgZm9yIG15ICRTTEFJRCAoIGtleXMgJVNMQXMgKSB7CiAgICAgICAgICAgIG15ICVTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUGFyYW17RGF0YX17U0xBc317ICRTTEFEYXRhe05hbWV9IH0gPSBcJVNMQURhdGE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgcHJpbnQgdGhlIGxpc3Qgb2YgU0xBcwogICAgJFNlbGYtPl9TTEFTaG93KAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU0xBSW1wb3J0RXhwb3J0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICk7CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX1NMQVNob3cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFZhbGlkT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwoKICAgICMgY2hlY2sgaWYgYXQgbGVhc3QgMSBkeW5hbWljIGZpZWxkIGlzIHJlZ2lzdGVyZWQgaW4gdGhlIHN5c3RlbQogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9e1NMQXN9ICkgKSB7CgogICAgICAgIG15IEBTTEFzQWxyZWFkeVVzZWQ7CgogICAgICAgIFNMQU5BTUU6CiAgICAgICAgZm9yIG15ICRTTEFOYW1lICggc29ydCBrZXlzICRQYXJhbXtEYXRhfXtTTEFzfS0+JSogKSB7CgogICAgICAgICAgICBteSAkU0xBRGF0YSA9ICRQYXJhbXtEYXRhfXtTTEFzfXskU0xBTmFtZX07CgogICAgICAgICAgICBwdXNoIEBTTEFzQWxyZWFkeVVzZWQsICRTTEFEYXRhLT57TmFtZX07CgogICAgICAgICAgICBuZXh0IFNMQU5BTUUgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRTTEFEYXRhKTsKCiAgICAgICAgICAgICMgY29udmVydCBWYWxpZElEIHRvIFZhbGlkaXR5IHN0cmluZwogICAgICAgICAgICBteSAkVmFsaWQgPSAkU0xBRGF0YS0+e1ZhbGlkfSB8fCAkVmFsaWRPYmplY3QtPlZhbGlkTG9va3VwKAogICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAkU0xBRGF0YS0+e1ZhbGlkSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJVNMQURhdGEgPSAoCiAgICAgICAgICAgICAgICAleyRTTEFEYXRhfSwKICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciBteSAkQmxvY2tzICggJ1NMQXNSb3cnLCAnU0xBQ2hlY2tib3gnLCAkUGFyYW17VHlwZX0gKSB7CgogICAgICAgICAgICAgICAgIyBwcmludCBlYWNoIFNMQSByb3cKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEJsb2NrcywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVNMQURhdGEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2Ugc2hvdyBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/Modules/CustomerTileServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6Q3VzdG9tZXJUaWxlU2VydmljZUNhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExheW91dE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICRTZXJ2aWNlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIEhUTUxWaWV3IFN1YmFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdIVE1MVmlldycgKSB7CgogICAgICAgIGlmICggISRTZXJ2aWNlSUQgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkZWQgU2VydmljZUlEISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gb24gdGhpcyBzZXJ2aWNlLgogICAgICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFNlcnZpY2VMaXN0eyAkU2VydmljZXtTZXJ2aWNlSUR9IH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lck5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgIH0KCiAgICAgICAgIyBBZGQgX2JsYW5rIHRhcmdldCB0byBMaW5rcyBpbiBMb25nIERlc2NyaXB0aW9uCiAgICAgICAgJFNlcnZpY2V7RGVzY3JpcHRpb25Mb25nfSA9ICRMYXlvdXRPYmplY3QtPkhUTUxMaW5rUXVvdGUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkU2VydmljZXtEZXNjcmlwdGlvbnN9eyAkTGF5b3V0T2JqZWN0LT57VXNlckxhbmd1YWdlfSB9e0Rlc2NyaXB0aW9uTG9uZ30KICAgICAgICAgICAgICAgIHx8ICRTZXJ2aWNle0Rlc2NyaXB0aW9uc317ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGVmYXVsdExhbmd1YWdlJykgfXtEZXNjcmlwdGlvbkxvbmd9CiAgICAgICAgICAgICAgICB8fCAkU2VydmljZXtEZXNjcmlwdGlvbnN9eydlbid9e0Rlc2NyaXB0aW9uTG9uZ30gfHwgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdEZXNjcmlwdGlvbiBub3QgYXZhaWxhYmxlLicpLAogICAgICAgICk7CgogICAgICAgICRTZXJ2aWNle0Rlc2NyaXB0aW9uTG9uZ30KICAgICAgICAgICAgPX4gc3sgaW5kZXhbLl1wbCBbP10gQWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tIH17Y3VzdG9tZXIucGw/QWN0aW9uPUN1c3RvbWVyVGlsZVNlcnZpY2VDYXRhbG9nfWd4bXM7CgogICAgICAgICMgYnVpbGQgYmFzZSBVUkwgZm9yIGlubGluZSBpbWFnZXMKICAgICAgICBteSAkU2Vzc2lvbklEID0gJyc7CiAgICAgICAgaWYgKCAkU2VsZi0+e1Nlc3Npb25JRH0gJiYgISRTZWxmLT57U2Vzc2lvbklEQ29va2llfSApIHsKICAgICAgICAgICAgJFNlc3Npb25JRCA9ICc7JyAuICRTZWxmLT57U2Vzc2lvbk5hbWV9IC4gJz0nIC4gJFNlbGYtPntTZXNzaW9uSUR9OwogICAgICAgICAgICAkU2VydmljZXtEZXNjcmlwdGlvbkxvbmd9ID1+IHN7CiAgICAgICAgICAgICAgICAoQWN0aW9uPUN1c3RvbWVyVGlsZVNlcnZpY2VDYXRhbG9nO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7U2VydmljZUlEPVxkKztGaWxlSUQ9XGQrKQogICAgICAgICAgICB9eyQxJFNlc3Npb25JRH1nbXN4OwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbmVlZGVkIEhUTUwgaGVhZGVycwogICAgICAgICRTZXJ2aWNle0Rlc2NyaXB0aW9uTG9uZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgID0+ICRTZXJ2aWNle0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIENoYXJzZXQgICAgICAgICAgID0+ICd1dGYtOCcsCiAgICAgICAgICAgIEN1c3RvbWVySW50ZXJmYWNlID0+IDEsCiAgICAgICAgICAgIEN1c3RvbWVyVUlTdHlsZXMgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4gY29tcGxldGUgSFRNTCBhcyBhbiBhdHRhY2htZW50CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFNlcnZpY2V7RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0R5bmFtaWNGaWVsZFZpZXcnICkgewoKICAgICAgICAjIGFkZCBzdXBwb3J0IGZvciBkeW5hbWljIGZpZWxkcwogICAgICAgIG15IEBEeW5hbWljRmllbGRMaXN0OwogICAgICAgIG15ICREeW5hbWljRmllbGRGaWx0ZXIgPSB7CiAgICAgICAgICAgICV7ICRDb25maWdPYmplY3QtPkdldCgiQ3VzdG9tZXJEYXNoYm9hcmQ6OkNvbmZpZ3VyYXRpb246OlNlcnZpY2VDYXRhbG9nIiktPntEeW5hbWljRmllbGR9IHx8IHt9IH0sCiAgICAgICAgfTsKCiAgICAgICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBzZXJ2aWNlIG9iamVjdAogICAgICAgIG15ICREeW5hbWljRmllbGRMb29rdXAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+IFsnU2VydmljZSddLAogICAgICAgICAgICBGaWVsZEZpbHRlciA9PiAkRHluYW1pY0ZpZWxkRmlsdGVyIHx8IHt9LAogICAgICAgICk7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZExvb2t1cH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkKTsKCiAgICAgICAgICAgIG15ICRWYWx1ZUdldCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRWYWx1ZUdldDsKCiAgICAgICAgICAgICMgdXNlIHRyYW5zbGF0aW9uIGhlcmUgdG8gYmUgYWJsZSB0byByZWR1Y2UgdGhlIGNoYXJhY3RlciBsZW5ndGggaW4gdGhlIHRlbXBsYXRlCiAgICAgICAgICAgIG15ICRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJER5bmFtaWNGaWVsZC0+e0xhYmVsfSApOwoKICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWVHZXQsCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgIFZhbHVlTWF4Q2hhcnMgICAgICA9PiAxMzAsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRMaXN0LCB7CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57TmFtZX0gPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICAgICAgID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICBMaW5rUHJldmlldyAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmtQcmV2aWV3fSwKICAgICAgICAgICAgICAgIFRpdGxlRmllbGRDb25maWcgICAgICA9PiAoICREeW5hbWljRmllbGQtPntGaWVsZFR5cGV9IGVxICdUaXRsZScgKSA/ICREeW5hbWljRmllbGQtPntDb25maWd9IDogdW5kZWYsCgogICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGQtPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGR5bmFtaWMgZmllbGRzCiAgICAgICAgRklFTEQ6CiAgICAgICAgZm9yIG15ICRGaWVsZCAoQER5bmFtaWNGaWVsZExpc3QpIHsKCiAgICAgICAgICAgICMgaGFuZGxlIHRpdGxlcyBzZXBhcmF0ZWx5CiAgICAgICAgICAgIGlmICggJEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ30gKSB7CiAgICAgICAgICAgICAgICBteSAkU3R5bGUgPSAicGFkZGluZy1sZWZ0OjRweDtmb250LXNpemU6JEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Rm9udFNpemV9cHg7Y29sb3I6JEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Rm9udENvbG9yfTsiOwoKICAgICAgICAgICAgICAgIGlmICggJEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Q0JGb250U3R5bGVVbmRlckxpbmVWYWx1ZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFN0eWxlIC49ICJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRGaWVsZC0+e1RpdGxlRmllbGRDb25maWd9e0NCRm9udFN0eWxlSXRhbGljVmFsdWV9ICkgewogICAgICAgICAgICAgICAgICAgICRTdHlsZSAuPSAiZm9udC1zdHlsZTppdGFsaWM7IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Q0JGb250U3R5bGVCb2xkVmFsdWV9ICkgewogICAgICAgICAgICAgICAgICAgICRTdHlsZSAuPSAiZm9udC13ZWlnaHQ6Ym9sZDsiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICBTdHlsZSAgICAgID0+ICRTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGVGaWVsZCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZUR5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkRmllbGQtPntMaW5rfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2VEeW5hbWljRmllbGRMaW5rJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJEZpZWxkLT57TmFtZX0gPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJEZpZWxkLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgID0+ICRGaWVsZC0+e0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEZpZWxkLT57TmFtZX0iID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2VEeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0Rhc2hib2FyZC9UaWxlU2VydmljZUNhdGFsb2dEeW5hbWljRmllbGRzJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGNvbXBsZXRlIEhUTUwgYXMgYW4gYXR0YWNobWVudAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBEb3dubG9hZEF0dGFjaG1lbnQgU3ViYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Rvd25sb2FkQXR0YWNobWVudCcgKSB7CiAgICAgICAgbXkgJEZpbGVJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWxlSUQnICk7CgogICAgICAgIGlmICggIWRlZmluZWQgJEZpbGVJRCApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIEZpbGVJRCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgR2V0IGF0dGFjaG1lbnRzLgogICAgICAgIG15ICVGaWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+QXR0YWNobWVudEdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkRmlsZUlELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICglRmlsZSkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCglRmlsZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIGF0dGFjaG1lbnQgKCRGaWxlSUQpISBNYXkgYmUgYW4gYXR0YWNrISEhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgIE9QID0+CiAgICAgICAgICAgICJBY3Rpb249Q3VzdG9tZXJEYXNoYm9hcmQiLAogICAgKTsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/CustomerDashboard/TileServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpDdXN0b21lckRhc2hib2FyZDo6VGlsZVNlcnZpY2VDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Okxhbmd1YWdlJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpGQVEnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6UGFja2FnZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTTEEnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6UGFja2FnZScKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYW5ndWFnZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRTTEFPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKICAgIG15ICRQYWNrYWdlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJyk7CgogICAgbXkgJERlZmF1bHRUaW1lWm9uZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5PVE9CT1RpbWVab25lR2V0KCk7CgogICAgIyBHZXQgY3VzdG9tZXIgdXNlci4KICAgICRQYXJhbXtDdXN0b21lclVzZXJ9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgIFVzZXIgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgR2V0IGFsbCBzZXJ2aWNlIElEcyBvZiB0aGUgY3VzdG9tZXIuCiAgICBteSAlU2VydmljZUlEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U2VydmljZUxpc3QoCiAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJ0N1c3RvbWVyRGFzaGJvYXJkJywKICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIE9ubHkgZ2V0IGluZm9ybWF0aW9uIG9mIFNMQXMgb3IgY2FsZW5kYXJzIG9uY2UgYW5kIHNhdmUgdGhlbSBpbiBoYXNoZXMuCiAgICBteSAlU0xBSURzID0gJFNMQU9iamVjdC0+U0xBTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBHZXQgYWxsIFNMQSBhbmQgYXNzb2NpYXRlZCBjYWxlbmRhciBpbmZvcm1hdGlvbi4KICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgIG15ICVTTEFMaXN0OwogICAgbXkgJUNhbGVuZGFyTGlzdDsKICAgIG15IEBXZWVrRGF5cyA9ICggJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JywgJ1N1bicgKTsgICAgIyBGSVhNRS9JbXByb3ZlOiBXb3JrIHdpdGggQ2FsZW5kYXJXZWVrRGF5U3RhcnQKICAgIGZvciBteSAkU0xBSUQgKCBrZXlzICVTTEFJRHMgKSB7CiAgICAgICAgbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNMQUxpc3R7JFNMQUlEfSA9IFwlU0xBRGF0YTsKCiAgICAgICAgIyBHZXQgYWxsIHNlcnZpY2VzIHdoaWNoIHVzZSB0aGlzIFNMQS4KICAgICAgICBTRVJWSUNFOgogICAgICAgIGZvciBteSAkU2VydmljZUlEICggQHsgJFNMQURhdGF7U2VydmljZUlEc30gfSApIHsKICAgICAgICAgICAgbmV4dCBTRVJWSUNFIHVubGVzcyAkU2VydmljZUlEc3skU2VydmljZUlEfTsKCiAgICAgICAgICAgIHB1c2ggQHsgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9e1NMQUlEc30gfSwgJFNMQUlEOwogICAgICAgIH0KCiAgICAgICAgIyBDYWxlbmRhciBkb2VzIG5vdCBleGlzdCB5ZXQuCiAgICAgICAgaWYgKCAkU0xBRGF0YXtDYWxlbmRhcn0gJiYgISRDYWxlbmRhckxpc3R7ICRTTEFEYXRhe0NhbGVuZGFyfSB9ICkgewoKICAgICAgICAgICAgIyBHZXQgdGhlIGNhbGVuZGFyIGFuZCB0aGUgdGltZSB6b25lLgogICAgICAgICAgICBteSAkQ2FsZW5kYXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoICdUaW1lV29ya2luZ0hvdXJzOjpDYWxlbmRhcicgLiAkU0xBRGF0YXtDYWxlbmRhcn0gKTsKICAgICAgICAgICAgJENhbGVuZGFyLT57VGltZVpvbmV9ID0gJENvbmZpZ09iamVjdC0+R2V0KCAnVGltZVpvbmU6OkNhbGVuZGFyJyAuICRTTEFEYXRhe0NhbGVuZGFyfSApIHx8ICREZWZhdWx0VGltZVpvbmU7CgogICAgICAgICAgICAjIEdldCB3b3JraW5nIGRheXMgYW5kIGhvdXJzIGZvciB0aGUgd2Vlay4gRS5nLjogTW8tRnIgMTLigJMxOSwgU2F0IDEz4oCTMTkuCiAgICAgICAgICAgIG15ICVSdW47CiAgICAgICAgICAgIGZvciBteSAkSW5kZXggKCAwIC4uICggc2NhbGFyIEBXZWVrRGF5cyAtIDEgKSApIHsKICAgICAgICAgICAgICAgIG15ICREYXkgPSAkQ2FsZW5kYXItPnsgJFdlZWtEYXlzWyRJbmRleF0gfTsKCiAgICAgICAgICAgICAgICAjIFRoZSBkYXkgaGFzIHdvcmtpbmcgaG91cnMuCiAgICAgICAgICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkRGF5KSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkRmlyc3RIb3VyID0gJERheS0+WzBdOwogICAgICAgICAgICAgICAgICAgIG15ICRMYXN0SG91ciAgPSAkRGF5LT5bLTFdOwoKICAgICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgb25lIGhvdXIgbW9yZSwgY2F1c2UgdGhlIGNhbGVuZGFyIG1lYW5zIGluY2x1c2l2ZSB0aGUgbGFzdCBob3VyCiAgICAgICAgICAgICAgICAgICAgJExhc3RIb3VyKys7CgogICAgICAgICAgICAgICAgICAgICMgRmlyc3QgZGF5IG9mIHRoZSBydW4uCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFJ1bntTdGFydERheX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRSdW57U3RhcnREYXl9ICA9ICRXZWVrRGF5c1skSW5kZXhdOwogICAgICAgICAgICAgICAgICAgICAgICAkUnVue0ZpcnN0SG91cn0gPSAkRmlyc3RIb3VyOwogICAgICAgICAgICAgICAgICAgICAgICAkUnVue0xhc3RIb3VyfSAgPSAkTGFzdEhvdXI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIFRoZSBjdXJyZW50IGRhdGUgaGFzIGRpZmZlcmVudCB3b3JraW5nIGhvdXJzIHRoYW4gdGhlIGxhc3QgZGF5IG9mIHRoZSBydW4uCiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkRmlyc3RIb3VyICE9ICRSdW57Rmlyc3RIb3VyfSB8fCAkTGFzdEhvdXIgIT0gJFJ1bntMYXN0SG91cn0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIFNldCB0aGUgbGFzdCBkYXkgdG8geWVzdGVyZGF5IGFuZCByZXNldCB0aGUgcnVuLgogICAgICAgICAgICAgICAgICAgICAgICAkUnVue0xhc3REYXl9ID0gJFdlZWtEYXlzWyAoICRJbmRleCAtIDEgKSBdOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRDYWxlbmRhci0+e1dvcmtpbmdIb3Vyc30gfSwgeyVSdW59OwogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiAlUnVuOwoKICAgICAgICAgICAgICAgICAgICAgICAgJFJ1bntTdGFydERheX0gID0gJFdlZWtEYXlzWyRJbmRleF07CiAgICAgICAgICAgICAgICAgICAgICAgICRSdW57Rmlyc3RIb3VyfSA9ICRGaXJzdEhvdXI7CiAgICAgICAgICAgICAgICAgICAgICAgICRSdW57TGFzdEhvdXJ9ICA9ICRMYXN0SG91cjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIE5vIGRhdGEgZm9yIHRoZSBkYXkuIENoZWNrIGlmIHRoZSBydW4gbmVlZHMgdG8gYmUgc3RvcHBlZC4KICAgICAgICAgICAgICAgICAgICBpZiAoICRSdW57U3RhcnREYXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUnVue0xhc3REYXl9ID0gJFdlZWtEYXlzWyAoICRJbmRleCAtIDEgKSBdOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRDYWxlbmRhci0+e1dvcmtpbmdIb3Vyc30gfSwgeyVSdW59OwogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiAlUnVuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEl0J3MgdGhlIGxhc3QgZGF5IG9mIHRoZSB3ZWVrLgogICAgICAgICAgICAgICAgaWYgKCAkSW5kZXggPT0gNiApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgcnVuIGlzIHN0aWxsIGdvaW5nIG9uLCBjbG9zZSBpdC4KICAgICAgICAgICAgICAgICAgICBpZiAoICRSdW57U3RhcnREYXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUnVue0xhc3REYXl9ID0gJFdlZWtEYXlzWyRJbmRleF07CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJENhbGVuZGFyLT57V29ya2luZ0hvdXJzfSB9LCB7JVJ1bn07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkQ2FsZW5kYXJMaXN0eyAkU0xBRGF0YXtDYWxlbmRhcn0gfSA9ICRDYWxlbmRhcjsKICAgICAgICB9CiAgICB9CgogICAgIyBJdGVyYXRlIHRocm91Z2ggYWxsIGF2YWxpYWJsZSBzZXJ2aWNlcyBhbmQgZmlsdGVyIG91dCB0aGUgc2V2aWNlcyBhbmQgcGFyYW1ldGVycyB3ZSBuZWVkLgogICAgbXkgJFNlcnZpY2VMaXN0UmVmQXJyYXkgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgbXkgJVNlcnZpY2VMaXN0UmVmOwoKICAgIG15ICVUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVMaXN0KAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgIG15ICRTZXR0aW5ncyA9ICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJEYXNoYm9hcmQ6OkNvbmZpZ3VyYXRpb246OlNlcnZpY2VDYXRhbG9nJykgfHwge307CiAgICBTRVJWSUNFUkVGOgogICAgZm9yIG15ICRTZXJ2aWNlUmVmICggQHskU2VydmljZUxpc3RSZWZBcnJheX0gKSB7CiAgICAgICAgJFNlcnZpY2VMaXN0UmVmeyAkU2VydmljZVJlZi0+e1NlcnZpY2VJRH0gfSA9ICRTZXJ2aWNlUmVmOwoKICAgICAgICAjIENoZWNrIGlmIHRoZSBjdXN0b21lciBoYXMgcGVybWlzc2lvbiBvbiB0aGlzIHNlcnZpY2UuCiAgICAgICAgbmV4dCBTRVJWSUNFUkVGIGlmICEkU2VydmljZUlEc3sgJFNlcnZpY2VSZWYtPntTZXJ2aWNlSUR9IH07CiAgICAgICAgbXkgJVNlcnZpY2UgPSAoKTsKCiAgICAgICAgIyBHZXQgYWxsIG5lZWRlZCBwYXJhbWV0ZXJzCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KFNlcnZpY2VJRCBOYW1lU2hvcnQgRGVzY3JpcHRpb25zIFRpY2tldFR5cGVJRHMgUGFyZW50SUQgS2V5d29yZHMpKSB7CiAgICAgICAgICAgIGlmICggJFNlcnZpY2VSZWYtPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgICAgIGlmICggJE5lZWRlZCBlcSAnVGlja2V0VHlwZUlEcycgKSB7CgogICAgICAgICAgICAgICAgICAgICMgR2V0IG5hbWVzIG9mIGFsbCBhc3NpZ25lZCB0eXBlcy4KICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFR5cGVJRCAoIEB7ICRTZXJ2aWNlUmVmLT57JE5lZWRlZH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFR5cGVOYW1lID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoICRUeXBlTGlzdHskVHlwZUlEfSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgYXNzaWduZWQgdHlwZSBJRCBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRUeXBlTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2V7VGlja2V0VHlwZX17JFR5cGVOYW1lfSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NlcyA9PiAkU2V0dGluZ3MtPnsgJFR5cGVMaXN0eyRUeXBlSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkTmVlZGVkIGVxICdEZXNjcmlwdGlvbnMnICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNle0Rlc2NyaXB0aW9uU2hvcnR9ID0gJFNlcnZpY2VSZWYtPnskTmVlZGVkfS0+eyAkTGF5b3V0T2JqZWN0LT57VXNlckxhbmd1YWdlfSB9LT57RGVzY3JpcHRpb25TaG9ydH0gfHwKICAgICAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VSZWYtPnskTmVlZGVkfS0+eyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0RlZmF1bHRMYW5ndWFnZScpIH0tPntEZXNjcmlwdGlvblNob3J0fSB8fAogICAgICAgICAgICAgICAgICAgICAgICAkU2VydmljZVJlZi0+eyROZWVkZWR9LT57J2VuJ30tPntEZXNjcmlwdGlvblNob3J0fSB8fCAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0Rlc2NyaXB0aW9uIG5vdCBhdmFpbGFibGUuJyk7CgogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNle0Rlc2NyaXB0aW9uTG9uZ30gPSAkU2VydmljZVJlZi0+eyROZWVkZWR9LT57ICRMYXlvdXRPYmplY3QtPntVc2VyTGFuZ3VhZ2V9IH0tPntEZXNjcmlwdGlvbkxvbmd9IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlUmVmLT57JE5lZWRlZH0tPnsgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdEZWZhdWx0TGFuZ3VhZ2UnKSB9LT57RGVzY3JpcHRpb25Mb25nfSB8fAogICAgICAgICAgICAgICAgICAgICAgICAkU2VydmljZVJlZi0+eyROZWVkZWR9LT57J2VuJ30tPntEZXNjcmlwdGlvbkxvbmd9IHx8ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRGVzY3JpcHRpb24gbm90IGF2YWlsYWJsZS4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNleyROZWVkZWR9ID0gJFNlcnZpY2VSZWYtPnskTmVlZGVkfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBHZXQgYWxsIGNhbGVuZGFyIGFuZCBTTEEgaW5mb3JtYXRpb24gZm9yIHRoaXMgc2VydmljZS4KICAgICAgICBteSAkU0xBSURzID0gJFNlcnZpY2VMaXN0eyAkU2VydmljZXtTZXJ2aWNlSUR9IH17U0xBSURzfTsKCiAgICAgICAgbXkgJURvbnRTZXQ7CiAgICAgICAgU0xBSUQ6CiAgICAgICAgZm9yIG15ICRTTEFJRCAoIEB7JFNMQUlEc30gKSB7CiAgICAgICAgICAgIG15ICRTTEEgICAgICA9ICRTTEFMaXN0eyRTTEFJRH07CiAgICAgICAgICAgIG15ICRDYWxlbmRhciA9ICRDYWxlbmRhckxpc3R7ICRTTEEtPntDYWxlbmRhcn0gfTsKCiAgICAgICAgICAgICMgVGhpcyBzZXJ2aWNlIGlzIGxpbmtlZCB0byBhdCBsZWFzdCB0d28gU0xBcyB3aXRoIGRpZmZlcmVudCBmaXJzdCByZXNwb25zZSB0aW1lcy4KICAgICAgICAgICAgaWYgKCAkU2VydmljZXtGaXJzdFJlc3BvbnNlVGltZX0gJiYgJFNlcnZpY2V7Rmlyc3RSZXNwb25zZVRpbWV9IG5lICRTTEEtPntGaXJzdFJlc3BvbnNlVGltZX0gKSB7CiAgICAgICAgICAgICAgICB1bmRlZiAkU2VydmljZXtGaXJzdFJlc3BvbnNlVGltZX07CiAgICAgICAgICAgICAgICAkRG9udFNldHtGaXJzdFJlc3BvbnNlVGltZX0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggISREb250U2V0e0ZpcnN0UmVzcG9uc2VUaW1lfSApIHsKICAgICAgICAgICAgICAgICRTZXJ2aWNle0ZpcnN0UmVzcG9uc2VUaW1lfSA9ICRTTEEtPntGaXJzdFJlc3BvbnNlVGltZX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgVGhpcyBzZXJ2aWNlIGlzIGxpbmtlZCB0byBhdCBsZWFzdCB0d28gU0xBcyB3aXRoIGRpZmZlcmVudCBzb2x1dGlvbiB0aW1lcy4KICAgICAgICAgICAgaWYgKCAkU2VydmljZXtTb2x1dGlvblRpbWV9ICYmICRTZXJ2aWNle1NvbHV0aW9uVGltZX0gbmUgJFNMQS0+e1NvbHV0aW9uVGltZX0gKSB7CiAgICAgICAgICAgICAgICB1bmRlZiAkU2VydmljZXtTb2x1dGlvblRpbWV9OwogICAgICAgICAgICAgICAgJERvbnRTZXR7U29sdXRpb25UaW1lfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAhJERvbnRTZXR7U29sdXRpb25UaW1lfSApIHsKICAgICAgICAgICAgICAgICRTZXJ2aWNle1NvbHV0aW9uVGltZX0gPSAkU0xBLT57U29sdXRpb25UaW1lfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTTEEgZG9lcyBub3QgaGF2ZSBhIGNhbGVuZGFyLgogICAgICAgICAgICBuZXh0IFNMQUlEIGlmICEkQ2FsZW5kYXI7CgogICAgICAgICAgICAjIFRoaXMgc2VydmljZSBpcyBsaW5rZWQgdG8gYXQgbGVhc3QgdHdvIFNMQSBjYWxlbmRhcnMgd2l0aCBkaWZmZXJlbnQgdGltZSB6b25lcy4KICAgICAgICAgICAgaWYgKCAkU2VydmljZXtUaW1lWm9uZX0gJiYgJENhbGVuZGFyLT57VGltZVpvbmV9ICYmICRTZXJ2aWNle1RpbWVab25lfSBuZSAkQ2FsZW5kYXItPntUaW1lWm9uZX0gKSB7CiAgICAgICAgICAgICAgICB1bmRlZiAkU2VydmljZXtUaW1lWm9uZX07CiAgICAgICAgICAgICAgICB1bmRlZiAkU2VydmljZXtXb3JraW5nSG91cnN9OwogICAgICAgICAgICAgICAgJERvbnRTZXR7VGltZVpvbmV9ICAgICA9IDE7CiAgICAgICAgICAgICAgICAkRG9udFNldHtXb3JraW5nSG91cnN9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICEkRG9udFNldHtUaW1lWm9uZX0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmljZXtUaW1lWm9uZX0gPSAkQ2FsZW5kYXItPntUaW1lWm9uZX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgVGhpcyBzZXJ2aWNlIGlzIGxpbmtlZCB0byBhdCBsZWFzdCB0d28gZGlmZmVyZW50IGNhbGVuZGFycy4KICAgICAgICAgICAgaWYgKCAkU2VydmljZXtXb3JraW5nSG91cnN9ICkgewoKICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgd29ya2luZyBob3VycyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAgICAgICBJTkRFWDoKICAgICAgICAgICAgICAgIGZvciBteSAkSW5kZXggKCAwIC4uICggc2NhbGFyIEB7ICRTZXJ2aWNle1dvcmtpbmdIb3Vyc30gfSAtIDEgKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICEkU2VydmljZXtXb3JraW5nSG91cnN9WyRJbmRleF0gfHwgISRDYWxlbmRhci0+e1dvcmtpbmdIb3Vyc31bJEluZGV4XSAgICAjIENoZWNrIGlmIHJ1bnMgZXhpc3QuCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICQjeyAkU2VydmljZXtXb3JraW5nSG91cnN9IH0gIT0gJCN7ICRDYWxlbmRhci0+e1dvcmtpbmdIb3Vyc30gfSAgICAgICAjIE9uZSBydW4gaXMgbG9uZ2VyIG9yIHNob3J0ZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRTZXJ2aWNle1dvcmtpbmdIb3Vyc31bJEluZGV4XXtTdGFydERheX0gbmUgJENhbGVuZGFyLT57V29ya2luZ0hvdXJzfVskSW5kZXhde1N0YXJ0RGF5fQogICAgICAgICAgICAgICAgICAgICAgICB8fCAkU2VydmljZXtXb3JraW5nSG91cnN9WyRJbmRleF17TGFzdERheX0gbmUgJENhbGVuZGFyLT57V29ya2luZ0hvdXJzfVskSW5kZXhde0xhc3REYXl9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRTZXJ2aWNle1dvcmtpbmdIb3Vyc31bJEluZGV4XXtGaXJzdEhvdXJ9IG5lICRDYWxlbmRhci0+e1dvcmtpbmdIb3Vyc31bJEluZGV4XXtGaXJzdEhvdXJ9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRTZXJ2aWNle1dvcmtpbmdIb3Vyc31bJEluZGV4XXtMYXN0SG91cn0gbmUgJENhbGVuZGFyLT57V29ya2luZ0hvdXJzfVskSW5kZXhde0xhc3RIb3VyfQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB1bmRlZiAkU2VydmljZXtXb3JraW5nSG91cnN9OwogICAgICAgICAgICAgICAgICAgICAgICAkRG9udFNldHtXb3JraW5nSG91cnN9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBJTkRFWDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAhJERvbnRTZXR7V29ya2luZ0hvdXJzfSApIHsKICAgICAgICAgICAgICAgICRTZXJ2aWNle1dvcmtpbmdIb3Vyc30gPSAkQ2FsZW5kYXItPntXb3JraW5nSG91cnN9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGlmIEZBUSBtb2R1bCBpcyBpbnN0YWxsZWQsIGlmIHllcyB3ZSBjaGVjayBzZXJ2aWNlIHJlbGF0ZWQgZmFxIG1lc3NhZ2VzCiAgICAgICAgbXkgJEZBUUluc3RhbGxlZCA9ICRQYWNrYWdlT2JqZWN0LT5QYWNrYWdlSXNJbnN0YWxsZWQoCiAgICAgICAgICAgIE5hbWUgPT4gJ0ZBUScsCiAgICAgICAgKTsKCiAgICAgICAgIyBGQVEgcGFja2FnZSBpcyBpbnN0YWxsZWQKICAgICAgICBpZiAoJEZBUUluc3RhbGxlZCkgewoKICAgICAgICAgICAgbXkgJEZBUU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKCiAgICAgICAgICAgICMgR2V0IEZBUSBpbnRlcmZhY2Ugc3RhdGUgbGlzdAogICAgICAgICAgICBteSAkSW50ZXJmYWNlU3RhdGVzID0gJEZBUU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICAgICAgICAgIFR5cGVzICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZBUTo6Q3VzdG9tZXI6OlN0YXRlVHlwZXMnKSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgR2V0IGFsbCBsaW5rZWQgRkFRIGFydGljbGVzLgogICAgICAgICAgICBteSAlTGlua0tleUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdCgKICAgICAgICAgICAgICAgIE9iamVjdDEgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgS2V5MSAgICA9PiAkU2VydmljZXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgT2JqZWN0MiA9PiAnRkFRJywKICAgICAgICAgICAgICAgIFN0YXRlICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgRm9yIGVhY2ggTGlua0tleUxpc3QsIGdldCB0aGUgRkFRIGFydGljbGUuCiAgICAgICAgICAgIGZvciBteSAkTGlua0tleSAoIGtleXMgJUxpbmtLZXlMaXN0ICkgewogICAgICAgICAgICAgICAgbXkgJUZBUURhdGEgPSAkRkFRT2JqZWN0LT5GQVFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgICA9PiAkTGlua0tleSwKICAgICAgICAgICAgICAgICAgICBJdGVtRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgdXNlciBoYXMgcGVybWlzc2lvbiB0byBzZWUgdGhpcyBGQVEuCiAgICAgICAgICAgICAgICBteSBAVmFsaWRJRHMgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwogICAgICAgICAgICAgICAgbXkgJVZhbGlkSURMb29rdXAgPSBtYXAgeyAkXyA9PiAxIH0gQFZhbGlkSURzOwoKICAgICAgICAgICAgICAgICMgQ2hlY2sgdXNlciBwZXJtaXNzaW9uCiAgICAgICAgICAgICAgICBteSAkUGVybWlzc2lvbiA9ICRGQVFPYmplY3QtPkNoZWNrQ2F0ZWdvcnlDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRQYXJhbXtDdXN0b21lclVzZXJ9LAogICAgICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgICA9PiAkRkFRRGF0YXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgUGVybWlzc2lvbiBjaGVjawogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uCiAgICAgICAgICAgICAgICAgICAgJiYgJEZBUURhdGF7QXBwcm92ZWR9CiAgICAgICAgICAgICAgICAgICAgJiYgJFZhbGlkSURMb29rdXB7ICRGQVFEYXRhe1ZhbGlkSUR9IH0KICAgICAgICAgICAgICAgICAgICAmJiAkSW50ZXJmYWNlU3RhdGVzLT57ICRGQVFEYXRhe1N0YXRlVHlwZUlEfSB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICMgRmlsdGVyIG91dCBpbmZvcm1hdGlvbiB3ZSBkb24ndCBuZWVkLgogICAgICAgICAgICAgICAgICAgIG15ICVGaWx0ZXJlZEZBUURhdGEgPSAoKTsKCiAgICAgICAgICAgICAgICAgICAgIyBHZXQgdGhlIGNvbmZpZyBmb3IgdGhlIEZBUSBmaWVsZHMgd2Ugd2FudCB0byBkaXNwbGF5LgogICAgICAgICAgICAgICAgICAgIG15ICREZXNjcmlwdGlvbkZpZWxkVG9EaXNwbGF5ID0gJFNldHRpbmdzLT57RkFRRGVzY3JpcHRpb25GaWVsZH0gfHwgJ0ZpZWxkMSc7CiAgICAgICAgICAgICAgICAgICAgS0VZOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkS2V5ICggKCAnSXRlbUlEJywgJ1RpdGxlJywgJERlc2NyaXB0aW9uRmllbGRUb0Rpc3BsYXksICdDYXRlZ29yeU5hbWUnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgS0VZIGlmICEkRkFRRGF0YXskS2V5fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEtleSBlcSAkRGVzY3JpcHRpb25GaWVsZFRvRGlzcGxheSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBIVE1MIHRhZ3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmlsdGVyZWRGQVFEYXRhe0Rlc2NyaXB0aW9ufSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEZBUURhdGF7JEtleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgdGhlIGZpZWxkIGlzIGxvbmdlciB0aGFuIDcwIGNoYXJhY3RlcnMsIGFkZCBhbiBlbGxpcHNpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCAkRmlsdGVyZWRGQVFEYXRhe0Rlc2NyaXB0aW9ufSApID4gNDUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZpbHRlcmVkRkFRRGF0YXtEZXNjcmlwdGlvbn0gPSBzdWJzdHIoICRGaWx0ZXJlZEZBUURhdGF7RGVzY3JpcHRpb259LCAwLCA0NSApIC4gJy4uLic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmlsdGVyZWRGQVFEYXRheyRLZXl9ID0gJEZBUURhdGF7JEtleX07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkU2VydmljZXtGQVFzfSB9LCBcJUZpbHRlcmVkRkFRRGF0YTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTYXZlIHRoZSBzZXJ2aWNlIGluIGEgbGlzdC4KICAgICAgICAkU2VydmljZUxpc3R7ICRTZXJ2aWNle1NlcnZpY2VJRH0gfSA9IFwlU2VydmljZTsKICAgIH0KCiAgICAjIEFkZCBzdXBwb3J0IGZvciBkeW5hbWljIGZpZWxkcy4KICAgIG15ICREeW5hbWljRmllbGRGaWx0ZXIgPSB7CiAgICAgICAgJXsgJENvbmZpZ09iamVjdC0+R2V0KCJDdXN0b21lckRhc2hib2FyZDo6Q29uZmlndXJhdGlvbjo6U2VydmljZUNhdGFsb2ciKS0+e0R5bmFtaWNGaWVsZH0gfHwge30gfSwKICAgIH07CgogICAgIyBHZXQgZHluYW1pYyBmaWVsZHMgZm9yIHNlcnZpY2Ugb2JqZWN0LgogICAgbXkgJER5bmFtaWNGaWVsZExvb2t1cCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnU2VydmljZSddLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICREeW5hbWljRmllbGRGaWx0ZXIgfHwge30sCiAgICApOwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBHZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWVzIGZvciBldmVyeSBzZXJ2aWNlLgogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKICAgICAgICBteSBARHluYW1pY0ZpZWxkTGlzdDsKCiAgICAgICAgIyAjIEdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9yIHRoaXMgc2VydmljZS4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRMb29rdXB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIEdldCB0aGUgbGFiZWw7CiAgICAgICAgICAgIG15ICRMYWJlbCA9ICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH07CgogICAgICAgICAgICAjIEdldCBmaWVsZCB2YWx1ZS4KICAgICAgICAgICAgbXkgJFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMTMwLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBTZXQgZmllbGQgdmFsdWUuCiAgICAgICAgICAgIGlmICggJExhYmVsICYmICRWYWx1ZVN0cmctPntWYWx1ZX0gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRMaXN0LCB7CiAgICAgICAgICAgICAgICAgICAgJFZhbHVlU3RyZy0+JSosCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBBZGQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWVzIHRvIHRoZSBzZXJ2aWNlLgogICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCBcQER5bmFtaWNGaWVsZExpc3QgKSApIHsKICAgICAgICAgICAgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9LT57RHluYW1pY0ZpZWxkfSA9IFxARHluYW1pY0ZpZWxkTGlzdDsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgdGhlIGJhc2ljIGluZm9ybWF0aW9uIGZvciBldmVyeSBwYXJlbnQgU2VydmljZSwgZXZlbiBpZiB0aGUgdGhlIGN1c3RvbWVyIHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHNlZSBpdC4KICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICgga2V5cyAlU2VydmljZUxpc3QgKSB7CiAgICAgICAgbXkgJFBhcmVudElEID0gJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9e1BhcmVudElEfTsKICAgICAgICBuZXh0IFNFUlZJQ0VJRCBpZiAhJFBhcmVudElEOwoKICAgICAgICBpZiAoICRTZXJ2aWNlTGlzdHskUGFyZW50SUR9ICYmICRTZXJ2aWNlTGlzdHskUGFyZW50SUR9e1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgIG5leHQgU0VSVklDRUlEOwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgc3VyZSB0aGF0IHdlIGNhbiBzZWxlY3QgZXZlcnkgc3Vic2VydmljZSBvZiB0aGlzIHNlcnZpY2UuCiAgICAgICAgU0VSVklDRURBVEE6CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAoKTsKCiAgICAgICAgICAgIGZvciBteSAkTmVlZGVkIChxdyhTZXJ2aWNlSUQgTmFtZVNob3J0IERlc2NyaXB0aW9uU2hvcnQgRGVzY3JpcHRpb25Mb25nIFBhcmVudElEKSkgewogICAgICAgICAgICAgICAgaWYgKCAkU2VydmljZUxpc3RSZWZ7JFBhcmVudElEfXskTmVlZGVkfSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VydmljZXskTmVlZGVkfSA9ICRTZXJ2aWNlTGlzdFJlZnskUGFyZW50SUR9eyROZWVkZWR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VydmljZXtOb3RTZWxlY3RhYmxlfSAgICAgICAgICAgICA9IDE7CiAgICAgICAgICAgICRTZXJ2aWNlTGlzdHsgJFNlcnZpY2V7U2VydmljZUlEfSB9ID0gXCVTZXJ2aWNlOwogICAgICAgICAgICAkUGFyZW50SUQgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRTZXJ2aWNle1BhcmVudElEfTsKCiAgICAgICAgICAgICMgUGFyZW50IHJlYWNoZWQuCiAgICAgICAgICAgIGlmICggISRTZXJ2aWNle1BhcmVudElEfSB8fCAoICRTZXJ2aWNlTGlzdHskUGFyZW50SUR9ICYmICRTZXJ2aWNlTGlzdHskUGFyZW50SUR9e1NlcnZpY2VJRH0gKSApIHsKICAgICAgICAgICAgICAgIGxhc3QgU0VSVklDRURBVEE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBUT0RPOiBOYW1lcyBoYXZlIHRvIGJlIHRyYW5zbGF0ZWQgc29tZXdoZXJlIGZvciB0aGUgYnJlYWRjcnVtYiwgd2UgbmVlZCB0byBwcmV2ZW50IHRyYW5zbGF0aW9uIG9mIHRob3NlIHRyYW5zbGF0ZWQgdmFsdWVzCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIGtleXMgJVNlcnZpY2VMaXN0ICkgewogICAgICAgICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfXtOYW1lU2hvcnR9ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9e05hbWVTaG9ydH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFNob3cgYWxsIGZpcnN0IGxldmVsIHNlcnZpY2VzLCBzb3J0ZWQgYnkgdGhlIG5hbWUuCiAgICBteSAlUGFyZW50SURzOwogICAgU0VSVklDRUlEOgogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKICAgICAgICBuZXh0IFNFUlZJQ0VJRCBpZiAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH17UGFyZW50SUR9OwoKICAgICAgICAjIE9uZSBvZiB0aGVzZSBjYW4gYmUgdW5kZWYgaWYgdGhlIHBhcmVudCBzZXJ2aWNlIGlzIGRpc2FibGVkLgogICAgICAgIG5leHQgU0VSVklDRUlEIGlmICEkU2VydmljZUxpc3R7JFNlcnZpY2VJRH07CiAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgISRTZXJ2aWNlTGlzdHskU2VydmljZUlEfXtOYW1lU2hvcnR9OwoKICAgICAgICAkUGFyZW50SURzeyRTZXJ2aWNlSUR9ID0gJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9e05hbWVTaG9ydH07CiAgICB9CgogICAgbXkgJVJldmVyc2VkUGFyZW50SURzID0gcmV2ZXJzZSAlUGFyZW50SURzOwogICAgbXkgJE51bWJlck9mU2VydmljZXMgID0gMDsKICAgIFNFUlZJQ0VOQU1FOgogICAgZm9yIG15ICRTZXJ2aWNlTmFtZSAoIHNvcnQgdmFsdWVzICVQYXJlbnRJRHMgKSB7CiAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRSZXZlcnNlZFBhcmVudElEc3skU2VydmljZU5hbWV9OwogICAgICAgIG5leHQgU0VSVklDRU5BTUUgaWYgISRTZXJ2aWNlSUQ7CiAgICAgICAgJE51bWJlck9mU2VydmljZXMrKzsKCiAgICAgICAgaWYgKCAkTnVtYmVyT2ZTZXJ2aWNlcyA8PSAzICkgewoKICAgICAgICAgICAgIyBDcmVhdGUgdGhlIHBhcmVudCBsaXN0LgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1BhcmVudFNlcnZpY2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJE51bWJlck9mU2VydmljZXMgPj0gNCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUGFyZW50U2VydmljZU1vcmUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE51bWJlck9mU2VydmljZXMgPT4gJE51bWJlck9mU2VydmljZXMgLSAzLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBDcmVhdGUgbmF2aWdhdGlvbiBmaWVsZCBmb3Igc2VydmljZXMuCiAgICAkU2VydmljZUlEc3snQWxsJ30gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0FsbCcpOwogICAgbXkgJFNlcnZpY2VTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2VydmljZUlEcywKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUgJywKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBUcmVlVmlldyAgICAgPT4gMSwKICAgICAgICBTb3J0ICAgICAgICAgPT4gJ1RyZWVWaWV3JywKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1NlcnZpY2VMaXN0JywKICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICBEYXRhID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgKSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdTZXJ2aWNlU3RyZycsCiAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiAkU2VydmljZVN0cmcsCiAgICAgICAgKSwKICAgICk7CgogICAgaWYgKCAkU2V0dGluZ3MtPntTb3J0QnlUaWNrZXRUeXBlfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdTb3J0QnlUaWNrZXRUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoICRTZXR0aW5ncy0+e1NvcnRCeVRpY2tldFR5cGV9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQ29udGVudCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0Rhc2hib2FyZC9UaWxlU2VydmljZUNhdGFsb2cnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFRpbGVJRCA9PiAkUGFyYW17VGlsZUlEfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJENvbnRlbnQ7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AdminServiceImportExport.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KCiAgICBbJQogICAgICAgIFNFVCBUeXBlICA9IFRyYW5zbGF0ZShEYXRhLlR5cGUpOwogICAgICAgIFNFVCBMYWJlbCA9IFRyYW5zbGF0ZSgiU2VydmljZXMiKTsKICAgICVdCgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCIlcyAtICVzIixMYWJlbCwgVHlwZSksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pblNlcnZpY2UiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiU2VydmljZXMiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkhpbnQiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlNlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgdG8gIikgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9iPgoKICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRIaW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJTZWxlY3QgdGhlIGRlc2lyZWQgZWxlbWVudHMgYW5kIGNvbmZpcm0gdGhlIGltcG9ydCB3aXRoICdpbXBvcnQnLiIpIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiSW1wb3J0SGludCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkV4cG9ydEhpbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkhlcmUgeW91IGNhbiBleHBvcnQgYSBjb25maWd1cmF0aW9uIGZpbGUgb2Ygc2VydmljZXMgdG8gaW1wb3J0IHRoZXNlIG9uIGFub3RoZXIgc3lzdGVtLiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIGV4cG9ydGVkIGluIHltbCBmb3JtYXQuIikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJFeHBvcnRIaW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2VydmljZXMgTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgTGF5b3V0R3JpZCBDb2x1bW5zV2l0aFNwYWNpbmciPgoKICAgICAgICAgICAgICAgIDxmb3JtIGlkPSdGb3JtJyBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJbJSBFbnYoIlN1YmFjdGlvbiIpICVdQWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVHlwZSIgdmFsdWU9IlslIERhdGEuVHlwZSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzIiAgdmFsdWU9IlslIERhdGEuT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBpZD0iU2VydmljZXNUYWJsZSIgc3VtbWFyeT0iTGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBTZXJ2aWNlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9J0NlbnRlcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iU2VsZWN0QWxsU2VydmljZXMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoJ1RvZ2dsZSBhbGwgYXZhaWxhYmxlIGVsZW1lbnRzJykgfCBodG1sICVdIiBjaGVja2VkIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRmllbGRzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VzUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBpZD0iU2VydmljZUlEX1slIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdDZW50ZXInPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlQ2hlY2tib3giKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJTZXJ2aWNlcyIgbmFtZT0iU2VydmljZXMiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjaGVja2VkIC8+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlQ2hlY2tib3giKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkltcG9ydCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkV4cG9ydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pblNlcnZpY2U7U3ViYWN0aW9uPUNoYW5nZTtTZXJ2aWNlSUQ9WyUgRGF0YS5TZXJ2aWNlSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+WyUgRGF0YS5OYW1lICVdPC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiRXhwb3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5Db21tZW50KSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlc1JvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgdHlwZT0ic3VibWl0IiBpZD0iRXhwb3J0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFkbWluU2VydmljZSIgPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AdminSLAImportExport.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KCiAgICBbJQogICAgICAgIFNFVCBUeXBlICA9IFRyYW5zbGF0ZShEYXRhLlR5cGUpOwogICAgICAgIFNFVCBMYWJlbCA9IFRyYW5zbGF0ZSgiU0xBcyIpOwogICAgJV0KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoIiVzIC0gJXMiLExhYmVsLCBUeXBlKSwKICAgICAgICAgICAgfSwKICAgICAgICBdCiAgICAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFkbWluU0xBIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUiPjwvaT5bJSBUcmFuc2xhdGUoIlNMQXMiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkhpbnQiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlNlbGVjdCB0aGUgaXRlbXMgeW91IHdhbnQgdG8gIikgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9iPgoKICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRIaW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJTZWxlY3QgdGhlIGRlc2lyZWQgZWxlbWVudHMgYW5kIGNvbmZpcm0gdGhlIGltcG9ydCB3aXRoICdpbXBvcnQnLiIpIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiSW1wb3J0SGludCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkV4cG9ydEhpbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkhlcmUgeW91IGNhbiBleHBvcnQgYSBjb25maWd1cmF0aW9uIGZpbGUgb2YgU0xBcyB0byBpbXBvcnQgdGhlc2Ugb24gYW5vdGhlciBzeXN0ZW0uIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgZXhwb3J0ZWQgaW4geW1sIGZvcm1hdC4iKSB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkV4cG9ydEhpbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTTEFzIExpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IExheW91dEdyaWQgQ29sdW1uc1dpdGhTcGFjaW5nIj4KCiAgICAgICAgICAgICAgICA8Zm9ybSBpZD0nRm9ybScgYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJTdWJhY3Rpb24iKSAlXUFjdGlvbiIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlR5cGUiIHZhbHVlPSJbJSBEYXRhLlR5cGUgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcyIgIHZhbHVlPSJbJSBEYXRhLk92ZXJ3cml0ZUV4aXN0aW5nRW50aXRpZXMgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IlNMQXNUYWJsZSIgc3VtbWFyeT0iTGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBTTEFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0nQ2VudGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJTZWxlY3RBbGxTTEFzIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCdUb2dnbGUgYWxsIGF2YWlsYWJsZSBlbGVtZW50cycpIHwgaHRtbCAlXSIgY2hlY2tlZCB2YWx1ZT0iIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkZpZWxkcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEFzUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBpZD0iU0xBSURfWyUgRGF0YS5TTEFJRCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nQ2VudGVyJz4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBQ2hlY2tib3giKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJTTEFzIiBuYW1lPSJTTEFzIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2hlY2tlZCAvPgpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBQ2hlY2tib3giKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkltcG9ydCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkV4cG9ydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pblNMQTtTdWJhY3Rpb249Q2hhbmdlO1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+WyUgRGF0YS5OYW1lICVdPC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiRXhwb3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5Db21tZW50KSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJTTEFzUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIGlkPSJFeHBvcnQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWRtaW5TTEEiID5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/Dashboard/TileServiceCatalog.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKPGRpdiBpZD0ib29vVGlsZVslIERhdGEuVGlsZUlEIHwgaHRtbCAlXSIgY2xhc3M9Im9vb1RpbGUgb29vVGlsZV9TZXJ2aWNlQ2F0YWxvZyI+CiAgICA8aDI+WyUgVHJhbnNsYXRlKERhdGEuSGVhZGVyVGV4dCkgfCBodG1sICVdPC9oMj4KICAgIDxkaXYgY2xhc3M9Im9vb1NlcnZpY2VDYXRhbG9nV3JhcHBlciI+CiAgICAgICAgPHVsIGNsYXNzPSJvb29QYXJlbnRTZXJ2aWNlTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlBhcmVudFNlcnZpY2UiKSAlXQogICAgICAgICAgICA8bGkgdGl0bGU9IlslIFRyYW5zbGF0ZSgnU2hvdyBkZXRhaWxzIG9mIHRoaXMgc2VydmljZS4nKSB8IGh0bWwgJV0iIGRhdGEtc2VydmljZS1pZD0iWyUgRGF0YS5TZXJ2aWNlSUQgfCBodG1sICVdIiBjbGFzcz0ib29vU2VydmljZUlEQXZhaWxhYmxlIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lU2hvcnQpIHwgaHRtbCAlXTwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJQYXJlbnRTZXJ2aWNlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFyZW50U2VydmljZU1vcmUiKSAlXQogICAgICAgICAgICA8bGkgY2xhc3M9Im9vb1NlcnZpY2VNb3JlIG9vb1NlcnZpY2VJREF2YWlsYWJsZSIgZGF0YS1zZXJ2aWNlLWlkPSJBbGwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vU2VydmljZU1vcmVTZWFyY2giPjxpIGNsYXNzPSJvb29mbyBvb29mby1zZWFyY2giPjwvaT48c3Bhbj5bJSBUcmFuc2xhdGUoJ1NlYXJjaCcpIHwgaHRtbCAlXTwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb1NlcnZpY2VNb3JlSW5mbyI+KyBbJSBEYXRhLk51bWJlck9mU2VydmljZXMgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJQYXJlbnRTZXJ2aWNlTW9yZSIpICVdCiAgICAgICAgPC91bD4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/Dashboard/TileServiceCatalogDynamicFields.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZmllbGRzZXQgY2xhc3M9Im9vb0R5bmFtaWNGaWVsZHMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlRHluYW1pY0ZpZWxkIikgJV0KWyUgSUYgRGF0YS5UaXRsZUZpZWxkICVdCiAgICA8cCB0aXRsZT0iWyUgRGF0YS5UZXh0IHwgaHRtbCAlXSIgc3R5bGU9IlslIERhdGEuU3R5bGUgfCBodG1sICVdIj5bJSBEYXRhLlRleHQgfCBodG1sICVdPC9wPgpbJSBFTFNFICVdCiAgICA8cCBjbGFzcz0ib29vMTIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJvb28xMmciPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9zcGFuPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXJ2aWNlRHluYW1pY0ZpZWxkTGluayIpICVdCiAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIlslIElGIERhdGEuTGlua1ByZXZpZXcgJV0gZGF0YS10cmlnZ2VyPSJmbG9hdGVyIiBkYXRhLWZsb2F0ZXItdXJsPSJbJSBEYXRhLkxpbmtQcmV2aWV3IHwgSW50ZXJwb2xhdGUgJV0iWyUgRU5EICVdIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlRHluYW1pY0ZpZWxkTGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VEeW5hbWljRmllbGRQbGFpbiIpICVdCiAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPlslIERhdGEuVmFsdWUgJV08L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlRHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2VEeW5hbWljRmllbGQiKSAlXQo8L2ZpZWxkc2V0PgoKPHN0eWxlPgogICAgZmllbGRzZXQub29vRHluYW1pY0ZpZWxkcyB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDUwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDBweDsKICAgICAgICAvKiBwb3NpdGlvbjogYWJzb2x1dGU7ICovCiAgICAgICAgYm90dG9tOiAwOwogICAgfQoKICAgIC5vb29EeW5hbWljRmllbGRzIC5vb28xMmcgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4zcHg7CiAgICAgICAgY29sb3I6ICM3ZjgwOWQ7CiAgICB9Cjwvc3R5bGU+Cg==</File>
        <File Location="Kernel/Output/JavaScript/Templates/Standard/Customer/TileServiceCatalogContainer.html.tmpl" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGRhdGEtc2VydmljZS1pZD0ie3sgSUQgfX0iIGNsYXNzPSJvb29TZXJ2aWNlQ29udGFpbmVyIHt7IENsYXNzIH19Ij4KICAgIAogICAgPGRpdiBjbGFzcz0ib29vRGVzY2lwdGlvbkhlYWRlciI+CiAgICAgICAgPGgyIGNsYXNzPSJvb29TZXJ2aWNlTmFtZSIgdGl0bGU9Int7IE5hbWUgfX0iPnt7IE5hbWUgfX08L2gyPgogICAgICAgIHslIGlmICggVGlja2V0VHlwZSB8IGxlbmd0aCApID49IDEgJX0KICAgICAgICAgICAgPGkgY2xhc3M9Im9vb2ZvIG9vb2ZvLW1vcmVfdiI+PC9pPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvb29TZXJ2aWNlQWN0aW9ucyBvb29IaWRkZW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vU2VydmljZUFjdGlvblR5cGVzIiBkYXRhLXNlcnZpY2UtaWQ9Int7IElEIH19Ij4KICAgICAgICAgICAgICAgICAgICB7JSBmb3IgVHlwZU5hbWUsIFR5cGUgaW4gVGlja2V0VHlwZSAlfQogICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0ie3sgJ0NyZWF0ZSBhIG5ldyB0aWNrZXQgZm9yIHRoaXMgc2VydmljZS4nIHwgVHJhbnNsYXRlIH19IiBocmVmPSJ7eyBCYXNlbGluayB9fUFjdGlvbj1DdXN0b21lclRpY2tldE1lc3NhZ2U7U2VydmljZUlEPXt7IElEIH19O1R5cGVJRD17eyBUeXBlLklEIH19IiBjbGFzcz0ib29vU2VydmljZUFjdGlvbkVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJvb29mbyBvb29mby1mYXEge3sgVHlwZS5DbGFzc2VzIH19Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnQ3JlYXRlICVzJyB8IFRyYW5zbGF0ZShUeXBlTmFtZSkgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KICAgICAgICAgICAgICAgICAgICB7JSBpZiBOdW1iZXJPZlN1YnNlcnZpY2VzICV9CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1zZXJ2aWNlLWlkPSJ7eyBJRCB9fSIgY2xhc3M9Im9vb1NlcnZpY2VBY3Rpb25FbnRyeSBvb29TZXJ2aWNlQWN0aW9uU3Vic2VydmljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Im9vb2ZvIG9vb2ZvLWxvdXBlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnU2hvdyAlcyBzdWItc2VydmljZShzKScgfCBUcmFuc2xhdGUoTnVtYmVyT2ZTdWJzZXJ2aWNlcykgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vU2VydmljZUFjdGlvbkVudHJ5IG9vb1NlcnZpY2VBY3Rpb25EZXRhaWxzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Im9vb2ZvIG9vb2ZvLXN1YnNjcmlwdGlvbiI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnTW9yZSBkZXRhaWxzJyB8IFRyYW5zbGF0ZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICB7JSBlbmRpZiAlfQogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ib29vRGVzY3JpcHRpb25Cb2R5Ij4KICAgICAgICB7JSBpZiBOdW1iZXJPZlN1YnNlcnZpY2VzICV9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb1N1YnNlcnZpY2VzIG9vbzEyZyI+e3sgTnVtYmVyT2ZTdWJzZXJ2aWNlcyB9fSB7eyAnU3ViLVNlcnZpY2UocyknIHwgVHJhbnNsYXRlIH19PC9kaXY+CiAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICA8c3BhbiBjbGFzcz0ib29vRGVzY3JpcHRpb25TaG9ydCI+e3sgRGVzY3JpcHRpb25TaG9ydCB9fTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0ib29vS2V5d29yZHMiPnt7IEtleXdvcmRzIH19PC9zcGFuPgogICAgPC9kaXY+CgogICAgeyUgaWYgbm90IE5vdFNlbGVjdGFibGUgJX0KICAgIDxkaXYgY2xhc3M9Im9vb1NlcnZpY2VCb3R0b20iPgogICAgICAgIDxwIHRpdGxlPSJ7eyAnU2hvdyBkZXRhaWxzIG9mIHRoaXMgc2VydmljZS4nIHwgVHJhbnNsYXRlIH19IiBjbGFzcz0ib29vU2VydmljZUluZm9ybWF0aW9uIj4KICAgICAgICAgICAge3sgJ0RldGFpbHMnIHwgVHJhbnNsYXRlIH19CiAgICAgICAgPC9wPgogICAgICAgIDxpIGNsYXNzPSJvb29mbyBvb29mby1hcnJvd19yIj48L2k+CiAgICA8L2Rpdj4KICAgIHslIGVuZGlmICV9CjwvZGl2Pgo=</File>
        <File Location="Kernel/Output/JavaScript/Templates/Standard/Customer/TileServiceCatalogDetailed.html.tmpl" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp7JSBpZiBOdW1iZXJPZlN1YnNlcnZpY2VzICV9CiAgIDwhLS0gPHNwYW4gY2xhc3M9Im9vb1N1YnNlcnZpY2VzIG9vbzEyZyIgZGF0YS1zZXJ2aWNlLWlkPSJ7eyBJRCB9fSI+e3sgTnVtYmVyT2ZTdWJzZXJ2aWNlcyB9fSB7eyAnc3ViLXNlcnZpY2UocykgYXZhaWxhYmxlJyB8IFRyYW5zbGF0ZSB9fTwvc3Bhbj4gLS0+CnslIGVuZGlmICV9CjxkaXYgZGF0YS1zZXJ2aWNlLWlkPSJ7eyBJRCB9fSIgY2xhc3M9Im9vb0RldGFpbGVkU2VydmljZUNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJvb29EZXRhaWxlZExlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im9vb0RldGFpbGVkU2VydmljZU5hbWUiPgogICAgICAgICAgICA8aDI+e3sgTmFtZSB9fTwvaDI+CiAgICAgICAgICAgIDwhLS0gPHA+e3sgRGVzY3JpcHRpb25TaG9ydCB9fTwvcD4gLS0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ib29vRGV0YWlsZWREZXNjcmlwdGlvbkxvbmciPgogICAgICAgICAgICA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXBvcHVwcyBtcy1hbGxvdy1wb3B1cHMgYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94IiB0aXRsZT0iYWJvdXQ6YmxhbmsiIGZyYW1lYm9yZGVyPSIwIiBjbGFzcz0iVmlzaWJsZUZyYW1lIiBzcmM9Int7IElmcmFtZUxpbmsgfX0iPjwvaWZyYW1lPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJvb29EZXRhaWxlZFJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJvb29EZXRhaWxlZFRpY2tldFR5cGVMaXN0Ij4KICAgICAgICAgICAgeyUgaWYgVHlwZUxpc3QgJX0KICAgICAgICAgICAgICAgIHslIGZvciBUeXBlTmFtZSwgVHlwZSBpbiBUeXBlTGlzdCAlfQogICAgICAgICAgICAgICAgICAgIHslIGlmIGxvb3AuaW5kZXgwIDwgMyAlfSAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Int7ICdDcmVhdGUgYSBuZXcgdGlja2V0IG9mIHR5cGUgJXMuJyB8IFRyYW5zbGF0ZShUeXBlTmFtZSkgfX0iIGhyZWY9Int7IEJhc2VsaW5rIH19QWN0aW9uPUN1c3RvbWVyVGlja2V0TWVzc2FnZTtTZXJ2aWNlSUQ9e3sgSUQgfX07VHlwZUlEPXt7IFR5cGUuSUQgfX0iPjxpIGNsYXNzPSJvb29mbyBvb29mby1mYXEge3sgVHlwZS5DbGFzc2VzIH19Ij48L2k+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0NyZWF0ZSAlcycgfCBUcmFuc2xhdGUoVHlwZU5hbWUpIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICAgICB7IyB7JSBlbHNlICV9CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0ib29vZm8gb29vZm8tZmFxIj48L2k+PGEgaHJlZj0ie3sgQmFzZWxpbmsgfX1BY3Rpb249Q3VzdG9tZXJUaWNrZXRNZXNzYWdlO1NlcnZpY2VJRD17eyBJRCB9fSI+IHt7ICdDcmVhdGUgVGlja2V0JyB8IFRyYW5zbGF0ZSB9fTwvYT48YnI+ICN9CiAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Im9vb0RldGFpbGVkQWNjb3JkaW9uTGlzdCI+CgogICAgICAgIHslIGlmIEZBUUFydGljbGVMaXN0ICV9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb0RldGFpbGVkQWNjb3JkaW9uIFdpZGdldFNpbXBsZSB7JSBpZiBBZGRpdGlvbmFsSW5mb3JtYXRpb24gJX1Db2xsYXBzZWR7JSBlbHNlICV9RXhwYW5kZWR7JSBlbmRpZiAlfSBBbmltYXRlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJ7eyAnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50JyB8IFRyYW5zbGF0ZSB9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+e3sgJ0ZBUSBhcnRpY2xlIG9uIHRoaXMgdG9waWMnIHwgVHJhbnNsYXRlIH19PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb051bWJlck9mRW50cmllcyI+PHNwYW4+e3sgRkFRQXJ0aWNsZUxpc3QubGVuZ3RoIH19PC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Im9vb2ZvIG9vb2ZvLWFycm93X3UiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJvb29mbyBvb29mby1hcnJvd19kIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vRGV0YWlsZWRGQVEgQ29udGVudCIgeyUgaWYgQWRkaXRpb25hbEluZm9ybWF0aW9uICV9c3R5bGU9ImRpc3BsYXk6IG5vbmU7InslIGVsc2UgJX17JSBlbmRpZiAlfT4KICAgICAgICAgICAgICAgICAgICB7JSBmb3IgRkFRQXJ0aWNsZSBpbiBGQVFBcnRpY2xlTGlzdCAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ie3sgQmFzZWxpbmsgfX1BY3Rpb249Q3VzdG9tZXJGQVFab29tO0l0ZW1JRD17eyBGQVFBcnRpY2xlLkl0ZW1JRCB9fSIgdGl0bGU9Int7IEZBUUFydGljbGUuVGl0bGUgfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb0RldGFpbGVkRkFRSXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJvb29EZXRhaWxlZEFjY29yZGlvbkNhcHRpb24iPnt7IEZBUUFydGljbGUuVGl0bGUgfX08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb0ZBUURlc2NyaXB0aW9uIj57eyBGQVFBcnRpY2xlLkRlc2NyaXB0aW9uIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJvb29GQVFEZXRhaWxzSGludCBvb29IaWRkZW4iPnt7ICdEZXRhaWxzJyB8IFRyYW5zbGF0ZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICB7JSBlbmRpZiAlfQoKICAgICAgICB7JSBpZiBBZGRpdGlvbmFsSW5mb3JtYXRpb24gJX0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vRGV0YWlsZWRBY2NvcmRpb24gV2lkZ2V0U2ltcGxlIHslIGlmIEZBUUFydGljbGVMaXN0ICV9Q29sbGFwc2VkeyUgZWxzZSAlfUV4cGFuZGVkeyUgZW5kaWYgJX0gQW5pbWF0ZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0ie3sgJ1Nob3cgb3IgaGlkZSB0aGUgY29udGVudCcgfCBUcmFuc2xhdGUgfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPnt7ICdBZGRpdGlvbmFsIGluZm9ybWF0aW9uJyB8IFRyYW5zbGF0ZSB9fTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0ib29vZm8gb29vZm8tYXJyb3dfdSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Im9vb2ZvIG9vb2ZvLWFycm93X2QiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvb29EZXRhaWxlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbiBDb250ZW50IiB7JSBpZiBGQVFBcnRpY2xlTGlzdCAlfXN0eWxlPSJkaXNwbGF5OiBub25lOyJ7JSBlbHNlICV9eyUgZW5kaWYgJX0+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgV29ya2luZ0hvdXJzIG9yIEZpcnN0UmVzcG9uc2VUaW1lIG9yIFNvbHV0aW9uVGltZSAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im9vb0RldGFpbGVkQWNjb3JkaW9uQ2FwdGlvbiBvb29EZXRhaWxlZFN1YnRpdGxlIj57eyAnU2VydmljZSBob3VycycgfCBUcmFuc2xhdGUgfX08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBXb3JraW5nSG91cnMgJX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ib29vU0xBTGFiZWwiPiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im9vbzEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGZvciBSdW4gaW4gV29ya2luZ0hvdXJzICV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUnVuLlN0YXJ0RGF5IHwgVHJhbnNsYXRlKFJ1bi5TdGFydERheSkgfX17JSBpZiBSdW4uTGFzdERheSAhPSBSdW4uU3RhcnREYXkgJX0mIzgyMTE7e3sgUnVuLkxhc3REYXkgfCBUcmFuc2xhdGUoUnVuLkxhc3REYXkpIH19eyUgZW5kaWYgJX0ge3sgUnVuLkZpcnN0SG91ciB9fSYjODIxMTt7eyBSdW4uTGFzdEhvdXIgfX0ge3sgIm8nY2xvY2siIHwgVHJhbnNsYXRlIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgRmlyc3RSZXNwb25zZVRpbWUgJX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ib29vMTIiPnt7ICdGaXJzdCBSZXNwb25zZSBUaW1lJyB8IFRyYW5zbGF0ZSB9fToge3sgRmlyc3RSZXNwb25zZVRpbWUgfX0ge3sgJ2hvdXIocyknIHwgVHJhbnNsYXRlIH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIFNvbHV0aW9uVGltZSAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJvb28xMiI+e3sgJ1NvbHV0aW9uIFRpbWUnIHwgVHJhbnNsYXRlIH19OiB7eyBTb2x1dGlvblRpbWUgfX0ge3sgJ2hvdXIocyknIHwgVHJhbnNsYXRlIH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBEeW5hbWljRmllbGRMaXN0ICV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ib29vRGV0YWlsZWRBY2NvcmRpb25DYXB0aW9uIG9vb0RldGFpbGVkU3VidGl0bGUiPnt7ICdTZXJ2aWNlIEluZm9ybWF0aW9uJyB8IFRyYW5zbGF0ZSB9fTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGZvciBERkRhdGEgaW4gRHluYW1pY0ZpZWxkTGlzdCAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIERGRGF0YS5MaW5rICV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im9vbzEyIj48c3Bhbj57eyBERkRhdGEuTGFiZWwgfCBUcmFuc2xhdGUgfX06PC9zcGFuPiA8YSBocmVmPSJ7eyBERkRhdGEuTGluayB9fSIgY2xhc3M9IkR5bmFtaWNGaWVsZExpbmsiIHslIGlmIERGRGF0YS5MaW5rUHJldmlldyAlfSBkYXRhLXRyaWdnZXI9ImZsb2F0ZXIiIGRhdGEtZmxvYXRlci11cmw9Int7IERGRGF0YS5MaW5rUHJldmlldyB9fSJ7JSBlbmRpZiAlfSB0YXJnZXQ9Il9ibGFuayI+e3sgREZEYXRhLlZhbHVlIH19PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ib29vMTIiPjxzcGFuPnt7IERGRGF0YS5MYWJlbCB8IFRyYW5zbGF0ZSB9fTo8L3NwYW4+IHt7IERGRGF0YS5WYWx1ZSB9fTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgeyMgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1wb3B1cHMgbXMtYWxsb3ctcG9wdXBzIGFsbG93LXBvcHVwcy10by1lc2NhcGUtc2FuZGJveCIgdGl0bGU9ImFib3V0OmJsYW5rIiBmcmFtZWJvcmRlcj0iMCIgY2xhc3M9IlZpc2libGVGcmFtZSIgc3JjPSJ7eyBJZnJhbWVMaW5rRHluYW1pY0ZpZWxkIH19Ij48L2lmcmFtZT4gI30KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICB7JSBlbHNlICV9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb0RldGFpbGVkQWNjb3JkaW9uIFdpZGdldFNpbXBsZSB7JSBpZiBGQVFBcnRpY2xlTGlzdCAlfUNvbGxhcHNlZHslIGVsc2UgJX1FeHBhbmRlZHslIGVuZGlmICV9IEFuaW1hdGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9Int7ICdTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQnIHwgVHJhbnNsYXRlIH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz57eyAnQWRkaXRpb25hbCBpbmZvcm1hdGlvbicgfCBUcmFuc2xhdGUgfX08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Im9vb2ZvIG9vb2ZvLWFycm93X3UiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJvb29mbyBvb29mby1hcnJvd19kIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vRGV0YWlsZWRBZGRpdGlvbmFsSW5mb3JtYXRpb24gQ29udGVudCIgeyUgaWYgRkFRQXJ0aWNsZUxpc3QgJX1zdHlsZT0iZGlzcGxheTogbm9uZTsieyUgZWxzZSAlfXslIGVuZGlmICV9PiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im9vb0RldGFpbGVkQWNjb3JkaW9uQ2FwdGlvbiBvb29EZXRhaWxlZFN1YnRpdGxlIj57eyAnTm8gYWRkaXRpb25hbCBkYXRhIGFyZSBhdmFpbGFibGUuJyB8IFRyYW5zbGF0ZSB9fTwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICB7JSBlbmRpZiAlfQoKICAgICAgICB7JSBpZiBTdWJzZXJ2aWNlc0hUTUwgfCBsZW5ndGggPiAwICV9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9vb0RldGFpbGVkQWNjb3JkaW9uIFdpZGdldFNpbXBsZSBDb2xsYXBzZWQgQW5pbWF0ZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0ie3sgJ1Nob3cgb3IgaGlkZSB0aGUgY29udGVudCcgfCBUcmFuc2xhdGUgfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPnt7ICdTdWItU2VydmljZShzKScgfCBUcmFuc2xhdGUgfX08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vTnVtYmVyT2ZFbnRyaWVzIj48c3Bhbj57eyBOdW1iZXJPZlN1YnNlcnZpY2VzIH19PC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Im9vb2ZvIG9vb2ZvLWFycm93X3UiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJvb29mbyBvb29mby1hcnJvd19kIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib29vRGV0YWlsZWRTdWJzZXJ2aWNlcyBDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgICAgICAgICAgIHslIGZvciBTdWJzZXJ2aWNlIGluIFN1YnNlcnZpY2VzSFRNTCAlfQogICAgICAgICAgICAgICAgICAgICAgICB7eyBTdWJzZXJ2aWNlIHwgc2FmZSB9fQogICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIHslIGVuZGlmICV9CgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGEgaWQ9Im9vb0RldGFpbGVkVG9nZ2xlU2lkZWJhciIgaHJlZj0iIyIgdGl0bGU9Int7ICdGdXJ0aGVyIGluZm9ybWF0aW9uJyB8IFRyYW5zbGF0ZSB9fSIgYWNjZXNza2V5PSJuIj4KICAgICAgICA8YnV0dG9uPgogICAgICAgICAgICA8aSBjbGFzcz0ib29vZm8gb29vZm8tbW9yZV92Ij48L2k+CiAgICAgICAgPC9idXR0b24+CiAgICA8L2E+Cgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/JavaScript/Templates/Standard/Customer/TileServiceCatalogModal.html.tmpl" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJvb29TZXJ2aWNlQ2F0YWxvZyI+CiAgICA8ZGl2IGNsYXNzPSJSb3cgb29vU2VydmljZUZpZWxkIj4KICAgICAgICB7eyBTZXJ2aWNlU3RyZyB8IHNhZmUgfX0KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iUm93IG9vb1NlcnZpY2VGaWVsZFNlYXJjaCI+CiAgICAgICAgPGlucHV0IHRpdGxlPSJ7eyAnU2VhcmNoIGNhdGFsb2cnIHwgVHJhbnNsYXRlIH19IiB0eXBlPSJ0ZXh0IiBuYW1lPSJTZWFyY2giIHBsYWNlaG9sZGVyPSJ7eyAnU2VhcmNoJyB8IFRyYW5zbGF0ZSB9fS4uLiI+PC9pbnB1dD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ib29vU2VydmljZUJyZWFkY3J1bWJXcmFwIj4KICAgICAgICA8aSBjbGFzcz0ib29vU2Nyb2xsTGVmdCBvb29mby1hcnJvd19sIj48L2k+CiAgICAgICAgPGRpdiBjbGFzcz0ib29vU2VydmljZUJyZWFkY3J1bWIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvb29TZXJ2aWNlQnJlYWRjcnVtYkZpZWxkIj4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ib29vQnJlYWRjcnVtYlNlcnZpY2VMaXN0Ij48L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aSBjbGFzcz0ib29vU2Nyb2xsUmlnaHQgb29vZm8tYXJyb3dfciI+PC9pPgogICAgPC9kaXY+CiAgICA8cCBjbGFzcz0ib29vU2VydmljZVJlc3VsdCI+CiAgICAgICAgPHNwYW4gY2xhc3M9Im9vb1NlcnZpY2VSZXN1bHROdW1iZXIiPjwvc3Bhbj4KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9Im9vb1NlcnZpY2VXcmFwcGVyIj4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/System/DynamicField/ObjectType/Service.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjQgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6Ok9iamVjdFR5cGU6OlNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpPYmplY3RUeXBlOjpTZXJ2aWNlCgo9aGVhZDEgREVTQ1JJUFRJT04KClNlcnZpY2Ugb2JqZWN0IGhhbmRsZXIgZm9yIER5bmFtaWNGaWVsZHMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6Ok9iamVjdFR5cGU6OlNlcnZpY2UtPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBibGVzcyB7fSwgJFR5cGU7Cn0KCj1oZWFkMiBQb3N0VmFsdWVTZXQoKQoKcGVyZm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZ0ZXIgdGhlIFZhbHVlIHNldCBmb3IgdGhpcyBvYmplY3QgdHlwZS4KCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRUaWNrZXRIYW5kbGVyT2JqZWN0LT5Qb3N0VmFsdWVTZXQoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsICAgICAgIyBjb21wbGV0ZSBjb25maWcgb2YgdGhlIER5bmFtaWNGaWVsZAogICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkT2JqZWN0SUQsICAgICAgICAgICAgICAgICMgSUQgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IHRoYXQgdGhlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtdXN0IGJlIGxpbmtlZCB0bywgZS4gZy4gVGlja2V0SUQKICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLCAgICAgICAgICAgICAgICAgICAjIFZhbHVlIHRvIHN0b3JlLCBkZXBlbmRzIG9uIGJhY2tlbmQgdHlwZQogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFBvc3RWYWx1ZVNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRHluYW1pY0ZpZWxkQ29uZmlnIE9iamVjdElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIER5bmFtaWNGaWVsZENvbmZpZyAoZ2VuZXJhbCkKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIGZpZWxkIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBEeW5hbWljRmllbGRDb25maWcgKGludGVybmFsbHkpCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSUQgRmllbGRUeXBlIE9iamVjdFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCBpbiBEeW5hbWljRmllbGRDb25maWchIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIE5vdGhpbmcgdG8gZG8gaGVyZQogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBPYmplY3REYXRhR2V0KCkKCnJldHJpZXZlcyB0aGUgZGF0YSBvZiB0aGUgY3VycmVudCBvYmplY3QuCgogICAgbXkgJU9iamVjdERhdGEgPSAkRHluYW1pY0ZpZWxkVGlja2V0SGFuZGxlck9iamVjdC0+T2JqZWN0RGF0YUdldCgKICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywgICAgICAjIGNvbXBsZXRlIGNvbmZpZyBvZiB0aGUgRHluYW1pY0ZpZWxkCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEyMywKICAgICk7CgpyZXR1cm5zOgoKICAgICVPYmplY3REYXRhID0gKAogICAgICAgIE9iamVjdElEID0+IDEyMywKICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgPT4gJ2pkb2UnLAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdKb2huJywKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnRG9tZScsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ2ouZG9lQGV4YW1wbGUuY29tJywKICAgICAgICAgICAgIyAuLi4KICAgICAgICB9CiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhEeW5hbWljRmllbGRDb25maWcgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgQ2hlY2sgRHluYW1pY0ZpZWxkQ29uZmlnIChnZW5lcmFsKS4KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIGZpZWxkIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBDaGVjayBEeW5hbWljRmllbGRDb25maWcgKGludGVybmFsbHkpLgogICAgZm9yIG15ICROZWVkZWQgKHF3KElEIEZpZWxkVHlwZSBPYmplY3RUeXBlKSkgewogICAgICAgIGlmICggISRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQgaW4gRHluYW1pY0ZpZWxkQ29uZmlnISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKCiAgICByZXR1cm4gdW5sZXNzICRVc2VySUQ7CgogICAgbXkgJE9iamVjdElEOwoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgbXkgJE9iamVjdElEcyA9ICREeW5hbWljRmllbGRPYmplY3QtPk9iamVjdE1hcHBpbmdHZXQoCiAgICAgICAgT2JqZWN0TmFtZSA9PiAkVXNlcklELAogICAgICAgIE9iamVjdFR5cGUgPT4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntPYmplY3RUeXBlfSwKICAgICk7CgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkT2JqZWN0SURzKSAmJiAkT2JqZWN0SURzLT57JFVzZXJJRH0gKSB7CiAgICAgICAgJE9iamVjdElEID0gJE9iamVjdElEcy0+eyRVc2VySUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE9iamVjdElEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+T2JqZWN0TWFwcGluZ0NyZWF0ZSgKICAgICAgICAgICAgT2JqZWN0TmFtZSA9PiAkVXNlcklELAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57T2JqZWN0VHlwZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkT2JqZWN0SUQgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBvYmplY3QgaWQgZm9yIG9iamVjdCBuYW1lICRVc2VySUQgYW5kIHR5cGUgJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntPYmplY3RUeXBlfSEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVNlcnZpY2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICBVc2VyICA9PiAkVXNlcklELAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgIHJldHVybiAoCiAgICAgICAgT2JqZWN0SUQgPT4gJE9iamVjdElELAogICAgICAgIERhdGEgICAgID0+IFwlU2VydmljZURhdGEsCiAgICApOwoKfQoKMTsK</File>
        <File Location="var/httpd/htdocs/js/Core.Customer.TileServiceCatalog.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQ3VzdG9tZXIgPSBDb3JlLkN1c3RvbWVyIHx8IHt9OwoKQ29yZS5DdXN0b21lci5UaWxlU2VydmljZUNhdGFsb2cgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CiAgICBjb25zdCAkbCA9IGUgPT4gJCgkKGUpLmdldCgtMSkpOyAvLyBsYXN0IG1hdGNoZWQgZWxlbQogICAgY29uc3QgY2xvbmVfb2Zmc2V0X2RpYWxvZyA9ICgpID0+IHsKICAgICAgICBjb25zdCBsYXN0X2RpYWxvZyA9ICRsKCcuRGlhbG9nLk1vZGFsJyk7CiAgICAgICAgbGFzdF9kaWFsb2cucGFyZW50KCkuYXBwZW5kKGxhc3RfZGlhbG9nLmNsb25lKHRydWUpKTsKICAgICAgICBjb25zdCBuZXdfZGlhbG9nID0gJGwoJy5EaWFsb2cuTW9kYWwnKTsKICAgICAgICBjb25zdCBvZmZzZXQgPSBuZXdfZGlhbG9nLm9mZnNldCgpOwogICAgICAgIG9mZnNldC50b3AgKz0gMzA7CiAgICAgICAgb2Zmc2V0LmxlZnQgKz0gMzA7CiAgICAgICAgbmV3X2RpYWxvZy5vZmZzZXQob2Zmc2V0KTsKICAgICAgICAkKG5ld19kaWFsb2cpLmZpbmQoJy5vb29TZXJ2aWNlRmllbGRTZWFyY2ggPiBpbnB1dCcpLnZhbCgnJyk7CiAgICB9OwoKICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBMaXN0ZW4gdG8gZG9jdW1lbnQgdG8gcmVjb2duaXplIERPTSBjaGFuZ2VzLgogICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcub29vU2VydmljZUlEQXZhaWxhYmxlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBTZXJ2aWNlSUQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtc2VydmljZS1pZCcpOwogICAgICAgICAgICAkKCcuRGlhbG9nLk1vZGFsIC5DbG9zZScpLmNsaWNrKCk7CiAgICAgICAgICAgIC8vIFNob3cgdGhlIGRpYWxvZyBpZiBub3QgYWxyZWFkeSBvcGVuLgogICAgICAgICAgICBpZiAoISQoJy5EaWFsb2cuTW9kYWwnKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciBNb2RhbENvbnRhaW5lciA9IENvcmUuVGVtcGxhdGUuUmVuZGVyKCdDdXN0b21lci9UaWxlU2VydmljZUNhdGFsb2dNb2RhbCcsIHsKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlU3RyZzogSlNPTi5wYXJzZShDb3JlLkNvbmZpZy5HZXQoJ1NlcnZpY2VTdHJnJykpLAogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0RpYWxvZyh7CiAgICAgICAgICAgICAgICAgICAgSFRNTDogTW9kYWxDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgTW9kYWw6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgQ2xvc2VPbkNsaWNrT3V0c2lkZTogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBDbG9zZU9uRXNjYXBlOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uVG9wOiAnMTVweCcsCiAgICAgICAgICAgICAgICAgICAgUG9zaXRpb25MZWZ0OiAnQ2VudGVyJywKICAgICAgICAgICAgICAgICAgICBBbGxvd0F1dG9Hcm93OiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBTdGFja2VkOiB0cnVlCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAkKCcuRGlhbG9nLk1vZGFsJykuYWRkQ2xhc3MoJ29vb1NlcnZpY2VDYXRhbG9nTW9kYWwnKTsKICAgICAgICAgICAgICAgIC8vIFRoZSBzZWFyY2ggZmllbGQgaXMgbm90IG5lZWRlZCBhbnltb3JlCiAgICAgICAgICAgICAgICAvLyAkKCcuRGlhbG9nLk1vZGFsIC5vb29TZXJ2aWNlRmllbGQnKS5hcHBlbmRUbygnLkRpYWxvZy5Nb2RhbCA+IC5IZWFkZXInKS5maW5kKCdzZWxlY3QnKS5hdHRyKCdpZCcsICdNb2RhbFNlcnZpY2VJRCcpOwogICAgICAgICAgICAgICAgJCgnLm9vb1NlcnZpY2VGaWVsZCcpLmFkZENsYXNzKCdvb29IaWRkZW4nKTsKICAgICAgICAgICAgICAgICQoJy5EaWFsb2cuTW9kYWwgLm9vb1NlcnZpY2VGaWVsZFNlYXJjaCcpLmFwcGVuZFRvKCcuRGlhbG9nLk1vZGFsID4gLkhlYWRlcicpLmZpbmQoJ3NlbGVjdCcpLmF0dHIoJ2lkJywgJ01vZGFsU2VhcmNoJyk7CiAgICAgICAgICAgICAgICAkKCcub29vU2VydmljZUJyZWFkY3J1bWJXcmFwJykuYXBwZW5kVG8oJy5EaWFsb2cuTW9kYWwgPiAuSGVhZGVyJyk7CiAgICAgICAgICAgICAgICAvLyBDb3JlLlVJLklucHV0RmllbGRzLkluaXQoKTsKICAgICAgICAgICAgICAgICQoJyNNb2RhbFNlcnZpY2VJRCcpLnZhbChTZXJ2aWNlSUQpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFRhcmdldE5TLkRpc3BsYXlTZXJ2aWNlTGlzdChTZXJ2aWNlSUQpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBTaG93IHN1YnNlcnZpY2VzLgogICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcuRGlhbG9nIC5vb29TZXJ2aWNlQ29udGFpbmVyJywgZnVuY3Rpb24oRXZlbnQpIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJChFdmVudC50YXJnZXQpLmhhc0NsYXNzKCdvb29mby1pbmZvJykgfHwgJChFdmVudC50YXJnZXQpLmhhc0NsYXNzKCdvb29mby1hZGQnKSB8fCAkKEV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ29vb1NlcnZpY2VJbmZvcm1hdGlvbicpCiAgICAgICAgICAgICAgICB8fCAkKEV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ29vb1NlcnZpY2VBY3Rpb25zJykgfHwgJChFdmVudC50YXJnZXQpLmhhc0NsYXNzKCdvb29TZXJ2aWNlQWN0aW9uRGV0YWlscycpIHx8ICAkKEV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ29vb1NlcnZpY2VCb3R0b20nKSB8fCAkKEV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ29vb2ZvLWFycm93X3InKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2xvbmVfb2Zmc2V0X2RpYWxvZygpOwogICAgICAgICAgICB2YXIgU2VydmljZUlEID0gJCh0aGlzKS5hdHRyKCdkYXRhLXNlcnZpY2UtaWQnKTsKICAgICAgICAgICAgJCgnI01vZGFsU2VydmljZUlEJykudmFsKFNlcnZpY2VJRCkudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKTsKICAgICAgICAgICAgVGFyZ2V0TlMuRGlzcGxheVNlcnZpY2VMaXN0KFNlcnZpY2VJRCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNob3cgdGhlIGRldGFpbGVkIHZpZXcuCiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5vb29TZXJ2aWNlQm90dG9tLCAub29vU2VydmljZUFjdGlvbkRldGFpbHMnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIFNlcnZpY2VJRCA9ICQodGhpcykucGFyZW50KCkuYXR0cignZGF0YS1zZXJ2aWNlLWlkJyk7CiAgICAgICAgICAgIGlmICghU2VydmljZUlEKSByZXR1cm47CiAgICAgICAgICAgIGNsb25lX29mZnNldF9kaWFsb2coKTsKICAgICAgICAgICAgVGFyZ2V0TlMuRGlzcGxheURldGFpbGVkU2VydmljZShTZXJ2aWNlSUQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNob3cgb3IgaGlkZSBzZXJ2aWNlIGFjdGlvbnMuCiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5vb29EZXNjaXB0aW9uSGVhZGVyID4gLm9vb2ZvJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICgkKHRoaXMpLm5leHQoKS5oYXNDbGFzcygnb29vU2VydmljZUFjdGlvbnMnKSkgewogICAgICAgICAgICAgICAgaWYgKCQodGhpcykubmV4dCgpLmhhc0NsYXNzKCdvb29IaWRkZW4nKSkgewogICAgICAgICAgICAgICAgICAgICQodGhpcykubmV4dCgpLnJlbW92ZUNsYXNzKCdvb29IaWRkZW4nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5uZXh0KCkuYWRkQ2xhc3MoJ29vb0hpZGRlbicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0pOwoKICAgICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLkRpYWxvZyBzcGFuLm9vb1N1YnNlcnZpY2VzJywgZnVuY3Rpb24oRXZlbnQpIHsKICAgICAgICAgICAgdmFyIFNlcnZpY2VJRCA9ICQodGhpcykuYXR0cignZGF0YS1zZXJ2aWNlLWlkJyk7CiAgICAgICAgICAgIFRhcmdldE5TLkRpc3BsYXlTZXJ2aWNlTGlzdChTZXJ2aWNlSUQpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBTZWxlY3QgYSBzZXJ2aWNlIHdoZW4gbmF2YmFyIGZpZWxkIGlzIGNoYW5nZWQuCiAgICAgICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcjTW9kYWxTZXJ2aWNlSUQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIFNlcnZpY2VJRCA9ICQodGhpcykudmFsKCk7CiAgICAgICAgICAgIFRhcmdldE5TLkRpc3BsYXlTZXJ2aWNlTGlzdChTZXJ2aWNlSUQpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBFbmFibGUgdGhlIHNlYXJjaCBmdW5jdGlvbi4KICAgICAgICAkKGRvY3VtZW50KS5vbigna2V5dXAnLCAnLkRpYWxvZyA+IC5IZWFkZXIgPiAub29vU2VydmljZUZpZWxkU2VhcmNoID4gaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIFNlYXJjaFN0cmluZyA9ICQodGhpcykudmFsKCkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgJGwoJy5EaWFsb2cgLm9vb1NlcnZpY2VXcmFwcGVyJykuZmluZCgnLm9vb1NlcnZpY2VDb250YWluZXInKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIFNlcnZpY2VOYW1lID0gJCh0aGlzKS5maW5kKCcub29vU2VydmljZU5hbWUnKS50ZXh0KCk7CiAgICAgICAgICAgICAgICB2YXIgRGVzY3JpcHRpb24gPSAkKHRoaXMpLmZpbmQoJy5vb29EZXNjcmlwdGlvblNob3J0JykudGV4dCgpOwogICAgICAgICAgICAgICAgdmFyIEtleXdvcmRzICAgID0gJCh0aGlzKS5maW5kKCcub29vS2V5d29yZHMnKS50ZXh0KCk7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgKFNlcnZpY2VOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihTZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSkgPiAtMSkgfHwKICAgICAgICAgICAgICAgICAgICAoRGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKFNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA+IC0xKSB8fAogICAgICAgICAgICAgICAgICAgIChLZXl3b3Jkcy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoU2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpID4gLTEpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdvb29IaWRkZW4nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnb29vSGlkZGVuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gSWYgbm8gU2VhcmNoU3RyaW5nIGlzIGdpdmVuLCBoaWRlIGFsbCBzdWJzZXJ2aWNlcyB3aXRoIHRoZSBjbGFzcyBvb29Jbml0aWFsSGlkZGVuLgogICAgICAgICAgICBpZiAoU2VhcmNoU3RyaW5nID09ICcnKSB7CiAgICAgICAgICAgICAgICAkKCcuRGlhbG9nIC5vb29Jbml0aWFsSGlkZGVuJykuYWRkQ2xhc3MoJ29vb0hpZGRlbicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUT0RPIFJlYnVpbGQgdGhlIGJyZWFkY3J1bWIuIFNob3cgb3JpZ2luYWwgYnJlYWRjcnVtYiBpZiBubyBzZWFyY2ggc3RyaW5nIGlzIGdpdmVuLgogICAgICAgIH0pOwoKICAgICAgICAvLyBTaG93IHRoZSBxdWljayBhY3Rpb24gdmlldyBmb3IgYSBzZXJ2aWNlLgogICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcub29vRGVzY2lwdGlvbkhlYWRlciA+IGknLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gVG9nZ2xlIHRoZSBzaWRlYmFyIGluZm9ybWF0aW9uIGZvciBtb2JpbGUgdmlld3MuCiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNvb29EZXRhaWxlZFRvZ2dsZVNpZGViYXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCEkKCcub29vRGV0YWlsZWRSaWdodCcpLmlzKCc6dmlzaWJsZScpKSB7CiAgICAgICAgICAgICAgICAkKCcub29vRGV0YWlsZWRSaWdodCcpLnNob3coKTsKICAgICAgICAgICAgICAgICQoJy5vb29EZXRhaWxlZExlZnQnKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAkKCcub29vU2VydmljZUJyZWFkY3J1bWJXcmFwJykuaGlkZSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJCgnLm9vb0RldGFpbGVkTGVmdCcpLnNob3coKTsKICAgICAgICAgICAgICAgICQoJy5vb29EZXRhaWxlZFJpZ2h0JykuaGlkZSgpOwogICAgICAgICAgICAgICAgJCgnLm9vb1NlcnZpY2VCcmVhZGNydW1iV3JhcCcpLnNob3coKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgIH0KCiAgICBUYXJnZXROUy5EaXNwbGF5U2VydmljZUxpc3QgPSBmdW5jdGlvbihTZXJ2aWNlSUQpIHsKICAgICAgICB2YXIgU3Vic2VydmljZXMgPSBUYXJnZXROUy5HZXRTdWJzZXJ2aWNlcyhTZXJ2aWNlSUQpOwoKICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBzdWJzZXJ2aWNlLCBqdW1wIHN0cmFpZ2h0IGludG8gdGhhdCBsaXN0LgogICAgICAgIGlmIChTdWJzZXJ2aWNlcy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB2YXIgU3Vic2VydmljZSA9IEpTT04ucGFyc2UoQ29yZS5Db25maWcuR2V0KCdTZXJ2aWNlTGlzdCcpKVtTdWJzZXJ2aWNlc107CgogICAgICAgICAgICAvLyBPbmx5IGp1bXAgZGVlcGVyIGlmIHRoZSBzdWJzZXJ2aWNlIGRvZXMgbm90IGhhdmUgdGhlIG9wdGlvbiB0byBjcmVhdGUgYSB0aWNrZXQgZm9yIGl0c2VsZi4KICAgICAgICAgICAgaWYgKCFTdWJzZXJ2aWNlLlRpY2tldFR5cGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXJnZXROUy5EaXNwbGF5U2VydmljZUxpc3QoU3Vic2VydmljZXNbMF0pOwogICAgICAgICAgICB9CiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3Vic2VydmljZSwgc2hvdyBhIGRldGFpbGVkIHZpZXcgb2YgdGhhdCBzZXJ2aWNlLgogICAgICAgIH0gZWxzZSBpZiAoU3Vic2VydmljZXMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIFRhcmdldE5TLkRpc3BsYXlEZXRhaWxlZFNlcnZpY2UoU2VydmljZUlEKTsKICAgICAgICB9CgogICAgICAgICRsKCcub29vU2VydmljZVdyYXBwZXInKS5odG1sKCcnKTsKICAgICAgICAkbCgnLm9vb1NlcnZpY2VSZXN1bHQnKS5yZW1vdmVDbGFzcygnb29vSGlkZGVuJyk7CiAgICAgICAgLy8gJCgnLm9vb1NlcnZpY2VCcmVhZGNydW1iJykuYWRkQ2xhc3MoJ29vb0hpZGRlbicpOwogICAgICAgICRsKCcub29vU2VydmljZUZpZWxkU2VhcmNoID4gaW5wdXQnKS5mb2N1cygpOyAvLyBBdXRvZm9jdXMgdGhlIHNlYXJjaCBmaWVsZC4KICAgICAgICAvLyAkKCcub29vU2VydmljZUZpZWxkJykucmVtb3ZlQ2xhc3MoJ29vb0hpZGRlbicpOwogICAgICAgICRsKCcub29vU2VydmljZUZpZWxkU2VhcmNoJykucmVtb3ZlQ2xhc3MoJ29vb0hpZGRlbicpOwogICAgICAgICRsKCcuRGlhbG9nJykucmVtb3ZlQ2xhc3MoJ29vb0RldGFpbGVkVmlldycpOwoKICAgICAgICAvLyBHZXQgYWxsIHN1YnNlcnZpY2VzIGZvciB0aGUgc2VhcmNoIGZ1bmN0aW9uLgogICAgICAgIHZhciBBbGxTdWJzZXJ2aWNlcyA9IFRhcmdldE5TLkdldEFsbFN1YnNlcnZpY2VzKFNlcnZpY2VJRCk7CiAgICAgICAgZm9yICh2YXIgU3Vic2VydmljZUlEIG9mIEFsbFN1YnNlcnZpY2VzKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBTdWJzZXJ2aWNlSUQgaXMgbm90IHdpdGhpbiB0aGUgU3Vic2VydmljZXMgYXJyYXksIGFkZCB0aGUgY2xhc3MgJ29vb0hpZGRlbicuCiAgICAgICAgICAgIHZhciBDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoU3Vic2VydmljZXMuaW5kZXhPZihTdWJzZXJ2aWNlSUQpID09IC0xKSB7CiAgICAgICAgICAgICAgICBDbGFzcyA9ICdvb29IaWRkZW4gb29vSW5pdGlhbEhpZGRlbic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIERpc3BsYXlTZXJ2aWNlSFRNTCA9IFRhcmdldE5TLkRpc3BsYXlTZXJ2aWNlKFN1YnNlcnZpY2VJRCwgQ2xhc3MpOwogICAgICAgICAgICAkKERpc3BsYXlTZXJ2aWNlSFRNTCkuYXBwZW5kVG8oJGwoJy5vb29TZXJ2aWNlV3JhcHBlcicpKTsKICAgICAgICB9CgogICAgICAgIFRhcmdldE5TLkNyZWF0ZUJyZWFkY3J1bWIoU2VydmljZUlEKTsKICAgIH0KCiAgICBUYXJnZXROUy5EaXNwbGF5U2VydmljZSA9IGZ1bmN0aW9uKFNlcnZpY2VJRCwgQ2xhc3MgPSAnJykgewogICAgICAgIHZhciBTZXJ2aWNlID0gSlNPTi5wYXJzZShDb3JlLkNvbmZpZy5HZXQoJ1NlcnZpY2VMaXN0JykpW1NlcnZpY2VJRF07CiAgICAgICAgdmFyIEJhc2VsaW5rID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpOwogICAgICAgIHZhciBDb250YWluZXIgPSBDb3JlLlRlbXBsYXRlLlJlbmRlcignQ3VzdG9tZXIvVGlsZVNlcnZpY2VDYXRhbG9nQ29udGFpbmVyJywgewogICAgICAgICAgICBJRDogU2VydmljZUlELAogICAgICAgICAgICBOYW1lOiAgU2VydmljZS5OYW1lU2hvcnQsCiAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQ6IFNlcnZpY2UuRGVzY3JpcHRpb25TaG9ydCwKICAgICAgICAgICAgTnVtYmVyT2ZTdWJzZXJ2aWNlczogVGFyZ2V0TlMuR2V0U3Vic2VydmljZXMoU2VydmljZUlEKS5sZW5ndGgsCiAgICAgICAgICAgIFRpY2tldFR5cGU6IFNlcnZpY2UuVGlja2V0VHlwZSwKICAgICAgICAgICAgQmFzZWxpbms6IEJhc2VsaW5rLAogICAgICAgICAgICBOb3RTZWxlY3RhYmxlOiBTZXJ2aWNlLk5vdFNlbGVjdGFibGUsCiAgICAgICAgICAgIENsYXNzOiBDbGFzcywKICAgICAgICAgICAgS2V5d29yZHM6IFNlcnZpY2UuS2V5d29yZHMKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIENvbnRhaW5lcjsKICAgIH0KCiAgICBUYXJnZXROUy5EaXNwbGF5RGV0YWlsZWRTZXJ2aWNlID0gZnVuY3Rpb24oU2VydmljZUlEKSB7CiAgICAgICAgJGwoJy5vb29TZXJ2aWNlV3JhcHBlcicpLmh0bWwoJycpOwogICAgICAgIHZhciBTZXJ2aWNlID0gSlNPTi5wYXJzZShDb3JlLkNvbmZpZy5HZXQoJ1NlcnZpY2VMaXN0JykpW1NlcnZpY2VJRF07CiAgICAgICAgdmFyIEJhc2VsaW5rID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpOwogICAgICAgIHZhciBJZnJhbWVMaW5rID0gQmFzZWxpbmsgKyAnQWN0aW9uPUN1c3RvbWVyVGlsZVNlcnZpY2VDYXRhbG9nO1N1YmFjdGlvbj1IVE1MVmlldztTZXJ2aWNlSUQ9JyArIFNlcnZpY2VJRCArICc7JyArIENvcmUuQ29uZmlnLkdldCgnU2Vzc2lvbk5hbWUnKSArICc9JyArIENvcmUuQ29uZmlnLkdldCgnU2Vzc2lvbklEJykKICAgICAgICAvLyBUT0RPOiBSZWZhY3Rvci9yZW1vdmUgdGhpcy4KICAgICAgICB2YXIgSWZyYW1lTGlua0R5bmFtaWNGaWVsZCA9IEJhc2VsaW5rICsgJ0FjdGlvbj1DdXN0b21lclRpbGVTZXJ2aWNlQ2F0YWxvZztTdWJhY3Rpb249RHluYW1pY0ZpZWxkVmlldztTZXJ2aWNlSUQ9JyArIFNlcnZpY2VJRCArICc7JyArIENvcmUuQ29uZmlnLkdldCgnU2Vzc2lvbk5hbWUnKSArICc9JyArIENvcmUuQ29uZmlnLkdldCgnU2Vzc2lvbklEJykKCiAgICAgICAgLy8gQ29udmVydCBtaW51dGVzIHRvIGhvdXJzIGFuZCByb3VuZCB0byB0aGUgZmlyc3QgZGVjaW1hbCBwbGFjZS4KICAgICAgICB2YXIgU29sdXRpb25UaW1lLCBGaXJzdFJlc3BvbnNlVGltZTsKICAgICAgICBpZiAoU2VydmljZS5Tb2x1dGlvblRpbWUgJiYgIWlzTmFOKFNlcnZpY2UuU29sdXRpb25UaW1lKSkgewogICAgICAgICAgICBTb2x1dGlvblRpbWUgPSBTZXJ2aWNlLlNvbHV0aW9uVGltZSAvIDYwOwogICAgICAgICAgICBTb2x1dGlvblRpbWUgPSBNYXRoLnJvdW5kKFNvbHV0aW9uVGltZSAqIDEwKSAvIDEwOwogICAgICAgIH0KCiAgICAgICAgaWYgKFNlcnZpY2UuRmlyc3RSZXNwb25zZVRpbWUgJiYgIWlzTmFOKFNlcnZpY2UuRmlyc3RSZXNwb25zZVRpbWUpKSB7CiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0gU2VydmljZS5GaXJzdFJlc3BvbnNlVGltZSAvIDYwOwogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSA9IE1hdGgucm91bmQoRmlyc3RSZXNwb25zZVRpbWUgKiAxMCkgLyAxMDsKICAgICAgICB9CgogICAgICAgIC8vIEdldCBhbGwgc3Vic2VydmljZXMuCiAgICAgICAgdmFyIFN1YnNlcnZpY2VzID0gVGFyZ2V0TlMuR2V0U3Vic2VydmljZXMoU2VydmljZUlEKTsKCiAgICAgICAgLy8gRm9yIGVhY2ggU3Vic2VydmljZSwgZ2V0IHRoZSBIVE1MLgogICAgICAgIHZhciBTdWJzZXJ2aWNlc0hUTUwgPSBbXTsKICAgICAgICBmb3IgKHZhciBTdWJzZXJ2aWNlSUQgb2YgU3Vic2VydmljZXMpIHsKICAgICAgICAgICAgU3Vic2VydmljZXNIVE1MLnB1c2goVGFyZ2V0TlMuRGlzcGxheVNlcnZpY2UoU3Vic2VydmljZUlEKSk7CiAgICAgICAgfQoKICAgICAgICB2YXIgQWRkaXRpb25hbEluZm9ybWF0aW9uOwogICAgICAgIGlmIChTZXJ2aWNlLldvcmtpbmdIb3VycyB8fCBTb2x1dGlvblRpbWUgfHwgRmlyc3RSZXNwb25zZVRpbWUgfHwgU2VydmljZS5EeW5hbWljRmllbGQpIHsKICAgICAgICAgICAgQWRkaXRpb25hbEluZm9ybWF0aW9uID0gMTsKICAgICAgICB9CgogICAgICAgIHZhciBEZXRhaWxlZCA9IENvcmUuVGVtcGxhdGUuUmVuZGVyKCdDdXN0b21lci9UaWxlU2VydmljZUNhdGFsb2dEZXRhaWxlZCcsIHsKICAgICAgICAgICAgSUQ6IFNlcnZpY2VJRCwKICAgICAgICAgICAgTmFtZTogIFNlcnZpY2UuTmFtZVNob3J0LAogICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0OiBTZXJ2aWNlLkRlc2NyaXB0aW9uU2hvcnQsCiAgICAgICAgICAgIElmcmFtZUxpbms6IElmcmFtZUxpbmssCiAgICAgICAgICAgIElmcmFtZUxpbmtEeW5hbWljRmllbGQ6IElmcmFtZUxpbmtEeW5hbWljRmllbGQsICAvLyBUT0RPOiBEZWxldGUgdGhpcy4KICAgICAgICAgICAgRHluYW1pY0ZpZWxkTGlzdDogU2VydmljZS5EeW5hbWljRmllbGQsCiAgICAgICAgICAgIFdvcmtpbmdIb3VyczogU2VydmljZS5Xb3JraW5nSG91cnMsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZTogU29sdXRpb25UaW1lLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZTogRmlyc3RSZXNwb25zZVRpbWUsCiAgICAgICAgICAgIEFkZGl0aW9uYWxJbmZvcm1hdGlvbjogQWRkaXRpb25hbEluZm9ybWF0aW9uLAogICAgICAgICAgICBUeXBlTGlzdDogU2VydmljZS5UaWNrZXRUeXBlLAogICAgICAgICAgICBCYXNlbGluazogQmFzZWxpbmssCiAgICAgICAgICAgIEZBUUFydGljbGVMaXN0OiBTZXJ2aWNlLkZBUXMsCiAgICAgICAgICAgIE51bWJlck9mU3Vic2VydmljZXM6IFRhcmdldE5TLkdldFN1YnNlcnZpY2VzKFNlcnZpY2VJRCkubGVuZ3RoLAogICAgICAgICAgICBTdWJzZXJ2aWNlc0hUTUw6IFN1YnNlcnZpY2VzSFRNTCwKICAgICAgICB9KTsKCiAgICAgICAgJChEZXRhaWxlZCkuYXBwZW5kVG8oJGwoJy5vb29TZXJ2aWNlV3JhcHBlcicpKTsKCiAgICAgICAgLy8gUmVzaXplIGlGcmFtZS4KICAgICAgICB2YXIgSUZyYW1lID0gJGwoJy5vb29TZXJ2aWNlV3JhcHBlcicpLmZpbmQoJ1tkYXRhLXNlcnZpY2UtaWQ9IicgKyBTZXJ2aWNlSUQgKyAnIl0nKS5maW5kKCdpZnJhbWUnKTsKICAgICAgICBSZXNpemVJZnJhbWUoSUZyYW1lKTsKICAgICAgICBDb3JlLlVJLkluaXQoKTsKCiAgICAgICAgVGFyZ2V0TlMuQ3JlYXRlQnJlYWRjcnVtYihTZXJ2aWNlSUQpOwoKICAgICAgICAkbCgnLkRpYWxvZycpLmFkZENsYXNzKCdvb29EZXRhaWxlZFZpZXcnKTsKICAgICAgICAkbCgnLm9vb1NlcnZpY2VSZXN1bHQnKS5hZGRDbGFzcygnb29vSGlkZGVuJyk7CiAgICB9CgogICAgVGFyZ2V0TlMuQ3JlYXRlQnJlYWRjcnVtYiA9IGZ1bmN0aW9uKFNlcnZpY2VJRCkgewogICAgICAgIHZhciBTZXJ2aWNlID0gSlNPTi5wYXJzZShDb3JlLkNvbmZpZy5HZXQoJ1NlcnZpY2VMaXN0JykpOwogICAgICAgIHZhciBTZWxlY3RlZFNlcnZpY2UgPSBTZXJ2aWNlW1NlcnZpY2VJRF07CgogICAgICAgIGlmIChTZWxlY3RlZFNlcnZpY2UpIHsKICAgICAgICAgICAgJGwoJy5vb29TZXJ2aWNlUmVzdWx0JykudGV4dChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnUmVzdWx0cyBmb3IgJXMnLCBTZWxlY3RlZFNlcnZpY2UuTmFtZVNob3J0KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGwoJy5vb29TZXJ2aWNlUmVzdWx0JykudGV4dChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnUmVzdWx0cycpKTsKICAgICAgICB9CgogICAgICAgIHZhciBMaVN0cmluZyA9ICcnOwoKICAgICAgICAvLyBBZGQgdGhlIGN1cnJlbnQgc2VydmljZSB0byB0aGUgbGlzdC4KICAgICAgICBpZiAoU2VydmljZUlEICE9ICdBbGwnKSB7CiAgICAgICAgICAgIExpU3RyaW5nICs9ICc8bGkgZGF0YS1zZXJ2aWNlLWlkPSInICsgU2VsZWN0ZWRTZXJ2aWNlLlNlcnZpY2VJRCArICciIGNsYXNzPSJvb29TZXJ2aWNlSURBdmFpbGFibGUgb29vU2VydmljZUlEU2VsZWN0ZWQiPicgKyBTZWxlY3RlZFNlcnZpY2UuTmFtZVNob3J0ICsgJzwvbGk+JzsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCAnQWxsJyB0byB0aGUgbGlzdC4KICAgICAgICBMaVN0cmluZyArPSAnPGxpIGRhdGEtc2VydmljZS1pZD0iQWxsIiBjbGFzcz0ib29vU2VydmljZUlEQXZhaWxhYmxlICcgKyAoIFNlcnZpY2VJRCA9PSAnQWxsJyAgPyAnb29vU2VydmljZUlEU2VsZWN0ZWQnIDogJycpICsgJyI+JyArIENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdBbGwnKSArICc8L2xpPic7CgogICAgICAgIC8vIEdldCBhbGwgbWFpbiBsZXZlbCBzZXJ2aWNlcy4KICAgICAgICBmb3IgKHZhciBTZXJ2aWNlSURMb29wIGluIFNlcnZpY2UpIHsKICAgICAgICAgICAgaWYgKFNlcnZpY2VbU2VydmljZUlETG9vcF0uUGFyZW50SUQpIGNvbnRpbnVlOyAgLy8gU2tpcCBpZiB0aGUgc2VydmljZSBoYXMgYSBwYXJlbnQuCiAgICAgICAgICAgIGlmIChTZXJ2aWNlSURMb29wID09IFNlcnZpY2VJRCkgY29udGludWU7ICAvLyBEb24ndCBzaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgdHdpY2UuCiAgICAgICAgICAgIGlmICghU2VydmljZVtTZXJ2aWNlSURMb29wXS5OYW1lU2hvcnQpIGNvbnRpbnVlOyAgLy8gVE9ETy9GSVhNRTogV29ya2Fyb3VuZCBTdGVmYW4gUi4gVGhpcyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgZml4IGluIC5wbS4KCiAgICAgICAgICAgIExpU3RyaW5nICs9ICc8bGkgZGF0YS1zZXJ2aWNlLWlkPSInICsgU2VydmljZUlETG9vcCArICciIGNsYXNzPSJvb29TZXJ2aWNlSURBdmFpbGFibGUiPicgKyBTZXJ2aWNlW1NlcnZpY2VJRExvb3BdLk5hbWVTaG9ydCArICc8L2xpPic7CiAgICAgICAgfQoKICAgICAgICAkbCgnLm9vb0JyZWFkY3J1bWJTZXJ2aWNlTGlzdCcpLmh0bWwoTGlTdHJpbmcpOwoKICAgICAgICAvLyBTY3JvbGwgc2VydmljZXMgbGlzdC4KICAgICAgICBjb25zdCBnb0xlZnQgPSBjcnVtYiA9PiBjcnVtYi5zY3JvbGxMZWZ0KGNydW1iLnNjcm9sbExlZnQoKSAtIGNydW1iLndpZHRoKCkpOwogICAgICAgIGNvbnN0IGdvUmlnaHQgPSBjcnVtYiA9PiBjcnVtYi5zY3JvbGxMZWZ0KGNydW1iLnNjcm9sbExlZnQoKSArIGNydW1iLndpZHRoKCkpOwogICAgICAgICQoJy5vb29TY3JvbGxMZWZ0JykuY2xpY2soCiAgICAgICAgICAgIGUgPT4gZ29MZWZ0KCQoZS50YXJnZXQpLnBhcmVudCgpLmZpbmQoJy5vb29TZXJ2aWNlQnJlYWRjcnVtYkZpZWxkJykpCiAgICAgICAgKTsKICAgICAgICAkKCcub29vU2Nyb2xsUmlnaHQnKS5jbGljaygKICAgICAgICAgICAgZSA9PiBnb1JpZ2h0KCQoZS50YXJnZXQpLnBhcmVudCgpLmZpbmQoJy5vb29TZXJ2aWNlQnJlYWRjcnVtYkZpZWxkJykpCiAgICAgICAgKTsKICAgICAgICAkKCcub29vU2VydmljZUJyZWFkY3J1bWJGaWVsZCcpLm9uKCd3aGVlbCcsIGUgPT4gewogICAgICAgICAgICBzd2l0Y2godHJ1ZSkgewogICAgICAgICAgICAgICAgY2FzZSBlLm9yaWdpbmFsRXZlbnQuZGVsdGFZIDwgMDoKICAgICAgICAgICAgICAgICAgICBnb0xlZnQoJChlLmRlbGVnYXRlVGFyZ2V0KSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIGUub3JpZ2luYWxFdmVudC5kZWx0YVkgPiAwOgogICAgICAgICAgICAgICAgICAgIGdvUmlnaHQoJChlLmRlbGVnYXRlVGFyZ2V0KSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0pCiAgICB9CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgR2V0U3Vic2VydmljZXMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkN1c3RvbWVyLlRpbGVTZXJ2aWNlQ2F0YWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gU2VydmljZUlEIC0gSUQgb2YgdGhlIHNlcnZpY2UKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgIEdldCB0aGUgc3Vic2VydmljZXMgb2YgYSBzZXJ2aWNlLgogICAgICovCiAgICBUYXJnZXROUy5HZXRTdWJzZXJ2aWNlcyA9IGZ1bmN0aW9uKFNlcnZpY2VJRCkgewogICAgICAgIHZhciBTZXJ2aWNlID0gSlNPTi5wYXJzZShDb3JlLkNvbmZpZy5HZXQoJ1NlcnZpY2VMaXN0JykpOwoKICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHNlcnZpY2VzIGFuZCBnZXQgYWxsIHN1YnNlcnZpY2VzIG9mIFNlcnZpY2VJRC4KICAgICAgICB2YXIgVW5vcmRlcmVkU3Vic2VydmljZXMgPSB7fTsKICAgICAgICBmb3IgKHZhciBDaGlsZElEIGluIFNlcnZpY2UpIHsKICAgICAgICAgICAgaWYgKFNlcnZpY2VJRCA9PSBTZXJ2aWNlW0NoaWxkSURdLlBhcmVudElEKSB7CiAgICAgICAgICAgICAgICBVbm9yZGVyZWRTdWJzZXJ2aWNlc1tTZXJ2aWNlW0NoaWxkSURdLk5hbWVTaG9ydF0gPSBDaGlsZElEOwogICAgICAgICAgICB9IGVsc2UgaWYgKFNlcnZpY2VJRCA9PSAnQWxsJykgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFsbCBmaWx0ZXIgaXMgc2V0LCBnZXQgYWxsIHNlcnZpY2VzLgogICAgICAgICAgICAgICAgVW5vcmRlcmVkU3Vic2VydmljZXNbU2VydmljZVtDaGlsZElEXS5OYW1lU2hvcnRdID0gQ2hpbGRJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gT3JkZXIgYWxsIFN1YnNlcnZpY2VzIGJ5IG5hbWUuCiAgICAgICAgdmFyIFN1YnNlcnZpY2VzID0gT2JqZWN0LmtleXMoVW5vcmRlcmVkU3Vic2VydmljZXMpLnNvcnQoKS5yZWR1Y2UoCiAgICAgICAgICAgIGZ1bmN0aW9uIChPYmosIEtleSkgewogICAgICAgICAgICAgICAgT2JqW0tleV0gPSBVbm9yZGVyZWRTdWJzZXJ2aWNlc1tLZXldOwogICAgICAgICAgICAgICAgcmV0dXJuIE9iajsKICAgICAgICAgICAgfSwge30KICAgICAgICApOwoKICAgICAgICAvLyBQdXNoIHNlcnZpY2VzIG9mIGEgc3BlY2lmaWMgdGlja2V0IHR5cGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAgICB2YXIgVGlja2V0VHlwZUZpbHRlciA9IENvcmUuQ29uZmlnLkdldCgnU29ydEJ5VGlja2V0VHlwZScpOwogICAgICAgIGlmIChUaWNrZXRUeXBlRmlsdGVyKSB7CiAgICAgICAgICAgIHZhciBTb3J0QnlUaWNrZXRUeXBlID0ge307CiAgICAgICAgICAgICQuZWFjaCggU3Vic2VydmljZXMsIGZ1bmN0aW9uKCBTZXJ2aWNlTmFtZSwgU2VydmljZUlEICkgewogICAgICAgICAgICAgICAgLy8gRmlsdGVyIGZvciBzZXJ2aWNlcyB3aXRoIGEgc2luZ2xlIHRpY2tldCB0eXBlIGFuZCBvbmx5IG1hdGNoIGlmIGl0J3MgdGhlIHRpY2tldCB0eXBlIHdlIGFyZSBsb29raW5nIGZvci4KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlW1NlcnZpY2VJRF0uVGlja2V0VHlwZSAmJgogICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKFNlcnZpY2VbU2VydmljZUlEXS5UaWNrZXRUeXBlKS5sZW5ndGggPT0gMSAmJgogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VbU2VydmljZUlEXS5UaWNrZXRUeXBlW1RpY2tldFR5cGVGaWx0ZXJdCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3Vic2VydmljZSBmcm9tIHRoZSBtYWluIGxpc3QuCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFN1YnNlcnZpY2VzW1NlcnZpY2VOYW1lXTsKICAgICAgICAgICAgICAgICAgICBTb3J0QnlUaWNrZXRUeXBlW1NlcnZpY2VOYW1lXSA9IFNlcnZpY2VJRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBBZGQgYWxsIHJlbW92ZWQgc3Vic2VydmljZXMgYmFjayB0byB0aGUgbWFpbiBsaXN0LgogICAgICAgICAgICAkLmV4dGVuZChTdWJzZXJ2aWNlcywgU29ydEJ5VGlja2V0VHlwZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhTdWJzZXJ2aWNlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgR2V0QWxsU3Vic2VydmljZXMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkN1c3RvbWVyLlRpbGVTZXJ2aWNlQ2F0YWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gU2VydmljZUlEIC0gSUQgb2YgdGhlIHNlcnZpY2UKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgIEdldCBhbGwgc3Vic2VydmljZXMgcmVjdXJzaXZlbHkgb2YgYSBzZXJ2aWNlLgogICAgICovCiAgICBUYXJnZXROUy5HZXRBbGxTdWJzZXJ2aWNlcyA9IGZ1bmN0aW9uKFNlcnZpY2VJRCkgewogICAgICAgIHZhciBTZXJ2aWNlID0gSlNPTi5wYXJzZShDb3JlLkNvbmZpZy5HZXQoJ1NlcnZpY2VMaXN0JykpOwoKICAgICAgICAvLyBHZXQgYWxsIHN1YnNlcnZpY2VzIG9mIFNlcnZpY2VJRC4KICAgICAgICB2YXIgU3Vic2VydmljZXMgPSBUYXJnZXROUy5HZXRTdWJzZXJ2aWNlcyhTZXJ2aWNlSUQpOwogICAgICAgIHZhciBBbGxTdWJzZXJ2aWNlcyA9IFN1YnNlcnZpY2VzOwoKICAgICAgICAvLyBXaGlsZSB0aGVyZSBhcmUgc3RpbGwgc3Vic2VydmljZXMsIGdldCBhbGwgc3Vic2VydmljZXMgb2YgdGhlIGN1cnJlbnQgc3Vic2VydmljZXMuCiAgICAgICAgd2hpbGUgKFN1YnNlcnZpY2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdmFyIE5ld1N1YnNlcnZpY2VzID0gW107CiAgICAgICAgICAgICQuZWFjaChTdWJzZXJ2aWNlcywgZnVuY3Rpb24oSW5kZXgsIFN1YnNlcnZpY2VJRCkgewogICAgICAgICAgICAgICAgdmFyIFN1YlN1YnNlcnZpY2VzID0gVGFyZ2V0TlMuR2V0U3Vic2VydmljZXMoU3Vic2VydmljZUlEKTsKICAgICAgICAgICAgICAgIE5ld1N1YnNlcnZpY2VzID0gTmV3U3Vic2VydmljZXMuY29uY2F0KFN1YlN1YnNlcnZpY2VzKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIFN1YnNlcnZpY2VzID0gTmV3U3Vic2VydmljZXM7CiAgICAgICAgICAgIEFsbFN1YnNlcnZpY2VzID0gQWxsU3Vic2VydmljZXMuY29uY2F0KFN1YnNlcnZpY2VzKTsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSBhbGwgZHVwbGljYXRlcyAoaW1wb3J0YW50IGZvciB0aGUgJ0FsbCcgZmlsdGVyKS4KICAgICAgICBBbGxTdWJzZXJ2aWNlcyA9IEFsbFN1YnNlcnZpY2VzLmZpbHRlcihmdW5jdGlvbiAoSXRlbSwgSW5kZXgsIEFycmF5KSB7CiAgICAgICAgICAgIHJldHVybiBBcnJheS5pbmRleE9mKEl0ZW0pID09PSBJbmRleDsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIEFsbFN1YnNlcnZpY2VzOwogICAgfQoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBuYW1lIENhbGN1bGF0ZUhlaWdodAogICAgICogQG1lbWJlcm9mIENvcmUuQ3VzdG9tZXIuVGlsZVNlcnZpY2VDYXRhbG9nCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7RE9NT2JqZWN0fSBJZnJhbWUgLSBET00gcmVwcmVzZW50YXRpb24gb2YgYW4gaWZyYW1lCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgUmVzaXplcyBJZnJhbWUgdG8gaXRzIG1heCBpbm5lciBoZWlnaHQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIFJlc2l6ZUlmcmFtZShJZnJhbWUpIHsKICAgICAgICBJZnJhbWUgPSBpc0pRdWVyeU9iamVjdChJZnJhbWUpID8gSWZyYW1lLmdldCgwKSA6IElmcmFtZTsKCiAgICAgICAgJChJZnJhbWUpLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciAkSWZyYW1lQ29udGVudCA9ICQoSWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBJZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgICAgICAgICBOZXdIZWlnaHQgPSAkSWZyYW1lQ29udGVudC5oZWlnaHQoKTsKICAgICAgICAgICAgaWYgKCFOZXdIZWlnaHQgfHwgaXNOYU4oTmV3SGVpZ2h0KSkgewogICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gMTAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKE5ld0hlaWdodCA+IDYwMCkgewogICAgICAgICAgICAgICAgICAgIE5ld0hlaWdodCA9IDYwMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgTmV3SGVpZ2h0ID0gcGFyc2VJbnQoTmV3SGVpZ2h0LCAxMCk7CiAgICAgICAgICAgICQoSWZyYW1lKS5oZWlnaHQoTmV3SGVpZ2h0ICsgJ3B4Jyk7CiAgICAgICAgfSk7CgogICAgfQoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oQ29yZS5DdXN0b21lci5UaWxlU2VydmljZUNhdGFsb2cgfHwge30pKTsK</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/css/Core.Dashboard.TileServiceCatalog.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi5vb29UaWxlX1NlcnZpY2VDYXRhbG9nID4gaDIgewogICAgbWFyZ2luLXRvcDogMTZweDsKICAgIG1hcmdpbi1ib3R0b206IDE2cHg7Cn0KCi5vb29QYXJlbnRTZXJ2aWNlTGlzdCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAxNnB4Owp9Cgoub29vUGFyZW50U2VydmljZUxpc3QgPiBsaSB7CiAgICB3b3JkLXdyYXA6IGFueXdoZXJlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIHBhZGRpbmc6IDU2cHggMzJweCAzMnB4OwogICAgZ2FwOiA4cHg7CiAgICB3aWR0aDogMjAwcHg7CiAgICBoZWlnaHQ6IDEyOHB4OwogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7Cn0KCi5vb29QYXJlbnRTZXJ2aWNlTGlzdCA+IC5vb29TZXJ2aWNlTW9yZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEyNywgMTI4LCAxNTcsIDAuMDUpOwogICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICBvdXRsaW5lOiBub25lOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBnYXA6IDhweDsKfQoKLm9vb1NlcnZpY2VNb3JlOmhvdmVyIHsKICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKICAgIGdhcDogOHB4OwogICAgY29sb3I6IHZhcigtLWNvbE1haW5MaWdodCkgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7Cn0KCi5vb29QYXJlbnRTZXJ2aWNlTGlzdCA+IGxpOmhvdmVyIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC8qIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbE1haW5MaWdodCk7ICovCiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tY29sTWFpbkxpZ2h0KTsKICAgIGNvbG9yOiB2YXIoLS1jb2xNYWluTGlnaHQpOwp9Cgoub29vUGFyZW50U2VydmljZUxpc3QgPiBsaS5vb29TZXJ2aWNlTW9yZTpob3ZlciB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xNYWluTGlnaHQpOwp9Cgoub29vU2VydmljZU1vcmU6aG92ZXIgPiAub29vU2VydmljZU1vcmVTZWFyY2ggPiBzcGFuLAoub29vU2VydmljZU1vcmU6aG92ZXIgPiAub29vU2VydmljZU1vcmVJbmZvIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5vb29TZXJ2aWNlTW9yZTpob3ZlciA+IC5vb29TZXJ2aWNlTW9yZVNlYXJjaCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjVweDsKICAgIGNvbG9yOiB2YXIoLS1jb2xNYWluTGlnaHQpOwp9Cgoub29vU2VydmljZU1vcmVTZWFyY2ggewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICB3aWR0aDogNzVweDsKICAgIGhlaWdodDogMThweDsKfQoKdWwub29vQ2hpbGRTZXJ2aWNlTGlzdCA+IGxpOm5vdCg6Zmlyc3QtY2hpbGQpIHsKICAgIG1hcmdpbi1sZWZ0OiAxMnB4OwogICAgcGFkZGluZzogNHB4IDRweDsKfQoKdWwub29vQnJlYWRjcnVtYlNlcnZpY2VMaXN0ID4gbGk6Zmlyc3QtY2hpbGQgewogICAgbWFyZ2luLWxlZnQ6IDhweDsKfQoKLm9vb1NlcnZpY2VCcmVhZGNydW1iV3JhcCB7CiAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIHdpZHRoOiAxMDAlOwp9Cgoub29vU2VydmljZUJyZWFkY3J1bWIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXgtd2lkdGg6IGNhbGMoIDkwJSAtIDEwMHB4ICk7Cn0KCi5vb29TZXJ2aWNlQnJlYWRjcnVtYkZpZWxkIHsKICAgIGhlaWdodDogNTBweDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKfQoKLm9vb1Njcm9sbExlZnQsIC5vb29TY3JvbGxSaWdodCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgZm9udC1mYW1pbHk6ICdvdG9ibycgIWltcG9ydGFudDsKICAgIHNwZWFrOiBub25lOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIGZvbnQtdmFyaWFudDogbm9ybWFsOwogICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgY3Vyc29yOiBwb2ludGVyOwp9Cgoub29vU2Nyb2xsTGVmdCB7CiAgICBjb250ZW50OiAiXGU5MDMiOwogICAgcGFkZGluZy1sZWZ0OiAzMnB4OwogICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgIHBhZGRpbmctdG9wOiAxM3B4Owp9Cgoub29vU2Nyb2xsUmlnaHQgewogICAgY29udGVudDogIlxlOTA0IjsKICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMycHg7CiAgICBwYWRkaW5nLXRvcDogMTNweDsKfQoKLm9vb0JyZWFkY3J1bWJTZXJ2aWNlTGlzdCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IG5vbmU7CiAgICBvcmRlcjogMDsKICAgIGZsZXgtZ3JvdzogMDsKfQoKLm9vb0JyZWFkY3J1bWJTZXJ2aWNlTGlzdCA+IGxpIHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiA4cHggMjRweDsKICAgIGdhcDogMTNweDsKICAgIHdpZHRoOiBhdXRvOwogICAgaGVpZ2h0OiA0MHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMjcsIDEyOCwgMTU3LCAwLjA4KTsKICAgIGJvcmRlci1yYWRpdXM6IDc2cHg7CiAgICBmbGV4OiBub25lOwogICAgb3JkZXI6IDE7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgZmxleC1ncm93OiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEzcHg7CiAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKfQoKLm9vb0JyZWFkY3J1bWJTZXJ2aWNlTGlzdCA+IGxpLm9vb1NlcnZpY2VJRFNlbGVjdGVkIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbE1haW5MaWdodCk7CiAgICBjb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7Cn0KCi5vb29TZXJ2aWNlUmVzdWx0IHsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIG1hcmdpbi1sZWZ0OiAxMHB4Owp9Cgoub29vU2VydmljZUJyZWFkY3J1bWJGaWVsZCAub29vZm8ub29vZm8tYXJyb3dfcjo6YmVmb3JlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouRGlhbG9nLm9vb1NlcnZpY2VDYXRhbG9nTW9kYWwgewogICAgbWluLWhlaWdodDogNzA0cHg7CiAgICBoZWlnaHQ6IDcwNHB4Owp9CgouRGlhbG9nLm9vb1NlcnZpY2VDYXRhbG9nTW9kYWw6bm90KDpsYXN0LWNoaWxkKSA+IC5IZWFkZXIsCi5EaWFsb2cub29vU2VydmljZUNhdGFsb2dNb2RhbDpub3QoOmxhc3QtY2hpbGQpID4gLkNvbnRlbnQgewogICAgZGlzcGxheTogbm9uZTsKfQoKLkRpYWxvZy5vb29TZXJ2aWNlQ2F0YWxvZ01vZGFsOm5vdCg6bGFzdC1jaGlsZCkgewogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKfQoKLkRpYWxvZy5vb29TZXJ2aWNlQ2F0YWxvZ01vZGFsOm50aC1sYXN0LWNoaWxkKDIpID4gLkhlYWRlciwKLkRpYWxvZy5vb29TZXJ2aWNlQ2F0YWxvZ01vZGFsOm50aC1sYXN0LWNoaWxkKDIpID4gLkNvbnRlbnQgewogICAgZGlzcGxheTogbm9uZTsKfQoKLkRpYWxvZy5vb29EZXRhaWxlZFZpZXcsIC5vb29EZXRhaWxlZFZpZXcgPiBkaXYgewogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKfQoKLkRpYWxvZy5vb29EZXRhaWxlZFZpZXcgPiAuSGVhZGVyIHsKICAgIHBhZGRpbmctdG9wOiAyNHB4OwogICAgd2lkdGg6IDcyMHB4Owp9Cgoub29vRGV0YWlsZWRWaWV3IC5vb29TZXJ2aWNlRmllbGRTZWFyY2ggewogICAgZGlzcGxheTogbm9uZTsKfQoKLm9vb0RldGFpbGVkVmlldyAub29vU2VydmljZUJyZWFkY3J1bWIgewogICAgd2lkdGg6IDEwMCU7CiAgICAvKiB3aWR0aDogY2FsYygxMDAlIC0gMTgwcHgpOyAqLwp9CgouRGlhbG9nLm9vb0RldGFpbGVkVmlldyA+IC5Db250ZW50IHsKICAgIHBhZGRpbmc6IDBweCAyNXB4Owp9Cgoub29vU2VydmljZVdyYXBwZXIgPiAub29vU3Vic2VydmljZXMgIHsKICAgIGNvbG9yOiAjMDAxYmZmOwogICAgY29sb3I6IHZhcigtLWNvbE1haW5MaWdodCk7CiAgICBtYXJnaW46IDAgMCA4cHggOHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9Cgoub29vU2VydmljZUNvbnRhaW5lciB7CiAgICBnYXA6IDE2cHggMTZweDsKICAgIG1hcmdpbjogOHB4OwogICAgZmxvYXQ6IGxlZnQ7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBpc29sYXRpb246IGlzb2xhdGU7CiAgICB3aWR0aDogMzE5cHg7CiAgICBoZWlnaHQ6IDI4MHB4OwogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7Cn0KCi5vb29TZXJ2aWNlQ29udGFpbmVyOmhvdmVyLCAub29vRGV0YWlsZWRUaWNrZXRUeXBlTGlzdCA+IGE6aG92ZXIgewogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNvbE1haW5MaWdodCk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBjb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKfQoKLm9vb1NlcnZpY2VDb250YWluZXI6aG92ZXIgLm9vb1NlcnZpY2VOYW1lIHsKICAgIGNvbG9yOiB2YXIoLS1jb2xNYWluTGlnaHQpOwp9CgovKiBTcGVjaWFsIHN0eWxpbmcgd2l0aGluIHN1YnNlcnZpY2UgbGlzdCBpbiBkZXRhaWxlZCB2aWV3ICovCi5vb29EZXRhaWxlZFN1YnNlcnZpY2VzID4gLm9vb1NlcnZpY2VDb250YWluZXIgLm9vb1NlcnZpY2VOYW1lLAoub29vRGV0YWlsZWRTdWJzZXJ2aWNlcyA+IC5vb29TZXJ2aWNlQ29udGFpbmVyIC5vb29TdWJzZXJ2aWNlcywKLm9vb0RldGFpbGVkU3Vic2VydmljZXMgPiAub29vU2VydmljZUNvbnRhaW5lciAub29vU2VydmljZUluZm9ybWF0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm9vb0RldGFpbGVkU3Vic2VydmljZXMgPiAub29vU2VydmljZUNvbnRhaW5lciwKLm9vb0RldGFpbGVkU3Vic2VydmljZXMgPiAub29vU2VydmljZUNvbnRhaW5lciA+IC5vb29EZXNjaXB0aW9uSGVhZGVyLAoub29vRGV0YWlsZWRTdWJzZXJ2aWNlcyA+IC5vb29TZXJ2aWNlQ29udGFpbmVyID4gLm9vb1NlcnZpY2VCb3R0b20gewogICAgd2lkdGg6IDMwMHB4Owp9Cgoub29vRGV0YWlsZWRTdWJzZXJ2aWNlcyA+IC5vb29TZXJ2aWNlQ29udGFpbmVyIHsKICAgIGhlaWdodDogMTYwcHg7CiAgICBnYXA6IDA7Cn0KCi5vb29EZXRhaWxlZFN1YnNlcnZpY2VzID4gLm9vb1NlcnZpY2VDb250YWluZXIgPiAub29vRGVzY2lwdGlvbkhlYWRlciB7CiAgICBoZWlnaHQ6IDA7Cn0KCi5vb29EZXRhaWxlZFN1YnNlcnZpY2VzID4gLm9vb1NlcnZpY2VDb250YWluZXIgPiAub29vRGVzY3JpcHRpb25Cb2R5ID4gLm9vb0Rlc2NyaXB0aW9uU2hvcnQgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm9vb1NlcnZpY2VDb250YWluZXIgPiAub29vRGVzY3JpcHRpb25Cb2R5ID4gLm9vb0tleXdvcmRzIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5vb29EZXRhaWxlZFN1YnNlcnZpY2VzID4gLm9vb1NlcnZpY2VDb250YWluZXIgLm9vb1NlcnZpY2VJbmZvcm1hdGlvbiB7CiAgICB3aWR0aDogMjMzcHg7CiAgICBmbGV4LWdyb3c6IDA7Cn0KCi5vb29EZXRhaWxlZFN1YnNlcnZpY2VzID4gLm9vb1NlcnZpY2VDb250YWluZXIgLm9vb1NlcnZpY2VBY3Rpb25FbnRyeSB7CiAgICBtYXgtd2lkdGg6IDI1NXB4Owp9Cgoub29vRGV0YWlsZWRTdWJzZXJ2aWNlcyA+IC5vb29TZXJ2aWNlQ29udGFpbmVyIC5vb29TZXJ2aWNlQWN0aW9ucyB7CiAgICBtYXgtaGVpZ2h0OiAxMThweDsKfQoKLm9vb0Rlc2NpcHRpb25IZWFkZXIgewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nOiAyNHB4OwogICAgaXNvbGF0aW9uOiBpc29sYXRlOwogICAgd2lkdGg6IDMxOXB4OwogICAgaGVpZ2h0OiA3MnB4OwogICAgYm9yZGVyOiAwcHggc29saWQgcmdiYSgxMjcsIDEyOCwgMTU3LCAwLjE2KTsKICAgIGZsZXg6IG5vbmU7CiAgICBvcmRlcjogMDsKICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICBmbGV4LWdyb3c6IDA7CiAgICB6LWluZGV4OiAyOwp9Cgoub29vRGVzY2lwdGlvbkhlYWRlciBpIHsKICAgIHBhZGRpbmc6IDVweDsKfQoKLm9vb1NlcnZpY2VOYW1lIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGZsZXgtZ3JvdzogMTsKfQoKLm9vb1NlcnZpY2VBY3Rpb25zIHsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDE1JTsKICAgIHRvcDogMjAlOwogICAgcGFkZGluZzogMTZweCAwcHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKICAgIGJveC1zaGFkb3c6IDBweCA2cHggMTJweCByZ2IoMCAwIDAgLyAxNiUpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGN1cnNvcjogaW5pdGlhbDsKICAgIG1heC1oZWlnaHQ6IDIzNHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKfQoKLm9vb1NlcnZpY2VBY3Rpb25FbnRyeSB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTRweCAyNHB4IDExcHg7CiAgICBnYXA6IDE2cHg7CiAgICB3aWR0aDogYXV0bzsKICAgIG1heC13aWR0aDogMjcwcHg7CiAgICBoZWlnaHQ6IDQxcHg7CiAgICBmbGV4OiBub25lOwogICAgb3JkZXI6IDE7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgZmxleC1ncm93OiAwOwp9Cgoub29vU2VydmljZUFjdGlvbkVudHJ5OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgY29sb3I6IHZhcigtLWNvbE1haW5MaWdodCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi8qIEFwcGx5IGJvcmRlci1ib3R0b20gdG8gdGhlIGxhc3QgZWxlbWVudCB3aXRoIHRoZSBjbGFzcyAub29vU2VydmljZUFjdGlvbkNyZWF0ZSBpbiB0aGUgbGlzdCAqLwoub29vU2VydmljZUFjdGlvblN1YnNlcnZpY2VzIHsKICAgIGJvcmRlci10b3A6IDAuNnB4IHNvbGlkICNFNUU1RUI7Cn0KCi5vb29EZXNjcmlwdGlvbkJvZHkgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgIGdhcDogNHB4OwogICAgZmxleDogbm9uZTsKICAgIG9yZGVyOiAxOwogICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgIGZsZXgtZ3JvdzogMTsKICAgIHotaW5kZXg6IDE7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKfQoKLm9vb1NlcnZpY2VCb3R0b20gewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgaGVpZ2h0OiA0OHB4OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMTI3LCAxMjgsIDE1NywgMC4xNik7CiAgICBmbGV4OiBub25lOwogICAgb3JkZXI6IDI7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgZmxleC1ncm93OiAwOwogICAgei1pbmRleDogMDsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwp9Cgoub29vU2VydmljZUluZm9ybWF0aW9uIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDBweDsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDI1N3B4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgZmxleDogbm9uZTsKICAgIG9yZGVyOiAwOwogICAgZmxleC1ncm93OiAxOwp9Cgoub29vU2VydmljZUJvdHRvbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xNYWluTGlnaHQpOwogICAgYm9yZGVyLXJhZGl1czogMCAwIDEwcHggMTBweDsKICAgIGNvbG9yOiAjZmZmZmZmOwp9Cgoub29vQ3JlYXRlIHsKICAgIGdyaWQtYXJlYTogMyAvIDIgLyA1IC8gMzsKfQoKLm9vb0NyZWF0ZSB7CiAgICBjb2xvcjogIzAwMWJmZjsKICAgIGNvbG9yOiB2YXIoLS1jb2xNYWluTGlnaHQpOwogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCAwIHJnYmEoNCwgMCwgNzEsIDAuMTYpOwogICAgYm94LXNoYWRvdzogMCAxcHggNHB4IDAgdmFyKC0tY29sU2hhZG93RGFyayk7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KCi5vb29DcmVhdGUgPiBpLCAub29vU2VydmljZUluZm9ybWF0aW9uID4gaSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogOHB4Owp9Cgoub29vU3Vic2VydmljZXMgewogICAgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE1MCU7Cn0KCi5vb29TdWJzZXJ2aWNlczpob3ZlciB7CiAgICBjb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKfQoKLm9vb0RldGFpbGVkTGVmdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogNzUwcHg7CiAgICBoZWlnaHQ6IDU5OXB4OwogICAgbGVmdDogNDRweDsKICAgIHRvcDogMTAwcHg7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KCi5vb29EZXRhaWxlZFJpZ2h0IHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBnYXA6IDE2cHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzk2cHg7CiAgICBoZWlnaHQ6IDcwNHB4OwogICAgcmlnaHQ6IDBweDsKICAgIGJvdHRvbTogMHB4Owp9Cgoub29vRGV0YWlsZWRTZXJ2aWNlTmFtZSB7CiAgICBsZWZ0OiA3cHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW46IDEwcHggMDsKfQoKLm9vb0RldGFpbGVkU2VydmljZU5hbWUgPiBwIHsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7Cn0KCi5vb29EZXRhaWxlZFNlcnZpY2VOYW1lID4gaDIgewogICAgZm9udC1zaXplOiAyNHB4Owp9Cgoub29vRGV0YWlsZWREZXNjcmlwdGlvbkxvbmcgPiAqIHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogNDUwcHg7CiAgICBtaW4taGVpZ2h0OiAzMDBweDsKfQoKLm9vb0RldGFpbGVkU3VidGl0bGUgewogICAgcGFkZGluZy1ib3R0b206IDhweDsKfQoKLm9vb1NMQUxhYmVsICsgKiB7CiAgICBwYWRkaW5nLXRvcDogOHB4Owp9Cgoub29vRGV0YWlsZWRBZGRpdGlvbmFsSW5mb3JtYXRpb24gPiBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiAxNXB4Owp9Cgoub29vRGV0YWlsZWRUaWNrZXRUeXBlTGlzdCB7CiAgICB3aWR0aDogMzY0cHg7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgZmxleDogbm9uZTsKICAgIG9yZGVyOiAwOwogICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgIGZsZXgtZ3JvdzogMTsKICAgIHotaW5kZXg6IDE7Cn0KCi5vb29EZXRhaWxlZFRpY2tldFR5cGVMaXN0ID4gYSB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWFyZ2luOiAzcHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTZweCAzMnB4OwogICAgZ2FwOiA4cHg7CiAgICB3aWR0aDogMTEwLjY3cHg7CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgdG9wOiAwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNywgMTI4LCAxNTcsIDAuMTYpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKfQoKLm9vb0RldGFpbGVkVGlja2V0VHlwZUxpc3QgPiBhOmhvdmVyID4gaSB7CiAgICBjb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKfQoKLm9vb0RldGFpbGVkVGlja2V0VHlwZUxpc3QgPiBhID4gc3BhbiB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTVweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm9vb0RldGFpbGVkVGlja2V0VHlwZUxpc3QgPiBhID4gaSB7CiAgICBjb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKfQoKLm9vb0RldGFpbGVkQWNjb3JkaW9uTGlzdCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgcGFkZGluZzogMTZweDsKICAgIHdpZHRoOiAzMjNweDsKICAgIGhlaWdodDogNTI0cHg7CiAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGZsZXg6IG5vbmU7CiAgICBvcmRlcjogMTsKICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICBmbGV4LWdyb3c6IDA7CiAgICB6LWluZGV4OiAwOwp9Cgoub29vRGV0YWlsZWRBY2NvcmRpb24gewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjN0Y4MDlEMDg7CiAgICBmbGV4OiBub25lOwogICAgb3JkZXI6IDE7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgZmxleC1ncm93OiAwOwogICAgbWFyZ2luOiAtMXB4IDBweDsKfQoKLm9vb0RldGFpbGVkQWNjb3JkaW9uIC5vb29EZXRhaWxlZEZBUSwgLm9vb0RldGFpbGVkQWNjb3JkaW9uIC5vb29EZXRhaWxlZFN1YnNlcnZpY2VzIHsKICAgIG1hcmdpbi1sZWZ0OiAtMjBweDsKfQoKLm9vb0RldGFpbGVkQWNjb3JkaW9uID4gLkhlYWRlciA+IC5XaWRnZXRBY3Rpb24gPiBhIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm9vb0RldGFpbGVkQWNjb3JkaW9uIGkub29vZm8tYXJyb3dfZCwgLm9vb0RldGFpbGVkQWNjb3JkaW9uIGkub29vZm8tYXJyb3dfdSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogOTBweDsKICAgIHRvcDogMjJweDsKICAgIGxlZnQ6IDI4MHB4OwogICAgbWFyZ2luLXRvcDogLTE5cHg7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyAvKiBmaXggdGhpcywgc2hvdWxkJ3QgYmUgbmVlZGVkICovCn0KCi5vb29EZXRhaWxlZEFjY29yZGlvbiBpLm9vb2ZvLWFycm93X2QgewogICAgY29sb3I6IHZhcigtLWNvbE1haW5MaWdodCk7Cn0KCi5vb29EZXRhaWxlZEFjY29yZGlvbiBoMyB7CiAgICBsaW5lLWhlaWdodDogMjBweDsKfQoKLm9vb0RldGFpbGVkQWNjb3JkaW9uLkNvbGxhcHNlZCBpLm9vb2ZvLWFycm93X2QgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm9vb0RldGFpbGVkQWNjb3JkaW9uLkV4cGFuZGVkIGkub29vZm8tYXJyb3dfdSB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgoub29vRGV0YWlsZWRBY2NvcmRpb24uRXhwYW5kZWQgaDMsIC5vb29EZXRhaWxlZEFjY29yZGlvbiAuV2lkZ2V0QWN0aW9uID4gYTpob3ZlciB7CiAgICBjb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKfQoKLm9vb0RldGFpbGVkQWNjb3JkaW9uIC5XaWRnZXRBY3Rpb24gPiBhOmhvdmVyID4gLm9vb051bWJlck9mRW50cmllcyB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xNYWluTGlnaHQpOwp9Cgoub29vRGV0YWlsZWRBY2NvcmRpb25DYXB0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBkaXNwbGF5OiBmbGV4Owp9Cgoub29vRGV0YWlsZWRBY2NvcmRpb24gPiAuQ29udGVudCB7CiAgICBwYWRkaW5nOiAyNXB4IDBweCAwcHg7Cn0KCi5vb29EZXRhaWxlZEFjY29yZGlvbiAub29vTnVtYmVyT2ZFbnRyaWVzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMHB4OwogICAgZ2FwOiA4cHg7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7CiAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgbWFyZ2luLXRvcDogMnB4Owp9Cgoub29vRGV0YWlsZWRBY2NvcmRpb24uRXhwYW5kZWQgLm9vb051bWJlck9mRW50cmllcyB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xNYWluTGlnaHQpOwp9Cgoub29vRGV0YWlsZWRBY2NvcmRpb24gLm9vb051bWJlck9mRW50cmllcyA+IHNwYW4gewogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgbGluZS1oZWlnaHQ6IDExcHg7CiAgICBjb2xvcjogI2ZmZmZmZjsKfQoKLm9vb0RldGFpbGVkRkFRID4gYTpob3ZlciB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5vb29EZXRhaWxlZEZBUUl0ZW0gewogICAgd2lkdGg6IDI4OHB4OwogICAgbGluZS1oZWlnaHQ6IDE1MCU7CiAgICBwYWRkaW5nOiAxM3B4IDBweCAyMHB4IDIwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5vb29EZXRhaWxlZEZBUUl0ZW06aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgxMjcsIDEyOCwgMTU3LCAwLjA0KTsKICAgIGJvcmRlcjogMHB4IHNvbGlkIHJnYmEoMTI3LCAxMjgsIDE1NywgMC4xNik7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4Owp9Cgoub29vRGV0YWlsZWRGQVEgPiBhOmhvdmVyID4gLm9vb0RldGFpbGVkRkFRSXRlbSA+IC5vb29GQVFEZXRhaWxzSGludCB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDI3cHg7CiAgICB0b3A6IGNhbGMoNTAlIC0gMjdweC8yICsgMC41cHgpOwogICAgY29sb3I6IHZhcigtLWNvbE1haW5MaWdodCk7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5vb29EZXRhaWxlZEZBUSA+IGE6aG92ZXIgPiAub29vRGV0YWlsZWRGQVFJdGVtID4gLm9vb0ZBUURlc2NyaXB0aW9uIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdmFyKC0tY29sVGV4dERhcmspIDAlLCB0cmFuc3BhcmVudCk7CiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLm9vb0ZBUURlc2NyaXB0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLyogVE9ETzogQ291bGQvU2hvdWxkIGJlIHRyYW5zZmVyZWQgdG8gb3RoZXIgQ1NTIGNsYXNzZXMgKi8KLyogTW9kYWwgKi8KI092ZXJsYXkgewogICAgdG9wOiAwcHg7Cn0KCi5vb29IaWRkZW4gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Cgoub29vQ29sb3ItUmVkIHsKICAgIGNvbG9yOiByZWQ7Cn0KCi5vb29Db2xvci1HcmVlbiB7CiAgICBjb2xvcjogZ3JlZW47Cn0KCi5vb29Db2xvci1CbHVlIHsKICAgIGNvbG9yOiBibHVlOwp9Cgoub29vQ29sb3ItWWVsbG93IHsKICAgIGNvbG9yOiB5ZWxsb3c7Cn0KCi5vb29mby1iYW5nOjpiZWZvcmUgewogICAgY29udGVudDogJyEnOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5EaWFsb2cgewogICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDUwcHgpOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICB3aWR0aDogOTUlOwogICAgbWF4LXdpZHRoOiAxMjEycHg7Cn0KCi5EaWFsb2cub29vU2VydmljZUNhdGFsb2dNb2RhbCA+IC5Db250ZW50IHsKICAgIHBhZGRpbmc6IDIwcHggNDhweCAxNnB4IDEwMHB4Owp9CgouRGlhbG9nID4gLkhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgcGFkZGluZzogMTZweCAwcHggMHB4IDEwMHB4Owp9CgouRGlhbG9nID4gLkhlYWRlciAuQ2xvc2UgewogICAgbGVmdDogNTZweDsKICAgIHRvcDogNDZweDsKfQoKLkRpYWxvZyA+IC5IZWFkZXIgLm9vb2ZvIHsKICAgIHRvcDogNXB4OwogICAgZm9udC1zaXplOiAxNnB4Owp9CgouRGlhbG9nOm5vdCgub29vRGV0YWlsZWRWaWV3KSA+IC5IZWFkZXIgLm9vb2ZvIHsKICAgIHRvcDogNDBweDsKfQoKLkRpYWxvZyA+IC5IZWFkZXIgI1NlcnZpY2VJRF9TZWFyY2ggewogICAgd2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yYWRpdXM6IDMwcHggMnB4IDJweCAzMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIGJveC1zaGFkb3c6IDBweCAyOXB4IDQ5cHggOHB4IHJnYigwIDAgMCAvIDQlKTsKfQoKLkRpYWxvZyA+IC5IZWFkZXIgI1NlcnZpY2VJRF9TZWFyY2g6aG92ZXIsIC5EaWFsb2cgPiAuSGVhZGVyIC5JbnB1dEZpZWxkX1NlbGVjdGlvbjpob3ZlciB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5EaWFsb2cgPiAuSGVhZGVyIC5vb29TZXJ2aWNlRmllbGRTZWFyY2ggPiBpbnB1dCB7CiAgICBib3JkZXItcmFkaXVzOiAzMHB4OwogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIGhlaWdodDogNjBweDsKICAgIHBhZGRpbmctbGVmdDogNDBweDsKfQoKLkRpYWxvZyA+IC5IZWFkZXIgI1NlcnZpY2VJRF9TZWFyY2g6YmVmb3JlIHsKICAgIGZvbnQtZmFtaWx5OiBGb250QXdlc29tZTsKICAgIGNvbnRlbnQ6ICJcZjAwMiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDNweDsKICAgIHJpZ2h0OiA1cHg7CiAgICB3aWR0aDogMTVweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogNTsKICAgIGNvbG9yOiAjMjc0MTRmOwp9CgouRGlhbG9nID4gLkhlYWRlciAjU2VydmljZUlEX1NlYXJjaCArIC5JbnB1dEZpZWxkX1NlbGVjdGlvbiB7CiAgICBwYWRkaW5nOiAwOwogICAgd2lkdGg6IDE1MHB4OwogICAgbGVmdDogMjVweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5EaWFsb2cgPiAuSGVhZGVyICNTZXJ2aWNlSURfU2VhcmNoICsgLklucHV0RmllbGRfU2VsZWN0aW9uOmJlZm9yZSB7CiAgICBjb250ZW50OiAiXGU5MDIiOwogICAgZm9udC1mYW1pbHk6ICdvdG9ibyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDdweDsKICAgIHJpZ2h0OiAtNTBweDsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwp9CgouRGlhbG9nID4gLkhlYWRlciAjU2VydmljZUlEX1NlYXJjaCA+IGRpdiB7CiAgICBjb250ZW50OiAiXGU5MDIiOwogICAgZm9udC1mYW1pbHk6ICdvdG9ibyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogLTUwcHg7Cn0KCi5EaWFsb2cgPiAuSGVhZGVyIC5JbnB1dEZpZWxkX1NlbGVjdGlvbiAuUmVtb3ZlIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5EaWFsb2cgPiAuSGVhZGVyIC5JbnB1dEZpZWxkX1NlbGVjdGlvbiAuVGV4dCB7CiAgICB3aWR0aDogMjMwcHg7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgaGVpZ2h0OiA0NXB4Owp9CgouRGlhbG9nID4gLkhlYWRlciAuSW5wdXRGaWVsZF9Db250YWluZXIgPiAuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciA+IC5Gb2N1c0ZpZWxkLCAuRGlhbG9nID4gLkhlYWRlciAuSW5wdXRGaWVsZF9Db250YWluZXIgPiAuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciBpLmZhLXRpbWVzLWNpcmNsZSB7CiAgICBkaXNwbGF5OiBub25lOwp9CgouRGlhbG9nICsgLklucHV0RmllbGRfTGlzdENvbnRhaW5lciB7CiAgICB6LWluZGV4OiA5OTk5OTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLXRvcDogMTFweDsKfQoKLkRpYWxvZyArIC5JbnB1dEZpZWxkX0xpc3RDb250YWluZXIgLklucHV0RmllbGRfVHJlZUNvbnRhaW5lciB7CiAgICBtYXJnaW46IDA7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4Owp9CgouRGlhbG9nICsgLklucHV0RmllbGRfTGlzdENvbnRhaW5lciAuSW5wdXRGaWVsZF9UcmVlQ29udGFpbmVyIC5qc3RyZWUtbm9kZTpub3QoOmxhc3QtY2hpbGQpIHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0xpZ2h0KTsKfQoKLkRpYWxvZyArIC5JbnB1dEZpZWxkX0xpc3RDb250YWluZXIgLklucHV0RmllbGRfVHJlZUNvbnRhaW5lciBhLmpzdHJlZS1hbmNob3IgewogICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7Cn0KCi5EaWFsb2cgKyAuSW5wdXRGaWVsZF9MaXN0Q29udGFpbmVyIC5JbnB1dEZpZWxkX1RyZWVDb250YWluZXIgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtd2hvbGVyb3ctdWwgLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwp9CgouRGlhbG9nICsgLklucHV0RmllbGRfTGlzdENvbnRhaW5lciA+IC5vb29DbG9zZSB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgoub29vU2VydmljZUZpZWxkLCAub29vU2VydmljZUZpZWxkU2VhcmNoIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IGF1dG87CiAgICBoZWlnaHQ6IDU4cHg7CiAgICBsZWZ0OiAwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4Owp9Cgoub29vU2VydmljZUZpZWxkU2VhcmNoID4gaW5wdXQgewogICAgd2lkdGg6IDkwJTsKfQoKLm9vb1NlcnZpY2VGaWVsZFNlYXJjaDphZnRlciB7CiAgICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7CiAgICBjb250ZW50OiAiXGYwMDIiOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcmlnaHQ6IDUwcHg7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIGN1cnNvcjogdGV4dDsKfQoKI29vb0RldGFpbGVkVG9nZ2xlU2lkZWJhciB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBUT0RPOiBUaGlzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgb3RvYm8uc3ZnICovCi5vb29mby1sb3VwZTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGhlaWdodD0nNDgnIHdpZHRoPSc0OCclM0UlM0NwYXRoIGQ9J00yNCAzNC4xcS42NSAwIDEuMDc1LS40MjUuNDI1LS40MjUuNDI1LTEuMDc1di02LjloNi45cS42NSAwIDEuMDc1LS40MjUuNDI1LS40MjUuNDI1LTEuMDc1IDAtLjY1LS40MjUtMS4wNzUtLjQyNS0uNDI1LTEuMDc1LS40MjVoLTYuOXYtNi45cTAtLjY1LS40MjUtMS4wNzVRMjQuNjUgMTQuMyAyNCAxNC4zcS0uNjUgMC0xLjA3NS40MjUtLjQyNS40MjUtLjQyNSAxLjA3NXY2LjloLTYuOXEtLjY1IDAtMS4wNzUuNDI1LS40MjUuNDI1LS40MjUgMS4wNzUgMCAuNjUuNDI1IDEuMDc1LjQyNS40MjUgMS4wNzUuNDI1aDYuOXY2LjlxMCAuNjUuNDI1IDEuMDc1LjQyNS40MjUgMS4wNzUuNDI1Wm0wIDkuOXEtNC4xNSAwLTcuOC0xLjU3NS0zLjY1LTEuNTc1LTYuMzUtNC4yNzUtMi43LTIuNy00LjI3NS02LjM1UTQgMjguMTUgNCAyNHQxLjU3NS03LjhRNy4xNSAxMi41NSA5Ljg1IDkuODVxMi43LTIuNyA2LjM1LTQuMjc1UTE5Ljg1IDQgMjQgNHQ3LjggMS41NzVxMy42NSAxLjU3NSA2LjM1IDQuMjc1IDIuNyAyLjcgNC4yNzUgNi4zNVE0NCAxOS44NSA0NCAyNHYxNS45cTAgMS43LTEuMiAyLjlUMzkuOSA0NFptMC0zcTcuMSAwIDEyLjA1LTQuOTVRNDEgMzEuMSA0MSAyNHEwLTcuMS00Ljk1LTEyLjA1UTMxLjEgNyAyNCA3cS03LjEgMC0xMi4wNSA0Ljk1UTcgMTYuOSA3IDI0cTAgNy4xIDQuOTUgMTIuMDVRMTYuOSA0MSAyNCA0MVptMC0xNi44WicvJTNFJTNDL3N2ZyUzRSIpOwogICAgem9vbTogMC4zOwp9Cgoub29vZm8tc3Vic2NyaXB0aW9uOjpiZWZvcmUgewogICAgY29udGVudDogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgaGVpZ2h0PSc0OCcgd2lkdGg9JzQ4JyUzRSUzQ3BhdGggZD0nTTE1LjUgN3EtLjY1IDAtMS4wNzUtLjQyNVExNCA2LjE1IDE0IDUuNXEwLS42NS40MjUtMS4wNzVRMTQuODUgNCAxNS41IDRoMTdxLjY1IDAgMS4wNzUuNDI1UTM0IDQuODUgMzQgNS41cTAgLjY1LS40MjUgMS4wNzVRMzMuMTUgNyAzMi41IDdabS02LjU1IDZxLS42NSAwLTEuMDc1LS40MjUtLjQyNS0uNDI1LS40MjUtMS4wNzUgMC0uNjUuNDI1LTEuMDc1UTguMyAxMCA4Ljk1IDEwaDMwLjFxLjY1IDAgMS4wNzUuNDI1LjQyNS40MjUuNDI1IDEuMDc1IDAgLjY1LS40MjUgMS4wNzVRMzkuNyAxMyAzOS4wNSAxM1pNNyA0NHEtMS4yIDAtMi4xLS45UTQgNDIuMiA0IDQxVjE5cTAtMS4yLjktMi4xLjktLjkgMi4xLS45aDM0cTEuMiAwIDIuMS45LjkuOS45IDIuMXYyMnEwIDEuMi0uOSAyLjEtLjkuOS0yLjEuOVptMC0zaDM0VjE5SDd2MjJabTE1LjctNS4xNSA2Ljg1LTQuNnEuNy0uNDUuNy0xLjI1dC0uNy0xLjI1bC02Ljg1LTQuNnEtLjc1LS41NS0xLjU1LS4xLS44LjQ1LS44IDEuMzV2OS4yNXEwIC45LjggMS4zdDEuNTUtLjFaTTcgMTl2MjItMjJaJy8lM0UlM0Mvc3ZnJTNFIik7CiAgICB6b29tOiAwLjM7Cn0KCi5vb29UaWxlX1NlcnZpY2VDYXRhbG9nIHsKICAgIHBhZGRpbmc6IDI0cHggMzJweDsKfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA4ODBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgewoKICAgIC5vb29TZXJ2aWNlQnJlYWRjcnVtYiB7CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwMHB4KTsKICAgIH0KCiAgICAub29vU2Nyb2xsTGVmdCB7CiAgICAgICAgbGVmdDogMTE0cHg7CiAgICB9CgogICAgLm9vb1BhcmVudFNlcnZpY2VMaXN0IHsKICAgICAgICBtYXgtd2lkdGg6IDg2NHB4OwogICAgfQp9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogODc5cHgpIHsKCiAgICAub29vUGFyZW50U2VydmljZUxpc3QgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIC8qIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogNDIwcHg7ICovCiAgICAgICAgaGVpZ2h0OiAxMjhweDsKICAgICAgICBvdmVyZmxvdy14OiBzY3JvbGw7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgICBvcmRlcjogMTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAub29vUGFyZW50U2VydmljZUxpc3QgPiBsaSB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICB3aWR0aDogMjc0Ljc1cHg7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgICBvcmRlcjogMDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgIH0KCiAgICAub29vU2VydmljZUJyZWFkY3J1bWJGaWVsZCB7CiAgICAgICAgd2lkdGg6IDUzMHB4OwogICAgfQoKICAgIC5vb29TY3JvbGxMZWZ0IHsKICAgICAgICBsZWZ0OiAxMTRweDsKICAgIH0KfQoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIHsKICAgIC5EaWFsb2c6bm90KC5vb29EZXRhaWxlZFZpZXcpID4gLkhlYWRlciAub29vZm8gewogICAgICAgIHRvcDogNXB4OwogICAgfQoKICAgIC5vb29TZXJ2aWNlQnJlYWRjcnVtYldyYXAgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgfQoKICAgIC5vb29EZXRhaWxlZFZpZXcgLm9vb1NlcnZpY2VCcmVhZGNydW1iV3JhcCB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgLm9vb1BhcmVudFNlcnZpY2VMaXN0IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICAvKiB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDQyMHB4OyAqLwogICAgICAgIGhlaWdodDogMTI4cHg7CiAgICAgICAgb3ZlcmZsb3cteDogc2Nyb2xsOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgb3JkZXI6IDE7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIHotaW5kZXg6IDA7CiAgICB9CgogICAgLm9vb0JyZWFkY3J1bWJTZXJ2aWNlTGlzdCB7CiAgICAgICAgbWF4LXdpZHRoOiAzMjBweDsKICAgIH0KCiAgICAub29vUGFyZW50U2VydmljZUxpc3QgPiBsaSB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICB3aWR0aDogMjc0Ljc1cHg7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgICBvcmRlcjogMDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgIH0KCiAgICAub29vU2VydmljZUJyZWFkY3J1bWIgewogICAgICAgIGxlZnQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDEwMCUKICAgICAgICAvKiBtYXgtd2lkdGg6IDMyMHB4OyAqLwogICAgfQoKICAgIC5vb29TZXJ2aWNlUmVzdWx0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5vb29TZXJ2aWNlQ29udGFpbmVyOmhvdmVyLCAub29vRGV0YWlsZWRUaWNrZXRUeXBlTGlzdCA+IGE6aG92ZXIgewogICAgICAgIC8qIHdpZHRoOiAxMDAlOyAqLwogICAgICAgIGxlZnQ6IDAgIWltcG9ydGFudDsKICAgICAgICB0b3A6IDUwcHggIWltcG9ydGFudDsKICAgIH0KCiAgICAub29vRGV0YWlsZWREZXNjcmlwdGlvbkxvbmcgPiAqIHsKICAgICAgICB3aWR0aDogODB2dzsKICAgIH0KCiAgICAuRGlhbG9nIHsKICAgICAgICBsZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgdG9wOiA1MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgYm90dG9tOiAwOwogICAgfQoKICAgIC5EaWFsb2cub29vU2VydmljZUNhdGFsb2dNb2RhbCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgfQoKICAgIC5EaWFsb2cub29vU2VydmljZUNhdGFsb2dNb2RhbCA+IC5Db250ZW50IHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDQ4cHggMTZweCA1MHB4OwogICAgfQoKICAgIC5EaWFsb2cgPiAuSGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuRGlhbG9nID4gLkhlYWRlciAuQ2xvc2UgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuRGlhbG9nID4gLkhlYWRlciAub29vZm8gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogNHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjRTVFNUVCOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgIH0KCiAgICAuRGlhbG9nID4gLkhlYWRlciAuQ2xvc2UgLm9vb2ZvLWNsb3NlOmJlZm9yZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuRGlhbG9nID4gLkhlYWRlciAub29vU2VydmljZUZpZWxkU2VhcmNoID4gaW5wdXQgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxMjcsIDEyOCwgMTU3LCAwLjE2KTsKICAgIH0KCiAgICAub29vU2VydmljZUZpZWxkU2VhcmNoOmFmdGVyIHsKICAgICAgICByaWdodDogMTAwcHg7CiAgICB9CgogICAgLm9vb1NlcnZpY2VGaWVsZFNlYXJjaCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBoZWlnaHQ6IDg4cHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIH0KCiAgICAuRGlhbG9nLm9vb0RldGFpbGVkVmlldyA+IC5IZWFkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5vb29UaWxlX1NlcnZpY2VDYXRhbG9nID4gaDIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CgogICAgLm9vb0RldGFpbGVkUmlnaHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGluaXRpYWw7CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDI1cHgpOwogICAgfQoKICAgICNvb29EZXRhaWxlZFRvZ2dsZVNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgICNvb29EZXRhaWxlZFRvZ2dsZVNpZGViYXIgPiBidXR0b24gewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBib3R0b206IDMycHg7CiAgICAgICAgcmlnaHQ6IDE2cHg7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgei1pbmRleDogNjAwOwogICAgICAgIGJveC1zaGFkb3c6IDAgMTJweCAxNnB4IDAgcmdiKDAgMjcgMjU1IC8gMjQlKTsKICAgICAgICBib3gtc2hhZG93OiAwIDEycHggMTZweCAwIHZhbCgtLWNvbFNoYWRvd01haW4pOwogICAgfQoKICAgIC5vb29EZXRhaWxlZFRpY2tldFR5cGVMaXN0LCAub29vRGV0YWlsZWRBY2NvcmRpb25MaXN0IHsKICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgfQp9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQzNXB4KSB7CgogICAgLm9vb1BhcmVudFNlcnZpY2VMaXN0IHsKICAgICAgICBtYXgtd2lkdGg6IDM2MHB4OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgIH0KCiAgICAub29vRGV0YWlsZWRMZWZ0IHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICB9CgogICAgLm9vb0RldGFpbGVkUmlnaHQgewogICAgICAgIHdpZHRoOiAzNzVweDsKICAgIH0KCiAgICAuRGlhbG9nLm9vb1NlcnZpY2VDYXRhbG9nTW9kYWwgPiAuQ29udGVudCB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4OwogICAgfQp9Cg==</File>
        <File Location="var/httpd/htdocs/common/fonts/otobo.svg" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9Im90b2JvIiBob3Jpei1hZHYteD0iMTAyNCI+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMDI0IiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTY0IiAvPgo8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iMTAyNCIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwOyIgaG9yaXotYWR2LXg9IjUxMiIgZD0iIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMDsiIGdseXBoLW5hbWU9ImFkZCIgZD0iTTg0Ni4zNiAzOTIuMjY1aC0yNzguNjI2di0yNzguNjI2Yy0wLjY1My0zMC4yNzYtMjUuMzUxLTU0LjU2OS01NS43MjMtNTQuNTY5cy01NS4wNjkgMjQuMjkzLTU1LjcyMiA1NC41MDhsLTAuMDAxIDAuMDYxdjI3OC42MjZoLTI3OC42NWMtMC4zNDctMC4wMDgtMC43NTYtMC4wMTItMS4xNjYtMC4wMTItMzAuNzgyIDAtNTUuNzM1IDI0Ljk1My01NS43MzUgNTUuNzM1czI0Ljk1MyA1NS43MzUgNTUuNzM1IDU1LjczNWMwLjQxIDAgMC44MTktMC4wMDQgMS4yMjYtMC4wMTNsLTAuMDYxIDAuMDAxaDI3OC42MjZ2Mjc4LjY1Yy0wLjAwOCAwLjM0Ny0wLjAxMiAwLjc1Ni0wLjAxMiAxLjE2NiAwIDMwLjc4MiAyNC45NTMgNTUuNzM1IDU1LjczNSA1NS43MzVzNTUuNzM1LTI0Ljk1MyA1NS43MzUtNTUuNzM1YzAtMC40MS0wLjAwNC0wLjgxOS0wLjAxMy0xLjIyNmwwLjAwMSAwLjA2MXYtMjc4LjYyNmgyNzguNjVjMzAuMjc2LTAuNjUzIDU0LjU2OS0yNS4zNTEgNTQuNTY5LTU1LjcyM3MtMjQuMjkzLTU1LjA2OS01NC41MDgtNTUuNzIybC0wLjA2MS0wLjAwMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZ2x5cGgtbmFtZT0iYXJjaGl2ZSIgZD0iTTg3Ni4zOCA3MzYuODVsLTU5LjM5MiA3MS42OGMtMTEuNDQ0IDE0LjM1NC0yOC45MjggMjMuNDcyLTQ4LjU0MiAyMy40NzItMC4xNTcgMC0wLjMxMy0wLjAwMS0wLjQ3LTAuMDAyaC01MTEuOTc2Yy0wLjA2MyAwLTAuMTM3IDAtMC4yMTIgMC0xOS44NDEgMC0zNy41NTYtOS4xMDEtNDkuMTk4LTIzLjM1NmwtMC4wOTAtMC4xMTQtNTguODgtNzEuNjhjLTEyLjIwMy0xNC40MjctMTkuNjIxLTMzLjI0MS0xOS42MjEtNTMuNzg4IDAtMC4xNDEgMC0wLjI4MiAwLjAwMS0wLjQyM3YwLjAyMi01MzMuMzJjMC4xMzktNDcuMDc2IDM4LjI2NC04NS4yMDEgODUuMzI3LTg1LjM0aDU5Ny4zMzNjNDcuMDc2IDAuMTM5IDg1LjIwMSAzOC4yNjQgODUuMzQgODUuMzI3djUzMy4zMzNjMC4wMDEgMC4xMTkgMC4wMDEgMC4yNjEgMC4wMDEgMC40MDIgMCAyMC41NDctNy40MTggMzkuMzYyLTE5LjcyMiA1My45MTFsMC4xMDEtMC4xMjN6TTQ5Ny4wNzAgMjI4LjI3bC0yMTkuNzMgMjE5LjczaDE0OS4zNHY4NS4zNGgxNzAuNjZ2LTg1LjM0aDE0OS4zNGwtMjE5Ljc1LTIxOS43M2MtMy44NS0zLjc1OC05LjExOS02LjA3Ni0xNC45My02LjA3NnMtMTEuMDgwIDIuMzE4LTE0LjkzNCA2LjA4MGwwLjAwNC0wLjAwNHpNMjE4LjQ2IDc0Ni42NmwzNC40NjggNDIuNjhoNTEybDQwLjEtNDIuNjZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMjsiIGdseXBoLW5hbWU9ImFycm93X2QiIGQ9Ik0xMjcuNTcgNjQ1LjEyYy05LjcwNC05LjY0Ny0xNS43MDktMjMuMDA1LTE1LjcwOS0zNy43NjVzNi4wMDYtMjguMTE4IDE1LjcwNy0zNy43NjNsMzU0LjU1My0zNTQuNTUzYzcuNjkzLTcuNzA2IDE4LjMyNy0xMi40NzIgMzAuMDc1LTEyLjQ3MnMyMi4zODIgNC43NjcgMzAuMDc0IDEyLjQ3MmwzNTQuNTcxIDM1NC41NTFjOS42NjcgOS42NjQgMTUuNjQ2IDIzLjAxNiAxNS42NDYgMzcuNzY1IDAgMjkuNDkyLTIzLjkwOCA1My40MDEtNTMuNDAxIDUzLjQwMS0xNC43NDQgMC0yOC4wOTItNS45NzUtMzcuNzU1LTE1LjYzNmwtMzA5LjI0OC0zMDguOS0zMDkuMjQ4IDMwOS4yNDhjLTkuNjE2IDkuNTIxLTIyLjg1IDE1LjQwMy0zNy40NTggMTUuNDAzLTE0Ljc4MSAwLTI4LjE1NS02LjAyMi0zNy44MDMtMTUuNzQ3bC0wLjAwMy0wLjAwM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAzOyIgZ2x5cGgtbmFtZT0iYXJyb3dfbCIgZD0iTTcwOS4xMiA4MzIuNDNjLTkuNjQ2IDkuNjk4LTIzIDE1LjY5OS0zNy43NTUgMTUuNjk5cy0yOC4xMDktNi4wMDItMzcuNzUzLTE1LjY5N2wtMzU0LjU3Mi0zNTQuNTUyYy03LjcxMi03LjY5NC0xMi40ODMtMTguMzMyLTEyLjQ4My0zMC4wODVzNC43NzEtMjIuMzkxIDEyLjQ4Mi0zMC4wODRsMzU0LjU1MS0zNTQuNTcxYzkuNjY0LTkuNjY3IDIzLjAxNi0xNS42NDYgMzcuNzY1LTE1LjY0NiAyOS40OTIgMCA1My40MDEgMjMuOTA4IDUzLjQwMSA1My40MDEgMCAxNC43NDQtNS45NzUgMjguMDkyLTE1LjYzNiAzNy43NTVsLTMwOC45IDMwOS4yNDggMzA5LjI0OCAzMDkuMjQ4YzkuNTI3IDkuNjE3IDE1LjQxMyAyMi44NTUgMTUuNDEzIDM3LjQ2OCAwIDE0Ljc4Ni02LjAyNyAyOC4xNjQtMTUuNzU3IDM3LjgxM2wtMC4wMDQgMC4wMDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNDsiIGdseXBoLW5hbWU9ImFycm93X3IiIGQ9Ik0zMTQuODggODMyLjQzYzkuNjQ2IDkuNjk4IDIzIDE1LjY5OSAzNy43NTUgMTUuNjk5czI4LjEwOS02LjAwMiAzNy43NTMtMTUuNjk3bDM1NC41NzItMzU0LjU1MmM3LjcxMi03LjY5NCAxMi40ODMtMTguMzMyIDEyLjQ4My0zMC4wODVzLTQuNzcxLTIyLjM5MS0xMi40ODItMzAuMDg0bC0zNTQuNjMzLTM1NC41NzFjLTkuNjYyLTkuNjYyLTIzLjAxMS0xNS42MzktMzcuNzU1LTE1LjYzOS0yOS40ODggMC01My4zOTMgMjMuOTA1LTUzLjM5MyA1My4zOTMgMCAxNC43NDQgNS45NzYgMjguMDkzIDE1LjYzOSAzNy43NTV2MGwzMDguOTgyIDMwOS4zNS0zMDkuMjQ4IDMwOS4yNDhjLTkuNTAyIDkuNjEzLTE1LjM3MiAyMi44MzQtMTUuMzcyIDM3LjQyNyAwIDE0Ljc1NSA2LjAwMiAyOC4xMDkgMTUuNjk3IDM3Ljc1M2wwLjAwMiAwLjAwMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA1OyIgZ2x5cGgtbmFtZT0iYXJyb3dfcjIiIGQ9Ik00MTcuMDU1IDE5Ny44MzhjLTguNTA3IDguNTAzLTEzLjc2OSAyMC4yNTEtMTMuNzY5IDMzLjIyOXM1LjI2MiAyNC43MjYgMTMuNzY4IDMzLjIyOWwxNTAuMjQxIDE1MC4yaC01MTkuOTY3Yy0wLjg3NS0wLjA2MS0xLjg5Ni0wLjA5Ni0yLjkyNS0wLjA5Ni0yMy40NDIgMC00Mi42NTIgMTguMTE2LTQ0LjM5NSA0MS4xMTFsLTAuMDA5IDAuMTVjMS43NzQgMjMuMTQ4IDIwLjk5MyA0MS4yNTggNDQuNDQyIDQxLjI1OCAxLjAxNiAwIDIuMDI0LTAuMDM0IDMuMDIzLTAuMTAxbC0wLjEzNSAwLjAwN2g1MDIuOTg5bC0xMzMuMjYzIDEzMy4yNDNjLTguNDA5IDguNjM1LTEzLjU5NSAyMC40NDQtMTMuNTk1IDMzLjQ2NHM1LjE4NiAyNC44MyAxMy42MDUgMzMuNDc1bC0wLjAxMC0wLjAxMWM4LjQ5NCA4LjUyNyAyMC4yNDUgMTMuODAzIDMzLjIyOSAxMy44MDNzMjQuNzM1LTUuMjc2IDMzLjIyNy0xMy44MDFsMjE2LjM1Mi0yMTYuMzUyYzguNTA3LTguNTAzIDEzLjc2OS0yMC4yNTEgMTMuNzY5LTMzLjIyOXMtNS4yNjItMjQuNzI2LTEzLjc2OC0zMy4yMjlsLTIxNi4zNzEtMjE2LjM1MWMtOC41MDMtOC41MDctMjAuMjUxLTEzLjc2OS0zMy4yMjktMTMuNzY5cy0yNC43MjYgNS4yNjItMzMuMjI5IDEzLjc2OHYwek03MjcuNDA5IDYzMC4wMjdsMTgyLjg4Ni0xODIuODg2LTE4Mi44ODYtMTgyLjg4NmMtOS4wMjktOC41ODItMTQuNjQ2LTIwLjY4MS0xNC42NDYtMzQuMDkyIDAtMjUuOTU4IDIxLjA0My00Ny4wMDIgNDcuMDAyLTQ3LjAwMiAxMy40MTYgMCAyNS41MTkgNS42MjEgMzQuMDgzIDE0LjYzNmwwLjAxOSAwLjAyMCAyMTYuMzUxIDIxNi4zNTFjOC41MTcgOC40OTggMTMuNzg2IDIwLjI0OCAxMy43ODYgMzMuMjI5cy01LjI2OSAyNC43MzEtMTMuNzg1IDMzLjIyOGwtMjE2LjM1MiAyMTYuMzMxYy04LjQ5OCA4LjUxNy0yMC4yNDggMTMuNzg2LTMzLjIyOSAxMy43ODZzLTI0LjczMS01LjI2OS0zMy4yMjgtMTMuNzg1bC0wLjAwMS0wLjAwMWMtOC40MTgtOC42My0xMy42MTEtMjAuNDQxLTEzLjYxMS0zMy40NjRzNS4xOTMtMjQuODM0IDEzLjYyMS0zMy40NzRsLTAuMDEwIDAuMDEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDY7IiBnbHlwaC1uYW1lPSJhcnJvd191IiBkPSJNMTI3LjU3IDI1MC44OGMtOS42OTggOS42NDYtMTUuNjk5IDIzLTE1LjY5OSAzNy43NTVzNi4wMDIgMjguMTA5IDE1LjY5NyAzNy43NTNsMzU0LjU1MiAzNTQuNTcyYzcuNjk0IDcuNzEyIDE4LjMzMiAxMi40ODMgMzAuMDg1IDEyLjQ4M3MyMi4zOTEtNC43NzEgMzAuMDg0LTEyLjQ4MmwzNTQuNTcxLTM1NC42MzNjOS42NjItOS42NjIgMTUuNjM5LTIzLjAxMSAxNS42MzktMzcuNzU1IDAtMjkuNDg4LTIzLjkwNS01My4zOTMtNTMuMzkzLTUzLjM5My0xNC43NDQgMC0yOC4wOTMgNS45NzYtMzcuNzU1IDE1LjYzOXYwbC0zMDkuMzUgMzA4Ljk4Mi0zMDkuMjQ4LTMwOS4yNDhjLTkuNjEzLTkuNTAyLTIyLjgzNC0xNS4zNzItMzcuNDI3LTE1LjM3Mi0xNC43NTUgMC0yOC4xMDkgNi4wMDItMzcuNzUzIDE1LjY5N2wtMC4wMDIgMC4wMDJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNzsiIGdseXBoLW5hbWU9ImF0dGFjaG1lbnQiIGQ9Ik03MDQuMDIwIDY3Mi4wMTB2LTQ1MS40MmMwLjAxNC0wLjgyOCAwLjAyMi0xLjgwNCAwLjAyMi0yLjc4MyAwLTg5LjM4OS02Ni43ODUtMTYzLjE4LTE1My4xODEtMTc0LjE5NmwtMC44NzEtMC4wOTFjLTUuMDc5LTAuNTM3LTEwLjk3Mi0wLjg0NC0xNi45MzctMC44NDQtOTQuMDk0IDAtMTcwLjM3MyA3Ni4yNzktMTcwLjM3MyAxNzAuMzczIDAgMC4xMDIgMCAwLjIwNSAwIDAuMzA3di0wLjAxNiA1MjcuMzZjLTAuMDE4IDAuNzQzLTAuMDI4IDEuNjE4LTAuMDI4IDIuNDk1IDAgNTUuODI2IDQxLjMwMyAxMDIuMDA2IDk1LjAxOSAxMDkuNjQ2bDAuNTkgMC4wNjljMy4zMjMgMC4zNjcgNy4xNzcgMC41NzcgMTEuMDgwIDAuNTc3IDU4LjkxOCAwIDEwNi42OC00Ny43NjIgMTA2LjY4LTEwNi42OCAwLTAuMDUyIDAtMC4xMDMgMC0wLjE1NXYwLjAwOC00NDcuOThjMC0yMy41NjYtMTkuMTA0LTQyLjY3LTQyLjY3LTQyLjY3cy00Mi42NyAxOS4xMDQtNDIuNjcgNDIuNjd2MCAzNzMuMzNjLTAuNDUyIDE3LjMyNy0xNC42MDYgMzEuMjAxLTMyIDMxLjIwMXMtMzEuNTQ4LTEzLjg3NC0zMS45OTktMzEuMTU5bC0wLjAwMS0wLjA0MnYtMzY3LjM3Yy0wLjAxOC0wLjc0My0wLjAyOC0xLjYxOC0wLjAyOC0yLjQ5NSAwLTU1LjgyNiA0MS4zMDMtMTAyLjAwNiA5NS4wMTktMTA5LjY0NmwwLjU5LTAuMDY5YzMuMzIzLTAuMzY3IDcuMTc3LTAuNTc3IDExLjA4MC0wLjU3NyA1OC45MTggMCAxMDYuNjggNDcuNzYyIDEwNi42OCAxMDYuNjggMCAwLjA1MiAwIDAuMTAzIDAgMC4xNTV2LTAuMDA4IDQ0MC43M2MwLjAxNCAwLjgyOCAwLjAyMiAxLjgwNCAwLjAyMiAyLjc4MyAwIDg5LjM4OS02Ni43ODUgMTYzLjE4LTE1My4xODEgMTc0LjE5NmwtMC44NzEgMC4wOTFjLTUuMDExIDAuNTIyLTEwLjgyNiAwLjgyMS0xNi43MTIgMC44MjEtOTQuMjE5IDAtMTcwLjU5OC03Ni4zOC0xNzAuNTk4LTE3MC41OTggMC0wLjAwOCAwLTAuMDE1IDAtMC4wMjN2MC4wMDEtNTIzLjUzYzAtMTIyLjQ1IDg5LjYtMjMyLjEgMjExLjYyLTI0My43MTIgNi44NDctMC43MDkgMTQuNzk0LTEuMTEzIDIyLjgzNS0xLjExMyAxMjkuNzIzIDAgMjM0Ljg4NSAxMDUuMTYyIDIzNC44ODUgMjM0Ljg4NSAwIDAuMDQ2IDAgMC4wOTEgMCAwLjEzN3YtMC4wMDcgNDU4Ljc1MmMtMC40NTIgMTcuMzI3LTE0LjYwNiAzMS4yMDEtMzIgMzEuMjAxcy0zMS41NDgtMTMuODc0LTMxLjk5OS0zMS4xNTlsLTAuMDAxLTAuMDQyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDg7IiBnbHlwaC1uYW1lPSJib3hjaGVja19lZCIgZD0iTTk3LjUyNCA5NjBjLTUzLjE4NSAwLTk3LjUyNC00NC4zMzktOTcuNTI0LTk3LjUyNHYtODI4Ljk1MmMwLTUzLjE4NSA0NC4zMzktOTcuNTI0IDk3LjUyNC05Ny41MjRoODI4Ljk1MmM1My4xODUgMCA5Ny41MjQgNDQuMzM5IDk3LjUyNCA5Ny41MjR2ODI4Ljk1MmMwIDUzLjE4NS00NC4zMzkgOTcuNTI0LTk3LjUyNCA5Ny41MjRoLTgyOC45NTJ6TTk3LjUyNCA4NjIuNDc2aDgyOC45NTJ2LTgyOC45NTJoLTgyOC45NTJ2ODI4Ljk1MnpNNzQ1Ljg5IDYzMC45MDZjLTAuMTgzIDAuMDAyLTAuMzk4IDAuMDA0LTAuNjE0IDAuMDA0LTEzLjQ2NyAwLTI1LjY1OC01LjQ2MS0zNC40ODEtMTQuMjg5bC0yNTguMzM0LTI1OC4zMzQtMTAyLjE5IDEwMi4xNDNjLTguODIyIDguODI2LTIxLjAxMiAxNC4yODUtMzQuNDc2IDE0LjI4NXMtMjUuNjU0LTUuNDU5LTM0LjQ3Ni0xNC4yODV2MGMtOC44MTEtOC44Mi0xNC4yNjEtMjEtMTQuMjYxLTM0LjQ1MnM1LjQ0OS0yNS42MzMgMTQuMjYxLTM0LjQ1M3YwbDEzNi42NjctMTM2LjY2N2M4LjgyMy04LjgyNCAyMS4wMTItMTQuMjgzIDM0LjQ3Ni0xNC4yODNzMjUuNjU0IDUuNDU4IDM0LjQ3NiAxNC4yODNsMjkyLjgxIDI5Mi44MWM4LjgyNiA4LjgyMiAxNC4yODUgMjEuMDEyIDE0LjI4NSAzNC40NzZzLTUuNDU5IDI1LjY1NC0xNC4yODUgMzQuNDc2djBjLTguNjc5IDguNjg1LTIwLjYxOCAxNC4xMTEtMzMuODI0IDE0LjI4NWgtMC4wMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwOTsiIGdseXBoLW5hbWU9ImJveGNoZWNrX29vbyIgZD0iTTEzMy4zMzcgODk2Yy03My4wNDgtMC4yMDUtMTMzLjEyOC02MC4yODUtMTMzLjMzMy0xMzMuMzMzIDAtMC4wMTkgMC0wLjA0MSAwLTAuMDYzczAtMC4wNDQgMC0wLjA2NnYwLjAwMy02MjcuMjkyYzAtMC4wMTkgMC0wLjA0MSAwLTAuMDYzczAtMC4wNDQgMC0wLjA2NnYwLjAwM2MwLjIwNS03My4wNDggNjAuMjg1LTEzMy4xMjggMTMzLjMzMy0xMzMuMzMzIDAuMDEyIDAgMC4wMjcgMCAwLjA0MiAwczAuMDI5IDAgMC4wNDQgMGg2MjcuMzMxYzAuMDE5IDAgMC4wNDEgMCAwLjA2MyAwczAuMDQ0IDAgMC4wNjYgMGgtMC4wMDNjNzMuMDQ4IDAuMjA1IDEzMy4xMjggNjAuMjg1IDEzMy4zMzMgMTMzLjMzMyAwIDAuMDE5IDAgMC4wNDEgMCAwLjA2M3MwIDAuMDQ0IDAgMC4wNjZ2LTAuMDAzIDI2Ny43NWMwIDIzLjU2NC0xOS4xMDMgNDIuNjY3LTQyLjY2NyA0Mi42Njd2MGMtMjMuNTY0IDAtNDIuNjY3LTE5LjEwMy00Mi42NjctNDIuNjY3djAtMjY3LjY2N2MtMC4wNzYtMjcuMS0yMS4xNDktNDguMTMyLTQ4LjI1LTQ4LjIwOGgtNjI3LjA4M2MtMjcuMSAwLjA3Ni00OC4xMzIgMjEuMTA4LTQ4LjIwOCA0OC4yMDh2NjI3LjEyNWMwLjA3NiAyNy4xMDEgMjEuMTA4IDQ4LjEzMiA0OC4yMDggNDguMjA4aDU2Ni44NzVjMjMuNTY0IDAgNDIuNjY3IDE5LjEwMyA0Mi42NjcgNDIuNjY3djBjMCAyMy41NjQtMTkuMTAzIDQyLjY2Ny00Mi42NjcgNDIuNjY3djBoLTU2N2MtMC4wMTIgMC0wLjAyNyAwLTAuMDQyIDBzLTAuMDI5IDAtMC4wNDQgMGgwLjAwMnpNOTU1LjU5IDgyNy43MzNjLTAuMTU4IDAuMDAyLTAuMzQ1IDAuMDAzLTAuNTMyIDAuMDAzLTExLjc4NSAwLTIyLjQ1NS00Ljc3OC0zMC4xNzYtMTIuNTAzbC00ODAuMDgzLTQ4MC4wODNjLTcuNzMyLTcuNzIzLTEyLjUxNC0xOC4zOTctMTIuNTE0LTMwLjE4N3M0Ljc4My0yMi40NjUgMTIuNTE0LTMwLjE4N3YwYzcuNzIxLTcuNzE5IDE4LjM4Ni0xMi40OTQgMzAuMTY3LTEyLjQ5NHMyMi40NDYgNC43NzQgMzAuMTY3IDEyLjQ5NGw0ODAuMTI1IDQ4MC4xMjVjNy43MTkgNy43MjEgMTIuNDk0IDE4LjM4NiAxMi40OTQgMzAuMTY3cy00Ljc3NCAyMi40NDYtMTIuNDk0IDMwLjE2N3YwYy03LjYwNCA3LjYwNy0xOC4wNjcgMTIuMzU3LTI5LjY0IDEyLjVoLTAuMDI3ek0yODAuNDk5IDU0Mi42NTZjLTAuMTU4IDAuMDAyLTAuMzQ1IDAuMDAzLTAuNTMyIDAuMDAzLTExLjc4NSAwLTIyLjQ1NS00Ljc3OC0zMC4xNzYtMTIuNTAzdjBjLTcuNzE5LTcuNzIxLTEyLjQ5NC0xOC4zODYtMTIuNDk0LTMwLjE2N3M0Ljc3NC0yMi40NDYgMTIuNDk0LTMwLjE2N2w2NS40MTctNjUuNDE3YzcuNzIxLTcuNzE5IDE4LjM4Ni0xMi40OTQgMzAuMTY3LTEyLjQ5NHMyMi40NDYgNC43NzQgMzAuMTY3IDEyLjQ5NHYwYzcuNzE5IDcuNzIxIDEyLjQ5NCAxOC4zODYgMTIuNDk0IDMwLjE2N3MtNC43NzQgMjIuNDQ2LTEyLjQ5NCAzMC4xNjdsLTY1LjQxNyA2NS40MTdjLTcuNTk1IDcuNTk4LTE4LjA0MSAxMi4zNDUtMjkuNTk2IDEyLjVoLTAuMDI5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGE7IiBnbHlwaC1uYW1lPSJib3hjaGVja19zZW1pIiBkPSJNOTcuNTI0IDk2MGMtNTMuMTg1IDAtOTcuNTI0LTQ0LjMzOS05Ny41MjQtOTcuNTI0di04MjguOTUyYzAtNTMuMTg1IDQ0LjMzOS05Ny41MjQgOTcuNTI0LTk3LjUyNGg4MjguOTUyYzUzLjE4NSAwIDk3LjUyNCA0NC4zMzkgOTcuNTI0IDk3LjUyNHY4MjguOTUyYzAgNTMuMTg1LTQ0LjMzOSA5Ny41MjQtOTcuNTI0IDk3LjUyNGgtODI4Ljk1MnpNOTcuNTI0IDg2Mi40NzZoODI4Ljk1MnYtODI4Ljk1MmgtODI4Ljk1MnY4MjguOTUyek03MTkuMTkgNDg0LjYxOWwtMzg4LjY2Ny0wLjIzOGMtMjYuOTEtMC4wMjctNDguNzE0LTIxLjg0OC00OC43MTQtNDguNzYyIDAtMC4wMTcgMC0wLjAzNCAwLTAuMDUwdjAuMDAzYzAuMDI3LTI2LjkxIDIxLjg0OC00OC43MTQgNDguNzYyLTQ4LjcxNGwzODguNjY3IDAuMjM4YzI2LjkxIDAuMDI3IDQ4LjcxNCAyMS44NDggNDguNzE0IDQ4Ljc2MnYwYzAgMjYuOTMtMjEuODMxIDQ4Ljc2Mi00OC43NjIgNDguNzYydjB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYjsiIGdseXBoLW5hbWU9ImJveGNoZWNrIiBkPSJNOTcuNTI0IDg2Mi40NzZ2LTgyOC45NTJoODI4Ljk1MnY4MjguOTUyaC04MjguOTUyek05Ny41MjQgOTYwaDgyOC45NTJjNTMuODYxIDAgOTcuNTI0LTQzLjY2MyA5Ny41MjQtOTcuNTI0djAtODI4Ljk1MmMwLTUzLjg2MS00My42NjMtOTcuNTI0LTk3LjUyNC05Ny41MjR2MGgtODI4Ljk1MmMtNTMuODYxIDAtOTcuNTI0IDQzLjY2My05Ny41MjQgOTcuNTI0djAgODI4Ljk1MmMwIDUzLjg2MSA0My42NjMgOTcuNTI0IDk3LjUyNCA5Ny41MjR2MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBjOyIgZ2x5cGgtbmFtZT0iY2FsZW5kYXIiIGQ9Ik04MDYuMDExIDgyNS45NzloLTQ2LjU1MXY0Ni41MzFjMCAyNS42OTgtMjAuODMyIDQ2LjUzMS00Ni41MzEgNDYuNTMxcy00Ni41MzEtMjAuODMyLTQ2LjUzMS00Ni41MzF2LTQ2LjUzMWgtMzcyLjI4NXY0Ni41MzFjMCAyNS42OTgtMjAuODMyIDQ2LjUzMS00Ni41MzEgNDYuNTMxcy00Ni41MzEtMjAuODMyLTQ2LjUzMS00Ni41MzF2MC00Ni41MzFoLTQ2LjU1MWMtNTEuMTUzLTAuMDIzLTkyLjYxMS00MS40OTYtOTIuNjExLTkyLjY1MiAwLTAuMTQ0IDAtMC4yODggMC4wMDEtMC40MzJ2MC4wMjJsLTAuNDUxLTY1MS41MWMwLTAuMDA2IDAtMC4wMTMgMC0wLjAyMCAwLTUxLjM4NSA0MS42NTYtOTMuMDQxIDkzLjA0MS05My4wNDEgMC4wMDcgMCAwLjAxNCAwIDAuMDIyIDBoNjUxLjUwOWM1MS4zMzEgMC4xNjIgOTIuODk5IDQxLjczIDkzLjA2MSA5My4wNDZ2NjUxLjUwNWMtMC4xNTEgNTEuMzM5LTQxLjcyMyA5Mi45MTktOTMuMDQ1IDkzLjA4MmgtMC4wMTZ6TTgwNi4wMTEgMTI3Ljk1OWMtMC4wNzAtMjUuNjgxLTIwLjg3LTQ2LjQ4MS00Ni41NDQtNDYuNTUxaC01NTguNDE1Yy0yNS42NjUgMC4wODEtNDYuNDQ5IDIwLjg2NS00Ni41MzEgNDYuNTIzdjQ2NS4zNTVoNjUxLjQ4OXpNMjQ3LjU4MyA1MDAuMjI0aDkzLjA2MXYtOTMuMDYxaC05My4wNjF6TTQzMy43MjUgNTAwLjIyNGg5My4wNjF2LTkzLjA2MWgtOTMuMDYxek02MTkuODY4IDUwMC4yMjRoOTMuMDYxdi05My4wNjFoLTkzLjA2MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBkOyIgZ2x5cGgtbmFtZT0iY2xvc2UiIGQ9Ik04NzUuMjc2IDgxMC43MTVjLTEwLjM5NiAxMC40MjMtMjQuNzcyIDE2Ljg3Mi00MC42NTUgMTYuODcycy0zMC4yNTktNi40NDktNDAuNjU0LTE2Ljg3MWwtMC4wMDEtMC4wMDEtMjgxLjk2Ni0yODEuNDA1LTI4MS45OSAyODEuOTY2Yy0xMC4zMTIgOS45MDUtMjQuMzQ0IDE2LjAwNS0zOS44MDEgMTYuMDA1LTMxLjc1MSAwLTU3LjQ5LTI1LjczOS01Ny40OS01Ny40OSAwLTE1LjQ1NyA2LjEtMjkuNDg5IDE2LjAyNC0zOS44MmwtMC4wMTggMC4wMTkgMjgxLjk2Ni0yODEuOTktMjgxLjk2Ni0yODEuOTljLTkuOTA1LTEwLjMxMi0xNi4wMDUtMjQuMzQ0LTE2LjAwNS0zOS44MDEgMC0zMS43NTEgMjUuNzM5LTU3LjQ5IDU3LjQ5LTU3LjQ5IDE1LjQ1NyAwIDI5LjQ4OSA2LjEgMzkuODIgMTYuMDI0bC0wLjAxOS0wLjAxOCAyODEuOTkgMjgxLjk2NiAyODEuOTktMjgxLjk2NmMxMC4zMTItOS45MDUgMjQuMzQ0LTE2LjAwNSAzOS44MDEtMTYuMDA1IDMxLjc1MSAwIDU3LjQ5IDI1LjczOSA1Ny40OSA1Ny40OSAwIDE1LjQ1Ny02LjEgMjkuNDg5LTE2LjAyNCAzOS44MmwwLjAxOC0wLjAxOS0yODEuOTY2IDI4MS45OSAyODEuOTY2IDI4MS45OWMxMC4xNjQgMTAuNDA1IDE2LjQzNCAyNC42NTIgMTYuNDM0IDQwLjM2M3MtNi4yNyAyOS45NTgtMTYuNDQ1IDQwLjM3NGwwLjAxMS0wLjAxMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBlOyIgZ2x5cGgtbmFtZT0iZGFzaGJvYXJkIiBkPSJNMTcwLjY2IDQwNS4zNGgyNTZjMjMuNTMyIDAuMDcwIDQyLjU5IDE5LjEyNyA0Mi42NiA0Mi42NTN2MzQxLjM0N2MtMC4wNzAgMjMuNTMyLTE5LjEyNyA0Mi41OS00Mi42NTMgNDIuNjZoLTI1Ni4wMDdjLTIzLjUzMi0wLjA3MC00Mi41OS0xOS4xMjctNDIuNjYtNDIuNjUzdi0zNDEuMzQ3YzAuMDcwLTIzLjUzMiAxOS4xMjctNDIuNTkgNDIuNjUzLTQyLjY2aDAuMDA3ek0xNzAuNjYgNjRoMjU2YzIzLjUzMiAwLjA3MCA0Mi41OSAxOS4xMjcgNDIuNjYgNDIuNjUzdjE3MC42ODdjLTAuMDcwIDIzLjUzMi0xOS4xMjcgNDIuNTktNDIuNjUzIDQyLjY2aC0yNTYuMDA3Yy0yMy41MzItMC4wNzAtNDIuNTktMTkuMTI3LTQyLjY2LTQyLjY1M3YtMTcwLjY2N2MwLjA1OC0yMy41NDEgMTkuMTItNDIuNjExIDQyLjY1My00Mi42OGgwLjAwN3pNNTk3LjMyIDY0aDI1NmMyMy41NDEgMC4wNTggNDIuNjExIDE5LjEyIDQyLjY4IDQyLjY1M3YzNDEuMzQ3Yy0wLjA3MCAyMy41MzItMTkuMTI3IDQyLjU5LTQyLjY1MyA0Mi42NmgtMjU2LjAwN2MtMjMuNTMyLTAuMDcwLTQyLjU5LTE5LjEyNy00Mi42Ni00Mi42NTN2LTM0MS4zNDdjMC4wNzAtMjMuNTMyIDE5LjEyNy00Mi41OSA0Mi42NTMtNDIuNjZoMC4wMDd6TTU1NC42NiA3ODkuMzR2LTE3MC42NmMwLjA1OC0yMy41NDggMTkuMTMyLTQyLjYyMiA0Mi42NzUtNDIuNjhoMjU2LjAwNmMyMy41MzIgMC4wNzAgNDIuNTkgMTkuMTI3IDQyLjY2IDQyLjY1M3YxNzAuNjg3Yy0wLjA3MCAyMy41MzItMTkuMTI3IDQyLjU5LTQyLjY1MyA0Mi42NmgtMjU2LjAwN2MtMjMuNTQxLTAuMDU4LTQyLjYxMS0xOS4xMi00Mi42OC00Mi42NTN2LTAuMDA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGY7IiBnbHlwaC1uYW1lPSJkZWxldGVfb3V0bCIgZD0iTTI5Mi41NzcgMTk5LjEwN2MwLjctMzkuNDIyIDMyLjgyMi03MS4xMTEgNzIuMzQ1LTcxLjExMSAwLjI3NyAwIDAuNTU0IDAuMDAyIDAuODMxIDAuMDA1aDI5Mi41MzVjMC4yMzQtMC4wMDMgMC41MTItMC4wMDQgMC43ODktMC4wMDQgMzkuNTIzIDAgNzEuNjQ1IDMxLjY4OSA3Mi4zNDQgNzEuMDQ1bDAuMDAxIDAuMDY2djM1NS41NTNjLTAuNyAzOS40MjItMzIuODIyIDcxLjExMS03Mi4zNDUgNzEuMTExLTAuMjc3IDAtMC41NTQtMC4wMDItMC44MzEtMC4wMDVoLTI5Mi41MzVjLTAuMjM0IDAuMDAzLTAuNTEyIDAuMDA0LTAuNzg5IDAuMDA0LTM5LjUyMyAwLTcxLjY0NS0zMS42ODktNzIuMzQ0LTcxLjA0NWwtMC4wMDEtMC4wNjZ6TTQwMi4yODkgNTU0LjY2aDIxOS40MjNjMC4xMTcgMC4wMDEgMC4yNTYgMC4wMDIgMC4zOTUgMC4wMDIgMTkuNzY0IDAgMzUuODI3LTE1Ljg0MyAzNi4xODItMzUuNTIydi0yODQuNDhjLTAuMzU2LTE5LjcxMi0xNi40MTktMzUuNTU1LTM2LjE4My0zNS41NTUtMC4xMzkgMC0wLjI3NyAwLjAwMS0wLjQxNiAwLjAwMmgtMjE5LjQwMmMtMC4xMTctMC4wMDEtMC4yNTYtMC4wMDItMC4zOTUtMC4wMDItMTkuNzY0IDAtMzUuODI3IDE1Ljg0My0zNi4xODIgMzUuNTIydjI4NC40OGMwLjM1NiAxOS43MTIgMTYuNDE5IDM1LjU1NSAzNi4xODMgMzUuNTU1IDAuMTM5IDAgMC4yNzctMC4wMDEgMC40MTYtMC4wMDJoLTAuMDIxek02NDAgNzMyLjQ0N2wtMjUuOTY5IDI1LjMxM2MtNi42NjMgNi4zMTMtMTUuNjczIDEwLjIwNS0yNS41OTMgMTAuMjRoLTE1Mi44N2MtOS45MjctMC4wMzUtMTguOTM3LTMuOTI3LTI1LjYxNy0xMC4yNTZsMC4wMTcgMC4wMTYtMjUuOTY5LTI1LjMxM2gtOTEuNDIzYy0wLjM2IDAuMDEzLTAuNzgyIDAuMDIwLTEuMjA3IDAuMDIwLTE5LjY0NyAwLTM1LjU3NC0xNS45MjctMzUuNTc0LTM1LjU3NHMxNS45MjctMzUuNTc0IDM1LjU3NC0zNS41NzRjMC40MjQgMCAwLjg0NyAwLjAwNyAxLjI2OCAwLjAyMmwtMC4wNjEtMC4wMDJoNDM4Ljg0NWMwLjM2LTAuMDEzIDAuNzgyLTAuMDIwIDEuMjA3LTAuMDIwIDE5LjY0NyAwIDM1LjU3NCAxNS45MjcgMzUuNTc0IDM1LjU3NHMtMTUuOTI3IDM1LjU3NC0zNS41NzQgMzUuNTc0Yy0wLjQyNCAwLTAuODQ3LTAuMDA3LTEuMjY4LTAuMDIybDAuMDYxIDAuMDAyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTA7IiBnbHlwaC1uYW1lPSJkZWxldGUiIGQ9Ik0yNTUuOTggMTQ5LjM0YzAuMTM5LTQ3LjA3NiAzOC4yNjQtODUuMjAxIDg1LjMyNy04NS4zNGgzNDEuMzUzYzQ3LjA3NiAwLjEzOSA4NS4yMDEgMzguMjY0IDg1LjM0IDg1LjMyN3Y0MjYuNjczYy0wLjEzOSA0Ny4wNzYtMzguMjY0IDg1LjIwMS04NS4zMjcgODUuMzRoLTM0MS4zNTNjLTQ3LjA3Ni0wLjEzOS04NS4yMDEtMzguMjY0LTg1LjM0LTg1LjMyN3YtMC4wMTN6TTc2Ny45OCA3ODkuMzRoLTEwNi42NmwtMzAuMjA4IDMwLjM3MmMtNy43MTQgNy41NjMtMTguMjc3IDEyLjI0NC0yOS45MzMgMTIuMjg4aC0xNzguMzY5Yy0xMS42MzUtMC4wNjctMjIuMTY1LTQuNzQ0LTI5Ljg2Ny0xMi4yOTVsMC4wMDcgMC4wMDctMzAuMjktMzAuMzcyaC0xMDYuNjhjLTIzLjU2NiAwLTQyLjY3LTE5LjEwNC00Mi42Ny00Mi42N3MxOS4xMDQtNDIuNjcgNDIuNjctNDIuNjdoNTEyYzIzLjU2NiAwIDQyLjY3IDE5LjEwNCA0Mi42NyA0Mi42N3MtMTkuMTA0IDQyLjY3LTQyLjY3IDQyLjY3djB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxMTsiIGdseXBoLW5hbWU9ImZhcSIgZD0iTTg1NS45NDEgNzA1Ljg2NGgtNDMuMDA4di0zNDMuODM5Yy0wLjA1OC0yMy43MjktMTkuMjc5LTQyLjk1LTQzLjAwMi00My4wMDhoLTUxNS43NzR2LTQzLjAwOGMwLjEyOC00Ny40NTQgMzguNTYyLTg1Ljg4OCA4Ni4wMDQtODYuMDE2aDQyOS44MDVsMTcyLjAzMi0xNzIuMDMydjYwMS45ODljLTAuMTg2IDQ3LjQyNC0zOC42MjEgODUuODA5LTg2LjA0NyA4NS45MTRoLTAuMDEwek03MjYuOTE3IDQ5MC44MjR2MzAxLjA1NmMtMC4xMjggNDcuNDU0LTM4LjU2MiA4NS44ODgtODYuMDA0IDg2LjAxNmgtNDcyLjc3MmMtNDcuNDU0LTAuMTI4LTg1Ljg4OC0zOC41NjItODYuMDE2LTg2LjAwNHYtNTU4Ljg1bDE3Mi4wMzIgMTcyLjAzMmgzODYuODI2YzQ3LjQwOSAwLjEzOSA4NS44MSAzOC41MTEgODUuOTk1IDg1Ljg5NnYwLjAxOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEyOyIgZ2x5cGgtbmFtZT0iZmlsdGVyX2xpc3QiIGQ9Ik00NjkuMzQgMTkyaDg1LjM0YzIzLjU2NiAwIDQyLjY3IDE5LjEwNCA0Mi42NyA0Mi42N3MtMTkuMTA0IDQyLjY3LTQyLjY3IDQyLjY3aC04NS4zNGMtMjMuNTY2IDAtNDIuNjctMTkuMTA0LTQyLjY3LTQyLjY3czE5LjEwNC00Mi42NyA0Mi42Ny00Mi42N3Ywek0xMjggNjYxLjM0YzAuMDcwLTIzLjUzMiAxOS4xMjctNDIuNTkgNDIuNjUzLTQyLjY2aDY4Mi42ODdjMjMuNTY2IDAgNDIuNjcgMTkuMTA0IDQyLjY3IDQyLjY3cy0xOS4xMDQgNDIuNjctNDIuNjcgNDIuNjdoLTY4Mi42OGMtMjMuNTM5LTAuMDcwLTQyLjYwMi0xOS4xMzktNDIuNjYtNDIuNjc1di0wLjAwNnpNMjk4LjY2IDQwNS4zNGg0MjYuNjhjMjMuNTY2IDAgNDIuNjcgMTkuMTA0IDQyLjY3IDQyLjY3cy0xOS4xMDQgNDIuNjctNDIuNjcgNDIuNjdoLTQyNi42OGMtMjMuNTY2IDAtNDIuNjctMTkuMTA0LTQyLjY3LTQyLjY3czE5LjEwNC00Mi42NyA0Mi42Ny00Mi42N3YweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTM7IiBnbHlwaC1uYW1lPSJmaWx0ZXIiIGQ9Ik00Ni41NDUgOTI1LjA5MWMtMjUuNzA0LTAuMDA2LTQ2LjUzOS0yMC44NDUtNDYuNTM5LTQ2LjU1IDAtMTEuMDg4IDMuODc3LTIxLjI3MSAxMC4zNDktMjkuMjY3bC0wLjA2OSAwLjA4OCAzNDkuMzI0LTQzNC4zMTh2LTM5NS43MjdjMC4wMTAtMjUuNzAxIDIwLjg0Ny00Ni41MzMgNDYuNTUtNDYuNTMzIDcuMDIwIDAgMTMuNjc2IDEuNTU0IDE5LjY0NSA0LjMzNmwtMC4yODYtMC4xMiAyMDIuNDQ5IDkyLjcyNmMxNi4xNyA3LjUyOCAyNy4xNzggMjMuNjM4IDI3LjE4MyA0Mi4zMTl2MzAyLjY4NGwzNTguMjE0IDQzNC4xODFjNi42MjggNy45ODQgMTAuNjUgMTguMzM5IDEwLjY1IDI5LjYzMyAwIDI1LjcwOS0yMC44NDEgNDYuNTUtNDYuNTUgNDYuNTUtMC4wMDQgMC0wLjAwNyAwLTAuMDExIDBoMC4wMDF6TTE0My43MzIgODMyaDczNC45NTNsLTMwNS45OS0zNzAuOTU2Yy02LjYxOS03Ljk4MS0xMC42MzYtMTguMzI5LTEwLjYzNi0yOS42MTUgMC0wLjAwNyAwLTAuMDE0IDAtMC4wMjF2MC4wMDEtMjg5LjUwMWwtMTA5LjM1OS01MC4wOTB2MzM5LjU5MWMtMC4wMDEgMTEuMDkwLTMuODggMjEuMjczLTEwLjM1NSAyOS4yNjlsMC4wNjgtMC4wODd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxNDsiIGdseXBoLW5hbWU9ImhlbHAiIGQ9Ik01MTIuMDIwIDg2MS4wMjBjLTAuMDA2IDAtMC4wMTMgMC0wLjAyMCAwLTIyOC4xMDUgMC00MTMuMDIwLTE4NC45MTUtNDEzLjAyMC00MTMuMDIwczE4NC45MTUtNDEzLjAyMCA0MTMuMDIwLTQxMy4wMjBjMjI4LjEwNSAwIDQxMy4wMjAgMTg0LjkxNSA0MTMuMDIwIDQxMy4wMjB2MGMtMC4wODIgMjI4LjA2NS0xODQuOTM3IDQxMi45MjctNDEyLjk5MSA0MTMuMDIwaC0wLjAwOXpNNTEyLjAyMCAxMTcuNTk2Yy0xODIuNDc3IDAtMzMwLjQwNCAxNDcuOTI3LTMzMC40MDQgMzMwLjQwNHMxNDcuOTI3IDMzMC40MDQgMzMwLjQwNCAzMzAuNDA0YzE4Mi40NzcgMCAzMzAuNDA0LTE0Ny45MjcgMzMwLjQwNC0zMzAuNDA0djBjLTAuMjU2LTE4Mi4zNzQtMTQ4LjAzMC0zMzAuMTQ4LTMzMC4zOC0zMzAuNDA0aC0wLjAyNHpNNDcwLjcxMiAyODIuODA4aDgyLjU5NnYtODIuNTk2aC04Mi41OTZ6TTUzNy4yNzIgNjk0LjE3Yy03LjQ2OSAxLjE5Ni0xNi4wODAgMS44NzktMjQuODUgMS44NzktNzQuMTAyIDAtMTM2LjgxNS00OC43NjItMTU3LjgwMy0xMTUuOTQ5bC0wLjMxNS0xLjE3MWMtMS4wMjAtMy4yNDgtMS42MDctNi45ODMtMS42MDctMTAuODU1IDAtMjAuNjg3IDE2Ljc3LTM3LjQ1OCAzNy40NTgtMzcuNDU4IDAuMDMyIDAgMC4wNjQgMCAwLjA5NyAwaDguMTg3YzE3LjA1NiAwLjY0IDMxLjMxMyAxMS45MzEgMzYuMzU1IDI3LjM4N2wwLjA3OSAwLjI4MWMxMS44MTggMzIuMTUgNDIuMTc0IDU0LjY3IDc3Ljc4OSA1NC42NyA2LjA2MSAwIDExLjk3LTAuNjUyIDE3LjY2MS0xLjg5bC0wLjU0NiAwLjFjMzcuNTAxLTguNzU2IDY1LjAwNy00MS45MDIgNjUuMDA3LTgxLjQ3MyAwLTEuODU4LTAuMDYxLTMuNzAxLTAuMTgtNS41MjlsMC4wMTMgMC4yNDljLTQuMDk2LTU1LjI5Ni02Ni45MDgtNjcuMzE4LTEwMS4xOTItMTE4Ljk0OCAwLTAuNDEtMC40MS0wLjQxLTAuNDEtMC44MTktMC40MS0wLjgxOS0wLjgxOS0xLjI0OS0xLjI0OS0yLjA0OC0zLjYxLTUuODQzLTcuMDQ3LTEyLjYzNS05LjkxLTE5LjcyMWwtMC4zMy0wLjkyM2MtMC40MS0xLjI0OS0xLjIyOS0yLjA0OC0xLjY1OS0zLjI5Ny0wLjI3Ny0wLjc1Ny0wLjU1OS0xLjcyMy0wLjc4NS0yLjcxMWwtMC4wMzQtMC4xNzdjLTUuMjAxLTE0Ljc3LTguMjA2LTMxLjgwMS04LjIwNi00OS41MzQgMC0wLjczNyAwLjAwNS0xLjQ3MyAwLjAxNi0yLjIwN2wtMC4wMDEgMC4xMTFoODIuNTk2Yy0wLjAwMSAwLjE5MS0wLjAwMiAwLjQxNy0wLjAwMiAwLjY0MiAwIDE2LjAyNCA0LjI5NiAzMS4wNDUgMTEuNzk5IDQzLjk3NGwtMC4yMjUtMC40MmMwLjgxOSAxLjIyOSAxLjIyOSAyLjQ3OCAyLjA0OCAzLjcyNyAzLjY0MyA2LjA5MyA3LjQ2NCAxMS4zNjEgMTEuNjk1IDE2LjI2NGwtMC4xMjQtMC4xNDdjMC40MSAwLjQxIDAuODE5IDEuMjI5IDEuMjQ5IDEuNjU5IDQuMzA3IDUuMDcwIDguNzU5IDkuNjU4IDEzLjQ5MyAxMy45MzdsMC4xMjYgMC4xMTJjMzkuNTA2IDM3LjUxOSA5My4yNjYgNjguMDE0IDgyLjA2MyAxNDYuOTY0LTEwLjE0OCA3My4wODMtNjUuOTk2IDEzMC42MjQtMTM3LjM1IDE0My4yMTJsLTEuMDEzIDAuMTQ4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTU7IiBnbHlwaC1uYW1lPSJpbmZvIiBkPSJNNTEyIDk2MGMtMjgyLjI0MiAwLTUxMi0yMjkuNzU4LTUxMi01MTJzMjI5Ljc1OC01MTIgNTEyLTUxMmMyODIuMjQyIDAgNTEyIDIyOS43NTggNTEyIDUxMnMtMjI5Ljc1OCA1MTItNTEyIDUxMnpNNTEyIDg3MC45NTdjMjM0LjEyIDAgNDIyLjk1Ny0xODguODM3IDQyMi45NTctNDIyLjk1N3MtMTg4LjgzNy00MjIuOTU3LTQyMi45NTctNDIyLjk1N2MtMjM0LjEyIDAtNDIyLjk1NyAxODguODM3LTQyMi45NTcgNDIyLjk1N3MxODguODM3IDQyMi45NTcgNDIyLjk1NyA0MjIuOTU3ek01MTIgNjg4LjQzNWMtMC4wMDUgMC0wLjAxMSAwLTAuMDE3IDAtMjguMjc3IDAtNTEuMi0yMi45MjMtNTEuMi01MS4yIDAtMC4wMDYgMC0wLjAxMiAwLTAuMDE4djAuMDAxLTIyLjI2MWMwLTAuMDA1IDAtMC4wMTEgMC0wLjAxNyAwLTI4LjI3NyAyMi45MjMtNTEuMiA1MS4yLTUxLjIgMC4wMDYgMCAwLjAxMiAwIDAuMDE4IDBoLTAuMDAxYzAuMDA1IDAgMC4wMTEgMCAwLjAxNyAwIDI4LjI3NyAwIDUxLjIgMjIuOTIzIDUxLjIgNTEuMiAwIDAuMDA2IDAgMC4wMTIgMCAwLjAxOHYtMC4wMDEgMjIuMjYxYzAgMC4wMDUgMCAwLjAxMSAwIDAuMDE3IDAgMjguMjc3LTIyLjkyMyA1MS4yLTUxLjIgNTEuMi0wLjAwNiAwLTAuMDEyIDAtMC4wMTggMGgwLjAwMXpNNTEyIDQ4OC4wODdjLTAuMDA1IDAtMC4wMTEgMC0wLjAxNyAwLTI4LjI3NyAwLTUxLjItMjIuOTIzLTUxLjItNTEuMiAwLTAuMDA2IDAtMC4wMTIgMC0wLjAxOHYwLjAwMS0xNzguMDg3YzAtMC4wMDUgMC0wLjAxMSAwLTAuMDE3IDAtMjguMjc3IDIyLjkyMy01MS4yIDUxLjItNTEuMiAwLjAwNiAwIDAuMDEyIDAgMC4wMTggMGgtMC4wMDFjMC4wMDUgMCAwLjAxMSAwIDAuMDE3IDAgMjguMjc3IDAgNTEuMiAyMi45MjMgNTEuMiA1MS4yIDAgMC4wMDYgMCAwLjAxMiAwIDAuMDE4di0wLjAwMSAxNzguMDg3YzAgMC4wMDUgMCAwLjAxMSAwIDAuMDE3IDAgMjguMjc3LTIyLjkyMyA1MS4yLTUxLjIgNTEuMi0wLjAwNiAwLTAuMDEyIDAtMC4wMTggMGgwLjAwMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTE2OyIgZ2x5cGgtbmFtZT0iaW52aXNpYmxlIiBkPSJNNTEyIDY4Mi42OGMwLjc5MSAwLjAxMSAxLjcyNCAwLjAxNyAyLjY1OSAwLjAxNyAxMTYuMzY1IDAgMjEwLjY5OC05NC4zMzMgMjEwLjY5OC0yMTAuNjk4IDAtMjMuMjEtMy43NTMtNDUuNTQzLTEwLjY4NS02Ni40MjZsMC40MjggMS40ODggMTMwLjU2LTEzMC41NmM1OC43NTggNTEuOTI4IDEwNC45OCAxMTYuNjUgMTM0LjQ3NiAxODkuOTA2bDEuMjA0IDMuMzg0Yy03Ni4wMTQgMTg4Ljc2Ni0yNTcuNjI4IDMxOS41ODEtNDY5Ljc5NSAzMTkuNTgxLTU1LjMzNCAwLTEwOC41ODktOC44OTgtMTU4LjQxNC0yNS4zNDFsMy41NjkgMS4wMjAgOTIuNTktOTIuNTljMTguNjgxIDYuMTQyIDQwLjIwNCA5Ljg1OSA2Mi41NDEgMTAuMjM3bDAuMTg5IDAuMDAzek0xMTUuNjEgODI1LjE4Yy03LjcwNi03LjY5My0xMi40NzItMTguMzI3LTEyLjQ3Mi0zMC4wNzVzNC43NjctMjIuMzgyIDEyLjQ3Mi0zMC4wNzRsODMuOTY5LTgzLjk2OWMtNjkuMDAzLTU1LjAzMC0xMjIuNzM2LTEyNi4zNzctMTU1LjcwNS0yMDguMzExbC0xLjIxMi0zLjQxMWM3NS43MTktMTg4Ljg4NCAyNTcuMjE2LTMxOS44NzYgNDY5LjMyNC0zMjBoMC4wMTZjNjYuMjQ4IDAuMTQ4IDEyOS40NTggMTIuOTc4IDE4Ny4zODggMzYuMTg4bC0zLjQxNi0xLjIwOCAxMTYuMDYwLTExNi4wNjBjNy41MzktNi45MTYgMTcuNjMyLTExLjE1NSAyOC43MTUtMTEuMTU1IDIzLjQ5MyAwIDQyLjUzNyAxOS4wNDQgNDIuNTM3IDQyLjUzNyAwIDExLjA5OC00LjI1IDIxLjIwNC0xMS4yMTIgMjguNzc4bDAuMDI4LTAuMDMxLTY5NS44OSA2OTYuNzkxYy03Ljc3MiA3LjcxNy0xOC40NzkgMTIuNDg2LTMwLjMgMTIuNDg2cy0yMi41MjgtNC43NjktMzAuMzAzLTEyLjQ4OWwwLjAwMyAwLjAwMnpNNTEyIDI1NmMtMTE3LjgxIDAuMDM1LTIxMy4zMDUgOTUuNTMtMjEzLjM0IDIxMy4zMzd2MC4wMDNjMCAwLjAxNyAwIDAuMDM2IDAgMC4wNTYgMCAzMy4xOTIgNy43MTggNjQuNTgyIDIxLjQ1NyA5Mi40NzNsLTAuNTQ3LTEuMjI5IDY2Ljk5LTY2Ljk5Yy0xLjQ0NS03LjIwOS0yLjM2OC0xNS41ODctMi41NTctMjQuMTQ2bC0wLjAwMy0wLjE2M2MwLTAuMDQ5IDAtMC4xMDYgMC0wLjE2NCAwLTcwLjYwMiA1Ny4yMzQtMTI3LjgzNiAxMjcuODM2LTEyNy44MzYgMC4wNTggMCAwLjExNSAwIDAuMTczIDBoLTAuMDA5YzguNjk2IDAuMTM4IDE3LjA2OSAxLjIyMSAyNS4xMTMgMy4xNDhsLTAuNzgzLTAuMTU4IDY2Ljk5LTY2Ljk5Yy0yNi41NzgtMTMuNDU4LTU3Ljk0My0yMS4zNC05MS4xNS0yMS4zNC0wLjA2MCAwLTAuMTIgMC0wLjE4IDBoMC4wMDl6TTYzOC43MyA0ODMuMzI4Yy02LjQ3NyA1OS40MjEtNTMuMjE5IDEwNi4xNjMtMTEyLjA3NSAxMTIuNTlsLTAuNTY1IDAuMDUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTc7IiBnbHlwaC1uYW1lPSJtZW51IiBkPSJNMTYzLjg0IDIwMi4yNGg2NTUuMzZjMjIuNjIyIDAgNDAuOTYgMTguMzM4IDQwLjk2IDQwLjk2cy0xOC4zMzggNDAuOTYtNDAuOTYgNDAuOTZ2MGgtNjU1LjM2Yy0yMi42MjIgMC00MC45Ni0xOC4zMzgtNDAuOTYtNDAuOTZzMTguMzM4LTQwLjk2IDQwLjk2LTQwLjk2djB6TTE2My44NCA0MDcuMDQwaDY1NS4zNmMyMi42MjIgMCA0MC45NiAxOC4zMzggNDAuOTYgNDAuOTZzLTE4LjMzOCA0MC45Ni00MC45NiA0MC45NnYwaC02NTUuMzZjLTIyLjYyMiAwLTQwLjk2LTE4LjMzOC00MC45Ni00MC45NnMxOC4zMzgtNDAuOTYgNDAuOTYtNDAuOTZ2MHpNMTIyLjg4IDY1Mi44YzAuMDcwLTIyLjU5NCAxOC4zNjYtNDAuODkgNDAuOTUzLTQwLjk2aDY1NS4zNjdjMjIuNjIyIDAgNDAuOTYgMTguMzM4IDQwLjk2IDQwLjk2cy0xOC4zMzggNDAuOTYtNDAuOTYgNDAuOTZ2MGgtNjU1LjM2Yy0yMi41OTQtMC4wNzAtNDAuODktMTguMzY2LTQwLjk2LTQwLjk1M3YtMC4wMDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxODsiIGdseXBoLW5hbWU9Im1vcmVfaCIgZD0iTTEyOCA1NzZjLTcwLjY5MiAwLTEyOC01Ny4zMDgtMTI4LTEyOHM1Ny4zMDgtMTI4IDEyOC0xMjhjNzAuNjkyIDAgMTI4IDU3LjMwOCAxMjggMTI4djBjLTAuMjA1IDcwLjYxLTU3LjM5IDEyNy43OTUtMTI3Ljk4IDEyOGgtMC4wMjB6TTg5NiA1NzZjLTcwLjY5MiAwLTEyOC01Ny4zMDgtMTI4LTEyOHM1Ny4zMDgtMTI4IDEyOC0xMjhjNzAuNjkyIDAgMTI4IDU3LjMwOCAxMjggMTI4djBjLTAuMjA1IDcwLjYxLTU3LjM5IDEyNy43OTUtMTI3Ljk4IDEyOGgtMC4wMjB6TTUxMiA1NzZjLTcwLjY5MiAwLTEyOC01Ny4zMDgtMTI4LTEyOHM1Ny4zMDgtMTI4IDEyOC0xMjhjNzAuNjkyIDAgMTI4IDU3LjMwOCAxMjggMTI4djBjLTAuMjA1IDcwLjYxLTU3LjM5IDEyNy43OTUtMTI3Ljk4IDEyOGgtMC4wMjB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxOTsiIGdseXBoLW5hbWU9Im1vcmVfdiIgZD0iTTUxMiA3MDRjNzAuNjkyIDAgMTI4IDU3LjMwOCAxMjggMTI4cy01Ny4zMDggMTI4LTEyOCAxMjhjLTcwLjY5MiAwLTEyOC01Ny4zMDgtMTI4LTEyOHYwYzAuMjA1LTcwLjYxIDU3LjM5LTEyNy43OTUgMTI3Ljk4LTEyOGgwLjAyMHpNNTEyIDU3NmMtNzAuNjkyIDAtMTI4LTU3LjMwOC0xMjgtMTI4czU3LjMwOC0xMjggMTI4LTEyOGM3MC42OTIgMCAxMjggNTcuMzA4IDEyOCAxMjh2MGMtMC4yMDUgNzAuNjEtNTcuMzkgMTI3Ljc5NS0xMjcuOTggMTI4aC0wLjAyMHpNNTEyIDE5MmMtNzAuNjkyIDAtMTI4LTU3LjMwOC0xMjgtMTI4czU3LjMwOC0xMjggMTI4LTEyOGM3MC42OTIgMCAxMjggNTcuMzA4IDEyOCAxMjh2MGMtMC4yMDUgNzAuNjEtNTcuMzkgMTI3Ljc5NS0xMjcuOTggMTI4aC0wLjAyMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTFhOyIgZ2x5cGgtbmFtZT0icGRmIiBkPSJNODUzLjMyIDg3NC42NmgtNTEyYy00Ny4wNzYtMC4xMzktODUuMjAxLTM4LjI2NC04NS4zNC04NS4zMjd2LTUxMi4wMTNjMC4xNTEtNDcuMDY3IDM4LjI3MS04NS4xOCA4NS4zMjctODUuMzJoNTEyLjAxM2M0Ny4wNzYgMC4xMzkgODUuMjAxIDM4LjI2NCA4NS4zNCA4NS4zMjd2NTEyLjAxM2MtMC4xNTEgNDcuMDY3LTM4LjI3MSA4NS4xOC04NS4zMjcgODUuMzJoLTAuMDEzek00OTAuNjYgNTU0LjY2YzAtMC4wMjQgMC0wLjA1MyAwLTAuMDgyIDAtMzUuMzAxLTI4LjYxNy02My45MTgtNjMuOTE4LTYzLjkxOC0wLjAyOSAwLTAuMDU4IDAtMC4wODYgMGgtNDIuNjc1di01My4yNDhjLTAuNDUyLTE3LjMyNy0xNC42MDYtMzEuMjAxLTMyLTMxLjIwMXMtMzEuNTQ4IDEzLjg3NC0zMS45OTkgMzEuMTU5bC0wLjAwMSAwLjA0MnYxODEuMjQ4YzAuMDcwIDIzLjUzMiAxOS4xMjcgNDIuNTkgNDIuNjUzIDQyLjY2aDY0LjAwN2MwLjAyNCAwIDAuMDUzIDAgMC4wODIgMCAzNS4zMDEgMCA2My45MTgtMjguNjE3IDYzLjkxOC02My45MTggMC0wLjAyOSAwLTAuMDU4IDAtMC4wODZ2MC4wMDV6TTcwNCA0NjkuMzJjMC0wLjAyNCAwLTAuMDUzIDAtMC4wODIgMC0zNS4zMDEtMjguNjE3LTYzLjkxOC02My45MTgtNjMuOTE4LTAuMDI5IDAtMC4wNTggMC0wLjA4NiAwaC04NS4zMzVjLTAuMDYxLTAuMDAxLTAuMTMzLTAuMDAxLTAuMjA2LTAuMDAxLTExLjY3MyAwLTIxLjEzNSA5LjQ2My0yMS4xMzUgMjEuMTM1IDAgMC4wNzIgMCAwLjE0NSAwLjAwMSAwLjIxN3YtMC4wMTEgMjEzLjM0Yy0wLjAwMSAwLjA2MS0wLjAwMSAwLjEzMy0wLjAwMSAwLjIwNiAwIDExLjY3MyA5LjQ2MyAyMS4xMzUgMjEuMTM1IDIxLjEzNSAwLjA3MiAwIDAuMTQ1IDAgMC4yMTctMC4wMDFoODUuMzI5YzAuMDI0IDAgMC4wNTMgMCAwLjA4MiAwIDM1LjMwMSAwIDYzLjkxOC0yOC42MTcgNjMuOTE4LTYzLjkxOCAwLTAuMDI5IDAtMC4wNTggMC0wLjA4NnYwLjAwNXpNODc0LjY2IDYyOS4zM2MtMC4xMjctMTcuNjItMTQuMzcxLTMxLjg3Mi0zMS45NzctMzIuMDEwaC0zMi4wMjN2LTQyLjY2aDMyLjAxMGMxNy4zMjctMC40NTIgMzEuMjAxLTE0LjYwNiAzMS4yMDEtMzJzLTEzLjg3NC0zMS41NDgtMzEuMTU5LTMxLjk5OWwtMC4wNDItMC4wMDFoLTMyLjAxMHYtNTMuMjQ4Yy0wLjQ1Mi0xNy4zMjctMTQuNjA2LTMxLjIwMS0zMi0zMS4yMDFzLTMxLjU0OCAxMy44NzQtMzEuOTk5IDMxLjE1OWwtMC4wMDEgMC4wNDJ2MTgxLjI0OGMwLjA3MCAyMy41MzIgMTkuMTI3IDQyLjU5IDQyLjY1MyA0Mi42Nmg1My4yNTVjMTcuNjU2LTAuMDgwIDMxLjk1My0xNC4zNDIgMzIuMDkyLTMxLjk3N3YtMC4wMTN6TTM4My45OCA1NTQuNjZoNDIuNjZ2NDIuNjZoLTQyLjY2ek0xMjcuOTggNzA0Yy0yMy41MzktMC4wNzAtNDIuNjAyLTE5LjEzOS00Mi42Ni00Mi42NzV2LTU1NC42NjZjMC4xMzktNDcuMDc2IDM4LjI2NC04NS4yMDEgODUuMzI3LTg1LjM0aDU1NC42NzNjMjMuNTY2IDAgNDIuNjcgMTkuMTA0IDQyLjY3IDQyLjY3cy0xOS4xMDQgNDIuNjctNDIuNjcgNDIuNjdoLTUxMmMtMjMuNTMyIDAuMDcwLTQyLjU5IDE5LjEyNy00Mi42NiA0Mi42NTN2NTEyLjAwN2MtMC4wNTggMjMuNTQ4LTE5LjEzMiA0Mi42MjItNDIuNjc1IDQyLjY4aC0wLjAwNnpNNTk3LjMyIDQ2OS4zMmg0Mi42NnYxMjhoLTQyLjY2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MWI7IiBnbHlwaC1uYW1lPSJwaG90b19saWJyYXJ5IiBkPSJNOTM4LjY2IDI3Ny4zMnY1MTJjLTAuMTM5IDQ3LjA3Ni0zOC4yNjQgODUuMjAxLTg1LjMyNyA4NS4zNGgtNTEyLjAxM2MtNDcuMDc2LTAuMTM5LTg1LjIwMS0zOC4yNjQtODUuMzQtODUuMzI3di01MTIuMDEzYzAuMTUxLTQ3LjA2NyAzOC4yNzEtODUuMTggODUuMzI3LTg1LjMyaDUxMi4wMTNjNDcuMDY5IDAuMTM5IDg1LjE4OSAzOC4yNTMgODUuMzQgODUuMzA1djAuMDE0ek00ODYuMzggNDI1LjM3bDY5LjYzMi05My4wMjAgMTEwLjA4MCAxMzcuMzhjMy45MzYgNC44OTcgOS45MjUgOC4wMDQgMTYuNjQgOC4wMDRzMTIuNzA0LTMuMTA3IDE2LjYwOC03Ljk2MmwwLjAzMi0wLjA0MSAxMjYuMy0xNTcuODZjMi45MTgtMy42MDkgNC42ODQtOC4yNTQgNC42ODQtMTMuMzEyIDAtMTEuNzQxLTkuNTE4LTIxLjI1OC0yMS4yNTgtMjEuMjU4LTAuMDIwIDAtMC4wMzkgMC0wLjA1OSAwaC00MjUuMDU5Yy0wLjAxMiAwLTAuMDI3IDAtMC4wNDEgMC0xMS43NzUgMC0yMS4zMiA5LjU0NS0yMS4zMiAyMS4zMiAwIDQuODQ1IDEuNjE2IDkuMzEzIDQuMzM5IDEyLjg5M2wtMC4wMzgtMC4wNTIgODUuMzQgMTEzLjkxYzQuMDAzIDUuMDg2IDEwLjE1OCA4LjMyMiAxNy4wNzAgOC4zMjJzMTMuMDY3LTMuMjM2IDE3LjAzNS04LjI3NmwwLjAzNS0wLjA0NnpNODUuMzIgNjYxLjMydi01NTQuNjZjMC4xMzktNDcuMDc2IDM4LjI2NC04NS4yMDEgODUuMzI3LTg1LjM0aDU1NC42NzNjMjMuNTY2IDAgNDIuNjcgMTkuMTA0IDQyLjY3IDQyLjY3cy0xOS4xMDQgNDIuNjctNDIuNjcgNDIuNjdoLTUxMmMtMjMuNTMyIDAuMDcwLTQyLjU5IDE5LjEyNy00Mi42NiA0Mi42NTN2NTEyLjAwN2MwIDIzLjU2Ni0xOS4xMDQgNDIuNjctNDIuNjcgNDIuNjdzLTQyLjY3LTE5LjEwNC00Mi42Ny00Mi42N3YweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MWM7IiBnbHlwaC1uYW1lPSJwaG90byIgZD0iTTg5NiAxNDkuMzR2NTk3LjMyYy0wLjEzOSA0Ny4wNzYtMzguMjY0IDg1LjIwMS04NS4zMjcgODUuMzRoLTU5Ny4zMzNjLTQ3LjA3Ni0wLjEzOS04NS4yMDEtMzguMjY0LTg1LjM0LTg1LjMyN3YtNTk3LjMzM2MwLjEzOS00Ny4wNzYgMzguMjY0LTg1LjIwMSA4NS4zMjctODUuMzRoNTk3LjMzM2M0Ny4wNzYgMC4xMzkgODUuMjAxIDM4LjI2NCA4NS4zNCA4NS4zMjd2MC4wMTN6TTM3OS43NCAzNjMuNTJsODkuNi0xMDcuOTUgMTMyLjI2IDE3MC4yM2MzLjk1NyA1LjA1MSAxMC4wNTYgOC4yNjcgMTYuOTA3IDguMjY3IDcuMDQxIDAgMTMuMjg4LTMuMzk2IDE3LjE5My04LjY0bDAuMDQwLTAuMDU3IDE0OS42NjgtMTk5LjU3OGMyLjY3NS0zLjUyNCA0LjI4NS03Ljk4NCA0LjI4NS0xMi44MiAwLTExLjc3NS05LjU0NS0yMS4zMi0yMS4zMi0yMS4zMi0wLjAwOSAwLTAuMDE4IDAtMC4wMjcgMGgtNTExLjQ4N2MtMC4wMTIgMC0wLjAyNSAwLTAuMDM5IDAtMTEuNzQxIDAtMjEuMjU4IDkuNTE4LTIxLjI1OCAyMS4yNTggMCA1LjA0OCAxLjc2IDkuNjg2IDQuNjk5IDEzLjMzMmwtMC4wMzItMC4wNDEgMTA2LjIzIDEzNi41NGMzLjg3NyA1LjIxMyAxMC4wMTkgOC41NTQgMTYuOTQxIDguNTU0IDYuNTc2IDAgMTIuNDQ4LTMuMDE1IDE2LjMwOS03LjczOGwwLjAzMC0wLjAzOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTFkOyIgZ2x5cGgtbmFtZT0icHJpbnQiIGQ9Ik04MTAuNjYgNjE4LjY2aC01OTcuMzRjLTAuMDQ5IDAtMC4xMDYgMC0wLjE2NCAwLTcwLjYwMiAwLTEyNy44MzYtNTcuMjM0LTEyNy44MzYtMTI3LjgzNiAwLTAuMDU4IDAtMC4xMTUgMC0wLjE3M3YwLjAwOS0xNzAuNjZjMC4xMzktNDcuMDc2IDM4LjI2NC04NS4yMDEgODUuMzI3LTg1LjM0aDg1LjM1M3YtODUuMzRjMC4xNTEtNDcuMDYwIDM4LjI2LTg1LjE2OSA4NS4zMDUtODUuMzJoMzQxLjM1NGM0Ny4wNzYgMC4xMzkgODUuMjAxIDM4LjI2NCA4NS4zNCA4NS4zMjd2ODUuMzMzaDg1LjMyYzQ3LjA3NiAwLjEzOSA4NS4yMDEgMzguMjY0IDg1LjM0IDg1LjMyN3YxNzAuNjczYzAgMC4wNDkgMCAwLjEwNiAwIDAuMTY0IDAgNzAuNjAyLTU3LjIzNCAxMjcuODM2LTEyNy44MzYgMTI3LjgzNi0wLjA1OCAwLTAuMTE1IDAtMC4xNzMgMGgwLjAwOXpNNjM5Ljk4IDE0OS4zNGgtMjU2Yy0yMy41MzIgMC4wNzAtNDIuNTkgMTkuMTI3LTQyLjY2IDQyLjY1M3YxNzAuNjY3aDM0MS4zNHYtMTcwLjY2Yy0wLjA3MC0yMy41MzktMTkuMTM5LTQyLjYwMi00Mi42NzUtNDIuNjZoLTAuMDA2ek04MTAuNjYgNDQ4Yy0yMy41NiAwLTQyLjY2IDE5LjA5OS00Mi42NiA0Mi42NnMxOS4wOTkgNDIuNjYgNDIuNjYgNDIuNjZjMjMuNTYgMCA0Mi42Ni0xOS4wOTkgNDIuNjYtNDIuNjZ2MGMtMC4wNzAtMjMuNTMyLTE5LjEyNy00Mi41OS00Mi42NTMtNDIuNjZoLTAuMDA3ek03MjUuMzIgODMyaC00MjYuNjZjLTIzLjUzMi0wLjA3MC00Mi41OS0xOS4xMjctNDIuNjYtNDIuNjUzdi04NS4zNDdjMC4wNzAtMjMuNTMyIDE5LjEyNy00Mi41OSA0Mi42NTMtNDIuNjZoNDI2LjY2N2MyMy41MzIgMC4wNzAgNDIuNTkgMTkuMTI3IDQyLjY2IDQyLjY1M3Y4NS4zNDdjLTAuMDcwIDIzLjUzMi0xOS4xMjcgNDIuNTktNDIuNjUzIDQyLjY2aC0wLjAwN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTFlOyIgZ2x5cGgtbmFtZT0icmFkaW9fY2hlY2tlZCIgZD0iTTUxMiA4NzAuNjY2Yy0yMzMuNDEyLTAuMDEyLTQyMi42MjUtMTg5LjIzMi00MjIuNjI1LTQyMi42NDYgMC0yMzMuNDIxIDE4OS4yMjUtNDIyLjY0NiA0MjIuNjQ2LTQyMi42NDZzNDIyLjY0NiAxODkuMjI1IDQyMi42NDYgNDIyLjY0NnYwYy0wLjA5MyAyMzMuMzkxLTE4OS4yNzQgNDIyLjU2NC00MjIuNjU5IDQyMi42NDZoLTAuMDA4ek01MTIgMTA5Ljg5NmMtMTg2Ljc0MSAwLTMzOC4xMjUgMTUxLjM4NC0zMzguMTI1IDMzOC4xMjVzMTUxLjM4NCAzMzguMTI1IDMzOC4xMjUgMzM4LjEyNWMxODYuNzQxIDAgMzM4LjEyNS0xNTEuMzg0IDMzOC4xMjUtMzM4LjEyNXYwYzAtMC4wMzAgMC0wLjA2NiAwLTAuMTAyIDAtMTg2LjY4NS0xNTEuMzM4LTMzOC4wMjItMzM4LjAyMi0zMzguMDIyLTAuMDM2IDAtMC4wNzIgMC0wLjEwOCAwaDAuMDA1ek03NDMuNjkgNDQ4YzAtMTI0LjQxOS0xMDAuODYxLTIyNS4yOC0yMjUuMjgtMjI1LjI4cy0yMjUuMjggMTAwLjg2MS0yMjUuMjggMjI1LjI4YzAgMTI0LjQxOSAxMDAuODYxIDIyNS4yOCAyMjUuMjggMjI1LjI4czIyNS4yOC0xMDAuODYxIDIyNS4yOC0yMjUuMjh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxZjsiIGdseXBoLW5hbWU9InJhZGlvIiBkPSJNNTEyIDg3MC42NjZjLTIzMy40MTItMC4wMTItNDIyLjYyNS0xODkuMjMyLTQyMi42MjUtNDIyLjY0NiAwLTIzMy40MjEgMTg5LjIyNS00MjIuNjQ2IDQyMi42NDYtNDIyLjY0NnM0MjIuNjQ2IDE4OS4yMjUgNDIyLjY0NiA0MjIuNjQ2djBjLTAuMDkzIDIzMy4zOTEtMTg5LjI3NCA0MjIuNTY0LTQyMi42NTkgNDIyLjY0NmgtMC4wMDh6TTUxMiAxMDkuODk2Yy0xODYuNzQxIDAtMzM4LjEyNSAxNTEuMzg0LTMzOC4xMjUgMzM4LjEyNXMxNTEuMzg0IDMzOC4xMjUgMzM4LjEyNSAzMzguMTI1YzE4Ni43NDEgMCAzMzguMTI1LTE1MS4zODQgMzM4LjEyNS0zMzguMTI1djBjMC0wLjAzMCAwLTAuMDY2IDAtMC4xMDIgMC0xODYuNjg1LTE1MS4zMzgtMzM4LjAyMi0zMzguMDIyLTMzOC4wMjItMC4wMzYgMC0wLjA3MiAwLTAuMTA4IDBoMC4wMDV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkyMDsiIGdseXBoLW5hbWU9InJlbW92ZSIgZD0iTTc2OCA0MDUuMzMzaC01MTJjLTIzLjU2NCAwLTQyLjY2NyAxOS4xMDMtNDIuNjY3IDQyLjY2N3MxOS4xMDMgNDIuNjY3IDQyLjY2NyA0Mi42Njd2MGg1MTJjMjMuNTY0IDAgNDIuNjY3LTE5LjEwMyA0Mi42NjctNDIuNjY3cy0xOS4xMDMtNDIuNjY3LTQyLjY2Ny00Mi42Njd2MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTIxOyIgZ2x5cGgtbmFtZT0icnBsdXMiIGQ9Ik01MTIgNjgzLjUyYy0yNS45ODItMC4wODEtNDcuMDIzLTIxLjEyMi00Ny4xMDQtNDcuMDk2di0xNDEuMzJoLTE0MS4zMTJjLTI2LjAxNSAwLTQ3LjEwNC0yMS4wODktNDcuMTA0LTQ3LjEwNHMyMS4wODktNDcuMTA0IDQ3LjEwNC00Ny4xMDR2MGgxNDEuMzEydi0xNDEuMzEyYzAtMjYuMDE1IDIxLjA4OS00Ny4xMDQgNDcuMTA0LTQ3LjEwNHM0Ny4xMDQgMjEuMDg5IDQ3LjEwNCA0Ny4xMDR2MCAxNDEuMzEyaDE0MS4zMTJjMjYuMDE1IDAgNDcuMTA0IDIxLjA4OSA0Ny4xMDQgNDcuMTA0cy0yMS4wODkgNDcuMTA0LTQ3LjEwNCA0Ny4xMDR2MGgtMTQxLjMxMnYxNDEuMzEyYy0wLjA4MSAyNS45ODItMjEuMTIyIDQ3LjAyMy00Ny4wOTYgNDcuMTA0aC0wLjAwOHpNNTEyIDkxOS4wNDBjLTI2MC4xNDggMC00NzEuMDQwLTIxMC44OTItNDcxLjA0MC00NzEuMDQwczIxMC44OTItNDcxLjA0MCA0NzEuMDQwLTQ3MS4wNDBjMjYwLjE0OCAwIDQ3MS4wNDAgMjEwLjg5MiA0NzEuMDQwIDQ3MS4wNDB2MGMtMC40NDIgMjU5Ljk3LTIxMS4wNjkgNDcwLjU5Ny00NzAuOTk3IDQ3MS4wNDBoLTAuMDQzek01MTIgNzEuMTY4Yy0yMDguMTE5IDAtMzc2LjgzMiAxNjguNzEzLTM3Ni44MzIgMzc2LjgzMnMxNjguNzEzIDM3Ni44MzIgMzc2LjgzMiAzNzYuODMyYzIwOC4xMTkgMCAzNzYuODMyLTE2OC43MTMgMzc2LjgzMi0zNzYuODMydjBjLTAuMjgtMjA4LjAwNi0xNjguODI2LTM3Ni41NTItMzc2LjgwNS0zNzYuODMyaC0wLjAyN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTIyOyIgZ2x5cGgtbmFtZT0ic2F2ZSIgZD0iTTgxMC42NiA0MDUuMzR2LTIxMy4zNGMtMC4wNzAtMjMuNTMyLTE5LjEyNy00Mi41OS00Mi42NTMtNDIuNjZoLTUxMi4wMDdjLTIzLjUzMiAwLjA3MC00Mi41OSAxOS4xMjctNDIuNjYgNDIuNjUzdjIxMy4zNDdjMCAyMy41NjYtMTkuMTA0IDQyLjY3LTQyLjY3IDQyLjY3cy00Mi42Ny0xOS4xMDQtNDIuNjctNDIuNjd2MC0yNTZjMC4xMzktNDcuMDc2IDM4LjI2NC04NS4yMDEgODUuMzI3LTg1LjM0aDU5Ny4zMzNjNDcuMDc2IDAuMTM5IDg1LjIwMSAzOC4yNjQgODUuMzQgODUuMzI3djI1Ni4wMTNjMCAyMy41NjYtMTkuMTA0IDQyLjY3LTQyLjY3IDQyLjY3cy00Mi42Ny0xOS4xMDQtNDIuNjctNDIuNjd2MHpNNTU0LjY2IDQxOS40M2w4MC4yMiA4MC4yMmM3LjY5OSA3LjcwMSAxOC4zMzYgMTIuNDY1IDMwLjA4NSAxMi40NjUgMjMuNDk0IDAgNDIuNTQtMTkuMDQ2IDQyLjU0LTQyLjU0IDAtMTEuNzQ0LTQuNzU5LTIyLjM3Ny0xMi40NTUtMzAuMDc1bC0xNTMuMTctMTUzLjE3Yy03LjY5NC03LjcxMi0xOC4zMzItMTIuNDgzLTMwLjA4NS0xMi40ODNzLTIyLjM5MSA0Ljc3MS0zMC4wODQgMTIuNDgybC0xNTMuMTcxIDE1My4xNzFjLTcuOTY1IDcuNzM5LTEyLjkwNyAxOC41NTItMTIuOTA3IDMwLjUyIDAgMjMuNDkzIDE5LjA0NCA0Mi41MzcgNDIuNTM3IDQyLjUzNyAxMS45NjggMCAyMi43ODEtNC45NDIgMzAuNTEtMTIuODk3bDAuMDEwLTAuMDEwIDgwLjY1LTgwLjIydjM2OS45MWMwIDIzLjU2NiAxOS4xMDQgNDIuNjcgNDIuNjcgNDIuNjdzNDIuNjctMTkuMTA0IDQyLjY3LTQyLjY3djB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkyMzsiIGdseXBoLW5hbWU9InNlYXJjaCIgZD0iTTY2MS4zNCAzNjIuNjhoLTMzLjYyOGwtMTEuOTQgMTEuNTNjNDEuNyA0OC4zNTUgNjcuMDk3IDExMS43OTMgNjcuMDk3IDE4MS4xNjIgMCAxNTMuNjAxLTEyNC41MTggMjc4LjExOC0yNzguMTE4IDI3OC4xMThzLTI3OC4xMTgtMTI0LjUxOC0yNzguMTE4LTI3OC4xMThjMC0xNTMuNjAxIDEyNC41MTgtMjc4LjExOCAyNzguMTE4LTI3OC4xMTggNjkuMzcgMCAxMzIuODA3IDI1LjM5NyAxODEuNTIyIDY3LjRsLTAuMzYtMC4zMDQgMTEuNTMtMTEuOTR2LTMzLjcxbDE4MS4yNDgtMTgxLjQzMmM3LjkzMy03LjE3IDE4LjUtMTEuNTU3IDMwLjA5MS0xMS41NTcgMjQuODI3IDAgNDQuOTU0IDIwLjEyNiA0NC45NTQgNDQuOTU0IDAgMTEuNTkxLTQuMzg3IDIyLjE1OC0xMS41OTIgMzAuMTNsMC4wMzUtMC4wMzl6TTQwNS4zNCAzNjIuNjhjLTEwNi4wMzkgMC0xOTIgODUuOTYxLTE5MiAxOTJzODUuOTYxIDE5MiAxOTIgMTkyYzEwNi4wMzkgMCAxOTItODUuOTYxIDE5Mi0xOTJ2MGMwLTAuMDc5IDAtMC4xNzMgMC0wLjI2NiAwLTEwNS44OTItODUuODQyLTE5MS43MzQtMTkxLjczNC0xOTEuNzM0LTAuMDk0IDAtMC4xODcgMC0wLjI4MSAwaDAuMDE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MjQ7IiBnbHlwaC1uYW1lPSJzb3J0IiBkPSJNMTc3LjM5OCAxOTYuNzUxaDE2Ny41MDZjMjIuNzI5IDAuNTE5IDQwLjk1NiAxOS4wNjYgNDAuOTU2IDQxLjg3MXMtMTguMjI3IDQxLjM1My00MC45MDcgNDEuODdsLTAuMDQ4IDAuMDAxaC0xNjcuNTA2Yy0yMi43MjktMC41MTktNDAuOTU2LTE5LjA2Ni00MC45NTYtNDEuODcxczE4LjIyNy00MS4zNTMgNDAuOTA3LTQxLjg3bDAuMDQ4LTAuMDAxek0xMzUuNTE2IDY1Ny4zNjdjMC4wNzAtMjMuMTAzIDE4Ljc3OS00MS44MTIgNDEuODc1LTQxLjg4Mmg2NjkuOTljMjIuNzI5IDAuNTE5IDQwLjk1NiAxOS4wNjYgNDAuOTU2IDQxLjg3MXMtMTguMjI3IDQxLjM1My00MC45MDcgNDEuODdsLTAuMDQ4IDAuMDAxaC02NjkuOTgzYy0yMy4wOTUtMC4wNzAtNDEuOC0xOC43NjctNDEuODgyLTQxLjg1M3YtMC4wMDh6TTE3Ny4zOTggNDA2LjExOGg0MTguNzM0YzIyLjcyOSAwLjUxOSA0MC45NTYgMTkuMDY2IDQwLjk1NiA0MS44NzFzLTE4LjIyNyA0MS4zNTMtNDAuOTA3IDQxLjg3bC0wLjA0OCAwLjAwMWgtNDE4LjczNGMtMjIuNzI5LTAuNTE5LTQwLjk1Ni0xOS4wNjYtNDAuOTU2LTQxLjg3MXMxOC4yMjctNDEuMzUzIDQwLjkwNy00MS44N2wwLjA0OC0wLjAwMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTI1OyIgZ2x5cGgtbmFtZT0idGV4dCIgZD0iTTYyMi41MSA4NDkuNDljLTE1LjQ5OCAxNS41NDktMzYuOTM2IDI1LjE3LTYwLjYyMSAyNS4xNy0wLjAxNCAwLTAuMDI5IDAtMC4wNDMgMGgtMzA1LjgyNmMtNDcuMDc2LTAuMTM5LTg1LjIwMS0zOC4yNjQtODUuMzQtODUuMzI3di02ODIuNjczYzAtMC4wMzcgMC0wLjA4MCAwLTAuMTIzIDAtNDYuOTU2IDM3Ljk3OC04NS4wNDIgODQuODkzLTg1LjIxN2g1MTIuNDQ3YzQ3LjA2NyAwLjE1MSA4NS4xOCAzOC4yNzEgODUuMzIgODUuMzI3djQ3Ni42MDNjMCAwLjAzNyAwIDAuMDgxIDAgMC4xMjQgMCAyMy41MTMtOS42NjQgNDQuNzY4LTI1LjIzNyA2MC4wMTFsLTAuMDE1IDAuMDE1LTIwNS41NzggMjA2LjA5MHpNNjQwIDE5Mi4wODJoLTI1NmMtMjMuNTY2IDAtNDIuNjcgMTkuMTA0LTQyLjY3IDQyLjY3czE5LjEwNCA0Mi42NyA0Mi42NyA0Mi42N2gyNTZjMjMuNTY2IDAgNDIuNjctMTkuMTA0IDQyLjY3LTQyLjY3cy0xOS4xMDQtNDIuNjctNDIuNjctNDIuNjd2MHpNNjQwIDM2Mi43NDJoLTI1NmMtMjMuNTY2IDAtNDIuNjcgMTkuMTA0LTQyLjY3IDQyLjY3czE5LjEwNCA0Mi42NyA0Mi42NyA0Mi42N2gyNTZjMjMuNTY2IDAgNDIuNjctMTkuMTA0IDQyLjY3LTQyLjY3cy0xOS4xMDQtNDIuNjctNDIuNjctNDIuNjd2MHpNNTU0LjY4IDYxOC42NnYxOTJsMjM0LjY2LTIzNC42NmgtMTkyYy0yMy41MzIgMC4wNzAtNDIuNTkgMTkuMTI3LTQyLjY2IDQyLjY1M3YwLjAwN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTI2OyIgZ2x5cGgtbmFtZT0idGlja2V0bGlzdCIgZD0iTTEzNS4xNjggMTI0LjQxNmg3NTMuNjY0YzUyLjAzMCAwIDk0LjIwOCA0Mi4xNzggOTQuMjA4IDk0LjIwOHMtNDIuMTc4IDk0LjIwOC05NC4yMDggOTQuMjA4djBoLTc1My42NjRjLTUyLjAzMCAwLTk0LjIwOC00Mi4xNzgtOTQuMjA4LTk0LjIwOHM0Mi4xNzgtOTQuMjA4IDk0LjIwOC05NC4yMDh2MHpNMTM1LjE2OCAyNjUuNzI4aDk0LjIwOHYtOTQuMjA4aC05NC4yMDh6TTQwLjk2IDc4My44NzJjMC4xNjItNTEuOTY0IDQyLjI0NC05NC4wNDYgOTQuMTkyLTk0LjIwOGg3NTMuNjhjNTIuMDMwIDAgOTQuMjA4IDQyLjE3OCA5NC4yMDggOTQuMjA4cy00Mi4xNzggOTQuMjA4LTk0LjIwOCA5NC4yMDh2MGgtNzUzLjY2NGMtNTEuOTY0LTAuMTYyLTk0LjA0Ni00Mi4yNDQtOTQuMjA4LTk0LjE5MnYtMC4wMTZ6TTIyOS4zNzYgNzM2Ljc2OGgtOTQuMjA4djk0LjIwOGg5NC4yMDh6TTEzNS4xNjggNDA3LjA0MGg3NTMuNjY0YzUyLjAzMCAwIDk0LjIwOCA0Mi4xNzggOTQuMjA4IDk0LjIwOHMtNDIuMTc4IDk0LjIwOC05NC4yMDggOTQuMjA4djBoLTc1My42NjRjLTUyLjAzMCAwLTk0LjIwOC00Mi4xNzgtOTQuMjA4LTk0LjIwOHM0Mi4xNzgtOTQuMjA4IDk0LjIwOC05NC4yMDh2MHpNMTM1LjE2OCA1NDguMzUyaDk0LjIwOHYtOTQuMjA4aC05NC4yMDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkyNzsiIGdseXBoLW5hbWU9InRpbWUiIGQ9Ik01MTEuNTcgODgzLjJjLTI0MC4xNjktMC4yNDUtNDM0Ljc3LTE5NC45OTctNDM0Ljc3LTQzNS4yIDAtMjQwLjM1NCAxOTQuODQ2LTQzNS4yIDQzNS4yLTQzNS4yczQzNS4yIDE5NC44NDYgNDM1LjIgNDM1LjJ2MGMwIDAuMDYxIDAgMC4xMzMgMCAwLjIwNSAwIDI0MC4yNDEtMTk0Ljc1NCA0MzQuOTk1LTQzNC45OTUgNDM0Ljk5NS0wLjIyMyAwLTAuNDQ3IDAtMC42Ny0wLjAwMWgwLjAzNXpNNTEyIDk5Ljg0Yy0xOTIuMjgzIDAtMzQ4LjE2IDE1NS44NzctMzQ4LjE2IDM0OC4xNnMxNTUuODc3IDM0OC4xNiAzNDguMTYgMzQ4LjE2YzE5Mi4yODMgMCAzNDguMTYtMTU1Ljg3NyAzNDguMTYtMzQ4LjE2djBjMC0xOTIuMjgzLTE1NS44NzctMzQ4LjE2LTM0OC4xNi0zNDguMTZ2MHpNNTAyLjQxNSA2NjUuNmgtMi42MjFjLTAuMDM3IDAtMC4wODAgMC0wLjEyMyAwLTE3LjIzOCAwLTMxLjIxMi0xMy45NzQtMzEuMjEyLTMxLjIxMiAwLTAuMDQzIDAtMC4wODcgMC0wLjEzdjAuMDA3LTIwNS40MTRjLTAuMDAxLTAuMDgyLTAuMDAxLTAuMTgtMC4wMDEtMC4yNzcgMC0xNS43NjEgOC40NzgtMjkuNTQxIDIxLjEyMS0zNy4wMzBsMC4xOTktMC4xMDkgMTgwLjYzNC0xMDguMjk4YzQuNjUyLTIuOTE4IDEwLjMwNi00LjY0OSAxNi4zNjUtNC42NDkgMTcuMTkyIDAgMzEuMTMgMTMuOTM3IDMxLjEzIDMxLjEzIDAgMTEuNTI5LTYuMjY3IDIxLjU5My0xNS41OCAyNi45NzRsLTAuMTUgMC4wODAtMTY4LjQyOCAxMDAuMDY1djE5Ny41M2MwIDAuMDM3IDAgMC4wODAgMCAwLjEyMyAwIDE3LjIzOC0xMy45NzQgMzEuMjEyLTMxLjIxMiAzMS4yMTItMC4wNDMgMC0wLjA4NyAwLTAuMTMgMGgwLjAwN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTI4OyIgZ2x5cGgtbmFtZT0idG9nZ2xlX29mZiIgZD0iTTczNy4zNiA3MDguMjU2aC00MzMuNzQ0Yy0xNDMuNzI3IDAtMjYwLjI0LTExNi41MTMtMjYwLjI0LTI2MC4yNHMxMTYuNTEzLTI2MC4yNCAyNjAuMjQtMjYwLjI0djBoNDMzLjc0NGMxNDMuNzI3IDAgMjYwLjI0IDExNi41MTMgMjYwLjI0IDI2MC4yNHMtMTE2LjUxMyAyNjAuMjQtMjYwLjI0IDI2MC4yNHYwek03MzcuMzYgMjc0LjUxMmgtNDMzLjc0NGMtOTUuODE5IDAtMTczLjQ5NiA3Ny42NzctMTczLjQ5NiAxNzMuNDk2czc3LjY3NyAxNzMuNDk2IDE3My40OTYgMTczLjQ5NnYwaDQzMy43NDRjOTUuODE5IDAgMTczLjQ5Ni03Ny42NzcgMTczLjQ5Ni0xNzMuNDk2cy03Ny42NzctMTczLjQ5Ni0xNzMuNDk2LTE3My40OTZ2MHpNMzAzLjYxNiA1NzguMTI4Yy03MS44NTQtMC4wMTgtMTMwLjA5Ni01OC4yNzItMTMwLjA5Ni0xMzAuMTI4IDAtNzEuODY4IDU4LjI2LTEzMC4xMjggMTMwLjEyOC0xMzAuMTI4czEzMC4xMjggNTguMjYgMTMwLjEyOCAxMzAuMTI4YzAgMC4wMDYgMCAwLjAxMSAwIDAuMDE3di0wLjAwMWMwIDAuMDQ4IDAgMC4xMDQgMCAwLjE2IDAgNzEuNzcxLTU4LjE4MSAxMjkuOTUyLTEyOS45NTIgMTI5Ljk1Mi0wLjA3MyAwLTAuMTQ2IDAtMC4yMiAwaDAuMDExeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5Mjk7IiBnbHlwaC1uYW1lPSJ0b2dnbGVfb24iIGQ9Ik03MzcuMzYgNzA4LjI1NmgtNDMzLjc0NGMtMTQzLjcyNyAwLTI2MC4yNC0xMTYuNTEzLTI2MC4yNC0yNjAuMjRzMTE2LjUxMy0yNjAuMjQgMjYwLjI0LTI2MC4yNHYwaDQzMy43NDRjMTQzLjcyNyAwIDI2MC4yNCAxMTYuNTEzIDI2MC4yNCAyNjAuMjRzLTExNi41MTMgMjYwLjI0LTI2MC4yNCAyNjAuMjR2MHpNNzM3LjM2IDI3NC41MTJoLTQzMy43NDRjLTk1LjgxOSAwLTE3My40OTYgNzcuNjc3LTE3My40OTYgMTczLjQ5NnM3Ny42NzcgMTczLjQ5NiAxNzMuNDk2IDE3My40OTZ2MGg0MzMuNzQ0Yzk1LjgxOSAwIDE3My40OTYtNzcuNjc3IDE3My40OTYtMTczLjQ5NnMtNzcuNjc3LTE3My40OTYtMTczLjQ5Ni0xNzMuNDk2djB6TTczNy4zNiA1NzguMTI4Yy03MS44NjggMC0xMzAuMTI4LTU4LjI2LTEzMC4xMjgtMTMwLjEyOHM1OC4yNi0xMzAuMTI4IDEzMC4xMjgtMTMwLjEyOGM3MS44NjggMCAxMzAuMTI4IDU4LjI2IDEzMC4xMjggMTMwLjEyOHYwYzAgMC4wNTIgMCAwLjExNCAwIDAuMTc2IDAgNzEuNzcxLTU4LjE4MSAxMjkuOTUyLTEyOS45NTIgMTI5Ljk1Mi0wLjA2MiAwLTAuMTI0IDAtMC4xODYgMGgwLjAwOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTJhOyIgZ2x5cGgtbmFtZT0idmlzaWJsZSIgZD0iTTUxMiA3ODkuMzRjLTIxMi4xMjMtMC4xMjQtMzkzLjYyLTEzMS4xMTYtNDY4LjEzNi0zMTYuNjA1bC0xLjIwNS0zLjM5NWM3NS42MjMtMTg4Ljk1MyAyNTcuMTczLTMxOS45OTMgNDY5LjMzLTMxOS45OTNzMzkzLjcwNyAxMzEuMDQxIDQ2OC4xMjggMzE2LjU5OWwxLjIwMiAzLjM5NWMtNzUuNzE3IDE4OC44NzctMjU3LjIwNCAzMTkuODY3LTQ2OS4zMDIgMzIwaC0wLjAxN3pNNTEyIDI1NmMtMC4wMDYgMC0wLjAxMyAwLTAuMDIwIDAtMTE3LjgyNSAwLTIxMy4zNCA5NS41MTYtMjEzLjM0IDIxMy4zNHM5NS41MTYgMjEzLjM0IDIxMy4zNCAyMTMuMzRjMTE3LjgyNSAwIDIxMy4zNC05NS41MTYgMjEzLjM0LTIxMy4zNHYwYy0wLjAzNS0xMTcuODAzLTk1LjUxOC0yMTMuMjkzLTIxMy4zMTUtMjEzLjM0aC0wLjAwNXpNNTEyIDU5Ny4zNGMtNzAuNjkyIDAtMTI4LTU3LjMwOC0xMjgtMTI4czU3LjMwOC0xMjggMTI4LTEyOGM3MC42OTIgMCAxMjggNTcuMzA4IDEyOCAxMjh2MGMwIDAuMDQ5IDAgMC4xMDYgMCAwLjE2NCAwIDcwLjYwMi01Ny4yMzQgMTI3LjgzNi0xMjcuODM2IDEyNy44MzYtMC4wNTggMC0wLjExNSAwLTAuMTczIDBoMC4wMDl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkzMDsiIGdseXBoLW5hbWU9ImFjY2Vzc190aW1lX2JsYWNrXzI0ZHAiIGQ9Ik01MTEuNTczIDg3NC42NjdjLTIzNS41MiAwLTQyNi4yNC0xOTEuMTQ3LTQyNi4yNC00MjYuNjY3czE5MC43Mi00MjYuNjY3IDQyNi4yNC00MjYuNjY3YzIzNS45NDcgMCA0MjcuMDkzIDE5MS4xNDcgNDI3LjA5MyA0MjYuNjY3cy0xOTEuMTQ3IDQyNi42NjctNDI3LjA5MyA0MjYuNjY3ek01MTIgMTA2LjY2N2MtMTg4LjU4NyAwLTM0MS4zMzMgMTUyLjc0Ny0zNDEuMzMzIDM0MS4zMzNzMTUyLjc0NyAzNDEuMzMzIDM0MS4zMzMgMzQxLjMzMyAzNDEuMzMzLTE1Mi43NDcgMzQxLjMzMy0zNDEuMzMzLTE1Mi43NDctMzQxLjMzMy0zNDEuMzMzLTM0MS4zMzN6TTUwMi42MTMgNjYxLjMzM2gtMi41NmMtMTcuMDY3IDAtMzAuNzItMTMuNjUzLTMwLjcyLTMwLjcydi0yMDEuMzg3YzAtMTQuOTMzIDcuNjgtMjkuMDEzIDIwLjkwNy0zNi42OTNsMTc3LjA2Ny0xMDYuMjRjMTQuNTA3LTguNTMzIDMzLjI4LTQuMjY3IDQxLjgxMyAxMC4yNCA4Ljk2IDE0LjUwNyA0LjI2NyAzMy43MDctMTAuNjY3IDQyLjI0bC0xNjUuMTIgOTguMTMzdjE5My43MDdjMCAxNy4wNjctMTMuNjUzIDMwLjcyLTMwLjcyIDMwLjcyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MzE7IiBnbHlwaC1uYW1lPSJhY2Nlc3NfdGltZV9maWxsZWRfYmxhY2tfMjRkcCIgZD0iTTUxMS41NzMgODc0LjY2N2MtMjM1LjUyIDAtNDI2LjI0LTE5MS4xNDctNDI2LjI0LTQyNi42NjdzMTkwLjcyLTQyNi42NjcgNDI2LjI0LTQyNi42NjdjMjM1Ljk0NyAwIDQyNy4wOTMgMTkxLjE0NyA0MjcuMDkzIDQyNi42NjdzLTE5MS4xNDcgNDI2LjY2Ny00MjcuMDkzIDQyNi42Njd6TTY4Mi42NjcgMjc3LjMzM2MtMTYuNjQtMTYuNjQtNDMuNTItMTYuNjQtNjAuMTYgMGwtMTQwLjM3MyAxNDAuMzczYy04LjEwNyA4LjEwNy0xMi44IDE4Ljc3My0xMi44IDMwLjI5M3YxNzAuNjY3YzAgMjMuNDY3IDE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42Njd2MGMyMy40NjcgMCA0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di0xNTMuMTczbDEyOC0xMjhjMTYuNjQtMTYuNjQgMTYuNjQtNDMuNTIgMC02MC4xNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTMyOyIgZ2x5cGgtbmFtZT0iYWNjb3VudF90cmVlX2JsYWNrXzI0ZHAiIGQ9Ik03MjUuMzMzIDQ5MC42NjdoMTI4YzQ3LjM2IDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3YxNzAuNjY3YzAgNDcuMzYtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM2gtMTI4Yy00Ny4zNiAwLTg1LjMzMy0zOC40LTg1LjMzMy04NS4zMzN2LTQyLjY2N2gtMjU1LjU3M3Y0Mi42NjdjMCA0Ny4zNi0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzaC0xMjguNDI3Yy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi0xNzAuNjY3YzAtNDcuMzYgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM2gxMjhjNDcuMzYgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzdjQyLjY2N2g4NS4zMzN2LTI5OS4wOTNjMC03MC40IDU3LjE3My0xMjcuNTczIDEyNy41NzMtMTI3LjU3M2g0My4wOTN2LTQyLjY2N2MwLTQ3LjM2IDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoMTI4YzQ3LjM2IDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3YxNzAuNjY3YzAgNDcuMzYtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM2gtMTI4Yy00Ny4zNiAwLTg1LjMzMy0zOC40LTg1LjMzMy04NS4zMzN2LTQyLjY2N2gtNDMuMDkzYy0yMy4wNDAgMC00Mi4yNCAxOS4yLTQyLjI0IDQyLjI0djI5OS4wOTNoODUuMzMzdi00Mi42NjdjMC00Ni45MzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTMzOyIgZ2x5cGgtbmFtZT0iYWRkX2FsZXJ0X2JsYWNrXzI0ZHAiIGQ9Ik01MTIgMjEuMzMzYzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzNoLTE3MC42NjdjMC00Ni45MzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM3pNODEwLjY2NyAyMzQuNjY3aC00Mi42Njd2Mjk4LjY2N2MwIDExOS4wNDAtODEuNDkzIDIxOS4zMDctMTkyIDI0Ny40Njd2MjkuODY3YzAgMzUuNDEzLTI4LjU4NyA2NC02NCA2NHMtNjQtMjguNTg3LTY0LTY0di0yOS44NjdjLTExMC41MDctMjguMTYtMTkyLTEyOC40MjctMTkyLTI0Ny40Njd2LTI5OC42NjdoLTQyLjY2N2MtMjMuNDY3IDAtNDIuNjY3LTE5LjItNDIuNjY3LTQyLjY2N3MxOS4yLTQyLjY2NyA0Mi42NjctNDIuNjY3aDU5Ny4zMzNjMjMuNDY3IDAgNDIuNjY3IDE5LjIgNDIuNjY3IDQyLjY2N3MtMTkuMiA0Mi42NjctNDIuNjY3IDQyLjY2N3pNNTk3LjMzMyA0MDUuMzMzaC00Mi42Njd2LTQyLjY2N2MwLTIzLjQ2Ny0xOS4yLTQyLjY2Ny00Mi42NjctNDIuNjY3cy00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3djQyLjY2N2gtNDIuNjY3Yy0yMy40NjcgMC00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3czE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42NjdoNDIuNjY3djQyLjY2N2MwIDIzLjQ2NyAxOS4yIDQyLjY2NyA0Mi42NjcgNDIuNjY3czQyLjY2Ny0xOS4yIDQyLjY2Ny00Mi42Njd2LTQyLjY2N2g0Mi42NjdjMjMuNDY3IDAgNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3MtMTkuMi00Mi42NjctNDIuNjY3LTQyLjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTM0OyIgZ2x5cGgtbmFtZT0iYWxhcm1fYmxhY2tfMjRkcCIgZD0iTTY3Ny4xMiAzMDkuMzMzbC0xNDMuNzg3IDg1LjMzM3YxOTMuMjhjMCAxNy4wNjctMTMuNjUzIDMwLjcyLTMwLjcyIDMwLjcyaC0yLjU2Yy0xNy4wNjcgMC0zMC43Mi0xMy42NTMtMzAuNzItMzAuNzJ2LTIwMS4zODdjMC0xNC45MzMgNy42OC0yOS4wMTMgMjAuOTA3LTM2LjY5M2wxNTUuNzMzLTkzLjQ0YzE0LjUwNy04LjUzMyAzMy4yOC00LjI2NyA0MS44MTMgMTAuMjQgOC45NiAxNC45MzMgNC4yNjcgMzQuMTMzLTEwLjY2NyA0Mi42Njd6TTkwMy42OCA3NDYuMjRsLTEzMS40MTMgMTA5LjIyN2MtMTcuOTIgMTQuOTMzLTQ0LjggMTIuOC02MC4xNi01LjU0Ny0xNC45MzMtMTcuOTItMTIuMzczLTQ0LjggNS41NDctNjAuMTZsMTMwLjk4Ny0xMDkuMjI3YzE3LjkyLTE0LjkzMyA0NC44LTEyLjggNjAuMTYgNS41NDcgMTUuMzYgMTcuOTIgMTIuOCA0NC44LTUuMTIgNjAuMTZ6TTE3NC45MzMgNjgwLjUzM2wxMzAuOTg3IDEwOS4yMjdjMTguMzQ3IDE1LjM2IDIwLjkwNyA0Mi4yNCA1LjU0NyA2MC4xNi0xNC45MzMgMTguMzQ3LTQxLjgxMyAyMC40OC01OS43MzMgNS41NDdsLTEzMS40MTMtMTA5LjIyN2MtMTcuOTItMTUuMzYtMjAuNDgtNDIuMjQtNS4xMi02MC4xNiAxNC45MzMtMTguMzQ3IDQxLjgxMy0yMC40OCA1OS43MzMtNS41NDd6TTUxMiA3ODkuMzMzYy0yMTIuMDUzIDAtMzg0LTE3MS45NDctMzg0LTM4NHMxNzEuOTQ3LTM4NCAzODQtMzg0IDM4NCAxNzEuOTQ3IDM4NCAzODQtMTcxLjk0NyAzODQtMzg0IDM4NHpNNTEyIDEwNi42NjdjLTE2NC42OTMgMC0yOTguNjY3IDEzMy45NzMtMjk4LjY2NyAyOTguNjY3czEzMy45NzMgMjk4LjY2NyAyOTguNjY3IDI5OC42NjcgMjk4LjY2Ny0xMzMuOTczIDI5OC42NjctMjk4LjY2Ny0xMzMuOTczLTI5OC42NjctMjk4LjY2Ny0yOTguNjY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MzU7IiBnbHlwaC1uYW1lPSJhbm5vdW5jZW1lbnRfYmxhY2tfMjRkcCIgZD0iTTg1My4zMzMgODc0LjY2N2gtNjgyLjY2N2MtNDYuOTMzIDAtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzM3YtNzY4bDE3MC42NjcgMTcwLjY2N2g1OTcuMzMzYzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2NTEyYzAgNDYuOTMzLTM4LjQgODUuMzMzLTg1LjMzMyA4NS4zMzN6TTUxMiA0OTAuNjY3Yy0yMy40NjcgMC00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3djE3MC42NjdjMCAyMy40NjcgMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N3M0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di0xNzAuNjY3YzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6TTU1NC42NjcgMzIwaC04NS4zMzN2ODUuMzMzaDg1LjMzM3YtODUuMzMzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MzY7IiBnbHlwaC1uYW1lPSJhdXRvX2RlbGV0ZV9ibGFja18yNGRwIiBkPSJNNjgyLjY2NyA1NzZjLTI5Ljg2NyAwLTU4LjQ1My00LjI2Ny04NS4zMzMtMTIuMzczdjk3LjcwN2MwIDQ2LjkzMy0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzaC0zNDEuMzMzYy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi00MjYuNjY3YzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoMjQyLjM0N2M0Ny43ODctMTAwLjY5MyAxNTAuNjEzLTE3MC42NjcgMjY5LjY1My0xNzAuNjY3IDE2NS4xMiAwIDI5OC42NjcgMTMzLjU0NyAyOTguNjY3IDI5OC42NjdzLTEzMy41NDcgMjk4LjY2Ny0yOTguNjY3IDI5OC42Njd6TTY4Mi42NjcgNjRjLTExNy43NiAwLTIxMy4zMzMgOTUuNTczLTIxMy4zMzMgMjEzLjMzM3M5NS41NzMgMjEzLjMzMyAyMTMuMzMzIDIxMy4zMzMgMjEzLjMzMy05NS41NzMgMjEzLjMzMy0yMTMuMzMzLTk1LjU3My0yMTMuMzMzLTIxMy4zMzMtMjEzLjMzM3pNNTk3LjMzMyA3ODkuMzMzYzIzLjQ2NyAwIDQyLjY2NyAxOS4yIDQyLjY2NyA0Mi42NjdzLTE5LjIgNDIuNjY3LTQyLjY2NyA0Mi42NjdoLTEwNi42NjdsLTMwLjI5MyAzMC4yOTNjLTcuNjggNy42OC0xOC43NzMgMTIuMzczLTI5Ljg2NyAxMi4zNzNoLTE3OC4zNDdjLTExLjA5MyAwLTIyLjE4Ny00LjY5My0yOS44NjctMTIuMzczbC0zMC4yOTMtMzAuMjkzaC0xMDYuNjY3Yy0yMy40NjcgMC00Mi42NjctMTkuMi00Mi42NjctNDIuNjY3czE5LjItNDIuNjY3IDQyLjY2Ny00Mi42NjdoNTEyek02NzIgNDQ4djBjLTE3LjQ5MyAwLTMyLTE0LjUwNy0zMi0zMnYtMTU3LjAxM2MwLTE1LjM2IDguMTA3LTI5LjAxMyAyMS4zMzMtMzYuNjkzbDEwNy41Mi02Mi43MmMxNC4wODAtOC4xMDcgMzItMy44NCA0MC45NiA5LjM4N3YwYzkuODEzIDE0LjUwNyA1LjEyIDM0LjU2LTEwLjI0IDQzLjUybC05NS41NzMgNTYuMzJ2MTQ3LjJjMCAxNy40OTMtMTQuNTA3IDMyLTMyIDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5Mzc7IiBnbHlwaC1uYW1lPSJidWdfcmVwb3J0X2JsYWNrXzI0ZHAiIGQ9Ik04MTAuNjY3IDYxOC42NjdoLTc3LjIyN2MtMTkuMiAzMy4yOC00NS42NTMgNjEuODY3LTc3LjY1MyA4My42MjdsMzkuNjggMzkuNjhjMTYuNjQgMTYuNjQgMTYuNjQgNDMuNTIgMCA2MC4xNnMtNDMuNTIgMTYuNjQtNjAuMTYgMGwtNjIuNzItNjIuNzJjLTE5LjYyNyA0LjY5My0zOS42OCA3LjI1My02MC41ODcgNy4yNTNzLTQwLjk2LTIuNTYtNjAuMTYtNy4yNTNsLTYzLjE0NyA2Mi43MmMtMTYuNjQgMTYuNjQtNDMuNTIgMTYuNjQtNjAuMTYgMHMtMTYuNjQtNDMuNTIgMC02MC4xNmwzOS4yNTMtMzkuNjhjLTMxLjU3My0yMS43Ni01OC4wMjctNTAuMzQ3LTc3LjIyNy04My42MjdoLTc3LjIyN2MtMjMuNDY3IDAtNDIuNjY3LTE5LjItNDIuNjY3LTQyLjY2N3MxOS4yLTQyLjY2NyA0Mi42NjctNDIuNjY3aDQ2LjUwN2MtMi4xMzMtMTQuMDgwLTMuODQtMjguMTYtMy44NC00Mi42Njd2LTQyLjY2N2gtNDIuNjY3Yy0yMy40NjcgMC00Mi42NjctMTkuMi00Mi42NjctNDIuNjY3czE5LjItNDIuNjY3IDQyLjY2Ny00Mi42NjdoNDIuNjY3di00Mi42NjdjMC0xNC41MDcgMS43MDctMjguNTg3IDMuODQtNDIuNjY3aC00Ni41MDdjLTIzLjQ2NyAwLTQyLjY2Ny0xOS4yLTQyLjY2Ny00Mi42NjdzMTkuMi00Mi42NjcgNDIuNjY3LTQyLjY2N2g3Ny4yMjdjNDQuMzczLTc2LjM3MyAxMjYuNzItMTI4IDIyMS40NC0xMjhzMTc3LjA2NyA1MS42MjcgMjIxLjQ0IDEyOGg3Ny4yMjdjMjMuNDY3IDAgNDIuNjY3IDE5LjIgNDIuNjY3IDQyLjY2N3MtMTkuMiA0Mi42NjctNDIuNjY3IDQyLjY2N2gtNDYuNTA3YzIuMTMzIDE0LjA4MCAzLjg0IDI4LjE2IDMuODQgNDIuNjY3djQyLjY2N2g0Mi42NjdjMjMuNDY3IDAgNDIuNjY3IDE5LjIgNDIuNjY3IDQyLjY2N3MtMTkuMiA0Mi42NjctNDIuNjY3IDQyLjY2N2gtNDIuNjY3djQyLjY2N2MwIDE0LjUwNy0xLjcwNyAyOC41ODctMy44NCA0Mi42NjdoNDYuNTA3YzIzLjQ2NyAwIDQyLjY2NyAxOS4yIDQyLjY2NyA0Mi42NjdzLTE5LjIgNDIuNjY3LTQyLjY2NyA0Mi42Njd6TTU1NC42NjcgMjc3LjMzM2gtODUuMzMzYy0yMy40NjcgMC00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3czE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42NjdoODUuMzMzYzIzLjQ2NyAwIDQyLjY2Ny0xOS4yIDQyLjY2Ny00Mi42NjdzLTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6TTU1NC42NjcgNDQ4aC04NS4zMzNjLTIzLjQ2NyAwLTQyLjY2NyAxOS4yLTQyLjY2NyA0Mi42NjdzMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N2g4NS4zMzNjMjMuNDY3IDAgNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3MtMTkuMi00Mi42NjctNDIuNjY3LTQyLjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTM4OyIgZ2x5cGgtbmFtZT0iYnVzaW5lc3NfY2VudGVyX2JsYWNrXzI0ZHAiIGQ9Ik01NTQuNjY3IDI3Ny4zMzNoLTg1LjMzM2MtMjMuNDY3IDAtNDIuNjY3IDE5LjItNDIuNjY3IDQyLjY2N2gtMjk4LjI0di0xNzAuNjY3YzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoNTk2LjkwN2M0Ni45MzMgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzdjE3MC42NjdoLTI5OC42NjdjMC0yMy40NjctMTkuMi00Mi42NjctNDIuNjY3LTQyLjY2N3pNODUzLjMzMyA2NjEuMzMzaC0xNzAuNjY3YzAgOTQuMjkzLTc2LjM3MyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2N3MtMTcwLjY2Ny03Ni4zNzMtMTcwLjY2Ny0xNzAuNjY3aC0xNzAuNjY3Yy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi0xMjhjMC00Ny4zNiAzNy45NzMtODUuMzMzIDg1LjMzMy04NS4zMzNoMjU2djQyLjY2N2MwIDIzLjQ2NyAxOS4yIDQyLjY2NyA0Mi42NjcgNDIuNjY3aDg1LjMzM2MyMy40NjcgMCA0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di00Mi42NjdoMjU2YzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2MTI4YzAgNDYuOTMzLTM4LjQgODUuMzMzLTg1LjMzMyA4NS4zMzN6TTQyNi42NjcgNjYxLjMzM2MwIDQ2LjkzMyAzOC40IDg1LjMzMyA4NS4zMzMgODUuMzMzczg1LjMzMy0zOC40IDg1LjMzMy04NS4zMzNoLTE3MC42Njd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkzOTsiIGdseXBoLW5hbWU9ImNoZWNrX2JveF9ibGFja18yNGRwIiBkPSJNODEwLjY2NyA4MzJoLTU5Ny4zMzNjLTQ2LjkzMyAwLTg1LjMzMy0zOC40LTg1LjMzMy04NS4zMzN2LTU5Ny4zMzNjMC00Ni45MzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM2g1OTcuMzMzYzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2NTk3LjMzM2MwIDQ2LjkzMy0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzek00NTYuOTYgMjY0Ljk2Yy0xNi42NC0xNi42NC00My41Mi0xNi42NC02MC4xNiAwbC0xNTMuMTczIDE1My4xNzNjLTE2LjY0IDE2LjY0LTE2LjY0IDQzLjUyIDAgNjAuMTZzNDMuNTIgMTYuNjQgNjAuMTYgMGwxMjIuODgtMTIyLjg4IDI5My41NDcgMjkzLjU0N2MxNi42NCAxNi42NCA0My41MiAxNi42NCA2MC4xNiAwczE2LjY0LTQzLjUyIDAtNjAuMTZsLTMyMy40MTMtMzIzLjg0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5M2E7IiBnbHlwaC1uYW1lPSJjaGVja19ib3hfb3V0bGluZV9ibGFua19ibGFja18yNGRwIiBkPSJNNzY4IDE0OS4zMzNoLTUxMmMtMjMuNDY3IDAtNDIuNjY3IDE5LjItNDIuNjY3IDQyLjY2N3Y1MTJjMCAyMy40NjcgMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N2g1MTJjMjMuNDY3IDAgNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3YtNTEyYzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6TTgxMC42NjcgODMyaC01OTcuMzMzYy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi01OTcuMzMzYzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoNTk3LjMzM2M0Ni45MzMgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzdjU5Ny4zMzNjMCA0Ni45MzMtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTNiOyIgZ2x5cGgtbmFtZT0iY2hldnJvbl9sZWZ0X2JsYWNrXzI0ZHAiIGQ9Ik02MjcuNjI3IDY3My43MDdjLTE2LjY0IDE2LjY0LTQzLjUyIDE2LjY0LTYwLjE2IDBsLTE5NS44NC0xOTUuODRjLTE2LjY0LTE2LjY0LTE2LjY0LTQzLjUyIDAtNjAuMTZsMTk1Ljg0LTE5NS44NGMxNi42NC0xNi42NCA0My41Mi0xNi42NCA2MC4xNiAwczE2LjY0IDQzLjUyIDAgNjAuMTZsLTE2NS41NDcgMTY1Ljk3MyAxNjUuNTQ3IDE2NS41NDdjMTYuNjQgMTYuNjQgMTYuMjEzIDQzLjk0NyAwIDYwLjE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5M2M7IiBnbHlwaC1uYW1lPSJjaGV2cm9uX3JpZ2h0X2JsYWNrXzI0ZHAiIGQ9Ik0zOTYuMzczIDY3My43MDdjLTE2LjY0LTE2LjY0LTE2LjY0LTQzLjUyIDAtNjAuMTZsMTY1LjU0Ny0xNjUuNTQ3LTE2NS41NDctMTY1LjU0N2MtMTYuNjQtMTYuNjQtMTYuNjQtNDMuNTIgMC02MC4xNnM0My41Mi0xNi42NCA2MC4xNiAwbDE5NS44NCAxOTUuODRjMTYuNjQgMTYuNjQgMTYuNjQgNDMuNTIgMCA2MC4xNmwtMTk1Ljg0IDE5NS44NGMtMTYuMjEzIDE2LjIxMy00My41MiAxNi4yMTMtNjAuMTYtMC40Mjd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkzZDsiIGdseXBoLW5hbWU9ImNvdHRhZ2VfYmxhY2tfMjRkcCIgZD0iTTk1NS4zMDcgNDM5Ljg5M2MxNC41MDcgMTguNzczIDEwLjY2NyA0NS42NTMtOC4xMDcgNTkuNzMzbC00MDkuNiAzMTIuNzQ3Yy0xNS4zNiAxMS41Mi0zNi42OTMgMTEuNTItNTEuNjI3IDBsLTIyOS45NzMtMTc1Ljc4N3YyNC43NDdjMCAyMy40NjctMTkuMiA0Mi42NjctNDIuNjY3IDQyLjY2N3MtNDIuNjY3LTE5LjItNDIuNjY3LTQyLjY2N3YtOTAuMDI3bC05NC4yOTMtNzEuNjhjLTE4Ljc3My0xNC4wODAtMjIuMTg3LTQwLjk2LTguMTA3LTU5LjczMyAxNC41MDctMTguNzczIDQwLjk2LTIyLjE4NyA1OS43MzMtOC4xMDdsNDIuNjY3IDMyLjQyN3YtMzU3LjU0N2MwLTIzLjQ2NyAxOS4yLTQyLjY2NyA0Mi42NjctNDIuNjY3aDI1NnYyMTMuMzMzYzAgMjMuNDY3IDE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42NjdzNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3YtMjEzLjMzM2gyNTZjMjMuNDY3IDAgNDIuNjY3IDE5LjIgNDIuNjY3IDQyLjY2N3YzNTcuNTQ3bDQyLjI0LTMyLjQyN2MxOC43NzMtMTQuNTA3IDQ1LjY1My0xMC42NjcgNTkuNzMzIDguMTA3ek0yMjQuODUzIDc0Ni42NjdjLTMxLjU3MyAwLTUzLjc2IDM0LjEzMy0zOC40IDYxLjg2NyAyMi4xODcgMzkuNjggNjQgNjYuMTMzIDExMi4yMTMgNjYuMTMzIDE2LjIxMyAwIDMwLjcyIDkuMzg3IDM3Ljk3MyAyMi42MTMgNi40IDEzLjIyNyAyMS4zMzMgMjAuMDUzIDM1Ljg0IDIwLjA1MyAzMS41NzMgMCA1My43Ni0zNC4xMzMgMzguNC02MS44NjctMjIuMTg3LTM5LjY4LTY0LTY2LjEzMy0xMTIuMjEzLTY2LjEzMy0xNi4yMTMgMC0zMC43Mi05LjM4Ny0zNy45NzMtMjIuNjEzLTYuNC0xMy4yMjctMjEuMzMzLTIwLjA1My0zNS44NC0yMC4wNTN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkzZTsiIGdseXBoLW5hbWU9ImRlbGV0ZV9ibGFja18yNGRwIiBkPSJNMjU2IDE0OS4zMzNjMC00Ni45MzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM2gzNDEuMzMzYzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2NDI2LjY2N2MwIDQ2LjkzMy0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzaC0zNDEuMzMzYy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi00MjYuNjY3ek03NjggNzg5LjMzM2gtMTA2LjY2N2wtMzAuMjkzIDMwLjI5M2MtNy42OCA3LjY4LTE4Ljc3MyAxMi4zNzMtMjkuODY3IDEyLjM3M2gtMTc4LjM0N2MtMTEuMDkzIDAtMjIuMTg3LTQuNjkzLTI5Ljg2Ny0xMi4zNzNsLTMwLjI5My0zMC4yOTNoLTEwNi42NjdjLTIzLjQ2NyAwLTQyLjY2Ny0xOS4yLTQyLjY2Ny00Mi42NjdzMTkuMi00Mi42NjcgNDIuNjY3LTQyLjY2N2g1MTJjMjMuNDY3IDAgNDIuNjY3IDE5LjIgNDIuNjY3IDQyLjY2N3MtMTkuMiA0Mi42NjctNDIuNjY3IDQyLjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTNmOyIgZ2x5cGgtbmFtZT0iZGlyZWN0aW9uc19ydW5fYmxhY2tfMjRkcCIgZD0iTTU3NS41NzMgNzI2LjE4N2M0Ni45MzMgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzcy0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzLTg1LjMzMy0zOC40LTg1LjMzMy04NS4zMzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM3pNNDQwLjMyIDIxNC4xODdsMjQuMzIgMTA2LjY2NyA4OS42LTg1LjMzM3YtMjEzLjMzM2MwLTIzLjQ2NyAxOS4yLTQyLjY2NyA0Mi42NjctNDIuNjY3czQyLjY2NyAxOS4yIDQyLjY2NyA0Mi42Njd2MjQwLjY0YzAgMjMuNDY3LTkuMzg3IDQ1LjY1My0yNi40NTMgNjEuODY3bC02My4xNDcgNjAuMTYgMjUuNiAxMjhjNDUuNjUzLTUyLjkwNyAxMTEuNzg3LTkwLjg4IDE4Ni4wMjctMTAyLjgyNyAyNS42LTMuODQgNDguNjQgMTYuNjQgNDguNjQgNDIuNjY3IDAgMjAuOTA3LTE1LjM2IDM4LjQtMzYuMjY3IDQxLjgxMy02NC44NTMgMTAuNjY3LTExOC42MTMgNDkuMDY3LTE0Ny4yIDk5LjQxM2wtNDIuNjY3IDY4LjI2N2MtMTcuMDY3IDI1LjYtNDIuNjY3IDQyLjY2Ny03Mi41MzMgNDIuNjY3LTEyLjggMC0yMS4zMzMtNC4yNjctMzQuMTMzLTQuMjY3bC0xNjkuODEzLTcxLjY4Yy0zMS41NzMtMTMuNjUzLTUyLjA1My00NC4zNzMtNTIuMDUzLTc4LjkzM3YtMTAxLjEyYzAtMjMuNDY3IDE5LjItNDIuNjY3IDQyLjY2Ny00Mi42NjdzNDIuNjY3IDE5LjIgNDIuNjY3IDQyLjY2N3YxMDIuNGw3Ni44IDI5Ljg2Ny02OC4yNjctMzQ1LjYtMTY3LjI1MyAzNC4xMzNjLTIzLjA0MCA0LjY5My00NS42NTMtMTAuMjQtNTAuMzQ3LTMzLjI4di0xLjcwN2MtNC42OTMtMjMuMDQwIDEwLjI0LTQ1LjY1MyAzMy4yOC01MC4zNDdsMTc1LjM2LTM0Ljk4N2M0NS4yMjctOC45NiA4OS42IDE5LjYyNyA5OS44NCA2NC44NTN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk0MDsiIGdseXBoLW5hbWU9ImRvX2Rpc3R1cmJfYmxhY2tfMjRkcCIgZD0iTTUxMiA4NzQuNjY3Yy0yMzUuNTIgMC00MjYuNjY3LTE5MS4xNDctNDI2LjY2Ny00MjYuNjY3czE5MS4xNDctNDI2LjY2NyA0MjYuNjY3LTQyNi42NjcgNDI2LjY2NyAxOTEuMTQ3IDQyNi42NjcgNDI2LjY2Ny0xOTEuMTQ3IDQyNi42NjctNDI2LjY2NyA0MjYuNjY3ek01MTIgMTA2LjY2N2MtMTg4LjU4NyAwLTM0MS4zMzMgMTUyLjc0Ny0zNDEuMzMzIDM0MS4zMzMgMCA3OC45MzMgMjYuODggMTUxLjQ2NyA3Mi4xMDcgMjA5LjA2N2w0NzguMjkzLTQ3OC4yOTNjLTU3LjYtNDUuMjI3LTEzMC4xMzMtNzIuMTA3LTIwOS4wNjctNzIuMTA3ek03ODEuMjI3IDIzOC45MzNsLTQ3OC4yOTMgNDc4LjI5M2M1Ny42IDQ1LjIyNyAxMzAuMTMzIDcyLjEwNyAyMDkuMDY3IDcyLjEwNyAxODguNTg3IDAgMzQxLjMzMy0xNTIuNzQ3IDM0MS4zMzMtMzQxLjMzMyAwLTc4LjkzMy0yNi44OC0xNTEuNDY3LTcyLjEwNy0yMDkuMDY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NDE7IiBnbHlwaC1uYW1lPSJlcnJvcl9ibGFja18yNGRwIiBkPSJNNTEyIDg3NC42NjdjLTIzNS41MiAwLTQyNi42NjctMTkxLjE0Ny00MjYuNjY3LTQyNi42NjdzMTkxLjE0Ny00MjYuNjY3IDQyNi42NjctNDI2LjY2NyA0MjYuNjY3IDE5MS4xNDcgNDI2LjY2NyA0MjYuNjY3LTE5MS4xNDcgNDI2LjY2Ny00MjYuNjY3IDQyNi42Njd6TTUxMiA0MDUuMzMzYy0yMy40NjcgMC00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3djE3MC42NjdjMCAyMy40NjcgMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N3M0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di0xNzAuNjY3YzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6TTU1NC42NjcgMjM0LjY2N2gtODUuMzMzdjg1LjMzM2g4NS4zMzN2LTg1LjMzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTQyOyIgZ2x5cGgtbmFtZT0iZXJyb3Jfb3V0bGluZV9ibGFja18yNGRwIiBkPSJNNTEyIDY2MS4zMzNjMjMuNDY3IDAgNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3YtMTcwLjY2N2MwLTIzLjQ2Ny0xOS4yLTQyLjY2Ny00Mi42NjctNDIuNjY3cy00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3djE3MC42NjdjMCAyMy40NjcgMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N3pNNTExLjU3MyA4NzQuNjY3Yy0yMzUuNTIgMC00MjYuMjQtMTkxLjE0Ny00MjYuMjQtNDI2LjY2N3MxOTAuNzItNDI2LjY2NyA0MjYuMjQtNDI2LjY2N2MyMzUuOTQ3IDAgNDI3LjA5MyAxOTEuMTQ3IDQyNy4wOTMgNDI2LjY2N3MtMTkxLjE0NyA0MjYuNjY3LTQyNy4wOTMgNDI2LjY2N3pNNTEyIDEwNi42NjdjLTE4OC41ODcgMC0zNDEuMzMzIDE1Mi43NDctMzQxLjMzMyAzNDEuMzMzczE1Mi43NDcgMzQxLjMzMyAzNDEuMzMzIDM0MS4zMzMgMzQxLjMzMy0xNTIuNzQ3IDM0MS4zMzMtMzQxLjMzMy0xNTIuNzQ3LTM0MS4zMzMtMzQxLjMzMy0zNDEuMzMzek01NTQuNjY3IDIzNC42NjdoLTg1LjMzM3Y4NS4zMzNoODUuMzMzdi04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk0MzsiIGdseXBoLW5hbWU9ImV2ZW50X2F2YWlsYWJsZV9ibGFja18yNGRwIiBkPSJNNjgyLjY2NyA1MTAuNzJjLTEyLjM3MyAxMi4zNzMtMzIuODUzIDEyLjM3My00NS4yMjcgMGwtMTg1LjYtMTg1LjYtNjcuODQgNjcuODRjLTEyLjM3MyAxMi4zNzMtMzIuODUzIDEyLjM3My00NS4yMjcgMHMtMTIuMzczLTMyLjg1MyAwLTQ1LjIyN2w4Mi43NzMtODIuNzczYzE2LjY0LTE2LjY0IDQzLjUyLTE2LjY0IDYwLjE2IDBsMjAwLjUzMyAyMDAuNTMzYzEyLjggMTIuMzczIDEyLjggMzIuODUzIDAuNDI3IDQ1LjIyN3pNODEwLjY2NyA4MzJoLTQyLjY2N3Y0Mi42NjdjMCAyMy40NjctMTkuMiA0Mi42NjctNDIuNjY3IDQyLjY2N3MtNDIuNjY3LTE5LjItNDIuNjY3LTQyLjY2N3YtNDIuNjY3aC0zNDEuMzMzdjQyLjY2N2MwIDIzLjQ2Ny0xOS4yIDQyLjY2Ny00Mi42NjcgNDIuNjY3cy00Mi42NjctMTkuMi00Mi42NjctNDIuNjY3di00Mi42NjdoLTQyLjY2N2MtNDcuMzYgMC04NC45MDctMzguNC04NC45MDctODUuMzMzbC0wLjQyNy01OTcuMzMzYzAtNDYuOTMzIDM3Ljk3My04NS4zMzMgODUuMzMzLTg1LjMzM2g1OTcuMzMzYzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2NTk3LjMzM2MwIDQ2LjkzMy0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzek03NjggMTQ5LjMzM2gtNTEyYy0yMy40NjcgMC00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3djQyNi42NjdoNTk3LjMzM3YtNDI2LjY2N2MwLTIzLjQ2Ny0xOS4yLTQyLjY2Ny00Mi42NjctNDIuNjY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NDQ7IiBnbHlwaC1uYW1lPSJmbHV0dGVyX2Rhc2hfYmxhY2tfMjRkcCIgZD0iTTQ3Mi4zMiA0NjAuOGMxMi4zNzMgMTYuNjQgMzQuNTYgMjMuODkzIDU0LjE4NyAxNS43ODcgNy4yNTMtMi45ODcgMTMuNjUzLTcuNjggMTguMzQ3LTE0LjA4MCA5LjM4Ny0xMS45NDcgMTAuNjY3LTI1LjE3MyA5LjM4Ny0zNi4yNjctMi4xMzMtMTQuMDgwLTEwLjY2Ny0yNi44OC0yMy4wNDAtMzMuNzA3IDAgMC0yMDcuNzg3LTEyNS44NjctMjE2LjMyLTExNC43NzNzMTU3LjQ0IDE4My4wNDAgMTU3LjQ0IDE4My4wNDB6TTkzOC42NjcgNTMzLjMzM2MwLTEwNi42NjctNDIuNjY3LTEyOC02NC0xMjgtOS44MTMgMC0xOC43NzMgNC4yNjctMjYuNDUzIDExLjA5My0yMC40OC0xNDEuNjUzLTEwMC42OTMtMjI2LjU2LTIyNy40MTMtMjU1LjU3MyA0LjY5My0xOC43NzMgMjAuNDgtMzIuODUzIDQwLjUzMy0zMi44NTN2MGgyNC43NDdjOS4zODcgMCAxNy40OTMtNi40IDIwLjQ4LTE1LjM2IDcuMjUzLTIyLjE4NyAyOC4xNi00My41MiA0My41Mi01Ni4zMiAxMC42NjctOC45NiAxMC4yNC0yNS4xNzMtMS4yOC0zMy4yOC0xNC41MDctMTAuMjQtMzguNC0yMC45MDctNzYuMzczLTIyLjYxMy03LjY4LTAuNDI3LTE0LjkzMyAyLjk4Ny0xOS4yIDkuMzg3LTUuNTQ3IDguNTMzLTEzLjIyNyAyMy44OTMtMTMuMjI3IDQzLjA5MyAwIDEyLjggMS43MDcgMjQuMzIgMy44NCAzNC4xMzMtMzMuMjggNi44MjctNTkuMzA3IDMzLjI4LTY2LjEzMyA2Ni41Ni0yMC45MDctMi41Ni00Mi42NjctNC4yNjctNjUuNzA3LTQuMjY3LTM3LjU0NyAwLTcyLjUzMyAzLjg0LTEwNC41MzMgMTAuNjY3LTAuODUzLTMuNDEzLTIuMTMzLTYuODI3LTIuMTMzLTEwLjY2NyAwLTIzLjQ2NyAxOS4yLTQyLjY2NyA0Mi42NjctNDIuNjY3djBoMjQuNzQ3YzkuMzg3IDAgMTcuNDkzLTYuNCAyMC40OC0xNS4zNiA3LjI1My0yMi4xODcgMjguMTYtNDMuNTIgNDMuNTItNTYuMzIgMTAuNjY3LTguOTYgMTAuMjQtMjUuMTczLTEuMjgtMzMuMjgtMTQuNTA3LTEwLjI0LTM4LjQtMjAuOTA3LTc2LjM3My0yMi42MTMtNy42OC0wLjQyNy0xNC45MzMgMi45ODctMTkuMiA5LjM4Ny01LjU0NyA4LjUzMy0xMy4yMjcgMjMuODkzLTEzLjIyNyA0My4wOTMgMCAxMi44IDEuNzA3IDI0LjMyIDMuODQgMzQuMTMzLTM4LjQgOC4xMDctNjcuODQgNDIuNjY3LTY3Ljg0IDgzLjYyNyAwIDcuNjggMS4yOCAxNS4zNiAzLjQxMyAyMi42MTMtMTA0Ljk2IDM2LjY5My0xNzEuOTQ3IDExOC42MTMtMTkwLjI5MyAyNDQuOTA3LTcuNjgtNy4yNTMtMTYuMjEzLTExLjUyLTI2LjQ1My0xMS41Mi0yMS4zMzMgMC02NCAyMS4zMzMtNjQgMTI4IDAgOTYuODUzIDcyLjUzMyAxOTIgMTI4IDE5MiAxOC4zNDcgMCAyMC45MDctMjAuOTA3IDIxLjMzMy0zNi4yNjcgNTQuNjEzIDc1Ljk0NyAxMzkuMDkzIDEyOC44NTMgMjM2LjggMTQwLjM3MyA4LjUzMyA0MC45NiA0Ni4wODAgNjYuNTYgODMuMiA2Ni41NnYtNDIuNjY3YzAgMCAxNC4wODAgMjEuMzMzIDQyLjY2NyAyMS4zMzNzNDIuNjY3LTIxLjMzMyA0Mi42NjctMjEuMzMzYy0yMC45MDcgMC0zNi4yNjctMTQuOTMzLTQwLjk2LTMyLjg1MyA3Ny42NTMtMjAuNDggMTQ0LjY0LTY3Ljg0IDE5MC4yOTMtMTMxLjQxMyAwLjQyNyAxNS4zNiAyLjk4NyAzNi4yNjcgMjEuMzMzIDM2LjI2NyA1NS40NjcgMCAxMjgtOTUuMTQ3IDEyOC0xOTJ6TTIxMy4zMzMgNDkwLjY2N2MwLTM0LjU2IDQuMjY3LTY1LjI4IDEwLjY2Ny05NC4yOTMgNy42OCAyOS40NCAxOS42MjcgNTYuNzQ3IDM1LjQxMyA4MS45Mi04Ljk2IDIwLjA1My0xNC41MDcgNDIuMjQtMTQuNTA3IDY1LjcwNyAwLjQyNyA4OC4zMiA3Mi4xMDcgMTYwIDE2MC40MjcgMTYwIDQwLjk2IDAgNzguNTA3LTE1Ljc4NyAxMDYuNjY3LTQxLjM4NyAyOC4xNiAyNS42IDY1LjcwNyA0MS4zODcgMTA2LjY2NyA0MS4zODcgODguMzIgMCAxNjAtNzEuNjggMTYwLTE2MCAwLTIzLjQ2Ny01LjEyLTQ1LjY1My0xNC41MDctNjUuNzA3IDE1Ljc4Ny0yNS4xNzMgMjguMTYtNTIuOTA3IDM1Ljg0LTgyLjc3MyA2LjQgMjkuMDEzIDEwLjY2NyA2MC4xNiAxMC42NjcgOTUuMTQ3IDAgMTY0LjY5My0xMzMuOTczIDI5OC42NjctMjk4LjY2NyAyOTguNjY3cy0yOTguNjY3LTEzMy45NzMtMjk4LjY2Ny0yOTguNjY3ek03NjcuMTQ3IDMwNy42MjdjMCA0LjI2NyAwLjg1MyA4LjEwNyAwLjg1MyAxMi4zNzMgMCA0My4wOTMtMTEuMDkzIDgzLjItMjkuODY3IDExOC42MTMtMjkuNDQtMzMuMjgtNzEuNjgtNTQuNjEzLTExOS40NjctNTQuNjEzLTExLjUyIDAtMjMuMDQwIDEuMjgtMzMuNzA3IDMuODQgNS45NzMgOS44MTMgOS44MTMgMjAuOTA3IDExLjUyIDMyLjg1MyAwLjQyNyAyLjk4NyAwLjQyNyA1LjU0NyAwLjg1MyA4LjEwNyA3LjI1My0xLjI4IDE0LjA4MC0yLjEzMyAyMS4zMzMtMi4xMzMgNjQuODUzIDAgMTE3LjMzMyA1Mi40OCAxMTcuMzMzIDExNy4zMzNzLTUyLjQ4IDExNy4zMzMtMTE3LjMzMyAxMTcuMzMzYy0yOC41ODcgMC01Ni4zMi0xMC42NjctNzguMDgwLTMwLjcybC0yOC41ODctMjUuNi0yOC41ODcgMjUuNmMtMjEuNzYgMjAuMDUzLTQ5LjQ5MyAzMC43Mi03OC4wODAgMzAuNzItNjQuODUzIDAtMTE3LjMzMy01Mi40OC0xMTcuMzMzLTExNy4zMzMgMC01Ny4xNzMgNDAuOTYtMTA0Ljk2IDk1LjE0Ny0xMTUuMmwtMzIuNDI3LTM1LjQxM2MtMjUuNiA5LjM4Ny00Ny43ODcgMjUuMTczLTY1LjI4IDQ0LjgtMTguMzQ3LTM1LjQxMy0yOS40NC03NS41Mi0yOS40NC0xMTguMTg3IDAtMy40MTMgMC40MjctNi40IDAuNDI3LTEwLjI0IDQ3Ljc4Ny03Ny42NTMgMTMzLjU0Ny0xMTcuNzYgMjU1LjU3My0xMTcuNzYgMTIyLjg4IDAgMjA4LjIxMyAzOC44MjcgMjU1LjE0NyAxMTUuNjI3ek02ODIuNjY3IDU0NGMwLTQxLjM4Ny0yOC41ODctNzQuNjY3LTY0LTc0LjY2N3MtNjQgMzMuMjgtNjQgNzQuNjY3IDI4LjU4NyA3NC42NjcgNjQgNzQuNjY3IDY0LTMzLjI4IDY0LTc0LjY2N3pNNjUwLjY2NyA1ODEuMTJjMCA4Ljk2LTcuMjUzIDE2LjIxMy0xNi4yMTMgMTYuMjEzcy0xNS43ODctNy4yNTMtMTUuNzg3LTE2LjIxMyA3LjI1My0xNi4yMTMgMTYuMjEzLTE2LjIxMyAxNS43ODcgNy42OCAxNS43ODcgMTYuMjEzek00NjkuMzMzIDU0NGMwLTQxLjM4Ny0yOC41ODctNzQuNjY3LTY0LTc0LjY2N3MtNjQgMzMuMjgtNjQgNzQuNjY3IDI4LjU4NyA3NC42NjcgNjQgNzQuNjY3IDY0LTMzLjI4IDY0LTc0LjY2N3pNNDM3LjMzMyA1ODEuMTJjMCA4Ljk2LTcuMjUzIDE2LjIxMy0xNi4yMTMgMTYuMjEzcy0xNS43ODctNy4yNTMtMTUuNzg3LTE2LjIxMyA3LjI1My0xNi4yMTMgMTYuMjEzLTE2LjIxMyAxNS43ODcgNy42OCAxNS43ODcgMTYuMjEzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NDU7IiBnbHlwaC1uYW1lPSJoZWxwX2NlbnRlcl9ibGFja18yNGRwIiBkPSJNODEwLjY2NyA4MzJoLTU5Ny4zMzNjLTQ2LjkzMyAwLTg1LjMzMy0zOC40LTg1LjMzMy04NS4zMzN2LTU5Ny4zMzNjMC00Ni45MzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM2g1OTcuMzMzYzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2NTk3LjMzM2MwIDQ2LjkzMy0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzek01MTIuNDI3IDE5MmMtMjkuODY3IDAtNTMuNzYgMjMuODkzLTUzLjc2IDUzLjc2IDAgMzAuMjkzIDIzLjg5MyA1My4zMzMgNTMuNzYgNTMuMzMzIDMwLjI5MyAwIDUzLjMzMy0yMy4wNDAgNTMuMzMzLTUzLjMzMy0wLjQyNy0yOS40NC0yMy4wNDAtNTMuNzYtNTMuMzMzLTUzLjc2ek02NDAuODUzIDUwNy43MzNjLTMyLjQyNy00Ny4zNi02My4xNDctNjIuMjkzLTc5Ljc4Ny05Mi41ODctNC4yNjctNy42OC02LjgyNy0xMy42NTMtOC4xMDctMjYuODgtMi4xMzMtMTkuMi0xOS4yLTMzLjI4LTM4LjQtMzMuMjhoLTIuNTZjLTIyLjE4NyAwLTM5LjY4IDE4Ljc3My0zNy41NDcgNDAuOTYgMS4yOCAxNC41MDcgNC42OTMgMjkuNDQgMTIuOCA0My45NDcgMjAuOTA3IDM3LjEyIDYwLjU4NyA1OS4zMDcgODMuNjI3IDkyLjE2IDI0LjMyIDM0LjU2IDEwLjY2NyA5OS40MTMtNTguNDUzIDk5LjQxMy0zMC4yOTMgMC01MC4zNDctMTUuMzYtNjIuNzItMzMuNzA3LTEwLjY2Ny0xNS4zNi0yOS40NC0yMi42MTMtNDYuOTMzLTE1LjM2djBjLTIyLjYxMyA4Ljk2LTMwLjcyIDM2LjI2Ny0xNy4wNjcgNTUuODkzIDI2LjAyNyAzNy45NzMgNjkuNTQ3IDY1LjcwNyAxMjUuODY3IDY1LjcwNyA2My4xNDcgMCAxMDYuMjQtMjguNTg3IDEyOC40MjctNjQuODUzIDE4Ljc3My0zMC43MiAyOS44NjctODguMzIgMC44NTMtMTMxLjQxM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTQ2OyIgZ2x5cGgtbmFtZT0iaW1wb3J0X2NvbnRhY3RzX2JsYWNrXzI0ZHAiIGQ9Ik03NDYuNjY3IDc2OGMtODMuMiAwLTE3Mi44LTE3LjA2Ny0yMzQuNjY3LTY0LTYxLjg2NyA0Ni45MzMtMTUxLjQ2NyA2NC0yMzQuNjY3IDY0LTYxLjg2NyAwLTEyNy41NzMtOS4zODctMTgyLjYxMy0zMy43MDctMzEuMTQ3LTE0LjA4MC01Mi4wNTMtNDQuMzczLTUyLjA1My03OC45MzN2LTQ4MS4yOGMwLTU1LjQ2NyA1Mi4wNTMtOTYuNDI3IDEwNS44MTMtODIuNzczIDQxLjgxMyAxMC42NjcgODYuMTg3IDE1LjM2IDEyOC44NTMgMTUuMzYgNjYuNTYgMCAxMzcuMzg3LTExLjA5MyAxOTQuNTYtMzkuMjUzIDI1LjYtMTIuOCA1NC42MTMtMTIuOCA3OS43ODcgMCA1Ny4xNzMgMjguNTg3IDEyOCAzOS4yNTMgMTk0LjU2IDM5LjI1MyA0Mi42NjcgMCA4Ny4wNDAtNC42OTMgMTI4Ljg1My0xNS4zNiA1My43Ni0xNC4wODAgMTA1LjgxMyAyNi44OCAxMDUuODEzIDgyLjc3M3Y0ODEuMjhjMCAzNC41Ni0yMC45MDcgNjQuODUzLTUyLjA1MyA3OC45MzMtNTQuNjEzIDI0LjMyLTEyMC4zMiAzMy43MDctMTgyLjE4NyAzMy43MDd6TTg5NiAyMjQuODUzYzAtMjYuODgtMjQuNzQ3LTQ2LjUwNy01MS4yLTQxLjgxMy0zMiA1Ljk3My02NS4yOCA4LjUzMy05OC4xMzMgOC41MzMtNzIuNTMzIDAtMTc3LjA2Ny0yNy43MzMtMjM0LjY2Ny02NHY0OTEuMDkzYzU3LjYgMzYuMjY3IDE2Mi4xMzMgNjQgMjM0LjY2NyA2NCAzOS4yNTMgMCA3OC4wODAtMy44NCAxMTUuMi0xMS45NDcgMTkuNjI3LTQuMjY3IDM0LjEzMy0yMS43NiAzNC4xMzMtNDEuODEzdi00MDQuMDUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NDc7IiBnbHlwaC1uYW1lPSJpbmRldGVybWluYXRlX2NoZWNrX2JveF9ibGFja18yNGRwIiBkPSJNODEwLjY2NyA4MzJoLTU5Ny4zMzNjLTQ2LjkzMyAwLTg1LjMzMy0zOC40LTg1LjMzMy04NS4zMzN2LTU5Ny4zMzNjMC00Ni45MzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM2g1OTcuMzMzYzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2NTk3LjMzM2MwIDQ2LjkzMy0zOC40IDg1LjMzMy04NS4zMzMgODUuMzMzek02ODIuNjY3IDQwNS4zMzNoLTM0MS4zMzNjLTIzLjQ2NyAwLTQyLjY2NyAxOS4yLTQyLjY2NyA0Mi42NjdzMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N2gzNDEuMzMzYzIzLjQ2NyAwIDQyLjY2Ny0xOS4yIDQyLjY2Ny00Mi42NjdzLTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk0ODsiIGdseXBoLW5hbWU9ImluZm9fb3V0bGluZV9ibGFja18yNGRwIiBkPSJNNDY5LjMzMyA2NjEuMzMzaDg1LjMzM3YtODUuMzMzaC04NS4zMzN6TTUxMiAyMzQuNjY3YzIzLjQ2NyAwIDQyLjY2NyAxOS4yIDQyLjY2NyA0Mi42Njd2MTcwLjY2N2MwIDIzLjQ2Ny0xOS4yIDQyLjY2Ny00Mi42NjcgNDIuNjY3cy00Mi42NjctMTkuMi00Mi42NjctNDIuNjY3di0xNzAuNjY3YzAtMjMuNDY3IDE5LjItNDIuNjY3IDQyLjY2Ny00Mi42Njd6TTUxMiA4NzQuNjY3Yy0yMzUuNTIgMC00MjYuNjY3LTE5MS4xNDctNDI2LjY2Ny00MjYuNjY3czE5MS4xNDctNDI2LjY2NyA0MjYuNjY3LTQyNi42NjcgNDI2LjY2NyAxOTEuMTQ3IDQyNi42NjcgNDI2LjY2Ny0xOTEuMTQ3IDQyNi42NjctNDI2LjY2NyA0MjYuNjY3ek01MTIgMTA2LjY2N2MtMTg4LjE2IDAtMzQxLjMzMyAxNTMuMTczLTM0MS4zMzMgMzQxLjMzM3MxNTMuMTczIDM0MS4zMzMgMzQxLjMzMyAzNDEuMzMzIDM0MS4zMzMtMTUzLjE3MyAzNDEuMzMzLTM0MS4zMzMtMTUzLjE3My0zNDEuMzMzLTM0MS4zMzMtMzQxLjMzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTQ5OyIgZ2x5cGgtbmFtZT0ibGl2ZV9oZWxwX2JsYWNrXzI0ZHAiIGQ9Ik04MTAuNjY3IDg3NC42NjdoLTU5Ny4zMzNjLTQ3LjM2IDAtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzM3YtNTk3LjMzM2MwLTQ2LjkzMyAzOC40LTg1LjMzMyA4NS4zMzMtODUuMzMzaDE3MC42NjdsOTcuNzA3LTk3LjcwN2MxNi42NC0xNi42NCA0My41Mi0xNi42NCA2MC4xNiAwbDk4LjEzMyA5Ny43MDdoMTcwLjY2N2M0Ni45MzMgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzdjU5Ny4zMzNjMCA0Ni45MzMtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM3pNNTU0LjY2NyAxOTJoLTg1LjMzM3Y4NS4zMzNoODUuMzMzdi04NS4zMzN6TTY0Mi45ODcgNTIyLjY2N2wtMzguNC0zOS4yNTNjLTI0Ljc0Ny0yNS4xNzMtNDIuMjQtNDYuOTMzLTQ3Ljc4Ny04Ny44OTMtMi41Ni0xOC4zNDctMTcuNDkzLTMyLjQyNy0zNi4yNjctMzIuNDI3aC0xMy4yMjdjLTIyLjE4NyAwLTM5LjI1MyAxOS42MjctMzYuMjY3IDQxLjgxMyA0LjY5MyAzOC44MjcgMjIuNjEzIDczLjM4NyA0OC42NCA5OS44NGw1Mi45MDcgNTMuNzZjMTUuMzYgMTUuMzYgMjQuNzQ3IDM2LjY5MyAyNC43NDcgNjAuMTYgMCA0Ni45MzMtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzMy0zNy4xMiAwLTY5LjEyLTI0LjMyLTgwLjY0LTU3LjYtNS41NDctMTUuNzg3LTE4Ljc3My0yNy4zMDctMzUuNDEzLTI3LjMwN2gtMTIuOGMtMjQuNzQ3IDAtNDEuODEzIDIzLjg5My0zNC45ODcgNDcuNzg3IDIwLjkwNyA3MC44MjcgODYuMTg3IDEyMi40NTMgMTYzLjg0IDEyMi40NTMgOTQuMjkzIDAgMTcwLjY2Ny03Ni4zNzMgMTcwLjY2Ny0xNzAuNjY3IDAtMzcuNTQ3LTE1LjM2LTcxLjY4LTM5LjY4LTk2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NGE7IiBnbHlwaC1uYW1lPSJtYXJrX2NoYXRfcmVhZF9ibGFja18yNGRwIiBkPSJNNzcwLjEzMyAxMzYuOTZjLTE2LjY0LTE2LjY0LTQzLjUyLTE2LjY0LTYwLjE2IDBsLTkwLjQ1MyA5MC40NTNjLTE2LjY0IDE2LjY0LTE2LjY0IDQzLjUyIDAgNjAuMTZ2MGMxNi42NCAxNi42NCA0My41MiAxNi42NCA2MC4xNiAwbDYwLjE2LTYwLjE2IDE1MS4wNDAgMTUxLjA0MGMxNi42NCAxNi42NCA0My41MiAxNi42NCA2MC4xNiAwdjBjMTYuNjQtMTYuNjQgMTYuNjQtNDMuNTIgMC02MC4xNmwtMTgwLjkwNy0xODEuMzMzek01MTIgMjM0LjY2N2MwIDE2NS4xMiAxMzMuNTQ3IDI5OC42NjcgMjk4LjY2NyAyOTguNjY3IDQ2LjA4MCAwIDg5LjE3My0xMC42NjcgMTI4LTI5LjAxM3YyODUuMDEzYzAgNDYuOTMzLTM4LjQgODUuMzMzLTg1LjMzMyA4NS4zMzNoLTY4Mi42NjdjLTQ2LjkzMyAwLTg1LjMzMy0zOC40LTg1LjMzMy04NS4zMzN2LTc2OGwxNzAuNjY3IDE3MC42NjdoMjU2YzAgNy4yNTMgMC40MjcgMTQuMDgwIDEuMjggMjEuMzMzLTAuODUzIDcuMjUzLTEuMjggMTQuMDgwLTEuMjggMjEuMzMzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NGI7IiBnbHlwaC1uYW1lPSJtYXJrX2NoYXRfdW5yZWFkX2JsYWNrXzI0ZHAiIGQ9Ik05MzguNjY3IDY2Mi4xODd2LTM4NC44NTNjMC00Ni45MzMtMzguNC04NS4zMzMtODUuMzMzLTg1LjMzM2gtNTk3LjMzM2wtMTcwLjY2Ny0xNzAuNjY3djc2OGMwIDQ2LjkzMyAzOC40IDg1LjMzMyA4NS4zMzMgODUuMzMzaDQzMC45MzNjLTIuNTYtMTMuNjUzLTQuMjY3LTI4LjE2LTQuMjY3LTQyLjY2NyAwLTExNy43NiA5NS41NzMtMjEzLjMzMyAyMTMuMzMzLTIxMy4zMzMgNDguMjEzIDAgOTIuMTYgMTYuNjQgMTI4IDQzLjUyek02ODIuNjY3IDgzMmMwLTcwLjgyNyA1Ny4xNzMtMTI4IDEyOC0xMjhzMTI4IDU3LjE3MyAxMjggMTI4LTU3LjE3MyAxMjgtMTI4IDEyOC0xMjgtNTcuMTczLTEyOC0xMjh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk0YzsiIGdseXBoLW5hbWU9Im1pc2NlbGxhbmVvdXNfc2VydmljZXNfYmxhY2tfMjRkcCIgZD0iTTYwNC41ODcgMzc1LjA0MGw1OS43MzMgMTAzLjI1M2MzLjg0IDYuNCAyLjEzMyAxNC41MDctMy40MTMgMTkuMmwtNjMuMTQ3IDQ5LjQ5M2MxLjI4IDkuMzg3IDIuMTMzIDE5LjIgMi4xMzMgMjkuMDEzcy0wLjg1MyAxOS42MjctMi4xMzMgMjkuNDRsNjMuMTQ3IDQ5LjQ5M2M1LjU0NyA0LjY5MyA3LjI1MyAxMi44IDMuNDEzIDE5LjJsLTU5LjczMyAxMDMuMjUzYy0zLjg0IDYuNC0xMS41MiA4Ljk2LTE4LjM0NyA2LjRsLTc0LjI0LTI5Ljg2N2MtMTUuMzYgMTEuOTQ3LTMyIDIxLjc2LTUwLjM0NyAyOS40NGwtMTEuMDkzIDc4LjkzM2MtMS4yOCA2LjgyNy03LjY4IDEyLjM3My0xNC45MzMgMTIuMzczaC0xMTkuNDY3Yy03LjI1MyAwLTEzLjY1My01LjU0Ny0xNC45MzMtMTIuOGwtMTEuMDkzLTc4LjkzM2MtMTcuOTItNy42OC0zNC45ODctMTcuNDkzLTUwLjM0Ny0yOS40NGwtNzQuMjQgMjkuODY3Yy02LjgyNyAyLjU2LTE0LjUwNyAwLTE4LjM0Ny02LjRsLTU5LjczMy0xMDMuMjUzYy0zLjg0LTYuNC0yLjEzMy0xNC41MDcgMy40MTMtMTkuMmw2My4xNDctNDkuNDkzYy0xLjI4LTkuMzg3LTIuMTMzLTE5LjItMi4xMzMtMjkuMDEzczAuODUzLTE5LjYyNyAyLjEzMy0yOS40NGwtNjMuMTQ3LTQ5LjQ5M2MtNS41NDctNC42OTMtNy4yNTMtMTIuOC0zLjQxMy0xOS4ybDU5LjczMy0xMDMuMjUzYzMuODQtNi40IDExLjUyLTguOTYgMTguMzQ3LTYuNGw3NC4yNCAyOS44NjdjMTUuMzYtMTEuOTQ3IDMyLTIxLjc2IDUwLjM0Ny0yOS40NGwxMS4wOTMtNzguOTMzYzEuMjgtNi44MjcgNy42OC0xMi4zNzMgMTQuOTMzLTEyLjM3M2gxMTkuNDY3YzcuMjUzIDAgMTMuNjUzIDUuNTQ3IDE0LjkzMyAxMi44bDExLjA5MyA3OC45MzNjMTcuOTIgNy42OCAzNC45ODcgMTcuNDkzIDUwLjM0NyAyOS40NGw3NC4yNC0yOS44NjdjNi44MjctMi41NiAxNC41MDcgMCAxOC4zNDcgNi40ek0zNzUuODkzIDQ5MC42NjdjLTQ2LjkzMyAwLTg1LjMzMyAzOC40LTg1LjMzMyA4NS4zMzNzMzguNCA4NS4zMzMgODUuMzMzIDg1LjMzMyA4NS4zMzMtMzguNCA4NS4zMzMtODUuMzMzYzAtNDYuOTMzLTM4LjQtODUuMzMzLTg1LjMzMy04NS4zMzN6TTkzNS4yNTMgMTYzLjQxM2wtNDAuOTYgMzEuNTczYzAuODUzIDUuOTczIDEuNzA3IDEyLjM3MyAxLjcwNyAxOC43NzNzLTAuNDI3IDEyLjgtMS43MDcgMTguNzczbDQwLjUzMyAzMS41NzNjMy40MTMgMi45ODcgNC42OTMgOC4xMDcgMi4xMzMgMTIuMzczbC0zOC40IDY2LjEzM2MtMi4xMzMgNC4yNjctNy4yNTMgNS41NDctMTEuOTQ3IDQuMjY3bC00Ny4zNi0xOS4yYy05LjgxMyA3LjY4LTIwLjQ4IDE0LjA4MC0zMi40MjcgMTguNzczbC03LjI1MyA1MC4zNDdjLTAuNDI3IDUuMTItNC42OTMgOC41MzMtOC45NiA4LjUzM2gtNzYuMzczYy00LjY5MyAwLTguOTYtMy40MTMtOS4zODctOC4xMDdsLTcuMjUzLTUwLjM0N2MtMTEuNTItNS4xMi0yMi42MTMtMTEuMDkzLTMyLjQyNy0xOC43NzNsLTQ3LjM2IDE5LjJjLTQuMjY3IDEuNzA3LTkuMzg3IDAtMTEuOTQ3LTQuMjY3bC0zOC40LTY2LjEzM2MtMi4xMzMtNC4yNjctMS43MDctOS4zODcgMi4xMzMtMTIuMzczbDQwLjUzMy0zMS41NzNjLTAuODUzLTUuOTczLTEuMjgtMTIuMzczLTEuMjgtMTguNzczczAuNDI3LTEyLjggMS4yOC0xOC43NzNsLTQwLjUzMy0zMS41NzNjLTMuNDEzLTIuOTg3LTQuNjkzLTguMTA3LTIuMTMzLTEyLjM3M2wzOC40LTY2LjEzM2MyLjEzMy00LjI2NyA3LjI1My01LjU0NyAxMS45NDctNC4yNjdsNDcuMzYgMTkuMmM5LjgxMy03LjY4IDIwLjQ4LTE0LjA4MCAzMi40MjctMTguNzczbDcuMjUzLTUwLjM0N2MwLjg1My00LjY5MyA0LjY5My04LjEwNyA5LjM4Ny04LjEwN2g3Ni4zNzNjNC42OTMgMCA4Ljk2IDMuNDEzIDkuMzg3IDguMTA3bDcuMjUzIDUwLjM0N2MxMS41MiA1LjEyIDIyLjYxMyAxMS4wOTMgMzIgMTguNzczbDQ3Ljc4Ny0xOS4yYzQuMjY3LTEuNzA3IDkuMzg3IDAgMTEuOTQ3IDQuMjY3bDM4LjQgNjYuMTMzYzIuNTYgMy44NCAxLjI4IDguOTYtMi4xMzMgMTEuOTQ3ek03NTIuMjEzIDE1Ni41ODdjLTMxLjU3MyAwLTU3LjYgMjUuNi01Ny42IDU3LjZzMjUuNiA1Ny42IDU3LjYgNTcuNiA1Ny42LTI1LjYgNTcuNi01Ny42LTI2LjAyNy01Ny42LTU3LjYtNTcuNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTRkOyIgZ2x5cGgtbmFtZT0ibW9kZV9jb21tZW50X2JsYWNrXzI0ZHAiIGQ9Ik05MzguNjY3IDc4OS4zMzNjMCA0Ni45MzMtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM2gtNjgyLjY2N2MtNDYuOTMzIDAtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzM3YtNTEyYzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoNTk3LjMzM2wxNzAuNjY3LTE3MC42Njd2NzY4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NGU7IiBnbHlwaC1uYW1lPSJub3RlX2FkZF9ibGFja18yNGRwIiBkPSJNNjIyLjUwNyA4NDkuNDkzYy0xNi4yMTMgMTYuMjEzLTM3Ljk3MyAyNS4xNzMtNjAuNTg3IDI1LjE3M2gtMzA1LjkyYy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi02ODIuNjY3YzAtNDYuOTMzIDM3Ljk3My04NS4zMzMgODQuOTA3LTg1LjMzM2g1MTIuNDI3YzQ2LjkzMyAwIDg1LjMzMyAzOC40IDg1LjMzMyA4NS4zMzN2NDc2LjU4N2MwIDIyLjYxMy04Ljk2IDQ0LjM3My0yNS4xNzMgNjAuMTZsLTIwNS42NTMgMjA2LjA4MHpNNjQwIDI3Ny4zMzNoLTg1LjMzM3YtODUuMzMzYzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42NjdzLTQyLjY2NyAxOS4yLTQyLjY2NyA0Mi42Njd2ODUuMzMzaC04NS4zMzNjLTIzLjQ2NyAwLTQyLjY2NyAxOS4yLTQyLjY2NyA0Mi42NjdzMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N2g4NS4zMzN2ODUuMzMzYzAgMjMuNDY3IDE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42NjdzNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3YtODUuMzMzaDg1LjMzM2MyMy40NjcgMCA0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3cy0xOS4yLTQyLjY2Ny00Mi42NjctNDIuNjY3ek01NTQuNjY3IDYxOC42Njd2MTkybDIzNC42NjctMjM0LjY2N2gtMTkyYy0yMy40NjcgMC00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NGY7IiBnbHlwaC1uYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW50X2JsYWNrXzI0ZHAiIGQ9Ik01MTItMjEuMzMzYzQ2LjkzMyAwIDg0LjkwNyAzNy45NzMgODQuOTA3IDg0LjkwN2gtMTY5LjgxM2MwLTQ2LjkzMyAzNy45NzMtODQuOTA3IDg0LjkwNy04NC45MDd6TTg2NS43MDcgMTc5LjYyN2wtNTUuMDQwIDU1LjA0MHYyNTZjMCAxNDIuOTMzLTEwMC42OTMgMjYyLjQtMjM0LjY2NyAyOTEuNDEzdjQ5LjkyYzAgMzUuNDEzLTI4LjU4NyA2NC02NCA2NHMtNjQtMjguNTg3LTY0LTY0di00OS45MmMtMTMzLjk3My0yOS4wMTMtMjM0LjY2Ny0xNDguNDgtMjM0LjY2Ny0yOTEuNDEzdi0yNTZsLTU1LjA0MC01NS4wNDBjLTI2Ljg4LTI2Ljg4LTguMTA3LTcyLjk2IDI5Ljg2Ny03Mi45Nmg2NDcuMjUzYzM4LjQgMCA1Ny4xNzMgNDYuMDgwIDMwLjI5MyA3Mi45NnpNNTU0LjY2NyAyNzcuMzMzaC04NS4zMzN2ODUuMzMzaDg1LjMzM3YtODUuMzMzek01NTQuNjY3IDQ5MC42NjdjMC0yMy40NjctMTkuMi00Mi42NjctNDIuNjY3LTQyLjY2N3MtNDIuNjY3IDE5LjItNDIuNjY3IDQyLjY2N3Y4NS4zMzNjMCAyMy40NjcgMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N3M0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk1MDsiIGdseXBoLW5hbWU9InByaW9yaXR5X2hpZ2hfYmxhY2tfMjRkcCIgZD0iTTU5Ny4zMzMgMTQ5LjMzM2MwLTQ3LjEyOC0zOC4yMDUtODUuMzMzLTg1LjMzMy04NS4zMzNzLTg1LjMzMyAzOC4yMDUtODUuMzMzIDg1LjMzM2MwIDQ3LjEyOCAzOC4yMDUgODUuMzMzIDg1LjMzMyA4NS4zMzNzODUuMzMzLTM4LjIwNSA4NS4zMzMtODUuMzMzek01MTIgODMyYy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi0zNDEuMzMzYzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNzODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3YzNDEuMzMzYzAgNDYuOTMzLTM4LjQgODUuMzMzLTg1LjMzMyA4NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk1MTsiIGdseXBoLW5hbWU9InByaXZhY3lfdGlwX2JsYWNrXzI0ZHAiIGQ9Ik0xNzguNzczIDc2OS4yOGMtMzAuNzItMTMuNjUzLTUwLjc3My00NC4zNzMtNTAuNzczLTc4LjA4MHYtMjAwLjUzM2MwLTIzNi44IDE2My44NC00NTguMjQgMzg0LTUxMiAyMjAuMTYgNTMuNzYgMzg0IDI3NS4yIDM4NCA1MTJ2MjAwLjUzM2MwIDMzLjcwNy0yMC4wNTMgNjQuNDI3LTUwLjc3MyA3OC4wODBsLTI5OC42NjcgMTMyLjY5M2MtMjIuMTg3IDkuODEzLTQ3LjM2IDkuODEzLTY5LjEyIDBsLTI5OC42NjctMTMyLjY5M3pNNTEyIDY2MS4zMzN2MGMyMy40NjcgMCA0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3djBjMC0yMy40NjctMTkuMi00Mi42NjctNDIuNjY3LTQyLjY2N3YwYy0yMy40NjcgMC00Mi42NjcgMTkuMi00Mi42NjcgNDIuNjY3djBjMCAyMy40NjcgMTkuMiA0Mi42NjcgNDIuNjY3IDQyLjY2N3pNNTEyIDQ5MC42Njd2MGMyMy40NjcgMCA0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di0xNzAuNjY3YzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd2MGMtMjMuNDY3IDAtNDIuNjY3IDE5LjItNDIuNjY3IDQyLjY2N3YxNzAuNjY3YzAgMjMuNDY3IDE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42Njd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk1MjsiIGdseXBoLW5hbWU9InFyX2NvZGVfMl9ibGFja18yNGRwIiBkPSJNNjQwIDY0aC04NS4zMzN2ODUuMzMzaDg1LjMzM3YtODUuMzMzek01NTQuNjY3IDM2Mi42NjdoLTg1LjMzM3YtMjEzLjMzM2g4NS4zMzN2MjEzLjMzM3pNODk2IDQ0OGgtODUuMzMzdi0xNzAuNjY3aDg1LjMzM3YxNzAuNjY3ek04MTAuNjY3IDUzMy4zMzNoLTg1LjMzM3YtODUuMzMzaDg1LjMzM3Y4NS4zMzN6TTI5OC42NjcgNDQ4aC04NS4zMzN2LTg1LjMzM2g4NS4zMzN2ODUuMzMzek0yMTMuMzMzIDUzMy4zMzNoLTg1LjMzM3YtODUuMzMzaDg1LjMzM3Y4NS4zMzN6TTUxMiA3NDYuNjY3aDg1LjMzM3Y4NS4zMzNoLTg1LjMzM3YtODUuMzMzek0xOTIgNzY4di0xMjhoMTI4djEyOGgtMTI4ek0zNDEuMzMzIDU3NmgtMTcwLjY2N2MtMjMuNDY3IDAtNDIuNjY3IDE5LjItNDIuNjY3IDQyLjY2N3YxNzAuNjY3YzAgMjMuNDY3IDE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42NjdoMTcwLjY2N2MyMy40NjcgMCA0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di0xNzAuNjY3YzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6TTE5MiAyNTZ2LTEyOGgxMjh2MTI4aC0xMjh6TTM0MS4zMzMgNjRoLTE3MC42NjdjLTIzLjQ2NyAwLTQyLjY2NyAxOS4yLTQyLjY2NyA0Mi42Njd2MTcwLjY2N2MwIDIzLjQ2NyAxOS4yIDQyLjY2NyA0Mi42NjcgNDIuNjY3aDE3MC42NjdjMjMuNDY3IDAgNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3YtMTcwLjY2N2MwLTIzLjQ2Ny0xOS4yLTQyLjY2Ny00Mi42NjctNDIuNjY3ek03MDQgNzY4di0xMjhoMTI4djEyOGgtMTI4ek04NTMuMzMzIDU3NmgtMTcwLjY2N2MtMjMuNDY3IDAtNDIuNjY3IDE5LjItNDIuNjY3IDQyLjY2N3YxNzAuNjY3YzAgMjMuNDY3IDE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42NjdoMTcwLjY2N2MyMy40NjcgMCA0Mi42NjctMTkuMiA0Mi42NjctNDIuNjY3di0xNzAuNjY3YzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6TTgxMC42NjcgMTQ5LjMzM3YxMjhoLTE3MC42Njd2LTg1LjMzM2g4NS4zMzN2LTEyOGgxNzAuNjY3djg1LjMzM2gtODUuMzMzek03MjUuMzMzIDQ0OGgtMTcwLjY2N3YtODUuMzMzaDE3MC42Njd2ODUuMzMzek01NTQuNjY3IDUzMy4zMzNoLTI1NnYtODUuMzMzaDg1LjMzM3YtODUuMzMzaDg1LjMzM3Y4NS4zMzNoODUuMzMzdjg1LjMzM3pNNTk3LjMzMyA1NzZ2ODUuMzMzaC04NS4zMzN2ODUuMzMzaC04NS4zMzN2LTE3MC42NjdoMTcwLjY2N3pNMjg4IDczNmgtNjR2LTY0aDY0djY0ek0yODggMjI0aC02NHYtNjRoNjR2NjR6TTgwMCA3MzZoLTY0di02NGg2NHY2NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTUzOyIgZ2x5cGgtbmFtZT0icmFkaW9fYnV0dG9uX2NoZWNrZWRfYmxhY2tfMjRkcCIgZD0iTTUxMiA4NzQuNjY3Yy0yMzUuNTIgMC00MjYuNjY3LTE5MS4xNDctNDI2LjY2Ny00MjYuNjY3czE5MS4xNDctNDI2LjY2NyA0MjYuNjY3LTQyNi42NjcgNDI2LjY2NyAxOTEuMTQ3IDQyNi42NjcgNDI2LjY2Ny0xOTEuMTQ3IDQyNi42NjctNDI2LjY2NyA0MjYuNjY3ek01MTIgMTA2LjY2N2MtMTg4LjU4NyAwLTM0MS4zMzMgMTUyLjc0Ny0zNDEuMzMzIDM0MS4zMzNzMTUyLjc0NyAzNDEuMzMzIDM0MS4zMzMgMzQxLjMzMyAzNDEuMzMzLTE1Mi43NDcgMzQxLjMzMy0zNDEuMzMzLTE1Mi43NDctMzQxLjMzMy0zNDEuMzMzLTM0MS4zMzN6TTcyNS4zMzMgNDQ4YzAtMTE3LjgyMS05NS41MTMtMjEzLjMzMy0yMTMuMzMzLTIxMy4zMzNzLTIxMy4zMzMgOTUuNTEzLTIxMy4zMzMgMjEzLjMzM2MwIDExNy44MjEgOTUuNTEzIDIxMy4zMzMgMjEzLjMzMyAyMTMuMzMzczIxMy4zMzMtOTUuNTEzIDIxMy4zMzMtMjEzLjMzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTU0OyIgZ2x5cGgtbmFtZT0icmFkaW9fYnV0dG9uX3VuY2hlY2tlZF9ibGFja18yNGRwIiBkPSJNNTEyIDg3NC42NjdjLTIzNS41MiAwLTQyNi42NjctMTkxLjE0Ny00MjYuNjY3LTQyNi42NjdzMTkxLjE0Ny00MjYuNjY3IDQyNi42NjctNDI2LjY2NyA0MjYuNjY3IDE5MS4xNDcgNDI2LjY2NyA0MjYuNjY3LTE5MS4xNDcgNDI2LjY2Ny00MjYuNjY3IDQyNi42Njd6TTUxMiAxMDYuNjY3Yy0xODguNTg3IDAtMzQxLjMzMyAxNTIuNzQ3LTM0MS4zMzMgMzQxLjMzM3MxNTIuNzQ3IDM0MS4zMzMgMzQxLjMzMyAzNDEuMzMzIDM0MS4zMzMtMTUyLjc0NyAzNDEuMzMzLTM0MS4zMzMtMTUyLjc0Ny0zNDEuMzMzLTM0MS4zMzMtMzQxLjMzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTU1OyIgZ2x5cGgtbmFtZT0ic2V0dGluZ3Nfc3VnZ2VzdF9ibGFja18yNGRwIiBkPSJNNzY5LjcwNyA2MTkuMDkzbC0yNi44OCA1OS43MzMtNTkuNzMzIDI2Ljg4Yy0xNi42NCA3LjY4LTE2LjY0IDMxLjE0NyAwIDM4LjgyN2w1OS43MzMgMjYuODggMjYuODggNTkuNzMzYzcuNjggMTYuNjQgMzEuMTQ3IDE2LjY0IDM4LjgyNyAwbDI2Ljg4LTU5LjczMyA1OS43MzMtMjYuODhjMTYuNjQtNy42OCAxNi42NC0zMS4xNDcgMC0zOC44MjdsLTU5LjczMy0yNi44OC0yNi44OC01OS43MzNjLTcuMjUzLTE2LjY0LTMxLjE0Ny0xNi42NC0zOC44MjcgMHpNOTA3Ljk0NyA0MTcuMjhsLTEzLjY1MyAzMC43MmMtNy42OCAxNi42NC0zMS4xNDcgMTYuNjQtMzguODI3IDBsLTEzLjY1My0zMC43Mi0zMS4xNDctMTMuNjUzYy0xNi42NC03LjY4LTE2LjY0LTMxLjE0NyAwLTM4LjgyN2wzMC43Mi0xMy42NTMgMTMuNjUzLTMxLjE0N2M3LjY4LTE2LjY0IDMxLjE0Ny0xNi42NCAzOC44MjcgMGwxMy42NTMgMzAuNzIgMzEuMTQ3IDEzLjY1M2MxNi42NCA3LjY4IDE2LjY0IDMxLjE0NyAwIDM4LjgyN2wtMzAuNzIgMTQuMDgwek02OTIuOTA3IDM0Ni44OGw1Mi40OC0zOS42OGMxNy4wNjctMTIuOCAyMS43Ni0zNi42OTMgMTEuMDkzLTU1LjQ2N2wtNjkuMTItMTE5LjQ2N2MtMTAuNjY3LTE4Ljc3My0zMy43MDctMjYuNDUzLTUzLjMzMy0xNy45MmwtNjEuMDEzIDI1LjZjLTguNTMzLTUuNTQ3LTE3LjkyLTExLjA5My0yNy4zMDctMTUuNzg3bC04LjEwNy02NS43MDdjLTIuNTYtMjEuMzMzLTIwLjkwNy0zNy41NDctNDIuMjQtMzcuNTQ3aC0xMzcuODEzYy0yMS4zMzMgMC0zOS42OCAxNi4yMTMtNDIuMjQgMzcuNTQ3bC04LjEwNyA2NS43MDdjLTkuMzg3IDQuNjkzLTE4LjM0NyA5LjgxMy0yNy4zMDcgMTUuNzg3bC02MS4wMTMtMjUuNmMtMTkuNjI3LTguNTMzLTQyLjY2Ny0wLjg1My01My4zMzMgMTcuOTJsLTY5LjEyIDExOS40NjdjLTEwLjY2NyAxOC43NzMtNS45NzMgNDIuMjQgMTEuMDkzIDU1LjQ2N2w1Mi40OCAzOS42OGMwIDUuMTIgMCAxMC42NjcgMCAxNS43ODdzMCAxMC42NjcgMC40MjcgMTUuNzg3bC01Mi40OCAzOS42OGMtMTcuMDY3IDEyLjgtMjEuNzYgMzYuNjkzLTExLjA5MyA1NS40NjdsNjkuMTIgMTE5LjQ2N2MxMC42NjcgMTguNzczIDMzLjcwNyAyNi40NTMgNTMuMzMzIDE3LjkybDYxLjAxMy0yNS42YzguNTMzIDUuNTQ3IDE3LjkyIDExLjA5MyAyNy4zMDcgMTUuNzg3bDguMTA3IDY1LjcwN2MyLjEzMyAyMC45MDcgMjAuNDggMzcuMTIgNDEuODEzIDM3LjEyaDEzNy44MTNjMjEuMzMzIDAgMzkuNjgtMTYuMjEzIDQyLjI0LTM3LjU0N2w4LjEwNy02NS43MDdjOS4zODctNC42OTMgMTguMzQ3LTkuODEzIDI3LjMwNy0xNS43ODdsNjEuMDEzIDI1LjZjMTkuNjI3IDguNTMzIDQyLjY2NyAwLjg1MyA1My4zMzMtMTcuOTJsNjkuMTItMTE5LjQ2N2MxMC42NjctMTguNzczIDUuOTczLTQyLjI0LTExLjA5My01NS40NjdsLTUyLjQ4LTM5LjY4YzAuNDI3LTUuMTIgMC40MjctMTAuMjQgMC40MjctMTUuNzg3czAtMTAuMjQtMC40MjctMTUuMzZ6TTU1NC42NjcgMzYyLjY2N2MwIDcwLjgyNy01Ny4xNzMgMTI4LTEyOCAxMjhzLTEyOC01Ny4xNzMtMTI4LTEyOCA1Ny4xNzMtMTI4IDEyOC0xMjggMTI4IDU3LjE3MyAxMjggMTI4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NTY7IiBnbHlwaC1uYW1lPSJzdGFyX2JsYWNrXzI0ZHAiIGQ9Ik01MTIgMjIzLjE0N2wxNzcuMDY3LTEwNy4wOTNjMzIuNDI3LTE5LjYyNyA3Mi4xMDcgOS4zODcgNjMuNTczIDQ2LjA4MGwtNDYuOTMzIDIwMS4zODcgMTU2LjU4NyAxMzUuNjhjMjguNTg3IDI0Ljc0NyAxMy4yMjcgNzEuNjgtMjQuMzIgNzQuNjY3bC0yMDYuMDgwIDE3LjQ5My04MC42NCAxOTAuMjkzYy0xNC41MDcgMzQuNTYtNjQgMzQuNTYtNzguNTA3IDBsLTgwLjY0LTE4OS44NjctMjA2LjA4MC0xNy40OTNjLTM3LjU0Ny0yLjk4Ny01Mi45MDctNDkuOTItMjQuMzItNzQuNjY3bDE1Ni41ODctMTM1LjY4LTQ2LjkzMy0yMDEuMzg3Yy04LjUzMy0zNi42OTMgMzEuMTQ3LTY1LjcwNyA2My41NzMtNDYuMDgwbDE3Ny4wNjcgMTA2LjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTU3OyIgZ2x5cGgtbmFtZT0ic3Rhcl9ib3JkZXJfYmxhY2tfMjRkcCIgZD0iTTgzOC40IDU3NC4yOTNsLTIwNi41MDcgMTcuOTItODAuNjQgMTg5Ljg2N2MtMTQuNTA3IDM0LjU2LTY0IDM0LjU2LTc4LjUwNyAwbC04MC42NC0xOTAuMjkzLTIwNi4wODAtMTcuNDkzYy0zNy41NDctMi45ODctNTIuOTA3LTQ5LjkyLTI0LjMyLTc0LjY2N2wxNTYuNTg3LTEzNS42OC00Ni45MzMtMjAxLjM4N2MtOC41MzMtMzYuNjkzIDMxLjE0Ny02NS43MDcgNjMuNTczLTQ2LjA4MGwxNzcuMDY3IDEwNi42NjcgMTc3LjA2Ny0xMDcuMDkzYzMyLjQyNy0xOS42MjcgNzIuMTA3IDkuMzg3IDYzLjU3MyA0Ni4wODBsLTQ2LjkzMyAyMDEuODEzIDE1Ni41ODcgMTM1LjY4YzI4LjU4NyAyNC43NDcgMTMuNjUzIDcxLjY4LTIzLjg5MyA3NC42Njd6TTUxMiAzMDIuOTMzbC0xNjAuNDI3LTk2Ljg1MyA0Mi42NjcgMTgyLjYxMy0xNDEuNjUzIDEyMi44OCAxODYuODggMTYuMjEzIDcyLjUzMyAxNzEuOTQ3IDcyLjk2LTE3Mi4zNzMgMTg2Ljg4LTE2LjIxMy0xNDEuNjUzLTEyMi44OCA0Mi42NjctMTgyLjYxMy0xNjAuODUzIDk3LjI4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NTg7IiBnbHlwaC1uYW1lPSJzdGFyX2JvcmRlcl9wdXJwbGU1MDBfYmxhY2tfMjRkcCIgZD0iTTUxMiA1ODAuNjkzbDQwLjEwNy0xMzIuNjkzaDEyMC4zMmwtOTYuODUzLTY5LjEyIDM5LjY4LTEyOC40MjctMTAzLjI1MyA3OC41MDctMTAzLjI1My03OC41MDcgMzkuNjggMTI4LjQyNy05Ni44NTMgNjkuMTJoMTIwLjMybDQwLjEwNyAxMzIuNjkzek00MDguNzQ3IDUzMy4zMzNoLTE5MC4yOTNjLTQxLjM4NyAwLTU4LjQ1My01My4zMzMtMjQuNzQ3LTc3LjIyN2wxNTUuMzA3LTExMC45MzMtNjEuMDEzLTE5Ni42OTNjLTEyLjM3My0zOS42OCAzMy43MDctNzEuNjggNjYuNTYtNDYuNTA3bDE1Ny40NCAxMTkuNDY3IDE1Ny40NC0xMTkuODkzYzMyLjg1My0yNS4xNzMgNzguOTMzIDYuODI3IDY2LjU2IDQ2LjUwN2wtNjEuMDEzIDE5Ni42OTMgMTU1LjMwNyAxMTAuOTMzYzMzLjcwNyAyNC4zMiAxNi42NCA3Ny4yMjctMjQuNzQ3IDc3LjIyN2gtMTkwLjI5M2wtNjIuNzIgMjA2LjUwN2MtMTIuMzczIDQwLjUzMy02OS41NDcgNDAuNTMzLTgxLjQ5MyAwbC02Mi4yOTMtMjA2LjA4MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTU5OyIgZ2x5cGgtbmFtZT0ic3Rhcl9oYWxmX2JsYWNrXzI0ZHAiIGQ9Ik04MzguNCA1NzQuMjkzbC0yMDYuNTA3IDE3LjkyLTgwLjY0IDE4OS44NjdjLTE0LjUwNyAzNC41Ni02NCAzNC41Ni03OC41MDcgMGwtODAuNjQtMTkwLjI5My0yMDYuMDgwLTE3LjQ5M2MtMzcuNTQ3LTIuOTg3LTUyLjkwNy00OS45Mi0yNC4zMi03NC42NjdsMTU2LjU4Ny0xMzUuNjgtNDYuOTMzLTIwMS4zODdjLTguNTMzLTM2LjY5MyAzMS4xNDctNjUuNzA3IDYzLjU3My00Ni4wODBsMTc3LjA2NyAxMDYuNjY3IDE3Ny4wNjctMTA3LjA5M2MzMi40MjctMTkuNjI3IDcyLjEwNyA5LjM4NyA2My41NzMgNDYuMDgwbC00Ni45MzMgMjAxLjgxMyAxNTYuNTg3IDEzNS42OGMyOC41ODcgMjQuNzQ3IDEzLjY1MyA3MS42OC0yMy44OTMgNzQuNjY3ek01MTIgMzAyLjkzM3YzOTYuOGw3Mi45Ni0xNzIuMzczIDE4Ni44OC0xNi4yMTMtMTQxLjY1My0xMjIuODggNDIuNjY3LTE4Mi42MTMtMTYwLjg1MyA5Ny4yOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTVhOyIgZ2x5cGgtbmFtZT0ic3Rhcl9vdXRsaW5lX2JsYWNrXzI0ZHAiIGQ9Ik04MzguNCA1NzQuMjkzbC0yMDYuNTA3IDE3LjkyLTgwLjY0IDE4OS44NjdjLTE0LjUwNyAzNC41Ni02NCAzNC41Ni03OC41MDcgMGwtODAuNjQtMTkwLjI5My0yMDYuMDgwLTE3LjQ5M2MtMzcuNTQ3LTIuOTg3LTUyLjkwNy00OS45Mi0yNC4zMi03NC42NjdsMTU2LjU4Ny0xMzUuNjgtNDYuOTMzLTIwMS4zODdjLTguNTMzLTM2LjY5MyAzMS4xNDctNjUuNzA3IDYzLjU3My00Ni4wODBsMTc3LjA2NyAxMDYuNjY3IDE3Ny4wNjctMTA3LjA5M2MzMi40MjctMTkuNjI3IDcyLjEwNyA5LjM4NyA2My41NzMgNDYuMDgwbC00Ni45MzMgMjAxLjgxMyAxNTYuNTg3IDEzNS42OGMyOC41ODcgMjQuNzQ3IDEzLjY1MyA3MS42OC0yMy44OTMgNzQuNjY3ek01MTIgMzAyLjkzM2wtMTYwLjQyNy05Ni44NTMgNDIuNjY3IDE4Mi42MTMtMTQxLjY1MyAxMjIuODggMTg2Ljg4IDE2LjIxMyA3Mi41MzMgMTcxLjk0NyA3Mi45Ni0xNzIuMzczIDE4Ni44OC0xNi4yMTMtMTQxLjY1My0xMjIuODggNDIuNjY3LTE4Mi42MTMtMTYwLjg1MyA5Ny4yOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTViOyIgZ2x5cGgtbmFtZT0ic3Rhcl9wdXJwbGU1MDBfYmxhY2tfMjRkcCIgZD0iTTUxMiA1ODAuNjkzbDQwLjEwNy0xMzIuNjkzaDEyMC4zMmwtOTYuODUzLTY5LjEyIDM5LjY4LTEyOC40MjctMTAzLjI1MyA3OC41MDctMTAzLjI1My03OC41MDcgMzkuNjggMTI4LjQyNy05Ni44NTMgNjkuMTJoMTIwLjMybDQwLjEwNyAxMzIuNjkzek00MDguNzQ3IDUzMy4zMzNoLTE5MC4yOTNjLTQxLjM4NyAwLTU4LjQ1My01My4zMzMtMjQuNzQ3LTc3LjIyN2wxNTUuMzA3LTExMC45MzMtNjEuMDEzLTE5Ni42OTNjLTEyLjM3My0zOS42OCAzMy43MDctNzEuNjggNjYuNTYtNDYuNTA3bDE1Ny40NCAxMTkuNDY3IDE1Ny40NC0xMTkuODkzYzMyLjg1My0yNS4xNzMgNzguOTMzIDYuODI3IDY2LjU2IDQ2LjUwN2wtNjEuMDEzIDE5Ni42OTMgMTU1LjMwNyAxMTAuOTMzYzMzLjcwNyAyNC4zMiAxNi42NCA3Ny4yMjctMjQuNzQ3IDc3LjIyN2gtMTkwLjI5M2wtNjIuNzIgMjA2LjUwN2MtMTIuMzczIDQwLjUzMy02OS41NDcgNDAuNTMzLTgxLjQ5MyAwbC02Mi4yOTMtMjA2LjA4MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTVjOyIgZ2x5cGgtbmFtZT0ic3VwcG9ydF9hZ2VudF9ibGFja18yNGRwIiBkPSJNODk2IDQzOC42MTNjMCAyMzQuMjQtMTgxLjc2IDM5My4zODctMzg0IDM5My4zODctMjAwLjEwNyAwLTM4NC0xNTUuNzMzLTM4NC0zOTUuOTQ3LTI1LjYtMTQuNTA3LTQyLjY2Ny00MS44MTMtNDIuNjY3LTczLjM4N3YtODUuMzMzYzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzN2MGMyMy40NjcgMCA0Mi42NjcgMTkuMiA0Mi42NjcgNDIuNjY3djIwNS4yMjdjMCAxNjMuNDEzIDEyNS44NjcgMzA2LjM0NyAyODkuMjggMzExLjA0MCAxNjguOTYgNS4xMiAzMDguMDUzLTEzMC41NiAzMDguMDUzLTI5OC42Njd2LTMwMi45MzNoLTI5OC42NjdjLTIzLjQ2NyAwLTQyLjY2Ny0xOS4yLTQyLjY2Ny00Mi42Njd2MGMwLTIzLjQ2NyAxOS4yLTQyLjY2NyA0Mi42NjctNDIuNjY3aDI5OC42NjdjNDYuOTMzIDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3Y1Mi4wNTNjMjUuMTczIDEzLjIyNyA0Mi42NjcgMzkuMjUzIDQyLjY2NyA2OS45NzN2OTguMTMzYzAgMjkuODY3LTE3LjQ5MyA1NS44OTMtNDIuNjY3IDY5LjEyek00MjYuNjY3IDQwNS4zMzNjMC0yMy41NjQtMTkuMTAzLTQyLjY2Ny00Mi42NjctNDIuNjY3cy00Mi42NjcgMTkuMTAzLTQyLjY2NyA0Mi42NjdjMCAyMy41NjQgMTkuMTAzIDQyLjY2NyA0Mi42NjcgNDIuNjY3czQyLjY2Ny0xOS4xMDMgNDIuNjY3LTQyLjY2N3pNNjgyLjY2NyA0MDUuMzMzYzAtMjMuNTY0LTE5LjEwMy00Mi42NjctNDIuNjY3LTQyLjY2N3MtNDIuNjY3IDE5LjEwMy00Mi42NjcgNDIuNjY3YzAgMjMuNTY0IDE5LjEwMyA0Mi42NjcgNDIuNjY3IDQyLjY2N3M0Mi42NjctMTkuMTAzIDQyLjY2Ny00Mi42Njd6TTc2OCA0ODkuMzg3Yy0yMC40OCAxMjEuNi0xMjYuMjkzIDIxNC42MTMtMjUzLjg2NyAyMTQuNjEzLTEyOS4yOCAwLTI2OC4zNzMtMTA3LjA5My0yNTcuMjgtMjc1LjIgMTA1LjM4NyA0My4wOTMgMTg0Ljc0NyAxMzYuOTYgMjA3LjM2IDI1MS4zMDcgNTUuODkzLTExMi4yMTMgMTcwLjY2Ny0xODkuNDQgMzAzLjc4Ny0xOTAuNzJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk1ZDsiIGdseXBoLW5hbWU9InN5bmNfYmxhY2tfMjRkcCIgZD0iTTUxMiA3ODkuMzMzdjc2LjM3M2MwIDE5LjItMjMuMDQwIDI4LjU4Ny0zNi4yNjcgMTQuOTMzbC0xMTkuNDY3LTExOS4wNDBjLTguNTMzLTguNTMzLTguNTMzLTIxLjc2IDAtMzAuMjkzbDExOS4wNDAtMTE5LjA0MGMxMy42NTMtMTMuMjI3IDM2LjY5My0zLjg0IDM2LjY5MyAxNS4zNnY3Ni4zNzNjMTQxLjIyNyAwIDI1Ni0xMTQuNzczIDI1Ni0yNTYgMC0zMy43MDctNi40LTY2LjU2LTE4Ljc3My05Ni02LjQtMTUuMzYtMS43MDctMzIuODUzIDkuODEzLTQ0LjM3MyAyMS43Ni0yMS43NiA1OC40NTMtMTQuMDgwIDY5Ljk3MyAxNC41MDcgMTUuNzg3IDM4LjgyNyAyNC4zMiA4MS40OTMgMjQuMzIgMTI1Ljg2NyAwIDE4OC41ODctMTUyLjc0NyAzNDEuMzMzLTM0MS4zMzMgMzQxLjMzM3pNNTEyIDE5MmMtMTQxLjIyNyAwLTI1NiAxMTQuNzczLTI1NiAyNTYgMCAzMy43MDcgNi40IDY2LjU2IDE4Ljc3MyA5NiA2LjQgMTUuMzYgMS43MDcgMzIuODUzLTkuODEzIDQ0LjM3My0yMS43NiAyMS43Ni01OC40NTMgMTQuMDgwLTY5Ljk3My0xNC41MDctMTUuNzg3LTM4LjgyNy0yNC4zMi04MS40OTMtMjQuMzItMTI1Ljg2NyAwLTE4OC41ODcgMTUyLjc0Ny0zNDEuMzMzIDM0MS4zMzMtMzQxLjMzM3YtNzYuMzczYzAtMTkuMiAyMy4wNDAtMjguNTg3IDM2LjI2Ny0xNC45MzNsMTE5LjA0MCAxMTkuMDQwYzguNTMzIDguNTMzIDguNTMzIDIxLjc2IDAgMzAuMjkzbC0xMTkuMDQwIDExOS4wNDBjLTEzLjIyNyAxMy4yMjctMzYuMjY3IDMuODQtMzYuMjY3LTE1LjM2di03Ni4zNzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk1ZTsiIGdseXBoLW5hbWU9InRhc2tfYWx0X2JsYWNrXzI0ZHAiIGQ9Ik05MDguMzczIDcwOC42OTNsLTQyNi42NjctNDI2LjY2N2MtMTYuNjQtMTYuNjQtNDMuNTItMTYuNjQtNjAuMTYgMGwtMTIwLjc0NyAxMjAuNzQ3Yy0xNi42NCAxNi42NC0xNi42NCA0My41MiAwIDYwLjE2djBjMTYuNjQgMTYuNjQgNDMuNTIgMTYuNjQgNjAuMTYgMGw5MC40NTMtOTAuNDUzIDM5Ni4zNzMgMzk2LjM3M2MxNi42NCAxNi42NCA0My41MiAxNi42NCA2MC4xNiAwdjBjMTcuMDY3LTE2LjY0IDE3LjA2Ny00My41MiAwLjQyNy02MC4xNnpNNjcyLjg1MyA4NDMuMDkzYy03Mi4xMDcgMjkuNDQtMTU0LjAyNyAzOS42OC0yMzkuMzYgMjQuMzItMTczLjY1My0zMS4xNDctMzEyLjMyLTE3MS4wOTMtMzQxLjc2LTM0NC43NDctNDguNjQtMjg4IDE5MS4xNDctNTM0LjYxMyA0NzcuNDQtNDk3LjQ5MyAxNjguOTYgMjEuNzYgMzEwLjYxMyAxNDcuNjI3IDM1NC45ODcgMzExLjg5MyAxNy4wNjcgNjIuNzIgMTguNzczIDEyMy4zMDcgOC45NiAxODAuMDUzLTUuNTQ3IDM0LjEzMy00Ny43ODcgNDcuMzYtNzIuNTMzIDIzLjA0MHYwYy05LjgxMy05LjgxMy0xNC4wODAtMjQuMzItMTEuNTItMzcuOTczIDkuMzg3LTU2Ljc0NyA1LjEyLTExNy4zMzMtMjIuMTg3LTE4MS43Ni00OS40OTMtMTE1LjYyNy0xNTcuMDEzLTIwMC41MzMtMjgyLjAyNy0yMTIuMDUzLTIxNy42LTIwLjA1My0zOTguMDgwIDE2NC4yNjctMzcxLjIgMzgzLjE0NyAxOC4zNDcgMTUxLjA0MCAxMzkuOTQ3IDI3My45MiAyOTAuNTYgMjk0LjgyNyA3My44MTMgMTAuMjQgMTQzLjc4Ny0zLjg0IDIwMy41Mi0zNC41NiAxNi42NC04LjUzMyAzNi42OTMtNS41NDcgNDkuOTIgNy42OHYwYzIwLjQ4IDIwLjQ4IDE1LjM2IDU1LjA0MC0xMC4yNCA2OC4yNjctMTEuNTIgNS4xMi0yMy4wNDAgMTAuNjY3LTM0LjU2IDE1LjM2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NWY7IiBnbHlwaC1uYW1lPSJ0YXNrX2JsYWNrXzI0ZHAiIGQ9Ik04MjguMTYgNjQzLjg0bC0yMDYuMDgwIDIwNi4wODBjLTE1Ljc4NyAxNS43ODctMzcuNTQ3IDI0Ljc0Ny02MC4xNiAyNC43NDdoLTMwNS45MmMtNDYuOTMzIDAtODQuOTA3LTM4LjQtODQuOTA3LTg1LjMzM2wtMC40MjctNjgyLjY2N2MwLTQ2LjkzMyAzNy45NzMtODUuMzMzIDg0LjkwNy04NS4zMzNoNTEyLjQyN2M0Ni45MzMgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzdjQ3Ni41ODdjMCAyMi42MTMtOC45NiA0NC4zNzMtMjUuMTczIDYwLjU4N3pNNDM2LjQ4IDIyMi4yOTNsLTkwLjQ1MyA5MC40NTNjLTE2LjY0IDE2LjY0LTE2LjY0IDQzLjUyIDAgNjAuMTZ2MGMxNi42NCAxNi42NCA0My41MiAxNi42NCA2MC4xNiAwbDYwLjE2LTYwLjE2IDE1MS4wNDAgMTUxLjA0MGMxNi42NCAxNi42NCA0My41MiAxNi42NCA2MC4xNiAwdjBjMTYuNjQtMTYuNjQgMTYuNjQtNDMuNTIgMC02MC4xNmwtMTgwLjkwNy0xODAuOTA3Yy0xNi4yMTMtMTcuMDY3LTQzLjUyLTE3LjA2Ny02MC4xNi0wLjQyN3pNNTk3LjMzMyA1NzZjLTIzLjQ2NyAwLTQyLjY2NyAxOS4yLTQyLjY2NyA0Mi42Njd2MTkybDIzNC42NjctMjM0LjY2N2gtMTkyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NjA7IiBnbHlwaC1uYW1lPSJ0b2dnbGVfb2ZmX2JsYWNrXzI0ZHAiIGQ9Ik03MjUuMzMzIDY2MS4zMzNoLTQyNi42NjdjLTExNy43NiAwLTIxMy4zMzMtOTUuNTczLTIxMy4zMzMtMjEzLjMzM3M5NS41NzMtMjEzLjMzMyAyMTMuMzMzLTIxMy4zMzNoNDI2LjY2N2MxMTcuNzYgMCAyMTMuMzMzIDk1LjU3MyAyMTMuMzMzIDIxMy4zMzNzLTk1LjU3MyAyMTMuMzMzLTIxMy4zMzMgMjEzLjMzM3pNMjk4LjY2NyAzMjBjLTcwLjgyNyAwLTEyOCA1Ny4xNzMtMTI4IDEyOHM1Ny4xNzMgMTI4IDEyOCAxMjggMTI4LTU3LjE3MyAxMjgtMTI4LTU3LjE3My0xMjgtMTI4LTEyOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTYxOyIgZ2x5cGgtbmFtZT0idG9nZ2xlX29uX2JsYWNrXzI0ZHAiIGQ9Ik03MjUuMzMzIDY2MS4zMzNoLTQyNi42NjdjLTExNy43NiAwLTIxMy4zMzMtOTUuNTczLTIxMy4zMzMtMjEzLjMzM3M5NS41NzMtMjEzLjMzMyAyMTMuMzMzLTIxMy4zMzNoNDI2LjY2N2MxMTcuNzYgMCAyMTMuMzMzIDk1LjU3MyAyMTMuMzMzIDIxMy4zMzNzLTk1LjU3MyAyMTMuMzMzLTIxMy4zMzMgMjEzLjMzM3pNNzI1LjMzMyAzMjBjLTcwLjgyNyAwLTEyOCA1Ny4xNzMtMTI4IDEyOHM1Ny4xNzMgMTI4IDEyOCAxMjggMTI4LTU3LjE3MyAxMjgtMTI4LTU3LjE3My0xMjgtMTI4LTEyOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTYyOyIgZ2x5cGgtbmFtZT0idmlld193ZWVrX2JsYWNrXzI0ZHAiIGQ9Ik0yMjcuNDEzIDEwNi42NjdoLTU2Ljc0N2MtNDYuOTMzIDAtODUuMzMzIDM4LjQtODUuMzMzIDg1LjMzM3Y1MTJjMCA0Ni45MzMgMzguNCA4NS4zMzMgODUuMzMzIDg1LjMzM2g1Ni43NDdjNDYuOTMzIDAgODUuMzMzLTM4LjQgODUuMzMzLTg1LjMzM3YtNTEyYzAtNDYuOTMzLTM3Ljk3My04NS4zMzMtODUuMzMzLTg1LjMzM3pNOTM4LjY2NyAxOTJ2NTEyYzAgNDYuOTMzLTM4LjQgODUuMzMzLTg1LjMzMyA4NS4zMzNoLTU2Ljc0N2MtNDYuOTMzIDAtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzM3YtNTEyYzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoNTYuNzQ3YzQ3LjM2IDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3pNNjI1LjkyIDE5MnY1MTJjMCA0Ni45MzMtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM2gtNTYuNzQ3Yy00Ni45MzMgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzdi01MTJjMC00Ni45MzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM2g1Ni43NDdjNDYuOTMzIDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTYzOyIgZ2x5cGgtbmFtZT0id2FybmluZ19hbWJlcl9ibGFja18yNGRwIiBkPSJNNTEyIDcwNC40MjdsMzIxLjI4LTU1NS4wOTNoLTY0Mi41NmwzMjEuMjggNTU1LjA5M3pNMTE2LjkwNyAxOTJjLTMyLjg1My01Ni43NDcgOC4xMDctMTI4IDczLjgxMy0xMjhoNjQyLjU2YzY1LjcwNyAwIDEwNi42NjcgNzEuMjUzIDczLjgxMyAxMjhsLTMyMS4yOCA1NTUuMDkzYy0zMi44NTMgNTYuNzQ3LTExNC43NzMgNTYuNzQ3LTE0Ny42MjcgMGwtMzIxLjI4LTU1NS4wOTN6TTQ2OS4zMzMgNDkwLjY2N3YtODUuMzMzYzAtMjMuNDY3IDE5LjItNDIuNjY3IDQyLjY2Ny00Mi42NjdzNDIuNjY3IDE5LjIgNDIuNjY3IDQyLjY2N3Y4NS4zMzNjMCAyMy40NjctMTkuMiA0Mi42NjctNDIuNjY3IDQyLjY2N3MtNDIuNjY3LTE5LjItNDIuNjY3LTQyLjY2N3pNNDY5LjMzMyAyNzcuMzMzaDg1LjMzM3YtODUuMzMzaC04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTk2NDsiIGdseXBoLW5hbWU9Indhcm5pbmdfYmxhY2tfMjRkcCIgZD0iTTE5MC43MiA2NGg2NDIuNTZjNjUuNzA3IDAgMTA2LjY2NyA3MS4yNTMgNzMuODEzIDEyOGwtMzIxLjI4IDU1NS4wOTNjLTMyLjg1MyA1Ni43NDctMTE0Ljc3MyA1Ni43NDctMTQ3LjYyNyAwbC0zMjEuMjgtNTU1LjA5M2MtMzIuODUzLTU2Ljc0NyA4LjEwNy0xMjggNzMuODEzLTEyOHpNNTEyIDM2Mi42NjdjLTIzLjQ2NyAwLTQyLjY2NyAxOS4yLTQyLjY2NyA0Mi42Njd2ODUuMzMzYzAgMjMuNDY3IDE5LjIgNDIuNjY3IDQyLjY2NyA0Mi42NjdzNDIuNjY3LTE5LjIgNDIuNjY3LTQyLjY2N3YtODUuMzMzYzAtMjMuNDY3LTE5LjItNDIuNjY3LTQyLjY2Ny00Mi42Njd6TTU1NC42NjcgMTkyaC04NS4zMzN2ODUuMzMzaDg1LjMzM3YtODUuMzMzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5NjU7IiBnbHlwaC1uYW1lPSJ3b3JrX29mZl9ibGFja18yNGRwIiBkPSJNMTc1LjM2IDg1MS42MjdjLTE2LjY0IDE2LjY0LTQzLjUyIDE2LjY0LTYwLjE2IDBzLTE2LjY0LTQzLjUyIDAtNjAuMTZsODcuMDQwLTg3LjQ2N2gtMzEuNTczYy00Ny4zNiAwLTg0LjkwNy0zNy45NzMtODQuOTA3LTg1LjMzM2wtMC40MjctNDY5LjMzM2MwLTQ3LjM2IDM3Ljk3My04NS4zMzMgODUuMzMzLTg1LjMzM2g2NzEuNTczbDU1LjA0MC01NS4wNDBjMTYuNjQtMTYuNjQgNDMuNTItMTYuNjQgNjAuMTYgMHMxNi42NCA0My41MiAwIDYwLjE2bC03ODIuMDgwIDc4Mi41MDd6TTQyNi42NjcgNzg5LjMzM2gxNzAuNjY3di04NS4zMzNoLTE1My42bDQ5NC45MzMtNDk0LjkzM3Y0MDkuNmMwIDQ3LjM2LTM3Ljk3MyA4NS4zMzMtODUuMzMzIDg1LjMzM2gtMTcwLjY2N3Y4NS4zMzNjMCA0Ny4zNi0zNy45NzMgODUuMzMzLTg1LjMzMyA4NS4zMzNoLTE3MC42NjdjLTQyLjI0IDAtNzYuOC0yOS44NjctODMuNjI3LTY5Ljk3M2w4My42MjctODMuNjI3djY4LjI2N3oiIC8+CjwvZm9udD48L2RlZnM+PC9zdmc+Cg==</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/css/Core.Icons.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnb3RvYm8nOwogIHNyYzogIHVybCgnLi4vLi4vLi4vLi4vY29tbW9uL2ZvbnRzL290b2JvLmVvdD84ZjN3bGonKTsKICBzcmM6ICB1cmwoJy4uLy4uLy4uLy4uL2NvbW1vbi9mb250cy9vdG9iby5lb3Q/OGYzd2xqI2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLAovKiBSb3RoZXIgT1NTIC0gVG9kbzogQ2FuJ3QgYWRkIG5ldyBpY29uIHdpdGggc3ZnIGZvcm1hdCwgaWYgLnR0ZiBleGlzdHMuIFdoeT8KICAgIHVybCgnLi4vLi4vLi4vLi4vY29tbW9uL2ZvbnRzL290b2JvLnR0Zj84ZjN3bGonKSBmb3JtYXQoJ3RydWV0eXBlJyksCkVPIFJvdGhlciBPU1MgKi8KICAgIHVybCgnLi4vLi4vLi4vLi4vY29tbW9uL2ZvbnRzL290b2JvLndvZmY/OGYzd2xqJykgZm9ybWF0KCd3b2ZmJyksCiAgICB1cmwoJy4uLy4uLy4uLy4uL2NvbW1vbi9mb250cy9vdG9iby5zdmc/OGYzd2xqI290b2JvJykgZm9ybWF0KCdzdmcnKTsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LWRpc3BsYXk6IGJsb2NrOwp9Cgoub29vZm8gewogIC8qIHVzZSAhaW1wb3J0YW50IHRvIHByZXZlbnQgaXNzdWVzIHdpdGggYnJvd3NlciBleHRlbnNpb25zIHRoYXQgY2hhbmdlIGZvbnRzICovCiAgZm9udC1mYW1pbHk6ICdvdG9ibycgIWltcG9ydGFudDsKICBzcGVhazogbm9uZTsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBmb250LXZhcmlhbnQ6IG5vcm1hbDsKICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICBsaW5lLWhlaWdodDogMTsKCiAgLyogQmV0dGVyIEZvbnQgUmVuZGVyaW5nID09PT09PT09PT09ICovCiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKfQoKLm9vb2ZvLWFkZDpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkwMCI7Cn0KLm9vb2ZvLWFyY2hpdmU6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MDEiOwp9Ci5vb29mby1hcnJvd19kOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTAyIjsKfQoub29vZm8tYXJyb3dfbDpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkwMyI7Cn0KLm9vb2ZvLWFycm93X3I6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MDQiOwp9Ci5vb29mby1hcnJvd19yMjpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkwNSI7Cn0KLm9vb2ZvLWFycm93X3U6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MDYiOwp9Ci5vb29mby1hdHRhY2htZW50OmJlZm9yZSB7CiAgY29udGVudDogIlxlOTA3IjsKfQoub29vZm8tYm94Y2hlY2tfZWQ6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MDgiOwp9Ci5vb29mby1ib3hjaGVja19vb286YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MDkiOwp9Ci5vb29mby1ib3hjaGVja19zZW1pOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTBhIjsKfQoub29vZm8tYm94Y2hlY2s6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MGIiOwp9Ci5vb29mby1jYWxlbmRhcjpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkwYyI7Cn0KLm9vb2ZvLWNsb3NlOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTBkIjsKfQoub29vZm8tZGFzaGJvYXJkOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTBlIjsKfQoub29vZm8tZGVsZXRlX291dGw6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MGYiOwp9Ci5vb29mby1kZWxldGU6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MTAiOwp9Ci5vb29mby1mYXE6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MTEiOwp9Ci5vb29mby1maWx0ZXJfbGlzdDpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxMiI7Cn0KLm9vb2ZvLWZpbHRlcjpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxMyI7Cn0KLm9vb2ZvLWhlbHA6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MTQiOwp9Ci5vb29mby1pbmZvOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTE1IjsKfQoub29vZm8taW52aXNpYmxlOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTE2IjsKfQoub29vZm8tbWVudTpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxNyI7Cn0KLm9vb2ZvLW1vcmVfaDpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxOCI7Cn0KLm9vb2ZvLW1vcmVfdjpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxOSI7Cn0KLm9vb2ZvLXBkZjpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxYSI7Cn0KLm9vb2ZvLXBob3RvX2xpYnJhcnk6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MWIiOwp9Ci5vb29mby1waG90bzpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxYyI7Cn0KLm9vb2ZvLXByaW50OmJlZm9yZSB7CiAgY29udGVudDogIlxlOTFkIjsKfQoub29vZm8tcmFkaW9fY2hlY2tlZDpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkxZSI7Cn0KLm9vb2ZvLXJhZGlvOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTFmIjsKfQoub29vZm8tcmVtb3ZlOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTIwIjsKfQoub29vZm8tcnBsdXM6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MjEiOwp9Ci5vb29mby1zYXZlOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTIyIjsKfQoub29vZm8tc2VhcmNoOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTIzIjsKfQoub29vZm8tc29ydDpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkyNCI7Cn0KLm9vb2ZvLXRleHQ6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MjUiOwp9Ci5vb29mby10aWNrZXRsaXN0OmJlZm9yZSB7CiAgY29udGVudDogIlxlOTI2IjsKfQoub29vZm8tdGltZTpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkyNyI7Cn0KLm9vb2ZvLXRvZ2dsZV9vZmY6YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MjgiOwp9Ci5vb29mby10b2dnbGVfb246YmVmb3JlIHsKICBjb250ZW50OiAiXGU5MjkiOwp9Ci5vb29mby12aXNpYmxlOmJlZm9yZSB7CiAgY29udGVudDogIlxlOTJhIjsKfQovKiBSb3RoZXIgT1NTICovCi5vb29mby1idWdfcmVwb3J0X2JsYWNrXzpiZWZvcmUgewogIGNvbnRlbnQ6ICJcZTkzNyI7Cn0KLyogRU8gUm90aGVyIE9TUyAqLwo=</File>
        <File Location="Kernel/System/Console/Command/Admin/ServiceCatalog/AddBulkACL.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6U2VydmljZUNhdGFsb2c6OkFkZEJ1bGtBQ0w7Cgp1c2UgdjUuMjY7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIG5hbWVzcGFjZTo6YXV0b2NsZWFuOwp1c2UgdXRmODsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VHlwZScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdBZGQgbmV3IEFDTHMgdGhhdCBmaWx0ZXIgdGhlIGxpc3Qgb2Ygc2VydmljZXMgYmFzZWQgb24gdGhlIHRpY2tldCB0eXBlLicpOwoKICAgICMgdGhlcmUgYXJlIG5vIG9wdGlvbnMKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIG5vdGhpbmcgdG8gZG8KICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5BZGRpbmcgbmV3IEFDTHMuLi48L3llbGxvdz5cbiIpOwoKICAgIG15ICRUeXBlT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAjIEdldCBhbGwgc2VydmljZXMuCiAgICBteSAkU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIFNFUlZJQ0VHRVQ6CiAgICBmb3IgbXkgJFNlcnZpY2UgKCRTZXJ2aWNlTGlzdC0+QCopIHsKCiAgICAgICAgIyBUT0RPOiBjaGVja2VkIHdoZXRoZXIgc2VydmljZXMgd2l0aG91dCB0aWNrZXQgdHlwZXMgY2FuIHJlYWxseSBiZSBza2lwcGVkCiAgICAgICAgbmV4dCBTRVJWSUNFR0VUIHVubGVzcyBJc0FycmF5UmVmV2l0aERhdGEoICRTZXJ2aWNlLT57VGlja2V0VHlwZUlEc30gKTsKCiAgICAgICAgIyBDcmVhdGUgQUNMIGlmIGNvbmZpZyBpcyBlbmFibGVkCiAgICAgICAgIyBXZSBjcmVhdGUgb25lIEFDTCBwZXIgdGlja2V0IHR5cGUuCiAgICAgICAgJFNlcnZpY2VPYmplY3QtPlVwZGF0ZVR5cGVTZXJ2aWNlQUNMKAogICAgICAgICAgICBUaWNrZXRUeXBlSURzID0+ICRTZXJ2aWNlLT57VGlja2V0VHlwZUlEc30sCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2UtPntTZXJ2aWNlSUR9LAogICAgICAgICAgICBTZXJ2aWNlVmFsaWQgID0+ICRTZXJ2aWNlLT57VmFsaWRJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkRvbmUuPC9ncmVlbj5cbiIpOwoKICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVPaygpOwp9CgoxOwo=</File>
        <File Location="Kernel/System/Ticket/Event/SetDynamicFieldCriticalityFromService.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgojIEN1cnJlbnRseSwgdGhlIGNyaXRpY2FsaXR5IG9mIHRoZSBzZXJ2aWNlIGNhbiBhbHNvIGJlIHNldCBpbiB0aGUgc2VydmljZSwgYnV0IHRoaXMgaGFzIG5vIGVmZmVjdC4KIyBUaGVyZWZvcmUsIHRoaXMgZXZlbnQgbW9kdWxlIGhhcyBiZWVuIGltcGxlbWVudGVkIHRoYXQgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBEeW5hbWljRmllbGQgQ3JpdGljYWxpdHkKIyBpbiBhIHRpY2tldCBhcyBzb29uIGFzIGEgc2VydmljZSBoYXMgYmVlbiBhc3NpZ25lZC4KCiMgUGxlYXNlIGFjdGl2YXRlIHRoZSBTeXNDb25maWcgb3B0aW9uIFNlcnZpY2U6OlNldER5bmFtaWNGaWVsZENyaXRpY2FsaXR5IGZvciB0aGlzIHB1cnBvc2UuCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpTZXREeW5hbWljRmllbGRDcml0aWNhbGl0eUZyb21TZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhEYXRhIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXRJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX0tPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEgaW4gRGF0YSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY3VzdG9tZXIgdXNlciBkYXRhLCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgc3RvcmVkIGluIGR5bmFtaWMgZmllbGRzCiAgICBteSAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte0RhdGF9LT57VGlja2V0SUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISVUaWNrZXQ7CiAgICByZXR1cm4gaWYgISRUaWNrZXR7U2VydmljZUlEfTsKCiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRUaWNrZXR7U2VydmljZUlEfSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBvYmplY3RzCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgTmFtZSA9PiAnSVRTTUNyaXRpY2FsaXR5JywKICAgICk7CgogICAgIyB1cGRhdGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgdGlja2V0CiAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=</File>
        <File Location="Kernel/System/Ticket/Event/SetPriorityFromCriticalityAndImpactMatrix.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgojIEN1cnJlbnRseSwgdGhlIGNyaXRpY2FsaXR5IG9mIHRoZSBzZXJ2aWNlIGNhbiBhbHNvIGJlIHNldCBpbiB0aGUgc2VydmljZSwgYnV0IHRoaXMgaGFzIG5vIGVmZmVjdC4KIyBUaGVyZWZvcmUsIHRoaXMgZXZlbnQgbW9kdWxlIGhhcyBiZWVuIGltcGxlbWVudGVkIHRoYXQgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBEeW5hbWljRmllbGQgQ3JpdGljYWxpdHkKIyBpbiBhIHRpY2tldCBhcyBzb29uIGFzIGEgc2VydmljZSBoYXMgYmVlbiBhc3NpZ25lZC4KCiMgUGxlYXNlIGFjdGl2YXRlIHRoZSBTeXNDb25maWcgb3B0aW9uIFNlcnZpY2U6OlNldER5bmFtaWNGaWVsZENyaXRpY2FsaXR5IGZvciB0aGlzIHB1cnBvc2UuCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpTZXRQcmlvcml0eUZyb21Dcml0aWNhbGl0eUFuZEltcGFjdE1hdHJpeDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhEYXRhIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXRJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX0tPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEgaW4gRGF0YSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGlja2V0IGRhdGEKICAgIG15ICVUaWNrZXQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgU2lsZW5jZSAgICAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIGlmICElVGlja2V0OwogICAgcmV0dXJuIGlmICFJc1N0cmluZ1dpdGhEYXRhKCAkVGlja2V0e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSApIHx8ICFJc1N0cmluZ1dpdGhEYXRhKCAkVGlja2V0e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9ICk7CgogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkVGlja2V0e1NlcnZpY2VJRH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgb2JqZWN0cwogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKICAgIG15ICRDSVBBbGxvY2F0ZU9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJFRpY2tldHtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fSwKICAgICAgICBJbXBhY3QgICAgICA9PiAkVGlja2V0e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICk7CgogICAgcmV0dXJuIGlmICRQcmlvcml0eUlEIGVxICRUaWNrZXR7UHJpb3JpdHlJRH07CgogICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFByaW9yaXR5U2V0KAogICAgICAgIFRpY2tldElEICAgPT4gJFBhcmFte0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsK</File>
        <File Location="scripts/test/Service/UpdateTypeServiceACL.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKdXNlIHY1LjI2Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKdXNlIEZpbGU6OkJhc2VuYW1lIHF3KGJhc2VuYW1lKTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CnVzZSBMaXN0OjpBbGxVdGlscyBxdyh6aXApOwp1c2UgVGVzdDI6OlRvb2xzOjpFeHBsYWluOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlJlZ2lzdGVyT007ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NCgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFR5cGVPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpOwpteSAkVXNlck9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7Cm15ICRBQ0xPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkFDTDo6REI6OkFDTCcpOwoKIyBnZXQgaGVscGVyIG9iamVjdCwgcmVzdG9yZSBkYXRhYmFzZSBhdCBlbmQgb2YgdGhlIHNjcmlwdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFJhbmRvbUlEICAgICAgID0gJEhlbHBlci0+R2V0UmFuZG9tSUQ7Cm15ICRBQ0xQcmVmaXggICAgICA9ICd6enogLSBTaG93IFNlcnZpY2UgYmFzZWQgb24gVGlja2V0LVR5cGU6ICc7Cm15ICRBQ0xEaXNhYmxlTmFtZSA9ICd6emEgLSBEaXNhYmxlIGFsbCBTZXJ2aWNlcyBpZiBubyBUaWNrZXQtVHlwZSBpcyBzZWxlY3RlZC4nOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCm15IEBVc2VySURzOwp7CgogICAgIyBkaXNhYmxlIGVtYWlsIGNoZWNrcyB0byBjcmVhdGUgbmV3IHVzZXIKICAgIG15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJykgfHwgMTsKICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gMCwKICAgICk7CgogICAgQFVzZXJJRHMgPSBtYXAgewogICAgICAgICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdTZXJ2aWNlJyAuICRfLAogICAgICAgICAgICBVc2VyTGFzdG5hbWUgID0+ICdVbml0VGVzdCcsCiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgPT4gJ1VuaXRUZXN0LVNlcnZpY2UtJyAuICRfIC4gJFJhbmRvbUlELAogICAgICAgICAgICBVc2VyRW1haWwgICAgID0+ICdVbml0VGVzdC1TZXJ2aWNlLScgLiAkXyAuICRSYW5kb21JRCAuICdAbG9jYWxob3N0JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgIH0gKCAwIC4uIDAgKTsKCiAgICAjIHJlc3RvcmUgb3JpZ2luYWwgZW1haWwgY2hlY2sgcGFyYW0KICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gJENoZWNrRW1haWxBZGRyZXNzZXNPcmcsCiAgICApOwp9CgojIGNyZWF0ZSB0aWNrZXQgdHlwZXMKbXkgQFRpY2tldFR5cGVOYW1lcyA9IG1hcCB7IGpvaW4gJ18nLCAnVW5pdHRlc3QnLCAnVHlwZScsIGJhc2VuYW1lKF9fRklMRV9fKSwgJFJhbmRvbUlELCAkXyB9ICggMCAuLiAxICk7Cm15IEBUaWNrZXRUeXBlSURzICAgPSBtYXAgewogICAgJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICAgICAgTmFtZSAgICA9PiAkXywKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKfSBAVGlja2V0VHlwZU5hbWVzOwpteSAlVGlja2V0VHlwZUlEMk5hbWUgPSB6aXAgQFRpY2tldFR5cGVJRHMsIEBUaWNrZXRUeXBlTmFtZXM7CgojIGNyZWF0ZSBzZXJ2aWNlcyB3aXRoIGFsbCB0ZXN0IHRpY2tldCB0eXBlcwpteSBAU2VydmljZU5hbWVzID0gbWFwIHsgam9pbiAnXycsICdVbml0dGVzdCcsICdTZXJ2aWNlJywgYmFzZW5hbWUoX19GSUxFX18pLCAkUmFuZG9tSUQsICRfIH0gKCAwIC4uIDEgKTsKbXkgQFNlcnZpY2VJRHMgICA9IG1hcCB7CiAgICAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICBOYW1lICAgICAgICAgID0+ICRfLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgVHlwZUlEICAgICAgICA9PiAyLCAgICAgICAgICAgICAgICAgIyBJVFNNOjpTZXJ2aWNlOjpUeXBlIGZyb20gSVRTTUNvcmUKICAgICAgICBDcml0aWNhbGl0eSAgID0+ICczIG5vcm1hbCcsICAgICAgICAjIGFkZGVkIGJ5IElUU01Db3JlCiAgICAgICAgVGlja2V0VHlwZUlEcyA9PiBcQFRpY2tldFR5cGVJRHMsCiAgICAgICAgRGVzY3JpcHRpb25zICA9PiB7ICAgICAgICAgICAgICAgICAgIyBhZGRlZCBieSBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICJzaG9ydCBkZXNjIGZvciAkXyIsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgID0+ICJsb25nIGRlc2NyaXB0aW9uIGZvciAkXyIsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCgogICAgKTsKfSBAU2VydmljZU5hbWVzOwpteSAlU2VydmljZUlEMk5hbWUgPSB6aXAgQFNlcnZpY2VJRHMsIEBTZXJ2aWNlTmFtZXM7CgpzdWJ0ZXN0ICdyZXRyaWV2YWwgb2YgdGhlIHRpY2tldCB0eXBlcycgPT4gc3ViIHsKCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VJRHMpIHsKICAgICAgICBzdWJ0ZXN0ICJTZXJ2aWNlR2V0KCkgZm9yIFNlcnZpY2VJRCAkU2VydmljZUlEIiA9PiBzdWIgewogICAgICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlzKCAkU2VydmljZXtTZXJ2aWNlSUR9LCAgICAgJFNlcnZpY2VJRCwgICAgICAgICAgICAgICAgICAnU2VydmljZUlEJyApOwogICAgICAgICAgICBpcyggJFNlcnZpY2V7TmFtZX0sICAgICAgICAgICRTZXJ2aWNlSUQyTmFtZXskU2VydmljZUlEfSwgJ05hbWUnICk7CiAgICAgICAgICAgIGlzKCAkU2VydmljZXtUaWNrZXRUeXBlSURzfSwgXEBUaWNrZXRUeXBlSURzLCAgICAgICAgICAgICAnVGlja2V0VHlwZUlEcycgKTsKICAgICAgICB9OwogICAgfQp9OwoKc3VidGVzdCAnaW5pdGlhbGx5IG5vIEFDTHMgZm9yIHRoZSB0ZXN0IHRpY2tldCB0eXBlcycgPT4gc3ViIHsKICAgIG15ICRBQ0xzID0gJEFDTE9iamVjdC0+QUNMTGlzdEdldCgKICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgIE9iamVjdFR5cGUgPT4gWydUaWNrZXQnXSwKICAgICk7CiAgICBteSAlQUNMTmFtZTJJRCA9IG1hcCB7ICRfLT57TmFtZX0gPT4gJF8tPntJRH0gfSAkQUNMcy0+QCo7CiAgICBmb3IgbXkgJFRpY2tldFR5cGVOYW1lIChAVGlja2V0VHlwZU5hbWVzKSB7CiAgICAgICAgb2soICEkQUNMTmFtZTJJRHsgJEFDTFByZWZpeCAuICRUaWNrZXRUeXBlTmFtZSB9LCAibm8genp6IEFDTCBmb3IgJFRpY2tldFR5cGVOYW1lIiApOwogICAgfQoKICAgICMgQXNzdW1pbmcgdGhhdCB0aGUgc2NyaXB0IHJ1bnMgb24gYSBmcmVzaCBzeXN0ZW0sCiAgICAjIHdoZXJlIFVwZGF0ZVR5cGVTZXJ2aWNlQUNMKCkgaGFkIG5ldmVyIGJlZW4gY2FsbGVkIG91dHNpZGUgYSByb2xsZWQgYmFjayB0cmFuc2FjdGlvbi4KICAgIG9rKCAhJEFDTE5hbWUySUR7JEFDTERpc2FibGVOYW1lfSwgJ25vIHp6YSBBQ0wnICk7Cn07CgpzdWJ0ZXN0ICdhZGQgdGhlIHp6eiBBQ0xzIGZvciB0aGUgc2VydmljZSAwJyA9PiBzdWIgewogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlSURzWzBdOwoKICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwogICAgaXMoICRTZXJ2aWNle1RpY2tldFR5cGVJRHN9LCBcQFRpY2tldFR5cGVJRHMsICdUaWNrZXRUeXBlSURzIGZvciBzZXJ2aWNlIDAnICk7CgogICAgIyBDcmVhdGUgdGhlIHp6eiBBQ0xzCiAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5VcGRhdGVUeXBlU2VydmljZUFDTCgKICAgICAgICBUaWNrZXRUeXBlSURzID0+ICRTZXJ2aWNle1RpY2tldFR5cGVJRHN9LAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2V7U2VydmljZUlEfSwKICAgICAgICBTZXJ2aWNlVmFsaWQgID0+ICRTZXJ2aWNle1ZhbGlkSUR9LAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CiAgICBvayggJFN1Y2Nlc3MsICdVcGRhdGUgVXBkYXRlVHlwZVNlcnZpY2VBQ0woKScgKTsKCiAgICBzdWJ0ZXN0ICd6enogQUNMcyBmb3Igc2VydmljZSAwJyA9PiBzdWIgewogICAgICAgIG15ICRBQ0xzID0gJEFDTE9iamVjdC0+QUNMTGlzdEdldCgKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiBbJ1RpY2tldCddLAogICAgICAgICk7CiAgICAgICAgbXkgJUFDTE5hbWUySUQgPSBtYXAgeyAkXy0+e05hbWV9ID0+ICRfLT57SUR9IH0gJEFDTHMtPkAqOwoKICAgICAgICAjIFRoZSBmaXJzdCBjYWxsIHRvIFVwZGF0ZVR5cGVTZXJ2aWNlQUNMKCkgc2hvdWxkIGFsc28gY3JlYXRlIHRoZSB6emEgQUNMLgogICAgICAgIG9rKCAkQUNMTmFtZTJJRHskQUNMRGlzYWJsZU5hbWV9LCAnenphIEFDTCcgKTsKCiAgICAgICAgIyBTZXJ2aWNlIDAgaGFzIGFsbCB0aWNrZXQgdHlwZXMuIFNvIHRoZXJlIHNob3VsZCBiZSBBQ0xzCiAgICAgICAgIyBmb3IgYWxsIHRpY2tldCB0eXBlcyBhbmQgdGhlIHNlcnZpY2Ugc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBBQ0wuCiAgICAgICAgVElDS0VUX1RZUEVfTkFNRToKICAgICAgICBmb3IgbXkgJFRpY2tldFR5cGVOYW1lIChAVGlja2V0VHlwZU5hbWVzKSB7CiAgICAgICAgICAgIG15ICRBQ0xJRCA9ICRBQ0xOYW1lMklEeyAkQUNMUHJlZml4IC4gJFRpY2tldFR5cGVOYW1lIH07CiAgICAgICAgICAgIG9rKCAkQUNMSUQsICJ6enogQUNMIGZvciAkVGlja2V0VHlwZU5hbWUiICk7CgogICAgICAgICAgICBuZXh0IFRJQ0tFVF9UWVBFX05BTUUgdW5sZXNzICRBQ0xJRDsKCiAgICAgICAgICAgIG15ICRBQ0wgPSAkQUNMT2JqZWN0LT5BQ0xHZXQoCiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJEFDTElELAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGxpa2UoCiAgICAgICAgICAgICAgICAkQUNMLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICdDb25maWdDaGFuZ2UnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc3NpYmxlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGlja2V0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NlcnZpY2UnID0+IFsgJFNlcnZpY2VJRDJOYW1leyRTZXJ2aWNlSUR9IF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdTZXJ2aWNlIDAgaXMgcG9zc2libGUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfTsKfTsKCnN1YnRlc3QgJ2FkZCB0aGUgenp6IEFDTHMgZm9yIHNlcnZpY2UgMScgPT4gc3ViIHsKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZUlEc1sxXTsKCiAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKICAgIGlzKCAkU2VydmljZXtUaWNrZXRUeXBlSURzfSwgXEBUaWNrZXRUeXBlSURzLCAnVGlja2V0VHlwZUlEcycgKTsKCiAgICAjIFVwZGF0ZSB0aGUgenp6IEFDTHMKICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlVwZGF0ZVR5cGVTZXJ2aWNlQUNMKAogICAgICAgIFRpY2tldFR5cGVJRHMgPT4gJFNlcnZpY2V7VGlja2V0VHlwZUlEc30sCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZXtTZXJ2aWNlSUR9LAogICAgICAgIFNlcnZpY2VWYWxpZCAgPT4gJFNlcnZpY2V7VmFsaWRJRH0sCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKICAgIG9rKCAkU3VjY2VzcywgJ1VwZGF0ZSBVcGRhdGVUeXBlU2VydmljZUFDTCgpJyApOwoKICAgIHN1YnRlc3QgJ3p6eiBBQ0xzIGZvciBzZXJ2aWNlIDEnID0+IHN1YiB7CiAgICAgICAgbXkgJEFDTHMgPSAkQUNMT2JqZWN0LT5BQ0xMaXN0R2V0KAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBPYmplY3RUeXBlID0+IFsnVGlja2V0J10sCiAgICAgICAgKTsKICAgICAgICBteSAlQUNMTmFtZTJJRCA9IG1hcCB7ICRfLT57TmFtZX0gPT4gJF8tPntJRH0gfSAkQUNMcy0+QCo7CgogICAgICAgICMgU2VydmljZSAwIGFuZCAxIGhhdmUgYWxsIHRpY2tldCB0eXBlcy4gU28gdGhlcmUgc2hvdWxkIGJlIEFDTHMKICAgICAgICAjIGZvciBhbGwgdGlja2V0IHR5cGVzIGFuZCBib3RoIHNlcnZpY2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgQUNMLgogICAgICAgIFRJQ0tFVF9UWVBFX05BTUU6CiAgICAgICAgZm9yIG15ICRUaWNrZXRUeXBlTmFtZSAoQFRpY2tldFR5cGVOYW1lcykgewogICAgICAgICAgICBteSAkQUNMSUQgPSAkQUNMTmFtZTJJRHsgJEFDTFByZWZpeCAuICRUaWNrZXRUeXBlTmFtZSB9OwogICAgICAgICAgICBvayggJEFDTElELCAienp6IEFDTCBmb3IgJFRpY2tldFR5cGVOYW1lIiApOwoKICAgICAgICAgICAgbmV4dCBUSUNLRVRfVFlQRV9OQU1FIHVubGVzcyAkQUNMSUQ7CgogICAgICAgICAgICBteSAkQUNMID0gJEFDTE9iamVjdC0+QUNMR2V0KAogICAgICAgICAgICAgICAgSUQgICAgID0+ICRBQ0xJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBsaWtlKAogICAgICAgICAgICAgICAgJEFDTCwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnQ29uZmlnQ2hhbmdlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdQb3NzaWJsZScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpY2tldCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJyA9PiBbQFNlcnZpY2VOYW1lc10sICAgICMgYm90aCBzZXJ2aWNlcyBub3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1NlcnZpY2UgMCBhbmQgMSBpcyBwb3NzaWJsZScKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Owp9OwoKc3VidGVzdCAnY2xhaW0gdGhhdCBzZXJ2aWNlIDAgaXMgaW52YWxpZCcgPT4gc3ViIHsKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZUlEc1swXTsKCiAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKICAgIGlzKCAkU2VydmljZXtUaWNrZXRUeXBlSURzfSwgXEBUaWNrZXRUeXBlSURzLCAnVGlja2V0VHlwZUlEcycgKTsKCiAgICAjIFVwZGF0ZSB0aGUgenp6IEFDTHMKICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlVwZGF0ZVR5cGVTZXJ2aWNlQUNMKAogICAgICAgIFRpY2tldFR5cGVJRHMgPT4gJFNlcnZpY2V7VGlja2V0VHlwZUlEc30sCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZXtTZXJ2aWNlSUR9LAogICAgICAgIFNlcnZpY2VWYWxpZCAgPT4gMiwgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnZhbGlkCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKICAgIG9rKCAkU3VjY2VzcywgJ1VwZGF0ZSBVcGRhdGVUeXBlU2VydmljZUFDTCgpJyApOwoKICAgIHN1YnRlc3QgJ3p6eiBBQ0xzIGZvciBpbnZhbGlkIHNlcnZpY2UgMCcgPT4gc3ViIHsKICAgICAgICBteSAkQUNMcyA9ICRBQ0xPYmplY3QtPkFDTExpc3RHZXQoCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gWydUaWNrZXQnXSwKICAgICAgICApOwogICAgICAgIG15ICVBQ0xOYW1lMklEID0gbWFwIHsgJF8tPntOYW1lfSA9PiAkXy0+e0lEfSB9ICRBQ0xzLT5AKjsKCiAgICAgICAgIyBTZXJ2aWNlIDAgaXMgaW52YWxpZCBTbyB0aGVyZSBzaG91bGQgYmUgQUNMcwogICAgICAgICMgZm9yIGFsbCB0aWNrZXQgdHlwZXMgYW5kIG9ubHkgc2VydmljZSAxIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgQUNMLgogICAgICAgIFRJQ0tFVF9UWVBFX05BTUU6CiAgICAgICAgZm9yIG15ICRUaWNrZXRUeXBlTmFtZSAoQFRpY2tldFR5cGVOYW1lcykgewogICAgICAgICAgICBteSAkQUNMSUQgPSAkQUNMTmFtZTJJRHsgJEFDTFByZWZpeCAuICRUaWNrZXRUeXBlTmFtZSB9OwogICAgICAgICAgICBvayggJEFDTElELCAienp6IEFDTCBmb3IgJFRpY2tldFR5cGVOYW1lIiApOwoKICAgICAgICAgICAgbmV4dCBUSUNLRVRfVFlQRV9OQU1FIHVubGVzcyAkQUNMSUQ7CgogICAgICAgICAgICBteSAkQUNMID0gJEFDTE9iamVjdC0+QUNMR2V0KAogICAgICAgICAgICAgICAgSUQgICAgID0+ICRBQ0xJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBsaWtlKAogICAgICAgICAgICAgICAgJEFDTCwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnQ29uZmlnQ2hhbmdlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdQb3NzaWJsZScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpY2tldCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJyA9PiBbICRTZXJ2aWNlTmFtZXNbMV0gXSwgICAgIyBvbmx5IHNlcnZpY2UgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnU2VydmljZSAwIGlzIG5vIGxvbmdlciBwb3NzaWJsZScKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Owp9OwoKc3VidGVzdCAnY2xhaW0gdGhhdCBzZXJ2aWNlIDEgaXMgYWxzbyBpbnZhbGlkJyA9PiBzdWIgewogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlSURzWzFdOwoKICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwogICAgaXMoICRTZXJ2aWNle1RpY2tldFR5cGVJRHN9LCBcQFRpY2tldFR5cGVJRHMsICdUaWNrZXRUeXBlSURzJyApOwoKICAgICMgQ3JlYXRlIHRoZSB6enogQUNMcwogICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+VXBkYXRlVHlwZVNlcnZpY2VBQ0woCiAgICAgICAgVGlja2V0VHlwZUlEcyA9PiAkU2VydmljZXtUaWNrZXRUeXBlSURzfSwKICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNle1NlcnZpY2VJRH0sCiAgICAgICAgU2VydmljZVZhbGlkICA9PiAyLCAgICAgICAgICAgICAgICAgICAgICAgICAjIGludmFsaWQKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwogICAgb2soICRTdWNjZXNzLCAnVXBkYXRlIFVwZGF0ZVR5cGVTZXJ2aWNlQUNMKCknICk7CgogICAgc3VidGVzdCAnenp6IEFDTHMgZm9yIGludmFsaWQgc2VydmljZSAxJyA9PiBzdWIgewogICAgICAgIG15ICRBQ0xzID0gJEFDTE9iamVjdC0+QUNMTGlzdEdldCgKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiBbJ1RpY2tldCddLAogICAgICAgICk7CiAgICAgICAgbXkgJUFDTE5hbWUySUQgPSBtYXAgeyAkXy0+e05hbWV9ID0+ICRfLT57SUR9IH0gJEFDTHMtPkAqOwoKICAgICAgICAjIFNlcnZpY2UgMCBpcyBpbnZhbGlkIFNvIHRoZXJlIHNob3VsZCBiZSBBQ0xzCiAgICAgICAgIyBmb3IgYWxsIHRpY2tldCB0eXBlcyBhbmQgb25seSBzZXJ2aWNlIDEgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBBQ0wuCiAgICAgICAgVElDS0VUX1RZUEVfTkFNRToKICAgICAgICBmb3IgbXkgJFRpY2tldFR5cGVOYW1lIChAVGlja2V0VHlwZU5hbWVzKSB7CiAgICAgICAgICAgIG15ICRBQ0wgPSAkQUNMT2JqZWN0LT5BQ0xHZXQoCiAgICAgICAgICAgICAgICBOYW1lICAgPT4gKCAkQUNMUHJlZml4IC4gJFRpY2tldFR5cGVOYW1lICksCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaXMoICRBQ0wsIHVuZGVmLCAnQUNMIGRlbGV0ZWQgYXMgdGhlcmUgYXJlIG5vIG1vcmUgc2VydmljZXMnICk7CiAgICAgICAgfQogICAgfTsKfTsKCnN1YnRlc3QgJ2FjdGl2YXRlIHNlcnZpY2VzIDAgYW5kIDEgYWdhaW4sIHRoZW4gcmVtb3ZlIHRpY2tldCB0eXBlcycgPT4gc3ViIHsKICAgIG15ICRTZXJ2aWNlSUQwID0gJFNlcnZpY2VJRHNbMF07CiAgICBteSAlU2VydmljZTAgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEMCwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CiAgICBpcyggJFNlcnZpY2Uwe1RpY2tldFR5cGVJRHN9LCBcQFRpY2tldFR5cGVJRHMsICdUaWNrZXRUeXBlSURzIGZvciBzZXJ2aWNlIDAnICk7CgogICAgIyBDcmVhdGUgdGhlIHp6eiBBQ0xzIHdpdGggdGhlIHNlcnZpY2VzIDAgYW5kIDEKICAgIG15ICRTdWNjZXNzMCA9ICRTZXJ2aWNlT2JqZWN0LT5VcGRhdGVUeXBlU2VydmljZUFDTCgKICAgICAgICBUaWNrZXRUeXBlSURzID0+ICRTZXJ2aWNlMHtUaWNrZXRUeXBlSURzfSwKICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlMHtTZXJ2aWNlSUR9LAogICAgICAgIFNlcnZpY2VWYWxpZCAgPT4gJFNlcnZpY2Uwe1ZhbGlkSUR9LAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CiAgICBvayggJFN1Y2Nlc3MwLCAnVXBkYXRlIFVwZGF0ZVR5cGVTZXJ2aWNlQUNMKCkgc2VydmljZSAxJyApOwoKICAgIG15ICRTZXJ2aWNlSUQxID0gJFNlcnZpY2VJRHNbMV07CiAgICBteSAlU2VydmljZTEgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEMSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CiAgICBpcyggJFNlcnZpY2Uxe1RpY2tldFR5cGVJRHN9LCBcQFRpY2tldFR5cGVJRHMsICdUaWNrZXRUeXBlSURzIGZvciBzZXJ2aWNlIDEnICk7CgogICAgIyBDcmVhdGUgdGhlIHp6eiBBQ0xzIHdpdGggdGhlIHNlcnZpY2VzIDAgYW5kIDEKICAgIG15ICRTdWNjZXNzMSA9ICRTZXJ2aWNlT2JqZWN0LT5VcGRhdGVUeXBlU2VydmljZUFDTCgKICAgICAgICBUaWNrZXRUeXBlSURzID0+ICRTZXJ2aWNlMXtUaWNrZXRUeXBlSURzfSwKICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlMXtTZXJ2aWNlSUR9LAogICAgICAgIFNlcnZpY2VWYWxpZCAgPT4gJFNlcnZpY2Uxe1ZhbGlkSUR9LAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CiAgICBvayggJFN1Y2Nlc3MxLCAnVXBkYXRlIFVwZGF0ZVR5cGVTZXJ2aWNlQUNMKCkgc2VydmljZSAxJyApOwoKICAgIHN1YnRlc3QgJ3p6eiBBQ0xzIGZvciBzZXJ2aWNlIDAgYW5kIDEgYWdhaW4nID0+IHN1YiB7CiAgICAgICAgbXkgJEFDTHMgPSAkQUNMT2JqZWN0LT5BQ0xMaXN0R2V0KAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBPYmplY3RUeXBlID0+IFsnVGlja2V0J10sCiAgICAgICAgKTsKICAgICAgICBteSAlQUNMTmFtZTJJRCA9IG1hcCB7ICRfLT57TmFtZX0gPT4gJF8tPntJRH0gfSAkQUNMcy0+QCo7CgogICAgICAgICMgU2VydmljZSAwIGFuZCAxIGhhdmUgYWxsIHRpY2tldCB0eXBlcy4gU28gdGhlcmUgc2hvdWxkIGJlIEFDTHMKICAgICAgICAjIGZvciBhbGwgdGlja2V0IHR5cGVzIGFuZCB0aGUgc2VydmljZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBBQ0wuCiAgICAgICAgVElDS0VUX1RZUEVfTkFNRToKICAgICAgICBmb3IgbXkgJFRpY2tldFR5cGVOYW1lIChAVGlja2V0VHlwZU5hbWVzKSB7CiAgICAgICAgICAgIG15ICRBQ0xJRCA9ICRBQ0xOYW1lMklEeyAkQUNMUHJlZml4IC4gJFRpY2tldFR5cGVOYW1lIH07CiAgICAgICAgICAgIG9rKCAkQUNMSUQsICJ6enogQUNMIGZvciAkVGlja2V0VHlwZU5hbWUiICk7CgogICAgICAgICAgICBuZXh0IFRJQ0tFVF9UWVBFX05BTUUgdW5sZXNzICRBQ0xJRDsKCiAgICAgICAgICAgIG15ICRBQ0wgPSAkQUNMT2JqZWN0LT5BQ0xHZXQoCiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJEFDTElELAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGxpa2UoCiAgICAgICAgICAgICAgICAkQUNMLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICdDb25maWdDaGFuZ2UnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc3NpYmxlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGlja2V0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NlcnZpY2UnID0+IFtAU2VydmljZU5hbWVzXSwgICAgIyBib3RoIHNlcnZpY2UgYWdhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1NlcnZpY2UgMCBpcyBwb3NzaWJsZScKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9OwoKICAgIHN1YnRlc3QgJ3p6eiBBQ0xzIGZvciBzZXJ2aWNlIDAgYW5kIDEsIHNlcnZpY2UgMCByZW1vdmVkIGZyb20gdHlwZSAxJyA9PiBzdWIgewoKICAgICAgICAjIFVwZGF0ZSB6enogQUNMcywgcmVtb3Zpbmcgc2VydmljZSAwIGZyb20gdHlwZSAxCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+VXBkYXRlVHlwZVNlcnZpY2VBQ0woCiAgICAgICAgICAgIFRpY2tldFR5cGVJRHMgPT4gWyAkVGlja2V0VHlwZUlEc1swXSBdLCAgICAjIHRpY2tldCB0eXBlIDEgaXMgcmVtb3ZlZAogICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSURzWzBdLAogICAgICAgICAgICBTZXJ2aWNlVmFsaWQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgIG9rKCAkU3VjY2VzcywgJ1VwZGF0ZSBVcGRhdGVUeXBlU2VydmljZUFDTCgpIHNlcnZpY2UgMCwgcmVtb3ZlIHR5cGUgMScgKTsKCiAgICAgICAgbXkgJEFDTHMgPSAkQUNMT2JqZWN0LT5BQ0xMaXN0R2V0KAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBPYmplY3RUeXBlID0+IFsnVGlja2V0J10sCiAgICAgICAgKTsKICAgICAgICBteSAlQUNMTmFtZTJJRCA9IG1hcCB7ICRfLT57TmFtZX0gPT4gJF8tPntJRH0gfSAkQUNMcy0+QCo7CgogICAgICAgICMgU2VydmljZSAwIGFuZCAxIGhhdmUgYWxsIHRpY2tldCB0eXBlcy4gU28gdGhlcmUgc2hvdWxkIGJlIEFDTHMKICAgICAgICAjIGZvciBhbGwgdGlja2V0IHR5cGVzIGFuZCB0aGUgc2VydmljZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBBQ0wuCiAgICAgICAgVElDS0VUX1RZUEVfTkFNRToKICAgICAgICBmb3IgbXkgJFRpY2tldFR5cGVOYW1lIChAVGlja2V0VHlwZU5hbWVzKSB7CiAgICAgICAgICAgIG15ICRBQ0xJRCA9ICRBQ0xOYW1lMklEeyAkQUNMUHJlZml4IC4gJFRpY2tldFR5cGVOYW1lIH07CiAgICAgICAgICAgIG9rKCAkQUNMSUQsICJ6enogQUNMIGZvciAkVGlja2V0VHlwZU5hbWUiICk7CgogICAgICAgICAgICBuZXh0IFRJQ0tFVF9UWVBFX05BTUUgdW5sZXNzICRBQ0xJRDsKCiAgICAgICAgICAgIG15ICRBQ0wgPSAkQUNMT2JqZWN0LT5BQ0xHZXQoCiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJEFDTElELAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNlcnZpY2UgMCBpcyByZW1vdmVkIGZyb20gdGhlIHR5cGUgMSBBQ0wKICAgICAgICAgICAgbXkgQEV4cGVjdGVkU2VydmljZU5hbWVzID0gQFNlcnZpY2VOYW1lczsKICAgICAgICAgICAgaWYgKCAkVGlja2V0VHlwZU5hbWUgZXEgJFRpY2tldFR5cGVOYW1lc1sxXSApIHsKICAgICAgICAgICAgICAgIHNoaWZ0IEBFeHBlY3RlZFNlcnZpY2VOYW1lczsgICAgIyByZW1vdmUgc2VydmljZSAwCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlrZSgKICAgICAgICAgICAgICAgICRBQ0wsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJ0NvbmZpZ0NoYW5nZScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnUG9zc2libGUnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaWNrZXQnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2VydmljZScgPT4gW0BFeHBlY3RlZFNlcnZpY2VOYW1lc10sICAgICMgYm90aCBzZXJ2aWNlIGFnYWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJzZXJ2aWNlcyBmb3IgJFRpY2tldFR5cGVOYW1lIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH07CgogICAgc3VidGVzdCAnenp6IEFDTHMgZm9yIHNlcnZpY2UgMCBhbmQgMSwgc2VydmljZSAwIGFuZCAxIHJlbW92ZWQgZnJvbSB0eXBlIDEnID0+IHN1YiB7CgogICAgICAgICMgVXBkYXRlIHp6eiBBQ0xzLCByZW1vdmluZyBzZXJ2aWNlIDAgZnJvbSB0eXBlIDEKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5VcGRhdGVUeXBlU2VydmljZUFDTCgKICAgICAgICAgICAgVGlja2V0VHlwZUlEcyA9PiBbICRUaWNrZXRUeXBlSURzWzBdIF0sICAgICMgdGlja2V0IHR5cGUgMSBpcyByZW1vdmVkCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRHNbMV0sCiAgICAgICAgICAgIFNlcnZpY2VWYWxpZCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgb2soICRTdWNjZXNzLCAnVXBkYXRlIFVwZGF0ZVR5cGVTZXJ2aWNlQUNMKCkgc2VydmljZSAxLCByZW1vdmUgdHlwZSAxJyApOwoKICAgICAgICBteSAkQUNMcyA9ICRBQ0xPYmplY3QtPkFDTExpc3RHZXQoCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gWydUaWNrZXQnXSwKICAgICAgICApOwogICAgICAgIG15ICVBQ0xOYW1lMklEID0gbWFwIHsgJF8tPntOYW1lfSA9PiAkXy0+e0lEfSB9ICRBQ0xzLT5AKjsKCiAgICAgICAgIyBTZXJ2aWNlIDAgYW5kIDEgaGF2ZSBhbGwgdGlja2V0IHR5cGVzLiBTbyB0aGVyZSBzaG91bGQgYmUgQUNMcwogICAgICAgICMgZm9yIGFsbCB0aWNrZXQgdHlwZXMgYW5kIHRoZSBzZXJ2aWNlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIEFDTC4KICAgICAgICBUSUNLRVRfVFlQRV9OQU1FOgogICAgICAgIGZvciBteSAkVGlja2V0VHlwZU5hbWUgKEBUaWNrZXRUeXBlTmFtZXMpIHsKICAgICAgICAgICAgbXkgJEFDTElEID0gJEFDTE5hbWUySUR7ICRBQ0xQcmVmaXggLiAkVGlja2V0VHlwZU5hbWUgfTsKCiAgICAgICAgICAgIGlmICggJFRpY2tldFR5cGVOYW1lIGVxICRUaWNrZXRUeXBlTmFtZXNbMV0gKSB7CgogICAgICAgICAgICAgICAgIyB0aWNrZXQgdHlwZSAxIGlzIHJlbW92ZWQgZnJvbSBib3RoIHNlcnZpY2VzLCB0aHVzIHRoZSBBQ0wgaXMgZGVsZXRlZAogICAgICAgICAgICAgICAgaXMoICRBQ0xJRCwgdW5kZWYsICdBQ0wgZm9yIHRpY2tldCB0eXBlIDEgaXMgcmVtb3ZlZCcgKTsKCiAgICAgICAgICAgICAgICBuZXh0IFRJQ0tFVF9UWVBFX05BTUU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgVGhlIEFDTCBmb3IgdGlja2V0IHR5cGUgMCBpcyBzdGlsbCB0aGVyZQogICAgICAgICAgICBvayggJEFDTElELCAienp6IEFDTCBmb3IgJFRpY2tldFR5cGVOYW1lIiApOwoKICAgICAgICAgICAgbmV4dCBUSUNLRVRfVFlQRV9OQU1FIHVubGVzcyAkQUNMSUQ7CgogICAgICAgICAgICBteSAkQUNMID0gJEFDTE9iamVjdC0+QUNMR2V0KAogICAgICAgICAgICAgICAgSUQgICAgID0+ICRBQ0xJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB0aGUgQUNMIGZvciB0aWNrZXQgdHlwZSAxIHN0aWxsIGhhcyBib3RoIHNlcnZpY2VzCiAgICAgICAgICAgIGxpa2UoCiAgICAgICAgICAgICAgICAkQUNMLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICdDb25maWdDaGFuZ2UnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc3NpYmxlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGlja2V0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NlcnZpY2UnID0+IFtAU2VydmljZU5hbWVzXSwgICAgIyBzdGlsbCBib3RoIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInNlcnZpY2VzIGZvciAkVGlja2V0VHlwZU5hbWUiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfTsKfTsKCnN1YnRlc3QgJ3JlbmFtZSBhIHBhcmVudCBzZXJ2aWNlJyA9PiBzdWIgewoKICAgICMgcmVuYW1pbmcgc2VydmljZSAwCiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VJRHNbMF07CgogICAgbXkgJVNlcnZpY2UgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CiAgICBpcyggJFNlcnZpY2V7VGlja2V0VHlwZUlEc30sIFxAVGlja2V0VHlwZUlEcywgICdUaWNrZXRUeXBlSURzIGZvciBzZXJ2aWNlIDAnICk7ICAgICMgdGhlIHNlcnZpY2Ugd2FzIG5ldmVyIGNoYW5nZWQKICAgIGlzKCAkU2VydmljZXtOYW1lfSwgICAgICAgICAgJFNlcnZpY2VOYW1lc1swXSwgJ3N0aWxsIHRoZSBvcmlnaW5hbCBuYW1lJyApOwoKICAgICMgbWFrZSBTZXJ2aWNlVXBkYXRlKCkgdG8gYWxzbyBhZGFwdCB0aGUgenp6IEFDTHMKICAgIGxvY2FsICRDb25maWdPYmplY3QtPnsnU2VydmljZUNhdGFsb2c6OkNyZWF0ZVR5cGVTZXJ2aWNlUmVsYXRlZEFjbHMnfSA9ICdsb2NhbGx5IHNldCB0byBhIHRydWUgdmFsdWUnOwoKICAgICMgYWRkIGEgcGFyZW50IHNlcnZpY2UKICAgIG15ICRQYXJlbnRTZXJ2aWNlTmFtZSA9ICJQYXJlbnRfJFJhbmRvbUlEIjsKICAgIG15ICRQYXJlbnRTZXJ2aWNlSUQgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJFBhcmVudFNlcnZpY2VOYW1lLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgVHlwZUlEICAgICAgICA9PiAyLCAgICAgICAgICAgICAgICAgICAgIyBJVFNNOjpTZXJ2aWNlOjpUeXBlIGZyb20gSVRTTUNvcmUKICAgICAgICBDcml0aWNhbGl0eSAgID0+ICczIG5vcm1hbCcsICAgICAgICAgICAjIGFkZGVkIGJ5IElUU01Db3JlCiAgICAgICAgVGlja2V0VHlwZUlEcyA9PiBbXSwKICAgICAgICBEZXNjcmlwdGlvbnMgID0+IHsgICAgICAgICAgICAgICAgICAgICAjIGFkZGVkIGJ5IFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gInBhcmVudCBzZXJ2aWNlIHdpdGhvdXQgdGlja2V0IHR5cGVzIiwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgPT4gInBhcmVudCBzZXJ2aWNlIHdpdGhvdXQgdGlja2V0IHR5cGVzIiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKCiAgICApOwogICAgb2soICRQYXJlbnRTZXJ2aWNlSUQsICdwYXJlbnQgc2VydmljZSBhZGRlZCcgKTsKCiAgICAjIFJlbmFtZSBzZXJ2aWNlIDAgdG8gYmUgYSBjaGlsZCBvZiB0aGUgcGFyZW50IHNlcnZpY2UKICAgIG15ICROZXdTZXJ2aWNlME5hbWUgPSBqb2luICc6OicsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJFNlcnZpY2VOYW1lc1swXTsKICAgIHsKICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgIFBhcmVudElEID0+ICRQYXJlbnRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBvayggJFVwZGF0ZVN1Y2Nlc3MsICJTZXJ2aWNlVXBkYXRlKCkgc2VydmljZSAwLCBtYWtpbmcgaXQgYSBjaGlsZCIgKTsKCiAgICAgICAgbXkgJVVwZGF0ZWRTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEc1swXSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpcyggJFVwZGF0ZWRTZXJ2aWNle05hbWV9LCAkTmV3U2VydmljZTBOYW1lLCAncGFyZW50IG5hbWUgd2FzIHByZXBlbmRlZCcgKTsKICAgIH0KCiAgICAjIFVwZGF0ZSB0aGUgbmFtZSBvZiB0aGUgcGFyZW50IHByb2Nlc3MsIGluIG9yZGVyIHRvIHNlZSB3aGV0aGVyIHNlcnZpY2UgMCBpcyBhbHNvIHVwZGF0ZWQuCiAgICB7CiAgICAgICAgbXkgJVNlcnZpY2UgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJlbnRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgIE5hbWUgICA9PiAiVXBkYXRlZCAkUGFyZW50U2VydmljZU5hbWUiLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgIG9rKCAkVXBkYXRlU3VjY2VzcywgIlNlcnZpY2VVcGRhdGUoKSBwYXJlbnQgc2VydmljZSIgKTsKICAgIH0KCiAgICBzdWJ0ZXN0ICd6enogQUNMcyBmb3Igc2VydmljZSAwIGFuZCAxLCBzZXJ2aWNlIDAgcmVuYW1lZCcgPT4gc3ViIHsKCiAgICAgICAgbXkgJEFDTHMgPSAkQUNMT2JqZWN0LT5BQ0xMaXN0R2V0KAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBPYmplY3RUeXBlID0+IFsnVGlja2V0J10sCiAgICAgICAgKTsKICAgICAgICBteSAlQUNMTmFtZTJJRCA9IG1hcCB7ICRfLT57TmFtZX0gPT4gJF8tPntJRH0gfSAkQUNMcy0+QCo7CgogICAgICAgICMgU2VydmljZSAwIGFuZCAxIGhhdmUgYWxsIHRpY2tldCB0eXBlcy4gU28gdGhlcmUgc2hvdWxkIGJlIEFDTHMKICAgICAgICAjIGZvciBhbGwgdGlja2V0IHR5cGVzIGFuZCB0aGUgc2VydmljZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBBQ0wuCiAgICAgICAgVElDS0VUX1RZUEVfTkFNRToKICAgICAgICBmb3IgbXkgJFRpY2tldFR5cGVOYW1lIChAVGlja2V0VHlwZU5hbWVzKSB7CiAgICAgICAgICAgIG15ICRBQ0xJRCA9ICRBQ0xOYW1lMklEeyAkQUNMUHJlZml4IC4gJFRpY2tldFR5cGVOYW1lIH07CgogICAgICAgICAgICBpZiAoICRUaWNrZXRUeXBlTmFtZSBlcSAkVGlja2V0VHlwZU5hbWVzWzFdICkgewoKICAgICAgICAgICAgICAgICMgdGlja2V0IHR5cGUgMSBpcyByZW1vdmVkIGZyb20gYm90aCBzZXJ2aWNlcywgdGh1cyB0aGUgQUNMIGlzIGRlbGV0ZWQKICAgICAgICAgICAgICAgIGlzKCAkQUNMSUQsIHVuZGVmLCAnQUNMIGZvciB0aWNrZXQgdHlwZSAxIGlzIHJlbW92ZWQnICk7CgogICAgICAgICAgICAgICAgbmV4dCBUSUNLRVRfVFlQRV9OQU1FOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFRoZSBBQ0wgZm9yIHRpY2tldCB0eXBlIDAgaXMgc3RpbGwgdGhlcmUKICAgICAgICAgICAgb2soICRBQ0xJRCwgInp6eiBBQ0wgZm9yICRUaWNrZXRUeXBlTmFtZSIgKTsKCiAgICAgICAgICAgIG5leHQgVElDS0VUX1RZUEVfTkFNRSB1bmxlc3MgJEFDTElEOwoKICAgICAgICAgICAgbXkgJEFDTCA9ICRBQ0xPYmplY3QtPkFDTEdldCgKICAgICAgICAgICAgICAgIElEICAgICA9PiAkQUNMSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgdGhlIEFDTCBmb3IgdGlja2V0IHR5cGUgMSBzdGlsbCBoYXMgYm90aCBzZXJ2aWNlcwogICAgICAgICAgICBsaWtlKAogICAgICAgICAgICAgICAgJEFDTCwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnQ29uZmlnQ2hhbmdlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdQb3NzaWJsZScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpY2tldCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZXJ2aWNlJyA9PiBbICJVcGRhdGVkICROZXdTZXJ2aWNlME5hbWUiLCAkU2VydmljZU5hbWVzWzFdIF0sICAgICMgc3RpbGwgYm90aCBzZXJ2aWNlcywgc2VydmljZSAwIHJlbmFtZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInNlcnZpY2VzIGZvciAkVGlja2V0VHlwZU5hbWUiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfTsKfTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/Core.InputFields.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIElucHV0IEZpZWxkcwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIEdlbmVyYWwKICovCgpkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgewogICAgcG9zaXRpb246IHN0YXRpYzsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKZGl2LklucHV0RmllbGRfSW5wdXRDb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDExcHg7Cn0KCi5JbnB1dEZpZWxkX1NlYXJjaDo6LW1zLWNsZWFyIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICB3aWR0aCA6IDA7CiAgICBoZWlnaHQ6IDA7Cn0KCi5JbnB1dEZpZWxkX1NlYXJjaCwKLklucHV0RmllbGRfQXV0b2NvbXBsZXRlIHsKLyogUm90aGVyIE9TUwogICAgbWluLXdpZHRoOiAxOTBweDsgKi8KICAgIG1pbi13aWR0aDogMzAwcHg7Ci8qIEVPIFJvdGhlciBPU1MgKi8KfQoKLklucHV0RmllbGRfU2VhcmNoLlNtYWxsIHsKICAgIG1pbi13aWR0aDogMTMwcHg7Cn0KCi5JbnB1dEZpZWxkX1NlYXJjaFtyZWFkb25seV06Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwp9CgouSW5wdXRGaWVsZF9TZWFyY2hbcmVhZG9ubHldLkVycm9yOmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sVGV4dEVycik7Cn0KCi5TaWRlYmFyQ29sdW1uIC5XaWRnZXRTaW1wbGUgLklucHV0RmllbGRfU2VhcmNoLAouU2lkZWJhckNvbHVtbiAuV2lkZ2V0U2ltcGxlIC5JbnB1dEZpZWxkX0F1dG9jb21wbGV0ZSB7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgouU2lkZWJhckNvbHVtbiAuV2lkZ2V0U2ltcGxlIC5JbnB1dEZpZWxkX0NvbnRhaW5lciwKLlNpZGViYXJDb2x1bW4gLldpZGdldFNpbXBsZSAuSW5wdXRGaWVsZF9Db250YWluZXIgLklucHV0RmllbGRfSW5wdXRDb250YWluZXIsCi5TaWRlYmFyQ29sdW1uIC5XaWRnZXRTaW1wbGUgc2VsZWN0Lk1vZGVybml6ZSB7CiAgICB3aWR0aDogMTAwJTsKfQoKLldpZGdldFNldHRpbmdzRm9ybSAuSW5wdXRGaWVsZF9TZWFyY2gsCi5XaWRnZXRTZXR0aW5nc0Zvcm0gLklucHV0RmllbGRfQXV0b2NvbXBsZXRlIHsKICAgIG1pbi13aWR0aDogMHB4Owp9Cgoub29vQUNMSGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLk11bHRpVmFsdWVfVGVtcGxhdGUgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgouVGFibGVMaWtlIC5Sb3dfRHluYW1pY0ZpZWxkIHsKICAgIGRpc3BsYXk6IGdyaWQ7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSB7CiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiAuTW9kZXJuaXplI1R5cGVJRCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjRGVzdCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjTmV3UXVldWVJRCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjU2VydmljZUlELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNTTEFJRCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjTmV3VXNlcklELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNOZXdPd25lcklELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNOZXdSZXNwb25zaWJsZUlELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNTdGFuZGFyZFRlbXBsYXRlSUQsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiAuTW9kZXJuaXplI05leHRTdGF0ZUlELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNOZXdTdGF0ZUlELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNQcmlvcml0eUlELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNOZXdQcmlvcml0eUlELAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZCA+IHNlbGVjdC5Nb2Rlcm5pemUgewogICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gaW5wdXQuVzUwcGMsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkID4gaW5wdXQuVzUwcGMgewogICAgICAgIG1heC13aWR0aDogMzEwcHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLlJvdyA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBzZWxlY3QuTW9kZXJuaXplLAogICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkID4gaW5wdXQuVzc1cGMsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLlJvdyA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBpbnB1dC5XNTBwYywKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IGlucHV0W3R5cGU9InRleHQiXSwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuRmllbGRDZWxsID4gLkZpZWxkID4gZGl2LklucHV0RmllbGRfQ29udGFpbmVyID4gZGl2LklucHV0RmllbGRfSW5wdXRDb250YWluZXIgPiAuSW5wdXRGaWVsZF9TZWFyY2gsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IGRpdi5JbnB1dEZpZWxkX0NvbnRhaW5lciA+IGRpdi5JbnB1dEZpZWxkX0lucHV0Q29udGFpbmVyID4gLklucHV0RmllbGRfQXV0b2NvbXBsZXRlIHsKICAgICAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3c6bm90KC5NdWx0aUNvbHVtbikgPiAuRmllbGRDZWxsID4gLkZpZWxkID4gaW5wdXQuVzUwcGMgewogICAgICAgIG1heC13aWR0aDogNTAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gaW5wdXQuVzc1cGMsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkID4gaW5wdXQuVzc1cGMgewogICAgICAgIG1heC13aWR0aDogNjIwcHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiBpbnB1dCNTdWJqZWN0IHsKICAgICAgICB3aWR0aDogNzUlOwogICAgICAgIG1heC13aWR0aDogNjIwcHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiBkaXYuQ3VzdG9tZXJDb250YWluZXIsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiBkaXYuQ2NDdXN0b21lckNvbnRhaW5lciwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IGRpdi5CY2NDdXN0b21lckNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IGNhbGMoIDc1JSAtIDdweCApOwogICAgICAgIG1heC13aWR0aDogNjA3cHg7CiAgICB9Cgp9CgojSGVhZGVyIGRpdi5JbnB1dEZpZWxkX0NvbnRhaW5lciB7CiAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwp9CgojVG9vbEJhciBsaS5FeHRlbmRlZCBmb3JtIGRpdi5JbnB1dEZpZWxkX0NvbnRhaW5lciAqIHsKCWZsb2F0OiBub25lOwp9CgojVG9vbEJhciBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgbGkgewogICAgaGVpZ2h0OiBhdXRvOwogICAgbWFyZ2luOiBpbmhlcml0OwogICAgd2lkdGg6IGF1dG87Cn0KCiNUb29sQmFyIGRpdi5JbnB1dEZpZWxkX0NvbnRhaW5lciBhIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGhlaWdodDogYXV0bzsKICAgIHRleHQtaW5kZW50OiAwOwogICAgd2lkdGg6IGF1dG87Cn0KCiNUb29sQmFyIC5JbnB1dEZpZWxkX1NlYXJjaCwKI1Rvb2xCYXIgLklucHV0RmllbGRfQXV0b2NvbXBsZXRlIHsKICAgIG1pbi13aWR0aDogNjVweDsKfQoKLklucHV0RmllbGRfU2VhcmNoW2Rpc2FibGVkXSB7CiAgICBjb2xvcjogI2FhYTsKfQoKZGl2LklucHV0RmllbGRfSW5wdXRDb250YWluZXIgLklucHV0RmllbGRfU2VhcmNoIHsKICAgIG1hcmdpbjogMDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKI0NvbnRleHRTZXR0aW5nc0RpYWxvZyBkaXYuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciAuSW5wdXRGaWVsZF9TZWFyY2ggewogICAgbWluLXdpZHRoOiAwcHg7Cn0KCmZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsID4gLkZpZWxkID4gc2VsZWN0Lk1vZGVybml6ZSwKZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdy5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBpbnB1dC5XNzVwYywKZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdy5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBpbnB1dC5XNTBwYywKZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdy5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgLklucHV0RmllbGRfSW5wdXRDb250YWluZXIgPiBpbnB1dCB7CiAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDsKICAgIHdpZHRoOiBjYWxjKCAxMDAlIC0gN3B4ICk7Cn0KCi5EeW5hbWljRmllbGREQiB7CiAgICB3aWR0aDogY2FsYygxMDAlIC0gMTJweCk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgpmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93Lk11bHRpQ29sdW1uID4gLkZpZWxkQ2VsbCAuSW5wdXRGaWVsZF9Db250YWluZXIsCmZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsIC5JbnB1dEZpZWxkX0lucHV0Q29udGFpbmVyIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICAgIHBhZGRpbmctcmlnaHQ6IDA7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9CgovKi5GaWVsZENlbGwgLklucHV0RmllbGRfU2VhcmNoIHsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0qLwoKLyouTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsID4gLkZpZWxkID4gZGl2LklucHV0RmllbGRfQ29udGFpbmVyID4gZGl2LklucHV0RmllbGRfSW5wdXRDb250YWluZXIgPiAuSW5wdXRGaWVsZF9TZWFyY2gsCi5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgPiBkaXYuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciA+IC5JbnB1dEZpZWxkX0F1dG9jb21wbGV0ZSB7CiAgICBtaW4td2lkdGg6IDEwMCU7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9Ki8KCi5GaWVsZENlbGwgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkZpZWxkQ2VsbCBkaXYub29vVGl0bGUgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKfQoKLypkaXYuUm93LlJvd19EeW5hbWljRmllbGQgZGl2LlNpbmdsZUNvbHVtbiA+IGxhYmVsLApkaXYuUm93LlJvd19EeW5hbWljRmllbGQgZGl2LlNpbmdsZUNvbHVtbiA+IGRpdi5NdWx0aVZhbHVlSXRlbSA+IGxhYmVsLApkaXYuUm93LlJvd19EeW5hbWljRmllbGQgZGl2Lk11bHRpQ29sdW1uID4gbGFiZWwsCmRpdi5Sb3cuUm93X0R5bmFtaWNGaWVsZCBkaXYuTXVsdGlDb2x1bW4gPiBkaXYuTXVsdGlWYWx1ZUl0ZW0gPiBsYWJlbCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgZmxvYXQ6IG5vbmU7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgZm9udC1zaXplOiAwLjllbTsKICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGxpbmUtaGVpZ2h0OiAxLjllbTsKICAgIG1pbi1oZWlnaHQ6IDE3cHg7CiAgICBwYWRkaW5nLXRvcDogMC4zZW07CiAgICBwYWRkaW5nLWJvdHRvbTogMXB4OwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZBRkFGQTsKfSovCgpmaWVsZHNldC5UYWJsZUxpa2UgLkFkZFJlbW92ZVZhbHVlUm93IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmctbGVmdDogOHB4Owp9CgouQWRkVmFsdWVSb3csCi5SZW1vdmVWYWx1ZVJvdyB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmZpZWxkc2V0LlRhYmxlTGlrZSBmaWVsZHNldC5EeW5hbWljRmllbGRTZXQgewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHdpZHRoOiAxMDAlCn0KCi8qIG5lZWRlZCBmb3IgbXVsdGl2YWx1ZSBzZXRzIGR1ZSB0byBjdXJyZW50IGRpZmZlcmVuY2UgaW4gb3V0ZXIgc3RydWN0dXJlIGNvbXBhcmVkIHRvIHNpbmdsZSB2YWx1ZSBzZXRzICovCmZpZWxkc2V0LlRhYmxlTGlrZSAuTXVsdGlWYWx1ZSA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiAuRHluYW1pY0ZpZWxkU2V0IHsKICAgIHdpZHRoOiAxMDAlOwp9CgpmaWVsZHNldC5UYWJsZUxpa2UgLk11bHRpVmFsdWUgLkRGU2V0T3V0ZXJGaWVsZCB+IC5BZGRSZW1vdmVWYWx1ZVJvdyB7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgcGFkZGluZy10b3A6IDE2cHg7Cn0KCmEuSW5wdXRGaWVsZF9BY3Rpb24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgdG9wOiA1cHg7Cn0KCmEuSW5wdXRGaWVsZF9BY3Rpb246aG92ZXIgewogICAgY29sb3I6IHZhcigtLWNvbEhpZ2hsaWdodCk7Cn0KCmRpdi5JbnB1dEZpZWxkX1NlbGVjdGlvbiB7CiAgICBkaXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA0cHg7CiAgICBoZWlnaHQ6IDE3cHg7CiAgICBsaW5lLWhlaWdodDogMTFweDsKICAgIHRleHQtc2hhZG93OiBub25lOwp9CgpkaXYuSW5wdXRGaWVsZF9TZWxlY3Rpb24gZGl2IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKZGl2LklucHV0RmllbGRfU2VsZWN0aW9uIGRpdi5UZXh0IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTWVkaXVtKTsKICAgIHBhZGRpbmc6IDJweCA0cHg7Cn0KCmRpdi5JbnB1dEZpZWxkX1NlbGVjdGlvbiBkaXYuUmVtb3ZlIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHRGFyayk7CiAgICBjb2xvcjogI2ZmZjsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLkFscmVhZHlEaXNhYmxlZCBkaXYuSW5wdXRGaWVsZF9TZWxlY3Rpb24gZGl2LlRleHQgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodCk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5BbHJlYWR5RGlzYWJsZWQgZGl2LklucHV0RmllbGRfU2VsZWN0aW9uIGRpdi5SZW1vdmUgewogICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgZGlzcGxheTogbm9uZTsKfQoKZGl2LklucHV0RmllbGRfU2VsZWN0aW9uIGRpdi5SZW1vdmUgYSB7CiAgICBjb2xvcjogI2ZmZjsKICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KCmRpdi5JbnB1dEZpZWxkX01vcmUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHRvcDogNnB4Owp9CgpkaXYuSW5wdXRGaWVsZF9MaXN0Q29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDYxMDA7CiAgICBkaXNwbGF5OiBub25lOwogICAgdGV4dC1zaGFkb3c6IG5vbmU7Cn0KCmRpdi5JbnB1dEZpZWxkX1RyZWVDb250YWluZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICBib3JkZXItdG9wOiBub25lOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgbGluZS1oZWlnaHQ6IDE4cHg7Cn0KCi5FeHBhbmRUb1RvcCBkaXYuSW5wdXRGaWVsZF9UcmVlQ29udGFpbmVyIHsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKZGl2LklucHV0RmllbGRfVG9vbGJhckNvbnRhaW5lciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHTWVkaXVtKTsKICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICBsaW5lLWhlaWdodDogMjFweDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgbWluLWhlaWdodDogMjFweDsKfQoKZGl2LklucHV0RmllbGRfVG9vbGJhckNvbnRhaW5lciB1bCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IHRhYmxlOwp9CgpkaXYuSW5wdXRGaWVsZF9Ub29sYmFyQ29udGFpbmVyIHVsIGxpIHsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGk6YWZ0ZXIgewogICAgY29sb3I6ICNiYmI7CiAgICBjb250ZW50OiAifCI7CiAgICBmbG9hdDogcmlnaHQ7IAogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgpkaXYuSW5wdXRGaWVsZF9Ub29sYmFyQ29udGFpbmVyIHVsIGxpOmxhc3QtY2hpbGQ6YWZ0ZXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLlJUTCBkaXYuSW5wdXRGaWVsZF9Ub29sYmFyQ29udGFpbmVyIHVsIGxpOmxhc3QtY2hpbGQ6YWZ0ZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouUlRMIGRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGk6Zmlyc3QtY2hpbGQ6YWZ0ZXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKZGl2LklucHV0RmllbGRfVG9vbGJhckNvbnRhaW5lciB1bCBsaSBhIHsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBtYXJnaW46IDJweCA1cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTVweDsKfQoKZGl2LklucHV0RmllbGRfVG9vbGJhckNvbnRhaW5lciBpIHsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7Cn0KCmRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGkgYTpob3ZlciB7CiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tY29sSGlnaGxpZ2h0KTsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5JbnB1dEZpZWxkX0NvbmZpcm0sCi5JbnB1dEZpZWxkX0ZpbHRlcnMuQWN0aXZlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouSW5wdXRGaWVsZF9GaWx0ZXJzTGlzdCB7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgei1pbmRleDogMTUwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKICAgIHdpZHRoOiAxMDAlOwogICAgZm9udC1zaXplOiAxMXB4Owp9CgouSW5wdXRGaWVsZF9GaWx0ZXJzTGlzdCBzcGFuIHsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgouSW5wdXRGaWVsZF9GaWx0ZXJzTGlzdCBpbnB1dFtkaXNhYmxlZF0gKyBzcGFuIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwp9CgovKioKICogQHN1YnNlY3Rpb24gIGpzVHJlZSB0aGVtZQogKi8KLmpzdHJlZS1JbnB1dEZpZWxkIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwp9CgouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1ub2RlLAouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1jaGlsZHJlbiwKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtY29udGFpbmVyLXVsIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgIGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgouUlRMIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW5vZGUsCi5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtY2hpbGRyZW4sCi5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtY29udGFpbmVyLXVsIHsKICAgIHRleHQtYWxpZ246IHJpZ2h0Owp9CgouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1ub2RlIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW5vZGUuanN0cmVlLWhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1hbmNob3IgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBwYWRkaW5nOiAwIDRweCAwIDFweDsKICAgIG1hcmdpbjogMDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWFuY2hvcjpmb2N1cyB7CiAgICBvdXRsaW5lOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtYW5jaG9yLAouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1hbmNob3I6bGluaywKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtYW5jaG9yOnZpc2l0ZWQsCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWFuY2hvcjpob3ZlciwKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtYW5jaG9yOmFjdGl2ZSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtaWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtaWNvbjplbXB0eSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtb2NsIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtbGVhZiA+IC5qc3RyZWUtb2NsIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUgLmpzdHJlZS1vcGVuID4gLmpzdHJlZS1jaGlsZHJlbiB7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUgLmpzdHJlZS1jbG9zZWQgPiAuanN0cmVlLWNoaWxkcmVuLAouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZSAuanN0cmVlLWxlYWYgPiAuanN0cmVlLWNoaWxkcmVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWFuY2hvciA+IC5qc3RyZWUtdGhlbWVpY29uIHsKICAgIG1hcmdpbi1yaWdodDogMnB4Owp9CgouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1uby1pY29ucyAuanN0cmVlLXRoZW1laWNvbiwKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtYW5jaG9yID4gLmpzdHJlZS10aGVtZWljb24taGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXJ0bCAuanN0cmVlLWFuY2hvciB7CiAgICBwYWRkaW5nOiAwIDFweCAwIDRweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtcnRsIC5qc3RyZWUtYW5jaG9yID4gLmpzdHJlZS10aGVtZWljb24gewogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtcnRsIC5qc3RyZWUtbm9kZSB7CiAgICBtYXJnaW4tbGVmdDogMDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtcnRsIC5qc3RyZWUtY29udGFpbmVyLXVsID4gLmpzdHJlZS1ub2RlIHsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtaG92ZXJlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Owp9CgouanN0cmVlLUlucHV0RmllbGQgLkRpc2FibGVkID4gLmpzdHJlZS1hbmNob3IgewogICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCkgIWltcG9ydGFudDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtb3BlbiwKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtY2xvc2VkIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtd2hvbGVyb3ctdWwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWluLXdpZHRoOiAxMDAlOwp9CgouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS13aG9sZXJvdy11bCAuanN0cmVlLWxlYWYgPiAuanN0cmVlLW9jbCB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtYW5jaG9yLAouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS13aG9sZXJvdy11bCAuanN0cmVlLWljb24gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS13aG9sZXJvdy11bCAuanN0cmVlLXdob2xlcm93IHsKICAgIHdpZHRoOiAxMDAlOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR01lZGl1bSk7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtd2hvbGVyb3c6aG92ZXIsCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtd2hvbGVyb3ctaG92ZXJlZCwKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtZm9jdXNlZCA+IC5qc3RyZWUtd2hvbGVyb3cgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sSG92ZXJMaWdodCk7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtd2hvbGVyb3ctY2xpY2tlZDpob3ZlciwKLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtd2hvbGVyb3ctdWwgLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkLmpzdHJlZS13aG9sZXJvdy1ob3ZlcmVkLAouanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1mb2N1c2VkID4gLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEhvdmVyRGFyayk7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuRGlzYWJsZWQgPiAuanN0cmVlLXdob2xlcm93OmhvdmVyLAouanN0cmVlLUlucHV0RmllbGQgLkRpc2FibGVkID4gLmpzdHJlZS13aG9sZXJvdy1ob3ZlcmVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuRGlzYWJsZWQuanN0cmVlLW9wZW4gPiAuanN0cmVlLWFuY2hvciwKLmpzdHJlZS1JbnB1dEZpZWxkIC5EaXNhYmxlZC5qc3RyZWUtY2xvc2VkID4gLmpzdHJlZS1hbmNob3IgewogICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWNsaWNrZWQgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCA0cHggMCAxcHggIWltcG9ydGFudDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLmpzdHJlZS1ydGwgLmpzdHJlZS1ub2RlIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFDQVFNQUFBQjQ5STVHQUFBQUJsQk1WRVVBQUFBZEhSdkVrQ3djQUFBQUFYUlNUbE1BUU9iWVpnQUFBQXhKUkVGVUNOZGpBQU1PQmdBQUdBQUpNd1FIZFFBQUFBQkpSVTVFcmtKZ2dnPT0iKTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMXB4OwogICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC15Owp9CgouanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCAuanN0cmVlLWxhc3QgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsIC5qc3RyZWUtb3BlbiA+IC5qc3RyZWUtb2NsIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMzVweCAtMzlweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLmpzdHJlZS1ydGwgLmpzdHJlZS1jbG9zZWQgPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTAzcHggLTM5cHg7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsIC5qc3RyZWUtbGVhZiA+IC5qc3RyZWUtb2NsIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC03MXB4IC0zOXB4Owp9CgouanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCA+IC5qc3RyZWUtbm8tZG90cyAuanN0cmVlLW5vZGUsCi5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsID4gLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtbGVhZiA+IC5qc3RyZWUtb2NsIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgouanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCA+IC5qc3RyZWUtbm8tZG90cyAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzlweCAtMzlweDsKfQouanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCA+IC5qc3RyZWUtbm8tZG90cyAuanN0cmVlLWNsb3NlZCA+IC5qc3RyZWUtb2NsIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC03cHggLTM5cHg7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXRoZW1laWNvbi1jdXN0b20gewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwp9CgouanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCAuanN0cmVlLW5vZGUgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQUNBUU1BQUFCdjFoNlBBQUFBQmxCTVZFVUFBQUFkSFJ2RWtDd2NBQUFBQVhSU1RsTUFRT2JZWmdBQUFBeEpSRUZVQ05kakFBTUhCZ0FBaUFCQkk0Z3o5QUFBQUFCSlJVNUVya0pnZ2c9PScpOwp9CgouanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCAuanN0cmVlLWxhc3QgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXNlYXJjaCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW5vLW1hdGNoIC5qc3RyZWUtb2NsIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW5vLW1hdGNoIHsKICAgIG1hcmdpbi1sZWZ0OiAycHggIWltcG9ydGFudDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLmpzdHJlZS1ydGwgLmpzdHJlZS1uby1tYXRjaCB7CiAgICBtYXJnaW4tcmlnaHQ6IDJweCAhaW1wb3J0YW50Owp9CgovKioKICogQHN1YnNlY3Rpb24gIGpzVHJlZSB0aGVtZSAtIFRyZWUgdmFyaWFudAogKi8KLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1ub2RlIHsKICAgIG1pbi1oZWlnaHQ6IDE4cHg7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1sZWZ0OiAxOHB4OwogICAgbWluLXdpZHRoOiAxOHB4Owp9CgouUlRMIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtbm9kZSB7CiAgICBtYXJnaW4tcmlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLWNvbnRhaW5lci11bCA+IC5qc3RyZWUtbm9kZSwKLlJUTCAuanN0cmVlLUlucHV0RmllbGQtVHJlZSA+IC5qc3RyZWUtY29udGFpbmVyLXVsID4gLmpzdHJlZS1ub2RlIHsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbWFyZ2luLXJpZ2h0OiAwOwp9CgouanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLWFuY2hvciB7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBsaW5lLWhlaWdodDogMThweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1pY29uIHsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgbGluZS1oZWlnaHQ6IDE4cHg7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtaWNvbjplbXB0eSB7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4Owp9CgouanN0cmVlLUlucHV0RmllbGQtVHJlZS5qc3RyZWUtcnRsIC5qc3RyZWUtbm9kZSB7CiAgICBtYXJnaW4tcmlnaHQ6IDE4cHg7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtd2hvbGVyb3cgewogICAgaGVpZ2h0OiAxOHB4Owp9CgouanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLW5vZGUsCi5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtaWNvbiB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltZy9pbnB1dGZpZWxkX3RyZWUucG5nJyk7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtbm9kZSB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjk1cHggLTdweDsKICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteTsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1sYXN0IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgouanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTM1cHggLTdweDsKfQoKLlJUTCAuanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTM1cHggLTM5cHg7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtY2xvc2VkID4gLmpzdHJlZS1vY2wgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEwM3B4IC03cHg7Cn0KCi5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1jbG9zZWQgPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTAzcHggLTM5cHg7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtbGVhZiA+IC5qc3RyZWUtb2NsIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC03MXB4IC03cHg7Cn0KCi5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2wgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTcxcHggLTM5cHg7Cn0KCi5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtdGhlbWVpY29uIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjNweCAtN3B4Owp9CgouUlRMIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtdGhlbWVpY29uIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjNweCAtMzlweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1ub2RlLAouanN0cmVlLUlucHV0RmllbGQtVHJlZSA+IC5qc3RyZWUtbm8tZG90cyAuanN0cmVlLWxlYWYgPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1vcGVuID4gLmpzdHJlZS1vY2wgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM5cHggLTdweDsKfQoKLlJUTCAuanN0cmVlLUlucHV0RmllbGQtVHJlZSA+IC5qc3RyZWUtbm8tZG90cyAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzlweCAtMzlweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1jbG9zZWQgPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4IC03cHg7Cn0KCi5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1jbG9zZWQgPiAuanN0cmVlLW9jbCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4IC0zOXB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gIGpzVHJlZSB0aGVtZSAtIE5vIFRyZWUgdmFyaWFudAogKi8KLmpzdHJlZS1JbnB1dEZpZWxkLU5vVHJlZSAuanN0cmVlLW5vZGUgewogICAgbWluLWhlaWdodDogMThweDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIG1pbi13aWR0aDogMThweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLU5vVHJlZSAuanN0cmVlLWFuY2hvciB7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBsaW5lLWhlaWdodDogMThweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLU5vVHJlZSAuanN0cmVlLWljb24gewogICAgZGlzcGxheTogbm9uZTsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLU5vVHJlZS5qc3RyZWUtcnRsIC5qc3RyZWUtbm9kZSB7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKfQoKLmpzdHJlZS1JbnB1dEZpZWxkLU5vVHJlZSAuanN0cmVlLXdob2xlcm93IHsKICAgIGhlaWdodDogMThweDsKfQoKfSAvKiBlbmQgQG1lZGlhICovCg==</File>
        <File Location="var/httpd/htdocs/js/Core.UI.Dialog.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vICRvcmlnaW46IG90b2JvIC0gZGMzYzJmZTcwYzI0NzcxODJmYTFlOTVkZWYzOGJmYWM5ZDVmYmE0YyAtIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5VSS5EaWFsb2cuanMKLy8gLS0KLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKLy8gdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLy8gRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi8vIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCi8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQovLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBDb3JlID0gQ29yZSB8fCB7fTsKQ29yZS5VSSA9IENvcmUuVUkgfHwge307CgovKioKICogQG5hbWVzcGFjZSBDb3JlLlVJLkRpYWxvZwogKiBAbWVtYmVyb2YgQ29yZS5VSQogKiBAYXV0aG9yCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIENvbnRhaW5zIHRoZSBjb2RlIGZvciB0aGUgZGlmZmVyZW50IGRpYWxvZ3MuCiAqLwpDb3JlLlVJLkRpYWxvZyA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBuYW1lIERpYWxvZ0NvdW50ZXIKICAgICAqIEBtZW1iZXJvZiBDb3JlLlVJLkRpYWxvZwogICAgICogQG1lbWJlciB7TnVtYmVyfQogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIE51bWJlciBvZiB1c2VkL29wZW5lZCBkaWFsb2dzIG9uIGEgcGFnZS4gVXNlZCB0byByZXN0b3JlIHRoZSBjb3JyZWN0IEhUTUwgYmFja3VwIGFmdGVyIGRpYWxvZyBpcyBjbG9zZWQuCiAgICAgKi8KICAgIHZhciBEaWFsb2dDb3VudGVyID0gMTsKCiAgICAvKgogICAgICogY2hlY2sgZGVwZW5kZW5jaWVzIGZpcnN0CiAgICAgKi8KICAgIGlmICghQ29yZS5EZWJ1Zy5DaGVja0RlcGVuZGVuY3koJ0NvcmUuVUkuRGlhbG9nJywgJyQoW10pLmRyYWdnYWJsZScsICdqUXVlcnkgVUkgZHJhZ2dhYmxlJykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoIUNvcmUuRGVidWcuQ2hlY2tEZXBlbmRlbmN5KCdDb3JlLlVJLkRpYWxvZycsICdDb3JlLkNvbmZpZycsICdDb3JlLkNvbmZpZycpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKCFDb3JlLkRlYnVnLkNoZWNrRGVwZW5kZW5jeSgnQ29yZS5VSS5EaWFsb2cnLCAnQ29yZS5VSS5JbnB1dEZpZWxkcycsICdDb3JlLlVJLklucHV0RmllbGRzJykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgQWRqdXN0U2Nyb2xsYWJsZUhlaWdodAogICAgICogQG1lbWJlcm9mIENvcmUuVUkuRGlhbG9nCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gQWxsb3dBdXRvR3JvdyAtIElmIEFsbG93QXV0b0dyb3cgaXMgc2V0LCBhdXRvLXJlc2l6aW5nIHNob3VsZCBiZSBwb3NzaWJsZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBBZGp1c3RzIHRoZSBzY3JvbGxhYmxlIGlubmVyIGNvbnRhaW5lciBvZiB0aGUgZGlhbG9nIGFmdGVyIGV2ZXJ5IHJlc2l6aW5nLgogICAgICovCiAgICBmdW5jdGlvbiBBZGp1c3RTY3JvbGxhYmxlSGVpZ2h0KEFsbG93QXV0b0dyb3cpIHsKICAgICAgICAvLyBDaGVjayB3aW5kb3cgaGVpZ2h0IGFuZCBhZGp1c3QgdGhlIHNjcm9sbGFibGUgaGVpZ2h0IG9mIElubmVyQ29udGVudAogICAgICAgIC8vIENhbGN1bGF0aW9uOgogICAgICAgIC8vIFdpbmRvdyBoZWlnaHQKICAgICAgICAvLyAtIHRvcCBtYXJnaW4gb2YgZGlhbG9nIHR3aWNlIChmb3IgdG9wIGFuZCBib3R0b20pIC0gb25seSB1c2UgdGhpcyBmb3IgYmlnIGRpYWxvZyB3aW5kb3dzCiAgICAgICAgLy8gLSBzb21lIHN0YXRpYyBwaXhlbHMgZm9yIEhlYWRlciBhbmQgRm9vdGVyIG9mIGRpYWxvZwogICAgICAgIHZhciBDb250ZW50U2Nyb2xsSGVpZ2h0LAogICAgICAgICAgICBXaW5kb3dIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCksCiAgICAgICAgICAgIFdpbmRvd1Njcm9sbFRvcCA9ICQod2luZG93KS5zY3JvbGxUb3AoKSwKICAgICAgICAgICAgRGlhbG9nVG9wTWFyZ2luID0gJCgnLkRpYWxvZzp2aXNpYmxlJykub2Zmc2V0KCkudG9wLAogICAgICAgICAgICBEaWFsb2dIZWlnaHQgPSAkKCcuRGlhbG9nOnZpc2libGUnKS5oZWlnaHQoKTsKCiAgICAgICAgLy8gaWYgZGlhbG9nIGhlaWdodCBpcyBtb3JlIHRoYW4gMzAwcHggcmVjYWxjdWxhdGUgd2lkdGggb2YgSW5uZXJDb250ZW50IHRvIG1ha2UgaXQgc2Nyb2xsYWJsZQogICAgICAgIC8vIGlmIGRpYWxvZyBpcyBzbWFsbGVyIHRoYW4gMzAwcHggdGhpcyBpcyBub3QgbmVjZXNzYXJ5CiAgICAgICAgLy8gaWYgQWxsb3dBdXRvR3JvdyBpcyBzZXQsIGF1dG8tcmVzaXppbmcgc2hvdWxkIGJlIHBvc3NpYmxlCiAgICAgICAgLy8gaWYgaW4gYSBtb2JpbGUgZW52aXJvbm1lbnQgYW5kIGEgc21hbGwgc2NyZWVuLCB1c2UgYXMgbXVjaCB3aW5kb3cgaGVpZ2h0IGFzIHBvc3NpYmxlCiAgICAgICAgaWYgKCQoJy5EaWFsb2c6dmlzaWJsZScpLmhhc0NsYXNzKCdGdWxsc2l6ZScpKSB7CiAgICAgICAgICAgIENvbnRlbnRTY3JvbGxIZWlnaHQgPSBXaW5kb3dIZWlnaHQgLSA4MDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoQWxsb3dBdXRvR3JvdyB8fCBEaWFsb2dIZWlnaHQgPiAzMDApIHsKICAgICAgICAgICAgQ29udGVudFNjcm9sbEhlaWdodCA9IFdpbmRvd0hlaWdodCAtICgoRGlhbG9nVG9wTWFyZ2luIC0gV2luZG93U2Nyb2xsVG9wKSAqIDIpIC0gMTAwOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgQ29udGVudFNjcm9sbEhlaWdodCA9IDIwMDsKICAgICAgICB9CiAgICAgICAgJCgnLkRpYWxvZzp2aXNpYmxlIC5Db250ZW50IC5Jbm5lckNvbnRlbnQnKS5jc3MoJ21heC1oZWlnaHQnLCBDb250ZW50U2Nyb2xsSGVpZ2h0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAbmFtZSBGb2N1c0ZpcnN0RWxlbWVudAogICAgICogQG1lbWJlcm9mIENvcmUuVUkuRGlhbG9nCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBGb2N1c2VzIHRoZSBmaXJzdCBlbGVtZW50IHdpdGhpbiB0aGUgZGlhbG9nLgogICAgICovCiAgICBmdW5jdGlvbiBGb2N1c0ZpcnN0RWxlbWVudCgpIHsKICAgICAgICB2YXIgJEZpcnN0RWxlbWVudCA9ICQoJ2Rpdi5EaWFsb2c6dmlzaWJsZSAuQ29udGVudCcpCiAgICAgICAgICAgICAgICAuZmluZCgnYTp2aXNpYmxlLCBpbnB1dDp2aXNpYmxlLCB0ZXh0YXJlYTp2aXNpYmxlLCBzZWxlY3Q6dmlzaWJsZSwgYnV0dG9uOnZpc2libGUnKQogICAgICAgICAgICAgICAgLmZpbHRlcignOmZpcnN0JyksCiAgICAgICAgICAgICRGb2N1c0ZpZWxkOwoKICAgICAgICBpZiAoISRGaXJzdEVsZW1lbnQgfHwgISRGaXJzdEVsZW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIElmIGZpcnN0IGVsZW1lbnQgaXMgbW9kZXJuaXplZCBpbnB1dCBmaWVsZCwgcHJlcGVuZCBhIHNlbWktaGlkZGVuIHRleHQgZmllbGQgYW5kIHNldCBmb2N1cyBvbiBpdCBpbnN0ZWFkLgogICAgICAgIC8vICAgVGhpcyB3aWxsIHByZXZlbnQgYXV0b21hdGljIGV4cGFuc2lvbiBvZiB0aGUgaW5wdXQgZmllbGQsIGJ1dCBzdGlsbCBtb3ZlIHRhYiBpbmRleCB0byB0aGUgZGlhbG9nIGFuZCBhbGxvdwogICAgICAgIC8vICAgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gaW4gaXQuIFNlZSBidWcjMTI2ODEgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgaWYgKCRGaXJzdEVsZW1lbnQuaGFzQ2xhc3MoJ0lucHV0RmllbGRfU2VhcmNoJykpIHsKICAgICAgICAgICAgJEZvY3VzRmllbGQgPSAkKCc8aW5wdXQvPicpCiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ0ZvY3VzRmllbGQnKQogICAgICAgICAgICAgICAgLmluc2VydEJlZm9yZSgkRmlyc3RFbGVtZW50KTsKICAgICAgICAgICAgJEZvY3VzRmllbGQuZm9jdXMoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRGaXJzdEVsZW1lbnQuZm9jdXMoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgSW5pdEtleUV2ZW50CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5EaWFsb2cKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtCb29sZWFufSBDbG9zZU9uRXNjYXBlIC0gSWYgc2V0IHRvIHRydWUsIHRoZSBlc2NhcGUga2V5IGlzIGNoZWNrZWQgZm9yIGNsb3NpbmcgdGhlIGRpYWxvZy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyB0aGUga2V5IGV2ZW50IGxvZ2dlciBmb3IgdGhlIGRpYWxvZy4KICAgICAqICAgICAgTXVzdCBiZSB1bmJvdW5kIHdoZW4gY2xvc2luZyB0aGUgZGlhbG9nLgogICAgICovCiAgICBmdW5jdGlvbiBJbml0S2V5RXZlbnQoQ2xvc2VPbkVzY2FwZSkgewovLyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICAgICAvLyB2YXIgJERpYWxvZyA9ICQoJ2Rpdi5EaWFsb2c6dmlzaWJsZScpOwogICAgICAgIHZhciAkRGlhbG9nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiAkKCdkaXYuRGlhbG9nOnZpc2libGUnKTsKICAgICAgICB9OwovLyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgIC8qCiAgICAgICAgICogT3BlcmEgY2FuJ3QgcHJldmVudCB0aGUgZGVmYXVsdCBhY3Rpb24gb2Ygc3BlY2lhbCBrZXlzIG9uIGtleWRvd24uIFRoYXQncyB3aHkgd2UgbmVlZCBhIHNwZWNpYWwga2V5cHJlc3MgZXZlbnQgaGVyZSwKICAgICAgICAgKiB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIHNwZWNpYWwga2V5cy4KICAgICAgICAgKiBTZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL2tleXMuaHRtbCBmb3IgZGV0YWlscwogICAgICAgICAqLwogICAgICAgICQoZG9jdW1lbnQpLm9mZigna2V5cHJlc3MuRGlhbG9nJykub24oJ2tleXByZXNzLkRpYWxvZycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICAgICBpZiAoJC5icm93c2VyLm9wZXJhICYmIChFdmVudC5rZXlDb2RlID09PSA5IHx8IChFdmVudC5rZXlDb2RlID09PSAyNyAmJiBDbG9zZU9uRXNjYXBlKSkpIHsKICAgICAgICAgICAgICAgIEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0pLm9mZigna2V5ZG93bi5EaWFsb2cnKS5vbigna2V5ZG93bi5EaWFsb2cnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgdmFyICRUYWJiYWJsZXMsICRGaXJzdCwgJExhc3Q7CgogICAgICAgICAgICAvLyBUYWIgcHJlc3NlZAogICAgICAgICAgICBpZiAoRXZlbnQua2V5Q29kZSA9PT0gOSkgewogICAgICAgICAgICAgICAgLy8gOnRhYmJhYmxlIHByb2JhYmx5IGNvbWVzIGZyb20ganF1ZXJ5IFVJCi8vIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAgICAgLy8gJFRhYmJhYmxlcyA9ICQoJ2E6dmlzaWJsZSwgaW5wdXQ6dmlzaWJsZSwgdGV4dGFyZWE6dmlzaWJsZSwgc2VsZWN0OnZpc2libGUsIGJ1dHRvbjp2aXNpYmxlJywgJERpYWxvZyk7CiAgICAgICAgICAgICAgICAkVGFiYmFibGVzID0gJCgnYTp2aXNpYmxlLCBpbnB1dDp2aXNpYmxlLCB0ZXh0YXJlYTp2aXNpYmxlLCBzZWxlY3Q6dmlzaWJsZSwgYnV0dG9uOnZpc2libGUnLCAkRGlhbG9nKCkpOwovLyBFTyBTZXJ2aWNlQ2F0YWxvZwogICAgICAgICAgICAgICAgJEZpcnN0ID0gJFRhYmJhYmxlcy5maWx0ZXIoJzpmaXJzdCcpOwogICAgICAgICAgICAgICAgJExhc3QgPSAkVGFiYmFibGVzLmZpbHRlcignOmxhc3QnKTsKCiAgICAgICAgICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ID09PSAkTGFzdFswXSAmJiAhRXZlbnQuc2hpZnRLZXkpIHsKICAgICAgICAgICAgICAgICAgICAkRmlyc3QuZm9jdXMoMSk7CiAgICAgICAgICAgICAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChFdmVudC50YXJnZXQgPT09ICRGaXJzdFswXSAmJiBFdmVudC5zaGlmdEtleSkgewogICAgICAgICAgICAgICAgICAgICRMYXN0LmZvY3VzKDEpOwogICAgICAgICAgICAgICAgICAgIEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEVzY2FwZSBwcmVzc2VkIGFuZCBDbG9zZU9uRXNjYXBlIGlzIHRydWUKICAgICAgICAgICAgZWxzZSBpZiAoRXZlbnQua2V5Q29kZSA9PT0gMjcgJiYgQ2xvc2VPbkVzY2FwZSkgewovLyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICAgICAgICAgICAgIFRhcmdldE5TLkNsb3NlRGlhbG9nKCREaWFsb2coKSk7Ci8vIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAbmFtZSBEZWZhdWx0U3VibWl0RnVuY3Rpb24KICAgICAqIEBtZW1iZXJvZiBDb3JlLlVJLkRpYWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhlIGRlZmF1bHQgc3VibWl0IGZ1bmN0aW9uIGluIHRoZSBkaWFsb2cuCiAgICAgKi8KICAgIGZ1bmN0aW9uIERlZmF1bHRTdWJtaXRGdW5jdGlvbigpIHsKICAgICAgICAkKCcuRGlhbG9nOnZpc2libGUgZm9ybScpLnN1Ym1pdCgpOwogICAgfQoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBuYW1lIERlZmF1bHRDbG9zZUZ1bmN0aW9uCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5EaWFsb2cKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBkaWFsb2cuCiAgICAgKi8KICAgIGZ1bmN0aW9uIERlZmF1bHRDbG9zZUZ1bmN0aW9uKCkgewogICAgICAgIFRhcmdldE5TLkNsb3NlRGlhbG9nKCQoJy5EaWFsb2c6dmlzaWJsZScpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBuYW1lIFNob3dEaWFsb2cKICAgICAqIEBtZW1iZXJvZiBDb3JlLlVJLkRpYWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gUGFyYW1zIC0gVGhlIGRpZmZlcmVudCBjb25maWcgb3B0aW9ucy4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gUGFyYW1zLk1vZGFsIC0gU2hvd3MgYSBkYXJrIGJhY2tncm91bmQgb3ZlcmxheSBiZWhpbmQgdGhlIGRpYWxvZyAoZGVmYXVsdDogZmFsc2UpCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gUGFyYW1zLlR5cGUgLSBBbGVydHxTZWFyY2ggKGRlZmF1bHQ6IHVuZGVmaW5lZCkgRGVmaW5lcyBhIHNwZWNpYWwgdHlwZSBvZiBkaWFsb2cuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gUGFyYW1zLlRpdGxlIC0gRGVmaW5lcyB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZyB3aW5kb3cgKGRlZmF1bHQ6IHVuZGVmaW5lZCkuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gUGFyYW1zLkhlYWRsaW5lIC0gRGVmaW5lcyBhIHNwZWNpYWwgaGVhZGxpbmUgd2l0aGluIHRoZSBkaWFsb2cgd2luZG93IChkZWZhdWx0OiB1bmRlZmluZWQpLiBPbmx5IHVzZWQgZm9yIFR5cGUgQWxlcnQuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gUGFyYW1zLlRleHQgLSBUaGUgdGV4dCB3aGljaCBpcyBvdXRwdXR0ZWQgaW4gdGhlIGRpYWxvZyB3aW5kb3cgKGRlZmF1bHQ6IHVuZGVmaW5lZCkuIE9ubHkgdXNlZCBmb3IgVHlwZSBBbGVydC4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBQYXJhbXMuSFRNTCAtIFVzZWQgZm9yIGNvbnRlbnQgZGlhbG9nIHdpbmRvd3MuIENvbnRhaW5zIGEgY29tcGxldGUgSFRNTCBzbmlwcGV0IG9yIGFuIGpRdWVyeSBvYmplY3Qgd2l0aCBjb250YWluaW5nIEhUTUwgKGRlZmF1bHQ6IHVuZGVmaW5lZCkuCiAgICAgKiBAcGFyYW0ge051bWJlcn0gUGFyYW1zLlBvc2l0aW9uVG9wIC0gRGVmaW5lcyB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cgd2luZG93IChkZWZhdWx0OiB1bmRlZmluZWQpLgogICAgICogQHBhcmFtIHtOdW1iZXJ9IFBhcmFtcy5Qb3NpdGlvbkJvdHRvbSAtIERlZmluZXMgdGhlIGJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGlhbG9nIHdpbmRvdyAoZGVmYXVsdDogdW5kZWZpbmVkKS4KICAgICAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gUGFyYW1zLlBvc2l0aW9uTGVmdCAtIERlZmluZXMgdGhlIGxlZnQgcG9zaXRpb24gb2YgdGhlIGRpYWxvZyB3aW5kb3cuICdDZW50ZXInIGNlbnRlcnMgdGhlIHdpbmRvdyAoZGVmYXVsdDogdW5kZWZpbmVkKS4KICAgICAqIEBwYXJhbSB7TnVtYmVyfSBQYXJhbXMuUG9zaXRpb25SaWdodCAtIERlZmluZXMgdGhlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cgd2luZG93IChkZWZhdWx0OiB1bmRlZmluZWQpLgogICAgICogQHBhcmFtIHtCb29sZWFufSBQYXJhbXMuQ2xvc2VPbkNsaWNrT3V0c2lkZSAtIElmIHRydWUsIGNsaWNraW5nIG91dHNpZGUgdGhlIGRpYWxvZyBjbG9zZXMgdGhlIGRpYWxvZyAoZGVmYXVsdDogZmFsc2UpLgogICAgICogQHBhcmFtIHtCb29sZWFufSBQYXJhbXMuQ2xvc2VPbkVzY2FwZSAtIElmIHRydWUsIHByZXNzaW5nIGVzY2FwZSBrZXkgY2xvc2VzIHRoZSBkaWFsb2cgKGRlZmF1bHQ6IGZhbHNlKS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gUGFyYW1zLkFsbG93QXV0b0dyb3cgLSBJZiB0cnVlLCB0aGUgSW5uZXJDb250ZW50IG9mIHRoZSBkaWFsb2cgY2FuIHJlc2l6ZSB1bnRpbCB0aGUgbWF4IHdpbmRvdyBoZWlnaHQgaXMgcmVhY2hlZCwgaWYgZmFsc2UgKGRlZmF1bHQpLCBJbm5lckNvbnRlbnQgb2Ygc21hbGwgZGlhbG9ncyBkb2VzIG5vdCByZXNpemUgb3ZlciAyMDBweC4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gUGFyYW1zLkhpZGVIZWFkZXIgLSBIaWRlIHRoZSBoZWFkZXIgYnkgc2V0dGluZyB0aGlzIHRvIHRydWUKICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gUGFyYW1zLkhpZGVGb290ZXIgLSBIaWRlIHRoZSBmb290ZXIgYnkgc2V0dGluZyB0aGlzIHRvIHRydWUKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBQYXJhbXMuQnV0dG9ucyAtIEFycmF5IG9mIEhhc2hlcyB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoYnV0dG9ucyBhcmUgcGxhY2VkIGluIGEgZGl2ICJmb290ZXIiIG9mIHRoZSBkaWFsb2cpOgogICAgICogQHBhcmFtIHtTdHJpbmd9IFBhcmFtcy5CdXR0b25zLkxhYmVsIC0gVGV4dCBvZiB0aGUgYnV0dG9uLgogICAgICogQHBhcmFtIHtTdHJpbmd9IFBhcmFtcy5CdXR0b25zLlR5cGUgLSAnU3VibWl0J3wnQ2xvc2UnIChkZWZhdWx0OiBub25lKSBTcGVjaWFsIHR5cGUgb2YgdGhlIGJ1dHRvbiAtIGludm9rZXMgYSBzdGFuZGFyZCBmdW5jdGlvbi4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBQYXJhbXMuQnV0dG9ucy5DbGFzcyAtIE9wdGlvbmFsIGNsYXNzIHBhcmFtZXRlcnMgZm9yIHRoZSBidXR0b24gZWxlbWVudC4KICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFBhcmFtcy5CdXR0b25zLkZ1bmN0aW9uIC0gVGhlIGZ1bmN0aW9uIHdoaWNoIGlzIGV4ZWN1dGVkIG9uIGNsaWNrIChvcHRpb25hbCkuCi8vIFJvdGhlciBPU1MgLyBTZXJ2aWNlQ2F0YWxvZwogICAgICogQHBhcmFtIHtCb29sZWFufSBQYXJhbXMuU3RhY2tlZCAtIElmIHRydWUsIHRoZW4gYSBuZXcgZGlhbG9nIGFwcGVhcnMgb24gdG9wIG9mIGV4aXN0aW5nIG9uZXMgKGRlZmF1bHQ6IGZhbHNlKS4KLy8gRU8gU2VydmljZUNhdGFsb2cKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGUgbWFpbiBkaWFsb2cgZnVuY3Rpb24gdXNlZCBmb3IgYWxsIGRpZmZlcmVudCB0eXBlcyBvZiBkaWFsb2dzLgogICAgICovCiAgICBUYXJnZXROUy5TaG93RGlhbG9nID0gZnVuY3Rpb24oUGFyYW1zKSB7CgogICAgICAgIHZhciAkRGlhbG9nLCAkQ29udGVudCwgJEJ1dHRvbkZvb3RlciwgSFRNTEJhY2t1cCwgRGlhbG9nQ29weSwgRGlhbG9nQ29weVNlbGVjdG9yLAogICAgICAgICAgICBEaWFsb2dIVE1MLAogICAgICAgICAgICBGdWxsc2l6ZU1vZGUgPSBmYWxzZSwKICAgICAgICAgICAgQ3VzdG9tZXJJbnRlcmZhY2UgPSBDb3JlLkNvbmZpZy5HZXQoJ1Nlc3Npb25OYW1lJykgPT09IENvcmUuQ29uZmlnLkdldCgnQ3VzdG9tZXJQYW5lbFNlc3Npb25OYW1lJyk7CgovLyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKLy8gICAgICAgICBEaWFsb2dIVE1MID0gJzxkaXYgY2xhc3M9IkRpYWxvZyI+JzsKICAgICAgICBEaWFsb2dIVE1MID0gJzxkaXYgY2xhc3M9IkRpYWxvZyInICsgKFBhcmFtcy5TdGFja2VkID8gJyBkYXRhLXN0YWNrZWQ9InN0YWNrZWQiJyA6ICcnKSArICc+JzsKLy8gRU8gU2VydmljZUNhdGFsb2cKCiAgICAgICAgaWYgKCFQYXJhbXMuSGlkZUhlYWRlcikgewogICAgICAgICAgICB2YXIgQ2xvc2VJY29uID0gQ3VzdG9tZXJJbnRlcmZhY2UgPyAnb29vZm8gb29vZm8tY2xvc2UnIDogJ2ZhIGZhLXRpbWVzJzsKICAgICAgICAgICAgRGlhbG9nSFRNTCArPSAnPGRpdiBjbGFzcz0iSGVhZGVyIj48YSBjbGFzcz0iQ2xvc2UiIHRpdGxlPSInICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0Nsb3NlIHRoaXMgZGlhbG9nJykgKyAnIiBocmVmPSIjIj48aSBjbGFzcz0iJyArIENsb3NlSWNvbiArICciPjwvaT48L2E+PC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgRGlhbG9nSFRNTCArPSAnPGRpdiBjbGFzcz0iQ29udGVudCI+PC9kaXY+JzsKICAgICAgICBpZiAoIVBhcmFtcy5IaWRlRm9vdGVyKSB7CiAgICAgICAgICAgIERpYWxvZ0hUTUwgKz0gJzxkaXYgY2xhc3M9IkZvb3RlciI+PC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgRGlhbG9nSFRNTCArPSAnPC9kaXY+JzsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgKiBAbmFtZSBIYW5kbGVDbG9zaW5nQWN0aW9uCiAgICAgICAgICogQG1lbWJlcm9mIENvcmUuVUkuRGlhbG9nLlNob3dEaWFsb2cKICAgICAgICAgKiBAZnVuY3Rpb24KICAgICAgICAgKiBAZGVzY3JpcHRpb24KICAgICAgICAgKiAgICAgIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgY2xvc2UgaXMgZ2l2ZW4gKHZpYSB0aGUgQnV0dG9uIGRlZmluaXRpb24pLAogICAgICAgICAqICAgICAgdGhlIGRpYWxvZyBpcyBqdXN0IGNsb3NlZC4gT3RoZXJ3aXNlIHRoZSBkZWZpbmVkIENsb3NlIGJ1dHRvbiBpcyB0cmlnZ2VyZWQsCiAgICAgICAgICogICAgICB3aGljaCBpbnZva2VzIHRoZSBjYWxsYmFjayBhbmQgdGhlIGNsb3Npbmcgb2YgdGhlIGRpYWxvZy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBIYW5kbGVDbG9zaW5nQWN0aW9uKCkgewogICAgICAgICAgICB2YXIgJENsb3NlQnV0dG9uID0gJCgnLkRpYWxvZzp2aXNpYmxlIGJ1dHRvbi5DbG9zZScpOwoKICAgICAgICAgICAgLy8gcHVibGlzaCBjbG9zZSBldmVudAogICAgICAgICAgICBDb3JlLkFwcC5QdWJsaXNoKCdFdmVudC5VSS5EaWFsb2cuQ2xvc2VEaWFsb2cuQ2xvc2UnLCBbJERpYWxvZ10pOwoKICAgICAgICAgICAgLy8gSGlkZSBhbnkgcG9zc2libHkgZXhpc3RpbmcgdG9vbHRpcHMuCiAgICAgICAgICAgIGlmIChDb3JlLkZvcm0gJiYgQ29yZS5Gb3JtLkVycm9yVG9vbHRpcHMpIHsKICAgICAgICAgICAgICAgIENvcmUuRm9ybS5FcnJvclRvb2x0aXBzLkhpZGVUb29sdGlwKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkQ2xvc2VCdXR0b24ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkQ2xvc2VCdXR0b24udHJpZ2dlcignY2xpY2snKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIERlZmF1bHRDbG9zZUZ1bmN0aW9uKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICogQG5hbWUgQ2FsY3VsYXRlRGlhbG9nUG9zaXRpb24KICAgICAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5EaWFsb2cuU2hvd0RpYWxvZwogICAgICAgICAqIEBmdW5jdGlvbgogICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlhbG9nLgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gUG9zaXRpb24gLSBUaGUgcG9zaXRpb24gb2YgdGhlIGRpYWxvZy4KICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gVHlwZSAtIENhbiBiZSAndG9wJyBvciAnYm90dG9tJy4KICAgICAgICAgKiBAZGVzY3JpcHRpb24KICAgICAgICAgKiAgICAgIENhbGN1bGF0ZXMgdGhlIGNvcnJlY3QgcG9zaXRpb24gb2YgdGhlIGRpYWxvZywgZ2l2ZW4gYnkgdGhlIFBvc2l0aW9uLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIENhbGN1bGF0ZURpYWxvZ1Bvc2l0aW9uKFBvc2l0aW9uLCBUeXBlKSB7CiAgICAgICAgICAgIHZhciBTY3JvbGxUb3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCksCiAgICAgICAgICAgICAgICBXaW5kb3dIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7CgogICAgICAgICAgICBpZiAoIEN1c3RvbWVySW50ZXJmYWNlICkgewogICAgICAgICAgICAgICAgLy8gZWxlbWVudCBpcyBwb3NpdGlvbmVkICJmaXhlZCIKICAgICAgICAgICAgICAgIFNjcm9sbFRvcCA9IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFR5cGUgPSBUeXBlIHx8ICd0b3AnOwogICAgICAgICAgICAvLyBjb252ZXJ0IFBvc2l0aW9uIHRvIGEgc3RyaW5nIHNvIHRoYXQgbnVtYmVycyBjYW4gYmUgcGFzc2VkIHRvbwogICAgICAgICAgICAvLyAgKGxhdGVyIHN0cmluZyBvcGVyYXRpb25zIGFyZSBleGVjdXRlZCBvbiB0aGF0IG9iamVjdCkKICAgICAgICAgICAgUG9zaXRpb24gPSBQb3NpdGlvbi50b1N0cmluZygpOwoKICAgICAgICAgICAgLy8gcG9zaXRpb24gaXMgaW4gcGVyY2VudAogICAgICAgICAgICBpZiAoUG9zaXRpb24ubWF0Y2goLyUvKSkgewogICAgICAgICAgICAgICAgUG9zaXRpb24gPSBwYXJzZUludChQb3NpdGlvbi5yZXBsYWNlKC8lLywgJycpLCAxMCk7CiAgICAgICAgICAgICAgICBpZiAoVHlwZSA9PT0gJ3RvcCcpIHsKICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiA9IHBhcnNlSW50KFdpbmRvd0hlaWdodCAqIChQb3NpdGlvbiAvIDEwMCksIDEwKSArIFNjcm9sbFRvcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKFR5cGUgPT09ICdib3R0b20nKSB7CiAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gPSBXaW5kb3dIZWlnaHQgKyBTY3JvbGxUb3AgLSBwYXJzZUludChXaW5kb3dIZWlnaHQgKiAoUG9zaXRpb24gLyAxMDApLCAxMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gaGFuZGxlIGFzIHB4CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgUG9zaXRpb24gPSBwYXJzZUludChQb3NpdGlvbi5yZXBsYWNlKC9weC8sICcnKSwgMTApOwogICAgICAgICAgICAgICAgaWYgKFR5cGUgPT09ICd0b3AnKSB7CiAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gPSBQb3NpdGlvbiArIFNjcm9sbFRvcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKFR5cGUgPT09ICdib3R0b20nKSB7CiAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gPSBXaW5kb3dIZWlnaHQgKyBTY3JvbGxUb3AgLSBQb3NpdGlvbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIChQb3NpdGlvbiArICdweCcpOwogICAgICAgIH0KCiAgICAgICAgQ29yZS5BcHAuUHVibGlzaCgnRXZlbnQuVUkuRGlhbG9nLlNob3dEaWFsb2cuQmVmb3JlT3BlbicpOwoKICAgICAgICAvLyBDbG9zZSBhbGwgb3BlbmVkIGRpYWxvZ3MKLy8gUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCi8vICAgICAgICAgaWYgKCQoJy5EaWFsb2c6dmlzaWJsZScpLmxlbmd0aCkgewogICAgICAgIGlmICgkKCcuRGlhbG9nOnZpc2libGUnKS5sZW5ndGggJiYgIVBhcmFtcy5TdGFja2VkKSB7Ci8vIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgICAgIFRhcmdldE5TLkNsb3NlRGlhbG9nKCQoJy5EaWFsb2c6dmlzaWJsZScpKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIERpYWxvZyBpcyBhIG1vZGFsIGRpYWxvZywgaW5pdGlhbGl6ZSBvdmVybGF5CiAgICAgICAgaWYgKFBhcmFtcy5Nb2RhbCkgewogICAgICAgICAgICAkKCc8ZGl2IGlkPSJPdmVybGF5IiB0YWJpbmRleD0iLTEiPicpLmFwcGVuZFRvKCdib2R5Jyk7CiAgICAgICAgICAgICQoJ2JvZHknKS5jc3MoewogICAgICAgICAgICAgICAgJ292ZXJmbG93JzogJ2hpZGRlbicKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vJCgnI092ZXJsYXknKS5oZWlnaHQoJChkb2N1bWVudCkuaGVpZ2h0KCkpLmNzcygndG9wJywgMCk7CgogICAgICAgICAgICAvLyBJZiB0aGUgdW5kZXJseWluZyBwYWdlIGlzIHBlcmhhcHMgdG8gc21hbGwsIHdpZSBleHRlbmQgdGhlIHBhZ2UgdG8gd2luZG93IGhlaWdodCBmb3IgdGhlIGRpYWxvZwogICAgICAgICAgICAkKCdib2R5JykuY3NzKCdtaW4taGVpZ2h0JywgJCh3aW5kb3cpLmhlaWdodCgpKTsKICAgICAgICB9CgogICAgICAgIC8vIEJ1aWxkIERpYWxvZyBIVE1MCiAgICAgICAgJERpYWxvZyA9ICQoRGlhbG9nSFRNTCk7CgogICAgICAgIC8vIEFkZCByZXNwb25zaXZlIGZ1bmN0aW9uYWxpdHkKICAgICAgICBpZiAoQ29yZS5BcHAuUmVzcG9uc2l2ZS5Jc1NtYWxsZXJPckVxdWFsKENvcmUuQXBwLlJlc3BvbnNpdmUuR2V0U2NyZWVuU2l6ZSgpLCAnU2NyZWVuTCcpKSB7CiAgICAgICAgICAgIEZ1bGxzaXplTW9kZSA9IHRydWU7CiAgICAgICAgICAgICREaWFsb2cuYWRkQ2xhc3MoJ0Z1bGxzaXplJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoUGFyYW1zLk1vZGFsKSB7CiAgICAgICAgICAgICREaWFsb2cuYWRkQ2xhc3MoJ01vZGFsJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiBQYXJhbSBIVE1MIGlzIHByb3ZpZGVkLCBnZXQgdGhlIEhUTUwgZGF0YQogICAgICAgIC8vIERhdGEgY2FuIGJlIGEgSFRNTCBzdHJpbmcgb3IgYW4galF1ZXJ5IG9iamVjdCB3aXRoIGNvbnRhaW5pbmcgSFRNTCBkYXRhCiAgICAgICAgaWYgKFBhcmFtcy5IVE1MKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGEgc3RyaW5nLCB0aGlzIGlzIGNyZWF0ZWQgZHluYW1pY2FsbHkgb3Igd2FzIGRlbGl2ZXJlZCB2aWEgQUpBWC4KICAgICAgICAgICAgLy8gQnV0IGlmIHRoZSBkYXRhIGlzIGEgalF1ZXJ5T2JqZWN0LCB0aGF0IG1lYW5zLCB0aGF0IHRoZSBwcmVwYXJlZCBIVE1MIGNvZGUgZm9yIHRoZSBkaWFsb2cKICAgICAgICAgICAgLy8gd2FzIG9yaWdpbmFsbHkgcHV0IGFzIHBhcnQgb2YgdGhlIHR0IGludG8gdGhlIEhUTUwgcGFnZQogICAgICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zIChubyBkb3VibGUgSURzIGV0Yy4pIHdlIGhhdmUgdG8gY3V0IG91dCB0aGUgZGlhbG9nIEhUTUwgYW5kCiAgICAgICAgICAgIC8vIG9ubHkgdXNlIGl0IGZvciB0aGUgZGlhbG9nIGl0c2VsZi4KICAgICAgICAgICAgLy8gQWZ0ZXIgdGhlIGRpYWxvZyBpcyBjbG9zZWQgYWdhaW4gd2UgaGF2ZSB0byByZXZlcnQgdGhpcyBjdXQtb3V0LCBiZWNhdXNlIG90aGVyd2lzZSB3ZQogICAgICAgICAgICAvLyBjb3VsZCBub3Qgb3BlbiB0aGUgZGlhbG9nIGFnYWluIChiZWNhdXNlIHRoZSBIVE1MIHdvdWxkIGJlIG1pc3NpbmcpLgogICAgICAgICAgICAvLyBCdXQgd2UgY2Fubm90IHVzZSB0aGUgRGlhbG9nIEhUTUwgdG8gcHV0IGl0IGJhY2sgaW4gdGhlIHBhZ2UsIGJlY2F1c2UgdGhpcyBIVE1MIGNvdWxkIGJlIGNoYW5nZWQKICAgICAgICAgICAgLy8gaW4gdGhlIGRpYWxvZy4gU28gd2UgaGF2ZSB0byBzYXZlIHRoZSBkYXRhIHNvbWV3aGVyZSB3aGljaCB3YXMgY3V0IG91dCBhbmQgd3JpdGUgaXQgYmFjayBsYXRlci4KICAgICAgICAgICAgLy8gQmUgY2FyZWZ1bDogVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgZGlhbG9nLCB3ZSBoYXZlIHRvIHNhdmUgdGhlIGRhdGEgZGVwZW5kZW50IG9uIHRoZSBkaWFsb2cKCiAgICAgICAgICAgIC8vIEdldCBIVE1MIHdpdGggSlMgZnVuY3Rpb24gaW5uZXJIVE1MLCBiZWNhdXNlIGpRdWVyeSBodG1sKCkgc3RyaXBzIG91dCB0aGUgc2NyaXB0IGJsb2NrcwogICAgICAgICAgICBpZiAodHlwZW9mIFBhcmFtcy5IVE1MICE9PSAnc3RyaW5nJyAmJiBpc0pRdWVyeU9iamVjdChQYXJhbXMuSFRNTCkpIHsKICAgICAgICAgICAgICAgIC8vIEZpcnN0IGdldCB0aGUgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIChwZXJoYXBzKSBhbHJlYWR5IHNhdmVkCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBkb2VzIG5vdCBleGlzdHMgQ29yZS5EYXRhLkdldCByZXR1cm5zIGFuIGVtcHR5IGhhc2gKICAgICAgICAgICAgICAgIERpYWxvZ0NvcHkgPSBDb3JlLkRhdGEuR2V0KCQoJ2JvZHknKSwgJ0RpYWxvZ0NvcHknKTsKICAgICAgICAgICAgICAgIERpYWxvZ0NvcHlTZWxlY3RvciA9IENvcmUuRGF0YS5HZXQoJCgnYm9keScpLCAnRGlhbG9nQ29weVNlbGVjdG9yJyk7CiAgICAgICAgICAgICAgICBIVE1MQmFja3VwID0gKFBhcmFtcy5IVE1MKVswXS5pbm5lckhUTUw7CiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBIVE1MIGRhdGEgdG8gdGhlIGRhdGEgc3RydWN0dXJlIGFuZCBzYXZlIGl0IHRvIHRoZSBkb2N1bWVudAogICAgICAgICAgICAgICAgRGlhbG9nQ29weVtEaWFsb2dDb3VudGVyXSA9IEhUTUxCYWNrdXA7CiAgICAgICAgICAgICAgICBEaWFsb2dDb3B5U2VsZWN0b3JbRGlhbG9nQ291bnRlcl0gPSBQYXJhbXMuSFRNTDsKICAgICAgICAgICAgICAgIENvcmUuRGF0YS5TZXQoJCgnYm9keScpLCAnRGlhbG9nQ29weScsIERpYWxvZ0NvcHkpOwogICAgICAgICAgICAgICAgQ29yZS5EYXRhLlNldCgkKCdib2R5JyksICdEaWFsb2dTZWxlY3RvcicsIERpYWxvZ0NvcHlTZWxlY3Rvcik7CiAgICAgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHdlIHNhdmUgdGhlIHNlbGVjdG9yIGFzIGRhdGEgb24gdGhlIGRpYWxvZyBpdHNlbGYgZm9yIGxhdGVyIHJlc3RvcmluZwogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcmlnaW5hbCBkaWFsb2cgdGVtcGxhdGUgY29udGVudCBmcm9tIHRoZSBwYWdlCiAgICAgICAgICAgICAgICBQYXJhbXMuSFRNTC5lbXB0eSgpOwogICAgICAgICAgICAgICAgLy8gYW5kIHVzZSB0aGUgdmFyaWFibGUgYXMgc3RyaW5nICghISkgd2l0aCB0aGUgY29udGVudCB3aGljaCB3YXMgY3V0IG91dAogICAgICAgICAgICAgICAgUGFyYW1zLkhUTUwgPSBIVE1MQmFja3VwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBUeXBlICdBbGVydCcKICAgICAgICBpZiAoUGFyYW1zLlR5cGUgPT09ICdBbGVydCcpIHsKICAgICAgICAgICAgJERpYWxvZy5hZGRDbGFzcygnQWxlcnQnKTsKICAgICAgICAgICAgJERpYWxvZy5hdHRyKCJyb2xlIiwgImFsZXJ0ZGlhbG9nIik7CiAgICAgICAgICAgICRDb250ZW50ID0gJERpYWxvZy5maW5kKCcuQ29udGVudCcpLmFwcGVuZCgnPGRpdiBjbGFzcz0iSW5uZXJDb250ZW50Ij48L2Rpdj4nKS5maW5kKCcuSW5uZXJDb250ZW50Jyk7CiAgICAgICAgICAgICRDb250ZW50LmFwcGVuZCgnPGkgY2xhc3M9ImZhIGZhLXdhcm5pbmciPjwvaT4nKTsKICAgICAgICAgICAgaWYgKFBhcmFtcy5IZWFkbGluZSkgewogICAgICAgICAgICAgICAgJENvbnRlbnQuYXBwZW5kKCc8aDI+JyArIFBhcmFtcy5IZWFkbGluZSArICc8L2gyPicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChQYXJhbXMuVGV4dCkgewogICAgICAgICAgICAgICAgJENvbnRlbnQuYXBwZW5kKCc8cD4nICsgUGFyYW1zLlRleHQgKyAnPC9wPicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFBhcmFtcy5CdXR0b25zID0gW3sKICAgICAgICAgICAgICAgIExhYmVsOiAnT0snLAogICAgICAgICAgICAgICAgVHlwZTogJ0Nsb3NlJywKICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiBQYXJhbXMuT25DbG9zZQogICAgICAgICAgICB9XTsKICAgICAgICAgICAgJENvbnRlbnQuYXBwZW5kKCc8ZGl2IGNsYXNzPSJDZW50ZXIgU3BhY2luZyI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJEaWFsb2dCdXR0b24xIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBDbG9zZSBvb29TIj48c3Bhbj4nICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ09LJykgKyAnPC9zcGFuPjwvYnV0dG9uPjwvZGl2PicpOwogICAgICAgIH0KICAgICAgICAvLyBEZWZpbmUgZGlmZmVyZW50IG90aGVyIHR5cGVzIGhlcmUuLi4KICAgICAgICBlbHNlIGlmIChQYXJhbXMuVHlwZSA9PT0gJ1NlYXJjaCcpIHsKICAgICAgICAgICAgJERpYWxvZy5hZGRDbGFzcygnU2VhcmNoJyk7CiAgICAgICAgICAgICREaWFsb2cuYXR0cigicm9sZSIsICJkaWFsb2ciKTsKICAgICAgICAgICAgJENvbnRlbnQgPSAkRGlhbG9nLmZpbmQoJy5Db250ZW50Jyk7CiAgICAgICAgICAgIGlmIChQYXJhbXMuSFRNTCkgewogICAgICAgICAgICAgICAgJENvbnRlbnQuYXBwZW5kKFBhcmFtcy5IVE1MKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBJZiBubyB0eXBlIGlzIGRlZmluZWQsIGRlZmF1bHQgdHlwZSBpcyB1c2VkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREaWFsb2cuYXR0cigicm9sZSIsICJkaWFsb2ciKTsKICAgICAgICAgICAgJENvbnRlbnQgPSAkRGlhbG9nLmZpbmQoJy5Db250ZW50Jyk7CiAgICAgICAgICAgIC8vIGJ1dHRvbnMgYXJlIGRlZmluZWQgb25seSBpbiBkZWZhdWx0IHR5cGUKICAgICAgICAgICAgaWYgKFBhcmFtcy5CdXR0b25zKSB7CiAgICAgICAgICAgICAgICAkQ29udGVudC5hcHBlbmQoJzxkaXYgY2xhc3M9IklubmVyQ29udGVudCI+PC9kaXY+JykuZmluZCgnLklubmVyQ29udGVudCcpLmFwcGVuZChQYXJhbXMuSFRNTCk7CiAgICAgICAgICAgICAgICAkQnV0dG9uRm9vdGVyID0gJCgnPGRpdiBjbGFzcz0iQ29udGVudEZvb3RlciBDZW50ZXIiPjwvZGl2PicpOwogICAgICAgICAgICAgICAgJC5lYWNoKFBhcmFtcy5CdXR0b25zLCBmdW5jdGlvbiAoSW5kZXgsIFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIENsYXNzZXMgPSAnQ2FsbEZvckFjdGlvbic7CiAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlLlR5cGUgPT09ICdDbG9zZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NlcyArPSAnIENsb3NlJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlLkNsYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzZXMgKz0gJyAnICsgVmFsdWUuQ2xhc3M7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRCdXR0b25Gb290ZXIuYXBwZW5kKCc8YnV0dG9uIGlkPSJEaWFsb2dCdXR0b24nICsgKEluZGV4IC0gMCArIDEpICsgJyIgY2xhc3M9IicgKyBDbGFzc2VzICsgJyIgdHlwZT0iYnV0dG9uIj48c3Bhbj4nICsgVmFsdWUuTGFiZWwgKyAnPC9zcGFuPjwvYnV0dG9uPiAnKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgJEJ1dHRvbkZvb3Rlci5hcHBlbmRUbygkQ29udGVudCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoUGFyYW1zLkhUTUwpIHsKICAgICAgICAgICAgICAgICAgICAkQ29udGVudC5hcHBlbmQoUGFyYW1zLkhUTUwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiBUaXRsZSBpcyBkZWZpbmVkLCBhZGQgZGlhbG9nIHRpdGxlCiAgICAgICAgaWYgKFBhcmFtcy5UaXRsZSkgewogICAgICAgICAgICBpZiAoIEN1c3RvbWVySW50ZXJmYWNlICkgewogICAgICAgICAgICAgICAgJERpYWxvZy5jaGlsZHJlbignZGl2LkhlYWRlcicpLmFwcGVuZCgnPGgyPicgKyBQYXJhbXMuVGl0bGUgKyAnPC9oMj4nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICREaWFsb2cuY2hpbGRyZW4oJ2Rpdi5IZWFkZXInKS5hcHBlbmQoJzxoMT4nICsgUGFyYW1zLlRpdGxlICsgJzwvaDE+Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEFkZCBEaWFsb2cgdG8gcGFnZQogICAgICAgICREaWFsb2cuYXBwZW5kVG8oJ2JvZHknKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgIkNvbnRlbnRGb290ZXIiIGlzIHVzZWQgaW4gQ29udGVudAogICAgICAgIGlmICgkRGlhbG9nLmZpbmQoJy5Db250ZW50IC5Db250ZW50Rm9vdGVyJykubGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIGNoYW5nZSBkZWZhdWx0IEZvb3RlcgogICAgICAgICAgICAkRGlhbG9nLmZpbmQoJy5Gb290ZXInKS5hZGRDbGFzcygnQ29udGVudEZvb3RlcicpOwogICAgICAgIH0KCiAgICAgICAgLy8gTm93IGFkZCB0aGUgZGlhbG9nIG51bWJlciB0byB0aGUgZGlhbG9nIGRhdGEgdG8gcmVzdG9yZSB0aGUgSFRNTCBsYXRlcgogICAgICAgIENvcmUuRGF0YS5TZXQoJERpYWxvZywgJ0RpYWxvZ0NvdW50ZXInLCBEaWFsb2dDb3VudGVyKTsKICAgICAgICAvLyBJbmNyZWFzZSB0aGUgZGlhbG9nIG51bWJlciBmb3IgdGhlIG5leHQgcG9zc2libGUgZGlhbG9nCiAgICAgICAgRGlhbG9nQ291bnRlcisrOwoKICAgICAgICAvLyBTZXQgcG9zaXRpb24gZm9yIERpYWxvZwogICAgICAgIGlmIChQYXJhbXMuVHlwZSA9PT0gJ0FsZXJ0JykgewogICAgICAgICAgICBpZiAoIEN1c3RvbWVySW50ZXJmYWNlICkgewogICAgICAgICAgICAgICAgJERpYWxvZy5jc3MoewogICAgICAgICAgICAgICAgICAgIHRvcDogJCh3aW5kb3cpLmhlaWdodCgpICogMC4yLAogICAgICAgICAgICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQoKCQod2luZG93KS53aWR0aCgpIC0gJERpYWxvZy53aWR0aCgpKSAvIDIpCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICREaWFsb2cuY3NzKHsKICAgICAgICAgICAgICAgICAgICB0b3A6ICQod2luZG93KS5zY3JvbGxUb3AoKSArICgkKHdpbmRvdykuaGVpZ2h0KCkgKiAwLjMpLAogICAgICAgICAgICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQoKCQod2luZG93KS53aWR0aCgpIC0gJERpYWxvZy53aWR0aCgpKSAvIDIpCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHR5cGVvZiBQYXJhbXMuUG9zaXRpb25Ub3AgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICREaWFsb2cuY3NzKCd0b3AnLCBDYWxjdWxhdGVEaWFsb2dQb3NpdGlvbihQYXJhbXMuUG9zaXRpb25Ub3AsICd0b3AnKSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgUGFyYW1zLlBvc2l0aW9uTGVmdCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgaWYgKFBhcmFtcy5Qb3NpdGlvbkxlZnQgPT09ICdDZW50ZXInKSB7CiAgICAgICAgICAgICAgICAkRGlhbG9nLmNzcygnbGVmdCcsIE1hdGgucm91bmQoKCQod2luZG93KS53aWR0aCgpIC0gJERpYWxvZy53aWR0aCgpKSAvIDIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICREaWFsb2cuY3NzKCdsZWZ0JywgUGFyYW1zLlBvc2l0aW9uTGVmdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBQYXJhbXMuUG9zaXRpb25Cb3R0b20gIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICREaWFsb2cuY3NzKCdib3R0b20nLCBDYWxjdWxhdGVEaWFsb2dQb3NpdGlvbihQYXJhbXMuUG9zaXRpb25Cb3R0b20sICdib3R0b20nKSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgUGFyYW1zLlBvc2l0aW9uUmlnaHQgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICREaWFsb2cuY3NzKCdyaWdodCcsIFBhcmFtcy5Qb3NpdGlvblJpZ2h0KTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIHdpbmRvdyBoZWlnaHQgYW5kIGFkanVzdCB0aGUgc2Nyb2xsYWJsZSBoZWlnaHQgb2YgSW5uZXJDb250ZW50CiAgICAgICAgQWRqdXN0U2Nyb2xsYWJsZUhlaWdodChQYXJhbXMuQWxsb3dBdXRvR3Jvdyk7CgogICAgICAgIC8vIEFkanVzdCBkaWFsb2cgcG9zaXRpb24gb24gbW9iaWxlIGRldmljZXMKICAgICAgICBpZiAoIEZ1bGxzaXplTW9kZSAmJiAhQ3VzdG9tZXJJbnRlcmZhY2UgKSB7CiAgICAgICAgICAgICREaWFsb2cuY3NzKCd0b3AnLCAkKHdpbmRvdykuc2Nyb2xsVG9wKCkpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIGV2ZW50LWhhbmRsaW5nLCBub3QgYWxsb3dlZCBvbiBtb2JpbGUgZGV2aWNlcwogICAgICAgIGlmICggIUZ1bGxzaXplTW9kZSAmJiAhQ3VzdG9tZXJJbnRlcmZhY2UgKSB7CiAgICAgICAgICAgICREaWFsb2cuZHJhZ2dhYmxlKHsKICAgICAgICAgICAgICAgIGNvbnRhaW5tZW50OiAnYm9keScsCiAgICAgICAgICAgICAgICBoYW5kbGU6ICcuSGVhZGVyJywKICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFB1YlN1YiBldmVudCBmb3IgZHJhZ3N0YXJ0CiAgICAgICAgICAgICAgICAgICAgLy8gKHRvIGhhbmRsZSBtb3JlIGRlcGVuZGVuY2llcyBpbiB0aGVpciBvd24gbmFtZXNwYWNlcykKICAgICAgICAgICAgICAgICAgICBDb3JlLkFwcC5QdWJsaXNoKCdFdmVudC5VSS5EaWFsb2cuU2hvd0RpYWxvZy5EcmFnU3RhcnQnLCAkRGlhbG9nKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSBhbnkgcG9zc2libHkgZXhpc3RpbmcgdG9vbHRpcHMgYXMgdGhleSB3aWxsIG5vdCBiZSBtb3ZlZAogICAgICAgICAgICAgICAgICAgIC8vICB3aXRoIHRoaXMgZGlhbG9nLgogICAgICAgICAgICAgICAgICAgIGlmIChDb3JlLkZvcm0gJiYgQ29yZS5Gb3JtLkVycm9yVG9vbHRpcHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29yZS5Gb3JtLkVycm9yVG9vbHRpcHMuSGlkZVRvb2x0aXAoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgQ29yZS5BcHAuUHVibGlzaCgnRXZlbnQuVUkuRGlhbG9nLlNob3dEaWFsb2cuRHJhZ1N0b3AnLCAkRGlhbG9nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgYnV0dG9uIGV2ZW50cwogICAgICAgIGlmIChQYXJhbXMuQnV0dG9ucykgewogICAgICAgICAgICAkLmVhY2goUGFyYW1zLkJ1dHRvbnMsIGZ1bmN0aW9uIChJbmRleCwgVmFsdWUpIHsKICAgICAgICAgICAgICAgICQoJyNEaWFsb2dCdXR0b24nICsgKEluZGV4IC0gMCArIDEpKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlLlR5cGUgPT09ICdTdWJtaXQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24oVmFsdWUuRnVuY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmFsdWUuRnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRTdWJtaXRGdW5jdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFN1Ym1pdEZ1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoVmFsdWUuVHlwZSA9PT0gJ0Nsb3NlJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKFZhbHVlLkZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlLkZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0Q2xvc2VGdW5jdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdENsb3NlRnVuY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihWYWx1ZS5GdW5jdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLkZ1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgZXZlbnQtaGFuZGxpbmcgZm9yIENsb3NlLUJ1dHRvbnMgYW5kIC1MaW5rcwogICAgICAgICREaWFsb2cuZmluZCgnLkhlYWRlciBhLkNsb3NlJykuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICBIYW5kbGVDbG9zaW5nQWN0aW9uKCk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gQWRkIENsb3NlT25DbGlja091dHNpZGUgZnVuY3Rpb25hbGl0eQogICAgICAgIGlmIChQYXJhbXMuQ2xvc2VPbkNsaWNrT3V0c2lkZSkgewogICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ2NsaWNrLkRpYWxvZycpLm9uKCdjbGljay5EaWFsb2cnLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgICAgIC8vIElmIHRhcmdldCBlbGVtZW50IGlzIHJlbW92ZWQgYmVmb3JlIHRoaXMgZXZlbnQgdHJpZ2dlcnMsIHRoZSBlbmNsb3NpbmcgZGl2LkRpYWxvZyBjYW4ndCBiZSBmb3VuZCBhbnltb3JlCiAgICAgICAgICAgICAgICAvLyBXZSBjaGVjaywgaWYgd2UgY2FuIGZpbmQgYSBwYXJlbnQgSFRNTCBlbGVtZW50IHRvIGJlIHN1cmUsIHRoYXQgdGhlIGVsZW1lbnQgaXMgbm90IHJlbW92ZWQKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkKGV2ZW50LnRhcmdldCkucGFyZW50cygnaHRtbCcpLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICYmICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdkaXYuRGlhbG9nJykubGVuZ3RoID09PSAwCgogICAgICAgICAgICAgICAgICAgIC8vIENhc2UgYXV0b2NvbXBsZXRlIGRyb3Bkb3duIGluIG1vZGFsIGRpYWxvZ3MKICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBjdXJyZW50bHkgb25seSBvY2N1cnMgd2hlbiB1c2luZyBkeW5hbWljIGZpZWxkIHJlZmVyZW5jZSBzZWFyY2ggZmllbGRzIGluIHRpY2tldCBzZWFyY2ggb3IgY29uZmlnIGl0ZW0gc2VhcmNoCiAgICAgICAgICAgICAgICAgICAgJiYgISQoZXZlbnQudGFyZ2V0KS5oYXNDbGFzcygndWktbWVudS1pdGVtLXdyYXBwZXInKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ2xvc2luZ0FjdGlvbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCByZXNpemUgZXZlbnQgaGFuZGxlciBmb3IgY2FsY3VsYXRpbmcgdGhlIHNjcm9sbCBoZWlnaHQKICAgICAgICAkKHdpbmRvdykub2ZmKCdyZXNpemUuRGlhbG9nJykub24oJ3Jlc2l6ZS5EaWFsb2cnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEFkanVzdFNjcm9sbGFibGVIZWlnaHQoUGFyYW1zLkFsbG93QXV0b0dyb3cpOwogICAgICAgIH0pOwoKICAgICAgICBDb3JlLkFwcC5TdWJzY3JpYmUoJ0V2ZW50LkFwcC5SZXNwb25zaXZlLlNtYWxsZXJPckVxdWFsU2NyZWVuTCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLy8gRGlhbG9nIHNob3VsZCBiZSBmdWxsc2l6ZSwgaWYgb24gc21hbGxlciBzY3JlZW5zCiAgICAgICAgICAgICREaWFsb2cuYWRkQ2xhc3MoJ0Z1bGxzaXplJyk7CiAgICAgICAgfSk7CgogICAgICAgIENvcmUuQXBwLlN1YnNjcmliZSgnRXZlbnQuQXBwLlJlc3BvbnNpdmUuU2NyZWVuWEwnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICREaWFsb2cucmVtb3ZlQ2xhc3MoJ0Z1bGxzaXplJyk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEluaXQgS2V5RXZlbnQtTG9nZ2VyCiAgICAgICAgSW5pdEtleUV2ZW50KFBhcmFtcy5DbG9zZU9uRXNjYXBlKTsKCiAgICAgICAgQ29yZS5VSS5JbnB1dEZpZWxkcy5BY3RpdmF0ZSgkRGlhbG9nKTsKCiAgICAgICAgLy8gRm9jdXMgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQKICAgICAgICBGb2N1c0ZpcnN0RWxlbWVudCgpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFNob3dDb250ZW50RGlhbG9nCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5EaWFsb2cKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IEhUTUwgLSBUaGUgY29udGVudCBIVE1MIHdoaWNoIHNob3VsZCBiZSBzaG93bi4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBUaXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLgogICAgICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBQb3NpdGlvblRvcCAtIFRoZSB0b3AgcG9zaXRpb24gdGhlIGRpYWxvZyBpcyBwb3NpdGlvbmVkIGluaXRpYWxseS4KICAgICAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gUG9zaXRpb25MZWZ0IC0gVGhlIGxlZnQgcG9zaXRpb24gdGhlIGRpYWxvZyBpcyBwb3NpdGlvbmVkIGluaXRpYWxseS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gTW9kYWwgLSBJZiBkZWZpbmVkIGFuZCBzZXQgdG8gdHJ1ZSwgYW4gb3ZlcmxheSBpcyBzaG93biBmb3IgYSBtb2RhbCBkaWFsb2cuCiAgICAgKiBAcGFyYW0ge0FycmF5fSBCdXR0b25zIC0gVGhlIGJ1dHRvbiBhcnJheS4KICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gQWxsb3dBdXRvR3JvdyAtIElmIHRydWUsIHRoZSBJbm5lckNvbnRlbnQgb2YgdGhlIGRpYWxvZyBjYW4gcmVzaXplIHVudGlsIHRoZSBtYXggd2luZG93IGhlaWdodCBpcyByZWFjaGVkLCBpZiBmYWxzZSAoZGVmYXVsdCksIElubmVyQ29udGVudCBvZiBzbWFsbCBkaWFsb2dzIGRvZXMgbm90IHJlc2l6ZSBvdmVyIDIwMHB4LgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFNob3dzIGEgZGVmYXVsdCBkaWFsb2cuCiAgICAgKi8KICAgIFRhcmdldE5TLlNob3dDb250ZW50RGlhbG9nID0gZnVuY3Rpb24gKEhUTUwsIFRpdGxlLCBQb3NpdGlvblRvcCwgUG9zaXRpb25MZWZ0LCBNb2RhbCwgQnV0dG9ucywgQWxsb3dBdXRvR3JvdykgewogICAgICAgIFRhcmdldE5TLlNob3dEaWFsb2coewogICAgICAgICAgICBIVE1MOiBIVE1MLAogICAgICAgICAgICBUaXRsZTogVGl0bGUsCiAgICAgICAgICAgIE1vZGFsOiBNb2RhbCwKICAgICAgICAgICAgQ2xvc2VPbkNsaWNrT3V0c2lkZTogdHJ1ZSwKICAgICAgICAgICAgQ2xvc2VPbkVzY2FwZTogdHJ1ZSwKICAgICAgICAgICAgUG9zaXRpb25Ub3A6IFBvc2l0aW9uVG9wLAogICAgICAgICAgICBQb3NpdGlvbkxlZnQ6IFBvc2l0aW9uTGVmdCwKICAgICAgICAgICAgQnV0dG9uczogQnV0dG9ucywKICAgICAgICAgICAgQWxsb3dBdXRvR3JvdzogQWxsb3dBdXRvR3JvdwogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFNob3dXYWl0aW5nRGlhbG9nCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5EaWFsb2cKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IFRpdGxlIC0gVGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gVGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBkaWFsb2cuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU2hvd3MgYSB3YWl0aW5nIGRpYWxvZyAod2l0aCBzcGlubmVyIGljb24pIGFuZCBjdXN0b21pemFibGUgdGl0bGUgYW5kIHRleHQKICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd1dhaXRpbmdEaWFsb2cgPSBmdW5jdGlvbiAoVGl0bGUsIFRleHQpIHsKCiAgICAgICAgdmFyIERpYWxvZ1RlbXBsYXRlID0gQ29yZS5UZW1wbGF0ZS5SZW5kZXIoJ0RpYWxvZy9XYWl0aW5nJywgewogICAgICAgICAgICBUZXh0OiBUZXh0CiAgICAgICAgfSk7CgogICAgICAgIFRhcmdldE5TLlNob3dEaWFsb2coewogICAgICAgICAgICBIVE1MOiBEaWFsb2dUZW1wbGF0ZSwKICAgICAgICAgICAgVGl0bGU6IFRpdGxlLAogICAgICAgICAgICBNb2RhbDogdHJ1ZSwKICAgICAgICAgICAgQ2xvc2VPbkNsaWNrT3V0c2lkZTogZmFsc2UsCiAgICAgICAgICAgIENsb3NlT25Fc2NhcGU6IGZhbHNlLAogICAgICAgICAgICBQb3NpdGlvblRvcDogJzIwJScsCiAgICAgICAgICAgIFBvc2l0aW9uTGVmdDogJ0NlbnRlcicsCiAgICAgICAgICAgIEFsbG93QXV0b0dyb3c6IHRydWUsCiAgICAgICAgICAgIEhpZGVIZWFkZXI6IHRydWUsCiAgICAgICAgICAgIEhpZGVGb290ZXI6IHRydWUKICAgICAgICB9KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBNYWtlRGlhbG9nV2FpdAogICAgICogQG1lbWJlcm9mIENvcmUuVUkuRGlhbG9nCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBTaG93cyBhIHNwaW5uZXIgb3ZlcmxheSBvbiB0aGUgY3VycmVudGx5IHZpc2libGUgbW9kYWwgZGlhbG9nLiBJcyBtZWFudCBmb3Igc2hvd2luZyB0aGUgdXNlciB0aGF0IHNvbWV0aGluZyBpcyBhYm91dAogICAgICogICAgICB0byBoYXBwZW4sIGUuZy4gaWYgY2hhbmdpbmcgYSBmaWVsZCB3aXRoaW4gYSBkaWFsb2cgY2F1c2VzIGEgcGFnZSByZWxvYWQuCiAgICAgKi8KICAgIFRhcmdldE5TLk1ha2VEaWFsb2dXYWl0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICQoJy5EaWFsb2c6dmlzaWJsZSAuSW5uZXJDb250ZW50JykucHJlcGVuZCgnPGRpdiBjbGFzcz0iV2FpdGluZyI+PGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEtc3BpbiI+PC9pPjwvZGl2PicpLmZpbmQoJy5XYWl0aW5nJykuZmFkZUluKCk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgU2hvd0FsZXJ0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5EaWFsb2cKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IEhlYWRsaW5lIC0gVGhlIGJvbGQgaGVhZGxpbmUgdGV4dC4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBUZXh0IC0gVGhlIGRlc2NyaXB0aW9uLgogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gQ2xvc2VGdW5jdGlvbiAtIFRoZSBzcGVjaWFsIGZ1bmN0aW9uIHdoaWNoIGlzIHN0YXJ0ZWQgb24gY2xvc2luZyB0aGUgZGlhbG9nCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbmFsLCBpZiB1c2VkIGFsc28gdGhlIHJlbW92aW5nIG9mIHRoZSBkaWFsb2cgaXRzZWxmIG11c3QgYmUgaGFuZGxlZCkuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU2hvd3MgYW4gYWxlcnQgZGlhbG9nLgogICAgICovCiAgICBUYXJnZXROUy5TaG93QWxlcnQgPSBmdW5jdGlvbiAoSGVhZGxpbmUsIFRleHQsIENsb3NlRnVuY3Rpb24pIHsKICAgICAgICBUYXJnZXROUy5TaG93RGlhbG9nKHsKICAgICAgICAgICAgVHlwZTogJ0FsZXJ0JywKICAgICAgICAgICAgTW9kYWw6IHRydWUsCiAgICAgICAgICAgIFRpdGxlOiBIZWFkbGluZSwKICAgICAgICAgICAgVGV4dDogVGV4dCwKICAgICAgICAgICAgT25DbG9zZTogQ2xvc2VGdW5jdGlvbgogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIENsb3NlRGlhbG9nCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5EaWFsb2cKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9IE9iamVjdCAtIFRoZSBqUXVlcnkgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgZGlhbG9nIG9yIGFueSBjaGlsZCBlbGVtZW50IG9mIGl0LCB3aGljaCBzaG91bGQgYmUgY2xvc2VkLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIENsb3NlcyBhbGwgZGlhbG9ncyBzcGVjaWZpZWQuCiAgICAgKi8KICAgIFRhcmdldE5TLkNsb3NlRGlhbG9nID0gZnVuY3Rpb24gKE9iamVjdCkgewogICAgICAgIHZhciAkRGlhbG9nLCAkRGlhbG9nU2VsZWN0b3IsIERpYWxvZ0NvcHksIERpYWxvZ1NlbGVjdG9yRGF0YSwgSW50ZXJuYWxEaWFsb2dDb3VudGVyLCBCYWNrdXBIVE1MOwogICAgICAgICREaWFsb2cgPSAkKE9iamVjdCkuY2xvc2VzdCgnLkRpYWxvZzp2aXNpYmxlJyk7CgogICAgICAgIC8vIEdldCB0aGUgb3JpZ2luYWwgZGlhbG9nIG51bWJlciBmb3IgdGhlIGNvbnRlbnQgdGVtcGxhdGUKICAgICAgICBJbnRlcm5hbERpYWxvZ0NvdW50ZXIgPSBDb3JlLkRhdGEuR2V0KCREaWFsb2csICdEaWFsb2dDb3VudGVyJyk7CgogICAgICAgIC8vIHB1Ymxpc2ggY2xvc2UgZXZlbnQKICAgICAgICBDb3JlLkFwcC5QdWJsaXNoKCdFdmVudC5VSS5EaWFsb2cuQ2xvc2VEaWFsb2cuQ2xvc2UnLCBbJERpYWxvZ10pOwoKLy8gUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCi8vICAgICAgICAgJERpYWxvZy5yZW1vdmUoKTsKLy8gICAgICAgICAkKCcjT3ZlcmxheScpLnJlbW92ZSgpOwovLyAgICAgICAgICQoJ2JvZHknKS5jc3MoewovLyAgICAgICAgICAgICAnb3ZlcmZsb3cnOiAnYXV0bycKLy8gICAgICAgICB9KTsKLy8gICAgICAgICAkKGRvY3VtZW50KS51bmJpbmQoJ2tleWRvd24uRGlhbG9nJykudW5iaW5kKCdrZXlwcmVzcy5EaWFsb2cnKS51bmJpbmQoJ2NsaWNrLkRpYWxvZycpOwovLyAgICAgICAgICQod2luZG93KS51bmJpbmQoJ3Jlc2l6ZS5EaWFsb2cnKTsKLy8gICAgICAgICAkKCdib2R5JykuY3NzKCdtaW4taGVpZ2h0JywgJ2F1dG8nKTsKLy8KLy8gICAgICAgICAvLyBSZXZlcnQgb3JpZ25hbCBodG1sCi8vICAgICAgICAgaWYgKEludGVybmFsRGlhbG9nQ291bnRlcikgewovLyAgICAgICAgICAgICBEaWFsb2dDb3B5ID0gQ29yZS5EYXRhLkdldCgkKCdib2R5JyksICdEaWFsb2dDb3B5Jyk7Ci8vICAgICAgICAgICAgIERpYWxvZ1NlbGVjdG9yRGF0YSA9IENvcmUuRGF0YS5HZXQoJCgnYm9keScpLCAnRGlhbG9nU2VsZWN0b3InKTsKLy8gICAgICAgICAgICAgLy8gR2V0IHNhdmVkIEhUTUwKLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiBEaWFsb2dDb3B5ICE9PSAndW5kZWZpbmVkJykgewovLyAgICAgICAgICAgICAgICAgQmFja3VwSFRNTCA9IERpYWxvZ0NvcHlbSW50ZXJuYWxEaWFsb2dDb3VudGVyXTsKLy8gICAgICAgICAgICAgICAgICREaWFsb2dTZWxlY3RvciA9IERpYWxvZ1NlbGVjdG9yRGF0YVtJbnRlcm5hbERpYWxvZ0NvdW50ZXJdOwovLwovLyAgICAgICAgICAgICAgICAgLy8gSWYgSFRNTCBjb3VsZCBiZSByZXN0b3JlZCwgd3JpdGUgaXQgYmFjayBpbnRvIHRoZSBwYWdlCi8vICAgICAgICAgICAgICAgICBpZiAoQmFja3VwSFRNTCAmJiBCYWNrdXBIVE1MLmxlbmd0aCkgewovLyAgICAgICAgICAgICAgICAgICAgICREaWFsb2dTZWxlY3Rvci5hcHBlbmQoQmFja3VwSFRNTCk7Ci8vICAgICAgICAgICAgICAgICB9Ci8vCi8vICAgICAgICAgICAgICAgICAvLyBkZWxldGUgdGhpcyB2YXJpYWJsZSBmcm9tIHRoZSBvYmplY3QKLy8gICAgICAgICAgICAgICAgIGRlbGV0ZSBEaWFsb2dDb3B5W0ludGVybmFsRGlhbG9nQ291bnRlcl07Ci8vICAgICAgICAgICAgICAgICBkZWxldGUgRGlhbG9nU2VsZWN0b3JEYXRhW0ludGVybmFsRGlhbG9nQ291bnRlcl07Ci8vICAgICAgICAgICAgIH0KLy8KLy8gICAgICAgICAgICAgLy8gd3JpdGUgdGhlIG5ldyBEaWFsb2dDb3B5IGJhY2sKLy8gICAgICAgICAgICAgQ29yZS5EYXRhLlNldCgkKCdib2R5JyksICdEaWFsb2dDb3B5JywgRGlhbG9nQ29weSk7Ci8vICAgICAgICAgfQogICAgICAgIGlmICgkRGlhbG9nLmxlbmd0aCA+IDEgJiYgJERpYWxvZ1skRGlhbG9nLmxlbmd0aCAtIDFdLmRhdGFzZXQuc3RhY2tlZCkgewogICAgICAgICAgICAkKCREaWFsb2dbJERpYWxvZy5sZW5ndGggLSAxXSkucmVtb3ZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJERpYWxvZy5yZW1vdmUoKTsKICAgICAgICAgICAgJCgnI092ZXJsYXknKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgnYm9keScpLmNzcyh7CiAgICAgICAgICAgICAgICAnb3ZlcmZsb3cnOiAnYXV0bycKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICQoZG9jdW1lbnQpLnVuYmluZCgna2V5ZG93bi5EaWFsb2cnKS51bmJpbmQoJ2tleXByZXNzLkRpYWxvZycpLnVuYmluZCgnY2xpY2suRGlhbG9nJyk7CiAgICAgICAgICAgICQod2luZG93KS51bmJpbmQoJ3Jlc2l6ZS5EaWFsb2cnKTsKICAgICAgICAgICAgJCgnYm9keScpLmNzcygnbWluLWhlaWdodCcsICdhdXRvJyk7CgogICAgICAgICAgICAvLyBSZXZlcnQgb3JpZ25hbCBodG1sCiAgICAgICAgICAgIGlmIChJbnRlcm5hbERpYWxvZ0NvdW50ZXIpIHsKICAgICAgICAgICAgICAgIERpYWxvZ0NvcHkgPSBDb3JlLkRhdGEuR2V0KCQoJ2JvZHknKSwgJ0RpYWxvZ0NvcHknKTsKICAgICAgICAgICAgICAgIERpYWxvZ1NlbGVjdG9yRGF0YSA9IENvcmUuRGF0YS5HZXQoJCgnYm9keScpLCAnRGlhbG9nU2VsZWN0b3InKTsKICAgICAgICAgICAgICAgIC8vIEdldCBzYXZlZCBIVE1MCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIERpYWxvZ0NvcHkgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgQmFja3VwSFRNTCA9IERpYWxvZ0NvcHlbSW50ZXJuYWxEaWFsb2dDb3VudGVyXTsKICAgICAgICAgICAgICAgICAgICAkRGlhbG9nU2VsZWN0b3IgPSBEaWFsb2dTZWxlY3RvckRhdGFbSW50ZXJuYWxEaWFsb2dDb3VudGVyXTsKCiAgICAgICAgICAgICAgICAgICAgLy8gSWYgSFRNTCBjb3VsZCBiZSByZXN0b3JlZCwgd3JpdGUgaXQgYmFjayBpbnRvIHRoZSBwYWdlCiAgICAgICAgICAgICAgICAgICAgaWYgKEJhY2t1cEhUTUwgJiYgQmFja3VwSFRNTC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERpYWxvZ1NlbGVjdG9yLmFwcGVuZChCYWNrdXBIVE1MKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGlzIHZhcmlhYmxlIGZyb20gdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBEaWFsb2dDb3B5W0ludGVybmFsRGlhbG9nQ291bnRlcl07CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIERpYWxvZ1NlbGVjdG9yRGF0YVtJbnRlcm5hbERpYWxvZ0NvdW50ZXJdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIHdyaXRlIHRoZSBuZXcgRGlhbG9nQ29weSBiYWNrCiAgICAgICAgICAgICAgICBDb3JlLkRhdGEuU2V0KCQoJ2JvZHknKSwgJ0RpYWxvZ0NvcHknLCBEaWFsb2dDb3B5KTsKICAgICAgICAgICAgfQogICAgICAgIH0KLy8gRU8gU2VydmljZUNhdGFsb2cKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KENvcmUuVUkuRGlhbG9nIHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.ITSMServiceZoom.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5UaWNrZXRab29tCiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBhdXRob3IKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgVGlja2V0Wm9vbS4KICovCkNvcmUuQWdlbnQuSVRTTVNlcnZpY2Vab29tID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgICBUYXJnZXROUy5SZXNpemVJZnJhbWUgPSBmdW5jdGlvbihJZnJhbWUpIHsKICAgICAgICBJZnJhbWUgPSBpc0pRdWVyeU9iamVjdChJZnJhbWUpID8gSWZyYW1lLmdldCgwKSA6IElmcmFtZTsKCiAgICAgICAgdmFyICRJZnJhbWVDb250ZW50ID0gJChJZnJhbWUuY29udGVudERvY3VtZW50IHx8IElmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50KSwKICAgICAgICAgICAgTmV3SGVpZ2h0ID0gJElmcmFtZUNvbnRlbnQuaGVpZ2h0KCk7CiAgICAgICAgaWYgKCFOZXdIZWlnaHQgfHwgaXNOYU4oTmV3SGVpZ2h0KSkgewogICAgICAgICAgICBOZXdIZWlnaHQgPSAxMDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoTmV3SGVpZ2h0ID4gNjAwKSB7CiAgICAgICAgICAgICAgICBOZXdIZWlnaHQgPSA2MDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIE5ld0hlaWdodCA9IHBhcnNlSW50KE5ld0hlaWdodCwgMTApOwogICAgICAgICQoSWZyYW1lKS5oZWlnaHQoTmV3SGVpZ2h0ICsgJ3B4Jyk7CiAgICB9CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLkFnZW50LklUU01TZXJ2aWNlWm9vbSB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.Admin.Service.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vICRvcmlnaW46IG90b2JvIC0gNmVmZGM3YmYyYTMzMjUyNzdjZDc5YTYwZjBmMjQwN2Y4YWQ1OWU4NyAtIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlLmpzCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwpDb3JlLkFnZW50LkFkbWluID0gQ29yZS5BZ2VudC5BZG1pbiB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuQWdlbnQuQWRtaW4uU2VydmljZQogKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5BZG1pbgogKiBAYXV0aG9yCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIGZ1bmN0aW9uIGZvciBBZG1pblNlcnZpY2UgbW9kdWxlLgogKi8KIENvcmUuQWdlbnQuQWRtaW4uU2VydmljZSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKgogICAgKiBAbmFtZSBJbml0CiAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LkFkbWluLlNlcnZpY2UKICAgICogQGZ1bmN0aW9uCiAgICAqIEBkZXNjcmlwdGlvbgogICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGFibGUgZmlsdGVyLgogICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgQ29yZS5VSS5UYWJsZS5Jbml0VGFibGVGaWx0ZXIoJCgnI0ZpbHRlclNlcnZpY2VzJyksICQoJyNTZXJ2aWNlcycpKTsKCiAgICAgICAgLy8gaW5pdCBjaGVja2JveCB0byBpbmNsdWRlIGludmFsaWQgZWxlbWVudHMKICAgICAgICAkKCdpbnB1dCNJbmNsdWRlSW52YWxpZCcpLm9mZignY2hhbmdlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFVSTCA9IENvcmUuQ29uZmlnLkdldCgiQmFzZWxpbmsiKSArICdBY3Rpb249JyArIENvcmUuQ29uZmlnLkdldCgiQWN0aW9uIikgKyAnO0luY2x1ZGVJbnZhbGlkPScgKyAoICQodGhpcykuaXMoJzpjaGVja2VkJykgPyAxIDogMCApOwogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFVSTDsKICAgICAgICB9KTsKCi8vIFNlcnZpY2UgQ2F0YWxvZwogICAgICAgIC8vIGJpbmQgY2xpY2sgZnVuY3Rpb24gdG8gYWRkIGJ1dHRvbgogICAgICAgICQoJy5MYW5ndWFnZUFkZCcpLm9mZignY2hhbmdlLlNlcnZpY2UnKS5vbignY2hhbmdlLlNlcnZpY2UnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIFRhcmdldE5TLkFkZExhbmd1YWdlKCQodGhpcykudmFsKCksICQoJy5MYW5ndWFnZUFkZCBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCkpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgICAgIC8vIGJpbmQgY2xpY2sgZnVuY3Rpb24gdG8gcmVtb3ZlIGJ1dHRvbgogICAgICAgICQoJy5MYW5ndWFnZVJlbW92ZScpLm9mZignY2xpY2suU2VydmljZScpLm9uKCdjbGljay5TZXJ2aWNlJywgZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgc2VydmljZSBkZXNjcmlwdGlvbiBsYW5ndWFnZT8nKSkpIHsKICAgICAgICAgICAgICAgIFRhcmdldE5TLlJlbW92ZUxhbmd1YWdlKCQodGhpcykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKLy8gRU8gU2VydmljZSBDYXRhbG9nCiAgICB9OwoKCi8vIFNlcnZpY2UgQ2F0YWxvZwogICAvKioKICAgICAqIEBuYW1lIEFkZExhbmd1YWdlCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBMYW5ndWFnZUlEIC0gc2hvcnQgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgbGlrZSBlc19NWC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBMYW5ndWFnZSAtIGZ1bGwgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgbGlrZSBTcGFuaXNoIChNZXhpY28pLgogICAgICogQHJldHVybnMge0Jvb2x9IFJldHVybnMgZmFsc2UgdG8gcHJldmVudCBldmVudCBidWJibGluZy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGFkZCBhIG5ldyBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlLgogICAgICovCiAgIFRhcmdldE5TLkFkZExhbmd1YWdlID0gZnVuY3Rpb24oTGFuZ3VhZ2VJRCwgTGFuZ3VhZ2UpewoKICAgICAgICB2YXIgJENsb25lID0gJCgnLlRlbXBsYXRlJykuY2xvbmUoKTsKCiAgICAgICAgaWYgKExhbmd1YWdlID09PSAnLScpewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyByZW1vdmUgdW5uZWNlc3NhcnkgY2xhc3NlcwogICAgICAgICRDbG9uZS5yZW1vdmVDbGFzcygnSGlkZGVuIFRlbXBsYXRlJyk7CgogICAgICAgIC8vIGFkZCB0aXRsZQogICAgICAgICRDbG9uZS5maW5kKCcuVGl0bGUnKS5odG1sKExhbmd1YWdlKTsKCiAgICAgICAgLy8gdXBkYXRlIHJlbW92ZSBsaW5rCiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9MYW5ndWFnZV9SZW1vdmUnKS5hdHRyKCduYW1lJywgTGFuZ3VhZ2VJRCArICdfTGFuZ3VhZ2VfUmVtb3ZlJyk7CiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9MYW5ndWFnZV9SZW1vdmUnKS5hdHRyKCdpZCcsIExhbmd1YWdlSUQgKyAnX0xhbmd1YWdlX1JlbW92ZScpOwoKICAgICAgICAvLyBzZXQgaGlkZGVuIGxhbmd1YWdlIGZpZWxkCiAgICAgICAgJENsb25lLmZpbmQoJy5MYW5ndWFnZUlEJykuYXR0cignbmFtZScsICdMYW5ndWFnZUlEJyk7CiAgICAgICAgJENsb25lLmZpbmQoJy5MYW5ndWFnZUlEJykudmFsKExhbmd1YWdlSUQpOwoKICAgICAgICAvLyB1cGRhdGUgc3ViamVjdCBsYWJlbAogICAgICAgICRDbG9uZS5maW5kKCcjVGVtcGxhdGVfTGFiZWxfRGVzY3JpcHRpb25TaG9ydCcpLmF0dHIoJ2ZvcicsIExhbmd1YWdlSUQgKyAnX0Rlc2NyaXB0aW9uU2hvcnQnKTsKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0xhYmVsX0Rlc2NyaXB0aW9uU2hvcnQnKS5hdHRyKCdpZCcsIExhbmd1YWdlSUQgKyAnX0xhYmVsX0Rlc2NyaXB0aW9uU2hvcnQnKTsKCiAgICAgICAgLy8gdXBkYXRlIHN1YmplY3QgZmllbGQKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0Rlc2NyaXB0aW9uU2hvcnQnKS5hdHRyKCduYW1lJywgTGFuZ3VhZ2VJRCArICdfRGVzY3JpcHRpb25TaG9ydCcpOwogICAgICAgICRDbG9uZS5maW5kKCcjVGVtcGxhdGVfRGVzY3JpcHRpb25TaG9ydCcpLmFkZENsYXNzKCdWYWxpZGF0ZV9SZXF1aXJlZCcpOwogICAgICAgICRDbG9uZS5maW5kKCcjVGVtcGxhdGVfRGVzY3JpcHRpb25TaG9ydCcpLmF0dHIoJ2lkJywgTGFuZ3VhZ2VJRCArICdfRGVzY3JpcHRpb25TaG9ydCcpOwogICAgICAgICRDbG9uZS5maW5kKCcjVGVtcGxhdGVfRGVzY3JpcHRpb25TaG9ydEVycm9yJykuYXR0cignaWQnLCBMYW5ndWFnZUlEICsgJ19EZXNjcmlwdGlvblNob3J0RXJyb3InKTsKCiAgICAgICAgLy8gdXBkYXRlIGJvZHkgbGFiZWwKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0xhYmVsX0Rlc2NyaXB0aW9uTG9uZycpLmF0dHIoJ2ZvcicsIExhbmd1YWdlSUQgKyAnX0Rlc2NyaXB0aW9uTG9uZycpOwogICAgICAgICRDbG9uZS5maW5kKCcjVGVtcGxhdGVfTGFiZWxfRGVzY3JpcHRpb25Mb25nJykuYXR0cignaWQnLCBMYW5ndWFnZUlEICsgJ19MYWJlbF9EZXNjcmlwdGlvbkxvbmcnKTsKCiAgICAgICAgLy8gdXBkYXRlIGJvZHkgZmllbGQKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0Rlc2NyaXB0aW9uTG9uZycpLmF0dHIoJ25hbWUnLCBMYW5ndWFnZUlEICsgJ19EZXNjcmlwdGlvbkxvbmcnKTsKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0Rlc2NyaXB0aW9uTG9uZycpLmFkZENsYXNzKCdSaWNoVGV4dCcpOwogICAgICAgICRDbG9uZS5maW5kKCcjVGVtcGxhdGVfRGVzY3JpcHRpb25Mb25nJykuYXR0cignaWQnLCBMYW5ndWFnZUlEICsgJ19EZXNjcmlwdGlvbkxvbmcnKTsKCiAgICAgICAgLy8gYXBwZW5kIHRvIGNvbnRhaW5lcgogICAgICAgICQoJy5TZXJ2aWNlTGFuZ3VhZ2VDb250YWluZXInKS5hcHBlbmQoJENsb25lKTsKCiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgcmljaCB0ZXh0IGVkaXRvciBpZiBzZXQKICAgICAgICBpZiAocGFyc2VJbnQoQ29yZS5Db25maWcuR2V0KCdSaWNoVGV4dFNldCcpLCAxMCkgPT09IDEpIHsKICAgICAgICAgICAgQ29yZS5VSS5SaWNoVGV4dEVkaXRvci5Jbml0QWxsRWRpdG9ycygpOwogICAgICAgIH0KCiAgICAgICAgLy8gYmluZCBjbGljayBmdW5jdGlvbiB0byByZW1vdmUgYnV0dG9uCiAgICAgICAgJCgnLkxhbmd1YWdlUmVtb3ZlJykub2ZmKCdjbGljay5TZXJ2aWNlJykub24oJ2NsaWNrLlNlcnZpY2UnLCBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBpZiAod2luZG93LmNvbmZpcm0oQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlPycpKSkgewogICAgICAgICAgICAgICAgVGFyZ2V0TlMuUmVtb3ZlTGFuZ3VhZ2UoJCh0aGlzKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICBUYXJnZXROUy5MYW5ndWFnZVNlbGVjdGlvblJlYnVpbGQoKTsKCiAgICAgICAgQ29yZS5VSS5Jbml0V2lkZ2V0QWN0aW9uVG9nZ2xlKCk7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBSZW1vdmVMYW5ndWFnZQogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQWRtaW4uU2VydmljZQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gT2JqZWN0IC0gSlF1ZXJ5IG9iamVjdCB1c2VkIHRvIHJlbW92ZSB0aGUgbGFuZ3VhZ2UgYmxvY2sKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxhbmd1YWdlLgogICAgICovCiAgICBUYXJnZXROUy5SZW1vdmVMYW5ndWFnZSA9IGZ1bmN0aW9uIChPYmplY3QpIHsKICAgICAgICBPYmplY3QuY2xvc2VzdCgnLlNlcnZpY2VMYW5ndWFnZScpLnJlbW92ZSgpOwogICAgICAgIFRhcmdldE5TLkxhbmd1YWdlU2VsZWN0aW9uUmVidWlsZCgpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIExhbmd1YWdlU2VsZWN0aW9uUmVidWlsZAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQWRtaW4uU2VydmljZQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gcmVidWlsZHMgbGFuZ3VhZ2Ugc2VsZWN0aW9uLCBvbmx5IHNob3cgYXZhaWxhYmxlIGxhbmd1YWdlcy4KICAgICAqLwogICAgVGFyZ2V0TlMuTGFuZ3VhZ2VTZWxlY3Rpb25SZWJ1aWxkID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAvLyBnZXQgb3JpZ2luYWwgc2VsZWN0aW9uIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcyBhbmQgY2xvbmUgaXQKICAgICAgICB2YXIgJExhbmd1YWdlcyA9ICQoJyNMYW5ndWFnZU9yaWcgb3B0aW9uJykuY2xvbmUoKTsKCiAgICAgICAgJCgnI0xhbmd1YWdlJykuZW1wdHkoKTsKCiAgICAgICAgLy8gc3RyaXAgYWxsIGFscmVhZHkgdXNlZCBhdHRyaWJ1dGVzCiAgICAgICAgJExhbmd1YWdlcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKCEkKCcuU2VydmljZUxhbmd1YWdlQ29udGFpbmVyIGxhYmVsIycgKyAkKHRoaXMpLnZhbCgpICsgJ19MYWJlbF9EZXNjcmlwdGlvblNob3J0JykubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkKCcjTGFuZ3VhZ2UnKS5hcHBlbmQoJCh0aGlzKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgJCgnI0xhbmd1YWdlJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKTsKCiAgICAgICAgLy8gYmluZCBjbGljayBmdW5jdGlvbiB0byBhZGQgYnV0dG9uCiAgICAgICAgJCgnLkxhbmd1YWdlQWRkJykub2ZmKCdjaGFuZ2UuU2VydmljZScpLm9uKCdjaGFuZ2UuU2VydmljZScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgVGFyZ2V0TlMuQWRkTGFuZ3VhZ2UoJCh0aGlzKS52YWwoKSwgJCgnLkxhbmd1YWdlQWRkIG9wdGlvbjpzZWxlY3RlZCcpLnRleHQoKSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwovLyBFTyBTZXJ2aWNlIENhdGFsb2cKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KENvcmUuQWdlbnQuQWRtaW4uU2VydmljZSB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.Admin.ServiceImportExport.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBabnVueSBHbWJILCBodHRwOi8vem51bnkuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vICRvcmlnaW46IG90b2JvIC0gZWEyMTE5MDIxMzBjYTViNzk2ZDk2Njg0NTk3MGNmYzU0NjQ0NDU0OCAtIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlSW1wb3J0RXhwb3J0LmpzCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSAgICAgICAgID0gQ29yZSAgICAgICAgICAgICB8fCB7fTsKQ29yZS5BZ2VudCAgICAgICA9IENvcmUuQWdlbnQgICAgICAgfHwge307CkNvcmUuQWdlbnQuQWRtaW4gPSBDb3JlLkFnZW50LkFkbWluIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlSW1wb3J0RXhwb3J0CiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBTZXJ2aWNlIEltcG9ydEV4cG9ydCBtb2R1bGUuCiAqLwpDb3JlLkFnZW50LkFkbWluLlNlcnZpY2VJbXBvcnRFeHBvcnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgJC5lYWNoKFsnU2VydmljZXMnXSwgZnVuY3Rpb24gKF9JbmRleCwgRWxlbWVudHMpIHsKCiAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il1bbmFtZT0iU2VsZWN0QWxsJytFbGVtZW50cysnIl0nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICBDb3JlLkZvcm0uU2VsZWN0QWxsQ2hlY2tib3hlcygkKHRoaXMpLCAkKCdbbmFtZT0iJytFbGVtZW50cysnIl0nKSk7CgogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKCiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKCn0oQ29yZS5BZ2VudC5BZG1pbi5TZXJ2aWNlSW1wb3J0RXhwb3J0IHx8IHt9KSk7CgpDb3JlLkFnZW50LkFkbWluLlNlcnZpY2VJbXBvcnRFeHBvcnQuSW5pdCgpOwo=</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.Admin.SLAImportExport.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBabnVueSBHbWJILCBodHRwOi8vem51bnkuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSAgICAgICAgID0gQ29yZSAgICAgICAgICAgICB8fCB7fTsKQ29yZS5BZ2VudCAgICAgICA9IENvcmUuQWdlbnQgICAgICAgfHwge307CkNvcmUuQWdlbnQuQWRtaW4gPSBDb3JlLkFnZW50LkFkbWluIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgQ29yZS5BZ2VudC5BZG1pbi5TTEFJbXBvcnRFeHBvcnQKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIFNMQSBJbXBvcnRFeHBvcnQgbW9kdWxlLgogKi8KQ29yZS5BZ2VudC5BZG1pbi5TTEFJbXBvcnRFeHBvcnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgJC5lYWNoKFsnU0xBcyddLCBmdW5jdGlvbiAoX0luZGV4LCBFbGVtZW50cykgewoKICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT0iY2hlY2tib3giXVtuYW1lPSJTZWxlY3RBbGwnK0VsZW1lbnRzKyciXScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIENvcmUuRm9ybS5TZWxlY3RBbGxDaGVja2JveGVzKCQodGhpcyksICQoJ1tuYW1lPSInK0VsZW1lbnRzKyciXScpKTsKCiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwoKfShDb3JlLkFnZW50LkFkbWluLlNMQUltcG9ydEV4cG9ydCB8fCB7fSkpOwoKQ29yZS5BZ2VudC5BZG1pbi5TTEFJbXBvcnRFeHBvcnQuSW5pdCgpOwo=</File>
        <File Location="var/packagesetup/ServiceCatalog.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpTZXJ2aWNlQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZFZhbHVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKKTsKCj1oZWFkMSBOQU1FCgp2YXI6OnBhY2thZ2VzZXR1cDo6U2VydmljZUNhdGFsb2cgLSBjb2RlIHRvIGV4ZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBmdW5jdGlvbnMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDb2RlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgndmFyOjpwYWNrYWdlc2V0dXA6OlN1cnZleScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIEZvcmNlIGEgcmVsb2FkIG9mIFpaWkF1dG8ucG0gYW5kIFpaWkFBdXRvLnBtIHRvIGdldCB0aGUgZnJlc2ggY29uZmlndXJhdGlvbiB2YWx1ZXMuCiAgICBmb3IgbXkgJE1vZHVsZSAoIHNvcnQga2V5cyAlSU5DICkgewogICAgICAgIGlmICggJE1vZHVsZSA9fiBtL1paWkFBP3V0b1wucG0kLyApIHsKICAgICAgICAgICAgZGVsZXRlICRJTkN7JE1vZHVsZX07CiAgICAgICAgfQogICAgfQoKICAgICMgYWx3YXlzIGRpc2NhcmQgdGhlIGNvbmZpZyBvYmplY3QgYmVmb3JlIHBhY2thZ2UgY29kZSBpcyBleGVjdXRlZCwKICAgICMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbmZpZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIG5ld2x5LCBzbyB0aGF0IGl0CiAgICAjIHdpbGwgdXNlIHRoZSByZWNlbnRseSB3cml0dGVuIG5ldyBjb25maWcgZnJvbSB0aGUgcGFja2FnZQogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgICAgIE9iamVjdHMgPT4gWydLZXJuZWw6OkNvbmZpZyddLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVcGdyYWRlKCkKCnJ1biB0aGUgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8xMV8wXzMoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDExLjAuMy4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8xMV8wXzMoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fMTFfMF8zIHsgICAgIyMgbm8gY3JpdGljIHF3KE9UT0JPOjpSZXF1aXJlQ2FtZWxDYXNlKQogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRMYW5ndWFnZSAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRGVmYXVsdExhbmd1YWdlJykgfHwgJ2VuJzsKICAgIG15ICRDb250ZW50VHlwZSA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0JykgPyAndGV4dC9odG1sJyA6ICd0ZXh0L3BsYWluJzsKCiAgICAjIHRoaXMgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgaWYgd2UgY29tZSBmcm9tIDExLjAuMSBvciBhIDEwLjEgdmVyc2lvbiBiZWxvdyAxMC4xLjE1CiAgICBteSAoJFByZXZpb3VzbHlNaWdyYXRlZCkgPSAkREJPYmplY3QtPlNlbGVjdFJvd0FycmF5KAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlX2Rlc2NyaXB0aW9uJywKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMSBpZiAkUHJldmlvdXNseU1pZ3JhdGVkOwoKICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHNlcnZpY2VfZGVzY3JpcHRpb24gKHNlcnZpY2VfaWQsIGRlc2NyaXB0aW9uX3Nob3J0LCBkZXNjcmlwdGlvbl9sb25nLCBjb250ZW50X3R5cGUsIGxhbmd1YWdlKQogICAgICAgICAgICAgICAgU0VMRUNUIGlkLCBkZXNjcmlwdGlvbl9zaG9ydCwgZGVzY3JpcHRpb25fbG9uZywgJyRDb250ZW50VHlwZScsICckTGFuZ3VhZ2UnIEZST00gc2VydmljZSBXSEVSRSBkZXNjcmlwdGlvbl9zaG9ydCA8PiAnJyBPUkRFUiBCWSBpZCBBU0MiCiAgICApOwoKICAgIGlmICgkU3VjY2VzcykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1NlcnZpY2UgY2F0YWxvZyBkZXNjcmlwdGlvbnMgbWlncmF0ZWQgc3VjY2Vzc2Z1bGx5IHRvIHRoZSBTZXJ2aWNlIGRlc2NyaXB0aW9uIHRhYmxlIScKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdUaGVyZSB3YXMgYSBwcm9ibGVtIG1pZ3JhdGluZyBzZXJ2aWNlIGNhdGFsb2cgZGVzY3JpcHRpb25zIGZyb20gU2VydmljZSB0YWJsZS4gUGxlYXNlIHJldmlldyBlcnJvciBsb2cuJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVuaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgdW5pbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVbmluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlVW5pbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyByZW1vdmUgRHluYW1pYyBGaWVsZHMgYW5kIGl0cyB2YWx1ZXMKICAgICRTZWxmLT5fRHluYW1pY0ZpZWxkc0RlbGV0ZSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0R5bmFtaWNGaWVsZHNEZWxldGUoKQoKZGVsZXRlIGFsbCBleGlzdGluZyBkeW5hbWljIGZpZWxkcyBmb3IgU2VydmljZUNhdGFsb2cKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9EeW5hbWljRmllbGRzRGVsZXRlKCk7Cgo9Y3V0CgpzdWIgX0R5bmFtaWNGaWVsZHNEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBhbGwgZHluYW1pYyBmaWVsZHMgKHZhbGlkIGFuZCBpbnZhbGlkIG9uZXMpCiAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICA9PiAwLAogICAgICAgIE9iamVjdFR5cGUgPT4gWydTZXJ2aWNlJ10sCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBkeW5hbWljIGZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKCiAgICAgICAgIyBkZWxldGUgYWxsIGZpZWxkIHZhbHVlcwogICAgICAgIG15ICRWYWx1ZXNEZWxldGVTdWNjZXNzID0gJER5bmFtaWNGaWVsZFZhbHVlT2JqZWN0LT5BbGxWYWx1ZXNEZWxldGUoCiAgICAgICAgICAgIEZpZWxkSUQgPT4gJER5bmFtaWNGaWVsZC0+e0lEfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgdmFsdWVzIGNvdWxkIGJlIGRlbGV0ZWQKICAgICAgICBpZiAoJFZhbHVlc0RlbGV0ZVN1Y2Nlc3MpIHsKCiAgICAgICAgICAgICMgZGVsZXRlIGZpZWxkCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkRGVsZXRlKAogICAgICAgICAgICAgICAgSUQgICAgID0+ICREeW5hbWljRmllbGQtPntJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgZGVsZXRlIGR5bmFtaWMgZmllbGQgJyREeW5hbWljRmllbGQtPntOYW1lfSchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdmFsdWVzIGNvdWxkIG5vdCBiZSBkZWxldGVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgZGVsZXRlIHZhbHVlcyBmb3IgZHluYW1pYyBmaWVsZCAnJER5bmFtaWNGaWVsZC0+e05hbWV9JyEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsK</File>
        <File Location="doc/en/ServiceCatalog.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
    <DatabaseInstall Type="post">
        <TableCreate Type="post" Name="service_description">
            <Column AutoIncrement="true" Name="id" PrimaryKey="true" Required="true" Type="BIGINT"></Column>
            <Column Name="service_id" Required="true" Size="11" Type="INTEGER"></Column>
            <Column Name="description_short" Required="true" Size="191" Type="VARCHAR"></Column>
            <Column Name="description_long" Required="false" Size="3000" Type="VARCHAR"></Column>
            <Column Name="content_type" Required="true" Size="250" Type="VARCHAR"></Column>
            <Column Name="language" Required="true" Size="60" Type="VARCHAR"></Column>
            <Index Name="service_description_language">
                <IndexColumn Name="language">
                </IndexColumn>
            </Index>
            <Index Name="service_description_service_id">
                <IndexColumn Name="service_id">
                </IndexColumn>
            </Index>
        </TableCreate>
        <TableCreate Type="post" Name="service_type">
            <Column Name="service_id" Required="true" Type="INTEGER"></Column>
            <Column Name="ticket_type_id" Required="false" Type="SMALLINT"></Column>
            <Column Name="create_time" Required="true" Type="DATE"></Column>
            <Column Name="create_by" Required="true" Type="INTEGER"></Column>
            <ForeignKey ForeignTable="service">
                <Reference Foreign="id" Local="service_id">
                </Reference>
            </ForeignKey>
            <ForeignKey ForeignTable="ticket_type">
                <Reference Foreign="id" Local="ticket_type_id">
                </Reference>
            </ForeignKey>
            <ForeignKey ForeignTable="users">
                <Reference Foreign="id" Local="create_by">
                </Reference>
            </ForeignKey>
        </TableCreate>
        <TableCreate Type="post" Name="service_attachment">
            <Column AutoIncrement="true" Name="id" PrimaryKey="true" Required="true" Type="BIGINT"></Column>
            <Column Name="service_id" Required="true" Size="11" Type="INTEGER"></Column>
            <Column Name="filename" Required="false" Size="250" Type="VARCHAR"></Column>
            <Column Name="content_size" Required="false" Size="30" Type="VARCHAR"></Column>
            <Column Name="content_type" Required="false" Size="250" Type="VARCHAR"></Column>
            <Column Name="content" Required="true" Type="LONGBLOB"></Column>
            <Column Default="0" Name="inlineattachment" Required="true" Type="SMALLINT"></Column>
            <Column Name="created" Required="true" Type="DATE"></Column>
            <Column Name="created_by" Required="true" Type="INTEGER"></Column>
            <Column Name="changed" Required="true" Type="DATE"></Column>
            <Column Name="changed_by" Required="true" Type="INTEGER"></Column>
            <Index Name="service_attachment_service_id">
                <IndexColumn Name="service_id">
                </IndexColumn>
            </Index>
        </TableCreate>
        <TableAlter Type="post" Name="service">
            <ColumnAdd Name="description_short" Required="false" Size="191" Type="VARCHAR"></ColumnAdd>
            <ColumnAdd Name="description_long" Required="false" Size="3000" Type="VARCHAR"></ColumnAdd>
            <ColumnAdd Name="dest_queueid" Required="false" Size="255" Type="VARCHAR"></ColumnAdd>
            <ColumnAdd Name="keywords" Required="false" Size="255" Type="VARCHAR"></ColumnAdd>
        </TableAlter>
    </DatabaseInstall>
    <DatabaseUpgrade>
        <TableCreate Type="post" Name="service_attachment" Version="10.0.2">
            <Column AutoIncrement="true" Name="id" PrimaryKey="true" Required="true" Type="BIGINT"></Column>
            <Column Name="service_id" Required="true" Size="11" Type="INTEGER"></Column>
            <Column Name="filename" Required="false" Size="250" Type="VARCHAR"></Column>
            <Column Name="content_size" Required="false" Size="30" Type="VARCHAR"></Column>
            <Column Name="content_type" Required="false" Size="250" Type="VARCHAR"></Column>
            <Column Name="content" Required="true" Type="LONGBLOB"></Column>
            <Column Default="0" Name="inlineattachment" Required="true" Type="SMALLINT"></Column>
            <Column Name="created" Required="true" Type="DATE"></Column>
            <Column Name="created_by" Required="true" Type="INTEGER"></Column>
            <Column Name="changed" Required="true" Type="DATE"></Column>
            <Column Name="changed_by" Required="true" Type="INTEGER"></Column>
            <Index Name="service_attachment_service_id">
                <IndexColumn Name="service_id">
                </IndexColumn>
            </Index>
        </TableCreate>
        <TableCreate Type="post" Name="service_description" Version="11.0.3">
            <Column AutoIncrement="true" Name="id" PrimaryKey="true" Required="true" Type="BIGINT"></Column>
            <Column Name="service_id" Required="true" Size="11" Type="INTEGER"></Column>
            <Column Name="description_short" Required="true" Size="191" Type="VARCHAR"></Column>
            <Column Name="description_long" Required="false" Size="3000" Type="VARCHAR"></Column>
            <Column Name="content_type" Required="true" Size="250" Type="VARCHAR"></Column>
            <Column Name="language" Required="true" Size="60" Type="VARCHAR"></Column>
            <Index Name="service_description_language">
                <IndexColumn Name="language">
                </IndexColumn>
            </Index>
            <Index Name="service_description_service_id">
                <IndexColumn Name="service_id">
                </IndexColumn>
            </Index>
        </TableCreate>
        <TableAlter Type="post" Name="service" Version="10.1.11">
            <ColumnAdd Name="dest_queueid" Required="false" Size="255" Type="VARCHAR"></ColumnAdd>
        </TableAlter>
        <TableAlter Type="post" Name="service" Version="11.0.3">
            <ColumnAdd Name="keywords" Required="false" Size="255" Type="VARCHAR"></ColumnAdd>
            <ColumnChange NameNew="description_short" NameOld="description_short" Required="false" Size="191" Type="VARCHAR"></ColumnChange>
        </TableAlter>
    </DatabaseUpgrade>
    <DatabaseUninstall Type="pre">
        <TableDrop Type="pre" Name="service_type">
        </TableDrop>
        <TableDrop Type="pre" Name="service_attachment">
        </TableDrop>
        <TableDrop Type="pre" Name="service_description">
        </TableDrop>
        <TableAlter Type="pre" Name="service">
            <ColumnDrop Name="description_short"></ColumnDrop>
            <ColumnDrop Name="description_long"></ColumnDrop>
            <ColumnDrop Name="dest_queueid"></ColumnDrop>
            <ColumnDrop Name="keywords"></ColumnDrop>
        </TableAlter>
    </DatabaseUninstall>
</otrs_package>