From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH v2 4/5] drm/i915/guc: rework guc_add_workqueue_item() Date: Fri, 6 May 2016 16:06:54 +0100 Message-ID: <572CB30E.8050602@intel.com> References: <1461780195-17434-1-git-send-email-david.s.gordon@intel.com> <1461780195-17434-4-git-send-email-david.s.gordon@intel.com> <57238158.6090903@linux.intel.com> <572B933C.7080701@intel.com> <572C5C15.5060702@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id AA3DA6EB04 for ; Fri, 6 May 2016 15:06:56 +0000 (UTC) In-Reply-To: <572C5C15.5060702@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: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDYvMDUvMTYgMDk6NTUsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMDUvMDUvMTYg MTk6MzgsIERhdmUgR29yZG9uIHdyb3RlOgo+PiBPbiAyOS8wNC8yMDE2IDE2OjQ0LCBUdnJ0a28g VXJzdWxpbiB3cm90ZToKPj4+Cj4+PiBPbiAyNy8wNC8xNiAxOTowMywgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4+Pj4gTW9zdGx5IGxpdHRsZSBvcHRpbWlzYXRpb25zOyBmb3IgaW5zdGFuY2UsIGlmIHRo ZSBkcml2ZXIgaXMgY29ycmVjdGx5Cj4+Pj4gZm9sbG93aW5nIHRoZSBzdWJtaXNzaW9uIHByb3Rv Y29sLCB0aGUgIm91dCBvZiBzcGFjZSIgY29uZGl0aW9uIGlzCj4+Pj4gaW1wb3NzaWJsZSwgc28g dGhlIHByZXZpb3VzIHJ1bnRpbWUgV0FSTl9PTigpIGlzIHByb21vdGVkIHRvIGEKPj4+PiBHRU1f QlVHX09OKCkgZm9yIGEgbW9yZSBkcmFtYXRpYyBlZmZlY3QgaW4gZGV2ZWxvcG1lbnQgYW5kIGxl c3MgaW1wYWN0Cj4+Pj4gaW4gZW5kLXVzZXIgc3lzdGVtcy4KPj4+Pgo+Pj4+IFNpbWlsYXJseSB3 ZSBjYW4gcmVwbGFjZSBvdGhlciBXQVJOX09OKCkgY29uZGl0aW9ucyB0aGF0IGRvbid0Cj4+Pj4g cmVsYXRlIHRvCj4+Pj4gdGhlIGhhcmR3YXJlIHN0YXRlIHdpdGggZWl0aGVyIEJVSUxEX0JVR19P TigpIGZvciBjb21waWxlLXRpbWUtCj4+Pj4gZGV0ZWN0YWJsZSBpc3N1ZXMsIG9yIEdFTV9CVUdf T04oKSBmb3IgbG9naWNhbCAiY2FuJ3QgaGFwcGVuIiBlcnJvcnMuCj4+Pj4KPj4+PiBXaXRoIHRo b3NlIGNoYW5nZXMsIHdlIGNhbiBjb252ZXJ0IGl0IHRvIHZvaWQsIGFzIHN1Z2dlc3RlZCBieSBD aHJpcwo+Pj4+IFdpbHNvbiwgYW5kIHVwZGF0ZSB0aGUgY2FsbGluZyBjb2RlIGFwcHJvcHJpYXRl bHkuCj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25A aW50ZWwuY29tPgo+Pj4+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51 az4KPj4+Pgo+Pj4+IC0tLQo+Pj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3Vi bWlzc2lvbi5jIHwgNjkKPj4+PiArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPj4+PiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oICAgICAgICAgICB8ICAyICstCj4+Pj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oICAgICAgfCAgMyArLQo+Pj4+ ICAgMyBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAzNyBkZWxldGlvbnMoLSkKPj4+ Pgo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNz aW9uLmMKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+ Pj4+IGluZGV4IDY2MjZlZmYuLjRkMmVhODQgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCj4+Pj4gQEAgLTQ3MCwyMyArNDcwLDI4IEBAIGlu dCBpOTE1X2d1Y193cV9jaGVja19zcGFjZShzdHJ1Y3QKPj4+PiBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxdWVzdCkKPj4+PiAgICAgICByZXR1cm4gLUVBR0FJTjsKPj4+PiAgIH0KPj4+Pgo+Pj4+ IC1zdGF0aWMgaW50IGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0oc3RydWN0IGk5MTVfZ3VjX2NsaWVu dCAqZ2MsCj4+Pj4gLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcnEpCj4+Pj4gK3N0YXRpYyB2b2lkIGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0oc3RydWN0IGk5 MTVfZ3VjX2NsaWVudCAqZ2MsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJxKQo+Pj4+ICAgewo+Pj4+ICsgICAgLyogd3FpX2xlbiBpcyBpbiBE V29yZHMsIGFuZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvbmUtd29yZAo+Pj4+IGhlYWRlciAqLwo+ Pj4+ICsgICAgY29uc3Qgc2l6ZV90IHdxaV9zaXplID0gc2l6ZW9mKHN0cnVjdCBndWNfd3FfaXRl bSk7Cj4+Pgo+Pj4gQWdhaW4sIHUzMiBpcyBjb3JyZWN0IEkgdGhpbmsuCj4+IE5vcGUsIGl0J3Mg YSBzaXplb2YoKSwgYnV0IHRoZSBjb21waWxlciB3aWxsIGNoZWNrIHRoYXQgaXQgZml0cyBpbiB1 MzIKPj4gd2hlbiB3ZSBjb252ZXJ0IGl0IHRvIERXb3JkcyBiZWxvdy4KPgo+IEkgYWxyZWFkeSB3 cm90ZSBpbiB0aGlzIHNhbWUgdGhyZWFkIGZldyBkYXlzIGFnbyB0aGlzIHdhcyBteSBvdmVyc2ln aHQuCgpZZWFoLCBJJ20gYW5zd2VyaW5nIG1lc3NhZ2VzIG91dCBvZiBzZXF1ZW5jZSA6KQoKPj4+ PiArICAgIGNvbnN0IHUzMiB3cWlfbGVuID0gd3FpX3NpemUvc2l6ZW9mKHUzMikgLSAxOwo+Pj4+ ICAgICAgIHN0cnVjdCBndWNfcHJvY2Vzc19kZXNjICpkZXNjOwo+Pj4+ICAgICAgIHN0cnVjdCBn dWNfd3FfaXRlbSAqd3FpOwo+Pj4+ICAgICAgIHZvaWQgKmJhc2U7Cj4+Pj4gLSAgICB1MzIgdGFp bCwgd3FfbGVuLCB3cV9vZmYsIHNwYWNlOwo+Pj4+ICsgICAgdTMyIHNwYWNlLCB0YWlsLCB3cV9v ZmYsIHdxX3BhZ2U7Cj4+Pj4KPj4+PiAgICAgICBkZXNjID0gZ2MtPmNsaWVudF9iYXNlICsgZ2Mt PnByb2NfZGVzY19vZmZzZXQ7Cj4+Pj4gKwo+Pj4+ICsgICAgLyogU3BhY2Ugd2FzIGNoZWNrZWQg ZWFybGllciwgaW4gaTkxNV9ndWNfd3FfY2hlY2tfc3BhY2UoKQo+Pj4+IGFib3ZlICovCj4+Pgo+ Pj4gSXQgbWF5IGJlIGFib3ZlIGluIHRoZSBmaWxlLCBidXQgdGhlIHR3byBkbyBub3QgY2FsbCBv bmUgYW5vdGhlciBzbyBJCj4+PiByZWNvbW1lbmQgc2F5aW5nIGV4YWN0bHkgd2hvIGNhbGxlZCBp dC4KID4+Pgo+PiBJIGRvbid0IHJlYWxseSBtaW5kIHdobyBjYWxsZWQgaXQsIGFzIGxvbmcgYXMg aXQgd2FzIGNhbGxlZCBzb21ldGltZQo+PiBlYXJsaWVyIGluIHRoZSByZXF1ZXN0IHN1Ym1pc3Np b24gcHJvdG9jb2wgLS0gdGhlIGNhbGxzaXRlIG1heSBnZXQgbW92ZWQKPj4gYXJvdW5kIGEgYml0 LiBVc2UgY3Njb3BlKDEpIG9yIHlvdXIgZmF2b3VyaXRlIElERSB0byBmaW5kIGl0Lgo+Cj4gU28g d2hhdCBkb2VzIHRoaXMgY29tbWVudCBzdXBwb3NlZCB0byB0ZWxsIHRoZSByZWFkZXI/CgpJdCB0 ZWxscyB0aGUgcmVhZGVyIHRoYXQgd2UgImNhbm5vdCIgYmUgb3V0IG9mIHNwYWNlLCBiZWNhdXNl IHdlIGFscmVhZHkgCmNoZWNrZWQgdGhhdCB0aGVyZSB3YXMgZW5vdWdoLiBVbmxlc3MsIG9mIGNv dXJzZSwgc29tZWJvZHkgcmVtb3ZlZCB0aGUgCmNoZWNrLiBUaGUgY29tbWl0IG1lc3NhZ2Ugc2F5 cyB0aGF0LCB0b28uCgo+IGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0gZG9lcyBub3QgY2FsbCBpOTE1 X2d1Y193cV9jaGVja19zcGFjZSBzbyAiYWJvdmUiCj4gd2hhdD8gQWJvdmUgaW4gdGhlIGZpbGU/ IE9yIG1heWJlICplYXJsaWVyKiBpbiB0aGUgY2FsbCBzZXF1ZW5jZSBvZgo+IHdoYXQ/IE1pZ2h0 IGFzIHdlbGwgcHV0IGFuIHVzZWZ1bCBjb21tZW50IGluIHdoZW4geW91IGFyZSBhZGRpbmcgb25l LgoKSXQgYWxyZWFkeSBoYXMgYm90aCB0aGUgd29yZHMgImVhcmxpZXIiIChhcyBpbiwgYmVmb3Jl IGluIHRpbWUsIGluIApjYWxsaW5nIHNlcXVlbmNlKSwgYW5kICJhYm92ZSIgKG1lYW5pbmcsIGlu IHRleHR1YWwgb3JkZXIsIGluIHRoaXMgCmZpbGUpLiBTbyB5ZXMsIGJvdGggImFib3ZlIiBBTkQg ImVhcmxpZXIiLiBBbnl3YXksIHRoaXMgb25lLWxpbmVyIGlzIApvbmx5IGhlcmUgdG8ganVzdGlm eSB0aGUgbGFjayBvZiBhbnkgY2hlY2stYW5kLXdhaXQgY29kZS4gT1RPSCBJIGNvdWxkIAphZGQg c29tZSBrZXJuZWxkb2MgZWxzZXdoZXJlIHRvIGV4cGxhaW4gdGhhdCB0aGUgY2FsbGVyIG11c3Qg Y2FsbCAKY2hlY2tfc3BhY2UoKSBiZWZvcmUgY2FsbGluZyBzdWJtaXQoKS4KCj4+Pj4gICAgICAg c3BhY2UgPSBDSVJDX1NQQUNFKGdjLT53cV90YWlsLCBkZXNjLT5oZWFkLCBnYy0+d3Ffc2l6ZSk7 Cj4+Pj4gLSAgICBpZiAoV0FSTl9PTihzcGFjZSA8IHNpemVvZihzdHJ1Y3QgZ3VjX3dxX2l0ZW0p KSkKPj4+PiAtICAgICAgICByZXR1cm4gLUVOT1NQQzsgLyogc2hvdWxkbid0IGhhcHBlbiAqLwo+ Pj4+ICsgICAgR0VNX0JVR19PTihzcGFjZSA8IHdxaV9zaXplKTsKPj4+Cj4+PiBJdCBpcyBpbXBv c3NpYmxlIHRvIGhpdCB0aGlzIG9ubHkgYmVjYXVzZSBvZiB0aGUgc3RydWN0X211dGV4IGd1YXJk aW5nCj4+PiB0aGUgd2hvbGUgdGltZSB3aW5kb3cgZnJvbSByZXF1ZXN0IGNyZWF0aW9uIHRvIHN1 Ym1pc3Npb24uIElmIGluIHRoZQo+Pj4gZnV0dXJlLCBuZWFyIG9yIGZhciwgdGhhdCBnZXRzIGZp eGVkLCB0aGVuIHRoaXMgd2lsbCBuZWVkIHJld29ya2luZy4KPj4+Cj4+PiBJIGRvbid0IGhhdmUg YW55IGJldHRlciBpZGVhcyB0aG91Z2guCj4+Pgo+Pj4gQnV0IGEgV0FSTl9PTiBhbmQgcmV0dXJu IHdvdWxkIGJlIGFsbW9zdCBhcyBnb29kLiBFdmVyeXRoaW5nIGlzIGJldHRlcgo+Pj4gdGhhbiBh IGRlYWQgbWFjaGluZSBvbmUgY2FuJ3Qgc3NoIGludG8uLi4KPj4+Cj4+PiBTbyBJIGFwcGVhbCB0 byBtYWtlIHRoaXMgYSBXQVJOX09OIGFuZCByZXR1cm4uIE5vdGhpbmcgYmFkIHdvdWxkCj4+PiBo YXBwZW4gYXBhcnQgZnJvbSBzb2Z0d2FyZSB0aGlua2luZyBHUFUgaGFzIGh1bmcuCiA+Pgo+PiBJ ZiB0aGUgZHJpdmVyIHZpb2xhdGVzIHRoZSBzZXF1ZW5jaW5nIG9mIGNoZWNrK3N1Ym1pdCB0aGVu IGl0IGRvZXMKPj4gaW5kZWVkIHJlcXVpcmUgcmV3b3JraW5nIC0tIHRoYXQgd291bGQgYmUgYSBi dWcuIEhlbmNlIChHRU1fKUJVR19PTigpLgo+Cj4gVGhpcyBhbHNvIHdhcyBjbGFyaWZpZWQgaW4g dGhpcyBzYW1lIHRocmVhZCBmZXcgZGF5cyBhZ28gYW5kIEkgY29uY2VkZWQKPiB0aGUgcG9pbnQu Cj4KPj4+Pgo+Pj4+IC0gICAgLyogcG9zdGluY3JlbWVudCBXUSB0YWlsIGZvciBuZXh0IHRpbWUg Ki8KPj4+PiAtICAgIHdxX29mZiA9IGdjLT53cV90YWlsOwo+Pj4+IC0gICAgZ2MtPndxX3RhaWwg Kz0gc2l6ZW9mKHN0cnVjdCBndWNfd3FfaXRlbSk7Cj4+Pj4gLSAgICBnYy0+d3FfdGFpbCAmPSBn Yy0+d3Ffc2l6ZSAtIDE7Cj4+Pj4gKyAgICAvKiBUaGUgR3VDIGZpcm13YXJlIHdhbnRzIHRoZSB0 YWlsIGluZGV4IGluIFFXb3Jkcywgbm90IGJ5dGVzICovCj4+Pj4gKyAgICB0YWlsID0gcnEtPnRh aWw7Cj4+Pgo+Pj4gVXNlZCB0byBiZSBzYW1wbGVkIGZyb20gcnEtPnJpbmdidWYtPnRhaWwgLSBh cmUgdGhvc2UgdGhlIHNhbWU/CiA+Pgo+PiBJdCBzaG91bGQgYWx3YXlzIGhhdmUgYmVlbiBycS0+ dGFpbDsgdGhleSdyZSB0aGUgc2FtZSBhdCBwcmVzZW50IGJlY2F1c2UKPj4gaXQgd2FzIGNvcGll ZCBmcm9tIHJpbmdidWZmZXIgYXMgcGFydCBvZiB0aGUgc3VibWlzc2lvbiBwcm9jZXNzLCBidXQg aXQKPj4gbWlnaHQgbm90IGJlIHRoZSBzYW1lIHdpdGggdGhlIHNjaGVkdWxlciAmIHByZWVtcHRp b24uIFNvIGxldCdzIGdldCBpdAo+PiByaWdodCBiZWZvcmUgaXQgYmVjb21lcyBhIG15c3Rlcmlv dXMgYnVnLgo+Pgo+Pj4+ICsgICAgR0VNX0JVR19PTih0YWlsICYgNyk7Cj4+Pj4gKyAgICB0YWls ID4+PSAzOwo+Pj4+ICsgICAgR0VNX0JVR19PTih0YWlsID4gV1FfUklOR19UQUlMX01BWCk7Cj4+ Pj4KPj4+PiAgICAgICAvKiBGb3Igbm93IHdvcmtxdWV1ZSBpdGVtIGlzIDQgRFdzOyB3b3JrcXVl dWUgYnVmZmVyIGlzIDIKPj4+PiBwYWdlcy4gU28gd2UKPj4+PiAgICAgICAgKiBzaG91bGQgbm90 IGhhdmUgdGhlIGNhc2Ugd2hlcmUgc3RydWN0dXJlIHdxaSBpcyBhY3Jvc3MgcGFnZSwKPj4+PiBu ZWl0aGVyCj4+Pj4gQEAgLTQ5NSwxOSArNTAwLDIzIEBAIHN0YXRpYyBpbnQgZ3VjX2FkZF93b3Jr cXVldWVfaXRlbShzdHJ1Y3QKPj4+PiBpOTE1X2d1Y19jbGllbnQgKmdjLAo+Pj4+ICAgICAgICAq IFhYWDogaWYgbm90IHRoZSBjYXNlLCB3ZSBuZWVkIHNhdmUgZGF0YSB0byBhIHRlbXAgd3FpIGFu ZAo+Pj4+IGNvcHkgaXQgdG8KPj4+PiAgICAgICAgKiB3b3JrcXVldWUgYnVmZmVyIGR3IGJ5IGR3 Lgo+Pj4+ICAgICAgICAqLwo+Pj4+IC0gICAgV0FSTl9PTihzaXplb2Yoc3RydWN0IGd1Y193cV9p dGVtKSAhPSAxNik7Cj4+Pj4gLSAgICBXQVJOX09OKHdxX29mZiAmIDMpOwo+Pj4+ICsgICAgQlVJ TERfQlVHX09OKHdxaV9zaXplICE9IDE2KTsKPj4+Pgo+Pj4+IC0gICAgLyogd3Egc3RhcnRzIGZy b20gdGhlIHBhZ2UgYWZ0ZXIgZG9vcmJlbGwgLyBwcm9jZXNzX2Rlc2MgKi8KPj4+PiAtICAgIGJh c2UgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoZ2MtPmNsaWVudF9vYmos Cj4+Pj4gLSAgICAgICAgICAgICh3cV9vZmYgKyBHVUNfREJfU0laRSkgPj4gUEFHRV9TSElGVCkp Owo+Pj4+ICsgICAgLyogcG9zdGluY3JlbWVudCBXUSB0YWlsIGZvciBuZXh0IHRpbWUgKi8KPj4+ PiArICAgIHdxX29mZiA9IGdjLT53cV90YWlsOwo+Pj4+ICsgICAgZ2MtPndxX3RhaWwgKz0gd3Fp X3NpemU7Cj4+Pj4gKyAgICBnYy0+d3FfdGFpbCAmPSBnYy0+d3Ffc2l6ZSAtIDE7Cj4+Pj4gKyAg ICBHRU1fQlVHX09OKHdxX29mZiAmICh3cWlfc2l6ZSAtIDEpKTsKPj4+Cj4+PiBVc2UgdG8gYmUg d3Ffb2ZmICYgMywgbm93IGlzIHdxX29mZiAmIDE1LCB3aGljaCBvbmUgaXMgY29ycmVjdD8KPj4g VGhlIG5ldyBvbmUgOikgSSBtYWRlIGl0IG1vcmUgc3RyaW5nZW50LCBzbyB3ZSBjaGVjayBmb3Ig Y29ycmVjdAo+PiBhbGlnbm1lbnQgb2Ygd3FfdGFpbCB0byBzaXplb2YocXVldWUgaXRlbSksIG5v dCBqdXN0IERXb3JkLgo+Cj4gV29ydGggbWVudGlvbmluZyBpbiB0aGUgY29tbWl0IG1lc3NhZ2U/ IFNpbmNlIGl0IGJlZ2lucyB3aXRoICJNb3N0bHkKPiBsaXR0bGUgb3B0aW1pc2F0aW9uczsiIHJl YWRlcnMvcmV2aWV3ZXJzIGV4cGVjdCB0byBzZWUgbm8gZnVuY3Rpb25hbAo+IGNoYW5nZXMgdGhl bi4KCkl0ICppc24ndCogYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgKnNob3VsZCogYmUgaW1wb3Nz aWJsZSBmb3IgdGhlIHZhbHVlIApldmVyIE5PVCB0byBiZSBhIG11bHRpcGxlIG9mIDE2LCBhbmQg bmVpdGhlciB0aGUgb2xkIHZlcnNpb24gbm9yIHRoZSBuZXcgCnZlcnNpb24gaGFzIGV2ZXIgYmVl biB0cmlnZ2VyZWQuIEl0J3MganVzdCBmdXR1cmUtcHJvb2ZpbmcgZm9yIHRoZSBkYXkgCndoZW4g c29tZW9uZSBlbHNlIGNoYW5nZXMgdGhpcyBjb2RlIGFuZCBpbnRyb2R1Y2VzIGEgYnVnIDopCgo+ Pj4+ICsKPj4+PiArICAgIC8qIFdRIHN0YXJ0cyBmcm9tIHRoZSBwYWdlIGFmdGVyIGRvb3JiZWxs IC8gcHJvY2Vzc19kZXNjICovCj4+Pj4gKyAgICB3cV9wYWdlID0gKHdxX29mZiArIEdVQ19EQl9T SVpFKSA+PiBQQUdFX1NISUZUOwo+Pj4+ICAgICAgIHdxX29mZiAmPSBQQUdFX1NJWkUgLSAxOwo+ Pj4+ICsgICAgYmFzZSA9IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShnYy0+ Y2xpZW50X29iaiwKPj4+PiB3cV9wYWdlKSk7Cj4+Pj4gICAgICAgd3FpID0gKHN0cnVjdCBndWNf d3FfaXRlbSAqKSgoY2hhciAqKWJhc2UgKyB3cV9vZmYpOwo+Pj4+Cj4+Pj4gLSAgICAvKiBsZW4g ZG9lcyBub3QgaW5jbHVkZSB0aGUgaGVhZGVyICovCj4+Pj4gLSAgICB3cV9sZW4gPSBzaXplb2Yo c3RydWN0IGd1Y193cV9pdGVtKSAvIHNpemVvZih1MzIpIC0gMTsKPj4+PiArICAgIC8qIE5vdyBm aWxsIGluIHRoZSA0LXdvcmQgd29yayBxdWV1ZSBpdGVtICovCj4+Pj4gICAgICAgd3FpLT5oZWFk ZXIgPSBXUV9UWVBFX0lOT1JERVIgfAo+Pj4+IC0gICAgICAgICAgICAod3FfbGVuIDw8IFdRX0xF Tl9TSElGVCkgfAo+Pj4+ICsgICAgICAgICAgICAod3FpX2xlbiA8PCBXUV9MRU5fU0hJRlQpIHwK Pj4+PiAgICAgICAgICAgICAgIChycS0+ZW5naW5lLT5ndWNfaWQgPDwgV1FfVEFSR0VUX1NISUZU KSB8Cj4+Pj4gICAgICAgICAgICAgICBXUV9OT19XQ0ZMVVNIX1dBSVQ7Cj4+Pj4KPj4+PiBAQCAt NTE1LDE0ICs1MjQsMTAgQEAgc3RhdGljIGludCBndWNfYWRkX3dvcmtxdWV1ZV9pdGVtKHN0cnVj dAo+Pj4+IGk5MTVfZ3VjX2NsaWVudCAqZ2MsCj4+Pj4gICAgICAgd3FpLT5jb250ZXh0X2Rlc2Mg PSAodTMyKWludGVsX2xyX2NvbnRleHRfZGVzY3JpcHRvcihycS0+Y3R4LAo+Pj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcnEtPmVuZ2luZSk7Cj4+Pj4KPj4+PiAtICAgIC8q IFRoZSBHdUMgZmlybXdhcmUgd2FudHMgdGhlIHRhaWwgaW5kZXggaW4gUVdvcmRzLCBub3QgYnl0 ZXMgKi8KPj4+PiAtICAgIHRhaWwgPSBycS0+cmluZ2J1Zi0+dGFpbCA+PiAzOwo+Pj4+ICAgICAg IHdxaS0+cmluZ190YWlsID0gdGFpbCA8PCBXUV9SSU5HX1RBSUxfU0hJRlQ7Cj4+Pj4gLSAgICB3 cWktPmZlbmNlX2lkID0gMDsgLypYWFg6IHdoYXQgZmVuY2UgdG8gYmUgaGVyZSAqLwo+Pj4+ICsg ICAgd3FpLT5mZW5jZV9pZCA9IHJxLT5zZXFubzsKPj4+Cj4+PiBOb3QgbWVudGlvbmVkIGluIHRo ZSBjb21taXQ/CiA+Pgo+PiBOb3QgYWN0dWFsbHkgdXNlZCBlaXRoZXIsIGJ1dCBJIGV4cGVjdCBp dCB3YXMgcHJvdmlkZWQgZm9yIGEgV2luZG93cwo+PiBmZW5jZSBJRCwgc28gb3VyIGVxdWl2YWxl bnQgaXMgYSBzZXFuby4KPj4gSXQgbWF5IHNob3cgdXAgaW4gYSBHdUMgbG9nLCBpbiB3aGljaCBj YXNlIHNlcW5vIHByb3ZpZGVzIG1vcmUgaGVscGZ1bAo+PiBpbmZvcm1hdGlvbi4KPgo+IEJlc3Qg dG8gbWVudGlvbiBpdCBpbiB0aGUgY29tbWl0IGltaG8sIGFnYWluLCBub3QgdG8gY29uZnVzZQo+ IHJlYWRlcnMvcmV2aWV3ZXJzLgoKQXMgdGhlIChkZWxldGVkKSBjb21tZW50IHNheXMsIHdlIGRp ZG4ndCByZWFsbHkga25vdyB3aGF0IHRvIHB1dCBoZXJlLCAKc28gbm8gb25lIGNhbiBoYXZlIGJl ZW4gcmVseWluZyBvbiBhbiAqYWJzZW5jZSogb2YgdXNlZnVsIGluZm9ybWF0aW9uLiAKTWF5YmUg bmV4dCB3ZWVrIHdlJ2xsIHB1dCB0aGUgc3lzdGVtIHRpbWVzdGFtcCBpbiB0aGlzIGZpZWxkIGlu c3RlYWQuIApBbHNvLCBJJ20gbm90IGd1YXJhbnRlZWluZyB0aGF0IHRoaXMgdmFsdWUgKndpbGwq IHNob3cgdXAgYW55d2hlcmUgYXQgCmFsbDsgZm9yIG5vdyBhdCBsZWFzdCwgR3VDIGxvZ2dpbmcg aXMgYW4gdW5jb21taXR0ZWQgaW50ZXJmYWNlLiBTbyAKbm90aW5nIHRoYXQgd2UncmUgc2V0dGlu ZyBhIHByZXZpb3VzbHktdW51c2VkIHZhbHVlIHRvIGEgbmV3IHZhbHVlIHRoYXQgCmhhcyBubyBm dW5jdGlvbmFsIGVmZmVjdCBhbmQgaXNuJ3QgdmlzaWJsZSB0aHJvdWdoIGFueSBzdGFibGUgaW50 ZXJmYWNlIApzZWVtcyBhIGxpdHRsZSBwb2ludGxlc3MuCgooT2YgY291cnNlLCAqbmV4dCogdGlt ZSBzb21lYm9keSBjaGFuZ2VzIGl0IHRoZXJlIHdpbGwgcHJvYmFibHkgYmUgYSAKZ29vZCByZWFz b24sIGxpa2UgInRpbWVzdGFtcCBpcyBtb3JlIHVzZWZ1bCB0aGFuIHNlcW5vIGluIEd1QyBsb2ci KS4KCj4+Pj4gICAgICAga3VubWFwX2F0b21pYyhiYXNlKTsKPj4+PiAtCj4+Pj4gLSAgICByZXR1 cm4gMDsKPj4+PiAgIH0KPj4+Pgo+Pj4+ICAgLyoqCj4+Pj4gQEAgLTUzNywyNiArNTQyLDIwIEBA IGludCBpOTE1X2d1Y19zdWJtaXQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0Cj4+Pj4gKnJx KQo+Pj4+ICAgICAgIHVuc2lnbmVkIGludCBlbmdpbmVfaWQgPSBycS0+ZW5naW5lLT5ndWNfaWQ7 Cj4+Pj4gICAgICAgc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJnJxLT5pOTE1LT5ndWM7Cj4+Pj4g ICAgICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50ID0gZ3VjLT5leGVjYnVmX2NsaWVu dDsKPj4+PiAtICAgIGludCBxX3JldCwgYl9yZXQ7Cj4+Pj4gKyAgICBpbnQgYl9yZXQ7Cj4+Pgo+ Pj4gV2hhdCBpcyBiX3JldCBvdXQgb2YgaW50ZXJlc3QsIGRvb3IqQiplbGwgcmV0dXJuIGNvZGUg Pwo+Pj4KPj4gWWVzLCBvcmlnaW5hbGx5IHFfcmV0ICYgYl9yZXQsIGZvciByZXR1cm4gZnJvbSBR dWV1aW5nIGFuZCBCZWxscmluZ2luZywKPj4gcmVzcGVjdGl2ZWx5LiBRdWV1aW5nIGNhbiBubyBs b25nZXIgcmV0dXJuIGFuIGVycm9yLCBidXQgcmluZ2luZyB0aGUKPj4gZG9vcmJlbGwgY2FuLCBl dmVuIGlmIG9ubHkgaW4gdGhlIGV2ZW50IG9mIGhhcmR3YXJlIG5vdCBiZWhhdmluZyBhcwo+PiBz cGVjaWZpZWQuCj4+Pgo+Pj4+IC0gICAgcV9yZXQgPSBndWNfYWRkX3dvcmtxdWV1ZV9pdGVtKGNs aWVudCwgcnEpOwo+Pj4+IC0gICAgaWYgKHFfcmV0ID09IDApCj4+Pj4gLSAgICAgICAgYl9yZXQg PSBndWNfcmluZ19kb29yYmVsbChjbGllbnQpOwo+Pj4+ICsgICAgZ3VjX2FkZF93b3JrcXVldWVf aXRlbShjbGllbnQsIHJxKTsKPj4+PiArICAgIGJfcmV0ID0gZ3VjX3JpbmdfZG9vcmJlbGwoY2xp ZW50KTsKPj4+Pgo+Pj4+ICAgICAgIGNsaWVudC0+c3VibWlzc2lvbnNbZW5naW5lX2lkXSArPSAx Owo+Pj4+IC0gICAgaWYgKHFfcmV0KSB7Cj4+Pj4gLSAgICAgICAgY2xpZW50LT5xX2ZhaWwgKz0g MTsKPj4+PiAtICAgICAgICBjbGllbnQtPnJldGNvZGUgPSBxX3JldDsKPj4+PiAtICAgIH0gZWxz ZSBpZiAoYl9yZXQpIHsKPj4+PiArICAgIGNsaWVudC0+cmV0Y29kZSA9IGJfcmV0Owo+Pj4KPj4+ IEkgd2FudGVkIHRvIGFzayBmb3Igd2hhdCBpcyB0aGlzIGZvciBidXQgdGhlbiBmb3VuZCBpdCBp cyBmb3IgZGVidWdmcy4KPj4+Cj4+Pj4gKyAgICBpZiAoYl9yZXQpCj4+Pj4gICAgICAgICAgIGNs aWVudC0+Yl9mYWlsICs9IDE7Cj4+Pj4gLSAgICAgICAgY2xpZW50LT5yZXRjb2RlID0gcV9yZXQg PSBiX3JldDsKPj4+PiAtICAgIH0gZWxzZSB7Cj4+Pj4gLSAgICAgICAgY2xpZW50LT5yZXRjb2Rl ID0gMDsKPj4+PiAtICAgIH0KPj4+PiArCj4+Pj4gICAgICAgZ3VjLT5zdWJtaXNzaW9uc1tlbmdp bmVfaWRdICs9IDE7Cj4+Pj4gICAgICAgZ3VjLT5sYXN0X3NlcW5vW2VuZ2luZV9pZF0gPSBycS0+ c2Vxbm87Cj4+Pj4KPj4+PiAtICAgIHJldHVybiBxX3JldDsKPj4+PiArICAgIHJldHVybiBiX3Jl dDsKPj4+Cj4+PiBDb3VsZCBhbHNvIGtpbGwgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgb25l LCB0aGUgb25seSBjYWxsZXIsCj4+PiBpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZV9hbmRfc3Vi bWl0IGRvZXMgbm90IHVzZSBpdC4gVGhhdCBmdW5jdGlvbgo+Pj4gaXRzZWxmIGRvZXMgbm90IGxv b2sgbGlrZSBpdCBuZWVkcyBhIHJldHVybiB2YWx1ZSBhdCB0aGUgbW9tZW50LiA6KQogPj4KPj4g VGhhdCdzIHJlYWxseSBvbmx5IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBleGl0IHN0cmF0ZWd5 IGZvciBzdWJtaXNzaW9uCj4+IGZhaWx1cmUuIEkgd291bGQgcmF0aGVyIHNlZSBhbGwgcGFydHMg b2YgdGhlIHN1Ym1pc3Npb24gcHJvY2VzcyBhYmxlIHRvCj4+IHJldHVybiBlcnJvcnMgKGUuZy4g aGFyZHdhcmUgbm90IHJlc3BvbmRpbmcpIGFuZCBsZXQgdGhlIHRvcC1sZXZlbCBjb2RlCj4+IGlt cGxlbWVudCBzb21lIHNvcnQgb2YgcmVjb3Zlcnkgc3RyYXRlZ3kuIEFueXdheSwgSSdtIGxlYXZp bmcgdGhpcyBoZXJlCj4+IHVudGlsIHNvbWVvbmUgY2hhbmdlcyB0aGUgY2FsbCBzaWduYXR1cmUg dG8gdm9pZC4KPj4KPj4+PiAgIH0KPj4+Pgo+Pj4+ICAgLyoKPj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2d1Yy5oCj4+Pj4gaW5kZXggNDM2ZjJkNi4uMTBlMWQ1ZSAxMDA2NDQKPj4+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+Pj4gQEAgLTc0LDcgKzc0LDcgQEAgc3RydWN0IGk5MTVf Z3VjX2NsaWVudCB7Cj4+Pj4gICAgICAgLyogR3VDIHN1Ym1pc3Npb24gc3RhdGlzdGljcyAmIHN0 YXR1cyAqLwo+Pj4+ICAgICAgIHVpbnQ2NF90IHN1Ym1pc3Npb25zW0dVQ19NQVhfRU5HSU5FU19O VU1dOwo+Pj4+ICAgICAgIHVpbnQzMl90IG5vX3dxX3NwYWNlOyAgICAgICAgLyogU3BhY2UgcHJl LWNoZWNrIGZhaWxlZCAqLwo+Pj4+IC0gICAgdWludDMyX3QgcV9mYWlsOyAgICAgICAgLyogRmFp bGVkIHRvIHF1ZXVlIChNQlopICAgICovCj4+Pj4gKyAgICB1aW50MzJfdCBxX2ZhaWw7ICAgICAg ICAvKiBObyBsb25nZXIgdXNlZCAgICAgICAgKi8KPj4+Cj4+PiBHZXQgcmlkIG9mIGl0IHRoZW4/ Cj4+IE5vLCBpdCBrZWVwcyB0aGluZ3MgYWxpZ25lZC4gSXQgY2FuIGJlIHJldXNlZCBmb3IgdGhl IG5leHQgdGhpbmcgd2UgbmVlZAo+PiB0byBhZGQuCj4KPiBBRkFJUiB1MzJzIG5lZWQgdG8gYmUg NC1ieXRlIGFsaWduZWQgb24geDg2XzY0IHNvIEkgZG9uJ3QgZ2V0IGl0IGJ1dAo+IHdoYXRldmVy Lgo+Cj4gUmVnYXJkcywKPiBUdnJ0a28KCkl0J3Mgbm90IGp1c3QgYWJvdXQga2VlcGluZyB0aGlu Z3MgRFdvcmQgYWxpZ25lZCwgYnV0IGFsc28gb3B0aW1pc2luZyAKY2FjaGUtbGluZSBwbGFjZW1l bnQuIE9uZSByZWNvbW1lbmRhdGlvbiAoZnJvbSBhbiBJbnRlbC1pbnRlcm5hbCBzaXRlKSAKc3Vn Z2VzdHMgYW55dGhpbmcgdXAgdG8gMTYgYnl0ZXMgYmUgYWxpZ25lZCB0byB0aGUgcG93ZXItb2Yt dHdvIHZhbHVlIAplcXVhbCB0byBvciBncmVhdGVyIHRoYW4gaXRzIG93biBzaXplLCBhbmQgYW55 dGhpbmcgb3ZlciA2NCBieXRlcyAoaW4gCmFnZ3JlZ2F0ZSkgc2hvdWxkIGJlIGFsaWduZWQgdG8g NjQgYnl0ZXMgKDEgY2FjaGVsaW5lKS4gQXQgcHJlc2VudCwgdGhpcyAKc3RydWN0dXJlIGV4YWN0 bHkgZml0cyBhIG11bHRpcGxlIG9mIDY0LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIGp1c3QgbGVhdmUg CnRoZSBzcGFyZSB3b3JkIGZvciByZXVzZSBsYXRlci4KCi5EYXZlLgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK