Ly8gQ29weXJpZ2h0IEdvdHRmcmllZCBHYW7fYXVnZSAyMDAzLgovLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQovKgogKiBHZW5lcmljIFJldHVybiB2YWx1ZSBjb252ZXJ0ZXIgZ2VuZXJhdG9yIGZvciBvcGFxdWUgQysrLXBvaW50ZXJzCiAqLwojIGlmbmRlZiBSRVRVUk5fT1BBUVVFX1BPSU5URVJfSFBQXwojIGRlZmluZSBSRVRVUk5fT1BBUVVFX1BPSU5URVJfSFBQXwoKIyBpbmNsdWRlIDxib29zdC9weXRob24vZGV0YWlsL3ByZWZpeC5ocHA+CiMgaW5jbHVkZSA8Ym9vc3QvcHl0aG9uL29wYXF1ZV9wb2ludGVyX2NvbnZlcnRlci5ocHA+CiMgaW5jbHVkZSA8Ym9vc3QvcHl0aG9uL2RldGFpbC9mb3JjZV9pbnN0YW50aWF0ZS5ocHA+CiMgaW5jbHVkZSA8Ym9vc3QvcHl0aG9uL3RvX3B5dGhvbl92YWx1ZS5ocHA+CiMgaW5jbHVkZSA8Ym9vc3QvcHl0aG9uL2RldGFpbC92YWx1ZV9hcmcuaHBwPgojIGluY2x1ZGUgPGJvb3N0L21wbC9hc3NlcnQuaHBwPgoKbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIHB5dGhvbiB7CgpuYW1lc3BhY2UgZGV0YWlsCnsKICB0ZW1wbGF0ZSA8Y2xhc3MgUG9pbnRlZT4KICBzdGF0aWMgdm9pZCBvcGFxdWVfcG9pbnRlZShQb2ludGVlIGNvbnN0IHZvbGF0aWxlKikKICB7CiAgICAgIGZvcmNlX2luc3RhbnRpYXRlKG9wYXF1ZTxQb2ludGVlPjo6aW5zdGFuY2UpOwogIH0KfQoKc3RydWN0IHJldHVybl9vcGFxdWVfcG9pbnRlcgp7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KICAgIHN0cnVjdCBhcHBseQogICAgewogICAgICAgIEJPT1NUX01QTF9BU1NFUlRfTVNHKCBpc19wb2ludGVyPFI+Ojp2YWx1ZSwgUkVUVVJOX09QQVFVRV9QT0lOVEVSX0VYUEVDVFNfQV9QT0lOVEVSX1RZUEUsIChSKSk7CiAgICAgICAgCiAgICAgICAgc3RydWN0IHR5cGUgOiAgCiAgICAgICAgICBib29zdDo6cHl0aG9uOjp0b19weXRob25fdmFsdWU8CiAgICAgICAgICAgICAgdHlwZW5hbWUgZGV0YWlsOjp2YWx1ZV9hcmc8Uj46OnR5cGUKICAgICAgICAgID4KICAgICAgICB7CiAgICAgICAgICAgIHR5cGUoKSB7IGRldGFpbDo6b3BhcXVlX3BvaW50ZWUoUigpKTsgfQogICAgICAgIH07CiAgICB9Owp9OwoKfX0gLy8gbmFtZXNwYWNlIGJvb3N0OjpweXRob24KIyBlbmRpZiAvLyBSRVRVUk5fT1BBUVVFX1BPSU5URVJfSFBQXwo=