Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9hdF9jCgphdF9jCj09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICAsIGxvbmcgbgogICAgICAgID4KICAgIHN0cnVjdCBhdF9jCiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKUmV0dXJucyBhIHR5cGUgaWRlbnRpY2FsIHRvIHRoZSBgYG5gYFwgdGggZWxlbWVudCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgCnRoZSBzZXF1ZW5jZS4gYGBhdF9jPFNlcXVlbmNlLG4+Ojp0eXBlYGAgaXMgYSBzaG9yY3V0IG5vdGF0aW9uIGZvciAKYGBhdDwgU2VxdWVuY2UsIGxvbmdfPG4+ID46OnR5cGVgYC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvYXQuaHBwPgoKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBTZXF1ZW5jZWBgICB8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICAgICAgICAgICAgICB8IEEgc2VxdWVuY2UgdG8gYmUgZXhhbWluZWQuICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBuYGAgICAgICAgICB8IEEgY29tcGlsZS10aW1lIGludGVncmFsIGNvbnN0YW50ICB8IEFuIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlICB8CnwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNwZWNpZnlpbmcgdGhlIGVsZW1lbnQgdG8gYmUgcmV0cmlldmVkLiAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBhdF9jPFNlcXVlbmNlLG4+Ojp0eXBlIHQ7IAoKOlJldHVybiB0eXBlOgogICAgQSB0eXBlIAoKOlByZWNvbmRpdGlvbjoKICAgIGBgMCA8PSBuIDwgc2l6ZTxTZXF1ZW5jZT46OnZhbHVlYGAgCgo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byAKICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICAgIHR5cGVkZWYgYXQ8IFNlcXVlbmNlLCBsb25nXzxuPiA+Ojp0eXBlIHQ7CgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBTZXF1ZW5jZSBhcmNoZXR5cGUgICAgICAgICAgICB8IENvbXBsZXhpdHkgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICAgICAgICAgIHwgTGluZWFyLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8ICAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4gICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiByYW5nZV9jPGxvbmcsMTAsNTA+IHJhbmdlOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggKGF0X2M8IHJhbmdlLDAgPjo6dHlwZTo6dmFsdWUpLCA9PSwgMTAgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIChhdF9jPCByYW5nZSwxMCA+Ojp0eXBlOjp2YWx1ZSksID09LCAyMCApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggKGF0X2M8IHJhbmdlLDQwID46OnR5cGU6OnZhbHVlKSwgPT0sIDUwICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxGb3J3YXJkIFNlcXVlbmNlfCwgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8LCB8YXR8LCB8ZnJvbnR8LCB8YmFja3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==