ZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9jcHUuYyBiL2NwdS83NHh4Xzd4eC9jcHUuYwppbmRleCAxOWY4ZmY4Li4zMGEyMDkxIDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvY3B1LmMKKysrIGIvY3B1Lzc0eHhfN3h4L2NwdS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAhZGVmaW5lZChDT05GSUdfRUxQUEMpCiAvKiBubyBnZW5lcmljIHdheSB0byBkbyBib2FyZCByZXNldC4gc2ltcGx5IGNhbGwgc29mdF9yZXNldC4gKi8KIHZvaWQKLWRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCitkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAgICAgCXVsb25nIGFkZHI7CiAJLyogZmx1c2ggYW5kIGRpc2FibGUgSS9EIGNhY2hlICovCmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvc3BlZWQuYyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCmluZGV4IDIzYjcxZDQuLjEyYmRmMzcgMTAwNjQ0Ci0tLSBhL2NwdS83NHh4Xzd4eC9zcGVlZC5jCisrKyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCkBAIC00OSwyOSArNDksMjkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgaGlkMV9meF9tdWx0aXBsaWVyc194XzEwW10gPSB7Ci0gICAgICAgIDAwLCAgICAgLyogMDAwMCAtIG9mZiAqLwotICAgICAgICAwMCwgICAgIC8qIDAwMDEgLSBvZmYgKi8KLSAgICAgICAgMTAsICAgICAvKiAwMDEwIC0gYnlwYXNzICovCi0gICAgICAgIDEwLCAgICAgLyogMDAxMSAtIGJ5cGFzcyAqLwotICAgICAgICAyMCwgICAgIC8qIDAxMDAgLSAyeCAqLwotICAgICAgICAyNSwgICAgIC8qIDAxMDEgLSAyLjV4ICovCi0gICAgICAgIDMwLCAgICAgLyogMDExMCAtIDN4ICovCi0gICAgICAgIDM1LCAgICAgLyogMDExMSAtIDMuNXggKi8KLSAgICAgICAgNDAsICAgICAvKiAxMDAwIC0gNHggKi8KLSAgICAgICAgNDUsICAgICAvKiAxMDAxIC0gNC41eCAqLwotICAgICAgICA1MCwgICAgIC8qIDEwMTAgLSA1eCAqLwotICAgICAgICA1NSwgICAgIC8qIDEwMTEgLSA1LjV4ICovCi0gICAgICAgIDYwLCAgICAgLyogMTEwMCAtIDZ4ICovCi0gICAgICAgIDY1LCAgICAgLyogMTEwMSAtIDYuNXggKi8KLSAgICAgICAgNzAsICAgICAvKiAxMTEwIC0gN3ggKi8KLSAgICAgICAgNzUsICAgICAvKiAxMTExIC0gNy41ICovCi0gICAgICAgIDgwLCAgICAgLyogMTAwMDAgLSA4eCAqLwotICAgICAgICA4NSwgICAgIC8qIDEwMDAxIC0gOC41eCAqLwotICAgICAgICA5MCwgICAgIC8qIDEwMDEwIC0gOXggKi8KLSAgICAgICAgOTUsICAgICAvKiAxMDAxMSAtIDkuNXggKi8KLSAgICAgICAgMTAwLCAgICAvKiAxMDEwMCAtIDEweCAqLwotICAgICAgICAxMTAsICAgIC8qIDEwMTAxIC0gMTF4ICovCi0gICAgICAgIDEyMCwgICAgLyogMTAxMTAgLSAxMnggKi8KKwkwMCwgICAgIC8qIDAwMDAgLSBvZmYgKi8KKwkwMCwgICAgIC8qIDAwMDEgLSBvZmYgKi8KKwkxMCwgICAgIC8qIDAwMTAgLSBieXBhc3MgKi8KKwkxMCwgICAgIC8qIDAwMTEgLSBieXBhc3MgKi8KKwkyMCwgICAgIC8qIDAxMDAgLSAyeCAqLworCTI1LCAgICAgLyogMDEwMSAtIDIuNXggKi8KKwkzMCwgICAgIC8qIDAxMTAgLSAzeCAqLworCTM1LCAgICAgLyogMDExMSAtIDMuNXggKi8KKwk0MCwgICAgIC8qIDEwMDAgLSA0eCAqLworCTQ1LCAgICAgLyogMTAwMSAtIDQuNXggKi8KKwk1MCwgICAgIC8qIDEwMTAgLSA1eCAqLworCTU1LCAgICAgLyogMTAxMSAtIDUuNXggKi8KKwk2MCwgICAgIC8qIDExMDAgLSA2eCAqLworCTY1LCAgICAgLyogMTEwMSAtIDYuNXggKi8KKwk3MCwgICAgIC8qIDExMTAgLSA3eCAqLworCTc1LCAgICAgLyogMTExMSAtIDcuNSAqLworCTgwLCAgICAgLyogMTAwMDAgLSA4eCAqLworCTg1LCAgICAgLyogMTAwMDEgLSA4LjV4ICovCisJOTAsICAgICAvKiAxMDAxMCAtIDl4ICovCisJOTUsICAgICAvKiAxMDAxMSAtIDkuNXggKi8KKwkxMDAsICAgIC8qIDEwMTAwIC0gMTB4ICovCisJMTEwLCAgICAvKiAxMDEwMSAtIDExeCAqLworCTEyMCwgICAgLyogMTAxMTAgLSAxMnggKi8KIH07CiAKIApAQCAtODcsOCArODcsOCBAQAogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogI2lmZGVmIENPTkZJR183NTBGWAotICAgICAgICB1bG9uZyBjbG9jayA9IENGR19CVVNfQ0xLICogXAotICAgICAgICAgICAgICAgICAgICAgIGhpZDFfZnhfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyN10gLyAxMDsKKwl1bG9uZyBjbG9jayA9IENGR19CVVNfQ0xLICogXAorCQkgICAgICBoaWQxX2Z4X211bHRpcGxpZXJzX3hfMTBbZ2V0X2hpZDEgKCkgPj4gMjddIC8gMTA7CiAjZWxzZQogCXVsb25nIGNsb2NrID0gQ0ZHX0JVU19DTEsgKiBcCiAJCSAgICAgIGhpZDFfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyOF0gLyAxMDsKZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9zdGFydC5TIGIvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKaW5kZXggNDg1NzkwOC4uN2QzN2M4ZSAxMDA2NDQKLS0tIGEvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKKysrIGIvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKQEAgLTIzMyw5ICsyMzMsOSBAQAogCVNURF9FWENFUFRJT04oMHhlMDAsIFRyYXBfMGUsIFVua25vd25FeGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTigweGYwMCwgVHJhcF8wZiwgVW5rbm93bkV4Y2VwdGlvbikKIAotICAgICAgICAvKgotICAgICAgICAgKiBPbiB0aGUgTVBDOHh4LCB0aGlzIGlzIGEgc29mdHdhcmUgZW11bGF0aW9uIGludGVycnVwdC4gSXQKLSAgICAgICAgICogb2NjdXJzIGZvciBhbGwgdW5pbXBsZW1lbnRlZCBhbmQgaWxsZWdhbCBpbnN0cnVjdGlvbnMuCisJLyoKKwkgKiBPbiB0aGUgTVBDOHh4LCB0aGlzIGlzIGEgc29mdHdhcmUgZW11bGF0aW9uIGludGVycnVwdC4gSXQKKwkgKiBvY2N1cnMgZm9yIGFsbCB1bmltcGxlbWVudGVkIGFuZCBpbGxlZ2FsIGluc3RydWN0aW9ucy4KIAkgKi8KIAlTVERfRVhDRVBUSU9OKDB4MTAwMCwgU29mdEVtdSwgU29mdEVtdUV4Y2VwdGlvbikKIApAQCAtMjgyLDkgKzI4Miw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQUxUSVZFQykgJiYgZGVmaW5lZChDT05GSUdfNzR4eCkKIAkubG9uZwkweDdlMDAwNjZjCiAJCS8qCi0gICAgICAgICAgICAgICAgICogZHNzYWxsIGluc3RydWN0aW9uLCBnYXMgZG9lc24ndCBoYXZlIGl0IHlldAotICAgICAgICAgICAgICAgICAqIC4uLmZvciBhbHRpdmVjLCBkYXRhIHN0cmVhbSBzdG9wIGFsbCB0aGlzIHByb2JhYmx5Ci0gICAgICAgICAgICAgICAgICogaXNuJ3QgbmVlZGVkIHVubGVzcyB3ZSB3YXJtIChzb2Z0d2FyZSkgcmVib290IFUtQm9vdAorCQkgKiBkc3NhbGwgaW5zdHJ1Y3Rpb24sIGdhcyBkb2Vzbid0IGhhdmUgaXQgeWV0CisJCSAqIC4uLmZvciBhbHRpdmVjLCBkYXRhIHN0cmVhbSBzdG9wIGFsbCB0aGlzIHByb2JhYmx5CisJCSAqIGlzbid0IG5lZWRlZCB1bmxlc3Mgd2Ugd2FybSAoc29mdHdhcmUpIHJlYm9vdCBVLUJvb3QKIAkJICovCiAjZW5kaWYKIApAQCAtMzI1LDE1ICszMjUsMTUgQEAKIAkgKiBDYWNoZSBtdXN0IGJlIGVuYWJsZWQgaGVyZSBmb3Igc3RhY2staW4tY2FjaGUgdHJpY2suCiAJICogVGhpcyBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgQkFUUy4KIAkgKiBUaGlzIG1lYW5zOgotICAgICAgICAgKiAgIDEpIGZvciB0aGUgRVZCLCBvcmlnaW5hbCBndCByZWdzIG5lZWQgdG8gYmUgbWFwcGVkCisJICogICAxKSBmb3IgdGhlIEVWQiwgb3JpZ2luYWwgZ3QgcmVncyBuZWVkIHRvIGJlIG1hcHBlZAogCSAqICAgMikgbmVlZCB0byBoYXZlIGFuIElCQVQgZm9yIHRoZSAweGYgcmVnaW9uLAogCSAqICAgICAgd2UgYXJlIHJ1bm5pbmcgdGhlcmUhCi0gICAgICAgICAqIENhY2hlIHNob3VsZCBiZSB0dXJuZWQgb24gYWZ0ZXIgQkFUcywgc2luY2UgYnkgZGVmYXVsdAotICAgICAgICAgKiBldmVyeXRoaW5nIGlzIHdyaXRlLXRocm91Z2guCi0gICAgICAgICAqIFRoZSBpbml0LW1lbSBCQVQgY2FuIGJlIHJldXNlZCBhZnRlciByZWxvYy4gVGhlIG9sZAotICAgICAgICAgKiBndC1yZWdzIEJBVCBjYW4gYmUgcmV1c2VkIGFmdGVyIGJvYXJkX2luaXRfZiBjYWxscwotICAgICAgICAgKiBib2FyZF9wcmVfaW5pdCAoRVZCIG9ubHkpLgotICAgICAgICAgKi8KKwkgKiBDYWNoZSBzaG91bGQgYmUgdHVybmVkIG9uIGFmdGVyIEJBVHMsIHNpbmNlIGJ5IGRlZmF1bHQKKwkgKiBldmVyeXRoaW5nIGlzIHdyaXRlLXRocm91Z2guCisJICogVGhlIGluaXQtbWVtIEJBVCBjYW4gYmUgcmV1c2VkIGFmdGVyIHJlbG9jLiBUaGUgb2xkCisJICogZ3QtcmVncyBCQVQgY2FuIGJlIHJldXNlZCBhZnRlciBib2FyZF9pbml0X2YgY2FsbHMKKwkgKiBib2FyZF9wcmVfaW5pdCAoRVZCIG9ubHkpLgorCSAqLwogI2lmICFkZWZpbmVkKENPTkZJR19CQUI3eHgpICYmICFkZWZpbmVkKENPTkZJR19FTFBQQykKIAkvKiBlbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiAqLwogCWJsCWVuYWJsZV9hZGRyX3RyYW5zCkBAIC0zOTEsMTAgKzM5MSwxMCBAQAogCW10c3ByCURCQVQyVSwgcjAKIAltdHNwcglEQkFUM1UsIHIwCiAjaWZkZWYgQ09ORklHXzc1MEZYCi0gICAgICAgIG10c3ByICAgREJBVDRVLCByMAotICAgICAgICBtdHNwciAgIERCQVQ1VSwgcjAKLSAgICAgICAgbXRzcHIgICBEQkFUNlUsIHIwCi0gICAgICAgIG10c3ByICAgREJBVDdVLCByMAorCW10c3ByICAgREJBVDRVLCByMAorCW10c3ByICAgREJBVDVVLCByMAorCW10c3ByICAgREJBVDZVLCByMAorCW10c3ByICAgREJBVDdVLCByMAogI2VuZGlmCiAJaXN5bmMKIAlzeW5jCkBAIC00NzksNzYgKzQ3OSw3NiBAQAogCiAjaWZkZWYgQ09ORklHXzc1MEZYCiAJLyogSUJBVCA0ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDRMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19JQkFUNExAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0lCQVQ0VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDRVQGwKLSAgICAgICAgbXRzcHIgICBJQkFUNEwsIHI0Ci0gICAgICAgIG10c3ByICAgSUJBVDRVLCByMwotICAgICAgICBpc3luYworCWFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDRMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ0TEBsCisJYWRkaXMgICByMywgcjAsIENGR19JQkFUNFVAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDRVQGwKKwltdHNwciAgIElCQVQ0TCwgcjQKKwltdHNwciAgIElCQVQ0VSwgcjMKKwlpc3luYwogCiAJLyogREJBVCA0ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDRMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19EQkFUNExAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ0VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDRVQGwKLSAgICAgICAgbXRzcHIgICBEQkFUNEwsIHI0Ci0gICAgICAgIG10c3ByICAgREJBVDRVLCByMwotICAgICAgICBpc3luYworCWFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDRMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0RCQVQ0TEBsCisJYWRkaXMgICByMywgcjAsIENGR19EQkFUNFVAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDRVQGwKKwltdHNwciAgIERCQVQ0TCwgcjQKKwltdHNwciAgIERCQVQ0VSwgcjMKKwlpc3luYwogCi0gICAgICAgIC8qIElCQVQgNSAqLwotICAgICAgICBhZGRpcyAgIHI0LCByMCwgQ0ZHX0lCQVQ1TEBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDVMQGwKLSAgICAgICAgYWRkaXMgICByMywgcjAsIENGR19JQkFUNVVAaAotICAgICAgICBvcmkgICAgIHIzLCByMywgQ0ZHX0lCQVQ1VUBsCi0gICAgICAgIG10c3ByICAgSUJBVDVMLCByNAotICAgICAgICBtdHNwciAgIElCQVQ1VSwgcjMKLSAgICAgICAgaXN5bmMKKwkvKiBJQkFUIDUgKi8KKwlhZGRpcyAgIHI0LCByMCwgQ0ZHX0lCQVQ1TEBoCisJb3JpICAgICByNCwgcjQsIENGR19JQkFUNUxAbAorCWFkZGlzICAgcjMsIHIwLCBDRkdfSUJBVDVVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0lCQVQ1VUBsCisJbXRzcHIgICBJQkFUNUwsIHI0CisJbXRzcHIgICBJQkFUNVUsIHIzCisJaXN5bmMKIAogCS8qIERCQVQgNSAqLwotICAgICAgICBhZGRpcyAgIHI0LCByMCwgQ0ZHX0RCQVQ1TEBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCBDRkdfREJBVDVMQGwKLSAgICAgICAgYWRkaXMgICByMywgcjAsIENGR19EQkFUNVVAaAotICAgICAgICBvcmkgICAgIHIzLCByMywgQ0ZHX0RCQVQ1VUBsCi0gICAgICAgIG10c3ByICAgREJBVDVMLCByNAotICAgICAgICBtdHNwciAgIERCQVQ1VSwgcjMKLSAgICAgICAgaXN5bmMKKwlhZGRpcyAgIHI0LCByMCwgQ0ZHX0RCQVQ1TEBoCisJb3JpICAgICByNCwgcjQsIENGR19EQkFUNUxAbAorCWFkZGlzICAgcjMsIHIwLCBDRkdfREJBVDVVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0RCQVQ1VUBsCisJbXRzcHIgICBEQkFUNUwsIHI0CisJbXRzcHIgICBEQkFUNVUsIHIzCisJaXN5bmMKIAotICAgICAgICAvKiBJQkFUIDYgKi8KLSAgICAgICAgYWRkaXMgICByNCwgcjAsIENGR19JQkFUNkxAaAotICAgICAgICBvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ2TEBsCi0gICAgICAgIGFkZGlzICAgcjMsIHIwLCBDRkdfSUJBVDZVQGgKLSAgICAgICAgb3JpICAgICByMywgcjMsIENGR19JQkFUNlVAbAotICAgICAgICBtdHNwciAgIElCQVQ2TCwgcjQKLSAgICAgICAgbXRzcHIgICBJQkFUNlUsIHIzCi0gICAgICAgIGlzeW5jCisJLyogSUJBVCA2ICovCisJYWRkaXMgICByNCwgcjAsIENGR19JQkFUNkxAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDZMQGwKKwlhZGRpcyAgIHIzLCByMCwgQ0ZHX0lCQVQ2VUBoCisJb3JpICAgICByMywgcjMsIENGR19JQkFUNlVAbAorCW10c3ByICAgSUJBVDZMLCByNAorCW10c3ByICAgSUJBVDZVLCByMworCWlzeW5jCiAKIAkvKiBEQkFUIDYgKi8KLSAgICAgICAgYWRkaXMgICByNCwgcjAsIENGR19EQkFUNkxAaAotICAgICAgICBvcmkgICAgIHI0LCByNCwgQ0ZHX0RCQVQ2TEBsCi0gICAgICAgIGFkZGlzICAgcjMsIHIwLCBDRkdfREJBVDZVQGgKLSAgICAgICAgb3JpICAgICByMywgcjMsIENGR19EQkFUNlVAbAotICAgICAgICBtdHNwciAgIERCQVQ2TCwgcjQKLSAgICAgICAgbXRzcHIgICBEQkFUNlUsIHIzCi0gICAgICAgIGlzeW5jCisJYWRkaXMgICByNCwgcjAsIENGR19EQkFUNkxAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfREJBVDZMQGwKKwlhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ2VUBoCisJb3JpICAgICByMywgcjMsIENGR19EQkFUNlVAbAorCW10c3ByICAgREJBVDZMLCByNAorCW10c3ByICAgREJBVDZVLCByMworCWlzeW5jCiAKLSAgICAgICAgLyogSUJBVCA3ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDdMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19JQkFUN0xAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0lCQVQ3VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDdVQGwKLSAgICAgICAgbXRzcHIgICBJQkFUN0wsIHI0Ci0gICAgICAgIG10c3ByICAgSUJBVDdVLCByMwotICAgICAgICBpc3luYworCS8qIElCQVQgNyAqLworCWFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDdMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ3TEBsCisJYWRkaXMgICByMywgcjAsIENGR19JQkFUN1VAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDdVQGwKKwltdHNwciAgIElCQVQ3TCwgcjQKKwltdHNwciAgIElCQVQ3VSwgcjMKKwlpc3luYwogCiAJLyogREJBVCA3ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDdMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19EQkFUN0xAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ3VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDdVQGwKLSAgICAgICAgbXRzcHIgICBEQkFUN0wsIHI0Ci0gICAgICAgIG10c3ByICAgREJBVDdVLCByMwotICAgICAgICBpc3luYworCWFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDdMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0RCQVQ3TEBsCisJYWRkaXMgICByMywgcjAsIENGR19EQkFUN1VAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDdVQGwKKwltdHNwciAgIERCQVQ3TCwgcjQKKwltdHNwciAgIERCQVQ3VSwgcjMKKwlpc3luYwogI2VuZGlmCiAKIAkvKiBiYXRzIGFyZSBkb25lLCBub3cgaW52YWxpZGF0ZSB0aGUgVExCcyAqLwpAQCAtNzY4LDggKzc2OCw4IEBACiAJLyoKIAkgKiBSZWxvY2F0aW9uIEZ1bmN0aW9uLCByMTQgcG9pbnQgdG8gZ290MisweDgwMDAKIAkgKgotICAgICAgICAgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCi0gICAgICAgICAqIGFscmVhZHkgcHV0cyBhIGZldyBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKwkgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCisJICogYWxyZWFkeSBwdXRzIGEgZmV3IGVudHJpZXMgaW4gdGhlIHRhYmxlLgogCSAqLwogCWxpCXIwLF9fZ290Ml9lbnRyaWVzQHNlY3RvZmZAbAogCWxhCXIzLEdPVChfR09UMl9UQUJMRV8pCkBAIC03ODMsNyArNzgzLDcgQEAKIAliZG56CTFiCiAKIAkvKgotICAgICAgICAgKiBOb3cgYWRqdXN0IHRoZSBmaXh1cHMgYW5kIHRoZSBwb2ludGVycyB0byB0aGUgZml4dXBzCisJICogTm93IGFkanVzdCB0aGUgZml4dXBzIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlIGZpeHVwcwogCSAqIGluIGNhc2Ugd2UgbmVlZCB0byBtb3ZlIG91cnNlbHZlcyBhZ2Fpbi4KIAkgKi8KIDI6CWxpCXIwLF9fZml4dXBfZW50cmllc0BzZWN0b2ZmQGwKZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L2ludGVycnVwdHMuYyBiL2NwdS9hcm03MjB0L2ludGVycnVwdHMuYwppbmRleCA1Mjc4N2ZlLi5iMWVlMTg4IDEwMDY0NAotLS0gYS9jcHUvYXJtNzIwdC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2FybTcyMHQvaW50ZXJydXB0cy5jCkBAIC04MCw3ICs4MCw2IEBACiAjZW5kaWYKIAogCi0KIHZvaWQgYmFkX21vZGUgKHZvaWQpCiB7CiAJcGFuaWMgKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CkBAIC05MSw3ICs5MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljb25zdCBjaGFyICpwcm9jZXNzb3JfbW9kZXNbXSA9Ci0JCQl7ICJVU0VSXzI2IiwgIkZJUV8yNiIsICJJUlFfMjYiLCAiU1ZDXzI2IiwgIlVLNF8yNiIsICJVSzVfMjYiLAorCQl7ICJVU0VSXzI2IiwgIkZJUV8yNiIsICJJUlFfMjYiLCAiU1ZDXzI2IiwgIlVLNF8yNiIsICJVSzVfMjYiLAogIlVLNl8yNiIsICJVSzdfMjYiLAogCQkiVUs4XzI2IiwgIlVLOV8yNiIsICJVSzEwXzI2IiwgIlVLMTFfMjYiLCAiVUsxMl8yNiIsICJVSzEzXzI2IiwKIAkJCQkiVUsxNF8yNiIsICJVSzE1XzI2IiwKZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L3N0YXJ0LlMgYi9jcHUvYXJtNzIwdC9zdGFydC5TCmluZGV4IGU5ODk5YTkuLjJjYTkxZDIgMTAwNjQ0Ci0tLSBhL2NwdS9hcm03MjB0L3N0YXJ0LlMKKysrIGIvY3B1L2FybTcyMHQvc3RhcnQuUwpAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCkBAIC0yNDcsOCArMjQ2LDYgQEAKIAltb3YJcGMsIGxyCiAKIAotCi0KIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjB0L2ludGVycnVwdHMuYwppbmRleCBkZDk0NGZiLi45ZmYwNmMxIDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2FybTkyMHQvaW50ZXJydXB0cy5jCkBAIC05MSw3ICs5MSw2IEBACiAjZW5kaWYKIAogCi0KIHZvaWQgYmFkX21vZGUgKHZvaWQpCiB7CiAJcGFuaWMgKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9zZXJpYWwuYyBiL2NwdS9hcm05MjB0L3NlcmlhbC5jCmluZGV4IDEwY2ZhZGUuLjdlZDQ1MmUgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L3NlcmlhbC5jCisrKyBiL2NwdS9hcm05MjB0L3NlcmlhbC5jCkBAIC05Miw3ICs5Miw3IEBACiBpbnQgc2VyaWFsX2dldGMgKHZvaWQpCiB7CiAJUzNDMjRYMF9VQVJUICogY29uc3QgdWFydCA9IFMzQzI0WDBfR2V0QmFzZV9VQVJUKFVBUlRfTlIpOwotCQorCiAJLyogd2FpdCBmb3IgY2hhcmFjdGVyIHRvIGFycml2ZSAqLwogCXdoaWxlICghKHVhcnQtPlVUUlNUQVQgJiAweDEpKTsKIApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvc3RhcnQuUyBiL2NwdS9hcm05MjB0L3N0YXJ0LlMKaW5kZXggZWQxNjE3Ni4uOWY1M2I4NyAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvc3RhcnQuUworKysgYi9jcHUvYXJtOTIwdC9zdGFydC5TCkBAIC0yNSw3ICsyNSw2IEBACiAgKi8KIAogCi0KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDx2ZXJzaW9uLmg+CiAKQEAgLTI3MSw4ICsyNzAsNiBAQAogCW1vdglwYywgbHIKIAogCi0KLQogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvY3B1L2F0OTFybTkyMDAvYXQ0NS5jIGIvY3B1L2F0OTFybTkyMDAvYXQ0NS5jCmluZGV4IGUwMDU3ZTcuLmNmNDU2ZmIgMTAwNjQ0Ci0tLSBhL2NwdS9hdDkxcm05MjAwL2F0NDUuYworKysgYi9jcHUvYXQ5MXJtOTIwMC9hdDQ1LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkvKiBSZXNldCB0aGUgU1BJICovCiAJQVQ5MUNfQkFTRV9TUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TV1JTVDsKIAotICAgIAkvKiBDb25maWd1cmUgU1BJIGluIE1hc3RlciBNb2RlIHdpdGggTm8gQ1Mgc2VsZWN0ZWQgISEhICovCisJLyogQ29uZmlndXJlIFNQSSBpbiBNYXN0ZXIgTW9kZSB3aXRoIE5vIENTIHNlbGVjdGVkICEhISAqLwogCUFUOTFDX0JBU0VfU1BJLT5TUElfTVIgPSBBVDkxQ19TUElfTVNUUiB8IEFUOTFDX1NQSV9NT0RGRElTIHwgQVQ5MUNfU1BJX1BDUzsKIAogCS8qIENvbmZpZ3VyZSBDUzAgYW5kIENTMyAqLwpAQCAtODMsMzggKzgzLDM4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdW5zaWduZWQgaW50IEFUOTFGX1NwaVdyaXRlICggQVQ5MVBTX0RhdGFmbGFzaERlc2MgcERlc2MgKQogewotICAgCXVuc2lnbmVkIGludCB0aW1lb3V0OworCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJcERlc2MtPnN0YXRlID0gQlVTWTsKIAotICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVMgKyBBVDkxQ19QRENfUlhURElTOworCUFUOTFDX0JBU0VfU1BJLT5TUElfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVMgKyBBVDkxQ19QRENfUlhURElTOwogCi0gICAJLyogSW5pdGlhbGl6ZSB0aGUgVHJhbnNtaXQgYW5kIFJlY2VpdmUgUG9pbnRlciAqLwotICAgIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1JQUiA9ICh1bnNpZ25lZCBpbnQpcERlc2MtPnJ4X2NtZF9wdCA7Ci0gICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfVFBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+dHhfY21kX3B0IDsKKwkvKiBJbml0aWFsaXplIHRoZSBUcmFuc21pdCBhbmQgUmVjZWl2ZSBQb2ludGVyICovCisJQVQ5MUNfQkFTRV9TUEktPlNQSV9SUFIgPSAodW5zaWduZWQgaW50KXBEZXNjLT5yeF9jbWRfcHQgOworCUFUOTFDX0JBU0VfU1BJLT5TUElfVFBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+dHhfY21kX3B0IDsKIAotICAgIAkvKiBJbnRpYWxpemUgdGhlIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovCi0gICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfUkNSID0gcERlc2MtPnJ4X2NtZF9zaXplOwotICAgIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1RDUiA9IHBEZXNjLT50eF9jbWRfc2l6ZTsKKwkvKiBJbnRpYWxpemUgdGhlIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovCisJQVQ5MUNfQkFTRV9TUEktPlNQSV9SQ1IgPSBwRGVzYy0+cnhfY21kX3NpemU7CisJQVQ5MUNfQkFTRV9TUEktPlNQSV9UQ1IgPSBwRGVzYy0+dHhfY21kX3NpemU7CiAKIAlpZiAoIHBEZXNjLT50eF9kYXRhX3NpemUgIT0gMCApIHsKLQkgICAJLyogSW5pdGlhbGl6ZSB0aGUgTmV4dCBUcmFuc21pdCBhbmQgTmV4dCBSZWNlaXZlIFBvaW50ZXIgKi8KLQkgICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfUk5QUiA9ICh1bnNpZ25lZCBpbnQpcERlc2MtPnJ4X2RhdGFfcHQgOworCQkvKiBJbml0aWFsaXplIHRoZSBOZXh0IFRyYW5zbWl0IGFuZCBOZXh0IFJlY2VpdmUgUG9pbnRlciAqLworCQlBVDkxQ19CQVNFX1NQSS0+U1BJX1JOUFIgPSAodW5zaWduZWQgaW50KXBEZXNjLT5yeF9kYXRhX3B0IDsKIAkJQVQ5MUNfQkFTRV9TUEktPlNQSV9UTlBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+dHhfZGF0YV9wdCA7CiAKIAkJLyogSW50aWFsaXplIHRoZSBOZXh0IFRyYW5zbWl0IGFuZCBOZXh0IFJlY2VpdmUgQ291bnRlcnMgKi8KIAkJQVQ5MUNfQkFTRV9TUEktPlNQSV9STkNSID0gcERlc2MtPnJ4X2RhdGFfc2l6ZSA7Ci0JIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1ROQ1IgPSBwRGVzYy0+dHhfZGF0YV9zaXplIDsKLSAgIAl9CisJCUFUOTFDX0JBU0VfU1BJLT5TUElfVE5DUiA9IHBEZXNjLT50eF9kYXRhX3NpemUgOworCX0KIAotICAgICAgICAvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLworCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCiAJcmVzZXRfdGltZXJfbWFza2VkKCk7CiAJdGltZW91dCA9IDA7CiAKIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1BUQ1IgPSBBVDkxQ19QRENfVFhURU4gKyBBVDkxQ19QRENfUlhURU47CiAJd2hpbGUoIShBVDkxQ19CQVNFX1NQSS0+U1BJX1NSICYgQVQ5MUNfU1BJX1JYQlVGRikgJiYgKCh0aW1lb3V0ID0gZ2V0X3RpbWVyX21hc2tlZCgpICkgPCBDRkdfU1BJX1dSSVRFX1RPVVQpKTsKLSAgIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1BUQ1IgPSBBVDkxQ19QRENfVFhURElTICsgQVQ5MUNfUERDX1JYVERJUzsKLSAgIAlwRGVzYy0+c3RhdGUgPSBJRExFOworCUFUOTFDX0JBU0VfU1BJLT5TUElfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVMgKyBBVDkxQ19QRENfUlhURElTOworCXBEZXNjLT5zdGF0ZSA9IElETEU7CiAKIAlpZiAodGltZW91dCA+PSBDRkdfU1BJX1dSSVRFX1RPVVQpewogCQlwcmludGYoIkVycm9yIFRpbWVvdXRcblxyIik7CkBAIC0xODEsMTIgKzE4MSwxMiBAQAogCXBEZXNjLT5jb21tYW5kWzFdID0gMDsKIAogCXBEZXNjLT5EYXRhRmxhc2hfc3RhdGUgID0gR0VUX1NUQVRVUzsKLSAgICAJcERlc2MtPnR4X2RhdGFfc2l6ZSAJPSAwIDsJLyogVHJhbnNtaXQgdGhlIGNvbW1hbmQgYW5kIHJlY2VpdmUgcmVzcG9uc2UgKi8KLSAgICAJcERlc2MtPnR4X2NtZF9wdCAJCT0gcERlc2MtPmNvbW1hbmQgOwotICAgIAlwRGVzYy0+cnhfY21kX3B0IAkJPSBwRGVzYy0+Y29tbWFuZCA7Ci0gICAgCXBEZXNjLT5yeF9jbWRfc2l6ZSAJCT0gMiA7Ci0gICAgCXBEZXNjLT50eF9jbWRfc2l6ZSAJCT0gMiA7Ci0gICAgCXN0YXR1cyA9IEFUOTFGX1NwaVdyaXRlIChwRGVzYyk7CisJcERlc2MtPnR4X2RhdGFfc2l6ZSAJPSAwIDsJLyogVHJhbnNtaXQgdGhlIGNvbW1hbmQgYW5kIHJlY2VpdmUgcmVzcG9uc2UgKi8KKwlwRGVzYy0+dHhfY21kX3B0IAkJPSBwRGVzYy0+Y29tbWFuZCA7CisJcERlc2MtPnJ4X2NtZF9wdCAJCT0gcERlc2MtPmNvbW1hbmQgOworCXBEZXNjLT5yeF9jbWRfc2l6ZSAJCT0gMiA7CisJcERlc2MtPnR4X2NtZF9zaXplIAkJPSAyIDsKKwlzdGF0dXMgPSBBVDkxRl9TcGlXcml0ZSAocERlc2MpOwogCiAJcERlc2MtPkRhdGFGbGFzaF9zdGF0ZSA9ICooICh1bnNpZ25lZCBjaGFyICopIChwRGVzYy0+cnhfY21kX3B0KSArMSk7CiAKQEAgLTIxNSw3ICsyMTUsNiBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRnVuY3Rpb24gTmFtZSAgICAgICA6IEFUOTFGX0RhdGFGbGFzaENvbnRpbnVvdXNSZWFkIAkJCQkqLwogLyogT2JqZWN0ICAgICAgICAgICAgICA6IENvbnRpbnVvdXMgc3RyZWFtIFJlYWQgCQkJCSovCkBAIC0yMjYsNyArMjI1LDcgQEAKIC8qIFJldHVybiB2YWx1ZQkJOiBTdGF0ZSBvZiB0aGUgZGF0YWZsYXNoCQkJCSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBBVDkxU19EYXRhRmxhc2hTdGF0dXMgQVQ5MUZfRGF0YUZsYXNoQ29udGludW91c1JlYWQgKAotIAlBVDkxUFNfRGF0YUZsYXNoIHBEYXRhRmxhc2gsCisJQVQ5MVBTX0RhdGFGbGFzaCBwRGF0YUZsYXNoLAogCWludCBzcmMsCiAJdW5zaWduZWQgY2hhciAqZGF0YUJ1ZmZlciwKIAlpbnQgc2l6ZVRvUmVhZCApCkBAIC0yNDUsNyArMjQ0LDYgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEZ1bmN0aW9uIE5hbWUgICAgICAgOiBBVDkxRl9EYXRhRmxhc2hQYWdlUGdtQnVmCQkJCSovCiAvKiBPYmplY3QgICAgICAgICAgICAgIDogTWFpbiBtZW1vcnkgcGFnZSBwcm9ncmFtIHRocm91Z2ggYnVmZmVyIDEgb3IgYnVmZmVyIDIJKi8KQEAgLTI4OSwxMyArMjg3LDEyIEBACiAJCXJldHVybiBEQVRBRkxBU0hfQkFEX0NPTU1BTkQ7CiAKIAkvKiBubyBkYXRhIHRvIHRyYW5zbWl0IG9yIHJlY2VpdmUgKi8KLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2RhdGFfc2l6ZSA9IDA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2RhdGFfc2l6ZSA9IDA7CiAKIAlyZXR1cm4oQVQ5MUZfRGF0YUZsYXNoU2VuZENvbW1hbmQgKHBEYXRhRmxhc2gsIEJ1ZmZlckNvbW1hbmQsIDQsIHBhZ2UqcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSkpOwogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb24gTmFtZSAgICAgICA6IEFUOTFGX0RhdGFGbGFzaFdyaXRlQnVmZmVyCQkJCSovCiAvKiBPYmplY3QgICAgICAgICAgICAgIDogV3JpdGUgZGF0YSB0byB0aGUgaW50ZXJuYWwgc3JhbSBidWZmZXIgMSBvciAyCQkqLwpAQCAtMzI0LDI0ICszMjEsMjQgQEAKIAlpZiAoIChwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+c3RhdGUpICAhPSBJRExFKQogCQlyZXR1cm4gREFUQUZMQVNIX0JVU1k7CiAKLSAgICAJLyogU2VuZCBmaXJzdCBXcml0ZSBDb21tYW5kICovCi0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5jb21tYW5kWzBdID0gQnVmZmVyQ29tbWFuZDsKKwkvKiBTZW5kIGZpcnN0IFdyaXRlIENvbW1hbmQgKi8KKwlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZFswXSA9IEJ1ZmZlckNvbW1hbmQ7CiAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmRbMV0gPSAwOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHVuc2lnbmVkIGludCkoYnVmZmVyQWRkcmVzcyAmICBwRGF0YUZsYXNoLT5wRGV2aWNlLT5ieXRlX21hc2spKSA+PiA4KSA7Ci0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5jb21tYW5kWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh1bnNpZ25lZCBpbnQpYnVmZmVyQWRkcmVzcyAgJiAweDAwRkYpIDsKKwlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHVuc2lnbmVkIGludCkoYnVmZmVyQWRkcmVzcyAmICBwRGF0YUZsYXNoLT5wRGV2aWNlLT5ieXRlX21hc2spKSA+PiA4KSA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmRbM10gPSAodW5zaWduZWQgY2hhcikoKHVuc2lnbmVkIGludClidWZmZXJBZGRyZXNzICAmIDB4MDBGRikgOwogCiAKLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2NtZF9wdCAJID0gcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmQgOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+dHhfY21kX3NpemUgPSA0IDsKLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnJ4X2NtZF9wdCAJID0gcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmQgOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+cnhfY21kX3NpemUgPSA0IDsKKwlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+dHhfY21kX3B0IAkgPSBwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZCA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2NtZF9zaXplID0gNCA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnJ4X2NtZF9wdCAJID0gcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmQgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9jbWRfc2l6ZSA9IDQgOwogCi0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9kYXRhX3B0IAk9IGRhdGFCdWZmZXIgOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+dHhfZGF0YV9wdCAJPSBkYXRhQnVmZmVyIDsKLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnJ4X2RhdGFfc2l6ZSAJPSBTaXplVG9Xcml0ZSA7Ci0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT50eF9kYXRhX3NpemUgCT0gU2l6ZVRvV3JpdGUgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9kYXRhX3B0IAk9IGRhdGFCdWZmZXIgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT50eF9kYXRhX3B0IAk9IGRhdGFCdWZmZXIgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9kYXRhX3NpemUgCT0gU2l6ZVRvV3JpdGUgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT50eF9kYXRhX3NpemUgCT0gU2l6ZVRvV3JpdGUgOwogCi0gICAgCXJldHVybiBBVDkxRl9TcGlXcml0ZShwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYyk7CisJcmV0dXJuIEFUOTFGX1NwaVdyaXRlKHBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjKTsKIH0KIAogCkBAIC00MDQsNyArNDAxLDYgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEZ1bmN0aW9uIE5hbWUgICAgICAgOiBBVDkxRl9EYXRhRmxhc2hXcml0ZV9PdmVybG9hZGVkCQkJKi8KIC8qIE9iamVjdCAgICAgICAgICAgICAgOgkJCQkJCQkqLwpAQCAtNDIyLDExICs0MTgsMTEgQEAKIAogCUFUOTFGX1NwaUVuYWJsZShwRGF0YUZsYXNoLT5wRGV2aWNlLT5jcyk7CiAKLSAgICAJaWYgKCAoZGVzdCArIHNpemUpID4gKHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUgKiAocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfbnVtYmVyKSkpCisJaWYgKCAoZGVzdCArIHNpemUpID4gKHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUgKiAocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfbnVtYmVyKSkpCiAJCXJldHVybiBEQVRBRkxBU0hfTUVNT1JZX09WRVJGTE9XOwogCi0gICAgCS8qIElmIGRlc3RpbmF0aW9uIGRvZXMgbm90IGZpdCBhIHBhZ2Ugc3RhcnQgYWRkcmVzcyAqLwotICAgIAlpZiAoKGRlc3QgJSAoKHVuc2lnbmVkIGludCkocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSkpKSAgIT0gMCApIHsKKwkvKiBJZiBkZXN0aW5hdGlvbiBkb2VzIG5vdCBmaXQgYSBwYWdlIHN0YXJ0IGFkZHJlc3MgKi8KKwlpZiAoKGRlc3QgJSAoKHVuc2lnbmVkIGludCkocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSkpKSAgIT0gMCApIHsKIAkJbGVuZ3RoID0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSAtIChkZXN0ICUgKCh1bnNpZ25lZCBpbnQpKHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUpKSk7CiAKIAkJaWYgKHNpemUgPCBsZW5ndGgpCkBAIC00MzgsMTIgKzQzNCwxMiBAQAogCQlBVDkxRl9EYXRhRmxhc2hXYWl0UmVhZHkocERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MsIDEwMDApOwogCiAJCS8qIFVwZGF0ZSBzaXplLCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzICovCi0gICAgICAgIAlzaXplIC09IGxlbmd0aDsKLSAgICAgICAgCWRlc3QgKz0gbGVuZ3RoOwotICAgICAgICAJc3JjICs9IGxlbmd0aDsKLSAgICAJfQorCQlzaXplIC09IGxlbmd0aDsKKwkJZGVzdCArPSBsZW5ndGg7CisJCXNyYyArPSBsZW5ndGg7CisJfQogCi0gICAgCXdoaWxlICgoIHNpemUgLSBwRGF0YUZsYXNoLT5wRGV2aWNlLT5wYWdlc19zaXplICkgPj0gMCApIHsKKwl3aGlsZSAoKCBzaXplIC0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSApID49IDAgKSB7CiAJCS8qIHByb2dyYW0gZGF0YWZsYXNoIHBhZ2UgKi8KIAkJaWYoIUFUOTFGX0RhdGFGbGFzaFBhZ2VQZ21CdWYocERhdGFGbGFzaCwgc3JjLCBkZXN0LCBwRGF0YUZsYXNoLT5wRGV2aWNlLT5wYWdlc19zaXplICkpCiAJCQlyZXR1cm4gREFUQUZMQVNIX0VSUk9SOwpAQCAtNDUxLDIwICs0NDcsMjAgQEAKIAkJQVQ5MUZfRGF0YUZsYXNoV2FpdFJlYWR5KHBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLCAxMDAwKTsKIAogCQkvKiBVcGRhdGUgc2l6ZSwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycyAqLwotICAgICAgICAJc2l6ZSAtPSBwRGF0YUZsYXNoLT5wRGV2aWNlLT5wYWdlc19zaXplIDsKLSAgICAgICAgCWRlc3QgKz0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7Ci0gICAgICAgIAlzcmMgICs9IHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUgOwotICAgIAl9CisJCXNpemUgLT0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7CisJCWRlc3QgKz0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7CisJCXNyYyAgKz0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7CisJfQogCi0gICAgCS8qIElmIHN0aWxsIHNvbWUgYnl0ZXMgdG8gcmVhZCAqLwotICAgIAlpZiAoIHNpemUgPiAwICkgeworCS8qIElmIHN0aWxsIHNvbWUgYnl0ZXMgdG8gcmVhZCAqLworCWlmICggc2l6ZSA+IDAgKSB7CiAJCS8qIHByb2dyYW0gZGF0YWZsYXNoIHBhZ2UgKi8KIAkJaWYoIUFUOTFGX1BhcnRpYWxQYWdlV3JpdGUocERhdGFGbGFzaCwgc3JjLCBkZXN0LCBzaXplKSApCiAJCQlyZXR1cm4gREFUQUZMQVNIX0VSUk9SOwogCiAJCUFUOTFGX0RhdGFGbGFzaFdhaXRSZWFkeShwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYywgMTAwMCk7CiAJfQotICAgIAlyZXR1cm4gREFUQUZMQVNIX09LOworCXJldHVybiBEQVRBRkxBU0hfT0s7CiB9CiAKIApAQCAtNTAxLDcgKzQ5Nyw3IEBACiAJCWJ1ZmZlciArPSBTaXplVG9SZWFkOwogCX0KIAotICAgCXJldHVybiBEQVRBRkxBU0hfT0s7CisJcmV0dXJuIERBVEFGTEFTSF9PSzsKIH0KIAogCkBAIC01MTQsOCArNTEwLDggQEAKIGludCBBVDkxRl9EYXRhZmxhc2hQcm9iZShpbnQgY3MsIEFUOTFQU19EYXRhZmxhc2hEZXNjIHBEZXNjKQogewogCUFUOTFGX1NwaUVuYWJsZShjcyk7Ci0gICAJQVQ5MUZfRGF0YUZsYXNoR2V0U3RhdHVzKHBEZXNjKTsKLSAgIAlyZXR1cm4oKHBEZXNjLT5jb21tYW5kWzFdID09IDB4RkYpPyAwOiBwRGVzYy0+Y29tbWFuZFsxXSAmIDB4M0MpOworCUFUOTFGX0RhdGFGbGFzaEdldFN0YXR1cyhwRGVzYyk7CisJcmV0dXJuKChwRGVzYy0+Y29tbWFuZFsxXSA9PSAweEZGKT8gMDogcERlc2MtPmNvbW1hbmRbMV0gJiAweDNDKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2V0aGVyLmMgYi9jcHUvYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2V0aGVyLmMKaW5kZXggNmU0NDE1MC4uNDdiNTdkYSAxMDA2NDQKLS0tIGEvY3B1L2F0OTFybTkyMDAvYXQ5MXJtOTIwMF9ldGhlci5jCisrKyBiL2NwdS9hdDkxcm05MjAwL2F0OTFybTkyMDBfZXRoZXIuYwpAQCAtNjksMTUgKzY5LDE1IEBACiAvKiogZnVuY3Rpb25zIHRvIGludGVyZmFjZSB0aGUgREFWSUNPTSAxMC8xMDBNYnBzIGV0aGVybmV0IHBoeSAqKioqKioqKioqLwogCiAvKgotICogTmFtZTogCisgKiBOYW1lOgogICoJZG05MTYxX0lzUGh5Q29ubmVjdGVkCi0gKiBEZXNjcmlwdGlvbjogCisgKiBEZXNjcmlwdGlvbjoKICAqCVJlYWRzIHRoZSAyIFBIWSBJRCByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglwX21hYyAtIHBvaW50ZXIgdG8gQVQ5MVNfRU1BQyBzdHJ1Y3QKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgaWQgcmVhZCBzdWNjZXNzZnVsbHkKLSAqCUZBTFNFLSBpZiBlcnJvciAKKyAqCUZBTFNFLSBpZiBlcnJvcgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRtOTE2MV9Jc1BoeUNvbm5lY3RlZCAoQVQ5MVBTX0VNQUMgcF9tYWMpCiB7CkBAIC05NiwxNCArOTYsMTQgQEAKIH0KIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWRtOTE2MV9HZXRMaW5rU3BlZWQKLSAqIERlc2NyaXB0aW9uOiAKLSAqCUxpbmsgcGFyYWxsZWwgZGV0ZWN0aW9uIHN0YXR1cyBvZiBNQUMgaXMgY2hlY2tlZCBhbmQgc2V0IGluIHRoZSAKKyAqIERlc2NyaXB0aW9uOgorICoJTGluayBwYXJhbGxlbCBkZXRlY3Rpb24gc3RhdHVzIG9mIE1BQyBpcyBjaGVja2VkIGFuZCBzZXQgaW4gdGhlCiAgKglNQUMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czogCi0gKglwX21hYyAtIHBvaW50ZXIgdG8gTUFDIAotICogUmV0dXJuIHZhbHVlOiAKKyAqIEFyZ3VtZW50czoKKyAqCXBfbWFjIC0gcG9pbnRlciB0byBNQUMKKyAqIFJldHVybiB2YWx1ZToKICAqCVRSVUUgLSBpZiBsaW5rIHN0YXR1cyBzZXQgc3VjY2VzZnVsbHkKICAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAogICovCkBAIC0xNTIsMTQgKzE1MiwxNCBAQAogCiAKIC8qCi0gKiBOYW1lOiAKKyAqIE5hbWU6CiAgKglkbTkxNjFfSW5pdFBoeQotICogRGVzY3JpcHRpb246IAotICoJTUFDIHN0YXJ0cyBjaGVja2luZyBpdHMgbGluayBieSB1c2luZyBwYXJhbGxlbCBkZXRlY3Rpb24gYW5kIAorICogRGVzY3JpcHRpb246CisgKglNQUMgc3RhcnRzIGNoZWNraW5nIGl0cyBsaW5rIGJ5IHVzaW5nIHBhcmFsbGVsIGRldGVjdGlvbiBhbmQKICAqCUF1dG9uZWdvdGlhdGlvbiBhbmQgdGhlIHNhbWUgaXMgc2V0IGluIHRoZSBNQUMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglwX21hYyAtIHBvaW50ZXIgdG8gc3RydWN0IEFUOTFTX0VNQUMKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc2Z1bGx5CiAgKglGQUxTRSAtIGlmIGxpbmsgc3RhdHVzIG5vdCBzZXQKICAqLwpAQCAtMTg4LDE0ICsxODgsMTQgQEAKIAogCiAvKgotICogTmFtZTogCisgKiBOYW1lOgogICoJZG05MTYxX0F1dG9OZWdvdGlhdGUKLSAqIERlc2NyaXB0aW9uOiAKLSAqCU1BQyBBdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBwYXJ0bmVyIHN0YXR1cyBvZiBzYW1lIGlzIHNldCBpbiB0aGUgCisgKiBEZXNjcmlwdGlvbjoKKyAqCU1BQyBBdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBwYXJ0bmVyIHN0YXR1cyBvZiBzYW1lIGlzIHNldCBpbiB0aGUKICAqCU1BQyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogQXJndW1lbnRzOiAKKyAqIEFyZ3VtZW50czoKICAqCWRldiAtIHBvaW50ZXIgdG8gc3RydWN0IG5ldF9kZXZpY2UKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc3NmdWxseQogICoJRkFMU0UgLSBpZiBsaW5rIHN0YXR1cyBub3Qgc2V0CiAgKi8KQEAgLTI1OSwxNyArMjU5LDE1IEBACiB9CiAKIAotCi0KIC8qKioqKioqKioqKiBFTUFDIFBoeSBsYXllciBNYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDBfRW1hY0VuYWJsZU1ESU8KLSAqIERlc2NyaXB0aW9uOiAKKyAqIERlc2NyaXB0aW9uOgogICoJRW5hYmxlcyB0aGUgTURJTyBiaXQgaW4gTUFDIGNvbnRyb2wgcmVnaXN0ZXIKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglwX21hYyAtIHBvaW50ZXIgdG8gc3RydWN0IEFUOTFTX0VNQUMKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglub25lCiAgKi8KIHN0YXRpYyB2b2lkIGF0OTFybTkyMDBfRW1hY0VuYWJsZU1ESU8gKEFUOTFQU19FTUFDIHBfbWFjKQpAQCAtMjc5LDEzICsyNzcsMTMgQEAKIH0KIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDBfRW1hY0Rpc2FibGVNRElPCi0gKiBEZXNjcmlwdGlvbjogCisgKiBEZXNjcmlwdGlvbjoKICAqCURpc2FibGVzIHRoZSBNRElPIGJpdCBpbiBNQUMgY29udHJvbCByZWdpc3RlcgotICogQXJndW1lbnRzOiAKKyAqIEFyZ3VtZW50czoKICAqCXBfbWFjIC0gcG9pbnRlciB0byBzdHJ1Y3QgQVQ5MVNfRU1BQwotICogUmV0dXJuIHZhbHVlOiAKKyAqIFJldHVybiB2YWx1ZToKICAqCW5vbmUKICAqLwogc3RhdGljIHZvaWQgYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKEFUOTFQU19FTUFDIHBfbWFjKQpAQCAtMjk2LDE1ICsyOTQsMTUgQEAKIAogCiAvKgotICogTmFtZTogCisgKiBOYW1lOgogICoJYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeQotICogRGVzY3JpcHRpb246IAorICogRGVzY3JpcHRpb246CiAgKglSZWFkcyBkYXRhIGZyb20gdGhlIFBIWSByZWdpc3RlcgotICogQXJndW1lbnRzOiAKKyAqIEFyZ3VtZW50czoKICAqCWRldiAtIHBvaW50ZXIgdG8gc3RydWN0IG5ldF9kZXZpY2UKICAqCVJlZ2lzdGVyQWRkcmVzcyAtIHVuc2lnbmVkIGNoYXIKLSAqIAlwSW5wdXQgLSBwb2ludGVyIHRvIHZhbHVlIHJlYWQgZnJvbSByZWdpc3RlciAKLSAqIFJldHVybiB2YWx1ZTogCisgKiAJcElucHV0IC0gcG9pbnRlciB0byB2YWx1ZSByZWFkIGZyb20gcmVnaXN0ZXIKKyAqIFJldHVybiB2YWx1ZToKICAqCVRSVUUgLSBpZiBkYXRhIHJlYWQgc3VjY2Vzc2Z1bGx5CiAgKi8KIHN0YXRpYyBVQ0hBUiBhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChBVDkxUFNfRU1BQyBwX21hYywKQEAgLTMyNCwxNSArMzIyLDE1IEBACiAKIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5Ci0gKiBEZXNjcmlwdGlvbjogCisgKiBEZXNjcmlwdGlvbjoKICAqCVdyaXRlcyBkYXRhIHRvIHRoZSBQSFkgcmVnaXN0ZXIKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglkZXYgLSBwb2ludGVyIHRvIHN0cnVjdCBuZXRfZGV2aWNlCiAgKglSZWdpc3RlckFkZHJlc3MgLSB1bnNpZ25lZCBjaGFyCi0gKiAJcE91dHB1dCAtIHBvaW50ZXIgdG8gdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgcmVnaXN0ZXIgCi0gKiBSZXR1cm4gdmFsdWU6IAorICogCXBPdXRwdXQgLSBwb2ludGVyIHRvIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIHJlZ2lzdGVyCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgZGF0YSByZWFkIHN1Y2Nlc3NmdWxseQogICovCiBzdGF0aWMgVUNIQVIgYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkgKEFUOTFQU19FTUFDIHBfbWFjLApAQCAtMzQ5LDEzICszNDcsMTMgQEAKIH0KIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDAwX0dldFBoeUludGVyZmFjZQotICogRGVzY3JpcHRpb246IAotICoJSW5pdGlhbGlzZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byB0aGUgUEhZIAotICogQXJndW1lbnRzOiAKKyAqIERlc2NyaXB0aW9uOgorICoJSW5pdGlhbGlzZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byB0aGUgUEhZCisgKiBBcmd1bWVudHM6CiAgKglOb25lCi0gKiBSZXR1cm4gdmFsdWU6IAorICogUmV0dXJuIHZhbHVlOgogICoJTm9uZQogICovCiB2b2lkIGF0OTFybTkyMDAwX0dldFBoeUludGVyZmFjZSAodm9pZCkKZGlmZiAtLWdpdCBhL2NwdS9hdDkxcm05MjAwL2NwdS5jIGIvY3B1L2F0OTFybTkyMDAvY3B1LmMKaW5kZXggYWQzY2QxMy4uMjYyY2EzNCAxMDA2NDQKLS0tIGEvY3B1L2F0OTFybTkyMDAvY3B1LmMKKysrIGIvY3B1L2F0OTFybTkyMDAvY3B1LmMKQEAgLTU0LDcgKzU0LDcgQEAKIHsKICAgICAvKnByaW50Zigid3JpdGUgJTA4bHggdG8gcDE1L2MxXG4iLCB2YWx1ZSk7ICovCiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCi0gICAgICAgICJtY3IgICAgIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCAgIEAgd3JpdGUgaXQgYmFja1xuIgorCSJtY3IgICAgIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCAgIEAgd3JpdGUgaXQgYmFja1xuIgogCTogIj1yIiAodmFsdWUpCiAJOgogCTogIm1lbW9yeSIpOwpAQCAtODYsNyArODYsNyBAQAogICAgICAqLwogI2lmZGVmIENPTkZJR19VU0VfSVJRCiAgICAgSVJRX1NUQUNLX1NUQVJUID0gX2FybWJvb3RfZW5kICsKLSAgICAgIAkJCUNPTkZJR19TVEFDS1NJWkUgKyBDT05GSUdfU1RBQ0tTSVpFX0lSUSAtIDQ7CisJCQlDT05GSUdfU1RBQ0tTSVpFICsgQ09ORklHX1NUQUNLU0laRV9JUlEgLSA0OwogICAgIEZJUV9TVEFDS19TVEFSVCA9IElSUV9TVEFDS19TVEFSVCArIENPTkZJR19TVEFDS1NJWkVfRklROwogICAgIF9hcm1ib290X3JlYWxfZW5kID0gRklRX1NUQUNLX1NUQVJUICsgNDsKICNlbHNlCmRpZmYgLS1naXQgYS9jcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMgYi9jcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMKaW5kZXggZDljN2M1NS4uNDA3ZGY5YyAxMDA2NDQKLS0tIGEvY3B1L2F0OTFybTkyMDAvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9hdDkxcm05MjAwL2ludGVycnVwdHMuYwpAQCAtNDUsNyArNDUsNiBAQAogQVQ5MVBTX1RDIHRtcjsKIAogCi0KIHZvaWQgZW5hYmxlX2ludGVycnVwdHMgKHZvaWQpCiB7CiAgICAgcmV0dXJuOwpAQCAtMjA5LDExICsyMDgsMTEgQEAKICAgICB1bG9uZyBub3cgPSBSRUFEX1RJTUVSOwogICAgIGlmIChub3cgPj0gbGFzdGluYykKICAgICB7Ci0gICAgICAgIC8qIG5vcm1hbCBtb2RlICovCi0gICAgICAgIHRpbWVzdGFtcCArPSBub3cgLSBsYXN0aW5jOworCS8qIG5vcm1hbCBtb2RlICovCisJdGltZXN0YW1wICs9IG5vdyAtIGxhc3RpbmM7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogd2UgaGF2ZSBhbiBvdmVyZmxvdyAuLi4gKi8KLSAgICAgICAgdGltZXN0YW1wICs9IG5vdyArIFRJTUVSX0xPQURfVkFMIC0gbGFzdGluYzsKKwkvKiB3ZSBoYXZlIGFuIG92ZXJmbG93IC4uLiAqLworCXRpbWVzdGFtcCArPSBub3cgKyBUSU1FUl9MT0FEX1ZBTCAtIGxhc3RpbmM7CiAgICAgfQogICAgIGxhc3RpbmMgPSBub3c7CiAKQEAgLTIzMyw1ICsyMzIsMyBAQAogICAgIHdoaWxlKGdldF90aW1lcl9tYXNrZWQoKSA8IHRtbyk7CiAgICAgICAvKk5PUCovOwogfQotCi0KZGlmZiAtLWdpdCBhL2NwdS9hdDkxcm05MjAwL3N0YXJ0LlMgYi9jcHUvYXQ5MXJtOTIwMC9zdGFydC5TCmluZGV4IDliM2U3YWEuLmU5NTVkNDMgMTAwNjQ0Ci0tLSBhL2NwdS9hdDkxcm05MjAwL3N0YXJ0LlMKKysrIGIvY3B1L2F0OTFybTkyMDAvc3RhcnQuUwpAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAidmVyc2lvbi5oIgogCkBAIC0xMjQsMTIgKzEyMywxMiBAQAogCiByZXNldDoKIAkvKgotICAgICAgICAgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCi0gICAgICAgICAqLwotICAgICAgICBtcnMgICAgIHIwLGNwc3IKLSAgICAgICAgYmljICAgICByMCxyMCwjMHgxZgotICAgICAgICBvcnIgICAgIHIwLHIwLCMweDEzCi0gICAgICAgIG1zciAgICAgY3BzcixyMAorCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKKwkgKi8KKwltcnMgICAgIHIwLGNwc3IKKwliaWMgICAgIHIwLHIwLCMweDFmCisJb3JyICAgICByMCxyMCwjMHgxMworCW1zciAgICAgY3BzcixyMAogCiAJLyoKIAkgKiByZWxvY2F0ZSBleGVjZXB0aW9uIHRhYmxlCkBAIC0xNDQsMTggKzE0MywxOCBAQAogCWJuZQljb3B5ZXgKIAogCS8qCi0gICAgICAgICAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKLSAgICAgICAgICogbm90IHdoZW4gYm9vdGluZyBmcm9tIHJhbSEKLSAgICAgICAgICovCisJICogd2UgZG8gc3lzLWNyaXRpY2FsIGluaXRzIG9ubHkgYXQgcmVib290LAorCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCisJICovCiAjaWZkZWYgQ09ORklHX0lOSVRfQ1JJVElDQUwKLSAgICAgICAgYmwgICAgICBjcHVfaW5pdF9jcml0CisJYmwgICAgICBjcHVfaW5pdF9jcml0CiAjZW5kaWYKIAotICAgICAgICAvKiBzZXQgdXAgdGhlIHN0YWNrICovCi0gICAgICAgIGxkciAgICAgcjAsIF9hcm1ib290X2VuZAotICAgICAgICBhZGQgICAgIHIwLCByMCwgI0NPTkZJR19TVEFDS1NJWkUKLSAgICAgICAgc3ViICAgICBzcCwgcjAsICMxMiAgICAgICAgICAgICAvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAqLwotICAgICAgICBsZHIgcGMsX3N0YXJ0X2FybWJvb3QKKwkvKiBzZXQgdXAgdGhlIHN0YWNrICovCisJbGRyICAgICByMCwgX2FybWJvb3RfZW5kCisJYWRkICAgICByMCwgcjAsICNDT05GSUdfU1RBQ0tTSVpFCisJc3ViICAgICBzcCwgcjAsICMxMiAgICAgICAgICAgICAvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAqLworCWxkciBwYyxfc3RhcnRfYXJtYm9vdAogCiBfc3RhcnRfYXJtYm9vdDogLndvcmQgc3RhcnRfYXJtYm9vdAogCkBAIC0xNzIsOCArMTcxLDYgQEAKIAltb3YJcGMsIGxyCiAKIAotCi0KIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L01ha2VmaWxlIGIvY3B1L2kzODYvTWFrZWZpbGUKaW5kZXggNzA2N2EwNi4uYzQ0NDEyYSAxMDA2NDQKLS0tIGEvY3B1L2kzODYvTWFrZWZpbGUKKysrIGIvY3B1L2kzODYvTWFrZWZpbGUKQEAgLTI1LDEwICsyNSwxMCBAQAogCiBMSUIJPSBsaWIkKENQVSkuYQogCi1TVEFSVAk9IHN0YXJ0Lm8gc3RhcnQxNi5vIHJlc2V0Lm8gCi1DT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubyB0aW1lci5vIHNjNTIwLm8gCitTVEFSVAk9IHN0YXJ0Lm8gc3RhcnQxNi5vIHJlc2V0Lm8KK0NPQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vIHRpbWVyLm8gc2M1MjAubwogQU9CSlMJPSBzYzUyMF9hc20ubwotCQorCiBhbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChDT0JKUykgJChBT0JKUykKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L2NvbmZpZy5tayBiL2NwdS9pMzg2L2NvbmZpZy5tawppbmRleCBjN2NmMTUxLi4xNmExNjBkIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9jb25maWcubWsKKysrIGIvY3B1L2kzODYvY29uZmlnLm1rCkBAIC0yMSw2ICsyMSw2IEBACiAjIE1BIDAyMTExLTEzMDcgVVNBCiAjCiAKLVBMQVRGT1JNX1JFTEZMQUdTICs9IAorUExBVEZPUk1fUkVMRkxBR1MgKz0KIAogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWkzODYgLVdlcnJvcgpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvY3B1LmMgYi9jcHUvaTM4Ni9jcHUuYwppbmRleCAzYzY3YzEyLi5mMjRlNGJhIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9jcHUuYworKysgYi9jcHUvaTM4Ni9jcHUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CkBAIC00MCwxMSArNDAsMTEgQEAKIHsKIAkvKiBpbml0aWFsaXplIEZQVSwgcmVzZXQgRU0sIHNldCBNUCBhbmQgTkUgKi8KIAlhc20gKCJmbmluaXRcbiIgXAotICAgICAgICAgICAgICJtb3ZsICVjcjAsICVlYXhcbiIgXAotICAgICAgICAgICAgICJhbmRsICR+MHg0LCAlZWF4XG4iIFwKLSAgICAgICAgICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCi0gICAgICAgICAgICAgIm1vdmwgJWVheCwgJWNyMFxuIiApOwotCQorCSAgICAgIm1vdmwgJWNyMCwgJWVheFxuIiBcCisJICAgICAiYW5kbCAkfjB4NCwgJWVheFxuIiBcCisJICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCisJICAgICAibW92bCAlZWF4LCAlY3IwXG4iICk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjYsNCArNjYsMyBAQAogCWFzbSgid2JpbnZkXG4iKTsKIAlyZXR1cm47CiB9Ci0KZGlmZiAtLWdpdCBhL2NwdS9pMzg2L2ludGVycnVwdHMuYyBiL2NwdS9pMzg2L2ludGVycnVwdHMuYwppbmRleCA2MTRkNDA4Li44NDgyNWFlIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2kzODYvaW50ZXJydXB0cy5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL2libXBjLmg+CiAKIAotCiBzdHJ1Y3QgaWR0X2VudHJ5IHsKIAl1MTYJYmFzZV9sb3c7CiAJdTE2CXNlbGVjdG9yOwpAQCAtNDQsNyArNDMsNyBAQAogCiAjZGVmaW5lIE1BWF9JUlEgMTYKIAotdHlwZWRlZiBzdHJ1Y3QgaXJxX2hhbmRsZXIgeyAKK3R5cGVkZWYgc3RydWN0IGlycV9oYW5kbGVyIHsKIAlzdHJ1Y3QgaXJxX2hhbmRsZXIgKm5leHQ7CiAJaW50ZXJydXB0X2hhbmRsZXJfdCogaXNyX2Z1bmM7CiAJdm9pZCAqaXNyX2RhdGE7CkBAIC02MCwyNyArNTksMjYgQEAKIHN0YXRpYyBpcnFfZGVzY190IGlycV90YWJsZVtNQVhfSVJRXTsKIAogCi0KIGFzbSgiLmdsb2JsIHN5c2NhbGxfZW50cnlcbiIgXAotICAgICAgICAic3lzY2FsbF9lbnRyeTpcbiIgXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIHRocm93IGF3YXkgdGhlIHJldHVybiBhZGRyZXNzLCBmbGFncyAgKi8gXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIGFuZCBzZWdtZW50IHRoYXQgdGhlIElOVCBpbnN0cnVjdGlvbiBwdXNoZWQgKi8gXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIG9uIHRvIHRoZSBzdGFjayAqLyBcCi0gICAgICAgICJtb3ZsICAgJWVheCwgJWVjeFxuIiAgLyogbG9hZCB0aGUgc3lzY2FsbCBuciBhcmd1bWVudCovIFwKLSAgICAgICAgIm1vdmwgICBzeXNjYWxsX3RibCwgJWVheFxuIiAvKiBsb2FkIHN0YXJ0IG9mIHN5c2NhbGwgdGFibGUgKi8gXAotICAgICAgICAiY21wbCAgICQoMTEtMSksICVlY3hcbiIgIC8qIEZpeE1lOiBmaW5kIGEgd2F5IHRvIHVzZSBOUl9TWVNDQUxMUyBtYWNybyBoZXJlICovIFwKLSAgICAgICAgImphICAgICBiYWRfc3lzY2FsbFxuIiBcCi0gICAgICAgICJtb3ZsICAgKCVlYXgsICVlY3gsIDQpLCAlZWF4XG4iIC8qIGxvYWQgdGhlIGhhbmRsZXIgb2YgdGhlIHN5c2NhbGwqLyBcCi0gICAgICAgICJ0ZXN0ICAgJWVheCwgJWVheFxuIiAvKiB0ZXN0IGZvciBudWxsICovIFwKLSAgICAgICAgImplICAgICBiYWRfc3lzY2FsbFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVjeFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVieFxuIiBcCi0gICAgICAgICJzdGkgICAgXG4iIFwKLSAgICAgICAgImptcCAgICAqJWVheFxuIiBcCisJInN5c2NhbGxfZW50cnk6XG4iIFwKKwkicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIHRocm93IGF3YXkgdGhlIHJldHVybiBhZGRyZXNzLCBmbGFncyAgKi8gXAorCSJwb3BsICAgJWVieFxuIiAgICAgICAgLyogYW5kIHNlZ21lbnQgdGhhdCB0aGUgSU5UIGluc3RydWN0aW9uIHB1c2hlZCAqLyBcCisJInBvcGwgICAlZWJ4XG4iICAgICAgICAvKiBvbiB0byB0aGUgc3RhY2sgKi8gXAorCSJtb3ZsICAgJWVheCwgJWVjeFxuIiAgLyogbG9hZCB0aGUgc3lzY2FsbCBuciBhcmd1bWVudCovIFwKKwkibW92bCAgIHN5c2NhbGxfdGJsLCAlZWF4XG4iIC8qIGxvYWQgc3RhcnQgb2Ygc3lzY2FsbCB0YWJsZSAqLyBcCisJImNtcGwgICAkKDExLTEpLCAlZWN4XG4iICAvKiBGaXhNZTogZmluZCBhIHdheSB0byB1c2UgTlJfU1lTQ0FMTFMgbWFjcm8gaGVyZSAqLyBcCisJImphICAgICBiYWRfc3lzY2FsbFxuIiBcCisJIm1vdmwgICAoJWVheCwgJWVjeCwgNCksICVlYXhcbiIgLyogbG9hZCB0aGUgaGFuZGxlciBvZiB0aGUgc3lzY2FsbCovIFwKKwkidGVzdCAgICVlYXgsICVlYXhcbiIgLyogdGVzdCBmb3IgbnVsbCAqLyBcCisJImplICAgICBiYWRfc3lzY2FsbFxuIiBcCisJInBvcGwgICAlZWN4XG4iIFwKKwkicG9wbCAgICVlYnhcbiIgXAorCSJzdGkgICAgXG4iIFwKKwkiam1wICAgIColZWF4XG4iIFwKICJiYWRfc3lzY2FsbDogbW92bCAkMHhmZmZmZmZmZiwgJWVheFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVjeFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVieFxuIiBcCi0gICAgICAgICJyZXQiKTsKKwkicG9wbCAgICVlY3hcbiIgXAorCSJwb3BsICAgJWVieFxuIiBcCisJInJldCIpOwogCiB2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc3lzY2FsbF9lbnRyeSh2b2lkKTsKIApAQCAtMTA0LDcgKzEwMiw3IEBACiAJCSAgICAicHVzaGEgXG4iIFwKIAkJICAgICJwdXNobCAkIiN4IlxuIiBcCiAJCSAgICAicHVzaGwgJGlycV9yZXR1cm5cbiIgXAotICAgICAgICAgICAgICAgICAgICAiam1wICAgZG9faXJxXG4iKTsgXAorCQkgICAgImptcCAgIGRvX2lycVxuIik7IFwKIAl2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaXJxXyMjeCh2b2lkKQogCiAjZGVmaW5lIERFQ0xBUkVfRVhDRVBUSU9OKHgsIGYpIFwKQEAgLTE3MywyMCArMTcxLDIwIEBACiBERUNMQVJFX0lOVEVSUlVQVCgxMyk7CiBERUNMQVJFX0lOVEVSUlVQVCgxNCk7CiBERUNMQVJFX0lOVEVSUlVQVCgxNSk7Ci0gIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlZmF1bHRfaXNyKHZvaWQpOyAKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlZmF1bHRfaXNyKHZvaWQpOwogYXNtICgiZGVmYXVsdF9pc3I6IGlyZXRcbiIpOwogCi12b2lkIGRpc2FibGVfaXJxKGludCBpcnEpIAordm9pZCBkaXNhYmxlX2lycShpbnQgaXJxKQogewogCWlmIChpcnEgPj0gTUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQogCWlycV90YWJsZVtpcnFdLnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCisKIH0KIAotdm9pZCBlbmFibGVfaXJxKGludCBpcnEpIAordm9pZCBlbmFibGVfaXJxKGludCBpcnEpCiB7CiAJaWYgKGlycSA+PSBNQVhfSVJRKSB7CiAJCXJldHVybjsKQEAgLTE5OCw3ICsxOTYsNyBAQAogc3RhdGljIHZvaWQgdW5tYXNrX2lycShpbnQgaXJxKQogewogCWludCBpbXJfcG9ydDsKLQkKKwogCWlmIChpcnEgPj0gTUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQpAQCAtMjA3LDcgKzIwNSw3IEBACiAJfSBlbHNlIHsKIAkJaW1yX3BvcnQgPSBNQVNURVJfUElDICsgSU1SOwogCX0KLQkKKwogCW91dGIoaW5iKGltcl9wb3J0KSZ+KDE8PChpcnEmNykpLCBpbXJfcG9ydCk7CiB9CiAKQEAgLTIxNiw3ICsyMTQsNyBAQAogc3RhdGljIHZvaWQgbWFza19pcnEoaW50IGlycSkKIHsKIAlpbnQgaW1yX3BvcnQ7Ci0JCisKIAlpZiAoaXJxID49IE1BWF9JUlEpIHsKIAkJcmV0dXJuOwogCX0KQEAgLTIyNSw4ICsyMjMsOCBAQAogCX0gZWxzZSB7CiAJCWltcl9wb3J0ID0gTUFTVEVSX1BJQyArIElNUjsKIAl9Ci0JCi0Jb3V0YihpbmIoaW1yX3BvcnQpfCgxPDwoaXJxJjcpKSwgaW1yX3BvcnQpOyAKKworCW91dGIoaW5iKGltcl9wb3J0KXwoMTw8KGlycSY3KSksIGltcl9wb3J0KTsKIH0KIAogCkBAIC0yMzgsMTEwICsyMzYsMTEwIEBACiAJaWYgKGlycSA+IDcpIHsKIAkJb3V0YihPQ1cyX1NFT0l8KGlycSY3KSwgU0xBVkVfUElDICsgT0NXMik7CiAJCWlycSA9IFNFT0lfSVIyOyAgICAgICAgICAgICAgIC8qIGFsc28gZG8gSVIyIG9uIG1hc3RlciAqLwotCX0gCisJfQogCW91dGIoT0NXMl9TRU9JfGlycSwgTUFTVEVSX1BJQyArIE9DVzIpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZG9faXJxKGludCBpcnEpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRvX2lycShpbnQgaXJxKQogewotCQorCiAJbWFza19pcnEoaXJxKTsKLQkKKwogCWlmIChpcnFfdGFibGVbaXJxXS5zdGF0dXMgJiBJUlFfRElTQUJMRUQpIHsKIAkJdW5tYXNrX2lycShpcnEpOwogCQlzcGVjaWZpY19lb2koaXJxKTsKIAkJcmV0dXJuOwogCX0KLQkKLQkKKworCiAJaWYgKE5VTEwgIT0gaXJxX3RhYmxlW2lycV0uaGFuZGxlcikgewogCQlpcnFfaGFuZGxlcl90ICpoYW5kbGVyOwotCQlmb3IgKGhhbmRsZXIgPSBpcnFfdGFibGVbaXJxXS5oYW5kbGVyOyAKKwkJZm9yIChoYW5kbGVyID0gaXJxX3RhYmxlW2lycV0uaGFuZGxlcjsKIAkJICAgICBOVUxMIT0gaGFuZGxlcjsgaGFuZGxlciA9IGhhbmRsZXItPm5leHQpIHsKIAkJCWhhbmRsZXItPmlzcl9mdW5jKGhhbmRsZXItPmlzcl9kYXRhKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICgoaXJxICYgNykgIT0gNykgewkJCQkKKwkJaWYgKChpcnEgJiA3KSAhPSA3KSB7CiAJCQlwcmludGYoIlNwdXJpb3VzIGlycSAlZFxuIiwgaXJxKTsKIAkJfQotCX0JCQorCX0KIAl1bm1hc2tfaXJxKGlycSk7Ci0Jc3BlY2lmaWNfZW9pKGlycSk7CQorCXNwZWNpZmljX2VvaShpcnEpOwogfQogCiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSB1bmtub3duX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgdW5rbm93bl9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJVbmtub3duIEV4Y2VwdGlvbiAlZCBhdCAlMDR4OiUwOHhcbiIsIGNhdXNlLCBzZWcsIGlwKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRpdmlkZV9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRpdmlkZV9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJEaXZpZGUgRXJyb3IgKERpdmlzaW9uIGJ5IHplcm8pIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiAJd2hpbGUoMSk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBkZWJ1Z19leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlYnVnX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIkRlYnVnIEludGVycnVwdCAoU2luZ2xlIHN0ZXApIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBubWlfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIG5taV9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIk5NSSBJbnRlcnJ1cHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KLQkJCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaW52YWxpZF9pbnN0cnVjdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBpbnZhbGlkX2luc3RydWN0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiSW52YWxpZCBJbnN0cnVjdGlvbiBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQotCQkJCQotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRvdWJsZV9mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBkb3VibGVfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJEb3VibGUgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIAl3aGlsZSgxKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGludmFsaWRfdHNzX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaW52YWxpZF90c3NfZXhjZXB0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiSW52YWxpZCBUU1MgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KLQkJCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc2VnX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIHNlZ19mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIlNlZ21lbnRhdGlvbiBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc3RhY2tfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIHN0YWNrX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiU3RhY2sgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIAl3aGlsZSgxKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGdwZl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZ3BmX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiR2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBwYWdlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBwYWdlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiUGFnZSBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZnBfZXhjZXB0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBmcF9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJGbG9hdGluZyBwb2ludCBleGNlcHRpb24gYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGFsaWdubWVudF9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgYWxpZ25tZW50X2NoZWNrX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiQWxpZ25tZW50IGNoZWNrIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9Ci0gICAgICAgCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgbWFjaGluZV9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBtYWNoaW5lX2NoZWNrX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiTWFjaGluZSBjaGVjayBleGNlcHRpb24gYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KQEAgLTM1MCwzMSArMzQ4LDMxIEBACiB2b2lkIGlycV9pbnN0YWxsX2hhbmRsZXIoaW50IGlubywgaW50ZXJydXB0X2hhbmRsZXJfdCAqZnVuYywgdm9pZCAqcGRhdGEpCiB7CiAJaW50IHN0YXR1czsKLQkKKwogCWlmIChpbm8+TUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQotCQkKKwogCWlmIChOVUxMICE9IGlycV90YWJsZVtpbm9dLmhhbmRsZXIpIHsKIAkJcmV0dXJuOwogCX0KLQkKKwogCXN0YXR1cyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCWlycV90YWJsZVtpbm9dLmhhbmRsZXIgPSBtYWxsb2Moc2l6ZW9mKGlycV9oYW5kbGVyX3QpKTsKIAlpZiAoTlVMTCA9PSBpcnFfdGFibGVbaW5vXS5oYW5kbGVyKSB7CiAJCXJldHVybjsKIAl9Ci0JCisKIAltZW1zZXQoaXJxX3RhYmxlW2lub10uaGFuZGxlciwgMCwgc2l6ZW9mKGlycV9oYW5kbGVyX3QpKTsKLQkKKwogCWlycV90YWJsZVtpbm9dLmhhbmRsZXItPmlzcl9mdW5jID0gZnVuYzsKIAlpcnFfdGFibGVbaW5vXS5oYW5kbGVyLT5pc3JfZGF0YSA9IHBkYXRhOwogCWlmIChzdGF0dXMpIHsKIAkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAl9Ci0JCisKIAl1bm1hc2tfaXJxKGlubyk7Ci0JCisKIAlyZXR1cm47CiB9CiAKQEAgLTM4NCw3ICszODIsNyBAQAogCWlmIChpbm8+TUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQotCQorCiAJc3RhdHVzID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAJbWFza19pcnEoaW5vKTsKIAlpZiAoTlVMTCA9PSBpcnFfdGFibGVbaW5vXS5oYW5kbGVyKSB7CkBAIC00MDYsMzMgKzQwNCwzMyBAQAogCiBzdGF0aWMgdm9pZCBzZXRfdmVjdG9yKGludCBpbnRudW0sIHZvaWQgKnJvdXRpbmUpCiB7Ci0JaWR0W2ludG51bV0uYmFzZV9oaWdoID0gKHUxNikoKHUzMikocm91dGluZSk+PjE2KTsJCi0JaWR0W2ludG51bV0uYmFzZV9sb3cgPSAodTE2KSgodTMyKShyb3V0aW5lKSYweGZmZmYpOwkKKwlpZHRbaW50bnVtXS5iYXNlX2hpZ2ggPSAodTE2KSgodTMyKShyb3V0aW5lKT4+MTYpOworCWlkdFtpbnRudW1dLmJhc2VfbG93ID0gKHUxNikoKHUzMikocm91dGluZSkmMHhmZmZmKTsKIH0KIAogCiBpbnQgaW50ZXJydXB0X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKLQkKKwogCS8qIEp1c3QgaW4gY2FzZS4uLiAqLwogCWRpc2FibGVfaW50ZXJydXB0cygpOwotCQkKKwogCS8qIEluaXRpYWxpemUgdGhlIElEVCBhbmQgc3R1ZmYgKi8KLQkKLQkKKworCiAJbWVtc2V0KGlycV90YWJsZSwgMCwgc2l6ZW9mKGlycV90YWJsZSkpOwogCiAJLyogU2V0dXAgdGhlIElEVCAqLwotCWZvciAoaT0wO2k8MjU2O2krKykgewkJCisJZm9yIChpPTA7aTwyNTY7aSsrKSB7CiAJCWlkdFtpXS5hY2Nlc3MgPSAweDhlOwotCQlpZHRbaV0ucmVzID0gMDsJCi0JCWlkdFtpXS5zZWxlY3RvciA9IDB4MTA7CQorCQlpZHRbaV0ucmVzID0gMDsKKwkJaWR0W2ldLnNlbGVjdG9yID0gMHgxMDsKIAkJc2V0X3ZlY3RvcihpLCBkZWZhdWx0X2lzcik7Ci0JfQkKLQkKKwl9CisKIAlhc20gKCJjcyBsaWR0IGlkdF9wdHJcbiIpOwotCQorCiAJLyogU2V0dXAgZXhjZXB0aW9ucyAqLwogCXNldF92ZWN0b3IoMHgwMCwgZXhwXzApOwogCXNldF92ZWN0b3IoMHgwMSwgZXhwXzEpOwpAQCAtNDg3LDM5ICs0ODUsMzkgQEAKIAkvKiB2ZWN0b3JzIDB4MzAtMHgzZiBhcmUgcmVzZXJ2ZWQgZm9yIGlycSAxNi0zMSAqLwogCXNldF92ZWN0b3IoMHg0MCwgc3lzY2FsbF9lbnRyeSk7CiAKLQkKKwogCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KIAlvdXRiKDB4ZmYsIE1BU1RFUl9QSUMgKyBJTVIpOwogCW91dGIoMHhmZiwgU0xBVkVfUElDICsgSU1SKTsKLQkKKwogCS8qIE1hc3RlciBQSUMgKi8KLQlvdXRiKElDVzFfU0VMfElDVzFfRUlDVzQsIE1BU1RFUl9QSUMgKyBJQ1cxKTsJCisJb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBNQVNURVJfUElDICsgSUNXMSk7CiAJb3V0YigweDIwLCBNQVNURVJfUElDICsgSUNXMik7ICAgICAgICAgIC8qIFBsYWNlIG1hc3RlciBQSUMgaW50ZXJydXB0cyBhdCBJTlQyMCAqLwotCW91dGIoSVIyLCBNQVNURVJfUElDICsgSUNXMyk7CQkvKiBJQ1czLCBPbmUgc2xldmMgUElDIGlzIHByZXNlbnQgKi8JCisJb3V0YihJUjIsIE1BU1RFUl9QSUMgKyBJQ1czKTsJCS8qIElDVzMsIE9uZSBzbGV2YyBQSUMgaXMgcHJlc2VudCAqLwogCW91dGIoSUNXNF9QTSwgTUFTVEVSX1BJQyArIElDVzQpOwotCQorCiAJZm9yIChpPTA7aTw4O2krKykgewogCQlvdXRiKE9DVzJfU0VPSXxpLCBNQVNURVJfUElDICsgT0NXMik7CiAJfQotCQorCiAJLyogU2xhdmUgUElDICovCi0Jb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBTTEFWRV9QSUMgKyBJQ1cxKTsJCisJb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBTTEFWRV9QSUMgKyBJQ1cxKTsKIAlvdXRiKDB4MjgsIFNMQVZFX1BJQyArIElDVzIpOwkgICAgICAgIC8qIFBsYWNlIHNsYXZlIFBJQyBpbnRlcnJ1cHRzIGF0IElOVDI4ICovCiAJb3V0YigweDAyLCBTTEFWRV9QSUMgKyBJQ1czKTsJCS8qIFNsYXZlIElEICovCi0Jb3V0YihJQ1c0X1BNLCBTTEFWRV9QSUMgKyBJQ1c0KTsgICAgICAgIAotCQorCW91dGIoSUNXNF9QTSwgU0xBVkVfUElDICsgSUNXNCk7CisKIAlmb3IgKGk9MDtpPDg7aSsrKSB7CiAJCW91dGIoT0NXMl9TRU9JfGksIFNMQVZFX1BJQyArIE9DVzIpOwogCX0KLQkKLQkKKworCiAJLyogZW5hYmxlIGNhc2NhZGUgaW50ZXJyZXJ1cHQgKi8KIAlvdXRiKDB4ZmIsIE1BU1RFUl9QSUMgKyBJTVIpOwogCW91dGIoMHhmZiwgU0xBVkVfUElDICsgSU1SKTsKLQkKKwogCS8qIEl0IGlzIG5vdyBzYWZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JZW5hYmxlX2ludGVycnVwdHMoKTsgCi0JCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01MzEsOSArNTI5LDkgQEAKIGludCBkaXNhYmxlX2ludGVycnVwdHModm9pZCkKIHsKIAlsb25nIGZsYWdzOwotCQorCiAJYXNtIHZvbGF0aWxlICgicHVzaGZsIDsgcG9wbCAlMCA7IGNsaVxuIiA6ICI9ZyIgKGZsYWdzKSA6ICk7Ci0JCisKIAlyZXR1cm4gKGZsYWdzJjB4MjAwKTsgLyogSUUgZmxhZ3MgaXMgYml0IDkgKi8KIH0KIApAQCAtNTQxLDkgKzUzOSw5IEBACiAjaWZkZWYgQ0ZHX1JFU0VUX0dFTkVSSUMKIAogdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGdlbmVyYXRlX2dwZih2b2lkKTsKLWFzbSgiLmdsb2JsIGdlbmVyYXRlX2dwZlxuIiAKLSAgICAiZ2VuZXJhdGVfZ3BmOlxuIiAKLSAgICAibGptcCAgICQweDcwLCAkMHg0NzExNDcxMVxuIik7IC8qIHNlZ21lbnQgMHg3MCBpcyBhbiBhcmJpdHJhcnkgc2VnbWVudCB3aGljaCBkb2VzIG5vdCAKK2FzbSgiLmdsb2JsIGdlbmVyYXRlX2dwZlxuIgorICAgICJnZW5lcmF0ZV9ncGY6XG4iCisgICAgImxqbXAgICAkMHg3MCwgJDB4NDcxMTQ3MTFcbiIpOyAvKiBzZWdtZW50IDB4NzAgaXMgYW4gYXJiaXRyYXJ5IHNlZ21lbnQgd2hpY2ggZG9lcyBub3QKIAkJCQkgICAgKiBleGlzdCAqLwogdm9pZCByZXNldF9jcHUodWxvbmcgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L3Jlc2V0LlMgYi9jcHUvaTM4Ni9yZXNldC5TCmluZGV4IDU3ZTMyYTguLjA3YTczODQgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3Jlc2V0LlMKKysrIGIvY3B1L2kzODYvcmVzZXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUgCisgKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAyCU9taWNyb24gQ2V0aSBBQiwgRGFuaWVsIEVuZ3N0cvZtIDxkZW5haWVsQG9taWNyb24uc2U+CiAgKgpAQCAtMjgsMTEgKzI4LDEwIEBACiAKIC5zZWN0aW9uIC5yZXNldCwgImF4IgogLmNvZGUxNgotcmVzZXRfdmVjdG9yOiAKLSAgICAgICAgY2xpCi0gICAgICAgIGNsZAotICAgICAgICBqbXAgc3RhcnQxNiAKK3Jlc2V0X3ZlY3RvcjoKKwljbGkKKwljbGQKKwlqbXAgc3RhcnQxNgogCiAJLm9yZyAweGYKIAlub3AKLQkKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L3NjNTIwLmMgYi9jcHUvaTM4Ni9zYzUyMC5jCmluZGV4IDUwMDA4OWEuLjY4OWU3NzUgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NjNTIwLmMKKysrIGIvY3B1L2kzODYvc2M1MjAuYwpAQCAtMzYsMjYgKzM2LDI2IEBACiAjaW5jbHVkZSA8YXNtL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pYy9zYzUyMC5oPgogCi0vKiAKLSAqIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBib2FyZHMgYmFzZWQgb24gdGhlIEFNRCBzYzUyMCAKLSAqIAorLyoKKyAqIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBib2FyZHMgYmFzZWQgb24gdGhlIEFNRCBzYzUyMAorICoKICAqIHZvaWQgd3JpdGVfbW1jcl9ieXRlKHUxNiBtbWNyLCB1OCBkYXRhKQogICogdm9pZCB3cml0ZV9tbWNyX3dvcmQodTE2IG1tY3IsIHUxNiBkYXRhKQogICogdm9pZCB3cml0ZV9tbWNyX2xvbmcodTE2IG1tY3IsIHUzMiBkYXRhKQotICogCisgKgogICogdTggICByZWFkX21tY3JfYnl0ZSh1MTYgbW1jcikKICAqIHUxNiAgcmVhZF9tbWNyX3dvcmQodTE2IG1tY3IpCiAgKiB1MzIgIHJlYWRfbW1jcl9sb25nKHUxNiBtbWNyKQotICogCisgKgogICogdm9pZCBpbml0X3NjNTIwKHZvaWQpCiAgKiB1bnNpZ25lZCBsb25nIGluaXRfc2M1MjBfZHJhbSh2b2lkKQogICogdm9pZCBwY2lfc2M1MjBfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi0gKiAKKyAqCiAgKiB2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCiAgKiB1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKICAqIHZvaWQgc2V0X3RpbWVyKHVsb25nIHQpCiAgKiB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCi0gKiAKKyAqCiAgKi8KIAogc3RhdGljIHUzMiBtbWNyX2Jhc2U9IDB4ZmZmZWYwMDA7CkBAIC02Nyw3ICs2Nyw3IEBACiAKIHZvaWQgd3JpdGVfbW1jcl93b3JkKHUxNiBtbWNyLCB1MTYgZGF0YSkKIHsKLQl3cml0ZXcoZGF0YSwgbW1jcittbWNyX2Jhc2UpOwkKKwl3cml0ZXcoZGF0YSwgbW1jcittbWNyX2Jhc2UpOwogfQogCiB2b2lkIHdyaXRlX21tY3JfbG9uZyh1MTYgbW1jciwgdTMyIGRhdGEpCkBAIC04Miw3ICs4Miw3IEBACiAKIHUxNiByZWFkX21tY3Jfd29yZCh1MTYgbW1jcikKIHsKLQlyZXR1cm4gcmVhZHcobW1jcittbWNyX2Jhc2UpOwkKKwlyZXR1cm4gcmVhZHcobW1jcittbWNyX2Jhc2UpOwogfQogCiB1MzIgcmVhZF9tbWNyX2xvbmcodTE2IG1tY3IpCkBAIC05NCwxOSArOTQsMTkgQEAKIHZvaWQgaW5pdF9zYzUyMCh2b2lkKQogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCQorCiAJLyogU2V0IHRoZSBVQVJUeENUTCByZWdpc3RlciBhdCBpdCdzIHNsb3dlciwKLQkgKiBiYXVkIGNsb2NrIGdpdmluZyB1cyBhIDEuODQzMiBNSHogcmVmZXJlbmNlIAorCSAqIGJhdWQgY2xvY2sgZ2l2aW5nIHVzIGEgMS44NDMyIE1IeiByZWZlcmVuY2UKIAkgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfVUFSVDFDVEwsIDcpOwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9VQVJUMkNUTCwgNyk7Ci0JCisKIAkvKiBmaXJzdCBzZXQgdGhlIHRpbWVyIHBpbiBtYXBwaW5nICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0NMS1NFTCwgMHg3Mik7CS8qIG5vIGNsb2NrIGZyZXF1ZW5jeSBzZWxlY3RlZCwgdXNlIDEuMTg5Mk1IeiAqLwotCQorCiAJLyogZW5hYmxlIFBDSSBidXMgYXJiaXRyZXIgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1lTQVJCQ1RMLDB4MDIpOyAgLyogZW5hYmxlIGNvbmN1cnJlbnQgbW9kZSAqLwotCQorCiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1NZU0FSQk1FTkIsMHgxZik7IC8qIGVuYWJsZSBleHRlcm5hbCBncmFudHMgKi8KIAl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSEJDVEwsMHgwNCk7ICAgICAgLyogZW5hYmxlIHBvc3RlZC13cml0ZXMgKi8KIApAQCAtMTIwLDEwICsxMjAsMTAgQEAKIAkJcHJpbnRmKCIjIyBDUFUgU3BlZWQgc2V0IHRvIDEwME1IelxuIik7CiAJCWdkLT5jcHVfY2xrID0gMTAwMDAwMDAwOwogCX0KLQkKKwogCiAJLyogd2FpdCBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgKi8KLSAgICAgICAgYXNtKCJtb3ZsCSQweDIwMDAsJSVlY3hcbiIKKwlhc20oIm1vdmwJJDB4MjAwMCwlJWVjeFxuIgogCSAgICAid2FpdF9sb29wOglwdXNobCAlJWVjeFxuIgogCSAgICAicG9wbAklJWVjeFxuIgogCSAgICAibG9vcCB3YWl0X2xvb3BcbiI6IDogOiAiZWN4Iik7CkBAIC0xNDEsMTkgKzE0MSwxOSBAQAogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCWJkX3QgKmJkID0gZ2QtPmJkOwotCQorCiAJdTMyIGRyYW1fcHJlc2VudD0wOwogCXUzMiBkcmFtX2N0cmw7CiAKIAlpbnQgdmFsOwotCQotCWludCBjYXNfcHJlY2hhcmdlX2RlbGF5ID0gQ0ZHX1NEUkFNX1BSRUNIQVJHRV9ERUxBWTsJCi0JaW50IHJlZnJlc2hfcmF0ZSAgICAgICAgPSBDRkdfU0RSQU1fUkVGUkVTSF9SQVRFOwkKKworCWludCBjYXNfcHJlY2hhcmdlX2RlbGF5ID0gQ0ZHX1NEUkFNX1BSRUNIQVJHRV9ERUxBWTsKKwlpbnQgcmVmcmVzaF9yYXRlICAgICAgICA9IENGR19TRFJBTV9SRUZSRVNIX1JBVEU7CiAJaW50IHJhc19jYXNfZGVsYXkgICAgICAgPSBDRkdfU0RSQU1fUkFTX0NBU19ERUxBWTsKLQkKKwogCS8qIHNldCBTRFJBTSBzcGVlZCBoZXJlICovCi0JCi0JcmVmcmVzaF9yYXRlLz03ODsJCisKKwlyZWZyZXNoX3JhdGUvPTc4OwogCWlmIChyZWZyZXNoX3JhdGU8PTEpIHsKIAkJdmFsID0gMDsgIC8qIDcuOHVzICovCiAJfSBlbHNlIGlmIChyZWZyZXNoX3JhdGU9PTIpIHsKQEAgLTE2NCwyMiArMTY0LDIyIEBACiAJCXZhbCA9IDM7ICAvKiA2Mi40dXMgKi8KIAl9CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RSQ0NUTCwgKHJlYWRfbW1jcl9ieXRlKFNDNTIwX0RSQ0NUTCkgJiAweGNmKSB8ICh2YWw8PDQpKTsKLQkKKwogCXZhbCA9IHJlYWRfbW1jcl9ieXRlKFNDNTIwX0RSQ1RNQ1RMKTsKIAl2YWwgJj0gMHhmMDsKLQkKLQlpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09MykgewkJCisKKwlpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09MykgewogCQl2YWwgfD0gMHgwNDsgICAvKiAzVCAqLwotCX0gZWxzZSBpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09NCkgewkJCisJfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PT00KSB7CiAJCXZhbCB8PSAweDA4OyAgIC8qIDRUICovCi0JfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PjQpIHsJCQorCX0gZWxzZSBpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT40KSB7CiAJCXZhbCB8PSAweDBjOwotCX0gCi0JCisJfQorCiAJaWYgKHJhc19jYXNfZGVsYXkgPiAzKSB7Ci0JCXZhbCB8PSAyOyAKKwkJdmFsIHw9IDI7CiAJfSBlbHNlIHsKLQkJdmFsIHw9IDE7IAorCQl2YWwgfD0gMTsKIAl9CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RSQ1RNQ1RMLCB2YWwpOwogCkBAIC0xODcsMzcgKzE4NywzNyBAQAogCS8qIFdlIHJlYWQtYmFjayB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZHJhbQogCSAqIGNvbnRyb2xsZXIgdGhhdCB0aGUgYXNzZW1ibHkgY29kZSB3cm90ZSAqLwogCWRyYW1fY3RybCA9IHJlYWRfbW1jcl9sb25nKFNDNTIwX0RSQ0JFTkRBRFIpOwotCQorCiAKIAliZC0+YmlfZHJhbVswXS5zdGFydCA9IDA7CiAJaWYgKGRyYW1fY3RybCAmIDB4ODApIHsKIAkJLyogYmFuayAwIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ID0gYmQtPmJpX2RyYW1bMV0uc3RhcnQgPSAoZHJhbV9jdHJsICYgMHg3ZikgPDwgMjI7Ci0JCWJkLT5iaV9kcmFtWzBdLnNpemUgPSBiZC0+YmlfZHJhbVsxXS5zdGFydDsgCisJCWJkLT5iaV9kcmFtWzBdLnNpemUgPSBiZC0+YmlfZHJhbVsxXS5zdGFydDsKIAogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzBdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVsxXS5zdGFydCA9IGJkLT5iaV9kcmFtWzBdLnN0YXJ0OwogCX0KLQkKKwogCWlmIChkcmFtX2N0cmwgJiAweDgwMDApIHsKIAkJLyogYmFuayAxIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ID0gYmQtPmJpX2RyYW1bMl0uc3RhcnQgPSAoZHJhbV9jdHJsICYgMHg3ZjAwKSA8PCAxNDsKLQkJYmQtPmJpX2RyYW1bMV0uc2l6ZSA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzFdLnN0YXJ0OyAKKwkJYmQtPmJpX2RyYW1bMV0uc2l6ZSA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzFdLnN0YXJ0OwogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzFdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVsyXS5zdGFydCA9IGJkLT5iaV9kcmFtWzFdLnN0YXJ0OwogCX0KLQkKKwogCWlmIChkcmFtX2N0cmwgJiAweDgwMDAwMCkgewogCQkvKiBiYW5rIDIgZW5hYmxlZCAqLwogCQlkcmFtX3ByZXNlbnQgPSBiZC0+YmlfZHJhbVszXS5zdGFydCA9IChkcmFtX2N0cmwgJiAweDdmMDAwMCkgPDwgNjsKLQkJYmQtPmJpX2RyYW1bMl0uc2l6ZSA9IGJkLT5iaV9kcmFtWzNdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzJdLnN0YXJ0OyAKKwkJYmQtPmJpX2RyYW1bMl0uc2l6ZSA9IGJkLT5iaV9kcmFtWzNdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzJdLnN0YXJ0OwogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzJdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVszXS5zdGFydCA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0OwotCX0gCi0JCisJfQorCiAJaWYgKGRyYW1fY3RybCAmIDB4ODAwMDAwMDApIHsKIAkJLyogYmFuayAzIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ICA9IChkcmFtX2N0cmwgJiAweDdmMDAwMDAwKSA+PiAyOwpAQCAtMjI2LDEyICsyMjYsMTIgQEAKIAkJYmQtPmJpX2RyYW1bM10uc2l6ZSA9IDA7CiAJfQogCisKLQkKLSNpZiAwCQorI2lmIDAKIAlwcmludGYoIkNvbmZpZ3VyZWQgJWQgYnl0ZXMgb2YgZHJhbVxuIiwgZHJhbV9wcmVzZW50KTsKLSNlbmRpZgkKKyNlbmRpZgogCWdkLT5yYW1fc2l6ZSA9IGRyYW1fcHJlc2VudDsKLQkKKwogCXJldHVybiBkcmFtX3ByZXNlbnQ7CiB9CiAKQEAgLTI2NSwxOSArMjY1LDE5IEBACiAKIAogLyogVGhlIGludGVycnVwdCB1c2VkIGZvciBQQ0kgSU5UQS1JTlREICAqLwotaW50IHNjNTIwX3BjaV9pbnRzWzE1XSA9IHsgCitpbnQgc2M1MjBfcGNpX2ludHNbMTVdID0gewogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKIH07CiAKIC8qIHV0aWxpdHkgZnVuY3Rpb24gdG8gY29uZmlndXJlIGEgcGNpIGludGVycnVwdCAqLwotaW50IHBjaV9zYzUyMF9zZXRfaXJxKGludCBwY2lfcGluLCBpbnQgaXJxKSAKK2ludCBwY2lfc2M1MjBfc2V0X2lycShpbnQgcGNpX3BpbiwgaW50IGlycSkKIHsKIAlpbnQgaTsKLQkKKwogIyBpZiAwCiAJcHJpbnRmKCJzZXRfaXJxKCk6IG1hcCBJTlQlYyB0byBJUlElZFxuIiwgcGNpX3BpbiArICdBJywgaXJxKTsKLSNlbmRpZgkKKyNlbmRpZgogCWlmIChpcnEgPCAwIHx8IGlycSA+IDE1KSB7CiAJCXJldHVybiAtMTsgLyogaWxsZWdhbCBpcnEgKi8KIAl9CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJcmV0dXJuIC0xOyAvKiBpbGxlZ2FsIHBjaSBpbnQgcGluICovCiAJfQogCi0JLyogZmlyc3QgZGlzYWJsZSBhbnkgbm9uLXBjaSBpbnRlcnJ1cHQgc291cmNlIHRoYXQgdXNlIAorCS8qIGZpcnN0IGRpc2FibGUgYW55IG5vbi1wY2kgaW50ZXJydXB0IHNvdXJjZSB0aGF0IHVzZQogCSAqIHRoaXMgbGV2ZWwgKi8KIAlmb3IgKGk9U0M1MjBfR1BUTVIwTUFQO2k8PVNDNTIwX0dQMTBJTUFQO2krKykgewogCQlpZiAoaT49U0M1MjBfUENJSU5UQU1BUCYmaTw9U0M1MjBfUENJSU5URE1BUCkgewpAQCAtMjk2LDMxICsyOTYsMzEgQEAKIAkJCXdyaXRlX21tY3JfYnl0ZShpLCBTQzUyMF9JUlFfRElTQUJMRUQpOwogCQl9CiAJfQotCQorCiAJLyogU2V0IHRoZSB0cmlnZ2VyIHRvIGxldmVsICovCi0Jd3JpdGVfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZywgCisJd3JpdGVfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZywKIAkJCXJlYWRfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZykgfCBzYzUyMF9pcnFbaXJxXS5sZXZlbF9iaXQpOwotCQotCQorCisKIAlpZiAocGNpX3BpbiA8IDQpIHsKIAkJLyogUENJIElOVEEtSU5URCAqLwogCQkvKiByb3V0ZSB0aGUgaW50ZXJydXB0ICovCiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QQ0lJTlRBTUFQICsgcGNpX3Bpbiwgc2M1MjBfaXJxW2lycV0ucHJpb3JpdHkpOwotCQkKLQkJCisKKwogCX0gZWxzZSB7CiAJCS8qIEdQSVJRMC1HUElSUTEwIHVzZWQgZm9yIGFkZGl0aW9uYWwgUENJIElOVFMgKi8KIAkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMElNQVAgKyBwY2lfcGluIC0gNCwgc2M1MjBfaXJxW2lycV0ucHJpb3JpdHkpOwotCQkKKwogCQkvKiBhbHNvIHNldCB0aGUgcG9sYXJpdHkgaW4gdGhpcyBjYXNlICovCi0JCXdyaXRlX21tY3Jfd29yZChTQzUyMF9JTlRQSU5QT0wsIAorCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSU5UUElOUE9MLAogCQkJCXJlYWRfbW1jcl93b3JkKFNDNTIwX0lOVFBJTlBPTCkgfCAoMSA8PCAocGNpX3Bpbi00KSkpOwotCQkKKwogCX0KLQkKLQkvKiByZWdpc3RlciB0aGUgcGluICovCQkKKworCS8qIHJlZ2lzdGVyIHRoZSBwaW4gKi8KIAlzYzUyMF9wY2lfaW50c1twY2lfcGluXSA9IGlycTsKLQkKKwogCiAJcmV0dXJuIDA7IC8qIE9LICovCiB9CkBAIC0zMzEsMzUgKzMzMSwzNSBAQAogCWhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOwogCiAJLyogU3lzdGVtIG1lbW9yeSBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKIAkJICAgICAgIFNDNTIwX1BDSV9NRU1PUllfQlVTLAogCQkgICAgICAgU0M1MjBfUENJX01FTU9SWV9QSFlTLAogCQkgICAgICAgU0M1MjBfUENJX01FTU9SWV9TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9NRU0gfCBQQ0lfUkVHSU9OX01FTU9SWSk7CiAKIAkvKiBQQ0kgbWVtb3J5IHNwYWNlICovCi0JcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDEsIAorCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAxLAogCQkgICAgICAgU0M1MjBfUENJX01FTV9CVVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfTUVNX1BIWVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfTUVNX1NJWkUsCiAJCSAgICAgICBQQ0lfUkVHSU9OX01FTSk7CiAKIAkvKiBJU0EvUENJIG1lbW9yeSBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAyLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMiwKIAkJICAgICAgIFNDNTIwX0lTQV9NRU1fQlVTLAogCQkgICAgICAgU0M1MjBfSVNBX01FTV9QSFlTLAogCQkgICAgICAgU0M1MjBfSVNBX01FTV9TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9NRU0pOwogCiAJLyogUENJIEkvTyBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAzLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMywKIAkJICAgICAgIFNDNTIwX1BDSV9JT19CVVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfSU9fUEhZUywKIAkJICAgICAgIFNDNTIwX1BDSV9JT19TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9JTyk7CiAKIAkvKiBJU0EvUENJIEkvTyBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyA0LCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgNCwKIAkJICAgICAgIFNDNTIwX0lTQV9JT19CVVMsCiAJCSAgICAgICBTQzUyMF9JU0FfSU9fUEhZUywKIAkJICAgICAgIFNDNTIwX0lTQV9JT19TSVpFLApAQCAtMzc0LDE1ICszNzQsMTQgQEAKIAlwY2lfcmVnaXN0ZXJfaG9zZShob3NlKTsKIAogCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwotCQorCiAJLyogZW5hYmxlIHRhcmdldCBtZW1vcnkgYWNjZXNlcyBvbiBob3N0IGJyaWdlICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCiAJCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOwogCiB9CiAKIAotCiAjZW5kaWYKIAogI2lmZGVmIENGR19USU1FUl9TQzUyMApAQCAtMzkyLDcgKzM5MSw3IEBACiB7CiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0dQVE1SMENOVCwgMCk7CiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0dQVE1SMENUTCwgMHg2MDAxKTsKLQkKKwogfQogCiB1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKQEAgLTQxNCwxOSArNDEzLDE5IEBACiB7CiAJaW50IG09MDsKIAlsb25nIHU7Ci0JCisKIAlyZWFkX21tY3Jfd29yZChTQzUyMF9TV1RNUk1JTExJKTsKIAlyZWFkX21tY3Jfd29yZChTQzUyMF9TV1RNUk1JQ1JPKTsKLQkgICAgIAorCiAjaWYgMAogCS8qIGRvIG5vdCBlbmFibGUgdGhpcyBsaW5lLCB1ZGVsYXkgaXMgdXNlZCBpbiB0aGUgc2VyaWFsIGRyaXZlciAtPiByZWN1cnNpb24gKi8KIAlwcmludGYoInVkZWxheTogJWxkIG0udSAlZC4lZCAgdG0udHUgJWQuJWRcbiIsIHVzZWMsIG0sIHUsIHRtLCB0dSk7Ci0jZW5kaWYJCisjZW5kaWYKIAl3aGlsZSAoMSkgewotCQkKKwogCQltICs9IHJlYWRfbW1jcl93b3JkKFNDNTIwX1NXVE1STUlMTEkpOwogCQl1ID0gcmVhZF9tbWNyX3dvcmQoU0M1MjBfU1dUTVJNSUNSTykgKyAobSAqIDEwMDApOwotCQkKKwogCQlpZiAodXNlYyA8PSB1KSB7CiAJCQlicmVhazsKIAkJfQpAQCAtNDQwLDEzICs0MzksMTMgQEAKIAl1OCB0ZW1wPTA7CiAKIAlpZiAoZnJlcSA+PSA4MTkyKSB7Ci0JCXRlbXAgfD0gQ1RMX0NMS19TRUxfNDsgCisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfNDsKIAl9IGVsc2UgaWYgKGZyZXEgPj0gNDA5NikgewotCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzg7ICAgICAgICAKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF84OwogCX0gZWxzZSBpZiAoZnJlcSA+PSAyMDQ4KSB7Ci0JCXRlbXAgfD0gQ1RMX0NMS19TRUxfMTY7ICAKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF8xNjsKIAl9IGVsc2UgaWYgKGZyZXEgPj0gMTAyNCkgewotCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzMyOyAgCisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfMzI7CiAJfSBlbHNlIGlmIChmcmVxID49IDUxMikgewogCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzY0OwogCX0gZWxzZSBpZiAoZnJlcSA+PSAyNTYpIHsKQEAgLTQ1Niw0NyArNDU1LDQ3IEBACiAJfSBlbHNlIHsKIAkJdGVtcCB8PSBDVExfQ0xLX1NFTF81MTI7CiAJfQotCQorCiAJaWYgKCFsc2JfZmlyc3QpIHsKIAkJdGVtcCB8PSBNU0JGX0VOQjsKIAl9Ci0JCQorCiAJaWYgKGludl9jbG9jaykgewogCQl0ZW1wIHw9IENMS19JTlZfRU5COwogCX0KLQkKKwogCWlmIChpbnZfcGhhc2UpIHsKIAkJdGVtcCB8PSBQSFNfSU5WX0VOQjsKIAl9Ci0JCQorCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNUTCwgdGVtcCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAotdTggc3NpX3R4cnhfYnl0ZSh1OCBkYXRhKSAKK3U4IHNzaV90eHJ4X2J5dGUodTggZGF0YSkKIHsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJWE1JVCwgZGF0YSk7CiAJd2hpbGUgKChyZWFkX21tY3JfYnl0ZShTQzUyMF9TU0lTVEEpKSAmIFNTSVNUQV9CU1kpOwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9TU0lDTUQsIFNTSUNNRF9DTURfU0VMX1hNSVRSQ1YpOwogCXdoaWxlICgocmVhZF9tbWNyX2J5dGUoU0M1MjBfU1NJU1RBKSkgJiBTU0lTVEFfQlNZKTsKLQlyZXR1cm4gcmVhZF9tbWNyX2J5dGUoU0M1MjBfU1NJUkNWKTsJCi19ICAgICAgCisJcmV0dXJuIHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVJDVik7Cit9CiAKIAotdm9pZCBzc2lfdHhfYnl0ZSh1OCBkYXRhKSAKK3ZvaWQgc3NpX3R4X2J5dGUodTggZGF0YSkKIHsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJWE1JVCwgZGF0YSk7Ci0Jd2hpbGUgKChyZWFkX21tY3JfYnl0ZShTQzUyMF9TU0lTVEEpKSAmIFNTSVNUQV9CU1kpOyAKKwl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNNRCwgU1NJQ01EX0NNRF9TRUxfWE1JVCk7CiB9CiAKLXU4IHNzaV9yeF9ieXRlKHZvaWQpIAordTggc3NpX3J4X2J5dGUodm9pZCkKIHsKIAl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNNRCwgU1NJQ01EX0NNRF9TRUxfUkNWKTsKIAl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJcmV0dXJuIHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVJDVik7Ci19IAorfQogCiAjZW5kaWYgLyogQ09ORklHX1NDNTIwICovCmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zYzUyMF9hc20uUyBiL2NwdS9pMzg2L3NjNTIwX2FzbS5TCmluZGV4IDdhOTU3YzcuLjgwNDY0ZmEgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NjNTIwX2FzbS5TCisrKyBiL2NwdS9pMzg2L3NjNTIwX2FzbS5TCkBAIC0yMiwyMSArMjIsMjEgQEAKICAqLwogCiAvKiBUaGlzIGZpbGUgaXMgbGFyZ2VseSBiYXNlZCBvbiBjb2RlIG9idG5lZCBmcm9tIEFNRC4gQU1EJ3Mgb3JpZ2luYWwKLSAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdyAKKyAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdwogICovCiAKIC8qCiAgKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICBUaGlzIHNvZnR3YXJlIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgIChBTUQpICB3aGljaCAKLSAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIAotICogIHNvZnR3YXJlIHByb3ZpZGVkIHRoaXMgQ09QWVJJR0hUIE5PVElDRSBpcyBub3QgcmVtb3ZlZCBvciBhbHRlcmVkLiAgQWxsIAotICogIG90aGVyIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQgYnkgQU1ELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSAKLSAqICBPRiBBTlkgS0lORCBJTkNMVURJTkcgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCBPRiAKKyAqCisgKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyB0aGUgcHJvcGVydHkgb2YgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICAoQU1EKSAgd2hpY2gKKyAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiAgc29mdHdhcmUgcHJvdmlkZWQgdGhpcyBDT1BZUklHSFQgTk9USUNFIGlzIG5vdCByZW1vdmVkIG9yIGFsdGVyZWQuICBBbGwKKyAqICBvdGhlciByaWdodHMgYXJlIHJlc2VydmVkIGJ5IEFNRC4KKyAqCisgKiAgVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkKKyAqICBPRiBBTlkgS0lORCBJTkNMVURJTkcgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCBPRgogICogIFRISVJELVBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSwgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqICBJTiBOTyBFVkVOVCBTSEFMTCBBTUQgT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKICAqICAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgUFJPRklUUywgQlVTSU5FU1MKQEAgLTQ1LDE5ICs0NSwxOSBAQAogICogIFNVQ0ggREFNQUdFUy4gIEJFQ0FVU0UgU09NRSBKVVJTSURJQ1RJT05TIFBST0hJQklUIFRIRSBFWENMVVNJT04gT1IKICAqICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgQ09OU0VRVUVOVElBTCBPUiBJTkNJREVOVEFMIERBTUFHRVMsIFRIRSBBQk9WRQogICogIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCi0gKiAKKyAqCiAgKiAgQU1EIGRvZXMgbm90IGFzc3VtZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBlcnJvcnMgdGhhdCBtYXkgYXBwZWFyIGluCiAgKiAgdGhlIE1hdGVyaWFscyBub3IgYW55IHJlc3BvbnNpYmlsaXR5IHRvIHN1cHBvcnQgb3IgdXBkYXRlIHRoZSBNYXRlcmlhbHMuCiAgKiAgQU1EIHJldGFpbnMgdGhlIHJpZ2h0IHRvIG1ha2UgY2hhbmdlcyB0byBpdHMgdGVzdCBzcGVjaWZpY2F0aW9ucyBhdCBhbnkKICAqICB0aW1lLCB3aXRob3V0IG5vdGljZS4KLSAqIAotICogIFNvIHRoYXQgYWxsIG1heSBiZW5lZml0IGZyb20geW91ciBleHBlcmllbmNlLCBwbGVhc2UgcmVwb3J0ICBhbnkgIHByb2JsZW1zIAotICogIG9yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgYmFjayB0byBBTUQuICBQbGVhc2UgaW5jbHVkZSB5b3VyIG5hbWUsIAotICogIGNvbXBhbnksICB0ZWxlcGhvbmUgbnVtYmVyLCAgQU1EIHByb2R1Y3QgcmVxdWlyaW5nIHN1cHBvcnQgYW5kIHF1ZXN0aW9uIG9yIAotICogIHByb2JsZW0gZW5jb3VudGVyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gICAgICAgICBXb3JsZHdpZGUgc3VwcG9ydCBhbmQgY29udGFjdCAgICAgICAgICAgCi0gKiAgRW1iZWRkZWQgUHJvY2Vzc29yIERpdmlzaW9uICAgICAgICAgICAgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGF0OiAgICAgICAgICAgICAgIAorICoKKyAqICBTbyB0aGF0IGFsbCBtYXkgYmVuZWZpdCBmcm9tIHlvdXIgZXhwZXJpZW5jZSwgcGxlYXNlIHJlcG9ydCAgYW55ICBwcm9ibGVtcworICogIG9yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgYmFjayB0byBBTUQuICBQbGVhc2UgaW5jbHVkZSB5b3VyIG5hbWUsCisgKiAgY29tcGFueSwgIHRlbGVwaG9uZSBudW1iZXIsICBBTUQgcHJvZHVjdCByZXF1aXJpbmcgc3VwcG9ydCBhbmQgcXVlc3Rpb24gb3IKKyAqICBwcm9ibGVtIGVuY291bnRlcmVkLgorICoKKyAqICBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAgICAgICAgV29ybGR3aWRlIHN1cHBvcnQgYW5kIGNvbnRhY3QKKyAqICBFbWJlZGRlZCBQcm9jZXNzb3IgRGl2aXNpb24gICAgICAgICAgICBpbmZvcm1hdGlvbiBhdmFpbGFibGUgYXQ6CiAgKiAgU3lzdGVtcyBFbmdpbmVlcmluZyAgICAgICAgICAgICAgICAgICAgICAgZXBkLnN1cHBvcnRAYW1kLmNvbQogICogIDUyMDQgRS4gQmVuIFdoaXRlIEJsdmQuICAgICAgICAgICAgICAgICAgICAgICAgICAtb3ItCiAgKiAgQXVzdGluLCBUWCA3ODc0MSAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFtZC5jb20vaHRtbC9zdXBwb3J0L3RlY2hzdXAuaHRtbApAQCAtNjYsNyArNjYsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkgQVVUSE9SICAgICAgOiBCdWRkeSBGZXkgLSBPcmlnaW5hbC4gCisgKgkgQVVUSE9SICAgICAgOiBCdWRkeSBGZXkgLSBPcmlnaW5hbC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIApAQCAtMTQwLDM2OCArMTQwLDM2OCBAQAogICAqIGluaXRpYWxpemUgZHJhbSBjb250cm9sbGVyIHJlZ2lzdGVycwogICAqLwogLmdsb2JsIG1lbV9pbml0Ci1tZW1faW5pdDogCi0gICAgICAgIHhvcncgICAgJWF4LCVheAotICAgICAgICBtb3ZsICAgICREQkNUTCwgJWVkaSAgICAgICAgICAgICAKK21lbV9pbml0OgorCXhvcncgICAgJWF4LCVheAorCW1vdmwgICAgJERCQ1RMLCAlZWRpCiAJbW92YiAgICAgJWFsLCAoJWVkaSkgICAgICAgICAgICAgLyogZGlzYWJsZSB3cml0ZSBidWZmZXIgKi8KIAotICAgICAgICBtb3ZsICAgICRFQ0NDVEwsICVlZGkgICAgICAgICAgICAKKwltb3ZsICAgICRFQ0NDVEwsICVlZGkKIAltb3ZiICAgICAlYWwsICglZWRpKSAgICAgICAgICAgICAvKiBkaXNhYmxlIEVDQyAqLwogCi0gICAgICAgIG1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgICAKLSAgICAgICAgbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLworCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpCisJbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAKICAvKgogICAqIHNldHVwIGxvb3AgdG8gZG8gNCBleHRlcm5hbCBiYW5rcyBzdGFydGluZyB3aXRoIGJhbmsgMwogICAqLwotICAgICAgICBtb3ZsICAgICQweGZmMDAwMDAwLCVlYXggICAgICAgICAvKiBlbmFibGUgbGFzdCBiYW5rIGFuZCBzZXR1cCAqLwotICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLworCW1vdmwgICAgJDB4ZmYwMDAwMDAsJWVheCAgICAgICAgIC8qIGVuYWJsZSBsYXN0IGJhbmsgYW5kIHNldHVwICovCisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KIAltb3ZsICAgICAlZWF4LCAoJWVkaSkKIAotICAgICAgICBtb3ZsICAgICREUkNDRkcsICVlZGkgICAgICAgICAgICAvKiBzZXR1cCAqLwotICAgICAgICBtb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCisJbW92bCAgICAkRFJDQ0ZHLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgKi8KKwltb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCiAJbW92dyAgICAlYXgsICglZWRpKQogCiAgLyoKICAgKiBpc3N1ZSBhIE5PUCB0byBhbGwgRFJBTXMKICAgKi8KLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KLSAgICAgICAgbW92YiAgICAkMHgxLCVhbCAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSByZWZyZXNoLGRpc2FibGUgd3JpdGUgYnVmZmVyICovIAorCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCisJbW92YiAgICAkMHgxLCVhbCAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSByZWZyZXNoLGRpc2FibGUgd3JpdGUgYnVmZmVyICovCiAJbW92YiAgICAgJWFsLCAoJWVkaSkKLSAgICAgICAgbW92bCAgICAkQ0FDSEVMSU5FU1osICVlc2kgICAgICAgLyoganVzdCBhIGR1bW15IGFkZHJlc3MgdG8gd3JpdGUgZm9yICovIAorCW1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGp1c3QgYSBkdW1teSBhZGRyZXNzIHRvIHdyaXRlIGZvciAqLwogCW1vdncgICAgICVheCwgKCVlc2kpCiAgLyoKICAgKiBkZWxheSBmb3IgMTAwIHVzZWM/IDIwMD8KICAgKiAqKioqKip0aGlzIGlzIGEgY2x1ZGdlIGZvciBub3cgKioqKioqKioqKioqKgogICAqLwotICAgICAgICBtb3Z3ICAgICQxMDAsJWN4Ci1zaXpkZWxheTogCi0gICAgICAgIGxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLworCW1vdncgICAgJDEwMCwlY3gKK3NpemRlbGF5OgorCWxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLwogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogIC8qCiAgICogaXNzdWUgYWxsIGJhbmtzIHByZWNoYXJnZQogICAqLwotICAgICAgICBtb3ZiICAgICQweDIsJWFsICAgICAgICAgICAgICAgICAvKiBBbGwgYmFua3MgcHJlY2hhcmdlICovCisJbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAJbW92dyAgICAgJWF4LCAoJWVzaSkKIAogIC8qCi0gICogaXNzdWUgMiBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MgCisgICogaXNzdWUgMiBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MKICAgKi8KLSAgICAgICAgbW92YiAgICAkMHg0LCVhbCAgICAgICAgICAgICAgICAgLyogQXV0byByZWZyZXNoIGNtZCAqLworCW1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KIAltb3ZiICAgICAlYWwsICglZWRpKQotICAgICAgICBtb3Z3ICAgICQyLCVjeAotcmVmcmVzaDE6IAorCW1vdncgICAgJDIsJWN4CityZWZyZXNoMToKIAltb3Z3ICAgICAlYXgsICglZXNpKQotICAgICAgICBsb29wICAgIHJlZnJlc2gxCisJbG9vcCAgICByZWZyZXNoMQogCiAgLyoKICAgKiBpc3N1ZSBMT0FEIE1PREUgUkVHSVNURVIgY29tbWFuZAogICAqLwotICAgICAgICBtb3ZiICAgICQweDMsJWFsICAgICAgICAgICAgICAgICAvKiBMb2FkIG1vZGUgcmVnaXN0ZXIgY21kICovCisJbW92YiAgICAkMHgzLCVhbCAgICAgICAgICAgICAgICAgLyogTG9hZCBtb2RlIHJlZ2lzdGVyIGNtZCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAJbW92dyAgICAgJWF4LCAoJWVzaSkKIAogIC8qCi0gICogaXNzdWUgOCBtb3JlIGF1dG8gcmVmcmVzaGVzIHRvIGFsbCBiYW5rcyAKLSAgKi8gCi0gICAgICAgIG1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KKyAgKiBpc3N1ZSA4IG1vcmUgYXV0byByZWZyZXNoZXMgdG8gYWxsIGJhbmtzCisgICovCisJbW92YiAgICAkMHg0LCVhbCAgICAgICAgICAgICAgICAgLyogQXV0byByZWZyZXNoIGNtZCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCi0gICAgICAgIG1vdncgICAgJDgsJWN4Ci1yZWZyZXNoMjogCisJbW92dyAgICAkOCwlY3gKK3JlZnJlc2gyOgogCW1vdncgICAgICVheCwgKCVlc2kpCi0gICAgICAgIGxvb3AgICAgcmVmcmVzaDIKKwlsb29wICAgIHJlZnJlc2gyCiAKICAvKgotICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlIAorICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlCiAgICovCi0gICAgICAgIG1vdmIgICAgJDB4MCwlYWwgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBtb2RlIHZhbHVlICovCisJbW92YiAgICAkMHgwLCVhbCAgICAgICAgICAgICAgICAgLyogTm9ybWFsIG1vZGUgdmFsdWUgKi8KIAltb3ZiICAgICAlYWwsICglZWRpKQogCiAgLyoKICAgKiBzaXplIGRyYW0gc3RhcnRpbmcgd2l0aCBleHRlcm5hbCBiYW5rIDMgbW92aW5nIHRvIGV4dGVybmFsIGJhbmsgMAogICAqLwotICAgICAgICBtb3ZsICAgICQweDMsJWVjeCAgICAgICAgICAgICAgICAvKiBzdGFydCB3aXRoIGV4dGVybmFsIGJhbmsgMyAqLworCW1vdmwgICAgJDB4MywlZWN4ICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHdpdGggZXh0ZXJuYWwgYmFuayAzICovCiAKLW5leHRiYW5rOiAKK25leHRiYW5rOgogCiAgLyoKICAgKiB3cml0ZSBjb2wgMTEgd3JhcCBhZHIKICAgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMTFfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IGNvbCAoMTEpIHdyYXAgYWRkciAqLwotICAgICAgICBtb3ZsICAgICRDT0wxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtYXggc3VwcG9ydGVkIGNvbHVtbnMoMTEpICovCisJbW92bCAgICAkQ09MMTFfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IGNvbCAoMTEpIHdyYXAgYWRkciAqLworCW1vdmwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1heCBzdXBwb3J0ZWQgY29sdW1ucygxMSkgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSBtYXggY29sIHBhdHRlcm4gYXQgbWF4IGNvbCBhZHIgKi8KIAltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KICAvKgogICAqIHdyaXRlIGNvbCAxMCB3cmFwIGFkcgogICAqLwogCi0gICAgICAgIG1vdmwgICAgJENPTDEwX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIGNvbCB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgY29sIHdyYXAgKi8KKwltb3ZsICAgICRDT0wxMF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMCBjb2wgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkQ09MMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgY29sIHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMCBjb2wgcGF0dGVybiBAIDEwIGNvbCB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgY29sIDkgd3JhcCBhZHIKICAgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMDlfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gOSBjb2wgd3JhcCBhZGRyZXNzICovCi0gICAgICAgIG1vdmwgICAgJENPTDA5X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDkgY29sIHdyYXAgKi8KKwltb3ZsICAgICRDT0wwOV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byA5IGNvbCB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRDT0wwOV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciA5IGNvbCB3cmFwICovCiAJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgOSBjb2wgcGF0dGVybiBAIDkgY29sIHdyYXAgYWRyICovCiAJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAgLyoKICAgKiB3cml0ZSBjb2wgOCB3cmFwIGFkcgogICAqLwotICAgICAgICBtb3ZsICAgICRDT0wwOF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtaW4oOCkgY29sIHdyYXAgYWRkcmVzcyAqLwotICAgICAgICBtb3ZsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtaW4gKDgpIGNvbCB3cmFwICovCisJbW92bCAgICAkQ09MMDhfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWluKDgpIGNvbCB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtaW4gKDgpIGNvbCB3cmFwICovCiAJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgbWluIGNvbCBwYXR0ZXJuIEAgbWluIGNvbCBhZHIgKi8KIAltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KICAvKgogICAqIHdyaXRlIHJvdyAxNCB3cmFwIGFkcgogICAqLwotICAgICAgICBtb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggcm93ICgxNCkgd3JhcCBhZGRyICovCi0gICAgICAgIG1vdmwgICAgJFJPVzE0X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1heCBzdXBwb3J0ZWQgcm93cygxNCkgKi8KKwltb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggcm93ICgxNCkgd3JhcCBhZGRyICovCisJbW92bCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCByb3dzKDE0KSAqLwogCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1heCByb3cgcGF0dGVybiBhdCBtYXggcm93IGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDEzIHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzEzX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEzIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTNfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTMgcm93IHdyYXAgKi8KKwltb3ZsICAgICRST1cxM19BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMyByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTNfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTMgcm93IHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMyByb3cgcGF0dGVybiBAIDEzIHJvdyB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDEyIHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzEyX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEyIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTJfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTIgcm93IHdyYXAgKi8KKwltb3ZsICAgICRST1cxMl9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMiByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTJfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTIgcm93IHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMiByb3cgcGF0dGVybiBAIDEyIHJvdyB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDExIHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzExX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDExIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTEgcm93IHdyYXAgKi8KKwltb3ZsICAgICRST1cxMV9BRFIsICVlZGkgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMSByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTEgcm93IHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZWRpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMSByb3cgcGF0dGVybiBAIDExIHJvdyB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlZGkpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDEwIHdyYXAgYWRyIC0tLSB0aGlzIHdyaXRlIGlzIHJlYWxseSB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIGJhbmtzCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzEwX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgcm93IHdyYXAgKEFBKSAqLworCW1vdmwgICAgJFJPVzEwX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIHJvdyB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRST1cxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCByb3cgd3JhcCAoQUEpICovCiAJbW92bCAgICAlZWF4LCAoJWVkaSkgICAgICAgICAgICAgLyogd3JpdGUgMTAgcm93IHBhdHRlcm4gQCAxMCByb3cgd3JhcCBhZHIgKi8KIAltb3ZsICAgICglZWRpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KICAvKgotICAqIHJlYWQgZGF0YSBAIHJvdyAxMiB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogYmFua3MsIAorICAqIHJlYWQgZGF0YSBAIHJvdyAxMiB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogYmFua3MsCiAgICogYW5kIHJlYWQgZGF0YSBAIHJvdyAxNCB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogcm93cy4KICAgKiBpZiBkYXRhIEAgcm93IDEyIHdyYXAgYWRyIGlzIG5vdCBBQSwgMTEgb3IgMTIgd2UgaGF2ZSBiYWQgUkFNLgotICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MsIE5PVCA0IAorICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MsIE5PVCA0CiAgICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwID09IDExIG9yIDEyLCB3ZSBoYXZlIDQgYmFua3MsCiAgICovCi0gICAgICAgIHhvcncgICAgJWRpLCVkaSAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIGZvciAyIGJhbmtzIGluIERJICovCi0JbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogcmVhZCBmcm9tIDEyIHJvdyB3cmFwIHRvIGNoZWNrIGJhbmtzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoZXNpIGlzIHNldHVwIGZyb20gdGhlIHdyaXRlIHRvIHJvdyAxMiB3cmFwKSAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3IgQUEgcGF0dGVybiAgKGVheCBob2xkcyB0aGUgYWEgcGF0dGVybikgKi8KLSAgICAgICAganogICAgICBvbmx5MiAgICAgICAgICAgICAgICAgICAgLyogaWYgcGF0dGVybiA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MgKi8KKwl4b3J3ICAgICVkaSwlZGkgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgMiBiYW5rcyBpbiBESSAqLworCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIHJlYWQgZnJvbSAxMiByb3cgd3JhcCB0byBjaGVjayBiYW5rcworCQkJCQkgICogKGVzaSBpcyBzZXR1cCBmcm9tIHRoZSB3cml0ZSB0byByb3cgMTIgd3JhcCkgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3IgQUEgcGF0dGVybiAgKGVheCBob2xkcyB0aGUgYWEgcGF0dGVybikgKi8KKwlqeiAgICAgIG9ubHkyICAgICAgICAgICAgICAgICAgICAvKiBpZiBwYXR0ZXJuID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcyAqLwogCiAJLyogNCBiYW5rcyAqLwotCQotICAgICAgICBtb3Z3ICAgICQ4LCVkaSAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgNCBiYW5rcyBpbiBESSAoQk5LX0NOVCBiaXQpICovCi0gICAgICAgIGNtcGwgICAgJFJPVzExX0RBVEEsICVlYnggICAgICAgIC8qIG9ubHkgb3RoZXIgbGVnaXRpbWF0ZSB2YWx1ZXMgYXJlIDExICovCi0gICAgICAgIGp6ICAgICAgb25seTIKLSAgICAgICAgY21wbCAgICAkUk9XMTJfREFUQSwgJWVieCAgICAgICAgLyogYW5kIDEyICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIGl0cyBiYWQgaWYgbm90IDExIG9yIDEyISAqLwotCQorCisJbW92dyAgICAkOCwlZGkgICAgICAgICAgICAgICAgICAgLyogdmFsdWUgZm9yIDQgYmFua3MgaW4gREkgKEJOS19DTlQgYml0KSAqLworCWNtcGwgICAgJFJPVzExX0RBVEEsICVlYnggICAgICAgIC8qIG9ubHkgb3RoZXIgbGVnaXRpbWF0ZSB2YWx1ZXMgYXJlIDExICovCisJanogICAgICBvbmx5MgorCWNtcGwgICAgJFJPVzEyX0RBVEEsICVlYnggICAgICAgIC8qIGFuZCAxMiAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIGl0cyBiYWQgaWYgbm90IDExIG9yIDEyISAqLworCiAJLyogZmFsbCB0aHJvdWdoICovCi1vbmx5MjogCitvbmx5MjoKICAvKgogICAqIHZhbGlkYXRlIHJvdyBtYXNrCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzE0X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIGJhY2sgdG8gbWF4IHJvdyB3cmFwIGFkZHIgKi8KKwltb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyBiYWNrIHRvIG1heCByb3cgd3JhcCBhZGRyICovCiAJbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCBhY3R1YWwgbnVtYmVyIG9mIHJvd3MgQCByb3cxNCBhZHIgKi8KIAotICAgICAgICBjbXBsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiByb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gMTEgcGF0dGVybiAqLwotICAgICAgICBqYiAgICAgIGJhZF9yYW0KKwljbXBsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiByb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gMTEgcGF0dGVybiAqLworCWpiICAgICAgYmFkX3JhbQogCi0gICAgICAgIGNtcGwgICAgJFJPVzE0X0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTQgcGF0dGVybiAqLwotICAgICAgICBqYSAgICAgIGJhZF9yYW0KKwljbXBsICAgICRST1cxNF9EQVRBLCAlZWF4ICAgICAgICAvKiBhbmQgcm93IG11c3QgYmUgbGVzcyB0aGFuIDE0IHBhdHRlcm4gKi8KKwlqYSAgICAgIGJhZF9yYW0KIAotICAgICAgICBjbXBiICAgICVhaCwlYWwgICAgICAgICAgICAgICAgICAvKiB2ZXJpZnkgYWxsIDQgYnl0ZXMgb2YgZHdvcmQgc2FtZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0KLSAgICAgICAgbW92bCAgICAlZWF4LCVlYngKLSAgICAgICAgc2hybCAgICAkMTYsJWVieAotICAgICAgICBjbXB3ICAgICVieCwlYXgKLSAgICAgICAgam56ICAgICBiYWRfcmFtCisJY21wYiAgICAlYWgsJWFsICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IGFsbCA0IGJ5dGVzIG9mIGR3b3JkIHNhbWUgKi8KKwlqbnogICAgIGJhZF9yYW0KKwltb3ZsICAgICVlYXgsJWVieAorCXNocmwgICAgJDE2LCVlYngKKwljbXB3ICAgICVieCwlYXgKKwlqbnogICAgIGJhZF9yYW0KICAvKgogICAqIHJlYWQgY29sIDExIHdyYXAgYWRyIGZvciByZWFsIGNvbHVtbiBkYXRhIHZhbHVlCiAgICovCi0gICAgICAgIG1vdmwgICAgJENPTDExX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1heCBjb2wgKDExKSB3cmFwIGFkZHIgKi8KKwltb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCiAJbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCByZWFsIGNvbCBudW1iZXIgYXQgbWF4IGNvbCBhZHIgKi8KICAvKgogICAqIHZhbGlkYXRlIGNvbHVtbiBkYXRhCiAgICovCi0gICAgICAgIGNtcGwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIGNvbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiA4IHBhdHRlcm4gKi8KLSAgICAgICAgamIgICAgICBiYWRfcmFtCisJY21wbCAgICAkQ09MMDhfREFUQSwgJWVheCAgICAgICAgLyogY29sIG11c3QgYmUgZ3JlYXRlciB0aGFuIDggcGF0dGVybiAqLworCWpiICAgICAgYmFkX3JhbQogCi0gICAgICAgIGNtcGwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTEgcGF0dGVybiAqLwotICAgICAgICBqYSAgICAgIGJhZF9yYW0KKwljbXBsICAgICRDT0wxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBhbmQgcm93IG11c3QgYmUgbGVzcyB0aGFuIDExIHBhdHRlcm4gKi8KKwlqYSAgICAgIGJhZF9yYW0KIAotICAgICAgICBzdWJsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBub3JtYWxpemUgY29sdW1uIGRhdGEgdG8gemVybyAqLwotICAgICAgICBqYyAgICAgIGJhZF9yYW0KLSAgICAgICAgY21wYiAgICAlYWgsJWFsICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IGFsbCA0IGJ5dGVzIG9mIGR3b3JkIGVxdWFsICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbQotICAgICAgICBtb3ZsICAgICVlYXgsJWVkeAotICAgICAgICBzaHJsICAgICQxNiwlZWR4Ci0gICAgICAgIGNtcHcgICAgJWR4LCVheAotICAgICAgICBqbnogICAgIGJhZF9yYW0KKwlzdWJsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBub3JtYWxpemUgY29sdW1uIGRhdGEgdG8gemVybyAqLworCWpjICAgICAgYmFkX3JhbQorCWNtcGIgICAgJWFoLCVhbCAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSBhbGwgNCBieXRlcyBvZiBkd29yZCBlcXVhbCAqLworCWpueiAgICAgYmFkX3JhbQorCW1vdmwgICAgJWVheCwlZWR4CisJc2hybCAgICAkMTYsJWVkeAorCWNtcHcgICAgJWR4LCVheAorCWpueiAgICAgYmFkX3JhbQogIC8qCiAgICogbWVyZ2UgYmFuayBhbmQgY29sIGRhdGEgdG9nZXRoZXIKICAgKi8KLSAgICAgICAgYWRkdyAgICAlZGksJWR4ICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugb2YgYmFuayBhbmQgY29sIGluZm8gaW4gZGwgKi8KKwlhZGR3ICAgICVkaSwlZHggICAgICAgICAgICAgICAgICAvKiBtZXJnZSBvZiBiYW5rIGFuZCBjb2wgaW5mbyBpbiBkbCAqLwogIC8qCiAgICogZml4IGVuZGluZyBhZGRyIG1hc2sgYmFzZWQgdXBvbiBjb2wgaW5mbwogICAqLwotICAgICAgICBtb3ZiICAgICQzLCVhbAotICAgICAgICBzdWJiICAgICVkaCwlYWwgICAgICAgICAgICAgICAgICAvKiBkaCBjb250YWlucyB0aGUgb3ZlcmZsb3cgZnJvbSB0aGUgYmFuay9jb2wgbWVyZ2UgICovCi0gICAgICAgIG1vdmIgICAgJWJsLCVkaCAgICAgICAgICAgICAgICAgIC8qIGJsIGNvbnRhaW5zIHRoZSByb3cgbWFzayAoYWEsIDA3LCAwZiwgMWYgb3IgM2YpICovCi0gICAgICAgIHhjaGd3ICAgJWN4LCVheCAgICAgICAgICAgICAgICAgIC8qIGN4ID0gYXggPSAzIG9yIDIgZGVwZW5kaW5nIG9uIDIgb3IgNCBiYW5rIGRldmljZSAqLwotICAgICAgICBzaHJiICAgICVjbCwlZGgJICAgICAgICAgICAgICAgICAvKiAgKi8KLSAgICAgICAgaW5jYiAgICAlZGggICAgICAgICAgICAgICAgICAgICAgLyogZW5kaW5nIGFkZHIgaXMgMSBncmVhdGVyIHRoYW4gcmVhbCBlbmQgKi8KLSAgICAgICAgeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggaXMgYmFuayBudW1iZXIgYWdhaW4gKi8KKwltb3ZiICAgICQzLCVhbAorCXN1YmIgICAgJWRoLCVhbCAgICAgICAgICAgICAgICAgIC8qIGRoIGNvbnRhaW5zIHRoZSBvdmVyZmxvdyBmcm9tIHRoZSBiYW5rL2NvbCBtZXJnZSAgKi8KKwltb3ZiICAgICVibCwlZGggICAgICAgICAgICAgICAgICAvKiBibCBjb250YWlucyB0aGUgcm93IG1hc2sgKGFhLCAwNywgMGYsIDFmIG9yIDNmKSAqLworCXhjaGd3ICAgJWN4LCVheCAgICAgICAgICAgICAgICAgIC8qIGN4ID0gYXggPSAzIG9yIDIgZGVwZW5kaW5nIG9uIDIgb3IgNCBiYW5rIGRldmljZSAqLworCXNocmIgICAgJWNsLCVkaAkgICAgICAgICAgICAgICAgIC8qICAqLworCWluY2IgICAgJWRoICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZGluZyBhZGRyIGlzIDEgZ3JlYXRlciB0aGFuIHJlYWwgZW5kICovCisJeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggaXMgYmFuayBudW1iZXIgYWdhaW4gKi8KICAvKgogICAqIGlzc3VlIGFsbCBiYW5rcyBwcmVjaGFyZ2UKICAgKi8KLWJhZF9yZWludDogCi0gICAgICAgIG1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCi0gICAgICAgIG1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KK2JhZF9yZWludDoKKwltb3ZsICAgICREUkNDVEwsICVlc2kgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLworCW1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KIAltb3ZiICAgICAlYWwsICglZXNpKQotICAgICAgICBtb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KKwltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KIAltb3Z3ICAgICAlYXgsICglZXNpKQogCiAgLyoKICAgKiB1cGRhdGUgRU5ESU5HIEFERFJFU1MgUkVHSVNURVIKICAgKi8KLSAgICAgICAgbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwotICAgICAgICBtb3ZsICAgICVlY3gsJWVieAorCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwltb3ZsICAgICVlY3gsJWVieAogCWFkZGwJJWVieCwgJWVkaQogCW1vdmIgICAgJWRoLCAoJWVkaSkKICAvKgogICAqIHVwZGF0ZSBDT05GSUcgUkVHSVNURVIKICAgKi8KLSAgICAgICAgeG9yYiAgICAlZGgsJWRoCi0gICAgICAgIG1vdncgICAgJDB4MDBmLCVieAotICAgICAgICBtb3Z3ICAgICVjeCwlYXgKLSAgICAgICAgc2hsdyAgICAkMiwlYXgKLSAgICAgICAgeGNoZ3cgICAlY3gsJWF4Ci0gICAgICAgIHNobHcgICAgJWNsLCVkeAotICAgICAgICBzaGx3ICAgICVjbCwlYngKLSAgICAgICAgbm90dyAgICAlYngKLSAgICAgICAgeGNoZ3cgICAlY3gsJWF4Ci0gICAgICAgIG1vdmwgICAgJERSQ0NGRywgJWVkaQorCXhvcmIgICAgJWRoLCVkaAorCW1vdncgICAgJDB4MDBmLCVieAorCW1vdncgICAgJWN4LCVheAorCXNobHcgICAgJDIsJWF4CisJeGNoZ3cgICAlY3gsJWF4CisJc2hsdyAgICAlY2wsJWR4CisJc2hsdyAgICAlY2wsJWJ4CisJbm90dyAgICAlYngKKwl4Y2hndyAgICVjeCwlYXgKKwltb3ZsICAgICREUkNDRkcsICVlZGkKIAltb3YgICAgICglZWRpKSwgJWF4Ci0gICAgICAgIGFuZHcgICAgJWJ4LCVheAotICAgICAgICBvcncgICAgICVkeCwlYXgKKwlhbmR3ICAgICVieCwlYXgKKwlvcncgICAgICVkeCwlYXgKIAltb3Z3ICAgICVheCwgKCVlZGkpCi0gICAgICAgIGpjeHogICAgY2xlYW51cAorCWpjeHogICAgY2xlYW51cAogCi0gICAgICAgIGRlY3cgICAgJWN4Ci0gICAgICAgIG1vdmwgICAgJWVjeCwlZWJ4Ci0gICAgICAgIG1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLSAgICAgICAgbW92YiAgICAkMHhmZiwlYWwKKwlkZWN3ICAgICVjeAorCW1vdmwgICAgJWVjeCwlZWJ4CisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLworCW1vdmIgICAgJDB4ZmYsJWFsCiAJYWRkbAklZWJ4LCAlZWRpCiAJbW92YiAgICAlYWwsICglZWRpKQogIC8qCi0gICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUgCisgICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUKICAgKi8KLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZXNpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KLSAgICAgICAgbW92YiAgICAkMHgwLCVhbCAgICAgICAgICAgICAgICAgLyogTm9ybWFsIG1vZGUgdmFsdWUgKi8KKwltb3ZsICAgICREUkNDVEwsICVlc2kgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLworCW1vdmIgICAgJDB4MCwlYWwgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBtb2RlIHZhbHVlICovCiAJbW92YiAgICAlYWwsICglZXNpKQotICAgICAgICBtb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KKwltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KIAltb3Z3ICAgICVheCwgKCVlc2kpCi0gICAgICAgIGptcCAgICAgbmV4dGJhbmsKKwlqbXAgICAgIG5leHRiYW5rCiAKLWNsZWFudXA6IAotICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLwotICAgICAgICBtb3Z3ICAgICQ0LCVjeAotICAgICAgICB4b3J3ICAgICVheCwlYXgKLWNsZWFudXBscDogCitjbGVhbnVwOgorCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgICovCisJbW92dyAgICAkNCwlY3gKKwl4b3J3ICAgICVheCwlYXgKK2NsZWFudXBscDoKIAltb3ZiICAgKCVlZGkpLCAlYWwKLSAgICAgICAgb3JiICAgICAlYWwsJWFsCi0gICAgICAgIGp6ICAgICAgZW1wdHliYW5rCisJb3JiICAgICAlYWwsJWFsCisJanogICAgICBlbXB0eWJhbmsKIAotICAgICAgICBhZGRiICAgICVhaCwlYWwKLSAgICAgICAgam5zICAgICBub3R0b29tdWNoCisJYWRkYiAgICAlYWgsJWFsCisJam5zICAgICBub3R0b29tdWNoCiAKLSAgICAgICAgbW92YiAgICAkMHg3ZiwlYWwKLW5vdHRvb211Y2g6IAotICAgICAgICBtb3ZiICAgICVhbCwlYWgKLSAgICAgICAgb3JiICAgICAkMHg4MCwlYWwKKwltb3ZiICAgICQweDdmLCVhbAorbm90dG9vbXVjaDoKKwltb3ZiICAgICVhbCwlYWgKKwlvcmIgICAgICQweDgwLCVhbAogCW1vdmIgICAgJWFsLCAoJWVkaSkKLWVtcHR5YmFuazogCi0gICAgICAgIGluY2wgICAgJWVkaQotICAgICAgICBsb29wICAgIGNsZWFudXBscAorZW1wdHliYW5rOgorCWluY2wgICAgJWVkaQorCWxvb3AgICAgY2xlYW51cGxwCiAKICNpZiBkZWZpbmVkKENGR19TRFJBTV9DQVNfTEFURU5DWV8yVCkgfHwgZGVmaW5lZChDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QpCiAJLyogc2V0IHRoZSBDQVMgbGF0ZW5jeSBub3cgc2luY2UgaXQgaXMgaGFyZCB0byBkbwogCSAqIHdoZW4gd2UgcnVuIGZyb20gdGhlIFJBTSAqLwogCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgIC8qIERSQU0gdGltaW5nIHJlZ2lzdGVyICovCi0JbW92YiAgICAoJWVkaSksICVhbAkKKwltb3ZiICAgICglZWRpKSwgJWFsCiAjaWZkZWYgQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzJUCiAJYW5kYiAgICAkMHhlZiwgJWFsCiAjZW5kaWYKICNpZmRlZiBDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QKIAlvcmIgICAgICQweDEwLCAlYWwKLSNlbmRpZgkgCisjZW5kaWYKIAltb3ZiICAgICVhbCwgKCVlZGkpCiAjZW5kaWYKLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCi0gICAgICAgIG1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KKwltb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBEUkFNIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwltb3ZiICAgICQweDMsJWFsICAgICAgICAgICAgICAgICAvKiBMb2FkIG1vZGUgcmVnaXN0ZXIgY21kICovCiAJbW92YiAgICAgJWFsLCAoJWVkaSkKIAltb3Z3ICAgICAlYXgsICglZXNpKQogCiAKLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCi0gICAgICAgIG1vdmIgICAgJDB4MTgsJWFsICAgICAgICAgICAgICAgIC8qICBFbmFibGUgcmVmcmVzaCBhbmQgTk9STUFMIG1vZGUgKi8KKwltb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBEUkFNIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwltb3ZiICAgICQweDE4LCVhbCAgICAgICAgICAgICAgICAvKiAgRW5hYmxlIHJlZnJlc2ggYW5kIE5PUk1BTCBtb2RlICovCiAJbW92YiAgICAlYWwsICglZWRpKQogCi0gICAgICAgIGptcCAgICAgZHJhbV9kb25lCisJam1wICAgICBkcmFtX2RvbmUKIAotYmFkX3JhbTogCi0gICAgICAgIHhvcmwgICAgJWVkeCwlZWR4Ci0gICAgICAgIHhvcmwgICAgJWVkaSwlZWRpCi0gICAgICAgIGptcCAgICAgYmFkX3JlaW50CitiYWRfcmFtOgorCXhvcmwgICAgJWVkeCwlZWR4CisJeG9ybCAgICAlZWRpLCVlZGkKKwlqbXAgICAgIGJhZF9yZWludAogCi1kcmFtX2RvbmU6IAotCQorZHJhbV9kb25lOgorCiAJLyogcmVhZGJhY2sgRFJDQkVOREFEUiBhbmQgcmV0dXJuIHRoZSBudW1iZXIKLQkgKiBvZiBhdmFpbGFibGUgcmFtIGJ5dGVzIGluICVlYXggKi8gCisJICogb2YgYXZhaWxhYmxlIHJhbSBieXRlcyBpbiAlZWF4ICovCiAKLSAgICAgICAgbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAgKi8KLQkKKwltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLworCiAJbW92bAkoJWVkaSksICVlYXgKIAltb3ZsCSVlYXgsICVlY3gKIAlhbmRsCSQweDgwMDAwMDAwLCAlZWN4CiAJanoJYmFuazIKIAlhbmRsCSQweDdmMDAwMDAwLCAlZWF4Ci0Jc2hybAkkMiwgJWVheCAKKwlzaHJsCSQyLCAlZWF4CiAJbW92bAklZWF4LCAlZWJ4CiAKIGJhbmsyOiAJbW92bAkoJWVkaSksICVlYXgKQEAgLTUwOSw3ICs1MDksNyBAQAogCWFuZGwJJDB4MDA4MDAwMDAsICVlY3gKIAlqegliYW5rMQogCWFuZGwJJDB4MDA3ZjAwMDAsICVlYXgKLQlzaGxsCSQ2LCAlZWF4IAorCXNobGwJJDYsICVlYXgKIAltb3ZsCSVlYXgsICVlYngKIAogYmFuazE6IAltb3ZsCSglZWRpKSwgJWVheApAQCAtNTE3LDcgKzUxNyw3IEBACiAJYW5kbAkkMHgwMDAwODAwMCwgJWVjeAogCWp6CWJhbmswCiAJYW5kbAkkMHgwMDAwN2YwMCwgJWVheAotCXNobGwJJDE0LCAlZWF4IAorCXNobGwJJDE0LCAlZWF4CiAJbW92bAklZWF4LCAlZWJ4CiAKIGJhbmswOiAJbW92bAkoJWVkaSksICVlYXgKQEAgLTUyNSw3ICs1MjUsNyBAQAogCWFuZGwJJDB4MDAwMDAwODAsICVlY3gKIAlqeglkb25lCiAJYW5kbAkkMHgwMDAwMDA3ZiwgJWVheAotCXNobGwJJDIyLCAlZWF4IAorCXNobGwJJDIyLCAlZWF4CiAJbW92bAklZWF4LCAlZWJ4CiAKIGRvbmU6CW1vdmwJJWVieCwgJWVheApkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc2VyaWFsLmMgYi9jcHUvaTM4Ni9zZXJpYWwuYwppbmRleCAyMmMzYzJhLi5mNThiNDdjIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9zZXJpYWwuYworKysgYi9jcHUvaTM4Ni9zZXJpYWwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQotICogCisgKgogICogKEMpIENvcHlyaWdodCAyMDAwCiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKQEAgLTgxLDcgKzgxLDYgQEAKICNkZWZpbmUgYXN5bmNMU1JSeEZpZm9FcnJvcjEgICAgICAgICAgMHg4MAogCiAKLQogI2lmIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgfCBGaWZvCkBAIC0xMDAsNyArOTksNyBAQAogCiBzdGF0aWMgaW50IHNlcmlhbF9kaXYoaW50IGJhdWRyYXRlKQogewotCQorCiAJc3dpdGNoIChiYXVkcmF0ZSkgewogCWNhc2UgMTIwMDoKIAkJcmV0dXJuIDk2OwpAQCAtMTEzLDkgKzExMiw5IEBACiAJY2FzZSA1NzYwMDoKIAkJcmV0dXJuIDI7CiAJY2FzZSAxMTUyMDA6Ci0JCXJldHVybiAxOwkJCisJCXJldHVybiAxOwogCX0KLQkKKwogCXJldHVybiAxMjsKIH0KIApAQCAtMTMyLDcgKzEzMSw3IEBACiAJdm9sYXRpbGUgY2hhciB2YWw7CiAKIAlpbnQgYmRpdiA9IHNlcmlhbF9kaXYoZ2QtPmJhdWRyYXRlKTsKLSAgICAKKwogCiAJb3V0YigweDgwLCBVQVJUMF9CQVNFICsgVUFSVF9MQ1IpOwkvKiBzZXQgRExBQiBiaXQgKi8KIAlvdXRiKGJkaXYsIFVBUlQwX0JBU0UgKyBVQVJUX0RMTCk7CS8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCkBAIC0xNTQsNyArMTUzLDcgQEAKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAogCXVuc2lnbmVkIHNob3J0IGJkaXY7Ci0JCisKIAliZGl2ID0gc2VyaWFsX2RpdihnZC0+YmF1ZHJhdGUpOwogCiAJb3V0YigweDgwLCBVQVJUMF9CQVNFICsgVUFSVF9MQ1IpOwkvKiBzZXQgRExBQiBiaXQgKi8KQEAgLTE5OSw3ICsxOTgsNyBAQAogCQlyZXR1cm4gc2VyaWFsX2J1ZmZlcmVkX2dldGMoKTsKIAl9CiAjZW5kaWYKLQkKKwogCXdoaWxlICgxKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfSFdfV0FUQ0hET0cpCiAJCVdBVENIRE9HX1JFU0VUKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KQEAgLTI2MiwyOCArMjYxLDI4IEBACiAJfSBlbHNlIHsKIAkJc3BhY2UgPSBidWZfaW5mby5yeF9nZXQgLSByeF9wdXQ7CiAJfQotCQorCiAJd2hpbGUgKGluYihVQVJUMF9CQVNFICsgVUFSVF9MU1IpICYgMSkgewogCQljID0gaW5iKFVBUlQwX0JBU0UpOwogCQlpZiAoc3BhY2UpIHsKIAkJCWJ1Zl9pbmZvLnJ4X2J1ZmZlcltyeF9wdXQrK10gPSBjOwogCQkJc3BhY2UtLTsKLQkJCQorCiAJCQlpZiAocnhfcHV0ID09IGJ1Zl9pbmZvLnJ4X2dldCkgewogCQkJCWJ1Zl9pbmZvLnJ4X2dldCsrOwogCQkJCWlmIChyeF9wdXQgPT0gQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPKSB7CiAJCQkJCWJ1Zl9pbmZvLnJ4X2dldCA9IDA7CiAJCQkJfQogCQkJfQotCQkJCisKIAkJCWlmIChyeF9wdXQgPT0gQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPKSB7CiAJCQkJcnhfcHV0ID0gMDsKIAkJCQlpZiAoMCA9PSBidWZfaW5mby5yeF9nZXQpIHsKIAkJCQkJYnVmX2luZm8ucnhfZ2V0ID0gMTsKIAkJCQl9Ci0JCQkKKwogCQkJfQotCQkJCisKIAkJfQogCQlpZiAoc3BhY2UgPCBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gLyA0KSB7CiAJCQkvKiBTdG9wIGZsb3cgYnkgc2V0dGluZyBSVFMgaW5hY3RpdmUgKi8KQEAgLTMwOSwyMCArMzA4LDIwIEBACiAJCWJ1Zl9pbmZvLmN0cyA9IDA7CiAJfQogCi0JaXJxX2luc3RhbGxfaGFuZGxlciAoIFZFQ05VTV9VMCAvKlVBUlQwICovLyppbnQgdmVjICovICwKKwlpcnFfaW5zdGFsbF9oYW5kbGVyICggVkVDTlVNX1UwIC8qVUFSVDAgKi8gLyppbnQgdmVjICovICwKIAkJCSAgICAgIHNlcmlhbF9pc3IgLyppbnRlcnJ1cHRfaGFuZGxlcl90ICpoYW5kbGVyICovICwKIAkJCSAgICAgICh2b2lkICopICZidWZfaW5mbyAvKnZvaWQgKmFyZyAqLyApOwogCiAJLyogRW5hYmxlICJSWCBEYXRhIEF2YWlsYWJsZSIgSW50ZXJydXB0IG9uIFVBUlQgKi8KIAkvKiBvdXRiKGluYihVQVJUMF9CQVNFICsgVUFSVF9JRVIpIHwweDAxLCBVQVJUMF9CQVNFICsgVUFSVF9JRVIpOyAqLwogCW91dGIoMHgwMSwgVUFSVDBfQkFTRSArIFVBUlRfSUVSKTsKLQkKKwogCS8qIFNldCBEVFIgYW5kIFJUUyBhY3RpdmUsIGVuYWJsZSBpbnRlcnJ1cHRzICAqLwogCW91dGIoaW5iIChVQVJUMF9CQVNFICsgVUFSVF9NQ1IpIHwgMHgwYiwgVUFSVDBfQkFTRSArIFVBUlRfTUNSKTsKLQkKKwogCS8qIFNldHVwIFVBUlQgRklGTzogUlggdHJpZ2dlciBsZXZlbDogMSBieXRlLCBFbmFibGUgRklGTyAqLwogCW91dGIoIC8qKDEgPDwgNikgfCovICAxLCBVQVJUMF9CQVNFICsgVUFSVF9GQ1IpOwotCQorCiAJc2VyaWFsX2J1ZmZlcl9hY3RpdmUgPSAxOwogfQogCkBAIC0zNDgsNyArMzQ3LDcgQEAKIAkJCWJ1Zl9pbmZvLmN0cyA9IDE7CiAJCX0KIAl9Ci0JCQorCiAjZW5kaWYKIAlzZXJpYWxfcHV0YyAoYyk7CiB9CkBAIC01MDgsNCArNTA3LDMgQEAKIH0KICNlbmRpZgkvKiAoQ09ORklHX0tHREJfU0VSX0lOREVYICYgMikgKi8KICNlbmRpZgkvKiBDRkdfQ01EX0tHREIgKi8KLQpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc3RhcnQuUyBiL2NwdS9pMzg2L3N0YXJ0LlMKaW5kZXggMDI1NTU1Yy4uYWZjYmIyNCAxMDA2NDQKLS0tIGEvY3B1L2kzODYvc3RhcnQuUworKysgYi9jcHUvaTM4Ni9zdGFydC5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZSAKKyAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZQogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDIJT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICAqCkBAIC0yNiw3MSArMjYsNzEgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDx2ZXJzaW9uLmg+CiAKLQkKKwogLnNlY3Rpb24gLnRleHQKIC5jb2RlMzIKIC5nbG9ibCBfc3RhcnQKLS50eXBlIF9zdGFydCwgQGZ1bmN0aW9uCQorLnR5cGUgX3N0YXJ0LCBAZnVuY3Rpb24KIC5nbG9ibCBfaTM4NmJvb3Rfc3RhcnQKIF9pMzg2Ym9vdF9zdGFydDoKLV9zdGFydDoJCQotICAgICAgICBtb3ZsICAgICQweDE4LCVlYXggICAgICAgICAJLyogTG9hZCBvdXIgc2VnZW1lbnQgcmVnaXN0ZXMsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGdkdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgYnkgc3RhcnQxNi5TICovCi0gICAgICAgIG1vdncgICAgJWF4LCVmcworX3N0YXJ0OgorCW1vdmwgICAgJDB4MTgsJWVheCAgICAgICAgIAkvKiBMb2FkIG91ciBzZWdlbWVudCByZWdpc3RlcywgdGhlCisJCQkJCSAqIGdkdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgYnkgc3RhcnQxNi5TICovCisJbW92dyAgICAlYXgsJWZzCiAJbW92dwklYXgsJWRzCi0gICAgICAgIG1vdncgICAgJWF4LCVncwotICAgICAgICBtb3Z3ICAgICVheCwlZXMKLSAgICAgICAgbW92dyAgICAlYXgsJXNzCi0JCisJbW92dyAgICAlYXgsJWdzCisJbW92dyAgICAlYXgsJWVzCisJbW92dyAgICAlYXgsJXNzCisKIAkvKiBXZSBjYWxsIGEgZmV3IGZ1bmN0aW9ucyBpbiB0aGUgYm9hcmQgc3VwcG9ydCBwYWNrYWdlCiAJICogc2luY2Ugd2UgaGF2ZSBubyBzdGFjayB5ZXQgd2UnbGwgaGF2ZSB0byB1c2UgJWVicAogCSAqIHRvIHN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyAqLwotCQorCiAJLyogRWFybHkgcGxhdGZvcm0gaW5pdCAoc2V0dXAgZ3BpbywgZXRjICkgKi8KIAltb3YgICAgICRlYXJseV9ib2FyZF9pbml0X3JldCwgJWVicAogCWptcAllYXJseV9ib2FyZF9pbml0CiBlYXJseV9ib2FyZF9pbml0X3JldDoKLQkKKwogCS8qIFRoZSBfX3BvcnQ4MCBlbnRyeS1wb2ludCBzaG91bGQgYmUgdXNhYmUgYnkgbm93ICovCiAJLyogc28gd2UgdHJ5IHRvIGluZGljYXRlIHByb2dyZXNzICovCi0JbW92dwkkMHgwMSwgJWF4ICAgIAorCW1vdncJJDB4MDEsICVheAogCW1vdmwJJC5wcm9ncmVzczAsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLS5wcm9ncmVzczA6ICAJCisucHJvZ3Jlc3MwOgogCiAJLyogc2l6ZSBtZW1vcnkgKi8KIAltb3YJJG1lbV9pbml0X3JldCwgJWVicAotCWptcCAgICAgbWVtX2luaXQJCQorCWptcCAgICAgbWVtX2luaXQKIG1lbV9pbml0X3JldDoKLQkKLQkvKiBjaGVjayBhbW1vdW50IG9mIGNvbmZpZ3VyZWQgbWVtb3J5IAotCSAqICh3ZSBuZWVkIGF0bGVhc3QgYnNzIHN0YXJ0K2JzcyBzaXplK3N0YWNrIHNpemUpICovCQkKKworCS8qIGNoZWNrIGFtbW91bnQgb2YgY29uZmlndXJlZCBtZW1vcnkKKwkgKiAod2UgbmVlZCBhdGxlYXN0IGJzcyBzdGFydCtic3Mgc2l6ZStzdGFjayBzaXplKSAqLwogCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlY3ggICAgICAgIC8qIEJTUyBzdGFydCAqLwotCWFkZGwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCQorCWFkZGwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCiAJYWRkbAkkQ0ZHX1NUQUNLX1NJWkUsICVlY3gKLQljbXBsCSVlY3gsICVlYXggCisJY21wbAklZWN4LCAlZWF4CiAJamFlCW1lbV9vawotCQorCiAJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCi0JbW92dwkkMHg4MSwgJWF4ICAgIAorCW1vdncJJDB4ODEsICVheAogCW1vdmwJJC5wcm9ncmVzczBhLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MwYTogIAkKKy5wcm9ncmVzczBhOgogCWptcCAJZGllCi1tZW1fb2s6CQorbWVtX29rOgogCiAJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDAyLCAlYXggICAgCisJbW92dwkkMHgwMiwgJWF4CiAJbW92bAkkLnByb2dyZXNzMSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMTogIAkKKy5wcm9ncmVzczE6CiAKIAkvKiBjcmVhdGUgYSBzdGFjayBhZnRlciB0aGUgYnNzICovCi0gICAgICAgIG1vdmwgICAgJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlYXgKKwltb3ZsICAgICRfaTM4NmJvb3RfYnNzX3N0YXJ0LCAlZWF4CiAJYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWF4CiAJYWRkbAkkQ0ZHX1NUQUNLX1NJWkUsICVlYXgKLSAgICAgICAgbW92bCAgICAlZWF4LCAlZXNwCi0JCisJbW92bCAgICAlZWF4LCAlZXNwCisKIAlwdXNobAkkMAogCXBvcGwJJWVheAogCWNtcGwJJDAsICVlYXgKQEAgLTEwMiw4MyArMTAyLDgzIEBACiAKIG5vX3N0YWNrOgogCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwotCW1vdncJJDB4ODIsICVheCAgICAKKwltb3Z3CSQweDgyLCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MxYSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMWE6ICAJCisucHJvZ3Jlc3MxYToKIAlqbXAgZGllCi0JCi0JCi1zdGFja19vazoJCisKKworc3RhY2tfb2s6CiAJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDAzLCAlYXggICAgCisJbW92dwkkMHgwMywgJWF4CiAJbW92bAkkLnByb2dyZXNzMiwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMjogIAkKKy5wcm9ncmVzczI6CiAKIAkvKiBjb3B5IGRhdGEgc2VjdGlvbiB0byByYW0sIHNpemUgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCAqLwogCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX2Rlc3QsICVlZGkJICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0gCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0LCAlZXNpCSAgLyogc291cmNlIGFkZHJlc3MgKi8KKwltb3ZsCSRfaTM4NmJvb3Rfcm9tZGF0YV9zdGFydCwgJWVzaQkgIC8qIHNvdXJjZSBhZGRyZXNzICovCiAJbW92bAkkX2kzODZib290X3JvbWRhdGFfc2l6ZSwgJWVjeCAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKi8KIAltb3ZsCSVlY3gsICVlYXgKIAlhbmRsCSQzLCAlZWF4CiAJam56CWRhdGFfZmFpbAotCQorCiAJc2hybAkkMiwgJWVjeAkgICAgICAgICAgICAgICAgICAvKiBjb3B5IDQgYnl0ZSBlYWNoIHRpbWUgKi8KLQljbGQJIAorCWNsZAogCWNtcGwJJDAsICVlY3gKLQlqZQlkYXRhX29rCQotZGF0YV9zZWdtZW50OgkKLQltb3ZzbAkJCisJamUJZGF0YV9vaworZGF0YV9zZWdtZW50OgorCW1vdnNsCiAJbG9vcAlkYXRhX3NlZ21lbnQKIAlqbXAJZGF0YV9vawogZGF0YV9mYWlsOgogCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwotCW1vdncJJDB4ODMsICVheCAgICAKKwltb3Z3CSQweDgzLCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MyYSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMmE6ICAJCisucHJvZ3Jlc3MyYToKIAlqbXAgCWRpZQogCi1kYXRhX29rOgkKK2RhdGFfb2s6CiAKIAkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLwotCW1vdncJJDB4MDQsICVheCAgICAKKwltb3Z3CSQweDA0LCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MzLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MzOiAgCQorLnByb2dyZXNzMzoKIAogCS8qIGNsZWFyIGJzcyBzZWN0aW9uIGluIHJhbSwgc2l6ZSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICAqLwogCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlYXggICAgICAgIC8qIEJTUyBzdGFydCAqLwotCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCQorCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCiAJbW92bAklZWN4LCAlZWF4CiAJYW5kbAkkMywgJWVheAogCWpueglic3NfZmFpbAogCXNocmwJJDIsICVlY3gJICAgICAgICAgICAgICAgICAgLyogY2xlYXIgNCBieXRlIGVhY2ggdGltZSAqLwotCWNsZAkJICAgICAgCisJY2xkCiAJY21wbAkkMCwgJWVjeAotCWplCWJzc19vawkKLWJzczoJCisJamUJYnNzX29rCitic3M6CiAJbW92bAkkMCwgKCVlZGkpCi0JYWRkCSQ0LCAlZWRpCQkJCisJYWRkCSQ0LCAlZWRpCiAJbG9vcAlic3MKIAlqbXAgCWJzc19vawogCiBic3NfZmFpbDoKIAkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDg0LCAlYXggICAgCisJbW92dwkkMHg4NCwgJWF4CiAJbW92bAkkLnByb2dyZXNzM2EsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLS5wcm9ncmVzczNhOiAgCQorLnByb2dyZXNzM2E6CiAJam1wIAlkaWUKIAotYnNzX29rOgkKK2Jzc19vazoKIAotCXdiaW52ZAkgCisJd2JpbnZkCiAKIAogCS8qIGluZGljYXRlIHByb2dyZXNzICovCi0JbW92dwkkMHgwNSwgJWF4ICAgIAorCW1vdncJJDB4MDUsICVheAogCW1vdmwJJC5wcm9ncmVzczQsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKIC5wcm9ncmVzczQ6CkBAIC0xODYsMTMgKzE4NiwxMSBAQAogCWNhbGwJc3RhcnRfaTM4NmJvb3QgIC8qIEVudGVyLCBVLWJvb3QhICovCiAKIAkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDg1LCAlYXggICAgCisJbW92dwkkMHg4NSwgJWF4CiAJbW92bAkkLnByb2dyZXNzNGEsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKIC5wcm9ncmVzczRhOgogCiBkaWU6CWhsdAogCWptcAlkaWUKLQlobHQgICAgICAgICAgICAgICAgICAgICAKLQotCisJaGx0CmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zdGFydDE2LlMgYi9jcHUvaTM4Ni9zdGFydDE2LlMKaW5kZXggYTM0NjQyZi4uMjM5ZjJmZiAxMDA2NDQKLS0tIGEvY3B1L2kzODYvc3RhcnQxNi5TCisrKyBiL2NwdS9pMzg2L3N0YXJ0MTYuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUgCisgKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIE9taWNyb24gQ2V0aSBBQiwgRGFuaWVsIEVuZ3N0cvZtIDxkZW5haWVsQG9taWNyb24uc2U+CiAgKgpAQCAtMzAsMzcgKzMwLDM3IEBACiAuc2VjdGlvbiAuc3RhcnQxNiwgImF4IgogLmNvZGUxNgogLmdsb2JsIHN0YXJ0MTYKLXN0YXJ0MTY6IAorc3RhcnQxNjoKIAkvKiBGaXJzdCB3ZSBsZXQgdGhlIEJTUCBkbyBzb21lIGVhcmx5IGluaXRpYWxpemF0aW9uCiAJICogdGhpcyBjb2RlIGhhdmUgdG8gbWFwIHRoZSBmbGFzaCB0byBpdHMgZmluYWwgcG9zaXRpb24KIAkgKi8KIAltb3YJJGJvYXJkX2luaXQxNl9yZXQsICVicAogCWptcAlib2FyZF9pbml0MTYKLWJvYXJkX2luaXQxNl9yZXQ6CQotCQorYm9hcmRfaW5pdDE2X3JldDoKKwogCS8qIFR1cm4gb2YgY2FjaGUgKHRoaXMgbWlnaHQgcmVxdWlyZSBhIDQ4Ni1jbGFzcyBDUFUpICovCi0gICAgICAgIG1vdmwgICAgJWNyMCwgJWVheAotICAgICAgICBvcmwgICAgICQweDYwMDAwMDAwLCVlYXgKLSAgICAgICAgbW92bCAgICAlZWF4LCAlY3IwCi0gICAgICAgIHdiaW52ZCAgCQkgICAgIAotCQorCW1vdmwgICAgJWNyMCwgJWVheAorCW9ybCAgICAgJDB4NjAwMDAwMDAsJWVheAorCW1vdmwgICAgJWVheCwgJWNyMAorCXdiaW52ZAorCiAJLyogbG9hZCB0aGUgZGVzY3JpcHRvciB0YWJsZXMgKi8KIG8zMiBjcwlsaWR0CWlkdF9wdHIKLW8zMiBjcwlsZ2R0ICAgIGdkdF9wdHIJCSAKK28zMiBjcwlsZ2R0ICAgIGdkdF9wdHIKIAogCiAJLyogTm93LCB3ZSBlbnRlciBwcm90ZWN0ZWQgbW9kZSAqLwotICAgICAgICBtb3ZsICAgICVjcjAsICVlYXggICAgICAgICAgICAgICAKLSAgICAgICAgb3JsICAgICAkMSwlZWF4ICAgICAgICAgICAgICAgICAgCi0gICAgICAgIG1vdmwgICAgJWVheCwgJWNyMCAgICAgICAgICAgIAotCQorCW1vdmwgICAgJWNyMCwgJWVheAorCW9ybCAgICAgJDEsJWVheAorCW1vdmwgICAgJWVheCwgJWNyMAorCiAJLyogRmx1c2ggdGhlIHByZWZldGNoIHF1ZXVlICovCi0gICAgICAgIGptcCAgICAgZmYgICAgICAgIAorCWptcCAgICAgZmYKIGZmOgogCiAJLyogRmluYWxseSBqdW1wIHRvIHRoZSAzMmJpdCBpbml0aWFsaXphdGlvbiBjb2RlICovCi0JbW92dwkkY29kZTMyc3RhcnQsICVheCAKLSAgICAgICAgbW92dyAgICAlYXgsJWJwCisJbW92dwkkY29kZTMyc3RhcnQsICVheAorCW1vdncgICAgJWF4LCVicAogbzMyIGNzCWxqbXAJKiglYnApCiAKIAkvKiA0OC1iaXQgZmFyIHBvaW50ZXIgKi8KQEAgLTcxLDE3ICs3MSwxNyBAQAogaWR0X3B0cjoKIAkud29yZAkwCQkJCS8qIGxpbWl0ICovCiAJLmxvbmcJMAkJICAgICAgIAkJLyogYmFzZSAqLwotCQorCiBnZHRfcHRyOgogCS53b3JkCTB4MzAJCQkgICAgICAgIC8qIGxpbWl0ICg0OCBieXRlcyA9IDYgR0RUIGVudHJpZXMpICovCiAJLmxvbmcJQk9PVF9TRUcgKyBnZHQJICAgICAgICAJLyogYmFzZSAqLwogCi0JLyogVGhlIEdEVCB0YWJsZSAuLi4gCisJLyogVGhlIEdEVCB0YWJsZSAuLi4KIAkgKgotCSAqICAgICAgIFNlbGVjdG9yCVR5cGUgCisJICogICAgICAgU2VsZWN0b3IJVHlwZQogCSAqIAkgMHgwMAkJTlVMTAogCSAqIAkgMHgwOAkJVW51c2VkCi0JICoJIDB4MTAJCTMyYml0IGNvZGUgCisJICoJIDB4MTAJCTMyYml0IGNvZGUKIAkgKgkgMHgxOAkJMzJiaXQgZGF0YS9zdGFjawogCSAqCSAweDIwCQkxNmJpdCBjb2RlCiAJICoJIDB4MjgJIAkxNmJpdCBkYXRhL3N0YWNrCkBAIC0xMDAsMTIgKzEwMCwxMiBAQAogCS53b3JkCTB4MAkJCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCiAJLndvcmQJMHg5MzAwCQkJCS8qIGRhdGEgcmVhZC93cml0ZSAqLwogCS53b3JkCTB4MDBDRgkJCQkvKiBncmFudWxhcml0eSA9IDQwOTYsIDM4NiAoKzV0aCBuaWJibGUgb2YgbGltaXQpICovCi0JCQkJCQkKKwogCS53b3JkCTB4RkZGRgkJCQkvKiA2NGtiICovCiAJLndvcmQJMAkJCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCiAJLndvcmQJMHg5YjAwCQkJCS8qIGRhdGEgcmVhZC93cml0ZSAqLwogCS53b3JkCTB4MDAxMAkJCQkvKiBncmFudWxhcml0eSA9IDEgICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KLQkKKwogCS53b3JkCTB4RkZGRgkJCQkvKiA2NGtiICovCiAJLndvcmQJMAkJCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCiAJLndvcmQJMHg5MzAwCQkJCS8qIGRhdGEgcmVhZC93cml0ZSAqLwpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvdGltZXIuYyBiL2NwdS9pMzg2L3RpbWVyLmMKaW5kZXggYTIzY2Q2ZS4uNDg2ZDkyNyAxMDA2NDQKLS0tIGEvY3B1L2kzODYvdGltZXIuYworKysgYi9jcHUvaTM4Ni90aW1lci5jCkBAIC00NiwyOCArNDYsMjggQEAKIGludCB0aW1lcl9pbml0KHZvaWQpCiB7CiAJc3lzdGVtX3RpY2tzID0gMDsKLQkKKwogCWlycV9pbnN0YWxsX2hhbmRsZXIoMCwgdGltZXJfaXNyLCBOVUxMKTsKLQkKLQkvKiBpbml0aWFsaXplIHRpbWVyIDAgYW5kIDIgCi0JICogCisKKwkvKiBpbml0aWFsaXplIHRpbWVyIDAgYW5kIDIKKwkgKgogCSAqIFRpbWVyIDAgaXMgdXNlZCB0byBpbmNyZW1lbnQgc3lzdGVtX3RpY2sgMTAwMCB0aW1lcy9zZWMKIAkgKiBUaW1lciAxIHdhcyB1c2VkIGZvciBEUkFNIHJlZnJlc2ggaW4gZWFybHkgUEMncwogCSAqIFRpbWVyIDIgaXMgdXNlZCB0byBkcml2ZSB0aGUgc3BlYWtlcgogCSAqICh0byBzdGFzcnQgYSBiZWVwOiB3cml0ZSAzIHRvIHBvcnQgMHg2MSwKIAkgKiB0byBzdG9wIGl0IGFnYWluOiB3cml0ZSAwKQogCSAqLwotCQkKLSAgICAgICAgb3V0YihQSVRfQ01EX0NUUjB8UElUX0NNRF9CT1RIfFBJVF9DTURfTU9ERTIsIFBJVF9CQVNFICsgUElUX0NPTU1BTkQpOworCisJb3V0YihQSVRfQ01EX0NUUjB8UElUX0NNRF9CT1RIfFBJVF9DTURfTU9ERTIsIFBJVF9CQVNFICsgUElUX0NPTU1BTkQpOwogCW91dGIoVElNRVIwX1ZBTFVFJjB4ZmYsIFBJVF9CQVNFICsgUElUX1QwKTsKIAlvdXRiKFRJTUVSMF9WQUxVRT4+OCwgUElUX0JBU0UgKyBQSVRfVDApOwogCi0gICAgICAgIG91dGIoUElUX0NNRF9DVFIyfFBJVF9DTURfQk9USHxQSVRfQ01EX01PREUzLCBQSVRfQkFTRSArIFBJVF9DT01NQU5EKTsKKwlvdXRiKFBJVF9DTURfQ1RSMnxQSVRfQ01EX0JPVEh8UElUX0NNRF9NT0RFMywgUElUX0JBU0UgKyBQSVRfQ09NTUFORCk7CiAJb3V0YihUSU1FUjJfVkFMVUUmMHhmZiwgUElUX0JBU0UgKyBQSVRfVDIpOwogCW91dGIoVElNRVIyX1ZBTFVFPj44LCBQSVRfQkFTRSArIFBJVF9UMik7CiAKIAl0aW1lcl9pbml0X2RvbmUgPSAxOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3LDcgKzg3LDcgQEAKIAlyZXR1cm4gKHN5c3RlbV90aWNrcyAtIGJhc2UpOwogfQogCi12b2lkIHNldF90aW1lciAodWxvbmcgdCkJCit2b2lkIHNldF90aW1lciAodWxvbmcgdCkKIHsKIAlzeXN0ZW1fdGlja3MgPSB0OwogfQpAQCAtMTAyLDIwICsxMDIsMjAgQEAKIAogLyogdGhpcyBpcyBub3QgdmVyeSBleGFjdCAqLwogdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKLXsJCit7CiAJaW50IGNvdW50ZXI7CiAJaW50IHdyYXBzOwotCQorCiAJaWYgKCF0aW1lcl9pbml0X2RvbmUpIHsKIAkJcmV0dXJuOwogCX0KIAljb3VudGVyID0gcmVhZF9waXQoKTsKIAl3cmFwcyA9IHVzZWMvMTAwMDsKIAl1c2VjID0gdXNlYyUxMDAwOwotCQorCiAJdXNlYyo9MTE5NDsKIAl1c2VjLz0xMDAwOwotCXVzZWMrPWNvdW50ZXI7IAorCXVzZWMrPWNvdW50ZXI7CiAJaWYgKHVzZWMgPiAxMTk0KSB7CiAJCXVzZWMtPTExOTQ7CiAJCXdyYXBzKys7CkBAIC0xMjMsMjYgKzEyMywyNiBAQAogCiAJd2hpbGUgKDEpIHsKIAkJaW50IG5ld19jb3VudCA9IHJlYWRfcGl0KCk7Ci0JCQorCiAJCWlmICgoKG5ld19jb3VudCA8IHVzZWMpICYmICF3cmFwcykgfHwgd3JhcHMgPCAwKSB7CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQlpZiAobmV3X2NvdW50ID4gY291bnRlcikgewogCQkJd3JhcHMtLTsKIAkJfQogCQljb3VudGVyID0gbmV3X2NvdW50OwogCX0KLQkKKwogfQogCiAjaWYgMAogLyogdGhpcyBpcyBhIHZlcnNpb24gd2l0aCBkZWJ1ZyBvdXRwdXQgKi8KIHZvaWQgX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQotewkKK3sKIAlpbnQgY291bnRlcjsKIAlpbnQgd3JhcHM7Ci0JCisKIAlpbnQgdXNlYzEsIHVzZWMyLCB1c2VjMzsKIAlpbnQgd3JhcHMxLCB3cmFwczIsIHdyYXBzMywgd3JhcHM0OwogCWludCBjdHIxLCBjdHIyLCBjdHIzLCBuY3QxLCBuY3QyOwpAQCAtMTU1LDEzICsxNTUsMTMgQEAKIAljdHIxID0gY291bnRlcjsKIAl3cmFwcyA9IHVzZWMvMTAwMDsKIAl1c2VjID0gdXNlYyUxMDAwOwotCQorCiAJdXNlYzIgPSB1c2VjOwogCXdyYXBzMSA9IHdyYXBzOwotCQorCiAJdXNlYyo9MTE5NDsKIAl1c2VjLz0xMDAwOwotCXVzZWMrPWNvdW50ZXI7IAorCXVzZWMrPWNvdW50ZXI7CiAJaWYgKHVzZWMgPiAxMTk0KSB7CiAJCXVzZWMtPTExOTQ7CiAJCXdyYXBzKys7CkBAIC0xNjksNyArMTY5LDcgQEAKIAogCXVzZWMzID0gdXNlYzsKIAl3cmFwczIgPSB3cmFwczsKLQkKKwogCWN0cjIgPSB3cmFwczMgPSBuY3QxID0gNDcxMTsKIAljdHIzID0gd3JhcHM0ID0gbmN0MiA9IDQ3MTE7CiAJaT0wOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCWlmICgobmV3X2NvdW50IDwgdXNlYyAmJiAhd3JhcHMpIHx8IHdyYXBzIDwgMCkgewogCQkJYnJlYWs7CiAJCX0KLQkJCisKIAkJaWYgKG5ld19jb3VudCA+IGNvdW50ZXIpIHsKIAkJCXdyYXBzLS07CiAJCX0KQEAgLTE5MiwxMCArMTkyLDEwIEBACiAJCQl3cmFwczQgPSB3cmFwczsKIAkJCW5jdDIgPSBuZXdfY291bnQ7CiAJCX0KLQkJCisKIAkJY291bnRlciA9IG5ld19jb3VudDsKIAl9Ci0JCisKIAlwcmludGYoInVkZWxheSglZClcbiIsIHVzZWMxKTsKIAlwcmludGYoImNvdW50ZXIgJWRcbiIsIGN0cjEpOwogCXByaW50ZigiMTogd3JhcHMgJWQsIHVzZWMgJWRcbiIsIHdyYXBzMSwgdXNlYzIpOwpkaWZmIC0tZ2l0IGEvY3B1L21pcHMvY2FjaGUuUyBiL2NwdS9taXBzL2NhY2hlLlMKaW5kZXggNTVkYWE4OS4uMDFmYmIyZiAxMDA2NDQKLS0tIGEvY3B1L21pcHMvY2FjaGUuUworKysgYi9jcHUvbWlwcy9jYWNoZS5TCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlzdwl6ZXJvLCAyOChhMCkKIAlhZGR1CWEwLCAzMgogCWJsdHUJYTAsIGExLCAyYgotICAgCisKIAkvKiBTZXQgaW52YWxpZCB0YWcuCiAJICovCiAKQEAgLTI2Nyw0ICsyNjcsMyBAQAogCiAJaglyYQogCS5lbmQJbWlwc19jYWNoZV9sb2NrCi0KZGlmZiAtLWdpdCBhL2NwdS9taXBzL2NvbmZpZy5tayBiL2NwdS9taXBzL2NvbmZpZy5tawppbmRleCA0ZWE2NjE3Li4xNjY0ZTE0IDEwMDY0NAotLS0gYS9jcHUvbWlwcy9jb25maWcubWsKKysrIGIvY3B1L21pcHMvY29uZmlnLm1rCkBAIC0yMiw0ICsyMiwzIEBACiAjCiAKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1tY3B1PTRrYyAtRUIgLW1hYmljYWxscwotCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9jcHUuYyBiL2NwdS9taXBzL2NwdS5jCmluZGV4IGU5Njc2YzEuLmMyN2FiYmQgMTAwNjQ0Ci0tLSBhL2NwdS9taXBzL2NwdS5jCisrKyBiL2NwdS9taXBzL2NwdS5jCkBAIC00Miw0ICs0MiwzIEBACiB7CiAKIH0KLQpkaWZmIC0tZ2l0IGEvY3B1L21pcHMvaW5jYWlwX2Nsb2NrLmMgYi9jcHUvbWlwcy9pbmNhaXBfY2xvY2suYwppbmRleCA3ZmM2ZWIwLi4yN2YwNjA5IDEwMDY0NAotLS0gYS9jcHUvbWlwcy9pbmNhaXBfY2xvY2suYworKysgYi9jcHUvbWlwcy9pbmNhaXBfY2xvY2suYwpAQCAtMjUsMTQgKzI1LDEzIEBACiAjaW5jbHVkZSA8YXNtL2luY2EtaXAuaD4KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCi0qIGdldF9jcHVjbGsgLSByZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgdGhlIENQVS4gCisqIGdldF9jcHVjbGsgLSByZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgdGhlIENQVS4KICoKICogR2V0cyB0aGUgdmFsdWUgZGlyZWN0bHkgZnJvbSB0aGUgSU5DQS1JUCBoYXJkd2FyZS4KICoKLSogUkVUVVJOUzogCisqIFJFVFVSTlM6CiAqICAgICAgICAgIDE1MC4wMDAuMDAwIGZvciAxNTAgTUh6CiAqICAgICAgICAgIDEzMC4wMDAuMDAwLiBmb3IgMTMwIE1oegogKiAgICAgICAgICAxMDAuMDAwLjAwMC4gZm9yIDEwMCBNaHoKQEAgLTU1LDI0ICs1NCwyNCBAQAogICAgZWxzZQogICAgewogICAgICAgLyogTVVYIEkgc2V0IHRvIDEwMC8xMzMgTUh6IGNsb2NrICovCi0gICAgICBpZiAoKigodm9sYXRpbGUgdWxvbmcqKUlOQ0FfSVBfQ0dVX0NHVV9ESVZDUikgJiAweDQwKSAKKyAgICAgIGlmICgqKCh2b2xhdGlsZSB1bG9uZyopSU5DQV9JUF9DR1VfQ0dVX0RJVkNSKSAmIDB4NDApCiAgICAgICB7Ci0gICAgICAgICAvKiBEaXZpc2lvbiB2YWx1ZSBpcyAxLzMsIG1heGltdW0gQ1BVIG9wZXJhdGluZyAqLwotICAgICAgICAgLyogZnJlcXVlbmN5IGlzIDEzMy4zIE1IeiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgIHJldHVybiAxMzAwMDAwMDA7CisJIC8qIERpdmlzaW9uIHZhbHVlIGlzIDEvMywgbWF4aW11bSBDUFUgb3BlcmF0aW5nICovCisJIC8qIGZyZXF1ZW5jeSBpcyAxMzMuMyBNSHogICAgICAgICAgICAgICAgICAgICAgICovCisJIHJldHVybiAxMzAwMDAwMDA7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgICAvKiBEaXZpc2lvbiB2YWx1ZSBpcyAxLzQsIG1heGltdW0gQ1BVIG9wZXJhdGluZyAqLwotICAgICAgICAgLyogZnJlcXVlbmN5IGlzIDEwMCBNSHogICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgIHJldHVybiAxMDAwMDAwMDA7CisJIC8qIERpdmlzaW9uIHZhbHVlIGlzIDEvNCwgbWF4aW11bSBDUFUgb3BlcmF0aW5nICovCisJIC8qIGZyZXF1ZW5jeSBpcyAxMDAgTUh6ICAgICAgICAgICAgICAgICAgICAgICAgICovCisJIHJldHVybiAxMDAwMDAwMDA7CiAgICAgICB9CiAgICB9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCi0qIGdldF9mcGljbGsgLSByZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgdGhlIEZQSSBidXMuIAorKiBnZXRfZnBpY2xrIC0gcmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBGUEkgYnVzLgogKgogKiBHZXRzIHRoZSB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBJTkNBLUlQIGhhcmR3YXJlLgogKgpAQCAtODIsMjYgKzgxLDI0IEBACiAqICAgVGhpcyBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIGhhcmR3YXJlIGRyaXZlciB0byBnZXQgdGhlIGNvcnJlY3QKICogICBmcmVxdWVuY3kgb2YgdGhlIENQVS4gRG9uJ3QgdXNlIHRoZSBtYWNyb3MsIHdoaWNoIGFyZSBzZXQgdG8gaW5pdCB0aGUgQ1BVCiAqICAgZnJlcXVlbmN5IGluIHRoZSBST00gY29kZS4KLSogICBUaGUgY2FsY3VsYXRpb24gZm9yIHRoZSAKKyogICBUaGUgY2FsY3VsYXRpb24gZm9yIHRoZQogKi8KIHVpbnQgaW5jYWlwX2dldF9mcGljbGsodm9pZCkKIHsKICAgIHVpbnQgIGNsa0NQVTsKLSAgIAorCiAgICBjbGtDUFUgPSBpbmNhaXBfZ2V0X2NwdWNsaygpOwotICAgCisKICAgIHN3aXRjaCAoKigodm9sYXRpbGUgdWxvbmcqKUlOQ0FfSVBfQ0dVX0NHVV9ESVZDUikgJiAweEMpCiAgICB7CiAgICAgICBjYXNlIDB4NDoKLSAgICAgICAgIHJldHVybiBjbGtDUFUgPj4gMTsgLyogZGV2aWRlZCBieSAyICovCi0gICAgICAgICBicmVhazsKKwkgcmV0dXJuIGNsa0NQVSA+PiAxOyAvKiBkZXZpZGVkIGJ5IDIgKi8KKwkgYnJlYWs7CiAgICAgICBjYXNlIDB4ODoKLSAgICAgICAgIHJldHVybiBjbGtDUFUgPj4gMjsgLyogZGV2aWRlZCBieSA0ICovCi0gICAgICAgICBicmVhazsKKwkgcmV0dXJuIGNsa0NQVSA+PiAyOyAvKiBkZXZpZGVkIGJ5IDQgKi8KKwkgYnJlYWs7CiAgICAgICBkZWZhdWx0OgotICAgICAgICAgcmV0dXJuIGNsa0NQVTsKLSAgICAgICAgIGJyZWFrOworCSByZXR1cm4gY2xrQ1BVOworCSBicmVhazsKICAgIH0KIH0KLQotCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9pbmNhaXBfd2R0LlMgYi9jcHUvbWlwcy9pbmNhaXBfd2R0LlMKaW5kZXggOTQ1NTU2OS4uNzFhZGFhMSAxMDA2NDQKLS0tIGEvY3B1L21pcHMvaW5jYWlwX3dkdC5TCisrKyBiL2NwdS9taXBzL2luY2FpcF93ZHQuUwpAQCAtNzAsNCArNzAsMyBAQAogCiAJaglyYQogCW5vcAotCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9pbnRlcnJ1cHRzLmMgYi9jcHUvbWlwcy9pbnRlcnJ1cHRzLmMKaW5kZXggMDQ5MGE3Ni4uODdmN2E5ZiAxMDA2NDQKLS0tIGEvY3B1L21pcHMvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9taXBzL2ludGVycnVwdHMuYwpAQCAtMzEsNCArMzEsMyBAQAogewogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9zZXJpYWwuYyBiL2NwdS9taXBzL3NlcmlhbC5jCmluZGV4IGIyNmY0MWQuLjU4NTIyN2EgMTAwNjQ0Ci0tLSBhL2NwdS9taXBzL3NlcmlhbC5jCisrKyBiL2NwdS9taXBzL3NlcmlhbC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIFRPVVRfTE9PUAkxMDAwMDAKIAogLyogU2V0IGJhc2UgYWRkcmVzcyBmb3Igc2Vjb25kIEZQSSBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBiYW5rICovCi0jZGVmaW5lIFNGUElfSU5UQ09OX0JBU0VBRERSCTB4QkYwRjAwMDAgCisjZGVmaW5lIFNGUElfSU5UQ09OX0JBU0VBRERSCTB4QkYwRjAwMDAKIAogLyogUmVnaXN0ZXIgb2Zmc2V0IGZyb20gYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIEZCU19JU1IJCTB4MDAwMDAwMDAJLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwpAQCAtNzUsMTEgKzc1LDExIEBACiAgICAgLyogd2UgaGF2ZSB0byBzZXQgUE1VLkVOMTMgYml0IHRvIGVuYWJsZSBhbiBBU0MgZGV2aWNlKi8KICAgICBJTkNBQVNDX1BNVV9FTkFCTEUoMTMpOwogI2VuZGlmCi0gICAgCisKICAgICAvKiBhbmQgd2UgaGF2ZSB0byBzZXQgQ0xDIHJlZ2lzdGVyKi8KICAgICBDTEVBUl9CSVQocEFzYy0+YXNjX2NsYywgQVNDQ0xDX0RJU1MpOwogICAgIFNFVF9CSVRGSUVMRChwQXNjLT5hc2NfY2xjLCBBU0NDTENfUk1DTUFTSywgQVNDQ0xDX1JNQ09GRlNFVCwgMHgwMDAxKTsKLSAgICAKKwogICAgIC8qIGluaXRpYWx5IHdlIGFyZSBpbiBhc3luYyBtb2RlICovCiAgICAgcEFzYy0+YXNjX2NvbiA9IEFTQ0NPTl9NXzhBU1lOQzsKIApAQCAtODksMTMgKzg5LDEzIEBACiAjaWZkZWYgQVNDX0ZJRk9fUFJFU0VOVAogICAgIC8qIFRYRklGTydzIGZpbGxpbmcgbGV2ZWwgKi8KICAgICBTRVRfQklURklFTEQocEFzYy0+YXNjX3R4ZmNvbiwgQVNDVFhGQ09OX1RYRklUTE1BU0ssCi0gICAgICAgICAgICAgICAgICAgIEFTQ1RYRkNPTl9UWEZJVExPRkYsIElOQ0FBU0NfVFhGSUZPX0ZMKTsKKwkJICAgIEFTQ1RYRkNPTl9UWEZJVExPRkYsIElOQ0FBU0NfVFhGSUZPX0ZMKTsKICAgICAvKiBlbmFibGUgVFhGSUZPICovCiAgICAgU0VUX0JJVChwQXNjLT5hc2NfdHhmY29uLCBBU0NUWEZDT05fVFhGRU4pOwogCiAgICAgLyogUlhGSUZPJ3MgZmlsbGluZyBsZXZlbCAqLwotICAgIFNFVF9CSVRGSUVMRChwQXNjLT5hc2NfdHhmY29uLCBBU0NSWEZDT05fUlhGSVRMTUFTSywgCi0gICAgICAgICAgICAgICAgICAgIEFTQ1JYRkNPTl9SWEZJVExPRkYsIElOQ0FBU0NfUlhGSUZPX0ZMKTsKKyAgICBTRVRfQklURklFTEQocEFzYy0+YXNjX3R4ZmNvbiwgQVNDUlhGQ09OX1JYRklUTE1BU0ssCisJCSAgICBBU0NSWEZDT05fUlhGSVRMT0ZGLCBJTkNBQVNDX1JYRklGT19GTCk7CiAgICAgLyogZW5hYmxlIFJYRklGTyAqLwogICAgIFNFVF9CSVQocEFzYy0+YXNjX3J4ZmNvbiwgQVNDUlhGQ09OX1JYRkVOKTsKICNlbmRpZgpAQCAtMTIzLDcgKzEyMyw3IEBACiAKICAgICAvKiBzZXQgdGhlIG9wdGlvbnMgKi8KICAgICBzZXJpYWxfc2V0b3B0KCk7Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTQxLDI1ICsxNDEsMjUgQEAKICNpZm5kZWYgSU5DQUFTQ19VU0VfRkRWCiAgICAgZmR2ID0gMjsKICAgICB1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKGZkdiAqIDE2ICogQ09ORklHX0JBVURSQVRFKSkgLSAxOwotI2Vsc2UgCisjZWxzZQogICAgIGZkdiA9IElOQ0FBU0NfRkRWX0hJR0hfQkFVRFJBVEU7CiAgICAgdWlSZWxvYWRWYWx1ZSA9IChmX0FTQyAvICg4MTkyICogQ09ORklHX0JBVURSQVRFIC8gZmR2KSkgLSAxOwogI2VuZGlmIC8qIElOQ0FBU0NfVVNFX0ZEViAqLwotICAgIAorCiAgICAgaWYgKCAodWlSZWxvYWRWYWx1ZSA8IDApIHx8ICh1aVJlbG9hZFZhbHVlID4gODE5MSkgKQogICAgIHsKICNpZm5kZWYgSU5DQUFTQ19VU0VfRkRWCi0gICAgICAgIGZkdiA9IDM7Ci0gICAgICAgIHVpUmVsb2FkVmFsdWUgPSAoZl9BU0MgLyAoZmR2ICogMTYgKiBDT05GSUdfQkFVRFJBVEUpKSAtIDE7Ci0jZWxzZSAKLSAgICAgICAgZmR2ID0gSU5DQUFTQ19GRFZfTE9XX0JBVURSQVRFOwotICAgICAgICB1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKDgxOTIgKiBDT05GSUdfQkFVRFJBVEUgLyBmZHYpKSAtIDE7CisJZmR2ID0gMzsKKwl1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKGZkdiAqIDE2ICogQ09ORklHX0JBVURSQVRFKSkgLSAxOworI2Vsc2UKKwlmZHYgPSBJTkNBQVNDX0ZEVl9MT1dfQkFVRFJBVEU7CisJdWlSZWxvYWRWYWx1ZSA9IChmX0FTQyAvICg4MTkyICogQ09ORklHX0JBVURSQVRFIC8gZmR2KSkgLSAxOwogI2VuZGlmIC8qIElOQ0FBU0NfVVNFX0ZEViAqLwotICAgICAgICAKLSAgICAgICAgaWYgKCAodWlSZWxvYWRWYWx1ZSA8IDApIHx8ICh1aVJlbG9hZFZhbHVlID4gODE5MSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47ICAgIC8qIGNhbid0IGltcG9zc2libHkgZ2VuZXJhdGUgdGhhdCBiYXVkIHJhdGUgKi8KLSAgICAgICAgfQorCisJaWYgKCAodWlSZWxvYWRWYWx1ZSA8IDApIHx8ICh1aVJlbG9hZFZhbHVlID4gODE5MSkgKQorCXsKKwkgICAgcmV0dXJuOyAgICAvKiBjYW4ndCBpbXBvc3NpYmx5IGdlbmVyYXRlIHRoYXQgYmF1ZCByYXRlICovCisJfQogICAgIH0KIAogICAgIC8qIERpc2FibGUgQmF1ZCBSYXRlIEdlbmVyYXRvcjsgQkcgc2hvdWxkIG9ubHkgYmUgd3JpdHRlbiB3aGVuIFI9MCAqLwpAQCAtMTc0LDkgKzE3NCw5IEBACiAgICAgQ0xFQVJfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9GREUpOwogCiAgICAgaWYgKCBmZHYgPT0gMiApCi0gICAgICAgIENMRUFSX0JJVChwQXNjLT5hc2NfY29uLCBBU0NDT05fQlJTKTsgICAvKiBCUlMgPSAwICovCisJQ0xFQVJfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9CUlMpOyAgIC8qIEJSUyA9IDAgKi8KICAgICBlbHNlCi0gICAgICAgIFNFVF9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX0JSUyk7IC8qIEJSUyA9IDEgKi8KKwlTRVRfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9CUlMpOyAvKiBCUlMgPSAxICovCiAKICNlbHNlIC8qIElOQ0FBU0NfVVNFX0ZEViAqLwogCkBAIC0yMTcsNDIgKzIxNyw0MiBAQAogICAgIHsKICAgICAvKiA3LWJpdC1kYXRhICovCiAgICAgY2FzZSBBU0NPUFRfQ1M3OgotICAgICAgICBjb24gPSBBU0NDT05fTV83QVNZTkNQQVI7ICAgLyogNy1iaXQtZGF0YSBhbmQgcGFyaXR5IGJpdCAqLwotICAgICAgICBicmVhazsKKwljb24gPSBBU0NDT05fTV83QVNZTkNQQVI7ICAgLyogNy1iaXQtZGF0YSBhbmQgcGFyaXR5IGJpdCAqLworCWJyZWFrOwogCiAgICAgLyogOC1iaXQtZGF0YSAqLwogICAgIGNhc2UgQVNDT1BUX0NTODoKLSAgICAgICAgaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9QQVJFTkIgKQotICAgICAgICAgICAgY29uID0gQVNDQ09OX01fOEFTWU5DUEFSOyAgIC8qIDgtYml0LWRhdGEgYW5kIHBhcml0eSBiaXQgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29uID0gQVNDQ09OX01fOEFTWU5DOyAgICAgIC8qIDgtYml0LWRhdGEgbm8gcGFyaXR5ICovCi0gICAgICAgIGJyZWFrOwotICAgIAotICAgIC8qIAorCWlmICggQVNDX09QVElPTlMgJiBBU0NPUFRfUEFSRU5CICkKKwkgICAgY29uID0gQVNDQ09OX01fOEFTWU5DUEFSOyAgIC8qIDgtYml0LWRhdGEgYW5kIHBhcml0eSBiaXQgKi8KKwllbHNlCisJICAgIGNvbiA9IEFTQ0NPTl9NXzhBU1lOQzsgICAgICAvKiA4LWJpdC1kYXRhIG5vIHBhcml0eSAqLworCWJyZWFrOworCisgICAgLyoKICAgICAgKiAgb25seSA3IGFuZCA4LWJpdCBmcmFtZXMgYXJlIHN1cHBvcnRlZAotICAgICAqICBpZiB3ZSBkb24ndCB1c2UgSU9DVEwgZXh0ZW5zaW9ucyAKKyAgICAgKiAgaWYgd2UgZG9uJ3QgdXNlIElPQ1RMIGV4dGVuc2lvbnMKICAgICAgKi8KICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICggQVNDX09QVElPTlMgJiBBU0NPUFRfU1RPUEIgKQotICAgICAgICBTRVRfQklUKGNvbiwgQVNDQ09OX1NUUCk7ICAgICAgIC8qIDIgc3RvcCBiaXRzICovCisJU0VUX0JJVChjb24sIEFTQ0NPTl9TVFApOyAgICAgICAvKiAyIHN0b3AgYml0cyAqLwogICAgIGVsc2UKLSAgICAgICAgQ0xFQVJfQklUKGNvbiwgQVNDQ09OX1NUUCk7ICAgICAvKiAxIHN0b3AgYml0ICovCisJQ0xFQVJfQklUKGNvbiwgQVNDQ09OX1NUUCk7ICAgICAvKiAxIHN0b3AgYml0ICovCiAKICAgICBpZiAoIEFTQ19PUFRJT05TICYgQVNDT1BUX1BBUkVOQiApCi0gICAgICAgIFNFVF9CSVQoY29uLCBBU0NDT05fUEVOKTsgICAgICAgICAgIC8qIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcgKi8gICAgCisJU0VUX0JJVChjb24sIEFTQ0NPTl9QRU4pOyAgICAgICAgICAgLyogZW5hYmxlIHBhcml0eSBjaGVja2luZyAqLwogICAgIGVsc2UKLSAgICAgICAgQ0xFQVJfQklUKGNvbiwgQVNDQ09OX1BFTik7ICAgICAgICAgLyogZGlzYWJsZSBwYXJpdHkgY2hlY2tpbmcgKi8KLSAgICAKKwlDTEVBUl9CSVQoY29uLCBBU0NDT05fUEVOKTsgICAgICAgICAvKiBkaXNhYmxlIHBhcml0eSBjaGVja2luZyAqLworCiAgICAgaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9QQVJPREQgKQotICAgICAgICBTRVRfQklUKGNvbiwgQVNDQ09OX09ERCk7ICAgICAgIC8qIG9kZCBwYXJpdHkgKi8KKwlTRVRfQklUKGNvbiwgQVNDQ09OX09ERCk7ICAgICAgIC8qIG9kZCBwYXJpdHkgKi8KICAgICBlbHNlCi0gICAgICAgIENMRUFSX0JJVChjb24sIEFTQ0NPTl9PREQpOyAgICAgLyogZXZlbiBwYXJpdHkgKi8KKwlDTEVBUl9CSVQoY29uLCBBU0NDT05fT0REKTsgICAgIC8qIGV2ZW4gcGFyaXR5ICovCiAKICAgICBpZiAoIEFTQ19PUFRJT05TICYgQVNDT1BUX0NSRUFEICkKLSAgICAgICAgU0VUX0JJVChwQXNjLT5hc2Nfd2hiY29uLCBBU0NXSEJDT05fU0VUUkVOKTsgLyogUmVjZWl2ZXIgZW5hYmxlICovCisJU0VUX0JJVChwQXNjLT5hc2Nfd2hiY29uLCBBU0NXSEJDT05fU0VUUkVOKTsgLyogUmVjZWl2ZXIgZW5hYmxlICovCiAKICAgICBwQXNjLT5hc2NfY29uIHw9IGNvbjsKIApAQCAtMjkzLDE0ICsyOTMsMTQgQEAKIAogI2lmbmRlZiBBU0NfRklGT19QUkVTRU5UCiAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKikoU0ZQSV9JTlRDT05fQkFTRUFERFIgKyBGQlNfSVNSKSA9IEZCU19JU1JfQUIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQlNfSVNSX0FUOworCQkJCQkJCQkgRkJTX0lTUl9BVDsKICNlbmRpZgotICAgIAorCiAgICAgLyogY2hlY2sgZm9yIGVycm9ycyAqLwogICAgIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9PRSApCiAgICAgewotICAgICAgICBTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9DTFJPRSk7Ci0gICAgICAgIHJldHVybjsKKwlTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9DTFJPRSk7CisJcmV0dXJuOwogICAgIH0KIH0KIApAQCAtMzIxLDcgKzMyMSw3IEBACiAKICAgICBzeW1ib2xfbWFzayA9CiAJKChBU0NfT1BUSU9OUyAmIEFTQ09QVF9DU0laRSkgPT0gQVNDT1BUX0NTNykgPyAoMHg3ZikgOiAoMHhmZik7Ci0gICAgCisKICAgICBjID0gKGNoYXIpKHBBc2MtPmFzY19yYnVmICYgc3ltYm9sX21hc2spOwogCiAjaWZuZGVmIEFTQ19GSUZPX1BSRVNFTlQKQEAgLTMzOCwzMCArMzM4LDMwIEBACiAjaWZkZWYgQVNDX0ZJRk9fUFJFU0VOVAogICAgIGlmICggKHBBc2MtPmFzY19mc3RhdCAmIEFTQ0ZTVEFUX1JYRkZMTUFTSykgPT0gMCApCiAgICAgewotICAgICAgICByZXMgPSAwOworCXJlcyA9IDA7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoISgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKShTRlBJX0lOVENPTl9CQVNFQUREUiArIEZCU19JU1IpICYKLQkJCSAgICAJCQkJCUZCU19JU1JfQVIpKQotICAgIAorCQkJCQkJCQlGQlNfSVNSX0FSKSkKKwogICAgIHsKLSAgICAgICAgcmVzID0gMDsKKwlyZXMgPSAwOwogICAgIH0KICNlbmRpZgogICAgIGVsc2UgaWYgKCBwQXNjLT5hc2NfY29uICYgQVNDQ09OX0ZFICkKICAgICB7Ci0gICAgICAgIFNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUkZFKTsKLSAgICAgICAgcmVzID0gMDsKKwlTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9DTFJGRSk7CisJcmVzID0gMDsKICAgICB9CiAgICAgZWxzZSBpZiAoIHBBc2MtPmFzY19jb24gJiBBU0NDT05fUEUgKQogICAgIHsKLSAgICAgICAgU0VUX0JJVChwQXNjLT5hc2Nfd2hiY29uLCBBU0NXSEJDT05fQ0xSUEUpOwotICAgICAgICByZXMgPSAwOworCVNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUlBFKTsKKwlyZXMgPSAwOwogICAgIH0KICAgICBlbHNlIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9PRSApCiAgICAgewotICAgICAgICBTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9DTFJPRSk7Ci0gICAgICAgIHJlcyA9IDA7CisJU0VUX0JJVChwQXNjLT5hc2Nfd2hiY29uLCBBU0NXSEJDT05fQ0xST0UpOworCXJlcyA9IDA7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2NwdS9taXBzL3NlcmlhbC5oIGIvY3B1L21pcHMvc2VyaWFsLmgKaW5kZXggZWU2MzM2MC4uN2ZmZGNmYSAxMDA2NDQKLS0tIGEvY3B1L21pcHMvc2VyaWFsLmgKKysrIGIvY3B1L21pcHMvc2VyaWFsLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmZGVmIElOQ0FBU0NfVVNFX0ZEVgogICAgI2RlZmluZSBJTkNBQVNDX0ZEVl9MT1dfQkFVRFJBVEUgICAgICAgIDcxCi0gICAjZGVmaW5lIElOQ0FBU0NfRkRWX0hJR0hfQkFVRFJBVEUgICAgICAgNDUzICAgCisgICAjZGVmaW5lIElOQ0FBU0NfRkRWX0hJR0hfQkFVRFJBVEUgICAgICAgNDUzCiAjZW5kaWYgLypJTkNBQVNDX1VTRV9GRFYqLwogCiAKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgSU5DQUFTQ19JUlFfTElORV9FSVIgICAgICAgICAgICAweDAwMDQwMDAwICAgICAgLyogRUlSIC0gRXJyICovCiAjZGVmaW5lIElOQ0FBU0NfSVJRX0xJTkVfVEJJUiAgICAgICAgICAgMHgwMDA4MDAwMCAgICAgIC8qIFRCSVIgLSBUeCBCdWYqLwogCi0vKiBpbnRlcnJ1cHQgY29udHJvbGxlciBhY2Nlc3MgbWFjcm9zICovICAgIAorLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgYWNjZXNzIG1hY3JvcyAqLwogI2RlZmluZSBBU0NfSU5URVJSVVBUU19FTkFCTEUoWCkgIFwKICAgICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCopIElOQ0FfSVBfSUNVX0lNMl9JRVIpIHw9IFg7CiAjZGVmaW5lIEFTQ19JTlRFUlJVUFRTX0RJU0FCTEUoWCkgXApAQCAtOTYsOSArOTYsOSBAQAogI2RlZmluZSBBU0NBQkNPTl9GQ0RFVEVOICAgIDB4MDAxMAogI2RlZmluZSBBU0NBQkNPTl9FTU1BU0sgICAgIDB4MDMwMAogICAgICNkZWZpbmUgQVNDQUJDT05fRU1PRkYgICAgICAgICAgOAotICAgICAgICAjZGVmaW5lIEFTQ0FCQ09OX0VNX0RJU0FCICAgICAgIDB4MAotICAgICAgICAjZGVmaW5lIEFTQ0FCQ09OX0VNX0RVUkFCICAgICAgIDB4MQotICAgICAgICAjZGVmaW5lIEFTQ0FCQ09OX0VNX0FMV0FZUyAgICAgIDB4MgorCSNkZWZpbmUgQVNDQUJDT05fRU1fRElTQUIgICAgICAgMHgwCisJI2RlZmluZSBBU0NBQkNPTl9FTV9EVVJBQiAgICAgICAweDEKKwkjZGVmaW5lIEFTQ0FCQ09OX0VNX0FMV0FZUyAgICAgIDB4MgogI2RlZmluZSBBU0NBQkNPTl9UWElOViAgICAgIDB4MDQwMAogI2RlZmluZSBBU0NBQkNPTl9SWElOViAgICAgIDB4MDgwMAogCkBAIC0xNzUsNCArMTc1LDMgQEAKIH0gaW5jYUFzY190OwogCiAjZW5kaWYgLyogX19JTkNpbmNhQXNjU2lvaCAqLwotCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9zdGFydC5TIGIvY3B1L21pcHMvc3RhcnQuUwppbmRleCBiNTA0MzkzLi4xMjEyOWRlIDEwMDY0NAotLS0gYS9jcHUvbWlwcy9zdGFydC5TCisrKyBiL2NwdS9taXBzL3N0YXJ0LlMKQEAgLTY1LDcgKzY1LDcgQEAKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDE0KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTUpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCwxNikKLQlSVkVDRU5UKHJvbVJlc2VydmVkLDE3KSAKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDE3KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTgpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCwxOSkKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDIwKQpAQCAtMTExLDcgKzExMSw3IEBACiAJUlZFQ0VOVChyb21SZXNlcnZlZCw2MCkKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDYxKQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNjIpCi0JUlZFQ0VOVChyb21SZXNlcnZlZCw2MykgCisJUlZFQ0VOVChyb21SZXNlcnZlZCw2MykKIAlYVkVDRU5UKHJvbUV4Y0hhbmRsZSwweDIwMCkJLyogYmZjMDAyMDA6IFI0MDAwIHRsYm1pc3MgdmVjdG9yICovCiAJUlZFQ0VOVChyb21SZXNlcnZlZCw2NSkKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDY2KQpAQCAtMTI3LDcgKzEyNyw3IEBACiAJUlZFQ0VOVChyb21SZXNlcnZlZCw3NikKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDc3KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNzgpCi0JUlZFQ0VOVChyb21SZXNlcnZlZCw3OSkgCisJUlZFQ0VOVChyb21SZXNlcnZlZCw3OSkKIAlYVkVDRU5UKHJvbUV4Y0hhbmRsZSwweDI4MCkJLyogYmZjMDAyODA6IFI0MDAwIHh0bGJtaXNzIHZlY3RvciAqLwogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsODEpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCw4MikKQEAgLTE0Myw3ICsxNDMsNyBAQAogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTIpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCw5MykKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDk0KQotCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTUpIAorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTUpCiAJWFZFQ0VOVChyb21FeGNIYW5kbGUsMHgzMDApCS8qIGJmYzAwMzAwOiBSNDAwMCBjYWNoZSB2ZWN0b3IgKi8KIAlSVkVDRU5UKHJvbVJlc2VydmVkLDk3KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTgpCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDEyNSkKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDEyNikKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDEyNykKLSAgIAorCiAJLyogV2UgaG9wZSB0aGVyZSBhcmUgbm8gbW9yZSByZXNlcnZlZCB2ZWN0b3JzIQogCSAqIDEyOCAqIDggPT0gMTAyNCA9PSAweDQwMAogCSAqIHNvIHRoaXMgaXMgYWRkcmVzcyBSX1ZFQysweDQwMCA9PSAweGJmYzAwNDAwCkBAIC0yMzcsNyArMjM3LDcgQEAKIAlub3AKICNlbmRpZgogCi0JLyogSW5pdGlhbGl6ZSBhbnkgZXh0ZXJuYWwgbWVtb3J5LiAKKwkvKiBJbml0aWFsaXplIGFueSBleHRlcm5hbCBtZW1vcnkuCiAJICovCiAJYmFsCW1lbXNldHVwCiAJbm9wCkBAIC0zMDAsNyArMzAwLDcgQEAKIAlzdWIJZ3AsIENGR19NT05JVE9SX0JBU0UKIAlhZGQJZ3AsIGEyCQkJLyogZ3Agbm93IGFkanVzdGVkCQkqLwogCXN1Ygl0NiwgZ3AsIHQ2CQkvKiB0NiA8LS0gcmVsb2NhdGlvbiBvZmZzZXQJKi8KLQkKKwogCWxpCXQwLCBDRkdfTU9OSVRPUl9CQVNFCiAJbGEJdDMsIGluX3JhbQogCWx3CXQyLCAtMTIodDMpCS8qIHQyIDwtLSB1Ym9vdF9lbmRfZGF0YQkqLwpAQCAtMzYzLDE0ICszNjMsMTMgQEAKIDE6CWFkZGkJdDEsIDQKIAlibHRsCXQxLCB0MiwgMWIKIAlzdwl6ZXJvLCAwKHQxKQkvKiBkZWxheSBzbG90CQkJKi8KLQkKKwogCW1vdmUJYTAsIGExCiAJbGEJdDksIGJvYXJkX2luaXRfcgogCWoJdDkKIAltb3ZlCWExLCBhMgkJLyogZGVsYXkgc2xvdAkJCSovCiAKIAkuZW5kCXJlbG9jYXRlX2NvZGUKLQkKIAogCiAJLyogRXhjZXB0aW9uIGhhbmRsZXJzLgpAQCAtMzgwLDQgKzM3OSwzIEBACiAKIHJvbUV4Y0hhbmRsZToKIAliIHJvbUV4Y0hhbmRsZQotCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L01ha2VmaWxlIGIvY3B1L21wYzV4eC9NYWtlZmlsZQppbmRleCBjMDViMzk0Li5lZTIwZGRhIDEwMDY0NAotLS0gYS9jcHUvbXBjNXh4L01ha2VmaWxlCisrKyBiL2NwdS9tcGM1eHgvTWFrZWZpbGUKQEAgLTIzLDEwICsyMywxMCBAQAogCiAjCiAjIEZpbGU6CQkJY3B1L21wYzV4eC9NYWtlZmlsZQotIyAKKyMKICMgRGlzY3JpcHRpb246CQlNYWtlZmlsZSB0byBidWlsZCBtcGM1eHggY3B1IGNvbmZpZ3VyYXRpb24uCiAjCQkJV2lsbCBpbmNsdWRlIHRvcCBjb25maWcubWsgd2hpY2ggaXRzZWxmcwotIwkJCXVzZXMgdGhlIGRlZmluaXRpb25zIG1hZGUgaW4gY3B1L21wYzV4eC9jb25maWcubWsgCisjCQkJdXNlcyB0aGUgZGVmaW5pdGlvbnMgbWFkZSBpbiBjcHUvbXBjNXh4L2NvbmZpZy5tawogIwogCiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogTElCCT0gbGliJChDUFUpLmEKIAotU1RBUlQJPSBzdGFydC5TIAorU1RBUlQJPSBzdGFydC5TCiBPQkpTCT0gc2VyaWFsLm8gY3B1Lm8gY3B1X2luaXQubyBpbnRlcnJ1cHRzLm8gdHJhcHMubyBzcGVlZC5vCiAKIGFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHgvY29uZmlnLm1rIGIvY3B1L21wYzV4eC9jb25maWcubWsKaW5kZXggZDMwMmQ0OC4uY2ZlZDQ5OSAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9jb25maWcubWsKKysrIGIvY3B1L21wYzV4eC9jb25maWcubWsKQEAgLTIzLDEyICsyMywxMSBAQAogCiAjCiAjIEZpbGU6CQkJY29uZmlnLm1rCi0jIAorIwogIyBEaXNjcmlwdGlvbjoJCWNvbXBpbGVyIGZsYWdzIGFuZCBtYWtlIGRlZmluaXRpb25zCiAjCi0gCisKIAogUExBVEZPUk1fUkVMRkxBR1MgKz0gCS1tcmVsb2NhdGFibGUgLWZmaXhlZC1yMTQgLW1lYWJpCiAKIFBMQVRGT1JNX0NQUEZMQUdTICs9CS1EQ09ORklHXzV4eCAtZmZpeGVkLXIyIC1mZml4ZWQtcjI5ICAtbXBvd2VycGMgLW1zb2Z0LWZsb2F0Ci0KZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHgvY3B1LmMgYi9jcHUvbXBjNXh4L2NwdS5jCmluZGV4IDViM2JkMjYuLmNjNjk1MTEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHgvY3B1LmMKKysrIGIvY3B1L21wYzV4eC9jcHUuYwpAQCAtMTcsMTUgKzE3LDE1IEBACiAgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCAKKyAqIEZvdW5kYXRpb24sCiAgKi8KIAogLyoKICAqIEZpbGU6CQljcHUuYwotICogCi0gKiBEaXNjcmlwdGlvbjoJCVNvbWUgY3B1IHNwZWNpZmljIGZ1bmN0aW9uIGZvciB3YXRjaGRvZywgCisgKgorICogRGlzY3JpcHRpb246CQlTb21lIGNwdSBzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd2F0Y2hkb2csCiAgKiAgICAgICAgICAgICAgICAgICAgICBjcHUgdmVyc2lvbiB0ZXN0LCBjbG9jayBzZXR0aW5nIC4uLgotICogCisgKgogICovCiAKIApAQCAtNzQsNyArNzQsNyBAQAogfQogCiAvKgotICogQ2FsbGVkIGJ5IG1hY3JvIFdBVENIRE9HX1JFU0VUIAorICogQ2FsbGVkIGJ5IG1hY3JvIFdBVENIRE9HX1JFU0VUCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKIHZvaWQgd2F0Y2hkb2dfcmVzZXQgKHZvaWQpCkBAIC05Myw3ICs5Myw3IEBACiB7CiAJLyogVXNlIHRoZSBNUEM1eHggSW50ZXJuYWwgV2F0Y2hkb2cgKi8KIAlpbW1yLT5pbV9zaXVfY29uZi5zY19zd3NyID0gMHg1NTZjOwkvKiBQcmV2ZW50IFNXIHRpbWUtb3V0ICovCi0JaW1tci0+aW1fc2l1X2NvbmYuc2Nfc3dzciA9IDB4YWEzOTsgICAgCisJaW1tci0+aW1fc2l1X2NvbmYuc2Nfc3dzciA9IDB4YWEzOTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19XQVRDSERPRyAqLwpAQCAtMTI0LDMyICsxMjQsMzEgQEAKIAogCiAvKgotICogUmVzZXQgYm9hcmQgCisgKiBSZXNldCBib2FyZAogICovCiBpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAl1bG9uZyBhZGRyOwotCQorCiAJLyogSW50ZXJydXB0cyBvZmYsIGVuYWJsZSByZXNldCAqLwotICAgICAgICBfX2FzbV9fIHZvbGF0aWxlCSgiICBtdHNwcgk4MSwgJXIwCQlcblx0IgorCV9fYXNtX18gdm9sYXRpbGUJKCIgIG10c3ByCTgxLCAlcjAJCVxuXHQiCiAJCQkJICIgIG1mbXNyCSVyMwkJXG5cdCIKIAkJCQkgIiAgcmx3aW5tCSVyMzEsJXIzLDAsMjUsMjNcblx0IgogCQkJCSAiICBtdG1zcgklcjMxCQlcblx0Iik7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeWluZyB0byBleGVjdXRlIHRoZSBuZXh0IGluc3RydWN0aW9uIGF0IGEgbm9uLWV4aXN0aW5nIGFkZHJlc3MKLSAgICAgICAgICogc2hvdWxkIGNhdXNlIGEgbWFjaGluZSBjaGVjaywgcmVzdWx0aW5nIGluIHJlc2V0Ci0gICAgICAgICAqLworCS8qCisJICogVHJ5aW5nIHRvIGV4ZWN1dGUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gYXQgYSBub24tZXhpc3RpbmcgYWRkcmVzcworCSAqIHNob3VsZCBjYXVzZSBhIG1hY2hpbmUgY2hlY2ssIHJlc3VsdGluZyBpbiByZXNldAorCSAqLwogI2lmZGVmIENGR19SRVNFVF9BRERSRVNTCi0gICAgICAgIGFkZHIgPSBDRkdfUkVTRVRfQUREUkVTUzsKKwlhZGRyID0gQ0ZHX1JFU0VUX0FERFJFU1M7CiAjZWxzZQotICAgICAgICAvKgotICAgICAgICAgKiBub3RlOiB3aGVuIENGR19NT05JVE9SX0JBU0UgcG9pbnRzIHRvIGEgUkFNIGFkZHJlc3MsIENGR19NT05JVE9SX0JBU0UgICAgICAgICAqIC0gc2l6ZW9mICh1bG9uZykgaXMgdXN1YWxseSBhIHZhbGlkIGFkZHJlc3MuIEJldHRlciBwaWNrIGFuIGFkZHJlc3MKLSAgICAgICAgICoga25vd24gdG8gYmUgaW52YWxpZCBvbiB5b3VyIHN5c3RlbSBhbmQgYXNzaWduIGl0IHRvIENGR19SRVNFVF9BRERSRVNTLgotICAgICAgICAgKiAiKHVsb25nKS0xIiB1c2VkIHRvIGJlIGEgZ29vZCBjaG9pY2UgZm9yIG1hbnkgc3lzdGVtcy4uLgotICAgICAgICAgKi8KLSAgICAgICAgYWRkciA9IENGR19NT05JVE9SX0JBU0UgLSBzaXplb2YgKHVsb25nKTsKKwkvKgorCSAqIG5vdGU6IHdoZW4gQ0ZHX01PTklUT1JfQkFTRSBwb2ludHMgdG8gYSBSQU0gYWRkcmVzcywgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgICogLSBzaXplb2YgKHVsb25nKSBpcyB1c3VhbGx5IGEgdmFsaWQgYWRkcmVzcy4gQmV0dGVyIHBpY2sgYW4gYWRkcmVzcworCSAqIGtub3duIHRvIGJlIGludmFsaWQgb24geW91ciBzeXN0ZW0gYW5kIGFzc2lnbiBpdCB0byBDRkdfUkVTRVRfQUREUkVTUy4KKwkgKiAiKHVsb25nKS0xIiB1c2VkIHRvIGJlIGEgZ29vZCBjaG9pY2UgZm9yIG1hbnkgc3lzdGVtcy4uLgorCSAqLworCWFkZHIgPSBDRkdfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZyk7CiAjZW5kaWYKIAkoKHZvaWQgKCopICh2b2lkKSkgYWRkcikgKCk7CiAJcmV0dXJuIDE7CiB9Ci0KZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHgvY3B1X2luaXQuYyBiL2NwdS9tcGM1eHgvY3B1X2luaXQuYwppbmRleCAyN2NmM2Q2Li5lMTlkMGY0IDEwMDY0NAotLS0gYS9jcHUvbXBjNXh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzV4eC9jcHVfaW5pdC5jCkBAIC0xNiwxMiArMTYsMTIgQEAKICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIAorICogRm91bmRhdGlvbiwKICAqLwogCiAvKgogICogRmlsZToJCWNwdV9pbml0LmMKLSAqIAorICoKICAqIERpc2NyaXB0aW9uOgkJQ29udGFpbnMgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIHRvIHNldHVwCiAgKiAgICAJCQl0aGUgY3B1IHByb3Blcmx5CiAgKgpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPHdhdGNoZG9nLmg+CiAKIC8qCi0gKiBTZXR1cCBlc3NlbnRpYWwgY3B1IHJlZ2lzdGVycyB0byBydW4gCisgKiBTZXR1cCBlc3NlbnRpYWwgY3B1IHJlZ2lzdGVycyB0byBydW4KICAqLwogdm9pZCBjcHVfaW5pdF9mICh2b2xhdGlsZSBpbW1hcF90ICogaW1tcikKIHsKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQogCXJlc2V0XzV4eF93YXRjaGRvZyAoaW1tcik7Ci0jZW5kaWYgCisjZW5kaWYKIAogCS8qIFNJVU1DUiAtIGNvbnRhaW5zIGRlYnVnIHBpbiBjb25maWd1cmF0aW9uICovCiAJaW1tci0+aW1fc2l1X2NvbmYuc2Nfc2l1bWNyIHw9IENGR19TSVVNQ1I7CkBAIC01NiwxMCArNTYsMTAgQEAKIAogCS8qIEZ1bGwgSU1CIGJ1cyBzcGVlZCAqLwogCWltbXItPmltX3VpbWIudWltYl91bWNyID0gQ0ZHX1VNQ1I7Ci0JCisKIAkvKiBUaW1lIGJhc2UgYW5kIGRlY3JlbWVudGVyIHdpbGwgYmUgZW5hYmxlcyAoVEJFKSAqLwogCS8qIGluIGluaXRfdGltZWJhc2UoKSBpbiB0aW1lLmMgY2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuICovCi0gCisKIAkvKiBJbml0aWFsaXplIHRoZSBQSVQuIFVubG9jayBQSVNDUksgKi8KIAlpbW1yLT5pbV9zaXRrLnNpdGtfcGlzY3JrID0gS0FQV1JfS0VZOwogCWltbXItPmltX3NpdC5zaXRfcGlzY3IgPSBDRkdfUElTQ1I7CmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L2ludGVycnVwdHMuYyBiL2NwdS9tcGM1eHgvaW50ZXJydXB0cy5jCmluZGV4IDI4MmMzMTYuLjQ2MTg2ODAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHgvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9tcGM1eHgvaW50ZXJydXB0cy5jCkBAIC0xNywxMiArMTcsMTIgQEAKICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIAorICogRm91bmRhdGlvbiwKICAqLwogCiAvKgogICogRmlsZToJCWludGVycnVwdC5jCi0gKiAKKyAqCiAgKiBEaXNjcmlwdGlvbjoJCUNvbnRhaW5zIGludGVycnVwdCByb3V0aW5lcyBuZWVkZWQgYnkgVS1Cb290CiAgKgogICovCkBAIC00Niw3ICs0Niw3IEBACiBzdGF0aWMgc3RydWN0IGludGVycnVwdF9hY3Rpb24gaXJxX3ZlY3NbTlJfSVJRU107CiAKIC8qCi0gKiBMb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzIAorICogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF9tc3IgKHZvaWQpCiB7CkBAIC03OCwxNSArNzgsMTUgQEAKIH0KIAogLyoKLSAqIEVuYWJsZSBpbnRlcnJ1cHRzIAotICovIAorICogRW5hYmxlIGludGVycnVwdHMKKyAqLwogdm9pZCBlbmFibGVfaW50ZXJydXB0cyAodm9pZCkKIHsKIAlzZXRfbXNyIChnZXRfbXNyICgpIHwgTVNSX0VFKTsKIH0KIAotLyogCi0gKiBSZXR1cm5zIGZsYWcgaWYgTVNSX0VFIHdhcyBzZXQgYmVmb3JlIAorLyoKKyAqIFJldHVybnMgZmxhZyBpZiBNU1JfRUUgd2FzIHNldCBiZWZvcmUKICAqLwogaW50IGRpc2FibGVfaW50ZXJydXB0cyAodm9pZCkKIHsKQEAgLTk3LDcgKzk3LDcgQEAKIH0KIAogLyoKLSAqIEluaXRpYWxpc2UgaW50ZXJydXB0cyAKKyAqIEluaXRpYWxpc2UgaW50ZXJydXB0cwogICovCiAKIGludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKQEAgLTIwOSw3ICsyMDksNyBAQAogdm9sYXRpbGUgdWxvbmcgdGltZXN0YW1wID0gMDsKIAogLyoKLSAqICBUaW1lciBpbnRlcnJ1cHQgLSBnZXRzIGNhbGxlZCB3aGVuICBiaXQgMCBvZiBERUMgY2hhbmdlcyBmcm9tIAorICogIFRpbWVyIGludGVycnVwdCAtIGdldHMgY2FsbGVkIHdoZW4gIGJpdCAwIG9mIERFQyBjaGFuZ2VzIGZyb20KICAqICAwLiBEZWNyZW1lbnRlciBpcyBlbmFibGVkIHdpdGggYml0IFRCRSBpbiBUQlNDUi4KICAqLwogdm9pZCB0aW1lcl9pbnRlcnJ1cHQgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMjI2LDcgKzIyNiw3IEBACiAJaW1tci0+aW1fY2xrcnN0ay5jYXJrX3BscHJjcmsgPSBLQVBXUl9LRVk7CiAJX19hc21fXyAoIm5vcCIpOwogCWltbXItPmltX2Nsa3JzdC5jYXJfcGxwcmNyIHw9IFBMUFJDUl9URVhQUyB8IFBMUFJDUl9UTUlTVDsKLQkKKwogCS8qIFJlc3RvcmUgRGVjcmVtZW50ZXIgQ291bnQgKi8KIAlzZXRfZGVjIChkZWNyZW1lbnRlcl9jb3VudCk7CiAKQEAgLTI0OSw3ICsyNDksNyBAQAogfQogCiAvKgotICogUmVzZXQgdGltZXIgCisgKiBSZXNldCB0aW1lcgogICovCiB2b2lkIHJlc2V0X3RpbWVyICh2b2lkKQogewpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9zZXJpYWwuYyBiL2NwdS9tcGM1eHgvc2VyaWFsLmMKaW5kZXggNzM4YzI3NS4uNDg2ODc4MiAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9zZXJpYWwuYworKysgYi9jcHUvbXBjNXh4L3NlcmlhbC5jCkBAIC0xNywxMyArMTcsMTMgQEAKICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIAorICogRm91bmRhdGlvbiwKICAqLwogCiAvKgogICogRmlsZToJCXNlcmlhbC5jCi0gKiAKLSAqIERpc2NyaXB0aW9uOgkJU2VyaWFsIGludGVyZmFjZSBkcml2ZXIgZm9yIFNDSTEgYW5kIFNDSTIuIAorICoKKyAqIERpc2NyaXB0aW9uOgkJU2VyaWFsIGludGVyZmFjZSBkcml2ZXIgZm9yIFNDSTEgYW5kIFNDSTIuCiAgKiAgICAgCQkJU2luY2UgdGhpcyBjb2RlIHdpbGwgYmUgY2FsbGVkIGZyb20gUk9NIHVzZQogICogCQkJb25seSBub24tc3RhdGljIGxvY2FsIHZhcmlhYmxlcy4KICAqCkBAIC0zNiw3ICszNiw3IEBACiAKIAogLyoKLSAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgCisgKiBMb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KIAogc3RhdGljIGludCByZWFkeV90b19zZW5kKHZvaWQpOwpAQCAtNTQsMjUgKzU0LDI1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfNXh4X0NPTlNfU0NJMSkKIAkvKiAxMC1CaXQsIDEgc3RhcnQgYml0LCA4IGRhdGEgYml0LCBubyBwYXJpdHksIDEgc3RvcCBiaXQgKi8KIAlpbW1yLT5pbV9xc21jbS5xc21jbV9zY2MxcjEgPSBTQ0lfTV8xMDsKLQlpbW1yLT5pbV9xc21jbS5xc21jbV9zY2MxcjEgPSBTQ0lfVEUgfCBTQ0lfUkU7IAorCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzFyMSA9IFNDSV9URSB8IFNDSV9SRTsKICNlbHNlCi0JaW1tci0+aW1fcXNtY20ucXNtY21fc2NjMnIxID0gU0NJX01fMTA7IAorCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzJyMSA9IFNDSV9NXzEwOwogCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzJyMSA9IFNDSV9URSB8IFNDSV9SRTsKICNlbmRpZgogCXJldHVybiAwOwogfQogCiB2b2lkIHNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYykKLXsgICAgICAgIAorewogCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCQorCiAJLyogVGVzdCBmb3IgY29tcGxldGl0aW9uICovCiAJaWYocmVhZHlfdG9fc2VuZCgpKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfNXh4X0NPTlNfU0NJMSkKLQkJaW1tci0+aW1fcXNtY20ucXNtY21fc2MxZHIgPSAoc2hvcnQpYzsgCisJCWltbXItPmltX3FzbWNtLnFzbWNtX3NjMWRyID0gKHNob3J0KWM7CiAjZWxzZQogCQlpbW1yLT5pbV9xc21jbS5xc21jbV9zYzJkciA9IChzaG9ydCljOwotI2VuZGlmCQkKKyNlbmRpZgogCQlpZihjID09ICdcbicpIHsKIAkJCWlmKHJlYWR5X3RvX3NlbmQoKSk7CiAjaWYgZGVmaW5lZChDT05GSUdfNXh4X0NPTlNfU0NJMSkKQEAgLTg1LDI3ICs4NSwyNyBAQAogfQogCiBpbnQgc2VyaWFsX2dldGModm9pZCkKLXsJCit7CiAJdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgc2hvcnQgc3RhdHVzOwogCXVuc2lnbmVkIGNoYXIgdG1wOwotICAgIAorCiAJLyogTmV3IGRhdGEgPyAqLwogCWRvIHsKICNpZiBkZWZpbmVkKENPTkZJR181eHhfQ09OU19TQ0kxKQotICAgICAgCQlzdGF0dXMgPSBpbW1yLT5pbV9xc21jbS5xc21jbV9zYzFzcjsgCisJCXN0YXR1cyA9IGltbXItPmltX3FzbWNtLnFzbWNtX3NjMXNyOwogI2Vsc2UKIAkJc3RhdHVzID0gaW1tci0+aW1fcXNtY20ucXNtY21fc2Myc3I7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQotCQlyZXNldF81eHhfd2F0Y2hkb2cgKGltbXIpOwkKKwkJcmVzZXRfNXh4X3dhdGNoZG9nIChpbW1yKTsKICNlbmRpZgotICAJfSB3aGlsZSAoKHN0YXR1cyAmIFNDSV9SRFJGKSA9PSAwKTsKLSAgICAJCQorCX0gd2hpbGUgKChzdGF0dXMgJiBTQ0lfUkRSRikgPT0gMCk7CisKIAkvKiBSZWFkIGRhdGEgKi8KICNpZiBkZWZpbmVkKENPTkZJR181eHhfQ09OU19TQ0kxKQotCXRtcCA9ICh1bnNpZ25lZCBjaGFyKShpbW1yLT5pbV9xc21jbS5xc21jbV9zYzFkciAmIFNDSV9TQ1hEUl9NSyk7IAorCXRtcCA9ICh1bnNpZ25lZCBjaGFyKShpbW1yLT5pbV9xc21jbS5xc21jbV9zYzFkciAmIFNDSV9TQ1hEUl9NSyk7CiAjZWxzZQogCXRtcCA9ICh1bnNpZ25lZCBjaGFyKSggaW1tci0+aW1fcXNtY20ucXNtY21fc2MyZHIgJiBTQ0lfU0NYRFJfTUspOwogI2VuZGlmCkBAIC0xMTUsMjcgKzExNSwyNyBAQAogaW50IHNlcmlhbF90c3RjKCkKIHsKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLSAgCXNob3J0IHN0YXR1czsKKwlzaG9ydCBzdGF0dXM7CiAKIAkvKiBOZXcgZGF0YSBjaGFyYWN0ZXIgPyAqLwogI2lmIGRlZmluZWQoQ09ORklHXzV4eF9DT05TX1NDSTEpCi0Jc3RhdHVzID0gaW1tci0+aW1fcXNtY20ucXNtY21fc2Mxc3I7IAorCXN0YXR1cyA9IGltbXItPmltX3FzbWNtLnFzbWNtX3NjMXNyOwogI2Vsc2UKIAlzdGF0dXMgPSBpbW1yLT5pbV9xc21jbS5xc21jbV9zYzJzcjsKICNlbmRpZgotCXJldHVybiAoc3RhdHVzICYgU0NJX1JEUkYpOyAKKwlyZXR1cm4gKHN0YXR1cyAmIFNDSV9SRFJGKTsKIH0KIAogdm9pZCBzZXJpYWxfc2V0YnJnICh2b2lkKQogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAlzaG9ydCBzY3hicjsKIAogCS8qIFNldCBiYXVkcmF0ZSAqLwogCXNjeGJyID0gKGdkLT5jcHVfY2xrIC8gKDMyICogZ2QtPmJhdWRyYXRlKSk7CiAjaWYgZGVmaW5lZChDT05GSUdfNXh4X0NPTlNfU0NJMSkKLQlpbW1yLT5pbV9xc21jbS5xc21jbV9zY2MxcjAgPSAoc2N4YnIgJiBTQ0lfU0NYQlJfTUspOyAKKwlpbW1yLT5pbV9xc21jbS5xc21jbV9zY2MxcjAgPSAoc2N4YnIgJiBTQ0lfU0NYQlJfTUspOwogI2Vsc2UKIAlpbW1yLT5pbV9xc21jbS5xc21jbV9zY2MycjAgPSAoc2N4YnIgJiBTQ0lfU0NYQlJfTUspOwogI2VuZGlmCkBAIC0xNTQsMTggKzE1NCwxNyBAQAogCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIHNob3J0IHN0YXR1czsKIAotICAJZG8geworCWRvIHsKICNpZiBkZWZpbmVkKENPTkZJR181eHhfQ09OU19TQ0kxKQotICAgIAkJc3RhdHVzID0gaW1tci0+aW1fcXNtY20ucXNtY21fc2Mxc3I7IAorCQlzdGF0dXMgPSBpbW1yLT5pbV9xc21jbS5xc21jbV9zYzFzcjsKICNlbHNlCiAJCXN0YXR1cyA9IGltbXItPmltX3FzbWNtLnFzbWNtX3NjMnNyOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLQkJcmVzZXRfNXh4X3dhdGNoZG9nIChpbW1yKTsJCisJCXJlc2V0XzV4eF93YXRjaGRvZyAoaW1tcik7CiAjZW5kaWYKLSAgCX0gd2hpbGUgKChzdGF0dXMgJiBTQ0lfVERSRSkgPT0gMCk7Ci0JcmV0dXJuIDE7IAorCX0gd2hpbGUgKChzdGF0dXMgJiBTQ0lfVERSRSkgPT0gMCk7CisJcmV0dXJuIDE7CiAKIH0KLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9zcGVlZC5jIGIvY3B1L21wYzV4eC9zcGVlZC5jCmluZGV4IDgwOThjOTkuLmY2MDk3ZjUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHgvc3BlZWQuYworKysgYi9jcHUvbXBjNXh4L3NwZWVkLmMKQEAgLTE3LDE0ICsxNywxNCBAQAogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgCisgKiBGb3VuZGF0aW9uLAogICovCiAKIC8qCiAgKiBGaWxlOgkJc3BlZWQuYwotICogCisgKgogICogRGlzY3JpcHRpb246CQlQcm92aWRlcyBjcHUgc3BlZWQgY2FsY3VsYXRpb24KLSAqIAorICoKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CkBAIC00OSw4ICs0OSw4IEBACiAJCWdkLT5jcHVfY2xrID0gdmNvb3V0IC8gKDJeKCgoaW1tci0+aW1fY2xrcnN0LmNhcl9zY2NyICYgU0NDUl9ERk5MX01TSykgPj4gU0NDUl9ERk5MX1NISUZUKSArIDEpKTsKIAl9IGVsc2UgewogICAgIAkJZ2QtPmNwdV9jbGsgPSB2Y29vdXQgLyAoMl4oaW1tci0+aW1fY2xrcnN0LmNhcl9zY2NyICYgU0NDUl9ERk5IX01TSykpOwotICAgIAl9CQotCQorICAgIAl9CisKICNlbHNlIC8qIENPTkZJR181eHhfR0NMS19GUkVRICovCiAJZ2QtPmJ1c19jbGsgPSBDT05GSUdfNXh4X0dDTEtfRlJFUTsKICNlbmRpZiAvKiBDT05GSUdfNXh4X0dDTEtfRlJFUSAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9zdGFydC5TIGIvY3B1L21wYzV4eC9zdGFydC5TCmluZGV4IDY5NGRlNzcuLjNiNmQzNDQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHgvc3RhcnQuUworKysgYi9jcHUvbXBjNXh4L3N0YXJ0LlMKQEAgLTMsNyArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5CU1hZ251cyBEYW1tIDxraWVyYXlwYzAxLnAueS5raWUuZXJhLmVyaWNzc29uLnNlPgogICogIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgogICogIENvcHlyaWdodCAoQykgMjAwMyAgTWFydGluIFdpbmlzdG9lcmZlciwgbWFydGlud2luaXN0b2VyZmVyQGdteC5jaC4KLSAqIAorICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgogICoKQEAgLTI1LDcgKzI1LDcgQEAKIAogLyoKICAqIEZpbGU6CQlzdGFydC5TCi0gKiAKKyAqCiAgKiBEaXNjcmlwdGlvbjoJCXN0YXJ0dXAgY29kZQogICoKICAqLwpAQCAtMzksOSArMzksOSBAQAogCiAjaW5jbHVkZSA8cHBjX2FzbS50bXBsPgogI2luY2x1ZGUgPHBwY19kZWZzLmg+Ci0JCisKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2lmbmRlZiAgQ09ORklHX0lERU5UX1NUUklORwogI2RlZmluZSAgQ09ORklHX0lERU5UX1NUUklORyAiIgpAQCAtODgsNyArODgsNyBAQAogX3N0YXJ0OgogCW1mc3ByCXIzLCA2MzgKIAlsaQlyNCwgQ0ZHX0lTQgkJCS8qIFNldCBJU0IgYml0ICovCi0Jb3IJcjMsIHIzLCByNCAKKwlvcglyMywgcjMsIHI0CiAJbXRzcHIJNjM4LCByMwogCWxpCXIyMSwgQk9PVEZMQUdfQ09MRAkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KIAliCWJvb3RfY29sZApAQCAtMTMxLDcgKzEzMSw3IEBACiAKIAkvKiBJbml0aWFsaXplIHNvbWUgU1BScyB0aGF0IGFyZSBoYXJkIHRvIGFjY2VzcyBmcm9tIEMJCQkqLwogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JCisKIAlsaXMgICAgIHIzLCBDRkdfSU1NUkBoICAgICAgICAgIAkvKiBQYXNzIElNTVIgYXMgYXJnMSB0byBDIHJvdXRpbmUgKi8KIAlsaXMJcjIsIENGR19JTklUX1NQX0FERFJAaAogCW9yaQlyMSwgcjIsIENGR19JTklUX1NQX0FERFJAbAkvKiBTZXQgdXAgdGhlIHN0YWNrIGluIGludGVybmFsIFNSQU0gKi8KQEAgLTE2OSw3ICsxNjksNiBAQAogCWJsCWJvYXJkX2luaXRfZgkvKiBydW4gMXN0IHBhcnQgb2YgYm9hcmQgaW5pdCBjb2RlIChmcm9tIEZsYXNoKSAqLwogCiAKLQogCS5nbG9ibAlfc3RhcnRfb2ZfdmVjdG9ycwogX3N0YXJ0X29mX3ZlY3RvcnM6CiAKQEAgLTM4OSw3ICszODgsNyBAQAogCVNZTkMKIAlyZmkKIAotCQkKKwogLyoKICAqIHVuc2lnbmVkIGludCBnZXRfaW1tciAodW5zaWduZWQgaW50IG1hc2spCiAgKgpAQCAtNDc2LDcgKzQ3NSw3IEBACiAJc3R3dQlyMCwtNChyNykKIAliZG56CTNiCiAKLTQ6CXN5bmMJCQkKKzQ6CXN5bmMKIAlpc3luYwogCiAvKgpAQCAtNDkzLDggKzQ5Miw4IEBACiAJLyoKIAkgKiBSZWxvY2F0aW9uIEZ1bmN0aW9uLCByMTQgcG9pbnQgdG8gZ290MisweDgwMDAKIAkgKgotICAgICAgICAgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCi0gICAgICAgICAqIGFscmVhZHkgcHV0cyBhIGZldyBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKwkgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCisJICogYWxyZWFkeSBwdXRzIGEgZmV3IGVudHJpZXMgaW4gdGhlIHRhYmxlLgogCSAqLwogCWxpCXIwLF9fZ290Ml9lbnRyaWVzQHNlY3RvZmZAbAogCWxhCXIzLEdPVChfR09UMl9UQUJMRV8pCkBAIC01MDgsNyArNTA3LDcgQEAKIAliZG56CTFiCiAKIAkvKgotICAgICAgICAgKiBOb3cgYWRqdXN0IHRoZSBmaXh1cHMgYW5kIHRoZSBwb2ludGVycyB0byB0aGUgZml4dXBzCisJICogTm93IGFkanVzdCB0aGUgZml4dXBzIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlIGZpeHVwcwogCSAqIGluIGNhc2Ugd2UgbmVlZCB0byBtb3ZlIG91cnNlbHZlcyBhZ2Fpbi4KIAkgKi8KIDI6CWxpCXIwLF9fZml4dXBfZW50cmllc0BzZWN0b2ZmQGwKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L01ha2VmaWxlIGIvY3B1L21wYzgyNHgvTWFrZWZpbGUKaW5kZXggNzQzY2VkOS4uM2MwMGZjNyAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzgyNHgvTWFrZWZpbGUKQEAgLTI3LDcgKzI3LDcgQEAKIAogU1RBUlQJPSBzdGFydC5TIGRyaXZlcnMvaTJjL2kyYzIubwogT0JKUwk9IHRyYXBzLm8gY3B1Lm8gY3B1X2luaXQubyBpbnRlcnJ1cHRzLm8gc3BlZWQubyBcCi0gICAgICAgICAgZHJpdmVycy9lcGljL2VwaWMxLm8gZHJpdmVycy9pMmMvaTJjMS5vIHBjaS5vIGJlZGJ1Z182MDNlLm8KKwkgIGRyaXZlcnMvZXBpYy9lcGljMS5vIGRyaXZlcnMvaTJjL2kyYzEubyBwY2kubyBiZWRidWdfNjAzZS5vCiAKIGFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIApkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvY3B1LmMgYi9jcHUvbXBjODI0eC9jcHUuYwppbmRleCAwZDgyMmQ1Li4zMTJkZmUyIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9jcHUuYworKysgYi9jcHUvbXBjODI0eC9jcHUuYwpAQCAtOTIsOCArOTIsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKiBjbWR0cCwgYmRfdCAqIGJkLCBpbnQgZmxhZywgaW50IGFyZ2MsCi0JCQkgIGNoYXIgKmFyZ3ZbXSkKK2ludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJdWxvbmcgbXNyLCBhZGRyOwogCkBAIC0xMTQsMTEgKzExMywxMSBAQAogCWFkZHIgPSBDRkdfUkVTRVRfQUREUkVTUzsKICNlbHNlCiAJLyoKLSAgICAgICAgICogbm90ZTogd2hlbiBDRkdfTU9OSVRPUl9CQVNFIHBvaW50cyB0byBhIFJBTSBhZGRyZXNzLAotICAgICAgICAgKiBDRkdfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZykgaXMgdXN1YWxseSBhIHZhbGlkCi0gICAgICAgICAqIGFkZHJlc3MuIEJldHRlciBwaWNrIGFuIGFkZHJlc3Mga25vd24gdG8gYmUgaW52YWxpZCBvbgotICAgICAgICAgKiB5b3VyIHN5c3RlbSBhbmQgYXNzaWduIGl0IHRvIENGR19SRVNFVF9BRERSRVNTLgotICAgICAgICAgKiAiKHVsb25nKS0xIiB1c2VkIHRvIGJlIGEgZ29vZCBjaG9pY2UgZm9yIG1hbnkgc3lzdGVtcy4uLgorCSAqIG5vdGU6IHdoZW4gQ0ZHX01PTklUT1JfQkFTRSBwb2ludHMgdG8gYSBSQU0gYWRkcmVzcywKKwkgKiBDRkdfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZykgaXMgdXN1YWxseSBhIHZhbGlkCisJICogYWRkcmVzcy4gQmV0dGVyIHBpY2sgYW4gYWRkcmVzcyBrbm93biB0byBiZSBpbnZhbGlkIG9uCisJICogeW91ciBzeXN0ZW0gYW5kIGFzc2lnbiBpdCB0byBDRkdfUkVTRVRfQUREUkVTUy4KKwkgKiAiKHVsb25nKS0xIiB1c2VkIHRvIGJlIGEgZ29vZCBjaG9pY2UgZm9yIG1hbnkgc3lzdGVtcy4uLgogCSAqLwogCWFkZHIgPSBDRkdfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2NwdV9pbml0LmMgYi9jcHUvbXBjODI0eC9jcHVfaW5pdC5jCmluZGV4IDYwMmY2NWQuLjNiNWZiNzkgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzgyNHgvY3B1X2luaXQuYwpAQCAtODQsNyArODQsNyBAQAogICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgOiAvKiBubyBvdXRwdXQgKi8gICAgICAgXAogICAgICAgOiAiciIgKENPTkZJR19BRERSKSwgInIiIChDT05GSUdfREFUQSksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJyIiAoUENJU1dBUChhZGRyICYgfjMpKSwgInIiIChQQ0lTV0FQKGRhdGEgPDwgMTYpKSAgIFwKKwkiciIgKFBDSVNXQVAoYWRkciAmIH4zKSksICJyIiAoUENJU1dBUChkYXRhIDw8IDE2KSkgICBcCiAgICAgICApOwogCiAgICAgTV9DT05GSUdfV1JJVEVfSEFMRldPUkQoUENJQUNSLCAweDgwMDApOwpAQCAtMTQ1LDggKzE0NSw4IEBACiAKICNpZiBkZWZpbmVkKENGR19BU1JJU0UpICYmIGRlZmluZWQoQ0ZHX0FTRkFMTCkKICAgICBDT05GSUdfV1JJVEVfV09SRChNQ0NSMiwgQ0ZHX1JFRklOVCA8PCBNQ0NSMl9SRUZJTlRfU0hJRlQgfAotICAgIAkJCSAgICAgQ0ZHX0FTUklTRSA8PCBNQ0NSMl9BU1JJU0VfU0hJRlQgfAotICAgIAkJCSAgICAgQ0ZHX0FTRkFMTCA8PCBNQ0NSMl9BU0ZBTExfU0hJRlQpOworCQkJICAgICBDRkdfQVNSSVNFIDw8IE1DQ1IyX0FTUklTRV9TSElGVCB8CisJCQkgICAgIENGR19BU0ZBTEwgPDwgTUNDUjJfQVNGQUxMX1NISUZUKTsKICNlbHNlCiAgICAgQ09ORklHX1dSSVRFX1dPUkQoTUNDUjIsIENGR19SRUZJTlQgPDwgTUNDUjJfUkVGSU5UX1NISUZUKTsKICNlbmRpZgpAQCAtMTk2LDEzICsxOTYsMTMgQEAKICAgICBDT05GSUdfV1JJVEVfV09SRChNQ0NSNCwKIAkoQ0ZHX1BSRVRPQUNUIDw8IE1DQ1I0X1BSRVRPQUNUX1NISUZUKSB8CiAJKENGR19BQ1RUT1BSRSA8PCBNQ0NSNF9BQ1RUT1BSRV9TSElGVCkgfAotICAgICAgICAoQ0ZHX0VYVFJPTSA/IE1DQ1I0X0VYVFJPTSA6IDApIHwKLSAgICAgICAgKENGR19SRUdESU1NID8gTUNDUjRfUkVHRElNTSA6IDApIHwKKwkoQ0ZHX0VYVFJPTSA/IE1DQ1I0X0VYVFJPTSA6IDApIHwKKwkoQ0ZHX1JFR0RJTU0gPyBNQ0NSNF9SRUdESU1NIDogMCkgfAogCShDRkdfUkVHSVNURVJEX1RZUEVfQlVGRkVSID8gTUNDUjRfUkVHSVNURVJFRDogMCkgfAogCSgoQ0ZHX0JTVE9QUkUgJiAweDAwMDMpIDw8TUNDUjRfQlNUT1BSRTBUTzFfU0hJRlQgKSB8CiAJKENGR19EQlVTX1NJWkUyIDw8IE1DQ1I0X0RCVVNfU0laRTJfU0hJRlQpIHwKIAkoKChDRkdfU0RNT0RFX0NBU19MQVQgPDw0KSB8IChDRkdfU0RNT0RFX1dSQVAgPDwzKSB8Ci0gICAgICAgICAgICAgICh2YWwgPyAyIDogMykpIDw8IE1DQ1I0X1NETU9ERV9TSElGVCkgIHwKKwkgICAgICAodmFsID8gMiA6IDMpKSA8PCBNQ0NSNF9TRE1PREVfU0hJRlQpICB8CiAJKENGR19BQ1RPUlcgPDwgTUNDUjRfQUNUVE9SV19TSElGVCkgfAogCSgoKENGR19CU1RPUFJFICYgMHgwM2MwKSA+PiA2KSA8PE1DQ1I0X0JTVE9QUkU2VE85X1NISUZUICkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL1JFQURNRSBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL1JFQURNRQppbmRleCBhYjRiNjhiLi4wNmY0YmMwIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9SRUFETUUKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvUkVBRE1FCkBAIC05OCw1ICs5OCwzIEBACiA3LiBUaGUgRE1BIGRyaXZlciByb3V0aW5lcyBjb250YWlucyBhIHNldAogICAgb2YgdXRpbGl0aWVzLCBTZXQgYW5kIEdldCwgZm9yIGhvc3Qgc3lzdGVtCiAgICB0byBxdWVyeSBhbmQgbW9kaWZ5IHRoZSBkZXNpcmVkIERNQSByZWdpc3RlcnMuCi0KLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMS5jIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMS5jCmluZGV4IDhjMzgzNGUuLjljODUyNjcgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYTEuYworKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWExLmMKQEAgLTEyOSwxMiArMTI5LDEyIEBACiAgKiBzbm9vcCBpcyB0aGUgc25vb3AgZW5hYmxlIGNvbnRyb2wKICAqLwogZXh0ZXJuIERNQV9TdGF0dXMgRE1BX2RpcmVjdF90cmFuc2ZlciggRE1BX0lOVEVSUlVQVF9TVEVFUiBpbnRfc3RlZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfVFJBTlNGRVJfVFlQRSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9DSEFOTkVMIGNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfU05PT1BfTU9ERSBzbm9vcCkKKwkJCQkgICAgICAgRE1BX1RSQU5TRkVSX1RZUEUgdHlwZSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgIERNQV9DSEFOTkVMIGNoYW5uZWwsCisJCQkJICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKQogewogICAgIERNQV9NUiBtZDsKICAgICBETUFfQ0RBUiBjZGFyOwpAQCAtNzU1LDcgKzc1NSw3IEBACiAJfQogCWVsc2UgaWYgKCBzdGF0LnBlID09IDEgKQogCXsKLSAgICAgICAgLyogUENJIGVycm9yICovCisJLyogUENJIGVycm9yICovCiAJCXJ2YWwgPSBETUFQRVJST1I7CiAJCWlmICggcGVfZnVuYyAhPSAwICkKIAkJewpAQCAtNzgzLDcgKzc4Myw3IEBACiAJfQogCiAgICAgdGVtcCA9ICggc3RhdC5yZXNlcnZlZDAgJiAweGZmZmZmZiApIDw8IDg7Ci0gICAJdGVtcCB8PSAoICggc3RhdC5sbWUgICAgICAgJiAweDEgKSA8PCA3ICk7ICAvKiB3cml0ZSBvbmUgdG8gY2xlYXIgKi8KKwl0ZW1wIHw9ICggKCBzdGF0LmxtZSAgICAgICAmIDB4MSApIDw8IDcgKTsgIC8qIHdyaXRlIG9uZSB0byBjbGVhciAqLwogCXRlbXAgfD0gKCAoIHN0YXQucmVzZXJ2ZWQxICYgMHgzICkgPDwgNSApOwogICAgIHRlbXAgfD0gKCAoIHN0YXQucGUgICAgICAgICYgMHgxICkgPDwgNCApOyAgLyogd3JpdGUgb25lIHRvIGNsZWFyICovCiAgICAgdGVtcCB8PSAoICggc3RhdC5yZXNlcnZlZDIgJiAweDEgKSA8PCAzICk7CmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWEyLlMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWEyLlMKaW5kZXggZGFiMWRlMy4uY2NiYzIyNiAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMi5TCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYTIuUwpAQCAtMTIsMTYgKzEyLDE2IEBACiAgKgogICogb3V0cHV0OiByMyAtIHJlZ2lzdGVyIGNvbnRlbnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgLnRleHQKLSAgICAgIC5hbGlnbiAyCi0gICAgICAuZ2xvYmFsIGxvYWRfcnVudGltZV9yZWcKKwkudGV4dAorCS5hbGlnbiAyCisJLmdsb2JhbCBsb2FkX3J1bnRpbWVfcmVnCiAKIGxvYWRfcnVudGltZV9yZWc6CiAKLQkgICAgICBsd2JyeAlyMyxyNCxyMwotCSAgICAgIHN5bmMKKwlsd2JyeAlyMyxyNCxyMworCXN5bmMKIAotIAkgICAgICBiY2xyIDIwLCAwCisJYmNsciAyMCwgMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZnVuY3Rpb246IHN0b3JlX3J1bnRpbWVfcmVnCkBAIC0zMSwxNSArMzEsMTIgQEAKICAqICAgICAgICByNSAtIG5ldyB2YWx1ZSB0byBiZSBzdG9yZWQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICAgLnRleHQKLSAgICAgICAgICAgLmFsaWduIDIKLSAgICAgICAgICAgLmdsb2JhbCBzdG9yZV9ydW50aW1lX3JlZworCS50ZXh0CisJLmFsaWduIDIKKwkuZ2xvYmFsIHN0b3JlX3J1bnRpbWVfcmVnCiBzdG9yZV9ydW50aW1lX3JlZzoKIAotCSAgICAgIHN0d2JyeCByNSwgIHI0LCByMwotCSAgICAgIHN5bmMKLQotCQkgIGJjbHIgICAyMCwwCi0KLQorCXN0d2JyeCByNSwgIHI0LCByMworCXN5bmMKIAorCWJjbHIgICAyMCwwCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWFfZXhwb3J0LmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWFfZXhwb3J0LmgKaW5kZXggY2I3NTBkZC4uNDcxZTQ4OCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hX2V4cG9ydC5oCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYV9leHBvcnQuaApAQCAtNzEsOSArNzEsOSBAQAogICogIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIERNQSB1bml0IGNhbiBiZSB1c2VkLgogICovCiBleHRlcm4gRE1BX1N0YXR1cyBETUFfSW5pdGlhbGl6ZSgKLSAgICAgICAgaW50ICgqYXBwX3ByaW50X2Z1bmN0aW9uKShjaGFyICosLi4uKSk7IC8qIHBvaW50ZXIgdG8gb3B0aW9uYWwgInByaW50ZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3ZpZGVkIGJ5IGFwcGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgorCQkJCQkJICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KKwkJCQkJCSAqLwogCiAvKiBQZXJmb3JtIHRoZSBETUEgdHJhbnNmZXIsIG9ubHkgZGlyZWN0IG1vZGUgaXMgY3VycmVudGx5IGltcGxlbWVudGVkLgogICogQXQgdGhpcyBwb2ludCwgSSB0aGluayBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZGVmaW5lIGEgZGlmZmVyZW50CkBAIC05MSwxMCArOTEsMTAgQEAKICAqIHNub29wIGlzIHRoZSBzbm9vcCBlbmFibGUgY29udHJvbAogICovCiBleHRlcm4gRE1BX1N0YXR1cyBETUFfZGlyZWN0X3RyYW5zZmVyKCBETUFfSU5URVJSVVBUX1NURUVSIGludF9zdGVlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UUkFOU0ZFUl9UWVBFIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0NIQU5ORUwgY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKTsKKwkJCQkgICAgICAgRE1BX1RSQU5TRkVSX1RZUEUgdHlwZSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgIERNQV9DSEFOTkVMIGNoYW5uZWwsCisJCQkJICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWFfZXhwb3J0LmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYV9leHBvcnQuaAppbmRleCBjYjc1MGRkLi40NzFlNDg4IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYV9leHBvcnQuaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYV9leHBvcnQuaApAQCAtNzEsOSArNzEsOSBAQAogICogIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIERNQSB1bml0IGNhbiBiZSB1c2VkLgogICovCiBleHRlcm4gRE1BX1N0YXR1cyBETUFfSW5pdGlhbGl6ZSgKLSAgICAgICAgaW50ICgqYXBwX3ByaW50X2Z1bmN0aW9uKShjaGFyICosLi4uKSk7IC8qIHBvaW50ZXIgdG8gb3B0aW9uYWwgInByaW50ZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3ZpZGVkIGJ5IGFwcGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgorCQkJCQkJICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KKwkJCQkJCSAqLwogCiAvKiBQZXJmb3JtIHRoZSBETUEgdHJhbnNmZXIsIG9ubHkgZGlyZWN0IG1vZGUgaXMgY3VycmVudGx5IGltcGxlbWVudGVkLgogICogQXQgdGhpcyBwb2ludCwgSSB0aGluayBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZGVmaW5lIGEgZGlmZmVyZW50CkBAIC05MSwxMCArOTEsMTAgQEAKICAqIHNub29wIGlzIHRoZSBzbm9vcCBlbmFibGUgY29udHJvbAogICovCiBleHRlcm4gRE1BX1N0YXR1cyBETUFfZGlyZWN0X3RyYW5zZmVyKCBETUFfSU5URVJSVVBUX1NURUVSIGludF9zdGVlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UUkFOU0ZFUl9UWVBFIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0NIQU5ORUwgY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKTsKKwkJCQkgICAgICAgRE1BX1RSQU5TRkVSX1RZUEUgdHlwZSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgIERNQV9DSEFOTkVMIGNoYW5uZWwsCisJCQkJICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL1JFQURNRSBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9SRUFETUUKaW5kZXggYWU5NWI4OC4uNTc5ODk5NiAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL1JFQURNRQorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvUkVBRE1FCkBAIC0xMDAsNSArMTAwLDMgQEAKICAgIHNoYWxsIGFsd2F5cyBjYWxsIHRoZSBlcGljRU9JIGp1c3QgYmVmb3JlCiAgICByZmkgaW5zdHJ1Y3Rpb24uIFJlZmVyIHRvIHRoZSByb3V0aW5lLAogICAgZXBpY19leGNlcHRpb24sIGZvciBhIGNvZGUgc2FtcGxlLgotCi0KZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljLmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYy5oCmluZGV4IDE3ZTRhZmIuLjU4ZjgxYzUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljLmgKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMuaApAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgdW5zaWduZWQgaW50ICp2ZW5JZAogICAgICApOwogdm9pZCBlcGljRmVhdHVyZXMoIHVuc2lnbmVkIGludCAqbm9JUlFzLAotICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbm9DUFVzLAorCSAgICAgdW5zaWduZWQgaW50ICpub0NQVXMsCiAgICAgICAgdW5zaWduZWQgaW50ICpWZXJJZCApOwogZXh0ZXJuIHZvaWQgZXBpY0luaXQoIHVuc2lnbmVkIGludCBJUlFUeXBlLCB1bnNpZ25lZCBpbnQgY2xrUmF0aW8pOwogVUxPTkcgc3lzRVVNQkJBUlJlYWQgKCBVTE9ORyByZWdOdW0gKTsKQEAgLTEzMSw4ICsxMzEsOCBAQAogZXh0ZXJuIHZvaWQgZXBpY1RtRnJlcXVlbmN5U2V0KCB1bnNpZ25lZCBpbnQgZnJxICk7CiBleHRlcm4gdW5zaWduZWQgaW50IGVwaWNUbUZyZXF1ZW5jeUdldCh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXBpY1RtQmFzZVNldCggVUxPTkcgc3JjQWRkciwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNudCwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluaGliaXQgKTsKKwkJIHVuc2lnbmVkIGludCBjbnQsCisJCSB1bnNpZ25lZCBpbnQgaW5oaWJpdCApOwogZXh0ZXJuIHVuc2lnbmVkIGludCBlcGljVG1CYXNlR2V0ICggVUxPTkcgc3JjQWRkciwgdW5zaWduZWQgaW50ICp2YWwgKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXBpY1RtQ291bnRHZXQoIFVMT05HIHNyY0FkZHIsIHVuc2lnbmVkIGludCAqdmFsICk7CiBleHRlcm4gdW5zaWduZWQgaW50IGVwaWNUbUluaGliaXQoIHVuc2lnbmVkIGludCB0aW1lciApOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGVwaWNJbnRBY2sodm9pZCk7CiBleHRlcm4gdm9pZCBlcGljU3ByU2V0KCB1bnNpZ25lZCBpbnQgZXVtYmJhciwgdW5zaWduZWQgY2hhciApOwogZXh0ZXJuIHZvaWQgZXBpY0NvbmZpZ0dldCggdW5zaWduZWQgaW50ICpjbGtSYXRpbywKLSAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqc2VyRW5hYmxlICk7CisJICAgICAgIHVuc2lnbmVkIGludCAqc2VyRW5hYmxlICk7CiBleHRlcm4gdm9pZCBTcmNWZWNUYWJsZUluaXQodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgaW50ICBlcGljTW9kZUdldCh2b2lkKTsKIGV4dGVybiB2b2lkIGVwaWNJbnRFbmFibGUoaW50IFZlY3QpOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMxLmMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYzEuYwppbmRleCBlYjdlZDQwLi5mODlkZWVkIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYzEuYworKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYzEuYwpAQCAtNzgsMTIgKzc4LDEyIEBACiAgICAgdG1wID0gc3lzRVVNQkJBUlJlYWQoRVBJQ19JTlRfQ09ORl9SRUcpOyAgICAvKiBSZWFkIGludGVycnVwdCBjb25mLiByZWcgKi8KIAogICAgIGlmIChJUlFUeXBlID09IEVQSUNfRElSRUNUX0lSUSkgICAgICAgICAgICAgLyogZGlyZWN0IG1vZGUgKi8KLSAgICAgICAgc3lzRVVNQkJBUldyaXRlKEVQSUNfSU5UX0NPTkZfUkVHLCB0bXAgJiAweGY3ZmZmZmZmKTsKKwlzeXNFVU1CQkFSV3JpdGUoRVBJQ19JTlRfQ09ORl9SRUcsIHRtcCAmIDB4ZjdmZmZmZmYpOwogICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VyaWFsIG1vZGUgKi8KLSAgICAgICAgewotICAgICAgICB0bXAgPSAoY2xrUmF0aW8gPDwgMjgpIHwgMHgwODAwMDAwMDsgICAgLyogU2V0IGNsb2NrIHJhdGlvICovCi0gICAgICAgIHN5c0VVTUJCQVJXcml0ZShFUElDX0lOVF9DT05GX1JFRywgdG1wKTsKLSAgICAgICAgfQorCXsKKwl0bXAgPSAoY2xrUmF0aW8gPDwgMjgpIHwgMHgwODAwMDAwMDsgICAgLyogU2V0IGNsb2NrIHJhdGlvICovCisJc3lzRVVNQkJBUldyaXRlKEVQSUNfSU5UX0NPTkZfUkVHLCB0bXApOworCX0KIAogICAgIHdoaWxlIChlcGljSW50QWNrKCkgIT0gMHhmZikgICAgICAgLyogQ2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyAqLwogCQllcGljRU9JKCk7CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICB0bXAgPSBzeXNFVU1CQkFSUmVhZChzckFkZHIpOwogICAgIGFjdEJpdCA9ICh0bXAgJiA0MDAwMDAwMCkgPj4gMzA7ICAgIC8qIHJldHJpZXZlIGFjdGl2aXR5IGJpdCAtIGJpdCAzMCAqLwogICAgIGlmIChhY3RCaXQgPT0gMSkKLSAgICAgICAgcmV0dXJuIEVSUk9SOworCXJldHVybiBFUlJPUjsKIAogICAgIHRtcCAmPSAweGZmMzBmZjAwOyAgICAgLyogRXJhc2UgcHJldmlvdXNseSBzZXQgUCxTLFByaW8sVmVjdG9yIGJpdHMgKi8KICAgICBuZXdWYWwgPSAoUG9sYXJpdHkgPDwgMjMpIHwgKFNlbnNlIDw8IDIyKSB8IChQcmlvIDw8IDE2KSB8IFZlY3Q7CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICB7CiAKICAgICBpZiAoIChwcmlvTnVtIDwgMCkgfHwgKHByaW9OdW0gPiAweEYpKQotICAgICAgICByZXR1cm4gRVJST1I7CisJcmV0dXJuIEVSUk9SOwogICAgIHN5c0VVTUJCQVJXcml0ZShFUElDX1BST0NfQ1RBU0tfUFJJX1JFRywgcHJpb051bSk7CiAgICAgcmV0dXJuIE9LOwogICAgIH0KQEAgLTQ2NSw3ICs0NjUsNiBAQAogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBmdW5jdGlvbjogZXBpY1RtSW5oaWJpdAogICoKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljMi5TIGIvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMyLlMKaW5kZXggODk3OWY4OC4uOGNjMmZjNiAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMyLlMKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMyLlMKQEAgLTE3LDE0ICsxNywxNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCS50ZXh0CiAJCS5hbGlnbiAyCi0gICAgICAgIC5nbG9iYWwgQ29yZUV4dEludEVuYWJsZQorCS5nbG9iYWwgQ29yZUV4dEludEVuYWJsZQogQ29yZUV4dEludEVuYWJsZToKLSAgICAgICAgIG1mbXNyICAgIHIzCisJIG1mbXNyICAgIHIzCiAKLSAgICAgICAgIG9yaSAgICAgIHIzLHIzLDB4ODAwMCAgICAgICAgIC8qIGVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KLSAgICAgICAgIG10bXNyICAgIHIzCisJIG9yaSAgICAgIHIzLHIzLDB4ODAwMCAgICAgICAgIC8qIGVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KKwkgbXRtc3IgICAgcjMKIAotICAgICAgICAgYmNsciAyMCwgMAorCSBiY2xyIDIwLCAwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBmdW5jdGlvbjogQ29yZUV4dEludERpc2FibGUKQEAgLTM1LDIwICszNSwyMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCS50ZXh0CiAJCS5hbGlnbiAyCi0gICAgICAgIC5nbG9iYWwgQ29yZUV4dEludERpc2FibGUKKwkuZ2xvYmFsIENvcmVFeHRJbnREaXNhYmxlCiBDb3JlRXh0SW50RGlzYWJsZToKLSAgICAgICAgbWZtc3IgICAgcjQKKwltZm1zciAgICByNAogCiAJeG9yCXIzLHIzLHIzCiAJb3IgICAgICByMyxyMyxyNAogCiAJYW5kaXMuCXI0LHI0LDB4ZmZmZgotICAgICAgICBhbmRpLiAgIHIzLHIzLDB4N2ZmZiAgICAgICAgIC8qIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJydXB0ICovCisJYW5kaS4gICByMyxyMywweDdmZmYgICAgICAgICAvKiBkaXNhYmxlIGV4dGVybmFsIGludGVycnVwdCAqLwogCiAJb3IgICAgICByMyxyMyxyNAotICAgICAgICBtdG1zciAgICByMworCW10bXNyICAgIHIzCiAKLSAgICAgICAgYmNsciAyMCwgMAorCWJjbHIgMjAsIDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZnVuY3Rpb246IGVwaWNFT0kKQEAgLTYxLDIwICs2MSwyMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCQkudGV4dAogCQkuYWxpZ24gMgotICAgICAgICAuZ2xvYmFsIGVwaWNFT0kKKwkuZ2xvYmFsIGVwaWNFT0kKIGVwaWNFT0k6CiAJbGlzCXI1LDB4MDAwNgkgICAgICAgIC8qIEJ1aWxkIEVuZCBPZiBJbnRlcnJ1cHQgUmVnaXN0ZXIgb2Zmc2V0ICovCiAJb3JpCXI1LHI1LDB4MDBiMAogCXhvcglyNyxyNyxyNwkgICAgICAgIC8qIENsZWFyIHI3ICovCiAJc3R3YnJ4CXI3LHI1LHIzCSAgICAvKiBTYXZlIHI3LCB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgd2lsbAotCQkJCSAgICAgICAgICAgICAqIGludGlkYXRlIHRoZSBlbmQgb2YgcHJvY2Vzc2luZyB0aGUKLQkgCQkJICAgICAgICAgICAgICogaGlnaGVzdCBpbnRlcnJ1cHQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSAgICAgKiBpbnRpZGF0ZSB0aGUgZW5kIG9mIHByb2Nlc3NpbmcgdGhlCisJCQkJCSAgICAgKiBoaWdoZXN0IGludGVycnVwdC4KKwkJCSAgICAgKi8KIAlzeW5jCiAKIAkvKiAtLS1SRVNUT1JFIE1BQ0hJTkUgU1RBVEUgKi8KIAltZm1zcglyMTMJCSAgICAgICAgLyogQ2xlYXIgUmVjb3ZlcmFibGUgSW50ZXJydXB0IGJpdCBpbiBNU1IgKi8KLSAgICAgICAgb3IgICAgICByNyxyNyxyMTMKKwlvciAgICAgIHI3LHI3LHIxMwogCiAJYW5kaXMuICByNyxyNywweGZmZmYKIAlhbmRpLglyMTMscjEzLDB4N2ZmZAkvKiAoYW5kIGRpc2FibGUgaW50ZXJydXB0cykgKi8KQEAgLTE0Nyw4ICsxNDcsOCBAQAogCXN0dyAgICAgcjMsMHgxYyhyMSkgLyogUHVzaCBDVFIgKi8KIAogCW10c3ByCVNQUkcwLHIxCS8qIFNhdmUgdXBkYXRlZCBTdXBlcnZpc29yIHN0YWNrIHBvaW50ZXIKLQkJCQkgICAgICAgICAqIHZhbHVlIHRvIFNQUkcwCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICogdmFsdWUgdG8gU1BSRzAKKwkJCSAqLwogCW1mbXNyCXIzCiAJb3JpCSAgICByMyxyMywweDAwMDIJLyogU2V0IFJlY292ZXJhYmxlIEludGVycnVwdCBiaXQgaW4gTVNSICovCiAJbXRtc3IJcjMKQEAgLTE1OSw4ICsxNTksOCBAQAogCiAJLyogLS0tUkVBRCBFUElDIFJFR0lTVEVSOglQUk9DRVNTT1IgSU5URVJSVVBUIEFDS05PV0xFREdFIFJFR0lTVEVSICovCiAJbGlzCXI1LDB4MDAwNgkgICAgICAgIC8qIEJ1aWxkIEludGVycnVwdCBBY2tub3dsZWRnZSBSZWdpc3RlcgotCQkJCSAgICAgICAgICAgICAqIG9mZnNldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgICAgICogb2Zmc2V0CisJCQkgICAgICovCiAJb3JpCXI1LHI1LDB4MDBhMAogCWx3YnJ4CXI3LHI1LHI2ICAgIC8qIExvYWQgaW50ZXJydXB0IHZlY3RvciBpbnRvIHI3ICovCiAJc3luYwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWN1dGlsLlMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpY3V0aWwuUwppbmRleCBhODNmYmQ4Li40ODc3MDUwIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpY3V0aWwuUworKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpY3V0aWwuUwpAQCAtMjksMTIgKzI5LDEyIEBACiBsb2FkX3J1bnRpbWVfcmVnOgogCiAJCSAgeG9yIHI1LHI1LHI1Ci0gICAgICAgICAgb3IgIHI1LHI1LHIzICAgICAgIC8qIHNhdmUgZXVtYmJhciAqLworCSAgb3IgIHI1LHI1LHIzICAgICAgIC8qIHNhdmUgZXVtYmJhciAqLwogCiAJICAgICAgbHdicngJcjMscjQscjUKIAkgICAgICBzeW5jCiAKLSAJICAgICAgYmNsciAyMCwgMAorCSAgICAgIGJjbHIgMjAsIDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGZ1bmN0aW9uOiBzdG9yZV9ydW50aW1lX3JlZwpAQCAtNDQsOSArNDQsOSBAQAogICogICAgICAgIHI1IC0gbmV3IHZhbHVlIHRvIGJlIHN0b3JlZAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgICAudGV4dAotICAgICAgICAgICAuYWxpZ24gMgotICAgICAgICAgICAuZ2xvYmFsIHN0b3JlX3J1bnRpbWVfcmVnCisJICAgLnRleHQKKwkgICAuYWxpZ24gMgorCSAgIC5nbG9iYWwgc3RvcmVfcnVudGltZV9yZWcKIHN0b3JlX3J1bnRpbWVfcmVnOgogCiAJCSAgeG9yIHIwLHIwLHIwCkBAIC01NSw0ICs1NSwzIEBACiAJICAgICAgc3luYwogCiAJCSAgYmNsciAgIDIwLDAKLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcnJvcnMuaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXJyb3JzLmgKaW5kZXggMTQzNTE4OC4uODg3ZjI4NCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcnJvcnMuaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2Vycm9ycy5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKIC8qCi0gICAgICAgICAxICAgICAgICAgMiAgICAgICAgIDMgICAgICAgICA0ICAgICAgICAgNSAgICAgICAgIDYgICAgICAgICA3ICAgICAgICAgOAorCSAxICAgICAgICAgMiAgICAgICAgIDMgICAgICAgICA0ICAgICAgICAgNSAgICAgICAgIDYgICAgICAgICA3ICAgICAgICAgOAogMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKICovCiAvKiBMaXN0IGRlZmluZSBzdGF0ZW1lbnRzIGhlcmUgKi8KQEAgLTc4LDcgKzc4LDYgQEAKICNkZWZpbmUgRk9SX0JPQVJEX09OTFkJCTB4ZmIwYSAgLyogIk5vdCBhdmFpbGFibGUgZm9yIFVuaXguIiAqLwogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIHRoZXNlIGFyZSBmb3IgdGhlIGVycm9yIGNoZWNraW5nIHRvb2xib3gJCQkJKi8KIApAQCAtMTQ3LDkgKzE0Niw2IEBACiAjZGVmaW5lIFVOS05PV05fUEFSQU1FVEVSCTB4RkUwMSAvKiAidW5rbm93biB0eXBlIG9mIHBhcmFtZXRlciAiKi8KIAogCi0KLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogdGhlc2UgYXJlIGZvciB0aGUgdG9rZW5pemVyIHRvb2xib3ggCQkJCQkqLwogCkBAIC0xNjQsNyArMTYwLDYgQEAKICNkZWZpbmUgTk9fT1BFTl9JQlMJCTB4RkYwOCAvKiAibm8gb3BlbiBpbnB1dCBidWZmZXJzIiAqLwogCiAKLQogLyogdGhlc2UgYXJlIGZvciB0aGUgcmVhZCBmcm9tIHNjcmVlbiB0b29sYm94ICovCiAKICNkZWZpbmUgUkVTRVJWRURfV09SRAkJMHhGQzAwIC8qIHVzZWQgYSByZXNlcnZlZCB3b3JkIGFzIGFuIGFyZ3VlbWVudCovCkBAIC0xNzUsNyArMTcwLDYgQEAKICNkZWZpbmUgRlVMTF9CUERTCQkweEZBMDAgLyogYnJlYWtwb2ludCBkYXRhIHN0cnVjdHVyZSBpcyBmdWxsICovCiAKIAotCiAvKiBUSEVTRSBhcmUgZm9yIHRoZSBkb3dubG9hZGVyICovCiAKICNkZWZpbmUgTk9UX0lOX1NfUkVDT1JEX0ZPUk1BVCAJMHhmOTAwIC8qICJub3QgaW4gUy1SZWNvcmQgRm9ybWF0IiAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvUkVBRE1FIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvUkVBRE1FCmluZGV4IDhkODJkZjMuLjFkYjcyMTAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL1JFQURNRQorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9SRUFETUUKQEAgLTEwMiw0ICsxMDIsMyBAQAogICAgaG9zdCBzeXN0ZW0gYSB3YXkgdG8gdXNlIGl0cyBvd24gZXZlbnQKICAgIGhhbmRsZXIgaW5zdGVhZCBvZiB0aGUgSTJDX0lTUiBwcm92aWRlZAogICAgaGVyZS4KLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjLmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMuaAppbmRleCAzMjA5YmZlLi40OGE0MDFkIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMuaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMuaApAQCAtMTA5LDEzICsxMDksMTMgQEAKICAqLwogc3RhdGljIEkyQ1N0YXR1cyBJMkNfcHV0KCB1bnNpZ25lZCBpbnQgIGV1bWJiYXIsCiAJCQkJCQkgIHVuc2lnbmVkIGNoYXIgcmN2X2FkZHIsICAgIC8qIHJlY2VpdmVyJ3MgYWRkcmVzcyAqLwotCSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXJfcHRyLCAvKiBwb2ludGVyIG9mIGRhdGEgdG8gYmUgc2VudCAqLworCQkJICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyX3B0ciwgLyogcG9pbnRlciBvZiBkYXRhIHRvIGJlIHNlbnQgKi8KIAkJCQkJICAgICAgdW5zaWduZWQgaW50ICBsZW5ndGgsICAgICAgLyogbnVtYmVyIG9mIGJ5dGUgb2YgaW4gdGhlIGJ1ZmZlciAqLwogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgIHN0b3BfZmxhZywgICAvKiAxIC0gc2lnbmFsIFNUT1Agd2hlbiBidWZmZXIgaXMgZW1wdHkKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMCAtIG5vIFNUT1Agc2lnbmFsIHdoZW4gYnVmZmVyIGlzIGVtcHR5Ci0JCQkJCQkJCQkJCSAgICAgICAgICAqLworCQkJCQkJCQkJICAqIDAgLSBubyBTVE9QIHNpZ25hbCB3aGVuIGJ1ZmZlciBpcyBlbXB0eQorCQkJCQkJCQkJCQkJICAqLwogCQkJCQkJICB1bnNpZ25lZCBpbnQgIGlzX2NudCApOyAgICAvKiAxIC0gdGhpcyBpcyBhIHJlc3RhcnQsIGRvbid0IGNoZWNrIE1CQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwIC0gdGhpcyBpcyBhIG5ldyBzdGFydCwgY2hlY2sgTUJCCisJCQkJCQkgICAgICAqIDAgLSB0aGlzIGlzIGEgbmV3IHN0YXJ0LCBjaGVjayBNQkIKIAkJCQkJCQkJCQkJCQkgICovCiAKIC8qIFJlY2VpdmUgYSBidWZmZXIgb2YgZGF0YSBmcm9tIHRoZSBkZXNpcmVkIHNlbmRlcl9hZGRyCkBAIC0xMzAsMTIgKzEzMCwxMiBAQAogc3RhdGljIEkyQ1N0YXR1cyBJMkNfZ2V0KCB1bnNpZ25lZCBpbnQgIGV1bWJiYXIsCiAJCQkJCQkgIHVuc2lnbmVkIGNoYXIgc2VuZGVyX2FkZHIsIC8qIHNlbmRlcidzIGFkZHJlc3MgKi8KIAkJCQkJICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyX3B0ciwgLyogcG9pbnRlciBvZiByZWNlaXZpbmcgYnVmZmVyICovCi0JCQkJICAgICAgICAgIHVuc2lnbmVkIGludCAgbGVuZ3RoLCAgICAgIC8qIGxlbmd0aCBvZiB0aGUgcmVjZWl2aW5nIGJ1ZmZlciAqLworCQkJCQkgIHVuc2lnbmVkIGludCAgbGVuZ3RoLCAgICAgIC8qIGxlbmd0aCBvZiB0aGUgcmVjZWl2aW5nIGJ1ZmZlciAqLwogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgIHN0b3BfZmxhZywgICAvKiAxIC0gc2lnbmFsIFNUT1Agd2hlbiBidWZmZXIgaXMgZnVsbAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwIC0gbm8gU1RPUCBzaWduYWwgd2hlbiBidWZmZXIgaXMgZnVsbAorCQkJCQkJCQkJICAqIDAgLSBubyBTVE9QIHNpZ25hbCB3aGVuIGJ1ZmZlciBpcyBmdWxsCiAJCQkJCQkJCQkJCQkgICAgICAqLwogCQkJCQkJICB1bnNpZ25lZCBpbnQgIGlzX2NudCApOyAgICAvKiAxIC0gdGhpcyBpcyBhIHJlc3RhcnQsIGRvbid0IGNoZWNrIE1CQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwIC0gdGhpcyBpcyBhIG5ldyBzdGFydCwgY2hlY2sgTUJCCisJCQkJCQkgICAgICAqIDAgLSB0aGlzIGlzIGEgbmV3IHN0YXJ0LCBjaGVjayBNQkIKIAkJCQkJCQkJCQkJCQkgICovCiAKICNpZiAwIC8qIHRoZSBJMkNfd3JpdGUgYW5kIEkyQ19yZWFkIGZ1bmN0aW9ucyBhcmUgbm90IGFjdGl2ZSAqLwpAQCAtMTYwLDEwICsxNjAsMTAgQEAKICAqLwogc3RhdGljIEkyQ1N0YXR1cyBJMkNfd3JpdGUoIHVuc2lnbmVkIGludCBldW1iYmFyLAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9wdHIsIC8qIHBvaW50ZXIgb2YgZGF0YSB0byBiZSBzZW50ICovCi0JCQkJCSAgICAgICAgdW5zaWduZWQgaW50ICBsZW5ndGgsICAgICAgLyogbnVtYmVyIG9mIGJ5dGUgb2YgaW4gdGhlIGJ1ZmZlciAqLwotCQkJCQkgICAgICAgIHVuc2lnbmVkIGludCAgc3RvcF9mbGFnICk7IC8qIDEgLSBzaWduYWwgU1RPUCB3aGVuIGJ1ZmZlciBpcyBlbXB0eQotCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAqIDAgLSBubyBTVE9QIHNpZ25hbCB3aGVuIGJ1ZmZlciBpcyBlbXB0eQotCQkJCQkJCQkJCQkgICAgICAgICAgICAqLworCQkJCQkJdW5zaWduZWQgaW50ICBsZW5ndGgsICAgICAgLyogbnVtYmVyIG9mIGJ5dGUgb2YgaW4gdGhlIGJ1ZmZlciAqLworCQkJCQkJdW5zaWduZWQgaW50ICBzdG9wX2ZsYWcgKTsgLyogMSAtIHNpZ25hbCBTVE9QIHdoZW4gYnVmZmVyIGlzIGVtcHR5CisJCQkJCQkJCQkJCSogMCAtIG5vIFNUT1Agc2lnbmFsIHdoZW4gYnVmZmVyIGlzIGVtcHR5CisJCQkJCQkJCQkJCQkgICAgKi8KIAogIC8qIFJlY2VpdmUgYSBidWZmZXIgb2YgZGF0YSBmcm9tIHRoZSBzZW5kaW5nIG1hc3Rlci4KICAqIElmIHN0b3BfZmxhZyBpcyBzZXQsIHdoZW4gdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB0aGUKQEAgLTE3NSw4ICsxNzUsOCBAQAogc3RhdGljIEkyQ1N0YXR1cyBJMkNfcmVhZCh1bnNpZ25lZCBpbnQgIGV1bWJiYXIsCiAJCQkJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9wdHIsIC8qIHBvaW50ZXIgb2YgcmVjZWl2aW5nIGJ1ZmZlciAqLwogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgIGxlbmd0aCwgICAgICAvKiBsZW5ndGggb2YgdGhlIHJlY2VpdmluZyBidWZmZXIgKi8KLQkJCQkgICAgICAgICAgdW5zaWduZWQgaW50ICBzdG9wX2ZsYWcgKTsgLyogMSAtIHNpZ25hbCBTVE9QIHdoZW4gYnVmZmVyIGlzIGZ1bGwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMCAtIG5vIFNUT1Agc2lnbmFsIHdoZW4gYnVmZmVyIGlzIGZ1bGwKKwkJCQkJICB1bnNpZ25lZCBpbnQgIHN0b3BfZmxhZyApOyAvKiAxIC0gc2lnbmFsIFNUT1Agd2hlbiBidWZmZXIgaXMgZnVsbAorCQkJCQkJCQkJICAqIDAgLSBubyBTVE9QIHNpZ25hbCB3aGVuIGJ1ZmZlciBpcyBmdWxsCiAJCQkJCQkJCQkJCQkgICAgICAqLwogI2VuZGlmIC8qIG9mIGlmMCBmb3IgdHVybmluZyBvZmYgSTJDX3JlYWQgJiBJMkNfd3JpdGUgKi8KIApAQCAtMjAzLDEyICsyMDMsMTIgQEAKICAqLwogc3RhdGljIEkyQ1N0YXR1cyBJMkNfU3RhcnQoIHVuc2lnbmVkIGludCAgZXVtYmJhciwKIAkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIHNsYXZlX2FkZHIsIC8qIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmVyICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgSTJDX01PREUgICAgIG1vZGUsICAgICAgIC8qIFhNSVQoMSkgLSBwdXQgKHdyaXRlKQotCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgKiBSQ1YoMCkgIC0gZ2V0IChyZWFkKQorCQkJCUkyQ19NT0RFICAgICBtb2RlLCAgICAgICAvKiBYTUlUKDEpIC0gcHV0ICh3cml0ZSkKKwkJCQkJCQkJCQkgICogUkNWKDApICAtIGdldCAocmVhZCkKIAkJCQkJCQkJCQkJCQkgICovCiAJCQkJCQkgICAgdW5zaWduZWQgaW50IGlzX2NudCApOyAvKiAxIC0gdGhpcyBpcyBhIHJlc3RhcnQsIGRvbid0IGNoZWNrIE1CQgogCQkJCQkJCQkJCQkJCSogMCAtIHRoaXMgaXMgYSBuZXcgc3RhcnQsIGNoZWNrIE1CQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkgICAgKi8KIAogLyogR2VuZXJhdGUgYSBTVE9QIHNpZ25hbCB0byB0ZXJtaW5hdGUgdGhlIHRyYW5zYWN0aW9uLiAqLwogc3RhdGljIEkyQ1N0YXR1cyBJMkNfU3RvcCggdW5zaWduZWQgaW50IGV1bWJiYXIgKTsKQEAgLTI1OCwxMCArMjU4LDEwIEBACiAgKi8KIHN0YXRpYyBJMkNTdGF0dXMgSTJDX0luaXQoIHVuc2lnbmVkIGludCAgZXVtYmJhciwKIAkJCQkJCSAgIHVuc2lnbmVkIGNoYXIgZmRyLCAgICAgICAvKiBmcmVxdWVuY3kgZGl2aWRlciAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhZGRyLCAgICAgIC8qIGRyaXZlcidzIGFkZHJlc3MgdXNlZCBmb3IgcmVjZWl2aW5nICovCi0JIAkJCSAgICAgICAgICAgdW5zaWduZWQgaW50IGVuX2ludCk7ICAgIC8qIDEgLSBlbmFibGUgSTJDIGludGVycnVwdAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgLSBkaXNhYmxlIEkyQyBpbnRlcnJ1cAotCQkJCQkJCQkJCQkgICAgICAgICAqLworCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkciwgICAgICAvKiBkcml2ZXIncyBhZGRyZXNzIHVzZWQgZm9yIHJlY2VpdmluZyAqLworCQkJCQkgICB1bnNpZ25lZCBpbnQgZW5faW50KTsgICAgLyogMSAtIGVuYWJsZSBJMkMgaW50ZXJydXB0CisJCQkJCQkJCQkgKiAwIC0gZGlzYWJsZSBJMkMgaW50ZXJydXAKKwkJCQkJCQkJCQkJCSAqLwogCiAvKiBJMkMgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KICAqCkBAIC0yOTksMTEgKzI5OSwxMSBAQAogICogICAgICAgIEkyQ19SRVNUQVJULCB0aGlzIGlzIGEgY29udGludWF0aW9uIG9mIGV4aXN0aW5nIHRyYW5zYWN0aW9uCiAgKi8KIHN0YXRpYyBJMkNfU3RhdHVzIEkyQ19kb19idWZmZXIoIEkyQ19JTlRFUlJVUFRfTU9ERSBlbl9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfVFJBTlNBQ1RJT05fTU9ERSBhY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGkyY19hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19TVE9QX01PREUgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19SRVNUQVJUX01PREUgcnN0YSk7CisJCQkJIEkyQ19UUkFOU0FDVElPTl9NT0RFIGFjdCwKKwkJCQkgdW5zaWduZWQgY2hhciBpMmNfYWRkciwKKwkJCQkgaW50IGxlbiwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCSBJMkNfU1RPUF9NT0RFIHN0b3AsCisJCQkJIGludCByZXRyeSwKKwkJCQkgSTJDX1JFU1RBUlRfTU9ERSByc3RhKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjMi5TIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjMi5TCmluZGV4IDVjYzdjOTguLjNmZDdlMDMgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzIuUworKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMyLlMKQEAgLTE2LDIwICsxNiwyMCBAQAogICoKICAqIG91dHB1dDogcjMgLSByZWdpc3RlciBjb250ZW50CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC50ZXh0Ci0gICAgICAuYWxpZ24gMgotICAgICAgLmdsb2JhbCBsb2FkX3J1bnRpbWVfcmVnCisJLnRleHQKKwkuYWxpZ24gMgorCS5nbG9iYWwgbG9hZF9ydW50aW1lX3JlZwogbG9hZF9ydW50aW1lX3JlZzoKIAotLyoJCSAgeG9yIHI1LHI1LHI1Ci0qICAgICAgICAgb3IgIHI1LHI1LHIzCi0qCi0qCSAgICAgIGx3YnJ4CXIzLHI0LHI1Ci0qLwotCSAgICAgIGx3YnJ4IHIzLHI0LHIzCi0JICAgICAgc3luYworLyoJeG9yIHI1LHI1LHI1CisgKglvciAgcjUscjUscjMKKyAqCisgKglsd2JyeAlyMyxyNCxyNQorICovCisJbHdicnggcjMscjQscjMKKwlzeW5jCiAKLSAJICAgICAgYmNsciAyMCwgMAorCWJjbHIgMjAsIDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGZ1bmN0aW9uOiBzdG9yZV9ydW50aW1lX3JlZwpAQCAtMzksMTYgKzM5LDE0IEBACiAgKiAgICAgICAgcjUgLSBuZXcgdmFsdWUgdG8gYmUgc3RvcmVkCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgIC50ZXh0Ci0gICAgICAgICAgIC5hbGlnbiAyCi0gICAgICAgICAgIC5nbG9iYWwgc3RvcmVfcnVudGltZV9yZWcKKwkudGV4dAorCS5hbGlnbiAyCisJLmdsb2JhbCBzdG9yZV9ydW50aW1lX3JlZwogc3RvcmVfcnVudGltZV9yZWc6CiAKLQkgICAgICBzdHdicnggcjUsICByNCwgcjMKLQkgICAgICBzeW5jCi0KLSAgICAgICAgICAgICAgYmNsciAgIDIwLDAKLQorCXN0d2JyeCByNSwgIHI0LCByMworCXN5bmMKIAorCWJjbHIgICAyMCwwCiAKICNlbmRpZiAvKiBDT05GSUdfSEFSRF9JMkMgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyY19leHBvcnQuaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyY19leHBvcnQuaAppbmRleCAxNzQwM2VhLi42MjY0ZDE4IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmNfZXhwb3J0LmgKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjX2V4cG9ydC5oCkBAIC03MSwxMSArNzEsMTEgQEAKIGV4dGVybiBJMkNfU3RhdHVzIEkyQ19Jbml0aWFsaXplKAogCXVuc2lnbmVkIGNoYXIgYWRkciwgICAgICAgICAgICAvKiBkcml2ZXIncyBJMkMgc2xhdmUgYWRkcmVzcyAqLwogCUkyQ19JTlRFUlJVUFRfTU9ERSBlbl9pbnQsICAgICAvKiAxIC0gZW5hYmxlIEkyQyBpbnRlcnJ1cHQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMCAtIGRpc2FibGUgSTJDIGludGVycnVwdAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgaW50ICgqYXBwX3ByaW50X2Z1bmN0aW9uKShjaGFyICosLi4uKSk7IC8qIHBvaW50ZXIgdG8gb3B0aW9uYWwgInByaW50ZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3ZpZGVkIGJ5IGFwcGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJKiAwIC0gZGlzYWJsZSBJMkMgaW50ZXJydXB0CisJCQkJCSovCisJaW50ICgqYXBwX3ByaW50X2Z1bmN0aW9uKShjaGFyICosLi4uKSk7IC8qIHBvaW50ZXIgdG8gb3B0aW9uYWwgInByaW50ZiIKKwkJCQkJCSAqIHByb3ZpZGVkIGJ5IGFwcGxpY2F0aW9uCisJCQkJCQkgKi8KIAogLyogUGVyZm9ybSB0aGUgZ2l2ZW4gSTJDIHRyYW5zYWN0aW9uLCBvbmx5IE1BU1RFUl9YTUlUIGFuZCBNQVNURVJfUkNWCiAgKiBhcmUgaW1wbGVtZW50ZWQuICBCb3RoIGFyZSBvbmx5IGluIHBvbGxpbmcgbW9kZS4KQEAgLTkyLDEyICs5MiwxMiBAQAogICogICAgICAgIEkyQ19SRVNUQVJULCB0aGlzIGlzIGEgY29udGludWF0aW9uIG9mIGV4aXN0aW5nIHRyYW5zYWN0aW9uCiAgKi8KIGV4dGVybiBJMkNfU3RhdHVzIEkyQ19kb190cmFuc2FjdGlvbiggSTJDX0lOVEVSUlVQVF9NT0RFIGVuX2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1RSQU5TQUNUSU9OX01PREUgYWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGkyY19hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfU1RPUF9NT0RFIHN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1JFU1RBUlRfTU9ERSByc3RhKTsKKwkJCQkgICAgICBJMkNfVFJBTlNBQ1RJT05fTU9ERSBhY3QsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBpMmNfYWRkciwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFfYWRkciwKKwkJCQkgICAgICBpbnQgbGVuLAorCQkJCSAgICAgIGNoYXIgKmJ1ZmZlciwKKwkJCQkgICAgICBJMkNfU1RPUF9NT0RFIHN0b3AsCisJCQkJICAgICAgaW50IHJldHJ5LAorCQkJCSAgICAgIEkyQ19SRVNUQVJUX01PREUgcnN0YSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjX2V4cG9ydC5oIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMmNfZXhwb3J0LmgKaW5kZXggMTc0MDNlYS4uNjI2NGQxOCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmNfZXhwb3J0LmgKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMmNfZXhwb3J0LmgKQEAgLTcxLDExICs3MSwxMSBAQAogZXh0ZXJuIEkyQ19TdGF0dXMgSTJDX0luaXRpYWxpemUoCiAJdW5zaWduZWQgY2hhciBhZGRyLCAgICAgICAgICAgIC8qIGRyaXZlcidzIEkyQyBzbGF2ZSBhZGRyZXNzICovCiAJSTJDX0lOVEVSUlVQVF9NT0RFIGVuX2ludCwgICAgIC8qIDEgLSBlbmFibGUgSTJDIGludGVycnVwdAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwIC0gZGlzYWJsZSBJMkMgaW50ZXJydXB0Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkqIDAgLSBkaXNhYmxlIEkyQyBpbnRlcnJ1cHQKKwkJCQkJKi8KKwlpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgorCQkJCQkJICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KKwkJCQkJCSAqLwogCiAvKiBQZXJmb3JtIHRoZSBnaXZlbiBJMkMgdHJhbnNhY3Rpb24sIG9ubHkgTUFTVEVSX1hNSVQgYW5kIE1BU1RFUl9SQ1YKICAqIGFyZSBpbXBsZW1lbnRlZC4gIEJvdGggYXJlIG9ubHkgaW4gcG9sbGluZyBtb2RlLgpAQCAtOTIsMTIgKzkyLDEyIEBACiAgKiAgICAgICAgSTJDX1JFU1RBUlQsIHRoaXMgaXMgYSBjb250aW51YXRpb24gb2YgZXhpc3RpbmcgdHJhbnNhY3Rpb24KICAqLwogZXh0ZXJuIEkyQ19TdGF0dXMgSTJDX2RvX3RyYW5zYWN0aW9uKCBJMkNfSU5URVJSVVBUX01PREUgZW5faW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfVFJBTlNBQ1RJT05fTU9ERSBhY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaTJjX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19TVE9QX01PREUgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfUkVTVEFSVF9NT0RFIHJzdGEpOworCQkJCSAgICAgIEkyQ19UUkFOU0FDVElPTl9NT0RFIGFjdCwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyIGkyY19hZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YV9hZGRyLAorCQkJCSAgICAgIGludCBsZW4sCisJCQkJICAgICAgY2hhciAqYnVmZmVyLAorCQkJCSAgICAgIEkyQ19TVE9QX01PREUgc3RvcCwKKwkJCQkgICAgICBpbnQgcmV0cnksCisJCQkJICAgICAgSTJDX1JFU1RBUlRfTU9ERSByc3RhKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8uaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvLmgKaW5kZXggODcyMjVhYi4uYzQ3MjUzZCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8uaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby5oCkBAIC0xMjMsMTEgKzEyMywxMSBAQAogIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZW5hYmxlIHRoZSBkZXZpY2VzJyBvdXRib3VuZCBpbnRlcnJ1cHRzIGl0IHdhbnRzIHRvIGhhbmRsZSAoUkVNT1RFKQogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dFbmFibGUoIExPQ0FUSU9OLCAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbiApOyAgIC8qIGInMScgLSBtc2cgMAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGInMTAnLSBtc2cgMQotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGInMTEnLSBib3RoCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBuICk7ICAgLyogYicxJyAtIG1zZyAwCisJCQkJCQkJCQkgICAgICogYicxMCctIG1zZyAxCisJCQkJCQkJCQkgICAgICogYicxMSctIGJvdGgKKwkJCQkJCQkJCSAgICAgKi8KIAogLyoqCiAgRGlzYWJsZSB0aGUgaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCBpbi9vdXQgYm91bmQgbXNnCkBAIC0xMzcsMTEgKzEzNywxMSBAQAogIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZGlzYWJsZSBvdXRib3VuZCBpbnRlcnJ1cHRzIG9mIGRldmljZXMgaXQgaXMgbm90IGludGVyZXN0ZWQgKFJFTU9URSkKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPTXNnRGlzYWJsZSggTE9DQVRJT04sICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbiApOyAvKiBiJzEnIC0gbXNnIDAKLQkJCSAgIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGInMTAnLSBtc2cgMQotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYicxMSctIGJvdGgKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCXVuc2lnbmVkIGludCBiYXNlLCAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCQl1bnNpZ25lZCBjaGFyIG4gKTsgLyogYicxJyAtIG1zZyAwCisJCQkJCQkJCQkgICAgKiBiJzEwJy0gbXNnIDEKKwkJCQkJCQkJCSAgICAqIGInMTEnLSBib3RoCisJCQkJCQkJCQkgICAgKi8KIAogLyoqCiAgUmVhZCB0aGUgbXNnIHJlZ2lzdGVyIGVpdGhlciBmcm9tIGxvY2FsIGluYm91bmQgbXNnIDAvMSwKQEAgLTE1NCw5ICsxNTQsOSBAQAogIE90aGVyd2lzZSBsb2NhbCBpbmJvdW5kIG1zZyBpcyByZWFkLgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dHZXQgKCBMT0NBVElPTiwgICAgICAgICAgICAgICAgIC8qIFJFTU9URS9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbXNnICk7CisJCQkgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KKwkJCSAgICAgdW5zaWduZWQgaW50ICptc2cgKTsKIAogLyoqCiAgV3JpdGUgdG8gbnRoIE1zZyByZWdpc3RlciBlaXRoZXIgb24gbG9jYWwgb3V0Ym91bmQgbXNnIDAvMSwKQEAgLTE2OSw5ICsxNjksOSBAQAogIE90aGVyd2lzZSBsb2NhbCBvdXRib3VuZCBtc2cgaXMgd3JpdHRlbi4KICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPTXNnUG9zdCggTE9DQVRJT04sICAgICAgICAgICAgICAgICAvKiBSRU1PVEUvTE9DQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbXNnICk7CisJCQkJdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLworCQkJCXVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCisJCQkJdW5zaWduZWQgaW50IG1zZyApOwogCiAvKioKICBFbmFibGUgdGhlIEluL091dCBEb29yQmVsbCBJbnRlcnJ1cHQKQEAgLTE4Myw4ICsxODMsOCBAQAogIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZW5hYmxlIG91dGJvdW5kIGRvb3JiZWxsIGludGVycnVwdHMgb2YgdGhlIGRldmljZXMgaXQgd2FudHMgdG8gaGFuZGxlCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0RCRW5hYmxlKCBMT0NBVElPTiwgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluX2RiICk7Lyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCisJCQkgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSAgICAgIHVuc2lnbmVkIGludCBpbl9kYiApOy8qIHdoZW4gTE9DQUwsIEkyT19JTl9EQiwgTUMsIEkyT19JTl9EQnxNQyAqLwogCiAvKioKICBEaXNhYmxlIHRoZSBJbi9PdXQgRG9vckJlbGwgSW50ZXJydXB0CkBAIC0xOTUsOCArMTk1LDggQEAKIAogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9EQkRpc2FibGUoIExPQ0FUSU9OLCAgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsgIC8qIHdoZW4gTE9DQUwsIEkyT19JTl9EQiwgTUMsIEkyT19JTl9EQnxNQyAqLworCQkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQkgICAgICAgdW5zaWduZWQgaW50IGluX2RiICk7ICAvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KIAogLyoqCiAgUmVhZCBhIGxvY2FsIGluZG9vcmJlbGwgcmVnaXN0ZXIsIG9yIGFuIG91dGRvb3JiZWxsIG9mIGRldmljZXMuCkBAIC0yMDksNyArMjA5LDcgQEAKICBPdGhlcndpc2UgbG9jYWwgaW4gZG9vcmJlbGwgaXMgcmVhZAogICoqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBJMk9EQkdldCggTE9DQVRJT04sICAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UpOyAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJICAgICAgdW5zaWduZWQgaW50IGJhc2UpOyAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwogCiAvKioKICBXcml0ZSB0byBhIGxvY2FsIG91dGRvb3JiZWxsIHJlZ2lzdGVyLCBvciBhbiBpbmRvb3JiZWxsIHJlZ2lzdGVyIG9mIGRldmljZXMuCkBAIC0yMjEsOCArMjIxLDggQEAKICBPdGhlcndpc2UgbG9jYWwgb3V0IGRvb3JiZWxsIGlzIHdyaXR0ZW4KICAqKi8KIGV4dGVybiB2b2lkIEkyT0RCUG9zdCggTE9DQVRJT04sICAgICAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1zZyApOyAgICAgICAvKiAgIGluICAgLyBvdXQgICAgKi8KKwkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbXNnICk7ICAgICAgIC8qICAgaW4gICAvIG91dCAgICAqLwogCiAvKioKICBSZWFkIHRoZSBvdXRib3VuZCBtc2cgdW5pdCBpbnRlcnJ1cHQgc3RhdHVzIG9mIGRldmljZXMuIFJlYWRpbmcgYW4gaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciwKQEAgLTI1MSw4ICsyNTEsOCBAQAogIE1VQ1IuCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9Jbml0KCB1bnNpZ25lZCBpbnQgZXVtYmJhciwKLQkJCQkgICAgICAgICAgICAgIFFVRVVFX1NJWkUsCi0JCQkJICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcWJhKTsvKiBxdWV1ZSBiYXNlIGFkZHJlc3MgdGhhdCBtdXN0IGJlIGFsaWduZWQgYXQgMU0gKi8KKwkJCQkJICAgICAgUVVFVUVfU0laRSwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHFiYSk7LyogcXVldWUgYmFzZSBhZGRyZXNzIHRoYXQgbXVzdCBiZSBhbGlnbmVkIGF0IDFNICovCiAvKioKICBFbmFibGUgdGhlIGNpcmN1bGFyIHF1ZXVlCiAgKiovCkBAIC0yOTYsOCArMjk2LDggQEAKICBVbmxlc3MgYm90aCBmcmVlIHF1ZXVlcyBhcmUgaW5pdGlhbGl6ZWQsIGFsbG9jYXRpbmcgYSBmcmVlIE1GIHdpbGwgcmV0dXJuIDB4ZmZmZmZmZmYKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0FsbG9jKCBMT0NBVElPTiwKLQkJCSAJICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkJICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICoqcE1zZyk7CisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCQkJICAgICAgIHZvaWQgICAgICAgICAqKnBNc2cpOwogLyoqCiAgRnJlZSBhIHVzZWQgbXNnIGZyYW1lIGJhY2sgdG8gZnJlZSBxdWV1ZQogIFBDSSBNYXN0ZXIgZnJlZXMgYSBNRkEgdGhyb3VnaCBvdXRib3VuZCBxdWV1ZSBwb3J0IG9mIGRldmljZShPRlFQUikKQEAgLTMxMCw4ICszMTAsOCBAQAogIGFuZCBieSBkZXZpY2UgdG8gaW5pdGlhbGl6ZSBPdXRib3VuZCBmcmVlIHF1ZXVlIGJlZm9yZSBJMk9GSUZPQWxsb2MgY2FuIGJlIHVzZWQuCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9GcmVlKCBMT0NBVElPTiwKLQkJCSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAotCQkJICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgKnBNc2cgKTsKKwkJCQkJICB1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCQkJICB2b2lkICAgICAgICAqcE1zZyApOwogCiAvKioKICBQb3N0IGEgbXNnIGludG8gRklGTwpAQCAtMzIyLDggKzMyMiw4IEBACiAgT3RoZXJ3aXNlIHF1ZXVlIG92ZXJmbG93IGludGVycnVwdCB3aWxsIGFzc2VydC4KICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPRklGT1Bvc3QoIExPQ0FUSU9OLAotCQkgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCSAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgKnBNc2cgKTsKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCQkgICAgICB2b2lkICAgICAgICAgKnBNc2cgKTsKIAogLyoqCiAgUmVhZCBhIG1zZyBmcm9tIEZJRk8KQEAgLTMzMSwxNCArMzMxLDE0IEBACiAgd2hpbGUgbG9jYWwgcHJvY2Vzc29yIHJlYWRzIGEgbXNnIGZyb20gaXRzIGluYm91bmQgcG9zdCBxdWV1ZShJUFRQUikKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0dldCggTE9DQVRJT04sCi0JIAkJICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCisJCQkJCSAgdW5zaWduZWQgaW50IGJhc2UsCiAJCQkJCQkJICB2b2lkICAgICAqKnBNc2cgKTsKIAogLyoqCiAgR2V0IHRoZSBJMk8gUENJIGNvbmZpZ3VyYXRpb24gaWRlbnRpZmljYXRpb24gcmVnaXN0ZXIKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPUENJQ29uZmlnR2V0KCBMT0NBVElPTiwKLQkJCSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCQkJICAgdW5zaWduZWQgaW50IGJhc2UsCiAJCQkJCQkJICAgSTJPSU9QICopOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kyby5oIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvLmgKaW5kZXggMjZmN2M1Yy4uNzE1NzJiMiAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvLmgKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvLmgKQEAgLTEyNCwxMSArMTI0LDExIEBACiAgUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgdGhlIGRldmljZXMnIG91dGJvdW5kIGludGVycnVwdHMgaXQgd2FudHMgdG8gaGFuZGxlIChSRU1PVEUpCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT01zZ0VuYWJsZSggTE9DQVRJT04sICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuICk7ICAgLyogYicxJyAtIG1zZyAwCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYicxMCctIG1zZyAxCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYicxMSctIGJvdGgKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG4gKTsgICAvKiBiJzEnIC0gbXNnIDAKKwkJCQkJCQkJCSAgICAgKiBiJzEwJy0gbXNnIDEKKwkJCQkJCQkJCSAgICAgKiBiJzExJy0gYm90aAorCQkJCQkJCQkJICAgICAqLwogCiAvKioKICBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGluL291dCBib3VuZCBtc2cKQEAgLTEzOCwxMSArMTM4LDExIEBACiAgUENJIG1hc3RlciBuZWVkcyB0byBkaXNhYmxlIG91dGJvdW5kIGludGVycnVwdHMgb2YgZGV2aWNlcyBpdCBpcyBub3QgaW50ZXJlc3RlZCAoUkVNT1RFKQogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dEaXNhYmxlKCBMT0NBVElPTiwgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuICk7IC8qIGInMScgLSBtc2cgMAotCQkJICAgCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYicxMCctIG1zZyAxCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiJzExJy0gYm90aAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJdW5zaWduZWQgaW50IGJhc2UsIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJCXVuc2lnbmVkIGNoYXIgbiApOyAvKiBiJzEnIC0gbXNnIDAKKwkJCQkJCQkJCSAgICAqIGInMTAnLSBtc2cgMQorCQkJCQkJCQkJICAgICogYicxMSctIGJvdGgKKwkJCQkJCQkJCSAgICAqLwogCiAvKioKICBSZWFkIHRoZSBtc2cgcmVnaXN0ZXIgZWl0aGVyIGZyb20gbG9jYWwgaW5ib3VuZCBtc2cgMC8xLApAQCAtMTU1LDkgKzE1NSw5IEBACiAgT3RoZXJ3aXNlIGxvY2FsIGluYm91bmQgbXNnIGlzIHJlYWQuCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT01zZ0dldCAoIExPQ0FUSU9OLCAgICAgICAgICAgICAgICAgLyogUkVNT1RFL0xPQ0FMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICptc2cgKTsKKwkJCSAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLworCQkJICAgICB1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLworCQkJICAgICB1bnNpZ25lZCBpbnQgKm1zZyApOwogCiAvKioKICBXcml0ZSB0byBudGggTXNnIHJlZ2lzdGVyIGVpdGhlciBvbiBsb2NhbCBvdXRib3VuZCBtc2cgMC8xLApAQCAtMTcwLDkgKzE3MCw5IEBACiAgT3RoZXJ3aXNlIGxvY2FsIG91dGJvdW5kIG1zZyBpcyB3cml0dGVuLgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dQb3N0KCBMT0NBVElPTiwgICAgICAgICAgICAgICAgIC8qIFJFTU9URS9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtc2cgKTsKKwkJCQl1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCisJCQkJdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KKwkJCQl1bnNpZ25lZCBpbnQgbXNnICk7CiAKIC8qKgogIEVuYWJsZSB0aGUgSW4vT3V0IERvb3JCZWxsIEludGVycnVwdApAQCAtMTg0LDggKzE4NCw4IEBACiAgUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgb3V0Ym91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBvZiB0aGUgZGV2aWNlcyBpdCB3YW50cyB0byBoYW5kbGUKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPREJFbmFibGUoIExPQ0FUSU9OLCAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KKwkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJICAgICAgdW5zaWduZWQgaW50IGluX2RiICk7Lyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCiAKIC8qKgogIERpc2FibGUgdGhlIEluL091dCBEb29yQmVsbCBJbnRlcnJ1cHQKQEAgLTE5Niw4ICsxOTYsOCBAQAogCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0RCRGlzYWJsZSggTE9DQVRJT04sICAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbl9kYiApOyAgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCisJCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsgIC8qIHdoZW4gTE9DQUwsIEkyT19JTl9EQiwgTUMsIEkyT19JTl9EQnxNQyAqLwogCiAvKioKICBSZWFkIGEgbG9jYWwgaW5kb29yYmVsbCByZWdpc3Rlciwgb3IgYW4gb3V0ZG9vcmJlbGwgb2YgZGV2aWNlcy4KQEAgLTIxMCw3ICsyMTAsNyBAQAogIE90aGVyd2lzZSBsb2NhbCBpbiBkb29yYmVsbCBpcyByZWFkCiAgKiovCiBleHRlcm4gdW5zaWduZWQgaW50IEkyT0RCR2V0KCBMT0NBVElPTiwgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSk7ICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQkgICAgICB1bnNpZ25lZCBpbnQgYmFzZSk7ICAgLyogcGNzcmJhci9ldW1iYmFyICovCiAKIC8qKgogIFdyaXRlIHRvIGEgbG9jYWwgb3V0ZG9vcmJlbGwgcmVnaXN0ZXIsIG9yIGFuIGluZG9vcmJlbGwgcmVnaXN0ZXIgb2YgZGV2aWNlcy4KQEAgLTIyMiw4ICsyMjIsOCBAQAogIE90aGVyd2lzZSBsb2NhbCBvdXQgZG9vcmJlbGwgaXMgd3JpdHRlbgogICoqLwogZXh0ZXJuIHZvaWQgSTJPREJQb3N0KCBMT0NBVElPTiwgICAgICAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbXNnICk7ICAgICAgIC8qICAgaW4gICAvIG91dCAgICAqLworCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJICAgICAgIHVuc2lnbmVkIGludCBtc2cgKTsgICAgICAgLyogICBpbiAgIC8gb3V0ICAgICovCiAKIC8qKgogIFJlYWQgdGhlIG91dGJvdW5kIG1zZyB1bml0IGludGVycnVwdCBzdGF0dXMgb2YgZGV2aWNlcy4gUmVhZGluZyBhbiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLApAQCAtMjUyLDggKzI1Miw4IEBACiAgTVVDUi4KICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0luaXQoIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkJCSAgICAgICAgICAgICAgUVVFVUVfU0laRSwKLQkJCQkgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBxYmEpOy8qIHF1ZXVlIGJhc2UgYWRkcmVzcyB0aGF0IG11c3QgYmUgYWxpZ25lZCBhdCAxTSAqLworCQkJCQkgICAgICBRVUVVRV9TSVpFLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgcWJhKTsvKiBxdWV1ZSBiYXNlIGFkZHJlc3MgdGhhdCBtdXN0IGJlIGFsaWduZWQgYXQgMU0gKi8KIC8qKgogIEVuYWJsZSB0aGUgY2lyY3VsYXIgcXVldWUKICAqKi8KQEAgLTI5Nyw4ICsyOTcsOCBAQAogIFVubGVzcyBib3RoIGZyZWUgcXVldWVzIGFyZSBpbml0aWFsaXplZCwgYWxsb2NhdGluZyBhIGZyZWUgTUYgd2lsbCByZXR1cm4gMHhmZmZmZmZmZgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPQWxsb2MoIExPQ0FUSU9OLAotCQkJIAkgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCQkgICAgICAgICAgICAgICB2b2lkICAgICAgICAgKipwTXNnKTsKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCQkgICAgICAgdm9pZCAgICAgICAgICoqcE1zZyk7CiAvKioKICBGcmVlIGEgdXNlZCBtc2cgZnJhbWUgYmFjayB0byBmcmVlIHF1ZXVlCiAgUENJIE1hc3RlciBmcmVlcyBhIE1GQSB0aHJvdWdoIG91dGJvdW5kIHF1ZXVlIHBvcnQgb2YgZGV2aWNlKE9GUVBSKQpAQCAtMzExLDggKzMxMSw4IEBACiAgYW5kIGJ5IGRldmljZSB0byBpbml0aWFsaXplIE91dGJvdW5kIGZyZWUgcXVldWUgYmVmb3JlIEkyT0ZJRk9BbGxvYyBjYW4gYmUgdXNlZC4KICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0ZyZWUoIExPQ0FUSU9OLAotCQkJICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAqcE1zZyApOworCQkJCQkgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCQkgIHZvaWQgICAgICAgICpwTXNnICk7CiAKIC8qKgogIFBvc3QgYSBtc2cgaW50byBGSUZPCkBAIC0zMjMsOCArMzIzLDggQEAKICBPdGhlcndpc2UgcXVldWUgb3ZlcmZsb3cgaW50ZXJydXB0IHdpbGwgYXNzZXJ0LgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPUG9zdCggTE9DQVRJT04sCi0JCSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAqcE1zZyApOworCQkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCSAgICAgIHZvaWQgICAgICAgICAqcE1zZyApOwogCiAvKioKICBSZWFkIGEgbXNnIGZyb20gRklGTwpAQCAtMzMyLDE0ICszMzIsMTQgQEAKICB3aGlsZSBsb2NhbCBwcm9jZXNzb3IgcmVhZHMgYSBtc2cgZnJvbSBpdHMgaW5ib3VuZCBwb3N0IHF1ZXVlKElQVFBSKQogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPR2V0KCBMT0NBVElPTiwKLQkgCQkgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgYmFzZSwKIAkJCQkJCQkgIHZvaWQgICAgICoqcE1zZyApOwogCiAvKioKICBHZXQgdGhlIEkyTyBQQ0kgY29uZmlndXJhdGlvbiBpZGVudGlmaWNhdGlvbiByZWdpc3RlcgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9QQ0lDb25maWdHZXQoIExPQ0FUSU9OLAotCQkJICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgYmFzZSwKIAkJCQkJCQkgICBJMk9JT1AgKik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMS5jIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMS5jCmluZGV4IGQ4NDBhZjAuLmYwNTgxNTEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kybzEuYworKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8xLmMKQEAgLTM0LDEwICszNCwxMCBAQAogICogUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgdGhlIG91dGJvdW5kIGludGVycnVwdHMgb2YgZGV2aWNlcyBpdCB3YW50cyB0byBoYW5kbGUoUkVNT1RFKQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEkyT1NUQVRVUyBJMk9Nc2dFbmFibGUgKCBMT0NBVElPTiBsb2MsICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG4gKSAgICAvKiBiJzEnIC0gbXNnIDAKLQkJCQkgICAgICAgICAgICAgICAqIGInMTAnLSBtc2cgMQotCQkgCQkgICAgICAgICAgICAgICAqIGInMTEnLSBib3RoCisJCQkgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQkgdW5zaWduZWQgY2hhciBuICkgICAgLyogYicxJyAtIG1zZyAwCisJCQkJCSAgICAgICAqIGInMTAnLSBtc2cgMQorCQkJCQkgICAgICAgKiBiJzExJy0gYm90aAogCQkJCQkgICAgICAgKi8KIHsKICAgICB1bnNpZ25lZCBpbnQgcmVnLCB2YWw7CkBAIC03Myw4ICs3Myw4IEBACiAgKiAgUENJIG1hc3RlciBuZWVkcyB0byBkaXNhYmxlIG91dGJvdW5kIGludGVycnVwdHMgb2YgZGV2aWNlcyBpdCBpcyBub3QgaW50ZXJlc3RlZChSRU1PVEUpCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSTJPU1RBVFVTIEkyT01zZ0Rpc2FibGUoIExPQ0FUSU9OIGxvYywgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuICkgIC8qIGInMScgLSBtc2cgMAorCQkJIHVuc2lnbmVkIGludCBiYXNlLCAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSB1bnNpZ25lZCBjaGFyIG4gKSAgLyogYicxJyAtIG1zZyAwCiAJCQkJCSAgICAgKiBiJzEwJy0gbXNnIDEKIAkJCQkJICAgICAqIGInMTEnLSBib3RoCiAJCQkJCSAgICAgKi8KQEAgLTExNCw5ICsxMTQsOSBAQAogICogSWYgaXQgaXMgcmVtb3RlLCBvdXRib3VuZCBtc2cgb24gdGhlIGRldmljZSBpcyByZWFkOyBvdGhlcndpc2UgbG9jYWwgaW5ib3VuZCBtc2cgaXMgcmVhZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJMk9TVEFUVVMgSTJPTXNnR2V0ICggTE9DQVRJT04gbG9jLCAgICAgICAgICAgICAvKiBSRU1PVEUvTE9DQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm1zZyApCisJCQkgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLworCQkJIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCisJCQkgdW5zaWduZWQgaW50ICptc2cgKQogewogICAgIGlmICggbiA+PSBJMk9fTlVNX01TRyB8fCBtc2cgPT0gMCApCiAgICAgewpAQCAtMTUxLDkgKzE1MSw5IEBACiAgKiBJZiBpdCBpcyByZW1vdGUsIGluYm91bmQgbXNnIG9uIHRoZSBkZXZpY2UgaXMgd3JpdHRlbjsgb3RoZXJ3aXNlIGxvY2FsIG91dGJvdW5kIG1zZyBpcyB3cml0dGVuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSTJPU1RBVFVTIEkyT01zZ1Bvc3QoIExPQ0FUSU9OIGxvYywgICAgICAgICAgICAgLyogUkVNT1RFL0xPQ0FMICovCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1zZyApCisJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KKwkJICAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KKwkJICAgICAgdW5zaWduZWQgaW50IG1zZyApCiB7CiAgICAgaWYgKCBuID49IEkyT19OVU1fTVNHICkKICAgICB7CkBAIC0xOTAsOCArMTkwLDggQEAKICAqIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZW5hYmxlIHRoZSBvdXRib3VuZCBkb29yYmVsbCBpbnRlcnJ1cHRzIG9mIGRldmljZSBpdCB3YW50cyB0byBoYW5kbGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSTJPU1RBVFVTIEkyT0RCRW5hYmxlKCBMT0NBVElPTiBsb2MsICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluX2RiICkgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCisJCSAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCSAgdW5zaWduZWQgaW50IGluX2RiICkgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCiB7CiAKICAgICAvKiBMT0NBVElPTiAtIFJFTU9URSA6IFBDSSBtYXN0ZXIgaW5pdGlhbGl6ZXMgb3V0Ym91bmQgZG9vcmJlbGwgbWVzc2FnZSBvZiBkZXZpY2UKQEAgLTIwOSwxNSArMjA5LDE1IEBACiAJLyogcGNzcmJhciBpcyBiYXNlICovCiAJdmFsID0gbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09NSU1SICk7CiAJdmFsICY9IDB4ZmZmZmZmZjc7Ci0gICAgICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT01JTVIgLCB2YWwgKTsKKwlzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09NSU1SICwgdmFsICk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAJLyogZXVtYmJhciBpcyBiYXNlICovCiAJdmFsID0gbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lNSU1SKTsKLSAgICAgICAgaW5fZGIgPSAoICh+aW5fZGIpICYgMHgzICkgPDwgMzsKLSAgICAgICAgdmFsID0gKCB2YWwgJiAweGZmZmZmZmU3KSB8IGluX2RiOwotICAgICAgICBzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgIEkyT19JTUlNUiwgdmFsICk7CisJaW5fZGIgPSAoICh+aW5fZGIpICYgMHgzICkgPDwgMzsKKwl2YWwgPSAoIHZhbCAmIDB4ZmZmZmZmZTcpIHwgaW5fZGI7CisJc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsICBJMk9fSU1JTVIsIHZhbCApOwogICAgIH0KIAogICAgIHJldHVybiBJMk9TVUNDRVNTOwpAQCAtMjM3LDggKzIzNyw4IEBACiAgKiBQQ0kgbWFzdGVyIG5lZWRzIHRvIGRpc2FibGUgb3V0Ym91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBvZiBkZXZpY2UgaXQgaXMgbm90IGludGVyZXN0ZWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJMk9TVEFUVVMgSTJPREJEaXNhYmxlKCBMT0NBVElPTiBsb2MsICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbl9kYiApICAgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCisJCQl1bnNpZ25lZCBpbnQgYmFzZSwgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJdW5zaWduZWQgaW50IGluX2RiICkgICAvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KIHsKICAgICAvKiBMT0NBVElPTiAtIFJFTU9URSA6IGhhbmRsZSBkZXZpY2UncyBvdXQgYm91bmQgbWVzc2FnZSBpbml0aWFsaXphdGlvbgogICAgICAqICAgICAgICAgICAgTE9DQUwgIDogaGFuZGxlIGxvY2FsIGluIGJvdW5kIG1lc3NhZ2UgaW5pdGlhbGl6YXRpb24KQEAgLTI1NSwxNCArMjU1LDE0IEBACiAJLyogcGNzcmJhciBpcyB0aGUgYmFzZSAqLwogCXZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTUlNUiApOwogCXZhbCB8PSAweDg7Ci0gICAgICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT01JTVIsIHZhbCApOworCXN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT01JTVIsIHZhbCApOwogICAgIH0KICAgICBlbHNlCiAgICAgewogCSAgICB2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSU1JTVIpOwotICAgICAgICAgICAgaW5fZGIgPSAoIGluX2RiICYgMHgzICkgPDwgMzsKLSAgICAgICAgICAgIHZhbCB8PSBpbl9kYjsKLSAgICAgICAgICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSU1JTVIsIHZhbCApOworCSAgICBpbl9kYiA9ICggaW5fZGIgJiAweDMgKSA8PCAzOworCSAgICB2YWwgfD0gaW5fZGI7CisJICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSU1JTVIsIHZhbCApOwogICAgIH0KIAogICAgIHJldHVybiBJMk9TVUNDRVNTOwpAQCAtMjg3LDIyICsyODcsMjIgQEAKICAqIHdpbGwgY2F1c2UgaW50ZXJydXB0IHBlbmRpbmcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdW5zaWduZWQgaW50IEkyT0RCR2V0KCBMT0NBVElPTiBsb2MsICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlKSAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlKSAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KIHsKICAgICB1bnNpZ25lZCBpbnQgbXNnLCB2YWw7CiAKICAgICBpZiAoIGxvYyA9PSBSRU1PVEUgKQogICAgIHsKIAkvKiByZWFkIG91dGJvdW5kIGRvb3JiZWxsIHJlZ2lzdGVyIG9mIGRldmljZSwgcGNzcmJhciBpcyB0aGUgYmFzZSAqLwotICAgICAgICB2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT0RCUiApOwotICAgICAgICBtc2cgPSB2YWwgJiAweGUwMDAwMDAwOwotICAgICAgICBzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09EQlIsIHZhbCApOyAvKiBjbGVhciB0aGUgcmVnaXN0ZXIgKi8KKwl2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT0RCUiApOworCW1zZyA9IHZhbCAmIDB4ZTAwMDAwMDA7CisJc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PREJSLCB2YWwgKTsgLyogY2xlYXIgdGhlIHJlZ2lzdGVyICovCiAgICAgfQogICAgIGVsc2UKICAgICB7CiAJLyogcmVhZCB0aGUgaW5ib3VuZCBkb29yYmVsbCByZWdpc3RlciwgZXVtYmJhciBpcyB0aGUgYmFzZSAqLwotICAgICAgICB2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSURCUiApOwotICAgICAgICBzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lEQlIsIHZhbCApOyAvKiBjbGVhciB0aGUgcmVnaXN0ZXIgKi8KKwl2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSURCUiApOworCXN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSURCUiwgdmFsICk7IC8qIGNsZWFyIHRoZSByZWdpc3RlciAqLwogCW1zZyA9IHZhbDsKICAgICB9CiAKQEAgLTMyMyw4ICszMjMsOCBAQAogICogT3RoZXJ3aXNlIGxvY2FsIG91dCBkb29yYmVsbCBpcyB3cml0dGVuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBJMk9EQlBvc3QoIExPQ0FUSU9OIGxvYywgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbXNnICkgICAgICAgIC8qICAgaW4gICAvIG91dCAgICAqLworCQl1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQl1bnNpZ25lZCBpbnQgbXNnICkgICAgICAgIC8qICAgaW4gICAvIG91dCAgICAqLwogewogICAgIGlmICggbG9jID09IFJFTU9URSApCiAgICAgewpAQCAtNTI3LDggKzUyNyw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJMk9TVEFUVVMgSTJPRklGT0FsbG9jKCBMT0NBVElPTiBsb2MsCi0JCSAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCSAgICAgICAgdm9pZCAgICAgICAgICoqcE1zZyApCisJCQl1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCXZvaWQgICAgICAgICAqKnBNc2cgKQogewogICAgIEkyT1NUQVRVUyBzdGF0ID0gSTJPU1VDQ0VTUzsKICAgICB2b2lkICpwSGRyLCAqcFRpbDsKQEAgLTU0MywxMiArNTQzLDEyIEBACiAgICAgewogCS8qIHBjc3JiYXIgaXMgdGhlIGJhc2UgYW5kIHJlYWQgdGhlIGluYm91bmQgZnJlZSB0YWlsIHB0ciAqLwogCXBUaWwgPSAodm9pZCAqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JRlFQUiApOwotICAgICAgICBpZiAoICggKHVuc2lnbmVkIGludClwVGlsICYgMHhGRkZGRkZGICkgPT0gMHhGRkZGRkZGRiApCi0gICAgICAgIHsKKwlpZiAoICggKHVuc2lnbmVkIGludClwVGlsICYgMHhGRkZGRkZGICkgPT0gMHhGRkZGRkZGRiApCisJewogCSAgICBzdGF0ID0gSTJPUVVFRU1QVFk7Ci0gICAgICAgIH0KKwl9CiAJZWxzZQotICAgICAgICB7CisJewogCSAgICAqcE1zZyA9IHBUaWw7CiAJfQogICAgIH0KQEAgLTU2Miw3ICs1NjIsNyBAQAogCWlmICggcEhkciA9PSBwVGlsICkKIAl7CiAJICAgIC8qIGhkciBhbmQgdGlsIHBvaW50IHRvIHRoZSBzYW1lIGZpZm8gaXRlbSwgbm8gZnJlZSBNRkEgKi8KLSAgICAgICAgICAgIHN0YXQgPSBJMk9RVUVFTVBUWTsKKwkgICAgc3RhdCA9IEkyT1FVRUVNUFRZOwogCX0KIAllbHNlCiAJewpAQCAtNjE1LDcgKzYxNSw3IEBACiAgICAgewogCS8qIGV1bWJiYXIgaXMgdGhlIGJhc2UgKi8KIAlwSGRyID0gKHZvaWQgKiopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lGSFBSICk7Ci0gICAgICAgIHBUaWwgPSAodm9pZCAqKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSUZUUFIgKTsKKwlwVGlsID0gKHZvaWQgKiopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lGVFBSICk7CiAKIAkvKiBzdG9yZSBNRkEgKi8KIAkqcEhkciA9IHBNc2c7CkBAIC02MzMsNyArNjMzLDcgQEAKIAlpZiAoIHBIZHIgIT0gcFRpbCApCiAJewogCSAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT1BIUFIsICh1bnNpZ25lZCBpbnQpcEhkcik7Ci0gICAgICAgIH0KKwl9CiAJZWxzZQogCXsKIAkgICAgc3RhdCA9IEkyT1FVRUZVTEw7CkBAIC02NzcsNyArNjc3LDcgQEAKICAgICB7CiAJLyogZXVtYmJhciBpcyB0aGUgYmFzZSAqLwogCXBIZHIgPSAodm9pZCAqKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT1BIUFIgKTsKLSAgICAgICAgcFRpbCA9ICh2b2lkICoqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PUFRQUiApOworCXBUaWwgPSAodm9pZCAqKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT1BUUFIgKTsKIAogCS8qIHN0b3JlIE1GQSAqLwogCSpwSGRyID0gcE1zZzsKQEAgLTY5NSw3ICs2OTUsNyBAQAogCWlmICggcEhkciAhPSBwVGlsICkKIAl7CiAJICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PUEhQUiwgKHVuc2lnbmVkIGludClwSGRyKTsKLSAgICAgICAgfQorCX0KIAllbHNlCiAJewogCSAgICBzdGF0ID0gSTJPUVVFRlVMTDsKQEAgLTczNCwxMiArNzM0LDEyIEBACiAgICAgewogCS8qIHBjc3JiYXIgaXMgdGhlIGJhc2UgKi8KIAlwVGlsID0gKHZvaWQgKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT0ZRUFIgKTsKLSAgICAgICAgaWYgKCAoICh1bnNpZ25lZCBpbnQpcFRpbCAmIDB4RkZGRkZGRiApID09IDB4RkZGRkZGRkYgKQotICAgICAgICB7CisJaWYgKCAoICh1bnNpZ25lZCBpbnQpcFRpbCAmIDB4RkZGRkZGRiApID09IDB4RkZGRkZGRkYgKQorCXsKIAkgICAgc3RhdCA9IEkyT1FVRUVNUFRZOwotICAgICAgICB9CisJfQogCWVsc2UKLSAgICAgICAgeworCXsKIAkgICAgKnBNc2cgPSBwVGlsOwogCX0KICAgICB9CkBAIC03NTMsNyArNzUzLDcgQEAKIAlpZiAoIHBIZHIgPT0gcFRpbCApCiAJewogCSAgICAvKiBubyBmcmVlIE1GQSAqLwotICAgICAgICAgICAgc3RhdCA9IEkyT1FVRUVNUFRZOworCSAgICBzdGF0ID0gSTJPUVVFRU1QVFk7CiAJfQogCWVsc2UKIAl7CkBAIC03ODMsOCArNzgzLDggQEAKICAqICAgICAgIHNob3VsZCBwYXNzIGV1bWJiYXIuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSTJPU1RBVFVTIEkyT1BDSUNvbmZpZ0dldCggTE9DQVRJT04gbG9jLAotCQkgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAotCQkgICAgICAgIEkyT0lPUCAqIHZhbCkKKwkJCXVuc2lnbmVkIGludCBiYXNlLAorCQkJSTJPSU9QICogdmFsKQogewogICAgIHVuc2lnbmVkIGludCB0bXA7CiAgICAgaWYgKCB2YWwgPT0gMCApCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8yLlMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8yLlMKaW5kZXggMTAzMzk3OS4uOTkwZjllZiAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMi5TCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kybzIuUwpAQCAtMTksMTIgKzE5LDEyIEBACiBsb2FkX3J1bnRpbWVfcmVnOgogCiAJCSAgeG9yIHI1LHI1LHI1Ci0gICAgICAgICAgb3IgIHI1LHI1LHIzICAgICAgIC8qIHNhdmUgZXVtYmJhciAqLworCSAgb3IgIHI1LHI1LHIzICAgICAgIC8qIHNhdmUgZXVtYmJhciAqLwogCiAJICAgICAgbHdicngJcjMscjQscjUKIAkgICAgICBzeW5jCiAKLSAJICAgICAgYmNsciAyMCwgMAorCSAgICAgIGJjbHIgMjAsIDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGZ1bmN0aW9uOiBzdG9yZV9ydW50aW1lX3JlZwpAQCAtMzQsOSArMzQsOSBAQAogICogICAgICAgIHI1IC0gbmV3IHZhbHVlIHRvIGJlIHN0b3JlZAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgICAudGV4dAotICAgICAgICAgICAuYWxpZ24gMgotICAgICAgICAgICAuZ2xvYmFsIHN0b3JlX3J1bnRpbWVfcmVnCisJICAgLnRleHQKKwkgICAuYWxpZ24gMgorCSAgIC5nbG9iYWwgc3RvcmVfcnVudGltZV9yZWcKIHN0b3JlX3J1bnRpbWVfcmVnOgogCiAJCSAgeG9yIHIwLHIwLHIwCkBAIC00NSw0ICs0NSwzIEBACiAJICAgICAgc3luYwogCiAJCSAgYmNsciAgIDIwLDAKLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvaW50ZXJydXB0cy5jIGIvY3B1L21wYzgyNHgvaW50ZXJydXB0cy5jCmluZGV4IDEyODQxYjMuLjc1MzU3NWYgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2ludGVycnVwdHMuYworKysgYi9jcHUvbXBjODI0eC9pbnRlcnJ1cHRzLmMKQEAgLTgzLDEyICs4MywxMiBAQAogewogCWRlY3JlbWVudGVyX2NvdW50ID0gKGdldF9idXNfZnJlcSAoMCkgLyA0KSAvIENGR19IWjsKIAotICAgICAgICAvKgotICAgICAgICAgKiBJdCdzIGFsbCBicm9rZW4gYXQgdGhlIG1vbWVudCBhbmQgSSBjdXJyZW50bHkgZG9uJ3QgbmVlZAotICAgICAgICAgKiBpbnRlcnJ1cHRzLiBJZiB5b3Ugd2FudCB0byBmaXggaXQsIGhhdmUgYSBsb29rIGF0IHRoZSBlcGljCi0gICAgICAgICAqIGRyaXZlcnMgaW4gZGluazMyIHYxMi4gVGhleSBkbyBldmVydGhpbmcgYW5kIE1vdG9yb2xhIHNhaWQKLSAgICAgICAgICogSSBjb3VsZCB1c2UgdGhlIGRpbmsgc291cmNlIGluIHRoaXMgcHJvamVjdCBhcyBsb25nIGFzCi0gICAgICAgICAqIGNvcHlyaWdodCBub3RpY2VzIHJlbWFpbiBpbnRhY3QuCisJLyoKKwkgKiBJdCdzIGFsbCBicm9rZW4gYXQgdGhlIG1vbWVudCBhbmQgSSBjdXJyZW50bHkgZG9uJ3QgbmVlZAorCSAqIGludGVycnVwdHMuIElmIHlvdSB3YW50IHRvIGZpeCBpdCwgaGF2ZSBhIGxvb2sgYXQgdGhlIGVwaWMKKwkgKiBkcml2ZXJzIGluIGRpbmszMiB2MTIuIFRoZXkgZG8gZXZlcnRoaW5nIGFuZCBNb3Rvcm9sYSBzYWlkCisJICogSSBjb3VsZCB1c2UgdGhlIGRpbmsgc291cmNlIGluIHRoaXMgcHJvamVjdCBhcyBsb25nIGFzCisJICogY29weXJpZ2h0IG5vdGljZXMgcmVtYWluIGludGFjdC4KIAkgKi8KIAogCWVwaWNJbml0IChFUElDX0RJUkVDVF9JUlEsIDApOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvc3RhcnQuUyBiL2NwdS9tcGM4MjR4L3N0YXJ0LlMKaW5kZXggMDA0ZTNiMy4uYjFjZGI4NCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvc3RhcnQuUworKysgYi9jcHUvbXBjODI0eC9zdGFydC5TCkBAIC0yMDIsNyArMjAyLDYgQEAKIAlibAlib2FyZF9pbml0X2YJLyogcnVuIDFzdCBwYXJ0IG9mIGJvYXJkIGluaXQgY29kZSAoZnJvbSBGbGFzaCkgKi8KIAogCi0KIAkuZ2xvYmwJX3N0YXJ0X29mX3ZlY3RvcnMKIF9zdGFydF9vZl92ZWN0b3JzOgogCkBAIC04NDAsNSArODM5LDMgQEAKIAlibHQJMWIKIAogCWJscgotCi0KZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL2JlZGJ1Z182MDNlLmMgYi9jcHUvbXBjODI2MC9iZWRidWdfNjAzZS5jCmluZGV4IDFjYTA1N2YuLjljMjliMzUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL2JlZGJ1Z182MDNlLmMKKysrIGIvY3B1L21wYzgyNjAvYmVkYnVnXzYwM2UuYwpAQCAtNSw4ICs1LDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLQotI2luY2x1ZGUgPGNtZF9iZWRidWcuaD4KKyNpbmNsdWRlIDxiZWRidWcvdHlwZS5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9iZWRidWcuaD4KICNpbmNsdWRlIDxiZWRidWcvcmVncy5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9wcGMuaD4KQEAgLTY0LDcgKzYzLDcgQEAKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogdm9pZCBiZWRidWc2MDNlX2RvX2JyZWFrIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYXJndltdKQorCQkJIGNoYXIgKmFyZ3ZbXSkKIHsKICAgbG9uZwkJYWRkcjsgICAgICAgICAgIC8qIEFkZHJlc3MgdG8gYnJlYWsgYXQgICovCiAgIGludAkJd2hpY2hfYnA7ICAgICAgIC8qIEJyZWFrcG9pbnQgbnVtYmVyICAgICovCkBAIC0xMTYsOCArMTE1LDggQEAKICAgLyogU2V0IGEgYnJlYWtwb2ludCBhdCB0aGUgYWRkcmVzcyAqLwogCiAgIGlmKCEoKCBpc2RpZ2l0KCBhcmd2WyAxIF1bIDAgXSApKSB8fAotICAgICAgICAoKCBhcmd2WyAxIF1bIDAgXSA+PSAnYScgKSAmJiAoIGFyZ3ZbIDEgXVsgMCBdIDw9ICdmJyApKSB8fAotICAgICAgICAoKCBhcmd2WyAxIF1bIDAgXSA+PSAnQScgKSAmJiAoIGFyZ3ZbIDEgXVsgMCBdIDw9ICdGJyApKSkpCisJKCggYXJndlsgMSBdWyAwIF0gPj0gJ2EnICkgJiYgKCBhcmd2WyAxIF1bIDAgXSA8PSAnZicgKSkgfHwKKwkoKCBhcmd2WyAxIF1bIDAgXSA+PSAnQScgKSAmJiAoIGFyZ3ZbIDEgXVsgMCBdIDw9ICdGJyApKSkpCiAgIHsKICAgICBwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwogICAgIHJldHVybjsKQEAgLTIzNiw0ICsyMzUsMyBAQAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvY3B1LmMgYi9jcHUvbXBjODI2MC9jcHUuYwppbmRleCBiOGJhNDhjLi43NjYyZmM2IDEwMDY0NAotLS0gYS9jcHUvbXBjODI2MC9jcHUuYworKysgYi9jcHUvbXBjODI2MC9jcHUuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGludAotZG9fcmVzZXQgKGNtZF90YmxfdCAqIGNtZHRwLCBiZF90ICogYmQsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorZG9fcmVzZXQgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAl1bG9uZyBtc3IsIGFkZHI7CiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL2NwdV9pbml0LmMgYi9jcHUvbXBjODI2MC9jcHVfaW5pdC5jCmluZGV4IGQwNTQ1Y2YuLmZkMDlhOGQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzgyNjAvY3B1X2luaXQuYwpAQCAtNzAsMTMgKzcwLDEzIEBACiAJCQl1aW50IHRwbXNrID0gfnBtc2s7CiAKIAkJCS8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgKHNvbWV3aGF0IGNvbmZ1c2VkKSBwYXJhZ3JhcGggYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBib3R0b20gb2YgcGFnZSAzNS01IHdhcm5zIHRoYXQgdGhlcmUgbWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlICJ1bmtub3duIGJlaGF2aW91ciIgd2hlbiBwcm9ncmFtbWluZwotICAgICAgICAgICAgICAgICAgICAgICAgICogUFNPUnggYW5kIFBESVJ4LCBpZiBQUEFSeCA9IDEsIHNvIEkKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGRlY2lkZWQgdGhpcyBtZWFudCBJIGhhZCB0byBkaXNhYmxlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICogZGVkaWNhdGVkIGZ1bmN0aW9uIGZpcnN0LCBhbmQgZW5hYmxlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBsYXN0LgorCQkJICogdGhlIChzb21ld2hhdCBjb25mdXNlZCkgcGFyYWdyYXBoIGF0IHRoZQorCQkJICogYm90dG9tIG9mIHBhZ2UgMzUtNSB3YXJucyB0aGF0IHRoZXJlIG1pZ2h0CisJCQkgKiBiZSAidW5rbm93biBiZWhhdmlvdXIiIHdoZW4gcHJvZ3JhbW1pbmcKKwkJCSAqIFBTT1J4IGFuZCBQRElSeCwgaWYgUFBBUnggPSAxLCBzbyBJCisJCQkgKiBkZWNpZGVkIHRoaXMgbWVhbnQgSSBoYWQgdG8gZGlzYWJsZSB0aGUKKwkJCSAqIGRlZGljYXRlZCBmdW5jdGlvbiBmaXJzdCwgYW5kIGVuYWJsZSBpdAorCQkJICogbGFzdC4KIAkJCSAqLwogCQkJaW9wLT5wcGFyICY9IHRwbXNrOwogCQkJaW9wLT5wc29yID0gKGlvcC0+cHNvciAmIHRwbXNrKSB8IHBzb3I7CmRpZmYgLS1naXQgYS9jcHUvbXBjODI2MC9ldGhlcl9zY2MuYyBiL2NwdS9tcGM4MjYwL2V0aGVyX3NjYy5jCmluZGV4IDhiNmFmMzEuLjEwMTMzZmEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL2V0aGVyX3NjYy5jCisrKyBiL2NwdS9tcGM4MjYwL2V0aGVyX3NjYy5jCkBAIC00MywzMSArNDMsMzEgQEAKICMgIGRlZmluZSBDUE1fQ1JfRU5FVF9QQUdFICAgICAgQ1BNX0NSX1NDQzFfUEFHRQogIyAgZGVmaW5lIENQTV9DUl9FTkVUX1NCTE9DSyAgICBDUE1fQ1JfU0NDMV9TQkxPQ0sKICMgIGRlZmluZSBDTVhTQ1JfTUFTSyAgICAgICAgICAoQ01YU0NSX1NDMSAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTVhTQ1JfUlMxQ1NfTVNLICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENNWFNDUl9UUzFDU19NU0spCisJCQkJQ01YU0NSX1JTMUNTX01TSyAgICB8XAorCQkJCUNNWFNDUl9UUzFDU19NU0spCiAKICNlbGlmIChDT05GSUdfRVRIRVJfSU5ERVggPT0gMikKICMgIGRlZmluZSBQUk9GRl9FTkVUICAgICAgICAgICAgUFJPRkZfU0NDMgogIyAgZGVmaW5lIENQTV9DUl9FTkVUX1BBR0UgICAgICBDUE1fQ1JfU0NDMl9QQUdFCiAjICBkZWZpbmUgQ1BNX0NSX0VORVRfU0JMT0NLICAgIENQTV9DUl9TQ0MyX1NCTE9DSwogIyAgZGVmaW5lIENNWFNDUl9NQVNLICAgICAgICAgIChDTVhTQ1JfU0MyICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENNWFNDUl9SUzJDU19NU0sgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ01YU0NSX1RTMkNTX01TSykKKwkJCQlDTVhTQ1JfUlMyQ1NfTVNLICAgIHxcCisJCQkJQ01YU0NSX1RTMkNTX01TSykKIAogI2VsaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSAzKQogIyAgZGVmaW5lIFBST0ZGX0VORVQgICAgICAgICAgICBQUk9GRl9TQ0MzCiAjICBkZWZpbmUgQ1BNX0NSX0VORVRfUEFHRSAgICAgIENQTV9DUl9TQ0MzX1BBR0UKICMgIGRlZmluZSBDUE1fQ1JfRU5FVF9TQkxPQ0sgICAgQ1BNX0NSX1NDQzNfU0JMT0NLCiAjICBkZWZpbmUgQ01YU0NSX01BU0sgICAgICAgICAgKENNWFNDUl9TQzMgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ01YU0NSX1JTM0NTX01TSyAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTVhTQ1JfVFMzQ1NfTVNLKQorCQkJCUNNWFNDUl9SUzNDU19NU0sgICAgfFwKKwkJCQlDTVhTQ1JfVFMzQ1NfTVNLKQogI2VsaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSA0KQogIyAgZGVmaW5lIFBST0ZGX0VORVQgICAgICAgICAgICBQUk9GRl9TQ0M0CiAjICBkZWZpbmUgQ1BNX0NSX0VORVRfUEFHRSAgICAgIENQTV9DUl9TQ0M0X1BBR0UKICMgIGRlZmluZSBDUE1fQ1JfRU5FVF9TQkxPQ0sgICAgQ1BNX0NSX1NDQzRfU0JMT0NLCiAjICBkZWZpbmUgQ01YU0NSX01BU0sgICAgICAgICAgKENNWFNDUl9TQzQgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ01YU0NSX1JTNENTX01TSyAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTVhTQ1JfVFM0Q1NfTVNLKQorCQkJCUNNWFNDUl9SUzRDU19NU0sgICAgfFwKKwkJCQlDTVhTQ1JfVFM0Q1NfTVNLKQogCiAjZW5kaWYKIApAQCAtMTA0LDI3ICsxMDQsMjcgQEAKICAgICBpbnQgcmVzdWx0ID0gMDsKIAogICAgIGlmIChsZW5ndGggPD0gMCkgewotICAgICAgICBwcmludGYoInNjYzogYmFkIHBhY2tldCBzaXplOiAlZFxuIiwgbGVuZ3RoKTsKLSAgICAgICAgZ290byBvdXQ7CisJcHJpbnRmKCJzY2M6IGJhZCBwYWNrZXQgc2l6ZTogJWRcbiIsIGxlbmd0aCk7CisJZ290byBvdXQ7CiAgICAgfQogCiAgICAgZm9yKGk9MDsgcnR4LT50eGJkW3R4SWR4XS5jYmRfc2MgJiBCRF9FTkVUX1RYX1JFQURZOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPj0gVE9VVF9MT09QKSB7Ci0gICAgICAgICAgICBwcmludGYoInNjYzogdHggYnVmZmVyIG5vdCByZWFkeVxuIik7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQorCWlmIChpID49IFRPVVRfTE9PUCkgeworCSAgICBwcmludGYoInNjYzogdHggYnVmZmVyIG5vdCByZWFkeVxuIik7CisJICAgIGdvdG8gb3V0OworCX0KICAgICB9CiAKICAgICBydHgtPnR4YmRbdHhJZHhdLmNiZF9idWZhZGRyID0gKHVpbnQpcGFja2V0OwogICAgIHJ0eC0+dHhiZFt0eElkeF0uY2JkX2RhdGxlbiA9IGxlbmd0aDsKICAgICBydHgtPnR4YmRbdHhJZHhdLmNiZF9zYyB8PSAoQkRfRU5FVF9UWF9SRUFEWSB8IEJEX0VORVRfVFhfTEFTVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEX0VORVRfVFhfV1JBUCk7CisJCQkJQkRfRU5FVF9UWF9XUkFQKTsKIAogICAgIGZvcihpPTA7IHJ0eC0+dHhiZFt0eElkeF0uY2JkX3NjICYgQkRfRU5FVF9UWF9SRUFEWTsgaSsrKSB7Ci0gICAgICAgIGlmIChpID49IFRPVVRfTE9PUCkgewotICAgICAgICAgICAgcHJpbnRmKCJzY2M6IHR4IGVycm9yXG4iKTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9CisJaWYgKGkgPj0gVE9VVF9MT09QKSB7CisJICAgIHByaW50Zigic2NjOiB0eCBlcnJvclxuIik7CisJICAgIGdvdG8gb3V0OworCX0KICAgICB9CiAKICAgICAvKiByZXR1cm4gb25seSBzdGF0dXMgYml0cyAqLwpAQCAtMTQxLDM3ICsxNDEsMzcgQEAKIAogICAgIGZvciAoOzspCiAgICAgewotICAgICAgICBpZiAocnR4LT5yeGJkW3J4SWR4XS5jYmRfc2MgJiBCRF9FTkVUX1JYX0VNUFRZKSB7Ci0gICAgICAgICAgICBsZW5ndGggPSAtMTsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgLyogbm90aGluZyByZWNlaXZlZCAtIGxlYXZlIGZvcigpIGxvb3AgKi8KLSAgICAgICAgfQorCWlmIChydHgtPnJ4YmRbcnhJZHhdLmNiZF9zYyAmIEJEX0VORVRfUlhfRU1QVFkpIHsKKwkgICAgbGVuZ3RoID0gLTE7CisJICAgIGJyZWFrOyAgICAgLyogbm90aGluZyByZWNlaXZlZCAtIGxlYXZlIGZvcigpIGxvb3AgKi8KKwl9CiAKLSAgICAgICAgbGVuZ3RoID0gcnR4LT5yeGJkW3J4SWR4XS5jYmRfZGF0bGVuOworCWxlbmd0aCA9IHJ0eC0+cnhiZFtyeElkeF0uY2JkX2RhdGxlbjsKIAotICAgICAgICBpZiAocnR4LT5yeGJkW3J4SWR4XS5jYmRfc2MgJiAweDAwM2YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigiZXJyOiAleFxuIiwgcnR4LT5yeGJkW3J4SWR4XS5jYmRfc2MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLyogUGFzcyB0aGUgcGFja2V0IHVwIHRvIHRoZSBwcm90b2NvbCBsYXllcnMuICovCi0gICAgICAgICAgICBOZXRSZWNlaXZlKE5ldFJ4UGFja2V0c1tyeElkeF0sIGxlbmd0aCAtIDQpOwotICAgICAgICB9CisJaWYgKHJ0eC0+cnhiZFtyeElkeF0uY2JkX3NjICYgMHgwMDNmKQorCXsKKwkgICAgcHJpbnRmKCJlcnI6ICV4XG4iLCBydHgtPnJ4YmRbcnhJZHhdLmNiZF9zYyk7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIFBhc3MgdGhlIHBhY2tldCB1cCB0byB0aGUgcHJvdG9jb2wgbGF5ZXJzLiAqLworCSAgICBOZXRSZWNlaXZlKE5ldFJ4UGFja2V0c1tyeElkeF0sIGxlbmd0aCAtIDQpOworCX0KIAogCi0gICAgICAgIC8qIEdpdmUgdGhlIGJ1ZmZlciBiYWNrIHRvIHRoZSBTQ0MuICovCi0gICAgICAgIHJ0eC0+cnhiZFtyeElkeF0uY2JkX2RhdGxlbiA9IDA7CisJLyogR2l2ZSB0aGUgYnVmZmVyIGJhY2sgdG8gdGhlIFNDQy4gKi8KKwlydHgtPnJ4YmRbcnhJZHhdLmNiZF9kYXRsZW4gPSAwOwogCi0gICAgICAgIC8qIHdyYXAgYXJvdW5kIGJ1ZmZlciBpbmRleCB3aGVuIG5lY2Vzc2FyeSAqLwotICAgICAgICBpZiAoKHJ4SWR4ICsgMSkgPj0gUEtUQlVGU1JYKSB7Ci0gICAgICAgICAgICBydHgtPnJ4YmRbUEtUQlVGU1JYIC0gMV0uY2JkX3NjID0gKEJEX0VORVRfUlhfV1JBUCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEX0VORVRfUlhfRU1QVFkpOwotICAgICAgICAgICAgcnhJZHggPSAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcnR4LT5yeGJkW3J4SWR4XS5jYmRfc2MgPSBCRF9FTkVUX1JYX0VNUFRZOwotICAgICAgICAgICAgcnhJZHgrKzsKLSAgICAgICAgfQorCS8qIHdyYXAgYXJvdW5kIGJ1ZmZlciBpbmRleCB3aGVuIG5lY2Vzc2FyeSAqLworCWlmICgocnhJZHggKyAxKSA+PSBQS1RCVUZTUlgpIHsKKwkgICAgcnR4LT5yeGJkW1BLVEJVRlNSWCAtIDFdLmNiZF9zYyA9IChCRF9FTkVUX1JYX1dSQVAgfAorCQkJCQkgICAgICAgQkRfRU5FVF9SWF9FTVBUWSk7CisJICAgIHJ4SWR4ID0gMDsKKwl9CisJZWxzZSB7CisJICAgIHJ0eC0+cnhiZFtyeElkeF0uY2JkX3NjID0gQkRfRU5FVF9SWF9FTVBUWTsKKwkgICAgcnhJZHgrKzsKKwl9CiAgICAgfQogICAgIHJldHVybiBsZW5ndGg7CiB9CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICAvKiAyNC4yMSAtICg0LDUpOiBjb25uZWN0IFNDQydzIHR4IGFuZCByeCBjbG9ja3MsIHVzZSBOTVNJIGZvciBTQ0MgKi8KICAgICBpbW1yLT5pbV9jcG11eC5jbXhfdWFyID0gMDsKICAgICBpbW1yLT5pbV9jcG11eC5jbXhfc2NyID0gKCAoaW1tci0+aW1fY3BtdXguY214X3NjciAmIH5DTVhTQ1JfTUFTSykgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTVhTQ1JfVkFMVUUpOworCQkJICAgICAgIENGR19DTVhTQ1JfVkFMVUUpOwogCiAKICAgICAvKiAyNC4yMSAoNikgd3JpdGUgUkJBU0UgYW5kIFRCQVNFIHRvIHBhcmFtZXRlciBSQU0gKi8KQEAgLTIyMSw5ICsyMjEsOSBAQAogICAgIC8qIDI0LjIxIC0gKDcpOiBXcml0ZSBJTklUIFJYIEFORCBUWCBQQVJBTUVURVJTIHRvIENQQ1IgKi8KICAgICB3aGlsZShpbW1yLT5pbV9jcG0uY3BfY3BjciAmIENQTV9DUl9GTEcpOwogICAgIGltbXItPmltX2NwbS5jcF9jcGNyID0gbWtfY3JfY21kKENQTV9DUl9FTkVUX1BBR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BNX0NSX0VORVRfU0JMT0NLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BNX0NSX0lOSVRfVFJYKSB8IENQTV9DUl9GTEc7CisJCQkJICAgICBDUE1fQ1JfRU5FVF9TQkxPQ0ssCisJCQkJICAgICAweDBjLAorCQkJCSAgICAgQ1BNX0NSX0lOSVRfVFJYKSB8IENQTV9DUl9GTEc7CiAKICAgICAvKiAyNC4yMSAtICg4LTE4KTogU2V0IHVwIHBhcmFtZXRlciBSQU0gKi8KICAgICBwcmFtX3B0ci0+c2VuX2NyY2VjICA9IDB4MDsgICAgICAgICAgIC8qIEVycm9yIENvdW50ZXIgQ1JDICh1bnVzZWQpICovCkBAIC0yNjYsOSArMjY2LDkgQEAKICAgICAvKiAyNC4yMSAtICgxOSk6IEluaXRpYWxpemUgUnhCRCAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBQS1RCVUZTUlg7IGkrKykKICAgICB7Ci0gICAgICAgIHJ0eC0+cnhiZFtpXS5jYmRfc2MgPSBCRF9FTkVUX1JYX0VNUFRZOwotICAgICAgICBydHgtPnJ4YmRbaV0uY2JkX2RhdGxlbiA9IDA7ICAgICAgICAgICAgICAgICAgLyogUmVzZXQgKi8KLSAgICAgICAgcnR4LT5yeGJkW2ldLmNiZF9idWZhZGRyID0gKHVpbnQpTmV0UnhQYWNrZXRzW2ldOworCXJ0eC0+cnhiZFtpXS5jYmRfc2MgPSBCRF9FTkVUX1JYX0VNUFRZOworCXJ0eC0+cnhiZFtpXS5jYmRfZGF0bGVuID0gMDsgICAgICAgICAgICAgICAgICAvKiBSZXNldCAqLworCXJ0eC0+cnhiZFtpXS5jYmRfYnVmYWRkciA9ICh1aW50KU5ldFJ4UGFja2V0c1tpXTsKICAgICB9CiAKICAgICBydHgtPnJ4YmRbUEtUQlVGU1JYIC0gMV0uY2JkX3NjIHw9IEJEX0VORVRfUlhfV1JBUDsKQEAgLTI3NiwxMSArMjc2LDExIEBACiAgICAgLyogMjQuMjEgLSAoMjApOiBJbml0aWFsaXplIFR4QkQgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgVFhfQlVGX0NOVDsgaSsrKQogICAgIHsKLSAgICAgICAgcnR4LT50eGJkW2ldLmNiZF9zYyA9IChCRF9FTkVUX1RYX1BBRCAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEX0VORVRfVFhfTEFTVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRfRU5FVF9UWF9UQyk7Ci0gICAgICAgIHJ0eC0+dHhiZFtpXS5jYmRfZGF0bGVuID0gMDsgICAgICAgICAgICAgICAgICAvKiBSZXNldCAqLwotICAgICAgICBydHgtPnR4YmRbaV0uY2JkX2J1ZmFkZHIgPSAodWludCkmdHhidWZbaV1bMF07CisJcnR4LT50eGJkW2ldLmNiZF9zYyA9IChCRF9FTkVUX1RYX1BBRCAgfAorCQkJICAgICAgIEJEX0VORVRfVFhfTEFTVCB8CisJCQkgICAgICAgQkRfRU5FVF9UWF9UQyk7CisJcnR4LT50eGJkW2ldLmNiZF9kYXRsZW4gPSAwOyAgICAgICAgICAgICAgICAgIC8qIFJlc2V0ICovCisJcnR4LT50eGJkW2ldLmNiZF9idWZhZGRyID0gKHVpbnQpJnR4YnVmW2ldWzBdOwogICAgIH0KIAogICAgIHJ0eC0+dHhiZFtUWF9CVUZfQ05UIC0gMV0uY2JkX3NjIHw9IEJEX0VORVRfVFhfV1JBUDsKQEAgLTI5MCw4ICsyOTAsOCBAQAogCiAgICAgLyogMjQuMjEgLSAoMjIpOiBXcml0ZSB0byBTQ0NNIHRvIGVuYWJsZSBUWEUsIFJYRiwgVFhCIGV2ZW50cyAqLwogICAgIGltbXItPmltX3NjY1tDT05GSUdfRVRIRVJfSU5ERVgtMV0uc2NjX3NjY20gPSAoU0NDRV9FTkVUX1RYRSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0NFX0VORVRfUlhGIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQ0VfRU5FVF9UWEIpOworCQkJCQkJICAgU0NDRV9FTkVUX1JYRiB8CisJCQkJCQkgICBTQ0NFX0VORVRfVFhCKTsKIAogICAgIC8qIDI0LjIxIC0gKDIzKTogd2UgZG9uJ3QgdXNlIGV0aGVybmV0IGludGVycnVwdHMgKi8KIApAQCAtMzAwLDkgKzMwMCw5IEBACiAKICAgICAvKiAyNC4yMSAtICgyNSk6IENsZWFyIEdTTVJfTCB0byBlbmFibGUgbm9ybWFsIG9wZXJhdGlvbnMgKi8KICAgICBpbW1yLT5pbV9zY2NbQ09ORklHX0VUSEVSX0lOREVYLTFdLnNjY19nc21ybCA9IChTQ0NfR1NNUkxfVENJICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NDX0dTTVJMX1RQTF80OCAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQ19HU01STF9UUFBfMTAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0NfR1NNUkxfTU9ERV9FTkVUKTsKKwkJCQkJCSAgICBTQ0NfR1NNUkxfVFBMXzQ4ICAgICB8CisJCQkJCQkgICAgU0NDX0dTTVJMX1RQUF8xMCAgICAgfAorCQkJCQkJICAgIFNDQ19HU01STF9NT0RFX0VORVQpOwogCiAgICAgLyogMjQuMjEgLSAoMjYpOiBJbml0aWFsaXplIERTUiAqLwogICAgIGltbXItPmltX3NjY1tDT05GSUdfRVRIRVJfSU5ERVgtMV0uc2NjX2RzciA9IDB4ZDU1NTsKQEAgLTMzMSwxOCArMzMxLDE3IEBACiAKICAgICAvKiAyNC4yMSAtICgyOCk6IFdyaXRlIHRvIEdTTVJfTCB0byBlbmFibGUgU0NDICovCiAgICAgaW1tci0+aW1fc2NjW0NPTkZJR19FVEhFUl9JTkRFWC0xXS5zY2NfZ3NtcmwgfD0gKFNDQ19HU01STF9FTlIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0NfR1NNUkxfRU5UKTsKKwkJCQkJCSAgICAgU0NDX0dTTVJMX0VOVCk7CiAKICAgICByZXR1cm4gMDsKIH0KIAogCi0KIHZvaWQgZXRoX2hhbHQodm9pZCkKIHsKICAgICB2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKICAgICBpbW1yLT5pbV9zY2NbQ09ORklHX0VUSEVSX0lOREVYLTFdLnNjY19nc21ybCAmPSB+KFNDQ19HU01STF9FTlIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NDX0dTTVJMX0VOVCk7CisJCQkJCQkgICAgICBTQ0NfR1NNUkxfRU5UKTsKIH0KIAogI2lmIDAKQEAgLTM1MCw5ICszNDksOCBAQAogewogICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogICAgIGltbXItPmltX2NwbS5jcF9zY2NbQ09ORklHX0VUSEVSX0lOREVYLTFdLnNjY19nc21ybCB8PSAoU0NDX0dTTVJMX0VOUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0NfR1NNUkxfRU5UKTsKKwkJCQkJCQkgICAgU0NDX0dTTVJMX0VOVCk7CiB9CiAjZW5kaWYKIAogI2VuZGlmICAvKiBDT05GSUdfRVRIRVJfT05fU0NDICYmIENGR19DTURfTkVUICovCi0KZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL2kyYy5jIGIvY3B1L21wYzgyNjAvaTJjLmMKaW5kZXggNjlhZTUzNS4uNzg5YzUxNCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvaTJjLmMKKysrIGIvY3B1L21wYzgyNjAvaTJjLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXZvbGF0aWxlIEkyQ19CRCAqcnhiZCwgKnR4YmQ7CiAJdWludCBkcGFkZHI7CiAKLSNpZmRlZiBDRkdfSTJDX0lOSVRfQk9BUkQgICAgICAgIAorI2lmZGVmIENGR19JMkNfSU5JVF9CT0FSRAogCS8qIGNhbGwgYm9hcmQgc3BlY2lmaWMgaTJjIGJ1cyByZXNldCByb3V0aW5lIGJlZm9yZSBhY2Nlc3NpbmcgdGhlICAgKi8KIAkvKiBlbnZpcm9ubWVudCwgd2hpY2ggbWlnaHQgYmUgaW4gYSBjaGlwIG9uIHRoYXQgYnVzLiBGb3IgZGV0YWlscyAgICovCiAJLyogYWJvdXQgdGhpcyBwcm9ibGVtIHNlZSBkb2MvSTJDX0VkZ2VfQ29uZGl0aW9ucy4gICAgICAgICAgICAgICAgICAqLwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJdm9sYXRpbGUgaWljX3QgKmlpcDsKIAl2b2xhdGlsZSBpMmM4MjYwX3QgKmkyYwk9IChpMmM4MjYwX3QgKikmaW1tYXAtPmltX2kyYzsKIAl2b2xhdGlsZSBJMkNfQkQgKnR4YmQsICpyeGJkOwotICAgICAgICBpbnQgIG4sIGksIGIsIHJ4Y250ID0gMCwgcnh0aW1lbyA9IDAsIHR4Y250ID0gMCwgdHh0aW1lbyA9IDAsIHJjID0gMDsKKwlpbnQgIG4sIGksIGIsIHJ4Y250ID0gMCwgcnh0aW1lbyA9IDAsIHR4Y250ID0gMCwgdHh0aW1lbyA9IDAsIHJjID0gMDsKIAl1aW50IGRwYWRkcjsKIAogCVBSSU5URCgoIltJMkNdIGkyY19kb2lvXG4iKSk7CkBAIC01NDMsNyArNTQzLDcgQEAKIAogCQlyeGJkID0gKChJMkNfQkQqKXN0YXRlLT5yeGJkKSAtIG47CiAJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgCQlyeHRpbWVvICs9IFRPVVRfTE9PUCAqIHJ4YmQtPmxlbmd0aDsKKwkJCXJ4dGltZW8gKz0gVE9VVF9MT09QICogcnhiZC0+bGVuZ3RoOwogCQkJcnhiZCsrOwogCQl9CiAKQEAgLTY3MCw3ICs2NzAsNyBAQAogCSAgKiBhbmQgdGhlIGV4dHJhIGJpdHMgZW5kIHVwIGluIHRoZSAiY2hpcCBhZGRyZXNzIiBiaXQgc2xvdHMuCiAJICAqIFRoaXMgbWFrZXMgYSAyNFdDMDggKDFLYnl0ZSkgY2hpcCBsb29rIGxpa2UgZm91ciAyNTYgYnl0ZQogCSAgKiBjaGlwcy4KLSAgCSAgKgorCSAgKgogCSAgKiBOb3RlIHRoYXQgd2UgY29uc2lkZXIgdGhlIGxlbmd0aCBvZiB0aGUgYWRkcmVzcyBmaWVsZCB0byBzdGlsbAogCSAgKiBiZSBvbmUgYnl0ZSBiZWNhdXNlIHRoZSBleHRyYSBhZGRyZXNzIGJpdHMgYXJlIGhpZGRlbiBpbiB0aGUKIAkgICogY2hpcCBhZGRyZXNzLgpAQCAtNzE5LDcgKzcxOSw3IEBACiAJICAqIGFuZCB0aGUgZXh0cmEgYml0cyBlbmQgdXAgaW4gdGhlICJjaGlwIGFkZHJlc3MiIGJpdCBzbG90cy4KIAkgICogVGhpcyBtYWtlcyBhIDI0V0MwOCAoMUtieXRlKSBjaGlwIGxvb2sgbGlrZSBmb3VyIDI1NiBieXRlCiAJICAqIGNoaXBzLgotICAJICAqCisJICAqCiAJICAqIE5vdGUgdGhhdCB3ZSBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIGZpZWxkIHRvIHN0aWxsCiAJICAqIGJlIG9uZSBieXRlIGJlY2F1c2UgdGhlIGV4dHJhIGFkZHJlc3MgYml0cyBhcmUgaGlkZGVuIGluIHRoZQogCSAgKiBjaGlwIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9jcHUvbXBjODI2MC9wY2kuYyBiL2NwdS9tcGM4MjYwL3BjaS5jCmluZGV4IGFjNzdjMTYuLmIzYTg5ZjUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL3BjaS5jCisrKyBiL2NwdS9tcGM4MjYwL3BjaS5jCkBAIC0zNSw3ICszNSw3IEBACiAgKgogICogICAweDgwMDAwMDAwIC0gMHhCRkZGRkZGRiAgICBDUFUyUENJIHNwYWNlICAgICAgICAgICAgICBQQ0lCUjAKICAqICAgMHhGNDAwMDAwMCAtIDB4RjdGRkZGRkYgICAgQ1BVMlBDSSBzcGFjZSAgICAgICAgICAgICAgUENJQlIxCi0gKiAgICAgICAgICAgICAgICAgICAgICAgCisgKgogICogICAweDgwMDAwMDAwIC0gMHg5RkZGRkZGRiAgICAweDgwMDAwMDAwIC0gMHg5RkZGRkZGRiAgIChPdXRib3VuZCBBVFUgIzEpCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSSBNZW0gd2l0aCBwcmVmZXRjaAogICoKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqCiAgKiAgIDB4RjQwMDAwMDAgLSAweEY3RkZGRkZGICAgIDB4MDAwMDAwMDAgLSAweDAzRkZGRkZGICAgKE91dGJvdW5kIEFUVSAjMykKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0IFBDSSBJTwotICogICAgICAgICAgICAgICAgICAgICAgCisgKgogICogICBQQ0ktPkxvY2FsIG1hcCAoZnJvbSBQQ0kpCiAgKiAgIE1QQzgyNnggc2xhdmUgd2luZG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWQgYnkKICAqCkBAIC01MiwxNSArNTIsMTUgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBDODI2eCBsb2NhbCBtZW1vcnkKICAqLwogCi0vKiAKLSAqIFNsYXZlIHdpbmRvdyB0aGF0IGFsbG93cyBQQ0kgbWFzdGVycyB0byBhY2Nlc3MgTVBDODI2eCBsb2NhbCBtZW1vcnkuIAorLyoKKyAqIFNsYXZlIHdpbmRvdyB0aGF0IGFsbG93cyBQQ0kgbWFzdGVycyB0byBhY2Nlc3MgTVBDODI2eCBsb2NhbCBtZW1vcnkuCiAgKiBUaGlzIHdpbmRvdyBpcyBzZXQgdXAgdXNpbmcgdGhlIGZpcnN0IHNldCBvZiBJbmJvdW5kIEFUVSByZWdpc3RlcnMKICAqLwogCi0jaWZuZGVmIENGR19QQ0lfU0xWX01FTV9MT0NBTCAKLSNkZWZpbmUgUENJX1NMVl9NRU1fTE9DQUwgQ0ZHX1NEUkFNX0JBU0UJCS8qIExvY2FsIGJhc2UgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX1NMVl9NRU1fTE9DQUwgQ0ZHX1BDSV9TTFZfTUVNX0xPQ0FMIAorI2lmbmRlZiBDRkdfUENJX1NMVl9NRU1fTE9DQUwKKyNkZWZpbmUgUENJX1NMVl9NRU1fTE9DQUwgQ0ZHX1NEUkFNX0JBU0UJCS8qIExvY2FsIGJhc2UgKi8KKyNlbHNlCisjZGVmaW5lIFBDSV9TTFZfTUVNX0xPQ0FMIENGR19QQ0lfU0xWX01FTV9MT0NBTAogI2VuZGlmCiAKICNpZm5kZWYgQ0ZHX1BDSV9TTFZfTUVNX0JVUwpAQCAtNzEsMjIgKzcxLDIyIEBACiAKICNpZm5kZWYgQ0ZHX1BJQ01SMF9NQVNLX0FUVFJJQgogI2RlZmluZSBQSUNNUjBfTUFTS19BVFRSSUIJKFBJQ01SX01BU0tfNTEyTUIgfCBQSUNNUl9FTkFCTEUgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIAkgUElDTVJfUFJFRkVUQ0hfRU4pCisJCQkJIFBJQ01SX1BSRUZFVENIX0VOKQogI2Vsc2UKICNkZWZpbmUgUElDTVIwX01BU0tfQVRUUklCIENGR19QSUNNUjBfTUFTS19BVFRSSUIKICNlbmRpZgogCi0vKiAKKy8qCiAgKiBUaGVzZSBhcmUgdGhlIHdpbmRvd3MgdGhhdCBhbGxvdyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgYWRkcmVzcyBzcGFjZS4KLSAqIEFsbCB0aHJlZSBQQ0kgbWFzdGVyIHdpbmRvd3MsIHdoaWNoIGFsbG93IHRoZSBDUFUgdG8gYWNjZXNzIFBDSSAKLSAqIHByZWZldGNoLCBub24gcHJlZmV0Y2gsIGFuZCBJTyBzcGFjZSAoc2VlIGJlbG93KSwgbXVzdCBhbGwgZml0IHdpdGhpbiAKKyAqIEFsbCB0aHJlZSBQQ0kgbWFzdGVyIHdpbmRvd3MsIHdoaWNoIGFsbG93IHRoZSBDUFUgdG8gYWNjZXNzIFBDSQorICogcHJlZmV0Y2gsIG5vbiBwcmVmZXRjaCwgYW5kIElPIHNwYWNlIChzZWUgYmVsb3cpLCBtdXN0IGFsbCBmaXQgd2l0aGluCiAgKiB0aGVzZSB3aW5kb3dzLgogICovCiAKIC8qIFBDSUJSMCAqLwogI2lmbmRlZiBDRkdfUENJX01TVFIwX0xPQ0FMCi0jZGVmaW5lIFBDSV9NU1RSMF9MT0NBTAkJMHg4MDAwMDAwMAkJLyogTG9jYWwgYmFzZSAqLyAKLSNlbHNlIAorI2RlZmluZSBQQ0lfTVNUUjBfTE9DQUwJCTB4ODAwMDAwMDAJCS8qIExvY2FsIGJhc2UgKi8KKyNlbHNlCiAjZGVmaW5lIFBDSV9NU1RSMF9MT0NBTCBDRkdfUENJX01TVFIwX0xPQ0FMCiAjZW5kaWYKIApAQCAtOTgsOSArOTgsOSBAQAogCiAvKiBQQ0lCUjEgKi8KICNpZm5kZWYgQ0ZHX1BDSV9NU1RSMV9MT0NBTAotI2RlZmluZSBQQ0lfTVNUUjFfTE9DQUwJCTB4RjQwMDAwMDAJCS8qIExvY2FsIGJhc2UgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX01TVFIxX0xPQ0FMCQlDRkdfUENJX01TVFIxX0xPQ0FMIAorI2RlZmluZSBQQ0lfTVNUUjFfTE9DQUwJCTB4RjQwMDAwMDAJCS8qIExvY2FsIGJhc2UgKi8KKyNlbHNlCisjZGVmaW5lIFBDSV9NU1RSMV9MT0NBTAkJQ0ZHX1BDSV9NU1RSMV9MT0NBTAogI2VuZGlmCiAKICNpZm5kZWYgQ0ZHX1BDSU1TSzFfTUFTSwpAQCAtMTA5LDcgKzEwOSw3IEBACiAjZGVmaW5lICBQQ0lNU0sxX01BU0sJCUNGR19QQ0lNU0sxX01BU0sKICNlbmRpZgogCi0vKiAKKy8qCiAgKiBNYXN0ZXIgd2luZG93IHRoYXQgYWxsb3dzIHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBNZW1vcnkgKHByZWZldGNoKS4KICAqIFRoaXMgd2luZG93IHdpbGwgYmUgc2V0dXAgd2l0aCB0aGUgZmlyc3Qgc2V0IG9mIE91dGJvdW5kIEFUVSByZWdpc3RlcnMKICAqIGluIHRoZSBicmlkZ2UuCkBAIC0xNDUsMzQgKzE0NSwzNCBAQAogI2RlZmluZSBQT0NNUjBfTUFTS19BVFRSSUIgQ0ZHX1BPQ01SMF9NQVNLX0FUVFJJQgogI2VuZGlmCiAKLS8qIAorLyoKICAqIE1hc3RlciB3aW5kb3cgdGhhdCBhbGxvd3MgdGhlIENQVSB0byBhY2Nlc3MgUENJIE1lbW9yeSAobm9uLXByZWZldGNoKS4KICAqIFRoaXMgd2luZG93IHdpbGwgYmUgc2V0dXAgd2l0aCB0aGUgc2Vjb25kIHNldCBvZiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzCiAgKiBpbiB0aGUgYnJpZGdlLgogICovCiAKLSNpZm5kZWYgQ0ZHX1BDSV9NU1RSX01FTUlPX0xPQ0FMIAotI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19MT0NBTCAweDkwMDAwMDAwICAgICAgICAgIC8qIExvY2FsIGJhc2UgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX01TVFJfTUVNSU9fTE9DQUwgQ0ZHX1BDSV9NU1RSX01FTUlPX0xPQ0FMIAorI2lmbmRlZiBDRkdfUENJX01TVFJfTUVNSU9fTE9DQUwKKyNkZWZpbmUgUENJX01TVFJfTUVNSU9fTE9DQUwgMHg5MDAwMDAwMCAgICAgICAgICAvKiBMb2NhbCBiYXNlICovCisjZWxzZQorI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19MT0NBTCBDRkdfUENJX01TVFJfTUVNSU9fTE9DQUwKICNlbmRpZgogCi0jaWZuZGVmIENGR19QQ0lfTVNUUl9NRU1JT19CVVMgCi0jZGVmaW5lIFBDSV9NU1RSX01FTUlPX0JVUyAweDkwMDAwMDAwICAgICAgICAgIC8qIFBDSSBiYXNlICAgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX01TVFJfTUVNSU9fQlVTIENGR19QQ0lfTVNUUl9NRU1JT19CVVMgCisjaWZuZGVmIENGR19QQ0lfTVNUUl9NRU1JT19CVVMKKyNkZWZpbmUgUENJX01TVFJfTUVNSU9fQlVTIDB4OTAwMDAwMDAgICAgICAgICAgLyogUENJIGJhc2UgICAqLworI2Vsc2UKKyNkZWZpbmUgUENJX01TVFJfTUVNSU9fQlVTIENGR19QQ0lfTVNUUl9NRU1JT19CVVMKICNlbmRpZgogCi0jaWZuZGVmIENGR19DUFVfUENJX01FTUlPX1NUQVJUIAotI2RlZmluZSBDUFVfUENJX01FTUlPX1NUQVJUIFBDSV9NU1RSX01FTUlPX0xPQ0FMIAotI2Vsc2UgCi0jZGVmaW5lIENQVV9QQ0lfTUVNSU9fU1RBUlQgQ0ZHX0NQVV9QQ0lfTUVNSU9fU1RBUlQgCisjaWZuZGVmIENGR19DUFVfUENJX01FTUlPX1NUQVJUCisjZGVmaW5lIENQVV9QQ0lfTUVNSU9fU1RBUlQgUENJX01TVFJfTUVNSU9fTE9DQUwKKyNlbHNlCisjZGVmaW5lIENQVV9QQ0lfTUVNSU9fU1RBUlQgQ0ZHX0NQVV9QQ0lfTUVNSU9fU1RBUlQKICNlbmRpZgogCi0jaWZuZGVmIENGR19QQ0lfTVNUUl9NRU1JT19TSVpFIAotI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19TSVpFIDB4MTAwMDAwMDAgICAgICAgICAgLyogMjU2IE1CICovIAotI2Vsc2UgCi0jZGVmaW5lIFBDSV9NU1RSX01FTUlPX1NJWkUgQ0ZHX1BDSV9NU1RSX01FTUlPX1NJWkUgCisjaWZuZGVmIENGR19QQ0lfTVNUUl9NRU1JT19TSVpFCisjZGVmaW5lIFBDSV9NU1RSX01FTUlPX1NJWkUgMHgxMDAwMDAwMCAgICAgICAgICAvKiAyNTYgTUIgKi8KKyNlbHNlCisjZGVmaW5lIFBDSV9NU1RSX01FTUlPX1NJWkUgQ0ZHX1BDSV9NU1RSX01FTUlPX1NJWkUKICNlbmRpZgogCiAjaWZuZGVmIENGR19QT0NNUjFfTUFTS19BVFRSSUIKQEAgLTE4MSwzNCArMTgxLDM0IEBACiAjZGVmaW5lIFBPQ01SMV9NQVNLX0FUVFJJQiBDRkdfUE9DTVIxX01BU0tfQVRUUklCCiAjZW5kaWYKIAotLyogCisvKgogICogTWFzdGVyIHdpbmRvdyB0aGF0IGFsbG93cyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgSU8gc3BhY2UuCiAgKiBUaGlzIHdpbmRvdyB3aWxsIGJlIHNldHVwIHdpdGggdGhlIHRoaXJkIHNldCBvZiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzCiAgKiBpbiB0aGUgYnJpZGdlLgogICovCiAKLSNpZm5kZWYgQ0ZHX1BDSV9NU1RSX0lPX0xPQ0FMIAotI2RlZmluZSBQQ0lfTVNUUl9JT19MT0NBTCAweEEwMDAwMDAwICAgICAgICAgIC8qIExvY2FsIGJhc2UgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX01TVFJfSU9fTE9DQUwgQ0ZHX1BDSV9NU1RSX0lPX0xPQ0FMIAorI2lmbmRlZiBDRkdfUENJX01TVFJfSU9fTE9DQUwKKyNkZWZpbmUgUENJX01TVFJfSU9fTE9DQUwgMHhBMDAwMDAwMCAgICAgICAgICAvKiBMb2NhbCBiYXNlICovCisjZWxzZQorI2RlZmluZSBQQ0lfTVNUUl9JT19MT0NBTCBDRkdfUENJX01TVFJfSU9fTE9DQUwKICNlbmRpZgogCi0jaWZuZGVmIENGR19QQ0lfTVNUUl9JT19CVVMgCi0jZGVmaW5lIFBDSV9NU1RSX0lPX0JVUyAweEEwMDAwMDAwICAgICAgICAgIC8qIFBDSSBiYXNlICAgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX01TVFJfSU9fQlVTIENGR19QQ0lfTVNUUl9JT19CVVMgCisjaWZuZGVmIENGR19QQ0lfTVNUUl9JT19CVVMKKyNkZWZpbmUgUENJX01TVFJfSU9fQlVTIDB4QTAwMDAwMDAgICAgICAgICAgLyogUENJIGJhc2UgICAqLworI2Vsc2UKKyNkZWZpbmUgUENJX01TVFJfSU9fQlVTIENGR19QQ0lfTVNUUl9JT19CVVMKICNlbmRpZgogCi0jaWZuZGVmIENGR19DUFVfUENJX0lPX1NUQVJUIAotI2RlZmluZSBDUFVfUENJX0lPX1NUQVJUIFBDSV9NU1RSX0lPX0xPQ0FMIAotI2Vsc2UgCi0jZGVmaW5lIENQVV9QQ0lfSU9fU1RBUlQgQ0ZHX0NQVV9QQ0lfSU9fU1RBUlQgCisjaWZuZGVmIENGR19DUFVfUENJX0lPX1NUQVJUCisjZGVmaW5lIENQVV9QQ0lfSU9fU1RBUlQgUENJX01TVFJfSU9fTE9DQUwKKyNlbHNlCisjZGVmaW5lIENQVV9QQ0lfSU9fU1RBUlQgQ0ZHX0NQVV9QQ0lfSU9fU1RBUlQKICNlbmRpZgogCi0jaWZuZGVmIENGR19QQ0lfTVNUUl9JT19TSVpFIAotI2RlZmluZSBQQ0lfTVNUUl9JT19TSVpFIDB4MTAwMDAwMDAgICAgICAgICAgLyogMjU2TUIgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX01TVFJfSU9fU0laRSBDRkdfUENJX01TVFJfSU9fU0laRSAKKyNpZm5kZWYgQ0ZHX1BDSV9NU1RSX0lPX1NJWkUKKyNkZWZpbmUgUENJX01TVFJfSU9fU0laRSAweDEwMDAwMDAwICAgICAgICAgIC8qIDI1Nk1CICovCisjZWxzZQorI2RlZmluZSBQQ0lfTVNUUl9JT19TSVpFIENGR19QQ0lfTVNUUl9JT19TSVpFCiAjZW5kaWYKIAogI2lmbmRlZiBDRkdfUE9DTVIyX01BU0tfQVRUUklCCkBAIC0yMzksNyArMjM5LDcgQEAKICAgICBwY2lfZGV2X3QgaG9zdF9kZXZubyA9IFBDSV9CREYoMCwgMCwgMCk7CiAKICAgICBwY2lfc2V0dXBfaW5kaXJlY3QoaG9zZSwgQ0ZHX0lNTVIgKyBQQ0lfQ0ZHX0FERFJfUkVHLAotCSAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfSU1NUiArIFBDSV9DRkdfREFUQV9SRUcpOworCQkJCSBDRkdfSU1NUiArIFBDSV9DRkdfREFUQV9SRUcpOwogCiAgICAgLyoKICAgICAgKiBTZXR0aW5nIHJlcXVpcmVkIHRvIGVuYWJsZSBsb2NhbCBidXMgZm9yIFBDSSAoU0lVTUNSIFtMQlBDXSkuCkBAIC0yNDgsMjMgKzI0OCwyMyBAQAogICAgIGltbWFwLT5pbV9zaXVfY29uZi5zY19zaXVtY3IgPSAoaW1tYXAtPmltX3NpdV9jb25mLnNjX3NpdW1jciAmIH5TSVVNQ1JfTEJQQzExKQogCQkJCSAgIHwgU0lVTUNSX0xCUEMwMTsKICNlbHNlCi0gICAgLyogCi0gICAgICogU2V0dGluZyByZXF1aXJlZCB0byBlbmFibGUgSVJRMS1JUlE3IChTSVVNQ1IgW0RQUENdKSwgCisgICAgLyoKKyAgICAgKiBTZXR0aW5nIHJlcXVpcmVkIHRvIGVuYWJsZSBJUlExLUlSUTcgKFNJVU1DUiBbRFBQQ10pLAogICAgICAqIGFuZCBsb2NhbCBidXMgZm9yIFBDSSAoU0lVTUNSIFtMQlBDXSkuCiAgICAgICovCi0gICAgaW1tYXAtPmltX3NpdV9jb25mLnNjX3NpdW1jciA9IChpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2l1bWNyICYgCi0JCQkJCQkgIH5TSVVNQ1JfTEJQQzExICYgCi0JCQkJCQl+U0lVTUNSX0NTMTBQQzExICYgCisgICAgaW1tYXAtPmltX3NpdV9jb25mLnNjX3NpdW1jciA9IChpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2l1bWNyICYKKwkJCQkJCSAgflNJVU1DUl9MQlBDMTEgJgorCQkJCQkJflNJVU1DUl9DUzEwUEMxMSAmCiAJCQkJCQkgflNJVU1DUl9MQlBDMTEpIHwKLQkJCQkgICBTSVVNQ1JfTEJQQzAxIHwgCi0JCQkJICAgU0lVTUNSX0NTMTBQQzAxIHwgCisJCQkJICAgU0lVTUNSX0xCUEMwMSB8CisJCQkJICAgU0lVTUNSX0NTMTBQQzAxIHwKIAkJCQkgICBTSVVNQ1JfTEJQQzAxOwogI2VuZGlmCiAKICAgICAvKiBNYWtlIFBDSSBsb3dlc3QgcHJpb3JpdHkgKi8KLSAgICAvKiBFYWNoIDQgYml0cyBpcyBhIGRldmljZSBidXMgcmVxdWVzdCAgYW5kIHRoZSBNUyA0Yml0cyAKKyAgICAvKiBFYWNoIDQgYml0cyBpcyBhIGRldmljZSBidXMgcmVxdWVzdCAgYW5kIHRoZSBNUyA0Yml0cwogICAgICAgIGlzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KLSAgICAvKiBCdXMgICAgICAgICAgICAgICA0Yml0IHZhbHVlIAorICAgIC8qIEJ1cyAgICAgICAgICAgICAgIDRiaXQgdmFsdWUKIAkgICAtLS0gICAgICAgICAgICAgICAtLS0tLS0tLS0tCiAgICAgICAgQ1BNIGhpZ2ggICAgICAgICAgMGIwMDAwCiAgICAgICAgQ1BNIG1pZGRsZSAgICAgICAgMGIwMDAxCkBAIC0yODIsOCArMjgyLDggQEAKICAgICAvKiBQYXJrIGJ1cyBvbiBjb3JlIHdoaWxlIG1vZGlmeWluZyBQQ0kgQnVzIGFjY2Vzc2VzICovCiAgICAgaW1tYXAtPmltX3NpdV9jb25mLnNjX3BwY19hY3IgPSAweDY7CiAKLSAgICAvKiAKLSAgICAgKiBTZXQgdXAgbWFzdGVyIHdpbmRvd3MgdGhhdCBhbGxvdyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgc3BhY2UuIFRoZXNlIAorICAgIC8qCisgICAgICogU2V0IHVwIG1hc3RlciB3aW5kb3dzIHRoYXQgYWxsb3cgdGhlIENQVSB0byBhY2Nlc3MgUENJIHNwYWNlLiBUaGVzZQogICAgICAqIHdpbmRvd3MgYXJlIHNldCB1cCB1c2luZyB0aGUgdHdvIFNJVSBQQ0lCUiByZWdpc3RlcnMuCiAgICAgICovCiAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKikoaW1tcl9hZGRyICsgTTgyNjVfUENJTVNLMCkgPSBQQ0lNU0swX01BU0s7CkBAIC0yOTQsNDAgKzI5NCw0MCBAQAogICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKGltbXJfYWRkciArIE04MjY1X1BDSU1TSzEpID0gUENJTVNLMV9NQVNLOwogICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKGltbXJfYWRkciArIE04MjY1X1BDSUJSMSkgPQogCSAgICBQQ0lfTVNUUjFfTE9DQUwgfCBQQ0lCUl9FTkFCTEU7Ci0jZW5kaWYgCisjZW5kaWYKIAogICAgIC8qIFJlbGVhc2UgUENJIFJTVCAoYnkgZGVmYXVsdCB0aGUgUENJIFJTVCBzaWduYWwgaXMgaGVsZCBsb3cpICAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQQ0lfR0NSX1JFRywgUENJR0NSX1BDSV9CVVNfRU4pOwogCiAgICAgLyogZ2l2ZSBpdCBzb21lIHRpbWUgKi8KICAgICB7Ci0jaWZkZWYgQ09ORklHX01QQzgyNjZBRFMgCi0JCS8qIEdpdmUgdGhlIFBDSSBjYXJkcyBtb3JlIHRpbWUgdG8gaW5pdGlhbGl6ZSBiZWZvcmUgcXVlcnkgCisjaWZkZWYgQ09ORklHX01QQzgyNjZBRFMKKwkJLyogR2l2ZSB0aGUgUENJIGNhcmRzIG1vcmUgdGltZSB0byBpbml0aWFsaXplIGJlZm9yZSBxdWVyeQogCQkJVGhpcyBtaWdodCBiZSBnb29kIGZvciBvdGhlciBib2FyZHMgYWxzbwogCQkqLwotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwMDA7ICsraSkKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKQogI2VuZGlmCi0gICAgICAgICAgICB1ZGVsYXkoMTAwMCk7CisJICAgIHVkZWxheSgxMDAwKTsKICAgICB9CiAKLSAgICAvKiAKLSAgICAgKiBTZXQgdXAgbWFzdGVyIHdpbmRvdyB0aGF0IGFsbG93cyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgTWVtb3J5IChwcmVmZXRjaCkgCisgICAgLyoKKyAgICAgKiBTZXQgdXAgbWFzdGVyIHdpbmRvdyB0aGF0IGFsbG93cyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgTWVtb3J5IChwcmVmZXRjaCkKICAgICAgKiBzcGFjZS4gVGhpcyB3aW5kb3cgaXMgc2V0IHVwIHVzaW5nIHRoZSBmaXJzdCBzZXQgb2YgT3V0Ym91bmQgQVRVIHJlZ2lzdGVycy4KICAgICAgKi8KICAgICBwY2lfb3V0bCAoaW1tcl9hZGRyIHwgUE9UQVJfUkVHMCwgUENJX01TVFJfTUVNX0JVUyA+PiAxMik7ICAgICAgLyogUENJIGJhc2UgKi8KICAgICBwY2lfb3V0bCAoaW1tcl9hZGRyIHwgUE9CQVJfUkVHMCwgUENJX01TVFJfTUVNX0xPQ0FMID4+IDEyKTsgICAgLyogTG9jYWwgYmFzZSAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQT0NNUl9SRUcwLCBQT0NNUjBfTUFTS19BVFRSSUIpOyAgICAvKiBTaXplICYgYXR0cmlidXRlICovCiAKLSAgICAvKiAKLSAgICAgKiBTZXQgdXAgbWFzdGVyIHdpbmRvdyB0aGF0IGFsbG93cyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgTWVtb3J5IChub24tcHJlZmV0Y2gpIAorICAgIC8qCisgICAgICogU2V0IHVwIG1hc3RlciB3aW5kb3cgdGhhdCBhbGxvd3MgdGhlIENQVSB0byBhY2Nlc3MgUENJIE1lbW9yeSAobm9uLXByZWZldGNoKQogICAgICAqIHNwYWNlLiBUaGlzIHdpbmRvdyBpcyBzZXQgdXAgdXNpbmcgdGhlIHNlY29uZCBzZXQgb2YgT3V0Ym91bmQgQVRVIHJlZ2lzdGVycy4KICAgICAgKi8KICAgICBwY2lfb3V0bCAoaW1tcl9hZGRyIHwgUE9UQVJfUkVHMSwgUENJX01TVFJfTUVNSU9fQlVTID4+IDEyKTsgICAgLyogUENJIGJhc2UgKi8KICAgICBwY2lfb3V0bCAoaW1tcl9hZGRyIHwgUE9CQVJfUkVHMSwgUENJX01TVFJfTUVNSU9fTE9DQUwgPj4gMTIpOyAgLyogTG9jYWwgYmFzZSAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQT0NNUl9SRUcxLCBQT0NNUjFfTUFTS19BVFRSSUIpOyAgICAvKiBTaXplICYgYXR0cmlidXRlICovCi0gICAgCi0gICAgLyogCisKKyAgICAvKgogICAgICAqIFNldCB1cCBtYXN0ZXIgd2luZG93IHRoYXQgYWxsb3dzIHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBJTyBzcGFjZS4gVGhpcyB3aW5kb3cKICAgICAgKiBpcyBzZXQgdXAgdXNpbmcgdGhlIHRoaXJkIHNldCBvZiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzLgogICAgICAqLwpAQCAtMzM1LDggKzMzNSw4IEBACiAgICAgcGNpX291dGwgKGltbXJfYWRkciB8IFBPQkFSX1JFRzIsIFBDSV9NU1RSX0lPX0xPQ0FMID4+IDEyKTsgICAgIC8qIExvY2FsIGJhc2UgKi8KICAgICBwY2lfb3V0bCAoaW1tcl9hZGRyIHwgUE9DTVJfUkVHMiwgUE9DTVIyX01BU0tfQVRUUklCKTsgICAgLyogU2l6ZSAmIGF0dHJpYnV0ZSAqLwogCi0gICAgLyogCi0gICAgICogU2V0IHVwIHNsYXZlIHdpbmRvdyB0aGF0IGFsbG93cyBQQ0kgbWFzdGVycyB0byBhY2Nlc3MgTVBDODI2eCBsb2NhbCBtZW1vcnkuIAorICAgIC8qCisgICAgICogU2V0IHVwIHNsYXZlIHdpbmRvdyB0aGF0IGFsbG93cyBQQ0kgbWFzdGVycyB0byBhY2Nlc3MgTVBDODI2eCBsb2NhbCBtZW1vcnkuCiAgICAgICogVGhpcyB3aW5kb3cgaXMgc2V0IHVwIHVzaW5nIHRoZSBmaXJzdCBzZXQgb2YgSW5ib3VuZCBBVFUgcmVnaXN0ZXJzCiAgICAgICovCiAgICAgcGNpX291dGwgKGltbXJfYWRkciB8IFBJVEFSX1JFRzAsIFBDSV9TTFZfTUVNX0xPQ0FMID4+IDEyKTsgICAgIC8qIExvY2FsIGJhc2UgKi8KQEAgLTM1MiwxOCArMzUyLDE4IEBACiAgICAgLyogSG9zdCBtb2RlIC0gc3BlY2lmeSB0aGUgYnJpZGdlIGFzIGEgaG9zdC1QQ0kgYnJpZGdlICovCiAKICAgICBwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBob3N0X2Rldm5vLCBQQ0lfQ0xBU1NfQ09ERSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQ0xBU1NfQlJJREdFX0NUTFIpOworCQkJCSAgIFBDSV9DTEFTU19CUklER0VfQ1RMUik7CiAKICAgICAvKiBFbmFibGUgdGhlIGhvc3QgYnJpZGdlIHRvIGJlIGEgbWFzdGVyIG9uIHRoZSBQQ0kgYnVzLCBhbmQgdG8gYWN0IGFzIGEgUENJIG1lbW9yeSB0YXJnZXQgKi8KICAgICBwY2lfaG9zZV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIGhvc3RfZGV2bm8sIFBDSV9DT01NQU5ELCAmdGVtcFNob3J0KTsKICAgICBwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBob3N0X2Rldm5vLCBQQ0lfQ09NTUFORCwKLQkJICAgICAgICAgdGVtcFNob3J0IHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKKwkJCSB0ZW1wU2hvcnQgfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwogCiAjaWZkZWYgQ09ORklHX01QQzgyNjZBRFMKIAkvKiBkbyBzb21lIGJyaWRnZSBpbml0LCBzaG91bGQgYmUgZG9uZSBvbiBhbGwgODI2MCBiYXNlZCBicmlkZ2VzICovCiAJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgaG9zdF9kZXZubywgUENJX0NBQ0hFX0xJTkVfU0laRSwgMHgwOCk7CiAJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgaG9zdF9kZXZubywgUENJX0xBVEVOQ1lfVElNRVIsIDB4RjgpOwotI2VuZGlmIAorI2VuZGlmCiAKICAgICBob3NlLT5maXJzdF9idXNubyA9IDA7CiAgICAgaG9zZS0+bGFzdF9idXNubyA9IDB4ZmY7CmRpZmYgLS1naXQgYS9jcHUvbXBjODI2MC9zZXJpYWxfc2NjLmMgYi9jcHUvbXBjODI2MC9zZXJpYWxfc2NjLmMKaW5kZXggY2E3NjMwMi4uMzIwMTZmMiAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvc2VyaWFsX3NjYy5jCisrKyBiL2NwdS9tcGM4MjYwL3NlcmlhbF9zY2MuYwpAQCAtODIsNyArODIsNyBAQAogCiBpbnQgc2VyaWFsX2luaXQgKHZvaWQpCiB7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgc2NjX3QgKnNwOwogCXZvbGF0aWxlIHNjY191YXJ0X3QgKnVwOwogCXZvbGF0aWxlIGNiZF90ICp0YmRmLCAqcmJkZjsKQEAgLTE5NiwxMiArMTk2LDEyIEBACiB7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdAkqdXA7CiAJdm9sYXRpbGUgY2JkX3QJCSp0YmRmOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbTsKKwl2b2xhdGlsZSBpbW1hcF90CSppbTsKIAogCWlmIChjID09ICdcbicpCiAJCXNlcmlhbF9wdXRjICgnXHInKTsKIAotICAgICAgICBpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXVwID0gKHNjY191YXJ0X3QgKikmaW0tPmltX2RwcmFtYmFzZVtQUk9GRl9TQ0NdOwogCXRiZGYgPSAoY2JkX3QgKikmaW0tPmltX2RwcmFtYmFzZVt1cC0+c2NjX2dlbnNjYy5zY2NfdGJhc2VdOwogCkBAIC0yMzAsMTAgKzIzMCwxMCBAQAogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW07CisJdm9sYXRpbGUgaW1tYXBfdAkqaW07CiAJdW5zaWduZWQgY2hhcgkJYzsKIAotICAgICAgICBpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXVwID0gKHNjY191YXJ0X3QgKikmaW0tPmltX2RwcmFtYmFzZVtQUk9GRl9TQ0NdOwogCXJiZGYgPSAoY2JkX3QgKikmaW0tPmltX2RwcmFtYmFzZVt1cC0+c2NjX2dlbnNjYy5zY2NfcmJhc2VdOwogCkBAIC0yNTUsOSArMjU1LDkgQEAKIHsKIAl2b2xhdGlsZSBjYmRfdAkJKnJiZGY7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltOworCXZvbGF0aWxlIGltbWFwX3QJKmltOwogCi0gICAgICAgIGltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdXAgPSAoc2NjX3VhcnRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW1BST0ZGX1NDQ107CiAJcmJkZiA9IChjYmRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW3VwLT5zY2NfZ2Vuc2NjLnNjY19yYmFzZV07CiAKQEAgLTMyMSw3ICszMjEsNyBAQAogdm9pZAoga2dkYl9zZXJpYWxfaW5pdCAodm9pZCkKIHsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzY2NfdCAqc3A7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdCAqdXA7CiAJdm9sYXRpbGUgY2JkX3QgKnRiZGYsICpyYmRmOwpAQCAtNDM1LDEyICs0MzUsMTIgQEAKIHsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKIAl2b2xhdGlsZSBjYmRfdAkJKnRiZGY7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltOworCXZvbGF0aWxlIGltbWFwX3QJKmltOwogCiAJaWYgKGMgPT0gJ1xuJykKIAkJcHV0RGVidWdDaGFyICgnXHInKTsKIAotICAgICAgICBpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXVwID0gKHNjY191YXJ0X3QgKikmaW0tPmltX2RwcmFtYmFzZVtLR0RCX1BST0ZGX1NDQ107CiAJdGJkZiA9IChjYmRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW3VwLT5zY2NfZ2Vuc2NjLnNjY190YmFzZV07CiAKQEAgLTQ2OSwxMCArNDY5LDEwIEBACiB7CiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHNjY191YXJ0X3QJKnVwOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbTsKKwl2b2xhdGlsZSBpbW1hcF90CSppbTsKIAl1bnNpZ25lZCBjaGFyCQljOwogCi0gICAgICAgIGltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdXAgPSAoc2NjX3VhcnRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW0tHREJfUFJPRkZfU0NDXTsKIAlyYmRmID0gKGNiZF90ICopJmltLT5pbV9kcHJhbWJhc2VbdXAtPnNjY19nZW5zY2Muc2NjX3JiYXNlXTsKIApkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvc2VyaWFsX3NtYy5jIGIvY3B1L21wYzgyNjAvc2VyaWFsX3NtYy5jCmluZGV4IGIwZTFjZTQuLjA4NzMzMTkgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL3NlcmlhbF9zbWMuYworKysgYi9jcHUvbXBjODI2MC9zZXJpYWxfc21jLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAogaW50IHNlcmlhbF9pbml0ICh2b2lkKQogewotICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIHNtY190ICpzcDsKIAl2b2xhdGlsZSBzbWNfdWFydF90ICp1cDsKIAl2b2xhdGlsZSBjYmRfdCAqdGJkZiwgKnJiZGY7CkBAIC0xODYsNyArMTg2LDcgQEAKIAl2b2xhdGlsZSBjYmRfdAkJKnRiZGY7CiAJdm9sYXRpbGUgY2hhcgkJKmJ1ZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAogCWlmIChjID09ICdcbicpCiAJCXNlcmlhbF9wdXRjICgnXHInKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpidWY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdW5zaWduZWQgY2hhcgkJYzsKIAogCXVwID0gKHNtY191YXJ0X3QgKikmKGltLT5pbV9kcHJhbWJhc2VbUFJPRkZfU01DXSk7CkBAIC0yNDMsNyArMjQzLDcgQEAKIHsKIAl2b2xhdGlsZSBjYmRfdAkJKnJiZGY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAKIAl1cCA9IChzbWNfdWFydF90ICopJihpbS0+aW1fZHByYW1iYXNlW1BST0ZGX1NNQ10pOwogCkBAIC0yODksNyArMjg5LDcgQEAKIHZvaWQKIGtnZGJfc2VyaWFsX2luaXQgKHZvaWQpCiB7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgc21jX3QgKnNwOwogCXZvbGF0aWxlIHNtY191YXJ0X3QgKnVwOwogCXZvbGF0aWxlIGNiZF90ICp0YmRmLCAqcmJkZjsKQEAgLTQwMSw3ICs0MDEsNyBAQAogCXZvbGF0aWxlIGNiZF90CQkqdGJkZjsKIAl2b2xhdGlsZSBjaGFyCQkqYnVmOwogCXZvbGF0aWxlIHNtY191YXJ0X3QJKnVwOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCiAJaWYgKGMgPT0gJ1xuJykKIAkJcHV0RGVidWdDaGFyICgnXHInKTsKQEAgLTQzNSw3ICs0MzUsNyBAQAogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpidWY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdW5zaWduZWQgY2hhcgkJYzsKIAogCXVwID0gKHNtY191YXJ0X3QgKikmKGltLT5pbV9kcHJhbWJhc2VbS0dEQl9QUk9GRl9TTUNdKTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL3NwaS5jIGIvY3B1L21wYzgyNjAvc3BpLmMKaW5kZXggNmEyZGM4Zi4uYzFhNjA3YyAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvc3BpLmMKKysrIGIvY3B1L21wYzgyNjAvc3BpLmMKQEAgLTIxMywxMiArMjEzLDEyIEBACiAKIAkvKioqKioqKioqKipJTVBPUlRBTlQqKioqKioqKioqKioqKioqKiovCiAKLSAgICAgICAgLyoKLSAgICAgICAgICogU2V0dGluZyB0cmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXIgZGVzY3JpcHRvciBwb2ludGVycwotICAgICAgICAgKiBpbml0aWFsbHkgdG8gcmJhc2UgYW5kIHRiYXNlLiBPbmx5IHRoZSBtaWNyb2NvZGUgcGF0Y2hlcwotICAgICAgICAgKiBkb2N1bWVudGF0aW9uIHRhbGtzIGFib3V0IGluaXRpYWxpemluZyB0aGlzIHBvaW50ZXIuIFRoaXMKLSAgICAgICAgICogaXMgbWlzc2luZyBmcm9tIHRoZSBzYW1wbGUgSTJDIGRyaXZlci4gSWYgeW91IGRvbnQKLSAgICAgICAgICogaW5pdGlhbGl6ZSB0aGVzZSBwb2ludGVycywgdGhlIGtlcm5lbCBoYW5ncy4KKwkvKgorCSAqIFNldHRpbmcgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVmZmVyIGRlc2NyaXB0b3IgcG9pbnRlcnMKKwkgKiBpbml0aWFsbHkgdG8gcmJhc2UgYW5kIHRiYXNlLiBPbmx5IHRoZSBtaWNyb2NvZGUgcGF0Y2hlcworCSAqIGRvY3VtZW50YXRpb24gdGFsa3MgYWJvdXQgaW5pdGlhbGl6aW5nIHRoaXMgcG9pbnRlci4gVGhpcworCSAqIGlzIG1pc3NpbmcgZnJvbSB0aGUgc2FtcGxlIEkyQyBkcml2ZXIuIElmIHlvdSBkb250CisJICogaW5pdGlhbGl6ZSB0aGVzZSBwb2ludGVycywgdGhlIGtlcm5lbCBoYW5ncy4KIAkgKi8KIAlzcGktPnNwaV9yYnB0ciA9IHNwaS0+c3BpX3JiYXNlOwogCXNwaS0+c3BpX3RicHRyID0gc3BpLT5zcGlfdGJhc2U7CmRpZmYgLS1naXQgYS9jcHUvbXBjODI2MC9zdGFydC5TIGIvY3B1L21wYzgyNjAvc3RhcnQuUwppbmRleCAyMDcwZWNjLi5kM2ZkODY1IDEwMDY0NAotLS0gYS9jcHUvbXBjODI2MC9zdGFydC5TCisrKyBiL2NwdS9tcGM4MjYwL3N0YXJ0LlMKQEAgLTk2Niw4ICs5NjYsOCBAQAogCS8qCiAJICogUmVsb2NhdGlvbiBGdW5jdGlvbiwgcjE0IHBvaW50IHRvIGdvdDIrMHg4MDAwCiAJICoKLSAgICAgICAgICogQWRqdXN0IGdvdDIgcG9pbnRlcnMsIG5vIG5lZWQgdG8gY2hlY2sgZm9yIDAsIHRoaXMgY29kZQotICAgICAgICAgKiBhbHJlYWR5IHB1dHMgYSBmZXcgZW50cmllcyBpbiB0aGUgdGFibGUuCisJICogQWRqdXN0IGdvdDIgcG9pbnRlcnMsIG5vIG5lZWQgdG8gY2hlY2sgZm9yIDAsIHRoaXMgY29kZQorCSAqIGFscmVhZHkgcHV0cyBhIGZldyBlbnRyaWVzIGluIHRoZSB0YWJsZS4KIAkgKi8KIAlsaQlyMCxfX2dvdDJfZW50cmllc0BzZWN0b2ZmQGwKIAlsYQlyMyxHT1QoX0dPVDJfVEFCTEVfKQpAQCAtOTgxLDcgKzk4MSw3IEBACiAJYmRuegkxYgogCiAJLyoKLSAgICAgICAgICogTm93IGFkanVzdCB0aGUgZml4dXBzIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlIGZpeHVwcworCSAqIE5vdyBhZGp1c3QgdGhlIGZpeHVwcyBhbmQgdGhlIHBvaW50ZXJzIHRvIHRoZSBmaXh1cHMKIAkgKiBpbiBjYXNlIHdlIG5lZWQgdG8gbW92ZSBvdXJzZWx2ZXMgYWdhaW4uCiAJICovCiAyOglsaQlyMCxfX2ZpeHVwX2VudHJpZXNAc2VjdG9mZkBsCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L2JlZGJ1Z184NjAuYyBiL2NwdS9tcGM4eHgvYmVkYnVnXzg2MC5jCmluZGV4IGI5MDc4MmUuLmU5MWExMDAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvYmVkYnVnXzg2MC5jCisrKyBiL2NwdS9tcGM4eHgvYmVkYnVnXzg2MC5jCkBAIC01LDExICs1LDEwIEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0KLSNpbmNsdWRlIDxjbWRfYmVkYnVnLmg+CiAjaW5jbHVkZSA8YmVkYnVnL2JlZGJ1Zy5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9yZWdzLmg+CiAjaW5jbHVkZSA8YmVkYnVnL3BwYy5oPgorI2luY2x1ZGUgPGJlZGJ1Zy90eXBlLmg+CiAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9CRURCVUcpICYmIGRlZmluZWQoQ09ORklHXzh4eCkKIApAQCAtNjQsNyArNjMsNyBAQAogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiB2b2lkIGJlZGJ1Zzg2MF9kb19icmVhayAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFyZ3ZbXSkKKwkJCSBjaGFyICphcmd2W10pCiB7CiAgIGxvbmcJCWFkZHIgPSAwOyAgICAgICAvKiBBZGRyZXNzIHRvIGJyZWFrIGF0ICAqLwogICBpbnQJCXdoaWNoX2JwOyAgICAgICAvKiBCcmVha3BvaW50IG51bWJlciAgICAqLwpAQCAtMzE1LDQgKzMxNCwzIEBACiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L2NwdS5jIGIvY3B1L21wYzh4eC9jcHUuYwppbmRleCBjYzczMzA1Li40ZTIzMjI4IDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L2NwdS5jCisrKyBiL2NwdS9tcGM4eHgvY3B1LmMKQEAgLTQxMSw4ICs0MTEsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLWludCBkb19yZXNldCAoY21kX3RibF90ICogY21kdHAsIGJkX3QgKiBiZCwgaW50IGZsYWcsIGludCBhcmdjLAotCQkJICBjaGFyICphcmd2W10pCitpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXVsb25nIG1zciwgYWRkcjsKIApkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9mZWMuYyBiL2NwdS9tcGM4eHgvZmVjLmMKaW5kZXggZDJlODQwOC4uODViYTZiMiAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9mZWMuYworKysgYi9jcHUvbXBjOHh4L2ZlYy5jCkBAIC00MTEsNyArNDExLDYgQEAKIH0KIAogCi0KIHN0YXRpYyB2b2lkIGZlY19oYWx0KHN0cnVjdCBldGhfZGV2aWNlKiBkZXYpCiB7CiAjaWYgMApkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9pMmMuYyBiL2NwdS9tcGM4eHgvaTJjLmMKaW5kZXggOWU4YjhjNy4uYmFhMzU1MiAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9pMmMuYworKysgYi9jcHUvbXBjOHh4L2kyYy5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAl2b2xhdGlsZSBJMkNfQkQgKnJ4YmQsICp0eGJkOwogCXVpbnQgZHBhZGRyOwogCi0jaWZkZWYgQ0ZHX0kyQ19JTklUX0JPQVJEICAgICAgICAKKyNpZmRlZiBDRkdfSTJDX0lOSVRfQk9BUkQKIAkvKiBjYWxsIGJvYXJkIHNwZWNpZmljIGkyYyBidXMgcmVzZXQgcm91dGluZSBiZWZvcmUgYWNjZXNzaW5nIHRoZSAgICovCiAJLyogZW52aXJvbm1lbnQsIHdoaWNoIG1pZ2h0IGJlIGluIGEgY2hpcCBvbiB0aGF0IGJ1cy4gRm9yIGRldGFpbHMgICAqLwogCS8qIGFib3V0IHRoaXMgcHJvYmxlbSBzZWUgZG9jL0kyQ19FZGdlX0NvbmRpdGlvbnMuICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvbGNkLmMgYi9jcHUvbXBjOHh4L2xjZC5jCmluZGV4IGZhZDM4M2YuLjlmNGIyMTAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvbGNkLmMKKysrIGIvY3B1L21wYzh4eC9sY2QuYwpAQCAtODkwLDcgKzg5MCw3IEBACiAJICogNC1iaXQgd2lkZSBwYXNzaXZlIGR1YWwgc2NhbiBMQ0QgYXQgNC84IEJpdCBjb2xvci4KIAkgKi8KIAlsY2hjcl9ocGNfdG1wID0KLQkgICAgICAgCShwYW5lbF9pbmZvLnZsX2NvbCAqCisJCShwYW5lbF9pbmZvLnZsX2NvbCAqCiAJCSAocGFuZWxfaW5mby52bF90ZnQgPyA4IDoKIAkJCSgoKDIgLSBwYW5lbF9pbmZvLnZsX2xidykgPDwgLyogNCBiaXQ9MiwgOC1iaXQgPSAxICovCiAJCQkgLyogdXNlIDw8IHRvIG11bHQgYnk6IHNpbmdsZSBzY2FuID0gMSwgZHVhbCBzY2FuID0gMiAqLwpAQCAtOTU1LDcgKzk1NSw3IEBACiAJZGVidWcgKCJzZXRjb2xyZWc6IHJlZyAlMmQgQCAlcDogUj0lMDJYIEc9JTAyWCBCPSUwMlggPT4gJTAyWCUwMlhcbiIsCiAJCXJlZ25vLCAmKGNwLT5sY2RfY21hcFtyZWdubyAqIDJdKSwKIAkJcmVkLCBncmVlbiwgYmx1ZSwKLSAgICAgICAgICAgICAgICBjcC0+bGNkX2NtYXBbIHJlZ25vICogMiBdLCBjcC0+bGNkX2NtYXBbKHJlZ25vICogMikgKyAxXSk7CisJCWNwLT5sY2RfY21hcFsgcmVnbm8gKiAyIF0sIGNwLT5sY2RfY21hcFsocmVnbm8gKiAyKSArIDFdKTsKIH0KICNlbmRpZgkvKiBMQ0RfQ09MT1I4ICovCiAKQEAgLTEwMzEsOSArMTAzMSw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTFdNT04pCiAgICAgewl1Y2hhciBjID0gcGljX3JlYWQgKDB4NjApOwogI2lmIGRlZmluZWQoQ09ORklHX0xDRCkgJiYgZGVmaW5lZChDT05GSUdfTFdNT04pICYmIChDT05GSUdfUE9TVCAmIENGR19QT1NUX1NZU01PTikKLSAgICAJYyB8PSAweDA0OwkvKiBDaGlwIEVuYWJsZSBMQ0QgKi8KKwljIHw9IDB4MDQ7CS8qIENoaXAgRW5hYmxlIExDRCAqLwogI2Vsc2UKLSAgICAJYyB8PSAweDA3OwkvKiBQb3dlciBvbiBDQ0ZMLCBFbmFibGUgQ0NGTCwgQ2hpcCBFbmFibGUgTENEICovCisJYyB8PSAweDA3OwkvKiBQb3dlciBvbiBDQ0ZMLCBFbmFibGUgQ0NGTCwgQ2hpcCBFbmFibGUgTENEICovCiAjZW5kaWYKIAlwaWNfd3JpdGUgKDB4NjAsIGMpOwogICAgIH0KQEAgLTEwNjksNyArMTA2OSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19MV01PTikKICAgICB7CXVjaGFyIGMgPSBwaWNfcmVhZCAoMHg2MCk7Ci0gICAgCWMgJj0gfjB4MDc7CS8qIFBvd2VyIG9mZiBDQ0ZMLCBEaXNhYmxlIENDRkwsIENoaXAgRGlzYWJsZSBMQ0QgKi8KKwljICY9IH4weDA3OwkvKiBQb3dlciBvZmYgQ0NGTCwgRGlzYWJsZSBDQ0ZMLCBDaGlwIERpc2FibGUgTENEICovCiAJcGljX3dyaXRlICgweDYwLCBjKTsKICAgICB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19SMzYwTVBJKQpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zY2MuYyBiL2NwdS9tcGM4eHgvc2NjLmMKaW5kZXggZjk4YWFkNC4uZDcxMWE2MyAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zY2MuYworKysgYi9jcHUvbXBjOHh4L3NjYy5jCkBAIC0xNjgsMTAgKzE2OCwxMCBAQAogCiAJLyogd3JhcCBhcm91bmQgYnVmZmVyIGluZGV4IHdoZW4gbmVjZXNzYXJ5ICovCiAJaWYgKChyeElkeCArIDEpID49IFBLVEJVRlNSWCkgewotICAgICAgICAgICBydHgtPnJ4YmRbUEtUQlVGU1JYIC0gMV0uY2JkX3NjID0gKEJEX0VORVRfUlhfV1JBUCB8IEJEX0VORVRfUlhfRU1QVFkpOworCSAgIHJ0eC0+cnhiZFtQS1RCVUZTUlggLSAxXS5jYmRfc2MgPSAoQkRfRU5FVF9SWF9XUkFQIHwgQkRfRU5FVF9SWF9FTVBUWSk7CiAJICAgcnhJZHggPSAwOwogCX0gZWxzZSB7Ci0gICAgICAgICAgIHJ0eC0+cnhiZFtyeElkeF0uY2JkX3NjID0gQkRfRU5FVF9SWF9FTVBUWTsKKwkgICBydHgtPnJ4YmRbcnhJZHhdLmNiZF9zYyA9IEJEX0VORVRfUlhfRU1QVFk7CiAJICAgcnhJZHgrKzsKIAl9CiAgICB9CkBAIC0yMTIsNyArMjEyLDcgQEAKIAogI2lmZGVmIENGR19BTExPQ19EUFJBTQogICAgIHJ0eCA9IChSVFhCRCAqKSAoaW1tci0+aW1fY3BtLmNwX2RwbWVtICsKLSAgICAJCSAgICAgZHByYW1fYWxsb2NfYWxpZ24oc2l6ZW9mKFJUWEJEKSwgOCkpOworCQkgICAgIGRwcmFtX2FsbG9jX2FsaWduKHNpemVvZihSVFhCRCksIDgpKTsKICNlbHNlCiAgICAgcnR4ID0gKFJUWEJEICopIChpbW1yLT5pbV9jcG0uY3BfZHBtZW0gKyBDUE1fU0NDX0JBU0UpOwogI2VuZGlmCS8qIDAgKi8KQEAgLTQwNiw3ICs0MDYsNyBAQAogICAgICAqLwogCiAgICAgaW1tci0+aW1fY3BtLmNwX3NjY1tTQ0NfRU5FVF0uc2NjX2dzbXJsID0gKAlTQ0NfR1NNUkxfVENJCSB8CVwKLSAgICAJCQkJCQlTQ0NfR1NNUkxfVFBMXzQ4IHwJXAorCQkJCQkJU0NDX0dTTVJMX1RQTF80OCB8CVwKIAkJCQkJCVNDQ19HU01STF9UUFBfMTAgfAlcCiAJCQkJCQlTQ0NfR1NNUkxfTU9ERV9FTkVUKTsKIApAQCAtNDcxLDcgKzQ3MSw3IEBACiAgICAgICogUG9ydCBCIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgUEhZLE1DNjgxNjAuCiAgICAgICovCiAgICAgaW1tci0+aW1fY3BtLmNwX3BiZGlyIHw9Ci0gICAgICAgIChQQl9FTkVUX0VUSExPT1AgfCBQQl9FTkVUX1RQRkxETCB8IFBCX0VORVRfVFBTUUVMKTsKKwkoUEJfRU5FVF9FVEhMT09QIHwgUEJfRU5FVF9UUEZMREwgfCBQQl9FTkVUX1RQU1FFTCk7CiAKICAgICBpbW1yLT5pbV9jcG0uY3BfcGJkYXQgfD0gUEJfRU5FVF9UUEZMREw7CiAgICAgaW1tci0+aW1fY3BtLmNwX3BiZGF0ICY9IH4oUEJfRU5FVF9FVEhMT09QIHwgUEJfRU5FVF9UUFNRRUwpOwpAQCAtNTMyLDcgKzUzMiw2IEBACiB9CiAKIAotCiBzdGF0aWMgdm9pZCBzY2NfaGFsdChzdHJ1Y3QgZXRoX2RldmljZSogZGV2KQogewogICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zZXJpYWwuYyBiL2NwdS9tcGM4eHgvc2VyaWFsLmMKaW5kZXggNGU1YjQwOC4uODFjMDI3OSAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zZXJpYWwuYworKysgYi9jcHUvbXBjOHh4L3NlcmlhbC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAKIGludCBzZXJpYWxfaW5pdCAodm9pZCkKIHsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzbWNfdCAqc3A7CiAJdm9sYXRpbGUgc21jX3VhcnRfdCAqdXA7CiAJdm9sYXRpbGUgY2JkX3QgKnRiZGYsICpyYmRmOwpAQCAtMjMxLDcgKzIzMSw3IEBACiB7CiAJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdCAqY3AgPSAmKGltLT5pbV9jcG0pOwogCiAJLyogU2V0IHVwIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yLgpAQCAtMjY2LDcgKzI2Niw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSp0YmRmOwogCXZvbGF0aWxlIGNoYXIJCSpidWY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOwogCiAjaWZkZWYgQ09ORklHX01PREVNX1NVUFBPUlQKQEAgLTMwNSw3ICszMDUsNyBAQAogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpidWY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOwogCXVuc2lnbmVkIGNoYXIJCWM7CiAKQEAgLTMzMSw3ICszMzEsNyBAQAogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CiAKIAl1cCA9IChzbWNfdWFydF90ICopJmNwbXAtPmNwX2RwYXJhbVtQUk9GRl9TTUNdOwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAKIGludCBzZXJpYWxfaW5pdCAodm9pZCkKIHsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzY2NfdCAqc3A7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdCAqdXA7CiAJdm9sYXRpbGUgY2JkX3QgKnRiZGYsICpyYmRmOwpAQCAtNTA4LDcgKzUwOCw3IEBACiB7CiAJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdCAqY3AgPSAmKGltLT5pbV9jcG0pOwogCiAJLyogU2V0IHVwIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yLgpAQCAtNTMwLDcgKzUzMCw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSp0YmRmOwogCXZvbGF0aWxlIGNoYXIJCSpidWY7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOwogCiAJaWYgKGMgPT0gJ1xuJykKQEAgLTU2Miw3ICs1NjIsNyBAQAogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpidWY7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOwogCXVuc2lnbmVkIGNoYXIJCWM7CiAKQEAgLTU4OCw3ICs1ODgsNyBAQAogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CiAKIAl1cCA9IChzY2NfdWFydF90ICopJmNwbXAtPmNwX2RwYXJhbVtQUk9GRl9TQ0NdOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zcGVlZC5jIGIvY3B1L21wYzh4eC9zcGVlZC5jCmluZGV4IGVmMzIzNzEuLmUxYzM0MDAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvc3BlZWQuYworKysgYi9jcHUvbXBjOHh4L3NwZWVkLmMKQEAgLTExNCwxOCArMTE0LDE4IEBACiAJLyoKIAkgKiBQSVQgc2V0dXA6CiAJICoKLSAgICAgICAgICogV2Ugd2FudCB0byB0aW1lIGZvciBTUEVFRF9QSVRDX0NPVU5UUyBjb3VudHMgKG9mIDgxOTIgSHopLAotICAgICAgICAgKiBzbyB0aGUgY291bnQgdmFsdWUgd291bGQgYmUgU1BFRURfUElUQ19DT1VOVFMgLSAxLgotICAgICAgICAgKiBCdXQgdGhlcmUgd291bGQgYmUgYW4gdW5jZXJ0YWludHkgaW4gdGhlIHN0YXJ0IHRpbWUgb2YgMS80Ci0gICAgICAgICAqIGNvdW50IHNpbmNlIHdoZW4gd2UgZW5hYmxlIHRoZSBQSVQgdGhlIGNvdW50IGlzIG5vdAotICAgICAgICAgKiBzeW5jaHJvbml6ZWQgdG8gdGhlIDMyNzY4IEh6IG9zY2lsbGF0b3IuIFRoZSB0cmljayBoZXJlIGlzCi0gICAgICAgICAqIHRvIHN0YXJ0IHRoZSBjb3VudCBoaWdoZXIgYW5kIHdhaXQgdW50aWwgdGhlIFBJVCBjb3VudAotICAgICAgICAgKiBjaGFuZ2VzIHRvIHRoZSByZXF1aXJlZCB2YWx1ZSBiZWZvcmUgc3RhcnRpbmcgdGltZXIgMi4KKwkgKiBXZSB3YW50IHRvIHRpbWUgZm9yIFNQRUVEX1BJVENfQ09VTlRTIGNvdW50cyAob2YgODE5MiBIeiksCisJICogc28gdGhlIGNvdW50IHZhbHVlIHdvdWxkIGJlIFNQRUVEX1BJVENfQ09VTlRTIC0gMS4KKwkgKiBCdXQgdGhlcmUgd291bGQgYmUgYW4gdW5jZXJ0YWludHkgaW4gdGhlIHN0YXJ0IHRpbWUgb2YgMS80CisJICogY291bnQgc2luY2Ugd2hlbiB3ZSBlbmFibGUgdGhlIFBJVCB0aGUgY291bnQgaXMgbm90CisJICogc3luY2hyb25pemVkIHRvIHRoZSAzMjc2OCBIeiBvc2NpbGxhdG9yLiBUaGUgdHJpY2sgaGVyZSBpcworCSAqIHRvIHN0YXJ0IHRoZSBjb3VudCBoaWdoZXIgYW5kIHdhaXQgdW50aWwgdGhlIFBJVCBjb3VudAorCSAqIGNoYW5nZXMgdG8gdGhlIHJlcXVpcmVkIHZhbHVlIGJlZm9yZSBzdGFydGluZyB0aW1lciAyLgogCSAqCi0gICAgICAgICAqIE9uZSBjb3VudCBoaWdoIHNob3VsZCBiZSBlbm91Z2gsIGJ1dCBvY2Nhc2lvbmFsbHkgdGhlIHN0YXJ0Ci0gICAgICAgICAqIGlzIG9mZiBieSAxIG9yIDIgY291bnRzIG9mIDMyNzY4IEh6LiBXaXRoIHRoZSBzdGFydCB2YWx1ZQotICAgICAgICAgKiBzZXQgdHdvIGNvdW50cyBoaWdoIGl0IHNlZW1zIHZlcnkgcmVsaWFibGUuCi0gICAgICAgICAqLworCSAqIE9uZSBjb3VudCBoaWdoIHNob3VsZCBiZSBlbm91Z2gsIGJ1dCBvY2Nhc2lvbmFsbHkgdGhlIHN0YXJ0CisJICogaXMgb2ZmIGJ5IDEgb3IgMiBjb3VudHMgb2YgMzI3NjggSHouIFdpdGggdGhlIHN0YXJ0IHZhbHVlCisJICogc2V0IHR3byBjb3VudHMgaGlnaCBpdCBzZWVtcyB2ZXJ5IHJlbGlhYmxlLgorCSAqLwogCiAJaW1tci0+aW1fc2l0ay5zaXRrX3BpdGNrID0gS0FQV1JfS0VZOwkvKiBQSVQgaW5pdGlhbGl6YXRpb24gKi8KIAlpbW1yLT5pbV9zaXQuc2l0X3BpdGMgPSBTUEVFRF9QSVRDX0lOSVQ7CkBAIC0xNjMsMTAgKzE2MywxMCBAQAogI2Vsc2UgLyogQ09ORklHXzh4eF9HQ0xLX0ZSRVEgKi8KIAogCS8qCi0gICAgICAgICAqIElmIGZvciBzb21lIHJlYXNvbiBtZWFzdXJpbmcgdGhlIGdjbGsgZnJlcXVlbmN5IHdvbid0Ci0gICAgICAgICAqIHdvcmssIHdlIHJldHVybiB0aGUgaGFyZHdpcmVkIHZhbHVlLgotICAgICAgICAgKiAoRm9yIGV4YW1wbGUsIHRoZSBjb2dlbnQgQ01BMjg2LTYwIENQVSBtb2R1bGUgaGFzIG5vCi0gICAgICAgICAqIHNlcGFyYXRlIG9zY2lsbGF0b3IgZm9yIFBJVFJUQ0xLKQorCSAqIElmIGZvciBzb21lIHJlYXNvbiBtZWFzdXJpbmcgdGhlIGdjbGsgZnJlcXVlbmN5IHdvbid0CisJICogd29yaywgd2UgcmV0dXJuIHRoZSBoYXJkd2lyZWQgdmFsdWUuCisJICogKEZvciBleGFtcGxlLCB0aGUgY29nZW50IENNQTI4Ni02MCBDUFUgbW9kdWxlIGhhcyBubworCSAqIHNlcGFyYXRlIG9zY2lsbGF0b3IgZm9yIFBJVFJUQ0xLKQogCSAqLwogCiAJZ2QtPmNwdV9jbGsgPSBDT05GSUdfOHh4X0dDTEtfRlJFUTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvc3BpLmMgYi9jcHUvbXBjOHh4L3NwaS5jCmluZGV4IGYwNGQ4OGUuLjE2YjNmM2EgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvc3BpLmMKKysrIGIvY3B1L21wYzh4eC9zcGkuYwpAQCAtMjIzLDEyICsyMjMsMTIgQEAKIAogCS8qKioqKioqKioqKklNUE9SVEFOVCoqKioqKioqKioqKioqKioqKi8KIAotICAgICAgICAvKgotICAgICAgICAgKiBTZXR0aW5nIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9yIHBvaW50ZXJzCi0gICAgICAgICAqIGluaXRpYWxseSB0byByYmFzZSBhbmQgdGJhc2UuIE9ubHkgdGhlIG1pY3JvY29kZSBwYXRjaGVzCi0gICAgICAgICAqIGRvY3VtZW50YXRpb24gdGFsa3MgYWJvdXQgaW5pdGlhbGl6aW5nIHRoaXMgcG9pbnRlci4gVGhpcwotICAgICAgICAgKiBpcyBtaXNzaW5nIGZyb20gdGhlIHNhbXBsZSBJMkMgZHJpdmVyLiBJZiB5b3UgZG9udAotICAgICAgICAgKiBpbml0aWFsaXplIHRoZXNlIHBvaW50ZXJzLCB0aGUga2VybmVsIGhhbmdzLgorCS8qCisJICogU2V0dGluZyB0cmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXIgZGVzY3JpcHRvciBwb2ludGVycworCSAqIGluaXRpYWxseSB0byByYmFzZSBhbmQgdGJhc2UuIE9ubHkgdGhlIG1pY3JvY29kZSBwYXRjaGVzCisJICogZG9jdW1lbnRhdGlvbiB0YWxrcyBhYm91dCBpbml0aWFsaXppbmcgdGhpcyBwb2ludGVyLiBUaGlzCisJICogaXMgbWlzc2luZyBmcm9tIHRoZSBzYW1wbGUgSTJDIGRyaXZlci4gSWYgeW91IGRvbnQKKwkgKiBpbml0aWFsaXplIHRoZXNlIHBvaW50ZXJzLCB0aGUga2VybmVsIGhhbmdzLgogCSAqLwogCXNwaS0+c3BpX3JicHRyID0gc3BpLT5zcGlfcmJhc2U7CiAJc3BpLT5zcGlfdGJwdHIgPSBzcGktPnNwaV90YmFzZTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvc3RhcnQuUyBiL2NwdS9tcGM4eHgvc3RhcnQuUwppbmRleCAzY2M0ZWNiLi44MWE0ZGMwIDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L3N0YXJ0LlMKKysrIGIvY3B1L21wYzh4eC9zdGFydC5TCkBAIC0yMDksNyArMjA5LDYgQEAKIAlibAlib2FyZF9pbml0X2YJLyogcnVuIDFzdCBwYXJ0IG9mIGJvYXJkIGluaXQgY29kZSAoZnJvbSBGbGFzaCkgKi8KIAogCi0KIAkuZ2xvYmwJX3N0YXJ0X29mX3ZlY3RvcnMKIF9zdGFydF9vZl92ZWN0b3JzOgogCkBAIC02NTAsOCArNjQ5LDggQEAKIAkvKgogCSAqIFJlbG9jYXRpb24gRnVuY3Rpb24sIHIxNCBwb2ludCB0byBnb3QyKzB4ODAwMAogCSAqCi0gICAgICAgICAqIEFkanVzdCBnb3QyIHBvaW50ZXJzLCBubyBuZWVkIHRvIGNoZWNrIGZvciAwLCB0aGlzIGNvZGUKLSAgICAgICAgICogYWxyZWFkeSBwdXRzIGEgZmV3IGVudHJpZXMgaW4gdGhlIHRhYmxlLgorCSAqIEFkanVzdCBnb3QyIHBvaW50ZXJzLCBubyBuZWVkIHRvIGNoZWNrIGZvciAwLCB0aGlzIGNvZGUKKwkgKiBhbHJlYWR5IHB1dHMgYSBmZXcgZW50cmllcyBpbiB0aGUgdGFibGUuCiAJICovCiAJbGkJcjAsX19nb3QyX2VudHJpZXNAc2VjdG9mZkBsCiAJbGEJcjMsR09UKF9HT1QyX1RBQkxFXykKQEAgLTY2NSw3ICs2NjQsNyBAQAogCWJkbnoJMWIKIAogCS8qCi0gICAgICAgICAqIE5vdyBhZGp1c3QgdGhlIGZpeHVwcyBhbmQgdGhlIHBvaW50ZXJzIHRvIHRoZSBmaXh1cHMKKwkgKiBOb3cgYWRqdXN0IHRoZSBmaXh1cHMgYW5kIHRoZSBwb2ludGVycyB0byB0aGUgZml4dXBzCiAJICogaW4gY2FzZSB3ZSBuZWVkIHRvIG1vdmUgb3Vyc2VsdmVzIGFnYWluLgogCSAqLwogMjoJbGkJcjAsX19maXh1cF9lbnRyaWVzQHNlY3RvZmZAbApkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC91cGF0Y2guYyBiL2NwdS9tcGM4eHgvdXBhdGNoLmMKaW5kZXggOTliZGY1My4uZWNjZmY2NCAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC91cGF0Y2guYworKysgYi9jcHUvbXBjOHh4L3VwYXRjaC5jCkBAIC0zMyw4ICszMyw4IEBACiAjZW5kaWYKIAogCS8qCi0gICAgICAgICAqIEVuYWJsZSBEUFJBTSBtaWNyb2NvZGUgdG8gZXhlY3V0ZSBmcm9tIHRoZSBmaXJzdCA1MTIgYnl0ZXMKLSAgICAgICAgICogYW5kIGEgMjU2IGJ5dGUgZXh0ZW5zaW9uIG9mIERQUkFNLgorCSAqIEVuYWJsZSBEUFJBTSBtaWNyb2NvZGUgdG8gZXhlY3V0ZSBmcm9tIHRoZSBmaXJzdCA1MTIgYnl0ZXMKKwkgKiBhbmQgYSAyNTYgYnl0ZSBleHRlbnNpb24gb2YgRFBSQU0uCiAJICovCiAJaW1tci0+aW1fY3BtLmNwX3JjY3IgfD0gMHgwMDAxOwogfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC92aWRlby5jIGIvY3B1L21wYzh4eC92aWRlby5jCmluZGV4IDlkYjY5ZTEuLjQwZTY1ZDMgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvdmlkZW8uYworKysgYi9jcHUvbXBjOHh4L3ZpZGVvLmMKQEAgLTg1NSwxMyArODU1LDEzIEBACiAJZGVidWcgKCJbVklERU8gQ1RSTF0gQmxhbmtpbmcgdGhlIHNjcmVlbi4uLlxuIik7CiAJdmlkZW9fZmlsbCAoVklERU9fQkdfQ09MKTsKIAotICAgICAgICAvKgotICAgICAgICAgKiBUdXJucyBvbiBBZ2dyZXNzaXZlIE1vZGUuIE5vcm1hbGx5LCB0dXJuaW5nIG9uIHRoZSBjYWNoZXMKLSAgICAgICAgICogd2lsbCBjYXVzZSB0aGUgc2NyZWVuIHRvIGZsaWNrZXIgd2hlbiB0aGUgY2FjaGVzIHRyeSB0bwotICAgICAgICAgKiBmaWxsLiBUaGlzIGdpdmVzIHRoZSBGSUZPJ3MgZm9yIHRoZSBWaWRlbyBDb250cm9sbGVyCi0gICAgICAgICAqIGhpZ2hlciBwcmlvcml0eSBhbmQgcHJldmVudHMgZmxpY2tlcmluZyBiZWNhdXNlIG9mCi0gICAgICAgICAqIHVuZGVycnVuLiBUaGlzIG1heSBzdGlsbCBiZSBhbiBpc3N1ZSB3aGVuIHVzaW5nIEZMQVNILAotICAgICAgICAgKiBzaW5jZSBhY2Nlc3NpbmcgZGF0YSBmcm9tIEZsYXNoIGlzIHNvIHNsb3cuCisJLyoKKwkgKiBUdXJucyBvbiBBZ2dyZXNzaXZlIE1vZGUuIE5vcm1hbGx5LCB0dXJuaW5nIG9uIHRoZSBjYWNoZXMKKwkgKiB3aWxsIGNhdXNlIHRoZSBzY3JlZW4gdG8gZmxpY2tlciB3aGVuIHRoZSBjYWNoZXMgdHJ5IHRvCisJICogZmlsbC4gVGhpcyBnaXZlcyB0aGUgRklGTydzIGZvciB0aGUgVmlkZW8gQ29udHJvbGxlcgorCSAqIGhpZ2hlciBwcmlvcml0eSBhbmQgcHJldmVudHMgZmxpY2tlcmluZyBiZWNhdXNlIG9mCisJICogdW5kZXJydW4uIFRoaXMgbWF5IHN0aWxsIGJlIGFuIGlzc3VlIHdoZW4gdXNpbmcgRkxBU0gsCisJICogc2luY2UgYWNjZXNzaW5nIGRhdGEgZnJvbSBGbGFzaCBpcyBzbyBzbG93LgogCSAqLwogCWRlYnVnICgiW1ZJREVPIENUUkxdIFR1cm5pbmcgb24gYWdncmVzc2l2ZSBtb2RlLi4uXG4iKTsKIAlpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2RjciA9IDB4NDA7CkBAIC0xMjUyLDYgKzEyNTIsNCBAQAogCXJldHVybiAoYWRkcik7CiB9CiAKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNDA1Z3BfZW5ldC5jIGIvY3B1L3BwYzR4eC80MDVncF9lbmV0LmMKaW5kZXggYjdiMDNlZC4uOTYzOWM5MiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80MDVncF9lbmV0LmMKKysrIGIvY3B1L3BwYzR4eC80MDVncF9lbmV0LmMKQEAgLTIxOCwxMCArMjE4LDEwIEBACiAJLyogQVMuSEFSTk9JUwogCSAqIFdlIHNob3VsZCBoYXZlIDoKIAkgKiBwYWNrZXRIYW5kbGVkIDw9ICBwYWNrZXRSZWNlaXZlZCA8PSBwYWNrZXRIYW5kbGVkK1BLVEJVRlNSWAotICAgICAgICAgKiBJbiB0aGUgbW9zdCBjYXNlcyBwYWNrZXRIYW5kbGVkID0gcGFja2V0UmVjZWl2ZWQsIGJ1dCBpdAotICAgICAgICAgKiBpcyBwb3NzaWJsZSB0aGF0IG5ldyBwYWNrZXRzICh3aXRob3V0IHJlbGF0aW9uc2hpcCB3aXRoCi0gICAgICAgICAqIGN1cnJlbnQgdHJhbnNmZXIpIGhhdmUgZ290IHRoZSB0aW1lIHRvIGFycml2ZWQgYmVmb3JlCi0gICAgICAgICAqIG5ldGxvb3AgY2FsbHMgZXRoX2hhbHQKKwkgKiBJbiB0aGUgbW9zdCBjYXNlcyBwYWNrZXRIYW5kbGVkID0gcGFja2V0UmVjZWl2ZWQsIGJ1dCBpdAorCSAqIGlzIHBvc3NpYmxlIHRoYXQgbmV3IHBhY2tldHMgKHdpdGhvdXQgcmVsYXRpb25zaGlwIHdpdGgKKwkgKiBjdXJyZW50IHRyYW5zZmVyKSBoYXZlIGdvdCB0aGUgdGltZSB0byBhcnJpdmVkIGJlZm9yZQorCSAqIG5ldGxvb3AgY2FsbHMgZXRoX2hhbHQKIAkgKi8KIAlwcmludGYgKCJBYm91dCBwcmVjZWVkaW5nIHRyYW5zZmVyOlxuIgogCQkiLSBTZW50IHBhY2tldCBudW1iZXIgJWRcbiIKQEAgLTI1MSw4ICsyNTEsOCBAQAogCXR4X3VfaW5kZXggPSAwOwkJCS8qIFRyYW5zbWl0IFVzZXIgUXVldWUgSW5kZXggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKLSAgICAgICAgLyogc2V0IFJNSUkgbW9kZSAqLwotICAgICAgICBvdXQzMiAoWk1JSV9GRVIsIFpNSUlfUk1JSSB8IFpNSUlfTURJMCk7CisJLyogc2V0IFJNSUkgbW9kZSAqLworCW91dDMyIChaTUlJX0ZFUiwgWk1JSV9STUlJIHwgWk1JSV9NREkwKTsKICNlbmRpZiAvKiBDT05GSUdfNDQwICovCiAKIAkvKiBFTUFDIFJFU0VUICovCkBAIC00MjYsOCArNDI2LDggQEAKIAkvKiBzZXQgcmVjZWl2ZSAgbG93L2hpZ2ggd2F0ZXIgbWFyayByZWdpc3RlciAqLwogI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKIAkvKiA0NDBHUCBoYXMgYSA2NCBieXRlIGJ1cnN0IGxlbmd0aCAqLwotICAgICAgICBvdXQzMiAoRU1BQ19SWF9ISV9MT19XTUFSSywgMHg4MDAwOTAwMCk7Ci0gICAgICAgIG91dDMyIChFTUFDX1RYTTEsICAgICAgICAgICAweGY4NjQwMDAwKTsKKwlvdXQzMiAoRU1BQ19SWF9ISV9MT19XTUFSSywgMHg4MDAwOTAwMCk7CisJb3V0MzIgKEVNQUNfVFhNMSwgICAgICAgICAgIDB4Zjg2NDAwMDApOwogI2Vsc2UgLyogQ09ORklHXzQ0MCAqLwogCS8qIDQwNXMgaGF2ZSBhIDE2IGJ5dGUgYnVyc3QgbGVuZ3RoICovCiAJb3V0MzIgKEVNQUNfUlhfSElfTE9fV01BUkssIDB4MGYwMDIwMDApOwpAQCAtNTMwLDggKzUzMCw4IEBACiAJCS8qIGxvb3AgdW50aWwgZWl0aGVyIFRJTlQgdHVybnMgb24gb3IgMyBzZWNvbmRzIGVsYXBzZSAqLwogCQlpZiAoKHRlbXBfdHhtMCAmIEVNQUNfVFhNMF9HTlAwKSAhPSAwKSB7CiAJCQkvKiB0cmFuc21pdCBpcyBkb25lLCBzbyBub3cgY2hlY2sgZm9yIGVycm9ycwotICAgICAgICAgICAgICAgICAgICAgICAgICogSWYgdGhlcmUgaXMgYW4gZXJyb3IsIGFuIGludGVycnVwdCBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGhhcHBlbiB3aGVuIHdlIHJldHVybgorCQkJICogSWYgdGhlcmUgaXMgYW4gZXJyb3IsIGFuIGludGVycnVwdCBzaG91bGQKKwkJCSAqIGhhcHBlbiB3aGVuIHdlIHJldHVybgogCQkJICovCiAJCQl0aW1lX25vdyA9IGdldF90aW1lciAoMCk7CiAJCQlpZiAoKHRpbWVfbm93IC0gdGltZV9zdGFydCkgPiAzMDAwKSB7CkBAIC01NjgsMTYgKzU2OCwxNiBAQAogCQlteV91aWMxbXNyID0gbWZkY3IgKHVpYzFtc3IpOwogCiAJCWlmICghKG15X3VpYzBtc3IgJiBVSUNfTVJFKQotICAgICAgICAgICAgICAgICAgICAmJiAhKG15X3VpYzFtc3IgJiAoVUlDX0VUSDAgfCBVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBmb3IgdXMgKi8KKwkJICAgICYmICEobXlfdWljMW1zciAmIChVSUNfRVRIMCB8IFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpKSkgeworCQkJLyogbm90IGZvciB1cyAqLwogCQkJcmV0dXJuIChyYyk7CiAJCX0KIAogCQkvKiBnZXQgYW5kIGNsZWFyIGNvbnRyb2xsZXIgc3RhdHVzIGludGVycnVwdHMgKi8KIAkJLyogbG9vayBhdCBNYWwgYW5kIEVNQUMgaW50ZXJydXB0cyAqLwogCQlpZiAoKG15X3VpYzBtc3IgJiBVSUNfTVJFKQotICAgICAgICAgICAgICAgICAgICB8fCAobXlfdWljMW1zciAmIChVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBNQUwgaW50ZXJydXB0ICovCisJCSAgICB8fCAobXlfdWljMW1zciAmIChVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkpIHsKKwkJCS8qIHdlIGhhdmUgYSBNQUwgaW50ZXJydXB0ICovCiAJCQltYWxfaXNyID0gbWZkY3IgKG1hbGVzcik7CiAJCQkvKiBsb29rIGZvciBtYWwgZXJyb3IgKi8KIAkJCWlmIChteV91aWMxbXNyICYgKFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpKSB7CkBAIC01OTUsNyArNTk1LDcgQEAKIAkJCX0KIAkJfQogCQlpZiAoKGVtYWNfaWVyICYgZW1hY19pc3IpCi0gICAgICAgICAgICAgICAgICAgIHx8IChteV91aWMxbXNyICYgKFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpKSkgeworCQkgICAgfHwgKG15X3VpYzFtc3IgJiAoVUlDX01TIHwgVUlDX01UREUgfCBVSUNfTVJERSkpKSB7CiAJCQltdGRjciAodWljMHNyLCBVSUNfTVJFKTsgLyogQ2xlYXIgKi8KIAkJCW10ZGNyICh1aWMxc3IsIFVJQ19FVEgwIHwgVUlDX01TIHwgVUlDX01UREUgfCBVSUNfTVJERSk7IC8qIENsZWFyICovCiAJCQlyZXR1cm4gKHJjKTsJCS8qIHdlIGhhZCBlcnJvcnMgc28gZ2V0IG91dCAqLwpAQCAtNjE0LDggKzYxNCw4IEBACiAJCQkJcmMgPSAwOwogCQkJfQogCQl9Ci0gICAgICAgICAgICAgICAgbXRkY3IgKHVpYzBzciwgVUlDX01SRSk7IC8qIENsZWFyICovCi0gICAgICAgICAgICAgICAgbXRkY3IgKHVpYzFzciwgVUlDX0VUSDAgfCBVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKTsgLyogQ2xlYXIgKi8KKwkJbXRkY3IgKHVpYzBzciwgVUlDX01SRSk7IC8qIENsZWFyICovCisJCW10ZGNyICh1aWMxc3IsIFVJQ19FVEgwIHwgVUlDX01TIHwgVUlDX01UREUgfCBVSUNfTVJERSk7IC8qIENsZWFyICovCiAJfSB3aGlsZSAoc2VydmljZWQpOwogCiAJcmV0dXJuIChyYyk7CkBAIC04NjYsNDIgKzg2Niw0MiBAQAogI2lmIGRlZmluZWQoQ09ORklHX05FVF9NVUxUSSkKIGludCBwcGNfNHh4X2V0aF9pbml0aWFsaXplKGJkX3QgKmJpcykKIHsKLSAgICAgICAgc3RydWN0IGV0aF9kZXZpY2UgKmRldjsKLSAgICAgICAgaW50ICAgICAgICAgICAgICAgIGV0aF9udW0gPSAwOworCXN0cnVjdCBldGhfZGV2aWNlICpkZXY7CisJaW50ICAgICAgICAgICAgICAgIGV0aF9udW0gPSAwOwogCi0gICAgICAgIGRldiA9IG1hbGxvYyAoc2l6ZW9mICpkZXYpOwotICAgICAgICBpZiAoZGV2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoX19GVU5DVElPTl9fICI6IENhbm5vdCBhbGxvY2F0ZSBldGhfZGV2aWNlXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgfQorCWRldiA9IG1hbGxvYyAoc2l6ZW9mICpkZXYpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGYoX19GVU5DVElPTl9fICI6IENhbm5vdCBhbGxvY2F0ZSBldGhfZGV2aWNlXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfQogCi0gICAgICAgIHNwcmludGYoZGV2LT5uYW1lLCAicHBjXzR4eF9ldGglZCIsIGV0aF9udW0pOwotICAgICAgICBkZXYtPnByaXYgPSAodm9pZCAqKSBldGhfbnVtOwotICAgICAgICBkZXYtPmluaXQgPSBwcGNfNHh4X2V0aF9pbml0OwotICAgICAgICBkZXYtPmhhbHQgPSBwcGNfNHh4X2V0aF9oYWx0OwotICAgICAgICBkZXYtPnNlbmQgPSBwcGNfNHh4X2V0aF9zZW5kOwotICAgICAgICBkZXYtPnJlY3YgPSBwcGNfNHh4X2V0aF9yeDsKKwlzcHJpbnRmKGRldi0+bmFtZSwgInBwY180eHhfZXRoJWQiLCBldGhfbnVtKTsKKwlkZXYtPnByaXYgPSAodm9pZCAqKSBldGhfbnVtOworCWRldi0+aW5pdCA9IHBwY180eHhfZXRoX2luaXQ7CisJZGV2LT5oYWx0ID0gcHBjXzR4eF9ldGhfaGFsdDsKKwlkZXYtPnNlbmQgPSBwcGNfNHh4X2V0aF9zZW5kOworCWRldi0+cmVjdiA9IHBwY180eHhfZXRoX3J4OwogCi0gICAgICAgIGV0aF9yZWdpc3RlciAoZGV2KTsKKwlldGhfcmVnaXN0ZXIgKGRldik7CiB9CiAjZWxzZSAvKiAhZGVmaW5lZChDT05GSUdfTkVUX01VTFRJKSAqLwogdm9pZCBldGhfaGFsdCAodm9pZCkKIHsKLSAgICAgICAgcHBjXzR4eF9ldGhfaGFsdChOVUxMKTsKKwlwcGNfNHh4X2V0aF9oYWx0KE5VTEwpOwogfQogCiBpbnQgZXRoX2luaXQgKGJkX3QgKmJpcykKIHsKLSAgICAgICAgcmV0dXJuIChwcGNfNHh4X2V0aF9pbml0KE5VTEwsIGJpcykpOworCXJldHVybiAocHBjXzR4eF9ldGhfaW5pdChOVUxMLCBiaXMpKTsKIH0KIGludCBldGhfc2VuZCh2b2xhdGlsZSB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgpCiB7Ci0gICAgICAgIHJldHVybiAocHBjXzR4eF9ldGhfc2VuZChOVUxMLCBwYWNrZXQsIGxlbmd0aCkpOworCXJldHVybiAocHBjXzR4eF9ldGhfc2VuZChOVUxMLCBwYWNrZXQsIGxlbmd0aCkpOwogfQogCiBpbnQgZXRoX3J4KHZvaWQpCiB7Ci0gICAgICAgIHJldHVybiAocHBjXzR4eF9ldGhfcngoTlVMTCkpOworCXJldHVybiAocHBjXzR4eF9ldGhfcngoTlVMTCkpOwogfQogI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpICovCiAKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMgYi9jcHUvcHBjNHh4LzQwNWdwX3BjaS5jCmluZGV4IDgyMTQyYTIuLjRiNTQ3MmIgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKKysrIGIvY3B1L3BwYzR4eC80MDVncF9wY2kuYwpAQCAtNzEsNyArNzEsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAjaWYgIWRlZmluZWQoQ09ORklHXzQ0MCkKICNpbmNsdWRlIDw0MDVncF9wY2kuaD4KICNlbmRpZgpAQCAtMTk1LDcgKzE5NCw3IEBACiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAkgKiBQTU0yIGlzIG5vdCB1c2VkLiAgSW5pdGlhbGl6ZSB0aGVtIHRvIHplcm8uCiAJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MzJyKFBNTTJNQSwgICAgKHBtbW1hWzJdJn4weDEpKTsgCisJb3V0MzJyKFBNTTJNQSwgICAgKHBtbW1hWzJdJn4weDEpKTsKIAlvdXQzMnIoUE1NMkxBLCAgICBwbW1sYVsyXSk7CiAJb3V0MzJyKFBNTTJQQ0lMQSwgcG1tcGNpbGFbMl0pOwogCW91dDMycihQTU0yUENJSEEsIHBtbXBjaWhhWzJdKTsKQEAgLTMwMyw3ICszMDIsNyBAQAogCQkJICAgIHN0cnVjdCBwY2lfY29uZmlnX3RhYmxlICplbnRyeSkKIHsKICNpZmRlZiBERUJVRwotICAgICAgICBwcmludGYoIjQwNWdwX3NldHVwX2JyaWRnZVxuIik7CisJcHJpbnRmKCI0MDVncF9zZXR1cF9icmlkZ2VcbiIpOwogI2VuZGlmCiB9CiAKQEAgLTQwOSw5ICs0MDgsOSBAQAogCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgIHN0cmFwID0gbWZkY3IoY3BjMF9zdHJwMSk7CiAgICAgaWYoIChzdHJhcCAmIDB4MDAwNDAwMDApID09IDAgKXsKLSAgICAgICAgcHJpbnRmKCJQQ0k6IENQQzBfU1RSUDFbUElTRV0gbm90IHNldC5cbiIpOwotICAgICAgICBwcmludGYoIlBDSTogQ29uZmlndXJhdGlvbiBhYm9ydGVkLlxuIik7Ci0gICAgICAgIHJldHVybjsKKwlwcmludGYoIlBDSTogQ1BDMF9TVFJQMVtQSVNFXSBub3Qgc2V0LlxuIik7CisJcHJpbnRmKCJQQ0k6IENvbmZpZ3VyYXRpb24gYWJvcnRlZC5cbiIpOworCXJldHVybjsKICAgICB9CiAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtNDM4LDkgKzQzNyw5IEBACiAjaWYgZGVmaW5lZChDRkdfUENJX1BSRV9JTklUKQogICAgIC8qIExldCBib2FyZCBjaGFuZ2UvbW9kaWZ5IGhvc2UgJiBkbyBpbml0aWFsIGNoZWNrcyAqLwogICAgIGlmKCBwY2lfcHJlX2luaXQgKGhvc2UpID09IDAgKXsKLSAgICAgICAgcHJpbnRmKCJQQ0k6IEJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwotICAgICAgICBwcmludGYoIlBDSTogQ29uZmlndXJhdGlvbiBhYm9ydGVkLlxuIik7Ci0gICAgICAgIHJldHVybjsKKwlwcmludGYoIlBDSTogQm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJcHJpbnRmKCJQQ0k6IENvbmZpZ3VyYXRpb24gYWJvcnRlZC5cbiIpOworCXJldHVybjsKICAgICB9CiAjZW5kaWYKIApAQCAtNDg2LDEwICs0ODUsMTAgQEAKIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICBpZiggaXNfcGNpX2hvc3QoaG9zZSkgKXsKICNpZmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVwotICAgICAgICBwcmludGYoIlBDSTogICBCdXMgRGV2IFZlbklkIERldklkIENsYXNzIEludFxuIik7CisJcHJpbnRmKCJQQ0k6ICAgQnVzIERldiBWZW5JZCBEZXZJZCBDbGFzcyBJbnRcbiIpOwogI2VuZGlmCi0gICAgICAgIG91dDE2ciggUENJWDBfQ01ELCBpbjE2ciggUENJWDBfQ01EICkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOwotICAgICAgICBob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2Nhbihob3NlKTsKKwlvdXQxNnIoIFBDSVgwX0NNRCwgaW4xNnIoIFBDSVgwX0NNRCApIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKwlob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2Nhbihob3NlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvYmVkYnVnXzQwNS5jIGIvY3B1L3BwYzR4eC9iZWRidWdfNDA1LmMKaW5kZXggZWFiYzU4My4uMjM3NTJmMyAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9iZWRidWdfNDA1LmMKKysrIGIvY3B1L3BwYzR4eC9iZWRidWdfNDA1LmMKQEAgLTUsOCArNSw3IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0KLSNpbmNsdWRlIDxjbWRfYmVkYnVnLmg+CisjaW5jbHVkZSA8YmVkYnVnL3R5cGUuaD4KICNpbmNsdWRlIDxiZWRidWcvYmVkYnVnLmg+CiAjaW5jbHVkZSA8YmVkYnVnL3JlZ3MuaD4KICNpbmNsdWRlIDxiZWRidWcvcHBjLmg+CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L2NwdS5jIGIvY3B1L3BwYzR4eC9jcHUuYwppbmRleCAwOTVhMGFhLi4xZDdjMGM5IDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L2NwdS5jCisrKyBiL2NwdS9wcGM0eHgvY3B1LmMKQEAgLTE2NSwyMCArMTY1LDIwIEBACiAJcHV0cygiSUJNIFBvd2VyUEMgNDQwIFJldi4gIik7CiAJc3dpdGNoKHB2cikKIAl7Ci0gICAgICAgIGNhc2UgUFZSXzQ0MEdQX1JCOgorCWNhc2UgUFZSXzQ0MEdQX1JCOgogCQlwdXRjKCdCJyk7Ci0gICAgICAgIC8qIFNlZSBlcnJhdGEgMS4xMjogQ0hJUF80ICovCi0gICAgICAgIGlmKCAgICggbWZkY3IoY3BjMF9zeXMwKSAhPSBtZmRjcihjcGMwX3N0cnAwKSApCi0gICAgICAgICAgICB8fCggbWZkY3IoY3BjMF9zeXMxKSAhPSBtZmRjcihjcGMwX3N0cnAxKSApICl7Ci0gICAgICAgICAgICBwdXRzKCJcblx0IENQQzBfU1lTeCBEQ1JzIGNvcnJ1cHRlZC4gUmVzZXR0aW5nIGNoaXAgLi4uXG4iKTsKLSAgICAgICAgICAgIHVkZWxheSggMTAwMCAqIDEwMDAgKTsgLyogR2l2ZSB0aW1lIGZvciBzZXJpYWwgYnVmIHRvIGNsZWFyICovCi0gICAgICAgICAgICBkb19jaGlwX3Jlc2V0KCBtZmRjcihjcGMwX3N0cnAwKSwgbWZkY3IoY3BjMF9zdHJwMSkgKTsKLSAgICAgICAgfQorCS8qIFNlZSBlcnJhdGEgMS4xMjogQ0hJUF80ICovCisJaWYoICAgKCBtZmRjcihjcGMwX3N5czApICE9IG1mZGNyKGNwYzBfc3RycDApICkKKwkgICAgfHwoIG1mZGNyKGNwYzBfc3lzMSkgIT0gbWZkY3IoY3BjMF9zdHJwMSkgKSApeworCSAgICBwdXRzKCJcblx0IENQQzBfU1lTeCBEQ1JzIGNvcnJ1cHRlZC4gUmVzZXR0aW5nIGNoaXAgLi4uXG4iKTsKKwkgICAgdWRlbGF5KCAxMDAwICogMTAwMCApOyAvKiBHaXZlIHRpbWUgZm9yIHNlcmlhbCBidWYgdG8gY2xlYXIgKi8KKwkgICAgZG9fY2hpcF9yZXNldCggbWZkY3IoY3BjMF9zdHJwMCksIG1mZGNyKGNwYzBfc3RycDEpICk7CisJfQogCQlicmVhazsKLSAgICAgICAgY2FzZSBQVlJfNDQwR1BfUkM6CisJY2FzZSBQVlJfNDQwR1BfUkM6CiAJCXB1dGMoJ0MnKTsKIAkJYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6CisJZGVmYXVsdDoKIAkJcHJpbnRmKCJVTktOT1dOIChQVlI9JTA4eCkiLCBwdnIpOwogCQlicmVhazsKIAl9CkBAIC0xOTIsMTEgKzE5MiwxMSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLWludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgYmRfdCAqYmQsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoraW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogSW5pdGlhdGUgc3lzdGVtIHJlc2V0IGluIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgREJDUgotICAgICAgICAgKi8KKwkvKgorCSAqIEluaXRpYXRlIHN5c3RlbSByZXNldCBpbiBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIERCQ1IKKwkgKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGlzICAgMywgMHgzMDAwIiA6OjogInIzIik7CiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQogCV9fYXNtX18gX192b2xhdGlsZV9fKCJtdHNwciAweDEzNCwgMyIpOwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9pMmMuYyBiL2NwdS9wcGM0eHgvaTJjLmMKaW5kZXggNGJmMGJiZC4uMDk5ZDMwYSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9pMmMuYworKysgYi9jcHUvcHBjNHh4L2kyYy5jCkBAIC04NSw3ICs4NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmcmVxT1BCOwogCWludCB2YWwsIGRpdmlzb3I7CiAKLSNpZmRlZiBDRkdfSTJDX0lOSVRfQk9BUkQgICAgICAgIAorI2lmZGVmIENGR19JMkNfSU5JVF9CT0FSRAogCS8qIGNhbGwgYm9hcmQgc3BlY2lmaWMgaTJjIGJ1cyByZXNldCByb3V0aW5lIGJlZm9yZSBhY2Nlc3NpbmcgdGhlICAgKi8KIAkvKiBlbnZpcm9ubWVudCwgd2hpY2ggbWlnaHQgYmUgaW4gYSBjaGlwIG9uIHRoYXQgYnVzLiBGb3IgZGV0YWlscyAgICovCiAJLyogYWJvdXQgdGhpcyBwcm9ibGVtIHNlZSBkb2MvSTJDX0VkZ2VfQ29uZGl0aW9ucy4gICAgICAgICAgICAgICAgICAqLwpAQCAtMTM0LDE5ICsxMzQsMTkgQEAKIAlfX2FzbV9fIHZvbGF0aWxlICgiZWllaW8iKTsKIAogCi0gICAgICAgIHZhbCA9IGluOChJSUNfTURDTlRMKTsKLSAgICAgICAgX19hc21fXyB2b2xhdGlsZSAoImVpZWlvIik7CisJdmFsID0gaW44KElJQ19NRENOVEwpOworCV9fYXNtX18gdm9sYXRpbGUgKCJlaWVpbyIpOwogCi0gICAgICAgIC8qIElnbm9yZSBHZW5lcmFsIENhbGwsIHNsYXZlIHRyYW5zZmVycyBhcmUgaWdub3JlZCwKLSAgICAgICAgICAgZGlzYWJsZSBpbnRlcnJ1cHRzLCBleGl0IHVua25vd24gYnVzIHN0YXRlLCBlbmFibGUgaG9sZAotICAgICAgICAgICBTQ0wKLSAgICAgICAgICAgMTAwa0h6IG5vcm1hbHkgb3IgRmFzdE1vZGUgZm9yIDQwMGtIeiBhbmQgYWJvdmUKLSAgICAgICAgKi8KKwkvKiBJZ25vcmUgR2VuZXJhbCBDYWxsLCBzbGF2ZSB0cmFuc2ZlcnMgYXJlIGlnbm9yZWQsCisJICAgZGlzYWJsZSBpbnRlcnJ1cHRzLCBleGl0IHVua25vd24gYnVzIHN0YXRlLCBlbmFibGUgaG9sZAorCSAgIFNDTAorCSAgIDEwMGtIeiBub3JtYWx5IG9yIEZhc3RNb2RlIGZvciA0MDBrSHogYW5kIGFib3ZlCisJKi8KIAotICAgICAgICB2YWwgfD0gSUlDX01EQ05UTF9FVUJTfElJQ19NRENOVExfSFNDTDsKLSAgICAgICAgaWYoIHNwZWVkID49IDQwMDAwMCApewotICAgICAgICAgICAgICAgIHZhbCB8PSBJSUNfTURDTlRMX0ZTTTsKLSAgICAgICAgfQorCXZhbCB8PSBJSUNfTURDTlRMX0VVQlN8SUlDX01EQ05UTF9IU0NMOworCWlmKCBzcGVlZCA+PSA0MDAwMDAgKXsKKwkJdmFsIHw9IElJQ19NRENOVExfRlNNOworCX0KIAlvdXQ4IChJSUNfTURDTlRMLCB2YWwpOwogCiAJLyogY2xlYXIgY29udHJvbCByZWcgKi8KQEAgLTE4MiwxNTMgKzE4MiwxNTMgQEAKICovCiBzdGF0aWMKIGludCBpMmNfdHJhbnNmZXIodW5zaWduZWQgY2hhciBjbWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaGlwLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJbXSwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhZGRyX2xlbiwKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhW10sCisJCSB1bnNpZ25lZCBjaGFyIGNoaXAsCisJCSB1bnNpZ25lZCBjaGFyIGFkZHJbXSwKKwkJIHVuc2lnbmVkIGNoYXIgYWRkcl9sZW4sCisJCSB1bnNpZ25lZCBjaGFyIGRhdGFbXSwKIAkJIHVuc2lnbmVkIHNob3J0IGRhdGFfbGVuICkKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciogcHRyOwotICAgICAgICBpbnQgcmVhZGluZzsKLSAgICAgICAgaW50IHRyYW4sY250OwotICAgICAgICBpbnQgcmVzdWx0OwotICAgICAgICBpbnQgc3RhdHVzOwotICAgICAgICBpbnQgaTsKLSAgICAgICAgdWNoYXIgY3JlZzsKKwl1bnNpZ25lZCBjaGFyKiBwdHI7CisJaW50IHJlYWRpbmc7CisJaW50IHRyYW4sY250OworCWludCByZXN1bHQ7CisJaW50IHN0YXR1czsKKwlpbnQgaTsKKwl1Y2hhciBjcmVnOwogCi0gICAgICAgIGlmKCBkYXRhID09IDAgfHwgZGF0YV9sZW4gPT0gMCApewotICAgICAgICAgICAgICAgIC8qRG9uJ3Qgc3VwcG9ydCBkYXRhIHRyYW5zZmVyIG9mIG5vIGxlbmd0aCBvciB0byBhZGRyZXNzIDAqLwotICAgICAgICAgICAgICAgIHByaW50ZiggImkyY190cmFuc2ZlcjogYmFkIGNhbGxcbiIgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSUlDX05PSzsKLSAgICAgICAgfQotICAgICAgICBpZiggYWRkciAmJiBhZGRyX2xlbiApewotICAgICAgICAgICAgICAgIHB0ciA9IGFkZHI7Ci0gICAgICAgICAgICAgICAgY250ID0gYWRkcl9sZW47Ci0gICAgICAgICAgICAgICAgcmVhZGluZyA9IDA7Ci0gICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgIHB0ciA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgY250ID0gZGF0YV9sZW47Ci0gICAgICAgICAgICAgICAgcmVhZGluZyA9IGNtZF90eXBlOwotICAgICAgICB9CisJaWYoIGRhdGEgPT0gMCB8fCBkYXRhX2xlbiA9PSAwICl7CisJCS8qRG9uJ3Qgc3VwcG9ydCBkYXRhIHRyYW5zZmVyIG9mIG5vIGxlbmd0aCBvciB0byBhZGRyZXNzIDAqLworCQlwcmludGYoICJpMmNfdHJhbnNmZXI6IGJhZCBjYWxsXG4iICk7CisJCXJldHVybiBJSUNfTk9LOworCX0KKwlpZiggYWRkciAmJiBhZGRyX2xlbiApeworCQlwdHIgPSBhZGRyOworCQljbnQgPSBhZGRyX2xlbjsKKwkJcmVhZGluZyA9IDA7CisJfWVsc2V7CisJCXB0ciA9IGRhdGE7CisJCWNudCA9IGRhdGFfbGVuOworCQlyZWFkaW5nID0gY21kX3R5cGU7CisJfQogCi0gICAgICAgIC8qQ2xlYXIgU3RvcCBDb21wbGV0ZSBCaXQqLwotICAgICAgICBvdXQ4KElJQ19TVFMsSUlDX1NUU19TQ01QKTsKLSAgICAgICAgLyogQ2hlY2sgaW5pdCAqLwotICAgICAgICBpPTEwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgLyogR2V0IHN0YXR1cyAqLwotICAgICAgICAgICAgICAgIHN0YXR1cyA9IGluOChJSUNfU1RTKTsKLSAgICAgICAgICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOwotICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgfSB3aGlsZSAoKHN0YXR1cyAmIElJQ19TVFNfUFQpICYmIChpPjApKTsKKwkvKkNsZWFyIFN0b3AgQ29tcGxldGUgQml0Ki8KKwlvdXQ4KElJQ19TVFMsSUlDX1NUU19TQ01QKTsKKwkvKiBDaGVjayBpbml0ICovCisJaT0xMDsKKwlkbyB7CisJCS8qIEdldCBzdGF0dXMgKi8KKwkJc3RhdHVzID0gaW44KElJQ19TVFMpOworCQlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCQlpLS07CisJfSB3aGlsZSAoKHN0YXR1cyAmIElJQ19TVFNfUFQpICYmIChpPjApKTsKIAotICAgICAgICBpZiAoc3RhdHVzICYgSUlDX1NUU19QVCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IElJQ19OT0tfVE9VVDsKLSAgICAgICAgICAgICAgICByZXR1cm4ocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICAvKmZsdXNoIHRoZSBNYXN0ZXIvU2xhdmUgRGF0YWJ1ZmZlcnMqLwotICAgICAgICBvdXQ4KElJQ19NRENOVEwsICgoaW44KElJQ19NRENOVEwpKXxJSUNfTURDTlRMX0ZNREJ8SUlDX01EQ05UTF9GU0RCKSk7Ci0gICAgICAgIC8qbmVlZCB0byB3YWl0IDQgT1BCIGNsb2Nrcz8gY29kZSBiZWxvdyBzaG91bGQgdGFrZSB0aGF0IGxvbmcqLworCWlmIChzdGF0dXMgJiBJSUNfU1RTX1BUKSB7CisJCXJlc3VsdCA9IElJQ19OT0tfVE9VVDsKKwkJcmV0dXJuKHJlc3VsdCk7CisJfQorCS8qZmx1c2ggdGhlIE1hc3Rlci9TbGF2ZSBEYXRhYnVmZmVycyovCisJb3V0OChJSUNfTURDTlRMLCAoKGluOChJSUNfTURDTlRMKSl8SUlDX01EQ05UTF9GTURCfElJQ19NRENOVExfRlNEQikpOworCS8qbmVlZCB0byB3YWl0IDQgT1BCIGNsb2Nrcz8gY29kZSBiZWxvdyBzaG91bGQgdGFrZSB0aGF0IGxvbmcqLwogCi0gICAgICAgIC8qIDctYml0IGFkcmVzc2luZyAqLwotICAgICAgICBvdXQ4KElJQ19ITUFEUiwwKTsKLSAgICAgICAgb3V0OChJSUNfTE1BRFIsIGNoaXApOwotICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCS8qIDctYml0IGFkcmVzc2luZyAqLworCW91dDgoSUlDX0hNQURSLDApOworCW91dDgoSUlDX0xNQURSLCBjaGlwKTsKKwlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOwogCi0gICAgICAgIHRyYW4gPSAwOwotICAgICAgICByZXN1bHQgPSBJSUNfT0s7Ci0gICAgICAgIGNyZWcgPSAwOworCXRyYW4gPSAwOworCXJlc3VsdCA9IElJQ19PSzsKKwljcmVnID0gMDsKIAotICAgICAgICB3aGlsZSAoIHRyYW4gIT0gY250ICYmIChyZXN1bHQgPT0gSUlDX09LKSkgewotICAgICAgICAgICAgICAgIGludCAgYmMsajsKKwl3aGlsZSAoIHRyYW4gIT0gY250ICYmIChyZXN1bHQgPT0gSUlDX09LKSkgeworCQlpbnQgIGJjLGo7CiAKLSAgICAgICAgICAgICAgICAvKiBDb250cm9sIHJlZ2lzdGVyID0KLSAgICAgICAgICAgICAgICAgICBOb3JtYWwgdHJhbnNmZXIsIDctYml0cyBhZHJlc3NpbmcsIFRyYW5zZmVyIHVwIHRvIGJjIGJ5dGVzLCBOb3JtYWwgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgVHJhbnNmZXIgaXMgYSBzZXF1ZW5jZSBvZiB0cmFuc2ZlcnMKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNyZWcgfD0gSUlDX0NOVExfUFQ7CisJCS8qIENvbnRyb2wgcmVnaXN0ZXIgPQorCQkgICBOb3JtYWwgdHJhbnNmZXIsIDctYml0cyBhZHJlc3NpbmcsIFRyYW5zZmVyIHVwIHRvIGJjIGJ5dGVzLCBOb3JtYWwgc3RhcnQsCisJCSAgIFRyYW5zZmVyIGlzIGEgc2VxdWVuY2Ugb2YgdHJhbnNmZXJzCisJCSovCisJCWNyZWcgfD0gSUlDX0NOVExfUFQ7CiAKLSAgICAgICAgICAgICAgICBiYyA9IChjbnQgLSB0cmFuKSA+IDQgPyA0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNudCAtIHRyYW47Ci0gICAgICAgICAgICAgICAgY3JlZyB8PSAoYmMtMSk8PDQ7Ci0gICAgICAgICAgICAgICAgLyogaWYgdGhlIHJlYWwgY21kIHR5cGUgaXMgd3JpdGUgY29udGludWUgdHJhbnMqLwotICAgICAgICAgICAgICAgIGlmICggKCFjbWRfdHlwZSAmJiAocHRyID09IGFkZHIpKSB8fCAoKHRyYW4rYmMpICE9IGNudCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgY3JlZyB8PSBJSUNfQ05UTF9DSFQ7CisJCWJjID0gKGNudCAtIHRyYW4pID4gNCA/IDQgOgorCQkJY250IC0gdHJhbjsKKwkJY3JlZyB8PSAoYmMtMSk8PDQ7CisJCS8qIGlmIHRoZSByZWFsIGNtZCB0eXBlIGlzIHdyaXRlIGNvbnRpbnVlIHRyYW5zKi8KKwkJaWYgKCAoIWNtZF90eXBlICYmIChwdHIgPT0gYWRkcikpIHx8ICgodHJhbitiYykgIT0gY250KSApCisJCQljcmVnIHw9IElJQ19DTlRMX0NIVDsKIAotICAgICAgICAgICAgICAgIGlmIChyZWFkaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgY3JlZyB8PSBJSUNfQ05UTF9SRUFEOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDsgajxiYzsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0OChJSUNfTURCVUYscHRyW3RyYW4ral0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQ4KElJQ19DTlRMLCBjcmVnICk7Ci0gICAgICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiZWllaW8iKTsKKwkJaWYgKHJlYWRpbmcpCisJCQljcmVnIHw9IElJQ19DTlRMX1JFQUQ7CisJCWVsc2UgeworCQkJZm9yKGo9MDsgajxiYzsgaisrKSB7CisJCQkJLyogU2V0IGJ1ZmZlciAqLworCQkJCW91dDgoSUlDX01EQlVGLHB0clt0cmFuK2pdKTsKKwkJCQlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCQkJfQorCQl9CisJCW91dDgoSUlDX0NOVEwsIGNyZWcgKTsKKwkJX19hc21fXyB2b2xhdGlsZSgiZWllaW8iKTsKIAotICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGlzIGluIHByb2dyZXNzCi0gICAgICAgICAgICAgICAgICAgd2UgaGF2ZSB0byB3YWl0IGZvciB1cHRvIDUgYnl0ZXMgb2YgZGF0YQotICAgICAgICAgICAgICAgICAgIDEgYnl0ZSBjaGlwIGFkZHJlc3Mrci93IGJpdCB0aGVuIGJjIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgb2YgZGF0YS4KLSAgICAgICAgICAgICAgICAgICB1ZGVsYXkoMTApIGlzIDEgYml0IHRpbWUgYXQgMTAwa2h6Ci0gICAgICAgICAgICAgICAgICAgRG91YmxlZCBmb3Igc2xvcC4gMjAgaXMgdG9vIHNtYWxsLgorCQkvKiBUcmFuc2ZlciBpcyBpbiBwcm9ncmVzcworCQkgICB3ZSBoYXZlIHRvIHdhaXQgZm9yIHVwdG8gNSBieXRlcyBvZiBkYXRhCisJCSAgIDEgYnl0ZSBjaGlwIGFkZHJlc3Mrci93IGJpdCB0aGVuIGJjIGJ5dGVzCisJCSAgIG9mIGRhdGEuCisJCSAgIHVkZWxheSgxMCkgaXMgMSBiaXQgdGltZSBhdCAxMDBraHoKKwkJICAgRG91YmxlZCBmb3Igc2xvcC4gMjAgaXMgdG9vIHNtYWxsLgogCQkqLwotICAgICAgICAgICAgICAgIGk9Mio1Kjg7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHN0YXR1cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gaW44KElJQ19TVFMpOwotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiZWllaW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVkZWxheSAoMTApOwotICAgICAgICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKChzdGF0dXMgJiBJSUNfU1RTX1BUKSAmJiAhKHN0YXR1cyAmIElJQ19TVFNfRVJSKQorCQlpPTIqNSo4OworCQlkbyB7CisJCQkvKiBHZXQgc3RhdHVzICovCisJCQlzdGF0dXMgPSBpbjgoSUlDX1NUUyk7CisJCQlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCQkJdWRlbGF5ICgxMCk7CisJCQlpLS07CisJCX0gd2hpbGUgKChzdGF0dXMgJiBJSUNfU1RTX1BUKSAmJiAhKHN0YXR1cyAmIElJQ19TVFNfRVJSKQogCQkJICYmIChpPjApKTsKIAotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiBJSUNfU1RTX0VSUikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSUlDX05PSzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGluOCAoSUlDX0VYVFNUUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBMb3N0IGFyYml0cmF0aW9uPyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIElJQ19FWFRTVFNfTEEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IElJQ19OT0tfTEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNvbXBsZXRlIHRyYW5zZmVyPyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIElJQ19FWFRTVFNfSUNUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJSUNfTk9LX0lDVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGFib3J0ZWQ/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgSUlDX0VYVFNUU19YRlJBKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJSUNfTk9LX1hGUkE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RhdHVzICYgSUlDX1NUU19QVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSUlDX05PS19UT1VUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGlzIHJlYWRpbmcgPT4gZ2V0IGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgIGlmICgocmVhZGluZykgJiYgKHJlc3VsdCA9PSBJSUNfT0spKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmUgdGhlcmUgZGF0YSBpbiBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiBJSUNfU1RTX01EQlMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuIGlmIHdlIGhhdmUgZGF0YSB3ZSBoYXZlIHRvIHdhaXQgNE9QQiBjbG9ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXQgdG8gaGl0IHRoZSBmcm9udCBvZiB0aGUgRklGTywgYWZ0ZXIgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlIGNhbiBqdXN0IHJlYWQuIFdlIHNob3VsZCBjaGVjayBYRkNOVCBoZXJlIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBGSUZPIGlzIGZ1bGwgdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0LgorCQlpZiAoc3RhdHVzICYgSUlDX1NUU19FUlIpIHsKKwkJCXJlc3VsdCA9IElJQ19OT0s7CisJCQlzdGF0dXMgPSBpbjggKElJQ19FWFRTVFMpOworCQkJLyogTG9zdCBhcmJpdHJhdGlvbj8gKi8KKwkJCWlmIChzdGF0dXMgJiBJSUNfRVhUU1RTX0xBKQorCQkJCXJlc3VsdCA9IElJQ19OT0tfTEE7CisJCQkvKiBJbmNvbXBsZXRlIHRyYW5zZmVyPyAqLworCQkJaWYgKHN0YXR1cyAmIElJQ19FWFRTVFNfSUNUKQorCQkJCXJlc3VsdCA9IElJQ19OT0tfSUNUOworCQkJLyogVHJhbnNmZXIgYWJvcnRlZD8gKi8KKwkJCWlmIChzdGF0dXMgJiBJSUNfRVhUU1RTX1hGUkEpCisJCQkJcmVzdWx0ID0gSUlDX05PS19YRlJBOworCQl9IGVsc2UgaWYgKCBzdGF0dXMgJiBJSUNfU1RTX1BUKSB7CisJCQlyZXN1bHQgPSBJSUNfTk9LX1RPVVQ7CisJCX0KKwkJLyogQ29tbWFuZCBpcyByZWFkaW5nID0+IGdldCBidWZmZXIgKi8KKwkJaWYgKChyZWFkaW5nKSAmJiAocmVzdWx0ID09IElJQ19PSykpIHsKKwkJCS8qIEFyZSB0aGVyZSBkYXRhIGluIGJ1ZmZlciAqLworCQkJaWYgKHN0YXR1cyAmIElJQ19TVFNfTURCUykgeworCQkJCS8qCisJCQkJICBldmVuIGlmIHdlIGhhdmUgZGF0YSB3ZSBoYXZlIHRvIHdhaXQgNE9QQiBjbG9ja3MKKwkJCQkgIGZvciBpdCB0byBoaXQgdGhlIGZyb250IG9mIHRoZSBGSUZPLCBhZnRlciB0aGF0CisJCQkJICB3ZSBjYW4ganVzdCByZWFkLiBXZSBzaG91bGQgY2hlY2sgWEZDTlQgaGVyZSBhbmQKKwkJCQkgIGlmIHRoZSBGSUZPIGlzIGZ1bGwgdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0LgogCQkJCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkZWxheSAoMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajxiYztqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJbdHJhbitqXSA9IGluOChJSUNfTURCVUYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJSUNfTk9LX0RBVEE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNyZWcgPSAwOwotICAgICAgICAgICAgICAgIHRyYW4rPWJjOwotICAgICAgICAgICAgICAgIGlmKCBwdHIgPT0gYWRkciAmJiB0cmFuID09IGNudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSBkYXRhX2xlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW4gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZyA9IGNtZF90eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHJlYWRpbmcgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVnID0gSUlDX0NOVExfUlBTVDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChyZXN1bHQpOworCQkJCXVkZWxheSAoMSk7CisJCQkJZm9yKGo9MDtqPGJjO2orKykgeworCQkJCQlwdHJbdHJhbitqXSA9IGluOChJSUNfTURCVUYpOworCQkJCQlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCXJlc3VsdCA9IElJQ19OT0tfREFUQTsKKwkJfQorCQljcmVnID0gMDsKKwkJdHJhbis9YmM7CisJCWlmKCBwdHIgPT0gYWRkciAmJiB0cmFuID09IGNudCApIHsKKwkJCXB0ciA9IGRhdGE7CisJCQljbnQgPSBkYXRhX2xlbjsKKwkJCXRyYW4gPSAwOworCQkJcmVhZGluZyA9IGNtZF90eXBlOworCQkJaWYoIHJlYWRpbmcgKQorCQkJCWNyZWcgPSBJSUNfQ05UTF9SUFNUOworCQl9CisJfQorCXJldHVybiAocmVzdWx0KTsKIH0KIAogaW50IGkyY19wcm9iZSAodWNoYXIgY2hpcCkKQEAgLTMzNyw4OSArMzM3LDg4IEBACiAKIAlidWZbMF0gPSAwOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdoYXQgaXMgbmVlZGVkIGlzIHRvIHNlbmQgdGhlIGNoaXAgYWRkcmVzcyBhbmQgdmVyaWZ5IHRoYXQgdGhlCi0gICAgICAgICAqIGFkZHJlc3Mgd2FzIDxBQ0s+ZWQgKGkuZS4gdGhlcmUgd2FzIGEgY2hpcCBhdCB0aGF0IGFkZHJlc3Mgd2hpY2gKLSAgICAgICAgICogZHJvdmUgdGhlIGRhdGEgbGluZSBsb3cpLgotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuKGkyY190cmFuc2ZlciAoMSwgY2hpcCA8PCAxLCAwLDAsIGJ1ZiwgMSkgIT0gMCk7CisJLyoKKwkgKiBXaGF0IGlzIG5lZWRlZCBpcyB0byBzZW5kIHRoZSBjaGlwIGFkZHJlc3MgYW5kIHZlcmlmeSB0aGF0IHRoZQorCSAqIGFkZHJlc3Mgd2FzIDxBQ0s+ZWQgKGkuZS4gdGhlcmUgd2FzIGEgY2hpcCBhdCB0aGF0IGFkZHJlc3Mgd2hpY2gKKwkgKiBkcm92ZSB0aGUgZGF0YSBsaW5lIGxvdykuCisJICovCisJcmV0dXJuKGkyY190cmFuc2ZlciAoMSwgY2hpcCA8PCAxLCAwLDAsIGJ1ZiwgMSkgIT0gMCk7CiB9CiAKIAotCiBpbnQgaTJjX3JlYWQgKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICogYnVmZmVyLCBpbnQgbGVuKQogewotICAgICAgICB1Y2hhciB4YWRkcls0XTsKLSAgICAgICAgaW50IHJldDsKKwl1Y2hhciB4YWRkcls0XTsKKwlpbnQgcmV0OwogCiAJaWYgKCBhbGVuID4gNCApIHsKIAkJcHJpbnRmICgiSTJDIHJlYWQ6IGFkZHIgbGVuICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGFsZW4pOwogCQlyZXR1cm4gMTsKIAl9CiAKLSAgICAgICAgaWYgKCBhbGVuID4gMCApIHsKLSAgICAgICAgICAgICAgICB4YWRkclswXSA9IChhZGRyID4+IDI0KSAmIDB4RkY7Ci0gICAgICAgICAgICAgICAgeGFkZHJbMV0gPSAoYWRkciA+PiAxNikgJiAweEZGOwotICAgICAgICAgICAgICAgIHhhZGRyWzJdID0gKGFkZHIgPj4gOCkgJiAweEZGOwotICAgICAgICAgICAgICAgIHhhZGRyWzNdID0gYWRkciAmIDB4RkY7Ci0gICAgICAgIH0KKwlpZiAoIGFsZW4gPiAwICkgeworCQl4YWRkclswXSA9IChhZGRyID4+IDI0KSAmIDB4RkY7CisJCXhhZGRyWzFdID0gKGFkZHIgPj4gMTYpICYgMHhGRjsKKwkJeGFkZHJbMl0gPSAoYWRkciA+PiA4KSAmIDB4RkY7CisJCXhhZGRyWzNdID0gYWRkciAmIDB4RkY7CisJfQogCiAKICNpZmRlZiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XCiAJLyoKLSAgICAgICAgICogRUVQUk9NIGNoaXBzIHRoYXQgaW1wbGVtZW50ICJhZGRyZXNzIG92ZXJmbG93IiBhcmUgb25lcwotICAgICAgICAgKiBsaWtlIENhdGFseXN0IDI0V0MwNC8wOC8xNiB3aGljaCBoYXMgOS8xMC8xMSBiaXRzIG9mCi0gICAgICAgICAqIGFkZHJlc3MgYW5kIHRoZSBleHRyYSBiaXRzIGVuZCB1cCBpbiB0aGUgImNoaXAgYWRkcmVzcyIKLSAgICAgICAgICogYml0IHNsb3RzLiBUaGlzIG1ha2VzIGEgMjRXQzA4ICgxS2J5dGUpIGNoaXAgbG9vayBsaWtlCi0gICAgICAgICAqIGZvdXIgMjU2IGJ5dGUgY2hpcHMuCisJICogRUVQUk9NIGNoaXBzIHRoYXQgaW1wbGVtZW50ICJhZGRyZXNzIG92ZXJmbG93IiBhcmUgb25lcworCSAqIGxpa2UgQ2F0YWx5c3QgMjRXQzA0LzA4LzE2IHdoaWNoIGhhcyA5LzEwLzExIGJpdHMgb2YKKwkgKiBhZGRyZXNzIGFuZCB0aGUgZXh0cmEgYml0cyBlbmQgdXAgaW4gdGhlICJjaGlwIGFkZHJlc3MiCisJICogYml0IHNsb3RzLiBUaGlzIG1ha2VzIGEgMjRXQzA4ICgxS2J5dGUpIGNoaXAgbG9vayBsaWtlCisJICogZm91ciAyNTYgYnl0ZSBjaGlwcy4KIAkgKgotICAgICAgICAgKiBOb3RlIHRoYXQgd2UgY29uc2lkZXIgdGhlIGxlbmd0aCBvZiB0aGUgYWRkcmVzcyBmaWVsZCB0bwotICAgICAgICAgKiBzdGlsbCBiZSBvbmUgYnl0ZSBiZWNhdXNlIHRoZSBleHRyYSBhZGRyZXNzIGJpdHMgYXJlCi0gICAgICAgICAqIGhpZGRlbiBpbiB0aGUgY2hpcCBhZGRyZXNzLgorCSAqIE5vdGUgdGhhdCB3ZSBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIGZpZWxkIHRvCisJICogc3RpbGwgYmUgb25lIGJ5dGUgYmVjYXVzZSB0aGUgZXh0cmEgYWRkcmVzcyBiaXRzIGFyZQorCSAqIGhpZGRlbiBpbiB0aGUgY2hpcCBhZGRyZXNzLgogCSAqLwotICAgICAgICBpZiggYWxlbiA+IDAgKQotICAgICAgICAgICAgICAgIGNoaXAgfD0gKChhZGRyID4+IChhbGVuICogOCkpICYgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyk7CisJaWYoIGFsZW4gPiAwICkKKwkJY2hpcCB8PSAoKGFkZHIgPj4gKGFsZW4gKiA4KSkgJiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XKTsKICNlbmRpZgotICAgICAgICBpZiggKHJldCA9IGkyY190cmFuc2ZlciggMSwgY2hpcDw8MSwgJnhhZGRyWzQtYWxlbl0sIGFsZW4sIGJ1ZmZlciwgbGVuICkpICE9IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoICJJMmMgcmVhZDogZmFpbGVkICVkXG4iLCByZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOworCWlmKCAocmV0ID0gaTJjX3RyYW5zZmVyKCAxLCBjaGlwPDwxLCAmeGFkZHJbNC1hbGVuXSwgYWxlbiwgYnVmZmVyLCBsZW4gKSkgIT0gMCkgeworCQlwcmludGYoICJJMmMgcmVhZDogZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIGludCBpMmNfd3JpdGUgKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICogYnVmZmVyLCBpbnQgbGVuKQogewotICAgICAgICB1Y2hhciB4YWRkcls0XTsKKwl1Y2hhciB4YWRkcls0XTsKIAogCWlmICggYWxlbiA+IDQgKSB7CiAJCXByaW50ZiAoIkkyQyB3cml0ZTogYWRkciBsZW4gJWQgbm90IHN1cHBvcnRlZFxuIiwgYWxlbik7CiAJCXJldHVybiAxOwogCiAJfQotICAgICAgICBpZiAoIGFsZW4gPiAwICkgewotICAgICAgICAgICAgICAgIHhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKLSAgICAgICAgICAgICAgICB4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7Ci0gICAgICAgICAgICAgICAgeGFkZHJbMl0gPSAoYWRkciA+PiA4KSAmIDB4RkY7Ci0gICAgICAgICAgICAgICAgeGFkZHJbM10gPSBhZGRyICYgMHhGRjsKLSAgICAgICAgfQorCWlmICggYWxlbiA+IDAgKSB7CisJCXhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKKwkJeGFkZHJbMV0gPSAoYWRkciA+PiAxNikgJiAweEZGOworCQl4YWRkclsyXSA9IChhZGRyID4+IDgpICYgMHhGRjsKKwkJeGFkZHJbM10gPSBhZGRyICYgMHhGRjsKKwl9CiAKICNpZmRlZiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XCiAJLyoKLSAgICAgICAgICogRUVQUk9NIGNoaXBzIHRoYXQgaW1wbGVtZW50ICJhZGRyZXNzIG92ZXJmbG93IiBhcmUgb25lcwotICAgICAgICAgKiBsaWtlIENhdGFseXN0IDI0V0MwNC8wOC8xNiB3aGljaCBoYXMgOS8xMC8xMSBiaXRzIG9mCi0gICAgICAgICAqIGFkZHJlc3MgYW5kIHRoZSBleHRyYSBiaXRzIGVuZCB1cCBpbiB0aGUgImNoaXAgYWRkcmVzcyIKLSAgICAgICAgICogYml0IHNsb3RzLiBUaGlzIG1ha2VzIGEgMjRXQzA4ICgxS2J5dGUpIGNoaXAgbG9vayBsaWtlCi0gICAgICAgICAqIGZvdXIgMjU2IGJ5dGUgY2hpcHMuCisJICogRUVQUk9NIGNoaXBzIHRoYXQgaW1wbGVtZW50ICJhZGRyZXNzIG92ZXJmbG93IiBhcmUgb25lcworCSAqIGxpa2UgQ2F0YWx5c3QgMjRXQzA0LzA4LzE2IHdoaWNoIGhhcyA5LzEwLzExIGJpdHMgb2YKKwkgKiBhZGRyZXNzIGFuZCB0aGUgZXh0cmEgYml0cyBlbmQgdXAgaW4gdGhlICJjaGlwIGFkZHJlc3MiCisJICogYml0IHNsb3RzLiBUaGlzIG1ha2VzIGEgMjRXQzA4ICgxS2J5dGUpIGNoaXAgbG9vayBsaWtlCisJICogZm91ciAyNTYgYnl0ZSBjaGlwcy4KIAkgKgotICAgICAgICAgKiBOb3RlIHRoYXQgd2UgY29uc2lkZXIgdGhlIGxlbmd0aCBvZiB0aGUgYWRkcmVzcyBmaWVsZCB0bwotICAgICAgICAgKiBzdGlsbCBiZSBvbmUgYnl0ZSBiZWNhdXNlIHRoZSBleHRyYSBhZGRyZXNzIGJpdHMgYXJlCi0gICAgICAgICAqIGhpZGRlbiBpbiB0aGUgY2hpcCBhZGRyZXNzLgorCSAqIE5vdGUgdGhhdCB3ZSBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIGZpZWxkIHRvCisJICogc3RpbGwgYmUgb25lIGJ5dGUgYmVjYXVzZSB0aGUgZXh0cmEgYWRkcmVzcyBiaXRzIGFyZQorCSAqIGhpZGRlbiBpbiB0aGUgY2hpcCBhZGRyZXNzLgogCSAqLwotICAgICAgICBpZiggYWxlbiA+IDAgKQotICAgICAgICAgICAgICAgIGNoaXAgfD0gKChhZGRyID4+IChhbGVuICogOCkpICYgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyk7CisJaWYoIGFsZW4gPiAwICkKKwkJY2hpcCB8PSAoKGFkZHIgPj4gKGFsZW4gKiA4KSkgJiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XKTsKICNlbmRpZgogCi0gICAgICAgIHJldHVybiAoaTJjX3RyYW5zZmVyKCAwLCBjaGlwPDwxLCAmeGFkZHJbNC1hbGVuXSwgYWxlbiwgYnVmZmVyLCBsZW4gKSAhPSAwKTsKKwlyZXR1cm4gKGkyY190cmFuc2ZlciggMCwgY2hpcDw8MSwgJnhhZGRyWzQtYWxlbl0sIGFsZW4sIGJ1ZmZlciwgbGVuICkgIT0gMCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvaW50ZXJydXB0cy5jIGIvY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLmMKaW5kZXggMDg2N2RlNC4uYjZhOTU2YyAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDx3YXRjaGRvZy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxwcGM0eHguaD4KICNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L2tnZGIuUyBiL2NwdS9wcGM0eHgva2dkYi5TCmluZGV4IDc4NjgxY2QuLmJlMjgzNDAgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgva2dkYi5TCisrKyBiL2NwdS9wcGM0eHgva2dkYi5TCkBAIC00NSwxMyArNDUsMTMgQEAKIAlpY2NjaSAgIHIwLHIwCQkvKiBpY2NjaSBpbnZhbGlkYXRlcyB0aGUgZW50aXJlIEkgY2FjaGUgKi8KIAkvKiBkY2FjaGUgKi8KIAlhZGRpICAgIHI2LDAsMHgwMDAwICAgICAvKiBjbGVhciBHUFIgNiAqLwotICAgICAgICBhZGRpICAgIHI3LHIwLCAxMjggCS8qIGRvIGxvb3AgZm9yICMgb2YgZGNhY2hlIGxpbmVzICovCisJYWRkaSAgICByNyxyMCwgMTI4IAkvKiBkbyBsb29wIGZvciAjIG9mIGRjYWNoZSBsaW5lcyAqLwogCQkJCS8qIE5PVEU6IGRjY2NpIGludmFsaWRhdGVzIGJvdGggKi8KLSAgICAgICAgbXRjdHIgICByNyAgICAgICAgICAgICAgLyogd2F5cyBpbiB0aGUgRCBjYWNoZSAqLworCW10Y3RyICAgcjcgICAgICAgICAgICAgIC8qIHdheXMgaW4gdGhlIEQgY2FjaGUgKi8KIC4uZGNsb29wOgotICAgICAgICBkY2NjaSAgIDAscjYgICAgICAgICAgICAvKiBpbnZhbGlkYXRlIGxpbmUgKi8KLSAgICAgICAgYWRkaSAgICByNixyNiwgMzIJLyogYnVtcCB0byBuZXh0IGxpbmUgKi8KLSAgICAgICAgYmRueiAgICAuLmRjbG9vcAorCWRjY2NpICAgMCxyNiAgICAgICAgICAgIC8qIGludmFsaWRhdGUgbGluZSAqLworCWFkZGkgICAgcjYscjYsIDMyCS8qIGJ1bXAgdG8gbmV4dCBsaW5lICovCisJYmRueiAgICAuLmRjbG9vcAogCWJscgogCiAJLmdsb2JsCWtnZGJfZmx1c2hfY2FjaGVfcmFuZ2UKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvbWlpcGh5LmMgYi9jcHUvcHBjNHh4L21paXBoeS5jCmluZGV4IGM1YTkwYTkuLjA2MDZlYmUgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvbWlpcGh5LmMKKysrIGIvY3B1L3BwYzR4eC9taWlwaHkuYwpAQCAtNzYsNyArNzYsNiBAQAogfSAvKiBlbmQgZHVtcCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogcmVhZCBhIHBoeSByZWcgYW5kIHJldHVybiB0aGUgdmFsdWUgd2l0aCBhIHJjICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9yZXNldHZlYy5TIGIvY3B1L3BwYzR4eC9yZXNldHZlYy5TCmluZGV4IGUwNThiZjAuLmIzMzA4YmQgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvcmVzZXR2ZWMuUworKysgYi9jcHUvcHBjNHh4L3Jlc2V0dmVjLlMKQEAgLTEwLDQgKzEwLDMgQEAKIAliIF9zdGFydAogI2VuZGlmCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9zZHJhbS5jIGIvY3B1L3BwYzR4eC9zZHJhbS5jCmluZGV4IGUzNWExZDAuLmQ0NTUyYTEgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvc2RyYW0uYworKysgYi9jcHUvcHBjNHh4L3NkcmFtLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCSAqIE5vdyB0ZXN0IGZvciA2NCBNQnl0ZS4uLgogCSAqLwogCi0gICAgICAgIC8qCisJLyoKIAkgKiBEaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyLgogCSAqLwogCW10c2RyYW0wKG1lbV9tY29wdDEsIDB4MDAwMDAwMDApOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJICogTm93IHRlc3QgZm9yIDMyIE1CeXRlLi4uCiAJICovCiAKLSAgICAgICAgLyoKKwkvKgogCSAqIERpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIuCiAJICovCiAJbXRzZHJhbTAobWVtX21jb3B0MSwgMHgwMDAwMDAwMCk7CkBAIC0yMjEsNyArMjIxLDcgQEAKIAkvKgogCSAqIE5vdyB0ZXN0IGZvciAxNiBNQnl0ZS4uLgogCSAqLwotICAgICAgICAvKgorCS8qCiAJICogRGlzYWJsZSBtZW1vcnkgY29udHJvbGxlci4KIAkgKi8KIAltdHNkcmFtMChtZW1fbWNvcHQxLCAweDAwMDAwMDAwKTsKQEAgLTI2Niw3ICsyNjYsNyBAQAogCSAqIFNldHVwIGZvciA0IE1CeXRlLi4uCiAJICovCiAKLSAgICAgICAgLyoKKwkvKgogCSAqIERpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIuCiAJICovCiAJbXRzZHJhbTAobWVtX21jb3B0MSwgMHgwMDAwMDAwMCk7CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3NwZF9zZHJhbS5jIGIvY3B1L3BwYzR4eC9zcGRfc2RyYW0uYwppbmRleCA3NmFlZTJlLi4yODlhZDEyIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L3NwZF9zZHJhbS5jCisrKyBiL2NwdS9wcGM0eHgvc3BkX3NkcmFtLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCSAqIHdheSB0byBtaW5pbWl6ZSBzdGFjayB1dGlsaXphdGlvbi4KIAkgKi8KICNpZm5kZWYgQ09ORklHXzQwNUVQCi0gICAgCXRtcCA9IChtZmRjcihwbGxtZCkgPj4gKDMxLTYpKSAmIDB4ZjsJLyogZ2V0IEZCRFYgYml0cyAqLworCXRtcCA9IChtZmRjcihwbGxtZCkgPj4gKDMxLTYpKSAmIDB4ZjsJLyogZ2V0IEZCRFYgYml0cyAqLwogCXRtcCA9IENPTkZJR19TWVNfQ0xLX0ZSRVEgKiB0bXA7CS8qIGdldCBwbGIgZnJlcSAqLwogI2Vsc2UKIAl7CkBAIC0xOTcsMTAgKzE5NywxMCBAQAogI2VuZGlmCiAJYnVzX3BlcmlvZCA9IHNkcmFtX0haX3RvX25zKHRtcCk7CS8qIGdldCBzZHJhbSBzcGVlZCAqLwogCi0gICAgIAkvKiBNYWtlIHNodXJlIHdlIGFyZSB1c2luZyBTRFJBTSAqLworCS8qIE1ha2Ugc2h1cmUgd2UgYXJlIHVzaW5nIFNEUkFNICovCiAJaWYgKHJlYWRfc3BkKDIpICE9IDB4MDQpewotICAgICAgICAgIFNQRF9FUlIoIlNEUkFNIC0gbm9uIFNEUkFNIG1lbW9yeSBtb2R1bGUgZm91bmRcbiIpOwotICAgICAJICB9CisJICBTUERfRVJSKCJTRFJBTSAtIG5vbiBTRFJBTSBtZW1vcnkgbW9kdWxlIGZvdW5kXG4iKTsKKwkgIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgY29uZmlndXJlIG1lbW9yeSB0aW1pbmcgcmVnaXN0ZXIKQEAgLTIxOCwxNyArMjE4LDE3IEBACiAKIAl0bXAgPSByZWFkX3NwZCgxMjcpICYgMHg2OwogICAgICBpZih0bXAgPT0gMHgwMil7ICAgICAgCSAgIC8qIG9ubHkgY2FzID0gMiBzdXBwb3J0ZWQgKi8KLSAgICAgCSAgbWluX2NhcyA9IDI7CisJICBtaW5fY2FzID0gMjsKIC8qICAgICAJICB0X2NrID0gcmVhZF9zcGQoOSk7ICovCiAvKiAgICAgCSAgdF9hYyA9IHJlYWRfc3BkKDEwKTsgKi8KIAkgIH0KICAgICAgZWxzZSBpZiAodG1wID09IDB4MDQpeyAgICAgICAgIC8qIG9ubHkgY2FzID0gMyBzdXBwb3J0ZWQgKi8KLSAgICAgCSAgbWluX2NhcyA9IDM7CisJICBtaW5fY2FzID0gMzsKIC8qICAgICAJICB0X2NrID0gcmVhZF9zcGQoOSk7ICovCiAvKiAgICAgCSAgdF9hYyA9IHJlYWRfc3BkKDEwKTsgKi8KIAkgIH0KICAgICAgZWxzZSBpZiAodG1wID09IDB4MDYpeyAgICAgICAgIC8qIDIsMyBzdXBwb3J0ZWQsIHNvIHVzZSAyICovCi0gICAgIAkgIG1pbl9jYXMgPSAyOworCSAgbWluX2NhcyA9IDI7CiAvKiAgICAgCSAgdF9jayA9IHJlYWRfc3BkKDIzKTsgKi8KIC8qICAgICAJICB0X2FjID0gcmVhZF9zcGQoMjQpOyAqLwogCSAgfQpAQCAtMjkyLDcgKzI5Miw3IEBACiAJICB0bXA9MTU2MjUqODsKIAkgIGJyZWFrOwogCWRlZmF1bHQ6Ci0gICAgIAkgIFNQRF9FUlIoIlNEUkFNIC0gQmFkIHJlZnJlc2ggcGVyaW9kIFxuIik7CisJICBTUERfRVJSKCJTRFJBTSAtIEJhZCByZWZyZXNoIHBlcmlvZCBcbiIpOwogCX0KIAkvKiBjb252ZXJ0IGZyb20gbnNlYyB0byBidXMgY3ljbGVzICovCiAJdG1wID0gdG1wL2J1c19wZXJpb2Q7CkBAIC0zMzIsMTEgKzMzMiwxMSBAQAogCWlmICggKHJlYWRfc3BkKDExKT09MikgJiYgKHJlYWRfc3BkKDYpPT00MCkgJiYgKHJlYWRfc3BkKDE0KT09OCkgKXsKIAkgICBzZHJhbTBfZWNjY2ZnPTB4Zjw8U0RSQU0wX0VDQ0NGR19TSElGVDsKIAkgICBlY2Nfb24gPSAxOwotICAgCX0KKwl9CiAJZWxzZXsKIAkgICBzZHJhbTBfZWNjY2ZnPTA7CiAJICAgZWNjX29uID0gMDsKLSAgIAl9CisJfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCWNhbGN1bGF0ZSB0b3RhbCBzaXplCkBAIC0zNjksNyArMzY5LDcgQEAKIAkJCW1vZGU9MDsgLyogbW9kZSAxICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkgICAgIAlTUERfRVJSKCJTRFJBTSAtIHVuc3VwcG9ydGVkIG1vZGVcbiIpOworCQlTUERfRVJSKCJTRFJBTSAtIHVuc3VwcG9ydGVkIG1vZGVcbiIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMTI6CkBAIC0zODMsNyArMzgzLDcgQEAKIAkJCW1vZGU9MTsgLyogbW9kZSAyICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkgICAgIAlTUERfRVJSKCJTRFJBTSAtIHVuc3VwcG9ydGVkIG1vZGVcbiIpOworCQlTUERfRVJSKCJTRFJBTSAtIHVuc3VwcG9ydGVkIG1vZGVcbiIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMTM6CkBAIC00MDMsNyArNDAzLDcgQEAKIAkJCW1vZGU9MjsgLyogbW9kZSAzICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkgICAgIAlTUERfRVJSKCJTRFJBTSAtIHVuc3VwcG9ydGVkIG1vZGVcbiIpOworCQlTUERfRVJSKCJTRFJBTSAtIHVuc3VwcG9ydGVkIG1vZGVcbiIpOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00MzEsMTAgKzQzMSwxMCBAQAogCWJhbmtfY29kZS09MjI7CQkJCS8qIHN1YnRyYWN0IDIyIHRvIGdldCB0aGUgY29kZSAqLwogCiAJdG1wID0gU0RSQU0wX0JYQ1JfU1ooYmFua19jb2RlKSB8IFNEUkFNMF9CWENSX0FNKG1vZGUpIHwgMTsKLSAgICAJc2RyYW0wX2IwY3IgPSAoYmFua19zaXplKSAqIDAgfCB0bXA7Ci0gICAgCWlmKGJhbmtfY250PjEpIHNkcmFtMF9iMmNyID0gKGJhbmtfc2l6ZSkgKiAxIHwgdG1wOwotICAgIAlpZihiYW5rX2NudD4yKSBzZHJhbTBfYjFjciA9IChiYW5rX3NpemUpICogMiB8IHRtcDsKLSAgICAJaWYoYmFua19jbnQ+Mykgc2RyYW0wX2IzY3IgPSAoYmFua19zaXplKSAqIDMgfCB0bXA7CisJc2RyYW0wX2IwY3IgPSAoYmFua19zaXplKSAqIDAgfCB0bXA7CisJaWYoYmFua19jbnQ+MSkgc2RyYW0wX2IyY3IgPSAoYmFua19zaXplKSAqIDEgfCB0bXA7CisJaWYoYmFua19jbnQ+Mikgc2RyYW0wX2IxY3IgPSAoYmFua19zaXplKSAqIDIgfCB0bXA7CisJaWYoYmFua19jbnQ+Mykgc2RyYW0wX2IzY3IgPSAoYmFua19zaXplKSAqIDMgfCB0bXA7CiAKIAogCS8qCkBAIC02ODQsMzQgKzY4NCwzNCBAQAogdW5zaWduZWQgY2hhciBzcGRfcmVhZCh1Y2hhciBjaGlwLCB1aW50IGFkZHIpOwogCiB2b2lkIGdldF9zcGRfaW5mbyh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOworCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKIAogdm9pZCBjaGVja19tZW1fdHlwZQotICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKKwkJICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CiAKIHZvaWQgY2hlY2tfdm9sdF90eXBlCi0gICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOworCQkgKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAorCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKIAogdm9pZCBwcm9ncmFtX2NmZzAodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CiAKIHZvaWQgcHJvZ3JhbV9jZmcxKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CisJCSAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCisJCSAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOwogCiB2b2lkIHByb2dyYW1fcnRyICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOworCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKIAogdm9pZCBwcm9ncmFtX3RyMCAodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CiAKIHZvaWQgcHJvZ3JhbV90cjEgKHZvaWQpOwogCkBAIC03MTksOCArNzE5LDggQEAKIAogdW5zaWduZWQKIGxvbmcgIHByb2dyYW1fYnhjcih1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CisJCSAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBESU1NIG1vZHVsZSBFRVBST00gb3ZlciB0aGUgU1BEIGJ1cwpAQCAtNzg4LDcgKzc4OCw3IEBACiAgICAgICogcHJvZ3JhbSB0aGUgQnhDUiByZWdpc3RlcnMgdG8gZmluZCBvdXQgdG90YWwgc2RyYW0gaW5zdGFsbGVkCiAgICAgICovCiAgICAgdG90YWxfc2l6ZSA9IHByb2dyYW1fYnhjcihkaW1tX3BvcHVsYXRlZCwgaWljMF9kaW1tX2FkZHIsCi0gICAgICAgIG51bV9kaW1tX2JhbmtzKTsKKwludW1fZGltbV9iYW5rcyk7CiAKICAgICAvKgogICAgICAqIHByb2dyYW0gU0RSQU0gQ2xvY2sgVGltaW5nIFJlZ2lzdGVyIChTRFJBTTBfQ0xLVFIpCkBAIC04MTAsMTAgKzgxMCwxMCBAQAogICAgICAqIHdhaXQgZm9yIFNEUkFNX0NGRzBfRENfRU4gdG8gY29tcGxldGUKICAgICAgKi8KICAgICB3aGlsZSgxKSB7Ci0gICAgICAgIG1mc2RyYW0obWVtX21jc3RzLCBtY3N0cyk7Ci0gICAgICAgIGlmICgobWNzdHMgJiBTRFJBTV9NQ1NUU19NUlNDKSAhPSAwKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCW1mc2RyYW0obWVtX21jc3RzLCBtY3N0cyk7CisJaWYgKChtY3N0cyAmIFNEUkFNX01DU1RTX01SU0MpICE9IDApIHsKKwkgICAgYnJlYWs7CisJfQogICAgIH0KIAogICAgIC8qCkBAIC04MzgsOCArODM4LDggQEAKIH0KIAogdm9pZCBnZXRfc3BkX2luZm8odW5zaWduZWQgbG9uZyogICBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICAgaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgIG51bV9kaW1tX2JhbmtzKQorCQkgIHVuc2lnbmVkIGNoYXIqICAgaWljMF9kaW1tX2FkZHIsCisJCSAgdW5zaWduZWQgbG9uZyAgICBudW1fZGltbV9iYW5rcykKIHsKICAgICB1bnNpZ25lZCBsb25nIGRpbW1fbnVtOwogICAgIHVuc2lnbmVkIGxvbmcgZGltbV9mb3VuZDsKQEAgLTg0OCw5MCArODQ4LDkwIEBACiAKICAgICBkaW1tX2ZvdW5kID0gRkFMU0U7CiAgICAgZm9yIChkaW1tX251bSA9IDA7IGRpbW1fbnVtIDwgbnVtX2RpbW1fYmFua3M7IGRpbW1fbnVtKyspIHsKLSAgICAgICAgbnVtX29mX2J5dGVzID0gMDsKLSAgICAgICAgdG90YWxfc2l6ZSA9IDA7CisJbnVtX29mX2J5dGVzID0gMDsKKwl0b3RhbF9zaXplID0gMDsKIAotICAgICAgICBudW1fb2ZfYnl0ZXMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDApOwotICAgICAgICB0b3RhbF9zaXplID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAxKTsKKwludW1fb2ZfYnl0ZXMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDApOworCXRvdGFsX3NpemUgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDEpOwogCi0gICAgICAgIGlmICgobnVtX29mX2J5dGVzICE9IDApICYmICh0b3RhbF9zaXplICE9IDApKSB7Ci0gICAgICAgICAgICBkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPSBUUlVFOwotICAgICAgICAgICAgZGltbV9mb3VuZCA9IFRSVUU7CisJaWYgKChudW1fb2ZfYnl0ZXMgIT0gMCkgJiYgKHRvdGFsX3NpemUgIT0gMCkpIHsKKwkgICAgZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID0gVFJVRTsKKwkgICAgZGltbV9mb3VuZCA9IFRSVUU7CiAjaWYgMAotICAgICAgICAgICAgcHJpbnRmKCJESU1NIHNsb3QgJWx1OiBwb3B1bGF0ZWRcbiIsIGRpbW1fbnVtKTsKKwkgICAgcHJpbnRmKCJESU1NIHNsb3QgJWx1OiBwb3B1bGF0ZWRcbiIsIGRpbW1fbnVtKTsKICNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID0gRkFMU0U7CisJfQorCWVsc2UgeworCSAgICBkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPSBGQUxTRTsKICNpZiAwCi0gICAgICAgICAgICBwcmludGYoIkRJTU0gc2xvdCAlbHU6IE5vdCBwb3B1bGF0ZWRcbiIsIGRpbW1fbnVtKTsKKwkgICAgcHJpbnRmKCJESU1NIHNsb3QgJWx1OiBOb3QgcG9wdWxhdGVkXG4iLCBkaW1tX251bSk7CiAjZW5kaWYKLSAgICAgICAgfQorCX0KICAgICB9CiAKICAgICBpZiAoZGltbV9mb3VuZCA9PSBGQUxTRSkgewotICAgICAgICBwcmludGYoIkVSUk9SIC0gTm8gbWVtb3J5IGluc3RhbGxlZC4gSW5zdGFsbCBhIEREUi1TRFJBTSBESU1NLlxuXG4iKTsKLSAgICAgICAgaGFuZygpOworCXByaW50ZigiRVJST1IgLSBObyBtZW1vcnkgaW5zdGFsbGVkLiBJbnN0YWxsIGEgRERSLVNEUkFNIERJTU0uXG5cbiIpOworCWhhbmcoKTsKICAgICB9CiB9CiAKIHZvaWQgY2hlY2tfbWVtX3R5cGUodW5zaWduZWQgbG9uZyogICBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogICBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgICBudW1fZGltbV9iYW5rcykKKwkJICAgIHVuc2lnbmVkIGNoYXIqICAgaWljMF9kaW1tX2FkZHIsCisJCSAgICB1bnNpZ25lZCBsb25nICAgIG51bV9kaW1tX2JhbmtzKQogewogICAgIHVuc2lnbmVkIGxvbmcgZGltbV9udW07CiAgICAgdW5zaWduZWQgY2hhciBkaW1tX3R5cGU7CiAKICAgICBmb3IgKGRpbW1fbnVtID0gMDsgZGltbV9udW0gPCBudW1fZGltbV9iYW5rczsgZGltbV9udW0rKykgewotICAgICAgICBpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKLSAgICAgICAgICAgIGRpbW1fdHlwZSA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMik7Ci0gICAgICAgICAgICBzd2l0Y2ggKGRpbW1fdHlwZSkgewotICAgICAgICAgICAgY2FzZSA3OgorCWlmIChkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPT0gVFJVRSkgeworCSAgICBkaW1tX3R5cGUgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDIpOworCSAgICBzd2l0Y2ggKGRpbW1fdHlwZSkgeworCSAgICBjYXNlIDc6CiAjaWYgMAotICAgICAgICAgICAgICAgIHByaW50ZigiRElNTSBzbG90ICVsdTogRERSIFNEUkFNIGRldGVjdGVkXG4iLCBkaW1tX251bSk7CisJCXByaW50ZigiRElNTSBzbG90ICVsdTogRERSIFNEUkFNIGRldGVjdGVkXG4iLCBkaW1tX251bSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogVW5zdXBwb3J0ZWQgRElNTSBkZXRlY3RlZCBpbiBzbG90ICVsdS5cbiIsCi0gICAgICAgICAgICAgICAgICAgIGRpbW1fbnVtKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIk9ubHkgRERSIFNEUkFNIERJTU1zIGFyZSBzdXBwb3J0ZWQuXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIlJlcGxhY2UgdGhlIERJTU0gbW9kdWxlIHdpdGggYSBzdXBwb3J0ZWQgRElNTS5cblxuIik7Ci0gICAgICAgICAgICAgICAgaGFuZygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlwcmludGYoIkVSUk9SOiBVbnN1cHBvcnRlZCBESU1NIGRldGVjdGVkIGluIHNsb3QgJWx1LlxuIiwKKwkJICAgIGRpbW1fbnVtKTsKKwkJcHJpbnRmKCJPbmx5IEREUiBTRFJBTSBESU1NcyBhcmUgc3VwcG9ydGVkLlxuIik7CisJCXByaW50ZigiUmVwbGFjZSB0aGUgRElNTSBtb2R1bGUgd2l0aCBhIHN1cHBvcnRlZCBESU1NLlxuXG4iKTsKKwkJaGFuZygpOworCQlicmVhazsKKwkgICAgfQorCX0KICAgICB9CiB9CiAKIAogdm9pZCBjaGVja192b2x0X3R5cGUodW5zaWduZWQgbG9uZyogICBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICAgaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgIG51bV9kaW1tX2JhbmtzKQorCQkgICAgIHVuc2lnbmVkIGNoYXIqICAgaWljMF9kaW1tX2FkZHIsCisJCSAgICAgdW5zaWduZWQgbG9uZyAgICBudW1fZGltbV9iYW5rcykKIHsKICAgICB1bnNpZ25lZCBsb25nIGRpbW1fbnVtOwogICAgIHVuc2lnbmVkIGxvbmcgdm9sdGFnZV90eXBlOwogCiAgICAgZm9yIChkaW1tX251bSA9IDA7IGRpbW1fbnVtIDwgbnVtX2RpbW1fYmFua3M7IGRpbW1fbnVtKyspIHsKLSAgICAgICAgaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICB2b2x0YWdlX3R5cGUgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDgpOwotICAgICAgICAgICAgaWYgKHZvbHRhZ2VfdHlwZSAhPSAweDA0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogRElNTSAlbHUgd2l0aCB1bnN1cHBvcnRlZCB2b2x0YWdlIGxldmVsLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgZGltbV9udW0pOwotICAgICAgICAgICAgICAgIGhhbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgeworCWlmIChkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPT0gVFJVRSkgeworCSAgICB2b2x0YWdlX3R5cGUgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDgpOworCSAgICBpZiAodm9sdGFnZV90eXBlICE9IDB4MDQpIHsKKwkJcHJpbnRmKCJFUlJPUjogRElNTSAlbHUgd2l0aCB1bnN1cHBvcnRlZCB2b2x0YWdlIGxldmVsLlxuIiwKKwkJICAgIGRpbW1fbnVtKTsKKwkJaGFuZygpOworCSAgICB9CisJICAgIGVsc2UgewogI2lmIDAKLSAgICAgICAgICAgICAgICBwcmludGYoIkRJTU0gJWx1IHZvbHRhZ2UgbGV2ZWwgc3VwcG9ydGVkLlxuIiwgZGltbV9udW0pOworCQlwcmludGYoIkRJTU0gJWx1IHZvbHRhZ2UgbGV2ZWwgc3VwcG9ydGVkLlxuIiwgZGltbV9udW0pOwogI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCSAgICB9CisJICAgIGJyZWFrOworCX0KICAgICB9CiB9CiAKIHZvaWQgcHJvZ3JhbV9jZmcwKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKIHsKICAgICB1bnNpZ25lZCBsb25nIGRpbW1fbnVtOwogICAgIHVuc2lnbmVkIGxvbmcgY2ZnMDsKQEAgLTk1MSw5ICs5NTEsOSBAQAogICAgICAqIGNsZWFyIGJpdHMKICAgICAgKi8KICAgICBjZmcwICY9IH4oU0RSQU1fQ0ZHMF9EQ0VOIHwgU0RSQU1fQ0ZHMF9NQ0hLX01BU0sgfAotICAgICAgICAgICAgICBTRFJBTV9DRkcwX1JERU4gfCBTRFJBTV9DRkcwX1BNVUQgfAotICAgICAgICAgICAgICBTRFJBTV9DRkcwX0RNV0RfTUFTSyB8Ci0gICAgICAgICAgICAgIFNEUkFNX0NGRzBfVUlPU19NQVNLIHwgU0RSQU1fQ0ZHMF9QRFApOworCSAgICAgIFNEUkFNX0NGRzBfUkRFTiB8IFNEUkFNX0NGRzBfUE1VRCB8CisJICAgICAgU0RSQU1fQ0ZHMF9ETVdEX01BU0sgfAorCSAgICAgIFNEUkFNX0NGRzBfVUlPU19NQVNLIHwgU0RSQU1fQ0ZHMF9QRFApOwogCiAKICAgICAvKgpAQCAtOTYxLDUyICs5NjEsNTIgQEAKICAgICAgKi8KICAgICBlY2NfZW5hYmxlZCA9IFRSVUU7CiAgICAgZm9yIChkaW1tX251bSA9IDA7IGRpbW1fbnVtIDwgbnVtX2RpbW1fYmFua3M7IGRpbW1fbnVtKyspIHsKLSAgICAgICAgaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBlY2MgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDExKTsKLSAgICAgICAgICAgIGlmIChlY2MgIT0gMHgwMikgewotICAgICAgICAgICAgICAgIGVjY19lbmFibGVkID0gRkFMU0U7Ci0gICAgICAgICAgICB9CisJaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7CisJICAgIGVjYyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTEpOworCSAgICBpZiAoZWNjICE9IDB4MDIpIHsKKwkJZWNjX2VuYWJsZWQgPSBGQUxTRTsKKwkgICAgfQogCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogcHJvZ3JhbSBSZWdpc3RlcmVkIERJTU0gRW5hYmxlCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDIxKTsKLSAgICAgICAgICAgIGlmICgoYXR0cmlidXRlcyAmIDB4MDIpICE9IDB4MDApIHsKLSAgICAgICAgICAgICAgICBjZmcwIHw9IFNEUkFNX0NGRzBfUkRFTjsKLSAgICAgICAgICAgIH0KKwkgICAgLyoKKwkgICAgICogcHJvZ3JhbSBSZWdpc3RlcmVkIERJTU0gRW5hYmxlCisJICAgICAqLworCSAgICBhdHRyaWJ1dGVzID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyMSk7CisJICAgIGlmICgoYXR0cmlidXRlcyAmIDB4MDIpICE9IDB4MDApIHsKKwkJY2ZnMCB8PSBTRFJBTV9DRkcwX1JERU47CisJICAgIH0KIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHByb2dyYW0gRERSIFNEUkFNIERhdGEgV2lkdGgKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGF0YV93aWR0aCA9Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLDYpICsKLSAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKXNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSw3KSkgPDwgOCk7Ci0gICAgICAgICAgICBpZiAoZGF0YV93aWR0aCA9PSA2NCB8fCBkYXRhX3dpZHRoID09IDcyKSB7Ci0gICAgICAgICAgICAgICAgZGltbV82NGJpdCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgY2ZnMCB8PSBTRFJBTV9DRkcwX0RNV0RfNjQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChkYXRhX3dpZHRoID09IDMyIHx8IGRhdGFfd2lkdGggPT0gNDApIHsKLSAgICAgICAgICAgICAgICBkaW1tXzMyYml0ID0gVFJVRTsKLSAgICAgICAgICAgICAgICBjZmcwIHw9IFNEUkFNX0NGRzBfRE1XRF8zMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiV0FSTklORzogRElNTSB3aXRoIGRhdGF3aWR0aCBvZiAlbHUgYml0cy5cbiIsCi0gICAgICAgICAgICAgICAgICAgIGRhdGFfd2lkdGgpOwotICAgICAgICAgICAgICAgIHByaW50ZigiT25seSBESU1NcyB3aXRoIDMyIG9yIDY0IGJpdCBkYXRhd2lkdGhzIHN1cHBvcnRlZC5cbiIpOwotICAgICAgICAgICAgICAgIGhhbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJICAgIC8qCisJICAgICAqIHByb2dyYW0gRERSIFNEUkFNIERhdGEgV2lkdGgKKwkgICAgICovCisJICAgIGRhdGFfd2lkdGggPQorCQkodW5zaWduZWQgbG9uZylzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sNikgKworCQkoKCh1bnNpZ25lZCBsb25nKXNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSw3KSkgPDwgOCk7CisJICAgIGlmIChkYXRhX3dpZHRoID09IDY0IHx8IGRhdGFfd2lkdGggPT0gNzIpIHsKKwkJZGltbV82NGJpdCA9IFRSVUU7CisJCWNmZzAgfD0gU0RSQU1fQ0ZHMF9ETVdEXzY0OworCSAgICB9CisJICAgIGVsc2UgaWYgKGRhdGFfd2lkdGggPT0gMzIgfHwgZGF0YV93aWR0aCA9PSA0MCkgeworCQlkaW1tXzMyYml0ID0gVFJVRTsKKwkJY2ZnMCB8PSBTRFJBTV9DRkcwX0RNV0RfMzI7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCXByaW50ZigiV0FSTklORzogRElNTSB3aXRoIGRhdGF3aWR0aCBvZiAlbHUgYml0cy5cbiIsCisJCSAgICBkYXRhX3dpZHRoKTsKKwkJcHJpbnRmKCJPbmx5IERJTU1zIHdpdGggMzIgb3IgNjQgYml0IGRhdGF3aWR0aHMgc3VwcG9ydGVkLlxuIik7CisJCWhhbmcoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CiAgICAgfQogCiAgICAgLyoKICAgICAgKiBwcm9ncmFtIE1lbW9yeSBEYXRhIEVycm9yIENoZWNraW5nCiAgICAgICovCiAgICAgaWYgKGVjY19lbmFibGVkID09IFRSVUUpIHsKLSAgICAgICAgY2ZnMCB8PSBTRFJBTV9DRkcwX01DSEtfR0VOOworCWNmZzAgfD0gU0RSQU1fQ0ZHMF9NQ0hLX0dFTjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGNmZzAgfD0gU0RSQU1fQ0ZHMF9NQ0hLX05PTjsKKwljZmcwIHw9IFNEUkFNX0NGRzBfTUNIS19OT047CiAgICAgfQogCiAgICAgLyoKQEAgLTEwMjMsOCArMTAyMyw4IEBACiB9CiAKIHZvaWQgcHJvZ3JhbV9jZmcxKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKIHsKICAgICB1bnNpZ25lZCBsb25nIGNmZzE7CiAgICAgbWZzZHJhbShtZW1fY2ZnMSwgY2ZnMSk7CkBAIC0xMDQxLDggKzEwNDEsOCBAQAogfQogCiB2b2lkIHByb2dyYW1fcnRyICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpCisJCSAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCisJCSAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBkaW1tX251bTsKICAgICB1bnNpZ25lZCBsb25nIGJ1c19wZXJpb2RfeF8xMDsKQEAgLTEwNjAsMzYgKzEwNjAsMzYgQEAKIAogCiAgICAgZm9yIChkaW1tX251bSA9IDA7ICBkaW1tX251bSA8IG51bV9kaW1tX2JhbmtzOyBkaW1tX251bSsrKSB7Ci0gICAgICAgIGlmIChkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPT0gVFJVRSkgewotICAgICAgICAgICAgcmVmcmVzaF9yYXRlX3R5cGUgPSAweDdGICYgc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAxMik7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlZnJlc2hfcmF0ZV90eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIDB4MDA6Ci0gICAgICAgICAgICAgICAgcmVmcmVzaF9yYXRlID0gMTU2MjU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MDExOgotICAgICAgICAgICAgICAgIHJlZnJlc2hfcmF0ZSA9IDE1NjI1LzQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MDI6Ci0gICAgICAgICAgICAgICAgcmVmcmVzaF9yYXRlID0gMTU2MjUvMjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHgwMzoKLSAgICAgICAgICAgICAgICByZWZyZXNoX3JhdGUgPSAxNTYyNioyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDA0OgotICAgICAgICAgICAgICAgIHJlZnJlc2hfcmF0ZSA9IDE1NjI1KjQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MDU6Ci0gICAgICAgICAgICAgICAgcmVmcmVzaF9yYXRlID0gMTU2MjUqODsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogRElNTSAlbHUsIHVuc3VwcG9ydGVkIHJlZnJlc2ggcmF0ZS90eXBlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgZGltbV9udW0pOwotICAgICAgICAgICAgICAgIHByaW50ZigiUmVwbGFjZSB0aGUgRElNTSBtb2R1bGUgd2l0aCBhIHN1cHBvcnRlZCBESU1NLlxuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisJaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7CisJICAgIHJlZnJlc2hfcmF0ZV90eXBlID0gMHg3RiAmIHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTIpOworCSAgICBzd2l0Y2ggKHJlZnJlc2hfcmF0ZV90eXBlKSB7CisJICAgIGNhc2UgMHgwMDoKKwkJcmVmcmVzaF9yYXRlID0gMTU2MjU7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MDExOgorCQlyZWZyZXNoX3JhdGUgPSAxNTYyNS80OworCQlicmVhazsKKwkgICAgY2FzZSAweDAyOgorCQlyZWZyZXNoX3JhdGUgPSAxNTYyNS8yOworCQlicmVhazsKKwkgICAgY2FzZSAweDAzOgorCQlyZWZyZXNoX3JhdGUgPSAxNTYyNioyOworCQlicmVhazsKKwkgICAgY2FzZSAweDA0OgorCQlyZWZyZXNoX3JhdGUgPSAxNTYyNSo0OworCQlicmVhazsKKwkgICAgY2FzZSAweDA1OgorCQlyZWZyZXNoX3JhdGUgPSAxNTYyNSo4OworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcHJpbnRmKCJFUlJPUjogRElNTSAlbHUsIHVuc3VwcG9ydGVkIHJlZnJlc2ggcmF0ZS90eXBlLlxuIiwKKwkJICAgIGRpbW1fbnVtKTsKKwkJcHJpbnRmKCJSZXBsYWNlIHRoZSBESU1NIG1vZHVsZSB3aXRoIGEgc3VwcG9ydGVkIERJTU0uXG4iKTsKKwkJYnJlYWs7CisJICAgIH0KIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkgICAgYnJlYWs7CisJfQogICAgIH0KIAogICAgIHJlZnJlc2hfaW50ZXJ2YWwgPSByZWZyZXNoX3JhdGUgKiAxMCAvIGJ1c19wZXJpb2RfeF8xMDsKQEAgLTExMDIsOCArMTEwMiw4IEBACiB9CiAKIHZvaWQgcHJvZ3JhbV90cjAgKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKIHsKICAgICB1bnNpZ25lZCBsb25nIGRpbW1fbnVtOwogICAgIHVuc2lnbmVkIGxvbmcgdHIwOwpAQCAtMTE0MSw5ICsxMTQxLDkgQEAKICAgICAgKi8KICAgICBtZnNkcmFtKG1lbV90cjAsIHRyMCk7CiAgICAgdHIwICY9IH4oU0RSQU1fVFIwX1NEV1JfTUFTSyB8IFNEUkFNX1RSMF9TRFdEX01BU0sgfAotICAgICAgICAgICAgIFNEUkFNX1RSMF9TRENMX01BU0sgfCBTRFJBTV9UUjBfU0RQQV9NQVNLIHwKLSAgICAgICAgICAgICBTRFJBTV9UUjBfU0RDUF9NQVNLIHwgU0RSQU1fVFIwX1NETERfTUFTSyB8Ci0gICAgICAgICAgICAgU0RSQU1fVFIwX1NEUkFfTUFTSyB8IFNEUkFNX1RSMF9TRFJEX01BU0spOworCSAgICAgU0RSQU1fVFIwX1NEQ0xfTUFTSyB8IFNEUkFNX1RSMF9TRFBBX01BU0sgfAorCSAgICAgU0RSQU1fVFIwX1NEQ1BfTUFTSyB8IFNEUkFNX1RSMF9TRExEX01BU0sgfAorCSAgICAgU0RSQU1fVFIwX1NEUkFfTUFTSyB8IFNEUkFNX1RSMF9TRFJEX01BU0spOwogCiAgICAgLyoKICAgICAgKiBpbml0aWFsaXphdGlvbgpAQCAtMTE2MCw4MyArMTE2MCw4MyBAQAogICAgIHRjeWNfM18wX25zX3hfMTAgPSAwOwogCiAgICAgZm9yIChkaW1tX251bSA9IDA7IGRpbW1fbnVtIDwgbnVtX2RpbW1fYmFua3M7IGRpbW1fbnVtKyspIHsKLSAgICAgICAgaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICB3Y3NiYyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTUpOwotICAgICAgICAgICAgdF9ycF9ucyAgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDI3KSA+PiAyOwotICAgICAgICAgICAgdF9yY2RfbnMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDI5KSA+PiAyOwotICAgICAgICAgICAgdF9yYXNfbnMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDMwKTsKLSAgICAgICAgICAgIGNhc19iaXQgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDE4KTsKKwlpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKKwkgICAgd2NzYmMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDE1KTsKKwkgICAgdF9ycF9ucyAgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDI3KSA+PiAyOworCSAgICB0X3JjZF9ucyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjkpID4+IDI7CisJICAgIHRfcmFzX25zID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAzMCk7CisJICAgIGNhc19iaXQgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDE4KTsKIAotICAgICAgICAgICAgZm9yIChjYXNfaW5kZXggPSAwOyBjYXNfaW5kZXggPCAzOyBjYXNfaW5kZXgrKykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoY2FzX2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICB0Y3ljX3JlZyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgOSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgdGN5Y19yZWcgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDIzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGN5Y19yZWcgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDI1KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorCSAgICBmb3IgKGNhc19pbmRleCA9IDA7IGNhc19pbmRleCA8IDM7IGNhc19pbmRleCsrKSB7CisJCXN3aXRjaCAoY2FzX2luZGV4KSB7CisJCWNhc2UgMDoKKwkJICAgIHRjeWNfcmVnID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCA5KTsKKwkJICAgIGJyZWFrOworCQljYXNlIDE6CisJCSAgICB0Y3ljX3JlZyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjMpOworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICB0Y3ljX3JlZyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjUpOworCQkgICAgYnJlYWs7CisJCX0KIAotICAgICAgICAgICAgICAgIGlmICgodGN5Y19yZWcgJiAweDBGKSA+PSAxMCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVSUk9SOiBUY3ljIGluY29ycmVjdCBmb3IgRElNTSBpbiBzbG90ICVsdVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpbW1fbnVtKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZygpOwotICAgICAgICAgICAgICAgIH0KKwkJaWYgKCh0Y3ljX3JlZyAmIDB4MEYpID49IDEwKSB7CisJCSAgICBwcmludGYoIkVSUk9SOiBUY3ljIGluY29ycmVjdCBmb3IgRElNTSBpbiBzbG90ICVsdVxuIiwKKwkJCWRpbW1fbnVtKTsKKwkJICAgIGhhbmcoKTsKKwkJfQogCi0gICAgICAgICAgICAgICAgY3ljbGVfdGltZV9uc194XzEwW2Nhc19pbmRleF0gPQotICAgICAgICAgICAgICAgICAgICAoKCh0Y3ljX3JlZyAmIDB4RjApID4+IDQpICogMTApICsgKHRjeWNfcmVnICYgMHgwRik7Ci0gICAgICAgICAgICB9CisJCWN5Y2xlX3RpbWVfbnNfeF8xMFtjYXNfaW5kZXhdID0KKwkJICAgICgoKHRjeWNfcmVnICYgMHhGMCkgPj4gNCkgKiAxMCkgKyAodGN5Y19yZWcgJiAweDBGKTsKKwkgICAgfQogCi0gICAgICAgICAgICBjYXNfaW5kZXggPSAwOworCSAgICBjYXNfaW5kZXggPSAwOwogCi0gICAgICAgICAgICBpZiAoKGNhc19iaXQgJiAweDgwKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY2FzX2luZGV4ICs9IDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICgoY2FzX2JpdCAmIDB4NDApICE9IDApIHsKLSAgICAgICAgICAgICAgICBjYXNfaW5kZXggKz0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChjYXNfYml0ICYgMHgyMCkgIT0gMCkgewotICAgICAgICAgICAgICAgIGNhc19pbmRleCArPSAxOwotICAgICAgICAgICAgfQorCSAgICBpZiAoKGNhc19iaXQgJiAweDgwKSAhPSAwKSB7CisJCWNhc19pbmRleCArPSAzOworCSAgICB9CisJICAgIGVsc2UgaWYgKChjYXNfYml0ICYgMHg0MCkgIT0gMCkgeworCQljYXNfaW5kZXggKz0gMjsKKwkgICAgfQorCSAgICBlbHNlIGlmICgoY2FzX2JpdCAmIDB4MjApICE9IDApIHsKKwkJY2FzX2luZGV4ICs9IDE7CisJICAgIH0KIAotICAgICAgICAgICAgaWYgKCgoY2FzX2JpdCAmIDB4MTApICE9IDApICYmIChjYXNfaW5kZXggPCAzKSkgewotICAgICAgICAgICAgICAgIHRjeWNfM18wX25zX3hfMTAgPSBjeWNsZV90aW1lX25zX3hfMTBbY2FzX2luZGV4XTsKLSAgICAgICAgICAgICAgICBjYXNfaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjYXNfaW5kZXggIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjYXNfaW5kZXgrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzXzNfMF9hdmFpbGFibGUgPSBGQUxTRTsKLSAgICAgICAgICAgIH0KKwkgICAgaWYgKCgoY2FzX2JpdCAmIDB4MTApICE9IDApICYmIChjYXNfaW5kZXggPCAzKSkgeworCQl0Y3ljXzNfMF9uc194XzEwID0gY3ljbGVfdGltZV9uc194XzEwW2Nhc19pbmRleF07CisJCWNhc19pbmRleCsrOworCSAgICB9CisJICAgIGVsc2UgeworCQlpZiAoY2FzX2luZGV4ICE9IDApIHsKKwkJICAgIGNhc19pbmRleCsrOworCQl9CisJCWNhc18zXzBfYXZhaWxhYmxlID0gRkFMU0U7CisJICAgIH0KIAotICAgICAgICAgICAgaWYgKCgoY2FzX2JpdCAmIDB4MDgpICE9IDApIHx8IChjYXNfaW5kZXggPCAzKSkgewotICAgICAgICAgICAgICAgIHRjeWNfMl81X25zX3hfMTAgPSBjeWNsZV90aW1lX25zX3hfMTBbY2FzX2luZGV4XTsKLSAgICAgICAgICAgICAgICBjYXNfaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjYXNfaW5kZXggIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjYXNfaW5kZXgrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzXzJfNV9hdmFpbGFibGUgPSBGQUxTRTsKLSAgICAgICAgICAgIH0KKwkgICAgaWYgKCgoY2FzX2JpdCAmIDB4MDgpICE9IDApIHx8IChjYXNfaW5kZXggPCAzKSkgeworCQl0Y3ljXzJfNV9uc194XzEwID0gY3ljbGVfdGltZV9uc194XzEwW2Nhc19pbmRleF07CisJCWNhc19pbmRleCsrOworCSAgICB9CisJICAgIGVsc2UgeworCQlpZiAoY2FzX2luZGV4ICE9IDApIHsKKwkJICAgIGNhc19pbmRleCsrOworCQl9CisJCWNhc18yXzVfYXZhaWxhYmxlID0gRkFMU0U7CisJICAgIH0KIAotICAgICAgICAgICAgaWYgKCgoY2FzX2JpdCAmIDB4MDQpICE9IDApIHx8IChjYXNfaW5kZXggPCAzKSkgewotICAgICAgICAgICAgICAgIHRjeWNfMl8wX25zX3hfMTAgPSBjeWNsZV90aW1lX25zX3hfMTBbY2FzX2luZGV4XTsKLSAgICAgICAgICAgICAgICBjYXNfaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjYXNfaW5kZXggIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjYXNfaW5kZXgrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzXzJfMF9hdmFpbGFibGUgPSBGQUxTRTsKLSAgICAgICAgICAgIH0KKwkgICAgaWYgKCgoY2FzX2JpdCAmIDB4MDQpICE9IDApIHx8IChjYXNfaW5kZXggPCAzKSkgeworCQl0Y3ljXzJfMF9uc194XzEwID0gY3ljbGVfdGltZV9uc194XzEwW2Nhc19pbmRleF07CisJCWNhc19pbmRleCsrOworCSAgICB9CisJICAgIGVsc2UgeworCQlpZiAoY2FzX2luZGV4ICE9IDApIHsKKwkJICAgIGNhc19pbmRleCsrOworCQl9CisJCWNhc18yXzBfYXZhaWxhYmxlID0gRkFMU0U7CisJICAgIH0KIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkgICAgYnJlYWs7CisJfQogICAgIH0KIAogICAgIC8qCkBAIC0xMjQ1LDMzICsxMjQ1LDMzIEBACiAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFdSXzJfQ0xLOyAgICAgICAgICAgICAgICAvKiBXcml0ZSBSZWNvdmVyeTogMiBDTEsgKi8KICAgICBzd2l0Y2ggKHdjc2JjKSB7CiAgICAgY2FzZSAwOgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEV0RfMF9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RXRF8wX0NMSzsKKwlicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEV0RfMV9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RXRF8xX0NMSzsKKwlicmVhazsKICAgICB9CiAKICAgICAvKgogICAgICAqIFByb2dyYW0gU0RfQ0FTTCBmaWVsZAogICAgICAqLwogICAgIGlmICgoY2FzXzJfMF9hdmFpbGFibGUgPT0gVFJVRSkgJiYKLSAgICAgICAgKGJ1c19wZXJpb2RfeF8xMCA+PSB0Y3ljXzJfMF9uc194XzEwKSkgewotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEQ0xfMl8wX0NMSzsKKwkoYnVzX3BlcmlvZF94XzEwID49IHRjeWNfMl8wX25zX3hfMTApKSB7CisJdHIwIHw9IFNEUkFNX1RSMF9TRENMXzJfMF9DTEs7CiAgICAgfQogICAgIGVsc2UgaWYoKGNhc18yXzVfYXZhaWxhYmxlID09IFRSVUUpICYmCi0gICAgICAgIChidXNfcGVyaW9kX3hfMTAgPj0gdGN5Y18yXzVfbnNfeF8xMCkpIHsKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRENMXzJfNV9DTEs7CisJKGJ1c19wZXJpb2RfeF8xMCA+PSB0Y3ljXzJfNV9uc194XzEwKSkgeworCXRyMCB8PSBTRFJBTV9UUjBfU0RDTF8yXzVfQ0xLOwogICAgIH0KICAgICBlbHNlIGlmKChjYXNfM18wX2F2YWlsYWJsZSA9PSBUUlVFKSAmJgotICAgICAgICAoYnVzX3BlcmlvZF94XzEwID49IHRjeWNfM18wX25zX3hfMTApKSB7Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RDTF8zXzBfQ0xLOworCShidXNfcGVyaW9kX3hfMTAgPj0gdGN5Y18zXzBfbnNfeF8xMCkpIHsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEQ0xfM18wX0NMSzsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHByaW50ZigiRVJST1I6IE5vIHN1cHBvcnRlZCBDQVMgbGF0ZW5jeSB3aXRoIHRoZSBpbnN0YWxsZWQgRElNTXMuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJPbmx5IENBUyBsYXRlbmNpZXMgb2YgMi4wLCAyLjUsIGFuZCAzLjAgYXJlIHN1cHBvcnRlZC5cbiIpOwotICAgICAgICBwcmludGYoIk1ha2Ugc3VyZSB0aGUgUExCIHNwZWVkIGlzIHdpdGhpbiB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuIik7Ci0gICAgICAgIGhhbmcoKTsKKwlwcmludGYoIkVSUk9SOiBObyBzdXBwb3J0ZWQgQ0FTIGxhdGVuY3kgd2l0aCB0aGUgaW5zdGFsbGVkIERJTU1zLlxuIik7CisJcHJpbnRmKCJPbmx5IENBUyBsYXRlbmNpZXMgb2YgMi4wLCAyLjUsIGFuZCAzLjAgYXJlIHN1cHBvcnRlZC5cbiIpOworCXByaW50ZigiTWFrZSBzdXJlIHRoZSBQTEIgc3BlZWQgaXMgd2l0aGluIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4iKTsKKwloYW5nKCk7CiAgICAgfQogCiAgICAgLyoKQEAgLTEyODEsMjAgKzEyODEsMjAgQEAKICAgICB0X3JwX2NsayA9IHN5c19pbmZvLmZyZXFQTEIgKiB0X3JwX25zIC8gT05FX0JJTExJT047CiAgICAgcGxiX2NoZWNrID0gT05FX0JJTExJT04gKiB0X3JwX2NsayAvIHRfcnBfbnM7CiAgICAgaWYgKHN5c19pbmZvLmZyZXFQTEIgIT0gcGxiX2NoZWNrKSB7Ci0gICAgICAgIHRfcnBfY2xrKys7CisJdF9ycF9jbGsrKzsKICAgICB9CiAgICAgc3dpdGNoICgodW5zaWduZWQgbG9uZyl0X3JwX2NsaykgewogICAgIGNhc2UgMDoKICAgICBjYXNlIDE6CiAgICAgY2FzZSAyOgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUEFfMl9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RQQV8yX0NMSzsKKwlicmVhazsKICAgICBjYXNlIDM6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RQQV8zX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFBBXzNfQ0xLOworCWJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RQQV80X0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFBBXzRfQ0xLOworCWJyZWFrOwogICAgIH0KIAogICAgIC8qCkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogICAgIHRfcmFzX3JjZF9jbGsgPSBzeXNfaW5mby5mcmVxUExCICogKHRfcmFzX25zIC0gdF9yY2RfbnMpIC8gT05FX0JJTExJT047CiAgICAgcGxiX2NoZWNrID0gT05FX0JJTExJT04gKiB0X3Jhc19yY2RfY2xrIC8gKHRfcmFzX25zIC0gdF9yY2RfbnMpOwogICAgIGlmIChzeXNfaW5mby5mcmVxUExCICE9IHBsYl9jaGVjaykgewotICAgICAgICB0X3Jhc19yY2RfY2xrKys7CisJdF9yYXNfcmNkX2NsaysrOwogICAgIH0KICAgICBzd2l0Y2ggKHRfcmFzX3JjZF9jbGspIHsKICAgICBjYXNlIDA6CkBAIC0xMzM0LDcgKzEzMzQsNyBAQAogICAgIHRfcmZjX2NsayA9IHN5c19pbmZvLmZyZXFQTEIgLyAoT05FX0JJTExJT04gLyA3NSk7CiAgICAgcmVzaWR1ZSA9IHN5c19pbmZvLmZyZXFQTEIgJSAoT05FX0JJTExJT04gLyA3NSk7CiAgICAgaWYgKHJlc2lkdWUgPj0gKE9ORV9CSUxMSU9OIC8gMTUwKSkgewotICAgICAgICB0X3JmY19jbGsrKzsKKwl0X3JmY19jbGsrKzsKICAgICB9CiAgICAgc3dpdGNoICh0X3JmY19jbGspIHsKICAgICBjYXNlIDA6CkBAIC0xMzQ0LDI5ICsxMzQ0LDI5IEBACiAgICAgY2FzZSA0OgogICAgIGNhc2UgNToKICAgICBjYXNlIDY6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSQV82X0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzZfQ0xLOworCWJyZWFrOwogICAgIGNhc2UgNzoKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzdfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUkFfN19DTEs7CisJYnJlYWs7CiAgICAgY2FzZSA4OgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUkFfOF9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSQV84X0NMSzsKKwlicmVhazsKICAgICBjYXNlIDk6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSQV85X0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzlfQ0xLOworCWJyZWFrOwogICAgIGNhc2UgMTA6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSQV8xMF9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSQV8xMF9DTEs7CisJYnJlYWs7CiAgICAgY2FzZSAxMToKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzExX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzExX0NMSzsKKwlicmVhazsKICAgICBjYXNlIDEyOgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUkFfMTJfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUkFfMTJfQ0xLOworCWJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSQV8xM19DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSQV8xM19DTEs7CisJYnJlYWs7CiAgICAgfQogCiAgICAgLyoKQEAgLTEzNzUsMjAgKzEzNzUsMjAgQEAKICAgICB0X3JjZF9jbGsgPSBzeXNfaW5mby5mcmVxUExCICogdF9yY2RfbnMgLyBPTkVfQklMTElPTjsKICAgICBwbGJfY2hlY2sgPSBPTkVfQklMTElPTiAqIHRfcmNkX2NsayAvIHRfcmNkX25zOwogICAgIGlmIChzeXNfaW5mby5mcmVxUExCICE9IHBsYl9jaGVjaykgewotICAgICAgICB0X3JjZF9jbGsrKzsKKwl0X3JjZF9jbGsrKzsKICAgICB9CiAgICAgc3dpdGNoICh0X3JjZF9jbGspIHsKICAgICBjYXNlIDA6CiAgICAgY2FzZSAxOgogICAgIGNhc2UgMjoKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFJEXzJfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUkRfMl9DTEs7CisJYnJlYWs7CiAgICAgY2FzZSAzOgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUkRfM19DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSRF8zX0NMSzsKKwlicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUkRfNF9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSRF80X0NMSzsKKwlicmVhazsKICAgICB9CiAKICNpZiAwCkBAIC0xNDMyLDE5ICsxNDMyLDE5IEBACiAgICAgICovCiAgICAgbWZzZHJhbShtZW1fdHIxLCB0cjEpOwogICAgIHRyMSAmPSB+KFNEUkFNX1RSMV9SRFNTX01BU0sgfCBTRFJBTV9UUjFfUkRTTF9NQVNLIHwKLSAgICAgICAgICAgICBTRFJBTV9UUjFfUkRDRF9NQVNLIHwgU0RSQU1fVFIxX1JEQ1RfTUFTSyk7CisJICAgICBTRFJBTV9UUjFfUkRDRF9NQVNLIHwgU0RSQU1fVFIxX1JEQ1RfTUFTSyk7CiAKICAgICBtZnNkcmFtKG1lbV90cjAsIHRyMCk7CiAgICAgaWYgKCgodHIwICYgU0RSQU1fVFIwX1NEQ0xfTUFTSykgPT0gU0RSQU1fVFIwX1NEQ0xfMl81X0NMSykgJiYKICAgICAgICAoc3lzX2luZm8uZnJlcVBMQiA+IDEwMDAwMDAwMCkpIHsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRFNTX1RSMjsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRFNMX1NUQUdFMzsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8xXzI7CisJdHIxIHw9IFNEUkFNX1RSMV9SRFNTX1RSMjsKKwl0cjEgfD0gU0RSQU1fVFIxX1JEU0xfU1RBR0UzOworCXRyMSB8PSBTRFJBTV9UUjFfUkRDRF9SQ0RfMV8yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRFNTX1RSMTsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRFNMX1NUQUdFMjsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8wXzA7CisJdHIxIHw9IFNEUkFNX1RSMV9SRFNTX1RSMTsKKwl0cjEgfD0gU0RSQU1fVFIxX1JEU0xfU1RBR0UyOworCXRyMSB8PSBTRFJBTV9UUjFfUkRDRF9SQ0RfMF8wOwogICAgIH0KIAogICAgIC8qCkBAIC0xNDc0LDkxICsxNDc0LDkxIEBACiAgICAgcHJpbnRmKCJTdGFydGluZyBtZW1vcnkgdGVzdCAiKTsKICNlbmRpZgogICAgIGZvciAoayA9IDA7IGsgPCBOVU1IQUxGQ1lDTEVTOyBrKyspIHsKLSAgICAgICAgZm9yIChyZGNsdCA9IDA7IHJkY2x0IDwgZGx5X3ZhbDsgcmRjbHQrKykgIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBTZXQgdGhlIHRpbWluZyByZWcgZm9yIHRoZSB0ZXN0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtdHNkcmFtKG1lbV90cjEsICh0cjEgfCBTRFJBTV9UUjFfUkRDVF9FTkNPREUocmRjbHQpKSk7CisJZm9yIChyZGNsdCA9IDA7IHJkY2x0IDwgZGx5X3ZhbDsgcmRjbHQrKykgIHsKKwkgICAgLyoKKwkgICAgICogU2V0IHRoZSB0aW1pbmcgcmVnIGZvciB0aGUgdGVzdC4KKwkgICAgICovCisJICAgIG10c2RyYW0obWVtX3RyMSwgKHRyMSB8IFNEUkFNX1RSMV9SRENUX0VOQ09ERShyZGNsdCkpKTsKIAotICAgICAgICAgICAgZm9yIChieGNyX251bSA9IDA7IGJ4Y3JfbnVtIDwgTUFYQlhDUjsgYnhjcl9udW0rKykgewotICAgICAgICAgICAgICAgIG10ZGNyKG1lbWNmZ2EsIG1lbV9iMGNyICsgKGJ4Y3JfbnVtPDwyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKChtZmRjcihtZW1jZmdkKSAmIFNEUkFNX0JYQ1JfU0RCRSkgPT0gU0RSQU1fQlhDUl9TREJFKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEJhbmsgaXMgZW5hYmxlZCAqLwotICAgICAgICAgICAgICAgICAgICBtZW1iYXNlID0gKHVuc2lnbmVkIGxvbmcqKQotICAgICAgICAgICAgICAgICAgICAgICAgKG1mZGNyKG1lbWNmZ2QpICYgU0RSQU1fQlhDUl9TREJBX01BU0spOworCSAgICBmb3IgKGJ4Y3JfbnVtID0gMDsgYnhjcl9udW0gPCBNQVhCWENSOyBieGNyX251bSsrKSB7CisJCW10ZGNyKG1lbWNmZ2EsIG1lbV9iMGNyICsgKGJ4Y3JfbnVtPDwyKSk7CisJCWlmICgobWZkY3IobWVtY2ZnZCkgJiBTRFJBTV9CWENSX1NEQkUpID09IFNEUkFNX0JYQ1JfU0RCRSkgeworCQkgICAgLyogQmFuayBpcyBlbmFibGVkICovCisJCSAgICBtZW1iYXNlID0gKHVuc2lnbmVkIGxvbmcqKQorCQkJKG1mZGNyKG1lbWNmZ2QpICYgU0RSQU1fQlhDUl9TREJBX01BU0spOwogCi0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIFJ1biB0aGUgc2hvcnQgbWVtb3J5IHRlc3QKLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1NRU1URVNUUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTlVNTUVNV09SRFM7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJhc2Vbal0gPSB0ZXN0W2ldW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpJihtZW1iYXNlW2pdKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAvKgorCQkgICAgICogUnVuIHRoZSBzaG9ydCBtZW1vcnkgdGVzdAorCQkgICAgICovCisJCSAgICBmb3IgKGkgPSAwOyBpIDwgTlVNTUVNVEVTVFM7IGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IE5VTU1FTVdPUkRTOyBqKyspIHsKKwkJCSAgICBtZW1iYXNlW2pdID0gdGVzdFtpXVtqXTsKKwkJCSAgICBwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSYobWVtYmFzZVtqXSkpOworCQkJfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTlVNTUVNV09SRFM7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1iYXNlW2pdICE9IHRlc3RbaV1bal0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBjRGNiZigodW5zaWduZWQgbG9uZykmKG1lbWJhc2Vbal0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpJihtZW1iYXNlW2pdKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCQlmb3IgKGogPSAwOyBqIDwgTlVNTUVNV09SRFM7IGorKykgeworCQkJICAgIGlmIChtZW1iYXNlW2pdICE9IHRlc3RbaV1bal0pIHsKKwkJCQlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSYobWVtYmFzZVtqXSkpOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCSAgICBwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSYobWVtYmFzZVtqXSkpOworCQkJfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IE5VTU1FTVdPUkRTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJCWlmIChqIDwgTlVNTUVNV09SRFMpIHsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgKiBzZWUgaWYgdGhlIHJkY2x0IHZhbHVlIHBhc3NlZAotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBOVU1NRU1URVNUUykgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJCSAgICAvKgorCQkgICAgICogc2VlIGlmIHRoZSByZGNsdCB2YWx1ZSBwYXNzZWQKKwkJICAgICAqLworCQkgICAgaWYgKGkgPCBOVU1NRU1URVNUUykgeworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQogCi0gICAgICAgICAgICBpZiAoYnhjcl9udW0gPT0gTUFYQlhDUikgewotICAgICAgICAgICAgICAgIGlmIChmYWlsX2ZvdW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFzc19mb3VuZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50X3Bhc3NfbGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc3RhcnQgPSByZGNsdF9vZmZzZXQgKyByZGNsdDsKLSAgICAgICAgICAgICAgICAgICAgfQorCSAgICBpZiAoYnhjcl9udW0gPT0gTUFYQlhDUikgeworCQlpZiAoZmFpbF9mb3VuZCA9PSBUUlVFKSB7CisJCSAgICBwYXNzX2ZvdW5kID0gVFJVRTsKKwkJICAgIGlmIChjdXJyZW50X3Bhc3NfbGVuZ3RoID09IDApIHsKKwkJCWN1cnJlbnRfc3RhcnQgPSByZGNsdF9vZmZzZXQgKyByZGNsdDsKKwkJICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2ZhaWxfbGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudF9wYXNzX2xlbmd0aCsrOworCQkgICAgY3VycmVudF9mYWlsX2xlbmd0aCA9IDA7CisJCSAgICBjdXJyZW50X3Bhc3NfbGVuZ3RoKys7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfcGFzc19sZW5ndGggPiBtYXhfcGFzc19sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYXNzX2xlbmd0aCA9IGN1cnJlbnRfcGFzc19sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhfc3RhcnQgPSBjdXJyZW50X3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2VuZCA9IHJkY2x0X29mZnNldCArIHJkY2x0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9wYXNzX2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9mYWlsX2xlbmd0aCsrOworCQkgICAgaWYgKGN1cnJlbnRfcGFzc19sZW5ndGggPiBtYXhfcGFzc19sZW5ndGgpIHsKKwkJCW1heF9wYXNzX2xlbmd0aCA9IGN1cnJlbnRfcGFzc19sZW5ndGg7CisJCQltYXhfc3RhcnQgPSBjdXJyZW50X3N0YXJ0OworCQkJbWF4X2VuZCA9IHJkY2x0X29mZnNldCArIHJkY2x0OworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWN1cnJlbnRfcGFzc19sZW5ndGggPSAwOworCQljdXJyZW50X2ZhaWxfbGVuZ3RoKys7CiAKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9mYWlsX2xlbmd0aCA+PSAoZGx5X3ZhbD4+MikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZhaWxfZm91bmQgPT0gRkFMU0UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxfZm91bmQgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhc3NfZm91bmQgPT0gVFJVRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93X2ZvdW5kID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCWlmIChjdXJyZW50X2ZhaWxfbGVuZ3RoID49IChkbHlfdmFsPj4yKSkgeworCQkgICAgaWYgKGZhaWxfZm91bmQgPT0gRkFMU0UpIHsKKwkJCWZhaWxfZm91bmQgPSBUUlVFOworCQkgICAgfQorCQkgICAgZWxzZSBpZiAocGFzc19mb3VuZCA9PSBUUlVFKSB7CisJCQl3aW5kb3dfZm91bmQgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KICNpZmRlZiBERUJVRwotICAgICAgICBwcmludGYoIi4iKTsKKwlwcmludGYoIi4iKTsKICNlbmRpZgotICAgICAgICBpZiAod2luZG93X2ZvdW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKHdpbmRvd19mb3VuZCA9PSBUUlVFKSB7CisJICAgIGJyZWFrOworCX0KIAotICAgICAgICB0cjEgPSB0cjEgXiBTRFJBTV9UUjFfUkRDRF9NQVNLOwotICAgICAgICByZGNsdF9vZmZzZXQgKz0gZGx5X3ZhbDsKKwl0cjEgPSB0cjEgXiBTRFJBTV9UUjFfUkRDRF9NQVNLOworCXJkY2x0X29mZnNldCArPSBkbHlfdmFsOwogICAgIH0KICNpZmRlZiBERUJVRwogICAgIHByaW50ZigiXG4iKTsKQEAgLTE1ODIsMTAgKzE1ODIsMTAgQEAKICAgICAgKi8KICAgICB0cjEgJj0gflNEUkFNX1RSMV9SRENEX01BU0s7CiAgICAgaWYgKCh0cjAgJiBTRFJBTV9UUjBfU0RDTF9NQVNLKSA9PSBTRFJBTV9UUjBfU0RDTF8yXzVfQ0xLKSB7Ci0gICAgICAgIHRyMSB8PSBTRFJBTV9UUjFfUkRDRF9SQ0RfMV8yOworCXRyMSB8PSBTRFJBTV9UUjFfUkRDRF9SQ0RfMV8yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8wXzA7CisJdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8wXzA7CiAgICAgfQogCiAgICAgLyoKQEAgLTE1OTMsMjEgKzE1OTMsMjEgQEAKICAgICAgKi8KICAgICB0cjEgJj0gflNEUkFNX1RSMV9SRENUX01BU0s7CiAgICAgd2hpbGUgKG1heF9lbmQgPj0gKGRseV92YWw8PDEpKSB7Ci0gICAgICAgIG1heF9lbmQgLT0gKGRseV92YWw8PDEpOwotICAgICAgICBtYXhfc3RhcnQgLT0gKGRseV92YWw8PDEpOworCW1heF9lbmQgLT0gKGRseV92YWw8PDEpOworCW1heF9zdGFydCAtPSAoZGx5X3ZhbDw8MSk7CiAgICAgfQogCiAgICAgcmRjbHRfYXZlcmFnZSA9ICgobWF4X3N0YXJ0ICsgbWF4X2VuZCkgPj4gMSk7CiAgICAgaWYgKHJkY2x0X2F2ZXJhZ2UgPj0gMHg2MCkKLSAgICAgICAgd2hpbGUoMSk7CisJd2hpbGUoMSk7CiAKICAgICBpZiAocmRjbHRfYXZlcmFnZSA8IDApIHsKLSAgICAgICAgcmRjbHRfYXZlcmFnZSA9IDA7CisJcmRjbHRfYXZlcmFnZSA9IDA7CiAgICAgfQogCiAgICAgaWYgKHJkY2x0X2F2ZXJhZ2UgPj0gZGx5X3ZhbCkgewotICAgICAgICByZGNsdF9hdmVyYWdlIC09IGRseV92YWw7Ci0gICAgICAgIHRyMSA9IHRyMSBeIFNEUkFNX1RSMV9SRENEX01BU0s7CisJcmRjbHRfYXZlcmFnZSAtPSBkbHlfdmFsOworCXRyMSA9IHRyMSBeIFNEUkFNX1RSMV9SRENEX01BU0s7CiAgICAgfQogICAgIHRyMSB8PSBTRFJBTV9UUjFfUkRDVF9FTkNPREUocmRjbHRfYXZlcmFnZSk7CiAKQEAgLTE2MjEsOCArMTYyMSw4IEBACiB9CiAKIHVuc2lnbmVkIGxvbmcgcHJvZ3JhbV9ieGNyKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKKwkJCSAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkJICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBkaW1tX251bTsKICAgICB1bnNpZ25lZCBsb25nIGJ4Y3JfbnVtOwpAQCAtMTY0MSw4ICsxNjQxLDggQEAKICAgICAgKiBTZXQgdGhlIEJ4Q1IgcmVncy4gIEZpcnN0LCB3aXBlIG91dCB0aGUgYmFuayBjb25maWcgcmVnaXN0ZXJzLgogICAgICAqLwogICAgIGZvciAoYnhjcl9udW0gPSAwOyBieGNyX251bSA8IE1BWEJYQ1I7IGJ4Y3JfbnVtKyspIHsKLSAgICAgICAgbXRkY3IobWVtY2ZnYSwgbWVtX2IwY3IgKyAoYnhjcl9udW0gPDwgMikpOwotICAgICAgICBtdGRjcihtZW1jZmdkLCAweDAwMDAwMDAwKTsKKwltdGRjcihtZW1jZmdhLCBtZW1fYjBjciArIChieGNyX251bSA8PCAyKSk7CisJbXRkY3IobWVtY2ZnZCwgMHgwMDAwMDAwMCk7CiAgICAgfQogCiAgICAgLyoKQEAgLTE2NTEsMTA2ICsxNjUxLDEwNiBAQAogICAgIGJhbmtfYmFzZV9hZGRyID0gQ0ZHX1NEUkFNX0JBU0U7CiAKICAgICBmb3IgKGRpbW1fbnVtID0gMDsgZGltbV9udW0gPCBudW1fZGltbV9iYW5rczsgZGltbV9udW0rKykgewotICAgICAgICBpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKLSAgICAgICAgICAgIG51bV9yb3dfYWRkciA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMyk7Ci0gICAgICAgICAgICBudW1fY29sX2FkZHIgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDQpOwotICAgICAgICAgICAgbnVtX2JhbmtzICAgID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCA1KTsKLSAgICAgICAgICAgIGJhbmtfc2l6ZV9pZCA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMzEpOworCWlmIChkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPT0gVFJVRSkgeworCSAgICBudW1fcm93X2FkZHIgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDMpOworCSAgICBudW1fY29sX2FkZHIgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDQpOworCSAgICBudW1fYmFua3MgICAgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDUpOworCSAgICBiYW5rX3NpemVfaWQgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDMxKTsKIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNldCB0aGUgU0RSQU0wX0J4Q1IgcmVncwotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjciA9IDA7Ci0gICAgICAgICAgICBiYW5rX3NpemVfYnl0ZXMgPSA0ICogMTAyNCAqIDEwMjQgKiBiYW5rX3NpemVfaWQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhbmtfc2l6ZV9pZCkgewotICAgICAgICAgICAgY2FzZSAweDAyOgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RTWl84OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDA0OgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RTWl8xNjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHgwODoKLSAgICAgICAgICAgICAgICBjciB8PSBTRFJBTV9CWENSX1NEU1pfMzI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MTA6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzY0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDIwOgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RTWl8xMjg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4NDA6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzI1NjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHg4MDoKLSAgICAgICAgICAgICAgICBjciB8PSBTRFJBTV9CWENSX1NEU1pfNTEyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBwcmludGYoIkREUi1TRFJBTTogRElNTSAlbHUgQnhDUiBjb25maWd1cmF0aW9uLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgZGltbV9udW0pOwotICAgICAgICAgICAgICAgIHByaW50ZigiRVJST1I6IFVuc3VwcG9ydGVkIHZhbHVlIGZvciB0aGUgYmFua3NpemU6ICVkLlxuIiwKLSAgICAgICAgICAgICAgICAgICBiYW5rX3NpemVfaWQpOwotICAgICAgICAgICAgICAgIHByaW50ZigiUmVwbGFjZSB0aGUgRElNTSBtb2R1bGUgd2l0aCBhIHN1cHBvcnRlZCBESU1NLlxuXG4iKTsKLSAgICAgICAgICAgICAgICBoYW5nKCk7Ci0gICAgICAgICAgICB9CisJICAgIC8qCisJICAgICAqIFNldCB0aGUgU0RSQU0wX0J4Q1IgcmVncworCSAgICAgKi8KKwkgICAgY3IgPSAwOworCSAgICBiYW5rX3NpemVfYnl0ZXMgPSA0ICogMTAyNCAqIDEwMjQgKiBiYW5rX3NpemVfaWQ7CisJICAgIHN3aXRjaCAoYmFua19zaXplX2lkKSB7CisJICAgIGNhc2UgMHgwMjoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzg7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MDQ6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RTWl8xNjsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHgwODoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzMyOworCQlicmVhazsKKwkgICAgY2FzZSAweDEwOgorCQljciB8PSBTRFJBTV9CWENSX1NEU1pfNjQ7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MjA6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RTWl8xMjg7CisJCWJyZWFrOworCSAgICBjYXNlIDB4NDA6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RTWl8yNTY7CisJCWJyZWFrOworCSAgICBjYXNlIDB4ODA6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RTWl81MTI7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlwcmludGYoIkREUi1TRFJBTTogRElNTSAlbHUgQnhDUiBjb25maWd1cmF0aW9uLlxuIiwKKwkJICAgIGRpbW1fbnVtKTsKKwkJcHJpbnRmKCJFUlJPUjogVW5zdXBwb3J0ZWQgdmFsdWUgZm9yIHRoZSBiYW5rc2l6ZTogJWQuXG4iLAorCQkgICBiYW5rX3NpemVfaWQpOworCQlwcmludGYoIlJlcGxhY2UgdGhlIERJTU0gbW9kdWxlIHdpdGggYSBzdXBwb3J0ZWQgRElNTS5cblxuIik7CisJCWhhbmcoKTsKKwkgICAgfQogCi0gICAgICAgICAgICBzd2l0Y2ggKG51bV9jb2xfYWRkcikgewotICAgICAgICAgICAgY2FzZSAweDA4OgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RBTV8xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDA5OgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RBTV8yOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDBBOgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RBTV8zOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDBCOgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RBTV80OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBwcmludGYoIkREUi1TRFJBTTogRElNTSAlbHUgQnhDUiBjb25maWd1cmF0aW9uLlxuIiwKLSAgICAgICAgICAgICAgICAgICBkaW1tX251bSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogVW5zdXBwb3J0ZWQgdmFsdWUgZm9yIG51bWJlciBvZiAiCi0gICAgICAgICAgICAgICAgICAgImNvbHVtbiBhZGRyZXNzZXM6ICVkLlxuIiwgbnVtX2NvbF9hZGRyKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIlJlcGxhY2UgdGhlIERJTU0gbW9kdWxlIHdpdGggYSBzdXBwb3J0ZWQgRElNTS5cblxuIik7Ci0gICAgICAgICAgICAgICAgaGFuZygpOwotICAgICAgICAgICAgfQorCSAgICBzd2l0Y2ggKG51bV9jb2xfYWRkcikgeworCSAgICBjYXNlIDB4MDg6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RBTV8xOworCQlicmVhazsKKwkgICAgY2FzZSAweDA5OgorCQljciB8PSBTRFJBTV9CWENSX1NEQU1fMjsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHgwQToKKwkJY3IgfD0gU0RSQU1fQlhDUl9TREFNXzM7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MEI6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RBTV80OworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcHJpbnRmKCJERFItU0RSQU06IERJTU0gJWx1IEJ4Q1IgY29uZmlndXJhdGlvbi5cbiIsCisJCSAgIGRpbW1fbnVtKTsKKwkJcHJpbnRmKCJFUlJPUjogVW5zdXBwb3J0ZWQgdmFsdWUgZm9yIG51bWJlciBvZiAiCisJCSAgICJjb2x1bW4gYWRkcmVzc2VzOiAlZC5cbiIsIG51bV9jb2xfYWRkcik7CisJCXByaW50ZigiUmVwbGFjZSB0aGUgRElNTSBtb2R1bGUgd2l0aCBhIHN1cHBvcnRlZCBESU1NLlxuXG4iKTsKKwkJaGFuZygpOworCSAgICB9CiAKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBlbmFibGUgdGhlIGJhbmsKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TREJFOworCSAgICAvKgorCSAgICAgKiBlbmFibGUgdGhlIGJhbmsKKwkgICAgICovCisJICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RCRTsKIAotICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIHwgVGhpcyBuZXh0IHNlY3Rpb24gaXMgaGFyZHdhcmUgZGVwZW5kZW50IGFuZCBtdXN0IGJlIHByb2dyYW1tZWQKLSAgICAgICAgICAgIHwgdG8gbWF0Y2ggdGhlIGhhcmR3YXJlLgotICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICAgICAgICAgIGlmIChkaW1tX251bSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG10ZGNyKG1lbWNmZ2EsIG1lbV9iMGNyICsgKGkgPDwgMikpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbWZkY3IobWVtY2ZnZCkgJiB+KFNEUkFNX0JYQ1JfU0RCQV9NQVNLIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRFJBTV9CWENSX1NEU1pfTUFTSyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RSQU1fQlhDUl9TREFNX01BU0sgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNEUkFNX0JYQ1JfU0RCRSk7Ci0gICAgICAgICAgICAgICAgICAgIGNyIHw9IHRlbXA7Ci0gICAgICAgICAgICAgICAgICAgIGNyIHw9IGJhbmtfYmFzZV9hZGRyICYgU0RSQU1fQlhDUl9TREJBX01BU0s7Ci0gICAgICAgICAgICAgICAgICAgIG10ZGNyKG1lbWNmZ2QsIGNyKTsKLSAgICAgICAgICAgICAgICAgICAgYmFua19iYXNlX2FkZHIgKz0gYmFua19zaXplX2J5dGVzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYmFua3M7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBtdGRjcihtZW1jZmdhLCBtZW1fYjJjciArIChpIDw8IDIpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG1mZGNyKG1lbWNmZ2QpICYgfihTRFJBTV9CWENSX1NEQkFfTUFTSyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RSQU1fQlhDUl9TRFNaX01BU0sgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNEUkFNX0JYQ1JfU0RBTV9NQVNLIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRFJBTV9CWENSX1NEQkUpOwotICAgICAgICAgICAgICAgICAgICBjciB8PSB0ZW1wOwotICAgICAgICAgICAgICAgICAgICBjciB8PSBiYW5rX2Jhc2VfYWRkciAmIFNEUkFNX0JYQ1JfU0RCQV9NQVNLOwotICAgICAgICAgICAgICAgICAgICBtdGRjcihtZW1jZmdkLCBjcik7Ci0gICAgICAgICAgICAgICAgICAgIGJhbmtfYmFzZV9hZGRyICs9IGJhbmtfc2l6ZV9ieXRlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgfCBUaGlzIG5leHQgc2VjdGlvbiBpcyBoYXJkd2FyZSBkZXBlbmRlbnQgYW5kIG11c3QgYmUgcHJvZ3JhbW1lZAorCSAgICB8IHRvIG1hdGNoIHRoZSBoYXJkd2FyZS4KKwkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkgICAgaWYgKGRpbW1fbnVtID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7CisJCSAgICBtdGRjcihtZW1jZmdhLCBtZW1fYjBjciArIChpIDw8IDIpKTsKKwkJICAgIHRlbXAgPSBtZmRjcihtZW1jZmdkKSAmIH4oU0RSQU1fQlhDUl9TREJBX01BU0sgfAorCQkJCQkgICAgICBTRFJBTV9CWENSX1NEU1pfTUFTSyB8CisJCQkJCSAgICAgIFNEUkFNX0JYQ1JfU0RBTV9NQVNLIHwKKwkJCQkJICAgICAgU0RSQU1fQlhDUl9TREJFKTsKKwkJICAgIGNyIHw9IHRlbXA7CisJCSAgICBjciB8PSBiYW5rX2Jhc2VfYWRkciAmIFNEUkFNX0JYQ1JfU0RCQV9NQVNLOworCQkgICAgbXRkY3IobWVtY2ZnZCwgY3IpOworCQkgICAgYmFua19iYXNlX2FkZHIgKz0gYmFua19zaXplX2J5dGVzOworCQl9CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fYmFua3M7IGkrKykgeworCQkgICAgbXRkY3IobWVtY2ZnYSwgbWVtX2IyY3IgKyAoaSA8PCAyKSk7CisJCSAgICB0ZW1wID0gbWZkY3IobWVtY2ZnZCkgJiB+KFNEUkFNX0JYQ1JfU0RCQV9NQVNLIHwKKwkJCQkJICAgICAgU0RSQU1fQlhDUl9TRFNaX01BU0sgfAorCQkJCQkgICAgICBTRFJBTV9CWENSX1NEQU1fTUFTSyB8CisJCQkJCSAgICAgIFNEUkFNX0JYQ1JfU0RCRSk7CisJCSAgICBjciB8PSB0ZW1wOworCQkgICAgY3IgfD0gYmFua19iYXNlX2FkZHIgJiBTRFJBTV9CWENSX1NEQkFfTUFTSzsKKwkJICAgIG10ZGNyKG1lbWNmZ2QsIGNyKTsKKwkJICAgIGJhbmtfYmFzZV9hZGRyICs9IGJhbmtfc2l6ZV9ieXRlczsKKwkJfQorCSAgICB9CisJfQogICAgIH0KIAogICAgIHJldHVybihiYW5rX2Jhc2VfYWRkcik7CkBAIC0xNzc1LDI2ICsxNzc1LDI2IEBACiAgICAgYmFua19iYXNlX2FkZHIgPSBDRkdfU0RSQU1fQkFTRTsKIAogICAgIGlmICgoY2ZnMCAmIFNEUkFNX0NGRzBfTUNIS19NQVNLKSAhPSBTRFJBTV9DRkcwX01DSEtfTk9OKSB7Ci0gICAgICAgIG10c2RyYW0obWVtX2NmZzAsIChjZmcwICYgflNEUkFNX0NGRzBfTUNIS19NQVNLKSB8Ci0gICAgICAgICAgICBTRFJBTV9DRkcwX01DSEtfR0VOKTsKKwltdHNkcmFtKG1lbV9jZmcwLCAoY2ZnMCAmIH5TRFJBTV9DRkcwX01DSEtfTUFTSykgfAorCSAgICBTRFJBTV9DRkcwX01DSEtfR0VOKTsKIAotICAgICAgICBpZiAoKGNmZzAgJiBTRFJBTV9DRkcwX0RNV0RfTUFTSykgPT0gU0RSQU1fQ0ZHMF9ETVdEXzMyKSB7Ci0gICAgICAgICAgICBhZGRyZXNzX2luY3JlbWVudCA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhZGRyZXNzX2luY3JlbWVudCA9IDg7Ci0gICAgICAgIH0KKwlpZiAoKGNmZzAgJiBTRFJBTV9DRkcwX0RNV0RfTUFTSykgPT0gU0RSQU1fQ0ZHMF9ETVdEXzMyKSB7CisJICAgIGFkZHJlc3NfaW5jcmVtZW50ID0gNDsKKwl9CisJZWxzZSB7CisJICAgIGFkZHJlc3NfaW5jcmVtZW50ID0gODsKKwl9CiAKLSAgICAgICAgY3VycmVudF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpKGJhbmtfYmFzZV9hZGRyKTsKLSAgICAgICAgZW5kX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykoYmFua19iYXNlX2FkZHIpICsgbnVtX2J5dGVzOworCWN1cnJlbnRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKShiYW5rX2Jhc2VfYWRkcik7CisJZW5kX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykoYmFua19iYXNlX2FkZHIpICsgbnVtX2J5dGVzOwogCi0gICAgICAgIHdoaWxlIChjdXJyZW50X2FkZHJlc3MgPCBlbmRfYWRkcmVzcykgewotICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyopY3VycmVudF9hZGRyZXNzKSA9IDB4MDAwMDAwMDA7Ci0gICAgICAgICAgICBjdXJyZW50X2FkZHJlc3MgKz0gYWRkcmVzc19pbmNyZW1lbnQ7Ci0gICAgICAgIH0KKwl3aGlsZSAoY3VycmVudF9hZGRyZXNzIDwgZW5kX2FkZHJlc3MpIHsKKwkgICAgKigodW5zaWduZWQgbG9uZyopY3VycmVudF9hZGRyZXNzKSA9IDB4MDAwMDAwMDA7CisJICAgIGN1cnJlbnRfYWRkcmVzcyArPSBhZGRyZXNzX2luY3JlbWVudDsKKwl9CiAKLSAgICAgICAgbXRzZHJhbShtZW1fY2ZnMCwgKGNmZzAgJiB+U0RSQU1fQ0ZHMF9NQ0hLX01BU0spIHwKLSAgICAgICAgICAgIFNEUkFNX0NGRzBfTUNIS19DSEspOworCW10c2RyYW0obWVtX2NmZzAsIChjZmcwICYgflNEUkFNX0NGRzBfTUNIS19NQVNLKSB8CisJICAgIFNEUkFNX0NGRzBfTUNIS19DSEspOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9zcGVlZC5jIGIvY3B1L3BwYzR4eC9zcGVlZC5jCmluZGV4IGZkZWZiYjYuLjcyNjMyMjcgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvc3BlZWQuYworKysgYi9jcHUvcHBjNHh4L3NwZWVkLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCXN5c0luZm8tPmZyZXFQcm9jZXNzb3IgPSBzeXNJbmZvLT5mcmVxVkNPTWh6L3N5c0luZm8tPnBsbEZ3ZERpdkE7CiAJc3lzSW5mby0+ZnJlcVBMQiA9IHN5c0luZm8tPmZyZXFWQ09NaHovc3lzSW5mby0+cGxsRndkRGl2QjsKICAgICBpZiggZ2V0X3B2cigpID09IFBWUl80NDBHUF9SQiApIC8qIFJldiBCIGRpdnMgYW4gZXh0cmEgMiAtLSBnZWV6ISAqLwotICAgICAgICBzeXNJbmZvLT5mcmVxUExCID4+PSAxOworCXN5c0luZm8tPmZyZXFQTEIgPj49IDE7CiAJc3lzSW5mby0+ZnJlcU9QQiA9IHN5c0luZm8tPmZyZXFQTEIvc3lzSW5mby0+cGxsT3BiRGl2OwogCXN5c0luZm8tPmZyZXFFUEIgPSBzeXNJbmZvLT5mcmVxT1BCL3N5c0luZm8tPnBsbEV4dEJ1c0RpdjsKIApkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9zdGFydC5TIGIvY3B1L3BwYzR4eC9zdGFydC5TCmluZGV4IGM2YTllZGEuLmFhODU3ZDAgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvc3RhcnQuUworKysgYi9jcHUvcHBjNHh4L3N0YXJ0LlMKQEAgLTU1Niw5ICs1NTYsOSBAQAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBETUEgU3RhdHVzLCBjbGVhciB0byBjb21lIHVwIGNsZWFuICovCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICBhZGRpcyAgIHIzLHIwLCAweEZGRkYgICAgICAgICAvKiBDbGVhciBhbGwgZXhpc3RpbmcgRE1BIHN0YXR1cyAqLwotICAgICAgICBvcmkgICAgIHIzLHIzLCAweEZGRkYKLSAgICAgICAgbXRkY3IgICBkbWFzciwgcjMKKwlhZGRpcyAgIHIzLHIwLCAweEZGRkYgICAgICAgICAvKiBDbGVhciBhbGwgZXhpc3RpbmcgRE1BIHN0YXR1cyAqLworCW9yaSAgICAgcjMscjMsIDB4RkZGRgorCW10ZGNyICAgZG1hc3IsIHIzCiAKIAlibAlwcGM0MDVlcF9pbml0ICAgICAgICAgLyogZG8gcHBjNDA1ZXAgc3BlY2lmaWMgaW5pdCAqLwogI2VuZGlmIC8qIENPTkZJR180MDVFUCAqLwpAQCAtNTY4LDIxICs1NjgsMjEgQEAKIAkgKiBTZXR1cCBPQ00gLSBPbiBDaGlwIE1lbW9yeQogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8qIFNldHVwIE9DTSAqLwotIAlsaXMJcjAsIDB4N0ZGRgotIAlvcmkJcjAsIHIwLCAweEZGRkYKLSAJbWZkY3IJcjMsIG9jbWlzY250bCAJCS8qIGdldCBpbnN0ci1zaWRlIElSQU0gY29uZmlnICovCi0gCW1mZGNyCXI0LCBvY21kc2NudGwJLyogZ2V0IGRhdGEtc2lkZSBJUkFNIGNvbmZpZyAqLwotIAlhbmQJcjMsIHIzLCByMAkvKiBkaXNhYmxlIGRhdGEtc2lkZSBJUkFNICovCi0gCWFuZAlyNCwgcjQsIHIwCS8qIGRpc2FibGUgZGF0YS1zaWRlIElSQU0gKi8KLSAJbXRkY3IJb2NtaXNjbnRsLCByMwkvKiBzZXQgaW5zdHItc2lkZSBJUkFNIGNvbmZpZyAqLwotIAltdGRjcglvY21kc2NudGwsIHI0CS8qIHNldCBkYXRhLXNpZGUgSVJBTSBjb25maWcgKi8KLSAJaXN5bmMKKwlsaXMJcjAsIDB4N0ZGRgorCW9yaQlyMCwgcjAsIDB4RkZGRgorCW1mZGNyCXIzLCBvY21pc2NudGwgCQkvKiBnZXQgaW5zdHItc2lkZSBJUkFNIGNvbmZpZyAqLworCW1mZGNyCXI0LCBvY21kc2NudGwJLyogZ2V0IGRhdGEtc2lkZSBJUkFNIGNvbmZpZyAqLworCWFuZAlyMywgcjMsIHIwCS8qIGRpc2FibGUgZGF0YS1zaWRlIElSQU0gKi8KKwlhbmQJcjQsIHI0LCByMAkvKiBkaXNhYmxlIGRhdGEtc2lkZSBJUkFNICovCisJbXRkY3IJb2NtaXNjbnRsLCByMwkvKiBzZXQgaW5zdHItc2lkZSBJUkFNIGNvbmZpZyAqLworCW10ZGNyCW9jbWRzY250bCwgcjQJLyogc2V0IGRhdGEtc2lkZSBJUkFNIGNvbmZpZyAqLworCWlzeW5jCiAKIAlhZGRpcwlyMywgMCwgQ0ZHX09DTV9EQVRBX0FERFJAaCAvKiBPQ00gbG9jYXRpb24gKi8KIAltdGRjcglvY21kc2FyYywgcjMKIAlhZGRpcwlyNCwgMCwgMHhDMDAwCQkvKiBPQ00gZGF0YSBhcmVhIGVuYWJsZWQgKi8KIAltdGRjcglvY21kc2NudGwsIHI0Ci0gCWlzeW5jCisJaXN5bmMKICNlbmRpZgogCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAKIAlHRVRfR09UCQkJLyogaW5pdGlhbGl6ZSBHT1QgYWNjZXNzCQkJKi8KIAotICAgICAgIAlibAljcHVfaW5pdF9mCS8qIHJ1biBsb3ctbGV2ZWwgQ1BVIGluaXQgY29kZSAgICAgKGZyb20gRmxhc2gpCSovCisJYmwJY3B1X2luaXRfZgkvKiBydW4gbG93LWxldmVsIENQVSBpbml0IGNvZGUgICAgIChmcm9tIEZsYXNoKQkqLwogCiAJLyogTkVWRVIgUkVUVVJOUyEgKi8KIAlibAlib2FyZF9pbml0X2YJLyogcnVuIGZpcnN0IHBhcnQgb2YgaW5pdCBjb2RlIChmcm9tIEZsYXNoKQkqLwpAQCAtMTQ1MSwxMDAgKzE0NTEsMTAwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZkZWYgQ09ORklHXzQwNUVQCiBwcGM0MDVlcF9pbml0OgotICAgICAgICAvKgotICAgICAgICAhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgISBDaGVjayBGUEdBIGZvciBQQ0kgaW50ZXJuYWwvZXh0ZXJuYWwgYXJiaXRyYXRpb24KLSAgICAgICAgISAgIElmIGJvYXJkIGlzIHNldCB0byBpbnRlcm5hbCBhcmJpdHJhdGlvbiwgdXBkYXRlIGNwYzBfcGNpCi0gICAgICAgICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qCisJIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJISBDaGVjayBGUEdBIGZvciBQQ0kgaW50ZXJuYWwvZXh0ZXJuYWwgYXJiaXRyYXRpb24KKwkhICAgSWYgYm9hcmQgaXMgc2V0IHRvIGludGVybmFsIGFyYml0cmF0aW9uLCB1cGRhdGUgY3BjMF9wY2kKKwkhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkqLwotICAgICAgICBhZGRpICAgIHIzLDAsQ1BDMF9QQ0lfSE9TVF9DRkdfRU4KKwlhZGRpICAgIHIzLDAsQ1BDMF9QQ0lfSE9TVF9DRkdfRU4KICNpZmRlZiBDT05GSUdfQlVCSU5HQTQwNUVQCi0gICAgICAgIGFkZGlzICAgcjUscjAsRlBHQV9SRUcxQGggICAgICAvKiBzZXQgb2Zmc2V0IGZvciBGUEdBX1JFRzEgKi8KLSAgICAgICAgb3JpICAgICByNSxyNSxGUEdBX1JFRzFAbAotICAgICAgICBsYnogICAgIHI1LDB4MChyNSkgICAgICAgICAgICAgIC8qIHJlYWQgdG8gZ2V0IFBDSSBhcmIgc2VsZWN0aW9uICovCi0gICAgICAgIGFuZGkuICAgcjYscjUsRlBHQV9SRUcxX1BDSV9JTlRfQVJCICAvKiB1c2luZyBpbnRlcm5hbCBhcmJpdGVyID8qLwotICAgICAgICBiZXEgICAgIC4ucGNpX2NmZ19zZXQgICAgICAgICAgICAgLyogaWYgbm90IHNldCwgdGhlbiBieXBhc3MgcmVnIHdyaXRlKi8KKwlhZGRpcyAgIHI1LHIwLEZQR0FfUkVHMUBoICAgICAgLyogc2V0IG9mZnNldCBmb3IgRlBHQV9SRUcxICovCisJb3JpICAgICByNSxyNSxGUEdBX1JFRzFAbAorCWxieiAgICAgcjUsMHgwKHI1KSAgICAgICAgICAgICAgLyogcmVhZCB0byBnZXQgUENJIGFyYiBzZWxlY3Rpb24gKi8KKwlhbmRpLiAgIHI2LHI1LEZQR0FfUkVHMV9QQ0lfSU5UX0FSQiAgLyogdXNpbmcgaW50ZXJuYWwgYXJiaXRlciA/Ki8KKwliZXEgICAgIC4ucGNpX2NmZ19zZXQgICAgICAgICAgICAgLyogaWYgbm90IHNldCwgdGhlbiBieXBhc3MgcmVnIHdyaXRlKi8KICNlbmRpZgotICAgICAgICBvcmkgICAgIHIzLHIzLENQQzBfUENJX0FSQklUX0VOCisJb3JpICAgICByMyxyMyxDUEMwX1BDSV9BUkJJVF9FTgogLi5wY2lfY2ZnX3NldDoKLSAgICAgICAgbXRkY3IgICBDUEMwX1BDSSwgcjMgICAgICAgICAgICAgLyogRW5hYmxlIGludGVybmFsIGFyYml0ZXIqLworCW10ZGNyICAgQ1BDMF9QQ0ksIHIzICAgICAgICAgICAgIC8qIEVuYWJsZSBpbnRlcm5hbCBhcmJpdGVyKi8KIAotICAgICAgICAvKgotICAgICAgICAhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgISBDaGVjayB0byBzZWUgaWYgY2hpcCBpcyBpbiBieXBhc3MgbW9kZS4KLSAgICAgICAgISBJZiBzbywgd3JpdGUgc3RvcmVkIENQQzBfUExMTVIwIGFuZCBDUEMwX1BMTE1SMSB2YWx1ZXMgYW5kIHBlcmZvcm0gYQotICAgICAgICAhIENQVSByZXNldCAgIE90aGVyd2lzZSwgc2tpcCB0aGlzIHN0ZXAgYW5kIGtlZXAgZ29pbmcuCi0gICAgICAgICEgTm90ZTogIFJ1bm5pbmcgQklPUyBpbiBieXBhc3MgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHNpbmNlIFBMQiBzcGVlZAotICAgICAgICAhICAgICAgICB3aWxsIG5vdCBiZSBmYXN0IGVub3VnaCBmb3IgdGhlIFNEUkFNIChtaW4gNjZNSHopCi0gICAgICAgICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qCisJIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJISBDaGVjayB0byBzZWUgaWYgY2hpcCBpcyBpbiBieXBhc3MgbW9kZS4KKwkhIElmIHNvLCB3cml0ZSBzdG9yZWQgQ1BDMF9QTExNUjAgYW5kIENQQzBfUExMTVIxIHZhbHVlcyBhbmQgcGVyZm9ybSBhCisJISBDUFUgcmVzZXQgICBPdGhlcndpc2UsIHNraXAgdGhpcyBzdGVwIGFuZCBrZWVwIGdvaW5nLgorCSEgTm90ZTogIFJ1bm5pbmcgQklPUyBpbiBieXBhc3MgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHNpbmNlIFBMQiBzcGVlZAorCSEgICAgICAgIHdpbGwgbm90IGJlIGZhc3QgZW5vdWdoIGZvciB0aGUgU0RSQU0gKG1pbiA2Nk1IeikKKwkhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkqLwotICAgICAgICBtZmRjciAgIHI1LCBDUEMwX1BMTE1SMQotICAgICAgICBybHdpbm0gIHI0LHI1LDEsMHgxICAgICAgICAgICAgLyogZ2V0IHN5c3RlbSBjbG9jayBzb3VyY2UgKFNTQ1MpICovCi0gICAgICAgIGNtcGkgICAgY3IwLDAscjQsMHgxCisJbWZkY3IgICByNSwgQ1BDMF9QTExNUjEKKwlybHdpbm0gIHI0LHI1LDEsMHgxICAgICAgICAgICAgLyogZ2V0IHN5c3RlbSBjbG9jayBzb3VyY2UgKFNTQ1MpICovCisJY21waSAgICBjcjAsMCxyNCwweDEKIAotICAgICAgICBiZXEgICAgcGxsX2RvbmUgICAgICAgICAgICAgICAgICAgLyogaWYgU1NDUyA9YicxJyB0aGVuIFBMTCBoYXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFscmVhZHkgYmVlbiBzZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBDUFUgaGFzIGJlZW4gcmVzZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvIHNraXAgdG8gbmV4dCBzZWN0aW9uICovCisJYmVxICAgIHBsbF9kb25lICAgICAgICAgICAgICAgICAgIC8qIGlmIFNTQ1MgPWInMScgdGhlbiBQTEwgaGFzICovCisJCQkJCSAgLyogYWxyZWFkeSBiZWVuIHNldCAqLworCQkJCQkgIC8qIGFuZCBDUFUgaGFzIGJlZW4gcmVzZXQgKi8KKwkJCQkJICAvKiBzbyBza2lwIHRvIG5leHQgc2VjdGlvbiAqLwogCiAjaWZkZWYgQ09ORklHX0JVQklOR0E0MDVFUAogCS8qCi0gICAgICAgICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAhIFJlYWQgTlZSQU0gdG8gZ2V0IHZhbHVlIHRvIHdyaXRlIGluIFBMTE1SLgotICAgICAgICAhIElmIHZhbHVlIGhhcyBub3QgYmVlbiBjb3JyZWN0bHkgc2F2ZWQsIHdyaXRlIGRlZmF1bHQgdmFsdWUKLSAgICAgICAgISBEZWZhdWx0IGNvbmZpZyB2YWx1ZXMgKGFzc3VtaW5nIG9uLWJvYXJkIDMzTUh6IFNZU19DTEspIGFyZSBhYm92ZS4KLSAgICAgICAgISBTZWUgQ1BVX0RFRkFVTFRfMjAwIGFuZCBDUFVfREVGQVVMVF8yNjYgYWJvdmUuCi0gICAgICAgICEKLSAgICAgICAgISBXQVJOSU5HOiAgVGhpcyBjb2RlIGFzc3VtZXMgdGhlIGZpcnN0IHRocmVlIHdvcmRzIGluIHRoZSBudnJhbV90Ci0gICAgICAgICEgICAgICAgICAgIHN0cnVjdHVyZSBpbiBvcGVuYmlvcy5oLiAgQ2hhbmdpbmcgdGhlIGJlZ2lubmluZyBvZgotICAgICAgICAhICAgICAgICAgICB0aGUgc3RydWN0dXJlIHdpbGwgYnJlYWsgdGhpcyBjb2RlLgotICAgICAgICAhCi0gICAgICAgICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSEgUmVhZCBOVlJBTSB0byBnZXQgdmFsdWUgdG8gd3JpdGUgaW4gUExMTVIuCisJISBJZiB2YWx1ZSBoYXMgbm90IGJlZW4gY29ycmVjdGx5IHNhdmVkLCB3cml0ZSBkZWZhdWx0IHZhbHVlCisJISBEZWZhdWx0IGNvbmZpZyB2YWx1ZXMgKGFzc3VtaW5nIG9uLWJvYXJkIDMzTUh6IFNZU19DTEspIGFyZSBhYm92ZS4KKwkhIFNlZSBDUFVfREVGQVVMVF8yMDAgYW5kIENQVV9ERUZBVUxUXzI2NiBhYm92ZS4KKwkhCisJISBXQVJOSU5HOiAgVGhpcyBjb2RlIGFzc3VtZXMgdGhlIGZpcnN0IHRocmVlIHdvcmRzIGluIHRoZSBudnJhbV90CisJISAgICAgICAgICAgc3RydWN0dXJlIGluIG9wZW5iaW9zLmguICBDaGFuZ2luZyB0aGUgYmVnaW5uaW5nIG9mCisJISAgICAgICAgICAgdGhlIHN0cnVjdHVyZSB3aWxsIGJyZWFrIHRoaXMgY29kZS4KKwkhCisJIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJKi8KLSAgICAgICAgYWRkaXMgICByMywwLE5WUkFNX0JBU0VAaAotICAgICAgICBhZGRpICAgIHIzLHIzLE5WUkFNX0JBU0VAbAorCWFkZGlzICAgcjMsMCxOVlJBTV9CQVNFQGgKKwlhZGRpICAgIHIzLHIzLE5WUkFNX0JBU0VAbAogCi0gICAgICAgIGx3eiAgICAgcjQsIDAocjMpCi0gICAgICAgIGFkZGlzICAgcjUsMCxOVlJWRlkxQGgKLSAgICAgICAgYWRkaSAgICByNSxyNSxOVlJWRlkxQGwKLSAgICAgICAgY21wICAgICBjcjAsMCxyNCxyNSAgICAgICAgICAgIC8qIENvbXBhcmUgMXN0IE5WUkFNIE1hZ2ljIG51bWJlciovCi0gICAgICAgIGJuZSAgICAgLi5ub19wbGxzZXQKLSAgICAgICAgYWRkaSAgICByMyxyMyw0Ci0gICAgICAgIGx3eiAgICAgcjQsIDAocjMpCi0gICAgICAgIGFkZGlzICAgcjUsMCxOVlJWRlkyQGgKLSAgICAgICAgYWRkaSAgICByNSxyNSxOVlJWRlkyQGwKLSAgICAgICAgY21wICAgICBjcjAsMCxyNCxyNSAgICAgICAgICAgIC8qIENvbXBhcmUgMiBOVlJBTSBNYWdpYyBudW1iZXIgKi8KLSAgICAgICAgYm5lICAgICAuLm5vX3BsbHNldAotICAgICAgICBhZGRpICAgIHIzLHIzLDggICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBjb25mX3NpemUgKi8KLSAgICAgICAgbHd6ICAgICByNCwgNChyMykgICAgICAgICAgICAgICAvKiBMb2FkIFBMTE1SMSB2YWx1ZSBmcm9tIE5WUkFNICovCi0gICAgICAgIGx3eiAgICAgcjMsIDAocjMpICAgICAgICAgICAgICAgLyogTG9hZCBQTExNUjAgdmFsdWUgZnJvbSBOVlJBTSAqLwotICAgICAgICBybHdpbm0gIHI1LHI0LDEsMHgxICAgICAgICAgICAgIC8qIGdldCBzeXN0ZW0gY2xvY2sgc291cmNlIChTU0NTKSAqLwotICAgICAgICBjbXBpICAgICBjcjAsMCxyNSwxICAgICAgICAgICAgIC8qIFNlZSBpZiBQTEwgaXMgbG9ja2VkICovCi0gICAgICAgIGJlcSAgICAgcGxsX3dyaXRlCisJbHd6ICAgICByNCwgMChyMykKKwlhZGRpcyAgIHI1LDAsTlZSVkZZMUBoCisJYWRkaSAgICByNSxyNSxOVlJWRlkxQGwKKwljbXAgICAgIGNyMCwwLHI0LHI1ICAgICAgICAgICAgLyogQ29tcGFyZSAxc3QgTlZSQU0gTWFnaWMgbnVtYmVyKi8KKwlibmUgICAgIC4ubm9fcGxsc2V0CisJYWRkaSAgICByMyxyMyw0CisJbHd6ICAgICByNCwgMChyMykKKwlhZGRpcyAgIHI1LDAsTlZSVkZZMkBoCisJYWRkaSAgICByNSxyNSxOVlJWRlkyQGwKKwljbXAgICAgIGNyMCwwLHI0LHI1ICAgICAgICAgICAgLyogQ29tcGFyZSAyIE5WUkFNIE1hZ2ljIG51bWJlciAqLworCWJuZSAgICAgLi5ub19wbGxzZXQKKwlhZGRpICAgIHIzLHIzLDggICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBjb25mX3NpemUgKi8KKwlsd3ogICAgIHI0LCA0KHIzKSAgICAgICAgICAgICAgIC8qIExvYWQgUExMTVIxIHZhbHVlIGZyb20gTlZSQU0gKi8KKwlsd3ogICAgIHIzLCAwKHIzKSAgICAgICAgICAgICAgIC8qIExvYWQgUExMTVIwIHZhbHVlIGZyb20gTlZSQU0gKi8KKwlybHdpbm0gIHI1LHI0LDEsMHgxICAgICAgICAgICAgIC8qIGdldCBzeXN0ZW0gY2xvY2sgc291cmNlIChTU0NTKSAqLworCWNtcGkgICAgIGNyMCwwLHI1LDEgICAgICAgICAgICAgLyogU2VlIGlmIFBMTCBpcyBsb2NrZWQgKi8KKwliZXEgICAgIHBsbF93cml0ZQogLi5ub19wbGxzZXQ6CiAjZW5kaWYgLyogQ09ORklHX0JVQklOR0E0MDVFUCAqLwogCi0gICAgICAgIGFkZGlzICAgcjMsMCxQTExNUjBfREVGQVVMVEBoICAgICAgIC8qIFBMTE1SMCBkZWZhdWx0IHZhbHVlICovCi0gICAgICAgIG9yaSAgICAgcjMscjMsUExMTVIwX0RFRkFVTFRAbCAgICAgLyogKi8KLSAgICAgICAgYWRkaXMgICByNCwwLFBMTE1SMV9ERUZBVUxUQGggICAgICAgLyogUExMTVIxIGRlZmF1bHQgdmFsdWUgKi8KLSAgICAgICAgb3JpICAgICByNCxyNCxQTExNUjFfREVGQVVMVEBsICAgICAvKiAqLworCWFkZGlzICAgcjMsMCxQTExNUjBfREVGQVVMVEBoICAgICAgIC8qIFBMTE1SMCBkZWZhdWx0IHZhbHVlICovCisJb3JpICAgICByMyxyMyxQTExNUjBfREVGQVVMVEBsICAgICAvKiAqLworCWFkZGlzICAgcjQsMCxQTExNUjFfREVGQVVMVEBoICAgICAgIC8qIFBMTE1SMSBkZWZhdWx0IHZhbHVlICovCisJb3JpICAgICByNCxyNCxQTExNUjFfREVGQVVMVEBsICAgICAvKiAqLwogCi0gICAgICAgIGIgICAgICAgcGxsX3dyaXRlICAgICAgICAgICAgICAgICAvKiBXcml0ZSB0aGUgQ1BDMF9QTExNUiB3aXRoIG5ldyB2YWx1ZSAqLworCWIgICAgICAgcGxsX3dyaXRlICAgICAgICAgICAgICAgICAvKiBXcml0ZSB0aGUgQ1BDMF9QTExNUiB3aXRoIG5ldyB2YWx1ZSAqLwogCiBwbGxfZG9uZToKLSAgICAgICAgLyoKLSAgICAgICAgIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICEgQ2xlYXIgU29mdCBSZXNldCBSZWdpc3RlcgotICAgICAgICAhIFRoaXMgaXMgbmVlZGVkIHRvIGVuYWJsZSBQQ0kgaWYgbm90IGJvb3RpbmcgZnJvbSBzZXJpYWwgRVBST00KLSAgICAgICAgIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLyoKKwkhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkhIENsZWFyIFNvZnQgUmVzZXQgUmVnaXN0ZXIKKwkhIFRoaXMgaXMgbmVlZGVkIHRvIGVuYWJsZSBQQ0kgaWYgbm90IGJvb3RpbmcgZnJvbSBzZXJpYWwgRVBST00KKwkhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJKi8KLSAgICAgICAgYWRkaSAgICByMywgMCwgMHgwCi0gICAgICAgIG10ZGNyICAgQ1BDMF9TUlIsIHIzCisJYWRkaSAgICByMywgMCwgMHgwCisJbXRkY3IgICBDUEMwX1NSUiwgcjMKIAotICAgICAgICBhZGRpcyAgICByMywwLDB4MDAxMAotICAgICAgICBtdGN0ciAgIHIzCisJYWRkaXMgICAgcjMsMCwweDAwMTAKKwltdGN0ciAgIHIzCiBwY2lfd2FpdDoKLSAgICAgICAgYmRueiAgICBwY2lfd2FpdAorCWJkbnogICAgcGNpX3dhaXQKIAogCWJscgkJCQkgIC8qIHJldHVybiB0byBtYWluIGNvZGUgKi8KIApAQCAtMTU2NSw0MyArMTU2NSw0MyBAQAogIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogcGxsX3dyaXRlOgotICAgICAgICBtZmRjciAgcjUsIENQQzBfVUNSCi0gICAgICAgIGFuZGlzLiByNSxyNSwweEZGRkYKLSAgICAgICAgb3JpICAgIHI1LHI1LDB4MDEwMSAgICAgICAgICAgICAgLyogU3RvcCB0aGUgVUFSVCBjbG9ja3MgKi8KLSAgICAgICAgbXRkY3IgIENQQzBfVUNSLHI1ICAgICAgICAgICAgICAgLyogQmVmb3JlIGNoYW5naW5nIFBMTCAqLworCW1mZGNyICByNSwgQ1BDMF9VQ1IKKwlhbmRpcy4gcjUscjUsMHhGRkZGCisJb3JpICAgIHI1LHI1LDB4MDEwMSAgICAgICAgICAgICAgLyogU3RvcCB0aGUgVUFSVCBjbG9ja3MgKi8KKwltdGRjciAgQ1BDMF9VQ1IscjUgICAgICAgICAgICAgICAvKiBCZWZvcmUgY2hhbmdpbmcgUExMICovCiAKLSAgICAgICAgbWZkY3IgIHI1LCBDUEMwX1BMTE1SMQotICAgICAgICBybHdpbm0gcjUscjUsMCwweDdGRkZGRkZGICAgICAgICAvKiBEaXNhYmxlIFBMTCAqLwotICAgICAgICBtdGRjciAgIENQQzBfUExMTVIxLHI1Ci0gICAgICAgIG9yaXMgICByNSxyNSwweDQwMDAgICAgICAgICAgICAgIC8qIFNldCBQTEwgUmVzZXQgKi8KLSAgICAgICAgbXRkY3IgICBDUEMwX1BMTE1SMSxyNQorCW1mZGNyICByNSwgQ1BDMF9QTExNUjEKKwlybHdpbm0gcjUscjUsMCwweDdGRkZGRkZGICAgICAgICAvKiBEaXNhYmxlIFBMTCAqLworCW10ZGNyICAgQ1BDMF9QTExNUjEscjUKKwlvcmlzICAgcjUscjUsMHg0MDAwICAgICAgICAgICAgICAvKiBTZXQgUExMIFJlc2V0ICovCisJbXRkY3IgICBDUEMwX1BMTE1SMSxyNQogCi0gICAgICAgIG10ZGNyICAgQ1BDMF9QTExNUjAscjMgICAgICAgICAgIC8qIFNldCBjbG9jayBkaXZpZGVycyAqLwotICAgICAgICBybHdpbm0gcjUscjQsMCwweDNGRkZGRkZGICAgICAgICAvKiBSZXNldCAmIEJ5cGFzcyBuZXcgUExMIGRpdmlkZXJzICovCi0gICAgICAgIG9yaXMgICByNSxyNSwweDQwMDAgICAgICAgICAgICAgIC8qIFNldCBQTEwgUmVzZXQgKi8KLSAgICAgICAgbXRkY3IgICBDUEMwX1BMTE1SMSxyNSAgICAgICAgICAgLyogU2V0IGNsb2NrIGRpdmlkZXJzICovCi0gICAgICAgIHJsd2lubSByNSxyNSwwLDB4QkZGRkZGRkYgICAgICAgIC8qIENsZWFyIFBMTCBSZXNldCAqLwotICAgICAgICBtdGRjciAgIENQQzBfUExMTVIxLHI1CisJbXRkY3IgICBDUEMwX1BMTE1SMCxyMyAgICAgICAgICAgLyogU2V0IGNsb2NrIGRpdmlkZXJzICovCisJcmx3aW5tIHI1LHI0LDAsMHgzRkZGRkZGRiAgICAgICAgLyogUmVzZXQgJiBCeXBhc3MgbmV3IFBMTCBkaXZpZGVycyAqLworCW9yaXMgICByNSxyNSwweDQwMDAgICAgICAgICAgICAgIC8qIFNldCBQTEwgUmVzZXQgKi8KKwltdGRjciAgIENQQzBfUExMTVIxLHI1ICAgICAgICAgICAvKiBTZXQgY2xvY2sgZGl2aWRlcnMgKi8KKwlybHdpbm0gcjUscjUsMCwweEJGRkZGRkZGICAgICAgICAvKiBDbGVhciBQTEwgUmVzZXQgKi8KKwltdGRjciAgIENQQzBfUExMTVIxLHI1CiAKIAkJLyoKLSAgICAgICAgISBXYWl0IG1pbiBvZiAxMDB1cyBmb3IgUExMIHRvIGxvY2suCi0gICAgICAgICEgU2VlIENNT1MgMjdFIGRhdGFib29rIGZvciBtb3JlIGluZm8uCi0gICAgICAgICEgQXQgMjAwTUh6LCB0aGF0IG1lYW5zIHdhaXRpbmcgMjAsMDAwIGluc3RydWN0aW9ucworCSEgV2FpdCBtaW4gb2YgMTAwdXMgZm9yIFBMTCB0byBsb2NrLgorCSEgU2VlIENNT1MgMjdFIGRhdGFib29rIGZvciBtb3JlIGluZm8uCisJISBBdCAyMDBNSHosIHRoYXQgbWVhbnMgd2FpdGluZyAyMCwwMDAgaW5zdHJ1Y3Rpb25zCiAJCSAqLwotICAgICAgICBhZGRpICAgIHIzLDAsMjAwMDAgICAgICAgICAgICAgIC8qIDIwMDAgPSAweDRlMjAgKi8KLSAgICAgICAgbXRjdHIgICByMworCWFkZGkgICAgcjMsMCwyMDAwMCAgICAgICAgICAgICAgLyogMjAwMCA9IDB4NGUyMCAqLworCW10Y3RyICAgcjMKIHBsbF93YWl0OgotICAgICAgICBiZG56ICAgIHBsbF93YWl0CisJYmRueiAgICBwbGxfd2FpdAogCi0gICAgICAgIG9yaXMgICByNSxyNSwweDgwMDAgICAgICAgICAgICAgLyogRW5hYmxlIFBMTCAqLwotICAgICAgICBtdGRjciAgIENQQzBfUExMTVIxLHI1ICAgICAgICAgIC8qIEVuZ2FnZSAqLworCW9yaXMgICByNSxyNSwweDgwMDAgICAgICAgICAgICAgLyogRW5hYmxlIFBMTCAqLworCW10ZGNyICAgQ1BDMF9QTExNUjEscjUgICAgICAgICAgLyogRW5nYWdlICovCiAKLSAgICAgICAgLyoKLSAgICAgICAgICogUmVzZXQgQ1BVIHRvIGd1YXJhbnRlZSB0aW1pbmdzIGFyZSBPSwotICAgICAgICAgKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIG5lZWRlZC4uLgotIAkgKi8KLSAgICAgICAgYWRkaXMgcjMsMCwweDEwMDAKLSAgICAgICAgbXRzcHIgZGJjcjAscjMgICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwgY2F1c2UgYSBDUFUgY29yZSByZXNldCwgYW5kICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhlY3V0aW9uIHdpbGwgY29udGludWUgZnJvbSB0aGUgcG93ZXJvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZlY3RvciBvZiAweGZmZmZmZmZjICovCisJLyoKKwkgKiBSZXNldCBDUFUgdG8gZ3VhcmFudGVlIHRpbWluZ3MgYXJlIE9LCisJICogTm90IHN1cmUgaWYgdGhpcyBpcyBuZWVkZWQuLi4KKwkgKi8KKwlhZGRpcyByMywwLDB4MTAwMAorCW10c3ByIGRiY3IwLHIzICAgICAgICAgICAgICAgLyogVGhpcyB3aWxsIGNhdXNlIGEgQ1BVIGNvcmUgcmVzZXQsIGFuZCAqLworCQkJCSAgICAgLyogZXhlY3V0aW9uIHdpbGwgY29udGludWUgZnJvbSB0aGUgcG93ZXJvbiAqLworCQkJCSAgICAgLyogdmVjdG9yIG9mIDB4ZmZmZmZmZmMgKi8KICNlbmRpZiAvKiBDT05GSUdfNDA1RVAgKi8KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvdHJhcHMuYyBiL2NwdS9wcGM0eHgvdHJhcHMuYwppbmRleCA4NWYyZWE0Li4xY2Y4OTllIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L3RyYXBzLmMKKysrIGIvY3B1L3BwYzR4eC90cmFwcy5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIHZvaWQKIFByb2dyYW1DaGVja0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSAgICAgICAgbG9uZyBlc3JfdmFsOworCWxvbmcgZXNyX3ZhbDsKIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCiAJaWYgKGRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyICYmICgqZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIpKHJlZ3MpKQpAQCAtMjEyLDEyICsyMTIsMTIgQEAKIAogCXNob3dfcmVncyhyZWdzKTsKIAotICAgICAgICBlc3JfdmFsID0gZ2V0X2VzcigpOwotICAgICAgICBpZiggZXNyX3ZhbCAmIEVTUl9QSUwgKQorCWVzcl92YWwgPSBnZXRfZXNyKCk7CisJaWYoIGVzcl92YWwgJiBFU1JfUElMICkKIAkJcHJpbnRmKCAiKiogSWxsZWdhbCBJbnN0cnVjdGlvbiAqKlxuIiApOwotICAgICAgICBlbHNlIGlmKCBlc3JfdmFsICYgRVNSX1BQUiApCisJZWxzZSBpZiggZXNyX3ZhbCAmIEVTUl9QUFIgKQogCQlwcmludGYoICIqKiBQcml2aWxlZ2VkIEluc3RydWN0aW9uICoqXG4iICk7Ci0gICAgICAgIGVsc2UgaWYoIGVzcl92YWwgJiBFU1JfUFRSICkKKwllbHNlIGlmKCBlc3JfdmFsICYgRVNSX1BUUiApCiAJCXByaW50ZiggIioqIFRyYXAgSW5zdHJ1Y3Rpb24gKipcbiIgKTsKIAogCXByaW50X2JhY2t0cmFjZSgodW5zaWduZWQgbG9uZyAqKXJlZ3MtPmdwclsxXSk7CkBAIC0yMjcsMTUgKzIyNywxNSBAQAogdm9pZAogUElURXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotICAgICAgICAvKgotICAgICAgICAgKiBSZXNldCBQSVQgaW50ZXJydXB0Ci0gICAgICAgICAqLwotICAgICAgICBzZXRfdHNyKDB4MDgwMDAwMDApOworCS8qCisJICogUmVzZXQgUElUIGludGVycnVwdAorCSAqLworCXNldF90c3IoMHgwODAwMDAwMCk7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogQ2FsbCB0aW1lcl9pbnRlcnJ1cHQgcm91dGluZSBpbiBpbnRlcnJ1cHRzLmMKLSAgICAgICAgICovCi0gICAgICAgIHRpbWVyX2ludGVycnVwdChOVUxMKTsKKwkvKgorCSAqIENhbGwgdGltZXJfaW50ZXJydXB0IHJvdXRpbmUgaW4gaW50ZXJydXB0cy5jCisJICovCisJdGltZXJfaW50ZXJydXB0KE5VTEwpOwogfQogCiAKZGlmZiAtLWdpdCBhL2NwdS9weGEvaTJjLmMgYi9jcHUvcHhhL2kyYy5jCmluZGV4IDQwNmY4MjUuLmNjMmM0OWMgMTAwNjQ0Ci0tLSBhL2NwdS9weGEvaTJjLmMKKysrIGIvY3B1L3B4YS9pMmMuYwpAQCAtMzYsMTYgKzM2LDE2IEBACiAKICNpZmRlZiBDT05GSUdfSEFSRF9JMkMKIAotLyogCi0gKgktIENGR19JMkNfU1BFRUQgCi0gKgktIEkyQ19QWEFfU0xBVkVfQUREUiAKKy8qCisgKgktIENGR19JMkNfU1BFRUQKKyAqCS0gSTJDX1BYQV9TTEFWRV9BRERSCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxpMmMuaD4KIAotLy8jZGVmaW5lCURFQlVHX0kyQyAJMQkvKiBhY3RpdmF0ZSBsb2NhbCBkZWJ1Z2dpbmcgb3V0cHV0ICAqLworLyojZGVmaW5lCURFQlVHX0kyQyAJMQkvIyMjKiBhY3RpdmF0ZSBsb2NhbCBkZWJ1Z2dpbmcgb3V0cHV0ICAqLwogI2RlZmluZSBJMkNfUFhBX1NMQVZFX0FERFIJMHgxCS8qIHNsYXZlIHB4YSB1bml0IGFkZHJlc3MgICAgICAgICAgICovCiAjZGVmaW5lIEkyQ19JQ1JfSU5JVAkJKElDUl9CRUlFIHwgSUNSX0lSRklFIHwgSUNSX0lURUlFIHwgSUNSX0dDRCB8IElDUl9TQ0xFKQogI2RlZmluZSBJMkNfSVNSX0lOSVQJCTB4N0ZGCkBAIC02Myw3ICs2Myw3IEBACiAjZGVmaW5lIEkyQ19DT05EX1NUT1AJCTIKIAogLyogU2hhbGwgdGhlIGN1cnJlbnQgdHJhbnNmZXIgYmUgYWNrL25hY2tlZCBvciBiZWluZyB3YWl0ZWQgZm9yIGl0PyAqLwotI2RlZmluZSBJMkNfQUNLTkFLX1dBSVRBQ0sJMQkKKyNkZWZpbmUgSTJDX0FDS05BS19XQUlUQUNLCTEKICNkZWZpbmUgSTJDX0FDS05BS19TRU5EQUNLCTIKICNkZWZpbmUgSTJDX0FDS05BS19TRU5ETkFLCTQKIApAQCAtNzQsMzcgKzc0LDM3IEBACiAvKiBBbGwgdHJhbnNmZXJzIGFyZSBkZXNjcmliZWQgYnkgdGhpcyBkYXRhIHN0cnVjdHVyZSAqLwogc3RydWN0IGkyY19tc2cgewogCXU4IGNvbmRpdGlvbjsKLQl1OCBhY2tuYWNrOyAKLQl1OCBkaXJlY3Rpb247IAorCXU4IGFja25hY2s7CisJdTggZGlyZWN0aW9uOwogCXU4IGRhdGE7CiB9OwogCiAKIC8qKgotICogaTJjX3B4YV9yZXNldDogLSByZXNldCB0aGUgaG9zdCBjb250cm9sbGVyIAorICogaTJjX3B4YV9yZXNldDogLSByZXNldCB0aGUgaG9zdCBjb250cm9sbGVyCiAgKgogICovCiAKIHN0YXRpYyB2b2lkIGkyY19yZXNldCggdm9pZCApCiB7CiAJSUNSICY9IH5JQ1JfSVVFOwkJLyogZGlzYWJsZSB1bml0ICovCi0gICAgICAgIElDUiB8PSBJQ1JfVVI7CQkJLyogcmVzZXQgdGhlIHVuaXQgKi8KLSAgICAgICAgdWRlbGF5KDEwMCk7Ci0gICAgICAgIElDUiAmPSB+SUNSX0lVRTsJCS8qIGRpc2FibGUgdW5pdCAqLwotICAgICAgICBDS0VOIHw9IENLRU4xNF9JMkM7CQkvKiBzZXQgdGhlIGdsb2JhbCBJMkMgY2xvY2sgb24gKi8KLSAgICAgICAgSVNBUiA9IEkyQ19QWEFfU0xBVkVfQUREUjsJLyogc2V0IG91ciBzbGF2ZSBhZGRyZXNzICovCi0gICAgICAgIElDUiA9IEkyQ19JQ1JfSU5JVDsJCS8qIHNldCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLwotICAgICAgICBJU1IgPSBJMkNfSVNSX0lOSVQ7CQkvKiBzZXQgY2xlYXIgaW50ZXJydXB0IGJpdHMgKi8KLSAgICAgICAgSUNSIHw9IElDUl9JVUU7CQkJLyogZW5hYmxlIHVuaXQgKi8KLSAgICAgICAgdWRlbGF5KDEwMCk7CisJSUNSIHw9IElDUl9VUjsJCQkvKiByZXNldCB0aGUgdW5pdCAqLworCXVkZWxheSgxMDApOworCUlDUiAmPSB+SUNSX0lVRTsJCS8qIGRpc2FibGUgdW5pdCAqLworCUNLRU4gfD0gQ0tFTjE0X0kyQzsJCS8qIHNldCB0aGUgZ2xvYmFsIEkyQyBjbG9jayBvbiAqLworCUlTQVIgPSBJMkNfUFhBX1NMQVZFX0FERFI7CS8qIHNldCBvdXIgc2xhdmUgYWRkcmVzcyAqLworCUlDUiA9IEkyQ19JQ1JfSU5JVDsJCS8qIHNldCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLworCUlTUiA9IEkyQ19JU1JfSU5JVDsJCS8qIHNldCBjbGVhciBpbnRlcnJ1cHQgYml0cyAqLworCUlDUiB8PSBJQ1JfSVVFOwkJCS8qIGVuYWJsZSB1bml0ICovCisJdWRlbGF5KDEwMCk7CiB9CiAKIAogLyoqCi0gKiBpMmNfaXNyX3NldF9jbGVhcmVkOiAtIHdhaXQgdW50aWwgY2VydGFpbiBiaXRzIG9mIHRoZSBJMkMgc3RhdHVzIHJlZ2lzdGVyIAorICogaTJjX2lzcl9zZXRfY2xlYXJlZDogLSB3YWl0IHVudGlsIGNlcnRhaW4gYml0cyBvZiB0aGUgSTJDIHN0YXR1cyByZWdpc3RlcgogICoJICAgICAgICAgICAgICAgICAgYXJlIHNldCBhbmQgY2xlYXJlZAogICoKLSAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzLCAxIG1lYW5zIHRpbWVvdXQgKG5vIG1hdGNoIHdpdGhpbiAxMCBtcykuIAorICogQHJldHVybjogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIDEgbWVhbnMgdGltZW91dCAobm8gbWF0Y2ggd2l0aGluIDEwIG1zKS4KICAqLwogCiBzdGF0aWMgaW50IGkyY19pc3Jfc2V0X2NsZWFyZWQoIHVuc2lnbmVkIGxvbmcgc2V0X21hc2ssIHVuc2lnbmVkIGxvbmcgY2xlYXJlZF9tYXNrICkKQEAgLTExNiwxNSArMTE2LDE1IEBACiAJCWlmKCB0aW1lb3V0LS0gPCAwICkgcmV0dXJuIDA7CiAJfQogCi0gICAgICAgIHJldHVybiAxOworCXJldHVybiAxOwogfQogCiAKIC8qKgogICogaTJjX3RyYW5zZmVyOiAtIFRyYW5zZmVyIG9uZSBieXRlIG92ZXIgdGhlIGkyYyBidXMKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0cmFuZmVyIGEgYnl0ZSBvdmVyIHRoZSBpMmMgYnVzIGluIGJvdGggZGlyZWN0aW9ucy4gCi0gKiBJdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgQVBJIGZ1bmN0aW9ucy4gCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiB0cmFuZmVyIGEgYnl0ZSBvdmVyIHRoZSBpMmMgYnVzIGluIGJvdGggZGlyZWN0aW9ucy4KKyAqIEl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBBUEkgZnVuY3Rpb25zLgogICoKICAqIEByZXR1cm46ICAwOiB0cmFuc2ZlciBzdWNjZXNzZnVsCiAgKiAgICAgICAgICAtMTogbWVzc2FnZSBpcyBlbXB0eQpAQCAtMTMzLDEyICsxMzMsMTIgQEAKICAqICAgICAgICAgIC00OiByZWNlaXZlIHRpbWVvdXQKICAqICAgICAgICAgIC01OiBpbGxlZ2FsIHBhcmFtZXRlcnMKICAqICAgICAgICAgIC02OiBidXMgaXMgYnVzeSBhbmQgY291bGRuJ3QgYmUgYXF1aXJlZAotICovIAorICovCiBpbnQgaTJjX3RyYW5zZmVyKHN0cnVjdCBpMmNfbXNnICptc2cpCiB7CiAJaW50IHJldDsKIAotCWlmICghbXNnKSAKKwlpZiAoIW1zZykKIAkJZ290byB0cmFuc2Zlcl9lcnJvcl9tc2dfZW1wdHk7CiAKIAlzd2l0Y2gobXNnLT5kaXJlY3Rpb24pIHsKQEAgLTE1NCwxNCArMTU0LDE0IEBACiAJCUlDUiAmPSB+SUNSX1NUT1A7CiAJCUlEQlIgPSBtc2ctPmRhdGE7CiAJCWlmIChtc2ctPmNvbmRpdGlvbiA9PSBJMkNfQ09ORF9TVEFSVCkgICAgIElDUiB8PSAgSUNSX1NUQVJUOwotCQlpZiAobXNnLT5jb25kaXRpb24gPT0gSTJDX0NPTkRfU1RPUCkgICAgICBJQ1IgfD0gIElDUl9TVE9QOyAKKwkJaWYgKG1zZy0+Y29uZGl0aW9uID09IEkyQ19DT05EX1NUT1ApICAgICAgSUNSIHw9ICBJQ1JfU1RPUDsKIAkJaWYgKG1zZy0+YWNrbmFjayAgID09IEkyQ19BQ0tOQUtfU0VORE5BSykgSUNSIHw9ICBJQ1JfQUNLTkFLOwogCQlpZiAobXNnLT5hY2tuYWNrICAgPT0gSTJDX0FDS05BS19TRU5EQUNLKSBJQ1IgJj0gfklDUl9BQ0tOQUs7CiAJCUlDUiAmPSB+SUNSX0FMRElFOwotCQlJQ1IgfD0gSUNSX1RCOyAKKwkJSUNSIHw9IElDUl9UQjsKIAogCQkvKiB0cmFuc21pdCByZWdpc3RlciBlbXB0eT8gKi8KLQkJaWYgKCFpMmNfaXNyX3NldF9jbGVhcmVkKElTUl9JVEUsMCkpIAorCQlpZiAoIWkyY19pc3Jfc2V0X2NsZWFyZWQoSVNSX0lURSwwKSkKIAkJCWdvdG8gdHJhbnNmZXJfZXJyb3JfdHJhbnNtaXRfdGltZW91dDsKIAogCQkvKiBjbGVhciAndHJhbnNtaXQgZW1wdHknIHN0YXRlICovCkBAIC0xNjksNyArMTY5LDcgQEAKIAogCQkvKiB3YWl0IGZvciBBQ0sgZnJvbSBzbGF2ZSAqLwogCQlpZiAobXNnLT5hY2tuYWNrID09IEkyQ19BQ0tOQUtfV0FJVEFDSykKLQkJCWlmICghaTJjX2lzcl9zZXRfY2xlYXJlZCgwLElTUl9BQ0tOQUspKSAKKwkJCWlmICghaTJjX2lzcl9zZXRfY2xlYXJlZCgwLElTUl9BQ0tOQUspKQogCQkJCWdvdG8gdHJhbnNmZXJfZXJyb3JfYWNrX21pc3Npbmc7CiAJCWJyZWFrOwogCkBAIC0xOTAsOCArMTkwLDggQEAKIAkJSUNSIHw9IElDUl9UQjsKIAogCQkvKiByZWNlaXZlIHJlZ2lzdGVyIGZ1bGw/ICovCi0JCWlmICghaTJjX2lzcl9zZXRfY2xlYXJlZChJU1JfSVJGLDApKSAKLQkJCWdvdG8gdHJhbnNmZXJfZXJyb3JfcmVjZWl2ZV90aW1lb3V0OyAKKwkJaWYgKCFpMmNfaXNyX3NldF9jbGVhcmVkKElTUl9JUkYsMCkpCisJCQlnb3RvIHRyYW5zZmVyX2Vycm9yX3JlY2VpdmVfdGltZW91dDsKIAogCQltc2ctPmRhdGEgPSBJREJSOwogCkBAIC0yMDYsOSArMjA2LDkgQEAKIAogCX0KIAotCXJldHVybiAwOyAKKwlyZXR1cm4gMDsKIAotdHJhbnNmZXJfZXJyb3JfbXNnX2VtcHR5OiAKK3RyYW5zZmVyX2Vycm9yX21zZ19lbXB0eToKIAkJUFJJTlREKCgiaTJjX3RyYW5zZmVyOiBlcnJvcjogJ21zZycgaXMgZW1wdHlcbiIpKTsKIAkJcmV0ID0gLTE7IGdvdG8gaTJjX3RyYW5zZmVyX2ZpbmlzaDsKIApAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIHZvaWQgaTJjX2luaXQoaW50IHNwZWVkLCBpbnQgc2xhdmVhZGRyKQogewotI2lmZGVmIENGR19JMkNfSU5JVF9CT0FSRCAgICAgICAgCisjaWZkZWYgQ0ZHX0kyQ19JTklUX0JPQVJECiAJLyogY2FsbCBib2FyZCBzcGVjaWZpYyBpMmMgYnVzIHJlc2V0IHJvdXRpbmUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgICAqLwogCS8qIGVudmlyb25tZW50LCB3aGljaCBtaWdodCBiZSBpbiBhIGNoaXAgb24gdGhhdCBidXMuIEZvciBkZXRhaWxzICAgKi8KIAkvKiBhYm91dCB0aGlzIHByb2JsZW0gc2VlIGRvYy9JMkNfRWRnZV9Db25kaXRpb25zLiAgICAgICAgICAgICAgICAgICovCkBAIC0yNTcsNyArMjU3LDcgQEAKIC8qKgogICogaTJjX3Byb2JlOiAtIFRlc3QgaWYgYSBjaGlwIGFuc3dlcnMgZm9yIGEgZ2l2ZW4gaTJjIGFkZHJlc3MKICAqCi0gKiBAY2hpcDoJYWRkcmVzcyBvZiB0aGUgY2hpcCB3aGljaCBpcyBzZWFyY2hlZCBmb3IgCisgKiBAY2hpcDoJYWRkcmVzcyBvZiB0aGUgY2hpcCB3aGljaCBpcyBzZWFyY2hlZCBmb3IKICAqIEByZXR1cm46IAkwIGlmIGEgY2hpcCB3YXMgZm91bmQsIC0xIG90aGVyd2hpc2UKICAqLwogCkBAIC0yODcsNyArMjg3LDcgQEAKICAqIGkyY19yZWFkOiAtIFJlYWQgbXVsdGlwbGUgYnl0ZXMgZnJvbSBhbiBpMmMgZGV2aWNlCiAgKgogICogVGhlIGhpZ2hlciBsZXZlbCByb3V0aW5lcyB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgb25seQotICogY2FsbGVkIHdpdGggbGVuIDwgcGFnZSBsZW5ndGggb2YgdGhlIGRldmljZSAoc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSkgCisgKiBjYWxsZWQgd2l0aCBsZW4gPCBwYWdlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIChzZWUgY29uZmlndXJhdGlvbiBmaWxlKQogICoKICAqIEBjaGlwOglhZGRyZXNzIG9mIHRoZSBjaGlwIHdoaWNoIGlzIHRvIGJlIHJlYWQKICAqIEBhZGRyOglpMmMgZGF0YSBhZGRyZXNzIHdpdGhpbiB0aGUgY2hpcApAQCAtMzE1LDEyICszMTUsMTIgQEAKIAltc2cuZGF0YSAgICAgID0gKGNoaXAgPDwgMSk7CiAJbXNnLmRhdGEgICAgICY9IDB4RkU7CiAJaWYgKChyZXQ9aTJjX3RyYW5zZmVyKCZtc2cpKSkgcmV0dXJuIC0xOwotCQorCiAJLyoKLQkgKiBzZW5kIG1lbW9yeSBhZGRyZXNzIGJ5dGVzOyAKLQkgKiBhbGVuIGRlZmluZXMgaG93IG11Y2ggYnl0ZXMgd2UgaGF2ZSB0byBzZW5kLiAKKwkgKiBzZW5kIG1lbW9yeSBhZGRyZXNzIGJ5dGVzOworCSAqIGFsZW4gZGVmaW5lcyBob3cgbXVjaCBieXRlcyB3ZSBoYXZlIHRvIHNlbmQuCiAJICovCi0JLy9hZGRyICY9ICgoMSA8PCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyktMSk7CisJLyphZGRyICY9ICgoMSA8PCBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyktMSk7ICovCiAJYWRkcl9ieXRlc1swXSA9ICh1OCkoKGFkZHIgPj4gIDApICYgMHgwMDAwMDBGRik7CiAJYWRkcl9ieXRlc1sxXSA9ICh1OCkoKGFkZHIgPj4gIDgpICYgMHgwMDAwMDBGRik7CiAJYWRkcl9ieXRlc1syXSA9ICh1OCkoKGFkZHIgPj4gMTYpICYgMHgwMDAwMDBGRik7CkBAIC0zMzQsNyArMzM0LDcgQEAKIAkJbXNnLmRhdGEgICAgICA9IGFkZHJfYnl0ZXNbYWxlbl07CiAJCWlmICgocmV0PWkyY190cmFuc2ZlcigmbXNnKSkpIHJldHVybiAtMTsKIAl9Ci0JCisKIAogCS8qIHN0YXJ0IHJlYWQgc2VxdWVuY2UgKi8KIAlQUklOVEQoKCJpMmNfcmVhZDogc3RhcnQgcmVhZCBzZXF1ZW5jZVxuIikpOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJLyogcmVhZCBieXRlczsgc2VuZCBOQUNLIGF0IGxhc3QgYnl0ZSAqLwogCXdoaWxlIChsZW4tLSkgewogCi0JCWlmIChsZW49PTApIHsgCisJCWlmIChsZW49PTApIHsKIAkJCW1zZy5jb25kaXRpb24gPSBJMkNfQ09ORF9TVE9QOwogCQkJbXNnLmFja25hY2sgICA9IEkyQ19BQ0tOQUtfU0VORE5BSzsKIAkJfSBlbHNlIHsKQEAgLTM3NiwxMiArMzc2LDEyIEBACiAgKiBpMmNfd3JpdGU6IC0gIFdyaXRlIG11bHRpcGxlIGJ5dGVzIHRvIGFuIGkyYyBkZXZpY2UKICAqCiAgKiBUaGUgaGlnaGVyIGxldmVsIHJvdXRpbmVzIHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5Ci0gKiBjYWxsZWQgd2l0aCBsZW4gPCBwYWdlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIChzZWUgY29uZmlndXJhdGlvbiBmaWxlKSAKKyAqIGNhbGxlZCB3aXRoIGxlbiA8IHBhZ2UgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgKHNlZSBjb25maWd1cmF0aW9uIGZpbGUpCiAgKgogICogQGNoaXA6CWFkZHJlc3Mgb2YgdGhlIGNoaXAgd2hpY2ggaXMgdG8gYmUgd3JpdHRlbgogICogQGFkZHI6CWkyYyBkYXRhIGFkZHJlc3Mgd2l0aGluIHRoZSBjaGlwCiAgKiBAYWxlbjoJbGVuZ3RoIG9mIHRoZSBpMmMgZGF0YSBhZGRyZXNzICgxLi4yIGJ5dGVzKQotICogQGJ1ZmZlcjoJd2hlcmUgdG8gZmluZCB0aGUgZGF0YSB0byBiZSB3cml0dGVuIAorICogQGJ1ZmZlcjoJd2hlcmUgdG8gZmluZCB0aGUgZGF0YSB0byBiZSB3cml0dGVuCiAgKiBAbGVuOglob3cgbXVjaCBieXRlIGRvIHdlIHdhbnQgdG8gcmVhZAogICogQHJldHVybjoJMCBpbiBjYXNlIG9mIHN1Y2Nlc3MKICAqLwpAQCAtNDAzLDEwICs0MDMsMTAgQEAKIAltc2cuZGF0YSAgICAgID0gKGNoaXAgPDwgMSk7CiAJbXNnLmRhdGEgICAgICY9IDB4RkU7CiAJaWYgKGkyY190cmFuc2ZlcigmbXNnKSkgcmV0dXJuIC0xOwotCQorCiAJLyoKLQkgKiBzZW5kIG1lbW9yeSBhZGRyZXNzIGJ5dGVzOyAKLQkgKiBhbGVuIGRlZmluZXMgaG93IG11Y2ggYnl0ZXMgd2UgaGF2ZSB0byBzZW5kLiAKKwkgKiBzZW5kIG1lbW9yeSBhZGRyZXNzIGJ5dGVzOworCSAqIGFsZW4gZGVmaW5lcyBob3cgbXVjaCBieXRlcyB3ZSBoYXZlIHRvIHNlbmQuCiAJICovCiAJYWRkcl9ieXRlc1swXSA9ICh1OCkoKGFkZHIgPj4gIDApICYgMHgwMDAwMDBGRik7CiAJYWRkcl9ieXRlc1sxXSA9ICh1OCkoKGFkZHIgPj4gIDgpICYgMHgwMDAwMDBGRik7CkBAIC00MjEsMTMgKzQyMSwxMyBAQAogCQltc2cuZGF0YSAgICAgID0gYWRkcl9ieXRlc1thbGVuXTsKIAkJaWYgKGkyY190cmFuc2ZlcigmbXNnKSkgcmV0dXJuIC0xOwogCX0KLQkJCisKIAkvKiB3cml0ZSBieXRlczsgc2VuZCBOQUNLIGF0IGxhc3QgYnl0ZSAqLwogCXdoaWxlIChsZW4tLSkgewogCiAJCVBSSU5URCgoImkyY193cml0ZTogd3JpdGluZyBieXRlICgweCUwOHgpPTB4JTAyeFxuIiwodW5zaWduZWQgaW50KWJ1ZmZlciwqYnVmZmVyKSk7CiAKLQkJaWYgKGxlbj09MCkgCisJCWlmIChsZW49PTApCiAJCQltc2cuY29uZGl0aW9uID0gSTJDX0NPTkRfU1RPUDsKIAkJZWxzZQogCQkJbXNnLmNvbmRpdGlvbiA9IEkyQ19DT05EX05PUk1BTDsKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQltc2cuYWNrbmFjayAgID0gSTJDX0FDS05BS19XQUlUQUNLOwogCQltc2cuZGlyZWN0aW9uID0gSTJDX1dSSVRFOwogCQltc2cuZGF0YSAgICAgID0gKihidWZmZXIrKyk7Ci0JCQorCiAJCWlmIChpMmNfdHJhbnNmZXIoJm1zZykpIHJldHVybiAtMTsKIAogCX0KZGlmZiAtLWdpdCBhL2NwdS9weGEvaW50ZXJydXB0cy5jIGIvY3B1L3B4YS9pbnRlcnJ1cHRzLmMKaW5kZXggYWY3ZDYzNC4uY2Y1MjlmNCAxMDA2NDQKLS0tIGEvY3B1L3B4YS9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L3B4YS9pbnRlcnJ1cHRzLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNlbmRpZgogCiAKLQogdm9pZCBiYWRfbW9kZSAodm9pZCkKIHsKIAlwYW5pYyAoIlJlc2V0dGluZyBDUFUgLi4uXG4iKTsKZGlmZiAtLWdpdCBhL2NwdS9weGEvbW1jLmMgYi9jcHUvcHhhL21tYy5jCmluZGV4IDc4M2U5MGMuLjllNmUxZTMgMTAwNjQ0Ci0tLSBhL2NwdS9weGEvbW1jLmMKKysrIGIvY3B1L3B4YS9tbWMuYwpAQCAtMzIsNyArMzIsNyBAQAogZXh0ZXJuIGludAogZmF0X3JlZ2lzdGVyX3JlYWQoaW50KCpibG9ja19yZWFkKShpbnQgZGV2aWNlLCB1bG9uZyBibGtuciwgdWxvbmcgYmxrY250LCB1Y2hhciAqYnVmZmVyKSk7CiAKLS8qIAorLyoKICAqIEZJWE1FIG5lZWRzIHRvIHJlYWQgY2lkIGFuZCBjc2QgaW5mbyB0byBkZXRlcm1pbmUgYmxvY2sgc2l6ZQogICogYW5kIG90aGVyIHBhcmFtZXRlcnMKICAqLwpAQCAtNDEsNyArNDEsNyBAQAogc3RhdGljIGludCBtbWNfcmVhZHkgPSAwOwogCiAKLXN0YXRpYyB1Y2hhciAqIAorc3RhdGljIHVjaGFyICoKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogbW1jX2NtZCh1c2hvcnQgY21kLCB1c2hvcnQgYXJnaCwgdXNob3J0IGFyZ2wsIHVzaG9ydCBjbWRhdCkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTQsNyArNTQsNyBAQAogCU1NQ19TVFJQQ0wgPSBNTUNfU1RSUENMX1NUT1BfQ0xLOwogCU1NQ19JX01BU0sgPSB+TU1DX0lfTUFTS19DTEtfSVNfT0ZGOwogCXdoaWxlICghKE1NQ19JX1JFRyAmIE1NQ19JX1JFR19DTEtfSVNfT0ZGKSk7Ci0JTU1DX0NNRCAgICA9IGNtZDsgCisJTU1DX0NNRCAgICA9IGNtZDsKIAlNTUNfQVJHSCAgID0gYXJnaDsKIAlNTUNfQVJHTCAgID0gYXJnbDsKIAlNTUNfQ01EQVQgID0gY21kYXQ7CkBAIC03MywxMSArNzMsMTEgQEAKIAl7CiAJCWNhc2UgTU1DX0NNREFUX1IxOgogCQljYXNlIE1NQ19DTURBVF9SMzoKLQkJCXdvcmRzID0gMzsgCisJCQl3b3JkcyA9IDM7CiAJCQlicmVhazsKIAogCQljYXNlIE1NQ19DTURBVF9SMjoKLQkJCXdvcmRzID0gODsgCisJCQl3b3JkcyA9IDg7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMTMwLDEwICsxMzAsMTAgQEAKIAlNTUNfUkRUTyA9IDB4ZmZmZjsKIAlNTUNfTk9CID0gMTsKIAlNTUNfQkxLTEVOID0gbGVuOwotCXJlc3AgPSBtbWNfY21kKE1NQ19DTURfUkVBRF9CTE9DSywgYXJnaCwgYXJnbCwgCisJcmVzcCA9IG1tY19jbWQoTU1DX0NNRF9SRUFEX0JMT0NLLCBhcmdoLCBhcmdsLAogCQkJTU1DX0NNREFUX1IxfE1NQ19DTURBVF9SRUFEfE1NQ19DTURBVF9CTE9DS3xNTUNfQ01EQVRfREFUQV9FTik7CiAKLQkKKwogCU1NQ19JX01BU0sgPSB+TU1DX0lfTUFTS19SWEZJRk9fUkRfUkVROwogCXdoaWxlIChsZW4pCiAJewpAQCAtMTg4LDkgKzE4OCw5IEBACiAJTU1DX1NUUlBDTCA9IE1NQ19TVFJQQ0xfU1RPUF9DTEs7CiAJTU1DX05PQiA9IDE7CiAJTU1DX0JMS0xFTiA9IGxlbjsKLQlyZXNwID0gbW1jX2NtZChNTUNfQ01EX1dSSVRFX0JMT0NLLCBhcmdoLCBhcmdsLCAKKwlyZXNwID0gbW1jX2NtZChNTUNfQ01EX1dSSVRFX0JMT0NLLCBhcmdoLCBhcmdsLAogCQkJTU1DX0NNREFUX1IxfE1NQ19DTURBVF9XUklURXxNTUNfQ01EQVRfQkxPQ0t8TU1DX0NNREFUX0RBVEFfRU4pOwotCQorCiAJTU1DX0lfTUFTSyA9IH5NTUNfSV9NQVNLX1RYRklGT19XUl9SRVE7CiAJd2hpbGUgKGxlbikKIAl7CkBAIC0zNzksNyArMzc5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IAoraW50CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIG1tY19icmVhZChpbnQgZGV2X251bSwgdWxvbmcgYmxrbnIsIHVsb25nIGJsa2NudCwgdWNoYXIgKmRzdCkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDA4LDcgKzQwOCw3IEBACiAJbW1jX2NzZC5jX3NpemUgPSAwOwogCiAJTU1DX0NMS1JUICA9IE1NQ19DTEtSVF8wXzMxMjVNSFo7Ci0JTU1DX1JFU1RPICA9IE1NQ19SRVNfVE9fTUFYOyAKKwlNTUNfUkVTVE8gID0gTU1DX1JFU19UT19NQVg7CiAJTU1DX1NQSSAgICA9IE1NQ19TUElfRElTQUJMRTsKIAogCS8qIHJlc2V0ICovCkBAIC00MzEsMTIgKzQzMSwxMiBAQAogCQlpZiAodmVyYm9zZSkKIAkJewogCQkJcHJpbnRmKCJNTUMgZm91bmQuIENhcmQgZGVzY2lwdGlvbiBpczpcbiIpOwotCQkJcHJpbnRmKCJNYW51ZmFjdHVyZXIgSUQgPSAlMDJ4JTAyeCUwMnhcbiIsIAorCQkJcHJpbnRmKCJNYW51ZmFjdHVyZXIgSUQgPSAlMDJ4JTAyeCUwMnhcbiIsCiAJCQkJCQkJY2lkLT5pZFswXSwgY2lkLT5pZFsxXSwgY2lkLT5pZFsyXSk7CiAJCQlwcmludGYoIkhXL0ZXIFJldmlzaW9uID0gJXggJXhcbiIsY2lkLT5od3JldiwgY2lkLT5md3Jldik7CiAJCQljaWQtPmh3cmV2ID0gY2lkLT5md3JldiA9IDA7CS8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwogCQkJcHJpbnRmKCJQcm9kdWN0IE5hbWUgPSAlc1xuIixjaWQtPm5hbWUpOwotCQkJcHJpbnRmKCJTZXJpYWwgTnVtYmVyID0gJTAyeCUwMnglMDJ4XG4iLCAKKwkJCXByaW50ZigiU2VyaWFsIE51bWJlciA9ICUwMnglMDJ4JTAyeFxuIiwKIAkJCQkJCQljaWQtPnNuWzBdLCBjaWQtPnNuWzFdLCBjaWQtPnNuWzJdKTsKIAkJCXByaW50ZigiTW9udGggPSAlZFxuIixjaWQtPm1vbnRoKTsKIAkJCXByaW50ZigiWWVhciA9ICVkXG4iLDE5OTcgKyBjaWQtPnllYXIpOwpkaWZmIC0tZ2l0IGEvY3B1L3B4YS9weGFmYi5jIGIvY3B1L3B4YS9weGFmYi5jCmluZGV4IGY2YTI1NzUuLmVmNjBkNGEgMTAwNjQ0Ci0tLSBhL2NwdS9weGEvcHhhZmIuYworKysgYi9jcHUvcHhhL3B4YWZiLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogI3VuZGVmIENPTkZJR19MQ0RfTE9HTwogCi0jZGVmaW5lIExDRF9URVNUX1BBVFRFUk4gCisjZGVmaW5lIExDRF9URVNUX1BBVFRFUk4KIC8qICNkZWZpbmUgTENEX1RFU1RfUEFUVEVSTiAqLwkvKiBjb2xvciBiYWNrZ25kIGZvciBmcmFtZS9jb2xvciBhZGp1c3QgKi8KIC8qICNkZWZpbmUgQ0ZHX0lOVkVSVF9DT0xPUlMgKi8JLyogTm90IG5lZWRlZCAtIGFkanVzdCB2bF9kcCBpbnN0ZWFkIAkqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE2MywzMSArMTYzLDMxIEBACiAKIC8qIHlvdSBoYXZlIHRvIHNldCBsY2NyMCBhbmQgbGNjcjMgKGluY2x1ZGluZyBwY2QpICovCiAjZGVmaW5lIFJFR19MQ0NSMAkweDAwMzAwOGY4Ci0jZGVmaW5lIFJFR19MQ0NSMwkweDAzMDBGRjAxIAorI2RlZmluZSBSRUdfTENDUjMJMHgwMzAwRkYwMQogCiAvKiA2NDB4NDgweDE2IEAgNjEgSHogKi8KIHN0YXRpYyB2aWRpbmZvX3QgcGFuZWxfaW5mbyA9IHsKLQl2bF9jb2w6IAk2NDAsIAorCXZsX2NvbDogCTY0MCwKIAl2bF9yb3c6IAk0ODAsCiAJdmxfd2lkdGg6IAk2NDAsCiAJdmxfaGVpZ2h0OiAJNDgwLAogCXZsX2Nsa3A6IAlDRkdfSElHSCwKLSAgICAgICAgdmxfb2VwOiAJQ0ZHX0hJR0gsICAgCisJdmxfb2VwOiAJQ0ZHX0hJR0gsCiAJdmxfaHNwOiAJQ0ZHX0hJR0gsCi0gICAgCXZsX3ZzcDogCUNGR19ISUdILAotICAgIAl2bF9kcDogCQlDRkdfSElHSCwKLSAgICAJdmxfYnBpeDogCUxDRF9CUFAsCi0gICAgCXZsX2xidzogCTAsCisJdmxfdnNwOiAJQ0ZHX0hJR0gsCisJdmxfZHA6IAkJQ0ZHX0hJR0gsCisJdmxfYnBpeDogCUxDRF9CUFAsCisJdmxfbGJ3OiAJMCwKIAl2bF9zcGx0OiAJMCwKLSAgICAJdmxfY2xvcjogCTAsCisJdmxfY2xvcjogCTAsCiAJdmxfbGNkYWM6IAkwLAotICAgIAl2bF90ZnQ6IAkxLAotICAgIAl2bF9ocHc6IAk0MCwKLSAgICAJdmxfYmx3OiAJNTYsCi0gICAgCXZsX2VsdzogCTU2LAotICAgIAl2bF92cHc6IAkyMCwKLSAgICAJdmxfYmZ3OiAJOCwKLSAgICAJdmxfZWZ3OiAJOCwKKwl2bF90ZnQ6IAkxLAorCXZsX2hwdzogCTQwLAorCXZsX2JsdzogCTU2LAorCXZsX2VsdzogCTU2LAorCXZsX3ZwdzogCTIwLAorCXZsX2JmdzogCTgsCisJdmxfZWZ3OiAJOCwKIH07CiAjZW5kaWYgLyogQ09ORklHX1BYQV9WSURFTyAqLwogCkBAIC0xOTgsMzAgKzE5OCwzMCBAQAogCiAvKiB5b3UgaGF2ZSB0byBzZXQgbGNjcjAgYW5kIGxjY3IzIChpbmNsdWRpbmcgcGNkKSAqLwogI2RlZmluZSBSRUdfTENDUjAJMHgwMDMwMDg3QwotI2RlZmluZSBSRUdfTENDUjMJMHgwMzQwRkYwOCAKKyNkZWZpbmUgUkVHX0xDQ1IzCTB4MDM0MEZGMDgKIAogc3RhdGljIHZpZGluZm9fdCBwYW5lbF9pbmZvID0gewotCXZsX2NvbDogCTY0MCwgCisJdmxfY29sOiAJNjQwLAogCXZsX3JvdzogCTQ4MCwKIAl2bF93aWR0aDogCTE1NywKIAl2bF9oZWlnaHQ6IAkxMTgsCiAJdmxfY2xrcDogCUNGR19ISUdILAotICAgICAgICB2bF9vZXA6IAlDRkdfSElHSCwgICAKKwl2bF9vZXA6IAlDRkdfSElHSCwKIAl2bF9oc3A6IAlDRkdfSElHSCwKLSAgICAJdmxfdnNwOiAJQ0ZHX0hJR0gsCi0gICAgCXZsX2RwOiAJCUNGR19ISUdILAotICAgIAl2bF9icGl4OiAJTENEX0JQUCwKLSAgICAJdmxfbGJ3OiAJMCwKKwl2bF92c3A6IAlDRkdfSElHSCwKKwl2bF9kcDogCQlDRkdfSElHSCwKKwl2bF9icGl4OiAJTENEX0JQUCwKKwl2bF9sYnc6IAkwLAogCXZsX3NwbHQ6IAkxLAotICAgIAl2bF9jbG9yOiAJMSwKKwl2bF9jbG9yOiAJMSwKIAl2bF9sY2RhYzogCTAsCi0gICAgCXZsX3RmdDogCTAsCi0gICAgCXZsX2hwdzogCTEsCi0gICAgCXZsX2JsdzogCTMsCi0gICAgCXZsX2VsdzogCTMsCi0gICAgCXZsX3ZwdzogCTEsCi0gICAgCXZsX2JmdzogCTAsCi0gICAgCXZsX2VmdzogCTAsCisJdmxfdGZ0OiAJMCwKKwl2bF9ocHc6IAkxLAorCXZsX2JsdzogCTMsCisJdmxfZWx3OiAJMywKKwl2bF92cHc6IAkxLAorCXZsX2JmdzogCTAsCisJdmxfZWZ3OiAJMCwKIH07CiAjZW5kaWYgLyogQ09ORklHX1NIQVJQX0xNOFYzMSAqLwogCkBAIC03MjEsNyArNzIxLDcgQEAKIAogc3RhdGljIHZvaWQgbGNkX2N0cmxfaW5pdCAodm9pZCAqbGNkYmFzZSkKIHsKLSAgIAlweGFmYl9pbml0X21lbShsY2RiYXNlLCAmcGFuZWxfaW5mbyk7CisJcHhhZmJfaW5pdF9tZW0obGNkYmFzZSwgJnBhbmVsX2luZm8pOwogCXB4YWZiX2luaXQoJnBhbmVsX2luZm8pOwogCXB4YWZiX3NldHVwX2dwaW8oJnBhbmVsX2luZm8pOwogCXB4YWZiX2VuYWJsZV9jb250cm9sbGVyKCZwYW5lbF9pbmZvKTsKQEAgLTc0NSw3ICs3NDUsNyBAQAogCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSAmcGFuZWxfaW5mby5weGE7CiAJdW5zaWduZWQgc2hvcnQgKnBhbGV0dGUgPSAodW5zaWduZWQgc2hvcnQgKilmYmktPnBhbGV0dGU7CiAJdV9pbnQgdmFsOwotICAgCQorCiAJaWYgKHJlZ25vIDwgZmJpLT5wYWxldHRlX3NpemUpIHsKIAkJdmFsID0gKChyZWQgPDwgOCkgJiAweGY4MDApOwogCQl2YWwgfD0gKChncmVlbiA8PCA0KSAmIDB4MDdlMCk7CkBAIC0xMDExLDE4ICsxMDExLDE4IEBACiAJCUxDQ1IxX0hvclNuY2hXZHRoKHZpZC0+dmxfaHB3KSArCiAJCUxDQ1IxX0JlZ0xuRGVsKHZpZC0+dmxfYmx3KSArCiAJCUxDQ1IxX0VuZExuRGVsKHZpZC0+dmxfZWx3KTsKLQkJCisKIAlmYmktPnJlZ19sY2NyMiA9CiAJCUxDQ1IyX0Rpc0hnaHQodmlkLT52bF9yb3cpICsKIAkJTENDUjJfVnJ0U25jaFdkdGgodmlkLT52bF92cHcpICsKIAkJTENDUjJfQmVnRnJtRGVsKHZpZC0+dmxfYmZ3KSArCiAJCUxDQ1IyX0VuZEZybURlbCh2aWQtPnZsX2Vmdyk7CiAKLQlmYmktPnJlZ19sY2NyMyA9IFJFR19MQ0NSMyAmIH4oTENDUjNfSFNQIHwgTENDUjNfVlNQKTsgCi0JZmJpLT5yZWdfbGNjcjMgfD0gCi0JCSAgKHZpZC0+dmxfaHNwID8gTENDUjNfSG9yU25jaEwgOiBMQ0NSM19Ib3JTbmNoSCkgCisJZmJpLT5yZWdfbGNjcjMgPSBSRUdfTENDUjMgJiB+KExDQ1IzX0hTUCB8IExDQ1IzX1ZTUCk7CisJZmJpLT5yZWdfbGNjcjMgfD0KKwkJICAodmlkLT52bF9oc3AgPyBMQ0NSM19Ib3JTbmNoTCA6IExDQ1IzX0hvclNuY2hIKQogCQl8ICh2aWQtPnZsX3ZzcCA/IExDQ1IzX1ZydFNuY2hMIDogTENDUjNfVnJ0U25jaEgpOwotCQkKKwogCiAJLyogc2V0dXAgZG1hIGRlc2NyaXB0b3JzICovCiAJZmJpLT5kbWFkZXNjX2ZibG93ID0gKHN0cnVjdCBweGFmYl9kbWFfZGVzY3JpcHRvciAqKSgodW5zaWduZWQgaW50KWZiaS0+cGFsZXR0ZSAtIDMqMTYpOwpAQCAtMTAzMCw5ICsxMDMwLDkgQEAKIAlmYmktPmRtYWRlc2NfcGFsZXR0ZSA9IChzdHJ1Y3QgcHhhZmJfZG1hX2Rlc2NyaXB0b3IgKikoKHVuc2lnbmVkIGludClmYmktPnBhbGV0dGUgLSAxKjE2KTsKIAogCSNkZWZpbmUgQllURVNfUEVSX1BBTkVMCSgoZmJpLT5yZWdfbGNjcjAgJiBMQ0NSMF9TRFMpID8gXAotCSAgICAgIAkodmlkLT52bF9jb2wgKiB2aWQtPnZsX3JvdyAqIE5CSVRTKHZpZC0+dmxfYnBpeCkgLyA4IC8gMikgOiBcCi0JICAgIAkodmlkLT52bF9jb2wgKiB2aWQtPnZsX3JvdyAqIE5CSVRTKHZpZC0+dmxfYnBpeCkgLyA4KSkKLQkKKwkJKHZpZC0+dmxfY29sICogdmlkLT52bF9yb3cgKiBOQklUUyh2aWQtPnZsX2JwaXgpIC8gOCAvIDIpIDogXAorCQkodmlkLT52bF9jb2wgKiB2aWQtPnZsX3JvdyAqIE5CSVRTKHZpZC0+dmxfYnBpeCkgLyA4KSkKKwogCS8qIHBvcHVsYXRlIGRlc2NyaXB0b3JzICovCiAJZmJpLT5kbWFkZXNjX2ZibG93LT5mZGFkciA9ICh1X2xvbmcpZmJpLT5kbWFkZXNjX2ZibG93OwogCWZiaS0+ZG1hZGVzY19mYmxvdy0+ZnNhZHIgPSBmYmktPnNjcmVlbiArIEJZVEVTX1BFUl9QQU5FTDsKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJZmJpLT5kbWFkZXNjX2ZibG93LT5sZGNtZCA9IEJZVEVTX1BFUl9QQU5FTDsKIAogCWZiaS0+ZmRhZHIxID0gKHVfbG9uZylmYmktPmRtYWRlc2NfZmJsb3c7IC8qIG9ubHkgdXNlZCBpbiBkdWFsLXBhbmVsIG1vZGUgKi8KLQkJCisKIAlmYmktPmRtYWRlc2NfZmJoaWdoLT5mc2FkciA9IGZiaS0+c2NyZWVuOwogCWZiaS0+ZG1hZGVzY19mYmhpZ2gtPmZpZHIgPSAwOwogCWZiaS0+ZG1hZGVzY19mYmhpZ2gtPmxkY21kID0gQllURVNfUEVSX1BBTkVMOwpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAkJZmJpLT5kbWFkZXNjX3BhbGV0dGUtPmZkYWRyID0gKHVfbG9uZylmYmktPmRtYWRlc2NfZmJoaWdoOwogCQlmYmktPmRtYWRlc2NfZmJoaWdoLT5mZGFkciA9ICh1X2xvbmcpZmJpLT5kbWFkZXNjX3BhbGV0dGU7CiAJCS8qIGZsaXBzIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gcGFsIGFuZCBmYmhpZ2ggKi8KLQkJZmJpLT5mZGFkcjAgPSAodV9sb25nKWZiaS0+ZG1hZGVzY19wYWxldHRlOyAKKwkJZmJpLT5mZGFkcjAgPSAodV9sb25nKWZiaS0+ZG1hZGVzY19wYWxldHRlOwogCX0KIAllbHNlCiAJewpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAlkZWJ1ZygiZmJpLT5kbWFkZXNjX2ZibG93LT5sZGNtZCA9IDB4JWx4XG4iLCBmYmktPmRtYWRlc2NfZmJsb3ctPmxkY21kKTsKIAlkZWJ1ZygiZmJpLT5kbWFkZXNjX2ZiaGlnaC0+bGRjbWQgPSAweCVseFxuIiwgZmJpLT5kbWFkZXNjX2ZiaGlnaC0+bGRjbWQpOwogCWRlYnVnKCJmYmktPmRtYWRlc2NfcGFsZXR0ZS0+bGRjbWQgPSAweCVseFxuIiwgZmJpLT5kbWFkZXNjX3BhbGV0dGUtPmxkY21kKTsKLQkKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9jcHUvcHhhL3N0YXJ0LlMgYi9jcHUvcHhhL3N0YXJ0LlMKaW5kZXggOTViMzBlNC4uYzJiNzVkYSAxMDA2NDQKLS0tIGEvY3B1L3B4YS9zdGFydC5TCisrKyBiL2NwdS9weGEvc3RhcnQuUwpAQCAtODYsOCArODYsOCBAQAogLyoKICAqIFRoaXMgaXMgZGVmaW5lZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMgbGlua2VyIHNjcmlwdAogICovCi0uZ2xvYmwgX2Jzc19zdGFydAkKLV9ic3Nfc3RhcnQ6CQorLmdsb2JsIF9ic3Nfc3RhcnQKK19ic3Nfc3RhcnQ6CiAJLndvcmQgYnNzX3N0YXJ0CiAKIC5nbG9ibCBfYnNzX2VuZApAQCAtMTM4LDcgKzEzOCw3IEBACiAKIHJlbG9jYXRlOgkJCQkvKiByZWxvY2F0ZSBVLUJvb3QgdG8gUkFNCSAgICAqLwogCWFkcglyMCwgX3N0YXJ0CQkvKiByMCA8LSBjdXJyZW50IHBvc2l0aW9uIG9mIGNvZGUgICAqLwotCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8JCisJbGRyCXIxLCBfVEVYVF9CQVNFCQkvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSAqLwogCWNtcCAgICAgcjAsIHIxICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnICAgICAgICAgKi8KIAliZXEgICAgIHN0YWNrX3NldHVwCiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4gICAgICAgICAgICAgICAgICAgICovCiAJYWRkCXIwLCByMCwgIzQKIAljbXAJcjAsIHIxCi0JYm5lCWNsYnNzX2wJIAorCWJuZQljbGJzc19sCiAKIAogCWxkcglwYywgX3N0YXJ0X2FybWJvb3QKQEAgLTQ3MSw0ICs0NzEsMyBAQAogcmVzZXRfZW5kbGVzczoKIAogCWIJcmVzZXRfZW5kbGVzcwotCmRpZmYgLS1naXQgYS9jcHUvc2ExMTAwL2ludGVycnVwdHMuYyBiL2NwdS9zYTExMDAvaW50ZXJydXB0cy5jCmluZGV4IGJlNTI4NDkuLjc1ZjkzOWMgMTAwNjQ0Ci0tLSBhL2NwdS9zYTExMDAvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9zYTExMDAvaW50ZXJydXB0cy5jCkBAIC03NSw3ICs3NSw2IEBACiAjZW5kaWYKIAogCi0KIHZvaWQgYmFkX21vZGUgKHZvaWQpCiB7CiAJcGFuaWMgKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CmRpZmYgLS1naXQgYS9jcHUvc2ExMTAwL3N0YXJ0LlMgYi9jcHUvc2ExMTAwL3N0YXJ0LlMKaW5kZXggYzBmMzBmNS4uODJmMDk0YSAxMDA2NDQKLS0tIGEvY3B1L3NhMTEwMC9zdGFydC5TCisrKyBiL2NwdS9zYTExMDAvc3RhcnQuUwpAQCAtMjYsNyArMjYsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCkBAIC0yNDIsOCArMjQxLDYgQEAKIAltb3YJcGMsIGxyCiAKIAotCi0KIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoK