From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH i-g-t] tests/kms_frontbuffer_tracking: convert macros to functions Date: Fri, 01 Sep 2017 16:44:38 -0300 Message-ID: <1504295078.28453.93.camel@intel.com> References: <1502702753-6147-1-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8A7DE6E8C5 for ; Fri, 1 Sep 2017 19:44:59 +0000 (UTC) In-Reply-To: <1502702753-6147-1-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter , Intel Graphics Development Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org RW0gU2VnLCAyMDE3LTA4LTE0IMOgcyAxMToyNSArMDIwMCwgRGFuaWVsIFZldHRlciBlc2NyZXZl dToKPiBNYWNyb3MgdGhhdCBzaG91bGQgYmUgQyBmdW5jdGlvbnMgYnV0IGFyZW4ndCBhcmUgcmVh bGx5IGhhcmQgdG8KPiByZWFkIGFuZCBjb25mdXNpbmcuIENvbnZlcnQgdGhlbSBvdmVyLgo+IAo+ IHYyOiBDbGVhbiB1cCBjb21taXQgbWVzc2FnZSBhbmQga2VlcCBwcmludGluZyB0aGUgbGluZSBu dW1iZXJzCj4gKFBhdWxvKS4KPiAKPiB2MzogQWN0dWFsbHkgZ2l0IGFkZCAoc2lsbHkgbWUpLgo+ IAo+IENjOiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KClRoYW5rcyBm b3IgZG9pbmcgdGhhdC4gV29ya3MgZm9yIG1lIHRoaXMgd2F5OgpSZXZpZXdlZC1ieTogUGF1bG8g WmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CgpCdXQgSSdtIHN0aWxsIHdhaXRpbmcg Zm9yIHRoZSBwYXRjaCB0aGF0IHJlbW92ZXMgdGhvc2UgYm9ndXMgbGluZQpudW1iZXJzIGluIGV2 ZXJ5IGVycm9yIG1lc3NhZ2Ugd2UgcHJpbnQgOikuCgo+IC0tLQo+IMKgdGVzdHMva21zX2Zyb250 YnVmZmVyX3RyYWNraW5nLmMgfCAxNzEgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiAt LS0tLS0tLS0tCj4gwqAxIGZpbGUgY2hhbmdlZCwgODkgaW5zZXJ0aW9ucygrKSwgODIgZGVsZXRp b25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5j Cj4gYi90ZXN0cy9rbXNfZnJvbnRidWZmZXJfdHJhY2tpbmcuYwo+IGluZGV4IGUwMzUyNGYxYzQ1 Yi4uYTA2OGM4YWZiNmQ4IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFj a2luZy5jCj4gKysrIGIvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiBAQCAtMTY3 Nyw4OCArMTY3Nyw5NSBAQCBzdGF0aWMgaW50IGFkanVzdF9hc3NlcnRpb25fZmxhZ3MoY29uc3QK PiBzdHJ1Y3QgdGVzdF9tb2RlICp0LCBpbnQgZmxhZ3MpCj4gwqAJcmV0dXJuIGZsYWdzOwo+IMKg fQo+IMKgCj4gLSNkZWZpbmUgZG9fY3JjX2Fzc2VydGlvbnMoZmxhZ3MsIG1hbmRhdG9yeV9zaW5r X2NyYykgZG8gewkJCj4gXAo+IC0JaW50IGZsYWdzX18gPSAoZmxhZ3MpOwkJCQkJCj4gCVwKPiAt CXN0cnVjdCBib3RoX2NyY3MgY3JjXzsJCQkJCQo+IAlcCj4gLQkJCQkJCQkJCQo+IFwKPiAtCWlm ICghb3B0LmNoZWNrX2NyYyB8fCAoZmxhZ3NfXyAmIERPTlRfQVNTRVJUX0NSQykpCQkKPiBcCj4g LQkJYnJlYWs7CQkJCQkJCj4gCVwKPiAtCQkJCQkJCQkJCj4gXAo+IC0JY29sbGVjdF9jcmNzKCZj cmNfLCBtYW5kYXRvcnlfc2lua19jcmMpOwkJCQo+IFwKPiAtCXByaW50X2NyYygiQ2FsY3VsYXRl ZCBDUkM6IiwgJmNyY18pOwkJCQkKPiBcCj4gLQkJCQkJCQkJCQo+IFwKPiAtCWlndF9hc3NlcnQo d2FudGVkX2NyYyk7CQkJCQkKPiAJXAo+IC0JaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY18ucGlw ZSwgJndhbnRlZF9jcmMtPnBpcGUpOwkJCj4gXAo+IC0JaWYgKG1hbmRhdG9yeV9zaW5rX2NyYykJ CQkJCQo+IAlcCj4gLQkJYXNzZXJ0X3NpbmtfY3JjX2VxdWFsKCZjcmNfLnNpbmssICZ3YW50ZWRf Y3JjLQo+ID5zaW5rKTsJXAo+IC0JZWxzZSBpZiAoc2lua19jcmMucmVsaWFibGUgJiYJCQkJCj4g CVwKPiAtCQnCoCFzaW5rX2NyY19lcXVhbCgmY3JjXy5zaW5rLCAmd2FudGVkX2NyYy0+c2luaykp CQo+IFwKPiAtCQlpZ3RfaW5mbygiU2luayBDUkMgZGlmZmVyLCBidXQgbm90IHJlcXVpcmVkXG4i KTvCoAkKPiBcCj4gLX0gd2hpbGUgKDApCj4gLQo+IC0jZGVmaW5lIGRvX3N0YXR1c19hc3NlcnRp b25zKGZsYWdzXykgZG8gewkJCQkKPiBcCj4gLQlpZiAoIW9wdC5jaGVja19zdGF0dXMpIHsJCQkJ CQo+IFwKPiAtCQkvKiBNYWtlIHN1cmUgd2Ugc2V0dGxlIGJlZm9yZSBjb250aW51aW5nLiAqLwkJ Cj4gXAo+IC0JCXNsZWVwKDEpOwkJCQkJCQo+IFwKPiAtCQlicmVhazsJCQkJCQkKPiAJXAo+IC0J fQkJCQkJCQkJCj4gXAo+IC0JCQkJCQkJCQkKPiBcCj4gLQlpZiAoZmxhZ3NfICYgQVNTRVJUX0ZC Q19FTkFCTEVEKSB7CQkJCQo+IFwKPiAtCQlpZ3RfcmVxdWlyZSghZmJjX25vdF9lbm91Z2hfc3Rv bGVuKCkpOwkJCj4gCVwKPiAtCQlpZ3RfcmVxdWlyZSghZmJjX3N0cmlkZV9ub3Rfc3VwcG9ydGVk KCkpOwkJCj4gXAo+IC0JCWlmICghZmJjX3dhaXRfdW50aWxfZW5hYmxlZCgpKSB7CQkJCj4gXAo+ IC0JCQlmYmNfcHJpbnRfc3RhdHVzKCk7CQkJCQo+IFwKPiAtCQkJaWd0X2Fzc2VydF9mKGZhbHNl LCAiRkJDIGRpc2FibGVkXG4iKTsJCj4gCVwKPiAtCQl9CQkJCQkJCQo+IFwKPiAtCQkJCQkJCQkJ Cj4gXAo+IC0JCWlmIChvcHQuZmJjX2NoZWNrX2NvbXByZXNzaW9uKQkJCQo+IAlcCj4gLQkJCWln dF9hc3NlcnQoZmJjX3dhaXRfZm9yX2NvbXByZXNzaW9uKCkpOwkKPiAJXAo+IC0JfSBlbHNlIGlm IChmbGFnc18gJiBBU1NFUlRfRkJDX0RJU0FCTEVEKSB7CQkJCj4gXAo+IC0JCWlndF9hc3NlcnQo IWZiY193YWl0X3VudGlsX2VuYWJsZWQoKSk7CQkKPiAJXAo+IC0JfQkJCQkJCQkJCj4gXAo+IC0J CQkJCQkJCQkKPiBcCj4gLQlpZiAoZmxhZ3NfICYgQVNTRVJUX1BTUl9FTkFCTEVEKSB7CQkJCQo+ IFwKPiAtCQlpZiAoIXBzcl93YWl0X3VudGlsX2VuYWJsZWQoKSkgewkJCQo+IFwKPiAtCQkJcHNy X3ByaW50X3N0YXR1cygpOwkJCQkKPiBcCj4gLQkJCWlndF9hc3NlcnRfZihmYWxzZSwgIlBTUiBk aXNhYmxlZFxuIik7CQo+IAlcCj4gLQkJfQkJCQkJCQkKPiBcCj4gLQl9IGVsc2UgaWYgKGZsYWdz XyAmIEFTU0VSVF9QU1JfRElTQUJMRUQpIHsJCQkKPiBcCj4gLQkJaWd0X2Fzc2VydCghcHNyX3dh aXRfdW50aWxfZW5hYmxlZCgpKTsJCQo+IAlcCj4gLQl9CQkJCQkJCQkKPiBcCj4gLX0gd2hpbGUg KDApCj4gLQo+IC0jZGVmaW5lIGRvX2Fzc2VydGlvbnMoZmxhZ3MpIGRvIHsJCQkJCQo+IFwKPiAt CWludCBmbGFnc18gPSBhZGp1c3RfYXNzZXJ0aW9uX2ZsYWdzKHQsIChmbGFncykpOwkJCj4gXAo+ IC0JYm9vbCBtYW5kYXRvcnlfc2lua19jcmMgPSB0LT5mZWF0dXJlICYgRkVBVFVSRV9QU1I7CQkK PiBcCj4gLQkJCQkJCQkJCQo+IFwKPiAtCXdhaXRfdXNlcigyLCAiUGF1c2VkIGJlZm9yZSBhc3Nl cnRpb25zLiIpOwkJCQo+IFwKPiAtCQkJCQkJCQkJCj4gXAo+IC0JLyogQ2hlY2sgdGhlIENSQyB0 byBtYWtlIHN1cmUgdGhlIGRyYXdpbmcgb3BlcmF0aW9ucyB3b3JrCQo+IFwKPiAtCcKgKiBpbW1l ZGlhdGVseSwgaW5kZXBlbmRlbnRseSBvZiB0aGUgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZC4KPiAq LwlcCj4gLQlkb19jcmNfYXNzZXJ0aW9ucyhmbGFnc18sIG1hbmRhdG9yeV9zaW5rX2NyYyk7CQkK PiAJXAo+IC0JCQkJCQkJCQkKPiBcCj4gLQkvKiBOb3cgd2UgY2FuIGZsdXNoIHRoaW5ncyB0byBt YWtlIHRoZSB0ZXN0IGZhc3Rlci4gKi8JCj4gCVwKPiAtCWRvX2ZsdXNoKHQpOwkJCQkJCQkKPiBc Cj4gLQkJCQkJCQkJCQo+IFwKPiAtCWRvX3N0YXR1c19hc3NlcnRpb25zKGZsYWdzXyk7CQkJCQo+ IAlcCj4gLQkJCQkJCQkJCQo+IFwKPiAtCS8qIENoZWNrIENSQyBhZ2FpbiB0byBtYWtlIHN1cmUg dGhlIGNvbXByZXNzZWQgc2NyZWVuIGlzIG9rLAo+IAlcCj4gLQnCoCogZXhjZXB0IGlmIHdlJ3Jl IG5vdCBkcmF3aW5nIG9uIHRoZSBwcmltYXJ5IHNjcmVlbi4gT24KPiB0aGlzCVwKPiAtCcKgKiBj YXNlLCB0aGUgZmlyc3QgY2hlY2sgc2hvdWxkIGJlIGVub3VnaCBhbmQgYSBuZXcgQ1JDCj4gY2hl Y2sJXAo+IC0JwqAqIHdvdWxkIG9ubHkgZGVsYXkgdGhlIHRlc3Qgc3VpdGUgd2hpbGUgYWRkaW5n IG5vIHZhbHVlIHRvCj4gdGhlCVwKPiAtCcKgKiB0ZXN0IHN1aXRlLiAqLwkJCQkJCQo+IFwKPiAt CWlmICh0LT5zY3JlZW4gPT0gU0NSRUVOX1BSSU0pCQkJCQo+IAlcCj4gLQkJZG9fY3JjX2Fzc2Vy dGlvbnMoZmxhZ3NfLCBtYW5kYXRvcnlfc2lua19jcmMpOwkKPiAJXAo+IC0JCQkJCQkJCQkKPiBc Cj4gLQlpZiAoZmJjLnN1cHBvcnRzX2xhc3RfYWN0aW9uICYmIG9wdC5mYmNfY2hlY2tfbGFzdF9h Y3Rpb24pIHsKPiAJXAo+IC0JCWlmIChmbGFnc18gJiBBU1NFUlRfTEFTVF9BQ1RJT05fQ0hBTkdF RCkJCQo+IFwKPiAtCQkJaWd0X2Fzc2VydChmYmNfbGFzdF9hY3Rpb25fY2hhbmdlZCgpKTsJCj4g CVwKPiAtCQllbHNlIGlmIChmbGFnc18gJiBBU1NFUlRfTk9fQUNUSU9OX0NIQU5HRSkJCQo+IFwK PiAtCQkJaWd0X2Fzc2VydCghZmJjX2xhc3RfYWN0aW9uX2NoYW5nZWQoKSk7CQo+IAlcCj4gLQl9 CQkJCQkJCQkKPiBcCj4gLQkJCQkJCQkJCQo+IFwKPiAtCXdhaXRfdXNlcigxLCAiUGF1c2VkIGFm dGVyIGFzc2VydGlvbnMuIik7CQkJCj4gXAo+IC19IHdoaWxlICgwKQo+ICtzdGF0aWMgdm9pZCBk b19jcmNfYXNzZXJ0aW9ucyhpbnQgZmxhZ3MsIGJvb2wgbWFuZGF0b3J5X3NpbmtfY3JjKQo+ICt7 Cj4gKwlzdHJ1Y3QgYm90aF9jcmNzIGNyYzsKPiArCj4gKwlpZiAoIW9wdC5jaGVja19jcmMgfHwg KGZsYWdzICYgRE9OVF9BU1NFUlRfQ1JDKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJY29sbGVjdF9j cmNzKCZjcmMsIG1hbmRhdG9yeV9zaW5rX2NyYyk7Cj4gKwlwcmludF9jcmMoIkNhbGN1bGF0ZWQg Q1JDOiIsICZjcmMpOwo+ICsKPiArCWlndF9hc3NlcnQod2FudGVkX2NyYyk7Cj4gKwlpZ3RfYXNz ZXJ0X2NyY19lcXVhbCgmY3JjLnBpcGUsICZ3YW50ZWRfY3JjLT5waXBlKTsKPiArCWlmIChtYW5k YXRvcnlfc2lua19jcmMpCj4gKwkJYXNzZXJ0X3NpbmtfY3JjX2VxdWFsKCZjcmMuc2luaywgJndh bnRlZF9jcmMtPnNpbmspOwo+ICsJZWxzZSBpZiAoc2lua19jcmMucmVsaWFibGUgJiYKPiArCQnC oCFzaW5rX2NyY19lcXVhbCgmY3JjLnNpbmssICZ3YW50ZWRfY3JjLT5zaW5rKSkKPiArCQlpZ3Rf aW5mbygiU2luayBDUkMgZGlmZmVyLCBidXQgbm90IHJlcXVpcmVkXG4iKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZG9fc3RhdHVzX2Fzc2VydGlvbnMoaW50IGZsYWdzKQo+ICt7Cj4gKwlpZiAo IW9wdC5jaGVja19zdGF0dXMpIHsKPiArCQkvKiBNYWtlIHN1cmUgd2Ugc2V0dGxlIGJlZm9yZSBj b250aW51aW5nLiAqLwo+ICsJCXNsZWVwKDEpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlp ZiAoZmxhZ3MgJiBBU1NFUlRfRkJDX0VOQUJMRUQpIHsKPiArCQlpZ3RfcmVxdWlyZSghZmJjX25v dF9lbm91Z2hfc3RvbGVuKCkpOwo+ICsJCWlndF9yZXF1aXJlKCFmYmNfc3RyaWRlX25vdF9zdXBw b3J0ZWQoKSk7Cj4gKwkJaWYgKCFmYmNfd2FpdF91bnRpbF9lbmFibGVkKCkpIHsKPiArCQkJZmJj X3ByaW50X3N0YXR1cygpOwo+ICsJCQlpZ3RfYXNzZXJ0X2YoZmFsc2UsICJGQkMgZGlzYWJsZWRc biIpOwo+ICsJCX0KPiArCj4gKwkJaWYgKG9wdC5mYmNfY2hlY2tfY29tcHJlc3Npb24pCj4gKwkJ CWlndF9hc3NlcnQoZmJjX3dhaXRfZm9yX2NvbXByZXNzaW9uKCkpOwo+ICsJfSBlbHNlIGlmIChm bGFncyAmIEFTU0VSVF9GQkNfRElTQUJMRUQpIHsKPiArCQlpZ3RfYXNzZXJ0KCFmYmNfd2FpdF91 bnRpbF9lbmFibGVkKCkpOwo+ICsJfQo+ICsKPiArCWlmIChmbGFncyAmIEFTU0VSVF9QU1JfRU5B QkxFRCkgewo+ICsJCWlmICghcHNyX3dhaXRfdW50aWxfZW5hYmxlZCgpKSB7Cj4gKwkJCXBzcl9w cmludF9zdGF0dXMoKTsKPiArCQkJaWd0X2Fzc2VydF9mKGZhbHNlLCAiUFNSIGRpc2FibGVkXG4i KTsKPiArCQl9Cj4gKwl9IGVsc2UgaWYgKGZsYWdzICYgQVNTRVJUX1BTUl9ESVNBQkxFRCkgewo+ ICsJCWlndF9hc3NlcnQoIXBzcl93YWl0X3VudGlsX2VuYWJsZWQoKSk7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIF9fZG9fYXNzZXJ0aW9ucyhjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0 LCBpbnQgZmxhZ3MsCj4gKwkJCcKgwqDCoMKgaW50IGxpbmUpCj4gK3sKPiArCWZsYWdzID0gYWRq dXN0X2Fzc2VydGlvbl9mbGFncyh0LCBmbGFncyk7Cj4gKwlib29sIG1hbmRhdG9yeV9zaW5rX2Ny YyA9IHQtPmZlYXR1cmUgJiBGRUFUVVJFX1BTUjsKPiArCj4gKwlpZ3RfZGVidWcoImNoZWNraW5n IGFzc2VydHMgaW4gbGluZSAlaVxuIiwgbGluZSk7Cj4gKwo+ICsJd2FpdF91c2VyKDIsICJQYXVz ZWQgYmVmb3JlIGFzc2VydGlvbnMuIik7Cj4gKwo+ICsJLyogQ2hlY2sgdGhlIENSQyB0byBtYWtl IHN1cmUgdGhlIGRyYXdpbmcgb3BlcmF0aW9ucyB3b3JrCj4gKwnCoCogaW1tZWRpYXRlbHksIGlu ZGVwZW5kZW50bHkgb2YgdGhlIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQuCj4gKi8KPiArCWRvX2Ny Y19hc3NlcnRpb25zKGZsYWdzLCBtYW5kYXRvcnlfc2lua19jcmMpOwo+ICsKPiArCS8qIE5vdyB3 ZSBjYW4gZmx1c2ggdGhpbmdzIHRvIG1ha2UgdGhlIHRlc3QgZmFzdGVyLiAqLwo+ICsJZG9fZmx1 c2godCk7Cj4gKwo+ICsJZG9fc3RhdHVzX2Fzc2VydGlvbnMoZmxhZ3MpOwo+ICsKPiArCS8qIENo ZWNrIENSQyBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlIGNvbXByZXNzZWQgc2NyZWVuIGlzIG9rLAo+ ICsJwqAqIGV4Y2VwdCBpZiB3ZSdyZSBub3QgZHJhd2luZyBvbiB0aGUgcHJpbWFyeSBzY3JlZW4u IE9uCj4gdGhpcwo+ICsJwqAqIGNhc2UsIHRoZSBmaXJzdCBjaGVjayBzaG91bGQgYmUgZW5vdWdo IGFuZCBhIG5ldyBDUkMKPiBjaGVjawo+ICsJwqAqIHdvdWxkIG9ubHkgZGVsYXkgdGhlIHRlc3Qg c3VpdGUgd2hpbGUgYWRkaW5nIG5vIHZhbHVlIHRvCj4gdGhlCj4gKwnCoCogdGVzdCBzdWl0ZS4g Ki8KPiArCWlmICh0LT5zY3JlZW4gPT0gU0NSRUVOX1BSSU0pCj4gKwkJZG9fY3JjX2Fzc2VydGlv bnMoZmxhZ3MsIG1hbmRhdG9yeV9zaW5rX2NyYyk7Cj4gKwo+ICsJaWYgKGZiYy5zdXBwb3J0c19s YXN0X2FjdGlvbiAmJiBvcHQuZmJjX2NoZWNrX2xhc3RfYWN0aW9uKSB7Cj4gKwkJaWYgKGZsYWdz ICYgQVNTRVJUX0xBU1RfQUNUSU9OX0NIQU5HRUQpCj4gKwkJCWlndF9hc3NlcnQoZmJjX2xhc3Rf YWN0aW9uX2NoYW5nZWQoKSk7Cj4gKwkJZWxzZSBpZiAoZmxhZ3MgJiBBU1NFUlRfTk9fQUNUSU9O X0NIQU5HRSkKPiArCQkJaWd0X2Fzc2VydCghZmJjX2xhc3RfYWN0aW9uX2NoYW5nZWQoKSk7Cj4g Kwl9Cj4gKwo+ICsJd2FpdF91c2VyKDEsICJQYXVzZWQgYWZ0ZXIgYXNzZXJ0aW9ucy4iKTsKPiAr fQo+ICsKPiArI2RlZmluZSBkb19hc3NlcnRpb25zKF9fZmxhZ3MpIF9fZG9fYXNzZXJ0aW9ucyh0 LCAoX19mbGFncyksCj4gX19MSU5FX18pCj4gwqAKPiDCoHN0YXRpYyB2b2lkIGVuYWJsZV9wcmlt X3NjcmVlbl9hbmRfd2FpdChjb25zdCBzdHJ1Y3QgdGVzdF9tb2RlICp0KQo+IMKgewpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK