ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJhbXQvYW10bnYuaCBiL2FwL2xpYi9saWJhbXQvYW10bnYuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjkwYTRkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYmFtdC9hbXRudi5oCkBAIC0wLDAgKzEsMjE3IEBACisvKioNCisgKiANCisgKiBAZmlsZSAgICAgIGFtdG52LmgNCisgKiBAYnJpZWYgICAgIA0KKyAqICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRlRNLg0KKyAqICAgICAgICAgICAgQU1UxKO/6U5WstnX973Tv9oNCisgKiAgICAgICAgICAgIA0KKyAqIEBkZXRhaWxzICAgDQorICogQGF1dGhvciAgICBUb29scyBUZWFtLg0KKyAqIEBlbWFpbCAgICAgDQorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKEMpIDIwMTMgU2FuZWNoaXBzIFRlY2hub2xvZ3kgQ28uLCBMdGQuDQorICogQHdhcm5pbmcgICANCisgKiBAZGF0ZSAgICAgIDIwMTkvMDIvMDINCisgKiBAdmVyc2lvbiAgIDEuMQ0KKyAqIEBwcmUgICAgICAgDQorICogQHBvc3QgICAgICANCisgKiAgICAgICAgICAgIA0KKyAqIEBwYXIgICAgICAgDQorICogQ2hhbmdlIEhpc3RvcnkgOg0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIGRhdGUgICAgICAgIHZlcnNpb24gIGF1dGhvciAgICAgICAgIGRlc2NyaXB0aW9uDQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogMjAxOC8wNC8yOCAgMS4wICAgICAgbGl1LnhpbiAgICAgICAgQ3JlYXRlIGZpbGUNCisgKiAyMDE5LzAyLzAyICAxLjEgICAgICBqaWFuZy5mZW5nbGluICDQ3rjE16LKzbe9yr3OqmRveHlnZW4NCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiANCisgKiANCisgKi8NCisNCisjaWZuZGVmIF9fQU1UTlZfSA0KKyNkZWZpbmUgX19BTVROVl9IDQorI2luY2x1ZGUgIm9zX3R5cGVfZGVmLmgiDQorI2luY2x1ZGUgIlJPTnZQYXJhbV9BTVQuaCINCisjaW5jbHVkZSAiUldOdkNvbmZpZy5oIg0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiDQtG52cm8NCisgKiBAcGFyYW0gZHdTdGFydCBudsbwyry12Na3xqvSxiwwIH4gMk0tMSBieXRlcw0KKyAqIEBwYXJhbSBkd0xlbiBudrOktsgsMSB+IDJNIGJ5dGVzDQorICogQHBhcmFtIGZyb20gtP3QtMjrtcTK/b7dDQorICogQHJldHVybiAwILPJuaYgIA0KKyAqIEByZXR1cm4gLTEgyqew3A0KKyAqIEBub3RlICAgDQorICogQHdhcm5pbmcgDQorICovDQordW5zaWduZWQgaW50IGFtdF9udnJvX3dyaXRlKHVuc2lnbmVkIGludCBkd1N0YXJ0LCB1bnNpZ25lZCBpbnQgZHdMZW4sIHVuc2lnbmVkIGNoYXIgKmZyb20pOw0KKw0KKy8qKg0KKyAqIEBicmllZiC2wW52cm8NCisgKiBAcGFyYW0gZHdTdGFydCBudsbwyry12Na3xqvSxiwwIH4gMk0tMSBieXRlcw0KKyAqIEBwYXJhbSBkd0xlbiBudrOktsgsMSB+IDJNIGJ5dGVzDQorICogQHBhcmFtIHRvILbBs/a1xMr9vt0NCisgKiBAcmV0dXJuIDAgs8m5piAgDQorICogQHJldHVybiAtMSDKp7DcDQorICogQG5vdGUgICANCisgKiBAd2FybmluZyANCisgKi8NCit1bnNpZ25lZCBpbnQgYW10X252cm9fcmVhZCh1bnNpZ25lZCBpbnQgZHdTdGFydCwgdW5zaWduZWQgaW50IGR3TGVuLCB1bnNpZ25lZCBjaGFyICp0byk7DQorDQorLyoqDQorICogQGJyaWVmINC00rvP7k5WUk/K/b7dDQorICogQHBhcmFtIG52UGFyYW0guMNOVs/uwODQzQ0KKyAqIEBwYXJhbSBOdkl0ZW1EYXRhILT90LTI68r9vt21xLXY1rcNCisgKiBAcGFyYW0gTnZJdGVtTGVuIMr9vt2zpLbIDQorICogQHJldHVybiAwILPJuaYgIA0KKyAqIEByZXR1cm4gLTEgyqew3A0KKyAqIEBub3RlICAgDQorICogQHdhcm5pbmcgDQorICovDQoraW50ICBhbXRfd3JpdGVfbnZfaXRlbShOdlBhcmFtX0FNVCBudlBhcmFtLCBVSU5UOCAqTnZJdGVtRGF0YSwgVUlOVDMyIE52SXRlbUxlbik7DQorDQorLyoqDQorICogQGJyaWVmILbBs/bSu8/uTlZST8r9vt0NCisgKiBAcGFyYW0gbnZQYXJhbSAguMNOVs/uwODQzQ0KKyAqIEBwYXJhbSBOdkl0ZW1EYXRhILbBs/a1xMr9vt0NCisgKiBAcGFyYW0gTnZJdGVtTGVuICDK/b7ds6S2yA0KKyAqIEByZXR1cm4gMCCzybmmICANCisgKiBAcmV0dXJuIC0xIMqnsNwNCisgKiBAbm90ZSAgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK2ludCAgYW10X3JlYWRfbnZfaXRlbShOdlBhcmFtX0FNVCBudlBhcmFtLFVJTlQ4ICpOdkl0ZW1EYXRhLCBVSU5UMzIgTnZJdGVtTGVuKTsNCisNCisvKioNCisgKiBAYnJpZWYg0LTJ+rL6suLK1LHq1r7Ouw0KKyAqIEBwYXJhbSBudlBhcmFtICDJ+rL6suLK1LHq1r7Ou8/uw7a+2da1DQorICogQHBhcmFtIE52SXRlbURhdGEgtP3QtMjryv2+3Q0KKyAqIEByZXR1cm4gMCCzybmmICANCisgKiBAcmV0dXJuIC0xIMqnsNwNCisgKiBAbm90ZSAgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK2ludCAgYW10X3dyaXRlX3Rlc3RfZmxhZ19pdGVtKE52UGFyYW1fQU1URmxhZ3MgbnZQYXJhbSxVSU5UOCAqTnZJdGVtRGF0YSk7DQorDQorLyoqDQorICogQGJyaWVmILbByfqy+rLiytSx6ta+zrsNCisgKiBAcGFyYW0gbnZQYXJhbSAgyfqy+rLiytSx6ta+zrvP7sO2vtnWtQ0KKyAqIEBwYXJhbSBOdkl0ZW1EYXRhILbBs/a1xMr9vt0NCisgKiBAcmV0dXJuIDAgs8m5piAgDQorICogQHJldHVybiAtMSDKp7DcDQorICogQG5vdGUgICANCisgKiBAd2FybmluZyANCisgKi8NCitpbnQgIGFtdF9yZWFkX3Rlc3RfZmxhZ19pdGVtKE52UGFyYW1fQU1URmxhZ3MgbnZQYXJhbSxVSU5UOCAqTnZJdGVtRGF0YSk7DQorDQorLyoqDQorICogQGJyaWVmIE5WUk/Tw7un19S2qNLlx/jT8rbBuq/K/Q0KKyAqIEBwYXJhbSBkd1N0YXJ0IG52xvDKvLXY1rfGq9LGLDAgfiAxMDIzDQorICogQHBhcmFtIGR3TGVuIG52s6S2yCwxIH4gMTAyNCBieXRlcw0KKyAqIEBwYXJhbSBmcm9tILT90LTI67XEyv2+3Q0KKyAqIEByZXR1cm4gMCCzybmmICANCisgKiBAcmV0dXJuIC0xIMqnsNwNCisgKiBAbm90ZSAgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK2ludCAgYW10X252cm9fdXNlcl93cml0ZShVSU5UMzIgZHdTdGFydCwgVUlOVDMyIGR3TGVuLCBVSU5UOCogZnJvbSk7DQorDQorLyoqDQorICogQGJyaWVmIE5WUk/Tw7un19S2qNLlx/jT8tC0uq/K/Q0KKyAqIEBwYXJhbSBkd1N0YXJ0IG52xvDKvLXY1rfGq9LGLDAgfiAxMDIzDQorICogQHBhcmFtIGR3TGVuIG52s6S2yCwxIH4gMTAyNCBieXRlcw0KKyAqIEBwYXJhbSBmcm9tILbBs/a1xMr9vt0NCisgKiBAcmV0dXJuIDAgs8m5piAgDQorICogQHJldHVybiAtMSDKp7DcDQorICogQG5vdGUgICANCisgKiBAd2FybmluZyANCisgKi8NCitpbnQgIGFtdF9udnJvX3VzZXJfcmVhZChVSU5UMzIgZHdTdGFydCwgVUlOVDMyIGR3TGVuLCBVSU5UOCogdG8pOw0KKw0KKy8qKg0KKyAqIEBicmllZiBOVlJPss6/vMnovMbX1Lao0uXH+NPy0LS6r8r9DQorICogQHBhcmFtIGR3U3RhcnQgbnbG8Mq8tdjWt8ar0sYsMCB+IDEwMjMNCisgKiBAcGFyYW0gZHdMZW4gbnazpLbILDEgfiAxMDI0IGJ5dGVzDQorICogQHBhcmFtIGZyb20gtP3QtMjrtcTK/b7dDQorICogQHJldHVybiAwILPJuaYgIA0KKyAqIEByZXR1cm4gLTEgyqew3A0KKyAqIEBub3RlICAgDQorICogQHdhcm5pbmcgDQorICovDQoraW50IGFtdF9udnJvX3JlZl93cml0ZShVSU5UMzIgZHdTdGFydCwgVUlOVDMyIGR3TGVuLCBVSU5UOCogZnJvbSk7DQorDQorLyoqDQorICogQGJyaWVmIE5WUk+yzr+8yei8xtfUtqjS5cf40/K2wbqvyv0NCisgKiBAcGFyYW0gZHdTdGFydCBudsbwyry12Na3xqvSxiwwIH4gMTAyMw0KKyAqIEBwYXJhbSBkd0xlbiBudrOktsgsMSB+IDEwMjQgYnl0ZXMNCisgKiBAcGFyYW0gdG8gtsGz9rXEyv2+3Q0KKyAqIEByZXR1cm4gMCCzybmmICANCisgKiBAcmV0dXJuIC0xIMqnsNwNCisgKiBAbm90ZSAgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK2ludCBhbXRfbnZyb19yZWZfcmVhZChVSU5UMzIgZHdTdGFydCwgVUlOVDMyIGR3TGVuLCBVSU5UOCogdG8pOw0KKw0KKy8qKg0KKyogQGJyaWVmINOm08Oy48XQts+1scewyse38crHYW10xKPKvQ0KKyogQHBhcmFtIA0KKyogQHJldHVybiAxIGFtdMSjyr0NCisqIEByZXR1cm4gMCBub3JtYWzEo8q9DQorKiBAbm90ZSAgIA0KKyogQHdhcm5pbmcgDQorKi8NCitpbnQgaXNfYW10X21vZGUodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIMno1sNib290xvS2r8Sjyr0NCisgKiBAcGFyYW0gYm9vdG1vZGUgMrj219a92rXEserKtjogDQorICogICAgICAgICAgICAgIHsweDU0LDB4MDB9IDogdXNlciwNCisgKiAgICAgICAgICAgICAgezB4NTQsMHgwMX0gOiBkZWJ1ZywNCisgKiAgICAgICAgICAgICAgezB4NTQsMHgwMn0gOiBmYWN0b3J5LA0KKyAqICAgICAgICAgICAgICB7MHg1NCwweDREfSA6IGFtdCwNCisgKiBAcmV0dXJuIDAgs8m5piAgDQorICogQHJldHVybiAtMSDKp7DcDQorICogQG5vdGUgICANCisgKiBAd2FybmluZyANCisgKi8NCit1bnNpZ25lZCBpbnQgYW10X3NldF9ib290bW9kZSh1bnNpZ25lZCBjaGFyICBib290bW9kZVtdKTsNCisNCisvKioNCisgKiBAYnJpZWYgyejWw7Xns9i87LLiserWvs67DQorICogQHBhcmFtIGJhdGRldF92YWx1ZSC157PYvOyy4rHq1r4NCisgKiAgICAgICAgICAgICAwIDogv6q7+rK7vOyy4rXns9gsDQorICogICAgICAgICAgICAgMSA6IL+qu/q87LLiteez2A0KKyAqIEByZXR1cm4gMCCzybmmICANCisgKiBAcmV0dXJuIC0xIMqnsNwNCisgKiBAbm90ZSAgIA0KKyAqIEB3YXJuaW5nIA0KKyAqLw0KK3Vuc2lnbmVkIGludCBhbXRfc2V0X2JhdGRldF9mbGFnKGludCBiYXRkZXRfdmFsdWUpOw0KKw0KKy8qKg0KKyAqIEBicmllZiC2wbXns9i87LLiserWvs67DQorICogQHBhcmFtIHBiYXRkZXRfdmFsdWUgtsGz9rXEteez2LzssuKx6ta+DQorICogQHJldHVybiAwILPJuaYgIA0KKyAqIEByZXR1cm4gLTEgyqew3A0KKyAqIEBub3RlICAgDQorICogQHdhcm5pbmcgDQorICovDQordW5zaWduZWQgaW50IGFtdF9nZXRfYmF0ZGV0X2ZsYWcoaW50ICpwYmF0ZGV0X3ZhbHVlKTsNCisNCisvKioNCisgKiBAYnJpZWYgyejWw2FtdMSjyr3Pwr3izvZBVMP8we6x6ta+DQorICogQHBhcmFtIGJvb3Rtb2RlIDK49tfWvdq1xLHqyrY6IA0KKyAqICAgICAgICAgICAgICB7MHg0MSwweDU0fSA6IGFtdMSjyr3Pwr3izvZBVMP8we4NCisgKiBAcmV0dXJuIDAgs8m5piAgDQorICogQHJldHVybiAtMSDKp7DcDQorICogQG5vdGUgICANCisgKiBAd2FybmluZyANCisgKi8NCit1bnNpZ25lZCBpbnQgYW10X3NldF9hbXRfYXRtb2RlKHVuc2lnbmVkIGNoYXIgIGJvb3Rtb2RlW10sdW5zaWduZWQgY2hhciAgYXRtb2RlW10pOw0KK3Vuc2lnbmVkIGludCBpc19hbXRfYXRtb2RlKCk7DQorDQorDQorDQorDQorDQorI2VuZGlmIC8vIF9fQU1UTlZfSA0K