From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [PATCH 27/55] drm/i915: Update queue_flip() to take a request structure Date: Fri, 29 May 2015 17:43:48 +0100 Message-ID: <1432917856-12261-28-git-send-email-John.C.Harrison@Intel.com> References: <1432917856-12261-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 2296672130 for ; Fri, 29 May 2015 09:44:48 -0700 (PDT) In-Reply-To: <1432917856-12261-1-git-send-email-John.C.Harrison@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 RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KClVwZGF0ZWQg dGhlIGRpc3BsYXkgcGFnZSBmbGlwIGNvZGUgdG8gZG8gZXhwbGljaXQgcmVxdWVzdCBjcmVhdGlv biBhbmQKc3VibWlzc2lvbiByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZSBPTFIgYW5kIGp1c3Qg aG9waW5nIHRoYXQgdGhlIHJlcXVlc3QKYWN0dWFsbHkgZ2V0cyBzdWJtaXR0ZWQgYXQgc29tZSBy YW5kb20gcG9pbnQuCgpUaGUgc2VxdWVuY2UgaXMgbm93IHRvIGNyZWF0ZSBhIHJlcXVlc3QsIHF1 ZXVlIHRoZSB3b3JrIHRvIHRoZSByaW5nLCBhc3NpZ24gdGhlCmtub3duIHJlcXVlc3QgdG8gdGhl IGZsaXAgcXVldWUgd29yayBpdGVtIHRoZW4gYWN0dWFsbHkgc3VibWl0IHRoZSB3b3JrIGFuZCBw b3N0CnRoZSByZXF1ZXN0LgoKTm90ZSB0aGF0IGV2ZXJ5IHNpbmdsZSBmbGlwIGZ1bmN0aW9uIHVz ZWQgdG8gZmluaXNoIHdpdGgKJ19faW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOycuIEhvd2V2ZXIs IGltbWVkaWF0ZWx5IGFmdGVyIHRoZXkgcmV0dXJuIHRoZXJlIGlzCm5vdyBhbiBhZGQgcmVxdWVz dCBjYWxsIHdoaWNoIHdpbGwgZG8gdGhlIGFkdmFuY2UgYW55d2F5LiBUaHVzIHRoZSBtYW55CmR1 cGxpY2F0ZSBhZHZhbmNlIGNhbGxzIGhhdmUgYmVlbiByZW1vdmVkLgoKdjI6IFVwZGF0ZWQgY29t bWl0IG1lc3NhZ2Ugd2l0aCBjb21tZW50IGFib3V0IGFkdmFuY2UgcmVtb3ZhbC4KCnYzOiBUaGUg cmVxdWVzdCBjYW4gbm93IGJlIGFsbG9jYXRlZCBieSB0aGUgX3N5bmMoKSBjb2RlIGVhcmxpZXIg b24uIFRodXMgdGhlCnBhZ2UgZmxpcCBwYXRoIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG5lZWQgdG8g YWxsb2NhdGUgYSBuZXcgcmVxdWVzdCwgaXQgbWF5IGJlCmFibGUgdG8gcmUtdXNlIG9uZS4KCkZv cjogVklaLTUxMTUKU2lnbmVkLW9mZi1ieTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29u QEludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFRvbWFzIEVsZiA8dG9tYXMuZWxmQGludGVsLmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgICAyICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgfCAgIDMzICsrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYyB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8 ICAgIDEgLQogNCBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBmNjllOWNiLi42NTBlNWM3IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTYwOCw3ICs2MDgsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZGlz cGxheV9mdW5jcyB7CiAJaW50ICgqcXVldWVfZmxpcCkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK IAkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZywKKwkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEs CiAJCQkgIHVpbnQzMl90IGZsYWdzKTsKIAl2b2lkICgqdXBkYXRlX3ByaW1hcnlfcGxhbmUpKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDY1MjhhZGEuLmExYWM1NTcg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTEwNjM1LDkgKzEwNjM1LDEw IEBAIHN0YXRpYyBpbnQgaW50ZWxfZ2VuMl9xdWV1ZV9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCiAJCQkJIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCiAJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxLAogCQkJCSB1aW50MzJfdCBmbGFncykKIHsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nID0gcmVxLT5yaW5nOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjKTsKIAl1MzIgZmxpcF9tYXNrOwogCWludCByZXQ7CkBAIC0xMDY2 Miw3ICsxMDY2Myw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfZ2VuMl9xdWV1ZV9mbGlwKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOyAvKiBhdXggZGlzcGxh eSBiYXNlIGFkZHJlc3MsIHVudXNlZCAqLwogCiAJaW50ZWxfbWFya19wYWdlX2ZsaXBfYWN0aXZl KGludGVsX2NydGMpOwotCV9faW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwogCXJldHVybiAwOwog fQogCkBAIC0xMDY3MCw5ICsxMDY3MCwxMCBAQCBzdGF0aWMgaW50IGludGVsX2dlbjNfcXVldWVf ZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CiAJCQkJIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJCSBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAotCQkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQkJ CSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAkJCQkgdWludDMyX3QgZmxhZ3Mp CiB7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IHJlcS0+cmluZzsKIAlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJdTMyIGZsaXBf bWFzazsKIAlpbnQgcmV0OwpAQCAtMTA2OTQsNyArMTA2OTUsNiBAQCBzdGF0aWMgaW50IGludGVs X2dlbjNfcXVldWVfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWludGVsX3JpbmdfZW1p dChyaW5nLCBNSV9OT09QKTsKIAogCWludGVsX21hcmtfcGFnZV9mbGlwX2FjdGl2ZShpbnRlbF9j cnRjKTsKLQlfX2ludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAt MTA3MDIsOSArMTA3MDIsMTAgQEAgc3RhdGljIGludCBpbnRlbF9nZW40X3F1ZXVlX2ZsaXAoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKLQkJCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKKwkJCQkgc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCQkJIHVpbnQzMl90IGZsYWdzKQogeworCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSByZXEtPnJpbmc7CiAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJdWludDMyX3QgcGYsIHBpcGVz cmM7CkBAIC0xMDczMyw3ICsxMDczNCw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfZ2VuNF9xdWV1ZV9m bGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIHBmIHwg cGlwZXNyYyk7CiAKIAlpbnRlbF9tYXJrX3BhZ2VfZmxpcF9hY3RpdmUoaW50ZWxfY3J0Yyk7Ci0J X19pbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNzQxLDkg KzEwNzQxLDEwIEBAIHN0YXRpYyBpbnQgaW50ZWxfZ2VuNl9xdWV1ZV9mbGlwKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Ci0JCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCisJCQkJIHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxLAogCQkJCSB1aW50MzJfdCBmbGFncykKIHsKKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nID0gcmVxLT5yaW5nOwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCXVpbnQzMl90IHBmLCBwaXBlc3JjOwpAQCAt MTA3NjksNyArMTA3NzAsNiBAQCBzdGF0aWMgaW50IGludGVsX2dlbjZfcXVldWVfZmxpcChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCWludGVsX3JpbmdfZW1pdChyaW5nLCBwZiB8IHBpcGVzcmMp OwogCiAJaW50ZWxfbWFya19wYWdlX2ZsaXBfYWN0aXZlKGludGVsX2NydGMpOwotCV9faW50ZWxf cmluZ19hZHZhbmNlKHJpbmcpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDc3Nyw5ICsxMDc3Nywx MCBAQCBzdGF0aWMgaW50IGludGVsX2dlbjdfcXVldWVfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAogCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJCSBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSwKIAkJCQkgdWludDMyX3QgZmxhZ3MpCiB7CisJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZyA9IHJlcS0+cmluZzsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJdWludDMyX3QgcGxhbmVfYml0ID0gMDsKIAlpbnQgbGVu LCByZXQ7CkBAIC0xMDg2NCw3ICsxMDg2NSw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfZ2VuN19xdWV1 ZV9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIChN SV9OT09QKSk7CiAKIAlpbnRlbF9tYXJrX3BhZ2VfZmxpcF9hY3RpdmUoaW50ZWxfY3J0Yyk7Ci0J X19pbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMDM0LDcg KzExMDM0LDcgQEAgc3RhdGljIGludCBpbnRlbF9kZWZhdWx0X3F1ZXVlX2ZsaXAoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSAgICBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKIAkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKLQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKKwkJCQkg ICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCQkJICAgIHVpbnQzMl90IGZs YWdzKQogewogCXJldHVybiAtRU5PREVWOwpAQCAtMTEyNDksMTMgKzExMjQ5LDE4IEBAIHN0YXRp YyBpbnQgaW50ZWxfY3J0Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCWdv dG8gY2xlYW51cF91bnBpbjsKIAkJfQogCi0JCXJldCA9IGRldl9wcml2LT5kaXNwbGF5LnF1ZXVl X2ZsaXAoZGV2LCBjcnRjLCBmYiwgb2JqLCByaW5nLAorCQlpZiAoIXJlcXVlc3QpIHsKKwkJCXJl dCA9IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MocmluZywgcmluZy0+ZGVmYXVsdF9jb250ZXh0LCAm cmVxdWVzdCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gY2xlYW51cF91bnBpbjsKKwkJfQorCisJ CXJldCA9IGRldl9wcml2LT5kaXNwbGF5LnF1ZXVlX2ZsaXAoZGV2LCBjcnRjLCBmYiwgb2JqLCBy ZXF1ZXN0LAogCQkJCQkJICAgcGFnZV9mbGlwX2ZsYWdzKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8g Y2xlYW51cF91bnBpbjsKIAotCQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmd29yay0+ZmxpcF9x dWV1ZWRfcmVxLAotCQkJCQlpbnRlbF9yaW5nX2dldF9yZXF1ZXN0KHJpbmcpKTsKKwkJaTkxNV9n ZW1fcmVxdWVzdF9hc3NpZ24oJndvcmstPmZsaXBfcXVldWVkX3JlcSwgcmVxdWVzdCk7CiAJfQog CiAJaWYgKHJlcXVlc3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5k ZXggNzI3MzVhMGEuLmVhOTFhMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmMKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBpbnRlbF9yaW5nX3N0b3BwZWQoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZykKIAlyZXR1cm4gZGV2X3ByaXYtPmdwdV9lcnJvci5zdG9wX3Jp bmdzICYgaW50ZWxfcmluZ19mbGFnKHJpbmcpOwogfQogCi12b2lkIF9faW50ZWxfcmluZ19hZHZh bmNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCitzdGF0aWMgdm9pZCBfX2ludGVsX3Jp bmdfYWR2YW5jZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQogewogCXN0cnVjdCBpbnRl bF9yaW5nYnVmZmVyICpyaW5nYnVmID0gcmluZy0+YnVmZmVyOwogCXJpbmdidWYtPnRhaWwgJj0g cmluZ2J1Zi0+c2l6ZSAtIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgK aW5kZXggODQ1MGFkZC4uMTVjNWQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaApAQCAtNDIwLDcgKzQyMCw2IEBAIGludCBfX2ludGVsX3Jpbmdfc3BhY2UoaW50IGhl YWQsIGludCB0YWlsLCBpbnQgc2l6ZSk7CiB2b2lkIGludGVsX3JpbmdfdXBkYXRlX3NwYWNlKHN0 cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmKTsKIGludCBpbnRlbF9yaW5nX3NwYWNlKHN0 cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmKTsKIGJvb2wgaW50ZWxfcmluZ19zdG9wcGVk KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwotdm9pZCBfX2ludGVsX3JpbmdfYWR2YW5j ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKIAogaW50IF9fbXVzdF9jaGVjayBpbnRl bF9yaW5nX2lkbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CiB2b2lkIGludGVsX3Jp bmdfaW5pdF9zZXFubyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCB1MzIgc2Vxbm8pOwot LSAKMS43LjkuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK