LyoKCiAgICBidHR2LWNhcmRzLmMKCiAgICB0aGlzIGZpbGUgaGFzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25zIC0gY2FyZC1zcGVjaWZpYyBzdHVmZgogICAgbGlrZSB0aGUgYmlnIHR2Y2FyZHMgYXJyYXkgZm9yIHRoZSBtb3N0IHBhcnQKCiAgICBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTggUmFscGggIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgKGMpIDE5OTktMjAwMSBHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgoKKi8KCiNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgojaW5jbHVkZSA8bGludXgva21vZC5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvcGNpLmg+CiNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgoKI2luY2x1ZGUgPGFzbS9pby5oPgoKI2luY2x1ZGUgImJ0dHZwLmgiCiNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgojaW5jbHVkZSA8bWVkaWEvdHZhdWRpby5oPgoKLyogZndkIGRlY2wgKi8Kc3RhdGljIHZvaWQgYm9vdF9tc3AzNHh4KHN0cnVjdCBidHR2ICpidHYsIGludCBwaW4pOwpzdGF0aWMgdm9pZCBib290X2J0ODMyKHN0cnVjdCBidHR2ICpidHYpOwpzdGF0aWMgdm9pZCBoYXVwcGF1Z2VfZWVwcm9tKHN0cnVjdCBidHR2ICpidHYpOwpzdGF0aWMgdm9pZCBhdmVybWVkaWFfZWVwcm9tKHN0cnVjdCBidHR2ICpidHYpOwpzdGF0aWMgdm9pZCBvc3ByZXlfZWVwcm9tKHN0cnVjdCBidHR2ICpidHYpOwpzdGF0aWMgdm9pZCBtb2R0ZWNfZWVwcm9tKHN0cnVjdCBidHR2ICpidHYpOwpzdGF0aWMgdm9pZCBpbml0X1BYQzIwMChzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIHZvaWQgaW5pdF9SVFYyNChzdHJ1Y3QgYnR0diAqYnR2KTsKCnN0YXRpYyB2b2lkIHdpbnZpZXdfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKc3RhdGljIHZvaWQgbHQ5NDE1X2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCk7CnN0YXRpYyB2b2lkIGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwKCQkJCSAgICBpbnQgc2V0KTsKc3RhdGljIHZvaWQgYXZlcm1lZGlhX3R2X3N0ZXJlb19hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsCgkJCQkgICAgICBpbnQgc2V0KTsKc3RhdGljIHZvaWQgdGVycmF0dl9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpzdGF0aWMgdm9pZCBndmJjdHYzcGNpX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCk7CnN0YXRpYyB2b2lkIGd2YmN0djVwY2lfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKc3RhdGljIHZvaWQgd2luZmFzdDIwMDBfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKc3RhdGljIHZvaWQgcHZidDg3OHA5Yl9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpzdGF0aWMgdm9pZCBmdjIwMDBzX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCk7CnN0YXRpYyB2b2lkIHdpbmR2cl9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpzdGF0aWMgdm9pZCBhZHR2azUwM19hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpOwpzdGF0aWMgdm9pZCBydjYwNV9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKc3RhdGljIHZvaWQgZWFnbGVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CnN0YXRpYyB2b2lkIHhndWFyZF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKc3RhdGljIHZvaWQgaXZjMTIwX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwpzdGF0aWMgdm9pZCBndmMxMTAwX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwoKc3RhdGljIHZvaWQgUFhDMjAwX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwoKc3RhdGljIHZvaWQgcGljb2xvX3RldHJhX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwpzdGF0aWMgdm9pZCBwaWNvbG9fdGV0cmFfaW5pdChzdHJ1Y3QgYnR0diAqYnR2KTsKCnN0YXRpYyB2b2lkIHRpYmV0Q1MxNl9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKc3RhdGljIHZvaWQgdGliZXRDUzE2X2luaXQoc3RydWN0IGJ0dHYgKmJ0dik7CgpzdGF0aWMgdm9pZCBrb2RpY29tNDQwMHJfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CnN0YXRpYyB2b2lkIGtvZGljb200NDAwcl9pbml0KHN0cnVjdCBidHR2ICpidHYpOwoKc3RhdGljIHZvaWQgc2lnbWFTTENfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CnN0YXRpYyB2b2lkIHNpZ21hU1FfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CgpzdGF0aWMgaW50IHRlcnJhdGVjX2FjdGl2ZV9yYWRpb191cGdyYWRlKHN0cnVjdCBidHR2ICpidHYpOwpzdGF0aWMgaW50IHRlYTU3NTdfcmVhZChzdHJ1Y3QgYnR0diAqYnR2KTsKc3RhdGljIGludCB0ZWE1NzU3X3dyaXRlKHN0cnVjdCBidHR2ICpidHYsIGludCB2YWx1ZSk7CnN0YXRpYyB2b2lkIGlkZW50aWZ5X2J5X2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2LAoJCQkgICAgICAgdW5zaWduZWQgY2hhciBlZXByb21fZGF0YVsyNTZdKTsKc3RhdGljIGludCBfX2RldmluaXQgcHZyX2Jvb3Qoc3RydWN0IGJ0dHYgKmJ0dik7CgovKiBjb25maWcgdmFyaWFibGVzICovCnN0YXRpYyB1bnNpZ25lZCBpbnQgdHJpdG9uMTsKc3RhdGljIHVuc2lnbmVkIGludCB2c2Z4OwpzdGF0aWMgdW5zaWduZWQgaW50IGxhdGVuY3kgPSBVTlNFVDsKaW50IG5vX292ZXJsYXk9LTE7CgpzdGF0aWMgdW5zaWduZWQgaW50IGNhcmRbQlRUVl9NQVhdICAgPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9OwpzdGF0aWMgdW5zaWduZWQgaW50IHBsbFtCVFRWX01BWF0gICAgPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9OwpzdGF0aWMgdW5zaWduZWQgaW50IHR1bmVyW0JUVFZfTUFYXSAgPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9OwpzdGF0aWMgdW5zaWduZWQgaW50IHN2aHNbQlRUVl9NQVhdICAgPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9OwpzdGF0aWMgdW5zaWduZWQgaW50IHJlbW90ZVtCVFRWX01BWF0gPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9OwpzdGF0aWMgc3RydWN0IGJ0dHYgICptYXN0ZXJbQlRUVl9NQVhdID0geyBbIDAgLi4uIChCVFRWX01BWC0xKSBdID0gTlVMTCB9OwojaWZkZWYgTU9EVUxFCnN0YXRpYyB1bnNpZ25lZCBpbnQgYXV0b2xvYWQgPSAxOwojZWxzZQpzdGF0aWMgdW5zaWduZWQgaW50IGF1dG9sb2FkOwojZW5kaWYKc3RhdGljIHVuc2lnbmVkIGludCBncGlvbWFzayA9IFVOU0VUOwpzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvYWxsID0gVU5TRVQ7CnN0YXRpYyB1bnNpZ25lZCBpbnQgYXVkaW9tdXhbNV0gPSB7IFsgMCAuLi4gNCBdID0gVU5TRVQgfTsKCi8qIGluc21vZCBvcHRpb25zICovCm1vZHVsZV9wYXJhbSh0cml0b24xLCAgICBpbnQsIDA0NDQpOwptb2R1bGVfcGFyYW0odnNmeCwgICAgICAgaW50LCAwNDQ0KTsKbW9kdWxlX3BhcmFtKG5vX292ZXJsYXksIGludCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbShsYXRlbmN5LCAgICBpbnQsIDA0NDQpOwptb2R1bGVfcGFyYW0oZ3Bpb21hc2ssICAgaW50LCAwNDQ0KTsKbW9kdWxlX3BhcmFtKGF1ZGlvYWxsLCAgIGludCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbShhdXRvbG9hZCwgICBpbnQsIDA0NDQpOwoKbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsICAgICBpbnQsIE5VTEwsIDA0NDQpOwptb2R1bGVfcGFyYW1fYXJyYXkocGxsLCAgICAgIGludCwgTlVMTCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbV9hcnJheSh0dW5lciwgICAgaW50LCBOVUxMLCAwNDQ0KTsKbW9kdWxlX3BhcmFtX2FycmF5KHN2aHMsICAgICBpbnQsIE5VTEwsIDA0NDQpOwptb2R1bGVfcGFyYW1fYXJyYXkocmVtb3RlLCAgIGludCwgTlVMTCwgMDQ0NCk7Cm1vZHVsZV9wYXJhbV9hcnJheShhdWRpb211eCwgaW50LCBOVUxMLCAwNDQ0KTsKCk1PRFVMRV9QQVJNX0RFU0ModHJpdG9uMSwic2V0IEVUQkYgcGNpIGNvbmZpZyBiaXQgIgoJCSAiW2VuYWJsZSBidWcgY29tcGF0aWJpbGl0eSBmb3IgdHJpdG9uMSArIG90aGVyc10iKTsKTU9EVUxFX1BBUk1fREVTQyh2c2Z4LCJzZXQgVlNGWCBwY2kgY29uZmlnIGJpdCAiCgkJICJbeWV0IGFub3RoZXIgY2hpcHNldCBmbGF3IHdvcmthcm91bmRdIik7Ck1PRFVMRV9QQVJNX0RFU0MobGF0ZW5jeSwicGNpIGxhdGVuY3kgdGltZXIiKTsKTU9EVUxFX1BBUk1fREVTQyhjYXJkLCJzcGVjaWZ5IFRWL2dyYWJiZXIgY2FyZCBtb2RlbCwgc2VlIENBUkRMSVNUIGZpbGUgZm9yIGEgbGlzdCIpOwpNT0RVTEVfUEFSTV9ERVNDKHBsbCwic3BlY2lmeSBpbnN0YWxsZWQgY3J5c3RhbCAoMD1ub25lLCAyOD0yOCBNSHosIDM1PTM1IE1IeikiKTsKTU9EVUxFX1BBUk1fREVTQyh0dW5lciwic3BlY2lmeSBpbnN0YWxsZWQgdHVuZXIgdHlwZSIpOwpNT0RVTEVfUEFSTV9ERVNDKGF1dG9sb2FkLCJhdXRvbWF0aWNhbGx5IGxvYWQgaTJjIG1vZHVsZXMgbGlrZSB0dW5lci5vLCBkZWZhdWx0IGlzIDEgKHllcykiKTsKTU9EVUxFX1BBUk1fREVTQyhub19vdmVybGF5LCJhbGxvdyBvdmVycmlkZSBvdmVybGF5IGRlZmF1bHQgKDAgZGlzYWJsZXMsIDEgZW5hYmxlcykiCgkJIiBbc29tZSBWSUEvU0lTIGNoaXBzZXRzIGFyZSBrbm93biB0byBoYXZlIHByb2JsZW0gd2l0aCBvdmVybGF5XSIpOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogbGlzdCBvZiBjYXJkIElEcyBmb3IgYnQ4NzgrIGNhcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCnN0YXRpYyBzdHJ1Y3QgQ0FSRCB7Cgl1bnNpZ25lZCBpZDsKCWludCBjYXJkbnI7CgljaGFyICpuYW1lOwp9IGNhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKCXsgMHgxM2ViMDA3MCwgQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzgsICAiSGF1cHBhdWdlIFdpblRWIiB9LAoJeyAweDM5MDAwMDcwLCBCVFRWX0JPQVJEX0hBVVBQQVVHRTg3OCwgICJIYXVwcGF1Z2UgV2luVFYtRCIgfSwKCXsgMHg0NTAwMDA3MCwgQlRUVl9CT0FSRF9IQVVQUEFVR0VQVlIsICAiSGF1cHBhdWdlIFdpblRWL1BWUiIgfSwKCXsgMHhmZjAwMDA3MCwgQlRUVl9CT0FSRF9PU1BSRVkxeDAsICAgICAiT3NwcmV5LTEwMCIgfSwKCXsgMHhmZjAxMDA3MCwgQlRUVl9CT0FSRF9PU1BSRVkyeDBfU1ZJRCwiT3NwcmV5LTIwMCIgfSwKCXsgMHhmZjAyMDA3MCwgQlRUVl9CT0FSRF9PU1BSRVk1MDAsICAgICAiT3NwcmV5LTUwMCIgfSwKCXsgMHhmZjAzMDA3MCwgQlRUVl9CT0FSRF9PU1BSRVkyMDAwLCAgICAiT3NwcmV5LTIwMDAiIH0sCgl7IDB4ZmYwNDAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZNTQwLCAgICAgIk9zcHJleS01NDAiIH0sCgl7IDB4ZmYwNzAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZNDQwLCAgICAgIk9zcHJleS00NDAiIH0sCgoJeyAweDAwMDExMDAyLCBCVFRWX0JPQVJEX0FUSV9UVldPTkRFUiwgICJBVEkgVFYgV29uZGVyIiB9LAoJeyAweDAwMDMxMDAyLCBCVFRWX0JPQVJEX0FUSV9UVldPTkRFUlZFLCJBVEkgVFYgV29uZGVyL1ZFIiB9LAoKCXsgMHg2NjA2MTA3ZCwgQlRUVl9CT0FSRF9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBXaW5GYXN0IFRWIDIwMDAiIH0sCgl7IDB4NjYwNzEwN2QsIEJUVFZfQk9BUkRfV0lORkFTVFZDMTAwLCAgIkxlYWR0ZWsgV2luRmFzdCBWQyAxMDAiIH0sCgl7IDB4NjYwOTEwN2QsIEJUVFZfQk9BUkRfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgVFYgMjAwMCBYUCIgfSwKCXsgMHgyNjM2MTBiNCwgQlRUVl9CT0FSRF9TVEIyLCAgICAgICAgICAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCIgfSwKCXsgMHgyNjQ1MTBiNCwgQlRUVl9CT0FSRF9TVEIyLCAgICAgICAgICAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCIgfSwKCXsgMHg0MDIwMTBmYywgQlRUVl9CT0FSRF9HVkJDVFYzUENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFYzL1BDSSIgfSwKCXsgMHg0MDUwMTBmYywgQlRUVl9CT0FSRF9HVkJDVFY0UENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFY0L1BDSSIgfSwKCXsgMHg0MDcwMTBmYywgQlRUVl9CT0FSRF9HVkJDVFY1UENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFY1L1BDSSIgfSwKCXsgMHhkMDE4MTBmYywgQlRUVl9CT0FSRF9HVkJDVFY1UENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFY1L1BDSSIgfSwKCgl7IDB4MDAxMjExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYiIH0sCgkvKiBzb21lIGNhcmRzIHNoaXAgd2l0aCBieXRlc3dhcHBlZCBJRHMgLi4uICovCgl7IDB4MTIwMGJkMTEsIEJUVFZfQk9BUkRfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYgW2Jzd2FwXSIgfSwKCXsgMHhmZjAwYmQxMSwgQlRUVl9CT0FSRF9QSU5OQUNMRSwgICAgICAiUGlubmFjbGUgUENUViBbYnN3YXBdIiB9LAoJLyogdGhpcyBzZWVtcyB0byBoYXBwZW4gYXMgd2VsbCAuLi4gKi8KCXsgMHhmZjEyMTFiZCwgQlRUVl9CT0FSRF9QSU5OQUNMRSwgICAgICAiUGlubmFjbGUgUENUViIgfSwKCgl7IDB4MzAwMDEyMWEsIEJUVFZfQk9BUkRfVk9PRE9PVFZfMjAwLCAgIjNEZnggVm9vZG9vVFYgMjAwIiB9LAoJeyAweDI2MzcxMGI0LCBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNLCAgICIzRGZ4IFZvb2Rvb1RWIEZNIiB9LAoJeyAweDMwNjAxMjFhLCBCVFRWX0JPQVJEX1NUQjIsCSAgIjNEZnggVm9vZG9vVFYgMTAwLyBTVEIgT0VNIiB9LAoKCXsgMHgzMDAwMTQ0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzLCAiKEFza2V5IE1hZ2ljL290aGVycykgVFZpZXc5OSBDUEgwNngiIH0sCgl7IDB4YTAwNTE0NGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MywgIkNQSDA2WCBUVmlldzk5LUNhcmQiIH0sCgl7IDB4MzAwMjE0NGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MSwgIihBc2tleSBNYWdpYy9vdGhlcnMpIFRWaWV3OTkgQ1BIMDV4IiB9LAoJeyAweDMwMDUxNDRmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjEsICIoQXNrZXkgTWFnaWMvb3RoZXJzKSBUVmlldzk5IENQSDA2MS8wNkwgKFQxL0xDKSIgfSwKCXsgMHg1MDAwMTQ0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxLCAiQXNrZXkgQ1BIMDUwIiB9LAoJeyAweDMwMDAxNGZmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjEsICJUVmlldyA5OSAoQ1BIMDYxKSIgfSwKCXsgMHgzMDAyMTRmZiwgQlRUVl9CT0FSRF9QSE9FQkVfVFZNQVMsICAiUGhvZWJlIFRWIE1hc3RlciAoQ1BIMDYwKSIgfSwKCgl7IDB4MDAwMTE0NjEsIEJUVFZfQk9BUkRfQVZQSE9ORTk4LCAgICAgIkFWZXJNZWRpYSBUVlBob25lOTgiIH0sCgl7IDB4MDAwMjE0NjEsIEJUVFZfQk9BUkRfQVZFUk1FRElBOTgsICAgIkFWZXJtZWRpYSBUVkNhcHR1cmUgOTgiIH0sCgl7IDB4MDAwMzE0NjEsIEJUVFZfQk9BUkRfQVZQSE9ORTk4LCAgICAgIkFWZXJNZWRpYSBUVlBob25lOTgiIH0sCgl7IDB4MDAwNDE0NjEsIEJUVFZfQk9BUkRfQVZFUk1FRElBOTgsICAgIkFWZXJNZWRpYSBUVkNhcHR1cmUgOTgiIH0sCgl7IDB4MDMwMDE0NjEsIEJUVFZfQk9BUkRfQVZFUk1FRElBOTgsICAgIlZET01BVEUgVFYgVFVORVIgQ0FSRCIgfSwKCgl7IDB4MTExNzE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoUGhpbGlwcyBQQUwgQi9HKSIgfSwKCXsgMHgxMTE4MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChUZW1pYyBQQUwgQi9HKSIgfSwKCXsgMHgxMTE5MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChQaGlsaXBzIFBBTCBJKSIgfSwKCXsgMHgxMTFhMTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChUZW1pYyBQQUwgSSkiIH0sCgoJeyAweDExMjMxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZSQURJTywgICJUZXJyYXRlYyBUViBSYWRpbysiIH0sCgl7IDB4MTEyNzE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUViwgICAgICAgIlRlcnJhdGVjIFRWKyAoVjEuMDUpIiAgICB9LAoJLyogY2xhc2hlcyB3aXRoIEZseVZpZGVvCgkgKnsgMHgxODUyMTg1MiwgQlRUVl9CT0FSRF9URVJSQVRWLCAgICAgIlRlcnJhdGVjIFRWKyAoVjEuMTApIiAgICB9LCAqLwoJeyAweDExMzQxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKExSMTAyKSIgfSwKCXsgMHgxMTM1MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRVIsICAiVGVycmF0ZWMgVFZhbHVlIFJhZGlvIiB9LCAvKiBMUjEwMiAqLwoJeyAweDUwMTgxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUiIH0sICAgICAgIC8qID8/ICovCgl7IDB4ZmYzYjE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUVSLCAgIlRlcnJhdGVjIFRWYWx1ZSBSYWRpbyIgfSwgLyogPz8gKi8KCgl7IDB4NDAwMDE1YjAsIEJUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYiIH0sCgl7IDB4NDAwYTE1YjAsIEJUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYiIH0sCgl7IDB4NDAwZDE1YjAsIEJUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYgLyBSYWRpbyIgfSwKCXsgMHg0MDEwMTViMCwgQlRUVl9CT0FSRF9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAoJeyAweDQwMTYxNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIC8gUmFkaW8iIH0sCgoJeyAweDE0MzBhYTAwLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0EiIH0sCgl7IDB4MTQzMWFhMDAsIEJUVFZfQk9BUkRfUFYxNDMsICAgICAgICAgIlByb3ZpZGVvIFBWMTQzQiIgfSwKCXsgMHgxNDMyYWEwMCwgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiUHJvdmlkZW8gUFYxNDNDIiB9LAoJeyAweDE0MzNhYTAwLCBCVFRWX0JPQVJEX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0QiIH0sCgl7IDB4MTQzM2FhMDMsIEJUVFZfQk9BUkRfUFYxNDMsICAgICAgICAgIlNlY3VyaXR5IEV5ZXMiIH0sCgoJeyAweDE0NjBhYTAwLCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtMSIgfSwKCXsgMHgxNDYxYWEwMSwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTIiIH0sCgl7IDB4MTQ2MmFhMDIsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQS0zIiB9LAoJeyAweDE0NjNhYTAzLCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtNCIgfSwKCgl7IDB4MTQ2NGFhMDQsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi0xIiB9LAoJeyAweDE0NjVhYTA1LCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItMiIgfSwKCXsgMHgxNDY2YWEwNiwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBCLTMiIH0sCgl7IDB4MTQ2N2FhMDcsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi00IiB9LAoKCXsgMHhhMTMyZmYwMCwgQlRUVl9CT0FSRF9JVkMxMDAsICAgICAgICAiSVZDLTEwMCIgIH0sCgl7IDB4YTE1NTAwMDAsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAoJeyAweGExNTUwMDAxLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKCXsgMHhhMTU1MDAwMiwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMCIgIH0sCgl7IDB4YTE1NTAwMDMsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAoJeyAweGExNTUwMTAwLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKCXsgMHhhMTU1MDEwMSwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCgl7IDB4YTE1NTAxMDIsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDBHIiB9LAoJeyAweGExNTUwMTAzLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKCXsgMHhhMTgyZmYwMCwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMDEsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjAyLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwMywgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMDQsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjA1LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwNiwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMDcsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjA4LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwOSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMGEsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjBiLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwYywgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgl7IDB4YTE4MmZmMGQsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAoJeyAweGExODJmZjBlLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKCXsgMHhhMTgyZmYwZiwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCgoJeyAweDQxNDI0MzQ0LCBCVFRWX0JPQVJEX0dSQU5EVEVDLCAgICAgICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIiB9LAoJeyAweDAxMDIwMzA0LCBCVFRWX0JPQVJEX1hHVUFSRCwgICAgICAgICJHcmFuZHRlYyBHcmFuZCBYLUd1YXJkIiB9LAoKCXsgMHgxODUwMTg1MSwgQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMiwgICAiRmx5VmlkZW8gOTggKExSNTApLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkiIH0sCgl7IDB4YTA1MDE4NTEsIEJUVFZfQk9BUkRfQ0hST05PU19WUzIsICAgIkZseVZpZGVvIDk4IChMUjUwKS8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJIiB9LAoJeyAweDE4NTExODUxLCBCVFRWX0JPQVJEX0ZMWVZJREVPOThFWiwgICJGbHlWaWRlbyA5OEVaIChMUjUxKS8gQ3liZXJNYWlsIEFWIiB9LAoJeyAweDE4NTIxODUyLCBCVFRWX0JPQVJEX1RZUEhPT05fVFZJRVcsICJGbHlWaWRlbyA5OEZNIChMUjUwKS8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciIgfSwKCXsgMHg0MWEwYTA1MSwgQlRUVl9CT0FSRF9GTFlWSURFT185OEZNLCAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCBSZXYgUSIgfSwKCXsgMHgxODUwMWY3ZiwgQlRUVl9CT0FSRF9GTFlWSURFT185OCwgICAiTGlmZXZpZXcgRmx5dmlkZW8gOTgiIH0sCgoJeyAweDAxMDExNWNiLCBCVFRWX0JPQVJEX0dNVjEsICAgICAgICAgICJBRyBHTVYxIiB9LAoJeyAweDAxMDExNGM3LCBCVFRWX0JPQVJEX01PRFRFQ18yMDUsICAgICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViIgfSwKCgl7IDB4MTBiNDI2MzYsIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4LCAgIlNUQiA/Pz8iIH0sCgl7IDB4MjE3ZDY2MDYsIEJUVFZfQk9BUkRfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgV2luRmFzdCBUViAyMDAwIiB9LAoJeyAweGZmZjZmNmZmLCBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFdpbkZhc3QgVFYgMjAwMCIgfSwKCXsgMHgwMzExNjAwMCwgQlRUVl9CT0FSRF9TRU5TT1JBWTMxMSwgICAiU2Vuc29yYXkgMzExIiB9LAoJeyAweDAwNzkwZTExLCBCVFRWX0JPQVJEX1dJTkRWUiwgICAgICAgICJDYW5vcHVzIFdpbkRWUiBQQ0kiIH0sCgl7IDB4YTBmY2ExYTAsIEJUVFZfQk9BUkRfWk9MVFJJWCwgICAgICAgIkZhY2UgdG8gRmFjZSBUdm1heCIgfSwKCXsgMHg4MmIyYWE2YSwgQlRUVl9CT0FSRF9TSU1VU19HVkMxMTAwLCAiU0lNVVMgR1ZDMTEwMCIgfSwKCXsgMHgxNDZjYWEwYywgQlRUVl9CT0FSRF9QVjk1MSwgICAgICAgICAiaXR1bmVyIHNwZWN0cmE4IiB9LAoJeyAweDIwMGExMjk1LCBCVFRWX0JPQVJEX1BYQzIwMCwgICAgICAgICJJbWFnZU5hdGlvbiBQWEMyMDBBIiB9LAoKCXsgMHg0MDExMTU1NCwgQlRUVl9CT0FSRF9QVl9CVDg3OFBfOUIsICAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQiIH0sCgl7IDB4MTdkZTBhMDEsIEJUVFZfQk9BUkRfS1dPUkxELCAgICAgICAgIk1lY2VyIFRWL0ZNL1ZpZGVvIFR1bmVyIiB9LAoKCXsgMHgwMTA1MTgwNSwgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICMxIiB9LAoJeyAweDAxMDYxODA1LCBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQLCAiUGljb2xvIFRldHJhIENoaXAgIzIiIH0sCgl7IDB4MDEwNzE4MDUsIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMyIgfSwKCXsgMHgwMTA4MTgwNSwgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUCwgIlBpY29sbyBUZXRyYSBDaGlwICM0IiB9LAoKCXsgMHgxNTQwOTUxMSwgQlRUVl9CT0FSRF9BQ09SUF9ZODc4RiwgIkFjb3JwIFk4NzhGIiB9LAoKCXsgMHg1MzUzNDE0OSwgQlRUVl9CT0FSRF9TU0FJX1NFQ1VSSVRZLCAiU1NBSSBTZWN1cml0eSBWaWRlbyBJbnRlcmZhY2UiIH0sCgl7IDB4NTM1MzQxNGEsIEJUVFZfQk9BUkRfU1NBSV9VTFRSQVNPVU5ELCAiU1NBSSBVbHRyYXNvdW5kIFZpZGVvIEludGVyZmFjZSIgfSwKCgkvKiBsaWtlbHkgYnJva2VuLCB2ZW5kb3IgaWQgZG9lc24ndCBtYXRjaCB0aGUgb3RoZXIgbWFnaWMgdmlld3MgLi4uCgkgKiB7IDB4YTBmY2EwNGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MywgIkd1aWxsZW1vdCBNYXhpIFRWIFZpZGVvIDMiIH0sICovCgoJLyogRHVwbGljYXRlIFBDSSBJRCwgcmVjb25maWd1cmUgZm9yIHRoaXMgYm9hcmQgZHVyaW5nIHRoZSBlZXByb20gcmVhZC4KCSogeyAweDEzZWIwMDcwLCBCVFRWX0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0IsICAiSGF1cHBhdWdlIEltcGFjdFZDQiIgfSwgKi8KCgkvKiBEVkIgY2FyZHMgKHVzaW5nIHBjaSBmdW5jdGlvbiAuMSBmb3IgbXBlZyBkYXRhIHhmZXIpICovCgl7IDB4MDAxYzExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQsICAgIlBpbm5hY2xlIFBDVFYgU2F0IiB9LAoJeyAweDAxMDEwMDcxLCBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFYsICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiB9LAoJeyAweDIwMDA3MDYzLCBCVFRWX0JPQVJEX1BDX0hEVFYsICAgICAgICJwY0hEVFYgSEQtMjAwMCBUViJ9LAoJeyAweDAwMjYxMWJkLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULCAgICJQaW5uYWNsZSBQQ1RWIFNBVCBDSSIgfSwKCXsgMHgwMDAxMTgyMiwgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCwgICAiVHdpbmhhbiBWaXNpb25QbHVzIERWQiIgfSwKCXsgMHhmYzAwMjcwZiwgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCwgICAiQ2hhaW5UZWNoIGRpZ2l0b3AgRFNULTEwMDAgRFZCLVMiIH0sCgl7IDB4MDc3MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc3MSwgICAgIkFWZXJtZWRpYSBBdmVyVFYgRFZCLVQgNzcxIiB9LAoJeyAweDA3NjExNDYxLCBCVFRWX0JPQVJEX0FWRFZCVF83NjEsICAgICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIgfSwKCXsgMHhkYjEwMThhYywgQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEUsICAgICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUiIH0sCgl7IDB4ZGIxMTE4YWMsIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFLCAgICAiVWx0cmF2aWV3IERWQi1UIExpdGUiIH0sCgl7IDB4ZDUwMDE4YWMsIEJUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEUsICAgICJEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSIgfSwKCXsgMHgwMDI2MTgyMiwgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCwJIkROVFYgTGl2ZSEgTWluaSAifSwKCXsgMHhkMjAwZGJjMCwgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzIsCSJEVmlDTyBGdXNpb25IRFRWIDIiIH0sCgoJeyAwLCAtMSwgTlVMTCB9Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBhcnJheSB3aXRoIGRlc2NyaXB0aW9uIGZvciBidDg0OCAvIGJ0ODc4IHR2L2dyYWJiZXIgY2FyZHMgICAgICAgICAgICAgICAqLwoKc3RydWN0IHR2Y2FyZCBidHR2X3R2Y2FyZHNbXSA9IHsKCS8qIC0tLS0gY2FyZCAweDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1VOS05PV05dID0gewoJCS5uYW1lCQk9ICIgKioqIFVOS05PV04vR0VORVJJQyAqKiogIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9NSVJPXSA9IHsKCQkubmFtZQkJPSAiTUlSTyBQQ1RWIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDE1LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAyLCAwLCAwLCAwIH0sCgkJLmdwaW9tdXRlIAk9IDEwLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0hBVVBQQVVHRV0gPSB7CgkJLm5hbWUJCT0gIkhhdXBwYXVnZSAoYnQ4NDgpIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDcsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDIsIDMgfSwKCQkuZ3Bpb211dGUgCT0gNCwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9TVEJdID0gewoJCS5uYW1lCQk9ICJTVEIsIEdhdGV3YXkgUC9OIDYwMDA2OTkgKGJ0ODQ4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSA3LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyA0LCAwLCAyLCAzIH0sCgkJLmdwaW9tdXRlIAk9IDEsCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS5oYXNfcmFkaW8gICAgICA9IDEsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDA0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0lOVEVMXSA9IHsKCQkubmFtZQkJPSAiSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDAsCgkJLnR1bmVyCQk9IFVOU0VULAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMCB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9ESUFNT05EXSA9IHsKCQkubmFtZQkJPSAiRGlhbW9uZCBEVFYyMDAwIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDMsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDAsIDEgfSwKCQkuZ3Bpb211dGUgCT0gMywKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9BVkVSTUVESUFdID0gewoJCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZQaG9uZSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMywKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbWFzawk9IDB4MGYsCgkJLmdwaW9tdXggCT0geyAweDBjLCAweDA0LCAweDA4LCAweDA0IH0sCgkJLyogICAgICAgICAgICAgICAgMHgwNCBmb3Igc29tZSBjYXJkcyA/PyAqLwoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rCT0gYXZlcm1lZGlhX3R2cGhvbmVfYXVkaW8sCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OXSA9IHsKCQkubmFtZQkJPSAiTUFUUklYLVZpc2lvbiBNVi1EZWx0YSIsCgkJLnZpZGVvX2lucHV0cwk9IDUsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IFVOU0VULAoJCS5zdmhzCQk9IDMsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMCB9LAoJCS5ncGlvbXV4IAk9IHsgMCB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgwOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9GTFlWSURFT10gPSB7CgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2IiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4YzAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAwLCAweGMwMCwgMHg4MDAsIDB4NDAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4YzAwLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1RVUkJPVFZdID0gewoJCS5uYW1lCQk9ICJJTVMvSVhtaWNybyBUdXJib1RWIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDMsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDEsIDEsIDIsIDMgfSwKCQkubmVlZHNfdHZhdWRpbwk9IDAsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfSEFVUFBBVUdFODc4XSA9IHsKCQkubmFtZQkJPSAiSGF1cHBhdWdlIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHgwZiwgLyogb2xkOiA3ICovCgkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDIsIDMgfSwKCQkuZ3Bpb211dGUgCT0gNCwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9NSVJPUFJPXSA9IHsKCQkubmFtZQkJPSAiTUlSTyBQQ1RWIHBybyIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDMwMTRmLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAweDIwMDAxLDB4MTAwMDEsIDAsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMTAsCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0FEU1RFQ0hfVFZdID0gewoJCS5uYW1lCQk9ICJBRFMgVGVjaG5vbG9naWVzIENoYW5uZWwgU3VyZmVyIFRWIChidDg0OCkiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMTUsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDEzLCAxNCwgMTEsIDcgfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9BVkVSTUVESUE5OF0gPSB7CgkJLm5hbWUJCT0gIkFWZXJNZWRpYSBUVkNhcHR1cmUgOTgiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSA0LAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMTUsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDEzLCAxNCwgMTEsIDcgfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLm1zcDM0eHhfYWx0ICAgID0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rICAgICA9IGF2ZXJtZWRpYV90dl9zdGVyZW9fYXVkaW8sCgkJLm5vX2dwaW9pcnEgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9WSFhdID0gewoJCS5uYW1lCQk9ICJBaW1zbGFiIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChWSFgpIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDcsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDIsIDEsIDMgfSwgLyogb2xkOiB7MCwgMSwgMiwgMywgNH0gKi8KCQkuZ3Bpb211dGUgCT0gNCwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9aT0xUUklYXSA9IHsKCQkubmFtZQkJPSAiWm9sdHJpeCBUVi1NYXgiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMTUsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDEsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMTAsCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDEwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1BJWFZJRVdQTEFZVFZdID0gewoJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQbGF5VFYgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS8qIDIwMDMtMTAtMjAgYnkgIkFudG9uIEEuIEFyYXBvdiIgPGFyYXBvdkBtYWlsLnJ1PiAqLwoJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCB9LAoJCS5ncGlvbXV0ZSAJPSAweDAwMjAwMCwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9XSU5WSUVXXzYwMV0gPSB7CgkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luVmlldyA2MDEiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHg4MzAwZjgsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsMCB9LAoJCS5ncGlvbXV4IAk9IHsgMHg0ZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcgfSwKCQkuZ3Bpb211dGUgCT0gMHhjZmEwMDcsCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sJPSB3aW52aWV3X2F1ZGlvLAoJCS5oYXNfcmFkaW8JPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0FWRUNfSU5URVJDQVBdID0gewoJCS5uYW1lCQk9ICJBVkVDIEludGVyY2FwdHVyZSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDIsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAxLCAwLCAwLCAwIH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfTElGRV9GTFlLSVRdID0gewoJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSBVTlNFVCwKCQkuc3ZocwkJPSBVTlNFVCwKCQkuZ3Bpb21hc2sJPSAweDhkZmYwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMCB9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgxNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9DRUlfUkFGRkxFU10gPSB7CgkJLm5hbWUJCT0gIkNFSSBSYWZmbGVzIENhcmQiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAzLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0NPTkZFUkVOQ0VUVl0gPSB7CgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMiwgIC8qIHR1bmVyLCBsaW5lIGluICovCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDE4MDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAoJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1BIT0VCRV9UVk1BU10gPSB7CgkJLm5hbWUJCT0gIkFza2V5IENQSDA1MC8gUGhvZWJlIFR2IE1hc3RlciArIEZNIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4YzAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAwLCAxLCAweDgwMCwgMHg0MDAgfSwKCQkuZ3Bpb211dGUgCT0gMHhjMDAsCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfTU9EVEVDXzIwNV0gPSB7CgkJLm5hbWUJCT0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTIwMS9NTTIwMi9NTTIwNS9NTTIxMC9NTTIxNSBQQ1RWLCBidDg3OCIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gVU5TRVQsCgkJLmdwaW9tYXNrCT0gNywKCQkubXV4c2VsCQk9IHsgMiwgMywgLTEgfSwKCQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAoJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMCwgMCB9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUxQU19UU0JCNV9QQUxfSSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfTUFHSUNUVklFVzA2MV0gPSB7CgkJLm5hbWUJCT0gIkFza2V5IENQSDA1WC8wNlggKGJ0ODc4KSBbbWFueSB2ZW5kb3JzXSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweGUwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCB9LAoJCS5ncGlvbXV0ZSAJPSAweGMwMCwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX1ZPQklTX0JPT1NUQVJdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgxZjBmZmYsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMHg0MDAwMCwKCQkubmVlZHNfdHZhdWRpbwk9IDAsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vayAgICAgPSB0ZXJyYXR2X2F1ZGlvLAoJfSwKCVtCVFRWX0JPQVJEX0hBVVBQQVVHX1dDQU1dID0gewoJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDMsCgkJLmdwaW9tYXNrCT0gNywKCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMiwgMyB9LAoJCS5ncGlvbXV0ZSAJPSA0LAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX01BWEldID0gewoJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAyLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHgxODAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKCQkuZ3Bpb211dGUgCT0gMHgxODAwLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfU0VDQU0sCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDFjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1RFUlJBVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MWYwZmZmLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAweDAwMDAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4NDAwMDAsCgkJLm5lZWRzX3R2YXVkaW8JPSAwLAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sJPSB0ZXJyYXR2X2F1ZGlvLAoJCS8qIEdQSU8gd2lyaW5nOgoJCUV4dGVybmFsIDIwIHBpbiBjb25uZWN0b3IgKGZvciBBY3RpdmUgUmFkaW8gVXBncmFkZSBib2FyZCkKCQlncGlvMDA6IGkyYy1zZGEKCQlncGlvMDE6IGkyYy1zY2wKCQlncGlvMDI6IG9tNTYxMC1kYXRhCgkJZ3BpbzAzOiBvbTU2MTAtY2xrCgkJZ3BpbzA0OiBvbTU2MTAtd3JlCgkJZ3BpbzA1OiBvbTU2MTAtc3RlcmVvCgkJZ3BpbzA2OiByZHM2NTg4LWRhdm4KCQlncGlvMDc6IFBpbiA3IG4uYy4KCQlncGlvMDg6IG5JT1cKCQlncGlvMDkrMTA6IG5JT1IsIG5TRUwgPz8gKGJ0ODc4KQoJCQlncGlvMDk6IG5JT1IgKGJ0ODQ4KQoJCQlncGlvMTA6IG5TRUwgKGJ0ODQ4KQoJCVNvdW5kIFJvdXRpbmc6CgkJZ3BpbzE2OiB1Mi1BMCAoMXN0IDQwNTJidCkKCQlncGlvMTc6IHUyLUExCgkJZ3BpbzE4OiB1Mi1uRU4KCQlncGlvMTk6IHU0LUEwICgybmQgNDA1MikKCQlncGlvMjA6IHU0LUExCgkJCXU0LW5FTiAtIEdORAoJCUJ0c3B5OgoJCQkwMDAwMCA6IENkcm9tIChpbnRlcm5hbCBhdWRpbyBpbnB1dCkKCQkJMTAwMDAgOiBleHQuIFZpZGVvIGF1ZGlvIGlucHV0CgkJCTIwMDAwIDogVFYgTW9ubwoJCQlhMDAwMCA6IFRWIE1vbm8vMgoJCTFhMDAwMCA6IFRWIFN0ZXJlbwoJCQkzMDAwMCA6IFJhZGlvCgkJCTQwMDAwIDogTXV0ZQoJKi8KCgl9LAoJW0JUVFZfQk9BUkRfUFhDMjAwXSA9IHsKCQkvKiBKYW5uaWsgRnJpdHNjaCA8amFubmlrQHRlY2hmYWsudW5pLWJpZWxlZmVsZC5kZT4gKi8KCQkubmFtZQkJPSAiSW1hZ2VuYXRpb24gUFhDMjAwIiwKCQkudmlkZW9faW5wdXRzCT0gNSwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gVU5TRVQsCgkJLnN2aHMJCT0gMSwgLyogd2FzOiA0ICovCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMH0sCgkJLmdwaW9tdXggCT0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm11eHNlbF9ob29rICAgID0gUFhDMjAwX211eHNlbCwKCgl9LAoJW0JUVFZfQk9BUkRfRkxZVklERU9fOThdID0gewoJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MTgwMCwgIC8qIDB4OGRmZTAwICovCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDB4MDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKCQkuZ3Bpb211dGUgCT0gMHgxODAwLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0lQUk9UVl0gPSB7CgkJLm5hbWUJCT0gIkZvcm1hYyBpUHJvVFYsIEZvcm1hYyBQcm9UViBJIChidDg0OCkiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDMsCgkJLmdwaW9tYXNrCT0gMSwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMSwgMCwgMCwgMCB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgyMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9JTlRFTF9DX1NfUENJXSA9IHsKCQkubmFtZQkJPSAiSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDAsCgkJLnR1bmVyCQk9IFVOU0VULAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMCB9LAoJCS5uZWVkc190dmF1ZGlvCT0gMCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9URVJSQVRWQUxVRV0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFZhbHVlIFZlcnNpb24gQnQ4NzgiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHhmZmZmMDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDB4NTAwLCAwLCAweDMwMCwgMHg5MDAgfSwKCQkuZ3Bpb211dGUgCT0gMHg5MDAsCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfV0lORkFTVDIwMDBdID0gewoJCS5uYW1lCQk9ICJMZWFkdGVrIFdpbkZhc3QgMjAwMC8gV2luRmFzdCAyMDAwIFhQIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLCAwIH0sIC8qIFRWLCBDVmlkLCBTVmlkLCBDVmlkIG92ZXIgU1ZpZCBjb25uZWN0b3IgKi8KCQkvKiBBbGV4YW5kZXIgVmFyYWtpbiA8YXZhcmFraW5AaG90bWFpbC5jb20+IFtzdGVyZW8gdmVyc2lvbl0gKi8KCQkuZ3Bpb21hc2sJPSAweGIzMzAwMCwKCQkuZ3Bpb211eCAJPSB7IDB4MTIyMDAwLDB4MTAwMCwweDAwMDAsMHg2MjAwMDAgfSwKCQkuZ3Bpb211dGUgCT0gMHg4MDAwMDAsCgkJLyogQXVkaW8gUm91dGluZyBmb3IgIldpbkZhc3QgMjAwMCBYUCIgKG5vIHR2IHN0ZXJlbyAhKQoJCQlncGlvMjMgLS0gaGVmNDA1MjpuRW5hYmxlICgweDgwMDAwMCkKCQkJZ3BpbzEyIC0tIGhlZjQwNTI6QTEKCQkJZ3BpbzEzIC0tIGhlZjQwNTI6QTAKCQkweDAwMDA6IGV4dGVybmFsIGF1ZGlvCgkJMHgxMDAwOiBGTQoJCTB4MjAwMDogVFYKCQkweDMwMDA6IG4uYy4KCQlOb3RlOiBUaGVyZSBleGlzdHMgYW5vdGhlciB2YXJpYW50ICJXaW5mYXN0IDIwMDAiIHdpdGggdHYgc3RlcmVvICE/CgkJTm90ZTogZWVwcm9tIG9ubHkgY29udGFpbnMgRkYgYW5kIHBjaSBzdWJzeXN0ZW0gaWQgMTA3ZDo2NjA2CgkJKi8KCQkubmVlZHNfdHZhdWRpbwk9IDAsCgkJLnBsbAkJPSBQTExfMjgsCgkJLmhhc19yYWRpbwk9IDEsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwgLyogZGVmYXVsdCBmb3Igbm93LCBncGlvIHJlYWRzIEJGRkYwNiBmb3IgUGFsIGJnK2RrICovCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sJPSB3aW5mYXN0MjAwMF9hdWRpbywKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0NIUk9OT1NfVlMyXSA9IHsKCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCAvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDMsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDE4MDAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAoJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfVFlQSE9PTl9UVklFV10gPSB7CgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4Rk0gTFI1MCAvIFR5cGhvb24gVFZpZXcgVFYvRk0gVHVuZXIiLAoJCS52aWRlb19pbnB1dHMJPSA0LAoJCS5hdWRpb19pbnB1dHMJPSAzLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHgxODAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKCQkuZ3Bpb211dGUgCT0gMHgxODAwLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yYWRpbwk9IDEsCgl9LAoJW0JUVFZfQk9BUkRfUFhFTFZXUExUVlBST10gPSB7CgkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8iLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHhmZiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYyB9LAoJCS5ncGlvbXV0ZSAJPSAweDI5LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjNdID0gewoJCS5uYW1lCQk9ICJBc2tleSBDUEgwNlggVFZpZXc5OSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDU1MWUwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAoJCS5ncGlvbXV4IAk9IHsgMHg1NTE0MDAsIDB4NTUxMjAwLCAwLCAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4NTUxYzAwLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9QSU5OQUNMRV0gPSB7CgkJLm5hbWUJCT0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHgwMzAwMEYsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDIsIDB4ZDAwMDEsIDAsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMSwKCQkubmVlZHNfdHZhdWRpbwk9IDAsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfU1RCMl0gPSB7CgkJLm5hbWUJCT0gIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQgKGJ0ODc4KSwgM0RmeCBWb29kb29UViAxMDAiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gNywKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgNCwgMCwgMiwgMyB9LAoJCS5ncGlvbXV0ZSAJPSAxLAoJCS5ub19tc3AzNHh4CT0gMSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkuaGFzX3JhZGlvICAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0FWUEhPTkU5OF0gPSB7CgkJLm5hbWUJCT0gIkFWZXJNZWRpYSBUVlBob25lIDk4IiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gNCwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDE1LAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAxMywgNCwgMTEsIDcgfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JhZGlvCT0gMSwKCQkuYXVkaW9faG9vawk9IGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvLAoJfSwKCVtCVFRWX0JPQVJEX1BWOTUxXSA9IHsKCQkubmFtZQkJPSAiUHJvVmlkZW8gUFY5NTEiLCAvKiBwaWMxNmM1NCAqLwoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCgkJLmdwaW9tdXggCT0geyAwLCAwLCAwLCAwfSwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9PTkFJUl9UVl0gPSB7CgkJLm5hbWUJCT0gIkxpdHRsZSBPbkFpciBUViIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweGUwMGIsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7IDB4ZmY5ZmY2LCAweGZmOWZmNiwgMHhmZjFmZjcsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMHhmZjNmZmMsCgkJLm5vX21zcDM0eHgJPSAxLAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDJjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1NJR01BX1RWSUlfRk1dID0gewoJCS5uYW1lCQk9ICJTaWdtYSBUVklJLUZNIiwKCQkudmlkZW9faW5wdXRzCT0gMiwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSBVTlNFVCwKCQkuZ3Bpb21hc2sJPSAzLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAxLCAxLCAwLCAyIH0sCgkJLmdwaW9tdXRlIAk9IDMsCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5wbGwJCT0gUExMX05PTkUsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OMl0gPSB7CgkJLm5hbWUJCT0gIk1BVFJJWC1WaXNpb24gTVYtRGVsdGEgMiIsCgkJLnZpZGVvX2lucHV0cwk9IDUsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IFVOU0VULAoJCS5zdmhzCQk9IDMsCgkJLmdwaW9tYXNrCT0gMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMCB9LAoJCS5ncGlvbXV4IAk9IHsgMCB9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUVdID0gewoJCS5uYW1lCQk9ICJab2x0cml4IEdlbmllIFRWL0ZNIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4YmNmMDNmLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAweGJjODAzZiwgMHhiYzkwM2YsIDB4YmNiMDNmLCAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4YmNiMDNmLAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMzlGUjVfTlRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9URVJSQVRWUkFESU9dID0gewoJCS5uYW1lCQk9ICJUZXJyYXRlYyBUVi9SYWRpbysiLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMHg3MDAwMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMCB9LAoJCS5ncGlvbXV0ZSAJPSAweDQwMDAwLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkubm9fbXNwMzR4eAk9IDEsCgkJLnBsbAkJPSBQTExfMzUsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmFkaW8JPSAxLAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgzMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9EWU5BTElOS10gPSB7CgkJLm5hbWUJCT0gIkFza2V5IENQSDAzeC8gRHluYWxpbmsgTWFnaWMgVFZpZXciLAoJCS52aWRlb19pbnB1dHMJPSAzLAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDIsCgkJLmdwaW9tYXNrCT0gMTUsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAJPSB7MiwwLDAsMCB9LAoJCS5ncGlvbXV0ZSAJPSAxLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0dWQkNUVjNQQ0ldID0gewoJCS5uYW1lCQk9ICJJT0RBVEEgR1YtQkNUVjMvUENJIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MDEwZjAwLAoJCS5tdXhzZWwJCT0gezIsIDMsIDAsIDAgfSwKCQkuZ3Bpb211eCAJPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCB9LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FMUFNfVFNIQzZfTlRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vawk9IGd2YmN0djNwY2lfYXVkaW8sCgl9LAoJW0JUVFZfQk9BUkRfUFhFTFZXUExUVlBBS10gPSB7CgkJLm5hbWUJCT0gIlByb2xpbmsgUFYtQlQ4NzhQKzRFIC8gUGl4ZWxWaWV3IFBsYXlUViBQQUsgLyBMZW5jbyBNWFRWLTk1NzggQ1AiLAoJCS52aWRlb19pbnB1dHMJPSA1LAoJCS5hdWRpb19pbnB1dHMJPSAxLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IDMsCgkJLmdwaW9tYXNrCT0gMHhBQTAwMDAsCgkJLm11eHNlbAkJPSB7IDIsMywxLDEsLTEgfSwKCQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAoJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMCwgMCwgMHg4MDAwMCwgMHg4MDAwMCB9LAoJCS5ncGlvbXV0ZSAJPSAweGE4MDAwLAoJCS5ub19tc3AzNHh4CT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yZW1vdGUJPSAxLAoJCS8qIEdQSU8gd2lyaW5nOiAoZGlmZmVyZW50IGZyb20gUmV2LjRDICEpCgkJCUdQSU8xNzogVTQuQTAgKGZpcnN0IGhlZjQwNTJidCkKCQkJR1BJTzE5OiBVNC5BMQoJCQlHUElPMjA6IFU1LkExIChzZWNvbmQgaGVmNDA1MmJ0KQoJCQlHUElPMjE6IFU0Lm5FTgoJCQlHUElPMjI6IEJUODMyIFJlc2V0IExpbmUKCQkJR1BJTzIzOiBBNSxBMCwgVTUsbkVOCgkJTm90ZTogQXQgaTJjPTB4OGEgaXMgYSBCdDgzMiBjaGlwLCB3aGljaCBjaGFuZ2VzIHRvIDB4ODggYWZ0ZXIgYmVpbmcgcmVzZXQgdmlhIEdQSU8yMgoJCSovCgl9LAoJW0JUVFZfQk9BUkRfRUFHTEVdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJFYWdsZSBXaXJlbGVzcyBDYXByaWNvcm4yIChidDg3OEEpIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDcsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAzIH0sCgkJLmdwaW9tdXRlIAk9IDQsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VUIC8qIFRVTkVSX0FMUFNfVE1ESDJfTlRTQyAqLywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4MzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfUElOTkFDTEVQUk9dID0gewoJCS8qIERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+ICovCgkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybyIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMywKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAzMDAwRiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMSwgMHhkMDAwMSwgMCwgMCB9LAoJCS5ncGlvbXV0ZSAJPSAxMCwKCQkJCS8qIHNvdW5kIHBhdGggKDUgc291cmNlcyk6CgkJCQlNVVgxIChtYXNrIDB4MDMpLCBFbmFibGUgUGluIDB4MDggKDA9ZW5hYmxlLCAxPWRpc2FibGUpCgkJCQkJMD0gZXh0LiBBdWRpbyBJTgoJCQkJCTE9IGZyb20gTVVYMgoJCQkJCTI9IE1vbm8gVFYgc291bmQgZnJvbSBUdW5lcgoJCQkJCTM9IG5vdCBjb25uZWN0ZWQKCQkJCU1VWDIgKG1hc2sgMHgzMDAwMCk6CgkJCQkJMCwyLDM9IGZyb20gTVNQMzR4eAoJCQkJCTE9IEZNIHN0ZXJlbyBSYWRpbyBmcm9tIFR1bmVyICovCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfVFZJRVdfUkRTX0ZNXSA9IHsKCQkvKiBDbGFhcyBMYW5nYmVobiA8Y2xhYXNAYmlnZm9vdC5jb20+LAoJCVN2ZW4gR3JvdGhrbGFncyA8c3ZlbkB1cGIuZGU+ICovCgkJLm5hbWUJCT0gIlR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUyIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDMsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDFjLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAwLCAwLCAweDEwLCA4IH0sCgkJLmdwaW9tdXRlIAk9IDQsCgkJLm5lZWRzX3R2YXVkaW8JPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yYWRpbwk9IDEsCgl9LAoJW0JUVFZfQk9BUkRfTElGRVRFQ185NDE1XSA9IHsKCQkvKiBUaW0gUvZzdGVybXVuZHQgPHJvc3Rlcm1AdW5pLW11ZW5zdGVyLmRlPgoJCWluIGRlLmNvbXAub3MudW5peC5saW51eC5oYXJkd2FyZToKCQkJb3B0aW9ucyBidHR2IGNhcmQ9MCBwbGw9MSByYWRpbz0xIGdwaW9tYXNrPTB4MThlMAoJCQlncGlvbXV4ID0weDQ0YzcxZiwweDQ0ZDcxZiwwLDB4NDRkNzFmLDB4NDRkZmZmCgkJCW9wdGlvbnMgdHVuZXIgdHlwZT01ICovCgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDIwMDAgL0ZseVZpZGVvIEEyLyBMaWZldGVjIExUIDk0MTUgVFYgW0xSOTBdIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MThlMCwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4MThlMCwKCQkJLyogRm9yIGNhcmRzIHdpdGggdGRhOTgyMC90ZGE5ODIxOgoJCQkJMHgwMDAwOiBUdW5lciBub3JtYWwgc3RlcmVvCgkJCQkweDAwODA6IFR1bmVyIEEyIFNBUCAoc2Vjb25kIGF1ZGlvIHByb2dyYW0gPSBad2Vpa2FuYWx0b24pCgkJCQkweDA4ODA6IFR1bmVyIEEyIHN0ZXJlbyAqLwoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfQkVTVEJVWV9FQVNZVFZdID0gewoJCS8qIE1pZ3VlbCBBbmdlbCBBbHZhcmV6IDxtYWFjcnV6QG5hdmVnYWxpYS5jb20+CgkJb2xkIEVhc3kgVFYgQlQ4NDggdmVyc2lvbiAobW9kZWwgQ1BIMDMxKSAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwMzEvIEJFU1RCVVkgRWFzeSBUViIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHhGLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAoJCS5ncGlvbXV0ZSAJPSAxMCwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgzOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9GTFlWSURFT185OEZNXSA9IHsKCQkvKiBHb3Jkb24gSGV5ZG9uIDxnamhleWRvbkBiaWdmb290LmNvbSAoJzk4KSAqLwoJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMywKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgxODAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJCS8qIFRoaXMgaXMgdGhlIHVsdGltYXRlIGNoZWFwbyBjYXB0dXJlIGNhcmQKCQkqIGp1c3QgYSBCVDg0OEEgb24gYSBzbWFsbCBQQ0IhCgkJKiBTdGV2ZSBIb3Nnb29kIDxzdGV2ZUBlcXVpaW5ldC5jb20+ICovCglbQlRUVl9CT0FSRF9HUkFORFRFQ10gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjICdHcmFuZCBWaWRlbyBDYXB0dXJlJyAoQnQ4NDgpIiwKCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkuZ3Bpb21hc2sgICAgICAgPSAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfQVNLRVlfQ1BIMDYwXSA9IHsKCQkvKiBEYW5pZWwgSGVycmluZ3RvbiA8ZGFuaWVsLmhlcnJpbmd0b25AaG9tZS5jb20+ICovCgkJLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDA2MC8gUGhvZWJlIFRWIE1hc3RlciBPbmx5IChObyBGTSkiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHhlMDAsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4NDAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4ODAwLAoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMzZGWTVfTlRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9BU0tFWV9DUEgwM1hdID0gewoJCS8qIE1hdHRpIE1vdHR1cyA8bW90dHVzQHBoeXNpYy51dC5lZT4gKi8KCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDN4IFRWIENhcHR1cmVyIiwKCQkudmlkZW9faW5wdXRzCT0gNCwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAyLCAwLCAwLCAwIH0sCgkJLmdwaW9tdXRlIAk9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkvKiAtLS0tIGNhcmQgMHgzYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9NTTEwMFBDVFZdID0gewoJCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiTW9kdWxhciBUZWNobm9sb2d5IE1NMTAwUENUViIsCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAyLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzCQk9IFVOU0VULAoJCS5ncGlvbWFzayAgICAgICA9IDExLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMSB9LAoJCS5ncGlvbXV0ZSAJPSA4LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8zNSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfR01WMV0gPSB7CgkJLyogQWRyaWFuIENveCA8YWRyaWFuQGh1bWJvbGR0LmNvLnVrICovCgkJLm5hbWUJCT0gIkFHIEVsZWN0cm9uaWNzIEdNVjEiLAoJCS52aWRlb19pbnB1dHMgICA9IDIsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIJCT0gVU5TRVQsCgkJLnN2aHMJCT0gMSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCgkJLm11eHNlbAkJPSB7IDIsIDIgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IH0sCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX0JFU1RCVVlfRUFTWVRWMl0gPSB7CgkJLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KCQluZXcgRWFzeSBUViBCVDg3OCB2ZXJzaW9uIChtb2RlbCBDUEgwNjEpCgkJc3BlY2lhbCB0aGFua3MgdG8gSW5mb3JtYXRpY2EgTWllcmVzIGZvciBwcm92aWRpbmcgdGhlIGNhcmQgKi8KCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYxLyBCRVNUQlVZIEVhc3kgVFYgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMiwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHhGRiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDEsIDAsIDQsIDQgfSwKCQkuZ3Bpb211dGUgCT0gOSwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfQVRJX1RWV09OREVSXSA9IHsKCQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwoJCS5uYW1lCQk9ICJBVEkgVFYtV29uZGVyIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4ZjAzZiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAoJCS5ncGlvbXV4IAk9IHsgMHhiZmZlLCAwLCAweGJmZmYsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMHhiZmZlLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDQwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0FUSV9UVldPTkRFUlZFXSA9IHsKCQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwoJCS5uYW1lCQk9ICJBVEkgVFYtV29uZGVyIFZFIiwKCQkudmlkZW9faW5wdXRzCT0gMiwKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSBVTlNFVCwKCQkuZ3Bpb21hc2sJPSAxLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAwLCAxIH0sCgkJLmdwaW9tdXggCT0geyAwLCAwLCAxLCAwIH0sCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfRkxZVklERU8yMDAwXSA9IHsKCQkvKiBEZWVKYXkgPGRlZWpheUB3ZXN0ZWw5MDAubmV0ICgyMDAwUykgKi8KCQkubmFtZSAgICAgICAgICAgPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMFMgTFI5MCIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAzLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sJPSAweDE4ZTAsCgkJLm11eHNlbAkJPSB7IDIsIDMsIDAsIDEgfSwKCQkJCS8qIFJhZGlvIGNoYW5nZWQgZnJvbSAxZTgwIHRvIDB4ODAwIHRvIG1ha2UKCQkJCUZseVZpZGVvMjAwMFMgaW4gLmh1IGhhcHB5IChnbSkqLwoJCQkJLyogLWRrLT8/Pzogc2V0IG11dGU9MHgxODAwIGZvciB0ZGE5ODc0aCBkYXVnaHRlcmJvYXJkICovCgkJLmdwaW9tdXggCT0geyAweDAwMDAsMHgwODAwLDB4MTAwMCwweDEwMDAgfSwKCQkuZ3Bpb211dGUgCT0gMHgxODAwLAoJCS5hdWRpb19ob29rCT0gZnYyMDAwc19hdWRpbywKCQkubm9fbXNwMzR4eAk9IDEsCgkJLm5vX3RkYTk4NzUJPSAxLAoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1RFUlJBVFZBTFVFUl0gPSB7CgkJLm5hbWUJCT0gIlRlcnJhdGVjIFRWYWx1ZVJhZGlvIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAweDUwMCwgMHg1MDAsIDB4MzAwLCAweDkwMCB9LAoJCS5ncGlvbXV0ZSAJPSAweDkwMCwKCQkubmVlZHNfdHZhdWRpbwk9IDEsCgkJLnBsbAkJPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JhZGlvCT0gMSwKCX0sCglbQlRUVl9CT0FSRF9HVkJDVFY0UENJXSA9IHsKCQkvKiBUQU5BS0EgS2VpIDxwZWcwMDYyNUBuaWZ0eS5jb20+ICovCgkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNC9QQ0kiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMTBmMDAsCgkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDAsIDAgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCB9LAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rICAgICA9IGd2YmN0djNwY2lfYXVkaW8sCgl9LAoKCS8qIC0tLS0gY2FyZCAweDQ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiM0RmeCBWb29kb29UViBGTSAoRXVybykiLAoJCS8qIHRyeSAiaW5zbW9kIG1zcDM0MDAgc2ltcGxlPTAiIGlmIHlvdSBoYXZlCgkJKiBzb3VuZCBwcm9ibGVtcyB3aXRoIHRoaXMgY2FyZC4gKi8KCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDRmOGEwMCwKCQkvKiAweDEwMDAwMDogMT1NU1AgZW5hYmxlZCAoMD1kaXNhYmxlIGFnYWluKQoJCSogMHgwMTAwMDA6IENvbm5lY3RlZCB0byAiUzAiIG9uIHRkYTk4ODAgKDA9UGFsL0JHLCAxPU5UU0MpICovCgkJLmdwaW9tdXggICAgICAgID0gezB4OTQ3ZmZmLCAweDk4N2ZmZiwweDk0N2ZmZiwweDk0N2ZmZiB9LAoJCS5ncGlvbXV0ZSAJPSAweDk0N2ZmZiwKCQkvKiB0dnR1bmVyLCByYWRpbywgICBleHRlcm5hbCxpbnRlcm5hbCwgbXV0ZSwgIHN0ZXJlbwoJCSogdHVuZXIsIENvbXBvc2l0LCBTVmlkLCBDb21wb3NpdC1vbi1TdmlkLWFkYXB0ZXIgKi8KCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgLDAgLDEgfSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NVDIwMzIsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbAkJPSBQTExfMjgsCgkJLmhhc19yYWRpbwk9IDEsCgl9LAoJW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiVm9vZG9vVFYgMjAwIChVU0EpIiwKCQkvKiB0cnkgImluc21vZCBtc3AzNDAwIHNpbXBsZT0wIiBpZiB5b3UgaGF2ZQoJCSogc291bmQgcHJvYmxlbXMgd2l0aCB0aGlzIGNhcmQuICovCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCgkJLmdwaW9tYXNrICAgICAgID0gMHg0ZjhhMDAsCgkJLyogMHgxMDAwMDA6IDE9TVNQIGVuYWJsZWQgKDA9ZGlzYWJsZSBhZ2FpbikKCQkqIDB4MDEwMDAwOiBDb25uZWN0ZWQgdG8gIlMwIiBvbiB0ZGE5ODgwICgwPVBhbC9CRywgMT1OVFNDKSAqLwoJCS5ncGlvbXV4ICAgICAgICA9IHsweDk0N2ZmZiwgMHg5ODdmZmYsMHg5NDdmZmYsMHg5NDdmZmYgfSwKCQkuZ3Bpb211dGUgCT0gMHg5NDdmZmYsCgkJLyogdHZ0dW5lciwgcmFkaW8sICAgZXh0ZXJuYWwsaW50ZXJuYWwsIG11dGUsICBzdGVyZW8KCQkqIHR1bmVyLCBDb21wb3NpdCwgU1ZpZCwgQ29tcG9zaXQtb24tU3ZpZC1hZGFwdGVyICovCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzICwwICwxIH0sCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTVQyMDMyLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5wbGwJCT0gUExMXzI4LAoJCS5oYXNfcmFkaW8JPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0FJTU1TXSA9IHsKCQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBiQG5leHVzLmNvLnVrPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBY3RpdmUgSW1hZ2luZyBBSU1NUyIsCgkJLnZpZGVvX2lucHV0cyAgID0gMSwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKCQkuZ3Bpb21hc2sgICAgICAgPSAwCgl9LAoJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQX1BMVVNdID0gewoJCS8qIFRvbWFzeiBQeXJhIDxoZWxsZmlyZUBzZWRlei5pcS5wbD4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjRDLDhFKSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSA0LAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAxNSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDExLCA3IH0sIC8qIFRWIGFuZCBSYWRpbyB3aXRoIHNhbWUgR1BJTyAhICovCgkJLmdwaW9tdXRlIAk9IDEzLAoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1BBTF9JX0ZNLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgkJLyogR1BJTyB3aXJpbmc6CgkJCUdQSU8wOiBVNC5BMCAoaGVmNDA1MmJ0KQoJCQlHUElPMTogVTQuQTEKCQkJR1BJTzI6IFU0LkExIChzZWNvbmQgaGVmNDA1MmJ0KQoJCQlHUElPMzogVTQubkVOLCBVNS5BMCwgQTUubkVOCgkJCUdQSU84LTE1OiB2cmQ4NjZiID8KCQkqLwoJfSwKCVtCVFRWX0JPQVJEX0ZMWVZJREVPOThFWl0gPSB7CgkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4RVogKGNhcHR1cmUgb25seSkgTFI1MSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIJCT0gVU5TRVQsCgkJLnN2aHMJCT0gMiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LCAvKiBBVjEsIEFWMiwgU1ZIUywgQ1ZpZCBhZGFwdGVyIG9uIFNWSFMgKi8KCQkucGxsCQk9IFBMTF8yOCwKCQkubm9fbXNwMzR4eAk9IDEsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgoJLyogLS0tLSBjYXJkIDB4NDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQXzlCXSA9IHsKCQkvKiBEYXJpdXN6IEtvd2FsZXdza2kgPGRhcmVra0BhdXRvbWV4LnBsPiAqLwoJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArOUIgKFBsYXlUViBQcm8gcmV2LjlCIEZNK05JQ0FNKSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDNmLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggCT0geyAweDAxLCAweDAwLCAweDAzLCAweDAzIH0sCgkJLmdwaW9tdXRlIAk9IDB4MDksCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkubm9fbXNwMzR4eAk9IDEsCgkJLm5vX3RkYTk4NzUJPSAxLAoJCS5wbGwJCT0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmF1ZGlvX2hvb2sJPSBwdmJ0ODc4cDliX2F1ZGlvLCAvKiBOb3RlOiBub3QgYWxsIGNhcmRzIGhhdmUgc3RlcmVvICovCgkJLmhhc19yYWRpbwk9IDEsICAvKiBOb3RlOiBub3QgYWxsIGNhcmRzIGhhdmUgcmFkaW8gKi8KCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJCS8qIEdQSU8gd2lyaW5nOgoJCQlHUElPMDogQTAgaGVmNDA1MgoJCQlHUElPMTogQTEgaGVmNDA1MgoJCQlHUElPMzogbkVOIGhlZjQwNTIKCQkJR1BJTzgtMTU6IHZyZDg2NmIKCQkJR1BJTzIwLDIyLDIzOiBSMzAsUjI5LFIyOAoJCSovCgl9LAoJW0JUVFZfQk9BUkRfU0VOU09SQVkzMTFdID0gewoJCS8qIENsYXkgS3VueiA8Y2t1bnpAbWFpbC5hcmMubmFzYS5nb3Y+ICovCgkJLyogeW91IG11c3QganVtcGVyIEpQNSBmb3IgdGhlIGNhcmQgdG8gd29yayAqLwoJCS5uYW1lICAgICAgICAgICA9ICJTZW5zb3JheSAzMTEiLAoJCS52aWRlb19pbnB1dHMgICA9IDUsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSA0LAoJCS5ncGlvbWFzayAgICAgICA9IDAsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwLCAwIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9SVjYwNV0gPSB7CgkJLyogTWlndWVsIEZyZWl0YXMgPG1pZ3VlbEBjZXR1Yy5wdWMtcmlvLmJyPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJSZW1vdGVWaXNpb24gTVggKFJWNjA1KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMTYsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAoJCS5ncGlvbWFzazIgICAgICA9IDB4MDdmZiwKCQkubXV4c2VsICAgICAgICAgPSB7IDB4MzMsIDB4MTMsIDB4MjMsIDB4NDMsIDB4ZjMsIDB4NzMsIDB4ZTMsIDB4MDMsCgkJCQkweGQzLCAweGIzLCAweGMzLCAweDYzLCAweDkzLCAweDUzLCAweDgzLCAweGEzIH0sCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5tdXhzZWxfaG9vayAgICA9IHJ2NjA1X211eHNlbCwKCX0sCglbQlRUVl9CT0FSRF9QT1dFUkNMUl9NVFY4NzhdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJQb3dlcmNvbG9yIE1UVjg3OC8gTVRWODc4Ui8gTVRWODc4RiIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAyLAoJCS50dW5lcgkJPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgxQzgwMEYsICAvKiBCaXQwLTI6IEF1ZGlvIHNlbGVjdCwgOC0xMjpyZW1vdGUgY29udHJvbCAxNDpyZW1vdGUgdmFsaWQgMTU6cmVtb3RlIHJlc2V0ICovCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAxLCAxLCB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAoJCS5ncGlvbXV0ZSAJPSA0LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnBsbAkJPSBQTExfMjgsCgkJLmhhc19yYWRpbwk9IDEsCgl9LAoKCS8qIC0tLS0gY2FyZCAweDRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1dJTkRWUl0gPSB7CgkJLyogTWFzYWtpIFN1enVraSA8bWFzYWtpQGJ0cmVlLm9yZz4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MTQwMDA3LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAoJCS5ncGlvbXV0ZSAJPSA0LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vayAgICAgPSB3aW5kdnJfYXVkaW8sCgl9LAoJW0JUVFZfQk9BUkRfR1JBTkRURUNfTVVMVEldID0gewoJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIENhcmQgKEJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS5ncGlvbWFzayAgICAgICA9IDAsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9LV09STERdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDMsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDcsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sICAgLyogVHVuZXIsIFNWaWQsIFNWSFMsIFNWaWQgdG8gU1ZIUyBjb25uZWN0b3IgKi8KCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDQsIDQgfSwvKiBZZXMsIHRoaXMgdHVuZXIgdXNlcyB0aGUgc2FtZSBhdWRpbyBvdXRwdXQgZm9yIFRWIGFuZCBGTSByYWRpbyEKCQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgZXh0ZXJuYWwgQXVkaW8gSW4sIHNvIHdlIG11dGUgaXQgb24gRXh0LiAmIEludC4KCQkJCQkJKiBUaGUgUENCIGNhbiB0YWtlIGEgc2J4MTYzNy9zYngxNjczLCB3aXJpbmcgdW5rbm93bi4KCQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgUENJIHN1YnN5c3RlbSBJRCwgc2lnaC4KCQkJCQkJKiBncGlvbXV4ID0xOiBsb3dlciB2b2x1bWUsIDIrMzogbXV0ZQoJCQkJCQkqIGJ0d2luY2FwIHVzZXMgMHg4MDAwMC8weDgwMDAzCgkJCQkJCSovCgkJLmdwaW9tdXRlIAk9IDQsCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkvKiBTYW1zdW5nIFRDUEE5MDk1UEMyN0EgKEJHK0RLKSwgcGhpbGlwcyBjb21wYXRpYmxlLCB3L0ZNLCBzdGVyZW8gYW5kCgkJcmFkaW8gc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRvcnMgd29yayBmaW5lLiAqLwoJCS5oYXNfcmFkaW8JPSAxLAoJCS8qIEdQSU8gSW5mbzoKCQkJR1BJTzAsMTogICBIRUY0MDUyIEEwLEExCgkJCUdQSU8yOiAgICAgSEVGNDA1MiBuRU5BQkxFCgkJCUdQSU8zLTc6ICAgbi5jLgoJCQlHUElPOC0xMzogIElSREMzNTcgZGF0YTAtNSAoZGF0YTYgbi5jLiA/KSBbY2hpcCBub3QgcHJlc2VudCBvbiBteSBjYXJkXQoJCQlHUElPMTQsMTU6ID8/CgkJCUdQSU8xNi0yMTogbi5jLgoJCQlHUElPMjIsMjM6ID8/CgkJCT8/ICAgICAgIDogbXR1OGI1NmVwIG1pY3JvY29udHJvbGxlciBmb3IgSVIgKEdQSU8gd2lyaW5nIHVua25vd24pKi8KCX0sCglbQlRUVl9CT0FSRF9EU1BfVENWSURFT10gPSB7CgkJLyogQXJ0aHVyIFRldHpsYWZmLURlYXMsIERTUCBEZXNpZ24gTHRkIDxzb2Z0d2FyZUBkc3BkZXNpZ24uY29tPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJEU1AgRGVzaWduIFRDVklERU8iLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfSEFVUFBBVUdFUFZSXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIFBWUiIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDEsIDEgfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCgkJLmdwaW9tYXNrICAgICAgID0gNywKCQkuZ3Bpb211eCAgICAgICAgPSB7N30sCgl9LAoJW0JUVFZfQk9BUkRfR1ZCQ1RWNVBDSV0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNS9QQ0kiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwZjBmODAsCgkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7MHgwMzAwMDAsIDB4MDEwMDAwLCAwLCAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4MDIwMDAwLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5hdWRpb19ob29rICAgICA9IGd2YmN0djVwY2lfYXVkaW8sCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9PU1BSRVkxeDBdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAwLzE1MCAoODc4KSIsIC8qIDB4MSgyfDMpLTQ1QzYtQzEgKi8KCQkudmlkZW9faW5wdXRzICAgPSA0LCAgICAgICAgICAgICAgICAgIC8qIGlkLWlucHV0cy1jbG9jayAqLwoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMywKCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDIsIDAsIDEgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXzg0OF0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NDgpIiwgLyogMHgwNC01NEMwLUMxICYgb2xkZXIgYm9hcmRzICovCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfT1NQUkVZMTAxXzg0OF0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEgKDg0OCkiLCAvKiAweDA1LTQwQzAtQzEgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZMXgxXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMS8xNTEiLCAgICAgICAvKiAweDEoNHw1KS0wMDA0LUM0ICovCgkJLnZpZGVvX2lucHV0cyAgID0gMSwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS5tdXhzZWwgICAgICAgICA9IHsgMCB9LAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9PU1BSRVkxeDFfU1ZJRF0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEvMTUxIHcvIHN2aWQiLCAgLyogMHgoMTZ8MTd8MjApLTAwQzQtQzEgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZMnh4XSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMC8yMDEvMjUwLzI1MSIsICAvKiAweDEoOHw5fEV8RiktMDAwNC1DNCAqLwoJCS52aWRlb19pbnB1dHMgICA9IDEsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCgoJCS8qIC0tLS0gY2FyZCAweDU4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklEXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMC8yNTAiLCAgIC8qIDB4MShBfEIpLTAwQzQtQzEgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9PU1BSRVkyeDBdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjEwLzIyMC8yMzAiLCAgIC8qIDB4MShBfEIpLTA0QzAtQzEgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9PU1BSRVk1MDBdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNTAwIiwgICAvKiA1MDAgKi8KCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfT1NQUkVZNTQwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDU0MCIsICAgLyogNTQwICovCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCgoJCS8qIC0tLS0gY2FyZCAweDVDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX09TUFJFWTIwMDBdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwMCIsICAvKiAyMDAwICovCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsICAgICAgLyogbXVzdCBhdm9pZCwgY29uZmxpY3RzIHdpdGggdGhlIGJ0ODYwICovCgl9LAoJW0JUVFZfQk9BUkRfSURTX0VBR0xFXSA9IHsKCQkvKiBNIEcgQmVyYmVyaWNoIDxiZXJiZXJpY0Bmb3J3aXNzLnVuaS1wYXNzYXUuZGU+ICovCgkJLm5hbWUgICAgICAgICAgID0gIklEUyBFYWdsZSIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS5ncGlvbWFzayAgICAgICA9IDAsCgkJLm11eHNlbCAgICAgICAgID0geyAwLCAxLCAyLCAzIH0sCgkJLm11eHNlbF9ob29rICAgID0gZWFnbGVfbXV4c2VsLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJW0JUVFZfQk9BUkRfUElOTkFDTEVTQVRdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFNhdCIsCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS5ub19ncGlvaXJxICAgICA9IDEsCgkJLmhhc19kdmIgICAgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9GT1JNQUNfUFJPVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMywKCQkuZ3Bpb21hc2sgICAgICAgPSAyLAoJCS8qIFRWLCBDb21wMSwgQ29tcG9zaXRlIG92ZXIgU1ZJRCBjb24sIFNWSUQgKi8KCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDIsIDAsIDAgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCS8qIHNvdW5kIHJvdXRpbmc6CgkJR1BJTz0weDAwLDB4MDEsMHgwMzogbXV0ZSAoPykKCQkweDAyOiBib3RoIFRWIGFuZCByYWRpbyAodHVuZXI6IEZNMTIxNi9JKQoJCVRoZSBjYXJkIGhhcyBvbmJvYXJkIGF1ZGlvIGNvbm5lY3RvcnMgbGFiZWxlZCAiY2Ryb20iIGFuZCAiYm9hcmQiLAoJCW5vdCBzb2xkZXJlZCBoZXJlLCB0aG91Z2ggdW5rbm93biB3aXJpbmcuCgkJQ2FyZCBsYWNrczogZXh0ZXJuYWwgYXVkaW8gaW4sIHBjaSBzdWJzeXN0ZW0gaWQuCgkqLwoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NjAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfTUFDSFRWXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiTWFjaFRWIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkuZ3Bpb21hc2sgICAgICAgPSA3LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCgkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAzfSwKCQkuZ3Bpb211dGUgCT0gNCwKCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCX0sCglbQlRUVl9CT0FSRF9FVVJFU1lTX1BJQ09MT10gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAwLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMX0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1BWMTUwXSA9IHsKCQkvKiBMdWMgVmFuIEhvZXlsYW5kdCA8bHVjQGUtbWFnaWMuYmU+ICovCgkJLm5hbWUgICAgICAgICAgID0gIlByb1ZpZGVvIFBWMTUwIiwgLyogMHg0ZiAqLwoJCS52aWRlb19pbnB1dHMgICA9IDIsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkuZ3Bpb21hc2sgICAgICAgPSAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfQURfVFZLNTAzXSA9IHsKCQkvKiBIaXJvc2hpIFRha2VrYXdhIDxzaWFuQGJpZy5vci5qcD4gKi8KCQkvKiBUaGlzIGNhcmQgbGFja3Mgc3Vic3lzdGVtIElEICovCgkJLm5hbWUgICAgICAgICAgID0gIkFELVRWSzUwMyIsIC8qIDB4NjMgKi8KCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxZTgwMDcsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLyogICAgICAgICAgICAgICAgICBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgb2ZmLCAgb24gKi8KCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDgsICAweDBmLCAgMHgwYSwgICAgIDB4MDggfSwKCQkuZ3Bpb211dGUgCT0gMHgwZiwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuYXVkaW9faG9vawk9IGFkdHZrNTAzX2F1ZGlvLAoJfSwKCgkJLyogLS0tLSBjYXJkIDB4NjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfSEVSQ1VMRVNfU01fVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJIZXJjdWxlcyBTbWFydCBUViBTdGVyZW8iLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKCQkubmVlZHNfdHZhdWRpbyAgPSAxLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS8qIE5vdGVzOgoJCS0gY2FyZCBsYWNrcyBzdWJzeXN0ZW0gSUQKCQktIHN0ZXJlbyB2YXJpYW50IHcvIGRhdWdodGVyIGJvYXJkIHdpdGggdGRhOTg3NGEgQDB4YjAKCQktIEF1ZGlvIFJvdXRpbmc6CgkJCWFsd2F5cyBmcm9tIHRkYTk4NzQgaW5kZXBlbmRlbnQgb2YgR1BJTyAoPykKCQkJZXh0ZXJuYWwgbGluZSBpbjogdW5rbm93bgoJCS0gT3RoZXIgY2hpcHM6IGVtNzhwMTU2ZWxwIEAgMHg5NiAocHJvYmFibHkgSVIgcmVtb3RlIGNvbnRyb2wpCgkJCWhlZjQwNTMgKGluc3RlYWQgNDA1MikgZm9yIHVua25vd24gZnVuY3Rpb24KCQkqLwoJfSwKCVtCVFRWX0JPQVJEX1BBQ0VUVl0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIlBhY2UgVFYgJiBSYWRpbyBDYXJkIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LCAvKiBUdW5lciwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCgkJLmdwaW9tYXNrICAgICAgID0gMCwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUxfSSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JhZGlvICAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkvKiBCdDg3OCwgQnQ4MzIsIEZJMTI0NiB0dW5lcjsgbm8gcGNpIHN1YnN5c3RlbSBpZAoJCW9ubHkgaW50ZXJuYWwgbGluZSBvdXQ6ICg0cGluIGhlYWRlcikgUkdHTAoJCVJhZGlvIG11c3QgYmUgZGVjb2RlZCBieSBtc3AzNDEwZCAobm90IHJvdXRlZCB0aHJvdWdoKSovCgkJLyoKCQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLCAgdG9kbyEKCQkqLwoJfSwKCVtCVFRWX0JPQVJEX0lWQzIwMF0gPSB7CgkJLyogQ2hyaXMgV2lsbGluZyA8Y2hyaXNAdmlzbGFiLnVzeWQuZWR1LmF1PiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMjAwIiwKCQkudmlkZW9faW5wdXRzICAgPSAxLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCgkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJW0JUVFZfQk9BUkRfWEdVQVJEXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiR3JhbmQgWC1HdWFyZCAvIFRydXN0IDgxNFBDSSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMTYsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmdwaW9tYXNrMiAgICAgID0gMHhmZiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsMiwyLDIsIDMsMywzLDMsIDEsMSwxLDEsIDAsMCwwLDAgfSwKCQkubXV4c2VsX2hvb2sgICAgPSB4Z3VhcmRfbXV4c2VsLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCX0sCgoJCS8qIC0tLS0gY2FyZCAweDY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFZdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiwKCQkudmlkZW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX2R2YiAgICAgICAgPSAxLAoJCS5oYXNfcmVtb3RlCT0gMSwKCQkuZ3Bpb21hc2sJPSAweDFiLAoJCS5ub19ncGlvaXJxICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfUFYxNDNdID0gewoJCS8qIEpvcmdlIEJvbmNvbXB0ZSAtIERUSTIgPGpvcmdlQGR0aTIubmV0PiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE0MyIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS5ncGlvbWFzayAgICAgICA9IDAsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9WRDAwOVgxX01JTklESU5dID0gewoJCS8qIE0uS2xhaHJAcGh5dGVjLmRlICovCgkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDktWDEgTWluaURJTiAoYnQ4NzgpIiwKCQkudmlkZW9faW5wdXRzICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCgkJLnN2aHMgICAgICAgICAgID0gMywKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwoJCS5uZWVkc190dmF1ZGlvICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1ZEMDA5WDFfQ09NQkldID0gewoJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KCQkuc3ZocyAgICAgICAgICAgPSAzLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoKCQkvKiAtLS0tIGNhcmQgMHg2YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9WRDAwOV9NSU5JRElOXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOSBNaW5pRElOIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMgICA9IDEwLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCgkJLnN2aHMgICAgICAgICAgID0gOSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAoJCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCgkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgoJCQkJCXh0ZXJuYWwgdmlkZW8tbXV4ICovCgkJLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAwIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfVkQwMDlfQ09NQkldID0gewoJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IENvbWJpIChidDg3OCkiLAoJCS52aWRlb19pbnB1dHMgICA9IDEwLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCgkJLnN2aHMgICAgICAgICAgID0gOSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAoJCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCgkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgoJCQkJCXh0ZXJuYWwgdmlkZW8tbXV4ICovCgkJLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAxIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfSVZDMTAwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEwMCIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS5ncGlvbWFzayAgICAgICA9IDB4ZGYsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJfSwKCVtCVFRWX0JPQVJEX0lWQzEyMF0gPSB7CgkJLyogSVZDLTEyMEcgLSBBbGFuIEdhcmZpZWxkIDxhbGFuQGZyb21vcmJpdC5jb20+ICovCgkJLm5hbWUgICAgICAgICAgID0gIklWQy0xMjBHIiwKCQkudmlkZW9faW5wdXRzICAgPSAxNiwKCQkuYXVkaW9faW5wdXRzICAgPSAwLCAgICAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwoJCS50dW5lciAgICAgICAgICA9IFVOU0VULCAgIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsICAgLyogY2FyZCBoYXMgbm8gc3ZocyAqLwoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCgkJCQkweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwIH0sCgkJLm11eHNlbF9ob29rICAgID0gaXZjMTIwX211eHNlbCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoKCQkvKiAtLS0tIGNhcmQgMHg3MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9QQ19IRFRWXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAicGNIRFRWIEhELTIwMDAgVFYiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19BVFNDLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfZHZiICAgICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfVFdJTkhBTl9EU1RdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJUd2luaGFuIERTVCArIGNsb25lcyIsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ub192aWRlbyAgICAgICA9IDEsCgkJLmhhc19kdmIgICAgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9XSU5GQVNUVkMxMDBdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJXaW5mYXN0IFZDMTAwIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEsIDEsIDMgfSwgLyogVmlkIEluLCBTVmlkIEluLCBWaWQgb3ZlciBTVmlkIGluIGNvbm5lY3RvciAqLwoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJW0JUVFZfQk9BUkRfVEVWNTYwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiVGVwcHJvIFRFVi01NjAvSW50ZXJWaXNpb24gSVYtNTYwIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDMsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAxLCAxLCAxLCAxIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCgl9LAoKCQkvKiAtLS0tIGNhcmQgMHg3NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9TSU1VU19HVkMxMTAwXSA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiU0lNVVMgR1ZDMTEwMCIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAwLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDIgfSwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDNGLAoJCS5tdXhzZWxfaG9vayAgICA9IGd2YzExMDBfbXV4c2VsLAoJfSwKCVtCVFRWX0JPQVJEX05HU1RWX1BMVVNdID0gewoJCS8qIENhcmxvcyBTaWx2YSByM3Bla0ByM3Blay5ob21lbGludXgub3JnIHx8IGNhcmQgMHg3NSAqLwoJCS5uYW1lICAgICAgICAgICA9ICJOR1MgTkdTVFYrIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDAsIDAgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMHgwMDAwMDMsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgl9LAoJW0JUVFZfQk9BUkRfTE1MQlQ0XSA9IHsKCQkvKiBodHRwOi8vbGludXhtZWRpYWxhYnMuY29tICovCgkJLm5hbWUgICAgICAgICAgID0gIkxNTEJUNCIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwgLyogSU4xLElOMixJTjMsSU40ICovCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJfSwKCVtCVFRWX0JPQVJEX1RFS1JBTV9NMjA1XSA9IHsKCQkvKiBIZWxtcm9vcyBIYXJyaSA8aGFycmkuaGVsbXJvb3NAcHAuaW5ldC5maT4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiVGVrcmFtIE0yMDUgUFJPIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLmdwaW9tYXNrICAgICAgID0gMHg2OCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4NjgsIDB4NjgsIDB4NjEsIDB4NjEgfSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoKCQkvKiAtLS0tIGNhcmQgMHg3OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9DT05UVkZNSV0gPSB7CgkJLyogSmF2aWVyIENlbmRhbiBBcmVzIDxqY2VuZGFuQGx5Y29zLmVzPiAqLwoJCS8qIGJ0ODc4IFRWICsgRk0gd2l0aG91dCBzdWJzeXN0ZW0gSUQgKi8KCQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENPTlRWRk1pIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAoJCS5ncGlvbXV0ZSAJPSAzLAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUF0gPSB7CgkJLypFcmljIERFQklFRiA8ZGViaWVmQHRlbGVtc2EuY29tPiovCgkJLypFVVJFU1lTIFBpY29sbyBUZXRyYSA6IDQgQ29uZXhhbnQgRnVzaW9uIDg3OEEsIG5vIGF1ZGlvLCB2aWRlbyBpbnB1dCBzZXQgd2l0aCBhbmFsb2cgbXVsdGlwbGV4ZXJzIEdQSU8gY29udHJvbGVkKi8KCQkvKiBhZGRzIHBpY29sb190ZXRyYV9tdXhzZWwoKSwgcGljb2xvX3RldHJhX2luaXQoKSwgdGhlIGZvbG93aW5nIGRlY2xhcmF0aW9uIHN0cnVjdXJlLCBhbmQgI2RlZmluZSBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQKi8KCQkvKjB4NzkgaW4gYnR0di5oKi8KCQkubmFtZSAgICAgICAgICAgPSAiRXVyZXN5cyBQaWNvbG8gVGV0cmEiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkuZ3Bpb21hc2sgICAgICAgPSAwLAoJCS5ncGlvbWFzazIgICAgICA9IDB4M0M8PDE2LC8qU2V0IHRoZSBHUElPWzE4XS0+R1BJT1syMV0gYXMgb3V0cHV0IHBpbi49PT4gZHJpdmUgdGhlIHZpZGVvIGlucHV0cyB0aHJvdWdoIGFuYWxvZyBtdWx0aXBsZXhlcnMqLwoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5tdXhzZWwgICAgICAgICA9IHsyLDIsMiwyfSwvKjg3OEEgaW5wdXQgaXMgYWx3YXlzIE1VWDAsIHNlZSBhYm92ZS4qLwoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5tdXhzZWxfaG9vayAgICA9IHBpY29sb190ZXRyYV9tdXhzZWwsLypSZXF1aXJlZCBhcyBpdCBkb2Vzbid0IGZvbGxvdyB0aGUgY2xhc3NpYyBpbnB1dCBzZWxlY3Rpb24gcG9saWN5Ki8KCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9TUElSSVRfVFZdID0gewoJCS8qIFNwaXJpdCBUViBUdW5lciBmcm9tIGh0dHA6Ly9zcGlyaXRtb2RlbXMuY29tLmF1ICovCgkJLyogU3RhZmZvcmQgR29vZHNlbGwgPHN1cmdlQGdvbGlhdGguaG9tZXVuaXgub3JnPiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJTcGlyaXQgVFYgVHVuZXIiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMDAwMDAwZiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDEsIDEgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAgfSwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX0FWRFZCVF83NzFdID0gewoJCS8qIFdvbGZyYW0gSm9vc3QgPHdvam9AZnJva2FzY2h3ZWkuZGU+ICovCgkJLm5hbWUgICAgICAgICAgID0gIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgNzcxIiwKCQkudmlkZW9faW5wdXRzICAgPSAyLAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5tdXhzZWwgICAgICAgICA9IHsgMyAsIDMgfSwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLmhhc19kdmIgICAgICAgID0gMSwKCQkubm9fZ3Bpb2lycSAgICAgPSAxLAoJCS5oYXNfcmVtb3RlICAgICA9IDEsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDdjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX0FWRFZCVF83NjFdID0gewoJCS8qIE1hdHQgSmVzc29uIDxkdmJAamVzc29uLmVjbGlwc2UuY28udWs+ICovCgkJLyogQmFzZWQgb24gdGhlIE5lYnVsYSBjYXJkIGRhdGEgLSBhZGRlZCByZW1vdGUgYW5kIG5ldyBjYXJkIG51bWJlciAtIEJUVFZfQk9BUkRfQVZEVkJUXzc2MSwgc2VlIGFsc28gaXIta2JkLWdwaW8uYyAqLwoJCS5uYW1lICAgICAgICAgICA9ICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIsCgkJLnZpZGVvX2lucHV0cyAgID0gMiwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSAxLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSwgMiwgMCB9LCAvKiBDb21wMCwgUy1WaWRlbywgPywgPyAqLwoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX2R2YiAgICAgICAgPSAxLAoJCS5ub19ncGlvaXJxICAgICA9IDEsCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCX0sCglbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU1FdID0gewoJCS8qIGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZSAqLwoJCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU1EiLAoJCS52aWRlb19pbnB1dHMgICAgID0gMTYsCgkJLmF1ZGlvX2lucHV0cyAgICAgPSAwLAoJCS50dW5lciAgICAgICAgICAgID0gVU5TRVQsCgkJLnN2aHMgICAgICAgICAgICAgPSBVTlNFVCwKCQkuZ3Bpb21hc2sgICAgICAgICA9IDB4MCwKCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKCQkJCTMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKCQkubXV4c2VsX2hvb2sgICAgICA9IHNpZ21hU1FfbXV4c2VsLAoJCS5ncGlvbXV4ICAgICAgICAgID0geyAwIH0sCgkJLm5vX21zcDM0eHggICAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU0xDXSA9IHsKCQkvKiBhbmRyZS5zY2h3YXJ6QG1hdHJpeC12aXNpb24uZGUgKi8KCQkubmFtZSAgICAgICAgICAgICA9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNMQyIsCgkJLnZpZGVvX2lucHV0cyAgICAgPSA0LAoJCS5hdWRpb19pbnB1dHMgICAgID0gMCwKCQkudHVuZXIgICAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICAgID0gVU5TRVQsCgkJLmdwaW9tYXNrICAgICAgICAgPSAweDAsCgkJLm11eHNlbCAgICAgICAgICAgPSB7IDIsIDIsIDIsIDIgfSwKCQkubXV4c2VsX2hvb2sgICAgICA9IHNpZ21hU0xDX211eHNlbCwKCQkuZ3Bpb211eCAgICAgICAgICA9IHsgMCB9LAoJCS5ub19tc3AzNHh4ICAgICAgID0gMSwKCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJCS8qIEJUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUCAqLwoJW0JUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUF0gPSB7CgkJLyogQXR0aWxhIEtvbmRvcm9zIDxhdHRpbGEua29uZG9yb3NAY2hlbGxvLmh1PiAqLwoJCS8qIGJ0ODc4IFRWICsgRk0gMHgwMDAwMDAwMCBzdWJzeXN0ZW0gSUQgKi8KCQkubmFtZSAgICAgICAgICAgPSAiQVBBQyBWaWV3Y29tcCA4NzgoQU1BWCkiLAoJCS52aWRlb19pbnB1dHMgICA9IDIsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IFVOU0VULAoJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAyLCAwLCAwLCAwIH0sCgkJLmdwaW9tdXRlIAk9IDEwLAoJCS5uZWVkc190dmF1ZGlvICA9IDAsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmVtb3RlICAgICA9IDEsICAgLyogbWluaXJlbW90ZSB3b3Jrcywgc2VlIGlyLWtiZC1ncGlvLmMgKi8KCQkuaGFzX3JhZGlvICAgICAgPSAxLCAgIC8qIG5vdCBldmVyeSBjYXJkIGhhcyByYWRpbyAqLwoJfSwKCgkJLyogLS0tLSBjYXJkIDB4ODAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFXSA9IHsKCQkvKiBDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PiAqLwoJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUiLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkubm9fdmlkZW8gICAgICAgPSAxLAoJCS5oYXNfZHZiICAgICAgICA9IDEsCgkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfVkdFQVJfTVlWQ0RdID0gewoJCS8qIFN0ZXZlbiA8cGhvdG9uMzhAcGNob21lLmNvbS50dz4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiVi1HZWFyIE15VkNEIiwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnR1bmVyICAgICAgICAgID0gMCwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5ncGlvbWFzayAgICAgICA9IDB4M2YsCgkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7MHgzMSwgMHgzMSwgMHgzMSwgMHgzMSB9LAoJCS5ncGlvbXV0ZSAJPSAweDMxLAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5oYXNfcmFkaW8gICAgICA9IDAsCgl9LAoJW0JUVFZfQk9BUkRfU1VQRVJfVFZdID0gewoJCS8qIFJpY2sgQyA8Y3J5cHRkcmFnb29uQGdtYWlsLmNvbT4gKi8KCQkubmFtZSAgICAgICAgICAgPSAiU3VwZXIgVFYgVHVuZXIiLAoJCS52aWRlb19pbnB1dHMgICA9IDQsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMHgwMDAwMDEsMCwwIH0sCgkJLm5lZWRzX3R2YXVkaW8gID0gMSwKCQkuaGFzX3JhZGlvICAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX1RJQkVUX0NTMTZdID0gewoJCS8qIENocmlzIEZhbm5pbmcgPHZpZGVvNGxpbnV4QGhheWRvbi5uZXQ+ICovCgkJLm5hbWUgICAgICAgICAgID0gIlRpYmV0IFN5c3RlbXMgJ1Byb2dyZXNzIERWUicgQ1MxNiIsCgkJLnZpZGVvX2lucHV0cyAgID0gMTYsCgkJLmF1ZGlvX2lucHV0cyAgID0gMCwKCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIgfSwKCQkucGxsCQk9IFBMTF8yOCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIJPSAxLAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5tdXhzZWxfaG9vayAgICA9IHRpYmV0Q1MxNl9tdXhzZWwsCgl9LAoJW0JUVFZfQk9BUkRfS09ESUNPTV80NDAwUl0gPSB7CgkJLyogQmlsbCBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+ICovCgkJLyoKCQkqIE5vdGUgdGhhdCwgYmVjYXVzZSBvZiB0aGUgY2FyZCdzIHdpcmluZywgdGhlICJtYXN0ZXIiCgkJKiBCVDg3OEEgY2hpcCAoaS5lLiB0aGUgb25lIHdoaWNoIGNvbnRyb2xzIHRoZSBhbmFsb2cgc3dpdGNoCgkJKiBhbmQgbXVzdCB1c2UgdGhpcyBjYXJkIHR5cGUpIGlzIHRoZSAybmQgb25lIGRldGVjdGVkLiAgVGhlCgkJKiBvdGhlciAzIGNoaXBzIHNob3VsZCB1c2UgY2FyZCB0eXBlIDB4ODUsIHdob3NlIGRlc2NyaXB0aW9uCgkJKiBmb2xsb3dzIHRoaXMgb25lLiAgVGhlcmUgaXMgYSBFRVBST00gb24gdGhlIGNhcmQgKHdoaWNoIGlzCgkJKiBjb25uZWN0ZWQgdG8gdGhlIEkyQyBvZiBvbmUgb2YgdGhvc2Ugb3RoZXIgY2hpcHMpLCBidXQgaXMKCQkqIG5vdCBjdXJyZW50bHkgaGFuZGxlZC4gIFRoZXJlIGlzIGFsc28gYSBmYWNpbGl0eSBmb3IgYQoJCSogIm1vbml0b3IiLCB3aGljaCBpcyBhbHNvIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCgkJKi8KCQkubmFtZSAgICAgICAgICAgPSAiS29kaWNvbSA0NDAwUiAobWFzdGVyKSIsCgkJLnZpZGVvX2lucHV0cwk9IDE2LAoJCS5hdWRpb19pbnB1dHMJPSAwLAoJCS50dW5lcgkJPSBVTlNFVCwKCQkudHVuZXJfdHlwZQk9IFVOU0VULAoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5zdmhzCQk9IFVOU0VULAoJCS8qIEdQSU8gYml0cyAwLTkgdXNlZCBmb3IgYW5hbG9nIHN3aXRjaDoKCQkqICAgMDAgLSAwMzoJY2FtZXJhIHNlbGVjdG9yCgkJKiAgIDA0IC0gMDY6CWNoYW5uZWwgKGNvbnRyb2xsZXIpIHNlbGVjdG9yCgkJKiAgIDA3OglkYXRhICgxLT5vbiwgMC0+b2ZmKQoJCSogICAwODoJc3Ryb2JlCgkJKiAgIDA5OglyZXNldAoJCSogYml0IDE2IGlzIGlucHV0IGZyb20gc3luYyBzZXBhcmF0b3IgZm9yIHRoZSBjaGFubmVsCgkJKi8KCQkuZ3Bpb21hc2sJPSAweDAwMDNmZiwKCQkubm9fZ3Bpb2lycSAgICAgPSAxLAoJCS5tdXhzZWwJCT0geyAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCgkJLnBsbAkJPSBQTExfMjgsCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5ub190ZGE3NDMyCT0gMSwKCQkubm9fdGRhOTg3NQk9IDEsCgkJLm11eHNlbF9ob29rCT0ga29kaWNvbTQ0MDByX211eHNlbCwKCX0sCglbQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSX1NMXSA9IHsKCQkvKiBCaWxsIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4gKi8KCQkvKiBOb3RlIHRoYXQsIGZvciByZWFzb25zIHVua25vd24sIHRoZSAibWFzdGVyIiBCVDg3OEEgY2hpcCAoaS5lLiB0aGUKCQkqIG9uZSB3aGljaCBjb250cm9scyB0aGUgYW5hbG9nIHN3aXRjaCwgYW5kIG11c3QgdXNlIHRoZSBjYXJkIHR5cGUpCgkJKiBpcyB0aGUgMm5kIG9uZSBkZXRlY3RlZC4gIFRoZSBvdGhlciAzIGNoaXBzIHNob3VsZCB1c2UgdGhpcyBjYXJkCgkJKiB0eXBlCgkJKi8KCQkubmFtZQkJPSAiS29kaWNvbSA0NDAwUiAoc2xhdmUpIiwKCQkudmlkZW9faW5wdXRzCT0gMTYsCgkJLmF1ZGlvX2lucHV0cwk9IDAsCgkJLnR1bmVyCQk9IFVOU0VULAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnN2aHMJCT0gVU5TRVQsCgkJLmdwaW9tYXNrCT0gMHgwMTAwMDAsCgkJLm5vX2dwaW9pcnEgICAgID0gMSwKCQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAoJCS5wbGwJCT0gUExMXzI4LAoJCS5ub19tc3AzNHh4CT0gMSwKCQkubm9fdGRhNzQzMgk9IDEsCgkJLm5vX3RkYTk4NzUJPSAxLAoJCS5tdXhzZWxfaG9vawk9IGtvZGljb200NDAwcl9tdXhzZWwsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDg2LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfQURMSU5LX1JUVjI0XSA9IHsKCQkvKiBNaWNoYWVsIEhlbnNvbiA8bWhlbnNvbkBjbGFyaXR5dmkuY29tPiAqLwoJCS8qIEFkbGluayBSVFYyNCB3aXRoIHNwZWNpYWwgdW5sb2NrIGNvZGVzICovCgkJLm5hbWUgICAgICAgICAgID0gIkFkbGluayBSVFYyNCIsCgkJLnZpZGVvX2lucHV0cyAgID0gNCwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDg3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEVdID0gewoJCS8qIE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QG0xay5uZXQ+ICovCgkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlIiwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1REVlNfSDA2WEYsIC8qIFREVlMtSDA2NEYgKi8KCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkudmlkZW9faW5wdXRzICAgPSAzLAoJCS5hdWRpb19pbnB1dHMgICA9IDEsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSB9LAoJCS5ncGlvbWFzayAgICAgICA9IDB4MDBlMDAwMDcsCgkJLmdwaW9tdXggICAgICAgID0geyAweDAwNDAwMDA1LCAwLCAweDAwMDAwMDAxLCAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4MDBjMDAwMDcsCgkJLm5vX21zcDM0eHggICAgID0gMSwKCQkubm9fdGRhOTg3NSAgICAgPSAxLAoJCS5ub190ZGE3NDMyICAgICA9IDEsCgkJLmhhc19kdmIgICAgICAgID0gMSwKCX0sCgkJLyogLS0tLSBjYXJkIDB4ODgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9BQ09SUF9ZODc4Rl0gPSB7CgkJLyogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCgkJLm5hbWUJCT0gIkFjb3JwIFk4NzhGIiwKCQkudmlkZW9faW5wdXRzCT0gMywKCQkuYXVkaW9faW5wdXRzCT0gMSwKCQkudHVuZXIJCT0gMCwKCQkuc3ZocwkJPSAyLAoJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCgkJLmdwaW9tdXggICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwIH0sCgkJLmdwaW9tdXRlIAk9IDB4MDAyMDAwLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1lNRUNfVFZGNjZUNV9CX0RGRiwKCQkudHVuZXJfYWRkcgk9IDB4YzEgPj4xLAoJCS5yYWRpb19hZGRyICAgICA9IDB4YzEgPj4xLAoJCS5oYXNfcmFkaW8JPSAxLAoJfSwKCQkvKiAtLS0tIGNhcmQgMHg4OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9DT05DRVBUUk9OSUNfQ1RWRk1JMl0gPSB7CgkJLm5hbWUgICAgICAgICAgID0gIkNvbmNlcHRyb25pYyBDVFZGTWkgdjIiLAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkudHVuZXIgICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgICA9IDIsCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMDFjMDAwNywKCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDIgfSwKCQkuZ3Bpb211dGUgCT0gMywKCQkubmVlZHNfdHZhdWRpbyAgPSAwLAoJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU5BXzk1MzNfREksCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yZW1vdGUgICAgID0gMSwKCQkuaGFzX3JhZGlvICAgICAgPSAxLAoJfSwKCQkvKiAtLS0tIGNhcmQgMHg4YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9QVl9CVDg3OFBfMkVdID0gewoJCS5uYW1lICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi4yRSkiLAoJCS52aWRlb19pbnB1dHMgID0gNSwKCQkuYXVkaW9faW5wdXRzICA9IDEsCgkJLnR1bmVyICAgICAgICAgPSAwLAoJCS5zdmhzICAgICAgICAgID0gMywKCQkuZ3Bpb21hc2sgICAgICA9IDB4MDFmZTAwLAoJCS5tdXhzZWwgICAgICAgID0geyAyLDMsMSwxLC0xIH0sCgkJLmRpZ2l0YWxfbW9kZSAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAoJCS5ncGlvbXV4ICAgICAgID0geyAweDAwNDAwLCAweDEwNDAwLCAweDA0NDAwLCAweDgwMDAwIH0sCgkJLmdwaW9tdXRlICAgICAgPSAweDEyNDAwLAoJCS5ub19tc3AzNHh4ICAgID0gMSwKCQkucGxsICAgICAgICAgICA9IFBMTF8yOCwKCQkudHVuZXJfdHlwZSAgICA9IFRVTkVSX0xHX1BBTF9GTSwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkuaGFzX3JlbW90ZSAgICA9IDEsCgl9LAoJCS8qIC0tLS0gY2FyZCAweDhiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCVtCVFRWX0JPQVJEX1BWX000OTAwXSA9IHsKCQkvKiBT6XJnaW8gRm9ydGllciA8c2VyZ2lvZm9ydGllckB5YWhvby5jb20uYnI+ICovCgkJLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBNUEVHMiBQVi1NNDkwMCIsCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSAweDNmLAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYyB9LAoJCS5ncGlvbXV0ZSAJPSAweDI5LAoJCS5ub19tc3AzNHh4ICAgICA9IDEsCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1lNRUNfVFZGXzU1MzNNRiwKCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJfSwKCQkvKiAtLS0tIGNhcmQgMHg4YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9PU1BSRVk0NDBdICA9IHsKCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDQ0MCIsCgkJLnZpZGVvX2lucHV0cyAgID0gMSwKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IFVOU0VULAoJCS5zdmhzICAgICAgICAgICA9IDEsCgkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCgkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAoJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAoJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCgkJLyogLS0tLSBjYXJkIDB4OGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfQVNPVU5EX1NLWUVZRV0gPSB7CgkJLm5hbWUJCT0gIkFzb3VuZCBTa3lleWUgUENUViIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAxNSwKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMiwgMCwgMCwgMCB9LAoJCS5ncGlvbXV0ZSAJPSAxLAoJCS5uZWVkc190dmF1ZGlvCT0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfTlRTQywKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCgkJLyogLS0tLSBjYXJkIDB4OGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfU0FCUkVOVF9UVkZNXSA9IHsKCQkubmFtZQkJPSAiU2FicmVudCBUVi1GTSAoYnR0diB2ZXJzaW9uKSIsCgkJLnZpZGVvX2lucHV0cwk9IDMsCgkJLmF1ZGlvX2lucHV0cwk9IDEsCgkJLnR1bmVyCQk9IDAsCgkJLnN2aHMJCT0gMiwKCQkuZ3Bpb21hc2sJPSAweDEwODAwNywKCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4IAk9IHsgMTAwMDAwLCAxMDAwMDIsIDEwMDAwMiwgMTAwMDAwIH0sCgkJLm5vX21zcDM0eHgJPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCQkucGxsCQk9IFBMTF8yOCwKCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RORl81MzM1TUYsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5oYXNfcmFkaW8gICAgICA9IDEsCgl9LAoJLyogLS0tLSBjYXJkIDB4OGYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJW0JUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQl0gPSB7CgkJLm5hbWUJCT0gIkhhdXBwYXVnZSBJbXBhY3RWQ0IgKGJ0ODc4KSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDAsCgkJLnR1bmVyCQk9IFVOU0VULAoJCS5zdmhzCQk9IFVOU0VULAoJCS5ncGlvbWFzawk9IDB4MGYsIC8qIG9sZDogNyAqLwoJCS5tdXhzZWwJCT0geyAwLCAxLCAzLCAyIH0sIC8qIENvbXBvc2l0ZSAwLTMgKi8KCQkubm9fbXNwMzR4eAk9IDEsCgkJLm5vX3RkYTk4NzUgICAgID0gMSwKCQkubm9fdGRhNzQzMiAgICAgPSAxLAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJW0JUVFZfQk9BUkRfTUFDSFRWX01BR0lDVFZdID0gewoJCS8qIEp1bGlhbiBDYWxhYnkgPGp1bGlhbi5jYWxhYnlAZ21haWwuY29tPgoJCSAqIFNsaWdodGx5IGRpZmZlcmVudCBmcm9tIG9yaWdpbmFsIE1hY2hUViBkZWZpbml0aW9uICgweDYwKQoKCQkgKiBGSVhNRTogUmVnU3B5IHNheXMgZ3Bpb21hc2sgc2hvdWxkIGJlICIweDAwMWM4MDBmIiwgYnV0IGl0CgkJICogc3R1ZmZzIHVwIHJlbW90ZSBjaGlwLiBCdWcgaXMgYSBwaW4gb24gdGhlIGphZWNzIGlzIG5vdCBzZXQKCQkgKiBwcm9wZXJseSAobWV0aGlua3MpIGNhdXNpbmcgbm8ga2V5dXAgYml0cyBiZWluZyBzZXQgKi8KCgkJLm5hbWUgICAgICAgICAgID0gIk1hZ2ljVFYiLCAvKiByZWJyYW5kZWQgTWFjaFRWICovCgkJLnZpZGVvX2lucHV0cyAgID0gMywKCQkuYXVkaW9faW5wdXRzICAgPSAxLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnN2aHMgICAgICAgICAgID0gMiwKCQkuZ3Bpb21hc2sgICAgICAgPSA3LAoJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAoJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAoJCS5ncGlvbXV0ZSAJPSA0LAoJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLAoJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCgkJLmhhc19yYWRpbyAgICAgID0gMSwKCQkuaGFzX3JlbW90ZSAgICAgPSAxLAoJfSwKCVtCVFRWX0JPQVJEX1NTQUlfU0VDVVJJVFldID0gewoJCS5uYW1lCQk9ICJTU0FJIFNlY3VyaXR5IFZpZGVvIEludGVyZmFjZSIsCgkJLnZpZGVvX2lucHV0cwk9IDQsCgkJLmF1ZGlvX2lucHV0cwk9IDAsCgkJLnR1bmVyCQk9IFVOU0VULAoJCS5zdmhzCQk9IFVOU0VULAoJCS5tdXhzZWwJCT0geyAwLCAxLCAyLCAzIH0sCgkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCgkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKCX0sCglbQlRUVl9CT0FSRF9TU0FJX1VMVFJBU09VTkRdID0gewoJCS5uYW1lCQk9ICJTU0FJIFVsdHJhc291bmQgVmlkZW8gSW50ZXJmYWNlIiwKCQkudmlkZW9faW5wdXRzCT0gMiwKCQkuYXVkaW9faW5wdXRzCT0gMCwKCQkudHVuZXIJCT0gVU5TRVQsCgkJLnN2aHMJCT0gMSwKCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMyB9LAoJCS50dW5lcl90eXBlCT0gVU5TRVQsCgkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAoJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCgl9LAoJLyogLS0tLSBjYXJkIDB4OTQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCglbQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzJdID0gewoJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDIiLAoJCS50dW5lciAgICAgICAgICA9IDAsCgkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19BVFNDLCAvKiBGQ1YxMjM2RCAqLwoJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAoJCS52aWRlb19pbnB1dHMgICA9IDMsCgkJLmF1ZGlvX2lucHV0cyAgID0gMSwKCQkuc3ZocyAgICAgICAgICAgPSAyLAoJCS5tdXhzZWwJCT0geyAyLCAzLCAxIH0sCgkJLmdwaW9tYXNrICAgICAgID0gMHgwMGUwMDAwNywKCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDA0MDAwMDUsIDAsIDB4MDAwMDAwMDEsIDAgfSwKCQkuZ3Bpb211dGUgCT0gMHgwMGMwMDAwNywKCQkubm9fbXNwMzR4eCAgICAgPSAxLAoJCS5ub190ZGE5ODc1ICAgICA9IDEsCgkJLm5vX3RkYTc0MzIgICAgID0gMSwKCX0sCn07CgpzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJ0dHZfbnVtX3R2Y2FyZHMgPSBBUlJBWV9TSVpFKGJ0dHZfdHZjYXJkcyk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKc3RhdGljIHVuc2lnbmVkIGNoYXIgZWVwcm9tX2RhdGFbMjU2XTsKCi8qCiAqIGlkZW50aWZ5IGNhcmQKICovCnZvaWQgX19kZXZpbml0IGJ0dHZfaWRjYXJkKHN0cnVjdCBidHR2ICpidHYpCnsKCXVuc2lnbmVkIGludCBncGlvYml0czsKCWludCBpLHR5cGU7Cgl1bnNpZ25lZCBzaG9ydCB0bXA7CgoJLyogcmVhZCBQQ0kgc3Vic3lzdGVtIElEICovCglwY2lfcmVhZF9jb25maWdfd29yZChidHYtPmMucGNpLCBQQ0lfU1VCU1lTVEVNX0lELCAmdG1wKTsKCWJ0di0+Y2FyZGlkID0gdG1wIDw8IDE2OwoJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnR2LT5jLnBjaSwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZ0bXApOwoJYnR2LT5jYXJkaWQgfD0gdG1wOwoKCWlmICgwICE9IGJ0di0+Y2FyZGlkICYmIDB4ZmZmZmZmZmYgIT0gYnR2LT5jYXJkaWQpIHsKCQkvKiBsb29rIGZvciB0aGUgY2FyZCAqLwoJCWZvciAodHlwZSA9IC0xLCBpID0gMDsgY2FyZHNbaV0uaWQgIT0gMDsgaSsrKQoJCQlpZiAoY2FyZHNbaV0uaWQgID09IGJ0di0+Y2FyZGlkKQoJCQkJdHlwZSA9IGk7CgoJCWlmICh0eXBlICE9IC0xKSB7CgkJCS8qIGZvdW5kIGl0ICovCgkJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogZGV0ZWN0ZWQ6ICVzIFtjYXJkPSVkXSwgIgoJCQkgICAgICAgIlBDSSBzdWJzeXN0ZW0gSUQgaXMgJTA0eDolMDR4XG4iLAoJCQkgICAgICAgYnR2LT5jLm5yLGNhcmRzW3R5cGVdLm5hbWUsY2FyZHNbdHlwZV0uY2FyZG5yLAoJCQkgICAgICAgYnR2LT5jYXJkaWQgJiAweGZmZmYsCgkJCSAgICAgICAoYnR2LT5jYXJkaWQgPj4gMTYpICYgMHhmZmZmKTsKCQkJYnR2LT5jLnR5cGUgPSBjYXJkc1t0eXBlXS5jYXJkbnI7CgkJfSBlbHNlIHsKCQkJLyogNDA0ICovCgkJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogc3Vic3lzdGVtOiAlMDR4OiUwNHggKFVOS05PV04pXG4iLAoJCQkgICAgICAgYnR2LT5jLm5yLCBidHYtPmNhcmRpZCAmIDB4ZmZmZiwKCQkJICAgICAgIChidHYtPmNhcmRpZCA+PiAxNikgJiAweGZmZmYpOwoJCQlwcmludGsoS0VSTl9ERUJVRyAicGxlYXNlIG1haWwgaWQsIGJvYXJkIG5hbWUgYW5kICIKCQkJICAgICAgICJ0aGUgY29ycmVjdCBjYXJkPSBpbnNtb2Qgb3B0aW9uIHRvIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbVxuIik7CgkJfQoJfQoKCS8qIGxldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgYXV0b2RldGVjdGVkIHR5cGUgKi8KCWlmIChjYXJkW2J0di0+Yy5ucl0gPCBidHR2X251bV90dmNhcmRzKQoJCWJ0di0+Yy50eXBlPWNhcmRbYnR2LT5jLm5yXTsKCgkvKiBwcmludCB3aGljaCBjYXJkIGNvbmZpZyB3ZSBhcmUgdXNpbmcgKi8KCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogdXNpbmc6ICVzIFtjYXJkPSVkLCVzXVxuIixidHYtPmMubnIsCgkgICAgICAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5uYW1lLCBidHYtPmMudHlwZSwKCSAgICAgICBjYXJkW2J0di0+Yy5ucl0gPCBidHR2X251bV90dmNhcmRzCgkgICAgICAgPyAiaW5zbW9kIG9wdGlvbiIgOiAiYXV0b2RldGVjdGVkIik7CgoJLyogb3ZlcndyaXRlIGdwaW8gc3R1ZmYgPz8gKi8KCWlmIChVTlNFVCA9PSBhdWRpb2FsbCAmJiBVTlNFVCA9PSBhdWRpb211eFswXSkKCQlyZXR1cm47CgoJaWYgKFVOU0VUICE9IGF1ZGlvbXV4WzBdKSB7CgkJZ3Bpb2JpdHMgPSAwOwoJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ0dHZfdHZjYXJkcy0+Z3Bpb211eCk7IGkrKykgewoJCQlidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbaV0gPSBhdWRpb211eFtpXTsKCQkJZ3Bpb2JpdHMgfD0gYXVkaW9tdXhbaV07CgkJfQoJfSBlbHNlIHsKCQlncGlvYml0cyA9IGF1ZGlvYWxsOwoJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ0dHZfdHZjYXJkcy0+Z3Bpb211eCk7IGkrKykgewoJCQlidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbaV0gPSBhdWRpb2FsbDsKCQl9Cgl9CglidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrID0gKFVOU0VUICE9IGdwaW9tYXNrKSA/IGdwaW9tYXNrIDogZ3Bpb2JpdHM7CglwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IGdwaW8gY29uZmlnIG92ZXJyaWRlOiBtYXNrPTB4JXgsIG11eD0iLAoJICAgICAgIGJ0di0+Yy5ucixidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrKTsKCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ0dHZfdHZjYXJkcy0+Z3Bpb211eCk7IGkrKykgewoJCXByaW50aygiJXMweCV4IiwgaSA/ICIsIiA6ICIiLCBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbaV0pOwoJfQoJcHJpbnRrKCJcbiIpOwp9CgovKgogKiAobW9zdCkgYm9hcmQgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb25zIGdvZXMgaGVyZQogKi8KCi8qIFNvbWUgTW9kdWxhciBUZWNobm9sb2d5IGNhcmRzIGhhdmUgYW4gZWVwcm9tLCBidXQgbm8gc3Vic3lzdGVtIElEICovCnN0YXRpYyB2b2lkIGlkZW50aWZ5X2J5X2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGVlcHJvbV9kYXRhWzI1Nl0pCnsKCWludCB0eXBlID0gLTE7CgoJaWYgKDAgPT0gc3RybmNtcChlZXByb21fZGF0YSwiR0VUIE1NMjB4UENUViIsMTMpKQoJCXR5cGUgPSBCVFRWX0JPQVJEX01PRFRFQ18yMDU7CgllbHNlIGlmICgwID09IHN0cm5jbXAoZWVwcm9tX2RhdGErMjAsIlBpY29sbyIsNykpCgkJdHlwZSA9IEJUVFZfQk9BUkRfRVVSRVNZU19QSUNPTE87CgllbHNlIGlmIChlZXByb21fZGF0YVswXSA9PSAweDg0ICYmIGVlcHJvbV9kYXRhWzJdPT0gMCkKCQl0eXBlID0gQlRUVl9CT0FSRF9IQVVQUEFVR0U7IC8qIG9sZCBidDg0OCAqLwoKCWlmICgtMSAhPSB0eXBlKSB7CgkJYnR2LT5jLnR5cGUgPSB0eXBlOwoJCXByaW50aygiYnR0diVkOiBkZXRlY3RlZCBieSBlZXByb206ICVzIFtjYXJkPSVkXVxuIiwKCQkgICAgICAgYnR2LT5jLm5yLCBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5hbWUsIGJ0di0+Yy50eXBlKTsKCX0KfQoKc3RhdGljIHZvaWQgZmx5dmlkZW9fZ3BpbyhzdHJ1Y3QgYnR0diAqYnR2KQp7CglpbnQgZ3BpbyxoYXNfcmVtb3RlLGhhc19yYWRpbyxpc19jYXB0dXJlX29ubHksaXNfbHI5MCxoYXNfdGRhOTgyMF90ZGE5ODIxOwoJaW50IHR1bmVyPVVOU0VULHR0eXBlOwoKCWdwaW9faW5vdXQoMHhmZmZmZmYsIDApOwoJdWRlbGF5KDgpOyAgLyogd2l0aG91dCB0aGlzIHdlIHdvdWxkIHNlZSB0aGUgMHgxODAwIG1hc2sgKi8KCWdwaW8gPSBncGlvX3JlYWQoKTsKCS8qIEZJWE1FOiBtdXN0IHJlc3RvcmUgT1VSX0VOID8/PyAqLwoKCS8qIGFsbCBjYXJkcyBwcm92aWRlIEdQSU8gaW5mbywgc29tZSBoYXZlIGFuIGFkZGl0aW9uYWwgZWVwcm9tCgkgKiBMUjUwOiBHUElPIGNvZGluZyBjYW4gYmUgZm91bmQgbG93ZXIgcmlnaHQgQ1AxIC4uIENQOQoJICogICAgICAgQ1A5PUdQSU8yMyAuLiBDUDE9R1BJTzE1OyB3aGVuIE9QRU4sIHRoZSBjb3JyZXNwb25kaW5nIEdQSU8gcmVhZHMgMS4KCSAqICAgICAgIEdQSU8xNC0xMjogbi5jLgoJICogTFI5MDogR1A5PUdQSU8yMyAuLiBHUDE9R1BJTzE1IChyaWdodCBhYm92ZSB0aGUgYnQ4NzgpCgoJICogbG93ZXN0IDMgYnl0ZXMgYXJlIHJlbW90ZSBjb250cm9sIGNvZGVzIChubyBoYW5kc2hha2UgbmVlZGVkKQoJICogeHh4RkZGOiBObyByZW1vdGUgY29udHJvbCBjaGlwIHNvbGRlcmVkCgkgKiB4eHhGMDAoTFIyNi9MUjUwKSwgeHh4RkUwKExSOTApOiBSZW1vdGUgY29udHJvbCBjaGlwIChMVkEwMDEgb3IgQ0Y0NSkgc29sZGVyZWQKCSAqIE5vdGU6IFNvbWUgYml0cyBhcmUgQXVkaW9fTWFzayAhCgkgKi8KCXR0eXBlPShncGlvJjB4MGYwMDAwKT4+MTY7Cglzd2l0Y2godHR5cGUpIHsKCWNhc2UgMHgwOiB0dW5lcj0yOyAvKiBOVFNDLCBlLmcuIFRQSThOU1IxMVAgKi8KCQlicmVhazsKCWNhc2UgMHgyOiB0dW5lcj0zOTsvKiBMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykgVEFQQy1INzAxUCAqLwoJCWJyZWFrOwoJY2FzZSAweDQ6IHR1bmVyPTU7IC8qIFBoaWxpcHMgUEFMIFRQSThQU0IwMlAsIFRQSThQU0IxMlAsIFRQSThQU0IxMkQgb3IgRkkxMjE2LCBGTTEyMTYgKi8KCQlicmVhazsKCWNhc2UgMHg2OiB0dW5lcj0zNzsvKiBMRyBQQUwgKG5ld2VyIFRBUEMgc2VyaWVzKSBUQVBDLUc3MDJQICovCgkJYnJlYWs7CgkJY2FzZSAweEM6IHR1bmVyPTM7IC8qIFBoaWxpcHMgU0VDQU0oK1BBTCkgRlExMjE2TUUgb3IgRkkxMjE2TUYgKi8KCQlicmVhazsKCWRlZmF1bHQ6CgkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBGbHlWaWRlb19ncGlvOiB1bmtub3duIHR1bmVyIHR5cGUuXG4iLCBidHYtPmMubnIpOwoJfQoKCWhhc19yZW1vdGUgICAgICAgICAgPSAgIGdwaW8gJiAweDgwMDAwMDsKCWhhc19yYWRpbwkgICAgPSAgIGdwaW8gJiAweDQwMDAwMDsKCS8qICAgdW5rbm93biAgICAgICAgICAgICAgICAgICAweDIwMDAwMDsKCSAqICAgdW5rbm93bjIgICAgICAgICAgICAgICAgICAweDEwMDAwMDsgKi8KCWlzX2NhcHR1cmVfb25seSAgICAgPSAhKGdwaW8gJiAweDAwODAwMCk7IC8qIEdQSU8xNSAqLwoJaGFzX3RkYTk4MjBfdGRhOTgyMSA9ICEoZ3BpbyAmIDB4MDA0MDAwKTsKCWlzX2xyOTAgICAgICAgICAgICAgPSAhKGdwaW8gJiAweDAwMjAwMCk7IC8qIGVsc2UgTFIyNi9MUjUwIChMUjM4L0xSNTEgZi4gY2FwdHVyZSBvbmx5KSAqLwoJLyoKCSAqIGdwaW8gJiAweDAwMTAwMCAgICBvdXRwdXQgYml0IGZvciBhdWRpbyByb3V0aW5nICovCgoJaWYoaXNfY2FwdHVyZV9vbmx5KQoJCXR1bmVyID0gVFVORVJfQUJTRU5UOyAvKiBObyB0dW5lciBwcmVzZW50ICovCgoJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBGbHlWaWRlbyBSYWRpbz0lcyBSZW1vdGVDb250cm9sPSVzIFR1bmVyPSVkIGdwaW89MHglMDZ4XG4iLAoJICAgICAgIGJ0di0+Yy5uciwgaGFzX3JhZGlvPyAieWVzIjoibm8gIiwgaGFzX3JlbW90ZT8gInllcyI6Im5vICIsIHR1bmVyLCBncGlvKTsKCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogRmx5VmlkZW8gIExSOTA9JXMgdGRhOTgyMS90ZGE5ODIwPSVzIGNhcHR1cmVfb25seT0lc1xuIiwKCQlidHYtPmMubnIsIGlzX2xyOTA/InllcyI6Im5vICIsIGhhc190ZGE5ODIwX3RkYTk4MjE/InllcyI6Im5vICIsCgkJaXNfY2FwdHVyZV9vbmx5PyJ5ZXMiOiJubyAiKTsKCglpZiAodHVuZXIgIT0gVU5TRVQpIC8qIG9ubHkgc2V0IGlmIGtub3duIHR1bmVyIGF1dG9kZXRlY3RlZCwgZWxzZSBsZXQgaW5zbW9kIG9wdGlvbiB0aHJvdWdoICovCgkJYnR2LT50dW5lcl90eXBlID0gdHVuZXI7CglidHYtPmhhc19yYWRpbyA9IGhhc19yYWRpbzsKCgkvKiBMUjkwIEF1ZGlvIFJvdXRpbmcgaXMgZG9uZSBieSAyIGhlZjQwNTIsIHNvIEF1ZGlvX01hc2sgaGFzIDQgYml0czogMHgwMDFjODAKCSAqIExSMjYvTFI1MCBvbmx5IGhhcyAxIGhlZjQwNTIsIEF1ZGlvX01hc2sgMHgwMDBjMDAKCSAqIEF1ZGlvIG9wdGlvbnM6IGZyb20gdHVuZXIsIGZyb20gdGRhOTgyMS90ZGE5ODIxKG1vbm8sc3RlcmVvLHNhcCksIGZyb20gdGRhOTg3NCwgZXh0LiwgbXV0ZSAqLwoJaWYoaGFzX3RkYTk4MjBfdGRhOTgyMSkgYnR2LT5hdWRpb19ob29rID0gbHQ5NDE1X2F1ZGlvOwoJLyogdG9kbzogaWYoaGFzX3RkYTk4NzQpIGJ0di0+YXVkaW9faG9vayA9IGZ2MjAwMHNfYXVkaW87ICovCn0KCnN0YXRpYyBpbnQgbWlyb190dW5lcm1hcFtdID0geyAwLDYsMiwzLCAgIDQsNSw2LDAsICAzLDAsNCw1LCAgNSwyLDE2LDEsCgkJCSAgICAgICAxNCwyLDE3LDEsIDQsMSw0LDMsICAxLDIsMTYsMSwgNCw0LDQsNCB9OwpzdGF0aWMgaW50IG1pcm9fZm10dW5lcltdICA9IHsgMCwwLDAsMCwgICAwLDAsMCwwLCAgMCwwLDAsMCwgIDAsMCwwLDEsCgkJCSAgICAgICAxLDEsMSwxLCAgIDEsMSwxLDAsICAwLDAsMCwwLCAgMCwxLDAsMCB9OwoKc3RhdGljIHZvaWQgbWlyb19waW5uYWNsZV9ncGlvKHN0cnVjdCBidHR2ICpidHYpCnsKCWludCBpZCxtc3AsZ3BpbzsKCWNoYXIgKmluZm87CgoJZ3Bpb19pbm91dCgweGZmZmZmZiwgMCk7CglncGlvID0gZ3Bpb19yZWFkKCk7CglpZCAgID0gKChncGlvPj4xMCkgJiA2MykgLTE7Cgltc3AgID0gYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfTVNQMzQwMCwgIk1TUDM0eHgiKTsKCWlmIChpZCA8IDMyKSB7CgkJYnR2LT50dW5lcl90eXBlID0gbWlyb190dW5lcm1hcFtpZF07CgkJaWYgKDAgPT0gKGdwaW8gJiAweDIwKSkgewoJCQlidHYtPmhhc19yYWRpbyA9IDE7CgkJCWlmICghbWlyb19mbXR1bmVyW2lkXSkgewoJCQkJYnR2LT5oYXNfbWF0Y2hib3ggPSAxOwoJCQkJYnR2LT5tYm94X3dlICAgID0gKDE8PDYpOwoJCQkJYnR2LT5tYm94X21vc3QgID0gKDE8PDcpOwoJCQkJYnR2LT5tYm94X2NsayAgID0gKDE8PDgpOwoJCQkJYnR2LT5tYm94X2RhdGEgID0gKDE8PDkpOwoJCQkJYnR2LT5tYm94X21hc2sgID0gKDE8PDYpfCgxPDw3KXwoMTw8OCl8KDE8PDkpOwoJCQl9CgkJfSBlbHNlIHsKCQkJYnR2LT5oYXNfcmFkaW8gPSAwOwoJCX0KCQlpZiAoLTEgIT0gbXNwKSB7CgkJCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX01JUk8pCgkJCQlidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfTUlST1BSTzsKCQkJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfQk9BUkRfUElOTkFDTEUpCgkJCQlidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfUElOTkFDTEVQUk87CgkJfQoJCXByaW50ayhLRVJOX0lORk8KCQkgICAgICAgImJ0dHYlZDogbWlybzogaWQ9JWQgdHVuZXI9JWQgcmFkaW89JXMgc3RlcmVvPSVzXG4iLAoJCSAgICAgICBidHYtPmMubnIsIGlkKzEsIGJ0di0+dHVuZXJfdHlwZSwKCQkgICAgICAgIWJ0di0+aGFzX3JhZGlvID8gIm5vIiA6CgkJICAgICAgIChidHYtPmhhc19tYXRjaGJveCA/ICJtYXRjaGJveCIgOiAiZm10dW5lciIpLAoJCSAgICAgICAoLTEgPT0gbXNwKSA/ICJubyIgOiAieWVzIik7Cgl9IGVsc2UgewoJCS8qIG5ldyBjYXJkcyB3aXRoIG1pY3JvdHVuZSB0dW5lciAqLwoJCWlkID0gNjMgLSBpZDsKCQlidHYtPmhhc19yYWRpbyA9IDA7CgkJc3dpdGNoIChpZCkgewoJCWNhc2UgMToKCQkJaW5mbyA9ICJQQUwgLyBtb25vIjsKCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X0lOVEVSQ0FSUklFUjsKCQkJYnJlYWs7CgkJY2FzZSAyOgoJCQlpbmZvID0gIlBBTCtTRUNBTSAvIHN0ZXJlbyI7CgkJCWJ0di0+aGFzX3JhZGlvID0gMTsKCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1FTUzsKCQkJYnJlYWs7CgkJY2FzZSAzOgoJCQlpbmZvID0gIk5UU0MgLyBzdGVyZW8iOwoJCQlidHYtPmhhc19yYWRpbyA9IDE7CgkJCWJ0di0+dGRhOTg4N19jb25mID0gVERBOTg4N19RU1M7CgkJCWJyZWFrOwoJCWNhc2UgNDoKCQkJaW5mbyA9ICJQQUwrU0VDQU0gLyBtb25vIjsKCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1FTUzsKCQkJYnJlYWs7CgkJY2FzZSA1OgoJCQlpbmZvID0gIk5UU0MgLyBtb25vIjsKCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X0lOVEVSQ0FSUklFUjsKCQkJYnJlYWs7CgkJY2FzZSA2OgoJCQlpbmZvID0gIk5UU0MgLyBzdGVyZW8iOwoJCQlidHYtPnRkYTk4ODdfY29uZiA9IFREQTk4ODdfSU5URVJDQVJSSUVSOwoJCQlicmVhazsKCQljYXNlIDc6CgkJCWluZm8gPSAiUEFMIC8gc3RlcmVvIjsKCQkJYnR2LT50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X0lOVEVSQ0FSUklFUjsKCQkJYnJlYWs7CgkJZGVmYXVsdDoKCQkJaW5mbyA9ICJvb3BzOiB1bmtub3duIGNhcmQiOwoJCQlicmVhazsKCQl9CgkJaWYgKC0xICE9IG1zcCkKCQkJYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX1BJTk5BQ0xFUFJPOwoJCXByaW50ayhLRVJOX0lORk8KCQkgICAgICAgImJ0dHYlZDogcGlubmFjbGUvbXQ6IGlkPSVkIGluZm89XCIlc1wiIHJhZGlvPSVzXG4iLAoJCSAgICAgICBidHYtPmMubnIsIGlkLCBpbmZvLCBidHYtPmhhc19yYWRpbyA/ICJ5ZXMiIDogIm5vIik7CgkJYnR2LT50dW5lcl90eXBlID0gVFVORVJfTVQyMDMyOwoJfQp9CgovKiBHUElPMjEgICBMOiBCdWZmZXIgYWt0aXYsIEg6IEJ1ZmZlciBpbmFrdGl2ICovCiNkZWZpbmUgTE0xODgyX1NZTkNfRFJJVkUgICAgIDB4MjAwMDAwTAoKc3RhdGljIHZvaWQgaW5pdF9pZHNfZWFnbGUoc3RydWN0IGJ0dHYgKmJ0dikKewoJZ3Bpb19pbm91dCgweGZmZmZmZiwweEZGRkYzNyk7CglncGlvX3dyaXRlKDB4MjAwMDIwKTsKCgkvKiBmbGFzaCBzdHJvYmUgaW52ZXJ0ZXIgPyEgKi8KCWdwaW9fd3JpdGUoMHgyMDAwMjQpOwoKCS8qIHN3aXRjaCBzeW5jIGRyaXZlIG9mZiAqLwoJZ3Bpb19iaXRzKExNMTg4Ml9TWU5DX0RSSVZFLExNMTg4Ml9TWU5DX0RSSVZFKTsKCgkvKiBzZXQgQlQ4NDggbXV4ZWwgdG8gMiAqLwoJYnRhb3IoKDIpPDw1LCB+KDI8PDUpLCBCVDg0OF9JRk9STSk7Cn0KCi8qIE11eHNlbCBoZWxwZXIgZm9yIHRoZSBJRFMgRWFnbGUuCiAqIHRoZSBlYWdsZXMgZG9lcyBub3QgdXNlIHRoZSBzdGFuZGFyZCBtdXhzZWwtYml0cyBidXQKICogaGFzIGl0cyBvd24gbXVsdGlwbGV4ZXIgKi8Kc3RhdGljIHZvaWQgZWFnbGVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJYnRhb3IoKDIpPDw1LCB+KDM8PDUpLCBCVDg0OF9JRk9STSk7CglncGlvX2JpdHMoMyxidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtpbnB1dCY3XSk7CgogICAgICAgLyogY29tcG9zaXRlICovCiAgICAgICAvKiBzZXQgY2hyb21hIEFEQyB0byBzbGVlcCAqLwogICAgICAgYnRvcihCVDg0OF9BRENfQ19TTEVFUCwgQlQ4NDhfQURDKTsKICAgICAgIC8qIHNldCB0byBjb21wb3NpdGUgdmlkZW8gKi8KICAgICAgIGJ0YW5kKH5CVDg0OF9DT05UUk9MX0NPTVAsIEJUODQ4X0VfQ09OVFJPTCk7CiAgICAgICBidGFuZCh+QlQ4NDhfQ09OVFJPTF9DT01QLCBCVDg0OF9PX0NPTlRST0wpOwoKICAgICAgIC8qIHN3aXRjaCBzeW5jIGRyaXZlIG9mZiAqLwogICAgICAgZ3Bpb19iaXRzKExNMTg4Ml9TWU5DX0RSSVZFLExNMTg4Ml9TWU5DX0RSSVZFKTsKfQoKc3RhdGljIHZvaWQgZ3ZjMTEwMF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQp7CglzdGF0aWMgY29uc3QgaW50IG1hc2tzW10gPSB7MHgzMCwgMHgwMSwgMHgxMiwgMHgyM307CglncGlvX3dyaXRlKG1hc2tzW2lucHV0JTRdKTsKfQoKLyogTE1MQlQ0eCBpbml0aWFsaXphdGlvbiAtIHRvIGFsbG93IGFjY2VzcyB0byBHUElPIGJpdHMgZm9yIHNlbnNvcnMgaW5wdXQgYW5kCiAgIGFsYXJtcyBvdXRwdXQKCiAgIEdQSU9iaXQgICAgfCAxMCB8IDkgfCA4IHwgNyB8IDYgfCA1IHwgNCB8IDMgfCAyIHwgMSB8IDAgfAogICBhc3NpZ25tZW50IHwgVEkgfCBPM3xJTnh8IE8yfCBPMXxJTjR8SU4zfElOMnxJTjF8ICAgfCAgIHwKCiAgIElOIC0gc2Vuc29yIGlucHV0cywgSU54IC0gc2Vuc29yIGlucHV0cyBhbmQgVEkgWE9SZWQgdG9nZXRoZXIKICAgTzEsTzIsTzMgLSBhbGFybSBvdXRwdXRzIChyZWxheXMpCgogICBPVVQgRU5BQkxFICAgMSAgICAxICAgMCAgLiAxICAxICAgMCAgIDAgLiAwICAgMCAgIDAgICAgMCAgID0gMHg2QzAKCiovCgpzdGF0aWMgdm9pZCBpbml0X2xtbGJ0NHgoc3RydWN0IGJ0dHYgKmJ0dikKewoJcHJpbnRrKEtFUk5fREVCVUcgIkxNTEJUNHggaW5pdFxuIik7CglidHdyaXRlKDB4MDAwMDAwLCBCVDg0OF9HUElPX1JFR19JTlApOwoJZ3Bpb19pbm91dCgweGZmZmZmZiwgMHgwMDA2QzApOwoJZ3Bpb193cml0ZSgweDAwMDAwMCk7Cn0KCnN0YXRpYyB2b2lkIHNpZ21hU1FfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJdW5zaWduZWQgaW50IGlubXV4ID0gaW5wdXQgJSA4OwoJZ3Bpb19pbm91dCggMHhmLCAweGYgKTsKCWdwaW9fYml0cyggMHhmLCBpbm11eCApOwp9CgpzdGF0aWMgdm9pZCBzaWdtYVNMQ19tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQp7Cgl1bnNpZ25lZCBpbnQgaW5tdXggPSBpbnB1dCAlIDQ7CglncGlvX2lub3V0KCAzPDw5LCAzPDw5ICk7CglncGlvX2JpdHMoIDM8PDksIGlubXV4PDw5ICk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpzdGF0aWMgdm9pZCBidHR2X3Jlc2V0X2F1ZGlvKHN0cnVjdCBidHR2ICpidHYpCnsKCS8qCgkgKiBCVDg3OEEgaGFzIGEgYXVkaW8tcmVzZXQgcmVnaXN0ZXIuCgkgKiAxLiBUaGlzIHJlZ2lzdGVyIGlzIGFuIGF1ZGlvIHJlc2V0IGZ1bmN0aW9uIGJ1dCBpdCBpcyBpbgoJICogICAgZnVuY3Rpb24tMCAodmlkZW8gY2FwdHVyZSkgYWRkcmVzcyBzcGFjZS4KCSAqIDIuIEl0IGlzIGVub3VnaCB0byBkbyB0aGlzIG9uY2UgcGVyIHBvd2VyLXVwIG9mIHRoZSBjYXJkLgoJICogMy4gVGhlcmUgaXMgYSB0eXBvIGluIHRoZSBDb25leGFudCBkb2MgLS0gaXQgaXMgbm90IGF0CgkgKiAgICAweDVCLCBidXQgYXQgMHgwNTguIChCIGlzIGFuIG9kZC1udW1iZXIsIG9idmlvdXNseSBhIHR5cG8hKS4KCSAqIC0tLy9TaHJpa3VtYXIgMDMwNjA5CgkgKi8KCWlmIChidHYtPmlkICE9IDg3OCkKCQlyZXR1cm47CgoJaWYgKGJ0dHZfZGVidWcpCgkJcHJpbnRrKCJidHR2JWQ6IEJUODc4QSBBUkVTRVRcbiIsYnR2LT5jLm5yKTsKCWJ0d3JpdGUoKDE8PDcpLCAweDA1OCk7Cgl1ZGVsYXkoMTApOwoJYnR3cml0ZSggICAgIDAsIDB4MDU4KTsKfQoKLyogaW5pdGlhbGl6YXRpb24gcGFydCBvbmUgLS0gYmVmb3JlIHJlZ2lzdGVyaW5nIGkyYyBidXMgKi8Kdm9pZCBfX2RldmluaXQgYnR0dl9pbml0X2NhcmQxKHN0cnVjdCBidHR2ICpidHYpCnsKCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKCWNhc2UgQlRUVl9CT0FSRF9IQVVQUEFVR0U6CgljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4OgoJCWJvb3RfbXNwMzR4eChidHYsNSk7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfMjAwOgoJY2FzZSBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNOgoJCWJvb3RfbXNwMzR4eChidHYsMjApOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX0FWRVJNRURJQTk4OgoJCWJvb3RfbXNwMzR4eChidHYsMTEpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUjoKCQlwdnJfYm9vdChidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX1RXSU5IQU5fRFNUOgoJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NzE6CgljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQ6CgkJYnR2LT51c2VfaTJjX2h3ID0gMTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9BRExJTktfUlRWMjQ6CgkJaW5pdF9SVFYyNCggYnR2ICk7CgkJYnJlYWs7CgoJfQoJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19kdmIpCgkJYnR0dl9yZXNldF9hdWRpbyhidHYpOwp9CgovKiBpbml0aWFsaXphdGlvbiBwYXJ0IHR3byAtLSBhZnRlciByZWdpc3RlcmluZyBpMmMgYnVzICovCnZvaWQgX19kZXZpbml0IGJ0dHZfaW5pdF9jYXJkMihzdHJ1Y3QgYnR0diAqYnR2KQp7CglpbnQgYWRkcj1BRERSX1VOU0VUOwoKCWJ0di0+dHVuZXJfdHlwZSA9IFVOU0VUOwoKCWlmIChCVFRWX0JPQVJEX1VOS05PV04gPT0gYnR2LT5jLnR5cGUpIHsKCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7CgkJaWRlbnRpZnlfYnlfZWVwcm9tKGJ0dixlZXByb21fZGF0YSk7Cgl9CgoJc3dpdGNoIChidHYtPmMudHlwZSkgewoJY2FzZSBCVFRWX0JPQVJEX01JUk86CgljYXNlIEJUVFZfQk9BUkRfTUlST1BSTzoKCWNhc2UgQlRUVl9CT0FSRF9QSU5OQUNMRToKCWNhc2UgQlRUVl9CT0FSRF9QSU5OQUNMRVBSTzoKCQkvKiBtaXJvL3Bpbm5hY2xlICovCgkJbWlyb19waW5uYWNsZV9ncGlvKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfRkxZVklERU9fOTg6CgljYXNlIEJUVFZfQk9BUkRfTUFYSToKCWNhc2UgQlRUVl9CT0FSRF9MSUZFX0ZMWUtJVDoKCWNhc2UgQlRUVl9CT0FSRF9GTFlWSURFTzoKCWNhc2UgQlRUVl9CT0FSRF9UWVBIT09OX1RWSUVXOgoJY2FzZSBCVFRWX0JPQVJEX0NIUk9OT1NfVlMyOgoJY2FzZSBCVFRWX0JPQVJEX0ZMWVZJREVPXzk4Rk06CgljYXNlIEJUVFZfQk9BUkRfRkxZVklERU8yMDAwOgoJY2FzZSBCVFRWX0JPQVJEX0ZMWVZJREVPOThFWjoKCWNhc2UgQlRUVl9CT0FSRF9DT05GRVJFTkNFVFY6CgljYXNlIEJUVFZfQk9BUkRfTElGRVRFQ185NDE1OgoJCWZseXZpZGVvX2dwaW8oYnR2KTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9IQVVQUEFVR0U6CgljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4OgoJY2FzZSBCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUjoKCQkvKiBwaWNrIHVwIHNvbWUgY29uZmlnIGluZm9zIGZyb20gdGhlIGVlcHJvbSAqLwoJCWJ0dHZfcmVhZGVlKGJ0dixlZXByb21fZGF0YSwweGEwKTsKCQloYXVwcGF1Z2VfZWVwcm9tKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfQVZFUk1FRElBOTg6CgljYXNlIEJUVFZfQk9BUkRfQVZQSE9ORTk4OgoJCWJ0dHZfcmVhZGVlKGJ0dixlZXByb21fZGF0YSwweGEwKTsKCQlhdmVybWVkaWFfZWVwcm9tKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfUFhDMjAwOgoJCWluaXRfUFhDMjAwKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVA6CgkJcGljb2xvX3RldHJhX2luaXQoYnR2KTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9WSFg6CgkJYnR2LT5oYXNfcmFkaW8gICAgPSAxOwoJCWJ0di0+aGFzX21hdGNoYm94ID0gMTsKCQlidHYtPm1ib3hfd2UgICAgICA9IDB4MjA7CgkJYnR2LT5tYm94X21vc3QgICAgPSAwOwoJCWJ0di0+bWJveF9jbGsgICAgID0gMHgwODsKCQlidHYtPm1ib3hfZGF0YSAgICA9IDB4MTA7CgkJYnR2LT5tYm94X21hc2sgICAgPSAweDM4OwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX1ZPQklTX0JPT1NUQVI6CgljYXNlIEJUVFZfQk9BUkRfVEVSUkFUVjoKCQl0ZXJyYXRlY19hY3RpdmVfcmFkaW9fdXBncmFkZShidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjE6CgkJaWYgKGJ0di0+Y2FyZGlkID09IDB4MzAwMjE0NGYpIHsKCQkJYnR2LT5oYXNfcmFkaW89MTsKCQkJcHJpbnRrKCJidHR2JWQ6IHJhZGlvIGRldGVjdGVkIGJ5IHN1YnN5c3RlbSBpZCAoQ1BIMDV4KVxuIixidHYtPmMubnIpOwoJCX0KCQlicmVhazsKICAgICAgIGNhc2UgQlRUVl9CT0FSRF9TVEIyOgoJCWlmIChidHYtPmNhcmRpZCA9PSAweDMwNjAxMjFhKSB7CgkJCS8qIEZpeCB1cCBlbnRyeSBmb3IgM0RGWCBWb29kb29UViAxMDAsCgkJCSAgIHdoaWNoIGlzIGFuIE9FTSBTVEIgY2FyZCB2YXJpYW50LiAqLwoJCQlidHYtPmhhc19yYWRpbz0wOwoJCQlidHYtPnR1bmVyX3R5cGU9VFVORVJfVEVNSUNfTlRTQzsKCQl9CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMXgwOgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTF4MF84NDg6CgljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMTAxXzg0ODoKCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkxeDE6CgljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMXgxX1NWSUQ6CgljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMnh4OgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklEOgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTJ4MDoKCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVk1MDA6CgljYXNlIEJUVFZfQk9BUkRfT1NQUkVZNTQwOgoJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTIwMDA6CgkJYnR0dl9yZWFkZWUoYnR2LGVlcHJvbV9kYXRhLDB4YTApOwoJCW9zcHJleV9lZXByb20oYnR2KTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9JRFNfRUFHTEU6CgkJaW5pdF9pZHNfZWFnbGUoYnR2KTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9NT0RURUNfMjA1OgoJCWJ0dHZfcmVhZGVlKGJ0dixlZXByb21fZGF0YSwweGEwKTsKCQltb2R0ZWNfZWVwcm9tKGJ0dik7CgkJYnJlYWs7CgljYXNlIEJUVFZfQk9BUkRfTE1MQlQ0OgoJCWluaXRfbG1sYnQ0eChidHYpOwoJCWJyZWFrOwoJY2FzZSBCVFRWX0JPQVJEX1RJQkVUX0NTMTY6CgkJdGliZXRDUzE2X2luaXQoYnR2KTsKCQlicmVhazsKCWNhc2UgQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSOgoJCWtvZGljb200NDAwcl9pbml0KGJ0dik7CgkJYnJlYWs7Cgl9CgoJLyogcGxsIGNvbmZpZ3VyYXRpb24gKi8KCWlmICghKGJ0di0+aWQ9PTg0OCAmJiBidHYtPnJldmlzaW9uPT0weDExKSkgewoJCS8qIGRlZmF1bHRzIGZyb20gY2FyZCBsaXN0ICovCgkJaWYgKFBMTF8yOCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnBsbCkgewoJCQlidHYtPnBsbC5wbGxfaWZyZXE9Mjg2MzYzNjM7CgkJCWJ0di0+cGxsLnBsbF9jcnlzdGFsPUJUODQ4X0lGT1JNX1hUMDsKCQl9CgkJaWYgKFBMTF8zNSA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnBsbCkgewoJCQlidHYtPnBsbC5wbGxfaWZyZXE9MzU0Njg5NTA7CgkJCWJ0di0+cGxsLnBsbF9jcnlzdGFsPUJUODQ4X0lGT1JNX1hUMTsKCQl9CgkJLyogaW5zbW9kIG9wdGlvbnMgY2FuIG92ZXJyaWRlICovCgkJc3dpdGNoIChwbGxbYnR2LT5jLm5yXSkgewoJCWNhc2UgMDogLyogbm9uZSAqLwoJCQlidHYtPnBsbC5wbGxfY3J5c3RhbCA9IDA7CgkJCWJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMDsKCQkJYnR2LT5wbGwucGxsX29mcmVxICAgPSAwOwoJCQlicmVhazsKCQljYXNlIDE6IC8qIDI4IE1IeiAqLwoJCWNhc2UgMjg6CgkJCWJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMjg2MzYzNjM7CgkJCWJ0di0+cGxsLnBsbF9vZnJlcSAgID0gMDsKCQkJYnR2LT5wbGwucGxsX2NyeXN0YWwgPSBCVDg0OF9JRk9STV9YVDA7CgkJCWJyZWFrOwoJCWNhc2UgMjogLyogMzUgTUh6ICovCgkJY2FzZSAzNToKCQkJYnR2LT5wbGwucGxsX2lmcmVxICAgPSAzNTQ2ODk1MDsKCQkJYnR2LT5wbGwucGxsX29mcmVxICAgPSAwOwoJCQlidHYtPnBsbC5wbGxfY3J5c3RhbCA9IEJUODQ4X0lGT1JNX1hUMTsKCQkJYnJlYWs7CgkJfQoJfQoJYnR2LT5wbGwucGxsX2N1cnJlbnQgPSAtMTsKCgkvKiB0dW5lciBjb25maWd1cmF0aW9uIChmcm9tIGNhcmQgbGlzdCAvIGF1dG9kZXRlY3QgLyBpbnNtb2Qgb3B0aW9uKSAqLwoJaWYgKEFERFJfVU5TRVQgIT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyKQoJCWFkZHIgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX2FkZHI7CgoJaWYgKFVOU0VUICE9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfdHlwZSkKCQlpZihVTlNFVCA9PSBidHYtPnR1bmVyX3R5cGUpCgkJCWJ0di0+dHVuZXJfdHlwZSA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfdHlwZTsKCWlmIChVTlNFVCAhPSB0dW5lcltidHYtPmMubnJdKQoJCWJ0di0+dHVuZXJfdHlwZSA9IHR1bmVyW2J0di0+Yy5ucl07CgoJaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQgfHwKCSAgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyID09IFVOU0VUKQoJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogdHVuZXIgYWJzZW50XG4iLCBidHYtPmMubnIpOwoJZWxzZSBpZihidHYtPnR1bmVyX3R5cGUgPT0gVU5TRVQpCgkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB0dW5lciB0eXBlIHVuc2V0XG4iLCBidHYtPmMubnIpOwoJZWxzZQoJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogdHVuZXIgdHlwZT0lZFxuIiwgYnR2LT5jLm5yLAoJCSAgICAgICBidHYtPnR1bmVyX3R5cGUpOwoKCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwoKCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX0RJR0lUQUxfVFY7CgkJdHVuX3NldHVwLnR5cGUgPSBidHYtPnR1bmVyX3R5cGU7CgkJdHVuX3NldHVwLmFkZHIgPSBhZGRyOwoKCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKCX0KCglpZiAoYnR2LT50ZGE5ODg3X2NvbmYpIHsKCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUREE5ODg3X1NFVF9DT05GSUcsCgkJCQkJCQkmYnR2LT50ZGE5ODg3X2NvbmYpOwoJfQoKCWJ0di0+c3ZocyA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZoczsKCWlmIChzdmhzW2J0di0+Yy5ucl0gIT0gVU5TRVQpCgkJYnR2LT5zdmhzID0gc3Zoc1tidHYtPmMubnJdOwoJaWYgKHJlbW90ZVtidHYtPmMubnJdICE9IFVOU0VUKQoJCWJ0di0+aGFzX3JlbW90ZSA9IHJlbW90ZVtidHYtPmMubnJdOwoKCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19yYWRpbykKCQlidHYtPmhhc19yYWRpbz0xOwoJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JlbW90ZSkKCQlidHYtPmhhc19yZW1vdGU9MTsKCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub19ncGlvaXJxKQoJCWJ0di0+Z3Bpb2lycT0xOwoJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9faG9vaykKCQlidHYtPmF1ZGlvX2hvb2s9YnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19ob29rOwoKCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmRpZ2l0YWxfbW9kZSA9PSBESUdJVEFMX01PREVfQ0FNRVJBKSB7CgkJLyogZGV0ZWN0IEJ0ODMyIGNoaXAgZm9yIHF1YXJ0enNpZ2h0IGRpZ2l0YWwgY2FtZXJhICovCgkJaWYgKChidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9CVDgzMl9BTFQxLCAiQnQ4MzIiKSA+PTApIHx8CgkJICAgIChidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9CVDgzMl9BTFQyLCAiQnQ4MzIiKSA+PTApKQoJCQlib290X2J0ODMyKGJ0dik7Cgl9CgoJaWYgKCFhdXRvbG9hZCkKCQlyZXR1cm47CgoJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgPT0gVU5TRVQpCgkJcmV0dXJuOyAgLyogbm8gdHVuZXIgb3IgcmVsYXRlZCBkcml2ZXJzIHRvIGxvYWQgKi8KCgkvKiB0cnkgdG8gZGV0ZWN0IGF1ZGlvL2ZhZGVyIGNoaXBzICovCglpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fbXNwMzR4eCAmJgoJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX01TUDM0MDAsICJNU1AzNHh4IikgPj0wKQoJCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CgoJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXNwMzR4eF9hbHQgJiYKCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9NU1AzNDAwX0FMVCwgIk1TUDM0eHggKGFsdGVybmF0ZSBhZGRyZXNzKSIpID49MCkKCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOwoKCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub190ZGE5ODc1ICYmCgkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfVERBOTg3NSwgIlREQTk4NzUiKSA+PTApCgkJcmVxdWVzdF9tb2R1bGUoInRkYTk4NzUiKTsKCglpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdGRhNzQzMiAmJgoJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX1REQTc0MzIsICJUREE3NDMyIikgPj0wKQoJCXJlcXVlc3RfbW9kdWxlKCJ0ZGE3NDMyIik7CgoJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubmVlZHNfdHZhdWRpbykKCQlyZXF1ZXN0X21vZHVsZSgidHZhdWRpbyIpOwoKCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQgJiYgYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKfQoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpzdGF0aWMgdm9pZCBtb2R0ZWNfZWVwcm9tKHN0cnVjdCBidHR2ICpidHYpCnsKCWlmKCBzdHJuY21wKCYoZWVwcm9tX2RhdGFbMHgxZV0pLCJUZW1pYyA0MDY2IEZZNSIsMTQpID09MCkgewoJCWJ0di0+dHVuZXJfdHlwZT1UVU5FUl9URU1JQ180MDY2Rlk1X1BBTF9JOwoJCXByaW50aygiYnR0diVkOiBNb2R0ZWM6IFR1bmVyIGF1dG9kZXRlY3RlZCBieSBlZXByb206ICVzXG4iLAoJCSAgICAgICBidHYtPmMubnIsJmVlcHJvbV9kYXRhWzB4MWVdKTsKCX0gZWxzZSBpZiAoc3RybmNtcCgmKGVlcHJvbV9kYXRhWzB4MWVdKSwiQWxwcyBUU0JCNSIsMTApID09MCkgewoJCWJ0di0+dHVuZXJfdHlwZT1UVU5FUl9BTFBTX1RTQkI1X1BBTF9JOwoJCXByaW50aygiYnR0diVkOiBNb2R0ZWM6IFR1bmVyIGF1dG9kZXRlY3RlZCBieSBlZXByb206ICVzXG4iLAoJCSAgICAgICBidHYtPmMubnIsJmVlcHJvbV9kYXRhWzB4MWVdKTsKCX0gZWxzZSBpZiAoc3RybmNtcCgmKGVlcHJvbV9kYXRhWzB4MWVdKSwiUGhpbGlwcyBGTTEyNDYiLDE0KSA9PTApIHsKCQlidHYtPnR1bmVyX3R5cGU9VFVORVJfUEhJTElQU19OVFNDOwoJCXByaW50aygiYnR0diVkOiBNb2R0ZWM6IFR1bmVyIGF1dG9kZXRlY3RlZCBieSBlZXByb206ICVzXG4iLAoJCSAgICAgICBidHYtPmMubnIsJmVlcHJvbV9kYXRhWzB4MWVdKTsKCX0gZWxzZSB7CgkJcHJpbnRrKCJidHR2JWQ6IE1vZHRlYzogVW5rbm93biBUdW5lclN0cmluZzogJXNcbiIsCgkJICAgICAgIGJ0di0+Yy5uciwmZWVwcm9tX2RhdGFbMHgxZV0pOwoJfQp9CgpzdGF0aWMgdm9pZCBfX2RldmluaXQgaGF1cHBhdWdlX2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KQp7CglzdHJ1Y3QgdHZlZXByb20gdHY7CgoJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmYnR2LT5pMmNfY2xpZW50LCAmdHYsIGVlcHJvbV9kYXRhKTsKCWJ0di0+dHVuZXJfdHlwZSA9IHR2LnR1bmVyX3R5cGU7CglidHYtPmhhc19yYWRpbyAgPSB0di5oYXNfcmFkaW87CgoJcHJpbnRrKCJidHR2JWQ6IEhhdXBwYXVnZSBlZXByb20gaW5kaWNhdGVzIG1vZGVsIyVkXG4iLAoJCWJ0di0+Yy5uciwgdHYubW9kZWwpOwoKCS8qCgkgKiBTb21lIG9mIHRoZSA4NzggYm9hcmRzIGhhdmUgZHVwbGljYXRlIFBDSSBJRHMuIFN3aXRjaCB0aGUgYm9hcmQKCSAqIHR5cGUgYmFzZWQgb24gbW9kZWwgIy4KCSAqLwoJaWYodHYubW9kZWwgPT0gNjQ5MDApIHsKCQlwcmludGsoImJ0dHYlZDogU3dpdGNoaW5nIGJvYXJkIHR5cGUgZnJvbSAlcyB0byAlc1xuIiwKCQkJYnR2LT5jLm5yLAoJCQlidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5hbWUsCgkJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0JdLm5hbWUpOwoJCWJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9IQVVQUEFVR0VfSU1QQUNUVkNCOwoJfQp9CgpzdGF0aWMgaW50IHRlcnJhdGVjX2FjdGl2ZV9yYWRpb191cGdyYWRlKHN0cnVjdCBidHR2ICpidHYpCnsKCWludCBmcmVxOwoKCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKCWJ0di0+aGFzX21hdGNoYm94ID0gMTsKCWJ0di0+bWJveF93ZSAgICAgID0gMHgxMDsKCWJ0di0+bWJveF9tb3N0ICAgID0gMHgyMDsKCWJ0di0+bWJveF9jbGsgICAgID0gMHgwODsKCWJ0di0+bWJveF9kYXRhICAgID0gMHgwNDsKCWJ0di0+bWJveF9tYXNrICAgID0gMHgzYzsKCglidHYtPm1ib3hfaW93ICAgICA9IDEgPDwgIDg7CglidHYtPm1ib3hfaW9yICAgICA9IDEgPDwgIDk7CglidHYtPm1ib3hfY3NlbCAgICA9IDEgPDwgMTA7CgoJZnJlcT04ODAwMC82Mi41OwoJdGVhNTc1N193cml0ZShidHYsIDUgKiBmcmVxICsgMHgzNTgpOyAvKiB3cml0ZSAweDFlZDggKi8KCWlmICgweDFlZDggPT0gdGVhNTc1N19yZWFkKGJ0dikpIHsKCQlwcmludGsoImJ0dHYlZDogVGVycmF0ZWMgQWN0aXZlIFJhZGlvIFVwZ3JhZGUgZm91bmQuXG4iLAoJCSAgICAgICBidHYtPmMubnIpOwoJCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKCQlidHYtPmhhc19tYXRjaGJveCA9IDE7Cgl9IGVsc2UgewoJCWJ0di0+aGFzX3JhZGlvICAgID0gMDsKCQlidHYtPmhhc19tYXRjaGJveCA9IDA7Cgl9CglyZXR1cm4gMDsKfQoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKgogKiBtaW5pbWFsIGJvb3RzdHJhcCBmb3IgdGhlIFdpblRWL1BWUiAtLSB1cGxvYWQgYWx0ZXJhIGZpcm13YXJlLgogKgogKiBUaGUgaGN3YW1jLnJiZiBmaXJtd2FyZSBmaWxlIGlzIG9uIHRoZSBIYXVwcGF1Z2UgZHJpdmVyIENELiAgSGF2ZQogKiBhIGxvb2sgYXQgUHZyL3B2cjQ1eHh4LkVYRSAoc2VsZi1leHRyYWN0aW5nIHppcCBhcmNoaXZlLCBjYW4gYmUKICogdW5wYWNrZWQgd2l0aCB1bnppcCkuCiAqLwojZGVmaW5lIFBWUl9HUElPX0RFTEFZCQkxMAoKI2RlZmluZSBCVFRWX0FMVF9EQVRBCQkweDAwMDAwMQojZGVmaW5lIEJUVFZfQUxUX0RDTEsJCTB4MTAwMDAwCiNkZWZpbmUgQlRUVl9BTFRfTkNPTkZJRwkweDgwMDAwMAoKc3RhdGljIGludCBfX2RldmluaXQgcHZyX2FsdGVyYV9sb2FkKHN0cnVjdCBidHR2ICpidHYsIHU4ICptaWNybywgdTMyIG1pY3JvbGVuKQp7Cgl1MzIgbjsKCXU4IGJpdHM7CglpbnQgaTsKCglncGlvX2lub3V0KDB4ZmZmZmZmLEJUVFZfQUxUX0RBVEF8QlRUVl9BTFRfRENMS3xCVFRWX0FMVF9OQ09ORklHKTsKCWdwaW9fd3JpdGUoMCk7Cgl1ZGVsYXkoUFZSX0dQSU9fREVMQVkpOwoKCWdwaW9fd3JpdGUoQlRUVl9BTFRfTkNPTkZJRyk7Cgl1ZGVsYXkoUFZSX0dQSU9fREVMQVkpOwoKCWZvciAobiA9IDA7IG4gPCBtaWNyb2xlbjsgbisrKSB7CgkJYml0cyA9IG1pY3JvW25dOwoJCWZvciAoaSA9IDAgOyBpIDwgOCA7IGkrKykgewoJCQlncGlvX2JpdHMoQlRUVl9BTFRfRENMSywwKTsKCQkJaWYgKGJpdHMgJiAweDAxKQoJCQkJZ3Bpb19iaXRzKEJUVFZfQUxUX0RBVEEsQlRUVl9BTFRfREFUQSk7CgkJCWVsc2UKCQkJCWdwaW9fYml0cyhCVFRWX0FMVF9EQVRBLDApOwoJCQlncGlvX2JpdHMoQlRUVl9BTFRfRENMSyxCVFRWX0FMVF9EQ0xLKTsKCQkJYml0cyA+Pj0gMTsKCQl9Cgl9CglncGlvX2JpdHMoQlRUVl9BTFRfRENMSywwKTsKCXVkZWxheShQVlJfR1BJT19ERUxBWSk7CgoJLyogYmVnaW4gQWx0ZXJhIGluaXQgbG9vcCAoTm90IG5lY2Vzc2FyeSxidXQgZG9lc24ndCBodXJ0KSAqLwoJZm9yIChpID0gMCA7IGkgPCAzMCA7IGkrKykgewoJCWdwaW9fYml0cyhCVFRWX0FMVF9EQ0xLLDApOwoJCWdwaW9fYml0cyhCVFRWX0FMVF9EQ0xLLEJUVFZfQUxUX0RDTEspOwoJfQoJZ3Bpb19iaXRzKEJUVFZfQUxUX0RDTEssMCk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBfX2RldmluaXQgcHZyX2Jvb3Qoc3RydWN0IGJ0dHYgKmJ0dikKewoJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKCWludCByYzsKCglyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaGN3YW1jLnJiZiIsICZidHYtPmMucGNpLT5kZXYpOwoJaWYgKHJjICE9IDApIHsKCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IG5vIGFsdGVyYSBmaXJtd2FyZSBbdmlhIGhvdHBsdWddXG4iLAoJCSAgICAgICBidHYtPmMubnIpOwoJCXJldHVybiByYzsKCX0KCXJjID0gcHZyX2FsdGVyYV9sb2FkKGJ0diwgZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogYWx0ZXJhIGZpcm13YXJlIHVwbG9hZCAlc1xuIiwKCSAgICAgICBidHYtPmMubnIsIChyYyA8IDApID8gImZhaWxlZCIgOiAib2siKTsKCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwoJcmV0dXJuIHJjOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBzb21lIG9zcHJleSBzcGVjaWZpYyBzdHVmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKc3RhdGljIHZvaWQgX19kZXZpbml0IG9zcHJleV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0dikKewogICAgICAgaW50IGkgPSAwOwogICAgICAgdW5zaWduZWQgY2hhciAqZWUgPSBlZXByb21fZGF0YTsKICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsID0gMDsKCiAgICAgICBpZiAoYnR2LT5jLnR5cGUgPT0gMCkgewoJICAgICAgIC8qIHRoaXMgbWlnaHQgYmUgYW4gYW50aXF1ZS4uLiBjaGVjayBmb3IgTU1BQyBsYWJlbCBpbiBlZXByb20gKi8KCSAgICAgICBpZiAoKGVlWzBdPT0nTScpICYmIChlZVsxXT09J00nKSAmJiAoZWVbMl09PSdBJykgJiYgKGVlWzNdPT0nQycpKSB7CgkJICAgICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tzdW0gPSAwOwoJCSAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjE7IGkrKykKCQkJICAgICAgIGNoZWNrc3VtICs9IGVlW2ldOwoJCSAgICAgICBpZiAoY2hlY2tzdW0gIT0gZWVbMjFdKQoJCQkgICAgICAgcmV0dXJuOwoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgwXzg0ODsKCQkgICAgICAgZm9yIChpID0gMTI7IGkgPCAyMTsgaSsrKQoJCQkgICAgICAgc2VyaWFsICo9IDEwLCBzZXJpYWwgKz0gZWVbaV0gLSAnMCc7CgkgICAgICAgfQogICAgICAgfSBlbHNlIHsKCSAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlOwoJICAgICAgIGludCBvZmZzZXQgPSA0KjE2OwoKCSAgICAgICBmb3IgKDsgb2Zmc2V0IDwgOCoxNjsgb2Zmc2V0ICs9IDE2KSB7CgkJICAgICAgIHVuc2lnbmVkIHNob3J0IGNoZWNrc3VtID0gMDsKCQkgICAgICAgLyogdmVyaWZ5IHRoZSBjaGVja3N1bSAqLwoJCSAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykKCQkJCWNoZWNrc3VtICs9IGVlW2krb2Zmc2V0XTsKCQkJY2hlY2tzdW0gPSB+Y2hlY2tzdW07ICAvKiBubyBpZGVhIHdoeSAqLwoJCQlpZiAoKCgoY2hlY2tzdW0+PjgpJjB4MEZGKSA9PSBlZVtvZmZzZXQrMTRdKSAmJgoJCQkJICAgKChjaGVja3N1bSAmIDB4MEZGKSA9PSBlZVtvZmZzZXQrMTVdKSkgewoJCQkgICAgICAgYnJlYWs7CgkJICAgICAgIH0KCSAgICAgICB9CgoJICAgICAgIGlmIChvZmZzZXQgPj0gOCoxNikKCQkgICAgICAgcmV0dXJuOwoKCSAgICAgICAvKiBmb3VuZCBhIHZhbGlkIGRlc2NyaXB0b3IgKi8KCSAgICAgICB0eXBlID0gKGVlW29mZnNldCs0XTw8OCkgfCAoZWVbb2Zmc2V0KzVdKTsKCgkgICAgICAgc3dpdGNoKHR5cGUpIHsKCSAgICAgICAvKiA4NDggYmFzZWQgKi8KCSAgICAgICBjYXNlIDB4MDAwNDoKCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTF4MF84NDg7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGNhc2UgMHgwMDA1OgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMTAxXzg0ODsKCQkgICAgICAgYnJlYWs7CgoJICAgICAgIC8qIDg3OCBiYXNlZCAqLwoJICAgICAgIGNhc2UgMHgwMDEyOgoJICAgICAgIGNhc2UgMHgwMDEzOgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgwOwoJCSAgICAgICBicmVhazsKCSAgICAgICBjYXNlIDB4MDAxNDoKCSAgICAgICBjYXNlIDB4MDAxNToKCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTF4MTsKCQkgICAgICAgYnJlYWs7CgkgICAgICAgY2FzZSAweDAwMTY6CgkgICAgICAgY2FzZSAweDAwMTc6CgkgICAgICAgY2FzZSAweDAwMjA6CgkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkxeDFfU1ZJRDsKCQkgICAgICAgYnJlYWs7CgkgICAgICAgY2FzZSAweDAwMTg6CgkgICAgICAgY2FzZSAweDAwMTk6CgkgICAgICAgY2FzZSAweDAwMUU6CgkgICAgICAgY2FzZSAweDAwMUY6CgkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkyeHg7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGNhc2UgMHgwMDFBOgoJICAgICAgIGNhc2UgMHgwMDFCOgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMngwX1NWSUQ7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGNhc2UgMHgwMDQwOgoJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZNTAwOwoJCSAgICAgICBicmVhazsKCSAgICAgICBjYXNlIDB4MDA1MDoKCSAgICAgICBjYXNlIDB4MDA1NjoKCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTU0MDsKCQkgICAgICAgLyogYnR0dl9vc3ByZXlfNTQwX2luaXQoYnR2KTsgKi8KCQkgICAgICAgYnJlYWs7CgkgICAgICAgY2FzZSAweDAwNjA6CgkgICAgICAgY2FzZSAweDAwNzA6CgkgICAgICAgY2FzZSAweDAwQTA6CgkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkyeDA7CgkJICAgICAgIC8qIGVuYWJsZSBvdXRwdXQgb24gc2VsZWN0IGNvbnRyb2wgbGluZXMgKi8KCQkgICAgICAgZ3Bpb19pbm91dCgweGZmZmZmZiwweDAwMDMwMyk7CgkJICAgICAgIGJyZWFrOwoJICAgICAgIGRlZmF1bHQ6CgkJICAgICAgIC8qIHVua25vd24uLi5sZWF2ZSBnZW5lcmljLCBidXQgZ2V0IHNlcmlhbCAjICovCgkJICAgICAgIGJyZWFrOwoJICAgICAgIH0KCSAgICAgICBzZXJpYWwgPSAgKGVlW29mZnNldCs2XSA8PCAyNCkKCQkgICAgICAgfCAoZWVbb2Zmc2V0KzddIDw8IDE2KQoJCSAgICAgICB8IChlZVtvZmZzZXQrOF0gPDwgIDgpCgkJICAgICAgIHwgKGVlW29mZnNldCs5XSk7CiAgICAgICB9CgogICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBvc3ByZXkgZWVwcm9tOiBjYXJkPSVkIG5hbWU9JXMgc2VyaWFsPSVsZFxuIiwKCSAgICAgIGJ0di0+Yy5uciwgYnR2LT5jLnR5cGUsIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubmFtZSxzZXJpYWwpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBBVmVybWVkaWEgc3BlY2lmaWMgc3R1ZmYsIGZyb20gIGJrdHJfY2FyZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKc3RhdGljIGludCB0dW5lcl8wX3RhYmxlW10gPSB7CglUVU5FUl9QSElMSVBTX05UU0MsICBUVU5FUl9QSElMSVBTX1BBTCAvKiBQQUwtQkcqLywKCVRVTkVSX1BISUxJUFNfUEFMLCAgIFRVTkVSX1BISUxJUFNfUEFMIC8qIFBBTC1JKi8sCglUVU5FUl9QSElMSVBTX1BBTCwgICBUVU5FUl9QSElMSVBTX1BBTCwKCVRVTkVSX1BISUxJUFNfU0VDQU0sIFRVTkVSX1BISUxJUFNfU0VDQU0sCglUVU5FUl9QSElMSVBTX1NFQ0FNLCBUVU5FUl9QSElMSVBTX1BBTCwKCVRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszIH07CgpzdGF0aWMgaW50IHR1bmVyXzFfdGFibGVbXSA9IHsKCVRVTkVSX1RFTUlDX05UU0MsICBUVU5FUl9URU1JQ19QQUwsCglUVU5FUl9URU1JQ19QQUwsICAgVFVORVJfVEVNSUNfUEFMLAoJVFVORVJfVEVNSUNfUEFMLCAgIFRVTkVSX1RFTUlDX1BBTCwKCVRVTkVSX1RFTUlDXzQwMTJGWTUsIFRVTkVSX1RFTUlDXzQwMTJGWTUsIC8qIFRVTkVSX1RFTUlDX1NFQ0FNICovCglUVU5FUl9URU1JQ180MDEyRlk1LCBUVU5FUl9URU1JQ19QQUx9OwoKc3RhdGljIHZvaWQgX19kZXZpbml0IGF2ZXJtZWRpYV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0dikKewoJaW50IHR1bmVyX21ha2UsdHVuZXJfdHZfZm0sdHVuZXJfZm9ybWF0LHR1bmVyPTA7CgoJdHVuZXJfbWFrZSAgICAgID0gKGVlcHJvbV9kYXRhWzB4NDFdICYgMHg3KTsKCXR1bmVyX3R2X2ZtICAgICA9IChlZXByb21fZGF0YVsweDQxXSAmIDB4MTgpID4+IDM7Cgl0dW5lcl9mb3JtYXQgICAgPSAoZWVwcm9tX2RhdGFbMHg0Ml0gJiAweGYwKSA+PiA0OwoJYnR2LT5oYXNfcmVtb3RlID0gKGVlcHJvbV9kYXRhWzB4NDJdICYgMHgwMSk7CgoJaWYgKHR1bmVyX21ha2UgPT0gMCB8fCB0dW5lcl9tYWtlID09IDIpCgkJaWYodHVuZXJfZm9ybWF0IDw9MHgwYSkKCQkJdHVuZXIgPSB0dW5lcl8wX3RhYmxlW3R1bmVyX2Zvcm1hdF07CglpZiAodHVuZXJfbWFrZSA9PSAxKQoJCWlmKHR1bmVyX2Zvcm1hdCA8PTkpCgkJCXR1bmVyID0gdHVuZXJfMV90YWJsZVt0dW5lcl9mb3JtYXRdOwoKCWlmICh0dW5lcl9tYWtlID09IDQpCgkJaWYodHVuZXJfZm9ybWF0ID09IDB4MDkpCgkJCXR1bmVyID0gVFVORVJfTEdfTlRTQ19ORVdfVEFQQzsgLyogVEFQQy1HNzAyUCAqLwoKCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogQXZlcm1lZGlhIGVlcHJvbVsweCUwMnglMDJ4XTogdHVuZXI9IiwKCQlidHYtPmMubnIsZWVwcm9tX2RhdGFbMHg0MV0sZWVwcm9tX2RhdGFbMHg0Ml0pOwoJaWYodHVuZXIpIHsKCQlidHYtPnR1bmVyX3R5cGU9dHVuZXI7CgkJcHJpbnRrKCIlZCIsdHVuZXIpOwoJfSBlbHNlCgkJcHJpbnRrKCJVbmtub3duIHR5cGUiKTsKCXByaW50aygiIHJhZGlvOiVzIHJlbW90ZSBjb250cm9sOiVzXG4iLAoJICAgICAgIHR1bmVyX3R2X2ZtICAgICA/ICJ5ZXMiIDogIm5vIiwKCSAgICAgICBidHYtPmhhc19yZW1vdGUgPyAieWVzIiA6ICJubyIpOwp9CgovKiB1c2VkIG9uIFZvb2RvbyBUVi9GTSAoVm9vZG9vIDIwMCksIFMwIHdpcmVkIHRvIDB4MTAwMDAgKi8Kdm9pZCBidHR2X3RkYTk4ODBfc2V0bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgbm9ybSkKewoJLyogZml4IHVwIG91ciBjYXJkIGVudHJ5ICovCglpZihub3JtPT1WSURFT19NT0RFX05UU0MpIHsKCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211eFtUVkFVRElPX0lOUFVUX1RVTkVSXT0weDk1N2ZmZjsKCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211dGU9MHg5NTdmZmY7CgkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTU3ZmZmOwoJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMF0uZ3Bpb211dGU9MHg5NTdmZmY7CgkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gTlRTQ1xuIik7Cgl9CgllbHNlIHsKCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211eFtUVkFVRElPX0lOUFVUX1RVTkVSXT0weDk0N2ZmZjsKCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211dGU9MHg5NDdmZmY7CgkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTQ3ZmZmOwoJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMF0uZ3Bpb211dGU9MHg5NDdmZmY7CgkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gUEFMXG4iKTsKCX0KCS8qIHNldCBHUElPIGFjY29yZGluZyAqLwoJZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssCgkJICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbYnR2LT5hdWRpb10pOwp9CgoKLyoKICogcmVzZXQvZW5hYmxlIHRoZSBNU1Agb24gc29tZSBIYXVwcGF1Z2UgY2FyZHMKICogVGhhbmtzIHRvIEt5w7ZzdGkgTcOkbGtraSAoa21hbGtraUBjYy5odXQuZmkpIQogKgogKiBIYXVwcGF1Z2U6ICBwaW4gIDUKICogVm9vZG9vOiAgICAgcGluIDIwCiAqLwpzdGF0aWMgdm9pZCBfX2RldmluaXQgYm9vdF9tc3AzNHh4KHN0cnVjdCBidHR2ICpidHYsIGludCBwaW4pCnsKCWludCBtYXNrID0gKDEgPDwgcGluKTsKCglncGlvX2lub3V0KG1hc2ssbWFzayk7CglncGlvX2JpdHMobWFzaywwKTsKCXVkZWxheSgyNTAwKTsKCWdwaW9fYml0cyhtYXNrLG1hc2spOwoKCWlmIChidHR2X2dwaW8pCgkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwibXNwMzR4eCIpOwoJaWYgKGJ0dHZfdmVyYm9zZSkKCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IEhhdXBwYXVnZS9Wb29kb28gbXNwMzR4eDogcmVzZXQgbGluZSAiCgkJICAgICAgICJpbml0IFslZF1cbiIsIGJ0di0+Yy5uciwgcGluKTsKfQoKc3RhdGljIHZvaWQgX19kZXZpbml0IGJvb3RfYnQ4MzIoc3RydWN0IGJ0dHYgKmJ0dikKewp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgSW1hZ2VuYXRpb24gTC1Nb2RlbCBQWEMyMDAgRnJhbWVncmFiYmVyICovCi8qICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBwcm9jZWR1cmUgYXMKICogIHVzZWQgYnkgQWxlc3NhbmRybyBSdWJpbmkgaW4gaGlzIHB4YzIwMAogKiAgZHJpdmVyLCBidXQgdXNpbmcgQlRUViBmdW5jdGlvbnMgKi8KCnN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X1BYQzIwMChzdHJ1Y3QgYnR0diAqYnR2KQp7CglzdGF0aWMgaW50IHZhbHNbXSBfX2RldmluaXRkYXRhID0geyAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBkLCAweDBkLAoJCQkJCSAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LAoJCQkJCSAgICAweDAwIH07Cgl1bnNpZ25lZCBpbnQgaTsKCWludCB0bXA7Cgl1MzIgdmFsOwoKCS8qIEluaXRpYWxpc2UgR1BJTy1jb25uZXZ0ZWQgc3R1ZmYgKi8KCWdwaW9faW5vdXQoMHhmZmZmZmYsICgxPDwxMykpOwoJZ3Bpb193cml0ZSgwKTsKCXVkZWxheSgzKTsKCWdwaW9fd3JpdGUoMTw8MTMpOwoJLyogR1BJTyBpbnB1dHMgYXJlIHB1bGxlZCB1cCwgc28gbm8gbmVlZCB0byBkcml2ZQoJICogcmVzZXQgcGluIGFueSBsb25nZXIgKi8KCWdwaW9fYml0cygweGZmZmZmZiwgMCk7CglpZiAoYnR0dl9ncGlvKQoJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsInB4YzIwMCIpOwoKCS8qICB3ZSBjb3VsZC9zaG91bGQgdHJ5IGFuZCByZXNldC9jb250cm9sIHRoZSBBRCBwb3RzPyBidXQKCSAgICByaWdodCBub3cgIHdlIHNpbXBseSAgdHVybmVkIG9mZiB0aGUgY3J1c2hpbmcuICBXaXRob3V0CgkgICAgdGhpcyB0aGUgQUdDIGRyaWZ0cyBkcmlmdHMKCSAgICByZW1lbWJlciB0aGUgRU4gaXMgcmV2ZXJzZSBsb2dpYyAtLT4KCSAgICBzZXR0aW5nIEJUODQ4X0FEQ19BR0NfRU4gZGlzYWJsZSB0aGUgQUdDCgkgICAgdGJvdWx0QGVlY3MubGVoaWdoLmVkdQoJKi8KCglidHdyaXRlKEJUODQ4X0FEQ19SRVNFUlZFRHxCVDg0OF9BRENfQUdDX0VOLCBCVDg0OF9BREMpOwoKCS8qCUluaXRpYWxpc2UgTUFYNTE3IERBQyAqLwoJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBEQUMgcmVmZXJlbmNlIHZvbHRhZ2UgbGV2ZWwgLi4uXG4iKTsKCWJ0dHZfSTJDV3JpdGUoYnR2LDB4NUUsMCwweDgwLDEpOwoKCS8qCUluaXRpYWxpc2UgMTJDNTA4IFBJQyAqLwoJLyoJVGhlIEkyQ1dyaXRlIGFuZCBJMkNSZWFkIGNvbW1tYW5kcyBhcmUgYWN0dWFsbHkgdG8gdGhlCgkgKglzYW1lIGNoaXBzIC0gYnV0IHRoZSBSL1cgYml0IGlzIGluY2x1ZGVkIGluIHRoZSBhZGRyZXNzCgkgKglhcmd1bWVudCBzbyB0aGUgbnVtYmVycyBhcmUgZGlmZmVyZW50ICovCgoKCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpc2luZyAxMkM1MDggUElDIGNoaXAgLi4uXG4iKTsKCgkvKiBGaXJzdCBvZiBhbGwsIGVuYWJsZSB0aGUgY2xvY2sgbGluZS4gVGhpcyBpcyB1c2VkIGluIHRoZSBQWEMyMDAtRiAqLwoJdmFsID0gYnRyZWFkKEJUODQ4X0dQSU9fRE1BX0NUTCk7Cgl2YWwgfD0gQlQ4NDhfR1BJT19ETUFfQ1RMX0dQQ0xLTU9ERTsKCWJ0d3JpdGUodmFsLCBCVDg0OF9HUElPX0RNQV9DVEwpOwoKCS8qIFRoZW4sIHB1c2ggdG8gMCB0aGUgcmVzZXQgcGluIGxvbmcgZW5vdWdoIHRvIHJlc2V0IHRoZSAqCgkgKiBkZXZpY2Ugc2FtZSBhcyBhYm92ZSBmb3IgdGhlIHJlc2V0IGxpbmUsIGJ1dCBub3QgdGhlIHNhbWUKCSAqIHZhbHVlIHNlbnQgdG8gdGhlIEdQSU8tY29ubmVjdGVkIHN0dWZmCgkgKiB3aGljaCBvbmUgaXMgdGhlIGdvb2Qgb25lPyAqLwoJZ3Bpb19pbm91dCgweGZmZmZmZiwoMTw8MikpOwoJZ3Bpb193cml0ZSgwKTsKCXVkZWxheSgxMCk7CglncGlvX3dyaXRlKDE8PDIpOwoKCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhbHMpOyBpKyspIHsKCQl0bXA9YnR0dl9JMkNXcml0ZShidHYsMHgxRSwwLHZhbHNbaV0sMSk7CgkJaWYgKHRtcCAhPSAtMSkgewoJCQlwcmludGsoS0VSTl9JTkZPCgkJCSAgICAgICAiSTJDIFdyaXRlKCUyLjJ4KSA9ICVpXG5JMkMgUmVhZCAoKSA9ICUyLjJ4XG5cbiIsCgkJCSAgICAgICB2YWxzW2ldLHRtcCxidHR2X0kyQ1JlYWQoYnR2LDB4MUYsTlVMTCkpOwoJCX0KCX0KCglwcmludGsoS0VSTl9JTkZPICJQWEMyMDAgSW5pdGlhbGlzZWQuXG4iKTsKfQoKCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKgogKiAgVGhlIEFkbGluayBSVFYtMjQgKGFrYSBBbmdlbG8pIGhhcyBzb21lIHNwZWNpYWwgaW5pdGlhbGlzYXRpb24gdG8gdW5sb2NrCiAqICBpdC4gVGhpcyBhcHBhcmVudGx5IGludm9sdmVzIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIGZvciBlYWNoIDg3OCBjaGlwOgogKgogKiAgMSkgd3JpdGUgMHgwMEMzRkVGRiB0byB0aGUgR1BJT19PVVRfRU4gcmVnaXN0ZXIKICoKICogIDIpICB3cml0ZSB0byBHUElPX0RBVEEKICogICAgICAtIDB4MEUKICogICAgICAtIHNsZWVwIDFtcwogKiAgICAgIC0gMHgxMCArIDB4MEUKICogICAgICAtIHNsZWVwIDEwbXMKICogICAgICAtIDB4MEUKICogICAgIHJlYWQgZnJvbSBHUElPX0RBVEEgaW50byBidWYgKHVpbnRfMzIpCiAqICAgICAgLSBpZiAoIGRhdGE+PjE4ICYgMHgwMSAhPSAwKSB8fCAoIGJ1Zj4+MTkgJiAweDAxICE9IDEgKQogKiAgICAgICAgICAgICAgICAgZXJyb3IuIEVSUk9SX0NQTERfQ2hlY2tfRmFpbGVkIHN0b3AuCiAqCiAqICAzKSB3cml0ZSB0byBHUElPX0RBVEEKICogICAgICAtIHdyaXRlIDB4NDQwMCArIDB4MEUKICogICAgICAtIHNsZWVwIDEwbXMKICogICAgICAtIHdyaXRlIDB4NDQxMCArIDB4MEUKICogICAgICAtIHNsZWVwIDFtcwogKiAgICAgIC0gd3JpdGUgMHgwRQogKiAgICAgcmVhZCBmcm9tIEdQSU9fREFUQSBpbnRvIGJ1ZiAodWludF8zMikKICogICAgICAtIGlmICggYnVmPj4xOCAmIDB4MDEgKSB8fCAoIGJ1Zj4+MTkgJiAweDAxICE9IDAgKQogKiAgICAgICAgICAgICAgICBlcnJvci4gRVJST1JfQ1BMRF9DaGVja19GYWlsZWQuCiAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpzdGF0aWMgdm9pZAppbml0X1JUVjI0IChzdHJ1Y3QgYnR0diAqYnR2KQp7Cgl1aW50MzJfdCBkYXRhUmVhZCA9IDA7Cglsb25nIHdhdGNoZG9nX3ZhbHVlID0gMHgwRTsKCglwcmludGsgKEtFUk5fSU5GTwoJCSJidHR2JWQ6IEFkbGluayBSVFYtMjQgaW5pdGlhbGlzYXRpb24gaW4gcHJvZ3Jlc3MgLi4uXG4iLAoJCWJ0di0+Yy5ucik7CgoJYnR3cml0ZSAoMHgwMGMzZmVmZiwgQlQ4NDhfR1BJT19PVVRfRU4pOwoKCWJ0d3JpdGUgKDAgKyB3YXRjaGRvZ192YWx1ZSwgQlQ4NDhfR1BJT19EQVRBKTsKCW1zbGVlcCAoMSk7CglidHdyaXRlICgweDEwICsgd2F0Y2hkb2dfdmFsdWUsIEJUODQ4X0dQSU9fREFUQSk7Cgltc2xlZXAgKDEwKTsKCWJ0d3JpdGUgKDAgKyB3YXRjaGRvZ192YWx1ZSwgQlQ4NDhfR1BJT19EQVRBKTsKCglkYXRhUmVhZCA9IGJ0cmVhZCAoQlQ4NDhfR1BJT19EQVRBKTsKCglpZiAoKCgoZGF0YVJlYWQgPj4gMTgpICYgMHgwMSkgIT0gMCkgfHwgKCgoZGF0YVJlYWQgPj4gMTkpICYgMHgwMSkgIT0gMSkpIHsKCQlwcmludGsgKEtFUk5fSU5GTwoJCQkiYnR0diVkOiBBZGxpbmsgUlRWLTI0IGluaXRpYWxpc2F0aW9uKDEpIEVSUk9SX0NQTERfQ2hlY2tfRmFpbGVkIChyZWFkICVkKVxuIiwKCQkJYnR2LT5jLm5yLCBkYXRhUmVhZCk7Cgl9CgoJYnR3cml0ZSAoMHg0NDAwICsgd2F0Y2hkb2dfdmFsdWUsIEJUODQ4X0dQSU9fREFUQSk7Cgltc2xlZXAgKDEwKTsKCWJ0d3JpdGUgKDB4NDQxMCArIHdhdGNoZG9nX3ZhbHVlLCBCVDg0OF9HUElPX0RBVEEpOwoJbXNsZWVwICgxKTsKCWJ0d3JpdGUgKHdhdGNoZG9nX3ZhbHVlLCBCVDg0OF9HUElPX0RBVEEpOwoJbXNsZWVwICgxKTsKCWRhdGFSZWFkID0gYnRyZWFkIChCVDg0OF9HUElPX0RBVEEpOwoKCWlmICgoKChkYXRhUmVhZCA+PiAxOCkgJiAweDAxKSAhPSAwKSB8fCAoKChkYXRhUmVhZCA+PiAxOSkgJiAweDAxKSAhPSAwKSkgewoJCXByaW50ayAoS0VSTl9JTkZPCgkJCSJidHR2JWQ6IEFkbGluayBSVFYtMjQgaW5pdGlhbGlzYXRpb24oMikgRVJST1JfQ1BMRF9DaGVja19GYWlsZWQgKHJlYWQgJWQpXG4iLAoJCQlidHYtPmMubnIsIGRhdGFSZWFkKTsKCgkJcmV0dXJuOwoJfQoKCXByaW50ayAoS0VSTl9JTkZPCgkJImJ0dHYlZDogQWRsaW5rIFJUVi0yNCBpbml0aWFsaXNhdGlvbiBjb21wbGV0ZS5cbiIsIGJ0di0+Yy5ucik7Cn0KCgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogTWlybyBQcm8gcmFkaW8gc3R1ZmYgLS0gdGhlIHRlYTU3NTcgaXMgY29ubmVjdGVkIHRvIHNvbWUgR1BJTyBwb3J0cyAgICAgKi8KLyoKICogQ29weXJpZ2h0IChjKSAxOTk5IENzYWJhIEhhbGFzeiA8cWdlaGFsaUB1bmktbWlza29sYy5odT4KICogVGhpcyBjb2RlIGlzIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqCiAqIEJydXRhbGx5IGhhY2tlZCBieSBEYW4gU2hlcmlkYW4gPGRhbi5zaGVyaWRhbkBjb250YWN0Lm9yZy51az4gZGpzNTIgOC8zLzAwCiAqLwoKc3RhdGljIHZvaWQgYnVzX2xvdyhzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgYml0KQp7CglpZiAoYnR2LT5tYm94X2lvcikgewoJCWdwaW9fYml0cyhidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLAoJCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOwoJCXVkZWxheSg1KTsKCX0KCglncGlvX2JpdHMoYml0LDApOwoJdWRlbGF5KDUpOwoKCWlmIChidHYtPm1ib3hfaW9yKSB7CgkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwgMCk7CgkJdWRlbGF5KDUpOwoJfQp9CgpzdGF0aWMgdm9pZCBidXNfaGlnaChzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgYml0KQp7CglpZiAoYnR2LT5tYm94X2lvcikgewoJCWdwaW9fYml0cyhidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLAoJCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOwoJCXVkZWxheSg1KTsKCX0KCglncGlvX2JpdHMoYml0LGJpdCk7Cgl1ZGVsYXkoNSk7CgoJaWYgKGJ0di0+bWJveF9pb3IpIHsKCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLCAwKTsKCQl1ZGVsYXkoNSk7Cgl9Cn0KCnN0YXRpYyBpbnQgYnVzX2luKHN0cnVjdCBidHR2ICpidHYsIGludCBiaXQpCnsKCWlmIChidHYtPm1ib3hfaW9yKSB7CgkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwsCgkJCSAgYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCk7CgkJdWRlbGF5KDUpOwoKCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLCAwKTsKCQl1ZGVsYXkoNSk7Cgl9CglyZXR1cm4gZ3Bpb19yZWFkKCkgJiAoYml0KTsKfQoKLyogVEVBNTc1NyByZWdpc3RlciBiaXRzICovCiNkZWZpbmUgVEVBX0ZSRVEJCTA6MTQKI2RlZmluZSBURUFfQlVGRkVSCQkxNToxNQoKI2RlZmluZSBURUFfU0lHTkFMX1NUUkVOR1RICTE2OjE3CgojZGVmaW5lIFRFQV9QT1JUMQkJMTg6MTgKI2RlZmluZSBURUFfUE9SVDAJCTE5OjE5CgojZGVmaW5lIFRFQV9CQU5ECQkyMDoyMQojZGVmaW5lIFRFQV9CQU5EX0ZNCQkwCiNkZWZpbmUgVEVBX0JBTkRfTVcJCTEKI2RlZmluZSBURUFfQkFORF9MVwkJMgojZGVmaW5lIFRFQV9CQU5EX1NXCQkzCgojZGVmaW5lIFRFQV9NT05PCQkyMjoyMgojZGVmaW5lIFRFQV9BTExPV19TVEVSRU8JMAojZGVmaW5lIFRFQV9GT1JDRV9NT05PCQkxCgojZGVmaW5lIFRFQV9TRUFSQ0hfRElSRUNUSU9OCTIzOjIzCiNkZWZpbmUgVEVBX1NFQVJDSF9ET1dOCQkwCiNkZWZpbmUgVEVBX1NFQVJDSF9VUAkJMQoKI2RlZmluZSBURUFfU1RBVFVTCQkyNDoyNAojZGVmaW5lIFRFQV9TVEFUVVNfVFVORUQJMAojZGVmaW5lIFRFQV9TVEFUVVNfU0VBUkNISU5HCTEKCi8qIExvdy1sZXZlbCBzdHVmZiAqLwpzdGF0aWMgaW50IHRlYTU3NTdfcmVhZChzdHJ1Y3QgYnR0diAqYnR2KQp7Cgl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CglpbnQgdmFsdWUgPSAwOwoJaW50IGk7CgoJLyogYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSAqLwoJZ3Bpb19pbm91dChidHYtPm1ib3hfbWFzaywgYnR2LT5tYm94X2NsayB8IGJ0di0+bWJveF93ZSk7CgoJaWYgKGJ0di0+bWJveF9pb3IpIHsKCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwKCQkJICBidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsKTsKCQl1ZGVsYXkoNSk7Cgl9CgoJaWYgKGJ0dHZfZ3BpbykKCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJ0ZWE1NzU3IHJlYWQiKTsKCglidXNfbG93KGJ0dixidHYtPm1ib3hfd2UpOwoJYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7CgoJdWRlbGF5KDEwKTsKCXRpbWVvdXQ9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOwoKCS8qIHdhaXQgZm9yIERBVEEgbGluZSB0byBnbyBsb3c7IGVycm9yIGlmIGl0IGRvZXNuJ3QgKi8KCXdoaWxlIChidXNfaW4oYnR2LGJ0di0+bWJveF9kYXRhKSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKCQlzY2hlZHVsZSgpOwoJaWYgKGJ1c19pbihidHYsYnR2LT5tYm94X2RhdGEpKSB7CgkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB0ZWE1NzU3OiByZWFkIHRpbWVvdXRcbiIsYnR2LT5jLm5yKTsKCQlyZXR1cm4gLTE7Cgl9CgoJZHByaW50aygiYnR0diVkOiB0ZWE1NzU3OiIsYnR2LT5jLm5yKTsKCWZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7CgkJdWRlbGF5KDUpOwoJCWJ1c19oaWdoKGJ0dixidHYtPm1ib3hfY2xrKTsKCQl1ZGVsYXkoNSk7CgkJZHByaW50aygiJWMiLChidXNfaW4oYnR2LGJ0di0+bWJveF9tb3N0KSA9PSAwKT8nVCc6Jy0nKTsKCQlidXNfbG93KGJ0dixidHYtPm1ib3hfY2xrKTsKCQl2YWx1ZSA8PD0gMTsKCQl2YWx1ZSB8PSAoYnVzX2luKGJ0dixidHYtPm1ib3hfZGF0YSkgPT0gMCk/MDoxOyAgLyogTVNCIGZpcnN0ICovCgkJZHByaW50aygiJWMiLCAoYnVzX2luKGJ0dixidHYtPm1ib3hfbW9zdCkgPT0gMCk/J1MnOidNJyk7Cgl9CglkcHJpbnRrKCJcbmJ0dHYlZDogdGVhNTc1NzogcmVhZCAweCVYXG4iLCBidHYtPmMubnIsIHZhbHVlKTsKCXJldHVybiB2YWx1ZTsKfQoKc3RhdGljIGludCB0ZWE1NzU3X3dyaXRlKHN0cnVjdCBidHR2ICpidHYsIGludCB2YWx1ZSkKewoJaW50IGk7CglpbnQgcmVnID0gdmFsdWU7CgoJZ3Bpb19pbm91dChidHYtPm1ib3hfbWFzaywgYnR2LT5tYm94X2NsayB8IGJ0di0+bWJveF93ZSB8IGJ0di0+bWJveF9kYXRhKTsKCglpZiAoYnR2LT5tYm94X2lvcikgewoJCWdwaW9fYml0cyhidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLAoJCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOwoJCXVkZWxheSg1KTsKCX0KCWlmIChidHR2X2dwaW8pCgkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwidGVhNTc1NyB3cml0ZSIpOwoKCWRwcmludGsoImJ0dHYlZDogdGVhNTc1Nzogd3JpdGUgMHglWFxuIiwgYnR2LT5jLm5yLCB2YWx1ZSk7CglidXNfbG93KGJ0dixidHYtPm1ib3hfY2xrKTsKCWJ1c19oaWdoKGJ0dixidHYtPm1ib3hfd2UpOwoJZm9yIChpID0gMDsgaSA8IDI1OyBpKyspIHsKCQlpZiAocmVnICYgMHgxMDAwMDAwKQoJCQlidXNfaGlnaChidHYsYnR2LT5tYm94X2RhdGEpOwoJCWVsc2UKCQkJYnVzX2xvdyhidHYsYnR2LT5tYm94X2RhdGEpOwoJCXJlZyA8PD0gMTsKCQlidXNfaGlnaChidHYsYnR2LT5tYm94X2Nsayk7CgkJdWRlbGF5KDEwKTsKCQlidXNfbG93KGJ0dixidHYtPm1ib3hfY2xrKTsKCQl1ZGVsYXkoMTApOwoJfQoJYnVzX2xvdyhidHYsYnR2LT5tYm94X3dlKTsgIC8qIHVubXV0ZSAhISEgKi8KCXJldHVybiAwOwp9Cgp2b2lkIHRlYTU3NTdfc2V0X2ZyZXEoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgc2hvcnQgZnJlcSkKewoJZHByaW50aygidGVhNTc1N19zZXRfZnJlcSAlZFxuIixmcmVxKTsKCXRlYTU3NTdfd3JpdGUoYnR2LCA1ICogZnJlcSArIDB4MzU4KTsgLyogYWRkIDEwLjdNSHogKHNlZSBkb2NzKSAqLwp9CgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogd2ludmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCnN0YXRpYyB2b2lkIHdpbnZpZXdfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7CgkvKiBQVDIyNTRBIHByb2dyYW1taW5nIEpvbiBUb21icywgam9uQGd0ZS5lc2kudXMuZXMgKi8KCWludCBiaXRzX291dCwgbG9vcHMsIHZvbCwgZGF0YTsKCglpZiAoIXNldCkgewoJCS8qIEZpeGVkIGJ5IExlYW5kcm8gTHVjYXJlbGxhIDxsdWNhQGxpbnV4bWVuZG96YS5vcmcuYXIgKDA3LzMxLzAxKSAqLwoJCXYtPmZsYWdzIHw9IFZJREVPX0FVRElPX1ZPTFVNRTsKCQlyZXR1cm47Cgl9CgoJLyogMzIgbGV2ZWxzIGxvZ2FyaXRobWljICovCgl2b2wgPSAzMiAtICgodi0+dm9sdW1lPj4xMSkpOwoJLyogdW5pdHMgKi8KCWJpdHNfb3V0ID0gKFBUMjI1NF9EQlNfSU5fMj4+KHZvbCU1KSk7CgkvKiB0ZW5zICovCgliaXRzX291dCB8PSAoUFQyMjU0X0RCU19JTl8xMD4+KHZvbC81KSk7CgliaXRzX291dCB8PSBQVDIyNTRfTF9DSEFOTkVMIHwgUFQyMjU0X1JfQ0hBTk5FTDsKCWRhdGEgPSBncGlvX3JlYWQoKTsKCWRhdGEgJj0gfihXSU5WSUVXX1BUMjI1NF9DTEt8IFdJTlZJRVdfUFQyMjU0X0RBVEF8CgkJICBXSU5WSUVXX1BUMjI1NF9TVFJPQkUpOwoJZm9yIChsb29wcyA9IDE3OyBsb29wcyA+PSAwIDsgbG9vcHMtLSkgewoJCWlmIChiaXRzX291dCAmICgxPDxsb29wcykpCgkJCWRhdGEgfD0gIFdJTlZJRVdfUFQyMjU0X0RBVEE7CgkJZWxzZQoJCQlkYXRhICY9IH5XSU5WSUVXX1BUMjI1NF9EQVRBOwoJCWdwaW9fd3JpdGUoZGF0YSk7CgkJdWRlbGF5KDUpOwoJCWRhdGEgfD0gV0lOVklFV19QVDIyNTRfQ0xLOwoJCWdwaW9fd3JpdGUoZGF0YSk7CgkJdWRlbGF5KDUpOwoJCWRhdGEgJj0gfldJTlZJRVdfUFQyMjU0X0NMSzsKCQlncGlvX3dyaXRlKGRhdGEpOwoJfQoJZGF0YSB8PSAgV0lOVklFV19QVDIyNTRfU1RST0JFOwoJZGF0YSAmPSB+V0lOVklFV19QVDIyNTRfREFUQTsKCWdwaW9fd3JpdGUoZGF0YSk7Cgl1ZGVsYXkoMTApOwoJZGF0YSAmPSB+V0lOVklFV19QVDIyNTRfU1RST0JFOwoJZ3Bpb193cml0ZShkYXRhKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogbW9uby9zdGVyZW8gY29udHJvbCBmb3IgdmFyaW91cyBjYXJkcyAod2hpY2ggZG9uJ3QgdXNlIGkyYyBjaGlwcyBidXQgICAgKi8KLyogY29ubmVjdCBzb21ldGhpbmcgdG8gdGhlIEdQSU8gcGlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCnN0YXRpYyB2b2lkCmd2YmN0djNwY2lfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBpbnQgY29uID0gMDsKCglpZiAoc2V0KSB7CgkJZ3Bpb19pbm91dCgweDMwMCwgMHgzMDApOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzEpCgkJCWNvbiA9IDB4MDAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpCgkJCWNvbiA9IDB4MzAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQoJCQljb24gPSAweDIwMDsKLyoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykKICoJCQljb24gPSAweDEwMDsgKi8KCQlncGlvX2JpdHMoMHgzMDAsIGNvbik7Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU8gfAoJCQkgIFZJREVPX1NPVU5EX0xBTkcxICB8IFZJREVPX1NPVU5EX0xBTkcyOwoJfQp9CgpzdGF0aWMgdm9pZApndmJjdHY1cGNpX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IHZhbCwgY29uOwoKCWlmIChidHYtPnJhZGlvX3VzZXIpCgkJcmV0dXJuOwoKCXZhbCA9IGdwaW9fcmVhZCgpOwoJaWYgKHNldCkgewoJCWNvbiA9IDB4MDAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpIHsKCQkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkgewoJCQkJLyogTEFORzEgKyBMQU5HMiAqLwoJCQkJY29uID0gMHgxMDA7CgkJCX0KCQkJZWxzZSB7CgkJCQkvKiBMQU5HMiAqLwoJCQkJY29uID0gMHgzMDA7CgkJCX0KCQl9CgkJaWYgKGNvbiAhPSAodmFsICYgMHgzMDApKSB7CgkJCWdwaW9fYml0cygweDMwMCwgY29uKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImd2YmN0djVwY2kiKTsKCQl9Cgl9IGVsc2UgewoJCXN3aXRjaCAodmFsICYgMHg3MCkgewoJCSAgY2FzZSAweDEwOgoJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCQkJYnJlYWs7CgkJICBjYXNlIDB4MzA6CgkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9MQU5HMjsKCQkJYnJlYWs7CgkJICBjYXNlIDB4NTA6CgkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9MQU5HMTsKCQkJYnJlYWs7CgkJICBjYXNlIDB4NjA6CgkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU87CgkJCWJyZWFrOwoJCSAgY2FzZSAweDcwOgoJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKCQkJYnJlYWs7CgkJICBkZWZhdWx0OgoJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CgkJCQkgIFZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7CgkJfQoJfQp9CgovKgogKiBNYXJpbyBNZWRpbmEgTnVzc2JhdW0gPG1lZGlzb2Z0QGFsb2hhYmJzLm9yZy5teD4KICogIEkgZGlzY292ZXIgdGhhdCBvbiBCVDg0OF9HUElPX0RBVEEgYWRkcmVzcyBhIGJ5dGUgMHhjY2UgZW5hYmxlIHN0ZXJlbywKICogIDB4ZGRlIGVuYWJsZXMgbW9ubyBhbmQgMHhjY2QgZW5hYmxlcyBzYXAKICoKICogUGV0ciBWYW5kcm92ZWMgPFZBTkRST1ZFQHZjLmN2dXQuY3o+CiAqICBQLlMuOiBBdCBsZWFzdCBtYXNrIGluIGxpbmUgYWJvdmUgaXMgd3JvbmcgLSBHUElPIHBpbnMgMywyIHNlbGVjdAogKiAgaW5wdXQvb3V0cHV0IHNvdW5kIGNvbm5lY3Rpb24sIHNvIGJvdGggbXVzdCBiZSBzZXQgZm9yIG91dHB1dCBtb2RlLgogKgogKiBMb29rcyBsaWtlIGl0J3MgbmVlZGVkIG9ubHkgZm9yIHRoZSAidHZwaG9uZSIsIHRoZSAidHZwaG9uZSA5OCIKICogaGFuZGxlcyB0aGlzIHdpdGggYSB0ZGE5ODQwCiAqCiAqLwpzdGF0aWMgdm9pZAphdmVybWVkaWFfdHZwaG9uZV9hdWRpbyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYsIGludCBzZXQpCnsKCWludCB2YWwgPSAwOwoKCWlmIChzZXQpIHsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKSAgIC8qIFNBUCAqLwoJCQl2YWwgPSAweDAyOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQoJCQl2YWwgPSAweDAxOwoJCWlmICh2YWwpIHsKCQkJZ3Bpb19iaXRzKDB4MDMsdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImF2ZXJtZWRpYSIpOwoJCX0KCX0gZWxzZSB7CgkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk8gfCBWSURFT19TT1VORF9TVEVSRU8gfAoJCQlWSURFT19TT1VORF9MQU5HMTsKCQlyZXR1cm47Cgl9Cn0KCnN0YXRpYyB2b2lkCmF2ZXJtZWRpYV90dl9zdGVyZW9fYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7CglpbnQgdmFsID0gMDsKCglpZiAoc2V0KSB7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMikgICAvKiBTQVAgKi8KCQkJdmFsID0gMHgwMTsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykgIC8qIFNURVJFTyAqLwoJCQl2YWwgPSAweDAyOwoJCWJ0YW9yKHZhbCwgfjB4MDMsIEJUODQ4X0dQSU9fREFUQSk7CgkJaWYgKGJ0dHZfZ3BpbykKCQkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwiYXZlcm1lZGlhIik7Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCQlyZXR1cm47Cgl9Cn0KCi8qIExpZmV0ZWMgOTQxNSBoYW5kbGluZyAqLwpzdGF0aWMgdm9pZApsdDk0MTVfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7CglpbnQgdmFsID0gMDsKCglpZiAoZ3Bpb19yZWFkKCkgJiAweDQwMDApIHsKCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKCQlyZXR1cm47Cgl9CgoJaWYgKHNldCkgewoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpICAvKiBBMiBTQVAgKi8KCQkJdmFsID0gMHgwMDgwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSAvKiBBMiBzdGVyZW8gKi8KCQkJdmFsID0gMHgwODgwOwoJCWlmICgodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKSB8fAoJCSAgICAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pKQoJCQl2YWwgPSAwOwoJCWdwaW9fYml0cygweDA4ODAsIHZhbCk7CgkJaWYgKGJ0dHZfZ3BpbykKCQkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwibHQ5NDE1Iik7Cgl9IGVsc2UgewoJCS8qIGF1dG9kZXRlY3QgZG9lc24ndCB3b3JrIHdpdGggdGhpcyBjYXJkIDotKCAqLwoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCQlyZXR1cm47Cgl9Cn0KCi8qIFREQTk4MjEgb24gVGVycmFUVisgQnQ4NDgsIEJ0ODc4ICovCnN0YXRpYyB2b2lkCnRlcnJhdHZfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBpbnQgY29uID0gMDsKCglpZiAoc2V0KSB7CgkJZ3Bpb19pbm91dCgweDE4MDAwMCwweDE4MDAwMCk7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMikKCQkJY29uID0gMHgwODAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCgkJCWNvbiA9IDB4MTgwMDAwOwoJCWdwaW9fYml0cygweDE4MDAwMCwgY29uKTsKCQlpZiAoYnR0dl9ncGlvKQoJCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJ0ZXJyYXR2Iik7Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKc3RhdGljIHZvaWQKd2luZmFzdDIwMDBfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CgoJaWYgKHNldCkgewoJCS8qYnRvciAoMHhjMzIwMDAsIEJUODQ4X0dQSU9fT1VUX0VOKTsqLwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykJCS8qIE1vbm8gKi8KCQkJdmFsID0gMHg0MjAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkJLyogTW9ubyAqLwoJCQl2YWwgPSAweDQyMDAwMDsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQkvKiBTQVAgKi8KCQkJdmFsID0gMHg0MTAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCS8qIFN0ZXJlbyAqLwoJCQl2YWwgPSAweDAyMDAwMDsKCQlpZiAodmFsKSB7CgkJCWdwaW9fYml0cygweDQzMDAwMCwgdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsIndpbmZhc3QyMDAwIik7CgkJfQoJfSBlbHNlIHsKCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CgkJCSAgVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKLyoKICogRGFyaXVzeiBLb3dhbGV3c2tpIDxkYXJla2tAYXV0b21leC5wbD4KICogc291bmQgY29udHJvbCBmb3IgUHJvbGluayBQVi1CVDg3OFArOUIgKFBpeGVsVmlldyBQbGF5VFYgUHJvIEZNK05JQ0FNCiAqIHJldmlzaW9uIDlCIGhhcyBvbi1ib2FyZCBUREE5ODc0QSBzb3VuZCBkZWNvZGVyKS4KICoKICogTm90ZTogVGhlcmUgYXJlIGNhcmQgdmFyaWFudHMgd2l0aG91dCB0ZGE5ODc0YS4gRm9yY2luZyB0aGUgInN0ZXJlbyBzb3VuZCByb3V0ZSIKICogICAgICAgd2lsbCBtdXRlIHRoaXMgY2FyZHMuCiAqLwpzdGF0aWMgdm9pZApwdmJ0ODc4cDliX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IHZhbCA9IDA7CgoJaWYgKGJ0di0+cmFkaW9fdXNlcikKCQlyZXR1cm47CgoJaWYgKHNldCkgewoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykJewoJCQl2YWwgPSAweDAxOwoJCX0KCQlpZiAoKHYtPm1vZGUgJiAoVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMikpCgkJICAgIHx8ICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSkgewoJCQl2YWwgPSAweDAyOwoJCX0KCQlpZiAodmFsKSB7CgkJCWdwaW9fYml0cygweDAzLHZhbCk7CgkJCWlmIChidHR2X2dwaW8pCgkJCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJwdmJ0ODc4cDliIik7CgkJfQoJfSBlbHNlIHsKCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CgkJCVZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7Cgl9Cn0KCi8qCiAqIERhcml1c3ogS293YWxld3NraSA8ZGFyZWtrQGF1dG9tZXgucGw+CiAqIHNvdW5kIGNvbnRyb2wgZm9yIEZseVZpZGVvIDIwMDBTICh3aXRoIHRkYTk4NzQgZGVjb2RlcikKICogYmFzZWQgb24gcHZidDg3OHA5Yl9hdWRpbygpIC0gdGhpcyBpcyBub3QgdGVzdGVkLCBwbGVhc2UgZml4ISEhCiAqLwpzdGF0aWMgdm9pZApmdjIwMDBzX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IHZhbCA9IDB4ZmZmZjsKCglpZiAoYnR2LT5yYWRpb191c2VyKQoJCXJldHVybjsKCWlmIChzZXQpIHsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pCXsKCQkJdmFsID0gMHgwMDAwOwoJCX0KCQlpZiAoKHYtPm1vZGUgJiAoVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMikpCgkJICAgIHx8ICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSkgewoJCQl2YWwgPSAweDEwODA7IC8qLWRrLT8/PzogMHgwODgwLCAweDAwODAsIDB4MTgwMCAuLi4gKi8KCQl9CgkJaWYgKHZhbCAhPSAweGZmZmYpIHsKCQkJZ3Bpb19iaXRzKDB4MTgwMCwgdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImZ2MjAwMHMiKTsKCQl9Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJVklERU9fU09VTkRfTEFORzEgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKLyoKICogc291bmQgY29udHJvbCBmb3IgQ2Fub3B1cyBXaW5EVlIgUENJCiAqIE1hc2FraSBTdXp1a2kgPG1hc2FraUBidHJlZS5vcmc+CiAqLwpzdGF0aWMgdm9pZAp3aW5kdnJfYXVkaW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KQp7Cgl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CgoJaWYgKHNldCkgewoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykKCQkJdmFsID0gMHgwNDAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKCQkJdmFsID0gMDsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQoJCQl2YWwgPSAweDEwMDAwMDsKCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykKCQkJdmFsID0gMDsKCQlpZiAodmFsKSB7CgkJCWdwaW9fYml0cygweDE0MDAwMCwgdmFsKTsKCQkJaWYgKGJ0dHZfZ3BpbykKCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsIndpbmR2ciIpOwoJCX0KCX0gZWxzZSB7CgkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk8gfCBWSURFT19TT1VORF9TVEVSRU8gfAoJCQkgIFZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7Cgl9Cn0KCi8qCiAqIHNvdW5kIGNvbnRyb2wgZm9yIEFELVRWSzUwMwogKiBIaXJvc2hpIFRha2VrYXdhIDxzaWFuQGJpZy5vci5qcD4KICovCnN0YXRpYyB2b2lkCmFkdHZrNTAzX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKewoJdW5zaWduZWQgaW50IGNvbiA9IDB4ZmZmZmZmOwoKCS8qIGJ0YW9yKDB4MWUwMDAwLCB+MHgxZTAwMDAsIEJUODQ4X0dQSU9fT1VUX0VOKTsgKi8KCglpZiAoc2V0KSB7CgkJLyogYnRvcigqKiosIEJUODQ4X0dQSU9fT1VUX0VOKTsgKi8KCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKQoJCQljb24gPSAweDAwMDAwMDAwOwoJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpCgkJCWNvbiA9IDB4MDAxODAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCgkJCWNvbiA9IDB4MDAwMDAwMDA7CgkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9NT05PKQoJCQljb24gPSAweDAwMDYwMDAwOwoJCWlmIChjb24gIT0gMHhmZmZmZmYpIHsKCQkJZ3Bpb19iaXRzKDB4MWUwMDAwLGNvbik7CgkJCWlmIChidHR2X2dwaW8pCgkJCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCAiYWR0dms1MDMiKTsKCQl9Cgl9IGVsc2UgewoJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKCQkJICBWSURFT19TT1VORF9MQU5HMSAgfCBWSURFT19TT1VORF9MQU5HMjsKCX0KfQoKLyogUmVtb3RlVmlzaW9uIE1YIChydjYwNSkgbXV4c2VsIGhlbHBlciBbTWlndWVsIEZyZWl0YXNdCiAqCiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcnY2MDUgZG9uJ3QgdXNlIGEgbm9ybWFsIG11bHRpcGxleCwgYnV0IGEgY3Jvc3Nwb2ludAogKiBzd2l0Y2ggaW5zdGVhZCAoQ0QyMk0zNDk0RSkuIFRoaXMgSUMgY2FuIGhhdmUgbXVsdGlwbGUgYWN0aXZlIGNvbm5lY3Rpb25zCiAqIGJldHdlZW4gWG4gKGlucHV0KSBhbmQgWW4gKG91dHB1dCkgcGlucy4gV2UgbmVlZCB0byBjbGVhciBhbnkgZXhpc3RpbmcKICogY29ubmVjdGlvbiBwcmlvciB0byBlc3RhYmxpc2ggYSBuZXcgb25lLCBwdWxzaW5nIHRoZSBTVFJPQkUgcGluLgogKgogKiBUaGUgYm9hcmQgaGFyZHdpcmUgWTAgKHhwb2ludCkgdG8gTVVYMSBhbmQgTVVYT1VUIHRvIFlpbi4KICogR1BJTyBwaW5zIGFyZSB3aXJlZCBhczoKICogIEdQSU9bMDozXSAtIEFYWzA6M10gKHhwb2ludCkgLSBQMVswOjNdIChtaWNyb2NvbnRyb2xlcikKICogIEdQSU9bNDo2XSAtIEFZWzA6Ml0gKHhwb2ludCkgLSBQMVs0OjZdIChtaWNyb2NvbnRyb2xlcikKICogIEdQSU9bN10gICAtIERBVEEgKHhwb2ludCkgICAgLSBQMVs3XSAobWljcm9jb250cm9sZXIpCiAqICBHUElPWzhdICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNV0gKG1pY3JvY29udHJvbGVyKQogKiAgR1BJT1s5XSAgIC0gUkVTRVQgKHhwb2ludCkgICAtIFAzWzZdIChtaWNyb2NvbnRyb2xlcikKICogIEdQSU9bMTBdICAtIFNUUk9CRSAoeHBvaW50KSAgLSBQM1s3XSAobWljcm9jb250cm9sZXIpCiAqICBHUElOVFIgICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNF0gKG1pY3JvY29udHJvbGVyKQogKgogKiBUaGUgbWljcm9jb250cm9sZXIgaXMgYSA4MEMzMiBsaWtlLiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY2hhbmdlIHhwb2ludAogKiBjb25maWd1cmF0aW9uIGVpdGhlciBkaXJlY3RseSAoYXMgd2UgYXJlIGRvaW5nKSBvciB1c2luZyB0aGUgbWljcm9jb250cm9sZXIKICogd2hpY2ggaXMgYWxzbyB3aXJlZCB0byBJMkMgaW50ZXJmYWNlLiBJIGhhdmUgbm8gZnVydGhlciBpbmZvIG9uIHRoZQogKiBtaWNyb2NvbnRyb2xlciBmZWF0dXJlcywgb25lIHdvdWxkIG5lZWQgdG8gZGlzYXNzZW1ibHkgdGhlIGZpcm13YXJlLgogKiBub3RlOiB0aGUgdmVuZG9yIHJlZnVzZWQgdG8gZ2l2ZSBhbnkgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9kdWN0LCBhbGwKICogICAgICAgdGhhdCBzdHVmZiB3YXMgZm91bmQgdXNpbmcgYSBtdWx0aW1ldGVyISA6KQogKi8Kc3RhdGljIHZvaWQgcnY2MDVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJLyogcmVzZXQgYWxsIGNvbmVjdGlvbnMgKi8KCWdwaW9fYml0cygweDIwMCwweDIwMCk7CgltZGVsYXkoMSk7CglncGlvX2JpdHMoMHgyMDAsMHgwMDApOwoJbWRlbGF5KDEpOwoKCS8qIGNyZWF0ZSBhIG5ldyBjb25lY3Rpb24gKi8KCWdwaW9fYml0cygweDQ4MCwweDA4MCk7CglncGlvX2JpdHMoMHg0ODAsMHg0ODApOwoJbWRlbGF5KDEpOwoJZ3Bpb19iaXRzKDB4NDgwLDB4MDgwKTsKCW1kZWxheSgxKTsKfQoKLyogVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2IG11eHNlbCBoZWxwZXIgW0NocmlzIEZhbm5pbmddCiAqCiAqIFRoZSBDUzE2IChhdmFpbGFibGUgb24gZUJheSBjaGVhcCkgaXMgYSBQQ0kgYm9hcmQgd2l0aCBmb3VyIEZ1c2lvbgogKiA4NzhBIGNoaXBzLCBhIFBDSSBicmlkZ2UsIGFuIEF0bWVsIG1pY3JvY29udHJvbGxlciwgZm91ciBzeW5jIHNlcGVyYXRvcgogKiBjaGlwcywgdGVuIGVpZ2h0IGlucHV0IGFuYWxvZyBtdWx0aXBsZXhvcnMsIGEgbm90IGNoaXAgYW5kIGEgZmV3CiAqIG90aGVyIGNvbXBvbmVudHMuCiAqCiAqIDE2IGlucHV0cyBvbiBhIHNlY29uZGFyeSBicmFja2V0IGFyZSBwcm92aWRlZCBhbmQgY2FuIGJlIHNlbGVjdGVkCiAqIGZyb20gZWFjaCBvZiB0aGUgZm91ciBjYXB0dXJlIGNoaXBzLiAgVHdvIG9mIHRoZSBlaWdodCBpbnB1dAogKiBtdWx0aXBsZXhvcnMgYXJlIHVzZWQgdG8gc2VsZWN0IGZyb20gYW55IG9mIHRoZSAxNiBpbnB1dCBzaWduYWxzLgogKgogKiBVbnN1cHBvcnRlZCBoYXJkd2FyZSBjYXBhYmlsaXRpZXM6CiAqICAuIEEgdmlkZW8gb3V0cHV0IG1vbml0b3Igb24gdGhlIHNlY29uZGFyeSBicmFja2V0IGNhbiBiZSBzZWxlY3RlZCBmcm9tCiAqICAgIG9uZSBvZiB0aGUgODc4QSBjaGlwcy4KICogIC4gQW5vdGhlciBwYXNzdGhyb3VnaCBidXQgSSBoYXZlbid0IHNwZW50IGFueSB0aW1lIGludmVzdGlnYXRpbmcgaXQuCiAqICAuIERpZ2l0YWwgSS9PIChsb2dpYyBsZXZlbCBjb25uZWN0ZWQgdG8gR1BJTykgaXMgYXZhaWxhYmxlIGZyb20gYW4KICogICAgb25ib2FyZCBoZWFkZXIuCiAqCiAqIFRoZSBvbiBjaGlwIGlucHV0IG11eCBzaG91bGQgYWx3YXlzIGJlIHNldCB0byAyLgogKiBHUElPWzE2OjE5XSAtIFZpZGVvIGlucHV0IHNlbGVjdGlvbgogKiBHUElPWzA6M10gICAtIFZpZGVvIG91dHB1dCBtb25pdG9yIHNlbGVjdCAob25seSBhdmFpbGFibGUgZnJvbSBvbmUgODc4QSkKICogR1BJT1s/Oj9dICAgLSBEaWdpdGFsIEkvTy4KICoKICogVGhlcmUgaXMgYW4gQVRNRUwgbWljcm9jb250cm9sbGVyIHdpdGggYW4gODAzMSBjb3JlIG9uIGJvYXJkLiAgSSBoYXZlIG5vdAogKiBkZXRlcm1pbmVkIHdoYXQgZnVuY3Rpb24gKGlmIGFueSkgaXQgcHJvdmlkZXMuICBXaXRoIHRoZSBtaWNyb2NvbnRyb2xsZXIKICogYW5kIHN5bmMgc2VwZXJhdG9yIGNoaXBzIGEgZ3Vlc3MgaXMgdGhhdCBpdCBtaWdodCBoYXZlIHRvIGRvIHdpdGggdmlkZW8KICogc3dpdGNoaW5nIGFuZCBtYXliZSBzb21lIGRpZ2l0YWwgSS9PLgogKi8Kc3RhdGljIHZvaWQgdGliZXRDUzE2X211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCnsKCS8qIHZpZGVvIG11eCAqLwoJZ3Bpb19iaXRzKDB4MGYwMDAwLCBpbnB1dCA8PCAxNik7Cn0KCnN0YXRpYyB2b2lkIHRpYmV0Q1MxNl9pbml0KHN0cnVjdCBidHR2ICpidHYpCnsKCS8qIGVuYWJsZSBncGlvIGJpdHMsIG1hc2sgb2J0YWluZWQgdmlhIGJ0U3B5ICovCglncGlvX2lub3V0KDB4ZmZmZmZmLCAweDBmN2ZmZik7CglncGlvX3dyaXRlKDB4MGY3ZmZmKTsKfQoKLyoKICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBmb3IgdGhlIEtvZGljb20tNDQwMHIgZ2V0IGEgbGl0dGxlIG1pbmQtdHdpc3RpbmcuCiAqIFRoZXJlIGlzIGEgIm1hc3RlciIgY29udHJvbGxlciBhbmQgdGhyZWUgInNsYXZlIiBjb250cm9sbGVycywgdG9nZXRoZXIKICogYW4gYW5hbG9nIHN3aXRjaCB3aGljaCBjb25uZWN0cyBhbnkgb2YgMTYgY2FtZXJhcyB0byBhbnkgb2YgdGhlIEJUODdBJ3MuCiAqIFRoZSBhbmFsb2cgc3dpdGNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlICJtYXN0ZXIiLCBidXQgdGhlIGRldGVjdGlvbiBvcmRlcgogKiBvZiB0aGUgZm91ciBCVDg3OEEgY2hpcHMgaXMgaW4gYW4gb3JkZXIgd2hpY2ggSSBqdXN0IGRvbid0IHVuZGVyc3RhbmQuCiAqIFRoZSAibWFzdGVyIiBpcyBhY3R1YWxseSB0aGUgc2Vjb25kIGNvbnRyb2xsZXIgdG8gYmUgZGV0ZWN0ZWQuICBUaGUKICogbG9naWMgb24gdGhlIGJvYXJkIHVzZXMgbG9naWNhbCBudW1iZXJzIGZvciB0aGUgNCBjb250cm9sZXJzLCBidXQKICogdGhvc2UgbnVtYmVycyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGRldGVjdGlvbiBzZXF1ZW5jZS4gIFdoZW4gd29ya2luZwogKiB3aXRoIHRoZSBhbmFsb2cgc3dpdGNoLCB3ZSBuZWVkIHRvICJtYXAiIGZyb20gdGhlIGRldGVjdGlvbiBzZXF1ZW5jZQogKiBvdmVyIHRvIHRoZSBib2FyZCdzIGxvZ2ljYWwgY29udHJvbGxlciBudW1iZXIuICBUaGlzIG1hcHBpbmcgc2VxdWVuY2UKICogaXMgezMsIDAsIDIsIDF9LCBpLmUuIHRoZSBmaXJzdCBjb250cm9sbGVyIHRvIGJlIGRldGVjdGVkIGlzIGxvZ2ljYWwKICogdW5pdCAzLCB0aGUgc2Vjb25kICh3aGljaCBpcyB0aGUgbWFzdGVyKSBpcyBsb2dpY2FsIHVuaXQgMCwgZXRjLgogKiBXZSBuZWVkIHRvIG1haW50YWluIHRoZSBzdGF0dXMgb2YgdGhlIGFuYWxvZyBzd2l0Y2ggKHdoaWNoIG9mIHRoZSAxNgogKiBjYW1lcmFzIGlzIGNvbm5lY3RlZCB0byB3aGljaCBvZiB0aGUgNCBjb250cm9sbGVycykuICBSYXRoZXIgdGhhbgogKiBhZGQgdG8gdGhlIGJ0dHYgc3RydWN0dXJlIGZvciB0aGlzLCB3ZSB1c2UgdGhlIGRhdGEgcmVzZXJ2ZWQgZm9yCiAqIHRoZSBtYm94ICh1bnVzZWQgZm9yIHRoaXMgY2FyZCB0eXBlKS4KICovCgovKgogKiBGaXJzdCBhIHJvdXRpbmUgdG8gc2V0IHRoZSBhbmFsb2cgc3dpdGNoLCB3aGljaCBjb250cm9scyB3aGljaCBjYW1lcmEKICogaXMgcm91dGVkIHRvIHdoaWNoIGNvbnRyb2xsZXIuICBUaGUgc3dpdGNoIGNvbXByaXNlcyBhbiBYLWFkZHJlc3MKICogKGdwaW8gYml0cyAwLTMsIHJlcHJlc2VudGluZyB0aGUgY2FtZXJhLCByYW5naW5nIGZyb20gMC0xNSksIGFuZCBhCiAqIFktYWRkcmVzcyAoZ3BpbyBiaXRzIDQtNiwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sbGVyLCByYW5naW5nIGZyb20gMC0zKS4KICogQSBkYXRhIHZhbHVlIChncGlvIGJpdCA3KSBvZiAnMScgZW5hYmxlcyB0aGUgc3dpdGNoLCBhbmQgJzAnIGRpc2FibGVzCiAqIHRoZSBzd2l0Y2guICBBIFNUUk9CRSBiaXQgKGdwaW8gYml0IDgpIGxhdGNoZXMgdGhlIGRhdGEgdmFsdWUgaW50byB0aGUKICogc3BlY2lmaWVkIGFkZHJlc3MuICBUaGUgaWRlYSBpcyB0byBzZXQgdGhlIGFkZHJlc3MgYW5kIGRhdGEsIHRoZW4gYnJpbmcKICogU1RST0JFIGhpZ2gsIGFuZCBmaW5hbGx5IGJyaW5nIFNUUk9CRSBiYWNrIHRvIGxvdy4KICovCnN0YXRpYyB2b2lkIGtvZGljb200NDAwcl93cml0ZShzdHJ1Y3QgYnR0diAqYnR2LAoJCQkgICAgICAgdW5zaWduZWQgY2hhciB4YWRkciwKCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgeWFkZHIsCgkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGEpIHsKCXVuc2lnbmVkIGludCB1ZGF0YTsKCgl1ZGF0YSA9IChkYXRhIDw8IDcpIHwgKCh5YWRkciYzKSA8PCA0KSB8ICh4YWRkciYweGYpOwoJZ3Bpb19iaXRzKDB4MWZmLCB1ZGF0YSk7CQkvKiB3cml0ZSBBRERSIGFuZCBEQVQgKi8KCWdwaW9fYml0cygweDFmZiwgdWRhdGEgfCAoMSA8PCA4KSk7CS8qIHN0cm9iZSBoaWdoICovCglncGlvX2JpdHMoMHgxZmYsIHVkYXRhKTsJCS8qIHN0cm9iZSBsb3cgKi8KfQoKLyoKICogTmV4dCB0aGUgbXV4IHNlbGVjdC4gIEJvdGggdGhlICJtYXN0ZXIiIGFuZCAic2xhdmUiICdjYXJkcycgKGNvbnRyb2xsZXJzKQogKiB1c2UgdGhpcyByb3V0aW5lLiAgVGhlIHJvdXRpbmUgZmluZHMgdGhlICJtYXN0ZXIiIGZvciB0aGUgY2FyZCwgbWFwcwogKiB0aGUgY29udHJvbGxlciBudW1iZXIgZnJvbSB0aGUgZGV0ZWN0ZWQgcG9zaXRpb24gb3ZlciB0byB0aGUgbG9naWNhbAogKiBudW1iZXIsIHdyaXRlcyB0aGUgYXBwcm9wcmlhdGUgZGF0YSB0byB0aGUgYW5hbG9nIHN3aXRjaCwgYW5kIGhvdXNla2VlcHMKICogdGhlIGxvY2FsIGNvcHkgb2YgdGhlIHN3aXRjaCBpbmZvcm1hdGlvbi4gIFRoZSBwYXJhbWV0ZXIgJ2lucHV0JyBpcyB0aGUKICogcmVxdWVzdGVkIGNhbWVyYSBudW1iZXIgKDAgLSAxNSkuCiAqLwpzdGF0aWMgdm9pZCBrb2RpY29tNDQwMHJfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJY2hhciAqc3dfc3RhdHVzOwoJaW50IHhhZGRyLCB5YWRkcjsKCXN0cnVjdCBidHR2ICptY3RscjsKCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1hcFs0XSA9IHszLCAwLCAyLCAxfTsKCgltY3RsciA9IG1hc3RlcltidHYtPmMubnJdOwoJaWYgKG1jdGxyID09IE5VTEwpIHsJLyogaWdub3JlIGlmIG1hc3RlciBub3QgeWV0IGRldGVjdGVkICovCgkJcmV0dXJuOwoJfQoJeWFkZHIgPSAoYnR2LT5jLm5yIC0gbWN0bHItPmMubnIgKyAxKSAmIDM7IC8qIHRoZSAnJicgaXMgZm9yIHNhZmV0eSAqLwoJeWFkZHIgPSBtYXBbeWFkZHJdOwoJc3dfc3RhdHVzID0gKGNoYXIgKikoJm1jdGxyLT5tYm94X3dlKTsKCXhhZGRyID0gaW5wdXQgJiAweGY7CgkvKiBDaGVjayBpZiB0aGUgY29udHJvbGxlci9jYW1lcmEgcGFpciBoYXMgY2hhbmdlZCwgZWxzZSBpZ25vcmUgKi8KCWlmIChzd19zdGF0dXNbeWFkZHJdICE9IHhhZGRyKQoJewoJCS8qICJvcGVuIiB0aGUgb2xkIHN3aXRjaCwgImNsb3NlIiB0aGUgbmV3IG9uZSwgc2F2ZSB0aGUgbmV3ICovCgkJa29kaWNvbTQ0MDByX3dyaXRlKG1jdGxyLCBzd19zdGF0dXNbeWFkZHJdLCB5YWRkciwgMCk7CgkJc3dfc3RhdHVzW3lhZGRyXSA9IHhhZGRyOwoJCWtvZGljb200NDAwcl93cml0ZShtY3RsciwgeGFkZHIsIHlhZGRyLCAxKTsKCX0KfQoKLyoKICogRHVyaW5nIGluaXRpYWxpc2F0aW9uLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBhbmFsb2cgc3dpdGNoLiAgV2UKICogYWxzbyBwcmVzZXQgdGhlIHN3aXRjaCB0byBtYXAgdGhlIDQgY29ubmVjdG9ycyBvbiB0aGUgY2FyZCB0byB0aGUKICogKnVzZXIncyogKHNlZSBhYm92ZSBkZXNjcmlwdGlvbiBvZiBrb2RpY29tNDQwMHJfbXV4c2VsKSBjaGFubmVscwogKiAwIHRocm91Z2ggMwogKi8Kc3RhdGljIHZvaWQga29kaWNvbTQ0MDByX2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKewoJY2hhciAqc3dfc3RhdHVzID0gKGNoYXIgKikoJmJ0di0+bWJveF93ZSk7CglpbnQgaXg7CgoJZ3Bpb19pbm91dCgweDAwMDNmZiwgMHgwMDAzZmYpOwoJZ3Bpb193cml0ZSgxIDw8IDkpOwkvKiByZXNldCBNVVggKi8KCWdwaW9fd3JpdGUoMCk7CgkvKiBQcmVzZXQgY2FtZXJhIDAgdG8gdGhlIDQgY29udHJvbGxlcnMgKi8KCWZvciAoaXggPSAwOyBpeCA8IDQ7IGl4KyspIHsKCQlzd19zdGF0dXNbaXhdID0gaXg7CgkJa29kaWNvbTQ0MDByX3dyaXRlKGJ0diwgaXgsIGl4LCAxKTsKCX0KCS8qCgkgKiBTaW5jZSB0aGlzIGlzIHRoZSAibWFzdGVyIiwgd2UgbmVlZCB0byBzZXQgdXAgdGhlCgkgKiBvdGhlciB0aHJlZSBjb250cm9sbGVyIGNoaXBzJyBwb2ludGVycyB0byB0aGlzIHN0cnVjdHVyZQoJICogZm9yIGxhdGVyIHVzZSBpbiB0aGUgbXV4c2VsIHJvdXRpbmUuCgkgKi8KCWlmICgoYnR2LT5jLm5yPDEpIHx8IChidHYtPmMubnI+QlRUVl9NQVgtMykpCgkgICAgcmV0dXJuOwoJbWFzdGVyW2J0di0+Yy5uci0xXSA9IGJ0djsKCW1hc3RlcltidHYtPmMubnJdICAgPSBidHY7CgltYXN0ZXJbYnR2LT5jLm5yKzFdID0gYnR2OwoJbWFzdGVyW2J0di0+Yy5ucisyXSA9IGJ0djsKfQoKLyogVGhlIEdyYW5kdGVjIFgtR3VhcmQgZnJhbWVncmFiYmVyIGNhcmQgdXNlcyB0d28gRHVhbCA0LWNoYW5uZWwKICogdmlkZW8gbXVsdGlwbGV4ZXJzIHRvIHByb3ZpZGUgdXAgdG8gMTYgdmlkZW8gaW5wdXRzLiBUaGVzZQogKiBtdWx0aXBsZXhlcnMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGxvd2VyIDggR1BJTyBwaW5zIG9mIHRoZQogKiBidDg3OC4gVGhlIG11bHRpcGxleGVycyBwcm9iYWJseSBQZXJpY29tIFBJNVYzMzFRIG9yIHNpbWlsYXIuCgogKiB4eHgwIGlzIHBpbiB4eHggb2YgbXVsdGlwbGV4ZXIgVTUsCiAqIHl5eTEgaXMgcGluIHl5eSBvZiBtdWx0aXBsZXhlciBVMgogKi8KI2RlZmluZSBFTkEwICAgIDB4MDEKI2RlZmluZSBFTkIwICAgIDB4MDIKI2RlZmluZSBFTkExICAgIDB4MDQKI2RlZmluZSBFTkIxICAgIDB4MDgKCiNkZWZpbmUgSU4xMCAgICAweDEwCiNkZWZpbmUgSU4wMCAgICAweDIwCiNkZWZpbmUgSU4xMSAgICAweDQwCiNkZWZpbmUgSU4wMSAgICAweDgwCgpzdGF0aWMgdm9pZCB4Z3VhcmRfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJc3RhdGljIGNvbnN0IGludCBtYXNrc1tdID0gewoJCUVOQjAsIEVOQjB8SU4wMCwgRU5CMHxJTjEwLCBFTkIwfElOMDB8SU4xMCwKCQlFTkEwLCBFTkEwfElOMDAsIEVOQTB8SU4xMCwgRU5BMHxJTjAwfElOMTAsCgkJRU5CMSwgRU5CMXxJTjAxLCBFTkIxfElOMTEsIEVOQjF8SU4wMXxJTjExLAoJCUVOQTEsIEVOQTF8SU4wMSwgRU5BMXxJTjExLCBFTkExfElOMDF8SU4xMSwKCX07CglncGlvX3dyaXRlKG1hc2tzW2lucHV0JTE2XSk7Cn0Kc3RhdGljIHZvaWQgcGljb2xvX3RldHJhX2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKewoJLypUaGlzIGlzIHRoZSB2aWRlbyBpbnB1dCByZWRpcmVjdGlvbiBmb25jdGlvbmFsaXR5IDogSSBESUQgTk9UIFVTRUQgSVQuICovCglidHdyaXRlICgweDA4PDwxNixCVDg0OF9HUElPX0RBVEEpOy8qR1BJT1sxOV0gWz09PiA0MDUzIEIrQ10gc2V0IHRvIDEgKi8KCWJ0d3JpdGUgKDB4MDQ8PDE2LEJUODQ4X0dQSU9fREFUQSk7LypHUElPWzE4XSBbPT0+IDQwNTMgQV0gIHNldCB0byAxKi8KfQpzdGF0aWMgdm9pZCBwaWNvbG9fdGV0cmFfbXV4c2VsIChzdHJ1Y3QgYnR0diogYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCnsKCglkcHJpbnRrIChLRVJOX0RFQlVHICJidHR2JWQgOiBwaWNvbG9fdGV0cmFfbXV4c2VsID0+ICBpbnB1dCA9ICVkXG4iLGJ0di0+Yy5ucixpbnB1dCk7CgkvKkp1c3Qgc2V0IHRoZSByaWdodCBwYXRoIGluIHRoZSBhbmFsb2cgbXVsdGlwbGV4ZXJzIDogY2hhbm5lbCAxIC0+IDQgPT0+IEFuYWxvZyBNdXggPT0+IE1VWDAqLwoJLypHUElPWzIwXSZHUElPWzIxXSB1c2VkIHRvIGNob29zZSB0aGUgcmlnaHQgaW5wdXQqLwoJYnR3cml0ZSAoaW5wdXQ8PDIwLEJUODQ4X0dQSU9fREFUQSk7Cgp9CgovKgogKiBpdmMxMjBfbXV4c2VsIFtBZGRlZCBieSBBbGFuIEdhcmZpZWxkIDxhbGFuQGZyb21vcmJpdC5jb20+XQogKgogKiBUaGUgSVZDMTIwRyBzZWN1cml0eSBjYXJkIGhhcyA0IGkyYyBjb250cm9sbGVkIFREQTg1NDAgbWF0cml4CiAqIHN3aWNoZXJzIHRvIHByb3ZpZGUgMTYgY2hhbm5lbHMgdG8gTVVYMC4gVGhlIFREQTg1NDAncyBoYXZlCiAqIDQgaW5kZXBlbmRlbnQgb3V0cHV0cyBhbmQgYXMgc3VjaCB0aGUgSVZDMTIwRyBhbHNvIGhhcyB0aGUKICogb3B0aW9uYWwgIk1vbml0b3IgT3V0IiBidXMuIFRoaXMgYWxsb3dzIHRoZSBjYXJkIHRvIGJlIGxvb2tpbmcKICogYXQgb25lIGlucHV0IHdoaWxlIHRoZSBtb25pdG9yIGlzIGxvb2tpbmcgYXQgYW5vdGhlci4KICoKICogU2luY2UgSSd2ZSBjb3VsZG4ndCBiZSBib3RoZXJlZCBmaWd1cmluZyBvdXQgaG93IHRvIGFkZCBhbgogKiBpbmRlcGVuZGFudCBtdXhzZWwgZm9yIHRoZSBtb25pdG9yIGJ1cywgSSd2ZSBqdXN0IHNldCBpdCB0bwogKiB3aGF0ZXZlciB0aGUgY2FyZCBpcyBsb29raW5nIGF0LgogKgogKiAgT1VUMCBvZiB0aGUgVERBODU0MCdzIGlzIGNvbm5lY3RlZCB0byBNVVgwICAgICAgICAgKDB4MDMpCiAqICBPVVQxIG9mIHRoZSBUREE4NTQwJ3MgaXMgY29ubmVjdGVkIHRvICJNb25pdG9yIE91dCIgICAgICAgICgweDBDKQogKgogKiAgVERBODU0MF9BTFQzIElOMC0zID0gQ2hhbm5lbCAxMyAtIDE2ICAgICAgICgweDAzKQogKiAgVERBODU0MF9BTFQ0IElOMC0zID0gQ2hhbm5lbCAxIC0gNCAgICAgICAgICgweDAzKQogKiAgVERBODU0MF9BTFQ1IElOMC0zID0gQ2hhbm5lbCA1IC0gOCAgICAgICAgICgweDAzKQogKiAgVERBODU0MF9BTFQ2IElOMC0zID0gQ2hhbm5lbCA5IC0gMTIgICAgICAgICAgICAgICAgKDB4MDMpCiAqCiAqLwoKLyogQWxsIDcgcG9zc2libGUgc3ViLWlkcyBmb3IgdGhlIFREQTg1NDAgTWF0cml4IFN3aXRjaGVyICovCiNkZWZpbmUgSTJDX1REQTg1NDAgICAgICAgIDB4OTAKI2RlZmluZSBJMkNfVERBODU0MF9BTFQxICAgMHg5MgojZGVmaW5lIEkyQ19UREE4NTQwX0FMVDIgICAweDk0CiNkZWZpbmUgSTJDX1REQTg1NDBfQUxUMyAgIDB4OTYKI2RlZmluZSBJMkNfVERBODU0MF9BTFQ0ICAgMHg5OAojZGVmaW5lIEkyQ19UREE4NTQwX0FMVDUgICAweDlhCiNkZWZpbmUgSTJDX1REQTg1NDBfQUxUNiAgIDB4OWMKCnN0YXRpYyB2b2lkIGl2YzEyMF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQp7CgkvKiBTaW1wbGUgbWF0aHMgKi8KCWludCBrZXkgPSBpbnB1dCAlIDQ7CglpbnQgbWF0cml4ID0gaW5wdXQgLyA0OwoKCWRwcmludGsoImJ0dHYlZDogaXZjMTIwX211eHNlbDogSW5wdXQgLSAlMDJkIHwgVERBIC0gJTAyZCB8IEluIC0gJTAyZFxuIiwKCQlidHYtPmMubnIsIGlucHV0LCBtYXRyaXgsIGtleSk7CgoJLyogSGFuZGxlcyB0aGUgaW5wdXQgc2VsZWN0aW9uIG9uIHRoZSBUREE4NTQwJ3MgKi8KCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQzLCAweDAwLAoJCSAgICAgICgobWF0cml4ID09IDMpID8gKGtleSB8IGtleSA8PCAyKSA6IDB4MDApLCAxKTsKCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQ0LCAweDAwLAoJCSAgICAgICgobWF0cml4ID09IDApID8gKGtleSB8IGtleSA8PCAyKSA6IDB4MDApLCAxKTsKCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQ1LCAweDAwLAoJCSAgICAgICgobWF0cml4ID09IDEpID8gKGtleSB8IGtleSA8PCAyKSA6IDB4MDApLCAxKTsKCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQ2LCAweDAwLAoJCSAgICAgICgobWF0cml4ID09IDIpID8gKGtleSB8IGtleSA8PCAyKSA6IDB4MDApLCAxKTsKCgkvKiBIYW5kbGVzIHRoZSBvdXRwdXQgZW5hYmxlcyBvbiB0aGUgVERBODU0MCdzICovCglidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUMywgMHgwMiwKCQkgICAgICAoKG1hdHJpeCA9PSAzKSA/IDB4MDMgOiAweDAwKSwgMSk7ICAvKiAxMyAtIDE2ICovCglidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUNCwgMHgwMiwKCQkgICAgICAoKG1hdHJpeCA9PSAwKSA/IDB4MDMgOiAweDAwKSwgMSk7ICAvKiAxLTQgKi8KCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQ1LCAweDAyLAoJCSAgICAgICgobWF0cml4ID09IDEpID8gMHgwMyA6IDB4MDApLCAxKTsgIC8qIDUtOCAqLwoJYnR0dl9JMkNXcml0ZShidHYsIEkyQ19UREE4NTQwX0FMVDYsIDB4MDIsCgkJICAgICAgKChtYXRyaXggPT0gMikgPyAweDAzIDogMHgwMCksIDEpOyAgLyogOS0xMiAqLwoKCS8qIFNlbGVjdHMgTVVYMCBmb3IgaW5wdXQgb24gdGhlIDg3OCAqLwoJYnRhb3IoKDApPDw1LCB+KDM8PDUpLCBCVDg0OF9JRk9STSk7Cn0KCgovKiBQWEMyMDAgbXV4c2VsIGhlbHBlcgogKiBsdWtlQHN5c2VuZy5hbnUuZWR1LmF1CiAqIGFub3RoZXIgdHJhbnNwbGFudAogKiBmcm9tIEFsZXNzYW5kcm8gUnViaW5pIChydWJpbmlAbGludXguaXQpCiAqCiAqIFRoZXJlIGFyZSA0IGtpbmRzIG9mIGNhcmRzOgogKiBQWEMyMDBMIHdoaWNoIGlzIGJ0ODQ4CiAqIFBYQzIwMEYgd2hpY2ggaXMgYnQ4NDggd2l0aCBQSUMgY29udHJvbGxpbmcgbXV4CiAqIFBYQzIwMEFMIHdoaWNoIGlzIGJ0ODc4CiAqIFBYQzIwMEFGIHdoaWNoIGlzIGJ0ODc4IHdpdGggUElDIGNvbnRyb2xsaW5nIG11eAogKi8KI2RlZmluZSBQWF9DRkdfUFhDMjAwRiAweDAxCiNkZWZpbmUgUFhfRkxBR19QWEMyMDBBICAweDAwMDAxMDAwIC8qIGEgcHhjMjAwQSBpcyBidC04NzggYmFzZWQgKi8KI2RlZmluZSBQWF9JMkNfUElDICAgICAgIDB4MGYKI2RlZmluZSBQWF9QWEMyMDBBX0NBUkRJRCAweDIwMGExMjk1CiNkZWZpbmUgUFhfSTJDX0NNRF9DRkcgICAweDAwCgpzdGF0aWMgdm9pZCBQWEMyMDBfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKewoJaW50IHJjOwoJbG9uZyBtdXg7CglpbnQgYml0bWFzazsKCXVuc2lnbmVkIGNoYXIgYnVmWzJdOwoKCS8qIFJlYWQgUElDIGNvbmZpZyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIFBYQzIwMEYgKi8KCS8qIFBYX0kyQ19DTURfQ0ZHKi8KCWJ1ZlswXT0wOwoJYnVmWzFdPTA7CglyYz1idHR2X0kyQ1dyaXRlKGJ0diwoUFhfSTJDX1BJQzw8MSksYnVmWzBdLGJ1ZlsxXSwxKTsKCWlmIChyYykgewoJICBwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkOiBQWEMyMDBfbXV4c2VsOiBwaWMgY2ZnIHdyaXRlIGZhaWxlZDolZFxuIiwgYnR2LT5jLm5yLHJjKTsKCSAgLyogbm90IFBYQyA/IGRvIG5vdGhpbmcgKi8KCSAgcmV0dXJuOwoJfQoKCXJjPWJ0dHZfSTJDUmVhZChidHYsKFBYX0kyQ19QSUM8PDEpLE5VTEwpOwoJaWYgKCEocmMgJiBQWF9DRkdfUFhDMjAwRikpIHsKCSAgcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogUFhDMjAwX211eHNlbDogbm90IFBYQzIwMEYgcmM6JWQgXG4iLCBidHYtPmMubnIscmMpOwoJICByZXR1cm47Cgl9CgoKCS8qIFRoZSBtdWx0aXBsZXhlciBpbiB0aGUgMjAwRiBpcyBoYW5kbGVkIGJ5IHRoZSBHUElPIHBvcnQgKi8KCS8qIGdldCBjb3JyZWN0IG1hcHBpbmcgYmV0d2VlbiBpbnB1dHMgICovCgkvKiAgbXV4ID0gYnR0dl90dmNhcmRzW2J0di0+dHlwZV0ubXV4c2VsW2lucHV0XSAmIDM7ICovCgkvKiAqKiBub3QgbmVlZGVkIT8gICAqLwoJbXV4ID0gaW5wdXQ7CgoJLyogbWFrZSBzdXJlIG91dHB1dCBwaW5zIGFyZSBlbmFibGVkICovCgkvKiBiaXRtYXNrPTB4MzBmOyAqLwoJYml0bWFzaz0weDMwMjsKCS8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIFBYQzIwMEEgKi8KCWlmIChidHYtPmNhcmRpZCA9PSBQWF9QWEMyMDBBX0NBUkRJRCkgIHsKCSAgIGJpdG1hc2sgXj0gMHgxODA7IC8qIHVzZSA3IGFuZCA5LCBub3QgOCBhbmQgOSAqLwoJICAgYml0bWFzayB8PSA3PDw0OyAvKiB0aGUgREFDICovCgl9CglidHdyaXRlKGJpdG1hc2ssIEJUODQ4X0dQSU9fT1VUX0VOKTsKCgliaXRtYXNrID0gYnRyZWFkKEJUODQ4X0dQSU9fREFUQSk7CglpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpCgkgIGJpdG1hc2sgPSAoYml0bWFzayAmIH4weDI4MCkgfCAoKG11eCAmIDIpIDw8IDgpIHwgKChtdXggJiAxKSA8PCA3KTsKCWVsc2UgLyogb2xkZXIgZGV2aWNlICovCgkgIGJpdG1hc2sgPSAoYml0bWFzayAmIH4weDMwMCkgfCAoKG11eCAmIDMpIDw8IDgpOwoJYnR3cml0ZShiaXRtYXNrLEJUODQ4X0dQSU9fREFUQSk7CgoJLyoKCSAqIFdhcyAidG8gYmUgc2FmZSwgc2V0IHRoZSBidDg0OCB0byBpbnB1dCAwIgoJICogQWN0dWFsbHksIHNpbmNlIGl0J3Mgb2sgYXQgbG9hZCB0aW1lLCBiZXR0ZXIgbm90IG1lc3NpbmcKCSAqIHdpdGggdGhlc2UgYml0cyAob24gUFhDMjAwQUYgeW91IG5lZWQgdG8gc2V0IG11eCAyIGhlcmUpCgkgKgoJICogbmVlZGVkIGJlY2F1c2UgYnR0di1kcml2ZXIgc2V0cyBtdXggYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgoJICovCglpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpCgkgIGJ0YW9yKDI8PDUsIH5CVDg0OF9JRk9STV9NVVhTRUwsIEJUODQ4X0lGT1JNKTsKCWVsc2UgLyogb2xkZXIgZGV2aWNlICovCgkgIGJ0YW5kKH5CVDg0OF9JRk9STV9NVVhTRUwsQlQ4NDhfSUZPUk0pOwoKCXByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6IHNldHRpbmcgaW5wdXQgY2hhbm5lbCB0bzolZFxuIiwgYnR2LT5jLm5yLChpbnQpbXV4KTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogbW90aGVyYm9hcmQgY2hpcHNldCBzcGVjaWZpYyBzdHVmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCnZvaWQgX19kZXZpbml0IGJ0dHZfY2hlY2tfY2hpcHNldCh2b2lkKQp7CglpbnQgcGNpcGNpX2ZhaWwgPSAwOwoJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CgoJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiAoUENJUENJX0ZBSUx8UENJQUdQX0ZBSUwpKSAJLyogc2hvdWxkIGNoZWNrIGlmIHRhcmdldCBpcyBBR1AgKi8KCQlwY2lwY2lfZmFpbCA9IDE7CglpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfVFJJVE9OfFBDSVBDSV9OQVRPTUF8UENJUENJX1ZJQUVUQkYpKQoJCXRyaXRvbjEgPSAxOwoJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfVlNGWCkKCQl2c2Z4ID0gMTsKI2lmZGVmIFBDSVBDSV9BTElNQUdJSwoJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfQUxJTUFHSUspCgkJbGF0ZW5jeSA9IDB4MEE7CiNlbmRpZgoKCgkvKiBwcmludCB3YXJuaW5ncyBhYm91dCBhbnkgcXVpcmtzIGZvdW5kICovCglpZiAodHJpdG9uMSkKCQlwcmludGsoS0VSTl9JTkZPICJidHR2OiBIb3N0IGJyaWRnZSBuZWVkcyBFVEJGIGVuYWJsZWQuXG4iKTsKCWlmICh2c2Z4KQoJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IEhvc3QgYnJpZGdlIG5lZWRzIFZTRlggZW5hYmxlZC5cbiIpOwoJaWYgKHBjaXBjaV9mYWlsKSB7CgkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogYnR0diBhbmQgeW91ciBjaGlwc2V0IG1heSBub3Qgd29yayAiCgkJCQkJCQkidG9nZXRoZXIuXG4iKTsKCQlpZiAoIW5vX292ZXJsYXkpIHsKCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogb3ZlcmxheSB3aWxsIGJlIGRpc2FibGVkLlxuIik7CgkJCW5vX292ZXJsYXkgPSAxOwoJCX0gZWxzZSB7CgkJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IG92ZXJsYXkgZm9yY2VkLiBVc2UgdGhpcyAiCgkJCQkJCSJvcHRpb24gYXQgeW91ciBvd24gcmlzay5cbiIpOwoJCX0KCX0KCWlmIChVTlNFVCAhPSBsYXRlbmN5KQoJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IHBjaSBsYXRlbmN5IGZpeHVwIFslZF1cbiIsbGF0ZW5jeSk7Cgl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCgkJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQxLCBkZXYpKSkgewoJCXVuc2lnbmVkIGNoYXIgYjsKCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTMsICZiKTsKCQlpZiAoYnR0dl9kZWJ1ZykKCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogSG9zdCBicmlkZ2U6IDgyNDQxRlggTmF0b21hLCAiCgkJCSAgICAgICAiYnVmY29uPTB4JTAyeFxuIixiKTsKCX0KfQoKaW50IF9fZGV2aW5pdCBidHR2X2hhbmRsZV9jaGlwc2V0KHN0cnVjdCBidHR2ICpidHYpCnsKCXVuc2lnbmVkIGNoYXIgY29tbWFuZDsKCglpZiAoIXRyaXRvbjEgJiYgIXZzZnggJiYgVU5TRVQgPT0gbGF0ZW5jeSkKCQlyZXR1cm4gMDsKCglpZiAoYnR0dl92ZXJib3NlKSB7CgkJaWYgKHRyaXRvbjEpCgkJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogZW5hYmxpbmcgRVRCRiAoNDMwRlgvVlAzIGNvbXBhdGliaWx0eSlcbiIsYnR2LT5jLm5yKTsKCQlpZiAodnNmeCAmJiBidHYtPmlkID49IDg3OCkKCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBlbmFibGluZyBWU0ZYXG4iLGJ0di0+Yy5ucik7CgkJaWYgKFVOU0VUICE9IGxhdGVuY3kpCgkJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogc2V0dGluZyBwY2kgdGltZXIgdG8gJWRcbiIsCgkJCSAgICAgICBidHYtPmMubnIsbGF0ZW5jeSk7Cgl9CgoJaWYgKGJ0di0+aWQgPCA4NzgpIHsKCQkvKiBidDg0OCAobWlzKXVzZXMgYSBiaXQgaW4gdGhlIGlycSBtYXNrIGZvciBldGJmICovCgkJaWYgKHRyaXRvbjEpCgkJCWJ0di0+dHJpdG9uMSA9IEJUODQ4X0lOVF9FVEJGOwoJfSBlbHNlIHsKCQkvKiBidDg3OCBoYXMgYSBiaXQgaW4gdGhlIHBjaSBjb25maWcgc3BhY2UgZm9yIGl0ICovCgkJcGNpX3JlYWRfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgQlQ4NzhfREVWQ1RSTCwgJmNvbW1hbmQpOwoJCWlmICh0cml0b24xKQoJCQljb21tYW5kIHw9IEJUODc4X0VOX1RCRlg7CgkJaWYgKHZzZngpCgkJCWNvbW1hbmQgfD0gQlQ4NzhfRU5fVlNGWDsKCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgQlQ4NzhfREVWQ1RSTCwgY29tbWFuZCk7Cgl9CglpZiAoVU5TRVQgIT0gbGF0ZW5jeSkKCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgUENJX0xBVEVOQ1lfVElNRVIsIGxhdGVuY3kpOwoJcmV0dXJuIDA7Cn0KCgovKgogKiBMb2NhbCB2YXJpYWJsZXM6CiAqIGMtYmFzaWMtb2Zmc2V0OiA4CiAqIEVuZDoKICovCg==