From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 2/7] drm/i915: Move fence register tracking to GGTT Date: Wed, 11 Jul 2018 10:19:58 +0200 Message-ID: <20180711081958.GU3008@phenom.ffwll.local> References: <20180711073608.20286-1-chris@chris-wilson.co.uk> <20180711073608.20286-3-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id B998F6E668 for ; Wed, 11 Jul 2018 08:20:02 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id t2-v6so3938738edr.5 for ; Wed, 11 Jul 2018 01:20:02 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180711073608.20286-3-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKdWwgMTEsIDIwMTggYXQgMDg6MzY6MDNBTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IEFzIHRoZSBmZW5jZSByZWdpc3RlcnMgZGVmaW5lIHNwZWNpYWwgcmVnaW9ucyBvZiB0 aGUgbWFwcGFibGUgYXBlcnR1cmUKPiBpbnNpZGUgdGhlIEdsb2JhbCBHVFQsIGFuZCB3ZSB0cmFj ayB0aG9zZSByZWdpb25zIHVzaW5nIEdHVFQgVk1BLCBpdAo+IG1ha2VzIHNlbnNlIHRvIHB1bGwg dGhhdCBib29ra2VlcGluZyB1bmRlciBpOTE1X2dndHQuIFRoZSBhZHZhbnRhZ2UgaXMKPiB0aGF0 IHdlIGNhbiB0aGVuIHN0YXJ0IHVzaW5nIGEgbG9jYWwgR0dUVCBsb2NrIHRvIGhhbmRsZSB0aGUg ZmVuY2UKPiByZWdpc3RlcnMgKGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEdHVFQgVk1BKSByYXRo ZXIgdGhhbiBzdHJ1Y3RfbXV0ZXguCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxj aHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9ndnQuaCAgICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k ZWJ1Z2ZzLmMgICAgICAgfCAxNiArKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5jICAgICAgICAgICB8ICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg ICAgICAgICAgIHwgIDcgLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAg ICAgICAgIHwgMzMgKysrKystLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9m ZW5jZV9yZWcuYyB8IDc2ICsrKysrKysrKysrKy0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5oIHwgIDkgKystCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jICAgICAgIHwgIDggKystCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5oICAgICAgIHwgIDcgKystCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ3B1X2Vycm9yLmMgICAgIHwgIDcgKystCj4gIDEwIGZpbGVzIGNoYW5nZWQsIDg5IGluc2Vy dGlvbnMoKyksIDgwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvZ3Z0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiBpbmRl eCBkZTJhM2EyNTgwYmUuLjExNjA5YTQwMDNmZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvZ3Z0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgK PiBAQCAtMzkxLDcgKzM5MSw3IEBAIGludCBpbnRlbF9ndnRfbG9hZF9maXJtd2FyZShzdHJ1Y3Qg aW50ZWxfZ3Z0ICpndnQpOwo+ICAjZGVmaW5lIGd2dF9oaWRkZW5fZ21hZHJfZW5kKGd2dCkgKGd2 dF9oaWRkZW5fZ21hZHJfYmFzZShndnQpIFwKPiAgCQkJCSAgICsgZ3Z0X2hpZGRlbl9zeihndnQp IC0gMSkKPiAgCj4gLSNkZWZpbmUgZ3Z0X2ZlbmNlX3N6KGd2dCkgKGd2dC0+ZGV2X3ByaXYtPm51 bV9mZW5jZV9yZWdzKQo+ICsjZGVmaW5lIGd2dF9mZW5jZV9zeihndnQpICgoZ3Z0KS0+ZGV2X3By aXYtPmdndHQubnVtX2ZlbmNlX3JlZ3MpCj4gIAo+ICAvKiBBcGVydHVyZS9HTSBzcGFjZSBkZWZp bml0aW9ucyBmb3IgdkdQVSAqLwo+ICAjZGVmaW5lIHZncHVfYXBlcnR1cmVfb2Zmc2V0KHZncHUp CSgodmdwdSktPmdtLmxvd19nbV9ub2RlLnN0YXJ0KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jCj4gaW5kZXggMDk5Zjk3ZWYyMzAzLi43NWZmZWQ2YTNmMzEgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IEBAIC05MTQsMjAgKzkxNCwyMCBAQCBzdGF0aWMgaW50 IGk5MTVfaW50ZXJydXB0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAK PiAgc3RhdGljIGludCBpOTE1X2dlbV9mZW5jZV9yZWdzX2luZm8oc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICpkYXRhKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g JmRldl9wcml2LT5kcm07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IG5vZGVf dG9faTkxNShtLT5wcml2YXRlKTsKPiArCWNvbnN0IHN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAm aTkxNS0+Z2d0dDsKPiAgCWludCBpLCByZXQ7Cj4gIAo+IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRl cnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwlyZXQgPSBtdXRleF9sb2NrX2ludGVy cnVwdGlibGUoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1 cm4gcmV0Owo+ICAKPiAtCXNlcV9wcmludGYobSwgIlRvdGFsIGZlbmNlcyA9ICVkXG4iLCBkZXZf cHJpdi0+bnVtX2ZlbmNlX3JlZ3MpOwo+IC0JZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1f ZmVuY2VfcmVnczsgaSsrKSB7Cj4gLQkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSBkZXZfcHJpdi0+ ZmVuY2VfcmVnc1tpXS52bWE7Cj4gKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBmZW5jZXMgPSAlZFxu IiwgZ2d0dC0+bnVtX2ZlbmNlX3JlZ3MpOwo+ICsJZm9yIChpID0gMDsgaSA8IGdndHQtPm51bV9m ZW5jZV9yZWdzOyBpKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9IGdndHQtPmZlbmNl X3JlZ3NbaV0udm1hOwo+ICAKPiAgCQlzZXFfcHJpbnRmKG0sICJGZW5jZSAlZCwgcGluIGNvdW50 ID0gJWQsIG9iamVjdCA9ICIsCj4gLQkJCSAgIGksIGRldl9wcml2LT5mZW5jZV9yZWdzW2ldLnBp bl9jb3VudCk7Cj4gKwkJCSAgIGksIGdndHQtPmZlbmNlX3JlZ3NbaV0ucGluX2NvdW50KTsKPiAg CQlpZiAoIXZtYSkKPiAgCQkJc2VxX3B1dHMobSwgInVudXNlZCIpOwo+ICAJCWVsc2UKPiBAQCAt OTM1LDcgKzkzNSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fZmVuY2VfcmVnc19pbmZvKHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgCQlzZXFfcHV0YyhtLCAnXG4nKTsKPiAgCX0K PiAgCj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCW11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCAzZWJhM2QxYWI1YjguLjk3YTIwNTRjMzhkNCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGlu dCBpOTE1X2dldHBhcmFtX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs Cj4gIAkJdmFsdWUgPSBwZGV2LT5yZXZpc2lvbjsKPiAgCQlicmVhazsKPiAgCWNhc2UgSTkxNV9Q QVJBTV9OVU1fRkVOQ0VTX0FWQUlMOgo+IC0JCXZhbHVlID0gZGV2X3ByaXYtPm51bV9mZW5jZV9y ZWdzOwo+ICsJCXZhbHVlID0gZGV2X3ByaXYtPmdndHQubnVtX2ZlbmNlX3JlZ3M7Cj4gIAkJYnJl YWs7Cj4gIAljYXNlIEk5MTVfUEFSQU1fSEFTX09WRVJMQVk6Cj4gIAkJdmFsdWUgPSBkZXZfcHJp di0+b3ZlcmxheSA/IDEgOiAwOwo+IEBAIC0xMTU0LDggKzExNTQsNiBAQCBzdGF0aWMgaW50IGk5 MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAK PiAgCWludGVsX3VuY29yZV9zYW5pdGl6ZShkZXZfcHJpdik7Cj4gIAo+IC0JaTkxNV9nZW1fbG9h ZF9pbml0X2ZlbmNlcyhkZXZfcHJpdik7CgpOb3QgZW50aXJlbHkgc3VyZSB3aGV0aGVyIG1vdmlu ZyB0aGlzIGlzIG9rLCBidXQgaXQgZG9lcyBsb29rIG9rOgp1bmNvcmVfc2FuaXRpemUganVzdCBj bGVhbnMgdXAgZm9yY2V3YWtlIHN0dWZmLCB3aGljaCB3ZSBkb24ndCBuZWVkIGZvcgp0aGUgZmVu Y2UgcmVncy4gSSdsbCBsZWF2ZSBhY3R1YWwgY2hlY2tpbmcgd2l0aCByZWFsaXR5IHRvIENJLgo+ IC0KPiAgCS8qIE9uIHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2Fw YWJpbGl0eSBvbiB0aGUKPiAgCSAqIGludGVncmF0ZWQgZ3JhcGhpY3MgZXZlbiB0aG91Z2ggdGhl IHN1cHBvcnQgaXNuJ3QgYWN0dWFsbHkgdGhlcmUKPiAgCSAqIGFjY29yZGluZyB0byB0aGUgcHVi bGlzaGVkIHNwZWNzLiAgSXQgZG9lc24ndCBhcHBlYXIgdG8gZnVuY3Rpb24KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiBpbmRleCAwMWRkMjk4MzcyMzMuLmE3ZjJkNzQ3ZTIyMSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC05NjYsOSArOTY2LDYgQEAgc3RydWN0IGk5MTVfZ2Vt X21tIHsKPiAgCXN0cnVjdCBub3RpZmllcl9ibG9jayB2bWFwX25vdGlmaWVyOwo+ICAJc3RydWN0 IHNocmlua2VyIHNocmlua2VyOwo+ICAKPiAtCS8qKiBMUlUgbGlzdCBvZiBvYmplY3RzIHdpdGgg ZmVuY2UgcmVncyBvbiB0aGVtLiAqLwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBmZW5jZV9saXN0Owo+ IC0KPiAgCS8qKgo+ICAJICogV29ya3F1ZXVlIHRvIGZhdWx0IGluIHVzZXJwdHIgcGFnZXMsIGZs dXNoZWQgYnkgdGhlIGV4ZWNidWYKPiAgCSAqIHdoZW4gcmVxdWlyZWQgYnV0IG90aGVyd2lzZSBs ZWZ0IHRvIHVzZXJzcGFjZSB0byB0cnkgYWdhaW4KPiBAQCAtMTY3OCw5ICsxNjc1LDYgQEAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ICAJLyogcHJvdGVjdHMgcGFuZWwgcG93ZXIgc2VxdWVu Y2VyIHN0YXRlICovCj4gIAlzdHJ1Y3QgbXV0ZXggcHBzX211dGV4Owo+ICAKPiAtCXN0cnVjdCBk cm1faTkxNV9mZW5jZV9yZWcgZmVuY2VfcmVnc1tJOTE1X01BWF9OVU1fRkVOQ0VTXTsgLyogYXNz dW1lIDk2NSAqLwo+IC0JaW50IG51bV9mZW5jZV9yZWdzOyAvKiA4IG9uIHByZS05NjUsIDE2IG90 aGVyd2lzZSAqLwo+IC0KPiAgCXVuc2lnbmVkIGludCBmc2JfZnJlcSwgbWVtX2ZyZXEsIGlzX2Rk cjM7Cj4gIAl1bnNpZ25lZCBpbnQgc2tsX3ByZWZlcnJlZF92Y29fZnJlcTsKPiAgCXVuc2lnbmVk IGludCBtYXhfY2RjbGtfZnJlcTsKPiBAQCAtMjg4Niw3ICsyODgwLDYgQEAgaW50IGk5MTVfZ2Vt X3dhaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgdm9pZCBp OTE1X2dlbV9zYW5pdGl6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gIGludCBp OTE1X2dlbV9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4g IHZvaWQgaTkxNV9nZW1fY2xlYW51cF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOwo+IC12b2lkIGk5MTVfZ2VtX2xvYWRfaW5pdF9mZW5jZXMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgaW50IGk5MTVfZ2VtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICBpbnQgaTkxNV9nZW1fZnJlZXplX2xhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j Cj4gaW5kZXggMDdhOTJjYTYxZGJmLi4zNTZjODYwNzFjY2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKPiBAQCAtMjIxNCw4ICsyMjE0LDkgQEAgaTkxNV9nZW1fcmVsZWFzZV9tbWFwKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIAlpbnRlbF9ydW50aW1lX3BtX3B1dChp OTE1KTsKPiAgfQo+ICAKPiAtdm9pZCBpOTE1X2dlbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt2b2lkIGk5MTVfZ2VtX3J1bnRpbWVfc3VzcGVu ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgewo+ICsJc3RydWN0IGk5MTVfZ2d0 dCAqZ2d0dCA9ICZpOTE1LT5nZ3R0Owo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwgKm9uOwo+ICAJaW50IGk7Cj4gIAo+IEBAIC0yMjI3LDE1ICsyMjI4LDE1IEBAIHZvaWQgaTkx NV9nZW1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiAgCSAqLwo+ICAKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG9uLAo+IC0JCQkJ ICZkZXZfcHJpdi0+bW0udXNlcmZhdWx0X2xpc3QsIHVzZXJmYXVsdF9saW5rKQo+ICsJCQkJICZp OTE1LT5tbS51c2VyZmF1bHRfbGlzdCwgdXNlcmZhdWx0X2xpbmspCj4gIAkJX19pOTE1X2dlbV9v YmplY3RfcmVsZWFzZV9tbWFwKG9iaik7Cj4gIAo+ICAJLyogVGhlIGZlbmNlIHdpbGwgYmUgbG9z dCB3aGVuIHRoZSBkZXZpY2UgcG93ZXJzIGRvd24uIElmIGFueSB3ZXJlCj4gIAkgKiBpbiB1c2Ug YnkgaGFyZHdhcmUgKGkuZS4gdGhleSBhcmUgcGlubmVkKSwgd2Ugc2hvdWxkIG5vdCBiZSBwb3dl cmluZwo+ICAJICogZG93biEgQWxsIG90aGVyIGZlbmNlcyB3aWxsIGJlIHJlYWNxdWlyZWQgYnkg dGhlIHVzZXIgdXBvbiB3YWtpbmcuCj4gIAkgKi8KPiAtCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJp di0+bnVtX2ZlbmNlX3JlZ3M7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcg KnJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsKPiArCWZvciAoaSA9IDA7IGkgPCBnZ3R0 LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAq cmVnID0gJmdndHQtPmZlbmNlX3JlZ3NbaV07Cj4gIAo+ICAJCS8qIElkZWFsbHkgd2Ugd2FudCB0 byBhc3NlcnQgdGhhdCB0aGUgZmVuY2UgcmVnaXN0ZXIgaXMgbm90Cj4gIAkJICogbGl2ZSBhdCB0 aGlzIHBvaW50IChpLmUuIHRoYXQgbm8gcGllY2Ugb2YgY29kZSB3aWxsIGJlCj4gQEAgLTU2MzAs MzIgKzU2MzEsMzMgQEAgaTkxNV9nZW1fY2xlYW51cF9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgCQlkZXZfcHJpdi0+Z3QuY2xlYW51cF9lbmdpbmUoZW5naW5l KTsKPiAgfQo+ICAKPiAtdm9pZAo+IC1pOTE1X2dlbV9sb2FkX2luaXRfZmVuY2VzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArdm9pZCBpOTE1X2dndHRfaW5pdF9mZW5jZXMo c3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKCkZvbGxvdy11cCBwYXRjaCB0byBwdXQgdGhpcyBpbnRv IGk5MTVfZ2VtX2ZlbmNlX3JlZy5jIHdvdWxkIGJlIGtpbmRhIGNvb2wKSSB0aGluay4gVGhlIGRl Y2wgaXMgYWxyZWFkeSBpbiBpOTE1X2dlbV9mZW5jZV9yZWcuaCBhbHJlYWR5IGFueXdheS4KCj4g IHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGdndHQtPnZtLmk5MTU7 Cj4gIAlpbnQgaTsKPiAgCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA3ICYmICFJU19W QUxMRVlWSUVXKGRldl9wcml2KSAmJgo+ICAJICAgICFJU19DSEVSUllWSUVXKGRldl9wcml2KSkK PiAtCQlkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3MgPSAzMjsKPiArCQlnZ3R0LT5udW1fZmVuY2Vf cmVncyA9IDMyOwo+ICAJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0IHx8Cj4gIAkJ IElTX0k5NDVHKGRldl9wcml2KSB8fCBJU19JOTQ1R00oZGV2X3ByaXYpIHx8Cj4gIAkJIElTX0cz MyhkZXZfcHJpdikgfHwgSVNfUElORVZJRVcoZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5udW1f ZmVuY2VfcmVncyA9IDE2Owo+ICsJCWdndHQtPm51bV9mZW5jZV9yZWdzID0gMTY7Cj4gIAllbHNl Cj4gLQkJZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzID0gODsKPiArCQlnZ3R0LT5udW1fZmVuY2Vf cmVncyA9IDg7Cj4gIAo+ICAJaWYgKGludGVsX3ZncHVfYWN0aXZlKGRldl9wcml2KSkKPiAtCQlk ZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3MgPQo+IC0JCQkJSTkxNV9SRUFEKHZndGlmX3JlZyhhdmFp bF9ycy5mZW5jZV9udW0pKTsKPiArCQlnZ3R0LT5udW1fZmVuY2VfcmVncyA9IEk5MTVfUkVBRCh2 Z3RpZl9yZWcoYXZhaWxfcnMuZmVuY2VfbnVtKSk7Cj4gKwo+ICsJSU5JVF9MSVNUX0hFQUQoJmdn dHQtPmZlbmNlX2xpc3QpOwo+ICAKPiAgCS8qIEluaXRpYWxpemUgZmVuY2UgcmVnaXN0ZXJzIHRv IHplcm8gKi8KPiAtCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3M7IGkr Kykgewo+IC0JCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKmZlbmNlID0gJmRldl9wcml2LT5m ZW5jZV9yZWdzW2ldOwo+ICsJZm9yIChpID0gMDsgaSA8IGdndHQtPm51bV9mZW5jZV9yZWdzOyBp KyspIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZSA9ICZnZ3R0LT5mZW5j ZV9yZWdzW2ldOwo+ICAKPiAtCQlmZW5jZS0+aTkxNSA9IGRldl9wcml2Owo+ICsJCWZlbmNlLT5n Z3R0ID0gZ2d0dDsKPiAgCQlmZW5jZS0+aWQgPSBpOwo+IC0JCWxpc3RfYWRkX3RhaWwoJmZlbmNl LT5saW5rLCAmZGV2X3ByaXYtPm1tLmZlbmNlX2xpc3QpOwo+ICsJCWxpc3RfYWRkX3RhaWwoJmZl bmNlLT5saW5rLCAmZ2d0dC0+ZmVuY2VfbGlzdCk7Cj4gIAl9Cj4gIAlpOTE1X2dlbV9yZXN0b3Jl X2ZlbmNlcyhkZXZfcHJpdik7Cj4gIAo+IEBAIC01NjcyLDcgKzU2NzQsNiBAQCBzdGF0aWMgdm9p ZCBpOTE1X2dlbV9pbml0X19tbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCj4g IAlJTklUX0xJU1RfSEVBRCgmaTkxNS0+bW0udW5ib3VuZF9saXN0KTsKPiAgCUlOSVRfTElTVF9I RUFEKCZpOTE1LT5tbS5ib3VuZF9saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFEKCZpOTE1LT5tbS5m ZW5jZV9saXN0KTsKPiAgCUlOSVRfTElTVF9IRUFEKCZpOTE1LT5tbS51c2VyZmF1bHRfbGlzdCk7 Cj4gIAo+ICAJSU5JVF9XT1JLKCZpOTE1LT5tbS5mcmVlX3dvcmssIF9faTkxNV9nZW1fZnJlZV93 b3JrKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2Vf cmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZV9yZWcuYwo+IGluZGV4 IGQ1NDhhYzA1Y2NkNy4uNjBmYTVhODI3NmNiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZmVuY2VfcmVnLmMKPiBAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgdm9pZCBpOTY1 X3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZSwKPiAgCWlu dCBmZW5jZV9waXRjaF9zaGlmdDsKPiAgCXU2NCB2YWw7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihm ZW5jZS0+aTkxNSkgPj0gNikgewo+ICsJaWYgKElOVEVMX0dFTihmZW5jZS0+Z2d0dC0+dm0uaTkx NSkgPj0gNikgewo+ICAJCWZlbmNlX3JlZ19sbyA9IEZFTkNFX1JFR19HRU42X0xPKGZlbmNlLT5p ZCk7Cj4gIAkJZmVuY2VfcmVnX2hpID0gRkVOQ0VfUkVHX0dFTjZfSEkoZmVuY2UtPmlkKTsKPiAg CQlmZW5jZV9waXRjaF9zaGlmdCA9IEdFTjZfRkVOQ0VfUElUQ0hfU0hJRlQ7Cj4gQEAgLTkzLDcg KzkzLDcgQEAgc3RhdGljIHZvaWQgaTk2NV93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1 X2ZlbmNlX3JlZyAqZmVuY2UsCj4gIAl9Cj4gIAo+ICAJaWYgKCFwaXBlbGluZWQpIHsKPiAtCQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBmZW5jZS0+aTkxNTsKPiArCQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBmZW5jZS0+Z2d0dC0+dm0uaTkxNTsKPiAg Cj4gIAkJLyogVG8gdy9hIGluY29oZXJlbmN5IHdpdGggbm9uLWF0b21pYyA2NC1iaXQgcmVnaXN0 ZXIgdXBkYXRlcywKPiAgCQkgKiB3ZSBzcGxpdCB0aGUgNjQtYml0IHVwZGF0ZSBpbnRvIHR3byAz Mi1iaXQgd3JpdGVzLiBJbiBvcmRlcgo+IEBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIHZvaWQg aTkxNV93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqZmVuY2UsCj4g IAkJR0VNX0JVR19PTighaXNfcG93ZXJfb2ZfMih2bWEtPmZlbmNlX3NpemUpKTsKPiAgCQlHRU1f QlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5zdGFydCwgdm1hLT5mZW5jZV9zaXplKSk7Cj4g IAo+IC0JCWlmIChpc195X3RpbGVkICYmIEhBU18xMjhfQllURV9ZX1RJTElORyhmZW5jZS0+aTkx NSkpCj4gKwkJaWYgKGlzX3lfdGlsZWQgJiYgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGZlbmNlLT5n Z3R0LT52bS5pOTE1KSkKPiAgCQkJc3RyaWRlIC89IDEyODsKPiAgCQllbHNlCj4gIAkJCXN0cmlk ZSAvPSA1MTI7Cj4gQEAgLTE0NSw3ICsxNDUsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X3dyaXRlX2Zl bmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZSwKPiAgCX0KPiAgCj4gIAlp ZiAoIXBpcGVsaW5lZCkgewo+IC0JCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGZlbmNlLT5pOTE1Owo+ICsJCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGZl bmNlLT5nZ3R0LT52bS5pOTE1Owo+ICAJCWk5MTVfcmVnX3QgcmVnID0gRkVOQ0VfUkVHKGZlbmNl LT5pZCk7Cj4gIAo+ICAJCUk5MTVfV1JJVEUocmVnLCB2YWwpOwo+IEBAIC0xNzcsNyArMTc3LDcg QEAgc3RhdGljIHZvaWQgaTgzMF93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1X2ZlbmNl X3JlZyAqZmVuY2UsCj4gIAl9Cj4gIAo+ICAJaWYgKCFwaXBlbGluZWQpIHsKPiAtCQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBmZW5jZS0+aTkxNTsKPiArCQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBmZW5jZS0+Z2d0dC0+dm0uaTkxNTsKPiAgCQlpOTE1 X3JlZ190IHJlZyA9IEZFTkNFX1JFRyhmZW5jZS0+aWQpOwo+ICAKPiAgCQlJOTE1X1dSSVRFKHJl ZywgdmFsKTsKPiBAQCAtMTkzLDkgKzE5Myw5IEBAIHN0YXRpYyB2b2lkIGZlbmNlX3dyaXRlKHN0 cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKmZlbmNlLAo+ICAJICogYW5kIGV4cGxpY2l0bHkgbWFu YWdlZCBmb3IgaW50ZXJuYWwgdXNlcnMuCj4gIAkgKi8KPiAgCj4gLQlpZiAoSVNfR0VOMihmZW5j ZS0+aTkxNSkpCj4gKwlpZiAoSVNfR0VOMihmZW5jZS0+Z2d0dC0+dm0uaTkxNSkpCj4gIAkJaTgz MF93cml0ZV9mZW5jZV9yZWcoZmVuY2UsIHZtYSk7Cj4gLQllbHNlIGlmIChJU19HRU4zKGZlbmNl LT5pOTE1KSkKPiArCWVsc2UgaWYgKElTX0dFTjMoZmVuY2UtPmdndHQtPnZtLmk5MTUpKQo+ICAJ CWk5MTVfd3JpdGVfZmVuY2VfcmVnKGZlbmNlLCB2bWEpOwo+ICAJZWxzZQo+ICAJCWk5NjVfd3Jp dGVfZmVuY2VfcmVnKGZlbmNlLCB2bWEpOwo+IEBAIC0yMTAsNiArMjEwLDcgQEAgc3RhdGljIHZv aWQgZmVuY2Vfd3JpdGUoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqZmVuY2UsCj4gIHN0YXRp YyBpbnQgZmVuY2VfdXBkYXRlKHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKmZlbmNlLAo+ICAJ CQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgewo+ICsJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9 IGZlbmNlLT5nZ3R0Owo+ICAJaW50IHJldDsKPiAgCj4gIAlpZiAodm1hKSB7Cj4gQEAgLTI1MCwx NiArMjUxLDE2IEBAIHN0YXRpYyBpbnQgZmVuY2VfdXBkYXRlKHN0cnVjdCBkcm1faTkxNV9mZW5j ZV9yZWcgKmZlbmNlLAo+ICAJCWZlbmNlLT52bWEtPmZlbmNlID0gTlVMTDsKPiAgCQlmZW5jZS0+ dm1hID0gTlVMTDsKPiAgCj4gLQkJbGlzdF9tb3ZlKCZmZW5jZS0+bGluaywgJmZlbmNlLT5pOTE1 LT5tbS5mZW5jZV9saXN0KTsKPiArCQlsaXN0X21vdmUoJmZlbmNlLT5saW5rLCAmZ2d0dC0+ZmVu Y2VfbGlzdCk7Cj4gIAl9Cj4gIAo+ICAJLyogV2Ugb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgcmVn aXN0ZXIgaXRzZWxmIGlmIHRoZSBkZXZpY2UgaXMgYXdha2UuCj4gIAkgKiBJZiB0aGUgZGV2aWNl IGlzIGN1cnJlbnRseSBwb3dlcmVkIGRvd24sIHdlIHdpbGwgZGVmZXIgdGhlIHdyaXRlCj4gIAkg KiB0byB0aGUgcnVudGltZSByZXN1bWUsIHNlZSBpOTE1X2dlbV9yZXN0b3JlX2ZlbmNlcygpLgo+ ICAJICovCj4gLQlpZiAoaW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGZlbmNlLT5pOTE1 KSkgewo+ICsJaWYgKGludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShnZ3R0LT52bS5pOTE1 KSkgewo+ICAJCWZlbmNlX3dyaXRlKGZlbmNlLCB2bWEpOwo+IC0JCWludGVsX3J1bnRpbWVfcG1f cHV0KGZlbmNlLT5pOTE1KTsKPiArCQlpbnRlbF9ydW50aW1lX3BtX3B1dChnZ3R0LT52bS5pOTE1 KTsKPiAgCX0KPiAgCj4gIAlpZiAodm1hKSB7Cj4gQEAgLTI2OCw3ICsyNjksNyBAQCBzdGF0aWMg aW50IGZlbmNlX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZSwKPiAgCQkJ ZmVuY2UtPnZtYSA9IHZtYTsKPiAgCQl9Cj4gIAo+IC0JCWxpc3RfbW92ZV90YWlsKCZmZW5jZS0+ bGluaywgJmZlbmNlLT5pOTE1LT5tbS5mZW5jZV9saXN0KTsKPiArCQlsaXN0X21vdmVfdGFpbCgm ZmVuY2UtPmxpbmssICZnZ3R0LT5mZW5jZV9saXN0KTsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gMDsK PiBAQCAtMjk4LDExICsyOTksMTEgQEAgaW50IGk5MTVfdm1hX3B1dF9mZW5jZShzdHJ1Y3QgaTkx NV92bWEgKnZtYSkKPiAgCXJldHVybiBmZW5jZV91cGRhdGUoZmVuY2UsIE5VTEwpOwo+ICB9Cj4g IAo+IC1zdGF0aWMgc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqZmVuY2VfZmluZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfZmVu Y2VfcmVnICpmZW5jZV9maW5kKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gIHsKPiAgCXN0cnVj dCBkcm1faTkxNV9mZW5jZV9yZWcgKmZlbmNlOwo+ICAKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnko ZmVuY2UsICZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCwgbGluaykgewo+ICsJbGlzdF9mb3JfZWFj aF9lbnRyeShmZW5jZSwgJmdndHQtPmZlbmNlX2xpc3QsIGxpbmspIHsKPiAgCQlHRU1fQlVHX09O KGZlbmNlLT52bWEgJiYgZmVuY2UtPnZtYS0+ZmVuY2UgIT0gZmVuY2UpOwo+ICAKPiAgCQlpZiAo ZmVuY2UtPnBpbl9jb3VudCkKPiBAQCAtMzEyLDcgKzMxMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJt X2k5MTVfZmVuY2VfcmVnICpmZW5jZV9maW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiAgCX0KPiAgCj4gIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uIG9mIHBlbmRpbmcgZmxp cHMgd2hpY2ggY29uc3VtZSBmZW5jZXMgKi8KPiAtCWlmIChpbnRlbF9oYXNfcGVuZGluZ19mYl91 bnBpbihkZXZfcHJpdikpCj4gKwlpZiAoaW50ZWxfaGFzX3BlbmRpbmdfZmJfdW5waW4oZ2d0dC0+ dm0uaTkxNSkpCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7Cj4gIAo+ICAJcmV0dXJuIEVS Ul9QVFIoLUVERUFETEspOwo+IEBAIC0zMzksMTQgKzM0MCwxNSBAQCBzdGF0aWMgc3RydWN0IGRy bV9pOTE1X2ZlbmNlX3JlZyAqZmVuY2VfZmluZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIGludAo+ICBpOTE1X3ZtYV9waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEp Cj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKmZlbmNlOwo+ICsJc3RydWN0IGk5 MTVfZ2d0dCAqZ2d0dCA9IGk5MTVfdm1fdG9fZ2d0dCh2bWEtPnZtKTsKPiAgCXN0cnVjdCBpOTE1 X3ZtYSAqc2V0ID0gaTkxNV9nZW1fb2JqZWN0X2lzX3RpbGVkKHZtYS0+b2JqKSA/IHZtYSA6IE5V TEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZTsKPiAgCWludCBlcnI7Cj4g IAo+ICAJLyogTm90ZSB0aGF0IHdlIHJldm9rZSBmZW5jZXMgb24gcnVudGltZSBzdXNwZW5kLiBU aGVyZWZvcmUgdGhlIHVzZXIKPiAgCSAqIG11c3Qga2VlcCB0aGUgZGV2aWNlIGF3YWtlIHdoaWxz dCB1c2luZyB0aGUgZmVuY2UuCj4gIAkgKi8KPiAtCWFzc2VydF9ycG1fd2FrZWxvY2tfaGVsZCh2 bWEtPnZtLT5pOTE1KTsKPiArCWFzc2VydF9ycG1fd2FrZWxvY2tfaGVsZChnZ3R0LT52bS5pOTE1 KTsKPiAgCj4gIAkvKiBKdXN0IHVwZGF0ZSBvdXIgcGxhY2UgaW4gdGhlIExSVSBpZiBvdXIgZmVu Y2UgaXMgZ2V0dGluZyByZXVzZWQuICovCj4gIAlpZiAodm1hLT5mZW5jZSkgewo+IEBAIC0zNTQs MTIgKzM1NiwxMSBAQCBpOTE1X3ZtYV9waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4g IAkJR0VNX0JVR19PTihmZW5jZS0+dm1hICE9IHZtYSk7Cj4gIAkJZmVuY2UtPnBpbl9jb3VudCsr Owo+ICAJCWlmICghZmVuY2UtPmRpcnR5KSB7Cj4gLQkJCWxpc3RfbW92ZV90YWlsKCZmZW5jZS0+ bGluaywKPiAtCQkJCSAgICAgICAmZmVuY2UtPmk5MTUtPm1tLmZlbmNlX2xpc3QpOwo+ICsJCQls aXN0X21vdmVfdGFpbCgmZmVuY2UtPmxpbmssICZnZ3R0LT5mZW5jZV9saXN0KTsKPiAgCQkJcmV0 dXJuIDA7Cj4gIAkJfQo+ICAJfSBlbHNlIGlmIChzZXQpIHsKPiAtCQlmZW5jZSA9IGZlbmNlX2Zp bmQodm1hLT52bS0+aTkxNSk7Cj4gKwkJZmVuY2UgPSBmZW5jZV9maW5kKGdndHQpOwo+ICAJCWlm IChJU19FUlIoZmVuY2UpKQo+ICAJCQlyZXR1cm4gUFRSX0VSUihmZW5jZSk7Cj4gIAo+IEBAIC0z ODUsMjggKzM4NiwyOSBAQCBpOTE1X3ZtYV9waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEp Cj4gIAo+ICAvKioKPiAgICogaTkxNV9yZXNlcnZlX2ZlbmNlIC0gUmVzZXJ2ZSBhIGZlbmNlIGZv ciB2R1BVCj4gLSAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgcHJpdmF0ZQo+ICsgKiBAaTkxNTog aTkxNSBkZXZpY2UgcHJpdmF0ZQo+ICAgKgo+ICAgKiBUaGlzIGZ1bmN0aW9uIHdhbGtzIHRoZSBm ZW5jZSByZWdzIGxvb2tpbmcgZm9yIGEgZnJlZSBvbmUgYW5kIHJlbW92ZQo+ICAgKiBpdCBmcm9t IHRoZSBmZW5jZV9saXN0LiBJdCBpcyB1c2VkIHRvIHJlc2VydmUgZmVuY2UgZm9yIHZHUFUgdG8g dXNlLgo+ICAgKi8KPiAgc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqCj4gLWk5MTVfcmVzZXJ2 ZV9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK2k5MTVfcmVzZXJ2 ZV9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgewo+ICsJc3RydWN0IGk5 MTVfZ2d0dCAqZ2d0dCA9ICZpOTE1LT5nZ3R0Owo+ICAJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3Jl ZyAqZmVuY2U7Cj4gIAlpbnQgY291bnQ7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAKPiAgCS8qIEtlZXAgYXQgbGVhc3Qg b25lIGZlbmNlIGF2YWlsYWJsZSBmb3IgdGhlIGRpc3BsYXkgZW5naW5lLiAqLwo+ICAJY291bnQg PSAwOwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZW5jZSwgJmRldl9wcml2LT5tbS5mZW5jZV9s aXN0LCBsaW5rKQo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShmZW5jZSwgJmdndHQtPmZlbmNlX2xp c3QsIGxpbmspCj4gIAkJY291bnQgKz0gIWZlbmNlLT5waW5fY291bnQ7Cj4gIAlpZiAoY291bnQg PD0gMSkKPiAgCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPiAgCj4gLQlmZW5jZSA9IGZlbmNl X2ZpbmQoZGV2X3ByaXYpOwo+ICsJZmVuY2UgPSBmZW5jZV9maW5kKGdndHQpOwo+ICAJaWYgKElT X0VSUihmZW5jZSkpCj4gIAkJcmV0dXJuIGZlbmNlOwo+ICAKPiBAQCAtNDI5LDE0ICs0MzEsMTQg QEAgaTkxNV9yZXNlcnZlX2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiAgICovCj4gIHZvaWQgaTkxNV91bnJlc2VydmVfZmVuY2Uoc3RydWN0IGRybV9pOTE1X2ZlbmNl X3JlZyAqZmVuY2UpCj4gIHsKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmZlbmNlLT5pOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmZlbmNlLT5nZ3R0LT52 bS5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgCj4gLQlsaXN0X2FkZCgmZmVuY2UtPmxpbmss ICZmZW5jZS0+aTkxNS0+bW0uZmVuY2VfbGlzdCk7Cj4gKwlsaXN0X2FkZCgmZmVuY2UtPmxpbmss ICZmZW5jZS0+Z2d0dC0+ZmVuY2VfbGlzdCk7Cj4gIH0KPiAgCj4gIC8qKgo+ICAgKiBpOTE1X2dl bV9yZXZva2VfZmVuY2VzIC0gcmV2b2tlIGZlbmNlIHN0YXRlCj4gLSAqIEBkZXZfcHJpdjogaTkx NSBkZXZpY2UgcHJpdmF0ZQo+ICsgKiBAaTkxNTogaTkxNSBkZXZpY2UgcHJpdmF0ZQo+ICAgKgo+ ICAgKiBSZW1vdmVzIGFsbCBHVFQgbW1hcHBpbmdzIHZpYSB0aGUgZmVuY2UgcmVnaXN0ZXJzLiBU aGlzIGZvcmNlcyBhbnkgdXNlcgo+ICAgKiBvZiB0aGUgZmVuY2UgdG8gcmVhY3F1aXJlIHRoYXQg ZmVuY2UgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGVpciBhY2Nlc3MuCj4gQEAgLTQ0NCwxNCAr NDQ2LDE1IEBAIHZvaWQgaTkxNV91bnJlc2VydmVfZmVuY2Uoc3RydWN0IGRybV9pOTE1X2ZlbmNl X3JlZyAqZmVuY2UpCj4gICAqIHJldm9rZSBjb25jdXJyZW50IHVzZXJzcGFjZSBhY2Nlc3Mgdmlh IEdUVCBtbWFwcyB1bnRpbCB0aGUgaGFyZHdhcmUgaGFzIGJlZW4KPiAgICogcmVzZXQgYW5kIHRo ZSBmZW5jZSByZWdpc3RlcnMgaGF2ZSBiZWVuIHJlc3RvcmVkLgo+ICAgKi8KPiAtdm9pZCBpOTE1 X2dlbV9yZXZva2VfZmVuY2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr dm9pZCBpOTE1X2dlbV9yZXZva2VfZmVuY2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQo+ICB7Cj4gKwlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmk5MTUtPmdndHQ7Cj4gIAlpbnQg aTsKPiAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRl eCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAg Cj4gLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspIHsKPiAt CQlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZSA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVn c1tpXTsKPiArCWZvciAoaSA9IDA7IGkgPCBnZ3R0LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7Cj4g KwkJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqZmVuY2UgPSAmZ2d0dC0+ZmVuY2VfcmVnc1tp XTsKPiAgCj4gIAkJR0VNX0JVR19PTihmZW5jZS0+dm1hICYmIGZlbmNlLT52bWEtPmZlbmNlICE9 IGZlbmNlKTsKPiAgCj4gQEAgLTQ2MiwxOCArNDY1LDE5IEBAIHZvaWQgaTkxNV9nZW1fcmV2b2tl X2ZlbmNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAo+ICAvKioKPiAg ICogaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMgLSByZXN0b3JlIGZlbmNlIHN0YXRlCj4gLSAqIEBk ZXZfcHJpdjogaTkxNSBkZXZpY2UgcHJpdmF0ZQo+ICsgKiBAaTkxNTogaTkxNSBkZXZpY2UgcHJp dmF0ZQo+ICAgKgo+ICAgKiBSZXN0b3JlIHRoZSBodyBmZW5jZSBzdGF0ZSB0byBtYXRjaCB0aGUg c29mdHdhcmUgdHJhY2tpbmcgYWdhaW4sIHRvIGJlIGNhbGxlZAo+ICAgKiBhZnRlciBhIGdwdSBy ZXNldCBhbmQgb24gcmVzdW1lLiBOb3RlIHRoYXQgb24gcnVudGltZSBzdXNwZW5kIHdlIG9ubHkg Y2FuY2VsCj4gICAqIHRoZSBmZW5jZXMsIHRvIGJlIHJlYWNxdWlyZWQgYnkgdGhlIHVzZXIgbGF0 ZXIuCj4gICAqLwo+IC12b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiArdm9pZCBpOTE1X2dlbV9yZXN0b3JlX2ZlbmNlcyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgewo+ICsJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0 dCA9ICZpOTE1LT5nZ3R0Owo+ICAJaW50IGk7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IGRldl9w cml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7Cj4gLQkJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3Jl ZyAqcmVnID0gJmRldl9wcml2LT5mZW5jZV9yZWdzW2ldOwo+ICsJZm9yIChpID0gMDsgaSA8IGdn dHQtPm51bV9mZW5jZV9yZWdzOyBpKyspIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVn ICpyZWcgPSAmZ2d0dC0+ZmVuY2VfcmVnc1tpXTsKPiAgCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9 IHJlZy0+dm1hOwo+ICAKPiAgCQlHRU1fQlVHX09OKHZtYSAmJiB2bWEtPmZlbmNlICE9IHJlZyk7 Cj4gQEAgLTQ4Niw3ICs0OTAsNyBAQCB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQkJR0VNX0JVR19PTighcmVnLT5kaXJ0 eSk7Cj4gIAkJCUdFTV9CVUdfT04oaTkxNV92bWFfaGFzX3VzZXJmYXVsdCh2bWEpKTsKPiAgCj4g LQkJCWxpc3RfbW92ZSgmcmVnLT5saW5rLCAmZGV2X3ByaXYtPm1tLmZlbmNlX2xpc3QpOwo+ICsJ CQlsaXN0X21vdmUoJnJlZy0+bGluaywgJmdndHQtPmZlbmNlX2xpc3QpOwo+ICAJCQl2bWEtPmZl bmNlID0gTlVMTDsKPiAgCQkJdm1hID0gTlVMTDsKPiAgCQl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZmVuY2VfcmVnLmgKPiBpbmRleCA5OWEzMWRlZDRkZmQuLmM4ZjFkMGNkZmE5 MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZV9yZWcu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5oCj4gQEAg LTI4LDE2ICsyOCwyMCBAQAo+ICAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ICAKPiAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGU7Cj4gK3N0cnVjdCBpOTE1X2dndHQ7Cj4gIHN0cnVjdCBpOTE1X3Zt YTsKPiAgCj4gICNkZWZpbmUgSTk2NV9GRU5DRV9QQUdFIDQwOTZVTAo+ICAKPiAgc3RydWN0IGRy bV9pOTE1X2ZlbmNlX3JlZyB7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiArCj4gKwlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0Owo+ ICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwo+ICAJaW50IHBpbl9jb3VudDsKPiAgCWludCBp ZDsKPiArCj4gIAkvKioKPiAgCSAqIFdoZXRoZXIgdGhlIHRpbGluZyBwYXJhbWV0ZXJzIGZvciB0 aGUgY3VycmVudGx5Cj4gIAkgKiBhc3NvY2lhdGVkIGZlbmNlIHJlZ2lzdGVyIGhhdmUgY2hhbmdl ZC4gTm90ZSB0aGF0Cj4gQEAgLTQ5LDUgKzUzLDYgQEAgc3RydWN0IGRybV9pOTE1X2ZlbmNlX3Jl ZyB7Cj4gIAlib29sIGRpcnR5Owo+ICB9Owo+ICAKPiAtI2VuZGlmCj4gK3ZvaWQgaTkxNV9nZ3R0 X2luaXRfZmVuY2VzKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpOwo+ICAKPiArI2VuZGlmCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBpbmRleCBkMGFjZWYyOTliOWMuLmFiZjQxZjkw YTkyNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTM1OTUsOSAr MzU5NSwxMSBAQCBpbnQgaTkxNV9nZ3R0X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAJCWdndHQtPnZtLm1tLmNvbG9yX2FkanVzdCA9IGk5MTVfZ3R0X2NvbG9y X2FkanVzdDsKPiAgCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ ICAKPiAtCWlmICghaW9fbWFwcGluZ19pbml0X3djKCZkZXZfcHJpdi0+Z2d0dC5pb21hcCwKPiAt CQkJCWRldl9wcml2LT5nZ3R0LmdtYWRyLnN0YXJ0LAo+IC0JCQkJZGV2X3ByaXYtPmdndHQubWFw cGFibGVfZW5kKSkgewo+ICsJaTkxNV9nZ3R0X2luaXRfZmVuY2VzKGdndHQpOwo+ICsKPiArCWlm ICghaW9fbWFwcGluZ19pbml0X3djKCZnZ3R0LT5pb21hcCwKPiArCQkJCWdndHQtPmdtYWRyLnN0 YXJ0LAo+ICsJCQkJZ2d0dC0+bWFwcGFibGVfZW5kKSkgewo+ICAJCXJldCA9IC1FSU87Cj4gIAkJ Z290byBvdXRfZ3R0X2NsZWFudXA7Cj4gIAl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmgKPiBpbmRleCAxNGU2MjY1MTAxMGIuLmYzNWE4NTI4NGIxYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oCj4gQEAgLTM4LDYgKzM4LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4 L21tLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+Cj4gIAo+ICsjaW5jbHVkZSAiaTkx NV9nZW1fZmVuY2VfcmVnLmgiCj4gICNpbmNsdWRlICJpOTE1X3JlcXVlc3QuaCIKPiAgI2luY2x1 ZGUgImk5MTVfc2VsZnRlc3QuaCIKPiAgI2luY2x1ZGUgImk5MTVfdGltZWxpbmUuaCIKPiBAQCAt NTcsNyArNTgsNiBAQAo+ICAjZGVmaW5lIEk5MTVfTUFYX05VTV9GRU5DRV9CSVRTIDYKPiAgCj4g IHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGU7Cj4gLXN0cnVjdCBkcm1faTkxNV9mZW5jZV9y ZWc7Cj4gIHN0cnVjdCBpOTE1X3ZtYTsKPiAgCj4gIHR5cGVkZWYgdTMyIGdlbjZfcHRlX3Q7Cj4g QEAgLTM5Niw2ICszOTYsMTEgQEAgc3RydWN0IGk5MTVfZ2d0dCB7Cj4gIAo+ICAJaW50IG10cnI7 Cj4gIAo+ICsJLyoqIExSVSBsaXN0IG9mIG9iamVjdHMgd2l0aCBmZW5jZSByZWdzIG9uIHRoZW0u ICovCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGZlbmNlX2xpc3Q7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf ZmVuY2VfcmVnIGZlbmNlX3JlZ3NbSTkxNV9NQVhfTlVNX0ZFTkNFU107Cj4gKwlpbnQgbnVtX2Zl bmNlX3JlZ3M7Cj4gKwo+ICAJc3RydWN0IGRybV9tbV9ub2RlIGVycm9yX2NhcHR1cmU7Cj4gIH07 Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+IGluZGV4IDhjODFjZjNh YTE4Mi4uOWRmZTFkMDJmMDk4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ3B1X2Vycm9yLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJv ci5jCj4gQEAgLTEwOTMsMTYgKzEwOTMsMTcgQEAgc3RhdGljIHVpbnQzMl90IGk5MTVfZXJyb3Jf Z2VuZXJhdGVfY29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIHN0YXRp YyB2b2lkIGdlbV9yZWNvcmRfZmVuY2VzKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IpCj4g IHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVycm9yLT5pOTE1Owo+ ICsJY29uc3Qgc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZlcnJvci0+aTkxNS0+Z2d0dDsKPiAg CWludCBpOwo+ICAKPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpIHsKPiAtCQlmb3Ig KGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspCj4gKwkJZm9yIChpID0g MDsgaSA8IGdndHQtPm51bV9mZW5jZV9yZWdzOyBpKyspCj4gIAkJCWVycm9yLT5mZW5jZVtpXSA9 IEk5MTVfUkVBRDY0KEZFTkNFX1JFR19HRU42X0xPKGkpKTsKPiAgCX0gZWxzZSBpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA0KSB7Cj4gLQkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1f ZmVuY2VfcmVnczsgaSsrKQo+ICsJCWZvciAoaSA9IDA7IGkgPCBnZ3R0LT5udW1fZmVuY2VfcmVn czsgaSsrKQo+ICAJCQllcnJvci0+ZmVuY2VbaV0gPSBJOTE1X1JFQUQ2NChGRU5DRV9SRUdfOTY1 X0xPKGkpKTsKPiAgCX0gZWxzZSB7Cj4gLQkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1f ZmVuY2VfcmVnczsgaSsrKQo+ICsJCWZvciAoaSA9IDA7IGkgPCBnZ3R0LT5udW1fZmVuY2VfcmVn czsgaSsrKQo+ICAJCQllcnJvci0+ZmVuY2VbaV0gPSBJOTE1X1JFQUQoRkVOQ0VfUkVHKGkpKTsK PiAgCX0KPiAgCWVycm9yLT5uZmVuY2UgPSBpOwoKSSBkaWRuJ3QgY2hlY2sgd2hldGhlciB5b3Ug Y2F1Z2h0IGFsbCB0aGUgY2hhbmdlcywgdGhhdCdzIHdoYXQgZ2NjIGlzIGZvci4KClJldmlld2Vk LWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+IC0tIAo+IDIuMTgu MAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=