T0JKRUtUOgogICAgICBjb3Jwc2UKCgpTWU5PUFNJUzoKICAgICAgaW5oZXJpdCAic3RkL2NvcnBzZSI7CgoKQkVTQ0hSRUlCVU5HOgogICAgICBEaWUgU3RhbmRhcmRsZWljaGUgaXN0IGVpbiBzcGV6aWVsbGVyIENvbnRhaW5lci4gRXIgYmVpbmhhbHRldCBkaWUKICAgICAgenVydWVja2dlbGFzc2VuZSBBdXNydWVzdHVuZyBnZXN0b3JiZW5lciBOUENzIHVuZCBTcGllbGVyLgogICAgICBEaWUgU3RhbmRhcmRsZWljaGUgdmVyZmF1bHQgbWl0IGRlciBaZWl0IHVuZCBzdGVsbHQgZWluIHBhYXIKICAgICAgRnVua3Rpb25hbGl0YWV0ZW4genVyIFZlcmZ1ZWd1bmcsIG5hZW1saWNoIGRhcyBFc3NlbiBkZXIgTGVpY2hlCiAgICAgIHVuZCBkYXMgVmVyc3BvdHRlbiBhdWYgZGVtIE1vZXJkZXJrYW5hbC4KICAgICAgRGllIEZ1bmt0aW9uCiAgICAgICAgdm9pZCBJZGVudGlmeSggb2JqZWN0IG9iICk7CiAgICAgIHdpcmQgaW0gZGllKCkgZWluZXMgTGl2aW5ncyBhdWZnZXJ1ZmVuLCBkYW1pdCBkaWUgTGVpY2hlIEluZm9ybWF0aW9uZW4KICAgICAgYXVzIGRlbSBMaXZpbmcgYXVzbGVzZW4ga2FubiwgZWhlIGRpZXNlciBlbmRndWVsdGlnIHN0aXJidC4gU2NocmVpYnQKICAgICAgbWFuIGVpbmUgZWlnZW5lIExlaWNoZSwgZGFubiBpc3QgZGllcyBkaWUgZ2VlaWduZXRlIE1vZWdsaWNoa2VpdCwgZGVyCiAgICAgIExlaWNoZSBJbmZvcm1hdGlvbmVuIHp1a29tbWVuIHp1IGxhc3Nlbi4KCgpCRUlTUElFTEU6CiAgICAgIC8vIEVpbmUgZWlnZW5lIExlaWNoZS4KICAgICAgI2luaGVyaXQgInN0ZC9jb3Jwc2UiOwoKICAgICAgdm9pZCBjcmVhdGUoKQogICAgICB7CiAgICAgICAgOjpjcmVhdGUoKTsKICAgICAgICAvLyBJcmdlbmR3YXMgZWlnZW5lcy4uLgogICAgICB9CgogICAgICAvKgogICAgICAgKiBEaWVzZXIgRnVua3Rpb24gd2lyZCBkZXIgZ2V0b2V0ZXRlIExpdmluZyB1ZWJlcmdlYmVuLgogICAgICAgKi8KICAgICAgdm9pZCBJZGVudGlmeShvYmplY3Qgb2IpCiAgICAgIHsKICAgICAgICA6OklkZW50aWZ5KG9iKTsKICAgICAgICBpZiAob2IpCiAgICAgICAgewogICAgICAgICAgb2ItPlF1ZXJ5UHJvcCgibWVpbmVfdG9sbGVfcHJvcGVydHkiKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIERhcyBpc3QgZGllIGb8ciAiaXNzIGxlaWNoZSIgYXVmZ2VydWZlbmUgRnVua3Rpb24uCiAgICAgICAqLwogICAgICBpbnQgbWFtcGYoIHN0cmluZyBzdHIgKQogICAgICB7CiAgICAgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgRHUgZXNzZW4/XG4iKTsKICAgICAgICBpZiAoIXN0ciB8fCAhaWQoc3RyKSApIHJldHVybiAwOwogICAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksICJEaWVzZSBMZWljaGUga2FubiBtYW4gbmljaHQgZXNzZW4uXG4iKTsKICAgICAgICByZXR1cm4gMTsKICAgICAgfQoKCgpCRU1FUktVTkc6CiAgICAgIE1hbiBrYW5uIGVpZ2VuZSBMZWljaGVuIHNjaHJlaWJlbiwgZGllIHZvbiBkZXIgU3RhbmRhcmRsZWljaGUgZXJiZW4KICAgICAgb2RlciBhdWNoIG5pY2h0LiBNYW4gc29sbHRlIGRhbm4gYWJlciBkaWUgaW0gZGllKCkgYXVmZ2VydWZlbmVuCiAgICAgIEZ1bmt0aW9uZW4gaW1wbGVtZW50aWVyZW46CiAgICAgICAgY29ycHNlLT5JZGVudGlmeShvYmplY3Qgb2IpOwoJY29ycHNlLT5TZXRQcm9wKCoqKik7IC8vIEZ1ZXIgUF9IRUFMCgljb3Jwc2UtPm1vdmUoKioqKTsgLy8gVW0gc2llIGlucyBlbnZpcm9ubWVudCgpIGRlcyBUb3RlbiB6dSBiZWtvbW1lbi4KICAgICAgRGllIExlaWNoZSBzb2xsdGUsIG11c3MgYWJlciBrZWluIENvbnRhaW5lciBzZWluLCBkYW1pdCBkaWUgQXVzcnVlc3R1bmcKICAgICAgaGluZWluYmV3ZWd0IHdlcmRlbiBrYW5uLgogICAgICBXZW5uIG1hbiBuaWNodCB2b24gZGVyIFN0YW5kYXJkbGVpY2hlIGVyYnQsIGtvbW10IHNpZSBuaWNodCBhdWYgLU1vZXJkZXIKICAgICAgdW5kIG1hbiBrYW5uIHNpZSBuaWNodCB2ZXJzcG90dGVuLiBEYW1pdCBkaWVzIGdlaHQsIG11c3MgKCEpIG1hbiB2b24gZGVyCiAgICAgIFN0YW5kYXJkbGVpY2hlIGVyYmVuLgoKU0lFSEUgQVVDSDoKICAgICAgUF9OT0NPUlBTRSwgUF9DT1JQU0UsIFBfSEVBTCwgUXVlcnlIZWFsSW5mbygpCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpMZXR6dGUgQWVuZGVydW5nOiAzMS4wMy4yMDA4LCBBcmF0aG9ybgo=