LyoqCiAqIEBmaWxlIHNvZnRfdGltZXIuaAogKiBAYnJpZWYgyO22qMqxxvfNt87EvP4KICoKICogQ29weXJpZ2h0IChDKSAyMDE3IFNhbmVjaGlwcyBUZWNobm9sb2d5IENvLiwgTHRkLgogKgogKi8KCiNpZm5kZWYgX1NPRlRfVElNRVJfSF8KI2RlZmluZSBfU09GVF9USU1FUl9IXwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGhlYWRlciBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCiNpbmNsdWRlICJtZXNzYWdlLmgiCiNpbmNsdWRlICJvc190eXBlX2RlZi5oIgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNybyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKgogKiBAYnJpZWYgyO28/raoyrHG97XE1+6087j2yv0KICovCiNkZWZpbmUgTUFYX1NPRlRfVElNRVJfTlVNIDMyCgovKioKICogQGJyaWVmILaoyrHG98Dg0M2x6ta+zrt1Y0ZsYWe1xLrqLLTLtqjKscb31ru0pbei0ru0zgogKi8KI2RlZmluZSBUSU1FUl9GTEFHX09OQ0UgIDAKCi8qKgogKiBAYnJpZWYgtqjKscb3wODQzbHq1r7Ou3VjRmxhZ7XEuuostMu2qMqxxvez1tD409DQpwogKi8KI2RlZmluZSBUSU1FUl9GTEFHX1JFU1RBUlQgMQoKLyoqCiAqIEBicmllZiDI7bz+tqjKscb3tO3O88LrtqjS5aOsu9i197qvyv3Oqr/VCiAqLwojZGVmaW5lIFNPRlRUSU1FUl9FUlJDT0RFX0NBTExCQUNLX05VTEwgMQoKLyoqCiAqIEBicmllZiDI7bz+tqjKscb3tO3O88LrtqjS5aOss/XKvLuvyqew3AogKi8KI2RlZmluZSBTT0ZUVElNRVJfRVJSQ09ERV9JTklUX0ZBSUwgCTIKCi8qKgogKiBAYnJpZWYgyO28/raoyrHG97TtzvPC67ao0uWjrLS0vai1xMjttqjKscb3s6y5/dfutPO49sr9CiAqLwojZGVmaW5lIFNPRlRUSU1FUl9FUlJDT0RFX1FVRVVFX0ZVTEwgCTMKCi8qKgogKiBAYnJpZWYgyO28/raoyrHG97TtzvPC67ao0uWjrLS0vai1xMjttqjKscb3aWTS0b6ttObU2gogKi8KI2RlZmluZSBTT0ZUVElNRVJfRVJSQ09ERV9USU1FUklEX0VYSVNUIDQKCgojaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUwoKLyoqCiAqIEBicmllZiDTsrz+tqjKscb3tcSyvbOko6wxMG1zCiAqLwojZGVmaW5lIFRJTUVSX1NURVAgMTAKCi8qaWYgdGhlIHRocmVhZCBvZiBzb2Z0IHRpbWVyIGlzIGV4aXN0LCAwIG1lYW5zIG5vdCBleGlzdCovCiNkZWZpbmUgICBTT0ZUX1RJTUVSX1RIUkVBRF9OVUxMICAwCiNkZWZpbmUgICBTT0ZUX1RJTUVSX1RIUkVBRF9FWElTVCAgMQoKI2VuZGlmLy8jaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZm5kZWYgRE9YWUdFTl9TSE9VTERfU0tJUF9USElTCgovKrao0uXI7bz+tqjKscb3tcTK/b7dveG5uSovCnR5cGVkZWYgc3RydWN0IHRhZ1NPRlRfVElNRVIgewoJc3RydWN0IHRhZ1NPRlRfVElNRVIgKnByZXY7CglzdHJ1Y3QgdGFnU09GVF9USU1FUiAqbmV4dDsKCWludCB1c2VkOwoJaW50IGRvbmU7CglpbnQgdGltZXJWYWx1ZTsKCglVU0hPUlQgdXNUaW1lcklEOyAgICAgIC8qtqjKscb3SUQs08PAtMf4t9ayu82stcTI7bz+tqjKscb3LCAwserKtiovCglVQ0hBUiAgdWNGbGFnOyAgICAgICAgIC8qtqjKscb3wODQzbHq1r7OuyovCglVQ0hBUiAgdWNSZXNlcnZlZDsgICAgIC8qsaPB9NfWts4qLwoJVUxPTkcgIHVsQ3VySW50ZXJ2YWw7ICAgLyq1scewtqjKscb3s6zKscqj0+DKsbzko6y1pc67ILrBw+so16LS4rK7ysfOosPrKaOssdjQ67ao0uXOqtOyvP62qMqxxveyvbOktcSxtsr9Ki8KCVVMT05HICB1bE5leHRJbnRlcnZhbDsgIC8qs6zKsbrztqjKscb31tjWw7XEvOS49KOstaXOuyC6wcPrKNei0uKyu8rHzqLD6ykqLwoJdm9pZCAqICgqcHJvY0NhbGxCYWNrKSh2b2lkICopOyAvKrao0uW2qMqxxvezrMqxuvO1xLvYtfe0psDtuq/K/da41esqLwoJdm9pZCAgICphcmdzOyAgICAgICAgICAgICAgICAvKrao0uW2qMqxxvezrMqxuvO1xLvYtfe0psDtuq/K/bXEss7K/SovCn0gU09GVF9USU1FUjsKCnR5cGVkZWYgc3RydWN0IHRhZ01TR19USU1FUkJVRiB7CglMT05HICAgbE1zZ1R5cGU7ICAgICAgICAvKs/7z6LA4NDNo6zV4rj2ysfTw8C0v9jWxs/7z6LK1cihtcTTxc/Iy7PQ8rXEKi8KCVVTSE9SVCB1c01zZ0NtZDsgICAgICAgIC8qz/vPosLro6zV4rj2ysfTw8C01rjKvs/7z6K1xMTayN3Kx8qyw7S1xCovCglVU0hPUlQgdXNEYXRhTGVuOyAgICAgICAvKtCvtPi1xNPQ0KfK/b7ds6S2yCovCglVQ0hBUiAgYXVjRGF0YUJ1Zls0XTsgICAvKtCvtPi1xNPQ0KfK/b7dYnVmZmVyLLTmt8W2qMqxxvdpbmRleCovCglVTE9ORyAgdWxNYWdpYzsgICAgICAgICAvKsSnyvXX1qOs1f2zo8fpv/bPwta1zqpNU0dfTUFHSUNfV09SRCovCn0gVF9USU1FUl9NU0dfQlVGOwoKI2VuZGlmLy8jaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioKICogQGJyaWVmILS0vajI7baoyrHG973Tv9oKICogQHBhcmFtIHVzVGltZXJJRCAgICAgIMjrss6jrMjttqjKscb3aWSjrNPDwLTH+LfWsrvNrLXEyO28/raoyrHG9wogKiBAcGFyYW0gdWNGbGFnICAgICAgICAgyOuyzqOstqjKscb3wODQzbHq1r7OuwogKiBAcGFyYW0gdWxJbnRlcnZhbCAgICAgyOuyzqOsyO22qMqxxvezrMqxyrG85LzkuPSjrLWlzrujum1zCiAqIEBwYXJhbSBwcm9jQ2FsbEJhY2sgICDI67LOo6y2qMqxxvezrMqxuvO1xLvYtfe6r8r91rjV6wogKiBAcGFyYW0gYXJncyAgICAgICAgICAgyOuyzqOstqjKscb3s6zKsbrztcS72LX3uq/K/bLOyv0KICogQHJldHVybiBPSyCzybmmo6zG5Mv71rXKp7DcCiAqIEByZXR2YWwgT0sgILPJuaYKICogQHJldHZhbCBTT0ZUVElNRVJfRVJSQ09ERV9DQUxMQkFDS19OVUxMICDI7baoyrHG97XEu9i197qvyv212Na3zqq/1QogKiBAcmV0dmFsIFNPRlRUSU1FUl9FUlJDT0RFX0lOSVRfRkFJTCAgICAgIMjttqjKscb3s/XKvLuvyqew3AogKiBAcmV0dmFsIFNPRlRUSU1FUl9FUlJDT0RFX1FVRVVFX0ZVTEwgICAgILS0vai1xMjttqjKscb3s6y5/dfutPO49sr9z97WxgogKiBAcmV0dmFsIFNPRlRUSU1FUl9FUlJDT0RFX1RJTUVSSURfRVhJU1QgILjDyO22qMqxxvdpZNLRvq205tTaCiAqIEBub3RlCiAqIEB3YXJuaW5nCiAqLwpMT05HIHNjX3RpbWVyX2NyZWF0ZShVU0hPUlQgdXNUaW1lcklELAogICAgICAgICAgICAgICAgICAgICBVQ0hBUiB1Y0ZsYWcsCiAgICAgICAgICAgICAgICAgICAgIFVMT05HIHVsSW50ZXJ2YWwsCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAoKnByb2NDYWxsQmFjaykodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJncyk7CgovKioKICogQGJyaWVmIMm+s/3I7baoyrHG973Tv9oKICogQHBhcmFtIHVzVGltZXJJRCAgIMjrss6jrNKqyb6z/bXEyO22qMqxxvdpZAogKiBAcmV0dXJuIE9Lo7qzybmmo6xFUlJPUqO6yqew3AogKiBAcmV0dmFsIE9LICCzybmmCiAqIEByZXR2YWwgRVJST1IgIMqnsNwKICogQG5vdGUKICogQHdhcm5pbmcKICovCkxPTkcgc2NfdGltZXJfZGVsZXRlKFVTSE9SVCB1c1RpbWVySUQpOwoKI2lmbmRlZiBMSUJTT0ZUX1RJTUVSX0FQSV9ORVcKTE9ORyBDcmVhdGVTb2Z0VGltZXIoVVNIT1JUIHVzVGltZXJJRCwKICAgICAgICAgICAgICAgICAgICAgVUNIQVIgdWNGbGFnLAogICAgICAgICAgICAgICAgICAgICBVTE9ORyB1bEludGVydmFsLAogICAgICAgICAgICAgICAgICAgICB2b2lkICogKCpwcm9jQ2FsbEJhY2spKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ3MpOwpMT05HIERlbGV0ZVNvZnRUaW1lcihVU0hPUlQgdXNUaW1lcklEKTsKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICBJbmxpbmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKCiNlbmRpZiAgLy8gI2lmbmRlZiBfU09GVF9USU1FUl9IXwoK