Re: [PATCH 1/2] coroutine: New module

Rusty Russell <[email protected]> Tue, 29 Nov 2016 14:17:38 +1030
Newsgroups org.ozlabs.lists.ccan
Message-ID <[email protected]>
RGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24uZHJvcGJlYXIuaWQuYXU+IHdyaXRlczoKPiArICog
VGhpcyBjb2RlIGhhcyBoZWxwZXIgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgY28tcm91dGlu
ZXMsIHRoYXQKPiArICogaXMsIGV4cGxpY2l0IGNvLW9wZXJhdGl2ZSBjb250ZXh0IHN3aXRjaGlu
Zy4gIEl0J3MgaW50ZW5kZWQgdG8KPiArICogcHJvdmlkZSBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkg
dG8gCj4gKyAqCj4gKyAqIEF1dGhvcjogRGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24uZHJvcGJl
YXIuaWQuYXU+CgpJIGJlbGlldmUgRGF2aWQgR2lic29uIHByb3ZpZGVzIG1vcmUgZnVuY3Rpb25h
bGl0eSB0aGFuIHRoaXMgbW9kdWxlIDopCgo+ICtib29sIGNvcm91dGluZV9zdGFja192YWxpZChz
dHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjaykKPiArewo+ICsJcmV0dXJuIHN0YWNrCj4gKwkJ
JiYgKHN0YWNrLT5tYWdpYyA9PSBDT1JPVVRJTkVfU1RBQ0tfTUFHSUMpCj4gKwkJJiYgKHN0YWNr
LT5zaXplID49IENPUk9VVElORV9NSU5fU1RLU1opOwo+ICt9CgpNeSAobG9vc2UpIHN0YW5kYXJk
IGhlcmUgaGFzIGJlZW4gYXMgaW4gY2Nhbi9saXN0OiBhIHBhc3MtdGhyb3VnaApmdW5jdGlvbiB3
aGljaCBhYm9ydHMgaWYgYWJvcnRzdHJpbmcgaXMgbm9uLU5VTEw6CgogICAgICAgIHN0cnVjdCBj
b3JvdXRpbmVfc3RhY2sgKmNvcm91dGluZV9zdGFja19jaGVjayhjb25zdCBzdHJ1Y3QgY29yb3V0
aW5lX3N0YWNrICpzdGFjaywgY29uc3QgY2hhciAqYWJvcnRzdHIpOwoKVGhlbiBpbiB0aGUgaGVh
ZGVyOgoKI2lmZGVmIENDQU5fQ09ST1VUSU5FX0RFQlVHCiNkZWZpbmUgY29yb3V0aW5lX3N0YWNr
X2RlYnVnKHMsIGxvYykgY29yb3V0aW5lX3N0YWNrX2NoZWNrKChzKSwgbG9jKQojZGVmaW5lIGNv
cm91dGluZV9zdGF0ZV9kZWJ1ZyhzLCBsb2MpIGNvcm91dGluZV9zdGF0ZV9jaGVjaygocyksIGxv
YykKI2Vsc2UKI2RlZmluZSBjb3JvdXRpbmVfc3RhY2tfZGVidWcocywgbG9jKSAoKHZvaWQpbG9j
LCBzKQojZGVmaW5lIGNvcm91dGluZV9zdGF0ZV9kZWJ1ZyhzLCBsb2MpICgodm9pZClsb2MsIHMp
CiNlbmRpZgoKQW5kIHNwcmlua2xlIHRob3NlIGxpYmVyYWxseSB0aHJvdWdoIHlvdXIgY29kZS4g
IFRoYXQgbWVhbnMgdGhleSBnZXQgYQpuaWNlIGNyYXNoIGlmIENDQU5fQ09ST1VUSU5FX0RFQlVH
IGlzIGRlZmluZWQsIG90aGVyd2lzZSB0aGV5IGNhbiBzdGlsbApjYWxsIGNvcm91dGluZV9zdGFj
a19jaGVjaygpIHRoZW1zZWx2ZXMgaWYgdGhleSB3YW50LgoKPiArI2lmIEhBVkVfVUNPTlRFWFQK
PiArdm9pZCBjb3JvdXRpbmVfaW5pdChzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpjcywKPiArCQkg
ICAgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsCj4gKwkJICAgIHN0cnVjdCBjb3JvdXRp
bmVfc3RhY2sgKnN0YWNrKQo+ICt7Cj4gKwlnZXRjb250ZXh0ICgmY3MtPnVjKTsKPiArCj4gKwlj
b3JvdXRpbmVfdWNfc3RhY2soJmNzLT51Yy51Y19zdGFjaywgc3RhY2spOwo+ICsKPiArICAgICAg
ICBpZiAoSEFWRV9QT0lOVEVSX1NBRkVfTUFLRUNPTlRFWFQpIHsKPiArICAgICAgICAgICAgICAg
IG1ha2Vjb250ZXh0KCZjcy0+dWMsICh2b2lkICopZm4sIDEsIGFyZyk7Cj4gKyAgICAgICAgfSBl
bHNlIHsKPiArICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBzaSA9IHB0cjJpbnQoYXJnKTsKPiAr
ICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBtYXNrID0gKDFVTCA8PCAoc2l6ZW9mKGludCkgKiA4
KSkgLSAxOwo+ICsgICAgICAgICAgICAgICAgaW50IGxvID0gc2kgJiBtYXNrOwo+ICsgICAgICAg
ICAgICAgICAgaW50IGhpID0gc2kgPj4gKHNpemVvZihpbnQpICogOCk7Cj4gKwo+ICsgICAgICAg
ICAgICAgICAgbWFrZWNvbnRleHQoJmNzLT51YywgKHZvaWQgKilmbiwgMiwgbG8sIGhpKTsKPiAr
ICAgICAgICB9Cj4gKwkKPiArfQo+ICsKPiArdm9pZCBjb3JvdXRpbmVfanVtcChjb25zdCBzdHJ1
Y3QgY29yb3V0aW5lX3N0YXRlICp0bykKPiArewo+ICsJc2V0Y29udGV4dCgmdG8tPnVjKTsKPiAr
CWFzc2VydCgwKTsKPiArfQo+ICsKPiArdm9pZCBjb3JvdXRpbmVfc3dpdGNoKHN0cnVjdCBjb3Jv
dXRpbmVfc3RhdGUgKmZyb20sCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IGNvcm91dGluZV9zdGF0
ZSAqdG8pCj4gK3sKPiArCWludCByYzsKPiArCj4gKwlyYyA9IHN3YXBjb250ZXh0KCZmcm9tLT51
YywgJnRvLT51Yyk7Cj4gKwlhc3NlcnQocmMgPT0gMCk7Cj4gK30KCgoKPiArI2VuZGlmIC8qIEhB
VkVfVUNPTlRFWFQgKi8KPiBkaWZmIC0tZ2l0IGEvY2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmgg
Yi9jY2FuL2Nvcm91dGluZS9jb3JvdXRpbmUuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k
ZXggMDAwMDAwMC4uNmViYTRhMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9jY2FuL2Nvcm91dGlu
ZS9jb3JvdXRpbmUuaAo+IEBAIC0wLDAgKzEsMjE5IEBACj4gKy8qIExpY2Vuc2VkIHVuZGVyIExH
UEx2Mi4xKyAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMgKi8KPiArI2lmbmRlZiBDQ0FO
X0NPUk9VVElORV9ICj4gKyNkZWZpbmUgQ0NBTl9DT1JPVVRJTkVfSAo+ICsjaW5jbHVkZSAiY29u
ZmlnLmgiCj4gKwo+ICsjaW5jbHVkZSA8c3RkZGVmLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4K
PiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArI2luY2x1ZGUgPGFzc2VydC5oPgo+ICsKPiArI2lu
Y2x1ZGUgPGNjYW4vY29tcGlsZXIvY29tcGlsZXIuaD4KPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3Qg
Y29yb3V0aW5lX3N0YWNrCj4gKyAqCj4gKyAqIERlc2NyaWJlcyBhIHN0YWNrIHN1aXRhYmxlIGZv
ciBleGVjdXRpbmcgYSBjb3JvdXRpbmUuICBUaGlzCj4gKyAqIHN0cnVjdHVyZSBpcyBhbHdheXMg
Y29udGFpbmVkIHdpdGhpbiB0aGUgc3RhY2sgaXQgZGVzY3JpYmVzLgo+ICsgKi8KPiArc3RydWN0
IGNvcm91dGluZV9zdGFjazsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgY29yb3V0aW5lX3N0YXRl
Cj4gKyAqCj4gKyAqIERlc2NyaWJlcyB0aGUgc3RhdGUgb2YgYW4gaW4tcHJvZ3Jlc3MgY29yb3V0
aW5lLgo+ICsgKi8KPiArc3RydWN0IGNvcm91dGluZV9zdGF0ZTsKPiArCj4gKy8qCj4gKyAqIFN0
YWNrIG1hbmFnZW1lbnQKPiArICovCj4gKwo+ICsvKioKPiArICogQ09ST1VUSU5FX1NUS19PVkVS
SEVBRCAtIGludGVybmFsIHN0YWNrIG92ZXJoZWFkCj4gKyAqCj4gKyAqIE51bWJlciBvZiBieXRl
cyBvZiBhIHN0YWNrIHdoaWNoIGNvcm91dGluZSBuZWVkcyBmb3IgaXRzIG93bgo+ICsgKiB0cmFj
a2luZyBpbmZvcm1hdGlvbi4KPiArICovCj4gKyNkZWZpbmUgQ09ST1VUSU5FX1NUS19PVkVSSEVB
RAkJKHNpemVvZih1aW50NjRfdCkgKyBzaXplb2Yoc2l6ZV90KSkKPiArCj4gKy8qKgo+ICsgKiBD
T1JPVVRJTkVfTUlOX1NUS1NaIC0gTWluaW11bSBjb3JvdXRpbmUgc3RhY2sgc2l6ZQo+ICsgKgo+
ICsgKiBDb250YWlucyB0aGUgbWluaW11bSBzaXplIGZvciBhIGNvcm91dGluZSBzdGFjayAobm90
IGluY2x1ZGluZwo+ICsgKiBvdmVyaGVhZCkuICBPbiBzeXN0ZW1zIHdpdGggTUlOU1RLU1osIGd1
YXJhbnRlZWQgdG8gYmUgYXQgbGVhc3QgYXMKPiArICogbGFyZ2UgYXMgTUlOU1RLU1ouCj4gKyAq
Lwo+ICsjZGVmaW5lIENPUk9VVElORV9NSU5fU1RLU1oJCTIwNDgKPiArCj4gKy8qKgo+ICsgKiBD
T1JPVVRJTkVfU1RBQ0tfTUFHSUMgLSBNYWdpYyBudW1iZXIgZm9yIGNvcm91dGluZSBzdGFja3MK
PiArICovCj4gKyNkZWZpbmUgQ09ST1VUSU5FX1NUQUNLX01BR0lDCQkweGMwNDBjMDQwNTc0YzU3
NGMKPiArCj4gKwo+ICsvKioKPiArICogY29yb3V0aW5lX3N0YWNrX2luaXQgLSBQcmVwYXJlIGEg
Y29yb3V0aW5lIHN0YWNrIGluIGFuIGV4aXN0aW5nIGJ1ZmZlcgo+ICsgKiBAYnVmOiBidWZmZXIg
dG8gdXNlIGZvciB0aGUgY29yb3V0aW5lIHN0YWNrCj4gKyAqIEBidWZzaXplOiBzaXplIG9mIEBi
dWYKPiArICogQG1ldGFzaXplOiBzaXplIG9mIG1ldGFkYXRhIHRvIGFkZCB0byB0aGUgc3RhY2sg
KG5vdCBpbmNsdWRpbmcKPiArICogICAgICAgICAgICBjb3JvdXRpbmUgaW50ZXJuYWwgb3Zlcmhl
YWQpCj4gKyAqCj4gKyAqIFByZXBhcmVzIEBidWYgZm9yIHVzZSBhcyBhIGNvcm91dGluZSBzdGFj
aywgcmV0dXJuaW5nIGEKPiArICogY29yb3V0aW5lX3N0YWNrICosIGFsbG9jYXRlZCBmcm9tIHdp
dGhpbiB0aGUgYnVmZmVyLiAgUmV0dXJucyBOVUxMCj4gKyAqIG9uIGZhaWx1cmUuCj4gKyAqCj4g
KyAqIFRoaXMgd2lsbCBmYWlsIGlmIHRoZSBidWZzaXplIDwgKENPUk9VVElORV9NSU5fU1RLU1og
Kwo+ICsgKiBDT1JPVVRJTkVfU1RLX09WRVJIRUFEICsgbWV0YXNpemUpLgo+ICsgKi8KPiArc3Ry
dWN0IGNvcm91dGluZV9zdGFjayAqY29yb3V0aW5lX3N0YWNrX2luaXQodm9pZCAqYnVmLCBzaXpl
X3QgYnVmc2l6ZSwKPiArCQkJCQkgICAgIHNpemVfdCBtZXRhc2l6ZSk7Cj4gKwo+ICsvKioKPiAr
ICogY29yb3V0aW5lX3N0YWNrX2luaXQgLSBTdG9wIHVzaW5nIGEgY29yb3V0aW5lIHN0YWNrCj4g
KyAqIEBzdGFjazogY29yb3V0aW5lIHN0YWNrIHRvIHJlbGVhc2UKPiArICoKPiArICogVGhpcyBy
ZWxlYXNlcyBAc3RhY2ssIG1ha2luZyBpdCBubyBsb25nZXIgc3VpdGFibGUgZm9yIHVzZSBhcyBh
Cj4gKyAqIGNvcm91dGluZSBzdGFjay4KPiArICovCj4gK3ZvaWQgY29yb3V0aW5lX3N0YWNrX3Jl
bGVhc2Uoc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spOwo+ICsKPiArLyoqCj4gKyAqIGNv
cm91dGluZV9zdGFja192YWxpZCAtIERldGVybWluZSBpZiBhIGNvcm91dGluZSBzdGFjayBsb29r
cyB2YWxpZAo+ICsgKiBAc3RhY2s6IHN0YWNrIHRvIGNoZWNrCj4gKyAqCj4gKyAqIFJldHVybnMg
dHJ1ZSBpZiBAc3RhY2sgYXBwZWFycyB0byBiZSBhIHZhbGlkIGNvcm91dGluZSBzdGFjaywgZmFs
c2UKPiArICogb3RoZXJ3aXNlLgo+ICsgKi8KPiArYm9vbCBjb3JvdXRpbmVfc3RhY2tfdmFsaWQo
c3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spOwo+ICsKPiArLyoqCj4gKyAqIGNvcm91dGlu
ZV9zdGFja190b19tZXRhZGF0YSAtIFJldHVybnMgcG9pbnRlciB0byB1c2VyJ3MgbWV0YWRhdGEK
PiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIHdpdGhpbiB0aGUg
c3RhY2sKPiArICogQHN0YWNrOiBjb3JvdXRpbmUgc3RhY2sKPiArICogQG1ldGFzaXplOiBzaXpl
IG9mIG1ldGFkYXRhCj4gKyAqCj4gKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBtZXRhZGF0
YSBhcmVhIHdpdGhpbiBAc3RhY2suICBUaGlzIGlzIG9mCj4gKyAqIHNpemUgZ2l2ZW4gYXQgaW5p
dGlhbGl6YXRpb24gdGltZSwgYW5kIHdvbid0IGJlIG92ZXJ3cml0dGVuIGJ5Cj4gKyAqIGNvcm91
dGluZXMgZXhlY3V0aW5nIG9uIHRoZSBzdGFjay4gIEl0J3MgdXAgdG8gdGhlIGNhbGxlciB3aGF0
IHRvCj4gKyAqIHB1dCBpbiBoZXJlLiBAbWV0YXNpemUgbXVzdCBiZSBlcXVhbCB0byB0aGUgdmFs
dWUgcGFzc2VkIHRvCj4gKyAqIGNvcm91dGluZV9zdGFja19pbml0KCkuCj4gKyAqLwo+ICtzdGF0
aWMgaW5saW5lIHZvaWQgKmNvcm91dGluZV9zdGFja190b19tZXRhZGF0YShzdHJ1Y3QgY29yb3V0
aW5lX3N0YWNrICpzdGFjaywKPiArCQkJCQkJc2l6ZV90IG1ldGFzaXplKQo+ICt7Cj4gKyNpZiBI
QVZFX1NUQUNLX0dST1dTX1VQV0FSRFMKPiArCXJldHVybiAoY2hhciAqKXN0YWNrIC0gbWV0YXNp
emU7Cj4gKyNlbHNlCj4gKwlyZXR1cm4gKGNoYXIgKilzdGFjayArIENPUk9VVElORV9TVEtfT1ZF
UkhFQUQ7Cj4gKyNlbmRpZgo+ICt9Cj4gKwo+ICsvKioKPiArICogY29yb3V0aW5lX3N0YWNrX2Zy
b21fbWV0YWRhdGEgLSBSZXR1cm5zIHBvaW50ZXIgdG8gY29yb3V0aW5lIHN0YWNrCj4gKyAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciBnaXZlbiBwb2ludGVyIHRvIHVz
ZXIgbWV0YWRhdGEKPiArICogQG1ldGFkYXQ6IHVzZXIgbWV0YWRhdGEgd2l0aGluIGEgc3RhY2sK
PiArICogQG1ldGFzaXplOiBzaXplIG9mIG1ldGFkYXRhCj4gKyAqCj4gKyAqIFJldHVybnMgYSBw
b2ludGVyIHRvIHRoZSBjb3JvdXRpbmVfc3RhY2sgaGFuZGxlIHdpdGhpbiBhIHN0YWNrLgo+ICsg
KiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIHBvaW50ZXIgcmV0dXJuZWQgYnkKPiArICogY29yb3V0
aW5lX3N0YWNrX3RvX21ldGFkYXRhKCkgYXQgYW4gZWFybGllciB0aW1lLiBAbWV0YXNpemUgbXVz
dCBiZQo+ICsgKiBlcXVhbCB0byB0aGUgdmFsdWUgcGFzc2VkIHRvIGNvcm91dGluZV9zdGFja19p
bml0KCkuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKgo+
ICtjb3JvdXRpbmVfc3RhY2tfZnJvbV9tZXRhZGF0YSh2b2lkICptZXRhZGF0YSwgc2l6ZV90IG1l
dGFzaXplKQo+ICt7Cj4gKyNpZiBIQVZFX1NUQUNLX0dST1dTX1VQV0FSRFMKPiArCXJldHVybiAo
c3RydWN0IGNvcm91dGluZV9zdGFjayAqKSgoY2hhciAqKW1ldGFkYXRhICsgbWV0YXNpemUpOwo+
ICsjZWxzZQo+ICsJcmV0dXJuIChzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICopKChjaGFyICopbWV0
YWRhdGEKPiArCQkJCQkgIC0gQ09ST1VUSU5FX1NUS19PVkVSSEVBRCk7Cj4gKyNlbmRpZgo+ICt9
Cj4gKwo+ICsvKioKPiArICogY29yb3V0aW5lX3N0YWNrX3NpemUgLSBSZXR1cm4gc2l6ZSBvZiBh
IGNvcm91dGluZSBzdGFjawo+ICsgKiBAc3RhY2s6IGNvcm91dGluZSBzdGFjawo+ICsgKgo+ICsg
KiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb3JvdXRpbmUgc3RhY2sgQHN0YWNrLiAgVGhpcyBk
b2VzIG5vdAo+ICsgKiBpbmNsdWRlIHRoZSBvdmVyaGVhZCBvZiBzdHJ1Y3QgY29yb3V0aW5lX3N0
YWNrIG9yIG1ldGRhdGEuCj4gKyAqLwo+ICtzaXplX3QgY29yb3V0aW5lX3N0YWNrX3NpemUoY29u
c3Qgc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spOwo+Cj4gKy8qKgo+ICsgKiBjb3JvdXRp
bmVfaW5pdCAtIFByZXBhcmUgYSBjb3JvdXRpbmUgZm9yIGV4ZWN1dGlvbgo+ICsgKiBAY3M6IGNv
cm91dGluZV9zdGF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQo+ICsgKiBAZm46IGZ1bmN0aW9u
IHRvIHN0YXJ0IGV4ZWN1dGluZyBpbiB0aGUgY29yb3V0aW5lCj4gKyAqIEBhcmc6IGFyZ3VtZW50
IGZvciBAZm4KPiArICogQHN0YWNrOiBzdGFjayB0byB1c2UgZm9yIHRoZSBjb3JvdXRpbmUKPiAr
ICoKPiArICogUHJlcGFyZXMgQGNzIGFzIGEgbmV3IGNvcm91dGluZSB3aGljaCB3aWxsIGV4ZWN1
dGUgc3RhcnRpbmcgd2l0aAo+ICsgKiBmdW5jdGlvbiBAZm4sIHVzaW5nIHN0YWNrIEBzdGFjay4K
PiArICovCj4gK3ZvaWQgY29yb3V0aW5lX2luaXQoc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqY3Ms
Cj4gKwkJICAgIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLAo+ICsJCSAgICBzdHJ1Y3Qg
Y29yb3V0aW5lX3N0YWNrICpzdGFjayk7CgpNaW5vciBzdWdnZXN0aW9uLCB0eXBlc2FmZSB3cmFw
cGVyIG1pZ2h0IGJlIG5pY2UgaGVyZToKCiNpbmNsdWRlIDxjY2FuL3R5cGVzYWZlX2NiL3R5cGVz
YWZlX2NiLmg+Cgp2b2lkIGNvcm91dGluZV9pbml0XyhzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpj
cywKCQkgICAgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsCgkJICAgIHN0cnVjdCBjb3Jv
dXRpbmVfc3RhY2sgKnN0YWNrKTsKCiNkZWZpbmUgY29yb3V0aW5lX2luaXQoY3MsIGZuLCBhcmcs
IHN0YWNrKSBcCgljb3JvdXRpbmVfaW5pdF8oKGNzKSwJCQkJCQlcCgkJICAgICAgIHR5cGVzYWZl
X2NiKHZvaWQsIHZvaWQgKiwgKGZuKSwgKGFyZykpLAkJXAoJCSAgICAgICAodm9pZCAqKShhcmcp
LCAoc3RhY2spKQoKQnV0IGdlbmVyYWxseSwgdmVyeSBuaWNlLgoKQ2hlZXJzLApSdXN0eS4KX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KY2NhbiBtYWlsaW5n
IGxpc3QKY2NhbkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0
aW5mby9jY2FuCg==