Li4gTWV0YWZ1bmN0aW9ucy9CaXR3aXNlIE9wZXJhdGlvbnMvL3NoaWZ0X3JpZ2h0CgpzaGlmdF9yaWdodAo9PT09PT09PT09PQoKU3lub3BzaXMKLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdGVtcGxhdGU8IAogICAgICAgICAgdHlwZW5hbWUgVAogICAgICAgICwgdHlwZW5hbWUgU2hpZnQKICAgICAgICA+CiAgICBzdHJ1Y3Qgc2hpZnRfcmlnaHQKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIHRoZSByZXN1bHQgb2YgYml0d2lzZSAqc2hpZnQgcmlnaHQqIChgYD4+YGApIG9wZXJhdGlvbiBvbiBgYFRgYC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvc2hpZnRfcmlnaHQuaHBwPgogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9iaXR3aXNlLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfE51bWVyaWMgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFRgYCAgICAgICAgIHwgfEludGVncmFsIENvbnN0YW50fCAgICAgICAgICAgfCBBIHZhbHVlIHRvIHNoaWZ0LiAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYFNoaWZ0YGAgICAgIHwgVW5zaWduZWQgfEludGVncmFsIENvbnN0YW50fCAgfCBBIHNoaWZ0IGRpc3RhbmNlLiAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCnxOb3RlOnwgfG51bWVyaWMgbWV0YWZ1bmN0aW9uIG5vdGV8IHwtLSBlbmQgbm90ZXwKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFyYml0cmFyeSB8SW50ZWdyYWwgQ29uc3RhbnR8IGBgY2BgIGFuZCB1bnNpZ25lZCB8SW50ZWdyYWwgQ29uc3RhbnR8IGBgc2hpZnRgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBzaGlmdF9yaWdodDxjLHNoaWZ0Pjo6dHlwZSByOyAKCjpSZXR1cm4gdHlwZToKICAgIHxJbnRlZ3JhbCBDb25zdGFudHwuCgo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byAKICAgICAgICAKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgIHR5cGVkZWYgaW50ZWdyYWxfYzwKICAgICAgICAgICAgICBjOjp2YWx1ZV90eXBlCiAgICAgICAgICAgICwgKCBjOjp2YWx1ZSA+PiBzaGlmdDo6dmFsdWUgKQogICAgICAgICAgICA+IHI7CgouLiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgc2hpZnRfcmlnaHQ8YyxzaGlmdD4gcjsgCgo6UmV0dXJuIHR5cGU6CiAgICB8SW50ZWdyYWwgQ29uc3RhbnR8LgoKOlNlbWFudGljczoKICAgIEVxdWl2YWxlbnQgdG8KICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICAgICBzdHJ1Y3QgciA6IHNoaWZ0X3JpZ2h0PGMsc2hpZnQ+Ojp0eXBlIHt9OwoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBpbnRlZ3JhbF9jPHVuc2lnbmVkLDA+IHUwOwogICAgdHlwZWRlZiBpbnRlZ3JhbF9jPHVuc2lnbmVkLDE+IHUxOwogICAgdHlwZWRlZiBpbnRlZ3JhbF9jPHVuc2lnbmVkLDI+IHUyOwogICAgdHlwZWRlZiBpbnRlZ3JhbF9jPHVuc2lnbmVkLDg+IHU4OwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCAoc2hpZnRfcmlnaHQ8dTAsdTA+Ojp2YWx1ZSksID09LCAwICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCAoc2hpZnRfcmlnaHQ8dTEsdTA+Ojp2YWx1ZSksID09LCAxICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCAoc2hpZnRfcmlnaHQ8dTEsdTE+Ojp2YWx1ZSksID09LCAwICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCAoc2hpZnRfcmlnaHQ8dTIsdTE+Ojp2YWx1ZSksID09LCAxICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCAoc2hpZnRfcmlnaHQ8dTgsdTE+Ojp2YWx1ZSksID09LCA0ICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxCaXR3aXNlIE9wZXJhdGlvbnN8LCB8TnVtZXJpYyBNZXRhZnVuY3Rpb258LCB8bnVtZXJpY19jYXN0fCwgfHNoaWZ0X2xlZnR8LCB8Yml0YW5kX3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==