<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>AgentTicketArticlePin</Name>
    <Version>11.1.1</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-07-22 10:49:30" Version="11.1.1">Update to OTOBO 11.1.</ChangeLog>
    <Description Lang="en">Pin Articles to show them at the top of the list.</Description>
    <Description Lang="de">Ermöglicht das anheften von Artikeln an den Anfang der Artikelliste.</Description>
    <Framework>11.1.x</Framework>
    <BuildCommitID>595bfd9091d2ff0dff27d8bb4b5e77ebd5940941</BuildCommitID>
    <BuildDate>2026-07-22 10:49:33</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AgentTicketZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBiMzEzMjhmZjQ3MWYwZjYzMmUzNjkxMDVkN2FhZDUxODUzZjJkOTk1IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRab29tLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldFpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKIyBjb3JlIG1vZHVsZXMKdXNlIExpc3Q6OlV0aWwgcXcoYW55IG5vbmUpOwp1c2UgUE9TSVggICAgICBxdyhjZWlsKTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3MgeyVQYXJhbX0sICRUeXBlOwoKICAgICMgc2V0IGRlYnVnCiAgICAkU2VsZi0+e0RlYnVnfSA9IDA7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRVc2VyT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkU2VsZi0+e0FydGljbGVJRH0gICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlSUQnICk7CiAgICAkU2VsZi0+e0FydGljbGVWaWV3fSAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlVmlldycgKTsKICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1pvb21FeHBhbmQnICk7CiAgICAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdab29tRXhwYW5kU29ydCcgKTsKICAgICRTZWxmLT57Wm9vbVRpbWVsaW5lfSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1pvb21UaW1lbGluZScgKTsKCiAgICBteSAlVXNlclByZWZlcmVuY2VzID0gJFVzZXJPYmplY3QtPkdldFByZWZlcmVuY2VzKAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2F2ZSBsYXN0IHVzZWQgdmlldyB0eXBlIGluIHByZWZlcmVuY2VzCiAgICBpZiAoICEkU2VsZi0+e1N1YmFjdGlvbn0gKSB7CgogICAgICAgIGlmICgKICAgICAgICAgICAgIWRlZmluZWQgJFNlbGYtPntBcnRpY2xlVmlld30KICAgICAgICAgICAgJiYgIWRlZmluZWQgJFNlbGYtPntab29tRXhwYW5kfQogICAgICAgICAgICAmJiAhZGVmaW5lZCAkU2VsZi0+e1pvb21UaW1lbGluZX0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntab29tRXhwYW5kfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRab29tRXhwYW5kJyk7CiAgICAgICAgICAgIGlmICggJFVzZXJQcmVmZXJlbmNlc3tVc2VyTGFzdFVzZWRab29tVmlld1R5cGV9ICkgewogICAgICAgICAgICAgICAgaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZX0gZXEgJ0V4cGFuZCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntab29tRXhwYW5kfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRVc2VyUHJlZmVyZW5jZXN7VXNlckxhc3RVc2VkWm9vbVZpZXdUeXBlfSBlcSAnQ29sbGFwc2UnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZX0gZXEgJ1RpbWVsaW5lJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgZGVmaW5lZCAkU2VsZi0+e0FydGljbGVWaWV3fQogICAgICAgICAgICB8fCBkZWZpbmVkICRTZWxmLT57Wm9vbUV4cGFuZH0KICAgICAgICAgICAgfHwgZGVmaW5lZCAkU2VsZi0+e1pvb21UaW1lbGluZX0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJExhc3RVc2VkWm9vbVZpZXdUeXBlID0gJyc7CgogICAgICAgICAgICBpZiAoIGRlZmluZWQgJFNlbGYtPntBcnRpY2xlVmlld30gKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAkU2VsZi0+e0FydGljbGVWaWV3fTsKCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZVZpZXd9IGVxICdFeHBhbmQnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkU2VsZi0+e0FydGljbGVWaWV3fSBlcSAnQ29sbGFwc2UnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkU2VsZi0+e0FydGljbGVWaWV3fSBlcSAnVGltZWxpbmUnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbVRpbWVsaW5lfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50Wm9vbUV4cGFuZCcpCiAgICAgICAgICAgICAgICAgICAgICAgID8gJ0V4cGFuZCcKICAgICAgICAgICAgICAgICAgICAgICAgOiAnQ29sbGFwc2UnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZGVmaW5lZCAkU2VsZi0+e1pvb21FeHBhbmR9ICYmICRTZWxmLT57Wm9vbUV4cGFuZH0gPT0gMSApIHsKICAgICAgICAgICAgICAgICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICdFeHBhbmQnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZGVmaW5lZCAkU2VsZi0+e1pvb21FeHBhbmR9ICYmICRTZWxmLT57Wm9vbUV4cGFuZH0gPT0gMCApIHsKICAgICAgICAgICAgICAgICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICdDb2xsYXBzZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBkZWZpbmVkICRTZWxmLT57Wm9vbVRpbWVsaW5lfSAmJiAkU2VsZi0+e1pvb21UaW1lbGluZX0gPT0gMSApIHsKICAgICAgICAgICAgICAgICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICdUaW1lbGluZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFVzZXJPYmplY3QtPlNldFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEtleSAgICA9PiAnVXNlckxhc3RVc2VkWm9vbVZpZXdUeXBlJywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkTGFzdFVzZWRab29tVmlld1R5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRDb25maWdPYmplY3QtPkdldCgnVGltZWxpbmVWaWV3RW5hYmxlZCcpICkgewogICAgICAgICRTZWxmLT57Wm9vbVRpbWVsaW5lfSA9IDA7CiAgICB9CgogICAgIyB3aGV0aGVyIHRoZSBtZXNzYWdlICJUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSwgLi4uIiBpcyBzaG93bgogICAgJFNlbGYtPntEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9IC8vPSAkVXNlclByZWZlcmVuY2Vze1VzZXJBZ2VudERvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX07CgogICAgJFNlbGYtPntab29tRXhwYW5kU29ydH0gLy89ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Wm9vbUV4cGFuZFNvcnQnKTsKCiAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpUaWNrZXRBcnRpY2xlRmlsdGVyJyk7CgogICAgIyBkZWZpbmUgaWYgcmljaCB0ZXh0IHNob3VsZCBiZSB1c2VkCiAgICAkU2VsZi0+e1JpY2hUZXh0fSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Wm9vbVJpY2hUZXh0Rm9yY2UnKQogICAgICAgIHx8ICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9CiAgICAgICAgfHwgMDsKCiAgICAjIEFsd2F5cyBleGNsdWRlIHBsYWluIHRleHQgYXR0YWNobWVudCwgYnV0IGV4Y2x1ZGUgSFRNTCBib2R5IG9ubHkgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQuCiAgICAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gPSB7CiAgICAgICAgRXhjbHVkZVBsYWluVGV4dCA9PiAxLAogICAgICAgIEV4Y2x1ZGVIVE1MQm9keSAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgRXhjbHVkZUlubGluZSAgICA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgIH07CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIHRpY2tldCBpZCBsb29rdXAKICAgIGlmICggISRTZWxmLT57VGlja2V0SUR9ICYmICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXROdW1iZXInICkgKSB7CiAgICAgICAgJFNlbGYtPntUaWNrZXRJRH0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRJRExvb2t1cCgKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXROdW1iZXInICksCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBkaXNwbGF5IHNldHRpbmdzIGZvciBBZ2VudFRpY2tldFpvb20sIGUuZy4gd2hpY2ggd2lkZ2V0cyBhcmUgc2hvd24KICAgICRTZWxmLT57RGlzcGxheVNldHRpbmdzfSA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIik7CgogICAgIyB0aGlzIGlzIGEgbWFwcGluZyBvZiBoaXN0b3J5IHR5cGVzIHdoaWNoIGlzIGJlaW5nIHVzZWQKICAgICMgZm9yIHRoZSB0aW1lbGluZSB2aWV3IGFuZCBpdHMgZXZlbnQgdHlwZSBmaWx0ZXIKICAgICRTZWxmLT57SGlzdG9yeVR5cGVNYXBwaW5nfSA9IHsKICAgICAgICBUaWNrZXRMaW5rRGVsZXRlICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTGluayBEZWxldGVkJyksCiAgICAgICAgTG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBMb2NrZWQnKSwKICAgICAgICBTZXRQZW5kaW5nVGltZSAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUGVuZGluZyBUaW1lIFNldCcpLAogICAgICAgIFRpY2tldER5bmFtaWNGaWVsZFVwZGF0ZSAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdEeW5hbWljIEZpZWxkIFVwZGF0ZWQnKSwKICAgICAgICBFbWFpbEFnZW50SW50ZXJuYWwgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3V0Z29pbmcgRW1haWwgKGludGVybmFsKScpLAogICAgICAgIE5ld1RpY2tldCAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgQ3JlYXRlZCcpLAogICAgICAgIFR5cGVVcGRhdGUgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUeXBlIFVwZGF0ZWQnKSwKICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZVN0YXJ0ICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBVcGRhdGUgVGltZSBJbiBFZmZlY3QnKSwKICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZVN0b3AgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBVcGRhdGUgVGltZSBTdG9wcGVkJyksCiAgICAgICAgRXNjYWxhdGlvbkZpcnN0UmVzcG9uc2VUaW1lU3RvcCA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gRmlyc3QgUmVzcG9uc2UgVGltZSBTdG9wcGVkJyksCiAgICAgICAgQ3VzdG9tZXJVcGRhdGUgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0N1c3RvbWVyIFVwZGF0ZWQnKSwKICAgICAgICBDaGF0SW50ZXJuYWwgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnSW50ZXJuYWwgQ2hhdCcpLAogICAgICAgIFNlbmRBdXRvRm9sbG93VXAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBdXRvbWF0aWMgRm9sbG93LVVwIFNlbnQnKSwKICAgICAgICBBZGROb3RlICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTm90ZSBBZGRlZCcpLAogICAgICAgIEFkZE5vdGVDdXN0b21lciAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdOb3RlIEFkZGVkIChDdXN0b21lciknKSwKICAgICAgICBBZGRTTVMgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnU01TIEFkZGVkJyksCiAgICAgICAgQWRkU01TQ3VzdG9tZXIgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1NNUyBBZGRlZCAoQ3VzdG9tZXIpJyksCiAgICAgICAgU3RhdGVVcGRhdGUgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1N0YXRlIFVwZGF0ZWQnKSwKICAgICAgICBTZW5kQW5zd2VyICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3V0Z29pbmcgQW5zd2VyJyksCiAgICAgICAgU2VydmljZVVwZGF0ZSAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1NlcnZpY2UgVXBkYXRlZCcpLAogICAgICAgIFRpY2tldExpbmtBZGQgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdMaW5rIEFkZGVkJyksCiAgICAgICAgRW1haWxDdXN0b21lciAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIEN1c3RvbWVyIEVtYWlsJyksCiAgICAgICAgV2ViUmVxdWVzdEN1c3RvbWVyICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIFdlYiBSZXF1ZXN0JyksCiAgICAgICAgUHJpb3JpdHlVcGRhdGUgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1ByaW9yaXR5IFVwZGF0ZWQnKSwKICAgICAgICBVbmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnVGlja2V0IFVubG9ja2VkJyksCiAgICAgICAgRW1haWxBZ2VudCAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIEVtYWlsJyksCiAgICAgICAgVGl0bGVVcGRhdGUgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpdGxlIFVwZGF0ZWQnKSwKICAgICAgICBPd25lclVwZGF0ZSAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTmV3IE93bmVyJyksCiAgICAgICAgTWVyZ2VkICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBNZXJnZWQnKSwKICAgICAgICBQaG9uZUNhbGxBZ2VudCAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnT3V0Z29pbmcgUGhvbmUgQ2FsbCcpLAogICAgICAgIEZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdGb3J3YXJkZWQgTWVzc2FnZScpLAogICAgICAgIFVuc3Vic2NyaWJlICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdSZW1vdmVkIFVzZXIgU3Vic2NyaXB0aW9uJyksCiAgICAgICAgVGltZUFjY291bnRpbmcgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpbWUgQWNjb3VudGVkJyksCiAgICAgICAgUGhvbmVDYWxsQ3VzdG9tZXIgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIFBob25lIENhbGwnKSwKICAgICAgICBTeXN0ZW1SZXF1ZXN0ICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnU3lzdGVtIFJlcXVlc3QuJyksCiAgICAgICAgRm9sbG93VXAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0luY29taW5nIEZvbGxvdy1VcCcpLAogICAgICAgIFNlbmRBdXRvUmVwbHkgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBdXRvbWF0aWMgUmVwbHkgU2VudCcpLAogICAgICAgIFNlbmRBdXRvUmVqZWN0ICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBdXRvbWF0aWMgUmVqZWN0IFNlbnQnKSwKICAgICAgICBSZXNwb25zaWJsZVVwZGF0ZSAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTmV3IFJlc3BvbnNpYmxlJyksCiAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0YXJ0ICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gU29sdXRpb24gVGltZSBJbiBFZmZlY3QnKSwKICAgICAgICBFc2NhbGF0aW9uU29sdXRpb25UaW1lU3RvcCAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBTb2x1dGlvbiBUaW1lIFN0b3BwZWQnKSwKICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lU3RhcnQgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBSZXNwb25zZSBUaW1lIEluIEVmZmVjdCcpLAogICAgICAgIEVzY2FsYXRpb25SZXNwb25zZVRpbWVTdG9wICAgICAgPT4gVHJhbnNsYXRhYmxlKCdFc2NhbGF0aW9uIFJlc3BvbnNlIFRpbWUgU3RvcHBlZCcpLAogICAgICAgIFNMQVVwZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTTEEgVXBkYXRlZCcpLAogICAgICAgIENoYXRFeHRlcm5hbCAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdFeHRlcm5hbCBDaGF0JyksCiAgICAgICAgTW92ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1F1ZXVlIENoYW5nZWQnKSwKICAgICAgICBTZW5kQWdlbnROb3RpZmljYXRpb24gICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTm90aWZpY2F0aW9uIFdhcyBTZW50JyksCiAgICB9OwoKICAgICMgQWRkIGN1c3RvbSBmaWxlcyB0byB0aGUgem9vbSdzIGZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gb24gdGhlIGZseQogICAgIyAgICB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzLgogICAgaWYgKAogICAgICAgIGRlZmluZWQgJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJykKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpbWVsaW5lVmlld0VuYWJsZWQnKSA9PSAxCiAgICAgICAgKQogICAgewogICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgS2V5ICAgPT4gJ0xvYWRlcjo6TW9kdWxlOjpBZ2VudFRpY2tldFpvb20jIyMwMDMtRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ0NvcmUuQWdlbnQuVGlja2V0Wm9vbS5UaW1lbGluZVZpZXcuanMnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRBcnRpY2xlU2hvd1N0YXR1cyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGVGZWF0dXJlcycpLT5TaG93RGVsZXRlZEFydGljbGVzKAogICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEdldFN0YXR1cyA9PiAxCiAgICApOwoKICAgICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30gPSAkQXJ0aWNsZVNob3dTdGF0dXMgPyAxIDogMDsKICAgICRTZWxmLT57QXJ0aWNsZVN0b3JhZ2V9ICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6QXJ0aWNsZTo6QmFja2VuZDo6TUlNRUJhc2U6OkFydGljbGVTdG9yYWdlJyk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNlbGYtPntUaWNrZXRJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gVGlja2V0SUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICdybycsCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9CiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuLCBkb24ndCBzaG93IHRpY2tldAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgKICAgICAgICAgICAgIlRoaXMgdGlja2V0IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgaXQgaW4gaXRzIGN1cnJlbnQgc3RhdGUuIgogICAgICAgICksCiAgICAgICAgV2l0aEhlYWRlciA9PiAkU2VsZi0+e1N1YmFjdGlvbn0gJiYgJFNlbGYtPntTdWJhY3Rpb259IGVxICdBcnRpY2xlVXBkYXRlJyA/ICdubycgOiAneWVzJywKICAgICkgaWYgISRBY2Nlc3M7CgogICAgIyBnZXQgdGlja2V0IGF0dHJpYnV0ZXMKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgICMgZ2V0IEFDTCByZXN0cmljdGlvbnMKICAgIG15ICVQb3NzaWJsZUFjdGlvbnM7CiAgICBteSAkQ291bnRlciA9IDA7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgYWxsIHJlZ2lzdGVyZWQgQWN0aW9ucwogICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJykgZXEgJ0hBU0gnICkgewoKICAgICAgICBteSAlQWN0aW9ucyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpIH07CgogICAgICAgICMgb25seSB1c2UgdGhvc2UgQWN0aW9ucyB0aGF0IHN0YXRzIHdpdGggQWdlbnQKICAgICAgICAlUG9zc2libGVBY3Rpb25zID0gbWFwIHsgKyskQ291bnRlciA9PiAkXyB9CiAgICAgICAgICAgIGdyZXAgeyBzdWJzdHIoICRfLCAwLCBsZW5ndGggJ0FnZW50JyApIGVxICdBZ2VudCcgfQogICAgICAgICAgICBzb3J0IGtleXMgJUFjdGlvbnM7CiAgICB9CgogICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlUG9zc2libGVBY3Rpb25zLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgbXkgJUFjbEFjdGlvbiA9ICVQb3NzaWJsZUFjdGlvbnM7CiAgICBpZiAoJEFDTCkgewogICAgICAgICVBY2xBY3Rpb24gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xBY3Rpb25EYXRhKCk7CiAgICB9CgogICAgIyBjaGVjayBpZiBBQ0wgcmVzdHJpY3Rpb25zIGV4aXN0CiAgICBteSAlQWNsQWN0aW9uTG9va3VwID0gcmV2ZXJzZSAlQWNsQWN0aW9uOwoKICAgICMgc2hvdyBlcnJvciBzY3JlZW4gaWYgQUNMIHByb2hpYml0cyB0aGlzIGFjdGlvbgogICAgaWYgKCAhJEFjbEFjdGlvbkxvb2t1cHsgJFNlbGYtPntBY3Rpb259IH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgfQoKICAgICMgc2VuZCBwYXJhbWV0ZXIgVGlja2V0SUQgdG8gSlMKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnVGlja2V0SUQnLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgKTsKCiAgICAjIG1hcmsgc2hvd24gdGlja2V0IGFzIHNlZW4KICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUaWNrZXRNYXJrQXNTZWVuJyApIHsKICAgICAgICBteSAkU3VjY2VzcyA9IDE7CgogICAgICAgICMgYWx3YXlzIHNob3cgYXJjaGl2ZWQgdGlja2V0cyBhcyBzZWVuCiAgICAgICAgaWYgKCAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAneScgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFNlbGYtPl9UaWNrZXRJdGVtU2VlbiggVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFN1Y2Nlc3MsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ01hcmtBc0ltcG9ydGFudCcgKSB7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBPd25lciBhbmQgUmVzcG9uc2libGUgY2FuIG1hcmsgYXJ0aWNsZXMgYXMgaW1wb3J0YW50IG9yIHJlbW92ZSBtYXJrCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1VzZXJJRH0gPT0gJFRpY2tldHtPd25lcklEfQogICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6UmVzcG9uc2libGUnKQogICAgICAgICAgICAgICAgJiYgJFNlbGYtPntVc2VySUR9ID09ICRUaWNrZXR7UmVzcG9uc2libGVJRH0KICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBBbHdheXMgdXNlIHVzZXIgaWQgMSBiZWNhdXNlIG90aGVyIHVzZXJzIGFsc28gaGF2ZSB0byBzZWUgdGhlIGltcG9ydGFudCBmbGFnCiAgICAgICAgICAgIG15ICVBcnRpY2xlRmxhZyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlSXNJbXBvcnRhbnQgPSAkQXJ0aWNsZUZsYWd7SW1wb3J0YW50fTsKICAgICAgICAgICAgaWYgKCRBcnRpY2xlSXNJbXBvcnRhbnQpIHsKCiAgICAgICAgICAgICAgICAjIEFsd2F5cyB1c2UgdXNlciBpZCAxIGJlY2F1c2Ugb3RoZXIgdXNlcnMgYWxzbyBoYXZlIHRvIHNlZSB0aGUgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgICAgICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0RlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJ0ltcG9ydGFudCcsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgQWx3YXlzIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBvdGhlciB1c2VycyBhbHNvIGhhdmUgdG8gc2VlIHRoZSBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICAgICAgJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnU2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnSW1wb3J0YW50JywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07QXJ0aWNsZUlEPSRTZWxmLT57QXJ0aWNsZUlEfSIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCByZXF1aXJlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTWFpbk9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdGb3JtRHJhZnREZWxldGUnICkgewogICAgICAgIG15ICVSZXNwb25zZTsKCiAgICAgICAgbXkgJEZvcm1EcmFmdElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdElEJyApIHx8ICcnOwogICAgICAgIGlmICgkRm9ybURyYWZ0SUQpIHsKCiAgICAgICAgICAgICMgZmV0Y2ggZm9ybSBkcmFmdCB0byBjaGVjayBwZXJtaXNzaW9ucyBhbmQgdGlja2V0IGxvY2sKICAgICAgICAgICAgIyAgIE5PVEU6IHBhc3NpbmcgdGhlIG9iamVjdCBpZCBlbnN1cmVzIHZlcmlmaWNhdGlvbiB0aGF0IGZvcm0gZHJhZnQgYmVsb25ncyB0byB0aWNrZXQKICAgICAgICAgICAgbXkgJEZvcm1EcmFmdE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGb3JtRHJhZnQnKTsKICAgICAgICAgICAgbXkgJEZvcm1EcmFmdCAgICAgICA9ICRGb3JtRHJhZnRPYmplY3QtPkZvcm1EcmFmdEdldCgKICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRGb3JtRHJhZnRJRCwKICAgICAgICAgICAgICAgIE9iamVjdElEICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRm9ybURyYWZ0KSApIHsKCiAgICAgICAgICAgICAgICAjIHVzZSBjb25maWcgb2YgZm9ybSBkcmFmdCBhY3Rpb24gZm9yIGNoZWNrcwogICAgICAgICAgICAgICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCggJ1RpY2tldDo6RnJvbnRlbmQ6OicgLiAkRm9ybURyYWZ0LT57QWN0aW9ufSApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgYWN0aW9uIGlzIGFsbG93ZWQgYXMgcGVyIEFDTHMKICAgICAgICAgICAgICAgIGlmICggJEFjbEFjdGlvbkxvb2t1cHsgJEZvcm1EcmFmdC0+e0FjdGlvbn0gfSAmJiBJc0hhc2hSZWZXaXRoRGF0YSgkQ29uZmlnKSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyB0aWNrZXQgbG9jayBjaGVjawogICAgICAgICAgICAgICAgICAgICMgICBOT1RFOiBvd25lciBzdGF0dXMgb3ZlcnJ1bGVzIHBlcm1pc3Npb24gY2hlY2sgaW4gdGhpcyBjYXNlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnLT57UmVxdWlyZWRMb2NrfSAmJiAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrR2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25lcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBY2Nlc3NPayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlNvcnJ5LCB5b3UgbmVlZCB0byBiZSB0aGUgdGlja2V0IG93bmVyIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRBY2Nlc3NPayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJENvbmZpZy0+e1Blcm1pc3Npb259LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBY2Nlc3NPayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJObyBwZXJtaXNzaW9uLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUmVzcG9uc2V7RXJyb3J9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7U3VjY2Vzc30gPSAkRm9ybURyYWZ0T2JqZWN0LT5Gb3JtRHJhZnREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtRHJhZnRJRCA9PiAkRm9ybURyYWZ0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJObyBwZXJtaXNzaW9uLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFJlc3BvbnNle0Vycm9yfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiQ291bGQgbm90IGRlbGV0ZSBmb3JtIGRyYWZ0LiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJNaXNzaW5nIEZvcm1EcmFmdElEISIpOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBKU09OIG91dHB1dAogICAgICAgIG15ICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiBcJVJlc3BvbnNlLAogICAgICAgICk7CgogICAgICAgICMgc2VuZCBKU09OIHJlc3BvbnNlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0xvYWRXaWRnZXQnICkgewogICAgICAgIG15ICRFbGVtZW50SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRWxlbWVudElEJyApOwogICAgICAgIG15ICRDb25maWc7CiAgICAgICAgV0lER0VUOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9IC8vIHt9IH0gKSB7CiAgICAgICAgICAgIGlmICggJEVsZW1lbnRJRCBlcSAnQXN5bmNfJyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJEtleSkgKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnID0gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9LT57V2lkZ2V0c30tPnskS2V5fTsKICAgICAgICAgICAgICAgIGxhc3QgV0lER0VUOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkQ29uZmlnKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gZXZhbCB7ICRNYWluT2JqZWN0LT5SZXF1aXJlKCAkQ29uZmlnLT57TW9kdWxlfSApIH07CiAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGxvYWQgJENvbmZpZy0+e01vZHVsZX06ICRAIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkTW9kdWxlID0gZXZhbCB7ICRDb25maWctPntNb2R1bGV9LT5uZXcoICV7JFNlbGZ9ICkgfTsKICAgICAgICAgICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIm5ldygpIG9mIFdpZGdldCBtb2R1bGUgJENvbmZpZy0+e01vZHVsZX0gbm90IHN1Y2Nlc3NmdWwhIiwKCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJFdpZGdldE91dHB1dCA9ICRNb2R1bGUtPlJ1bigKICAgICAgICAgICAgICAgIFRpY2tldCAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFjbEFjdGlvbiA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIENvbmZpZyAgICA9PiAkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRXaWRnZXRPdXRwdXQtPntPdXRwdXR9IC8vICcgJywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICd1dGYtOCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGxvY2F0ZSBtb2R1bGUgZm9yIEVsZW1lbnRJRCAkRWxlbWVudElEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICcnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1hcmsgc2hvd24gYXJ0aWNsZSBhcyBzZWVuCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTWFya0FzU2VlbicgKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAxOwoKICAgICAgICBteSAkSXNBcnRpY2xlRGVsZXRlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGVGZWF0dXJlcycpLT5Jc0FydGljbGVEZWxldGVkKAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkSXNBcnRpY2xlRGVsZXRlZCkgewogICAgICAgICAgICAkU3VjY2VzcyA9IDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgICAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFNlbGYtPl9BcnRpY2xlSXRlbVNlZW4oCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFN1Y2Nlc3MsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBhcnRpY2xlIHVwZGF0ZQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FydGljbGVVcGRhdGUnICkgewogICAgICAgIG15ICRDb3VudCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb3VudCcgKTsKCiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgKTsKCiAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICApOwogICAgICAgICRBcnRpY2xle0NvdW50fSA9ICRDb3VudDsKCiAgICAgICAgIyBHZXQgYXR0YWNobWVudCBpbmRleCAoZXhjbHVkaW5nIGJvZHkgYXR0YWNobWVudHMpLgogICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgJXsgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9IH0sCiAgICAgICAgKTsKICAgICAgICAkQXJ0aWNsZXtBdG1zfSA9IFwlQXRtSW5kZXg7CgogICAgICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICAgICAgbXkgJVN0YW5kYXJkVGVtcGxhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgICAgICAgICBWYWxpZCAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEFydGljbGVXaWRnZXRzSFRNTCA9ICRTZWxmLT5fQXJ0aWNsZUl0ZW0oCiAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBBcnRpY2xlICAgICAgICAgICA9PiBcJUFydGljbGUsCiAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBTdGFuZGFyZFJlc3BvbnNlcyA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7QW5zd2VyfSwKICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnT25Mb2FkJywKICAgICAgICApOwoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBbICRTZWxmLT57QXJ0aWNsZUlEfSBdLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnTWVudUl0ZW1zJywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntNZW51SXRlbXN9LAogICAgICAgICk7CgogICAgICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICAlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQXJ0aWNsZVdpZGdldHNIVE1MID0+ICRBcnRpY2xlV2lkZ2V0c0hUTUwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQUpBWCA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJENvbnRlbnQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ2FuXCd0IGdldCBmb3IgQXJ0aWNsZUlEICVzIScsICRTZWxmLT57QXJ0aWNsZUlEfSApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRDb250ZW50LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVXNlck9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgd3JpdGUgYXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3MgdG8gc2Vzc2lvbgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FydGljbGVGaWx0ZXJTZXQnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICk7CiAgICAgICAgbXkgJFNhdmVEZWZhdWx0cyAgICAgICAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVEZWZhdWx0cycgKTsKICAgICAgICBteSBAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXInICk7CiAgICAgICAgbXkgJEN1c3RvbWVyVmlzaWJpbGl0eSAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVmlzaWJpbGl0eUZpbHRlcicgKTsKICAgICAgICBteSBAQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJJRHMgICAgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXInICk7CgogICAgICAgICMgYnVpbGQgc2Vzc2lvbiBzdHJpbmcKICAgICAgICBteSAkU2Vzc2lvblN0cmluZyA9ICcnOwogICAgICAgIGlmIChAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHMpIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJ0NvbW11bmljYXRpb25DaGFubmVsRmlsdGVyPCc7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49IGpvaW4gJywnLCBAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHM7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49ICc+JzsKICAgICAgICB9CiAgICAgICAgaWYgKCBkZWZpbmVkICRDdXN0b21lclZpc2liaWxpdHkgJiYgJEN1c3RvbWVyVmlzaWJpbGl0eSAhPSAyICkgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAiQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyPCRDdXN0b21lclZpc2liaWxpdHk+IjsKICAgICAgICB9CiAgICAgICAgaWYgKEBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcklEcykgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAnQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXI8JzsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gam9pbiAnLCcsIEBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcklEczsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJz4nOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSB0aGUgc2Vzc2lvbgoKICAgICAgICAjIHNhdmUgZGVmYXVsdCBmaWx0ZXIgc2V0dGluZ3MgdG8gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICgkU2F2ZURlZmF1bHRzKSB7CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ0FydGljbGVGaWx0ZXJEZWZhdWx0JywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJ0FydGljbGVGaWx0ZXJEZWZhdWx0JywKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdHVybiBvZmYgZmlsdGVyIGV4cGxpY2l0bHkgZm9yIHRoaXMgdGlja2V0CiAgICAgICAgaWYgKCAkU2Vzc2lvblN0cmluZyBlcSAnJyApIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgPSAnb2ZmJzsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBzZXNzaW9uCiAgICAgICAgbXkgJFVwZGF0ZSA9ICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAiQXJ0aWNsZUZpbHRlciRUaWNrZXRJRCIsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIEpTT04gb3V0cHV0CiAgICAgICAgbXkgJEpTT04gPSAnJzsKICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3Mgd2VyZSBzYXZlZC4nKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgd3JpdGUgYXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3MgdG8gc2Vzc2lvbgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0V2ZW5UeXBlRmlsdGVyU2V0JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFRpY2tldElEICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXRJRCcgKTsKICAgICAgICBteSAkU2F2ZURlZmF1bHRzICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVEZWZhdWx0cycgKTsKICAgICAgICBteSBARXZlbnRUeXBlRmlsdGVySURzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJ0V2ZW50VHlwZUZpbHRlcicgKTsKCiAgICAgICAgIyBidWlsZCBzZXNzaW9uIHN0cmluZwogICAgICAgIG15ICRTZXNzaW9uU3RyaW5nID0gJyc7CiAgICAgICAgaWYgKEBFdmVudFR5cGVGaWx0ZXJJRHMpIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJ0V2ZW50VHlwZUZpbHRlcjwnOwogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSBqb2luICcsJywgQEV2ZW50VHlwZUZpbHRlcklEczsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJz4nOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSB0aGUgc2Vzc2lvbgoKICAgICAgICAjIHNhdmUgZGVmYXVsdCBmaWx0ZXIgc2V0dGluZ3MgdG8gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICgkU2F2ZURlZmF1bHRzKSB7CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ0V2ZW50VHlwZUZpbHRlckRlZmF1bHQnLAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRTZXNzaW9uU3RyaW5nLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnRXZlbnRUeXBlRmlsdGVyRGVmYXVsdCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlc3Npb25TdHJpbmcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHR1cm4gb2ZmIGZpbHRlciBleHBsaWNpdGx5IGZvciB0aGlzIHRpY2tldAogICAgICAgIGlmICggJFNlc3Npb25TdHJpbmcgZXEgJycgKSB7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nID0gJ29mZic7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgc2Vzc2lvbgogICAgICAgIG15ICRVcGRhdGUgPSAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gIkV2ZW50VHlwZUZpbHRlciRUaWNrZXRJRCIsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIEpTT04gb3V0cHV0CiAgICAgICAgbXkgJEpTT04gPSAnJzsKICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRXZlbnQgdHlwZSBmaWx0ZXIgc2V0dGluZ3Mgd2VyZSBzYXZlZC4nKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZwogICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewoKICAgICAgICAjIGdldCBhcnRpY2xlIGZpbHRlciBzZXR0aW5ncyBmcm9tIHNlc3Npb24gc3RyaW5nCiAgICAgICAgbXkgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntTZXNzaW9ufXsgJ0FydGljbGVGaWx0ZXInIC4gJFNlbGYtPntUaWNrZXRJRH0gfTsKCiAgICAgICAgIyBzZXQgYXJ0aWNsZSBmaWx0ZXIgZm9yIHRoaXMgdGlja2V0IGZyb20gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICggISRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyApIHsKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntTZXNzaW9ufXtBcnRpY2xlRmlsdGVyRGVmYXVsdH07CiAgICAgICAgfQoKICAgICAgICAjIGRvIG5vdCB1c2UgZGVmYXVsdHMgZm9yIHRoaXMgdGlja2V0IGlmIGZpbHRlciB3YXMgZXhwbGljaXRseSB0dXJuZWQgb2ZmCiAgICAgICAgZWxzaWYgKCAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgZXEgJ29mZicgKSB7CiAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBleHRyYWN0IENvbW11bmljYXRpb25DaGFubmVscwogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nCiAgICAgICAgICAgICYmICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlciA8ICggW148Pl0rICkgPiB9eG1zCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBJRHMgPSBzcGxpdCAvLC8sICQxOwogICAgICAgICAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gPSBcQElEczsKICAgICAgICB9CgogICAgICAgICMgZXh0cmFjdCBDdXN0b21lclZpc2liaWxpdHkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZwogICAgICAgICAgICAmJiAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgPX4gbXsgQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0N1c3RvbWVyVmlzaWJpbGl0eX0gPSAkMTsKICAgICAgICB9CgogICAgICAgICMgZXh0cmFjdCBBcnRpY2xlU2VuZGVyVHlwZUlEcwogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nCiAgICAgICAgICAgICYmICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlciA8ICggW148Pl0rICkgPiB9eG1zCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBJRHMgPSBzcGxpdCAvLC8sICQxOwogICAgICAgICAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gPSBcQElEczsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGV2ZW50IHR5cGUgZmlsdGVyIHNldHRpbmdzIGZyb20gc2Vzc2lvbiBzdHJpbmcKICAgICAgICBteSAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICRTZWxmLT57ICdFdmVudFR5cGVGaWx0ZXInIC4gJFNlbGYtPntUaWNrZXRJRH0gfTsKCiAgICAgICAgIyBzZXQgYXJ0aWNsZSBmaWx0ZXIgZm9yIHRoaXMgdGlja2V0IGZyb20gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICggISRFdmVudFR5cGVGaWx0ZXJTZXNzaW9uU3RyaW5nICkgewogICAgICAgICAgICAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyRGVmYXVsdH07CiAgICAgICAgfQoKICAgICAgICAjIGRvIG5vdCB1c2UgZGVmYXVsdHMgZm9yIHRoaXMgdGlja2V0IGlmIGZpbHRlciB3YXMgZXhwbGljaXRseSB0dXJuZWQgb2ZmCiAgICAgICAgZWxzaWYgKCAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyBlcSAnb2ZmJyApIHsKICAgICAgICAgICAgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcgPSAnJzsKICAgICAgICB9CgogICAgICAgICMgU2V0IGFydGljbGUgZmlsdGVyIHdpdGggdmFsdWUgaWYgaXQgZXhpc3RzLgogICAgICAgIGlmICgKICAgICAgICAgICAgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcKICAgICAgICAgICAgJiYgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcgPX4gbXsgRXZlbnRUeXBlRmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgQElEcyA9IHNwbGl0IC8sLywgJDE7CiAgICAgICAgICAgICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSA9IFxASURzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgcmV0dXJuIGpvaW4gJycsCiAgICAgICAgJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBWYWx1ZSAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICksCiAgICAgICAgJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhciwKICAgICAgICAkU2VsZi0+TWFza0FnZW50Wm9vbSgKICAgICAgICAgICAgVGlja2V0ICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBBY2xBY3Rpb24gPT4gXCVBY2xBY3Rpb24KICAgICAgICApLAogICAgICAgICRMYXlvdXRPYmplY3QtPkZvb3RlcjsKfQoKc3ViIE1hc2tBZ2VudFpvb20gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGlja2V0ICAgID0gJXsgJFBhcmFte1RpY2tldH0gfTsKICAgIG15ICVBY2xBY3Rpb24gPSAleyAkUGFyYW17QWNsQWN0aW9ufSB9OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgQ3JlYXRlIGEgbGlzdCBvZiBhcnRpY2xlIHNlbmRlciB0eXBlcyBmb3IgbG9va3VwCiAgICBteSAlQXJ0aWNsZVNlbmRlclR5cGVMaXN0ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTGlzdCgpOwoKICAgICMgZWxzZSBzaG93IG5vcm1hbCB0aWNrZXQgem9vbSB2aWV3CiAgICAjIGZldGNoIGFsbCBtb3ZlIHF1ZXVlcwogICAgbXkgJU1vdmVRdWV1ZXMgPSAkVGlja2V0T2JqZWN0LT5Nb3ZlTGlzdCgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQWN0aW9uICAgPT4gJ0FnZW50VGlja2V0TW92ZScsCiAgICAgICAgVHlwZSAgICAgPT4gJ21vdmVfaW50bycsCiAgICApOwoKICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdlbmVyYXRlIHNob3duIGFydGljbGVzCiAgICBteSAkTGltaXQgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1heEFydGljbGVzUGVyUGFnZScpOwoKICAgIG15ICRPcmRlciA9ICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IGVxICdyZXZlcnNlJyA/ICdERVNDJyA6ICdBU0MnOwogICAgbXkgJFBhZ2U7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgYXJ0aWNsZSBwYWdlCiAgICBteSAkQXJ0aWNsZVBhZ2UgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXJ0aWNsZVBhZ2UnICk7CgogICAgbXkgJElzVmlzaWJsZUZvckN1c3RvbWVyOwogICAgaWYgKCBkZWZpbmVkICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDdXN0b21lclZpc2liaWxpdHl9ICkgewogICAgICAgICRJc1Zpc2libGVGb3JDdXN0b21lciA9ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDdXN0b21lclZpc2liaWxpdHl9OwogICAgfQoKICAgICMgR2V0IGFsbCBhcnRpY2xlcy4KICAgIG15IEBBcnRpY2xlQm94QWxsID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+ICRJc1Zpc2libGVGb3JDdXN0b21lciwKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzICA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICApOwoKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gKSApIHsKICAgICAgICBteSAlRmlsdGVyID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9OwoKICAgICAgICBAQXJ0aWNsZUJveEFsbCA9IGdyZXAgeyAkRmlsdGVyeyAkXy0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gfSBAQXJ0aWNsZUJveEFsbDsKICAgIH0KCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0FydGljbGVTZW5kZXJUeXBlSUR9ICkgKSB7CiAgICAgICAgbXkgJUZpbHRlciA9IG1hcCB7ICRfID0+IDEgfSBAeyAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gfTsKCiAgICAgICAgQEFydGljbGVCb3hBbGwgPSBncmVwIHsgJEZpbHRlcnsgJF8tPntTZW5kZXJUeXBlSUR9IH0gfSBAQXJ0aWNsZUJveEFsbDsKICAgIH0KCiAgICBpZiAoICRPcmRlciBlcSAnREVTQycgKSB7CiAgICAgICAgQEFydGljbGVCb3hBbGwgPSByZXZlcnNlIEBBcnRpY2xlQm94QWxsOwogICAgfQoKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdzT2ZUaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIG15ICRBcnRpY2xlSUQ7CgogICAgaWYgKCAkU2VsZi0+e0FydGljbGVJRH0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlSURzID0gbWFwIHsgJF8tPntBcnRpY2xlSUR9IH0gQEFydGljbGVCb3hBbGw7CgogICAgICAgIG15ICVBcnRpY2xlSW5kZXg7CiAgICAgICAgQEFydGljbGVJbmRleHtAQXJ0aWNsZUlEc30gPSAoIDAgLi4gJCNBcnRpY2xlSURzICk7CgogICAgICAgIG15ICRJbmRleCA9ICRBcnRpY2xlSW5kZXh7ICRTZWxmLT57QXJ0aWNsZUlEfSB9OwogICAgICAgICRJbmRleCAvLz0gMDsKICAgICAgICAkUGFnZSA9IGludCggJEluZGV4IC8gJExpbWl0ICkgKyAxOwogICAgfQogICAgZWxzaWYgKCRBcnRpY2xlUGFnZSkgewogICAgICAgICRQYWdlID0gJEFydGljbGVQYWdlOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgRmluZCBsYXRlc3Qgbm90IHNlZW4gYXJ0aWNsZS4KICAgICAgICBBUlRJQ0xFOgogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3hBbGwpIHsKCiAgICAgICAgICAgICMgSWdub3JlIHN5c3RlbSBzZW5kZXIgdHlwZS4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Ok5ld0FydGljbGVJZ25vcmVTeXN0ZW1TZW5kZXInKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGUtPntTZW5kZXJUeXBlSUR9IH0gZXEgJ3N5c3RlbScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBBUlRJQ0xFOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgJEFydGljbGVGbGFnc3sgJEFydGljbGUtPntBcnRpY2xlSUR9IH0tPntTZWVufTsKICAgICAgICAgICAgJEFydGljbGVJRCA9ICRBcnRpY2xlLT57QXJ0aWNsZUlEfTsKCiAgICAgICAgICAgIG15IEBBcnRpY2xlSURzID0gbWFwIHsgJF8tPntBcnRpY2xlSUR9IH0gQEFydGljbGVCb3hBbGw7CgogICAgICAgICAgICBteSAlQXJ0aWNsZUluZGV4OwogICAgICAgICAgICBAQXJ0aWNsZUluZGV4e0BBcnRpY2xlSURzfSA9ICggMCAuLiAkI0FydGljbGVJRHMgKTsKCiAgICAgICAgICAgIG15ICRJbmRleCA9ICRBcnRpY2xlSW5kZXh7JEFydGljbGVJRH07CiAgICAgICAgICAgICRQYWdlID0gaW50KCAkSW5kZXggLyAkTGltaXQgKSArIDE7CgogICAgICAgICAgICBsYXN0IEFSVElDTEU7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewogICAgICAgICAgICAkUGFnZSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgV2UgbmVlZCB0byBmaW5kIG91dCB3aGV0aGVyIHBhZ2luYXRpb24gaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LgogICAgIyBUaGUgZWFzaWVzdCB3YXkgd291bGQgYmUgY291bnQgdGhlIGFydGljbGVzLCBidXQgdGhhdCB3b3VsZCBzbG93CiAgICAjIGRvd24gdGhlIG1vc3QgY29tbW9uIGNhc2UgKGZld2VyIGFydGljbGVzIHRoYW4gJExpbWl0IGluIHRoZSB0aWNrZXQpLgogICAgIyBTbyBpbnN0ZWFkIHdlIHVzZSB0aGUgZm9sbG93aW5nIHRyaWNrOgogICAgIyAxKSBpZiB0aGUgJFBhZ2UgPiAxLCB3ZSBuZWVkIHBhZ2luYXRpb24KICAgICMgMikgaWYgbm90LCByZXF1ZXN0ICRMaW1pdCArIDEgYXJ0aWNsZXMuIElmICRMaW1pdCArIDEgYXJlIGFjdHVhbGx5CiAgICAjICAgIHJldHVybmVkLCBwYWdpbmF0aW9uIGlzIG5lY2Vzc2FyeQogICAgbXkgJE5lZWRQYWdpbmF0aW9uOwoKICAgIG15IEBBcnRpY2xlQm94ID0gJFNlbGYtPl9BcnRpY2xlQm94R2V0KAogICAgICAgIFBhZ2UgICAgICAgICAgPT4gJFBhZ2UsCiAgICAgICAgQXJ0aWNsZUJveEFsbCA9PiBcQEFydGljbGVCb3hBbGwsCiAgICAgICAgTGltaXQgICAgICAgICA9PiAkTGltaXQsCiAgICApOwoKICAgIGlmICggIUBBcnRpY2xlQm94ICYmICRQYWdlID4gMSApIHsKCiAgICAgICAgIyBJZiB0aGUgcGFnZSBhcmd1bWVudCBpcyBwYXN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHBhZ2VzLgogICAgICAgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBuZXcgYXJ0aWNsZSBmaWx0ZXIgd2FzIGFkZGVkLgogICAgICAgICMgVHJ5IHRvIGdldCByZXN1bHRzIGZvciB0aGUgMXN0IHBhZ2UuCgogICAgICAgIEBBcnRpY2xlQm94ID0gJFNlbGYtPl9BcnRpY2xlQm94R2V0KAogICAgICAgICAgICBQYWdlICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEFydGljbGVCb3hBbGwgPT4gXEBBcnRpY2xlQm94QWxsLAogICAgICAgICAgICBMaW1pdCAgICAgICAgID0+ICRMaW1pdCwKICAgICAgICApOwogICAgfQoKICAgIGlmICggQEFydGljbGVCb3ggPiAkTGltaXQgKSB7CiAgICAgICAgcG9wIEBBcnRpY2xlQm94OwogICAgICAgICROZWVkUGFnaW5hdGlvbiA9IDE7CiAgICB9CiAgICBlbHNpZiAoICRQYWdlID09IDEgJiYgc2NhbGFyIEBBcnRpY2xlQm94QWxsIDw9ICRMaW1pdCApIHsKICAgICAgICAkTmVlZFBhZ2luYXRpb24gPSAwOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE5lZWRQYWdpbmF0aW9uID0gMTsKICAgIH0KCiAgICAkUGFnZSB8fD0gMTsKCiAgICBteSAkUGFnZXM7CiAgICBpZiAoJE5lZWRQYWdpbmF0aW9uKSB7CiAgICAgICAgJFBhZ2VzID0gY2VpbCggc2NhbGFyIEBBcnRpY2xlQm94QWxsIC8gJExpbWl0ICk7CiAgICB9CgogICAgbXkgJEFydGljbGVJREZvdW5kID0gMDsKICAgIEFSVElDTEU6CiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlQm94KSB7CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkU2VsZi0+e0FydGljbGVJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZS0+e0FydGljbGVJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICRTZWxmLT57QXJ0aWNsZUlEfSBuZSAkQXJ0aWNsZS0+e0FydGljbGVJRH07CgogICAgICAgICRBcnRpY2xlSURGb3VuZCA9IDE7CiAgICB9CgogICAgIyBnZXQgc2VsZWN0ZWQgb3IgbGFzdCBjdXN0b21lciBhcnRpY2xlCiAgICBpZiAoJEFydGljbGVJREZvdW5kKSB7CiAgICAgICAgJEFydGljbGVJRCA9ICRTZWxmLT57QXJ0aWNsZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgICAgIGlmIChAQXJ0aWNsZUJveCkgewoKICAgICAgICAgICAgICAgICMgc2V0IGZpcnN0IGxpc3RlZCBhcnRpY2xlIGFzIGZhbGxiYWNrCiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVCb3hbMF0tPntBcnRpY2xlSUR9OwoKICAgICAgICAgICAgICAgICMgc2V0IGxhc3QgY3VzdG9tZXIgYXJ0aWNsZSBhcyBzZWxlY3RlZCBhcnRpY2xlIHJlcGxhY2luZyBsYXN0IHNldAogICAgICAgICAgICAgICAgQVJUSUNMRVRNUDoKICAgICAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlVG1wLT57U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH07CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgQVJUSUNMRVRNUCBpZiAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSBlcSAncmV2ZXJzZSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgZXhwYW5kIHZpZXcgaXMgdXNhYmxlIChvbmx5IGZvciBsZXNzIHRoZW4gNDAwIGFydGljbGUpCiAgICAjIGlmIHlvdSBoYXZlIG1vcmUgYXJ0aWNsZXMgaXMgZ29pbmcgdG8gYmUgc2xvdyBhbmQgbm90IHVzYWJsZQogICAgbXkgJEFydGljbGVNYXhMaW1pdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWF4QXJ0aWNsZXNab29tRXhwYW5kJykKICAgICAgICAvLyA0MDA7CiAgICBpZiAoICRTZWxmLT57Wm9vbUV4cGFuZH0gJiYgJCNBcnRpY2xlQm94ID4gJEFydGljbGVNYXhMaW1pdCApIHsKICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMDsKICAgIH0KCiAgICAjIGdldCBzaG93biBhcnRpY2xlKHMpCiAgICBteSBAQXJ0aWNsZUJveFNob3duOwogICAgaWYgKCAhJFNlbGYtPntab29tRXhwYW5kfSApIHsKICAgICAgICBBUlRJQ0xFQk9YOgogICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUlEIGVxICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVCb3hTaG93biwgJEFydGljbGVUbXA7CiAgICAgICAgICAgICAgICBsYXN0IEFSVElDTEVCT1g7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBAQXJ0aWNsZUJveFNob3duID0gQEFydGljbGVCb3g7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGFnZSBkZXNpZ24KICAgICRUaWNrZXR7QWdlfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgIEFnZSAgID0+ICRUaWNrZXR7QWdlfSwKICAgICAgICBTcGFjZSA9PiAnICcKICAgICk7CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICVXaWRnZXRzOwogICAgbXkgJUFzeW5jV2lkZ2V0QWN0aW9uczsKICAgIFdJREdFVDoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9IC8vIHt9IH0gKSB7CiAgICAgICAgbXkgJENvbmZpZyA9ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9LT57JEtleX07CgogICAgICAgIGlmICggJENvbmZpZy0+e0FzeW5jfSApIHsKICAgICAgICAgICAgaWYgKCAhJENvbmZpZy0+e0xvY2F0aW9ufSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBjb25maWd1cmF0aW9uIGZvciAkQ29uZmlnLT57TW9kdWxlfSBtdXN0IGNvbnRhaW4gYSBMb2NhdGlvbiwgYmVjYXVzZSBpdCBpcyBtYXJrZWQgYXMgQXN5bmMuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkRWxlbWVudElEID0gJ0FzeW5jXycgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRLZXkpOwogICAgICAgICAgICBwdXNoIEB7ICRXaWRnZXRzeyAkQ29uZmlnLT57TG9jYXRpb259IH0gfSwgewogICAgICAgICAgICAgICAgQXN5bmMgPT4gMSwKICAgICAgICAgICAgICAgIFJhbmsgID0+ICRDb25maWctPntSYW5rfSB8fCAkS2V5LAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgICAgIEVsZW1lbnRJRCA9PiAkRWxlbWVudElELAogICAgICAgICAgICB9OwogICAgICAgICAgICAkQXN5bmNXaWRnZXRBY3Rpb25zeyRFbGVtZW50SUR9ID0gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPUxvYWRXaWRnZXQ7IgogICAgICAgICAgICAgICAgLiAiVGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07RWxlbWVudElEPSRFbGVtZW50SUQiOwogICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICB9CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSBldmFsIHsgJE1haW5PYmplY3QtPlJlcXVpcmUoICRDb25maWctPntNb2R1bGV9ICkgfTsKCiAgICAgICAgbmV4dCBXSURHRVQgdW5sZXNzICRTdWNjZXNzOwoKICAgICAgICBteSAkTW9kdWxlID0gZXZhbCB7ICRDb25maWctPntNb2R1bGV9LT5uZXcoICRTZWxmLT4lKiApIH07CiAgICAgICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIm5ldygpIG9mIFdpZGdldCBtb2R1bGUgJENvbmZpZy0+e01vZHVsZX0gbm90IHN1Y2Nlc3NmdWwhIiwKCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICB9CgogICAgICAgIG15ICRXaWRnZXRPdXRwdXQgPSAkTW9kdWxlLT5SdW4oCiAgICAgICAgICAgIFRpY2tldCAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgQWNsQWN0aW9uID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBDb25maWcgICAgPT4gJENvbmZpZywKICAgICAgICApOwoKICAgICAgICBuZXh0IFdJREdFVCB1bmxlc3MgJFdpZGdldE91dHB1dDsKCiAgICAgICAgJFdpZGdldE91dHB1dC0+e1Jhbmt9IC8vPSAkS2V5OwogICAgICAgIG15ICRMb2NhdGlvbiA9ICRXaWRnZXRPdXRwdXQtPntMb2NhdGlvbn0gfHwgJENvbmZpZy0+e0xvY2F0aW9ufTsKICAgICAgICBwdXNoIEB7ICRXaWRnZXRzeyRMb2NhdGlvbn0gfSwgJFdpZGdldE91dHB1dDsKICAgIH0KICAgIGZvciBteSAkTG9jYXRpb24gKCBzb3J0IGtleXMgJVdpZGdldHMgKSB7CiAgICAgICAgJFBhcmFteyAkTG9jYXRpb24gLiAnV2lkZ2V0cycgfSA9IFsKICAgICAgICAgICAgc29ydCB7ICRhLT57UmFua30gY21wICRiLT57UmFua30gfSBAeyAkV2lkZ2V0c3skTG9jYXRpb259IH0KICAgICAgICBdOwogICAgfQogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdBc3luY1dpZGdldEFjdGlvbnMnLAogICAgICAgIFZhbHVlID0+IFwlQXN5bmNXaWRnZXRBY3Rpb25zLAogICAgKTsKCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtIb29rfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJykgfHwgJ1RpY2tldCMnOwoKICAgICMgb25seSBzaG93IGFydGljbGUgdHJlZSBpZiBhcnRpY2xlcyBhcmUgcHJlc2VudCwKICAgICMgb3IgaWYgYSBmaWx0ZXIgaXMgc2V0IChzbyB0aGF0IHRoZSB1c2VyIGhhcyB0aGUgb3B0aW9uIHRvCiAgICAjIGRpc2FibGUgdGhlIGZpbHRlcikKICAgIGlmICggQEFydGljbGVCb3ggfHwgJFNlbGYtPntBcnRpY2xlRmlsdGVyfSApIHsKCiAgICAgICAgbXkgJFBhZ2luYXRpb247CgogICAgICAgIGlmICgkTmVlZFBhZ2luYXRpb24pIHsKICAgICAgICAgICAgJFBhZ2luYXRpb24gPSB7CiAgICAgICAgICAgICAgICBQYWdlcyAgICAgICA9PiAkUGFnZXMsCiAgICAgICAgICAgICAgICBDdXJyZW50UGFnZSA9PiAkUGFnZSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGFydGljbGUgdHJlZQogICAgICAgICRQYXJhbXtBcnRpY2xlVHJlZX0gPSAkU2VsZi0+X0FydGljbGVUcmVlKAogICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgQXJ0aWNsZUZsYWdzICAgICAgPT4gXCVBcnRpY2xlRmxhZ3MsCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIEFydGljbGVNYXhMaW1pdCAgID0+ICRBcnRpY2xlTWF4TGltaXQsCiAgICAgICAgICAgIEFydGljbGVCb3ggICAgICAgID0+IFxAQXJ0aWNsZUJveCwKICAgICAgICAgICAgUGFnaW5hdGlvbiAgICAgICAgPT4gJFBhZ2luYXRpb24sCiAgICAgICAgICAgIFBhZ2UgICAgICAgICAgICAgID0+ICRQYWdlLAogICAgICAgICAgICBBcnRpY2xlQ291bnQgICAgICA9PiBzY2FsYXIgQEFydGljbGVCb3gsCiAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBTdGFuZGFyZFJlc3BvbnNlcyA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7QW5zd2VyfSwKICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGFydGljbGVzIGl0ZW1zCiAgICBpZiAoICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlSURzOwogICAgICAgICRQYXJhbXtBcnRpY2xlSXRlbXN9ID0gJyc7CgogICAgICAgIG15ICRBcnRpY2xlV2lkZ2V0c0hUTUwgPSAnJzsKCiAgICAgICAgQVJUSUNMRToKICAgICAgICBmb3IgbXkgJEFydGljbGVUbXAgKEBBcnRpY2xlQm94U2hvd24pIHsKICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZVRtcC0+JSo7CgogICAgICAgICAgICAkQXJ0aWNsZVdpZGdldHNIVE1MIC49ICRTZWxmLT5fQXJ0aWNsZUl0ZW0oCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFydGljbGUgICAgICAgICAgID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgU3RhbmRhcmRSZXNwb25zZXMgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0Fuc3dlcn0sCiAgICAgICAgICAgICAgICBTdGFuZGFyZEZvcndhcmRzICA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7Rm9yd2FyZH0sCiAgICAgICAgICAgICAgICBBY3R1YWxBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1N0YXRpYycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQEFydGljbGVJRHMsICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfTsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZUlEcycsCiAgICAgICAgICAgIFZhbHVlID0+IFxAQXJ0aWNsZUlEcywKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01lbnVJdGVtcycsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TWVudUl0ZW1zfSwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17QXJ0aWNsZUl0ZW1zfSAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRab29tJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQXJ0aWNsZVdpZGdldHNIVE1MID0+ICRBcnRpY2xlV2lkZ2V0c0hUTUwsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgaWYgKCAkU2VsZi0+e1pvb21FeHBhbmR9ICYmICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKCiAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRJdGVtTWFya0FzU2VlbicsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG51bWJlciBvZiBhcnRpY2xlcwogICAgJFBhcmFte0FydGljbGVDb3VudH0gPSBzY2FsYXIgQEFydGljbGVCb3g7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSGVhZGVyJywKICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICApOwoKICAgIG15ICVBY3Rpb25Mb29rdXA7CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBydW4gdGlja2V0IG1lbnUgbW9kdWxlcwogICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVNZW51cyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWVudU1vZHVsZScpIH07CiAgICAgICAgbXkgJU1lbnVDbHVzdGVyczsKICAgICAgICBteSAlWm9vbU1lbnVJdGVtczsKCiAgICAgICAgTUVOVToKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgIG15ICRJdGVtID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0LAogICAgICAgICAgICAgICAgQUNMICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQ29uZmlnID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IE1FTlUgdW5sZXNzICRJdGVtOwoKICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57UG9wdXBUeXBlfSApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gIkFzUG9wdXAgUG9wdXBUeXBlXyRNZW51c3skTWVudX0tPntQb3B1cFR5cGV9IjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57QWN0aW9ufSApIHsKICAgICAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7ICRNZW51c3skTWVudX0tPntBY3Rpb259IH0gPSB7CiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJEl0ZW0tPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAkSXRlbS0+e0NsYXNzfSwKICAgICAgICAgICAgICAgICAgICBMaW5rUGFyYW0gICAgICA9PiAkSXRlbS0+e0xpbmtQYXJhbX0sCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gJEl0ZW0tPntEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSggJEl0ZW0tPntOYW1lfSApLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJOYW1lfSApIHsKCiAgICAgICAgICAgICAgICAkWm9vbU1lbnVJdGVtc3skTWVudX0gPSAkSXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHRoZSBjb25maWd1cmVkIHByaW9yaXR5IGZvciB0aGlzIGl0ZW0uIFRoZSBsb3dlc3QgQ2x1c3RlclByaW9yaXR5CiAgICAgICAgICAgICAgICAjIHdpdGhpbiB0aGUgc2FtZSBjbHVzdGVyIHdpbnMuCiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHkgPSAkTWVudUNsdXN0ZXJzeyAkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9IH0tPntQcmlvcml0eX0gfHwgMDsKICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntDbHVzdGVyUHJpb3JpdHl9IHx8PSAwOwogICAgICAgICAgICAgICAgaWYgKCAhJFByaW9yaXR5IHx8ICRQcmlvcml0eSAhfiAvXlxkezN9JC8gfHwgJFByaW9yaXR5ID4gJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJQcmlvcml0eX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5ID0gJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJQcmlvcml0eX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkTWVudUNsdXN0ZXJzeyAkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9IH0tPntQcmlvcml0eX0gPSAkUHJpb3JpdHk7CiAgICAgICAgICAgICAgICAkTWVudUNsdXN0ZXJzeyAkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9IH0tPntJdGVtc30tPnskTWVudX0gPSAkSXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRDbHVzdGVyICggc29ydCBrZXlzICVNZW51Q2x1c3RlcnMgKSB7CiAgICAgICAgICAgICRab29tTWVudUl0ZW1zeyAkTWVudUNsdXN0ZXJzeyRDbHVzdGVyfS0+e1ByaW9yaXR5fSAuICRDbHVzdGVyIH0gPSB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ2x1c3RlciwKICAgICAgICAgICAgICAgIFR5cGUgID0+ICdDbHVzdGVyJywKICAgICAgICAgICAgICAgIExpbmsgID0+ICcjJywKICAgICAgICAgICAgICAgIENsYXNzID0+ICdDbHVzdGVyTGluaycsCiAgICAgICAgICAgICAgICBJdGVtcyA9PiAkTWVudUNsdXN0ZXJzeyRDbHVzdGVyfS0+e0l0ZW1zfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgZGlzcGxheSBhbGwgaXRlbXMKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVpvb21NZW51SXRlbXMgKSB7CiAgICAgICAgICAgIGlmICggJFpvb21NZW51SXRlbXN7JEl0ZW19LT57RXh0ZXJuYWxMaW5rfSAmJiAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntFeHRlcm5hbExpbmt9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51RXh0ZXJuYWxMaW5rJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRab29tTWVudUl0ZW1zeyRJdGVtfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkWm9vbU1lbnVJdGVtc3skSXRlbX17Q29uZmlnfXtUeXBlfSAmJiAkWm9vbU1lbnVJdGVtc3skSXRlbX17Q29uZmlnfXtUeXBlfSBlcSAnRm9ybScgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51SXRlbScsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudUZvcm1HZW5lcmljJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRab29tTWVudUl0ZW1zeyRJdGVtfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51SXRlbScsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkWm9vbU1lbnVJdGVtc3skSXRlbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e1R5cGV9IGVxICdDbHVzdGVyJyApIHsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51U3ViQ29udGFpbmVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIG1hcCBvZiBwcmlvcml0aWVzIHZlcnN1cyBzdWJpdGVtcyBiYXNlZCBvbiB0aGUgQ2x1c3RlclByaW9yaXR5IG9mIGVhY2ggc3ViaXRlbQogICAgICAgICAgICAgICAgIyB0aGUgc2V0dGluZ3Mga2V5IG9yZGVyIHByZXZhaWxzIGJldHdlZW4gc3ViaXRlbXMgd2l0aCBlcXVhbCBDbHVzdGVyUHJpb3JpdHkKICAgICAgICAgICAgICAgICMgcHJpb3JpdGllcyBhcmUgYWx3YXlzIGFwcGVuZGVkIGEgc2VxdWVudGlhbCBzdWZmaXggb2YgdHdvIGRpZ2l0cyAoODAwLTAxLCA4MDAtMDIsIDgwMC0wMywgZXRjLikKICAgICAgICAgICAgICAgICMgdGhpcyBlbmZvcmNlcyBkaXN0aW5jdCBtYXAga2V5cyBldmVuIGFtb25nIHN1Yml0ZW1zIHdpdGggdGhlIHNhbWUgQ2x1c3RlclByaW9yaXR5CiAgICAgICAgICAgICAgICBteSAlUHJpb3JpdHlTdWZmaXhlczsKICAgICAgICAgICAgICAgIG15ICVNYXBQcmlvcml0eVRvU3ViSXRlbTsKICAgICAgICAgICAgICAgIGZvciBteSAkU3ViSXRlbSAoIHNvcnQga2V5cyAleyAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntJdGVtc30gfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkSXRlbVByaW9yaXR5ID0gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9LT57JFN1Ykl0ZW19LT57Q2x1c3RlclByaW9yaXR5fTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0rKzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZW5mb3JjZSB0aGUgdHdvIGRpZ2l0cyBzdWZmaXgsIHNpbmNlIDEwIG9yIG1vcmUgc3ViaXRlbXMgYXJlIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSA9fiAvXlxkJC8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9ID0gIjAiIC4gJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlLZXkgPSAkSXRlbVByaW9yaXR5IC4gIi0iIC4gJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgJE1hcFByaW9yaXR5VG9TdWJJdGVteyRQcmlvcml0eUtleX0gPSAkU3ViSXRlbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJlbmRlciBzdWJpdGVtcyBhY2NvcmRpbmcgdG8gdGhlIHByaW9yaXRpZXMgbWFwCiAgICAgICAgICAgICAgICBmb3IgbXkgJFByaW9yaXR5S2V5ICggc29ydCBrZXlzICVNYXBQcmlvcml0eVRvU3ViSXRlbSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkU3ViSXRlbSA9ICRNYXBQcmlvcml0eVRvU3ViSXRlbXskUHJpb3JpdHlLZXl9OwogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51U3ViQ29udGFpbmVySXRlbScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9LT57JFN1Ykl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgTW92ZVF1ZXVlc1N0cmcKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNb3ZlVHlwZScpID1+IC9eZm9ybSQvaSApIHsKICAgICAgICAkTW92ZVF1ZXVlc3swfSAgICAgICAgID0gJy0gJyAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTW92ZScpIC4gJyAtJzsKICAgICAgICAkUGFyYW17TW92ZVF1ZXVlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QWdlbnRRdWV1ZUxpc3RPcHRpb24oCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdEZXN0UXVldWVJRCcsCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgPyAxIDogMCwKICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVNb3ZlUXVldWVzLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnTW9kZXJuaXplIFNtYWxsJywKICAgICAgICAgICAgQ3VycmVudFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICApOwogICAgfQogICAgbXkgJUFjbEFjdGlvbkxvb2t1cCA9IHJldmVyc2UgJUFjbEFjdGlvbjsKICAgIGlmICgKICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+e0FnZW50VGlja2V0TW92ZX0KICAgICAgICAmJiAoICRBY2xBY3Rpb25Mb29rdXB7QWdlbnRUaWNrZXRNb3ZlfSApCiAgICAgICAgKQogICAgewogICAgICAgIG15ICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAnbW92ZScsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17VGlja2V0SUR9ID0gJFRpY2tldHtUaWNrZXRJRH07CiAgICAgICAgaWYgKCRBY2Nlc3MpIHsKICAgICAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1vdmVUeXBlJykgPX4gL15mb3JtJC9pICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW92ZUxpbmsnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVBY2xBY3Rpb24gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdNb3ZlRm9ybScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUFjbEFjdGlvbiB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHtBZ2VudFRpY2tldE1vdmV9ID0gewogICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJ0FjdGlvbj1BZ2VudFRpY2tldE1vdmU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXScsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gVHJhbnNsYXRhYmxlKCdDaGFuZ2UgUXVldWUnKSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUXVldWUnKSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdRdWV1ZScpLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIENoZWNrIGlmIEFnZW50VGlja2V0Q29tcG9zZSBhbmQgQWdlbnRUaWNrZXRGb3J3YXJkIGFyZSBhbGxvd2VkIGFzIGFjdGlvbiAoZm9yIGRpc3BsYXkgb2YgRm9ybURyYWZ0cykuCiAgICBteSAlQWN0aW9uQ29uZmlnID0gKAogICAgICAgIEFnZW50VGlja2V0Q29tcG9zZSA9PiB7CiAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICdBY3Rpb249QWdlbnRUaWNrZXRDb21wb3NlO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV0nLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgTGlua1BhcmFtICAgICAgPT4gJycsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+IFRyYW5zbGF0YWJsZSgnUmVwbHknKSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdSZXBseScpLAogICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgnUmVwbHknKSwKICAgICAgICB9LAogICAgICAgIEFnZW50VGlja2V0Rm9yd2FyZCA9PiB7CiAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICdBY3Rpb249QWdlbnRUaWNrZXRGb3J3YXJkO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV0nLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgTGlua1BhcmFtICAgICAgPT4gJycsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+IFRyYW5zbGF0YWJsZSgnRm9yd2FyZCBhcnRpY2xlIHZpYSBtYWlsJyksCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRm9yd2FyZCcpLAogICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgnRm9yd2FyZCcpLAogICAgICAgIH0sCiAgICApOwogICAgQUNUSU9OOgogICAgZm9yIG15ICRBY3Rpb24gKHF3KEFnZW50VGlja2V0Q29tcG9zZSBBZ2VudFRpY2tldEZvcndhcmQpKSB7CgogICAgICAgIG5leHQgQUNUSU9OIHVubGVzcyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwogICAgICAgIG5leHQgQUNUSU9OIHVubGVzcyAkQWNsQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCAnVGlja2V0OjpGcm9udGVuZDo6JyAuICRBY3Rpb24gKTsKICAgICAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgbmV4dCBBQ1RJT04gdW5sZXNzICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRBY3Rpb25Mb29rdXB7JEFjdGlvbn0gPSAkQWN0aW9uQ29uZmlneyRBY3Rpb259OwogICAgfQoKICAgICMgR2V0IGFuZCBzaG93IGF2YWlsYWJsZSBGb3JtRHJhZnRzLgogICAgbXkgJVNob3duRm9ybURyYWZ0RW50cmllczsKICAgIG15ICRGb3JtRHJhZnRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpLT5Gb3JtRHJhZnRMaXN0R2V0KAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgT2JqZWN0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICk7CiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkRm9ybURyYWZ0TGlzdCkgKSB7CiAgICAgICAgRm9ybURyYWZ0OgogICAgICAgIGZvciBteSAkRm9ybURyYWZ0ICggQHskRm9ybURyYWZ0TGlzdH0gKSB7CiAgICAgICAgICAgIG5leHQgRm9ybURyYWZ0IGlmICEkQWN0aW9uTG9va3VweyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9OwoKICAgICAgICAgICAgcHVzaCBAeyAkU2hvd25Gb3JtRHJhZnRFbnRyaWVzeyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9IH0sICRGb3JtRHJhZnQ7CiAgICAgICAgfQogICAgfQogICAgaWYgKCVTaG93bkZvcm1EcmFmdEVudHJpZXMpIHsKCiAgICAgICAgbXkgJExhc3RBcnRpY2xlOwogICAgICAgIGlmICggJE9yZGVyIGVxICdERVNDJyApIHsKICAgICAgICAgICAgJExhc3RBcnRpY2xlID0gJEFydGljbGVCb3hBbGxbMF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGFzdEFydGljbGUgPSAkQXJ0aWNsZUJveEFsbFstMV07CiAgICAgICAgfQoKICAgICAgICBteSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lOwogICAgICAgIGlmICggJExhc3RBcnRpY2xlLT57Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgIG15ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTGFzdEFydGljbGUtPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgPSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lT2JqZWN0LT5Ub0Vwb2NoKCk7CiAgICAgICAgfQoKICAgICAgICBteSBARm9ybURyYWZ0czsKCiAgICAgICAgZm9yIG15ICRBY3Rpb24gKAogICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7JGF9LT57VHJhbnNsYXRlZE5hbWV9CiAgICAgICAgICAgICAgICAgICAgY21wCiAgICAgICAgICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHskYn0tPntUcmFuc2xhdGVkTmFtZX0KICAgICAgICAgICAgfSBrZXlzICVTaG93bkZvcm1EcmFmdEVudHJpZXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEFjdGlvbkRhdGEgPSAkQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5ICgKICAgICAgICAgICAgICAgIHNvcnQgewogICAgICAgICAgICAgICAgICAgICRhLT57VGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIGNtcAogICAgICAgICAgICAgICAgICAgICAgICAkYi0+e1RpdGxlfQogICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAgICAkYS0+e0Zvcm1EcmFmdElEfQogICAgICAgICAgICAgICAgICAgICAgICA8PT4KICAgICAgICAgICAgICAgICAgICAgICAgJGItPntGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgIH0gQHsgJFNob3duRm9ybURyYWZ0RW50cmllc3skQWN0aW9ufSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlQnl9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlQnl9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2hvd25Gb3JtRHJhZnRBY3Rpb25FbnRyeSA9IHsKICAgICAgICAgICAgICAgICAgICAleyRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5fSwKICAgICAgICAgICAgICAgICAgICAleyRBY3Rpb25EYXRhfSwKCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHB1c2ggQEZvcm1EcmFmdHMsICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRm9ybURyYWZ0VGFibGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEZvcm1EcmFmdHMgPT4gXEBGb3JtRHJhZnRzLAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBjcmVhdGVkIGJ5IGlmIGRpZmZlcmVudCB0aGVuIFVzZXIgSUQgMQogICAgaWYgKCAkVGlja2V0e0NyZWF0ZUJ5fSA+IDEgKSB7CgogICAgICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICAgICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgICAgICRUaWNrZXR7Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoIFVzZXJJRCA9PiAkVGlja2V0e0NyZWF0ZUJ5fSApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDcmVhdGVkQnknLAogICAgICAgICAgICBEYXRhID0+IHslVGlja2V0fSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBubyBhcnRpY2xlcyBibG9jayBpZiB0aWNrZXQgZG9lcyBub3QgY29udGFpbiBhcnRpY2xlcwogICAgaWYgKCAhQEFydGljbGVCb3ggJiYgISRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGludE5vQXJ0aWNsZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiB0aWNrZXQgaXMgbm9ybWFsIG9yIHByb2Nlc3MgdGlja2V0CiAgICBteSAkSXNQcm9jZXNzVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q2hlY2tGb3JQcm9jZXNzVHlwZSgKICAgICAgICAnVGlja2V0SUQnID0+ICRTZWxmLT57VGlja2V0SUR9CiAgICApOwoKICAgICMgY29sbGVjdCBkYXRhIGZvciBvdmVydmlldyB3aWRnZXQKICAgIG15ICVXaWRnZXREYXRhOwogICAgaWYgKCAkSXNQcm9jZXNzVGlja2V0IHx8ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fSApIHsKICAgICAgICAlV2lkZ2V0RGF0YSA9ICRJc1Byb2Nlc3NUaWNrZXQKICAgICAgICAgICAgPyAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e1Byb2Nlc3NEaXNwbGF5fSwKICAgICAgICAgICAgICAgIFdpZGdldFRpdGxlICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc0Rpc3BsYXl9e1dpZGdldFRpdGxlfSwKICAgICAgICAgICAgICAgIFdpZGdldER5bmFtaWNGaWVsZEdyb3VwcyA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldERpc3BsYXl9LAogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgICAgICAgICAgICAgID0+ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fXtXaWRnZXRUaXRsZX0sCiAgICAgICAgICAgICAgICBXaWRnZXREeW5hbWljRmllbGRHcm91cHMgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCgogICAgICAgICAgICApOwoKICAgICAgICAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKQogICAgICAgICAgICAtPnsgKCAkSXNQcm9jZXNzVGlja2V0ID8gJ1Byb2Nlc3NXaWRnZXREeW5hbWljRmllbGQnIDogJ0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZCcgKSB9IC8vIHt9OwogICAgfQoKICAgICMgZGVjaWRlIGlmIHdpZGdldCBzaG91bGQgYmUgc2hvd24KICAgIG15ICRTaG93V2lkZ2V0ID0gMDsKCiAgICAjIGFsd2F5cyBzaG93IGlmIHdlIGhhdmUgYSBwcm9jZXNzIHRpY2tldCBmb3IgYWN0aXZpdHkgZGlhbG9ncwogICAgaWYgKCRJc1Byb2Nlc3NUaWNrZXQpIHsKICAgICAgICAkU2hvd1dpZGdldCA9IDE7CiAgICB9CgogICAgIyBlbHNlIHNob3cgb25seSBpZiBkeW5hbWljIGZpZWxkcyBhcmUgZGVmaW5lZCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaGFzIGEgdmFsdWUKICAgIGVsc2lmICggSXNIYXNoUmVmV2l0aERhdGEoICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH0gKSApIHsKICAgICAgICBERlZBTFVFOgogICAgICAgIGZvciBteSAkRmllbGROYW1lICgga2V5cyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBERlZBTFVFIHVubGVzcyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9eyRGaWVsZE5hbWV9OwogICAgICAgICAgICBuZXh0IERGVkFMVUUgdW5sZXNzICRUaWNrZXR7IkR5bmFtaWNGaWVsZF8kRmllbGROYW1lIn07CgogICAgICAgICAgICAkU2hvd1dpZGdldCA9IDE7CgogICAgICAgICAgICBsYXN0IERGVkFMVUU7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBvdmVydmlldyB3aWRnZXQgd2l0aCBlaXRoZXIgZHluYW1pYyBmaWVsZCBkYXRhIG9yIHdpdGggcHJvY2VzcyBhbmQgYWN0aXZpdHkgZGlhbG9nIGRhdGEKICAgIGlmICgkU2hvd1dpZGdldCkgewoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ092ZXJ2aWV3V2lkZ2V0JywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB0aGUgb3ZlcnZpZXcgd2lkZ2V0IGluIHRoZSBtYWluIHNjcmVlbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgPT4gJFdpZGdldERhdGF7V2lkZ2V0VGl0bGV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY29sbGVjdCBhbmQgcmVuZGVyIHByb2Nlc3MgZGF0YSBpZiBuZWNlc3NhcnkKICAgICAgICBteSAkQWN0aXZpdHlOYW1lOwogICAgICAgIG15ICROZXh0QWN0aXZpdHlEaWFsb2dzOwogICAgICAgIG15ICRQcm9jZXNzRW50aXR5SURGaWVsZDsKICAgICAgICBpZiAoJElzUHJvY2Vzc1RpY2tldCkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIERGIHdoZXJlIHRoZSBQcm9jZXNzRW50aXR5SUQgaXMgc3RvcmVkCiAgICAgICAgICAgICRQcm9jZXNzRW50aXR5SURGaWVsZCA9ICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50UHJvY2Vzc0lEIik7CgogICAgICAgICAgICAjIGdldCB0aGUgREYgd2hlcmUgdGhlIEFjdGl2aXR5RW50aXR5SUQgaXMgc3RvcmVkCiAgICAgICAgICAgIG15ICRBY3Rpdml0eUVudGl0eUlERmllbGQgPSAnRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCJQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudEFjdGl2aXR5SUQiKTsKCiAgICAgICAgICAgIG15ICRBY3Rpdml0eURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5JyktPkFjdGl2aXR5R2V0KAogICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAkVGlja2V0eyRBY3Rpdml0eUVudGl0eUlERmllbGR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgbmV4dCBhY3Rpdml0eSBkaWFsb2dzCiAgICAgICAgICAgIGlmICggJFRpY2tldHskQWN0aXZpdHlFbnRpdHlJREZpZWxkfSApIHsKCiAgICAgICAgICAgICAgICAjIHByb3RlY3Rpb24gYWdhaW5zdCBhdXRvdml2aWZpY2F0aW9uCiAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRBY3Rpdml0eURhdGEpICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQWN0aXZpdHlEYXRhLT57QWN0aXZpdHlEaWFsb2d9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJE5leHRBY3Rpdml0eURpYWxvZ3MgPSAke0FjdGl2aXR5RGF0YX0tPntBY3Rpdml0eURpYWxvZ307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTmV4dEFjdGl2aXR5RGlhbG9ncyA9IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRBY3Rpdml0eU5hbWUgPSAkQWN0aXZpdHlEYXRhLT57TmFtZX07CiAgICAgICAgfQoKICAgICAgICBpZiAoJE5leHRBY3Rpdml0eURpYWxvZ3MpIHsKCiAgICAgICAgICAgICMgZ2V0IEFjdGl2aXR5RGlhbG9nIG9iamVjdAogICAgICAgICAgICBteSAkQWN0aXZpdHlEaWFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5RGlhbG9nJyk7CgogICAgICAgICAgICAjIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgdGhlIG5lZWRlZCBwZXJtaXNzaW9ucyB0byB2aWV3IHRoZQogICAgICAgICAgICAjIGRpZmZlcmVudCBhY3Rpdml0eSBkaWFsb2dzLCBzbyB3ZSBsb29wIG92ZXIgZXZlcnkgYWN0aXZpdHkgZGlhbG9nIGFuZCBjaGVjayBpZiB0aGVyZQogICAgICAgICAgICAjIGlzIGEgcGVybWlzc2lvbiBjb25maWd1cmVkLiBJZiB0aGVyZSBpcyBhIHBlcm1pc3Npb24gY29uZmlndXJlZCB3ZSBjaGVjayB0aGlzCiAgICAgICAgICAgICMgYW5kIGRpc3BsYXkvaGlkZSB0aGUgYWN0aXZpdHkgZGlhbG9nIGxpbmsKICAgICAgICAgICAgbXkgJVBlcm1pc3Npb25SaWdodHM7CiAgICAgICAgICAgIG15ICVQZXJtaXNzaW9uQWN0aXZpdHlEaWFsb2dMaXN0OwogICAgICAgICAgICBBQ1RJVklUWURJQUxPR1BFUk1JU1NJT046CiAgICAgICAgICAgIGZvciBteSAkSW5kZXggKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyROZXh0QWN0aXZpdHlEaWFsb2dzfSApIHsKICAgICAgICAgICAgICAgIG15ICRDdXJyZW50QWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JEluZGV4fTsKICAgICAgICAgICAgICAgIG15ICRDdXJyZW50QWN0aXZpdHlEaWFsb2cgICAgICAgICA9ICRBY3Rpdml0eURpYWxvZ09iamVjdC0+QWN0aXZpdHlEaWFsb2dHZXQoCiAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJEN1cnJlbnRBY3Rpdml0eURpYWxvZ0VudGl0eUlECiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIGFuIGludGVyZmFjZSBsb29rdXAtbGlzdAogICAgICAgICAgICAgICAgbXkgJUludGVyZmFjZUxvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAeyAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57SW50ZXJmYWNlfSB9OwoKICAgICAgICAgICAgICAgIG5leHQgQUNUSVZJVFlESUFMT0dQRVJNSVNTSU9OIGlmICEkSW50ZXJmYWNlTG9va3Vwe0FnZW50SW50ZXJmYWNlfTsKCiAgICAgICAgICAgICAgICBpZiAoICRDdXJyZW50QWN0aXZpdHlEaWFsb2ctPntQZXJtaXNzaW9ufSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBwZXJmb3JtYW5jZS1ib29zdC9jYWNoZQogICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQgJFBlcm1pc3Npb25SaWdodHN7ICRDdXJyZW50QWN0aXZpdHlEaWFsb2ctPntQZXJtaXNzaW9ufSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUGVybWlzc2lvblJpZ2h0c3sgJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259IH0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUGVybWlzc2lvblJpZ2h0c3sgJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQUNUSVZJVFlESUFMT0dQRVJNSVNTSU9OOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkUGVybWlzc2lvbkFjdGl2aXR5RGlhbG9nTGlzdHskSW5kZXh9ID0gJEN1cnJlbnRBY3Rpdml0eURpYWxvZ0VudGl0eUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlZHVjZSBuZXh0IGFjdGl2aXR5IGRpYWxvZ3MgdG8gdGhlIG9uZXMgdGhhdCBoYXZlIHBlcm1pc3Npb25zCiAgICAgICAgICAgICROZXh0QWN0aXZpdHlEaWFsb2dzID0gXCVQZXJtaXNzaW9uQWN0aXZpdHlEaWFsb2dMaXN0OwoKICAgICAgICAgICAgIyBnZXQgQUNMIHJlc3RyaWN0aW9ucwogICAgICAgICAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVBlcm1pc3Npb25BY3Rpdml0eURpYWxvZ0xpc3QsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpdml0eURpYWxvZycsCiAgICAgICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgICAgICV7JE5leHRBY3Rpdml0eURpYWxvZ3N9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05leHRBY3Rpdml0eURpYWxvZ3MnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0FjdGl2aXR5TmFtZScgPT4gJEFjdGl2aXR5TmFtZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCROZXh0QWN0aXZpdHlEaWFsb2dzKSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkTmV4dEFjdGl2aXR5RGlhbG9nS2V5ICggc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJXskTmV4dEFjdGl2aXR5RGlhbG9nc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFjdGl2aXR5RGlhbG9nRGF0YSA9ICRBY3Rpdml0eURpYWxvZ09iamVjdC0+QWN0aXZpdHlEaWFsb2dHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gJ0FnZW50SW50ZXJmYWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkTmV4dEFjdGl2aXR5RGlhbG9ncy0+eyROZXh0QWN0aXZpdHlEaWFsb2dLZXl9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgZGlyZWN0IHN1Ym1pdCBpcyBhY3RpdmUgZm9yIHRoaXMgYWN0aXZpdHkgZGlhbG9nCiAgICAgICAgICAgICAgICAgICAgbXkgJERpcmVjdFN1Ym1pdCA9ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntEaXJlY3RTdWJtaXR9OwogICAgICAgICAgICAgICAgICAgIGlmICggYW55IHsgJEFjdGl2aXR5RGlhbG9nRGF0YS0+e0ZpZWxkc317JF99e0Rpc3BsYXl9IH0ga2V5cyAkQWN0aXZpdHlEaWFsb2dEYXRhLT57RmllbGRzfS0+JSogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREaXJlY3RTdWJtaXQgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCREaXJlY3RTdWJtaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBY3Rpdml0eURpYWxvZ0RpcmVjdFN1Ym1pdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JE5leHRBY3Rpdml0eURpYWxvZ0tleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntTdWJtaXRCdXR0b25UZXh0fSB8fCAkQWN0aXZpdHlEaWFsb2dEYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRUaWNrZXR7JFByb2Nlc3NFbnRpdHlJREZpZWxkfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdBY3Rpdml0eURpYWxvZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JE5leHRBY3Rpdml0eURpYWxvZ0tleX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFRpY2tldHskUHJvY2Vzc0VudGl0eUlERmllbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9BY3Rpdml0eURpYWxvZ3MnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgZnJvbnRlbmQgbW9kdWxlCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEZpbHRlciA9IHsKICAgICAgICAgICAgJXsgJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKS0+e0R5bmFtaWNGaWVsZH0gfHwge30gfSwKICAgICAgICAgICAgJXsKICAgICAgICAgICAgICAgICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH0gfHwge30KICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRpY2tldCBvYmplY3QKICAgICAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgICAgICBPYmplY3RUeXBlICA9PiBbJ1RpY2tldCddLAogICAgICAgICAgICBGaWVsZEZpbHRlciA9PiAkRHluYW1pY0ZpZWxkRmlsdGVyIHx8IHt9LAogICAgICAgICk7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgICMgdG8gc3RvcmUgZHluYW1pYyBmaWVsZHMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBvdmVydmlldyB3aWRnZXQKICAgICAgICBteSAoQEZpZWxkc1dpZGdldCk7CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRpY2tldCBvYmplY3QKICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFkZWZpbmVkICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSBlcSAnJzsKCiAgICAgICAgICAgICMgdXNlIHRyYW5zbGF0aW9uIGhlcmUgdG8gYmUgYWJsZSB0byByZWR1Y2UgdGhlIGNoYXJhY3RlciBsZW5ndGggaW4gdGhlIHRlbXBsYXRlCiAgICAgICAgICAgIG15ICRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSApOwoKICAgICAgICAgICAgaWYgKCAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSApIHsKICAgICAgICAgICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgIyBubyBWYWx1ZU1heENoYXJzIGhlcmUsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcHVzaCBARmllbGRzV2lkZ2V0LCB7CiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9ID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSAgICAgICAgICAgICAgICAgICAgPT4gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICAgICAgICAgICAgID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0iID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGR5bmFtaWMgZmllbGQgbG9va3VwIGhhc2ggZm9yIHdpZGdldCBncm91cHMKICAgICAgICBteSAlRHluYW1pY0ZpZWxkTG9va3VwID0gbWFwIHsgKCAkXy0+e05hbWV9ID0+ICRfICkgfSAkRHluYW1pY0ZpZWxkLT5AKjsKCiAgICAgICAgIyBvdXRwdXQgZHluYW1pYyBmaWVsZHMgcmVnaXN0ZXJlZCBmb3IgYSBncm91cCBpbiB0aGUgb3ZlcnZpZXcgd2lkZ2V0CiAgICAgICAgbXkgQEZpZWxkc0luQUdyb3VwOwogICAgICAgIGZvciBteSAkR3JvdXBOYW1lICgKICAgICAgICAgICAgc29ydCBrZXlzICV7ICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30gfQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkR3JvdXBGaWVsZHNTdHJpbmcgPSAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGRHcm91cHN9eyRHcm91cE5hbWV9OwoKICAgICAgICAgICAgJEdyb3VwRmllbGRzU3RyaW5nID1+IHN7XHN9e314bXNnOwogICAgICAgICAgICBteSBAR3JvdXBGaWVsZHMgPSBzcGxpdCAvLC8sICRHcm91cEZpZWxkc1N0cmluZzsKCiAgICAgICAgICAgIGlmICggJCNHcm91cEZpZWxkcyArIDEgKSB7CgogICAgICAgICAgICAgICAgbXkgJFNob3dHcm91cFRpdGxlID0gMDsKICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGQgKEBGaWVsZHNXaWRnZXQpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCBhbnkgeyAkXyBlcSAkRmllbGQtPntOYW1lfSB9IEBHcm91cEZpZWxkcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRTaG93R3JvdXBUaXRsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRERkNvbmZpZyA9ICREeW5hbWljRmllbGRMb29rdXB7ICRGaWVsZC0+e05hbWV9IH07CgogICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBsZW5zIGZpZWxkIHBvaW50aW5nIHRvIGEgU2V0LCBnZXQgdGhlIGNvbmZpZyBvZiB0aGUgU2V0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJERGQ29uZmlnLT57RmllbGRUeXBlfSBlcSAnTGVucycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkQXR0cmlidXRlREYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCA9PiAkREZDb25maWctPntDb25maWd9e0F0dHJpYnV0ZURGfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGVERi0+e0ZpZWxkVHlwZX0gZXEgJ1NldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERGQ29uZmlnID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQXR0cmlidXRlREYtPiUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkREZDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJERGQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2V0IGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJERGQ29uZmlnLT57RmllbGRUeXBlfSBlcSAnU2V0JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldEZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkU2V0U2VwYXJhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15IEBJbmNsdWRlZEZpZWxkcyA9ICRTZWxmLT5fR2V0SW5jbHVkZWRGaWVsZE9yZGVyZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSA9PiAkREZDb25maWctPntDb25maWd9e0luY2x1ZGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFZhbHVlSW5kZXggKCAwIC4uICQjeyAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlSXRlbSA9ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZC0+e05hbWV9IH1bJFZhbHVlSW5kZXhdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEluY2x1ZGVGaWVsZCAoQEluY2x1ZGVkRmllbGRzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkSW5jbHVkZURGQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRJbmNsdWRlRmllbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRJbmNsdWRlREZDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gVmFsdWVNYXhDaGFycyBoZXJlLCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAlSW5jbHVkZUZpZWxkID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9ID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5ICAgICAgICAgICAgICAgICA9PiAkVmFsdWVJdGVtLT57ICRJbmNsdWRlREZDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICAgICAgICAgID0+ICRJbmNsdWRlREZDb25maWctPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRJbmNsdWRlREZDb25maWctPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEluY2x1ZGVGaWVsZHtOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkSW5jbHVkZUZpZWxke0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEluY2x1ZGVERkNvbmZpZy0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbmNsdWRlRmllbGR7TmFtZX0gPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWFzIGZvciB0aWNrZXQgdGl0bGUsIFRpdGxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRJbmNsdWRlRmllbGR7VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgPT4gJEluY2x1ZGVGaWVsZHtMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRJbmNsdWRlRmllbGR7TmFtZX0iID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkUGxhaW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkSW5jbHVkZUZpZWxke1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARmllbGRzSW5BR3JvdXAsICRGaWVsZC0+e05hbWV9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRWYWx1ZUluZGV4ICE9ICQjeyAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkU2V0VmFsdWVTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFuZGFyZCBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkRmllbGQtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEZpZWxkLT57TGlua30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZpZWxkLT57TmFtZX0gPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWFzIGZvciB0aWNrZXQgdGl0bGUsIFRpdGxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgPT4gJEZpZWxkLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkRmllbGQtPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRGaWVsZC0+e05hbWV9IiA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEZpZWxkc0luQUdyb3VwLCAkRmllbGQtPntOYW1lfTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkU2hvd0dyb3VwVGl0bGUpIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRHcm91cFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkR3JvdXBOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGR5bmFtaWMgZmllbGRzIG5vdCByZWdpc3RlcmVkIGluIGEgZ3JvdXAgaW4gdGhlIG92ZXJ2aWV3IHdpZGdldAogICAgICAgIG15IEBSZW1haW5pbmdGaWVsZHNXaWRnZXQ7CiAgICAgICAgZm9yIG15ICRGaWVsZCAoQEZpZWxkc1dpZGdldCkgewoKICAgICAgICAgICAgaWYgKCBub25lIHsgJF8gZXEgJEZpZWxkLT57TmFtZX0gfSBARmllbGRzSW5BR3JvdXAgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBSZW1haW5pbmdGaWVsZHNXaWRnZXQsICRGaWVsZDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzJywKICAgICAgICApOwoKICAgICAgICBpZiAoICQjUmVtYWluaW5nRmllbGRzV2lkZ2V0ICsgMSApIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRHcm91cFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRmllbGRzIHdpdGggbm8gZ3JvdXAnKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGZvciBteSAkRmllbGQgKEBSZW1haW5pbmdGaWVsZHNXaWRnZXQpIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgKCRERkNvbmZpZykgPSBncmVwIHsgJF8tPntOYW1lfSBlcSAkRmllbGQtPntOYW1lfSB9ICREeW5hbWljRmllbGQtPkAqOwoKICAgICAgICAgICAgIyBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgbGVucyBmaWVsZCBwb2ludGluZyB0byBhIFNldCwgZ2V0IHRoZSBjb25maWcgb2YgdGhlIFNldAogICAgICAgICAgICBpZiAoICRERkNvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ0xlbnMnICkgewogICAgICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZURGID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICAgICAgSUQgPT4gJERGQ29uZmlnLT57Q29uZmlnfXtBdHRyaWJ1dGVERn0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAkQXR0cmlidXRlREYtPntGaWVsZFR5cGV9IGVxICdTZXQnICkgewogICAgICAgICAgICAgICAgICAgICRERkNvbmZpZyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZURGLT4lKiwKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJERGQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRERkNvbmZpZy0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBmaWVsZAogICAgICAgICAgICBpZiAoICRERkNvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ1NldCcgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXRGaWVsZCcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSBASW5jbHVkZWRGaWVsZHMgPSAkU2VsZi0+X0dldEluY2x1ZGVkRmllbGRPcmRlcmVkKAogICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgPT4gJERGQ29uZmlnLT57Q29uZmlnfXtJbmNsdWRlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRWYWx1ZUluZGV4ICggMCAuLiAkI3sgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfSB9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZUl0ZW0gPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9WyRWYWx1ZUluZGV4XTsKCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRJbmNsdWRlRmllbGQgKEBJbmNsdWRlZEZpZWxkcykgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEluY2x1ZGVERkNvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkSW5jbHVkZUZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkSW5jbHVkZURGQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZUl0ZW0tPnsgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIFZhbHVlTWF4Q2hhcnMgaGVyZSwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUluY2x1ZGVGaWVsZCA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbmNsdWRlREZDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgID0+ICRJbmNsdWRlREZDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSAgICAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgICAgICAgICAgICA9PiAkSW5jbHVkZURGQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kSW5jbHVkZURGQ29uZmlnLT57TmFtZX0iID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRJbmNsdWRlRmllbGR7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEluY2x1ZGVGaWVsZHtMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRJbmNsdWRlREZDb25maWctPntMaW5rfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5jbHVkZUZpZWxke05hbWV9ID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlVGlja2V0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkSW5jbHVkZUZpZWxke1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRJbmNsdWRlRmllbGR7TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ID0+ICRJbmNsdWRlRmllbGR7TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kSW5jbHVkZUZpZWxke05hbWV9IiA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEluY2x1ZGVGaWVsZHtWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEZpZWxkc0luQUdyb3VwLCAkRmllbGQtPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVmFsdWVJbmRleCAhPSAkI3sgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFZhbHVlU2VwYXJhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RhbmRhcmQgZmllbGQKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFuZGFyZEZpZWxkJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXInLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRGaWVsZC0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWVsZC0+e05hbWV9ID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRUaXRsZSA9PiAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRGaWVsZC0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgPT4gJEZpZWxkLT57TGlua1ByZXZpZXd9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF8kRmllbGQtPntOYW1lfSIgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBGaWVsZHNJbkFHcm91cCwgJEZpZWxkLT57TmFtZX07CgogICAgICAgICAgICB9CgogICAgICAgIH0KICAgIH0KCiAgICAjIGFydGljbGUgZmlsdGVyIGlzIGFjdGl2YXRlZCBpbiBzeXNjb25maWcKICAgIGlmICggJFNlbGYtPntBcnRpY2xlRmlsdGVyQWN0aXZlfSApIHsKCiAgICAgICAgaWYgKCAkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CgogICAgICAgICAgICAjIGJ1aWxkIGV2ZW50IHR5cGUgbGlzdCBmb3IgZmlsdGVyIGRpYWxvZwogICAgICAgICAgICAkUGFyYW17RXZlbnRUeXBlRmlsdGVyU3RyaW5nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gJFNlbGYtPntIaXN0b3J5VHlwZU1hcHBpbmd9LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJ9LT57RXZlbnRUeXBlSUR9LAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0V2ZW50VHlwZUZpbHRlcicsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgICAgIEtleSAgID0+ICdBcnRpY2xlRmlsdGVyRGlhbG9nJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0V2ZW50VHlwZUZpbHRlckRpYWxvZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgIG15IEBDb21tdW5pY2F0aW9uQ2hhbm5lbHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnKS0+Q2hhbm5lbExpc3QoCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlQ2hhbm5lbHMgPSBtYXAgeyAkXy0+e0NoYW5uZWxJRH0gPT4gJF8tPntEaXNwbGF5TmFtZX0gfSBAQ29tbXVuaWNhdGlvbkNoYW5uZWxzOwoKICAgICAgICAgICAgIyBidWlsZCBhcnRpY2xlIHR5cGUgbGlzdCBmb3IgZmlsdGVyIGRpYWxvZwogICAgICAgICAgICAkUGFyYW17Q2hhbm5lbHN9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJUNoYW5uZWxzLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0NvbW11bmljYXRpb25DaGFubmVsRmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBhcmFte0N1c3RvbWVyVmlzaWJpbGl0eX0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIDAgPT4gVHJhbnNsYXRhYmxlKCdJbnZpc2libGUgb25seScpLAogICAgICAgICAgICAgICAgICAgIDEgPT4gVHJhbnNsYXRhYmxlKCdWaXNpYmxlIG9ubHknKSwKICAgICAgICAgICAgICAgICAgICAyID0+IFRyYW5zbGF0YWJsZSgnVmlzaWJsZSBhbmQgaW52aXNpYmxlJyksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0N1c3RvbWVyVmlzaWJpbGl0eX0gLy8gMiwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgc2VuZGVyIHR5cGVzCiAgICAgICAgICAgIG15ICVBcnRpY2xlU2VuZGVyVHlwZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlbmRlclR5cGVMaXN0KCk7CgogICAgICAgICAgICAjIGJ1aWxkIGFydGljbGUgc2VuZGVyIHR5cGUgbGlzdCBmb3IgZmlsdGVyIGRpYWxvZwogICAgICAgICAgICAkUGFyYW17QXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJTdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJUFydGljbGVTZW5kZXJUeXBlcywKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntBcnRpY2xlU2VuZGVyVHlwZUlEfSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgICAgICAgICAgU29ydCAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcicsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgVGlja2V0IElECiAgICAgICAgICAgICRQYXJhbXtUaWNrZXRJRH0gPSAkU2VsZi0+e1RpY2tldElEfTsKCiAgICAgICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgICAgIEtleSAgID0+ICdBcnRpY2xlRmlsdGVyRGlhbG9nJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVGaWx0ZXJEaWFsb2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiB0aWNrZXQgbmVlZCB0byBiZSBtYXJrZWQgYXMgc2VlbgogICAgbXkgJEFydGljbGVBbGxTZWVuID0gMTsKICAgIEFSVElDTEU6CiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlQm94KSB7CgogICAgICAgICMgaWdub3JlIHN5c3RlbSBzZW5kZXIgdHlwZQogICAgICAgIG5leHQgQVJUSUNMRQogICAgICAgICAgICBpZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6TmV3QXJ0aWNsZUlnbm9yZVN5c3RlbVNlbmRlcicpCiAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlLT57U2VuZGVyVHlwZUlEfSB9IGVxICdzeXN0ZW0nOwoKICAgICAgICAjIGxhc3QgQVJUSUNMRSBpZiBhcnRpY2xlIHdhcyBub3Qgc2hvd24KICAgICAgICBpZiAoICEkQXJ0aWNsZUZsYWdzeyAkQXJ0aWNsZS0+e0FydGljbGVJRH0gfS0+e1NlZW59ICkgewogICAgICAgICAgICAkQXJ0aWNsZUFsbFNlZW4gPSAwOwogICAgICAgICAgICBsYXN0IEFSVElDTEU7CiAgICAgICAgfQogICAgfQoKICAgICMgbWFyayB0aWNrZXQgYXMgc2VlbiBpZiBhbGwgYXJ0aWNsZSBhcmUgc2hvd24KICAgIGlmICgkQXJ0aWNsZUFsbFNlZW4pIHsKICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRGbGFnU2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgS2V5ICAgICAgPT4gJ1NlZW4nLAogICAgICAgICAgICBWYWx1ZSAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdBcnRpY2xlVGFibGVIZWlnaHQnLAogICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntVc2VyVGlja2V0Wm9vbUFydGljbGVUYWJsZUhlaWdodH0sCiAgICApOwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodERlZmF1bHQnLAogICAgICAgIFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6SFRNTEFydGljbGVIZWlnaHREZWZhdWx0JyksCiAgICApOwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodE1heCcsCiAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodE1heCcpLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnTGFuZ3VhZ2UnLAogICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgQXR0YWNobWVudFZpZXdNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgKICAgICAgICAgICAgICAgICdBcnRpY2xlIGNvdWxkIG5vdCBiZSBvcGVuZWQhIFBlcmhhcHMgaXQgaXMgb24gYW5vdGhlciBhcnRpY2xlIHBhZ2U/JwogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICApOwoKICAgICMgaW5pdCBqcwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnVGlja2V0Wm9vbUluaXQnLAogICAgKTsKCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldFpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7ICVQYXJhbSwgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgKTsKfQoKc3ViIF9BcnRpY2xlVHJlZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVUaWNrZXQgICAgICAgPSAleyAkUGFyYW17VGlja2V0fSB9OwogICAgbXkgJUFydGljbGVGbGFncyA9ICV7ICRQYXJhbXtBcnRpY2xlRmxhZ3N9IH07CiAgICBteSBAQXJ0aWNsZUJveCAgID0gQHsgJFBhcmFte0FydGljbGVCb3h9IH07CiAgICBteSAkQXJ0aWNsZUlEICAgID0gJFBhcmFte0FydGljbGVJRH07CiAgICBteSAkVGFibGVDbGFzc2VzOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBidWlsZCB0aHJlYWQgc3RyaW5nCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdUcmVlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBUYWJsZUNsYXNzZXMgPT4gJFRhYmxlQ2xhc3NlcywKICAgICAgICAgICAgWm9vbVRpbWVsaW5lID0+ICRTZWxmLT57Wm9vbVRpbWVsaW5lfSwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRQYXJhbXtQYWdpbmF0aW9ufSAmJiAhJFNlbGYtPntab29tVGltZWxpbmV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlUGFnZXMnLAogICAgICAgICAgICBEYXRhID0+ICRQYXJhbXtQYWdpbmF0aW9ufSwKICAgICAgICApOwogICAgfQoKICAgIG15IEBBcnRpY2xlVmlld3MgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ29sbGFwc2UnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1Nob3cgb25lIGFydGljbGUnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0V4cGFuZCcsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnU2hvdyBhbGwgYXJ0aWNsZXMnKSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIEFkZCB0aW1lbGluZSB2aWV3IG9wdGlvbiBvbmx5IGlmIGVuYWJsZWQuCiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGltZWxpbmVWaWV3RW5hYmxlZCcpICkgewogICAgICAgIHB1c2ggQEFydGljbGVWaWV3cywgewogICAgICAgICAgICBLZXkgICA9PiAnVGltZWxpbmUnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1Nob3cgVGlja2V0IFRpbWVsaW5lIFZpZXcnKSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRBcnRpY2xlVmlld1NlbGVjdGVkID0gJ0NvbGxhcHNlJzsKICAgIGlmICggJFNlbGYtPntab29tRXhwYW5kfSApIHsKICAgICAgICAkQXJ0aWNsZVZpZXdTZWxlY3RlZCA9ICdFeHBhbmQnOwogICAgfQogICAgZWxzaWYgKCAkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CiAgICAgICAgJEFydGljbGVWaWV3U2VsZWN0ZWQgPSAnVGltZWxpbmUnOwogICAgfQoKICAgIG15ICRBcnRpY2xlVmlld1N0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcQEFydGljbGVWaWV3cywKICAgICAgICBTZWxlY3RlZElEICA9PiAkQXJ0aWNsZVZpZXdTZWxlY3RlZCwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0FydGljbGVWaWV3JywKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBTZW5kIGRhdGEgdG8gSlMuCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVWaWV3U3RyZycsCiAgICAgICAgVmFsdWUgPT4gJEFydGljbGVWaWV3U3RyZywKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1pvb21FeHBhbmQnLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57Wm9vbUV4cGFuZH0sCiAgICApOwoKICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZwogICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewoKICAgICAgICAjIGRlZmluZSBoaWdobGlnaHQgc3R5bGUgZm9yIGxpbmtzIGlmIGZpbHRlciBpcyBhY3RpdmUKICAgICAgICBteSAkSGlnaGxpZ2h0U3R5bGUgPSAnbWVudSc7CiAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9ICkgewogICAgICAgICAgICAkSGlnaGxpZ2h0U3R5bGUgPSAnUHJpb3JpdHlJRC01JzsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgYXJ0aWNsZSBmaWx0ZXIgbGlua3MKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEhpZ2hsaWdodFN0eWxlID0+ICRIaWdobGlnaHRTdHlsZSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGFydGljbGUgZmlsdGVyIHJlc2V0IGxpbmsgb25seSBpZiBmaWx0ZXIgaXMgc2V0CiAgICAgICAgaWYgKAogICAgICAgICAgICAoICEkU2VsZi0+e1pvb21UaW1lbGluZX0gJiYgSXNIYXNoUmVmV2l0aERhdGEoICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gKSApCiAgICAgICAgICAgIHx8ICggJFNlbGYtPntab29tVGltZWxpbmV9ICYmICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZUZpbHRlclJlc2V0TGluaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRDb25maWdPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIENyZWF0ZSBhIGxpc3Qgb2YgYXJ0aWNsZSBzZW5kZXIgdHlwZXMgZm9yIGxvb2t1cAogICAgbXkgJUFydGljbGVTZW5kZXJUeXBlTGlzdCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VuZGVyVHlwZUxpc3QoKTsKCiAgICAjIHNob3cgYXJ0aWNsZSB0cmVlCiAgICBpZiAoICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlTGlzdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgWm9vbUV4cGFuZFNvcnRPcmRlciA9PiAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSBlcSAncmV2ZXJzZScgPyAnRGVzY2VuZGluZycgOiAnQXNjZW5kaW5nJywKICAgICAgICAgICAgICAgIFRhYmxlQ2xhc3NlcyAgICAgICAgPT4gJFRhYmxlQ2xhc3NlcywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoaW5nIGFjY291bnRlZCB0aW1lcyBvZiBhbGwgYXJ0aWNsZXMgdG8gY2hlY2sgaWYgd2UgZGlzcGxheSB0aGUgY29sdW1uCiAgICAgICAgbXkgJUFydGljbGVBY2NvdW50ZWRUaW1lczsKICAgICAgICBteSAkU2hvd1RpbWVVbml0cyA9IDA7CiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ317QXJ0aWNsZUxpc3RTaG93VGltZVVuaXRzfSApIHsKICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlVG1wIChAQXJ0aWNsZUJveCkgewoKICAgICAgICAgICAgICAgICMgR2V0IGFjY291bnRlZCB0aW1lIGZvciBhcnRpY2xlIHVzaW5nIEFydGljbGVBY2NvdW50ZWRUaW1lR2V0CiAgICAgICAgICAgICAgICAkQXJ0aWNsZUFjY291bnRlZFRpbWVzeyAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH0gfSA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlQWNjb3VudGVkVGltZUdldCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVUbXAtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkU2hvd1RpbWVVbml0cyA9ICggYW55IHsgJF8gIT0gMCB9IHZhbHVlcyAlQXJ0aWNsZUFjY291bnRlZFRpbWVzICkgPyAxIDogMDsKICAgICAgICAgICAgaWYgKCRTaG93VGltZVVuaXRzKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdEhlYWRlcicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBBUlRJQ0xFOgogICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZVRtcC0+JSo7CgogICAgICAgICAgICAjIGFydGljbGUgZmlsdGVyIGlzIGFjdGl2YXRlZCBpbiBzeXNjb25maWcgYW5kIHRoZXJlIGFyZSBhcnRpY2xlcwogICAgICAgICAgICAjIHRoYXQgcGFzc2VkIHRoZSBmaWx0ZXIKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9ICYmICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntTaG93bkFydGljbGVJRHN9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBzaG93IGFydGljbGUgaW4gdHJlZSBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e1Nob3duQXJ0aWNsZUlEc30tPnsgJEFydGljbGV7QXJ0aWNsZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3cgYXJ0aWNsZSBmbGFncwogICAgICAgICAgICBteSAkQ2xhc3MgICAgICA9ICcnOwogICAgICAgICAgICBteSAkQ2xhc3NSb3cgICA9ICcnOwogICAgICAgICAgICBteSAkTmV3QXJ0aWNsZSA9IDA7CgogICAgICAgICAgICAjIGlnbm9yZSBzeXN0ZW0gc2VuZGVyIHR5cGVzCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkQXJ0aWNsZUZsYWdzeyAkQXJ0aWNsZXtBcnRpY2xlSUR9IH0tPntTZWVufQogICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6TmV3QXJ0aWNsZUlnbm9yZVN5c3RlbVNlbmRlcicpCiAgICAgICAgICAgICAgICAgICAgfHwgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Ok5ld0FydGljbGVJZ25vcmVTeXN0ZW1TZW5kZXInKQogICAgICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xle1NlbmRlclR5cGVJRH0gfSBuZSAnc3lzdGVtJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkTmV3QXJ0aWNsZSA9IDE7CgogICAgICAgICAgICAgICAgIyBzaG93IHRpY2tldCBmbGFncwoKICAgICAgICAgICAgICAgICMgYWx3YXlzIHNob3cgYXJjaGl2ZWQgdGlja2V0cyBhcyBzZWVuCiAgICAgICAgICAgICAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgICAgLj0gJyBVbnJlYWRBcnRpY2xlcyc7CiAgICAgICAgICAgICAgICAgICAgJENsYXNzUm93IC49ICcgVW5yZWFkQXJ0aWNsZXMnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMganVzdCBzaG93IHRpY2tldCBmbGFncyBpZiBhZ2VudCBiZWxvbmdzIHRvIHRoZSB0aWNrZXQKICAgICAgICAgICAgICAgIG15ICRTaG93TWV0YTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1VzZXJJRH0gPT0gJFRpY2tldHtPd25lcklEfQogICAgICAgICAgICAgICAgICAgIHx8ICRTZWxmLT57VXNlcklEfSA9PSAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRTaG93TWV0YSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICEkU2hvd01ldGEgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OldhdGNoZXInKSApIHsKICAgICAgICAgICAgICAgICAgICBteSAlV2F0Y2ggPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRXYXRjaEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJEFydGljbGV7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkV2F0Y2h7ICRTZWxmLT57VXNlcklEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkU2hvd01ldGEgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNob3cgdGlja2V0IGZsYWdzCiAgICAgICAgICAgICAgICBpZiAoJFNob3dNZXRhKSB7CiAgICAgICAgICAgICAgICAgICAgJENsYXNzIC49ICcgUmVtYXJrYWJsZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgLj0gJyBPcmRpbmFyeSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgdGhpcyBpcyB0aGUgc2hvd24gYXJ0aWNsZSAtPT4gc2V0IGNsYXNzIHRvIGFjdGl2ZQogICAgICAgICAgICBpZiAoICRBcnRpY2xlSUQgZXEgJEFydGljbGV7QXJ0aWNsZUlEfSAmJiAhJFNlbGYtPntab29tRXhwYW5kfSApIHsKICAgICAgICAgICAgICAgICRDbGFzc1JvdyAuPSAnIEFjdGl2ZSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRUbXBTdWJqZWN0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3ViamVjdENsZWFuKAoKICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgPT4gJEFydGljbGV7U3ViamVjdH0gfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlQXJ0aWNsZUZpZWxkcyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVGaWVsZHMoCiAgICAgICAgICAgICAgICAlQXJ0aWNsZSwKICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRTaG93VGltZVVuaXRzKSB7CgogICAgICAgICAgICAgICAgbXkgJVRpbWVVbml0RmllbGQgPSAoCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJEFydGljbGVBY2NvdW50ZWRUaW1lc3sgJEFydGljbGVUbXAtPntBcnRpY2xlSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJ1RpbWUgVW5pdCcKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZXtUaW1lVW5pdH0gPSAkQXJ0aWNsZUFjY291bnRlZFRpbWVzeyAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH0gfTsKCiAgICAgICAgICAgICAgICAkQXJ0aWNsZUZpZWxkc3tUaW1lVW5pdH0gPSBcJVRpbWVVbml0RmllbGQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgR2V0IHRyYW5zbWlzc2lvbiBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIGVtYWlsIGFydGljbGVzLgogICAgICAgICAgICBteSAkVHJhbnNtaXNzaW9uU3RhdHVzOwogICAgICAgICAgICBpZiAoICRBcnRpY2xle0NoYW5uZWxOYW1lfSAmJiAkQXJ0aWNsZXtDaGFubmVsTmFtZX0gZXEgJ0VtYWlsJyApIHsKICAgICAgICAgICAgICAgICRUcmFuc21pc3Npb25TdGF0dXMgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoJUFydGljbGUpLT5BcnRpY2xlVHJhbnNtaXNzaW9uU3RhdHVzKAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgd2UgbmVlZCB0byBzaG93IGFsc28gZXhwYW5kL2NvbGxhcHNlIGljb24KICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlQXJ0aWNsZSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlRmllbGRzICAgICAgPT4gXCVBcnRpY2xlRmllbGRzLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NSb3cgICAgICAgICAgID0+ICRDbGFzc1JvdywKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgPT4gJFRtcFN1YmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNtaXNzaW9uU3RhdHVzID0+ICRUcmFuc21pc3Npb25TdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgWm9vbUV4cGFuZCAgICAgICAgID0+ICRTZWxmLT57Wm9vbUV4cGFuZH0sCiAgICAgICAgICAgICAgICAgICAgWm9vbUV4cGFuZFNvcnQgICAgID0+ICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9LAogICAgICAgICAgICAgICAgICAgIFNob3dUaW1lVW5pdHMgICAgICA9PiAkU2hvd1RpbWVVbml0cywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBhcnRpY2xlIGZsYWdzCiAgICAgICAgICAgICMgQWx3YXlzIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBvdGhlciB1c2VycyBhbHNvIGhhdmUgdG8gc2VlIHRoZSBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICBteSAlQXJ0aWNsZUltcG9ydGFudEZsYWdzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnR2V0KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICBpZiAoICRBcnRpY2xlSW1wb3J0YW50RmxhZ3N7SW1wb3J0YW50fSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtSW1wb3J0YW50QXJ0aWNsZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiMgUm90aGVyT1NTIC8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgojVE9ETzogd2hlbiBtZXJnaW5nIHRvIENvcmUsIGlzIHRoZXJlIGEgd2F5IHRvIG1ha2UgYWRkaW5nIG5ldyBmbGFncyBlYXNpZXI/CgogICAgICAgICAgICAjIHNob3cgcGlubmVkIGZsYWcKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUltcG9ydGFudEZsYWdze1Bpbm5lZH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbVBpbm5lZEFydGljbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgojIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKICAgICAgICAgICAgIyBhbHdheXMgc2hvdyBhcmNoaXZlZCB0aWNrZXRzIGFzIHNlZW4KICAgICAgICAgICAgaWYgKCAkTmV3QXJ0aWNsZSAmJiAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAneScgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbU5ld0FydGljbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlQXJ0aWNsZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgojIFJvdGhlck9TUyAvIEFnZW50VGlja2V0QXJ0aWNsZVBpbgojCiMgICAgICAgICAgICAjIEJ1Z2ZpeCBmb3IgSUU3OiBhIHRhYmxlIGNlbGwgc2hvdWxkIG5vdCBiZSBlbXB0eQojICAgICAgICAgICAgIyAoYmVjYXVzZSBvdGhlcndpc2UgdGhlIGNlbGwgYm9yZGVycyBhcmUgbm90IHNob3duKToKIyAgICAgICAgICAgICMgd2UgYWRkIGFuIGVtcHR5IGVsZW1lbnQgaGVyZQojICAgICAgICAgICAgZWxzZSB7CiMgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiMgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTm9OZXdBcnRpY2xlJywKIyAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKIyAgICAgICAgICAgICAgICApOwojICAgICAgICAgICAgfQojCiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgogICAgICAgICAgICAjIERldGVybWluZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbi4KICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZXtDaGFubmVsTmFtZX0gZXEgJ0ludGVybmFsJyApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdUcmVlSXRlbURpcmVjdGlvbkludGVybmFsJyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGV7U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVHJlZUl0ZW1EaXJlY3Rpb25JbmNvbWluZycgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdUcmVlSXRlbURpcmVjdGlvbk91dGdvaW5nJyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEdldCBhdHRhY2htZW50IGluZGV4IChleGNsdWRpbmcgYm9keSBhdHRhY2htZW50cykuCiAgICAgICAgICAgIG15ICVBdG1JbmRleDsKCiAgICAgICAgICAgIGlmICggISRBcnRpY2xle0FydGljbGVEZWxldGVkfSB8fCAkU2VsZi0+e0FydGljbGVTdG9yYWdlfSA9fiBtL0FydGljbGVTdG9yYWdlRlMvICkgewogICAgICAgICAgICAgICAgJUF0bUluZGV4ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCVBcnRpY2xlKS0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9LAogICAgICAgICAgICAgICAgICAgICV7ICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICVBdG1JbmRleCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSglQXJ0aWNsZSktPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkQXJ0aWNsZXtEZWxldGVkVmVyc2lvbklEfSwKICAgICAgICAgICAgICAgICAgICBTb3VyY2VBcnRpY2xlSUQgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9LAogICAgICAgICAgICAgICAgICAgIFZlcnNpb25WaWV3ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQXJ0aWNsZXtBdG1zfSA9IFwlQXRtSW5kZXg7CgogICAgICAgICAgICAjIHNob3cgYXR0YWNobWVudCBpbmZvCiAgICAgICAgICAgICMgQnVnZml4IGZvciBJRTc6IGEgdGFibGUgY2VsbCBzaG91bGQgbm90IGJlIGVtcHR5CiAgICAgICAgICAgICMgKGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjZWxsIGJvcmRlcnMgYXJlIG5vdCBzaG93bik6CiAgICAgICAgICAgICMgd2UgYWRkIGFuIGVtcHR5IGVsZW1lbnQgaGVyZQogICAgICAgICAgICBpZiAoICEkQXJ0aWNsZXtBdG1zfSB8fCAhJXsgJEFydGljbGV7QXRtc30gfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTm9BdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnRzID0gJFNlbGYtPl9Db2xsZWN0QXJ0aWNsZUF0dGFjaG1lbnRzKAogICAgICAgICAgICAgICAgICAgIEFydGljbGUgPT4gXCVBcnRpY2xlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbUF0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+ICRBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgdGltZWxpbmUgdmlldwogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IHRpY2tldCBoaXN0b3J5CiAgICAgICAgbXkgQEhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXJ0aWNsZXMgZm9yIGxhdGVyIHVzZQogICAgICAgIG15IEBUaW1lbGluZUFydGljbGVCb3ggPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICk7CgogICAgICAgIGZvciBteSAkQXJ0aWNsZUl0ZW0gKEBUaW1lbGluZUFydGljbGVCb3gpIHsKICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgJXskQXJ0aWNsZUl0ZW19LAogICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRBcnRpY2xlSXRlbS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEFwcGVuZCBhcnRpY2xlIG1ldGEgZGF0YS4KICAgICAgICAgICAgJEFydGljbGVJdGVtID0gewogICAgICAgICAgICAgICAgJXskQXJ0aWNsZUl0ZW19LAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSAkQXJ0aWNsZXNCeUFydGljbGVJRCA9IHt9OwogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoIHNvcnQgQFRpbWVsaW5lQXJ0aWNsZUJveCApIHsKICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgJXskQXJ0aWNsZX0sCiAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgR2V0IGF0dGFjaG1lbnQgaW5kZXggKGV4Y2x1ZGluZyBib2R5IGF0dGFjaG1lbnRzKS4KICAgICAgICAgICAgbXkgJUF0bUluZGV4ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICV7ICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkQXJ0aWNsZS0+e0F0bXN9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwlQXRtSW5kZXg7CiAgICAgICAgICAgICRBcnRpY2xlLT57QmFja2VuZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpOwogICAgICAgICAgICAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkQXJ0aWNsZS0+e0FydGljbGVJRH0gfSA9ICRBcnRpY2xlOwoKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGVyZSBpcyBIVE1MIGJvZHkgYXR0YWNobWVudC4KICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnRJbmRleEhUTUxCb2R5ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIE9ubHlIVE1MQm9keSA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAoICRBcnRpY2xlLT57SFRNTEJvZHlBdHRhY2htZW50SUR9ICkgPSBzb3J0IGtleXMgJUF0dGFjaG1lbnRJbmRleEhUTUxCb2R5OwogICAgICAgIH0KCiAgICAgICAgIyBkbyBub3QgZGlzcGxheSB0aGVzZSB0eXBlcwogICAgICAgIG15IEBUeXBlc0RvZGdlID0gcXcoCiAgICAgICAgICAgIE1pc2MKICAgICAgICAgICAgQXJjaGl2ZUZsYWdVcGRhdGUKICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24KICAgICAgICAgICAgUmVtb3ZlCiAgICAgICAgICAgIFN1YnNjcmliZQogICAgICAgICAgICBVbnN1YnNjcmliZQogICAgICAgICAgICBTeXN0ZW1SZXF1ZXN0CiAgICAgICAgICAgIFNlbmRBZ2VudE5vdGlmaWNhdGlvbgogICAgICAgICAgICBTZW5kQ3VzdG9tZXJOb3RpZmljYXRpb24KICAgICAgICAgICAgU2VuZEF1dG9SZWplY3QKICAgICAgICApOwoKICAgICAgICAjIHNvcnQgb3V0IG5vbi1maWx0ZXJlZCBldmVudCB0eXBlcyAoaWYgYXBwbGljYWJsZSkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfQogICAgICAgICAgICAmJiBJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGZvciBteSAkRXZlbnRUeXBlICggc29ydCBrZXlzICV7ICRTZWxmLT57SGlzdG9yeVR5cGVNYXBwaW5nfSB9ICkgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRFdmVudFR5cGUgbmUgJ05ld1RpY2tldCcgJiYgbm9uZSB7ICRfIGVxICRFdmVudFR5cGUgfQogICAgICAgICAgICAgICAgICAgIEB7ICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFR5cGVzRG9kZ2UsICRFdmVudFR5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdHlwZXMgd2hpY2ggY2FuIGJlIGRlc2NyaWJlZCBhcyAnYWN0aW9uIG9uIGEgdGlja2V0JwogICAgICAgIG15IEBUeXBlc1RpY2tldEFjdGlvbiA9IHF3KAogICAgICAgICAgICBTZXJ2aWNlVXBkYXRlCiAgICAgICAgICAgIFNMQVVwZGF0ZQogICAgICAgICAgICBTdGF0ZVVwZGF0ZQogICAgICAgICAgICBTZXRQZW5kaW5nVGltZQogICAgICAgICAgICBVbmxvY2sKICAgICAgICAgICAgTG9jawogICAgICAgICAgICBSZXNwb25zaWJsZVVwZGF0ZQogICAgICAgICAgICBPd25lclVwZGF0ZQogICAgICAgICAgICBDdXN0b21lclVwZGF0ZQogICAgICAgICAgICBOZXdUaWNrZXQKICAgICAgICAgICAgVGlja2V0TGlua0FkZAogICAgICAgICAgICBUaWNrZXRMaW5rRGVsZXRlCiAgICAgICAgICAgIFRpY2tldER5bmFtaWNGaWVsZFVwZGF0ZQogICAgICAgICAgICBNb3ZlCiAgICAgICAgICAgIE1lcmdlZAogICAgICAgICAgICBQcmlvcml0eVVwZGF0ZQogICAgICAgICAgICBUaXRsZVVwZGF0ZQogICAgICAgICAgICBUeXBlVXBkYXRlCiAgICAgICAgICAgIEVzY2FsYXRpb25SZXNwb25zZVRpbWVOb3RpZnlCZWZvcmUKICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZVN0YXJ0CiAgICAgICAgICAgIEVzY2FsYXRpb25SZXNwb25zZVRpbWVTdG9wCiAgICAgICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWVOb3RpZnlCZWZvcmUKICAgICAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0YXJ0CiAgICAgICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWVTdG9wCiAgICAgICAgICAgIEVzY2FsYXRpb25VcGRhdGVUaW1lTm90aWZ5QmVmb3JlCiAgICAgICAgICAgIEVzY2FsYXRpb25VcGRhdGVUaW1lU3RhcnQKICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdG9wCiAgICAgICAgICAgIFRpbWVBY2NvdW50aW5nCiAgICAgICAgKTsKCiAgICAgICAgIyB0eXBlcyB3aGljaCBhcmUgdXN1YWxseSBiZWluZyBjb25uZWN0ZWQgdG8gc29tZSBraW5kIG9mCiAgICAgICAgIyBhdXRvbWF0aWMgcHJvY2VzcyAoZS5nLiB0cmlnZ2VyZWQgYnkgYW5vdGhlciBhY3Rpb24pCiAgICAgICAgbXkgQFR5cGVzVGlja2V0QXV0b0FjdGlvbiA9IHF3KAogICAgICAgICAgICBTZW5kQXV0b0ZvbGxvd1VwCiAgICAgICAgICAgIFNlbmRBdXRvUmVqZWN0CiAgICAgICAgICAgIFNlbmRBdXRvUmVwbHkKICAgICAgICApOwoKICAgICAgICAjIHR5cGVzIHdoaWNoIGNhbiBiZSBjb25zaWRlcmVkIGFzIGludGVybmFsCiAgICAgICAgbXkgQFR5cGVzSW50ZXJuYWwgPSBxdygKICAgICAgICAgICAgQWRkTm90ZQogICAgICAgICAgICBDaGF0SW50ZXJuYWwKICAgICAgICAgICAgRW1haWxBZ2VudEludGVybmFsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRnb2luZyB0eXBlcwogICAgICAgIG15IEBUeXBlc091dGdvaW5nID0gcXcoCiAgICAgICAgICAgIEFkZFNNUwogICAgICAgICAgICBGb3J3YXJkCiAgICAgICAgICAgIEVtYWlsQWdlbnQKICAgICAgICAgICAgUGhvbmVDYWxsQWdlbnQKICAgICAgICAgICAgQm91bmNlCiAgICAgICAgICAgIFNlbmRBbnN3ZXIKICAgICAgICApOwoKICAgICAgICAjIGluY29taW5nIHR5cGVzCiAgICAgICAgbXkgQFR5cGVzSW5jb21pbmcgPSBxdygKICAgICAgICAgICAgRW1haWxDdXN0b21lcgogICAgICAgICAgICBBZGROb3RlQ3VzdG9tZXIKICAgICAgICAgICAgQWRkU01TQ3VzdG9tZXIKICAgICAgICAgICAgUGhvbmVDYWxsQ3VzdG9tZXIKICAgICAgICAgICAgRm9sbG93VXAKICAgICAgICAgICAgV2ViUmVxdWVzdEN1c3RvbWVyCiAgICAgICAgICAgIENoYXRFeHRlcm5hbAogICAgICAgICk7CgogICAgICAgIG15IEBUeXBlc1JpZ2h0ID0gKAogICAgICAgICAgICBAVHlwZXNJbmNvbWluZywKICAgICAgICAgICAgQFR5cGVzVGlja2V0QWN0aW9uLAogICAgICAgICk7CgogICAgICAgIG15IEBUeXBlc1dpdGhBcnRpY2xlcyA9ICgKICAgICAgICAgICAgQFR5cGVzT3V0Z29pbmcsCiAgICAgICAgICAgIEBUeXBlc0ludGVybmFsLAogICAgICAgICAgICBAVHlwZXNJbmNvbWluZywKICAgICAgICAgICAgJ1Bob25lQ2FsbEN1c3RvbWVyJywKICAgICAgICApOwoKICAgICAgICBteSAlSGlzdG9yeUl0ZW1zOwogICAgICAgIG15ICRJdGVtQ291bnRlciA9IDA7CiAgICAgICAgbXkgJExhc3RDcmVhdGVUaW1lOwogICAgICAgIG15ICRMYXN0Q3JlYXRlU3lzdGVtVGltZTsKCiAgICAgICAgIyBHZXQgbWFwcGluZyBvZiBoaXN0b3J5IHR5cGVzIHRvIHJlYWRhYmxlIHN0cmluZ3MKICAgICAgICBteSAlSGlzdG9yeVR5cGVzOwogICAgICAgIG15ICVIaXN0b3J5VHlwZUNvbmZpZyA9ICV7ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpGcm9udGVuZDo6SGlzdG9yeVR5cGVzJykgLy8ge30gfTsKICAgICAgICBmb3IgbXkgJEVudHJ5ICggc29ydCBrZXlzICVIaXN0b3J5VHlwZUNvbmZpZyApIHsKICAgICAgICAgICAgJUhpc3RvcnlUeXBlcyA9ICgKICAgICAgICAgICAgICAgICVIaXN0b3J5VHlwZXMsCiAgICAgICAgICAgICAgICAleyAkSGlzdG9yeVR5cGVDb25maWd7JEVudHJ5fSB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgSElTVE9SWUlURU06CiAgICAgICAgZm9yIG15ICRJdGVtICggcmV2ZXJzZSBASGlzdG9yeUxpbmVzICkgewoKICAgICAgICAgICAgIyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgY2VydGFpbiB0eXBlcywgZS5nLiBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdBZGROb3RlJwogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZUluY29taW5nJzsKCiAgICAgICAgICAgICAgICAjIFdlIGZha2UgYSBjdXN0b20gaGlzdG9yeSB0eXBlIGJlY2F1c2UgZXh0ZXJuYWwgbm90ZXMgZnJvbSBjdXN0b21lcnMgc3RpbGwKICAgICAgICAgICAgICAgICMgaGF2ZSB0aGUgaGlzdG9yeSB0eXBlICdBZGROb3RlJyB3aGljaCBkb2VzIG5vdCBhbGxvdyBmb3IgZGlzdGluZ3Vpc2hpbmcuCiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdBZGROb3RlQ3VzdG9tZXInOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNwZWNpYWwgdHJlYXRtZW50IGZvciBjZXJ0YWluIHR5cGVzLCBlLmcuIGV4dGVybmFsIFNNUyBmcm9tIGN1c3RvbWVycwogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdBZGRTTVMnCiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2N1c3RvbWVyJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdUeXBlSW5jb21pbmcnOwoKICAgICAgICAgICAgICAgICMgV2UgZmFrZSBhIGN1c3RvbSBoaXN0b3J5IHR5cGUgYmVjYXVzZSBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycyBzdGlsbAogICAgICAgICAgICAgICAgIyBoYXZlIHRoZSBoaXN0b3J5IHR5cGUgJ0FkZFNNUycgd2hpY2ggZG9lcyBub3QgYWxsb3cgZm9yIGRpc3Rpbmd1aXNoaW5nLgogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnQWRkU01TQ3VzdG9tZXInOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNwZWNpYWwgdHJlYXRtZW50IGZvciBpbnRlcm5hbCBlbWFpbHMKICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnRW1haWxBZ2VudCcKICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0JhY2tlbmR9IGVxICdFbWFpbCcKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57U2VuZGVyVHlwZUlEfSB9IGVxICdhZ2VudCcKICAgICAgICAgICAgICAgICYmICEkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSAgICAgICA9ICdUeXBlTm90ZUludGVybmFsJzsKICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0VtYWlsQWdlbnRJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGNlcnRhaW4gdHlwZXMsIGUuZy4gZXh0ZXJuYWwgbm90ZXMgZnJvbSBjdXN0b21lcnMKICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntCYWNrZW5kfSBlcSAnQ2hhdCcKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0NoYXRFeHRlcm5hbCc7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSAgICAgICA9ICdUeXBlSW5jb21pbmcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH0gZXEgJ0NoYXQnCiAgICAgICAgICAgICAgICAmJiAhJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntJc1Zpc2libGVGb3JDdXN0b21lcn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnQ2hhdEludGVybmFsJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ICAgICAgID0gJ1R5cGVJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ0ZvcndhcmQnCiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0JhY2tlbmR9IGVxICdFbWFpbCcKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57U2VuZGVyVHlwZUlEfSB9IGVxICdhZ2VudCcKICAgICAgICAgICAgICAgICYmICEkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZU5vdGVJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBhbnkgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1RpY2tldEFjdGlvbiApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVUaWNrZXRBY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggYW55IHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNUaWNrZXRBdXRvQWN0aW9uICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZVRpY2tldEF1dG9BY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggYW55IHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNJbnRlcm5hbCApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVOb3RlSW50ZXJuYWwnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggYW55IHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNJbmNvbWluZyApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVJbmNvbWluZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBhbnkgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc091dGdvaW5nICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZU91dGdvaW5nJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCBhbnkgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc0RvZGdlICkgewogICAgICAgICAgICAgICAgbmV4dCBISVNUT1JZSVRFTTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEl0ZW0tPntDb3VudGVyfSA9ICRJdGVtQ291bnRlcisrOwoKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnTmV3VGlja2V0JyApIHsKCiAgICAgICAgICAgICAgICAjIGlmIHRoZSAnTmV3VGlja2V0JyBpdGVtIGhhcyBhbiBhcnRpY2xlLCBkaXNwbGF5IHRoaXMgImNyZWF0aW9uIGFydGljbGUiIGV2ZW50IHNlcGFyYXRlbHkKICAgICAgICAgICAgICAgIGlmICggJEl0ZW0tPntBcnRpY2xlSUR9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte0l0ZW1zfSB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7JEl0ZW19LAogICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyICAgICAgICAgICAgID0+ICRJdGVtLT57Q291bnRlcn0rKywKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGVSZWFkYWJsZSA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBDcmVhdGVkJyksCiAgICAgICAgICAgICAgICAgICAgICAgIE9yaWVudGF0aW9uICAgICAgICAgPT4gJ1JpZ2h0JywKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnTmV3VGlja2V0JzsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntBcnRpY2xlSUR9OwogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkSXRlbS0+e05hbWV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbW92ZSBhcnRpY2xlIGluZm9ybWF0aW9uIGZyb20gdHlwZXMgd2hpY2ggc2hvdWxkIG5vdCBkaXNwbGF5IGFydGljbGVzCiAgICAgICAgICAgIGlmICggbm9uZSB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzV2l0aEFydGljbGVzICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSAoaWYgcHJlc2VudCkKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfSA9ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9OwoKICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlRmllbGRzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUZpZWxkcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUZpZWxkc30gPSBcJUFydGljbGVGaWVsZHM7CgogICAgICAgICAgICAgICAgIyBHZXQgZHluYW1pYyBmaWVsZHMgYW5kIGFjY291bnRlZCB0aW1lCiAgICAgICAgICAgICAgICBteSAkQmFja2VuZCA9ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH07CgogICAgICAgICAgICAgICAgIyBHZXQgZHluYW1pYyBmaWVsZHMgYW5kIGFjY291bnRlZCB0aW1lCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZU1ldGFGaWVsZHMgPSAkS2VybmVsOjpPTS0+R2V0KCJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRCYWNrZW5kIiktPkFydGljbGVNZXRhRmllbGRzKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlTWV0YUZpZWxkc30gPSBcJUFydGljbGVNZXRhRmllbGRzOwoKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlQWN0aW9ucyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVBY3Rpb25zKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICA9PiAnT25Mb2FkJywKICAgICAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlUGxhaW59ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVByZXZpZXcoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdwbGFpbicsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUhUTUx9ID0gJEtlcm5lbDo6T00tPkdldCgiS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpbWVsaW5lVmlldzo6JEJhY2tlbmQiKS0+QXJ0aWNsZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUFjdGlvbnMgPT4gXEBBcnRpY2xlQWN0aW9ucywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIGVtcHR5IGxpbmVzCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVQbGFpbn0gPX4gc3teW1xuXHJdK317fXhtc2c7CgogICAgICAgICAgICAgICAgIyBNb2RpZnkgcGxhaW4gdGV4dCBhbmQgYm9keSB0byBhdm9pZCAnPC9zY3JpcHQ+JyB0YWcgaXNzdWUgKHNlZSBidWcjMTQwMjMpLgogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlUGxhaW59ID1+IHN7PC9zY3JpcHQ+fXs8IyMjL3NjcmlwdD59eG1zZzsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57Qm9keX0gICAgICAgICA9fiBzezwvc2NyaXB0Pn17PCMjIy9zY3JpcHQ+fXhtc2c7CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGVGbGFnc0FsbCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEl0ZW0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZUZsYWdzTWUgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdHZXQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRJdGVtLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJc0ltcG9ydGFudH0gPSAkQXJ0aWNsZUZsYWdzQWxse0ltcG9ydGFudH07CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJc1NlZW59ICAgICAgPSAkQXJ0aWNsZUZsYWdzTWV7U2Vlbn07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e05hbWV9ICYmICRJdGVtLT57TmFtZX0gPX4gbS9eJSUveCApIHsKCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntOYW1lfSA9fiBzL14lJS8veGc7CiAgICAgICAgICAgICAgICAgICAgbXkgQFZhbHVlcyA9IHNwbGl0KCAvJSUveCwgJEl0ZW0tPntOYW1lfSApOwoKICAgICAgICAgICAgICAgICAgICAjIFNlZSBkb2N1bWVudGF0aW9uIGluIEFnZW50VGlja2V0SGlzdG9yeS5wbSwgbGluZSAxNDErCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnVGlja2V0RHluYW1pY0ZpZWxkVXBkYXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcyA9ICggJFZhbHVlc1sxXSwgJFZhbHVlc1s1XSAvLyAnJywgJFZhbHVlc1szXSAvLyAnJyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdUeXBlVXBkYXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcyA9ICggJFZhbHVlc1syXSwgJFZhbHVlc1szXSwgJFZhbHVlc1swXSwgJFZhbHVlc1sxXSApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntOYW1lfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlUeXBlc3sgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcywKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBub3QgbmVlZGVkIHBsYWNlIGhvbGRlcgogICAgICAgICAgICAgICAgICAgICRJdGVtLT57TmFtZX0gPX4gcy9cJXMvL3hnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG1ha2UgdGhlIGhpc3RvcnkgdHlwZSBtb3JlIHJlYWRhYmxlIChpZiBhcHBsaWNhYmxlKQogICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlUmVhZGFibGV9ID0gJFNlbGYtPntIaXN0b3J5VHlwZU1hcHBpbmd9LT57ICRJdGVtLT57SGlzdG9yeVR5cGV9IH0KICAgICAgICAgICAgICAgIHx8ICRJdGVtLT57SGlzdG9yeVR5cGV9OwoKICAgICAgICAgICAgIyBncm91cCBpdGVtcyB3aGljaCBoYXBwZW5lZCAobmVhcmx5KSBjb2luY2lkZW50YWxseSB0b2dldGhlcgogICAgICAgICAgICBteSAkQ3JlYXRlU3lzdGVtVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRJdGVtLT57Q3JlYXRlVGltZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkSXRlbS0+e0NyZWF0ZVN5c3RlbVRpbWV9ID0gJENyZWF0ZVN5c3RlbVRpbWVPYmplY3QKICAgICAgICAgICAgICAgID8gJENyZWF0ZVN5c3RlbVRpbWVPYmplY3QtPlRvRXBvY2goKQogICAgICAgICAgICAgICAgOiB1bmRlZjsKCiAgICAgICAgICAgICMgaWYgd2UgaGF2ZSB0d28gZXZlbnRzIHRoYXQgaGFwcGVuZWQgJ25lYXJseScgdGhlIHNhbWUgdGltZSwgdHJlYXQKICAgICAgICAgICAgIyB0aGVtIGFzIGlmIHRoZXkgaGFwcGVuZWQgZXhhY3RseSBvbiB0aGUgc2FtZSB0aW1lICh0aHJlc2hvbGQgNSBzZWNvbmRzKQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkTGFzdENyZWF0ZVN5c3RlbVRpbWUKICAgICAgICAgICAgICAgICYmICRJdGVtLT57Q3JlYXRlU3lzdGVtVGltZX0gPD0gJExhc3RDcmVhdGVTeXN0ZW1UaW1lCiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0NyZWF0ZVN5c3RlbVRpbWV9ID49ICggJExhc3RDcmVhdGVTeXN0ZW1UaW1lIC0gNSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJEhpc3RvcnlJdGVtc3skTGFzdENyZWF0ZVRpbWV9IH0sICRJdGVtOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDcmVhdGVUaW1lfSA9ICRMYXN0Q3JlYXRlVGltZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJEhpc3RvcnlJdGVtc3sgJEl0ZW0tPntDcmVhdGVUaW1lfSB9IH0sICRJdGVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGFzdENyZWF0ZVRpbWUgICAgICAgPSAkSXRlbS0+e0NyZWF0ZVRpbWV9OwogICAgICAgICAgICAkTGFzdENyZWF0ZVN5c3RlbVRpbWUgPSAkSXRlbS0+e0NyZWF0ZVN5c3RlbVRpbWV9OwogICAgICAgIH0KCiAgICAgICAgbXkgJFNvcnRCeUFydGljbGUgPSBzdWIgewoKICAgICAgICAgICAgbXkgJElzQSA9IGdyZXAgeyAkXyBlcSAkYS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1dpdGhBcnRpY2xlczsKICAgICAgICAgICAgbXkgJElzQiA9IGdyZXAgeyAkXyBlcSAkYi0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1dpdGhBcnRpY2xlczsKICAgICAgICAgICAgJElzQiBjbXAgJElzQTsKICAgICAgICB9OwoKICAgICAgICAjIHNvcnQgaGlzdG9yeSBpdGVtcyBiYXNlZCBvbiBpdGVtcyB3aXRoIGFydGljbGVzCiAgICAgICAgIyB0aGVzZSBpdGVtcyBzaG91bGQgYWx3YXlzIGJlIG9uIHRvcCBvZiBhIGxpc3Qgb2YgY29ubmVjdGVkIGl0ZW1zCiAgICAgICAgJEl0ZW1Db3VudGVyID0gMDsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCByZXZlcnNlIHNvcnQga2V5cyAlSGlzdG9yeUl0ZW1zICkgewoKICAgICAgICAgICAgZm9yIG15ICRTdWJJdGVtICggc29ydCAkU29ydEJ5QXJ0aWNsZSBAeyAkSGlzdG9yeUl0ZW1zeyRJdGVtfSB9ICkgewogICAgICAgICAgICAgICAgJFN1Ykl0ZW0tPntDb3VudGVyfSA9ICRJdGVtQ291bnRlcisrOwoKICAgICAgICAgICAgICAgIGlmICggYW55IHsgJF8gZXEgJFN1Ykl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNSaWdodCApIHsKICAgICAgICAgICAgICAgICAgICAkU3ViSXRlbS0+e09yaWVudGF0aW9ufSA9ICdSaWdodCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU3ViSXRlbS0+e09yaWVudGF0aW9ufSA9ICdMZWZ0JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte0l0ZW1zfSB9LCAkU3ViSXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgVGlja2V0SUQgZm9yIHVzYWdlIGluIEpTCiAgICAgICAgJFBhcmFte1RpY2tldElEfSA9ICRTZWxmLT57VGlja2V0SUR9OwoKICAgICAgICAjIHNldCBrZXkgJ1RpbWVMb25nJyBmb3IgSlMKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17SXRlbXN9IH0gKSB7CiAgICAgICAgICAgICRJdGVtLT57VGltZUxvbmd9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZyggJEl0ZW0tPntDcmVhdGVUaW1lfSwgJ0RhdGVGb3JtYXRMb25nJyApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRBcnRpY2xlSUQgKCBzb3J0IGtleXMgJXskQXJ0aWNsZXNCeUFydGljbGVJRH0gKSB7CgogICAgICAgICAgICAjIENoZWNrIGlmIGFydGljbGUgaGFzIGF0dGFjaG1lbnQocykuCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57JEFydGljbGVJRH0tPntBdG1zfSApICkgewoKICAgICAgICAgICAgICAgIG15ICgkSW5kZXgpID0gZ3JlcCB7ICRQYXJhbXtJdGVtc30tPlskX10tPntBcnRpY2xlSUR9ICYmICRQYXJhbXtJdGVtc30tPlskX10tPntBcnRpY2xlSUR9ID09ICRBcnRpY2xlSUQgfQogICAgICAgICAgICAgICAgICAgIDAgLi4gQHsgJFBhcmFte0l0ZW1zfSB9OwogICAgICAgICAgICAgICAgJFBhcmFte0l0ZW1zfS0+WyRJbmRleF0tPntIYXNBdHRhY2htZW50fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgR2V0IE5vVGltZWxpbmVWaWV3QXV0b0FydGljbGUgY29uZmlnIHZhbHVlIGZvciB1c2FnZSBpbiBKUy4KICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdOb1RpbWVsaW5lVmlld0F1dG9BcnRpY2xlJywKICAgICAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdOb1RpbWVsaW5lVmlld0F1dG9BcnRpY2xlJykgfHwgJzAnLAogICAgICAgICk7CgogICAgICAgICMgSW5jbHVkZSBjdXJyZW50IGFydGljbGUgSUQgb25seSBpZiBpdCdzIHNlbGVjdGVkLgogICAgICAgICRQYXJhbXtDdXJyZW50QXJ0aWNsZUlEfSAvLz0gJFNlbGYtPntBcnRpY2xlSUR9OwoKICAgICAgICAjIE1vZGlmeSBib2R5IHRleHQgdG8gYXZvaWQgJzwvc2NyaXB0PicgdGFnIGlzc3VlIChzZWUgYnVnIzE0MDIzKS4KICAgICAgICBmb3IgbXkgJEFydGljbGVCb3hJdGVtIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICAkQXJ0aWNsZUJveEl0ZW0tPntCb2R5fSA9fiBzezwvc2NyaXB0Pn17PCMjIy9zY3JpcHQ+fXhtc2c7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVsaW5lVmlldycsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIEVuYWJsZWQgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJyksCiAgICAgICAgICAgICAgICBEYXRhICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVsaW5lVmlldycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGp1bXAgdG8gc2VsZWN0ZWQgYXJ0aWNsZQogICAgICAgIGlmICggJFNlbGYtPntBcnRpY2xlSUR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dTZWxlY3RlZEFydGljbGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBhY3Rpb24gbWVudSBmb3IgYWxsIGFydGljbGVzCiAgICAgICAgZm9yIG15ICRBcnRpY2xlSUQgKCBzb3J0IGtleXMgJXskQXJ0aWNsZXNCeUFydGljbGVJRH0gKSB7CgogICAgICAgICAgICAjIHNob3cgYXR0YWNobWVudHMgYm94CiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57JEFydGljbGVJRH0tPntBdG1zfSApICkgewoKICAgICAgICAgICAgICAgIG15ICRBcnRpY2xlQXR0YWNobWVudHMgPSAkU2VsZi0+X0NvbGxlY3RBcnRpY2xlQXR0YWNobWVudHMoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZSA9PiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyRBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudHMgPT4gJEFydGljbGVBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldFpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7ICVQYXJhbSwgJVRpY2tldCB9LAogICAgKTsKfQoKc3ViIF9UaWNrZXRJdGVtU2VlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBBcnRpY2xlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgKTsKCiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewogICAgICAgICRTZWxmLT5fQXJ0aWNsZUl0ZW1TZWVuKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX0FydGljbGVJdGVtU2VlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRJc0FydGljbGVEZWxldGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZUZlYXR1cmVzJyktPklzQXJ0aWNsZURlbGV0ZWQoCiAgICAgICAgQXJ0aWNsZUlEID0+ICRQYXJhbXtBcnRpY2xlSUR9CiAgICApOwoKICAgICMgbWFyayBzaG93biBhcnRpY2xlIGFzIHNlZW4KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgICAgICA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICBLZXkgICAgICAgICAgICA9PiAnU2VlbicsCiAgICAgICAgVmFsdWUgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQXJ0aWNsZURlbGV0ZWQgPT4gJElzQXJ0aWNsZURlbGV0ZWQKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfQXJ0aWNsZUl0ZW0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGlja2V0ICA9ICV7ICRQYXJhbXtUaWNrZXR9IH07CiAgICBteSAlQXJ0aWNsZSA9ICV7ICRQYXJhbXtBcnRpY2xlfSB9OwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzaG93IGFydGljbGUgYWN0aW9ucwogICAgbXkgQE1lbnVJdGVtcyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVBY3Rpb25zKAogICAgICAgICVQYXJhbSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9LAogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICBUeXBlICAgICAgICAgICAgICAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICk7CgogICAgcHVzaCBAeyAkU2VsZi0+e01lbnVJdGVtc30gfSwgXEBNZW51SXRlbXM7CgogICAgIyBUT0RPOiBSZXZpZXcKICAgIHJldHVybiAkU2VsZi0+X0FydGljbGVSZW5kZXIoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgU2hvd0Jyb3dzZXJMaW5rTWVzc2FnZSA9PiAkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gPyAwIDogMSwKICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBNZW51SXRlbXMgICAgICAgICAgICAgID0+IFxATWVudUl0ZW1zLAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgICAgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgKTsKfQoKc3ViIF9Db2xsZWN0QXJ0aWNsZUF0dGFjaG1lbnRzIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVBcnRpY2xlID0gJXsgJFBhcmFte0FydGljbGV9IH07CgogICAgbXkgJUF0dGFjaG1lbnRzOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZG93bmxvYWQgdHlwZQogICAgbXkgJFR5cGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0F0dGFjaG1lbnREb3dubG9hZFR5cGUnKSB8fCAnYXR0YWNobWVudCc7CgogICAgJEFydGljbGV7QXRtQ291bnR9ID0gc2NhbGFyIGtleXMgJXsgJEFydGljbGV7QXRtc30gLy8ge30gfTsKCiAgICAjIGlmIGF0dGFjaG1lbnQgd2lsbCBiZSBmb3JjZWQgdG8gZG93bmxvYWQsIGRvbid0IG9wZW4gYSBuZXcgZG93bmxvYWQgd2luZG93IQogICAgbXkgJFRhcmdldCA9ICd0YXJnZXQ9IkF0dGFjaG1lbnRXaW5kb3ciICc7CiAgICBpZiAoICRUeXBlID1+IC9pbmxpbmUvaSApIHsKICAgICAgICAkVGFyZ2V0ID0gJ3RhcmdldD0iYXR0YWNobWVudCIgJzsKICAgIH0KCiAgICAkQXR0YWNobWVudHN7Wm9vbUF0dGFjaG1lbnREaXNwbGF5Q291bnR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Olpvb21BdHRhY2htZW50RGlzcGxheUNvdW50Jyk7CgogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkRmlsZUlEICggc29ydCBrZXlzICV7ICRBcnRpY2xle0F0bXN9IH0gKSB7CiAgICAgICAgcHVzaCBAeyAkQXR0YWNobWVudHN7RmlsZXN9IH0sIHsKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICV7ICRBcnRpY2xle0F0bXN9LT57JEZpbGVJRH0gfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRGaWxlSUQsCiAgICAgICAgICAgIFRhcmdldCA9PiAkVGFyZ2V0LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIFwlQXR0YWNobWVudHM7Cn0KCnN1YiBfQXJ0aWNsZUJveEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2UgQXJ0aWNsZUJveEFsbCBMaW1pdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICBteSAkU3RhcnQgPSAoICRQYXJhbXtQYWdlfSAtIDEgKSAqICRQYXJhbXtMaW1pdH07CgogICAgbXkgJEVuZCA9ICRQYXJhbXtQYWdlfSAqICRQYXJhbXtMaW1pdH0gLSAxOwogICAgaWYgKCAkRW5kID49IHNjYWxhciBAeyAkUGFyYW17QXJ0aWNsZUJveEFsbH0gfSApIHsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBlbmQgaW5kZXggZG9lc24ndCBleGNlZWQgYXJyYXkgc2l6ZS4KICAgICAgICAkRW5kID0gc2NhbGFyIEB7ICRQYXJhbXtBcnRpY2xlQm94QWxsfSB9IC0gMTsKICAgIH0KCiAgICBteSBAQXJ0aWNsZUluZGV4ZXMgPSAoICRTdGFydCAuLiAkRW5kICk7CgogICAgbXkgJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbW11bmljYXRpb25DaGFubmVsJyk7CgogICAgIyBTYXZlIGNvbW11bmljYXRpb24gY2hhbm5lbCBkYXRhIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCiAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRhOwoKICAgIG15IEBBcnRpY2xlQm94OwogICAgZm9yIG15ICRJbmRleCAoQEFydGljbGVJbmRleGVzKSB7CiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRQYXJhbXtBcnRpY2xlQm94QWxsfS0+WyRJbmRleF0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICApOwoKICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkUGFyYW17QXJ0aWNsZUJveEFsbH0tPlskSW5kZXhdLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBJbmNsdWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgY29tbXVuaWNhdGlvbiBjaGFubmVsLgogICAgICAgIGlmICggISRDb21tdW5pY2F0aW9uQ2hhbm5lbERhdGF7ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gKSB7CgogICAgICAgICAgICAjIENvbW11bmljYXRpb24gY2hhbm5lbCBkaXNwbGF5IG5hbWUgaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgbXkgJUNvbW11bmljYXRpb25DaGFubmVsID0gJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0LT5DaGFubmVsR2V0KAogICAgICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBQcmVzZW5jZSBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWwgb2JqZWN0IGluZGljYXRlcyBpdHMgdmFsaWRpdHkuCiAgICAgICAgICAgIG15ICRDaGFubmVsT2JqZWN0ID0gJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0LT5DaGFubmVsT2JqZWN0R2V0KAogICAgICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENvbW11bmljYXRpb25DaGFubmVsRGF0YXsgJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gfSA9IHsKICAgICAgICAgICAgICAgIENoYW5uZWxOYW1lICAgICAgICA9PiAkQ29tbXVuaWNhdGlvbkNoYW5uZWx7Q2hhbm5lbE5hbWV9LAogICAgICAgICAgICAgICAgQ2hhbm5lbERpc3BsYXlOYW1lID0+ICRDb21tdW5pY2F0aW9uQ2hhbm5lbHtEaXNwbGF5TmFtZX0sCiAgICAgICAgICAgICAgICBDaGFubmVsSW52YWxpZCAgICAgPT4gISRDaGFubmVsT2JqZWN0LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJUFydGljbGUgPSAoICVBcnRpY2xlLCAleyAkQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRheyAkQXJ0aWNsZXtDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9IH0gKTsKCiAgICAgICAgcHVzaCBAQXJ0aWNsZUJveCwgXCVBcnRpY2xlOwogICAgfQoKICAgIHJldHVybiBAQXJ0aWNsZUJveDsKfQoKPWhlYWQyIF9BcnRpY2xlUmVuZGVyKCkKClJldHVybnMgYXJ0aWNsZSBodG1sLgoKICAgIG15ICRIVE1MID0gJFNlbGYtPl9BcnRpY2xlUmVuZGVyKAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgPT4gMTIzLCAgICAgICMgKHJlcXVpcmVkKQogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgICAgPT4gMTIzLCAgICAgICMgKHJlcXVpcmVkKQogICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJ1N0YXRpYycsICMgKHJlcXVpcmVkKSBTdGF0aWMgb3IgT25Mb2FkCiAgICAgICAgU2hvd0Jyb3dzZXJMaW5rTWVzc2FnZSA9PiAxLCAgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKUmVzdWx0OgogICAgJEhUTUwgPSAiPGRpdj4uLi48L2Rpdj4iOwoKPWN1dAoKc3ViIF9BcnRpY2xlUmVuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgYXJ0aWNsZSBkYXRhLgogICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5CYWNrZW5kRm9yQXJ0aWNsZSglUGFyYW0pOwoKICAgICMgRGV0ZXJtaW5lIGNoYW5uZWwgbmFtZSBmb3IgdGhpcyBBcnRpY2xlLgogICAgbXkgJENoYW5uZWxOYW1lID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpOwoKICAgIG15ICRMb2FkZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKAogICAgICAgICJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRDaGFubmVsTmFtZSIsCiAgICApOwogICAgcmV0dXJuIGlmICEkTG9hZGVkOwoKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRDaGFubmVsTmFtZSIpLT5BcnRpY2xlUmVuZGVyKAogICAgICAgICVQYXJhbSwKICAgICAgICBBcnRpY2xlQWN0aW9ucyA9PiAkUGFyYW17TWVudUl0ZW1zfSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwp9CgpzdWIgX0dldEluY2x1ZGVkRmllbGRPcmRlcmVkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFJldHVybjsKCiAgICBJVEVNOgogICAgZm9yIG15ICRJbmNsdWRlSXRlbSAoIEB7ICRQYXJhbXtJbmNsdWRlfSB9ICkgewoKICAgICAgICBpZiAoICRJbmNsdWRlSXRlbS0+e0dyaWR9ICkgewogICAgICAgICAgICBmb3IgbXkgJFJvdyAoIEB7ICRJbmNsdWRlSXRlbS0+e0dyaWR9e1Jvd3N9IH0gKSB7CgogICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgZm9yIG15ICRERkVudHJ5ICggJFJvdy0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT0xVTU4gaWYgISRERkVudHJ5LT57REZ9OwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBSZXR1cm4sICRERkVudHJ5LT57REZ9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEluY2x1ZGVJdGVtLT57REZ9ICkgewogICAgICAgICAgICBwdXNoIEBSZXR1cm4sICRJbmNsdWRlSXRlbS0+e0RGfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIEBSZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBiMzEzMjhmZjQ3MWYwZjYzMmUzNjkxMDVkN2FhZDUxODUzZjJkOTk1IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20udHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6U2NyaXB0VXNhZ2UpCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iQXJ0aWNsZUZpbHRlckRpYWxvZyIgY2xhc3M9IkhpZGRlbiI+CiAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgaWQ9IkFydGljbGVGaWx0ZXJEaWFsb2dGb3JtIiBuYW1lPSJBcnRpY2xlRmlsdGVyRGlhbG9nRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFnZW50VGlja2V0Wm9vbSIgbmFtZT0iQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFydGljbGVGaWx0ZXJTZXQiIG5hbWU9IlN1YmFjdGlvbiIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXSIgbmFtZT0iVGlja2V0SUQiLz4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW11bmljYXRpb25DaGFubmVsRmlsdGVyIj5bJSBUcmFuc2xhdGUoIkNvbW11bmljYXRpb24gY2hhbm5lbCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5uZWxzICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkN1c3RvbWVyVmlzaWJpbGl0eUZpbHRlciI+WyUgVHJhbnNsYXRlKCJDdXN0b21lciB2aXNpYmlsaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuQ3VzdG9tZXJWaXNpYmlsaXR5ICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFydGljbGVTZW5kZXJUeXBlRmlsdGVyIj5bJSBUcmFuc2xhdGUoIlNlbmRlciBUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJTdHJpbmcgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2F2ZURlZmF1bHRzIj5bJSBUcmFuc2xhdGUoIlNhdmUgZmlsdGVyIHNldHRpbmdzIGFzIGRlZmF1bHQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iU2F2ZURlZmF1bHRzIiBuYW1lPSJTYXZlRGVmYXVsdHMiIHZhbHVlPSIxIiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgPC9mb3JtPgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFydGljbGVGaWx0ZXJEaWFsb2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRXZlbnRUeXBlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nIiBjbGFzcz0iSGlkZGVuIj4KICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBpZD0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nRm9ybSIgbmFtZT0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFnZW50VGlja2V0Wm9vbSIgbmFtZT0iQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkV2ZW5UeXBlRmlsdGVyU2V0IiBuYW1lPSJTdWJhY3Rpb24iLz4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iIG5hbWU9IlRpY2tldElEIi8+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8bGFiZWwgZm9yPSJFdmVudFR5cGVGaWx0ZXIiPlslIFRyYW5zbGF0ZSgiRXZlbnQgVHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkV2ZW50VHlwZUZpbHRlclN0cmluZyAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8bGFiZWwgZm9yPSJTYXZlRGVmYXVsdHMiPlslIFRyYW5zbGF0ZSgiU2F2ZSBhcyBkZWZhdWx0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IlNhdmVEZWZhdWx0cyIgbmFtZT0iU2F2ZURlZmF1bHRzIiB2YWx1ZT0iMSIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9maWVsZHNldD4KICAgIDwvZm9ybT4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJFdmVudFR5cGVGaWx0ZXJEaWFsb2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyIikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gVGlja2V0Wm9vbSBVc2VBcnRpY2xlQ29sb3JzIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSBOb01hcmdpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV0iPjxzcGFuIGNsYXNzPSJQcmlvcml0eUlELVslIERhdGEuUHJpb3JpdHlJRCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV08L3NwYW4+PC9kaXY+CiAgICAgICAgPGgxPgogICAgICAgICAgICBbJSBEYXRhLkhvb2sgJV1bJSBDb25maWcoJ1RpY2tldDo6SG9va0RpdmlkZXInKSAlXVslIERhdGEuVGlja2V0TnVtYmVyIHwgaHRtbCAlXSAmbWRhc2g7IFslIERhdGEuVGl0bGUgfCBodG1sICVdCiAgICAgICAgPC9oMT4KICAgIDwvZGl2PgoKIyBJZnJhbWUgdXNlZCBmb3IgZml4aW5nIGJ1ZyM4NTQ1OiBBdHRhY2htZW50IGRvd25sb2FkIG5vdCBwb3NzaWJsZSBpZiBwb3AgdXAgb2YgYW5vdGhlciBhY3Rpb24gaXMgb3BlbgojIEFsbCBkb3dubG9hZHMgKGUuZy4gYXR0YWNobWVudHMpIGhhdmUgdGhpcyBpZnJhbWUgYXMgdGFyZ2V0LiBUaGlzIHByZXZlbnRzIHRoZSBicm93c2VyIGZyb20gc2VuZGluZwojIGFuIGh0dHAgcmVxdWVzdCB0byB0aGUgVGlja2V0Wm9vbSB3aW5kb3cuIEl0IHNlbmRzIHRoZSBkb3dubG9hZCByZXF1ZXN0IHRvIHRoaXMgaWZyYW1lIGluc3RlYWQuCiMgU2VuZGluZyB0aGUgZG93bmxvYWQgcmVxdWVzdCB0byB0aGUgbWFpbiB3aW5kb3cgd291bGQgbGVhZCB0byBhbiBhbGVydCBtZXNzYWdlIGFib3V0IGxlYXZpbmcgdGhlIHBhZ2UKIyBpZiBhdCB0aGUgc2FtZSB0aW1lIGEgcG9wdXAgd2luZG93IChlLmcuIGZvciBhIHRpY2tldCBhbnN3ZXIpIGlzIG9wZW5lZC4KICAgIDxpZnJhbWUgc3JjPSJhYm91dDpibGFuayIgd2lkdGg9IjAiIGhlaWdodD0iMCIgbmFtZT0iQXR0YWNobWVudFdpbmRvdyIgaWQ9IkF0dGFjaG1lbnRXaW5kb3ciPjwvaWZyYW1lPgoKICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGb3JtRHJhZnRUYWJsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoICJEcmFmdHMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJGb3JtRHJhZnRUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEZPUkVBQ0ggRm9ybURyYWZ0IElOIERhdGEuRm9ybURyYWZ0cyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRHJhZnROYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIEZvcm1EcmFmdC5MaW5rIHwgSW50ZXJwb2xhdGUgJV07TG9hZEZvcm1EcmFmdD0xO0Zvcm1EcmFmdElEPVslIEZvcm1EcmFmdC5Gb3JtRHJhZnRJRCB8IGh0bWwgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iWyUgRm9ybURyYWZ0LkNsYXNzIHwgaHRtbCAlXSBNYXN0ZXJBY3Rpb25MaW5rIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LkxpbmtQYXJhbSAlXT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKEZvcm1EcmFmdC5EZXNjcmlwdGlvbikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRm9ybURyYWZ0Lk5hbWUpIHwgaHRtbCAlXSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdIFslIEZvcm1EcmFmdC5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdIFslIFRyYW5zbGF0ZSgiYnkiKSB8IGh0bWwgJV0gWyUgRm9ybURyYWZ0LkNyZWF0ZWRCeVVzZXIgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXSBbJSBGb3JtRHJhZnQuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXSBbJSBUcmFuc2xhdGUoImJ5IikgfCBodG1sICVdIFslIEZvcm1EcmFmdC5DaGFuZ2VkQnlVc2VyIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJGb3JtRHJhZnREZWxldGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdP0FjdGlvbj1BZ2VudFRpY2tldFpvb207U3ViYWN0aW9uPUZvcm1EcmFmdERlbGV0ZTtGb3JtRHJhZnRJRD1bJSBGb3JtRHJhZnQuRm9ybURyYWZ0SUQgfCBodG1sICVdO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlPSJbJSBGb3JtRHJhZnQuVGl0bGUgfCBodG1sICVdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LkxpbmtQYXJhbSAlXT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGb3JtRHJhZnRUYWJsZSIpICVdCgogICAgICAgICAgICBbJSBGT1JFQUNIIFdpZGdldCBJTiBEYXRhLlNpZGViYXJXaWRnZXRzOyAlXQogICAgICAgICAgICAgICAgWyUgSUYgV2lkZ2V0LkFzeW5jOyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIFdpZGdldC5FbGVtZW50SUQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRJc0xvYWRpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEtc3BpbiI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIFslIEVMU0U7ICVdCiAgICAgICAgICAgICAgICAgICAgWyUgV2lkZ2V0Lk91dHB1dCAlXQogICAgICAgICAgICAgICAgWyUgRU5EOyAlXQogICAgICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IE92ZXJmbG93VmlzaWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93IENsdXN0ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gQXJ0aWNsZVZpZXciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IkFydGljbGVWaWV3U2V0dGluZ3MiIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNldHRpbmdzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiU2V0dGluZ3MiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51SXRlbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPSJuYXYtWyUgRGF0YS5OYW1lIHwgcmVwbGFjZSgnICcsICctJykgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuVHlwZSA9PSAnQ2x1c3RlcicgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DbGFzcyAlXSIgPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuQ2xhc3MgJV0iIFslIERhdGEuTGlua1BhcmFtICVdIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvbikgfCBodG1sICVdIiB0YXJnZXQ9IlslIERhdGEuVGFyZ2V0IHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnVTdWJDb250YWluZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibmF2LVslIERhdGEuTmFtZSB8IHJlcGxhY2UoJyAnLCAnLScpIHwgaHRtbCAlXS1jb250YWluZXIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51U3ViQ29udGFpbmVySXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD0ibmF2LVslIERhdGEuTmFtZSB8IHJlcGxhY2UoJyAnLCAnLScpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBJRiAhRGF0YS5FeHRlcm5hbExpbmsgJV1bJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBFTkQgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIiBbJSBEYXRhLkxpbmtQYXJhbSAlXSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSIgdGFyZ2V0PSJbJSBEYXRhLlRhcmdldCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnVTdWJDb250YWluZXJJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudVN1YkNvbnRhaW5lciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnVGb3JtR2VuZXJpYyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgIyB1c2luZyBhIGZvcm0gaGVyZSBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHRoZSBiYWNrZW5kIHRvIHBlcmZvcm0gYSBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgb24gYW4gYXJ0aWNsZSBhY3Rpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSIgYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpIHwgaHRtbCAlXSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KWyUgSUYgRGF0YS5TdWJhY3Rpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5TdWJhY3Rpb24gfCBodG1sICVdIiAvPgpbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IlRpY2tldE1lbnVGb3JtQWN0aW9uIFslIERhdGEuQ2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRNZW51Rm9ybUdlbmVyaWMiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudUl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51UGhvbmVBc0Ryb3Bkb3duIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0IiBpZD0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5QaG9uZUVsZW1lbnRJRCB8IGh0bWwgJV0iIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGFuZGFyZFJlcGx5U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRNZW51UGhvbmVBc0Ryb3Bkb3duIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTW92ZUxpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gdGl0bGU9IlslIFRyYW5zbGF0ZSgiTW92ZSB0aWNrZXQgdG8gYSBkaWZmZXJlbnQgcXVldWUiKSB8IGh0bWwgJV0iIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSB8IGh0bWwgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFnZW50VGlja2V0TW92ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWV1ZUlEIiB2YWx1ZT0iWyUgRGF0YS5RdWV1ZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaWNrZXRJRCIgdmFsdWU9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRlc3RRdWV1ZUlEIiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vdmVRdWV1ZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk1vdmVMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTW92ZUZvcm0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldE1vdmU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXTsiIGNsYXNzPSJBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNoYW5nZSBRdWV1ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNb3ZlRm9ybSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnVFeHRlcm5hbExpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iIFslIERhdGEuTGlua1BhcmFtICVdIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvbikgfCBodG1sICVdIiB0YXJnZXQ9IlslIERhdGEuVGFyZ2V0ICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudUV4dGVybmFsTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIEV4cGFuZGVkIiBpZD0iRHluYW1pY0ZpZWxkc1dpZGdldCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZShEYXRhLldpZGdldFRpdGxlKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5leHRBY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGlnaHRSb3cgQm90dG9tIj4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5bJSBUcmFuc2xhdGUoRGF0YS5BY3Rpdml0eU5hbWUpIHwgaHRtbCAlXTo8L3N0cm9uZz48L2xpPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpdml0eURpYWxvZ0RpcmVjdFN1Ym1pdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSB8IGh0bWwgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRUaWNrZXRQcm9jZXNzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU3RvcmVBY3Rpdml0eURpYWxvZyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQcm9jZXNzRW50aXR5SUQiIHZhbHVlPSJbJSBEYXRhLlByb2Nlc3NFbnRpdHlJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpdml0eURpYWxvZ0VudGl0eUlEIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpdml0eURpYWxvZ0VudGl0eUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IkJ1dHRvbl9bJSBEYXRhLkFjdGl2aXR5RGlhbG9nRW50aXR5SUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciIgdHlwZT0ic3VibWl0Ij5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGl2aXR5RGlhbG9nRGlyZWN0U3VibWl0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aXZpdHlEaWFsb2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24gTmV4dEFjdGl2aXR5RGlhbG9nIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRQcm9jZXNzO1N1YmFjdGlvbj1EaXNwbGF5QWN0aXZpdHlEaWFsb2c7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXTtQcm9jZXNzRW50aXR5SUQ9WyUgRGF0YS5Qcm9jZXNzRW50aXR5SUQgfCB1cmkgJV07QWN0aXZpdHlEaWFsb2dFbnRpdHlJRD1bJSBEYXRhLkFjdGl2aXR5RGlhbG9nRW50aXR5SUQgfCB1cmkgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpdml0eURpYWxvZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9BY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJBY3Rpb25NZXNzYWdlIj5bJSBUcmFuc2xhdGUoIlRoZXJlIGFyZSBubyBkaWFsb2dzIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50IGluIHRoZSBwcm9jZXNzLiIpIHwgaHRtbCAlXTwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vQWN0aXZpdHlEaWFsb2dzIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5leHRBY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBQcm9jZXNzSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUHJvY2Vzc0luZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJGaWVsZFNldFNlcGFyYXRvciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3IiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlN0YW5kYXJkRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDb250YWluZXIgRHluYW1pY0ZpZWxkQXV0b1Jlc2l6ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgfCBodG1sICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJTaG93RmllbGRJbmZvT3ZlcmxheSI+KzwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUgQ3V0VmFsdWUgRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSAlXSI+CjwhLS0gT3V0cHV0RmlsdGVySG9va19XaWRnZXREeW5hbWljRmllbGRCZWdpbiAtLT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRMaW5rIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIlslIElGIERhdGEuTGlua1ByZXZpZXcgJV0gZGF0YS10cmlnZ2VyPSJmbG9hdGVyIiBkYXRhLWZsb2F0ZXItdXJsPSJbJSBEYXRhLkxpbmtQcmV2aWV3IHwgSW50ZXJwb2xhdGUgJV0iWyUgRU5EICVdIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZExpbmsiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbiIpICVdCjwhLS0gT3V0cHV0RmlsdGVySG9va19XaWRnZXREeW5hbWljRmllbGRFbmQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZUxvbmciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdGFuZGFyZEZpZWxkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU2V0RHluYW1pY0ZpZWxkIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkU2V0U2VwYXJhdG9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9IkZpZWxkU2V0U2VwYXJhdG9yIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZFNldFNlcGFyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDb250YWluZXIgRHluYW1pY0ZpZWxkQXV0b1Jlc2l6ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgdGl0bGU9IlslIERhdGEuTGFiZWwgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iU2hvd0ZpZWxkSW5mb092ZXJsYXkiPis8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUgQ3V0VmFsdWUgRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSAlXSI+CjwhLS0gT3V0cHV0RmlsdGVySG9va19TZXREeW5hbWljRmllbGRCZWdpbiAtLT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIlslIElGIERhdGEuTGlua1ByZXZpZXcgJV0gZGF0YS10cmlnZ2VyPSJmbG9hdGVyIiBkYXRhLWZsb2F0ZXItdXJsPSJbJSBEYXRhLkxpbmtQcmV2aWV3IHwgSW50ZXJwb2xhdGUgJV0iWyUgRU5EICVdIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJTZXREeW5hbWljRmllbGRMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZFBsYWluIikgJV0KPCEtLSBPdXRwdXRGaWx0ZXJIb29rX1NldER5bmFtaWNGaWVsZEVuZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZUxvbmciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXREeW5hbWljRmllbGRWYWx1ZUxvbmciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZFZhbHVlTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRTZXRWYWx1ZVNlcGFyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJGaWVsZFNldFNlcGFyYXRvciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZFNldFZhbHVlU2VwYXJhdG9yIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXRGaWVsZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldCIpICVdCgogICAgICAgICAgICA8ZGl2IGlkPSJBcnRpY2xlVHJlZSI+ClslIERhdGEuQXJ0aWNsZVRyZWUgJV0KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIaW50Tm9BcnRpY2xlcyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoaXMgaXRlbSBoYXMgbm8gYXJ0aWNsZXMgeWV0LiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSGludE5vQXJ0aWNsZXMiKSAlXQoKICAgICAgICAgICAgPGRpdiBpZD0iQXJ0aWNsZUl0ZW1zIj4KWyUgRGF0YS5BcnRpY2xlSXRlbXMgJV0KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICBbJSBGT1JFQUNIIFdpZGdldCBJTiBEYXRhLk1haW5XaWRnZXRzOyAlXQogICAgICAgICAgICAgICAgWyUgSUYgV2lkZ2V0LkFzeW5jOyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIFdpZGdldC5FbGVtZW50SUQgJV0iPjwvZGl2PgogICAgICAgICAgICAgICAgWyUgRUxTRTsgJV0KICAgICAgICAgICAgICAgICAgICBbJSBXaWRnZXQuT3V0cHV0ICVdCiAgICAgICAgICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgICAgIFslIEVORDsgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+Cgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlciIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlIikgJV0KPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT4KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+CiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDI+CiAgICAgICAgWyUgSUYgRGF0YS5ab29tVGltZWxpbmUgJV0KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgVGltZWxpbmUgVmlldyIpIHwgaHRtbCAlXQogICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBcnRpY2xlIE92ZXJ2aWV3IC0gJXMgQXJ0aWNsZShzKSIsIERhdGEuQXJ0aWNsZUNvdW50KSB8IGh0bWwgJV0KICAgICAgICBbJSBFTkQgJV0KICAgICAgICA8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiBDb250cm9sUm93Ij4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFydGljbGVQYWdlcyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVQYWdlcyBJY29ucyI+CiAgICAgICAgWyUgRk9SRUFDSCBwYWdlIElOIFsxIC4uIERhdGEuUGFnZXNdOyAlXQogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdO0FydGljbGVQYWdlPVslIHBhZ2UgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoJ1BhZ2UgJXMnLCBwYWdlKSB8IGh0bWwgJV0iIGRhdGEtcGFnZT0iWyUgcGFnZSAlXSIgWyUgSUYgcGFnZSA9PSBEYXRhLkN1cnJlbnRQYWdlICVdY2xhc3M9IkFjdGl2ZSJbJSBFTkQgJV0+WyUgcGFnZSAlXTwvYT4KICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZVBhZ2VzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBcnRpY2xlRmlsdGVyIEljb25zIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkFydGljbGUgRmlsdGVyIikgfCBodG1sICVdOjwvc3Bhbj4KIyBPbmx5IHNob3cgb25lOiBTZXQgb3IgUmVzZXQuCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyU2V0TGluayIpICVdCiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iU2V0QXJ0aWNsZUZpbHRlciIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQWRkIEZpbHRlciIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWZpbHRlciI+PC9pPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2V0IikgfCBodG1sICVdPC9zcGFuPjwvYT4KI1slIFJlbmRlckJsb2NrRW5kKCJBcnRpY2xlRmlsdGVyU2V0TGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFydGljbGVGaWx0ZXJSZXNldExpbmsiKSAlXQogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IlJlc2V0QXJ0aWNsZUZpbHRlciIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVzZXQgRmlsdGVyIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPjxzcGFuPlslIFRyYW5zbGF0ZSgiUmVzZXQiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUZpbHRlclJlc2V0TGluayIpICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJ0aWNsZUxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IlRpY2tldExpc3QiPgogICAgICAgICAgICA8ZGl2IGlkPSJBcnRpY2xlVGFibGVCb2R5IiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjcm9sbGVyIj4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgaWQ9IkFydGljbGVUYWJsZSIgY2xhc3M9IkRhdGFUYWJsZSBbJSBEYXRhLlRhYmxlQ2xhc3NlcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJObyBTb3J0YWJsZSBJbml0aWFsU29ydGluZyBbJSBEYXRhLlpvb21FeHBhbmRTb3J0T3JkZXIgJV0iPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiTm8uIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVW5yZWFkIGFydGljbGVzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkRpcmVjdGlvbiBTb3J0YWJsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGlyZWN0aW9uIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtZXhjaGFuZ2UiPjwvaT48L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlNlbmRlciBTb3J0YWJsZSI+PGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJTZW5kZXIiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5uZWwgU29ydGFibGUiPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiVmlhIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdWJqZWN0IFNvcnRhYmxlIj48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNyZWF0ZWQgU29ydGFibGUiPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQXJ0aWNsZUVkaXQgU29ydGFibGUgQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQXJ0aWNsZSBFZGl0ZWQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWVkaXQiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJBdHRhY2htZW50cyBMYXN0IENlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnRzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wYXBlcmNsaXAiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVVbml0SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpbWVVbml0Ij48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlRpbWUgVW5pdHMiKSB8IGh0bWwgJV08L2E+PC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVVbml0SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJbJSBEYXRhLlNlbmRlclR5cGUgfCBodG1sICVdIFslIElGIERhdGEuU2VuZGVyVHlwZSA9PSAnY3VzdG9tZXInICVdSW5jb21pbmdbJSBFTFNFICVdT3V0Z29pbmdbJSBFTkQgJV0gWyUgSUYgRGF0YS5Jc1Zpc2libGVGb3JDdXN0b21lciAlXVZpc2libGVGb3JDdXN0b21lclslIEVMU0UgJV1Ob3RWaXNpYmxlRm9yQ3VzdG9tZXJbJSBFTkQgJV0gWyUgSUYgRGF0YS5BcnRpY2xlRGVsZXRlZCA9PSAiMSIgJV0gQXJ0aWNsZURlbGV0ZWQgWyUgRU5EICVdIFslIERhdGEuQ2xhc3NSb3cgfCBodG1sICVdIiBpZD0iUm93WyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Ik5vIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iQXJ0aWNsZUluZm8iIG5hbWU9IkxpbmtbJSBEYXRhLkFydGljbGVOdW1iZXIgfCB1cmkgJV0iIHZhbHVlPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRab29tO1N1YmFjdGlvbj1BcnRpY2xlVXBkYXRlO0NvdW50PVslIERhdGEuQXJ0aWNsZU51bWJlciB8IHVyaSAlXTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXTtBcnRpY2xlSUQ9WyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdOyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iQXJ0aWNsZUlEIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBEYXRhLkFydGljbGVOdW1iZXIgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSBVbnJlYWRBcnRpY2xlcyBGaXhlZCBOb25UZXh0Q29udGVudCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtSW1wb3J0YW50QXJ0aWNsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbXBvcnRhbnRBcnRpY2xlcyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW1wb3J0YW50IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1pbmZvLWNpcmNsZSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPlslIFRyYW5zbGF0ZSgiSW1wb3J0YW50IikgfCBodG1sICVdPC9lbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1JbXBvcnRhbnRBcnRpY2xlIikgJV0KCiMgUm90aGVyT1NTIC8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbVBpbm5lZEFydGljbGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUGlubmVkQXJ0aWNsZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUGlubmVkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aHVtYi10YWNrIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0+WyUgVHJhbnNsYXRlKCJQaW5uZWQiKSB8IGh0bWwgJV08L2VtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbVBpbm5lZEFydGljbGUiKSAlXQoKIyBFTyBBZ2VudFRpY2tldEFydGljbGVQaW4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtTmV3QXJ0aWNsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVW5yZWFkIEFydGljbGUhIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbU5ld0FydGljbGUiKSAlXQoKIyBSb3RoZXJPU1MgLyBBZ2VudFRpY2tldEFydGljbGVQaW4KI1slIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtTm9OZXdBcnRpY2xlIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOb0NvbnRlbnQiPjwvc3Bhbj4KI1slIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbU5vTmV3QXJ0aWNsZSIpICVdCiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJEaXJlY3Rpb24iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbURpcmVjdGlvbkluY29taW5nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRpcmVjdGlvbiBJbmNvbWluZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW5jb21pbmcgbWVzc2FnZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtbG9uZy1hcnJvdy1sZWZ0Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iMCIgLz4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtRGlyZWN0aW9uSW5jb21pbmciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbURpcmVjdGlvbk91dGdvaW5nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRpcmVjdGlvbiBPdXRnb2luZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiT3V0Z29pbmcgbWVzc2FnZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtbG9uZy1hcnJvdy1yaWdodCI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjEiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbk91dGdvaW5nIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25JbnRlcm5hbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gSW50ZXJuYWwiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkludGVybmFsIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iMiIgLz4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtRGlyZWN0aW9uSW50ZXJuYWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJTZW5kZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkFydGljbGVGaWVsZHMuU2VuZGVyLlZhbHVlIHwgaHRtbCAlXSI+PGEgaHJlZj0iIyI+WyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5SZWFsbmFtZSB8IHRydW5jYXRlKDEwMCkgfCBodG1sICVdPC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBEYXRhLkFydGljbGVGaWVsZHMuU2VuZGVyLlZhbHVlIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2hhbm5lbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgVHJhbnNsYXRlKERhdGEuQ2hhbm5lbERpc3BsYXlOYW1lKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5DaGFubmVsSW52YWxpZCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZSgiTWlzc2luZyBjaGFubmVsIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgV2FybmluZyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuVHJhbnNtaXNzaW9uU3RhdHVzICYmIERhdGEuVHJhbnNtaXNzaW9uU3RhdHVzLlN0YXR1cyA9PSAnRmFpbGVkJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VuZGluZyBvZiB0aGlzIG1lc3NhZ2UgaGFzIGZhaWxlZC4iKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyBFcnJvciIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBUcmFuc2xhdGUoRGF0YS5DaGFubmVsRGlzcGxheU5hbWUpIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iU3ViamVjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgaHRtbCAlXSI+PGEgaHJlZj0iIyI+WyUgRGF0YS5BcnRpY2xlRmllbGRzLlN1YmplY3QuVmFsdWUgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlN1YmplY3QuVmFsdWUgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDcmVhdGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoJ1RpbWVTaG9ydCcpICVdIj48YSBocmVmPSIjIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L2E+PC9kaXY+CiMgSW5jbHVkZSBjdXN0b20gc29ydGluZyBpbmZvcm1hdGlvbjogZGF0ZSBpbiBJU08gZm9ybWF0LgojIE90aGVyIGRhdGUgZm9ybWF0cyBjYW5ub3QgYmUgc29ydGVkIHJlbGlhYmx5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBEYXRhLkNyZWF0ZVRpbWUgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRoZSBhcnRpY2xlIHdhcyBlZGl0ZWQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5Jc0VkaXRlZCA9PSAiMSIgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRWRpdEljb24iPjxpIGNsYXNzPSJmYSBmYS1jbG9uZSI+PC9pPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5Jc0VkaXRlZCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJBdHRhY2htZW50cyBDZW50ZXIgQXR0YWNobWVudCBGaXhlZCBOb25UZXh0Q29udGVudCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtQXR0YWNobWVudCIpICVdClslIFBST0NFU1MgQXJ0aWNsZUF0dGFjaG1lbnRzLnR0ICVdClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbUF0dGFjaG1lbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5vQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOb0NvbnRlbnQiPjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtTm9BdHRhY2htZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU2hvd1RpbWVVbml0cyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iTm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlRpbWVVbml0IHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhhbmRsZSB1aS1yZXNpemFibGUtaGFuZGxlIHVpLXJlc2l6YWJsZS1zIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlJlc2l6ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFydGljbGVMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVsaW5lVmlldyIpICVdCgogICAgICAgIDxkaXYgY2xhc3M9IlRpbWVsaW5lVmlld1RpY2tldEFjdGlvbnMgSGlkZGVuIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZWxpbmVWaWV3VGlja2V0QWN0aW9ucyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IlRpY2tldEFjdGlvbnMgQXJ0aWNsZUlEX1slIERhdGEuQXJ0aWNsZUlEIHwgaHRtbCAlXSI+ClslIFBST0NFU1MgQXJ0aWNsZUFjdGlvbk1lbnUudHQgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUaW1lbGluZVZpZXdUaWNrZXRBY3Rpb25zIikgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iVGltZWxpbmVWaWV3QXJ0aWNsZUF0dGFjaG1lbnRzIEhpZGRlbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVsaW5lVmlld0FydGljbGVBdHRhY2htZW50cyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVBdHRhY2htZW50cyBBcnRpY2xlSURfWyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdIj4KWyUgUFJPQ0VTUyBBcnRpY2xlQXR0YWNobWVudHMudHQgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMiKSAlXQogICAgICAgIDwvZGl2PgoKICAgICAgICA8dWwgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgIDxsaSBpZD0iVGVtcGxhdGVMaXN0SXRlbSI+CiAgICAgICAgICAgICAgICA8aDM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVW5yZWFkQXJ0aWNsZXMgUmVtYXJrYWJsZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTWFyayB0aGlzIGFydGljbGUgYXMgcmVhZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJJbXBvcnRhbnQiKSB8IGh0bWwgJV0iPjwvaT4KICAgICAgICAgICAgICAgICAgICA8ZW0+PC9lbT4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPSJUeXBlIj48L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj48c3Bhbj48L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJTaG93RnVsbEFydGljbGVUZXh0IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IEZ1bGwgVGV4dCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zZWFyY2gtcGx1cyI+PC9pPgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvaDM+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KCiAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVBcnRpY2xlRGF0YSIgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3ViamVjdCI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV06IDwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZnJvbSI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIkZyb20iKSB8IGh0bWwgJV06IDwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG8iPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgVHJhbnNsYXRlKCJUbyIpIHwgaHRtbCAlXTogPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJjYyI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIkNjIikgfCBodG1sICVdOiA8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiBGdWxsQXJ0aWNsZVBsYWluVGV4dCIgZGF0YS10aXRsZT0iWyUgVHJhbnNsYXRlKCJGdWxsIEFydGljbGUgVGV4dCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJUaW1lbGluZVBsYWluVGV4dCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cCBjbGFzcz0iUGxhaW5UZXh0Ij48L3A+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiBBcnRpY2xlSUZyYW1lIiBkYXRhLXRpdGxlPSJbJSBUcmFuc2xhdGUoIkZ1bGwgQXJ0aWNsZSBUZXh0IikgfCBodG1sICVdIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iVGltZWxpbmVWaWV3IFVzZUFydGljbGVDb2xvcnMiPgogICAgICAgICAgICA8dWwgY2xhc3M9Ikxpc3RMZWZ0Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iTm9FdmVudHMiPlslIFRyYW5zbGF0ZSgiTm8gbW9yZSBldmVudHMgZm91bmQuIFBsZWFzZSB0cnkgY2hhbmdpbmcgdGhlIGZpbHRlciBzZXR0aW5ncy4iKSB8IGh0bWwgJV08L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8dWwgY2xhc3M9Ikxpc3RSaWdodCI+PC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIj48L2k+PC9zcGFuPgogICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVsaW5lVmlldyIpICVdCgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZSIpICVdCgpbJSBEYXRhLkFydGljbGVXaWRnZXRzSFRNTCAlXQo=</File>
        <File Location="Kernel/Output/HTML/ArticleAction/ArticlePin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKIyBUT0RPOiB3aGVuIG1lcmdpbmcgdG8gQ29yZSwgYWRhcHQgaGFuZGxpbmcgdG8gYmUgdGhlIHNhbWUgYXMgd2l0aCAiTWFya0FzSW1wb3J0YW50Iihmb3VuZCBpbiBBZ2VudFRpY2tldFpvb20pCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBcnRpY2xlUGluOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBDaGVja0FjY2VzcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldCBBcnRpY2xlIENoYW5uZWxOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIERlZmluZSBhY3Rpb24gYW5kIGdldCBpdHMgZnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4KICAgIG15ICRBY3Rpb24gICAgICAgPSAnQWdlbnRUaWNrZXRBcnRpY2xlUGluJzsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENvbmZpZyAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn07CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIG15ICRQZXJtaXNzaW9uID0gMDsKCiAgICAjIGNoZWNrIGlmIG1vZHVsZSBpcyByZWdpc3RlcmVkCiAgICByZXR1cm4gaWYgISRDb25maWc7CgogICAgIyBjaGVjayBBY2wKICAgIHJldHVybiBpZiAhJFBhcmFte0FjbEFjdGlvbkxvb2t1cH0tPnskQWN0aW9ufTsKCiAgICAjIEdldCBncm91cCBuYW1lcyBmcm9tIGNvbmZpZy4KICAgIG15IEBHcm91cE5hbWVzICAgPSBAeyAkQ29uZmlnLT57R3JvdXB9ICAgfHwgW10gfTsKICAgIG15IEBHcm91cFJvTmFtZXMgPSBAeyAkQ29uZmlnLT57R3JvdXBSb30gfHwgW10gfTsKCiAgICBwdXNoKCBAR3JvdXBOYW1lcywgQEdyb3VwUm9OYW1lcyApOwoKICAgICMgSWYgYWNjZXNzIGlzIHJlc3RyaWN0ZWQsIGFsbG93IGFjY2VzcyBvbmx5IGlmIHVzZXIgaGFzIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zIGluIGNvbmZpZ3VyZWQgZ3JvdXAocykuCiAgICBpZiAoQEdyb3VwTmFtZXMpIHsKICAgICAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAgICAgIyBHZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMuCiAgICAgICAgbXkgJUdyb3VwcyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICk7CgogICAgICAgIEdST1VQOgogICAgICAgIGZvciBteSAkR3JvdXBOYW1lIChAR3JvdXBOYW1lcykgewogICAgICAgICAgICBuZXh0IEdST1VQIGlmICEkR3JvdXBOYW1lOwoKICAgICAgICAgICAgIyBHZXQgdGhlIGdyb3VwIElELgogICAgICAgICAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoCiAgICAgICAgICAgICAgICBHcm91cCA9PiAkR3JvdXBOYW1lLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IEdST1VQIGlmICEkR3JvdXBJRDsKCiAgICAgICAgICAgICMgU3RvcCBjaGVja2luZyBpZiBtZW1iZXJzaGlwIGluIGF0IGxlYXN0IG9uZSBncm91cCBpcyBmb3VuZC4KICAgICAgICAgICAgaWYgKCAkR3JvdXBzeyRHcm91cElEfSApIHsKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uID0gMTsKICAgICAgICAgICAgICAgIGxhc3QgR1JPVVA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBPdGhlcndpc2UsIGFsd2F5cyBhbGxvdyBhY2Nlc3MuCiAgICBlbHNlIHsKICAgICAgICAkUGVybWlzc2lvbiA9IDE7CiAgICB9CgogICAgaWYgKCAkUGVybWlzc2lvbiA9PSAxICkgewoKICAgICAgICBteSAkUGluQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEFydGljbGVQaW4nKTsKCiAgICAgICAgaWYgKCAkUGluQ29uZmlnLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgIG15ICRPayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkUGluQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0fS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgTG9nTm8gICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuIGlmICEkT2s7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRQaW5Db25maWctPntSZXF1aXJlZExvY2t9ICkgewogICAgICAgICAgICBteSAkTG9ja2VkID0gJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja0dldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkTG9ja2VkKSB7CiAgICAgICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIE93bmVySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiBpZiAhJEFjY2Vzc09rOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBHZXRDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXQgQXJ0aWNsZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB1c2UgdXNlciBpZCAxIGJlY2F1c2UgYXJ0aWNsZXMgYXJlIHBpbm5lZCBmb3IgYWxsIHVzZXJzCiAgICBteSAlQXJ0aWNsZUZsYWdzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICBBcnRpY2xlSUQgPT4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgbXkgJEFydGljbGVJc1Bpbm5lZCA9ICRBcnRpY2xlRmxhZ3N7UGlubmVkfTsKCiAgICBteSAkTGluayAgICAgICAgPSAiQWN0aW9uPUFnZW50VGlja2V0QXJ0aWNsZVBpbjtUaWNrZXRJRD0kUGFyYW17VGlja2V0fS0+e1RpY2tldElEfTtBcnRpY2xlSUQ9JFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSI7CiAgICBteSAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ1BpbicpOwogICAgaWYgKCRBcnRpY2xlSXNQaW5uZWQpIHsKICAgICAgICAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ1VucGluJyk7CiAgICB9CgogICAgIyBzZXQgaW1wb3J0YW50IG1lbnUgaXRlbQogICAgbXkgJU1lbnVJdGVtID0gKAogICAgICAgIEl0ZW1UeXBlICAgID0+ICdMaW5rJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAkRGVzY3JpcHRpb24sCiAgICAgICAgTmFtZSAgICAgICAgPT4gJERlc2NyaXB0aW9uLAogICAgICAgIExpbmsgICAgICAgID0+ICRMaW5rLAogICAgKTsKCiAgICByZXR1cm4gKCBcJU1lbnVJdGVtICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AgentTicketArticlePin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0QXJ0aWNsZVBpbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBhcnRpY2xlcyBhcmUgcGlubmVkIGZvciBhbGwgdXNlcnMKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVGbGFnR2V0KAogICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgIG15ICRBcnRpY2xlSXNQaW5uZWQgPSAkQXJ0aWNsZUZsYWdze1Bpbm5lZH07CgogICAgaWYgKCRBcnRpY2xlSXNQaW5uZWQpIHsKCiAgICAgICAgIyB1c2UgdXNlciBpZCAxIGJlY2F1c2UgYXJ0aWNsZXMgYXJlIHBpbm5lZCBmb3IgYWxsIHVzZXJzCiAgICAgICAgJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnRGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnUGlubmVkJywKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBhcnRpY2xlcyBhcmUgcGlubmVkIGZvciBhbGwgdXNlcnMKICAgICAgICAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdQaW5uZWQnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07QXJ0aWNsZUlEPSRTZWxmLT57QXJ0aWNsZUlEfSIsCiAgICApOwp9CgoxOwo=</File>
        <File Location="Kernel/Config/Files/XML/ArticlePin.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zOjpJbnRlcm5hbCMjIzAwMS1BZ2VudFRpY2tldEFydGljbGVQaW4iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhdmFpbGFibGUgYXJ0aWNsZSBhY3Rpb25zIGZvciBJbnRlcm5hbCBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Wm9vbTo6QXJ0aWNsZUFjdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZTo6QWN0aW9uczo6UGhvbmUjIyMwMDEtQWdlbnRUaWNrZXRBcnRpY2xlUGluIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYXZhaWxhYmxlIGFydGljbGUgYWN0aW9ucyBmb3IgUGhvbmUgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBcnRpY2xlUGluIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBcnRpY2xlUGluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjExMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFydGljbGU6OkFjdGlvbnM6OkVtYWlsIyMjMDAxLUFnZW50VGlja2V0QXJ0aWNsZVBpbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGF2YWlsYWJsZSBhcnRpY2xlIGFjdGlvbnMgZm9yIGUtbWFpbCBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Wm9vbTo6QXJ0aWNsZUFjdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50VGlja2V0QXJ0aWNsZVBpbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+QWdlbnRUaWNrZXRBcnRpY2xlUGluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRUaWNrZXRab29tIyMjMDEwLUFydGljbGVQaW4iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNTUyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFydGljbGVQaW4uY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5BcnRpY2xlUGluLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT50aGlyZHBhcnR5L2pxdWVyeS10YWJsZXNvcnRlci0yLjI4LjE0L3dpZGdldC1zdGF0aWNSb3cubWluLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRBcnRpY2xlUGluIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBwZXJtaXNzaW9uIHJlcXVpcmVkIHRvIHBpbi91bnBpbiBhcnRpY2xlcyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpBZ2VudFRpY2tldEFydGljbGVQaW48L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5ub3RlPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEFydGljbGVQaW4jIyNSZXF1aXJlZExvY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIHRvIHBpbiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkFnZW50VGlja2V0QXJ0aWNsZVBpbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+Cg==</File>
        <File Location="var/httpd/htdocs/js/thirdparty/jquery-tablesorter-2.28.14/widget-staticRow.min.js" Permission="660" Encode="Base64">KGZ1bmN0aW9uKGZhY3Rvcnkpe2lmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpe2RlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTt9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpe21vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7fSBlbHNlIHtmYWN0b3J5KGpRdWVyeSk7fX0oZnVuY3Rpb24oalF1ZXJ5KXsKLyohIHdpZGdldDogc3RhdGljUm93IC0gdXBkYXRlZCAxMC8zMS8yMDE1ICh2Mi4yNC4wKSAqLwohZnVuY3Rpb24ocCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHModCl7dmFyIGUsaSxhLHMsbzsodD10LmNvbmZpZykmJihpPXQud2lkZ2V0T3B0aW9ucyx0LiR0Ym9kaWVzLmVhY2goZnVuY3Rpb24oKXtlPXAodGhpcykuY2hpbGRyZW4oKSxvPWUubGVuZ3RoLGUuZmlsdGVyKGkuc3RhdGljUm93X2NsYXNzKS5lYWNoKGZ1bmN0aW9uKCl7ZT1wKHRoaXMpLHM9dm9pZCAwIT09KHM9ZS5kYXRhKGkuc3RhdGljUm93X2luZGV4KSk/KGE9cGFyc2VGbG9hdChzKSwvJS8udGVzdChzKT9NYXRoLnJvdW5kKGEvMTAwKm8pOmEpOmUuaW5kZXgoKSxlLmRhdGEoaS5zdGF0aWNSb3dfZGF0YSxzKX0pfSkpfXZhciBvPXAudGFibGVzb3J0ZXI7by5hZGRXaWRnZXQoe2lkOiJzdGF0aWNSb3ciLG9wdGlvbnM6e3N0YXRpY1Jvd19jbGFzczoiLnN0YXRpYyIsc3RhdGljUm93X2RhdGE6InN0YXRpYy1pbmRleCIsc3RhdGljUm93X2luZGV4OiJyb3ctaW5kZXgiLHN0YXRpY1Jvd19ldmVudDoic3RhdGljUm93c1JlZnJlc2gifSxpbml0OmZ1bmN0aW9uKHQsZSxpLGEpe3ModCksaS4kdGFibGUudW5iaW5kKCgidXBkYXRlQ29tcGxldGUudHNzdGF0aWNyb3dzICIrYS5zdGF0aWNSb3dfZXZlbnQpLnJlcGxhY2UoL1xzKy9nLCIgIikpLmJpbmQoInVwZGF0ZUNvbXBsZXRlLnRzc3RhdGljcm93cyAiK2Euc3RhdGljUm93X2V2ZW50LGZ1bmN0aW9uKCl7cyh0KSxvLmFwcGx5V2lkZ2V0KHQpfSl9LGZvcm1hdDpmdW5jdGlvbih0LGUsaSl7dmFyIGEscyxvLG4sYyxkLHIsbDtlLiR0Ym9kaWVzLmVhY2goZnVuY3Rpb24oKXtmb3IoYz1wLnRhYmxlc29ydGVyLnByb2Nlc3NUYm9keSh0LHAodGhpcyksITApLGQ9ITAsbz0wLHI9Yy5jaGlsZHJlbihpLnN0YXRpY1Jvd19jbGFzcyksbj1jLmNoaWxkcmVuKCJ0ciIpLmxlbmd0aC0xLGw9ci5sZW5ndGg7ZCYmbzxsOylkPSExLHIuZWFjaChmdW5jdGlvbigpe2E9cCh0aGlzKS5kYXRhKGkuc3RhdGljUm93X2RhdGEpLChhPW48PWE/bjphPDA/MDphKSE9PXAodGhpcykuaW5kZXgoKSYmKGQ9ITAscz1wKHRoaXMpLmRldGFjaCgpLG48PWE/cy5hcHBlbmRUbyhjKTowPT09YT9zLnByZXBlbmRUbyhjKTpzLmluc2VydEJlZm9yZShjLmZpbmQoInRyOmVxKCIrYSsiKSIpKSl9KSxvKys7cC50YWJsZXNvcnRlci5wcm9jZXNzVGJvZHkodCxjLCExKX0pLGUuJHRhYmxlLnRyaWdnZXJIYW5kbGVyKCJzdGF0aWNSb3dzQ29tcGxldGUiLHQpfSxyZW1vdmU6ZnVuY3Rpb24odCxlLGkpe2UuJHRhYmxlLnVuYmluZCgoInVwZGF0ZUNvbXBsZXRlLnRzc3RhdGljcm93cyAiK2kuc3RhdGljUm93X2V2ZW50KS5yZXBsYWNlKC9ccysvZywiICIpKX19KX0oalF1ZXJ5KTtyZXR1cm4galF1ZXJ5O30pKTsK</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.ArticlePin.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5BcnRpY2xlUGluCiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBhdXRob3IKICogQGRlc2NyaXB0aW9uCiAqCiAqLwpDb3JlLkFnZW50LkFydGljbGVQaW4gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBuYW1lIEluaXQKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICoKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgbGV0ICRBcnRpY2xlVGFibGUgPSAkKCcjQXJ0aWNsZVRhYmxlJyk7CgogICAgICAgIC8vIG1ha2UgcGlubmVkIGxpc3QgaXRlbXMgc3RhdGljIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgZmlyc3Qgcm93cyBpbiB0aGUgdGFibGUgKGhhbmRsZWQgYnkganF1ZXJ5LXRhYmxlc29ydGVyIHdpZGdldCBzdGF0aWNSb3cpCiAgICAgICAgbGV0ICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW1zID0gJCgnLlBpbm5lZEFydGljbGUnLCAkQXJ0aWNsZVRhYmxlKS5jbG9zZXN0KCd0cicpOwogICAgICAgICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW1zLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7CiAgICAgICAgICAgIGxldCAkUGlubmVkQXJ0aWNsZUxpc3RJdGVtID0gJCh0aGlzKTsKICAgICAgICAgICAgJFBpbm5lZEFydGljbGVMaXN0SXRlbS5hZGRDbGFzcygnc3RhdGljJyk7CiAgICAgICAgICAgICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW0uYXR0cignZGF0YS1yb3ctaW5kZXgnLCBpbmRleCk7CiAgICAgICAgfSk7CgoKICAgICAgICBsZXQgUGlubmVkQXJ0aWNsZUlEcyA9ICQoJy5ObyBpbnB1dC5BcnRpY2xlSUQnLCAkUGlubmVkQXJ0aWNsZUxpc3RJdGVtcykubWFwKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gJCh0aGlzKS52YWwoKTsKICAgICAgICB9KS5nZXQoKTsKCiAgICAgICAgLy8gZmluZCBjb250YWluZXJzIG9mIHdpZGdldHMgb2YgcGlubmVkIGFydGljbGVzIGJ5IHRoZWlyIGFydGljbGUgSUQgYW5kIGFkZCB0aGVtIHRvIHRoZSBzdGFydCBvZiB0aGUgc3Vycm91bmRpbmcgZGl2CiAgICAgICAgbGV0ICRBcnRpY2xlV2lkZ2V0c0NvbnRhaW5lciA9ICQoJyNBcnRpY2xlSXRlbXMnKTsKICAgICAgICBsZXQgJFBpbm5lZEFydGljbGVzID0gJCgnPiBkaXYnLCAkQXJ0aWNsZVdpZGdldHNDb250YWluZXIpLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgbGV0IEFydGljbGVJRCA9ICQoJ2E6Zmlyc3QtY2hpbGQnLCAkKHRoaXMpKS5hdHRyKCduYW1lJykuc2xpY2UoNyk7CiAgICAgICAgICAgIHJldHVybiBQaW5uZWRBcnRpY2xlSURzLmluY2x1ZGVzKEFydGljbGVJRCk7CiAgICAgICAgfSk7CgogICAgICAgICRQaW5uZWRBcnRpY2xlcy5kZXRhY2goKTsKICAgICAgICAkUGlubmVkQXJ0aWNsZXMucHJlcGVuZFRvKCRBcnRpY2xlV2lkZ2V0c0NvbnRhaW5lcik7CiAgICAgICAgJFBpbm5lZEFydGljbGVzLmFkZENsYXNzKCdQaW5uZWQnKTsKCiAgICAgICAgJCgnLkhlYWRlciBoMicsICRQaW5uZWRBcnRpY2xlcykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGxldCAkUGluID0gJC5wYXJzZUhUTUwoJzxwIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlBpbm5lZCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLXRodW1iLXRhY2siPjwvaT48ZW0+WyUgVHJhbnNsYXRlKCJQaW5uZWQiKSB8IGh0bWwgJV08L2VtPjwvcD4nKTsKICAgICAgICAgICAgJCh0aGlzKS5hZnRlcigkUGluKTsKICAgICAgICB9KTsKCiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEVfRUFSTFknKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cgp9KENvcmUuQWdlbnQuQXJ0aWNsZVBpbiB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/Core.UI.Table.Sort.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vICRvcmlnaW46IG90b2JvIC0gNmVmZGM3YmYyYTMzMjUyNzdjZDc5YTYwZjBmMjQwN2Y4YWQ1OWU4NyAtIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5VSS5UYWJsZS5Tb3J0LmpzCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuVUkgPSBDb3JlLlVJIHx8IHt9OwpDb3JlLlVJLlRhYmxlID0gQ29yZS5VSS5UYWJsZSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuVUkuVGFibGUuU29ydAogKiBAbWVtYmVyb2YgQ29yZS5VSS5UYWJsZQogKiBAYXV0aG9yCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgZm9yIGNsaWVudCBzaWRlIHRhYmxlIHNvcnRpbmcuCiAqLwpDb3JlLlVJLlRhYmxlLlNvcnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgQ3VzdG9tVGV4dEV4dHJhY3RvcgogICAgICogQG1lbWJlcm9mIENvcmUuVUkuVGFibGUuU29ydAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBFeHRyYWN0ZWQgdGV4dC4KICAgICAqIEBwYXJhbSB7RE9NT2JqZWN0fSAkTm9kZSAtIEN1cnJlbnQgbm9kZSBvZiB3aGljaCB0aGUgc29ydGluZyBkYXRhIHNob3VsZCBiZSBleHRyYWN0ZWQuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgQ3VzdG9tIHRleHQgZXh0cmFjdG9yLiBJdCB3aWxsIGxvb2sgaWYgYW4gaGlkZGVuIGZpZWxkIHdpdGggdGhlIGNsYXNzCiAgICAgKiAgICAgICdTb3J0RGF0YScgaXMgaW4gdGhlIHRhYmxlIGNlbGwgYW5kIHJldHVybiBpdHMgY29udGVudHMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEN1c3RvbVRleHRFeHRyYWN0b3IoJE5vZGUpIHsKICAgICAgICByZXR1cm4gJCgkTm9kZSkuZmluZCgnLlNvcnREYXRhJykudmFsKCkgfHwgJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5UYWJsZS5Tb3J0CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkVGFibGUgLSBUaGUgdGFibGUgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgc29ydGVkLgogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gRmluaXNoZWQgIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24sIGNhbGxlZCBhZnRlciB0aGUgc29ydGluZy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB0YWJsZSBzb3J0aW5nLgogICAgICogICAgICBJZiB5b3UgaGF2ZSBjZWxscyB3aXRoIHNwZWNpYWwgY29udGVudCBsaWtlIGRhdGVzLCB5b3UgY2FuCiAgICAgKiAgICAgIHB1dCBhIGhpZGRlbiBmaWVsZCB3aXRoIHRoZSBjbGFzcyAnU29ydERhdGEnIGluIHRoZW0gd2hpY2ggY29udGFpbnMKICAgICAqICAgICAgYSBzb3J0YWJsZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGxpa2UgYW4gSVNPIGRhdGUuIFRoaXMgd2lsbCB0aGVuIGJlCiAgICAgKiAgICAgIHVzZWQgZm9yIHRoZSBzb3J0aW5nLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRUYWJsZSwgRmluaXNoZWQpIHsKICAgICAgICB2YXIgJFNvcnRhYmxlQ29sdW1ucywKICAgICAgICAgICAgJEluaXRpYWxTb3J0aW5nLAogICAgICAgICAgICBTb3J0T3JkZXIsCiAgICAgICAgICAgIEhlYWRlcnMgPSB7fSwKICAgICAgICAgICAgSW5pdGlhbFNvcnQgPSBbXSwKICAgICAgICAgICAgQ29sdW1uQ291bnQgPSAwOwoKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJFRhYmxlKSkgewogICAgICAgICAgICAkU29ydGFibGVDb2x1bW5zID0gJFRhYmxlLmZpbmQoJ3RoLlNvcnRhYmxlJyk7CiAgICAgICAgICAgICRJbml0aWFsU29ydGluZyA9ICRTb3J0YWJsZUNvbHVtbnMuZmlsdGVyKCcuSW5pdGlhbFNvcnRpbmcnKTsKCiAgICAgICAgICAgIC8vIE9ubHkgc3RhcnQsIGlmIHRoZXJlIGFyZSBjb2x1bW5zIHRoYXQgYWxsb3cgc29ydGluZwogICAgICAgICAgICBpZiAoJFNvcnRhYmxlQ29sdW1ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgY29sdW1ucyB3aGljaCBzaG91bGQgbm90IGJlIHNvcnRlZAogICAgICAgICAgICAgICAgJFRhYmxlLmZpbmQoJ3RoJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCdTb3J0YWJsZScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcnNbQ29sdW1uQ291bnRdID0geyBzb3J0ZXI6IGZhbHNlIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIENvbHVtbkNvdW50Kys7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0dldCB0aGUgY29sdW1uLCB3aGljaCBzaG91bGQgYmUgc29ydGVkIGluaXRpYWxseSAoY2FuIGJlIG9ubHkgb25lKQogICAgICAgICAgICAgICAgaWYgKCRJbml0aWFsU29ydGluZy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICBTb3J0T3JkZXIgPSAkSW5pdGlhbFNvcnRpbmcuaGFzQ2xhc3MoJ0Rlc2NlbmRpbmcnKSA/ICcxJyA6ICcwJzsKICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsbHkgc29ydCB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhc2NlbmRpbmcgKDApIG9yIGRlc2NlbmRpbmcgKDEpCiAgICAgICAgICAgICAgICAgICAgSW5pdGlhbFNvcnQgPSBbWyRJbml0aWFsU29ydGluZy5pbmRleCgpLCBTb3J0T3JkZXJdXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkVGFibGUudGFibGVzb3J0ZXIoewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IEhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgc29ydExpc3Q6IEluaXRpYWxTb3J0LAogICAgICAgICAgICAgICAgICAgIHRleHRFeHRyYWN0aW9uOiBDdXN0b21UZXh0RXh0cmFjdG9yLAovLyBSb3RoZXJPU1MgLyBBZ2VudFRpY2tldEFydGljbGVQaW4KICAgICAgICAgICAgICAgICAgICB3aWRnZXRzOiBbJ3N0YXRpY1JvdyddCi8vIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgJFRhYmxlLnRhYmxlc29ydGVyLmxhbmd1YWdlID0gewogICAgICAgICAgICAgICAgICAgIHNvcnRBc2MgICAgICA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdBc2NlbmRpbmcgc29ydCBhcHBsaWVkLCAnKSwKICAgICAgICAgICAgICAgICAgICBzb3J0RGVzYyAgICAgOiBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRGVzY2VuZGluZyBzb3J0IGFwcGxpZWQsICcpLAogICAgICAgICAgICAgICAgICAgIHNvcnROb25lICAgICA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdObyBzb3J0IGFwcGxpZWQsICcpLAogICAgICAgICAgICAgICAgICAgIHNvcnREaXNhYmxlZCA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdzb3J0aW5nIGlzIGRpc2FibGVkJyksCiAgICAgICAgICAgICAgICAgICAgbmV4dEFzYyAgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIGFwcGx5IGFuIGFzY2VuZGluZyBzb3J0JyksCiAgICAgICAgICAgICAgICAgICAgbmV4dERlc2MgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIGFwcGx5IGEgZGVzY2VuZGluZyBzb3J0JyksCiAgICAgICAgICAgICAgICAgICAgbmV4dE5vbmUgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIHJlbW92ZSB0aGUgc29ydCcpCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24oRmluaXNoZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgJFRhYmxlLm9uKCdzb3J0RW5kJywgRmluaXNoZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oQ29yZS5VSS5UYWJsZS5Tb3J0IHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/Core.Agent.ArticlePin.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi5QaW5uZWQgLldpZGdldFNpbXBsZSAuSGVhZGVyID4gcCBlbSwKc3Bhbi5QaW5uZWRBcnRpY2xlIGVtIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5QaW5uZWQgLldpZGdldFNpbXBsZSB7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA0cHggMCByZ2IoIGZyb20gdmFyKC0tY29sU2hhZG93RGFyaykgciBnIGIgLyAwLjI1KTsKfQoKLlBpbm5lZCAuV2lkZ2V0U2ltcGxlIC5IZWFkZXIgPiBwIHsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHBhZGRpbmc6IDRweCAzcHggNHB4IDZweDsKICAgIG1hcmdpbjogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBmb250LXNpemU6IDEzcHg7CiAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAjZmZmOwogICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMsCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRoLlVucmVhZEFydGljbGVzIC50YWJsZXNvcnRlci1oZWFkZXItaW5uZXIgewogICAgd2lkdGg6IGNhbGMoIDE2cHggKiAzICsgOHB4KTsgLyogMyBpY29ucyArIDJweCBtYXJnaW4gKi8KfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMgc3Bhbi5VbnJlYWRBcnRpY2xlc3sKICAgIHdpZHRoOiAxNnB4OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OyAvKiBpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgQ29yZS5EZWZhdWx0LmNzcyBpbXBvcnRhbnQgc2V0dGluZyB0aGF0IHNob3VsZCBiZSBjaGFuZ2VkICovCiAgICBtYXJnaW46IDA7Cn0KCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRkLlVucmVhZEFydGljbGVzIHsKICAgIHdpZHRoOiB1bnNldDsKICAgIGhlaWdodDogMjBweDsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMgYSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGQuVW5yZWFkQXJ0aWNsZXMsCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRoLlVucmVhZEFydGljbGVzIGEgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwcHggMnB4OwogICAgY29sdW1uLWdhcDogMnB4Owp9CgojQXJ0aWNsZVRhYmxlLkRhdGFUYWJsZSB0ZC5VbnJlYWRBcnRpY2xlcyBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBmbG9hdDogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGQuVW5yZWFkQXJ0aWNsZXMgc3BhbiBpIHsKICAgIG1hcmdpbjogMDsKfQo=</File>
        <File Location="doc/en/AgentTicketArticlePin.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>