Li4gU2VxdWVuY2VzL0NsYXNzZXMvL3JhbmdlX2MgfDYwCgpyYW5nZV9jCj09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVAogICAgICAgICwgVCBTdGFydAogICAgICAgICwgVCBGaW5pc2gKICAgICAgICA+CiAgICBzdHJ1Y3QgcmFuZ2VfYwogICAgewogICAgICAgIHR5cGVkZWYgaW50ZWdyYWxfYzxULFN0YXJ0PiBzdGFydDsKICAgICAgICB0eXBlZGVmIGludGVncmFsX2M8VCxGaW5pc2g+IGZpbmlzaDsKICAgICAgICAvLyB8dW5zcGVjaWZpZWR8CiAgICAgICAgLy8gfC4uLnwKICAgIH07CgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCmBgcmFuZ2VfY2BgIGlzIGEgc29ydGVkIHxSYW5kb20gQWNjZXNzIFNlcXVlbmNlfCBvZiB8SW50ZWdyYWwgQ29uc3RhbnR8XCBzLiBOb3RlIAp0aGF0IGJlY2F1c2UgaXQgaXMgbm90IGFuIHxFeHRlbnNpYmxlIFNlcXVlbmNlfCwgc2VxdWVuY2UtYnVpbGRpbmcgCmludHJpbnNpYyBtZXRhZnVuY3Rpb25zIHN1Y2ggYXMgYGBwdXNoX2Zyb250YGAgYW5kIHRyYW5zZm9ybWF0aW9uIGFsZ29yaXRobXMKc3VjaCBhcyBgYHJlcGxhY2VgYCBhcmUgbm90IGRpcmVjdGx5IGFwcGxpY2FibGUgfC0tfCB0byBiZSBhYmxlIHRvIHVzZQp0aGVtLCB5b3UnZCBmaXJzdCBuZWVkIHRvIGNvcHkgdGhlIGNvbnRlbnQgb2YgdGhlIHJhbmdlIGludG8gYSBtb3JlIHN1aXRhYmxlCnNlcXVlbmNlLgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9yYW5nZV9jLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8CgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkluIHRoZSBmb2xsb3dpbmcgdGFibGUsIGBgcmBgIGlzIGFuIGluc3RhbmNlIG9mIGBgcmFuZ2VfY2BgLCBgYG5gYCBpcyBhbiB8SW50ZWdyYWwgQ29uc3RhbnR8LApgYFRgYCBpcyBhbiBhcmJpdHJhcnkgaW50ZWdyYWwgdHlwZSwgYW5kIGBgbmBgIGFuZCBgYG1gYCBhcmUgaW50ZWdyYWwgY29uc3RhbnQgdmFsdWVzIG9mIHR5cGUgYGBUYGAuCgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IC4uIHBhcnNlZC1saXRlcmFsOjogICAgICAgICAgIHwgQSBzb3J0ZWQgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8IG9mIGludGVncmFsIGNvbnN0YW50ICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdyYXBwZXJzIGZvciB0aGUgaGFsZi1vcGVuIHJhbmdlIG9mIHZhbHVlcyBbXCBgYG5gYCwgICAgICB8CnwgICAgYGByYW5nZV9jPFQsbixtPmBgICAgICAgICAgfCBgYG1gYCk6IGBgaW50ZWdyYWxfYzxULG4+YGAsIGBgaW50ZWdyYWxfYzxULG4rMT5gYCwuLi4gICAgfAp8ICAgIGBgcmFuZ2VfYzxULG4sbT46OnR5cGVgYCAgIHwgYGBpbnRlZ3JhbF9jPFQsbS0xPmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgYmVnaW48cj46OnR5cGVgYCAgICAgICAgICAgIHwgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiBgYHJgYDsgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZSB8UmFuZG9tIEFjY2VzcyBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgZW5kPHI+Ojp0eXBlYGAgICAgICAgICAgICAgIHwgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiBgYHJgYDsgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZSB8UmFuZG9tIEFjY2VzcyBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgc2l6ZTxyPjo6dHlwZWBgICAgICAgICAgICAgIHwgVGhlIHNpemUgb2YgYGByYGA7IHNlZSB8UmFuZG9tIEFjY2VzcyBTZXF1ZW5jZXwuICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBlbXB0eTxyPjo6dHlwZWBgICAgICAgICAgICAgfCB8dHJ1ZSBpZiBhbmQgb25seSBpZnwgYGByYGAgaXMgZW1wdHk7IHNlZSAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBmcm9udDxyPjo6dHlwZWBgICAgICAgICAgICAgfCBUaGUgZmlyc3QgZWxlbWVudCBpbiBgYHJgYDsgc2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBiYWNrPHI+Ojp0eXBlYGAgICAgICAgICAgICAgfCBUaGUgbGFzdCBlbGVtZW50IGluIGBgcmBgOyBzZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBhdDxyLG4+Ojp0eXBlYGAgICAgICAgICAgICAgfCBUaGUgYGBuYGBcIHRoIGVsZW1lbnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGBgcmBgOyBzZWUgICAgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgcmFuZ2VfYzxpbnQsMCwwPiByYW5nZTA7CiAgICB0eXBlZGVmIHJhbmdlX2M8aW50LDAsMT4gcmFuZ2UxOwogICAgdHlwZWRlZiByYW5nZV9jPGludCwwLDEwPiByYW5nZTEwOwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBzaXplPHJhbmdlMD46OnZhbHVlLCA9PSwgMCApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggc2l6ZTxyYW5nZTE+Ojp2YWx1ZSwgPT0sIDEgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHNpemU8cmFuZ2UxMD46OnZhbHVlLCA9PSwgMTAgKTsKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGVtcHR5PHJhbmdlMD4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUX05PVCgoIGVtcHR5PHJhbmdlMT4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUX05PVCgoIGVtcHR5PHJhbmdlMTA+ICkpOwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgYmVnaW48cmFuZ2UwPjo6dHlwZSwgZW5kPHJhbmdlMD46OnR5cGUgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfTk9UKCggaXNfc2FtZTwgYmVnaW48cmFuZ2UxPjo6dHlwZSwgZW5kPHJhbmdlMT46OnR5cGUgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfTk9UKCggaXNfc2FtZTwgYmVnaW48cmFuZ2UxMD46OnR5cGUsIGVuZDxyYW5nZTEwPjo6dHlwZSA+ICkpOwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBmcm9udDxyYW5nZTE+Ojp0eXBlOjp2YWx1ZSwgPT0sIDAgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIGJhY2s8cmFuZ2UxPjo6dHlwZTo6dmFsdWUsID09LCAwICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBmcm9udDxyYW5nZTEwPjo6dHlwZTo6dmFsdWUsID09LCAwICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBiYWNrPHJhbmdlMTA+Ojp0eXBlOjp2YWx1ZSwgPT0sIDkgKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfFNlcXVlbmNlc3wsIHxSYW5kb20gQWNjZXNzIFNlcXVlbmNlfCwgfHZlY3Rvcl9jfCwgfHNldF9jfCwgfGxpc3RfY3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==