From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 05/17] drm/i915/gem: Make caps.scheduler static Date: Tue, 30 Jul 2019 14:30:23 +0100 Message-ID: <20190730133035.1977-6-chris@chris-wilson.co.uk> References: <20190730133035.1977-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 00A896E513 for ; Tue, 30 Jul 2019 13:30:55 +0000 (UTC) In-Reply-To: <20190730133035.1977-1-chris@chris-wilson.co.uk> 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 V2UgZG8gbm90IG5vdGlmeSB1c2Vyc3BhY2Ugd2hlbiB0aGUgc2NoZWR1bGVyIGNhcGFiaWxpdGll cyBhcmUgY2hhbmdlZAooZHVlIHRvIHdlZGdpbmcgdGhlIGRyaXZlcikgYW5kIGFzIHN1Y2ggdXNl cnNwYWNlIHdpbGwgZXhwZWN0IHRoZSBjYXBzCnRvIGJlIHN0YXRpYyBhbmQgdW5jaGFuZ2luZy4g TWFrZSBpdCBzbywgYW5kIHNvIHdlIG9ubHkgbmVlZCB0byBjb21wdXRlCm91ciBjYXBzIG9uY2Ug ZHVyaW5nIGRyaXZlciByZWdpc3RyYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJz dWxpbkBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3Nocmlua2VyLmMgICAgICAgfCAgNiArKystLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jIHwgIDQgKystLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcmVzZXQuYyAgICAgICAgICAgICAgfCAgNSArLS0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgICAgICAgICAgICAgfCAgNCArKy0tCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKystLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgICAgICAgfCAxMyAr KysrKysrKysrKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyAgICAgICAg ICAgICAgICB8ICAyIC0tCiA3IGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDE3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9zaHJpbmtlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2Vy LmMKaW5kZXggM2Y0YzZiZGNjM2MzLi5iMTg2YmI1YmZiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jCkBAIC00NjAsMTIgKzQ2MCwxMiBAQCBpOTE1 X2dlbV9zaHJpbmtlcl92bWFwKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxv bmcgZXZlbnQsIHZvaWQgKnB0cgogfQogCiAvKioKLSAqIGk5MTVfZ2VtX3Nocmlua2VyX3JlZ2lz dGVyIC0gUmVnaXN0ZXIgdGhlIGk5MTUgc2hyaW5rZXIKKyAqIGk5MTVfZ2VtX2RyaXZlcl9yZWdp c3Rlcl9fc2hyaW5rZXIgLSBSZWdpc3RlciB0aGUgaTkxNSBzaHJpbmtlcgogICogQGk5MTU6IGk5 MTUgZGV2aWNlCiAgKgogICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYW5kIHNldHMgdXAgdGhl IGk5MTUgc2hyaW5rZXIgYW5kIE9PTSBoYW5kbGVyLgogICovCi12b2lkIGk5MTVfZ2VtX3Nocmlu a2VyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQordm9pZCBpOTE1X2dl bV9kcml2ZXJfcmVnaXN0ZXJfX3Nocmlua2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQogewogCWk5MTUtPm1tLnNocmlua2VyLnNjYW5fb2JqZWN0cyA9IGk5MTVfZ2VtX3Nocmlua2Vy X3NjYW47CiAJaTkxNS0+bW0uc2hyaW5rZXIuY291bnRfb2JqZWN0cyA9IGk5MTVfZ2VtX3Nocmlu a2VyX2NvdW50OwpAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgaTkxNV9nZW1fc2hyaW5rZXJfcmVn aXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAgKgogICogVGhpcyBmdW5jdGlv biB1bnJlZ2lzdGVycyB0aGUgaTkxNSBzaHJpbmtlciBhbmQgT09NIGhhbmRsZXIuCiAgKi8KLXZv aWQgaTkxNV9nZW1fc2hyaW5rZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKK3ZvaWQgaTkxNV9nZW1fZHJpdmVyX3VucmVnaXN0ZXJfX3Nocmlua2VyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KQogewogCVdBUk5fT04odW5yZWdpc3Rlcl92bWFwX3B1cmdl X25vdGlmaWVyKCZpOTE1LT5tbS52bWFwX25vdGlmaWVyKSk7CiAJV0FSTl9PTih1bnJlZ2lzdGVy X29vbV9ub3RpZmllcigmaTkxNS0+bW0ub29tX25vdGlmaWVyKSk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jCmluZGV4IDAxODU3YzEy ZjEyZi4uNTBhYTdlOTUxMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYwpAQCAtMzgyLDcgKzM4Miw3IEBAIHN0YXRpYyBib29s IGFzc2VydF9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAogc3Rh dGljIHZvaWQgZGlzYWJsZV9yZXRpcmVfd29ya2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQogewotCWk5MTVfZ2VtX3Nocmlua2VyX3VucmVnaXN0ZXIoaTkxNSk7CisJaTkxNV9nZW1f ZHJpdmVyX3VucmVnaXN0ZXJfX3Nocmlua2VyKGk5MTUpOwogCiAJaW50ZWxfZ3RfcG1fZ2V0KCZp OTE1LT5ndCk7CiAKQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCByZXN0b3JlX3JldGly ZV93b3JrZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJaWd0X2ZsdXNoX3Rlc3Qo aTkxNSwgSTkxNV9XQUlUX0xPQ0tFRCk7CiAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKIAotCWk5MTVfZ2VtX3Nocmlua2VyX3JlZ2lzdGVyKGk5MTUpOworCWk5MTVfZ2Vt X2RyaXZlcl9yZWdpc3Rlcl9fc2hyaW5rZXIoaTkxNSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1tYXBf b2Zmc2V0X2xvY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcmVzZXQuYwppbmRleCA5OGMwNzFmZTUzMmIuLmNkYmE2Y2QyOTMyNyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNldC5jCkBAIC03NTcsMTEgKzc1Nyw4IEBAIHN0 YXRpYyB2b2lkIF9faW50ZWxfZ3Rfc2V0X3dlZGdlZChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogCWlm ICghSU5URUxfSU5GTyhndC0+aTkxNSktPmdwdV9yZXNldF9jbG9iYmVyc19kaXNwbGF5KQogCQlf X2ludGVsX2d0X3Jlc2V0KGd0LCBBTExfRU5HSU5FUyk7CiAKLQlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBndC0+aTkxNSwgaWQpIHsKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndC0+aTkxNSwg aWQpCiAJCWVuZ2luZS0+c3VibWl0X3JlcXVlc3QgPSBub3Bfc3VibWl0X3JlcXVlc3Q7Ci0JCWVu Z2luZS0+c2NoZWR1bGUgPSBOVUxMOwotCX0KLQlndC0+aTkxNS0+Y2Fwcy5zY2hlZHVsZXIgPSAw OwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgbm8gcmVxdWVzdCBjYW4gc2xpcCB0aHJvdWdoIHdpdGhv dXQgZ2V0dGluZyBjb21wbGV0ZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGNmZWNh MTYwZTcxYi4uYzkzNGMxMDQwZjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTE3MTgs NyArMTcxOCw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRl dl9wcml2LT5kcm07CiAKLQlpOTE1X2dlbV9zaHJpbmtlcl9yZWdpc3RlcihkZXZfcHJpdik7CisJ aTkxNV9nZW1fZHJpdmVyX3JlZ2lzdGVyKGRldl9wcml2KTsKIAlpOTE1X3BtdV9yZWdpc3Rlcihk ZXZfcHJpdik7CiAKIAkvKgpAQCAtMTc5OCw3ICsxNzk4LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9k cml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaTkx NV90ZWFyZG93bl9zeXNmcyhkZXZfcHJpdik7CiAJZHJtX2Rldl91bnBsdWcoJmRldl9wcml2LT5k cm0pOwogCi0JaTkxNV9nZW1fc2hyaW5rZXJfdW5yZWdpc3RlcihkZXZfcHJpdik7CisJaTkxNV9n ZW1fZHJpdmVyX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X3dl bGNvbWVfbWVzc2FnZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKaW5kZXggMTYzOTY1YTE1Y2MxLi5iNTE2ZTZhMDJiNjEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtMjQ4NSw2ICsyNDg1LDggQEAgc3RhdGljIGlubGluZSB1MzIg aTkxNV9yZXNldF9lbmdpbmVfY291bnQoc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciwKIHZv aWQgaTkxNV9nZW1faW5pdF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKIGlu dCBfX211c3RfY2hlY2sgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOwogaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9pbml0X2h3KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGk5MTVfZ2VtX2RyaXZlcl9yZWdpc3RlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cit2b2lkIGk5MTVfZ2VtX2RyaXZlcl91bnJlZ2lz dGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKIHZvaWQgaTkxNV9nZW1fZHJpdmVy X3JlbW92ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpOTE1X2dl bV9kcml2ZXJfcmVsZWFzZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50 IGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LApAQCAtMjU4NCw4ICsyNTg2LDggQEAgdW5zaWduZWQgbG9uZyBpOTE1X2dlbV9zaHJpbmsoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAjZGVmaW5lIEk5MTVfU0hSSU5LX1dSSVRFQkFD SwlCSVQoNCkKIAogdW5zaWduZWQgbG9uZyBpOTE1X2dlbV9zaHJpbmtfYWxsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KTsKLXZvaWQgaTkxNV9nZW1fc2hyaW5rZXJfcmVnaXN0ZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwotdm9pZCBpOTE1X2dlbV9zaHJpbmtlcl91bnJl Z2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKK3ZvaWQgaTkxNV9nZW1fZHJp dmVyX3JlZ2lzdGVyX19zaHJpbmtlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cit2 b2lkIGk5MTVfZ2VtX2RyaXZlcl91bnJlZ2lzdGVyX19zaHJpbmtlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7CiB2b2lkIGk5MTVfZ2VtX3Nocmlua2VyX3RhaW50c19tdXRleChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJCQkgICAgc3RydWN0IG11dGV4ICptdXRleCk7 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDY1ODYzZTk1NWY0MC4uOWIxMGI4NzlhMzdm IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTEyNTUsOCArMTI1NSw2IEBAIGludCBpOTE1 X2dlbV9pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCiAJaW50ZWxfbW9j c19pbml0X2wzY2NfdGFibGUoZ3QpOwogCi0JaW50ZWxfZW5naW5lc19zZXRfc2NoZWR1bGVyX2Nh cHMoaTkxNSk7Ci0KIG91dDoKIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCh1bmNvcmUsIEZP UkNFV0FLRV9BTEwpOwogCXJldHVybiByZXQ7CkBAIC0xNjExLDYgKzE2MDksMTcgQEAgaW50IGk5 MTVfZ2VtX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiBy ZXQ7CiB9CiAKK3ZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQoreworCWk5MTVfZ2VtX2RyaXZlcl9yZWdpc3Rlcl9fc2hyaW5rZXIoaTkx NSk7CisJaW50ZWxfZW5naW5lc19zZXRfc2NoZWR1bGVyX2NhcHMoaTkxNSk7Cit9CisKK3ZvaWQg aTkxNV9nZW1fZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cit7CisJaTkxNV9nZW1fZHJpdmVyX3VucmVnaXN0ZXJfX3Nocmlua2VyKGk5MTUpOworfQorCiB2 b2lkIGk5MTVfZ2VtX2RyaXZlcl9yZW1vdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQogewogCUdFTV9CVUdfT04oZGV2X3ByaXYtPmd0LmF3YWtlKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZXF1ZXN0LmMKaW5kZXggOGFjN2QxNGVjOGM5Li44MTA5NGYyNTBiZGIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCkBAIC0xMTk4LDcgKzExOTgsNiBAQCBzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpfX2k5MTVfcmVxdWVzdF9jb21taXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEp CiAJICovCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWk5MTVfc3dfZmVuY2VfY29tbWl0KCZycS0+ c2VtYXBob3JlKTsKLQlyY3VfcmVhZF9sb2NrKCk7IC8qIFJDVSBzZXJpYWxpc2F0aW9uIGZvciBz ZXQtd2VkZ2VkIHByb3RlY3Rpb24gKi8KIAlpZiAoZW5naW5lLT5zY2hlZHVsZSkgewogCQlzdHJ1 Y3QgaTkxNV9zY2hlZF9hdHRyIGF0dHIgPSBycS0+Z2VtX2NvbnRleHQtPnNjaGVkOwogCkBAIC0x MjI4LDcgKzEyMjcsNiBAQCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpfX2k5MTVfcmVxdWVzdF9jb21t aXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCiAKIAkJZW5naW5lLT5zY2hlZHVsZShycSwgJmF0 dHIpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlpOTE1X3N3X2ZlbmNlX2NvbW1pdCgmcnEt PnN1Ym1pdCk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7IC8qIEtpY2sgdGhlIGV4ZWNsaXN0cyB0YXNr bGV0IGlmIGp1c3Qgc2NoZWR1bGVkICovCiAKLS0gCjIuMjIuMAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4