From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH i-g-t 01/12] lib/igt_kms: Rework connector properties to be more atomic, v2. Date: Wed, 11 Oct 2017 12:11:08 +0200 Message-ID: <20171011101119.32130-2-maarten.lankhorst@linux.intel.com> References: <20171011101119.32130-1-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5A4F66E618 for ; Wed, 11 Oct 2017 10:11:26 +0000 (UTC) In-Reply-To: <20171011101119.32130-1-maarten.lankhorst@linux.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 SW4gdGhlIGZ1dHVyZSBJIHdhbnQgdG8gYWxsb3cgdGVzdHMgdG8gY29tbWl0IG1vcmUgcHJvcGVy dGllcywKYnV0IGZvciB0aGlzIHRvIHdvcmsgSSBoYXZlIHRvIGZpeCBhbGwgcHJvcGVydGllcyB0 byB3b3JrIGJldHRlcgp3aXRoIGF0b21pYyBjb21taXQuIEluc3RlYWQgb2Ygc3BlY2lhbCBjYXNp bmcgZWFjaApwcm9wZXJ0eSBtYWtlIGEgYml0bWFzayBmb3IgYWxsIHByb3BlcnR5IGNoYW5nZWQg ZmxhZ3MsIGFuZCB0cnkgdG8KY29tbWl0IGFsbCBwcm9wZXJ0aWVzLgoKQ2hhbmdzIHNpbmNlIHYx OgotIE1lbnRpb24gd2hpY2ggcHJvcGVydGllcyB3ZSBzZXQgdG8gd2hhdC4KLSBBc3NlcnQgdGhl IHByb3BlcnR5IHRvIGJlIHNldCBpcyB2YWxpZC4KClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFu a2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBN aWthIEthaG9sYSA8bWlrYS5rYWhvbGFAaW50ZWwuY29tPgotLS0KIGxpYi9pZ3Rfa21zLmMgICAg ICAgICAgICAgICAgICAgIHwgNDQgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0tLQogbGliL2lndF9rbXMuaCAgICAgICAgICAgICAgICAgICAgfCAzNSArKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLQogdGVzdHMva21zX2F0b21pY19pbnRlcnJ1cHRpYmxlLmMgfCAg NCArKy0tCiB0ZXN0cy9rbXNfcGFuZWxfZml0dGluZy5jICAgICAgICB8ICAyICstCiA0IGZpbGVz IGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2xpYi9pZ3Rfa21zLmMgYi9saWIvaWd0X2ttcy5jCmluZGV4IDM3OWJkMGMzODNmZC4uZTZmYThm NGFmNDU1IDEwMDY0NAotLS0gYS9saWIvaWd0X2ttcy5jCisrKyBiL2xpYi9pZ3Rfa21zLmMKQEAg LTI0OCw3ICsyNDgsNyBAQCBpZ3RfYXRvbWljX2ZpbGxfY29ubmVjdG9yX3Byb3BzKGlndF9kaXNw bGF5X3QgKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LAogCQkJaWYgKHN0cmNtcChwcm9w LT5uYW1lLCBjb25uX3Byb3BfbmFtZXNbal0pICE9IDApCiAJCQkJY29udGludWU7CiAKLQkJCW91 dHB1dC0+Y29uZmlnLmF0b21pY19wcm9wc19jb25uZWN0b3Jbal0gPSBwcm9wcy0+cHJvcHNbaV07 CisJCQlvdXRwdXQtPnByb3BzW2pdID0gcHJvcHMtPnByb3BzW2ldOwogCQkJYnJlYWs7CiAJCX0K IApAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5 X3QgKmRpc3BsYXksIGludCBkcm1fZmQpCiAKIAkJaWd0X291dHB1dF9yZWZyZXNoKG91dHB1dCk7 CiAKLQkJb3V0cHV0LT5jb25maWcucGlwZV9jaGFuZ2VkID0gdHJ1ZTsKKwkJaWd0X291dHB1dF9z ZXRfcHJvcF9jaGFuZ2VkKG91dHB1dCwgSUdUX0NPTk5FQ1RPUl9DUlRDX0lEKTsKIAl9CiAKIAlk cm1Nb2RlRnJlZVBsYW5lUmVzb3VyY2VzKHBsYW5lX3Jlc291cmNlcyk7CkBAIC0yNTE0LDIzICsy NTE0LDI0IEBAIHN0YXRpYyB2b2lkIGlndF9hdG9taWNfcHJlcGFyZV9jcnRjX2NvbW1pdChpZ3Rf cGlwZV90ICpwaXBlX29iaiwgZHJtTW9kZUF0b21pY1JlCiBzdGF0aWMgdm9pZCBpZ3RfYXRvbWlj X3ByZXBhcmVfY29ubmVjdG9yX2NvbW1pdChpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZHJtTW9kZUF0 b21pY1JlcSAqcmVxKQogewogCi0Jc3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyAqY29u ZmlnID0gJm91dHB1dC0+Y29uZmlnOworCWludCBpOwogCi0JaWYgKGNvbmZpZy0+Y29ubmVjdG9y X3NjYWxpbmdfbW9kZV9jaGFuZ2VkKQotCQlpZ3RfYXRvbWljX3BvcHVsYXRlX2Nvbm5lY3Rvcl9y ZXEocmVxLCBvdXRwdXQsIElHVF9DT05ORUNUT1JfU0NBTElOR19NT0RFLCBjb25maWctPmNvbm5l Y3Rvcl9zY2FsaW5nX21vZGUpOworCWZvciAoaSA9IDA7IGkgPCBJR1RfTlVNX0NPTk5FQ1RPUl9Q Uk9QUzsgaSsrKSB7CisJCWlmICghaWd0X291dHB1dF9pc19wcm9wX2NoYW5nZWQob3V0cHV0LCBp KSkKKwkJCWNvbnRpbnVlOwogCi0JaWYgKGNvbmZpZy0+cGlwZV9jaGFuZ2VkKSB7Ci0JCXVpbnQz Ml90IGNydGNfaWQgPSAwOworCQkvKiBpdCdzIGFuIGVycm9yIHRvIHRyeSBhbiB1bnN1cHBvcnRl ZCBmZWF0dXJlICovCisJCWlndF9hc3NlcnQob3V0cHV0LT5wcm9wc1tpXSk7CiAKLQkJaWYgKG91 dHB1dC0+Y29uZmlnLnBpcGUgIT0gUElQRV9OT05FKQotCQkJY3J0Y19pZCA9IG91dHB1dC0+Y29u ZmlnLmNydGMtPmNydGNfaWQ7CisJCWlndF9kZWJ1ZygiJXM6IFNldHRpbmcgcHJvcGVydHkgXCIl c1wiIHRvIDB4JSJQUkl4NjQiLyUiUFJJaTY0IlxuIiwKKwkJCSAgaWd0X291dHB1dF9uYW1lKG91 dHB1dCksIGlndF9jb25uZWN0b3JfcHJvcF9uYW1lc1tpXSwKKwkJCSAgb3V0cHV0LT52YWx1ZXNb aV0sIG91dHB1dC0+dmFsdWVzW2ldKTsKIAotCQlpZ3RfYXRvbWljX3BvcHVsYXRlX2Nvbm5lY3Rv cl9yZXEocmVxLCBvdXRwdXQsIElHVF9DT05ORUNUT1JfQ1JUQ19JRCwgY3J0Y19pZCk7CisJCWln dF9hc3NlcnRfbHQoMCwgZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJlcSwKKwkJCQkJICBvdXRw dXQtPmNvbmZpZy5jb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCwKKwkJCQkJICBvdXRwdXQtPnByb3Bz W2ldLAorCQkJCQkgIG91dHB1dC0+dmFsdWVzW2ldKSk7CiAJfQotCS8qCi0JICoJVE9ETzogQWRk IGFsbCBvdGhlciBjb25uZWN0b3IgbGV2ZWwgcHJvcGVydGllcyBoZXJlCi0JICovCi0KIH0KIAog LyoKQEAgLTI2MjUsMTEgKzI2MjYsMTAgQEAgZGlzcGxheV9jb21taXRfY2hhbmdlZChpZ3RfZGlz cGxheV90ICpkaXNwbGF5LCBlbnVtIGlndF9jb21taXRfc3R5bGUgcykKIAlmb3IgKGkgPSAwOyBp IDwgZGlzcGxheS0+bl9vdXRwdXRzOyBpKyspIHsKIAkJaWd0X291dHB1dF90ICpvdXRwdXQgPSAm ZGlzcGxheS0+b3V0cHV0c1tpXTsKIAotCQlpZiAocyAhPSBDT01NSVRfVU5JVkVSU0FMKQotCQkJ b3V0cHV0LT5jb25maWcucGlwZV9jaGFuZ2VkID0gZmFsc2U7Ci0KIAkJaWYgKHMgPT0gQ09NTUlU X0FUT01JQykKLQkJCW91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvcl9zY2FsaW5nX21vZGVfY2hhbmdl ZCA9IGZhbHNlOworCQkJb3V0cHV0LT5jaGFuZ2VkID0gMDsKKwkJZWxzZSBpZiAocyAhPSBDT01N SVRfVU5JVkVSU0FMKQorCQkJaWd0X291dHB1dF9jbGVhcl9wcm9wX2NoYW5nZWQob3V0cHV0LCBJ R1RfQ09OTkVDVE9SX0NSVENfSUQpOwogCX0KIH0KIApAQCAtMjg3MywxOCArMjg3MywxNiBAQCB2 b2lkIGlndF9vdXRwdXRfc2V0X3BpcGUoaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBw aXBlKQogCWlmIChwaXBlICE9IFBJUEVfTk9ORSkKIAkJZGlzcGxheS0+cGlwZXNbcGlwZV0ubW9k ZV9jaGFuZ2VkID0gdHJ1ZTsKIAotCW91dHB1dC0+Y29uZmlnLnBpcGVfY2hhbmdlZCA9IHRydWU7 CisJaWd0X291dHB1dF9zZXRfcHJvcF92YWx1ZShvdXRwdXQsIElHVF9DT05ORUNUT1JfQ1JUQ19J RCwgcGlwZSA9PSBQSVBFX05PTkUgPyAwIDogZGlzcGxheS0+cGlwZXNbcGlwZV0uY3J0Y19pZCk7 CiAKIAlpZ3Rfb3V0cHV0X3JlZnJlc2gob3V0cHV0KTsKIH0KIAogdm9pZCBpZ3Rfb3V0cHV0X3Nl dF9zY2FsaW5nX21vZGUoaWd0X291dHB1dF90ICpvdXRwdXQsIHVpbnQ2NF90IHNjYWxpbmdfbW9k ZSkKIHsKLQlvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3Jfc2NhbGluZ19tb2RlX2NoYW5nZWQgPSB0 cnVlOwotCi0Jb3V0cHV0LT5jb25maWcuY29ubmVjdG9yX3NjYWxpbmdfbW9kZSA9IHNjYWxpbmdf bW9kZTsKKwlpZ3Rfb3V0cHV0X3NldF9wcm9wX3ZhbHVlKG91dHB1dCwgSUdUX0NPTk5FQ1RPUl9T Q0FMSU5HX01PREUsIHNjYWxpbmdfbW9kZSk7CiAKLQlpZ3RfcmVxdWlyZShvdXRwdXQtPmNvbmZp Zy5hdG9taWNfcHJvcHNfY29ubmVjdG9yW0lHVF9DT05ORUNUT1JfU0NBTElOR19NT0RFXSk7CisJ aWd0X3JlcXVpcmUob3V0cHV0LT5wcm9wc1tJR1RfQ09OTkVDVE9SX1NDQUxJTkdfTU9ERV0pOwog fQogCiBpZ3RfcGxhbmVfdCAqaWd0X291dHB1dF9nZXRfcGxhbmUoaWd0X291dHB1dF90ICpvdXRw dXQsIGludCBwbGFuZV9pZHgpCmRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5oIGIvbGliL2lndF9r bXMuaAppbmRleCA4ZGMxMThjOTYxYjcuLjFlZjEwZTdkNTI1YyAxMDA2NDQKLS0tIGEvbGliL2ln dF9rbXMuaAorKysgYi9saWIvaWd0X2ttcy5oCkBAIC0xMzEsMTAgKzEzMSw3IEBAIHN0cnVjdCBr bXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWcgewogCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsK IAlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsKIAlkcm1Nb2RlTW9kZUluZm8gZGVmYXVsdF9tb2Rl OwotCXVpbnQ2NF90IGNvbm5lY3Rvcl9zY2FsaW5nX21vZGU7Ci0JYm9vbCBjb25uZWN0b3Jfc2Nh bGluZ19tb2RlX2NoYW5nZWQ7Ci0JYm9vbCBwaXBlX2NoYW5nZWQ7Ci0JdWludDMyX3QgYXRvbWlj X3Byb3BzX2Nvbm5lY3RvcltJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QU107CisKIAlpbnQgcGlwZTsK IAl1bnNpZ25lZCB2YWxpZF9jcnRjX2lkeF9tYXNrOwogfTsKQEAgLTM2NCw2ICszNjEsMTIgQEAg dHlwZWRlZiBzdHJ1Y3QgewogCWVudW0gcGlwZSBwZW5kaW5nX3BpcGU7CiAJYm9vbCB1c2Vfb3Zl cnJpZGVfbW9kZTsKIAlkcm1Nb2RlTW9kZUluZm8gb3ZlcnJpZGVfbW9kZTsKKworCS8qIGJpdG1h c2sgb2YgY2hhbmdlZCBwcm9wZXJ0aWVzICovCisJdWludDY0X3QgY2hhbmdlZDsKKworCXVpbnQz Ml90IHByb3BzW0lHVF9OVU1fQ09OTkVDVE9SX1BST1BTXTsKKwl1aW50NjRfdCB2YWx1ZXNbSUdU X05VTV9DT05ORUNUT1JfUFJPUFNdOwogfSBpZ3Rfb3V0cHV0X3Q7CiAKIHN0cnVjdCBpZ3RfZGlz cGxheSB7CkBAIC01NDUsMTYgKzU0OCwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWd0X291dHB1 dF9pc19jb25uZWN0ZWQoaWd0X291dHB1dF90ICpvdXRwdXQpCiAjZGVmaW5lIGlndF9hdG9taWNf cG9wdWxhdGVfY3J0Y19yZXEocmVxLCBwaXBlLCBwcm9wLCB2YWx1ZSkgXAogCWlndF9hc3NlcnRf bHQoMCwgZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJlcSwgcGlwZS0+Y3J0Y19pZCxcCiAJCQkJ CQkgIHBpcGUtPmF0b21pY19wcm9wc19jcnRjW3Byb3BdLCB2YWx1ZSkpCi0vKioKLSAqIGlndF9h dG9taWNfcG9wdWxhdGVfY29ubmVjdG9yX3JlcToKLSAqIEByZXE6IEEgcG9pbnRlciB0byBkcm1N b2RlQXRvbWljUmVxCi0gKiBAb3V0cHV0OiBBIHBvaW50ZXIgaWd0X291dHB1dF90Ci0gKiBAcHJv cDogb25lIG9mIGlndF9hdG9taWNfY29ubmVjdG9yX3Byb3BlcnRpZXMKLSAqIEB2YWx1ZTogdGhl IHZhbHVlIHRvIGFkZAotICovCi0jZGVmaW5lIGlndF9hdG9taWNfcG9wdWxhdGVfY29ubmVjdG9y X3JlcShyZXEsIG91dHB1dCwgcHJvcCwgdmFsdWUpIFwKLQlpZ3RfYXNzZXJ0X2x0KDAsIGRybU1v ZGVBdG9taWNBZGRQcm9wZXJ0eShyZXEsIG91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvci0+Y29ubmVj dG9yX2lkLFwKLQkJCQkJCSAgb3V0cHV0LT5jb25maWcuYXRvbWljX3Byb3BzX2Nvbm5lY3Rvcltw cm9wXSwgdmFsdWUpKQorCisjZGVmaW5lIGlndF9vdXRwdXRfaXNfcHJvcF9jaGFuZ2VkKG91dHB1 dCwgcHJvcCkgXAorCSghISgob3V0cHV0KS0+Y2hhbmdlZCAmICgxIDw8IChwcm9wKSkpKQorI2Rl ZmluZSBpZ3Rfb3V0cHV0X3NldF9wcm9wX2NoYW5nZWQob3V0cHV0LCBwcm9wKSBcCisJKG91dHB1 dCktPmNoYW5nZWQgfD0gMSA8PCAocHJvcCkKKworI2RlZmluZSBpZ3Rfb3V0cHV0X2NsZWFyX3By b3BfY2hhbmdlZChvdXRwdXQsIHByb3ApIFwKKwkob3V0cHV0KS0+Y2hhbmdlZCAmPSB+KDEgPDwg KHByb3ApKQorCisjZGVmaW5lIGlndF9vdXRwdXRfc2V0X3Byb3BfdmFsdWUob3V0cHV0LCBwcm9w LCB2YWx1ZSkgXAorCWRvIHsgXAorCQkob3V0cHV0KS0+dmFsdWVzW3Byb3BdID0gKHZhbHVlKTsg XAorCQlpZ3Rfb3V0cHV0X3NldF9wcm9wX2NoYW5nZWQob3V0cHV0LCBwcm9wKTsgXAorCX0gd2hp bGUgKDApCiAKIC8qCiAgKiBpZ3RfcGlwZV9yZWZyZXNoOgpkaWZmIC0tZ2l0IGEvdGVzdHMva21z X2F0b21pY19pbnRlcnJ1cHRpYmxlLmMgYi90ZXN0cy9rbXNfYXRvbWljX2ludGVycnVwdGlibGUu YwppbmRleCBhOWY5Y2IxMzc3NzYuLmRjZGJjMjY3ZDNlZiAxMDA2NDQKLS0tIGEvdGVzdHMva21z X2F0b21pY19pbnRlcnJ1cHRpYmxlLmMKKysrIGIvdGVzdHMva21zX2F0b21pY19pbnRlcnJ1cHRp YmxlLmMKQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgdm9pZCBydW5fcGxhbmVfdGVzdChpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5LCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90CiAJCQkJCXBs YW5lLT5waXBlLT5hdG9taWNfcHJvcHNfY3J0Y1tJR1RfQ1JUQ19NT0RFX0lEXSwKIAkJCQkJcGxh bmUtPnBpcGUtPmF0b21pY19wcm9wc19jcnRjW0lHVF9DUlRDX0FDVElWRV0sCiAJCQkJCS8qIGNv bm5lY3RvcjogMSBwcm9wICovCi0JCQkJCW91dHB1dC0+Y29uZmlnLmF0b21pY19wcm9wc19jb25u ZWN0b3JbSUdUX0NPTk5FQ1RPUl9DUlRDX0lEXSwKKwkJCQkJb3V0cHV0LT5wcm9wc1tJR1RfQ09O TkVDVE9SX0NSVENfSURdLAogCQkJCQkvKiBwbGFuZTogcmVtYWluZGVyIHByb3BzICovCiAJCQkJ CXBsYW5lLT5hdG9taWNfcHJvcHNfcGxhbmVbSUdUX1BMQU5FX0NSVENfSURdLAogCQkJCQlwbGFu ZS0+YXRvbWljX3Byb3BzX3BsYW5lW0lHVF9QTEFORV9GQl9JRF0sCkBAIC0yMDYsNyArMjA2LDcg QEAgc3RhdGljIHZvaWQgcnVuX3BsYW5lX3Rlc3QoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51 bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdAogCQkJY2FzZSB0ZXN0X2xlZ2FjeV9kcG1zOiB7CiAJ CQkJc3RydWN0IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgcHJvcCA9IHsKIAkJCQkJ LnZhbHVlID0gRFJNX01PREVfRFBNU19PRkYsCi0JCQkJCS5wcm9wX2lkID0gb3V0cHV0LT5jb25m aWcuYXRvbWljX3Byb3BzX2Nvbm5lY3RvcltJR1RfQ09OTkVDVE9SX0RQTVNdLAorCQkJCQkucHJv cF9pZCA9IG91dHB1dC0+cHJvcHNbSUdUX0NPTk5FQ1RPUl9EUE1TXSwKIAkJCQkJLmNvbm5lY3Rv cl9pZCA9IG91dHB1dC0+aWQsCiAJCQkJfTsKIApkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BhbmVs X2ZpdHRpbmcuYyBiL3Rlc3RzL2ttc19wYW5lbF9maXR0aW5nLmMKaW5kZXggODVhMjMxZTYwZWEy Li5lNGVhMzU1NjExYzMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ttc19wYW5lbF9maXR0aW5nLmMKKysr IGIvdGVzdHMva21zX3BhbmVsX2ZpdHRpbmcuYwpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyB2 b2lkIHRlc3RfYXRvbWljX2Zhc3RzZXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSkKIAlpZ3RfcmVx dWlyZShpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChkaXNwbGF5LT5kcm1fZmQpKSA+PSA1 KTsKIAogCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRwdXQoZGlzcGxheSwgcGlwZSwgb3V0 cHV0KSB7Ci0JCWlmICghb3V0cHV0LT5jb25maWcuYXRvbWljX3Byb3BzX2Nvbm5lY3RvcltJR1Rf Q09OTkVDVE9SX1NDQUxJTkdfTU9ERV0pCisJCWlmICghb3V0cHV0LT5wcm9wc1tJR1RfQ09OTkVD VE9SX1NDQUxJTkdfTU9ERV0pCiAJCQljb250aW51ZTsKIAogCQl0ZXN0X3BhbmVsX2ZpdHRpbmdf ZmFzdHNldChkaXNwbGF5LCBwaXBlLCBvdXRwdXQpOwotLSAKMi4xNC4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK