From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 76C617F69 for ; Fri, 26 Jun 2015 14:32:27 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 496D8304039 for ; Fri, 26 Jun 2015 12:32:24 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 6PANayEsNhulgov6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 26 Jun 2015 12:32:23 -0700 (PDT) Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id BA19240E683 for ; Fri, 26 Jun 2015 19:32:22 +0000 (UTC) Date: Fri, 26 Jun 2015 15:32:20 -0400 From: Brian Foster Subject: Re: [PATCH 14/17] mkfs: add string options to generic parsing Message-ID: <20150626193220.GJ40750@bfoster.bfoster> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-15-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1434711726-13092-15-git-send-email-jtulak@redhat.com> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com To: Jan =?utf-8?B?xaR1bMOhaw==?= Cc: Dave Chinner , xfs@oss.sgi.com T24gRnJpLCBKdW4gMTksIDIwMTUgYXQgMDE6MDI6MDNQTSArMDIwMCwgSmFuIMWkdWzDoWsgd3Jv dGU6Cj4gRnJvbTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IAo+IFNvIHRo YXQgc3RyaW5nIG9wdGlvbnMgYXJlIGNvcnJlY3RseSBkZXRlY3RlZCBmb3IgY29uZmxpY3RzIGFu ZAo+IHJlc3BlY2lmaWNhdGlvbiwgYWRkIGEgZ2V0c3RyKCkgZnVuY3Rpb24gdGhhdCBtb2RpZmll cyB0aGUgb3B0aW9uCj4gdGFibGVzIGFwcHJvcHJpYXRlbHkuCj4gCj4gU2lnbmVkLW9mZi1ieTog RGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEphbiDF pHVsw6FrIDxqdHVsYWtAcmVkaGF0LmNvbT4KPiAtLS0KClJldmlld2VkLWJ5OiBCcmlhbiBGb3N0 ZXIgPGJmb3N0ZXJAcmVkaGF0LmNvbT4KCj4gIG1rZnMveGZzX21rZnMuYyB8IDEyNyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZp bGUgY2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgNTcgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAt LWdpdCBhL21rZnMveGZzX21rZnMuYyBiL21rZnMveGZzX21rZnMuYwo+IGluZGV4IDFkODAxODgu LjZiZmE3M2MgMTAwNjQ0Cj4gLS0tIGEvbWtmcy94ZnNfbWtmcy5jCj4gKysrIGIvbWtmcy94ZnNf bWtmcy5jCj4gQEAgLTY4LDYgKzY4LDcgQEAgc3RydWN0IG9wdF9wYXJhbXMgewo+ICAJc3RydWN0 IHN1Ym9wdF9wYXJhbSB7Cj4gIAkJaW50CQlpbmRleDsKPiAgCQlib29sCQlzZWVuOwo+ICsJCWJv b2wJCXN0cl9zZWVuOwo+ICAJCWJvb2wJCWNvbnZlcnQ7Cj4gIAkJYm9vbAkJaXNfcG93ZXJfMjsK PiAgCQlpbnQJCWNvbmZsaWN0c1tNQVhfQ09ORkxJQ1RTXTsKPiBAQCAtMTQxMiwxNCArMTQxMywx NSBAQCBpbGxlZ2FsX29wdGlvbigKPiAgCXVzYWdlKCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBsb25n IGxvbmcKPiAtZ2V0bnVtKAo+ICtzdGF0aWMgdm9pZAo+ICtjaGVja19vcHQoCj4gIAljb25zdCBj aGFyCQkqc3RyLAo+ICAJc3RydWN0IG9wdF9wYXJhbXMJKm9wdHMsCj4gLQlpbnQJCQlpbmRleCkK PiArCWludAkJCWluZGV4LAo+ICsJYm9vbAkJCXN0cl9zZWVuKQo+ICB7Cj4gLQlzdHJ1Y3Qgc3Vi b3B0X3BhcmFtICpzcCA9ICZvcHRzLT5zdWJvcHRfcGFyYW1zW2luZGV4XTsKPiAtCWxvbmcgbG9u ZwkJYzsKPiArCXN0cnVjdCBzdWJvcHRfcGFyYW0JKnNwID0gJm9wdHMtPnN1Ym9wdF9wYXJhbXNb aW5kZXhdOwo+ICsJaW50CQkJaTsKPiAgCj4gIAlpZiAoc3AtPmluZGV4ICE9IGluZGV4KSB7Cj4g IAkJZnByaW50ZihzdGRlcnIsCj4gQEAgLTE0MjgsMjEgKzE0MzAsNDYgQEAgZ2V0bnVtKAo+ICAJ CXJlcXZhbChvcHRzLT5uYW1lLCAoY2hhciAqKilvcHRzLT5zdWJvcHRzLCBpbmRleCk7Cj4gIAl9 Cj4gIAo+IC0JLyogY2hlY2sgZm9yIHJlc3BlY2lmaWNhdGlvbiBvZiB0aGUgb3B0aW9uICovCj4g LQlpZiAoc3AtPnNlZW4pCj4gLQkJcmVzcGVjKG9wdHMtPm5hbWUsIChjaGFyICoqKW9wdHMtPnN1 Ym9wdHMsIGluZGV4KTsKPiAtCXNwLT5zZWVuID0gdHJ1ZTsKPiArCS8qCj4gKwkgKiBDaGVjayBm b3IgcmVzcGVjaWZpY2F0aW9uIG9mIHRoZSBvcHRpb24uIFRoaXMgaXMgbW9yZSBjb21wbGV4IHRo YW4gaXQKPiArCSAqIHNlZW1zIGJlY2F1c2Ugc29tZSBvcHRpb25zIGFyZSBwYXJzZWQgdHdpY2Ug LSBvbmNlIGFzIGEgc3RyaW5nIGR1cmluZwo+ICsJICogaW5wdXQgcGFyc2luZywgdGhlbiBsYXRl ciB0aGUgc3RyaW5nIGlzIHBhc3NlZCB0byBnZXRudW0gZm9yCj4gKwkgKiBjb252ZXJzaW9uIGlu dG8gYSBudW1iZXIgYW5kIGJvdW5kcyBjaGVja2luZy4gSGVuY2UgdGhlIHR3byB2YXJpYWJsZXMK PiArCSAqIHVzZWQgdG8gdHJhY2sgdGhlIGRpZmZlcmVudCB1c2VzIGJhc2VkIG9uIHRoZSBAc3Ry IHBhcmFtZXRlciBwYXNzZWQKPiArCSAqIHRvIHVzLgo+ICsJICovCj4gKwlpZiAoIXN0cl9zZWVu KSB7Cj4gKwkJaWYgKHNwLT5zZWVuKQo+ICsJCQlyZXNwZWMob3B0cy0+bmFtZSwgKGNoYXIgKiop b3B0cy0+c3Vib3B0cywgaW5kZXgpOwo+ICsJCXNwLT5zZWVuID0gdHJ1ZTsKPiArCX0gZWxzZSB7 Cj4gKwkJaWYgKHNwLT5zdHJfc2VlbikKPiArCQkJcmVzcGVjKG9wdHMtPm5hbWUsIChjaGFyICoq KW9wdHMtPnN1Ym9wdHMsIGluZGV4KTsKPiArCQlzcC0+c3RyX3NlZW4gPSB0cnVlOwo+ICsJfQo+ ICAKPiAgCS8qIGNoZWNrIGZvciBjb25mbGljdHMgd2l0aCB0aGUgb3B0aW9uICovCj4gLQlmb3Ig KGMgPSAwOyBjIDwgTUFYX0NPTkZMSUNUUzsgYysrKSB7Cj4gLQkJaW50IGNvbmZsaWN0X29wdCA9 IHNwLT5jb25mbGljdHNbY107Cj4gKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTkZMSUNUUzsgaSsr KSB7Cj4gKwkJaW50IGNvbmZsaWN0X29wdCA9IHNwLT5jb25mbGljdHNbaV07Cj4gIAo+ICAJCWlm IChjb25mbGljdF9vcHQgPT0gTEFTVF9DT05GTElDVCkKPiAgCQkJYnJlYWs7Cj4gLQkJaWYgKG9w dHMtPnN1Ym9wdF9wYXJhbXNbY29uZmxpY3Rfb3B0XS5zZWVuKQo+ICsJCWlmIChvcHRzLT5zdWJv cHRfcGFyYW1zW2NvbmZsaWN0X29wdF0uc2VlbiB8fAo+ICsJCQlvcHRzLT5zdWJvcHRfcGFyYW1z W2NvbmZsaWN0X29wdF0uc3RyX3NlZW4pCj4gIAkJCWNvbmZsaWN0KG9wdHMtPm5hbWUsIChjaGFy ICoqKW9wdHMtPnN1Ym9wdHMsIGNvbmZsaWN0X29wdCwgaW5kZXgpOwo+ICAJfQo+ICt9Cj4gKwo+ ICtzdGF0aWMgbG9uZyBsb25nCj4gK2dldG51bSgKPiArCWNvbnN0IGNoYXIJCSpzdHIsCj4gKwlz dHJ1Y3Qgb3B0X3BhcmFtcwkqb3B0cywKPiArCWludAkJCWluZGV4KQo+ICt7Cj4gKwlzdHJ1Y3Qg c3Vib3B0X3BhcmFtCSpzcCA9ICZvcHRzLT5zdWJvcHRfcGFyYW1zW2luZGV4XTsKPiArCWxvbmcg bG9uZwkJYzsKPiAgCj4gKwljaGVja19vcHQoc3RyLCBvcHRzLCBpbmRleCwgZmFsc2UpOwo+ICAJ LyogZW1wdHkgc3RyaW5ncyBtaWdodCBqdXN0IHJldHVybiBhIGRlZmF1bHQgdmFsdWUgKi8KPiAg CWlmICghc3RyIHx8ICpzdHIgPT0gJ1wwJykgewo+ICAJCWlmIChzcC0+ZGVmYXVsdHZhbCA9PSBT VUJPUFRfTkVFRFNfVkFMKQo+IEBAIC0xNDc2LDYgKzE1MDMsMjYgQEAgZ2V0bnVtKAo+ICAJcmV0 dXJuIGM7Cj4gIH0KPiAgCj4gKy8qCj4gKyAqIE9wdGlvbiBpcyBhIHN0cmluZyAtIGRvIGFsbCB0 aGUgb3B0aW9uIHRhYmxlIHdvcmssIGFuZCBjaGVjayB0aGVyZQo+ICsgKiBpcyBhY3R1YWxseSBh biBvcHRpb24gc3RyaW5nLiBPdGhlcndpc2Ugd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGUg c3RyaW5nCj4gKyAqIGhlcmUgLSB2YWxpZGF0aW9uIHdpbGwgYmUgZG9uZSBsYXRlciB3aGVuIHRo ZSBzdHJpbmcgaXMgY29udmVydGVkIHRvIGEgdmFsdWUKPiArICogb3IgdXNlZCBhcyBhIGZpbGUv ZGV2aWNlIHBhdGguCj4gKyAqLwo+ICtzdGF0aWMgY2hhciAqCj4gK2dldHN0cigKPiArCWNoYXIJ CQkqc3RyLAo+ICsJc3RydWN0IG9wdF9wYXJhbXMJKm9wdHMsCj4gKwlpbnQJCQlpbmRleCkKPiAr ewo+ICsJY2hlY2tfb3B0KHN0ciwgb3B0cywgaW5kZXgsIHRydWUpOwo+ICsKPiArCS8qIGVtcHR5 IHN0cmluZ3MgZm9yIHN0cmluZyBvcHRpb25zIGFyZSBub3QgdmFsaWQgKi8KPiArCWlmICghc3Ry IHx8ICpzdHIgPT0gJ1wwJykKPiArCQlyZXF2YWwob3B0cy0+bmFtZSwgKGNoYXIgKiopb3B0cy0+ c3Vib3B0cywgaW5kZXgpOwo+ICsJcmV0dXJuIHN0cjsKPiArfQo+ICsKPiAgaW50Cj4gIG1haW4o Cj4gIAlpbnQJCQlhcmdjLAo+IEBAIC0xNjcwLDE4ICsxNzE3LDEwIEBAIG1haW4oCj4gIAkJCQkJ CXhpLmRjcmVhdCA9IDE7Cj4gIAkJCQkJYnJlYWs7Cj4gIAkJCQljYXNlIERfTkFNRToKPiAtCQkJ CQlpZiAoIXZhbHVlIHx8ICp2YWx1ZSA9PSAnXDAnKQo+IC0JCQkJCQlyZXF2YWwoJ2QnLCBzdWJv cHRzLCBEX05BTUUpOwo+IC0JCQkJCWlmICh4aS5kbmFtZSkKPiAtCQkJCQkJcmVzcGVjKCdkJywg c3Vib3B0cywgRF9OQU1FKTsKPiAtCQkJCQl4aS5kbmFtZSA9IHZhbHVlOwo+ICsJCQkJCXhpLmRu YW1lID0gZ2V0c3RyKHZhbHVlLCAmZG9wdHMsIERfTkFNRSk7Cj4gIAkJCQkJYnJlYWs7Cj4gIAkJ CQljYXNlIERfU0laRToKPiAtCQkJCQlpZiAoIXZhbHVlIHx8ICp2YWx1ZSA9PSAnXDAnKQo+IC0J CQkJCQlyZXF2YWwoJ2QnLCBzdWJvcHRzLCBEX1NJWkUpOwo+IC0JCQkJCWlmIChkc2l6ZSkKPiAt CQkJCQkJcmVzcGVjKCdkJywgc3Vib3B0cywgRF9TSVpFKTsKPiAtCQkJCQlkc2l6ZSA9IHZhbHVl Owo+ICsJCQkJCWRzaXplID0gZ2V0c3RyKHZhbHVlLCAmZG9wdHMsIERfU0laRSk7Cj4gIAkJCQkJ YnJlYWs7Cj4gIAkJCQljYXNlIERfU1VOSVQ6Cj4gIAkJCQkJZHN1bml0ID0gZ2V0bnVtKHZhbHVl LCAmZG9wdHMsIERfU1VOSVQpOwo+IEBAIC0xODIyLDE4ICsxODYxLDEwIEBAIG1haW4oCj4gIAkJ CQkJYnJlYWs7Cj4gIAkJCQljYXNlIExfTkFNRToKPiAgCQkJCWNhc2UgTF9ERVY6Cj4gLQkJCQkJ aWYgKGxhZmxhZykKPiAtCQkJCQkJY29uZmxpY3QoJ2wnLCBzdWJvcHRzLCBMX0FHTlVNLCBMX0RF Vik7Cj4gLQkJCQkJaWYgKGxpZmxhZykKPiAtCQkJCQkJY29uZmxpY3QoJ2wnLCBzdWJvcHRzLCBM X0lOVEVSTkFMLCBMX0RFVik7Cj4gLQkJCQkJaWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1wwJykK PiAtCQkJCQkJcmVxdmFsKCdsJywgc3Vib3B0cywgTF9OQU1FKTsKPiAtCQkJCQlpZiAoeGkubG9n bmFtZSkKPiAtCQkJCQkJcmVzcGVjKCdsJywgc3Vib3B0cywgTF9OQU1FKTsKPiArCQkJCQlsb2dm aWxlID0gZ2V0c3RyKHZhbHVlLCAmbG9wdHMsIExfTkFNRSk7Cj4gKwkJCQkJeGkubG9nbmFtZSA9 IGxvZ2ZpbGU7Cj4gIAkJCQkJbGRmbGFnID0gMTsKPiAgCQkJCQlsb2dpbnRlcm5hbCA9IDA7Cj4g LQkJCQkJbG9nZmlsZSA9IHZhbHVlOwo+IC0JCQkJCXhpLmxvZ25hbWUgPSB2YWx1ZTsKPiAgCQkJ CQlicmVhazsKPiAgCQkJCWNhc2UgTF9WRVJTSU9OOgo+ICAJCQkJCXNiX2ZlYXQubG9nX3ZlcnNp b24gPQo+IEBAIC0xODQxLDEyICsxODcyLDcgQEAgbWFpbigKPiAgCQkJCQlsdmZsYWcgPSAxOwo+ ICAJCQkJCWJyZWFrOwo+ICAJCQkJY2FzZSBMX1NJWkU6Cj4gLQkJCQkJaWYgKCF2YWx1ZSB8fCAq dmFsdWUgPT0gJ1wwJykKPiAtCQkJCQkJcmVxdmFsKCdsJywgc3Vib3B0cywgTF9TSVpFKTsKPiAt CQkJCQlpZiAobG9nc2l6ZSkKPiAtCQkJCQkJcmVzcGVjKCdsJywgc3Vib3B0cywgTF9TSVpFKTsK PiAtCQkJCQlsb2dzaXplID0gdmFsdWU7Cj4gLQkJCQkJbHNmbGFnID0gMTsKPiArCQkJCQlsb2dz aXplID0gZ2V0c3RyKHZhbHVlLCAmbG9wdHMsIExfU0laRSk7Cj4gIAkJCQkJYnJlYWs7Cj4gIAkJ CQljYXNlIExfU0VDVExPRzoKPiAgCQkJCQlsc2VjdG9ybG9nID0gZ2V0bnVtKHZhbHVlLCAmbG9w dHMsCj4gQEAgLTE5MzAsMTAgKzE5NTYsNyBAQCBfKCJjYW5ub3Qgc3BlY2lmeSBib3RoIC1tIGNy Yz0xIGFuZCAtbiBmdHlwZVxuIikpOwo+ICAJCQkJCW5zZmxhZyA9IDE7Cj4gIAkJCQkJYnJlYWs7 Cj4gIAkJCQljYXNlIE5fVkVSU0lPTjoKPiAtCQkJCQlpZiAoIXZhbHVlIHx8ICp2YWx1ZSA9PSAn XDAnKQo+IC0JCQkJCQlyZXF2YWwoJ24nLCBzdWJvcHRzLCBOX1ZFUlNJT04pOwo+IC0JCQkJCWlm IChudmZsYWcpCj4gLQkJCQkJCXJlc3BlYygnbicsIHN1Ym9wdHMsIE5fVkVSU0lPTik7Cj4gKwkJ CQkJdmFsdWUgPSBnZXRzdHIodmFsdWUsICZub3B0cywgTl9WRVJTSU9OKTsKPiAgCQkJCQlpZiAo IXN0cmNhc2VjbXAodmFsdWUsICJjaSIpKSB7Cj4gIAkJCQkJCS8qIEFTQ0lJIENJIG1vZGUgKi8K PiAgCQkJCQkJc2JfZmVhdC5uY2kgPSB0cnVlOwo+IEBAIC0xOTgyLDExICsyMDA1LDggQEAgXygi Y2Fubm90IHNwZWNpZnkgYm90aCAtbSBjcmM9MSBhbmQgLW4gZnR5cGVcbiIpKTsKPiAgCQkJCXN3 aXRjaCAoZ2V0c3Vib3B0KCZwLCAoY29uc3RwcClzdWJvcHRzLAo+ICAJCQkJCQkgICZ2YWx1ZSkp IHsKPiAgCQkJCWNhc2UgUl9FWFRTSVpFOgo+IC0JCQkJCWlmICghdmFsdWUgfHwgKnZhbHVlID09 ICdcMCcpCj4gLQkJCQkJCXJlcXZhbCgncicsIHN1Ym9wdHMsIFJfRVhUU0laRSk7Cj4gLQkJCQkJ aWYgKHJ0ZXh0c2l6ZSkKPiAtCQkJCQkJcmVzcGVjKCdyJywgc3Vib3B0cywgUl9FWFRTSVpFKTsK PiAtCQkJCQlydGV4dHNpemUgPSB2YWx1ZTsKPiArCQkJCQlydGV4dHNpemUgPSBnZXRzdHIodmFs dWUsICZyb3B0cywKPiArCQkJCQkJCSAgIFJfRVhUU0laRSk7Cj4gIAkJCQkJYnJlYWs7Cj4gIAkJ CQljYXNlIFJfRklMRToKPiAgCQkJCQl4aS5yaXNmaWxlID0gZ2V0bnVtKHZhbHVlLCAmcm9wdHMs Cj4gQEAgLTE5OTYsMTggKzIwMTYsMTEgQEAgXygiY2Fubm90IHNwZWNpZnkgYm90aCAtbSBjcmM9 MSBhbmQgLW4gZnR5cGVcbiIpKTsKPiAgCQkJCQlicmVhazsKPiAgCQkJCWNhc2UgUl9OQU1FOgo+ ICAJCQkJY2FzZSBSX0RFVjoKPiAtCQkJCQlpZiAoIXZhbHVlIHx8ICp2YWx1ZSA9PSAnXDAnKQo+ IC0JCQkJCQlyZXF2YWwoJ3InLCBzdWJvcHRzLCBSX05BTUUpOwo+IC0JCQkJCWlmICh4aS5ydG5h bWUpCj4gLQkJCQkJCXJlc3BlYygncicsIHN1Ym9wdHMsIFJfTkFNRSk7Cj4gLQkJCQkJeGkucnRu YW1lID0gdmFsdWU7Cj4gKwkJCQkJeGkucnRuYW1lID0gZ2V0c3RyKHZhbHVlLCAmcm9wdHMsCj4g KwkJCQkJCQkgICBSX05BTUUpOwo+ICAJCQkJCWJyZWFrOwo+ICAJCQkJY2FzZSBSX1NJWkU6Cj4g LQkJCQkJaWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1wwJykKPiAtCQkJCQkJcmVxdmFsKCdyJywg c3Vib3B0cywgUl9TSVpFKTsKPiAtCQkJCQlpZiAocnRzaXplKQo+IC0JCQkJCQlyZXNwZWMoJ3In LCBzdWJvcHRzLCBSX1NJWkUpOwo+IC0JCQkJCXJ0c2l6ZSA9IHZhbHVlOwo+ICsJCQkJCXJ0c2l6 ZSA9IGdldHN0cih2YWx1ZSwgJnJvcHRzLCBSX1NJWkUpOwo+ICAJCQkJCWJyZWFrOwo+ICAJCQkJ Y2FzZSBSX05PQUxJR046Cj4gIAkJCQkJbm9yc2ZsYWcgPSAxOwo+IC0tIAo+IDIuMS4wCj4gCj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiB4ZnMgbWFp bGluZyBsaXN0Cj4geGZzQG9zcy5zZ2kuY29tCj4gaHR0cDovL29zcy5zZ2kuY29tL21haWxtYW4v bGlzdGluZm8veGZzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwp4ZnMgbWFpbGluZyBsaXN0Cnhmc0Bvc3Muc2dpLmNvbQpodHRwOi8vb3NzLnNnaS5jb20v bWFpbG1hbi9saXN0aW5mby94ZnMK