Re: [PATCH v4 05/11] drm/sun4i: abstract a engine type

Icenowy Zheng
2017-04-18T11:05:12Z

Cgrkuo4gMjAxN+W5tDTmnIgxOOaXpSBHTVQrMDg6MDAg5LiL5Y2INDo1NTo0OCwgTWF4aW1lIFJp
cGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+IOWGmeWIsDoKPkhpLAo+Cj5U
aGFua3MgZm9yIHRoYXQgcmV3b3JrLgo+Cj5PbiBTdW4sIEFwciAxNiwgMjAxNyBhdCAwODowODo0
M1BNICswODAwLCBJY2Vub3d5IFpoZW5nIHdyb3RlOgo+PiBBcyB3ZSBhcmUgZ29pbmcgdG8gYWRk
IHN1cHBvcnQgZm9yIHRoZSBBbGx3aW5uZXIgREUyIGVuZ2luZSBpbgo+c3VuNGktZHJtCj4+IGRy
aXZlciwgd2Ugd2lsbCBmaW5hbGx5IGhhdmUgdHdvIHR5cGVzIG9mIGRpc3BsYXkgZW5naW5lcyAt
LSB0aGUgREUxCj4+IGJhY2tlbmQgYW5kIHRoZSBERTIgbWl4ZXIuIFRoZXkgYm90aCBkbyBzb21l
IGRpc3BsYXkgYmxlbmRpbmcgYW5kCj5mZWVkCj4+IGdyYXBoaWNzIGRhdGEgdG8gVENPTiwgc28g
SSBjaG9vc2UgdG8gY2FsbCB0aGVtIGJvdGggImVuZ2luZSIgaGVyZS4KPj4gCj4+IEFic3RyYWN0
IHRoZSBlbmdpbmUgdHlwZSB0byB2b2lkICogYW5kIGEgb3BzIHN0cnVjdCwgd2hpY2ggY29udGFp
bnMKPj4gZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBvdXRzaWRlIHRoZSBlbmdpbmUt
c3BlY2lmaWVkIGNvZGUgKGluCj4+IFRDT04sIENSVEMgb3IgVFYgRW5jb2RlciBjb2RlKS4KPj4g
Cj4+IEEgZGVkaWNhdGVkIEtjb25maWcgb3B0aW9uIGlzIGFsc28gYWRkZWQgdG8gY29udHJvbCB3
aGV0aGVyCj4+IHN1bjRpLWJhY2tlbmQtc3BlY2lmaWVkIGNvZGUgKHN1bjRpX2JhY2tlbmQuYyBh
bmQgc3VuNGlfbGF5ZXIuYykKPnNob3VsZAo+PiBiZSBidWlsdC4gQXMgd2UgcmVtb3ZlZCB0aGUg
Y29kZXMgaW4gQ1JUQyBjb2RlIHRoYXQgZGlyZWN0bHkgY2FsbCB0aGUKPj4gbGF5ZXIgY29kZSwg
d2UgY2FuIG5vdyBleHRyYWN0IHRoZSBsYXllciBwYXJ0IGFuZCBjb21iaW5lIGl0IHdpdGggdGhl
Cj4+IGJhY2tlbmQgcGFydCBpbnRvIGEgbmV3IG1vZHVsZSwgc3VuNGktYmFja2VuZC5rby4KPj4g
Cj4+IFNpZ25lZC1vZmYtYnk6IEljZW5vd3kgWmhlbmcgPGljZW5vd3lAYW9zYy5pbz4KPj4gLS0t
Cj4+IENoYW5nZXMgaW4gdjQ6Cj4+IC0gQ29tbWVudHMgdG8gdGFnIHRoZSBjb2xvciBjb3JyZWN0
aW9uIGZ1bmN0aW9ucyBhcyBvcHRpb25hbC4KPj4gLSBDaGVjayBiZWZvcmUgY2FsbGluZyB0aGUg
b3B0aW9uYWwgZnVuY3Rpb25zLgo+PiAtIENoYW5nZSBsYXllcnNfaW5pdCB0byBzYXRpc2Z5IG5l
dyBQQVRDSCB2NCAwNC8xMS4KPj4gCj4+ICBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvS2NvbmZpZyAg
ICAgICAgIHwgMTAgKysrKysrKysrKwo+PiAgZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxl
ICAgICAgICB8ICA2ICsrKystLQo+PiAgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2JhY2tl
bmQuYyB8IDI2Cj4rKysrKysrKysrKysrKysrKysrLS0tLS0tLQo+PiAgZHJpdmVycy9ncHUvZHJt
L3N1bjRpL3N1bjRpX2JhY2tlbmQuaCB8ICA1IC0tLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vc3Vu
NGkvc3VuNGlfY3J0Yy5jICAgIHwgMTQgKysrKysrKy0tLS0tLS0KPj4gIGRyaXZlcnMvZ3B1L2Ry
bS9zdW40aS9zdW40aV9jcnRjLmggICAgfCAgNyArKysrLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0v
c3VuNGkvc3VuNGlfZHJ2LmggICAgIHwgIDMgKystCj4+ICBkcml2ZXJzL2dwdS9kcm0vc3VuNGkv
c3VuNGlfbGF5ZXIuYyAgIHwgIDIgKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9s
YXllci5oICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29uLmMg
ICAgfCAgMiArLQo+PiAgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3R2LmMgICAgICB8IDEx
ICsrKysrKy0tLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VueGlfZW5naW5lLmggIHwg
MzUKPisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAxMiBmaWxlcyBjaGFu
Z2VkLCA5MSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKPj4gIGNyZWF0ZSBtb2RlIDEw
MDY0NCBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VueGlfZW5naW5lLmgKPj4gCj4+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvS2NvbmZpZwo+Yi9kcml2ZXJzL2dwdS9kcm0vc3Vu
NGkvS2NvbmZpZwo+PiBpbmRleCBhNGIzNTdkYjg4NTYuLjVhODIyN2YzN2NjNCAxMDA2NDQKPj4g
LS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9ncHUv
ZHJtL3N1bjRpL0tjb25maWcKPj4gQEAgLTEyLDMgKzEyLDEzIEBAIGNvbmZpZyBEUk1fU1VONEkK
Pj4gIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBBbGx3aW5uZXIgU29DIHdp
dGggYQo+PiAgCSAgRGlzcGxheSBFbmdpbmUuIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3
aWxsIGJlIGNhbGxlZAo+PiAgCSAgc3VuNGktZHJtLgo+PiArCj4+ICtjb25maWcgRFJNX1NVTjRJ
X0JBQ0tFTkQKPj4gKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgQWxsd2lubmVyIEExMCBEaXNwbGF5
IEVuZ2luZSBCYWNrZW5kIgo+PiArCWRlcGVuZHMgb24gRFJNX1NVTjRJCj4+ICsJZGVmYXVsdCBE
Uk1fU1VONEkKPj4gKwloZWxwCj4+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUg
YW4gQWxsd2lubmVyIFNvQyB3aXRoIHRoZQo+PiArCSAgb3JpZ2luYWwgQWxsd2lubmVyIERpc3Bs
YXkgRW5naW5lLCB3aGljaCBoYXMgYSBiYWNrZW5kIHRvCj4+ICsJICBkbyBzb21lIGFscGhhIGJs
ZW5kaW5nIGFuZCBmZWVkIGdyYXBoaWNzIHRvIFRDT04uIElmIE0gaXMKPj4gKwkgIHNlbGVjdGVk
IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3VuNGktYmFja2VuZC4KPj4gZGlmZiAtLWdpdCBh
L2RyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZQo+Yi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkv
TWFrZWZpbGUKPj4gaW5kZXggNTliNzU3MzUwYTFmLi4xZGIxMDY4YjliZTEgMTAwNjQ0Cj4+IC0t
LSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL2dwdS9k
cm0vc3VuNGkvTWFrZWZpbGUKPj4gQEAgLTUsOSArNSwxMSBAQCBzdW40aS10Y29uLXkgKz0gc3Vu
NGlfdGNvbi5vCj4+ICBzdW40aS10Y29uLXkgKz0gc3VuNGlfcmdiLm8KPj4gIHN1bjRpLXRjb24t
eSArPSBzdW40aV9kb3RjbG9jay5vCj4+ICBzdW40aS10Y29uLXkgKz0gc3VuNGlfY3J0Yy5vCj4+
IC1zdW40aS10Y29uLXkgKz0gc3VuNGlfbGF5ZXIubwo+PiArCj4+ICtzdW40aS1iYWNrZW5kLXkg
Kz0gc3VuNGlfbGF5ZXIubwo+PiArc3VuNGktYmFja2VuZC15ICs9IHN1bjRpX2JhY2tlbmQubwo+
PiAgCj4+ICBvYmotJChDT05GSUdfRFJNX1NVTjRJKQkJKz0gc3VuNGktZHJtLm8gc3VuNGktdGNv
bi5vCj4+IC1vYmotJChDT05GSUdfRFJNX1NVTjRJKQkJKz0gc3VuNGlfYmFja2VuZC5vCj4+ICtv
YmotJChDT05GSUdfRFJNX1NVTjRJX0JBQ0tFTkQpCSs9IHN1bjRpLWJhY2tlbmQubwo+PiAgb2Jq
LSQoQ09ORklHX0RSTV9TVU40SSkJCSs9IHN1bjZpX2RyYy5vCj4+ICBvYmotJChDT05GSUdfRFJN
X1NVTjRJKQkJKz0gc3VuNGlfdHYubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1
bjRpL3N1bjRpX2JhY2tlbmQuYwo+Yi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfYmFja2Vu
ZC5jCj4+IGluZGV4IGQ2NjA3NDFiYTQ3NS4uYTE2Yzk2YTAwMmE0IDEwMDY0NAo+PiAtLS0gYS9k
cml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfYmFja2VuZC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1
L2RybS9zdW40aS9zdW40aV9iYWNrZW5kLmMKPj4gQEAgLTIzLDYgKzIzLDggQEAKPj4gIAo+PiAg
I2luY2x1ZGUgInN1bjRpX2JhY2tlbmQuaCIKPj4gICNpbmNsdWRlICJzdW40aV9kcnYuaCIKPj4g
KyNpbmNsdWRlICJzdW40aV9sYXllci5oIgo+PiArI2luY2x1ZGUgInN1bnhpX2VuZ2luZS5oIgo+
PiAgCj4+ICBzdGF0aWMgY29uc3QgdTMyIHN1bnhpX3JnYjJ5dXZfY29lZlsxMl0gPSB7Cj4+ICAJ
MHgwMDAwMDEwNywgMHgwMDAwMDIwNCwgMHgwMDAwMDA2NCwgMHgwMDAwMDEwOCwKPj4gQEAgLTMw
LDkgKzMyLDEwIEBAIHN0YXRpYyBjb25zdCB1MzIgc3VueGlfcmdiMnl1dl9jb2VmWzEyXSA9IHsK
Pj4gIAkweDAwMDAwMWMxLCAweDAwMDAzZTg4LCAweDAwMDAzZmI4LCAweDAwMDAwODA4Cj4+ICB9
Owo+PiAgCj4+IC12b2lkIHN1bjRpX2JhY2tlbmRfYXBwbHlfY29sb3JfY29ycmVjdGlvbihzdHJ1
Y3Qgc3VuNGlfYmFja2VuZAo+KmJhY2tlbmQpCj4+ICtzdGF0aWMgdm9pZCBzdW40aV9iYWNrZW5k
X2FwcGx5X2NvbG9yX2NvcnJlY3Rpb24odm9pZCAqZW5naW5lKQo+PiAgewo+PiAgCWludCBpOwo+
PiArCXN0cnVjdCBzdW40aV9iYWNrZW5kICpiYWNrZW5kID0gZW5naW5lOwo+Cj5JJ20gbm90IHJl
YWxseSBmb25kIG9mIHBhc3NpbmcgYW4gb3BhcXVlIHBvaW50ZXIgaGVyZSwgYW5kIGhvcGUgdGhh
dAo+dGhpbmdzIHdpbGwgd29yayBvdXQuCj4KPkkgdGhpbmsgaGF2aW5nIGEgY29tbW9uIHN0cnVj
dHVyZSwgaG9sZGluZyB0aGUgY29tbW9uIHRoaW5nc2FuZCBhIG1vcmUKPnNwZWNpZmljIHN0cnVj
dHVyZSBmb3IgdGhhdCBvbmUgd291bGQgd29yayBiZXR0ZXIuCj4KPlNvbWV0aGluZyBsaWtlCj4K
PnN0cnVjdCBzdW54aV9lbmdpbmUgewo+ICAgICAgIHN0cnVjdCByZWdtYXAJKnJlZ3M7Cj59Owo+
Cj5zdHJ1Y3Qgc3VuNGlfYmFja2VuZCB7Cj4gICAgICAgc3RydWN0IHN1bnhpX2VuZ2luZQllbmdp
bmU7Cj4KPglzdHJ1Y3QgY2xrCQkqc2F0X2NsazsKPglzdHJ1Y3QgcmVzZXRfY29udHJvbAkqc2F0
X3Jlc2V0Owo+CQo+fTsKClNvdW5kcyBnb29kIDstKQoKPgo+c3RhdGljIHZvaWQgc3VuNGlfYmFj
a2VuZF9hcHBseV9jb2xvcl9jb3JyZWN0aW9uKHN0cnVjdCBzdW54aV9lbmdpbmUKPiplbmdpbmUp
Cj5zdHJ1Y3Qgc3VuNGlfYmFja2VuZCAqYmFja2VuZCA9IGNvbnRhaW5lcl9vZihlbmdpbmUsIHN0
cnVjdAo+c3VuNGlfYmFja2VuZCwgZW5naW5lKTsKPgo+Li4uCj4KPj4gK3N0YXRpYyBjb25zdCBz
dHJ1Y3Qgc3VueGlfZW5naW5lX29wcyBzdW40aV9iYWNrZW5kX2VuZ2luZV9vcHMgPSB7Cj4+ICsJ
LmNvbW1pdCA9IHN1bjRpX2JhY2tlbmRfY29tbWl0LAo+PiArCS5sYXllcnNfaW5pdCA9IHN1bjRp
X2xheWVyc19pbml0LAo+PiArCS5hcHBseV9jb2xvcl9jb3JyZWN0aW9uID0gc3VuNGlfYmFja2Vu
ZF9hcHBseV9jb2xvcl9jb3JyZWN0aW9uLAo+PiArCS5kaXNhYmxlX2NvbG9yX2NvcnJlY3Rpb24g
PSBzdW40aV9iYWNrZW5kX2Rpc2FibGVfY29sb3JfY29ycmVjdGlvbiwKPgo+UGxlYXNlIGFsaWdu
IHRoZSB2YWx1ZXMgd2l0aCB0YWJzLCBsaWtlIGRvbmUgaW4gdGhlIG90aGVyIHN0cnVjdHVyZXMK
PmNyZWF0ZWQgdGhhdCB3YXkgaW4gdGhpcyBkcml2ZXIuCj4KPj4gIHN0YXRpYyB2b2lkIHN1bjRp
X2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPj4gQEAgLTU2LDcgKzU1
LDcgQEAgc3RhdGljIHZvaWQgc3VuNGlfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRj
Cj4qY3J0YywKPj4gIAo+PiAgCURSTV9ERUJVR19EUklWRVIoIkNvbW1pdHRpbmcgcGxhbmUgY2hh
bmdlc1xuIik7Cj4+ICAKPj4gLQlzdW40aV9iYWNrZW5kX2NvbW1pdChzY3J0Yy0+YmFja2VuZCk7
Cj4+ICsJc2NydGMtPmVuZ2luZV9vcHMtPmNvbW1pdChzY3J0Yy0+ZW5naW5lKTsKPgo+WW91IHJl
bHkgb24gdGhlIGJhY2tlbmQgaGF2aW5nIHNldHVwIHRoaW5ncyBwcm9wZXJseSwgd2hpY2ggaXMg
cHJldHR5Cj5mcmFnaWxlLiBJZGVhbGx5LCB5b3Ugc2hvdWxkIGhhdmUgYSBmdW5jdGlvbiB0byBj
aGVjayB0aGF0IGVuZ2luZV9vcHMKPmFuZCBjb21taXQgaXMgIU5VTEwsIGFuZCBjYWxsIGl0LCBh
bmQgdGhlIGNvbnN1bWVycyB3b3VsZCB1c2UgdGhhdAo+ZnVuY3Rpb24uLi4KCklmIGl0J3MgcmVh
bGx5IE5VTEwgaG93IHNob3VsZCB0aGUgZnVuY3Rpb24gcmV0dXJuPwoKPgo+PiBAQCAtMzYyLDcg
KzM2MSw5IEBAIHN0YXRpYyB2b2lkIHN1bjRpX3R2X2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVy
Cj4qZW5jb2RlcikKPj4gIAlyZWdtYXBfdXBkYXRlX2JpdHModHYtPnJlZ3MsIFNVTjRJX1RWRV9F
Tl9SRUcsCj4+ICAJCQkgICBTVU40SV9UVkVfRU5fRU5BQkxFLAo+PiAgCQkJICAgMCk7Cj4+IC0J
c3VuNGlfYmFja2VuZF9kaXNhYmxlX2NvbG9yX2NvcnJlY3Rpb24oYmFja2VuZCk7Cj4+ICsKPj4g
KwlpZiAoY3J0Yy0+ZW5naW5lX29wcy0+ZGlzYWJsZV9jb2xvcl9jb3JyZWN0aW9uKQo+PiArCQlj
cnRjLT5lbmdpbmVfb3BzLT5kaXNhYmxlX2NvbG9yX2NvcnJlY3Rpb24oY3J0Yy0+ZW5naW5lKTsK
Pj4gIH0KPgo+Li4uIEluc3RlYWQgb2YgaGF2aW5nIHRvIGRvIGl0IGluIHNvbWUgY2FzZXMsIGJ1
dCBub3QgYWx3YXlzIC4uLgo+Cj4+ICBzdGF0aWMgdm9pZCBzdW40aV90dl9lbmFibGUoc3RydWN0
IGRybV9lbmNvZGVyICplbmNvZGVyKQo+PiBAQCAtMzcwLDExICszNzEsMTEgQEAgc3RhdGljIHZv
aWQgc3VuNGlfdHZfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2Rlcgo+KmVuY29kZXIpCj4+ICAJc3Ry
dWN0IHN1bjRpX3R2ICp0diA9IGRybV9lbmNvZGVyX3RvX3N1bjRpX3R2KGVuY29kZXIpOwo+PiAg
CXN0cnVjdCBzdW40aV9jcnRjICpjcnRjID0gZHJtX2NydGNfdG9fc3VuNGlfY3J0YyhlbmNvZGVy
LT5jcnRjKTsKPj4gIAlzdHJ1Y3Qgc3VuNGlfdGNvbiAqdGNvbiA9IGNydGMtPnRjb247Cj4+IC0J
c3RydWN0IHN1bjRpX2JhY2tlbmQgKmJhY2tlbmQgPSBjcnRjLT5iYWNrZW5kOwo+PiAgCj4+ICAJ
RFJNX0RFQlVHX0RSSVZFUigiRW5hYmxpbmcgdGhlIFRWIE91dHB1dFxuIik7Cj4+ICAKPj4gLQlz
dW40aV9iYWNrZW5kX2FwcGx5X2NvbG9yX2NvcnJlY3Rpb24oYmFja2VuZCk7Cj4+ICsJaWYgKGNy
dGMtPmVuZ2luZV9vcHMtPmFwcGx5X2NvbG9yX2NvcnJlY3Rpb24pCj4+ICsJCWNydGMtPmVuZ2lu
ZV9vcHMtPmFwcGx5X2NvbG9yX2NvcnJlY3Rpb24oY3J0Yy0+ZW5naW5lKTsKPj4gIAo+PiAgCXJl
Z21hcF91cGRhdGVfYml0cyh0di0+cmVncywgU1VONElfVFZFX0VOX1JFRywKPj4gIAkJCSAgIFNV
TjRJX1RWRV9FTl9FTkFCTEUsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkv
c3VueGlfZW5naW5lLmgKPmIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bnhpX2VuZ2luZS5oCj4+
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uYTkxMjhhYmRhNjZm
Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bnhpX2Vu
Z2luZS5oCj4+IEBAIC0wLDAgKzEsMzUgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWNlbm93eSBaaGVuZyA8aWNlbm93eUBhb3NjLmlvPgo+PiArICoKPj4gKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4g
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzCj4+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZgo+PiArICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfU1VOWElf
RU5HSU5FX0hfCj4+ICsjZGVmaW5lIF9TVU5YSV9FTkdJTkVfSF8KPj4gKwo+PiArc3RydWN0IHN1
bjRpX2NydGM7Cj4+ICsKPj4gK3N0cnVjdCBzdW54aV9lbmdpbmVfb3BzIHsKPj4gKwkvKiBDb21t
aXQgdGhlIGNoYW5nZXMgdG8gdGhlIGVuZ2luZSAqLwo+PiArCXZvaWQgKCpjb21taXQpKHZvaWQg
KmVuZ2luZSk7Cj4+ICsJLyogSW5pdGlhbGl6ZSBsYXllcnMgKHBsYW5lcykgZm9yIHRoaXMgZW5n
aW5lICovCj4+ICsJc3RydWN0IGRybV9wbGFuZSAqKigqbGF5ZXJzX2luaXQpKHN0cnVjdCBkcm1f
ZGV2aWNlICpkcm0sCj4+ICsJCQkJCSAgc3RydWN0IHN1bjRpX2NydGMgKmNydGMpOwo+PiArCj4+
ICsJLyoKPj4gKwkgKiBUaGVzZSBhcmUgb3B0aW9uYWwgZnVuY3Rpb25zIGZvciB0aGUgVFYgRW5j
b2Rlci4gUGxlYXNlIGNoZWNrCj4+ICsJICogdGhlaXIgcHJlc2VuY2UgYmVmb3JlIGNhbGxpbmcg
dGhlbS4KPj4gKwkgKgo+PiArCSAqIFRoZSBmaXJzdCBmdW5jdGlvbiBhcHBsaWVzIHRoZSBjb2xv
ciBzcGFjZSBjb3JyZWN0aW9uIG5lZWRlZAo+PiArCSAqIGZvciBvdXRwdXRpbmcgY29ycmVjdCBU
ViBzaWduYWwuCj4+ICsJICoKPj4gKwkgKiBUaGUgc2Vjb25kIGZ1bmN0aW9uIGRpc2FibGVkIHRo
ZSBjb3JyZWN0aW9uLgo+PiArCSAqLwo+PiArCXZvaWQgKCphcHBseV9jb2xvcl9jb3JyZWN0aW9u
KSh2b2lkICplbmdpbmUpOwo+PiArCXZvaWQgKCpkaXNhYmxlX2NvbG9yX2NvcnJlY3Rpb24pKHZv
aWQgKmVuZ2luZSk7Cj4KPi4uLiBBbmQgaGF2ZSB0byBkb2N1bWVudCBpdC4KPgo+UGxlYXNlIGFs
c28gdXNlIGtlcm5lbGRvYyBmb3IgdGhvc2UgY29tbWVudHMuCj4KPlRoYW5rcyBhZ2FpbiEKPk1h
eGltZQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu
dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl
YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt
YXJtLWtlcm5lbAo=