From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [RFC PATCH 06/42] drm/i915/region: support continuous allocations Date: Thu, 14 Feb 2019 14:57:04 +0000 Message-ID: <20190214145740.14521-7-matthew.auld@intel.com> References: <20190214145740.14521-1-matthew.auld@intel.com> 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 8EFB56E90E for ; Thu, 14 Feb 2019 14:57:50 +0000 (UTC) In-Reply-To: <20190214145740.14521-1-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org U29tZSBvYmplY3RzIG1heSBuZWVkIHRvIGJlIGFsbG9jYXRlZCBhcyBhIGNvbnRpbnVvdXMgYmxv Y2ssIHRoaW5raW5nCmFoZWFkIHRoZSB2YXJpb3VzIGtlcm5lbCBpb19tYXBwaW5nIGludGVyZmFj ZXMgc2VlbSB0byBleHBlY3QgaXQuCgpTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRo ZXcuYXVsZEBpbnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBs aW51eC5pbnRlbC5jb20+CkNjOiBBYmRpZWwgSmFudWxndWUgPGFiZGllbC5qYW51bGd1ZUBsaW51 eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0Lmgg ICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24u YyAgICB8ICAgNyArLQogLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9u LmMgIHwgMTUyICsrKysrKysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL21vY2tfcmVnaW9uLmMgIHwgICAzICsKIDQgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlv bnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3Qu aAppbmRleCA3Njk0N2E2ZjQ5ZjEuLmVmYzIzZmMyYjFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fb2JqZWN0LmgKQEAgLTE2Myw2ICsxNjMsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCB7CiAJICogYWN0aXZpdHk/CiAJICovCiAjZGVmaW5lIEk5MTVfQk9fQUNUSVZFX1JF RiAwCisjZGVmaW5lIEk5MTVfQk9fQUxMT0NfQ09OVElHVU9VUyAoMTw8MSkKKyNkZWZpbmUgSTkx NV9CT19BTExPQ19GTEFHUyAoSTkxNV9CT19BTExPQ19DT05USUdVT1VTKQogCiAJLyoKIAkgKiBJ cyB0aGUgb2JqZWN0IHRvIGJlIG1hcHBlZCBhcyByZWFkLW9ubHkgdG8gdGhlIEdQVQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCmluZGV4IGY3ZmRjM2U5NDJlNi4u ZWQzNzU5OWM3Nzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1v cnlfcmVnaW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lv bi5jCkBAIC01OSw2ICs1OSw3IEBAIGk5MTVfbWVtb3J5X3JlZ2lvbl9nZXRfcGFnZXNfYnVkZHko c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbiAqbWVtID0gb2JqLT5tZW1vcnlfcmVnaW9uOwogCXJlc291cmNlX3NpemVfdCBzaXpl ID0gb2JqLT5iYXNlLnNpemU7CisJdW5zaWduZWQgaW50IGZsYWdzID0gb2JqLT5mbGFnczsKIAlz dHJ1Y3Qgc2dfdGFibGUgKnN0OwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdW5zaWduZWQg aW50IHNnX3BhZ2Vfc2l6ZXM7CkBAIC05OSw3ICsxMDAsNyBAQCBpOTE1X21lbW9yeV9yZWdpb25f Z2V0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCQlpZiAo IUlTX0VSUihibG9jaykpCiAJCQkJYnJlYWs7CiAKLQkJCWlmICghb3JkZXItLSkgeworCQkJaWYg KGZsYWdzICYgSTkxNV9CT19BTExPQ19DT05USUdVT1VTIHx8ICFvcmRlci0tKSB7CiAJCQkJcmVz b3VyY2Vfc2l6ZV90IHRhcmdldDsKIAkJCQlpbnQgZXJyOwogCkBAIC0xODUsNiArMTg2LDkgQEAg aTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24oc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24g Km1lbSwKIAlpZiAoIW1lbSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAKKwlpZiAoZmxh Z3MgJiB+STkxNV9CT19BTExPQ19GTEFHUykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisK IAlzaXplID0gcm91bmRfdXAoc2l6ZSwgbWVtLT5taW5fcGFnZV9zaXplKTsKIAogCUdFTV9CVUdf T04oIXNpemUpOwpAQCAtMjAyLDYgKzIwNiw3IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVn aW9uKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAKIAlJTklUX0xJU1RfSEVBRCgm b2JqLT5ibG9ja3MpOwogCW9iai0+bWVtb3J5X3JlZ2lvbiA9IG1lbTsKKwlvYmotPmZsYWdzID0g ZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZtZW0tPm9ial9sb2NrKTsKIAlsaXN0X2FkZCgmb2JqLT5y ZWdpb25fbGluaywgJm1lbS0+b2JqZWN0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYwppbmRleCAxY2VhMzgxZDJkNWUuLmZi YjE0OTdkMGY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX21lbW9yeV9yZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aW50ZWxfbWVtb3J5X3JlZ2lvbi5jCkBAIC05NSwxNyArOTUsMTcgQEAgc3RhdGljIGludCBpZ3Rf bW9ja19maWxsKHZvaWQgKmFyZykKIAogc3RhdGljIHZvaWQgaWd0X21hcmtfZXZpY3RhYmxlKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaTkxNV9nZW1fb2JqZWN0X3VucGlu X3BhZ2VzKG9iaik7CisJaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikp CisJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOwogCW9iai0+bW0ubWFkdiA9IEk5 MTVfTUFEVl9ET05UTkVFRDsKIAlsaXN0X21vdmUoJm9iai0+cmVnaW9uX2xpbmssICZvYmotPm1l bW9yeV9yZWdpb24tPnB1cmdlYWJsZSk7CiB9CiAKLXN0YXRpYyBpbnQgaWd0X21vY2tfc2hyaW5r KHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgaWd0X2ZyYWdfcmVnaW9uKHN0cnVjdCBpbnRlbF9tZW1v cnlfcmVnaW9uICptZW0sCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpvYmplY3RzKQogewotCXN0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0gPSBhcmc7CiAJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKIAl1bnNpZ25lZCBsb25nIG5fb2JqZWN0czsKLQlMSVNUX0hFQUQob2Jq ZWN0cyk7CiAJcmVzb3VyY2Vfc2l6ZV90IHRhcmdldDsKIAlyZXNvdXJjZV9zaXplX3QgdG90YWw7 CiAJaW50IGVyciA9IDA7CkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGludCBpZ3RfbW9ja19z aHJpbmsodm9pZCAqYXJnKQogCQkJZ290byBlcnJfY2xvc2Vfb2JqZWN0czsKIAkJfQogCi0JCWxp c3RfYWRkKCZvYmotPnN0X2xpbmssICZvYmplY3RzKTsKKwkJbGlzdF9hZGQoJm9iai0+c3RfbGlu aywgb2JqZWN0cyk7CiAKIAkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwog CQlpZiAoZXJyKQpAQCAtMTM3LDYgKzEzNywzOSBAQCBzdGF0aWMgaW50IGlndF9tb2NrX3Nocmlu ayh2b2lkICphcmcpCiAJCQlpZ3RfbWFya19ldmljdGFibGUob2JqKTsKIAl9CiAKKwlyZXR1cm4g MDsKKworZXJyX2Nsb3NlX29iamVjdHM6CisJY2xvc2Vfb2JqZWN0cyhvYmplY3RzKTsKKwlyZXR1 cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpZ3RfZGVmcmFnX3JlZ2lvbihzdHJ1Y3QgbGlzdF9o ZWFkICpvYmplY3RzKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisKKwls aXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgb2JqZWN0cywgc3RfbGluaykgeworCQlpZiAob2JqLT5t bS5tYWR2ID09IEk5MTVfTUFEVl9XSUxMTkVFRCkKKwkJCWlndF9tYXJrX2V2aWN0YWJsZShvYmop OworCX0KK30KKworc3RhdGljIGludCBpZ3RfbW9ja19zaHJpbmsodm9pZCAqYXJnKQoreworCXN0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0gPSBhcmc7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKKwlMSVNUX0hFQUQob2JqZWN0cyk7CisJcmVzb3VyY2Vfc2l6ZV90IHRh cmdldDsKKwlyZXNvdXJjZV9zaXplX3QgdG90YWw7CisJaW50IGVycjsKKworCWVyciA9IGlndF9m cmFnX3JlZ2lvbihtZW0sICZvYmplY3RzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ dG90YWwgPSByZXNvdXJjZV9zaXplKCZtZW0tPnJlZ2lvbik7CisJdGFyZ2V0ID0gbWVtLT5tbS5t aW5fc2l6ZTsKKwogCXdoaWxlICh0YXJnZXQgPD0gdG90YWwgLyAyKSB7CiAJCW9iaiA9IGk5MTVf Z2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKG1lbSwgdGFyZ2V0LCAwKTsKIAkJaWYgKElTX0VSUihv YmopKSB7CkBAIC0xNjgsMTEgKzIwMSwxMjAgQEAgc3RhdGljIGludCBpZ3RfbW9ja19zaHJpbmso dm9pZCAqYXJnKQogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgaWd0X21vY2tfY29udGlu dW91cyh2b2lkICphcmcpCit7CisJc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSA9IGFy ZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCUxJU1RfSEVBRChvYmplY3Rz KTsKKwlyZXNvdXJjZV9zaXplX3QgdGFyZ2V0OworCXJlc291cmNlX3NpemVfdCB0b3RhbDsKKwlp bnQgZXJyOworCisJZXJyID0gaWd0X2ZyYWdfcmVnaW9uKG1lbSwgJm9iamVjdHMpOworCWlmIChl cnIpCisJCXJldHVybiBlcnI7CisKKwl0b3RhbCA9IHJlc291cmNlX3NpemUoJm1lbS0+cmVnaW9u KTsKKwl0YXJnZXQgPSB0b3RhbCAvIDI7CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdl IGNhbiBhbGxvY2F0ZSBhbGwgb2YgdGhlIGF2YWlsYWJsZSBmcmFnbWVudGVkCisJICogc3BhY2Uu CisJICovCisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obWVtLCB0YXJnZXQs IDApOworCWlmIChJU19FUlIob2JqKSkgeworCQllcnIgPSBQVFJfRVJSKG9iaik7CisJCWdvdG8g ZXJyX2Nsb3NlX29iamVjdHM7CisJfQorCisJbGlzdF9hZGQoJm9iai0+c3RfbGluaywgJm9iamVj dHMpOworCisJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCWlmIChlcnIp IHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgYXZhaWxhYmxlIHNwYWNlXG4iKTsKKwkJ Z290byBlcnJfY2xvc2Vfb2JqZWN0czsKKwl9CisKKwlpZ3RfbWFya19ldmljdGFibGUob2JqKTsK KworCS8qIFRyeSB0aGUgc21hbGxlc3QgcG9zc2libGUgc2l6ZSAtLSBzaG91bGQgc3VjY2VlZCAq LworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKG1lbSwgbWVtLT5tbS5taW5f c2l6ZSwKKwkJCQkJICAgIEk5MTVfQk9fQUxMT0NfQ09OVElHVU9VUyk7CisJaWYgKElTX0VSUihv YmopKSB7CisJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJZ290byBlcnJfY2xvc2Vfb2JqZWN0czsK Kwl9CisKKwlsaXN0X2FkZCgmb2JqLT5zdF9saW5rLCAmb2JqZWN0cyk7CisKKwllcnIgPSBpOTE1 X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisJaWYgKGVycikgeworCQlwcl9lcnIoImZhaWxl ZCB0byBhbGxvY2F0ZSBzbWFsbGVzdCBwb3NzaWJsZSBzaXplXG4iKTsKKwkJZ290byBlcnJfY2xv c2Vfb2JqZWN0czsKKwl9CisKKwlpZ3RfbWFya19ldmljdGFibGUob2JqKTsKKworCWlmIChvYmot Pm1tLnBhZ2VzLT5uZW50cyAhPSAxKSB7CisJCXByX2VycigiWzFdb2JqZWN0IHNwYW5zIG11bHRp cGxlIHNnIGVudHJpZXNcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9jbG9zZV9v YmplY3RzOworCX0KKworCS8qCisJICogRXZlbiB0aG91Z2ggdGhlcmUgaXMgZW5vdWdoIGZyZWUg c3BhY2UgZm9yIHRoZSBhbGxvY2F0aW9uLCB3ZQorCSAqIHNob3VsZG4ndCBiZSBhYmxlIHRvIGFs bG9jYXRlIGl0LCBnaXZlbiB0aGF0IGl0IGlzIGZyYWdtZW50ZWQsIGFuZAorCSAqIG5vbi1jb250 aW51b3VzLgorCSAqLworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKG1lbSwg dGFyZ2V0LCBJOTE1X0JPX0FMTE9DX0NPTlRJR1VPVVMpOworCWlmIChJU19FUlIob2JqKSkgewor CQllcnIgPSBQVFJfRVJSKG9iaik7CisJCWdvdG8gZXJyX2Nsb3NlX29iamVjdHM7CisJfQorCisJ bGlzdF9hZGQoJm9iai0+c3RfbGluaywgJm9iamVjdHMpOworCisJZXJyID0gaTkxNV9nZW1fb2Jq ZWN0X3Bpbl9wYWdlcyhvYmopOworCWlmICghZXJyKSB7CisJCXByX2VycigiZXhwZWN0ZWQgYWxs b2NhdGlvbiB0byBmYWlsXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfY2xvc2Vf b2JqZWN0czsKKwl9CisKKwlpZ3RfZGVmcmFnX3JlZ2lvbigmb2JqZWN0cyk7CisKKwkvKiBTaG91 bGQgbm93IHN1Y2NlZWQgKi8KKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3JlZ2lvbiht ZW0sIHRhcmdldCwgSTkxNV9CT19BTExPQ19DT05USUdVT1VTKTsKKwlpZiAoSVNfRVJSKG9iaikp IHsKKwkJZXJyID0gUFRSX0VSUihvYmopOworCQlnb3RvIGVycl9jbG9zZV9vYmplY3RzOworCX0K KworCWxpc3RfYWRkKCZvYmotPnN0X2xpbmssICZvYmplY3RzKTsKKworCWVyciA9IGk5MTVfZ2Vt X29iamVjdF9waW5fcGFnZXMob2JqKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiZmFpbGVkIHRv IGFsbG9jYXRlIGZyb20gZGVmcmFnZWQgYXJlYVxuIik7CisJCWdvdG8gZXJyX2Nsb3NlX29iamVj dHM7CisJfQorCisJaWYgKG9iai0+bW0ucGFnZXMtPm5lbnRzICE9IDEpIHsKKwkJcHJfZXJyKCJv YmplY3Qgc3BhbnMgbXVsdGlwbGUgc2cgZW50cmllc1xuIik7CisJCWVyciA9IC1FSU5WQUw7CisJ fQorCitlcnJfY2xvc2Vfb2JqZWN0czoKKwljbG9zZV9vYmplY3RzKCZvYmplY3RzKTsKKworCXJl dHVybiBlcnI7Cit9CisKIGludCBpbnRlbF9tZW1vcnlfcmVnaW9uX21vY2tfc2VsZnRlc3RzKHZv aWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKIAkJ U1VCVEVTVChpZ3RfbW9ja19maWxsKSwKIAkJU1VCVEVTVChpZ3RfbW9ja19zaHJpbmspLAorCQlT VUJURVNUKGlndF9tb2NrX2NvbnRpbnVvdXMpLAogCX07CiAJc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24gKm1lbTsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmMKaW5kZXggMTFlOWYzNzlhYWNhLi5j MWMwOWQwZTQ3MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9t b2NrX3JlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3Jl Z2lvbi5jCkBAIC0zOCw2ICszOCw5IEBAIG1vY2tfb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgaW50ZWxf bWVtb3J5X3JlZ2lvbiAqbWVtLAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbWVt LT5pOTE1OwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKKwlpZiAoZmxhZ3Mg JiBJOTE1X0JPX0FMTE9DX0NPTlRJR1VPVVMpCisJCXNpemUgPSByb3VuZHVwX3Bvd19vZl90d28o c2l6ZSk7CisKIAlpZiAoc2l6ZSA+IEJJVChtZW0tPm1tLm1heF9vcmRlcikgKiBtZW0tPm1tLm1p bl9zaXplKQogCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOwogCi0tIAoyLjIwLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==