<?xml version="1.0" encoding="utf-8"?>
<otrs_package version="1.0">
    <Name>TicketScheduler</Name>
    <Version>7.1.0</Version>
    <Framework>7.1.x</Framework>
    <Vendor>wolkig.it - Stephan Lang</Vendor>
    <URL>https://wolkig.it/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <Description Lang="en">Automatic creation of recurring/scheduled tickets based on configurable rules.</Description>
    <Description Lang="de">Automatische Erstellung wiederkehrender/geplanter Tickets basierend auf konfigurierbaren Regeln.</Description>

    <IntroInstall Type="post" Lang="en" Title="Installation Complete"><![CDATA[
        <h2>TicketScheduler successfully installed!</h2>

        <p>The add-on is ready to use immediately. The Znuny Daemon handles
        automatic ticket creation - no further configuration needed.</p>

        <h3>Optional Extensions</h3>

        <table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse;">
            <tr style="background-color: #f5f5f5;">
                <th>Add-on</th>
                <th>Function</th>
            </tr>
            <tr>
                <td><strong>Znuny Checklist</strong></td>
                <td>Automatic assignment of checklist templates to scheduled tickets.<br/>
                    <a href="https://codeberg.org/wolkig-it/znuny_checklist">codeberg.org/wolkig-it/znuny_checklist</a></td>
            </tr>
            <tr>
                <td><strong>ITSM / Process Management</strong></td>
                <td>Enables scheduling of process tickets with automatic
                    activity dialog population.</td>
            </tr>
        </table>

        <h3>First Steps</h3>
        <ol>
            <li>Assign users to the <code>TicketSchedulerManager</code> group</li>
            <li>Menu: <strong>Tickets -> Ticket Scheduler</strong></li>
            <li>Create your first schedule</li>
        </ol>

        <p><em>Documentation: see Admin Manual</em></p>
    ]]></IntroInstall>

    <IntroInstall Type="post" Lang="de" Title="Installation abgeschlossen"><![CDATA[
        <h2>TicketScheduler erfolgreich installiert!</h2>

        <p>Das Add-on ist sofort einsatzbereit. Der Znuny Daemon uebernimmt
        automatisch die Ticket-Erstellung - keine weitere Konfiguration noetig.</p>

        <h3>Optionale Erweiterungen</h3>

        <table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse;">
            <tr style="background-color: #f5f5f5;">
                <th>Add-on</th>
                <th>Funktion</th>
            </tr>
            <tr>
                <td><strong>Znuny Checklist</strong></td>
                <td>Automatische Zuweisung von Checklisten-Vorlagen zu geplanten Tickets.<br/>
                    <a href="https://codeberg.org/wolkig-it/znuny_checklist">codeberg.org/wolkig-it/znuny_checklist</a></td>
            </tr>
            <tr>
                <td><strong>ITSM / Process Management</strong></td>
                <td>Ermoeglicht das Planen von Prozess-Tickets mit automatischer
                    Activity-Dialog-Befuellung.</td>
            </tr>
        </table>

        <h3>Erste Schritte</h3>
        <ol>
            <li>Benutzer der Gruppe <code>TicketSchedulerManager</code> zuweisen</li>
            <li>Menue: <strong>Tickets -> Ticket Scheduler</strong></li>
            <li>Ersten Schedule erstellen</li>
        </ol>

        <p><em>Dokumentation: siehe Admin-Handbuch</em></p>
    ]]></IntroInstall>

    <!-- File List -->
    <Filelist>
        <!-- Core Backend -->
        <File Permission="660" Location="Kernel/System/TicketScheduler.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlciAtIENvcmUgZnVuY3Rpb25zIGZvciByZWN1cnJpbmcgdGlja2V0IHNjaGVkdWxlcwoKPWhlYWQxIERFU0NSSVBUSU9OCgpUaGlzIG1vZHVsZSBwcm92aWRlcyBDUlVEIG9wZXJhdGlvbnMsIHNjaGVkdWxpbmcgY2FsY3VsYXRpb25zLCBhbmQgZXhlY3V0aW9uCmxvZ2ljIGZvciBhdXRvbWF0aWMgdGlja2V0IGNyZWF0aW9uIGJhc2VkIG9uIGNvbmZpZ3VyYWJsZSBzY2hlZHVsZXMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpDcmVhdGUgYSBUaWNrZXRTY2hlZHVsZXIgb2JqZWN0LgoKICAgIG15ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0U2NoZWR1bGVyJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBTY2hlZHVsZXJBZGQoKQoKQWRkIGEgbmV3IHNjaGVkdWxlLgoKICAgIG15ICRTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnTW9udGhseSBNYWludGVuYW5jZSBUaWNrZXQnLAogICAgICAgIFNjaGVkdWxlTW9kZSAgICAgICAgID0+ICd0aWNrZXQnLCAgICAgICAgICAgICAgICAgICAgICAjIHRpY2tldCBvciBwcm9jZXNzCiAgICAgICAgVGl0bGUgICAgICAgICAgICAgICAgPT4gJ01vbnRobHkgTWFpbnRlbmFuY2UgW0RBVEVdJywgICMgZm9yIG5vcm1hbCB0aWNrZXRzCiAgICAgICAgUXVldWVJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBQcmlvcml0eUlEICAgICAgICAgICA9PiAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIFR5cGVJRCAgICAgICAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgU2VydmljZUlEICAgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICAgICBTTEFJRCAgICAgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luICAgID0+ICdjdXN0b21lckBleGFtcGxlLmNvbScsICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgT3duZXJJRCAgICAgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICAgICBSZXNwb25zaWJsZUlEICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdUaWNrZXQgYm9keSB0ZXh0Li4uJywgICAgICAgICAjIGZvciBub3JtYWwgdGlja2V0cwogICAgICAgIFByb2Nlc3NJRCAgICAgICAgICAgID0+ICdQcm9jZXNzLWFiYzEyMycsICAgICAgICAgICAgICAjIGZvciBwcm9jZXNzIHRpY2tldHMKICAgICAgICBBY3Rpdml0eUlEICAgICAgICAgICA9PiAnQWN0aXZpdHkteHl6Nzg5JywgICAgICAgICAgICAgIyBmb3IgcHJvY2VzcyB0aWNrZXRzCiAgICAgICAgQWN0aXZpdHlEaWFsb2dEYXRhICAgPT4geyBGaWVsZCA9PiAnVmFsdWUnIH0sICAgICAgICAgICMgZm9yIHByb2Nlc3MgdGlja2V0cyAoaGFzaHJlZikKICAgICAgICBDaGVja2xpc3RUZW1wbGF0ZUlEICA9PiA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIFNjaGVkdWxlVHlwZSAgICAgICAgID0+ICd3ZWVrbHknLCAgICAgICAgICAgICAgICAgICAgICAjIGRhaWx5LCB3ZWVrbHksIG1vbnRobHlfZGF5LCBtb250aGx5X3dlZWtkYXksIHllYXJseSwgaW50ZXJ2YWwKICAgICAgICBTY2hlZHVsZUNvbmZpZyAgICAgICA9PiB7IHdlZWtkYXlzID0+IFsxLDMsNV0sIC4uLiB9LCAgIyBoYXNocmVmIHdpdGggY29uZmlnCiAgICAgICAgRW5kVHlwZSAgICAgICAgICAgICAgPT4gJ25ldmVyJywgICAgICAgICAgICAgICAgICAgICAgICMgbmV2ZXIsIG9jY3VycmVuY2VzLCBkYXRlCiAgICAgICAgTWF4T2NjdXJyZW5jZXMgICAgICAgPT4gMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgRW5kVHlwZT1vY2N1cnJlbmNlcwogICAgICAgIEVuZERhdGUgICAgICAgICAgICAgID0+ICcyMDI3LTEyLTMxJywgICAgICAgICAgICAgICAgICAjIGlmIEVuZFR5cGU9ZGF0ZQogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICA9PiB7IERGTmFtZSA9PiAnVmFsdWUnIH0sICAgICAgICAgIyBvcHRpb25hbCBoYXNocmVmCiAgICApOwoKUmV0dXJucyB0aGUgSUQgb2YgdGhlIGNyZWF0ZWQgc2NoZWR1bGUuCgo9Y3V0CgpzdWIgU2NoZWR1bGVyQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKICAgIG15ICREQk9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIENoZWNrIHJlcXVpcmVkIHBhcmFtZXRlcnMgKFF1ZXVlSUQgb25seSByZXF1aXJlZCBmb3IgdGlja2V0IG1vZGUsIG5vdCBwcm9jZXNzIG1vZGUpCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBTY2hlZHVsZVR5cGUgU2NoZWR1bGVDb25maWcgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIFF1ZXVlSUQgaXMgcmVxdWlyZWQgZm9yIHRpY2tldCBtb2RlLCBvcHRpb25hbCBmb3IgcHJvY2VzcyBtb2RlCiAgICBpZiAoICggISRQYXJhbXtTY2hlZHVsZU1vZGV9IHx8ICRQYXJhbXtTY2hlZHVsZU1vZGV9IGVxICd0aWNrZXQnICkgJiYgISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFF1ZXVlSUQgZm9yIHRpY2tldCBtb2RlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBTZXQgZGVmYXVsdHMKICAgICRQYXJhbXtTY2hlZHVsZU1vZGV9IHx8PSAndGlja2V0JzsKICAgICRQYXJhbXtFbmRUeXBlfSAgICAgIHx8PSAnbmV2ZXInOwogICAgJFBhcmFte1ZhbGlkSUR9ICAgICAgfHw9IDE7CgogICAgIyBDb252ZXJ0IGVtcHR5IHN0cmluZ3MgdG8gdW5kZWYgZm9yIGZpZWxkcyB0aGF0IHJlcXVpcmUgTlVMTCAoREIgcmVqZWN0cyAnJykKICAgIGZvciBteSAkRmllbGQgKHF3KFF1ZXVlSUQgUHJpb3JpdHlJRCBUeXBlSUQgU2VydmljZUlEIFNMQUlEIE93bmVySUQgUmVzcG9uc2libGVJRCBNYXhPY2N1cnJlbmNlcyBFbmREYXRlKSkgewogICAgICAgIGlmICggZGVmaW5lZCAkUGFyYW17JEZpZWxkfSAmJiAkUGFyYW17JEZpZWxkfSBlcSAnJyApIHsKICAgICAgICAgICAgJFBhcmFteyRGaWVsZH0gPSB1bmRlZjsKICAgICAgICB9CiAgICB9CgogICAgIyBFbmNvZGUgU2NoZWR1bGVDb25maWcgdG8gSlNPTgogICAgbXkgJFNjaGVkdWxlQ29uZmlnSlNPTiA9ICcnOwogICAgaWYgKCByZWYgJFBhcmFte1NjaGVkdWxlQ29uZmlnfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJFNjaGVkdWxlQ29uZmlnSlNPTiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyktPkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiAkUGFyYW17U2NoZWR1bGVDb25maWd9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2NoZWR1bGVDb25maWdKU09OID0gJFBhcmFte1NjaGVkdWxlQ29uZmlnfTsKICAgIH0KCiAgICAjIEVuY29kZSBBY3Rpdml0eURpYWxvZ0RhdGEgdG8gSlNPTiBpZiBoYXNocmVmCiAgICBteSAkQWN0aXZpdHlEaWFsb2dEYXRhSlNPTjsKICAgIGlmICggcmVmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0RhdGF9IGVxICdIQVNIJyApIHsKICAgICAgICAkQWN0aXZpdHlEaWFsb2dEYXRhSlNPTiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyktPkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dEYXRhfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEFjdGl2aXR5RGlhbG9nRGF0YUpTT04gPSAkUGFyYW17QWN0aXZpdHlEaWFsb2dEYXRhfTsKICAgIH0KCiAgICAjIENhbGN1bGF0ZSBmaXJzdCBuZXh0X2V4ZWN1dGlvbgogICAgbXkgJE5leHRFeGVjdXRpb24gPSAkU2VsZi0+Q2FsY3VsYXRlTmV4dEV4ZWN1dGlvbigKICAgICAgICBTY2hlZHVsZVR5cGUgICA9PiAkUGFyYW17U2NoZWR1bGVUeXBlfSwKICAgICAgICBTY2hlZHVsZUNvbmZpZyA9PiAkUGFyYW17U2NoZWR1bGVDb25maWd9LAogICAgKTsKCiAgICAjIEVuc3VyZSBOZXh0RXhlY3V0aW9uIGlzIHVuZGVmIGlmIGVtcHR5IChEQVRFIGZpZWxkIHJlamVjdHMgJycpCiAgICAkTmV4dEV4ZWN1dGlvbiA9IHVuZGVmIGlmIGRlZmluZWQgJE5leHRFeGVjdXRpb24gJiYgJE5leHRFeGVjdXRpb24gZXEgJyc7CgogICAgIyBJbnNlcnQgc2NoZWR1bGUgKGNoZWNrbGlzdCBoYW5kbGVkIHNlcGFyYXRlbHkgdmlhIG46bSB0YWJsZSkKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBJTlNFUlQgSU5UTyB0aWNrZXRfc2NoZWR1bGVyCiAgICAgICAgICAgICAgICAobmFtZSwgc2NoZWR1bGVfbW9kZSwgdGl0bGUsIHF1ZXVlX2lkLCBwcmlvcml0eV9pZCwgdHlwZV9pZCwgc2VydmljZV9pZCwgc2xhX2lkLAogICAgICAgICAgICAgICAgIGN1c3RvbWVyX3VzZXJfbG9naW4sIG93bmVyX2lkLCByZXNwb25zaWJsZV9pZCwgYm9keSwKICAgICAgICAgICAgICAgICBwcm9jZXNzX2lkLCBhY3Rpdml0eV9pZCwgYWN0aXZpdHlfZGlhbG9nX2RhdGEsCiAgICAgICAgICAgICAgICAgc2NoZWR1bGVfdHlwZSwgc2NoZWR1bGVfY29uZmlnLAogICAgICAgICAgICAgICAgIGVuZF90eXBlLCBtYXhfb2NjdXJyZW5jZXMsIGVuZF9kYXRlLAogICAgICAgICAgICAgICAgIGV4ZWN1dGlvbl9jb3VudCwgbmV4dF9leGVjdXRpb24sIHZhbGlkX2lkLAogICAgICAgICAgICAgICAgIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpCiAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgMCwgPywgPywKICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtTY2hlZHVsZU1vZGV9LAogICAgICAgICAgICBcJFBhcmFte1RpdGxlfSwKICAgICAgICAgICAgXCRQYXJhbXtRdWV1ZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtQcmlvcml0eUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtUeXBlSUR9LAogICAgICAgICAgICBcJFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFwkUGFyYW17U0xBSUR9LAogICAgICAgICAgICBcJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSwKICAgICAgICAgICAgXCRQYXJhbXtPd25lcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgXCRQYXJhbXtQcm9jZXNzSUR9LAogICAgICAgICAgICBcJFBhcmFte0FjdGl2aXR5SUR9LAogICAgICAgICAgICBcJEFjdGl2aXR5RGlhbG9nRGF0YUpTT04sCiAgICAgICAgICAgIFwkUGFyYW17U2NoZWR1bGVUeXBlfSwKICAgICAgICAgICAgXCRTY2hlZHVsZUNvbmZpZ0pTT04sCiAgICAgICAgICAgIFwkUGFyYW17RW5kVHlwZX0sCiAgICAgICAgICAgIFwkUGFyYW17TWF4T2NjdXJyZW5jZXN9LAogICAgICAgICAgICBcJFBhcmFte0VuZERhdGV9LAogICAgICAgICAgICBcJE5leHRFeGVjdXRpb24sCiAgICAgICAgICAgIFwkUGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgR2V0IElEIG9mIGluc2VydGVkIHJlY29yZAogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBNQVgoaWQpIEZST00gdGlja2V0X3NjaGVkdWxlciBXSEVSRSBuYW1lID0gPyBBTkQgY3JlYXRlX2J5ID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9LCBcJFBhcmFte1VzZXJJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkU2NoZWR1bGVySUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2NoZWR1bGVySUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFNjaGVkdWxlcklEOwoKICAgICMgU3RvcmUgY2hlY2tsaXN0IHRlbXBsYXRlIElEcyAobjptIHJlbGF0aW9uc2hpcCkKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17Q2hlY2tsaXN0VGVtcGxhdGVJRHN9ICkgKSB7CiAgICAgICAgJFNlbGYtPl9DaGVja2xpc3RUZW1wbGF0ZXNTZXQoCiAgICAgICAgICAgIFNjaGVkdWxlcklEICAgICAgICAgID0+ICRTY2hlZHVsZXJJRCwKICAgICAgICAgICAgQ2hlY2tsaXN0VGVtcGxhdGVJRHMgPT4gJFBhcmFte0NoZWNrbGlzdFRlbXBsYXRlSURzfSwKICAgICAgICApOwogICAgfQoKICAgICMgU3RvcmUgRHluYW1pY0ZpZWxkIHZhbHVlcyBpZiBwcm92aWRlZAogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0R5bmFtaWNGaWVsZHN9ICkgKSB7CiAgICAgICAgJFNlbGYtPl9EeW5hbWljRmllbGRWYWx1ZXNTZXQoCiAgICAgICAgICAgIFNjaGVkdWxlcklEICAgPT4gJFNjaGVkdWxlcklELAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+ICRQYXJhbXtEeW5hbWljRmllbGRzfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU2NoZWR1bGVySUQ7Cn0KCj1oZWFkMiBTY2hlZHVsZXJHZXQoKQoKR2V0IGEgc2NoZWR1bGUgYnkgSUQuCgogICAgbXkgJVNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgICAgIFNjaGVkdWxlcklEID0+IDEyMywKICAgICk7CgpSZXR1cm5zIGEgaGFzaCB3aXRoIGFsbCBzY2hlZHVsZSBkYXRhLgoKPWN1dAoKc3ViIFNjaGVkdWxlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CiAgICBteSAkREJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgaWYgKCAhJFBhcmFte1NjaGVkdWxlcklEfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNjaGVkdWxlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIGlkLCBuYW1lLCBzY2hlZHVsZV9tb2RlLCB0aXRsZSwgcXVldWVfaWQsIHByaW9yaXR5X2lkLCB0eXBlX2lkLCBzZXJ2aWNlX2lkLCBzbGFfaWQsCiAgICAgICAgICAgICAgICAgICBjdXN0b21lcl91c2VyX2xvZ2luLCBvd25lcl9pZCwgcmVzcG9uc2libGVfaWQsIGJvZHksCiAgICAgICAgICAgICAgICAgICBwcm9jZXNzX2lkLCBhY3Rpdml0eV9pZCwgYWN0aXZpdHlfZGlhbG9nX2RhdGEsCiAgICAgICAgICAgICAgICAgICBzY2hlZHVsZV90eXBlLCBzY2hlZHVsZV9jb25maWcsCiAgICAgICAgICAgICAgICAgICBlbmRfdHlwZSwgbWF4X29jY3VycmVuY2VzLCBlbmRfZGF0ZSwKICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbl9jb3VudCwgbGFzdF9leGVjdXRpb24sIG5leHRfZXhlY3V0aW9uLAogICAgICAgICAgICAgICAgICAgbGFzdF9lcnJvciwgbGFzdF9lcnJvcl90aW1lLAogICAgICAgICAgICAgICAgICAgdmFsaWRfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkKICAgICAgICAgICAgRlJPTSB0aWNrZXRfc2NoZWR1bGVyCiAgICAgICAgICAgIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1NjaGVkdWxlcklEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICVTY2hlZHVsZTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICVTY2hlZHVsZSA9ICgKICAgICAgICAgICAgSUQgICAgICAgICAgICAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBTY2hlZHVsZU1vZGUgICAgICAgPT4gJFJvd1syXSwKICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAkUm93WzRdLAogICAgICAgICAgICBQcmlvcml0eUlEICAgICAgICAgPT4gJFJvd1s1XSwKICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICAgID0+ICRSb3dbNl0sCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgICA9PiAkUm93WzddLAogICAgICAgICAgICBTTEFJRCAgICAgICAgICAgICAgPT4gJFJvd1s4XSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gID0+ICRSb3dbOV0sCiAgICAgICAgICAgIE93bmVySUQgICAgICAgICAgICA9PiAkUm93WzEwXSwKICAgICAgICAgICAgUmVzcG9uc2libGVJRCAgICAgID0+ICRSb3dbMTFdLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgPT4gJFJvd1sxMl0sCiAgICAgICAgICAgIFByb2Nlc3NJRCAgICAgICAgICA9PiAkUm93WzEzXSwKICAgICAgICAgICAgQWN0aXZpdHlJRCAgICAgICAgID0+ICRSb3dbMTRdLAogICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0RhdGEgPT4gJFJvd1sxNV0sCiAgICAgICAgICAgIFNjaGVkdWxlVHlwZSAgICAgICA9PiAkUm93WzE2XSwKICAgICAgICAgICAgU2NoZWR1bGVDb25maWcgICAgID0+ICRSb3dbMTddLAogICAgICAgICAgICBFbmRUeXBlICAgICAgICAgICAgPT4gJFJvd1sxOF0sCiAgICAgICAgICAgIE1heE9jY3VycmVuY2VzICAgICA9PiAkUm93WzE5XSwKICAgICAgICAgICAgRW5kRGF0ZSAgICAgICAgICAgID0+ICRSb3dbMjBdLAogICAgICAgICAgICBFeGVjdXRpb25Db3VudCAgICAgPT4gJFJvd1syMV0sCiAgICAgICAgICAgIExhc3RFeGVjdXRpb24gICAgICA9PiAkUm93WzIyXSwKICAgICAgICAgICAgTmV4dEV4ZWN1dGlvbiAgICAgID0+ICRSb3dbMjNdLAogICAgICAgICAgICBMYXN0RXJyb3IgICAgICAgICAgPT4gJFJvd1syNF0sCiAgICAgICAgICAgIExhc3RFcnJvclRpbWUgICAgICA9PiAkUm93WzI1XSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgID0+ICRSb3dbMjZdLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgPT4gJFJvd1syN10sCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICA9PiAkUm93WzI4XSwKICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgID0+ICRSb3dbMjldLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgPT4gJFJvd1szMF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gaWYgISVTY2hlZHVsZTsKCiAgICAjIERlY29kZSBKU09OIGZpZWxkcwogICAgbXkgJEpTT05PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwoKICAgIGlmICggJFNjaGVkdWxle1NjaGVkdWxlQ29uZmlnfSApIHsKICAgICAgICBteSAkRGVjb2RlZCA9ICRKU09OT2JqZWN0LT5EZWNvZGUoIERhdGEgPT4gJFNjaGVkdWxle1NjaGVkdWxlQ29uZmlnfSApOwogICAgICAgIGlmICggISREZWNvZGVkIHx8ICFyZWYgJERlY29kZWQgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IENvcnJ1cHQgc2NoZWR1bGVfY29uZmlnIEpTT04gZm9yIHNjaGVkdWxlIElEICRTY2hlZHVsZXtJRH0iLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2NoZWR1bGV7U2NoZWR1bGVDb25maWd9ID0ge307CiAgICAgICAgICAgICRTY2hlZHVsZXtDb25maWdDb3JydXB0fSAgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNjaGVkdWxle1NjaGVkdWxlQ29uZmlnfSA9ICREZWNvZGVkOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRTY2hlZHVsZXtBY3Rpdml0eURpYWxvZ0RhdGF9ICkgewogICAgICAgIG15ICREZWNvZGVkID0gJEpTT05PYmplY3QtPkRlY29kZSggRGF0YSA9PiAkU2NoZWR1bGV7QWN0aXZpdHlEaWFsb2dEYXRhfSApOwogICAgICAgIGlmICggISREZWNvZGVkIHx8ICFyZWYgJERlY29kZWQgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IENvcnJ1cHQgYWN0aXZpdHlfZGlhbG9nX2RhdGEgSlNPTiBmb3Igc2NoZWR1bGUgSUQgJFNjaGVkdWxle0lEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTY2hlZHVsZXtBY3Rpdml0eURpYWxvZ0RhdGF9ID0ge307CiAgICAgICAgICAgICRTY2hlZHVsZXtDb25maWdDb3JydXB0fSAgICAgID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTY2hlZHVsZXtBY3Rpdml0eURpYWxvZ0RhdGF9ID0gJERlY29kZWQ7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IGNoZWNrbGlzdCB0ZW1wbGF0ZSBJRHMgKG46bSByZWxhdGlvbnNoaXApCiAgICAkU2NoZWR1bGV7Q2hlY2tsaXN0VGVtcGxhdGVJRHN9ID0gJFNlbGYtPl9DaGVja2xpc3RUZW1wbGF0ZXNHZXQoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gJFBhcmFte1NjaGVkdWxlcklEfSwKICAgICk7CgogICAgIyBHZXQgRHluYW1pY0ZpZWxkIHZhbHVlcwogICAgJFNjaGVkdWxle0R5bmFtaWNGaWVsZHN9ID0gJFNlbGYtPl9EeW5hbWljRmllbGRWYWx1ZXNHZXQoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gJFBhcmFte1NjaGVkdWxlcklEfSwKICAgICk7CgogICAgcmV0dXJuICVTY2hlZHVsZTsKfQoKPWhlYWQyIFNjaGVkdWxlclVwZGF0ZSgpCgpVcGRhdGUgYW4gZXhpc3Rpbmcgc2NoZWR1bGUuCgogICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJVcGRhdGUoCiAgICAgICAgU2NoZWR1bGVySUQgICAgICAgICAgPT4gMTIzLAogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdVcGRhdGVkIE5hbWUnLAogICAgICAgICMgLi4uIGFsbCBvdGhlciBmaWVsZHMgZnJvbSBTY2hlZHVsZXJBZGQKICAgICAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAxLAogICAgKTsKClJldHVybnMgMSBvbiBzdWNjZXNzLgoKPWN1dAoKc3ViIFNjaGVkdWxlclVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CiAgICBteSAkREJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBDaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoU2NoZWR1bGVySUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIEdldCBjdXJyZW50IHNjaGVkdWxlIGRhdGEKICAgIG15ICVPbGRTY2hlZHVsZSA9ICRTZWxmLT5TY2hlZHVsZXJHZXQoIFNjaGVkdWxlcklEID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0gKTsKICAgIHJldHVybiBpZiAhJU9sZFNjaGVkdWxlOwoKICAgICMgTWVyZ2Ugd2l0aCBuZXcgZGF0YSAoa2VlcCBvbGQgdmFsdWVzIGlmIG5vdCBwcm92aWRlZCkKICAgIGZvciBteSAkRmllbGQgKHF3KE5hbWUgU2NoZWR1bGVNb2RlIFRpdGxlIFF1ZXVlSUQgUHJpb3JpdHlJRCBUeXBlSUQgU2VydmljZUlEIFNMQUlECiAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gT3duZXJJRCBSZXNwb25zaWJsZUlEIEJvZHkgUHJvY2Vzc0lEIEFjdGl2aXR5SUQKICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0RhdGEgU2NoZWR1bGVUeXBlIFNjaGVkdWxlQ29uZmlnCiAgICAgICAgICAgICAgICAgICAgICAgRW5kVHlwZSBNYXhPY2N1cnJlbmNlcyBFbmREYXRlIFZhbGlkSUQpKSB7CiAgICAgICAgJFBhcmFteyRGaWVsZH0gLy89ICRPbGRTY2hlZHVsZXskRmllbGR9OwogICAgfQoKICAgICMgQ29udmVydCBlbXB0eSBzdHJpbmdzIHRvIHVuZGVmIGZvciBmaWVsZHMgdGhhdCByZXF1aXJlIE5VTEwgKERCIHJlamVjdHMgJycpCiAgICBmb3IgbXkgJEZpZWxkIChxdyhRdWV1ZUlEIFByaW9yaXR5SUQgVHlwZUlEIFNlcnZpY2VJRCBTTEFJRCBPd25lcklEIFJlc3BvbnNpYmxlSUQgTWF4T2NjdXJyZW5jZXMgRW5kRGF0ZSkpIHsKICAgICAgICBpZiAoIGRlZmluZWQgJFBhcmFteyRGaWVsZH0gJiYgJFBhcmFteyRGaWVsZH0gZXEgJycgKSB7CiAgICAgICAgICAgICRQYXJhbXskRmllbGR9ID0gdW5kZWY7CiAgICAgICAgfQogICAgfQoKICAgICMgRW5jb2RlIEpTT04gZmllbGRzCiAgICBteSAkSlNPTk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyk7CgogICAgbXkgJFNjaGVkdWxlQ29uZmlnSlNPTiA9IHJlZiAkUGFyYW17U2NoZWR1bGVDb25maWd9IGVxICdIQVNIJwogICAgICAgID8gJEpTT05PYmplY3QtPkVuY29kZSggRGF0YSA9PiAkUGFyYW17U2NoZWR1bGVDb25maWd9ICkKICAgICAgICA6ICRQYXJhbXtTY2hlZHVsZUNvbmZpZ307CgogICAgbXkgJEFjdGl2aXR5RGlhbG9nRGF0YUpTT04gPSByZWYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRGF0YX0gZXEgJ0hBU0gnCiAgICAgICAgPyAkSlNPTk9iamVjdC0+RW5jb2RlKCBEYXRhID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0RhdGF9ICkKICAgICAgICA6ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0RhdGF9OwoKICAgICMgUmVjYWxjdWxhdGUgbmV4dF9leGVjdXRpb24gaWYgc2NoZWR1bGUgY2hhbmdlZAogICAgbXkgJE5leHRFeGVjdXRpb24gPSAkT2xkU2NoZWR1bGV7TmV4dEV4ZWN1dGlvbn07CiAgICBpZiAoICRQYXJhbXtTY2hlZHVsZVR5cGV9IG5lICRPbGRTY2hlZHVsZXtTY2hlZHVsZVR5cGV9CiAgICAgICAgfHwgJFNjaGVkdWxlQ29uZmlnSlNPTiBuZSAkSlNPTk9iamVjdC0+RW5jb2RlKCBEYXRhID0+ICRPbGRTY2hlZHVsZXtTY2hlZHVsZUNvbmZpZ30gKSApCiAgICB7CiAgICAgICAgJE5leHRFeGVjdXRpb24gPSAkU2VsZi0+Q2FsY3VsYXRlTmV4dEV4ZWN1dGlvbigKICAgICAgICAgICAgU2NoZWR1bGVUeXBlICAgPT4gJFBhcmFte1NjaGVkdWxlVHlwZX0sCiAgICAgICAgICAgIFNjaGVkdWxlQ29uZmlnID0+ICRQYXJhbXtTY2hlZHVsZUNvbmZpZ30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEVuc3VyZSBOZXh0RXhlY3V0aW9uIGlzIHVuZGVmIGlmIGVtcHR5IChEQVRFIGZpZWxkIHJlamVjdHMgJycpCiAgICAkTmV4dEV4ZWN1dGlvbiA9IHVuZGVmIGlmIGRlZmluZWQgJE5leHRFeGVjdXRpb24gJiYgJE5leHRFeGVjdXRpb24gZXEgJyc7CgogICAgIyBDbGVhciBlcnJvciBvbiB1cGRhdGUKICAgIG15ICRDbGVhckVycm9yID0gZXhpc3RzICRQYXJhbXtDbGVhckVycm9yfSA/ICRQYXJhbXtDbGVhckVycm9yfSA6IDE7CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFVQREFURSB0aWNrZXRfc2NoZWR1bGVyCiAgICAgICAgICAgIFNFVCBuYW1lID0gPywgc2NoZWR1bGVfbW9kZSA9ID8sIHRpdGxlID0gPywgcXVldWVfaWQgPSA/LCBwcmlvcml0eV9pZCA9ID8sCiAgICAgICAgICAgICAgICB0eXBlX2lkID0gPywgc2VydmljZV9pZCA9ID8sIHNsYV9pZCA9ID8sIGN1c3RvbWVyX3VzZXJfbG9naW4gPSA/LAogICAgICAgICAgICAgICAgb3duZXJfaWQgPSA/LCByZXNwb25zaWJsZV9pZCA9ID8sIGJvZHkgPSA/LAogICAgICAgICAgICAgICAgcHJvY2Vzc19pZCA9ID8sIGFjdGl2aXR5X2lkID0gPywgYWN0aXZpdHlfZGlhbG9nX2RhdGEgPSA/LAogICAgICAgICAgICAgICAgc2NoZWR1bGVfdHlwZSA9ID8sIHNjaGVkdWxlX2NvbmZpZyA9ID8sCiAgICAgICAgICAgICAgICBlbmRfdHlwZSA9ID8sIG1heF9vY2N1cnJlbmNlcyA9ID8sIGVuZF9kYXRlID0gPywKICAgICAgICAgICAgICAgIG5leHRfZXhlY3V0aW9uID0gPywgdmFsaWRfaWQgPSA/LAogICAgICAgICAgICAgICAgbGFzdF9lcnJvciA9IENBU0UgV0hFTiA/ID0gMSBUSEVOIE5VTEwgRUxTRSBsYXN0X2Vycm9yIEVORCwKICAgICAgICAgICAgICAgIGxhc3RfZXJyb3JfdGltZSA9IENBU0UgV0hFTiA/ID0gMSBUSEVOIE5VTEwgRUxTRSBsYXN0X2Vycm9yX3RpbWUgRU5ELAogICAgICAgICAgICAgICAgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPwogICAgICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte1NjaGVkdWxlTW9kZX0sCiAgICAgICAgICAgIFwkUGFyYW17VGl0bGV9LAogICAgICAgICAgICBcJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICBcJFBhcmFte1ByaW9yaXR5SUR9LAogICAgICAgICAgICBcJFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgIFwkUGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtTTEFJRH0sCiAgICAgICAgICAgIFwkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59LAogICAgICAgICAgICBcJFBhcmFte093bmVySUR9LAogICAgICAgICAgICBcJFBhcmFte1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICAgICBcJFBhcmFte0JvZHl9LAogICAgICAgICAgICBcJFBhcmFte1Byb2Nlc3NJRH0sCiAgICAgICAgICAgIFwkUGFyYW17QWN0aXZpdHlJRH0sCiAgICAgICAgICAgIFwkQWN0aXZpdHlEaWFsb2dEYXRhSlNPTiwKICAgICAgICAgICAgXCRQYXJhbXtTY2hlZHVsZVR5cGV9LAogICAgICAgICAgICBcJFNjaGVkdWxlQ29uZmlnSlNPTiwKICAgICAgICAgICAgXCRQYXJhbXtFbmRUeXBlfSwKICAgICAgICAgICAgXCRQYXJhbXtNYXhPY2N1cnJlbmNlc30sCiAgICAgICAgICAgIFwkUGFyYW17RW5kRGF0ZX0sCiAgICAgICAgICAgIFwkTmV4dEV4ZWN1dGlvbiwKICAgICAgICAgICAgXCRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgXCRDbGVhckVycm9yLAogICAgICAgICAgICBcJENsZWFyRXJyb3IsCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtTY2hlZHVsZXJJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBVcGRhdGUgY2hlY2tsaXN0IHRlbXBsYXRlIElEcyBpZiBwcm92aWRlZCAobjptIHJlbGF0aW9uc2hpcCkKICAgIGlmICggZXhpc3RzICRQYXJhbXtDaGVja2xpc3RUZW1wbGF0ZUlEc30gKSB7CiAgICAgICAgJFNlbGYtPl9DaGVja2xpc3RUZW1wbGF0ZXNEZWxldGUoIFNjaGVkdWxlcklEID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0gKTsKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte0NoZWNrbGlzdFRlbXBsYXRlSURzfSApICkgewogICAgICAgICAgICAkU2VsZi0+X0NoZWNrbGlzdFRlbXBsYXRlc1NldCgKICAgICAgICAgICAgICAgIFNjaGVkdWxlcklEICAgICAgICAgID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0sCiAgICAgICAgICAgICAgICBDaGVja2xpc3RUZW1wbGF0ZUlEcyA9PiAkUGFyYW17Q2hlY2tsaXN0VGVtcGxhdGVJRHN9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIFVwZGF0ZSBEeW5hbWljRmllbGQgdmFsdWVzIGlmIHByb3ZpZGVkCiAgICBpZiAoIGV4aXN0cyAkUGFyYW17RHluYW1pY0ZpZWxkc30gKSB7CiAgICAgICAgJFNlbGYtPl9EeW5hbWljRmllbGRWYWx1ZXNEZWxldGUoIFNjaGVkdWxlcklEID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0gKTsKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RHluYW1pY0ZpZWxkc30gKSApIHsKICAgICAgICAgICAgJFNlbGYtPl9EeW5hbWljRmllbGRWYWx1ZXNTZXQoCiAgICAgICAgICAgICAgICBTY2hlZHVsZXJJRCAgID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+ICRQYXJhbXtEeW5hbWljRmllbGRzfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBTY2hlZHVsZXJEZWxldGUoKQoKRGVsZXRlIGEgc2NoZWR1bGUuCgogICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJEZWxldGUoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKUmV0dXJucyAxIG9uIHN1Y2Nlc3MuCgo9Y3V0CgpzdWIgU2NoZWR1bGVyRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKICAgIG15ICREQk9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoICEkUGFyYW17U2NoZWR1bGVySUR9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2NoZWR1bGVySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIERlbGV0ZSBjaGVja2xpc3QgYXNzaWdubWVudHMgZmlyc3QgKGZvcmVpZ24ga2V5KQogICAgJFNlbGYtPl9DaGVja2xpc3RUZW1wbGF0ZXNEZWxldGUoIFNjaGVkdWxlcklEID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0gKTsKCiAgICAjIERlbGV0ZSBEeW5hbWljRmllbGQgdmFsdWVzIChmb3JlaWduIGtleSkKICAgICRTZWxmLT5fRHluYW1pY0ZpZWxkVmFsdWVzRGVsZXRlKCBTY2hlZHVsZXJJRCA9PiAkUGFyYW17U2NoZWR1bGVySUR9ICk7CgogICAgIyBEZWxldGUgaGlzdG9yeSBlbnRyaWVzIChmb3JlaWduIGtleSkKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSB0aWNrZXRfc2NoZWR1bGVyX2hpc3RvcnkgV0hFUkUgc2NoZWR1bGVyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U2NoZWR1bGVySUR9IF0sCiAgICApOwoKICAgICMgRGVsZXRlIHNjaGVkdWxlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gdGlja2V0X3NjaGVkdWxlciBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1NjaGVkdWxlcklEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFNjaGVkdWxlckxpc3QoKQoKR2V0IGxpc3Qgb2Ygc2NoZWR1bGVzLgoKICAgIG15IEBMaXN0ID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyTGlzdCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIFZhbGlkSUQgID0+IDEsICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBmaWx0ZXIgYnkgdmFsaWQKICAgICAgICBRdWV1ZUlEICA9PiA1LCAgICAgICAgICAgICAgIyBvcHRpb25hbCwgZmlsdGVyIGJ5IHF1ZXVlCiAgICAgICAgTW9kZSAgICAgPT4gJ3RpY2tldCcsICAgICAgICMgb3B0aW9uYWwsIHRpY2tldCBvciBwcm9jZXNzCiAgICAgICAgU2VhcmNoICAgPT4gJ21haW50ZW5hbmNlJywgICMgb3B0aW9uYWwsIHNlYXJjaCBpbiBuYW1lCiAgICApOwoKUmV0dXJucyBhcnJheSBvZiBoYXNocmVmcyB3aXRoIGJhc2ljIHNjaGVkdWxlIGRhdGEuCgo9Y3V0CgpzdWIgU2NoZWR1bGVyTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CiAgICBteSAkREJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSBAQ29uZGl0aW9uczsKICAgIG15IEBCaW5kOwoKICAgICMgRmlsdGVyIGJ5IFZhbGlkSUQgKG9ubHkgaWYgYSBzcGVjaWZpYyB2YWx1ZSBpcyBzZWxlY3RlZCwgbm90IGVtcHR5IHN0cmluZykKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VmFsaWRJRH0gJiYgJFBhcmFte1ZhbGlkSUR9IG5lICcnICkgewogICAgICAgIHB1c2ggQENvbmRpdGlvbnMsICd2YWxpZF9pZCA9ID8nOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17VmFsaWRJRH07CiAgICB9CgogICAgIyBGaWx0ZXIgYnkgUXVldWVJRAogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgcHVzaCBAQ29uZGl0aW9ucywgJ3F1ZXVlX2lkID0gPyc7CiAgICAgICAgcHVzaCBAQmluZCwgXCRQYXJhbXtRdWV1ZUlEfTsKICAgIH0KCiAgICAjIEZpbHRlciBieSBNb2RlCiAgICBpZiAoICRQYXJhbXtNb2RlfSApIHsKICAgICAgICBwdXNoIEBDb25kaXRpb25zLCAnc2NoZWR1bGVfbW9kZSA9ID8nOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17TW9kZX07CiAgICB9CgogICAgIyBTZWFyY2ggaW4gbmFtZQogICAgaWYgKCAkUGFyYW17U2VhcmNofSApIHsKICAgICAgICBteSAkU2VhcmNoID0gJyUnIC4gJFBhcmFte1NlYXJjaH0gLiAnJSc7CiAgICAgICAgcHVzaCBAQ29uZGl0aW9ucywgJ25hbWUgTElLRSA/JzsKICAgICAgICBwdXNoIEBCaW5kLCBcJFNlYXJjaDsKICAgIH0KCiAgICBteSAkU1FMID0gJwogICAgICAgIFNFTEVDVCBpZCwgbmFtZSwgc2NoZWR1bGVfbW9kZSwgcXVldWVfaWQsIHNjaGVkdWxlX3R5cGUsIG5leHRfZXhlY3V0aW9uLAogICAgICAgICAgICAgICBsYXN0X2V4ZWN1dGlvbiwgZXhlY3V0aW9uX2NvdW50LCB2YWxpZF9pZCwgY3JlYXRlX2J5LCBsYXN0X2Vycm9yX3RpbWUKICAgICAgICBGUk9NIHRpY2tldF9zY2hlZHVsZXInOwoKICAgIGlmIChAQ29uZGl0aW9ucykgewogICAgICAgICRTUUwgLj0gJyBXSEVSRSAnIC4gam9pbiggJyBBTkQgJywgQENvbmRpdGlvbnMgKTsKICAgIH0KCiAgICAkU1FMIC49ICcgT1JERVIgQlkgbmFtZSBBU0MnOwoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBMaXN0LCB7CiAgICAgICAgICAgIElEICAgICAgICAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIFNjaGVkdWxlTW9kZSAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIFNjaGVkdWxlVHlwZSAgID0+ICRSb3dbNF0sCiAgICAgICAgICAgIE5leHRFeGVjdXRpb24gID0+ICRSb3dbNV0sCiAgICAgICAgICAgIExhc3RFeGVjdXRpb24gID0+ICRSb3dbNl0sCiAgICAgICAgICAgIEV4ZWN1dGlvbkNvdW50ID0+ICRSb3dbN10sCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgID0+ICRSb3dbOF0sCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICRSb3dbOV0sCiAgICAgICAgICAgIEhhc0Vycm9yICAgICAgID0+ICRSb3dbMTBdID8gMSA6IDAsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCj1oZWFkMiBDYWxjdWxhdGVOZXh0RXhlY3V0aW9uKCkKCkNhbGN1bGF0ZSB0aGUgbmV4dCBleGVjdXRpb24gdGltZSBmb3IgYSBzY2hlZHVsZS4KCiAgICBteSAkTmV4dEV4ZWN1dGlvbiA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkNhbGN1bGF0ZU5leHRFeGVjdXRpb24oCiAgICAgICAgU2NoZWR1bGVUeXBlICAgPT4gJ3dlZWtseScsCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgICAgICB3ZWVrZGF5cyA9PiBbMSwgMywgNV0sICAgIyBNb24sIFdlZCwgRnJpCiAgICAgICAgICAgIHRpbWUgICAgID0+ICcwOTowMCcsCiAgICAgICAgICAgIHRpbWV6b25lID0+ICdFdXJvcGUvQmVybGluJywKICAgICAgICB9LAogICAgICAgIExhc3RFeGVjdXRpb24gID0+ICcyMDI2LTAxLTAxIDA5OjAwOjAwJywgICMgb3B0aW9uYWwsIGNhbGN1bGF0ZSBmcm9tIHRoaXMgdGltZQogICAgKTsKClJldHVybnMgZGF0ZXRpbWUgc3RyaW5nIGxpa2UgJzIwMjYtMDEtMTUgMDk6MDA6MDAnIG9yIHVuZGVmIG9uIGVycm9yLgoKPWN1dAoKc3ViIENhbGN1bGF0ZU5leHRFeGVjdXRpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTG9nT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgaWYgKCAhJFBhcmFte1NjaGVkdWxlVHlwZX0gfHwgISRQYXJhbXtTY2hlZHVsZUNvbmZpZ30gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTY2hlZHVsZVR5cGUgYW5kIFNjaGVkdWxlQ29uZmlnIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJENvbmZpZyA9ICRQYXJhbXtTY2hlZHVsZUNvbmZpZ307CiAgICBpZiAoICFyZWYgJENvbmZpZyApIHsKICAgICAgICAkQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKS0+RGVjb2RlKCBEYXRhID0+ICRDb25maWcgKTsKICAgICAgICBpZiAoICEkQ29uZmlnIHx8ICFyZWYgJENvbmZpZyApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IENvcnJ1cHQgc2NoZWR1bGVfY29uZmlnIEpTT04gZm9yIFNjaGVkdWxlVHlwZSAnJFBhcmFte1NjaGVkdWxlVHlwZX0nIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIEdldCB0aW1lem9uZSAoZGVmYXVsdCBmcm9tIFN5c0NvbmZpZykKICAgIG15ICRUaW1lem9uZSA9ICRDb25maWctPnt0aW1lem9uZX0KICAgICAgICB8fCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldFNjaGVkdWxlcjo6RGVmYXVsdFRpbWV6b25lJykKICAgICAgICB8fCAnRXVyb3BlL0Jlcmxpbic7CgogICAgIyBHZXQgdGltZSBmcm9tIGNvbmZpZwogICAgbXkgJFRpbWUgPSAkQ29uZmlnLT57dGltZX0gfHwgJzA5OjAwJzsKICAgIG15ICggJEhvdXIsICRNaW51dGUgKSA9IHNwbGl0IC86LywgJFRpbWU7CiAgICAkSG91ciAgIC8vPSA5OwogICAgJE1pbnV0ZSAvLz0gMDsKCiAgICAjIEdldCBjdXJyZW50IHRpbWUgaW4gdGltZXpvbmUKICAgIG15ICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFRpbWVab25lID0+ICRUaW1lem9uZSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkTm93RGV0YWlscyA9ICROb3ctPkdldCgpOwoKICAgICMgU3RhcnQgZnJvbSBsYXN0IGV4ZWN1dGlvbiBvciBub3cKICAgIG15ICRCYXNlVGltZTsKICAgIG15ICRDb21wYXJlVGltZTsgICAgIyBUaW1lIHRvIGNvbXBhcmUgYWdhaW5zdCAobXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gdGhpcykKCiAgICBpZiAoICRQYXJhbXtMYXN0RXhlY3V0aW9ufSApIHsKICAgICAgICAjIExhc3RFeGVjdXRpb24gaXMgc3RvcmVkIGluIFVUQywgbG9hZCBpdCBhcyBVVEMgZmlyc3QKICAgICAgICAkQmFzZVRpbWUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICRQYXJhbXtMYXN0RXhlY3V0aW9ufSwKICAgICAgICAgICAgICAgIFRpbWVab25lID0+ICdVVEMnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgIyBDb252ZXJ0IHRvIHRhcmdldCB0aW1lem9uZSBmb3IgY2FsY3VsYXRpb24KICAgICAgICAkQmFzZVRpbWUtPlRvVGltZVpvbmUoIFRpbWVab25lID0+ICRUaW1lem9uZSApOwoKICAgICAgICAjIEZvciBuZXh0IGV4ZWN1dGlvbiBjYWxjdWxhdGlvbiwgd2UgbmVlZCB0byBmaW5kIGEgdGltZSBBRlRFUiBMYXN0RXhlY3V0aW9uCiAgICAgICAgJENvbXBhcmVUaW1lID0gJEJhc2VUaW1lLT5DbG9uZSgpOwoKICAgICAgICAjIERTVCBkb3VibGUtZXhlY3V0aW9uIHByZXZlbnRpb246CiAgICAgICAgIyBJZiB0aGUgVVRDIG9mZnNldCBjaGFuZ2VzIGJldHdlZW4gd2hlbiBuZXh0X2V4ZWN1dGlvbiB3YXMgY2FsY3VsYXRlZCBhbmQKICAgICAgICAjIHdoZW4gaXQncyByZWNhbGN1bGF0ZWQsIHRoZSBzYW1lIGNhbGVuZGFyIGRheSBjb3VsZCBhcHBlYXIgYXMgImluIHRoZSBmdXR1cmUiCiAgICAgICAgIyBhZ2Fpbi4gRml4IGRlcGVuZHMgb24gc2NoZWR1bGUgdHlwZToKICAgICAgICAjIC0gZGFpbHkvd2Vla2x5OiBzZXQgQ29tcGFyZVRpbWUgdG8gc2NoZWR1bGVkIEhIOk1NIChzYW1lIGRheSwgZXhhY3QgdGltZSkKICAgICAgICAjIC0gbW9udGhseS95ZWFybHk6IGFkZCAxIGRheSB0byBDb21wYXJlVGltZSB0byBza2lwIHBhc3QgdGhlIGV4ZWN1dGlvbiBkYXkKICAgICAgICAjIC0gaW50ZXJ2YWw6IG5vIGZpeCBuZWVkZWQgKHVzZXMgc3RhcnRfZGF0ZSArIE4gZGF5cyBhcml0aG1ldGljKQogICAgICAgIGlmICggJFBhcmFte1NjaGVkdWxlVHlwZX0gZXEgJ2RhaWx5JyB8fCAkUGFyYW17U2NoZWR1bGVUeXBlfSBlcSAnd2Vla2x5JyApIHsKICAgICAgICAgICAgJENvbXBhcmVUaW1lLT5TZXQoCiAgICAgICAgICAgICAgICBIb3VyICAgPT4gJEhvdXIsCiAgICAgICAgICAgICAgICBNaW51dGUgPT4gJE1pbnV0ZSwKICAgICAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtTY2hlZHVsZVR5cGV9ID1+IC9eKG1vbnRobHl8eWVhcmx5KS8gKSB7CiAgICAgICAgICAgICRDb21wYXJlVGltZS0+QWRkKCBEYXlzID0+IDEgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQmFzZVRpbWUgPSAkTm93LT5DbG9uZSgpOwogICAgICAgICMgRm9yIGluaXRpYWwgY2FsY3VsYXRpb24sIGZpbmQgdGltZSBhZnRlciBOb3cKICAgICAgICAkQ29tcGFyZVRpbWUgPSAkTm93LT5DbG9uZSgpOwogICAgfQoKICAgIG15ICROZXh0RXhlY3V0aW9uOwoKICAgICMgQ2FsY3VsYXRlIGJhc2VkIG9uIHNjaGVkdWxlIHR5cGUKICAgIGlmICggJFBhcmFte1NjaGVkdWxlVHlwZX0gZXEgJ2RhaWx5JyApIHsKICAgICAgICAkTmV4dEV4ZWN1dGlvbiA9ICRTZWxmLT5fQ2FsY3VsYXRlRGFpbHkoCiAgICAgICAgICAgIEJhc2VUaW1lICAgID0+ICRCYXNlVGltZSwKICAgICAgICAgICAgSG91ciAgICAgICAgPT4gJEhvdXIsCiAgICAgICAgICAgIE1pbnV0ZSAgICAgID0+ICRNaW51dGUsCiAgICAgICAgICAgIENvbXBhcmVUaW1lID0+ICRDb21wYXJlVGltZSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17U2NoZWR1bGVUeXBlfSBlcSAnd2Vla2x5JyApIHsKICAgICAgICAkTmV4dEV4ZWN1dGlvbiA9ICRTZWxmLT5fQ2FsY3VsYXRlV2Vla2x5KAogICAgICAgICAgICBCYXNlVGltZSAgICA9PiAkQmFzZVRpbWUsCiAgICAgICAgICAgIEhvdXIgICAgICAgID0+ICRIb3VyLAogICAgICAgICAgICBNaW51dGUgICAgICA9PiAkTWludXRlLAogICAgICAgICAgICBXZWVrZGF5cyAgICA9PiAkQ29uZmlnLT57d2Vla2RheXN9IHx8IFsxXSwKICAgICAgICAgICAgQ29tcGFyZVRpbWUgPT4gJENvbXBhcmVUaW1lLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtTY2hlZHVsZVR5cGV9IGVxICdtb250aGx5X2RheScgKSB7CiAgICAgICAgJE5leHRFeGVjdXRpb24gPSAkU2VsZi0+X0NhbGN1bGF0ZU1vbnRobHlEYXkoCiAgICAgICAgICAgIEJhc2VUaW1lICAgID0+ICRCYXNlVGltZSwKICAgICAgICAgICAgSG91ciAgICAgICAgPT4gJEhvdXIsCiAgICAgICAgICAgIE1pbnV0ZSAgICAgID0+ICRNaW51dGUsCiAgICAgICAgICAgIERheSAgICAgICAgID0+ICRDb25maWctPntkYXl9IHx8IDEsCiAgICAgICAgICAgIENvbXBhcmVUaW1lID0+ICRDb21wYXJlVGltZSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17U2NoZWR1bGVUeXBlfSBlcSAnbW9udGhseV93ZWVrZGF5JyApIHsKICAgICAgICAkTmV4dEV4ZWN1dGlvbiA9ICRTZWxmLT5fQ2FsY3VsYXRlTW9udGhseVdlZWtkYXkoCiAgICAgICAgICAgIEJhc2VUaW1lICAgID0+ICRCYXNlVGltZSwKICAgICAgICAgICAgSG91ciAgICAgICAgPT4gJEhvdXIsCiAgICAgICAgICAgIE1pbnV0ZSAgICAgID0+ICRNaW51dGUsCiAgICAgICAgICAgIE50aCAgICAgICAgID0+ICRDb25maWctPntudGh9IHx8IDEsCiAgICAgICAgICAgIFdlZWtkYXkgICAgID0+ICRDb25maWctPnt3ZWVrZGF5fSB8fCAnbW9uJywKICAgICAgICAgICAgQ29tcGFyZVRpbWUgPT4gJENvbXBhcmVUaW1lLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtTY2hlZHVsZVR5cGV9IGVxICdtb250aGx5X3dlZWtkYXlfb2Zmc2V0JyApIHsKICAgICAgICAkTmV4dEV4ZWN1dGlvbiA9ICRTZWxmLT5fQ2FsY3VsYXRlTW9udGhseVdlZWtkYXlPZmZzZXQoCiAgICAgICAgICAgIEJhc2VUaW1lICAgID0+ICRCYXNlVGltZSwKICAgICAgICAgICAgSG91ciAgICAgICAgPT4gJEhvdXIsCiAgICAgICAgICAgIE1pbnV0ZSAgICAgID0+ICRNaW51dGUsCiAgICAgICAgICAgIE50aCAgICAgICAgID0+ICRDb25maWctPntudGh9IHx8IDEsCiAgICAgICAgICAgIFdlZWtkYXkgICAgID0+ICRDb25maWctPnt3ZWVrZGF5fSB8fCAnbW9uJywKICAgICAgICAgICAgT2Zmc2V0RGF5cyAgPT4gJENvbmZpZy0+e29mZnNldF9kYXlzfSB8fCAwLAogICAgICAgICAgICBDb21wYXJlVGltZSA9PiAkQ29tcGFyZVRpbWUsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte1NjaGVkdWxlVHlwZX0gZXEgJ3llYXJseScgKSB7CiAgICAgICAgJE5leHRFeGVjdXRpb24gPSAkU2VsZi0+X0NhbGN1bGF0ZVllYXJseSgKICAgICAgICAgICAgQmFzZVRpbWUgICAgPT4gJEJhc2VUaW1lLAogICAgICAgICAgICBIb3VyICAgICAgICA9PiAkSG91ciwKICAgICAgICAgICAgTWludXRlICAgICAgPT4gJE1pbnV0ZSwKICAgICAgICAgICAgTW9udGggICAgICAgPT4gJENvbmZpZy0+e21vbnRofSB8fCAxLAogICAgICAgICAgICBEYXkgICAgICAgICA9PiAkQ29uZmlnLT57ZGF5fSB8fCAxLAogICAgICAgICAgICBDb21wYXJlVGltZSA9PiAkQ29tcGFyZVRpbWUsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte1NjaGVkdWxlVHlwZX0gZXEgJ2ludGVydmFsJyApIHsKICAgICAgICAkTmV4dEV4ZWN1dGlvbiA9ICRTZWxmLT5fQ2FsY3VsYXRlSW50ZXJ2YWwoCiAgICAgICAgICAgIEJhc2VUaW1lICAgID0+ICRCYXNlVGltZSwKICAgICAgICAgICAgSG91ciAgICAgICAgPT4gJEhvdXIsCiAgICAgICAgICAgIE1pbnV0ZSAgICAgID0+ICRNaW51dGUsCiAgICAgICAgICAgIEludGVydmFsICAgID0+ICRDb25maWctPntpbnRlcnZhbH0gfHwgNywKICAgICAgICAgICAgU3RhcnREYXRlICAgPT4gJENvbmZpZy0+e3N0YXJ0X2RhdGV9LAogICAgICAgICAgICBDb21wYXJlVGltZSA9PiAkQ29tcGFyZVRpbWUsCiAgICAgICAgICAgIFRpbWV6b25lICAgID0+ICRUaW1lem9uZSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5rbm93biBTY2hlZHVsZVR5cGU6ICRQYXJhbXtTY2hlZHVsZVR5cGV9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gaWYgISROZXh0RXhlY3V0aW9uOwoKICAgICMgQ29udmVydCB0byBVVEMgZm9yIHN0b3JhZ2UKICAgICROZXh0RXhlY3V0aW9uLT5Ub1RpbWVab25lKCBUaW1lWm9uZSA9PiAnVVRDJyApOwogICAgcmV0dXJuICROZXh0RXhlY3V0aW9uLT5Ub1N0cmluZygpOwp9Cgo9aGVhZDIgRXhlY3V0ZVNjaGVkdWxlcigpCgpFeGVjdXRlIGEgc2luZ2xlIHNjaGVkdWxlIC0gY3JlYXRlIHRoZSB0aWNrZXQuCgogICAgbXkgJFRpY2tldElEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+RXhlY3V0ZVNjaGVkdWxlcigKICAgICAgICBTY2hlZHVsZXJJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zIFRpY2tldElEIG9uIHN1Y2Nlc3MsIHVuZGVmIG9uIGZhaWx1cmUuCgo9Y3V0CgpzdWIgRXhlY3V0ZVNjaGVkdWxlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgaWYgKCAhJFBhcmFte1NjaGVkdWxlcklEfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNjaGVkdWxlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgc2NoZWR1bGUgZGF0YQogICAgbXkgJVNjaGVkdWxlID0gJFNlbGYtPlNjaGVkdWxlckdldCggU2NoZWR1bGVySUQgPT4gJFBhcmFte1NjaGVkdWxlcklEfSApOwogICAgaWYgKCAhJVNjaGVkdWxlICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlNjaGVkdWxlIElEICRQYXJhbXtTY2hlZHVsZXJJRH0gbm90IGZvdW5kISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBDaGVjayBpZiBzY2hlZHVsZSBpcyB2YWxpZAogICAgaWYgKCAkU2NoZWR1bGV7VmFsaWRJRH0gIT0gMSApIHsKICAgICAgICByZXR1cm47ICAgICMgU2tpcCBpbmFjdGl2ZSBzY2hlZHVsZXMgc2lsZW50bHkKICAgIH0KCiAgICAjIEFib3J0IGlmIGNvbmZpZyBpcyBjb3JydXB0CiAgICBpZiAoICRTY2hlZHVsZXtDb25maWdDb3JydXB0fSApIHsKICAgICAgICBteSAkRXJyb3IgPSAiQ29ycnVwdCBKU09OIGNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQgZm9yIHNjaGVkdWxlICckU2NoZWR1bGV7TmFtZX0nIChJRDogJFNjaGVkdWxle0lEfSkuICIKICAgICAgICAgICAgLiAiUGxlYXNlIGVkaXQgYW5kIHJlLXNhdmUgdGhlIHNjaGVkdWxlIHRvIGZpeCB0aGUgY29uZmlndXJhdGlvbi4iOwogICAgICAgICRTZWxmLT5fU2V0U2NoZWR1bGVyRXJyb3IoCiAgICAgICAgICAgIFNjaGVkdWxlcklEID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0sCiAgICAgICAgICAgIEVycm9yICAgICAgID0+ICRFcnJvciwKICAgICAgICApOwogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRpY2tldFNjaGVkdWxlcjogJEVycm9yIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIEdldCBjdXJyZW50IHRpbWUgLSB1c2Ugc2ltdWxhdGVkIHRpbWUgaWYgcHJvdmlkZWQKICAgIG15ICROb3c7CiAgICBpZiAoICRQYXJhbXtTaW11bGF0ZVRpbWV9ICkgewogICAgICAgICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICRQYXJhbXtTaW11bGF0ZVRpbWV9IH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgIH0KCiAgICAjIENoZWNrIGVuZCBjb25kaXRpb25zCiAgICBpZiAoICRTY2hlZHVsZXtFbmRUeXBlfSBlcSAnb2NjdXJyZW5jZXMnICYmICRTY2hlZHVsZXtNYXhPY2N1cnJlbmNlc30gKSB7CiAgICAgICAgaWYgKCAkU2NoZWR1bGV7RXhlY3V0aW9uQ291bnR9ID49ICRTY2hlZHVsZXtNYXhPY2N1cnJlbmNlc30gKSB7CiAgICAgICAgICAgICMgRGVhY3RpdmF0ZSBzY2hlZHVsZQogICAgICAgICAgICAkU2VsZi0+X0RlYWN0aXZhdGVTY2hlZHVsZSggU2NoZWR1bGVySUQgPT4gJFBhcmFte1NjaGVkdWxlcklEfSApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGV7RW5kVHlwZX0gZXEgJ2RhdGUnICYmICRTY2hlZHVsZXtFbmREYXRlfSApIHsKICAgICAgICBteSAkRW5kID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7IFN0cmluZyA9PiAkU2NoZWR1bGV7RW5kRGF0ZX0gfSwKICAgICAgICApOwogICAgICAgIGlmICggJE5vdy0+Q29tcGFyZSggRGF0ZVRpbWVPYmplY3QgPT4gJEVuZCApID4gMCApIHsKICAgICAgICAgICAgIyBEZWFjdGl2YXRlIHNjaGVkdWxlCiAgICAgICAgICAgICRTZWxmLT5fRGVhY3RpdmF0ZVNjaGVkdWxlKCBTY2hlZHVsZXJJRCA9PiAkUGFyYW17U2NoZWR1bGVySUR9ICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBDcmVhdGUgdGlja2V0IChvciBzaW11bGF0ZSBpZiBOb1RpY2tldCBpcyBzZXQpCiAgICBteSAkVGlja2V0SUQ7CiAgICBteSAkRXJyb3I7CgogICAgaWYgKCAkUGFyYW17Tm9UaWNrZXR9ICkgewogICAgICAgICMgU2ltdWxhdGlvbiBtb2RlIC0gZG9uJ3QgY3JlYXRlIGFjdHVhbCB0aWNrZXQKICAgICAgICAkVGlja2V0SUQgPSAtMTsgICAgIyBQc2V1ZG8tSUQgdG8gaW5kaWNhdGUgc2ltdWxhdGlvbgogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGV7U2NoZWR1bGVNb2RlfSBlcSAncHJvY2VzcycgKSB7CiAgICAgICAgKCAkVGlja2V0SUQsICRFcnJvciApID0gJFNlbGYtPl9DcmVhdGVQcm9jZXNzVGlja2V0KAogICAgICAgICAgICBTY2hlZHVsZSAgICAgPT4gXCVTY2hlZHVsZSwKICAgICAgICAgICAgU2ltdWxhdGVUaW1lID0+ICRQYXJhbXtTaW11bGF0ZVRpbWV9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAoICRUaWNrZXRJRCwgJEVycm9yICkgPSAkU2VsZi0+X0NyZWF0ZVRpY2tldCgKICAgICAgICAgICAgU2NoZWR1bGUgICAgID0+IFwlU2NoZWR1bGUsCiAgICAgICAgICAgIFNpbXVsYXRlVGltZSA9PiAkUGFyYW17U2ltdWxhdGVUaW1lfSwKICAgICAgICApOwogICAgfQoKICAgICMgSGFuZGxlIHJlc3VsdAogICAgaWYgKCRUaWNrZXRJRCkgewogICAgICAgICMgU3VjY2VzcyAtIHVwZGF0ZSBzY2hlZHVsZQogICAgICAgICRTZWxmLT5fUmVjb3JkRXhlY3V0aW9uKAogICAgICAgICAgICBTY2hlZHVsZXJJRCAgPT4gJFBhcmFte1NjaGVkdWxlcklEfSwKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtOb1RpY2tldH0gPyAwIDogJFRpY2tldElELAogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwKICAgICAgICAgICAgU2ltdWxhdGVUaW1lID0+ICRQYXJhbXtTaW11bGF0ZVRpbWV9LAogICAgICAgICk7CgogICAgICAgICMgQXNzaWduIGNoZWNrbGlzdHMgaWYgY29uZmlndXJlZCAobXVsdGlwbGUgcG9zc2libGUpIC0gc2tpcCBpbiBzaW11bGF0aW9uIG1vZGUKICAgICAgICBpZiAoICEkUGFyYW17Tm9UaWNrZXR9ICYmIElzQXJyYXlSZWZXaXRoRGF0YSggJFNjaGVkdWxle0NoZWNrbGlzdFRlbXBsYXRlSURzfSApICYmICRTZWxmLT5fSXNDaGVja2xpc3RBdmFpbGFibGUoKSApIHsKICAgICAgICAgICAgZm9yIG15ICRUZW1wbGF0ZUlEICggQHsgJFNjaGVkdWxle0NoZWNrbGlzdFRlbXBsYXRlSURzfSB9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPl9Bc3NpZ25DaGVja2xpc3QoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgTG9nIHN1Y2Nlc3MKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0U2NoZWR1bGVyOjpMb2dTdWNjZXNzZnVsRXhlY3V0aW9ucycpICkgewogICAgICAgICAgICBteSAkU2ltTm90ZSA9ICRQYXJhbXtOb1RpY2tldH0gPyAnIFtTSU1VTEFURURdJyA6ICcnOwogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnaW5mbycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGlja2V0U2NoZWR1bGVyOiBDcmVhdGVkIHRpY2tldCAkVGlja2V0SUQgZm9yIHNjaGVkdWxlICIKICAgICAgICAgICAgICAgICAgICAuICInJFNjaGVkdWxle05hbWV9JyAoSUQ6ICRTY2hlZHVsZXtJRH0pJFNpbU5vdGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICMgRXJyb3IgLSByZWNvcmQgZmFpbHVyZSAoc2tpcCBpbiBzaW11bGF0aW9uIG1vZGUpCiAgICAgICAgaWYgKCAhJFBhcmFte05vVGlja2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPl9SZWNvcmRFeGVjdXRpb24oCiAgICAgICAgICAgICAgICBTY2hlZHVsZXJJRCAgPT4gJFBhcmFte1NjaGVkdWxlcklEfSwKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRFcnJvciwKICAgICAgICAgICAgICAgIFNpbXVsYXRlVGltZSA9PiAkUGFyYW17U2ltdWxhdGVUaW1lfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT5fU2V0U2NoZWR1bGVyRXJyb3IoCiAgICAgICAgICAgICAgICBTY2hlZHVsZXJJRCA9PiAkUGFyYW17U2NoZWR1bGVySUR9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgPT4gJEVycm9yLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IEZhaWxlZCB0byBjcmVhdGUgdGlja2V0IGZvciBzY2hlZHVsZSAiCiAgICAgICAgICAgICAgICAgICAgLiAiJyRTY2hlZHVsZXtOYW1lfScgKElEOiAkU2NoZWR1bGV7SUR9KS4gRXJyb3I6ICRFcnJvciIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Tm9UaWNrZXR9ID8gMSA6ICRUaWNrZXRJRDsKfQoKPWhlYWQyIEV4ZWN1dGVQZW5kaW5nU2NoZWR1bGVzKCkKCkV4ZWN1dGUgYWxsIHNjaGVkdWxlcyB0aGF0IGFyZSBkdWUuCgogICAgbXkgQFJlc3VsdHMgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5FeGVjdXRlUGVuZGluZ1NjaGVkdWxlcygKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zIGFycmF5IG9mIHJlc3VsdHMuCgo9Y3V0CgpzdWIgRXhlY3V0ZVBlbmRpbmdTY2hlZHVsZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJERCT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBDaGVjayBpZiBmZWF0dXJlIGlzIGVuYWJsZWQKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgaWYgKCAhJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRTY2hlZHVsZXI6OkVuYWJsZWQnKSApIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBCdWlsZCB0aW1lIGNvbmRpdGlvbiAtIHVzZSBQZXJsJ3MgRGF0ZVRpbWUgKGFsbG93cyBmYWtldGltZSB0byB3b3JrKQogICAgIyBJZiBTaW11bGF0ZVRpbWUgaXMgcHJvdmlkZWQsIHVzZSB0aGF0OyBvdGhlcndpc2UgdXNlIGN1cnJlbnQgdGltZSBmcm9tIFBlcmwKICAgIG15ICRDb21wYXJlVGltZTsKICAgIGlmICggJFBhcmFte1NpbXVsYXRlVGltZX0gKSB7CiAgICAgICAgJENvbXBhcmVUaW1lID0gJFBhcmFte1NpbXVsYXRlVGltZX07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkTm93ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgJENvbXBhcmVUaW1lID0gJE5vdy0+VG9TdHJpbmcoKTsKICAgIH0KCiAgICBteSAkVGltZUNvbmRpdGlvbiA9ICc/JzsKICAgIG15IEBCaW5kID0gKCBcJENvbXBhcmVUaW1lICk7CgogICAgIyBHZXQgYWxsIGR1ZSBzY2hlZHVsZXMgd2l0aCByb3ctbGV2ZWwgbG9ja2luZyB0byBwcmV2ZW50IGR1cGxpY2F0ZQogICAgIyBleGVjdXRpb24gYnkgcGFyYWxsZWwgZGFlbW9uIGluc3RhbmNlcwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgU0VMRUNUIGlkIEZST00gdGlja2V0X3NjaGVkdWxlcgogICAgICAgICAgICBXSEVSRSB2YWxpZF9pZCA9IDEKICAgICAgICAgICAgICBBTkQgbmV4dF9leGVjdXRpb24gSVMgTk9UIE5VTEwKICAgICAgICAgICAgICBBTkQgbmV4dF9leGVjdXRpb24gPD0gJFRpbWVDb25kaXRpb24KICAgICAgICAgICAgT1JERVIgQlkgbmV4dF9leGVjdXRpb24gQVNDCiAgICAgICAgICAgIEZPUiBVUERBVEUiLAogICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgKTsKCiAgICBteSBAU2NoZWR1bGVySURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAU2NoZWR1bGVySURzLCAkUm93WzBdOwogICAgfQoKICAgIG15IEBSZXN1bHRzOwogICAgZm9yIG15ICRTY2hlZHVsZXJJRCAoQFNjaGVkdWxlcklEcykgewogICAgICAgICMgR2V0IHNjaGVkdWxlIGRhdGEgZm9yIG5hbWUvdGl0bGUKICAgICAgICBteSAlU2NoZWR1bGUgPSAkU2VsZi0+U2NoZWR1bGVyR2V0KAogICAgICAgICAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG15ICRUaWNrZXRJRCA9ICRTZWxmLT5FeGVjdXRlU2NoZWR1bGVyKAogICAgICAgICAgICBTY2hlZHVsZXJJRCAgPT4gJFNjaGVkdWxlcklELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFNpbXVsYXRlVGltZSA9PiAkUGFyYW17U2ltdWxhdGVUaW1lfSwKICAgICAgICAgICAgTm9UaWNrZXQgICAgID0+ICRQYXJhbXtOb1RpY2tldH0sCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAUmVzdWx0cywgewogICAgICAgICAgICBTY2hlZHVsZXJJRCAgID0+ICRTY2hlZHVsZXJJRCwKICAgICAgICAgICAgU2NoZWR1bGVyTmFtZSA9PiAkU2NoZWR1bGV7TmFtZX0gfHwgJycsCiAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJFNjaGVkdWxle1RpdGxlfSB8fCAnJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICAgPT4gKCAkVGlja2V0SUQgfHwgJFBhcmFte05vVGlja2V0fSApID8gMSA6IDAsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gQFJlc3VsdHM7Cn0KCj1oZWFkMiBHZXRTY2hlZHVsZXJzV2l0aEVycm9ycygpCgpHZXQgbGlzdCBvZiBzY2hlZHVsZXMgd2l0aCBlcnJvcnMgKGZvciBhZG1pbiBiYW5uZXIpLgoKICAgIG15IEBFcnJvcnMgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5HZXRTY2hlZHVsZXJzV2l0aEVycm9ycygpOwoKUmV0dXJucyBhcnJheSBvZiBoYXNocmVmcyB3aXRoIGVycm9yIGluZm8uCgo9Y3V0CgpzdWIgR2V0U2NoZWR1bGVyc1dpdGhFcnJvcnMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1QgaWQsIG5hbWUsIGxhc3RfZXJyb3IsIGxhc3RfZXJyb3JfdGltZQogICAgICAgICAgICBGUk9NIHRpY2tldF9zY2hlZHVsZXIKICAgICAgICAgICAgV0hFUkUgbGFzdF9lcnJvciBJUyBOT1QgTlVMTAogICAgICAgICAgICAgIEFORCBsYXN0X2Vycm9yX3RpbWUgSVMgTk9UIE5VTEwKICAgICAgICAgICAgT1JERVIgQlkgbGFzdF9lcnJvcl90aW1lIERFU0MnLAogICAgKTsKCiAgICBteSBARXJyb3JzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBARXJyb3JzLCB7CiAgICAgICAgICAgIFNjaGVkdWxlcklEICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBMYXN0RXJyb3IgICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIExhc3RFcnJvclRpbWUgPT4gJFJvd1szXSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBARXJyb3JzOwp9Cgo9aGVhZDIgSGlzdG9yeUxpc3QoKQoKR2V0IGV4ZWN1dGlvbiBoaXN0b3J5IGZvciBhIHNjaGVkdWxlLgoKICAgIG15IEBIaXN0b3J5ID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+SGlzdG9yeUxpc3QoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gMTIzLAogICAgICAgIExpbWl0ICAgICAgID0+IDIwLCAgICAjIG9wdGlvbmFsLCBkZWZhdWx0IDIwCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKICAgIG15ICREQk9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoICEkUGFyYW17U2NoZWR1bGVySUR9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2NoZWR1bGVySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlUHJlcGFyZVBhcmFtcyA9ICgKICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICBTRUxFQ1QgaWQsIHRpY2tldF9pZCwgZXhlY3V0aW9uX3RpbWUsIHN1Y2Nlc3MsIGVycm9yX21lc3NhZ2UKICAgICAgICAgICAgRlJPTSB0aWNrZXRfc2NoZWR1bGVyX2hpc3RvcnkKICAgICAgICAgICAgV0hFUkUgc2NoZWR1bGVyX2lkID0gPwogICAgICAgICAgICBPUkRFUiBCWSBleGVjdXRpb25fdGltZSBERVNDJywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2NoZWR1bGVySUR9IF0sCiAgICApOwogICAgaWYgKCAkUGFyYW17TGltaXR9ICkgewogICAgICAgICRQcmVwYXJlUGFyYW1ze0xpbWl0fSA9ICRQYXJhbXtMaW1pdH07CiAgICB9CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoJVByZXBhcmVQYXJhbXMpOwoKICAgIG15IEBIaXN0b3J5OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBASGlzdG9yeSwgewogICAgICAgICAgICBJRCAgICAgICAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgRXhlY3V0aW9uVGltZSA9PiAkUm93WzJdLAogICAgICAgICAgICBTdWNjZXNzICAgICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSAgPT4gJFJvd1s0XSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBASGlzdG9yeTsKfQoKPWhlYWQyIEdldE5leHRFeGVjdXRpb25zKCkKCkdldCBwcmV2aWV3IG9mIG5leHQgTiBleGVjdXRpb24gdGltZXMgKHdpdGhvdXQgZXhlY3V0aW5nKS4KCiAgICBteSBATmV4dFRpbWVzID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+R2V0TmV4dEV4ZWN1dGlvbnMoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gMTIzLAogICAgICAgIENvdW50ICAgICAgID0+IDUsICAgICAjIGRlZmF1bHQgNQogICAgKTsKClJldHVybnMgdGltZXMgaW4gdGhlIHNjaGVkdWxlJ3MgY29uZmlndXJlZCB0aW1lem9uZSAobm90IFVUQykuCgo9Y3V0CgpzdWIgR2V0TmV4dEV4ZWN1dGlvbnMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTG9nT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgaWYgKCAhJFBhcmFte1NjaGVkdWxlcklEfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNjaGVkdWxlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVNjaGVkdWxlID0gJFNlbGYtPlNjaGVkdWxlckdldCggU2NoZWR1bGVySUQgPT4gJFBhcmFte1NjaGVkdWxlcklEfSApOwogICAgcmV0dXJuIGlmICElU2NoZWR1bGU7CgogICAgIyBHZXQgdGltZXpvbmUgZnJvbSBjb25maWcKICAgIG15ICRDb25maWcgPSAkU2NoZWR1bGV7U2NoZWR1bGVDb25maWd9IHx8IHt9OwogICAgbXkgJFRpbWV6b25lID0gJENvbmZpZy0+e3RpbWV6b25lfQogICAgICAgIHx8ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0U2NoZWR1bGVyOjpEZWZhdWx0VGltZXpvbmUnKQogICAgICAgIHx8ICdFdXJvcGUvQmVybGluJzsKCiAgICBteSAkQ291bnQgPSAkUGFyYW17Q291bnR9IHx8IDU7CiAgICBteSBATmV4dFRpbWVzOwoKICAgIG15ICRMYXN0RXhlY3V0aW9uOwogICAgZm9yIG15ICRpICggMSAuLiAkQ291bnQgKSB7CiAgICAgICAgbXkgJE5leHRUaW1lVVRDID0gJFNlbGYtPkNhbGN1bGF0ZU5leHRFeGVjdXRpb24oCiAgICAgICAgICAgIFNjaGVkdWxlVHlwZSAgID0+ICRTY2hlZHVsZXtTY2hlZHVsZVR5cGV9LAogICAgICAgICAgICBTY2hlZHVsZUNvbmZpZyA9PiAkU2NoZWR1bGV7U2NoZWR1bGVDb25maWd9LAogICAgICAgICAgICBMYXN0RXhlY3V0aW9uICA9PiAkTGFzdEV4ZWN1dGlvbiwKICAgICAgICApOwoKICAgICAgICBsYXN0IGlmICEkTmV4dFRpbWVVVEM7CgogICAgICAgICMgQ2hlY2sgZW5kIGNvbmRpdGlvbnMKICAgICAgICBpZiAoICRTY2hlZHVsZXtFbmRUeXBlfSBlcSAnb2NjdXJyZW5jZXMnICYmICRTY2hlZHVsZXtNYXhPY2N1cnJlbmNlc30gKSB7CiAgICAgICAgICAgIGxhc3QgaWYgKCAkU2NoZWR1bGV7RXhlY3V0aW9uQ291bnR9ICsgJGkgKSA+ICRTY2hlZHVsZXtNYXhPY2N1cnJlbmNlc307CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNjaGVkdWxle0VuZFR5cGV9IGVxICdkYXRlJyAmJiAkU2NoZWR1bGV7RW5kRGF0ZX0gKSB7CiAgICAgICAgICAgIG15ICROZXh0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICROZXh0VGltZVVUQyB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkRW5kID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICRTY2hlZHVsZXtFbmREYXRlfSB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBsYXN0IGlmICROZXh0LT5Db21wYXJlKCBEYXRlVGltZU9iamVjdCA9PiAkRW5kICkgPiAwOwogICAgICAgIH0KCiAgICAgICAgIyBDb252ZXJ0IFVUQyB0aW1lIHRvIGxvY2FsIHRpbWV6b25lIGZvciBkaXNwbGF5CiAgICAgICAgbXkgJE5leHRUaW1lTG9jYWwgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICROZXh0VGltZVVUQywKICAgICAgICAgICAgICAgIFRpbWVab25lID0+ICdVVEMnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJE5leHRUaW1lTG9jYWwtPlRvVGltZVpvbmUoIFRpbWVab25lID0+ICRUaW1lem9uZSApOwoKICAgICAgICAjIEZvcm1hdCB3aXRob3V0IHNlY29uZHM6IFlZWVktTU0tREQgSEg6TU0KICAgICAgICBteSAkR2V0ID0gJE5leHRUaW1lTG9jYWwtPkdldCgpOwogICAgICAgIG15ICROZXh0VGltZVN0ciA9IHNwcmludGYoCiAgICAgICAgICAgICclMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQnLAogICAgICAgICAgICAkR2V0LT57WWVhcn0sICRHZXQtPntNb250aH0sICRHZXQtPntEYXl9LAogICAgICAgICAgICAkR2V0LT57SG91cn0sICRHZXQtPntNaW51dGV9CiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBATmV4dFRpbWVzLCAkTmV4dFRpbWVTdHI7CiAgICAgICAgJExhc3RFeGVjdXRpb24gPSAkTmV4dFRpbWVVVEM7ICAgICMgS2VlcCB1c2luZyBVVEMgZm9yIG5leHQgY2FsY3VsYXRpb24KICAgIH0KCiAgICByZXR1cm4gQE5leHRUaW1lczsKfQoKPWhlYWQyIFJlcGxhY2VQbGFjZWhvbGRlcnMoKQoKUmVwbGFjZSBwbGFjZWhvbGRlcnMgaW4gdGV4dC4KCiAgICBteSAkVGV4dCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlJlcGxhY2VQbGFjZWhvbGRlcnMoCiAgICAgICAgVGV4dCAgICAgICAgID0+ICdNb250aGx5IFJlcG9ydCBbREFURV0gLSBXZWVrIFtXRUVLXScsCiAgICAgICAgU2ltdWxhdGVUaW1lID0+ICcyMDI0LTA2LTE1IDEwOjAwOjAwJywgICMgT3B0aW9uYWw6IHVzZSB0aGlzIHRpbWUgaW5zdGVhZCBvZiBub3cKICAgICk7Cgo9Y3V0CgpzdWIgUmVwbGFjZVBsYWNlaG9sZGVycyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnJyBpZiAhJFBhcmFte1RleHR9OwoKICAgIG15ICRUZXh0ID0gJFBhcmFte1RleHR9OwoKICAgICMgVXNlIFNpbXVsYXRlVGltZSBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGN1cnJlbnQgdGltZQogICAgbXkgJE5vdzsKICAgIGlmICggJFBhcmFte1NpbXVsYXRlVGltZX0gKSB7CiAgICAgICAgJE5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4geyBTdHJpbmcgPT4gJFBhcmFte1NpbXVsYXRlVGltZX0gfSwKICAgICAgICApOwogICAgfQogICAgJE5vdyAvLz0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgbXkgJEdldCA9ICROb3ctPkdldCgpOwoKICAgICMgRGF0ZSBwbGFjZWhvbGRlcnMKICAgIG15ICREYXRlICAgPSBzcHJpbnRmKCAnJTA0ZC0lMDJkLSUwMmQnLCAkR2V0LT57WWVhcn0sICRHZXQtPntNb250aH0sICRHZXQtPntEYXl9ICk7CiAgICBteSAkRGF0ZURFID0gc3ByaW50ZiggJyUwMmQuJTAyZC4lMDRkJywgJEdldC0+e0RheX0sICRHZXQtPntNb250aH0sICRHZXQtPntZZWFyfSApOwogICAgbXkgJFRpbWUgICA9IHNwcmludGYoICclMDJkOiUwMmQnLCAkR2V0LT57SG91cn0sICRHZXQtPntNaW51dGV9ICk7CiAgICBteSAkRGF0ZVRpbWUgPSAiJERhdGUgJFRpbWUiOwoKICAgICMgTW9udGggbmFtZXMKICAgIG15IEBNb250aHNERSA9IHF3KEphbnVhciBGZWJydWFyIE1hZXJ6IEFwcmlsIE1haSBKdW5pIEp1bGkgQXVndXN0IFNlcHRlbWJlciBPa3RvYmVyIE5vdmVtYmVyIERlemVtYmVyKTsKICAgIG15IEBNb250aHNFTiA9IHF3KEphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXIpOwoKICAgICMgV2Vla2RheSBuYW1lcyAoaW5kZXggMCA9IFN1bmRheSwgaW5kZXggMS02ID0gTW9uLVNhdCkKICAgIG15IEBXZWVrZGF5c0RFID0gcXcoU29ubnRhZyBNb250YWcgRGllbnN0YWcgTWl0dHdvY2ggRG9ubmVyc3RhZyBGcmVpdGFnIFNhbXN0YWcpOwogICAgbXkgQFdlZWtkYXlzRU4gPSBxdyhTdW5kYXkgTW9uZGF5IFR1ZXNkYXkgV2VkbmVzZGF5IFRodXJzZGF5IEZyaWRheSBTYXR1cmRheSk7CgogICAgIyBDYWxjdWxhdGUgd2VlayBudW1iZXIgKElTTykKICAgIG15ICRXZWVrID0gJE5vdy0+Rm9ybWF0KCBGb3JtYXQgPT4gJyVWJyApOwoKICAgICMgQ2FsY3VsYXRlIHF1YXJ0ZXIKICAgIG15ICRRdWFydGVyID0gJ1EnIC4gaW50KCAoICRHZXQtPntNb250aH0gLSAxICkgLyAzICsgMSApOwoKICAgICMgQ29udmVydCBEYXlPZldlZWsgKDE9TW9uLi4uNz1TdW4pIHRvIGFycmF5IGluZGV4ICgwPVN1biwgMT1Nb24uLi42PVNhdCkKICAgICMgVXNpbmcgbW9kdWxvOiA3ICUgNyA9IDAgKFN1bmRheSksIDEgJSA3ID0gMSAoTW9uZGF5KSwgZXRjLgogICAgbXkgJFdlZWtkYXlJbmRleCA9ICRHZXQtPntEYXlPZldlZWt9ICUgNzsKCiAgICAjIFJlcGxhY2UgcGxhY2Vob2xkZXJzCiAgICAjIE5vdGU6IFN0YW5kYXJkIChubyBzdWZmaXgpID0gRW5nbGlzaCwgX0RFIHN1ZmZpeCA9IEdlcm1hbgogICAgJFRleHQgPX4gcy9cW0RBVEVcXS8kRGF0ZS9nOwogICAgJFRleHQgPX4gcy9cW0RBVEVfREVcXS8kRGF0ZURFL2c7CiAgICAkVGV4dCA9fiBzL1xbVElNRVxdLyRUaW1lL2c7CiAgICAkVGV4dCA9fiBzL1xbREFURVRJTUVcXS8kRGF0ZVRpbWUvZzsKICAgICRUZXh0ID1+IHMvXFtZRUFSXF0vJEdldC0+e1llYXJ9L2c7CiAgICAkVGV4dCA9fiBzL1xbTU9OVEhcXS9zcHJpbnRmKCclMDJkJywgJEdldC0+e01vbnRofSkvZ2U7CiAgICAkVGV4dCA9fiBzL1xbTU9OVEhfTkFNRVxdLyRNb250aHNFTlskR2V0LT57TW9udGh9IC0gMV0vZzsKICAgICRUZXh0ID1+IHMvXFtNT05USF9OQU1FX0RFXF0vJE1vbnRoc0RFWyRHZXQtPntNb250aH0gLSAxXS9nOwogICAgJFRleHQgPX4gcy9cW0RBWVxdL3NwcmludGYoJyUwMmQnLCAkR2V0LT57RGF5fSkvZ2U7CiAgICAkVGV4dCA9fiBzL1xbV0VFS0RBWVxdLyRXZWVrZGF5c0VOWyRXZWVrZGF5SW5kZXhdL2c7CiAgICAkVGV4dCA9fiBzL1xbV0VFS0RBWV9ERVxdLyRXZWVrZGF5c0RFWyRXZWVrZGF5SW5kZXhdL2c7CiAgICAkVGV4dCA9fiBzL1xbV0VFS1xdLyRXZWVrL2c7CiAgICAkVGV4dCA9fiBzL1xbUVVBUlRFUlxdLyRRdWFydGVyL2c7CgogICAgcmV0dXJuICRUZXh0Owp9CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUHJpdmF0ZSBtZXRob2RzCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnN1YiBfQ2FsY3VsYXRlRGFpbHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTmV4dCA9ICRQYXJhbXtCYXNlVGltZX0tPkNsb25lKCk7CgogICAgIyBTZXQgdGltZQogICAgJE5leHQtPlNldCgKICAgICAgICBIb3VyICAgPT4gJFBhcmFte0hvdXJ9LAogICAgICAgIE1pbnV0ZSA9PiAkUGFyYW17TWludXRlfSwKICAgICAgICBTZWNvbmQgPT4gMCwKICAgICk7CgogICAgIyBNdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBDb21wYXJlVGltZQogICAgaWYgKCAkTmV4dC0+Q29tcGFyZSggRGF0ZVRpbWVPYmplY3QgPT4gJFBhcmFte0NvbXBhcmVUaW1lfSApIDw9IDAgKSB7CiAgICAgICAgJE5leHQtPkFkZCggRGF5cyA9PiAxICk7CiAgICB9CgogICAgcmV0dXJuICROZXh0Owp9CgpzdWIgX0NhbGN1bGF0ZVdlZWtseSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRXZWVrZGF5cyA9ICRQYXJhbXtXZWVrZGF5c30gfHwgWzFdOwogICAgbXkgJVRhcmdldERheXMgPSBtYXAgeyAkXyA9PiAxIH0gQHskV2Vla2RheXN9OwoKICAgIG15ICROZXh0ID0gJFBhcmFte0Jhc2VUaW1lfS0+Q2xvbmUoKTsKCiAgICAjIFNldCB0aW1lCiAgICAkTmV4dC0+U2V0KAogICAgICAgIEhvdXIgICA9PiAkUGFyYW17SG91cn0sCiAgICAgICAgTWludXRlID0+ICRQYXJhbXtNaW51dGV9LAogICAgICAgIFNlY29uZCA9PiAwLAogICAgKTsKCiAgICAjIEZpbmQgbmV4dCB2YWxpZCB3ZWVrZGF5IHRoYXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIENvbXBhcmVUaW1lCiAgICBmb3IgbXkgJGkgKCAwIC4uIDcgKSB7CiAgICAgICAgbXkgJEdldCA9ICROZXh0LT5HZXQoKTsKICAgICAgICBteSAkRG93ID0gJEdldC0+e0RheU9mV2Vla307ICAgICMgMT1Nb24sIDc9U3VuIGluIFpudW55CgogICAgICAgIGlmICggJFRhcmdldERheXN7JERvd30gJiYgJE5leHQtPkNvbXBhcmUoIERhdGVUaW1lT2JqZWN0ID0+ICRQYXJhbXtDb21wYXJlVGltZX0gKSA+IDAgKSB7CiAgICAgICAgICAgIHJldHVybiAkTmV4dDsKICAgICAgICB9CgogICAgICAgICROZXh0LT5BZGQoIERheXMgPT4gMSApOwogICAgfQoKICAgIHJldHVybiAkTmV4dDsKfQoKc3ViIF9DYWxjdWxhdGVNb250aGx5RGF5IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERheSA9ICRQYXJhbXtEYXl9OwogICAgbXkgJE5leHQgPSAkUGFyYW17QmFzZVRpbWV9LT5DbG9uZSgpOwogICAgbXkgJEdldCAgPSAkTmV4dC0+R2V0KCk7CgogICAgIyBIYW5kbGUgImxhc3QgZGF5IiAoLTEpIG9yIHJlbGF0aXZlIGRheXMgZnJvbSBlbmQgKG5lZ2F0aXZlKQogICAgbXkgJFRhcmdldERheTsKICAgIGlmICggJERheSA8IDAgKSB7CiAgICAgICAgbXkgJExhc3REYXkgPSAkU2VsZi0+X0dldExhc3REYXlPZk1vbnRoKCBZZWFyID0+ICRHZXQtPntZZWFyfSwgTW9udGggPT4gJEdldC0+e01vbnRofSApOwogICAgICAgICRUYXJnZXREYXkgPSAkTGFzdERheSArICREYXkgKyAxOyAgICAjIC0xID0gbGFzdCBkYXksIC0yID0gc2Vjb25kIHRvIGxhc3QsIGV0Yy4KICAgICAgICAkVGFyZ2V0RGF5ID0gMSBpZiAkVGFyZ2V0RGF5IDwgMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUYXJnZXREYXkgPSAkRGF5OwogICAgICAgIG15ICRMYXN0RGF5ID0gJFNlbGYtPl9HZXRMYXN0RGF5T2ZNb250aCggWWVhciA9PiAkR2V0LT57WWVhcn0sIE1vbnRoID0+ICRHZXQtPntNb250aH0gKTsKCiAgICAgICAgIyBTa2lwIG1vbnRocyB0aGF0IGRvbid0IGhhdmUgZW5vdWdoIGRheXMgKGUuZy4gZGF5IDMxIGluIEFwcmlsKQogICAgICAgICMgIkxhc3QgZGF5IiAoLTEpIGFsd2F5cyBleGVjdXRlczsgZXhwbGljaXQgZGF5cyBvbmx5IGV4ZWN1dGUgaWYgdGhlIG1vbnRoIGhhcyB0aGF0IGRheQogICAgICAgIGlmICggJFRhcmdldERheSA+ICRMYXN0RGF5ICkgewogICAgICAgICAgICAjIEp1bXAgdG8gbmV4dCBtb250aCBhbmQgcmV0cnkgKGxvb3AgYmVsb3cgd2lsbCBmaW5kIGEgdmFsaWQgbW9udGgpCiAgICAgICAgICAgICMgU2V0IGRheSB0byAxIGZpcnN0IHRvIHByZXZlbnQgbW9udGggb3ZlcmZsb3cgKGUuZy4gSmFuIDMxICsgMSBtb250aCDihpIgTWFyIDMpCiAgICAgICAgICAgICROZXh0LT5TZXQoIERheSA9PiAxICk7CiAgICAgICAgICAgICROZXh0LT5BZGQoIE1vbnRocyA9PiAxICk7CiAgICAgICAgICAgICRHZXQgPSAkTmV4dC0+R2V0KCk7CiAgICAgICAgfQogICAgfQoKICAgICMgRmluZCB0aGUgbmV4dCB2YWxpZCBtb250aCAoc2tpcCBtb250aHMgd2l0aG91dCBlbm91Z2ggZGF5cykKICAgICMgTWF4IDEyIGl0ZXJhdGlvbnMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcwogICAgZm9yIG15ICRUcnkgKCAwIC4uIDExICkgewogICAgICAgICRHZXQgPSAkTmV4dC0+R2V0KCk7CiAgICAgICAgbXkgJExhc3REYXkgPSAkU2VsZi0+X0dldExhc3REYXlPZk1vbnRoKCBZZWFyID0+ICRHZXQtPntZZWFyfSwgTW9udGggPT4gJEdldC0+e01vbnRofSApOwoKICAgICAgICBpZiAoICREYXkgPCAwICkgewogICAgICAgICAgICAkVGFyZ2V0RGF5ID0gJExhc3REYXkgKyAkRGF5ICsgMTsKICAgICAgICAgICAgJFRhcmdldERheSA9IDEgaWYgJFRhcmdldERheSA8IDE7CiAgICAgICAgICAgIGxhc3Q7ICAgICMgTmVnYXRpdmUgZGF5cyBhbHdheXMgaGF2ZSBhIHZhbGlkIHRhcmdldAogICAgICAgIH0KCiAgICAgICAgaWYgKCAkRGF5IDw9ICRMYXN0RGF5ICkgewogICAgICAgICAgICAkVGFyZ2V0RGF5ID0gJERheTsKICAgICAgICAgICAgbGFzdDsgICAgIyBNb250aCBoYXMgZW5vdWdoIGRheXMKICAgICAgICB9CgogICAgICAgICMgTW9udGggZG9lc24ndCBoYXZlIGVub3VnaCBkYXlzLCBza2lwIHRvIG5leHQKICAgICAgICAjIFNldCBkYXkgdG8gMSBmaXJzdCB0byBwcmV2ZW50IG1vbnRoIG92ZXJmbG93CiAgICAgICAgJE5leHQtPlNldCggRGF5ID0+IDEgKTsKICAgICAgICAkTmV4dC0+QWRkKCBNb250aHMgPT4gMSApOwogICAgfQoKICAgICROZXh0LT5TZXQoCiAgICAgICAgRGF5ICAgID0+ICRUYXJnZXREYXksCiAgICAgICAgSG91ciAgID0+ICRQYXJhbXtIb3VyfSwKICAgICAgICBNaW51dGUgPT4gJFBhcmFte01pbnV0ZX0sCiAgICAgICAgU2Vjb25kID0+IDAsCiAgICApOwoKICAgICMgTXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gQ29tcGFyZVRpbWUKICAgIGlmICggJE5leHQtPkNvbXBhcmUoIERhdGVUaW1lT2JqZWN0ID0+ICRQYXJhbXtDb21wYXJlVGltZX0gKSA8PSAwICkgewogICAgICAgICMgU2V0IGRheSB0byAxIGJlZm9yZSBhZGRpbmcgbW9udGggdG8gcHJldmVudCBvdmVyZmxvdwogICAgICAgICMgKGUuZy4gSmFuIDMxICsgMSBtb250aCB3b3VsZCBvdmVyZmxvdyB0byBNYXIgMyBpbnN0ZWFkIG9mIEZlYikKICAgICAgICAkTmV4dC0+U2V0KCBEYXkgPT4gMSApOwogICAgICAgICROZXh0LT5BZGQoIE1vbnRocyA9PiAxICk7CgogICAgICAgICMgRmluZCBuZXh0IHZhbGlkIG1vbnRoIGFnYWluCiAgICAgICAgZm9yIG15ICRUcnkgKCAwIC4uIDExICkgewogICAgICAgICAgICAkR2V0ID0gJE5leHQtPkdldCgpOwogICAgICAgICAgICBteSAkTGFzdERheSA9ICRTZWxmLT5fR2V0TGFzdERheU9mTW9udGgoIFllYXIgPT4gJEdldC0+e1llYXJ9LCBNb250aCA9PiAkR2V0LT57TW9udGh9ICk7CgogICAgICAgICAgICBpZiAoICREYXkgPCAwICkgewogICAgICAgICAgICAgICAgJFRhcmdldERheSA9ICRMYXN0RGF5ICsgJERheSArIDE7CiAgICAgICAgICAgICAgICAkVGFyZ2V0RGF5ID0gMSBpZiAkVGFyZ2V0RGF5IDwgMTsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJERheSA8PSAkTGFzdERheSApIHsKICAgICAgICAgICAgICAgICRUYXJnZXREYXkgPSAkRGF5OwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTZXQgZGF5IHRvIDEgZmlyc3QgdG8gcHJldmVudCBtb250aCBvdmVyZmxvdwogICAgICAgICAgICAkTmV4dC0+U2V0KCBEYXkgPT4gMSApOwogICAgICAgICAgICAkTmV4dC0+QWRkKCBNb250aHMgPT4gMSApOwogICAgICAgIH0KCiAgICAgICAgJE5leHQtPlNldCggRGF5ID0+ICRUYXJnZXREYXkgKTsKICAgIH0KCiAgICByZXR1cm4gJE5leHQ7Cn0KCnN1YiBfQ2FsY3VsYXRlTW9udGhseVdlZWtkYXkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTnRoICAgICA9ICRQYXJhbXtOdGh9OwogICAgbXkgJFdlZWtkYXkgPSAkUGFyYW17V2Vla2RheX07CgogICAgIyBDb252ZXJ0IHdlZWtkYXkgdG8gbnVtYmVyICgxPU1vbiwgNz1TdW4pCiAgICAjIEFjY2VwdCBib3RoIG51bWVyaWMgKDEtNykgYW5kIHN0cmluZyAoJ21vbicsICd0dWUnLCBldGMuKSBmb3JtYXRzCiAgICBteSAkVGFyZ2V0RG93OwogICAgaWYgKCAkV2Vla2RheSA9fiAvXlxkKyQvICYmICRXZWVrZGF5ID49IDEgJiYgJFdlZWtkYXkgPD0gNyApIHsKICAgICAgICAkVGFyZ2V0RG93ID0gJFdlZWtkYXk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAlV2Vla2RheU1hcCA9ICgKICAgICAgICAgICAgbW9uID0+IDEsIHR1ZSA9PiAyLCB3ZWQgPT4gMywgdGh1ID0+IDQsCiAgICAgICAgICAgIGZyaSA9PiA1LCBzYXQgPT4gNiwgc3VuID0+IDcsCiAgICAgICAgKTsKICAgICAgICAkVGFyZ2V0RG93ID0gJFdlZWtkYXlNYXB7IGxjICRXZWVrZGF5IH0gfHwgMTsKICAgIH0KCiAgICBteSAkTmV4dCA9ICRQYXJhbXtCYXNlVGltZX0tPkNsb25lKCk7CiAgICBteSAkR2V0ICA9ICROZXh0LT5HZXQoKTsKCiAgICAjIEZpbmQgdGhlIE50aCBvY2N1cnJlbmNlIG9mIHdlZWtkYXkgaW4gY3VycmVudCBtb250aAogICAgbXkgJFRhcmdldERhdGUgPSAkU2VsZi0+X0ZpbmROdGhXZWVrZGF5SW5Nb250aCgKICAgICAgICBZZWFyICAgID0+ICRHZXQtPntZZWFyfSwKICAgICAgICBNb250aCAgID0+ICRHZXQtPntNb250aH0sCiAgICAgICAgV2Vla2RheSA9PiAkVGFyZ2V0RG93LAogICAgICAgIE50aCAgICAgPT4gJE50aCwKICAgICk7CgogICAgaWYgKCRUYXJnZXREYXRlKSB7CiAgICAgICAgJE5leHQtPlNldCgKICAgICAgICAgICAgRGF5ICAgID0+ICRUYXJnZXREYXRlLAogICAgICAgICAgICBIb3VyICAgPT4gJFBhcmFte0hvdXJ9LAogICAgICAgICAgICBNaW51dGUgPT4gJFBhcmFte01pbnV0ZX0sCiAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICk7CiAgICB9CgogICAgIyBNdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBDb21wYXJlVGltZQogICAgaWYgKCAhJFRhcmdldERhdGUgfHwgJE5leHQtPkNvbXBhcmUoIERhdGVUaW1lT2JqZWN0ID0+ICRQYXJhbXtDb21wYXJlVGltZX0gKSA8PSAwICkgewogICAgICAgICMgTW92ZSB0byBuZXh0IG1vbnRoCiAgICAgICAgbXkgJE5ld01vbnRoID0gJEdldC0+e01vbnRofSArIDE7CiAgICAgICAgbXkgJE5ld1llYXIgID0gJEdldC0+e1llYXJ9OwogICAgICAgIGlmICggJE5ld01vbnRoID4gMTIgKSB7CiAgICAgICAgICAgICROZXdNb250aCA9IDE7CiAgICAgICAgICAgICROZXdZZWFyKys7CiAgICAgICAgfQoKICAgICAgICAkVGFyZ2V0RGF0ZSA9ICRTZWxmLT5fRmluZE50aFdlZWtkYXlJbk1vbnRoKAogICAgICAgICAgICBZZWFyICAgID0+ICROZXdZZWFyLAogICAgICAgICAgICBNb250aCAgID0+ICROZXdNb250aCwKICAgICAgICAgICAgV2Vla2RheSA9PiAkVGFyZ2V0RG93LAogICAgICAgICAgICBOdGggICAgID0+ICROdGgsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGlmICEkVGFyZ2V0RGF0ZTsKCiAgICAgICAgJE5leHQtPlNldCgKICAgICAgICAgICAgWWVhciAgID0+ICROZXdZZWFyLAogICAgICAgICAgICBNb250aCAgPT4gJE5ld01vbnRoLAogICAgICAgICAgICBEYXkgICAgPT4gJFRhcmdldERhdGUsCiAgICAgICAgICAgIEhvdXIgICA9PiAkUGFyYW17SG91cn0sCiAgICAgICAgICAgIE1pbnV0ZSA9PiAkUGFyYW17TWludXRlfSwKICAgICAgICAgICAgU2Vjb25kID0+IDAsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJE5leHQ7Cn0KCnN1YiBfQ2FsY3VsYXRlTW9udGhseVdlZWtkYXlPZmZzZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT2Zmc2V0RGF5cyA9ICRQYXJhbXtPZmZzZXREYXlzfSB8fCAwOwogICAgbXkgJE50aCAgICAgICAgPSAkUGFyYW17TnRofTsKICAgIG15ICRXZWVrZGF5ICAgID0gJFBhcmFte1dlZWtkYXl9OwoKICAgICMgQ29udmVydCB3ZWVrZGF5IHRvIG51bWJlciAoMT1Nb24sIDc9U3VuKQogICAgbXkgJFRhcmdldERvdzsKICAgIGlmICggJFdlZWtkYXkgPX4gL15cZCskLyAmJiAkV2Vla2RheSA+PSAxICYmICRXZWVrZGF5IDw9IDcgKSB7CiAgICAgICAgJFRhcmdldERvdyA9ICRXZWVrZGF5OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgbXkgJVdlZWtkYXlNYXAgPSAoCiAgICAgICAgICAgIG1vbiA9PiAxLCB0dWUgPT4gMiwgd2VkID0+IDMsIHRodSA9PiA0LAogICAgICAgICAgICBmcmkgPT4gNSwgc2F0ID0+IDYsIHN1biA9PiA3LAogICAgICAgICk7CiAgICAgICAgJFRhcmdldERvdyA9ICRXZWVrZGF5TWFweyBsYyAkV2Vla2RheSB9IHx8IDE7CiAgICB9CgogICAgbXkgJEJhc2VUaW1lID0gJFBhcmFte0Jhc2VUaW1lfS0+Q2xvbmUoKTsKICAgIG15ICRHZXQgICAgICA9ICRCYXNlVGltZS0+R2V0KCk7CgogICAgIyBJdGVyYXRlIHRocm91Z2ggbW9udGhzIHVudGlsIHdlIGZpbmQgYSB2YWxpZCByZXN1bHQKICAgICMgTWF4IDI0IGl0ZXJhdGlvbnMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcwogICAgZm9yIG15ICRNb250aE9mZnNldCAoIDAgLi4gMjQgKSB7CiAgICAgICAgbXkgJFllYXIgID0gJEdldC0+e1llYXJ9OwogICAgICAgIG15ICRNb250aCA9ICRHZXQtPntNb250aH0gKyAkTW9udGhPZmZzZXQ7CgogICAgICAgICMgSGFuZGxlIHllYXIgcm9sbG92ZXIKICAgICAgICB3aGlsZSAoICRNb250aCA+IDEyICkgewogICAgICAgICAgICAkTW9udGggLT0gMTI7CiAgICAgICAgICAgICRZZWFyKys7CiAgICAgICAgfQoKICAgICAgICAjIEZpbmQgdGhlIE50aCB3ZWVrZGF5IGluIHRoaXMgbW9udGgKICAgICAgICBteSAkVGFyZ2V0RGF0ZSA9ICRTZWxmLT5fRmluZE50aFdlZWtkYXlJbk1vbnRoKAogICAgICAgICAgICBZZWFyICAgID0+ICRZZWFyLAogICAgICAgICAgICBNb250aCAgID0+ICRNb250aCwKICAgICAgICAgICAgV2Vla2RheSA9PiAkVGFyZ2V0RG93LAogICAgICAgICAgICBOdGggICAgID0+ICROdGgsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBpZiAhJFRhcmdldERhdGU7CgogICAgICAgICMgQ3JlYXRlIERhdGVUaW1lIGZvciB0aGUgdGFyZ2V0CiAgICAgICAgbXkgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgWWVhciAgICAgPT4gJFllYXIsCiAgICAgICAgICAgICAgICBNb250aCAgICA9PiAkTW9udGgsCiAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkVGFyZ2V0RGF0ZSwKICAgICAgICAgICAgICAgIEhvdXIgICAgID0+ICRQYXJhbXtIb3VyfSwKICAgICAgICAgICAgICAgIE1pbnV0ZSAgID0+ICRQYXJhbXtNaW51dGV9LAogICAgICAgICAgICAgICAgU2Vjb25kICAgPT4gMCwKICAgICAgICAgICAgICAgIFRpbWVab25lID0+ICRCYXNlVGltZS0+R2V0KCktPntUaW1lWm9uZX0gfHwgJ1VUQycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBBZGQgb2Zmc2V0IGRheXMKICAgICAgICBpZiAoJE9mZnNldERheXMpIHsKICAgICAgICAgICAgJFJlc3VsdC0+QWRkKCBEYXlzID0+ICRPZmZzZXREYXlzICk7CiAgICAgICAgfQoKICAgICAgICAjIE11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIENvbXBhcmVUaW1lCiAgICAgICAgaWYgKCAkUmVzdWx0LT5Db21wYXJlKCBEYXRlVGltZU9iamVjdCA9PiAkUGFyYW17Q29tcGFyZVRpbWV9ICkgPiAwICkgewogICAgICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgX0NhbGN1bGF0ZVllYXJseSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREYXkgID0gJFBhcmFte0RheX07CiAgICBteSAkTmV4dCA9ICRQYXJhbXtCYXNlVGltZX0tPkNsb25lKCk7CiAgICBteSAkR2V0ICA9ICROZXh0LT5HZXQoKTsKCiAgICAjIFNraXAgeWVhcnMgd2hlcmUgdGhlIG1vbnRoIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggZGF5cyAoZS5nLiwgRmViIDI5IGluIG5vbi1sZWFwIHllYXJzKQogICAgIyBNYXggOCBpdGVyYXRpb25zIHRvIGZpbmQgYSB2YWxpZCB5ZWFyIChjb3ZlcnMgbGVhcCB5ZWFyIGN5Y2xlKQogICAgbXkgJFRhcmdldERheTsKICAgIGZvciBteSAkVHJ5ICggMCAuLiA3ICkgewogICAgICAgICRHZXQgPSAkTmV4dC0+R2V0KCk7CiAgICAgICAgbXkgJExhc3REYXkgPSAkU2VsZi0+X0dldExhc3REYXlPZk1vbnRoKCBZZWFyID0+ICRHZXQtPntZZWFyfSwgTW9udGggPT4gJFBhcmFte01vbnRofSApOwoKICAgICAgICBpZiAoICREYXkgPD0gJExhc3REYXkgKSB7CiAgICAgICAgICAgICRUYXJnZXREYXkgPSAkRGF5OwogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KCiAgICAgICAgIyBZZWFyIGRvZXNuJ3QgaGF2ZSB0aGlzIGRheSBpbiB0aGUgdGFyZ2V0IG1vbnRoLCBza2lwIHRvIG5leHQgeWVhcgogICAgICAgICROZXh0LT5BZGQoIFllYXJzID0+IDEgKTsKICAgIH0KCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFRhcmdldERheTsgICMgTm8gdmFsaWQgeWVhciBmb3VuZCB3aXRoaW4gOCB5ZWFycwoKICAgICROZXh0LT5TZXQoCiAgICAgICAgTW9udGggID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgRGF5ICAgID0+ICRUYXJnZXREYXksCiAgICAgICAgSG91ciAgID0+ICRQYXJhbXtIb3VyfSwKICAgICAgICBNaW51dGUgPT4gJFBhcmFte01pbnV0ZX0sCiAgICAgICAgU2Vjb25kID0+IDAsCiAgICApOwoKICAgICMgTXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gQ29tcGFyZVRpbWUKICAgIGlmICggJE5leHQtPkNvbXBhcmUoIERhdGVUaW1lT2JqZWN0ID0+ICRQYXJhbXtDb21wYXJlVGltZX0gKSA8PSAwICkgewogICAgICAgICROZXh0LT5BZGQoIFllYXJzID0+IDEgKTsKCiAgICAgICAgIyBGaW5kIG5leHQgdmFsaWQgeWVhcgogICAgICAgIGZvciBteSAkVHJ5ICggMCAuLiA3ICkgewogICAgICAgICAgICAkR2V0ID0gJE5leHQtPkdldCgpOwogICAgICAgICAgICBteSAkTGFzdERheSA9ICRTZWxmLT5fR2V0TGFzdERheU9mTW9udGgoIFllYXIgPT4gJEdldC0+e1llYXJ9LCBNb250aCA9PiAkUGFyYW17TW9udGh9ICk7CgogICAgICAgICAgICBpZiAoICREYXkgPD0gJExhc3REYXkgKSB7CiAgICAgICAgICAgICAgICAkVGFyZ2V0RGF5ID0gJERheTsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICROZXh0LT5BZGQoIFllYXJzID0+IDEgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpZiAhZGVmaW5lZCAkVGFyZ2V0RGF5OyAgIyBObyB2YWxpZCB5ZWFyIGZvdW5kIHdpdGhpbiA4IHllYXJzCgogICAgICAgICROZXh0LT5TZXQoIE1vbnRoID0+ICRQYXJhbXtNb250aH0sIERheSA9PiAkVGFyZ2V0RGF5ICk7CiAgICB9CgogICAgcmV0dXJuICROZXh0Owp9CgpzdWIgX0NhbGN1bGF0ZUludGVydmFsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEludGVydmFsID0gJFBhcmFte0ludGVydmFsfSB8fCA3OwogICAgJEludGVydmFsID0gNyBpZiAkSW50ZXJ2YWwgPCAxIHx8ICRJbnRlcnZhbCA+IDM2NTA7CiAgICBteSAkTmV4dDsKCiAgICBpZiAoICRQYXJhbXtTdGFydERhdGV9ICkgewogICAgICAgICROZXh0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICBTdHJpbmcgICA9PiAkUGFyYW17U3RhcnREYXRlfSAuICcgJyAuIHNwcmludGYoICclMDJkOiUwMmQ6MDAnLCAkUGFyYW17SG91cn0sICRQYXJhbXtNaW51dGV9ICksCiAgICAgICAgICAgICAgICBUaW1lWm9uZSA9PiAkUGFyYW17VGltZXpvbmV9IHx8ICdVVEMnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTmV4dCA9ICRQYXJhbXtCYXNlVGltZX0tPkNsb25lKCk7CiAgICAgICAgJE5leHQtPlNldCgKICAgICAgICAgICAgSG91ciAgID0+ICRQYXJhbXtIb3VyfSwKICAgICAgICAgICAgTWludXRlID0+ICRQYXJhbXtNaW51dGV9LAogICAgICAgICAgICBTZWNvbmQgPT4gMCwKICAgICAgICApOwogICAgfQoKICAgICMgQWRkIGludGVydmFscyB1bnRpbCB3ZSdyZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gQ29tcGFyZVRpbWUKICAgIHdoaWxlICggJE5leHQtPkNvbXBhcmUoIERhdGVUaW1lT2JqZWN0ID0+ICRQYXJhbXtDb21wYXJlVGltZX0gKSA8PSAwICkgewogICAgICAgICROZXh0LT5BZGQoIERheXMgPT4gJEludGVydmFsICk7CiAgICB9CgogICAgcmV0dXJuICROZXh0Owp9CgpzdWIgX0ZpbmROdGhXZWVrZGF5SW5Nb250aCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRZZWFyICAgID0gJFBhcmFte1llYXJ9OwogICAgbXkgJE1vbnRoICAgPSAkUGFyYW17TW9udGh9OwogICAgbXkgJFdlZWtkYXkgPSAkUGFyYW17V2Vla2RheX07CiAgICBteSAkTnRoICAgICA9ICRQYXJhbXtOdGh9OwoKICAgIG15ICRMYXN0RGF5ID0gJFNlbGYtPl9HZXRMYXN0RGF5T2ZNb250aCggWWVhciA9PiAkWWVhciwgTW9udGggPT4gJE1vbnRoICk7CgogICAgaWYgKCAkTnRoID4gMCApIHsKICAgICAgICAjIEZpbmQgTnRoIG9jY3VycmVuY2UgZnJvbSBzdGFydAogICAgICAgIG15ICRDb3VudCA9IDA7CiAgICAgICAgZm9yIG15ICREYXkgKCAxIC4uICRMYXN0RGF5ICkgewogICAgICAgICAgICBteSAkRGF0ZVRpbWUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgID0+ICRZZWFyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoID0+ICRNb250aCwKICAgICAgICAgICAgICAgICAgICBEYXkgICA9PiAkRGF5LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJEdldCA9ICREYXRlVGltZS0+R2V0KCk7CiAgICAgICAgICAgIGlmICggJEdldC0+e0RheU9mV2Vla30gPT0gJFdlZWtkYXkgKSB7CiAgICAgICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICAgICAgICAgIHJldHVybiAkRGF5IGlmICRDb3VudCA9PSAkTnRoOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBGaW5kIE50aCBvY2N1cnJlbmNlIGZyb20gZW5kICgtMSA9IGxhc3QsIC0yID0gc2Vjb25kIHRvIGxhc3QpCiAgICAgICAgbXkgQE9jY3VycmVuY2VzOwogICAgICAgIGZvciBteSAkRGF5ICggMSAuLiAkTGFzdERheSApIHsKICAgICAgICAgICAgbXkgJERhdGVUaW1lID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICA9PiAkWWVhciwKICAgICAgICAgICAgICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgPT4gJERheSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRHZXQgPSAkRGF0ZVRpbWUtPkdldCgpOwogICAgICAgICAgICBpZiAoICRHZXQtPntEYXlPZldlZWt9ID09ICRXZWVrZGF5ICkgewogICAgICAgICAgICAgICAgcHVzaCBAT2NjdXJyZW5jZXMsICREYXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRJbmRleCA9ICROdGg7ICAgICMgLTEgPSBsYXN0IGVsZW1lbnQKICAgICAgICByZXR1cm4gJE9jY3VycmVuY2VzWyRJbmRleF0gaWYgQE9jY3VycmVuY2VzID49IGFicygkSW5kZXgpOwogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIF9HZXRMYXN0RGF5T2ZNb250aCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBEYXlzSW5Nb250aCA9ICggMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSApOwoKICAgIG15ICREYXlzID0gJERheXNJbk1vbnRoWyAkUGFyYW17TW9udGh9IC0gMSBdOwoKICAgICMgQ2hlY2sgZm9yIGxlYXAgeWVhciBpbiBGZWJydWFyeQogICAgaWYgKCAkUGFyYW17TW9udGh9ID09IDIgKSB7CiAgICAgICAgbXkgJFllYXIgPSAkUGFyYW17WWVhcn07CiAgICAgICAgaWYgKCAoICRZZWFyICUgNCA9PSAwICYmICRZZWFyICUgMTAwICE9IDAgKSB8fCAkWWVhciAlIDQwMCA9PSAwICkgewogICAgICAgICAgICAkRGF5cyA9IDI5OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJERheXM7Cn0KCnN1YiBfQ3JlYXRlVGlja2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNjaGVkdWxlID0gJFBhcmFte1NjaGVkdWxlfTsKCiAgICAjIFJlcGxhY2UgcGxhY2Vob2xkZXJzICh1c2UgU2ltdWxhdGVUaW1lIGZvciBzaW11bGF0aW9ucykKICAgIG15ICRUaXRsZSA9ICRTZWxmLT5SZXBsYWNlUGxhY2Vob2xkZXJzKAogICAgICAgIFRleHQgICAgICAgICA9PiAkU2NoZWR1bGUtPntUaXRsZX0sCiAgICAgICAgU2ltdWxhdGVUaW1lID0+ICRQYXJhbXtTaW11bGF0ZVRpbWV9LAogICAgKTsKICAgIG15ICRCb2R5ID0gJFNlbGYtPlJlcGxhY2VQbGFjZWhvbGRlcnMoCiAgICAgICAgVGV4dCAgICAgICAgID0+ICRTY2hlZHVsZS0+e0JvZHl9LAogICAgICAgIFNpbXVsYXRlVGltZSA9PiAkUGFyYW17U2ltdWxhdGVUaW1lfSwKICAgICk7CgogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIENyZWF0ZSB0aWNrZXQKICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICBUaXRsZSAgICAgICAgPT4gJFRpdGxlLAogICAgICAgIFF1ZXVlICAgICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMb29rdXAoIFF1ZXVlSUQgPT4gJFNjaGVkdWxlLT57UXVldWVJRH0gKSwKICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgUHJpb3JpdHkgICAgID0+ICRTY2hlZHVsZS0+e1ByaW9yaXR5SUR9ID8gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TG9va3VwKCBQcmlvcml0eUlEID0+ICRTY2hlZHVsZS0+e1ByaW9yaXR5SUR9ICkgOiAnMyBub3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgICAgICBUeXBlSUQgICAgICAgPT4gJFNjaGVkdWxlLT57VHlwZUlEfSwKICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNjaGVkdWxlLT57U2VydmljZUlEfSwKICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNjaGVkdWxlLT57U0xBSUR9LAogICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2NoZWR1bGUtPntDdXN0b21lclVzZXJMb2dpbn0gfHwgJycsCiAgICAgICAgT3duZXJJRCAgICAgID0+ICRTY2hlZHVsZS0+e093bmVySUR9IHx8IDEsCiAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkU2NoZWR1bGUtPntSZXNwb25zaWJsZUlEfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgaWYgKCAhJFRpY2tldElEICkgewogICAgICAgIHJldHVybiAoIHVuZGVmLCAnRmFpbGVkIHRvIGNyZWF0ZSB0aWNrZXQnICk7CiAgICB9CgogICAgIyBBZGQgYXJ0aWNsZQogICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5CYWNrZW5kRm9yQ2hhbm5lbCgKICAgICAgICBDaGFubmVsTmFtZSA9PiAnSW50ZXJuYWwnLAogICAgKTsKCiAgICAjIERldGVjdCBpZiBib2R5IGNvbnRhaW5zIEhUTUwgKGZyb20gUmljaFRleHQgZWRpdG9yKQogICAgbXkgJENvbnRlbnRUeXBlID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnOwogICAgaWYgKCAkQm9keSAmJiAkQm9keSA9fiAvPFthLXpdW1xzXFNdKj4vaSApIHsKICAgICAgICAkQ29udGVudFR5cGUgPSAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JzsKICAgIH0KCiAgICBteSAkQXJ0aWNsZUlEID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDAsCiAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ1RpY2tldFNjaGVkdWxlciA8bm9yZXBseUBsb2NhbGhvc3Q+JywKICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAkVGl0bGUsCiAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJEJvZHkgfHwgJycsCiAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgPT4gJENvbnRlbnRUeXBlLAogICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdBZGROb3RlJywKICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnQ3JlYXRlZCBieSBUaWNrZXRTY2hlZHVsZXInLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IENvdWxkIG5vdCBjcmVhdGUgYXJ0aWNsZSBmb3IgdGlja2V0ICRUaWNrZXRJRCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFNldCBEeW5hbWljRmllbGRzCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkU2NoZWR1bGUtPntEeW5hbWljRmllbGRzfSApICkgewogICAgICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICAgICBmb3IgbXkgJERGTmFtZSAoIGtleXMgJXsgJFNjaGVkdWxlLT57RHluYW1pY0ZpZWxkc30gfSApIHsKICAgICAgICAgICAgbXkgJERGQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KCBOYW1lID0+ICRERk5hbWUgKTsKICAgICAgICAgICAgbmV4dCBpZiAhJERGQ29uZmlnOwoKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJERGQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkU2NoZWR1bGUtPntEeW5hbWljRmllbGRzfXskREZOYW1lfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IENvdWxkIG5vdCBzZXQgRHluYW1pY0ZpZWxkICckREZOYW1lJyBmb3IgdGlja2V0ICRUaWNrZXRJRCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoICRUaWNrZXRJRCwgdW5kZWYgKTsKfQoKc3ViIF9DcmVhdGVQcm9jZXNzVGlja2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNjaGVkdWxlID0gJFBhcmFte1NjaGVkdWxlfTsKCiAgICAjIENoZWNrIGlmIFByb2Nlc3NNYW5hZ2VtZW50IGlzIGF2YWlsYWJsZQogICAgaWYgKCAhJFNlbGYtPl9Jc1Byb2Nlc3NNYW5hZ2VtZW50QXZhaWxhYmxlKCkgKSB7CiAgICAgICAgcmV0dXJuICggdW5kZWYsICdQcm9jZXNzIE1hbmFnZW1lbnQgaXMgbm90IGF2YWlsYWJsZScgKTsKICAgIH0KCiAgICBteSAkUHJvY2Vzc09iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MnKTsKICAgIG15ICRBY3Rpdml0eURpYWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHlEaWFsb2cnKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVGlja2V0T2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgbXkgJFByb2Nlc3NFbnRpdHlJRCA9ICRTY2hlZHVsZS0+e1Byb2Nlc3NJRH07CiAgICBpZiAoICEkUHJvY2Vzc0VudGl0eUlEICkgewogICAgICAgIHJldHVybiAoIHVuZGVmLCAnTm8gUHJvY2Vzc0lEIGNvbmZpZ3VyZWQgaW4gc2NoZWR1bGUnICk7CiAgICB9CgogICAgIyBHZXQgcHJvY2VzcyBhbmQgdmFsaWRhdGUgaXQncyBhY3RpdmUKICAgIG15ICRQcm9jZXNzID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NHZXQoCiAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRQcm9jZXNzRW50aXR5SUQsCiAgICApOwogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFByb2Nlc3MpICkgewogICAgICAgIHJldHVybiAoIHVuZGVmLCAiUHJvY2VzcyAnJFByb2Nlc3NFbnRpdHlJRCcgbm90IGZvdW5kIiApOwogICAgfQogICAgaWYgKCAkUHJvY2Vzcy0+e1N0YXRlfSBuZSAnQWN0aXZlJyApIHsKICAgICAgICByZXR1cm4gKCB1bmRlZiwgIlByb2Nlc3MgJyRQcm9jZXNzRW50aXR5SUQnIGlzIG5vdCBhY3RpdmUgKFN0YXRlOiAkUHJvY2Vzcy0+e1N0YXRlfSkiICk7CiAgICB9CgogICAgIyBHZXQgcHJvY2VzcyBzdGFydCBwb2ludCAoQWN0aXZpdHkgKyBBY3Rpdml0eURpYWxvZykKICAgIG15ICRQcm9jZXNzU3RhcnRwb2ludCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzU3RhcnRwb2ludEdldCgKICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFByb2Nlc3NFbnRpdHlJRCwKICAgICk7CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkUHJvY2Vzc1N0YXJ0cG9pbnQpIHx8ICEkUHJvY2Vzc1N0YXJ0cG9pbnQtPntBY3Rpdml0eX0gfHwgISRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5RGlhbG9nfSApIHsKICAgICAgICByZXR1cm4gKCB1bmRlZiwgIk5vIFN0YXJ0QWN0aXZpdHlEaWFsb2cgY29uZmlndXJlZCBmb3IgcHJvY2VzcyAnJFByb2Nlc3NFbnRpdHlJRCciICk7CiAgICB9CgogICAgIyBHZXQgQWN0aXZpdHlEaWFsb2cgY29uZmlndXJhdGlvbgogICAgbXkgJEFjdGl2aXR5RGlhbG9nID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5RGlhbG9nfSwKICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgICAgID0+IFsnQWdlbnRJbnRlcmZhY2UnXSwKICAgICk7CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQWN0aXZpdHlEaWFsb2cpICkgewogICAgICAgIHJldHVybiAoIHVuZGVmLCAiQWN0aXZpdHlEaWFsb2cgJyRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5RGlhbG9nfScgbm90IGZvdW5kIG9yIG5vdCBhY2Nlc3NpYmxlIiApOwogICAgfQoKICAgICMgUGFyc2UgQWN0aXZpdHlEaWFsb2dEYXRhIGZyb20gc2NoZWR1bGUKICAgIG15ICRBY3Rpdml0eURpYWxvZ0RhdGEgPSB7fTsKICAgIGlmICggJFNjaGVkdWxlLT57QWN0aXZpdHlEaWFsb2dEYXRhfSApIHsKICAgICAgICBpZiAoIHJlZiAkU2NoZWR1bGUtPntBY3Rpdml0eURpYWxvZ0RhdGF9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgJEFjdGl2aXR5RGlhbG9nRGF0YSA9ICRTY2hlZHVsZS0+e0FjdGl2aXR5RGlhbG9nRGF0YX07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkSlNPTk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyk7CiAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZ0RhdGEgPSAkSlNPTk9iamVjdC0+RGVjb2RlKCBEYXRhID0+ICRTY2hlZHVsZS0+e0FjdGl2aXR5RGlhbG9nRGF0YX0gKSB8fCB7fTsKICAgICAgICB9CiAgICB9CgogICAgIyBCdWlsZCB0aWNrZXQgcGFyYW1ldGVycyBmcm9tIEFjdGl2aXR5RGlhbG9nIGZpZWxkcwogICAgbXkgJVRpY2tldFBhcmFtID0gKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIEZpZWxkIG5hbWUgbWFwcGluZzogQWN0aXZpdHlEaWFsb2cgZmllbGQgbmFtZSAtPiBpbnRlcm5hbCBmaWVsZCBuYW1lCiAgICAjIFRoaXMgbWFwcGluZyBtYXRjaGVzIHdoYXQgX1JlbmRlclN0YW5kYXJkRmllbGQgdXNlcyBpbiBBZ2VudFRpY2tldFNjaGVkdWxlckFKQVgucG0KICAgICMgVGhlIHN0b3JlZCB2YWx1ZXMgdXNlIHRoZSBNQVBQRUQgbmFtZXMgKGUuZy4sIFF1ZXVlSUQpLCBub3QgdGhlIG9yaWdpbmFsIG5hbWVzIChlLmcuLCBRdWV1ZSkKICAgIG15ICVOYW1lVG9JRCA9ICgKICAgICAgICBUaXRsZSAgICAgICAgICAgICAgPT4gJ1RpdGxlJywKICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgPT4gJ1N0YXRlSUQnLAogICAgICAgIFN0YXRlSUQgICAgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgUHJpb3JpdHkgICAgICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICBQcmlvcml0eUlEICAgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIExvY2sgICAgICAgICAgICAgICA9PiAnTG9ja0lEJywKICAgICAgICBMb2NrSUQgICAgICAgICAgICAgPT4gJ0xvY2tJRCcsCiAgICAgICAgUXVldWUgICAgICAgICAgICAgID0+ICdRdWV1ZUlEJywKICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgIEN1c3RvbWVyICAgICAgICAgICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgQ3VzdG9tZXJJRCAgICAgICAgID0+ICdDdXN0b21lcklEJywKICAgICAgICBDdXN0b21lck5vICAgICAgICAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgIEN1c3RvbWVyVXNlcklEICAgICA9PiAnQ3VzdG9tZXJVc2VySUQnLAogICAgICAgIE93bmVyICAgICAgICAgICAgICA9PiAnT3duZXJJRCcsCiAgICAgICAgT3duZXJJRCAgICAgICAgICAgID0+ICdPd25lcklEJywKICAgICAgICBUeXBlICAgICAgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgVHlwZUlEICAgICAgICAgICAgID0+ICdUeXBlSUQnLAogICAgICAgIFNMQSAgICAgICAgICAgICAgICA9PiAnU0xBSUQnLAogICAgICAgIFNMQUlEICAgICAgICAgICAgICA9PiAnU0xBSUQnLAogICAgICAgIFNlcnZpY2UgICAgICAgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICBTZXJ2aWNlSUQgICAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgUmVzcG9uc2libGUgICAgICAgID0+ICdSZXNwb25zaWJsZUlEJywKICAgICAgICBSZXNwb25zaWJsZUlEICAgICAgPT4gJ1Jlc3BvbnNpYmxlSUQnLAogICAgICAgIFBlbmRpbmdUaW1lICAgICAgICA9PiAnUGVuZGluZ1RpbWUnLAogICAgICAgIEFydGljbGUgICAgICAgICAgICA9PiAnQXJ0aWNsZScsCiAgICApOwoKICAgICMgTWFwIGludGVybmFsIGZpZWxkIG5hbWVzIHRvIHRpY2tldCBwYXJhbWV0ZXJzCiAgICBteSAlRmllbGRNYXBwaW5nID0gKAogICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgIFN0YXRlSUQgICAgICAgPT4gJ1N0YXRlSUQnLAogICAgICAgIFByaW9yaXR5SUQgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIExvY2tJRCAgICAgICAgPT4gJ0xvY2tJRCcsCiAgICAgICAgVHlwZUlEICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgIFNMQUlEICAgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICBPd25lcklEICAgICAgID0+ICdPd25lcklEJywKICAgICAgICBSZXNwb25zaWJsZUlEID0+ICdSZXNwb25zaWJsZUlEJywKICAgICAgICBDdXN0b21lcklEICAgID0+ICdDdXN0b21lcklEJywKICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAnQ3VzdG9tZXJVc2VyJywKICAgICk7CgogICAgIyBQcm9jZXNzIGVhY2ggZmllbGQgZnJvbSB0aGUgQWN0aXZpdHlEaWFsb2cKICAgIEZJRUxEOgogICAgZm9yIG15ICRGaWVsZE5hbWUgKCBAeyAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZE9yZGVyfSB8fCBbXSB9ICkgewogICAgICAgIG15ICRGaWVsZENvbmZpZyA9ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEZpZWxkTmFtZX07CiAgICAgICAgbmV4dCBGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJEZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBTa2lwIGhpZGRlbiBmaWVsZHMgKERpc3BsYXkgPSAwKQogICAgICAgIG5leHQgRklFTEQgaWYgZGVmaW5lZCAkRmllbGRDb25maWctPntEaXNwbGF5fSAmJiAkRmllbGRDb25maWctPntEaXNwbGF5fSA9PSAwOwoKICAgICAgICAjIE1hcCB0aGUgZmllbGQgbmFtZSB0byBpbnRlcm5hbCBuYW1lIChlLmcuLCBRdWV1ZSAtPiBRdWV1ZUlEKQogICAgICAgICMgVGhpcyBtYXRjaGVzIGhvdyB0aGUgZmllbGRzIGFyZSBzdG9yZWQgdmlhIHRoZSBmb3JtCiAgICAgICAgbXkgJE1hcHBlZEZpZWxkTmFtZSA9ICROYW1lVG9JRHskRmllbGROYW1lfSB8fCAkRmllbGROYW1lOwoKICAgICAgICAjIENoZWNrIGlmIHdlIGhhdmUgYSB2YWx1ZSBpbiBBY3Rpdml0eURpYWxvZ0RhdGEKICAgICAgICAjIFRyeSBtYXBwZWQgbmFtZSBmaXJzdCAoaG93IGZvcm0gc3RvcmVzIGl0KSwgdGhlbiBvcmlnaW5hbCBuYW1lCiAgICAgICAgbXkgJFZhbHVlID0gJEFjdGl2aXR5RGlhbG9nRGF0YS0+eyRNYXBwZWRGaWVsZE5hbWV9OwogICAgICAgICRWYWx1ZSAvLz0gJEFjdGl2aXR5RGlhbG9nRGF0YS0+eyRGaWVsZE5hbWV9OwoKICAgICAgICAjIFVzZSBkZWZhdWx0IHZhbHVlIGlmIG5vIHZhbHVlIHByb3ZpZGVkIGFuZCBkZWZhdWx0IGV4aXN0cwogICAgICAgIGlmICggIWRlZmluZWQgJFZhbHVlICYmIGRlZmluZWQgJEZpZWxkQ29uZmlnLT57RGVmYXVsdFZhbHVlfSApIHsKICAgICAgICAgICAgJFZhbHVlID0gJEZpZWxkQ29uZmlnLT57RGVmYXVsdFZhbHVlfTsKICAgICAgICB9CgogICAgICAgIG5leHQgRklFTEQgaWYgIWRlZmluZWQgJFZhbHVlIHx8ICRWYWx1ZSBlcSAnJzsKCiAgICAgICAgIyBNYXAgdG8gdGlja2V0IHBhcmFtZXRlcgogICAgICAgIGlmICggJEZpZWxkTWFwcGluZ3skTWFwcGVkRmllbGROYW1lfSApIHsKICAgICAgICAgICAgJFRpY2tldFBhcmFteyAkRmllbGRNYXBwaW5neyRNYXBwZWRGaWVsZE5hbWV9IH0gPSAkVmFsdWU7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnVGl0bGUnICkgewogICAgICAgICAgICAkVGlja2V0UGFyYW17VGl0bGV9ID0gJFNlbGYtPlJlcGxhY2VQbGFjZWhvbGRlcnMoCiAgICAgICAgICAgICAgICBUZXh0ICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgU2ltdWxhdGVUaW1lID0+ICRQYXJhbXtTaW11bGF0ZVRpbWV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIEFsc28gY2hlY2sgZm9yIEN1c3RvbWVyVXNlcklEIGZyb20gU2VsZWN0ZWRDdXN0b21lclVzZXIgKGZyb20gY3VzdG9tZXIgYXV0b2NvbXBsZXRlKQogICAgaWYgKCAhJFRpY2tldFBhcmFte0N1c3RvbWVyVXNlcn0gJiYgJEFjdGl2aXR5RGlhbG9nRGF0YS0+e0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAkVGlja2V0UGFyYW17Q3VzdG9tZXJVc2VyfSA9ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntDdXN0b21lclVzZXJJRH07CiAgICB9CgogICAgIyBFbnN1cmUgcmVxdWlyZWQgZmllbGRzIGhhdmUgZGVmYXVsdHMKICAgIGlmICggISRUaWNrZXRQYXJhbXtRdWV1ZX0gJiYgISRUaWNrZXRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAjIFRyeSB0byBnZXQgZGVmYXVsdCBxdWV1ZSBmcm9tIGZpcnN0IGFjdGl2aXR5IGRpYWxvZyBmaWVsZCBvciB1c2UgZmFsbGJhY2sKICAgICAgICAkVGlja2V0UGFyYW17UXVldWV9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFByb2Nlc3MnKS0+e0RlZmF1bHRRdWV1ZX0KICAgICAgICAgICAgfHwgJ1Jhdyc7CiAgICB9CgogICAgaWYgKCAhJFRpY2tldFBhcmFte1N0YXRlfSAmJiAhJFRpY2tldFBhcmFte1N0YXRlSUR9ICkgewogICAgICAgICRUaWNrZXRQYXJhbXtTdGF0ZX0gPSAnbmV3JzsKICAgIH0KCiAgICBpZiAoICEkVGlja2V0UGFyYW17TG9ja30gJiYgISRUaWNrZXRQYXJhbXtMb2NrSUR9ICkgewogICAgICAgICRUaWNrZXRQYXJhbXtMb2NrfSA9ICd1bmxvY2snOwogICAgfQoKICAgIGlmICggISRUaWNrZXRQYXJhbXtQcmlvcml0eX0gJiYgISRUaWNrZXRQYXJhbXtQcmlvcml0eUlEfSApIHsKICAgICAgICAkVGlja2V0UGFyYW17UHJpb3JpdHl9ID0gJzMgbm9ybWFsJzsKICAgIH0KCiAgICAjIEdlbmVyYXRlIGRlZmF1bHQgdGl0bGUgaWYgbm90IHByb3ZpZGVkCiAgICBpZiAoICEkVGlja2V0UGFyYW17VGl0bGV9ICkgewogICAgICAgIG15ICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwogICAgICAgIGlmICggJFBhcmFte1NpbXVsYXRlVGltZX0gKSB7CiAgICAgICAgICAgICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7IFN0cmluZyA9PiAkUGFyYW17U2ltdWxhdGVUaW1lfSB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBteSAkQ3VycmVudFRpbWVTdGFtcCA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKICAgICAgICAkVGlja2V0UGFyYW17VGl0bGV9ID0gIiRQcm9jZXNzLT57TmFtZX0gLSAkQ3VycmVudFRpbWVTdGFtcCI7CiAgICB9CgogICAgIyBTZXQgT3duZXJJRCB0byAxIGluaXRpYWxseSAoc3RhbmRhcmQgcHJvY2VzcyB0aWNrZXQgYmVoYXZpb3IpCiAgICBteSAkTmV3T3duZXJJRCA9ICRUaWNrZXRQYXJhbXtPd25lcklEfTsKICAgICRUaWNrZXRQYXJhbXtPd25lcklEfSA9IDE7CgogICAgIyBDcmVhdGUgdGhlIHRpY2tldAogICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKCVUaWNrZXRQYXJhbSk7CiAgICBpZiAoICEkVGlja2V0SUQgKSB7CiAgICAgICAgcmV0dXJuICggdW5kZWYsICJGYWlsZWQgdG8gY3JlYXRlIHRpY2tldCBmb3IgcHJvY2VzcyAnJFByb2Nlc3NFbnRpdHlJRCciICk7CiAgICB9CgogICAgIyBTZXQgUHJvY2Vzc0VudGl0eUlEIG9uIHRpY2tldAogICAgbXkgJFN1Y2Nlc3MgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQoCiAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRQcm9jZXNzRW50aXR5SUQsCiAgICAgICAgVGlja2V0SUQgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICk7CiAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBzZXQgUHJvY2Vzc0VudGl0eUlEICckUHJvY2Vzc0VudGl0eUlEJyBvbiBUaWNrZXRJRCAnJFRpY2tldElEJyIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFNldCBBY3Rpdml0eUVudGl0eUlEIG9uIHRpY2tldAogICAgJFN1Y2Nlc3MgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0KAogICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJFByb2Nlc3NFbnRpdHlJRCwKICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5fSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3Qgc2V0IEFjdGl2aXR5RW50aXR5SUQgJyRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5fScgb24gVGlja2V0SUQgJyRUaWNrZXRJRCciLAogICAgICAgICk7CiAgICB9CgogICAgIyBTZXQgRHluYW1pY0ZpZWxkcyBmcm9tIEFjdGl2aXR5RGlhbG9nRGF0YQogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGROYW1lICgga2V5cyAleyRBY3Rpdml0eURpYWxvZ0RhdGF9ICkgewogICAgICAgIG5leHQgRklFTEQgaWYgJEZpZWxkTmFtZSAhfiBte15EeW5hbWljRmllbGRfKC4rKSR9OwogICAgICAgIG15ICRERk5hbWUgPSAkMTsKCiAgICAgICAgbXkgJFZhbHVlID0gJEFjdGl2aXR5RGlhbG9nRGF0YS0+eyRGaWVsZE5hbWV9OwogICAgICAgIG5leHQgRklFTEQgaWYgIWRlZmluZWQgJFZhbHVlIHx8ICRWYWx1ZSBlcSAnJzsKCiAgICAgICAgIyBSZXBsYWNlIHBsYWNlaG9sZGVycyBpbiB0ZXh0IER5bmFtaWNGaWVsZHMKICAgICAgICBpZiAoICFyZWYgJFZhbHVlICkgewogICAgICAgICAgICAkVmFsdWUgPSAkU2VsZi0+UmVwbGFjZVBsYWNlaG9sZGVycygKICAgICAgICAgICAgICAgIFRleHQgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBTaW11bGF0ZVRpbWUgPT4gJFBhcmFte1NpbXVsYXRlVGltZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkREZDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoIE5hbWUgPT4gJERGTmFtZSApOwogICAgICAgIG5leHQgRklFTEQgaWYgISRERkNvbmZpZzsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkREZDb25maWcsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGlja2V0U2NoZWR1bGVyOiBDb3VsZCBub3Qgc2V0IER5bmFtaWNGaWVsZCAnJERGTmFtZScgZm9yIHRpY2tldCAkVGlja2V0SUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIFVwZGF0ZSBvd25lciBpZiBpdCB3YXMgc3BlY2lmaWVkIChhZnRlciBpbml0aWFsIGNyZWF0aW9uIHdpdGggT3duZXJJRD0xKQogICAgaWYgKCAkTmV3T3duZXJJRCAmJiAkTmV3T3duZXJJRCAhPSAxICkgewogICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICBOZXdVc2VySUQgPT4gJE5ld093bmVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBDcmVhdGUgYXJ0aWNsZSBpZiBBcnRpY2xlIGZpZWxkIGlzIGluIEFjdGl2aXR5RGlhbG9nCiAgICBteSAkQXJ0aWNsZUZpZWxkQ29uZmlnID0gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXtBcnRpY2xlfTsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEFydGljbGVGaWVsZENvbmZpZykgJiYgJEFydGljbGVGaWVsZENvbmZpZy0+e0Rpc3BsYXl9ICkgewogICAgICAgIG15ICRTdWJqZWN0ID0gJEFjdGl2aXR5RGlhbG9nRGF0YS0+e1N1YmplY3R9IHx8ICRUaWNrZXRQYXJhbXtUaXRsZX07CiAgICAgICAgbXkgJEJvZHkgICAgPSAkQWN0aXZpdHlEaWFsb2dEYXRhLT57Qm9keX0gfHwgJyc7CgogICAgICAgICMgUmVwbGFjZSBwbGFjZWhvbGRlcnMKICAgICAgICAkU3ViamVjdCA9ICRTZWxmLT5SZXBsYWNlUGxhY2Vob2xkZXJzKAogICAgICAgICAgICBUZXh0ICAgICAgICAgPT4gJFN1YmplY3QsCiAgICAgICAgICAgIFNpbXVsYXRlVGltZSA9PiAkUGFyYW17U2ltdWxhdGVUaW1lfSwKICAgICAgICApOwogICAgICAgICRCb2R5ID0gJFNlbGYtPlJlcGxhY2VQbGFjZWhvbGRlcnMoCiAgICAgICAgICAgIFRleHQgICAgICAgICA9PiAkQm9keSwKICAgICAgICAgICAgU2ltdWxhdGVUaW1lID0+ICRQYXJhbXtTaW11bGF0ZVRpbWV9LAogICAgICAgICk7CgogICAgICAgIGlmICggJEJvZHkgKSB7CiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckNoYW5uZWwoCiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSA9PiAnSW50ZXJuYWwnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBEZXRlY3QgY29udGVudCB0eXBlCiAgICAgICAgICAgIG15ICRDb250ZW50VHlwZSA9ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JzsKICAgICAgICAgICAgaWYgKCAkQm9keSA9fiAvPFthLXpdW1xzXFNdKj4vaSApIHsKICAgICAgICAgICAgICAgICRDb250ZW50VHlwZSA9ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPSAkQXJ0aWNsZUZpZWxkQ29uZmlnLT57Q29uZmlnfXtJc1Zpc2libGVGb3JDdXN0b21lcn0gLy8gMDsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gJElzVmlzaWJsZUZvckN1c3RvbWVyLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ1RpY2tldFNjaGVkdWxlciA8bm9yZXBseUBsb2NhbGhvc3Q+JywKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICRTdWJqZWN0LAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJEJvZHksCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAkQ29udGVudFR5cGUsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnQWRkTm90ZScsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnQ3JlYXRlZCBieSBUaWNrZXRTY2hlZHVsZXIgKFByb2Nlc3MgVGlja2V0KScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJEFydGljbGVJRCApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRpY2tldFNjaGVkdWxlcjogQ291bGQgbm90IGNyZWF0ZSBhcnRpY2xlIGZvciB0aWNrZXQgJFRpY2tldElEIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICggJFRpY2tldElELCB1bmRlZiApOwp9CgpzdWIgX0Fzc2lnbkNoZWNrbGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhJFNlbGYtPl9Jc0NoZWNrbGlzdEF2YWlsYWJsZSgpOwoKICAgIG15ICRDaGVja2xpc3RPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tsaXN0Jyk7CgogICAgcmV0dXJuICRDaGVja2xpc3RPYmplY3QtPkNoZWNrbGlzdEFkZCgKICAgICAgICBUaWNrZXRJRCAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKfQoKc3ViIF9SZWNvcmRFeGVjdXRpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIERldGVybWluZSBleGVjdXRpb24gdGltZSAtIHVzZSBzaW11bGF0ZWQgdGltZSBpZiBwcm92aWRlZAogICAgbXkgJEV4ZWN1dGlvblRpbWU7CiAgICBteSAkTm93OwogICAgaWYgKCAkUGFyYW17U2ltdWxhdGVUaW1lfSApIHsKICAgICAgICAkRXhlY3V0aW9uVGltZSA9ICRQYXJhbXtTaW11bGF0ZVRpbWV9OwogICAgICAgICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsgU3RyaW5nID0+ICRQYXJhbXtTaW11bGF0ZVRpbWV9IH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAkRXhlY3V0aW9uVGltZSA9ICROb3ctPlRvU3RyaW5nKCk7CiAgICB9CgogICAgIyBHZXQgc2NoZWR1bGUgZm9yIHJlY2FsY3VsYXRpb24gKGJlZm9yZSB0cmFuc2FjdGlvbikKICAgIG15ICVTY2hlZHVsZSA9ICRTZWxmLT5TY2hlZHVsZXJHZXQoIFNjaGVkdWxlcklEID0+ICRQYXJhbXtTY2hlZHVsZXJJRH0gKTsKICAgIHJldHVybiBpZiAhJVNjaGVkdWxlOwoKICAgICMgQ2FsY3VsYXRlIG5leHQgZXhlY3V0aW9uIGJhc2VkIG9uIHRoZSBTQ0hFRFVMRUQgdGltZSAobm90IGFjdHVhbCBleGVjdXRpb24gdGltZSkKICAgICMgVGhpcyBwcmV2ZW50cyBEU1QgZG91YmxlLWV4ZWN1dGlvbjogaWYgbmV4dF9leGVjdXRpb24gd2FzIGNhbGN1bGF0ZWQgaW4gQ0VTVAogICAgIyBidXQgZXhlY3V0ZWQgYWZ0ZXIgRFNUIHN3aXRjaCB0byBDRVQsIHVzaW5nIHRoZSBvcmlnaW5hbCBzY2hlZHVsZWQgdGltZSBlbnN1cmVzCiAgICAjIHRoZSByZWNhbGN1bGF0aW9uIGNvcnJlY3RseSBhZHZhbmNlcyB0byB0aGUgbmV4dCBwZXJpb2QKICAgIG15ICRSZWNhbGNCYXNlID0gJFNjaGVkdWxle05leHRFeGVjdXRpb259IHx8ICROb3ctPlRvU3RyaW5nKCk7CiAgICBteSAkTmV4dEV4ZWN1dGlvbiA9ICRTZWxmLT5DYWxjdWxhdGVOZXh0RXhlY3V0aW9uKAogICAgICAgIFNjaGVkdWxlVHlwZSAgID0+ICRTY2hlZHVsZXtTY2hlZHVsZVR5cGV9LAogICAgICAgIFNjaGVkdWxlQ29uZmlnID0+ICRTY2hlZHVsZXtTY2hlZHVsZUNvbmZpZ30sCiAgICAgICAgTGFzdEV4ZWN1dGlvbiAgPT4gJFJlY2FsY0Jhc2UsCiAgICApOwoKICAgICMgRmxhZyB0byBza2lwIG5leHRfZXhlY3V0aW9uIHVwZGF0ZSBpZiBjYWxjdWxhdGlvbiBmYWlsZWQKICAgIG15ICRTa2lwTmV4dEV4ZWN1dGlvbiA9IDA7CgogICAgIyBJZiBuZXh0IGV4ZWN1dGlvbiBjb3VsZCBub3QgYmUgY2FsY3VsYXRlZCwgbG9nIGVycm9yIGFuZCB0cmlnZ2VyIGVycm9yIGJhbm5lcgogICAgIyBidXQgZG8gTk9UIHNldCBuZXh0X2V4ZWN1dGlvbiB0byBOVUxMIChrZWVwIHRoZSBvbGQgdmFsdWUgc28gdGhlIHNjaGVkdWxlIGlzIHJldHJpZWQpCiAgICAjIFN0aWxsIHJlY29yZCB0aGUgaGlzdG9yeSBlbnRyeSBmb3IgdGhlIGV4ZWN1dGlvbiB0aGF0IGFscmVhZHkgaGFwcGVuZWQuCiAgICBpZiAoICEkTmV4dEV4ZWN1dGlvbiApIHsKICAgICAgICBteSAkRXJyb3IgPSAiQ291bGQgbm90IGNhbGN1bGF0ZSBuZXh0IGV4ZWN1dGlvbiBmb3Igc2NoZWR1bGUgJyRTY2hlZHVsZXtOYW1lfScgIgogICAgICAgICAgICAuICIoSUQ6ICRQYXJhbXtTY2hlZHVsZXJJRH0sIFR5cGU6ICRTY2hlZHVsZXtTY2hlZHVsZVR5cGV9KS4gIgogICAgICAgICAgICAuICJTY2hlZHVsZSB3aWxsIGJlIHJldHJpZWQgb24gbmV4dCBkYWVtb24gcnVuLiI7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6ICRFcnJvciIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+X1NldFNjaGVkdWxlckVycm9yKAogICAgICAgICAgICBTY2hlZHVsZXJJRCA9PiAkUGFyYW17U2NoZWR1bGVySUR9LAogICAgICAgICAgICBFcnJvciAgICAgICA9PiAkRXJyb3IsCiAgICAgICAgKTsKICAgICAgICAkU2tpcE5leHRFeGVjdXRpb24gPSAxOwogICAgfQoKICAgICMgV3JhcCBoaXN0b3J5IGluc2VydCArIHNjaGVkdWxlIHVwZGF0ZSBpbiBhIHRyYW5zYWN0aW9uIGZvciBhdG9taWNpdHkKICAgIG15ICRUcmFuc2FjdGlvbk9LID0gMTsKCiAgICAjIFN0YXJ0IHRyYW5zYWN0aW9uCiAgICAkREJPYmplY3QtPkRvKCBTUUwgPT4gJ1NUQVJUIFRSQU5TQUNUSU9OJyApOwoKICAgICMgQWRkIGhpc3RvcnkgZW50cnkKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VGlja2V0SUR9IHx8ICEkUGFyYW17U3VjY2Vzc30gKSB7CiAgICAgICAgbXkgJEhpc3RvcnlSZXN1bHQgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gdGlja2V0X3NjaGVkdWxlcl9oaXN0b3J5CiAgICAgICAgICAgICAgICAgICAgKHNjaGVkdWxlcl9pZCwgdGlja2V0X2lkLCBleGVjdXRpb25fdGltZSwgc3VjY2VzcywgZXJyb3JfbWVzc2FnZSkKICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkUGFyYW17U2NoZWR1bGVySUR9LAogICAgICAgICAgICAgICAgXCggJFBhcmFte1RpY2tldElEfSB8fCAwICksCiAgICAgICAgICAgICAgICBcJEV4ZWN1dGlvblRpbWUsCiAgICAgICAgICAgICAgICBcJFBhcmFte1N1Y2Nlc3N9LAogICAgICAgICAgICAgICAgXCRQYXJhbXtFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICBdLAogICAgICAgICk7CgogICAgICAgIGlmICggISRIaXN0b3J5UmVzdWx0ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGlja2V0U2NoZWR1bGVyOiBDb3VsZCBub3QgaW5zZXJ0IGhpc3RvcnkgZW50cnkgZm9yIHNjaGVkdWxlciAkUGFyYW17U2NoZWR1bGVySUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFRyYW5zYWN0aW9uT0sgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjIFVwZGF0ZSBzY2hlZHVsZSAoc2tpcCBuZXh0X2V4ZWN1dGlvbiB1cGRhdGUgaWYgY2FsY3VsYXRpb24gZmFpbGVkKQogICAgaWYgKCRUcmFuc2FjdGlvbk9LKSB7CiAgICAgICAgbXkgJFVwZGF0ZVNRTDsKICAgICAgICBteSBAVXBkYXRlQmluZDsKCiAgICAgICAgaWYgKCRTa2lwTmV4dEV4ZWN1dGlvbikgewogICAgICAgICAgICAjIEtlZXAgb2xkIG5leHRfZXhlY3V0aW9uLCBvbmx5IHVwZGF0ZSBleGVjdXRpb25fY291bnQgYW5kIGxhc3RfZXhlY3V0aW9uCiAgICAgICAgICAgICRVcGRhdGVTUUwgPSAnCiAgICAgICAgICAgICAgICBVUERBVEUgdGlja2V0X3NjaGVkdWxlcgogICAgICAgICAgICAgICAgU0VUIGV4ZWN1dGlvbl9jb3VudCA9IGV4ZWN1dGlvbl9jb3VudCArIDEsCiAgICAgICAgICAgICAgICAgICAgbGFzdF9leGVjdXRpb24gPSA/LAogICAgICAgICAgICAgICAgICAgIGxhc3RfZXJyb3IgPSBDQVNFIFdIRU4gPyA9IDEgVEhFTiBOVUxMIEVMU0UgbGFzdF9lcnJvciBFTkQsCiAgICAgICAgICAgICAgICAgICAgbGFzdF9lcnJvcl90aW1lID0gQ0FTRSBXSEVOID8gPSAxIFRIRU4gTlVMTCBFTFNFIGxhc3RfZXJyb3JfdGltZSBFTkQsCiAgICAgICAgICAgICAgICAgICAgY2hhbmdlX3RpbWUgPSA/CiAgICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nOwogICAgICAgICAgICBAVXBkYXRlQmluZCA9ICgKICAgICAgICAgICAgICAgIFwkRXhlY3V0aW9uVGltZSwKICAgICAgICAgICAgICAgIFwkUGFyYW17U3VjY2Vzc30sCiAgICAgICAgICAgICAgICBcJFBhcmFte1N1Y2Nlc3N9LAogICAgICAgICAgICAgICAgXCRFeGVjdXRpb25UaW1lLAogICAgICAgICAgICAgICAgXCRQYXJhbXtTY2hlZHVsZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVXBkYXRlU1FMID0gJwogICAgICAgICAgICAgICAgVVBEQVRFIHRpY2tldF9zY2hlZHVsZXIKICAgICAgICAgICAgICAgIFNFVCBleGVjdXRpb25fY291bnQgPSBleGVjdXRpb25fY291bnQgKyAxLAogICAgICAgICAgICAgICAgICAgIGxhc3RfZXhlY3V0aW9uID0gPywKICAgICAgICAgICAgICAgICAgICBuZXh0X2V4ZWN1dGlvbiA9ID8sCiAgICAgICAgICAgICAgICAgICAgbGFzdF9lcnJvciA9IENBU0UgV0hFTiA/ID0gMSBUSEVOIE5VTEwgRUxTRSBsYXN0X2Vycm9yIEVORCwKICAgICAgICAgICAgICAgICAgICBsYXN0X2Vycm9yX3RpbWUgPSBDQVNFIFdIRU4gPyA9IDEgVEhFTiBOVUxMIEVMU0UgbGFzdF9lcnJvcl90aW1lIEVORCwKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfdGltZSA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPyc7CiAgICAgICAgICAgIEBVcGRhdGVCaW5kID0gKAogICAgICAgICAgICAgICAgXCRFeGVjdXRpb25UaW1lLAogICAgICAgICAgICAgICAgXCROZXh0RXhlY3V0aW9uLAogICAgICAgICAgICAgICAgXCRQYXJhbXtTdWNjZXNzfSwKICAgICAgICAgICAgICAgIFwkUGFyYW17U3VjY2Vzc30sCiAgICAgICAgICAgICAgICBcJEV4ZWN1dGlvblRpbWUsCiAgICAgICAgICAgICAgICBcJFBhcmFte1NjaGVkdWxlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRVcGRhdGVSZXN1bHQgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICRVcGRhdGVTUUwsCiAgICAgICAgICAgIEJpbmQgPT4gXEBVcGRhdGVCaW5kLAogICAgICAgICk7CgogICAgICAgIGlmICggISRVcGRhdGVSZXN1bHQgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IENvdWxkIG5vdCB1cGRhdGUgZXhlY3V0aW9uIHJlY29yZCBmb3Igc2NoZWR1bGVyICRQYXJhbXtTY2hlZHVsZXJJRH0iLAogICAgICAgICAgICApOwogICAgICAgICAgICAkVHJhbnNhY3Rpb25PSyA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgQ29tbWl0IG9yIHJvbGxiYWNrCiAgICBpZiAoJFRyYW5zYWN0aW9uT0spIHsKICAgICAgICAkREJPYmplY3QtPkRvKCBTUUwgPT4gJ0NPTU1JVCcgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICREQk9iamVjdC0+RG8oIFNRTCA9PiAnUk9MTEJBQ0snICk7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaWNrZXRTY2hlZHVsZXI6IFRyYW5zYWN0aW9uIHJvbGxlZCBiYWNrIGZvciBzY2hlZHVsZXIgJFBhcmFte1NjaGVkdWxlcklEfSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBDbGVhbnVwIG9sZCBoaXN0b3J5IGVudHJpZXMgb3V0c2lkZSB0cmFuc2FjdGlvbiAobm9uLWNyaXRpY2FsKQogICAgbXkgJE1heEVudHJpZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldFNjaGVkdWxlcjo6TWF4SGlzdG9yeUVudHJpZXMnKSB8fCAwOwogICAgaWYgKCAkTWF4RW50cmllcyA+IDAgKSB7CiAgICAgICAgJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIHRpY2tldF9zY2hlZHVsZXJfaGlzdG9yeQogICAgICAgICAgICAgICAgV0hFUkUgc2NoZWR1bGVyX2lkID0gPwogICAgICAgICAgICAgICAgQU5EIGlkIE5PVCBJTiAoCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGlkIEZST00gKAogICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgaWQgRlJPTSB0aWNrZXRfc2NoZWR1bGVyX2hpc3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgc2NoZWR1bGVyX2lkID0gPwogICAgICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSBleGVjdXRpb25fdGltZSBERVNDCiAgICAgICAgICAgICAgICAgICAgICAgIExJTUlUID8KICAgICAgICAgICAgICAgICAgICApIEFTIGtlZXAKICAgICAgICAgICAgICAgICknLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkUGFyYW17U2NoZWR1bGVySUR9LAogICAgICAgICAgICAgICAgXCRQYXJhbXtTY2hlZHVsZXJJRH0sCiAgICAgICAgICAgICAgICBcJE1heEVudHJpZXMsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9TZXRTY2hlZHVsZXJFcnJvciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgU2FuaXRpemUgZXJyb3IgbWVzc2FnZTogdHJ1bmNhdGUgYW5kIHJlbW92ZSBzZW5zaXRpdmUgcGF0aHMKICAgIG15ICRFcnJvciA9ICRQYXJhbXtFcnJvcn0gfHwgJyc7CiAgICAkRXJyb3IgPX4gc3thdFxzK1xTK1wucG1ccytsaW5lXHMrXGQrfXtbaW50ZXJuYWxdfWc7CiAgICAkRXJyb3IgPX4gc3svb3B0L3pudW55L1xTK317W2ludGVybmFsXX1nOwogICAgJEVycm9yID1+IHN7XFtpbnRlcm5hbFxdXHMrbGluZVxzK1xkK317W2ludGVybmFsXX1nOwogICAgJEVycm9yID0gc3Vic3RyKCAkRXJyb3IsIDAsIDUwMCApIGlmIGxlbmd0aCgkRXJyb3IpID4gNTAwOwoKICAgIHJldHVybiAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFVQREFURSB0aWNrZXRfc2NoZWR1bGVyCiAgICAgICAgICAgIFNFVCBsYXN0X2Vycm9yID0gPywgbGFzdF9lcnJvcl90aW1lID0gY3VycmVudF90aW1lc3RhbXAKICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRFcnJvciwgXCRQYXJhbXtTY2hlZHVsZXJJRH0gXSwKICAgICk7Cn0KCnN1YiBfRGVhY3RpdmF0ZVNjaGVkdWxlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERCT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIEdldCB2YWxpZCBJRCBmb3IgImludmFsaWQiCiAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKICAgIG15ICRJbnZhbGlkSUQgICA9ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICdpbnZhbGlkJyApIHx8IDI7CgogICAgJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdVUERBVEUgdGlja2V0X3NjaGVkdWxlciBTRVQgdmFsaWRfaWQgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkSW52YWxpZElELCBcJFBhcmFte1NjaGVkdWxlcklEfSBdLAogICAgKTsKCiAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgTWVzc2FnZSAgPT4gIlRpY2tldFNjaGVkdWxlcjogU2NoZWR1bGUgSUQgJFBhcmFte1NjaGVkdWxlcklEfSBkZWFjdGl2YXRlZCAoZW5kIGNvbmRpdGlvbiByZWFjaGVkKSIsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgpzdWIgX0R5bmFtaWNGaWVsZFZhbHVlc1NldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwogICAgbXkgJEpTT05PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwoKICAgIGZvciBteSAkRmllbGROYW1lICgga2V5cyAleyAkUGFyYW17RHluYW1pY0ZpZWxkc30gfSApIHsKICAgICAgICBteSAkVmFsdWUgPSAkUGFyYW17RHluYW1pY0ZpZWxkc317JEZpZWxkTmFtZX07CgogICAgICAgICMgRW5jb2RlIGFycmF5cy9oYXNoZXMgYXMgSlNPTgogICAgICAgIGlmICggcmVmICRWYWx1ZSApIHsKICAgICAgICAgICAgJFZhbHVlID0gJEpTT05PYmplY3QtPkVuY29kZSggRGF0YSA9PiAkVmFsdWUgKTsKICAgICAgICB9CgogICAgICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0aWNrZXRfc2NoZWR1bGVyX2R5bmFtaWNfZmllbGQKICAgICAgICAgICAgICAgICAgICAoc2NoZWR1bGVyX2lkLCBmaWVsZF9uYW1lLCBmaWVsZF92YWx1ZSkKICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTY2hlZHVsZXJJRH0sIFwkRmllbGROYW1lLCBcJFZhbHVlIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9EeW5hbWljRmllbGRWYWx1ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgZmllbGRfbmFtZSwgZmllbGRfdmFsdWUgRlJPTSB0aWNrZXRfc2NoZWR1bGVyX2R5bmFtaWNfZmllbGQgV0hFUkUgc2NoZWR1bGVyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U2NoZWR1bGVySUR9IF0sCiAgICApOwoKICAgIG15ICVEeW5hbWljRmllbGRzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJFZhbHVlID0gJFJvd1sxXTsKCiAgICAgICAgIyBUcnkgdG8gZGVjb2RlIEpTT04gKGZvciBhcnJheXMvaGFzaGVzKQogICAgICAgIGlmICggJFZhbHVlICYmICRWYWx1ZSA9fiAvXltcW1x7XS8gKSB7CiAgICAgICAgICAgIG15ICREZWNvZGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKS0+RGVjb2RlKCBEYXRhID0+ICRWYWx1ZSApOwogICAgICAgICAgICAkVmFsdWUgPSAkRGVjb2RlZCBpZiAkRGVjb2RlZDsKICAgICAgICB9CgogICAgICAgICREeW5hbWljRmllbGRzeyAkUm93WzBdIH0gPSAkVmFsdWU7CiAgICB9CgogICAgcmV0dXJuIFwlRHluYW1pY0ZpZWxkczsKfQoKc3ViIF9EeW5hbWljRmllbGRWYWx1ZXNEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSB0aWNrZXRfc2NoZWR1bGVyX2R5bmFtaWNfZmllbGQgV0hFUkUgc2NoZWR1bGVyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U2NoZWR1bGVySUR9IF0sCiAgICApOwp9CgpzdWIgX0lzQ2hlY2tsaXN0QXZhaWxhYmxlIHsKICAgIG15ICgkU2VsZikgPSBAXzsKCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkNoZWNrbGlzdCcsCiAgICAgICAgU2lsZW50ID0+IDEsCiAgICApOwp9CgpzdWIgX0lzUHJvY2Vzc01hbmFnZW1lbnRBdmFpbGFibGUgewogICAgbXkgKCRTZWxmKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgQ2hlY2sgaWYgUHJvY2Vzc01hbmFnZW1lbnQgaXMgY29uZmlndXJlZAogICAgbXkgJFByb2Nlc3NMaXN0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9jZXNzJyk7CiAgICByZXR1cm4gMCBpZiAhJFByb2Nlc3NMaXN0IHx8ICEleyRQcm9jZXNzTGlzdH07CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfQ2hlY2tsaXN0VGVtcGxhdGVzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgcmV0dXJuIGlmICEkUGFyYW17U2NoZWR1bGVySUR9OwoKICAgIG15ICRUZW1wbGF0ZUlEcyA9ICRQYXJhbXtDaGVja2xpc3RUZW1wbGF0ZUlEc30gfHwgW107CiAgICByZXR1cm4gMSBpZiAhcmVmICRUZW1wbGF0ZUlEcyB8fCByZWYgJFRlbXBsYXRlSURzIG5lICdBUlJBWSc7CgogICAgbXkgJFNvcnRPcmRlciA9IDA7CiAgICBmb3IgbXkgJFRlbXBsYXRlSUQgKCBAeyRUZW1wbGF0ZUlEc30gKSB7CiAgICAgICAgbmV4dCBpZiAhJFRlbXBsYXRlSUQ7CgogICAgICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0aWNrZXRfc2NoZWR1bGVyX2NoZWNrbGlzdAogICAgICAgICAgICAgICAgICAgIChzY2hlZHVsZXJfaWQsIGNoZWNrbGlzdF90ZW1wbGF0ZV9pZCwgc29ydF9vcmRlcikKICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTY2hlZHVsZXJJRH0sIFwkVGVtcGxhdGVJRCwgXCRTb3J0T3JkZXIgXSwKICAgICAgICApOwogICAgICAgICRTb3J0T3JkZXIrKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9DaGVja2xpc3RUZW1wbGF0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gW10gaWYgISRQYXJhbXtTY2hlZHVsZXJJRH07CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIGNoZWNrbGlzdF90ZW1wbGF0ZV9pZAogICAgICAgICAgICBGUk9NIHRpY2tldF9zY2hlZHVsZXJfY2hlY2tsaXN0CiAgICAgICAgICAgIFdIRVJFIHNjaGVkdWxlcl9pZCA9ID8KICAgICAgICAgICAgT1JERVIgQlkgc29ydF9vcmRlciBBU0MnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1NjaGVkdWxlcklEfSBdLAogICAgKTsKCiAgICBteSBAVGVtcGxhdGVJRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBUZW1wbGF0ZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBUZW1wbGF0ZUlEczsKfQoKc3ViIF9DaGVja2xpc3RUZW1wbGF0ZXNEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICByZXR1cm4gaWYgISRQYXJhbXtTY2hlZHVsZXJJRH07CgogICAgcmV0dXJuICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gdGlja2V0X3NjaGVkdWxlcl9jaGVja2xpc3QgV0hFUkUgc2NoZWR1bGVyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U2NoZWR1bGVySUR9IF0sCiAgICApOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIFRpY2tldFNjaGVkdWxlciBwYWNrYWdlIGZvciBabnVueS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK</File>

        <!-- Console Command for Daemon -->
        <File Permission="660" Location="Kernel/System/Console/Command/Maint/Ticket/SchedulerRun.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6VGlja2V0OjpTY2hlZHVsZXJSdW47Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcicsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6Ok1haW50OjpUaWNrZXQ6OlNjaGVkdWxlclJ1biAtIEV4ZWN1dGUgcGVuZGluZyB0aWNrZXQgc2NoZWR1bGVzCgo9aGVhZDEgREVTQ1JJUFRJT04KClRoaXMgY29uc29sZSBjb21tYW5kIGV4ZWN1dGVzIGFsbCBwZW5kaW5nIHRpY2tldCBzY2hlZHVsZXMgdGhhdCBhcmUgZHVlLgpJdCBpcyBkZXNpZ25lZCB0byBiZSBydW4gYnkgdGhlIFpudW55IERhZW1vbiBhdCByZWd1bGFyIGludGVydmFscyAoZGVmYXVsdDogZXZlcnkgNSBtaW51dGVzKS4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgQ29uZmlndXJlKCkKCkNvbmZpZ3VyZSBjb21tYW5kIG9wdGlvbnMgYW5kIGRlc2NyaXB0aW9uLgoKPWN1dAoKc3ViIENvbmZpZ3VyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5EZXNjcmlwdGlvbignRXhlY3V0ZSBwZW5kaW5nIHRpY2tldCBzY2hlZHVsZXMgdG8gY3JlYXRlIHJlY3VycmluZyB0aWNrZXRzLicpOwoKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2RyeS1ydW4nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdTaG93IHdoYXQgd291bGQgYmUgZXhlY3V0ZWQgd2l0aG91dCBhY3R1YWxseSBjcmVhdGluZyB0aWNrZXRzLicsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAwLAogICAgKTsKCiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdmb3JjZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0V4ZWN1dGUgZXZlbiBpZiBUaWNrZXRTY2hlZHVsZXIgaXMgZGlzYWJsZWQgaW4gU3lzQ29uZmlnLicsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAwLAogICAgKTsKCiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdzY2hlZHVsZS1pZCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0V4ZWN1dGUgb25seSBhIHNwZWNpZmljIHNjaGVkdWxlIChieSBJRCkuJywKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvXlxkKyQvc214LAogICAgKTsKCiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdzaW11bGF0ZS10aW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2ltdWxhdGUgZXhlY3V0aW9uIGF0IGEgc3BlY2lmaWMgdGltZSAoZm9ybWF0OiBZWVlZLU1NLUREIEhIOk1NOlNTKS4gRm9yIHRlc3Rpbmcgb25seSEnLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9eXGR7NH0tXGR7Mn0tXGR7Mn1ccytcZHsyfTpcZHsyfTpcZHsyfSQvc214LAogICAgKTsKCiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICduby10aWNrZXQnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdEbyBub3QgY3JlYXRlIGFjdHVhbCB0aWNrZXRzIChzaW11bGF0aW9uIG1vZGUpLiBVc2Ugd2l0aCAtLXNpbXVsYXRlLXRpbWUuJywKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDAsCiAgICApOwoKICAgIHJldHVybjsKfQoKPWhlYWQyIFByZVJ1bigpCgpQZXJmb3JtIHByZS1ydW4gY2hlY2tzLgoKPWN1dAoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgQ2hlY2sgaWYgZmVhdHVyZSBpcyBlbmFibGVkICh1bmxlc3MgLS1mb3JjZSBpcyB1c2VkKQogICAgaWYgKCAhJFNlbGYtPkdldE9wdGlvbignZm9yY2UnKSApIHsKICAgICAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldFNjaGVkdWxlcjo6RW5hYmxlZCcpICkgewogICAgICAgICAgICBkaWUgIlRpY2tldFNjaGVkdWxlciBpcyBkaXNhYmxlZCBpbiBTeXNDb25maWcuIFVzZSAtLWZvcmNlIHRvIG92ZXJyaWRlLlxuIjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBSdW4oKQoKRXhlY3V0ZSB0aGUgY29tbWFuZC4KCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcicpOwoKICAgIG15ICREcnlSdW4gICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdkcnktcnVuJyk7CiAgICBteSAkU2NoZWR1bGVJRCAgID0gJFNlbGYtPkdldE9wdGlvbignc2NoZWR1bGUtaWQnKTsKICAgIG15ICRTaW11bGF0ZVRpbWUgPSAkU2VsZi0+R2V0T3B0aW9uKCdzaW11bGF0ZS10aW1lJyk7CiAgICBteSAkTm9UaWNrZXQgICAgID0gJFNlbGYtPkdldE9wdGlvbignbm8tdGlja2V0Jyk7CgogICAgIyBCdWlsZCBzaW11bGF0aW9uIG9wdGlvbnMKICAgIG15ICVTaW11bGF0ZU9wdGlvbnM7CiAgICBpZiAoJFNpbXVsYXRlVGltZSkgewogICAgICAgICRTaW11bGF0ZU9wdGlvbnN7U2ltdWxhdGVUaW1lfSA9ICRTaW11bGF0ZVRpbWU7CiAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PlRpY2tldFNjaGVkdWxlcjogU0lNVUxBVElPTiBNT0RFIC0gVGltZTogJFNpbXVsYXRlVGltZTwveWVsbG93PlxuIik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+VGlja2V0U2NoZWR1bGVyOiBDaGVja2luZyBmb3IgcGVuZGluZyBzY2hlZHVsZXMuLi48L3llbGxvdz5cbiIpOwogICAgfQoKICAgIGlmICgkTm9UaWNrZXQpIHsKICAgICAgICAkU2ltdWxhdGVPcHRpb25ze05vVGlja2V0fSA9IDE7CiAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PiAgKE5vIGFjdHVhbCB0aWNrZXRzIHdpbGwgYmUgY3JlYXRlZCk8L3llbGxvdz5cbiIpOwogICAgfQoKICAgICMgRXhlY3V0ZSBzcGVjaWZpYyBzY2hlZHVsZSBvciBhbGwgcGVuZGluZwogICAgbXkgQFJlc3VsdHM7CgogICAgaWYgKCRTY2hlZHVsZUlEKSB7CiAgICAgICAgIyBFeGVjdXRlIHNwZWNpZmljIHNjaGVkdWxlCiAgICAgICAgaWYgKCREcnlSdW4pIHsKICAgICAgICAgICAgbXkgJVNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KCBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVJRCApOwogICAgICAgICAgICBpZiAoJVNjaGVkdWxlKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+UHJpbnQoIiAgW0RSWS1SVU5dIFdvdWxkIGV4ZWN1dGU6ICRTY2hlZHVsZXtOYW1lfSAoSUQ6ICRTY2hlZHVsZUlEKVxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiU2NoZWR1bGUgSUQgJFNjaGVkdWxlSUQgbm90IGZvdW5kLlxuIik7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJFRpY2tldElEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+RXhlY3V0ZVNjaGVkdWxlcigKICAgICAgICAgICAgICAgIFNjaGVkdWxlcklEID0+ICRTY2hlZHVsZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICVTaW11bGF0ZU9wdGlvbnMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBSZXN1bHRzLCB7CiAgICAgICAgICAgICAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVJRCwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgID0+ICggJFRpY2tldElEIHx8ICROb1RpY2tldCApID8gMSA6IDAsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBFeGVjdXRlIGFsbCBwZW5kaW5nIHNjaGVkdWxlcwogICAgICAgIGlmICgkRHJ5UnVuKSB7CiAgICAgICAgICAgICMgR2V0IHBlbmRpbmcgc2NoZWR1bGVzIGZvciBkcnktcnVuIGluZm8KICAgICAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICAgICAjIFVzZSBQZXJsJ3MgRGF0ZVRpbWUgZm9yIHRpbWUgY29tcGFyaXNvbiAoYWxsb3dzIGZha2V0aW1lIHRvIHdvcmspCiAgICAgICAgICAgICMgSWYgLS1zaW11bGF0ZS10aW1lIGlzIHByb3ZpZGVkLCB1c2UgdGhhdDsgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IHRpbWUgZnJvbSBQZXJsCiAgICAgICAgICAgIG15ICRDb21wYXJlVGltZTsKICAgICAgICAgICAgaWYgKCRTaW11bGF0ZVRpbWUpIHsKICAgICAgICAgICAgICAgICRDb21wYXJlVGltZSA9ICRTaW11bGF0ZVRpbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkTm93ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgICAgICAgICAkQ29tcGFyZVRpbWUgPSAkTm93LT5Ub1N0cmluZygpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkVGltZUNvbmRpdGlvbiA9ICc/JzsKICAgICAgICAgICAgbXkgQEJpbmQgPSAoIFwkQ29tcGFyZVRpbWUgKTsKCiAgICAgICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgaWQsIG5hbWUsIG5leHRfZXhlY3V0aW9uIEZST00gdGlja2V0X3NjaGVkdWxlcgogICAgICAgICAgICAgICAgICAgIFdIRVJFIHZhbGlkX2lkID0gMQogICAgICAgICAgICAgICAgICAgICAgQU5EIG5leHRfZXhlY3V0aW9uIElTIE5PVCBOVUxMCiAgICAgICAgICAgICAgICAgICAgICBBTkQgbmV4dF9leGVjdXRpb24gPD0gJFRpbWVDb25kaXRpb24KICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSBuZXh0X2V4ZWN1dGlvbiBBU0MiLAogICAgICAgICAgICAgICAgQmluZCA9PiBcQEJpbmQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSBAUGVuZGluZzsKICAgICAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBQZW5kaW5nLCB7IElEID0+ICRSb3dbMF0sIE5hbWUgPT4gJFJvd1sxXSwgTmV4dEV4ZWN1dGlvbiA9PiAkUm93WzJdIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChAUGVuZGluZykgewogICAgICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+Rm91bmQgIiAuIHNjYWxhcihAUGVuZGluZykgLiAiIHBlbmRpbmcgc2NoZWR1bGUocyk6PC9ncmVlbj5cbiIpOwogICAgICAgICAgICAgICAgZm9yIG15ICRTY2hlZHVsZSAoQFBlbmRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+UHJpbnQoIiAgW0RSWS1SVU5dIFdvdWxkIGV4ZWN1dGU6ICRTY2hlZHVsZS0+e05hbWV9IChJRDogJFNjaGVkdWxlLT57SUR9LCBOZXh0RXhlYzogJFNjaGVkdWxlLT57TmV4dEV4ZWN1dGlvbn0pXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPk5vIHBlbmRpbmcgc2NoZWR1bGVzIGZvdW5kLjwvZ3JlZW4+XG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgQFJlc3VsdHMgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5FeGVjdXRlUGVuZGluZ1NjaGVkdWxlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgJVNpbXVsYXRlT3B0aW9ucywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBSZXBvcnQgcmVzdWx0cyAodW5sZXNzIGRyeS1ydW4pCiAgICBpZiAoICEkRHJ5UnVuICkgewogICAgICAgIG15ICRTdWNjZXNzQ291bnQgPSAwOwogICAgICAgIG15ICRGYWlsQ291bnQgICAgPSAwOwoKICAgICAgICBmb3IgbXkgJFJlc3VsdCAoQFJlc3VsdHMpIHsKICAgICAgICAgICAgaWYgKCAkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICAkU3VjY2Vzc0NvdW50Kys7CiAgICAgICAgICAgICAgICBteSAkVGl0bGVJbmZvID0gJFJlc3VsdC0+e1RpdGxlfSA/ICI6ICckUmVzdWx0LT57VGl0bGV9JyIgOiAnJzsKICAgICAgICAgICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPiAgQ3JlYXRlZCB0aWNrZXQgJFJlc3VsdC0+e1RpY2tldElEfSBmb3Igc2NoZWR1bGUgJFJlc3VsdC0+e1NjaGVkdWxlcklEfSRUaXRsZUluZm88L2dyZWVuPlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRmFpbENvdW50Kys7CiAgICAgICAgICAgICAgICBteSAkTmFtZUluZm8gPSAkUmVzdWx0LT57U2NoZWR1bGVyTmFtZX0gPyAiICgkUmVzdWx0LT57U2NoZWR1bGVyTmFtZX0pIiA6ICcnOwogICAgICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8cmVkPiAgRmFpbGVkIHRvIGNyZWF0ZSB0aWNrZXQgZm9yIHNjaGVkdWxlICRSZXN1bHQtPntTY2hlZHVsZXJJRH0kTmFtZUluZm88L3JlZD5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIEBSZXN1bHRzID09IDAgKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPk5vIHBlbmRpbmcgc2NoZWR1bGVzIGZvdW5kLjwvZ3JlZW4+XG4iKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiXG48eWVsbG93PlN1bW1hcnk6ICRTdWNjZXNzQ291bnQgc3VjY2VlZGVkLCAkRmFpbENvdW50IGZhaWxlZDwveWVsbG93PlxuIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoJEZhaWxDb3VudCkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CgogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgVGlja2V0U2NoZWR1bGVyIHBhY2thZ2UgZm9yIFpudW55LgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>

        <!-- Frontend Modules -->
        <File Permission="660" Location="Kernel/Modules/AgentTicketScheduler.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRTY2hlZHVsZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWU7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldFNjaGVkdWxlciAtIEZyb250ZW5kIG1vZHVsZSBmb3IgbWFuYWdpbmcgdGlja2V0IHNjaGVkdWxlcwoKPWhlYWQxIERFU0NSSVBUSU9OCgpUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgd2ViIGludGVyZmFjZSBmb3Igdmlld2luZyBhbmQgbWFuYWdpbmcgdGlja2V0IHNjaGVkdWxlcy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJ1bigpCgpNYWluIG1ldGhvZCBmb3IgaGFuZGxpbmcgYWxsIHN1YmFjdGlvbnMuCgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBHZXQgc3ViYWN0aW9uCiAgICBteSAkU3ViYWN0aW9uID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKSB8fCAnJzsKCiAgICAjIFNFQ1VSSVRZOiByZWFkIG9uY2UgaGVyZSBzbyBpdCBjYW4gYmUgcGFzc2VkIGludG8gX0hhc1JXUGVybWlzc2lvbigpCiAgICAjIGZvciBxdWV1ZS1zY29wZWQgcGVybWlzc2lvbiBjaGVja3Mgb24gYWN0aW9ucyB0YXJnZXRpbmcgYW4gZXhpc3RpbmcKICAgICMgc2NoZWR1bGUgKERlbGV0ZS9Ub2dnbGVWYWxpZC9EdXBsaWNhdGUvRXhlY3V0ZU5vdykuCiAgICBteSAkU2NoZWR1bGVySUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NoZWR1bGVySUQnICkgfHwgJyc7CgogICAgIyBEaXNwYXRjaCB0byBzdWJhY3Rpb24gaGFuZGxlcgogICAgaWYgKCAkU3ViYWN0aW9uIGVxICdBZGQnIHx8ICRTdWJhY3Rpb24gZXEgJ0VkaXQnICkgewogICAgICAgICMgQ2hlY2sgUlcgcGVybWlzc2lvbiBmb3IgQWRkL0VkaXQKICAgICAgICBpZiAoICEkU2VsZi0+X0hhc1JXUGVybWlzc2lvbigpICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dGb3JtKCVQYXJhbSk7CiAgICB9CiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgJ1NhdmUnICkgewogICAgICAgICMgQ2hlY2sgUlcgcGVybWlzc2lvbgogICAgICAgIGlmICggISRTZWxmLT5fSGFzUldQZXJtaXNzaW9uKCkgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRTZWxmLT5fU2F2ZSglUGFyYW0pOwogICAgfQogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICdEZWxldGUnICkgewogICAgICAgICMgQ2hlY2sgUlcgcGVybWlzc2lvbiAocXVldWUtc2NvcGVkIGZvciBNYW5hZ2VyLWxldmVsIGFnZW50cykKICAgICAgICBpZiAoICEkU2VsZi0+X0hhc1JXUGVybWlzc2lvbiggU2NoZWR1bGVySUQgPT4gJFNjaGVkdWxlcklEICkgKSB7CiAgICAgICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FKQVgnICkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ3sic3VjY2VzcyI6ZmFsc2UsImVycm9yIjoiTm8gcGVybWlzc2lvbiJ9JywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkU2VsZi0+X0RlbGV0ZSglUGFyYW0pOwogICAgfQogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICdUb2dnbGVWYWxpZCcgKSB7CiAgICAgICAgIyBDaGVjayBSVyBwZXJtaXNzaW9uIChxdWV1ZS1zY29wZWQgZm9yIE1hbmFnZXItbGV2ZWwgYWdlbnRzKQogICAgICAgIGlmICggISRTZWxmLT5fSGFzUldQZXJtaXNzaW9uKCBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQgKSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQUpBWCcgKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAneyJzdWNjZXNzIjpmYWxzZSwiZXJyb3IiOiJObyBwZXJtaXNzaW9uIn0nLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRTZWxmLT5fVG9nZ2xlVmFsaWQoJVBhcmFtKTsKICAgIH0KICAgIGVsc2lmICggJFN1YmFjdGlvbiBlcSAnRHVwbGljYXRlJyApIHsKICAgICAgICAjIENoZWNrIFJXIHBlcm1pc3Npb24gKHF1ZXVlLXNjb3BlZCBmb3IgTWFuYWdlci1sZXZlbCBhZ2VudHMpCiAgICAgICAgaWYgKCAhJFNlbGYtPl9IYXNSV1Blcm1pc3Npb24oIFNjaGVkdWxlcklEID0+ICRTY2hlZHVsZXJJRCApICkgewogICAgICAgICAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBSkFYJyApICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICd7InN1Y2Nlc3MiOmZhbHNlLCJlcnJvciI6Ik5vIHBlcm1pc3Npb24ifScsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJFNlbGYtPl9EdXBsaWNhdGUoJVBhcmFtKTsKICAgIH0KICAgIGVsc2lmICggJFN1YmFjdGlvbiBlcSAnRXhlY3V0ZU5vdycgKSB7CiAgICAgICAgIyBDaGVjayBSVyBwZXJtaXNzaW9uIChxdWV1ZS1zY29wZWQgZm9yIE1hbmFnZXItbGV2ZWwgYWdlbnRzKQogICAgICAgIGlmICggISRTZWxmLT5fSGFzUldQZXJtaXNzaW9uKCBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQgKSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQUpBWCcgKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAneyJzdWNjZXNzIjpmYWxzZSwiZXJyb3IiOiJObyBwZXJtaXNzaW9uIn0nLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRTZWxmLT5fRXhlY3V0ZU5vdyglUGFyYW0pOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fU2hvd0xpc3QoJVBhcmFtKTsKICAgIH0KfQoKPWhlYWQyIF9TaG93TGlzdCgpCgpTaG93IGxpc3Qgb2YgYWxsIHNjaGVkdWxlcy4KCj1jdXQKCnN1YiBfU2hvd0xpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0U2NoZWR1bGVyJyk7CiAgICBteSAkUXVldWVPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkVXNlck9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIEdldCBmaWx0ZXIgcGFyYW1ldGVycwogICAgbXkgJFNlYXJjaCAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VhcmNoJyApIHx8ICcnOwogICAgbXkgJFF1ZXVlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUXVldWVJRCcgKSB8fCAnJzsKICAgIG15ICRWYWxpZElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZhbGlkSUQnICk7CiAgICBteSAkTW9kZSAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdNb2RlJyApIHx8ICcnOwoKICAgICMgR2V0IHNjaGVkdWxlcwogICAgbXkgQFNjaGVkdWxlcyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckxpc3QoCiAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgU2VhcmNoICA9PiAkU2VhcmNoLAogICAgICAgIFF1ZXVlSUQgPT4gJFF1ZXVlSUQsCiAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRJRCwKICAgICAgICBNb2RlICAgID0+ICRNb2RlLAogICAgKTsKCiAgICAjIEJ1aWxkIHF1ZXVlIG5hbWUgbG9va3VwCiAgICBteSAlUXVldWVOYW1lczsKICAgIGZvciBteSAkU2NoZWR1bGUgKEBTY2hlZHVsZXMpIHsKICAgICAgICBpZiAoICEkUXVldWVOYW1lc3sgJFNjaGVkdWxlLT57UXVldWVJRH0gfSApIHsKICAgICAgICAgICAgJFF1ZXVlTmFtZXN7ICRTY2hlZHVsZS0+e1F1ZXVlSUR9IH0gPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKAogICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkU2NoZWR1bGUtPntRdWV1ZUlEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBCdWlsZCB1c2VyIG5hbWUgbG9va3VwCiAgICBteSAlVXNlck5hbWVzOwogICAgZm9yIG15ICRTY2hlZHVsZSAoQFNjaGVkdWxlcykgewogICAgICAgIGlmICggISRVc2VyTmFtZXN7ICRTY2hlZHVsZS0+e0NyZWF0ZUJ5fSB9ICkgewogICAgICAgICAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSggVXNlcklEID0+ICRTY2hlZHVsZS0+e0NyZWF0ZUJ5fSApOwogICAgICAgICAgICAkVXNlck5hbWVzeyAkU2NoZWR1bGUtPntDcmVhdGVCeX0gfSA9ICRVc2Vye1VzZXJGdWxsbmFtZX0gfHwgJFVzZXJ7VXNlckxvZ2lufTsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayBpZiB1c2VyIGhhcyBSVyBwZXJtaXNzaW9uIChjYW4gYWRkL2VkaXQvZGVsZXRlKQogICAgbXkgJEhhc1JXUGVybWlzc2lvbiA9ICRTZWxmLT5fSGFzUldQZXJtaXNzaW9uKCk7CgogICAgIyBPdXRwdXQgc2NoZWR1bGUgcm93cwogICAgZm9yIG15ICRTY2hlZHVsZSAoQFNjaGVkdWxlcykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTY2hlZHVsZVJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskU2NoZWR1bGV9LAogICAgICAgICAgICAgICAgUXVldWVOYW1lICAgICAgID0+ICRRdWV1ZU5hbWVzeyAkU2NoZWR1bGUtPntRdWV1ZUlEfSB9IHx8ICctJywKICAgICAgICAgICAgICAgIENyZWF0b3JOYW1lICAgICA9PiAkVXNlck5hbWVzeyAkU2NoZWR1bGUtPntDcmVhdGVCeX0gfSB8fCAnLScsCiAgICAgICAgICAgICAgICBJc0FjdGl2ZSAgICAgICAgPT4gJFNjaGVkdWxlLT57VmFsaWRJRH0gPT0gMSA/IDEgOiAwLAogICAgICAgICAgICAgICAgVHlwZUljb24gICAgICAgID0+ICRTY2hlZHVsZS0+e1NjaGVkdWxlTW9kZX0gZXEgJ3Byb2Nlc3MnID8gJ2ZhLWNvZ3MnIDogJ2ZhLXRpY2tldCcsCiAgICAgICAgICAgICAgICBUeXBlVGl0bGUgICAgICAgPT4gJFNjaGVkdWxlLT57U2NoZWR1bGVNb2RlfSBlcSAncHJvY2VzcycgPyAnUHJvY2VzcyBUaWNrZXQnIDogJ05vcm1hbCBUaWNrZXQnLAogICAgICAgICAgICAgICAgSGFzUldQZXJtaXNzaW9uID0+ICRIYXNSV1Blcm1pc3Npb24sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFNob3cgZW1wdHkgbWVzc2FnZSBpZiBubyBzY2hlZHVsZXMKICAgIGlmICggIUBTY2hlZHVsZXMgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vU2NoZWR1bGVzRm91bmQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBCdWlsZCBxdWV1ZSBmaWx0ZXIgZHJvcGRvd24KICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlTGlzdCggVmFsaWQgPT4gMSApOwogICAgbXkgJFF1ZXVlU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVF1ZXVlcywKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUXVldWVJRCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgQnVpbGQgc3RhdHVzIGZpbHRlciBkcm9wZG93bgogICAgbXkgJVN0YXR1c09wdGlvbnMgPSAoCiAgICAgICAgJycgID0+ICctIEFsbCAtJywKICAgICAgICAnMScgPT4gJ0FjdGl2ZScsCiAgICAgICAgJzInID0+ICdJbmFjdGl2ZScsCiAgICApOwogICAgbXkgJFN0YXR1c1N0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlU3RhdHVzT3B0aW9ucywKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRWYWxpZElEIC8vICcnLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgQnVpbGQgbW9kZSBmaWx0ZXIgZHJvcGRvd24KICAgIG15ICVNb2RlT3B0aW9ucyA9ICgKICAgICAgICAnJyAgICAgICAgPT4gJy0gQWxsIC0nLAogICAgICAgICd0aWNrZXQnICA9PiAnTm9ybWFsIFRpY2tldHMnLAogICAgICAgICdwcm9jZXNzJyA9PiAnUHJvY2VzcyBUaWNrZXRzJywKICAgICk7CiAgICBteSAkTW9kZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlTW9kZU9wdGlvbnMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnTW9kZScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkTW9kZSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIENoZWNrIGlmIFByb2Nlc3NNYW5hZ2VtZW50IGlzIGF2YWlsYWJsZSBmb3IgIk5ldyBQcm9jZXNzIFRpY2tldCIgYnV0dG9uCiAgICBteSAkUHJvY2Vzc0F2YWlsYWJsZSA9ICRTZWxmLT5fSXNQcm9jZXNzTWFuYWdlbWVudEF2YWlsYWJsZSgpOwoKICAgICMgT3V0cHV0IEhUTUwKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRTY2hlZHVsZXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFNlYXJjaCAgICAgICAgICAgPT4gJFNlYXJjaCwKICAgICAgICAgICAgUXVldWVTdHJnICAgICAgICA9PiAkUXVldWVTdHJnLAogICAgICAgICAgICBTdGF0dXNTdHJnICAgICAgID0+ICRTdGF0dXNTdHJnLAogICAgICAgICAgICBNb2RlU3RyZyAgICAgICAgID0+ICRNb2RlU3RyZywKICAgICAgICAgICAgU2NoZWR1bGVDb3VudCAgICA9PiBzY2FsYXIgQFNjaGVkdWxlcywKICAgICAgICAgICAgUHJvY2Vzc0F2YWlsYWJsZSA9PiAkUHJvY2Vzc0F2YWlsYWJsZSwKICAgICAgICAgICAgSGFzUldQZXJtaXNzaW9uICA9PiAkSGFzUldQZXJtaXNzaW9uLAogICAgICAgIH0sCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCj1oZWFkMiBfU2hvd0Zvcm0oKQoKU2hvdyBhZGQvZWRpdCBmb3JtIGZvciBhIHNjaGVkdWxlLgoKPWN1dAoKc3ViIF9TaG93Rm9ybSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFRpY2tldFNjaGVkdWxlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXInKTsKICAgIG15ICRRdWV1ZU9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKICAgIG15ICRQcmlvcml0eU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKTsKICAgIG15ICRUeXBlT2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVXBsb2FkQ2FjaGVPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKTsKICAgIG15ICRDdXN0b21lclVzZXJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CgogICAgbXkgJFNjaGVkdWxlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NjaGVkdWxlcklEJyApIHx8ICcnOwogICAgbXkgJFN1YmFjdGlvbiAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKSB8fCAnQWRkJzsKCiAgICBteSAlU2NoZWR1bGU7CiAgICBpZiAoICRTY2hlZHVsZXJJRCAmJiAkU3ViYWN0aW9uIGVxICdFZGl0JyApIHsKICAgICAgICAlU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoIFNjaGVkdWxlcklEID0+ICRTY2hlZHVsZXJJRCApOwogICAgfQoKICAgICMgR2V0IEN1c3RvbWVyVXNlciBkaXNwbGF5IG5hbWUgaWYgYSBsb2dpbiBpcyBzdG9yZWQKICAgIG15ICRDdXN0b21lclVzZXJEaXNwbGF5ID0gJyc7CiAgICBpZiAoICRTY2hlZHVsZXtDdXN0b21lclVzZXJMb2dpbn0gKSB7CiAgICAgICAgbXkgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICBVc2VyID0+ICRTY2hlZHVsZXtDdXN0b21lclVzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJUN1c3RvbWVyVXNlckRhdGEpIHsKICAgICAgICAgICAgIyBCdWlsZCBkaXNwbGF5IHN0cmluZyBsaWtlICJGaXJzdG5hbWUgTGFzdG5hbWUgPGVtYWlsPiIKICAgICAgICAgICAgJEN1c3RvbWVyVXNlckRpc3BsYXkgPSAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyRmlyc3RuYW1lfSB8fCAnJzsKICAgICAgICAgICAgJEN1c3RvbWVyVXNlckRpc3BsYXkgLj0gJyAnIGlmICRDdXN0b21lclVzZXJEaXNwbGF5ICYmICRDdXN0b21lclVzZXJEYXRhe1VzZXJMYXN0bmFtZX07CiAgICAgICAgICAgICRDdXN0b21lclVzZXJEaXNwbGF5IC49ICRDdXN0b21lclVzZXJEYXRhe1VzZXJMYXN0bmFtZX0gfHwgJyc7CiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyVXNlckRhdGF7VXNlckVtYWlsfSApIHsKICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJEaXNwbGF5IC49ICcgPCcgLiAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyRW1haWx9IC4gJz4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgICMgRmFsbGJhY2sgdG8gbG9naW4gaWYgbm8gbmFtZSBhdmFpbGFibGUKICAgICAgICAgICAgJEN1c3RvbWVyVXNlckRpc3BsYXkgfHw9ICRTY2hlZHVsZXtDdXN0b21lclVzZXJMb2dpbn07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIEN1c3RvbWVyVXNlciBub3QgZm91bmQsIHNob3cgbG9naW4KICAgICAgICAgICAgJEN1c3RvbWVyVXNlckRpc3BsYXkgPSAkU2NoZWR1bGV7Q3VzdG9tZXJVc2VyTG9naW59OwogICAgICAgIH0KICAgIH0KICAgICRTY2hlZHVsZXtDdXN0b21lclVzZXJEaXNwbGF5fSA9ICRDdXN0b21lclVzZXJEaXNwbGF5OwoKICAgICMgU2V0IGRlZmF1bHRzIGZvciBuZXcgc2NoZWR1bGUKICAgIGlmICggISVTY2hlZHVsZSApIHsKICAgICAgICAlU2NoZWR1bGUgPSAoCiAgICAgICAgICAgIFNjaGVkdWxlTW9kZSA9PiAndGlja2V0JywKICAgICAgICAgICAgU2NoZWR1bGVUeXBlID0+ICd3ZWVrbHknLAogICAgICAgICAgICBFbmRUeXBlICAgICAgPT4gJ25ldmVyJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIHdlZWtkYXlzID0+IFsxXSwKICAgICAgICAgICAgICAgIHRpbWUgICAgID0+ICcwOTowMCcsCiAgICAgICAgICAgICAgICB0aW1lem9uZSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldFNjaGVkdWxlcjo6RGVmYXVsdFRpbWV6b25lJykgfHwgJ0V1cm9wZS9CZXJsaW4nLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBHZXQgU2NoZWR1bGVDb25maWcgYXMgaGFzaHJlZgogICAgbXkgJENvbmZpZyA9ICRTY2hlZHVsZXtTY2hlZHVsZUNvbmZpZ30gfHwge307CiAgICBpZiAoICFyZWYgJENvbmZpZyApIHsKICAgICAgICAkQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKS0+RGVjb2RlKCBEYXRhID0+ICRDb25maWcgKSB8fCB7fTsKICAgIH0KCiAgICAjIEJ1aWxkIFF1ZXVlIGRyb3Bkb3duCiAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKICAgIG15ICRRdWV1ZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVRdWV1ZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdRdWV1ZUlEJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFNjaGVkdWxle1F1ZXVlSUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkJywKICAgICk7CgogICAgIyBCdWlsZCBQcmlvcml0eSBkcm9wZG93bgogICAgbXkgJVByaW9yaXRpZXMgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5TGlzdCggVmFsaWQgPT4gMSApOwogICAgbXkgJFByaW9yaXR5U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVByaW9yaXRpZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFNjaGVkdWxle1ByaW9yaXR5SUR9IHx8IDMsCiAgICAgICAgUG9zc2libGVOb25lID0+IDAsCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIEJ1aWxkIFR5cGUgZHJvcGRvd24gKGlmIGVuYWJsZWQpCiAgICBteSAkVHlwZVN0cmcgPSAnJzsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSApIHsKICAgICAgICBteSAlVHlwZXMgPSAkVHlwZU9iamVjdC0+VHlwZUxpc3QoIFZhbGlkID0+IDEgKTsKICAgICAgICAkVHlwZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlVHlwZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRTY2hlZHVsZXtUeXBlSUR9LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwogICAgfQoKICAgICMgQnVpbGQgU2NoZWR1bGUgVHlwZSBkcm9wZG93bgogICAgbXkgJVNjaGVkdWxlVHlwZXMgPSAoCiAgICAgICAgZGFpbHkgICAgICAgICAgICAgICAgICA9PiAnRGFpbHknLAogICAgICAgIHdlZWtseSAgICAgICAgICAgICAgICAgPT4gJ1dlZWtseScsCiAgICAgICAgbW9udGhseV9kYXkgICAgICAgICAgICA9PiAnTW9udGhseSAoRGF5KScsCiAgICAgICAgbW9udGhseV93ZWVrZGF5ICAgICAgICA9PiAnTW9udGhseSAoV2Vla2RheSknLAogICAgICAgIG1vbnRobHlfd2Vla2RheV9vZmZzZXQgPT4gJ01vbnRobHkgKFdlZWtkYXkgKyBPZmZzZXQpJywKICAgICAgICB5ZWFybHkgICAgICAgICAgICAgICAgID0+ICdZZWFybHknLAogICAgICAgIGludGVydmFsICAgICAgICAgICAgICAgPT4gJ0V2ZXJ5IFggRGF5cycsCiAgICApOwogICAgbXkgJFNjaGVkdWxlVHlwZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlU2NoZWR1bGVUeXBlcywKICAgICAgICBOYW1lICAgICAgID0+ICdTY2hlZHVsZVR5cGUnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFNjaGVkdWxle1NjaGVkdWxlVHlwZX0gfHwgJ3dlZWtseScsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBCdWlsZCBFbmQgVHlwZSBkcm9wZG93bgogICAgbXkgJUVuZFR5cGVzID0gKAogICAgICAgIG5ldmVyICAgICAgID0+ICdOZXZlciAocnVucyBpbmRlZmluaXRlbHkpJywKICAgICAgICBvY2N1cnJlbmNlcyA9PiAnQWZ0ZXIgWCBleGVjdXRpb25zJywKICAgICAgICBkYXRlICAgICAgICA9PiAnVW50aWwgZGF0ZScsCiAgICApOwogICAgbXkgJEVuZFR5cGVTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJUVuZFR5cGVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0VuZFR5cGUnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFNjaGVkdWxle0VuZFR5cGV9IHx8ICduZXZlcicsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBCdWlsZCBXZWVrZGF5IGNoZWNrYm94ZXMKICAgIG15IEBXZWVrZGF5cyA9IHF3KDEgMiAzIDQgNSA2IDcpOwogICAgbXkgJVdlZWtkYXlOYW1lcyA9ICgKICAgICAgICAxID0+ICdNb25kYXknLAogICAgICAgIDIgPT4gJ1R1ZXNkYXknLAogICAgICAgIDMgPT4gJ1dlZG5lc2RheScsCiAgICAgICAgNCA9PiAnVGh1cnNkYXknLAogICAgICAgIDUgPT4gJ0ZyaWRheScsCiAgICAgICAgNiA9PiAnU2F0dXJkYXknLAogICAgICAgIDcgPT4gJ1N1bmRheScsCiAgICApOwogICAgbXkgJVNlbGVjdGVkV2Vla2RheXMgPSBtYXAgeyAkXyA9PiAxIH0gQHsgJENvbmZpZy0+e3dlZWtkYXlzfSB8fCBbMV0gfTsKCiAgICBmb3IgbXkgJERheSAoQFdlZWtkYXlzKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1dlZWtkYXlDaGVja2JveCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGF5ICAgICAgPT4gJERheSwKICAgICAgICAgICAgICAgIERheU5hbWUgID0+ICRXZWVrZGF5TmFtZXN7JERheX0sCiAgICAgICAgICAgICAgICBDaGVja2VkICA9PiAkU2VsZWN0ZWRXZWVrZGF5c3skRGF5fSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgQnVpbGQgTnRoIGRyb3Bkb3duIChmb3IgbW9udGhseSB3ZWVrZGF5KSAtIHVzZSBhcnJheSBmb3IgY29ycmVjdCBvcmRlcgogICAgbXkgQE50aE9wdGlvbnMgPSAoCiAgICAgICAgeyBLZXkgPT4gMSwgIFZhbHVlID0+ICcxc3QnIH0sCiAgICAgICAgeyBLZXkgPT4gMiwgIFZhbHVlID0+ICcybmQnIH0sCiAgICAgICAgeyBLZXkgPT4gMywgIFZhbHVlID0+ICczcmQnIH0sCiAgICAgICAgeyBLZXkgPT4gNCwgIFZhbHVlID0+ICc0dGgnIH0sCiAgICAgICAgeyBLZXkgPT4gLTEsIFZhbHVlID0+ICdMYXN0JyB9LAogICAgKTsKICAgIG15ICROdGhTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcQE50aE9wdGlvbnMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnTnRoJywKICAgICAgICBTZWxlY3RlZElEID0+ICRDb25maWctPntudGh9IHx8IDEsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBCdWlsZCBXZWVrZGF5IGRyb3Bkb3duIChmb3IgbW9udGhseSB3ZWVrZGF5KSAtIHVzZSBhcnJheSBmb3IgY29ycmVjdCBvcmRlcgogICAgbXkgQFdlZWtkYXlPcHRpb25zID0gKAogICAgICAgIHsgS2V5ID0+ICdtb24nLCBWYWx1ZSA9PiAnTW9uZGF5JyB9LAogICAgICAgIHsgS2V5ID0+ICd0dWUnLCBWYWx1ZSA9PiAnVHVlc2RheScgfSwKICAgICAgICB7IEtleSA9PiAnd2VkJywgVmFsdWUgPT4gJ1dlZG5lc2RheScgfSwKICAgICAgICB7IEtleSA9PiAndGh1JywgVmFsdWUgPT4gJ1RodXJzZGF5JyB9LAogICAgICAgIHsgS2V5ID0+ICdmcmknLCBWYWx1ZSA9PiAnRnJpZGF5JyB9LAogICAgICAgIHsgS2V5ID0+ICdzYXQnLCBWYWx1ZSA9PiAnU2F0dXJkYXknIH0sCiAgICAgICAgeyBLZXkgPT4gJ3N1bicsIFZhbHVlID0+ICdTdW5kYXknIH0sCiAgICApOwogICAgIyBDb252ZXJ0IG51bWVyaWMgd2Vla2RheSB2YWx1ZXMgKDEtNykgdG8gc3RyaW5nIGNvZGVzIGZvciBzZWxlY3Rpb24KICAgIG15ICVOdW1lcmljVG9Db2RlID0gKCAxID0+ICdtb24nLCAyID0+ICd0dWUnLCAzID0+ICd3ZWQnLCA0ID0+ICd0aHUnLCA1ID0+ICdmcmknLCA2ID0+ICdzYXQnLCA3ID0+ICdzdW4nICk7CiAgICBteSAkU2VsZWN0ZWRXZWVrZGF5ID0gJENvbmZpZy0+e3dlZWtkYXl9IHx8ICdtb24nOwogICAgaWYgKCAkU2VsZWN0ZWRXZWVrZGF5ID1+IC9eXGQrJC8gJiYgJE51bWVyaWNUb0NvZGV7JFNlbGVjdGVkV2Vla2RheX0gKSB7CiAgICAgICAgJFNlbGVjdGVkV2Vla2RheSA9ICROdW1lcmljVG9Db2RleyRTZWxlY3RlZFdlZWtkYXl9OwogICAgfQogICAgbXkgJFdlZWtkYXlTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcQFdlZWtkYXlPcHRpb25zLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1dlZWtkYXknLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFNlbGVjdGVkV2Vla2RheSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIEJ1aWxkIE1vbnRoIGRyb3Bkb3duIChmb3IgeWVhcmx5KSAtIHVzZSBhcnJheSBmb3IgY29ycmVjdCBvcmRlcgogICAgbXkgQE1vbnRoTmFtZXMgPSBxdyhKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyKTsKICAgIG15IEBNb250aE9wdGlvbnM7CiAgICBmb3IgbXkgJE0gKCAxIC4uIDEyICkgewogICAgICAgIHB1c2ggQE1vbnRoT3B0aW9ucywgeyBLZXkgPT4gJE0sIFZhbHVlID0+ICRNb250aE5hbWVzWyAkTSAtIDEgXSB9OwogICAgfQogICAgbXkgJE1vbnRoU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXEBNb250aE9wdGlvbnMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnTW9udGgnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJENvbmZpZy0+e21vbnRofSB8fCAxLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgQnVpbGQgRGF5IGRyb3Bkb3duIChmb3IgbW9udGhseV9kYXkgYW5kIHllYXJseSkgLSB1c2UgYXJyYXkgZm9yIGNvcnJlY3Qgb3JkZXIKICAgIG15IEBEYXlPcHRpb25zOwogICAgZm9yIG15ICREICggMSAuLiAzMSApIHsKICAgICAgICBwdXNoIEBEYXlPcHRpb25zLCB7IEtleSA9PiAkRCwgVmFsdWUgPT4gJEQgfTsKICAgIH0KICAgIHB1c2ggQERheU9wdGlvbnMsIHsgS2V5ID0+IC0xLCBWYWx1ZSA9PiAnTGFzdCBkYXknIH07CiAgICBteSAkRGF5U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXEBEYXlPcHRpb25zLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0RheScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkQ29uZmlnLT57ZGF5fSB8fCAxLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgQnVpbGQgVmFsaWQgZHJvcGRvd24KICAgIG15ICRWYWxpZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwogICAgbXkgJVZhbGlkTGlzdCA9ICRWYWxpZE9iamVjdC0+VmFsaWRMaXN0KCk7CiAgICBteSAkVmFsaWRTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRTY2hlZHVsZXtWYWxpZElEfSB8fCAxLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgQnVpbGQgSG91ciBkcm9wZG93biBmb3IgZXhlY3V0aW9uIHRpbWUKICAgIG15ICVIb3VyczsKICAgIGZvciBteSAkSG91ciAoIDAgLi4gMjMgKSB7CiAgICAgICAgJEhvdXJzeyRIb3VyfSA9IHNwcmludGYoICclMDJkJywgJEhvdXIgKTsKICAgIH0KICAgICMgUGFyc2UgZXhpc3RpbmcgdGltZSB2YWx1ZSAoSEg6TU0gZm9ybWF0KQogICAgbXkgJEN1cnJlbnRUaW1lID0gJENvbmZpZy0+e3RpbWV9IHx8ICcwOTowMCc7CiAgICBteSAoICRDdXJyZW50SG91ciwgJEN1cnJlbnRNaW51dGUgKSA9IHNwbGl0KCAvOi8sICRDdXJyZW50VGltZSApOwogICAgJEN1cnJlbnRIb3VyICAgLy89IDk7CiAgICAkQ3VycmVudE1pbnV0ZSAvLz0gMDsKCiAgICBteSAkVGltZUhvdXJTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJUhvdXJzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RpbWVIb3VyJywKICAgICAgICBTZWxlY3RlZElEID0+IGludCgkQ3VycmVudEhvdXIpLAogICAgICAgIENsYXNzICAgICAgPT4gJ1NjaGVkdWxlcklubGluZVNlbGVjdCcsCiAgICApOwoKICAgICMgQnVpbGQgTWludXRlIGRyb3Bkb3duIGZvciBleGVjdXRpb24gdGltZQogICAgbXkgJU1pbnV0ZXM7CiAgICBmb3IgbXkgJE1pbnV0ZSAoIDAsIDUsIDEwLCAxNSwgMjAsIDI1LCAzMCwgMzUsIDQwLCA0NSwgNTAsIDU1ICkgewogICAgICAgICRNaW51dGVzeyRNaW51dGV9ID0gc3ByaW50ZiggJyUwMmQnLCAkTWludXRlICk7CiAgICB9CiAgICBteSAkVGltZU1pbnV0ZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlTWludXRlcywKICAgICAgICBOYW1lICAgICAgID0+ICdUaW1lTWludXRlJywKICAgICAgICBTZWxlY3RlZElEID0+IGludCgkQ3VycmVudE1pbnV0ZSksCiAgICAgICAgQ2xhc3MgICAgICA9PiAnU2NoZWR1bGVySW5saW5lU2VsZWN0JywKICAgICk7CgogICAgIyBCdWlsZCBTdGFydERhdGUgdXNpbmcgWm51bnkncyBuYXRpdmUgZGF0ZSBzZWxlY3Rpb24KICAgICMgUGFyc2UgZXhpc3Rpbmcgc3RhcnRfZGF0ZSBpZiBwcmVzZW50IChZWVlZLU1NLUREIGZvcm1hdCkKICAgIG15ICVTdGFydERhdGVQYXJhbXM7CiAgICBpZiAoICRDb25maWctPntzdGFydF9kYXRlfSAmJiAkQ29uZmlnLT57c3RhcnRfZGF0ZX0gPX4gL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KS8gKSB7CiAgICAgICAgJFN0YXJ0RGF0ZVBhcmFtc3tTdGFydERhdGVZZWFyfSAgPSAkMTsKICAgICAgICAkU3RhcnREYXRlUGFyYW1ze1N0YXJ0RGF0ZU1vbnRofSA9IGludCgkMik7CiAgICAgICAgJFN0YXJ0RGF0ZVBhcmFtc3tTdGFydERhdGVEYXl9ICAgPSBpbnQoJDMpOwogICAgICAgICRTdGFydERhdGVQYXJhbXN7U3RhcnREYXRlVXNlZH0gID0gMTsKICAgIH0KCiAgICAjIElmIG5vIHN0YXJ0X2RhdGUgeWV0LCBkZWZhdWx0IHRvIHRvZGF5CiAgICBpZiAoICElU3RhcnREYXRlUGFyYW1zICkgewogICAgICAgIG15ICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICBteSAkR2V0ID0gJE5vdy0+R2V0KCk7CiAgICAgICAgJFN0YXJ0RGF0ZVBhcmFtc3tTdGFydERhdGVZZWFyfSAgPSAkR2V0LT57WWVhcn07CiAgICAgICAgJFN0YXJ0RGF0ZVBhcmFtc3tTdGFydERhdGVNb250aH0gPSAkR2V0LT57TW9udGh9OwogICAgICAgICRTdGFydERhdGVQYXJhbXN7U3RhcnREYXRlRGF5fSAgID0gJEdldC0+e0RheX07CiAgICB9CgogICAgbXkgJFN0YXJ0RGF0ZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVN0YXJ0RGF0ZVBhcmFtcywKICAgICAgICBQcmVmaXggICAgICAgICAgID0+ICdTdGFydERhdGUnLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsICAjIERhdGUgb25seSwgbm8gdGltZQogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgPT4gNSwKICAgICAgICBZZWFyUGVyaW9kUGFzdCAgID0+IDAsCiAgICApOwoKICAgICMgQnVpbGQgRW5kRGF0ZSB1c2luZyBabnVueSdzIG5hdGl2ZSBkYXRlIHNlbGVjdGlvbgogICAgIyBQYXJzZSBleGlzdGluZyBlbmRfZGF0ZSBpZiBwcmVzZW50IChZWVlZLU1NLUREIGZvcm1hdCkKICAgIG15ICVFbmREYXRlUGFyYW1zOwogICAgaWYgKCAkU2NoZWR1bGV7RW5kRGF0ZX0gJiYgJFNjaGVkdWxle0VuZERhdGV9ID1+IC9eKFxkezR9KS0oXGR7Mn0pLShcZHsyfSkvICkgewogICAgICAgICRFbmREYXRlUGFyYW1ze0VuZERhdGVZZWFyfSAgPSAkMTsKICAgICAgICAkRW5kRGF0ZVBhcmFtc3tFbmREYXRlTW9udGh9ID0gaW50KCQyKTsKICAgICAgICAkRW5kRGF0ZVBhcmFtc3tFbmREYXRlRGF5fSAgID0gaW50KCQzKTsKICAgICAgICAkRW5kRGF0ZVBhcmFtc3tFbmREYXRlVXNlZH0gID0gMTsKICAgIH0KCiAgICBteSAkRW5kRGF0ZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJUVuZERhdGVQYXJhbXMsCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAnRW5kRGF0ZScsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0JywgICMgRGF0ZSBvbmx5LCBubyB0aW1lCiAgICAgICAgRW5kRGF0ZU9wdGlvbmFsICA9PiAxLCAgICAgICAgICAgICAgICAgICMgU2hvd3MgY2hlY2tib3gKICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDEwLAogICAgICAgIFllYXJQZXJpb2RQYXN0ICAgPT4gMCwKICAgICk7CgogICAgIyBCdWlsZCBUaW1lem9uZSBkcm9wZG93bgogICAgbXkgJFNlbGVjdGVkVGltZXpvbmUgPSAkQ29uZmlnLT57dGltZXpvbmV9IHx8ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0U2NoZWR1bGVyOjpEZWZhdWx0VGltZXpvbmUnKSB8fCAnRXVyb3BlL0Jlcmxpbic7CiAgICBteSAkVGltZVpvbmVzID0gS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lLT5UaW1lWm9uZUxpc3QoCiAgICAgICAgSW5jbHVkZVRpbWVab25lID0+ICRTZWxlY3RlZFRpbWV6b25lLAogICAgKTsKICAgIG15ICVUaW1lWm9uZURhdGEgPSBtYXAgeyAkXyA9PiAkXyB9IEB7JFRpbWVab25lc307CiAgICBteSAkVGltZXpvbmVTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVRpbWVab25lRGF0YSwKICAgICAgICBOYW1lICAgICAgID0+ICdUaW1lem9uZScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkU2VsZWN0ZWRUaW1lem9uZSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIENoZWNrIGlmIENoZWNrbGlzdCBpcyBhdmFpbGFibGUgYW5kIGJ1aWxkIGRyb3Bkb3duIGlmIHNvCiAgICBteSAkQ2hlY2tsaXN0QXZhaWxhYmxlID0gJFNlbGYtPl9Jc0NoZWNrbGlzdEF2YWlsYWJsZSgpOwogICAgbXkgJENoZWNrbGlzdFN0cmcgPSAnJzsKICAgIGlmICgkQ2hlY2tsaXN0QXZhaWxhYmxlKSB7CiAgICAgICAgbXkgJENoZWNrbGlzdFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrbGlzdFRlbXBsYXRlJyk7CgogICAgICAgICMgRmlsdGVyIHRlbXBsYXRlcyBieSBRdWV1ZUlEIChpZiBlZGl0aW5nIGV4aXN0aW5nIHNjaGVkdWxlKQogICAgICAgICMgRm9yIG5ldyBzY2hlZHVsZXMgKG5vIFF1ZXVlSUQgeWV0KSwgc2hvdyBlbXB0eSBsaXN0IC0gSlMgd2lsbCB1cGRhdGUgb24gcXVldWUgc2VsZWN0aW9uCiAgICAgICAgbXkgJVRlbXBsYXRlczsKICAgICAgICBpZiAoICRTY2hlZHVsZXtRdWV1ZUlEfSApIHsKICAgICAgICAgICAgJVRlbXBsYXRlcyA9ICRDaGVja2xpc3RUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkU2NoZWR1bGV7UXVldWVJRH0sCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIEdldCBhbHJlYWR5IHNlbGVjdGVkIHRlbXBsYXRlIElEcyBmb3IgZWRpdCBtb2RlCiAgICAgICAgbXkgQFNlbGVjdGVkSURzOwogICAgICAgIGlmICggJFNjaGVkdWxle0NoZWNrbGlzdFRlbXBsYXRlSURzfSAmJiByZWYgJFNjaGVkdWxle0NoZWNrbGlzdFRlbXBsYXRlSURzfSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBAU2VsZWN0ZWRJRHMgPSBAeyAkU2NoZWR1bGV7Q2hlY2tsaXN0VGVtcGxhdGVJRHN9IH07CiAgICAgICAgfQoKICAgICAgICAkQ2hlY2tsaXN0U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJVRlbXBsYXRlcywKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0NoZWNrbGlzdFRlbXBsYXRlSURzJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gXEBTZWxlY3RlZElEcywKICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIER5bmFtaWNGaWVsZHMgLSBHZXQgZmlsdGVyZWQgbGlzdCBiYXNlZCBvbiBzY3JlZW4gYXNzaWdubWVudHMKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJER5bmFtaWNGaWVsZHMgPSAkU2VsZi0+X0dldER5bmFtaWNGaWVsZENvbmZpZygpOwoKICAgIG15ICVEeW5hbWljRmllbGRIVE1MOwogICAgbXkgJEhhc0R5bmFtaWNGaWVsZHMgPSAwOwoKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkc30gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAkSGFzRHluYW1pY0ZpZWxkcyA9IDE7CgogICAgICAgICMgR2V0IHZhbHVlIGZyb20gZXhpc3Rpbmcgc2NoZWR1bGUgb3IgZGVmYXVsdCB0byBlbXB0eQogICAgICAgIG15ICRWYWx1ZSA9ICcnOwogICAgICAgIGlmICggJFNjaGVkdWxle0R5bmFtaWNGaWVsZHN9ICYmIGV4aXN0cyAkU2NoZWR1bGV7RHluYW1pY0ZpZWxkc317ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICAkVmFsdWUgPSAkU2NoZWR1bGV7RHluYW1pY0ZpZWxkc317ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwogICAgICAgIH0KCiAgICAgICAgIyBSZW5kZXIgdGhlIGZpZWxkIEhUTUwKICAgICAgICAkRHluYW1pY0ZpZWxkSFRNTHsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntfSXNNYW5kYXRvcnl9LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICApOwogICAgfQoKICAgICMgUmVuZGVyIER5bmFtaWNGaWVsZCB0ZW1wbGF0ZSBibG9ja3MgaWYgZmllbGRzIGFyZSBhdmFpbGFibGUKICAgIGlmICgkSGFzRHluYW1pY0ZpZWxkcykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdEeW5hbWljRmllbGRXaWRnZXQnICk7CgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZHN9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICBGaWVsZCA9PiAkRHluYW1pY0ZpZWxkSFRNTHsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH17RmllbGR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBJbml0aWFsaXplIFJpY2hUZXh0IGVkaXRvciBmb3IgQm9keSBmaWVsZAogICAgbXkgJFJpY2hUZXh0RW5hYmxlZCA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0Jyk7CiAgICBpZiAoICRSaWNoVGV4dEVuYWJsZWQgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+U2V0UmljaFRleHRQYXJhbWV0ZXJzKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFJpY2hUZXh0SGVpZ2h0ID0+IDMwMCwKICAgICAgICAgICAgICAgIFJpY2hUZXh0V2lkdGggID0+IDYyMCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgU2V0IEpTIGRhdGEgZm9yIEN1c3RvbWVyU2VhcmNoIGF1dG9jb21wbGV0ZQogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdDdXN0b21lclNlYXJjaCcsCiAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICBTaG93Q3VzdG9tZXJUaWNrZXRzID0+IDAsICAjIERvbid0IHNob3cgY3VzdG9tZXIgdGlja2V0IGhpc3RvcnkgaW4gc2NoZWR1bGVyCiAgICAgICAgICAgIEFsbG93TXVsdGlwbGVGcm9tICAgPT4gMCwgICMgT25seSBvbmUgY3VzdG9tZXIgcGVyIHNjaGVkdWxlCiAgICAgICAgfSwKICAgICk7CgogICAgIyBHZXQgRGFlbW9uIHNjaGVkdWxlIGluZm9ybWF0aW9uIGZvciBkaXNwbGF5CiAgICBteSAkRGFlbW9uVGFza0NvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgnRGFlbW9uOjpTY2hlZHVsZXJDcm9uVGFza01hbmFnZXI6OlRhc2sjIyNUaWNrZXRTY2hlZHVsZXJSdW4nKSB8fCB7fTsKICAgIG15ICREYWVtb25TY2hlZHVsZSAgID0gJERhZW1vblRhc2tDb25maWctPntTY2hlZHVsZX0gfHwgJyovNSAqICogKiAqJzsKCiAgICAjIENvbnZlcnQgY3JvbiBzY2hlZHVsZSB0byBodW1hbi1yZWFkYWJsZSB0ZXh0CiAgICBteSAkRGFlbW9uU2NoZWR1bGVUZXh0ID0gJFNlbGYtPl9Dcm9uVG9UZXh0KCBTY2hlZHVsZSA9PiAkRGFlbW9uU2NoZWR1bGUgKTsKCiAgICAjIENoZWNrIGlmIHVzZXIgaXMgYWRtaW4gKG1lbWJlciBvZiAnYWRtaW4nIGdyb3VwKQogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CiAgICBteSAkSXNBZG1pbiA9ICRHcm91cE9iamVjdC0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgR3JvdXBOYW1lID0+ICdhZG1pbicsCiAgICAgICAgVHlwZSAgICAgID0+ICdydycsCiAgICApIHx8IDA7CgogICAgIyBPdXRwdXQgSFRNTAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBEZXRlcm1pbmUgZm9ybSB0aXRsZSBiYXNlZCBvbiBtb2RlCiAgICBteSAkRm9ybVRpdGxlID0gJ05ldyBTY2hlZHVsZSc7CiAgICBpZiAoJFNjaGVkdWxlcklEKSB7CiAgICAgICAgJEZvcm1UaXRsZSA9ICdFZGl0IFNjaGVkdWxlJzsKICAgIH0KCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0U2NoZWR1bGVyRm9ybScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVNjaGVkdWxlLAogICAgICAgICAgICBTY2hlZHVsZXJJRCAgICAgICAgPT4gJFNjaGVkdWxlcklELAogICAgICAgICAgICBGb3JtVGl0bGUgICAgICAgICAgPT4gJEZvcm1UaXRsZSwKICAgICAgICAgICAgUXVldWVTdHJnICAgICAgICAgID0+ICRRdWV1ZVN0cmcsCiAgICAgICAgICAgIFByaW9yaXR5U3RyZyAgICAgICA9PiAkUHJpb3JpdHlTdHJnLAogICAgICAgICAgICBUeXBlU3RyZyAgICAgICAgICAgPT4gJFR5cGVTdHJnLAogICAgICAgICAgICBTY2hlZHVsZVR5cGVTdHJnICAgPT4gJFNjaGVkdWxlVHlwZVN0cmcsCiAgICAgICAgICAgIEVuZFR5cGVTdHJnICAgICAgICA9PiAkRW5kVHlwZVN0cmcsCiAgICAgICAgICAgIE50aFN0cmcgICAgICAgICAgICA9PiAkTnRoU3RyZywKICAgICAgICAgICAgV2Vla2RheVN0cmcgICAgICAgID0+ICRXZWVrZGF5U3RyZywKICAgICAgICAgICAgTW9udGhTdHJnICAgICAgICAgID0+ICRNb250aFN0cmcsCiAgICAgICAgICAgIERheVN0cmcgICAgICAgICAgICA9PiAkRGF5U3RyZywKICAgICAgICAgICAgVmFsaWRTdHJnICAgICAgICAgID0+ICRWYWxpZFN0cmcsCiAgICAgICAgICAgIFRpbWVIb3VyU3RyZyAgICAgICA9PiAkVGltZUhvdXJTdHJnLAogICAgICAgICAgICBUaW1lTWludXRlU3RyZyAgICAgPT4gJFRpbWVNaW51dGVTdHJnLAogICAgICAgICAgICBUaW1lem9uZVN0cmcgICAgICAgPT4gJFRpbWV6b25lU3RyZywKICAgICAgICAgICAgSW50ZXJ2YWwgICAgICAgICAgID0+ICRDb25maWctPntpbnRlcnZhbH0gfHwgNywKICAgICAgICAgICAgT2Zmc2V0RGF5cyAgICAgICAgID0+ICRDb25maWctPntvZmZzZXRfZGF5c30gfHwgMCwKICAgICAgICAgICAgU3RhcnREYXRlU3RyZyAgICAgID0+ICRTdGFydERhdGVTdHJnLAogICAgICAgICAgICBFbmREYXRlU3RyZyAgICAgICAgPT4gJEVuZERhdGVTdHJnLAogICAgICAgICAgICBUeXBlRW5hYmxlZCAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSA/IDEgOiAwLAogICAgICAgICAgICBDaGVja2xpc3RBdmFpbGFibGUgPT4gJENoZWNrbGlzdEF2YWlsYWJsZSwKICAgICAgICAgICAgQ2hlY2tsaXN0U3RyZyAgICAgID0+ICRDaGVja2xpc3RTdHJnLAogICAgICAgICAgICBSaWNoVGV4dEVuYWJsZWQgICAgPT4gJFJpY2hUZXh0RW5hYmxlZCwKICAgICAgICAgICAgRGFlbW9uU2NoZWR1bGUgICAgID0+ICREYWVtb25TY2hlZHVsZSwKICAgICAgICAgICAgRGFlbW9uU2NoZWR1bGVUZXh0ID0+ICREYWVtb25TY2hlZHVsZVRleHQsCiAgICAgICAgICAgIElzQWRtaW4gICAgICAgICAgICA9PiAkSXNBZG1pbiwKICAgICAgICB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9Cgo9aGVhZDIgX1NhdmUoKQoKU2F2ZSBzY2hlZHVsZSAoYWRkIG9yIHVwZGF0ZSkuCgo9Y3V0CgpzdWIgX1NhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMb2dPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBTRUNVUklUWTogQ1NSRiBwcm90ZWN0aW9uIGZvciB0aGlzIHN0YXRlLWNoYW5naW5nIGFjdGlvbgogICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICMgVHJ5IHRvIGdldCBUaWNrZXRTY2hlZHVsZXIgb2JqZWN0IHdpdGggZXJyb3IgaGFuZGxpbmcKICAgIG15ICRUaWNrZXRTY2hlZHVsZXJPYmplY3Q7CiAgICBldmFsIHsKICAgICAgICAkVGlja2V0U2NoZWR1bGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcicpOwogICAgfTsKICAgIGlmICggJEAgfHwgISRUaWNrZXRTY2hlZHVsZXJPYmplY3QgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IGxvYWQgS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcjogJEAiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdDb3VsZCBub3QgbG9hZCBUaWNrZXRTY2hlZHVsZXIgbW9kdWxlLiBQbGVhc2UgY2hlY2sgaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGNvcnJlY3RseS4nLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFNjaGVkdWxlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NjaGVkdWxlcklEJyApIHx8ICcnOwoKICAgICMgR2V0IGZvcm0gcGFyYW1ldGVycwogICAgbXkgJUZvcm1EYXRhOwogICAgZm9yIG15ICRGaWVsZCAocXcoTmFtZSBUaXRsZSBRdWV1ZUlEIFByaW9yaXR5SUQgVHlwZUlEIFNlcnZpY2VJRCBTTEFJRAogICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luIE93bmVySUQgUmVzcG9uc2libGVJRCBCb2R5CiAgICAgICAgICAgICAgICAgICAgICAgU2NoZWR1bGVUeXBlIEVuZFR5cGUgTWF4T2NjdXJyZW5jZXMgVmFsaWRJRCkpIHsKICAgICAgICAkRm9ybURhdGF7JEZpZWxkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRGaWVsZCApOwogICAgfQoKICAgICMgRW5kRGF0ZSBpcyBub3cgZnJvbSBabnVueSdzIEJ1aWxkRGF0ZVNlbGVjdGlvbiAobXVsdGktZmllbGQgZm9ybWF0KQogICAgbXkgJEVuZERhdGVVc2VkICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbmREYXRlVXNlZCcgKTsKICAgIG15ICRFbmREYXRlWWVhciAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRW5kRGF0ZVllYXInICk7CiAgICBteSAkRW5kRGF0ZU1vbnRoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VuZERhdGVNb250aCcgKTsKICAgIG15ICRFbmREYXRlRGF5ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRW5kRGF0ZURheScgKTsKCiAgICBpZiAoICRFbmREYXRlVXNlZCAmJiAkRW5kRGF0ZVllYXIgJiYgJEVuZERhdGVNb250aCAmJiAkRW5kRGF0ZURheSApIHsKICAgICAgICAkRm9ybURhdGF7RW5kRGF0ZX0gPSBzcHJpbnRmKCAnJTA0ZC0lMDJkLSUwMmQnLCAkRW5kRGF0ZVllYXIsICRFbmREYXRlTW9udGgsICRFbmREYXRlRGF5ICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkRm9ybURhdGF7RW5kRGF0ZX0gPSAnJzsKICAgIH0KCiAgICAjIEdldCBjaGVja2xpc3QgdGVtcGxhdGUgSURzIGFzIGFycmF5IChtdWx0aXBsZSBzZWxlY3Rpb24pCiAgICBteSBAQ2hlY2tsaXN0VGVtcGxhdGVJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnQ2hlY2tsaXN0VGVtcGxhdGVJRHMnICk7CiAgICAkRm9ybURhdGF7Q2hlY2tsaXN0VGVtcGxhdGVJRHN9ID0gXEBDaGVja2xpc3RUZW1wbGF0ZUlEczsKCiAgICAjIEdldCBEeW5hbWljRmllbGQgdmFsdWVzCiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKICAgIG15ICREeW5hbWljRmllbGRzID0gJFNlbGYtPl9HZXREeW5hbWljRmllbGRDb25maWcoKTsKCiAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRzfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICREeW5hbWljRmllbGRWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgKTsKICAgIH0KICAgICRGb3JtRGF0YXtEeW5hbWljRmllbGRzfSA9IFwlRHluYW1pY0ZpZWxkVmFsdWVzOwoKICAgICMgR2V0IHNjaGVkdWxlIGNvbmZpZyBiYXNlZCBvbiB0eXBlCiAgICBteSAkU2NoZWR1bGVUeXBlID0gJEZvcm1EYXRhe1NjaGVkdWxlVHlwZX07CgogICAgIyBUaW1lIGlzIG5vdyBmcm9tIEhvdXIvTWludXRlIGRyb3Bkb3ducwogICAgbXkgJFRpbWVIb3VyICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGltZUhvdXInICkgICAvLyA5OwogICAgbXkgJFRpbWVNaW51dGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGltZU1pbnV0ZScgKSAvLyAwOwogICAgbXkgJFRpbWVTdHIgICAgPSBzcHJpbnRmKCAnJTAyZDolMDJkJywgJFRpbWVIb3VyLCAkVGltZU1pbnV0ZSApOwoKICAgIG15ICVTY2hlZHVsZUNvbmZpZyA9ICgKICAgICAgICB0aW1lICAgICA9PiAkVGltZVN0ciwKICAgICAgICB0aW1lem9uZSA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGltZXpvbmUnICkgfHwgJ0V1cm9wZS9CZXJsaW4nLAogICAgKTsKCiAgICBpZiAoICRTY2hlZHVsZVR5cGUgZXEgJ3dlZWtseScgKSB7CiAgICAgICAgbXkgQFdlZWtkYXlzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJ1dlZWtkYXlzJyApOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3t3ZWVrZGF5c30gPSBcQFdlZWtkYXlzOwogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdtb250aGx5X2RheScgKSB7CiAgICAgICAgbXkgJERheSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdEYXknICkgfHwgMTsKICAgICAgICAkRGF5ID0gMSBpZiAkRGF5ICE9IC0xICYmICggJERheSAhfiAvXlxkKyQvIHx8ICREYXkgPCAxIHx8ICREYXkgPiAzMSApOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tkYXl9ID0gJERheTsKICAgIH0KICAgIGVsc2lmICggJFNjaGVkdWxlVHlwZSBlcSAnbW9udGhseV93ZWVrZGF5JyApIHsKICAgICAgICBteSAkTnRoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ050aCcgKSB8fCAxOwogICAgICAgICROdGggPSAxIGlmICROdGggIT0gLTEgJiYgKCAkTnRoICF+IC9eXGQrJC8gfHwgJE50aCA8IDEgfHwgJE50aCA+IDUgKTsKICAgICAgICAkU2NoZWR1bGVDb25maWd7bnRofSAgICAgPSAkTnRoOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3t3ZWVrZGF5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdXZWVrZGF5JyApIHx8ICdtb24nOwogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdtb250aGx5X3dlZWtkYXlfb2Zmc2V0JyApIHsKICAgICAgICBteSAkTnRoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ050aCcgKSB8fCAxOwogICAgICAgICROdGggPSAxIGlmICROdGggIT0gLTEgJiYgKCAkTnRoICF+IC9eXGQrJC8gfHwgJE50aCA8IDEgfHwgJE50aCA+IDUgKTsKICAgICAgICAkU2NoZWR1bGVDb25maWd7bnRofSAgICAgPSAkTnRoOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3t3ZWVrZGF5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdXZWVrZGF5JyApIHx8ICdtb24nOwogICAgICAgIG15ICRPZmZzZXREYXlzID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ09mZnNldERheXMnICkgfHwgMDsKICAgICAgICAkT2Zmc2V0RGF5cyA9IDAgaWYgJE9mZnNldERheXMgIX4gL14tP1xkKyQvIHx8IGFicygkT2Zmc2V0RGF5cykgPiAzMDsKICAgICAgICAkU2NoZWR1bGVDb25maWd7b2Zmc2V0X2RheXN9ID0gJE9mZnNldERheXM7CiAgICB9CiAgICBlbHNpZiAoICRTY2hlZHVsZVR5cGUgZXEgJ3llYXJseScgKSB7CiAgICAgICAgbXkgJE1vbnRoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ01vbnRoJyApIHx8IDE7CiAgICAgICAgJE1vbnRoID0gMSBpZiAkTW9udGggIX4gL15cZCskLyB8fCAkTW9udGggPCAxIHx8ICRNb250aCA+IDEyOwogICAgICAgIG15ICREYXkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRGF5JyApIHx8IDE7CiAgICAgICAgJERheSA9IDEgaWYgJERheSAhfiAvXlxkKyQvIHx8ICREYXkgPCAxIHx8ICREYXkgPiAzMTsKICAgICAgICAkU2NoZWR1bGVDb25maWd7bW9udGh9ID0gJE1vbnRoOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tkYXl9ICAgPSAkRGF5OwogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdpbnRlcnZhbCcgKSB7CiAgICAgICAgbXkgJEludGVydmFsID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ludGVydmFsJyApIHx8IDc7CiAgICAgICAgJEludGVydmFsID0gNyBpZiAkSW50ZXJ2YWwgIX4gL15cZCskLyB8fCAkSW50ZXJ2YWwgPCAxIHx8ICRJbnRlcnZhbCA+IDM2NTA7CiAgICAgICAgJFNjaGVkdWxlQ29uZmlne2ludGVydmFsfSA9ICRJbnRlcnZhbDsKCiAgICAgICAgIyBTdGFydERhdGUgaXMgYSByZXF1aXJlZCBmaWVsZCBmb3IgaW50ZXJ2YWwgc2NoZWR1bGVzIChubyBjaGVja2JveCkKICAgICAgICBteSAkU3RhcnREYXRlWWVhciAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnREYXRlWWVhcicgKTsKICAgICAgICBteSAkU3RhcnREYXRlTW9udGggPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnREYXRlTW9udGgnICk7CiAgICAgICAgbXkgJFN0YXJ0RGF0ZURheSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0RGF0ZURheScgKTsKCiAgICAgICAgaWYgKCAkU3RhcnREYXRlWWVhciAmJiAkU3RhcnREYXRlTW9udGggJiYgJFN0YXJ0RGF0ZURheSApIHsKICAgICAgICAgICAgJFNjaGVkdWxlQ29uZmlne3N0YXJ0X2RhdGV9ID0gc3ByaW50ZigKICAgICAgICAgICAgICAgICclMDRkLSUwMmQtJTAyZCcsCiAgICAgICAgICAgICAgICAkU3RhcnREYXRlWWVhciwgJFN0YXJ0RGF0ZU1vbnRoLCAkU3RhcnREYXRlRGF5CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIERlZmF1bHQgdG8gdG9kYXkgaWYgbm90IHByb3ZpZGVkCiAgICAgICAgICAgIG15ICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAgICAgbXkgJEdldCA9ICROb3ctPkdldCgpOwogICAgICAgICAgICAkU2NoZWR1bGVDb25maWd7c3RhcnRfZGF0ZX0gPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgJyUwNGQtJTAyZC0lMDJkJywKICAgICAgICAgICAgICAgICRHZXQtPntZZWFyfSwgJEdldC0+e01vbnRofSwgJEdldC0+e0RheX0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgJEZvcm1EYXRhe1NjaGVkdWxlQ29uZmlnfSA9IFwlU2NoZWR1bGVDb25maWc7CiAgICAkRm9ybURhdGF7U2NoZWR1bGVNb2RlfSAgID0gJ3RpY2tldCc7CgogICAgIyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHMKICAgIG15IEBFcnJvcnM7CiAgICBwdXNoIEBFcnJvcnMsICdOYW1lIGlzIHJlcXVpcmVkJyAgICBpZiAhJEZvcm1EYXRhe05hbWV9OwogICAgcHVzaCBARXJyb3JzLCAnVGl0bGUgaXMgcmVxdWlyZWQnICAgaWYgISRGb3JtRGF0YXtUaXRsZX07CiAgICBwdXNoIEBFcnJvcnMsICdRdWV1ZSBpcyByZXF1aXJlZCcgICBpZiAhJEZvcm1EYXRhe1F1ZXVlSUR9OwoKICAgICMgVmFsaWRhdGUgbWFuZGF0b3J5IER5bmFtaWNGaWVsZHMKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkc30gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57X0lzTWFuZGF0b3J5fTsKCiAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRWYWxpZGF0aW9uUmVzdWx0KSB8fCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgcHVzaCBARXJyb3JzLCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9IC4gJyBpcyByZXF1aXJlZCc7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChARXJyb3JzKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IGpvaW4oICcsICcsIEBFcnJvcnMgKSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRTdWNjZXNzOwogICAgaWYgKCRTY2hlZHVsZXJJRCkgewogICAgICAgICMgVXBkYXRlIGV4aXN0aW5nCiAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJVcGRhdGUoCiAgICAgICAgICAgIFNjaGVkdWxlcklEID0+ICRTY2hlZHVsZXJJRCwKICAgICAgICAgICAgJUZvcm1EYXRhLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIENyZWF0ZSBuZXcKICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgICAgICAgICAgJUZvcm1EYXRhLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRmFpbGVkIHRvIHNhdmUgc2NoZWR1bGUuIFNjaGVkdWxlcklEOiAiIC4gKCAkU2NoZWR1bGVySUQgfHwgJ25ldycgKQogICAgICAgICAgICAgICAgLiAiLCBOYW1lOiAiIC4gKCAkRm9ybURhdGF7TmFtZX0gfHwgJ25vbmUnICksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0ZhaWxlZCB0byBzYXZlIHNjaGVkdWxlLiBQbGVhc2UgY2hlY2sgdGhlIHNlcnZlciBsb2dzIGZvciBkZXRhaWxzLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFJlZGlyZWN0IHRvIGxpc3QKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50VGlja2V0U2NoZWR1bGVyIiwKICAgICk7Cn0KCj1oZWFkMiBfRGVsZXRlKCkKCkRlbGV0ZSBhIHNjaGVkdWxlLgoKPWN1dAoKc3ViIF9EZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0U2NoZWR1bGVyJyk7CgogICAgIyBTRUNVUklUWTogQ1NSRiBwcm90ZWN0aW9uIGZvciB0aGlzIHN0YXRlLWNoYW5naW5nIGFjdGlvbgogICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgIG15ICRTY2hlZHVsZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTY2hlZHVsZXJJRCcgKTsKCiAgICBpZiAoICEkU2NoZWR1bGVySUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBTY2hlZHVsZXJJRCBwcm92aWRlZCEnLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJEZWxldGUoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gJFNjaGVkdWxlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBSZXR1cm4gSlNPTiBmb3IgQUpBWCByZXF1ZXN0cwogICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQUpBWCcgKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU3VjY2VzcyA/ICd7InN1Y2Nlc3MiOnRydWV9JyA6ICd7InN1Y2Nlc3MiOmZhbHNlfScsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXIiLAogICAgKTsKfQoKPWhlYWQyIF9Ub2dnbGVWYWxpZCgpCgpUb2dnbGUgdmFsaWQgc3RhdHVzIG9mIGEgc2NoZWR1bGUuCgo9Y3V0CgpzdWIgX1RvZ2dsZVZhbGlkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcicpOwoKICAgICMgU0VDVVJJVFk6IENTUkYgcHJvdGVjdGlvbiBmb3IgdGhpcyBzdGF0ZS1jaGFuZ2luZyBhY3Rpb24KICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICBteSAkU2NoZWR1bGVySUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NoZWR1bGVySUQnICk7CgogICAgaWYgKCAhJFNjaGVkdWxlcklEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gU2NoZWR1bGVySUQgcHJvdmlkZWQhJywKICAgICAgICApOwogICAgfQoKICAgICMgR2V0IGN1cnJlbnQgc3RhdGUKICAgIG15ICVTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCggU2NoZWR1bGVySUQgPT4gJFNjaGVkdWxlcklEICk7CgogICAgIyBUb2dnbGUgdmFsaWQKICAgIG15ICROZXdWYWxpZElEID0gJFNjaGVkdWxle1ZhbGlkSUR9ID09IDEgPyAyIDogMTsKCiAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlclVwZGF0ZSgKICAgICAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQsCiAgICAgICAgVmFsaWRJRCAgICAgPT4gJE5ld1ZhbGlkSUQsCiAgICAgICAgQ2xlYXJFcnJvciAgPT4gKCAkTmV3VmFsaWRJRCA9PSAyICkgPyAxIDogMCwgICAgIyBDbGVhciBlcnJvciB3aGVuIGRlYWN0aXZhdGluZwogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBSZXR1cm4gSlNPTiBmb3IgQUpBWCByZXF1ZXN0cwogICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQUpBWCcgKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU3VjY2VzcyA/ICd7InN1Y2Nlc3MiOnRydWUsIm5ld1ZhbGlkSUQiOicgLiAkTmV3VmFsaWRJRCAuICd9JyA6ICd7InN1Y2Nlc3MiOmZhbHNlfScsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXIiLAogICAgKTsKfQoKPWhlYWQyIF9EdXBsaWNhdGUoKQoKRHVwbGljYXRlIGEgc2NoZWR1bGUuCgo9Y3V0CgpzdWIgX0R1cGxpY2F0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFRpY2tldFNjaGVkdWxlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXInKTsKCiAgICAjIFNFQ1VSSVRZOiBDU1JGIHByb3RlY3Rpb24gZm9yIHRoaXMgc3RhdGUtY2hhbmdpbmcgYWN0aW9uCiAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgbXkgJFNjaGVkdWxlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NjaGVkdWxlcklEJyApOwoKICAgIGlmICggISRTY2hlZHVsZXJJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIFNjaGVkdWxlcklEIHByb3ZpZGVkIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEdldCBvcmlnaW5hbCBzY2hlZHVsZQogICAgbXkgJVNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KCBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQgKTsKCiAgICBpZiAoICElU2NoZWR1bGUgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdTY2hlZHVsZSBub3QgZm91bmQhJywKICAgICAgICApOwogICAgfQoKICAgICMgQ3JlYXRlIGNvcHkgd2l0aCBtb2RpZmllZCBuYW1lCiAgICBkZWxldGUgJFNjaGVkdWxle0lEfTsKICAgIGRlbGV0ZSAkU2NoZWR1bGV7Q3JlYXRlVGltZX07CiAgICBkZWxldGUgJFNjaGVkdWxle0NyZWF0ZUJ5fTsKICAgIGRlbGV0ZSAkU2NoZWR1bGV7Q2hhbmdlVGltZX07CiAgICBkZWxldGUgJFNjaGVkdWxle0NoYW5nZUJ5fTsKICAgIGRlbGV0ZSAkU2NoZWR1bGV7RXhlY3V0aW9uQ291bnR9OwogICAgZGVsZXRlICRTY2hlZHVsZXtMYXN0RXhlY3V0aW9ufTsKICAgIGRlbGV0ZSAkU2NoZWR1bGV7TmV4dEV4ZWN1dGlvbn07CiAgICBkZWxldGUgJFNjaGVkdWxle0xhc3RFcnJvcn07CiAgICBkZWxldGUgJFNjaGVkdWxle0xhc3RFcnJvclRpbWV9OwoKICAgICRTY2hlZHVsZXtOYW1lfSAuPSAnIC0gQ29weSc7CgogICAgbXkgJE5ld0lEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgICAgICVTY2hlZHVsZSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIFJldHVybiBKU09OIGZvciBBSkFYIHJlcXVlc3RzCiAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBSkFYJyApICkgewogICAgICAgIG15ICRKU09OID0gJE5ld0lECiAgICAgICAgICAgID8gJ3sic3VjY2VzcyI6dHJ1ZSwibmV3SUQiOicgLiAkTmV3SUQgLiAnLCJzY2hlZHVsZU1vZGUiOiInIC4gKCAkU2NoZWR1bGV7U2NoZWR1bGVNb2RlfSB8fCAndGlja2V0JyApIC4gJyJ9JwogICAgICAgICAgICA6ICd7InN1Y2Nlc3MiOmZhbHNlfSc7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBSZWRpcmVjdCB0byBjb3JyZWN0IGVkaXQgZm9ybSBiYXNlZCBvbiBzY2hlZHVsZSBtb2RlCiAgICBteSAkQWN0aW9uID0gJFNjaGVkdWxle1NjaGVkdWxlTW9kZX0gZXEgJ3Byb2Nlc3MnID8gJ0FnZW50VGlja2V0U2NoZWR1bGVyUHJvY2VzcycgOiAnQWdlbnRUaWNrZXRTY2hlZHVsZXInOwogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgIE9QID0+ICJBY3Rpb249JEFjdGlvbjtTdWJhY3Rpb249RWRpdDtTY2hlZHVsZXJJRD0kTmV3SUQiLAogICAgKTsKfQoKPWhlYWQyIF9FeGVjdXRlTm93KCkKCkV4ZWN1dGUgYSBzY2hlZHVsZSBpbW1lZGlhdGVseSAoY3JlYXRlIHRpY2tldCBub3cpLgoKPWN1dAoKc3ViIF9FeGVjdXRlTm93IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcicpOwoKICAgICMgU0VDVVJJVFk6IENTUkYgcHJvdGVjdGlvbiBmb3IgdGhpcyBzdGF0ZS1jaGFuZ2luZyBhY3Rpb24KICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICBteSAkU2NoZWR1bGVySUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NoZWR1bGVySUQnICk7CgogICAgaWYgKCAhJFNjaGVkdWxlcklEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gU2NoZWR1bGVySUQgcHJvdmlkZWQhJywKICAgICAgICApOwogICAgfQoKICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gJFNjaGVkdWxlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBSZXR1cm4gSlNPTiBmb3IgQUpBWCByZXF1ZXN0cwogICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQUpBWCcgKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkVGlja2V0SUQKICAgICAgICAgICAgICAgID8gJ3sic3VjY2VzcyI6dHJ1ZSwidGlja2V0SUQiOicgLiAkVGlja2V0SUQgLiAnfScKICAgICAgICAgICAgICAgIDogJ3sic3VjY2VzcyI6ZmFsc2V9JywKICAgICAgICAgICAgVHlwZSAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCRUaWNrZXRJRCkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFRpY2tldElEIiwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50VGlja2V0U2NoZWR1bGVyIiwKICAgICk7Cn0KCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBQcml2YXRlIGhlbHBlciBtZXRob2RzCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnN1YiBfSXNDaGVja2xpc3RBdmFpbGFibGUgewogICAgbXkgKCRTZWxmKSA9IEBfOwoKICAgICMgQ2hlY2sgaWYgQ2hlY2tsaXN0VGVtcGxhdGUgbW9kdWxlIGlzIGF2YWlsYWJsZSAoZm9yIHRlbXBsYXRlIHNlbGVjdGlvbikKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tsaXN0VGVtcGxhdGUnLAogICAgICAgIFNpbGVudCA9PiAxLAogICAgKTsKfQoKc3ViIF9Jc1Byb2Nlc3NNYW5hZ2VtZW50QXZhaWxhYmxlIHsKICAgIG15ICgkU2VsZikgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQcm9jZXNzTGlzdCAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2Nlc3MnKTsKCiAgICByZXR1cm4gKCAkUHJvY2Vzc0xpc3QgJiYgJXskUHJvY2Vzc0xpc3R9ICkgPyAxIDogMDsKfQoKPWhlYWQyIF9IYXNSV1Blcm1pc3Npb24oKQoKQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBhZ2VudCBtYXkgcGVyZm9ybSBhIHdyaXRlIGFjdGlvbiwgb3B0aW9uYWxseQpzY29wZWQgdG8gYSBzcGVjaWZpYyBleGlzdGluZyBzY2hlZHVsZS4KCiAgICBteSAkT2sgPSAkU2VsZi0+X0hhc1JXUGVybWlzc2lvbigpOwogICAgbXkgJE9rID0gJFNlbGYtPl9IYXNSV1Blcm1pc3Npb24oIFNjaGVkdWxlcklEID0+IDEyMyApOwoKVGlja2V0U2NoZWR1bGVyQWRtaW4gaXMgZG9jdW1lbnRlZCAoUkVBRE1FL0NMQVVERS5tZCkgYXMgdW5yZXN0cmljdGVkIFJXCmFjcm9zcyBhbGwgc2NoZWR1bGVzL3F1ZXVlcy4gVGlja2V0U2NoZWR1bGVyTWFuYWdlciBpcyBkb2N1bWVudGVkIGFzIFJXCmZvciAic2NoZWR1bGVzIGluIG93biBxdWV1ZXMiIC0gc28gd2hlbiBhIFNjaGVkdWxlcklEIGlzIGdpdmVuLCBhIHBsYWluCk1hbmFnZXIgKG5vdCBBZG1pbikgbXVzdCBhbHNvIGhvbGQgcmVhbCBabnVueSBxdWV1ZSBwZXJtaXNzaW9uIGZvciB0aGF0CnNjaGVkdWxlJ3MgUXVldWVJRCwgbm90IGp1c3QgZ3JvdXAgbWVtYmVyc2hpcC4gU2NoZWR1bGVzIHdpdGggbm8gUXVldWVJRAoocHJvY2Vzcy1tb2RlIHNjaGVkdWxlcykgYXJlbid0IHF1ZXVlLXNjb3BlZCwgc28gTWFuYWdlciBtZW1iZXJzaGlwIGFsb25lCmlzIHN1ZmZpY2llbnQgZm9yIHRob3NlLCBtYXRjaGluZyB0aGUgcHJlLWV4aXN0aW5nIGJlaGF2aW9yLgoKPWN1dAoKc3ViIF9IYXNSV1Blcm1pc3Npb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAjIFRpY2tldFNjaGVkdWxlckFkbWluOiB1bnJlc3RyaWN0ZWQsIG1hdGNoZXMgZG9jdW1lbnRlZCBzY29wZS4KICAgIG15ICRJc0FkbWluID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBHcm91cE5hbWUgPT4gJ1RpY2tldFNjaGVkdWxlckFkbWluJywKICAgICAgICBUeXBlICAgICAgPT4gJ3J3JywKICAgICk7CiAgICByZXR1cm4gMSBpZiAkSXNBZG1pbjsKCiAgICAjIFRpY2tldFNjaGVkdWxlck1hbmFnZXI6IFJXLCBidXQgc2NvcGVkIHRvICJvd24gcXVldWVzIiBwZXIgaXRzIG93bgogICAgIyBkb2N1bWVudGVkIHB1cnBvc2UuCiAgICBteSAkSXNNYW5hZ2VyID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBHcm91cE5hbWUgPT4gJ1RpY2tldFNjaGVkdWxlck1hbmFnZXInLAogICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgKTsKICAgIHJldHVybiAwIGlmICEkSXNNYW5hZ2VyOwoKICAgICMgTm8gc3BlY2lmaWMgc2NoZWR1bGUgdGFyZ2V0ZWQgKGUuZy4gdGhlIGxpc3Qgdmlldywgb3IgdGhlICJBZGQiCiAgICAjIGZvcm0gZm9yIGEgbm90LXlldC1jcmVhdGVkIHNjaGVkdWxlKSAtIGdyb3VwIG1lbWJlcnNoaXAgaXMgZW5vdWdoLgogICAgcmV0dXJuIDEgaWYgISRQYXJhbXtTY2hlZHVsZXJJRH07CgogICAgbXkgJFRpY2tldFNjaGVkdWxlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXInKTsKICAgIG15ICVTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCggU2NoZWR1bGVySUQgPT4gJFBhcmFte1NjaGVkdWxlcklEfSApOwoKICAgICMgU2NoZWR1bGUgbm90IGZvdW5kLCBvciBhIHByb2Nlc3MtbW9kZSBzY2hlZHVsZSB3aXRoIG5vIFF1ZXVlSUQgLQogICAgIyBxdWV1ZS1zY29waW5nIGRvZXNuJ3QgYXBwbHksIGZhbGwgYmFjayB0byBwbGFpbiBNYW5hZ2VyIG1lbWJlcnNoaXAKICAgICMgKHNhbWUgYXMgYmVmb3JlIHRoaXMgZml4KS4KICAgIHJldHVybiAxIGlmICEkU2NoZWR1bGV7UXVldWVJRH07CgogICAgbXkgJFF1ZXVlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAlUXVldWUgPSAkUXVldWVPYmplY3QtPlF1ZXVlR2V0KCBJRCA9PiAkU2NoZWR1bGV7UXVldWVJRH0gKTsKICAgIHJldHVybiAxIGlmICEkUXVldWV7R3JvdXBJRH07CgogICAgbXkgJVJXR3JvdXBzID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uVXNlckdldCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgKTsKCiAgICByZXR1cm4gJFJXR3JvdXBzeyAkUXVldWV7R3JvdXBJRH0gfSA/IDEgOiAwOwp9Cgo9aGVhZDIgX0dldER5bmFtaWNGaWVsZENvbmZpZygpCgpHZXQgRHluYW1pY0ZpZWxkIGNvbmZpZ3VyYXRpb24gZmlsdGVyZWQgYnkgc2NyZWVuIGFzc2lnbm1lbnRzLgoKT25seSByZXR1cm5zIGZpZWxkcyB0aGF0IGFyZSBlbmFibGVkIGluIEFnZW50VGlja2V0UGhvbmUsIEFnZW50VGlja2V0RW1haWwsIG9yIEN1c3RvbWVyVGlja2V0TWVzc2FnZS4KTWFuZGF0b3J5IGZsYWcgaXMgc2V0IGlmIGZpZWxkIGlzIHJlcXVpcmVkIGluIEFnZW50VGlja2V0UGhvbmUgT1IgQWdlbnRUaWNrZXRFbWFpbC4KCj1jdXQKCnN1YiBfR2V0RHluYW1pY0ZpZWxkQ29uZmlnIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgR2V0IHNjcmVlbiBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRocmVlIHJlbGV2YW50IHNjcmVlbnMKICAgIG15ICRQaG9uZUNvbmZpZyAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRQaG9uZScpIHx8IHt9OwogICAgbXkgJEVtYWlsQ29uZmlnICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEVtYWlsJykgfHwge307CiAgICBteSAkQ3VzdG9tZXJDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZScpIHx8IHt9OwoKICAgIG15ICVTY3JlZW5Db25maWdzID0gKAogICAgICAgIEFnZW50VGlja2V0UGhvbmUgICAgICA9PiAkUGhvbmVDb25maWctPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgICAgIEFnZW50VGlja2V0RW1haWwgICAgICA9PiAkRW1haWxDb25maWctPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgICAgIEN1c3RvbWVyVGlja2V0TWVzc2FnZSA9PiAkQ3VzdG9tZXJDb25maWctPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgKTsKCiAgICAjIEdldCBhbGwgdmFsaWQgVGlja2V0IER5bmFtaWNGaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSA9PiBbJ1RpY2tldCddLAogICAgKTsKCiAgICBteSBARmlsdGVyZWRGaWVsZHM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgbXkgJEZpZWxkTmFtZSA9ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKCiAgICAgICAgIyBDaGVjayBpZiBmaWVsZCBpcyBlbmFibGVkIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgdGhyZWUgc2NyZWVucyAodmFsdWUgPj0gMSkKICAgICAgICBteSAkSXNWaXNpYmxlID0gMDsKICAgICAgICBmb3IgbXkgJFNjcmVlbiAocXcoQWdlbnRUaWNrZXRQaG9uZSBBZ2VudFRpY2tldEVtYWlsIEN1c3RvbWVyVGlja2V0TWVzc2FnZSkpIHsKICAgICAgICAgICAgaWYgKCAkU2NyZWVuQ29uZmlnc3skU2NyZWVufXskRmllbGROYW1lfSAmJiAkU2NyZWVuQ29uZmlnc3skU2NyZWVufXskRmllbGROYW1lfSA+PSAxICkgewogICAgICAgICAgICAgICAgJElzVmlzaWJsZSA9IDE7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNWaXNpYmxlOwoKICAgICAgICAjIENoZWNrIGlmIGZpZWxkIGlzIG1hbmRhdG9yeSBpbiBBZ2VudFRpY2tldFBob25lIE9SIEFnZW50VGlja2V0RW1haWwgKHZhbHVlID09IDIpCiAgICAgICAgbXkgJElzTWFuZGF0b3J5ID0gMDsKICAgICAgICBmb3IgbXkgJFNjcmVlbiAocXcoQWdlbnRUaWNrZXRQaG9uZSBBZ2VudFRpY2tldEVtYWlsKSkgewogICAgICAgICAgICBpZiAoICRTY3JlZW5Db25maWdzeyRTY3JlZW59eyRGaWVsZE5hbWV9ICYmICRTY3JlZW5Db25maWdzeyRTY3JlZW59eyRGaWVsZE5hbWV9ID09IDIgKSB7CiAgICAgICAgICAgICAgICAkSXNNYW5kYXRvcnkgPSAxOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTdG9yZSBtYW5kYXRvcnkgZmxhZyBpbiBjb25maWcgZm9yIGxhdGVyIHVzZQogICAgICAgICREeW5hbWljRmllbGRDb25maWctPntfSXNNYW5kYXRvcnl9ID0gJElzTWFuZGF0b3J5OwoKICAgICAgICBwdXNoIEBGaWx0ZXJlZEZpZWxkcywgJER5bmFtaWNGaWVsZENvbmZpZzsKICAgIH0KCiAgICByZXR1cm4gXEBGaWx0ZXJlZEZpZWxkczsKfQoKPWhlYWQyIF9Dcm9uVG9UZXh0KCkKCkNvbnZlcnQgYSBjcm9uIHNjaGVkdWxlIHN0cmluZyB0byBodW1hbi1yZWFkYWJsZSB0ZXh0LgoKPWN1dAoKc3ViIF9Dcm9uVG9UZXh0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNjaGVkdWxlID0gJFBhcmFte1NjaGVkdWxlfSB8fCAnJzsKCiAgICAjIENvbW1vbiBwYXR0ZXJucwogICAgbXkgJVBhdHRlcm5zID0gKAogICAgICAgICcqICogKiAqIConICAgICA9PiAnZXZlcnkgbWludXRlJywKICAgICAgICAnKi81ICogKiAqIConICAgPT4gJ2V2ZXJ5IDUgbWludXRlcycsCiAgICAgICAgJyovMTAgKiAqICogKicgID0+ICdldmVyeSAxMCBtaW51dGVzJywKICAgICAgICAnKi8xNSAqICogKiAqJyAgPT4gJ2V2ZXJ5IDE1IG1pbnV0ZXMnLAogICAgICAgICcqLzMwICogKiAqIConICA9PiAnZXZlcnkgMzAgbWludXRlcycsCiAgICAgICAgJzAgKiAqICogKicgICAgID0+ICdldmVyeSBob3VyJywKICAgICAgICAnMCAqLzIgKiAqIConICAgPT4gJ2V2ZXJ5IDIgaG91cnMnLAogICAgICAgICcwIDAgKiAqIConICAgICA9PiAnZGFpbHkgYXQgbWlkbmlnaHQnLAogICAgKTsKCiAgICByZXR1cm4gJFBhdHRlcm5zeyRTY2hlZHVsZX0gaWYgJFBhdHRlcm5zeyRTY2hlZHVsZX07CgogICAgIyBQYXJzZSBjcm9uIGV4cHJlc3Npb246IG1pbnV0ZSBob3VyIGRheSBtb250aCB3ZWVrZGF5CiAgICBteSBAUGFydHMgPSBzcGxpdCAvXHMrLywgJFNjaGVkdWxlOwogICAgcmV0dXJuICRTY2hlZHVsZSBpZiBAUGFydHMgIT0gNTsKCiAgICBteSAoICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRXZWVrZGF5ICkgPSBAUGFydHM7CgogICAgIyBTaW1wbGUgY2FzZTogKi9OIG1pbnV0ZXMKICAgIGlmICggJE1pbiA9fiAvXlwqXC8oXGQrKSQvICYmICRIb3VyIGVxICcqJyAmJiAkRGF5IGVxICcqJyAmJiAkTW9udGggZXEgJyonICYmICRXZWVrZGF5IGVxICcqJyApIHsKICAgICAgICByZXR1cm4gImV2ZXJ5ICQxIG1pbnV0ZXMiOwogICAgfQoKICAgICMgU2ltcGxlIGNhc2U6IHNwZWNpZmljIG1pbnV0ZSwgZXZlcnkgaG91cgogICAgaWYgKCAkTWluID1+IC9eXGQrJC8gJiYgJEhvdXIgZXEgJyonICYmICREYXkgZXEgJyonICYmICRNb250aCBlcSAnKicgJiYgJFdlZWtkYXkgZXEgJyonICkgewogICAgICAgIHJldHVybiAiZXZlcnkgaG91ciBhdCBtaW51dGUgJE1pbiI7CiAgICB9CgogICAgIyBSZXR1cm4gcmF3IHNjaGVkdWxlIGlmIHdlIGNhbid0IHBhcnNlIGl0IG5pY2VseQogICAgcmV0dXJuICRTY2hlZHVsZTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBUaWNrZXRTY2hlZHVsZXIgcGFja2FnZSBmb3IgWm51bnkuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==</File>
        <File Permission="660" Location="Kernel/Modules/AgentTicketSchedulerProcess.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRTY2hlZHVsZXJQcm9jZXNzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRTY2hlZHVsZXJQcm9jZXNzIC0gRnJvbnRlbmQgbW9kdWxlIGZvciBzY2hlZHVsaW5nIHByb2Nlc3MgdGlja2V0cwoKPWhlYWQxIERFU0NSSVBUSU9OCgpUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgd2ViIGludGVyZmFjZSBmb3Igc2NoZWR1bGluZyBwcm9jZXNzIHRpY2tldHMuCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgIyBDaGVjayBpZiBQcm9jZXNzTWFuYWdlbWVudCBpcyBhdmFpbGFibGUKICAgIG15ICRQcm9jZXNzQXZhaWxhYmxlID0gJE1haW5PYmplY3QtPlJlcXVpcmUoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycsCiAgICAgICAgU2lsZW50ID0+IDEsCiAgICApOwoKICAgIGlmICggISRQcm9jZXNzQXZhaWxhYmxlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnUHJvY2VzcyBNYW5hZ2VtZW50IGlzIG5vdCBhdmFpbGFibGUuJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgUHJvY2Vzc01hbmFnZW1lbnQgbW9kdWxlLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYWN0aXZlIHByb2Nlc3NlcwogICAgbXkgJFByb2Nlc3NPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MnKTsKICAgICMgR2V0IGFsbCBhY3RpdmUgcHJvY2Vzc2VzIGFjY2Vzc2libGUgYnkgYWdlbnRzCiAgICAjIElNUE9SVEFOVDogT25seSB1c2UgWydBZ2VudEludGVyZmFjZSddIC0gWm51bnkgZG9lcyBhbiBPUiBtYXRjaCwgc28gdGhpcyB3aWxsIGZpbmQ6CiAgICAjICAgLSBQcm9jZXNzZXMgd2l0aCBJbnRlcmZhY2UgPSBbJ0FnZW50SW50ZXJmYWNlJ10KICAgICMgICAtIFByb2Nlc3NlcyB3aXRoIEludGVyZmFjZSA9IFsnQWdlbnRJbnRlcmZhY2UnLCAnQ3VzdG9tZXJJbnRlcmZhY2UnXQogICAgIyBCdXQgTk9UIHByb2Nlc3NlcyB3aXRoIG9ubHkgWydDdXN0b21lckludGVyZmFjZSddCiAgICBteSAkUHJvY2Vzc0xpc3QgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0xpc3QoCiAgICAgICAgUHJvY2Vzc1N0YXRlID0+IFsnQWN0aXZlJ10sCiAgICAgICAgSW50ZXJmYWNlICAgID0+IFsnQWdlbnRJbnRlcmZhY2UnXSwKICAgICkgfHwge307CgogICAgaWYgKCAhJXskUHJvY2Vzc0xpc3R9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gYWN0aXZlIHByb2Nlc3NlcyBhdmFpbGFibGUgZm9yIHNjaGVkdWxpbmcuJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbmZpZ3VyZSBhdCBsZWFzdCBvbmUgYWN0aXZlIHByb2Nlc3Mgd2l0aCBBZ2VudEludGVyZmFjZSBhY2Nlc3MuJywKICAgICAgICApOwogICAgfQoKICAgICMgR2V0IHN1YmFjdGlvbgogICAgbXkgJFN1YmFjdGlvbiA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJhY3Rpb24nICkgfHwgJyc7CgogICAgIyBEaXNwYXRjaCB0byBzdWJhY3Rpb24gaGFuZGxlcgogICAgaWYgKCAkU3ViYWN0aW9uIGVxICdBZGQnIHx8ICRTdWJhY3Rpb24gZXEgJ0VkaXQnICkgewogICAgICAgICMgQ2hlY2sgUlcgcGVybWlzc2lvbgogICAgICAgIGlmICggISRTZWxmLT5fSGFzUldQZXJtaXNzaW9uKCkgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRTZWxmLT5fU2hvd0Zvcm0oJVBhcmFtKTsKICAgIH0KICAgIGVsc2lmICggJFN1YmFjdGlvbiBlcSAnU2F2ZScgKSB7CiAgICAgICAgIyBDaGVjayBSVyBwZXJtaXNzaW9uCiAgICAgICAgaWYgKCAhJFNlbGYtPl9IYXNSV1Blcm1pc3Npb24oKSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJFNlbGYtPl9TYXZlKCVQYXJhbSk7CiAgICB9CgogICAgIyBEZWZhdWx0OiByZWRpcmVjdCB0byBtYWluIHNjaGVkdWxlciBsaXN0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlciIsCiAgICApOwp9Cgo9aGVhZDIgX1Nob3dGb3JtKCkKClNob3cgdGhlIHByb2Nlc3Mgc2NoZWR1bGUgZm9ybS4KCj1jdXQKCnN1YiBfU2hvd0Zvcm0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0U2NoZWR1bGVyJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQcm9jZXNzT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MnKTsKICAgIG15ICRKU09OT2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwoKICAgIG15ICRTY2hlZHVsZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTY2hlZHVsZXJJRCcgKSB8fCAnJzsKICAgIG15ICRTdWJhY3Rpb24gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJhY3Rpb24nICkgfHwgJ0FkZCc7CgogICAgbXkgJVNjaGVkdWxlOwogICAgaWYgKCAkU2NoZWR1bGVySUQgJiYgJFN1YmFjdGlvbiBlcSAnRWRpdCcgKSB7CiAgICAgICAgJVNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KCBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQgKTsKCiAgICAgICAgIyBWZXJpZnkgdGhpcyBpcyBhIHByb2Nlc3Mgc2NoZWR1bGUKICAgICAgICBpZiAoICVTY2hlZHVsZSAmJiAkU2NoZWR1bGV7U2NoZWR1bGVNb2RlfSBuZSAncHJvY2VzcycgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ1RoaXMgc2NoZWR1bGUgaXMgbm90IGEgcHJvY2VzcyBzY2hlZHVsZS4nLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIHVzZSB0aGUgbm9ybWFsIHRpY2tldCBzY2hlZHVsZXIgdG8gZWRpdCB0aGlzIHNjaGVkdWxlLicsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IGF2YWlsYWJsZSBwcm9jZXNzZXMgKG9ubHkgdGhvc2UgYWNjZXNzaWJsZSBieSBhZ2VudHMpCiAgICAjIElNUE9SVEFOVDogT25seSB1c2UgWydBZ2VudEludGVyZmFjZSddIC0gWm51bnkgZG9lcyBhbiBPUiBtYXRjaCwgc28gdGhpcyB3aWxsIGZpbmQ6CiAgICAjICAgLSBQcm9jZXNzZXMgd2l0aCBJbnRlcmZhY2UgPSBbJ0FnZW50SW50ZXJmYWNlJ10KICAgICMgICAtIFByb2Nlc3NlcyB3aXRoIEludGVyZmFjZSA9IFsnQWdlbnRJbnRlcmZhY2UnLCAnQ3VzdG9tZXJJbnRlcmZhY2UnXQogICAgIyBCdXQgTk9UIHByb2Nlc3NlcyB3aXRoIG9ubHkgWydDdXN0b21lckludGVyZmFjZSddCiAgICBteSAkUHJvY2Vzc0xpc3QgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0xpc3QoCiAgICAgICAgUHJvY2Vzc1N0YXRlID0+IFsnQWN0aXZlJ10sCiAgICAgICAgSW50ZXJmYWNlICAgID0+IFsnQWdlbnRJbnRlcmZhY2UnXSwKICAgICkgfHwge307CgogICAgIyBTZXQgZGVmYXVsdHMgZm9yIG5ldyBzY2hlZHVsZQogICAgaWYgKCAhJVNjaGVkdWxlICkgewogICAgICAgICVTY2hlZHVsZSA9ICgKICAgICAgICAgICAgU2NoZWR1bGVNb2RlICAgPT4gJ3Byb2Nlc3MnLAogICAgICAgICAgICBTY2hlZHVsZVR5cGUgICA9PiAnd2Vla2x5JywKICAgICAgICAgICAgRW5kVHlwZSAgICAgICAgPT4gJ25ldmVyJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgICAgICAgICAgd2Vla2RheXMgPT4gWzFdLAogICAgICAgICAgICAgICAgdGltZSAgICAgPT4gJzA5OjAwJywKICAgICAgICAgICAgICAgIHRpbWV6b25lID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0U2NoZWR1bGVyOjpEZWZhdWx0VGltZXpvbmUnKSB8fCAnRXVyb3BlL0JlcmxpbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgICMgR2V0IFNjaGVkdWxlQ29uZmlnIGFzIGhhc2hyZWYKICAgIG15ICRDb25maWcgPSAkU2NoZWR1bGV7U2NoZWR1bGVDb25maWd9IHx8IHt9OwogICAgaWYgKCAhcmVmICRDb25maWcgKSB7CiAgICAgICAgJENvbmZpZyA9ICRKU09OT2JqZWN0LT5EZWNvZGUoIERhdGEgPT4gJENvbmZpZyApIHx8IHt9OwogICAgfQoKICAgICMgR2V0IEFjdGl2aXR5RGlhbG9nRGF0YSBhcyBoYXNocmVmCiAgICBteSAkRGlhbG9nRGF0YSA9ICRTY2hlZHVsZXtBY3Rpdml0eURpYWxvZ0RhdGF9IHx8IHt9OwogICAgaWYgKCAhcmVmICREaWFsb2dEYXRhICkgewogICAgICAgICREaWFsb2dEYXRhID0gJEpTT05PYmplY3QtPkRlY29kZSggRGF0YSA9PiAkRGlhbG9nRGF0YSApIHx8IHt9OwogICAgfQoKICAgICMgQnVpbGQgUHJvY2VzcyBkcm9wZG93bgogICAgbXkgJFByb2Nlc3NTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRQcm9jZXNzTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1Byb2Nlc3NFbnRpdHlJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRTY2hlZHVsZXtQcm9jZXNzSUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkJywKICAgICk7CgogICAgIyBCdWlsZCBWYWxpZCBkcm9wZG93bgogICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICRWYWxpZFN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFNjaGVkdWxle1ZhbGlkSUR9IHx8IDEsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBCdWlsZCBTY2hlZHVsZSBUeXBlIGRyb3Bkb3duCiAgICBteSAlU2NoZWR1bGVUeXBlcyA9ICgKICAgICAgICBkYWlseSAgICAgICAgICAgICAgICAgID0+ICdEYWlseScsCiAgICAgICAgd2Vla2x5ICAgICAgICAgICAgICAgICA9PiAnV2Vla2x5JywKICAgICAgICBtb250aGx5X2RheSAgICAgICAgICAgID0+ICdNb250aGx5IChEYXkgb2YgTW9udGgpJywKICAgICAgICBtb250aGx5X3dlZWtkYXkgICAgICAgID0+ICdNb250aGx5IChXZWVrZGF5KScsCiAgICAgICAgbW9udGhseV93ZWVrZGF5X29mZnNldCA9PiAnTW9udGhseSAoV2Vla2RheSArIE9mZnNldCknLAogICAgICAgIHllYXJseSAgICAgICAgICAgICAgICAgPT4gJ1llYXJseScsCiAgICAgICAgaW50ZXJ2YWwgICAgICAgICAgICAgICA9PiAnSW50ZXJ2YWwgKGV2ZXJ5IE4gZGF5cyknLAogICAgKTsKICAgIG15ICRTY2hlZHVsZVR5cGVTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVNjaGVkdWxlVHlwZXMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnU2NoZWR1bGVUeXBlJywKICAgICAgICBTZWxlY3RlZElEID0+ICRTY2hlZHVsZXtTY2hlZHVsZVR5cGV9IHx8ICd3ZWVrbHknLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgQnVpbGQgVGltZXpvbmUgZHJvcGRvd24KICAgIG15IEBUaW1lem9uZXMgPSBxdygKICAgICAgICBFdXJvcGUvQmVybGluIEV1cm9wZS9Mb25kb24gRXVyb3BlL1BhcmlzIEV1cm9wZS9BbXN0ZXJkYW0gRXVyb3BlL1ZpZW5uYQogICAgICAgIEV1cm9wZS9adXJpY2ggRXVyb3BlL1JvbWUgRXVyb3BlL01hZHJpZCBFdXJvcGUvU3RvY2tob2xtIEV1cm9wZS9XYXJzYXcKICAgICAgICBBbWVyaWNhL05ld19Zb3JrIEFtZXJpY2EvQ2hpY2FnbyBBbWVyaWNhL0RlbnZlciBBbWVyaWNhL0xvc19BbmdlbGVzCiAgICAgICAgQXNpYS9Ub2t5byBBc2lhL1NoYW5naGFpIEFzaWEvU2luZ2Fwb3JlIEF1c3RyYWxpYS9TeWRuZXkgVVRDCiAgICApOwogICAgbXkgJVRpbWV6b25lTGlzdCA9IG1hcCB7ICRfID0+ICRfIH0gQFRpbWV6b25lczsKICAgIG15ICRUaW1lem9uZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVGltZXpvbmVMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RpbWV6b25lJywKICAgICAgICBTZWxlY3RlZElEID0+ICRDb25maWctPnt0aW1lem9uZX0gfHwgJ0V1cm9wZS9CZXJsaW4nLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgQnVpbGQgV2Vla2RheSBjaGVja2JveGVzIGRhdGEKICAgIG15IEBXZWVrZGF5cyA9ICgKICAgICAgICB7IElEID0+IDEsIE5hbWUgPT4gJ01vbmRheScsICAgIFNlbGVjdGVkID0+ICcnIH0sCiAgICAgICAgeyBJRCA9PiAyLCBOYW1lID0+ICdUdWVzZGF5JywgICBTZWxlY3RlZCA9PiAnJyB9LAogICAgICAgIHsgSUQgPT4gMywgTmFtZSA9PiAnV2VkbmVzZGF5JywgU2VsZWN0ZWQgPT4gJycgfSwKICAgICAgICB7IElEID0+IDQsIE5hbWUgPT4gJ1RodXJzZGF5JywgIFNlbGVjdGVkID0+ICcnIH0sCiAgICAgICAgeyBJRCA9PiA1LCBOYW1lID0+ICdGcmlkYXknLCAgICBTZWxlY3RlZCA9PiAnJyB9LAogICAgICAgIHsgSUQgPT4gNiwgTmFtZSA9PiAnU2F0dXJkYXknLCAgU2VsZWN0ZWQgPT4gJycgfSwKICAgICAgICB7IElEID0+IDcsIE5hbWUgPT4gJ1N1bmRheScsICAgIFNlbGVjdGVkID0+ICcnIH0sCiAgICApOwogICAgaWYgKCAkQ29uZmlnLT57d2Vla2RheXN9ICYmIHJlZiAkQ29uZmlnLT57d2Vla2RheXN9IGVxICdBUlJBWScgKSB7CiAgICAgICAgbXkgJVNlbGVjdGVkV2Vla2RheXMgPSBtYXAgeyAkXyA9PiAxIH0gQHsgJENvbmZpZy0+e3dlZWtkYXlzfSB9OwogICAgICAgIGZvciBteSAkRGF5IChAV2Vla2RheXMpIHsKICAgICAgICAgICAgJERheS0+e1NlbGVjdGVkfSA9ICRTZWxlY3RlZFdlZWtkYXlzeyAkRGF5LT57SUR9IH0gPyAnY2hlY2tlZCcgOiAnJzsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICEkU2NoZWR1bGVySUQgKSB7CiAgICAgICAgIyBEZWZhdWx0OiBNb25kYXkgc2VsZWN0ZWQgZm9yIG5ldyBzY2hlZHVsZXMKICAgICAgICAkV2Vla2RheXNbMF17U2VsZWN0ZWR9ID0gJ2NoZWNrZWQnOwogICAgfQoKICAgICMgQnVpbGQgRGF5IG9mIE1vbnRoIGRyb3Bkb3duCiAgICBteSAlRGF5cyA9IG1hcCB7ICRfID0+ICRfIH0gKCAxIC4uIDMxICk7CiAgICAkRGF5c3stMX0gPSAnTGFzdCBkYXknOwogICAgbXkgJERheVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlRGF5cywKICAgICAgICBOYW1lICAgICAgID0+ICdEYXknLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJENvbmZpZy0+e2RheX0gfHwgMSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIEJ1aWxkIE50aCBkcm9wZG93biBmb3IgbW9udGhseSB3ZWVrZGF5CiAgICBteSAlTnRoTGlzdCA9ICgKICAgICAgICAxICA9PiAnMXN0JywKICAgICAgICAyICA9PiAnMm5kJywKICAgICAgICAzICA9PiAnM3JkJywKICAgICAgICA0ICA9PiAnNHRoJywKICAgICAgICAtMSA9PiAnTGFzdCcsCiAgICApOwogICAgbXkgJE50aFN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlTnRoTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdOdGgnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJENvbmZpZy0+e250aH0gfHwgMSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIEJ1aWxkIFdlZWtkYXkgZHJvcGRvd24gZm9yIG1vbnRobHkgd2Vla2RheQogICAgbXkgJVdlZWtkYXlMaXN0ID0gKAogICAgICAgIDEgPT4gJ01vbmRheScsCiAgICAgICAgMiA9PiAnVHVlc2RheScsCiAgICAgICAgMyA9PiAnV2VkbmVzZGF5JywKICAgICAgICA0ID0+ICdUaHVyc2RheScsCiAgICAgICAgNSA9PiAnRnJpZGF5JywKICAgICAgICA2ID0+ICdTYXR1cmRheScsCiAgICAgICAgNyA9PiAnU3VuZGF5JywKICAgICk7CiAgICBteSAkV2Vla2RheVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlV2Vla2RheUxpc3QsCiAgICAgICAgTmFtZSAgICAgICA9PiAnV2Vla2RheScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkQ29uZmlnLT57d2Vla2RheX0gfHwgMSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIEJ1aWxkIE9mZnNldCBEYXlzIGRyb3Bkb3duCiAgICBteSAlT2Zmc2V0RGF5czsKICAgIGZvciBteSAkaSAoIC03IC4uIDcgKSB7CiAgICAgICAgJE9mZnNldERheXN7JGl9ID0gJGkgPj0gMCA/ICIrJGkgZGF5cyIgOiAiJGkgZGF5cyI7CiAgICB9CiAgICAkT2Zmc2V0RGF5c3swfSA9ICcwIGRheXMgKHNhbWUgZGF5KSc7CiAgICBteSAkT2Zmc2V0RGF5c1N0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlT2Zmc2V0RGF5cywKICAgICAgICBOYW1lICAgICAgID0+ICdPZmZzZXREYXlzJywKICAgICAgICBTZWxlY3RlZElEID0+ICRDb25maWctPntvZmZzZXRfZGF5c30gfHwgMCwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIEJ1aWxkIE1vbnRoIGRyb3Bkb3duIGZvciB5ZWFybHkKICAgIG15ICVNb250aHMgPSAoCiAgICAgICAgMSAgPT4gJ0phbnVhcnknLAogICAgICAgIDIgID0+ICdGZWJydWFyeScsCiAgICAgICAgMyAgPT4gJ01hcmNoJywKICAgICAgICA0ICA9PiAnQXByaWwnLAogICAgICAgIDUgID0+ICdNYXknLAogICAgICAgIDYgID0+ICdKdW5lJywKICAgICAgICA3ICA9PiAnSnVseScsCiAgICAgICAgOCAgPT4gJ0F1Z3VzdCcsCiAgICAgICAgOSAgPT4gJ1NlcHRlbWJlcicsCiAgICAgICAgMTAgPT4gJ09jdG9iZXInLAogICAgICAgIDExID0+ICdOb3ZlbWJlcicsCiAgICAgICAgMTIgPT4gJ0RlY2VtYmVyJywKICAgICk7CiAgICBteSAkTW9udGhTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJU1vbnRocywKICAgICAgICBOYW1lICAgICAgID0+ICdNb250aCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkQ29uZmlnLT57bW9udGh9IHx8IDEsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBCdWlsZCBFbmQgVHlwZSBkcm9wZG93bgogICAgbXkgJUVuZFR5cGVzID0gKAogICAgICAgIG5ldmVyICAgICAgID0+ICdOZXZlciAocnVucyBpbmRlZmluaXRlbHkpJywKICAgICAgICBvY2N1cnJlbmNlcyA9PiAnQWZ0ZXIgWCBleGVjdXRpb25zJywKICAgICAgICBkYXRlICAgICAgICA9PiAnVW50aWwgZGF0ZScsCiAgICApOwogICAgbXkgJEVuZFR5cGVTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJUVuZFR5cGVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0VuZFR5cGUnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFNjaGVkdWxle0VuZFR5cGV9IHx8ICduZXZlcicsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBCdWlsZCBIb3VyIGRyb3Bkb3duIGZvciBleGVjdXRpb24gdGltZQogICAgbXkgJUhvdXJzOwogICAgZm9yIG15ICRIb3VyICggMCAuLiAyMyApIHsKICAgICAgICAkSG91cnN7JEhvdXJ9ID0gc3ByaW50ZiggJyUwMmQnLCAkSG91ciApOwogICAgfQogICAgIyBQYXJzZSBleGlzdGluZyB0aW1lIHZhbHVlIChISDpNTSBmb3JtYXQpCiAgICBteSAkQ3VycmVudFRpbWUgPSAkQ29uZmlnLT57dGltZX0gfHwgJzA5OjAwJzsKICAgIG15ICggJEN1cnJlbnRIb3VyLCAkQ3VycmVudE1pbnV0ZSApID0gc3BsaXQoIC86LywgJEN1cnJlbnRUaW1lICk7CiAgICAkQ3VycmVudEhvdXIgICAvLz0gOTsKICAgICRDdXJyZW50TWludXRlIC8vPSAwOwoKICAgIG15ICRUaW1lSG91clN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlSG91cnMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVGltZUhvdXInLAogICAgICAgIFNlbGVjdGVkSUQgPT4gaW50KCRDdXJyZW50SG91ciksCiAgICAgICAgQ2xhc3MgICAgICA9PiAnU2NoZWR1bGVySW5saW5lU2VsZWN0JywKICAgICk7CgogICAgIyBCdWlsZCBNaW51dGUgZHJvcGRvd24gZm9yIGV4ZWN1dGlvbiB0aW1lCiAgICBteSAlTWludXRlczsKICAgIGZvciBteSAkTWludXRlICggMCwgNSwgMTAsIDE1LCAyMCwgMjUsIDMwLCAzNSwgNDAsIDQ1LCA1MCwgNTUgKSB7CiAgICAgICAgJE1pbnV0ZXN7JE1pbnV0ZX0gPSBzcHJpbnRmKCAnJTAyZCcsICRNaW51dGUgKTsKICAgIH0KICAgIG15ICRUaW1lTWludXRlU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVNaW51dGVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RpbWVNaW51dGUnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gaW50KCRDdXJyZW50TWludXRlKSwKICAgICAgICBDbGFzcyAgICAgID0+ICdTY2hlZHVsZXJJbmxpbmVTZWxlY3QnLAogICAgKTsKCiAgICAjIEJ1aWxkIFN0YXJ0RGF0ZSB1c2luZyBabnVueSdzIG5hdGl2ZSBkYXRlIHNlbGVjdGlvbgogICAgIyBQYXJzZSBleGlzdGluZyBzdGFydF9kYXRlIGlmIHByZXNlbnQgKFlZWVktTU0tREQgZm9ybWF0KQogICAgbXkgJVN0YXJ0RGF0ZVBhcmFtczsKICAgIGlmICggJENvbmZpZy0+e3N0YXJ0X2RhdGV9ICYmICRDb25maWctPntzdGFydF9kYXRlfSA9fiAvXihcZHs0fSktKFxkezJ9KS0oXGR7Mn0pLyApIHsKICAgICAgICAkU3RhcnREYXRlUGFyYW1ze1N0YXJ0RGF0ZVllYXJ9ICA9ICQxOwogICAgICAgICRTdGFydERhdGVQYXJhbXN7U3RhcnREYXRlTW9udGh9ID0gaW50KCQyKTsKICAgICAgICAkU3RhcnREYXRlUGFyYW1ze1N0YXJ0RGF0ZURheX0gICA9IGludCgkMyk7CiAgICB9CgogICAgIyBJZiBubyBzdGFydF9kYXRlIHlldCwgZGVmYXVsdCB0byB0b2RheQogICAgaWYgKCAhJVN0YXJ0RGF0ZVBhcmFtcyApIHsKICAgICAgICBteSAkTm93ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgbXkgJEdldCA9ICROb3ctPkdldCgpOwogICAgICAgICRTdGFydERhdGVQYXJhbXN7U3RhcnREYXRlWWVhcn0gID0gJEdldC0+e1llYXJ9OwogICAgICAgICRTdGFydERhdGVQYXJhbXN7U3RhcnREYXRlTW9udGh9ID0gJEdldC0+e01vbnRofTsKICAgICAgICAkU3RhcnREYXRlUGFyYW1ze1N0YXJ0RGF0ZURheX0gICA9ICRHZXQtPntEYXl9OwogICAgfQoKICAgIG15ICRTdGFydERhdGVTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVTdGFydERhdGVQYXJhbXMsCiAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAnU3RhcnREYXRlJywKICAgICAgICBGb3JtYXQgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLCAgIyBEYXRlIG9ubHksIG5vIHRpbWUKICAgICAgICBZZWFyUGVyaW9kRnV0dXJlID0+IDUsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAwLAogICAgKTsKCiAgICAjIEJ1aWxkIEVuZERhdGUgdXNpbmcgWm51bnkncyBuYXRpdmUgZGF0ZSBzZWxlY3Rpb24KICAgICMgUGFyc2UgZXhpc3RpbmcgZW5kX2RhdGUgaWYgcHJlc2VudCAoWVlZWS1NTS1ERCBmb3JtYXQpCiAgICBteSAlRW5kRGF0ZVBhcmFtczsKICAgIGlmICggJFNjaGVkdWxle0VuZERhdGV9ICYmICRTY2hlZHVsZXtFbmREYXRlfSA9fiAvXihcZHs0fSktKFxkezJ9KS0oXGR7Mn0pLyApIHsKICAgICAgICAkRW5kRGF0ZVBhcmFtc3tFbmREYXRlWWVhcn0gID0gJDE7CiAgICAgICAgJEVuZERhdGVQYXJhbXN7RW5kRGF0ZU1vbnRofSA9IGludCgkMik7CiAgICAgICAgJEVuZERhdGVQYXJhbXN7RW5kRGF0ZURheX0gICA9IGludCgkMyk7CiAgICAgICAgJEVuZERhdGVQYXJhbXN7RW5kRGF0ZVVzZWR9ICA9IDE7CiAgICB9CgogICAgbXkgJEVuZERhdGVTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVFbmREYXRlUGFyYW1zLAogICAgICAgIFByZWZpeCAgICAgICAgICAgPT4gJ0VuZERhdGUnLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsICAjIERhdGUgb25seSwgbm8gdGltZQogICAgICAgIEVuZERhdGVPcHRpb25hbCAgPT4gMSwgICAgICAgICAgICAgICAgICAjIFNob3dzIGNoZWNrYm94CiAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiAxMCwKICAgICAgICBZZWFyUGVyaW9kUGFzdCAgID0+IDAsCiAgICApOwoKICAgICMgUHJlcGFyZSB0aXRsZSBiYXNlZCBvbiBtb2RlCiAgICBteSAkRm9ybVRpdGxlOwogICAgaWYgKCRTY2hlZHVsZXJJRCkgewogICAgICAgICRGb3JtVGl0bGUgPSAnRWRpdCBQcm9jZXNzIFNjaGVkdWxlJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRGb3JtVGl0bGUgPSAnTmV3IFByb2Nlc3MgU2NoZWR1bGUnOwogICAgfQoKICAgICMgUHJlcGFyZSBBY3Rpdml0eURpYWxvZ0RhdGEgYXMgSlNPTiBmb3IgSmF2YVNjcmlwdAogICAgbXkgJEFjdGl2aXR5RGlhbG9nRGF0YUpTT04gPSAkSlNPTk9iamVjdC0+RW5jb2RlKCBEYXRhID0+ICREaWFsb2dEYXRhICkgfHwgJ3t9JzsKCiAgICAjIFJlbmRlciB3ZWVrZGF5IGNoZWNrYm94ZXMgKG11c3QgYmUgZG9uZSBCRUZPUkUgT3V0cHV0KCkgY2FsbCkKICAgIGZvciBteSAkRGF5IChAV2Vla2RheXMpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV2Vla2RheUNoZWNrYm94JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEYXkgICAgID0+ICREYXktPntJRH0sCiAgICAgICAgICAgICAgICBEYXlOYW1lID0+ICREYXktPntOYW1lfSwKICAgICAgICAgICAgICAgIENoZWNrZWQgPT4gJERheS0+e1NlbGVjdGVkfSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgR2V0IERhZW1vbiBzY2hlZHVsZSBpbmZvIGZvciB0ZW1wbGF0ZQogICAgbXkgJERhZW1vblRhc2tDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0RhZW1vbjo6U2NoZWR1bGVyQ3JvblRhc2tNYW5hZ2VyOjpUYXNrIyMjVGlja2V0U2NoZWR1bGVyUnVuJykgfHwge307CiAgICBteSAkRGFlbW9uU2NoZWR1bGUgICA9ICREYWVtb25UYXNrQ29uZmlnLT57U2NoZWR1bGV9IHx8ICcqLzUgKiAqICogKic7CgogICAgIyBDb252ZXJ0IGNyb24gdG8gaHVtYW4tcmVhZGFibGUgdGV4dAogICAgbXkgJERhZW1vblNjaGVkdWxlVGV4dCA9ICRTZWxmLT5fQ3JvblRvVGV4dCggU2NoZWR1bGUgPT4gJERhZW1vblNjaGVkdWxlICk7CgogICAgIyBDaGVjayBpZiB1c2VyIGlzIGFkbWluIChmb3Igc2hvd2luZyBTeXNDb25maWcgbGlua3MpCiAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKICAgIG15ICRJc0FkbWluID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBHcm91cE5hbWUgPT4gJ2FkbWluJywKICAgICAgICBUeXBlICAgICAgPT4gJ3J3JywKICAgICk7CgogICAgIyBIYW5kbGUgdmFsaWRhdGlvbiBlcnJvcnMgcGFzc2VkIGZyb20gX1NhdmUKICAgIG15ICRFcnJvcnMgPSAkUGFyYW17RXJyb3JzfSB8fCBbXTsKICAgIG15ICRGaWVsZEVycm9ycyA9ICRQYXJhbXtGaWVsZEVycm9yc30gfHwge307CiAgICBteSAkR2V0UGFyYW0gPSAkUGFyYW17R2V0UGFyYW19IHx8IHt9OwoKICAgICMgSWYgd2UgaGF2ZSBHZXRQYXJhbSBmcm9tIGEgZmFpbGVkIHNhdmUsIHVzZSB0aG9zZSB2YWx1ZXMgaW5zdGVhZAogICAgaWYgKCAleyRHZXRQYXJhbX0gKSB7CiAgICAgICAgJVNjaGVkdWxlID0gKAogICAgICAgICAgICAlU2NoZWR1bGUsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkR2V0UGFyYW0tPntOYW1lfSAvLyAkU2NoZWR1bGV7TmFtZX0sCiAgICAgICAgICAgIFNjaGVkdWxlVHlwZSA9PiAkR2V0UGFyYW0tPntTY2hlZHVsZVR5cGV9IC8vICRTY2hlZHVsZXtTY2hlZHVsZVR5cGV9LAogICAgICAgICAgICBFbmRUeXBlICAgICAgPT4gJEdldFBhcmFtLT57RW5kVHlwZX0gLy8gJFNjaGVkdWxle0VuZFR5cGV9LAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gJEdldFBhcmFtLT57VmFsaWRJRH0gLy8gJFNjaGVkdWxle1ZhbGlkSUR9LAogICAgICAgICk7CiAgICAgICAgIyBVcGRhdGUgUHJvY2Vzc1N0cmcgd2l0aCBzZWxlY3RlZCBwcm9jZXNzCiAgICAgICAgaWYgKCAkR2V0UGFyYW0tPntQcm9jZXNzSUR9ICkgewogICAgICAgICAgICAkUHJvY2Vzc1N0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkUHJvY2Vzc0xpc3QsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1Byb2Nlc3NFbnRpdHlJRCcsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJEdldFBhcmFtLT57UHJvY2Vzc0lEfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZSBWYWxpZGF0ZV9SZXF1aXJlZCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICMgVXBkYXRlIEFjdGl2aXR5RGlhbG9nRGF0YUpTT04gd2l0aCBzdWJtaXR0ZWQgdmFsdWVzCiAgICAgICAgaWYgKCAkR2V0UGFyYW0tPntBY3Rpdml0eURpYWxvZ0RhdGF9ICkgewogICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dEYXRhSlNPTiA9ICRKU09OT2JqZWN0LT5FbmNvZGUoIERhdGEgPT4gJEdldFBhcmFtLT57QWN0aXZpdHlEaWFsb2dEYXRhfSApIHx8ICd7fSc7CiAgICAgICAgfQogICAgfQoKICAgICMgQ29udmVydCBGaWVsZEVycm9ycyB0byBKU09OIGZvciBKYXZhU2NyaXB0CiAgICBteSAkRmllbGRFcnJvcnNKU09OID0gJEpTT05PYmplY3QtPkVuY29kZSggRGF0YSA9PiAkRmllbGRFcnJvcnMgKSB8fCAne30nOwoKICAgICMgT3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBTaG93IGVycm9yIG1lc3NhZ2UgYm94IGlmIHRoZXJlIGFyZSBlcnJvcnMKICAgIGlmICggQHskRXJyb3JzfSApIHsKICAgICAgICBteSAkRXJyb3JIVE1MID0gJzx1bD4nOwogICAgICAgIGZvciBteSAkRXJyb3IgKCBAeyRFcnJvcnN9ICkgewogICAgICAgICAgICAkRXJyb3JIVE1MIC49ICc8bGk+JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJEVycm9yICkgLiAnPC9saT4nOwogICAgICAgIH0KICAgICAgICAkRXJyb3JIVE1MIC49ICc8L3VsPic7CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BsZWFzZSBjb3JyZWN0IHRoZSBmb2xsb3dpbmcgZXJyb3JzOicpIC4gJEVycm9ySFRNTCwKICAgICAgICApOwogICAgfQoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRTY2hlZHVsZXJQcm9jZXNzRm9ybScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVNjaGVkdWxlLAogICAgICAgICAgICBGb3JtVGl0bGUgICAgICAgICAgICAgID0+ICRGb3JtVGl0bGUsCiAgICAgICAgICAgIFByb2Nlc3NTdHJnICAgICAgICAgICAgPT4gJFByb2Nlc3NTdHJnLAogICAgICAgICAgICBWYWxpZFN0cmcgICAgICAgICAgICAgID0+ICRWYWxpZFN0cmcsCiAgICAgICAgICAgIFNjaGVkdWxlVHlwZVN0cmcgICAgICAgPT4gJFNjaGVkdWxlVHlwZVN0cmcsCiAgICAgICAgICAgIFRpbWV6b25lU3RyZyAgICAgICAgICAgPT4gJFRpbWV6b25lU3RyZywKICAgICAgICAgICAgRGF5U3RyZyAgICAgICAgICAgICAgICA9PiAkRGF5U3RyZywKICAgICAgICAgICAgTnRoU3RyZyAgICAgICAgICAgICAgICA9PiAkTnRoU3RyZywKICAgICAgICAgICAgV2Vla2RheVN0cmcgICAgICAgICAgICA9PiAkV2Vla2RheVN0cmcsCiAgICAgICAgICAgIE9mZnNldERheXMgICAgICAgICAgICAgPT4gJENvbmZpZy0+e29mZnNldF9kYXlzfSB8fCAwLAogICAgICAgICAgICBNb250aFN0cmcgICAgICAgICAgICAgID0+ICRNb250aFN0cmcsCiAgICAgICAgICAgIEVuZFR5cGVTdHJnICAgICAgICAgICAgPT4gJEVuZFR5cGVTdHJnLAogICAgICAgICAgICBUaW1lSG91clN0cmcgICAgICAgICAgID0+ICRUaW1lSG91clN0cmcsCiAgICAgICAgICAgIFRpbWVNaW51dGVTdHJnICAgICAgICAgPT4gJFRpbWVNaW51dGVTdHJnLAogICAgICAgICAgICBJbnRlcnZhbCAgICAgICAgICAgICAgID0+ICRDb25maWctPntpbnRlcnZhbH0gfHwgNywKICAgICAgICAgICAgU3RhcnREYXRlU3RyZyAgICAgICAgICA9PiAkU3RhcnREYXRlU3RyZywKICAgICAgICAgICAgRW5kRGF0ZVN0cmcgICAgICAgICAgICA9PiAkRW5kRGF0ZVN0cmcsCiAgICAgICAgICAgIE1heE9jY3VycmVuY2VzICAgICAgICAgPT4gJFNjaGVkdWxle01heE9jY3VycmVuY2VzfSB8fCAnJywKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dEYXRhSlNPTiA9PiAkQWN0aXZpdHlEaWFsb2dEYXRhSlNPTiwKICAgICAgICAgICAgU2NoZWR1bGVySUQgICAgICAgICAgICA9PiAkU2NoZWR1bGVySUQsCiAgICAgICAgICAgIERhZW1vblNjaGVkdWxlICAgICAgICAgPT4gJERhZW1vblNjaGVkdWxlLAogICAgICAgICAgICBEYWVtb25TY2hlZHVsZVRleHQgICAgID0+ICREYWVtb25TY2hlZHVsZVRleHQsCiAgICAgICAgICAgIElzQWRtaW4gICAgICAgICAgICAgICAgPT4gJElzQWRtaW4sCiAgICAgICAgICAgIEZpZWxkRXJyb3JzSlNPTiAgICAgICAgPT4gJEZpZWxkRXJyb3JzSlNPTiwKICAgICAgICB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9Cgo9aGVhZDIgX1NhdmUoKQoKU2F2ZSB0aGUgcHJvY2VzcyBzY2hlZHVsZS4KCj1jdXQKCnN1YiBfU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFRpY2tldFNjaGVkdWxlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXInKTsKICAgIG15ICRKU09OT2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwoKICAgICMgU0VDVVJJVFk6IENTUkYgcHJvdGVjdGlvbiBmb3IgdGhpcyBzdGF0ZS1jaGFuZ2luZyBhY3Rpb24KICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICBteSAkU2NoZWR1bGVySUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NoZWR1bGVySUQnICkgfHwgJyc7CgogICAgIyBDb2xsZWN0IGZvcm0gZGF0YQogICAgbXkgJUZvcm1EYXRhID0gKAogICAgICAgIE5hbWUgICAgICAgICAgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTmFtZScgKSB8fCAnJywKICAgICAgICBTY2hlZHVsZU1vZGUgICAgPT4gJ3Byb2Nlc3MnLAogICAgICAgIFByb2Nlc3NJRCAgICAgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvY2Vzc0VudGl0eUlEJyApIHx8ICcnLAogICAgICAgIFNjaGVkdWxlVHlwZSAgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NoZWR1bGVUeXBlJyApIHx8ICd3ZWVrbHknLAogICAgICAgIEVuZFR5cGUgICAgICAgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRW5kVHlwZScgKSB8fCAnbmV2ZXInLAogICAgICAgIE1heE9jY3VycmVuY2VzICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTWF4T2NjdXJyZW5jZXMnICksCiAgICAgICAgVmFsaWRJRCAgICAgICAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdWYWxpZElEJyApIHx8IDEsCiAgICApOwoKICAgICMgRW5kRGF0ZSBpcyBub3cgZnJvbSBabnVueSdzIEJ1aWxkRGF0ZVNlbGVjdGlvbiAobXVsdGktZmllbGQgZm9ybWF0KQogICAgbXkgJEVuZERhdGVVc2VkICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbmREYXRlVXNlZCcgKTsKICAgIG15ICRFbmREYXRlWWVhciAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRW5kRGF0ZVllYXInICk7CiAgICBteSAkRW5kRGF0ZU1vbnRoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VuZERhdGVNb250aCcgKTsKICAgIG15ICRFbmREYXRlRGF5ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRW5kRGF0ZURheScgKTsKCiAgICBpZiAoICRFbmREYXRlVXNlZCAmJiAkRW5kRGF0ZVllYXIgJiYgJEVuZERhdGVNb250aCAmJiAkRW5kRGF0ZURheSApIHsKICAgICAgICAkRm9ybURhdGF7RW5kRGF0ZX0gPSBzcHJpbnRmKCAnJTA0ZC0lMDJkLSUwMmQnLCAkRW5kRGF0ZVllYXIsICRFbmREYXRlTW9udGgsICRFbmREYXRlRGF5ICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkRm9ybURhdGF7RW5kRGF0ZX0gPSAnJzsKICAgIH0KCiAgICAjIEJ1aWxkIHNjaGVkdWxlIGNvbmZpZwogICAgIyBUaW1lIGlzIG5vdyBmcm9tIEhvdXIvTWludXRlIGRyb3Bkb3ducwogICAgbXkgJFRpbWVIb3VyICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGltZUhvdXInICkgICAvLyA5OwogICAgbXkgJFRpbWVNaW51dGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGltZU1pbnV0ZScgKSAvLyAwOwogICAgbXkgJFRpbWVTdHIgICAgPSBzcHJpbnRmKCAnJTAyZDolMDJkJywgJFRpbWVIb3VyLCAkVGltZU1pbnV0ZSApOwoKICAgIG15ICVTY2hlZHVsZUNvbmZpZyA9ICgKICAgICAgICB0aW1lICAgICA9PiAkVGltZVN0ciwKICAgICAgICB0aW1lem9uZSA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGltZXpvbmUnICkgfHwgJ0V1cm9wZS9CZXJsaW4nLAogICAgKTsKCiAgICBteSAkU2NoZWR1bGVUeXBlID0gJEZvcm1EYXRhe1NjaGVkdWxlVHlwZX07CgogICAgaWYgKCAkU2NoZWR1bGVUeXBlIGVxICd3ZWVrbHknICkgewogICAgICAgIG15IEBXZWVrZGF5cyA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdXZWVrZGF5cycgKTsKICAgICAgICAkU2NoZWR1bGVDb25maWd7d2Vla2RheXN9ID0gXEBXZWVrZGF5czsKICAgIH0KICAgIGVsc2lmICggJFNjaGVkdWxlVHlwZSBlcSAnbW9udGhseV9kYXknICkgewogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tkYXl9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0RheScgKSB8fCAxOwogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdtb250aGx5X3dlZWtkYXknICkgewogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tudGh9ICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOdGgnICkgfHwgMTsKICAgICAgICAkU2NoZWR1bGVDb25maWd7d2Vla2RheX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnV2Vla2RheScgKSB8fCAxOwogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdtb250aGx5X3dlZWtkYXlfb2Zmc2V0JyApIHsKICAgICAgICAkU2NoZWR1bGVDb25maWd7bnRofSAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ050aCcgKSB8fCAxOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3t3ZWVrZGF5fSAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnV2Vla2RheScgKSB8fCAxOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tvZmZzZXRfZGF5c30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT2Zmc2V0RGF5cycgKSB8fCAwOwogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICd5ZWFybHknICkgewogICAgICAgICRTY2hlZHVsZUNvbmZpZ3ttb250aH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTW9udGgnICkgfHwgMTsKICAgICAgICAkU2NoZWR1bGVDb25maWd7ZGF5fSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0RheScgKSB8fCAxOwogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdpbnRlcnZhbCcgKSB7CiAgICAgICAgJFNjaGVkdWxlQ29uZmlne2ludGVydmFsfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbnRlcnZhbCcgKSB8fCA3OwoKICAgICAgICAjIFN0YXJ0RGF0ZSBpcyBhIHJlcXVpcmVkIGZpZWxkIGZvciBpbnRlcnZhbCBzY2hlZHVsZXMgKG5vIGNoZWNrYm94KQogICAgICAgIG15ICRTdGFydERhdGVZZWFyICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydERhdGVZZWFyJyApOwogICAgICAgIG15ICRTdGFydERhdGVNb250aCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydERhdGVNb250aCcgKTsKICAgICAgICBteSAkU3RhcnREYXRlRGF5ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnREYXRlRGF5JyApOwoKICAgICAgICBpZiAoICRTdGFydERhdGVZZWFyICYmICRTdGFydERhdGVNb250aCAmJiAkU3RhcnREYXRlRGF5ICkgewogICAgICAgICAgICAkU2NoZWR1bGVDb25maWd7c3RhcnRfZGF0ZX0gPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgJyUwNGQtJTAyZC0lMDJkJywKICAgICAgICAgICAgICAgICRTdGFydERhdGVZZWFyLCAkU3RhcnREYXRlTW9udGgsICRTdGFydERhdGVEYXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgRGVmYXVsdCB0byB0b2RheSBpZiBub3QgcHJvdmlkZWQKICAgICAgICAgICAgbXkgJE5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwogICAgICAgICAgICBteSAkR2V0ID0gJE5vdy0+R2V0KCk7CiAgICAgICAgICAgICRTY2hlZHVsZUNvbmZpZ3tzdGFydF9kYXRlfSA9IHNwcmludGYoCiAgICAgICAgICAgICAgICAnJTA0ZC0lMDJkLSUwMmQnLAogICAgICAgICAgICAgICAgJEdldC0+e1llYXJ9LCAkR2V0LT57TW9udGh9LCAkR2V0LT57RGF5fQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkRm9ybURhdGF7U2NoZWR1bGVDb25maWd9ID0gXCVTY2hlZHVsZUNvbmZpZzsKCiAgICAjIENvbGxlY3QgQWN0aXZpdHkgRGlhbG9nIGRhdGEgZnJvbSBmb3JtCiAgICAjIFRoZSBmaWVsZHMgYXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCwgc28gd2UgbmVlZCB0byBjb2xsZWN0IGFsbCBBY3Rpdml0eURpYWxvZ18qIGFuZCBEeW5hbWljRmllbGRfKiBwYXJhbWV0ZXJzCiAgICAjIE5PVEU6IER5bmFtaWNGaWVsZCBkcml2ZXJzIGRvbid0IHN1cHBvcnQgdGhlIFByZWZpeCBwYXJhbWV0ZXIgZm9yIGZpZWxkIG5hbWVzLCBzbyBEeW5hbWljRmllbGRzCiAgICAjIGFyZSBzdWJtaXR0ZWQgYXMgRHluYW1pY0ZpZWxkXyogaW5zdGVhZCBvZiBBY3Rpdml0eURpYWxvZ19EeW5hbWljRmllbGRfKi4gV2UgbmVlZCB0byBoYW5kbGUgYm90aC4KICAgICMgSGFuZGxlIG11bHRpLWZpZWxkIGRhdGUgZm9ybWF0IGZyb20gWm51bnkncyBCdWlsZERhdGVTZWxlY3Rpb24gKFVzZWQvWWVhci9Nb250aC9EYXkvSG91ci9NaW51dGUpCiAgICBteSAlQWN0aXZpdHlEaWFsb2dEYXRhOwogICAgbXkgJURhdGVGaWVsZENvbXBvbmVudHM7ICAjIFRyYWNrIGRhdGUgZmllbGQgY29tcG9uZW50cyBmb3IgbGF0ZXIgY29udmVyc2lvbgogICAgbXkgQFBhcmFtTmFtZXMgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtTmFtZXMoKTsKCiAgICAjIEZpcnN0IHBhc3M6IGNvbGxlY3QgYWxsIHBvdGVudGlhbCBkYXRlIGZpZWxkIGNvbXBvbmVudHMKICAgICMgQ2hlY2sgZm9yIGJvdGggQWN0aXZpdHlEaWFsb2dfKiAoc3RhbmRhcmQgZmllbGRzKSBhbmQgRHluYW1pY0ZpZWxkXyogKER5bmFtaWNGaWVsZHMgLSBkdWUgdG8gZHJpdmVyIGxpbWl0YXRpb24pCiAgICBmb3IgbXkgJFBhcmFtTmFtZSAoQFBhcmFtTmFtZXMpIHsKICAgICAgICBteSAkRmllbGROYW1lOwoKICAgICAgICAjIEFjdGl2aXR5RGlhbG9nXyogcGFyYW1ldGVycyAoc3RhbmRhcmQgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcykKICAgICAgICBpZiAoICRQYXJhbU5hbWUgPX4gL15BY3Rpdml0eURpYWxvZ18oLispJC8gKSB7CiAgICAgICAgICAgICRGaWVsZE5hbWUgPSAkMTsKICAgICAgICB9CiAgICAgICAgIyBEeW5hbWljRmllbGRfKiBwYXJhbWV0ZXJzIChEeW5hbWljRmllbGRzIGRvbid0IHVzZSB0aGUgQWN0aXZpdHlEaWFsb2dfIHByZWZpeCBkdWUgdG8gZHJpdmVyIGxpbWl0YXRpb24pCiAgICAgICAgZWxzaWYgKCAkUGFyYW1OYW1lID1+IC9eKER5bmFtaWNGaWVsZF8uKykkLyApIHsKICAgICAgICAgICAgJEZpZWxkTmFtZSA9ICQxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgaWYgdGhpcyBsb29rcyBsaWtlIGEgZGF0ZSBmaWVsZCBjb21wb25lbnQgKFVzZWQsIFllYXIsIE1vbnRoLCBEYXksIEhvdXIsIE1pbnV0ZSkKICAgICAgICBpZiAoICRGaWVsZE5hbWUgPX4gL14oLis/KShVc2VkfFllYXJ8TW9udGh8RGF5fEhvdXJ8TWludXRlKSQvICkgewogICAgICAgICAgICBteSAkQmFzZUZpZWxkID0gJDE7CiAgICAgICAgICAgIG15ICRDb21wb25lbnQgPSAkMjsKICAgICAgICAgICAgJERhdGVGaWVsZENvbXBvbmVudHN7JEJhc2VGaWVsZH17JENvbXBvbmVudH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIFJlZ3VsYXIgZmllbGQgKGRlZmluaXRlbHkgbm90IGEgZGF0ZSBjb21wb25lbnQpCiAgICAgICAgICAgIG15IEBWYWx1ZXMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICAgICAgICAgICMgU3RvcmUgYXMgc2luZ2xlIHZhbHVlIGlmIG9ubHkgb25lLCBvdGhlcndpc2UgYXMgYXJyYXkKICAgICAgICAgICAgJEFjdGl2aXR5RGlhbG9nRGF0YXskRmllbGROYW1lfSA9IHNjYWxhciBAVmFsdWVzID09IDEgPyAkVmFsdWVzWzBdIDogXEBWYWx1ZXM7CiAgICAgICAgfQogICAgfQoKICAgICMgU2Vjb25kIHBhc3M6IGRldGVybWluZSB3aGljaCBjb2xsZWN0ZWQgY29tcG9uZW50cyBhcmUgYWN0dWFsIGRhdGUgZmllbGRzCiAgICAjIEEgdmFsaWQgZGF0ZSBmaWVsZCBtdXN0IGhhdmUgYXQgbGVhc3QgWWVhciwgTW9udGgsIERheQogICAgbXkgJVZhbGlkRGF0ZUZpZWxkczsKICAgIGZvciBteSAkQmFzZUZpZWxkICgga2V5cyAlRGF0ZUZpZWxkQ29tcG9uZW50cyApIHsKICAgICAgICBteSAkQ29tcG9uZW50cyA9ICREYXRlRmllbGRDb21wb25lbnRzeyRCYXNlRmllbGR9OwogICAgICAgIGlmICggJENvbXBvbmVudHMtPntZZWFyfSAmJiAkQ29tcG9uZW50cy0+e01vbnRofSAmJiAkQ29tcG9uZW50cy0+e0RheX0gKSB7CiAgICAgICAgICAgICMgVGhpcyBpcyBhIHZhbGlkIGRhdGUgZmllbGQsIG1hcmsgaXQKICAgICAgICAgICAgJFZhbGlkRGF0ZUZpZWxkc3skQmFzZUZpZWxkfSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIE5vdCBhIHZhbGlkIGRhdGUgZmllbGQgLSB0aGVzZSBhcmUgcmVndWxhciBmaWVsZHMgd2l0aCBuYW1lcyBlbmRpbmcgaW4gWWVhci9Nb250aC9ldGMKICAgICAgICAgICAgZm9yIG15ICRDb21wb25lbnQgKCBrZXlzICV7JENvbXBvbmVudHN9ICkgewogICAgICAgICAgICAgICAgbXkgJEZ1bGxGaWVsZE5hbWUgPSAkQmFzZUZpZWxkIC4gJENvbXBvbmVudDsKICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZ0RhdGF7JEZ1bGxGaWVsZE5hbWV9ID0gJENvbXBvbmVudHMtPnskQ29tcG9uZW50fTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIFJlbW92ZSBpbnZhbGlkIGRhdGUgZmllbGQgZW50cmllcyAoa2VlcCBvbmx5IHZhbGlkIG9uZXMpCiAgICBmb3IgbXkgJEJhc2VGaWVsZCAoIGtleXMgJURhdGVGaWVsZENvbXBvbmVudHMgKSB7CiAgICAgICAgaWYgKCAhJFZhbGlkRGF0ZUZpZWxkc3skQmFzZUZpZWxkfSApIHsKICAgICAgICAgICAgZGVsZXRlICREYXRlRmllbGRDb21wb25lbnRzeyRCYXNlRmllbGR9OwogICAgICAgIH0KICAgIH0KCiAgICAjIENvbnZlcnQgZGF0ZSBmaWVsZCBjb21wb25lbnRzIHRvIElTTyBmb3JtYXQgZm9yIHN0b3JhZ2UKICAgIGZvciBteSAkQmFzZUZpZWxkICgga2V5cyAlRGF0ZUZpZWxkQ29tcG9uZW50cyApIHsKICAgICAgICBteSAkQ29tcG9uZW50cyA9ICREYXRlRmllbGRDb21wb25lbnRzeyRCYXNlRmllbGR9OwoKICAgICAgICAjIE9ubHkgc3RvcmUgaWYgdGhlICJVc2VkIiBjaGVja2JveCBpcyBjaGVja2VkIChvciBpZiBubyBVc2VkIGNoZWNrYm94IGV4aXN0cywgY2hlY2sgZm9yIFllYXIpCiAgICAgICAgbXkgJElzVXNlZCA9ICRDb21wb25lbnRzLT57VXNlZH0gLy8gKCAkQ29tcG9uZW50cy0+e1llYXJ9ID8gMSA6IDAgKTsKCiAgICAgICAgaWYgKCRJc1VzZWQpIHsKICAgICAgICAgICAgbXkgJFllYXIgICA9ICRDb21wb25lbnRzLT57WWVhcn0gICB8fCAwOwogICAgICAgICAgICBteSAkTW9udGggID0gJENvbXBvbmVudHMtPntNb250aH0gIHx8IDA7CiAgICAgICAgICAgIG15ICREYXkgICAgPSAkQ29tcG9uZW50cy0+e0RheX0gICAgfHwgMDsKICAgICAgICAgICAgbXkgJEhvdXIgICA9ICRDb21wb25lbnRzLT57SG91cn0gICAvLyAwOwogICAgICAgICAgICBteSAkTWludXRlID0gJENvbXBvbmVudHMtPntNaW51dGV9IC8vIDA7CgogICAgICAgICAgICAjIEJ1aWxkIElTTyBkYXRldGltZSBzdHJpbmcKICAgICAgICAgICAgIyBJTVBPUlRBTlQ6IEFsd2F5cyBpbmNsdWRlIHRpbWUgY29tcG9uZW50IChldmVuIGZvciBEYXRlLW9ubHkgZmllbGRzKQogICAgICAgICAgICAjIGJlY2F1c2UgdGhlIFpudW55IER5bmFtaWNGaWVsZCBEYXRlIGRyaXZlcidzIEVkaXRGaWVsZFJlbmRlciBleHBlY3RzCiAgICAgICAgICAgICMgdGhlIGZ1bGwgZGF0ZXRpbWUgZm9ybWF0ICdZWVlZLU1NLUREIEhIOk1NOlNTJyBmb3IgdGhlIHJlZ2V4IHRvIG1hdGNoCiAgICAgICAgICAgIGlmICggJFllYXIgJiYgJE1vbnRoICYmICREYXkgKSB7CiAgICAgICAgICAgICAgICBteSAkRGF0ZVZhbHVlID0gc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOjAwJywKICAgICAgICAgICAgICAgICAgICAkWWVhciwgJE1vbnRoLCAkRGF5LCAkSG91ciwgJE1pbnV0ZQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZ0RhdGF7JEJhc2VGaWVsZH0gPSAkRGF0ZVZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgSWYgbm90IHVzZWQvY2hlY2tlZCwgZG9uJ3Qgc3RvcmUgdGhlIGZpZWxkIChlbXB0eSB2YWx1ZSkKICAgIH0KCiAgICAjIEhhbmRsZSBDdXN0b21lciBmaWVsZHM6IFNlbGVjdGVkQ3VzdG9tZXJVc2VyIGlzIHRoZSBhY3R1YWwgY3VzdG9tZXIgbG9naW4KICAgICMgTWFwIGl0IHRvIEN1c3RvbWVyVXNlcklEIGZvciBjb25zaXN0ZW5jeSB3aXRoIHN0YW5kYXJkIFpudW55IGJlaGF2aW9yCiAgICBpZiAoICRBY3Rpdml0eURpYWxvZ0RhdGF7U2VsZWN0ZWRDdXN0b21lclVzZXJ9ICkgewogICAgICAgICRBY3Rpdml0eURpYWxvZ0RhdGF7Q3VzdG9tZXJVc2VySUR9ID0gJEFjdGl2aXR5RGlhbG9nRGF0YXtTZWxlY3RlZEN1c3RvbWVyVXNlcn07CgogICAgICAgICMgSWYgQ3VzdG9tZXJJRF9DdXN0b21lclVzZXIgd2FzIHN1Ym1pdHRlZCAoZGlzcGxheSBmaWVsZCksIHJlbW92ZSBpdAogICAgICAgIGRlbGV0ZSAkQWN0aXZpdHlEaWFsb2dEYXRhe0N1c3RvbWVySURfQ3VzdG9tZXJVc2VyfTsKICAgICAgICBkZWxldGUgJEFjdGl2aXR5RGlhbG9nRGF0YXtDdXN0b21lclVzZXJJRF9EaXNwbGF5fTsKICAgIH0KCiAgICAkRm9ybURhdGF7QWN0aXZpdHlEaWFsb2dEYXRhfSA9IFwlQWN0aXZpdHlEaWFsb2dEYXRhOwoKICAgICMgVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzCiAgICBteSBARXJyb3JzOwogICAgbXkgJUZpZWxkRXJyb3JzOyAgIyBGb3IgZmllbGQtc3BlY2lmaWMgZXJyb3IgbWFya2luZwoKICAgIGlmICggISRGb3JtRGF0YXtOYW1lfSApIHsKICAgICAgICBwdXNoIEBFcnJvcnMsICdOYW1lIGlzIHJlcXVpcmVkLic7CiAgICAgICAgJEZpZWxkRXJyb3Jze05hbWV9ID0gMTsKICAgIH0KICAgIGlmICggISRGb3JtRGF0YXtQcm9jZXNzSUR9ICkgewogICAgICAgIHB1c2ggQEVycm9ycywgJ1Byb2Nlc3MgaXMgcmVxdWlyZWQuJzsKICAgICAgICAkRmllbGRFcnJvcnN7UHJvY2Vzc0VudGl0eUlEfSA9IDE7CiAgICB9CgogICAgIyBWYWxpZGF0ZSBBY3Rpdml0eSBEaWFsb2cgbWFuZGF0b3J5IGZpZWxkcyAoaWYgcHJvY2VzcyBpcyBzZWxlY3RlZCkKICAgIGlmICggJEZvcm1EYXRhe1Byb2Nlc3NJRH0gKSB7CiAgICAgICAgbXkgJEFjdGl2aXR5RGlhbG9nRXJyb3JzID0gJFNlbGYtPl9WYWxpZGF0ZUFjdGl2aXR5RGlhbG9nRmllbGRzKAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgICAgPT4gJEZvcm1EYXRhe1Byb2Nlc3NJRH0sCiAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRGF0YSA9PiBcJUFjdGl2aXR5RGlhbG9nRGF0YSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRBY3Rpdml0eURpYWxvZ0Vycm9ycyAmJiBAeyRBY3Rpdml0eURpYWxvZ0Vycm9yc30gKSB7CiAgICAgICAgICAgIGZvciBteSAkRXJyb3IgKCBAeyRBY3Rpdml0eURpYWxvZ0Vycm9yc30gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBFcnJvcnMsICRFcnJvci0+e01lc3NhZ2V9OwogICAgICAgICAgICAgICAgJEZpZWxkRXJyb3JzeyAnQWN0aXZpdHlEaWFsb2dfJyAuICRFcnJvci0+e0ZpZWxkTmFtZX0gfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKEBFcnJvcnMpIHsKICAgICAgICAjIFJldHVybiB3aXRoIGVycm9ycyAtIHNob3cgZm9ybSBhZ2FpbgogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dGb3JtKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEVycm9ycyAgICAgID0+IFxARXJyb3JzLAogICAgICAgICAgICBGaWVsZEVycm9ycyA9PiBcJUZpZWxkRXJyb3JzLAogICAgICAgICAgICBHZXRQYXJhbSAgICA9PiBcJUZvcm1EYXRhLAogICAgICAgICk7CiAgICB9CgogICAgIyBTYXZlIHNjaGVkdWxlCiAgICBteSAkU3VjY2VzczsKICAgIGlmICgkU2NoZWR1bGVySUQpIHsKICAgICAgICAjIFVwZGF0ZSBleGlzdGluZwogICAgICAgICRTdWNjZXNzID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyVXBkYXRlKAogICAgICAgICAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgJUZvcm1EYXRhLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIENyZWF0ZSBuZXcKICAgICAgICAkU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICVGb3JtRGF0YSwKICAgICAgICApOwogICAgICAgICRTdWNjZXNzID0gJFNjaGVkdWxlcklEID8gMSA6IDA7CiAgICB9CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdGYWlsZWQgdG8gc2F2ZSBwcm9jZXNzIHNjaGVkdWxlLicsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjaGVjayB5b3VyIGlucHV0IGFuZCB0cnkgYWdhaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgUmVkaXJlY3QgdG8gbGlzdAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXIiLAogICAgKTsKfQoKPWhlYWQyIF9IYXNSV1Blcm1pc3Npb24oKQoKQ2hlY2sgaWYgY3VycmVudCB1c2VyIGhhcyBSVyBwZXJtaXNzaW9uIGZvciB0aWNrZXQgc2NoZWR1bGluZy4KCj1jdXQKCnN1YiBfSGFzUldQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgIyBDaGVjayBmb3IgVGlja2V0U2NoZWR1bGVyQWRtaW4gZ3JvdXAgKGZ1bGwgYWNjZXNzKQogICAgbXkgJEFkbWluSGFzUlcgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25DaGVjaygKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEdyb3VwTmFtZSA9PiAnVGlja2V0U2NoZWR1bGVyQWRtaW4nLAogICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgKTsKCiAgICByZXR1cm4gMSBpZiAkQWRtaW5IYXNSVzsKCiAgICAjIENoZWNrIGZvciBUaWNrZXRTY2hlZHVsZXJNYW5hZ2VyIGdyb3VwCiAgICBteSAkTWFuYWdlckhhc1JXID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBHcm91cE5hbWUgPT4gJ1RpY2tldFNjaGVkdWxlck1hbmFnZXInLAogICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgKTsKCiAgICByZXR1cm4gJE1hbmFnZXJIYXNSVyA/IDEgOiAwOwp9Cgo9aGVhZDIgX1ZhbGlkYXRlQWN0aXZpdHlEaWFsb2dGaWVsZHMoKQoKVmFsaWRhdGUgbWFuZGF0b3J5IEFjdGl2aXR5IERpYWxvZyBmaWVsZHMuCgpSZXR1cm5zIGFuIGFycmF5IHJlZmVyZW5jZSBvZiBlcnJvcnMsIGVhY2ggZXJyb3IgYmVpbmcgYSBoYXNocmVmIHdpdGg6Ci0gRmllbGROYW1lOiBUaGUgZmllbGQgbmFtZSB0aGF0IGZhaWxlZCB2YWxpZGF0aW9uCi0gTWVzc2FnZTogVGhlIGVycm9yIG1lc3NhZ2UKCj1jdXQKCnN1YiBfVmFsaWRhdGVBY3Rpdml0eURpYWxvZ0ZpZWxkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBFcnJvcnM7CgogICAgIyBDaGVjayByZXF1aXJlZCBwYXJhbWV0ZXJzCiAgICByZXR1cm4gXEBFcnJvcnMgaWYgISRQYXJhbXtQcm9jZXNzRW50aXR5SUR9OwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQcm9jZXNzT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycpOwogICAgbXkgJEFjdGl2aXR5RGlhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpOwoKICAgICMgR2V0IHRoZSBwcm9jZXNzIGNvbmZpZ3VyYXRpb24KICAgIG15ICRQcm9jZXNzID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NHZXQoCiAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgKTsKCiAgICByZXR1cm4gXEBFcnJvcnMgaWYgISRQcm9jZXNzIHx8ICEkUHJvY2Vzcy0+e1N0YXJ0QWN0aXZpdHl9OwoKICAgICMgR2V0IHRoZSBzdGFydCBhY3Rpdml0eQogICAgbXkgJEFjdGl2aXR5T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eScpOwogICAgbXkgJEFjdGl2aXR5ID0gJEFjdGl2aXR5T2JqZWN0LT5BY3Rpdml0eUdldCgKICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICRQcm9jZXNzLT57U3RhcnRBY3Rpdml0eX0sCiAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiBbJ0FnZW50SW50ZXJmYWNlJ10sCiAgICApOwoKICAgIHJldHVybiBcQEVycm9ycyBpZiAhJEFjdGl2aXR5IHx8ICEkQWN0aXZpdHktPntBY3Rpdml0eURpYWxvZ30gfHwgcmVmICRBY3Rpdml0eS0+e0FjdGl2aXR5RGlhbG9nfSBuZSAnQVJSQVknOwoKICAgICMgRmluZCB0aGUgZmlyc3QgQWN0aXZpdHkgRGlhbG9nIHRoYXQncyBhY2Nlc3NpYmxlIHZpYSBBZ2VudEludGVyZmFjZQogICAgbXkgJFN0YXJ0QWN0aXZpdHlEaWFsb2dFbnRpdHlJRDsKICAgIERJQUxPR0lEOgogICAgZm9yIG15ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEICggQHsgJEFjdGl2aXR5LT57QWN0aXZpdHlEaWFsb2d9IH0gKSB7CiAgICAgICAgbXkgJEFjdGl2aXR5RGlhbG9nID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgICk7CgogICAgICAgIGlmICggJEFjdGl2aXR5RGlhbG9nICYmICV7JEFjdGl2aXR5RGlhbG9nfSApIHsKICAgICAgICAgICAgJFN0YXJ0QWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEOwogICAgICAgICAgICBsYXN0IERJQUxPR0lEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBFcnJvcnMgaWYgISRTdGFydEFjdGl2aXR5RGlhbG9nRW50aXR5SUQ7CgogICAgIyBHZXQgdGhlIEFjdGl2aXR5IERpYWxvZyBjb25maWd1cmF0aW9uCiAgICBteSAkQWN0aXZpdHlEaWFsb2cgPSAkQWN0aXZpdHlEaWFsb2dPYmplY3QtPkFjdGl2aXR5RGlhbG9nR2V0KAogICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJFN0YXJ0QWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICApOwoKICAgIHJldHVybiBcQEVycm9ycyBpZiAhJEFjdGl2aXR5RGlhbG9nIHx8ICEkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9OwoKICAgIG15ICVBY3Rpdml0eURpYWxvZ0RhdGEgPSAleyAkUGFyYW17QWN0aXZpdHlEaWFsb2dEYXRhfSB8fCB7fSB9OwoKICAgICMgSXRlcmF0ZSB0aHJvdWdoIGZpZWxkIG9yZGVyIGFuZCB2YWxpZGF0ZSBtYW5kYXRvcnkgZmllbGRzIChEaXNwbGF5ID0gMikKICAgIEZJRUxETkFNRToKICAgIGZvciBteSAkRmllbGROYW1lICggQHsgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRPcmRlcn0gfHwgW10gfSApIHsKICAgICAgICBteSAkRmllbGRDb25maWcgPSAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT57JEZpZWxkTmFtZX07CgogICAgICAgICMgU2tpcCBpZiBub3QgbWFuZGF0b3J5IChEaXNwbGF5ICE9IDIpCiAgICAgICAgbmV4dCBGSUVMRE5BTUUgaWYgISRGaWVsZENvbmZpZyB8fCAkRmllbGRDb25maWctPntEaXNwbGF5fSAhPSAyOwoKICAgICAgICAjIEdldCB0aGUgdmFsdWUgZnJvbSBzdWJtaXR0ZWQgZGF0YQogICAgICAgIG15ICRWYWx1ZSA9ICRBY3Rpdml0eURpYWxvZ0RhdGF7JEZpZWxkTmFtZX07CgogICAgICAgICMgU3BlY2lhbCBoYW5kbGluZyBmb3IgQ3VzdG9tZXJJRCBmaWVsZDoKICAgICAgICAjIEN1c3RvbWVySUQgaXMgY29uc2lkZXJlZCB2YWxpZCBpZiBDdXN0b21lclVzZXJJRCAodmlhIFNlbGVjdGVkQ3VzdG9tZXJVc2VyKSBpcyBzZXQsCiAgICAgICAgIyBzaW5jZSBDdXN0b21lcklEIGlzIGF1dG8tcG9wdWxhdGVkIGZyb20gdGhlIHNlbGVjdGVkIGN1c3RvbWVyIHVzZXIKICAgICAgICBpZiAoICRGaWVsZE5hbWUgZXEgJ0N1c3RvbWVySUQnICkgewogICAgICAgICAgICAjIENoZWNrIGlmIHdlIGhhdmUgYSBDdXN0b21lclVzZXJJRCAoZnJvbSBTZWxlY3RlZEN1c3RvbWVyVXNlcikKICAgICAgICAgICAgbXkgJEN1c3RvbWVyVXNlcklEID0gJEFjdGl2aXR5RGlhbG9nRGF0YXtDdXN0b21lclVzZXJJRH0gfHwgJEFjdGl2aXR5RGlhbG9nRGF0YXtTZWxlY3RlZEN1c3RvbWVyVXNlcn07CiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyVXNlcklEICYmICRDdXN0b21lclVzZXJJRCBuZSAnJyApIHsKICAgICAgICAgICAgICAgICMgQ3VzdG9tZXJVc2VySUQgaXMgc2V0LCBDdXN0b21lcklEIHdpbGwgYmUgZGVyaXZlZCBmcm9tIGl0IC0gc2tpcCB2YWxpZGF0aW9uCiAgICAgICAgICAgICAgICBuZXh0IEZJRUxETkFNRTsKICAgICAgICAgICAgfQogICAgICAgICAgICAjIElmIG5vIEN1c3RvbWVyVXNlcklELCBmYWxsIHRocm91Z2ggdG8gbm9ybWFsIHZhbGlkYXRpb24gb2YgQ3VzdG9tZXJJRAogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBpZiB2YWx1ZSBpcyBlbXB0eQogICAgICAgIG15ICRJc0VtcHR5ID0gMDsKICAgICAgICBpZiAoICFkZWZpbmVkICRWYWx1ZSApIHsKICAgICAgICAgICAgJElzRW1wdHkgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIHJlZiAkVmFsdWUgZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJElzRW1wdHkgPSAxIGlmICFAeyRWYWx1ZX07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFZhbHVlIGVxICcnICkgewogICAgICAgICAgICAkSXNFbXB0eSA9IDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoJElzRW1wdHkpIHsKICAgICAgICAgICAgIyBHZXQgYSBodW1hbi1yZWFkYWJsZSBmaWVsZCBsYWJlbAogICAgICAgICAgICBteSAkRmllbGRMYWJlbCA9ICRGaWVsZENvbmZpZy0+e0xhYmVsfSB8fCAkRmllbGROYW1lOwoKICAgICAgICAgICAgIyBDbGVhbiB1cCBEeW5hbWljRmllbGRfIHByZWZpeCBmb3IgZGlzcGxheQogICAgICAgICAgICBpZiAoICRGaWVsZE5hbWUgPX4gL15EeW5hbWljRmllbGRfKC4rKSQvICkgewogICAgICAgICAgICAgICAgJEZpZWxkTGFiZWwgPSAiRHluYW1pY0ZpZWxkOiAkMSIgaWYgISRGaWVsZENvbmZpZy0+e0xhYmVsfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBGb3IgQ3VzdG9tZXJJRCwgc2hvdyBhIG1vcmUgaGVscGZ1bCBtZXNzYWdlCiAgICAgICAgICAgIGlmICggJEZpZWxkTmFtZSBlcSAnQ3VzdG9tZXJJRCcgKSB7CiAgICAgICAgICAgICAgICAkRmllbGRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3VzdG9tZXIgdXNlcicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBFcnJvcnMsIHsKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSA9PiAkRmllbGROYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICJGaWVsZCAnJEZpZWxkTGFiZWwnIGlzIHJlcXVpcmVkLiIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcQEVycm9yczsKfQoKPWhlYWQyIF9Dcm9uVG9UZXh0KCkKCkNvbnZlcnQgY3JvbiBzY2hlZHVsZSB0byBodW1hbi1yZWFkYWJsZSB0ZXh0LgoKPWN1dAoKc3ViIF9Dcm9uVG9UZXh0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNjaGVkdWxlID0gJFBhcmFte1NjaGVkdWxlfSB8fCAnJzsKCiAgICAjIENvbW1vbiBwYXR0ZXJucwogICAgbXkgJVBhdHRlcm5zID0gKAogICAgICAgICcqICogKiAqIConICAgICA9PiAnZXZlcnkgbWludXRlJywKICAgICAgICAnKi81ICogKiAqIConICAgPT4gJ2V2ZXJ5IDUgbWludXRlcycsCiAgICAgICAgJyovMTAgKiAqICogKicgID0+ICdldmVyeSAxMCBtaW51dGVzJywKICAgICAgICAnKi8xNSAqICogKiAqJyAgPT4gJ2V2ZXJ5IDE1IG1pbnV0ZXMnLAogICAgICAgICcqLzMwICogKiAqIConICA9PiAnZXZlcnkgMzAgbWludXRlcycsCiAgICAgICAgJzAgKiAqICogKicgICAgID0+ICdldmVyeSBob3VyJywKICAgICAgICAnMCAqLzIgKiAqIConICAgPT4gJ2V2ZXJ5IDIgaG91cnMnLAogICAgICAgICcwIDAgKiAqIConICAgICA9PiAnZGFpbHkgYXQgbWlkbmlnaHQnLAogICAgKTsKCiAgICByZXR1cm4gJFBhdHRlcm5zeyRTY2hlZHVsZX0gaWYgJFBhdHRlcm5zeyRTY2hlZHVsZX07CgogICAgIyBQYXJzZSBjcm9uIGV4cHJlc3Npb246IG1pbnV0ZSBob3VyIGRheSBtb250aCB3ZWVrZGF5CiAgICBteSBAUGFydHMgPSBzcGxpdCAvXHMrLywgJFNjaGVkdWxlOwogICAgcmV0dXJuICRTY2hlZHVsZSBpZiBAUGFydHMgIT0gNTsKCiAgICBteSAoICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRXZWVrZGF5ICkgPSBAUGFydHM7CgogICAgIyBTaW1wbGUgY2FzZTogKi9OIG1pbnV0ZXMKICAgIGlmICggJE1pbiA9fiAvXlwqXC8oXGQrKSQvICYmICRIb3VyIGVxICcqJyAmJiAkRGF5IGVxICcqJyAmJiAkTW9udGggZXEgJyonICYmICRXZWVrZGF5IGVxICcqJyApIHsKICAgICAgICByZXR1cm4gImV2ZXJ5ICQxIG1pbnV0ZXMiOwogICAgfQoKICAgICMgU2ltcGxlIGNhc2U6IHNwZWNpZmljIG1pbnV0ZSwgZXZlcnkgaG91cgogICAgaWYgKCAkTWluID1+IC9eXGQrJC8gJiYgJEhvdXIgZXEgJyonICYmICREYXkgZXEgJyonICYmICRNb250aCBlcSAnKicgJiYgJFdlZWtkYXkgZXEgJyonICkgewogICAgICAgIHJldHVybiAiZXZlcnkgaG91ciBhdCBtaW51dGUgJE1pbiI7CiAgICB9CgogICAgIyBSZXR1cm4gcmF3IHNjaGVkdWxlIGlmIHdlIGNhbid0IHBhcnNlIGl0IG5pY2VseQogICAgcmV0dXJuICRTY2hlZHVsZTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBUaWNrZXRTY2hlZHVsZXIgcGFja2FnZSBmb3IgWm51bnkuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==</File>
        <File Permission="660" Location="Kernel/Modules/AgentTicketSchedulerAJAX.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRTY2hlZHVsZXJBSkFYOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRTY2hlZHVsZXJBSkFYIC0gQUpBWCBoYW5kbGVyIGZvciBUaWNrZXRTY2hlZHVsZXIKCj1oZWFkMSBERVNDUklQVElPTgoKVGhpcyBtb2R1bGUgaGFuZGxlcyBBSkFYIHJlcXVlc3RzIGZvciB0aGUgVGlja2V0U2NoZWR1bGVyLgoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBQZXJtaXNzaW9uIGNoZWNrOiB1c2VyIG11c3QgYmUgaW4gVGlja2V0U2NoZWR1bGVyTWFuYWdlciAoUk8pIG9yIFRpY2tldFNjaGVkdWxlckFkbWluIChSVykKICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwogICAgbXkgJEhhc1Blcm1pc3Npb24gPSAwOwogICAgZm9yIG15ICRHcm91cCAoICdUaWNrZXRTY2hlZHVsZXJNYW5hZ2VyJywgJ1RpY2tldFNjaGVkdWxlckFkbWluJyApIHsKICAgICAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoIEdyb3VwID0+ICRHcm91cCApOwogICAgICAgIG5leHQgaWYgISRHcm91cElEOwogICAgICAgICRIYXNQZXJtaXNzaW9uID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkR3JvdXAsCiAgICAgICAgICAgIFR5cGUgICAgICA9PiAncm8nLAogICAgICAgICk7CiAgICAgICAgbGFzdCBpZiAkSGFzUGVybWlzc2lvbjsKICAgIH0KICAgIGlmICggISRIYXNQZXJtaXNzaW9uICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICd7ImVycm9yIjoiTm8gcGVybWlzc2lvbiJ9JywKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkU3ViYWN0aW9uID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKSB8fCAnJzsKCiAgICBpZiAoICRTdWJhY3Rpb24gZXEgJ0dldE5leHRFeGVjdXRpb25zJyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPl9HZXROZXh0RXhlY3V0aW9ucygpOwogICAgfQogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICdHZXRIaXN0b3J5JyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPl9HZXRIaXN0b3J5KCk7CiAgICB9CiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgJ1ByZXZpZXdTY2hlZHVsZScgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fUHJldmlld1NjaGVkdWxlKCk7CiAgICB9CiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgJ0dldENoZWNrbGlzdFRlbXBsYXRlcycgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fR2V0Q2hlY2tsaXN0VGVtcGxhdGVzKCk7CiAgICB9CiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgJ0dldFJlbmRlcmVkQWN0aXZpdHlEaWFsb2dGaWVsZHMnICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0dldFJlbmRlcmVkQWN0aXZpdHlEaWFsb2dGaWVsZHMoKTsKICAgIH0KCiAgICAjIERlZmF1bHQ6IGVtcHR5IHJlc3BvbnNlCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgQ29udGVudCAgICAgPT4gJ3t9JywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgKTsKfQoKPWhlYWQyIF9HZXROZXh0RXhlY3V0aW9ucygpCgpHZXQgbmV4dCBzY2hlZHVsZWQgZXhlY3V0aW9uIHRpbWVzIGZvciBhIHNjaGVkdWxlLgoKPWN1dAoKc3ViIF9HZXROZXh0RXhlY3V0aW9ucyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFRpY2tldFNjaGVkdWxlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXInKTsKCiAgICBteSAkU2NoZWR1bGVySUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NoZWR1bGVySUQnICk7CgogICAgaWYgKCAhJFNjaGVkdWxlcklEIHx8ICRTY2hlZHVsZXJJRCAhfiAvXlxkKyQvICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSggeyBlcnJvciA9PiAnSW52YWxpZCBTY2hlZHVsZXJJRCcgfSApOwogICAgfQoKICAgIG15IEBFeGVjdXRpb25zID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+R2V0TmV4dEV4ZWN1dGlvbnMoCiAgICAgICAgU2NoZWR1bGVySUQgPT4gJFNjaGVkdWxlcklELAogICAgICAgIENvdW50ICAgICAgID0+IDUsCiAgICApOwoKICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSggeyBleGVjdXRpb25zID0+IFxARXhlY3V0aW9ucyB9ICk7Cn0KCj1oZWFkMiBfR2V0SGlzdG9yeSgpCgpHZXQgZXhlY3V0aW9uIGhpc3RvcnkgZm9yIGEgc2NoZWR1bGUuCgo9Y3V0CgpzdWIgX0dldEhpc3RvcnkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFRpY2tldFNjaGVkdWxlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXInKTsKICAgIG15ICRUaWNrZXRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkVXNlck9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICBteSAkU2NoZWR1bGVySUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2NoZWR1bGVySUQnICk7CgogICAgaWYgKCAhJFNjaGVkdWxlcklEIHx8ICRTY2hlZHVsZXJJRCAhfiAvXlxkKyQvICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSggeyBlcnJvciA9PiAnSW52YWxpZCBTY2hlZHVsZXJJRCcgfSApOwogICAgfQoKICAgICMgR2V0IHVzZXIgdGltZXpvbmUgZnJvbSBwcmVmZXJlbmNlcwogICAgbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9ICk7CiAgICBteSAkVXNlclRpbWV6b25lID0gJFVzZXJEYXRhe1VzZXJUaW1lWm9uZX0gfHwgJ1VUQyc7CgogICAgIyBHZXQgc2NoZWR1bGUgdG8ga25vdyB0b3RhbCBleGVjdXRpb24gY291bnQKICAgIG15ICVTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgICAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQsCiAgICApOwoKICAgIG15ICRUb3RhbEV4ZWN1dGlvbnMgPSAkU2NoZWR1bGV7RXhlY3V0aW9uQ291bnR9IHx8IDA7CgogICAgbXkgQEhpc3RvcnkgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5IaXN0b3J5TGlzdCgKICAgICAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQsCiAgICApOwoKICAgICMgRm9ybWF0IGZvciBKU09OIGFuZCBmZXRjaCB0aWNrZXQgbnVtYmVycyBhbmQgdGl0bGVzCiAgICAjIEhpc3RvcnkgaXMgb3JkZXJlZCBuZXdlc3QgZmlyc3QsIHNvIGNhbGN1bGF0ZSBydW4gbnVtYmVyOgogICAgIyBJbmRleCAwID0gVG90YWxFeGVjdXRpb25zIChtb3N0IHJlY2VudCksIEluZGV4IDEgPSBUb3RhbEV4ZWN1dGlvbnMgLSAxLCBldGMuCiAgICBteSBARm9ybWF0dGVkSGlzdG9yeTsKICAgIG15ICRJbmRleCA9IDA7CiAgICBmb3IgbXkgJEVudHJ5IChASGlzdG9yeSkgewogICAgICAgIG15ICRUaWNrZXROdW1iZXIgPSAnJzsKICAgICAgICBteSAkVGlja2V0VGl0bGUgID0gJyc7CgogICAgICAgIGlmICggJEVudHJ5LT57VGlja2V0SUR9ICYmICRFbnRyeS0+e1RpY2tldElEfSA+IDAgKSB7CiAgICAgICAgICAgICRUaWNrZXROdW1iZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkRW50cnktPntUaWNrZXRJRH0sCiAgICAgICAgICAgICkgfHwgJyc7CgogICAgICAgICAgICAjIEdldCB0aWNrZXQgdGl0bGUKICAgICAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRFbnRyeS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFRpY2tldFRpdGxlID0gJFRpY2tldHtUaXRsZX0gfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIENhbGN1bGF0ZSBydW4gbnVtYmVyICgxID0gZmlyc3QgcnVuIGV2ZXIpCiAgICAgICAgbXkgJFJ1bk51bWJlciA9ICRUb3RhbEV4ZWN1dGlvbnMgLSAkSW5kZXg7CgogICAgICAgICMgQ29udmVydCBleGVjdXRpb24gdGltZSBmcm9tIFVUQyB0byB1c2VyIHRpbWV6b25lCiAgICAgICAgbXkgJEV4ZWN1dGlvblRpbWVEaXNwbGF5ID0gJEVudHJ5LT57RXhlY3V0aW9uVGltZX0gfHwgJyc7CiAgICAgICAgaWYgKCRFeGVjdXRpb25UaW1lRGlzcGxheSkgewogICAgICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICRFeGVjdXRpb25UaW1lRGlzcGxheSwKICAgICAgICAgICAgICAgICAgICBUaW1lWm9uZSA9PiAnVVRDJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkRGF0ZVRpbWVPYmplY3QpIHsKICAgICAgICAgICAgICAgICREYXRlVGltZU9iamVjdC0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFVzZXJUaW1lem9uZSApOwogICAgICAgICAgICAgICAgbXkgJEdldCA9ICREYXRlVGltZU9iamVjdC0+R2V0KCk7CiAgICAgICAgICAgICAgICAkRXhlY3V0aW9uVGltZURpc3BsYXkgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICclMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCcsCiAgICAgICAgICAgICAgICAgICAgJEdldC0+e1llYXJ9LCAkR2V0LT57TW9udGh9LCAkR2V0LT57RGF5fSwKICAgICAgICAgICAgICAgICAgICAkR2V0LT57SG91cn0sICRHZXQtPntNaW51dGV9LCAkR2V0LT57U2Vjb25kfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcHVzaCBARm9ybWF0dGVkSGlzdG9yeSwgewogICAgICAgICAgICBpZCAgICAgICAgICAgID0+ICRFbnRyeS0+e0lEfSwKICAgICAgICAgICAgcnVuTnVtYmVyICAgICA9PiAkUnVuTnVtYmVyLAogICAgICAgICAgICB0aWNrZXRJRCAgICAgID0+ICRFbnRyeS0+e1RpY2tldElEfSwKICAgICAgICAgICAgdGlja2V0TnVtYmVyICA9PiAkVGlja2V0TnVtYmVyLAogICAgICAgICAgICB0aWNrZXRUaXRsZSAgID0+ICRUaWNrZXRUaXRsZSwKICAgICAgICAgICAgZXhlY3V0aW9uVGltZSA9PiAkRXhlY3V0aW9uVGltZURpc3BsYXksCiAgICAgICAgICAgIHN1Y2Nlc3MgICAgICAgPT4gJEVudHJ5LT57U3VjY2Vzc30gPyAxIDogMCwKICAgICAgICAgICAgZXJyb3JNZXNzYWdlICA9PiAkRW50cnktPntFcnJvck1lc3NhZ2V9IHx8ICcnLAogICAgICAgIH07CgogICAgICAgICRJbmRleCsrOwogICAgfQoKICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSggeyBoaXN0b3J5ID0+IFxARm9ybWF0dGVkSGlzdG9yeSB9ICk7Cn0KCj1oZWFkMiBfUHJldmlld1NjaGVkdWxlKCkKCkNhbGN1bGF0ZSBwcmV2aWV3IG9mIG5leHQgZXhlY3V0aW9ucyBiYXNlZCBvbiBmb3JtIGRhdGEuCgo9Y3V0CgpzdWIgX1ByZXZpZXdTY2hlZHVsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcicpOwoKICAgICMgR2V0IHNjaGVkdWxlIGNvbmZpZ3VyYXRpb24gZnJvbSBmb3JtCiAgICBteSAkU2NoZWR1bGVUeXBlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NjaGVkdWxlVHlwZScgKSB8fCAnZGFpbHknOwogICAgbXkgJFRpbWV6b25lICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaW1lem9uZScgKSB8fCAnRXVyb3BlL0Jlcmxpbic7CiAgICBteSAkRW5kVHlwZSAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VuZFR5cGUnICkgfHwgJ25ldmVyJzsKICAgIG15ICRNYXhPY2N1cnJlbmNlcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdNYXhPY2N1cnJlbmNlcycgKTsKCiAgICAjIEVuZERhdGUgaXMgbm93IGZyb20gWm51bnkncyBCdWlsZERhdGVTZWxlY3Rpb24gKG11bHRpLWZpZWxkIGZvcm1hdCkKICAgIG15ICRFbmREYXRlVXNlZCAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRW5kRGF0ZVVzZWQnICk7CiAgICBteSAkRW5kRGF0ZVllYXIgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VuZERhdGVZZWFyJyApOwogICAgbXkgJEVuZERhdGVNb250aCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbmREYXRlTW9udGgnICk7CiAgICBteSAkRW5kRGF0ZURheSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VuZERhdGVEYXknICk7CgogICAgbXkgJEVuZERhdGU7CiAgICBpZiAoICRFbmREYXRlVXNlZCAmJiAkRW5kRGF0ZVllYXIgJiYgJEVuZERhdGVNb250aCAmJiAkRW5kRGF0ZURheSApIHsKICAgICAgICAkRW5kRGF0ZSA9IHNwcmludGYoICclMDRkLSUwMmQtJTAyZCcsICRFbmREYXRlWWVhciwgJEVuZERhdGVNb250aCwgJEVuZERhdGVEYXkgKTsKICAgIH0KCiAgICAjIFRpbWUgaXMgbm93IGZyb20gSG91ci9NaW51dGUgZHJvcGRvd25zCiAgICBteSAkVGltZUhvdXIgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaW1lSG91cicgKSAgIC8vIDk7CiAgICBteSAkVGltZU1pbnV0ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaW1lTWludXRlJyApIC8vIDA7CiAgICBteSAkVGltZVN0ciAgICA9IHNwcmludGYoICclMDJkOiUwMmQnLCAkVGltZUhvdXIsICRUaW1lTWludXRlICk7CgogICAgIyBCdWlsZCBzY2hlZHVsZSBjb25maWcKICAgIG15ICVTY2hlZHVsZUNvbmZpZyA9ICgKICAgICAgICB0aW1lICAgICA9PiAkVGltZVN0ciwKICAgICAgICB0aW1lem9uZSA9PiAkVGltZXpvbmUsCiAgICApOwoKICAgIGlmICggJFNjaGVkdWxlVHlwZSBlcSAnd2Vla2x5JyApIHsKICAgICAgICBteSBAV2Vla2RheXMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnV2Vla2RheXNbXScgKTsKICAgICAgICBAV2Vla2RheXMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnV2Vla2RheXMnICkgaWYgIUBXZWVrZGF5czsKICAgICAgICAkU2NoZWR1bGVDb25maWd7d2Vla2RheXN9ID0gXEBXZWVrZGF5czsKICAgIH0KICAgIGVsc2lmICggJFNjaGVkdWxlVHlwZSBlcSAnbW9udGhseV9kYXknIHx8ICRTY2hlZHVsZVR5cGUgZXEgJ3llYXJseScgKSB7CiAgICAgICAgbXkgJERheSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdEYXknICkgfHwgMTsKICAgICAgICAkRGF5ID0gMSBpZiAkRGF5ICE9IC0xICYmICggJERheSAhfiAvXlxkKyQvIHx8ICREYXkgPCAxIHx8ICREYXkgPiAzMSApOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tkYXl9ID0gJERheTsKICAgICAgICBpZiAoICRTY2hlZHVsZVR5cGUgZXEgJ3llYXJseScgKSB7CiAgICAgICAgICAgIG15ICRNb250aCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdNb250aCcgKSB8fCAxOwogICAgICAgICAgICAkTW9udGggPSAxIGlmICRNb250aCAhfiAvXlxkKyQvIHx8ICRNb250aCA8IDEgfHwgJE1vbnRoID4gMTI7CiAgICAgICAgICAgICRTY2hlZHVsZUNvbmZpZ3ttb250aH0gPSAkTW9udGg7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdtb250aGx5X3dlZWtkYXknIHx8ICRTY2hlZHVsZVR5cGUgZXEgJ21vbnRobHlfd2Vla2RheV9vZmZzZXQnICkgewogICAgICAgIG15ICROdGggPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTnRoJyApIHx8IDE7CiAgICAgICAgJE50aCA9IDEgaWYgJE50aCAhPSAtMSAmJiAoICROdGggIX4gL15cZCskLyB8fCAkTnRoIDwgMSB8fCAkTnRoID4gNSApOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tudGh9ICAgICA9ICROdGg7CiAgICAgICAgJFNjaGVkdWxlQ29uZmlne3dlZWtkYXl9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1dlZWtkYXknICkgfHwgJ21vbic7CiAgICAgICAgaWYgKCAkU2NoZWR1bGVUeXBlIGVxICdtb250aGx5X3dlZWtkYXlfb2Zmc2V0JyApIHsKICAgICAgICAgICAgbXkgJE9mZnNldERheXMgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT2Zmc2V0RGF5cycgKSB8fCAwOwogICAgICAgICAgICAkT2Zmc2V0RGF5cyA9IDAgaWYgJE9mZnNldERheXMgIX4gL14tP1xkKyQvIHx8IGFicygkT2Zmc2V0RGF5cykgPiAzMDsKICAgICAgICAgICAgJFNjaGVkdWxlQ29uZmlne29mZnNldF9kYXlzfSA9ICRPZmZzZXREYXlzOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFNjaGVkdWxlVHlwZSBlcSAnaW50ZXJ2YWwnICkgewogICAgICAgIG15ICRJbnRlcnZhbCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbnRlcnZhbCcgKSB8fCA3OwogICAgICAgICRJbnRlcnZhbCA9IDcgaWYgJEludGVydmFsICF+IC9eXGQrJC8gfHwgJEludGVydmFsIDwgMSB8fCAkSW50ZXJ2YWwgPiAzNjUwOwogICAgICAgICRTY2hlZHVsZUNvbmZpZ3tpbnRlcnZhbH0gPSAkSW50ZXJ2YWw7CgogICAgICAgICMgU3RhcnREYXRlIGlzIGEgcmVxdWlyZWQgZmllbGQgZm9yIGludGVydmFsIHNjaGVkdWxlcyAobm8gY2hlY2tib3gpCiAgICAgICAgbXkgJFN0YXJ0RGF0ZVllYXIgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0RGF0ZVllYXInICk7CiAgICAgICAgbXkgJFN0YXJ0RGF0ZU1vbnRoID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0RGF0ZU1vbnRoJyApOwogICAgICAgIG15ICRTdGFydERhdGVEYXkgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydERhdGVEYXknICk7CgogICAgICAgIGlmICggJFN0YXJ0RGF0ZVllYXIgJiYgJFN0YXJ0RGF0ZU1vbnRoICYmICRTdGFydERhdGVEYXkgKSB7CiAgICAgICAgICAgICRTY2hlZHVsZUNvbmZpZ3tzdGFydF9kYXRlfSA9IHNwcmludGYoCiAgICAgICAgICAgICAgICAnJTA0ZC0lMDJkLSUwMmQnLAogICAgICAgICAgICAgICAgJFN0YXJ0RGF0ZVllYXIsICRTdGFydERhdGVNb250aCwgJFN0YXJ0RGF0ZURheQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBEZWZhdWx0IHRvIHRvZGF5IGlmIG5vdCBwcm92aWRlZAogICAgICAgICAgICBteSAkTm93ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgICAgIG15ICRHZXQgPSAkTm93LT5HZXQoKTsKICAgICAgICAgICAgJFNjaGVkdWxlQ29uZmlne3N0YXJ0X2RhdGV9ID0gc3ByaW50ZigKICAgICAgICAgICAgICAgICclMDRkLSUwMmQtJTAyZCcsCiAgICAgICAgICAgICAgICAkR2V0LT57WWVhcn0sICRHZXQtPntNb250aH0sICRHZXQtPntEYXl9CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IHVzZXIgdGltZXpvbmUgZnJvbSBwcmVmZXJlbmNlcwogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9ICk7CiAgICBteSAkVXNlclRpbWV6b25lID0gJFVzZXJEYXRhe1VzZXJUaW1lWm9uZX0gfHwgJ1VUQyc7CgogICAgIyBDYWxjdWxhdGUgbmV4dCBleGVjdXRpb25zCiAgICBteSBARXhlY3V0aW9uczsKICAgIG15ICRMYXN0RXhlY3V0aW9uOwoKICAgIGZvciBteSAkaSAoIDEgLi4gNSApIHsKICAgICAgICBteSAkTmV4dFRpbWVVVEMgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5DYWxjdWxhdGVOZXh0RXhlY3V0aW9uKAogICAgICAgICAgICBTY2hlZHVsZVR5cGUgICA9PiAkU2NoZWR1bGVUeXBlLAogICAgICAgICAgICBTY2hlZHVsZUNvbmZpZyA9PiBcJVNjaGVkdWxlQ29uZmlnLAogICAgICAgICAgICBMYXN0RXhlY3V0aW9uICA9PiAkTGFzdEV4ZWN1dGlvbiwKICAgICAgICApOwoKICAgICAgICBsYXN0IGlmICEkTmV4dFRpbWVVVEM7CgogICAgICAgICMgQ2hlY2sgZW5kIGNvbmRpdGlvbnMKICAgICAgICBpZiAoICRFbmRUeXBlIGVxICdvY2N1cnJlbmNlcycgJiYgJE1heE9jY3VycmVuY2VzICkgewogICAgICAgICAgICBsYXN0IGlmICRpID4gJE1heE9jY3VycmVuY2VzOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRFbmRUeXBlIGVxICdkYXRlJyAmJiAkRW5kRGF0ZSApIHsKICAgICAgICAgICAgbXkgJE5leHQgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4geyBTdHJpbmcgPT4gJE5leHRUaW1lVVRDIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRFbmQgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4geyBTdHJpbmcgPT4gJEVuZERhdGUgLiAnIDIzOjU5OjU5JyB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBsYXN0IGlmICROZXh0ICYmICRFbmQgJiYgJE5leHQtPkNvbXBhcmUoIERhdGVUaW1lT2JqZWN0ID0+ICRFbmQgKSA+IDA7CiAgICAgICAgfQoKICAgICAgICAjIENvbnZlcnQgVVRDIHRpbWUgdG8gc2NoZWR1bGUgdGltZXpvbmUgZm9yIGRpc3BsYXkKICAgICAgICBteSAkTmV4dFRpbWVTY2hlZHVsZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgU3RyaW5nICAgPT4gJE5leHRUaW1lVVRDLAogICAgICAgICAgICAgICAgVGltZVpvbmUgPT4gJ1VUQycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkTmV4dFRpbWVTY2hlZHVsZS0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFRpbWV6b25lICk7CgogICAgICAgICMgRm9ybWF0IHNjaGVkdWxlIHRpbWV6b25lOiBZWVlZLU1NLUREIEhIOk1NCiAgICAgICAgbXkgJEdldFNjaGVkdWxlID0gJE5leHRUaW1lU2NoZWR1bGUtPkdldCgpOwogICAgICAgIG15ICRTY2hlZHVsZVRpbWVTdHIgPSBzcHJpbnRmKAogICAgICAgICAgICAnJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkJywKICAgICAgICAgICAgJEdldFNjaGVkdWxlLT57WWVhcn0sICRHZXRTY2hlZHVsZS0+e01vbnRofSwgJEdldFNjaGVkdWxlLT57RGF5fSwKICAgICAgICAgICAgJEdldFNjaGVkdWxlLT57SG91cn0sICRHZXRTY2hlZHVsZS0+e01pbnV0ZX0KICAgICAgICApOwoKICAgICAgICAjIENvbnZlcnQgVVRDIHRpbWUgdG8gdXNlciB0aW1lem9uZSBmb3IgZGlzcGxheQogICAgICAgIG15ICROZXh0VGltZVVzZXIgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICROZXh0VGltZVVUQywKICAgICAgICAgICAgICAgIFRpbWVab25lID0+ICdVVEMnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJE5leHRUaW1lVXNlci0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFVzZXJUaW1lem9uZSApOwoKICAgICAgICAjIEZvcm1hdCB1c2VyIHRpbWV6b25lOiBZWVlZLU1NLUREIEhIOk1NCiAgICAgICAgbXkgJEdldFVzZXIgPSAkTmV4dFRpbWVVc2VyLT5HZXQoKTsKICAgICAgICBteSAkVXNlclRpbWVTdHIgPSBzcHJpbnRmKAogICAgICAgICAgICAnJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkJywKICAgICAgICAgICAgJEdldFVzZXItPntZZWFyfSwgJEdldFVzZXItPntNb250aH0sICRHZXRVc2VyLT57RGF5fSwKICAgICAgICAgICAgJEdldFVzZXItPntIb3VyfSwgJEdldFVzZXItPntNaW51dGV9CiAgICAgICAgKTsKCiAgICAgICAgIyBCdWlsZCBkaXNwbGF5IHN0cmluZyB3aXRoIGJvdGggdGltZXpvbmVzCiAgICAgICAgbXkgJERpc3BsYXlTdHI7CiAgICAgICAgaWYgKCAkVGltZXpvbmUgZXEgJFVzZXJUaW1lem9uZSApIHsKICAgICAgICAgICAgIyBTYW1lIHRpbWV6b25lLCBzaG93IG9ubHkgb25jZQogICAgICAgICAgICAkRGlzcGxheVN0ciA9ICIkU2NoZWR1bGVUaW1lU3RyICgkVGltZXpvbmUpIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgRGlmZmVyZW50IHRpbWV6b25lcywgc2hvdyBib3RoCiAgICAgICAgICAgICREaXNwbGF5U3RyID0gIiRTY2hlZHVsZVRpbWVTdHIgKCRUaW1lem9uZSkgLyAkVXNlclRpbWVTdHIgKCRVc2VyVGltZXpvbmUpIjsKICAgICAgICB9CgogICAgICAgIHB1c2ggQEV4ZWN1dGlvbnMsICREaXNwbGF5U3RyOwogICAgICAgICRMYXN0RXhlY3V0aW9uID0gJE5leHRUaW1lVVRDOyAgICAjIEtlZXAgdXNpbmcgVVRDIGZvciBuZXh0IGNhbGN1bGF0aW9uCiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5fSlNPTlJlc3BvbnNlKCB7IGV4ZWN1dGlvbnMgPT4gXEBFeGVjdXRpb25zIH0gKTsKfQoKPWhlYWQyIF9HZXRDaGVja2xpc3RUZW1wbGF0ZXMoKQoKR2V0IGF2YWlsYWJsZSBjaGVja2xpc3QgdGVtcGxhdGVzIGZvciBhIHF1ZXVlLgoKPWN1dAoKc3ViIF9HZXRDaGVja2xpc3RUZW1wbGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTWFpbk9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICRRdWV1ZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1F1ZXVlSUQnICk7CgogICAgIyBDaGVjayBpZiBDaGVja2xpc3RUZW1wbGF0ZSBtb2R1bGUgaXMgYXZhaWxhYmxlCiAgICBteSAkQ2hlY2tsaXN0QXZhaWxhYmxlID0gJE1haW5PYmplY3QtPlJlcXVpcmUoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja2xpc3RUZW1wbGF0ZScsCiAgICAgICAgU2lsZW50ID0+IDEsCiAgICApOwoKICAgIGlmICggISRDaGVja2xpc3RBdmFpbGFibGUgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fSlNPTlJlc3BvbnNlKCB7IHRlbXBsYXRlcyA9PiB7fSB9ICk7CiAgICB9CgogICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrbGlzdFRlbXBsYXRlJyk7CgogICAgIyBUZW1wbGF0ZUxpc3Qgc3VwcG9ydHMgUXVldWVJRCBwYXJhbWV0ZXIgZGlyZWN0bHkKICAgIG15ICVUZW1wbGF0ZXMgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgICAgICBRdWV1ZUlEID0+ICRRdWV1ZUlEIHx8IHVuZGVmLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmLT5fSlNPTlJlc3BvbnNlKCB7IHRlbXBsYXRlcyA9PiBcJVRlbXBsYXRlcyB9ICk7Cn0KCgo9aGVhZDIgX0dldFJlbmRlcmVkQWN0aXZpdHlEaWFsb2dGaWVsZHMoKQoKR2V0IHNlcnZlci1zaWRlIHJlbmRlcmVkIEhUTUwgZm9yIEFjdGl2aXR5IERpYWxvZyBmaWVsZHMuClVzZXMgWm51bnkncyBuYXRpdmUgRWRpdEZpZWxkUmVuZGVyKCkgZm9yIER5bmFtaWNGaWVsZHMgdG8gZW5zdXJlCnBpeGVsLXBlcmZlY3QgY29uc2lzdGVuY3kgd2l0aCB0aGUgc3RhbmRhcmQgcHJvY2VzcyB0aWNrZXQgZGlhbG9nLgoKPWN1dAoKc3ViIF9HZXRSZW5kZXJlZEFjdGl2aXR5RGlhbG9nRmllbGRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkTG9nT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CiAgICBteSAkSlNPTk9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwoKICAgIG15ICRQcm9jZXNzRW50aXR5SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvY2Vzc0VudGl0eUlEJyApOwogICAgbXkgJFN0b3JlZFZhbHVlc0pTT04gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RvcmVkVmFsdWVzJyApIHx8ICd7fSc7CgogICAgIyBEZWJ1ZyBsb2dnaW5nCiAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiR2V0UmVuZGVyZWRBY3Rpdml0eURpYWxvZ0ZpZWxkczogUHJvY2Vzc0VudGl0eUlEPSRQcm9jZXNzRW50aXR5SUQsIFN0b3JlZFZhbHVlc0pTT049JFN0b3JlZFZhbHVlc0pTT04iLAogICAgKTsKCiAgICBpZiAoICEkUHJvY2Vzc0VudGl0eUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSggeyBlcnJvciA9PiAnTm8gUHJvY2Vzc0VudGl0eUlEIHByb3ZpZGVkJyB9ICk7CiAgICB9CgogICAgIyBQYXJzZSBzdG9yZWQgdmFsdWVzIGZvciBlZGl0IG1vZGUKICAgIG15ICRTdG9yZWRWYWx1ZXMgPSB7fTsKICAgIGlmICgkU3RvcmVkVmFsdWVzSlNPTikgewogICAgICAgICRTdG9yZWRWYWx1ZXMgPSAkSlNPTk9iamVjdC0+RGVjb2RlKCBEYXRhID0+ICRTdG9yZWRWYWx1ZXNKU09OICkgfHwge307CiAgICB9CgogICAgIyBEZWJ1ZyBsb2dnaW5nCiAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiR2V0UmVuZGVyZWRBY3Rpdml0eURpYWxvZ0ZpZWxkczogU3RvcmVkVmFsdWVzIGtleXM6ICIgLiBqb2luKCcsICcsIGtleXMgJXskU3RvcmVkVmFsdWVzfSksCiAgICApOwoKICAgICMgQ2hlY2sgaWYgUHJvY2Vzc01hbmFnZW1lbnQgaXMgYXZhaWxhYmxlCiAgICBteSAkUHJvY2Vzc0F2YWlsYWJsZSA9ICRNYWluT2JqZWN0LT5SZXF1aXJlKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MnLAogICAgICAgIFNpbGVudCA9PiAxLAogICAgKTsKCiAgICBpZiAoICEkUHJvY2Vzc0F2YWlsYWJsZSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPl9KU09OUmVzcG9uc2UoIHsgZXJyb3IgPT4gJ1Byb2Nlc3NNYW5hZ2VtZW50IGlzIG5vdCBhdmFpbGFibGUnIH0gKTsKICAgIH0KCiAgICBteSAkUHJvY2Vzc09iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MnKTsKICAgIG15ICRBY3Rpdml0eURpYWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHlEaWFsb2cnKTsKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgR2V0IHRoZSBwcm9jZXNzIHN0YXJ0IHBvaW50CiAgICBteSAkU3RhcnRQb2ludCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzU3RhcnRwb2ludEdldCgKICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFByb2Nlc3NFbnRpdHlJRCwKICAgICk7CgogICAgaWYgKCAhJFN0YXJ0UG9pbnQgfHwgISRTdGFydFBvaW50LT57QWN0aXZpdHlEaWFsb2d9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSggewogICAgICAgICAgICBlcnJvciA9PiAiTm8gc3RhcnQgcG9pbnQgZm91bmQgZm9yIHByb2Nlc3MgJFByb2Nlc3NFbnRpdHlJRCIsCiAgICAgICAgfSApOwogICAgfQoKICAgICMgR2V0IHRoZSBBY3Rpdml0eSBEaWFsb2cgY29uZmlndXJhdGlvbgogICAgbXkgJEFjdGl2aXR5RGlhbG9nID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRTdGFydFBvaW50LT57QWN0aXZpdHlEaWFsb2d9LAogICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gWydBZ2VudEludGVyZmFjZSddLAogICAgKTsKCiAgICBpZiAoICEkQWN0aXZpdHlEaWFsb2cgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fSlNPTlJlc3BvbnNlKCB7CiAgICAgICAgICAgIGVycm9yID0+ICJBY3Rpdml0eSBEaWFsb2cgJFN0YXJ0UG9pbnQtPntBY3Rpdml0eURpYWxvZ30gbm90IGFjY2Vzc2libGUgZm9yIGFnZW50cyIsCiAgICAgICAgfSApOwogICAgfQoKICAgICMgQnVpbGQgSFRNTCBmb3IgYWxsIHZpc2libGUgZmllbGRzCiAgICBteSAkRmllbGRPcmRlciA9ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkT3JkZXJ9IHx8IFtdOwogICAgbXkgJEhUTUwgPSAnJzsKICAgIG15IEBGaWVsZHNNZXRhOwoKICAgICMgU3RhcnQgd2l0aCB3aWRnZXQgd3JhcHBlcgogICAgbXkgJERpYWxvZ05hbWUgPSAkQWN0aXZpdHlEaWFsb2ctPntOYW1lfSB8fCAnU3RhcnQnOwogICAgbXkgJERpYWxvZ05hbWVFc2NhcGVkID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkRGlhbG9nTmFtZSApOwoKICAgICRIVE1MIC49ICc8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPic7CiAgICAkSFRNTCAuPSAnPGRpdiBjbGFzcz0iSGVhZGVyIj4nOwogICAgJEhUTUwgLj0gJzxoMj4nIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdBY3Rpdml0eSBEaWFsb2cgRmllbGRzJykgLiAnOiAnIC4gJERpYWxvZ05hbWVFc2NhcGVkIC4gJzwvaDI+JzsKICAgICRIVE1MIC49ICc8L2Rpdj4nOwogICAgJEhUTUwgLj0gJzxkaXYgY2xhc3M9IkNvbnRlbnQiPic7CgogICAgIyBTaG93IERlc2NyaXB0aW9uTG9uZyBhcyBSaWNoIFRleHQgKEhUTUwgY29udGVudCwgbm90IGVzY2FwZWQpCiAgICBpZiAoICRBY3Rpdml0eURpYWxvZy0+e0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgJEhUTUwgLj0gJzxkaXYgY2xhc3M9IkRlc2NyaXB0aW9uTG9uZyIgc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgY29sb3I6ICM1NTU7IG1hcmdpbi1ib3R0b206IDIwcHg7IHBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQ6ICNmOGY4Zjg7IGJvcmRlci1yYWRpdXM6IDRweDsiPic7CiAgICAgICAgJEhUTUwgLj0gJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25Mb25nfTsKICAgICAgICAkSFRNTCAuPSAnPC9kaXY+JzsKICAgIH0KCiAgICAkSFRNTCAuPSAnPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgY2FyZCBjYXJkLWl0ZW0iIHN0eWxlPSJtYXJnaW46IDIwcHggYXV0bzsiPic7CgogICAgIyBGaWVsZCBuYW1lIG1hcHBpbmcgKHNhbWUgYXMgaW4gQWdlbnRUaWNrZXRQcm9jZXNzLnBtKQogICAgIyBNYXBzIEFjdGl2aXR5IERpYWxvZyBmaWVsZCBuYW1lcyB0byBpbnRlcm5hbCBmaWVsZCBuYW1lcwogICAgbXkgJU5hbWVUb0lEID0gKAogICAgICAgIFRpdGxlICAgICAgICAgICAgICA9PiAnVGl0bGUnLAogICAgICAgIFN0YXRlICAgICAgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgU3RhdGVJRCAgICAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBQcmlvcml0eSAgICAgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIFByaW9yaXR5SUQgICAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgTG9jayAgICAgICAgICAgICAgID0+ICdMb2NrSUQnLAogICAgICAgIExvY2tJRCAgICAgICAgICAgICA9PiAnTG9ja0lEJywKICAgICAgICBRdWV1ZSAgICAgICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgQ3VzdG9tZXIgICAgICAgICAgID0+ICdDdXN0b21lcklEJywKICAgICAgICBDdXN0b21lcklEICAgICAgICAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgIEN1c3RvbWVyTm8gICAgICAgICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgQ3VzdG9tZXJVc2VySUQgICAgID0+ICdDdXN0b21lclVzZXJJRCcsCiAgICAgICAgT3duZXIgICAgICAgICAgICAgID0+ICdPd25lcklEJywKICAgICAgICBPd25lcklEICAgICAgICAgICAgPT4gJ093bmVySUQnLAogICAgICAgIFR5cGUgICAgICAgICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBUeXBlSUQgICAgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgU0xBICAgICAgICAgICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgU0xBSUQgICAgICAgICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgU2VydmljZSAgICAgICAgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICBSZXNwb25zaWJsZSAgICAgICAgPT4gJ1Jlc3BvbnNpYmxlSUQnLAogICAgICAgIFJlc3BvbnNpYmxlSUQgICAgICA9PiAnUmVzcG9uc2libGVJRCcsCiAgICAgICAgUGVuZGluZ1RpbWUgICAgICAgID0+ICdQZW5kaW5nVGltZScsCiAgICAgICAgQXJ0aWNsZSAgICAgICAgICAgID0+ICdBcnRpY2xlJywKICAgICk7CgogICAgRklFTEQ6CiAgICBmb3IgbXkgJEZpZWxkTmFtZSAoIEB7JEZpZWxkT3JkZXJ9ICkgewogICAgICAgIG15ICRGaWVsZENvbmZpZyA9ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEZpZWxkTmFtZX07CiAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZpZWxkQ29uZmlnOwoKICAgICAgICAjIFNraXAgaGlkZGVuIGZpZWxkcyAoRGlzcGxheSA9IDAgb3IgdW5kZWZpbmVkKQogICAgICAgIG5leHQgRklFTEQgaWYgIWRlZmluZWQgJEZpZWxkQ29uZmlnLT57RGlzcGxheX0gfHwgJEZpZWxkQ29uZmlnLT57RGlzcGxheX0gPT0gMDsKCiAgICAgICAgIyBNYXAgZmllbGQgbmFtZSB0byBpbnRlcm5hbCBuYW1lIChlLmcuLCAiUmVzcG9uc2libGUiIC0+ICJSZXNwb25zaWJsZUlEIikKICAgICAgICBteSAkTWFwcGVkRmllbGROYW1lID0gJE5hbWVUb0lEeyRGaWVsZE5hbWV9IHx8ICRGaWVsZE5hbWU7CgogICAgICAgIG15ICRGaWVsZEhUTUwgPSAnJzsKICAgICAgICBteSAlRmllbGRNZXRhID0gKAogICAgICAgICAgICBuYW1lICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgIG1hcHBlZE5hbWUgPT4gJE1hcHBlZEZpZWxkTmFtZSwKICAgICAgICAgICAgZGlzcGxheSA9PiAkRmllbGRDb25maWctPntEaXNwbGF5fSwKICAgICAgICApOwoKICAgICAgICAjIENoZWNrIGlmIGl0J3MgYSBEeW5hbWljRmllbGQKICAgICAgICBpZiAoICRGaWVsZE5hbWUgPX4gL15EeW5hbWljRmllbGRfKC4rKSQvICkgewogICAgICAgICAgICBteSAkREZOYW1lID0gJDE7CiAgICAgICAgICAgIG15ICRERkNvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCggTmFtZSA9PiAkREZOYW1lICk7CgogICAgICAgICAgICBpZiAoJERGQ29uZmlnKSB7CiAgICAgICAgICAgICAgICAjIEdldCBzdG9yZWQgdmFsdWUgaWYgZWRpdGluZwogICAgICAgICAgICAgICAgbXkgJFZhbHVlID0gJFN0b3JlZFZhbHVlcy0+eyRGaWVsZE5hbWV9OwoKICAgICAgICAgICAgICAgICMgTm9ybWFsaXplIERhdGUvRGF0ZVRpbWUgdmFsdWVzOiB0aGUgRGF0ZSBkcml2ZXIgZXhwZWN0cyAnWVlZWS1NTS1ERCBISDpNTTpTUycgZm9ybWF0CiAgICAgICAgICAgICAgICAjIE9sZCBkYXRhIG1pZ2h0IGJlIHN0b3JlZCBhcyAnWVlZWS1NTS1ERCcgd2l0aG91dCB0aW1lLCBzbyB3ZSBuZWVkIHRvIGFkZCBpdAogICAgICAgICAgICAgICAgaWYgKCAkVmFsdWUgJiYgJERGQ29uZmlnLT57RmllbGRUeXBlfSA9fiAvXkRhdGUoVGltZSk/JC8gKSB7CiAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB2YWx1ZSBpcyBkYXRlLW9ubHkgKG5vIHRpbWUgY29tcG9uZW50KQogICAgICAgICAgICAgICAgICAgIGlmICggJFZhbHVlID1+IC9eXGR7NH0tXGR7Mn0tXGR7Mn0kLyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlIC49ICcgMDA6MDA6MDAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFVzZSBabnVueSdzIG5hdGl2ZSBFZGl0RmllbGRSZW5kZXIKICAgICAgICAgICAgICAgICMgTm90ZTogVGhlIFByZWZpeCBwYXJhbWV0ZXIgaXMgTk9UIHVzZWQgYnkgRHluYW1pY0ZpZWxkIGRyaXZlcnMgZm9yIGZpZWxkIG5hbWVzCiAgICAgICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRERkNvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgID0+ICRGaWVsZENvbmZpZy0+e0Rpc3BsYXl9ID09IDIsCiAgICAgICAgICAgICAgICAgICAgVXNlRGVmYXVsdFZhbHVlICAgID0+ICFkZWZpbmVkICRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICBTZXJ2ZXJFcnJvciAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBBSkFYVXBkYXRlICAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBQcmVmaXggICAgICAgICAgICAgPT4gJ0FjdGl2aXR5RGlhbG9nXycsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZEhUTUwgJiYgJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgIyBCdWlsZCBIVE1MIHVzaW5nIFByb2Nlc3NNYW5hZ2VtZW50IHRlbXBsYXRlIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdydzpEeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJERGQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCAgID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0ZpZWxkfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRGaWVsZENvbmZpZy0+e0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ3J3OkR5bmFtaWNGaWVsZDpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyBEZXNjcmlwdGlvblNob3J0ID0+ICRGaWVsZENvbmZpZy0+e0Rlc2NyaXB0aW9uU2hvcnR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICRGaWVsZENvbmZpZy0+e0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAncnc6RHluYW1pY0ZpZWxkOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgRGVzY3JpcHRpb25Mb25nID0+ICRGaWVsZENvbmZpZy0+e0Rlc2NyaXB0aW9uTG9uZ30gfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRGaWVsZEhUTUwgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkRmllbGRNZXRhe3R5cGV9ICAgICAgPSAnRHluYW1pY0ZpZWxkJzsKICAgICAgICAgICAgICAgICAgICAkRmllbGRNZXRhe2ZpZWxkVHlwZX0gPSAkREZDb25maWctPntGaWVsZFR5cGV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIFN0YW5kYXJkIGZpZWxkcyAtIHJlbmRlciB1c2luZyBCdWlsZFNlbGVjdGlvbiBvciBjdXN0b20gSFRNTAogICAgICAgICAgICAjIFVzZSBtYXBwZWQgZmllbGQgbmFtZSBmb3IgcHJvcGVyIGZpZWxkIHR5cGUgZGV0ZWN0aW9uCgogICAgICAgICAgICAjIERlYnVnOiBjYXB0dXJlIHdoYXQgdmFsdWVzIHdvdWxkIGJlIGxvb2tlZCB1cAogICAgICAgICAgICAkRmllbGRNZXRhe19kZWJ1Z19zdG9yZWRWYWx1ZV9tYXBwZWR9ID0gJFN0b3JlZFZhbHVlcy0+eyRNYXBwZWRGaWVsZE5hbWV9IC8vICd1bmRlZic7CiAgICAgICAgICAgICRGaWVsZE1ldGF7X2RlYnVnX3N0b3JlZFZhbHVlX29yaWdpbmFsfSA9ICRTdG9yZWRWYWx1ZXMtPnskRmllbGROYW1lfSAvLyAndW5kZWYnOwoKICAgICAgICAgICAgJEZpZWxkSFRNTCA9ICRTZWxmLT5fUmVuZGVyU3RhbmRhcmRGaWVsZCgKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgID0+ICRNYXBwZWRGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICBPcmlnaW5hbE5hbWUgICA9PiAkRmllbGROYW1lLAogICAgICAgICAgICAgICAgRmllbGRDb25maWcgICAgPT4gJEZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgU3RvcmVkVmFsdWVzICAgPT4gJFN0b3JlZFZhbHVlcywKICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRGaWVsZE1ldGF7dHlwZX0gPSAkTWFwcGVkRmllbGROYW1lOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRGaWVsZEhUTUwpIHsKICAgICAgICAgICAgJEhUTUwgLj0gJEZpZWxkSFRNTDsKICAgICAgICAgICAgcHVzaCBARmllbGRzTWV0YSwgXCVGaWVsZE1ldGE7CiAgICAgICAgfQogICAgfQoKICAgICRIVE1MIC49ICc8L2ZpZWxkc2V0Pic7CgogICAgIyBBZGQgU3VibWl0QWR2aWNlVGV4dCBpZiBwcmVzZW50ICh0aGUgaGludCB0ZXh0IGF0IHRoZSBib3R0b20gb2YgdGhlIGRpYWxvZykKICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57U3VibWl0QWR2aWNlVGV4dH0gKSB7CiAgICAgICAgJEhUTUwgLj0gJzxkaXYgY2xhc3M9Im1lc3NhZ2UtY29udGFpbmVyIiBzdHlsZT0ibWFyZ2luLXRvcDogMTVweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogI2Y1ZjVmNTsgYm9yZGVyLXJhZGl1czogNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4nOwogICAgICAgICRIVE1MIC49ICc8cCBjbGFzcz0iU3VibWl0SW5mbyIgc3R5bGU9ImNvbG9yOiAjNjY2OyBtYXJnaW46IDA7Ij4nOwogICAgICAgICRIVE1MIC49ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJEFjdGl2aXR5RGlhbG9nLT57U3VibWl0QWR2aWNlVGV4dH0gKTsKICAgICAgICAkSFRNTCAuPSAnPC9wPic7CiAgICAgICAgJEhUTUwgLj0gJzwvZGl2Pic7CiAgICB9CgogICAgJEhUTUwgLj0gJzwvZGl2PjwvZGl2Pic7CgogICAgIyBCdWlsZCBkZWJ1ZyBpbmZvIGFib3V0IGFsbCBmaWVsZHMgaW4gdGhlIEFjdGl2aXR5IERpYWxvZwogICAgbXkgQEFsbEZpZWxkc0RlYnVnOwogICAgZm9yIG15ICRGaWVsZE5hbWUgKCBAeyRGaWVsZE9yZGVyfSApIHsKICAgICAgICBteSAkRmllbGRDb25maWcgPSAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRGaWVsZE5hbWV9IHx8IHt9OwogICAgICAgIHB1c2ggQEFsbEZpZWxkc0RlYnVnLCB7CiAgICAgICAgICAgIG5hbWUgICAgPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgZGlzcGxheSA9PiAkRmllbGRDb25maWctPntEaXNwbGF5fSAvLyAndW5kZWZpbmVkJywKICAgICAgICAgICAgbWFwcGVkICA9PiAkTmFtZVRvSUR7JEZpZWxkTmFtZX0gfHwgJEZpZWxkTmFtZSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiAkU2VsZi0+X0pTT05SZXNwb25zZSggewogICAgICAgIGh0bWwgICA9PiAkSFRNTCwKICAgICAgICBmaWVsZHMgPT4gXEBGaWVsZHNNZXRhLAogICAgICAgIG5hbWUgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntOYW1lfSB8fCAnJywKICAgICAgICBfZGVidWcgPT4gewogICAgICAgICAgICBmaWVsZE9yZGVyICAgICA9PiAkRmllbGRPcmRlciwKICAgICAgICAgICAgYWxsRmllbGRzICAgICAgPT4gXEBBbGxGaWVsZHNEZWJ1ZywKICAgICAgICAgICAgcmVuZGVyZWRDb3VudCAgPT4gc2NhbGFyIEBGaWVsZHNNZXRhLAogICAgICAgICAgICBzdG9yZWRWYWx1ZXMgICA9PiAkU3RvcmVkVmFsdWVzLAogICAgICAgICAgICBzdG9yZWRWYWx1ZXNKU09OID0+ICRTdG9yZWRWYWx1ZXNKU09OLAogICAgICAgIH0sCiAgICB9ICk7Cn0KCj1oZWFkMiBfUmVuZGVyU3RhbmRhcmRGaWVsZCgpCgpSZW5kZXIgYSBzdGFuZGFyZCAobm9uLUR5bmFtaWNGaWVsZCkgQWN0aXZpdHkgRGlhbG9nIGZpZWxkLgoKPWN1dAoKc3ViIF9SZW5kZXJTdGFuZGFyZEZpZWxkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEZpZWxkTmFtZSAgICA9ICRQYXJhbXtGaWVsZE5hbWV9OyAgICAgICAjIE1hcHBlZCBmaWVsZCBuYW1lIChlLmcuLCBSZXNwb25zaWJsZUlEKQogICAgbXkgJE9yaWdpbmFsTmFtZSA9ICRQYXJhbXtPcmlnaW5hbE5hbWV9IHx8ICRGaWVsZE5hbWU7ICAjIE9yaWdpbmFsIGZpZWxkIG5hbWUgZnJvbSBBY3Rpdml0eSBEaWFsb2cgKGUuZy4sIFJlc3BvbnNpYmxlKQogICAgbXkgJEZpZWxkQ29uZmlnICA9ICRQYXJhbXtGaWVsZENvbmZpZ307CiAgICBteSAkU3RvcmVkVmFsdWVzID0gJFBhcmFte1N0b3JlZFZhbHVlc30gfHwge307CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJFBhcmFte0xheW91dE9iamVjdH07CgogICAgbXkgJElzUmVxdWlyZWQgICAgPSAkRmllbGRDb25maWctPntEaXNwbGF5fSA9PSAyOwogICAgbXkgJFJlcXVpcmVkQ2xhc3MgPSAkSXNSZXF1aXJlZCA/ICcgVmFsaWRhdGVfUmVxdWlyZWQnIDogJyc7CiAgICBteSAkUmVxdWlyZWRNYXJrZXIgPSAkSXNSZXF1aXJlZCA/ICc8c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAnIDogJyc7CiAgICBteSAkTWFuZGF0b3J5Q2xhc3MgPSAkSXNSZXF1aXJlZCA/ICdNYW5kYXRvcnknIDogJyc7CiAgICBteSAkRm9ybUZpZWxkTmFtZSA9ICdBY3Rpdml0eURpYWxvZ18nIC4gJEZpZWxkTmFtZTsKCiAgICBteSAkTGFiZWwgICA9ICRGaWVsZE5hbWU7CiAgICBteSAkQ29udGVudCA9ICcnOwogICAgIyBUcnkgdG8gZ2V0IHN0b3JlZCB2YWx1ZSB1c2luZyBtYXBwZWQgbmFtZSwgdGhlbiBvcmlnaW5hbCBuYW1lCiAgICBteSAkVmFsdWUgICA9ICRTdG9yZWRWYWx1ZXMtPnskRmllbGROYW1lfSB8fCAkU3RvcmVkVmFsdWVzLT57JE9yaWdpbmFsTmFtZX0gfHwgJyc7CgogICAgIyBCdWlsZCBmaWVsZCBiYXNlZCBvbiB0eXBlCiAgICBpZiAoICRGaWVsZE5hbWUgZXEgJ1F1ZXVlJyB8fCAkRmllbGROYW1lIGVxICdRdWV1ZUlEJyApIHsKICAgICAgICBteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKICAgICAgICBteSAlUXVldWVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxpc3QoIFZhbGlkID0+IDEgKTsKICAgICAgICAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1F1ZXVlJyk7CgogICAgICAgICRDb250ZW50ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVF1ZXVlcywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJEZvcm1GaWVsZE5hbWUsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJyAuICRSZXF1aXJlZENsYXNzLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJlZVZpZXcgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnU3RhdGUnIHx8ICRGaWVsZE5hbWUgZXEgJ1N0YXRlSUQnICkgewogICAgICAgIG15ICRTdGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwogICAgICAgIG15ICVTdGF0ZXMgPSAkU3RhdGVPYmplY3QtPlN0YXRlTGlzdCggVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSApOwogICAgICAgICRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU3RhdGUnKTsKICAgICAgICAkQ29udGVudCA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVTdGF0ZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkRm9ybUZpZWxkTmFtZSwKICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFZhbHVlLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScgLiAkUmVxdWlyZWRDbGFzcywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnUHJpb3JpdHknIHx8ICRGaWVsZE5hbWUgZXEgJ1ByaW9yaXR5SUQnICkgewogICAgICAgIG15ICRQcmlvcml0eU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwogICAgICAgIG15ICVQcmlvcml0aWVzID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUxpc3QoIFZhbGlkID0+IDEgKTsKICAgICAgICAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1ByaW9yaXR5Jyk7CiAgICAgICAgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUHJpb3JpdGllcywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJEZvcm1GaWVsZE5hbWUsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJyAuICRSZXF1aXJlZENsYXNzLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkRmllbGROYW1lIGVxICdUeXBlJyB8fCAkRmllbGROYW1lIGVxICdUeXBlSUQnICkgewogICAgICAgIG15ICRUeXBlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKICAgICAgICBteSAlVHlwZXMgPSAkVHlwZU9iamVjdC0+VHlwZUxpc3QoIFZhbGlkID0+IDEgKTsKICAgICAgICAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1R5cGUnKTsKICAgICAgICAkQ29udGVudCA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVUeXBlcywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJEZvcm1GaWVsZE5hbWUsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJyAuICRSZXF1aXJlZENsYXNzLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkRmllbGROYW1lIGVxICdTZXJ2aWNlJyB8fCAkRmllbGROYW1lIGVxICdTZXJ2aWNlSUQnICkgewogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgICAgICBteSAlU2VydmljZXMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICAgICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTZXJ2aWNlJyk7CiAgICAgICAgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2VydmljZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkRm9ybUZpZWxkTmFtZSwKICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFZhbHVlLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScgLiAkUmVxdWlyZWRDbGFzcywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRGaWVsZE5hbWUgZXEgJ1NMQScgfHwgJEZpZWxkTmFtZSBlcSAnU0xBSUQnICkgewogICAgICAgICMgU0xBIGRlcGVuZHMgb24gU2VydmljZSwgc3RhcnQgZW1wdHkKICAgICAgICAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NMQScpOwogICAgICAgICRDb250ZW50ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7fSwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJEZvcm1GaWVsZE5hbWUsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkVmFsdWUsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJyAuICRSZXF1aXJlZENsYXNzLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkRmllbGROYW1lIGVxICdPd25lcicgfHwgJEZpZWxkTmFtZSBlcSAnT3duZXJJRCcgKSB7CiAgICAgICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgICAgIG15ICVVc2VycyA9ICRVc2VyT2JqZWN0LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdPd25lcicpOwogICAgICAgICRDb250ZW50ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVVzZXJzLAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJEZvcm1GaWVsZE5hbWUsCiAgICAgICAgICAgIElEICAgICAgICAgICA9PiAkRm9ybUZpZWxkTmFtZSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnIC4gJFJlcXVpcmVkQ2xhc3MsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRGaWVsZE5hbWUgZXEgJ1Jlc3BvbnNpYmxlJyB8fCAkRmllbGROYW1lIGVxICdSZXNwb25zaWJsZUlEJyApIHsKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CiAgICAgICAgbXkgJVVzZXJzID0gJFVzZXJPYmplY3QtPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1Jlc3BvbnNpYmxlJyk7CiAgICAgICAgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlVXNlcnMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkRm9ybUZpZWxkTmFtZSwKICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFZhbHVlLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScgLiAkUmVxdWlyZWRDbGFzcywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnTG9jaycgfHwgJEZpZWxkTmFtZSBlcSAnTG9ja0lEJyApIHsKICAgICAgICBteSAkTG9ja09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2NrJyk7CiAgICAgICAgbXkgJUxvY2tzID0gJExvY2tPYmplY3QtPkxvY2tMaXN0KCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9ICk7CiAgICAgICAgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMb2NrJyk7CiAgICAgICAgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTG9ja3MsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkRm9ybUZpZWxkTmFtZSwKICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICRGb3JtRmllbGROYW1lLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFZhbHVlLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScgLiAkUmVxdWlyZWRDbGFzcywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnQ3VzdG9tZXJJRCcgKSB7CiAgICAgICAgIyBDdXN0b21lcklEIGluIEFjdGl2aXR5IERpYWxvZ3MgaXMgYWN0dWFsbHkgYSBjb21iaW5lZCBDdXN0b21lciBzZWxlY3Rpb24gZmllbGQKICAgICAgICAjIHdpdGggQ3VzdG9tZXJVc2VyIGF1dG9jb21wbGV0ZSArIGF1dG9tYXRpYyBDdXN0b21lcklEIHBvcHVsYXRpb24KICAgICAgICAjIFRoaXMgbWltaWNzIHRoZSBzdGFuZGFyZCBQcm9jZXNzTWFuYWdlbWVudC9DdXN0b21lci50dCBiZWhhdmlvcgoKICAgICAgICBteSAkTGFiZWxDdXN0b21lclVzZXIgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0N1c3RvbWVyIHVzZXInKTsKICAgICAgICBteSAkTGFiZWxDdXN0b21lcklEICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0N1c3RvbWVyIElEJyk7CgogICAgICAgICMgR2V0IHN0b3JlZCB2YWx1ZXMgZm9yIGN1c3RvbWVyIHVzZXIgYW5kIGN1c3RvbWVyIElECiAgICAgICAgbXkgJEN1c3RvbWVyVXNlclZhbHVlID0gJFN0b3JlZFZhbHVlcy0+e0N1c3RvbWVyVXNlcklEfSB8fCAnJzsKICAgICAgICBteSAkQ3VzdG9tZXJJRFZhbHVlICAgPSAkU3RvcmVkVmFsdWVzLT57Q3VzdG9tZXJJRH0gfHwgJFZhbHVlIHx8ICcnOwogICAgICAgIG15ICRTZWxlY3RlZEN1c3RvbWVyVXNlciA9ICcnOwoKICAgICAgICAjIERlYnVnOiBBZGQgY29tbWVudCB3aXRoIHN0b3JlZCB2YWx1ZXMKICAgICAgICBteSAkRGVidWdDb21tZW50ID0gIjwhLS0gREVCVUcgQ3VzdG9tZXJJRDogU3RvcmVkQ3VzdG9tZXJVc2VySUQ9JyRDdXN0b21lclVzZXJWYWx1ZScsIFN0b3JlZEN1c3RvbWVySUQ9JyRDdXN0b21lcklEVmFsdWUnIC0tPlxuIjsKCiAgICAgICAgIyBJZiB3ZSBoYXZlIGEgc3RvcmVkIEN1c3RvbWVyVXNlcklELCBnZXQgdGhlIGRpc3BsYXkgdmFsdWUgKG5hbWUgKyBlbWFpbCkKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyRGlzcGxheSA9ICcnOwogICAgICAgIGlmICgkQ3VzdG9tZXJVc2VyVmFsdWUpIHsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKICAgICAgICAgICAgbXkgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyVmFsdWUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICglQ3VzdG9tZXJVc2VyRGF0YSkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlckRpc3BsYXkgPSAiXCIkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyRnVsbG5hbWV9XCIgPCRDdXN0b21lclVzZXJEYXRhe1VzZXJFbWFpbH0+IjsKICAgICAgICAgICAgICAgICRTZWxlY3RlZEN1c3RvbWVyVXNlciA9ICRDdXN0b21lclVzZXJWYWx1ZTsKICAgICAgICAgICAgICAgICMgQWxzbyBnZXQgQ3VzdG9tZXJJRCBpZiBub3QgYWxyZWFkeSBzZXQKICAgICAgICAgICAgICAgIGlmICghJEN1c3RvbWVySURWYWx1ZSAmJiAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyQ3VzdG9tZXJJRH0pIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJJRFZhbHVlID0gJEN1c3RvbWVyVXNlckRhdGF7VXNlckN1c3RvbWVySUR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJERlYnVnQ29tbWVudCAuPSAiPCEtLSBERUJVRyBDdXN0b21lcklEOiBGb3VuZCBDdXN0b21lclVzZXJEYXRhLCBEaXNwbGF5PSckQ3VzdG9tZXJVc2VyRGlzcGxheScgLS0+XG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJERlYnVnQ29tbWVudCAuPSAiPCEtLSBERUJVRyBDdXN0b21lcklEOiBDdXN0b21lclVzZXJEYXRhR2V0IHJldHVybmVkIEVNUFRZIGZvciAnJEN1c3RvbWVyVXNlclZhbHVlJyAtLT5cbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREZWJ1Z0NvbW1lbnQgLj0gIjwhLS0gREVCVUcgQ3VzdG9tZXJJRDogTm8gQ3VzdG9tZXJVc2VyVmFsdWUgc3RvcmVkIC0tPlxuIjsKICAgICAgICB9CgogICAgICAgIG15ICRDdXN0b21lclVzZXJEaXNwbGF5RXNjYXBlZCA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJEN1c3RvbWVyVXNlckRpc3BsYXkgKTsKICAgICAgICBteSAkQ3VzdG9tZXJJREVzY2FwZWQgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRDdXN0b21lcklEVmFsdWUgKTsKICAgICAgICBteSAkU2VsZWN0ZWRDdXN0b21lclVzZXJFc2NhcGVkID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZWN0ZWRDdXN0b21lclVzZXIgKTsKCiAgICAgICAgIyBCdWlsZCB0aGUgY29tYmluZWQgY3VzdG9tZXIgc2VsZWN0aW9uIGZpZWxkIHNpbWlsYXIgdG8gUHJvY2Vzc01hbmFnZW1lbnQvQ3VzdG9tZXIudHQKICAgICAgICAjIEhpZGRlbiBmaWVsZCBmb3Igc2VsZWN0ZWQgY3VzdG9tZXIgdXNlciBsb2dpbgogICAgICAgICRDb250ZW50ID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGl2aXR5RGlhbG9nX1NlbGVjdGVkQ3VzdG9tZXJVc2VyIiBpZD0iU2VsZWN0ZWRDdXN0b21lclVzZXIiIHZhbHVlPSInIC4gJFNlbGVjdGVkQ3VzdG9tZXJVc2VyRXNjYXBlZCAuICciLz4nOwoKICAgICAgICAjIEN1c3RvbWVyIFVzZXIgYXV0b2NvbXBsZXRlIGZpZWxkCiAgICAgICAgJENvbnRlbnQgLj0gJzxkaXYgY2xhc3M9IlJvdyBSb3dfRmllbGRfQ3VzdG9tZXJVc2VySUQgZmllbGQtd3JhcHBlciI+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0ib3V0ZXItbGFiZWwtd3JhcHBlciI+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGxhYmVsIGZvcj0iQ3VzdG9tZXJBdXRvQ29tcGxldGUiJzsKICAgICAgICBpZiAoJElzUmVxdWlyZWQpIHsKICAgICAgICAgICAgJENvbnRlbnQgLj0gJyBjbGFzcz0iJyAuICRNYW5kYXRvcnlDbGFzcyAuICciJzsKICAgICAgICB9CiAgICAgICAgJENvbnRlbnQgLj0gJz4nIC4gJFJlcXVpcmVkTWFya2VyIC4gJExhYmVsQ3VzdG9tZXJVc2VyIC4gJzo8L2xhYmVsPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvZGl2Pic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxkaXYgY2xhc3M9IkZpZWxkIj4nOwogICAgICAgICRDb250ZW50IC49ICc8aW5wdXQgaWQ9IkN1c3RvbWVyQXV0b0NvbXBsZXRlIiB0eXBlPSJ0ZXh0IiBuYW1lPSInIC4gJEZvcm1GaWVsZE5hbWUgLiAnX0N1c3RvbWVyVXNlciIgJzsKICAgICAgICAkQ29udGVudCAuPSAndmFsdWU9IicgLiAkQ3VzdG9tZXJVc2VyRGlzcGxheUVzY2FwZWQgLiAnIiAnOwogICAgICAgICRDb250ZW50IC49ICdjbGFzcz0iVzc1cGMnIC4gJFJlcXVpcmVkQ2xhc3MgLiAnIiBhdXRvY29tcGxldGU9Im9mZiIgLz4nOwogICAgICAgICRDb250ZW50IC49ICc8ZGl2IGlkPSJDdXN0b21lckF1dG9Db21wbGV0ZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JzsKICAgICAgICAkQ29udGVudCAuPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyk7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvcD48L2Rpdj4nOwogICAgICAgICRDb250ZW50IC49ICc8L2Rpdj4nOwogICAgICAgICRDb250ZW50IC49ICc8L2Rpdj4nOwogICAgICAgICRDb250ZW50IC49ICc8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+JzsKCiAgICAgICAgIyBDdXN0b21lciBJRCBmaWVsZCAocmVhZC1vbmx5LCBhdXRvLXBvcHVsYXRlZCkKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0iUm93IFJvd19GaWVsZF9DdXN0b21lcklEIGZpZWxkLXdyYXBwZXIiPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxkaXYgY2xhc3M9Im91dGVyLWxhYmVsLXdyYXBwZXIiPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxsYWJlbCBmb3I9IicgLiAkRm9ybUZpZWxkTmFtZSAuICciPicgLiAkTGFiZWxDdXN0b21lcklEIC4gJzo8L2xhYmVsPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvZGl2Pic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxkaXYgY2xhc3M9IkZpZWxkIj4nOwogICAgICAgICRDb250ZW50IC49ICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJyAuICRGb3JtRmllbGROYW1lIC4gJyIgaWQ9IicgLiAkRm9ybUZpZWxkTmFtZSAuICciICc7CiAgICAgICAgJENvbnRlbnQgLj0gJ3ZhbHVlPSInIC4gJEN1c3RvbWVySURFc2NhcGVkIC4gJyIgY2xhc3M9Ilc3NXBjIiByZWFkb25seT0icmVhZG9ubHkiIC8+JzsKICAgICAgICAkQ29udGVudCAuPSAnPC9kaXY+JzsKICAgICAgICAkQ29udGVudCAuPSAnPC9kaXY+JzsKCiAgICAgICAgIyBSZXR1cm4gY29udGVudCBkaXJlY3RseSB3aXRob3V0IHdyYXBwZXIgKHdlIGJ1aWx0IG91ciBvd24gc3RydWN0dXJlKQogICAgICAgIHJldHVybiAkQ29udGVudDsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnQ3VzdG9tZXJVc2VySUQnICkgewogICAgICAgICMgQ3VzdG9tZXJVc2VySUQgYXMgc3RhbmRhbG9uZSBmaWVsZCAoaWYgbm90IGNvbWJpbmVkIHdpdGggQ3VzdG9tZXJJRCkKICAgICAgICAjIFNpbWlsYXIgdG8gQ3VzdG9tZXJJRCBoYW5kbGluZyBidXQgZm9jdXNlcyBvbiBDdXN0b21lclVzZXIgc2VsZWN0aW9uCiAgICAgICAgbXkgJExhYmVsQ3VzdG9tZXJVc2VyID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDdXN0b21lciB1c2VyJyk7CiAgICAgICAgbXkgJExhYmVsQ3VzdG9tZXJJRCAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDdXN0b21lciBJRCcpOwoKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyVmFsdWUgPSAkU3RvcmVkVmFsdWVzLT57Q3VzdG9tZXJVc2VySUR9IHx8ICRWYWx1ZSB8fCAnJzsKICAgICAgICBteSAkU2VsZWN0ZWRDdXN0b21lclVzZXIgPSAnJzsKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyRGlzcGxheSA9ICcnOwogICAgICAgIG15ICRDdXN0b21lcklEVmFsdWUgPSAkU3RvcmVkVmFsdWVzLT57Q3VzdG9tZXJJRH0gfHwgJyc7CgogICAgICAgIGlmICgkQ3VzdG9tZXJVc2VyVmFsdWUpIHsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKICAgICAgICAgICAgbXkgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyVmFsdWUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICglQ3VzdG9tZXJVc2VyRGF0YSkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlckRpc3BsYXkgPSAiXCIkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyRnVsbG5hbWV9XCIgPCRDdXN0b21lclVzZXJEYXRhe1VzZXJFbWFpbH0+IjsKICAgICAgICAgICAgICAgICRTZWxlY3RlZEN1c3RvbWVyVXNlciA9ICRDdXN0b21lclVzZXJWYWx1ZTsKICAgICAgICAgICAgICAgIGlmICghJEN1c3RvbWVySURWYWx1ZSAmJiAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyQ3VzdG9tZXJJRH0pIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJJRFZhbHVlID0gJEN1c3RvbWVyVXNlckRhdGF7VXNlckN1c3RvbWVySUR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyRGlzcGxheUVzY2FwZWQgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRDdXN0b21lclVzZXJEaXNwbGF5ICk7CiAgICAgICAgbXkgJEN1c3RvbWVySURFc2NhcGVkID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkQ3VzdG9tZXJJRFZhbHVlICk7CiAgICAgICAgbXkgJFNlbGVjdGVkQ3VzdG9tZXJVc2VyRXNjYXBlZCA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGVjdGVkQ3VzdG9tZXJVc2VyICk7CgogICAgICAgICMgSGlkZGVuIGZpZWxkIGZvciBzZWxlY3RlZCBjdXN0b21lciB1c2VyIGxvZ2luCiAgICAgICAgJENvbnRlbnQgPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aXZpdHlEaWFsb2dfU2VsZWN0ZWRDdXN0b21lclVzZXIiIGlkPSJTZWxlY3RlZEN1c3RvbWVyVXNlciIgdmFsdWU9IicgLiAkU2VsZWN0ZWRDdXN0b21lclVzZXJFc2NhcGVkIC4gJyIvPic7CgogICAgICAgICMgQ3VzdG9tZXIgVXNlciBhdXRvY29tcGxldGUgZmllbGQKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0iUm93IFJvd19GaWVsZF9DdXN0b21lclVzZXJJRCBmaWVsZC13cmFwcGVyIj4nOwogICAgICAgICRDb250ZW50IC49ICc8ZGl2IGNsYXNzPSJvdXRlci1sYWJlbC13cmFwcGVyIj4nOwogICAgICAgICRDb250ZW50IC49ICc8bGFiZWwgZm9yPSJDdXN0b21lckF1dG9Db21wbGV0ZSInOwogICAgICAgIGlmICgkSXNSZXF1aXJlZCkgewogICAgICAgICAgICAkQ29udGVudCAuPSAnIGNsYXNzPSInIC4gJE1hbmRhdG9yeUNsYXNzIC4gJyInOwogICAgICAgIH0KICAgICAgICAkQ29udGVudCAuPSAnPicgLiAkUmVxdWlyZWRNYXJrZXIgLiAkTGFiZWxDdXN0b21lclVzZXIgLiAnOjwvbGFiZWw+JzsKICAgICAgICAkQ29udGVudCAuPSAnPC9kaXY+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0iRmllbGQiPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxpbnB1dCBpZD0iQ3VzdG9tZXJBdXRvQ29tcGxldGUiIHR5cGU9InRleHQiIG5hbWU9IicgLiAkRm9ybUZpZWxkTmFtZSAuICdfRGlzcGxheSIgJzsKICAgICAgICAkQ29udGVudCAuPSAndmFsdWU9IicgLiAkQ3VzdG9tZXJVc2VyRGlzcGxheUVzY2FwZWQgLiAnIiAnOwogICAgICAgICRDb250ZW50IC49ICdjbGFzcz0iVzc1cGMnIC4gJFJlcXVpcmVkQ2xhc3MgLiAnIiBhdXRvY29tcGxldGU9Im9mZiIgLz4nOwogICAgICAgICRDb250ZW50IC49ICc8ZGl2IGlkPSJDdXN0b21lckF1dG9Db21wbGV0ZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JzsKICAgICAgICAkQ29udGVudCAuPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyk7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvcD48L2Rpdj4nOwogICAgICAgICRDb250ZW50IC49ICc8L2Rpdj4nOwogICAgICAgICRDb250ZW50IC49ICc8L2Rpdj4nOwogICAgICAgICRDb250ZW50IC49ICc8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+JzsKCiAgICAgICAgIyBDdXN0b21lciBJRCBmaWVsZCAocmVhZC1vbmx5LCBhdXRvLXBvcHVsYXRlZCkKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0iUm93IFJvd19GaWVsZF9DdXN0b21lcklEX0F1dG8gZmllbGQtd3JhcHBlciI+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0ib3V0ZXItbGFiZWwtd3JhcHBlciI+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGxhYmVsIGZvcj0iQ3VzdG9tZXJJRCI+JyAuICRMYWJlbEN1c3RvbWVySUQgLiAnOjwvbGFiZWw+JzsKICAgICAgICAkQ29udGVudCAuPSAnPC9kaXY+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0iRmllbGQiPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJBY3Rpdml0eURpYWxvZ19DdXN0b21lcklEIiBpZD0iQ3VzdG9tZXJJRCIgJzsKICAgICAgICAkQ29udGVudCAuPSAndmFsdWU9IicgLiAkQ3VzdG9tZXJJREVzY2FwZWQgLiAnIiBjbGFzcz0iVzc1cGMiIHJlYWRvbmx5PSJyZWFkb25seSIgLz4nOwogICAgICAgICRDb250ZW50IC49ICc8L2Rpdj4nOwogICAgICAgICRDb250ZW50IC49ICc8L2Rpdj4nOwoKICAgICAgICAjIFJldHVybiBjb250ZW50IGRpcmVjdGx5IHdpdGhvdXQgd3JhcHBlcgogICAgICAgIHJldHVybiAkQ29udGVudDsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnVGl0bGUnICkgewogICAgICAgICRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVGl0bGUnKTsKICAgICAgICBteSAkVmFsdWVFc2NhcGVkID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkVmFsdWUgKTsKICAgICAgICAkQ29udGVudCA9ICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJyAuICRGb3JtRmllbGROYW1lIC4gJyIgaWQ9IicgLiAkRm9ybUZpZWxkTmFtZSAuICciJzsKICAgICAgICAkQ29udGVudCAuPSAnIGNsYXNzPSJXNzVwYycgLiAkUmVxdWlyZWRDbGFzcyAuICciJzsKICAgICAgICAkQ29udGVudCAuPSAnIHZhbHVlPSInIC4gJFZhbHVlRXNjYXBlZCAuICciIG1heGxlbmd0aD0iMjAwIi8+JzsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkTmFtZSBlcSAnQXJ0aWNsZScgKSB7CiAgICAgICAgIyBBcnRpY2xlIGZpZWxkIHdpdGggU3ViamVjdCBhbmQgQm9keSAobWlycm9ycyBzdGFuZGFyZCBQcm9jZXNzIE1hbmFnZW1lbnQgYmVoYXZpb3IpCiAgICAgICAgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdBcnRpY2xlJyk7CgogICAgICAgIG15ICRTdWJqZWN0VmFsdWUgPSAkU3RvcmVkVmFsdWVzLT57U3ViamVjdH0gfHwgJyc7CiAgICAgICAgbXkgJEJvZHlWYWx1ZSAgICA9ICRTdG9yZWRWYWx1ZXMtPntCb2R5fSB8fCAkVmFsdWUgfHwgJyc7CgogICAgICAgIG15ICRTdWJqZWN0RXNjYXBlZCA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFN1YmplY3RWYWx1ZSApOwogICAgICAgIG15ICRCb2R5RXNjYXBlZCAgICA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJEJvZHlWYWx1ZSApOwoKICAgICAgICAjIFN1YmplY3QgZmllbGQKICAgICAgICAkQ29udGVudCA9ICc8ZGl2IGNsYXNzPSJSb3cgUm93X0ZpZWxkX1N1YmplY3QgZmllbGQtd3JhcHBlciI+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0ib3V0ZXItbGFiZWwtd3JhcHBlciI+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGxhYmVsIGZvcj0iQWN0aXZpdHlEaWFsb2dfU3ViamVjdCI+JyAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU3ViamVjdCcpIC4gJzo8L2xhYmVsPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvZGl2Pic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxkaXYgY2xhc3M9IkZpZWxkIj4nOwogICAgICAgICRDb250ZW50IC49ICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQWN0aXZpdHlEaWFsb2dfU3ViamVjdCIgaWQ9IkFjdGl2aXR5RGlhbG9nX1N1YmplY3QiJzsKICAgICAgICAkQ29udGVudCAuPSAnIGNsYXNzPSJXNzVwYyIgdmFsdWU9IicgLiAkU3ViamVjdEVzY2FwZWQgLiAnIiBtYXhsZW5ndGg9IjIwMCIvPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvZGl2Pic7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvZGl2Pic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4nOwoKICAgICAgICAjIEJvZHkgZmllbGQKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0iUm93IFJvd19GaWVsZF9Cb2R5IGZpZWxkLXdyYXBwZXIiPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxkaXYgY2xhc3M9Im91dGVyLWxhYmVsLXdyYXBwZXIiPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzxsYWJlbCBmb3I9IkFjdGl2aXR5RGlhbG9nX0JvZHkiJzsKICAgICAgICBpZiAoJElzUmVxdWlyZWQpIHsKICAgICAgICAgICAgJENvbnRlbnQgLj0gJyBjbGFzcz0iJyAuICRNYW5kYXRvcnlDbGFzcyAuICciJzsKICAgICAgICB9CiAgICAgICAgJENvbnRlbnQgLj0gJz4nIC4gJFJlcXVpcmVkTWFya2VyIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdUZXh0JykgLiAnOjwvbGFiZWw+JzsKICAgICAgICAkQ29udGVudCAuPSAnPC9kaXY+JzsKICAgICAgICAkQ29udGVudCAuPSAnPGRpdiBjbGFzcz0iRmllbGQiPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzx0ZXh0YXJlYSBuYW1lPSJBY3Rpdml0eURpYWxvZ19Cb2R5IiBpZD0iQWN0aXZpdHlEaWFsb2dfQm9keSInOwogICAgICAgICRDb250ZW50IC49ICcgY2xhc3M9Ilc3NXBjIFJpY2hUZXh0JyAuICRSZXF1aXJlZENsYXNzIC4gJyInOwogICAgICAgICRDb250ZW50IC49ICcgcm93cz0iOCI+JyAuICRCb2R5RXNjYXBlZCAuICc8L3RleHRhcmVhPic7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvZGl2Pic7CiAgICAgICAgJENvbnRlbnQgLj0gJzwvZGl2Pic7CgogICAgICAgICMgUmV0dXJuIGNvbnRlbnQgZGlyZWN0bHkgd2l0aG91dCB3cmFwcGVyICh3ZSBidWlsdCBvdXIgb3duIHN0cnVjdHVyZSkKICAgICAgICByZXR1cm4gJENvbnRlbnQ7CiAgICB9CiAgICBlbHNpZiAoICRGaWVsZE5hbWUgZXEgJ1BlbmRpbmdUaW1lJyApIHsKICAgICAgICAjIFBlbmRpbmdUaW1lIC0gcmVuZGVyIGFzIGRhdGUvdGltZSBwaWNrZXIKICAgICAgICAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BlbmRpbmcgdGlsbCcpOwoKICAgICAgICAjIFBhcnNlIHN0b3JlZCB2YWx1ZSAoSVNPIGZvcm1hdDogWVlZWS1NTS1ERCBISDpNTTpTUykKICAgICAgICBteSAoJFllYXIsICRNb250aCwgJERheSwgJEhvdXIsICRNaW51dGUpID0gKDAsIDAsIDAsIDAsIDApOwogICAgICAgIG15ICRVc2VkID0gMDsKICAgICAgICBpZiAoJFZhbHVlICYmICRWYWx1ZSA9fiAvXihcZHs0fSktKFxkezJ9KS0oXGR7Mn0pXHMrKFxkezJ9KTooXGR7Mn0pLykgewogICAgICAgICAgICAoJFllYXIsICRNb250aCwgJERheSwgJEhvdXIsICRNaW51dGUpID0gKCQxLCAkMiwgJDMsICQ0LCAkNSk7CiAgICAgICAgICAgICRVc2VkID0gMTsKICAgICAgICB9CgogICAgICAgICMgQnVpbGQgZGF0ZSBzZWxlY3Rpb24gdXNpbmcgWm51bnkncyBCdWlsZERhdGVTZWxlY3Rpb24KICAgICAgICBteSAkRGF0ZVNlbGVjdGlvbiA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgUHJlZml4ICAgICAgICAgICA9PiAkRm9ybUZpZWxkTmFtZSwKICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgICRGb3JtRmllbGROYW1lIC4gJ1VzZWQnICAgPT4gJFVzZWQsCiAgICAgICAgICAgICRGb3JtRmllbGROYW1lIC4gJ1llYXInICAgPT4gJFllYXIsCiAgICAgICAgICAgICRGb3JtRmllbGROYW1lIC4gJ01vbnRoJyAgPT4gJE1vbnRoLAogICAgICAgICAgICAkRm9ybUZpZWxkTmFtZSAuICdEYXknICAgID0+ICREYXksCiAgICAgICAgICAgICRGb3JtRmllbGROYW1lIC4gJ0hvdXInICAgPT4gJEhvdXIsCiAgICAgICAgICAgICRGb3JtRmllbGROYW1lIC4gJ01pbnV0ZScgPT4gJE1pbnV0ZSwKICAgICAgICAgICAgJEZvcm1GaWVsZE5hbWUgLiAnT3B0aW9uYWwnID0+IDEsCiAgICAgICAgICAgIFZhbGlkYXRlICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkQ29udGVudCA9ICREYXRlU2VsZWN0aW9uOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBVbmtub3duIGZpZWxkIHR5cGUgLSByZW5kZXIgYXMgdGV4dCBpbnB1dAogICAgICAgICRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkRmllbGROYW1lKTsKICAgICAgICBteSAkVmFsdWVFc2NhcGVkID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkVmFsdWUgKTsKICAgICAgICAkQ29udGVudCA9ICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJyAuICRGb3JtRmllbGROYW1lIC4gJyIgaWQ9IicgLiAkRm9ybUZpZWxkTmFtZSAuICciJzsKICAgICAgICAkQ29udGVudCAuPSAnIGNsYXNzPSJXNTBwYycgLiAkUmVxdWlyZWRDbGFzcyAuICciJzsKICAgICAgICAkQ29udGVudCAuPSAnIHZhbHVlPSInIC4gJFZhbHVlRXNjYXBlZCAuICciLz4nOwogICAgfQoKICAgICMgQnVpbGQgdGhlIGZpZWxkIHdyYXBwZXIgSFRNTCAoc2ltaWxhciB0byBEeW5hbWljRmllbGQudHQgc3RydWN0dXJlKQogICAgbXkgJEhUTUwgPSAnJzsKICAgICRIVE1MIC49ICc8ZGl2IGNsYXNzPSJSb3cgUm93X0ZpZWxkXycgLiAkRmllbGROYW1lIC4gJyBmaWVsZC13cmFwcGVyIj4nOwogICAgJEhUTUwgLj0gJzxkaXYgY2xhc3M9Im91dGVyLWxhYmVsLXdyYXBwZXIiPic7CiAgICAkSFRNTCAuPSAnPGxhYmVsIGZvcj0iJyAuICRGb3JtRmllbGROYW1lIC4gJyInOwogICAgaWYgKCRJc1JlcXVpcmVkKSB7CiAgICAgICAgJEhUTUwgLj0gJyBjbGFzcz0iJyAuICRNYW5kYXRvcnlDbGFzcyAuICciJzsKICAgIH0KICAgICRIVE1MIC49ICc+JyAuICRSZXF1aXJlZE1hcmtlciAuICRMYWJlbCAuICc6PC9sYWJlbD4nOwoKICAgICMgSGVscCBpY29uIGZvciBEZXNjcmlwdGlvbkxvbmcKICAgIGlmICggJEZpZWxkQ29uZmlnLT57RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICBteSAkRGVzY0xvbmdFc2NhcGVkID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkRmllbGRDb25maWctPntEZXNjcmlwdGlvbkxvbmd9ICk7CiAgICAgICAgJEhUTUwgLj0gJzxzcGFuIGNsYXNzPSJGaWVsZEhlbHBDb250YWluZXIiPic7CiAgICAgICAgJEhUTUwgLj0gJzxpIGNsYXNzPSJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgRmllbGRIZWxwVHJpZ2dlciI+PC9pPic7CiAgICAgICAgJEhUTUwgLj0gJzxzcGFuPicgLiAkRGVzY0xvbmdFc2NhcGVkIC4gJzwvc3Bhbj4nOwogICAgICAgICRIVE1MIC49ICc8L3NwYW4+JzsKICAgIH0KICAgICRIVE1MIC49ICc8L2Rpdj4nOyAjIEVuZCBvdXRlci1sYWJlbC13cmFwcGVyCgogICAgJEhUTUwgLj0gJzxkaXYgY2xhc3M9IkZpZWxkIj4nOwogICAgJEhUTUwgLj0gJENvbnRlbnQ7CgogICAgIyBFcnJvciB0b29sdGlwcwogICAgJEhUTUwgLj0gJzxkaXYgaWQ9IicgLiAkRm9ybUZpZWxkTmFtZSAuICdFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPic7CiAgICAkSFRNTCAuPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyk7CiAgICAkSFRNTCAuPSAnPC9wPjwvZGl2Pic7CiAgICAkSFRNTCAuPSAnPGRpdiBpZD0iJyAuICRGb3JtRmllbGROYW1lIC4gJ1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JzsKICAgICRIVE1MIC49ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nKTsKICAgICRIVE1MIC49ICc8L3A+PC9kaXY+JzsKCiAgICAkSFRNTCAuPSAnPC9kaXY+JzsgIyBFbmQgRmllbGQKCiAgICAjIERlc2NyaXB0aW9uU2hvcnQKICAgIGlmICggJEZpZWxkQ29uZmlnLT57RGVzY3JpcHRpb25TaG9ydH0gKSB7CiAgICAgICAgbXkgJERlc2NTaG9ydEVzY2FwZWQgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRGaWVsZENvbmZpZy0+e0Rlc2NyaXB0aW9uU2hvcnR9ICk7CiAgICAgICAgJEhUTUwgLj0gJzxkaXYgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPicgLiAkRGVzY1Nob3J0RXNjYXBlZCAuICc8L2Rpdj4nOwogICAgfQoKICAgICRIVE1MIC49ICc8L2Rpdj4nOyAjIEVuZCBSb3cgZmllbGQtd3JhcHBlcgoKICAgIHJldHVybiAkSFRNTDsKfQoKPWhlYWQyIF9KU09OUmVzcG9uc2UoKQoKUmV0dXJuIGEgSlNPTiByZXNwb25zZS4KCj1jdXQKCnN1YiBfSlNPTlJlc3BvbnNlIHsKICAgIG15ICggJFNlbGYsICREYXRhICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJEpTT05PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyk7CgogICAgbXkgJEpTT04gPSAkSlNPTk9iamVjdC0+RW5jb2RlKCBEYXRhID0+ICREYXRhICkgfHwgJ3t9JzsKCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcsCiAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgVGlja2V0U2NoZWR1bGVyIHBhY2thZ2UgZm9yIFpudW55LgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>

        <!-- Notification Module for Error Banner -->
        <File Permission="660" Location="Kernel/Output/HTML/Notification/TicketSchedulerError.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpOb3RpZmljYXRpb246OlRpY2tldFNjaGVkdWxlckVycm9yOwoKdXNlIHBhcmVudCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkJhc2UnOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0U2NoZWR1bGVyJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6Tm90aWZpY2F0aW9uOjpUaWNrZXRTY2hlZHVsZXJFcnJvciAtIE5vdGlmeSBUaWNrZXRTY2hlZHVsZXJBZG1pbiB1c2VycyBhYm91dCBmYWlsZWQgc2NoZWR1bGUgZXhlY3V0aW9ucwoKPWhlYWQxIERFU0NSSVBUSU9OCgpTYW1lIG1lY2hhbmlzbSBhcyBjb3JlJ3MgT3V0b2ZPZmZpY2VDaGVjay9TeXN0ZW1NYWludGVuYW5jZUNoZWNrCm5vdGlmaWNhdGlvbiBtb2R1bGVzIC0gc2hvd24gdmlhIEZyb250ZW5kOjpOb3RpZnlNb2R1bGUsIGFwcGVhcnMgaW4KdGhlIHN0YW5kYXJkIHNpdGUtd2lkZSBub3RpZmljYXRpb24gYXJlYSAobm90IGluamVjdGVkIGludG8gcGFnZQpjb250ZW50KSwgdXNpbmcgWm51bnkncyBvd24gTWVzc2FnZUJveC5FcnJvciBzdHlsaW5nLgoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnJyBpZiAhJFNlbGYtPntVc2VySUR9OwoKICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKICAgICMgT25seSBzaG93IHRvIHVzZXJzIHdpdGggVGlja2V0U2NoZWR1bGVyQWRtaW4gZ3JvdXAgKFJXIHBlcm1pc3Npb24pCiAgICBteSAkSGFzUGVybWlzc2lvbiA9ICRHcm91cE9iamVjdC0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgR3JvdXBOYW1lID0+ICdUaWNrZXRTY2hlZHVsZXJBZG1pbicsCiAgICAgICAgVHlwZSAgICAgID0+ICdydycsCiAgICApOwoKICAgIHJldHVybiAnJyBpZiAhJEhhc1Blcm1pc3Npb247CgogICAgbXkgJFRpY2tldFNjaGVkdWxlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXRTY2hlZHVsZXInKTsKICAgIG15IEBFcnJvcnMgICAgICAgICAgICAgICAgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5HZXRTY2hlZHVsZXJzV2l0aEVycm9ycygpOwoKICAgIHJldHVybiAnJyBpZiAhQEVycm9yczsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJEVycm9yQ291bnQgICAgPSBzY2FsYXIgQEVycm9yczsKCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgTGluayAgICAgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfSAuICdBY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXInLAogICAgICAgIERhdGEgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVGlja2V0IFNjaGVkdWxlciBFcnJvcicpIC4gJzogJwogICAgICAgICAgICAuICRFcnJvckNvdW50IC4gJyAnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdzY2hlZHVsZShzKSBjb3VsZCBub3QgYmUgZXhlY3V0ZWQnKSwKICAgICk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgVGlja2V0U2NoZWR1bGVyIHBhY2thZ2UgZm9yIFpudW55LgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>

        <!-- Templates -->
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/AgentTicketScheduler.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0IEFjdGlvbnNTaWRlQmFyIFRpY2tldFNjaGVkdWxlciI+CiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIEFjdGlvbnNTaWRlQmFyQ29tcCI+ClslIElGIERhdGEuSGFzUldQZXJtaXNzaW9uICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0U2NoZWR1bGVyO1N1YmFjdGlvbj1BZGQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIGJ0bi1tYWluIGJ0bi1wcmltYXJ5LWdob3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZS1vIj48L2k+IFslIFRyYW5zbGF0ZSgiTmV3IFRpY2tldCBTY2hlZHVsZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIElGIERhdGEuUHJvY2Vzc0F2YWlsYWJsZSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0U2NoZWR1bGVyUHJvY2VzcztTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBidG4tbWFpbiBidG4tcHJpbWFyeS1naG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtY29ncyI+PC9pPiBbJSBUcmFuc2xhdGUoIk5ldyBQcm9jZXNzIFNjaGVkdWxlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgRU5EICVdCgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyU2NoZWR1bGVzIj5bJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgU2NoZWR1bGVzIikgfCBodG1sICVdPC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iVGFibGVGaWx0ZXJDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlclNjaGVkdWxlcyIgY2xhc3M9IkZpbHRlckJveCIgcGxhY2Vob2xkZXI9IlslIFRyYW5zbGF0ZSgiU3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLiIpIHwgaHRtbCAlXSIgbmFtZT0iRmlsdGVyU2NoZWR1bGVzIiB2YWx1ZT0iIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIFNjaGVkdWxlcyIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRmlsdGVyIE9wdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgaWQ9IkZpbHRlckZvcm0iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFnZW50VGlja2V0U2NoZWR1bGVyIi8+CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+PGxhYmVsIGZvcj0iUXVldWVJRCI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTwvbGFiZWw+PC9oND4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlF1ZXVlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PjxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiU3RhdHVzIikgfCBodG1sICVdPC9sYWJlbD48L2g0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU3RhdHVzU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PjxsYWJlbCBmb3I9Ik1vZGUiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTwvbGFiZWw+PC9oND4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vZGVTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIGJ0bi1tYWluIGJ0bi1wcmltYXJ5LWdob3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtZmlsdGVyIj48L2k+IFslIFRyYW5zbGF0ZSgiQXBwbHkgRmlsdGVyIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlciIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gYnRuLW1haW4gYnRuLXByaW1hcnktZ2hvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS11bmRvIj48L2k+IFslIFRyYW5zbGF0ZSgiUmVzZXQgRmlsdGVyIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiSW5mbyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlNjaGVkdWxlZCB0aWNrZXRzIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlIFpudW55IERhZW1vbiBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBzY2hlZHVsZS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIERhdGEuU2NoZWR1bGVDb3VudCB8IGh0bWwgJV08L3N0cm9uZz4gWyUgVHJhbnNsYXRlKCJzY2hlZHVsZXMgZm91bmQiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJUaWNrZXQgU2NoZWR1bGVyIikgfCBodG1sICVdPC9oMT4KCiAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsgTmFtZSA9PiBUcmFuc2xhdGUoIlRpY2tldCBTY2hlZHVsZXIiKSB9CiAgICAgICAgXSAlXQogICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2NoZWR1bGUgT3ZlcnZpZXciKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IlNjaGVkdWxlVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXNXBjIj5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdG9yIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIk5leHQgRXhlY3V0aW9uIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkxhc3QgRXhlY3V0aW9uIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzVwYyI+WyUgVHJhbnNsYXRlKCJSdW5zIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzVwYyI+WyUgVHJhbnNsYXRlKCJTdGF0dXMiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXMTVwYyI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2NoZWR1bGVSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IlslIElGIERhdGEuSGFzUldQZXJtaXNzaW9uICVdTWFzdGVyQWN0aW9uIFslIEVORCAlXVslIElGIERhdGEuSGFzRXJyb3IgJV1FcnJvclslIEVORCAlXSIgZGF0YS1zY2hlZHVsZXItaWQ9IlslIERhdGEuSUQgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuVHlwZVRpdGxlKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBbJSBEYXRhLlR5cGVJY29uIHwgaHRtbCAlXSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KWyUgSUYgRGF0YS5IYXNSV1Blcm1pc3Npb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgSUYgRGF0YS5TY2hlZHVsZU1vZGUgPT0gJ3Byb2Nlc3MnICVdQWdlbnRUaWNrZXRTY2hlZHVsZXJQcm9jZXNzWyUgRUxTRSAlXUFnZW50VGlja2V0U2NoZWR1bGVyWyUgRU5EICVdO1N1YmFjdGlvbj1FZGl0O1NjaGVkdWxlcklEPVslIERhdGEuSUQgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlcjtTdWJhY3Rpb249U2hvdztTY2hlZHVsZXJJRD1bJSBEYXRhLklEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KWyUgRU5EICVdClslIElGIERhdGEuSGFzRXJyb3IgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRXJyb3IiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkxhc3QgZXhlY3V0aW9uIGZhaWxlZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuUXVldWVOYW1lIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DcmVhdG9yTmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuTmV4dEV4ZWN1dGlvbiB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+ClslIElGIERhdGEuTGFzdEV4ZWN1dGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFzdEV4ZWN1dGlvbiB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXQpbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQpbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+WyUgRGF0YS5FeGVjdXRpb25Db3VudCB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgpbJSBJRiBEYXRhLklzQWN0aXZlICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlN0YXR1c0JhZGdlIEFjdGl2ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQWN0aXZlIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJTdGF0dXNCYWRnZSBJbmFjdGl2ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW5hY3RpdmUiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkFjdGlvbkljb25zIj4KWyUgSUYgRGF0YS5IYXNSV1Blcm1pc3Npb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgSUYgRGF0YS5TY2hlZHVsZU1vZGUgPT0gJ3Byb2Nlc3MnICVdQWdlbnRUaWNrZXRTY2hlZHVsZXJQcm9jZXNzWyUgRUxTRSAlXUFnZW50VGlja2V0U2NoZWR1bGVyWyUgRU5EICVdO1N1YmFjdGlvbj1FZGl0O1NjaGVkdWxlcklEPVslIERhdGEuSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkVkaXQiKSB8IGh0bWwgJV0iIGNsYXNzPSJBY3Rpb25JY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXBlbmNpbC1zcXVhcmUtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBkYXRhLWFjdGlvbj0iVG9nZ2xlVmFsaWQiIGRhdGEtc2NoZWR1bGVyLWlkPSJbJSBEYXRhLklEIHwgaHRtbCAlXSIgdGl0bGU9IlslIElGIERhdGEuSXNBY3RpdmUgJV1bJSBUcmFuc2xhdGUoIkRlYWN0aXZhdGUiKSB8IGh0bWwgJV1bJSBFTFNFICVdWyUgVHJhbnNsYXRlKCJBY3RpdmF0ZSIpIHwgaHRtbCAlXVslIEVORCAlXSIgY2xhc3M9IkFjdGlvbkljb24gVG9nZ2xlVmFsaWQiPgpbJSBJRiBEYXRhLklzQWN0aXZlICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wYXVzZSI+PC9pPgpbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wbGF5Ij48L2k+ClslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBkYXRhLWFjdGlvbj0iRXhlY3V0ZU5vdyIgZGF0YS1zY2hlZHVsZXItaWQ9IlslIERhdGEuSUQgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJFeGVjdXRlIE5vdyIpIHwgaHRtbCAlXSIgY2xhc3M9IkFjdGlvbkljb24gRXhlY3V0ZU5vdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1ib2x0Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGRhdGEtYWN0aW9uPSJEdXBsaWNhdGUiIGRhdGEtc2NoZWR1bGVyLWlkPSJbJSBEYXRhLklEIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRHVwbGljYXRlIikgfCBodG1sICVdIiBjbGFzcz0iQWN0aW9uSWNvbiBEdXBsaWNhdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlcjtTdWJhY3Rpb249U2hvdztTY2hlZHVsZXJJRD1bJSBEYXRhLklEIHwgdXJpICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJWaWV3IikgfCBodG1sICVdIiBjbGFzcz0iQWN0aW9uSWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1leWUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+ClslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGRhdGEtYWN0aW9uPSJTaG93UHJldmlldyIgZGF0YS1zY2hlZHVsZXItaWQ9IlslIERhdGEuSUQgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJQcmV2aWV3IE5leHQgRXhlY3V0aW9ucyIpIHwgaHRtbCAlXSIgY2xhc3M9IkFjdGlvbkljb24gU2hvd1ByZXZpZXciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2FsZW5kYXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgZGF0YS1hY3Rpb249IlNob3dIaXN0b3J5IiBkYXRhLXNjaGVkdWxlci1pZD0iWyUgRGF0YS5JRCB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgSGlzdG9yeSIpIHwgaHRtbCAlXSIgY2xhc3M9IkFjdGlvbkljb24gU2hvd0hpc3RvcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaGlzdG9yeSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KWyUgSUYgRGF0YS5IYXNSV1Blcm1pc3Npb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBkYXRhLWFjdGlvbj0iRGVsZXRlIiBkYXRhLXNjaGVkdWxlci1pZD0iWyUgRGF0YS5JRCB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSIgY2xhc3M9IkFjdGlvbkljb24gRGVsZXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+ClslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNjaGVkdWxlUm93IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9TY2hlZHVsZXNGb3VuZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI5IiBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIHNjaGVkdWxlcyBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb1NjaGVkdWxlc0ZvdW5kIikgJV0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIFByZXZpZXcgTW9kYWwgLS0+CjxkaXYgaWQ9IlByZXZpZXdNb2RhbCIgY2xhc3M9IkhpZGRlbiI+CiAgICA8ZGl2IGlkPSJQcmV2aWV3Q29udGVudCI+CiAgICAgICAgPHAgY2xhc3M9IkNlbnRlciI+PGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEtc3BpbiI+PC9pPiBbJSBUcmFuc2xhdGUoIkxvYWRpbmcuLi4iKSB8IGh0bWwgJV08L3A+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIEhpc3RvcnkgTW9kYWwgLS0+CjxkaXYgaWQ9Ikhpc3RvcnlNb2RhbCIgY2xhc3M9IkhpZGRlbiI+CiAgICA8ZGl2IGlkPSJIaXN0b3J5Q29udGVudCI+CiAgICAgICAgPHAgY2xhc3M9IkNlbnRlciI+PGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEtc3BpbiI+PC9pPiBbJSBUcmFuc2xhdGUoIkxvYWRpbmcuLi4iKSB8IGh0bWwgJV08L3A+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIERlbGV0ZSBDb25maXJtYXRpb24gRGlhbG9nIC0tPgo8ZGl2IGlkPSJEZWxldGVDb25maXJtRGlhbG9nIiBjbGFzcz0iSGlkZGVuIj4KICAgIDxwPlslIFRyYW5zbGF0ZSgiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNjaGVkdWxlPyIpIHwgaHRtbCAlXTwvcD4KICAgIDxwIGNsYXNzPSJXYXJuaW5nIj5bJSBUcmFuc2xhdGUoIlRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuIikgfCBodG1sICVdPC9wPgo8L2Rpdj4K</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/AgentTicketSchedulerForm.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0IEFjdGlvbnNTaWRlQmFyIFRpY2tldFNjaGVkdWxlckZvcm0iPgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiBBY3Rpb25zU2lkZUJhckNvbXAiPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlciIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy1sZWZ0Ij48L2k+IFslIFRyYW5zbGF0ZSgiQmFjayB0byBPdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDozMDBweDsiPgpbJSBJbnNlcnRUZW1wbGF0ZSgiVGlja2V0U2NoZWR1bGVyL1BsYWNlaG9sZGVycy50dCIpICVdCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8dWwgY2xhc3M9IkJyZWFkQ3J1bWIiPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXIiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRpY2tldCBTY2hlZHVsZXIiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGlja2V0IFNjaGVkdWxlciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtYW5nbGUtcmlnaHQiPjwvaT4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkZvcm1UaXRsZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5Gb3JtVGl0bGUpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgoKICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgbmFtZT0iY29tcG9zZSIgaWQ9IlNjaGVkdWxlckZvcm0iIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRUaWNrZXRTY2hlZHVsZXIiLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2F2ZSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTY2hlZHVsZXJJRCIgdmFsdWU9IlslIERhdGEuU2NoZWR1bGVySUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1JRCIgdmFsdWU9IlslIEVudigiRm9ybUlEIikgJV0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2hhbGxlbmdlVG9rZW4iIHZhbHVlPSJbJSBFbnYoIlVzZXJDaGFsbGVuZ2VUb2tlbiIpIHwgaHRtbCAlXSIvPgoKWyUgSW5zZXJ0VGVtcGxhdGUoIlRpY2tldFNjaGVkdWxlci9CYXNpY0luZm9ybWF0aW9uLnR0IikgJV0KCiAgICAgICAgICAgIDwhLS0gVGlja2V0IFNldHRpbmdzIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJUaWNrZXQgU2V0dGluZ3MiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRpdGxlIiBjbGFzcz0iTWFuZGF0b3J5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJUaXRsZSIgaWQ9IlRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCIgbWF4bGVuZ3RoPSIyNTUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRpdGxlRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiVGlja2V0IHRpdGxlLiBQbGFjZWhvbGRlcnMgbGlrZSBbREFURV0sIFtNT05USF9OQU1FXSBhcmUgc3VwcG9ydGVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlF1ZXVlSUQiIGNsYXNzPSJNYW5kYXRvcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5RdWV1ZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlF1ZXVlSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBJRiBEYXRhLlR5cGVFbmFibGVkICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlR5cGVJRCI+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVHlwZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgRU5EICVdCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDdXN0b21lclVzZXJTZWFyY2giPlslIFRyYW5zbGF0ZSgiQ3VzdG9tZXIiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJDdXN0b21lclVzZXJTZWFyY2giIHZhbHVlPSJbJSBEYXRhLkN1c3RvbWVyVXNlckRpc3BsYXkgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIGF1dG9jb21wbGV0ZT0ib2ZmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDdXN0b21lclVzZXJMb2dpbiIgaWQ9IlNlbGVjdGVkQ3VzdG9tZXJVc2VyIiB2YWx1ZT0iWyUgRGF0YS5DdXN0b21lclVzZXJMb2dpbiB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIkN1c3RvbWVyIHVzZXIgKG9wdGlvbmFsKS4gU3RhcnQgdHlwaW5nIHRvIHNlYXJjaC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJCb2R5Ij5bJSBUcmFuc2xhdGUoIkJvZHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgUmljaFRleHRIb2xkZXIiPgpbJSBJRiBEYXRhLlJpY2hUZXh0RW5hYmxlZCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IkJvZHkiIGlkPSJCb2R5IiByb3dzPSIxNSIgY29scz0iODAiIGNsYXNzPSJSaWNoVGV4dCI+WyUgRGF0YS5Cb2R5IHwgaHRtbCAlXTwvdGV4dGFyZWE+ClslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJCb2R5IiBpZD0iQm9keSIgcm93cz0iMTUiIGNvbHM9IjgwIiBjbGFzcz0iVzEwMHBjIj5bJSBEYXRhLkJvZHkgfCBodG1sICVdPC90ZXh0YXJlYT4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJUaWNrZXQgYm9keS9hcnRpY2xlIGNvbnRlbnQuIFBsYWNlaG9sZGVycyBsaWtlIFtEQVRFXSwgW01PTlRIX05BTUVdIGFyZSBzdXBwb3J0ZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUHJpb3JpdHlJRCI+WyUgVHJhbnNsYXRlKCJQcmlvcml0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlByaW9yaXR5U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRXaWRnZXQiKSAlXQogICAgICAgICAgICA8IS0tIER5bmFtaWMgRmllbGRzIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJEeW5hbWljIEZpZWxkcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRXaWRnZXQiKSAlXQoKWyUgSUYgRGF0YS5DaGVja2xpc3RBdmFpbGFibGUgJV0KICAgICAgICAgICAgPCEtLSBDaGVja2xpc3QgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkNoZWNrbGlzdHMiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiT3B0aW9uYWwiKSB8IGh0bWwgJV0pPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDaGVja2xpc3RUZW1wbGF0ZUlEcyI+WyUgVHJhbnNsYXRlKCJDaGVja2xpc3QgVGVtcGxhdGVzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hlY2tsaXN0U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiQXNzaWduIG9uZSBvciBtb3JlIGNoZWNrbGlzdCB0ZW1wbGF0ZXMgdG8gdGhlIGNyZWF0ZWQgdGlja2V0LiBIb2xkIEN0cmwvQ21kIHRvIHNlbGVjdCBtdWx0aXBsZS4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgRU5EICVdCgogICAgICAgICAgICA8IS0tIFNjaGVkdWxlIFNldHRpbmdzIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTY2hlZHVsZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KWyUgSW5zZXJ0VGVtcGxhdGUoIlRpY2tldFNjaGVkdWxlci9TY2hlZHVsZVNldHRpbmdzLnR0IikgJV0KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKWyUgSW5zZXJ0VGVtcGxhdGUoIlRpY2tldFNjaGVkdWxlci9FbmRPcHRpb25zLnR0IikgJV0KClslIEluc2VydFRlbXBsYXRlKCJUaWNrZXRTY2hlZHVsZXIvUHJldmlldy50dCIpICVdCgpbJSBJbnNlcnRUZW1wbGF0ZSgiVGlja2V0U2NoZWR1bGVyL0Zvcm1CdXR0b25zLnR0IikgJV0KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+Cg==</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/AgentTicketSchedulerProcessForm.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0IEFjdGlvbnNTaWRlQmFyIFRpY2tldFNjaGVkdWxlckZvcm0gVGlja2V0U2NoZWR1bGVyUHJvY2Vzc0Zvcm0iPgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiBBY3Rpb25zU2lkZUJhckNvbXAiPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlciIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy1sZWZ0Ij48L2k+IFslIFRyYW5zbGF0ZSgiQmFjayB0byBPdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkluZm8iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJQcm9jZXNzIHRpY2tldCBzY2hlZHVsaW5nIGFsbG93cyB5b3UgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgcHJvY2VzcyB0aWNrZXRzIGJhc2VkIG9uIGEgc2NoZWR1bGUuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlNlbGVjdCBhIHByb2Nlc3MgdG8gY29uZmlndXJlIHRoZSBBY3Rpdml0eSBEaWFsb2cgZmllbGRzIHRoYXQgd2lsbCBiZSBwcmUtZmlsbGVkIHdoZW4gdGhlIHRpY2tldCBpcyBjcmVhdGVkLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxNXB4OyI+ClslIEluc2VydFRlbXBsYXRlKCJUaWNrZXRTY2hlZHVsZXIvUGxhY2Vob2xkZXJzLnR0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDx1bCBjbGFzcz0iQnJlYWRDcnVtYiI+CiAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlciIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVGlja2V0IFNjaGVkdWxlciIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgU2NoZWR1bGVyIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1hbmdsZS1yaWdodCI+PC9pPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRm9ybVRpdGxlKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkZvcm1UaXRsZSkgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CgogICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBpZD0iUHJvY2Vzc1NjaGVkdWxlckZvcm0iIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRUaWNrZXRTY2hlZHVsZXJQcm9jZXNzIi8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNhdmUiLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU2NoZWR1bGVySUQiIHZhbHVlPSJbJSBEYXRhLlNjaGVkdWxlcklEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGb3JtSUQiIHZhbHVlPSJbJSBFbnYoIkZvcm1JRCIpICVdIi8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNoYWxsZW5nZVRva2VuIiB2YWx1ZT0iWyUgRW52KCJVc2VyQ2hhbGxlbmdlVG9rZW4iKSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9IkFjdGl2aXR5RGlhbG9nRGF0YUpTT04iIHZhbHVlPSJbJSBEYXRhLkFjdGl2aXR5RGlhbG9nRGF0YUpTT04gfCBodG1sICVdIi8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJGaWVsZEVycm9yc0pTT04iIHZhbHVlPSJbJSBEYXRhLkZpZWxkRXJyb3JzSlNPTiB8IGh0bWwgJV0iLz4KClslIEluc2VydFRlbXBsYXRlKCJUaWNrZXRTY2hlZHVsZXIvQmFzaWNJbmZvcm1hdGlvbi50dCIpICVdCgogICAgICAgICAgICA8IS0tIFByb2Nlc3MgU2VsZWN0aW9uIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJQcm9jZXNzIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQcm9jZXNzRW50aXR5SUQiIGNsYXNzPSJNYW5kYXRvcnkiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiUHJvY2VzcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlByb2Nlc3NTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQcm9jZXNzRW50aXR5SURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJTZWxlY3QgdGhlIHByb2Nlc3MgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHRpY2tldC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3Rpdml0eSBEaWFsb2cgRmllbGRzIENvbnRhaW5lciAobG9hZGVkIHZpYSBBSkFYKSAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3Rpdml0eURpYWxvZ0ZpZWxkc0NvbnRhaW5lciIgY2xhc3M9IkFjdGl2aXR5RGlhbG9nRmllbGRzQ29udGFpbmVyIiBzdHlsZT0ibWFyZ2luOiAyMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1lc3NhZ2VCb3ggSW5mbyIgaWQ9Ik5vUHJvY2Vzc1NlbGVjdGVkTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4gWyUgVHJhbnNsYXRlKCJTZWxlY3QgYSBwcm9jZXNzIHRvIGNvbmZpZ3VyZSB0aGUgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTY2hlZHVsZSBTZXR0aW5ncyAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2NoZWR1bGUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+ClslIEluc2VydFRlbXBsYXRlKCJUaWNrZXRTY2hlZHVsZXIvU2NoZWR1bGVTZXR0aW5ncy50dCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIEluc2VydFRlbXBsYXRlKCJUaWNrZXRTY2hlZHVsZXIvRW5kT3B0aW9ucy50dCIpICVdCgpbJSBJbnNlcnRUZW1wbGF0ZSgiVGlja2V0U2NoZWR1bGVyL1ByZXZpZXcudHQiKSAlXQoKWyUgSW5zZXJ0VGVtcGxhdGUoIlRpY2tldFNjaGVkdWxlci9Gb3JtQnV0dG9ucy50dCIpICVdCgogICAgICAgIDwvZm9ybT4KICAgIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gTG9hZGluZyBpbmRpY2F0b3IgZm9yIEFKQVggLS0+CjxkaXYgaWQ9IkFKQVhMb2FkaW5nIiBjbGFzcz0iSGlkZGVuIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAyMHB4OyI+CiAgICA8aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIGZhLTJ4Ij48L2k+CiAgICA8cD5bJSBUcmFuc2xhdGUoIkxvYWRpbmcuLi4iKSB8IGh0bWwgJV08L3A+CjwvZGl2Pgo=</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/TicketScheduler/BasicInformation.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIFNoYXJlZCB0ZW1wbGF0ZSBmb3IgYmFzaWMgaW5mb3JtYXRpb24gKHVzZWQgYnkgYm90aCBub3JtYWwgYW5kIHByb2Nlc3MgdGlja2V0IHNjaGVkdWxlcikKCiAgICAgICAgICAgIDwhLS0gQmFzaWMgSW5mb3JtYXRpb24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkJhc2ljIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIiBjbGFzcz0iTWFuZGF0b3J5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiU2NoZWR1bGUgTmFtZSIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIiBtYXhsZW5ndGg9IjI1NSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJJbnRlcm5hbCBuYW1lIGZvciB0aGlzIHNjaGVkdWxlLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiU3RhdHVzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4K</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/TicketScheduler/EndOptions.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIFNoYXJlZCB0ZW1wbGF0ZSBmb3IgZW5kIG9wdGlvbnMgKHVzZWQgYnkgYm90aCBub3JtYWwgYW5kIHByb2Nlc3MgdGlja2V0IHNjaGVkdWxlcikKCiAgICAgICAgICAgIDwhLS0gRW5kIE9wdGlvbnMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkVuZCBPcHRpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJFbmRUeXBlIj5bJSBUcmFuc2xhdGUoIkVuZCBDb25kaXRpb24iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5FbmRUeXBlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iT2NjdXJyZW5jZXNTZXR0aW5ncyIgY2xhc3M9IkVuZFR5cGVTZXR0aW5nc1slIElGIERhdGEuRW5kVHlwZSAhPSAnb2NjdXJyZW5jZXMnICVdIEhpZGRlblslIEVORCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJNYXhPY2N1cnJlbmNlcyI+WyUgVHJhbnNsYXRlKCJNYXhpbXVtIEV4ZWN1dGlvbnMiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJNYXhPY2N1cnJlbmNlcyIgaWQ9Ik1heE9jY3VycmVuY2VzIiB2YWx1ZT0iWyUgRGF0YS5NYXhPY2N1cnJlbmNlcyB8IGh0bWwgJV0iIGNsYXNzPSJXMTBwYyIgbWluPSIxIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJEYXRlU2V0dGluZ3MiIGNsYXNzPSJFbmRUeXBlU2V0dGluZ3NbJSBJRiBEYXRhLkVuZFR5cGUgIT0gJ2RhdGUnICVdIEhpZGRlblslIEVORCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJFbmQgRGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjaGVkdWxlckRhdGVTZWxlY3Rpb24iIHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MDttYXJnaW4tcmlnaHQ6YXV0bzsiPlslIERhdGEuRW5kRGF0ZVN0cmcgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJObyBtb3JlIHRpY2tldHMgd2lsbCBiZSBjcmVhdGVkIGFmdGVyIHRoaXMgZGF0ZS4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4K</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/TicketScheduler/FormButtons.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIFNoYXJlZCB0ZW1wbGF0ZSBmb3IgZm9ybSBidXR0b25zICh1c2VkIGJ5IGJvdGggbm9ybWFsIGFuZCBwcm9jZXNzIHRpY2tldCBzY2hlZHVsZXIpCgogICAgICAgICAgICA8IS0tIEZvcm0gQnV0dG9ucyAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCBTYXZlQnV0dG9ucyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXIiIGNsYXNzPSJidG4tY2FuY2VsLWdob3N0IGJ0bi1tYWluIGJ0bi13aWR0aC1tZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkgYnRuLXByaW1hcnkgYnRuLW1haW4gYnRuLXdpZHRoLW1kIiB0eXBlPSJzdWJtaXQiIGlkPSJTdWJtaXRCdXR0b24iIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUgYW5kIGZpbmlzaCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+Cg==</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/TicketScheduler/Placeholders.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIFNoYXJlZCB0ZW1wbGF0ZSBmb3IgcGxhY2Vob2xkZXJzIHdpZGdldCAodXNlZCBieSBib3RoIG5vcm1hbCBhbmQgcHJvY2VzcyB0aWNrZXQgc2NoZWR1bGVyKQoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUGxhY2Vob2xkZXJzIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iIHN0eWxlPSJtYXJnaW4tYm90dG9tOjhweDtjb2xvcjojNjY2O2ZvbnQtc2l6ZToxMnB4OyI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJGb3IgVGl0bGUgYW5kIHRleHQgZmllbGRzLiBDbGljayB0byBjb3B5LiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGxhY2Vob2xkZXJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJQbGFjZWhvbGRlckl0ZW0iIG9uY2xpY2s9Im5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KCdbREFURV0nKTt0aGlzLnN0eWxlLmJhY2tncm91bmQ9JyNmZmYzZTAnO3RoaXMuc3R5bGUuYm9yZGVyQ29sb3I9JyNmZjk4MDAnO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1EQVRFXScpLnN0eWxlLmJhY2tncm91bmQ9JyNmNWY1ZjUnO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPURBVEVdJykuc3R5bGUuYm9yZGVyQ29sb3I9JyNkZGQnO30sNDAwKTsiIGRhdGEtcGg9IkRBVEUiIHN0eWxlPSJwYWRkaW5nOjVweCA4cHg7bWFyZ2luLWJvdHRvbTo0cHg7YmFja2dyb3VuZDojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MXB4IDVweDtib3JkZXItcmFkaXVzOjJweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzE1NjVjMDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ij5bREFURV08L2NvZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2xpcGJvYXJkIiBzdHlsZT0iY29sb3I6Izk5OTtmb250LXNpemU6MTFweDsiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7bWFyZ2luLXRvcDoycHg7Ij5bJSBUcmFuc2xhdGUoIkRhdGUiKSB8IGh0bWwgJV0gKFlZWVktTU0tREQpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGxhY2Vob2xkZXJJdGVtIiBvbmNsaWNrPSJuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnW0RBVEVfREVdJyk7dGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmM2UwJzt0aGlzLnN0eWxlLmJvcmRlckNvbG9yPScjZmY5ODAwJztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9REFURV9ERV0nKS5zdHlsZS5iYWNrZ3JvdW5kPScjZjVmNWY1Jztkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1EQVRFX0RFXScpLnN0eWxlLmJvcmRlckNvbG9yPScjZGRkJzt9LDQwMCk7IiBkYXRhLXBoPSJEQVRFX0RFIiBzdHlsZT0icGFkZGluZzo1cHggOHB4O21hcmdpbi1ib3R0b206NHB4O2JhY2tncm91bmQ6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjFweCA1cHg7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxNTY1YzA7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwOyI+W0RBVEVfREVdPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNsaXBib2FyZCIgc3R5bGU9ImNvbG9yOiM5OTk7Zm9udC1zaXplOjExcHg7Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojNjY2O21hcmdpbi10b3A6MnB4OyI+WyUgVHJhbnNsYXRlKCJEYXRlIikgfCBodG1sICVdIChERC5NTS5ZWVlZKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlBsYWNlaG9sZGVySXRlbSIgb25jbGljaz0ibmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoJ1tUSU1FXScpO3RoaXMuc3R5bGUuYmFja2dyb3VuZD0nI2ZmZjNlMCc7dGhpcy5zdHlsZS5ib3JkZXJDb2xvcj0nI2ZmOTgwMCc7c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPVRJTUVdJykuc3R5bGUuYmFja2dyb3VuZD0nI2Y1ZjVmNSc7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9VElNRV0nKS5zdHlsZS5ib3JkZXJDb2xvcj0nI2RkZCc7fSw0MDApOyIgZGF0YS1waD0iVElNRSIgc3R5bGU9InBhZGRpbmc6NXB4IDhweDttYXJnaW4tYm90dG9tOjRweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxcHggNXB4O2JvcmRlci1yYWRpdXM6MnB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMTU2NWMwO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDsiPltUSU1FXTwvY29kZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jbGlwYm9hcmQiIHN0eWxlPSJjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMXB4OyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6IzY2NjttYXJnaW4tdG9wOjJweDsiPlslIFRyYW5zbGF0ZSgiVGltZSIpIHwgaHRtbCAlXSAoSEg6TU0pPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGxhY2Vob2xkZXJJdGVtIiBvbmNsaWNrPSJuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnW0RBVEVUSU1FXScpO3RoaXMuc3R5bGUuYmFja2dyb3VuZD0nI2ZmZjNlMCc7dGhpcy5zdHlsZS5ib3JkZXJDb2xvcj0nI2ZmOTgwMCc7c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPURBVEVUSU1FXScpLnN0eWxlLmJhY2tncm91bmQ9JyNmNWY1ZjUnO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPURBVEVUSU1FXScpLnN0eWxlLmJvcmRlckNvbG9yPScjZGRkJzt9LDQwMCk7IiBkYXRhLXBoPSJEQVRFVElNRSIgc3R5bGU9InBhZGRpbmc6NXB4IDhweDttYXJnaW4tYm90dG9tOjRweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxcHggNXB4O2JvcmRlci1yYWRpdXM6MnB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMTU2NWMwO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDsiPltEQVRFVElNRV08L2NvZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2xpcGJvYXJkIiBzdHlsZT0iY29sb3I6Izk5OTtmb250LXNpemU6MTFweDsiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7bWFyZ2luLXRvcDoycHg7Ij5bJSBUcmFuc2xhdGUoIkRhdGUgKyBUaW1lIikgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGxhY2Vob2xkZXJJdGVtIiBvbmNsaWNrPSJuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnW1lFQVJdJyk7dGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmM2UwJzt0aGlzLnN0eWxlLmJvcmRlckNvbG9yPScjZmY5ODAwJztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9WUVBUl0nKS5zdHlsZS5iYWNrZ3JvdW5kPScjZjVmNWY1Jztkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1ZRUFSXScpLnN0eWxlLmJvcmRlckNvbG9yPScjZGRkJzt9LDQwMCk7IiBkYXRhLXBoPSJZRUFSIiBzdHlsZT0icGFkZGluZzo1cHggOHB4O21hcmdpbi1ib3R0b206NHB4O2JhY2tncm91bmQ6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjFweCA1cHg7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxNTY1YzA7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwOyI+W1lFQVJdPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNsaXBib2FyZCIgc3R5bGU9ImNvbG9yOiM5OTk7Zm9udC1zaXplOjExcHg7Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojNjY2O21hcmdpbi10b3A6MnB4OyI+WyUgVHJhbnNsYXRlKCJZZWFyIikgfCBodG1sICVdIChZWVlZKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlBsYWNlaG9sZGVySXRlbSIgb25jbGljaz0ibmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoJ1tNT05USF0nKTt0aGlzLnN0eWxlLmJhY2tncm91bmQ9JyNmZmYzZTAnO3RoaXMuc3R5bGUuYm9yZGVyQ29sb3I9JyNmZjk4MDAnO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1NT05USF0nKS5zdHlsZS5iYWNrZ3JvdW5kPScjZjVmNWY1Jztkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1NT05USF0nKS5zdHlsZS5ib3JkZXJDb2xvcj0nI2RkZCc7fSw0MDApOyIgZGF0YS1waD0iTU9OVEgiIHN0eWxlPSJwYWRkaW5nOjVweCA4cHg7bWFyZ2luLWJvdHRvbTo0cHg7YmFja2dyb3VuZDojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MXB4IDVweDtib3JkZXItcmFkaXVzOjJweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzE1NjVjMDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ij5bTU9OVEhdPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNsaXBib2FyZCIgc3R5bGU9ImNvbG9yOiM5OTk7Zm9udC1zaXplOjExcHg7Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojNjY2O21hcmdpbi10b3A6MnB4OyI+WyUgVHJhbnNsYXRlKCJNb250aCIpIHwgaHRtbCAlXSAoMDEtMTIpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGxhY2Vob2xkZXJJdGVtIiBvbmNsaWNrPSJuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnW01PTlRIX05BTUVdJyk7dGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmM2UwJzt0aGlzLnN0eWxlLmJvcmRlckNvbG9yPScjZmY5ODAwJztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9TU9OVEhfTkFNRV0nKS5zdHlsZS5iYWNrZ3JvdW5kPScjZjVmNWY1Jztkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1NT05USF9OQU1FXScpLnN0eWxlLmJvcmRlckNvbG9yPScjZGRkJzt9LDQwMCk7IiBkYXRhLXBoPSJNT05USF9OQU1FIiBzdHlsZT0icGFkZGluZzo1cHggOHB4O21hcmdpbi1ib3R0b206NHB4O2JhY2tncm91bmQ6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjFweCA1cHg7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxNTY1YzA7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwOyI+W01PTlRIX05BTUVdPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNsaXBib2FyZCIgc3R5bGU9ImNvbG9yOiM5OTk7Zm9udC1zaXplOjExcHg7Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojNjY2O21hcmdpbi10b3A6MnB4OyI+WyUgVHJhbnNsYXRlKCJNb250aCBOYW1lIikgfCBodG1sICVdIChFTik8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJQbGFjZWhvbGRlckl0ZW0iIG9uY2xpY2s9Im5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KCdbTU9OVEhfTkFNRV9ERV0nKTt0aGlzLnN0eWxlLmJhY2tncm91bmQ9JyNmZmYzZTAnO3RoaXMuc3R5bGUuYm9yZGVyQ29sb3I9JyNmZjk4MDAnO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1NT05USF9OQU1FX0RFXScpLnN0eWxlLmJhY2tncm91bmQ9JyNmNWY1ZjUnO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPU1PTlRIX05BTUVfREVdJykuc3R5bGUuYm9yZGVyQ29sb3I9JyNkZGQnO30sNDAwKTsiIGRhdGEtcGg9Ik1PTlRIX05BTUVfREUiIHN0eWxlPSJwYWRkaW5nOjVweCA4cHg7bWFyZ2luLWJvdHRvbTo0cHg7YmFja2dyb3VuZDojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MXB4IDVweDtib3JkZXItcmFkaXVzOjJweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzE1NjVjMDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ij5bTU9OVEhfTkFNRV9ERV08L2NvZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2xpcGJvYXJkIiBzdHlsZT0iY29sb3I6Izk5OTtmb250LXNpemU6MTFweDsiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7bWFyZ2luLXRvcDoycHg7Ij5bJSBUcmFuc2xhdGUoIk1vbnRoIE5hbWUiKSB8IGh0bWwgJV0gKERFKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlBsYWNlaG9sZGVySXRlbSIgb25jbGljaz0ibmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoJ1tEQVldJyk7dGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmM2UwJzt0aGlzLnN0eWxlLmJvcmRlckNvbG9yPScjZmY5ODAwJztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9REFZXScpLnN0eWxlLmJhY2tncm91bmQ9JyNmNWY1ZjUnO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPURBWV0nKS5zdHlsZS5ib3JkZXJDb2xvcj0nI2RkZCc7fSw0MDApOyIgZGF0YS1waD0iREFZIiBzdHlsZT0icGFkZGluZzo1cHggOHB4O21hcmdpbi1ib3R0b206NHB4O2JhY2tncm91bmQ6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjFweCA1cHg7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxNTY1YzA7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwOyI+W0RBWV08L2NvZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2xpcGJvYXJkIiBzdHlsZT0iY29sb3I6Izk5OTtmb250LXNpemU6MTFweDsiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7bWFyZ2luLXRvcDoycHg7Ij5bJSBUcmFuc2xhdGUoIkRheSIpIHwgaHRtbCAlXSAoMDEtMzEpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGxhY2Vob2xkZXJJdGVtIiBvbmNsaWNrPSJuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnW1dFRUtEQVldJyk7dGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmM2UwJzt0aGlzLnN0eWxlLmJvcmRlckNvbG9yPScjZmY5ODAwJztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9V0VFS0RBWV0nKS5zdHlsZS5iYWNrZ3JvdW5kPScjZjVmNWY1Jztkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1XRUVLREFZXScpLnN0eWxlLmJvcmRlckNvbG9yPScjZGRkJzt9LDQwMCk7IiBkYXRhLXBoPSJXRUVLREFZIiBzdHlsZT0icGFkZGluZzo1cHggOHB4O21hcmdpbi1ib3R0b206NHB4O2JhY2tncm91bmQ6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjFweCA1cHg7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxNTY1YzA7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwOyI+W1dFRUtEQVldPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNsaXBib2FyZCIgc3R5bGU9ImNvbG9yOiM5OTk7Zm9udC1zaXplOjExcHg7Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojNjY2O21hcmdpbi10b3A6MnB4OyI+WyUgVHJhbnNsYXRlKCJXZWVrZGF5IikgfCBodG1sICVdIChFTik8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJQbGFjZWhvbGRlckl0ZW0iIG9uY2xpY2s9Im5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KCdbV0VFS0RBWV9ERV0nKTt0aGlzLnN0eWxlLmJhY2tncm91bmQ9JyNmZmYzZTAnO3RoaXMuc3R5bGUuYm9yZGVyQ29sb3I9JyNmZjk4MDAnO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1XRUVLREFZX0RFXScpLnN0eWxlLmJhY2tncm91bmQ9JyNmNWY1ZjUnO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPVdFRUtEQVlfREVdJykuc3R5bGUuYm9yZGVyQ29sb3I9JyNkZGQnO30sNDAwKTsiIGRhdGEtcGg9IldFRUtEQVlfREUiIHN0eWxlPSJwYWRkaW5nOjVweCA4cHg7bWFyZ2luLWJvdHRvbTo0cHg7YmFja2dyb3VuZDojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MXB4IDVweDtib3JkZXItcmFkaXVzOjJweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzE1NjVjMDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ij5bV0VFS0RBWV9ERV08L2NvZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2xpcGJvYXJkIiBzdHlsZT0iY29sb3I6Izk5OTtmb250LXNpemU6MTFweDsiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7bWFyZ2luLXRvcDoycHg7Ij5bJSBUcmFuc2xhdGUoIldlZWtkYXkiKSB8IGh0bWwgJV0gKERFKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlBsYWNlaG9sZGVySXRlbSIgb25jbGljaz0ibmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoJ1tXRUVLXScpO3RoaXMuc3R5bGUuYmFja2dyb3VuZD0nI2ZmZjNlMCc7dGhpcy5zdHlsZS5ib3JkZXJDb2xvcj0nI2ZmOTgwMCc7c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBoPVdFRUtdJykuc3R5bGUuYmFja2dyb3VuZD0nI2Y1ZjVmNSc7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9V0VFS10nKS5zdHlsZS5ib3JkZXJDb2xvcj0nI2RkZCc7fSw0MDApOyIgZGF0YS1waD0iV0VFSyIgc3R5bGU9InBhZGRpbmc6NXB4IDhweDttYXJnaW4tYm90dG9tOjRweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxcHggNXB4O2JvcmRlci1yYWRpdXM6MnB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMTU2NWMwO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDsiPltXRUVLXTwvY29kZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jbGlwYm9hcmQiIHN0eWxlPSJjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMXB4OyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6IzY2NjttYXJnaW4tdG9wOjJweDsiPlslIFRyYW5zbGF0ZSgiV2VlayIpIHwgaHRtbCAlXSAoMDEtNTMpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGxhY2Vob2xkZXJJdGVtIiBvbmNsaWNrPSJuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgnW1FVQVJURVJdJyk7dGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmM2UwJzt0aGlzLnN0eWxlLmJvcmRlckNvbG9yPScjZmY5ODAwJztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGg9UVVBUlRFUl0nKS5zdHlsZS5iYWNrZ3JvdW5kPScjZjVmNWY1Jztkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1waD1RVUFSVEVSXScpLnN0eWxlLmJvcmRlckNvbG9yPScjZGRkJzt9LDQwMCk7IiBkYXRhLXBoPSJRVUFSVEVSIiBzdHlsZT0icGFkZGluZzo1cHggOHB4O21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxcHggNXB4O2JvcmRlci1yYWRpdXM6MnB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMTU2NWMwO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDsiPltRVUFSVEVSXTwvY29kZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jbGlwYm9hcmQiIHN0eWxlPSJjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMXB4OyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6IzY2NjttYXJnaW4tdG9wOjJweDsiPlslIFRyYW5zbGF0ZSgiUXVhcnRlciIpIHwgaHRtbCAlXSAoUTEtUTQpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+Cg==</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/TicketScheduler/Preview.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIFNoYXJlZCB0ZW1wbGF0ZSBmb3IgcHJldmlldyBzZWN0aW9uICh1c2VkIGJ5IGJvdGggbm9ybWFsIGFuZCBwcm9jZXNzIHRpY2tldCBzY2hlZHVsZXIpCgogICAgICAgICAgICA8IS0tIFByZXZpZXcgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlByZXZpZXciKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iUHJldmlld0J1dHRvbiIgY2xhc3M9ImJ0bi1jYW5jZWwtZ2hvc3QgYnRuLW1haW4iIHN0eWxlPSJtaW4td2lkdGg6IDE1MHB4OyBtYXgtd2lkdGg6IDI1MHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhbGVuZGFyIj48L2k+IFslIFRyYW5zbGF0ZSgiU2hvdyBOZXh0IEV4ZWN1dGlvbnMiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlByZXZpZXdSZXN1bHRzIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlslIFRyYW5zbGF0ZSgiTmV4dCA1IHNjaGVkdWxlZCBleGVjdXRpb25zOiIpIHwgaHRtbCAlXTwvaDQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0iUHJldmlld0xpc3QiPjwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+Cg==</File>
        <File Permission="660" Location="Kernel/Output/HTML/Templates/Standard/TicketScheduler/ScheduleSettings.tt" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIFNoYXJlZCB0ZW1wbGF0ZSBmb3Igc2NoZWR1bGUgc2V0dGluZ3MgKHVzZWQgYnkgYm90aCBub3JtYWwgYW5kIHByb2Nlc3MgdGlja2V0IHNjaGVkdWxlcikKCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGFlbW9uIEluZm8gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjaGVkdWxlckRhZW1vbkluZm8iIHN0eWxlPSJiYWNrZ3JvdW5kOiNlM2YyZmQ7Ym9yZGVyOjFweCBzb2xpZCAjOTBjYWY5O2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MTBweCAxNXB4O21hcmdpbi1ib3R0b206MTVweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjowO2NvbG9yOiMxNTY1YzA7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTo8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRpY2tldCBjcmVhdGlvbiBkZXBlbmRzIG9uIHRoZSBabnVueSBEYWVtb24uIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFslIFRyYW5zbGF0ZSgiQ2hlY2sgaW50ZXJ2YWwiKSB8IGh0bWwgJV06IDxzdHJvbmc+WyUgVHJhbnNsYXRlKERhdGEuRGFlbW9uU2NoZWR1bGVUZXh0KSB8IGh0bWwgJV08L3N0cm9uZz4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IkRhZW1vbkluZm9EZXRhaWxzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6OHB4O2NvbG9yOiMxNTY1YzA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXNpemU6aW5oZXJpdDsiPlslIFRyYW5zbGF0ZSgiRGV0YWlscyIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGFlbW9uIEluZm8gRGlhbG9nIChoaWRkZW4pIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJEYWVtb25JbmZvRGlhbG9nIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IklubmVyQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGUgWm51bnkgRGFlbW9uIHJ1bnMgYXMgYSBjb250aW51b3VzIGJhY2tncm91bmQgcHJvY2VzcyBhbmQgcmVndWxhcmx5IGNoZWNrcyB3aGV0aGVyIHRpY2tldHMgbmVlZCB0byBiZSBjcmVhdGVkLiIpIHwgaHRtbCAlXTwvcD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz0iU3BhY2luZ1RvcCI+WyUgVHJhbnNsYXRlKCJDdXJyZW50IGNoZWNrIGludGVydmFsIikgfCBodG1sICVdPC9sZWdlbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSW5mb1BhcmFncmFwaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlslIFRyYW5zbGF0ZSgiSW50ZXJ2YWwiKSB8IGh0bWwgJV06PC9zdHJvbmc+IFslIFRyYW5zbGF0ZShEYXRhLkRhZW1vblNjaGVkdWxlVGV4dCkgfCBodG1sICVdPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlslIFRyYW5zbGF0ZSgiQ3JvbiBleHByZXNzaW9uIikgfCBodG1sICVdOjwvc3Ryb25nPiA8Y29kZT5bJSBEYXRhLkRhZW1vblNjaGVkdWxlIHwgaHRtbCAlXTwvY29kZT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKWyUgSUYgRGF0YS5Jc0FkbWluICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz0iU3BhY2luZ1RvcCI+WyUgVHJhbnNsYXRlKCJBZGp1c3QgaW50ZXJ2YWwiKSB8IGh0bWwgJV08L2xlZ2VuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJJbmZvUGFyYWdyYXBoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGUgaW50ZXJ2YWwgY2FuIGJlIGFkanVzdGVkIGluIFN5c0NvbmZpZy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiRm9yIG1pbnV0ZS1hY2N1cmF0ZSBleGVjdXRpb24sIHNldCIpIHwgaHRtbCAlXTogPGNvZGU+KiAqICogKiAqPC9jb2RlPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFkbWluU3lzdGVtQ29uZmlndXJhdGlvbjtTdWJhY3Rpb249VmlldztTZXR0aW5nPURhZW1vbiUzQSUzQVNjaGVkdWxlckNyb25UYXNrTWFuYWdlciUzQSUzQVRhc2slMjMlMjMlMjNUaWNrZXRTY2hlZHVsZXJSdW4iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBidG4tbWFpbiBidG4tcHJpbWFyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPiBbJSBUcmFuc2xhdGUoIk9wZW4gU3lzQ29uZmlnIHNldHRpbmciKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz0iU3BhY2luZ1RvcCI+WyUgVHJhbnNsYXRlKCJDaGVjayBEYWVtb24gc3RhdHVzIikgfCBodG1sICVdPC9sZWdlbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSW5mb1BhcmFncmFwaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmJpbi96bnVueS5EYWVtb24ucGwgc3RhdHVzPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNjaGVkdWxlVHlwZSI+WyUgVHJhbnNsYXRlKCJTY2hlZHVsZSBUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU2NoZWR1bGVUeXBlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiU2VsZWN0IGhvdyBvZnRlbiB0aGUgdGlja2V0IHNob3VsZCBiZSBjcmVhdGVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGltZSBTZXR0aW5ncyAoc2hvd24gZm9yIGFsbCB0eXBlcykgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRpbWVTZXR0aW5ncyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJFeGVjdXRpb24gVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjaGVkdWxlclRpbWVTZWxlY3Rpb24iIHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O21hcmdpbi1yaWdodDphdXRvOyI+WyUgRGF0YS5UaW1lSG91clN0cmcgJV08c3BhbiBjbGFzcz0iRmllbGRTdWZmaXgiPjo8L3NwYW4+WyUgRGF0YS5UaW1lTWludXRlU3RyZyAlXTxzcGFuIGNsYXNzPSJGaWVsZFN1ZmZpeCI+WyUgVHJhbnNsYXRlKCJoIikgfCBodG1sICVdPC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlRpbWUgd2hlbiB0aGUgdGlja2V0IHdpbGwgYmUgY3JlYXRlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUaW1lem9uZSI+WyUgVHJhbnNsYXRlKCJUaW1lem9uZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDphdXRvOyI+WyUgRGF0YS5UaW1lem9uZVN0cmcgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2Vla2x5IHNldHRpbmdzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJXZWVrbHlTZXR0aW5ncyIgY2xhc3M9IlNjaGVkdWxlVHlwZVNldHRpbmdzWyUgSUYgRGF0YS5TY2hlZHVsZVR5cGUgIT0gJ3dlZWtseScgJV0gSGlkZGVuWyUgRU5EICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIldlZWtkYXlzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJXZWVrZGF5Q2hlY2tib3hlcyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIldlZWtkYXlDaGVja2JveCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iV2Vla2RheUxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IldlZWtkYXlzIiB2YWx1ZT0iWyUgRGF0YS5EYXkgfCBodG1sICVdIiBbJSBEYXRhLkNoZWNrZWQgJV0vPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLkRheU5hbWUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIldlZWtkYXlDaGVja2JveCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTW9udGhseSBEYXkgc2V0dGluZ3MgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik1vbnRobHlEYXlTZXR0aW5ncyIgY2xhc3M9IlNjaGVkdWxlVHlwZVNldHRpbmdzWyUgSUYgRGF0YS5TY2hlZHVsZVR5cGUgIT0gJ21vbnRobHlfZGF5JyAmJiBEYXRhLlNjaGVkdWxlVHlwZSAhPSAneWVhcmx5JyAlXSBIaWRkZW5bJSBFTkQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRGF5Ij5bJSBUcmFuc2xhdGUoIkRheSBvZiBNb250aCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRGF5U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRheVdhcm5pbmciIGNsYXNzPSJIaWRkZW4iIHN0eWxlPSJtYXJnaW4tdG9wOiA0cHg7IHBhZGRpbmc6IDRweCA4cHg7IGJhY2tncm91bmQ6ICNmZmY4ZTE7IGJvcmRlcjogMXB4IHNvbGlkICNmZmUwODI7IGJvcmRlci1yYWRpdXM6IDNweDsgY29sb3I6ICM3OTU1NDg7IGZvbnQtc2l6ZTogMTFweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTo8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IkRheVdhcm5pbmdUZXh0Ij48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1vbnRobHkgV2Vla2RheSBzZXR0aW5ncyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTW9udGhseVdlZWtkYXlTZXR0aW5ncyIgY2xhc3M9IlNjaGVkdWxlVHlwZVNldHRpbmdzWyUgSUYgRGF0YS5TY2hlZHVsZVR5cGUgIT0gJ21vbnRobHlfd2Vla2RheScgJiYgRGF0YS5TY2hlZHVsZVR5cGUgIT0gJ21vbnRobHlfd2Vla2RheV9vZmZzZXQnICVdIEhpZGRlblslIEVORCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOdGgiPlslIFRyYW5zbGF0ZSgiT2NjdXJyZW5jZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTnRoU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuV2Vla2RheVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRmllbGRTdWZmaXgiPlslIFRyYW5zbGF0ZSgib2YgdGhlIG1vbnRoIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNb250aGx5IFdlZWtkYXkgT2Zmc2V0IHNldHRpbmdzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJNb250aGx5V2Vla2RheU9mZnNldFNldHRpbmdzIiBjbGFzcz0iU2NoZWR1bGVUeXBlU2V0dGluZ3NbJSBJRiBEYXRhLlNjaGVkdWxlVHlwZSAhPSAnbW9udGhseV93ZWVrZGF5X29mZnNldCcgJV0gSGlkZGVuWyUgRU5EICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik9mZnNldERheXMiPlslIFRyYW5zbGF0ZSgiRGF5cyBPZmZzZXQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJPZmZzZXREYXlzIiBpZD0iT2Zmc2V0RGF5cyIgdmFsdWU9IlslIERhdGEuT2Zmc2V0RGF5cyB8IGh0bWwgJV0iIGNsYXNzPSJXMTBwYyIgbWluPSItMzAiIG1heD0iMzAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRmllbGRTdWZmaXgiPlslIFRyYW5zbGF0ZSgiZGF5cyBhZnRlciB0aGUgb2NjdXJyZW5jZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJOZWdhdGl2ZSB2YWx1ZXMgPSBkYXlzIGJlZm9yZS4gRS5nLiAtMyA9IDMgZGF5cyBiZWZvcmUgdGhlIHNlbGVjdGVkIHdlZWtkYXkuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBZZWFybHkgc2V0dGluZ3MgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlllYXJseVNldHRpbmdzIiBjbGFzcz0iU2NoZWR1bGVUeXBlU2V0dGluZ3NbJSBJRiBEYXRhLlNjaGVkdWxlVHlwZSAhPSAneWVhcmx5JyAlXSBIaWRkZW5bJSBFTkQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTW9udGgiPlslIFRyYW5zbGF0ZSgiTW9udGgiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vbnRoU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbnRlcnZhbCBzZXR0aW5ncyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iSW50ZXJ2YWxTZXR0aW5ncyIgY2xhc3M9IlNjaGVkdWxlVHlwZVNldHRpbmdzWyUgSUYgRGF0YS5TY2hlZHVsZVR5cGUgIT0gJ2ludGVydmFsJyAlXSBIaWRkZW5bJSBFTkQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW50ZXJ2YWwiPlslIFRyYW5zbGF0ZSgiSW50ZXJ2YWwiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NXB4O21hcmdpbi1yaWdodDphdXRvOyI+PGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iSW50ZXJ2YWwiIGlkPSJJbnRlcnZhbCIgdmFsdWU9IlslIERhdGEuSW50ZXJ2YWwgfCBodG1sICVdIiBjbGFzcz0iVzEwcGMiIG1pbj0iMSIgbWF4PSIzNjUiLz48c3BhbiBjbGFzcz0iRmllbGRTdWZmaXgiPlslIFRyYW5zbGF0ZSgiZGF5cyIpIHwgaHRtbCAlXTwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlN0YXJ0IERhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTY2hlZHVsZXJEYXRlU2VsZWN0aW9uIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjA7bWFyZ2luLXJpZ2h0OmF1dG87Ij5bJSBEYXRhLlN0YXJ0RGF0ZVN0cmcgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJGaXJzdCBleGVjdXRpb24gZGF0ZSBmb3IgdGhlIGludGVydmFsIHNjaGVkdWxlLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4K</File>

        <!-- SysConfig -->
        <File Permission="660" Location="Kernel/Config/Files/XML/TicketScheduler.xml" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iQXBwbGljYXRpb24iPgoKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gQ29yZSBTZXR0aW5ncyAtLT4KICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KCiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXRTY2hlZHVsZXI6OkVuYWJsZWQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlIG9yIGRpc2FibGUgdGhlIFRpY2tldFNjaGVkdWxlciBmZWF0dXJlIGdsb2JhbGx5LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6VGlja2V0U2NoZWR1bGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldFNjaGVkdWxlcjo6RGVmYXVsdFRpbWV6b25lIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgdGltZXpvbmUgZm9yIG5ldyB0aWNrZXQgc2NoZWR1bGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6VGlja2V0U2NoZWR1bGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+RXVyb3BlL0JlcmxpbjwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldFNjaGVkdWxlcjo6TWF4SGlzdG9yeUVudHJpZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBlbnRyaWVzIHRvIGtlZXAgcGVyIHNjaGVkdWxlLiAwID0gdW5saW1pdGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6VGlja2V0U2NoZWR1bGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9Il5cZCokIj4wPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0U2NoZWR1bGVyOjpMb2dTdWNjZXNzZnVsRXhlY3V0aW9ucyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2cgc3VjY2Vzc2Z1bCB0aWNrZXQgY3JlYXRpb25zIHRvIHN5c3RlbSBsb2cuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpUaWNrZXRTY2hlZHVsZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4wPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgPCEtLSBGcm9udGVuZCBNb2R1bGU6IEFnZW50VGlja2V0U2NoZWR1bGVyIChMaXN0ICsgRm9ybSkgLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50VGlja2V0U2NoZWR1bGVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldFNjaGVkdWxlcikuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5UaWNrZXRTY2hlZHVsZXJNYW5hZ2VyPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5UaWNrZXRTY2hlZHVsZXJBZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlRpY2tldFNjaGVkdWxlck1hbmFnZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIHRpY2tldCBzY2hlZHVsZXMgZm9yIGF1dG9tYXRpYyB0aWNrZXQgY3JlYXRpb24uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5UaWNrZXQgU2NoZWR1bGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRpY2tldFNjaGVkdWxlci5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXIuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSBMb2FkZXIgZsO8ciBBZ2VudFRpY2tldFNjaGVkdWxlciAoc2VwYXJhdGUgU2V0dGluZyAtIHZvbiBabnVueSBiZXZvcnp1Z3QpIC0tPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50VGlja2V0U2NoZWR1bGVyIyMjMDAxLVRpY2tldFNjaGVkdWxlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZ2VudFRpY2tldFNjaGVkdWxlciMjIzAwMS1UaWNrZXRTY2hlZHVsZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uIGZvciBUaWNrZXQgU2NoZWR1bGVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY2Vzc0tleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlRpY2tldFNjaGVkdWxlck1hbmFnZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0U2NoZWR1bGVyQWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0U2NoZWR1bGVyTWFuYWdlcjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5NYW5hZ2Ugc2NoZWR1bGVkL3JlY3VycmluZyB0aWNrZXRzLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldCBTY2hlZHVsZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50VGlja2V0U2NoZWR1bGVyPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtPcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2Nlc3NLZXkiPmg8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+OTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gRnJvbnRlbmQgTW9kdWxlOiBBZ2VudFRpY2tldFNjaGVkdWxlclByb2Nlc3MgLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50VGlja2V0U2NoZWR1bGVyUHJvY2VzcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzY2hlZHVsaW5nIHByb2Nlc3MgdGlja2V0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlRpY2tldFNjaGVkdWxlck1hbmFnZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlRpY2tldFNjaGVkdWxlckFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0U2NoZWR1bGVyTWFuYWdlcjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TY2hlZHVsZSBwcm9jZXNzIHRpY2tldHMgZm9yIGF1dG9tYXRpYyBjcmVhdGlvbi48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPlNjaGVkdWxlIFByb2Nlc3MgVGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRpY2tldFNjaGVkdWxlci5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRQcm9jZXNzLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJQcm9jZXNzRm9ybS5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDwhLS0gTG9hZGVyIGbDvHIgQWdlbnRUaWNrZXRTY2hlZHVsZXJQcm9jZXNzIChzZXBhcmF0ZSBTZXR0aW5nKSAtLT4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudFRpY2tldFNjaGVkdWxlclByb2Nlc3MjIyMwMDEtVGlja2V0U2NoZWR1bGVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBwcm9jZXNzIHRpY2tldCBzY2hlZHVsaW5nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXIuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRpY2tldFByb2Nlc3MuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gRnJvbnRlbmQgTW9kdWxlOiBBZ2VudFRpY2tldFNjaGVkdWxlckFKQVggLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50VGlja2V0U2NoZWR1bGVyQUpBWCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBUaWNrZXRTY2hlZHVsZXIgQUpBWCByZXF1ZXN0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlRpY2tldFNjaGVkdWxlck1hbmFnZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlRpY2tldFNjaGVkdWxlckFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0U2NoZWR1bGVyTWFuYWdlcjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5BSkFYIGhhbmRsZXIgZm9yIFRpY2tldFNjaGVkdWxlci48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldFNjaGVkdWxlciBBSkFYPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gTm90aWZpY2F0aW9uOiBFcnJvciBCYW5uZXIgLS0+CiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5vdGlmeU1vZHVsZSMjIzU2MDAtVGlja2V0U2NoZWR1bGVyRXJyb3ItQ2hlY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgbW9kdWxlIHRvIGRpc3BsYXkgYSBub3RpZmljYXRpb24gaW4gdGhlIGFnZW50IGludGVyZmFjZSwgaWYgdGhlcmUgYXJlIHRpY2tldCBzY2hlZHVsZXMgdGhhdCBmYWlsZWQgdG8gZXhlY3V0ZSAoVGlja2V0U2NoZWR1bGVyQWRtaW4gb25seSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OkZyb250ZW5kTm90aWZpY2F0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5vdGlmaWNhdGlvbjo6VGlja2V0U2NoZWR1bGVyRXJyb3I8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgIDwhLS0gRGFlbW9uIFRhc2s6IFNjaGVkdWxlclJ1biAtLT4KICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KCiAgICA8U2V0dGluZyBOYW1lPSJEYWVtb246OlNjaGVkdWxlckNyb25UYXNrTWFuYWdlcjo6VGFzayMjI1RpY2tldFNjaGVkdWxlclJ1biIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5FeGVjdXRlcyB0aGUgVGlja2V0U2NoZWR1bGVyIHRvIGNyZWF0ZSByZWN1cnJpbmcgdGlja2V0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkRhZW1vbjo6U2NoZWR1bGVyQ3JvblRhc2tNYW5hZ2VyOjpUYXNrPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhc2tOYW1lIj5UaWNrZXRTY2hlZHVsZXJSdW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNjaGVkdWxlIj4qLzUgKiAqICogKjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6TWFpbnQ6OlRpY2tldDo6U2NoZWR1bGVyUnVuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGdW5jdGlvbiI+RXhlY3V0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWF4aW11bVBhcmFsbGVsSW5zdGFuY2VzIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCjwvb3Ryc19jb25maWc+Cg==</File>

        <!-- Language Files -->
        <File Permission="660" Location="Kernel/Language/de_TicketScheduler.pm" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX1RpY2tldFNjaGVkdWxlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgTmF2aWdhdGlvbiBhbmQgdGl0bGVzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgU2NoZWR1bGVyJ30gPSAnVGlja2V0IFNjaGVkdWxlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2Ugc2NoZWR1bGVkL3JlY3VycmluZyB0aWNrZXRzLid9ID0gJ0dlcGxhbnRlL3dpZWRlcmtlaHJlbmRlIFRpY2tldHMgdmVyd2FsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGlja2V0IHNjaGVkdWxlcyBmb3IgYXV0b21hdGljIHRpY2tldCBjcmVhdGlvbi4nfSA9ICdUaWNrZXQtWmVpdHBsw6RuZSBmw7xyIGF1dG9tYXRpc2NoZSBUaWNrZXQtRXJzdGVsbHVuZyB2ZXJ3YWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlIE92ZXJ2aWV3J30gPSAnWmVpdHBsYW4tw5xiZXJzaWNodCc7CgogICAgIyBBY3Rpb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVGlja2V0IFNjaGVkdWxlJ30gPSAnTmV1ZXIgVGlja2V0LVplaXRwbGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBQcm9jZXNzIFNjaGVkdWxlJ30gPSAnTmV1ZXIgUHJvemVzcy1aZWl0cGxhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFNjaGVkdWxlJ30gPSAnWmVpdHBsYW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgU2NoZWR1bGUnfSA9ICdOZXVlciBaZWl0cGxhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIHRvIE92ZXJ2aWV3J30gPSAnWnVyw7xjayB6dXIgw5xiZXJzaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFNjaGVkdWxlJ30gPSAnWmVpdHBsYW4gc3BlaWNoZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBTY2hlZHVsZSd9ID0gJ1plaXRwbGFuIGzDtnNjaGVuJzsKCiAgICAjIExpc3QgY29sdW1ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSd9ID0gJ05hbWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZSd9ID0gJ1R5cCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZSd9ID0gJ1F1ZXVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0b3InfSA9ICdFcnN0ZWxsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBFeGVjdXRpb24nfSA9ICdOw6RjaHN0ZSBBdXNmw7xocnVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IEV4ZWN1dGlvbid9ID0gJ0xldHp0ZSBBdXNmw7xocnVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5zJ30gPSAnTMOkdWZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXR1cyd9ID0gJ1N0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpb25zJ30gPSAnQWt0aW9uZW4nOwoKICAgICMgU3RhdHVzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmUnfSA9ICdBa3Rpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmFjdGl2ZSd9ID0gJ0luYWt0aXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm9ybWFsIFRpY2tldCd9ID0gJ05vcm1hbGVzIFRpY2tldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9jZXNzIFRpY2tldCd9ID0gJ1Byb3plc3MtVGlja2V0JzsKCiAgICAjIEFjdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQnfSA9ICdCZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlJ30gPSAnQWt0aXZpZXJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWFjdGl2YXRlJ30gPSAnRGVha3RpdmllcmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGUgTm93J30gPSAnSmV0enQgYXVzZsO8aHJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3J30gPSAnQW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBTY2hlZHVsZSd9ID0gJ1plaXRwbGFuIGFuemVpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSd9ID0gJ0R1cGxpemllcmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpZXcgTmV4dCBFeGVjdXRpb25zJ30gPSAnTsOkY2hzdGUgQXVzZsO8aHJ1bmdlbiBhbnplaWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IEhpc3RvcnknfSA9ICdIaXN0b3JpZSBhbnplaWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUnfSA9ICdMw7ZzY2hlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrJ30gPSAnWnVyw7xjayc7CgogICAgIyBGaWx0ZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlcid9ID0gJ0ZpbHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFNjaGVkdWxlcyd9ID0gJ0ZpbHRlciBmw7xyIFplaXRwbMOkbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLid9ID0gJ1RpcHBlbiB1bSB6dSBmaWx0ZXJuLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBPcHRpb25zJ30gPSAnRmlsdGVyb3B0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoJ30gPSAnU3VjaGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgRmlsdGVyJ30gPSAnRmlsdGVyIGFud2VuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IEZpbHRlcid9ID0gJ0ZpbHRlciB6dXLDvGNrc2V0emVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQWxsIC0nfSA9ICctIEFsbGUgLSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3JtYWwgVGlja2V0cyd9ID0gJ05vcm1hbGUgVGlja2V0cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9jZXNzIFRpY2tldHMnfSA9ICdQcm96ZXNzLVRpY2tldHMnOwoKICAgICMgSW5mbwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5mbyd9ID0gJ0luZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGVkIHRpY2tldHMgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUgWm51bnkgRGFlbW9uIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIHNjaGVkdWxlLid9ID0gJ0dlcGxhbnRlIFRpY2tldHMgd2VyZGVuIGF1dG9tYXRpc2NoIHZvbSBabnVueSBEYWVtb24gYmFzaWVyZW5kIGF1ZiBkZW0ga29uZmlndXJpZXJ0ZW4gWmVpdHBsYW4gZXJzdGVsbHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NjaGVkdWxlcyBmb3VuZCd9ID0gJ1plaXRwbMOkbmUgZ2VmdW5kZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc2NoZWR1bGVzIGZvdW5kLid9ID0gJ0tlaW5lIFplaXRwbMOkbmUgZ2VmdW5kZW4uJzsKCiAgICAjIEZvcm06IEJhc2ljCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYXNpYyBJbmZvcm1hdGlvbid9ID0gJ0dydW5kaW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSBOYW1lJ30gPSAnWmVpdHBsYW4tTmFtZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcm5hbCBuYW1lIGZvciB0aGlzIHNjaGVkdWxlLid9ID0gJ0ludGVybmVyIE5hbWUgZsO8ciBkaWVzZW4gWmVpdHBsYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJ30gPSAnRGllc2VzIEZlbGQgaXN0IGVyZm9yZGVybGljaC4nOwoKICAgICMgRm9ybTogVGlja2V0IFNldHRpbmdzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgU2V0dGluZ3MnfSA9ICdUaWNrZXQtRWluc3RlbGx1bmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaXRsZSd9ID0gJ1RpdGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCB0aXRsZS4gWW91IGNhbiB1c2UgcGxhY2Vob2xkZXJzLid9ID0gJ1RpY2tldC1UaXRlbC4gUGxhdHpoYWx0ZXIga8O2bm5lbiB2ZXJ3ZW5kZXQgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgdGl0bGUuIFBsYWNlaG9sZGVycyBsaWtlIFtEQVRFXSwgW01PTlRIX05BTUVdIGFyZSBzdXBwb3J0ZWQuJ30gPSAnVGlja2V0LVRpdGVsLiBQbGF0emhhbHRlciB3aWUgW0RBVEVdLCBbTU9OVEhfTkFNRV0gd2VyZGVuIHVudGVyc3TDvHR6dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHknfSA9ICdQcmlvcml0w6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyJ30gPSAnS3VuZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgdXNlciBsb2dpbiAob3B0aW9uYWwpLid9ID0gJ0t1bmRlbmJlbnV0emVyLUxvZ2luIChvcHRpb25hbCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIHVzZXIgKG9wdGlvbmFsKS4gU3RhcnQgdHlwaW5nIHRvIHNlYXJjaC4nfSA9ICdLdW5kZW5iZW51dHplciAob3B0aW9uYWwpLiBFaW5nYWJlIHp1bSBTdWNoZW4gYmVnaW5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvZHknfSA9ICdJbmhhbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkvYXJ0aWNsZSBjb250ZW50LiBZb3UgY2FuIHVzZSBwbGFjZWhvbGRlcnMuJ30gPSAnVGlja2V0LUluaGFsdC9BcnRpa2VsLVRleHQuIFBsYXR6aGFsdGVyIGvDtm5uZW4gdmVyd2VuZGV0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGJvZHkvYXJ0aWNsZSBjb250ZW50LiBQbGFjZWhvbGRlcnMgbGlrZSBbREFURV0sIFtNT05USF9OQU1FXSBhcmUgc3VwcG9ydGVkLid9ID0gJ1RpY2tldC1JbmhhbHQvQXJ0aWtlbC1UZXh0LiBQbGF0emhhbHRlciB3aWUgW0RBVEVdLCBbTU9OVEhfTkFNRV0gd2VyZGVuIHVudGVyc3TDvHR6dC4nOwoKICAgICMgRm9ybTogQ2hlY2tsaXN0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja2xpc3QnfSA9ICdDaGVja2xpc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrbGlzdHMnfSA9ICdDaGVja2xpc3Rlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcHRpb25hbCd9ID0gJ09wdGlvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrbGlzdCBUZW1wbGF0ZSd9ID0gJ0NoZWNrbGlzdGVuLVZvcmxhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tsaXN0IFRlbXBsYXRlcyd9ID0gJ0NoZWNrbGlzdGVuLVZvcmxhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc2lnbiBhIGNoZWNrbGlzdCB0ZW1wbGF0ZSB0byB0aGUgY3JlYXRlZCB0aWNrZXQuJ30gPSAnRGVtIGVyc3RlbGx0ZW4gVGlja2V0IGVpbmUgQ2hlY2tsaXN0ZW4tVm9ybGFnZSB6dXdlaXNlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzaWduIG9uZSBvciBtb3JlIGNoZWNrbGlzdCB0ZW1wbGF0ZXMgdG8gdGhlIGNyZWF0ZWQgdGlja2V0LiBIb2xkIEN0cmwvQ21kIHRvIHNlbGVjdCBtdWx0aXBsZS4nfSA9ICdEZW0gZXJzdGVsbHRlbiBUaWNrZXQgZWluZSBvZGVyIG1laHJlcmUgQ2hlY2tsaXN0ZW4tVm9ybGFnZW4genV3ZWlzZW4uIFN0cmcvQ21kIGdlZHLDvGNrdCBoYWx0ZW4gZsO8ciBNZWhyZmFjaGF1c3dhaGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vbmUnfSA9ICdLZWluZSc7CgogICAgIyBGb3JtOiBEeW5hbWljIEZpZWxkcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBGaWVsZHMnfSA9ICdEeW5hbWlzY2hlIEZlbGRlcic7CgogICAgIyBGb3JtOiBTY2hlZHVsZSAtIERhZW1vbiBJbmZvCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RlJ30gPSAnSGlud2Vpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IG1vbnRocyB3aXRoIDMxIGRheXMgd2lsbCBiZSBleGVjdXRlZCAoSmFuLCBNYXIsIE1heSwgSnVsLCBBdWcsIE9jdCwgRGVjKS4nfSA9ICdOdXIgTW9uYXRlIG1pdCAzMSBUYWdlbiB3ZXJkZW4gYXVzZ2Vmw7xocnQgKEphbiwgTcOkciwgTWFpLCBKdWwsIEF1ZywgT2t0LCBEZXopLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSB3aWxsIGJlIHNraXBwZWQuJ30gPSAnRGVyIEZlYnJ1YXIgd2lyZCDDvGJlcnNwcnVuZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSB3aWxsIGJlIHNraXBwZWQgaW4gbm9uLWxlYXAgeWVhcnMuJ30gPSAnRGVyIEZlYnJ1YXIgd2lyZCBpbiBOaWNodC1TY2hhbHRqYWhyZW4gw7xiZXJzcHJ1bmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGNyZWF0aW9uIGRlcGVuZHMgb24gdGhlIFpudW55IERhZW1vbi4nfSA9ICdEaWUgVGlja2V0LUVyc3RlbGx1bmcgaXN0IGFiaMOkbmdpZyB2b20gWm51bnkgRGFlbW9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVjayBpbnRlcnZhbCd9ID0gJ1Byw7xmaW50ZXJ2YWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1pudW55IERhZW1vbiAmIFRpY2tldFNjaGVkdWxlcid9ID0gJ1pudW55IERhZW1vbiAmIFRpY2tldFNjaGVkdWxlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgWm51bnkgRGFlbW9uIHJ1bnMgYXMgYSBjb250aW51b3VzIGJhY2tncm91bmQgcHJvY2VzcyBhbmQgcmVndWxhcmx5IGNoZWNrcyB3aGV0aGVyIHRpY2tldHMgbmVlZCB0byBiZSBjcmVhdGVkLid9ID0gJ0RlciBabnVueSBEYWVtb24gbMOkdWZ0IGFscyBrb250aW51aWVybGljaGVyIEhpbnRlcmdydW5kcHJvemVzcyB1bmQgcHLDvGZ0IHJlZ2VsbcOkw59pZywgb2IgVGlja2V0cyBlcnN0ZWxsdCB3ZXJkZW4gbcO8c3Nlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBjaGVjayBpbnRlcnZhbCd9ID0gJ0FrdHVlbGxlcyBQcsO8ZmludGVydmFsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcnZhbCd9ID0gJ0ludGVydmFsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcm9uIGV4cHJlc3Npb24nfSA9ICdDcm9uLUF1c2RydWNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkanVzdCBpbnRlcnZhbCd9ID0gJ0ludGVydmFsbCBhbnBhc3Nlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaW50ZXJ2YWwgY2FuIGJlIGFkanVzdGVkIGluIFN5c0NvbmZpZy4nfSA9ICdEYXMgSW50ZXJ2YWxsIGthbm4gaW4gZGVyIFN5c0NvbmZpZyBhbmdlcGFzc3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgbWludXRlLWFjY3VyYXRlIGV4ZWN1dGlvbiwgc2V0J30gPSAnRsO8ciBtaW51dGVuZ2VuYXVlIEF1c2bDvGhydW5nIHNldHplbiBTaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlbiBTeXNDb25maWcgc2V0dGluZyd9ID0gJ1N5c0NvbmZpZy1FaW5zdGVsbHVuZyDDtmZmbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrIERhZW1vbiBzdGF0dXMnfSA9ICdEYWVtb24tU3RhdHVzIHByw7xmZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xvc2UnfSA9ICdTY2hsaWXDn2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V2ZXJ5IG1pbnV0ZSd9ID0gJ2plZGUgTWludXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V2ZXJ5IDUgbWludXRlcyd9ID0gJ2FsbGUgNSBNaW51dGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V2ZXJ5IDEwIG1pbnV0ZXMnfSA9ICdhbGxlIDEwIE1pbnV0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZXZlcnkgMTUgbWludXRlcyd9ID0gJ2FsbGUgMTUgTWludXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydldmVyeSAzMCBtaW51dGVzJ30gPSAnYWxsZSAzMCBNaW51dGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2V2ZXJ5IGhvdXInfSA9ICdqZWRlIFN0dW5kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydldmVyeSAyIGhvdXJzJ30gPSAnYWxsZSAyIFN0dW5kZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZGFpbHkgYXQgbWlkbmlnaHQnfSA9ICd0w6RnbGljaCB1bSBNaXR0ZXJuYWNodCc7CgogICAgIyBGb3JtOiBTY2hlZHVsZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGUnfSA9ICdaZWl0cGxhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSBUeXBlJ30gPSAnWmVpdHBsYW4tVHlwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhaWx5J30gPSAnVMOkZ2xpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2x5J30gPSAnV8O2Y2hlbnRsaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRobHkgKERheSknfSA9ICdNb25hdGxpY2ggKFRhZyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSAoV2Vla2RheSknfSA9ICdNb25hdGxpY2ggKFdvY2hlbnRhZyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSAoV2Vla2RheSArIE9mZnNldCknfSA9ICdNb25hdGxpY2ggKFdvY2hlbnRhZyArIFZlcnNhdHopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llYXJseSd9ID0gJ0rDpGhybGljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFdmVyeSBYIERheXMnfSA9ICdBbGxlIFggVGFnZSc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSd9ID0gJ1VocnplaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhlY3V0aW9uIFRpbWUnfSA9ICdBdXNmw7xocnVuZ3N6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgd2hlbiB0aGUgdGlja2V0IHdpbGwgYmUgY3JlYXRlZC4nfSA9ICdVaHJ6ZWl0IHp1IGRlciBkYXMgVGlja2V0IGVyc3RlbGx0IHdpcmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBob3cgb2Z0ZW4gdGhlIHRpY2tldCBzaG91bGQgYmUgY3JlYXRlZC4nfSA9ICdXw6RobGVuIFNpZSB3aWUgb2Z0IGRhcyBUaWNrZXQgZXJzdGVsbHQgd2VyZGVuIHNvbGwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWV6b25lJ30gPSAnWmVpdHpvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLiBFdXJvcGUvQmVybGluLCBVVEMnfSA9ICd6LkIuIEV1cm9wZS9CZXJsaW4sIFVUQyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIE9mZnNldCd9ID0gJ1RhZ2UtVmVyc2F0eic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlJ30gPSAnU3BlaWNoZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgYW5kIGZpbmlzaCd9ID0gJ1NwZWljaGVybiB1bmQgc2NobGllw59lbic7CgogICAgIyBXZWVrZGF5cwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2RheXMnfSA9ICdXb2NoZW50YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbmRheSd9ID0gJ01vbnRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWVzZGF5J30gPSAnRGllbnN0YWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2VkbmVzZGF5J30gPSAnTWl0dHdvY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGh1cnNkYXknfSA9ICdEb25uZXJzdGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaWRheSd9ID0gJ0ZyZWl0YWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F0dXJkYXknfSA9ICdTYW1zdGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bmRheSd9ID0gJ1Nvbm50YWcnOwoKICAgICMgTW9udGhseQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5IG9mIE1vbnRoJ30gPSAnVGFnIGRlcyBNb25hdHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBkYXknfSA9ICdMZXR6dGVyIFRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY2N1cnJlbmNlJ30gPSAnQXVmdHJldGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzFzdCd9ID0gJzEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzJuZCd9ID0gJzIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzNyZCd9ID0gJzMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzR0aCd9ID0gJzQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QnfSA9ICdMZXR6dGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29mIHRoZSBtb250aCd9ID0gJ2RlcyBNb25hdHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBhZnRlcid9ID0gJ1RhZ2UgZGFuYWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2RheXMgYWZ0ZXIgdGhlIG9jY3VycmVuY2UnfSA9ICdUYWdlIG5hY2ggZGVtIEF1ZnRyZXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWdhdGl2ZSB2YWx1ZXMgPSBkYXlzIGJlZm9yZS4gRS5nLiAtMyA9IDMgZGF5cyBiZWZvcmUgdGhlIHNlbGVjdGVkIHdlZWtkYXkuJ30gPSAnTmVnYXRpdmUgV2VydGUgPSBUYWdlIGRhdm9yLiBaLkIuIC0zID0gMyBUYWdlIHZvciBkZW0gZ2V3w6RobHRlbiBXb2NoZW50YWcuJzsKCiAgICAjIFllYXJseQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGgnfSA9ICdNb25hdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKYW51YXJ5J30gPSAnSmFudWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYnJ1YXJ5J30gPSAnRmVicnVhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXJjaCd9ID0gJ03DpHJ6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcmlsJ30gPSAnQXByaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF5J30gPSAnTWFpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICdKdW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICdKdWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJ0F1Z3VzdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICdTZXB0ZW1iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2N0b2Jlcid9ID0gJ09rdG9iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm92ZW1iZXInfSA9ICdOb3ZlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNlbWJlcid9ID0gJ0RlemVtYmVyJzsKCiAgICAjIEludGVydmFsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcnZhbCd9ID0gJ0ludGVydmFsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkYXlzJ30gPSAnVGFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBEYXRlJ30gPSAnU3RhcnRkYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaXJzdCBleGVjdXRpb24gZGF0ZS4gTGVhdmUgZW1wdHkgdG8gc3RhcnQgZnJvbSB0b2RheS4nfSA9ICdFcnN0ZXMgQXVzZsO8aHJ1bmdzZGF0dW0uIExlZXIgbGFzc2VuIGbDvHIgU3RhcnQgYWIgaGV1dGUuJzsKCiAgICAjIEVuZCBPcHRpb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgT3B0aW9ucyd9ID0gJ0VuZGUtT3B0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIENvbmRpdGlvbid9ID0gJ0VuZGJlZGluZ3VuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXZlciAocnVucyBpbmRlZmluaXRlbHkpJ30gPSAnTmllIChsw6R1ZnQgdW5iZWdyZW56dCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWZ0ZXIgWCBleGVjdXRpb25zJ30gPSAnTmFjaCBYIEF1c2bDvGhydW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW50aWwgZGF0ZSd9ID0gJ0JpcyBEYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIEV4ZWN1dGlvbnMnfSA9ICdNYXhpbWFsZSBBdXNmw7xocnVuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBEYXRlJ30gPSAnRW5kZGF0dW0nOwoKICAgICMgUHJldmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlldyd9ID0gJ1ZvcnNjaGF1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgTmV4dCBFeGVjdXRpb25zJ30gPSAnTsOkY2hzdGUgQXVzZsO8aHJ1bmdlbiBhbnplaWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IDUgc2NoZWR1bGVkIGV4ZWN1dGlvbnM6J30gPSAnTsOkY2hzdGUgNSBnZXBsYW50ZSBBdXNmw7xocnVuZ2VuOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IFNjaGVkdWxlZCBFeGVjdXRpb25zJ30gPSAnTsOkY2hzdGUgZ2VwbGFudGUgQXVzZsO8aHJ1bmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB1cGNvbWluZyBleGVjdXRpb25zLid9ID0gJ0tlaW5lIGFuc3RlaGVuZGVuIEF1c2bDvGhydW5nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGV4ZWN1dGlvbnMgY2FsY3VsYXRlZC4nfSA9ICdLZWluZSBBdXNmw7xocnVuZ2VuIGJlcmVjaG5ldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9hZGluZy4uLid9ID0gJ0xhZGUuLi4nOwoKICAgICMgSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhlY3V0aW9uIEhpc3RvcnknfSA9ICdBdXNmw7xocnVuZ3NoaXN0b3JpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQnfSA9ICdUaWNrZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZXhlY3V0aW9uIGhpc3RvcnkgZm91bmQuJ30gPSAnS2VpbmUgQXVzZsO8aHJ1bmdzaGlzdG9yaWUgZ2VmdW5kZW4uJzsKCiAgICAjIFBsYWNlaG9sZGVycwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhY2Vob2xkZXJzJ30gPSAnUGxhdHpoYWx0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhY2Vob2xkZXIgUmVmZXJlbmNlJ30gPSAnUGxhdHpoYWx0ZXItUmVmZXJlbnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yIFRpdGxlIGFuZCBCb2R5LiBDbGljayB0byBjb3B5Lid9ID0gJ0bDvHIgVGl0ZWwgdW5kIEluaGFsdC4gS2xpY2tlbiB6dW0gS29waWVyZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJsZSBwbGFjZWhvbGRlcnMgZm9yIFRpdGxlIGFuZCBCb2R5Oid9ID0gJ1ZlcmbDvGdiYXJlIFBsYXR6aGFsdGVyIGbDvHIgVGl0ZWwgdW5kIEluaGFsdDonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiB1c2UgcGxhY2Vob2xkZXJzIGluIFRpdGxlIGFuZCBCb2R5Oid9ID0gJ1NpZSBrw7ZubmVuIFBsYXR6aGFsdGVyIGluIFRpdGVsIHVuZCBJbmhhbHQgdmVyd2VuZGVuOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnNlcnQgUGxhY2Vob2xkZXInfSA9ICdQbGF0emhhbHRlciBlaW5mw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhY2Vob2xkZXInfSA9ICdQbGF0emhhbHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIChZWVlZLU1NLUREKSd9ID0gJ0RhdHVtIChKSkpKLU1NLVRUKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIChERC5NTS5ZWVlZKSd9ID0gJ0RhdHVtIChUVC5NTS5KSkpKKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIChISDpNTSknfSA9ICdVaHJ6ZWl0IChISDpNTSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBhbmQgVGltZSd9ID0gJ0RhdHVtIHVuZCBVaHJ6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgKyBUaW1lJ30gPSAnRGF0dW0gKyBVaHJ6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llYXInfSA9ICdKYWhyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoICgwMS0xMiknfSA9ICdNb25hdCAoMDEtMTIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoIE5hbWUgKEdlcm1hbiknfSA9ICdNb25hdHNuYW1lIChEZXV0c2NoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aCBOYW1lIChFbmdsaXNoKSd9ID0gJ01vbmF0c25hbWUgKEVuZ2xpc2NoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXkgKDAxLTMxKSd9ID0gJ1RhZyAoMDEtMzEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXkgKEdlcm1hbiknfSA9ICdXb2NoZW50YWcgKERldXRzY2gpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXkgKEVuZ2xpc2gpJ30gPSAnV29jaGVudGFnIChFbmdsaXNjaCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2VlayBOdW1iZXInfSA9ICdLYWxlbmRlcndvY2hlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1YXJ0ZXIgKFExLVE0KSd9ID0gJ1F1YXJ0YWwgKFExLVE0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlJ30gPSAnRGF0dW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSAoREUpJ30gPSAnRGF0dW0gKERFKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlL1RpbWUnfSA9ICdEYXR1bS9aZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoIChERSknfSA9ICdNb25hdCAoREUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoIChFTiknfSA9ICdNb25hdCAoRU4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheSd9ID0gJ1RhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWVrZGF5IChERSknfSA9ICdXb2NoZW50YWcgKERFKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWVrZGF5IChFTiknfSA9ICdXb2NoZW50YWcgKEVOKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWVrJ30gPSAnV29jaGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmFtZSd9ID0gJ01vbmF0c25hbWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2RheSd9ID0gJ1dvY2hlbnRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWFydGVyJ30gPSAnUXVhcnRhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgdGl0bGUuIFNlbGVjdCBwbGFjZWhvbGRlciBmcm9tIGRyb3Bkb3duIHRvIGluc2VydC4nfSA9ICdUaWNrZXQtVGl0ZWwuIFBsYXR6aGFsdGVyIGF1cyBEcm9wZG93biB3w6RobGVuIHp1bSBFaW5mw7xnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBib2R5L2FydGljbGUgY29udGVudC4gVXNlIHRoZSBkcm9wZG93biBhYm92ZSB0byBpbnNlcnQgcGxhY2Vob2xkZXJzLid9ID0gJ1RpY2tldC1JbmhhbHQvQXJ0aWtlbC1UZXh0LiBWZXJ3ZW5kZW4gU2llIGRhcyBEcm9wZG93biBvYmVuIHVtIFBsYXR6aGFsdGVyIGVpbnp1ZsO8Z2VuLic7CgogICAgIyBEaWFsb2dzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZZXMnfSA9ICdKYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyd9ID0gJ05laW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xvc2UnfSA9ICdTY2hsaWXDn2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbmNlbCd9ID0gJ0FiYnJlY2hlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgc2NoZWR1bGU/J30gPSAnU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBkaWVzZW4gWmVpdHBsYW4gbMO2c2NoZW4gbcO2Y2h0ZW4/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuJ30gPSAnRGllc2UgQWt0aW9uIGthbm4gbmljaHQgcsO8Y2tnw6RuZ2lnIGdlbWFjaHQgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeGVjdXRlIHRoaXMgc2NoZWR1bGUgbm93IGFuZCBjcmVhdGUgYSB0aWNrZXQ/J30gPSAnRGllc2VuIFplaXRwbGFuIGpldHp0IGF1c2bDvGhyZW4gdW5kIGVpbiBUaWNrZXQgZXJzdGVsbGVuPyc7CgogICAgIyBFcnJvciBtZXNzYWdlcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3IgZGVsZXRpbmcgc2NoZWR1bGUuJ30gPSAnRmVobGVyIGJlaW0gTMO2c2NoZW4gZGVzIFplaXRwbGFucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3IgdG9nZ2xpbmcgc2NoZWR1bGUgc3RhdHVzLid9ID0gJ0ZlaGxlciBiZWltIMOEbmRlcm4gZGVzIFplaXRwbGFuLVN0YXR1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3IgZXhlY3V0aW5nIHNjaGVkdWxlLiBDaGVjayB0aGUgc3lzdGVtIGxvZyBmb3IgZGV0YWlscy4nfSA9ICdGZWhsZXIgYmVpIGRlciBBdXNmw7xocnVuZy4gUHLDvGZlbiBTaWUgZGFzIFN5c3RlbXByb3Rva29sbCBmw7xyIERldGFpbHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIGR1cGxpY2F0aW5nIHNjaGVkdWxlLid9ID0gJ0ZlaGxlciBiZWltIER1cGxpemllcmVuIGRlcyBaZWl0cGxhbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgZXhlY3V0aW9uIGZhaWxlZCd9ID0gJ0xldHp0ZSBBdXNmw7xocnVuZyBmZWhsZ2VzY2hsYWdlbic7CgogICAgIyBFcnJvciBCYW5uZXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBTY2hlZHVsZXIgRXJyb3InfSA9ICdUaWNrZXQgU2NoZWR1bGVyIEZlaGxlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzY2hlZHVsZShzKSBjb3VsZCBub3QgYmUgZXhlY3V0ZWQnfSA9ICdaZWl0cGxhbi9aZWl0cGzDpG5lIGtvbm50ZW4gbmljaHQgYXVzZ2Vmw7xocnQgd2VyZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgRGV0YWlscyd9ID0gJ0RldGFpbHMgYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR28gdG8gT3ZlcnZpZXcnfSA9ICdadXIgw5xiZXJzaWNodCc7CgogICAgIyBQcm9jZXNzIFRpY2tldCBTY2hlZHVsaW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9jZXNzJ30gPSAnUHJvemVzcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgUHJvY2Vzcyd9ID0gJ1Byb3plc3MgYXVzd8OkaGxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9jZXNzIFNlbGVjdGlvbid9ID0gJ1Byb3plc3MtQXVzd2FobCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpdml0eSBEaWFsb2cgRmllbGRzJ30gPSAnQWt0aXZpdMOkdHNkaWFsb2ctRmVsZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHByb2Nlc3NlcyBhdmFpbGFibGUnfSA9ICdLZWluZSBQcm96ZXNzZSB2ZXJmw7xnYmFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHByb2Nlc3NlcyBhdmFpbGFibGUgZm9yIHNjaGVkdWxpbmcuJ30gPSAnS2VpbmUgUHJvemVzc2UgZsO8ciBkaWUgWmVpdHBsYW51bmcgdmVyZsO8Z2Jhci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGUgcHJvY2VzcyB0aWNrZXRzIGZvciBhdXRvbWF0aWMgY3JlYXRpb24uJ30gPSAnUHJvemVzcy1UaWNrZXRzIGbDvHIgYXV0b21hdGlzY2hlIEVyc3RlbGx1bmcgcGxhbmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSBQcm9jZXNzIFRpY2tldCd9ID0gJ1Byb3plc3MtVGlja2V0IHBsYW5lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBwcm9jZXNzIHRvIHNlZSBpdHMgZmllbGRzLid9ID0gJ1fDpGhsZW4gU2llIGVpbmVuIFByb3plc3MgdW0gc2VpbmUgRmVsZGVyIHp1IHNlaGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgcHJvY2VzcyBmaXJzdC4nfSA9ICdCaXR0ZSB3w6RobGVuIFNpZSB6dWVyc3QgZWluZW4gUHJvemVzcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9hZGluZyBwcm9jZXNzIGZpZWxkcy4uLid9ID0gJ0xhZGUgUHJvemVzcy1GZWxkZXIuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3IgbG9hZGluZyBwcm9jZXNzIGZpZWxkcy4nfSA9ICdGZWhsZXIgYmVpbSBMYWRlbiBkZXIgUHJvemVzcy1GZWxkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbGwgaW4gdGhlIGFjdGl2aXR5IGRpYWxvZyBmaWVsZHMgZm9yIHRoZSBwcm9jZXNzIHRpY2tldC4nfSA9ICdGw7xsbGVuIFNpZSBkaWUgQWt0aXZpdMOkdHNkaWFsb2ctRmVsZGVyIGbDvHIgZGFzIFByb3plc3MtVGlja2V0IGF1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWlyZWQnfSA9ICdlcmZvcmRlcmxpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvY2VzcyBNYW5hZ2VtZW50IGlzIG5vdCBhdmFpbGFibGUuJ30gPSAnUHJvemVzcy1NYW5hZ2VtZW50IGlzdCBuaWNodCB2ZXJmw7xnYmFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBhY3RpdmUgcHJvY2Vzc2VzIGF2YWlsYWJsZSBmb3IgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0tlaW5lIGFrdGl2ZW4gUHJvemVzc2UgZsO8ciBkaWUgQWdlbnRlbi1PYmVyZmzDpGNoZSB2ZXJmw7xnYmFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWJqZWN0J30gPSAnQmV0cmVmZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIFN1YmplY3QnfSA9ICdBcnRpa2VsLUJldHJlZmYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBCb2R5J30gPSAnQXJ0aWtlbC1JbmhhbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYSBjdXN0b21lciBJRC4nfSA9ICdFaW5nYWJlIHN0YXJ0ZW4gdW0gbmFjaCBlaW5lciBLdW5kZW5udW1tZXIgenUgc3VjaGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCB0eXBpbmcgdG8gc2VhcmNoIGZvciBhIGN1c3RvbWVyIHVzZXIuJ30gPSAnRWluZ2FiZSBzdGFydGVuIHVtIG5hY2ggZWluZW0gS3VuZGVuYmVudXR6ZXIgenUgc3VjaGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBwcm9jZXNzIHRvIGNvbmZpZ3VyZSB0aGUgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcy4nfSA9ICdXw6RobGVuIFNpZSBlaW5lbiBQcm96ZXNzIHVtIGRpZSBBa3Rpdml0w6R0c2RpYWxvZy1GZWxkZXIgenUga29uZmlndXJpZXJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3B0aW9uYWw6IFNlbGVjdCBhIHF1ZXVlIHRvIG92ZXJyaWRlIHRoZSBBY3Rpdml0eSBEaWFsb2cgZGVmYXVsdC4gTGVhdmUgZW1wdHkgdG8gdXNlIHRoZSBwcm9jZXNzIGRlZmF1bHQgcXVldWUuJ30gPSAnT3B0aW9uYWw6IFfDpGhsZW4gU2llIGVpbmUgUXVldWUgdW0gZGVuIEFjdGl2aXR5IERpYWxvZyBTdGFuZGFyZCB6dSDDvGJlcnNjaHJlaWJlbi4gTGVlciBsYXNzZW4gdW0gZGllIFByb3plc3MtU3RhbmRhcmQtUXVldWUgenUgdmVyd2VuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2FkaW5nIEFjdGl2aXR5IERpYWxvZyBmaWVsZHMuLi4nfSA9ICdMYWRlIEFrdGl2aXTDpHRzZGlhbG9nLUZlbGRlci4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBsb2FkaW5nIEFjdGl2aXR5IERpYWxvZyBmaWVsZHMuJ30gPSAnRmVobGVyIGJlaW0gTGFkZW4gZGVyIEFrdGl2aXTDpHRzZGlhbG9nLUZlbGRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlndXJhYmxlIGZpZWxkcyBpbiB0aGUgc3RhcnQgQWN0aXZpdHkgRGlhbG9nLid9ID0gJ0tlaW5lIGtvbmZpZ3VyaWVyYmFyZW4gRmVsZGVyIGltIFN0YXJ0LUFrdGl2aXTDpHRzZGlhbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpdml0eSBEaWFsb2cgZmllbGRzIHdlcmUgcHJlLWNvbmZpZ3VyZWQgZm9yIHRoaXMgcHJvY2VzcyBzY2hlZHVsZS4nfSA9ICdBa3Rpdml0w6R0c2RpYWxvZy1GZWxkZXIgd3VyZGVuIGbDvHIgZGllc2VuIFByb3plc3MtWmVpdHBsYW4gdm9ya29uZmlndXJpZXJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxjdWxhdGluZy4uLid9ID0gJ0JlcmVjaG5lLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHVwY29taW5nIGV4ZWN1dGlvbnMgZm91bmQuJ30gPSAnS2VpbmUgYW5zdGVoZW5kZW4gQXVzZsO8aHJ1bmdlbiBnZWZ1bmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3IgY2FsY3VsYXRpbmcgcHJldmlldy4nfSA9ICdGZWhsZXIgYmVpIGRlciBWb3JzY2hhdS1CZXJlY2hudW5nLic7CgogICAgIyBBY3Rpdml0eSBEaWFsb2cgc3RhbmRhcmQgZmllbGRzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZW5kaW5nIHRpbGwnfSA9ICdXYXJ0ZW4gYmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RleHQnfSA9ICdUZXh0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2snfSA9ICdTcGVycmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUnfSA9ICdBcnRpa2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVyIHVzZXInfSA9ICdLdW5kZW5iZW51dHplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBJRCd9ID0gJ0t1bmRlbm51bW1lcic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBUaWNrZXRTY2hlZHVsZXIgZmVhdHVyZSBnbG9iYWxseS4nfSA9ICdUaWNrZXRTY2hlZHVsZXItRnVua3Rpb24gZ2xvYmFsIGFrdGl2aWVyZW4gb2RlciBkZWFrdGl2aWVyZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdGltZXpvbmUgZm9yIG5ldyB0aWNrZXQgc2NoZWR1bGVzLid9ID0gJ1N0YW5kYXJkLVplaXR6b25lIGbDvHIgbmV1ZSBUaWNrZXQtWmVpdHBsw6RuZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBlbnRyaWVzIHRvIGtlZXAgcGVyIHNjaGVkdWxlLid9ID0gJ01heGltYWxlIEFuemFobCBkZXIgSGlzdG9yaWUtRWludHLDpGdlIHBybyBaZWl0cGxhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nIHN1Y2Nlc3NmdWwgdGlja2V0IGNyZWF0aW9ucyB0byBzeXN0ZW0gbG9nLid9ID0gJ0VyZm9sZ3JlaWNoZSBUaWNrZXQtRXJzdGVsbHVuZ2VuIGltIFN5c3RlbXByb3Rva29sbCBwcm90b2tvbGxpZXJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhlY3V0ZXMgdGhlIFRpY2tldFNjaGVkdWxlciB0byBjcmVhdGUgcmVjdXJyaW5nIHRpY2tldHMuJ30gPSAnRsO8aHJ0IGRlbiBUaWNrZXRTY2hlZHVsZXIgYXVzIHVtIHdpZWRlcmtlaHJlbmRlIFRpY2tldHMgenUgZXJzdGVsbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgcHJvY2VzcyB0aWNrZXQgc2NoZWR1bGluZy4nfSA9ICdMb2FkZXItTW9kdWwtUmVnaXN0cmllcnVuZyBmw7xyIFByb3plc3MtVGlja2V0LVplaXRwbGFudW5nLic7CgogICAgIyBKYXZhU2NyaXB0IFN0cmluZ3MgLSB0aGVzZSB3aWxsIGJlIGF2YWlsYWJsZSB2aWEgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoKSBpbiBKUwogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAgICAgJ0RlbGV0ZSBTY2hlZHVsZScsCiAgICAgICAgJ1llcycsCiAgICAgICAgJ05vJywKICAgICAgICAnQ2xvc2UnLAogICAgICAgICdDYW5jZWwnLAogICAgICAgICdMb2FkaW5nLi4uJywKICAgICAgICAnTmV4dCBTY2hlZHVsZWQgRXhlY3V0aW9ucycsCiAgICAgICAgJ0V4ZWN1dGlvbiBIaXN0b3J5JywKICAgICAgICAnTm8gdXBjb21pbmcgZXhlY3V0aW9ucy4nLAogICAgICAgICdObyBleGVjdXRpb24gaGlzdG9yeSBmb3VuZC4nLAogICAgICAgICdUaW1lJywKICAgICAgICAnVGlja2V0JywKICAgICAgICAnU3RhdHVzJywKICAgICAgICAnRXhlY3V0ZSB0aGlzIHNjaGVkdWxlIG5vdyBhbmQgY3JlYXRlIGEgdGlja2V0PycsCiAgICAgICAgJ0Vycm9yIGRlbGV0aW5nIHNjaGVkdWxlLicsCiAgICAgICAgJ0Vycm9yIHRvZ2dsaW5nIHNjaGVkdWxlIHN0YXR1cy4nLAogICAgICAgICdFcnJvciBleGVjdXRpbmcgc2NoZWR1bGUuIENoZWNrIHRoZSBzeXN0ZW0gbG9nIGZvciBkZXRhaWxzLicsCiAgICAgICAgJ0Vycm9yIGR1cGxpY2F0aW5nIHNjaGVkdWxlLicsCiAgICAgICAgIyBQcm9jZXNzIGZvcm0gc3RyaW5ncwogICAgICAgICdTZWxlY3QgYSBwcm9jZXNzIHRvIHNlZSBpdHMgZmllbGRzLicsCiAgICAgICAgJ1BsZWFzZSBzZWxlY3QgYSBwcm9jZXNzIGZpcnN0LicsCiAgICAgICAgJ0xvYWRpbmcgcHJvY2VzcyBmaWVsZHMuLi4nLAogICAgICAgICdFcnJvciBsb2FkaW5nIHByb2Nlc3MgZmllbGRzLicsCiAgICAgICAgJ3JlcXVpcmVkJywKICAgICAgICAnTm8gcHJvY2Vzc2VzIGF2YWlsYWJsZScsCiAgICAgICAgJ1NlbGVjdCBhIHByb2Nlc3MgdG8gY29uZmlndXJlIHRoZSBBY3Rpdml0eSBEaWFsb2cgZmllbGRzLicsCiAgICAgICAgJ0xvYWRpbmcgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcy4uLicsCiAgICAgICAgJ0Vycm9yIGxvYWRpbmcgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcy4nLAogICAgICAgICdObyBjb25maWd1cmFibGUgZmllbGRzIGluIHRoZSBzdGFydCBBY3Rpdml0eSBEaWFsb2cuJywKICAgICAgICAnQWN0aXZpdHkgRGlhbG9nIEZpZWxkcycsCiAgICAgICAgJ1N0YXJ0IHR5cGluZyB0byBzZWFyY2ggZm9yIGEgY3VzdG9tZXIgSUQuJywKICAgICAgICAnU3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYSBjdXN0b21lciB1c2VyLicsCiAgICAgICAgJ0NhbGN1bGF0aW5nLi4uJywKICAgICAgICAnTm8gdXBjb21pbmcgZXhlY3V0aW9ucyBmb3VuZC4nLAogICAgICAgICdFcnJvciBjYWxjdWxhdGluZyBwcmV2aWV3LicsCiAgICAgICAgJ09ubHkgbW9udGhzIHdpdGggMzEgZGF5cyB3aWxsIGJlIGV4ZWN1dGVkIChKYW4sIE1hciwgTWF5LCBKdWwsIEF1ZywgT2N0LCBEZWMpLicsCiAgICAgICAgJ0ZlYnJ1YXJ5IHdpbGwgYmUgc2tpcHBlZC4nLAogICAgICAgICdGZWJydWFyeSB3aWxsIGJlIHNraXBwZWQgaW4gbm9uLWxlYXAgeWVhcnMuJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>

        <!-- JavaScript -->
        <File Permission="660" Location="var/httpd/htdocs/js/Core.Agent.TicketScheduler.js" Encode="Base64">Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgd29sa2lnLml0LCBodHRwczovL3dvbGtpZy5pdC8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLkFnZW50ID0gQ29yZS5BZ2VudCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyCiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgZm9yIHRoZSBUaWNrZXRTY2hlZHVsZXIgbGlzdCB2aWV3LgogKi8KQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXIKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIEluaXRpYWxpemUgdGhlIFRpY2tldFNjaGVkdWxlciBtb2R1bGUuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgLy8gQmluZCBhY3Rpb24gaWNvbiBjbGlja3MKICAgICAgICBUYXJnZXROUy5CaW5kQWN0aW9uSGFuZGxlcnMoKTsKCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjbGllbnQtc2lkZSB0YWJsZSBmaWx0ZXIKICAgICAgICBUYXJnZXROUy5Jbml0VGFibGVGaWx0ZXIoKTsKCiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0YWJsZSBzb3J0aW5nIGlmIERhdGFUYWJsZXMgaXMgYXZhaWxhYmxlCiAgICAgICAgaWYgKCQuZm4uRGF0YVRhYmxlKSB7CiAgICAgICAgICAgICQoJyNTY2hlZHVsZVRhYmxlJykuRGF0YVRhYmxlKHsKICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsCiAgICAgICAgICAgICAgICBzZWFyY2hpbmc6IGZhbHNlLAogICAgICAgICAgICAgICAgaW5mbzogZmFsc2UsCiAgICAgICAgICAgICAgICBvcmRlcjogW1sxLCAnYXNjJ11dCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0VGFibGVGaWx0ZXIKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlcgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZSB0aGUgY2xpZW50LXNpZGUgdGFibGUgZmlsdGVyIGZvciBzY2hlZHVsZXMuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXRUYWJsZUZpbHRlciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgJGZpbHRlcklucHV0ID0gJCgnI0ZpbHRlclNjaGVkdWxlcycpLAogICAgICAgICAgICAkdGFibGUgPSAkKCcjU2NoZWR1bGVUYWJsZScpOwoKICAgICAgICBpZiAoISRmaWx0ZXJJbnB1dC5sZW5ndGggfHwgISR0YWJsZS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gQmluZCBmaWx0ZXIgaW5wdXQgZXZlbnQKICAgICAgICAkZmlsdGVySW5wdXQub24oJ2tleXVwJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZmlsdGVyVGV4dCA9ICQodGhpcykudmFsKCkudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgICR0YWJsZS5maW5kKCd0Ym9keSB0cicpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyICRyb3cgPSAkKHRoaXMpLAogICAgICAgICAgICAgICAgICAgIHJvd1RleHQgPSAkcm93LnRleHQoKS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgICAgIGlmIChyb3dUZXh0LmluZGV4T2YoZmlsdGVyVGV4dCkgPiAtMSkgewogICAgICAgICAgICAgICAgICAgICRyb3cuc2hvdygpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcm93LmhpZGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEZvY3VzIGZpbHRlciBvbiBwYWdlIGxvYWQgaWYgZW1wdHkgdGFibGUgaXMgc2hvd24KICAgICAgICBpZiAoJHRhYmxlLmZpbmQoJ3Rib2R5IHRyJykubGVuZ3RoID4gMTApIHsKICAgICAgICAgICAgJGZpbHRlcklucHV0LmZvY3VzKCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEJpbmRBY3Rpb25IYW5kbGVycwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBCaW5kIGNsaWNrIGhhbmRsZXJzIGZvciBhY3Rpb24gaWNvbnMuCiAgICAgKi8KICAgIFRhcmdldE5TLkJpbmRBY3Rpb25IYW5kbGVycyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBEZWxldGUgYWN0aW9uCiAgICAgICAgJCgnLkFjdGlvbkljb24uRGVsZXRlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOwogICAgICAgICAgICB2YXIgc2NoZWR1bGVySWQgPSAkdGhpcy5kYXRhKCdzY2hlZHVsZXItaWQnKTsKCiAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKAogICAgICAgICAgICAgICAgJCgnI0RlbGV0ZUNvbmZpcm1EaWFsb2cnKSwKICAgICAgICAgICAgICAgIENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdEZWxldGUgU2NoZWR1bGUnKSwKICAgICAgICAgICAgICAgICcyMDBweCcsCiAgICAgICAgICAgICAgICAnQ2VudGVyJywKICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBMYWJlbDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1llcycpLAogICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuRGVsZXRlU2NoZWR1bGUoc2NoZWR1bGVySWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZzp2aXNpYmxlJykpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzczogJ1ByaW1hcnknCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsOiBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnTm8nKSwKICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLkNsb3NlRGlhbG9nKCQoJy5EaWFsb2c6dmlzaWJsZScpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gVG9nZ2xlIFZhbGlkIGFjdGlvbgogICAgICAgICQoJy5BY3Rpb25JY29uLlRvZ2dsZVZhbGlkJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB2YXIgc2NoZWR1bGVySWQgPSAkKHRoaXMpLmRhdGEoJ3NjaGVkdWxlci1pZCcpOwogICAgICAgICAgICBUYXJnZXROUy5Ub2dnbGVWYWxpZChzY2hlZHVsZXJJZCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEV4ZWN1dGUgTm93IGFjdGlvbgogICAgICAgICQoJy5BY3Rpb25JY29uLkV4ZWN1dGVOb3cnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIHZhciBzY2hlZHVsZXJJZCA9ICQodGhpcykuZGF0YSgnc2NoZWR1bGVyLWlkJyk7CgogICAgICAgICAgICBpZiAoY29uZmlybShDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRXhlY3V0ZSB0aGlzIHNjaGVkdWxlIG5vdyBhbmQgY3JlYXRlIGEgdGlja2V0PycpKSkgewogICAgICAgICAgICAgICAgVGFyZ2V0TlMuRXhlY3V0ZU5vdyhzY2hlZHVsZXJJZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gRHVwbGljYXRlIGFjdGlvbgogICAgICAgICQoJy5BY3Rpb25JY29uLkR1cGxpY2F0ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgdmFyIHNjaGVkdWxlcklkID0gJCh0aGlzKS5kYXRhKCdzY2hlZHVsZXItaWQnKTsKICAgICAgICAgICAgVGFyZ2V0TlMuRHVwbGljYXRlKHNjaGVkdWxlcklkKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gU2hvdyBQcmV2aWV3IGFjdGlvbgogICAgICAgICQoJy5BY3Rpb25JY29uLlNob3dQcmV2aWV3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB2YXIgc2NoZWR1bGVySWQgPSAkKHRoaXMpLmRhdGEoJ3NjaGVkdWxlci1pZCcpOwogICAgICAgICAgICBUYXJnZXROUy5TaG93UHJldmlldyhzY2hlZHVsZXJJZCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNob3cgSGlzdG9yeSBhY3Rpb24KICAgICAgICAkKCcuQWN0aW9uSWNvbi5TaG93SGlzdG9yeScpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgdmFyIHNjaGVkdWxlcklkID0gJCh0aGlzKS5kYXRhKCdzY2hlZHVsZXItaWQnKTsKICAgICAgICAgICAgVGFyZ2V0TlMuU2hvd0hpc3Rvcnkoc2NoZWR1bGVySWQpOwogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIERlbGV0ZVNjaGVkdWxlCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXIKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtOdW1iZXJ9IHNjaGVkdWxlcklkIC0gVGhlIHNjaGVkdWxlIElEIHRvIGRlbGV0ZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBEZWxldGUgYSBzY2hlZHVsZSB2aWEgQUpBWC4KICAgICAqLwogICAgVGFyZ2V0TlMuRGVsZXRlU2NoZWR1bGUgPSBmdW5jdGlvbiAoc2NoZWR1bGVySWQpIHsKICAgICAgICB2YXIgdXJsID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpICsKICAgICAgICAgICAgJ0FjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlcjtTdWJhY3Rpb249RGVsZXRlO1NjaGVkdWxlcklEPScgKyBzY2hlZHVsZXJJZCArICc7QUpBWD0xO0NoYWxsZW5nZVRva2VuPScgKyBDb3JlLkNvbmZpZy5HZXQoJ0NoYWxsZW5nZVRva2VuJyk7CgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwodXJsLCB7fSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcm93IGZyb20gdGFibGUKICAgICAgICAgICAgICAgICQoJ3RyW2RhdGEtc2NoZWR1bGVyLWlkPSInICsgc2NoZWR1bGVySWQgKyAnIl0nKS5mYWRlT3V0KDMwMCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgaXMgbm93IGVtcHR5CiAgICAgICAgICAgICAgICAgICAgaWYgKCQoJyNTY2hlZHVsZVRhYmxlIHRib2R5IHRyJykubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYWxlcnQoQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0Vycm9yIGRlbGV0aW5nIHNjaGVkdWxlLicpKTsKICAgICAgICAgICAgfQogICAgICAgIH0sICdqc29uJyk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgVG9nZ2xlVmFsaWQKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlcgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge051bWJlcn0gc2NoZWR1bGVySWQgLSBUaGUgc2NoZWR1bGUgSUQgdG8gdG9nZ2xlLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRvZ2dsZSB0aGUgdmFsaWQgc3RhdHVzIG9mIGEgc2NoZWR1bGUuCiAgICAgKi8KICAgIFRhcmdldE5TLlRvZ2dsZVZhbGlkID0gZnVuY3Rpb24gKHNjaGVkdWxlcklkKSB7CiAgICAgICAgdmFyIHVybCA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArCiAgICAgICAgICAgICdBY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXI7U3ViYWN0aW9uPVRvZ2dsZVZhbGlkO1NjaGVkdWxlcklEPScgKyBzY2hlZHVsZXJJZCArICc7QUpBWD0xO0NoYWxsZW5nZVRva2VuPScgKyBDb3JlLkNvbmZpZy5HZXQoJ0NoYWxsZW5nZVRva2VuJyk7CgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwodXJsLCB7fSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAvLyBSZWxvYWQgdG8gc2hvdyB1cGRhdGVkIHN0YXR1cwogICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhbGVydChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRXJyb3IgdG9nZ2xpbmcgc2NoZWR1bGUgc3RhdHVzLicpKTsKICAgICAgICAgICAgfQogICAgICAgIH0sICdqc29uJyk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgRXhlY3V0ZU5vdwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzY2hlZHVsZXJJZCAtIFRoZSBzY2hlZHVsZSBJRCB0byBleGVjdXRlLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIEV4ZWN1dGUgYSBzY2hlZHVsZSBpbW1lZGlhdGVseS4KICAgICAqLwogICAgVGFyZ2V0TlMuRXhlY3V0ZU5vdyA9IGZ1bmN0aW9uIChzY2hlZHVsZXJJZCkgewogICAgICAgIHZhciB1cmwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKwogICAgICAgICAgICAnQWN0aW9uPUFnZW50VGlja2V0U2NoZWR1bGVyO1N1YmFjdGlvbj1FeGVjdXRlTm93O1NjaGVkdWxlcklEPScgKyBzY2hlZHVsZXJJZCArICc7QUpBWD0xO0NoYWxsZW5nZVRva2VuPScgKyBDb3JlLkNvbmZpZy5HZXQoJ0NoYWxsZW5nZVRva2VuJyk7CgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwodXJsLCB7fSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLnRpY2tldElEKSB7CiAgICAgICAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgY3JlYXRlZCB0aWNrZXQKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpICsKICAgICAgICAgICAgICAgICAgICAnQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0nICsgcmVzcG9uc2UudGlja2V0SUQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhbGVydChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRXJyb3IgZXhlY3V0aW5nIHNjaGVkdWxlLiBDaGVjayB0aGUgc3lzdGVtIGxvZyBmb3IgZGV0YWlscy4nKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCAnanNvbicpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIER1cGxpY2F0ZQogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzY2hlZHVsZXJJZCAtIFRoZSBzY2hlZHVsZSBJRCB0byBkdXBsaWNhdGUuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgRHVwbGljYXRlIGEgc2NoZWR1bGUuCiAgICAgKi8KICAgIFRhcmdldE5TLkR1cGxpY2F0ZSA9IGZ1bmN0aW9uIChzY2hlZHVsZXJJZCkgewogICAgICAgIHZhciB1cmwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKwogICAgICAgICAgICAnQWN0aW9uPUFnZW50VGlja2V0U2NoZWR1bGVyO1N1YmFjdGlvbj1EdXBsaWNhdGU7U2NoZWR1bGVySUQ9JyArIHNjaGVkdWxlcklkICsgJztBSkFYPTE7Q2hhbGxlbmdlVG9rZW49JyArIENvcmUuQ29uZmlnLkdldCgnQ2hhbGxlbmdlVG9rZW4nKTsKCiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCh1cmwsIHt9LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UubmV3SUQpIHsKICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIGVkaXQgdGhlIG5ldyBzY2hlZHVsZSAodXNpbmcgY29ycmVjdCBtb2R1bGUgYmFzZWQgb24gc2NoZWR1bGUgbW9kZSkKICAgICAgICAgICAgICAgIHZhciBhY3Rpb24gPSByZXNwb25zZS5zY2hlZHVsZU1vZGUgPT09ICdwcm9jZXNzJyA/ICdBZ2VudFRpY2tldFNjaGVkdWxlclByb2Nlc3MnIDogJ0FnZW50VGlja2V0U2NoZWR1bGVyJzsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpICsKICAgICAgICAgICAgICAgICAgICAnQWN0aW9uPScgKyBhY3Rpb24gKyAnO1N1YmFjdGlvbj1FZGl0O1NjaGVkdWxlcklEPScgKyByZXNwb25zZS5uZXdJRDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFsZXJ0KENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdFcnJvciBkdXBsaWNhdGluZyBzY2hlZHVsZS4nKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCAnanNvbicpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFNob3dQcmV2aWV3CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXIKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtOdW1iZXJ9IHNjaGVkdWxlcklkIC0gVGhlIHNjaGVkdWxlIElEIHRvIHByZXZpZXcuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU2hvdyBwcmV2aWV3IG9mIG5leHQgZXhlY3V0aW9ucy4KICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd1ByZXZpZXcgPSBmdW5jdGlvbiAoc2NoZWR1bGVySWQpIHsKICAgICAgICB2YXIgdXJsID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpICsKICAgICAgICAgICAgJ0FjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlckFKQVg7U3ViYWN0aW9uPUdldE5leHRFeGVjdXRpb25zO1NjaGVkdWxlcklEPScgKyBzY2hlZHVsZXJJZDsKCiAgICAgICAgLy8gUmVzZXQgYW5kIHNob3cgbW9kYWwKICAgICAgICAkKCcjUHJldmlld0NvbnRlbnQnKS5odG1sKCc8cCBjbGFzcz0iQ2VudGVyIj48aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIj48L2k+ICcgKwogICAgICAgICAgICBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnTG9hZGluZy4uLicpICsgJzwvcD4nKTsKCiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coCiAgICAgICAgICAgICQoJyNQcmV2aWV3TW9kYWwnKSwKICAgICAgICAgICAgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ05leHQgU2NoZWR1bGVkIEV4ZWN1dGlvbnMnKSwKICAgICAgICAgICAgJzQwMHB4JywKICAgICAgICAgICAgJ0NlbnRlcicsCiAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMYWJlbDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0Nsb3NlJyksCiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZzp2aXNpYmxlJykpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICdQcmltYXJ5JwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgKTsKCiAgICAgICAgLy8gTG9hZCBkYXRhCiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCh1cmwsIHt9LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgdmFyIGh0bWwgPSAnJzsKCiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5leGVjdXRpb25zICYmIHJlc3BvbnNlLmV4ZWN1dGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgaHRtbCA9ICc8dWwgY2xhc3M9IlByZXZpZXdMaXN0Ij4nOwogICAgICAgICAgICAgICAgJC5lYWNoKHJlc3BvbnNlLmV4ZWN1dGlvbnMsIGZ1bmN0aW9uIChpbmRleCwgZXhlY3V0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxpPjxpIGNsYXNzPSJmYSBmYS1jYWxlbmRhciI+PC9pPiAnICsgVGFyZ2V0TlMuRXNjYXBlSFRNTChleGVjdXRpb24pICsgJzwvbGk+JzsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaHRtbCArPSAnPC91bD4nOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaHRtbCA9ICc8cCBjbGFzcz0iQ2VudGVyIj4nICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ05vIHVwY29taW5nIGV4ZWN1dGlvbnMuJykgKyAnPC9wPic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICQoJyNQcmV2aWV3Q29udGVudCcpLmh0bWwoaHRtbCk7CiAgICAgICAgfSwgJ2pzb24nKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBTaG93SGlzdG9yeQogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzY2hlZHVsZXJJZCAtIFRoZSBzY2hlZHVsZSBJRCB0byBzaG93IGhpc3RvcnkgZm9yLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFNob3cgZXhlY3V0aW9uIGhpc3RvcnkuCiAgICAgKi8KICAgIFRhcmdldE5TLlNob3dIaXN0b3J5ID0gZnVuY3Rpb24gKHNjaGVkdWxlcklkKSB7CiAgICAgICAgdmFyIHVybCA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArCiAgICAgICAgICAgICdBY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXJBSkFYO1N1YmFjdGlvbj1HZXRIaXN0b3J5O1NjaGVkdWxlcklEPScgKyBzY2hlZHVsZXJJZDsKCiAgICAgICAgLy8gUmVzZXQgYW5kIHNob3cgbW9kYWwKICAgICAgICAkKCcjSGlzdG9yeUNvbnRlbnQnKS5odG1sKCc8cCBjbGFzcz0iQ2VudGVyIj48aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIj48L2k+ICcgKwogICAgICAgICAgICBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnTG9hZGluZy4uLicpICsgJzwvcD4nKTsKCiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coCiAgICAgICAgICAgICQoJyNIaXN0b3J5TW9kYWwnKSwKICAgICAgICAgICAgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0V4ZWN1dGlvbiBIaXN0b3J5JyksCiAgICAgICAgICAgICcyMHB4JywKICAgICAgICAgICAgJ0NlbnRlcicsCiAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMYWJlbDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0Nsb3NlJyksCiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZzp2aXNpYmxlJykpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICdQcmltYXJ5JwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgKTsKCiAgICAgICAgLy8gU2V0IGRpYWxvZyB3aWR0aCBhZnRlciBpdCdzIHNob3duLCBsZXQgWm51bnkgaGFuZGxlIHBvc2l0aW9uaW5nCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyICRkaWFsb2cgPSAkKCcuRGlhbG9nOnZpc2libGUnKTsKICAgICAgICAgICAgJGRpYWxvZy5jc3MoewogICAgICAgICAgICAgICAgJ3dpZHRoJzogJzg1MHB4JywKICAgICAgICAgICAgICAgICdtYXgtd2lkdGgnOiAnOTB2dycsCiAgICAgICAgICAgICAgICAnbWFyZ2luLWxlZnQnOiAnLTQyNXB4JywKICAgICAgICAgICAgICAgICdsZWZ0JzogJzUwJScKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIE1ha2UgSGlzdG9yeUNvbnRlbnQgc2Nyb2xsYWJsZSBzbyB0YWJsZSBoZWFkZXIgc2Nyb2xscyB3aXRoIGNvbnRlbnQKICAgICAgICAgICAgJCgnI0hpc3RvcnlDb250ZW50JykuY3NzKHsKICAgICAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogJzcwdmgnLAogICAgICAgICAgICAgICAgJ292ZXJmbG93LXknOiAnYXV0bycKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwgNTApOwoKICAgICAgICAvLyBMb2FkIGRhdGEKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKHVybCwge30sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICB2YXIgaHRtbCA9ICcnOwoKICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmhpc3RvcnkgJiYgcmVzcG9uc2UuaGlzdG9yeS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhTdHlsZSA9ICdiYWNrZ3JvdW5kOiAjZjVmNWY1OyBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IHotaW5kZXg6IDE7IGJveC1zaGFkb3c6IDAgMXB4IDAgMCAjY2NjOyc7CiAgICAgICAgICAgICAgICBodG1sID0gJzx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgYm9yZGVyLXNwYWNpbmc6IDA7Ij48dGhlYWQ+PHRyPicgKwogICAgICAgICAgICAgICAgICAgICc8dGggY2xhc3M9IkNlbnRlciIgc3R5bGU9IndpZHRoOiA0MHB4OyAnICsgdGhTdHlsZSArICciPiM8L3RoPicgKwogICAgICAgICAgICAgICAgICAgICc8dGggc3R5bGU9IndpZHRoOiAxNDBweDsgJyArIHRoU3R5bGUgKyAnIj4nICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1RpbWUnKSArICc8L3RoPicgKwogICAgICAgICAgICAgICAgICAgICc8dGggc3R5bGU9IndpZHRoOiAxNjBweDsgJyArIHRoU3R5bGUgKyAnIj4nICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1RpY2tldCcpICsgJzwvdGg+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0aCBzdHlsZT0iJyArIHRoU3R5bGUgKyAnIj4nICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1RpdGxlJykgKyAnPC90aD4nICsKICAgICAgICAgICAgICAgICAgICAnPHRoIGNsYXNzPSJDZW50ZXIiIHN0eWxlPSJ3aWR0aDogNjBweDsgJyArIHRoU3R5bGUgKyAnIj4nICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1N0YXR1cycpICsgJzwvdGg+JyArCiAgICAgICAgICAgICAgICAgICAgJzwvdHI+PC90aGVhZD48dGJvZHk+JzsKCiAgICAgICAgICAgICAgICAkLmVhY2gocmVzcG9uc2UuaGlzdG9yeSwgZnVuY3Rpb24gKGluZGV4LCBlbnRyeSkgewogICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXNJY29uID0gZW50cnkuc3VjY2VzcyA/CiAgICAgICAgICAgICAgICAgICAgICAgICc8aSBjbGFzcz0iZmEgZmEtY2hlY2stY2lyY2xlIiBzdHlsZT0iY29sb3I6Z3JlZW4iPjwvaT4nIDoKICAgICAgICAgICAgICAgICAgICAgICAgJzxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiIHN0eWxlPSJjb2xvcjpyZWQiPjwvaT4nOwoKICAgICAgICAgICAgICAgICAgICB2YXIgdGlja2V0TnVtYmVyID0gJy0nOwogICAgICAgICAgICAgICAgICAgIHZhciB0aWNrZXRUaXRsZSA9ICctJzsKICAgICAgICAgICAgICAgICAgICB2YXIgdGlja2V0VXJsID0gJyc7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd1N0eWxlID0gJyc7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRpY2tldElEICYmIGVudHJ5LnRpY2tldElEID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXROdW1iZXIgPSBlbnRyeS50aWNrZXROdW1iZXIgPyBUYXJnZXROUy5Fc2NhcGVIVE1MKGVudHJ5LnRpY2tldE51bWJlcikgOiAnIycgKyBlbnRyeS50aWNrZXRJRDsKICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0VGl0bGUgPSBlbnRyeS50aWNrZXRUaXRsZSA/IFRhcmdldE5TLkVzY2FwZUhUTUwoZW50cnkudGlja2V0VGl0bGUpIDogJy0nOwogICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRVcmwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKyAnQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0nICsgZW50cnkudGlja2V0SUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0eWxlID0gJyBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgZGF0YS1ocmVmPSInICsgdGlja2V0VXJsICsgJyIgY2xhc3M9IkNsaWNrYWJsZVJvdyInOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPHRyJyArIHJvd1N0eWxlICsgJz4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFzcz0iQ2VudGVyIj4nICsgZW50cnkucnVuTnVtYmVyICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICc8dGQgc3R5bGU9IndoaXRlLXNwYWNlOiBub3dyYXA7Ij4nICsgVGFyZ2V0TlMuRXNjYXBlSFRNTChlbnRyeS5leGVjdXRpb25UaW1lKSArICc8L3RkPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHRkPicgKyB0aWNrZXROdW1iZXIgKyAnPC90ZD4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZD4nICsgdGlja2V0VGl0bGUgKyAnPC90ZD4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFzcz0iQ2VudGVyIj4nICsgc3RhdHVzSWNvbiArICc8L3RkPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPC90cj4nOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaHRtbCArPSAnPC90Ym9keT48L3RhYmxlPic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBodG1sID0gJzxwIGNsYXNzPSJDZW50ZXIiPicgKyBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnTm8gZXhlY3V0aW9uIGhpc3RvcnkgZm91bmQuJykgKyAnPC9wPic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICQoJyNIaXN0b3J5Q29udGVudCcpLmh0bWwoaHRtbCk7CgogICAgICAgICAgICAvLyBNYWtlIHJvd3MgY2xpY2thYmxlCiAgICAgICAgICAgICQoJyNIaXN0b3J5Q29udGVudCcpLm9uKCdjbGljaycsICcuQ2xpY2thYmxlUm93JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICQodGhpcykuZGF0YSgnaHJlZicpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIEhvdmVyIGVmZmVjdCBmb3IgY2xpY2thYmxlIHJvd3MKICAgICAgICAgICAgJCgnI0hpc3RvcnlDb250ZW50IC5DbGlja2FibGVSb3cnKS5ob3ZlcigKICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICcjZjBmN2ZmJyk7IH0sCiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnJyk7IH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIC8vIEVuc3VyZSBzY3JvbGwgY29udGFpbmVyIGFmdGVyIGNvbnRlbnQgaXMgbG9hZGVkCiAgICAgICAgICAgICQoJyNIaXN0b3J5Q29udGVudCcpLmNzcyh7CiAgICAgICAgICAgICAgICAnbWF4LWhlaWdodCc6ICc3MHZoJywKICAgICAgICAgICAgICAgICdvdmVyZmxvdy15JzogJ2F1dG8nCiAgICAgICAgICAgIH0pOwogICAgICAgIH0sICdqc29uJyk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgRXNjYXBlSFRNTAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgLSBTdHJpbmcgdG8gZXNjYXBlLgogICAgICogQHJldHVybnMge1N0cmluZ30gRXNjYXBlZCBzdHJpbmcuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgRXNjYXBlIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzLgogICAgICovCiAgICBUYXJnZXROUy5Fc2NhcGVIVE1MID0gZnVuY3Rpb24gKHN0cikgewogICAgICAgIGlmICghc3RyKSByZXR1cm4gJyc7CiAgICAgICAgcmV0dXJuIFN0cmluZyhzdHIpCiAgICAgICAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpCiAgICAgICAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKQogICAgICAgICAgICAucmVwbGFjZSgvIi9nLCAnJnF1b3Q7JykKICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyYjMDM5OycpOwogICAgfTsKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyIHx8IHt9KSk7Cg==</File>
        <File Permission="660" Location="var/httpd/htdocs/js/Core.Agent.TicketSchedulerForm.js" Encode="Base64">Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgd29sa2lnLml0LCBodHRwczovL3dvbGtpZy5pdC8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLkFnZW50ID0gQ29yZS5BZ2VudCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybQogKiBAbWVtYmVyb2YgQ29yZS5BZ2VudAogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGZvciB0aGUgVGlja2V0U2NoZWR1bGVyIGZvcm0uCiAqLwpDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplIHRoZSBUaWNrZXRTY2hlZHVsZXIgZm9ybSBtb2R1bGUuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgLy8gUmVtb3ZlIE1vZGVybml6ZSBmcm9tIHRpbWUvZGF0ZSBzZWxlY3RzIChtdXN0IGJlIGZpcnN0ISkKICAgICAgICBUYXJnZXROUy5GaXhJbmxpbmVTZWxlY3RzKCk7CiAgICAgICAgLy8gUnVuIGFnYWluIGFmdGVyIGRlbGF5IHRvIGNhdGNoIGxhdGUgTW9kZXJuaXplIGluaXRpYWxpemF0aW9uCiAgICAgICAgc2V0VGltZW91dChUYXJnZXROUy5GaXhJbmxpbmVTZWxlY3RzLCAxMDApOwogICAgICAgIHNldFRpbWVvdXQoVGFyZ2V0TlMuRml4SW5saW5lU2VsZWN0cywgNTAwKTsKCiAgICAgICAgLy8gQmluZCBzY2hlZHVsZSB0eXBlIGNoYW5nZQogICAgICAgIFRhcmdldE5TLkJpbmRTZWxlY3RDaGFuZ2UoJ1NjaGVkdWxlVHlwZScsIFRhcmdldE5TLlVwZGF0ZVNjaGVkdWxlVHlwZUZpZWxkcyk7CgogICAgICAgIC8vIEJpbmQgZW5kIHR5cGUgY2hhbmdlCiAgICAgICAgVGFyZ2V0TlMuQmluZFNlbGVjdENoYW5nZSgnRW5kVHlwZScsIFRhcmdldE5TLlVwZGF0ZUVuZFR5cGVGaWVsZHMpOwoKICAgICAgICAvLyBCaW5kIGRheSBzZWxlY3Rpb24gd2FybmluZwogICAgICAgIFRhcmdldE5TLkJpbmRTZWxlY3RDaGFuZ2UoJ0RheScsIFRhcmdldE5TLlVwZGF0ZURheVdhcm5pbmcpOwoKICAgICAgICAvLyBJbml0aWFsaXplIGZpZWxkIHZpc2liaWxpdHkKICAgICAgICBUYXJnZXROUy5VcGRhdGVTY2hlZHVsZVR5cGVGaWVsZHMoKTsKICAgICAgICBUYXJnZXROUy5VcGRhdGVFbmRUeXBlRmllbGRzKCk7CiAgICAgICAgVGFyZ2V0TlMuVXBkYXRlRGF5V2FybmluZygpOwoKICAgICAgICAvLyBCaW5kIHBsYWNlaG9sZGVyIGNsaWNrLXRvLWNvcHkKICAgICAgICBUYXJnZXROUy5Jbml0UGxhY2Vob2xkZXJDb3B5KCk7CgogICAgICAgIC8vIEJpbmQgcHJldmlldyBidXR0b24KICAgICAgICAkKCcjUHJldmlld0J1dHRvbicpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIFRhcmdldE5TLlNob3dQcmV2aWV3KCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEJpbmQgcXVldWUgY2hhbmdlIGZvciBzZXJ2aWNlL2NoZWNrbGlzdCBsb2FkaW5nCiAgICAgICAgVGFyZ2V0TlMuQmluZFNlbGVjdENoYW5nZSgnUXVldWVJRCcsIFRhcmdldE5TLk9uUXVldWVDaGFuZ2UpOwoKICAgICAgICAvLyBJbml0aWFsaXplIGN1c3RvbWVyIHVzZXIgYXV0b2NvbXBsZXRlIHNlYXJjaAogICAgICAgIFRhcmdldE5TLkluaXRDdXN0b21lclNlYXJjaCgpOwoKICAgICAgICAvLyBJbml0aWFsaXplIFJpY2hUZXh0IEVkaXRvciBmb3IgQm9keSBmaWVsZCBpZiBhdmFpbGFibGUKICAgICAgICBUYXJnZXROUy5Jbml0UmljaFRleHRFZGl0b3IoKTsKCiAgICAgICAgLy8gQmluZCBEYWVtb24gaW5mbyBkaWFsb2cKICAgICAgICBUYXJnZXROUy5Jbml0RGFlbW9uSW5mb0RpYWxvZygpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEZpeElubGluZVNlbGVjdHMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFJlbW92ZSBNb2Rlcm5pemUvSW5wdXRGaWVsZCB3cmFwcGVyIGZyb20gdGltZSBhbmQgZGF0ZSBzZWxlY3RzIHRvIGtlZXAgdGhlbSBpbmxpbmUuCiAgICAgKi8KICAgIFRhcmdldE5TLkZpeElubGluZVNlbGVjdHMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgLy8gVGFyZ2V0IHNlbGVjdHMgdGhhdCBzaG91bGQgYmUgaW5saW5lICh0aW1lIGFuZCBkYXRlIHNlbGVjdHMpCiAgICAgICAgdmFyIHNlbGVjdElEcyA9IFsnVGltZUhvdXInLCAnVGltZU1pbnV0ZScsICdTdGFydERhdGVEYXknLCAnU3RhcnREYXRlTW9udGgnLCAnU3RhcnREYXRlWWVhcicsICdFbmREYXRlRGF5JywgJ0VuZERhdGVNb250aCcsICdFbmREYXRlWWVhciddOwoKICAgICAgICAkLmVhY2goc2VsZWN0SURzLCBmdW5jdGlvbihpbmRleCwgaWQpIHsKICAgICAgICAgICAgdmFyICRzZWxlY3QgPSAkKCcjJyArIGlkKTsKICAgICAgICAgICAgaWYgKCRzZWxlY3QubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgTW9kZXJuaXplIHdyYXBwZXIgaWYgcHJlc2VudAogICAgICAgICAgICAgICAgdmFyICR3cmFwcGVyID0gJHNlbGVjdC5zaWJsaW5ncygnLklucHV0RmllbGRfQ29udGFpbmVyJyk7CiAgICAgICAgICAgICAgICBpZiAoJHdyYXBwZXIubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgJHdyYXBwZXIucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgc2VsZWN0IGlzIHZpc2libGUgYW5kIGlubGluZQogICAgICAgICAgICAgICAgJHNlbGVjdC5jc3MoewogICAgICAgICAgICAgICAgICAgICdkaXNwbGF5JzogJ2lubGluZS1ibG9jaycsCiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzogJ2F1dG8nLAogICAgICAgICAgICAgICAgICAgICdtaW4td2lkdGgnOiAnNTVweCcsCiAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJzogJ3N0YXRpYycsCiAgICAgICAgICAgICAgICAgICAgJ29wYWNpdHknOiAnMScsCiAgICAgICAgICAgICAgICAgICAgJ3Zpc2liaWxpdHknOiAndmlzaWJsZScKICAgICAgICAgICAgICAgIH0pLnJlbW92ZUNsYXNzKCdNb2Rlcm5pemUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBBbHNvIGZpeCBzZWxlY3RzIHdpdGggU2NoZWR1bGVySW5saW5lU2VsZWN0IGNsYXNzCiAgICAgICAgJCgnc2VsZWN0LlNjaGVkdWxlcklubGluZVNlbGVjdCcpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciAkc2VsZWN0ID0gJCh0aGlzKTsKICAgICAgICAgICAgdmFyICR3cmFwcGVyID0gJHNlbGVjdC5zaWJsaW5ncygnLklucHV0RmllbGRfQ29udGFpbmVyJyk7CiAgICAgICAgICAgIGlmICgkd3JhcHBlci5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICR3cmFwcGVyLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWxlY3QuY3NzKHsKICAgICAgICAgICAgICAgICdkaXNwbGF5JzogJ2lubGluZS1ibG9jaycsCiAgICAgICAgICAgICAgICAnd2lkdGgnOiAnYXV0bycsCiAgICAgICAgICAgICAgICAnbWluLXdpZHRoJzogJzU1cHgnLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJzogJ3N0YXRpYycsCiAgICAgICAgICAgICAgICAnb3BhY2l0eSc6ICcxJywKICAgICAgICAgICAgICAgICd2aXNpYmlsaXR5JzogJ3Zpc2libGUnCiAgICAgICAgICAgIH0pLnJlbW92ZUNsYXNzKCdNb2Rlcm5pemUnKTsKICAgICAgICB9KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBCaW5kU2VsZWN0Q2hhbmdlCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZElEIC0gVGhlIElEIG9mIHRoZSBzZWxlY3QgZmllbGQKICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gY2hhbmdlCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgQmluZCBjaGFuZ2UgZXZlbnQgdG8gYSBzZWxlY3QgZmllbGQsIGNvbXBhdGlibGUgd2l0aCBNb2Rlcm5pemUvSW5wdXRGaWVsZHMuCiAgICAgKi8KICAgIFRhcmdldE5TLkJpbmRTZWxlY3RDaGFuZ2UgPSBmdW5jdGlvbiAoZmllbGRJRCwgY2FsbGJhY2spIHsKICAgICAgICB2YXIgJGZpZWxkID0gJCgnIycgKyBmaWVsZElEKTsKCiAgICAgICAgaWYgKCEkZmllbGQubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIFN0YW5kYXJkIGNoYW5nZSBldmVudAogICAgICAgICRmaWVsZC5vZmYoJ2NoYW5nZS5UaWNrZXRTY2hlZHVsZXInKS5vbignY2hhbmdlLlRpY2tldFNjaGVkdWxlcicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gRm9yIE1vZGVybml6ZSBzZWxlY3RzLCBhbHNvIGxpc3RlbiB0byByZWRyYXcgZXZlbnQgKHRyaWdnZXJlZCBieSBJbnB1dEZpZWxkcykKICAgICAgICAkZmllbGQub2ZmKCdyZWRyYXcuSW5wdXRGaWVsZC5UaWNrZXRTY2hlZHVsZXInKS5vbigncmVkcmF3LklucHV0RmllbGQuVGlja2V0U2NoZWR1bGVyJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFVwZGF0ZURheVdhcm5pbmcKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFNob3cgd2FybmluZyB3aGVuIGRheSA+PSAyOSBpcyBzZWxlY3RlZCAobm90IGFsbCBtb250aHMgaGF2ZSB0aGF0IGRheSkuCiAgICAgKi8KICAgIFRhcmdldE5TLlVwZGF0ZURheVdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGRheSA9IHBhcnNlSW50KCQoJyNEYXknKS52YWwoKSwgMTApLAogICAgICAgICAgICAkd2FybmluZyA9ICQoJyNEYXlXYXJuaW5nJyksCiAgICAgICAgICAgICR0ZXh0ID0gJCgnI0RheVdhcm5pbmdUZXh0JyksCiAgICAgICAgICAgIG1zZyA9ICcnOwoKICAgICAgICBpZiAoaXNOYU4oZGF5KSB8fCBkYXkgPCAyOSB8fCBkYXkgPCAwKSB7CiAgICAgICAgICAgICR3YXJuaW5nLmFkZENsYXNzKCdIaWRkZW4nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRheSA9PT0gMzEpIHsKICAgICAgICAgICAgbXNnID0gQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ09ubHkgbW9udGhzIHdpdGggMzEgZGF5cyB3aWxsIGJlIGV4ZWN1dGVkIChKYW4sIE1hciwgTWF5LCBKdWwsIEF1ZywgT2N0LCBEZWMpLicpOwogICAgICAgIH0gZWxzZSBpZiAoZGF5ID09PSAzMCkgewogICAgICAgICAgICBtc2cgPSBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRmVicnVhcnkgd2lsbCBiZSBza2lwcGVkLicpOwogICAgICAgIH0gZWxzZSBpZiAoZGF5ID09PSAyOSkgewogICAgICAgICAgICBtc2cgPSBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRmVicnVhcnkgd2lsbCBiZSBza2lwcGVkIGluIG5vbi1sZWFwIHllYXJzLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG1zZykgewogICAgICAgICAgICAkdGV4dC50ZXh0KG1zZyk7CiAgICAgICAgICAgICR3YXJuaW5nLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkd2FybmluZy5hZGRDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFVwZGF0ZVNjaGVkdWxlVHlwZUZpZWxkcwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU2hvdy9oaWRlIGZpZWxkcyBiYXNlZCBvbiBzZWxlY3RlZCBzY2hlZHVsZSB0eXBlLgogICAgICovCiAgICBUYXJnZXROUy5VcGRhdGVTY2hlZHVsZVR5cGVGaWVsZHMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHNjaGVkdWxlVHlwZSA9ICQoJyNTY2hlZHVsZVR5cGUnKS52YWwoKTsKCiAgICAgICAgLy8gSGlkZSBhbGwgdHlwZS1zcGVjaWZpYyBzZXR0aW5ncwogICAgICAgICQoJy5TY2hlZHVsZVR5cGVTZXR0aW5ncycpLmFkZENsYXNzKCdIaWRkZW4nKTsKCiAgICAgICAgLy8gU2hvdyByZWxldmFudCBzZXR0aW5ncyBiYXNlZCBvbiBzY2hlZHVsZSB0eXBlCiAgICAgICAgc3dpdGNoIChzY2hlZHVsZVR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnd2Vla2x5JzoKICAgICAgICAgICAgICAgICQoJyNXZWVrbHlTZXR0aW5ncycpLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdtb250aGx5X2RheSc6CiAgICAgICAgICAgICAgICAkKCcjTW9udGhseURheVNldHRpbmdzJykucmVtb3ZlQ2xhc3MoJ0hpZGRlbicpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ21vbnRobHlfd2Vla2RheSc6CiAgICAgICAgICAgICAgICAkKCcjTW9udGhseVdlZWtkYXlTZXR0aW5ncycpLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdtb250aGx5X3dlZWtkYXlfb2Zmc2V0JzoKICAgICAgICAgICAgICAgICQoJyNNb250aGx5V2Vla2RheVNldHRpbmdzJykucmVtb3ZlQ2xhc3MoJ0hpZGRlbicpOwogICAgICAgICAgICAgICAgJCgnI01vbnRobHlXZWVrZGF5T2Zmc2V0U2V0dGluZ3MnKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAneWVhcmx5JzoKICAgICAgICAgICAgICAgICQoJyNNb250aGx5RGF5U2V0dGluZ3MnKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgICAgICAgICAkKCcjWWVhcmx5U2V0dGluZ3MnKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaW50ZXJ2YWwnOgogICAgICAgICAgICAgICAgJCgnI0ludGVydmFsU2V0dGluZ3MnKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgLy8gJ2RhaWx5JyBoYXMgbm8gc3BlY2lhbCBzZXR0aW5ncyAtIG9ubHkgdGltZSBpcyBzaG93bgogICAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBVcGRhdGVFbmRUeXBlRmllbGRzCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBTaG93L2hpZGUgZmllbGRzIGJhc2VkIG9uIHNlbGVjdGVkIGVuZCB0eXBlLgogICAgICovCiAgICBUYXJnZXROUy5VcGRhdGVFbmRUeXBlRmllbGRzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlbmRUeXBlID0gJCgnI0VuZFR5cGUnKS52YWwoKTsKCiAgICAgICAgLy8gSGlkZSBhbGwgZW5kIHR5cGUgc2V0dGluZ3MKICAgICAgICAkKCcuRW5kVHlwZVNldHRpbmdzJykuYWRkQ2xhc3MoJ0hpZGRlbicpOwoKICAgICAgICAvLyBTaG93IHJlbGV2YW50IHNldHRpbmdzCiAgICAgICAgc3dpdGNoIChlbmRUeXBlKSB7CiAgICAgICAgICAgIGNhc2UgJ29jY3VycmVuY2VzJzoKICAgICAgICAgICAgICAgICQoJyNPY2N1cnJlbmNlc1NldHRpbmdzJykucmVtb3ZlQ2xhc3MoJ0hpZGRlbicpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOgogICAgICAgICAgICAgICAgJCgnI0RhdGVTZXR0aW5ncycpLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAvLyAnbmV2ZXInIGhhcyBubyBzcGVjaWFsIHNldHRpbmdzCiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXRQbGFjZWhvbGRlckNvcHkKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIEluaXRpYWxpemUgY2xpY2stdG8tY29weSBmdW5jdGlvbmFsaXR5IGZvciBwbGFjZWhvbGRlciBpdGVtcy4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdFBsYWNlaG9sZGVyQ29weSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBVc2UgZXZlbnQgZGVsZWdhdGlvbiBvbiBkb2N1bWVudCBmb3IgcmVsaWFiaWxpdHkKICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ2NsaWNrLlRTUGxhY2Vob2xkZXInKS5vbignY2xpY2suVFNQbGFjZWhvbGRlcicsICcuUGxhY2Vob2xkZXJJdGVtJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgICAgICAgICAgdmFyICRpdGVtID0gJCh0aGlzKSwKICAgICAgICAgICAgICAgIC8vIFVzZSBhdHRyKCkgaW5zdGVhZCBvZiBkYXRhKCkgLSBqUXVlcnkncyBkYXRhKCkgY2FuIGhhdmUgaXNzdWVzIHdpdGggc3BlY2lhbCBjaGFycwogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSAkaXRlbS5hdHRyKCdkYXRhLXBsYWNlaG9sZGVyJyk7CgogICAgICAgICAgICBpZiAoIXBsYWNlaG9sZGVyKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIENvcHkgdG8gY2xpcGJvYXJkCiAgICAgICAgICAgIFRhcmdldE5TLkNvcHlUb0NsaXBib2FyZChwbGFjZWhvbGRlcik7CgogICAgICAgICAgICAvLyBWaXN1YWwgZmVlZGJhY2sKICAgICAgICAgICAgJGl0ZW0uYWRkQ2xhc3MoJ0NvcGllZCcpOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICRpdGVtLnJlbW92ZUNsYXNzKCdDb3BpZWQnKTsKICAgICAgICAgICAgfSwgODAwKTsKICAgICAgICB9KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBDb3B5VG9DbGlwYm9hcmQKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBjb3B5LgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIENvcHkgdGV4dCB0byBjbGlwYm9hcmQgdXNpbmcgbW9kZXJuIEFQSSB3aXRoIGZhbGxiYWNrLgogICAgICovCiAgICBUYXJnZXROUy5Db3B5VG9DbGlwYm9hcmQgPSBmdW5jdGlvbiAodGV4dCkgewogICAgICAgIC8vIE1vZGVybiBDbGlwYm9hcmQgQVBJCiAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpIHsKICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgb24gZXJyb3IKICAgICAgICAgICAgICAgIFRhcmdldE5TLkNvcHlUb0NsaXBib2FyZEZhbGxiYWNrKHRleHQpOwogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBGYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlcnMKICAgICAgICAgICAgVGFyZ2V0TlMuQ29weVRvQ2xpcGJvYXJkRmFsbGJhY2sodGV4dCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIENvcHlUb0NsaXBib2FyZEZhbGxiYWNrCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gY29weS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBGYWxsYmFjayBjb3B5IG1ldGhvZCB1c2luZyB0ZW1wb3JhcnkgdGV4dGFyZWEuCiAgICAgKi8KICAgIFRhcmdldE5TLkNvcHlUb0NsaXBib2FyZEZhbGxiYWNrID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICB2YXIgJHRlbXAgPSAkKCc8dGV4dGFyZWE+Jyk7CiAgICAgICAgJHRlbXAuY3NzKHsKICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgICAgIGxlZnQ6ICctOTk5OXB4JwogICAgICAgIH0pOwogICAgICAgICQoJ2JvZHknKS5hcHBlbmQoJHRlbXApOwogICAgICAgICR0ZW1wLnZhbCh0ZXh0KS5zZWxlY3QoKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgLy8gQ29weSBmYWlsZWQgc2lsZW50bHkKICAgICAgICB9CiAgICAgICAgJHRlbXAucmVtb3ZlKCk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdFJpY2hUZXh0RWRpdG9yCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplIFJpY2hUZXh0IGVkaXRvciBmb3IgQm9keSBmaWVsZC4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdFJpY2hUZXh0RWRpdG9yID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciAkYm9keSA9ICQoJyNCb2R5Jyk7CgogICAgICAgIGlmICghJGJvZHkubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIFJpY2hUZXh0IGlzIGVuYWJsZWQgYW5kIGF2YWlsYWJsZQogICAgICAgIGlmICh0eXBlb2YgQ29yZS5VSS5SaWNoVGV4dEVkaXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgJGJvZHkuaGFzQ2xhc3MoJ1JpY2hUZXh0JykpIHsKICAgICAgICAgICAgQ29yZS5VSS5SaWNoVGV4dEVkaXRvci5Jbml0KCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXRDdXN0b21lclNlYXJjaAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZSBjdXN0b21lciB1c2VyIGF1dG9jb21wbGV0ZSBzZWFyY2ggZmllbGQuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXRDdXN0b21lclNlYXJjaCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgJEVsZW1lbnQgPSAkKCcjQ3VzdG9tZXJVc2VyU2VhcmNoJyk7CgogICAgICAgIGlmICghJEVsZW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIEluaXRpYWxpemUgYXV0b2NvbXBsZXRlCiAgICAgICAgQ29yZS5VSS5BdXRvY29tcGxldGUuSW5pdCgkRWxlbWVudCwgZnVuY3Rpb24gKFJlcXVlc3QsIFJlc3BvbnNlKSB7CiAgICAgICAgICAgIC8vIFNvdXJjZSBmdW5jdGlvbiAtIGZldGNoIGN1c3RvbWVyIHVzZXJzIHZpYSBBSkFYCiAgICAgICAgICAgIHZhciBVUkwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksCiAgICAgICAgICAgICAgICBEYXRhID0gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbjogJ0FnZW50Q3VzdG9tZXJTZWFyY2gnLAogICAgICAgICAgICAgICAgICAgIFRlcm06IFJlcXVlc3QudGVybSwKICAgICAgICAgICAgICAgICAgICBNYXhSZXN1bHRzOiBDb3JlLlVJLkF1dG9jb21wbGV0ZS5HZXRDb25maWcoJ01heFJlc3VsdHNEaXNwbGF5ZWQnKSB8fCAyMAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICRFbGVtZW50LmRhdGEoJ0F1dG9Db21wbGV0ZVhIUicsIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoVVJMLCBEYXRhLCBmdW5jdGlvbiAoUmVzdWx0KSB7CiAgICAgICAgICAgICAgICB2YXIgVmFsdWVEYXRhID0gW107CiAgICAgICAgICAgICAgICAkRWxlbWVudC5yZW1vdmVEYXRhKCdBdXRvQ29tcGxldGVYSFInKTsKICAgICAgICAgICAgICAgICQuZWFjaChSZXN1bHQsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBWYWx1ZURhdGEucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLkxhYmVsICsgJyAoJyArIHRoaXMuVmFsdWUgKyAnKScsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLkxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuVmFsdWUKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgUmVzcG9uc2UoVmFsdWVEYXRhKTsKICAgICAgICAgICAgfSkpOwogICAgICAgIH0sIGZ1bmN0aW9uIChFdmVudCwgVUkpIHsKICAgICAgICAgICAgLy8gU2VsZWN0IGZ1bmN0aW9uIC0gaGFuZGxlIGN1c3RvbWVyIHNlbGVjdGlvbgogICAgICAgICAgICB2YXIgQ3VzdG9tZXJLZXkgPSBVSS5pdGVtLmtleSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVmFsdWUgPSBVSS5pdGVtLnZhbHVlOwoKICAgICAgICAgICAgLy8gU2V0IGRpc3BsYXkgdmFsdWUgaW4gdmlzaWJsZSBmaWVsZAogICAgICAgICAgICAkRWxlbWVudC52YWwoQ3VzdG9tZXJWYWx1ZSk7CgogICAgICAgICAgICAvLyBTZXQgbG9naW4gaW4gaGlkZGVuIGZpZWxkCiAgICAgICAgICAgICQoJyNTZWxlY3RlZEN1c3RvbWVyVXNlcicpLnZhbChDdXN0b21lcktleSk7CgogICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0sICdDdXN0b21lclNlYXJjaCcpOwoKICAgICAgICAvLyBDbGVhciBoaWRkZW4gZmllbGQgd2hlbiB1c2VyIGNsZWFycyB0aGUgdmlzaWJsZSBmaWVsZAogICAgICAgICRFbGVtZW50Lm9uKCdibHVyJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoISRFbGVtZW50LnZhbCgpKSB7CiAgICAgICAgICAgICAgICAkKCcjU2VsZWN0ZWRDdXN0b21lclVzZXInKS52YWwoJycpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgU2hvd1ByZXZpZXcKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFNob3cgcHJldmlldyBvZiBuZXh0IGV4ZWN1dGlvbnMgYmFzZWQgb24gY3VycmVudCBmb3JtIHZhbHVlcy4KICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd1ByZXZpZXcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGRhdGEgPSBUYXJnZXROUy5Db2xsZWN0U2NoZWR1bGVDb25maWcoKTsKCiAgICAgICAgdmFyIHVybCA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArCiAgICAgICAgICAgICdBY3Rpb249QWdlbnRUaWNrZXRTY2hlZHVsZXJBSkFYO1N1YmFjdGlvbj1QcmV2aWV3U2NoZWR1bGUnOwoKICAgICAgICAkKCcjUHJldmlld1Jlc3VsdHMnKS5hZGRDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgJCgnI1ByZXZpZXdMaXN0JykuZW1wdHkoKTsKICAgICAgICAkKCcjUHJldmlld0J1dHRvbicpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuZmluZCgnaScpCiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnZmEtY2FsZW5kYXInKS5hZGRDbGFzcygnZmEtc3Bpbm5lciBmYS1zcGluJyk7CgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwodXJsLCBkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgJCgnI1ByZXZpZXdCdXR0b24nKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKS5maW5kKCdpJykKICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnZmEtc3Bpbm5lciBmYS1zcGluJykuYWRkQ2xhc3MoJ2ZhLWNhbGVuZGFyJyk7CgogICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXhlY3V0aW9ucyAmJiByZXNwb25zZS5leGVjdXRpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICQuZWFjaChyZXNwb25zZS5leGVjdXRpb25zLCBmdW5jdGlvbiAoaW5kZXgsIGV4ZWN1dGlvbikgewogICAgICAgICAgICAgICAgICAgICQoJyNQcmV2aWV3TGlzdCcpLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgJzxsaT48aSBjbGFzcz0iZmEgZmEtY2FsZW5kYXItbyI+PC9pPiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuRXNjYXBlSFRNTChleGVjdXRpb24pICsgJzwvbGk+JwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICQoJyNQcmV2aWV3UmVzdWx0cycpLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICAgICAgJCgnI1ByZXZpZXdMaXN0JykuYXBwZW5kKCc8bGkgY2xhc3M9IkVycm9yIj48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIj48L2k+ICcgKwogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLkVzY2FwZUhUTUwocmVzcG9uc2UuZXJyb3IpICsgJzwvbGk+Jyk7CiAgICAgICAgICAgICAgICAkKCcjUHJldmlld1Jlc3VsdHMnKS5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKCcjUHJldmlld0xpc3QnKS5hcHBlbmQoJzxsaT48aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4gJyArCiAgICAgICAgICAgICAgICAgICAgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ05vIGV4ZWN1dGlvbnMgY2FsY3VsYXRlZC4nKSArICc8L2xpPicpOwogICAgICAgICAgICAgICAgJCgnI1ByZXZpZXdSZXN1bHRzJykucmVtb3ZlQ2xhc3MoJ0hpZGRlbicpOwogICAgICAgICAgICB9CiAgICAgICAgfSwgJ2pzb24nKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBDb2xsZWN0U2NoZWR1bGVDb25maWcKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQHJldHVybnMge09iamVjdH0gVGhlIHNjaGVkdWxlIGNvbmZpZ3VyYXRpb24gZnJvbSBmb3JtIGZpZWxkcy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBDb2xsZWN0IHNjaGVkdWxlIGNvbmZpZ3VyYXRpb24gZnJvbSBmb3JtIGZpZWxkcy4KICAgICAqLwogICAgVGFyZ2V0TlMuQ29sbGVjdFNjaGVkdWxlQ29uZmlnID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBjb25maWcgPSB7CiAgICAgICAgICAgIFNjaGVkdWxlVHlwZTogJCgnI1NjaGVkdWxlVHlwZScpLnZhbCgpLAogICAgICAgICAgICBUaW1lSG91cjogJCgnI1RpbWVIb3VyJykudmFsKCksCiAgICAgICAgICAgIFRpbWVNaW51dGU6ICQoJyNUaW1lTWludXRlJykudmFsKCksCiAgICAgICAgICAgIFRpbWV6b25lOiAkKCcjVGltZXpvbmUnKS52YWwoKSwKICAgICAgICAgICAgRW5kVHlwZTogJCgnI0VuZFR5cGUnKS52YWwoKSwKICAgICAgICAgICAgTWF4T2NjdXJyZW5jZXM6ICQoJyNNYXhPY2N1cnJlbmNlcycpLnZhbCgpLAogICAgICAgICAgICAvLyBFbmREYXRlIGFzIG11bHRpLWZpZWxkIGZvcm1hdAogICAgICAgICAgICBFbmREYXRlVXNlZDogJCgnI0VuZERhdGVVc2VkJykuaXMoJzpjaGVja2VkJykgPyAxIDogMCwKICAgICAgICAgICAgRW5kRGF0ZVllYXI6ICQoJyNFbmREYXRlWWVhcicpLnZhbCgpLAogICAgICAgICAgICBFbmREYXRlTW9udGg6ICQoJyNFbmREYXRlTW9udGgnKS52YWwoKSwKICAgICAgICAgICAgRW5kRGF0ZURheTogJCgnI0VuZERhdGVEYXknKS52YWwoKQogICAgICAgIH07CgogICAgICAgIHZhciBzY2hlZHVsZVR5cGUgPSBjb25maWcuU2NoZWR1bGVUeXBlOwoKICAgICAgICBpZiAoc2NoZWR1bGVUeXBlID09PSAnd2Vla2x5JykgewogICAgICAgICAgICBjb25maWcuV2Vla2RheXMgPSBbXTsKICAgICAgICAgICAgJCgnaW5wdXRbbmFtZT0iV2Vla2RheXMiXTpjaGVja2VkJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBjb25maWcuV2Vla2RheXMucHVzaCgkKHRoaXMpLnZhbCgpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmIChzY2hlZHVsZVR5cGUgPT09ICdtb250aGx5X2RheScgfHwgc2NoZWR1bGVUeXBlID09PSAneWVhcmx5JykgewogICAgICAgICAgICBjb25maWcuRGF5ID0gJCgnI0RheScpLnZhbCgpOwogICAgICAgICAgICBpZiAoc2NoZWR1bGVUeXBlID09PSAneWVhcmx5JykgewogICAgICAgICAgICAgICAgY29uZmlnLk1vbnRoID0gJCgnI01vbnRoJykudmFsKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNjaGVkdWxlVHlwZSA9PT0gJ21vbnRobHlfd2Vla2RheScgfHwgc2NoZWR1bGVUeXBlID09PSAnbW9udGhseV93ZWVrZGF5X29mZnNldCcpIHsKICAgICAgICAgICAgY29uZmlnLk50aCA9ICQoJyNOdGgnKS52YWwoKTsKICAgICAgICAgICAgY29uZmlnLldlZWtkYXkgPSAkKCcjV2Vla2RheScpLnZhbCgpOwogICAgICAgICAgICBpZiAoc2NoZWR1bGVUeXBlID09PSAnbW9udGhseV93ZWVrZGF5X29mZnNldCcpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy5PZmZzZXREYXlzID0gJCgnI09mZnNldERheXMnKS52YWwoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc2NoZWR1bGVUeXBlID09PSAnaW50ZXJ2YWwnKSB7CiAgICAgICAgICAgIGNvbmZpZy5JbnRlcnZhbCA9ICQoJyNJbnRlcnZhbCcpLnZhbCgpOwogICAgICAgICAgICAvLyBTdGFydERhdGUgYXMgbXVsdGktZmllbGQgZm9ybWF0IChyZXF1aXJlZCwgbm8gY2hlY2tib3gpCiAgICAgICAgICAgIGNvbmZpZy5TdGFydERhdGVZZWFyID0gJCgnI1N0YXJ0RGF0ZVllYXInKS52YWwoKTsKICAgICAgICAgICAgY29uZmlnLlN0YXJ0RGF0ZU1vbnRoID0gJCgnI1N0YXJ0RGF0ZU1vbnRoJykudmFsKCk7CiAgICAgICAgICAgIGNvbmZpZy5TdGFydERhdGVEYXkgPSAkKCcjU3RhcnREYXRlRGF5JykudmFsKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY29uZmlnOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIE9uUXVldWVDaGFuZ2UKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIEhhbmRsZSBxdWV1ZSBjaGFuZ2UgLSBsb2FkIHNlcnZpY2VzIGFuZCBjaGVja2xpc3RzLgogICAgICovCiAgICBUYXJnZXROUy5PblF1ZXVlQ2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBxdWV1ZUlEID0gJCgnI1F1ZXVlSUQnKS52YWwoKTsKCiAgICAgICAgLy8gQ2xlYXIgY2hlY2tsaXN0IGRyb3Bkb3duIGlmIG5vIHF1ZXVlIHNlbGVjdGVkCiAgICAgICAgaWYgKCFxdWV1ZUlEKSB7CiAgICAgICAgICAgIGlmICgkKCcjQ2hlY2tsaXN0VGVtcGxhdGVJRHMnKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciAkc2VsZWN0ID0gJCgnI0NoZWNrbGlzdFRlbXBsYXRlSURzJyk7CiAgICAgICAgICAgICAgICAkc2VsZWN0LmVtcHR5KCk7CiAgICAgICAgICAgICAgICBUYXJnZXROUy5SZWZyZXNoSW5wdXRGaWVsZCgkc2VsZWN0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBMb2FkIGNoZWNrbGlzdCB0ZW1wbGF0ZXMgZm9yIHF1ZXVlCiAgICAgICAgaWYgKCQoJyNDaGVja2xpc3RUZW1wbGF0ZUlEcycpLmxlbmd0aCkgewogICAgICAgICAgICBUYXJnZXROUy5Mb2FkQ2hlY2tsaXN0VGVtcGxhdGVzKHF1ZXVlSUQpOwogICAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBSZWZyZXNoSW5wdXRGaWVsZAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byByZWZyZXNoLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFJlZnJlc2ggWm51bnkgSW5wdXRGaWVsZC9Nb2Rlcm5pemUgZWxlbWVudCBhZnRlciBkeW5hbWljIGNoYW5nZXMuCiAgICAgKi8KICAgIFRhcmdldE5TLlJlZnJlc2hJbnB1dEZpZWxkID0gZnVuY3Rpb24gKCRlbGVtZW50KSB7CiAgICAgICAgaWYgKCEkZWxlbWVudCB8fCAhJGVsZW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIFRyaWdnZXIgcmVkcmF3IGV2ZW50IGZvciBNb2Rlcm5pemUvSW5wdXRGaWVsZHMKICAgICAgICAkZWxlbWVudC50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIExvYWRDaGVja2xpc3RUZW1wbGF0ZXMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtOdW1iZXJ9IHF1ZXVlSUQgLSBUaGUgcXVldWUgSUQuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgTG9hZCBjaGVja2xpc3QgdGVtcGxhdGVzIGZvciBhIHF1ZXVlIChtdWx0aXBsZSBzZWxlY3Rpb24pLgogICAgICovCiAgICBUYXJnZXROUy5Mb2FkQ2hlY2tsaXN0VGVtcGxhdGVzID0gZnVuY3Rpb24gKHF1ZXVlSUQpIHsKICAgICAgICB2YXIgdXJsID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpICsKICAgICAgICAgICAgJ0FjdGlvbj1BZ2VudFRpY2tldFNjaGVkdWxlckFKQVg7U3ViYWN0aW9uPUdldENoZWNrbGlzdFRlbXBsYXRlcztRdWV1ZUlEPScgKyBxdWV1ZUlEOwoKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKHVybCwge30sIGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICB2YXIgJHNlbGVjdCA9ICQoJyNDaGVja2xpc3RUZW1wbGF0ZUlEcycpLAogICAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9ICRzZWxlY3QudmFsKCkgfHwgW107CgogICAgICAgICAgICAkc2VsZWN0LmVtcHR5KCk7CgogICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudGVtcGxhdGVzKSB7CiAgICAgICAgICAgICAgICAkLmVhY2gocmVzcG9uc2UudGVtcGxhdGVzLCBmdW5jdGlvbiAoaWQsIG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZWN0LmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT0iJyArIGlkICsgJyI+JyArIFRhcmdldE5TLkVzY2FwZUhUTUwobmFtZSkgKyAnPC9vcHRpb24+Jyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyB2YWx1ZXMgaWYgc3RpbGwgYXZhaWxhYmxlIChtdWx0aXBsZSBzZWxlY3Rpb24pCiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICRzZWxlY3QudmFsKGN1cnJlbnRWYWx1ZXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBSZWZyZXNoIFpudW55IElucHV0RmllbGRzCiAgICAgICAgICAgIFRhcmdldE5TLlJlZnJlc2hJbnB1dEZpZWxkKCRzZWxlY3QpOwogICAgICAgIH0sICdqc29uJyk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgRXNjYXBlSFRNTAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIC0gU3RyaW5nIHRvIGVzY2FwZS4KICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IEVzY2FwZWQgc3RyaW5nLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIEVzY2FwZSBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycy4KICAgICAqLwogICAgVGFyZ2V0TlMuRXNjYXBlSFRNTCA9IGZ1bmN0aW9uIChzdHIpIHsKICAgICAgICBpZiAoIXN0cikgcmV0dXJuICcnOwogICAgICAgIHJldHVybiBTdHJpbmcoc3RyKQogICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKQogICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JykKICAgICAgICAgICAgLnJlcGxhY2UoLyIvZywgJyZxdW90OycpCiAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmIzAzOTsnKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0RGFlbW9uSW5mb0RpYWxvZwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybQogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZSB0aGUgRGFlbW9uIGluZm8gZGlhbG9nLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0RGFlbW9uSW5mb0RpYWxvZyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBVc2UgZXZlbnQgZGVsZWdhdGlvbiBmb3IgbW9yZSByZWxpYWJsZSBiaW5kaW5nCiAgICAgICAgJChkb2N1bWVudCkub2ZmKCdjbGljay5TY2hlZHVsZXJEYWVtb25JbmZvJykub24oJ2NsaWNrLlNjaGVkdWxlckRhZW1vbkluZm8nLCAnI0RhZW1vbkluZm9EZXRhaWxzJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwoKICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coCiAgICAgICAgICAgICAgICAkKCcjRGFlbW9uSW5mb0RpYWxvZycpLAogICAgICAgICAgICAgICAgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1pudW55IERhZW1vbiAmIFRpY2tldFNjaGVkdWxlcicpLAogICAgICAgICAgICAgICAgJzQwMHB4JywKICAgICAgICAgICAgICAgICdDZW50ZXInLAogICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU6ICdDbG9zZScsCiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsOiBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnQ2xvc2UnKSwKICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLkNsb3NlRGlhbG9nKCQoJy5EaWFsb2c6dmlzaWJsZScpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0gfHwge30pKTsK</File>
        <File Permission="660" Location="var/httpd/htdocs/js/Core.Agent.TicketSchedulerProcessForm.js" Encode="Base64">Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgd29sa2lnLml0LCBodHRwczovL3dvbGtpZy5pdC8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLkFnZW50ID0gQ29yZS5BZ2VudCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyUHJvY2Vzc0Zvcm0KICogQG1lbWJlcm9mIENvcmUuQWdlbnQKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBmb3IgdGhlIFByb2Nlc3MgVGlja2V0U2NoZWR1bGVyIGZvcm0uCiAqLwpDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBuYW1lIFN0b3JlZEFjdGl2aXR5RGlhbG9nRGF0YQogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyUHJvY2Vzc0Zvcm0KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBTdG9yZXMgdGhlIEFjdGl2aXR5IERpYWxvZyBkYXRhIGxvYWRlZCBmcm9tIHRoZSBzZXJ2ZXIgb3IgcmVzdG9yZWQgZnJvbSBmb3JtLgogICAgICovCiAgICB2YXIgU3RvcmVkQWN0aXZpdHlEaWFsb2dEYXRhID0ge307CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgRmllbGRFcnJvcnMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgU3RvcmVzIGZpZWxkIGVycm9ycyBmcm9tIHNlcnZlci1zaWRlIHZhbGlkYXRpb24uCiAgICAgKi8KICAgIHZhciBGaWVsZEVycm9ycyA9IHt9OwoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyUHJvY2Vzc0Zvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIEluaXRpYWxpemUgdGhlIFByb2Nlc3MgVGlja2V0U2NoZWR1bGVyIGZvcm0gbW9kdWxlLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIC8vIFJlbW92ZSBNb2Rlcm5pemUgZnJvbSB0aW1lL2RhdGUgc2VsZWN0cyAobXVzdCBiZSBmaXJzdCEpCiAgICAgICAgaWYgKENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybSAmJiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0uRml4SW5saW5lU2VsZWN0cykgewogICAgICAgICAgICBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0uRml4SW5saW5lU2VsZWN0cygpOwogICAgICAgICAgICBzZXRUaW1lb3V0KENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybS5GaXhJbmxpbmVTZWxlY3RzLCAxMDApOwogICAgICAgICAgICBzZXRUaW1lb3V0KENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyRm9ybS5GaXhJbmxpbmVTZWxlY3RzLCA1MDApOwogICAgICAgIH0KCiAgICAgICAgLy8gTG9hZCBzdG9yZWQgQWN0aXZpdHkgRGlhbG9nIGRhdGEgZnJvbSBoaWRkZW4gZmllbGQKICAgICAgICB2YXIgc3RvcmVkRGF0YUpTT04gPSAkKCcjQWN0aXZpdHlEaWFsb2dEYXRhSlNPTicpLnZhbCgpOwogICAgICAgIGlmIChzdG9yZWREYXRhSlNPTikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgU3RvcmVkQWN0aXZpdHlEaWFsb2dEYXRhID0gSlNPTi5wYXJzZShzdG9yZWREYXRhSlNPTik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIFN0b3JlZEFjdGl2aXR5RGlhbG9nRGF0YSA9IHt9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBMb2FkIGZpZWxkIGVycm9ycyBmcm9tIHNlcnZlci1zaWRlIHZhbGlkYXRpb24KICAgICAgICB2YXIgZmllbGRFcnJvcnNKU09OID0gJCgnI0ZpZWxkRXJyb3JzSlNPTicpLnZhbCgpOwogICAgICAgIGlmIChmaWVsZEVycm9yc0pTT04pIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIEZpZWxkRXJyb3JzID0gSlNPTi5wYXJzZShmaWVsZEVycm9yc0pTT04pOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBGaWVsZEVycm9ycyA9IHt9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBCaW5kIHByb2Nlc3MgY2hhbmdlIC0+IGxvYWQgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcwogICAgICAgIFRhcmdldE5TLkJpbmRTZWxlY3RDaGFuZ2UoJ1Byb2Nlc3NFbnRpdHlJRCcsIFRhcmdldE5TLk9uUHJvY2Vzc0NoYW5nZSk7CgogICAgICAgIC8vIEJpbmQgc2NoZWR1bGUgdHlwZSBjaGFuZ2UgKHJldXNlIGZyb20gVGlja2V0U2NoZWR1bGVyRm9ybSkKICAgICAgICBUYXJnZXROUy5CaW5kU2VsZWN0Q2hhbmdlKCdTY2hlZHVsZVR5cGUnLCBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0uVXBkYXRlU2NoZWR1bGVUeXBlRmllbGRzKTsKCiAgICAgICAgLy8gQmluZCBlbmQgdHlwZSBjaGFuZ2UgKHJldXNlIGZyb20gVGlja2V0U2NoZWR1bGVyRm9ybSkKICAgICAgICBUYXJnZXROUy5CaW5kU2VsZWN0Q2hhbmdlKCdFbmRUeXBlJywgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtLlVwZGF0ZUVuZFR5cGVGaWVsZHMpOwoKICAgICAgICAvLyBJbml0aWFsaXplIGZpZWxkIHZpc2liaWxpdHkKICAgICAgICBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlckZvcm0uVXBkYXRlU2NoZWR1bGVUeXBlRmllbGRzKCk7CiAgICAgICAgQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJGb3JtLlVwZGF0ZUVuZFR5cGVGaWVsZHMoKTsKCiAgICAgICAgLy8gTG9hZCBBY3Rpdml0eSBEaWFsb2cgZmllbGRzIGlmIGEgcHJvY2VzcyBpcyBhbHJlYWR5IHNlbGVjdGVkIChlZGl0IG1vZGUgb3IgYWZ0ZXIgdmFsaWRhdGlvbiBlcnJvcikKICAgICAgICB2YXIgc2VsZWN0ZWRQcm9jZXNzID0gJCgnI1Byb2Nlc3NFbnRpdHlJRCcpLnZhbCgpOwogICAgICAgIGlmIChzZWxlY3RlZFByb2Nlc3MpIHsKICAgICAgICAgICAgVGFyZ2V0TlMuTG9hZEFjdGl2aXR5RGlhbG9nRmllbGRzKHNlbGVjdGVkUHJvY2Vzcyk7CiAgICAgICAgfQoKICAgICAgICAvLyBCaW5kIHByZXZpZXcgYnV0dG9uCiAgICAgICAgJCgnI1ByZXZpZXdCdXR0b24nKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBUYXJnZXROUy5TaG93UHJldmlldygpOwogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEJpbmRTZWxlY3RDaGFuZ2UKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZElEIC0gVGhlIElEIG9mIHRoZSBzZWxlY3QgZmllbGQKICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gY2hhbmdlCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgQmluZCBjaGFuZ2UgZXZlbnQgdG8gYSBzZWxlY3QgZmllbGQsIGNvbXBhdGlibGUgd2l0aCBNb2Rlcm5pemUvSW5wdXRGaWVsZHMuCiAgICAgKi8KICAgIFRhcmdldE5TLkJpbmRTZWxlY3RDaGFuZ2UgPSBmdW5jdGlvbiAoZmllbGRJRCwgY2FsbGJhY2spIHsKICAgICAgICB2YXIgJGZpZWxkID0gJCgnIycgKyBmaWVsZElEKTsKCiAgICAgICAgaWYgKCEkZmllbGQubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIFN0YW5kYXJkIGNoYW5nZSBldmVudAogICAgICAgICRmaWVsZC5vZmYoJ2NoYW5nZS5Qcm9jZXNzU2NoZWR1bGVyJykub24oJ2NoYW5nZS5Qcm9jZXNzU2NoZWR1bGVyJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBGb3IgTW9kZXJuaXplIHNlbGVjdHMsIGFsc28gbGlzdGVuIHRvIHJlZHJhdyBldmVudAogICAgICAgICRmaWVsZC5vZmYoJ3JlZHJhdy5JbnB1dEZpZWxkLlByb2Nlc3NTY2hlZHVsZXInKS5vbigncmVkcmF3LklucHV0RmllbGQuUHJvY2Vzc1NjaGVkdWxlcicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBPblByb2Nlc3NDaGFuZ2UKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBIYW5kbGUgcHJvY2VzcyBkcm9wZG93biBjaGFuZ2UgLSBsb2FkIEFjdGl2aXR5IERpYWxvZyBmaWVsZHMuCiAgICAgKi8KICAgIFRhcmdldE5TLk9uUHJvY2Vzc0NoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcHJvY2Vzc0VudGl0eUlEID0gJCgnI1Byb2Nlc3NFbnRpdHlJRCcpLnZhbCgpOwoKICAgICAgICBpZiAocHJvY2Vzc0VudGl0eUlEKSB7CiAgICAgICAgICAgIFRhcmdldE5TLkxvYWRBY3Rpdml0eURpYWxvZ0ZpZWxkcyhwcm9jZXNzRW50aXR5SUQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIENsZWFyIEFjdGl2aXR5IERpYWxvZyBmaWVsZHMgY29udGFpbmVyCiAgICAgICAgICAgICQoJyNBY3Rpdml0eURpYWxvZ0ZpZWxkc0NvbnRhaW5lcicpLmh0bWwoCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iTWVzc2FnZUJveCBJbmZvIiBpZD0iTm9Qcm9jZXNzU2VsZWN0ZWRNZXNzYWdlIj4nICsKICAgICAgICAgICAgICAgICc8cD48aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4gJyArIENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdTZWxlY3QgYSBwcm9jZXNzIHRvIGNvbmZpZ3VyZSB0aGUgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcy4nKSArICc8L3A+JyArCiAgICAgICAgICAgICAgICAnPC9kaXY+JwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBMb2FkQWN0aXZpdHlEaWFsb2dGaWVsZHMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9jZXNzRW50aXR5SUQgLSBUaGUgUHJvY2VzcyBFbnRpdHkgSUQKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBMb2FkIEFjdGl2aXR5IERpYWxvZyBmaWVsZHMgdmlhIEFKQVggKHNlcnZlci1zaWRlIHJlbmRlcmVkIEhUTUwpLgogICAgICogICAgICBUaGlzIHVzZXMgdGhlIG5ldyBHZXRSZW5kZXJlZEFjdGl2aXR5RGlhbG9nRmllbGRzIGVuZHBvaW50IHdoaWNoIHJldHVybnMKICAgICAqICAgICAgcHJlLXJlbmRlcmVkIEhUTUwgdXNpbmcgWm51bnkncyBuYXRpdmUgRWRpdEZpZWxkUmVuZGVyKCkgZm9yIGNvbnNpc3RlbmN5CiAgICAgKiAgICAgIHdpdGggdGhlIHN0YW5kYXJkIHByb2Nlc3MgdGlja2V0IGRpYWxvZy4KICAgICAqLwogICAgVGFyZ2V0TlMuTG9hZEFjdGl2aXR5RGlhbG9nRmllbGRzID0gZnVuY3Rpb24gKHByb2Nlc3NFbnRpdHlJRCkgewogICAgICAgIHZhciAkY29udGFpbmVyID0gJCgnI0FjdGl2aXR5RGlhbG9nRmllbGRzQ29udGFpbmVyJyk7CgogICAgICAgIC8vIFNob3cgbG9hZGluZyBpbmRpY2F0b3IKICAgICAgICAkY29udGFpbmVyLmh0bWwoCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDIwcHg7Ij4nICsKICAgICAgICAgICAgJzxpIGNsYXNzPSJmYSBmYS1zcGlubmVyIGZhLXNwaW4gZmEtMngiPjwvaT4nICsKICAgICAgICAgICAgJzxwPicgKyBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnTG9hZGluZyBBY3Rpdml0eSBEaWFsb2cgZmllbGRzLi4uJykgKyAnPC9wPicgKwogICAgICAgICAgICAnPC9kaXY+JwogICAgICAgICk7CgogICAgICAgIC8vIEFKQVggY2FsbCB0byBnZXQgc2VydmVyLXNpZGUgcmVuZGVyZWQgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcwogICAgICAgIHZhciBzdG9yZWRWYWx1ZXNKU09OID0gSlNPTi5zdHJpbmdpZnkoU3RvcmVkQWN0aXZpdHlEaWFsb2dEYXRhKTsKCiAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgdXJsOiBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksCiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgIEFjdGlvbjogJ0FnZW50VGlja2V0U2NoZWR1bGVyQUpBWCcsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdHZXRSZW5kZXJlZEFjdGl2aXR5RGlhbG9nRmllbGRzJywKICAgICAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRDogcHJvY2Vzc0VudGl0eUlELAogICAgICAgICAgICAgICAgU3RvcmVkVmFsdWVzOiBzdG9yZWRWYWx1ZXNKU09OCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHR5cGU6ICdQT1NUJywKICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywKICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyLmh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJNZXNzYWdlQm94IEVycm9yIj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzxwPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiPjwvaT4gJyArIHJlc3BvbnNlLmVycm9yICsgJzwvcD4nICsKICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaHRtbCkgewogICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgc2VydmVyLXJlbmRlcmVkIEhUTUwgZGlyZWN0bHkKICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyLmh0bWwocmVzcG9uc2UuaHRtbCk7CgogICAgICAgICAgICAgICAgICAgIC8vIFJlLWluaXRpYWxpemUgWm51bnkgVUkgY29tcG9uZW50cyBmb3IgdGhlIG5ldyBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuSW5pdGlhbGl6ZVVJQ29tcG9uZW50cygkY29udGFpbmVyKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgc2VydmVyLXNpZGUgdmFsaWRhdGlvbiBlcnJvcnMKICAgICAgICAgICAgICAgICAgICBUYXJnZXROUy5BcHBseUZpZWxkRXJyb3JzKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmZpZWxkcyAmJiByZXNwb25zZS5maWVsZHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5odG1sKAogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iTWVzc2FnZUJveCBOb3RpY2UiPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHA+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+ICcgKwogICAgICAgICAgICAgICAgICAgICAgICBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnTm8gY29uZmlndXJhYmxlIGZpZWxkcyBpbiB0aGUgc3RhcnQgQWN0aXZpdHkgRGlhbG9nLicpICsKICAgICAgICAgICAgICAgICAgICAgICAgJzwvcD48L2Rpdj4nCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5odG1sKAogICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iTWVzc2FnZUJveCBOb3RpY2UiPicgKwogICAgICAgICAgICAgICAgICAgICAgICAnPHA+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+ICcgKwogICAgICAgICAgICAgICAgICAgICAgICBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnTm8gY29uZmlndXJhYmxlIGZpZWxkcyBpbiB0aGUgc3RhcnQgQWN0aXZpdHkgRGlhbG9nLicpICsKICAgICAgICAgICAgICAgICAgICAgICAgJzwvcD48L2Rpdj4nCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIuaHRtbCgKICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iTWVzc2FnZUJveCBFcnJvciI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxwPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiPjwvaT4gJyArCiAgICAgICAgICAgICAgICAgICAgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0Vycm9yIGxvYWRpbmcgQWN0aXZpdHkgRGlhbG9nIGZpZWxkcy4nKSArCiAgICAgICAgICAgICAgICAgICAgJzwvcD48L2Rpdj4nCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdGlhbGl6ZVVJQ29tcG9uZW50cwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyUHJvY2Vzc0Zvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRjb250YWluZXIgLSBUaGUgY29udGFpbmVyIHdpdGggdGhlIG5ldyBIVE1MCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZSBabnVueSBVSSBjb21wb25lbnRzIGFmdGVyIHNlcnZlci1yZW5kZXJlZCBIVE1MIGlzIGluc2VydGVkLgogICAgICogICAgICBUaGlzIGluY2x1ZGVzIE1vZGVybml6ZSBzZWxlY3RzLCBkYXRlcGlja2VycywgY3VzdG9tZXIgc2VhcmNoLCBhbmQgdmFsaWRhdGlvbi4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdGlhbGl6ZVVJQ29tcG9uZW50cyA9IGZ1bmN0aW9uICgkY29udGFpbmVyKSB7CiAgICAgICAgLy8gUmUtaW5pdGlhbGl6ZSBNb2Rlcm5pemUvSW5wdXRGaWVsZHMgZm9yIG5ldyBkcm9wZG93bnMKICAgICAgICBpZiAoQ29yZS5VSSAmJiBDb3JlLlVJLklucHV0RmllbGRzKSB7CiAgICAgICAgICAgIENvcmUuVUkuSW5wdXRGaWVsZHMuSW5pdCgpOwogICAgICAgIH0KCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjdXN0b21lciBzZWFyY2ggYXV0b2NvbXBsZXRlIG9uIEN1c3RvbWVyQXV0b0NvbXBsZXRlIGZpZWxkCiAgICAgICAgLy8gVGhpcyB1c2VzIHRoZSBzdGFuZGFyZCBabnVueSBiZWhhdmlvciB3aXRoIG5hbWUrZW1haWwgZGlzcGxheSBhbmQgYXV0b21hdGljIEN1c3RvbWVySUQgcG9wdWxhdGlvbgogICAgICAgIHZhciAkY3VzdG9tZXJBdXRvQ29tcGxldGUgPSAkY29udGFpbmVyLmZpbmQoJyNDdXN0b21lckF1dG9Db21wbGV0ZScpOwogICAgICAgIGlmICgkY3VzdG9tZXJBdXRvQ29tcGxldGUubGVuZ3RoKSB7CiAgICAgICAgICAgIFRhcmdldE5TLkluaXRDdXN0b21lckF1dG9Db21wbGV0ZSgkY3VzdG9tZXJBdXRvQ29tcGxldGUpOwogICAgICAgIH0KCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBmb3JtIHZhbGlkYXRpb24KICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuSW5pdCgpOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEFwcGx5RmllbGRFcnJvcnMKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBBcHBseSBzZXJ2ZXItc2lkZSB2YWxpZGF0aW9uIGVycm9ycyB0byBmb3JtIGZpZWxkcy4KICAgICAqLwogICAgVGFyZ2V0TlMuQXBwbHlGaWVsZEVycm9ycyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoIUZpZWxkRXJyb3JzIHx8IE9iamVjdC5rZXlzKEZpZWxkRXJyb3JzKS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGZpZWxkIGVycm9ycyBhbmQgbWFyayB0aGUgZmllbGRzCiAgICAgICAgT2JqZWN0LmtleXMoRmllbGRFcnJvcnMpLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkTmFtZSkgewogICAgICAgICAgICB2YXIgJGZpZWxkID0gJCgnIycgKyBmaWVsZE5hbWUpOwoKICAgICAgICAgICAgaWYgKCRmaWVsZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vIEFkZCBlcnJvciBjbGFzcyB0byB0aGUgZmllbGQKICAgICAgICAgICAgICAgICRmaWVsZC5hZGRDbGFzcygnRXJyb3IgU2VydmVyRXJyb3InKTsKCiAgICAgICAgICAgICAgICAvLyBTaG93IHRoZSBzZXJ2ZXIgZXJyb3IgdG9vbHRpcAogICAgICAgICAgICAgICAgdmFyICRzZXJ2ZXJFcnJvciA9ICQoJyMnICsgZmllbGROYW1lICsgJ1NlcnZlckVycm9yJyk7CiAgICAgICAgICAgICAgICBpZiAoJHNlcnZlckVycm9yLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJFcnJvci5zaG93KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQWxzbyBtYXJrIHRoZSBmaWVsZCB3cmFwcGVyIGFzIGhhdmluZyBhbiBlcnJvciAoZm9yIHZpc3VhbCBmZWVkYmFjaykKICAgICAgICAgICAgICAgICRmaWVsZC5jbG9zZXN0KCcuZmllbGQtd3JhcHBlciwgLlJvdycpLmFkZENsYXNzKCdIYXNFcnJvcicpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbmFtZSBTaG93UHJldmlldwogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyUHJvY2Vzc0Zvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIENhbGN1bGF0ZSBhbmQgc2hvdyBwcmV2aWV3IG9mIG5leHQgZXhlY3V0aW9ucy4KICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd1ByZXZpZXcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyICRwcmV2aWV3UmVzdWx0cyA9ICQoJyNQcmV2aWV3UmVzdWx0cycpOwogICAgICAgIHZhciAkcHJldmlld0xpc3QgPSAkKCcjUHJldmlld0xpc3QnKTsKCiAgICAgICAgLy8gU2hvdyBsb2FkaW5nCiAgICAgICAgJHByZXZpZXdMaXN0Lmh0bWwoJzxsaT48aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIj48L2k+ICcgKyBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnQ2FsY3VsYXRpbmcuLi4nKSArICc8L2xpPicpOwogICAgICAgICRwcmV2aWV3UmVzdWx0cy5yZW1vdmVDbGFzcygnSGlkZGVuJyk7CgogICAgICAgIC8vIENvbGxlY3Qgc2NoZWR1bGUgY29uZmlndXJhdGlvbgogICAgICAgIHZhciBzY2hlZHVsZVR5cGUgPSAkKCcjU2NoZWR1bGVUeXBlJykudmFsKCk7CiAgICAgICAgdmFyIHRpbWV6b25lID0gJCgnI1RpbWV6b25lJykudmFsKCk7CiAgICAgICAgdmFyIGVuZFR5cGUgPSAkKCcjRW5kVHlwZScpLnZhbCgpOwogICAgICAgIHZhciBtYXhPY2N1cnJlbmNlcyA9ICQoJyNNYXhPY2N1cnJlbmNlcycpLnZhbCgpOwoKICAgICAgICB2YXIgcGFyYW1zID0gewogICAgICAgICAgICBBY3Rpb246ICdBZ2VudFRpY2tldFNjaGVkdWxlckFKQVgnLAogICAgICAgICAgICBTdWJhY3Rpb246ICdQcmV2aWV3U2NoZWR1bGUnLAogICAgICAgICAgICBTY2hlZHVsZVR5cGU6IHNjaGVkdWxlVHlwZSwKICAgICAgICAgICAgVGltZUhvdXI6ICQoJyNUaW1lSG91cicpLnZhbCgpLAogICAgICAgICAgICBUaW1lTWludXRlOiAkKCcjVGltZU1pbnV0ZScpLnZhbCgpLAogICAgICAgICAgICBUaW1lem9uZTogdGltZXpvbmUsCiAgICAgICAgICAgIEVuZFR5cGU6IGVuZFR5cGUsCiAgICAgICAgICAgIE1heE9jY3VycmVuY2VzOiBtYXhPY2N1cnJlbmNlcywKICAgICAgICAgICAgLy8gRW5kRGF0ZSBhcyBtdWx0aS1maWVsZCBmb3JtYXQKICAgICAgICAgICAgRW5kRGF0ZVVzZWQ6ICQoJyNFbmREYXRlVXNlZCcpLmlzKCc6Y2hlY2tlZCcpID8gMSA6IDAsCiAgICAgICAgICAgIEVuZERhdGVZZWFyOiAkKCcjRW5kRGF0ZVllYXInKS52YWwoKSwKICAgICAgICAgICAgRW5kRGF0ZU1vbnRoOiAkKCcjRW5kRGF0ZU1vbnRoJykudmFsKCksCiAgICAgICAgICAgIEVuZERhdGVEYXk6ICQoJyNFbmREYXRlRGF5JykudmFsKCkKICAgICAgICB9OwoKICAgICAgICAvLyBBZGQgdHlwZS1zcGVjaWZpYyBwYXJhbWV0ZXJzCiAgICAgICAgaWYgKHNjaGVkdWxlVHlwZSA9PT0gJ3dlZWtseScpIHsKICAgICAgICAgICAgdmFyIHdlZWtkYXlzID0gW107CiAgICAgICAgICAgICQoJ2lucHV0W25hbWU9IldlZWtkYXlzIl06Y2hlY2tlZCcpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgd2Vla2RheXMucHVzaCgkKHRoaXMpLnZhbCgpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHBhcmFtc1snV2Vla2RheXNbXSddID0gd2Vla2RheXM7CiAgICAgICAgfSBlbHNlIGlmIChzY2hlZHVsZVR5cGUgPT09ICdtb250aGx5X2RheScgfHwgc2NoZWR1bGVUeXBlID09PSAneWVhcmx5JykgewogICAgICAgICAgICBwYXJhbXMuRGF5ID0gJCgnI0RheScpLnZhbCgpOwogICAgICAgICAgICBpZiAoc2NoZWR1bGVUeXBlID09PSAneWVhcmx5JykgewogICAgICAgICAgICAgICAgcGFyYW1zLk1vbnRoID0gJCgnI01vbnRoJykudmFsKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNjaGVkdWxlVHlwZSA9PT0gJ21vbnRobHlfd2Vla2RheScgfHwgc2NoZWR1bGVUeXBlID09PSAnbW9udGhseV93ZWVrZGF5X29mZnNldCcpIHsKICAgICAgICAgICAgcGFyYW1zLk50aCA9ICQoJyNOdGgnKS52YWwoKTsKICAgICAgICAgICAgcGFyYW1zLldlZWtkYXkgPSAkKCcjV2Vla2RheScpLnZhbCgpOwogICAgICAgICAgICBpZiAoc2NoZWR1bGVUeXBlID09PSAnbW9udGhseV93ZWVrZGF5X29mZnNldCcpIHsKICAgICAgICAgICAgICAgIHBhcmFtcy5PZmZzZXREYXlzID0gJCgnI09mZnNldERheXMnKS52YWwoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc2NoZWR1bGVUeXBlID09PSAnaW50ZXJ2YWwnKSB7CiAgICAgICAgICAgIHBhcmFtcy5JbnRlcnZhbCA9ICQoJyNJbnRlcnZhbCcpLnZhbCgpOwogICAgICAgICAgICAvLyBTdGFydERhdGUgYXMgbXVsdGktZmllbGQgZm9ybWF0IChyZXF1aXJlZCwgbm8gY2hlY2tib3gpCiAgICAgICAgICAgIHBhcmFtcy5TdGFydERhdGVZZWFyID0gJCgnI1N0YXJ0RGF0ZVllYXInKS52YWwoKTsKICAgICAgICAgICAgcGFyYW1zLlN0YXJ0RGF0ZU1vbnRoID0gJCgnI1N0YXJ0RGF0ZU1vbnRoJykudmFsKCk7CiAgICAgICAgICAgIHBhcmFtcy5TdGFydERhdGVEYXkgPSAkKCcjU3RhcnREYXRlRGF5JykudmFsKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBBSkFYIGNhbGwKICAgICAgICAkLmFqYXgoewogICAgICAgICAgICB1cmw6IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwKICAgICAgICAgICAgZGF0YTogcGFyYW1zLAogICAgICAgICAgICB0eXBlOiAnUE9TVCcsCiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmV4ZWN1dGlvbnMgJiYgcmVzcG9uc2UuZXhlY3V0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSAnJzsKICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5leGVjdXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGV4ZWMsIGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsaSBzdHlsZT0icGFkZGluZzogNHB4IDA7Ij48aSBjbGFzcz0iZmEgZmEtY2FsZW5kYXItbyI+PC9pPiA8c3Ryb25nPicgKyAoaW5kZXggKyAxKSArICcuPC9zdHJvbmc+ICcgKyBUYXJnZXROUy5Fc2NhcGVIVE1MKGV4ZWMpICsgJzwvbGk+JzsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAkcHJldmlld0xpc3QuaHRtbChodG1sKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHByZXZpZXdMaXN0Lmh0bWwoJzxsaT48aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4gJyArIENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdObyB1cGNvbWluZyBleGVjdXRpb25zIGZvdW5kLicpICsgJzwvbGk+Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkcHJldmlld0xpc3QuaHRtbCgnPGxpIGNsYXNzPSJFcnJvciI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSI+PC9pPiAnICsgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ0Vycm9yIGNhbGN1bGF0aW5nIHByZXZpZXcuJykgKyAnPC9saT4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXRDdXN0b21lckF1dG9Db21wbGV0ZQogICAgICogQG1lbWJlcm9mIENvcmUuQWdlbnQuVGlja2V0U2NoZWR1bGVyUHJvY2Vzc0Zvcm0KICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRFbGVtZW50IC0gVGhlIEN1c3RvbWVyQXV0b0NvbXBsZXRlIGlucHV0IGZpZWxkCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZSBjdXN0b21lciB1c2VyIGF1dG9jb21wbGV0ZSB3aXRoIHN0YW5kYXJkIFpudW55IGJlaGF2aW9yOgogICAgICogICAgICAtIFNob3dzIGN1c3RvbWVyIG5hbWUgKyBlbWFpbCBpbiB0aGUgc2VhcmNoIGZpZWxkCiAgICAgKiAgICAgIC0gU3RvcmVzIGN1c3RvbWVyIGxvZ2luIGluIFNlbGVjdGVkQ3VzdG9tZXJVc2VyIGhpZGRlbiBmaWVsZAogICAgICogICAgICAtIEF1dG9tYXRpY2FsbHkgcG9wdWxhdGVzIEN1c3RvbWVySUQgZmllbGQgdmlhIEFKQVgKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdEN1c3RvbWVyQXV0b0NvbXBsZXRlID0gZnVuY3Rpb24gKCRFbGVtZW50KSB7CiAgICAgICAgaWYgKCEkRWxlbWVudC5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBhdXRvY29tcGxldGUgdXNpbmcgQ29yZS5VSS5BdXRvY29tcGxldGUKICAgICAgICBDb3JlLlVJLkF1dG9jb21wbGV0ZS5Jbml0KCRFbGVtZW50LCBmdW5jdGlvbiAoUmVxdWVzdCwgUmVzcG9uc2UpIHsKICAgICAgICAgICAgLy8gU291cmNlIGZ1bmN0aW9uIC0gZmV0Y2ggY3VzdG9tZXIgdXNlcnMgdmlhIEFKQVgKICAgICAgICAgICAgdmFyIFVSTCA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwKICAgICAgICAgICAgICAgIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uOiAnQWdlbnRDdXN0b21lclNlYXJjaCcsCiAgICAgICAgICAgICAgICAgICAgVGVybTogUmVxdWVzdC50ZXJtLAogICAgICAgICAgICAgICAgICAgIE1heFJlc3VsdHM6IENvcmUuVUkuQXV0b2NvbXBsZXRlLkdldENvbmZpZygnTWF4UmVzdWx0c0Rpc3BsYXllZCcpIHx8IDIwCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgJEVsZW1lbnQuZGF0YSgnQXV0b0NvbXBsZXRlWEhSJywgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbChVUkwsIERhdGEsIGZ1bmN0aW9uIChSZXN1bHQpIHsKICAgICAgICAgICAgICAgIHZhciBWYWx1ZURhdGEgPSBbXTsKICAgICAgICAgICAgICAgICRFbGVtZW50LnJlbW92ZURhdGEoJ0F1dG9Db21wbGV0ZVhIUicpOwogICAgICAgICAgICAgICAgJC5lYWNoKFJlc3VsdCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIFZhbHVlRGF0YS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzcGxheTogIk5hbWUiIChsb2dpbikKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuTGFiZWwgKyAnICgnICsgdGhpcy5WYWx1ZSArICcpJywKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWUgdG8gc2hvdyBpbiBmaWVsZDogIk5hbWUiIDxlbWFpbD4gZm9ybWF0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLkxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b21lciB1c2VyIGxvZ2luIChrZXkpCiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdGhpcy5WYWx1ZQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBSZXNwb25zZShWYWx1ZURhdGEpOwogICAgICAgICAgICB9KSk7CiAgICAgICAgfSwgZnVuY3Rpb24gKEV2ZW50LCBVSSkgewogICAgICAgICAgICAvLyBTZWxlY3QgZnVuY3Rpb24gLSBoYW5kbGUgY3VzdG9tZXIgc2VsZWN0aW9uCiAgICAgICAgICAgIHZhciBDdXN0b21lcktleSA9IFVJLml0ZW0ua2V5LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJWYWx1ZSA9IFVJLml0ZW0udmFsdWU7CgogICAgICAgICAgICAvLyBTZXQgZGlzcGxheSB2YWx1ZSAobmFtZSkgaW4gdmlzaWJsZSBmaWVsZAogICAgICAgICAgICAkRWxlbWVudC52YWwoQ3VzdG9tZXJWYWx1ZSk7CgogICAgICAgICAgICAvLyBTZXQgY3VzdG9tZXIgbG9naW4gaW4gaGlkZGVuIGZpZWxkCiAgICAgICAgICAgICQoJyNTZWxlY3RlZEN1c3RvbWVyVXNlcicpLnZhbChDdXN0b21lcktleSk7CgogICAgICAgICAgICAvLyBHZXQgY3VzdG9tZXIgaW5mbyAoaW5jbHVkaW5nIEN1c3RvbWVySUQpIHZpYSBBSkFYCiAgICAgICAgICAgIFRhcmdldE5TLkdldEN1c3RvbWVySW5mbyhDdXN0b21lcktleSk7CgogICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0sICdDdXN0b21lclNlYXJjaCcpOwoKICAgICAgICAvLyBDbGVhciBoaWRkZW4gZmllbGRzIHdoZW4gdXNlciBjbGVhcnMgdGhlIHZpc2libGUgZmllbGQKICAgICAgICAkRWxlbWVudC5vbignYmx1cicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEZpZWxkVmFsdWUgPSAkKHRoaXMpLnZhbCgpOwogICAgICAgICAgICBpZiAoIUZpZWxkVmFsdWUpIHsKICAgICAgICAgICAgICAgICQoJyNTZWxlY3RlZEN1c3RvbWVyVXNlcicpLnZhbCgnJyk7CiAgICAgICAgICAgICAgICAvLyBGaW5kIGFuZCBjbGVhciBDdXN0b21lcklEIGZpZWxkcyAoYm90aCBwb3NzaWJsZSBJRHMpCiAgICAgICAgICAgICAgICAkKCcjQWN0aXZpdHlEaWFsb2dfQ3VzdG9tZXJJRCcpLnZhbCgnJyk7CiAgICAgICAgICAgICAgICAkKCcjQ3VzdG9tZXJJRCcpLnZhbCgnJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBHZXRDdXN0b21lckluZm8KICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBDdXN0b21lclVzZXJJRCAtIFRoZSBjdXN0b21lciB1c2VyIGxvZ2luCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgRmV0Y2ggY3VzdG9tZXIgaW5mbyAoaW5jbHVkaW5nIEN1c3RvbWVySUQpIHZpYSBBSkFYIGFuZCBwb3B1bGF0ZSB0aGUgQ3VzdG9tZXJJRCBmaWVsZC4KICAgICAqICAgICAgVGhpcyBtaW1pY3MgdGhlIHN0YW5kYXJkIFpudW55IENvcmUuQWdlbnQuQ3VzdG9tZXJTZWFyY2guR2V0Q3VzdG9tZXJJbmZvKCkgYmVoYXZpb3IuCiAgICAgKi8KICAgIFRhcmdldE5TLkdldEN1c3RvbWVySW5mbyA9IGZ1bmN0aW9uIChDdXN0b21lclVzZXJJRCkgewogICAgICAgIGlmICghQ3VzdG9tZXJVc2VySUQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIERhdGEgPSB7CiAgICAgICAgICAgIEFjdGlvbjogJ0FnZW50Q3VzdG9tZXJTZWFyY2gnLAogICAgICAgICAgICBTdWJhY3Rpb246ICdDdXN0b21lckluZm8nLAogICAgICAgICAgICBDdXN0b21lclVzZXJJRDogQ3VzdG9tZXJVc2VySUQKICAgICAgICB9OwoKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwgRGF0YSwgZnVuY3Rpb24gKFJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmIChSZXNwb25zZSAmJiBSZXNwb25zZS5DdXN0b21lcklEKSB7CiAgICAgICAgICAgICAgICAvLyBTZXQgQ3VzdG9tZXJJRCBpbiBhbGwgcG9zc2libGUgdGFyZ2V0IGZpZWxkcwogICAgICAgICAgICAgICAgJCgnI0FjdGl2aXR5RGlhbG9nX0N1c3RvbWVySUQnKS52YWwoUmVzcG9uc2UuQ3VzdG9tZXJJRCk7CiAgICAgICAgICAgICAgICAkKCcjQ3VzdG9tZXJJRCcpLnZhbChSZXNwb25zZS5DdXN0b21lcklEKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIEVzY2FwZUhUTUwKICAgICAqIEBtZW1iZXJvZiBDb3JlLkFnZW50LlRpY2tldFNjaGVkdWxlclByb2Nlc3NGb3JtCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVzY2FwZQogICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIGVzY2FwZWQgc3RyaW5nCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgRXNjYXBlIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzLgogICAgICovCiAgICBUYXJnZXROUy5Fc2NhcGVIVE1MID0gZnVuY3Rpb24gKHN0cikgewogICAgICAgIGlmIChzdHIgPT09IG51bGwgfHwgc3RyID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3RyaW5nKHN0cikKICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykKICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpCiAgICAgICAgICAgIC5yZXBsYWNlKC8iL2csICcmcXVvdDsnKQogICAgICAgICAgICAucmVwbGFjZSgvJy9nLCAnJiMwMzk7Jyk7CiAgICB9OwoKICAgIC8vIEluaXRpYWxpemUgb24gZG9jdW1lbnQgcmVhZHkKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oQ29yZS5BZ2VudC5UaWNrZXRTY2hlZHVsZXJQcm9jZXNzRm9ybSB8fCB7fSkpOwo=</File>

        <!-- CSS -->
        <File Permission="660" Location="var/httpd/htdocs/skins/Agent/default/css/Core.Agent.TicketScheduler.css" Encode="Base64">LyoqCiAqIEBwcm9qZWN0ICAgICBUaWNrZXRTY2hlZHVsZXIKICogQGNvcHlyaWdodCAgIDIwMjQtMjAyNiB3b2xraWcuaXQsIGh0dHBzOi8vd29sa2lnLml0LwogKiBAbGljZW5zZSAgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dCBHUEwtMy4wCiAqLwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBHZW5lcmFsIExheW91dCAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouVGlja2V0U2NoZWR1bGVyIC5BY3Rpb25JY29ucyB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouVGlja2V0U2NoZWR1bGVyIC5BY3Rpb25JY29ucyAuQWN0aW9uSWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwYWRkaW5nOiAzcHggNXB4OwogICAgY29sb3I6ICM3Nzc7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2U7Cn0KCi5UaWNrZXRTY2hlZHVsZXIgLkFjdGlvbkljb25zIC5BY3Rpb25JY29uOmhvdmVyIHsKICAgIGNvbG9yOiAjMzMzOwp9CgouVGlja2V0U2NoZWR1bGVyIC5BY3Rpb25JY29ucyAuQWN0aW9uSWNvbi5EZWxldGU6aG92ZXIgewogICAgY29sb3I6ICNjMDA7Cn0KCi5UaWNrZXRTY2hlZHVsZXIgLkFjdGlvbkljb25zIC5BY3Rpb25JY29uIGkgewogICAgZm9udC1zaXplOiAxNHB4Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIFN0YXR1cyBCYWRnZXMgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLlRpY2tldFNjaGVkdWxlciAuU3RhdHVzQmFkZ2UgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgZm9udC1zaXplOiAxNHB4Owp9CgouVGlja2V0U2NoZWR1bGVyIC5TdGF0dXNCYWRnZS5BY3RpdmUgewogICAgY29sb3I6ICM1Y2I4NWM7Cn0KCi5UaWNrZXRTY2hlZHVsZXIgLlN0YXR1c0JhZGdlLkluYWN0aXZlIHsKICAgIGNvbG9yOiAjOTk5Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIEVycm9yIEluZGljYXRvciAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouVGlja2V0U2NoZWR1bGVyIHRyLkVycm9yIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY1ZjU7Cn0KCi5UaWNrZXRTY2hlZHVsZXIgc3Bhbi5FcnJvciB7CiAgICBjb2xvcjogI2MwMDsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRmlsdGVyIEZvcm0gKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLlRpY2tldFNjaGVkdWxlciAuU2lkZWJhckNvbHVtbiAuRmlsdGVyTGlzdCB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKICAgIGdhcDogMCAhaW1wb3J0YW50Owp9CgouVGlja2V0U2NoZWR1bGVyIC5TaWRlYmFyQ29sdW1uIC5GaWx0ZXJMaXN0IGxpIHsKICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOwogICAgZ2FwOiAycHggIWltcG9ydGFudDsKICAgIHJvdy1nYXA6IDJweCAhaW1wb3J0YW50Owp9CgouVGlja2V0U2NoZWR1bGVyIC5TaWRlYmFyQ29sdW1uIC5GaWx0ZXJMaXN0IGxpOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHBhZGRpbmctYm90dG9tOiAwOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKLlRpY2tldFNjaGVkdWxlciAuU2lkZWJhckNvbHVtbiAuRmlsdGVyTGlzdCBsYWJlbCB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgbWFyZ2luLWJvdHRvbTogMnB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjNTU1Owp9CgouVGlja2V0U2NoZWR1bGVyIC5TaWRlYmFyQ29sdW1uIC5GaWx0ZXJMaXN0IGlucHV0W3R5cGU9InRleHQiXSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5UaWNrZXRTY2hlZHVsZXIgLlNpZGViYXJDb2x1bW4gLkZpbHRlckxpc3Qgc2VsZWN0LAouVGlja2V0U2NoZWR1bGVyIC5TaWRlYmFyQ29sdW1uIC5GaWx0ZXJMaXN0IC5JbnB1dEZpZWxkX0NvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBGb3JtIFN0eWxpbmcgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKdWwuV2Vla2RheUNoZWNrYm94ZXMgewogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA4cHg7Cn0KCnVsLldlZWtkYXlDaGVja2JveGVzIGxpIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5XZWVrZGF5TGFiZWwgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5XZWVrZGF5TGFiZWw6aG92ZXIgewogICAgYmFja2dyb3VuZDogI2U4ZThlODsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLldlZWtkYXlMYWJlbCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICAgIG1hcmdpbi1yaWdodDogNHB4Owp9CgouVGlja2V0U2NoZWR1bGVyRm9ybSAuU2NoZWR1bGVUeXBlU2V0dGluZ3MsCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5FbmRUeXBlU2V0dGluZ3MgewogICAgbWFyZ2luLXRvcDogMTBweDsKICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjZGRkOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIFBsYWNlaG9sZGVyIERyb3Bkb3duIFN0eWxpbmcgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLlRpY2tldFNjaGVkdWxlckZvcm0gLkZpZWxkV2l0aFBsYWNlaG9sZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDEwcHg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIHdpZHRoOiBjYWxjKDUwJSArIDIxMHB4KTsgIC8qIE1hdGNoIE5hbWUgZmllbGQgKFc1MHBjKSArIFBsYWNlaG9sZGVyIGRyb3Bkb3duIHdpZHRoICovCn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5GaWVsZFdpdGhQbGFjZWhvbGRlciBpbnB1dFt0eXBlPSJ0ZXh0Il0gewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsgIC8qIEFsbG93IHNocmlua2luZyBpbiBmbGV4IGNvbnRhaW5lciAqLwogICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsgIC8qIE92ZXJyaWRlIFc3NXBjICovCn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5GaWVsZFdpdGhQbGFjZWhvbGRlciAuSW5wdXRGaWVsZF9Db250YWluZXIgewogICAgZmxleC1zaHJpbms6IDA7CiAgICB3aWR0aDogMjAwcHg7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5QbGFjZWhvbGRlclNlbGVjdCB7CiAgICBtaW4td2lkdGg6IDE4MHB4OwogICAgd2lkdGg6IDIwMHB4ICFpbXBvcnRhbnQ7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5Cb2R5UGxhY2Vob2xkZXJSb3cgewogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgouVGlja2V0U2NoZWR1bGVyRm9ybSAuUmljaFRleHRIb2xkZXIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi8qIEZpZWxkIHN1ZmZpeCBmb3IgaW5saW5lIHRleHQgYWZ0ZXIgZHJvcGRvd25zICovCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5GaWVsZFN1ZmZpeCB7CiAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgY29sb3I6ICM1NTU7CiAgICBsaW5lLWhlaWdodDogMjhweDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBUaW1lIGFuZCBEYXRlIFNlbGVjdGlvbiAtIElubGluZSBMYXlvdXQgKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogU2NoZWR1bGVyIGlubGluZSBzZWxlY3QgY29udGFpbmVycyAqLwouU2NoZWR1bGVyVGltZVNlbGVjdGlvbiwKLlNjaGVkdWxlckRhdGVTZWxlY3Rpb24gewogICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGdhcDogM3B4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsKfQoKLyogU2NoZWR1bGVySW5saW5lU2VsZWN0IC0gcHJldmVudCBNb2Rlcm5pemUgc3R5bGluZyAqLwpzZWxlY3QuU2NoZWR1bGVySW5saW5lU2VsZWN0IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OwogICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogNTVweCAhaW1wb3J0YW50OwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9CgovKiBIaWRlIE1vZGVybml6ZSB3cmFwcGVyIGZvciBTY2hlZHVsZXJJbmxpbmVTZWxlY3QsIHNob3cgb3JpZ2luYWwgc2VsZWN0ICovCnNlbGVjdC5TY2hlZHVsZXJJbmxpbmVTZWxlY3QgKyAuSW5wdXRGaWVsZF9Db250YWluZXIsCi5TY2hlZHVsZXJUaW1lU2VsZWN0aW9uIC5JbnB1dEZpZWxkX0NvbnRhaW5lciwKLlNjaGVkdWxlckRhdGVTZWxlY3Rpb24gLklucHV0RmllbGRfQ29udGFpbmVyIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogTWFrZSBzdXJlIFNjaGVkdWxlcklubGluZVNlbGVjdCBpcyB2aXNpYmxlIChNb2Rlcm5pemUgaGlkZXMgb3JpZ2luYWwpICovCnNlbGVjdC5TY2hlZHVsZXJJbmxpbmVTZWxlY3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGlubGluZSBsYXlvdXQgZm9yIEFMTCAuRmllbGQgY29udGFpbmVycyBpbiBzY2hlZHVsZSBzZXR0aW5ncyAqLwouVGlja2V0U2NoZWR1bGVyRm9ybSAjVGltZVNldHRpbmdzIC5GaWVsZCwKLlRpY2tldFNjaGVkdWxlckZvcm0gI0ludGVydmFsU2V0dGluZ3MgLkZpZWxkLAouVGlja2V0U2NoZWR1bGVyRm9ybSAjRGF0ZVNldHRpbmdzIC5GaWVsZCwKLlRpY2tldFNjaGVkdWxlckZvcm0gI0VuZE9wdGlvbnMgLkZpZWxkLAojVGltZVNldHRpbmdzIC5GaWVsZCwKI0ludGVydmFsU2V0dGluZ3MgLkZpZWxkLAojRGF0ZVNldHRpbmdzIC5GaWVsZCwKI0VuZE9wdGlvbnMgLkZpZWxkIHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7CiAgICBnYXA6IDVweCAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSBBTEwgTW9kZXJuaXplIGNvbnRhaW5lcnMgdG8gYmUgaW5saW5lIC0gSElHSCBTUEVDSUZJQ0lUWSAqLwouVGlja2V0U2NoZWR1bGVyRm9ybSAjVGltZVNldHRpbmdzIC5GaWVsZCBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIsCi5UaWNrZXRTY2hlZHVsZXJGb3JtICNJbnRlcnZhbFNldHRpbmdzIC5GaWVsZCBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIsCi5UaWNrZXRTY2hlZHVsZXJGb3JtICNEYXRlU2V0dGluZ3MgLkZpZWxkIGRpdi5JbnB1dEZpZWxkX0NvbnRhaW5lciwKLlRpY2tldFNjaGVkdWxlckZvcm0gI0VuZE9wdGlvbnMgLkZpZWxkIGRpdi5JbnB1dEZpZWxkX0NvbnRhaW5lciwKI1RpbWVTZXR0aW5ncyAuRmllbGQgZGl2LklucHV0RmllbGRfQ29udGFpbmVyLAojSW50ZXJ2YWxTZXR0aW5ncyAuRmllbGQgZGl2LklucHV0RmllbGRfQ29udGFpbmVyLAojRGF0ZVNldHRpbmdzIC5GaWVsZCBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIsCiNFbmRPcHRpb25zIC5GaWVsZCBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OwogICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDsKICAgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50Owp9CgovKiBUZXh0IG5vZGVzIGFuZCBzcGFucyBzaG91bGQgYmUgaW5saW5lICovCiNUaW1lU2V0dGluZ3MgLkZpZWxkID4gc3BhbiwKI0ludGVydmFsU2V0dGluZ3MgLkZpZWxkID4gc3BhbiwKI0RhdGVTZXR0aW5ncyAuRmllbGQgPiBzcGFuIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50Owp9CgovKiBUYXJnZXQgdGhlIGFjdHVhbCBzZWxlY3Qgd3JhcHBlcnMgY3JlYXRlZCBieSBNb2Rlcm5pemUgKi8KI1RpbWVTZXR0aW5ncyAuRmllbGQgLklucHV0RmllbGRfU2VsZWN0aW9uLAojSW50ZXJ2YWxTZXR0aW5ncyAuRmllbGQgLklucHV0RmllbGRfU2VsZWN0aW9uLAojRGF0ZVNldHRpbmdzIC5GaWVsZCAuSW5wdXRGaWVsZF9TZWxlY3Rpb24gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiA1MHB4ICFpbXBvcnRhbnQ7Cn0KCi8qIE1ha2UgbmF0aXZlIHNlbGVjdCBlbGVtZW50cyAobm9uLU1vZGVybml6ZSkgaW5saW5lIGFuZCBuYXJyb3cgKi8KI1RpbWVIb3VyLAojVGltZU1pbnV0ZSwKI1N0YXJ0RGF0ZURheSwKI1N0YXJ0RGF0ZU1vbnRoLAojU3RhcnREYXRlWWVhciwKI0VuZERhdGVEYXksCiNFbmREYXRlTW9udGgsCiNFbmREYXRlWWVhciB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDUwcHggIWltcG9ydGFudDsKfQoKLyogTmF0aXZlIHNlbGVjdHMgaW4gc2NoZWR1bGUgc2V0dGluZ3MgKi8KI0ludGVydmFsU2V0dGluZ3Mgc2VsZWN0LAojRGF0ZVNldHRpbmdzIHNlbGVjdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDUwcHggIWltcG9ydGFudDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUgIWltcG9ydGFudDsKfQoKLyogRXJyb3IgdG9vbHRpcHMgc2hvdWxkIGJlIGhpZGRlbiBhbmQgbm90IGFmZmVjdCBsYXlvdXQgKi8KI0ludGVydmFsU2V0dGluZ3MgLlRvb2x0aXBFcnJvck1lc3NhZ2UsCiNEYXRlU2V0dGluZ3MgLlRvb2x0aXBFcnJvck1lc3NhZ2UsCiNFbmRPcHRpb25zIC5Ub29sdGlwRXJyb3JNZXNzYWdlIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50Owp9CgovKiBIaWRkZW4gZGF0ZXBpY2tlciBpbnB1dCBzaG91bGQgbm90IGFmZmVjdCBsYXlvdXQgKi8KI0ludGVydmFsU2V0dGluZ3MgaW5wdXQuaGFzRGF0ZXBpY2tlciwKI0RhdGVTZXR0aW5ncyBpbnB1dC5oYXNEYXRlcGlja2VyLAojRW5kT3B0aW9ucyBpbnB1dC5oYXNEYXRlcGlja2VyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEZpeCBmaWVsZCBzdWZmaXggdGV4dCBhbGlnbm1lbnQgKi8KLkZpZWxkU3VmZml4IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgM3B4ICFpbXBvcnRhbnQ7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7Cn0KCi8qIENoZWNrYm94IGZvciBvcHRpb25hbCBkYXRlIGZpZWxkcyAqLwojRW5kRGF0ZVVzZWQsCiNTdGFydERhdGVVc2VkIHsKICAgIG1hcmdpbi1yaWdodDogOHB4ICFpbXBvcnRhbnQ7Cn0KCi8qIENhbGVuZGFyIGljb24gc2hvdWxkIHN0YXkgaW5saW5lICovCiNUaW1lU2V0dGluZ3MgLkZpZWxkIC5EYXRlcGlja2VySWNvbiwKI0ludGVydmFsU2V0dGluZ3MgLkZpZWxkIC5EYXRlcGlja2VySWNvbiwKI0RhdGVTZXR0aW5ncyAuRmllbGQgLkRhdGVwaWNrZXJJY29uLAouRGF0ZXBpY2tlckljb24gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tbGVmdDogNXB4ICFpbXBvcnRhbnQ7Cn0KCi8qIEZpZWxkRXhwbGFuYXRpb24gc2hvdWxkIGJlIGZ1bGwgd2lkdGggYmVsb3cgdGhlIGZpZWxkcyAqLwojVGltZVNldHRpbmdzIC5GaWVsZCA+IC5GaWVsZEV4cGxhbmF0aW9uLAojSW50ZXJ2YWxTZXR0aW5ncyAuRmllbGQgPiAuRmllbGRFeHBsYW5hdGlvbiwKI0RhdGVTZXR0aW5ncyAuRmllbGQgPiAuRmllbGRFeHBsYW5hdGlvbiwKLkZpZWxkID4gLkZpZWxkRXhwbGFuYXRpb24gewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGZsZXgtYmFzaXM6IDEwMCUgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDhweCAhaW1wb3J0YW50OwogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBTYXZlIEJ1dHRvbnMgU3R5bGluZyAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouVGlja2V0U2NoZWR1bGVyRm9ybSAuU2F2ZUJ1dHRvbnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMTBweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5TYXZlQnV0dG9ucyAuQ2FsbEZvckFjdGlvbiB7CiAgICBtYXJnaW46IDA7Cn0KCi8qIFJpY2hUZXh0IEVkaXRvciBDb250YWluZXIgKi8KLlRpY2tldFNjaGVkdWxlckZvcm0gLlJpY2hUZXh0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLWhlaWdodDogMjAwcHg7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5TY2hlZHVsZVR5cGVTZXR0aW5ncy5IaWRkZW4sCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5FbmRUeXBlU2V0dGluZ3MuSGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogUGxhY2Vob2xkZXIgU2lkZWJhciAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouVGlja2V0U2NoZWR1bGVyRm9ybSAuUGxhY2Vob2xkZXJIaW50IHsKICAgIGNvbG9yOiAjNjY2OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLlBsYWNlaG9sZGVyTGlzdCB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLlBsYWNlaG9sZGVyTGlzdCAuUGxhY2Vob2xkZXJJdGVtIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLlBsYWNlaG9sZGVyTGlzdCAuUGxhY2Vob2xkZXJJdGVtOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLlBsYWNlaG9sZGVyTGlzdCAuUGxhY2Vob2xkZXJJdGVtOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNlM2YyZmQ7CiAgICBib3JkZXItY29sb3I6ICM5MGNhZjk7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5QbGFjZWhvbGRlckxpc3QgLlBsYWNlaG9sZGVySXRlbTphY3RpdmUgewogICAgYmFja2dyb3VuZDogI2JiZGVmYjsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLlBsYWNlaG9sZGVyTGlzdCAuUGxhY2Vob2xkZXJJdGVtLkNvcGllZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmNWU5OwogICAgYm9yZGVyLWNvbG9yOiAjODFjNzg0Owp9CgouVGlja2V0U2NoZWR1bGVyRm9ybSAuUGxhY2Vob2xkZXJMaXN0IC5QbGFjZWhvbGRlckl0ZW0gLlBsYWNlaG9sZGVyQ29kZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLlBsYWNlaG9sZGVyTGlzdCAuUGxhY2Vob2xkZXJJdGVtIGNvZGUgewogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjMTU2NWMwOwogICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDsKfQoKLlRpY2tldFNjaGVkdWxlckZvcm0gLlBsYWNlaG9sZGVyTGlzdCAuUGxhY2Vob2xkZXJJdGVtIC5QbGFjZWhvbGRlckNvZGUgaSB7CiAgICBjb2xvcjogIzk5OTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5QbGFjZWhvbGRlckxpc3QgLlBsYWNlaG9sZGVySXRlbTpob3ZlciAuUGxhY2Vob2xkZXJDb2RlIGkgewogICAgY29sb3I6ICMxNTY1YzA7Cn0KCi5UaWNrZXRTY2hlZHVsZXJGb3JtIC5QbGFjZWhvbGRlckxpc3QgLlBsYWNlaG9sZGVySXRlbS5Db3BpZWQgLlBsYWNlaG9sZGVyQ29kZSBpIHsKICAgIGNvbG9yOiAjNGNhZjUwOwp9CgouVGlja2V0U2NoZWR1bGVyRm9ybSAuUGxhY2Vob2xkZXJMaXN0IC5QbGFjZWhvbGRlckl0ZW0gLlBsYWNlaG9sZGVyRGVzYyB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogIzY2NjsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogUGxhY2Vob2xkZXIgRGlhbG9nICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi5QbGFjZWhvbGRlclNlbGVjdGlvbiB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsKfQoKLlBsYWNlaG9sZGVyU2VsZWN0aW9uIGxpIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZTsKfQoKLlBsYWNlaG9sZGVyU2VsZWN0aW9uIGxpOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNmMGY3ZmY7Cn0KCi5QbGFjZWhvbGRlclNlbGVjdGlvbiBsaTpsYXN0LWNoaWxkIHsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogUHJldmlldyBSZXN1bHRzICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiNQcmV2aWV3UmVzdWx0cyB7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgcGFkZGluZzogMTBweDsKICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1OwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgojUHJldmlld1Jlc3VsdHMgaDQgewogICAgbWFyZ2luOiAwIDAgMTBweCAwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6ICM1NTU7Cn0KCiNQcmV2aWV3UmVzdWx0cyB1bCwKI1ByZXZpZXdMaXN0IHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiAwOwp9CgojUHJldmlld1Jlc3VsdHMgbGksCiNQcmV2aWV3TGlzdCBsaSB7CiAgICBwYWRkaW5nOiA1cHggMDsKICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2RkZDsKfQoKI1ByZXZpZXdSZXN1bHRzIGxpOmxhc3QtY2hpbGQsCiNQcmV2aWV3TGlzdCBsaTpsYXN0LWNoaWxkIHsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KCiNQcmV2aWV3UmVzdWx0cyBsaSBpLAojUHJldmlld0xpc3QgbGkgaSB7CiAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgIGNvbG9yOiAjNzc3Owp9CgojUHJldmlld1Jlc3VsdHMgbGkuRXJyb3IsCiNQcmV2aWV3TGlzdCBsaS5FcnJvciB7CiAgICBjb2xvcjogI2MwMDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBNb2RhbCBEaWFsb2dzICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiNQcmV2aWV3TW9kYWwgLklubmVyQ29udGVudCwKI0hpc3RvcnlNb2RhbCAuSW5uZXJDb250ZW50IHsKICAgIHBhZGRpbmc6IDE1cHg7CiAgICBtYXgtaGVpZ2h0OiBjYWxjKDgwdmggLSAxMDBweCk7CiAgICBvdmVyZmxvdy15OiBhdXRvOwp9CgovKiBEaXJlY3QgY29udGVudCBjb250YWluZXJzIC0gbGV0IHBhcmVudCBoYW5kbGUgc2Nyb2xsaW5nICovCiNQcmV2aWV3Q29udGVudCwKI0hpc3RvcnlDb250ZW50IHsKICAgIHBhZGRpbmc6IDVweDsKfQoKI1ByZXZpZXdNb2RhbCBoMywKI0hpc3RvcnlNb2RhbCBoMyB7CiAgICBtYXJnaW46IDAgMCAxNXB4IDA7CiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlOwp9CgouUHJldmlld0xpc3QgewogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIHBhZGRpbmc6IDA7CiAgICBtYXJnaW46IDA7Cn0KCi5QcmV2aWV3TGlzdCBsaSB7CiAgICBwYWRkaW5nOiA4cHggMDsKICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2VlZTsKfQoKLlByZXZpZXdMaXN0IGxpOmxhc3QtY2hpbGQgewogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKLlByZXZpZXdMaXN0IGxpIGkgewogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgY29sb3I6ICMwMDc4YmY7Cn0KCi8qIEhpc3RvcnkgdGFibGUgaW4gbW9kYWwgKi8KI0hpc3RvcnlDb250ZW50IC5EYXRhVGFibGUgewogICAgd2lkdGg6IDEwMCU7Cn0KCiNIaXN0b3J5Q29udGVudCAuRGF0YVRhYmxlIHRoIHsKICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICBwYWRkaW5nOiA4cHg7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICB0b3A6IDA7CiAgICB6LWluZGV4OiAxOwp9CgojSGlzdG9yeUNvbnRlbnQgLkRhdGFUYWJsZSB0ZCB7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBQbGFjZWhvbGRlciBTZWxlY3QgU3R5bGluZyAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgouUGxhY2Vob2xkZXJTZWxlY3QgewogICAgbWF4LXdpZHRoOiAyMjBweDsKfQoKLyogRXJyb3IgQmFubmVyOiBub3cgYSBwcm9wZXIgRnJvbnRlbmQ6Ok5vdGlmeU1vZHVsZQogICAoS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5vdGlmaWNhdGlvbjo6VGlja2V0U2NoZWR1bGVyRXJyb3IpIHVzaW5nCiAgIFpudW55J3Mgb3duICRMYXlvdXRPYmplY3QtPk5vdGlmeSgpLy5NZXNzYWdlQm94LkVycm9yIC0gcmVuZGVycyBpbgogICB0aGUgc3RhbmRhcmQgc2l0ZS13aWRlIG5vdGlmaWNhdGlvbiBhcmVhLCBubyBjdXN0b20gQ1NTIG5lZWRlZC4gKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogUmVzcG9uc2l2ZSBhZGp1c3RtZW50cyAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgIC5UaWNrZXRTY2hlZHVsZXIgLkFjdGlvbkljb25zIC5BY3Rpb25JY29uIHsKICAgICAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgfQp9Cg==</File>

        <!-- Cron -->
        <File Permission="660" Location="var/cron/znuny_daemon" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyBjaGVjayBabnVueSBkYWVtb24gc3RhdHVzCiovNSAqICogKiAqICAgICRIT01FL2Jpbi96bnVueS5EYWVtb24ucGwgc3RhcnQgPj4gL2Rldi9udWxsCg==</File>

        <!-- Unit Tests -->
        <File Permission="660" Location="scripts/test/TicketScheduler.t" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIEdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJFF1ZXVlT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwpteSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldFNjaGVkdWxlcicpOwoKIyBHZXQgaGVscGVyIG9iamVjdCB3aXRoIGRhdGFiYXNlIHJlc3RvcmUKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgQ3JlYXRlIHRlc3QgcXVldWUgZm9yIHNjaGVkdWxlcwpteSAkUXVldWVOYW1lID0gJ1Rlc3RTY2hlZHVsZXJRdWV1ZScgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwpteSAkUXVldWVJRCAgID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCgKICAgIE5hbWUgICAgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdUZXN0IHF1ZXVlIGZvciBUaWNrZXRTY2hlZHVsZXInLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUXVldWVJRCwKICAgICJRdWV1ZUFkZCgpIC0gQ3JlYXRlZCB0ZXN0IHF1ZXVlICRRdWV1ZU5hbWUiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMTogU2NoZWR1bGVyQWRkIC0gQ3JlYXRlIGEgbmV3IHNjaGVkdWxlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRTY2hlZHVsZU5hbWUgPSAnVGVzdFNjaGVkdWxlJyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7CgpteSAkU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAkU2NoZWR1bGVOYW1lLAogICAgU2NoZWR1bGVNb2RlICAgPT4gJ3RpY2tldCcsCiAgICBUaXRsZSAgICAgICAgICA9PiAnVGVzdCBUaWNrZXQgW0RBVEVdJywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdUaGlzIGlzIGEgdGVzdCB0aWNrZXQgYm9keS4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ2RhaWx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdFdXJvcGUvQmVybGluJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRTY2hlZHVsZXJJRCwKICAgICJTY2hlZHVsZXJBZGQoKSAtIENyZWF0ZWQgc2NoZWR1bGUgJyRTY2hlZHVsZU5hbWUnIHdpdGggSUQgJFNjaGVkdWxlcklEIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDI6IFNjaGVkdWxlckdldCAtIFJldHJpZXZlIHRoZSBzY2hlZHVsZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAlU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKFwlU2NoZWR1bGUpLAogICAgIlNjaGVkdWxlckdldCgpIC0gUmV0cmlldmVkIHNjaGVkdWxlIGRhdGEiLAopOwoKJFNlbGYtPklzKAogICAgJFNjaGVkdWxle05hbWV9LAogICAgJFNjaGVkdWxlTmFtZSwKICAgICJTY2hlZHVsZXJHZXQoKSAtIE5hbWUgbWF0Y2hlcyIsCik7CgokU2VsZi0+SXMoCiAgICAkU2NoZWR1bGV7U2NoZWR1bGVNb2RlfSwKICAgICd0aWNrZXQnLAogICAgIlNjaGVkdWxlckdldCgpIC0gU2NoZWR1bGVNb2RlIG1hdGNoZXMiLAopOwoKJFNlbGYtPklzKAogICAgJFNjaGVkdWxle1RpdGxlfSwKICAgICdUZXN0IFRpY2tldCBbREFURV0nLAogICAgIlNjaGVkdWxlckdldCgpIC0gVGl0bGUgbWF0Y2hlcyIsCik7CgokU2VsZi0+SXMoCiAgICAkU2NoZWR1bGV7UXVldWVJRH0sCiAgICAkUXVldWVJRCwKICAgICJTY2hlZHVsZXJHZXQoKSAtIFF1ZXVlSUQgbWF0Y2hlcyIsCik7CgokU2VsZi0+SXMoCiAgICAkU2NoZWR1bGV7U2NoZWR1bGVUeXBlfSwKICAgICdkYWlseScsCiAgICAiU2NoZWR1bGVyR2V0KCkgLSBTY2hlZHVsZVR5cGUgbWF0Y2hlcyIsCik7CgokU2VsZi0+SXMoCiAgICAkU2NoZWR1bGV7VmFsaWRJRH0sCiAgICAxLAogICAgIlNjaGVkdWxlckdldCgpIC0gVmFsaWRJRCBtYXRjaGVzIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDM6IFNjaGVkdWxlclVwZGF0ZSAtIFVwZGF0ZSB0aGUgc2NoZWR1bGUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFVwZGF0ZWROYW1lID0gJ1VwZGF0ZWRTY2hlZHVsZScgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJVcGRhdGUoCiAgICBTY2hlZHVsZXJJRCAgICA9PiAkU2NoZWR1bGVySUQsCiAgICBOYW1lICAgICAgICAgICA9PiAkVXBkYXRlZE5hbWUsCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdVcGRhdGVkIFRlc3QgVGlja2V0IFtEQVRFXScsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDQsCiAgICBCb2R5ICAgICAgICAgICA9PiAnVXBkYXRlZCBib2R5IHRleHQuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICd3ZWVrbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgIHdlZWtkYXlzID0+IFsxLCAzLCA1XSwKICAgICAgICB0aW1lICAgICA9PiAnMTA6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdFdXJvcGUvQmVybGluJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGVTdWNjZXNzLAogICAgIlNjaGVkdWxlclVwZGF0ZSgpIC0gVXBkYXRlZCBzY2hlZHVsZSBzdWNjZXNzZnVsbHkiLAopOwoKIyBWZXJpZnkgdXBkYXRlCm15ICVVcGRhdGVkU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkU2NoZWR1bGVySUQsCik7CgokU2VsZi0+SXMoCiAgICAkVXBkYXRlZFNjaGVkdWxle05hbWV9LAogICAgJFVwZGF0ZWROYW1lLAogICAgIlNjaGVkdWxlclVwZGF0ZSgpIC0gTmFtZSB1cGRhdGVkIGNvcnJlY3RseSIsCik7CgokU2VsZi0+SXMoCiAgICAkVXBkYXRlZFNjaGVkdWxle1RpdGxlfSwKICAgICdVcGRhdGVkIFRlc3QgVGlja2V0IFtEQVRFXScsCiAgICAiU2NoZWR1bGVyVXBkYXRlKCkgLSBUaXRsZSB1cGRhdGVkIGNvcnJlY3RseSIsCik7CgokU2VsZi0+SXMoCiAgICAkVXBkYXRlZFNjaGVkdWxle1NjaGVkdWxlVHlwZX0sCiAgICAnd2Vla2x5JywKICAgICJTY2hlZHVsZXJVcGRhdGUoKSAtIFNjaGVkdWxlVHlwZSB1cGRhdGVkIGNvcnJlY3RseSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCA0OiBTY2hlZHVsZXJMaXN0IC0gTGlzdCBhbGwgc2NoZWR1bGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15IEBTY2hlZHVsZXJMaXN0ID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICBzY2FsYXIgQFNjaGVkdWxlckxpc3QgPiAwLAogICAgIlNjaGVkdWxlckxpc3QoKSAtIFJldHVybnMgbm9uLWVtcHR5IGxpc3QiLAopOwoKIyBDaGVjayB0aGF0IG91ciBzY2hlZHVsZSBpcyBpbiB0aGUgbGlzdApteSAkRm91bmRTY2hlZHVsZSA9IDA7CmZvciBteSAkTGlzdEl0ZW0gKEBTY2hlZHVsZXJMaXN0KSB7CiAgICBpZiAoICRMaXN0SXRlbS0+e0lEfSA9PSAkU2NoZWR1bGVySUQgKSB7CiAgICAgICAgJEZvdW5kU2NoZWR1bGUgPSAxOwogICAgICAgIGxhc3Q7CiAgICB9Cn0KCiRTZWxmLT5UcnVlKAogICAgJEZvdW5kU2NoZWR1bGUsCiAgICAiU2NoZWR1bGVyTGlzdCgpIC0gT3VyIHNjaGVkdWxlIGlzIGluIHRoZSBsaXN0IiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDU6IENhbGN1bGF0ZU5leHRFeGVjdXRpb24gLSBEYWlseQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkRGFpbHlTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdEYWlseVRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ0RhaWx5IFRlc3QnLAogICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICBQcmlvcml0eUlEICAgICA9PiAzLAogICAgQm9keSAgICAgICAgICAgPT4gJ0RhaWx5IHRlc3QgYm9keS4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ2RhaWx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdFdXJvcGUvQmVybGluJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICREYWlseVNjaGVkdWxlcklELAogICAgIlNjaGVkdWxlckFkZCgpIC0gQ3JlYXRlZCBkYWlseSBzY2hlZHVsZSIsCik7CgpteSAlRGFpbHlTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgIFNjaGVkdWxlcklEID0+ICREYWlseVNjaGVkdWxlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkRGFpbHlTY2hlZHVsZXtOZXh0RXhlY3V0aW9ufSwKICAgICJDYWxjdWxhdGVOZXh0RXhlY3V0aW9uKCkgLSBEYWlseSBzY2hlZHVsZSBoYXMgTmV4dEV4ZWN1dGlvbiBzZXQ6ICREYWlseVNjaGVkdWxle05leHRFeGVjdXRpb259IiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDY6IENhbGN1bGF0ZU5leHRFeGVjdXRpb24gLSBXZWVrbHkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFdlZWtseVNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ1dlZWtseVRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ1dlZWtseSBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdXZWVrbHkgdGVzdCBib2R5LicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAnd2Vla2x5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICB3ZWVrZGF5cyA9PiBbMSwgMywgNV0sICAgICMgTW9uZGF5LCBXZWRuZXNkYXksIEZyaWRheQogICAgICAgIHRpbWUgICAgID0+ICcxNDowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ0V1cm9wZS9CZXJsaW4nLAogICAgfSwKICAgIEVuZFR5cGUgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFdlZWtseVNjaGVkdWxlcklELAogICAgIlNjaGVkdWxlckFkZCgpIC0gQ3JlYXRlZCB3ZWVrbHkgc2NoZWR1bGUiLAopOwoKbXkgJVdlZWtseVNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgU2NoZWR1bGVySUQgPT4gJFdlZWtseVNjaGVkdWxlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkV2Vla2x5U2NoZWR1bGV7TmV4dEV4ZWN1dGlvbn0sCiAgICAiQ2FsY3VsYXRlTmV4dEV4ZWN1dGlvbigpIC0gV2Vla2x5IHNjaGVkdWxlIGhhcyBOZXh0RXhlY3V0aW9uIHNldDogJFdlZWtseVNjaGVkdWxle05leHRFeGVjdXRpb259IiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDc6IENhbGN1bGF0ZU5leHRFeGVjdXRpb24gLSBNb250aGx5IERheQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkTW9udGhseURheVNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ01vbnRobHlEYXlUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdNb250aGx5IERheSBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdNb250aGx5IGRheSB0ZXN0IGJvZHkuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdtb250aGx5X2RheScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgZGF5ICAgICAgPT4gMTUsCiAgICAgICAgdGltZSAgICAgPT4gJzA4OjAwJywKICAgICAgICB0aW1lem9uZSA9PiAnRXVyb3BlL0JlcmxpbicsCiAgICB9LAogICAgRW5kVHlwZSA9PiAnbmV2ZXInLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkTW9udGhseURheVNjaGVkdWxlcklELAogICAgIlNjaGVkdWxlckFkZCgpIC0gQ3JlYXRlZCBtb250aGx5X2RheSBzY2hlZHVsZSIsCik7CgpteSAlTW9udGhseURheVNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgU2NoZWR1bGVySUQgPT4gJE1vbnRobHlEYXlTY2hlZHVsZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJE1vbnRobHlEYXlTY2hlZHVsZXtOZXh0RXhlY3V0aW9ufSwKICAgICJDYWxjdWxhdGVOZXh0RXhlY3V0aW9uKCkgLSBtb250aGx5X2RheSBzY2hlZHVsZSBoYXMgTmV4dEV4ZWN1dGlvbiBzZXQ6ICRNb250aGx5RGF5U2NoZWR1bGV7TmV4dEV4ZWN1dGlvbn0iLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgODogQ2FsY3VsYXRlTmV4dEV4ZWN1dGlvbiAtIE1vbnRobHkgV2Vla2RheQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkTW9udGhseVdlZWtkYXlTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdNb250aGx5V2Vla2RheVRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ01vbnRobHkgV2Vla2RheSBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdNb250aGx5IHdlZWtkYXkgdGVzdCBib2R5LicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAnbW9udGhseV93ZWVrZGF5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICBudGggICAgICA9PiAyLCAgICAgICAjIDJuZAogICAgICAgIHdlZWtkYXkgID0+ICd0dWUnLCAgICMgVHVlc2RheQogICAgICAgIHRpbWUgICAgID0+ICcxMTowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ0V1cm9wZS9CZXJsaW4nLAogICAgfSwKICAgIEVuZFR5cGUgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJE1vbnRobHlXZWVrZGF5U2NoZWR1bGVySUQsCiAgICAiU2NoZWR1bGVyQWRkKCkgLSBDcmVhdGVkIG1vbnRobHlfd2Vla2RheSBzY2hlZHVsZSIsCik7CgpteSAlTW9udGhseVdlZWtkYXlTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgIFNjaGVkdWxlcklEID0+ICRNb250aGx5V2Vla2RheVNjaGVkdWxlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkTW9udGhseVdlZWtkYXlTY2hlZHVsZXtOZXh0RXhlY3V0aW9ufSwKICAgICJDYWxjdWxhdGVOZXh0RXhlY3V0aW9uKCkgLSBtb250aGx5X3dlZWtkYXkgc2NoZWR1bGUgaGFzIE5leHRFeGVjdXRpb24gc2V0OiAkTW9udGhseVdlZWtkYXlTY2hlZHVsZXtOZXh0RXhlY3V0aW9ufSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCA5OiBDYWxjdWxhdGVOZXh0RXhlY3V0aW9uIC0gSW50ZXJ2YWwKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEludGVydmFsU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAnSW50ZXJ2YWxUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdJbnRlcnZhbCBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdJbnRlcnZhbCB0ZXN0IGJvZHkuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdpbnRlcnZhbCcsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgaW50ZXJ2YWxfZGF5cyA9PiA3LAogICAgICAgIHN0YXJ0X2RhdGUgICAgPT4gJzIwMjYtMDEtMTUnLAogICAgICAgIHRpbWUgICAgICAgICAgPT4gJzA5OjAwJywKICAgICAgICB0aW1lem9uZSAgICAgID0+ICdFdXJvcGUvQmVybGluJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRJbnRlcnZhbFNjaGVkdWxlcklELAogICAgIlNjaGVkdWxlckFkZCgpIC0gQ3JlYXRlZCBpbnRlcnZhbCBzY2hlZHVsZSIsCik7CgpteSAlSW50ZXJ2YWxTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgIFNjaGVkdWxlcklEID0+ICRJbnRlcnZhbFNjaGVkdWxlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkSW50ZXJ2YWxTY2hlZHVsZXtOZXh0RXhlY3V0aW9ufSwKICAgICJDYWxjdWxhdGVOZXh0RXhlY3V0aW9uKCkgLSBpbnRlcnZhbCBzY2hlZHVsZSBoYXMgTmV4dEV4ZWN1dGlvbiBzZXQ6ICRJbnRlcnZhbFNjaGVkdWxle05leHRFeGVjdXRpb259IiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDEwOiBSZXBsYWNlUGxhY2Vob2xkZXJzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRPcmlnaW5hbFRleHQgPSAnVGlja2V0IGZvciBbREFURV0gYXQgW1RJTUVdIC0gV2VlayBbV0VFS10gb2YgW1lFQVJdJzsKbXkgJFJlcGxhY2VkVGV4dCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlJlcGxhY2VQbGFjZWhvbGRlcnMoCiAgICBUZXh0ID0+ICRPcmlnaW5hbFRleHQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRSZXBsYWNlZFRleHQsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIC0gUmV0dXJucyB0ZXh0IiwKKTsKCiRTZWxmLT5Jc05vdCgKICAgICRSZXBsYWNlZFRleHQsCiAgICAkT3JpZ2luYWxUZXh0LAogICAgIlJlcGxhY2VQbGFjZWhvbGRlcnMoKSAtIFRleHQgd2FzIG1vZGlmaWVkIiwKKTsKCiMgQ2hlY2sgdGhhdCBwbGFjZWhvbGRlcnMgYXJlIHJlcGxhY2VkICh1c2UgZXhwbGljaXQgYm9vbGVhbiBjb252ZXJzaW9uKQpteSAkSGFzRGF0ZVBsYWNlaG9sZGVyID0gKCAkUmVwbGFjZWRUZXh0ID1+IC9cW0RBVEVcXS8gKSA/IDEgOiAwOwokU2VsZi0+RmFsc2UoCiAgICAkSGFzRGF0ZVBsYWNlaG9sZGVyLAogICAgIlJlcGxhY2VQbGFjZWhvbGRlcnMoKSAtIFtEQVRFXSBwbGFjZWhvbGRlciByZXBsYWNlZCIsCik7CgpteSAkSGFzVGltZVBsYWNlaG9sZGVyID0gKCAkUmVwbGFjZWRUZXh0ID1+IC9cW1RJTUVcXS8gKSA/IDEgOiAwOwokU2VsZi0+RmFsc2UoCiAgICAkSGFzVGltZVBsYWNlaG9sZGVyLAogICAgIlJlcGxhY2VQbGFjZWhvbGRlcnMoKSAtIFtUSU1FXSBwbGFjZWhvbGRlciByZXBsYWNlZCIsCik7CgpteSAkSGFzV2Vla1BsYWNlaG9sZGVyID0gKCAkUmVwbGFjZWRUZXh0ID1+IC9cW1dFRUtcXS8gKSA/IDEgOiAwOwokU2VsZi0+RmFsc2UoCiAgICAkSGFzV2Vla1BsYWNlaG9sZGVyLAogICAgIlJlcGxhY2VQbGFjZWhvbGRlcnMoKSAtIFtXRUVLXSBwbGFjZWhvbGRlciByZXBsYWNlZCIsCik7CgpteSAkSGFzWWVhclBsYWNlaG9sZGVyID0gKCAkUmVwbGFjZWRUZXh0ID1+IC9cW1lFQVJcXS8gKSA/IDEgOiAwOwokU2VsZi0+RmFsc2UoCiAgICAkSGFzWWVhclBsYWNlaG9sZGVyLAogICAgIlJlcGxhY2VQbGFjZWhvbGRlcnMoKSAtIFtZRUFSXSBwbGFjZWhvbGRlciByZXBsYWNlZCIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxMTogR2V0TmV4dEV4ZWN1dGlvbnMgLSBQcmV2aWV3CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15IEBOZXh0RXhlY3V0aW9ucyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkdldE5leHRFeGVjdXRpb25zKAogICAgU2NoZWR1bGVySUQgPT4gJERhaWx5U2NoZWR1bGVySUQsCiAgICBDb3VudCAgICAgICA9PiA1LAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEBOZXh0RXhlY3V0aW9ucywKICAgIDUsCiAgICAiR2V0TmV4dEV4ZWN1dGlvbnMoKSAtIFJldHVybnMgNSBleGVjdXRpb25zIGZvciBkYWlseSBzY2hlZHVsZSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxMjogU2NoZWR1bGVyRGVsZXRlIC0gRGVsZXRlIHRoZSBzY2hlZHVsZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkRGVsZXRlU3VjY2VzcyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckRlbGV0ZSgKICAgIFNjaGVkdWxlcklEID0+ICRTY2hlZHVsZXJJRCwKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICREZWxldGVTdWNjZXNzLAogICAgIlNjaGVkdWxlckRlbGV0ZSgpIC0gRGVsZXRlZCBzY2hlZHVsZSBzdWNjZXNzZnVsbHkiLAopOwoKIyBWZXJpZnkgZGVsZXRpb24KbXkgJURlbGV0ZWRTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgIFNjaGVkdWxlcklEID0+ICRTY2hlZHVsZXJJRCwKKTsKCm15ICRTY2hlZHVsZVN0aWxsRXhpc3RzID0gSXNIYXNoUmVmV2l0aERhdGEoXCVEZWxldGVkU2NoZWR1bGUpID8gMSA6IDA7CiRTZWxmLT5GYWxzZSgKICAgICRTY2hlZHVsZVN0aWxsRXhpc3RzLAogICAgIlNjaGVkdWxlckRlbGV0ZSgpIC0gU2NoZWR1bGUgbm8gbG9uZ2VyIGV4aXN0cyIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxMzogU2NoZWR1bGVyQWRkIC0gTXVsdGlwbGUgc2NoZWR1bGVzIHdpdGggc2FtZSBuYW1lCiMgTm90ZTogQ3VycmVudGx5IGR1cGxpY2F0ZSBuYW1lcyBhcmUgYWxsb3dlZCAobm8gdW5pcXVlIGNvbnN0cmFpbnQpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICREdXBsaWNhdGVOYW1lID0gJ0R1cGxpY2F0ZVRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCm15ICRGaXJzdFNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJER1cGxpY2F0ZU5hbWUsCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdGaXJzdCBTY2hlZHVsZScsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnRmlyc3Qgc2NoZWR1bGUgYm9keS4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ2RhaWx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdFdXJvcGUvQmVybGluJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRGaXJzdFNjaGVkdWxlcklELAogICAgIlNjaGVkdWxlckFkZCgpIC0gQ3JlYXRlZCBmaXJzdCBzY2hlZHVsZSB3aXRoIG5hbWUgJyREdXBsaWNhdGVOYW1lJyIsCik7CgpteSAkU2Vjb25kU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAkRHVwbGljYXRlTmFtZSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ1NlY29uZCBTY2hlZHVsZScsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnU2Vjb25kIHNjaGVkdWxlIGJvZHkuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzEwOjAwJywKICAgICAgICB0aW1lem9uZSA9PiAnRXVyb3BlL0JlcmxpbicsCiAgICB9LAogICAgRW5kVHlwZSA9PiAnbmV2ZXInLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBOb3RlOiBEdXBsaWNhdGUgbmFtZXMgYXJlIGN1cnJlbnRseSBhbGxvd2VkIC0gYm90aCBzY2hlZHVsZXMgY2FuIGJlIGNyZWF0ZWQKJFNlbGYtPlRydWUoCiAgICAkU2Vjb25kU2NoZWR1bGVySUQsCiAgICAiU2NoZWR1bGVyQWRkKCkgLSBEdXBsaWNhdGUgbmFtZXMgYWxsb3dlZCAoYm90aCBzY2hlZHVsZXMgY3JlYXRlZCkiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMTQ6IFNjaGVkdWxlckFkZCAtIE1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIHNob3VsZCBmYWlsCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJbnZhbGlkU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgPT4gJ01pc3NpbmdGaWVsZHNUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgPT4gJ3RpY2tldCcsCiAgICAjIE1pc3NpbmcgVGl0bGUsIFF1ZXVlSUQsIFNjaGVkdWxlVHlwZSwgU2NoZWR1bGVDb25maWcKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRJbnZhbGlkU2NoZWR1bGVySUQsCiAgICAiU2NoZWR1bGVyQWRkKCkgLSBNaXNzaW5nIHJlcXVpcmVkIGZpZWxkcyByZWplY3RlZCIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxNTogRXhlY3V0ZVNjaGVkdWxlciAtIENyZWF0ZSBhY3R1YWwgdGlja2V0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRFeGVjU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAnRXhlY1Rlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ0V4ZWN1dGlvbiBUZXN0IFRpY2tldCBbREFURV0nLAogICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICBQcmlvcml0eUlEICAgICA9PiAzLAogICAgQm9keSAgICAgICAgICAgPT4gJ1RoaXMgdGlja2V0IHdhcyBjcmVhdGVkIGJ5IHRoZSBzY2hlZHVsZXIuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzAwOjAxJywKICAgICAgICB0aW1lem9uZSA9PiAnVVRDJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRFeGVjU2NoZWR1bGVySUQsCiAgICAiRXhlY3V0ZVNjaGVkdWxlcigpIHNldHVwIC0gQ3JlYXRlZCBzY2hlZHVsZSBmb3IgZXhlY3V0aW9uIiwKKTsKCm15ICRDcmVhdGVkVGlja2V0SUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5FeGVjdXRlU2NoZWR1bGVyKAogICAgU2NoZWR1bGVySUQgPT4gJEV4ZWNTY2hlZHVsZXJJRCwKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDcmVhdGVkVGlja2V0SUQsCiAgICAiRXhlY3V0ZVNjaGVkdWxlcigpIC0gQ3JlYXRlZCB0aWNrZXQgd2l0aCBJRCAkQ3JlYXRlZFRpY2tldElEIiwKKTsKCiMgVmVyaWZ5IHRoZSB0aWNrZXQgZXhpc3RzCm15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7Cm15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkQ3JlYXRlZFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoXCVUaWNrZXQpLAogICAgIkV4ZWN1dGVTY2hlZHVsZXIoKSAtIFRpY2tldCBleGlzdHMgYW5kIGhhcyBkYXRhIiwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXR7UXVldWVJRH0sCiAgICAkUXVldWVJRCwKICAgICJFeGVjdXRlU2NoZWR1bGVyKCkgLSBUaWNrZXQgaXMgaW4gY29ycmVjdCBxdWV1ZSIsCik7CgojIFZlcmlmeSBleGVjdXRpb24gY291bnQgd2FzIGluY3JlbWVudGVkCm15ICVFeGVjU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkRXhlY1NjaGVkdWxlcklELAopOwoKJFNlbGYtPklzKAogICAgJEV4ZWNTY2hlZHVsZXtFeGVjdXRpb25Db3VudH0sCiAgICAxLAogICAgIkV4ZWN1dGVTY2hlZHVsZXIoKSAtIEV4ZWN1dGlvbiBjb3VudCBpbmNyZW1lbnRlZCB0byAxIiwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEV4ZWNTY2hlZHVsZXtMYXN0RXhlY3V0aW9ufSwKICAgICJFeGVjdXRlU2NoZWR1bGVyKCkgLSBMYXN0RXhlY3V0aW9uIGlzIHNldCIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxNjogRXhlY3V0ZVNjaGVkdWxlciAtIEluYWN0aXZlIHNjaGVkdWxlIHNob3VsZCBiZSBza2lwcGVkCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJbmFjdGl2ZVNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ0luYWN0aXZlVGVzdCcgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpLAogICAgU2NoZWR1bGVNb2RlICAgPT4gJ3RpY2tldCcsCiAgICBUaXRsZSAgICAgICAgICA9PiAnSW5hY3RpdmUgVGVzdCcsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnU2hvdWxkIG5vdCBiZSBjcmVhdGVkLicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgIHRpbWUgICAgID0+ICcwMDowMScsCiAgICAgICAgdGltZXpvbmUgPT4gJ1VUQycsCiAgICB9LAogICAgRW5kVHlwZSA9PiAnbmV2ZXInLAogICAgVmFsaWRJRCA9PiAyLCAgICAjIGludmFsaWQKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEluYWN0aXZlU2NoZWR1bGVySUQsCiAgICAiRXhlY3V0ZVNjaGVkdWxlcigpIGluYWN0aXZlIHNldHVwIC0gQ3JlYXRlZCBpbmFjdGl2ZSBzY2hlZHVsZSIsCik7CgpteSAkSW5hY3RpdmVUaWNrZXRJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCA9PiAkSW5hY3RpdmVTY2hlZHVsZXJJRCwKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkSW5hY3RpdmVUaWNrZXRJRCwKICAgICJFeGVjdXRlU2NoZWR1bGVyKCkgLSBJbmFjdGl2ZSBzY2hlZHVsZSByZXR1cm5zIG5vIHRpY2tldCIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxNzogRXhlY3V0ZVNjaGVkdWxlciAtIERyeS1ydW4gbW9kZSAoTm9UaWNrZXQpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICREcnlSdW5TY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdEcnlSdW5UZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdEcnkgUnVuIFRlc3QnLAogICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICBQcmlvcml0eUlEICAgICA9PiAzLAogICAgQm9keSAgICAgICAgICAgPT4gJ1Nob3VsZCBzaW11bGF0ZSBvbmx5LicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgIHRpbWUgICAgID0+ICcwMDowMScsCiAgICAgICAgdGltZXpvbmUgPT4gJ1VUQycsCiAgICB9LAogICAgRW5kVHlwZSA9PiAnbmV2ZXInLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRHJ5UnVuU2NoZWR1bGVySUQsCiAgICAiRXhlY3V0ZVNjaGVkdWxlcigpIGRyeS1ydW4gc2V0dXAgLSBDcmVhdGVkIHNjaGVkdWxlIiwKKTsKCm15ICREcnlSdW5SZXN1bHQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5FeGVjdXRlU2NoZWR1bGVyKAogICAgU2NoZWR1bGVySUQgPT4gJERyeVJ1blNjaGVkdWxlcklELAogICAgVXNlcklEICAgICAgPT4gMSwKICAgIE5vVGlja2V0ICAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkRHJ5UnVuUmVzdWx0LAogICAgMSwKICAgICJFeGVjdXRlU2NoZWR1bGVyKCkgLSBOb1RpY2tldCBtb2RlIHJldHVybnMgMSAoc3VjY2VzcyB3aXRob3V0IHRpY2tldCkiLAopOwoKIyBOb1RpY2tldCBzdGlsbCByZWNvcmRzIGV4ZWN1dGlvbiAoYnkgZGVzaWduKQpteSAlRHJ5UnVuU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkRHJ5UnVuU2NoZWR1bGVySUQsCik7CgokU2VsZi0+SXMoCiAgICAkRHJ5UnVuU2NoZWR1bGV7RXhlY3V0aW9uQ291bnR9LAogICAgMSwKICAgICJFeGVjdXRlU2NoZWR1bGVyKCkgLSBOb1RpY2tldCByZWNvcmRzIGV4ZWN1dGlvbiAoYnkgZGVzaWduKSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxODogSGlzdG9yeUxpc3QgLSBBZnRlciBleGVjdXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQEhpc3RvcnkgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5IaXN0b3J5TGlzdCgKICAgIFNjaGVkdWxlcklEID0+ICRFeGVjU2NoZWR1bGVySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIHNjYWxhciBASGlzdG9yeSA+IDAsCiAgICAiSGlzdG9yeUxpc3QoKSAtIFJldHVybnMgZW50cmllcyBhZnRlciBleGVjdXRpb24iLAopOwoKJFNlbGYtPklzKAogICAgJEhpc3RvcnlbMF0tPntUaWNrZXRJRH0sCiAgICAkQ3JlYXRlZFRpY2tldElELAogICAgIkhpc3RvcnlMaXN0KCkgLSBGaXJzdCBlbnRyeSBoYXMgY29ycmVjdCBUaWNrZXRJRCIsCik7CgokU2VsZi0+SXMoCiAgICAkSGlzdG9yeVswXS0+e1N1Y2Nlc3N9LAogICAgMSwKICAgICJIaXN0b3J5TGlzdCgpIC0gRmlyc3QgZW50cnkgc2hvd3Mgc3VjY2VzcyIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAxOTogSGlzdG9yeUxpc3QgLSBXaXRoIExpbWl0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgRXhlY3V0ZSBhIHNlY29uZCB0aW1lIHRvIGhhdmUgbXVsdGlwbGUgaGlzdG9yeSBlbnRyaWVzCm15ICRTZWNvbmRUaWNrZXRJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCA9PiAkRXhlY1NjaGVkdWxlcklELAogICAgVXNlcklEICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlY29uZFRpY2tldElELAogICAgIkhpc3RvcnlMaXN0KCkgbGltaXQgc2V0dXAgLSBDcmVhdGVkIHNlY29uZCB0aWNrZXQiLAopOwoKbXkgQExpbWl0ZWRIaXN0b3J5ID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+SGlzdG9yeUxpc3QoCiAgICBTY2hlZHVsZXJJRCA9PiAkRXhlY1NjaGVkdWxlcklELAogICAgTGltaXQgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciBATGltaXRlZEhpc3RvcnksCiAgICAxLAogICAgIkhpc3RvcnlMaXN0KCkgLSBMaW1pdD0xIHJldHVybnMgZXhhY3RseSAxIGVudHJ5IiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDIwOiBEeW5hbWljRmllbGRzIC0gU2V0IHZpYSBTY2hlZHVsZXJBZGQgYW5kIHJldHJpZXZlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRERlNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ0RGVGVzdCcgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpLAogICAgU2NoZWR1bGVNb2RlICAgPT4gJ3RpY2tldCcsCiAgICBUaXRsZSAgICAgICAgICA9PiAnRHluYW1pY0ZpZWxkIFRlc3QnLAogICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICBQcmlvcml0eUlEICAgICA9PiAzLAogICAgQm9keSAgICAgICAgICAgPT4gJ1Rlc3RpbmcgRHluYW1pY0ZpZWxkcy4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ2RhaWx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdFdXJvcGUvQmVybGluJywKICAgIH0sCiAgICBFbmRUeXBlICAgICAgID0+ICduZXZlcicsCiAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICBEeW5hbWljRmllbGRzID0+IHsKICAgICAgICBUZXN0RmllbGQxID0+ICdWYWx1ZTEnLAogICAgICAgIFRlc3RGaWVsZDIgPT4gJ1ZhbHVlMicsCiAgICB9LAopOwoKJFNlbGYtPlRydWUoCiAgICAkREZTY2hlZHVsZXJJRCwKICAgICJEeW5hbWljRmllbGRzIC0gQ3JlYXRlZCBzY2hlZHVsZSB3aXRoIER5bmFtaWNGaWVsZHMiLAopOwoKbXkgJURGU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkREZTY2hlZHVsZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoJERGU2NoZWR1bGV7RHluYW1pY0ZpZWxkc30pLAogICAgIkR5bmFtaWNGaWVsZHMgLSBTY2hlZHVsZXJHZXQgcmV0dXJucyBEeW5hbWljRmllbGRzIiwKKTsKCiRTZWxmLT5JcygKICAgICRERlNjaGVkdWxle0R5bmFtaWNGaWVsZHN9LT57VGVzdEZpZWxkMX0sCiAgICAnVmFsdWUxJywKICAgICJEeW5hbWljRmllbGRzIC0gVGVzdEZpZWxkMSB2YWx1ZSBtYXRjaGVzIiwKKTsKCiRTZWxmLT5JcygKICAgICRERlNjaGVkdWxle0R5bmFtaWNGaWVsZHN9LT57VGVzdEZpZWxkMn0sCiAgICAnVmFsdWUyJywKICAgICJEeW5hbWljRmllbGRzIC0gVGVzdEZpZWxkMiB2YWx1ZSBtYXRjaGVzIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDIxOiBEeW5hbWljRmllbGRzIC0gVXBkYXRlIHZpYSBTY2hlZHVsZXJVcGRhdGUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJERGVXBkYXRlU3VjY2VzcyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlclVwZGF0ZSgKICAgIFNjaGVkdWxlcklEICAgID0+ICRERlNjaGVkdWxlcklELAogICAgTmFtZSAgICAgICAgICAgPT4gJERGU2NoZWR1bGV7TmFtZX0sCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdEeW5hbWljRmllbGQgVGVzdCBVcGRhdGVkJywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdVcGRhdGVkLicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgIHRpbWUgICAgID0+ICcwOTowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ0V1cm9wZS9CZXJsaW4nLAogICAgfSwKICAgIEVuZFR5cGUgICAgICAgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgIER5bmFtaWNGaWVsZHMgPT4gewogICAgICAgIFRlc3RGaWVsZDEgPT4gJ1VwZGF0ZWRWYWx1ZTEnLAogICAgICAgIFRlc3RGaWVsZDMgPT4gJ05ld0ZpZWxkJywKICAgIH0sCik7CgokU2VsZi0+VHJ1ZSgKICAgICRERlVwZGF0ZVN1Y2Nlc3MsCiAgICAiRHluYW1pY0ZpZWxkcyAtIFNjaGVkdWxlclVwZGF0ZSB3aXRoIG5ldyBEeW5hbWljRmllbGRzIiwKKTsKCm15ICVERlVwZGF0ZWRTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgIFNjaGVkdWxlcklEID0+ICRERlNjaGVkdWxlcklELAopOwoKJFNlbGYtPklzKAogICAgJERGVXBkYXRlZFNjaGVkdWxle0R5bmFtaWNGaWVsZHN9LT57VGVzdEZpZWxkMX0sCiAgICAnVXBkYXRlZFZhbHVlMScsCiAgICAiRHluYW1pY0ZpZWxkcyAtIFRlc3RGaWVsZDEgdXBkYXRlZCBjb3JyZWN0bHkiLAopOwoKJFNlbGYtPklzKAogICAgJERGVXBkYXRlZFNjaGVkdWxle0R5bmFtaWNGaWVsZHN9LT57VGVzdEZpZWxkM30sCiAgICAnTmV3RmllbGQnLAogICAgIkR5bmFtaWNGaWVsZHMgLSBUZXN0RmllbGQzIGFkZGVkIGNvcnJlY3RseSIsCik7CgojIFRlc3RGaWVsZDIgc2hvdWxkIGJlIGdvbmUgYWZ0ZXIgdXBkYXRlIChyZXBsYWNlZCBieSBuZXcgc2V0KQpteSAkSGFzVGVzdEZpZWxkMiA9IGV4aXN0cyAkREZVcGRhdGVkU2NoZWR1bGV7RHluYW1pY0ZpZWxkc30tPntUZXN0RmllbGQyfSA/IDEgOiAwOwokU2VsZi0+RmFsc2UoCiAgICAkSGFzVGVzdEZpZWxkMiwKICAgICJEeW5hbWljRmllbGRzIC0gVGVzdEZpZWxkMiByZW1vdmVkIGFmdGVyIHVwZGF0ZSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAyMjogRHluYW1pY0ZpZWxkcyAtIEFycmF5IHZhbHVlcyAoSlNPTiBzdG9yYWdlKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkREZBcnJheVNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ0RGQXJyYXlUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdEeW5hbWljRmllbGQgQXJyYXkgVGVzdCcsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnVGVzdGluZyBhcnJheSBEeW5hbWljRmllbGRzLicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgIHRpbWUgICAgID0+ICcwOTowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ0V1cm9wZS9CZXJsaW4nLAogICAgfSwKICAgIEVuZFR5cGUgICAgICAgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgIER5bmFtaWNGaWVsZHMgPT4gewogICAgICAgIE11bHRpU2VsZWN0ID0+IFsnT3B0aW9uMScsICdPcHRpb24yJywgJ09wdGlvbjMnXSwKICAgIH0sCik7CgokU2VsZi0+VHJ1ZSgKICAgICRERkFycmF5U2NoZWR1bGVySUQsCiAgICAiRHluYW1pY0ZpZWxkcyBBcnJheSAtIENyZWF0ZWQgc2NoZWR1bGUgd2l0aCBhcnJheSBEeW5hbWljRmllbGQiLAopOwoKbXkgJURGQXJyYXlTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgIFNjaGVkdWxlcklEID0+ICRERkFycmF5U2NoZWR1bGVySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzQXJyYXlSZWZXaXRoRGF0YSgkREZBcnJheVNjaGVkdWxle0R5bmFtaWNGaWVsZHN9LT57TXVsdGlTZWxlY3R9KSwKICAgICJEeW5hbWljRmllbGRzIEFycmF5IC0gTXVsdGlTZWxlY3QgaXMgYW4gYXJyYXlyZWYiLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEB7ICRERkFycmF5U2NoZWR1bGV7RHluYW1pY0ZpZWxkc30tPntNdWx0aVNlbGVjdH0gfSwKICAgIDMsCiAgICAiRHluYW1pY0ZpZWxkcyBBcnJheSAtIE11bHRpU2VsZWN0IGhhcyAzIGVudHJpZXMiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMjM6IENoZWNrbGlzdFRlbXBsYXRlcyAtIFNldCB2aWEgU2NoZWR1bGVyQWRkIGFuZCByZXRyaWV2ZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ0xTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICdDTFRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgICAgICAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgICAgICAgPT4gJ0NoZWNrbGlzdCBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgICAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdUZXN0aW5nIENoZWNrbGlzdHMuJywKICAgIFNjaGVkdWxlVHlwZSAgICAgICAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyAgICAgICA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzA5OjAwJywKICAgICAgICB0aW1lem9uZSA9PiAnRXVyb3BlL0JlcmxpbicsCiAgICB9LAogICAgRW5kVHlwZSAgICAgICAgICAgICAgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgICAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAxLAogICAgQ2hlY2tsaXN0VGVtcGxhdGVJRHMgPT4gWzEwLCAyMCwgMzBdLAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ0xTY2hlZHVsZXJJRCwKICAgICJDaGVja2xpc3RUZW1wbGF0ZXMgLSBDcmVhdGVkIHNjaGVkdWxlIHdpdGggQ2hlY2tsaXN0VGVtcGxhdGVJRHMiLAopOwoKbXkgJUNMU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkQ0xTY2hlZHVsZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNBcnJheVJlZldpdGhEYXRhKCRDTFNjaGVkdWxle0NoZWNrbGlzdFRlbXBsYXRlSURzfSksCiAgICAiQ2hlY2tsaXN0VGVtcGxhdGVzIC0gU2NoZWR1bGVyR2V0IHJldHVybnMgQ2hlY2tsaXN0VGVtcGxhdGVJRHMiLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEB7ICRDTFNjaGVkdWxle0NoZWNrbGlzdFRlbXBsYXRlSURzfSB9LAogICAgMywKICAgICJDaGVja2xpc3RUZW1wbGF0ZXMgLSAzIHRlbXBsYXRlcyBzdG9yZWQiLAopOwoKJFNlbGYtPklzKAogICAgJENMU2NoZWR1bGV7Q2hlY2tsaXN0VGVtcGxhdGVJRHN9LT5bMF0sCiAgICAxMCwKICAgICJDaGVja2xpc3RUZW1wbGF0ZXMgLSBGaXJzdCB0ZW1wbGF0ZSBJRCBtYXRjaGVzIChzb3J0IG9yZGVyIHByZXNlcnZlZCkiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMjQ6IENoZWNrbGlzdFRlbXBsYXRlcyAtIFVwZGF0ZSByZXBsYWNlcyBvbGQgc2V0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlclVwZGF0ZSgKICAgIFNjaGVkdWxlcklEICAgICAgICAgID0+ICRDTFNjaGVkdWxlcklELAogICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJENMU2NoZWR1bGV7TmFtZX0sCiAgICBTY2hlZHVsZU1vZGUgICAgICAgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgICAgICAgID0+ICdDaGVja2xpc3QgVGVzdCBVcGRhdGVkJywKICAgIFF1ZXVlSUQgICAgICAgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgICAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdVcGRhdGVkLicsCiAgICBTY2hlZHVsZVR5cGUgICAgICAgICA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgICAgICAgPT4gewogICAgICAgIHRpbWUgICAgID0+ICcwOTowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ0V1cm9wZS9CZXJsaW4nLAogICAgfSwKICAgIEVuZFR5cGUgICAgICAgICAgICAgID0+ICduZXZlcicsCiAgICBWYWxpZElEICAgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgIENoZWNrbGlzdFRlbXBsYXRlSURzID0+IFs0MCwgNTBdLAopOwoKbXkgJUNMVXBkYXRlZFNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgU2NoZWR1bGVySUQgPT4gJENMU2NoZWR1bGVySUQsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQHsgJENMVXBkYXRlZFNjaGVkdWxle0NoZWNrbGlzdFRlbXBsYXRlSURzfSB9LAogICAgMiwKICAgICJDaGVja2xpc3RUZW1wbGF0ZXMgLSBVcGRhdGUgcmVwbGFjZWQgb2xkIHNldCAobm93IDIgdGVtcGxhdGVzKSIsCik7CgokU2VsZi0+SXMoCiAgICAkQ0xVcGRhdGVkU2NoZWR1bGV7Q2hlY2tsaXN0VGVtcGxhdGVJRHN9LT5bMF0sCiAgICA0MCwKICAgICJDaGVja2xpc3RUZW1wbGF0ZXMgLSBVcGRhdGVkIGZpcnN0IHRlbXBsYXRlIElEIG1hdGNoZXMiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMjU6IEVuZCBvcHRpb25zIC0gTWF4IG9jY3VycmVuY2VzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRNYXhPY2NTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdNYXhPY2NUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdNYXggT2NjdXJyZW5jZXMgVGVzdCcsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnVGVzdGluZyBtYXggb2NjdXJyZW5jZXMuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzAwOjAxJywKICAgICAgICB0aW1lem9uZSA9PiAnVVRDJywKICAgIH0sCiAgICBFbmRUeXBlICAgICAgICA9PiAnb2NjdXJyZW5jZXMnLAogICAgTWF4T2NjdXJyZW5jZXMgPT4gMiwKICAgIFZhbGlkSUQgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkTWF4T2NjU2NoZWR1bGVySUQsCiAgICAiRW5kT3B0aW9ucyAtIENyZWF0ZWQgc2NoZWR1bGUgd2l0aCBNYXhPY2N1cnJlbmNlcz0yIiwKKTsKCiMgRXhlY3V0ZSB0d2ljZQpteSAkTWF4T2NjVGlja2V0MSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCA9PiAkTWF4T2NjU2NoZWR1bGVySUQsCiAgICBVc2VySUQgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkTWF4T2NjVGlja2V0MSwKICAgICJFbmRPcHRpb25zIC0gRmlyc3QgZXhlY3V0aW9uIHN1Y2NlZWRlZCIsCik7CgpteSAkTWF4T2NjVGlja2V0MiA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCA9PiAkTWF4T2NjU2NoZWR1bGVySUQsCiAgICBVc2VySUQgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkTWF4T2NjVGlja2V0MiwKICAgICJFbmRPcHRpb25zIC0gU2Vjb25kIGV4ZWN1dGlvbiBzdWNjZWVkZWQiLAopOwoKIyBUaGlyZCBleGVjdXRpb24gc2hvdWxkIGZhaWwgKG1heCByZWFjaGVkKQpteSAkTWF4T2NjVGlja2V0MyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCA9PiAkTWF4T2NjU2NoZWR1bGVySUQsCiAgICBVc2VySUQgICAgICA9PiAxLAopOwoKJFNlbGYtPkZhbHNlKAogICAgJE1heE9jY1RpY2tldDMsCiAgICAiRW5kT3B0aW9ucyAtIFRoaXJkIGV4ZWN1dGlvbiBibG9ja2VkIChNYXhPY2N1cnJlbmNlcz0yIHJlYWNoZWQpIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDI2OiBFbmQgb3B0aW9ucyAtIEVuZCBkYXRlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRFbmREYXRlU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAnRW5kRGF0ZVRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ0VuZCBEYXRlIFRlc3QnLAogICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICBQcmlvcml0eUlEICAgICA9PiAzLAogICAgQm9keSAgICAgICAgICAgPT4gJ1Rlc3RpbmcgZW5kIGRhdGUuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzAwOjAxJywKICAgICAgICB0aW1lem9uZSA9PiAnVVRDJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICdkYXRlJywKICAgIEVuZERhdGUgPT4gJzIwMjAtMDEtMDEnLCAgICAjIERhdGUgaW4gdGhlIHBhc3QKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEVuZERhdGVTY2hlZHVsZXJJRCwKICAgICJFbmRPcHRpb25zIC0gQ3JlYXRlZCBzY2hlZHVsZSB3aXRoIHBhc3QgRW5kRGF0ZSIsCik7CgpteSAkRW5kRGF0ZVRpY2tldCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCA9PiAkRW5kRGF0ZVNjaGVkdWxlcklELAogICAgVXNlcklEICAgICAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRFbmREYXRlVGlja2V0LAogICAgIkVuZE9wdGlvbnMgLSBFeGVjdXRpb24gYmxvY2tlZCAoRW5kRGF0ZSBpbiB0aGUgcGFzdCkiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMjc6IEdldFNjaGVkdWxlcnNXaXRoRXJyb3JzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgV2UgbmVlZCBhIHNjaGVkdWxlIHdpdGggYW4gZXJyb3IgLSB1c2UgX1NldFNjaGVkdWxlckVycm9yIGRpcmVjdGx5CiMgRmlyc3QgZ2V0IHRoZSBiYXNlIHN0YXRlCm15IEBFcnJvcnNCZWZvcmUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5HZXRTY2hlZHVsZXJzV2l0aEVycm9ycygpOwpteSAkRXJyb3JDb3VudEJlZm9yZSA9IHNjYWxhciBARXJyb3JzQmVmb3JlOwoKIyBDcmVhdGUgYSBzY2hlZHVsZSBhbmQgc2V0IGFuIGVycm9yIG9uIGl0Cm15ICRFcnJvclNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ0Vycm9yVGVzdCcgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpLAogICAgU2NoZWR1bGVNb2RlICAgPT4gJ3RpY2tldCcsCiAgICBUaXRsZSAgICAgICAgICA9PiAnRXJyb3IgVGVzdCcsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnVGVzdGluZyBlcnJvcnMuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzA5OjAwJywKICAgICAgICB0aW1lem9uZSA9PiAnRXVyb3BlL0JlcmxpbicsCiAgICB9LAogICAgRW5kVHlwZSA9PiAnbmV2ZXInLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRXJyb3JTY2hlZHVsZXJJRCwKICAgICJHZXRTY2hlZHVsZXJzV2l0aEVycm9ycygpIHNldHVwIC0gQ3JlYXRlZCBzY2hlZHVsZSIsCik7CgojIFNpbXVsYXRlIGFuIGVycm9yIGJ5IGV4ZWN1dGluZyB3aXRoIGFuIGludmFsaWQgcXVldWUgKG1hbmlwdWxhdGUgYWZ0ZXIgY3JlYXRpb24pCiMgSW5zdGVhZCwgbGV0J3MgdXNlIGEgZGlyZWN0IERCIGFwcHJvYWNoIHZpYSBfU2V0U2NoZWR1bGVyRXJyb3IgaWYgYWNjZXNzaWJsZSwKIyBvciBleGVjdXRlIHdpdGggYmFkIGRhdGEuIFdlJ2xsIHVzZSB0aGUgcHVibGljIEFQSSBieSBjcmVhdGluZyBhIHNjaGVkdWxlCiMgcG9pbnRpbmcgdG8gYSBub24tZXhpc3RlbnQgcXVldWUuCm15ICRCYWRRdWV1ZVNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ0JhZFF1ZXVlVGVzdCcgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpLAogICAgU2NoZWR1bGVNb2RlICAgPT4gJ3RpY2tldCcsCiAgICBUaXRsZSAgICAgICAgICA9PiAnQmFkIFF1ZXVlIFRlc3QnLAogICAgUXVldWVJRCAgICAgICAgPT4gOTk5OTk5LCAgICAjIE5vbi1leGlzdGVudCBxdWV1ZQogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdUaGlzIHNob3VsZCBmYWlsLicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgIHRpbWUgICAgID0+ICcwMDowMScsCiAgICAgICAgdGltZXpvbmUgPT4gJ1VUQycsCiAgICB9LAogICAgRW5kVHlwZSA9PiAnbmV2ZXInLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKaWYgKCRCYWRRdWV1ZVNjaGVkdWxlcklEKSB7CiAgICBteSAkQmFkVGlja2V0ID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+RXhlY3V0ZVNjaGVkdWxlcigKICAgICAgICBTY2hlZHVsZXJJRCA9PiAkQmFkUXVldWVTY2hlZHVsZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCiAgICAjIENoZWNrIGlmIGVycm9yIHdhcyByZWNvcmRlZCAod2hldGhlciB0aWNrZXQgY3JlYXRpb24gZmFpbGVkIG9yIG5vdCkKICAgIG15ICVCYWRTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgICAgICBTY2hlZHVsZXJJRCA9PiAkQmFkUXVldWVTY2hlZHVsZXJJRCwKICAgICk7CgogICAgIyBJZiB0aWNrZXQgY3JlYXRpb24gZmFpbGVkLCB0aGVyZSBzaG91bGQgYmUgYW4gZXJyb3IKICAgIGlmICggISRCYWRUaWNrZXQgJiYgJEJhZFNjaGVkdWxle0xhc3RFcnJvcn0gKSB7CiAgICAgICAgbXkgQEVycm9yc0FmdGVyID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+R2V0U2NoZWR1bGVyc1dpdGhFcnJvcnMoKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIHNjYWxhciBARXJyb3JzQWZ0ZXIgPiAkRXJyb3JDb3VudEJlZm9yZSwKICAgICAgICAgICAgIkdldFNjaGVkdWxlcnNXaXRoRXJyb3JzKCkgLSBFcnJvciBjb3VudCBpbmNyZWFzZWQgYWZ0ZXIgZmFpbGVkIGV4ZWN1dGlvbiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBGaW5kIG91ciBlcnJvciBzY2hlZHVsZSBpbiB0aGUgbGlzdAogICAgICAgIG15ICRGb3VuZEVycm9yID0gMDsKICAgICAgICBmb3IgbXkgJEVycm9yRW50cnkgKEBFcnJvcnNBZnRlcikgewogICAgICAgICAgICBpZiAoICRFcnJvckVudHJ5LT57U2NoZWR1bGVySUR9ID09ICRCYWRRdWV1ZVNjaGVkdWxlcklEICkgewogICAgICAgICAgICAgICAgJEZvdW5kRXJyb3IgPSAxOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRGb3VuZEVycm9yLAogICAgICAgICAgICAiR2V0U2NoZWR1bGVyc1dpdGhFcnJvcnMoKSAtIEZhaWxlZCBzY2hlZHVsZSBhcHBlYXJzIGluIGVycm9yIGxpc3QiLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIElmIFpudW55IGFjY2VwdGVkIHRoZSBiYWQgcXVldWUsIGF0IGxlYXN0IHZlcmlmeSB0aGUgbWV0aG9kIHdvcmtzCiAgICAgICAgbXkgQEVycm9yc0FmdGVyID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+R2V0U2NoZWR1bGVyc1dpdGhFcnJvcnMoKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIkdldFNjaGVkdWxlcnNXaXRoRXJyb3JzKCkgLSBSZXR1cm5zIHdpdGhvdXQgZXJyb3IgKGJhZCBxdWV1ZSB3YXMgYWNjZXB0ZWQgYnkgWm51bnkpIiwKICAgICAgICApOwogICAgfQp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAyODogUmVwbGFjZVBsYWNlaG9sZGVycyAtIEZ1bGwgcGxhY2Vob2xkZXIgY292ZXJhZ2UKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFNpbVRpbWUgPSAnMjAyNi0wMy0xNSAxNDozMDowMCc7CgpteSAkRnVsbFBsYWNlaG9sZGVyVGV4dCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlJlcGxhY2VQbGFjZWhvbGRlcnMoCiAgICBUZXh0ICAgICAgICAgPT4gJ1tEQVRFXXxbREFURV9ERV18W1RJTUVdfFtEQVRFVElNRV18W1lFQVJdfFtNT05USF18W01PTlRIX05BTUVdfFtNT05USF9OQU1FX0RFXXxbREFZXXxbV0VFS0RBWV18W1dFRUtEQVlfREVdfFtXRUVLXXxbUVVBUlRFUl0nLAogICAgU2ltdWxhdGVUaW1lID0+ICRTaW1UaW1lLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRnVsbFBsYWNlaG9sZGVyVGV4dCwKICAgICJSZXBsYWNlUGxhY2Vob2xkZXJzKCkgZnVsbCAtIFJldHVybnMgdGV4dCIsCik7CgojIFtEQVRFXSBzaG91bGQgYmUgMjAyNi0wMy0xNQpteSAkQ29udGFpbnNEYXRlID0gKCAkRnVsbFBsYWNlaG9sZGVyVGV4dCA9fiAvMjAyNi0wMy0xNS8gKSA/IDEgOiAwOwokU2VsZi0+VHJ1ZSgKICAgICRDb250YWluc0RhdGUsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBbREFURV0gcmVzb2x2ZWQgdG8gMjAyNi0wMy0xNSIsCik7CgojIFtEQVRFX0RFXSBzaG91bGQgYmUgMTUuMDMuMjAyNgpteSAkQ29udGFpbnNEYXRlREUgPSAoICRGdWxsUGxhY2Vob2xkZXJUZXh0ID1+IC8xNVwuMDNcLjIwMjYvICkgPyAxIDogMDsKJFNlbGYtPlRydWUoCiAgICAkQ29udGFpbnNEYXRlREUsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBbREFURV9ERV0gcmVzb2x2ZWQgdG8gMTUuMDMuMjAyNiIsCik7CgojIFtUSU1FXSBzaG91bGQgYmUgMTQ6MzAKbXkgJENvbnRhaW5zVGltZSA9ICggJEZ1bGxQbGFjZWhvbGRlclRleHQgPX4gLzE0OjMwLyApID8gMSA6IDA7CiRTZWxmLT5UcnVlKAogICAgJENvbnRhaW5zVGltZSwKICAgICJSZXBsYWNlUGxhY2Vob2xkZXJzKCkgZnVsbCAtIFtUSU1FXSByZXNvbHZlZCB0byAxNDozMCIsCik7CgojIFtZRUFSXSBzaG91bGQgYmUgMjAyNgpteSAkQ29udGFpbnNZZWFyID0gKCAkRnVsbFBsYWNlaG9sZGVyVGV4dCA9fiAvMjAyNi8gKSA/IDEgOiAwOwokU2VsZi0+VHJ1ZSgKICAgICRDb250YWluc1llYXIsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBbWUVBUl0gcmVzb2x2ZWQgdG8gMjAyNiIsCik7CgojIFtNT05USF0gc2hvdWxkIGJlIDAzCm15ICRDb250YWluc01vbnRoID0gKCAkRnVsbFBsYWNlaG9sZGVyVGV4dCA9fiAvXHwwM1x8LyApID8gMSA6IDA7CiRTZWxmLT5UcnVlKAogICAgJENvbnRhaW5zTW9udGgsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBbTU9OVEhdIHJlc29sdmVkIHRvIDAzIiwKKTsKCiMgW01PTlRIX05BTUVdIHNob3VsZCBiZSBNYXJjaApteSAkQ29udGFpbnNNb250aE5hbWUgPSAoICRGdWxsUGxhY2Vob2xkZXJUZXh0ID1+IC9NYXJjaC8gKSA/IDEgOiAwOwokU2VsZi0+VHJ1ZSgKICAgICRDb250YWluc01vbnRoTmFtZSwKICAgICJSZXBsYWNlUGxhY2Vob2xkZXJzKCkgZnVsbCAtIFtNT05USF9OQU1FXSByZXNvbHZlZCB0byBNYXJjaCIsCik7CgojIFtNT05USF9OQU1FX0RFXSBzaG91bGQgYmUgTWFlcnogKEFTQ0lJLCBubyB1bWxhdXRzKQpteSAkQ29udGFpbnNNb250aE5hbWVERSA9ICggJEZ1bGxQbGFjZWhvbGRlclRleHQgPX4gL01hZXJ6LyApID8gMSA6IDA7CiRTZWxmLT5UcnVlKAogICAgJENvbnRhaW5zTW9udGhOYW1lREUsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBbTU9OVEhfTkFNRV9ERV0gcmVzb2x2ZWQgdG8gTWFlcnoiLAopOwoKIyBbREFZXSBzaG91bGQgYmUgMTUKbXkgJENvbnRhaW5zRGF5ID0gKCAkRnVsbFBsYWNlaG9sZGVyVGV4dCA9fiAvXHwxNVx8LyApID8gMSA6IDA7CiRTZWxmLT5UcnVlKAogICAgJENvbnRhaW5zRGF5LAogICAgIlJlcGxhY2VQbGFjZWhvbGRlcnMoKSBmdWxsIC0gW0RBWV0gcmVzb2x2ZWQgdG8gMTUiLAopOwoKIyBbV0VFS0RBWV0gc2hvdWxkIGJlIFN1bmRheSAoMjAyNi0wMy0xNSBpcyBhIFN1bmRheSkKbXkgJENvbnRhaW5zV2Vla2RheSA9ICggJEZ1bGxQbGFjZWhvbGRlclRleHQgPX4gL1N1bmRheS8gKSA/IDEgOiAwOwokU2VsZi0+VHJ1ZSgKICAgICRDb250YWluc1dlZWtkYXksCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBbV0VFS0RBWV0gcmVzb2x2ZWQgdG8gU3VuZGF5IiwKKTsKCiMgW1dFRUtEQVlfREVdIHNob3VsZCBiZSBTb25udGFnCm15ICRDb250YWluc1dlZWtkYXlERSA9ICggJEZ1bGxQbGFjZWhvbGRlclRleHQgPX4gL1Nvbm50YWcvICkgPyAxIDogMDsKJFNlbGYtPlRydWUoCiAgICAkQ29udGFpbnNXZWVrZGF5REUsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBbV0VFS0RBWV9ERV0gcmVzb2x2ZWQgdG8gU29ubnRhZyIsCik7CgojIFtRVUFSVEVSXSBzaG91bGQgYmUgUTEKbXkgJENvbnRhaW5zUXVhcnRlciA9ICggJEZ1bGxQbGFjZWhvbGRlclRleHQgPX4gL1ExLyApID8gMSA6IDA7CiRTZWxmLT5UcnVlKAogICAgJENvbnRhaW5zUXVhcnRlciwKICAgICJSZXBsYWNlUGxhY2Vob2xkZXJzKCkgZnVsbCAtIFtRVUFSVEVSXSByZXNvbHZlZCB0byBRMSIsCik7CgojIE5vIHVucmVzb2x2ZWQgcGxhY2Vob2xkZXJzIHNob3VsZCByZW1haW4KbXkgJEhhc1VucmVzb2x2ZWQgPSAoICRGdWxsUGxhY2Vob2xkZXJUZXh0ID1+IC9cWyg/OkRBVEV8VElNRXxEQVRFVElNRXxZRUFSfE1PTlRIfERBWXxXRUVLREFZfFdFRUt8UVVBUlRFUikvICkgPyAxIDogMDsKJFNlbGYtPkZhbHNlKAogICAgJEhhc1VucmVzb2x2ZWQsCiAgICAiUmVwbGFjZVBsYWNlaG9sZGVycygpIGZ1bGwgLSBObyB1bnJlc29sdmVkIHBsYWNlaG9sZGVycyByZW1haW4iLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMjk6IENhbGN1bGF0ZU5leHRFeGVjdXRpb24gLSBZZWFybHkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFllYXJseVNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgPT4gJ1llYXJseVRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ1llYXJseSBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdZZWFybHkgdGVzdCBib2R5LicsCiAgICBTY2hlZHVsZVR5cGUgICA9PiAneWVhcmx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICBtb250aCAgICA9PiA2LAogICAgICAgIGRheSAgICAgID0+IDE1LAogICAgICAgIHRpbWUgICAgID0+ICcxMDowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ0V1cm9wZS9CZXJsaW4nLAogICAgfSwKICAgIEVuZFR5cGUgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFllYXJseVNjaGVkdWxlcklELAogICAgIlNjaGVkdWxlckFkZCgpIC0gQ3JlYXRlZCB5ZWFybHkgc2NoZWR1bGUiLAopOwoKbXkgJVllYXJseVNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgU2NoZWR1bGVySUQgPT4gJFllYXJseVNjaGVkdWxlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkWWVhcmx5U2NoZWR1bGV7TmV4dEV4ZWN1dGlvbn0sCiAgICAiQ2FsY3VsYXRlTmV4dEV4ZWN1dGlvbigpIC0gWWVhcmx5IHNjaGVkdWxlIGhhcyBOZXh0RXhlY3V0aW9uIHNldDogJFllYXJseVNjaGVkdWxle05leHRFeGVjdXRpb259IiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDMwOiBDYWxjdWxhdGVOZXh0RXhlY3V0aW9uIC0gTW9udGhseSB3ZWVrZGF5IHdpdGggb2Zmc2V0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRPZmZzZXRTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdPZmZzZXRUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdNb250aGx5IFdlZWtkYXkgT2Zmc2V0IFRlc3QnLAogICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICBQcmlvcml0eUlEICAgICA9PiAzLAogICAgQm9keSAgICAgICAgICAgPT4gJ09mZnNldCB0ZXN0IGJvZHkuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdtb250aGx5X3dlZWtkYXlfb2Zmc2V0JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICBudGggICAgICA9PiAtMSwgICAgICAgIyBsYXN0CiAgICAgICAgd2Vla2RheSAgPT4gJ2ZyaScsICAgICMgRnJpZGF5CiAgICAgICAgb2Zmc2V0ICAgPT4gMywgICAgICAgICMgMyBkYXlzIGFmdGVyCiAgICAgICAgdGltZSAgICAgPT4gJzA4OjAwJywKICAgICAgICB0aW1lem9uZSA9PiAnRXVyb3BlL0JlcmxpbicsCiAgICB9LAogICAgRW5kVHlwZSA9PiAnbmV2ZXInLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkT2Zmc2V0U2NoZWR1bGVySUQsCiAgICAiU2NoZWR1bGVyQWRkKCkgLSBDcmVhdGVkIG1vbnRobHlfd2Vla2RheV9vZmZzZXQgc2NoZWR1bGUiLAopOwoKbXkgJU9mZnNldFNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgU2NoZWR1bGVySUQgPT4gJE9mZnNldFNjaGVkdWxlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICAkT2Zmc2V0U2NoZWR1bGV7TmV4dEV4ZWN1dGlvbn0sCiAgICAiQ2FsY3VsYXRlTmV4dEV4ZWN1dGlvbigpIC0gbW9udGhseV93ZWVrZGF5X29mZnNldCBoYXMgTmV4dEV4ZWN1dGlvbiBzZXQ6ICRPZmZzZXRTY2hlZHVsZXtOZXh0RXhlY3V0aW9ufSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAzMTogRXhlY3V0ZVBlbmRpbmdTY2hlZHVsZXMgLSBCYXRjaCBleGVjdXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBDcmVhdGUgdHdvIHNjaGVkdWxlcyB3aXRoIG5leHRfZXhlY3V0aW9uIGluIHRoZSBwYXN0ICh0byBiZSBwZW5kaW5nKQpteSAkUGVuZGluZ1NjaGVkdWxlcklEMSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdQZW5kaW5nVGVzdDFfJyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdQZW5kaW5nIFRlc3QgMScsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnUGVuZGluZyB0ZXN0IDEuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzAwOjAxJywKICAgICAgICB0aW1lem9uZSA9PiAnVVRDJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgpteSAkUGVuZGluZ1NjaGVkdWxlcklEMiA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdQZW5kaW5nVGVzdDJfJyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdQZW5kaW5nIFRlc3QgMicsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnUGVuZGluZyB0ZXN0IDIuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzAwOjAxJywKICAgICAgICB0aW1lem9uZSA9PiAnVVRDJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRQZW5kaW5nU2NoZWR1bGVySUQxICYmICRQZW5kaW5nU2NoZWR1bGVySUQyLAogICAgIkV4ZWN1dGVQZW5kaW5nU2NoZWR1bGVzKCkgc2V0dXAgLSBDcmVhdGVkIDIgcGVuZGluZyBzY2hlZHVsZXMiLAopOwoKIyBFeGVjdXRlIHdpdGggYSBzaW11bGF0ZWQgdGltZSBmYXIgaW4gdGhlIGZ1dHVyZSB0byBlbnN1cmUgdGhleSBhcmUgZHVlCm15IEBQZW5kaW5nUmVzdWx0cyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVQZW5kaW5nU2NoZWR1bGVzKAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBTaW11bGF0ZVRpbWUgPT4gJzIwOTktMDEtMDEgMTI6MDA6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICBzY2FsYXIgQFBlbmRpbmdSZXN1bHRzID4gMCwKICAgICJFeGVjdXRlUGVuZGluZ1NjaGVkdWxlcygpIC0gUmV0dXJuZWQgcmVzdWx0cyIsCik7CgojIENoZWNrIHRoYXQgcmVzdWx0cyBjb250YWluIG91ciBzY2hlZHVsZXMKbXkgJEZvdW5kUGVuZGluZzEgPSAwOwpteSAkRm91bmRQZW5kaW5nMiA9IDA7CmZvciBteSAkUmVzdWx0IChAUGVuZGluZ1Jlc3VsdHMpIHsKICAgIGlmICggJFJlc3VsdC0+e1NjaGVkdWxlcklEfSA9PSAkUGVuZGluZ1NjaGVkdWxlcklEMSApIHsKICAgICAgICAkRm91bmRQZW5kaW5nMSA9IDE7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXN1bHQtPntTdWNjZXNzfSwKICAgICAgICAgICAgIkV4ZWN1dGVQZW5kaW5nU2NoZWR1bGVzKCkgLSBTY2hlZHVsZSAxIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlc3VsdC0+e1RpY2tldElEfSwKICAgICAgICAgICAgIkV4ZWN1dGVQZW5kaW5nU2NoZWR1bGVzKCkgLSBTY2hlZHVsZSAxIGNyZWF0ZWQgdGlja2V0ICRSZXN1bHQtPntUaWNrZXRJRH0iLAogICAgICAgICk7CiAgICB9CiAgICBpZiAoICRSZXN1bHQtPntTY2hlZHVsZXJJRH0gPT0gJFBlbmRpbmdTY2hlZHVsZXJJRDIgKSB7CiAgICAgICAgJEZvdW5kUGVuZGluZzIgPSAxOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkUmVzdWx0LT57U3VjY2Vzc30sCiAgICAgICAgICAgICJFeGVjdXRlUGVuZGluZ1NjaGVkdWxlcygpIC0gU2NoZWR1bGUgMiBleGVjdXRlZCBzdWNjZXNzZnVsbHkiLAogICAgICAgICk7CiAgICB9Cn0KCiRTZWxmLT5UcnVlKAogICAgJEZvdW5kUGVuZGluZzEsCiAgICAiRXhlY3V0ZVBlbmRpbmdTY2hlZHVsZXMoKSAtIFNjaGVkdWxlIDEgd2FzIGluIHJlc3VsdHMiLAopOwoKJFNlbGYtPlRydWUoCiAgICAkRm91bmRQZW5kaW5nMiwKICAgICJFeGVjdXRlUGVuZGluZ1NjaGVkdWxlcygpIC0gU2NoZWR1bGUgMiB3YXMgaW4gcmVzdWx0cyIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAzMjogRXhlY3V0ZVNjaGVkdWxlciB3aXRoIFNpbXVsYXRlVGltZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkU2ltU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAnU2ltVGltZVRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ1NpbVRpbWUgW0RBVEVdIFtXRUVLREFZXScsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnQ3JlYXRlZCBvbiBbREFURV9ERV0gKFtXRUVLREFZX0RFXSkuJywKICAgIFNjaGVkdWxlVHlwZSAgID0+ICdkYWlseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgdGltZSAgICAgPT4gJzEwOjAwJywKICAgICAgICB0aW1lem9uZSA9PiAnVVRDJywKICAgIH0sCiAgICBFbmRUeXBlID0+ICduZXZlcicsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRTaW1TY2hlZHVsZXJJRCwKICAgICJTaW11bGF0ZVRpbWUgc2V0dXAgLSBDcmVhdGVkIHNjaGVkdWxlIiwKKTsKCm15ICRTaW1UaWNrZXRJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCAgPT4gJFNpbVNjaGVkdWxlcklELAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBTaW11bGF0ZVRpbWUgPT4gJzIwMjYtMTItMjUgMTA6MDA6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkU2ltVGlja2V0SUQsCiAgICAiU2ltdWxhdGVUaW1lIC0gQ3JlYXRlZCB0aWNrZXQgd2l0aCBzaW11bGF0ZWQgdGltZSIsCik7CgojIFZlcmlmeSBwbGFjZWhvbGRlcnMgd2VyZSByZXBsYWNlZCB3aXRoIHNpbXVsYXRlZCBkYXRlCm15ICVTaW1UaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkU2ltVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKbXkgJFRpdGxlSGFzU2ltRGF0ZSA9ICggJFNpbVRpY2tldHtUaXRsZX0gPX4gLzIwMjYtMTItMjUvICkgPyAxIDogMDsKJFNlbGYtPlRydWUoCiAgICAkVGl0bGVIYXNTaW1EYXRlLAogICAgIlNpbXVsYXRlVGltZSAtIFRpY2tldCB0aXRsZSBjb250YWlucyBzaW11bGF0ZWQgZGF0ZSAyMDI2LTEyLTI1IiwKKTsKCm15ICRUaXRsZUhhc1dlZWtkYXkgPSAoICRTaW1UaWNrZXR7VGl0bGV9ID1+IC9GcmlkYXkvICkgPyAxIDogMDsKJFNlbGYtPlRydWUoCiAgICAkVGl0bGVIYXNXZWVrZGF5LAogICAgIlNpbXVsYXRlVGltZSAtIFRpY2tldCB0aXRsZSBjb250YWlucyB3ZWVrZGF5IEZyaWRheSAoMjAyNi0xMi0yNSkiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMzM6IFNjaGVkdWxlckRlbGV0ZSAtIENhc2NhZGluZyBkZWxldGUgb2YgRHluYW1pY0ZpZWxkcyBhbmQgQ2hlY2tsaXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ2FzY2FkZVNjaGVkdWxlcklEID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyQWRkKAogICAgTmFtZSAgICAgICAgICAgICAgICAgPT4gJ0Nhc2NhZGVUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICAgICAgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgICAgICAgID0+ICdDYXNjYWRlIERlbGV0ZSBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgICAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdUZXN0aW5nIGNhc2NhZGUgZGVsZXRlLicsCiAgICBTY2hlZHVsZVR5cGUgICAgICAgICA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgICAgICAgPT4gewogICAgICAgIHRpbWUgICAgID0+ICcwOTowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ0V1cm9wZS9CZXJsaW4nLAogICAgfSwKICAgIEVuZFR5cGUgICAgICAgICAgICAgID0+ICduZXZlcicsCiAgICBWYWxpZElEICAgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgIER5bmFtaWNGaWVsZHMgICAgICAgID0+IHsgQ2FzY2FkZUZpZWxkID0+ICdDYXNjYWRlVmFsdWUnIH0sCiAgICBDaGVja2xpc3RUZW1wbGF0ZUlEcyA9PiBbMTAwLCAyMDBdLAopOwoKJFNlbGYtPlRydWUoCiAgICAkQ2FzY2FkZVNjaGVkdWxlcklELAogICAgIkNhc2NhZGVEZWxldGUgc2V0dXAgLSBDcmVhdGVkIHNjaGVkdWxlIHdpdGggRHluYW1pY0ZpZWxkcyBhbmQgQ2hlY2tsaXN0cyIsCik7CgojIFZlcmlmeSBkYXRhIGV4aXN0cyBiZWZvcmUgZGVsZXRlCm15ICVDYXNjYWRlU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkQ2FzY2FkZVNjaGVkdWxlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSgkQ2FzY2FkZVNjaGVkdWxle0R5bmFtaWNGaWVsZHN9KSwKICAgICJDYXNjYWRlRGVsZXRlIC0gRHluYW1pY0ZpZWxkcyBleGlzdCBiZWZvcmUgZGVsZXRlIiwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNBcnJheVJlZldpdGhEYXRhKCRDYXNjYWRlU2NoZWR1bGV7Q2hlY2tsaXN0VGVtcGxhdGVJRHN9KSwKICAgICJDYXNjYWRlRGVsZXRlIC0gQ2hlY2tsaXN0VGVtcGxhdGVJRHMgZXhpc3QgYmVmb3JlIGRlbGV0ZSIsCik7CgojIEV4ZWN1dGUgb25jZSB0byBjcmVhdGUgaGlzdG9yeQokVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5FeGVjdXRlU2NoZWR1bGVyKAogICAgU2NoZWR1bGVySUQgPT4gJENhc2NhZGVTY2hlZHVsZXJJRCwKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgpteSBAQ2FzY2FkZUhpc3RvcnkgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5IaXN0b3J5TGlzdCgKICAgIFNjaGVkdWxlcklEID0+ICRDYXNjYWRlU2NoZWR1bGVySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIHNjYWxhciBAQ2FzY2FkZUhpc3RvcnkgPiAwLAogICAgIkNhc2NhZGVEZWxldGUgLSBIaXN0b3J5IGV4aXN0cyBiZWZvcmUgZGVsZXRlIiwKKTsKCiMgTm93IGRlbGV0ZQpteSAkQ2FzY2FkZURlbGV0ZVN1Y2Nlc3MgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJEZWxldGUoCiAgICBTY2hlZHVsZXJJRCA9PiAkQ2FzY2FkZVNjaGVkdWxlcklELAogICAgVXNlcklEICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJENhc2NhZGVEZWxldGVTdWNjZXNzLAogICAgIkNhc2NhZGVEZWxldGUgLSBTY2hlZHVsZXJEZWxldGUgc3VjY2VlZGVkIiwKKTsKCiMgVmVyaWZ5IHNjaGVkdWxlIGlzIGdvbmUKbXkgJURlbGV0ZWRDYXNjYWRlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgU2NoZWR1bGVySUQgPT4gJENhc2NhZGVTY2hlZHVsZXJJRCwKKTsKCiRTZWxmLT5GYWxzZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKFwlRGVsZXRlZENhc2NhZGUpID8gMSA6IDAsCiAgICAiQ2FzY2FkZURlbGV0ZSAtIFNjaGVkdWxlIG5vIGxvbmdlciBleGlzdHMiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMzQ6IEZlYXR1cmUgZGV0ZWN0aW9uIC0gX0lzQ2hlY2tsaXN0QXZhaWxhYmxlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgSnVzdCB2ZXJpZnkgdGhlIG1ldGhvZCByZXR1cm5zIGEgZGVmaW5lZCB2YWx1ZSAoMCBvciAxKQpteSAkQ2hlY2tsaXN0QXZhaWxhYmxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+X0lzQ2hlY2tsaXN0QXZhaWxhYmxlKCk7CgokU2VsZi0+VHJ1ZSgKICAgIGRlZmluZWQgJENoZWNrbGlzdEF2YWlsYWJsZSwKICAgICJfSXNDaGVja2xpc3RBdmFpbGFibGUoKSAtIFJldHVybnMgYSBkZWZpbmVkIHZhbHVlOiAkQ2hlY2tsaXN0QXZhaWxhYmxlIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDM1OiBGZWF0dXJlIGRldGVjdGlvbiAtIF9Jc1Byb2Nlc3NNYW5hZ2VtZW50QXZhaWxhYmxlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRQcm9jZXNzQXZhaWxhYmxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+X0lzUHJvY2Vzc01hbmFnZW1lbnRBdmFpbGFibGUoKTsKCiRTZWxmLT5UcnVlKAogICAgZGVmaW5lZCAkUHJvY2Vzc0F2YWlsYWJsZSwKICAgICJfSXNQcm9jZXNzTWFuYWdlbWVudEF2YWlsYWJsZSgpIC0gUmV0dXJucyBhIGRlZmluZWQgdmFsdWU6ICRQcm9jZXNzQXZhaWxhYmxlIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZXN0IDM2OiBTY2hlZHVsZXJMaXN0IC0gRmlsdGVycwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIFRlc3Qgd2l0aCBWYWxpZElEIGZpbHRlcgpteSBAVmFsaWRTY2hlZHVsZXJMaXN0ID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyTGlzdCgKICAgIFVzZXJJRCAgPT4gMSwKICAgIFZhbGlkSUQgPT4gMSwKKTsKCiMgQWxsIHJldHVybmVkIGVudHJpZXMgc2hvdWxkIGhhdmUgVmFsaWRJRD0xCm15ICRBbGxWYWxpZCA9IDE7CmZvciBteSAkSXRlbSAoQFZhbGlkU2NoZWR1bGVyTGlzdCkgewogICAgaWYgKCAkSXRlbS0+e1ZhbGlkSUR9ICE9IDEgKSB7CiAgICAgICAgJEFsbFZhbGlkID0gMDsKICAgICAgICBsYXN0OwogICAgfQp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxWYWxpZCwKICAgICJTY2hlZHVsZXJMaXN0KCkgLSBWYWxpZElEPTEgZmlsdGVyIHJldHVybnMgb25seSB2YWxpZCBzY2hlZHVsZXMiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMzc6IE1vbnRobHkgRGF5IDMxIFNraXAgQmVoYXZpb3IKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJERheTMxU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAnRGF5MzFUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdEYXkgMzEgVGVzdCcsCiAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgIFByaW9yaXR5SUQgICAgID0+IDMsCiAgICBCb2R5ICAgICAgICAgICA9PiAnVGVzdGluZyBkYXkgMzEgc2tpcCBiZWhhdmlvci4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ21vbnRobHlfZGF5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICBkYXkgICAgICA9PiAzMSwKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdVVEMnLAogICAgfSwKICAgIEVuZFR5cGUgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJERheTMxU2NoZWR1bGVySUQsCiAgICAiTW9udGhseURheTMxIC0gQ3JlYXRlZCBzY2hlZHVsZSB3aXRoIGRheT0zMSIsCik7CgojIEdldCB0aGUgbmV4dCAxMiBleGVjdXRpb25zIHN0YXJ0aW5nIGZyb20gMjAyNi0wMS0wMSBieSB1c2luZyBHZXROZXh0RXhlY3V0aW9ucwojIFdlIG5lZWQgdG8gc2ltdWxhdGUgc3RhcnRpbmcgZnJvbSBKYW4gMSwgc28gd2Ugc2V0IExhc3RFeGVjdXRpb24gdG8ganVzdCBiZWZvcmUKbXkgQERheTMxRXhlY3V0aW9uczsKbXkgJERheTMxTGFzdEV4ZWM7CmZvciBteSAkaSAoIDEgLi4gMTIgKSB7CiAgICBteSAkTmV4dFRpbWVVVEMgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5DYWxjdWxhdGVOZXh0RXhlY3V0aW9uKAogICAgICAgIFNjaGVkdWxlVHlwZSAgID0+ICdtb250aGx5X2RheScsCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgICAgICBkYXkgICAgICA9PiAzMSwKICAgICAgICAgICAgdGltZSAgICAgPT4gJzA5OjAwJywKICAgICAgICAgICAgdGltZXpvbmUgPT4gJ1VUQycsCiAgICAgICAgfSwKICAgICAgICBMYXN0RXhlY3V0aW9uID0+ICREYXkzMUxhc3RFeGVjIHx8ICcyMDI1LTEyLTMxIDA5OjAwOjAwJywKICAgICk7CiAgICBsYXN0IGlmICEkTmV4dFRpbWVVVEM7CiAgICBwdXNoIEBEYXkzMUV4ZWN1dGlvbnMsICROZXh0VGltZVVUQzsKICAgICREYXkzMUxhc3RFeGVjID0gJE5leHRUaW1lVVRDOwp9CgokU2VsZi0+VHJ1ZSgKICAgIHNjYWxhciBARGF5MzFFeGVjdXRpb25zID4gMCwKICAgICJNb250aGx5RGF5MzEgLSBHb3QgIiAuIHNjYWxhcihARGF5MzFFeGVjdXRpb25zKSAuICIgZXhlY3V0aW9ucyIsCik7CgojIE1vbnRocyB3aXRoIDMxIGRheXM6IEphbigxKSwgTWFyKDMpLCBNYXkoNSksIEp1bCg3KSwgQXVnKDgpLCBPY3QoMTApLCBEZWMoMTIpCiMgTW9udGhzIHRvIHNraXAgKG5vIGRheSAzMSk6IEZlYigyKSwgQXByKDQpLCBKdW4oNiksIFNlcCg5KSwgTm92KDExKQpteSAlRGF5MzFNb250aHM7CmZvciBteSAkRXhlYyAoQERheTMxRXhlY3V0aW9ucykgewogICAgaWYgKCAkRXhlYyA9fiAvXihcZHs0fSktKFxkezJ9KS0oXGR7Mn0pLyApIHsKICAgICAgICAkRGF5MzFNb250aHN7ICQyICsgMCB9ID0gMTsgICAgIyBOb3JtYWxpemUgbW9udGggdG8gaW50ZWdlcgogICAgfQp9CgojIFZlcmlmeSBtb250aHMgd2l0aCAzMSBkYXlzIGFyZSBwcmVzZW50CmZvciBteSAkRXhwZWN0ZWRNb250aCAoIDEsIDMsIDUsIDcsIDgsIDEwLCAxMiApIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICREYXkzMU1vbnRoc3skRXhwZWN0ZWRNb250aH0gPyAxIDogMCwKICAgICAgICAiTW9udGhseURheTMxIC0gRXhlY3V0ZXMgaW4gbW9udGggJEV4cGVjdGVkTW9udGggKGhhcyAzMSBkYXlzKSIsCiAgICApOwp9CgojIFZlcmlmeSBtb250aHMgd2l0aG91dCAzMSBkYXlzIGFyZSBza2lwcGVkCmZvciBteSAkU2tpcHBlZE1vbnRoICggMiwgNCwgNiwgOSwgMTEgKSB7CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJERheTMxTW9udGhzeyRTa2lwcGVkTW9udGh9ID8gMSA6IDAsCiAgICAgICAgIk1vbnRobHlEYXkzMSAtIFNraXBzIG1vbnRoICRTa2lwcGVkTW9udGggKGRvZXMgbm90IGhhdmUgMzEgZGF5cykiLAogICAgKTsKfQoKIyBBbHNvIHZlcmlmeSB2aWEgR2V0TmV4dEV4ZWN1dGlvbnMKbXkgQERheTMxUHJldmlldyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkdldE5leHRFeGVjdXRpb25zKAogICAgU2NoZWR1bGVySUQgPT4gJERheTMxU2NoZWR1bGVySUQsCiAgICBDb3VudCAgICAgICA9PiA3LAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEBEYXkzMVByZXZpZXcsCiAgICA3LAogICAgIk1vbnRobHlEYXkzMSAtIEdldE5leHRFeGVjdXRpb25zIHJldHVybnMgNyBwcmV2aWV3IGVudHJpZXMiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgMzg6IFllYXJseSBGZWIgMjkgU2tpcCAoTGVhcCBZZWFyKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkTGVhcFllYXJTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdMZWFwWWVhclRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ0xlYXAgWWVhciBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdUZXN0aW5nIEZlYiAyOSBsZWFwIHllYXIgc2tpcC4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ3llYXJseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgbW9udGggICAgPT4gMiwKICAgICAgICBkYXkgICAgICA9PiAyOSwKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdVVEMnLAogICAgfSwKICAgIEVuZFR5cGUgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJExlYXBZZWFyU2NoZWR1bGVySUQsCiAgICAiWWVhcmx5RmViMjkgLSBDcmVhdGVkIHNjaGVkdWxlIHdpdGggbW9udGg9MiwgZGF5PTI5IiwKKTsKCiMgQ2FsY3VsYXRlIG5leHQgZXhlY3V0aW9uIGZyb20gMjAyNS0wMS0wMSAobm9uLWxlYXAgeWVhcikKIyAyMDI1IGlzIG5vdCBhIGxlYXAgeWVhciwgMjAyNiBpcyBub3QsIDIwMjcgaXMgbm90LCAyMDI4IElTIGEgbGVhcCB5ZWFyCm15ICRMZWFwTmV4dDEgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5DYWxjdWxhdGVOZXh0RXhlY3V0aW9uKAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ3llYXJseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgbW9udGggICAgPT4gMiwKICAgICAgICBkYXkgICAgICA9PiAyOSwKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdVVEMnLAogICAgfSwKICAgIExhc3RFeGVjdXRpb24gPT4gJzIwMjUtMDEtMDEgMDA6MDA6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkTGVhcE5leHQxLAogICAgIlllYXJseUZlYjI5IC0gR290IG5leHQgZXhlY3V0aW9uIGZyb20gMjAyNS0wMS0wMTogJExlYXBOZXh0MSIsCik7CgojIFNob3VsZCBiZSAyMDI4LTAyLTI5IChuZXh0IGxlYXAgeWVhciksIE5PVCAyMDI1LTAyLTI4IG9yIGFueSBub24tbGVhcCB5ZWFyCm15ICRMZWFwSGFzMjAyOCA9ICggJExlYXBOZXh0MSA9fiAvMjAyOC0wMi0yOS8gKSA/IDEgOiAwOwokU2VsZi0+VHJ1ZSgKICAgICRMZWFwSGFzMjAyOCwKICAgICJZZWFybHlGZWIyOSAtIE5leHQgZXhlY3V0aW9uIGlzIDIwMjgtMDItMjkgKHNraXBzIG5vbi1sZWFwIHllYXJzKSIsCik7CgojIENhbGN1bGF0ZSBuZXh0IGV4ZWN1dGlvbiBmcm9tIDIwMjgtMDMtMDEKbXkgJExlYXBOZXh0MiA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkNhbGN1bGF0ZU5leHRFeGVjdXRpb24oCiAgICBTY2hlZHVsZVR5cGUgICA9PiAneWVhcmx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICBtb250aCAgICA9PiAyLAogICAgICAgIGRheSAgICAgID0+IDI5LAogICAgICAgIHRpbWUgICAgID0+ICcwOTowMCcsCiAgICAgICAgdGltZXpvbmUgPT4gJ1VUQycsCiAgICB9LAogICAgTGFzdEV4ZWN1dGlvbiA9PiAnMjAyOC0wMy0wMSAwMDowMDowMCcsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRMZWFwTmV4dDIsCiAgICAiWWVhcmx5RmViMjkgLSBHb3QgbmV4dCBleGVjdXRpb24gZnJvbSAyMDI4LTAzLTAxOiAkTGVhcE5leHQyIiwKKTsKCiMgU2hvdWxkIGJlIDIwMzItMDItMjkgKG5leHQgbGVhcCB5ZWFyIGFmdGVyIDIwMjgpCm15ICRMZWFwSGFzMjAzMiA9ICggJExlYXBOZXh0MiA9fiAvMjAzMi0wMi0yOS8gKSA/IDEgOiAwOwokU2VsZi0+VHJ1ZSgKICAgICRMZWFwSGFzMjAzMiwKICAgICJZZWFybHlGZWIyOSAtIE5leHQgZXhlY3V0aW9uIGFmdGVyIDIwMjggaXMgMjAzMi0wMi0yOSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCAzOTogQ29ycnVwdCBKU09OIERldGVjdGlvbgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiMgSW5zZXJ0IGEgc2NoZWR1bGUgZGlyZWN0bHkgaW50byBEQiB3aXRoIGNvcnJ1cHQgc2NoZWR1bGVfY29uZmlnIEpTT04KbXkgJENvcnJ1cHROYW1lID0gJ0NvcnJ1cHRKU09OVGVzdCcgLiAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwokREJPYmplY3QtPkRvKAogICAgU1FMID0+ICcKICAgICAgICBJTlNFUlQgSU5UTyB0aWNrZXRfc2NoZWR1bGVyCiAgICAgICAgICAgIChuYW1lLCBzY2hlZHVsZV9tb2RlLCB0aXRsZSwgcXVldWVfaWQsIHByaW9yaXR5X2lkLCBib2R5LAogICAgICAgICAgICAgc2NoZWR1bGVfdHlwZSwgc2NoZWR1bGVfY29uZmlnLAogICAgICAgICAgICAgZW5kX3R5cGUsIGV4ZWN1dGlvbl9jb3VudCwgdmFsaWRfaWQsCiAgICAgICAgICAgICBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KQogICAgICAgIFZBTFVFUwogICAgICAgICAgICAoPywgPywgPywgPywgPywgPywKICAgICAgICAgICAgID8sID8sCiAgICAgICAgICAgICA/LCAwLCAxLAogICAgICAgICAgICAgY3VycmVudF90aW1lc3RhbXAsIDEsIGN1cnJlbnRfdGltZXN0YW1wLCAxKScsCiAgICBCaW5kID0+IFsKICAgICAgICBcJENvcnJ1cHROYW1lLCBcJ3RpY2tldCcsIFwnQ29ycnVwdCBUZXN0JywgXCRRdWV1ZUlELCBcMywgXCdDb3JydXB0IGJvZHkuJywKICAgICAgICBcJ2RhaWx5JywgXCd7e3t7bm90IHZhbGlkIGpzb24hISEhJywKICAgICAgICBcJ25ldmVyJywKICAgIF0sCik7CgojIEdldCB0aGUgSUQgb2YgdGhlIGluc2VydGVkIHNjaGVkdWxlCiREQk9iamVjdC0+UHJlcGFyZSgKICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSB0aWNrZXRfc2NoZWR1bGVyIFdIRVJFIG5hbWUgPSA/JywKICAgIEJpbmQgID0+IFsgXCRDb3JydXB0TmFtZSBdLAogICAgTGltaXQgPT4gMSwKKTsKCm15ICRDb3JydXB0U2NoZWR1bGVySUQ7CndoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgJENvcnJ1cHRTY2hlZHVsZXJJRCA9ICRSb3dbMF07Cn0KCiRTZWxmLT5UcnVlKAogICAgJENvcnJ1cHRTY2hlZHVsZXJJRCwKICAgICJDb3JydXB0SlNPTiAtIEluc2VydGVkIHNjaGVkdWxlIHdpdGggY29ycnVwdCBKU09OIChJRDogJENvcnJ1cHRTY2hlZHVsZXJJRCkiLAopOwoKIyBTY2hlZHVsZXJHZXQgc2hvdWxkIHNldCBDb25maWdDb3JydXB0IGZsYWcKbXkgJUNvcnJ1cHRTY2hlZHVsZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckdldCgKICAgIFNjaGVkdWxlcklEID0+ICRDb3JydXB0U2NoZWR1bGVySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRDb3JydXB0U2NoZWR1bGV7Q29uZmlnQ29ycnVwdH0gPyAxIDogMCwKICAgICJDb3JydXB0SlNPTiAtIFNjaGVkdWxlckdldCBzZXRzIENvbmZpZ0NvcnJ1cHQgZmxhZyIsCik7CgojIEV4ZWN1dGVTY2hlZHVsZXIgc2hvdWxkIHJldHVybiB1bmRlZiAoYWJvcnQpCm15ICRDb3JydXB0RXhlY1Jlc3VsdCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVTY2hlZHVsZXIoCiAgICBTY2hlZHVsZXJJRCA9PiAkQ29ycnVwdFNjaGVkdWxlcklELAogICAgVXNlcklEICAgICAgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRDb3JydXB0RXhlY1Jlc3VsdCwKICAgICJDb3JydXB0SlNPTiAtIEV4ZWN1dGVTY2hlZHVsZXIgcmV0dXJucyB1bmRlZiBmb3IgY29ycnVwdCBjb25maWciLAopOwoKIyBHZXRTY2hlZHVsZXJzV2l0aEVycm9ycyBzaG91bGQgaW5jbHVkZSB0aGlzIHNjaGVkdWxlIChlcnJvciB3YXMgc2V0IGJ5IEV4ZWN1dGVTY2hlZHVsZXIpCm15IEBDb3JydXB0RXJyb3JzID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+R2V0U2NoZWR1bGVyc1dpdGhFcnJvcnMoKTsKbXkgJEZvdW5kQ29ycnVwdEVycm9yID0gMDsKZm9yIG15ICRFcnJvckVudHJ5IChAQ29ycnVwdEVycm9ycykgewogICAgaWYgKCAkRXJyb3JFbnRyeS0+e1NjaGVkdWxlcklEfSA9PSAkQ29ycnVwdFNjaGVkdWxlcklEICkgewogICAgICAgICRGb3VuZENvcnJ1cHRFcnJvciA9IDE7CiAgICAgICAgbGFzdDsKICAgIH0KfQoKJFNlbGYtPlRydWUoCiAgICAkRm91bmRDb3JydXB0RXJyb3IsCiAgICAiQ29ycnVwdEpTT04gLSBHZXRTY2hlZHVsZXJzV2l0aEVycm9ycyBpbmNsdWRlcyB0aGUgY29ycnVwdCBzY2hlZHVsZSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVzdCA0MDogTWF4SGlzdG9yeUVudHJpZXMgQ2xlYW51cAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkSGlzdENsZWFudXBTY2hlZHVsZXJJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgIE5hbWUgICAgICAgICAgID0+ICdIaXN0Q2xlYW51cFRlc3QnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKSwKICAgIFNjaGVkdWxlTW9kZSAgID0+ICd0aWNrZXQnLAogICAgVGl0bGUgICAgICAgICAgPT4gJ0hpc3RvcnkgQ2xlYW51cCBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdUZXN0aW5nIGhpc3RvcnkgY2xlYW51cC4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ2RhaWx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICB0aW1lICAgICA9PiAnMDA6MDEnLAogICAgICAgIHRpbWV6b25lID0+ICdVVEMnLAogICAgfSwKICAgIEVuZFR5cGUgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJEhpc3RDbGVhbnVwU2NoZWR1bGVySUQsCiAgICAiTWF4SGlzdG9yeUVudHJpZXMgLSBDcmVhdGVkIHNjaGVkdWxlIGZvciBoaXN0b3J5IGNsZWFudXAgdGVzdCIsCik7CgojIEV4ZWN1dGUgMTAgdGltZXMgdXNpbmcgU2ltdWxhdGVUaW1lIHRvIGNyZWF0ZSBoaXN0b3J5IGVudHJpZXMKZm9yIG15ICRpICggMSAuLiAxMCApIHsKICAgIG15ICRTaW1EYXRlID0gc3ByaW50ZiggJzIwMjYtMDEtJTAyZCAwMDowMTowMCcsICRpICk7CiAgICAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5FeGVjdXRlU2NoZWR1bGVyKAogICAgICAgIFNjaGVkdWxlcklEICA9PiAkSGlzdENsZWFudXBTY2hlZHVsZXJJRCwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICBTaW11bGF0ZVRpbWUgPT4gJFNpbURhdGUsCiAgICApOwp9CgojIFZlcmlmeSB3ZSBoYXZlIDEwIGhpc3RvcnkgZW50cmllcwpteSBASGlzdEJlZm9yZSA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkhpc3RvcnlMaXN0KAogICAgU2NoZWR1bGVySUQgPT4gJEhpc3RDbGVhbnVwU2NoZWR1bGVySUQsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQEhpc3RCZWZvcmUsCiAgICAxMCwKICAgICJNYXhIaXN0b3J5RW50cmllcyAtIDEwIGhpc3RvcnkgZW50cmllcyBleGlzdCBiZWZvcmUgY2xlYW51cCIsCik7CgojIFNldCBNYXhIaXN0b3J5RW50cmllcyB0byA1CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdUaWNrZXRTY2hlZHVsZXI6Ok1heEhpc3RvcnlFbnRyaWVzJywKICAgIFZhbHVlID0+IDUsCik7CgojIEV4ZWN1dGUgb25jZSBtb3JlIHRvIHRyaWdnZXIgY2xlYW51cAokVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5FeGVjdXRlU2NoZWR1bGVyKAogICAgU2NoZWR1bGVySUQgID0+ICRIaXN0Q2xlYW51cFNjaGVkdWxlcklELAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBTaW11bGF0ZVRpbWUgPT4gJzIwMjYtMDEtMTEgMDA6MDE6MDAnLAopOwoKIyBRdWVyeSBoaXN0b3J5IGVudHJpZXMgLSBzaG91bGQgb25seSBoYXZlIDUgcmVtYWluaW5nICh0aGUgbmV3ZXN0KQpteSBASGlzdEFmdGVyID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+SGlzdG9yeUxpc3QoCiAgICBTY2hlZHVsZXJJRCA9PiAkSGlzdENsZWFudXBTY2hlZHVsZXJJRCwKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciBASGlzdEFmdGVyLAogICAgNSwKICAgICJNYXhIaXN0b3J5RW50cmllcyAtIE9ubHkgNSBoaXN0b3J5IGVudHJpZXMgcmVtYWluIGFmdGVyIGNsZWFudXAiLAopOwoKIyBSZXNldCBNYXhIaXN0b3J5RW50cmllcyB0byAwICh1bmxpbWl0ZWQpIGZvciBvdGhlciB0ZXN0cwokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnVGlja2V0U2NoZWR1bGVyOjpNYXhIaXN0b3J5RW50cmllcycsCiAgICBWYWx1ZSA9PiAwLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlc3QgNDE6IEVycm9yIE1lc3NhZ2UgU2FuaXRpemF0aW9uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgQ3JlYXRlIGEgc2NoZWR1bGUgdG8gdGVzdCBlcnJvciBzYW5pdGl6YXRpb24KbXkgJFNhbml0aXplU2NoZWR1bGVySUQgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJBZGQoCiAgICBOYW1lICAgICAgICAgICA9PiAnU2FuaXRpemVUZXN0JyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICBTY2hlZHVsZU1vZGUgICA9PiAndGlja2V0JywKICAgIFRpdGxlICAgICAgICAgID0+ICdTYW5pdGl6ZSBFcnJvciBUZXN0JywKICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgIEJvZHkgICAgICAgICAgID0+ICdUZXN0aW5nIGVycm9yIHNhbml0aXphdGlvbi4nLAogICAgU2NoZWR1bGVUeXBlICAgPT4gJ2RhaWx5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsKICAgICAgICB0aW1lICAgICA9PiAnMDk6MDAnLAogICAgICAgIHRpbWV6b25lID0+ICdVVEMnLAogICAgfSwKICAgIEVuZFR5cGUgPT4gJ25ldmVyJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFNhbml0aXplU2NoZWR1bGVySUQsCiAgICAiRXJyb3JTYW5pdGl6YXRpb24gLSBDcmVhdGVkIHNjaGVkdWxlIGZvciBzYW5pdGl6YXRpb24gdGVzdCIsCik7CgojIENhbGwgX1NldFNjaGVkdWxlckVycm9yIHdpdGggYSBtZXNzYWdlIGNvbnRhaW5pbmcgcGF0aCBhbmQgbGluZSBudW1iZXIKJFRpY2tldFNjaGVkdWxlck9iamVjdC0+X1NldFNjaGVkdWxlckVycm9yKAogICAgU2NoZWR1bGVySUQgPT4gJFNhbml0aXplU2NoZWR1bGVySUQsCiAgICBFcnJvciAgICAgICA9PiAnU29tZXRoaW5nIGZhaWxlZCBhdCAvb3B0L3pudW55L0tlcm5lbC9TeXN0ZW0vVGlja2V0U2NoZWR1bGVyLnBtIGxpbmUgMTIzIGJhZGx5JywKKTsKCiMgUmV0cmlldmUgdGhlIHNjaGVkdWxlIGFuZCB2ZXJpZnkgcGF0aC9saW5lIGFyZSByZXBsYWNlZCB3aXRoIFtpbnRlcm5hbF0KbXkgJVNhbml0aXplZFNjaGVkdWxlID0gJFRpY2tldFNjaGVkdWxlck9iamVjdC0+U2NoZWR1bGVyR2V0KAogICAgU2NoZWR1bGVySUQgPT4gJFNhbml0aXplU2NoZWR1bGVySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRTYW5pdGl6ZWRTY2hlZHVsZXtMYXN0RXJyb3J9LAogICAgIkVycm9yU2FuaXRpemF0aW9uIC0gTGFzdEVycm9yIGlzIHNldCIsCik7CgpteSAkSGFzUGF0aCA9ICggJFNhbml0aXplZFNjaGVkdWxle0xhc3RFcnJvcn0gPX4gbXsvb3B0L3pudW55L30gKSA/IDEgOiAwOwokU2VsZi0+RmFsc2UoCiAgICAkSGFzUGF0aCwKICAgICJFcnJvclNhbml0aXphdGlvbiAtIFBhdGggL29wdC96bnVueS8gaXMgcmVtb3ZlZCBmcm9tIGVycm9yIG1lc3NhZ2UiLAopOwoKbXkgJEhhc0xpbmVOdW1iZXIgPSAoICRTYW5pdGl6ZWRTY2hlZHVsZXtMYXN0RXJyb3J9ID1+IC9saW5lXHMrXGQrLyApID8gMSA6IDA7CiRTZWxmLT5GYWxzZSgKICAgICRIYXNMaW5lTnVtYmVyLAogICAgIkVycm9yU2FuaXRpemF0aW9uIC0gTGluZSBudW1iZXIgaXMgcmVtb3ZlZCBmcm9tIGVycm9yIG1lc3NhZ2UiLAopOwoKbXkgJEhhc0ludGVybmFsID0gKCAkU2FuaXRpemVkU2NoZWR1bGV7TGFzdEVycm9yfSA9fiAvXFtpbnRlcm5hbFxdLyApID8gMSA6IDA7CiRTZWxmLT5UcnVlKAogICAgJEhhc0ludGVybmFsLAogICAgIkVycm9yU2FuaXRpemF0aW9uIC0gUGF0aCBhbmQgbGluZSByZXBsYWNlZCB3aXRoIFtpbnRlcm5hbF0iLAopOwoKIyBUZXN0IHRydW5jYXRpb246IHNldCBlcnJvciB3aXRoIDEwMDArIGNoYXJhY3RlciBtZXNzYWdlCm15ICRMb25nRXJyb3IgPSAnWCcgeCAxMTAwOwokVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5fU2V0U2NoZWR1bGVyRXJyb3IoCiAgICBTY2hlZHVsZXJJRCA9PiAkU2FuaXRpemVTY2hlZHVsZXJJRCwKICAgIEVycm9yICAgICAgID0+ICRMb25nRXJyb3IsCik7CgpteSAlVHJ1bmNhdGVkU2NoZWR1bGUgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoCiAgICBTY2hlZHVsZXJJRCA9PiAkU2FuaXRpemVTY2hlZHVsZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRydW5jYXRlZFNjaGVkdWxle0xhc3RFcnJvcn0sCiAgICAiRXJyb3JTYW5pdGl6YXRpb24gLSBMb25nIGVycm9yIExhc3RFcnJvciBpcyBzZXQiLAopOwoKbXkgJEVycm9yTGVuZ3RoID0gbGVuZ3RoKCAkVHJ1bmNhdGVkU2NoZWR1bGV7TGFzdEVycm9yfSApOwpteSAkSXNUcnVuY2F0ZWQgPSAoICRFcnJvckxlbmd0aCA8PSA1MDAgKSA/IDEgOiAwOwokU2VsZi0+VHJ1ZSgKICAgICRJc1RydW5jYXRlZCwKICAgICJFcnJvclNhbml0aXphdGlvbiAtIEVycm9yIHRydW5jYXRlZCB0byA1MDAgY2hhcnMgKGdvdCAkRXJyb3JMZW5ndGgpIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDbGVhbnVwIGlzIGhhbmRsZWQgYnkgUmVzdG9yZURhdGFiYXNlID0+IDEKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKMTsK</File>
        <File Permission="660" Location="scripts/test/TicketSchedulerSimulation.t" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IHdvbGtpZy5pdCwgaHR0cHM6Ly93b2xraWcuaXQvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgVGlja2V0U2NoZWR1bGVyU2ltdWxhdGlvbi50CiMKIyBUaW1lLWxhcHNlIHNpbXVsYXRpb24gdGVzdCBmb3IgdGhlIFRpY2tldFNjaGVkdWxlci4KIwojIFBoYXNlIDE6IFF1aWNrIHZhbGlkYXRpb24gKDUgc2NoZWR1bGVzLCAzMCBkYXlzLCB+NzIwIHN0ZXBzKQojIFBoYXNlIDI6IENvbXByZWhlbnNpdmUgdGVzdCAoNjQgc2NoZWR1bGVzLCA5MCBkYXlzLCB+MjE2MCBzdGVwcykKIwojIFVzZXMgTm9UaWNrZXQgbW9kZSAtIG5vIGFjdHVhbCB0aWNrZXRzIGFyZSBjcmVhdGVkLgojIFZhbGlkYXRlcyBleGVjdXRpb24gY291bnRzIGFnYWluc3QgZXhwZWN0ZWQgcmFuZ2VzIHBlciBzY2hlZHVsZSB0eXBlLgojCiMgTk9URTogVXNlcyBjb25maWcga2V5ICJpbnRlcnZhbCIgKG5vdCAiaW50ZXJ2YWxfZGF5cyIpIGFuZAojICAgICAgICJvZmZzZXRfZGF5cyIgKG5vdCAib2Zmc2V0IikgLSB0aGVzZSBhcmUgdGhlIGtleXMgcmVhZCBieQojICAgICAgIENhbGN1bGF0ZU5leHRFeGVjdXRpb24uCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm15ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0U2NoZWR1bGVyJyk7Cm15ICRRdWV1ZU9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIENyZWF0ZSB0ZXN0IHF1ZXVlCm15ICRRdWV1ZU5hbWUgPSAnU2ltUXVldWUnIC4gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKbXkgJFF1ZXVlSUQgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICBOYW1lICAgICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgIENvbW1lbnQgICAgICAgICA9PiAnU2ltdWxhdGlvbiB0ZXN0IHF1ZXVlJywKKTsKCiRTZWxmLT5UcnVlKCAkUXVldWVJRCwgIlNldHVwIC0gQ3JlYXRlZCB0ZXN0IHF1ZXVlIiApOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEhlbHBlcjogQ3JlYXRlIHNjaGVkdWxlIGFuZCByZXR1cm4gaW5mbyB3aXRoIGV4cGVjdGVkIHJhbmdlCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnN1YiBfQ3JlYXRlU2NoZWR1bGUgewogICAgbXkgKCVQKSA9IEBfOwoKICAgIG15ICRJRCA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPlNjaGVkdWxlckFkZCgKICAgICAgICBOYW1lICAgICAgICAgICA9PiAkUHtOYW1lfSAuICdfJyAuICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCksCiAgICAgICAgU2NoZWR1bGVNb2RlICAgPT4gJ3RpY2tldCcsCiAgICAgICAgVGl0bGUgICAgICAgICAgPT4gJFB7TmFtZX0sCiAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgUHJpb3JpdHlJRCAgICAgPT4gMywKICAgICAgICBCb2R5ICAgICAgICAgICA9PiAiU2ltdWxhdGlvbjogJFB7TmFtZX0iLAogICAgICAgIFNjaGVkdWxlVHlwZSAgID0+ICRQe1NjaGVkdWxlVHlwZX0sCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4gJFB7U2NoZWR1bGVDb25maWd9LAogICAgICAgIEVuZFR5cGUgICAgICAgID0+ICRQe0VuZFR5cGV9ICAgICAgICB8fCAnbmV2ZXInLAogICAgICAgIE1heE9jY3VycmVuY2VzID0+ICRQe01heE9jY3VycmVuY2VzfSB8fCB1bmRlZiwKICAgICAgICBFbmREYXRlICAgICAgICA9PiAkUHtFbmREYXRlfSAgICAgICAgfHwgdW5kZWYsCiAgICAgICAgVmFsaWRJRCAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRJRDsKCiAgICByZXR1cm4gewogICAgICAgIElEICAgICAgPT4gJElELAogICAgICAgIE5hbWUgICAgPT4gJFB7TmFtZX0sCiAgICAgICAgVHlwZSAgICA9PiAkUHtTY2hlZHVsZVR5cGV9LAogICAgICAgIEV4cE1pbiAgPT4gJFB7RXhwTWlufSwKICAgICAgICBFeHBNYXggID0+ICRQe0V4cE1heH0sCiAgICB9Owp9CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgSGVscGVyOiBSdW4gc2ltdWxhdGlvbiBsb29wCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnN1YiBfUnVuU2ltdWxhdGlvbiB7CiAgICBteSAoJVApID0gQF87CgogICAgbXkgJEN1cnJlbnQgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgIE9iamVjdFBhcmFtcyA9PiB7IFN0cmluZyA9PiAkUHtTdGFydH0gfSwKICAgICk7CiAgICBteSAkRW5kID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICBPYmplY3RQYXJhbXMgPT4geyBTdHJpbmcgPT4gJFB7RW5kfSB9LAogICAgKTsKCiAgICBteSAkU3RlcEhvdXJzID0gJFB7U3RlcEhvdXJzfSB8fCAxOwogICAgbXkgJFN0ZXBzICAgICA9IDA7CiAgICBteSAkRXhlY3V0ZWQgID0gMDsKCiAgICB3aGlsZSAoICRDdXJyZW50LT5Db21wYXJlKCBEYXRlVGltZU9iamVjdCA9PiAkRW5kICkgPD0gMCApIHsKICAgICAgICBteSBAUmVzdWx0cyA9ICRUaWNrZXRTY2hlZHVsZXJPYmplY3QtPkV4ZWN1dGVQZW5kaW5nU2NoZWR1bGVzKAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgU2ltdWxhdGVUaW1lID0+ICRDdXJyZW50LT5Ub1N0cmluZygpLAogICAgICAgICAgICBOb1RpY2tldCAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRFeGVjdXRlZCArPSBzY2FsYXIgQFJlc3VsdHM7CiAgICAgICAgJFN0ZXBzKys7CiAgICAgICAgJEN1cnJlbnQtPkFkZCggSG91cnMgPT4gJFN0ZXBIb3VycyApOwogICAgfQoKICAgIHJldHVybiAoICRTdGVwcywgJEV4ZWN1dGVkICk7Cn0KCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBIZWxwZXI6IEdldCBleGVjdXRpb24gY291bnRzCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnN1YiBfR2V0Q291bnRzIHsKICAgIG15IChASW5mb3MpID0gQF87CiAgICBteSAlQzsKICAgIGZvciBteSAkSSAoQEluZm9zKSB7CiAgICAgICAgbXkgJVMgPSAkVGlja2V0U2NoZWR1bGVyT2JqZWN0LT5TY2hlZHVsZXJHZXQoIFNjaGVkdWxlcklEID0+ICRJLT57SUR9ICk7CiAgICAgICAgJEN7ICRJLT57SUR9IH0gPSAkU3tFeGVjdXRpb25Db3VudH0gfHwgMDsKICAgIH0KICAgIHJldHVybiAlQzsKfQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFNpbXVsYXRpb24gd2luZG93CiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCm15ICROb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKbXkgJFNpbVN0YXJ0T2JqID0gJE5vdy0+Q2xvbmUoKTsKJFNpbVN0YXJ0T2JqLT5BZGQoIERheXMgPT4gMSApOwokU2ltU3RhcnRPYmotPlNldCggSG91ciA9PiAwLCBNaW51dGUgPT4gMCwgU2Vjb25kID0+IDAgKTsKbXkgJFNpbVN0YXJ0ICAgICA9ICRTaW1TdGFydE9iai0+VG9TdHJpbmcoKTsKbXkgJEludFN0YXJ0RGF0ZSA9IHN1YnN0ciggJFNpbVN0YXJ0LCAwLCAxMCApOwoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFBIQVNFIDE6IFF1aWNrIHZhbGlkYXRpb24gKDUgc2NoZWR1bGVzLCAzMCBkYXlzKQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpteSAkUTMwT2JqID0gJFNpbVN0YXJ0T2JqLT5DbG9uZSgpOwokUTMwT2JqLT5BZGQoIERheXMgPT4gMzAgKTsKbXkgJFEzMEVuZCA9ICRRMzBPYmotPlRvU3RyaW5nKCk7CgpteSBAUVM7CgpwdXNoIEBRUywgX0NyZWF0ZVNjaGVkdWxlKAogICAgTmFtZSA9PiAnUV9EYWlseScsIFNjaGVkdWxlVHlwZSA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyB0aW1lID0+ICcwOTowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFeHBNaW4gPT4gMjksIEV4cE1heCA9PiAzMSwKKTsKcHVzaCBAUVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgIE5hbWUgPT4gJ1FfV2Vla2x5X01XRicsIFNjaGVkdWxlVHlwZSA9PiAnd2Vla2x5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgd2Vla2RheXMgPT4gWzEsMyw1XSwgdGltZSA9PiAnMTQ6MDAnLCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgRXhwTWluID0+IDExLCBFeHBNYXggPT4gMTUsCik7CnB1c2ggQFFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdRX01vbnRobHkxNScsIFNjaGVkdWxlVHlwZSA9PiAnbW9udGhseV9kYXknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyBkYXkgPT4gMTUsIHRpbWUgPT4gJzA4OjAwJywgdGltZXpvbmUgPT4gJ1VUQycgfSwKICAgIEV4cE1pbiA9PiAxLCBFeHBNYXggPT4gMiwKKTsKcHVzaCBAUVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgIE5hbWUgPT4gJ1FfTW9udGhseTJuZFR1ZScsIFNjaGVkdWxlVHlwZSA9PiAnbW9udGhseV93ZWVrZGF5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgbnRoID0+IDIsIHdlZWtkYXkgPT4gJ3R1ZScsIHRpbWUgPT4gJzExOjAwJywgdGltZXpvbmUgPT4gJ1VUQycgfSwKICAgIEV4cE1pbiA9PiAxLCBFeHBNYXggPT4gMiwKKTsKcHVzaCBAUVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgIE5hbWUgPT4gJ1FfSW50ZXJ2YWwzZCcsIFNjaGVkdWxlVHlwZSA9PiAnaW50ZXJ2YWwnLAogICAgU2NoZWR1bGVDb25maWcgPT4geyBpbnRlcnZhbCA9PiAzLCBzdGFydF9kYXRlID0+ICRJbnRTdGFydERhdGUsIHRpbWUgPT4gJzA5OjAwJywgdGltZXpvbmUgPT4gJ1VUQycgfSwKICAgIEV4cE1pbiA9PiA5LCBFeHBNYXggPT4gMTEsCik7CgpAUVMgPSBncmVwIHsgJF8gJiYgJF8tPntJRH0gfSBAUVM7CiRTZWxmLT5Jcyggc2NhbGFyIEBRUywgNSwgIlBoYXNlIDEgLSBBbGwgNSBzY2hlZHVsZXMgY3JlYXRlZCIgKTsKCm15ICggJFFTdGVwcywgJFFFeGVjICkgPSBfUnVuU2ltdWxhdGlvbiggU3RhcnQgPT4gJFNpbVN0YXJ0LCBFbmQgPT4gJFEzMEVuZCwgU3RlcEhvdXJzID0+IDEgKTsKJFNlbGYtPlRydWUoICRRU3RlcHMgPiA3MDAsICJQaGFzZSAxIC0gUmFuICRRU3RlcHMgc3RlcHMsICRRRXhlYyBleGVjdXRpb25zIiApOwoKbXkgJVFDID0gX0dldENvdW50cyhAUVMpOwpmb3IgbXkgJFMgKEBRUykgewogICAgbXkgJEMgPSAkUUN7ICRTLT57SUR9IH0gfHwgMDsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDID49ICRTLT57RXhwTWlufSAmJiAkQyA8PSAkUy0+e0V4cE1heH0sCiAgICAgICAgIlBoYXNlIDEgLSAkUy0+e05hbWV9OiAkQyBleGVjdXRpb25zIChleHBlY3RlZCAkUy0+e0V4cE1pbn0tJFMtPntFeHBNYXh9KSIsCiAgICApOwp9CgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUEhBU0UgMjogQ29tcHJlaGVuc2l2ZSB0ZXN0ICg2NCBzY2hlZHVsZXMsIDkwIGRheXMpCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCm15ICRGOTBPYmogPSAkU2ltU3RhcnRPYmotPkNsb25lKCk7CiRGOTBPYmotPkFkZCggRGF5cyA9PiA5MCApOwpteSAkRjkwRW5kID0gJEY5ME9iai0+VG9TdHJpbmcoKTsKCm15IEBBUzsKCiMgLS0tLS0tIERBSUxZICg4KSAtLS0tLS0KZm9yIG15ICRIICggMCwgNCwgOCwgOSwgMTIsIDE1LCAxOCwgMjMgKSB7CiAgICBteSAkVCA9IHNwcmludGYoJyUwMmQ6MDAnLCAkSCk7CiAgICBwdXNoIEBBUywgX0NyZWF0ZVNjaGVkdWxlKAogICAgICAgIE5hbWUgPT4gIkRhaWx5XyRUIiwgU2NoZWR1bGVUeXBlID0+ICdkYWlseScsCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4geyB0aW1lID0+ICRULCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgICAgIEV4cE1pbiA9PiA4OSwgRXhwTWF4ID0+IDkxLAogICAgKTsKfQoKIyAtLS0tLS0gV0VFS0xZIHNpbmdsZSBkYXlzICg3KSAtLS0tLS0KbXkgQERheU5hbWVzID0gcXcoeCBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCBTdW4pOwpmb3IgbXkgJEQgKCAxIC4uIDcgKSB7CiAgICBwdXNoIEBBUywgX0NyZWF0ZVNjaGVkdWxlKAogICAgICAgIE5hbWUgPT4gIldlZWtseV8kRGF5TmFtZXNbJERdIiwgU2NoZWR1bGVUeXBlID0+ICd3ZWVrbHknLAogICAgICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgd2Vla2RheXMgPT4gWyREXSwgdGltZSA9PiAnMDk6MDAnLCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgICAgIEV4cE1pbiA9PiAxMiwgRXhwTWF4ID0+IDE0LAogICAgKTsKfQoKIyAtLS0tLS0gV0VFS0xZIGNvbWJvcyAoNSkgLS0tLS0tCnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdXZWVrbHlfTVdGJywgU2NoZWR1bGVUeXBlID0+ICd3ZWVrbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyB3ZWVrZGF5cyA9PiBbMSwzLDVdLCB0aW1lID0+ICcwODowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFeHBNaW4gPT4gMzgsIEV4cE1heCA9PiA0MCwKKTsKcHVzaCBAQVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgIE5hbWUgPT4gJ1dlZWtseV9UdVRoJywgU2NoZWR1bGVUeXBlID0+ICd3ZWVrbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyB3ZWVrZGF5cyA9PiBbMiw0XSwgdGltZSA9PiAnMTQ6MDAnLCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgRXhwTWluID0+IDI1LCBFeHBNYXggPT4gMjcsCik7CnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdXZWVrbHlfV29ya2RheXMnLCBTY2hlZHVsZVR5cGUgPT4gJ3dlZWtseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7IHdlZWtkYXlzID0+IFsxLDIsMyw0LDVdLCB0aW1lID0+ICcwNzowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFeHBNaW4gPT4gNjMsIEV4cE1heCA9PiA2NiwKKTsKcHVzaCBAQVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgIE5hbWUgPT4gJ1dlZWtseV9XZWVrZW5kJywgU2NoZWR1bGVUeXBlID0+ICd3ZWVrbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyB3ZWVrZGF5cyA9PiBbNiw3XSwgdGltZSA9PiAnMTA6MDAnLCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgRXhwTWluID0+IDI1LCBFeHBNYXggPT4gMjcsCik7CnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdXZWVrbHlfQWxsRGF5cycsIFNjaGVkdWxlVHlwZSA9PiAnd2Vla2x5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgd2Vla2RheXMgPT4gWzEsMiwzLDQsNSw2LDddLCB0aW1lID0+ICcwNjowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFeHBNaW4gPT4gODksIEV4cE1heCA9PiA5MSwKKTsKCiMgLS0tLS0tIE1PTlRITFkgREFZICgxMCkgLS0tLS0tCmZvciBteSAkRGF5ICggMSwgNSwgMTAsIDE0LCAxNSwgMjAsIDI1LCAyOCApIHsKICAgIHB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICAgICAgTmFtZSA9PiAiTW9udGhseURheV8kRGF5IiwgU2NoZWR1bGVUeXBlID0+ICdtb250aGx5X2RheScsCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4geyBkYXkgPT4gJERheSwgdGltZSA9PiAnMDk6MDAnLCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgICAgIEV4cE1pbiA9PiAyLCBFeHBNYXggPT4gNCwKICAgICk7Cn0KcHVzaCBAQVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgIE5hbWUgPT4gJ01vbnRobHlEYXlfMzAnLCBTY2hlZHVsZVR5cGUgPT4gJ21vbnRobHlfZGF5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgZGF5ID0+IDMwLCB0aW1lID0+ICcwOTowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFeHBNaW4gPT4gMiwgRXhwTWF4ID0+IDQsCik7CnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdNb250aGx5RGF5X0xhc3QnLCBTY2hlZHVsZVR5cGUgPT4gJ21vbnRobHlfZGF5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgZGF5ID0+IC0xLCB0aW1lID0+ICcwOTowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFeHBNaW4gPT4gMiwgRXhwTWF4ID0+IDQsCik7CgojIC0tLS0tLSBNT05USExZIFdFRUtEQVkgKDgpIC0tLS0tLQpteSBATVcgPSAoCiAgICBbIDEsICAnbW9uJywgJzFzdE1vbicgIF0sIFsgMiwgICd0dWUnLCAnMm5kVHVlJyAgXSwKICAgIFsgMywgICd3ZWQnLCAnM3JkV2VkJyAgXSwgWyA0LCAgJ3RodScsICc0dGhUaHUnICBdLAogICAgWyAxLCAgJ2ZyaScsICcxc3RGcmknICBdLCBbIC0xLCAnbW9uJywgJ0xhc3RNb24nIF0sCiAgICBbIC0xLCAnZnJpJywgJ0xhc3RGcmknIF0sIFsgMiwgICdzYXQnLCAnMm5kU2F0JyAgXSwKKTsKZm9yIG15ICRNIChATVcpIHsKICAgIHB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICAgICAgTmFtZSA9PiAiTW9udGhseVdEXyRNLT5bMl0iLCBTY2hlZHVsZVR5cGUgPT4gJ21vbnRobHlfd2Vla2RheScsCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4geyBudGggPT4gJE0tPlswXSwgd2Vla2RheSA9PiAkTS0+WzFdLCB0aW1lID0+ICcxMDowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICAgICAgRXhwTWluID0+IDIsIEV4cE1heCA9PiA0LAogICAgKTsKfQoKIyAtLS0tLS0gTU9OVEhMWSBXRUVLREFZIE9GRlNFVCAoNikgLS0tLS0tCm15IEBNV08gPSAoCiAgICBbIC0xLCAnZnJpJywgMywgICczZF9hZnRlcl9MYXN0RnJpJyAgIF0sCiAgICBbIDEsICAnbW9uJywgLTIsICcyZF9iZWZvcmVfMXN0TW9uJyAgIF0sCiAgICBbIDIsICAnd2VkJywgMSwgICcxZF9hZnRlcl8ybmRXZWQnICAgIF0sCiAgICBbIC0xLCAndGh1JywgNSwgICc1ZF9hZnRlcl9MYXN0VGh1JyAgIF0sCiAgICBbIDEsICAndHVlJywgMCwgICcwZF9hZnRlcl8xc3RUdWUnICAgIF0sCiAgICBbIC0xLCAnZnJpJywgLTcsICc3ZF9iZWZvcmVfTGFzdEZyaScgIF0sCik7CmZvciBteSAkTyAoQE1XTykgewogICAgcHVzaCBAQVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgICAgICBOYW1lID0+ICJNV09fJE8tPlszXSIsIFNjaGVkdWxlVHlwZSA9PiAnbW9udGhseV93ZWVrZGF5X29mZnNldCcsCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4gewogICAgICAgICAgICBudGggPT4gJE8tPlswXSwgd2Vla2RheSA9PiAkTy0+WzFdLCBvZmZzZXRfZGF5cyA9PiAkTy0+WzJdLAogICAgICAgICAgICB0aW1lID0+ICcwODowMCcsIHRpbWV6b25lID0+ICdVVEMnLAogICAgICAgIH0sCiAgICAgICAgRXhwTWluID0+IDIsIEV4cE1heCA9PiA0LAogICAgKTsKfQoKIyAtLS0tLS0gWUVBUkxZICg0KSAtLS0tLS0KIyBPdmVyIDkwIGRheXMsIDAgb3IgMSBleGVjdXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGRhdGUgZmFsbHMgaW4gd2luZG93Cm15IEBZUyA9ICggWzEsMTUsJ0phbjE1J10sIFs0LDEsJ0FwcjAxJ10sIFs2LDMwLCdKdW4zMCddLCBbMTAsMTUsJ09jdDE1J10gKTsKZm9yIG15ICRZIChAWVMpIHsKICAgIHB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICAgICAgTmFtZSA9PiAiWWVhcmx5XyRZLT5bMl0iLCBTY2hlZHVsZVR5cGUgPT4gJ3llYXJseScsCiAgICAgICAgU2NoZWR1bGVDb25maWcgPT4geyBtb250aCA9PiAkWS0+WzBdLCBkYXkgPT4gJFktPlsxXSwgdGltZSA9PiAnMDk6MDAnLCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgICAgIEV4cE1pbiA9PiAwLCBFeHBNYXggPT4gMSwKICAgICk7Cn0KCiMgLS0tLS0tIElOVEVSVkFMICgxMCkgLS0tLS0tCiMgVXNpbmcgY29uZmlnIGtleSAiaW50ZXJ2YWwiICh0aGUga2V5IENhbGN1bGF0ZU5leHRFeGVjdXRpb24gcmVhZHMpCm15IEBJbnRlcnZhbHMgPSAoCiAgICBbIDEsICA4OSwgOTEgXSwgWyAyLCAgNDQsIDQ2IF0sIFsgMywgIDI5LCAzMSBdLCBbIDUsICAxNywgMTkgXSwKICAgIFsgNywgIDEyLCAxNCBdLCBbIDEwLCA4LCAgMTAgXSwgWyAxNCwgNiwgIDcgIF0sIFsgMjEsIDQsICA1ICBdLAogICAgWyAyOCwgMywgIDQgIF0sIFsgMzAsIDIsICA0ICBdLAopOwpmb3IgbXkgJEkgKEBJbnRlcnZhbHMpIHsKICAgIHB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICAgICAgTmFtZSA9PiAiSW50ZXJ2YWxfJEktPlswXWQiLCBTY2hlZHVsZVR5cGUgPT4gJ2ludGVydmFsJywKICAgICAgICBTY2hlZHVsZUNvbmZpZyA9PiB7CiAgICAgICAgICAgIGludGVydmFsICAgPT4gJEktPlswXSwKICAgICAgICAgICAgc3RhcnRfZGF0ZSA9PiAkSW50U3RhcnREYXRlLAogICAgICAgICAgICB0aW1lICAgICAgID0+ICcwOTowMCcsCiAgICAgICAgICAgIHRpbWV6b25lICAgPT4gJ1VUQycsCiAgICAgICAgfSwKICAgICAgICBFeHBNaW4gPT4gJEktPlsxXSwgRXhwTWF4ID0+ICRJLT5bMl0sCiAgICApOwp9CgojIC0tLS0tLSBFTkQgT1BUSU9OUyAoNikgLS0tLS0tCnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdFbmRfRGFpbHlfTWF4NScsIFNjaGVkdWxlVHlwZSA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyB0aW1lID0+ICcxMDowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFbmRUeXBlID0+ICdvY2N1cnJlbmNlcycsIE1heE9jY3VycmVuY2VzID0+IDUsCiAgICBFeHBNaW4gPT4gNSwgRXhwTWF4ID0+IDUsCik7CnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdFbmRfV2Vla2x5TW9uX01heDMnLCBTY2hlZHVsZVR5cGUgPT4gJ3dlZWtseScsCiAgICBTY2hlZHVsZUNvbmZpZyA9PiB7IHdlZWtkYXlzID0+IFsxXSwgdGltZSA9PiAnMDk6MDAnLCB0aW1lem9uZSA9PiAnVVRDJyB9LAogICAgRW5kVHlwZSA9PiAnb2NjdXJyZW5jZXMnLCBNYXhPY2N1cnJlbmNlcyA9PiAzLAogICAgRXhwTWluID0+IDMsIEV4cE1heCA9PiAzLAopOwoKbXkgJEVuZDEwID0gJFNpbVN0YXJ0T2JqLT5DbG9uZSgpOyAkRW5kMTAtPkFkZCggRGF5cyA9PiAxMCApOwpwdXNoIEBBUywgX0NyZWF0ZVNjaGVkdWxlKAogICAgTmFtZSA9PiAnRW5kX0RhaWx5XzEwZCcsIFNjaGVkdWxlVHlwZSA9PiAnZGFpbHknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyB0aW1lID0+ICcxMTowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFbmRUeXBlID0+ICdkYXRlJywgRW5kRGF0ZSA9PiBzdWJzdHIoICRFbmQxMC0+VG9TdHJpbmcoKSwgMCwgMTAgKSwKICAgIEV4cE1pbiA9PiA5LCBFeHBNYXggPT4gMTEsCik7CgpteSAkRW5kMjAgPSAkU2ltU3RhcnRPYmotPkNsb25lKCk7ICRFbmQyMC0+QWRkKCBEYXlzID0+IDIwICk7CnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdFbmRfV2Vla2x5RnJpXzIwZCcsIFNjaGVkdWxlVHlwZSA9PiAnd2Vla2x5JywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgd2Vla2RheXMgPT4gWzVdLCB0aW1lID0+ICcxNDowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFbmRUeXBlID0+ICdkYXRlJywgRW5kRGF0ZSA9PiBzdWJzdHIoICRFbmQyMC0+VG9TdHJpbmcoKSwgMCwgMTAgKSwKICAgIEV4cE1pbiA9PiAyLCBFeHBNYXggPT4gMywKKTsKcHVzaCBAQVMsIF9DcmVhdGVTY2hlZHVsZSgKICAgIE5hbWUgPT4gJ0VuZF9JbnRlcnZhbDJkX01heDgnLCBTY2hlZHVsZVR5cGUgPT4gJ2ludGVydmFsJywKICAgIFNjaGVkdWxlQ29uZmlnID0+IHsgaW50ZXJ2YWwgPT4gMiwgc3RhcnRfZGF0ZSA9PiAkSW50U3RhcnREYXRlLCB0aW1lID0+ICcxMjowMCcsIHRpbWV6b25lID0+ICdVVEMnIH0sCiAgICBFbmRUeXBlID0+ICdvY2N1cnJlbmNlcycsIE1heE9jY3VycmVuY2VzID0+IDgsCiAgICBFeHBNaW4gPT4gOCwgRXhwTWF4ID0+IDgsCik7CgpteSAkRW5kNDUgPSAkU2ltU3RhcnRPYmotPkNsb25lKCk7ICRFbmQ0NS0+QWRkKCBEYXlzID0+IDQ1ICk7CnB1c2ggQEFTLCBfQ3JlYXRlU2NoZWR1bGUoCiAgICBOYW1lID0+ICdFbmRfTW9udGhseTEwXzQ1ZCcsIFNjaGVkdWxlVHlwZSA9PiAnbW9udGhseV9kYXknLAogICAgU2NoZWR1bGVDb25maWcgPT4geyBkYXkgPT4gMTAsIHRpbWUgPT4gJzA5OjAwJywgdGltZXpvbmUgPT4gJ1VUQycgfSwKICAgIEVuZFR5cGUgPT4gJ2RhdGUnLCBFbmREYXRlID0+IHN1YnN0ciggJEVuZDQ1LT5Ub1N0cmluZygpLCAwLCAxMCApLAogICAgRXhwTWluID0+IDEsIEV4cE1heCA9PiAyLAopOwoKIyBGaWx0ZXIgZmFpbGVkIGNyZWF0aW9ucwpAQVMgPSBncmVwIHsgJF8gJiYgJF8tPntJRH0gfSBAQVM7Cm15ICRUb3RhbCA9IHNjYWxhciBAQVM7CgokU2VsZi0+VHJ1ZSggJFRvdGFsID49IDYwLCAiUGhhc2UgMiAtIENyZWF0ZWQgJFRvdGFsIHNjaGVkdWxlcyAodGFyZ2V0OiA2MCspIiApOwoKIyAtLS0tLS0gUnVuIHNpbXVsYXRpb24gLS0tLS0tCgpteSAoICRGU3RlcHMsICRGRXhlYyApID0gX1J1blNpbXVsYXRpb24oCiAgICBTdGFydCAgICAgPT4gJFNpbVN0YXJ0LAogICAgRW5kICAgICAgID0+ICRGOTBFbmQsCiAgICBTdGVwSG91cnMgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKCAkRlN0ZXBzID4gMjAwMCwgIlBoYXNlIDIgLSBSYW4gJEZTdGVwcyBzdGVwcywgJEZFeGVjIHRvdGFsIGV4ZWN1dGlvbnMiICk7CgojIC0tLS0tLSBWYWxpZGF0ZSBhbGwgc2NoZWR1bGUgY291bnRzIC0tLS0tLQoKbXkgJUZDID0gX0dldENvdW50cyhAQVMpOwpteSAkUGFzcyA9IDA7Cm15ICRGYWlsID0gMDsKCmZvciBteSAkUyAoQEFTKSB7CiAgICBteSAkQyA9ICRGQ3sgJFMtPntJRH0gfSB8fCAwOwogICAgbXkgJE9LID0gKCAkQyA+PSAkUy0+e0V4cE1pbn0gJiYgJEMgPD0gJFMtPntFeHBNYXh9ICkgPyAxIDogMDsKCiAgICAkU2VsZi0+VHJ1ZSggJE9LLAogICAgICAgICJQaGFzZSAyIC0gJFMtPntOYW1lfSAoJFMtPntUeXBlfSk6ICRDIGV4ZWN1dGlvbnMgKGV4cGVjdGVkICRTLT57RXhwTWlufS0kUy0+e0V4cE1heH0pIiwKICAgICk7CgogICAgaWYgKCRPSykgeyAkUGFzcysrIH0gZWxzZSB7ICRGYWlsKysgfQp9CgokU2VsZi0+VHJ1ZSgKICAgICRGYWlsID09IDAsCiAgICAiUGhhc2UgMiAtICRQYXNzLyRUb3RhbCBzY2hlZHVsZXMgd2l0aGluIGV4cGVjdGVkIHJhbmdlICgkRmFpbCBmYWlsdXJlcykiLAopOwoKIyAtLS0tLS0gU3VtbWFyeSAtLS0tLS0KCm15ICRUb3RhbEV4ZWMgPSAwOwokVG90YWxFeGVjICs9ICRfIGZvciB2YWx1ZXMgJUZDOwoKJFNlbGYtPlRydWUoCiAgICAkVG90YWxFeGVjID4gMCwKICAgICJTdW1tYXJ5IC0gJFRvdGFsRXhlYyB0b3RhbCBleGVjdXRpb25zIGFjcm9zcyAkVG90YWwgc2NoZWR1bGVzIGluICRGU3RlcHMgc3RlcHMiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENsZWFudXAgaXMgaGFuZGxlZCBieSBSZXN0b3JlRGF0YWJhc2UgPT4gMQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgoxOwo=</File>
    </Filelist>

    <!-- Database Install -->
    <DatabaseInstall Type="post">
        <!-- Main scheduler table -->
        <TableCreate Name="ticket_scheduler">
            <Column Name="id" Required="true" PrimaryKey="true" AutoIncrement="true" Type="INTEGER"/>
            <Column Name="name" Required="true" Size="255" Type="VARCHAR"/>
            <Column Name="schedule_mode" Required="true" Size="20" Type="VARCHAR" Default="ticket"/>

            <!-- Ticket fields (for normal tickets, optional for process mode) -->
            <Column Name="title" Required="false" Size="255" Type="VARCHAR"/>
            <Column Name="queue_id" Required="false" Type="INTEGER"/>
            <Column Name="priority_id" Required="false" Type="INTEGER"/>
            <Column Name="type_id" Required="false" Type="INTEGER"/>
            <Column Name="service_id" Required="false" Type="INTEGER"/>
            <Column Name="sla_id" Required="false" Type="INTEGER"/>
            <Column Name="customer_user_login" Required="false" Size="200" Type="VARCHAR"/>
            <Column Name="owner_id" Required="false" Type="INTEGER"/>
            <Column Name="responsible_id" Required="false" Type="INTEGER"/>
            <Column Name="body" Required="false" Type="LONGBLOB"/>

            <!-- Process ticket fields -->
            <Column Name="process_id" Required="false" Size="255" Type="VARCHAR"/>
            <Column Name="activity_id" Required="false" Size="255" Type="VARCHAR"/>
            <Column Name="activity_dialog_data" Required="false" Type="LONGBLOB"/>

            <!-- Checklist: removed - now in separate table ticket_scheduler_checklist -->

            <!-- Schedule configuration -->
            <Column Name="schedule_type" Required="true" Size="50" Type="VARCHAR"/>
            <Column Name="schedule_config" Required="true" Type="LONGBLOB"/>

            <!-- End options -->
            <Column Name="end_type" Required="true" Size="20" Type="VARCHAR" Default="never"/>
            <Column Name="max_occurrences" Required="false" Type="INTEGER"/>
            <Column Name="end_date" Required="false" Type="DATE"/>

            <!-- Execution tracking -->
            <Column Name="execution_count" Required="true" Type="INTEGER" Default="0"/>
            <Column Name="last_execution" Required="false" Type="DATE"/>
            <Column Name="next_execution" Required="false" Type="DATE"/>
            <Column Name="last_error" Required="false" Type="LONGBLOB"/>
            <Column Name="last_error_time" Required="false" Type="DATE"/>

            <!-- Status and audit -->
            <Column Name="valid_id" Required="true" Type="SMALLINT" Default="1"/>
            <Column Name="create_time" Required="true" Type="DATE"/>
            <Column Name="create_by" Required="true" Type="INTEGER"/>
            <Column Name="change_time" Required="true" Type="DATE"/>
            <Column Name="change_by" Required="true" Type="INTEGER"/>

            <Index Name="idx_ts_queue">
                <IndexColumn Name="queue_id"/>
            </Index>
            <Index Name="idx_ts_next">
                <IndexColumn Name="next_execution"/>
            </Index>
            <Index Name="idx_ts_valid">
                <IndexColumn Name="valid_id"/>
            </Index>
            <Index Name="idx_ts_mode">
                <IndexColumn Name="schedule_mode"/>
            </Index>
            <Index Name="idx_ts_error">
                <IndexColumn Name="last_error_time"/>
            </Index>

            <ForeignKey ForeignTable="queue">
                <Reference Local="queue_id" Foreign="id"/>
            </ForeignKey>
            <ForeignKey ForeignTable="users">
                <Reference Local="create_by" Foreign="id"/>
            </ForeignKey>
            <ForeignKey ForeignTable="users">
                <Reference Local="change_by" Foreign="id"/>
            </ForeignKey>
        </TableCreate>

        <!-- History table for executed schedules -->
        <TableCreate Name="ticket_scheduler_history">
            <Column Name="id" Required="true" PrimaryKey="true" AutoIncrement="true" Type="INTEGER"/>
            <Column Name="scheduler_id" Required="true" Type="INTEGER"/>
            <Column Name="ticket_id" Required="true" Type="INTEGER"/>
            <Column Name="execution_time" Required="true" Type="DATE"/>
            <Column Name="success" Required="true" Type="SMALLINT" Default="1"/>
            <Column Name="error_message" Required="false" Type="LONGBLOB"/>

            <Index Name="idx_tsh_scheduler">
                <IndexColumn Name="scheduler_id"/>
            </Index>
            <Index Name="idx_tsh_ticket">
                <IndexColumn Name="ticket_id"/>
            </Index>
            <Index Name="idx_tsh_time">
                <IndexColumn Name="execution_time"/>
            </Index>

            <ForeignKey ForeignTable="ticket_scheduler">
                <Reference Local="scheduler_id" Foreign="id"/>
            </ForeignKey>
        </TableCreate>

        <!-- DynamicField values table -->
        <TableCreate Name="ticket_scheduler_dynamic_field">
            <Column Name="id" Required="true" PrimaryKey="true" AutoIncrement="true" Type="INTEGER"/>
            <Column Name="scheduler_id" Required="true" Type="INTEGER"/>
            <Column Name="field_name" Required="true" Size="200" Type="VARCHAR"/>
            <Column Name="field_value" Required="false" Type="LONGBLOB"/>

            <Index Name="idx_tsdf_scheduler">
                <IndexColumn Name="scheduler_id"/>
            </Index>
            <Unique Name="idx_tsdf_unique">
                <UniqueColumn Name="scheduler_id"/>
                <UniqueColumn Name="field_name"/>
            </Unique>

            <ForeignKey ForeignTable="ticket_scheduler">
                <Reference Local="scheduler_id" Foreign="id"/>
            </ForeignKey>
        </TableCreate>

        <!-- Checklist templates assignment table (n:m relationship) -->
        <TableCreate Name="ticket_scheduler_checklist">
            <Column Name="id" Required="true" PrimaryKey="true" AutoIncrement="true" Type="INTEGER"/>
            <Column Name="scheduler_id" Required="true" Type="INTEGER"/>
            <Column Name="checklist_template_id" Required="true" Type="INTEGER"/>
            <Column Name="sort_order" Required="true" Type="SMALLINT" Default="0"/>

            <Index Name="idx_tsc_scheduler">
                <IndexColumn Name="scheduler_id"/>
            </Index>
            <Index Name="idx_tsc_template">
                <IndexColumn Name="checklist_template_id"/>
            </Index>
            <Unique Name="idx_tsc_unique">
                <UniqueColumn Name="scheduler_id"/>
                <UniqueColumn Name="checklist_template_id"/>
            </Unique>

            <ForeignKey ForeignTable="ticket_scheduler">
                <Reference Local="scheduler_id" Foreign="id"/>
            </ForeignKey>
        </TableCreate>
    </DatabaseInstall>

    <!-- Database Uninstall -->
    <DatabaseUninstall Type="pre">
        <TableDrop Name="ticket_scheduler_checklist"/>
        <TableDrop Name="ticket_scheduler_dynamic_field"/>
        <TableDrop Name="ticket_scheduler_history"/>
        <TableDrop Name="ticket_scheduler"/>
    </DatabaseUninstall>

    <!-- Code Install - Create Groups -->
    <CodeInstall Type="post"><![CDATA[
        my $GroupObject = $Kernel::OM->Get('Kernel::System::Group');

        # Create TicketSchedulerManager group
        my $ManagerGroupID = $GroupObject->GroupLookup( Group => 'TicketSchedulerManager' );
        if ( !$ManagerGroupID ) {
            $GroupObject->GroupAdd(
                Name    => 'TicketSchedulerManager',
                Comment => 'Group for managing ticket schedules (RW=full access to own queues, RO=view only)',
                ValidID => 1,
                UserID  => 1,
            );
        }

        # Create TicketSchedulerAdmin group
        my $AdminGroupID = $GroupObject->GroupLookup( Group => 'TicketSchedulerAdmin' );
        if ( !$AdminGroupID ) {
            $GroupObject->GroupAdd(
                Name    => 'TicketSchedulerAdmin',
                Comment => 'Admin group for all ticket schedules across all queues, sees error banner',
                ValidID => 1,
                UserID  => 1,
            );
        }
    ]]></CodeInstall>

    <!-- Change Log -->
    <ChangeLog Version="7.2.0" Date="2026-01-04">Initial release with support for recurring tickets, process tickets, checklists and dynamic fields.</ChangeLog>
    <ChangeLog Version="7.1.0" Date="2026-09-20">Initial release for Znuny 7.1.x, ported from the 7.2.x line: recurring/scheduled ticket creation (daily, weekly, monthly, yearly, interval), process ticket scheduling with Activity Dialog support, optional Checklist integration, dynamic field placeholders, execution history. Fixes a reflected XSS, adds CSRF protection, and scopes Manager permission to own queues; fixes an invalid DATETIME column type in the package schema (use DATE, matching Znuny's own core schema convention). Rebuilds the admin error banner as a proper Frontend::NotifyModule (was a custom Output::FilterContent banner, silently overridden by core's .MessageBox.Error styling) - now uses $LayoutObject-&gt;Notify() directly, the same mechanism as core's Out-of-Office/SystemMaintenance banners. Registers the existing 227-assertion unit test suite (TicketScheduler.t, TicketSchedulerSimulation.t) in the package Filelist for the first time - it previously existed in the repo but was never installed/run as part of the shipped package.</ChangeLog>
    <ChangeLog Version="7.0.0" Date="2026-09-20">Initial release for Znuny 7.0.x, ported from the 7.2.x line: recurring/scheduled ticket creation (daily, weekly, monthly, yearly, interval), process ticket scheduling with Activity Dialog support, optional Checklist integration, dynamic field placeholders, execution history. Fixes a reflected XSS, adds CSRF protection, and scopes Manager permission to own queues; fixes an invalid DATETIME column type in the package schema (use DATE, matching Znuny's own core schema convention). Rebuilds the admin error banner as a proper Frontend::NotifyModule (was a custom Output::FilterContent banner, silently overridden by core's .MessageBox.Error styling) - now uses $LayoutObject-&gt;Notify() directly, the same mechanism as core's Out-of-Office/SystemMaintenance banners. Registers the existing 227-assertion unit test suite (TicketScheduler.t, TicketSchedulerSimulation.t) in the package Filelist for the first time - it previously existed in the repo but was never installed/run as part of the shipped package.</ChangeLog>
    <ChangeLog Version="6.5.0" Date="2026-09-20">Initial release for Znuny 6.5.x, ported from the 7.2.x line: recurring/scheduled ticket creation (daily, weekly, monthly, yearly, interval), process ticket scheduling with Activity Dialog support, optional Checklist integration, dynamic field placeholders, execution history. Registers the existing 227-assertion unit test suite (TicketScheduler.t, TicketSchedulerSimulation.t) in the package Filelist for the first time - it previously existed in the repo but was never installed/run as part of the shipped package. Rebuilds the admin error banner as a proper Frontend::NotifyModule (was a custom Output::FilterContent banner with its own design, silently overridden by core's .MessageBox.Error styling on 6.5.x) - now uses $LayoutObject-&gt;Notify() directly, the same mechanism as core's Out-of-Office/SystemMaintenance banners, appearing in the standard site-wide notification area on every page instead of 3 specific ones.</ChangeLog>

</otrs_package>
