Li4gQWxnb3JpdGhtcy9UcmFuc2Zvcm1hdGlvbiBBbGdvcml0aG1zLy9yZW1vdmUgfDYwCgpyZW1vdmUKPT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgLCB0eXBlbmFtZSBJbiA9IHx1bnNwZWNpZmllZHwKICAgICAgICA+CiAgICBzdHJ1Y3QgcmVtb3ZlCiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIGEgbmV3IHNlcXVlbmNlIHRoYXQgY29udGFpbnMgYWxsIGVsZW1lbnRzIGZyb20gfGJlZ2luL2VuZDxTZXF1ZW5jZT58CnJhbmdlIGV4Y2VwdCB0aG9zZSB0aGF0IGFyZSBpZGVudGljYWwgdG8gYGBUYGAuCgouLiBSZXR1cm5zIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgc2VxdWVuY2Ugd2l0aCBhbGwgZWxlbWVudHMgaWRlbnRpY2FsIHRvIGBgVGBgCiAgIHJlbW92ZWQuCgp8dHJhbnNmb3JtYXRpb24gYWxnb3JpdGhtIGRpc2NsYWltZXJ8CgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL3JlbW92ZS5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxSZXZlcnNpYmxlIEFsZ29yaXRobXwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBTZXF1ZW5jZWBgICB8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICAgICAgICAgICAgICB8IEFuIG9yaWdpbmFsIHNlcXVlbmNlLiAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgVGBgICAgICAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBIHR5cGUgdG8gYmUgcmVtb3ZlZC4gICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYEluYGAgICAgICAgIHwgfEluc2VydGVyfCAgICAgICAgICAgICAgICAgICAgICAgIHwgQW4gaW5zZXJ0ZXIuICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnxTZW1hbnRpY3MgZGlzY2xhaW1lci4uLnwgfFJldmVyc2libGUgQWxnb3JpdGhtfC4KCkZvciBhbnkgfEZvcndhcmQgU2VxdWVuY2V8IGBgc2BgLCBhbiB8SW5zZXJ0ZXJ8IGBgaW5gYCwgYW5kIGFyYml0cmFyeSB0eXBlIGBgeGBgOgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHJlbW92ZTxzLHgsaW4+Ojp0eXBlIHI7IAoKOlJldHVybiB0eXBlOgogICAgQSB0eXBlLgoKOlNlbWFudGljczoKICAgIEVxdWl2YWxlbnQgdG8gCgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICAgdHlwZWRlZiByZW1vdmVfaWY8IHMsaXNfc2FtZTxfLHg+LGluID46OnR5cGUgcjsKCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KCkxpbmVhci4gUGVyZm9ybXMgZXhhY3RseSBgYHNpemU8cz46OnZhbHVlYGAgY29tcGFyaXNvbnMgZm9yIGVxdWFsaXR5LCBhbmQgYXQgCm1vc3QgYGBzaXplPHM+Ojp2YWx1ZWBgIGluc2VydGlvbnMuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmVjdG9yPGludCxmbG9hdCxjaGFyLGZsb2F0LGZsb2F0LGRvdWJsZT46OnR5cGUgdHlwZXM7CiAgICB0eXBlZGVmIHJlbW92ZTwgdHlwZXMsZmxvYXQgPjo6dHlwZSByZXN1bHQ7CgogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGVxdWFsPCByZXN1bHQsIHZlY3RvcjxpbnQsY2hhcixkb3VibGU+ID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxUcmFuc2Zvcm1hdGlvbiBBbGdvcml0aG1zfCwgfFJldmVyc2libGUgQWxnb3JpdGhtfCwgfHJldmVyc2VfcmVtb3ZlfCwgfHJlbW92ZV9pZnwsIHxjb3B5fCwgfHJlcGxhY2V8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=