My43LjIKYWU2NTYxNjlkMjBhMjQxNGZlMWQ0ODFmMTQ2NTg3YTMwODU5MDMxMAoECG86GVNhc3M6OlRyZWU6OlJvb3ROb2RlDDoOQGNoaWxkcmVuWwpvOhxTYXNzOjpUcmVlOjpDb21tZW50Tm9kZQw6C0B2YWx1ZVsGSSICHQcvKi8gU3ludGF4IFV0aWxpdGllcyBmb3IgRXh0ZW5kaW5nIFN1c3kKICovID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLyBUaGVyZSBhcmUgbWFueSBzdGVwcyBpbnZvbHZlZAogKi8gd2hlbiB0cmFuc2xhdGluZyBiZXR3ZWVuIHRoZSBTdXN5IHN5bnRheCBsYXllciwKICovIGFuZCB0aGUgU3UgY29yZSBtYXRoLgogKi8gVGhhdCBlbnRpcmUgcHJvY2VzcyBjYW4gYmUgY29uZGVuc2VkIHdpdGggdGhlc2UgdHdvIGZ1bmN0aW9ucy4KICovIEZvciBhbnlvbmUgdGhhdCB3YW50cyB0byBhY2Nlc3MgdGhlIGZ1bGwgcG93ZXIgb2YgU3VzeSwKICovIGFuZCBidWlsZCB0aGVpciBvd24gcGx1Z2lucywgZnVuY3Rpb25zLCBvciBtaXhpbnMg4oCTCiAqLyB0aGlzIGlzIHRoZSBwcmltYXJ5IEFQSSBmb3IgY29tcGlsaW5nIHVzZXIgaW5wdXQsCiAqLyBhbmQgYWNjZXNzaW5nIHRoZSBjb3JlIG1hdGguCiAqLwogKi8gVGhpcyBpcyB0aGUgc2FtZSB0ZWNobmlxdWUgd2UgdXNlIGludGVybmFsbHksCiAqLyB0byBrZWVwIG91ciBBUEkgbGF5ZXIgc2ltcGxlIGFuZCBsaWdodC13ZWlnaHQuCiAqLyBFdmVyeSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHMsCiAqLyBhICJzaG9ydGhhbmQiIGRlc2NyaXB0aW9uIG9mIHRoZSBzcGFuIG9yIGNvbnRleHQsCiAqLyBhbmQgYW4gb3B0aW9uYWwgc2V0dGluZ3MtbWFwIHRvIG92ZXJyaWRlIGdsb2JhbCBkZWZhdWx0cy4KICovCiAqLyAtIFVzZSBgc3VzeS1jb21waWxlKClgIHRvIHBhcnNlLCBtZXJnZSwgYW5kIG5vcm1hbGl6ZQogKi8gICBhbGwgdGhlIHVzZXIgc2V0dGluZ3MgaW50byBhIHNpbmdsZSBtYXAuCiAqLyAtIFRoZW4gdXNlIGBzdS1jYWxsKClgIHRvIGNhbGwgb25lIG9mIHRoZSBjb3JlIG1hdGggZnVuY3Rpb25zLAogKi8gICB3aXRoIHdoYXRldmVyIGRhdGEgaXMgbmVlZGVkIGZvciB0aGF0IGZ1bmN0aW9uLgogKi8KICovIEBncm91cCBwbHVnaW4tdXRpbHMKICovIEBzZWUgc3VzeS1jb21waWxlCiAqLyBAc2VlIHN1LWNhbGwKICovCiAqLyBAZXhhbXBsZSBzY3NzIC0gU3VzeSBBUEkgYGd1dHRlcmAgZnVuY3Rpb24KICovICAgQGZ1bmN0aW9uIHN1c3ktZ3V0dGVyKAogKi8gICAgICRjb250ZXh0OiBzdXN5LWdldCgnY29sdW1ucycpLAogKi8gICAgICRjb25maWc6ICgpCiAqLyAgICkgewogKi8gICAgIC8vIGNvbXBpbGUgYW5kIG5vcm1hbGl6ZSBhbGwgdXNlciBhcmd1bWVudHMgYW5kIGdsb2JhbCBzZXR0aW5ncwogKi8gICAgICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJGNvbnRleHQsICRjb25maWcsICdjb250ZXh0LW9ubHknKTsKICovICAgICAvLyBjYWxsIGBzdS1ndXR0ZXJgIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGEKICovICAgICBAcmV0dXJuIHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTsKICovICAgfQogKi8KICovIEBleGFtcGxlIHNjc3MgLSBTYW1wbGUgYHNwYW5gIG1peGluIGZvciBmbG9hdGVkIGdyaWRzCiAqLyAgIEBtaXhpbiBzcGFuKAogKi8gICAgICRzcGFuLAogKi8gICAgICRjb25maWc6ICgpCiAqLyAgICkgewogKi8gICAgICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJHNwYW4sICRjb25maWcpOwogKi8gICAgIHdpZHRoOiBzdS1jYWxsKCdzdS1zcGFuJywgJGNvbnRleHQpOwogKi8KICovICAgICBAaWYgaW5kZXgoJHNwYW4sICdsYXN0JykgewogKi8gICAgICAgZmxvYXQ6IHJpZ2h0OwogKi8gICAgIH0gQGVsc2UgewogKi8gICAgICAgZmxvYXQ6IGxlZnQ7CiAqLyAgICAgICBtYXJnaW4tcmlnaHQ6IHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTsKICovICAgICB9CiAqLyAgIH0gKi8GOgZFVDoKQHR5cGU6C3NpbGVudDsGWwA6DkBmaWxlbmFtZTA6DUBvcHRpb25zewA6CkBsaW5laQY6EkBzb3VyY2VfcmFuZ2VvOhhTYXNzOjpTb3VyY2U6OlJhbmdlCToPQHN0YXJ0X3Bvc286G1Nhc3M6OlNvdXJjZTo6UG9zaXRpb24HOw5pBjoMQG9mZnNldGkGOg1AZW5kX3Bvc287Egc7Dmk5OxNpDToKQGZpbGVJIn4vTGlicmFyeS9SdWJ5L0dlbXMvMi4zLjAvZ2Vtcy9taW5pbWFsLW1pc3Rha2VzLWpla3lsbC00LjE0LjEvX3Nhc3MvbWluaW1hbC1taXN0YWtlcy92ZW5kb3Ivc3VzeS9zdXN5L19zeW50YXgtaGVscGVycy5zY3NzBjsJVDoOQGltcG9ydGVybzogU2Fzczo6SW1wb3J0ZXJzOjpGaWxlc3lzdGVtCDoKQHJvb3RJIkcvTGlicmFyeS9SdWJ5L0dlbXMvMi4zLjAvZ2Vtcy9taW5pbWFsLW1pc3Rha2VzLWpla3lsbC00LjE0LjEvX3Nhc3MGOwlGOg9AcmVhbF9yb290SSJHL0xpYnJhcnkvUnVieS9HZW1zLzIuMy4wL2dlbXMvbWluaW1hbC1taXN0YWtlcy1qZWt5bGwtNC4xNC4xL19zYXNzBjsJVDoYQHNhbWVfbmFtZV93YXJuaW5nc286CFNldAY6CkBoYXNofQBGbzsHDDsIWwZJIgJFBy8qIENvbXBpbGUKICogLS0tLS0tLQogKi8gU3VzeSdzIHN5bnRheCBsYXllciBoYXMgdmFyaW91cyBtb3ZpbmcgcGFydHMsCiAqLyB3aXRoIHN5bnRheC1wYXJzaW5nIGZvciB0aGUgZ3JpZC9zcGFuIHNob3J0aGFuZCwKICovIGFuZCBub3JtYWxpemF0aW9uIGZvciBlYWNoIG9mIHRoZSByZXN1bHRpbmcgdmFsdWVzLgogKi8gVGhlIGNvbXBpbGUgZnVuY3Rpb24gcm9sbHMgdGhpcyBhbGwgdG9nZXRoZXIKICovIGluIGEgc2luZ2xlIGNhbGwg4oCTCiAqLyBmb3IgcXVpY2sgYWNjZXNzIGZyb20gb3VyIGludGVybmFsIEFQSSBmdW5jdGlvbnMsCiAqLyBvciBhbnkgYWRkaXRpb25hbCBmdW5jdGlvbnMgYW5kIG1peGlucyB5b3UgYWRkIHRvIHlvdXIgcHJvamVjdC4KICovIFBhc3MgdXNlciBpbnB1dCBhbmQgY29uZmlndXJhdGlvbiBtYXBzIHRvIHRoZSBjb21waWxlciwKICovIGFuZCBpdCB3aWxsIGhhbmQgYmFjayBhIG1hcCBvZiB2YWx1ZXMgcmVhZHkgZm9yIFN1LgogKi8gQ29tYmluZSB0aGlzIHdpdGggdGhlIGBzdS1jYWxsYCBmdW5jdGlvbgogKi8gdG8gcXVpY2tseSBwYXJzZSwgbm9ybWFsaXplLCBhbmQgcHJvY2VzcyBncmlkIGNhbGN1bGF0aW9ucy4KICovCiAqLyBAZ3JvdXAgcGx1Z2luLXV0aWxzCiAqLyBAc2VlIHN1LWNhbGwKICovCiAqLyBAcGFyYW0ge2xpc3QgfCBtYXB9ICRzaG9ydGhhbmQgLQogKi8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSBzcGFuLAogKi8gICBvcHRpb25hbGx5IGNvbnRhaW5pbmc6CiAqLyAgIC0gYSBjb3VudCwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBzcGFuOwogKi8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7CiAqLyAgIC0gYG5hcnJvd2AsIGB3aWRlYCwgb3IgYHdpZGVyYCBmb3Igb3B0aW9uYWxseSBzcHJlYWRpbmcKICovICAgICBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVyczsKICovICAgLSBgb2YgJG4gPHNwcmVhZD5gIGZvciBhdmFpbGFibGUgZ3JpZCBjb2x1bW5zCiAqLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyCiAqLyAgICAgKHNwYW4gY291bnRzIGxpa2UgYG9mIDZgIGFyZSBvbmx5IHZhbGlkCiAqLyAgICAgaW4gdGhlIGNvbnRleHQgb2Ygc3ltbWV0cmljYWwgZ3JpZHMpOwogKi8gICAtIGFuZCBgc2V0LWd1dHRlcnMgJG5gIHRvIG92ZXJyaWRlIGdsb2JhbCBndXR0ZXIgc2V0dGluZ3MKICovIEBwYXJhbSB7bWFwfSAkY29uZmlnIFtudWxsXSAtCiAqLyAgIE9wdGlvbmFsIG1hcCBvZiBTdXN5IGdyaWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncwogKi8gQHBhcmFtIHtib29sfSAkY29udGV4dC1vbmx5IFtmYWxzZV0gLQogKi8gICBBbGxvdyB0aGUgcGFyc2VyIHRvIGlnbm9yZSBzcGFuIGFuZCBzcGFuLXNwcmVhZCB2YWx1ZXMsCiAqLyAgIG9ubHkgcGFyc2luZyBjb250ZXh0IGFuZCBjb250YWluZXItc3ByZWFkCiAqLwogKi8gQHJldHVybiB7bWFwfSAtCiAqLyAgIFBhcnNlZCBhbmQgbm9ybWFsaXplZCBtYXAgb2Ygc2V0dGluZ3MsCiAqLyAgIGJhc2VkIG9uIGdsb2JhbCBhbmQgbG9jYWwgY29uZmlndXJhdGlvbiwKICovICAgYWxvbmd3aXRoIHNob3J0aGFkIGFkanVzdG1lbnRzLgogKi8KICovIEBleGFtcGxlIHNjc3MgLQogKi8gICAkdXNlci1pbnB1dDogMyB3aWRlIG9mIHN1c3ktcmVwZWF0KDYsIDEyMHB4KSBzZXQtZ3V0dGVycyAxMHB4OwogKi8gICAkZ3JpZC1kYXRhOiBzdXN5LWNvbXBpbGUoJHVzZXItaW5wdXQsICRzdXN5KTsKICovCiAqLyAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkZ3JpZC1kYXRhIHsKICovICAgICAvKiAjeyRrZXl9OiAjeyR2YWx1ZX0sICovCiAqLyAgIH0gKi8GOwlUOwo7CzsGWwA7DDA7DUALOw5pPTsPbzsQCTsRbzsSBzsOaT07E2kGOxRvOxIHOw5pazsTaQ07FUAPOxZAEG86HVNhc3M6OlRyZWU6OkZ1bmN0aW9uTm9kZQ46CkBuYW1lSSIRc3VzeS1jb21waWxlBjsJVDoKQGFyZ3Nb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OxIHOw5pczsTaS87FUAPOxZAEG87Bww7CFsGSSIoLyogUGFyc2UgYW5kIG5vcm1hbGl6ZSBzaG9ydGhhbmQgKi8GOwlUOwo7CzsGWwA7DDA7DUALOw5pdTsPbzsQCTsRbzsSBzsOaXU7E2kIOxRvOxIHOw5pdTsTaSg7FUAPOxZAEHU6F1Nhc3M6OlRyZWU6OklmTm9kZQLTBwQIWwhvOiJTYXNzOjpTY3JpcHQ6OlRyZWU6Ok9wZXJhdGlvbgw6DkBvcGVyYW5kMW87AAw7Bm86IFNhc3M6OlNjcmlwdDo6VHJlZTo6RnVuY2FsbA86DkBjYWxsYWJsZTA6CkBuYW1lSSIMdHlwZS1vZgY6BkVUOgpAYXJnc1sGbzohU2Fzczo6U2NyaXB0OjpUcmVlOjpWYXJpYWJsZQs7CUkiCnNob3J0BjsKVDoWQHVuZGVyc2NvcmVkX25hbWVJIgpzaG9ydAY7ClQ6CkBsaW5laXY6EkBzb3VyY2VfcmFuZ2VvOhhTYXNzOjpTb3VyY2U6OlJhbmdlCToPQHN0YXJ0X3Bvc286G1Nhc3M6OlNvdXJjZTo6UG9zaXRpb24HOw5pdjoMQG9mZnNldGkVOg1AZW5kX3Bvc287Egc7Dml2OxNpGzoKQGZpbGVJIn4vTGlicmFyeS9SdWJ5L0dlbXMvMi4zLjAvZ2Vtcy9taW5pbWFsLW1pc3Rha2VzLWpla3lsbC00LjE0LjEvX3Nhc3MvbWluaW1hbC1taXN0YWtlcy92ZW5kb3Ivc3VzeS9zdXN5L19zeW50YXgtaGVscGVycy5zY3NzBjsKVDoOQGltcG9ydGVybzogU2Fzczo6SW1wb3J0ZXJzOjpGaWxlc3lzdGVtCDoKQHJvb3RJIkcvTGlicmFyeS9SdWJ5L0dlbXMvMi4zLjAvZ2Vtcy9taW5pbWFsLW1pc3Rha2VzLWpla3lsbC00LjE0LjEvX3Nhc3MGOwpGOg9AcmVhbF9yb290SSJHL0xpYnJhcnkvUnVieS9HZW1zLzIuMy4wL2dlbXMvbWluaW1hbC1taXN0YWtlcy1qZWt5bGwtNC4xNC4xL19zYXNzBjsKVDoYQHNhbWVfbmFtZV93YXJuaW5nc286CFNldAY6CkBoYXNofQBGOg5AZmlsZW5hbWVAEToNQG9wdGlvbnN7ADoOQGtleXdvcmRzbzoeU2Fzczo6VXRpbDo6Tm9ybWFsaXplZE1hcAc6EUBrZXlfc3RyaW5nc3sAOglAbWFwewA6C0BzcGxhdDA6EUBrd2FyZ19zcGxhdDA7Dml2Ow9vOxAJOxFvOxIHOw5pdjsTaQ07FG87Egc7Dml2OxNpHDsVQBE7FkASOx1AETseQBc6DkBvcGVyYW5kMm86IFNhc3M6OlNjcmlwdDo6VHJlZTo6TGl0ZXJhbAk6C0B2YWx1ZW86IFNhc3M6OlNjcmlwdDo6VmFsdWU6OlN0cmluZwk7J0kiCG1hcAY7ClQ7HkAXOgpAdHlwZToLc3RyaW5nOiJAZGVwcmVjYXRlZF9pbnRlcnBfZXF1aXZhbGVudDA7Dml2Ow9vOxAJOxFvOxIHOw5pdjsTaSA7FG87Egc7Dml2OxNpJTsVQBE7FkASOx1AEToOQG9wZXJhdG9yOghuZXE7Dml2Ow9vOxAJOxFAHDsUbzsSBzsOaXY7E2klOxVAETsWQBI7HUAROx5AFzslbzsADDsGbzsHDzsIMDsJSSILbGVuZ3RoBjsKVDsLWwZvOwwLOwlJIgpzaG9ydAY7ClQ7DUkiCnNob3J0BjsKVDsOaXY7D287EAk7EW87Egc7Dml2OxNpMzsUbzsSBzsOaXY7E2k5OxVAETsWQBI7HUAROx5AFzsfbzsgBzshewA7InsAOyMwOyQwOw5pdjsPbzsQCTsRbzsSBzsOaXY7E2ksOxRvOxIHOw5pdjsTaTo7FUAROxZAEjsdQBE7HkAXOyVvOyYJOydvOiBTYXNzOjpTY3JpcHQ6OlZhbHVlOjpOdW1iZXIKOydpADseQBc6FUBudW1lcmF0b3JfdW5pdHNbADoXQGRlbm9taW5hdG9yX3VuaXRzWwA6DkBvcmlnaW5hbDA7Dml2Ow9vOxAJOxFvOxIHOw5pdjsTaT07FG87Egc7Dml2OxNpPjsVQBE7FkASOx1AETssOgdndDsOaXY7D287EAk7EUA0OxRvOxIHOw5pdjsTaT47FUAROxZAEjsdQBE7HkAXOyw6CGFuZDsOaXY7D287EAk7EUAcOxRvOxIHOw5pdjsTaUA7FUAROxZAEjsdQBE7HkAXMFsGbzodU2Fzczo6VHJlZTo6VmFyaWFibGVOb2RlDjsJSSIKc2hvcnQGOwpUOgpAZXhwcm87Bw87CDA7CUkiD3N1c3ktcGFyc2UGOwpUOwtbB287DAs7CUkiCnNob3J0BjsKVDsNSSIKc2hvcnQGOwpUOw5pdzsPbzsQCTsRbzsSBzsOaXc7E2kdOxRvOxIHOw5pdzsTaSM7FUAROxZAEjsdQBE7HkAXbzsMCzsJSSIRY29udGV4dC1vbmx5BjsKVDsNSSIRY29udGV4dF9vbmx5BjsKVDsOaXc7D287EAk7EW87Egc7Dml3OxNpJTsUbzsSBzsOaXc7E2kyOxVAETsWQBI7HUAROx5AFzsfbzsgBzshewA7InsAOyMwOyQwOw5pdzsPbzsQCTsRbzsSBzsOaXc7E2kSOxRvOxIHOw5pdzsTaTM7FUAROxZAEjsdQBE7HkAXOg1AZ3VhcmRlZDA6DEBnbG9iYWwwOg5AY2hpbGRyZW5bADsdMDseQBc7Dml3Ow9vOxAJOxFvOxIHOw5pdzsTaQs7FG87Egc7Dml3OxNpMzsVQBE7FkASbzsmDjseSSIRbm9ybWFsLXNob3J0BjsJVDsnbzsoDzspMDseSSITc3VzeS1ub3JtYWxpemUGOwlUOx9bB287IAs7HkkiCnNob3J0BjsJVDshSSIKc2hvcnQGOwlUOw5pejsPbzsQCTsRbzsSBzsOaXo7E2kmOxRvOxIHOw5pejsTaSw7FUAPOxZAEDsMQA87DUALbzsgCzseSSISbm9ybWFsLWNvbmZpZwY7CVQ7IUkiEm5vcm1hbF9jb25maWcGOwlUOw5pejsPbzsQCTsRbzsSBzsOaXo7E2kuOxRvOxIHOw5pejsTaTw7FUAPOxZAEDsMQA87DUALOypvOysHOyx7ADstewA7JTA7LjA7Dml6Ow9vOxAJOxFvOxIHOw5pejsTaRc7FG87Egc7Dml6OxNpPTsVQA87FkAQOwxADzsNQAs7LzA7MDA7BlsAOwwwOw1ACzsOaXo7D287EAk7EW87Egc7Dml6OxNpCTsUbzsSBzsOaXo7E2k9OxVADzsWQBBvOwcMOwhbBkkiGy8qIE1lcmdlIGFuZCByZXR1cm4gKi8GOwlUOwo7CzsGWwA7DDA7DUALOw5pfDsPbzsQCTsRbzsSBzsOaXw7E2kIOxRvOxIHOw5pfDsTaRs7FUAPOxZAEG86G1Nhc3M6OlRyZWU6OlJldHVybk5vZGULOydvOygPOykwOx5JIg5tYXAtbWVyZ2UGOwlUOx9bB287IAs7HkkiEm5vcm1hbC1jb25maWcGOwlUOyFJIhJub3JtYWxfY29uZmlnBjsJVDsOaX07D287EAk7EW87Egc7Dml9OxNpGjsUbzsSBzsOaX07E2koOxVADzsWQBA7DEAPOw1AC287IAs7HkkiEW5vcm1hbC1zaG9ydAY7CVQ7IUkiEW5vcm1hbF9zaG9ydAY7CVQ7Dml9Ow9vOxAJOxFvOxIHOw5pfTsTaSo7FG87Egc7Dml9OxNpNzsVQA87FkAQOwxADzsNQAs7Km87Kwc7LHsAOy17ADslMDsuMDsOaX07D287EAk7EW87Egc7Dml9OxNpEDsUbzsSBzsOaX07E2k4OxVADzsWQBA7DEAPOw1ACzsGWwA7DDA7DUALOw5pfTsPbzsQCTsRbzsSBzsOaX07E2kIOxRvOxIHOw5pfTsTaTg7FUAPOxZAEDsMMDsNQAs7DmlsOw9vOxAJOxFvOxIHOw5pbDsTaQY7FG87Egc7DmlwOxNpCDsVQA87FkAQOhJAaGFzX2NoaWxkcmVuVG87Bww7CFsGSSICswQvKiBDYWxsCiAqIC0tLS0KICovIFRoZSBTdXN5IHBhcnNpbmcgYW5kIG5vcm1hbGl6YXRpb24gcHJvY2VzcwogKi8gcmVzdWx0cyBpbiBhIG1hcCBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzLAogKi8gbXVjaCBsaWtlIHRoZSBnbG9iYWwgYCRzdXN5YCBzZXR0aW5ncyBtYXAuCiAqLyBJbiBvcmRlciB0byBwYXNzIHRoYXQgaW5mb3JtYXRpb24gYWxvbmcgdG8gU3UgbWF0aCBmdW5jdGlvbnMsCiAqLyB0aGUgcHJvcGVyIHZhbHVlcyBoYXZlIHRvIGJlIHBpY2tlZCBvdXQsCiAqLyBhbmQgY29udmVydGVkIHRvIGFyZ3VtZW50cy4KICovCiAqLyBUaGUgYHN1LWNhbGxgIGZ1bmN0aW9uIHN0cmVhbWxpbmVzIHRoYXQgcHJvY2VzcywKICovIHdlZWRpbmcgb3V0IHRoZSB1bm5lY2Vzc2FyeSBkYXRhLAogKi8gYW5kIHBhc3NpbmcgdGhlIHJlc3QgYWxvbmcgdG8gU3UgaW4gdGhlIHByb3BlciBmb3JtYXQuCiAqLyBDb21iaW5lIHRoaXMgd2l0aCBgc3VzeS1jb21waWxlYCB0byBxdWlja2x5IHBhcnNlLAogKi8gbm9ybWFsaXplLCBhbmQgcHJvY2VzcyBncmlkIGNhbGN1bGF0aW9ucy4KICovCiAqLyBAZ3JvdXAgcGx1Z2luLXV0aWxzCiAqLwogKi8gQHJlcXVpcmUgc3Utc3BhbgogKi8gQHJlcXVpcmUgc3UtZ3V0dGVyCiAqLyBAcmVxdWlyZSBzdS1zbGljZQogKi8gQHNlZSBzdXN5LWNvbXBpbGUKICovCiAqLyBAcGFyYW0geydzdS1zcGFuJyB8ICdzdS1ndXR0ZXInIHwgJ3N1LXNsaWNlJ30gJG5hbWUgLQogKi8gICBOYW1lIG9mIHRoZSBTdSBtYXRoIGZ1bmN0aW9uIHRvIGNhbGwuCiAqLyBAcGFyYW0ge21hcH0gJGNvbmZpZyAtCiAqLyAgIFBhcnNlZCBhbmQgbm9ybWFsaXplZCBtYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzCiAqLyAgIHRvIHVzZSBmb3IgbWF0aC1mdW5jdGlvbiBhcmd1bWVudHMuCiAqLwogKi8gQHJldHVybiB7Kn0gLQogKi8gICBSZXN1bHRzIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQuCiAqLwogKi8gQGV4YW1wbGUgc2NzcyAtCiAqLyAgICR1c2VyLWlucHV0OiAzIHdpZGUgb2Ygc3VzeS1yZXBlYXQoNiwgMTIwcHgpIHNldC1ndXR0ZXJzIDEwcHg7CiAqLyAgICRncmlkLWRhdGE6IHN1c3ktY29tcGlsZSgkdXNlci1pbnB1dCwgJHN1c3kpOwogKi8KICovICAgLnN1LXNwYW4gewogKi8gICAgIHdpZHRoOiBzdS1jYWxsKCdzdS1zcGFuJywgJGdyaWQtZGF0YSk7CiAqLyAgIH0gKi8GOwlUOwo7CzsGWwA7DDA7DUALOw5pAX07D287EAk7EW87Egc7DmkBfTsTaQY7FG87Egc7DmkBojsTaQ07FUAPOxZAEG87HQ47HkkiDHN1LWNhbGwGOwlUOx9bB1sHbzsgCzseSSIJbmFtZQY7CVQ7IUkiCW5hbWUGOwlUOw5pAaQ7D287EAk7EW87Egc7DmkBpDsTaQg7FG87Egc7DmkBpDsTaQ07FUAPOxZAEDsMQA87DUALMFsHbzsgCzseSSILY29uZmlnBjsJVDshSSILY29uZmlnBjsJVDsOaQGlOw9vOxAJOxFvOxIHOw5pAaU7E2kIOxRvOxIHOw5pAaU7E2kPOxVADzsWQBA7DEAPOw1ACzA7JTA7BlsMbzsmDjseSSIXZ3JpZC1mdW5jdGlvbi1hcmdzBjsJVDsnbzojU2Fzczo6U2NyaXB0OjpUcmVlOjpNYXBMaXRlcmFsCjoLQHBhaXJzWwhbB287Igk7CG86IFNhc3M6OlNjcmlwdDo6VmFsdWU6OlN0cmluZwk7CEkiDHN1LXNwYW4GOwlUOw1ACzsKOgtzdHJpbmc6IkBkZXByZWNhdGVkX2ludGVycF9lcXVpdmFsZW50MDsOaQGoOw9vOxAJOxFvOxIHOw5pAag7E2kKOxRvOxIHOw5pAag7E2kTOxVADzsWQBA7DEAPbzokU2Fzczo6U2NyaXB0OjpUcmVlOjpMaXN0TGl0ZXJhbAw6DkBlbGVtZW50c1sLbzsiCTsIbzs2CTsISSIJc3BhbgY7CVQ7DUALOwo7Nzs4MDsOaQGoOw9vOxAJOxFvOxIHOw5pAag7E2kWOxRvOxIHOw5pAag7E2kcOxVADzsWQBA7DEAPbzsiCTsIbzs2CTsISSIMY29sdW1ucwY7CVQ7DUALOwo7Nzs4MDsOaQGoOw9vOxAJOxFvOxIHOw5pAag7E2keOxRvOxIHOw5pAag7E2knOxVADzsWQBA7DEAPbzsiCTsIbzs2CTsISSIMZ3V0dGVycwY7CVQ7DUALOwo7Nzs4MDsOaQGoOw9vOxAJOxFvOxIHOw5pAag7E2kpOxRvOxIHOw5pAag7E2kyOxVADzsWQBA7DEAPbzsiCTsIbzs2CTsISSILc3ByZWFkBjsJVDsNQAs7Cjs3OzgwOw5pAag7D287EAk7EW87Egc7DmkBqDsTaTQ7FG87Egc7DmkBqDsTaTw7FUAPOxZAEDsMQA9vOyIJOwhvOzYJOwhJIhVjb250YWluZXItc3ByZWFkBjsJVDsNQAs7Cjs3OzgwOw5pAag7D287EAk7EW87Egc7DmkBqDsTaT47FG87Egc7DmkBqDsTaVA7FUAPOxZAEDsMQA9vOyIJOwhvOzYJOwhJIg1sb2NhdGlvbgY7CVQ7DUALOwo7Nzs4MDsOaQGoOw9vOxAJOxFvOxIHOw5pAag7E2lSOxRvOxIHOw5pAag7E2lcOxVADzsWQBA7DEAPOg9Ac2VwYXJhdG9yOgpjb21tYToPQGJyYWNrZXRlZEY7DmkBqDsPbzsQCTsRbzsSBzsOaQGoOxNpFjsUQAIXATsVQA87FkAQOwxADzsNQAtbB287Igk7CG87Ngk7CEkiDnN1LWd1dHRlcgY7CVQ7DUALOwo7Nzs4MDsOaQGpOw9vOxAJOxFvOxIHOw5pAak7E2kKOxRvOxIHOw5pAak7E2kVOxVADzsWQBA7DEAPbzs5DDs6WwhvOyIJOwhvOzYJOwhJIgxjb2x1bW5zBjsJVDsNQAs7Cjs3OzgwOw5pAak7D287EAk7EW87Egc7DmkBqTsTaRg7FG87Egc7DmkBqTsTaSE7FUAPOxZAEDsMQA9vOyIJOwhvOzYJOwhJIgxndXR0ZXJzBjsJVDsNQAs7Cjs3OzgwOw5pAak7D287EAk7EW87Egc7DmkBqTsTaSM7FG87Egc7DmkBqTsTaSw7FUAPOxZAEDsMQA9vOyIJOwhvOzYJOwhJIhVjb250YWluZXItc3ByZWFkBjsJVDsNQAs7Cjs3OzgwOw5pAak7D287EAk7EW87Egc7DmkBqTsTaS47FG87Egc7DmkBqTsTaUA7FUAPOxZAEDsMQA87Ozs8Oz1GOw5pAak7D287EAk7EW87Egc7DmkBqTsTaRg7FEACNAE7FUAPOxZAEDsMQA87DUALWwdvOyIJOwhvOzYJOwhJIg1zdS1zbGljZQY7CVQ7DUALOwo7Nzs4MDsOaQGqOw9vOxAJOxFvOxIHOw5pAao7E2kKOxRvOxIHOw5pAao7E2kUOxVADzsWQBA7DEAPbzs5DDs6WwhvOyIJOwhvOzYJOwhJIglzcGFuBjsJVDsNQAs7Cjs3OzgwOw5pAao7D287EAk7EW87Egc7DmkBqjsTaRc7FG87Egc7DmkBqjsTaR07FUAPOxZAEDsMQA9vOyIJOwhvOzYJOwhJIgxjb2x1bW5zBjsJVDsNQAs7Cjs3OzgwOw5pAao7D287EAk7EW87Egc7DmkBqjsTaR87FG87Egc7DmkBqjsTaSg7FUAPOxZAEDsMQA9vOyIJOwhvOzYJOwhJIg1sb2NhdGlvbgY7CVQ7DUALOwo7Nzs4MDsOaQGqOw9vOxAJOxFvOxIHOw5pAao7E2kqOxRvOxIHOw5pAao7E2k0OxVADzsWQBA7DEAPOzs7PDs9RjsOaQGqOw9vOxAJOxFvOxIHOw5pAao7E2kXOxRAAlEBOxVADzsWQBA7DEAPOw1ACzsOaQGnOw9vOxAJOxFvOxIHOw5pAac7E2keOxRAAlEBOxVADzsWQBA7DEAPOw1ACzsvMDswMDsGWwA7DDA7DUALOw5pAac7D287EAk7EW87Egc7DmkBpzsTaQk7FG87Egc7DmkBqzsTaQk7FUAPOxZAEG87Jg47HkkiCWFyZ3MGOwlUOydvOygPOykwOx5JIgxtYXAtZ2V0BjsJVDsfWwdvOyALOx5JIhdncmlkLWZ1bmN0aW9uLWFyZ3MGOwlUOyFJIhdncmlkX2Z1bmN0aW9uX2FyZ3MGOwlUOw5pAa07D287EAk7EW87Egc7DmkBrTsTaRc7FG87Egc7DmkBrTsTaSo7FUAPOxZAEDsMQA87DUALbzsgCzseSSIJbmFtZQY7CVQ7IUkiCW5hbWUGOwlUOw5pAa07D287EAk7EW87Egc7DmkBrTsTaSw7FG87Egc7DmkBrTsTaTE7FUAPOxZAEDsMQA87DUALOypvOysHOyx7ADstewA7JTA7LjA7DmkBrTsPbzsQCTsRbzsSBzsOaQGtOxNpDzsUbzsSBzsOaQGtOxNpMjsVQA87FkAQOwxADzsNQAs7LzA7MDA7BlsAOwwwOw1ACzsOaQGtOw9vOxAJOxFvOxIHOw5pAa07E2kJOxRvOxIHOw5pAa07E2kyOxVADzsWQBB1OzECngkECFsIbzonU2Fzczo6U2NyaXB0OjpUcmVlOjpVbmFyeU9wZXJhdGlvbgs6DUBvcGVyYW5kbzohU2Fzczo6U2NyaXB0OjpUcmVlOjpWYXJpYWJsZQs6CkBuYW1lSSIJYXJncwY6BkVUOhZAdW5kZXJzY29yZWRfbmFtZUkiCWFyZ3MGOwlUOgpAbGluZWkBrzoSQHNvdXJjZV9yYW5nZW86GFNhc3M6OlNvdXJjZTo6UmFuZ2UJOg9Ac3RhcnRfcG9zbzobU2Fzczo6U291cmNlOjpQb3NpdGlvbgc7C2kBrzoMQG9mZnNldGkQOg1AZW5kX3Bvc287Dwc7C2kBrzsQaRU6CkBmaWxlSSJ+L0xpYnJhcnkvUnVieS9HZW1zLzIuMy4wL2dlbXMvbWluaW1hbC1taXN0YWtlcy1qZWt5bGwtNC4xNC4xL19zYXNzL21pbmltYWwtbWlzdGFrZXMvdmVuZG9yL3N1c3kvc3VzeS9fc3ludGF4LWhlbHBlcnMuc2NzcwY7CVQ6DkBpbXBvcnRlcm86IFNhc3M6OkltcG9ydGVyczo6RmlsZXN5c3RlbQg6CkByb290SSJHL0xpYnJhcnkvUnVieS9HZW1zLzIuMy4wL2dlbXMvbWluaW1hbC1taXN0YWtlcy1qZWt5bGwtNC4xNC4xL19zYXNzBjsJRjoPQHJlYWxfcm9vdEkiRy9MaWJyYXJ5L1J1YnkvR2Vtcy8yLjMuMC9nZW1zL21pbmltYWwtbWlzdGFrZXMtamVreWxsLTQuMTQuMS9fc2FzcwY7CVQ6GEBzYW1lX25hbWVfd2FybmluZ3NvOghTZXQGOgpAaGFzaH0ARjoOQGZpbGVuYW1lQA06DUBvcHRpb25zewA6DkBvcGVyYXRvcjoIbm90OwtpAa87DG87DQk7Dm87Dwc7C2kBrzsQaRA7EW87Dwc7C2kBrzsQaRU7EkANOxNADjsaQA07G0ATMFsHbzodU2Fzczo6VHJlZTo6VmFyaWFibGVOb2RlDjsISSIMb3B0aW9ucwY7CVQ6CkBleHBybzosU2Fzczo6U2NyaXB0OjpUcmVlOjpTdHJpbmdJbnRlcnBvbGF0aW9uDDoMQGJlZm9yZW86IFNhc3M6OlNjcmlwdDo6VHJlZTo6TGl0ZXJhbAk6C0B2YWx1ZW86IFNhc3M6OlNjcmlwdDo6VmFsdWU6OlN0cmluZwk7I0kiF1RyeSBvbmUgb2YgdGhlc2U6IAY7CVQ7G0ATOgpAdHlwZToLc3RyaW5nOiJAZGVwcmVjYXRlZF9pbnRlcnBfZXF1aXZhbGVudDA7C2kBsDsMbzsNCTsObzsPBzsLaQGwOxBpFDsRbzsPBzsLaQGwOxBpKTsSQA07E0AOOxpADToJQG1pZG86IFNhc3M6OlNjcmlwdDo6VHJlZTo6RnVuY2FsbA86DkBjYWxsYWJsZTA7CEkiDW1hcC1rZXlzBjsJVDoKQGFyZ3NbBm87Bws7CEkiF2dyaWQtZnVuY3Rpb24tYXJncwY7CVQ7CkkiF2dyaWRfZnVuY3Rpb25fYXJncwY7CVQ7C2kBsDsMbzsNCTsObzsPBzsLaQGwOxBpMjsRbzsPBzsLaQGwOxBpRTsSQA07E0AO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cHRpb24gb2YgdGhlIHNwYW4gb3IgY29udGV4dCwKLy8vIGFuZCBhbiBvcHRpb25hbCBzZXR0aW5ncy1tYXAgdG8gb3ZlcnJpZGUgZ2xvYmFsIGRlZmF1bHRzLgovLy8KLy8vIC0gVXNlIGBzdXN5LWNvbXBpbGUoKWAgdG8gcGFyc2UsIG1lcmdlLCBhbmQgbm9ybWFsaXplCi8vLyAgIGFsbCB0aGUgdXNlciBzZXR0aW5ncyBpbnRvIGEgc2luZ2xlIG1hcC4KLy8vIC0gVGhlbiB1c2UgYHN1LWNhbGwoKWAgdG8gY2FsbCBvbmUgb2YgdGhlIGNvcmUgbWF0aCBmdW5jdGlvbnMsCi8vLyAgIHdpdGggd2hhdGV2ZXIgZGF0YSBpcyBuZWVkZWQgZm9yIHRoYXQgZnVuY3Rpb24uCi8vLwovLy8gQGdyb3VwIHBsdWdpbi11dGlscwovLy8gQHNlZSBzdXN5LWNvbXBpbGUKLy8vIEBzZWUgc3UtY2FsbAovLy8KLy8vIEBleGFtcGxlIHNjc3MgLSBTdXN5IEFQSSBgZ3V0dGVyYCBmdW5jdGlvbgovLy8gICBAZnVuY3Rpb24gc3VzeS1ndXR0ZXIoCi8vLyAgICAgJGNvbnRleHQ6IHN1c3ktZ2V0KCdjb2x1bW5zJyksCi8vLyAgICAgJGNvbmZpZzogKCkKLy8vICAgKSB7Ci8vLyAgICAgLy8gY29tcGlsZSBhbmQgbm9ybWFsaXplIGFsbCB1c2VyIGFyZ3VtZW50cyBhbmQgZ2xvYmFsIHNldHRpbmdzCi8vLyAgICAgJGNvbnRleHQ6IHN1c3ktY29tcGlsZSgkY29udGV4dCwgJGNvbmZpZywgJ2NvbnRleHQtb25seScpOwovLy8gICAgIC8vIGNhbGwgYHN1LWd1dHRlcmAgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGF0YQovLy8gICAgIEByZXR1cm4gc3UtY2FsbCgnc3UtZ3V0dGVyJywgJGNvbnRleHQpOwovLy8gICB9Ci8vLwovLy8gQGV4YW1wbGUgc2NzcyAtIFNhbXBsZSBgc3BhbmAgbWl4aW4gZm9yIGZsb2F0ZWQgZ3JpZHMKLy8vICAgQG1peGluIHNwYW4oCi8vLyAgICAgJHNwYW4sCi8vLyAgICAgJGNvbmZpZzogKCkKLy8vICAgKSB7Ci8vLyAgICAgJGNvbnRleHQ6IHN1c3ktY29tcGlsZSgkc3BhbiwgJGNvbmZpZyk7Ci8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkY29udGV4dCk7Ci8vLwovLy8gICAgIEBpZiBpbmRleCgkc3BhbiwgJ2xhc3QnKSB7Ci8vLyAgICAgICBmbG9hdDogcmlnaHQ7Ci8vLyAgICAgfSBAZWxzZSB7Ci8vLyAgICAgICBmbG9hdDogbGVmdDsKLy8vICAgICAgIG1hcmdpbi1yaWdodDogc3UtY2FsbCgnc3UtZ3V0dGVyJywgJGNvbnRleHQpOwovLy8gICAgIH0KLy8vICAgfQoKCgovLyBDb21waWxlCi8vIC0tLS0tLS0KLy8vIFN1c3kncyBzeW50YXggbGF5ZXIgaGFzIHZhcmlvdXMgbW92aW5nIHBhcnRzLAovLy8gd2l0aCBzeW50YXgtcGFyc2luZyBmb3IgdGhlIGdyaWQvc3BhbiBzaG9ydGhhbmQsCi8vLyBhbmQgbm9ybWFsaXphdGlvbiBmb3IgZWFjaCBvZiB0aGUgcmVzdWx0aW5nIHZhbHVlcy4KLy8vIFRoZSBjb21waWxlIGZ1bmN0aW9uIHJvbGxzIHRoaXMgYWxsIHRvZ2V0aGVyCi8vLyBpbiBhIHNpbmdsZSBjYWxsIOKAkwovLy8gZm9yIHF1aWNrIGFjY2VzcyBmcm9tIG91ciBpbnRlcm5hbCBBUEkgZnVuY3Rpb25zLAovLy8gb3IgYW55IGFkZGl0aW9uYWwgZnVuY3Rpb25zIGFuZCBtaXhpbnMgeW91IGFkZCB0byB5b3VyIHByb2plY3QuCi8vLyBQYXNzIHVzZXIgaW5wdXQgYW5kIGNvbmZpZ3VyYXRpb24gbWFwcyB0byB0aGUgY29tcGlsZXIsCi8vLyBhbmQgaXQgd2lsbCBoYW5kIGJhY2sgYSBtYXAgb2YgdmFsdWVzIHJlYWR5IGZvciBTdS4KLy8vIENvbWJpbmUgdGhpcyB3aXRoIHRoZSBgc3UtY2FsbGAgZnVuY3Rpb24KLy8vIHRvIHF1aWNrbHkgcGFyc2UsIG5vcm1hbGl6ZSwgYW5kIHByb2Nlc3MgZ3JpZCBjYWxjdWxhdGlvbnMuCi8vLwovLy8gQGdyb3VwIHBsdWdpbi11dGlscwovLy8gQHNlZSBzdS1jYWxsCi8vLwovLy8gQHBhcmFtIHtsaXN0IHwgbWFwfSAkc2hvcnRoYW5kIC0KLy8vICAgU2hvcnRoYW5kIGV4cHJlc3Npb24gdG8gZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgc3BhbiwKLy8vICAgb3B0aW9uYWxseSBjb250YWluaW5nOgovLy8gICAtIGEgY291bnQsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3Qgc3BhbjsKLy8vICAgLSBgYXQgJG5gLCBgZmlyc3RgLCBvciBgbGFzdGAgbG9jYXRpb24gb24gYXN5bW1ldHJpY2FsIGdyaWRzOwovLy8gICAtIGBuYXJyb3dgLCBgd2lkZWAsIG9yIGB3aWRlcmAgZm9yIG9wdGlvbmFsbHkgc3ByZWFkaW5nCi8vLyAgICAgYWNyb3NzIGFkamFjZW50IGd1dHRlcnM7Ci8vLyAgIC0gYG9mICRuIDxzcHJlYWQ+YCBmb3IgYXZhaWxhYmxlIGdyaWQgY29sdW1ucwovLy8gICAgIGFuZCBzcHJlYWQgb2YgdGhlIGNvbnRhaW5lcgovLy8gICAgIChzcGFuIGNvdW50cyBsaWtlIGBvZiA2YCBhcmUgb25seSB2YWxpZAovLy8gICAgIGluIHRoZSBjb250ZXh0IG9mIHN5bW1ldHJpY2FsIGdyaWRzKTsKLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzCi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbbnVsbF0gLQovLy8gICBPcHRpb25hbCBtYXAgb2YgU3VzeSBncmlkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKLy8vIEBwYXJhbSB7Ym9vbH0gJGNvbnRleHQtb25seSBbZmFsc2VdIC0KLy8vICAgQWxsb3cgdGhlIHBhcnNlciB0byBpZ25vcmUgc3BhbiBhbmQgc3Bhbi1zcHJlYWQgdmFsdWVzLAovLy8gICBvbmx5IHBhcnNpbmcgY29udGV4dCBhbmQgY29udGFpbmVyLXNwcmVhZAovLy8KLy8vIEByZXR1cm4ge21hcH0gLQovLy8gICBQYXJzZWQgYW5kIG5vcm1hbGl6ZWQgbWFwIG9mIHNldHRpbmdzLAovLy8gICBiYXNlZCBvbiBnbG9iYWwgYW5kIGxvY2FsIGNvbmZpZ3VyYXRpb24sCi8vLyAgIGFsb25nd2l0aCBzaG9ydGhhZCBhZGp1c3RtZW50cy4KLy8vCi8vLyBAZXhhbXBsZSBzY3NzIC0KLy8vICAgJHVzZXItaW5wdXQ6IDMgd2lkZSBvZiBzdXN5LXJlcGVhdCg2LCAxMjBweCkgc2V0LWd1dHRlcnMgMTBweDsKLy8vICAgJGdyaWQtZGF0YTogc3VzeS1jb21waWxlKCR1c2VyLWlucHV0LCAkc3VzeSk7Ci8vLwovLy8gICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJGdyaWQtZGF0YSB7Ci8vLyAgICAgLyogI3ska2V5fTogI3skdmFsdWV9LCAqLwovLy8gICB9CkBmdW5jdGlvbiBzdXN5LWNvbXBpbGUoCiAgJHNob3J0LAogICRjb25maWc6IG51bGwsCiAgJGNvbnRleHQtb25seTogZmFsc2UKKSB7CiAgLy8gR2V0IGFuZCBub3JtYWxpemUgY29uZmlnCiAgJGNvbmZpZzogaWYoJGNvbmZpZywgc3VzeS1zZXR0aW5ncygkY29uZmlnKSwgc3VzeS1zZXR0aW5ncygpKTsKICAkbm9ybWFsLWNvbmZpZzogc3VzeS1ub3JtYWxpemUoJGNvbmZpZyk7CgogIC8vIFBhcnNlIGFuZCBub3JtYWxpemUgc2hvcnRoYW5kCiAgQGlmICh0eXBlLW9mKCRzaG9ydCkgIT0gJ21hcCcpIGFuZCAobGVuZ3RoKCRzaG9ydCkgPiAwKSB7CiAgICAkc2hvcnQ6IHN1c3ktcGFyc2UoJHNob3J0LCAkY29udGV4dC1vbmx5KTsKICB9CgogICRub3JtYWwtc2hvcnQ6IHN1c3ktbm9ybWFsaXplKCRzaG9ydCwgJG5vcm1hbC1jb25maWcpOwoKICAvLyBNZXJnZSBhbmQgcmV0dXJuCiAgQHJldHVybiBtYXAtbWVyZ2UoJG5vcm1hbC1jb25maWcsICRub3JtYWwtc2hvcnQpOwp9CgoKCi8vIENhbGwKLy8gLS0tLQovLy8gVGhlIFN1c3kgcGFyc2luZyBhbmQgbm9ybWFsaXphdGlvbiBwcm9jZXNzCi8vLyByZXN1bHRzIGluIGEgbWFwIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsCi8vLyBtdWNoIGxpa2UgdGhlIGdsb2JhbCBgJHN1c3lgIHNldHRpbmdzIG1hcC4KLy8vIEluIG9yZGVyIHRvIHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBhbG9uZyB0byBTdSBtYXRoIGZ1bmN0aW9ucywKLy8vIHRoZSBwcm9wZXIgdmFsdWVzIGhhdmUgdG8gYmUgcGlja2VkIG91dCwKLy8vIGFuZCBjb252ZXJ0ZWQgdG8gYXJndW1lbnRzLgovLy8KLy8vIFRoZSBgc3UtY2FsbGAgZnVuY3Rpb24gc3RyZWFtbGluZXMgdGhhdCBwcm9jZXNzLAovLy8gd2VlZGluZyBvdXQgdGhlIHVubmVjZXNzYXJ5IGRhdGEsCi8vLyBhbmQgcGFzc2luZyB0aGUgcmVzdCBhbG9uZyB0byBTdSBpbiB0aGUgcHJvcGVyIGZvcm1hdC4KLy8vIENvbWJpbmUgdGhpcyB3aXRoIGBzdXN5LWNvbXBpbGVgIHRvIHF1aWNrbHkgcGFyc2UsCi8vLyBub3JtYWxpemUsIGFuZCBwcm9jZXNzIGdyaWQgY2FsY3VsYXRpb25zLgovLy8KLy8vIEBncm91cCBwbHVnaW4tdXRpbHMKLy8vCi8vLyBAcmVxdWlyZSBzdS1zcGFuCi8vLyBAcmVxdWlyZSBzdS1ndXR0ZXIKLy8vIEByZXF1aXJlIHN1LXNsaWNlCi8vLyBAc2VlIHN1c3ktY29tcGlsZQovLy8KLy8vIEBwYXJhbSB7J3N1LXNwYW4nIHwgJ3N1LWd1dHRlcicgfCAnc3Utc2xpY2UnfSAkbmFtZSAtCi8vLyAgIE5hbWUgb2YgdGhlIFN1IG1hdGggZnVuY3Rpb24gdG8gY2FsbC4KLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIC0KLy8vICAgUGFyc2VkIGFuZCBub3JtYWxpemVkIG1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKLy8vICAgdG8gdXNlIGZvciBtYXRoLWZ1bmN0aW9uIGFyZ3VtZW50cy4KLy8vCi8vLyBAcmV0dXJuIHsqfSAtCi8vLyAgIFJlc3VsdHMgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KLy8vCi8vLyBAZXhhbXBsZSBzY3NzIC0KLy8vICAgJHVzZXItaW5wdXQ6IDMgd2lkZSBvZiBzdXN5LXJlcGVhdCg2LCAxMjBweCkgc2V0LWd1dHRlcnMgMTBweDsKLy8vICAgJGdyaWQtZGF0YTogc3VzeS1jb21waWxlKCR1c2VyLWlucHV0LCAkc3VzeSk7Ci8vLwovLy8gICAuc3Utc3BhbiB7Ci8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkZ3JpZC1kYXRhKTsKLy8vICAgfQpAZnVuY3Rpb24gc3UtY2FsbCgKICAkbmFtZSwKICAkY29uZmlnCikgewogICRncmlkLWZ1bmN0aW9uLWFyZ3M6ICgKICAgICdzdS1zcGFuJzogKCdzcGFuJywgJ2NvbHVtbnMnLCAnZ3V0dGVycycsICdzcHJlYWQnLCAnY29udGFpbmVyLXNwcmVhZCcsICdsb2NhdGlvbicpLAogICAgJ3N1LWd1dHRlcic6ICgnY29sdW1ucycsICdndXR0ZXJzJywgJ2NvbnRhaW5lci1zcHJlYWQnKSwKICAgICdzdS1zbGljZSc6ICgnc3BhbicsICdjb2x1bW5zJywgJ2xvY2F0aW9uJyksCiAgKTsKCiAgJGFyZ3M6IG1hcC1nZXQoJGdyaWQtZnVuY3Rpb24tYXJncywgJG5hbWUpOwoKICBAaWYgbm90ICRhcmdzIHsKICAgICRvcHRpb25zOiAnVHJ5IG9uZSBvZiB0aGVzZTogI3ttYXAta2V5cygkZ3JpZC1mdW5jdGlvbi1hcmdzKX0nOwogICAgQHJldHVybiBfc3VzeS1lcnJvcigKICAgICAgJyN7JG5hbWV9IGlzIG5vdCBhIHB1YmxpYyBTdSBmdW5jdGlvbi4gI3skb3B0aW9uc30nLAogICAgICAnc3UtY2FsbCcpOwogIH0KCiAgJGNhbGw6IGlmKGZ1bmN0aW9uLWV4aXN0cygnZ2V0LWZ1bmN0aW9uJyksIGdldC1mdW5jdGlvbigkbmFtZSksICRuYW1lKTsKICAkb3V0cHV0OiAoKTsKCiAgQGVhY2ggJGFyZyBpbiAkYXJncyB7CiAgICAkdmFsdWU6IG1hcC1nZXQoJGNvbmZpZywgJGFyZyk7CiAgICAkb3V0cHV0OiBpZigkdmFsdWUsIG1hcC1tZXJnZSgkb3V0cHV0LCAoJGFyZzogJHZhbHVlKSksICRvdXRwdXQpOwogIH0KCiAgQHJldHVybiBjYWxsKCRjYWxsLCAkb3V0cHV0Li4uKTsKfQoGOwlUOw5pBjsPbzsQCTsRbzsSBzsOaQY7E2kGOxRvOxIHOw5pBjsTaQY7FUAPOxZAEDszVA==