<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>OpenStreetMap</Name>
    <Version>11.0.3</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-10-29 14:59:30" Version="11.0.3">Added hungarian translations; satisfied CodePolicy; tidied.</ChangeLog>
    <ChangeLog Date="2026-05-13 15:30:34" Version="11.0.2">Add Hungarian translation.</ChangeLog>
    <ChangeLog Date="2024-12-12 07:12:05" Version="11.0.1">Initial Release on OTOBO 11.
Added a map for CIs connected to specific tickets.</ChangeLog>
    <Description Lang="en">Adds an interface to OpenStreetMap.</Description>
    <Description Lang="hu">Kapcsolódási felületet ad az OpenStreetMap-térképhez.</Description>
    <Framework>11.0.x</Framework>
    <IntroInstall Lang="en" Title="Installation Information" Type="pre">
        &lt;br/&gt;
        &lt;br/&gt;
        This plugin relies on the tile servers of OpenStreetMap (https://www.openstreetmap.org/about). If you plan on using it, please consider donating to them (https://wiki.osmfoundation.org/wiki/Donate), to help them keeping their servers running. (When doing this, you could tell them who sent you. ;)
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;
    </IntroInstall>
    <IntroInstall Lang="hu" Title="Telepítési információk" Type="pre">
        &lt;br/&gt;
        &lt;br/&gt;
        Ez a bővítmény az OpenStreetMap csempekiszolgálóira támaszkodik (https://www.openstreetmap.org/about). Ha azt tervezi, hogy használni fogja, akkor fontolja meg, hogy adományozzon nekik (https://wiki.osmfoundation.org/wiki/Donate), hogy segítsen a kiszolgálóik működésének fenntartásában. Ha ezt teszi, akkor elmondhatja nekik, hogy ki küldte Önt. ;)
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;
    </IntroInstall>
    <BuildCommitID>19775c8be0801aeb85feb43f7c7370ba89fd3feb</BuildCommitID>
    <BuildDate>2026-10-29 14:59:33</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Kernel/Config/Files/XML/OpenStreetMap.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpTaG93Rm9yQ2xhc3NlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gb3Igd2hpY2ggY2xhc3NlcyB0aGUgbWFwIGlzIGRpc3BsYXllZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSVRTTUNvbmZpZ0l0ZW06OlN1YnNpZGlhcnkiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6SW5jaWRlbnRTdGF0ZUNvbG9ycyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db2xvciByZXByZXNlbnRhdGlvbiBvZiBpbmNpZGVudCBzdGF0ZXMgb24gdGhlIG1hcC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3BlcmF0aW9uYWwiPiMyMmU1YTA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ildhcm5pbmciPiNlMGQwNDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkluY2lkZW50Ij4jZmYzMDAwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudE9wZW5TdHJlZXRNYXAjIyM0MzctT1NNIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpDdXN0b21lck9wZW5TdHJlZXRNYXAjIyM0MzctT1NNIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudERhc2hib2FyZCMjIzQzNy1PU00iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkN1c3RvbWVyRGFzaGJvYXJkIyMjNDM3LU9TTSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRJVFNNQ29uZmlnSXRlbVpvb20jIyM0MzctT1NNIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5PcGVuU3RyZWV0TWFwLmNzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudE9wZW5TdHJlZXRNYXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPk9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+Q01EQjwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FnZW50SVRTTUNvbmZpZ0l0ZW0jIyMwMDQtT3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1jb25maWdpdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPk9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+Q29uZmlnIEl0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MjEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iQ3VzdG9tZXJGcm9udGVuZDo6TW9kdWxlIyMjQ3VzdG9tZXJPcGVuU3RyZWV0TWFwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPk1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQ3VzdG9tZXJPcGVuU3RyZWV0TWFwIyMjMDAyLU9wZW5TdHJlZXRNYXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlNob3cgdGhlIE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5NYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUN1c3RvbWVyT3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rT3B0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyIj5NYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+TWVudTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY2Vzc0tleSI+bzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj43MjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic3ZnSWNvbiI+dmFyL2h0dHBkL2h0ZG9jcy9za2lucy9DdXN0b21lci9kZWZhdWx0L2ltZy9tYXAuc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRGFzaGJvYXJkQmFja2VuZCMjIzAwMDItT3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgT3BlblN0cmVldE1hcCBkYXNoYm9hcmQgYmFja2VuZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6RGFzaGJvYXJkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZDo6T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+T3BlblN0cmVldE1hcCB3aXRoIENvbmZpZ0l0ZW1zIGFuZCBDdXN0b21lcnMuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYWNoZVRUTExvY2FsIj4xNDQwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+Q29udGVudExhcmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYW5kYXRvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok91dHB1dDo6RmlsdGVyRWxlbWVudFBvc3QjIyNPdXRwdXRGaWx0ZXJQb3N0T3BlblN0cmVldE1hcENJV2lkZ2V0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk91dHB1dCBmaWx0ZXIgdG8gYWRkIGFuIE9wZW5TdHJlZXRNYXAgd2lkZ2V0IHRvIHRoZSBBZ2VudElUU01Db25maWdJdGVtWm9vbSBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QmFzZTo6T3V0cHV0RmlsdGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZpbHRlckVsZW1lbnRQb3N0OjpPcGVuU3RyZWV0TWFwQ0lXaWRnZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRlbXBsYXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPlN1YnNpZGlhcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPi9vdG9iby13ZWIvc2tpbnMvQWdlbnQvZGVmYXVsdC9pbWcvTG9jYXRpb24uc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPkJhc2ljQ0lJbmZvMDE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj5Mb2NhdGlvbi1MYXRpdHVkZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+TG9jYXRpb24tTG9uZ2l0dWRlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAwMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5MaW5lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj5LZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6TGluZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+TG9jYXRpb25DbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Mb2NhdGlvbkNsYXNzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj40PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPiNmZjAwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDAzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAwNSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDA2IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMDciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAwOCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDA5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAxMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDEyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAxNCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDE1IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTYiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAxNyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnIyMjMDE4IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBCYWNrZW5kIGluZm9ybWF0aW9uIGZvciBlYWNoIGNsYXNzLiBMb2NhdGlvbkluZm8gY2FuIGNvbnRhaW4gZWl0aGVyIFNvdXJjZUtleXMgZm9yIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgb3IgTGlua2VkIENsYXNzZXMgd2hpY2ggcHJvdmlkZSB0aG9zZS4gTGluZUNvbG9yIGNhbiBiZSBlaXRoZXIgIiNyZ2IiIChlLmcuICIjZmYwMDAwIiksIG9yICJEZXBsb3ltZW50U3RhdGUiIG9yICJJbmNpZGVudFN0YXRlIiwgdG8gbWF0Y2ggdGhlIHNwZWNpZmljIGNvbG9yLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmFja2VuZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uUGF0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uT3ZlcnJpZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jYXRpb25JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VLZXlzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGF0aXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvbmdpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua2VkQ2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZVdpZHRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVDb2xvciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rU2VsZiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUb29sdGlwIj48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcjIyMwMTkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCYWNrZW5kIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25QYXRoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25PdmVycmlkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NhdGlvbkluZm8iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZUtleXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYXRpdHVkZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9uZ2l0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rZWRDbGFzc2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lV2lkdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluZUNvbG9yIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtTZWxmIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRvb2x0aXAiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpDbGFzc0NvbmZpZyMjIzAyMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgQmFja2VuZCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4gTG9jYXRpb25JbmZvIGNhbiBjb250YWluIGVpdGhlciBTb3VyY2VLZXlzIGZvciBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIG9yIExpbmtlZCBDbGFzc2VzIHdoaWNoIHByb3ZpZGUgdGhvc2UuIExpbmVDb2xvciBjYW4gYmUgZWl0aGVyICIjcmdiIiAoZS5nLiAiI2ZmMDAwMCIpLCBvciAiRGVwbG95bWVudFN0YXRlIiBvciAiSW5jaWRlbnRTdGF0ZSIsIHRvIG1hdGNoIHRoZSBzcGVjaWZpYyBjb2xvci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJhY2tlbmQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGgiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbk92ZXJyaWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlS2V5cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhdGl0dWRlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb25naXR1ZGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtlZENsYXNzZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmVXaWR0aCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5lQ29sb3IiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua1NlbGYiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVG9vbHRpcCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZyMjIzAwMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgaG93IHRoZSBtYXAgaXMgcHJlc2VudGVkIGZvciBhIGdpdmVuIGFjdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaG93Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlNlbGY8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFyZ2luIj4wLjI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnIyMjMDAyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyYXRlcyBob3cgdGhlIG1hcCBpcyBwcmVzZW50ZWQgZm9yIGEgZ2l2ZW4gYWN0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T3BlblN0cmVldE1hcDo6QWN0aW9uQ29uZmlnPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnREYXNoYm9hcmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+U3Vic2lkaWFyeTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjAuNDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+U3Vic2lkaWFyeTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjEuMjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5DdXN0b21lckRhc2hib2FyZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5TdWJzaWRpYXJ5PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmdpbiI+MC40PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZyMjIzAwNSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmF0ZXMgaG93IHRoZSBtYXAgaXMgcHJlc2VudGVkIGZvciBhIGdpdmVuIGFjdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkN1c3RvbWVyT3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2hvdyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5TdWJzaWRpYXJ5PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmdpbiI+MS40PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9wZW5TdHJlZXRNYXA6Okljb25PdmVycmlkZSMjI0Jhc2ljQ0lJbmZvMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGljb24gYmFzZWQgb24gY29uZmlnIGl0ZW0gaW5mb3JtYXRpb24uIERlZmluZSAiU3RhdGVzIiBhbmQgYXNzaWduICJJY29uUGF0aHMiIHRvIHRoZW0uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6Okljb25zOjpCYXNpY0NJSW5mbzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGFuZ2VyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlIj5JbmNpZGVudDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckRlcGxTdGF0ZSI+UHJvZHVjdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvblBhdGhzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYW5nZXIiPi9vdG9iby13ZWIvc2tpbnMvQWdlbnQvZGVmYXVsdC9pbWcvTG9jYXRpb25SZWQuc3ZnPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckRhc2hib2FyZDo6VGlsZXMjIyNPcGVuU3RyZWV0TWFwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpbGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQ3VzdG9tZXJEYXNoYm9hcmQuIE1vZHVsZSBpcyByZXF1aXJlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6Vmlldzo6RGFzaGJvYXJkOjpUaWxlczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPcmRlciI+NzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGVtcGxhdGUiPkRhc2hib2FyZC9UaWxlT1NNQ2FudmFzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWciPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPCEtLSBUaWNrZXQgU3BlY2lmaWMgY29uZmlncyAtLT4KCiAgICA8U2V0dGluZyBOYW1lPSJPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWcjIyMwMDYiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q29uZmlndXJhdGVzIGhvdyB0aGUgbWFwIGlzIHByZXNlbnRlZCBmb3IgYSBnaXZlbiBhY3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPcGVuU3RyZWV0TWFwOjpBY3Rpb25Db25maWc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudFRpY2tldE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNob3ciPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+U3Vic2lkaWFyeTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJnaW4iPjEuNDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUXVldWVzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGlja2V0VHlwZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFRpY2tldE9wZW5TdHJlZXRNYXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPlRpY2tldE9wZW5TdHJlZXRNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5PcGVuU3RyZWV0TWFwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+Q01EQjwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRUaWNrZXRPcGVuU3RyZWV0TWFwIyMjNDM3LU9TTSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLk9wZW5TdHJlZXRNYXAuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuT3BlblN0cmVldE1hcC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZ2VudFRpY2tldE9wZW5TdHJlZXRNYXAjIyMwMDUtVGlja2V0T3BlblN0cmVldE1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2hvdyB0aWNrZXRzIG9uIGEgbWFwLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldCBNYXA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50VGlja2V0T3BlblN0cmVldE1hcDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rT3B0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4K</File>
        <File Location="Kernel/Language/hu_OpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X09wZW5TdHJlZXRNYXA7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBPcGVuU3RyZWV0TWFwV2lkZ2V0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVuU3RyZWV0TWFwJ30gPSAnT3BlblN0cmVldE1hcCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9yIHJlcHJlc2VudGF0aW9uIG9mIGluY2lkZW50IHN0YXRlcyBvbiB0aGUgbWFwLid9ID0gJ0EgdMOpcmvDqXBlbiBsw6l2xZEgaW5jaWRlbnPDoWxsYXBvdG9rIHN6w61uw6FicsOhem9sw6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJhdGVzIEJhY2tlbmQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2xhc3MuIExvY2F0aW9uSW5mbyBjYW4gY29udGFpbiBlaXRoZXIgU291cmNlS2V5cyBmb3IgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSBvciBMaW5rZWQgQ2xhc3NlcyB3aGljaCBwcm92aWRlIHRob3NlLiBMaW5lQ29sb3IgY2FuIGJlIGVpdGhlciAiI3JnYiIgKGUuZy4gIiNmZjAwMDAiKSwgb3IgIkRlcGxveW1lbnRTdGF0ZSIgb3IgIkluY2lkZW50U3RhdGUiLCB0byBtYXRjaCB0aGUgc3BlY2lmaWMgY29sb3IuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBhIGjDoXR0w6lycHJvZ3JhbS1pbmZvcm3DoWNpw7NrYXQgYXogZWd5ZXMgb3N6dMOhbHlva27DoWwuIEEg4oCeTG9jYXRpb25JbmZv4oCdIHRhcnRhbG1hemhhdGphIGEgaGVseWluZm9ybcOhY2nDs2thdCwgYW1lbHlla2V0IHZhZ3kgYSDigJ5Tb3VyY2VLZXlz4oCdIGZvcnLDoXNrdWxjc2JhbiBrZWxsIG1lZ2Fkbmkgc3rDqWxlc3PDqWcgKOKAnkxhdGl0dWRl4oCdKSDDqXMgaG9zc3rDunPDoWcgKOKAnkxvbmdpdHVkZeKAnSkgZm9ybcOhYmFuLCB2YWd5IGEg4oCeTGlua2VkQ2xhc3Nlc+KAnSBrdWxjc2JhbiBsw6l2xZEga2FwY3NvbHQgb3N6dMOhbHlva2thbCwgYW1lbHllayB0YXJ0YWxtYXp6w6FrIGEga29vcmRpbsOhdMOha2F0LiBBIOKAnkxpbmVDb2xvcuKAnSBhZGphIG1lZyBhIHZvbmFsIHN6w61uw6l0LCBhbWVseSB2YWd5IOKAniNyZ2LigJ0gKHDDqWxkw6F1bCDigJ4jZmYwMDAw4oCdKSB2YWd5IMO8emVtYmUgw6FsbMOtdMOhc2kgw6FsbGFwb3QgKOKAnkRlcGxveW1lbnRTdGF0ZeKAnSkgdmFneSBpbmNpZGVuc8OhbGxhcG90ICjigJ5JbmNpZGVudFN0YXRl4oCdKSBsZWhldCwgaG9neSBlZ3llenplbiBhIG1lZ2Fkb3R0IHN6w61ubmVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmF0ZXMgaG93IHRoZSBtYXAgaXMgcHJlc2VudGVkIGZvciBhIGdpdmVuIGFjdGlvbi4nfSA9ICdBenQgw6FsbMOtdGphIGJlLCBob2d5IGEgdMOpcmvDqXAgaG9neWFuIGplbGVuamVuIG1lZyBlZ3kgYWRvdHQgbcWxdmVsZXRuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3Igd2hpY2ggY2xhc3NlcyB0aGUgbWFwIGlzIGRpc3BsYXllZC4nfSA9ICdNZWx5aWsgb3N6dMOhbHlva27DoWwgamVsZW5qZW4gbWVnIGEgdMOpcmvDqXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcCd9ID0gJ1TDqXJrw6lwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZW5TdHJlZXRNYXAgd2l0aCBDb25maWdJdGVtcyBhbmQgQ3VzdG9tZXJzLid9ID0gJ09wZW5TdHJlZXRNYXAga29uZmlndXLDoWNpw7NlbGVtZWtrZWwgw6lzIMO8Z3lmZWxla2tlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0cHV0IGZpbHRlciB0byBhZGQgYW4gT3BlblN0cmVldE1hcCB3aWRnZXQgdG8gdGhlIEFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tIHNjcmVlbi4nfSA9CiAgICAgICAgJ0tpbWVuZXRzesWxcsWRIGFoaG96LCBob2d5IE9wZW5TdHJlZXRNYXAgZmVsw7xsZXRpIGVsZW1ldCBhZGpvbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IGtvbmZpZ3Vyw6FjacOzZWxlbS1uYWd5w610w6FzIGvDqXBlcm55xZFqw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJyaWRlcyB0aGUgZGVmYXVsdCBpY29uIGJhc2VkIG9uIGNvbmZpZyBpdGVtIGluZm9ybWF0aW9uLiBEZWZpbmUgIlN0YXRlcyIgYW5kIGFzc2lnbiAiSWNvblBhdGhzIiB0byB0aGVtLid9ID0KICAgICAgICAnRmVsw7xsYsOtcsOhbGphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgaWtvbnQgYSBrb25maWd1csOhY2nDs2VsZW0taW5mb3Jtw6FjacOzayBhbGFwasOhbi4gQSDigJ5TdGF0ZXPigJ0gaGF0w6Fyb3p6YSBtZWcgYXogw6FsbGFwb3Rva2F0LCDDqXMgYXog4oCeSWNvblBhdGhz4oCdIHJlbmRlbGkgaG96esOhanVrIGF6IGlrb27DunR2b25hbGFrYXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBPcGVuU3RyZWV0TWFwIGRhc2hib2FyZCBiYWNrZW5kLid9ID0gJ1BhcmFtw6l0ZXJlayBheiBPcGVuU3RyZWV0TWFwIHZlesOpcmzFkXB1bHQgaMOhdHTDqXJwcm9ncmFtasOhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBPcGVuU3RyZWV0TWFwJ30gPSAnQXogT3BlblN0cmVldE1hcCBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aWNrZXRzIG9uIGEgbWFwLid9ID0gJ0plZ3llayBtZWdqZWxlbsOtdMOpc2UgZWd5IHTDqXJrw6lwZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXAnfSA9ICdKZWd5dMOpcmvDqXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBDdXN0b21lckRhc2hib2FyZC4gTW9kdWxlIGlzIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentOpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50T3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgIGZvciBteSAkQXR0cmlidXRlICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbU5hbWVzKCkgKSB7CiAgICAgICAgJEdldFBhcmFteyRBdHRyaWJ1dGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEF0dHJpYnV0ZSApOwogICAgfQoKICAgICMgQUpBWCBmdW5jdGlvbiBjYWxsCiAgICBpZiAoICRHZXRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSB7CgogICAgICAgICMgZ2V0IGljb24gYW5kIGxvY2F0aW9uIGluZm8KICAgICAgICBteSAkT1NNT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAnKTsKCiAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oCiAgICAgICAgICAgICRPU01PYmplY3QtPkdlbmVyYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbW9kdWxlIHBhZ2UKICAgIGVsc2UgewoKICAgICAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuLCB1c2VkIGZvciBiYWNrbGlua3MKICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5WaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ09wZW5TdHJlZXRNYXAnKSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudE9wZW5TdHJlZXRNYXAnLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwoKICAgIH0KCn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AgentTicketOpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0T3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzaG93IG1vZHVsZSBwYWdlCiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ09wZW5TdHJlZXRNYXAnKSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50T3BlblN0cmVldE1hcCcsCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
        <File Location="Kernel/Modules/CustomerOpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkN1c3RvbWVyT3BlblN0cmVldE1hcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwoKICAgIGZvciBteSAkQXR0cmlidXRlICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbU5hbWVzKCkgKSB7CiAgICAgICAgJEdldFBhcmFteyRBdHRyaWJ1dGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEF0dHJpYnV0ZSApOwogICAgfQoKICAgICMgQUpBWCBmdW5jdGlvbiBjYWxsCiAgICBpZiAoICRHZXRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSB7CgogICAgICAgICMgZ2V0IGljb24gYW5kIGxvY2F0aW9uIGluZm8KICAgICAgICBteSAkT1NNT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXAnKTsKCiAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oCiAgICAgICAgICAgICRPU01PYmplY3QtPkdlbmVyYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbW9kdWxlIHBhZ2UKICAgIGVsc2UgewoKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lck9wZW5TdHJlZXRNYXAnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFNlbGYtPntNb2R1bGVSZWd9e1RpdGxlfSB8fCAnTWFwJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKCiAgICB9Cgp9CgoxOwo=</File>
        <File Location="Kernel/Output/HTML/Dashboard/OpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6Ok9wZW5TdHJlZXRNYXA7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjICAgICRTZWxmLT57UHJlZktleVNob3dufSAgICA9ICdVc2VyRGFzaGJvYXJkUHJlZicgLiAkU2VsZi0+e05hbWV9IC4gJy1TaG93bic7CiAgICAjICAgICRTZWxmLT57UHJlZktleVNob3duTWF4fSA9ICdVc2VyRGFzaGJvYXJkUHJlZicgLiAkU2VsZi0+e05hbWV9IC4gJy1TaG93bk1heCc7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUHJlZmVyZW5jZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgICMKICAgICMgICAgIyBkaXNhYmxlIHBhcmFtcwogICAgcmV0dXJuOwp9CgpzdWIgQ29uZmlnIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgIyAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAlQ29uZmlnID0gKAogICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAoKICAgICAgICAjICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30gLiAnQWN0aW9uPUFnZW50Q3VzdG9tZXJNYXAnLAogICAgICAgICMgICAgICAgIExpbmtUaXRsZSAgICAgICAgICAgICAgICAgPT4gJ0RldGFpbCcsCiAgICAgICAgIyAgICAgICAgUHJlZmVyZW5jZXNSZWxvYWRSZXF1aXJlZCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gJUNvbmZpZzsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQ29udGVudExhcmdlT3BlblN0cmVldE1hcCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFdpZHRoICA9PiAnMTAwJScsCiAgICAgICAgICAgIEhlaWdodCA9PiAnNDAwcHgnLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnREYXNoYm9hcmRPcGVuU3RyZWV0TWFwJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkQ29udGVudDsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/FilterElementPost/OpenStreetMapCIWidget.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RmlsdGVyRWxlbWVudFBvc3Q6Ok9wZW5TdHJlZXRNYXBDSVdpZGdldDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKICAgICMgZ2V0IHRoZSBhY3RpdmUgY2xhc3NlcwogICAgbXkgJFNob3dNYXBDbGFzc2VzID0gJENvbmZpZ09iamVjdC0+R2V0KCdPcGVuU3RyZWV0TWFwOjpTaG93Rm9yQ2xhc3NlcycpOwogICAgcmV0dXJuIDEgaWYgISRTaG93TWFwQ2xhc3NlczsKCiAgICAjIGdldCB0aGUgdmVyc2lvbiBvZiB0aGUgc2hvd24gQ0kKICAgIG15ICgkQ29uZmlnSXRlbUlEKSA9ICRTZWxmLT57UmVxdWVzdGVkVVJMfSA9fiAvQ29uZmlnSXRlbUlEPShcZCspLzsKICAgIHJldHVybiAxIGlmICEkQ29uZmlnSXRlbUlEOwoKICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgQ29uZmlnSXRlbUlEICA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICk7CgogICAgIyBpbnNlcnQgbWFwIGlmIENJIGJlbG9uZ3MgdG8gYWN0aXZlIGNsYXNzCiAgICBpZiAoICRTaG93TWFwQ2xhc3Nlcy0+eyAnSVRTTUNvbmZpZ0l0ZW06OicgLiAkVmVyc2lvbi0+e0NsYXNzfSB9ICkgewogICAgICAgIG15ICRPU01DYW52YXMgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdPcGVuU3RyZWV0TWFwV2lkZ2V0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHt9LAogICAgICAgICk7CgogICAgICAgICMgaW5zZXJ0IGF0IHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBzaWRlYmFyIGNvbHVtbgogICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHMvXihccys8XC9kaXY+XHMqXG5ccys8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4pLyRPU01DYW52YXNcbiQxL207CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentDashboardOpenStreetMap.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IFpudW55IEdtYkgsIGh0dHA6Ly96bnVueS5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb250ZW50TGFyZ2VPcGVuU3RyZWV0TWFwIikgJV0KPGRpdiBpZD0ib3BlbnN0cmVldG1hcC1jYW52YXMiIHN0eWxlPSJ3aWR0aDogWyUgRGF0YS5XaWR0aCAlXTsgaGVpZ2h0OiBbJSBEYXRhLkhlaWdodCAlXTsiPgogICAgPHA+CiAgICAgICAgICBbJSBUcmFuc2xhdGUoIkxvYWRpbmcuLi4iKSB8IGh0bWwgJV0KICAgIDwvcD4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDb250ZW50TGFyZ2VPcGVuU3RyZWV0TWFwIikgJV0K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentOpenStreetMap.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgY2xhc3M9Ik9wZW5TdHJlZXRNYXBXaW5kb3ciIGlkPSJPU00iPgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPGZpZ3VyZSBpZD0ib3BlbnN0cmVldG1hcC1jYW52YXMiIHN0eWxlPSdoZWlnaHQ6NzV2aDttYXJnaW46MHB4Oyc+CiAgICAgICAgPC9maWd1cmU+CiAgICA8L2Rpdj4KPC9kaXY+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/CustomerOpenStreetMap.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgaWQ9J29vb0NvbnRlbnQnIGNsYXNzPSdPU00nPgogICAgPGRpdiBpZD0nb29vSGVhZGVyJz4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKERhdGEuVGl0bGUpIHwgaHRtbCAlXTwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9J29vb01haW5Cb3gnPgogICAgICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIj4KICAgICAgICA8L2ZpZ3VyZT4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/Dashboard/TileOSMCanvas.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgaWQ9Im9vb1RpbGVbJSBEYXRhLlRpbGVJRCB8IGh0bWwgJV0iIGNsYXNzPSJvb29UaWxlIG9vb1RpbGVfT1NNQ2FudmFzIj4KICAgIDxmaWd1cmUgaWQ9Im9wZW5zdHJlZXRtYXAtY2FudmFzIj4KICAgIDwvZmlndXJlPgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/OpenStreetMapWidget.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJPcGVuU3RyZWV0TWFwIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZ3VyZSBpZD0ib3BlbnN0cmVldG1hcC1jYW52YXMiIHN0eWxlPSdoZWlnaHQ6MzAwcHg7bWFyZ2luOjBweDsnPgogICAgICAgICAgICAgICAgICAgIDwvZmlndXJlPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2Pgo=</File>
        <File Location="Kernel/System/OpenStreetMap/Icons/BasicCIInfo.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpJY29uczo6QmFzaWNDSUluZm87Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6Okljb25zOjpCYXNpY0NJSW5mbwoKPWhlYWQxIERFU0NSSVBUSU9OCgpEZWZpbmVzIHdoaWNoIGljb25zIHRvIHVzZSwgYmFzZWQgb24gc3RhdGVzLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4KCiAgICBteSAkSWNvbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpJY29uczo6QmFzaWNDSUluZm8tPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSBcJVBhcmFtOwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldEljb24oKQoKUmV0dXJucyB0aGUgaWNvbiBwYXRoIGluZm8uCgogICAgbXkgJEljb25QYXRoID0gJEljb25PYmplY3QtPkdldEljb24oCiAgICAgICAgVmVyc2lvbiA9PiAkVmVyc2lvbiwKICAgICk7Cgo9Y3V0CgpzdWIgR2V0SWNvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvVmVyc2lvbi8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIFNUQVRFOgogICAgZm9yIG15ICROYW1lICgga2V5cyAleyAkU2VsZi0+e1N0YXRlc30gfSApIHsKICAgICAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICV7ICRTZWxmLT57U3RhdGVzfXskTmFtZX0gfSApIHsKICAgICAgICAgICAgaWYgKCAhJFBhcmFte1ZlcnNpb259eyRBdHRyfSB8fCAkUGFyYW17VmVyc2lvbn17JEF0dHJ9IG5lICRTZWxmLT57U3RhdGVzfXskTmFtZX17JEF0dHJ9ICkgewogICAgICAgICAgICAgICAgbmV4dCBTVEFURTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB3ZSBmdWxsZmlsbCBhbGwgcmVxdWlyZW1lbnRzIGhlcmUKICAgICAgICByZXR1cm4gJFNlbGYtPntJY29uUGF0aHN9eyROYW1lfSBpZiAkU2VsZi0+e0ljb25QYXRoc317JE5hbWV9OwogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/System/OpenStreetMap/Line.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMaW5lOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxpbmUgLSBCYWNrZW5kIGZvciBJVFNNQ29uZmlnSXRlbSBjbGFzc2VzIGxpbmtlZCB0byB0d28gbG9jYXRpb25zCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbWFwIHNlY3Rpb24gYW5kIGljb24gbG9jYXRpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6TGluZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBHYXRoZXJJbmZvKCkKCkdhdGhlcnMgbG9jYXRpb24gYW5kIGljb24gaW5mby4KCiAgICBteSAlSW5mbyA9ICRCYWNrZW5kT2JqZWN0LT5HYXRoZXJJbmZvKAogICAgICAgIENsYXNzICAgICAgICA9PiAnTGluZV9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIEljb25QYXRoICAgICA9PiAndmFyL2h0dHBkL2h0ZG9jcy9Sb3RoZXJPU1MtT3BlblN0cmVldE1hcC8nICMgb3B0aW9uYWwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsOiBvbmx5IGNvbnNpZGVyIENvbmZpZ0l0ZW1JRCAxMjMsIGluc3RlYWQgb2Ygd2hvbGUgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgR2F0aGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQmFja2VuZERlZiBDbGFzcy8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgbXkgQENJczsKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgcHVzaCBAQ0lzLCAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHsgJFBhcmFte0NsYXNzfSB9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgIyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgY2xhc3MgYmFja2VuZHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJUxpbmtCYWNrZW5kRGVmCiAgICAgICAgPSBtYXAgeyAkXy0+e0NsYXNzfSA9PiAkXyB9IHZhbHVlcyAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ09wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnJykgLy8ge30gfTsKCiAgICAjIGNvbG9yIGRlZmluaXRpb25zCiAgICBteSAkSW5jaWRlbnRTdGF0ZUNvbG9yczsKICAgIGlmICggJFBhcmFte0JhY2tlbmREZWZ9e0xpbmVDb2xvcn0gZXEgIkluY2lkZW50U3RhdGUiICkgewogICAgICAgICRJbmNpZGVudFN0YXRlQ29sb3JzID0gJENvbmZpZ09iamVjdC0+R2V0KCdPcGVuU3RyZWV0TWFwOjpJbmNpZGVudFN0YXRlQ29sb3JzJyk7CiAgICB9CgogICAgI3VzZSBEYXRhOjpEdW1wZXI7CiAgICAjcHJpbnQgU1RERVJSICJ2bzYwIC0gQ0lzOiAiLkR1bXBlcihcQENJcyk7CiAgICBteSAoICRGcm9tLCAkVG8sICVJY29ucywgJUxpbmVzICk7CiAgICBDSToKICAgIGZvciBteSAkQ29uZmlnSXRlbSAoQENJcykgewoKICAgICAgICBteSAkTGlua0xpc3QgPSAkTGlua09iamVjdC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgICAgIEtleSAgICA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBARW5kczsKCiAgICAgICAgTElOS1M6CiAgICAgICAgZm9yIG15ICRMVHlwZXMgKCB2YWx1ZXMgJXskTGlua0xpc3R9ICkgewogICAgICAgICAgICBmb3IgbXkgJExEaXJzICggdmFsdWVzICV7JExUeXBlc30gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJENJTnVtcyAoIHZhbHVlcyAleyRMRGlyc30gKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRMaW5rZWRJdGVtICggdmFsdWVzICV7JENJTnVtc30gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkRW5kc1swXSAmJiAkTGlua2VkSXRlbS0+e0NsYXNzfSBlcSAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFbmRzWzBdID0gJExpbmtlZEl0ZW0tPntDb25maWdJdGVtSUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkRW5kc1sxXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IExJTktTOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkRW5kc1sxXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJExpbmtlZEl0ZW0tPntDbGFzc30gZXEgJFBhcmFte0JhY2tlbmREZWZ9e0xvY2F0aW9uSW5mb317TGlua2VkQ2xhc3Nlc31bMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVuZHNbMV0gPSAkTGlua2VkSXRlbS0+e0NvbmZpZ0l0ZW1JRH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRFbmRzWzBdICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTElOS1M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIEBFbmRzICE9IDIgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIHR3byBlbmRzISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG15IEBJbmZvOwogICAgICAgIGZvciBteSAkaSAoIDAsIDEgKSB7CiAgICAgICAgICAgIG15ICRCYWNrZW5kT2JqZWN0CiAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoICRMaW5rQmFja2VuZERlZnsgJFBhcmFte0JhY2tlbmREZWZ9e0xvY2F0aW9uSW5mb317TGlua2VkQ2xhc3Nlc31bJGldIH17QmFja2VuZH0gKTsKCiAgICAgICAgICAgICV7ICRJbmZvWyRpXSB9ID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEVuZHNbJGldLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WyRpXSwKICAgICAgICAgICAgICAgIEJhY2tlbmREZWYgICA9PiAkTGlua0JhY2tlbmREZWZ7ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WyRpXSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJEluZm9bJGlde0Zyb219IHx8ICEkSW5mb1skaV17VG99ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGNvb3JkaW5hdGVzIGZvdW5kIGZvciBsaW5rZWQgQ29uZmlnSXRlbTogJEVuZHNbJGldISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV4dCBDSTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRpICggMCwgMSApIHsKCiAgICAgICAgICAgICMgZGVmaW5lIGNvb3JkaW5hdGVzCiAgICAgICAgICAgIGlmICggISRGcm9tICkgewogICAgICAgICAgICAgICAgJEZyb20gPSBbICRJbmZvWyRpXXtGcm9tfVswXSwgJEluZm9bJGlde0Zyb219WzFdIF07CiAgICAgICAgICAgICAgICAkVG8gICA9IFsgJEluZm9bJGlde1RvfVswXSwgICAkSW5mb1skaV17VG99WzFdIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICRGcm9tLT5bMF0gPiAkSW5mb1skaV17RnJvbX1bMF0gKSB7ICRGcm9tLT5bMF0gPSAkSW5mb1skaV17RnJvbX1bMF0gfQogICAgICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzFdID4gJEluZm9bJGlde0Zyb219WzFdICkgeyAkRnJvbS0+WzFdID0gJEluZm9bJGlde0Zyb219WzFdIH0KICAgICAgICAgICAgICAgIGlmICggJFRvLT5bMF0gPCAkSW5mb1skaV17VG99WzBdICkgICAgIHsgJFRvLT5bMF0gICA9ICRJbmZvWyRpXXtUb31bMF0gfQogICAgICAgICAgICAgICAgaWYgKCAkVG8tPlsxXSA8ICRJbmZvWyRpXXtUb31bMV0gKSAgICAgeyAkVG8tPlsxXSAgID0gJEluZm9bJGlde1RvfVsxXSB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGljb25zIGlmIG9ubHkgdGhpcyBDb25maWdJdGVtIGlzIHNob3duCiAgICAgICAgICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gJiYgJEluZm9bJGlde0ljb25zfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0ciAocXcvUGF0aCBMYXRpdHVkZSBMb25naXR1ZGUgTGluay8pIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRJY29uc3skQXR0cn0gfSwgQHsgJEluZm9bJGlde0ljb25zfXskQXR0cn0gfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbGluZSAoTGlua1NlbGYgb25seSBmb3IgYWdlbnRzKQogICAgICAgIHB1c2ggQHsgJExpbmVze0Zyb20wfSB9LCAkSW5mb1swXXtGcm9tfVswXTsKICAgICAgICBwdXNoIEB7ICRMaW5lc3tGcm9tMX0gfSwgJEluZm9bMF17RnJvbX1bMV07CiAgICAgICAgcHVzaCBAeyAkTGluZXN7VG8wfSB9LCAgICRJbmZvWzFde0Zyb219WzBdOwogICAgICAgIHB1c2ggQHsgJExpbmVze1RvMX0gfSwgICAkSW5mb1sxXXtGcm9tfVsxXTsKICAgICAgICBwdXNoIEB7ICRMaW5lc3tDb2xvcn0gfSwKICAgICAgICAgICAgJEluY2lkZW50U3RhdGVDb2xvcnMKICAgICAgICAgICAgPyAkSW5jaWRlbnRTdGF0ZUNvbG9ycy0+eyAkQ29uZmlnSXRlbS0+e0N1ckluY2lTdGF0ZX0gfSB8fCAiIzU1MjI0NCIKICAgICAgICAgICAgOiAkUGFyYW17QmFja2VuZERlZn17TGluZUNvbG9yfSB8fCAiIzU1MjI0NCI7CiAgICAgICAgcHVzaCBAeyAkTGluZXN7V2VpZ2h0fSB9LCAkUGFyYW17QmFja2VuZERlZn17TGluZVdpZHRofSB8fCA1OwogICAgICAgIHB1c2ggQHsgJExpbmVze0xpbmt9IH0sCiAgICAgICAgICAgICggJFBhcmFte0JhY2tlbmREZWZ9e0xpbmtTZWxmfSAmJiAkUGFyYW17VXNlcklEfSApCiAgICAgICAgICAgID8gIkFjdGlvbj1BZ2VudElUU01Db25maWdJdGVtWm9vbTtDb25maWdJdGVtSUQ9JENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9IgogICAgICAgICAgICA6ICcnOwoKICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgICAgIExpbmVzID0+IFwlTGluZXMsCiAgICApOwoKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVE9CTyBwcm9qZWN0IChMPGh0dHBzOi8vb3RvYm8ub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>
        <File Location="Kernel/System/OpenStreetMap/LocalObject.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhbE9iamVjdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhbE9iamVjdCAtIEJhY2tlbmQgZm9yIElUU01Db25maWdJdGVtIGNsYXNzZXMgbGlua2VkIHRvIG9uZSBsb2NhdGlvbgoKPWhlYWQxIERFU0NSSVBUSU9OCgpGdW5jdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIG1hcCBzZWN0aW9uIGFuZCBpY29uIGxvY2F0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxvY2FsT2JqZWN0Jyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdhdGhlckluZm8oKQoKR2F0aGVycyBsb2NhdGlvbiBhbmQgaWNvbiBpbmZvLgoKICAgIG15ICVJbmZvID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdDbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIEljb25QYXRoICAgICA9PiAndmFyL2h0dHBkL2h0ZG9jcy9Sb3RoZXJPU1MtT3BlblN0cmVldE1hcC8nICMgb3B0aW9uYWwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsOiBvbmx5IGNvbnNpZGVyIENvbmZpZ0l0ZW1JRCAxMjMsIGluc3RlYWQgb2Ygd2hvbGUgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgR2F0aGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQmFja2VuZERlZiBDbGFzcy8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgbXkgQENJczsKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgcHVzaCBAQ0lzLCAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHsgJFBhcmFte0NsYXNzfSB9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgIyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgY2xhc3MgYmFja2VuZHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJUxpbmtCYWNrZW5kRGVmCiAgICAgICAgPSBtYXAgeyAkXy0+e0NsYXNzfSA9PiAkXyB9IHZhbHVlcyAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ09wZW5TdHJlZXRNYXA6OkNsYXNzQ29uZmlnJykgLy8ge30gfTsKCiAgICBteSAoICRGcm9tLCAkVG8sICVJY29ucyApOwogICAgQ0k6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW0gKEBDSXMpIHsKCiAgICAgICAgbXkgJExpbmtMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBLZXkgICAgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJExvY2F0aW9uSUQ7CgogICAgICAgIExJTktTOgogICAgICAgIGZvciBteSAkTFR5cGVzICggdmFsdWVzICV7JExpbmtMaXN0fSApIHsKICAgICAgICAgICAgZm9yIG15ICRMRGlycyAoIHZhbHVlcyAleyRMVHlwZXN9ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRDSU51bXMgKCB2YWx1ZXMgJXskTERpcnN9ICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkTGlua2VkSXRlbSAoIHZhbHVlcyAleyRDSU51bXN9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkTGlua2VkSXRlbS0+e0NsYXNzfSBlcSAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMb2NhdGlvbklEID0gJExpbmtlZEl0ZW0tPntDb25maWdJdGVtSUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBMSU5LUzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRCYWNrZW5kT2JqZWN0CiAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCggJExpbmtCYWNrZW5kRGVmeyAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSB9e0JhY2tlbmR9ICk7CgogICAgICAgIG15ICVJbmZvID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkTG9jYXRpb25JRCwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WzBdLAogICAgICAgICAgICBCYWNrZW5kRGVmICAgPT4gJExpbmtCYWNrZW5kRGVmeyAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSB9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRJbmZve0Zyb219IHx8ICEkSW5mb3tUb30gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gY29vcmRpbmF0ZXMgZm91bmQgZm9yIGxpbmtlZCBDb25maWdJdGVtOiAkTG9jYXRpb25JRCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IENJOwogICAgICAgIH0KCiAgICAgICAgIyBkZWZpbmUgY29vcmRpbmF0ZXMKICAgICAgICBpZiAoICEkRnJvbSApIHsKICAgICAgICAgICAgJEZyb20gPSBbICRJbmZve0Zyb219WzBdLCAkSW5mb3tGcm9tfVsxXSBdOwogICAgICAgICAgICAkVG8gICA9IFsgJEluZm97VG99WzBdLCAgICRJbmZve1RvfVsxXSBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzBdID4gJEluZm97RnJvbX1bMF0gKSB7ICRGcm9tLT5bMF0gPSAkSW5mb3tGcm9tfVswXSB9CiAgICAgICAgICAgIGlmICggJEZyb20tPlsxXSA+ICRJbmZve0Zyb219WzFdICkgeyAkRnJvbS0+WzFdID0gJEluZm97RnJvbX1bMV0gfQogICAgICAgICAgICBpZiAoICRUby0+WzBdIDwgJEluZm97VG99WzBdICkgICAgIHsgJFRvLT5bMF0gICA9ICRJbmZve1RvfVswXSB9CiAgICAgICAgICAgIGlmICggJFRvLT5bMV0gPCAkSW5mb3tUb31bMV0gKSAgICAgeyAkVG8tPlsxXSAgID0gJEluZm97VG99WzFdIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIGljb24KICAgICAgICAjICAgICAgICBwdXNoIEB7ICRJY29uc3tQYXRofSB9LCAgICAgICRQYXJhbXtCYWNrZW5kRGVmfXtJY29uUGF0aH07CiAgICAgICAgcHVzaCBAeyAkSWNvbnN7UGF0aH0gfSwgICAgICAkSW5mb3tJY29uc317UGF0aH1bMF07CiAgICAgICAgcHVzaCBAeyAkSWNvbnN7TGF0aXR1ZGV9IH0sICAkSW5mb3tJY29uc317TGF0aXR1ZGV9WzBdOwogICAgICAgIHB1c2ggQHsgJEljb25ze0xvbmdpdHVkZX0gfSwgJEluZm97SWNvbnN9e0xvbmdpdHVkZX1bMF07CiAgICAgICAgcHVzaCBAeyAkSWNvbnN7TGlua30gfSwgICAgICAkSW5mb3tJY29uc317TGlua31bMF07CgogICAgICAgICMgICAgICAgIHB1c2ggQHsgJEljb25ze0xpbmt9IH0sICAgICAgKCAkUGFyYW17QmFja2VuZERlZn17TGlua1NlbGZ9ICkgPyAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0iIDogJyc7CgogICAgfQoKICAgIHJldHVybiAoCiAgICAgICAgRnJvbSAgPT4gJEZyb20sCiAgICAgICAgVG8gICAgPT4gJFRvLAogICAgICAgIEljb25zID0+IFwlSWNvbnMsCiAgICApOwoKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVE9CTyBwcm9qZWN0IChMPGh0dHBzOi8vb3RvYm8ub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=</File>
        <File Location="Kernel/System/OpenStreetMap/Location.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpMb2NhdGlvbiAtIEJhY2tlbmQgZm9yIElUU01Db25maWdJdGVtOjpMb2NhdGlvbiBjbGFzc2VzIGNvbnRhaW5pbmcgR1BTTG9uZ2l0dWRlIGFuZCBHUFNMYXRpdHVkZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpGdW5jdGlvbnMgdG8gZ2VuZXJhdGUgdGhlIG1hcCBzZWN0aW9uIGFuZCBpY29uIGxvY2F0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OkxvY2F0aW9uJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdhdGhlckluZm8oKQoKR2F0aGVycyBsb2NhdGlvbiBhbmQgaWNvbiBpbmZvLgoKICAgIG15ICVJbmZvID0gJEJhY2tlbmRPYmplY3QtPkdhdGhlckluZm8oCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdMb2NhdGlvbl9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWw6IG9ubHkgY29uc2lkZXIgQ29uZmlnSXRlbUlEIDEyMywgaW5zdGVhZCBvZiB3aG9sZSBjbGFzcwogICAgKTsKCj1jdXQKCnN1YiBHYXRoZXJJbmZvIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgIGZvciBteSAkTmVlZGVkIChxdy9CYWNrZW5kRGVmIENsYXNzLykgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENvbmZpZ0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKTsKCiAgICBteSBAQ0lzOwogICAgaWYgKCAkUGFyYW17Q29uZmlnSXRlbUlEfSApIHsKICAgICAgICBwdXNoIEBDSXMsICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0NvbmZpZ0l0ZW1JRHN9ICkgewogICAgICAgIGZvciBteSAkSUQgKCAkUGFyYW17Q29uZmlnSXRlbUlEc30tPkAqICkgewogICAgICAgICAgICBwdXNoIEBDSXMsICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtR2V0KAogICAgICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRJRCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHsgJFBhcmFte0NsYXNzfSB9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkSWNvbk9iamVjdDsKICAgIGlmICggJFBhcmFte0JhY2tlbmREZWZ9e0ljb25PdmVycmlkZX0gKSB7CiAgICAgICAgbXkgJE92ZXJyaWRlQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPcGVuU3RyZWV0TWFwOjpJY29uT3ZlcnJpZGUnKS0+eyAkUGFyYW17QmFja2VuZERlZn17SWNvbk92ZXJyaWRlfSB9OwoKICAgICAgICAjIGxvYWQgdGhlIG1vZHVsZQogICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoICRPdmVycmlkZUNvbmZpZy0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGxvYWQgdGhlIG92ZXJyaWRlIG1vZHVsZSAkT3ZlcnJpZGVDb25maWctPntNb2R1bGV9ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgbmV3IGluc3RhbmNlCiAgICAgICAgJEljb25PYmplY3QgPSAkT3ZlcnJpZGVDb25maWctPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICV7JE92ZXJyaWRlQ29uZmlnfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICggJEZyb20sICRUbywgJUljb25zICk7CiAgICBDSToKICAgIGZvciBteSAkQ29uZmlnSXRlbSAoQENJcykgewogICAgICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIFZlcnNpb25JRCAgICAgPT4gJENvbmZpZ0l0ZW0tPntMYXN0VmVyc2lvbklEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRMYXRpdHVkZSAgPSAkVmVyc2lvbi0+eyJEeW5hbWljRmllbGRfTG9jYXRpb24tTGF0aXR1ZGUifSAgfHwgdW5kZWY7CiAgICAgICAgbXkgJExvbmdpdHVkZSA9ICRWZXJzaW9uLT57IkR5bmFtaWNGaWVsZF9Mb2NhdGlvbi1Mb25naXR1ZGUifSB8fCB1bmRlZjsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkTGF0aXR1ZGUgfHwgIWRlZmluZWQgJExvbmdpdHVkZSApIHsKICAgICAgICAgICAgbmV4dCBDSTsKICAgICAgICB9CgogICAgICAgICMgZGVmaW5lIGNvb3JkaW5hdGVzCiAgICAgICAgaWYgKCAhJEZyb20gKSB7CiAgICAgICAgICAgICRGcm9tID0gWyAkTGF0aXR1ZGUsICRMb25naXR1ZGUgXTsKICAgICAgICAgICAgJFRvICAgPSBbICRMYXRpdHVkZSwgJExvbmdpdHVkZSBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkRnJvbS0+WzBdID4gJExhdGl0dWRlICkgIHsgJEZyb20tPlswXSA9ICRMYXRpdHVkZSB9CiAgICAgICAgICAgIGlmICggJEZyb20tPlsxXSA+ICRMb25naXR1ZGUgKSB7ICRGcm9tLT5bMV0gPSAkTG9uZ2l0dWRlIH0KICAgICAgICAgICAgaWYgKCAkVG8tPlswXSA8ICRMYXRpdHVkZSApICAgIHsgJFRvLT5bMF0gICA9ICRMYXRpdHVkZSB9CiAgICAgICAgICAgIGlmICggJFRvLT5bMV0gPCAkTG9uZ2l0dWRlICkgICB7ICRUby0+WzFdICAgPSAkTG9uZ2l0dWRlIH0KICAgICAgICB9CgogICAgICAgIG15ICRJY29uID0gJFBhcmFte0JhY2tlbmREZWZ9e0ljb25QYXRofTsKICAgICAgICBpZiAoICRQYXJhbXtCYWNrZW5kRGVmfXtJY29uT3ZlcnJpZGV9ICkgewogICAgICAgICAgICBteSAkT3ZlcnJpZGVJY29uID0gJEljb25PYmplY3QtPkdldEljb24oCiAgICAgICAgICAgICAgICBWZXJzaW9uID0+ICRWZXJzaW9uLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRPdmVycmlkZUljb24pIHsKICAgICAgICAgICAgICAgICRJY29uID0gJE92ZXJyaWRlSWNvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwbGFjZSBJY29uIChMaW5rU2VsZiBvbmx5IGZvciBhZ2VudHMpCiAgICAgICAgaWYgKCRJY29uKSB7CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze1BhdGh9IH0sICAgICAgJEljb247CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze0xhdGl0dWRlfSB9LCAgJExhdGl0dWRlOwogICAgICAgICAgICBwdXNoIEB7ICRJY29uc3tMb25naXR1ZGV9IH0sICRMb25naXR1ZGU7CiAgICAgICAgICAgIHB1c2ggQHsgJEljb25ze0xpbmt9IH0sCiAgICAgICAgICAgICAgICAoICRQYXJhbXtCYWNrZW5kRGVmfXtMaW5rU2VsZn0gJiYgJFBhcmFte1VzZXJJRH0gKQogICAgICAgICAgICAgICAgPyAiQWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0iCiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICBwdXNoIEB7ICRJY29uc3tUb29sdGlwfSB9LAogICAgICAgICAgICAgICAgKCAkUGFyYW17QmFja2VuZERlZn17VG9vbHRpcH0gKQogICAgICAgICAgICAgICAgPyAkVmVyc2lvbi0+e05hbWV9CiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgIEZyb20gID0+ICRGcm9tLAogICAgICAgIFRvICAgID0+ICRUbywKICAgICAgICBJY29ucyA9PiBcJUljb25zLAogICAgKTsKCn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RPQk8gcHJvamVjdCAoTDxodHRwczovL290b2JvLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK</File>
        <File Location="Kernel/System/OpenStreetMap/Section.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOjpTZWN0aW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok9wZW5TdHJlZXRNYXA6OlNlY3Rpb24gLSBCYWNrZW5kIGZvciBJVFNNQ29uZmlnSXRlbSBjbGFzc2VzIGxpbmtlZCB0byB0d28gbG9jYXRpb25zCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbWFwIHNlY3Rpb24gYW5kIGljb24gbG9jYXRpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3BlblN0cmVldE1hcDo6U2VjdGlvbicpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBHYXRoZXJJbmZvKCkKCkdhdGhlcnMgbG9jYXRpb24gYW5kIGljb24gaW5mby4KCiAgICBteSAlSW5mbyA9ICRCYWNrZW5kT2JqZWN0LT5HYXRoZXJJbmZvKAogICAgICAgIENsYXNzICAgICAgICA9PiAnTGluZV9DbGFzcycsCiAgICAgICAgQmFja2VuZERlZiAgID0+ICRCYWNrZW5kRGVmLAogICAgICAgIEljb25QYXRoICAgICA9PiAndmFyL2h0dHBkL2h0ZG9jcy9Sb3RoZXJPU1MtT3BlblN0cmVldE1hcC8nICMgb3B0aW9uYWwKICAgICAgICBDb25maWdJdGVtSUQgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsOiBvbmx5IGNvbnNpZGVyIENvbmZpZ0l0ZW1JRCAxMjMsIGluc3RlYWQgb2Ygd2hvbGUgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgR2F0aGVySW5mbyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQmFja2VuZERlZiBDbGFzcy8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CiAgICBteSAkTGlua09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CiAgICBteSAkUGFyZW50Q2xhc3MgICAgICA9ICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9WzBdOwoKICAgICMgc2VjdGlvbnMgYXJlIGRyYXduIGFzIHBhcnRzIG9mIHRoZSBsaW5rZWQgY2xhc3MsIHRoZXkgbmVlZCB0byBiZSBnYXRoZXJlZCBmaXJzdAogICAgbXkgQENJczsKICAgIGlmICggJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgbXkgJExpbmtMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBLZXkgICAgPT4gJFBhcmFte0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBMSU5LUzoKICAgICAgICBmb3IgbXkgJExUeXBlcyAoIHZhbHVlcyAleyRMaW5rTGlzdH0gKSB7CiAgICAgICAgICAgIGZvciBteSAkTERpcnMgKCB2YWx1ZXMgJXskTFR5cGVzfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkQ0lOdW1zICggdmFsdWVzICV7JExEaXJzfSApIHsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJExpbmtlZEl0ZW0gKCB2YWx1ZXMgJXskQ0lOdW1zfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJExpbmtlZEl0ZW0tPntDbGFzc30gZXEgJFBhcmVudENsYXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQENJcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbUdldCggQ29uZmlnSXRlbUlEID0+ICRMaW5rZWRJdGVtLT57Q29uZmlnSXRlbUlEfSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTElOS1M7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICFAQ0lzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAiTm8gbGluayBvZiBjbGFzcyAkUGFyYW17QmFja2VuZERlZn17TG9jYXRpb25JbmZvfXtMaW5rZWRDbGFzc2VzfVswXSBmb3VuZCBmb3IgQ29uZmlnSXRlbUlEICRQYXJhbXtDb25maWdJdGVtSUR9ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBwdXNoIEBDSXMsIEB7CiAgICAgICAgICAgICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtUmVzdWx0TGlzdCgKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJENsYXNzVG9JRHskUGFyZW50Q2xhc3N9LAogICAgICAgICAgICApCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBjbGFzcyBiYWNrZW5kcwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAlTGlua0JhY2tlbmREZWYKICAgICAgICA9IG1hcCB7ICRfLT57Q2xhc3N9ID0+ICRfIH0gdmFsdWVzICV7ICRDb25maWdPYmplY3QtPkdldCgnT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcnKSAvLyB7fSB9OwogICAgbXkgJFBhcmVudE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoICRMaW5rQmFja2VuZERlZnskUGFyZW50Q2xhc3N9e0JhY2tlbmR9ICk7CgogICAgbXkgKCAkRnJvbSwgJFRvLCAlSWNvbnMsICVMaW5lcyApOwoKICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgcGFyZW50IENJcwogICAgQ0k6CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW0gKEBDSXMpIHsKCiAgICAgICAgbXkgJVBhcmVudEluZm8gPSAkUGFyZW50T2JqZWN0LT5HYXRoZXJJbmZvKAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJFBhcmVudENsYXNzLAogICAgICAgICAgICBCYWNrZW5kRGVmICAgPT4gJExpbmtCYWNrZW5kRGVmeyRQYXJlbnRDbGFzc30sCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbS0+e0NvbmZpZ0l0ZW1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJExpbmtMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgICAgIE9iamVjdCA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICBLZXkgICAgPT4gJENvbmZpZ0l0ZW0tPntDb25maWdJdGVtSUR9LAogICAgICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyAgICBteSBAU2VjdGlvbnM7CgogICAgICAgICMgaGllciB3ZWl0ZXIuLi4KICAgICAgICAjICAgICAgICBMSU5LUzoKICAgICAgICAjICAgICAgICBmb3IgbXkgJExUeXBlcyAoIHZhbHVlcyAleyAkTGlua0xpc3QgfSApIHsKICAgICAgICAjICAgICAgICAgIGZvciBteSAkTERpcnMgKCB2YWx1ZXMgJXsgJExUeXBlcyB9ICkgewogICAgICAgICMgICAgICAgICAgICBmb3IgbXkgJENJTnVtcyAoIHZhbHVlcyAleyAkTERpcnMgfSApIHsKICAgICAgICAjICAgICAgICAgICAgICBmb3IgbXkgJExpbmtlZEl0ZW0gKCB2YWx1ZXMgJXsgJENJTnVtcyB9ICkgewogICAgICAgICMKICAgICAgICAjICAgICAgICAgICAgICAgIGlmICggISRFbmRzWzBdICYmICRMaW5rZWRJdGVtLT57Q2xhc3N9IGVxICRQYXJhbXtCYWNrZW5kRGVmfXtMb2NhdGlvbkluZm99e0xpbmtlZENsYXNzZXN9ICkgewogICAgICAgICMgICAgICAgICAgICAgICAgICAgICRFbmRzWzBdID0gJExpbmtlZEl0ZW0tPntDb25maWdJdGVtSUR9OwogICAgICAgICMgICAgICAgICAgICAgICAgICAgIGlmICggJEVuZHNbMV0gKSB7CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgTElOS1M7CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICMgICAgICAgICAgICAgICAgfQogICAgICAgICMgICAgICAgICAgICAgICAgZWxzaWYgKCAhJEVuZHNbMV0gJiYgJExpbmtlZEl0ZW0tPntDbGFzc30gZXEgJFBhcmFte0JhY2tlbmREZWZ9e0xvY2F0aW9uSW5mb317TGlua2VkQ2xhc3Nlc31bMV0gKSB7CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgJEVuZHNbMV0gPSAkTGlua2VkSXRlbS0+e0NvbmZpZ0l0ZW1JRH07CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgaWYgKCAkRW5kc1swXSApIHsKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBMSU5LUzsKICAgICAgICAjICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgIyAgICAgICAgICAgICAgICB9CiAgICAgICAgIwogICAgICAgICMgICAgICAgICAgICAgIH0KICAgICAgICAjICAgICAgICAgICAgfQogICAgICAgICMgICAgICAgICAgfQogICAgICAgICMgICAgICAgIH0KICAgICAgICAjCiAgICB9CgogICAgIyN1c2UgRGF0YTo6RHVtcGVyOwogICAgIyNwcmludCBTVERFUlIgInZvNjAgLSBJY29uczogIi5EdW1wZXIoXCVJY29ucyk7CiAgICAjI3ByaW50IFNUREVSUiAidm82MCAtIExpbmVzOiAiLkR1bXBlcihcJUxpbmVzKTsKICAgICMKICAgIHJldHVybiAoCiAgICAgICAgRnJvbSAgPT4gJEZyb20sCiAgICAgICAgVG8gICAgPT4gJFRvLAogICAgICAgIEljb25zID0+IFwlSWNvbnMsCiAgICAgICAgTGluZXMgPT4gXCVMaW5lcywKICAgICk7Cgp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UT0JPIHByb2plY3QgKEw8aHR0cHM6Ly9vdG9iby5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==</File>
        <File Location="Kernel/System/OpenStreetMap.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lckdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwCgo9aGVhZDEgREVTQ1JJUFRJT04KCkZ1bmN0aW9ucyB0byBnZW5lcmF0ZSB0aGUgbWFwIHNlY3Rpb24gYW5kIGljb24gbG9jYXRpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgbXkgJE9TTU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpPcGVuU3RyZWV0TWFwJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdlbmVyYXRlUmVzcG9uc2UoKQoKR2VuZXJhdGVzIHRoZSBSZXNwb25zZSBjb250YWluaW5nIGFsbCB0aGUgaW5mby4KCiAgICBteSAkUmVzcG9uc2UgPSAkT1NNT2JqZWN0LT5HZW5lcmF0ZVJlc3BvbnNlKAogICAgICAgIE9yaWdpbmFsQWN0aW9uID0+IEFjdGlvbiwKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJhdGVSZXNwb25zZSB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUmV0dXJuRXJyID0gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnRnJvbScsCiAgICAgICAgICAgIERhdGEgPT4gWyAtMTAsIC0xMCBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdUbycsCiAgICAgICAgICAgIERhdGEgPT4gWyAxMCwgMTAgXSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgZGF0YQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17T3JpZ2luYWxBY3Rpb259ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPcmlnaW5hbEFjdGlvbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRSZXR1cm5FcnI7CiAgICB9CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgdGhlIHRlbXBsYXRlcyBmb3IgYWxsIGFjdGlvbnMKICAgIG15ICRUZW1wbGF0ZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09wZW5TdHJlZXRNYXA6OkFjdGlvbkNvbmZpZycpOwogICAgaWYgKCAhJFRlbXBsYXRlcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdObyBBY3Rpb25Db25maWdzIGZvdW5kIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFJldHVybkVycjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gZXEgJ0NvbW1vbkFjdGlvbicgKSB7CiAgICAgICAgJFBhcmFte09yaWdpbmFsQWN0aW9ufSA9ICRQYXJhbXtVc2VySUR9ID8gKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpDb21tb25QYXJhbScpLT57J0FjdGlvbid9IHx8ICdDb21tb25BY3Rpb24nICkgOgogICAgICAgICAgICAoICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJGcm9udGVuZDo6Q29tbW9uUGFyYW0nKS0+eydBY3Rpb24nfSB8fCAnQ3VzdG9tZXJDb21tb25BY3Rpb24nICk7CiAgICB9CgogICAgIyBnZXQgdGhlIG1hcCBjb25maWcgZm9yIHRoZSBjdXJyZW50IGFjdGlvbgogICAgbXkgJE1hcENvbmZpZzsKICAgIFRFTVBMQVRFOgogICAgZm9yIG15ICRDdXJyQ29uZiAoIHZhbHVlcyAleyRUZW1wbGF0ZXN9ICkgewoKICAgICAgICBpZiAoICRDdXJyQ29uZi0+e0FjdGlvbn0gZXEgJFBhcmFte09yaWdpbmFsQWN0aW9ufSApIHsKICAgICAgICAgICAgJE1hcENvbmZpZyA9ICRDdXJyQ29uZjsKICAgICAgICAgICAgbGFzdCBURU1QTEFURTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJE1hcENvbmZpZyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBBY3Rpb25Db25maWcgZm91bmQgZm9yICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybiAkUmV0dXJuRXJyOwogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICBteSAkQ3VzdG9tZXJHcm91cE9iamVjdCAgPSAoICRQYXJhbXtDdXN0b21lclVzZXJJRH0gJiYgJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lckdyb3VwU3VwcG9ydCcpICkgPyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcpIDogdW5kZWY7CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJUNsYXNzSURzOwogICAgewogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICk7CiAgICAgICAgJUNsYXNzSURzID0gcmV2ZXJzZSAleyRDbGFzc0xpc3R9OwogICAgfQoKICAgICMgZ2V0IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGNsYXNzIGJhY2tlbmRzCiAgICBteSAlQmFja2VuZERlZiA9IG1hcCB7ICRfLT57Q2xhc3N9ID0+ICRfIH0gdmFsdWVzICV7ICRDb25maWdPYmplY3QtPkdldCgnT3BlblN0cmVldE1hcDo6Q2xhc3NDb25maWcnKSB9OwoKICAgIG15ICVDb25maWdJdGVtSURzQnlDbGFzczsKICAgIGlmICggJFBhcmFte09yaWdpbmFsQWN0aW9ufSBlcSAnQWdlbnRUaWNrZXRPcGVuU3RyZWV0TWFwJyApIHsKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKICAgICAgICBteSAlQ2xhc3NUb0lEICAgICAgICAgICAgPSByZXZlcnNlICV7ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycgKSB9OwoKICAgICAgICBteSBAQ0lzID0gJFNlbGYtPl9HZXRDb25maWdJdGVtc0xpbmtlZFRvVGlja2V0cygKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBBY3Rpb25Db25maWcgPT4gJE1hcENvbmZpZywKICAgICAgICApOwoKICAgICAgICAjIGJ1bmRsZSBhbGwgQ0lzIGZvciBlYWNoIGNsYXNzCiAgICAgICAgZm9yIG15ICRDb25maWdJdGVtIChAQ0lzKSB7CiAgICAgICAgICAgIHB1c2ggQHsgJENvbmZpZ0l0ZW1JRHNCeUNsYXNzeyAkQ29uZmlnSXRlbS0+e0NsYXNzfSB9IH0sICRDb25maWdJdGVtLT57Q29uZmlnSXRlbUlEfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgKCAkUmV0dXJuLCAlSWNvbnMsICVMaW5lcyApOwogICAgQ0FURUdPUlk6CiAgICBmb3IgbXkgJENhdGVnb3J5ICggQHsgJE1hcENvbmZpZy0+e1Nob3d9IH0gKSB7CiAgICAgICAgbXkgJURhdGE7CiAgICAgICAgaWYgKCAkQ2F0ZWdvcnkgZXEgJ1NlbGYnICkgewogICAgICAgICAgICAlRGF0YSA9ICRTZWxmLT5fQ2xhc3NHZXQoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBCYWNrZW5kRGVmID0+IFwlQmFja2VuZERlZiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISREYXRhe0NsYXNzfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkUmV0dXJuRXJyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEFkZCBDb25maWdJdGVtSUQgb3Igc2ltaWxhcgogICAgICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gZXEgJ0FnZW50VGlja2V0T3BlblN0cmVldE1hcCcgKSB7CiAgICAgICAgICAgIG5leHQgQ0FURUdPUlkgaWYgISRDb25maWdJdGVtSURzQnlDbGFzc3skQ2F0ZWdvcnl9OwoKICAgICAgICAgICAgJURhdGEgPSAoCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgID0+ICRDYXRlZ29yeSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW1JRHMgPT4gJENvbmZpZ0l0ZW1JRHNCeUNsYXNzeyRDYXRlZ29yeX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAlRGF0YSA9ICgKICAgICAgICAgICAgICAgIENsYXNzICAgPT4gJENhdGVnb3J5LAogICAgICAgICAgICAgICAgQ2xhc3NJRCA9PiAkQ2xhc3NJRHN7JENhdGVnb3J5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBpdGVtcyBvbmx5IGlmIHVzZXIgaGFzIGFjY2VzcyByaWdodHMKICAgICAgICBteSAkSGFzQWNjZXNzOwoKICAgICAgICAjIGFnZW50cwogICAgICAgIGlmICggJFBhcmFte09yaWdpbmFsQWN0aW9ufSBlcSAnQWdlbnRUaWNrZXRPcGVuU3RyZWV0TWFwJyApIHsKICAgICAgICAgICAgJEhhc0FjY2VzcyA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgICAgICRIYXNBY2Nlc3MgPSAkQ29uZmlnSXRlbU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFNjb3BlICAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgICAgIENsYXNzSUQgPT4gJERhdGF7Q2xhc3NJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAncm8nLAogICAgICAgICAgICAgICAgTG9nTm8gICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjdXN0b21lciB1c2VycyB3aXRoIGdyb3VwIHN1cHBvcnQKICAgICAgICBlbHNpZiAoJEN1c3RvbWVyR3JvdXBPYmplY3QpIHsKICAgICAgICAgICAgbXkgJENsYXNzSXRlbSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkRGF0YXtDbGFzc0lEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHVzZXIgZ3JvdXBzCiAgICAgICAgICAgIG15IEBHcm91cElEcyA9ICRDdXN0b21lckdyb3VwT2JqZWN0LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgICAgICAgICAgUmVzdWx0ID0+ICdJRCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGxvb2tpbmcgZm9yIGdyb3VwIGlkCiAgICAgICAgICAgIEdST1VQOgogICAgICAgICAgICBmb3IgbXkgJEdyb3VwSUQgKEBHcm91cElEcykgewogICAgICAgICAgICAgICAgaWYgKCAkQ2xhc3NJdGVtLT57UGVybWlzc2lvbn0gJiYgJEdyb3VwSUQgZXEgJENsYXNzSXRlbS0+e1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgICAgICRIYXNBY2Nlc3MgPSAxOwogICAgICAgICAgICAgICAgICAgIGxhc3QgR1JPVVA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY3VzdG9tZXIgdXNlcnMgd2l0aG91dCBncm91cCBzdXBwb3J0IChzaG93IGV2ZXJ5dGhpbmcgd2hpY2ggaXMgY29uZmlndXJlZCkKICAgICAgICBlbHNpZiAoICRQYXJhbXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICRIYXNBY2Nlc3MgPSAxOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBDQVRFR09SWSBpZiAhJEhhc0FjY2VzczsKCiAgICAgICAgaWYgKCAhJEJhY2tlbmREZWZ7ICREYXRhe0NsYXNzfSB9e0JhY2tlbmR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gQmFja2VuZCBkZWZpbmVkIGZvciAkRGF0YXtDbGFzc30hIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRSZXR1cm5FcnI7CiAgICAgICAgfQoKICAgICAgICBteSAlSW5mbyA9ICRLZXJuZWw6Ok9NLT5HZXQoICRCYWNrZW5kRGVmeyAkRGF0YXtDbGFzc30gfXtCYWNrZW5kfSApLT5HYXRoZXJJbmZvKAogICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgQmFja2VuZERlZiA9PiAkQmFja2VuZERlZnsgJERhdGF7Q2xhc3N9IH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0gLy8gdW5kZWYsCiAgICAgICAgKTsKCiAgICAgICAgIyBBZGp1c3QgbWFwIGN1dG91dAogICAgICAgIGlmICggIWRlZmluZWQgJFJldHVybiAmJiAkSW5mb3tGcm9tfSApIHsKICAgICAgICAgICAgJFJldHVybiA9IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRJbmZve0Zyb219LAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0Zyb20nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRJbmZve1RvfSwKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUbycsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEluZm97RnJvbX0gKSB7CiAgICAgICAgICAgIGlmICggJEluZm97RnJvbX1bMF0gPCAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzBdICkgeyAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzBdID0gJEluZm97RnJvbX1bMF0gfQogICAgICAgICAgICBpZiAoICRJbmZve0Zyb219WzFdIDwgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSApIHsgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSA9ICRJbmZve0Zyb219WzFdIH0KICAgICAgICAgICAgaWYgKCAkSW5mb3tUb31bMF0gPiAkUmV0dXJuLT5bMV0tPntEYXRhfS0+WzBdICkgICB7ICRSZXR1cm4tPlsxXS0+e0RhdGF9LT5bMF0gPSAkSW5mb3tUb31bMF0gfQogICAgICAgICAgICBpZiAoICRJbmZve1RvfVsxXSA+ICRSZXR1cm4tPlsxXS0+e0RhdGF9LT5bMV0gKSAgIHsgJFJldHVybi0+WzFdLT57RGF0YX0tPlsxXSA9ICRJbmZve1RvfVsxXSB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXh0IENBVEVHT1JZOwogICAgICAgIH0KCiAgICAgICAgIyBnYXRoZXIgaWNvbiBpbmZvCiAgICAgICAgaWYgKCAkSW5mb3tJY29uc30gKSB7CiAgICAgICAgICAgIGlmICggJEluZm97SWNvbnN9e0xhdGl0dWRlfSAmJiAkSW5mb3tJY29uc317TG9uZ2l0dWRlfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5IChxdy9MYXRpdHVkZSBMb25naXR1ZGUgUGF0aCBMaW5rIFRvb2x0aXAvKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRJbmZve0ljb25zfXskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRpICggMCAuLiAkI3sgJEluZm97SWNvbnN9e0xhdGl0dWRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkSWNvbnN7JEtleX0gfSwgJEluZm97SWNvbnN9eyRLZXl9WyRpXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRpICggMCAuLiAkI3sgJEluZm97SWNvbnN9e0xhdGl0dWRlfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkSWNvbnN7JEtleX0gfSwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2F0aGVyIGxpbmUgaW5mbwogICAgICAgIGlmICggJEluZm97TGluZXN9ICkgewogICAgICAgICAgICBpZiAoICRJbmZve0xpbmVzfXtGcm9tMH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAocXcvRnJvbTAgVG8wIEZyb20xIFRvMSBDb2xvciBMaW5rIFRvb2x0aXAgV2VpZ2h0LykgewogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkSW5mb3tMaW5lc317JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkaSAoIDAgLi4gJCN7ICRJbmZve0xpbmVzfXtGcm9tMH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJExpbmVzeyRLZXl9IH0sICRJbmZve0xpbmVzfXskS2V5fVskaV07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkaSAoIDAgLi4gJCN7ICRJbmZve0xpbmVzfXtGcm9tMH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJExpbmVzeyRLZXl9IH0sICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFJldHVybiApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG1hcCBkYXRhIHByb3ZpZGVkISAoICRQYXJhbXtPcmlnaW5hbEFjdGlvbn0gKSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFJldHVybkVycjsKICAgIH0KCiAgICAjIGlmIG5vIGNvb3JkaW5hdGVzIHdoZXJlIHByb3ZpZGVkCiAgICBmb3IgbXkgJGkgKCAwLCAxICkgewogICAgICAgIGZvciBteSAkaiAoIDAsIDEgKSB7CiAgICAgICAgICAgICRSZXR1cm4tPlskaV0tPntEYXRhfS0+WyRqXSAvLz0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBtYXJnaW4gaXMgZWl0aGVyIGEgZnJhY3Rpb24gb2YgdGhlIG1hcCBjdXRvdXQsIG9yLCBpZiBpdCBpcyB0byBzbWFsbCwgdGhlIHByZWRlZmluZWQgbWFyZ2luCiAgICBteSAkTWFyZ2luID0gKAogICAgICAgIHNvcnQgeyAkYSA8PT4gJGIgfSAoCiAgICAgICAgICAgICRNYXBDb25maWctPntNYXJnaW59LAogICAgICAgICAgICAwLjA4ICogKCAkUmV0dXJuLT5bMF0tPntEYXRhfS0+WzFdIC0gJFJldHVybi0+WzBdLT57RGF0YX0tPlswXSApLAogICAgICAgICAgICAwLjA4ICogKCAkUmV0dXJuLT5bMV0tPntEYXRhfS0+WzFdIC0gJFJldHVybi0+WzFdLT57RGF0YX0tPlswXSApCiAgICAgICAgKQogICAgKVstMV07CgogICAgJFJldHVybi0+WzBdLT57RGF0YX0tPlswXSAtPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzBdLT57RGF0YX0tPlsxXSAtPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzFdLT57RGF0YX0tPlswXSArPSAkTWFyZ2luOwogICAgJFJldHVybi0+WzFdLT57RGF0YX0tPlsxXSArPSAkTWFyZ2luOwoKICAgIGlmICglSWNvbnMpIHsKICAgICAgICBwdXNoIEB7JFJldHVybn0sIHsKICAgICAgICAgICAgTmFtZSA9PiAnSWNvbnMnLAogICAgICAgICAgICBEYXRhID0+IFwlSWNvbnMsCiAgICAgICAgfTsKICAgIH0KICAgIGlmICglTGluZXMpIHsKICAgICAgICBwdXNoIEB7JFJldHVybn0sIHsKICAgICAgICAgICAgTmFtZSA9PiAnTGluZXMnLAogICAgICAgICAgICBEYXRhID0+IFwlTGluZXMsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gJFJldHVybjsKCn0KCj1oZWFkMiBfQ2xhc3NHZXQoKQoKUHJvdmlkZXMgdGhlIGNsYXNzIGluIGRlcGVuZGVuY2Ugb2YgdGhlIHNpdGUgdmlzaXRlZC4KCiAgICBteSAoICRDbGFzc0lELCAkQ2xhc3MgKSA9ICRPU01PYmplY3QtPl9DbGFzc0dldCgKICAgICAgICBPcmlnaW5hbEFjdGlvbiA9PiAnQWN0aW9uJywKICAgICAgICAlR2V0UGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIF9DbGFzc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvT3JpZ2luYWxBY3Rpb24gQmFja2VuZERlZi8pIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFBhcmFte09yaWdpbmFsQWN0aW9ufSBlcSAnQWdlbnRJVFNNQ29uZmlnSXRlbVpvb20nICkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFte0NvbmZpZ0l0ZW1JRH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbmZpZ0l0ZW1JRCEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkQ0kgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNvbmZpZ0l0ZW0nKS0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRQYXJhbXtDb25maWdJdGVtSUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRQYXJhbXtCYWNrZW5kRGVmfXsgJENJLT57Q2xhc3N9IH0gKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIENsYXNzSUQgPT4gJENJLT57Q2xhc3NJRH0sCiAgICAgICAgICAgIENsYXNzICAgPT4gJENJLT57Q2xhc3N9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuOwoKfQoKc3ViIF9HZXRDb25maWdJdGVtc0xpbmtlZFRvVGlja2V0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXVlcyBUaWNrZXRUeXBlcykpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtBY3Rpb25Db25maWd9eyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCBpbiBBY3Rpb25Db25maWchIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc3RhdGUgbGlzdAogICAgbXkgJFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gWyAncHJlcHJvZHVjdGl2ZScsICdwcm9kdWN0aXZlJyBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgY3JlYXRlIHN0YXRlIHN0cmluZwogICAgbXkgJERlcGxTdGF0ZVN0cmluZyA9IGpvaW4gcXssIH0sIGtleXMgJXskU3RhdGVMaXN0fTsKCiAgICBteSAlU2VhcmNoQ3JpdGVyaWEgPSAoKTsKICAgIGlmICggQHsgJFBhcmFte0FjdGlvbkNvbmZpZ317UXVldWVzfSB9ICkgewogICAgICAgICRTZWFyY2hDcml0ZXJpYXtRdWV1ZXN9ID0gJFBhcmFte0FjdGlvbkNvbmZpZ317UXVldWVzfTsKICAgIH0KICAgIGlmICggQHsgJFBhcmFte0FjdGlvbkNvbmZpZ317VGlja2V0VHlwZXN9IH0gKSB7CiAgICAgICAgJFNlYXJjaENyaXRlcmlhe1R5cGVzfSA9ICRQYXJhbXtBY3Rpb25Db25maWd9e1RpY2tldFR5cGVzfTsKICAgIH0KCiAgICBteSBAVGlja2V0SURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTZWFyY2goCiAgICAgICAgUmVzdWx0ICAgID0+ICdBUlJBWScsCiAgICAgICAgU3RhdGVUeXBlID0+ICdPcGVuJywKICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgJVNlYXJjaENyaXRlcmlhLAogICAgKTsKCiAgICBteSAlQ29uZmlnSXRlbUlESGFzaDsKICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICBteSAlTGlua2VkQ29uZmlnSXRlbXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdCgKICAgICAgICAgICAgT2JqZWN0MSAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBLZXkxICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPYmplY3QyICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgRGlyZWN0aW9uID0+ICJCb3RoIiwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIGtleXMgJUxpbmtlZENvbmZpZ0l0ZW1zICkgewogICAgICAgICAgICAkQ29uZmlnSXRlbUlESGFzaHskQ29uZmlnSXRlbUlEfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyk7CgogICAgIyBnZXQgbGFzdCB2ZXJzaW9ucyBkYXRhCiAgICBteSBAQ29uZmlnSXRlbUxpc3Q7CiAgICBmb3IgbXkgJENvbmZpZ0l0ZW1JRCAoIGtleXMgJUNvbmZpZ0l0ZW1JREhhc2ggKSB7CgogICAgICAgICMgZ2V0IHZlcnNpb24gZGF0YQogICAgICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCAgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQENvbmZpZ0l0ZW1MaXN0LCAkQ29uZmlnSXRlbTsKICAgIH0KCiAgICByZXR1cm4gQENvbmZpZ0l0ZW1MaXN0Owp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UT0JPIHByb2plY3QgKEw8aHR0cHM6Ly9vdG9iby5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgoKPWN1dAo=</File>
        <File Location="var/httpd/htdocs/js/Core.OpenStreetMap.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CgpDb3JlLk9wZW5TdHJlZXRNYXAgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgdmFyIENhbnZhc0lEID0gJ29wZW5zdHJlZXRtYXAtY2FudmFzJzsKCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICggJCggIiMiICsgQ2FudmFzSUQgKS5sZW5ndGggPiAwICkgewogICAgICAgICAgICBUYXJnZXROUy5DcmVhdGVNYXAoKTsKICAgICAgICB9CiAgICB9OwoKICAgIFRhcmdldE5TLkNyZWF0ZU1hcCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBDU1MgbGFkZW4KICAgICAgICBUYXJnZXROUy5Mb2FkQ1NTKCIvb3RvYm8td2ViL3NraW5zL0FnZW50L2RlZmF1bHQvY3NzL3RoaXJkcGFydHkvbGVhZmxldC0xLjQuMC9sZWFmbGV0LmNzcyIpOwoKICAgICAgICAvLyBMZWFmbGV0c2NyaXB0IGxhZGVuCiAgICAgICAgVGFyZ2V0TlMuTG9hZFNjcmlwdCgiL290b2JvLXdlYi9qcy90aGlyZHBhcnR5L2xlYWZsZXQtMS40LjAvbGVhZmxldC5qcyIsIFRhcmdldE5TLk1hcFNjcmlwdCk7CiAgICB9OwoKICAgIFRhcmdldE5TLk1hcFNjcmlwdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgdmFyIG1hcGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICIjIiArIENhbnZhc0lEICk7CiAgICAgICAgbWFwY2FudmFzLmlubmVySFRNTCA9ICIiOwoKICAgICAgICAvLyBLYXJ0ZW4gYW5sZWdlbgoKICAgICAgICB2YXIgb3NtID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmCiAgICAgICAgICAgIG1heFpvb206IDIwLAogICAgICAgICAgICBhdHRyaWJ1dGlvbjogJ01hcCBkYXRhICZjb3B5OyA8YSBocmVmPSJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5PcGVuU3RyZWV0TWFwPC9hPiBhbmQgY29udHJpYnV0b3JzIDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvIiB0YXJnZXQ9Il9ibGFuayI+Q0MtQlktU0E8L2E+JwogICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG1hcCA9IEwubWFwKG1hcGNhbnZhcywgeyBsYXllcnM6IG9zbSwgdGFwOiBmYWxzZSB9ICkgOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmCgogICAgICAgIC8vIE1pdCBNYcOfc3RhYgoKICAgICAgICAgICAgTC5jb250cm9sLnNjYWxlKHtpbXBlcmlhbDpmYWxzZX0pLmFkZFRvKG1hcCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYKCiAgICAgICAgLy9LYXJ0ZW5hdXNzY2huaXR0IHfDpGhsZW4KICAgICAgICB2YXIgRGF0YSA9IHt9OwoKICAgICAgICAvLyBnYXRoZXIgaW5mbyBmcm9tIHVybCAobmVlZCBDb25maWdJdGVtSUQpCiAgICAgICAgdmFyIGhhc2g7CiAgICAgICAgdmFyIGhhc2hlcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNsaWNlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJz8nKSArIDEpLnNwbGl0KCc7Jyk7CiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGhhc2ggPSBoYXNoZXNbaV0uc3BsaXQoJz0nKTsKICAgICAgICAgICAgRGF0YVtoYXNoWzBdXSA9IGhhc2hbMV07CiAgICAgICAgfQoKICAgICAgICAvLyBzdG9yZSB0aGUgb3JpZ2luYWwgYWN0aW9uCiAgICAgICAgaWYgKCBEYXRhWydBY3Rpb24nXSAhPSB1bmRlZmluZWQgKSB7CiAgICAgICAgICAgIERhdGFbJ09yaWdpbmFsQWN0aW9uJ10gPSBEYXRhWydBY3Rpb24nXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIChDdXN0b21lcilGcm9udGVuZDo6Q29tbW9uUGFyYW0jIyNBY3Rpb24KICAgICAgICAgICAgRGF0YVsnT3JpZ2luYWxBY3Rpb24nXSA9ICdDb21tb25BY3Rpb24nOwogICAgICAgIH0KCiAgICAgICAgLy8gdXNlIGFnZW50IG9yIGN1c3RvbWVyIGludGVyZmFjZQogICAgICAgIGlmICggQ29yZS5Db25maWcuR2V0KCdTZXNzaW9uTmFtZScpID09PSBDb3JlLkNvbmZpZy5HZXQoJ0N1c3RvbWVyUGFuZWxTZXNzaW9uTmFtZScpICkgewogICAgICAgICAgICBEYXRhWydBY3Rpb24nXSA9ICdDdXN0b21lck9wZW5TdHJlZXRNYXAnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgRGF0YVsnQWN0aW9uJ10gPSAnQWdlbnRPcGVuU3RyZWV0TWFwJzsKICAgICAgICB9CgogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbihSZXNwb25zZSl7CgogICAgICAgICAgICB2YXIgYm91bmRzID0gWyBbIFJlc3BvbnNlWydGcm9tJ11bMF1bMF0sIFJlc3BvbnNlWydGcm9tJ11bMV1bMF0gXSwgWyBSZXNwb25zZVsnVG8nXVswXVswXSwgUmVzcG9uc2VbJ1RvJ11bMV1bMF0gXSBdOwoKICAgICAgICAgICAgLy8gbGluayBmdW5jdGlvbiBjcmVhdG9yIHRvIGhhdmUgY29uc3RhbnQgVXJscyBmb3Igb2xkIGJyb3dzZXJzLCB0b28KICAgICAgICAgICAgZnVuY3Rpb24gR2V0TGlua09wZW5lciggVXJsICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gVXJsOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gcGxhY2UgaWNvbnMKICAgICAgICAgICAgaWYgKCBSZXNwb25zZVsnSWNvbnMnXSApIHsKICAgICAgICAgICAgICAgIHZhciBJY29ucyA9IHt9OwoKICAgICAgICAgICAgICAgIC8vIG1hcCB0aGUgdW5vcmRlcmVkIFJlc3BvbnNlIGFycmF5IHRvIGFuIGF0dHJpYnV0ZSBoYXNoCiAgICAgICAgICAgICAgICBSZXNwb25zZVsnSWNvbnMnXS5tYXAoZnVuY3Rpb24obil7IEljb25zWyBuWzBdIF0gPSBuWzFdIH0pOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgSWNvbnNbJ0xhdGl0dWRlJ10ubGVuZ3RoIDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIEljb247CiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIG1hcAogICAgICAgICAgICAgICAgICAgIGlmICggSWNvbnNbJ1BhdGgnXVtpXSA9PSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbiA9IEwubWFya2VyKFtJY29uc1snTGF0aXR1ZGUnXVtpXSwgSWNvbnNbJ0xvbmdpdHVkZSddW2ldXSkuYWRkVG8obWFwKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExvZ28gPSBMLmljb24oeyBpY29uVXJsOiBJY29uc1snUGF0aCddW2ldLCBpY29uU2l6ZTogWzEwLCAxNV0sIGljb25BbmNob3I6IFs1LCAxNV0gfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbiA9IEwubWFya2VyKFtJY29uc1snTGF0aXR1ZGUnXVtpXSwgSWNvbnNbJ0xvbmdpdHVkZSddW2ldXSwge2ljb246IExvZ299KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZgogICAgICAgICAgICAgICAgICAgICAgICBJY29uLmFkZFRvKG1hcCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBsaW5rCiAgICAgICAgICAgICAgICAgICAgaWYgKCBJY29uc1snTGluayddW2ldICE9ICcnICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3BlblVybCA9IEdldExpbmtPcGVuZXIoIENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKStJY29uc1snTGluayddW2ldICk7CiAgICAgICAgICAgICAgICAgICAgICAgIEljb24ub24oICJjbGljayIsIE9wZW5VcmwgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIHRvb2x0aXAKICAgICAgICAgICAgICAgICAgICBpZiAoIEljb25zWydUb29sdGlwJ10gJiYgSWNvbnNbJ1Rvb2x0aXAnXVtpXSAhPSAnJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgSWNvbi5iaW5kVG9vbHRpcCggSWNvbnNbJ1Rvb2x0aXAnXVtpXSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gZHJhdyBsaW5lcwogICAgICAgICAgICBpZiAoIFJlc3BvbnNlWydMaW5lcyddICkgewogICAgICAgICAgICAgICAgLy8gbWFwIHRoZSB1bm9yZGVyZWQgUmVzcG9uc2UgYXJyYXkgdG8gYW4gYXR0cmlidXRlIGhhc2gKICAgICAgICAgICAgICAgIHZhciBMaW5lcyA9IHt9OwogICAgICAgICAgICAgICAgUmVzcG9uc2VbJ0xpbmVzJ10ubWFwKGZ1bmN0aW9uKG4peyBMaW5lc1sgblswXSBdID0gblsxXSB9KTsKICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBMaW5lc1snRnJvbTAnXS5sZW5ndGggOyBpKyspIHsKCiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIG1hcAogICAgICAgICAgICAgICAgICAgIHZhciBMaW5lID0gTC5wb2x5bGluZShbIFtMaW5lc1snRnJvbTAnXVtpXSwgTGluZXNbJ0Zyb20xJ11baV1dLCBbTGluZXNbJ1RvMCddW2ldLCBMaW5lc1snVG8xJ11baV1dIF0sIHtjb2xvcjogTGluZXNbJ0NvbG9yJ11baV0sIHdlaWdodDogTGluZXNbJ1dlaWdodCddW2ldLCBvcGFjaXR5OiAxfSApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmCiAgICAgICAgICAgICAgICAgICAgTGluZS5hZGRUbyhtYXApOwoKICAgICAgICAgICAgICAgICAgICAvLyBsaW5rCiAgICAgICAgICAgICAgICAgICAgaWYgKCBMaW5lc1snTGluayddW2ldICE9ICcnICkgewogICAgICAgICAgICAgICAgICAgICAgICBPcGVuVXJsID0gR2V0TGlua09wZW5lciggQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpK0xpbmVzWydMaW5rJ11baV0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgTGluZS5vbiggImNsaWNrIiwgT3BlblVybCApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gdG9vbHRpcAogICAgICAgICAgICAgICAgICAgIGlmICggSWNvbnNbJ1Rvb2x0aXAnXSAmJiBJY29uc1snVG9vbHRpcCddW2ldICE9ICcnICkgewogICAgICAgICAgICAgICAgICAgICAgICBJY29uLmJpbmRUb29sdGlwKCBJY29uc1snVG9vbHRpcCddW2ldICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gc2NhbGUgbWFwCiAgICAgICAgICAgICAgICBtYXAuZml0Qm91bmRzKCBib3VuZHMgKTsKCiAgICAgICAgICAgIC8vIEthcnRlIGJlaSByZXNpemUgbmV1IHNrYWxpZXJlbgogICAgICAgICAgICAgICAgbWFwLm9uKCJyZXNpemUiLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIG1hcC5maXRCb3VuZHMoIGJvdW5kcyApOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgIH0pOwoKICAgIH07CgogICAgVGFyZ2V0TlMuTG9hZFNjcmlwdCA9IGZ1bmN0aW9uICh1cmwsY2FsbGJhY2spIHsKICAgICAgICB2YXIgc2NyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgc2NyLnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKICAgICAgICBzY3IuYXN5bmMgPSAiYXN5bmMiOwogICAgICAgIGlmKHR5cGVvZihjYWxsYmFjayk9PSJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgc2NyLm9ubG9hZERvbmUgPSBmYWxzZTsKICAgICAgICAgICAgc2NyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCAhc2NyLm9ubG9hZERvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgc2NyLm9ubG9hZERvbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHNjci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICggKCAibG9hZGVkIiA9PT0gc2NyLnJlYWR5U3RhdGUgfHwgImNvbXBsZXRlIiA9PT0gc2NyLnJlYWR5U3RhdGUgKSAmJiAhc2NyLm9ubG9hZERvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgc2NyLm9ubG9hZERvbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2NyLnNyYyA9IHVybDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcik7CiAgICB9OyAvLyBMb2FkU2NyaXB0CgogICAgVGFyZ2V0TlMuTG9hZENTUyA9IGZ1bmN0aW9uICh1cmwpIHsKICAgICAgICB2YXIgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKICAgICAgICBsLnR5cGUgPSAidGV4dC9jc3MiOwogICAgICAgIGwucmVsID0gInN0eWxlc2hlZXQiOwogICAgICAgIGwuaHJlZiA9IHVybDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGwpOwogICAgfTsgLy8gTG9hZENTUwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cgp9KENvcmUuT3BlblN0cmVldE1hcCB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/thirdparty/leaflet-1.4.0/leaflet.js" Permission="660" Encode="Base64">LyogQHByZXNlcnZlCiAqIExlYWZsZXQgMS40LjAsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KICogKGMpIDIwMTAtMjAxOCBWbGFkaW1pciBBZ2Fmb25raW4sIChjKSAyMDEwLTIwMTEgQ2xvdWRNYWRlCiAqLwohZnVuY3Rpb24odCxpKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2koZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0saSk6aSh0Lkw9e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3ZhciBpLGUsbixvO2ZvcihlPTEsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspe289YXJndW1lbnRzW2VdO2ZvcihpIGluIG8pdFtpXT1vW2ldfXJldHVybiB0fWZ1bmN0aW9uIGUodCxpKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7aWYodC5iaW5kKXJldHVybiB0LmJpbmQuYXBwbHkodCxlLmNhbGwoYXJndW1lbnRzLDEpKTt2YXIgbj1lLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGksbi5sZW5ndGg/bi5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpOmFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQuX2xlYWZsZXRfaWQ9dC5fbGVhZmxldF9pZHx8KytlaSx0Ll9sZWFmbGV0X2lkfWZ1bmN0aW9uIG8odCxpLGUpe3ZhciBuLG8scyxyO3JldHVybiByPWZ1bmN0aW9uKCl7bj0hMSxvJiYocy5hcHBseShlLG8pLG89ITEpfSxzPWZ1bmN0aW9uKCl7bj9vPWFyZ3VtZW50czoodC5hcHBseShlLGFyZ3VtZW50cyksc2V0VGltZW91dChyLGkpLG49ITApfX1mdW5jdGlvbiBzKHQsaSxlKXt2YXIgbj1pWzFdLG89aVswXSxzPW4tbztyZXR1cm4gdD09PW4mJmU/dDooKHQtbyklcytzKSVzK299ZnVuY3Rpb24gcigpe3JldHVybiExfWZ1bmN0aW9uIGEodCxpKXt2YXIgZT1NYXRoLnBvdygxMCx2b2lkIDA9PT1pPzY6aSk7cmV0dXJuIE1hdGgucm91bmQodCplKS9lfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiB1KHQpe3JldHVybiBoKHQpLnNwbGl0KC9ccysvKX1mdW5jdGlvbiBsKHQsaSl7dC5oYXNPd25Qcm9wZXJ0eSgib3B0aW9ucyIpfHwodC5vcHRpb25zPXQub3B0aW9ucz9paSh0Lm9wdGlvbnMpOnt9KTtmb3IodmFyIGUgaW4gaSl0Lm9wdGlvbnNbZV09aVtlXTtyZXR1cm4gdC5vcHRpb25zfWZ1bmN0aW9uIGModCxpLGUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KW4ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZT9vLnRvVXBwZXJDYXNlKCk6bykrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0W29dKSk7cmV0dXJuKGkmJi0xIT09aS5pbmRleE9mKCI/Iik/IiYiOiI/Iikrbi5qb2luKCImIil9ZnVuY3Rpb24gXyh0LGkpe3JldHVybiB0LnJlcGxhY2UobmksZnVuY3Rpb24odCxlKXt2YXIgbj1pW2VdO2lmKHZvaWQgMD09PW4pdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgdmFyaWFibGUgIit0KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmKG49bihpKSksbn0pfWZ1bmN0aW9uIGQodCxpKXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdPT09aSlyZXR1cm4gZTtyZXR1cm4tMX1mdW5jdGlvbiBwKHQpe3JldHVybiB3aW5kb3dbIndlYmtpdCIrdF18fHdpbmRvd1sibW96Iit0XXx8d2luZG93WyJtcyIrdF19ZnVuY3Rpb24gbSh0KXt2YXIgaT0rbmV3IERhdGUsZT1NYXRoLm1heCgwLDE2LShpLXJpKSk7cmV0dXJuIHJpPWkrZSx3aW5kb3cuc2V0VGltZW91dCh0LGUpfWZ1bmN0aW9uIGYodCxpLG4pe2lmKCFufHxhaSE9PW0pcmV0dXJuIGFpLmNhbGwod2luZG93LGUodCxpKSk7dC5jYWxsKGkpfWZ1bmN0aW9uIGcodCl7dCYmaGkuY2FsbCh3aW5kb3csdCl9ZnVuY3Rpb24gdigpe31mdW5jdGlvbiB5KHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgTCYmTCYmTC5NaXhpbil7dD1vaSh0KT90Olt0XTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldPT09TC5NaXhpbi5FdmVudHMmJmNvbnNvbGUud2FybigiRGVwcmVjYXRlZCBpbmNsdWRlIG9mIEwuTWl4aW4uRXZlbnRzOiB0aGlzIHByb3BlcnR5IHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMsIHBsZWFzZSBpbmhlcml0IGZyb20gTC5FdmVudGVkIGluc3RlYWQuIiwobmV3IEVycm9yKS5zdGFjayl9fWZ1bmN0aW9uIHgodCxpLGUpe3RoaXMueD1lP01hdGgucm91bmQodCk6dCx0aGlzLnk9ZT9NYXRoLnJvdW5kKGkpOml9ZnVuY3Rpb24gdyh0LGksZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB4P3Q6b2kodCk/bmV3IHgodFswXSx0WzFdKTp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmIngiaW4gdCYmInkiaW4gdD9uZXcgeCh0LngsdC55KTpuZXcgeCh0LGksZSl9ZnVuY3Rpb24gUCh0LGkpe2lmKHQpZm9yKHZhciBlPWk/W3QsaV06dCxuPTAsbz1lLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGVbbl0pfWZ1bmN0aW9uIGIodCxpKXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFA/dDpuZXcgUCh0LGkpfWZ1bmN0aW9uIFQodCxpKXtpZih0KWZvcih2YXIgZT1pP1t0LGldOnQsbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0aGlzLmV4dGVuZChlW25dKX1mdW5jdGlvbiB6KHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUP3Q6bmV3IFQodCxpKX1mdW5jdGlvbiBNKHQsaSxlKXtpZihpc05hTih0KXx8aXNOYU4oaSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitpKyIpIik7dGhpcy5sYXQ9K3QsdGhpcy5sbmc9K2ksdm9pZCAwIT09ZSYmKHRoaXMuYWx0PStlKX1mdW5jdGlvbiBDKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIE0/dDpvaSh0KSYmIm9iamVjdCIhPXR5cGVvZiB0WzBdPzM9PT10Lmxlbmd0aD9uZXcgTSh0WzBdLHRbMV0sdFsyXSk6Mj09PXQubGVuZ3RoP25ldyBNKHRbMF0sdFsxXSk6bnVsbDp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmImxhdCJpbiB0P25ldyBNKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbix0LmFsdCk6dm9pZCAwPT09aT9udWxsOm5ldyBNKHQsaSxlKX1mdW5jdGlvbiBTKHQsaSxlLG4pe2lmKG9pKHQpKXJldHVybiB0aGlzLl9hPXRbMF0sdGhpcy5fYj10WzFdLHRoaXMuX2M9dFsyXSx2b2lkKHRoaXMuX2Q9dFszXSk7dGhpcy5fYT10LHRoaXMuX2I9aSx0aGlzLl9jPWUsdGhpcy5fZD1ufWZ1bmN0aW9uIFoodCxpLGUsbil7cmV0dXJuIG5ldyBTKHQsaSxlLG4pfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQpfWZ1bmN0aW9uIGsodCxpKXt2YXIgZSxuLG8scyxyLGEsaD0iIjtmb3IoZT0wLG89dC5sZW5ndGg7ZTxvO2UrKyl7Zm9yKG49MCxzPShyPXRbZV0pLmxlbmd0aDtuPHM7bisrKWE9cltuXSxoKz0obj8iTCI6Ik0iKSthLngrIiAiK2EueTtoKz1pP0ppPyJ6IjoieCI6IiJ9cmV0dXJuIGh8fCJNMCAwIn1mdW5jdGlvbiBCKHQpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT49MH1mdW5jdGlvbiBBKHQsaSxlLG4pe3JldHVybiJ0b3VjaHN0YXJ0Ij09PWk/Tyh0LGUsbik6InRvdWNobW92ZSI9PT1pP1codCxlLG4pOiJ0b3VjaGVuZCI9PT1pJiZIKHQsZSxuKSx0aGlzfWZ1bmN0aW9uIEkodCxpLGUpe3ZhciBuPXRbIl9sZWFmbGV0XyIraStlXTtyZXR1cm4idG91Y2hzdGFydCI9PT1pP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0ZSxuLCExKToidG91Y2htb3ZlIj09PWk/dC5yZW1vdmVFdmVudExpc3RlbmVyKGllLG4sITEpOiJ0b3VjaGVuZCI9PT1pJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKGVlLG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuZSxuLCExKSksdGhpc31mdW5jdGlvbiBPKHQsaSxuKXt2YXIgbz1lKGZ1bmN0aW9uKHQpe2lmKCJtb3VzZSIhPT10LnBvaW50ZXJUeXBlJiZ0Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiZ0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSl7aWYoIShvZS5pbmRleE9mKHQudGFyZ2V0LnRhZ05hbWUpPDApKXJldHVybjtQdCh0KX1qKHQsaSl9KTt0WyJfbGVhZmxldF90b3VjaHN0YXJ0IituXT1vLHQuYWRkRXZlbnRMaXN0ZW5lcih0ZSxvLCExKSxyZXx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRlLFIsITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGllLE4sITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGVlLEQsITApLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKG5lLEQsITApLHJlPSEwKX1mdW5jdGlvbiBSKHQpe3NlW3QucG9pbnRlcklkXT10LGFlKyt9ZnVuY3Rpb24gTih0KXtzZVt0LnBvaW50ZXJJZF0mJihzZVt0LnBvaW50ZXJJZF09dCl9ZnVuY3Rpb24gRCh0KXtkZWxldGUgc2VbdC5wb2ludGVySWRdLGFlLS19ZnVuY3Rpb24gaih0LGkpe3QudG91Y2hlcz1bXTtmb3IodmFyIGUgaW4gc2UpdC50b3VjaGVzLnB1c2goc2VbZV0pO3QuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9ZnVuY3Rpb24gVyh0LGksZSl7dmFyIG49ZnVuY3Rpb24odCl7KHQucG9pbnRlclR5cGUhPT10Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiYibW91c2UiIT09dC5wb2ludGVyVHlwZXx8MCE9PXQuYnV0dG9ucykmJmoodCxpKX07dFsiX2xlYWZsZXRfdG91Y2htb3ZlIitlXT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihpZSxuLCExKX1mdW5jdGlvbiBIKHQsaSxlKXt2YXIgbj1mdW5jdGlvbih0KXtqKHQsaSl9O3RbIl9sZWFmbGV0X3RvdWNoZW5kIitlXT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihlZSxuLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIobmUsbiwhMSl9ZnVuY3Rpb24gRih0LGksZSl7ZnVuY3Rpb24gbih0KXt2YXIgaTtpZihWaSl7aWYoIWJpfHwibW91c2UiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47aT1hZX1lbHNlIGk9dC50b3VjaGVzLmxlbmd0aDtpZighKGk+MSkpe3ZhciBlPURhdGUubm93KCksbj1lLShzfHxlKTtyPXQudG91Y2hlcz90LnRvdWNoZXNbMF06dCxhPW4+MCYmbjw9aCxzPWV9fWZ1bmN0aW9uIG8odCl7aWYoYSYmIXIuY2FuY2VsQnViYmxlKXtpZihWaSl7aWYoIWJpfHwibW91c2UiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47dmFyIGUsbixvPXt9O2ZvcihuIGluIHIpZT1yW25dLG9bbl09ZSYmZS5iaW5kP2UuYmluZChyKTplO3I9b31yLnR5cGU9ImRibGNsaWNrIixpKHIpLHM9bnVsbH19dmFyIHMscixhPSExLGg9MjUwO3JldHVybiB0W2xlK2hlK2VdPW4sdFtsZSt1ZStlXT1vLHRbbGUrImRibGNsaWNrIitlXT1pLHQuYWRkRXZlbnRMaXN0ZW5lcihoZSxuLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIodWUsbywhMSksdC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsaSwhMSksdGhpc31mdW5jdGlvbiBVKHQsaSl7dmFyIGU9dFtsZStoZStpXSxuPXRbbGUrdWUraV0sbz10W2xlKyJkYmxjbGljayIraV07cmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoZSxlLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIodWUsbiwhMSksYml8fHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLG8sITEpLHRoaXN9ZnVuY3Rpb24gVih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk6dH1mdW5jdGlvbiBxKHQsaSl7dmFyIGU9dC5zdHlsZVtpXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2ldO2lmKCghZXx8ImF1dG8iPT09ZSkmJmRvY3VtZW50LmRlZmF1bHRWaWV3KXt2YXIgbj1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk7ZT1uP25baV06bnVsbH1yZXR1cm4iYXV0byI9PT1lP251bGw6ZX1mdW5jdGlvbiBHKHQsaSxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBuLmNsYXNzTmFtZT1pfHwiIixlJiZlLmFwcGVuZENoaWxkKG4pLG59ZnVuY3Rpb24gSyh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBZKHQpe2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gWCh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5sYXN0Q2hpbGQhPT10JiZpLmFwcGVuZENoaWxkKHQpfWZ1bmN0aW9uIEoodCl7dmFyIGk9dC5wYXJlbnROb2RlO2kmJmkuZmlyc3RDaGlsZCE9PXQmJmkuaW5zZXJ0QmVmb3JlKHQsaS5maXJzdENoaWxkKX1mdW5jdGlvbiAkKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpcmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGkpO3ZhciBlPWV0KHQpO3JldHVybiBlLmxlbmd0aD4wJiZuZXcgUmVnRXhwKCIoXnxcXHMpIitpKyIoXFxzfCQpIikudGVzdChlKX1mdW5jdGlvbiBRKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpZm9yKHZhciBlPXUoaSksbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0LmNsYXNzTGlzdC5hZGQoZVtuXSk7ZWxzZSBpZighJCh0LGkpKXt2YXIgcz1ldCh0KTtpdCh0LChzP3MrIiAiOiIiKStpKX19ZnVuY3Rpb24gdHQodCxpKXt2b2lkIDAhPT10LmNsYXNzTGlzdD90LmNsYXNzTGlzdC5yZW1vdmUoaSk6aXQodCxoKCgiICIrZXQodCkrIiAiKS5yZXBsYWNlKCIgIitpKyIgIiwiICIpKSl9ZnVuY3Rpb24gaXQodCxpKXt2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lPWk6dC5jbGFzc05hbWUuYmFzZVZhbD1pfWZ1bmN0aW9uIGV0KHQpe3JldHVybiB0LmNvcnJlc3BvbmRpbmdFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdFbGVtZW50KSx2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9ZnVuY3Rpb24gbnQodCxpKXsib3BhY2l0eSJpbiB0LnN0eWxlP3Quc3R5bGUub3BhY2l0eT1pOiJmaWx0ZXIiaW4gdC5zdHlsZSYmb3QodCxpKX1mdW5jdGlvbiBvdCh0LGkpe3ZhciBlPSExLG49IkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhIjt0cnl7ZT10LmZpbHRlcnMuaXRlbShuKX1jYXRjaCh0KXtpZigxPT09aSlyZXR1cm59aT1NYXRoLnJvdW5kKDEwMCppKSxlPyhlLkVuYWJsZWQ9MTAwIT09aSxlLk9wYWNpdHk9aSk6dC5zdHlsZS5maWx0ZXIrPSIgcHJvZ2lkOiIrbisiKG9wYWNpdHk9IitpKyIpIn1mdW5jdGlvbiBzdCh0KXtmb3IodmFyIGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gaSlyZXR1cm4gdFtlXTtyZXR1cm4hMX1mdW5jdGlvbiBydCh0LGksZSl7dmFyIG49aXx8bmV3IHgoMCwwKTt0LnN0eWxlW2NlXT0oUmk/InRyYW5zbGF0ZSgiK24ueCsicHgsIituLnkrInB4KSI6InRyYW5zbGF0ZTNkKCIrbi54KyJweCwiK24ueSsicHgsMCkiKSsoZT8iIHNjYWxlKCIrZSsiKSI6IiIpfWZ1bmN0aW9uIGF0KHQsaSl7dC5fbGVhZmxldF9wb3M9aSxqaT9ydCh0LGkpOih0LnN0eWxlLmxlZnQ9aS54KyJweCIsdC5zdHlsZS50b3A9aS55KyJweCIpfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0Ll9sZWFmbGV0X3Bvc3x8bmV3IHgoMCwwKX1mdW5jdGlvbiB1dCgpe210KHdpbmRvdywiZHJhZ3N0YXJ0IixQdCl9ZnVuY3Rpb24gbHQoKXtmdCh3aW5kb3csImRyYWdzdGFydCIsUHQpfWZ1bmN0aW9uIGN0KHQpe2Zvcig7LTE9PT10LnRhYkluZGV4Oyl0PXQucGFyZW50Tm9kZTt0LnN0eWxlJiYoX3QoKSxtZT10LGZlPXQuc3R5bGUub3V0bGluZSx0LnN0eWxlLm91dGxpbmU9Im5vbmUiLG10KHdpbmRvdywia2V5ZG93biIsX3QpKX1mdW5jdGlvbiBfdCgpe21lJiYobWUuc3R5bGUub3V0bGluZT1mZSxtZT12b2lkIDAsZmU9dm9pZCAwLGZ0KHdpbmRvdywia2V5ZG93biIsX3QpKX1mdW5jdGlvbiBkdCh0KXtkb3t0PXQucGFyZW50Tm9kZX13aGlsZSghKHQub2Zmc2V0V2lkdGgmJnQub2Zmc2V0SGVpZ2h0fHx0PT09ZG9jdW1lbnQuYm9keSkpO3JldHVybiB0fWZ1bmN0aW9uIHB0KHQpe3ZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3g6aS53aWR0aC90Lm9mZnNldFdpZHRofHwxLHk6aS5oZWlnaHQvdC5vZmZzZXRIZWlnaHR8fDEsYm91bmRpbmdDbGllbnRSZWN0Oml9fWZ1bmN0aW9uIG10KHQsaSxlLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSlndCh0LG8saVtvXSxlKTtlbHNlIGZvcih2YXIgcz0wLHI9KGk9dShpKSkubGVuZ3RoO3M8cjtzKyspZ3QodCxpW3NdLGUsbik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZnQodCxpLGUsbil7aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXZ0KHQsbyxpW29dLGUpO2Vsc2UgaWYoaSlmb3IodmFyIHM9MCxyPShpPXUoaSkpLmxlbmd0aDtzPHI7cysrKXZ0KHQsaVtzXSxlLG4pO2Vsc2V7Zm9yKHZhciBhIGluIHRbeWVdKXZ0KHQsYSx0W3llXVthXSk7ZGVsZXRlIHRbeWVdfXJldHVybiB0aGlzfWZ1bmN0aW9uIGd0KHQsaSxlLG8pe3ZhciBzPWkrbihlKSsobz8iXyIrbihvKToiIik7aWYodFt5ZV0mJnRbeWVdW3NdKXJldHVybiB0aGlzO3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBlLmNhbGwob3x8dCxpfHx3aW5kb3cuZXZlbnQpfSxhPXI7VmkmJjA9PT1pLmluZGV4T2YoInRvdWNoIik/QSh0LGkscixzKTohcWl8fCJkYmxjbGljayIhPT1pfHwhRnx8VmkmJkVpPyJhZGRFdmVudExpc3RlbmVyImluIHQ/Im1vdXNld2hlZWwiPT09aT90LmFkZEV2ZW50TGlzdGVuZXIoIm9ud2hlZWwiaW4gdD8id2hlZWwiOiJtb3VzZXdoZWVsIixyLCExKToibW91c2VlbnRlciI9PT1pfHwibW91c2VsZWF2ZSI9PT1pPyhyPWZ1bmN0aW9uKGkpe2k9aXx8d2luZG93LmV2ZW50LEN0KHQsaSkmJmEoaSl9LHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1pPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIsciwhMSkpOigiY2xpY2siPT09aSYmemkmJihyPWZ1bmN0aW9uKHQpe1N0KHQsYSl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSk6ImF0dGFjaEV2ZW50ImluIHQmJnQuYXR0YWNoRXZlbnQoIm9uIitpLHIpOkYodCxyLHMpLHRbeWVdPXRbeWVdfHx7fSx0W3llXVtzXT1yfWZ1bmN0aW9uIHZ0KHQsaSxlLG8pe3ZhciBzPWkrbihlKSsobz8iXyIrbihvKToiIikscj10W3llXSYmdFt5ZV1bc107aWYoIXIpcmV0dXJuIHRoaXM7VmkmJjA9PT1pLmluZGV4T2YoInRvdWNoIik/SSh0LGkscyk6IXFpfHwiZGJsY2xpY2siIT09aXx8IVV8fFZpJiZFaT8icmVtb3ZlRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWk/dC5yZW1vdmVFdmVudExpc3RlbmVyKCJvbndoZWVsImluIHQ/IndoZWVsIjoibW91c2V3aGVlbCIsciwhMSk6dC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIj09PWk/Im1vdXNlb3ZlciI6Im1vdXNlbGVhdmUiPT09aT8ibW91c2VvdXQiOmksciwhMSk6ImRldGFjaEV2ZW50ImluIHQmJnQuZGV0YWNoRXZlbnQoIm9uIitpLHIpOlUodCxzKSx0W3llXVtzXT1udWxsfWZ1bmN0aW9uIHl0KHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQub3JpZ2luYWxFdmVudD90Lm9yaWdpbmFsRXZlbnQuX3N0b3BwZWQ9ITA6dC5jYW5jZWxCdWJibGU9ITAsTXQodCksdGhpc31mdW5jdGlvbiB4dCh0KXtyZXR1cm4gZ3QodCwibW91c2V3aGVlbCIseXQpLHRoaXN9ZnVuY3Rpb24gd3QodCl7cmV0dXJuIG10KHQsIm1vdXNlZG93biB0b3VjaHN0YXJ0IGRibGNsaWNrIix5dCksZ3QodCwiY2xpY2siLHp0KSx0aGlzfWZ1bmN0aW9uIFB0KHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9ZnVuY3Rpb24gTHQodCl7cmV0dXJuIFB0KHQpLHl0KHQpLHRoaXN9ZnVuY3Rpb24gYnQodCxpKXtpZighaSlyZXR1cm4gbmV3IHgodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGU9cHQoaSksbj1lLmJvdW5kaW5nQ2xpZW50UmVjdDtyZXR1cm4gbmV3IHgoKHQuY2xpZW50WC1uLmxlZnQpL2UueC1pLmNsaWVudExlZnQsKHQuY2xpZW50WS1uLnRvcCkvZS55LWkuY2xpZW50VG9wKX1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gYmk/dC53aGVlbERlbHRhWS8yOnQuZGVsdGFZJiYwPT09dC5kZWx0YU1vZGU/LXQuZGVsdGFZL3hlOnQuZGVsdGFZJiYxPT09dC5kZWx0YU1vZGU/MjAqLXQuZGVsdGFZOnQuZGVsdGFZJiYyPT09dC5kZWx0YU1vZGU/NjAqLXQuZGVsdGFZOnQuZGVsdGFYfHx0LmRlbHRhWj8wOnQud2hlZWxEZWx0YT8odC53aGVlbERlbHRhWXx8dC53aGVlbERlbHRhKS8yOnQuZGV0YWlsJiZNYXRoLmFicyh0LmRldGFpbCk8MzI3NjU/MjAqLXQuZGV0YWlsOnQuZGV0YWlsP3QuZGV0YWlsLy0zMjc2NSo2MDowfWZ1bmN0aW9uIHp0KHQpe3dlW3QudHlwZV09ITB9ZnVuY3Rpb24gTXQodCl7dmFyIGk9d2VbdC50eXBlXTtyZXR1cm4gd2VbdC50eXBlXT0hMSxpfWZ1bmN0aW9uIEN0KHQsaSl7dmFyIGU9aS5yZWxhdGVkVGFyZ2V0O2lmKCFlKXJldHVybiEwO3RyeXtmb3IoO2UmJmUhPT10OyllPWUucGFyZW50Tm9kZX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4gZSE9PXR9ZnVuY3Rpb24gU3QodCxpKXt2YXIgZT10LnRpbWVTdGFtcHx8dC5vcmlnaW5hbEV2ZW50JiZ0Lm9yaWdpbmFsRXZlbnQudGltZVN0YW1wLG49Z2UmJmUtZ2U7biYmbj4xMDAmJm48NTAwfHx0LnRhcmdldC5fc2ltdWxhdGVkQ2xpY2smJiF0Ll9zaW11bGF0ZWQ/THQodCk6KGdlPWUsaSh0KSl9ZnVuY3Rpb24gWnQodCxpKXtpZighaXx8IXQubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dmFyIGU9aSppO3JldHVybiB0PUF0KHQsZSksdD1rdCh0LGUpfWZ1bmN0aW9uIEV0KHQsaSxlKXtyZXR1cm4gTWF0aC5zcXJ0KER0KHQsaSxlLCEwKSl9ZnVuY3Rpb24ga3QodCxpKXt2YXIgZT10Lmxlbmd0aCxuPW5ldyh0eXBlb2YgVWludDhBcnJheSE9dm9pZCAwKyIiP1VpbnQ4QXJyYXk6QXJyYXkpKGUpO25bMF09bltlLTFdPTEsQnQodCxuLGksMCxlLTEpO3ZhciBvLHM9W107Zm9yKG89MDtvPGU7bysrKW5bb10mJnMucHVzaCh0W29dKTtyZXR1cm4gc31mdW5jdGlvbiBCdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPTA7Zm9yKHI9bisxO3I8PW8tMTtyKyspKGE9RHQodFtyXSx0W25dLHRbb10sITApKT5oJiYocz1yLGg9YSk7aD5lJiYoaVtzXT0xLEJ0KHQsaSxlLG4scyksQnQodCxpLGUscyxvKSl9ZnVuY3Rpb24gQXQodCxpKXtmb3IodmFyIGU9W3RbMF1dLG49MSxvPTAscz10Lmxlbmd0aDtuPHM7bisrKU50KHRbbl0sdFtvXSk+aSYmKGUucHVzaCh0W25dKSxvPW4pO3JldHVybiBvPHMtMSYmZS5wdXNoKHRbcy0xXSksZX1mdW5jdGlvbiBJdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPW4/a2U6UnQodCxlKSx1PVJ0KGksZSk7Zm9yKGtlPXU7Oyl7aWYoIShofHUpKXJldHVyblt0LGldO2lmKGgmdSlyZXR1cm4hMTthPVJ0KHI9T3QodCxpLHM9aHx8dSxlLG8pLGUpLHM9PT1oPyh0PXIsaD1hKTooaT1yLHU9YSl9fWZ1bmN0aW9uIE90KHQsaSxlLG4sbyl7dmFyIHMscixhPWkueC10LngsaD1pLnktdC55LHU9bi5taW4sbD1uLm1heDtyZXR1cm4gOCZlPyhzPXQueCthKihsLnktdC55KS9oLHI9bC55KTo0JmU/KHM9dC54K2EqKHUueS10LnkpL2gscj11LnkpOjImZT8ocz1sLngscj10LnkraCoobC54LXQueCkvYSk6MSZlJiYocz11Lngscj10LnkraCoodS54LXQueCkvYSksbmV3IHgocyxyLG8pfWZ1bmN0aW9uIFJ0KHQsaSl7dmFyIGU9MDtyZXR1cm4gdC54PGkubWluLng/ZXw9MTp0Lng+aS5tYXgueCYmKGV8PTIpLHQueTxpLm1pbi55P2V8PTQ6dC55PmkubWF4LnkmJihlfD04KSxlfWZ1bmN0aW9uIE50KHQsaSl7dmFyIGU9aS54LXQueCxuPWkueS10Lnk7cmV0dXJuIGUqZStuKm59ZnVuY3Rpb24gRHQodCxpLGUsbil7dmFyIG8scz1pLngscj1pLnksYT1lLngtcyxoPWUueS1yLHU9YSphK2gqaDtyZXR1cm4gdT4wJiYoKG89KCh0LngtcykqYSsodC55LXIpKmgpL3UpPjE/KHM9ZS54LHI9ZS55KTpvPjAmJihzKz1hKm8scis9aCpvKSksYT10LngtcyxoPXQueS1yLG4/YSphK2gqaDpuZXcgeChzLHIpfWZ1bmN0aW9uIGp0KHQpe3JldHVybiFvaSh0WzBdKXx8Im9iamVjdCIhPXR5cGVvZiB0WzBdWzBdJiZ2b2lkIDAhPT10WzBdWzBdfWZ1bmN0aW9uIFd0KHQpe3JldHVybiBjb25zb2xlLndhcm4oIkRlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuIiksanQodCl9ZnVuY3Rpb24gSHQodCxpLGUpe3ZhciBuLG8scyxyLGEsaCx1LGwsYyxfPVsxLDQsMiw4XTtmb3Iobz0wLHU9dC5sZW5ndGg7bzx1O28rKyl0W29dLl9jb2RlPVJ0KHRbb10saSk7Zm9yKHI9MDtyPDQ7cisrKXtmb3IobD1fW3JdLG49W10sbz0wLHM9KHU9dC5sZW5ndGgpLTE7bzx1O3M9bysrKWE9dFtvXSxoPXRbc10sYS5fY29kZSZsP2guX2NvZGUmbHx8KChjPU90KGgsYSxsLGksZSkpLl9jb2RlPVJ0KGMsaSksbi5wdXNoKGMpKTooaC5fY29kZSZsJiYoKGM9T3QoaCxhLGwsaSxlKSkuX2NvZGU9UnQoYyxpKSxuLnB1c2goYykpLG4ucHVzaChhKSk7dD1ufXJldHVybiB0fWZ1bmN0aW9uIEZ0KHQsaSl7dmFyIGUsbixvLHMscj0iRmVhdHVyZSI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LGE9cj9yLmNvb3JkaW5hdGVzOm51bGwsaD1bXSx1PWkmJmkucG9pbnRUb0xheWVyLGw9aSYmaS5jb29yZHNUb0xhdExuZ3x8VXQ7aWYoIWEmJiFyKXJldHVybiBudWxsO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBlPWwoYSksdT91KHQsZSk6bmV3ICRlKGUpO2Nhc2UiTXVsdGlQb2ludCI6Zm9yKG89MCxzPWEubGVuZ3RoO288cztvKyspZT1sKGFbb10pLGgucHVzaCh1P3UodCxlKTpuZXcgJGUoZSkpO3JldHVybiBuZXcgS2UoaCk7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIG49VnQoYSwiTGluZVN0cmluZyI9PT1yLnR5cGU/MDoxLGwpLG5ldyBubihuLGkpO2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBuPVZ0KGEsIlBvbHlnb24iPT09ci50eXBlPzE6MixsKSxuZXcgb24obixpKTtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG89MCxzPXIuZ2VvbWV0cmllcy5sZW5ndGg7bzxzO28rKyl7dmFyIGM9RnQoe2dlb21ldHJ5OnIuZ2VvbWV0cmllc1tvXSx0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnQucHJvcGVydGllc30saSk7YyYmaC5wdXNoKGMpfXJldHVybiBuZXcgS2UoaCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIil9fWZ1bmN0aW9uIFV0KHQpe3JldHVybiBuZXcgTSh0WzFdLHRbMF0sdFsyXSl9ZnVuY3Rpb24gVnQodCxpLGUpe2Zvcih2YXIgbixvPVtdLHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspbj1pP1Z0KHRbc10saS0xLGUpOihlfHxVdCkodFtzXSksby5wdXNoKG4pO3JldHVybiBvfWZ1bmN0aW9uIHF0KHQsaSl7cmV0dXJuIGk9Im51bWJlciI9PXR5cGVvZiBpP2k6Nix2b2lkIDAhPT10LmFsdD9bYSh0LmxuZyxpKSxhKHQubGF0LGkpLGEodC5hbHQsaSldOlthKHQubG5nLGkpLGEodC5sYXQsaSldfWZ1bmN0aW9uIEd0KHQsaSxlLG4pe2Zvcih2YXIgbz1bXSxzPTAscj10Lmxlbmd0aDtzPHI7cysrKW8ucHVzaChpP0d0KHRbc10saS0xLGUsbik6cXQodFtzXSxuKSk7cmV0dXJuIWkmJmUmJm8ucHVzaChvWzBdKSxvfWZ1bmN0aW9uIEt0KHQsZSl7cmV0dXJuIHQuZmVhdHVyZT9pKHt9LHQuZmVhdHVyZSx7Z2VvbWV0cnk6ZX0pOll0KGUpfWZ1bmN0aW9uIFl0KHQpe3JldHVybiJGZWF0dXJlIj09PXQudHlwZXx8IkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZT90Ont0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnt9LGdlb21ldHJ5OnR9fWZ1bmN0aW9uIFh0KHQsaSl7cmV0dXJuIG5ldyBzbih0LGkpfWZ1bmN0aW9uIEp0KHQsaSl7cmV0dXJuIG5ldyBtbih0LGkpfWZ1bmN0aW9uICR0KHQpe3JldHVybiBYaT9uZXcgdm4odCk6bnVsbH1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gSml8fCRpP25ldyBQbih0KTpudWxsfXZhciB0aT1PYmplY3QuZnJlZXplO09iamVjdC5mcmVlemU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBpaT1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiB0LnByb3RvdHlwZT1pLG5ldyB0fX0oKSxlaT0wLG5pPS9ceyAqKFtcd18tXSspICpcfS9nLG9pPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LHNpPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9IixyaT0wLGFpPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAoIlJlcXVlc3RBbmltYXRpb25GcmFtZSIpfHxtLGhpPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8cCgiQ2FuY2VsQW5pbWF0aW9uRnJhbWUiKXx8cCgiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGZ1bmN0aW9uKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9LHVpPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtmcmVlemU6dGksZXh0ZW5kOmksY3JlYXRlOmlpLGJpbmQ6ZSxsYXN0SWQ6ZWksc3RhbXA6bix0aHJvdHRsZTpvLHdyYXBOdW06cyxmYWxzZUZuOnIsZm9ybWF0TnVtOmEsdHJpbTpoLHNwbGl0V29yZHM6dSxzZXRPcHRpb25zOmwsZ2V0UGFyYW1TdHJpbmc6Yyx0ZW1wbGF0ZTpfLGlzQXJyYXk6b2ksaW5kZXhPZjpkLGVtcHR5SW1hZ2VVcmw6c2kscmVxdWVzdEZuOmFpLGNhbmNlbEZuOmhpLHJlcXVlc3RBbmltRnJhbWU6ZixjYW5jZWxBbmltRnJhbWU6Z30pO3YuZXh0ZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXplJiZ0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuY2FsbEluaXRIb29rcygpfSxuPWUuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG89aWkobik7by5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlPW87Zm9yKHZhciBzIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShzKSYmInByb3RvdHlwZSIhPT1zJiYiX19zdXBlcl9fIiE9PXMmJihlW3NdPXRoaXNbc10pO3JldHVybiB0LnN0YXRpY3MmJihpKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoeSh0LmluY2x1ZGVzKSxpLmFwcGx5KG51bGwsW29dLmNvbmNhdCh0LmluY2x1ZGVzKSksZGVsZXRlIHQuaW5jbHVkZXMpLG8ub3B0aW9ucyYmKHQub3B0aW9ucz1pKGlpKG8ub3B0aW9ucyksdC5vcHRpb25zKSksaShvLHQpLG8uX2luaXRIb29rcz1bXSxvLmNhbGxJbml0SG9va3M9ZnVuY3Rpb24oKXtpZighdGhpcy5faW5pdEhvb2tzQ2FsbGVkKXtuLmNhbGxJbml0SG9va3MmJm4uY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxpPW8uX2luaXRIb29rcy5sZW5ndGg7dDxpO3QrKylvLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LHYuaW5jbHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZSx0KSx0aGlzfSx2Lm1lcmdlT3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZS5vcHRpb25zLHQpLHRoaXN9LHYuYWRkSW5pdEhvb2s9ZnVuY3Rpb24odCl7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3RoaXNbdF0uYXBwbHkodGhpcyxpKX07cmV0dXJuIHRoaXMucHJvdG90eXBlLl9pbml0SG9va3M9dGhpcy5wcm90b3R5cGUuX2luaXRIb29rc3x8W10sdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcy5wdXNoKGUpLHRoaXN9O3ZhciBsaT17b246ZnVuY3Rpb24odCxpLGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vbihuLHRbbl0saSk7ZWxzZSBmb3IodmFyIG89MCxzPSh0PXUodCkpLmxlbmd0aDtvPHM7bysrKXRoaXMuX29uKHRbb10saSxlKTtyZXR1cm4gdGhpc30sb2ZmOmZ1bmN0aW9uKHQsaSxlKXtpZih0KWlmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vZmYobix0W25dLGkpO2Vsc2UgZm9yKHZhciBvPTAscz0odD11KHQpKS5sZW5ndGg7bzxzO28rKyl0aGlzLl9vZmYodFtvXSxpLGUpO2Vsc2UgZGVsZXRlIHRoaXMuX2V2ZW50cztyZXR1cm4gdGhpc30sX29uOmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fTt2YXIgbj10aGlzLl9ldmVudHNbdF07bnx8KG49W10sdGhpcy5fZXZlbnRzW3RdPW4pLGU9PT10aGlzJiYoZT12b2lkIDApO2Zvcih2YXIgbz17Zm46aSxjdHg6ZX0scz1uLHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspaWYoc1tyXS5mbj09PWkmJnNbcl0uY3R4PT09ZSlyZXR1cm47cy5wdXNoKG8pfSxfb2ZmOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbixvLHM7aWYodGhpcy5fZXZlbnRzJiYobj10aGlzLl9ldmVudHNbdF0pKWlmKGkpe2lmKGU9PT10aGlzJiYoZT12b2lkIDApLG4pZm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspe3ZhciBhPW5bb107aWYoYS5jdHg9PT1lJiZhLmZuPT09aSlyZXR1cm4gYS5mbj1yLHRoaXMuX2ZpcmluZ0NvdW50JiYodGhpcy5fZXZlbnRzW3RdPW49bi5zbGljZSgpKSx2b2lkIG4uc3BsaWNlKG8sMSl9fWVsc2V7Zm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspbltvXS5mbj1yO2RlbGV0ZSB0aGlzLl9ldmVudHNbdF19fSxmaXJlOmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5saXN0ZW5zKHQsbikpcmV0dXJuIHRoaXM7dmFyIG89aSh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXMsc291cmNlVGFyZ2V0OmUmJmUuc291cmNlVGFyZ2V0fHx0aGlzfSk7aWYodGhpcy5fZXZlbnRzKXt2YXIgcz10aGlzLl9ldmVudHNbdF07aWYocyl7dGhpcy5fZmlyaW5nQ291bnQ9dGhpcy5fZmlyaW5nQ291bnQrMXx8MTtmb3IodmFyIHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspe3ZhciBoPXNbcl07aC5mbi5jYWxsKGguY3R4fHx0aGlzLG8pfXRoaXMuX2ZpcmluZ0NvdW50LS19fXJldHVybiBuJiZ0aGlzLl9wcm9wYWdhdGVFdmVudChvKSx0aGlzfSxsaXN0ZW5zOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF07aWYoZSYmZS5sZW5ndGgpcmV0dXJuITA7aWYoaSlmb3IodmFyIG4gaW4gdGhpcy5fZXZlbnRQYXJlbnRzKWlmKHRoaXMuX2V2ZW50UGFyZW50c1tuXS5saXN0ZW5zKHQsaSkpcmV0dXJuITA7cmV0dXJuITF9LG9uY2U6ZnVuY3Rpb24odCxpLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBvIGluIHQpdGhpcy5vbmNlKG8sdFtvXSxpKTtyZXR1cm4gdGhpc312YXIgcz1lKGZ1bmN0aW9uKCl7dGhpcy5vZmYodCxpLG4pLm9mZih0LHMsbil9LHRoaXMpO3JldHVybiB0aGlzLm9uKHQsaSxuKS5vbih0LHMsbil9LGFkZEV2ZW50UGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmVudFBhcmVudHM9dGhpcy5fZXZlbnRQYXJlbnRzfHx7fSx0aGlzLl9ldmVudFBhcmVudHNbbih0KV09dCx0aGlzfSxyZW1vdmVFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzJiZkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW24odCldLHRoaXN9LF9wcm9wYWdhdGVFdmVudDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKXRoaXMuX2V2ZW50UGFyZW50c1tlXS5maXJlKHQudHlwZSxpKHtsYXllcjp0LnRhcmdldCxwcm9wYWdhdGVkRnJvbTp0LnRhcmdldH0sdCksITApfX07bGkuYWRkRXZlbnRMaXN0ZW5lcj1saS5vbixsaS5yZW1vdmVFdmVudExpc3RlbmVyPWxpLmNsZWFyQWxsRXZlbnRMaXN0ZW5lcnM9bGkub2ZmLGxpLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyPWxpLm9uY2UsbGkuZmlyZUV2ZW50PWxpLmZpcmUsbGkuaGFzRXZlbnRMaXN0ZW5lcnM9bGkubGlzdGVuczt2YXIgY2k9di5leHRlbmQobGkpLF9pPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9O3gucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZCh3KHQpKX0sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3VidHJhY3Qodyh0KSl9LF9zdWJ0cmFjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2aWRlQnkodCl9LF9kaXZpZGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxtdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRpcGx5QnkodCl9LF9tdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LHNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KHRoaXMueCp0LngsdGhpcy55KnQueSl9LHVuc2NhbGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgodGhpcy54L3QueCx0aGlzLnkvdC55KX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9LGZsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZmxvb3IoKX0sX2Zsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpfSxfY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9LHRydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKX0sX3RydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1faSh0aGlzLngpLHRoaXMueT1faSh0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dmFyIGk9KHQ9dyh0KSkueC10aGlzLngsZT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoaSppK2UqZSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4odD13KHQpKS54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0PXcodCksTWF0aC5hYnModC54KTw9TWF0aC5hYnModGhpcy54KSYmTWF0aC5hYnModC55KTw9TWF0aC5hYnModGhpcy55KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUG9pbnQoIithKHRoaXMueCkrIiwgIithKHRoaXMueSkrIikifX0sUC5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD13KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRUb3BMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlufSxnZXRCb3R0b21SaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbil9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3ZhciBpLGU7cmV0dXJuKHQ9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgeD93KHQpOmIodCkpaW5zdGFuY2VvZiBQPyhpPXQubWluLGU9dC5tYXgpOmk9ZT10LGkueD49dGhpcy5taW4ueCYmZS54PD10aGlzLm1heC54JiZpLnk+PXRoaXMubWluLnkmJmUueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PWIodCk7dmFyIGk9dGhpcy5taW4sZT10aGlzLm1heCxuPXQubWluLG89dC5tYXgscz1vLng+PWkueCYmbi54PD1lLngscj1vLnk+PWkueSYmbi55PD1lLnk7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Yih0KTt2YXIgaT10aGlzLm1pbixlPXRoaXMubWF4LG49dC5taW4sbz10Lm1heCxzPW8ueD5pLngmJm4ueDxlLngscj1vLnk+aS55JiZuLnk8ZS55O3JldHVybiBzJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxULnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIE0paT10LGU9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFQpKXJldHVybiB0P3RoaXMuZXh0ZW5kKEModCl8fHoodCkpOnRoaXM7aWYoaT10Ll9zb3V0aFdlc3QsZT10Ll9ub3J0aEVhc3QsIWl8fCFlKXJldHVybiB0aGlzfXJldHVybiBufHxvPyhuLmxhdD1NYXRoLm1pbihpLmxhdCxuLmxhdCksbi5sbmc9TWF0aC5taW4oaS5sbmcsbi5sbmcpLG8ubGF0PU1hdGgubWF4KGUubGF0LG8ubGF0KSxvLmxuZz1NYXRoLm1heChlLmxuZyxvLmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IE0oaS5sYXQsaS5sbmcpLHRoaXMuX25vcnRoRWFzdD1uZXcgTShlLmxhdCxlLmxuZykpLHRoaXN9LHBhZDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj1NYXRoLmFicyhpLmxhdC1lLmxhdCkqdCxvPU1hdGguYWJzKGkubG5nLWUubG5nKSp0O3JldHVybiBuZXcgVChuZXcgTShpLmxhdC1uLGkubG5nLW8pLG5ldyBNKGUubGF0K24sZS5sbmcrbykpfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE0oKHRoaXMuX3NvdXRoV2VzdC5sYXQrdGhpcy5fbm9ydGhFYXN0LmxhdCkvMiwodGhpcy5fc291dGhXZXN0LmxuZyt0aGlzLl9ub3J0aEVhc3QubG5nKS8yKX0sZ2V0U291dGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdH0sZ2V0Tm9ydGhFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdH0sZ2V0Tm9ydGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCkpfSxnZXRXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sbmd9LGdldFNvdXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sYXR9LGdldEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxuZ30sZ2V0Tm9ydGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxhdH0sY29udGFpbnM6ZnVuY3Rpb24odCl7dD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBNfHwibGF0ImluIHQ/Qyh0KTp6KHQpO3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7cmV0dXJuIHQgaW5zdGFuY2VvZiBUPyhpPXQuZ2V0U291dGhXZXN0KCksZT10LmdldE5vcnRoRWFzdCgpKTppPWU9dCxpLmxhdD49bi5sYXQmJmUubGF0PD1vLmxhdCYmaS5sbmc+PW4ubG5nJiZlLmxuZzw9by5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+PWkubGF0JiZuLmxhdDw9ZS5sYXQscj1vLmxuZz49aS5sbmcmJm4ubG5nPD1lLmxuZztyZXR1cm4gcyYmcn0sb3ZlcmxhcHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+aS5sYXQmJm4ubGF0PGUubGF0LHI9by5sbmc+aS5sbmcmJm4ubG5nPGUubG5nO3JldHVybiBzJiZyfSx0b0JCb3hTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5nZXRXZXN0KCksdGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0Tm9ydGgoKV0uam9pbigiLCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PXoodCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksaSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19LE0ucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PUModCksTWF0aC5tYXgoTWF0aC5hYnModGhpcy5sYXQtdC5sYXQpLE1hdGguYWJzKHRoaXMubG5nLXQubG5nKSk8PSh2b2lkIDA9PT1pPzFlLTk6aSkpfSx0b1N0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iTGF0TG5nKCIrYSh0aGlzLmxhdCx0KSsiLCAiK2EodGhpcy5sbmcsdCkrIikifSxkaXN0YW5jZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBwaS5kaXN0YW5jZSh0aGlzLEModCkpfSx3cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHBpLndyYXBMYXRMbmcodGhpcyl9LHRvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPTE4MCp0LzQwMDc1MDE3LGU9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIHooW3RoaXMubGF0LWksdGhpcy5sbmctZV0sW3RoaXMubGF0K2ksdGhpcy5sbmcrZV0pfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmxhdCx0aGlzLmxuZyx0aGlzLmFsdCl9fTt2YXIgZGk9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoaSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShlLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5zY2FsZShpKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXtpZih0aGlzLmluZmluaXRlKXJldHVybiBudWxsO3ZhciBpPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsZT10aGlzLnNjYWxlKHQpO3JldHVybiBuZXcgUCh0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1pbixlKSx0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1heCxlKSl9LGluZmluaXRlOiExLHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy53cmFwTG5nP3ModC5sbmcsdGhpcy53cmFwTG5nLCEwKTp0LmxuZztyZXR1cm4gbmV3IE0odGhpcy53cmFwTGF0P3ModC5sYXQsdGhpcy53cmFwTGF0LCEwKTp0LmxhdCxpLHQuYWx0KX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaT10LmdldENlbnRlcigpLGU9dGhpcy53cmFwTGF0TG5nKGkpLG49aS5sYXQtZS5sYXQsbz1pLmxuZy1lLmxuZztpZigwPT09biYmMD09PW8pcmV0dXJuIHQ7dmFyIHM9dC5nZXRTb3V0aFdlc3QoKSxyPXQuZ2V0Tm9ydGhFYXN0KCk7cmV0dXJuIG5ldyBUKG5ldyBNKHMubGF0LW4scy5sbmctbyksbmV3IE0oci5sYXQtbixyLmxuZy1vKSl9fSxwaT1pKHt9LGRpLHt3cmFwTG5nOlstMTgwLDE4MF0sUjo2MzcxZTMsZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1NYXRoLlBJLzE4MCxuPXQubGF0KmUsbz1pLmxhdCplLHM9TWF0aC5zaW4oKGkubGF0LXQubGF0KSplLzIpLHI9TWF0aC5zaW4oKGkubG5nLXQubG5nKSplLzIpLGE9cypzK01hdGguY29zKG4pKk1hdGguY29zKG8pKnIqcixoPTIqTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksTWF0aC5zcXJ0KDEtYSkpO3JldHVybiB0aGlzLlIqaH19KSxtaT17Ujo2Mzc4MTM3LE1BWF9MQVRJVFVERTo4NS4wNTExMjg3Nzk4LHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5QSS8xODAsZT10aGlzLk1BWF9MQVRJVFVERSxuPU1hdGgubWF4KE1hdGgubWluKGUsdC5sYXQpLC1lKSxvPU1hdGguc2luKG4qaSk7cmV0dXJuIG5ldyB4KHRoaXMuUip0LmxuZyppLHRoaXMuUipNYXRoLmxvZygoMStvKS8oMS1vKSkvMil9LHVucHJvamVjdDpmdW5jdGlvbih0KXt2YXIgaT0xODAvTWF0aC5QSTtyZXR1cm4gbmV3IE0oKDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueS90aGlzLlIpKS1NYXRoLlBJLzIpKmksdC54KmkvdGhpcy5SKX0sYm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9NjM3ODEzNypNYXRoLlBJO3JldHVybiBuZXcgUChbLXQsLXRdLFt0LHRdKX0oKX07Uy5wcm90b3R5cGU9e3RyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl90cmFuc2Zvcm0odC5jbG9uZSgpLGkpfSxfdHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSx0Lng9aSoodGhpcy5fYSp0LngrdGhpcy5fYiksdC55PWkqKHRoaXMuX2MqdC55K3RoaXMuX2QpLHR9LHVudHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSxuZXcgeCgodC54L2ktdGhpcy5fYikvdGhpcy5fYSwodC55L2ktdGhpcy5fZCkvdGhpcy5fYyl9fTt2YXIgZmksZ2ksdmkseWk9aSh7fSxwaSx7Y29kZToiRVBTRzozODU3Iixwcm9qZWN0aW9uOm1pLHRyYW5zZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9LjUvKE1hdGguUEkqbWkuUik7cmV0dXJuIFoodCwuNSwtdCwuNSl9KCl9KSx4aT1pKHt9LHlpLHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSx3aT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsUGk9IkFjdGl2ZVhPYmplY3QiaW4gd2luZG93LExpPVBpJiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcixiaT0ibXNMYXVuY2hVcmkiaW4gbmF2aWdhdG9yJiYhKCJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQpLFRpPUIoIndlYmtpdCIpLHppPUIoImFuZHJvaWQiKSxNaT1CKCJhbmRyb2lkIDIiKXx8QigiYW5kcm9pZCAzIiksQ2k9cGFyc2VJbnQoL1dlYktpdFwvKFswLTldKyl8JC8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KVsxXSwxMCksU2k9emkmJkIoIkdvb2dsZSIpJiZDaTw1MzcmJiEoIkF1ZGlvTm9kZSJpbiB3aW5kb3cpLFppPSEhd2luZG93Lm9wZXJhLEVpPUIoImNocm9tZSIpLGtpPUIoImdlY2tvIikmJiFUaSYmIVppJiYhUGksQmk9IUVpJiZCKCJzYWZhcmkiKSxBaT1CKCJwaGFudG9tIiksSWk9Ik9UcmFuc2l0aW9uImluIHdpLE9pPTA9PT1uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiV2luIiksUmk9UGkmJiJ0cmFuc2l0aW9uImluIHdpLE5pPSJXZWJLaXRDU1NNYXRyaXgiaW4gd2luZG93JiYibTExImluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4JiYhTWksRGk9Ik1velBlcnNwZWN0aXZlImluIHdpLGppPSF3aW5kb3cuTF9ESVNBQkxFXzNEJiYoUml8fE5pfHxEaSkmJiFJaSYmIUFpLFdpPSJ1bmRlZmluZWQiIT10eXBlb2Ygb3JpZW50YXRpb258fEIoIm1vYmlsZSIpLEhpPVdpJiZUaSxGaT1XaSYmTmksVWk9IXdpbmRvdy5Qb2ludGVyRXZlbnQmJndpbmRvdy5NU1BvaW50ZXJFdmVudCxWaT0hKCF3aW5kb3cuUG9pbnRlckV2ZW50JiYhVWkpLHFpPSF3aW5kb3cuTF9OT19UT1VDSCYmKFZpfHwib250b3VjaHN0YXJ0ImluIHdpbmRvd3x8d2luZG93LkRvY3VtZW50VG91Y2gmJmRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpLEdpPVdpJiZaaSxLaT1XaSYma2ksWWk9KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHx3aW5kb3cuc2NyZWVuLmRldmljZVhEUEkvd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSk+MSxYaT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQsSmk9ISghZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TfHwhRSgic3ZnIikuY3JlYXRlU1ZHUmVjdCksJGk9IUppJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPSIxIi8+Jzt2YXIgaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGkuc3R5bGUuYmVoYXZpb3I9InVybCgjZGVmYXVsdCNWTUwpIixpJiYib2JqZWN0Ij09dHlwZW9mIGkuYWRqfWNhdGNoKHQpe3JldHVybiExfX0oKSxRaT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7aWU6UGksaWVsdDk6TGksZWRnZTpiaSx3ZWJraXQ6VGksYW5kcm9pZDp6aSxhbmRyb2lkMjM6TWksYW5kcm9pZFN0b2NrOlNpLG9wZXJhOlppLGNocm9tZTpFaSxnZWNrbzpraSxzYWZhcmk6QmkscGhhbnRvbTpBaSxvcGVyYTEyOklpLHdpbjpPaSxpZTNkOlJpLHdlYmtpdDNkOk5pLGdlY2tvM2Q6RGksYW55M2Q6amksbW9iaWxlOldpLG1vYmlsZVdlYmtpdDpIaSxtb2JpbGVXZWJraXQzZDpGaSxtc1BvaW50ZXI6VWkscG9pbnRlcjpWaSx0b3VjaDpxaSxtb2JpbGVPcGVyYTpHaSxtb2JpbGVHZWNrbzpLaSxyZXRpbmE6WWksY2FudmFzOlhpLHN2ZzpKaSx2bWw6JGl9KSx0ZT1VaT8iTVNQb2ludGVyRG93biI6InBvaW50ZXJkb3duIixpZT1VaT8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixlZT1VaT8iTVNQb2ludGVyVXAiOiJwb2ludGVydXAiLG5lPVVpPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixvZT1bIklOUFVUIiwiU0VMRUNUIiwiT1BUSU9OIl0sc2U9e30scmU9ITEsYWU9MCxoZT1VaT8iTVNQb2ludGVyRG93biI6Vmk/InBvaW50ZXJkb3duIjoidG91Y2hzdGFydCIsdWU9VWk/Ik1TUG9pbnRlclVwIjpWaT8icG9pbnRlcnVwIjoidG91Y2hlbmQiLGxlPSJfbGVhZmxldF8iLGNlPXN0KFsidHJhbnNmb3JtIiwid2Via2l0VHJhbnNmb3JtIiwiT1RyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIl0pLF9lPXN0KFsid2Via2l0VHJhbnNpdGlvbiIsInRyYW5zaXRpb24iLCJPVHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJtc1RyYW5zaXRpb24iXSksZGU9IndlYmtpdFRyYW5zaXRpb24iPT09X2V8fCJPVHJhbnNpdGlvbiI9PT1fZT9fZSsiRW5kIjoidHJhbnNpdGlvbmVuZCI7aWYoIm9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQpZmk9ZnVuY3Rpb24oKXttdCh3aW5kb3csInNlbGVjdHN0YXJ0IixQdCl9LGdpPWZ1bmN0aW9uKCl7ZnQod2luZG93LCJzZWxlY3RzdGFydCIsUHQpfTtlbHNle3ZhciBwZT1zdChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO2ZpPWZ1bmN0aW9uKCl7aWYocGUpe3ZhciB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTt2aT10W3BlXSx0W3BlXT0ibm9uZSJ9fSxnaT1mdW5jdGlvbigpe3BlJiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW3BlXT12aSx2aT12b2lkIDApfX12YXIgbWUsZmUsZ2UsdmU9KE9iamVjdC5mcmVlemV8fE9iamVjdCkoe1RSQU5TRk9STTpjZSxUUkFOU0lUSU9OOl9lLFRSQU5TSVRJT05fRU5EOmRlLGdldDpWLGdldFN0eWxlOnEsY3JlYXRlOkcscmVtb3ZlOkssZW1wdHk6WSx0b0Zyb250OlgsdG9CYWNrOkosaGFzQ2xhc3M6JCxhZGRDbGFzczpRLHJlbW92ZUNsYXNzOnR0LHNldENsYXNzOml0LGdldENsYXNzOmV0LHNldE9wYWNpdHk6bnQsdGVzdFByb3A6c3Qsc2V0VHJhbnNmb3JtOnJ0LHNldFBvc2l0aW9uOmF0LGdldFBvc2l0aW9uOmh0LGRpc2FibGVUZXh0U2VsZWN0aW9uOmZpLGVuYWJsZVRleHRTZWxlY3Rpb246Z2ksZGlzYWJsZUltYWdlRHJhZzp1dCxlbmFibGVJbWFnZURyYWc6bHQscHJldmVudE91dGxpbmU6Y3QscmVzdG9yZU91dGxpbmU6X3QsZ2V0U2l6ZWRQYXJlbnROb2RlOmR0LGdldFNjYWxlOnB0fSkseWU9Il9sZWFmbGV0X2V2ZW50cyIseGU9T2kmJkVpPzIqd2luZG93LmRldmljZVBpeGVsUmF0aW86a2k/d2luZG93LmRldmljZVBpeGVsUmF0aW86MSx3ZT17fSxQZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7b246bXQsb2ZmOmZ0LHN0b3BQcm9wYWdhdGlvbjp5dCxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246eHQsZGlzYWJsZUNsaWNrUHJvcGFnYXRpb246d3QscHJldmVudERlZmF1bHQ6UHQsc3RvcDpMdCxnZXRNb3VzZVBvc2l0aW9uOmJ0LGdldFdoZWVsRGVsdGE6VHQsZmFrZVN0b3A6enQsc2tpcHBlZDpNdCxpc0V4dGVybmFsVGFyZ2V0OkN0LGFkZExpc3RlbmVyOm10LHJlbW92ZUxpc3RlbmVyOmZ0fSksTGU9Y2kuZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxpLGUsbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWV8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9aHQodCksdGhpcy5fb2Zmc2V0PWkuc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpLHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUsdGhpcy5maXJlKCJzdGFydCIpLHRoaXMuX2FuaW1hdGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9zdGVwKCEwKSx0aGlzLl9jb21wbGV0ZSgpKX0sX2FuaW1hdGU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltSWQ9Zih0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24odCl7dmFyIGk9K25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSxlPTFlMyp0aGlzLl9kdXJhdGlvbjtpPGU/dGhpcy5fcnVuRnJhbWUodGhpcy5fZWFzZU91dChpL2UpLHQpOih0aGlzLl9ydW5GcmFtZSgxKSx0aGlzLl9jb21wbGV0ZSgpKX0sX3J1bkZyYW1lOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fc3RhcnRQb3MuYWRkKHRoaXMuX29mZnNldC5tdWx0aXBseUJ5KHQpKTtpJiZlLl9yb3VuZCgpLGF0KHRoaXMuX2VsLGUpLHRoaXMuZmlyZSgic3RlcCIpfSxfY29tcGxldGU6ZnVuY3Rpb24oKXtnKHRoaXMuX2FuaW1JZCksdGhpcy5faW5Qcm9ncmVzcz0hMSx0aGlzLmZpcmUoImVuZCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxiZT1jaS5leHRlbmQoe29wdGlvbnM6e2Nyczp5aSxjZW50ZXI6dm9pZCAwLHpvb206dm9pZCAwLG1pblpvb206dm9pZCAwLG1heFpvb206dm9pZCAwLGxheWVyczpbXSxtYXhCb3VuZHM6dm9pZCAwLHJlbmRlcmVyOnZvaWQgMCx6b29tQW5pbWF0aW9uOiEwLHpvb21BbmltYXRpb25UaHJlc2hvbGQ6NCxmYWRlQW5pbWF0aW9uOiEwLG1hcmtlclpvb21BbmltYXRpb246ITAsdHJhbnNmb3JtM0RMaW1pdDo4Mzg4NjA4LHpvb21TbmFwOjEsem9vbURlbHRhOjEsdHJhY2tSZXNpemU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtpPWwodGhpcyxpKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9sYXllcnM9e30sdGhpcy5fem9vbUJvdW5kTGF5ZXJzPXt9LHRoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2luaXRDb250YWluZXIodCksdGhpcy5faW5pdExheW91dCgpLHRoaXMuX29uUmVzaXplPWUodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGkubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhpLm1heEJvdW5kcyksdm9pZCAwIT09aS56b29tJiYodGhpcy5fem9vbT10aGlzLl9saW1pdFpvb20oaS56b29tKSksaS5jZW50ZXImJnZvaWQgMCE9PWkuem9vbSYmdGhpcy5zZXRWaWV3KEMoaS5jZW50ZXIpLGkuem9vbSx7cmVzZXQ6ITB9KSx0aGlzLmNhbGxJbml0SG9va3MoKSx0aGlzLl96b29tQW5pbWF0ZWQ9X2UmJmppJiYhR2kmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX3pvb21BbmltYXRlZCYmKHRoaXMuX2NyZWF0ZUFuaW1Qcm94eSgpLG10KHRoaXMuX3Byb3h5LGRlLHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCx0aGlzKSksdGhpcy5fYWRkTGF5ZXJzKHRoaXMub3B0aW9ucy5sYXllcnMpfSxzZXRWaWV3OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT12b2lkIDA9PT1lP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIoQyh0KSxlLHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpLG49bnx8e30sdGhpcy5fc3RvcCgpLHRoaXMuX2xvYWRlZCYmIW4ucmVzZXQmJiEwIT09biYmKHZvaWQgMCE9PW4uYW5pbWF0ZSYmKG4uem9vbT1pKHthbmltYXRlOm4uYW5pbWF0ZX0sbi56b29tKSxuLnBhbj1pKHthbmltYXRlOm4uYW5pbWF0ZSxkdXJhdGlvbjpuLmR1cmF0aW9ufSxuLnBhbikpLHRoaXMuX3pvb20hPT1lP3RoaXMuX3RyeUFuaW1hdGVkWm9vbSYmdGhpcy5fdHJ5QW5pbWF0ZWRab29tKHQsZSxuLnpvb20pOnRoaXMuX3RyeUFuaW1hdGVkUGFuKHQsbi5wYW4pKT8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcyk6KHRoaXMuX3Jlc2V0Vmlldyh0LGUpLHRoaXMpfSxzZXRab29tOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOml9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxpKXtyZXR1cm4gdD10fHwoamk/dGhpcy5vcHRpb25zLnpvb21EZWx0YToxKSx0aGlzLnNldFpvb20odGhpcy5fem9vbSt0LGkpfSx6b29tT3V0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9dHx8KGppP3RoaXMub3B0aW9ucy56b29tRGVsdGE6MSksdGhpcy5zZXRab29tKHRoaXMuX3pvb20tdCxpKX0sc2V0Wm9vbUFyb3VuZDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxzPSh0IGluc3RhbmNlb2YgeD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSkuc3VidHJhY3QobykubXVsdGlwbHlCeSgxLTEvbikscj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoby5hZGQocykpO3JldHVybiB0aGlzLnNldFZpZXcocixpLHt6b29tOmV9KX0sX2dldEJvdW5kc0NlbnRlclpvb206ZnVuY3Rpb24odCxpKXtpPWl8fHt9LHQ9dC5nZXRCb3VuZHM/dC5nZXRCb3VuZHMoKTp6KHQpO3ZhciBlPXcoaS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSksbj13KGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMuZ2V0Qm91bmRzWm9vbSh0LCExLGUuYWRkKG4pKTtpZigobz0ibnVtYmVyIj09dHlwZW9mIGkubWF4Wm9vbT9NYXRoLm1pbihpLm1heFpvb20sbyk6byk9PT0xLzApcmV0dXJue2NlbnRlcjp0LmdldENlbnRlcigpLHpvb206b307dmFyIHM9bi5zdWJ0cmFjdChlKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLG8pLGE9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksbyk7cmV0dXJue2NlbnRlcjp0aGlzLnVucHJvamVjdChyLmFkZChhKS5kaXZpZGVCeSgyKS5hZGQocyksbyksem9vbTpvfX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsaSl7aWYoISh0PXoodCkpLmlzVmFsaWQoKSl0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBhcmUgbm90IHZhbGlkLiIpO3ZhciBlPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxpKTtyZXR1cm4gdGhpcy5zZXRWaWV3KGUuY2VudGVyLGUuem9vbSxpKX0sZml0V29ybGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZml0Qm91bmRzKFtbLTkwLC0xODBdLFs5MCwxODBdXSx0KX0scGFuVG86ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5zZXRWaWV3KHQsdGhpcy5fem9vbSx7cGFuOml9KX0scGFuQnk6ZnVuY3Rpb24odCxpKXtpZih0PXcodCkucm91bmQoKSxpPWl8fHt9LCF0LngmJiF0LnkpcmV0dXJuIHRoaXMuZmlyZSgibW92ZWVuZCIpO2lmKCEwIT09aS5hbmltYXRlJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnModCkpcmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0aGlzLnVucHJvamVjdCh0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkuYWRkKHQpKSx0aGlzLmdldFpvb20oKSksdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgTGUsdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxpLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLCExIT09aS5hbmltYXRlKXtRKHRoaXMuX21hcFBhbmUsImxlYWZsZXQtcGFuLWFuaW0iKTt2YXIgZT10aGlzLl9nZXRNYXBQYW5lUG9zKCkuc3VidHJhY3QodCkucm91bmQoKTt0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLGUsaS5kdXJhdGlvbnx8LjI1LGkuZWFzZUxpbmVhcml0eSl9ZWxzZSB0aGlzLl9yYXdQYW5CeSh0KSx0aGlzLmZpcmUoIm1vdmUiKS5maXJlKCJtb3ZlZW5kIik7cmV0dXJuIHRoaXN9LGZseVRvOmZ1bmN0aW9uKHQsaSxlKXtmdW5jdGlvbiBuKHQpe3ZhciBpPShnKmctbSptKyh0Py0xOjEpKngqeCp2KnYpLygyKih0P2c6bSkqeCp2KSxlPU1hdGguc3FydChpKmkrMSktaTtyZXR1cm4gZTwxZS05Py0xODpNYXRoLmxvZyhlKX1mdW5jdGlvbiBvKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHIodCl7cmV0dXJuIG8odCkvcyh0KX1mdW5jdGlvbiBhKHQpe3JldHVybiBtKihzKHcpL3Modyt5KnQpKX1mdW5jdGlvbiBoKHQpe3JldHVybiBtKihzKHcpKnIodyt5KnQpLW8odykpL3h9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsMS41KX1mdW5jdGlvbiBsKCl7dmFyIGU9KERhdGUubm93KCktUCkvYixuPXUoZSkqTDtlPD0xPyh0aGlzLl9mbHlUb0ZyYW1lPWYobCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KGMuYWRkKF8uc3VidHJhY3QoYykubXVsdGlwbHlCeShoKG4pL3YpKSxwKSx0aGlzLmdldFNjYWxlWm9vbShtL2EobikscCkse2ZseVRvOiEwfSkpOnRoaXMuX21vdmUodCxpKS5fbW92ZUVuZCghMCl9aWYoITE9PT0oZT1lfHx7fSkuYW5pbWF0ZXx8IWppKXJldHVybiB0aGlzLnNldFZpZXcodCxpLGUpO3RoaXMuX3N0b3AoKTt2YXIgYz10aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSksXz10aGlzLnByb2plY3QodCksZD10aGlzLmdldFNpemUoKSxwPXRoaXMuX3pvb207dD1DKHQpLGk9dm9pZCAwPT09aT9wOmk7dmFyIG09TWF0aC5tYXgoZC54LGQueSksZz1tKnRoaXMuZ2V0Wm9vbVNjYWxlKHAsaSksdj1fLmRpc3RhbmNlVG8oYyl8fDEseT0xLjQyLHg9eSp5LHc9bigwKSxQPURhdGUubm93KCksTD0obigxKS13KS95LGI9ZS5kdXJhdGlvbj8xZTMqZS5kdXJhdGlvbjoxZTMqTCouODtyZXR1cm4gdGhpcy5fbW92ZVN0YXJ0KCEwLGUubm9Nb3ZlU3RhcnQpLGwuY2FsbCh0aGlzKSx0aGlzfSxmbHlUb0JvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxpKTtyZXR1cm4gdGhpcy5mbHlUbyhlLmNlbnRlcixlLnpvb20saSl9LHNldE1heEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4odD16KHQpKS5pc1ZhbGlkKCk/KHRoaXMub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMub2ZmKCJtb3ZlZW5kIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMub3B0aW9ucy5tYXhCb3VuZHM9dCx0aGlzLl9sb2FkZWQmJnRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcygpLHRoaXMub24oIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpOih0aGlzLm9wdGlvbnMubWF4Qm91bmRzPW51bGwsdGhpcy5vZmYoIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpfSxzZXRNaW5ab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5taW5ab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWluWm9vbT10LHRoaXMuX2xvYWRlZCYmaSE9PXQmJih0aGlzLmZpcmUoInpvb21sZXZlbHNjaGFuZ2UiKSx0aGlzLmdldFpvb20oKTx0aGlzLm9wdGlvbnMubWluWm9vbSk/dGhpcy5zZXRab29tKHQpOnRoaXN9LHNldE1heFpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207cmV0dXJuIHRoaXMub3B0aW9ucy5tYXhab29tPXQsdGhpcy5fbG9hZGVkJiZpIT09dCYmKHRoaXMuZmlyZSgiem9vbWxldmVsc2NoYW5nZSIpLHRoaXMuZ2V0Wm9vbSgpPnRoaXMub3B0aW9ucy5tYXhab29tKT90aGlzLnNldFpvb20odCk6dGhpc30scGFuSW5zaWRlQm91bmRzOmZ1bmN0aW9uKHQsaSl7dGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwO3ZhciBlPXRoaXMuZ2V0Q2VudGVyKCksbj10aGlzLl9saW1pdENlbnRlcihlLHRoaXMuX3pvb20seih0KSk7cmV0dXJuIGUuZXF1YWxzKG4pfHx0aGlzLnBhblRvKG4saSksdGhpcy5fZW5mb3JjaW5nQm91bmRzPSExLHRoaXN9LHBhbkluc2lkZTpmdW5jdGlvbih0LGkpe3ZhciBlPXcoKGk9aXx8e30pLnBhZGRpbmdUb3BMZWZ0fHxpLnBhZGRpbmd8fFswLDBdKSxuPXcoaS5wYWRkaW5nQm90dG9tUmlnaHR8fGkucGFkZGluZ3x8WzAsMF0pLG89dGhpcy5nZXRDZW50ZXIoKSxzPXRoaXMucHJvamVjdChvKSxyPXRoaXMucHJvamVjdCh0KSxhPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxoPWEuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHU9YihbYS5taW4uYWRkKGUpLGEubWF4LnN1YnRyYWN0KG4pXSk7aWYoIXUuY29udGFpbnMocikpe3RoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMDt2YXIgbD1zLnN1YnRyYWN0KHIpLGM9dyhyLngrbC54LHIueStsLnkpOyhyLng8dS5taW4ueHx8ci54PnUubWF4LngpJiYoYy54PXMueC1sLngsbC54PjA/Yy54Kz1oLngtZS54OmMueC09aC54LW4ueCksKHIueTx1Lm1pbi55fHxyLnk+dS5tYXgueSkmJihjLnk9cy55LWwueSxsLnk+MD9jLnkrPWgueS1lLnk6Yy55LT1oLnktbi55KSx0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KGMpLGkpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMX1yZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PWkoe2FuaW1hdGU6ITEscGFuOiEwfSwhMD09PXQ/e2FuaW1hdGU6ITB9OnQpO3ZhciBuPXRoaXMuZ2V0U2l6ZSgpO3RoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2xhc3RDZW50ZXI9bnVsbDt2YXIgbz10aGlzLmdldFNpemUoKSxzPW4uZGl2aWRlQnkoMikucm91bmQoKSxyPW8uZGl2aWRlQnkoMikucm91bmQoKSxhPXMuc3VidHJhY3Qocik7cmV0dXJuIGEueHx8YS55Pyh0LmFuaW1hdGUmJnQucGFuP3RoaXMucGFuQnkoYSk6KHQucGFuJiZ0aGlzLl9yYXdQYW5CeShhKSx0aGlzLmZpcmUoIm1vdmUiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQoZSh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6bixuZXdTaXplOm99KSk6dGhpc30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fbGltaXRab29tKHRoaXMuX3pvb20pKSx0aGlzLm9wdGlvbnMuem9vbVNuYXB8fHRoaXMuZmlyZSgidmlld3Jlc2V0IiksdGhpcy5fc3RvcCgpfSxsb2NhdGU6ZnVuY3Rpb24odCl7aWYodD10aGlzLl9sb2NhdGVPcHRpb25zPWkoe3RpbWVvdXQ6MWU0LHdhdGNoOiExfSx0KSwhKCJnZW9sb2NhdGlvbiJpbiBuYXZpZ2F0b3IpKXJldHVybiB0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yKHtjb2RlOjAsbWVzc2FnZToiR2VvbG9jYXRpb24gbm90IHN1cHBvcnRlZC4ifSksdGhpczt2YXIgbj1lKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksbz1lKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsdGhpcyk7cmV0dXJuIHQud2F0Y2g/dGhpcy5fbG9jYXRpb25XYXRjaElkPW5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKG4sbyx0KTpuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG4sbyx0KSx0aGlzfSxzdG9wTG9jYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5nZW9sb2NhdGlvbiYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gmJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCksdGhpcy5fbG9jYXRlT3B0aW9ucyYmKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0Vmlldz0hMSksdGhpc30sX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGk9dC5jb2RlLGU9dC5tZXNzYWdlfHwoMT09PWk/InBlcm1pc3Npb24gZGVuaWVkIjoyPT09aT8icG9zaXRpb24gdW5hdmFpbGFibGUiOiJ0aW1lb3V0Iik7dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3JiYhdGhpcy5fbG9hZGVkJiZ0aGlzLmZpdFdvcmxkKCksdGhpcy5maXJlKCJsb2NhdGlvbmVycm9yIix7Y29kZTppLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIGVycm9yOiAiK2UrIi4ifSl9LF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOmZ1bmN0aW9uKHQpe3ZhciBpPW5ldyBNKHQuY29vcmRzLmxhdGl0dWRlLHQuY29vcmRzLmxvbmdpdHVkZSksZT1pLnRvQm91bmRzKDIqdC5jb29yZHMuYWNjdXJhY3kpLG49dGhpcy5fbG9jYXRlT3B0aW9ucztpZihuLnNldFZpZXcpe3ZhciBvPXRoaXMuZ2V0Qm91bmRzWm9vbShlKTt0aGlzLnNldFZpZXcoaSxuLm1heFpvb20/TWF0aC5taW4obyxuLm1heFpvb20pOm8pfXZhciBzPXtsYXRsbmc6aSxib3VuZHM6ZSx0aW1lc3RhbXA6dC50aW1lc3RhbXB9O2Zvcih2YXIgciBpbiB0LmNvb3JkcykibnVtYmVyIj09dHlwZW9mIHQuY29vcmRzW3JdJiYoc1tyXT10LmNvb3Jkc1tyXSk7dGhpcy5maXJlKCJsb2NhdGlvbmZvdW5kIixzKX0sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGkpe2lmKCFpKXJldHVybiB0aGlzO3ZhciBlPXRoaXNbdF09bmV3IGkodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goZSksdGhpcy5vcHRpb25zW3RdJiZlLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2luaXRFdmVudHMoITApLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBiZWluZyByZXVzZWQgYnkgYW5vdGhlciBpbnN0YW5jZSIpO3RyeXtkZWxldGUgdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkLGRlbGV0ZSB0aGlzLl9jb250YWluZXJJZH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQ9dm9pZCAwLHRoaXMuX2NvbnRhaW5lcklkPXZvaWQgMH12b2lkIDAhPT10aGlzLl9sb2NhdGlvbldhdGNoSWQmJnRoaXMuc3RvcExvY2F0ZSgpLHRoaXMuX3N0b3AoKSxLKHRoaXMuX21hcFBhbmUpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fcmVzaXplUmVxdWVzdCYmKGcodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1udWxsKSx0aGlzLl9jbGVhckhhbmRsZXJzKCksdGhpcy5fbG9hZGVkJiZ0aGlzLmZpcmUoInVubG9hZCIpO3ZhciB0O2Zvcih0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0ucmVtb3ZlKCk7Zm9yKHQgaW4gdGhpcy5fcGFuZXMpSyh0aGlzLl9wYW5lc1t0XSk7cmV0dXJuIHRoaXMuX2xheWVycz1bXSx0aGlzLl9wYW5lcz1bXSxkZWxldGUgdGhpcy5fbWFwUGFuZSxkZWxldGUgdGhpcy5fcmVuZGVyZXIsdGhpc30sY3JlYXRlUGFuZTpmdW5jdGlvbih0LGkpe3ZhciBlPUcoImRpdiIsImxlYWZsZXQtcGFuZSIrKHQ/IiBsZWFmbGV0LSIrdC5yZXBsYWNlKCJQYW5lIiwiIikrIi1wYW5lIjoiIiksaXx8dGhpcy5fbWFwUGFuZSk7cmV0dXJuIHQmJih0aGlzLl9wYW5lc1t0XT1lKSxlfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2xhc3RDZW50ZXImJiF0aGlzLl9tb3ZlZCgpP3RoaXMuX2xhc3RDZW50ZXI6dGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sZ2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29tfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFBpeGVsQm91bmRzKCk7cmV0dXJuIG5ldyBUKHRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSx0aGlzLnVucHJvamVjdCh0LmdldFRvcFJpZ2h0KCkpKX0sZ2V0TWluWm9vbTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbT90aGlzLl9sYXllcnNNaW5ab29tfHwwOnRoaXMub3B0aW9ucy5taW5ab29tfSxnZXRNYXhab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tP3ZvaWQgMD09PXRoaXMuX2xheWVyc01heFpvb20/MS8wOnRoaXMuX2xheWVyc01heFpvb206dGhpcy5vcHRpb25zLm1heFpvb219LGdldEJvdW5kc1pvb206ZnVuY3Rpb24odCxpLGUpe3Q9eih0KSxlPXcoZXx8WzAsMF0pO3ZhciBuPXRoaXMuZ2V0Wm9vbSgpfHwwLG89dGhpcy5nZXRNaW5ab29tKCkscz10aGlzLmdldE1heFpvb20oKSxyPXQuZ2V0Tm9ydGhXZXN0KCksYT10LmdldFNvdXRoRWFzdCgpLGg9dGhpcy5nZXRTaXplKCkuc3VidHJhY3QoZSksdT1iKHRoaXMucHJvamVjdChhLG4pLHRoaXMucHJvamVjdChyLG4pKS5nZXRTaXplKCksbD1qaT90aGlzLm9wdGlvbnMuem9vbVNuYXA6MSxjPWgueC91LngsXz1oLnkvdS55LGQ9aT9NYXRoLm1heChjLF8pOk1hdGgubWluKGMsXyk7cmV0dXJuIG49dGhpcy5nZXRTY2FsZVpvb20oZCxuKSxsJiYobj1NYXRoLnJvdW5kKG4vKGwvMTAwKSkqKGwvMTAwKSxuPWk/TWF0aC5jZWlsKG4vbCkqbDpNYXRoLmZsb29yKG4vbCkqbCksTWF0aC5tYXgobyxNYXRoLm1pbihzLG4pKX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplJiYhdGhpcy5fc2l6ZUNoYW5nZWR8fCh0aGlzLl9zaXplPW5ldyB4KHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8MCx0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwwKSx0aGlzLl9zaXplQ2hhbmdlZD0hMSksdGhpcy5fc2l6ZS5jbG9uZSgpfSxnZXRQaXhlbEJvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldFRvcExlZnRQb2ludCh0LGkpO3JldHVybiBuZXcgUChlLGUuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModm9pZCAwPT09dD90aGlzLmdldFpvb20oKTp0KX0sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5fcGFuZXNbdF06dH0sZ2V0UGFuZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFuZXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGdldFpvb21TY2FsZTpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMub3B0aW9ucy5jcnM7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksZS5zY2FsZSh0KS9lLnNjYWxlKGkpfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLm9wdGlvbnMuY3JzO2k9dm9pZCAwPT09aT90aGlzLl96b29tOmk7dmFyIG49ZS56b29tKHQqZS5zY2FsZShpKSk7cmV0dXJuIGlzTmFOKG4pPzEvMDpufSxwcm9qZWN0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KEModCksaSl9LHVucHJvamVjdDpmdW5jdGlvbih0LGkpe3JldHVybiBpPXZvaWQgMD09PWk/dGhpcy5fem9vbTppLHRoaXMub3B0aW9ucy5jcnMucG9pbnRUb0xhdExuZyh3KHQpLGkpfSxsYXllclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dyh0KS5hZGQodGhpcy5nZXRQaXhlbE9yaWdpbigpKTtyZXR1cm4gdGhpcy51bnByb2plY3QoaSl9LGxhdExuZ1RvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0KEModCkpLl9yb3VuZCgpLl9zdWJ0cmFjdCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpfSx3cmFwTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmcoQyh0KSl9LHdyYXBMYXRMbmdCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZ0JvdW5kcyh6KHQpKX0sZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5kaXN0YW5jZShDKHQpLEMoaSkpfSxjb250YWluZXJQb2ludFRvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdyh0KS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxsYXllclBvaW50VG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdyh0KS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sY29udGFpbmVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHcodCkpO3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhpKX0sbGF0TG5nVG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0aGlzLmxhdExuZ1RvTGF5ZXJQb2ludChDKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBidCh0LHRoaXMuX2NvbnRhaW5lcil9LG1vdXNlRXZlbnRUb0xheWVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSl9LG1vdXNlRXZlbnRUb0xhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fY29udGFpbmVyPVYodCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJNYXAgY29udGFpbmVyIG5vdCBmb3VuZC4iKTtpZihpLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiIpO210KGksInNjcm9sbCIsdGhpcy5fb25TY3JvbGwsdGhpcyksdGhpcy5fY29udGFpbmVySWQ9bihpKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dGhpcy5fZmFkZUFuaW1hdGVkPXRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uJiZqaSxRKHQsImxlYWZsZXQtY29udGFpbmVyIisocWk/IiBsZWFmbGV0LXRvdWNoIjoiIikrKFlpPyIgbGVhZmxldC1yZXRpbmEiOiIiKSsoTGk/IiBsZWFmbGV0LW9sZGllIjoiIikrKEJpPyIgbGVhZmxldC1zYWZhcmkiOiIiKSsodGhpcy5fZmFkZUFuaW1hdGVkPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGk9cSh0LCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1pJiYicmVsYXRpdmUiIT09aSYmImZpeGVkIiE9PWkmJih0LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHRoaXMuX2luaXRQYW5lcygpLHRoaXMuX2luaXRDb250cm9sUG9zJiZ0aGlzLl9pbml0Q29udHJvbFBvcygpfSxfaW5pdFBhbmVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFuZXM9e307dGhpcy5fcGFuZVJlbmRlcmVycz17fSx0aGlzLl9tYXBQYW5lPXRoaXMuY3JlYXRlUGFuZSgibWFwUGFuZSIsdGhpcy5fY29udGFpbmVyKSxhdCh0aGlzLl9tYXBQYW5lLG5ldyB4KDAsMCkpLHRoaXMuY3JlYXRlUGFuZSgidGlsZVBhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoInNoYWRvd1BhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoIm92ZXJsYXlQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJtYXJrZXJQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJ0b29sdGlwUGFuZSIpLHRoaXMuY3JlYXRlUGFuZSgicG9wdXBQYW5lIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChRKHQubWFya2VyUGFuZSwibGVhZmxldC16b29tLWhpZGUiKSxRKHQuc2hhZG93UGFuZSwibGVhZmxldC16b29tLWhpZGUiKSl9LF9yZXNldFZpZXc6ZnVuY3Rpb24odCxpKXthdCh0aGlzLl9tYXBQYW5lLG5ldyB4KDAsMCkpO3ZhciBlPSF0aGlzLl9sb2FkZWQ7dGhpcy5fbG9hZGVkPSEwLGk9dGhpcy5fbGltaXRab29tKGkpLHRoaXMuZmlyZSgidmlld3ByZXJlc2V0Iik7dmFyIG49dGhpcy5fem9vbSE9PWk7dGhpcy5fbW92ZVN0YXJ0KG4sITEpLl9tb3ZlKHQsaSkuX21vdmVFbmQobiksdGhpcy5maXJlKCJ2aWV3cmVzZXQiKSxlJiZ0aGlzLmZpcmUoImxvYWQiKX0sX21vdmVTdGFydDpmdW5jdGlvbih0LGkpe3JldHVybiB0JiZ0aGlzLmZpcmUoInpvb21zdGFydCIpLGl8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IiksdGhpc30sX21vdmU6ZnVuY3Rpb24odCxpLGUpe3ZvaWQgMD09PWkmJihpPXRoaXMuX3pvb20pO3ZhciBuPXRoaXMuX3pvb20hPT1pO3JldHVybiB0aGlzLl96b29tPWksdGhpcy5fbGFzdENlbnRlcj10LHRoaXMuX3BpeGVsT3JpZ2luPXRoaXMuX2dldE5ld1BpeGVsT3JpZ2luKHQpLChufHxlJiZlLnBpbmNoKSYmdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLmZpcmUoIm1vdmUiLGUpfSxfbW92ZUVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5maXJlKCJ6b29tZW5kIiksdGhpcy5maXJlKCJtb3ZlZW5kIil9LF9zdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5fZmx5VG9GcmFtZSksdGhpcy5fcGFuQW5pbSYmdGhpcy5fcGFuQW5pbS5zdG9wKCksdGhpc30sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe2F0KHRoaXMuX21hcFBhbmUsdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpKX0sX2dldFpvb21TcGFuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWF4Wm9vbSgpLXRoaXMuZ2V0TWluWm9vbSgpfSxfcGFuSW5zaWRlTWF4Qm91bmRzOmZ1bmN0aW9uKCl7dGhpcy5fZW5mb3JjaW5nQm91bmRzfHx0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKX0sX2NoZWNrSWZMb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU2V0IG1hcCBjZW50ZXIgYW5kIHpvb20gZmlyc3QuIil9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKHQpe3RoaXMuX3RhcmdldHM9e30sdGhpcy5fdGFyZ2V0c1tuKHRoaXMuX2NvbnRhaW5lcildPXRoaXM7dmFyIGk9dD9mdDptdDtpKHRoaXMuX2NvbnRhaW5lciwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBrZXlwcmVzcyIsdGhpcy5faGFuZGxlRE9NRXZlbnQsdGhpcyksdGhpcy5vcHRpb25zLnRyYWNrUmVzaXplJiZpKHdpbmRvdywicmVzaXplIix0aGlzLl9vblJlc2l6ZSx0aGlzKSxqaSYmdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJih0P3RoaXMub2ZmOnRoaXMub24pLmNhbGwodGhpcywibW92ZWVuZCIsdGhpcy5fb25Nb3ZlRW5kKX0sX29uUmVzaXplOmZ1bmN0aW9uKCl7Zyh0aGlzLl9yZXNpemVSZXF1ZXN0KSx0aGlzLl9yZXNpemVSZXF1ZXN0PWYoZnVuY3Rpb24oKXt0aGlzLmludmFsaWRhdGVTaXplKHtkZWJvdW5jZU1vdmVlbmQ6ITB9KX0sdGhpcyl9LF9vblNjcm9sbDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3A9MCx0aGlzLl9jb250YWluZXIuc2Nyb2xsTGVmdD0wfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO01hdGgubWF4KE1hdGguYWJzKHQueCksTWF0aC5hYnModC55KSk+PXRoaXMub3B0aW9ucy50cmFuc2Zvcm0zRExpbWl0JiZ0aGlzLl9yZXNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0aGlzLmdldFpvb20oKSl9LF9maW5kRXZlbnRUYXJnZXRzOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG89W10scz0ibW91c2VvdXQiPT09aXx8Im1vdXNlb3ZlciI9PT1pLHI9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxhPSExO3I7KXtpZigoZT10aGlzLl90YXJnZXRzW24ocildKSYmKCJjbGljayI9PT1pfHwicHJlY2xpY2siPT09aSkmJiF0Ll9zaW11bGF0ZWQmJnRoaXMuX2RyYWdnYWJsZU1vdmVkKGUpKXthPSEwO2JyZWFrfWlmKGUmJmUubGlzdGVucyhpLCEwKSl7aWYocyYmIUN0KHIsdCkpYnJlYWs7aWYoby5wdXNoKGUpLHMpYnJlYWt9aWYocj09PXRoaXMuX2NvbnRhaW5lcilicmVhaztyPXIucGFyZW50Tm9kZX1yZXR1cm4gby5sZW5ndGh8fGF8fHN8fCFDdChyLHQpfHwobz1bdGhpc10pLG99LF9oYW5kbGVET01FdmVudDpmdW5jdGlvbih0KXtpZih0aGlzLl9sb2FkZWQmJiFNdCh0KSl7dmFyIGk9dC50eXBlOyJtb3VzZWRvd24iIT09aSYmImtleXByZXNzIiE9PWl8fGN0KHQudGFyZ2V0fHx0LnNyY0VsZW1lbnQpLHRoaXMuX2ZpcmVET01FdmVudCh0LGkpfX0sX21vdXNlRXZlbnRzOlsiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXSxfZmlyZURPTUV2ZW50OmZ1bmN0aW9uKHQsZSxuKXtpZigiY2xpY2siPT09dC50eXBlKXt2YXIgbz1pKHt9LHQpO28udHlwZT0icHJlY2xpY2siLHRoaXMuX2ZpcmVET01FdmVudChvLG8udHlwZSxuKX1pZighdC5fc3RvcHBlZCYmKG49KG58fFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGUpKSkubGVuZ3RoKXt2YXIgcz1uWzBdOyJjb250ZXh0bWVudSI9PT1lJiZzLmxpc3RlbnMoZSwhMCkmJlB0KHQpO3ZhciByPXtvcmlnaW5hbEV2ZW50OnR9O2lmKCJrZXlwcmVzcyIhPT10LnR5cGUpe3ZhciBhPXMuZ2V0TGF0TG5nJiYoIXMuX3JhZGl1c3x8cy5fcmFkaXVzPD0xMCk7ci5jb250YWluZXJQb2ludD1hP3RoaXMubGF0TG5nVG9Db250YWluZXJQb2ludChzLmdldExhdExuZygpKTp0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHIubGF5ZXJQb2ludD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHIuY29udGFpbmVyUG9pbnQpLHIubGF0bG5nPWE/cy5nZXRMYXRMbmcoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhyLmxheWVyUG9pbnQpfWZvcih2YXIgaD0wO2g8bi5sZW5ndGg7aCsrKWlmKG5baF0uZmlyZShlLHIsITApLHIub3JpZ2luYWxFdmVudC5fc3RvcHBlZHx8ITE9PT1uW2hdLm9wdGlvbnMuYnViYmxpbmdNb3VzZUV2ZW50cyYmLTEhPT1kKHRoaXMuX21vdXNlRXZlbnRzLGUpKXJldHVybn19LF9kcmFnZ2FibGVNb3ZlZDpmdW5jdGlvbih0KXtyZXR1cm4odD10LmRyYWdnaW5nJiZ0LmRyYWdnaW5nLmVuYWJsZWQoKT90OnRoaXMpLmRyYWdnaW5nJiZ0LmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuYm94Wm9vbSYmdGhpcy5ib3hab29tLm1vdmVkKCl9LF9jbGVhckhhbmRsZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsaT10aGlzLl9oYW5kbGVycy5sZW5ndGg7dDxpO3QrKyl0aGlzLl9oYW5kbGVyc1t0XS5kaXNhYmxlKCl9LHdoZW5SZWFkeTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9sb2FkZWQ/dC5jYWxsKGl8fHRoaXMse3RhcmdldDp0aGlzfSk6dGhpcy5vbigibG9hZCIsdCxpKSx0aGlzfSxfZ2V0TWFwUGFuZVBvczpmdW5jdGlvbigpe3JldHVybiBodCh0aGlzLl9tYXBQYW5lKXx8bmV3IHgoMCwwKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsaSl7cmV0dXJuKHQmJnZvaWQgMCE9PWk/dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCxpKTp0aGlzLmdldFBpeGVsT3JpZ2luKCkpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LF9nZXROZXdQaXhlbE9yaWdpbjpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KGUpLl9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKS5fcm91bmQoKX0sX2xhdExuZ1RvTmV3TGF5ZXJQb2ludDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KG4pfSxfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gYihbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksaSkuX3N1YnRyYWN0KG4pLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGkpLl9zdWJ0cmFjdChuKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxpKS5fc3VidHJhY3QobiksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksaSkuX3N1YnRyYWN0KG4pXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsaSxlKXtpZighZSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxpKSxvPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHM9bmV3IFAobi5zdWJ0cmFjdChvKSxuLmFkZChvKSkscj10aGlzLl9nZXRCb3VuZHNPZmZzZXQocyxlLGkpO3JldHVybiByLnJvdW5kKCkuZXF1YWxzKFswLDBdKT90OnRoaXMudW5wcm9qZWN0KG4uYWRkKHIpLGkpfSxfbGltaXRPZmZzZXQ6ZnVuY3Rpb24odCxpKXtpZighaSlyZXR1cm4gdDt2YXIgZT10aGlzLmdldFBpeGVsQm91bmRzKCksbj1uZXcgUChlLm1pbi5hZGQodCksZS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4saSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj1iKHRoaXMucHJvamVjdChpLmdldE5vcnRoRWFzdCgpLGUpLHRoaXMucHJvamVjdChpLmdldFNvdXRoV2VzdCgpLGUpKSxvPW4ubWluLnN1YnRyYWN0KHQubWluKSxzPW4ubWF4LnN1YnRyYWN0KHQubWF4KTtyZXR1cm4gbmV3IHgodGhpcy5fcmVib3VuZChvLngsLXMueCksdGhpcy5fcmVib3VuZChvLnksLXMueSkpfSxfcmVib3VuZDpmdW5jdGlvbih0LGkpe3JldHVybiB0K2k+MD9NYXRoLnJvdW5kKHQtaSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldE1pblpvb20oKSxlPXRoaXMuZ2V0TWF4Wm9vbSgpLG49amk/dGhpcy5vcHRpb25zLnpvb21TbmFwOjE7cmV0dXJuIG4mJih0PU1hdGgucm91bmQodC9uKSpuKSxNYXRoLm1heChpLE1hdGgubWluKGUsdCkpfSxfb25QYW5UcmFuc2l0aW9uU3RlcDpmdW5jdGlvbigpe3RoaXMuZmlyZSgibW92ZSIpfSxfb25QYW5UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dHQodGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX3RydW5jKCk7cmV0dXJuISghMCE9PShpJiZpLmFuaW1hdGUpJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMoZSkpJiYodGhpcy5wYW5CeShlLGkpLCEwKX0sX2NyZWF0ZUFuaW1Qcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Byb3h5PUcoImRpdiIsImxlYWZsZXQtcHJveHkgbGVhZmxldC16b29tLWFuaW1hdGVkIik7dGhpcy5fcGFuZXMubWFwUGFuZS5hcHBlbmRDaGlsZCh0KSx0aGlzLm9uKCJ6b29tYW5pbSIsZnVuY3Rpb24odCl7dmFyIGk9Y2UsZT10aGlzLl9wcm94eS5zdHlsZVtpXTtydCh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodC5jZW50ZXIsdC56b29tKSx0aGlzLmdldFpvb21TY2FsZSh0Lnpvb20sMSkpLGU9PT10aGlzLl9wcm94eS5zdHlsZVtpXSYmdGhpcy5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSx0aGlzKSx0aGlzLm9uKCJsb2FkIG1vdmVlbmQiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRDZW50ZXIoKSxpPXRoaXMuZ2V0Wm9vbSgpO3J0KHRoaXMuX3Byb3h5LHRoaXMucHJvamVjdCh0LGkpLHRoaXMuZ2V0Wm9vbVNjYWxlKGksMSkpfSx0aGlzKSx0aGlzLl9vbigidW5sb2FkIix0aGlzLl9kZXN0cm95QW5pbVByb3h5LHRoaXMpfSxfZGVzdHJveUFuaW1Qcm94eTpmdW5jdGlvbigpe0sodGhpcy5fcHJveHkpLGRlbGV0ZSB0aGlzLl9wcm94eX0sX2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiZ0LnByb3BlcnR5TmFtZS5pbmRleE9mKCJ0cmFuc2Zvcm0iKT49MCYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVhZmxldC16b29tLWFuaW1hdGVkIikubGVuZ3RofSxfdHJ5QW5pbWF0ZWRab29tOmZ1bmN0aW9uKHQsaSxlKXtpZih0aGlzLl9hbmltYXRpbmdab29tKXJldHVybiEwO2lmKGU9ZXx8e30sIXRoaXMuX3pvb21BbmltYXRlZHx8ITE9PT1lLmFuaW1hdGV8fHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKXx8TWF0aC5hYnMoaS10aGlzLl96b29tKT50aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZClyZXR1cm4hMTt2YXIgbj10aGlzLmdldFpvb21TY2FsZShpKSxvPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZGl2aWRlQnkoMS0xL24pO3JldHVybiEoITAhPT1lLmFuaW1hdGUmJiF0aGlzLmdldFNpemUoKS5jb250YWlucyhvKSkmJihmKGZ1bmN0aW9uKCl7dGhpcy5fbW92ZVN0YXJ0KCEwLCExKS5fYW5pbWF0ZVpvb20odCxpLCEwKX0sdGhpcyksITApfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCxpLG4sbyl7dGhpcy5fbWFwUGFuZSYmKG4mJih0aGlzLl9hbmltYXRpbmdab29tPSEwLHRoaXMuX2FuaW1hdGVUb0NlbnRlcj10LHRoaXMuX2FuaW1hdGVUb1pvb209aSxRKHRoaXMuX21hcFBhbmUsImxlYWZsZXQtem9vbS1hbmltIikpLHRoaXMuZmlyZSgiem9vbWFuaW0iLHtjZW50ZXI6dCx6b29tOmksbm9VcGRhdGU6b30pLHNldFRpbWVvdXQoZSh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCkpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9tYXBQYW5lJiZ0dCh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLHRoaXMuX2FuaW1hdGluZ1pvb209ITEsdGhpcy5fbW92ZSh0aGlzLl9hbmltYXRlVG9DZW50ZXIsdGhpcy5fYW5pbWF0ZVRvWm9vbSksZihmdW5jdGlvbigpe3RoaXMuX21vdmVFbmQoITApfSx0aGlzKSl9fSksVGU9di5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3ByaWdodCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcDtyZXR1cm4gaSYmaS5yZW1vdmVDb250cm9sKHRoaXMpLHRoaXMub3B0aW9ucy5wb3NpdGlvbj10LGkmJmkuYWRkQ29udHJvbCh0aGlzKSx0aGlzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXt0aGlzLnJlbW92ZSgpLHRoaXMuX21hcD10O3ZhciBpPXRoaXMuX2NvbnRhaW5lcj10aGlzLm9uQWRkKHQpLGU9dGhpcy5nZXRQb3NpdGlvbigpLG49dC5fY29udHJvbENvcm5lcnNbZV07cmV0dXJuIFEoaSwibGVhZmxldC1jb250cm9sIiksLTEhPT1lLmluZGV4T2YoImJvdHRvbSIpP24uaW5zZXJ0QmVmb3JlKGksbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXA/KEsodGhpcy5fY29udGFpbmVyKSx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHRoaXMuX21hcCksdGhpcy5fbWFwPW51bGwsdGhpcyk6dGhpc30sX3JlZm9jdXNPbk1hcDpmdW5jdGlvbih0KXt0aGlzLl9tYXAmJnQmJnQuc2NyZWVuWD4wJiZ0LnNjcmVlblk+MCYmdGhpcy5fbWFwLmdldENvbnRhaW5lcigpLmZvY3VzKCl9fSksemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUZSh0KX07YmUuaW5jbHVkZSh7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxyZW1vdmVDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbW92ZSgpLHRoaXN9LF9pbml0Q29udHJvbFBvczpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxvKXt2YXIgcz1lK3QrIiAiK2UrbztpW3Qrb109RygiZGl2IixzLG4pfXZhciBpPXRoaXMuX2NvbnRyb2xDb3JuZXJzPXt9LGU9ImxlYWZsZXQtIixuPXRoaXMuX2NvbnRyb2xDb250YWluZXI9RygiZGl2IixlKyJjb250cm9sLWNvbnRhaW5lciIsdGhpcy5fY29udGFpbmVyKTt0KCJ0b3AiLCJsZWZ0IiksdCgidG9wIiwicmlnaHQiKSx0KCJib3R0b20iLCJsZWZ0IiksdCgiYm90dG9tIiwicmlnaHQiKX0sX2NsZWFyQ29udHJvbFBvczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9jb250cm9sQ29ybmVycylLKHRoaXMuX2NvbnRyb2xDb3JuZXJzW3RdKTtLKHRoaXMuX2NvbnRyb2xDb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250cm9sQ29ybmVycyxkZWxldGUgdGhpcy5fY29udHJvbENvbnRhaW5lcn19KTt2YXIgTWU9VGUuZXh0ZW5kKHtvcHRpb25zOntjb2xsYXBzZWQ6ITAscG9zaXRpb246InRvcHJpZ2h0IixhdXRvWkluZGV4OiEwLGhpZGVTaW5nbGVCYXNlOiExLHNvcnRMYXllcnM6ITEsc29ydEZ1bmN0aW9uOmZ1bmN0aW9uKHQsaSxlLG4pe3JldHVybiBlPG4/LTE6bjxlPzE6MH19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe2wodGhpcyxlKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHM9W10sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExO2Zvcih2YXIgbiBpbiB0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gaSl0aGlzLl9hZGRMYXllcihpW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwPXQsdC5vbigiem9vbWVuZCIsdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycyx0aGlzKTtmb3IodmFyIGk9MDtpPHRoaXMuX2xheWVycy5sZW5ndGg7aSsrKXRoaXMuX2xheWVyc1tpXS5sYXllci5vbigiYWRkIHJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gVGUucHJvdG90eXBlLmFkZFRvLmNhbGwodGhpcyx0KSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoInpvb21lbmQiLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsdGhpcyk7Zm9yKHZhciB0PTA7dDx0aGlzLl9sYXllcnMubGVuZ3RoO3QrKyl0aGlzLl9sYXllcnNbdF0ubGF5ZXIub2ZmKCJhZGQgcmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpfSxhZGRCYXNlTGF5ZXI6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxpKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sYWRkT3ZlcmxheTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGksITApLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt0Lm9mZigiYWRkIHJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTt2YXIgaT10aGlzLl9nZXRMYXllcihuKHQpKTtyZXR1cm4gaSYmdGhpcy5fbGF5ZXJzLnNwbGljZSh0aGlzLl9sYXllcnMuaW5kZXhPZihpKSwxKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sZXhwYW5kOmZ1bmN0aW9uKCl7USh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD1udWxsO3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkueS0odGhpcy5fY29udGFpbmVyLm9mZnNldFRvcCs1MCk7cmV0dXJuIHQ8dGhpcy5fc2VjdGlvbi5jbGllbnRIZWlnaHQ/KFEodGhpcy5fc2VjdGlvbiwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXIiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD10KyJweCIpOnR0KHRoaXMuX3NlY3Rpb24sImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIiksdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycygpLHRoaXN9LGNvbGxhcHNlOmZ1bmN0aW9uKCl7cmV0dXJuIHR0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpLHRoaXN9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtY29udHJvbC1sYXllcnMiLGk9dGhpcy5fY29udGFpbmVyPUcoImRpdiIsdCksZT10aGlzLm9wdGlvbnMuY29sbGFwc2VkO2kuc2V0QXR0cmlidXRlKCJhcmlhLWhhc3BvcHVwIiwhMCksd3QoaSkseHQoaSk7dmFyIG49dGhpcy5fc2VjdGlvbj1HKCJzZWN0aW9uIix0KyItbGlzdCIpO2UmJih0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLmNvbGxhcHNlLHRoaXMpLHppfHxtdChpLHttb3VzZWVudGVyOnRoaXMuZXhwYW5kLG1vdXNlbGVhdmU6dGhpcy5jb2xsYXBzZX0sdGhpcykpO3ZhciBvPXRoaXMuX2xheWVyc0xpbms9RygiYSIsdCsiLXRvZ2dsZSIsaSk7by5ocmVmPSIjIixvLnRpdGxlPSJMYXllcnMiLHFpPyhtdChvLCJjbGljayIsTHQpLG10KG8sImNsaWNrIix0aGlzLmV4cGFuZCx0aGlzKSk6bXQobywiZm9jdXMiLHRoaXMuZXhwYW5kLHRoaXMpLGV8fHRoaXMuZXhwYW5kKCksdGhpcy5fYmFzZUxheWVyc0xpc3Q9RygiZGl2Iix0KyItYmFzZSIsbiksdGhpcy5fc2VwYXJhdG9yPUcoImRpdiIsdCsiLXNlcGFyYXRvciIsbiksdGhpcy5fb3ZlcmxheXNMaXN0PUcoImRpdiIsdCsiLW92ZXJsYXlzIixuKSxpLmFwcGVuZENoaWxkKG4pfSxfZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9sYXllcnMubGVuZ3RoO2krKylpZih0aGlzLl9sYXllcnNbaV0mJm4odGhpcy5fbGF5ZXJzW2ldLmxheWVyKT09PXQpcmV0dXJuIHRoaXMuX2xheWVyc1tpXX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsaSxuKXt0aGlzLl9tYXAmJnQub24oImFkZCByZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyksdGhpcy5fbGF5ZXJzLnB1c2goe2xheWVyOnQsbmFtZTppLG92ZXJsYXk6bn0pLHRoaXMub3B0aW9ucy5zb3J0TGF5ZXJzJiZ0aGlzLl9sYXllcnMuc29ydChlKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMub3B0aW9ucy5zb3J0RnVuY3Rpb24odC5sYXllcixpLmxheWVyLHQubmFtZSxpLm5hbWUpfSx0aGlzKSksdGhpcy5vcHRpb25zLmF1dG9aSW5kZXgmJnQuc2V0WkluZGV4JiYodGhpcy5fbGFzdFpJbmRleCsrLHQuc2V0WkluZGV4KHRoaXMuX2xhc3RaSW5kZXgpKSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NvbnRhaW5lcilyZXR1cm4gdGhpcztZKHRoaXMuX2Jhc2VMYXllcnNMaXN0KSxZKHRoaXMuX292ZXJsYXlzTGlzdCksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzPVtdO3ZhciB0LGksZSxuLG89MDtmb3IoZT0wO2U8dGhpcy5fbGF5ZXJzLmxlbmd0aDtlKyspbj10aGlzLl9sYXllcnNbZV0sdGhpcy5fYWRkSXRlbShuKSxpPWl8fG4ub3ZlcmxheSx0PXR8fCFuLm92ZXJsYXksbys9bi5vdmVybGF5PzA6MTtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlJiYodD10JiZvPjEsdGhpcy5fYmFzZUxheWVyc0xpc3Quc3R5bGUuZGlzcGxheT10PyIiOiJub25lIiksdGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9aSYmdD8iIjoibm9uZSIsdGhpc30sX29uTGF5ZXJDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGk9dGhpcy5fZ2V0TGF5ZXIobih0LnRhcmdldCkpLGU9aS5vdmVybGF5PyJhZGQiPT09dC50eXBlPyJvdmVybGF5YWRkIjoib3ZlcmxheXJlbW92ZSI6ImFkZCI9PT10LnR5cGU/ImJhc2VsYXllcmNoYW5nZSI6bnVsbDtlJiZ0aGlzLl9tYXAuZmlyZShlLGkpfSxfY3JlYXRlUmFkaW9FbGVtZW50OmZ1bmN0aW9uKHQsaSl7dmFyIGU9JzxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9ImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IiIG5hbWU9IicrdCsnIicrKGk/JyBjaGVja2VkPSJjaGVja2VkIic6IiIpKyIvPiIsbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gbi5pbm5lckhUTUw9ZSxuLmZpcnN0Q2hpbGR9LF9hZGRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKSxvPXRoaXMuX21hcC5oYXNMYXllcih0LmxheWVyKTt0Lm92ZXJsYXk/KChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9ImNoZWNrYm94IixpLmNsYXNzTmFtZT0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIsaS5kZWZhdWx0Q2hlY2tlZD1vKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudCgibGVhZmxldC1iYXNlLWxheWVycyIsbyksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLnB1c2goaSksaS5sYXllcklkPW4odC5sYXllciksbXQoaSwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayx0aGlzKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cy5pbm5lckhUTUw9IiAiK3QubmFtZTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChyKSxyLmFwcGVuZENoaWxkKGkpLHIuYXBwZW5kQ2hpbGQocyksKHQub3ZlcmxheT90aGlzLl9vdmVybGF5c0xpc3Q6dGhpcy5fYmFzZUxheWVyc0xpc3QpLmFwcGVuZENoaWxkKGUpLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKSxlfSxfb25JbnB1dENsaWNrOmZ1bmN0aW9uKCl7dmFyIHQsaSxlPXRoaXMuX2xheWVyQ29udHJvbElucHV0cyxuPVtdLG89W107dGhpcy5faGFuZGxpbmdDbGljaz0hMDtmb3IodmFyIHM9ZS5sZW5ndGgtMTtzPj0wO3MtLSl0PWVbc10saT10aGlzLl9nZXRMYXllcih0LmxheWVySWQpLmxheWVyLHQuY2hlY2tlZD9uLnB1c2goaSk6dC5jaGVja2VkfHxvLnB1c2goaSk7Zm9yKHM9MDtzPG8ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIob1tzXSkmJnRoaXMuX21hcC5yZW1vdmVMYXllcihvW3NdKTtmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXRoaXMuX21hcC5oYXNMYXllcihuW3NdKXx8dGhpcy5fbWFwLmFkZExheWVyKG5bc10pO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITEsdGhpcy5fcmVmb2N1c09uTWFwKCl9LF9jaGVja0Rpc2FibGVkTGF5ZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksZT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj10aGlzLl9tYXAuZ2V0Wm9vbSgpLG89ZS5sZW5ndGgtMTtvPj0wO28tLSl0PWVbb10saT10aGlzLl9nZXRMYXllcih0LmxheWVySWQpLmxheWVyLHQuZGlzYWJsZWQ9dm9pZCAwIT09aS5vcHRpb25zLm1pblpvb20mJm48aS5vcHRpb25zLm1pblpvb218fHZvaWQgMCE9PWkub3B0aW9ucy5tYXhab29tJiZuPmkub3B0aW9ucy5tYXhab29tfSxfZXhwYW5kSWZOb3RDb2xsYXBzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYhdGhpcy5vcHRpb25zLmNvbGxhcHNlZCYmdGhpcy5leHBhbmQoKSx0aGlzfSxfZXhwYW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kKCl9LF9jb2xsYXBzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxhcHNlKCl9fSksQ2U9VGUuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoidG9wbGVmdCIsem9vbUluVGV4dDoiKyIsem9vbUluVGl0bGU6Ilpvb20gaW4iLHpvb21PdXRUZXh0OiImI3gyMjEyOyIsem9vbU91dFRpdGxlOiJab29tIG91dCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBpPSJsZWFmbGV0LWNvbnRyb2wtem9vbSIsZT1HKCJkaXYiLGkrIiBsZWFmbGV0LWJhciIpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbUluVGV4dCxuLnpvb21JblRpdGxlLGkrIi1pbiIsZSx0aGlzLl96b29tSW4pLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbU91dFRleHQsbi56b29tT3V0VGl0bGUsaSsiLW91dCIsZSx0aGlzLl96b29tT3V0KSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksZX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITAsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxfem9vbUluOmZ1bmN0aW9uKHQpeyF0aGlzLl9kaXNhYmxlZCYmdGhpcy5fbWFwLl96b29tPHRoaXMuX21hcC5nZXRNYXhab29tKCkmJnRoaXMuX21hcC56b29tSW4odGhpcy5fbWFwLm9wdGlvbnMuem9vbURlbHRhKih0LnNoaWZ0S2V5PzM6MSkpfSxfem9vbU91dDpmdW5jdGlvbih0KXshdGhpcy5fZGlzYWJsZWQmJnRoaXMuX21hcC5fem9vbT50aGlzLl9tYXAuZ2V0TWluWm9vbSgpJiZ0aGlzLl9tYXAuem9vbU91dCh0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEqKHQuc2hpZnRLZXk/MzoxKSl9LF9jcmVhdGVCdXR0b246ZnVuY3Rpb24odCxpLGUsbixvKXt2YXIgcz1HKCJhIixlLG4pO3JldHVybiBzLmlubmVySFRNTD10LHMuaHJlZj0iIyIscy50aXRsZT1pLHMuc2V0QXR0cmlidXRlKCJyb2xlIiwiYnV0dG9uIikscy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpLHd0KHMpLG10KHMsImNsaWNrIixMdCksbXQocywiY2xpY2siLG8sdGhpcyksbXQocywiY2xpY2siLHRoaXMuX3JlZm9jdXNPbk1hcCx0aGlzKSxzfSxfdXBkYXRlRGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT0ibGVhZmxldC1kaXNhYmxlZCI7dHQodGhpcy5fem9vbUluQnV0dG9uLGkpLHR0KHRoaXMuX3pvb21PdXRCdXR0b24saSksKHRoaXMuX2Rpc2FibGVkfHx0Ll96b29tPT09dC5nZXRNaW5ab29tKCkpJiZRKHRoaXMuX3pvb21PdXRCdXR0b24saSksKHRoaXMuX2Rpc2FibGVkfHx0Ll96b29tPT09dC5nZXRNYXhab29tKCkpJiZRKHRoaXMuX3pvb21JbkJ1dHRvbixpKX19KTtiZS5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksYmUuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBDZSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSk7dmFyIFNlPVRlLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246ImJvdHRvbWxlZnQiLG1heFdpZHRoOjEwMCxtZXRyaWM6ITAsaW1wZXJpYWw6ITB9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBpPUcoImRpdiIsImxlYWZsZXQtY29udHJvbC1zY2FsZSIpLGU9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl9hZGRTY2FsZXMoZSwibGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmUiLGkpLHQub24oZS51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl91cGRhdGUsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpfSxfYWRkU2NhbGVzOmZ1bmN0aW9uKHQsaSxlKXt0Lm1ldHJpYyYmKHRoaXMuX21TY2FsZT1HKCJkaXYiLGksZSkpLHQuaW1wZXJpYWwmJih0aGlzLl9pU2NhbGU9RygiZGl2IixpLGUpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxpPXQuZ2V0U2l6ZSgpLnkvMixlPXQuZGlzdGFuY2UodC5jb250YWluZXJQb2ludFRvTGF0TG5nKFswLGldKSx0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCxpXSkpO3RoaXMuX3VwZGF0ZVNjYWxlcyhlKX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMubWV0cmljJiZ0JiZ0aGlzLl91cGRhdGVNZXRyaWModCksdGhpcy5vcHRpb25zLmltcGVyaWFsJiZ0JiZ0aGlzLl91cGRhdGVJbXBlcmlhbCh0KX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRSb3VuZE51bSh0KSxlPWk8MWUzP2krIiBtIjppLzFlMysiIGttIjt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZSxpL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG89My4yODA4Mzk5KnQ7bz41MjgwPyhpPW8vNTI4MCxlPXRoaXMuX2dldFJvdW5kTnVtKGkpLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxlKyIgbWkiLGUvaSkpOihuPXRoaXMuX2dldFJvdW5kTnVtKG8pLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxuKyIgZnQiLG4vbykpfSxfdXBkYXRlU2NhbGU6ZnVuY3Rpb24odCxpLGUpe3Quc3R5bGUud2lkdGg9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqZSkrInB4Iix0LmlubmVySFRNTD1pfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrIiIpLmxlbmd0aC0xKSxlPXQvaTtyZXR1cm4gZT1lPj0xMD8xMDplPj01PzU6ZT49Mz8zOmU+PTI/MjoxLGkqZX19KSxaZT1UZS5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21yaWdodCIscHJlZml4Oic8YSBocmVmPSJodHRwOi8vbGVhZmxldGpzLmNvbSIgdGl0bGU9IkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcyI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2wodGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe3QuYXR0cmlidXRpb25Db250cm9sPXRoaXMsdGhpcy5fY29udGFpbmVyPUcoImRpdiIsImxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiIpLHd0KHRoaXMuX2NvbnRhaW5lcik7Zm9yKHZhciBpIGluIHQuX2xheWVycyl0Ll9sYXllcnNbaV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0aGlzLl9jb250YWluZXJ9LHNldFByZWZpeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnByZWZpeD10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LGFkZEF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0aGlzLl9hdHRyaWJ1dGlvbnNbdF18fCh0aGlzLl9hdHRyaWJ1dGlvbnNbdF09MCksdGhpcy5fYXR0cmlidXRpb25zW3RdKyssdGhpcy5fdXBkYXRlKCksdGhpcyk6dGhpc30scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzKTp0aGlzfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD1bXTtmb3IodmFyIGkgaW4gdGhpcy5fYXR0cmlidXRpb25zKXRoaXMuX2F0dHJpYnV0aW9uc1tpXSYmdC5wdXNoKGkpO3ZhciBlPVtdO3RoaXMub3B0aW9ucy5wcmVmaXgmJmUucHVzaCh0aGlzLm9wdGlvbnMucHJlZml4KSx0Lmxlbmd0aCYmZS5wdXNoKHQuam9pbigiLCAiKSksdGhpcy5fY29udGFpbmVyLmlubmVySFRNTD1lLmpvaW4oIiB8ICIpfX19KTtiZS5tZXJnZU9wdGlvbnMoe2F0dHJpYnV0aW9uQ29udHJvbDohMH0pLGJlLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKG5ldyBaZSkuYWRkVG8odGhpcyl9KTtUZS5MYXllcnM9TWUsVGUuWm9vbT1DZSxUZS5TY2FsZT1TZSxUZS5BdHRyaWJ1dGlvbj1aZSx6ZS5sYXllcnM9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgTWUodCxpLGUpfSx6ZS56b29tPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ2UodCl9LHplLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2UodCl9LHplLmF0dHJpYnV0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmUodCl9O3ZhciBFZT12LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dH0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQ/dGhpczoodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCksdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZD8odGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlbW92ZUhvb2tzKCksdGhpcyk6dGhpc30sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KTtFZS5hZGRUbz1mdW5jdGlvbih0LGkpe3JldHVybiB0LmFkZEhhbmRsZXIoaSx0aGlzKSx0aGlzfTt2YXIga2UsQmU9e0V2ZW50czpsaX0sQWU9cWk/InRvdWNoc3RhcnQgbW91c2Vkb3duIjoibW91c2Vkb3duIixJZT17bW91c2Vkb3duOiJtb3VzZXVwIix0b3VjaHN0YXJ0OiJ0b3VjaGVuZCIscG9pbnRlcmRvd246InRvdWNoZW5kIixNU1BvaW50ZXJEb3duOiJ0b3VjaGVuZCJ9LE9lPXttb3VzZWRvd246Im1vdXNlbW92ZSIsdG91Y2hzdGFydDoidG91Y2htb3ZlIixwb2ludGVyZG93bjoidG91Y2htb3ZlIixNU1BvaW50ZXJEb3duOiJ0b3VjaG1vdmUifSxSZT1jaS5leHRlbmQoe29wdGlvbnM6e2NsaWNrVG9sZXJhbmNlOjN9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUsbil7bCh0aGlzLG4pLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9kcmFnU3RhcnRUYXJnZXQ9aXx8dCx0aGlzLl9wcmV2ZW50T3V0bGluZT1lfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwobXQodGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LEFlLHRoaXMuX29uRG93bix0aGlzKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQmJihSZS5fZHJhZ2dpbmc9PT10aGlzJiZ0aGlzLmZpbmlzaERyYWcoKSxmdCh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsQWUsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fbW92ZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKCF0Ll9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQmJih0aGlzLl9tb3ZlZD0hMSwhJCh0aGlzLl9lbGVtZW50LCJsZWFmbGV0LXpvb20tYW5pbSIpJiYhKFJlLl9kcmFnZ2luZ3x8dC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbiYmIXQudG91Y2hlc3x8KFJlLl9kcmFnZ2luZz10aGlzLHRoaXMuX3ByZXZlbnRPdXRsaW5lJiZjdCh0aGlzLl9lbGVtZW50KSx1dCgpLGZpKCksdGhpcy5fbW92aW5nKSkpKXt0aGlzLmZpcmUoImRvd24iKTt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsZT1kdCh0aGlzLl9lbGVtZW50KTt0aGlzLl9zdGFydFBvaW50PW5ldyB4KGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3BhcmVudFNjYWxlPXB0KGUpLG10KGRvY3VtZW50LE9lW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLG10KGRvY3VtZW50LEllW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYoIXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZClpZih0LnRvdWNoZXMmJnQudG91Y2hlcy5sZW5ndGg+MSl0aGlzLl9tb3ZlZD0hMDtlbHNle3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsZT1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKS5fc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KGUueHx8ZS55KSYmKE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KTx0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2V8fChlLngvPXRoaXMuX3BhcmVudFNjYWxlLngsZS55Lz10aGlzLl9wYXJlbnRTY2FsZS55LFB0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1odCh0aGlzLl9lbGVtZW50KS5zdWJ0cmFjdChlKSxRKGRvY3VtZW50LmJvZHksImxlYWZsZXQtZHJhZ2dpbmciKSx0aGlzLl9sYXN0VGFyZ2V0PXQudGFyZ2V0fHx0LnNyY0VsZW1lbnQsd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSYmdGhpcy5fbGFzdFRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnRJbnN0YW5jZSYmKHRoaXMuX2xhc3RUYXJnZXQ9dGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksUSh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLGcodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX2FuaW1SZXF1ZXN0PWYodGhpcy5fdXBkYXRlUG9zaXRpb24sdGhpcywhMCkpKX19LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RFdmVudH07dGhpcy5maXJlKCJwcmVkcmFnIix0KSxhdCh0aGlzLl9lbGVtZW50LHRoaXMuX25ld1BvcyksdGhpcy5maXJlKCJkcmFnIix0KX0sX29uVXA6ZnVuY3Rpb24odCl7IXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZCYmdGhpcy5maW5pc2hEcmFnKCl9LGZpbmlzaERyYWc6ZnVuY3Rpb24oKXt0dChkb2N1bWVudC5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKHR0KHRoaXMuX2xhc3RUYXJnZXQsImxlYWZsZXQtZHJhZy10YXJnZXQiKSx0aGlzLl9sYXN0VGFyZ2V0PW51bGwpO2Zvcih2YXIgdCBpbiBPZSlmdChkb2N1bWVudCxPZVt0XSx0aGlzLl9vbk1vdmUsdGhpcyksZnQoZG9jdW1lbnQsSWVbdF0sdGhpcy5fb25VcCx0aGlzKTtsdCgpLGdpKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKGcodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITEsUmUuX2RyYWdnaW5nPSExfX0pLE5lPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtzaW1wbGlmeTpadCxwb2ludFRvU2VnbWVudERpc3RhbmNlOkV0LGNsb3Nlc3RQb2ludE9uU2VnbWVudDpmdW5jdGlvbih0LGksZSl7cmV0dXJuIER0KHQsaSxlKX0sY2xpcFNlZ21lbnQ6SXQsX2dldEVkZ2VJbnRlcnNlY3Rpb246T3QsX2dldEJpdENvZGU6UnQsX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OkR0LGlzRmxhdDpqdCxfZmxhdDpXdH0pLERlPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtjbGlwUG9seWdvbjpIdH0pLGplPXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE0odC55LHQueCl9LGJvdW5kczpuZXcgUChbLTE4MCwtOTBdLFsxODAsOTBdKX0sV2U9e1I6NjM3ODEzNyxSX01JTk9SOjYzNTY3NTIuMzE0MjQ1MTc5LGJvdW5kczpuZXcgUChbLTIwMDM3NTA4LjM0Mjc5LC0xNTQ5NjU3MC43Mzk3Ml0sWzIwMDM3NTA4LjM0Mjc5LDE4NzY0NjU2LjIzMTM4XSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgaT1NYXRoLlBJLzE4MCxlPXRoaXMuUixuPXQubGF0Kmksbz10aGlzLlJfTUlOT1IvZSxzPU1hdGguc3FydCgxLW8qbykscj1zKk1hdGguc2luKG4pLGE9TWF0aC50YW4oTWF0aC5QSS80LW4vMikvTWF0aC5wb3coKDEtcikvKDErcikscy8yKTtyZXR1cm4gbj0tZSpNYXRoLmxvZyhNYXRoLm1heChhLDFlLTEwKSksbmV3IHgodC5sbmcqaSplLG4pfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9MTgwL01hdGguUEksbj10aGlzLlIsbz10aGlzLlJfTUlOT1IvbixzPU1hdGguc3FydCgxLW8qbykscj1NYXRoLmV4cCgtdC55L24pLGE9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIpLGg9MCx1PS4xO2g8MTUmJk1hdGguYWJzKHUpPjFlLTc7aCsrKWk9cypNYXRoLnNpbihhKSxpPU1hdGgucG93KCgxLWkpLygxK2kpLHMvMiksYSs9dT1NYXRoLlBJLzItMipNYXRoLmF0YW4ocippKS1hO3JldHVybiBuZXcgTShhKmUsdC54KmUvbil9fSxIZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7TG9uTGF0OmplLE1lcmNhdG9yOldlLFNwaGVyaWNhbE1lcmNhdG9yOm1pfSksRmU9aSh7fSxwaSx7Y29kZToiRVBTRzozMzk1Iixwcm9qZWN0aW9uOldlLHRyYW5zZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9LjUvKE1hdGguUEkqV2UuUik7cmV0dXJuIFoodCwuNSwtdCwuNSl9KCl9KSxVZT1pKHt9LHBpLHtjb2RlOiJFUFNHOjQzMjYiLHByb2plY3Rpb246amUsdHJhbnNmb3JtYXRpb246WigxLzE4MCwxLC0xLzE4MCwuNSl9KSxWZT1pKHt9LGRpLHtwcm9qZWN0aW9uOmplLHRyYW5zZm9ybWF0aW9uOlooMSwwLC0xLDApLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1pLmxuZy10LmxuZyxuPWkubGF0LXQubGF0O3JldHVybiBNYXRoLnNxcnQoZSplK24qbil9LGluZmluaXRlOiEwfSk7ZGkuRWFydGg9cGksZGkuRVBTRzMzOTU9RmUsZGkuRVBTRzM4NTc9eWksZGkuRVBTRzkwMDkxMz14aSxkaS5FUFNHNDMyNj1VZSxkaS5TaW1wbGU9VmU7dmFyIHFlPWNpLmV4dGVuZCh7b3B0aW9uczp7cGFuZToib3ZlcmxheVBhbmUiLGF0dHJpYnV0aW9uOm51bGwsYnViYmxpbmdNb3VzZUV2ZW50czohMH0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlRnJvbSh0aGlzLl9tYXB8fHRoaXMuX21hcFRvQWRkKX0scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5yZW1vdmVMYXllcih0aGlzKSx0aGlzfSxnZXRQYW5lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0UGFuZSh0P3RoaXMub3B0aW9uc1t0XXx8dDp0aGlzLm9wdGlvbnMucGFuZSl9LGFkZEludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuX3RhcmdldHNbbih0KV09dGhpcyx0aGlzfSxyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuX21hcC5fdGFyZ2V0c1tuKHQpXSx0aGlzfSxnZXRBdHRyaWJ1dGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRpb259LF9sYXllckFkZDpmdW5jdGlvbih0KXt2YXIgaT10LnRhcmdldDtpZihpLmhhc0xheWVyKHRoaXMpKXtpZih0aGlzLl9tYXA9aSx0aGlzLl96b29tQW5pbWF0ZWQ9aS5fem9vbUFuaW1hdGVkLHRoaXMuZ2V0RXZlbnRzKXt2YXIgZT10aGlzLmdldEV2ZW50cygpO2kub24oZSx0aGlzKSx0aGlzLm9uY2UoInJlbW92ZSIsZnVuY3Rpb24oKXtpLm9mZihlLHRoaXMpfSx0aGlzKX10aGlzLm9uQWRkKGkpLHRoaXMuZ2V0QXR0cmlidXRpb24mJmkuYXR0cmlidXRpb25Db250cm9sJiZpLmF0dHJpYnV0aW9uQ29udHJvbC5hZGRBdHRyaWJ1dGlvbih0aGlzLmdldEF0dHJpYnV0aW9uKCkpLHRoaXMuZmlyZSgiYWRkIiksaS5maXJlKCJsYXllcmFkZCIse2xheWVyOnRoaXN9KX19fSk7YmUuaW5jbHVkZSh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7aWYoIXQuX2xheWVyQWRkKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci4iKTt2YXIgaT1uKHQpO3JldHVybiB0aGlzLl9sYXllcnNbaV0/dGhpczoodGhpcy5fbGF5ZXJzW2ldPXQsdC5fbWFwVG9BZGQ9dGhpcyx0LmJlZm9yZUFkZCYmdC5iZWZvcmVBZGQodGhpcyksdGhpcy53aGVuUmVhZHkodC5fbGF5ZXJBZGQsdCksdGhpcyl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPW4odCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT8odGhpcy5fbG9hZGVkJiZ0Lm9uUmVtb3ZlKHRoaXMpLHQuZ2V0QXR0cmlidXRpb24mJnRoaXMuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmF0dHJpYnV0aW9uQ29udHJvbC5yZW1vdmVBdHRyaWJ1dGlvbih0LmdldEF0dHJpYnV0aW9uKCkpLGRlbGV0ZSB0aGlzLl9sYXllcnNbaV0sdGhpcy5fbG9hZGVkJiYodGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0LmZpcmUoInJlbW92ZSIpKSx0Ll9tYXA9dC5fbWFwVG9BZGQ9bnVsbCx0aGlzKTp0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJm4odClpbiB0aGlzLl9sYXllcnN9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sX2FkZExheWVyczpmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxlPSh0PXQ/b2kodCk/dDpbdF06W10pLmxlbmd0aDtpPGU7aSsrKXRoaXMuYWRkTGF5ZXIodFtpXSl9LF9hZGRab29tTGltaXQ6ZnVuY3Rpb24odCl7IWlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW24odCldPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3JlbW92ZVpvb21MaW1pdDpmdW5jdGlvbih0KXt2YXIgaT1uKHQpO3RoaXMuX3pvb21Cb3VuZExheWVyc1tpXSYmKGRlbGV0ZSB0aGlzLl96b29tQm91bmRMYXllcnNbaV0sdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD0xLzAsaT0tMS8wLGU9dGhpcy5fZ2V0Wm9vbVNwYW4oKTtmb3IodmFyIG4gaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXt2YXIgbz10aGlzLl96b29tQm91bmRMYXllcnNbbl0ub3B0aW9uczt0PXZvaWQgMD09PW8ubWluWm9vbT90Ok1hdGgubWluKHQsby5taW5ab29tKSxpPXZvaWQgMD09PW8ubWF4Wm9vbT9pOk1hdGgubWF4KGksby5tYXhab29tKX10aGlzLl9sYXllcnNNYXhab29tPWk9PT0tMS8wP3ZvaWQgMDppLHRoaXMuX2xheWVyc01pblpvb209dD09PTEvMD92b2lkIDA6dCxlIT09dGhpcy5fZ2V0Wm9vbVNwYW4oKSYmdGhpcy5maXJlKCJ6b29tbGV2ZWxzY2hhbmdlIiksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1heFpvb20mJnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuZ2V0Wm9vbSgpPnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNYXhab29tKSx2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbSYmdGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5nZXRab29tKCk8dGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5zZXRab29tKHRoaXMuX2xheWVyc01pblpvb20pfX0pO3ZhciBHZT1xZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9O3ZhciBlLG47aWYodClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxhZGRMYXllcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldExheWVySWQodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT10LHRoaXMuX21hcCYmdGhpcy5fbWFwLmFkZExheWVyKHQpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPXQgaW4gdGhpcy5fbGF5ZXJzP3Q6dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX2xheWVyc1tpXSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpXSksZGVsZXRlIHRoaXMuX2xheWVyc1tpXSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJih0IGluIHRoaXMuX2xheWVyc3x8dGhpcy5nZXRMYXllcklkKHQpaW4gdGhpcy5fbGF5ZXJzKX0sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKX0saW52b2tlOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKGkgaW4gdGhpcy5fbGF5ZXJzKShlPXRoaXMuX2xheWVyc1tpXSlbdF0mJmVbdF0uYXBwbHkoZSxuKTtyZXR1cm4gdGhpc30sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5hZGRMYXllcix0KX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5yZW1vdmVMYXllcix0KX0sZWFjaExheWVyOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl0LmNhbGwoaSx0aGlzLl9sYXllcnNbZV0pO3JldHVybiB0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRMYXllcnM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodC5wdXNoLHQpLHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoInNldFpJbmRleCIsdCl9LGdldExheWVySWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9fSksS2U9R2UuZXh0ZW5kKHthZGRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNMYXllcih0KT90aGlzOih0LmFkZEV2ZW50UGFyZW50KHRoaXMpLEdlLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKCJsYXllcmFkZCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSx0LnJlbW92ZUV2ZW50UGFyZW50KHRoaXMpLEdlLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSk6dGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVDtmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXt2YXIgZT10aGlzLl9sYXllcnNbaV07dC5leHRlbmQoZS5nZXRCb3VuZHM/ZS5nZXRCb3VuZHMoKTplLmdldExhdExuZygpKX1yZXR1cm4gdH19KSxZZT12LmV4dGVuZCh7b3B0aW9uczp7cG9wdXBBbmNob3I6WzAsMF0sdG9vbHRpcEFuY2hvcjpbMCwwXX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtsKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighZSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG49dGhpcy5fY3JlYXRlSW1nKGUsaSYmIklNRyI9PT1pLnRhZ05hbWU/aTpudWxsKTtyZXR1cm4gdGhpcy5fc2V0SWNvblN0eWxlcyhuLHQpLG59LF9zZXRJY29uU3R5bGVzOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLG49ZVtpKyJTaXplIl07Im51bWJlciI9PXR5cGVvZiBuJiYobj1bbixuXSk7dmFyIG89dyhuKSxzPXcoInNoYWRvdyI9PT1pJiZlLnNoYWRvd0FuY2hvcnx8ZS5pY29uQW5jaG9yfHxvJiZvLmRpdmlkZUJ5KDIsITApKTt0LmNsYXNzTmFtZT0ibGVhZmxldC1tYXJrZXItIitpKyIgIisoZS5jbGFzc05hbWV8fCIiKSxzJiYodC5zdHlsZS5tYXJnaW5MZWZ0PS1zLngrInB4Iix0LnN0eWxlLm1hcmdpblRvcD0tcy55KyJweCIpLG8mJih0LnN0eWxlLndpZHRoPW8ueCsicHgiLHQuc3R5bGUuaGVpZ2h0PW8ueSsicHgiKX0sX2NyZWF0ZUltZzpmdW5jdGlvbih0LGkpe3JldHVybiBpPWl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGkuc3JjPXQsaX0sX2dldEljb25Vcmw6ZnVuY3Rpb24odCl7cmV0dXJuIFlpJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl18fHRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxYZT1ZZS5leHRlbmQoe29wdGlvbnM6e2ljb25Vcmw6Im1hcmtlci1pY29uLnBuZyIsaWNvblJldGluYVVybDoibWFya2VyLWljb24tMngucG5nIixzaGFkb3dVcmw6Im1hcmtlci1zaGFkb3cucG5nIixpY29uU2l6ZTpbMjUsNDFdLGljb25BbmNob3I6WzEyLDQxXSxwb3B1cEFuY2hvcjpbMSwtMzRdLHRvb2x0aXBBbmNob3I6WzE2LC0yOF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXtyZXR1cm4gWGUuaW1hZ2VQYXRofHwoWGUuaW1hZ2VQYXRoPXRoaXMuX2RldGVjdEljb25QYXRoKCkpLCh0aGlzLm9wdGlvbnMuaW1hZ2VQYXRofHxYZS5pbWFnZVBhdGgpK1llLnByb3RvdHlwZS5fZ2V0SWNvblVybC5jYWxsKHRoaXMsdCl9LF9kZXRlY3RJY29uUGF0aDpmdW5jdGlvbigpe3ZhciB0PUcoImRpdiIsImxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGgiLGRvY3VtZW50LmJvZHkpLGk9cSh0LCJiYWNrZ3JvdW5kLWltYWdlIil8fHEodCwiYmFja2dyb3VuZEltYWdlIik7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksaT1udWxsPT09aXx8MCE9PWkuaW5kZXhPZigidXJsIik/IiI6aS5yZXBsYWNlKC9edXJsXChbIiddPy8sIiIpLnJlcGxhY2UoL21hcmtlci1pY29uXC5wbmdbIiddP1wpJC8sIiIpfX0pLEplPUVlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXJrZXI9dH0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIuX2ljb247dGhpcy5fZHJhZ2dhYmxlfHwodGhpcy5fZHJhZ2dhYmxlPW5ldyBSZSh0LHQsITApKSx0aGlzLl9kcmFnZ2FibGUub24oe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxwcmVkcmFnOnRoaXMuX29uUHJlRHJhZyxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcykuZW5hYmxlKCksUSh0LCJsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUiKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9kcmFnZ2FibGUub2ZmKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmRpc2FibGUoKSx0aGlzLl9tYXJrZXIuX2ljb24mJnR0KHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX2FkanVzdFBhbjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXJrZXIsZT1pLl9tYXAsbj10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuU3BlZWQsbz10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuUGFkZGluZyxzPWh0KGkuX2ljb24pLHI9ZS5nZXRQaXhlbEJvdW5kcygpLGE9ZS5nZXRQaXhlbE9yaWdpbigpLGg9YihyLm1pbi5fc3VidHJhY3QoYSkuYWRkKG8pLHIubWF4Ll9zdWJ0cmFjdChhKS5zdWJ0cmFjdChvKSk7aWYoIWguY29udGFpbnMocykpe3ZhciB1PXcoKE1hdGgubWF4KGgubWF4Lngscy54KS1oLm1heC54KS8oci5tYXgueC1oLm1heC54KS0oTWF0aC5taW4oaC5taW4ueCxzLngpLWgubWluLngpLyhyLm1pbi54LWgubWluLngpLChNYXRoLm1heChoLm1heC55LHMueSktaC5tYXgueSkvKHIubWF4LnktaC5tYXgueSktKE1hdGgubWluKGgubWluLnkscy55KS1oLm1pbi55KS8oci5taW4ueS1oLm1pbi55KSkubXVsdGlwbHlCeShuKTtlLnBhbkJ5KHUse2FuaW1hdGU6ITF9KSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5fYWRkKHUpLHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZCh1KSxhdChpLl9pY29uLHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zKSx0aGlzLl9vbkRyYWcodCksdGhpcy5fcGFuUmVxdWVzdD1mKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsdCkpfX0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fb2xkTGF0TG5nPXRoaXMuX21hcmtlci5nZXRMYXRMbmcoKSx0aGlzLl9tYXJrZXIuY2xvc2VQb3B1cCgpLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoImRyYWdzdGFydCIpfSxfb25QcmVEcmFnOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW4mJihnKHRoaXMuX3BhblJlcXVlc3QpLHRoaXMuX3BhblJlcXVlc3Q9Zih0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLHQpKSl9LF9vbkRyYWc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFya2VyLGU9aS5fc2hhZG93LG49aHQoaS5faWNvbiksbz1pLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKG4pO2UmJmF0KGUsbiksaS5fbGF0bG5nPW8sdC5sYXRsbmc9byx0Lm9sZExhdExuZz10aGlzLl9vbGRMYXRMbmcsaS5maXJlKCJtb3ZlIix0KS5maXJlKCJkcmFnIix0KX0sX29uRHJhZ0VuZDpmdW5jdGlvbih0KXtnKHRoaXMuX3BhblJlcXVlc3QpLGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmcsdGhpcy5fbWFya2VyLmZpcmUoIm1vdmVlbmQiKS5maXJlKCJkcmFnZW5kIix0KX19KSwkZT1xZS5leHRlbmQoe29wdGlvbnM6e2ljb246bmV3IFhlLGludGVyYWN0aXZlOiEwLGtleWJvYXJkOiEwLHRpdGxlOiIiLGFsdDoiIix6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTAscGFuZToibWFya2VyUGFuZSIsYnViYmxpbmdNb3VzZUV2ZW50czohMSxkcmFnZ2FibGU6ITEsYXV0b1BhbjohMSxhdXRvUGFuUGFkZGluZzpbNTAsNTBdLGF1dG9QYW5TcGVlZDoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2wodGhpcyxpKSx0aGlzLl9sYXRsbmc9Qyh0KX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMuX3pvb21BbmltYXRlZCYmdC5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sdGhpcy5fem9vbUFuaW1hdGVkJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSYmKHRoaXMub3B0aW9ucy5kcmFnZ2FibGU9ITAsdGhpcy5kcmFnZ2luZy5yZW1vdmVIb29rcygpKSxkZWxldGUgdGhpcy5kcmFnZ2luZyx0aGlzLl96b29tQW5pbWF0ZWQmJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5fcmVtb3ZlSWNvbigpLHRoaXMuX3JlbW92ZVNoYWRvdygpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXtyZXR1cm57em9vbTp0aGlzLnVwZGF0ZSx2aWV3cmVzZXQ6dGhpcy51cGRhdGV9fSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbGF0bG5nO3JldHVybiB0aGlzLl9sYXRsbmc9Qyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse29sZExhdExuZzppLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKX0sc2V0SWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb249dCx0aGlzLl9tYXAmJih0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLmJpbmRQb3B1cCh0aGlzLl9wb3B1cCx0aGlzLl9wb3B1cC5vcHRpb25zKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb259LHVwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2ljb24mJnRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKHQpfXJldHVybiB0aGlzfSxfaW5pdEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT0ibGVhZmxldC16b29tLSIrKHRoaXMuX3pvb21BbmltYXRlZD8iYW5pbWF0ZWQiOiJoaWRlIiksZT10Lmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxuPSExO2UhPT10aGlzLl9pY29uJiYodGhpcy5faWNvbiYmdGhpcy5fcmVtb3ZlSWNvbigpLG49ITAsdC50aXRsZSYmKGUudGl0bGU9dC50aXRsZSksIklNRyI9PT1lLnRhZ05hbWUmJihlLmFsdD10LmFsdHx8IiIpKSxRKGUsaSksdC5rZXlib2FyZCYmKGUudGFiSW5kZXg9IjAiKSx0aGlzLl9pY29uPWUsdC5yaXNlT25Ib3ZlciYmdGhpcy5vbih7bW91c2VvdmVyOnRoaXMuX2JyaW5nVG9Gcm9udCxtb3VzZW91dDp0aGlzLl9yZXNldFpJbmRleH0pO3ZhciBvPXQuaWNvbi5jcmVhdGVTaGFkb3codGhpcy5fc2hhZG93KSxzPSExO28hPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxzPSEwKSxvJiYoUShvLGkpLG8uYWx0PSIiKSx0aGlzLl9zaGFkb3c9byx0Lm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLG4mJnRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ljb24pLHRoaXMuX2luaXRJbnRlcmFjdGlvbigpLG8mJnMmJnRoaXMuZ2V0UGFuZSgic2hhZG93UGFuZSIpLmFwcGVuZENoaWxkKHRoaXMuX3NoYWRvdyl9LF9yZW1vdmVJY29uOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnJpc2VPbkhvdmVyJiZ0aGlzLm9mZih7bW91c2VvdmVyOnRoaXMuX2JyaW5nVG9Gcm9udCxtb3VzZW91dDp0aGlzLl9yZXNldFpJbmRleH0pLEsodGhpcy5faWNvbiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJksodGhpcy5fc2hhZG93KSx0aGlzLl9zaGFkb3c9bnVsbH0sX3NldFBvczpmdW5jdGlvbih0KXthdCh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmYXQodGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24uc3R5bGUuekluZGV4PXRoaXMuX3pJbmRleCt0fSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoaSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihRKHRoaXMuX2ljb24sImxlYWZsZXQtaW50ZXJhY3RpdmUiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLEplKSl7dmFyIHQ9dGhpcy5vcHRpb25zLmRyYWdnYWJsZTt0aGlzLmRyYWdnaW5nJiYodD10aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSx0aGlzLmRyYWdnaW5nLmRpc2FibGUoKSksdGhpcy5kcmFnZ2luZz1uZXcgSmUodGhpcyksdCYmdGhpcy5kcmFnZ2luZy5lbmFibGUoKX19LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTtudCh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmbnQodGhpcy5fc2hhZG93LHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pLFFlPXFlLmV4dGVuZCh7b3B0aW9uczp7c3Ryb2tlOiEwLGNvbG9yOiIjMzM4OGZmIix3ZWlnaHQ6MyxvcGFjaXR5OjEsbGluZUNhcDoicm91bmQiLGxpbmVKb2luOiJyb3VuZCIsZGFzaEFycmF5Om51bGwsZGFzaE9mZnNldDpudWxsLGZpbGw6ITEsZmlsbENvbG9yOm51bGwsZmlsbE9wYWNpdHk6LjIsZmlsbFJ1bGU6ImV2ZW5vZGQiLGludGVyYWN0aXZlOiEwLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlcj10LmdldFJlbmRlcmVyKHRoaXMpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9pbml0UGF0aCh0aGlzKSx0aGlzLl9yZXNldCgpLHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9yZW1vdmVQYXRoKHRoaXMpfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0aGlzLHQpLHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXRofSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0KCksdGhpcy5fdXBkYXRlKCl9LF9jbGlja1RvbGVyYW5jZTpmdW5jdGlvbigpe3JldHVybih0aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowKSt0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZX19KSx0bj1RZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITAscmFkaXVzOjEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLGkpLHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMuX3JhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMucmVkcmF3KCksdGhpcy5maXJlKCJtb3ZlIix7bGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dCYmdC5yYWRpdXN8fHRoaXMuX3JhZGl1cztyZXR1cm4gUWUucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcyx0KSx0aGlzLnNldFJhZGl1cyhpKSx0aGlzfSxfcHJvamVjdDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl91cGRhdGVCb3VuZHMoKX0sX3VwZGF0ZUJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JhZGl1cyxpPXRoaXMuX3JhZGl1c1l8fHQsZT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLG49W3QrZSxpK2VdO3RoaXMuX3B4Qm91bmRzPW5ldyBQKHRoaXMuX3BvaW50LnN1YnRyYWN0KG4pLHRoaXMuX3BvaW50LmFkZChuKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBhdGgoKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlQ2lyY2xlKHRoaXMpfSxfZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzJiYhdGhpcy5fcmVuZGVyZXIuX2JvdW5kcy5pbnRlcnNlY3RzKHRoaXMuX3B4Qm91bmRzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCk8PXRoaXMuX3JhZGl1cyt0aGlzLl9jbGlja1RvbGVyYW5jZSgpfX0pLGVuPXRuLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlJiYoZT1pKHt9LG4se3JhZGl1czplfSkpLGwodGhpcyxlKSx0aGlzLl9sYXRsbmc9Qyh0KSxpc05hTih0aGlzLm9wdGlvbnMucmFkaXVzKSl0aHJvdyBuZXcgRXJyb3IoIkNpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTiIpO3RoaXMuX21SYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tUmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLl9yYWRpdXMsdGhpcy5fcmFkaXVzWXx8dGhpcy5fcmFkaXVzXTtyZXR1cm4gbmV3IFQodGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSksdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5hZGQodCkpKX0sc2V0U3R5bGU6UWUucHJvdG90eXBlLnNldFN0eWxlLF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF0bG5nLmxuZyxpPXRoaXMuX2xhdGxuZy5sYXQsZT10aGlzLl9tYXAsbj1lLm9wdGlvbnMuY3JzO2lmKG4uZGlzdGFuY2U9PT1waS5kaXN0YW5jZSl7dmFyIG89TWF0aC5QSS8xODAscz10aGlzLl9tUmFkaXVzL3BpLlIvbyxyPWUucHJvamVjdChbaStzLHRdKSxhPWUucHJvamVjdChbaS1zLHRdKSxoPXIuYWRkKGEpLmRpdmlkZUJ5KDIpLHU9ZS51bnByb2plY3QoaCkubGF0LGw9TWF0aC5hY29zKChNYXRoLmNvcyhzKm8pLU1hdGguc2luKGkqbykqTWF0aC5zaW4odSpvKSkvKE1hdGguY29zKGkqbykqTWF0aC5jb3ModSpvKSkpL287KGlzTmFOKGwpfHwwPT09bCkmJihsPXMvTWF0aC5jb3MoTWF0aC5QSS8xODAqaSkpLHRoaXMuX3BvaW50PWguc3VidHJhY3QoZS5nZXRQaXhlbE9yaWdpbigpKSx0aGlzLl9yYWRpdXM9aXNOYU4obCk/MDpoLngtZS5wcm9qZWN0KFt1LHQtbF0pLngsdGhpcy5fcmFkaXVzWT1oLnktci55fWVsc2V7dmFyIGM9bi51bnByb2plY3Qobi5wcm9qZWN0KHRoaXMuX2xhdGxuZykuc3VidHJhY3QoW3RoaXMuX21SYWRpdXMsMF0pKTt0aGlzLl9wb2ludD1lLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLHRoaXMuX3JhZGl1cz10aGlzLl9wb2ludC54LWUubGF0TG5nVG9MYXllclBvaW50KGMpLnh9dGhpcy5fdXBkYXRlQm91bmRzKCl9fSksbm49UWUuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49MS8wLG89bnVsbCxzPUR0LHI9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtyPGE7cisrKWZvcih2YXIgaD10aGlzLl9wYXJ0c1tyXSx1PTEsbD1oLmxlbmd0aDt1PGw7dSsrKXt2YXIgYz1zKHQsaT1oW3UtMV0sZT1oW3VdLCEwKTtjPG4mJihuPWMsbz1zKHQsaSxlKSl9cmV0dXJuIG8mJihvLmRpc3RhbmNlPU1hdGguc3FydChuKSksb30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhPXRoaXMuX3JpbmdzWzBdLGg9YS5sZW5ndGg7aWYoIWgpcmV0dXJuIG51bGw7Zm9yKHQ9MCxpPTA7dDxoLTE7dCsrKWkrPWFbdF0uZGlzdGFuY2VUbyhhW3QrMV0pLzI7aWYoMD09PWkpcmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoYVswXSk7Zm9yKHQ9MCxuPTA7dDxoLTE7dCsrKWlmKG89YVt0XSxzPWFbdCsxXSxlPW8uZGlzdGFuY2VUbyhzKSwobis9ZSk+aSlyZXR1cm4gcj0obi1pKS9lLHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoW3MueC1yKihzLngtby54KSxzLnktcioocy55LW8ueSldKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sYWRkTGF0TG5nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8dGhpcy5fZGVmYXVsdFNoYXBlKCksdD1DKHQpLGkucHVzaCh0KSx0aGlzLl9ib3VuZHMuZXh0ZW5kKHQpLHRoaXMucmVkcmF3KCl9LF9zZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3RoaXMuX2JvdW5kcz1uZXcgVCx0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpfSxfZGVmYXVsdFNoYXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGp0KHRoaXMuX2xhdGxuZ3MpP3RoaXMuX2xhdGxuZ3M6dGhpcy5fbGF0bG5nc1swXX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1bXSxlPWp0KHQpLG49MCxvPXQubGVuZ3RoO248bztuKyspZT8oaVtuXT1DKHRbbl0pLHRoaXMuX2JvdW5kcy5leHRlbmQoaVtuXSkpOmlbbl09dGhpcy5fY29udmVydExhdExuZ3ModFtuXSk7cmV0dXJuIGl9LF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFA7dGhpcy5fcmluZ3M9W10sdGhpcy5fcHJvamVjdExhdGxuZ3ModGhpcy5fbGF0bG5ncyx0aGlzLl9yaW5ncyx0KTt2YXIgaT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLGU9bmV3IHgoaSxpKTt0aGlzLl9ib3VuZHMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKSYmKHQubWluLl9zdWJ0cmFjdChlKSx0Lm1heC5fYWRkKGUpLHRoaXMuX3B4Qm91bmRzPXQpfSxfcHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24odCxpLGUpe3ZhciBuLG8scz10WzBdaW5zdGFuY2VvZiBNLHI9dC5sZW5ndGg7aWYocyl7Zm9yKG89W10sbj0wO248cjtuKyspb1tuXT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRbbl0pLGUuZXh0ZW5kKG9bbl0pO2kucHVzaChvKX1lbHNlIGZvcihuPTA7bjxyO24rKyl0aGlzLl9wcm9qZWN0TGF0bG5ncyh0W25dLGksZSl9LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcztpZih0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2V7dmFyIGksZSxuLG8scyxyLGEsaD10aGlzLl9wYXJ0cztmb3IoaT0wLG49MCxvPXRoaXMuX3JpbmdzLmxlbmd0aDtpPG87aSsrKWZvcihlPTAscz0oYT10aGlzLl9yaW5nc1tpXSkubGVuZ3RoO2U8cy0xO2UrKykocj1JdChhW2VdLGFbZSsxXSx0LGUsITApKSYmKGhbbl09aFtuXXx8W10saFtuXS5wdXNoKHJbMF0pLHJbMV09PT1hW2UrMV0mJmUhPT1zLTJ8fChoW25dLnB1c2goclsxXSksbisrKSl9fSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsaT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXT1adCh0W2VdLGkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKCF0aGlzLl9weEJvdW5kc3x8IXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHQpKXJldHVybiExO2ZvcihlPTAscz10aGlzLl9wYXJ0cy5sZW5ndGg7ZTxzO2UrKylmb3Iobj0wLG89KHI9KGE9dGhpcy5fcGFydHNbZV0pLmxlbmd0aCktMTtuPHI7bz1uKyspaWYoKGl8fDAhPT1uKSYmRXQodCxhW29dLGFbbl0pPD1oKXJldHVybiEwO3JldHVybiExfX0pO25uLl9mbGF0PVd0O3ZhciBvbj1ubi5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITB9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh8fCF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aH0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhLGgsdT10aGlzLl9yaW5nc1swXSxsPXUubGVuZ3RoO2lmKCFsKXJldHVybiBudWxsO2ZvcihzPXI9YT0wLHQ9MCxpPWwtMTt0PGw7aT10KyspZT11W3RdLG49dVtpXSxvPWUueSpuLngtbi55KmUueCxyKz0oZS54K24ueCkqbyxhKz0oZS55K24ueSkqbyxzKz0zKm87cmV0dXJuIGg9MD09PXM/dVswXTpbci9zLGEvc10sdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhoKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe3ZhciBpPW5uLnByb3RvdHlwZS5fY29udmVydExhdExuZ3MuY2FsbCh0aGlzLHQpLGU9aS5sZW5ndGg7cmV0dXJuIGU+PTImJmlbMF1pbnN0YW5jZW9mIE0mJmlbMF0uZXF1YWxzKGlbZS0xXSkmJmkucG9wKCksaX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7bm4ucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcyx0KSxqdCh0aGlzLl9sYXRsbmdzKSYmKHRoaXMuX2xhdGxuZ3M9W3RoaXMuX2xhdGxuZ3NdKX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBqdCh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzWzBdOnRoaXMuX2xhdGxuZ3NbMF1bMF19LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcyxpPXRoaXMub3B0aW9ucy53ZWlnaHQsZT1uZXcgeChpLGkpO2lmKHQ9bmV3IFAodC5taW4uc3VidHJhY3QoZSksdC5tYXguYWRkKGUpKSx0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2UgZm9yKHZhciBuLG89MCxzPXRoaXMuX3JpbmdzLmxlbmd0aDtvPHM7bysrKShuPUh0KHRoaXMuX3JpbmdzW29dLHQsITApKS5sZW5ndGgmJnRoaXMuX3BhcnRzLnB1c2gobil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcywhMCl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbixvLHMscixhLGgsdT0hMTtpZighdGhpcy5fcHhCb3VuZHN8fCF0aGlzLl9weEJvdW5kcy5jb250YWlucyh0KSlyZXR1cm4hMTtmb3Iobz0wLGE9dGhpcy5fcGFydHMubGVuZ3RoO288YTtvKyspZm9yKHM9MCxyPShoPShpPXRoaXMuX3BhcnRzW29dKS5sZW5ndGgpLTE7czxoO3I9cysrKWU9aVtzXSxuPWlbcl0sZS55PnQueSE9bi55PnQueSYmdC54PChuLngtZS54KSoodC55LWUueSkvKG4ueS1lLnkpK2UueCYmKHU9IXUpO3JldHVybiB1fHxubi5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApfX0pLHNuPUtlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2wodGhpcyxpKSx0aGlzLl9sYXllcnM9e30sdCYmdGhpcy5hZGREYXRhKHQpfSxhZGREYXRhOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbixvPW9pKHQpP3Q6dC5mZWF0dXJlcztpZihvKXtmb3IoaT0wLGU9by5sZW5ndGg7aTxlO2krKykoKG49b1tpXSkuZ2VvbWV0cmllc3x8bi5nZW9tZXRyeXx8bi5mZWF0dXJlc3x8bi5jb29yZGluYXRlcykmJnRoaXMuYWRkRGF0YShuKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm9wdGlvbnM7aWYocy5maWx0ZXImJiFzLmZpbHRlcih0KSlyZXR1cm4gdGhpczt2YXIgcj1GdCh0LHMpO3JldHVybiByPyhyLmZlYXR1cmU9WXQodCksci5kZWZhdWx0T3B0aW9ucz1yLm9wdGlvbnMsdGhpcy5yZXNldFN0eWxlKHIpLHMub25FYWNoRmVhdHVyZSYmcy5vbkVhY2hGZWF0dXJlKHQsciksdGhpcy5hZGRMYXllcihyKSk6dGhpc30scmVzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcHRpb25zPWkoe30sdC5kZWZhdWx0T3B0aW9ucyksdGhpcy5fc2V0TGF5ZXJTdHlsZSh0LHRoaXMub3B0aW9ucy5zdHlsZSksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGkpe3RoaXMuX3NldExheWVyU3R5bGUoaSx0KX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsaSl7ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkodC5mZWF0dXJlKSksdC5zZXRTdHlsZSYmdC5zZXRTdHlsZShpKX19KSxybj17dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3JldHVybiBLdCh0aGlzLHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6cXQodGhpcy5nZXRMYXRMbmcoKSx0KX0pfX07JGUuaW5jbHVkZShybiksZW4uaW5jbHVkZShybiksdG4uaW5jbHVkZShybiksbm4uaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPSFqdCh0aGlzLl9sYXRsbmdzKSxlPUd0KHRoaXMuX2xhdGxuZ3MsaT8xOjAsITEsdCk7cmV0dXJuIEt0KHRoaXMse3R5cGU6KGk/Ik11bHRpIjoiIikrIkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmV9KX19KSxvbi5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24odCl7dmFyIGk9IWp0KHRoaXMuX2xhdGxuZ3MpLGU9aSYmIWp0KHRoaXMuX2xhdGxuZ3NbMF0pLG49R3QodGhpcy5fbGF0bG5ncyxlPzI6aT8xOjAsITAsdCk7cmV0dXJuIGl8fChuPVtuXSksS3QodGhpcyx7dHlwZTooZT8iTXVsdGkiOiIiKSsiUG9seWdvbiIsY29vcmRpbmF0ZXM6bn0pfX0pLEdlLmluY2x1ZGUoe3RvTXVsdGlQb2ludDpmdW5jdGlvbih0KXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oZSl7aS5wdXNoKGUudG9HZW9KU09OKHQpLmdlb21ldHJ5LmNvb3JkaW5hdGVzKX0pLEt0KHRoaXMse3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOml9KX0sdG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5JiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnkudHlwZTtpZigiTXVsdGlQb2ludCI9PT1pKXJldHVybiB0aGlzLnRvTXVsdGlQb2ludCh0KTt2YXIgZT0iR2VvbWV0cnlDb2xsZWN0aW9uIj09PWksbj1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oaSl7aWYoaS50b0dlb0pTT04pe3ZhciBvPWkudG9HZW9KU09OKHQpO2lmKGUpbi5wdXNoKG8uZ2VvbWV0cnkpO2Vsc2V7dmFyIHM9WXQobyk7IkZlYXR1cmVDb2xsZWN0aW9uIj09PXMudHlwZT9uLnB1c2guYXBwbHkobixzLmZlYXR1cmVzKTpuLnB1c2gocyl9fX0pLGU/S3QodGhpcyx7Z2VvbWV0cmllczpuLHR5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiJ9KTp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm59fX0pO3ZhciBhbj1YdCxobj1xZS5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6IiIsaW50ZXJhY3RpdmU6ITEsY3Jvc3NPcmlnaW46ITEsZXJyb3JPdmVybGF5VXJsOiIiLHpJbmRleDoxLGNsYXNzTmFtZToiIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPXooaSksbCh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2ltYWdlfHwodGhpcy5faW5pdEltYWdlKCksdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihRKHRoaXMuX2ltYWdlLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSkpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlKSx0aGlzLl9yZXNldCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe0sodGhpcy5faW1hZ2UpLHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5faW1hZ2UmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGFjaXR5JiZ0aGlzLnNldE9wYWNpdHkodC5vcGFjaXR5KSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZYKHRoaXMuX2ltYWdlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJkoodGhpcy5faW1hZ2UpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXJsPXQsdGhpcy5faW1hZ2UmJih0aGlzLl9pbWFnZS5zcmM9dCksdGhpc30sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ib3VuZHM9eih0KSx0aGlzLl9tYXAmJnRoaXMuX3Jlc2V0KCksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3pvb206dGhpcy5fcmVzZXQsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0fTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9hbmltYXRlWm9vbSksdH0sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZX0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PSJJTUciPT09dGhpcy5fdXJsLnRhZ05hbWUsaT10aGlzLl9pbWFnZT10P3RoaXMuX3VybDpHKCJpbWciKTtRKGksImxlYWZsZXQtaW1hZ2UtbGF5ZXIiKSx0aGlzLl96b29tQW5pbWF0ZWQmJlEoaSwibGVhZmxldC16b29tLWFuaW1hdGVkIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmUShpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1yLGkub25tb3VzZW1vdmU9cixpLm9ubG9hZD1lKHRoaXMuZmlyZSx0aGlzLCJsb2FkIiksaS5vbmVycm9yPWUodGhpcy5fb3ZlcmxheU9uRXJyb3IsdGhpcywiZXJyb3IiKSwodGhpcy5vcHRpb25zLmNyb3NzT3JpZ2lufHwiIj09PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbikmJihpLmNyb3NzT3JpZ2luPSEwPT09dGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luPyIiOnRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiksdGhpcy5vcHRpb25zLnpJbmRleCYmdGhpcy5fdXBkYXRlWkluZGV4KCksdD90aGlzLl91cmw9aS5zcmM6KGkuc3JjPXRoaXMuX3VybCxpLmFsdD10aGlzLm9wdGlvbnMuYWx0KX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5nZXRab29tU2NhbGUodC56b29tKSxlPXRoaXMuX21hcC5fbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kcyh0aGlzLl9ib3VuZHMsdC56b29tLHQuY2VudGVyKS5taW47cnQodGhpcy5faW1hZ2UsZSxpKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW1hZ2UsaT1uZXcgUCh0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXROb3J0aFdlc3QoKSksdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0U291dGhFYXN0KCkpKSxlPWkuZ2V0U2l6ZSgpO2F0KHQsaS5taW4pLHQuc3R5bGUud2lkdGg9ZS54KyJweCIsdC5zdHlsZS5oZWlnaHQ9ZS55KyJweCJ9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7bnQodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2UmJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5faW1hZ2Uuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfb3ZlcmxheU9uRXJyb3I6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImVycm9yIik7dmFyIHQ9dGhpcy5vcHRpb25zLmVycm9yT3ZlcmxheVVybDt0JiZ0aGlzLl91cmwhPT10JiYodGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXQpfX0pLHVuPWhuLmV4dGVuZCh7b3B0aW9uczp7YXV0b3BsYXk6ITAsbG9vcDohMH0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PSJWSURFTyI9PT10aGlzLl91cmwudGFnTmFtZSxpPXRoaXMuX2ltYWdlPXQ/dGhpcy5fdXJsOkcoInZpZGVvIik7aWYoUShpLCJsZWFmbGV0LWltYWdlLWxheWVyIiksdGhpcy5fem9vbUFuaW1hdGVkJiZRKGksImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLGkub25zZWxlY3RzdGFydD1yLGkub25tb3VzZW1vdmU9cixpLm9ubG9hZGVkZGF0YT1lKHRoaXMuZmlyZSx0aGlzLCJsb2FkIiksdCl7Zm9yKHZhciBuPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNvdXJjZSIpLG89W10scz0wO3M8bi5sZW5ndGg7cysrKW8ucHVzaChuW3NdLnNyYyk7dGhpcy5fdXJsPW4ubGVuZ3RoPjA/bzpbaS5zcmNdfWVsc2V7b2kodGhpcy5fdXJsKXx8KHRoaXMuX3VybD1bdGhpcy5fdXJsXSksaS5hdXRvcGxheT0hIXRoaXMub3B0aW9ucy5hdXRvcGxheSxpLmxvb3A9ISF0aGlzLm9wdGlvbnMubG9vcDtmb3IodmFyIGE9MDthPHRoaXMuX3VybC5sZW5ndGg7YSsrKXt2YXIgaD1HKCJzb3VyY2UiKTtoLnNyYz10aGlzLl91cmxbYV0saS5hcHBlbmRDaGlsZChoKX19fX0pLGxuPXFlLmV4dGVuZCh7b3B0aW9uczp7b2Zmc2V0OlswLDddLGNsYXNzTmFtZToiIixwYW5lOiJwb3B1cFBhbmUifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1pfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl96b29tQW5pbWF0ZWQ9dC5fem9vbUFuaW1hdGVkLHRoaXMuX2NvbnRhaW5lcnx8dGhpcy5faW5pdExheW91dCgpLHQuX2ZhZGVBbmltYXRlZCYmbnQodGhpcy5fY29udGFpbmVyLDApLGNsZWFyVGltZW91dCh0aGlzLl9yZW1vdmVUaW1lb3V0KSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMudXBkYXRlKCksdC5fZmFkZUFuaW1hdGVkJiZudCh0aGlzLl9jb250YWluZXIsMSksdGhpcy5icmluZ1RvRnJvbnQoKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fZmFkZUFuaW1hdGVkPyhudCh0aGlzLl9jb250YWluZXIsMCksdGhpcy5fcmVtb3ZlVGltZW91dD1zZXRUaW1lb3V0KGUoSyx2b2lkIDAsdGhpcy5fY29udGFpbmVyKSwyMDApKTpLKHRoaXMuX2NvbnRhaW5lcil9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPUModCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9hZGp1c3RQYW4oKSksdGhpc30sZ2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxzZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb250ZW50PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIsdGhpcy5fYWRqdXN0UGFuKCkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17em9vbTp0aGlzLl91cGRhdGVQb3NpdGlvbix2aWV3cmVzZXQ6dGhpcy5fdXBkYXRlUG9zaXRpb259O3JldHVybiB0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZYKHRoaXMuX2NvbnRhaW5lciksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZKKHRoaXMuX2NvbnRhaW5lciksdGhpc30sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250ZW50KXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jb250ZW50P3RoaXMuX2NvbnRlbnQodGhpcy5fc291cmNlfHx0aGlzKTp0aGlzLl9jb250ZW50O2lmKCJzdHJpbmciPT10eXBlb2YgaSl0LmlubmVySFRNTD1pO2Vsc2V7Zm9yKDt0Lmhhc0NoaWxkTm9kZXMoKTspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3QuYXBwZW5kQ2hpbGQoaSl9dGhpcy5maXJlKCJjb250ZW50dXBkYXRlIil9fSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSxpPXcodGhpcy5vcHRpb25zLm9mZnNldCksZT10aGlzLl9nZXRBbmNob3IoKTt0aGlzLl96b29tQW5pbWF0ZWQ/YXQodGhpcy5fY29udGFpbmVyLHQuYWRkKGUpKTppPWkuYWRkKHQpLmFkZChlKTt2YXIgbj10aGlzLl9jb250YWluZXJCb3R0b209LWkueSxvPXRoaXMuX2NvbnRhaW5lckxlZnQ9LU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGgvMikraS54O3RoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209bisicHgiLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5sZWZ0PW8rInB4In19LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm5bMCwwXX19KSxjbj1sbi5leHRlbmQoe29wdGlvbnM6e21heFdpZHRoOjMwMCxtaW5XaWR0aDo1MCxtYXhIZWlnaHQ6bnVsbCxhdXRvUGFuOiEwLGF1dG9QYW5QYWRkaW5nVG9wTGVmdDpudWxsLGF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQ6bnVsbCxhdXRvUGFuUGFkZGluZzpbNSw1XSxrZWVwSW5WaWV3OiExLGNsb3NlQnV0dG9uOiEwLGF1dG9DbG9zZTohMCxjbG9zZU9uRXNjYXBlS2V5OiEwLGNsYXNzTmFtZToiIn0sb3Blbk9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW5Qb3B1cCh0aGlzKSx0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXtsbi5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHQuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSwhMCksdGhpcy5fc291cmNlIGluc3RhbmNlb2YgUWV8fHRoaXMuX3NvdXJjZS5vbigicHJlY2xpY2siLHl0KSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe2xuLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsdCksdC5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIFFlfHx0aGlzLl9zb3VyY2Uub2ZmKCJwcmVjbGljayIseXQpKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9bG4ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybih2b2lkIDAhPT10aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrP3RoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s6dGhpcy5fbWFwLm9wdGlvbnMuY2xvc2VQb3B1cE9uQ2xpY2spJiYodC5wcmVjbGljaz10aGlzLl9jbG9zZSksdGhpcy5vcHRpb25zLmtlZXBJblZpZXcmJih0Lm1vdmVlbmQ9dGhpcy5fYWRqdXN0UGFuKSx0fSxfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5jbG9zZVBvcHVwKHRoaXMpfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LXBvcHVwIixpPXRoaXMuX2NvbnRhaW5lcj1HKCJkaXYiLHQrIiAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikrIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSxlPXRoaXMuX3dyYXBwZXI9RygiZGl2Iix0KyItY29udGVudC13cmFwcGVyIixpKTtpZih0aGlzLl9jb250ZW50Tm9kZT1HKCJkaXYiLHQrIi1jb250ZW50IixlKSx3dChlKSx4dCh0aGlzLl9jb250ZW50Tm9kZSksbXQoZSwiY29udGV4dG1lbnUiLHl0KSx0aGlzLl90aXBDb250YWluZXI9RygiZGl2Iix0KyItdGlwLWNvbnRhaW5lciIsaSksdGhpcy5fdGlwPUcoImRpdiIsdCsiLXRpcCIsdGhpcy5fdGlwQ29udGFpbmVyKSx0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pe3ZhciBuPXRoaXMuX2Nsb3NlQnV0dG9uPUcoImEiLHQrIi1jbG9zZS1idXR0b24iLGkpO24uaHJlZj0iI2Nsb3NlIixuLmlubmVySFRNTD0iJiMyMTU7IixtdChuLCJjbGljayIsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpfX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGk9dC5zdHlsZTtpLndpZHRoPSIiLGkud2hpdGVTcGFjZT0ibm93cmFwIjt2YXIgZT10Lm9mZnNldFdpZHRoO2U9TWF0aC5taW4oZSx0aGlzLm9wdGlvbnMubWF4V2lkdGgpLGU9TWF0aC5tYXgoZSx0aGlzLm9wdGlvbnMubWluV2lkdGgpLGkud2lkdGg9ZSsxKyJweCIsaS53aGl0ZVNwYWNlPSIiLGkuaGVpZ2h0PSIiO3ZhciBuPXQub2Zmc2V0SGVpZ2h0LG89dGhpcy5vcHRpb25zLm1heEhlaWdodDtvJiZuPm8/KGkuaGVpZ2h0PW8rInB4IixRKHQsImxlYWZsZXQtcG9wdXAtc2Nyb2xsZWQiKSk6dHQodCwibGVhZmxldC1wb3B1cC1zY3JvbGxlZCIpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLGU9dGhpcy5fZ2V0QW5jaG9yKCk7YXQodGhpcy5fY29udGFpbmVyLGkuYWRkKGUpKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5hdXRvUGFuKXt0aGlzLl9tYXAuX3BhbkFuaW0mJnRoaXMuX21hcC5fcGFuQW5pbS5zdG9wKCk7dmFyIHQ9dGhpcy5fbWFwLGk9cGFyc2VJbnQocSh0aGlzLl9jb250YWluZXIsIm1hcmdpbkJvdHRvbSIpLDEwKXx8MCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQraSxuPXRoaXMuX2NvbnRhaW5lcldpZHRoLG89bmV3IHgodGhpcy5fY29udGFpbmVyTGVmdCwtZS10aGlzLl9jb250YWluZXJCb3R0b20pO28uX2FkZChodCh0aGlzLl9jb250YWluZXIpKTt2YXIgcz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG8pLHI9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLGE9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxyKSxoPXcodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fHIpLHU9dC5nZXRTaXplKCksbD0wLGM9MDtzLngrbitoLng+dS54JiYobD1zLngrbi11LngraC54KSxzLngtbC1hLng8MCYmKGw9cy54LWEueCkscy55K2UraC55PnUueSYmKGM9cy55K2UtdS55K2gueSkscy55LWMtYS55PDAmJihjPXMueS1hLnkpLChsfHxjKSYmdC5maXJlKCJhdXRvcGFuc3RhcnQiKS5wYW5CeShbbCxjXSl9fSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksTHQodCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3I/dGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcigpOlswLDBdKX19KTtiZS5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksYmUuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGNufHwodD1uZXcgY24oZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOih0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnRoaXMuY2xvc2VQb3B1cCgpLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KSl9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQhPT10aGlzLl9wb3B1cHx8KHQ9dGhpcy5fcG9wdXAsdGhpcy5fcG9wdXA9bnVsbCksdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLHFlLmluY2x1ZGUoe2JpbmRQb3B1cDpmdW5jdGlvbih0LGkpe3JldHVybiB0IGluc3RhbmNlb2YgY24/KGwodCxpKSx0aGlzLl9wb3B1cD10LHQuX3NvdXJjZT10aGlzKToodGhpcy5fcG9wdXAmJiFpfHwodGhpcy5fcG9wdXA9bmV3IGNuKGksdGhpcykpLHRoaXMuX3BvcHVwLnNldENvbnRlbnQodCkpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITApLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5vZmYoe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEsdGhpcy5fcG9wdXA9bnVsbCksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQsaSl7aWYodCBpbnN0YW5jZW9mIHFlfHwoaT10LHQ9dGhpcyksdCBpbnN0YW5jZW9mIEtlKWZvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpe3Q9dGhpcy5fbGF5ZXJzW2VdO2JyZWFrfXJldHVybiBpfHwoaT10LmdldENlbnRlcj90LmdldENlbnRlcigpOnQuZ2V0TGF0TG5nKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJih0aGlzLl9wb3B1cC5fc291cmNlPXQsdGhpcy5fcG9wdXAudXBkYXRlKCksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCxpKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX21hcD90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0KSksdGhpc30saXNQb3B1cE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5pc09wZW4oKX0sc2V0UG9wdXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt2YXIgaT10LmxheWVyfHx0LnRhcmdldDt0aGlzLl9wb3B1cCYmdGhpcy5fbWFwJiYoTHQodCksaSBpbnN0YW5jZW9mIFFlP3RoaXMub3BlblBvcHVwKHQubGF5ZXJ8fHQudGFyZ2V0LHQubGF0bG5nKTp0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiZ0aGlzLl9wb3B1cC5fc291cmNlPT09aT90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cChpLHQubGF0bG5nKSl9LF9tb3ZlUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10Lm9yaWdpbmFsRXZlbnQua2V5Q29kZSYmdGhpcy5fb3BlblBvcHVwKHQpfX0pO3ZhciBfbj1sbi5leHRlbmQoe29wdGlvbnM6e3BhbmU6InRvb2x0aXBQYW5lIixvZmZzZXQ6WzAsMF0sZGlyZWN0aW9uOiJhdXRvIixwZXJtYW5lbnQ6ITEsc3RpY2t5OiExLGludGVyYWN0aXZlOiExLG9wYWNpdHk6Ljl9LG9uQWRkOmZ1bmN0aW9uKHQpe2xuLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCksdGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KSx0LmZpcmUoInRvb2x0aXBvcGVuIix7dG9vbHRpcDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgidG9vbHRpcG9wZW4iLHt0b29sdGlwOnRoaXN9LCEwKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7bG4ucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcyx0KSx0LmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30sITApfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1sbi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHFpJiYhdGhpcy5vcHRpb25zLnBlcm1hbmVudCYmKHQucHJlY2xpY2s9dGhpcy5fY2xvc2UpLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlVG9vbHRpcCh0aGlzKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD0ibGVhZmxldC10b29sdGlwICIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fCIiKSsiIGxlYWZsZXQtem9vbS0iKyh0aGlzLl96b29tQW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpO3RoaXMuX2NvbnRlbnROb2RlPXRoaXMuX2NvbnRhaW5lcj1HKCJkaXYiLHQpfSxfdXBkYXRlTGF5b3V0OmZ1bmN0aW9uKCl7fSxfYWRqdXN0UGFuOmZ1bmN0aW9uKCl7fSxfc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9dGhpcy5fY29udGFpbmVyLG49aS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Q2VudGVyKCkpLG89aS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxzPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24scj1lLm9mZnNldFdpZHRoLGE9ZS5vZmZzZXRIZWlnaHQsaD13KHRoaXMub3B0aW9ucy5vZmZzZXQpLHU9dGhpcy5fZ2V0QW5jaG9yKCk7InRvcCI9PT1zP3Q9dC5hZGQodygtci8yK2gueCwtYStoLnkrdS55LCEwKSk6ImJvdHRvbSI9PT1zP3Q9dC5zdWJ0cmFjdCh3KHIvMi1oLngsLWgueSwhMCkpOiJjZW50ZXIiPT09cz90PXQuc3VidHJhY3QodyhyLzIraC54LGEvMi11LnkraC55LCEwKSk6InJpZ2h0Ij09PXN8fCJhdXRvIj09PXMmJm8ueDxuLng/KHM9InJpZ2h0Iix0PXQuYWRkKHcoaC54K3UueCx1LnktYS8yK2gueSwhMCkpKToocz0ibGVmdCIsdD10LnN1YnRyYWN0KHcocit1LngtaC54LGEvMi11LnktaC55LCEwKSkpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1yaWdodCIpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1sZWZ0IiksdHQoZSwibGVhZmxldC10b29sdGlwLXRvcCIpLHR0KGUsImxlYWZsZXQtdG9vbHRpcC1ib3R0b20iKSxRKGUsImxlYWZsZXQtdG9vbHRpcC0iK3MpLGF0KGUsdCl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTt0aGlzLl9zZXRQb3NpdGlvbih0KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX2NvbnRhaW5lciYmbnQodGhpcy5fY29udGFpbmVyLHQpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7dGhpcy5fc2V0UG9zaXRpb24oaSl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvciYmIXRoaXMub3B0aW9ucy5zdGlja3k/dGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yKCk6WzAsMF0pfX0pO2JlLmluY2x1ZGUoe29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIF9ufHwodD1uZXcgX24oZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOnRoaXMuYWRkTGF5ZXIodCl9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLHFlLmluY2x1ZGUoe2JpbmRUb29sdGlwOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfbj8obCh0LGkpLHRoaXMuX3Rvb2x0aXA9dCx0Ll9zb3VyY2U9dGhpcyk6KHRoaXMuX3Rvb2x0aXAmJiFpfHwodGhpcy5fdG9vbHRpcD1uZXcgX24oaSx0aGlzKSksdGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KHQpKSx0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucygpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQmJnRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpJiZ0aGlzLm9wZW5Ub29sdGlwKCksdGhpc30sdW5iaW5kVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMoITApLHRoaXMuY2xvc2VUb29sdGlwKCksdGhpcy5fdG9vbHRpcD1udWxsKSx0aGlzfSxfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6ZnVuY3Rpb24odCl7aWYodHx8IXRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkKXt2YXIgaT10PyJvZmYiOiJvbiIsZT17cmVtb3ZlOnRoaXMuY2xvc2VUb29sdGlwLG1vdmU6dGhpcy5fbW92ZVRvb2x0aXB9O3RoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQ/ZS5hZGQ9dGhpcy5fb3BlblRvb2x0aXA6KGUubW91c2VvdmVyPXRoaXMuX29wZW5Ub29sdGlwLGUubW91c2VvdXQ9dGhpcy5jbG9zZVRvb2x0aXAsdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSYmKGUubW91c2Vtb3ZlPXRoaXMuX21vdmVUb29sdGlwKSxxaSYmKGUuY2xpY2s9dGhpcy5fb3BlblRvb2x0aXApKSx0aGlzW2ldKGUpLHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkPSF0fX0sb3BlblRvb2x0aXA6ZnVuY3Rpb24odCxpKXtpZih0IGluc3RhbmNlb2YgcWV8fChpPXQsdD10aGlzKSx0IGluc3RhbmNlb2YgS2UpZm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dD10aGlzLl9sYXllcnNbZV07YnJlYWt9cmV0dXJuIGl8fChpPXQuZ2V0Q2VudGVyP3QuZ2V0Q2VudGVyKCk6dC5nZXRMYXRMbmcoKSksdGhpcy5fdG9vbHRpcCYmdGhpcy5fbWFwJiYodGhpcy5fdG9vbHRpcC5fc291cmNlPXQsdGhpcy5fdG9vbHRpcC51cGRhdGUoKSx0aGlzLl9tYXAub3BlblRvb2x0aXAodGhpcy5fdG9vbHRpcCxpKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKFEodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyLCJsZWFmbGV0LWNsaWNrYWJsZSIpLHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fY2xvc2UoKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKHR0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciwibGVhZmxldC1jbGlja2FibGUiKSx0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcikpKSx0aGlzfSx0b2dnbGVUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fbWFwP3RoaXMuY2xvc2VUb29sdGlwKCk6dGhpcy5vcGVuVG9vbHRpcCh0KSksdGhpc30saXNUb29sdGlwT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwLmlzT3BlbigpfSxzZXRUb29sdGlwQ29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdG9vbHRpcCYmdGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KHQpLHRoaXN9LGdldFRvb2x0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcH0sX29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpPXQubGF5ZXJ8fHQudGFyZ2V0O3RoaXMuX3Rvb2x0aXAmJnRoaXMuX21hcCYmdGhpcy5vcGVuVG9vbHRpcChpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3k/dC5sYXRsbmc6dm9pZCAwKX0sX21vdmVUb29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10LmxhdGxuZzt0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5JiZ0Lm9yaWdpbmFsRXZlbnQmJihpPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0Lm9yaWdpbmFsRXZlbnQpLGU9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLG49dGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhlKSksdGhpcy5fdG9vbHRpcC5zZXRMYXRMbmcobil9fSk7dmFyIGRuPVllLmV4dGVuZCh7b3B0aW9uczp7aWNvblNpemU6WzEyLDEyXSxodG1sOiExLGJnUG9zOm51bGwsY2xhc3NOYW1lOiJsZWFmbGV0LWRpdi1pY29uIn0sY3JlYXRlSWNvbjpmdW5jdGlvbih0KXt2YXIgaT10JiYiRElWIj09PXQudGFnTmFtZT90OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU9dGhpcy5vcHRpb25zO2lmKGkuaW5uZXJIVE1MPSExIT09ZS5odG1sP2UuaHRtbDoiIixlLmJnUG9zKXt2YXIgbj13KGUuYmdQb3MpO2kuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1uLngrInB4ICIrLW4ueSsicHgifXJldHVybiB0aGlzLl9zZXRJY29uU3R5bGVzKGksImljb24iKSxpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KTtZZS5EZWZhdWx0PVhlO3ZhciBwbj1xZS5leHRlbmQoe29wdGlvbnM6e3RpbGVTaXplOjI1NixvcGFjaXR5OjEsdXBkYXRlV2hlbklkbGU6V2ksdXBkYXRlV2hlblpvb21pbmc6ITAsdXBkYXRlSW50ZXJ2YWw6MjAwLHpJbmRleDoxLGJvdW5kczpudWxsLG1pblpvb206MCxtYXhab29tOnZvaWQgMCxtYXhOYXRpdmVab29tOnZvaWQgMCxtaW5OYXRpdmVab29tOnZvaWQgMCxub1dyYXA6ITEscGFuZToidGlsZVBhbmUiLGNsYXNzTmFtZToiIixrZWVwQnVmZmVyOjJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl9sZXZlbHM9e30sdGhpcy5fdGlsZXM9e30sdGhpcy5fcmVzZXRWaWV3KCksdGhpcy5fdXBkYXRlKCl9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0Ll9hZGRab29tTGltaXQodGhpcyl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksSyh0aGlzLl9jb250YWluZXIpLHQuX3JlbW92ZVpvb21MaW1pdCh0aGlzKSx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl90aWxlWm9vbT12b2lkIDB9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJihYKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKEoodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zZXRBdXRvWkluZGV4KE1hdGgubWluKSksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZW1vdmVBbGxUaWxlcygpLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3ByZXJlc2V0OnRoaXMuX2ludmFsaWRhdGVBbGwsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0Vmlldyx6b29tOnRoaXMuX3Jlc2V0Vmlldyxtb3ZlZW5kOnRoaXMuX29uTW92ZUVuZH07cmV0dXJuIHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX29uTW92ZXx8KHRoaXMuX29uTW92ZT1vKHRoaXMuX29uTW92ZUVuZCx0aGlzLm9wdGlvbnMudXBkYXRlSW50ZXJ2YWwsdGhpcykpLHQubW92ZT10aGlzLl9vbk1vdmUpLHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9LGdldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnRpbGVTaXplO3JldHVybiB0IGluc3RhbmNlb2YgeD90Om5ldyB4KHQsdCl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXImJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleD10aGlzLm9wdGlvbnMuekluZGV4KX0sX3NldEF1dG9aSW5kZXg6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9dGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sbj0tdCgtMS8wLDEvMCksbz0wLHM9ZS5sZW5ndGg7bzxzO28rKylpPWVbb10uc3R5bGUuekluZGV4LGVbb10hPT10aGlzLl9jb250YWluZXImJmkmJihuPXQobiwraSkpO2lzRmluaXRlKG4pJiYodGhpcy5vcHRpb25zLnpJbmRleD1uK3QoLTEsMSksdGhpcy5fdXBkYXRlWkluZGV4KCkpfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCYmIUxpKXtudCh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0PStuZXcgRGF0ZSxpPSExLGU9ITE7Zm9yKHZhciBuIGluIHRoaXMuX3RpbGVzKXt2YXIgbz10aGlzLl90aWxlc1tuXTtpZihvLmN1cnJlbnQmJm8ubG9hZGVkKXt2YXIgcz1NYXRoLm1pbigxLCh0LW8ubG9hZGVkKS8yMDApO250KG8uZWwscyksczwxP2k9ITA6KG8uYWN0aXZlP2U9ITA6dGhpcy5fb25PcGFxdWVUaWxlKG8pLG8uYWN0aXZlPSEwKX19ZSYmIXRoaXMuX25vUHJ1bmUmJnRoaXMuX3BydW5lVGlsZXMoKSxpJiYoZyh0aGlzLl9mYWRlRnJhbWUpLHRoaXMuX2ZhZGVGcmFtZT1mKHRoaXMuX3VwZGF0ZU9wYWNpdHksdGhpcykpfX0sX29uT3BhcXVlVGlsZTpyLF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPUcoImRpdiIsImxlYWZsZXQtbGF5ZXIgIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8IiIpKSx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSl9LF91cGRhdGVMZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpdGhpcy5fbGV2ZWxzW2VdLmVsLmNoaWxkcmVuLmxlbmd0aHx8ZT09PXQ/KHRoaXMuX2xldmVsc1tlXS5lbC5zdHlsZS56SW5kZXg9aS1NYXRoLmFicyh0LWUpLHRoaXMuX29uVXBkYXRlTGV2ZWwoZSkpOihLKHRoaXMuX2xldmVsc1tlXS5lbCksdGhpcy5fcmVtb3ZlVGlsZXNBdFpvb20oZSksdGhpcy5fb25SZW1vdmVMZXZlbChlKSxkZWxldGUgdGhpcy5fbGV2ZWxzW2VdKTt2YXIgbj10aGlzLl9sZXZlbHNbdF0sbz10aGlzLl9tYXA7cmV0dXJuIG58fCgobj10aGlzLl9sZXZlbHNbdF09e30pLmVsPUcoImRpdiIsImxlYWZsZXQtdGlsZS1jb250YWluZXIgbGVhZmxldC16b29tLWFuaW1hdGVkIix0aGlzLl9jb250YWluZXIpLG4uZWwuc3R5bGUuekluZGV4PWksbi5vcmlnaW49by5wcm9qZWN0KG8udW5wcm9qZWN0KG8uZ2V0UGl4ZWxPcmlnaW4oKSksdCkucm91bmQoKSxuLnpvb209dCx0aGlzLl9zZXRab29tVHJhbnNmb3JtKG4sby5nZXRDZW50ZXIoKSxvLmdldFpvb20oKSksbi5lbC5vZmZzZXRXaWR0aCx0aGlzLl9vbkNyZWF0ZUxldmVsKG4pKSx0aGlzLl9sZXZlbD1uLG59fSxfb25VcGRhdGVMZXZlbDpyLF9vblJlbW92ZUxldmVsOnIsX29uQ3JlYXRlTGV2ZWw6cixfcHJ1bmVUaWxlczpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQsaSxlPXRoaXMuX21hcC5nZXRab29tKCk7aWYoZT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8ZTx0aGlzLm9wdGlvbnMubWluWm9vbSl0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Vsc2V7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpKGk9dGhpcy5fdGlsZXNbdF0pLnJldGFpbj1pLmN1cnJlbnQ7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpaWYoKGk9dGhpcy5fdGlsZXNbdF0pLmN1cnJlbnQmJiFpLmFjdGl2ZSl7dmFyIG49aS5jb29yZHM7dGhpcy5fcmV0YWluUGFyZW50KG4ueCxuLnksbi56LG4uei01KXx8dGhpcy5fcmV0YWluQ2hpbGRyZW4obi54LG4ueSxuLnosbi56KzIpfWZvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLnJldGFpbnx8dGhpcy5fcmVtb3ZlVGlsZSh0KX19fSxfcmVtb3ZlVGlsZXNBdFpvb206ZnVuY3Rpb24odCl7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW2ldLmNvb3Jkcy56PT09dCYmdGhpcy5fcmVtb3ZlVGlsZShpKX0sX3JlbW92ZUFsbFRpbGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCl9LF9pbnZhbGlkYXRlQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xldmVscylLKHRoaXMuX2xldmVsc1t0XS5lbCksdGhpcy5fb25SZW1vdmVMZXZlbCh0KSxkZWxldGUgdGhpcy5fbGV2ZWxzW3RdO3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksdGhpcy5fdGlsZVpvb209dm9pZCAwfSxfcmV0YWluUGFyZW50OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPU1hdGguZmxvb3IodC8yKSxzPU1hdGguZmxvb3IoaS8yKSxyPWUtMSxhPW5ldyB4KCtvLCtzKTthLno9K3I7dmFyIGg9dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGEpLHU9dGhpcy5fdGlsZXNbaF07cmV0dXJuIHUmJnUuYWN0aXZlPyh1LnJldGFpbj0hMCwhMCk6KHUmJnUubG9hZGVkJiYodS5yZXRhaW49ITApLHI+biYmdGhpcy5fcmV0YWluUGFyZW50KG8scyxyLG4pKX0sX3JldGFpbkNoaWxkcmVuOmZ1bmN0aW9uKHQsaSxlLG4pe2Zvcih2YXIgbz0yKnQ7bzwyKnQrMjtvKyspZm9yKHZhciBzPTIqaTtzPDIqaSsyO3MrKyl7dmFyIHI9bmV3IHgobyxzKTtyLno9ZSsxO3ZhciBhPXRoaXMuX3RpbGVDb29yZHNUb0tleShyKSxoPXRoaXMuX3RpbGVzW2FdO2gmJmguYWN0aXZlP2gucmV0YWluPSEwOihoJiZoLmxvYWRlZCYmKGgucmV0YWluPSEwKSxlKzE8biYmdGhpcy5fcmV0YWluQ2hpbGRyZW4obyxzLGUrMSxuKSl9fSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQpe3ZhciBpPXQmJih0LnBpbmNofHx0LmZseVRvKTt0aGlzLl9zZXRWaWV3KHRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl9tYXAuZ2V0Wm9vbSgpLGksaSl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0aGlzLl9zZXRWaWV3KHQuY2VudGVyLHQuem9vbSwhMCx0Lm5vVXBkYXRlKX0sX2NsYW1wWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHZvaWQgMCE9PWkubWluTmF0aXZlWm9vbSYmdDxpLm1pbk5hdGl2ZVpvb20/aS5taW5OYXRpdmVab29tOnZvaWQgMCE9PWkubWF4TmF0aXZlWm9vbSYmaS5tYXhOYXRpdmVab29tPHQ/aS5tYXhOYXRpdmVab29tOnR9LF9zZXRWaWV3OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPXRoaXMuX2NsYW1wWm9vbShNYXRoLnJvdW5kKGkpKTsodm9pZCAwIT09dGhpcy5vcHRpb25zLm1heFpvb20mJm8+dGhpcy5vcHRpb25zLm1heFpvb218fHZvaWQgMCE9PXRoaXMub3B0aW9ucy5taW5ab29tJiZvPHRoaXMub3B0aW9ucy5taW5ab29tKSYmKG89dm9pZCAwKTt2YXIgcz10aGlzLm9wdGlvbnMudXBkYXRlV2hlblpvb21pbmcmJm8hPT10aGlzLl90aWxlWm9vbTtuJiYhc3x8KHRoaXMuX3RpbGVab29tPW8sdGhpcy5fYWJvcnRMb2FkaW5nJiZ0aGlzLl9hYm9ydExvYWRpbmcoKSx0aGlzLl91cGRhdGVMZXZlbHMoKSx0aGlzLl9yZXNldEdyaWQoKSx2b2lkIDAhPT1vJiZ0aGlzLl91cGRhdGUodCksZXx8dGhpcy5fcHJ1bmVUaWxlcygpLHRoaXMuX25vUHJ1bmU9ISFlKSx0aGlzLl9zZXRab29tVHJhbnNmb3Jtcyh0LGkpfSxfc2V0Wm9vbVRyYW5zZm9ybXM6ZnVuY3Rpb24odCxpKXtmb3IodmFyIGUgaW4gdGhpcy5fbGV2ZWxzKXRoaXMuX3NldFpvb21UcmFuc2Zvcm0odGhpcy5fbGV2ZWxzW2VdLHQsaSl9LF9zZXRab29tVHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUsdC56b29tKSxvPXQub3JpZ2luLm11bHRpcGx5Qnkobikuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbihpLGUpKS5yb3VuZCgpO2ppP3J0KHQuZWwsbyxuKTphdCh0LmVsLG8pfSxfcmVzZXRHcmlkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9dC5vcHRpb25zLmNycyxlPXRoaXMuX3RpbGVTaXplPXRoaXMuZ2V0VGlsZVNpemUoKSxuPXRoaXMuX3RpbGVab29tLG89dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHModGhpcy5fdGlsZVpvb20pO28mJih0aGlzLl9nbG9iYWxUaWxlUmFuZ2U9dGhpcy5fcHhCb3VuZHNUb1RpbGVSYW5nZShvKSksdGhpcy5fd3JhcFg9aS53cmFwTG5nJiYhdGhpcy5vcHRpb25zLm5vV3JhcCYmW01hdGguZmxvb3IodC5wcm9qZWN0KFswLGkud3JhcExuZ1swXV0sbikueC9lLngpLE1hdGguY2VpbCh0LnByb2plY3QoWzAsaS53cmFwTG5nWzFdXSxuKS54L2UueSldLHRoaXMuX3dyYXBZPWkud3JhcExhdCYmIXRoaXMub3B0aW9ucy5ub1dyYXAmJltNYXRoLmZsb29yKHQucHJvamVjdChbaS53cmFwTGF0WzBdLDBdLG4pLnkvZS54KSxNYXRoLmNlaWwodC5wcm9qZWN0KFtpLndyYXBMYXRbMV0sMF0sbikueS9lLnkpXX0sX29uTW92ZUVuZDpmdW5jdGlvbigpe3RoaXMuX21hcCYmIXRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fdXBkYXRlKCl9LF9nZXRUaWxlZFBpeGVsQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPWkuX2FuaW1hdGluZ1pvb20/TWF0aC5tYXgoaS5fYW5pbWF0ZVRvWm9vbSxpLmdldFpvb20oKSk6aS5nZXRab29tKCksbj1pLmdldFpvb21TY2FsZShlLHRoaXMuX3RpbGVab29tKSxvPWkucHJvamVjdCh0LHRoaXMuX3RpbGVab29tKS5mbG9vcigpLHM9aS5nZXRTaXplKCkuZGl2aWRlQnkoMipuKTtyZXR1cm4gbmV3IFAoby5zdWJ0cmFjdChzKSxvLmFkZChzKSl9LF91cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwO2lmKGkpe3ZhciBlPXRoaXMuX2NsYW1wWm9vbShpLmdldFpvb20oKSk7aWYodm9pZCAwPT09dCYmKHQ9aS5nZXRDZW50ZXIoKSksdm9pZCAwIT09dGhpcy5fdGlsZVpvb20pe3ZhciBuPXRoaXMuX2dldFRpbGVkUGl4ZWxCb3VuZHModCksbz10aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKG4pLHM9by5nZXRDZW50ZXIoKSxyPVtdLGE9dGhpcy5vcHRpb25zLmtlZXBCdWZmZXIsaD1uZXcgUChvLmdldEJvdHRvbUxlZnQoKS5zdWJ0cmFjdChbYSwtYV0pLG8uZ2V0VG9wUmlnaHQoKS5hZGQoW2EsLWFdKSk7aWYoIShpc0Zpbml0ZShvLm1pbi54KSYmaXNGaW5pdGUoby5taW4ueSkmJmlzRmluaXRlKG8ubWF4LngpJiZpc0Zpbml0ZShvLm1heC55KSkpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXMiKTtmb3IodmFyIHUgaW4gdGhpcy5fdGlsZXMpe3ZhciBsPXRoaXMuX3RpbGVzW3VdLmNvb3JkcztsLno9PT10aGlzLl90aWxlWm9vbSYmaC5jb250YWlucyhuZXcgeChsLngsbC55KSl8fCh0aGlzLl90aWxlc1t1XS5jdXJyZW50PSExKX1pZihNYXRoLmFicyhlLXRoaXMuX3RpbGVab29tKT4xKXRoaXMuX3NldFZpZXcodCxlKTtlbHNle2Zvcih2YXIgYz1vLm1pbi55O2M8PW8ubWF4Lnk7YysrKWZvcih2YXIgXz1vLm1pbi54O188PW8ubWF4Lng7XysrKXt2YXIgZD1uZXcgeChfLGMpO2lmKGQuej10aGlzLl90aWxlWm9vbSx0aGlzLl9pc1ZhbGlkVGlsZShkKSl7dmFyIHA9dGhpcy5fdGlsZXNbdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGQpXTtwP3AuY3VycmVudD0hMDpyLnB1c2goZCl9fWlmKHIuc29ydChmdW5jdGlvbih0LGkpe3JldHVybiB0LmRpc3RhbmNlVG8ocyktaS5kaXN0YW5jZVRvKHMpfSksMCE9PXIubGVuZ3RoKXt0aGlzLl9sb2FkaW5nfHwodGhpcy5fbG9hZGluZz0hMCx0aGlzLmZpcmUoImxvYWRpbmciKSk7dmFyIG09ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2ZvcihfPTA7XzxyLmxlbmd0aDtfKyspdGhpcy5fYWRkVGlsZShyW19dLG0pO3RoaXMuX2xldmVsLmVsLmFwcGVuZENoaWxkKG0pfX19fX0sX2lzVmFsaWRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5vcHRpb25zLmNycztpZighaS5pbmZpbml0ZSl7dmFyIGU9dGhpcy5fZ2xvYmFsVGlsZVJhbmdlO2lmKCFpLndyYXBMbmcmJih0Lng8ZS5taW4ueHx8dC54PmUubWF4LngpfHwhaS53cmFwTGF0JiYodC55PGUubWluLnl8fHQueT5lLm1heC55KSlyZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmJvdW5kcylyZXR1cm4hMDt2YXIgbj10aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModCk7cmV0dXJuIHoodGhpcy5vcHRpb25zLmJvdW5kcykub3ZlcmxhcHMobil9LF9rZXlUb0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZUNvb3Jkc1RvQm91bmRzKHRoaXMuX2tleVRvVGlsZUNvb3Jkcyh0KSl9LF90aWxlQ29vcmRzVG9Od1NlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPXRoaXMuZ2V0VGlsZVNpemUoKSxuPXQuc2NhbGVCeShlKSxvPW4uYWRkKGUpO3JldHVybltpLnVucHJvamVjdChuLHQueiksaS51bnByb2plY3Qobyx0LnopXX0sX3RpbGVDb29yZHNUb0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl90aWxlQ29vcmRzVG9Od1NlKHQpLGU9bmV3IFQoaVswXSxpWzFdKTtyZXR1cm4gdGhpcy5vcHRpb25zLm5vV3JhcHx8KGU9dGhpcy5fbWFwLndyYXBMYXRMbmdCb3VuZHMoZSkpLGV9LF90aWxlQ29vcmRzVG9LZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiOiIrdC55KyI6Iit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9dC5zcGxpdCgiOiIpLGU9bmV3IHgoK2lbMF0sK2lbMV0pO3JldHVybiBlLno9K2lbMl0sZX0sX3JlbW92ZVRpbGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fdGlsZXNbdF07aSYmKEsoaS5lbCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6aS5lbCxjb29yZHM6dGhpcy5fa2V5VG9UaWxlQ29vcmRzKHQpfSkpfSxfaW5pdFRpbGU6ZnVuY3Rpb24odCl7USh0LCJsZWFmbGV0LXRpbGUiKTt2YXIgaT10aGlzLmdldFRpbGVTaXplKCk7dC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4Iix0Lm9uc2VsZWN0c3RhcnQ9cix0Lm9ubW91c2Vtb3ZlPXIsTGkmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJm50KHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHppJiYhTWkmJih0LnN0eWxlLldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eT0iaGlkZGVuIil9LF9hZGRUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49dGhpcy5fZ2V0VGlsZVBvcyh0KSxvPXRoaXMuX3RpbGVDb29yZHNUb0tleSh0KSxzPXRoaXMuY3JlYXRlVGlsZSh0aGlzLl93cmFwQ29vcmRzKHQpLGUodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCkpO3RoaXMuX2luaXRUaWxlKHMpLHRoaXMuY3JlYXRlVGlsZS5sZW5ndGg8MiYmZihlKHRoaXMuX3RpbGVSZWFkeSx0aGlzLHQsbnVsbCxzKSksYXQocyxuKSx0aGlzLl90aWxlc1tvXT17ZWw6cyxjb29yZHM6dCxjdXJyZW50OiEwfSxpLmFwcGVuZENoaWxkKHMpLHRoaXMuZmlyZSgidGlsZWxvYWRzdGFydCIse3RpbGU6cyxjb29yZHM6dH0pfSxfdGlsZVJlYWR5OmZ1bmN0aW9uKHQsaSxuKXtpJiZ0aGlzLmZpcmUoInRpbGVlcnJvciIse2Vycm9yOmksdGlsZTpuLGNvb3Jkczp0fSk7dmFyIG89dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpOyhuPXRoaXMuX3RpbGVzW29dKSYmKG4ubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8obnQobi5lbCwwKSxnKHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPWYodGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSk6KG4uYWN0aXZlPSEwLHRoaXMuX3BydW5lVGlsZXMoKSksaXx8KFEobi5lbCwibGVhZmxldC10aWxlLWxvYWRlZCIpLHRoaXMuZmlyZSgidGlsZWxvYWQiLHt0aWxlOm4uZWwsY29vcmRzOnR9KSksdGhpcy5fbm9UaWxlc1RvTG9hZCgpJiYodGhpcy5fbG9hZGluZz0hMSx0aGlzLmZpcmUoImxvYWQiKSxMaXx8IXRoaXMuX21hcC5fZmFkZUFuaW1hdGVkP2YodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKTpzZXRUaW1lb3V0KGUodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKSwyNTApKSl9LF9nZXRUaWxlUG9zOmZ1bmN0aW9uKHQpe3JldHVybiB0LnNjYWxlQnkodGhpcy5nZXRUaWxlU2l6ZSgpKS5zdWJ0cmFjdCh0aGlzLl9sZXZlbC5vcmlnaW4pfSxfd3JhcENvb3JkczpmdW5jdGlvbih0KXt2YXIgaT1uZXcgeCh0aGlzLl93cmFwWD9zKHQueCx0aGlzLl93cmFwWCk6dC54LHRoaXMuX3dyYXBZP3ModC55LHRoaXMuX3dyYXBZKTp0LnkpO3JldHVybiBpLno9dC56LGl9LF9weEJvdW5kc1RvVGlsZVJhbmdlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2V0VGlsZVNpemUoKTtyZXR1cm4gbmV3IFAodC5taW4udW5zY2FsZUJ5KGkpLmZsb29yKCksdC5tYXgudW5zY2FsZUJ5KGkpLmNlaWwoKS5zdWJ0cmFjdChbMSwxXSkpfSxfbm9UaWxlc1RvTG9hZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcylpZighdGhpcy5fdGlsZXNbdF0ubG9hZGVkKXJldHVybiExO3JldHVybiEwfX0pLG1uPXBuLmV4dGVuZCh7b3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTgsc3ViZG9tYWluczoiYWJjIixlcnJvclRpbGVVcmw6IiIsem9vbU9mZnNldDowLHRtczohMSx6b29tUmV2ZXJzZTohMSxkZXRlY3RSZXRpbmE6ITEsY3Jvc3NPcmlnaW46ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt0aGlzLl91cmw9dCwoaT1sKHRoaXMsaSkpLmRldGVjdFJldGluYSYmWWkmJmkubWF4Wm9vbT4wJiYoaS50aWxlU2l6ZT1NYXRoLmZsb29yKGkudGlsZVNpemUvMiksaS56b29tUmV2ZXJzZT8oaS56b29tT2Zmc2V0LS0saS5taW5ab29tKyspOihpLnpvb21PZmZzZXQrKyxpLm1heFpvb20tLSksaS5taW5ab29tPU1hdGgubWF4KDAsaS5taW5ab29tKSksInN0cmluZyI9PXR5cGVvZiBpLnN1YmRvbWFpbnMmJihpLnN1YmRvbWFpbnM9aS5zdWJkb21haW5zLnNwbGl0KCIiKSkseml8fHRoaXMub24oInRpbGV1bmxvYWQiLHRoaXMuX29uVGlsZVJlbW92ZSl9LHNldFVybDpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl91cmw9PT10JiZ2b2lkIDA9PT1pJiYoaT0hMCksdGhpcy5fdXJsPXQsaXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxjcmVhdGVUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIG10KG4sImxvYWQiLGUodGhpcy5fdGlsZU9uTG9hZCx0aGlzLGksbikpLG10KG4sImVycm9yIixlKHRoaXMuX3RpbGVPbkVycm9yLHRoaXMsaSxuKSksKHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8IiI9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pJiYobi5jcm9zc09yaWdpbj0hMD09PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbj8iIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLG4uYWx0PSIiLG4uc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksbi5zcmM9dGhpcy5nZXRUaWxlVXJsKHQpLG59LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9e3I6WWk/IkAyeCI6IiIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O2lmKHRoaXMuX21hcCYmIXRoaXMuX21hcC5vcHRpb25zLmNycy5pbmZpbml0ZSl7dmFyIG49dGhpcy5fZ2xvYmFsVGlsZVJhbmdlLm1heC55LXQueTt0aGlzLm9wdGlvbnMudG1zJiYoZS55PW4pLGVbIi15Il09bn1yZXR1cm4gXyh0aGlzLl91cmwsaShlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGkpe0xpP3NldFRpbWVvdXQoZSh0LHRoaXMsbnVsbCxpKSwwKTp0KG51bGwsaSl9LF90aWxlT25FcnJvcjpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtuJiZpLmdldEF0dHJpYnV0ZSgic3JjIikhPT1uJiYoaS5zcmM9biksdChlLGkpfSxfb25UaWxlUmVtb3ZlOmZ1bmN0aW9uKHQpe3QudGlsZS5vbmxvYWQ9bnVsbH0sX2dldFpvb21Gb3JVcmw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tLGU9dGhpcy5vcHRpb25zLnpvb21SZXZlcnNlLG49dGhpcy5vcHRpb25zLnpvb21PZmZzZXQ7cmV0dXJuIGUmJih0PWktdCksdCtufSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaV19LF9hYm9ydExvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgdCxpO2Zvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmNvb3Jkcy56IT09dGhpcy5fdGlsZVpvb20mJigoaT10aGlzLl90aWxlc1t0XS5lbCkub25sb2FkPXIsaS5vbmVycm9yPXIsaS5jb21wbGV0ZXx8KGkuc3JjPXNpLEsoaSksZGVsZXRlIHRoaXMuX3RpbGVzW3RdKSl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVzW3RdO2lmKGkpcmV0dXJuIFNpfHxpLmVsLnNldEF0dHJpYnV0ZSgic3JjIixzaSkscG4ucHJvdG90eXBlLl9yZW1vdmVUaWxlLmNhbGwodGhpcyx0KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGksZSl7aWYodGhpcy5fbWFwJiYoIWV8fGUuZ2V0QXR0cmlidXRlKCJzcmMiKSE9PXNpKSlyZXR1cm4gcG4ucHJvdG90eXBlLl90aWxlUmVhZHkuY2FsbCh0aGlzLHQsaSxlKX19KSxmbj1tbi5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6IldNUyIscmVxdWVzdDoiR2V0TWFwIixsYXllcnM6IiIsc3R5bGVzOiIiLGZvcm1hdDoiaW1hZ2UvanBlZyIsdHJhbnNwYXJlbnQ6ITEsdmVyc2lvbjoiMS4xLjEifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dDt2YXIgbj1pKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyk7Zm9yKHZhciBvIGluIGUpbyBpbiB0aGlzLm9wdGlvbnN8fChuW29dPWVbb10pO3ZhciBzPShlPWwodGhpcyxlKSkuZGV0ZWN0UmV0aW5hJiZZaT8yOjEscj10aGlzLmdldFRpbGVTaXplKCk7bi53aWR0aD1yLngqcyxuLmhlaWdodD1yLnkqcyx0aGlzLndtc1BhcmFtcz1ufSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGk9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2ldPXRoaXMuX2Nycy5jb2RlLG1uLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fdGlsZUNvb3Jkc1RvTndTZSh0KSxlPXRoaXMuX2NycyxuPWIoZS5wcm9qZWN0KGlbMF0pLGUucHJvamVjdChpWzFdKSksbz1uLm1pbixzPW4ubWF4LHI9KHRoaXMuX3dtc1ZlcnNpb24+PTEuMyYmdGhpcy5fY3JzPT09VWU/W28ueSxvLngscy55LHMueF06W28ueCxvLnkscy54LHMueV0pLmpvaW4oIiwiKSxhPW1uLnByb3RvdHlwZS5nZXRUaWxlVXJsLmNhbGwodGhpcyx0KTtyZXR1cm4gYStjKHRoaXMud21zUGFyYW1zLGEsdGhpcy5vcHRpb25zLnVwcGVyY2FzZSkrKHRoaXMub3B0aW9ucy51cHBlcmNhc2U/IiZCQk9YPSI6IiZiYm94PSIpK3J9LHNldFBhcmFtczpmdW5jdGlvbih0LGUpe3JldHVybiBpKHRoaXMud21zUGFyYW1zLHQpLGV8fHRoaXMucmVkcmF3KCksdGhpc319KTttbi5XTVM9Zm4sSnQud21zPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBmbih0LGkpfTt2YXIgZ249cWUuZXh0ZW5kKHtvcHRpb25zOntwYWRkaW5nOi4xLHRvbGVyYW5jZTowfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2wodGhpcyx0KSxuKHRoaXMpLHRoaXMuX2xheWVycz10aGlzLl9sYXllcnN8fHt9fSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl96b29tQW5pbWF0ZWQmJlEodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl91cGRhdGUoKSx0aGlzLm9uKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpLHRoaXMuX2Rlc3Ryb3lDb250YWluZXIoKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdyZXNldDp0aGlzLl9yZXNldCx6b29tOnRoaXMuX29uWm9vbSxtb3ZlZW5kOnRoaXMuX3VwZGF0ZSx6b29tZW5kOnRoaXMuX29uWm9vbUVuZH07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fb25BbmltWm9vbSksdH0sX29uQW5pbVpvb206ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlVHJhbnNmb3JtKHQuY2VudGVyLHQuem9vbSl9LF9vblpvb206ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fbWFwLmdldENlbnRlcigpLHRoaXMuX21hcC5nZXRab29tKCkpfSxfdXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fbWFwLmdldFpvb21TY2FsZShpLHRoaXMuX3pvb20pLG49aHQodGhpcy5fY29udGFpbmVyKSxvPXRoaXMuX21hcC5nZXRTaXplKCkubXVsdGlwbHlCeSguNSt0aGlzLm9wdGlvbnMucGFkZGluZykscz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9jZW50ZXIsaSkscj10aGlzLl9tYXAucHJvamVjdCh0LGkpLnN1YnRyYWN0KHMpLGE9by5tdWx0aXBseUJ5KC1lKS5hZGQobikuYWRkKG8pLnN1YnRyYWN0KHIpO2ppP3J0KHRoaXMuX2NvbnRhaW5lcixhLGUpOmF0KHRoaXMuX2NvbnRhaW5lcixhKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKTtmb3IodmFyIHQgaW4gdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5fcmVzZXQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9wcm9qZWN0KCl9LF91cGRhdGVQYXRoczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl91cGRhdGUoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5wYWRkaW5nLGk9dGhpcy5fbWFwLmdldFNpemUoKSxlPXRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpLm11bHRpcGx5QnkoLXQpKS5yb3VuZCgpO3RoaXMuX2JvdW5kcz1uZXcgUChlLGUuYWRkKGkubXVsdGlwbHlCeSgxKzIqdCkpLnJvdW5kKCkpLHRoaXMuX2NlbnRlcj10aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fem9vbT10aGlzLl9tYXAuZ2V0Wm9vbSgpfX0pLHZuPWduLmV4dGVuZCh7Z2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9Z24ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0LnZpZXdwcmVyZXNldD10aGlzLl9vblZpZXdQcmVSZXNldCx0fSxfb25WaWV3UHJlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSEwfSxvbkFkZDpmdW5jdGlvbigpe2duLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMpLHRoaXMuX2RyYXcoKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bXQodCwibW91c2Vtb3ZlIixvKHRoaXMuX29uTW91c2VNb3ZlLDMyLHRoaXMpLHRoaXMpLG10KHQsImNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIGNvbnRleHRtZW51Iix0aGlzLl9vbkNsaWNrLHRoaXMpLG10KHQsIm1vdXNlb3V0Iix0aGlzLl9oYW5kbGVNb3VzZU91dCx0aGlzKSx0aGlzLl9jdHg9dC5nZXRDb250ZXh0KCIyZCIpfSxfZGVzdHJveUNvbnRhaW5lcjpmdW5jdGlvbigpe2codGhpcy5fcmVkcmF3UmVxdWVzdCksZGVsZXRlIHRoaXMuX2N0eCxLKHRoaXMuX2NvbnRhaW5lciksZnQodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyfSxfdXBkYXRlUGF0aHM6ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocyl7dGhpcy5fcmVkcmF3Qm91bmRzPW51bGw7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpO3RoaXMuX3JlZHJhdygpfX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fCF0aGlzLl9ib3VuZHMpe2duLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5fYm91bmRzLGk9dGhpcy5fY29udGFpbmVyLGU9dC5nZXRTaXplKCksbj1ZaT8yOjE7YXQoaSx0Lm1pbiksaS53aWR0aD1uKmUueCxpLmhlaWdodD1uKmUueSxpLnN0eWxlLndpZHRoPWUueCsicHgiLGkuc3R5bGUuaGVpZ2h0PWUueSsicHgiLFlpJiZ0aGlzLl9jdHguc2NhbGUoMiwyKSx0aGlzLl9jdHgudHJhbnNsYXRlKC10Lm1pbi54LC10Lm1pbi55KSx0aGlzLmZpcmUoInVwZGF0ZSIpfX0sX3Jlc2V0OmZ1bmN0aW9uKCl7Z24ucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX2xheWVyc1tuKHQpXT10O3ZhciBpPXQuX29yZGVyPXtsYXllcjp0LHByZXY6dGhpcy5fZHJhd0xhc3QsbmV4dDpudWxsfTt0aGlzLl9kcmF3TGFzdCYmKHRoaXMuX2RyYXdMYXN0Lm5leHQ9aSksdGhpcy5fZHJhd0xhc3Q9aSx0aGlzLl9kcmF3Rmlyc3Q9dGhpcy5fZHJhd0ZpcnN0fHx0aGlzLl9kcmF3TGFzdH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXIsZT1pLm5leHQsbz1pLnByZXY7ZT9lLnByZXY9bzp0aGlzLl9kcmF3TGFzdD1vLG8/by5uZXh0PWU6dGhpcy5fZHJhd0ZpcnN0PWUsZGVsZXRlIHQuX29yZGVyLGRlbGV0ZSB0aGlzLl9sYXllcnNbbih0KV0sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHQuX3Byb2plY3QoKSx0Ll91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVEYXNoQXJyYXk6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0Lm9wdGlvbnMuZGFzaEFycmF5KXt2YXIgaSxlLG49dC5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgvWywgXSsvKSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe2lmKGk9TnVtYmVyKG5bZV0pLGlzTmFOKGkpKXJldHVybjtvLnB1c2goaSl9dC5vcHRpb25zLl9kYXNoQXJyYXk9b31lbHNlIHQub3B0aW9ucy5fZGFzaEFycmF5PXQub3B0aW9ucy5kYXNoQXJyYXl9LF9yZXF1ZXN0UmVkcmF3OmZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyh0KSx0aGlzLl9yZWRyYXdSZXF1ZXN0PXRoaXMuX3JlZHJhd1JlcXVlc3R8fGYodGhpcy5fcmVkcmF3LHRoaXMpKX0sX2V4dGVuZFJlZHJhd0JvdW5kczpmdW5jdGlvbih0KXtpZih0Ll9weEJvdW5kcyl7dmFyIGk9KHQub3B0aW9ucy53ZWlnaHR8fDApKzE7dGhpcy5fcmVkcmF3Qm91bmRzPXRoaXMuX3JlZHJhd0JvdW5kc3x8bmV3IFAsdGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZCh0Ll9weEJvdW5kcy5taW4uc3VidHJhY3QoW2ksaV0pKSx0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1heC5hZGQoW2ksaV0pKX19LF9yZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXdSZXF1ZXN0PW51bGwsdGhpcy5fcmVkcmF3Qm91bmRzJiYodGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKSx0aGlzLl9yZWRyYXdCb3VuZHMubWF4Ll9jZWlsKCkpLHRoaXMuX2NsZWFyKCksdGhpcy5fZHJhdygpLHRoaXMuX3JlZHJhd0JvdW5kcz1udWxsfSxfY2xlYXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWRyYXdCb3VuZHM7aWYodCl7dmFyIGk9dC5nZXRTaXplKCk7dGhpcy5fY3R4LmNsZWFyUmVjdCh0Lm1pbi54LHQubWluLnksaS54LGkueSl9ZWxzZSB0aGlzLl9jdHguY2xlYXJSZWN0KDAsMCx0aGlzLl9jb250YWluZXIud2lkdGgsdGhpcy5fY29udGFpbmVyLmhlaWdodCl9LF9kcmF3OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9yZWRyYXdCb3VuZHM7aWYodGhpcy5fY3R4LnNhdmUoKSxpKXt2YXIgZT1pLmdldFNpemUoKTt0aGlzLl9jdHguYmVnaW5QYXRoKCksdGhpcy5fY3R4LnJlY3QoaS5taW4ueCxpLm1pbi55LGUueCxlLnkpLHRoaXMuX2N0eC5jbGlwKCl9dGhpcy5fZHJhd2luZz0hMDtmb3IodmFyIG49dGhpcy5fZHJhd0ZpcnN0O247bj1uLm5leHQpdD1uLmxheWVyLCghaXx8dC5fcHhCb3VuZHMmJnQuX3B4Qm91bmRzLmludGVyc2VjdHMoaSkpJiZ0Ll91cGRhdGVQYXRoKCk7dGhpcy5fZHJhd2luZz0hMSx0aGlzLl9jdHgucmVzdG9yZSgpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGkpe2lmKHRoaXMuX2RyYXdpbmcpe3ZhciBlLG4sbyxzLHI9dC5fcGFydHMsYT1yLmxlbmd0aCxoPXRoaXMuX2N0eDtpZihhKXtmb3IoaC5iZWdpblBhdGgoKSxlPTA7ZTxhO2UrKyl7Zm9yKG49MCxvPXJbZV0ubGVuZ3RoO248bztuKyspcz1yW2VdW25dLGhbbj8ibGluZVRvIjoibW92ZVRvIl0ocy54LHMueSk7aSYmaC5jbG9zZVBhdGgoKX10aGlzLl9maWxsU3Ryb2tlKGgsdCl9fX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXtpZih0aGlzLl9kcmF3aW5nJiYhdC5fZW1wdHkoKSl7dmFyIGk9dC5fcG9pbnQsZT10aGlzLl9jdHgsbj1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksbz0oTWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXNZKSwxKXx8bikvbjsxIT09byYmKGUuc2F2ZSgpLGUuc2NhbGUoMSxvKSksZS5iZWdpblBhdGgoKSxlLmFyYyhpLngsaS55L28sbiwwLDIqTWF0aC5QSSwhMSksMSE9PW8mJmUucmVzdG9yZSgpLHRoaXMuX2ZpbGxTdHJva2UoZSx0KX19LF9maWxsU3Ryb2tlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9aS5vcHRpb25zO2UuZmlsbCYmKHQuZ2xvYmFsQWxwaGE9ZS5maWxsT3BhY2l0eSx0LmZpbGxTdHlsZT1lLmZpbGxDb2xvcnx8ZS5jb2xvcix0LmZpbGwoZS5maWxsUnVsZXx8ImV2ZW5vZGQiKSksZS5zdHJva2UmJjAhPT1lLndlaWdodCYmKHQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goaS5vcHRpb25zJiZpLm9wdGlvbnMuX2Rhc2hBcnJheXx8W10pLHQuZ2xvYmFsQWxwaGE9ZS5vcGFjaXR5LHQubGluZVdpZHRoPWUud2VpZ2h0LHQuc3Ryb2tlU3R5bGU9ZS5jb2xvcix0LmxpbmVDYXA9ZS5saW5lQ2FwLHQubGluZUpvaW49ZS5saW5lSm9pbix0LnN0cm9rZSgpKX0sX29uQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGUsbj10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSxvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShpPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmkuX2NvbnRhaW5zUG9pbnQobikmJiF0aGlzLl9tYXAuX2RyYWdnYWJsZU1vdmVkKGkpJiYoZT1pKTtlJiYoenQodCksdGhpcy5fZmlyZUV2ZW50KFtlXSx0KSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXtpZih0aGlzLl9tYXAmJiF0aGlzLl9tYXAuZHJhZ2dpbmcubW92aW5nKCkmJiF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pe3ZhciBpPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpO3RoaXMuX2hhbmRsZU1vdXNlSG92ZXIodCxpKX19LF9oYW5kbGVNb3VzZU91dDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9ob3ZlcmVkTGF5ZXI7aSYmKHR0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2ZpcmVFdmVudChbaV0sdCwibW91c2VvdXQiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bnVsbCl9LF9oYW5kbGVNb3VzZUhvdmVyOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG4sbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoZT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZlLl9jb250YWluc1BvaW50KGkpJiYobj1lKTtuIT09dGhpcy5faG92ZXJlZExheWVyJiYodGhpcy5faGFuZGxlTW91c2VPdXQodCksbiYmKFEodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5fZmlyZUV2ZW50KFtuXSx0LCJtb3VzZW92ZXIiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bikpLHRoaXMuX2hvdmVyZWRMYXllciYmdGhpcy5fZmlyZUV2ZW50KFt0aGlzLl9ob3ZlcmVkTGF5ZXJdLHQpfSxfZmlyZUV2ZW50OmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9tYXAuX2ZpcmVET01FdmVudChpLGV8fGkudHlwZSx0KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXt2YXIgaT10Ll9vcmRlcjtpZihpKXt2YXIgZT1pLm5leHQsbj1pLnByZXY7ZSYmKGUucHJldj1uLG4/bi5uZXh0PWU6ZSYmKHRoaXMuX2RyYXdGaXJzdD1lKSxpLnByZXY9dGhpcy5fZHJhd0xhc3QsdGhpcy5fZHJhd0xhc3QubmV4dD1pLGkubmV4dD1udWxsLHRoaXMuX2RyYXdMYXN0PWksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSl9fSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXI7aWYoaSl7dmFyIGU9aS5uZXh0LG49aS5wcmV2O24mJihuLm5leHQ9ZSxlP2UucHJldj1uOm4mJih0aGlzLl9kcmF3TGFzdD1uKSxpLnByZXY9bnVsbCxpLm5leHQ9dGhpcy5fZHJhd0ZpcnN0LHRoaXMuX2RyYXdGaXJzdC5wcmV2PWksdGhpcy5fZHJhd0ZpcnN0PWksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSl9fX0pLHluPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBkb2N1bWVudC5uYW1lc3BhY2VzLmFkZCgibHZtbCIsInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiksZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxsdm1sOiIrdCsnIGNsYXNzPSJsdm1sIj4nKX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCI8Iit0KycgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC5jb206dm1sIiBjbGFzcz0ibHZtbCI+Jyl9fX0oKSx4bj17X2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9RygiZGl2IiwibGVhZmxldC12bWwtY29udGFpbmVyIil9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fChnbi5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuZmlyZSgidXBkYXRlIikpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyPXluKCJzaGFwZSIpO1EoaSwibGVhZmxldC12bWwtc2hhcGUgIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8IiIpKSxpLmNvb3Jkc2l6ZT0iMSAxIix0Ll9wYXRoPXluKCJwYXRoIiksaS5hcHBlbmRDaGlsZCh0Ll9wYXRoKSx0aGlzLl91cGRhdGVTdHlsZSh0KSx0aGlzLl9sYXllcnNbbih0KV09dH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChpKSx0Lm9wdGlvbnMuaW50ZXJhY3RpdmUmJnQuYWRkSW50ZXJhY3RpdmVUYXJnZXQoaSl9LF9yZW1vdmVQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX2NvbnRhaW5lcjtLKGkpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQoaSksZGVsZXRlIHRoaXMuX2xheWVyc1tuKHQpXX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3N0cm9rZSxlPXQuX2ZpbGwsbj10Lm9wdGlvbnMsbz10Ll9jb250YWluZXI7by5zdHJva2VkPSEhbi5zdHJva2Usby5maWxsZWQ9ISFuLmZpbGwsbi5zdHJva2U/KGl8fChpPXQuX3N0cm9rZT15bigic3Ryb2tlIikpLG8uYXBwZW5kQ2hpbGQoaSksaS53ZWlnaHQ9bi53ZWlnaHQrInB4IixpLmNvbG9yPW4uY29sb3IsaS5vcGFjaXR5PW4ub3BhY2l0eSxuLmRhc2hBcnJheT9pLmRhc2hTdHlsZT1vaShuLmRhc2hBcnJheSk/bi5kYXNoQXJyYXkuam9pbigiICIpOm4uZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywiICIpOmkuZGFzaFN0eWxlPSIiLGkuZW5kY2FwPW4ubGluZUNhcC5yZXBsYWNlKCJidXR0IiwiZmxhdCIpLGkuam9pbnN0eWxlPW4ubGluZUpvaW4pOmkmJihvLnJlbW92ZUNoaWxkKGkpLHQuX3N0cm9rZT1udWxsKSxuLmZpbGw/KGV8fChlPXQuX2ZpbGw9eW4oImZpbGwiKSksby5hcHBlbmRDaGlsZChlKSxlLmNvbG9yPW4uZmlsbENvbG9yfHxuLmNvbG9yLGUub3BhY2l0eT1uLmZpbGxPcGFjaXR5KTplJiYoby5yZW1vdmVDaGlsZChlKSx0Ll9maWxsPW51bGwpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LnJvdW5kKCksZT1NYXRoLnJvdW5kKHQuX3JhZGl1cyksbj1NYXRoLnJvdW5kKHQuX3JhZGl1c1l8fGUpO3RoaXMuX3NldFBhdGgodCx0Ll9lbXB0eSgpPyJNMCAwIjoiQUwgIitpLngrIiwiK2kueSsiICIrZSsiLCIrbisiIDAsMjM1OTI2MDAiKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnY9aX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtYKHQuX2NvbnRhaW5lcil9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtKKHQuX2NvbnRhaW5lcil9fSx3bj0kaT95bjpFLFBuPWduLmV4dGVuZCh7Z2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9Z24ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0Lnpvb21zdGFydD10aGlzLl9vblpvb21TdGFydCx0fSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj13bigic3ZnIiksdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksdGhpcy5fcm9vdEdyb3VwPXduKCJnIiksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3RHcm91cCl9LF9kZXN0cm95Q29udGFpbmVyOmZ1bmN0aW9uKCl7Syh0aGlzLl9jb250YWluZXIpLGZ0KHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lcixkZWxldGUgdGhpcy5fcm9vdEdyb3VwLGRlbGV0ZSB0aGlzLl9zdmdTaXplfSxfb25ab29tU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fCF0aGlzLl9ib3VuZHMpe2duLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5fYm91bmRzLGk9dC5nZXRTaXplKCksZT10aGlzLl9jb250YWluZXI7dGhpcy5fc3ZnU2l6ZSYmdGhpcy5fc3ZnU2l6ZS5lcXVhbHMoaSl8fCh0aGlzLl9zdmdTaXplPWksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixpLngpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGkueSkpLGF0KGUsdC5taW4pLGUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbdC5taW4ueCx0Lm1pbi55LGkueCxpLnldLmpvaW4oIiAiKSksdGhpcy5maXJlKCJ1cGRhdGUiKX19LF9pbml0UGF0aDpmdW5jdGlvbih0KXt2YXIgaT10Ll9wYXRoPXduKCJwYXRoIik7dC5vcHRpb25zLmNsYXNzTmFtZSYmUShpLHQub3B0aW9ucy5jbGFzc05hbWUpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmUShpLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5fdXBkYXRlU3R5bGUodCksdGhpcy5fbGF5ZXJzW24odCldPXR9LF9hZGRQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX3Jvb3RHcm91cHx8dGhpcy5faW5pdENvbnRhaW5lcigpLHRoaXMuX3Jvb3RHcm91cC5hcHBlbmRDaGlsZCh0Ll9wYXRoKSx0LmFkZEludGVyYWN0aXZlVGFyZ2V0KHQuX3BhdGgpfSxfcmVtb3ZlUGF0aDpmdW5jdGlvbih0KXtLKHQuX3BhdGgpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCksZGVsZXRlIHRoaXMuX2xheWVyc1tuKHQpXX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5fcGF0aCxlPXQub3B0aW9ucztpJiYoZS5zdHJva2U/KGkuc2V0QXR0cmlidXRlKCJzdHJva2UiLGUuY29sb3IpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsZS5vcGFjaXR5KSxpLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixlLndlaWdodCksaS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lY2FwIixlLmxpbmVDYXApLGkuc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWpvaW4iLGUubGluZUpvaW4pLGUuZGFzaEFycmF5P2kuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IixlLmRhc2hBcnJheSk6aS5yZW1vdmVBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiKSxlLmRhc2hPZmZzZXQ/aS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixlLmRhc2hPZmZzZXQpOmkucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIpKTppLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwibm9uZSIpLGUuZmlsbD8oaS5zZXRBdHRyaWJ1dGUoImZpbGwiLGUuZmlsbENvbG9yfHxlLmNvbG9yKSxpLnNldEF0dHJpYnV0ZSgiZmlsbC1vcGFjaXR5IixlLmZpbGxPcGFjaXR5KSxpLnNldEF0dHJpYnV0ZSgiZmlsbC1ydWxlIixlLmZpbGxSdWxlfHwiZXZlbm9kZCIpKTppLnNldEF0dHJpYnV0ZSgiZmlsbCIsIm5vbmUiKSl9LF91cGRhdGVQb2x5OmZ1bmN0aW9uKHQsaSl7dGhpcy5fc2V0UGF0aCh0LGsodC5fcGFydHMsaSkpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LGU9TWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXMpLDEpLG49ImEiK2UrIiwiKyhNYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1c1kpLDEpfHxlKSsiIDAgMSwwICIsbz10Ll9lbXB0eSgpPyJNMCAwIjoiTSIrKGkueC1lKSsiLCIraS55K24rMiplKyIsMCAiK24rMiotZSsiLDAgIjt0aGlzLl9zZXRQYXRoKHQsbyl9LF9zZXRQYXRoOmZ1bmN0aW9uKHQsaSl7dC5fcGF0aC5zZXRBdHRyaWJ1dGUoImQiLGkpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe1godC5fcGF0aCl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtKKHQuX3BhdGgpfX0pOyRpJiZQbi5pbmNsdWRlKHhuKSxiZS5pbmNsdWRlKHtnZXRSZW5kZXJlcjpmdW5jdGlvbih0KXt2YXIgaT10Lm9wdGlvbnMucmVuZGVyZXJ8fHRoaXMuX2dldFBhbmVSZW5kZXJlcih0Lm9wdGlvbnMucGFuZSl8fHRoaXMub3B0aW9ucy5yZW5kZXJlcnx8dGhpcy5fcmVuZGVyZXI7cmV0dXJuIGl8fChpPXRoaXMuX3JlbmRlcmVyPXRoaXMuX2NyZWF0ZVJlbmRlcmVyKCkpLHRoaXMuaGFzTGF5ZXIoaSl8fHRoaXMuYWRkTGF5ZXIoaSksaX0sX2dldFBhbmVSZW5kZXJlcjpmdW5jdGlvbih0KXtpZigib3ZlcmxheVBhbmUiPT09dHx8dm9pZCAwPT09dClyZXR1cm4hMTt2YXIgaT10aGlzLl9wYW5lUmVuZGVyZXJzW3RdO3JldHVybiB2b2lkIDA9PT1pJiYoaT10aGlzLl9jcmVhdGVSZW5kZXJlcih7cGFuZTp0fSksdGhpcy5fcGFuZVJlbmRlcmVyc1t0XT1pKSxpfSxfY3JlYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmZXJDYW52YXMmJiR0KHQpfHxRdCh0KX19KTt2YXIgTG49b24uZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7b24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxpKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNldExhdExuZ3ModGhpcy5fYm91bmRzVG9MYXRMbmdzKHQpKX0sX2JvdW5kc1RvTGF0TG5nczpmdW5jdGlvbih0KXtyZXR1cm4gdD16KHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KTtQbi5jcmVhdGU9d24sUG4ucG9pbnRzVG9QYXRoPWssc24uZ2VvbWV0cnlUb0xheWVyPUZ0LHNuLmNvb3Jkc1RvTGF0TG5nPVV0LHNuLmNvb3Jkc1RvTGF0TG5ncz1WdCxzbi5sYXRMbmdUb0Nvb3Jkcz1xdCxzbi5sYXRMbmdzVG9Db29yZHM9R3Qsc24uZ2V0RmVhdHVyZT1LdCxzbi5hc0ZlYXR1cmU9WXQsYmUubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSk7dmFyIGJuPUVlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9dC5fY29udGFpbmVyLHRoaXMuX3BhbmU9dC5fcGFuZXMub3ZlcmxheVBhbmUsdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9MCx0Lm9uKCJ1bmxvYWQiLHRoaXMuX2Rlc3Ryb3ksdGhpcyl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7bXQodGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2Z0KHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7Syh0aGlzLl9wYW5lKSxkZWxldGUgdGhpcy5fcGFuZX0sX3Jlc2V0U3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHRoaXMuX21vdmVkPSExfSxfY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGU6ZnVuY3Rpb24oKXswIT09dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PTApfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIXQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24pcmV0dXJuITE7dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCksZmkoKSx1dCgpLHRoaXMuX3N0YXJ0UG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLG10KGRvY3VtZW50LHtjb250ZXh0bWVudTpMdCxtb3VzZW1vdmU6dGhpcy5fb25Nb3VzZU1vdmUsbW91c2V1cDp0aGlzLl9vbk1vdXNlVXAsa2V5ZG93bjp0aGlzLl9vbktleURvd259LHRoaXMpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbW92ZWR8fCh0aGlzLl9tb3ZlZD0hMCx0aGlzLl9ib3g9RygiZGl2IiwibGVhZmxldC16b29tLWJveCIsdGhpcy5fY29udGFpbmVyKSxRKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jcm9zc2hhaXIiKSx0aGlzLl9tYXAuZmlyZSgiYm94em9vbXN0YXJ0IikpLHRoaXMuX3BvaW50PXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KTt2YXIgaT1uZXcgUCh0aGlzLl9wb2ludCx0aGlzLl9zdGFydFBvaW50KSxlPWkuZ2V0U2l6ZSgpO2F0KHRoaXMuX2JveCxpLm1pbiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWUueCsicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9ZS55KyJweCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKEsodGhpcy5fYm94KSx0dCh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY3Jvc3NoYWlyIikpLGdpKCksbHQoKSxmdChkb2N1bWVudCx7Y29udGV4dG1lbnU6THQsbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXtpZigoMT09PXQud2hpY2h8fDE9PT10LmJ1dHRvbikmJih0aGlzLl9maW5pc2goKSx0aGlzLl9tb3ZlZCkpe3RoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCksdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9c2V0VGltZW91dChlKHRoaXMuX3Jlc2V0U3RhdGUsdGhpcyksMCk7dmFyIGk9bmV3IFQodGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRQb2ludCksdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQpKTt0aGlzLl9tYXAuZml0Qm91bmRzKGkpLmZpcmUoImJveHpvb21lbmQiLHtib3hab29tQm91bmRzOml9KX19LF9vbktleURvd246ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJnRoaXMuX2ZpbmlzaCgpfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiYm94Wm9vbSIsYm4pLGJlLm1lcmdlT3B0aW9ucyh7ZG91YmxlQ2xpY2tab29tOiEwfSk7dmFyIFRuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9tYXAub24oImRibGNsaWNrIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoImRibGNsaWNrIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxfb25Eb3VibGVDbGljazpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAsZT1pLmdldFpvb20oKSxuPWkub3B0aW9ucy56b29tRGVsdGEsbz10Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/ZS1uOmUrbjsiY2VudGVyIj09PWkub3B0aW9ucy5kb3VibGVDbGlja1pvb20/aS5zZXRab29tKG8pOmkuc2V0Wm9vbUFyb3VuZCh0LmNvbnRhaW5lclBvaW50LG8pfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiZG91YmxlQ2xpY2tab29tIixUbiksYmUubWVyZ2VPcHRpb25zKHtkcmFnZ2luZzohMCxpbmVydGlhOiFNaSxpbmVydGlhRGVjZWxlcmF0aW9uOjM0MDAsaW5lcnRpYU1heFNwZWVkOjEvMCxlYXNlTGluZWFyaXR5Oi4yLHdvcmxkQ29weUp1bXA6ITEsbWF4Qm91bmRzVmlzY29zaXR5OjB9KTt2YXIgem49RWUuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe2lmKCF0aGlzLl9kcmFnZ2FibGUpe3ZhciB0PXRoaXMuX21hcDt0aGlzLl9kcmFnZ2FibGU9bmV3IFJlKHQuX21hcFBhbmUsdC5fY29udGFpbmVyKSx0aGlzLl9kcmFnZ2FibGUub24oe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcyksdGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbigicHJlZHJhZyIsdGhpcy5fb25QcmVEcmFnV3JhcCx0aGlzKSx0Lm9uKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fb25ab29tRW5kLHRoaXMpKX1RKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LWdyYWIgbGVhZmxldC10b3VjaC1kcmFnIiksdGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpLHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0dCh0aGlzLl9tYXAuX2NvbnRhaW5lciwibGVhZmxldC1ncmFiIiksdHQodGhpcy5fbWFwLl9jb250YWluZXIsImxlYWZsZXQtdG91Y2gtZHJhZyIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcDtpZih0Ll9zdG9wKCksdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzJiZ0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpe3ZhciBpPXoodGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTt0aGlzLl9vZmZzZXRMaW1pdD1iKHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Tm9ydGhXZXN0KCkpLm11bHRpcGx5QnkoLTEpLHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0U291dGhFYXN0KCkpLm11bHRpcGx5QnkoLTEpLmFkZCh0aGlzLl9tYXAuZ2V0U2l6ZSgpKSksdGhpcy5fdmlzY29zaXR5PU1hdGgubWluKDEsTWF0aC5tYXgoMCx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpKX1lbHNlIHRoaXMuX29mZnNldExpbWl0PW51bGw7dC5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJkcmFnc3RhcnQiKSx0Lm9wdGlvbnMuaW5lcnRpYSYmKHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXSl9LF9vbkRyYWc6ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIGk9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M7dGhpcy5fcG9zaXRpb25zLnB1c2goZSksdGhpcy5fdGltZXMucHVzaChpKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhpKX10aGlzLl9tYXAuZmlyZSgibW92ZSIsdCkuZmlyZSgiZHJhZyIsdCl9LF9wcnVuZVBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IoO3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGg+MSYmdC10aGlzLl90aW1lc1swXT41MDspdGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksaT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFswLDBdKTt0aGlzLl9pbml0aWFsV29ybGRPZmZzZXQ9aS5zdWJ0cmFjdCh0KS54LHRoaXMuX3dvcmxkV2lkdGg9dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHMoKS5nZXRTaXplKCkueH0sX3Zpc2NvdXNMaW1pdDpmdW5jdGlvbih0LGkpe3JldHVybiB0LSh0LWkpKnRoaXMuX3Zpc2Nvc2l0eX0sX29uUHJlRHJhZ0xpbWl0OmZ1bmN0aW9uKCl7aWYodGhpcy5fdmlzY29zaXR5JiZ0aGlzLl9vZmZzZXRMaW1pdCl7dmFyIHQ9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3Muc3VidHJhY3QodGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcyksaT10aGlzLl9vZmZzZXRMaW1pdDt0Lng8aS5taW4ueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWluLngpKSx0Lnk8aS5taW4ueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWluLnkpKSx0Lng+aS5tYXgueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWF4LngpKSx0Lnk+aS5tYXgueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWF4LnkpKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcz10aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zLmFkZCh0KX19LF9vblByZURyYWdXcmFwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd29ybGRXaWR0aCxpPU1hdGgucm91bmQodC8yKSxlPXRoaXMuX2luaXRpYWxXb3JsZE9mZnNldCxuPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLngsbz0obi1pK2UpJXQraS1lLHM9KG4raStlKSV0LWktZSxyPU1hdGguYWJzKG8rZSk8TWF0aC5hYnMocytlKT9vOnM7dGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3M9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PXJ9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9aS5vcHRpb25zLG49IWUuaW5lcnRpYXx8dGhpcy5fdGltZXMubGVuZ3RoPDI7aWYoaS5maXJlKCJkcmFnZW5kIix0KSxuKWkuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dGhpcy5fcHJ1bmVQb3NpdGlvbnMoK25ldyBEYXRlKTt2YXIgbz10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSkscz0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxyPWUuZWFzZUxpbmVhcml0eSxhPW8ubXVsdGlwbHlCeShyL3MpLGg9YS5kaXN0YW5jZVRvKFswLDBdKSx1PU1hdGgubWluKGUuaW5lcnRpYU1heFNwZWVkLGgpLGw9YS5tdWx0aXBseUJ5KHUvaCksYz11LyhlLmluZXJ0aWFEZWNlbGVyYXRpb24qciksXz1sLm11bHRpcGx5QnkoLWMvMikucm91bmQoKTtfLnh8fF8ueT8oXz1pLl9saW1pdE9mZnNldChfLGkub3B0aW9ucy5tYXhCb3VuZHMpLGYoZnVuY3Rpb24oKXtpLnBhbkJ5KF8se2R1cmF0aW9uOmMsZWFzZUxpbmVhcml0eTpyLG5vTW92ZVN0YXJ0OiEwLGFuaW1hdGU6ITB9KX0pKTppLmZpcmUoIm1vdmVlbmQiKX19fSk7YmUuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJkcmFnZ2luZyIsem4pLGJlLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pO3ZhciBNbj1FZS5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDU0LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuRGVsdGEodC5vcHRpb25zLmtleWJvYXJkUGFuRGVsdGEpLHRoaXMuX3NldFpvb21EZWx0YSh0Lm9wdGlvbnMuem9vbURlbHRhKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjt0LnRhYkluZGV4PD0wJiYodC50YWJJbmRleD0iMCIpLG10KHQse2ZvY3VzOnRoaXMuX29uRm9jdXMsYmx1cjp0aGlzLl9vbkJsdXIsbW91c2Vkb3duOnRoaXMuX29uTW91c2VEb3dufSx0aGlzKSx0aGlzLl9tYXAub24oe2ZvY3VzOnRoaXMuX2FkZEhvb2tzLGJsdXI6dGhpcy5fcmVtb3ZlSG9va3N9LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUhvb2tzKCksZnQodGhpcy5fbWFwLl9jb250YWluZXIse2ZvY3VzOnRoaXMuX29uRm9jdXMsYmx1cjp0aGlzLl9vbkJsdXIsbW91c2Vkb3duOnRoaXMuX29uTW91c2VEb3dufSx0aGlzKSx0aGlzLl9tYXAub2ZmKHtmb2N1czp0aGlzLl9hZGRIb29rcyxibHVyOnRoaXMuX3JlbW92ZUhvb2tzfSx0aGlzKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWQpe3ZhciB0PWRvY3VtZW50LmJvZHksaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10LnNjcm9sbFRvcHx8aS5zY3JvbGxUb3Asbj10LnNjcm9sbExlZnR8fGkuc2Nyb2xsTGVmdDt0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpLHdpbmRvdy5zY3JvbGxUbyhuLGUpfX0sX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkPSEwLHRoaXMuX21hcC5maXJlKCJmb2N1cyIpfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9tYXAuZmlyZSgiYmx1ciIpfSxfc2V0UGFuRGVsdGE6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXRoaXMuX3BhbktleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihpPTAsZT1vLmxlZnQubGVuZ3RoO2k8ZTtpKyspbltvLmxlZnRbaV1dPVstMSp0LDBdO2ZvcihpPTAsZT1vLnJpZ2h0Lmxlbmd0aDtpPGU7aSsrKW5bby5yaWdodFtpXV09W3QsMF07Zm9yKGk9MCxlPW8uZG93bi5sZW5ndGg7aTxlO2krKyluW28uZG93bltpXV09WzAsdF07Zm9yKGk9MCxlPW8udXAubGVuZ3RoO2k8ZTtpKyspbltvLnVwW2ldXT1bMCwtMSp0XX0sX3NldFpvb21EZWx0YTpmdW5jdGlvbih0KXt2YXIgaSxlLG49dGhpcy5fem9vbUtleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihpPTAsZT1vLnpvb21Jbi5sZW5ndGg7aTxlO2krKyluW28uem9vbUluW2ldXT10O2ZvcihpPTAsZT1vLnpvb21PdXQubGVuZ3RoO2k8ZTtpKyspbltvLnpvb21PdXRbaV1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXttdChkb2N1bWVudCwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfcmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtmdChkb2N1bWVudCwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpe2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIGksZT10LmtleUNvZGUsbj10aGlzLl9tYXA7aWYoZSBpbiB0aGlzLl9wYW5LZXlzKW4uX3BhbkFuaW0mJm4uX3BhbkFuaW0uX2luUHJvZ3Jlc3N8fChpPXRoaXMuX3BhbktleXNbZV0sdC5zaGlmdEtleSYmKGk9dyhpKS5tdWx0aXBseUJ5KDMpKSxuLnBhbkJ5KGkpLG4ub3B0aW9ucy5tYXhCb3VuZHMmJm4ucGFuSW5zaWRlQm91bmRzKG4ub3B0aW9ucy5tYXhCb3VuZHMpKTtlbHNlIGlmKGUgaW4gdGhpcy5fem9vbUtleXMpbi5zZXRab29tKG4uZ2V0Wm9vbSgpKyh0LnNoaWZ0S2V5PzM6MSkqdGhpcy5fem9vbUtleXNbZV0pO2Vsc2V7aWYoMjchPT1lfHwhbi5fcG9wdXB8fCFuLl9wb3B1cC5vcHRpb25zLmNsb3NlT25Fc2NhcGVLZXkpcmV0dXJuO24uY2xvc2VQb3B1cCgpfUx0KHQpfX19KTtiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImtleWJvYXJkIixNbiksYmUubWVyZ2VPcHRpb25zKHtzY3JvbGxXaGVlbFpvb206ITAsd2hlZWxEZWJvdW5jZVRpbWU6NDAsd2hlZWxQeFBlclpvb21MZXZlbDo2MH0pO3ZhciBDbj1FZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7bXQodGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtmdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKX0sX29uV2hlZWxTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGk9VHQodCksbj10aGlzLl9tYXAub3B0aW9ucy53aGVlbERlYm91bmNlVGltZTt0aGlzLl9kZWx0YSs9aSx0aGlzLl9sYXN0TW91c2VQb3M9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUpO3ZhciBvPU1hdGgubWF4KG4tKCtuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUpLDApO2NsZWFyVGltZW91dCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9c2V0VGltZW91dChlKHRoaXMuX3BlcmZvcm1ab29tLHRoaXMpLG8pLEx0KHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT10LmdldFpvb20oKSxlPXRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwfHwwO3QuX3N0b3AoKTt2YXIgbj10aGlzLl9kZWx0YS8oNCp0aGlzLl9tYXAub3B0aW9ucy53aGVlbFB4UGVyWm9vbUxldmVsKSxvPTQqTWF0aC5sb2coMi8oMStNYXRoLmV4cCgtTWF0aC5hYnMobikpKSkvTWF0aC5MTjIscz1lP01hdGguY2VpbChvL2UpKmU6byxyPXQuX2xpbWl0Wm9vbShpKyh0aGlzLl9kZWx0YT4wP3M6LXMpKS1pO3RoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsciYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStyKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrcikpfX0pO2JlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixDbiksYmUubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSk7dmFyIFNuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXttdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2Z0KHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzKXtpZihQdCh0KSx0aGlzLl9maXJlQ2xpY2s9ITAsdC50b3VjaGVzLmxlbmd0aD4xKXJldHVybiB0aGlzLl9maXJlQ2xpY2s9ITEsdm9pZCBjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO3ZhciBpPXQudG91Y2hlc1swXSxuPWkudGFyZ2V0O3RoaXMuX3N0YXJ0UG9zPXRoaXMuX25ld1Bvcz1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKSxuLnRhZ05hbWUmJiJhIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZRKG4sImxlYWZsZXQtYWN0aXZlIiksdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChlKGZ1bmN0aW9uKCl7dGhpcy5faXNUYXBWYWxpZCgpJiYodGhpcy5fZmlyZUNsaWNrPSExLHRoaXMuX29uVXAoKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJjb250ZXh0bWVudSIsaSkpfSx0aGlzKSwxZTMpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNlZG93biIsaSksbXQoZG9jdW1lbnQse3RvdWNobW92ZTp0aGlzLl9vbk1vdmUsdG91Y2hlbmQ6dGhpcy5fb25VcH0sdGhpcyl9fSxfb25VcDpmdW5jdGlvbih0KXtpZihjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpLGZ0KGRvY3VtZW50LHt0b3VjaG1vdmU6dGhpcy5fb25Nb3ZlLHRvdWNoZW5kOnRoaXMuX29uVXB9LHRoaXMpLHRoaXMuX2ZpcmVDbGljayYmdCYmdC5jaGFuZ2VkVG91Y2hlcyl7dmFyIGk9dC5jaGFuZ2VkVG91Y2hlc1swXSxlPWkudGFyZ2V0O2UmJmUudGFnTmFtZSYmImEiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJnR0KGUsImxlYWZsZXQtYWN0aXZlIiksdGhpcy5fc2ltdWxhdGVFdmVudCgibW91c2V1cCIsaSksdGhpcy5faXNUYXBWYWxpZCgpJiZ0aGlzLl9zaW11bGF0ZUV2ZW50KCJjbGljayIsaSl9fSxfaXNUYXBWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyk8PXRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgaT10LnRvdWNoZXNbMF07dGhpcy5fbmV3UG9zPW5ldyB4KGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNlbW92ZSIsaSl9LF9zaW11bGF0ZUV2ZW50OmZ1bmN0aW9uKHQsaSl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIik7ZS5fc2ltdWxhdGVkPSEwLGkudGFyZ2V0Ll9zaW11bGF0ZWRDbGljaz0hMCxlLmluaXRNb3VzZUV2ZW50KHQsITAsITAsd2luZG93LDEsaS5zY3JlZW5YLGkuc2NyZWVuWSxpLmNsaWVudFgsaS5jbGllbnRZLCExLCExLCExLCExLDAsbnVsbCksaS50YXJnZXQuZGlzcGF0Y2hFdmVudChlKX19KTtxaSYmIVZpJiZiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRhcCIsU24pLGJlLm1lcmdlT3B0aW9ucyh7dG91Y2hab29tOnFpJiYhTWksYm91bmNlQXRab29tTGltaXRzOiEwfSk7dmFyIFpuPUVlLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtRKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxtdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3R0KHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxmdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxfb25Ub3VjaFN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcDtpZih0LnRvdWNoZXMmJjI9PT10LnRvdWNoZXMubGVuZ3RoJiYhaS5fYW5pbWF0aW5nWm9vbSYmIXRoaXMuX3pvb21pbmcpe3ZhciBlPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKTt0aGlzLl9jZW50ZXJQb2ludD1pLmdldFNpemUoKS5fZGl2aWRlQnkoMiksdGhpcy5fc3RhcnRMYXRMbmc9aS5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX2NlbnRlclBvaW50KSwiY2VudGVyIiE9PWkub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPWkuY29udGFpbmVyUG9pbnRUb0xhdExuZyhlLmFkZChuKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9ZS5kaXN0YW5jZVRvKG4pLHRoaXMuX3N0YXJ0Wm9vbT1pLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLGkuX3N0b3AoKSxtdChkb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSx0aGlzKSxtdChkb2N1bWVudCwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQsdGhpcyksUHQodCl9fSxfb25Ub3VjaE1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmdGhpcy5fem9vbWluZyl7dmFyIGk9dGhpcy5fbWFwLG49aS5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0LnRvdWNoZXNbMF0pLG89aS5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0LnRvdWNoZXNbMV0pLHM9bi5kaXN0YW5jZVRvKG8pL3RoaXMuX3N0YXJ0RGlzdDtpZih0aGlzLl96b29tPWkuZ2V0U2NhbGVab29tKHMsdGhpcy5fc3RhcnRab29tKSwhaS5vcHRpb25zLmJvdW5jZUF0Wm9vbUxpbWl0cyYmKHRoaXMuX3pvb208aS5nZXRNaW5ab29tKCkmJnM8MXx8dGhpcy5fem9vbT5pLmdldE1heFpvb20oKSYmcz4xKSYmKHRoaXMuX3pvb209aS5fbGltaXRab29tKHRoaXMuX3pvb20pKSwiY2VudGVyIj09PWkub3B0aW9ucy50b3VjaFpvb20pe2lmKHRoaXMuX2NlbnRlcj10aGlzLl9zdGFydExhdExuZywxPT09cylyZXR1cm59ZWxzZXt2YXIgcj1uLl9hZGQobykuX2RpdmlkZUJ5KDIpLl9zdWJ0cmFjdCh0aGlzLl9jZW50ZXJQb2ludCk7aWYoMT09PXMmJjA9PT1yLngmJjA9PT1yLnkpcmV0dXJuO3RoaXMuX2NlbnRlcj1pLnVucHJvamVjdChpLnByb2plY3QodGhpcy5fcGluY2hTdGFydExhdExuZyx0aGlzLl96b29tKS5zdWJ0cmFjdChyKSx0aGlzLl96b29tKX10aGlzLl9tb3ZlZHx8KGkuX21vdmVTdGFydCghMCwhMSksdGhpcy5fbW92ZWQ9ITApLGcodGhpcy5fYW5pbVJlcXVlc3QpO3ZhciBhPWUoaS5fbW92ZSxpLHRoaXMuX2NlbnRlcix0aGlzLl96b29tLHtwaW5jaDohMCxyb3VuZDohMX0pO3RoaXMuX2FuaW1SZXF1ZXN0PWYoYSx0aGlzLCEwKSxQdCh0KX19LF9vblRvdWNoRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJnRoaXMuX3pvb21pbmc/KHRoaXMuX3pvb21pbmc9ITEsZyh0aGlzLl9hbmltUmVxdWVzdCksZnQoZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUpLGZ0KGRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCksdGhpcy5fbWFwLm9wdGlvbnMuem9vbUFuaW1hdGlvbj90aGlzLl9tYXAuX2FuaW1hdGVab29tKHRoaXMuX2NlbnRlcix0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwhMCx0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCk6dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pKSk6dGhpcy5fem9vbWluZz0hMX19KTtiZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRvdWNoWm9vbSIsWm4pLGJlLkJveFpvb209Ym4sYmUuRG91YmxlQ2xpY2tab29tPVRuLGJlLkRyYWc9em4sYmUuS2V5Ym9hcmQ9TW4sYmUuU2Nyb2xsV2hlZWxab29tPUNuLGJlLlRhcD1TbixiZS5Ub3VjaFpvb209Wm4sT2JqZWN0LmZyZWV6ZT10aSx0LnZlcnNpb249IjEuNC4wIix0LkNvbnRyb2w9VGUsdC5jb250cm9sPXplLHQuQnJvd3Nlcj1RaSx0LkV2ZW50ZWQ9Y2ksdC5NaXhpbj1CZSx0LlV0aWw9dWksdC5DbGFzcz12LHQuSGFuZGxlcj1FZSx0LmV4dGVuZD1pLHQuYmluZD1lLHQuc3RhbXA9bix0LnNldE9wdGlvbnM9bCx0LkRvbUV2ZW50PVBlLHQuRG9tVXRpbD12ZSx0LlBvc0FuaW1hdGlvbj1MZSx0LkRyYWdnYWJsZT1SZSx0LkxpbmVVdGlsPU5lLHQuUG9seVV0aWw9RGUsdC5Qb2ludD14LHQucG9pbnQ9dyx0LkJvdW5kcz1QLHQuYm91bmRzPWIsdC5UcmFuc2Zvcm1hdGlvbj1TLHQudHJhbnNmb3JtYXRpb249Wix0LlByb2plY3Rpb249SGUsdC5MYXRMbmc9TSx0LmxhdExuZz1DLHQuTGF0TG5nQm91bmRzPVQsdC5sYXRMbmdCb3VuZHM9eix0LkNSUz1kaSx0Lkdlb0pTT049c24sdC5nZW9KU09OPVh0LHQuZ2VvSnNvbj1hbix0LkxheWVyPXFlLHQuTGF5ZXJHcm91cD1HZSx0LmxheWVyR3JvdXA9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IEdlKHQsaSl9LHQuRmVhdHVyZUdyb3VwPUtlLHQuZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS2UodCl9LHQuSW1hZ2VPdmVybGF5PWhuLHQuaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbmV3IGhuKHQsaSxlKX0sdC5WaWRlb092ZXJsYXk9dW4sdC52aWRlb092ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgdW4odCxpLGUpfSx0LkRpdk92ZXJsYXk9bG4sdC5Qb3B1cD1jbix0LnBvcHVwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBjbih0LGkpfSx0LlRvb2x0aXA9X24sdC50b29sdGlwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBfbih0LGkpfSx0Lkljb249WWUsdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWWUodCl9LHQuRGl2SWNvbj1kbix0LmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkbih0KX0sdC5NYXJrZXI9JGUsdC5tYXJrZXI9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3ICRlKHQsaSl9LHQuVGlsZUxheWVyPW1uLHQudGlsZUxheWVyPUp0LHQuR3JpZExheWVyPXBuLHQuZ3JpZExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcG4odCl9LHQuU1ZHPVBuLHQuc3ZnPVF0LHQuUmVuZGVyZXI9Z24sdC5DYW52YXM9dm4sdC5jYW52YXM9JHQsdC5QYXRoPVFlLHQuQ2lyY2xlTWFya2VyPXRuLHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB0bih0LGkpfSx0LkNpcmNsZT1lbix0LmNpcmNsZT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBlbih0LGksZSl9LHQuUG9seWxpbmU9bm4sdC5wb2x5bGluZT1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgbm4odCxpKX0sdC5Qb2x5Z29uPW9uLHQucG9seWdvbj1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgb24odCxpKX0sdC5SZWN0YW5nbGU9TG4sdC5yZWN0YW5nbGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IExuKHQsaSl9LHQuTWFwPWJlLHQubWFwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBiZSh0LGkpfTt2YXIgRW49d2luZG93Lkw7dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5MPUVuLHRoaXN9LHdpbmRvdy5MPXR9KTsK</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/Core.OpenStreetMap.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgouT3BlblN0cmVldE1hcFdpbmRvdyB7CiAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1ZjU7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDBweCAjZTllOWU5OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICBtYXJnaW4tdG9wOiAxNnB4Owp9CgouT3BlblN0cmVldE1hcFdpbmRvdyA+IC5Db250ZW50IHsKICAgIHBhZGRpbmc6IDhweCA4cHggMTBweCAxMHB4OwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwJTsKfQoKfQo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/thirdparty/leaflet-1.4.0/leaflet.css" Permission="660" Encode="Base64">LyogcmVxdWlyZWQgc3R5bGVzICovCgoubGVhZmxldC1wYW5lLAoubGVhZmxldC10aWxlLAoubGVhZmxldC1tYXJrZXItaWNvbiwKLmxlYWZsZXQtbWFya2VyLXNoYWRvdywKLmxlYWZsZXQtdGlsZS1jb250YWluZXIsCi5sZWFmbGV0LXBhbmUgPiBzdmcsCi5sZWFmbGV0LXBhbmUgPiBjYW52YXMsCi5sZWFmbGV0LXpvb20tYm94LAoubGVhZmxldC1pbWFnZS1sYXllciwKLmxlYWZsZXQtbGF5ZXIgewoJcG9zaXRpb246IGFic29sdXRlOwoJbGVmdDogMDsKCXRvcDogMDsKCX0KLmxlYWZsZXQtY29udGFpbmVyIHsKCW92ZXJmbG93OiBoaWRkZW47Cgl9Ci5sZWFmbGV0LXRpbGUsCi5sZWFmbGV0LW1hcmtlci1pY29uLAoubGVhZmxldC1tYXJrZXItc2hhZG93IHsKCS13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CgkgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwoJICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCSAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7Cgl9Ci8qIFNhZmFyaSByZW5kZXJzIG5vbi1yZXRpbmEgdGlsZSBvbiByZXRpbmEgYmV0dGVyIHdpdGggdGhpcywgYnV0IENocm9tZSBpcyB3b3JzZSAqLwoubGVhZmxldC1zYWZhcmkgLmxlYWZsZXQtdGlsZSB7CglpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7Cgl9Ci8qIGhhY2sgdGhhdCBwcmV2ZW50cyBodyBsYXllcnMgInN0cmV0Y2hpbmciIHdoZW4gbG9hZGluZyBuZXcgdGlsZXMgKi8KLmxlYWZsZXQtc2FmYXJpIC5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHsKCXdpZHRoOiAxNjAwcHg7CgloZWlnaHQ6IDE2MDBweDsKCS13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwoJfQoubGVhZmxldC1tYXJrZXItaWNvbiwKLmxlYWZsZXQtbWFya2VyLXNoYWRvdyB7CglkaXNwbGF5OiBibG9jazsKCX0KLyogLmxlYWZsZXQtY29udGFpbmVyIHN2ZzogcmVzZXQgc3ZnIG1heC13aWR0aCBkZWNsZXJhdGlvbiBzaGlwcGVkIGluIEpvb21sYSEgKGpvb21sYS5vcmcpIDMueCAqLwovKiAubGVhZmxldC1jb250YWluZXIgaW1nOiBtYXAgaXMgYnJva2VuIGluIEZGIGlmIHlvdSBoYXZlIG1heC13aWR0aDogMTAwJSBvbiB0aWxlcyAqLwoubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtb3ZlcmxheS1wYW5lIHN2ZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LW1hcmtlci1wYW5lIGltZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXNoYWRvdy1wYW5lIGltZywKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUtcGFuZSBpbWcsCi5sZWFmbGV0LWNvbnRhaW5lciBpbWcubGVhZmxldC1pbWFnZS1sYXllciwKLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUgewoJbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CgltYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7Cgl9CgoubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC16b29tIHsKCS1tcy10b3VjaC1hY3Rpb246IHBhbi14IHBhbi15OwoJdG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTsKCX0KLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZyB7CgktbXMtdG91Y2gtYWN0aW9uOiBwaW5jaC16b29tOwoJLyogRmFsbGJhY2sgZm9yIEZGIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBwaW5jaC16b29tICovCgl0b3VjaC1hY3Rpb246IG5vbmU7Cgl0b3VjaC1hY3Rpb246IHBpbmNoLXpvb207Cn0KLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZy5sZWFmbGV0LXRvdWNoLXpvb20gewoJLW1zLXRvdWNoLWFjdGlvbjogbm9uZTsKCXRvdWNoLWFjdGlvbjogbm9uZTsKfQoubGVhZmxldC1jb250YWluZXIgewoJLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKfQoubGVhZmxldC1jb250YWluZXIgYSB7Cgktd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoNTEsIDE4MSwgMjI5LCAwLjQpOwp9Ci5sZWFmbGV0LXRpbGUgewoJZmlsdGVyOiBpbmhlcml0OwoJdmlzaWJpbGl0eTogaGlkZGVuOwoJfQoubGVhZmxldC10aWxlLWxvYWRlZCB7Cgl2aXNpYmlsaXR5OiBpbmhlcml0OwoJfQoubGVhZmxldC16b29tLWJveCB7Cgl3aWR0aDogMDsKCWhlaWdodDogMDsKCS1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKCSAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCXotaW5kZXg6IDgwMDsKCX0KLyogd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg4MzE5ICovCi5sZWFmbGV0LW92ZXJsYXktcGFuZSBzdmcgewoJLW1vei11c2VyLXNlbGVjdDogbm9uZTsKCX0KCi5sZWFmbGV0LXBhbmUgICAgICAgICB7IHotaW5kZXg6IDQwMDsgfQoKLmxlYWZsZXQtdGlsZS1wYW5lICAgIHsgei1pbmRleDogMjAwOyB9Ci5sZWFmbGV0LW92ZXJsYXktcGFuZSB7IHotaW5kZXg6IDQwMDsgfQoubGVhZmxldC1zaGFkb3ctcGFuZSAgeyB6LWluZGV4OiA1MDA7IH0KLmxlYWZsZXQtbWFya2VyLXBhbmUgIHsgei1pbmRleDogNjAwOyB9Ci5sZWFmbGV0LXRvb2x0aXAtcGFuZSAgIHsgei1pbmRleDogNjUwOyB9Ci5sZWFmbGV0LXBvcHVwLXBhbmUgICB7IHotaW5kZXg6IDcwMDsgfQoKLmxlYWZsZXQtbWFwLXBhbmUgY2FudmFzIHsgei1pbmRleDogMTAwOyB9Ci5sZWFmbGV0LW1hcC1wYW5lIHN2ZyAgICB7IHotaW5kZXg6IDIwMDsgfQoKLmxlYWZsZXQtdm1sLXNoYXBlIHsKCXdpZHRoOiAxcHg7CgloZWlnaHQ6IDFweDsKCX0KLmx2bWwgewoJYmVoYXZpb3I6IHVybCgjZGVmYXVsdCNWTUwpOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJcG9zaXRpb246IGFic29sdXRlOwoJfQoKCi8qIGNvbnRyb2wgcG9zaXRpb25pbmcgKi8KCi5sZWFmbGV0LWNvbnRyb2wgewoJcG9zaXRpb246IHJlbGF0aXZlOwoJei1pbmRleDogODAwOwoJcG9pbnRlci1ldmVudHM6IHZpc2libGVQYWludGVkOyAvKiBJRSA5LTEwIGRvZXNuJ3QgaGF2ZSBhdXRvICovCglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KLmxlYWZsZXQtdG9wLAoubGVhZmxldC1ib3R0b20gewoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDogMTAwMDsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJfQoubGVhZmxldC10b3AgewoJdG9wOiAwOwoJfQoubGVhZmxldC1yaWdodCB7CglyaWdodDogMDsKCX0KLmxlYWZsZXQtYm90dG9tIHsKCWJvdHRvbTogMDsKCX0KLmxlYWZsZXQtbGVmdCB7CglsZWZ0OiAwOwoJfQoubGVhZmxldC1jb250cm9sIHsKCWZsb2F0OiBsZWZ0OwoJY2xlYXI6IGJvdGg7Cgl9Ci5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wgewoJZmxvYXQ6IHJpZ2h0OwoJfQoubGVhZmxldC10b3AgLmxlYWZsZXQtY29udHJvbCB7CgltYXJnaW4tdG9wOiAxMHB4OwoJfQoubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbCB7CgltYXJnaW4tYm90dG9tOiAxMHB4OwoJfQoubGVhZmxldC1sZWZ0IC5sZWFmbGV0LWNvbnRyb2wgewoJbWFyZ2luLWxlZnQ6IDEwcHg7Cgl9Ci5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wgewoJbWFyZ2luLXJpZ2h0OiAxMHB4OwoJfQoKCi8qIHpvb20gYW5kIGZhZGUgYW5pbWF0aW9ucyAqLwoKLmxlYWZsZXQtZmFkZS1hbmltIC5sZWFmbGV0LXRpbGUgewoJd2lsbC1jaGFuZ2U6IG9wYWNpdHk7Cgl9Ci5sZWFmbGV0LWZhZGUtYW5pbSAubGVhZmxldC1wb3B1cCB7CglvcGFjaXR5OiAwOwoJLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyOwoJfQoubGVhZmxldC1mYWRlLWFuaW0gLmxlYWZsZXQtbWFwLXBhbmUgLmxlYWZsZXQtcG9wdXAgewoJb3BhY2l0eTogMTsKCX0KLmxlYWZsZXQtem9vbS1hbmltYXRlZCB7Cgktd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKCSAgICAtbXMtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwoJICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Cgl9Ci5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHsKCXdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07Cgl9Ci5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHsKCS13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwwLjI1LDEpOwoJICAgLW1vei10cmFuc2l0aW9uOiAgICAtbW96LXRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7CgkgICAgICAgIHRyYW5zaXRpb246ICAgICAgICAgdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTsKCX0KLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXRpbGUsCi5sZWFmbGV0LXBhbi1hbmltIC5sZWFmbGV0LXRpbGUgewoJLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwoJICAgLW1vei10cmFuc2l0aW9uOiBub25lOwoJICAgICAgICB0cmFuc2l0aW9uOiBub25lOwoJfQoKLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXpvb20taGlkZSB7Cgl2aXNpYmlsaXR5OiBoaWRkZW47Cgl9CgoKLyogY3Vyc29ycyAqLwoKLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJY3Vyc29yOiBwb2ludGVyOwoJfQoubGVhZmxldC1ncmFiIHsKCWN1cnNvcjogLXdlYmtpdC1ncmFiOwoJY3Vyc29yOiAgICAtbW96LWdyYWI7CgljdXJzb3I6ICAgICAgICAgZ3JhYjsKCX0KLmxlYWZsZXQtY3Jvc3NoYWlyLAoubGVhZmxldC1jcm9zc2hhaXIgLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJY3Vyc29yOiBjcm9zc2hhaXI7Cgl9Ci5sZWFmbGV0LXBvcHVwLXBhbmUsCi5sZWFmbGV0LWNvbnRyb2wgewoJY3Vyc29yOiBhdXRvOwoJfQoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiLAoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiIC5sZWFmbGV0LWludGVyYWN0aXZlLAoubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIHsKCWN1cnNvcjogbW92ZTsKCWN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKCWN1cnNvcjogICAgLW1vei1ncmFiYmluZzsKCWN1cnNvcjogICAgICAgICBncmFiYmluZzsKCX0KCi8qIG1hcmtlciAmIG92ZXJsYXlzIGludGVyYWN0aXZpdHkgKi8KLmxlYWZsZXQtbWFya2VyLWljb24sCi5sZWFmbGV0LW1hcmtlci1zaGFkb3csCi5sZWFmbGV0LWltYWdlLWxheWVyLAoubGVhZmxldC1wYW5lID4gc3ZnIHBhdGgsCi5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJfQoKLmxlYWZsZXQtbWFya2VyLWljb24ubGVhZmxldC1pbnRlcmFjdGl2ZSwKLmxlYWZsZXQtaW1hZ2UtbGF5ZXIubGVhZmxldC1pbnRlcmFjdGl2ZSwKLmxlYWZsZXQtcGFuZSA+IHN2ZyBwYXRoLmxlYWZsZXQtaW50ZXJhY3RpdmUgewoJcG9pbnRlci1ldmVudHM6IHZpc2libGVQYWludGVkOyAvKiBJRSA5LTEwIGRvZXNuJ3QgaGF2ZSBhdXRvICovCglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KCi8qIHZpc3VhbCB0d2Vha3MgKi8KCi5sZWFmbGV0LWNvbnRhaW5lciB7CgliYWNrZ3JvdW5kOiAjZGRkOwoJb3V0bGluZTogMDsKCX0KLmxlYWZsZXQtY29udGFpbmVyIGEgewoJY29sb3I6ICMwMDc4QTg7Cgl9Ci5sZWFmbGV0LWNvbnRhaW5lciBhLmxlYWZsZXQtYWN0aXZlIHsKCW91dGxpbmU6IDJweCBzb2xpZCBvcmFuZ2U7Cgl9Ci5sZWFmbGV0LXpvb20tYm94IHsKCWJvcmRlcjogMnB4IGRvdHRlZCAjMzhmOwoJYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjUpOwoJfQoKCi8qIGdlbmVyYWwgdHlwb2dyYXBoeSAqLwoubGVhZmxldC1jb250YWluZXIgewoJZm9udDogMTJweC8xLjUgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKCX0KCgovKiBnZW5lcmFsIHRvb2xiYXIgc3R5bGVzICovCgoubGVhZmxldC1iYXIgewoJYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC42NSk7Cglib3JkZXItcmFkaXVzOiA0cHg7Cgl9Ci5sZWFmbGV0LWJhciBhLAoubGVhZmxldC1iYXIgYTpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7Cgl3aWR0aDogMjZweDsKCWhlaWdodDogMjZweDsKCWxpbmUtaGVpZ2h0OiAyNnB4OwoJZGlzcGxheTogYmxvY2s7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cgljb2xvcjogYmxhY2s7Cgl9Ci5sZWFmbGV0LWJhciBhLAoubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CglkaXNwbGF5OiBibG9jazsKCX0KLmxlYWZsZXQtYmFyIGE6aG92ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDsKCX0KLmxlYWZsZXQtYmFyIGE6Zmlyc3QtY2hpbGQgewoJYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OwoJYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKCX0KLmxlYWZsZXQtYmFyIGE6bGFzdC1jaGlsZCB7Cglib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7Cglib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OwoJYm9yZGVyLWJvdHRvbTogbm9uZTsKCX0KLmxlYWZsZXQtYmFyIGEubGVhZmxldC1kaXNhYmxlZCB7CgljdXJzb3I6IGRlZmF1bHQ7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwoJY29sb3I6ICNiYmI7Cgl9CgoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYSB7Cgl3aWR0aDogMzBweDsKCWhlaWdodDogMzBweDsKCWxpbmUtaGVpZ2h0OiAzMHB4OwoJfQoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpmaXJzdC1jaGlsZCB7Cglib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7Cglib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwoJfQoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpsYXN0LWNoaWxkIHsKCWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDsKCWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7Cgl9CgovKiB6b29tIGNvbnRyb2wgKi8KCi5sZWFmbGV0LWNvbnRyb2wtem9vbS1pbiwKLmxlYWZsZXQtY29udHJvbC16b29tLW91dCB7Cglmb250OiBib2xkIDE4cHggJ0x1Y2lkYSBDb25zb2xlJywgTW9uYWNvLCBtb25vc3BhY2U7Cgl0ZXh0LWluZGVudDogMXB4OwoJfQoKLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC16b29tLWluLCAubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLXpvb20tb3V0ICB7Cglmb250LXNpemU6IDIycHg7Cgl9CgoKLyogbGF5ZXJzIGNvbnRyb2wgKi8KCi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIHsKCWJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuNCk7CgliYWNrZ3JvdW5kOiAjZmZmOwoJYm9yZGVyLXJhZGl1czogNXB4OwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9sYXllcnMucG5nKTsKCXdpZHRoOiAzNnB4OwoJaGVpZ2h0OiAzNnB4OwoJfQoubGVhZmxldC1yZXRpbmEgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbGF5ZXJzLTJ4LnBuZyk7CgliYWNrZ3JvdW5kLXNpemU6IDI2cHggMjZweDsKCX0KLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHsKCXdpZHRoOiA0NHB4OwoJaGVpZ2h0OiA0NHB4OwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycyAubGVhZmxldC1jb250cm9sLWxheWVycy1saXN0LAoubGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUgewoJZGlzcGxheTogbm9uZTsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtbGlzdCB7CglkaXNwbGF5OiBibG9jazsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgewoJcGFkZGluZzogNnB4IDEwcHggNnB4IDZweDsKCWNvbG9yOiAjMzMzOwoJYmFja2dyb3VuZDogI2ZmZjsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIHsKCW92ZXJmbG93LXk6IHNjcm9sbDsKCW92ZXJmbG93LXg6IGhpZGRlbjsKCXBhZGRpbmctcmlnaHQ6IDVweDsKCX0KLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IgewoJbWFyZ2luLXRvcDogMnB4OwoJcG9zaXRpb246IHJlbGF0aXZlOwoJdG9wOiAxcHg7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIGxhYmVsIHsKCWRpc3BsYXk6IGJsb2NrOwoJfQoubGVhZmxldC1jb250cm9sLWxheWVycy1zZXBhcmF0b3IgewoJaGVpZ2h0OiAwOwoJYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7CgltYXJnaW46IDVweCAtMTBweCA1cHggLTZweDsKCX0KCi8qIERlZmF1bHQgaWNvbiBVUkxzICovCi5sZWFmbGV0LWRlZmF1bHQtaWNvbi1wYXRoIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbWFya2VyLWljb24ucG5nKTsKCX0KCgovKiBhdHRyaWJ1dGlvbiBhbmQgc2NhbGUgY29udHJvbHMgKi8KCi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIHsKCWJhY2tncm91bmQ6ICNmZmY7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CgltYXJnaW46IDA7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sCi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7CglwYWRkaW5nOiAwIDVweDsKCWNvbG9yOiAjMzMzOwoJfQoubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGEgewoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJfQoubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGE6aG92ZXIgewoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cgl9Ci5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLAoubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7Cglmb250LXNpemU6IDExcHg7Cgl9Ci5sZWFmbGV0LWxlZnQgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7CgltYXJnaW4tbGVmdDogNXB4OwoJfQoubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7CgltYXJnaW4tYm90dG9tOiA1cHg7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7Cglib3JkZXI6IDJweCBzb2xpZCAjNzc3OwoJYm9yZGVyLXRvcDogbm9uZTsKCWxpbmUtaGVpZ2h0OiAxLjE7CglwYWRkaW5nOiAycHggNXB4IDFweDsKCWZvbnQtc2l6ZTogMTFweDsKCXdoaXRlLXNwYWNlOiBub3dyYXA7CglvdmVyZmxvdzogaGlkZGVuOwoJLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwoJICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKCWJhY2tncm91bmQ6ICNmZmY7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cgl9Ci5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZTpub3QoOmZpcnN0LWNoaWxkKSB7Cglib3JkZXItdG9wOiAycHggc29saWQgIzc3NzsKCWJvcmRlci1ib3R0b206IG5vbmU7CgltYXJnaW4tdG9wOiAtMnB4OwoJfQoubGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmU6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7Cglib3JkZXItYm90dG9tOiAycHggc29saWQgIzc3NzsKCX0KCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLAoubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgewoJYm94LXNoYWRvdzogbm9uZTsKCX0KLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMsCi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciB7Cglib3JkZXI6IDJweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7CgliYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwoJfQoKCi8qIHBvcHVwICovCgoubGVhZmxldC1wb3B1cCB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CgltYXJnaW4tYm90dG9tOiAyMHB4OwoJfQoubGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXIgewoJcGFkZGluZzogMXB4OwoJdGV4dC1hbGlnbjogbGVmdDsKCWJvcmRlci1yYWRpdXM6IDEycHg7Cgl9Ci5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgewoJbWFyZ2luOiAxM3B4IDE5cHg7CglsaW5lLWhlaWdodDogMS40OwoJfQoubGVhZmxldC1wb3B1cC1jb250ZW50IHAgewoJbWFyZ2luOiAxOHB4IDA7Cgl9Ci5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIgewoJd2lkdGg6IDQwcHg7CgloZWlnaHQ6IDIwcHg7Cglwb3NpdGlvbjogYWJzb2x1dGU7CglsZWZ0OiA1MCU7CgltYXJnaW4tbGVmdDogLTIwcHg7CglvdmVyZmxvdzogaGlkZGVuOwoJcG9pbnRlci1ldmVudHM6IG5vbmU7Cgl9Ci5sZWFmbGV0LXBvcHVwLXRpcCB7Cgl3aWR0aDogMTdweDsKCWhlaWdodDogMTdweDsKCXBhZGRpbmc6IDFweDsKCgltYXJnaW46IC0xMHB4IGF1dG8gMDsKCgktd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKCSAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwoJICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CgkgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKCX0KLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyLAoubGVhZmxldC1wb3B1cC10aXAgewoJYmFja2dyb3VuZDogd2hpdGU7Cgljb2xvcjogIzMzMzsKCWJveC1zaGFkb3c6IDAgM3B4IDE0cHggcmdiYSgwLDAsMCwwLjQpOwoJfQoubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbiB7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IDA7CglyaWdodDogMDsKCXBhZGRpbmc6IDRweCA0cHggMCAwOwoJYm9yZGVyOiBub25lOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJd2lkdGg6IDE4cHg7CgloZWlnaHQ6IDE0cHg7Cglmb250OiAxNnB4LzE0cHggVGFob21hLCBWZXJkYW5hLCBzYW5zLXNlcmlmOwoJY29sb3I6ICNjM2MzYzM7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglmb250LXdlaWdodDogYm9sZDsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwoJfQoubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbjpob3ZlciB7Cgljb2xvcjogIzk5OTsKCX0KLmxlYWZsZXQtcG9wdXAtc2Nyb2xsZWQgewoJb3ZlcmZsb3c6IGF1dG87Cglib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKCWJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwoJfQoKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyIHsKCXpvb206IDE7Cgl9Ci5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcCB7Cgl3aWR0aDogMjRweDsKCW1hcmdpbjogMCBhdXRvOwoKCS1tcy1maWx0ZXI6ICJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCkiOwoJZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCk7Cgl9Ci5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIgewoJbWFyZ2luLXRvcDogLTFweDsKCX0KCi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LWNvbnRyb2wtem9vbSwKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtY29udHJvbC1sYXllcnMsCi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciwKLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwIHsKCWJvcmRlcjogMXB4IHNvbGlkICM5OTk7Cgl9CgoKLyogZGl2IGljb24gKi8KCi5sZWFmbGV0LWRpdi1pY29uIHsKCWJhY2tncm91bmQ6ICNmZmY7Cglib3JkZXI6IDFweCBzb2xpZCAjNjY2OwoJfQoKCi8qIFRvb2x0aXAgKi8KLyogQmFzZSBzdHlsZXMgZm9yIHRoZSBlbGVtZW50IHRoYXQgaGFzIGEgdG9vbHRpcCAqLwoubGVhZmxldC10b29sdGlwIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXBhZGRpbmc6IDZweDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7Cglib3JkZXI6IDFweCBzb2xpZCAjZmZmOwoJYm9yZGVyLXJhZGl1czogM3B4OwoJY29sb3I6ICMyMjI7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwoJLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKCS1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CgktbXMtdXNlci1zZWxlY3Q6IG5vbmU7Cgl1c2VyLXNlbGVjdDogbm9uZTsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40KTsKCX0KLmxlYWZsZXQtdG9vbHRpcC5sZWFmbGV0LWNsaWNrYWJsZSB7CgljdXJzb3I6IHBvaW50ZXI7Cglwb2ludGVyLWV2ZW50czogYXV0bzsKCX0KLmxlYWZsZXQtdG9vbHRpcC10b3A6YmVmb3JlLAoubGVhZmxldC10b29sdGlwLWJvdHRvbTpiZWZvcmUsCi5sZWFmbGV0LXRvb2x0aXAtbGVmdDpiZWZvcmUsCi5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXBvaW50ZXItZXZlbnRzOiBub25lOwoJYm9yZGVyOiA2cHggc29saWQgdHJhbnNwYXJlbnQ7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKCWNvbnRlbnQ6ICIiOwoJfQoKLyogRGlyZWN0aW9ucyAqLwoKLmxlYWZsZXQtdG9vbHRpcC1ib3R0b20gewoJbWFyZ2luLXRvcDogNnB4Owp9Ci5sZWFmbGV0LXRvb2x0aXAtdG9wIHsKCW1hcmdpbi10b3A6IC02cHg7Cn0KLmxlYWZsZXQtdG9vbHRpcC1ib3R0b206YmVmb3JlLAoubGVhZmxldC10b29sdGlwLXRvcDpiZWZvcmUgewoJbGVmdDogNTAlOwoJbWFyZ2luLWxlZnQ6IC02cHg7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtdG9wOmJlZm9yZSB7Cglib3R0b206IDA7CgltYXJnaW4tYm90dG9tOiAtMTJweDsKCWJvcmRlci10b3AtY29sb3I6ICNmZmY7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtYm90dG9tOmJlZm9yZSB7Cgl0b3A6IDA7CgltYXJnaW4tdG9wOiAtMTJweDsKCW1hcmdpbi1sZWZ0OiAtNnB4OwoJYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKCX0KLmxlYWZsZXQtdG9vbHRpcC1sZWZ0IHsKCW1hcmdpbi1sZWZ0OiAtNnB4Owp9Ci5sZWFmbGV0LXRvb2x0aXAtcmlnaHQgewoJbWFyZ2luLWxlZnQ6IDZweDsKfQoubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlLAoubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7Cgl0b3A6IDUwJTsKCW1hcmdpbi10b3A6IC02cHg7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtbGVmdDpiZWZvcmUgewoJcmlnaHQ6IDA7CgltYXJnaW4tcmlnaHQ6IC0xMnB4OwoJYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7Cgl9Ci5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHsKCWxlZnQ6IDA7CgltYXJnaW4tbGVmdDogLTEycHg7Cglib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7Cgl9Cgo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/thirdparty/nvd3-1.7.1/nv.d3.css" Permission="660" Encode="Base64">LyoqKioqKioqKioqKioqKioqKioqCiAqIFNWRyBDU1MKICovCgoKc3ZnIHsKICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgLyogVHJ5aW5nIHRvIGdldCBTVkcgdG8gYWN0IGxpa2UgYSBncmVlZHkgYmxvY2sgaW4gYWxsIGJyb3dzZXJzICovCiAgZGlzcGxheTogYmxvY2s7Ci8qIFJvdGhlciBPU1MgLyBPcGVuU3RyZWV0TWFwCiAgd2lkdGg6MTAwJTsKICBoZWlnaHQ6MTAwJTsKRU8gUm90aGVyICovCn0KCi8qKioqKioqKioqKioqKioqKioqKgogIERlZmF1bHQgQ1NTIGZvciBhbiBzdmcgZWxlbWVudCBudmQzIHVzZWQKKi8Kc3ZnLm52ZDMtc3ZnIHsKICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBkaXNwbGF5OiBibG9jazsKLyogUm90aGVyIE9TUyAvIE9wZW5TdHJlZXRNYXAgKi8KICAgIHdpZHRoOjEwMCU7CiAgICBoZWlnaHQ6MTAwJTsKLyogRU8gUm90aGVyICovCn0KCi8qKioqKioqKioqKioqKioqKioqKgogIEJveCBzaGFkb3cgYW5kIGJvcmRlciByYWRpdXMgc3R5bGluZwoqLwoubnZ0b29sdGlwLndpdGgtM2Qtc2hhZG93LCAud2l0aC0zZC1zaGFkb3cgLm52dG9vbHRpcCB7CiAgLW1vei1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwoKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KCi8qKioqKioqKioqKioqKioqKioqKgogKiBUT09MVElQIENTUwogKi8KCi5udnRvb2x0aXAgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDEuMCk7CiAgcGFkZGluZzogMXB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjIpOwogIHotaW5kZXg6IDEwMDAwOwoKICBmb250LWZhbWlseTogQXJpYWw7CiAgZm9udC1zaXplOiAxM3B4OwogIHRleHQtYWxpZ246IGxlZnQ7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogIHdoaXRlLXNwYWNlOiBub3dyYXA7CgogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLypHaXZlIHRvb2x0aXBzIHRoYXQgb2xkIGZhZGUgaW4gdHJhbnNpdGlvbiBieQogICAgcHV0dGluZyBhICJ3aXRoLXRyYW5zaXRpb25zIiBjbGFzcyBvbiB0aGUgY29udGFpbmVyIGRpdi4KKi8KLm52dG9vbHRpcC53aXRoLXRyYW5zaXRpb25zLCAud2l0aC10cmFuc2l0aW9ucyAubnZ0b29sdGlwIHsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSA1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgNTBtcyBsaW5lYXI7CgogIHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zOwogIC1tb3otdHJhbnNpdGlvbi1kZWxheTogMjAwbXM7CiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiAyMDBtczsKfQoKLm52dG9vbHRpcC54LW52dG9vbHRpcCwKLm52dG9vbHRpcC55LW52dG9vbHRpcCB7CiAgcGFkZGluZzogOHB4Owp9CgoubnZ0b29sdGlwIGgzIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNHB4IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0NywyNDcsMjQ3LDAuNzUpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7CgogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDsKICBib3JkZXItcmFkaXVzOiAxcHggNXB4IDAgMDsKfQoKLm52dG9vbHRpcCBwIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogNXB4IDE0cHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubnZ0b29sdGlwIHNwYW4gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBtYXJnaW46IDJweCAwOwp9CgoubnZ0b29sdGlwIHRhYmxlIHsKICBtYXJnaW46IDZweDsKICBib3JkZXItc3BhY2luZzowOwp9CgoKLm52dG9vbHRpcCB0YWJsZSB0ZCB7CiAgcGFkZGluZzogMnB4IDlweCAycHggMDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoubnZ0b29sdGlwIHRhYmxlIHRkLmtleSB7CiAgZm9udC13ZWlnaHQ6bm9ybWFsOwp9Ci5udnRvb2x0aXAgdGFibGUgdGQudmFsdWUgewogIHRleHQtYWxpZ246IHJpZ2h0OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoubnZ0b29sdGlwIHRhYmxlIHRyLmhpZ2hsaWdodCB0ZCB7CiAgcGFkZGluZzogMXB4IDlweCAxcHggMDsKICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDsKICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7CiAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7CiAgYm9yZGVyLXRvcC13aWR0aDogMXB4Owp9CgoubnZ0b29sdGlwIHRhYmxlIHRkLmxlZ2VuZC1jb2xvci1ndWlkZSBkaXYgewogIHdpZHRoOiA4cHg7CiAgaGVpZ2h0OiA4cHg7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLm52dG9vbHRpcCAuZm9vdGVyIHsKICBwYWRkaW5nOiAzcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubnZ0b29sdGlwLXBlbmRpbmctcmVtb3ZhbCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubnZkMyB0ZXh0IHsKICBmb250OiBub3JtYWwgMTJweCBBcmlhbDsKfQoKLm52ZDMgLnRpdGxlIHsKIGZvbnQ6IGJvbGQgMTRweCBBcmlhbDsKfQoKLm52ZDMgLm52LWJhY2tncm91bmQgewogIGZpbGw6IHdoaXRlOwogIGZpbGwtb3BhY2l0eTogMDsKfQoKLm52ZDMubnYtbm9EYXRhIHsKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCgovKioqKioqKioqKgoqICBCcnVzaAoqLwoKLm52LWJydXNoIC5leHRlbnQgewogIGZpbGwtb3BhY2l0eTogLjEyNTsKICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cn0KCgovKioqKioqKioqKgoqICBMZWdlbmQKKi8KCi5udmQzIC5udi1sZWdlbmQgLm52LXNlcmllcyB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgoubnZkMyAubnYtbGVnZW5kIC5udi1kaXNhYmxlZCBjaXJjbGUgewogIGZpbGwtb3BhY2l0eTogMDsKfQoKCi8qKioqKioqKioqCiogIEF4ZXMKKi8KCi5heGlzIHsKICBvcGFjaXR5OiAxOwp9CgouYXhpcy5udi1kaXNhYmxlZCB7CiAgb3BhY2l0eTogMDsKfQoKLm52ZDMgLm52LWF4aXMgewogIHBvaW50ZXItZXZlbnRzOm5vbmU7Cn0KCi5udmQzIC5udi1heGlzIHBhdGggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjMDAwOwogIHN0cm9rZS1vcGFjaXR5OiAuNzU7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAubnYtYXhpcyBwYXRoLmRvbWFpbiB7CiAgc3Ryb2tlLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMgLm52LWF4aXMubnYteCBwYXRoLmRvbWFpbiB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7Cn0KCi5udmQzIC5udi1heGlzIGxpbmUgewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjZTVlNWU1OwogIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKfQoKLm52ZDMgLm52LWF4aXMgLnplcm8gbGluZSwKLyp0aGlzIHNlbGVjdG9yIG1heSBub3QgYmUgbmVjZXNzYXJ5Ki8gLm52ZDMgLm52LWF4aXMgbGluZS56ZXJvIHsKICBzdHJva2Utb3BhY2l0eTogLjc1Owp9CgoubnZkMyAubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0IHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm52ZDMgLnggIC5udi1heGlzIC5udi1heGlzTWF4TWluIHRleHQsCi5udmQzIC54MiAubnYtYXhpcyAubnYtYXhpc01heE1pbiB0ZXh0LAoubnZkMyAueDMgLm52LWF4aXMgLm52LWF4aXNNYXhNaW4gdGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZQp9CgoKLyoqKioqKioqKioKKiAgQnJ1c2gKKi8KCi5udi1icnVzaCAucmVzaXplIHBhdGggewogIGZpbGw6ICNlZWU7CiAgc3Ryb2tlOiAjNjY2Owp9CgoKLyoqKioqKioqKioKKiAgQmFycwoqLwoKLm52ZDMgLm52LWJhcnMgLm5lZ2F0aXZlIHJlY3QgewogICAgemZpbGw6IGJyb3duOwp9CgoubnZkMyAubnYtYmFycyByZWN0IHsKICB6ZmlsbDogc3RlZWxibHVlOwogIGZpbGwtb3BhY2l0eTogLjc1OwoKICB0cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKICAtd2Via2l0LXRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7Cn0KCi5udmQzIC5udi1iYXJzIHJlY3QuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHJlY3QgewogIGZpbGw6IGxpZ2h0Ymx1ZTsKfQoKLm52ZDMgLm52LWJhcnMgdGV4dCB7CiAgZmlsbDogcmdiYSgwLDAsMCwwKTsKfQoKLm52ZDMgLm52LWJhcnMgLmhvdmVyIHRleHQgewogIGZpbGw6IHJnYmEoMCwwLDAsMSk7Cn0KCgovKioqKioqKioqKgoqICBCYXJzCiovCgoubnZkMyAubnYtbXVsdGliYXIgLm52LWdyb3VwcyByZWN0LAoubnZkMyAubnYtbXVsdGliYXJIb3Jpem9udGFsIC5udi1ncm91cHMgcmVjdCwKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgcmVjdCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CgogIHRyYW5zaXRpb246IGZpbGwtb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBmaWxsLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhcjsKfQoKLm52ZDMgLm52LW11bHRpYmFyIC5udi1ncm91cHMgcmVjdDpob3ZlciwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIsCi5udmQzIC5udi1kaXNjcmV0ZWJhciAubnYtZ3JvdXBzIHJlY3Q6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogMTsKfQoKLm52ZDMgLm52LWRpc2NyZXRlYmFyIC5udi1ncm91cHMgdGV4dCwKLm52ZDMgLm52LW11bHRpYmFySG9yaXpvbnRhbCAubnYtZ3JvdXBzIHRleHQgewogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZpbGw6IHJnYmEoMCwwLDAsMSk7CiAgc3Ryb2tlOiByZ2JhKDAsMCwwLDApOwp9CgovKioqKioqKioqKioKKiAgUGllIENoYXJ0CiovCgoubnZkMy5udi1waWUgcGF0aCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLXdpZHRoIDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwoKfQoKLm52ZDMubnYtcGllIC5udi1waWUtdGl0bGUgewogICAgZm9udC1zaXplOiAyNHB4OwogICAgZmlsbDogcmdiYSgxOSwgMTk2LCAyNDksIDAuNTkpOwp9CgoubnZkMy5udi1waWUgLm52LXNsaWNlIHRleHQgewogIHN0cm9rZTogIzAwMDsKICBzdHJva2Utd2lkdGg6IDA7Cn0KCi5udmQzLm52LXBpZSBwYXRoIHsKICBzdHJva2U6ICNmZmY7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgc3Ryb2tlLW9wYWNpdHk6IDE7Cn0KCi5udmQzLm52LXBpZSAuaG92ZXIgcGF0aCB7CiAgZmlsbC1vcGFjaXR5OiAuNzsKfQoubnZkMy5udi1waWUgLm52LWxhYmVsIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoubnZkMy5udi1waWUgLm52LWxhYmVsIHJlY3QgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLyoqKioqKioqKioKKiBMaW5lcwoqLwoKLm52ZDMgLm52LWdyb3VwcyBwYXRoLm52LWxpbmUgewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKfQoKLm52ZDMgLm52LWdyb3VwcyBwYXRoLm52LWxpbmUubnYtdGhpbi1saW5lIHsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKCi5udmQzIC5udi1ncm91cHMgcGF0aC5udi1hcmVhIHsKICBzdHJva2U6IG5vbmU7Cn0KCi5udmQzIC5udi1saW5lLmhvdmVyIHBhdGggewogIHN0cm9rZS13aWR0aDogNnB4Owp9CgoubnZkMy5udi1saW5lIC5udmQzLm52LXNjYXR0ZXIgLm52LWdyb3VwcyAubnYtcG9pbnQgewogIGZpbGwtb3BhY2l0eTogMDsKICBzdHJva2Utb3BhY2l0eTogMDsKfQoKLm52ZDMubnYtc2NhdHRlci5udi1zaW5nbGUtcG9pbnQgLm52LWdyb3VwcyAubnYtcG9pbnQgewogIGZpbGwtb3BhY2l0eTogLjUgIWltcG9ydGFudDsKICBzdHJva2Utb3BhY2l0eTogLjUgIWltcG9ydGFudDsKfQoKCi53aXRoLXRyYW5zaXRpb25zIC5udmQzIC5udi1ncm91cHMgLm52LXBvaW50IHsKICB0cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLW1vei10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBzdHJva2Utd2lkdGggMjUwbXMgbGluZWFyLCBzdHJva2Utb3BhY2l0eSAyNTBtcyBsaW5lYXI7Cgp9CgoubnZkMy5udi1zY2F0dGVyIC5udi1ncm91cHMgLm52LXBvaW50LmhvdmVyLAoubnZkMyAubnYtZ3JvdXBzIC5udi1wb2ludC5ob3ZlciB7CiAgc3Ryb2tlLXdpZHRoOiA3cHg7CiAgZmlsbC1vcGFjaXR5OiAuOTUgIWltcG9ydGFudDsKICBzdHJva2Utb3BhY2l0eTogLjk1ICFpbXBvcnRhbnQ7Cn0KCgoubnZkMyAubnYtcG9pbnQtcGF0aHMgcGF0aCB7CiAgc3Ryb2tlOiAjYWFhOwogIHN0cm9rZS1vcGFjaXR5OiAwOwogIGZpbGw6ICNlZWU7CiAgZmlsbC1vcGFjaXR5OiAwOwp9CgoKCi5udmQzIC5udi1pbmRleExpbmUgewogIGN1cnNvcjogZXctcmVzaXplOwp9CgoKLyoqKioqKioqKioKKiBEaXN0cmlidXRpb24KKi8KCi5udmQzIC5udi1kaXN0cmlidXRpb24gewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoKLyoqKioqKioqKioKKiAgU2NhdHRlcgoqLwoKLm52ZDMgLm52LWdyb3VwcyAubnYtcG9pbnQuaG92ZXIgewogIHN0cm9rZS13aWR0aDogMjBweDsKICBzdHJva2Utb3BhY2l0eTogLjU7Cn0KCi5udmQzIC5udi1zY2F0dGVyIC5udi1wb2ludC5ob3ZlciB7CiAgZmlsbC1vcGFjaXR5OiAxOwp9CgoKLyoqKioqKioqKioKKiAgU3RhY2tlZCBBcmVhCiovCgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEgewogIGZpbGwtb3BhY2l0eTogLjc7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC1tb3otdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwogIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbC1vcGFjaXR5IDI1MG1zIGxpbmVhciwgc3Ryb2tlLW9wYWNpdHkgMjUwbXMgbGluZWFyOwp9CgoubnZkMy5udi1zdGFja2VkYXJlYSBwYXRoLm52LWFyZWEuaG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjk7Cn0KCgoubnZkMy5udi1zdGFja2VkYXJlYSAubnYtZ3JvdXBzIC5udi1wb2ludCB7CiAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgZmlsbC1vcGFjaXR5OiAwOwp9CgoKLyoqKioqKioqKioKKiAgTGluZSBQbHVzIEJhcgoqLwoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0IHsKICBmaWxsLW9wYWNpdHk6IC43NTsKfQoKLm52ZDMubnYtbGluZVBsdXNCYXIgLm52LWJhciByZWN0OmhvdmVyIHsKICBmaWxsLW9wYWNpdHk6IDE7Cn0KCgovKioqKioqKioqKgoqICBCdWxsZXQKKi8KCi5udmQzLm52LWJ1bGxldCB7IGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsgfQoubnZkMy5udi1idWxsZXQgLm52LW1lYXN1cmUgeyBmaWxsLW9wYWNpdHk6IC44OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtbWVhc3VyZTpob3ZlciB7IGZpbGwtb3BhY2l0eTogMTsgfQoubnZkMy5udi1idWxsZXQgLm52LW1hcmtlciB7IHN0cm9rZTogIzAwMDsgc3Ryb2tlLXdpZHRoOiAycHg7IH0KLm52ZDMubnYtYnVsbGV0IC5udi1tYXJrZXJUcmlhbmdsZSB7IHN0cm9rZTogIzAwMDsgZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAxLjVweDsgfQoubnZkMy5udi1idWxsZXQgLm52LXRpY2sgbGluZSB7IHN0cm9rZTogIzY2Njsgc3Ryb2tlLXdpZHRoOiAuNXB4OyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczAgeyBmaWxsOiAjZWVlOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczEgeyBmaWxsOiAjZGRkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2UubnYtczIgeyBmaWxsOiAjY2NjOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtdGl0bGUgeyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci5udmQzLm52LWJ1bGxldCAubnYtc3VidGl0bGUgeyBmaWxsOiAjOTk5OyB9CgoKLm52ZDMubnYtYnVsbGV0IC5udi1yYW5nZSB7CiAgZmlsbDogI2JhYmFiYTsKICBmaWxsLW9wYWNpdHk6IC40Owp9Ci5udmQzLm52LWJ1bGxldCAubnYtcmFuZ2U6aG92ZXIgewogIGZpbGwtb3BhY2l0eTogLjc7Cn0KCgovKioqKioqKioqKgoqIFNwYXJrbGluZQoqLwoKLm52ZDMubnYtc3BhcmtsaW5lIHBhdGggewogIGZpbGw6IG5vbmU7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgZy5udi1ob3ZlclZhbHVlIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYtaG92ZXJWYWx1ZSBsaW5lIHsKICBzdHJva2U6ICMzMzM7CiAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKIH0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMsCi5udmQzLm52LXNwYXJrbGluZXBsdXMgZyB7CiAgcG9pbnRlci1ldmVudHM6IGFsbDsKfQoKLm52ZDMgLm52LWhvdmVyQXJlYSB7CiAgZmlsbC1vcGFjaXR5OiAwOwogIHN0cm9rZS1vcGFjaXR5OiAwOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi14VmFsdWUsCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LXlWYWx1ZSB7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZvbnQtc2l6ZTogLjllbTsKICBmb250LXdlaWdodDogbm9ybWFsOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi15VmFsdWUgewogIHN0cm9rZTogI2Y2NjsKfQoKLm52ZDMubnYtc3BhcmtsaW5lcGx1cyAubnYtbWF4VmFsdWUgewogIHN0cm9rZTogIzJjYTAyYzsKICBmaWxsOiAjMmNhMDJjOwp9CgoubnZkMy5udi1zcGFya2xpbmVwbHVzIC5udi1taW5WYWx1ZSB7CiAgc3Ryb2tlOiAjZDYyNzI4OwogIGZpbGw6ICNkNjI3Mjg7Cn0KCi5udmQzLm52LXNwYXJrbGluZXBsdXMgLm52LWN1cnJlbnRWYWx1ZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAxLjFlbTsKfQoKLyoqKioqKioqKioKKiBoaXN0b3JpY2FsIHN0b2NrCiovCgoubnZkMy5udi1vaGxjQmFyIC5udi10aWNrcyAubnYtdGljayB7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5udmQzLm52LW9obGNCYXIgLm52LXRpY2tzIC5udi10aWNrLmhvdmVyIHsKICBzdHJva2Utd2lkdGg6IDJweDsKfQoKLm52ZDMubnYtb2hsY0JhciAubnYtdGlja3MgLm52LXRpY2sucG9zaXRpdmUgewogICAgc3Ryb2tlOiAjMmNhMDJjOwp9CgoubnZkMy5udi1vaGxjQmFyIC5udi10aWNrcyAubnYtdGljay5uZWdhdGl2ZSB7CiAgICBzdHJva2U6ICNkNjI3Mjg7Cn0KCi5udmQzLm52LWhpc3RvcmljYWxTdG9ja0NoYXJ0IC5udi1heGlzIC5udi1heGlzbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoubnZkMy5udi1oaXN0b3JpY2FsU3RvY2tDaGFydCAubnYtZHJhZ1RhcmdldCB7CiAgZmlsbC1vcGFjaXR5OiAwOwogIHN0cm9rZTogbm9uZTsKICBjdXJzb3I6IG1vdmU7Cn0KCi5udmQzIC5udi1icnVzaCAuZXh0ZW50IHsKICBmaWxsLW9wYWNpdHk6IDAgIWltcG9ydGFudDsKfQoKLm52ZDMgLm52LWJydXNoQmFja2dyb3VuZCByZWN0IHsKICBzdHJva2U6ICMwMDA7CiAgc3Ryb2tlLXdpZHRoOiAuNDsKICBmaWxsOiAjZmZmOwogIGZpbGwtb3BhY2l0eTogLjc7Cn0KCgovKioqKioqKioqKgoqIFBhcmFsbGVsIENvb3JkaW5hdGVzCiovCgoubnZkMyAuYmFja2dyb3VuZCBwYXRoIHsKICBmaWxsOiBub25lOwogIHN0cm9rZTogI0VFRTsKICBzdHJva2Utb3BhY2l0eTogLjQ7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAuZm9yZWdyb3VuZCBwYXRoIHsKICBmaWxsOiBub25lOwogIHN0cm9rZS1vcGFjaXR5OiAuNzsKfQoKLm52ZDMgLmJydXNoIC5leHRlbnQgewogIGZpbGwtb3BhY2l0eTogLjM7CiAgc3Ryb2tlOiAjZmZmOwogIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKfQoKLm52ZDMgLmF4aXMgbGluZSwgLmF4aXMgcGF0aCB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6ICMwMDA7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwp9CgoubnZkMyAuYXhpcyB0ZXh0IHsKICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmOwp9CgovKioqKgpJbnRlcmFjdGl2ZSBMYXllcgoqLwoubnZkMyAubnYtaW50ZXJhY3RpdmVHdWlkZUxpbmUgewogIHBvaW50ZXItZXZlbnRzOm5vbmU7Cn0KLm52ZDMgbGluZS5udi1ndWlkZWxpbmUgewogIHN0cm9rZTogI2NjYzsKfQo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/Location.svg" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wYmV0YTEgKDMyZDQ4MTIsIDIwMTktMDktMTkpIgogICBzb2RpcG9kaTpkb2NuYW1lPSJMb2NhdGlvbi5zdmciCiAgIHdpZHRoPSI4MiIKICAgaGVpZ2h0PSIxMjIiCiAgIHZpZXdCb3g9IjAgMCAyMS42OTU4MzMgMzIuMjc5MTY3IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc4Ij4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTpjeT0iOTguOTgwODU0IgogICAgIGlua3NjYXBlOmN4PSI1Mi4wNzMxOTIiCiAgICAgaW5rc2NhcGU6em9vbT0iMi42MDAyNTY1IgogICAgIHVuaXRzPSJweCIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaWQ9Im5hbWVkdmlldzgzOSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI5MDciCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNjAwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC1yb3RhdGlvbj0iMCIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczIiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODEuNzU2MjQ4LC0xMjQuMDg5NTkpIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDgzNSIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQiCiAgICAgICBkPSJtIDEwMy4xODc1LDEzNC45Mzc1IGMgMCwxLjQ2MTI1IC0wLjI5NjE1LDIuODUzMzQgLTAuODMxNjksNC4xMTk1MSAtMS43NDYyMiwzLjk1MTEzIC05Ljc1MTY0MywxNy4wNDcxNiAtOS43NTE2NDMsMTcuMDQ3MTYgMCwwIC04LjA0MDkwNywtMTMuMDg1MTcgLTkuNzUxNjQ0LC0xNy4wNDcxNiAtMC41MzU1NDYsLTEuMjY2MTcgLTAuODMxNjkyLC0yLjY1ODI2IC0wLjgzMTY5MiwtNC4xMTk1MSAtMmUtNiwtNS44NDUwMSA0LjczODMyMSwtMTAuNTgzMzMgMTAuNTgzMzMzLC0xMC41ODMzMyA1Ljg0NTAxMywwIDEwLjU4MzMzNiw0LjczODMyIDEwLjU4MzMzNiwxMC41ODMzMyB6IiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDgzOCIKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQiCiAgICAgICBkPSJtIDk2LjU3MjkxNywxMzQuOTM3NSBhIDMuOTY4NzUsMy45Njg3NSAwIDAgMSAtMy45Njg3NSwzLjk2ODc1IDMuOTY4NzUsMy45Njg3NSAwIDAgMSAtMy45Njg3NSwtMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgMy45Njg3NSwtMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgMy45Njg3NSwzLjk2ODc1IHoiIC8+CiAgPC9nPgo8L3N2Zz4K</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/LocationRed.svg" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaWQ9InN2ZzgiCiAgIHZlcnNpb249IjEuMSIKICAgdmlld0JveD0iMCAwIDIxLjY5NTgzMyAzMi4yNzkxNjciCiAgIGhlaWdodD0iMTIyIgogICB3aWR0aD0iODIiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkxvY2F0aW9uUmVkLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wYmV0YTEgKDMyZDQ4MTIsIDIwMTktMDktMTkpIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXJvdGF0aW9uPSIwIgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE2MDAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTA3IgogICAgIGlkPSJuYW1lZHZpZXc4MzkiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTp6b29tPSIyLjI5NDYwODMiCiAgICAgaW5rc2NhcGU6Y3g9IjExMi44NDY0IgogICAgIGlua3NjYXBlOmN5PSI2Mi4wMjQyNzIiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI1IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnOCIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHN0eWxlPSJmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybyIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MS43NTYyNDgsLTEyNC4wODk1OSkiPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTAzLjE4NzUsMTM0LjkzNzUgYyAwLDEuNDYxMjUgLTAuMjk2MTUsMi44NTMzNCAtMC44MzE2OSw0LjExOTUxIC0xLjc0NjIyLDMuOTUxMTMgLTkuNzUxNjQzLDE3LjA0NzE2IC05Ljc1MTY0MywxNy4wNDcxNiAwLDAgLTguMDQwOTA3LC0xMy4wODUxNyAtOS43NTE2NDQsLTE3LjA0NzE2IC0wLjUzNTU0NiwtMS4yNjYxNyAtMC44MzE2OTIsLTIuNjU4MjYgLTAuODMxNjkyLC00LjExOTUxIC0yZS02LC01Ljg0NTAxIDQuNzM4MzIxLC0xMC41ODMzMyAxMC41ODMzMzMsLTEwLjU4MzMzIDUuODQ1MDEzLDAgMTAuNTgzMzM2LDQuNzM4MzIgMTAuNTgzMzM2LDEwLjU4MzMzIHoiCiAgICAgICBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlLW9wYWNpdHk6MTtmaWxsOiNkYzAwMDAiCiAgICAgICBpZD0icGF0aDgzNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA5Ni41NzI5MTcsMTM0LjkzNzUgYSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgLTMuOTY4NzUsMy45Njg3NSAzLjk2ODc1LDMuOTY4NzUgMCAwIDEgLTMuOTY4NzUsLTMuOTY4NzUgMy45Njg3NSwzLjk2ODc1IDAgMCAxIDMuOTY4NzUsLTMuOTY4NzUgMy45Njg3NSwzLjk2ODc1IDAgMCAxIDMuOTY4NzUsMy45Njg3NSB6IgogICAgICAgc3R5bGU9ImZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6I2ZmZmZmZiIKICAgICAgIGlkPSJwYXRoODM4IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8L2c+Cjwvc3ZnPgo=</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/css/Core.OpenStreetMap.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qIEN1c3RvbWVyIERhc2hib2FyZCAqLwoub29vVGlsZV9PU01DYW52YXMgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKI29wZW5zdHJlZXRtYXAtY2FudmFzIHsKICAgIGhlaWdodDogMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWFyZ2luOiAwOwp9CgovKiBDdXN0b21lck9wZW5TdHJlZXRNYXAgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogICAgLk9TTSA+ICNvb29IZWFkZXIsCiAgICAuT1NNID4gI29vb0N1c3RvbWVyTm90aWZpY2F0aW9ucyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuT1NNID4gI29vb01haW5Cb3ggewogICAgICAgIGhlaWdodDogY2FsYyggMTAwdmggLSAxMDRweCApOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKICAgIC5PU00gPiAjb29vSGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDE0NXB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDEuMnB4IHNvbGlkICNlNWU1ZWI7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLk9TTSA+ICNvb29NYWluQm94IHsKICAgICAgICBoZWlnaHQ6IGNhbGMoIDEwMHZoIC0gMTk0LjJweCApOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLk9TTSNvb29Db250ZW50IHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIC5PU00gPiAjb29vQ3VzdG9tZXJOb3RpZmljYXRpb25zIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgIH0KCiAgICAuT1NNICNvcGVuc3RyZWV0bWFwLWNhbnZhcyAubGVhZmxldC1sZWZ0IHsKICAgICAgICBsZWZ0OiA1NnB4OwogICAgfQp9Cg==</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/img/map.svg" Permission="660" Encode="Base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQuNjUgNC45OGwtNS0xLjc1Yy0uNDItLjE1LS44OC0uMTUtMS4zLS4wMUw0LjM2IDQuNTZDMy41NSA0Ljg0IDMgNS42IDMgNi40NnYxMS44NWMwIDEuNDEgMS40MSAyLjM3IDIuNzIgMS44NmwyLjkzLTEuMTRjLjIyLS4wOS40Ny0uMDkuNjktLjAxbDUgMS43NWMuNDIuMTUuODguMTUgMS4zLjAxbDMuOTktMS4zNGMuODEtLjI3IDEuMzYtMS4wNCAxLjM2LTEuOVY1LjY5YzAtMS40MS0xLjQxLTIuMzctMi43Mi0xLjg2bC0yLjkzIDEuMTRjLS4yMi4wOC0uNDYuMDktLjY5LjAxek0xNSAxOC44OWwtNi0yLjExVjUuMTFsNiAyLjExdjExLjY3eiIvPjwvc3ZnPg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/img/Location.png" Permission="660" Encode="Base64">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</File>
        <File Location="doc/en/OpenStreetMap.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>