From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,10/12] hikey960: Support usb functionality of Hikey960 From: Chunfeng Yun Message-Id: <1551664069.2210.64.camel@mhfsdcap03> Date: Mon, 4 Mar 2019 09:47:49 +0800 To: Yu Chen Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, john.stultz@linaro.org, suzhuangluan@hisilicon.com, kongfei@hisilicon.com, liuyu712@hisilicon.com, wanghu17@hisilicon.com, butao@hisilicon.com, chenyao11@huawei.com, fangshengzhou@hisilicon.com, lipengcheng8@huawei.com, songxiaowei@hisilicon.com, xuyiping@hisilicon.com, xuyoujun4@huawei.com, yudongbin@hisilicon.com, zangleigang@hisilicon.com, Andy Shevchenko , Arnd Bergmann , Greg Kroah-Hartman , Binghui Wang , Heikki Krogerus List-ID: aGksCk9uIFNhdCwgMjAxOS0wMy0wMiBhdCAxNzowNSArMDgwMCwgWXUgQ2hlbiB3cm90ZToKPiBU aGlzIGRyaXZlciBoYW5kbGVzIHVzYiBodWIgcG93ZXIgb24gYW5kIHR5cGVDIHBvcnQgZXZlbnQg b2YgSGlLZXk5NjAgYm9hcmQ6Cj4gMSlEUCZETSBzd2l0Y2hpbmcgYmV0d2VlbiB1c2IgaHViIGFu ZCB0eXBlQyBwb3J0IGJhc2Ugb24gdHlwZUMgcG9ydAo+IHN0YXRlCj4gMilDb250cm9sIHBvd2Vy IG9mIHVzYiBodWIgb24gSGlrZXk5NjAKPiAzKUNvbnRyb2wgdmJ1cyBvZiB0eXBlQyBwb3J0Cj4g Cj4gQ2M6IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4KPiBDYzogQW5k eSBTaGV2Y2hlbmtvIDxhbmR5LnNoZXZjaGVua29AZ21haWwuY29tPgo+IENjOiBBcm5kIEJlcmdt YW5uIDxhcm5kQGFybmRiLmRlPgo+IENjOiBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBsaW51 eGZvdW5kYXRpb24ub3JnPgo+IENjOiBKb2huIFN0dWx0eiA8am9obi5zdHVsdHpAbGluYXJvLm9y Zz4KPiBDYzogQmluZ2h1aSBXYW5nIDx3YW5nYmluZ2h1aUBoaXNpbGljb24uY29tPgo+IENjOiBI ZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+Cj4gU2lnbmVk LW9mZi1ieTogWXUgQ2hlbiA8Y2hlbnl1NTZAaHVhd2VpLmNvbT4KPiAtLS0KPiB2MToKPiAqIFVz aW5nIGdwaW9kIEFQSSB3aXRoIHRoZSBncGlvcy4KPiAqIFJlbW92aW5nIHJlZ2lzdGVyaW5nIHVz YiByb2xlIHN3aXRjaC4KPiAqIFJlZ2lzdGVyaW5nIHVzYiByb2xlIHN3aXRjaCBub3RpZmllci4K PiB2MjoKPiAqIEZpeCBsaWNlbnNlIGRlY2xhcmF0aW9uLgo+ICogQWRkIGNvbmZpZ3VyYXRpb24g b2YgIGdwaW8gZGlyZWN0aW9uLgo+ICogUmVtb3ZlIHNvbWUgbG9nIHByaW50Lgo+IHYzOgo+ICog UmVtb3ZlIHByb3BlcnR5IG9mICJ0eXBlY192YnVzX2VuYWJsZV92YWwiLgo+ICogUmVtb3ZlIGdw aW9kX2RpcmVjdGlvbl9vdXRwdXQgYW5kIHNldCBpbml0aWFsIHZhbHVlIG9mIGdwaW8gYnkgZGV2 bV9ncGlvZF9nZXQuCj4gLS0tCj4gLS0tCj4gIGRyaXZlcnMvbWlzYy9LY29uZmlnICAgICAgICAg IHwgICA2ICsrCj4gIGRyaXZlcnMvbWlzYy9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKPiAgZHJp dmVycy9taXNjL2hpc2lfaGlrZXlfdXNiLmMgfCAxNjcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTc0IGluc2VydGlvbnMoKykK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWlzYy9oaXNpX2hpa2V5X3VzYi5jCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcK PiBpbmRleCBmNDE3YjA2ZTExYzUuLjhkOGI3MTc3NTllMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L21pc2MvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCj4gQEAgLTUyMSw2ICs1 MjEsMTIgQEAgY29uZmlnIFBWUEFOSUMKPiAgCSAgYSBwYXJhdmlydHVhbGl6ZWQgZGV2aWNlIHBy b3ZpZGVkIGJ5IFFFTVU7IGl0IGxldHMgYSB2aXJ0dWFsIG1hY2hpbmUKPiAgCSAgKGd1ZXN0KSBj b21tdW5pY2F0ZSBwYW5pYyBldmVudHMgdG8gdGhlIGhvc3QuCj4gIAo+ICtjb25maWcgSElTSV9I SUtFWV9VU0IKPiArCXRyaXN0YXRlICJVU0IgZnVuY3Rpb25hbGl0eSBvZiBIaVNpbGljb24gSGlr ZXkgUGxhdGZvcm0iCj4gKwlkZXBlbmRzIG9uIE9GICYmIEdQSU9MSUIKPiArCWhlbHAKPiArCSAg SWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHVzYiBmdW5jdGlvbmFsaXR5 IG9mIEhpU2lsaWNvbiBIaWtleSBQbGF0Zm9ybS4KPiArCj4gIHNvdXJjZSAiZHJpdmVycy9taXNj L2MycG9ydC9LY29uZmlnIgo+ICBzb3VyY2UgImRyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZyIK PiAgc291cmNlICJkcml2ZXJzL21pc2MvY2I3MTAvS2NvbmZpZyIKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCj4gaW5kZXggZTM5Y2Ni YmMxYjNhLi5kYzg4OTJiMTNhMWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxl Cj4gKysrIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCj4gQEAgLTU5LDMgKzU5LDQgQEAgb2JqLSQo Q09ORklHX1BDSV9FTkRQT0lOVF9URVNUKQkrPSBwY2lfZW5kcG9pbnRfdGVzdC5vCj4gIG9iai0k KENPTkZJR19PQ1hMKQkJKz0gb2N4bC8KPiAgb2JqLXkJCQkJKz0gY2FyZHJlYWRlci8KPiAgb2Jq LSQoQ09ORklHX1BWUEFOSUMpICAgCSs9IHB2cGFuaWMubwo+ICtvYmotJChDT05GSUdfSElTSV9I SUtFWV9VU0IpCSs9IGhpc2lfaGlrZXlfdXNiLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNj L2hpc2lfaGlrZXlfdXNiLmMgYi9kcml2ZXJzL21pc2MvaGlzaV9oaWtleV91c2IuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44NWQ2ZmVlNDY4YzAKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9taXNjL2hpc2lfaGlrZXlfdXNiLmMKPiBAQCAtMCww ICsxLDE2NyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ ICsgKiBTdXBwb3J0IGZvciB1c2IgZnVuY3Rpb25hbGl0eSBvZiBIaWtleSBzZXJpZXMgYm9hcmRz Cj4gKyAqIGJhc2VkIG9uIEhpc2lsaWNvbiBLaXJpbiBTb2MuCj4gKyAqCj4gKyAqIENvcHlyaWdo dCAoQykgMjAxNy0yMDE4IEhpbGlzaWNvbiBFbGVjdHJvbmljcyBDby4sIEx0ZC4KPiArICoJCWh0 dHA6Ly93d3cuaHVhd2VpLmNvbQo+ICsgKgo+ICsgKiBBdXRob3JzOiBZdSBDaGVuIDxjaGVueXU1 NkBodWF3ZWkuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVy Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29m Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3VzYi9yb2xlLmg+Cj4gKwo+ICsjZGVmaW5l IERFVklDRV9EUklWRVJfTkFNRSAiaGlzaV9oaWtleV91c2IiCj4gKwo+ICsjZGVmaW5lIEhVQl9W QlVTX1BPV0VSX09OIDEKPiArI2RlZmluZSBIVUJfVkJVU19QT1dFUl9PRkYgMAo+ICsjZGVmaW5l IFVTQl9TV0lUQ0hfVE9fSFVCIDEKPiArI2RlZmluZSBVU0JfU1dJVENIX1RPX1RZUEVDIDAKPiAr I2RlZmluZSBUWVBFQ19WQlVTX1BPV0VSX09OIDEKPiArI2RlZmluZSBUWVBFQ19WQlVTX1BPV0VS X09GRiAwCj4gKwo+ICtzdHJ1Y3QgaGlzaV9oaWtleV91c2Igewo+ICsJc3RydWN0IGdwaW9fZGVz YyAqb3RnX3N3aXRjaDsKPiArCXN0cnVjdCBncGlvX2Rlc2MgKnR5cGVjX3ZidXM7Cj4gKwlzdHJ1 Y3QgZ3Bpb19kZXNjICpodWJfdmJ1czsKPiArCj4gKwlzdHJ1Y3QgdXNiX3JvbGVfc3dpdGNoICpy b2xlX3N3Owo+ICsJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5iOwo+ICt9Owo+ICsKPiArc3RhdGlj IHZvaWQgaHViX3Bvd2VyX2N0cmwoc3RydWN0IGhpc2lfaGlrZXlfdXNiICpoaXNpX2hpa2V5X3Vz YiwgaW50IHZhbHVlKQo+ICt7Cj4gKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaGlzaV9oaWtl eV91c2ItPmh1Yl92YnVzLCB2YWx1ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVzYl9zd2l0 Y2hfY3RybChzdHJ1Y3QgaGlzaV9oaWtleV91c2IgKmhpc2lfaGlrZXlfdXNiLAo+ICsJCWludCBz d2l0Y2hfdG8pCj4gK3sKPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoaXNpX2hpa2V5X3Vz Yi0+b3RnX3N3aXRjaCwgc3dpdGNoX3RvKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdXNiX3R5 cGVjX3Bvd2VyX2N0cmwoc3RydWN0IGhpc2lfaGlrZXlfdXNiICpoaXNpX2hpa2V5X3VzYiwKPiAr CQlpbnQgdmFsdWUpCj4gK3sKPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoaXNpX2hpa2V5 X3VzYi0+dHlwZWNfdmJ1cywgdmFsdWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGhpc2lfaGlr ZXlfcm9sZV9zd2l0Y2goc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKPiArCQkJdW5zaWduZWQg bG9uZyBzdGF0ZSwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGhpc2lfaGlrZXlfdXNiICpo aXNpX2hpa2V5X3VzYjsKPiArCj4gKwloaXNpX2hpa2V5X3VzYiA9IGNvbnRhaW5lcl9vZihuYiwg c3RydWN0IGhpc2lfaGlrZXlfdXNiLCBuYik7Cj4gKwo+ICsJc3dpdGNoIChzdGF0ZSkgewo+ICsJ Y2FzZSBVU0JfUk9MRV9OT05FOgo+ICsJCXVzYl90eXBlY19wb3dlcl9jdHJsKGhpc2lfaGlrZXlf dXNiLCBUWVBFQ19WQlVTX1BPV0VSX09GRik7Cj4gKwkJdXNiX3N3aXRjaF9jdHJsKGhpc2lfaGlr ZXlfdXNiLCBVU0JfU1dJVENIX1RPX0hVQik7Cj4gKwkJaHViX3Bvd2VyX2N0cmwoaGlzaV9oaWtl eV91c2IsIEhVQl9WQlVTX1BPV0VSX09OKTsKPiArCQlicmVhazsKPiArCWNhc2UgVVNCX1JPTEVf SE9TVDoKPiArCQl1c2Jfc3dpdGNoX2N0cmwoaGlzaV9oaWtleV91c2IsIFVTQl9TV0lUQ0hfVE9f VFlQRUMpOwo+ICsJCXVzYl90eXBlY19wb3dlcl9jdHJsKGhpc2lfaGlrZXlfdXNiLCBUWVBFQ19W QlVTX1BPV0VSX09OKTsKPiArCQlicmVhazsKPiArCWNhc2UgVVNCX1JPTEVfREVWSUNFOgo+ICsJ CWh1Yl9wb3dlcl9jdHJsKGhpc2lfaGlrZXlfdXNiLCBIVUJfVkJVU19QT1dFUl9PRkYpOwo+ICsJ CXVzYl90eXBlY19wb3dlcl9jdHJsKGhpc2lfaGlrZXlfdXNiLCBUWVBFQ19WQlVTX1BPV0VSX09G Rik7Cj4gKwkJdXNiX3N3aXRjaF9jdHJsKGhpc2lfaGlrZXlfdXNiLCBVU0JfU1dJVENIX1RPX1RZ UEVDKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaGlzaV9oaWtleV91c2JfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCA9IGRldi0+b2Zfbm9kZTsK PiArCXN0cnVjdCBoaXNpX2hpa2V5X3VzYiAqaGlzaV9oaWtleV91c2I7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCWhpc2lfaGlrZXlfdXNiID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoaXNpX2hp a2V5X3VzYiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFoaXNpX2hpa2V5X3VzYikKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gKwloaXNpX2hpa2V5X3VzYi0+bmIubm90aWZpZXJfY2FsbCA9IGhp c2lfaGlrZXlfcm9sZV9zd2l0Y2g7Cj4gKwo+ICsJaGlzaV9oaWtleV91c2ItPnR5cGVjX3ZidXMg PSBkZXZtX2dwaW9kX2dldChkZXYsICJ0eXBlYy12YnVzIiwKPiArCQkJR1BJT0RfT1VUX0xPVyk7 Cj4gKwlpZiAoIWhpc2lfaGlrZXlfdXNiLT50eXBlY192YnVzKQo+ICsJCXJldHVybiAtRU5PRU5U Owo+ICsJZWxzZSBpZiAoSVNfRVJSKGhpc2lfaGlrZXlfdXNiLT50eXBlY192YnVzKSkKPiArCQly ZXR1cm4gUFRSX0VSUihoaXNpX2hpa2V5X3VzYi0+dHlwZWNfdmJ1cyk7Cj4gKwo+ICsJaGlzaV9o aWtleV91c2ItPm90Z19zd2l0Y2ggPSBkZXZtX2dwaW9kX2dldChkZXYsICJvdGctc3dpdGNoIiwK PiArCQkJR1BJT0RfT1VUX0hJR0gpOwo+ICsJaWYgKCFoaXNpX2hpa2V5X3VzYi0+b3RnX3N3aXRj aCkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCWVsc2UgaWYgKElTX0VSUihoaXNpX2hpa2V5X3Vz Yi0+b3RnX3N3aXRjaCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaGlzaV9oaWtleV91c2ItPm90Z19z d2l0Y2gpOwo+ICsKPiArCS8qIGh1Yi12ZGQzMy1lbiBpcyBvcHRpb25hbCAqLwo+ICsJaGlzaV9o aWtleV91c2ItPmh1Yl92YnVzID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAiaHViLXZkZDMzLWVuIiwK PiArCQkJR1BJT0RfT1VUX0hJR0gpOwo+ICsJaWYgKElTX0VSUihoaXNpX2hpa2V5X3VzYi0+aHVi X3ZidXMpKQo+ICsJCXJldHVybiBQVFJfRVJSKGhpc2lfaGlrZXlfdXNiLT5odWJfdmJ1cyk7Cj4g Kwo+ICsJaGlzaV9oaWtleV91c2ItPnJvbGVfc3cgPSB1c2Jfcm9sZV9zd2l0Y2hfZ2V0KGRldik7 Cj4gKwlpZiAoIWhpc2lfaGlrZXlfdXNiLT5yb2xlX3N3KQo+ICsJCXJldHVybiAtRVBST0JFX0RF RkVSOwpIZXJlIHJldHVybiBFUFJPQkVfREVGRkVSIG1lYW5zIHRoZSByZWxhdGVkIGRldmljZV9j b25uZWN0aW9uIGlzCnJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBwcm9iZSBpcyBjYWxsZWQsIHJpZ2h0 PwppZiBub3QsIHVzZSBJU19FUlJfT1JfTlVMTCB0aGVuIHJldHVybiBQVFJfRVJSIGlzIGVub3Vn aAo+ICsJZWxzZSBpZiAoSVNfRVJSKGhpc2lfaGlrZXlfdXNiLT5yb2xlX3N3KSkKPiArCQlyZXR1 cm4gUFRSX0VSUihoaXNpX2hpa2V5X3VzYi0+cm9sZV9zdyk7Cj4gKwo+ICsJcmV0ID0gdXNiX3Jv bGVfc3dpdGNoX3JlZ2lzdGVyX25vdGlmaWVyKGhpc2lfaGlrZXlfdXNiLT5yb2xlX3N3LAo+ICsJ CQkmaGlzaV9oaWtleV91c2ItPm5iKTsKPiArCWlmIChyZXQpIHsKPiArCQl1c2Jfcm9sZV9zd2l0 Y2hfcHV0KGhpc2lfaGlrZXlfdXNiLT5yb2xlX3N3KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhpc2lfaGlrZXlfdXNiKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCAgaGlzaV9oaWtleV91c2JfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBoaXNpX2hpa2V5 X3VzYiAqaGlzaV9oaWtleV91c2IgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4g Kwl1c2Jfcm9sZV9zd2l0Y2hfdW5yZWdpc3Rlcl9ub3RpZmllcihoaXNpX2hpa2V5X3VzYi0+cm9s ZV9zdywKPiArCQkJJmhpc2lfaGlrZXlfdXNiLT5uYik7Cj4gKwo+ICsJdXNiX3JvbGVfc3dpdGNo X3B1dChoaXNpX2hpa2V5X3VzYi0+cm9sZV9zdyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlkX3RhYmxlX2hpc2lfaGlrZXlf dXNiW10gPSB7Cj4gKwl7LmNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGdwaW9faHVidjEifSwKPiAr CXsuY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGlrZXk5NjBfdXNiIn0sCj4gKwl7fQo+ICt9Owo+ ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGlzaV9oaWtleV91c2JfZHJpdmVy ID0gewo+ICsJLnByb2JlID0gaGlzaV9oaWtleV91c2JfcHJvYmUsCj4gKwkucmVtb3ZlID0gaGlz aV9oaWtleV91c2JfcmVtb3ZlLAo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFtZSA9IERFVklDRV9E UklWRVJfTkFNRSwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBpZF90YWJsZV9oaXNpX2hpa2V5X3Vz YiwKPiArCX0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGhpc2lfaGlrZXlf dXNiX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJZdSBDaGVuIDxjaGVueXU1NkBodWF3 ZWkuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBTdXBwb3J0IGZvciBVU0Ig ZnVuY3Rpb25hbGl0eSBvZiBIaWtleSIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==