From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 01/15] drm: Add |struct drm_gem_ttm_object| and helpers Date: Mon, 8 Apr 2019 11:21:30 +0200 Message-ID: <20190408092144.4548-2-tzimmermann@suse.de> References: <20190408092144.4548-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5AD86897D7 for ; Mon, 8 Apr 2019 09:21:52 +0000 (UTC) In-Reply-To: <20190408092144.4548-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: daniel@ffwll.ch, airlied@linux.ie, kraxel@redhat.com, christian.koenig@amd.com, ray.huang@amd.com, Jerry.Zhang@amd.com, hdegoede@redhat.com, z.liuxinliang@hisilicon.com, zourongrong@gmail.com, kong.kongxinwei@hisilicon.com, puck.chen@hisilicon.com Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org List-Id: dri-devel@lists.freedesktop.org VGhlIHR5cGUgfHN0cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3R8IGltcGxlbWVudHMgYSBUVE0gYnVm ZmVyIG9iamVjdApmb3Igc2ltcGxlIGZyYW1lYnVmZmVyIGRldmljZXMgd2l0aCBkZWRpY2F0ZWQg dmlkZW8gbWVtb3J5LiBUaGUgQk8KaXMgZWl0aGVyIGxvY2F0ZWQgaW4gVlJBTSBvciBzeXN0ZW0g bWVtb3J5LiBUaGUgaW1wbGVtZW50YXRpb24gaGFzCmJlZW4gY3JlYXRlZCBmcm9tIHRoZSByZXNw ZWN0aXZlIGNvZGUgaW4gYXN0LCBib2NocyBhbmQgbWdhZzIwMC4gVGhlc2UKZHJpdmVycyBjb3B5 IHRoZWlyIGltcGxlbWVudGF0aW9uIGZyb20gZWFjaCBvdGhlcjsgZXhjZXB0IGZvciB0aGUKbmFt ZXMgb2Ygc2V2ZXJhbCBkYXRhIHR5cGVzLgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1h bm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Ci0tLQogRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJz dCAgICAgICAgICAgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAg ICAgICB8ICAxMyArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAg IDQgKwogZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fdHRtX2hlbHBlci5jICAgIHwgMzY3ICsrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2RybV90dG1faGVscGVyX2NvbW1v bi5jIHwgICA2ICsKIGluY2x1ZGUvZHJtL2RybV9nZW1fdHRtX2hlbHBlci5oICAgICAgICB8ICA5 MSArKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNDkzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV90dG1faGVscGVyLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX3R0bV9oZWxwZXJfY29tbW9uLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fZ2VtX3R0bV9oZWxwZXIuaAoKZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0u cnN0CmluZGV4IDU0YTY5NmQ5NjFhNy4uNTk2ZTVmMTVmNDU5IDEwMDY0NAotLS0gYS9Eb2N1bWVu dGF0aW9uL2dwdS9kcm0tbW0ucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QK QEAgLTM4MCw2ICszODAsMTggQEAgR0VNIENNQSBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQog Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuYwogICAg OmV4cG9ydDoKIAorR0VNIFRUTSBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUv ZHJtL2RybV9nZW1fdHRtX2hlbHBlci5jCisgICA6ZG9jOiBvdmVydmlldworCisuLiBrZXJuZWwt ZG9jOjogaW5jbHVkZS9kcm0vZHJtX2dlbV90dG1faGVscGVyLmgKKyAgIDppbnRlcm5hbDoKKwor Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3R0bV9oZWxwZXIuYworICAg OmV4cG9ydDoKKwogVk1BIE9mZnNldCBNYW5hZ2VyCiA9PT09PT09PT09PT09PT09PT0KIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZwppbmRleCBiY2JjNDIzNDg5M2EuLjY4NGJkMzI3ZWIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTE2MCw2ICsx NjAsMTIgQEAgY29uZmlnIERSTV9UVE0KIAkgIEdQVSBtZW1vcnkgdHlwZXMuIFdpbGwgYmUgZW5h YmxlZCBhdXRvbWF0aWNhbGx5IGlmIGEgZGV2aWNlIGRyaXZlcgogCSAgdXNlcyBpdC4KIAorY29u ZmlnIERSTV9UVE1fSEVMUEVSCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIERSTSAmJiBEUk1fVFRN CisJaGVscAorCSAgSGVscGVycyBmb3IgVFRNLWJhc2VkIG1lbW9yeSBtYW5hZ2VtZW50CisKIGNv bmZpZyBEUk1fR0VNX0NNQV9IRUxQRVIKIAlib29sCiAJZGVwZW5kcyBvbiBEUk0KQEAgLTE3OSw2 ICsxODUsMTMgQEAgY29uZmlnIERSTV9HRU1fU0hNRU1fSEVMUEVSCiAJaGVscAogCSAgQ2hvb3Nl IHRoaXMgaWYgeW91IG5lZWQgdGhlIEdFTSBzaG1lbSBoZWxwZXIgZnVuY3Rpb25zCiAKK2NvbmZp ZyBEUk1fR0VNX1RUTV9IRUxQRVIKKwlib29sCisJZGVwZW5kcyBvbiBEUk0KKwlzZWxlY3QgRFJN X1RUTV9IRUxQRVIKKwloZWxwCisJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUgR0VNIFRU TSBoZWxwZXIgZnVuY3Rpb25zCisKIGNvbmZpZyBEUk1fVk0KIAlib29sCiAJZGVwZW5kcyBvbiBE Uk0gJiYgTU1VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggZDk3YzBhM2E4Y2ZjLi5hY2QwZjNlNGYwNzkgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUKQEAgLTMzLDYgKzMzLDEwIEBAIGRybS0kKENPTkZJR19BR1ApICs9IGRybV9hZ3BzdXBw b3J0Lm8KIGRybS0kKENPTkZJR19ERUJVR19GUykgKz0gZHJtX2RlYnVnZnMubyBkcm1fZGVidWdm c19jcmMubwogZHJtLSQoQ09ORklHX0RSTV9MT0FEX0VESURfRklSTVdBUkUpICs9IGRybV9lZGlk X2xvYWQubwogCitkcm1fdHRtX2hlbHBlci15IDo9IGRybV90dG1faGVscGVyX2NvbW1vbi5vCitk cm1fdHRtX2hlbHBlci0kKENPTkZJR19EUk1fR0VNX1RUTV9IRUxQRVIpICs9IGRybV9nZW1fdHRt X2hlbHBlci5vCitvYmotJChDT05GSUdfRFJNX1RUTV9IRUxQRVIpICs9IGRybV90dG1faGVscGVy Lm8KKwogZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVy Lm8gZHJtX2RzYy5vIGRybV9wcm9iZV9oZWxwZXIubyBcCiAJCWRybV9wbGFuZV9oZWxwZXIubyBk cm1fZHBfbXN0X3RvcG9sb2d5Lm8gZHJtX2F0b21pY19oZWxwZXIubyBcCiAJCWRybV9rbXNfaGVs cGVyX2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVyLm8gXApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9nZW1fdHRtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9n ZW1fdHRtX2hlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u ZDUyZDNjNDM5OTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f dHRtX2hlbHBlci5jCkBAIC0wLDAgKzEsMzY3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vci1sYXRlciAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdHRtX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS90dG0vdHRtX3BhZ2VfYWxsb2MuaD4KKworLyoqCisgKiBET0M6 IG92ZXJ2aWV3CisgKgorICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGEgR0VNIG9iamVjdCB0aGF0 IGlzIGJhY2tlZCBieSBUVE0tbWFuYWdlZAorICogbWVtb3J5LiBJdCBjYW4gYmUgdXNlZCBmb3Ig c2ltcGxlIGZyYW1lYnVmZmVyIGRldmljZXMgd2l0aCBkZWRpY2F0ZWQKKyAqIG1lbW9yeS4KKyAq LworCisvKgorICogQnVmZmVyLW9iamVjdHMgaGVscGVycworICovCisKK3N0YXRpYyB2b2lkIGRy bV9nZW1fdHRtX2NsZWFudXAoc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2JvKQoreworCS8q IFdlIGdvdCBoZXJlIHZpYSB0dG1fYm9fcHV0KCksIHdoaWNoIG1lYW5zIHRoYXQgdGhlCisJICog VFRNIGJ1ZmZlciBvYmplY3QgaW4gJ2JvJyBoYXMgYWxyZWFkeSBiZWVuIGNsZWFuZWQKKwkgKiB1 cDsgb25seSByZWxlYXNlIHRoZSBHRU0gb2JqZWN0LiAqLworCWRybV9nZW1fb2JqZWN0X3JlbGVh c2UoJmdiby0+Z2VtKTsKK30KKworc3RhdGljIHZvaWQgZHJtX2dlbV90dG1fZGVzdHJveShzdHJ1 Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm8pCit7CisJZHJtX2dlbV90dG1fY2xlYW51cChnYm8p OworCWtmcmVlKGdibyk7Cit9CisKK3N0YXRpYyB2b2lkIHR0bV9idWZmZXJfb2JqZWN0X2Rlc3Ry b3koc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV90dG1f b2JqZWN0ICpnYm8gPSBkcm1fZ2VtX3R0bV9vZl9ibyhibyk7CisJZHJtX2dlbV90dG1fZGVzdHJv eShnYm8pOworfQorCitzdGF0aWMgdm9pZCBkcm1fZ2VtX3R0bV9wbGFjZW1lbnQoc3RydWN0IGRy bV9nZW1fdHRtX29iamVjdCAqZ2JvLCBpbnQgcGxfZmxhZykKK3sKKwl1bnNpZ25lZCBpbnQgaTsK Kwl1bnNpZ25lZCBpbnQgYyA9IDA7CisKKwlnYm8tPnBsYWNlbWVudC5wbGFjZW1lbnQgPSBnYm8t PnBsYWNlbWVudHM7CisJZ2JvLT5wbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSBnYm8tPnBsYWNl bWVudHM7CisKKwlpZiAocGxfZmxhZyAmIFRUTV9QTF9GTEFHX1ZSQU0pCisJCWdiby0+cGxhY2Vt ZW50c1tjKytdLmZsYWdzID0gVFRNX1BMX0ZMQUdfV0MgfAorCQkJCQkgICAgIFRUTV9QTF9GTEFH X1VOQ0FDSEVEIHwKKwkJCQkJICAgICBUVE1fUExfRkxBR19WUkFNOworCisJaWYgKHBsX2ZsYWcg JiBUVE1fUExfRkxBR19TWVNURU0pCisJCWdiby0+cGxhY2VtZW50c1tjKytdLmZsYWdzID0gVFRN X1BMX01BU0tfQ0FDSElORyB8CisJCQkJCSAgICAgVFRNX1BMX0ZMQUdfU1lTVEVNOworCisJaWYg KCFjKQorCQlnYm8tPnBsYWNlbWVudHNbYysrXS5mbGFncyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcg fAorCQkJCQkgICAgIFRUTV9QTF9GTEFHX1NZU1RFTTsKKworCWdiby0+cGxhY2VtZW50Lm51bV9w bGFjZW1lbnQgPSBjOworCWdiby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCA9IGM7CisK Kwlmb3IgKGkgPSAwOyBpIDwgYzsgKytpKSB7CisJCWdiby0+cGxhY2VtZW50c1tpXS5mcGZuID0g MDsKKwkJZ2JvLT5wbGFjZW1lbnRzW2ldLmxwZm4gPSAwOworCX0KK30KKworc3RhdGljIGludCBk cm1fZ2VtX3R0bV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IHR0 bV9ib19kZXZpY2UgKmJkZXYsCisJCQkgICAgc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2Jv LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdWludDMyX3QgcGdfYWxpZ24sCisJCQkgICAg Ym9vbCBpbnRlcnJ1cHRpYmxlKQoreworCWludCByZXQ7CisJc2l6ZV90IGFjY19zaXplOworCisJ cmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZnYm8tPmdlbSwgc2l6ZSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWFjY19zaXplID0gdHRtX2JvX2RtYV9hY2Nfc2l6ZShiZGV2 LCBzaXplLCBzaXplb2YoKmdibykpOworCisJZ2JvLT5iby5iZGV2ID0gYmRldjsKKwlkcm1fZ2Vt X3R0bV9wbGFjZW1lbnQoZ2JvLCBUVE1fUExfRkxBR19WUkFNIHwgVFRNX1BMX0ZMQUdfU1lTVEVN KTsKKworCXJldCA9IHR0bV9ib19pbml0KGJkZXYsICZnYm8tPmJvLCBzaXplLCB0dG1fYm9fdHlw ZV9kZXZpY2UsCisJCQkgICZnYm8tPnBsYWNlbWVudCwgcGdfYWxpZ24sIGludGVycnVwdGlibGUs IGFjY19zaXplLAorCQkJICBOVUxMLCBOVUxMLCB0dG1fYnVmZmVyX29iamVjdF9kZXN0cm95KTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9kcm1fZ2VtX29iamVjdF9yZWxlYXNlOworCisJcmV0dXJu IDA7CisKK2Vycl9kcm1fZ2VtX29iamVjdF9yZWxlYXNlOgorCWRybV9nZW1fb2JqZWN0X3JlbGVh c2UoJmdiby0+Z2VtKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRybV9nZW1fdHRtX2Ny ZWF0ZSgpIC0gQ3JlYXRlcyBhIFRUTS1iYWNrZWQgR0VNIG9iamVjdAorICogQGRldjoJCXRoZSBE Uk0gZGV2aWNlCisgKiBAYmRldjoJCXRoZSBUVE0gQk8gZGV2aWNlIGJhY2tpbmcgdGhlIG9iamVj dAorICogQHNpemU6CQl0aGUgYnVmZmVyIHNpemUgaW4gYnl0ZXMKKyAqIEBwZ19hbGlnbjoJCXRo ZSBidWZmZXIncyBhbGlnbm1lbnQgaW4gbXVsdGlwbGVzIG9mIHRoZSBwYWdlIHNpemUKKyAqIEBp bnRlcnJ1cHRpYmxlOglzbGVlcCBpbnRlcnJ1cHRpYmxlIGlmIHdhaXRpbmcgZm9yIG1lbW9yeQor ICoKKyAqIFJldHVybnM6CisgKiBBIG5ldyBpbnN0YW5jZSBvZiBzdHJ1Y3RfZ2VtX3R0bV9vYmpl Y3Qgb24gc3VjY2Vzcywgb3IKKyAqIGFuIEVSUl9QVFItZW5jb2RlZCBlcnJvciBjb2RlIG90aGVy d2lzZS4KKyAqLworc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCogZHJtX2dlbV90dG1fY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCB0dG1fYm9fZGV2aWNl ICpiZGV2LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSAgICAgIHVpbnQz Ml90IHBnX2FsaWduLAorCQkJCQkgICAgICBib29sIGludGVycnVwdGlibGUpCit7CisJc3RydWN0 IGRybV9nZW1fdHRtX29iamVjdCAqZ2JvOworCWludCByZXQ7CisKKwlnYm8gPSBremFsbG9jKHNp emVvZigqZ2JvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnYm8pCisJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOworCisJcmV0ID0gZHJtX2dlbV90dG1faW5pdChkZXYsIGJkZXYsIGdibywgc2l6ZSwg cGdfYWxpZ24sIGludGVycnVwdGlibGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9rZnJl ZTsKKworCXJldHVybiBnYm87CisKK2Vycl9rZnJlZToKKwlrZnJlZShnYm8pOworCXJldHVybiBF UlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdHRtX2NyZWF0ZSk7CisKKy8q KgorICogZHJtX2dlbV90dG1fcHV0KCkgLSBSZWxlYXNlcyBhIHJlZmVyZW5jZSB0byBhIFRUTS1i YWNrZWQgR0VNIG9iamVjdAorICogQGdibzoJdGhlIEdFTS1UVE0gb2JqZWN0CisgKgorICogU2Vl IHR0bV9ib19wdXQoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLwordm9pZCBkcm1fZ2VtX3R0 bV9wdXQoc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2JvKQoreworCXR0bV9ib19wdXQoJmdi by0+Ym8pOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3R0bV9wdXQpOworCisvKioKKyAqIGRy bV9nZW1fdHRtX3Jlc2VydmUoKSAtIFJlc2VydmVzIGEgVFRNLWJhY2tlZCBHRU0gb2JqZWN0Cisg KiBAZ2JvOgl0aGUgR0VNLVRUTSBvYmplY3QKKyAqIEBub193YWl0Oglkb24ndCB3YWl0IGZvciBi dWZmZXIgb2JqZWN0IHRvIGJlY29tZSBhdmFpbGFibGUKKyAqCisgKiBTZWUgdHRtX2JvX3Jlc2Vy dmUoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNj ZXNzLCBvcgorICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgZHJt X2dlbV90dG1fcmVzZXJ2ZShzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm8sIGJvb2wgbm9f d2FpdCkKK3sKKwlyZXR1cm4gdHRtX2JvX3Jlc2VydmUoJmdiby0+Ym8sIHRydWUsIG5vX3dhaXQs IE5VTEwpOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3R0bV9yZXNlcnZlKTsKKworLyoqCisg KiBkcm1fZ2VtX3R0bV91bnJlc2VydmUoKSAtIFJlbGVhc2UgYSByZXNlcnZhdGlvbiBhY3F1aXJl ZCBieSBkcm1fZ2VtX3R0bV9yZXNlcnZlCisgKiBAZ2JvOgl0aGUgR0VNIFRUTSBvYmplY3QKKyAq CisgKiBTZWUgdHRtX2JvX3VucmVzZXJ2ZSgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCit2 b2lkIGRybV9nZW1fdHRtX3VucmVzZXJ2ZShzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm8p Cit7CisJdHRtX2JvX3VucmVzZXJ2ZSgmZ2JvLT5ibyk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9n ZW1fdHRtX3VucmVzZXJ2ZSk7CisKKy8qKgorICogZHJtX2dlbV90dG1fbW1hcF9vZmZzZXQoKSAt IFJldHVybnMgYSBHRU0gVFRNIG9iamVjdCdzIG1tYXAgb2Zmc2V0CisgKiBAZ2JvOgl0aGUgR0VN IFRUTSBvYmplY3QKKyAqCisgKiBTZWUgZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCkgZm9yIG1v cmUgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJuczoKKyAqIFRoZSBidWZmZXIgb2JqZWN0J3Mg b2Zmc2V0IGZvciB1c2Vyc3BhY2UgbWFwcGluZ3Mgb24gc3VjY2Vzcywgb3IKKyAqIDAgaWYgbm8g b2Zmc2V0IGlzIGFsbG9jYXRlZC4KKyAqLwordTY0IGRybV9nZW1fdHRtX21tYXBfb2Zmc2V0KHN0 cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3QgKmdibykKK3sKKwlyZXR1cm4gZHJtX3ZtYV9ub2RlX29m ZnNldF9hZGRyKCZnYm8tPmJvLnZtYV9ub2RlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV90 dG1fbW1hcF9vZmZzZXQpOworCisvKioKKyAqIGRybV9nZW1fdHRtX3ZyYW1fb2Zmc2V0KCkgLSBS ZXR1cm5zIGEgR0VNLVRUTSBvYmplY3QncyBvZmZzZXQgaW4gdmlkZW8gbWVtb3J5CisgKiBAZ2Jv Ogl0aGUgR0VNIFRUTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGJ1 ZmZlciBvYmplY3QncyBvZmZzZXQgaW4gdGhlIGRldmljZSdzIHZpZGVvCisgKiBtZW1vcnkuIFRo ZSBidWZmZXIgb2JqZWN0IGhhcyB0byBiZSBwaW5uZWQgdG8gVFRfUExfVlJBTS4KKyAqCisgKiBS ZXR1cm5zOgorICogVGhlIGJ1ZmZlciBvYmplY3QncyBvZmZzZXQgaW4gdmlkZW8gbWVtb3J5IG9u IHN1Y2Nlc3MsIG9yCisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitz NjQgZHJtX2dlbV90dG1fdnJhbV9vZmZzZXQoc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2Jv KQoreworCWlmICghZ2JvLT5waW5fY291bnQpCisJCXJldHVybiAoczY0KS1FTk9ERVY7CisJcmV0 dXJuIGdiby0+Ym8ub2Zmc2V0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3R0bV92cmFtX29m ZnNldCk7CisKKy8qKgorICogZHJtX2dlbV90dG1fcGluKCkgLSBQaW5zIGEgR0VNLVRUTSBvYmpl Y3QgaW4gYSByZWdpb24KKyAqIEBnYm86CXRoZSBHRU0gVFRNIG9iamVjdAorICogQHBsX2ZsYWc6 CWEgYml0bWFzayBvZiBwb3NzaWJsZSBtZW1vcnkgcmVnaW9ucworICoKKyAqIFBpbm5pbmcgYSBi dWZmZXIgb2JqZWN0IGVuc3VyZXMgdGhhdCBpdCBpcyBub3QgZXZpY3RlZCBmcm9tCisgKiBhIG1l bW9yeSByZWdpb24uIEEgcGlubmVkIGJ1ZmZlciBvYmplY3QgaGFzIHRvIGJlIHVucGlubmVkIGJl Zm9yZQorICogaXQgY2FuIGJlIHBpbm5lZCB0byBhbm90aGVyIHJlZ2lvbi4KKyAqCisgKiBSZXR1 cm5zOgorICogMCBvbiBzdWNjZXNzLCBvcgorICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVy d2lzZS4KKyAqLworaW50IGRybV9nZW1fdHRtX3BpbihzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0 ICpnYm8sIHUzMiBwbF9mbGFnKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHR0bV9vcGVyYXRp b25fY3R4IGN0eCA9IHsgZmFsc2UsIGZhbHNlIH07CisKKwlpZiAoZ2JvLT5waW5fY291bnQpIHsK KwkJKytnYm8tPnBpbl9jb3VudDsKKwkJcmV0dXJuIDA7CisJfQorCisJZHJtX2dlbV90dG1fcGxh Y2VtZW50KGdibywgcGxfZmxhZyk7CisJZm9yIChpID0gMDsgaSA8IGdiby0+cGxhY2VtZW50Lm51 bV9wbGFjZW1lbnQ7ICsraSkKKwkJZ2JvLT5wbGFjZW1lbnRzW2ldLmZsYWdzIHw9IFRUTV9QTF9G TEFHX05PX0VWSUNUOworCisJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZnYm8tPmJvLCAmZ2JvLT5w bGFjZW1lbnQsICZjdHgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZ2JvLT5w aW5fY291bnQgPSAxOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdHRt X3Bpbik7CisKKy8qKgorICogZHJtX2dlbV90dG1fdW5waW4oKSAtIFVucGlucyBhIEdFTS1UVE0g b2JqZWN0CisgKiBAZ2JvOgl0aGUgR0VNIFRUTSBvYmplY3QKKyAqCisgKiBSZXR1cm5zOgorICog MCBvbiBzdWNjZXNzLCBvcgorICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAq LworaW50IGRybV9nZW1fdHRtX3VucGluKHN0cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3QgKmdibykK K3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNl LCBmYWxzZSB9OworCisJaWYgKCFnYm8tPnBpbl9jb3VudCkKKwkJcmV0dXJuIDA7CisKKwktLWdi by0+cGluX2NvdW50OworCWlmIChnYm8tPnBpbl9jb3VudCkKKwkJcmV0dXJuIDA7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZ2JvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA7ICsraSkKKwkJZ2JvLT5w bGFjZW1lbnRzW2ldLmZsYWdzICY9IH5UVE1fUExfRkxBR19OT19FVklDVDsKKworCXJldCA9IHR0 bV9ib192YWxpZGF0ZSgmZ2JvLT5ibywgJmdiby0+cGxhY2VtZW50LCAmY3R4KTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1f Z2VtX3R0bV91bnBpbik7CisKKy8qKgorICogZHJtX2dlbV90dG1fcHVzaF90b19zeXN0ZW0oKSAt IFwKKwlVbnBpbnMgYSBHRU0gVFRNIG9iamVjdCBhbmQgbW92ZXMgaXQgdG8gc3lzdGVtIG1lbW9y eQorICogQGdibzoJdGhlIEdFTSBUVE0gb2JqZWN0CisgKgorICogVGhpcyBvcGVyYXRpb24gb25s eSB3b3JrcyBpZiB0aGUgY2FsbGVyIGhvbGRzIHRoZSBmaW5hbCBwaW4gb24gdGhlCisgKiBidWZm ZXIgb2JqZWN0LgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG9yCisgKiBhIG5l Z2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHJtX2dlbV90dG1fcHVzaF90 b19zeXN0ZW0oc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2JvKQoreworCWludCBpLCByZXQ7 CisJc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4IGN0eCA9IHsgZmFsc2UsIGZhbHNlIH07CisKKwlp ZiAoIWdiby0+cGluX2NvdW50KQorCQlyZXR1cm4gMDsKKworCS0tZ2JvLT5waW5fY291bnQ7CisJ aWYgKGdiby0+cGluX2NvdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChnYm8tPmttYXAudmlydHVh bCkKKwkJdHRtX2JvX2t1bm1hcCgmZ2JvLT5rbWFwKTsKKworCWRybV9nZW1fdHRtX3BsYWNlbWVu dChnYm8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7CisJZm9yIChpID0gMDsgaSA8IGdiby0+cGxhY2Vt ZW50Lm51bV9wbGFjZW1lbnQgOyArK2kpCisJCWdiby0+cGxhY2VtZW50c1tpXS5mbGFncyB8PSBU VE1fUExfRkxBR19OT19FVklDVDsKKworCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmZ2JvLT5ibywg Jmdiby0+cGxhY2VtZW50LCAmY3R4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdHRtX3B1c2hfdG9fc3lzdGVtKTsKKwor LyoqCisgKiBkcm1fZ2VtX3R0bV9rbWFwKCkgLSBNYXBzIGEgR0VNIFRUTSBvYmplY3QgaW50byBr ZXJuZWwgYWRkcmVzcyBzcGFjZS4KKyAqIEBnYm86CXRoZSBHRU0gVFRNIG9iamVjdAorICogQG1h cDoJZXN0YWJsaXNoIGEgbWFwcGluZyBpZiBuZWNlc3NhcnkKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IG1hcHMgdGhlIGJ1ZmZlciBvYmplY3QgaW50byB0aGUga2VybmVsJ3MgYWRkcmVzcyBzcGFjZQor ICogb3IgcmV0dXJucyB0aGUgY3VycmVudCBtYXBwaW5nLiBJZiB0aGUgcGFyYW1ldGVyIG1hcCBp cyBmYWxzZSwgdGhlCisgKiBmdW5jdGlvbiBvbmx5IHF1ZXJpZXMgdGhlIGN1cnJlbnQgbWFwcGlu ZywgYnV0IGRvZXMgbm90IGVzdGFibGlzaCBhCisgKiBuZXcgb25lLgorICoKKyAqIFJldHVybnM6 CisgKiBUaGUgYnVmZmVycyB2aXJ0dWFsIGFkZHJlc3MgaWYgbWFwcGVkLCBvcgorICogTlVMTCBp cyBub3QgbWFwcGVkLCBvcgorICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhl cndpc2UuCisgKi8KK3ZvaWQqIGRybV9nZW1fdHRtX2ttYXAoc3RydWN0IGRybV9nZW1fdHRtX29i amVjdCAqZ2JvLCBib29sIG1hcCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGdiby0+a21hcC52aXJ0 dWFsIHx8ICFtYXApCisJCXJldHVybiBnYm8tPmttYXAudmlydHVhbDsKKworCXJldCA9IHR0bV9i b19rbWFwKCZnYm8tPmJvLCAwLCBnYm8tPmJvLm51bV9wYWdlcywgJmdiby0+a21hcCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCXJldHVybiBnYm8tPmttYXAudmlydHVh bDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV90dG1fa21hcCk7CisKKy8qKgorICogZHJtX2dl bV90dG1fa3VubWFwKCkgLSBVbm1hcHMgYSBHRU0gVFRNIG9iamVjdC4KKyAqIEBnYm86CXRoZSBH RU0gVFRNIG9iamVjdAorICovCit2b2lkIGRybV9nZW1fdHRtX2t1bm1hcChzdHJ1Y3QgZHJtX2dl bV90dG1fb2JqZWN0ICpnYm8pCit7CisJaWYgKCFnYm8tPmttYXAudmlydHVhbCkKKwkJcmV0dXJu OworCisJdHRtX2JvX2t1bm1hcCgmZ2JvLT5rbWFwKTsKKwlnYm8tPmttYXAudmlydHVhbCA9IE5V TEw7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdHRtX2t1bm1hcCk7CisKK2Jvb2wgZHJtX2lz X2dlbV90dG0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlyZXR1cm4gKGJvLT5k ZXN0cm95ID09IHR0bV9idWZmZXJfb2JqZWN0X2Rlc3Ryb3kpOworfQorRVhQT1JUX1NZTUJPTChk cm1faXNfZ2VtX3R0bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3R0bV9oZWxw ZXJfY29tbW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3R0bV9oZWxwZXJfY29tbW9uLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jYWNkMGY2OWZhY2MKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3R0bV9oZWxwZXJfY29tbW9uLmMKQEAg LTAsMCArMSw2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRl ciAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigi RFJNIFRUTSBtZW1vcnktbWFuYWdlbWVudCBoZWxwZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BM Iik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtX3R0bV9oZWxwZXIuaCBiL2luY2x1 ZGUvZHJtL2RybV9nZW1fdHRtX2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uNjYyZGNiOGQ0NzcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0v ZHJtX2dlbV90dG1faGVscGVyLmgKQEAgLTAsMCArMSw5MSBAQAorLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KKworI2lmbmRlZiBEUk1fR0VNX1RUTV9IRUxQ RVJfSAorI2RlZmluZSBEUk1fR0VNX1RUTV9IRUxQRVJfSAorCisjaW5jbHVkZSA8ZHJtL2RybV9n ZW0uaD4KKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19hcGkuaD4KKyNpbmNsdWRlIDxkcm0vdHRt L3R0bV9wbGFjZW1lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gLyogZm9yIGNvbnRh aW5lcl9vZigpICovCisKK3N0cnVjdCBmaWxwOworCisvKgorICogQnVmZmVyLW9iamVjdCBoZWxw ZXJzCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0IC0gR0VNIG9iamVj dCBiYWNrZWQgYnkgVFRNLW1hbmFnZWQgbWVtb3J5CisgKgorICogVGhlIHR5cGUgc3RydWN0IGRy bV9nZW1fdHRtX29iamVjdCByZXByZXNlbnRzIGEgR0VNIG9iamVjdCB0aGF0IGlzCisgKiBiYWNr ZWQgYnkgVFRNLW1hbmFnZWQgbWVtb3J5LiBJdCBjYW4gYmUgdXNlZCBmb3Igc2ltcGxlIGZyYW1i dWZmZXIKKyAqIGRldmljZXMgd2l0aCBkZWRpY2F0ZWQgbWVtb3J5LiBDdXJyZW50IHN1cHBvcnRl ZCBtZW1vcnkgcmVnaW9ucyBhcmUKKyAqIFRUTV9QTF9TWVNURU0gYW5kIFRUTV9QTF9WUkFNLiBU VE1fUExfVFQgY291bGQgcHJvYmFibHkgYmUgYWRkZWQgaWYKKyAqIG5lY2Vzc2FyeS4KKyAqLwor c3RydWN0IGRybV9nZW1fdHRtX29iamVjdCB7CisJLyoqCisJICogR0VNIG9iamVjdAorCSAqLwor ICAgICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgZ2VtOworCisJLyoqCisJICogVFRNIGJ1ZmZl ciBvYmplY3QKKwkgKi8KKyAgICAgICAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IGJvOworCisJ LyoqCisJICogTWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgYm8KKwkgKi8KKyAgICAgICAgc3RydWN0 IHR0bV9ib19rbWFwX29iaiBrbWFwOworCisJLyogU3VwcG9ydGVkIHBsYWNlbWVudHMgYXJlIFZS QU0gYW5kIFNZU1RFTSAqLworICAgICAgICBzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7 CisgICAgICAgIHN0cnVjdCB0dG1fcGxhY2UgcGxhY2VtZW50c1szXTsKKworICAgICAgICBpbnQg cGluX2NvdW50OworfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjb250YWluZXIgb2YgdHlwZSBz dHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0CisgKiBmb3IgZmllbGQgYm8uCisgKiBAYm86CQl0aGUg VFRNIGJ1ZmZlciBvYmplY3QKKyAqIFJldHVybnM6CVRoZSBjb250YWluaW5nIEdFTS1UVE0gb2Jq ZWN0CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCogZHJtX2dl bV90dG1fb2ZfYm8oCisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlyZXR1cm4g Y29udGFpbmVyX29mKGJvLCBzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0LCBibyk7Cit9CisKKy8q KgorICogUmV0dXJucyB0aGUgY29udGFpbmVyIG9mIHR5cGUgc3RydWN0IGRybV9nZW1fdHRtX29i amVjdAorICogZm9yIGZpZWxkIGdlbS4KKyAqIEBnZW06CXRoZSBHRU0gb2JqZWN0CisgKiBSZXR1 cm5zOglUaGUgY29udGFpbmluZyBHRU0tVFRNIG9iamVjdAorICovCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3QqIGRybV9nZW1fdHRtX29mX2dlbSgKKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKmdlbSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdlbSwgc3RydWN0IGRy bV9nZW1fdHRtX29iamVjdCwgZ2VtKTsKK30KKworc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCog ZHJtX2dlbV90dG1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0 cnVjdCB0dG1fYm9fZGV2aWNlKiBiZGV2LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUs CisJCQkJCSAgICAgIHVpbnQzMl90IHBnX2FsaWduLAorCQkJCQkgICAgICBib29sIGludGVycnVw dGlibGUpOwordm9pZCBkcm1fZ2VtX3R0bV9wdXQoc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAq Z2JvKTsKK2ludCBkcm1fZ2VtX3R0bV9yZXNlcnZlKHN0cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3Qg KmdibywgYm9vbCBub193YWl0KTsKK3ZvaWQgZHJtX2dlbV90dG1fdW5yZXNlcnZlKHN0cnVjdCBk cm1fZ2VtX3R0bV9vYmplY3QgKmdibyk7Cit1NjQgZHJtX2dlbV90dG1fbW1hcF9vZmZzZXQoc3Ry dWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2JvKTsKK3M2NCBkcm1fZ2VtX3R0bV92cmFtX29mZnNl dChzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm8pOworaW50IGRybV9nZW1fdHRtX3Bpbihz dHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm8sIHUzMiBwbF9mbGFnKTsKK2ludCBkcm1fZ2Vt X3R0bV91bnBpbihzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm8pOworaW50IGRybV9nZW1f dHRtX3B1c2hfdG9fc3lzdGVtKHN0cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3QgKmdibyk7Cit2b2lk KiBkcm1fZ2VtX3R0bV9rbWFwKHN0cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3QgKmdibywgYm9vbCBt YXApOwordm9pZCBkcm1fZ2VtX3R0bV9rdW5tYXAoc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAq Z2JvKTsKKworYm9vbCBkcm1faXNfZ2VtX3R0bShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv KTsKKworI2VuZGlmCi0tIAoyLjIxLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbA==