From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chong Li Subject: [PATCH v7 for Xen 4.7 3/4] libxl: enable per-VCPU parameter settings for RTDS scheduler Date: Wed, 16 Mar 2016 11:47:50 -0500 Message-ID: <1458146871-2813-4-git-send-email-lichong659@gmail.com> References: <1458146871-2813-1-git-send-email-lichong659@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1458146871-2813-1-git-send-email-lichong659@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Chong Li , wei.liu2@citrix.com, Sisu Xi , george.dunlap@eu.citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, ian.campbell@eu.citrix.com, Meng Xu , lichong659@gmail.com, dgolomb@seas.upenn.edu List-Id: xen-devel@lists.xenproject.org QWRkIGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2dldC9zZXQgYW5kIHNjaGVkX3J0ZHNfdmNwdV9n ZXQvc2V0CmZ1bmN0aW9ucyB0byBzdXBwb3J0IHBlci1WQ1BVIHNldHRpbmdzLgoKU2lnbmVkLW9m Zi1ieTogQ2hvbmcgTGkgPGNob25nLmxpQHd1c3RsLmVkdT4KU2lnbmVkLW9mZi1ieTogTWVuZyBY dSA8bWVuZ3h1QGNpcy51cGVubi5lZHU+ClNpZ25lZC1vZmYtYnk6IFNpc3UgWGkgPHhpc2lzdUBn bWFpbC5jb20+CgotLS0KQ2hhbmdlcyBvbiBQQVRDSCB2NjoKMSkgUmVzb2x2ZSBzb21lIGNvZGlu ZyBzdHlsZSBpc3N1ZXMKMikgQ2hhbmdlIHNjaGVkX3J0ZHNfdmFsaWRhdGVfcGFyYW1zKCkKMykg U21hbGwgY2hhbmdlcyBmb3Igc2NoZWRfcnRkc192Y3B1c19wYXJhbXNfc2V0KGFsbCkgZnVuY3Rp b25zCgpDaGFuZ2VzIG9uIFBBVENIIHY1OgoxKSBBZGQgYSBzZXBlcmF0ZSBmdW5jdGlvbiwgc2No ZWRfcnRkc192Y3B1c19wYXJhbXNfc2V0X2FsbCgpLCB0byBzZXQKdGhlIHBhcmFtZXRlcnMgb2Yg YWxsIHZjcHVzIG9mIGEgZG9tYWluLgoKMikgQWRkIGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX3Nl dF9hbGwoKSB0byBpbnZva2UgdGhlIGFib3ZlIGZ1bmN0aW9uLgoKMykgQ29kaW5nIHN0eWxlIGNo YW5nZXMuIChJIGRpZG4ndCBmaW5kIHRoZSBpbmRlbnRhdGlvbiBydWxlcyBmb3IgZnVuY3Rpb24K Y2FsbHMgd2l0aCBsb25nIHBhcmFtZXRlcnMgKHN0aWxsIDQgc3BhY2VzPyksIHNvIEkganVzdCBp bWl0YXRlZCB0aGUKaW5kZW50YXRpb24gc3R5bGUgb2Ygc29tZSBleGlzdGluZyBmdW5jdGlvbnMp CgpDaGFuZ2VzIG9uIFBBVENIIHY0OgoxKSBDb2Rpbmcgc3R5bGUgY2hhbmdlcwoKQ2hhbmdlcyBv biBQQVRDSCB2MzoKMSkgQWRkIHNhbml0eSBjaGVjayBvbiB2Y3B1aWQKCjIpIEFkZCBjb21tZW50 cyBvbiBwZXItZG9tYWluIGFuZCBwZXItdmNwdSBmdW5jdGlvbnMgZm9yIGxpYnhsCnVzZXJzCgpD aGFuZ2VzIG9uIFBBVENIIHYyOgoxKSBOZXcgZGF0YSBzdHJ1Y3R1cmUgKGxpYnhsX3ZjcHVfc2No ZWRfcGFyYW1zIGFuZCBsaWJ4bF9zY2hlZF9wYXJhbXMpCnRvIGhlbHAgcGVyLVZDUFUgc2V0dGlu Z3MuCgoyKSBzY2hlZF9ydGRzX3ZjcHVfZ2V0IG5vdyBjYW4gcmV0dXJuIGEgcmFuZG9tIHN1YnNl dCBvZiB0aGUgcGFyYW1ldGVycwpvZiB0aGUgVkNQVXMgb2YgYSBzcGVjaWZpYyBkb21haW4uCgpD QzogPGRhcmlvLmZhZ2dpb2xpQGNpdHJpeC5jb20+CkNDOiA8Z2VvcmdlLmR1bmxhcEBldS5jaXRy aXguY29tPgpDQzogPGRnb2xvbWJAc2Vhcy51cGVubi5lZHU+CkNDOiA8bWVuZ3h1QGNpcy51cGVu bi5lZHU+CkNDOiA8d2VpLmxpdTJAY2l0cml4LmNvbT4KQ0M6IDxsaWNob25nNjU5QGdtYWlsLmNv bT4KQ0M6IDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDQzogPGlhbi5jYW1wYmVsbEBldS5j aXRyaXguY29tPgotLS0KIHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICAgICB8IDMyMSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQogdG9vbHMvbGlieGwvbGlieGwu aCAgICAgICAgIHwgIDM3ICsrKysrCiB0b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgfCAgMTQg KysKIDMgZmlsZXMgY2hhbmdlZCwgMzQ5IGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmMgYi90b29scy9saWJ4bC9saWJ4bC5jCmlu ZGV4IGJkM2FhYzguLjBmOWZiN2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsLmMKKysr IGIvdG9vbHMvbGlieGwvbGlieGwuYwpAQCAtNTc3MCw2ICs1NzcwLDIwMSBAQCBzdGF0aWMgaW50 IHNjaGVkX2NyZWRpdDJfZG9tYWluX3NldChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwK ICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzY2hlZF9ydGRzX3ZhbGlkYXRlX3BhcmFt cyhsaWJ4bF9fZ2MgKmdjLCBpbnQgcGVyaW9kLCBpbnQgYnVkZ2V0KQoreworICAgIGludCByYzsK KworICAgIGlmIChwZXJpb2QgPCAxKSB7CisgICAgICAgIExPRyhFUlJPUiwgIlZDUFUgcGVyaW9k IGlzIG91dCBvZiByYW5nZSwgIgorICAgICAgICAgICAgICAgICAgICJ2YWxpZCB2YWx1ZXMgYXJl IGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIDEiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsg LyogZXJyb3Igc2NoZWR1bGluZyBwYXJhbWV0ZXIgKi8KKyAgICAgICAgZ290byBvdXQ7CisgICAg fQorCisgICAgaWYgKGJ1ZGdldCA8IDEpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiVkNQVSBidWRn ZXQgaXMgbm90IHNldCBvciBvdXQgb2YgcmFuZ2UsICIKKyAgICAgICAgICAgICAgICAgICAidmFs aWQgdmFsdWVzIGFyZSBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byAxIik7CisgICAgICAgIHJjID0g RVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChidWRnZXQg PiBwZXJpb2QpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiVkNQVSBidWRnZXQgbXVzdCBiZSBzbWFs bGVyIHRoYW4gIgorICAgICAgICAgICAgICAgICAgICJvciBlcXVhbCB0byBWQ1BVIHBlcmlvZCIp OworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9Cisg ICAgcmMgPSAwOworb3V0OgorICAgIHJldHVybiByYzsKK30KKworLyogR2V0IHRoZSBSVERTIHNj aGVkdWxpbmcgcGFyYW1ldGVycyBvZiB2Y3B1KHMpICovCitzdGF0aWMgaW50IHNjaGVkX3J0ZHNf dmNwdV9nZXQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXMgKnNjaW5mbykKK3sKKyAgICB1 aW50MzJfdCBudW1fdmNwdXM7CisgICAgaW50IGksIHIsIHJjOworICAgIHhjX2RvbWluZm9fdCBp bmZvOworICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3NjaGVkcGFyYW1fdmNwdSAqdmNwdXM7CisKKyAg ICByID0geGNfZG9tYWluX2dldGluZm8oQ1RYLT54Y2gsIGRvbWlkLCAxLCAmaW5mbyk7CisgICAg aWYgKHIgPCAwKSB7CisgICAgICAgIExPR0UoRVJST1IsICJnZXR0aW5nIGRvbWFpbiBpbmZvIik7 CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgbnVtX3ZjcHVzID0gc2NpbmZvLT5udW1fdmNwdXMgPyBzY2luZm8tPm51bV92Y3B1cyA6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubWF4X3ZjcHVfaWQgKyAxOworCisg ICAgR0NORVdfQVJSQVkodmNwdXMsIG51bV92Y3B1cyk7CisKKyAgICBpZiAoc2NpbmZvLT5udW1f dmNwdXMgPiAwKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmNwdXM7IGkrKykgewor ICAgICAgICAgICAgaWYgKHNjaW5mby0+dmNwdXNbaV0udmNwdWlkIDwgMCB8fAorICAgICAgICAg ICAgICAgIHNjaW5mby0+dmNwdXNbaV0udmNwdWlkID4gaW5mby5tYXhfdmNwdV9pZCkgeworICAg ICAgICAgICAgICAgIExPRyhFUlJPUiwgIlZDUFUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLCAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsaWQgdmFsdWVzIGFyZSB3aXRoaW4gcmFuZ2Ug ZnJvbSAwIHRvICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubWF4X3ZjcHVf aWQpOworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICAgICAg Z290byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2Y3B1c1tpXS52Y3B1aWQgPSBz Y2luZm8tPnZjcHVzW2ldLnZjcHVpZDsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBm b3IgKGkgPSAwOyBpIDwgbnVtX3ZjcHVzOyBpKyspCisgICAgICAgICAgICB2Y3B1c1tpXS52Y3B1 aWQgPSBpOworCisgICAgciA9IHhjX3NjaGVkX3J0ZHNfdmNwdV9nZXQoQ1RYLT54Y2gsIGRvbWlk LCB2Y3B1cywgbnVtX3ZjcHVzKTsKKyAgICBpZiAociAhPSAwKSB7CisgICAgICAgIExPR0UoRVJS T1IsICJnZXR0aW5nIHZjcHUgc2NoZWQgcnRkcyIpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7 CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBzY2luZm8tPnNjaGVkID0gTElCWExfU0NI RURVTEVSX1JURFM7CisgICAgaWYgKHNjaW5mby0+bnVtX3ZjcHVzID09IDApIHsKKyAgICAgICAg c2NpbmZvLT5udW1fdmNwdXMgPSBudW1fdmNwdXM7CisgICAgICAgIHNjaW5mby0+dmNwdXMgPSBs aWJ4bF9fY2FsbG9jKE5PR0MsIG51bV92Y3B1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGxpYnhsX3NjaGVkX3BhcmFtcykpOworICAgIH0KKyAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtX3ZjcHVzOyBpKyspIHsKKyAgICAgICAgc2NpbmZvLT52Y3B1c1tpXS5w ZXJpb2QgPSB2Y3B1c1tpXS51LnJ0ZHMucGVyaW9kOworICAgICAgICBzY2luZm8tPnZjcHVzW2ld LmJ1ZGdldCA9IHZjcHVzW2ldLnUucnRkcy5idWRnZXQ7CisgICAgICAgIHNjaW5mby0+dmNwdXNb aV0udmNwdWlkID0gdmNwdXNbaV0udmNwdWlkOworICAgIH0KKyAgICByYyA9IDA7CitvdXQ6Cisg ICAgcmV0dXJuIHJjOworfQorCisvKiBTZXQgdGhlIFJURFMgc2NoZWR1bGluZyBwYXJhbWV0ZXJz IG9mIHZjcHUocykgKi8KK3N0YXRpYyBpbnQgc2NoZWRfcnRkc192Y3B1c19wYXJhbXNfc2V0KGxp YnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXMgKnNjaW5mbykKK3sKKyAg ICBpbnQgciwgcmM7CisgICAgaW50IGk7CisgICAgdWludDE2X3QgbWF4X3ZjcHVpZDsKKyAgICB4 Y19kb21pbmZvX3QgaW5mbzsKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZHBhcmFtX3ZjcHUg KnZjcHVzOworCisgICAgciA9IHhjX2RvbWFpbl9nZXRpbmZvKENUWC0+eGNoLCBkb21pZCwgMSwg JmluZm8pOworICAgIGlmIChyIDwgMCkgeworICAgICAgICBMT0dFKEVSUk9SLCAiZ2V0dGluZyBk b21haW4gaW5mbyIpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKyAgICBtYXhfdmNwdWlkID0gaW5mby5tYXhfdmNwdV9pZDsKKworICAgIGlmIChz Y2luZm8tPm51bV92Y3B1cyA8PSAwKSB7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY2lu Zm8tPm51bV92Y3B1czsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc2NpbmZvLT52Y3B1c1tpXS52 Y3B1aWQgPCAwIHx8CisgICAgICAgICAgICAgICAgc2NpbmZvLT52Y3B1c1tpXS52Y3B1aWQgPiBt YXhfdmNwdWlkKSB7CisgICAgICAgICAgICAgICAgTE9HKEVSUk9SLCAiVkNQVSBpbmRleCBpcyBv dXQgb2YgcmFuZ2UsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxpZCB2YWx1ZXMg YXJlIHdpdGhpbiByYW5nZSBmcm9tIDAgdG8gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWF4X3ZjcHVpZCk7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAg ICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gc2No ZWRfcnRkc192YWxpZGF0ZV9wYXJhbXMoZ2MsIHNjaW5mby0+dmNwdXNbaV0ucGVyaW9kLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2luZm8tPnZjcHVzW2ld LmJ1ZGdldCk7CisgICAgICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgICAgICByYyA9IEVS Uk9SX0lOVkFMOworICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIEdDTkVXX0FSUkFZKHZjcHVzLCBzY2luZm8tPm51bV92Y3B1cyk7Cisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY2luZm8tPm51bV92Y3B1czsgaSsrKSB7CisgICAgICAg ICAgICB2Y3B1c1tpXS52Y3B1aWQgPSBzY2luZm8tPnZjcHVzW2ldLnZjcHVpZDsKKyAgICAgICAg ICAgIHZjcHVzW2ldLnUucnRkcy5wZXJpb2QgPSBzY2luZm8tPnZjcHVzW2ldLnBlcmlvZDsKKyAg ICAgICAgICAgIHZjcHVzW2ldLnUucnRkcy5idWRnZXQgPSBzY2luZm8tPnZjcHVzW2ldLmJ1ZGdl dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHIgPSB4Y19zY2hlZF9ydGRzX3ZjcHVfc2V0KENU WC0+eGNoLCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3B1cywgc2Np bmZvLT5udW1fdmNwdXMpOworICAgIGlmIChyICE9IDApIHsKKyAgICAgICAgTE9HRShFUlJPUiwg InNldHRpbmcgdmNwdSBzY2hlZCBydGRzIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAg ICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIHJjID0gMDsKK291dDoKKyAgICByZXR1cm4gcmM7 Cit9CisKKy8qIFNldCB0aGUgUlREUyBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgb2YgYWxsIHZjcHVz IG9mIGEgZG9tYWluICovCitzdGF0aWMgaW50IHNjaGVkX3J0ZHNfdmNwdXNfcGFyYW1zX3NldF9h bGwobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXMgKnNjaW5mbykKK3sKKyAgICBp bnQgciwgcmM7CisgICAgaW50IGk7CisgICAgdWludDE2X3QgbWF4X3ZjcHVpZDsKKyAgICB4Y19k b21pbmZvX3QgaW5mbzsKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZHBhcmFtX3ZjcHUgKnZj cHVzOworICAgIHVpbnQzMl90IG51bV92Y3B1czsKKworICAgIHIgPSB4Y19kb21haW5fZ2V0aW5m byhDVFgtPnhjaCwgZG9taWQsIDEsICZpbmZvKTsKKyAgICBpZiAociA8IDApIHsKKyAgICAgICAg TE9HRShFUlJPUiwgImdldHRpbmcgZG9tYWluIGluZm8iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9G QUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgbWF4X3ZjcHVpZCA9IGluZm8ubWF4 X3ZjcHVfaWQ7CisKKyAgICBpZiAoc2NpbmZvLT5udW1fdmNwdXMgIT0gMSkgeworICAgICAgICBy YyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9IGVsc2UgeworICAgICAg ICBpZiAoc2NoZWRfcnRkc192YWxpZGF0ZV9wYXJhbXMoZ2MsIHNjaW5mby0+dmNwdXNbMF0ucGVy aW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpbmZvLT52Y3B1 c1swXS5idWRnZXQpKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICAg ICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgbnVtX3ZjcHVzID0gbWF4X3ZjcHVpZCAr IDE7CisgICAgICAgIEdDTkVXX0FSUkFZKHZjcHVzLCBudW1fdmNwdXMpOworICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtX3ZjcHVzOyBpKyspIHsKKyAgICAgICAgICAgIHZjcHVzW2ldLnZjcHVp ZCA9IGk7CisgICAgICAgICAgICB2Y3B1c1tpXS51LnJ0ZHMucGVyaW9kID0gc2NpbmZvLT52Y3B1 c1swXS5wZXJpb2Q7CisgICAgICAgICAgICB2Y3B1c1tpXS51LnJ0ZHMuYnVkZ2V0ID0gc2NpbmZv LT52Y3B1c1swXS5idWRnZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByID0geGNfc2NoZWRf cnRkc192Y3B1X3NldChDVFgtPnhjaCwgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmNwdXMsIG51bV92Y3B1cyk7CisgICAgaWYgKHIgIT0gMCkgeworICAgICAgICBMT0dF KEVSUk9SLCAic2V0dGluZyB2Y3B1IHNjaGVkIHJ0ZHMiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9G QUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgcmMgPSAwOworb3V0OgorICAgIHJl dHVybiByYzsKK30KKwogc3RhdGljIGludCBzY2hlZF9ydGRzX2RvbWFpbl9nZXQobGlieGxfX2dj ICpnYywgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZG9tYWluX3NjaGVkX3BhcmFtcyAqc2NpbmZvKQogewpAQCAtNTgwMiwzMCArNTk5NywxMCBA QCBzdGF0aWMgaW50IHNjaGVkX3J0ZHNfZG9tYWluX3NldChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJf dCBkb21pZCwKICAgICAgICAgTE9HRShFUlJPUiwgImdldHRpbmcgZG9tYWluIHNjaGVkIHJ0ZHMi KTsKICAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CiAgICAgfQotCi0gICAgaWYgKHNjaW5mby0+ cGVyaW9kICE9IExJQlhMX0RPTUFJTl9TQ0hFRF9QQVJBTV9QRVJJT0RfREVGQVVMVCkgewotICAg ICAgICBpZiAoc2NpbmZvLT5wZXJpb2QgPCAxKSB7Ci0gICAgICAgICAgICBMT0coRVJST1IsICJW Q1BVIHBlcmlvZCBpcyBub3Qgc2V0IG9yIG91dCBvZiByYW5nZSwgIgotICAgICAgICAgICAgICAg ICAgICAgICAidmFsaWQgdmFsdWVzIGFyZSBsYXJnZXIgdGhhbiAxIik7Ci0gICAgICAgICAgICBy ZXR1cm4gRVJST1JfSU5WQUw7Ci0gICAgICAgIH0KLSAgICAgICAgc2RvbS5wZXJpb2QgPSBzY2lu Zm8tPnBlcmlvZDsKLSAgICB9Ci0KLSAgICBpZiAoc2NpbmZvLT5idWRnZXQgIT0gTElCWExfRE9N QUlOX1NDSEVEX1BBUkFNX0JVREdFVF9ERUZBVUxUKSB7Ci0gICAgICAgIGlmIChzY2luZm8tPmJ1 ZGdldCA8IDEpIHsKLSAgICAgICAgICAgIExPRyhFUlJPUiwgIlZDUFUgYnVkZ2V0IGlzIG5vdCBz ZXQgb3Igb3V0IG9mIHJhbmdlLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICJ2YWxpZCB2YWx1 ZXMgYXJlIGxhcmdlciB0aGFuIDEiKTsKKyAgICBpZiAoc2NpbmZvLT5wZXJpb2QgIT0gTElCWExf RE9NQUlOX1NDSEVEX1BBUkFNX1BFUklPRF9ERUZBVUxUICYmCisgICAgICAgIHNjaW5mby0+YnVk Z2V0ICE9IExJQlhMX0RPTUFJTl9TQ0hFRF9QQVJBTV9CVURHRVRfREVGQVVMVCkKKyAgICAgICAg aWYgKHNjaGVkX3J0ZHNfdmFsaWRhdGVfcGFyYW1zKGdjLCBzY2luZm8tPnBlcmlvZCwgc2NpbmZv LT5idWRnZXQpKQogICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwotICAgICAgICB9Ci0g ICAgICAgIHNkb20uYnVkZ2V0ID0gc2NpbmZvLT5idWRnZXQ7Ci0gICAgfQotCi0gICAgaWYgKHNk b20uYnVkZ2V0ID4gc2RvbS5wZXJpb2QpIHsKLSAgICAgICAgTE9HKEVSUk9SLCAiVkNQVSBidWRn ZXQgaXMgbGFyZ2VyIHRoYW4gVkNQVSBwZXJpb2QsICIKLSAgICAgICAgICAgICAgICAgICAiVkNQ VSBidWRnZXQgc2hvdWxkIGJlIG5vIGxhcmdlciB0aGFuIFZDUFUgcGVyaW9kIik7Ci0gICAgICAg IHJldHVybiBFUlJPUl9JTlZBTDsKLSAgICB9CiAKICAgICByYyA9IHhjX3NjaGVkX3J0ZHNfZG9t YWluX3NldChDVFgtPnhjaCwgZG9taWQsICZzZG9tKTsKICAgICBpZiAocmMgPCAwKSB7CkBAIC01 ODczLDYgKzYwNDgsNzQgQEAgaW50IGxpYnhsX2RvbWFpbl9zY2hlZF9wYXJhbXNfc2V0KGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAgICByZXR1cm4gcmV0OwogfQogCitpbnQgbGli eGxfdmNwdV9zY2hlZF9wYXJhbXNfc2V0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfdmNwdV9zY2hlZF9w YXJhbXMgKnNjaW5mbykKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfc2NoZWR1bGVy IHNjaGVkID0gc2NpbmZvLT5zY2hlZDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoc2NoZWQgPT0g TElCWExfU0NIRURVTEVSX1VOS05PV04pCisgICAgICAgIHNjaGVkID0gbGlieGxfX2RvbWFpbl9z Y2hlZHVsZXIoZ2MsIGRvbWlkKTsKKworICAgIHN3aXRjaCAoc2NoZWQpIHsKKyAgICBjYXNlIExJ QlhMX1NDSEVEVUxFUl9TRURGOgorICAgICAgICBMT0coRVJST1IsICJTRURGIHNjaGVkdWxlciBu byBsb25nZXIgYXZhaWxhYmxlIik7CisgICAgICAgIHJjID0gRVJST1JfRkVBVFVSRV9SRU1PVkVE OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9DUkVESVQ6CisgICAg Y2FzZSBMSUJYTF9TQ0hFRFVMRVJfQ1JFRElUMjoKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9B UklOQzY1MzoKKyAgICAgICAgTE9HKEVSUk9SLCAicGVyLVZDUFUgcGFyYW1ldGVyIHNldHRpbmcg bm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzY2hlZHVsZXIiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9J TlZBTDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVMRVJfUlREUzoKKyAg ICAgICAgcmMgPSBzY2hlZF9ydGRzX3ZjcHVzX3BhcmFtc19zZXQoZ2MsIGRvbWlkLCBzY2luZm8p OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBMT0coRVJST1IsICJVbmtu b3duIHNjaGVkdWxlciIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBicmVh azsKKyAgICB9CisKKyAgICBHQ19GUkVFOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhs X3ZjcHVfc2NoZWRfcGFyYW1zX3NldF9hbGwobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfdmNwdV9z Y2hlZF9wYXJhbXMgKnNjaW5mbykKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfc2No ZWR1bGVyIHNjaGVkID0gc2NpbmZvLT5zY2hlZDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoc2No ZWQgPT0gTElCWExfU0NIRURVTEVSX1VOS05PV04pCisgICAgICAgIHNjaGVkID0gbGlieGxfX2Rv bWFpbl9zY2hlZHVsZXIoZ2MsIGRvbWlkKTsKKworICAgIHN3aXRjaCAoc2NoZWQpIHsKKyAgICBj YXNlIExJQlhMX1NDSEVEVUxFUl9TRURGOgorICAgICAgICBMT0coRVJST1IsICJTRURGIHNjaGVk dWxlciBubyBsb25nZXIgYXZhaWxhYmxlIik7CisgICAgICAgIHJjID0gRVJST1JfRkVBVFVSRV9S RU1PVkVEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9DUkVESVQ6 CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVMRVJfQ1JFRElUMjoKKyAgICBjYXNlIExJQlhMX1NDSEVE VUxFUl9BUklOQzY1MzoKKyAgICAgICAgTE9HKEVSUk9SLCAicGVyLVZDUFUgcGFyYW1ldGVyIHNl dHRpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzY2hlZHVsZXIiKTsKKyAgICAgICAgcmMgPSBF UlJPUl9JTlZBTDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVMRVJfUlRE UzoKKyAgICAgICAgcmMgPSBzY2hlZF9ydGRzX3ZjcHVzX3BhcmFtc19zZXRfYWxsKGdjLCBkb21p ZCwgc2NpbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HKEVS Uk9SLCAiVW5rbm93biBzY2hlZHVsZXIiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgR0NfRlJFRTsKKyAgICByZXR1cm4gcmM7Cit9CisK IGludCBsaWJ4bF9kb21haW5fc2NoZWRfcGFyYW1zX2dldChsaWJ4bF9jdHggKmN0eCwgdWludDMy X3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWlu X3NjaGVkX3BhcmFtcyAqc2NpbmZvKQogewpAQCAtNTkwNyw2ICs2MTUwLDM4IEBAIGludCBsaWJ4 bF9kb21haW5fc2NoZWRfcGFyYW1zX2dldChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs CiAgICAgcmV0dXJuIHJldDsKIH0KIAoraW50IGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2dldChs aWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zICpzY2luZm8pCit7CisgICAgR0NfSU5JVChj dHgpOworICAgIGludCByYzsKKworICAgIHNjaW5mby0+c2NoZWQgPSBsaWJ4bF9fZG9tYWluX3Nj aGVkdWxlcihnYywgZG9taWQpOworCisgICAgc3dpdGNoIChzY2luZm8tPnNjaGVkKSB7CisgICAg Y2FzZSBMSUJYTF9TQ0hFRFVMRVJfU0VERjoKKyAgICAgICAgTE9HKEVSUk9SLCAiU0VERiBzY2hl ZHVsZXIgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSIpOworICAgICAgICByYyA9IEVSUk9SX0ZFQVRV UkVfUkVNT1ZFRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVMRVJfQ1JF RElUOgorICAgIGNhc2UgTElCWExfU0NIRURVTEVSX0NSRURJVDI6CisgICAgY2FzZSBMSUJYTF9T Q0hFRFVMRVJfQVJJTkM2NTM6CisgICAgICAgIExPRyhFUlJPUiwgInBlci1WQ1BVIHBhcmFtZXRl ciBnZXR0aW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2NoZWR1bGVyIik7CisgICAgICAgIHJj ID0gRVJST1JfSU5WQUw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTElCWExfU0NIRURVTEVS X1JURFM6CisgICAgICAgIHJjID0gc2NoZWRfcnRkc192Y3B1X2dldChnYywgZG9taWQsIHNjaW5m byk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIExPRyhFUlJPUiwgIlVu a25vd24gc2NoZWR1bGVyIik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGJy ZWFrOworICAgIH0KKworICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHJjOworfQorCiBzdGF0aWMg aW50IGxpYnhsX19kb21haW5fczNfcmVzdW1lKGxpYnhsX19nYyAqZ2MsIGludCBkb21pZCkKIHsK ICAgICBpbnQgcmMgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGwuaCBiL3Rvb2xz L2xpYnhsL2xpYnhsLmgKaW5kZXggNmI3Mzg0OC4uZGYzNWQwOSAxMDA2NDQKLS0tIGEvdG9vbHMv bGlieGwvbGlieGwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bC5oCkBAIC0yMDYsNiArMjA2LDE3 IEBACiAjZGVmaW5lIExJQlhMX0hBVkVfREVWSUNFX01PREVMX1VTRVIgMQogCiAvKgorICogbGli eGxfdmNwdV9zY2hlZF9wYXJhbXMgaXMgdXNlZCB0byBzdG9yZSBwZXItdmNwdSBwYXJhbXMuCisg Ki8KKyNkZWZpbmUgTElCWExfSEFWRV9WQ1BVX1NDSEVEX1BBUkFNUyAxCisKKy8qCisgKiBMSUJY TF9IQVZFX1NDSEVEX1JURFNfVkNQVV9QQVJBTVMgaW5kaWNhdGVzIFJURFMgc2NoZWR1bGVyCisg KiBub3cgc3VwcG9ydHMgcGVyLXZjcHUgc2V0dGluZ3MuCisgKi8KKyNkZWZpbmUgTElCWExfSEFW RV9TQ0hFRF9SVERTX1ZDUFVfUEFSQU1TIDEKKworLyoKICAqIGxpYnhsX2RvbWFpbl9idWlsZF9p bmZvIGhhcyB0aGUgYXJtLmdpY192ZXJzaW9uIGZpZWxkLgogICovCiAjZGVmaW5lIExJQlhMX0hB VkVfQlVJTERJTkZPX0FSTV9HSUNfVkVSU0lPTiAxCkBAIC0xNjQ3LDExICsxNjU4LDM3IEBAIGlu dCBsaWJ4bF9zY2hlZF9jcmVkaXRfcGFyYW1zX3NldChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg cG9vbGlkLAogI2RlZmluZSBMSUJYTF9ET01BSU5fU0NIRURfUEFSQU1fRVhUUkFUSU1FX0RFRkFV TFQgLTEKICNkZWZpbmUgTElCWExfRE9NQUlOX1NDSEVEX1BBUkFNX0JVREdFVF9ERUZBVUxUICAg IC0xCiAKKy8qIFBlci1WQ1BVIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgTElCWExfU0NIRURfUEFS QU1fVkNQVV9JTkRFWF9ERUZBVUxUICAgLTEKKworLyogR2V0IHRoZSBwZXItZG9tYWluIHNjaGVk dWxpbmcgcGFyYW1ldGVycy4KKyAqIEZvciBzY2hlZHVsZXJzIHRoYXQgc3VwcG9ydCBwZXItdmNw dSBzZXR0aW5ncyAoZS5nLiwgUlREUyksCisgKiBjYWxsaW5nICpfZG9tYWluX2dldCBmdW5jdGlv bnMgd2lsbCBnZXQgZGVmYXVsdCBzY2hlZHVsaW5nCisgKiBwYXJhbWV0ZXJzLgorICovCiBpbnQg bGlieGxfZG9tYWluX3NjaGVkX3BhcmFtc19nZXQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRv bWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9zY2hl ZF9wYXJhbXMgKnBhcmFtcyk7CisKKy8qIFNldCB0aGUgcGVyLWRvbWFpbiBzY2hlZHVsaW5nIHBh cmFtZXRlcnMuCisgKiBGb3Igc2NoZWR1bGVycyB0aGF0IHN1cHBvcnQgcGVyLXZjcHUgc2V0dGlu Z3MgKGUuZy4sIFJURFMpLAorICogY2FsbGluZyAqX2RvbWFpbl9zZXQgZnVuY3Rpb25zIHdpbGwg c2V0IGFsbCB2Y3B1cyB3aXRoIHRoZSBzYW1lCisgKiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMuCisg Ki8KIGludCBsaWJ4bF9kb21haW5fc2NoZWRfcGFyYW1zX3NldChsaWJ4bF9jdHggKmN0eCwgdWlu dDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGli eGxfZG9tYWluX3NjaGVkX3BhcmFtcyAqcGFyYW1zKTsKIAorLyogR2V0IHRoZSBwZXItdmNwdSBz Y2hlZHVsaW5nIHBhcmFtZXRlcnMgKi8KK2ludCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19nZXQo bGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyAqcGFyYW1zKTsKKworLyogU2V0IHRoZSBw ZXItdmNwdSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgKi8KK2ludCBsaWJ4bF92Y3B1X3NjaGVkX3Bh cmFtc19zZXQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyAqcGFyYW1zKTsK KworLyogU2V0IHRoZSBwZXItdmNwdSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgb2YgYWxsIHZjcHVz IG9mIGEgZG9tYWluICovCitpbnQgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfc2V0X2FsbChsaWJ4 bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyAqcGFyYW1zKTsKKwogaW50IGxp YnhsX3NlbmRfdHJpZ2dlcihsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3RyaWdnZXIgdHJpZ2dlciwgdWludDMyX3QgdmNwdWlkKTsK IGludCBsaWJ4bF9zZW5kX3N5c3JxKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgY2hh ciBzeXNycSk7CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgYi90b29s cy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKaW5kZXggY2YzNzMwZi4uNzQ4N2ZjOSAxMDA2NDQKLS0t IGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5 cGVzLmlkbApAQCAtMzc4LDYgKzM3OCwyMCBAQCBsaWJ4bF9kb21haW5fcmVzdG9yZV9wYXJhbXMg PSBTdHJ1Y3QoImRvbWFpbl9yZXN0b3JlX3BhcmFtcyIsIFsKICAgICAoInN0cmVhbV92ZXJzaW9u IiwgdWludDMyLCB7J2luaXRfdmFsJzogJzEnfSksCiAgICAgXSkKIAorbGlieGxfc2NoZWRfcGFy YW1zID0gU3RydWN0KCJzY2hlZF9wYXJhbXMiLFsKKyAgICAoInZjcHVpZCIsICAgICAgIGludGVn ZXIsIHsnaW5pdF92YWwnOiAnTElCWExfU0NIRURfUEFSQU1fVkNQVV9JTkRFWF9ERUZBVUxUJ30p LAorICAgICgid2VpZ2h0IiwgICAgICAgaW50ZWdlciwgeydpbml0X3ZhbCc6ICdMSUJYTF9ET01B SU5fU0NIRURfUEFSQU1fV0VJR0hUX0RFRkFVTFQnfSksCisgICAgKCJjYXAiLCAgICAgICAgICBp bnRlZ2VyLCB7J2luaXRfdmFsJzogJ0xJQlhMX0RPTUFJTl9TQ0hFRF9QQVJBTV9DQVBfREVGQVVM VCd9KSwKKyAgICAoInBlcmlvZCIsICAgICAgIGludGVnZXIsIHsnaW5pdF92YWwnOiAnTElCWExf RE9NQUlOX1NDSEVEX1BBUkFNX1BFUklPRF9ERUZBVUxUJ30pLAorICAgICgiZXh0cmF0aW1lIiwg ICAgaW50ZWdlciwgeydpbml0X3ZhbCc6ICdMSUJYTF9ET01BSU5fU0NIRURfUEFSQU1fRVhUUkFU SU1FX0RFRkFVTFQnfSksCisgICAgKCJidWRnZXQiLCAgICAgICBpbnRlZ2VyLCB7J2luaXRfdmFs JzogJ0xJQlhMX0RPTUFJTl9TQ0hFRF9QQVJBTV9CVURHRVRfREVGQVVMVCd9KSwKKyAgICBdKQor CitsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyA9IFN0cnVjdCgidmNwdV9zY2hlZF9wYXJhbXMiLFsK KyAgICAoInNjaGVkIiwgICAgICAgIGxpYnhsX3NjaGVkdWxlciksCisgICAgKCJ2Y3B1cyIsICAg ICAgICBBcnJheShsaWJ4bF9zY2hlZF9wYXJhbXMsICJudW1fdmNwdXMiKSksCisgICAgXSkKKwog bGlieGxfZG9tYWluX3NjaGVkX3BhcmFtcyA9IFN0cnVjdCgiZG9tYWluX3NjaGVkX3BhcmFtcyIs WwogICAgICgic2NoZWQiLCAgICAgICAgbGlieGxfc2NoZWR1bGVyKSwKICAgICAoIndlaWdodCIs ICAgICAgIGludGVnZXIsIHsnaW5pdF92YWwnOiAnTElCWExfRE9NQUlOX1NDSEVEX1BBUkFNX1dF SUdIVF9ERUZBVUxUJ30pLAotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=