Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sgCMb-00Gadn-Cg for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Aug 2024 00:04:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sgCMY-004l0O-WD for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Aug 2024 00:04:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sgCJT-004gwA-VA for pgsql-hackers@lists.postgresql.org; Tue, 20 Aug 2024 00:01:28 +0000 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sgCJP-000WUw-Ti for pgsql-hackers@lists.postgresql.org; Tue, 20 Aug 2024 00:01:27 +0000 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-5d5bf833de7so3046661eaf.2 for ; Mon, 19 Aug 2024 17:01:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724112083; x=1724716883; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=WeBIFJRQTpoII1oC2hWcdkO+beFCUiNiRVM9MRzNatA=; b=mE+M2AvJLDarl+LjODu5P+elG80kASfCA4tQolq6yVUwCsSEJxeOfCh+MwfbwL3Vvf aui8kGWbx2xU91pHniw7+R/eqTqKQT/9TYiUJWvhTH9qeZlZKnrnumpF7sGM67cdlM9I cEGyS2TM7RBgNQW09aQ4easrkSKSAycSq0MRCaAhfXZBSYm2Vkcpk7mjZrrkNHNn+lZ9 3yRgE74gEl9dW7US9nSodlN2/zfbsh24PVBScgALcZveKJooJQ4FOxM0hvLV80YJj6qu CfavGXD0JoLa6vibViDzvDMhCPxal809g35TdNVg7kB9Z4kMf7TVo1ySfzVrT1RKnJyX vFoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724112083; x=1724716883; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WeBIFJRQTpoII1oC2hWcdkO+beFCUiNiRVM9MRzNatA=; b=o167VGmU/M7z+zkgyEh7ruRL2e+aNmiuRh4oFJYhYxzCU1kVMY9CtUSkbCMKAxj1J9 PCNJKZN9KqEc14PuxjCMdrCIBLJ0Gf6fDNni0dLEfvkijxvW+ekJ0L2H+TipmGa1X4IP SlCgaOX6mBHXg8GnyR7pt9JmXEuE1PxtW28DegHAI0GxXgiG1fada43D1+EwMGnRCVdm rAAH33bkxmVI0fiL7c8jsrk0FamJbrrd1DDS7wImEKMa37HOTszOC3FXgdT2orKXT2ZQ s9I6YYENYGeKxCq0kyTODml+Sos3KMJ3DgaPQ94NWLJtNX9tsX/OKkTviOUqohxe0ANY RhaA== X-Gm-Message-State: AOJu0YyxgFe6MsJFCHMD4gSqQLhPPpLgO1f/0nGPDlQSi2xs4K+8cK8N 6nSlqA4eqpLYUV/1nf202/ezcxudTFrC9hhywWc4DZrCSZ579SLhsSbLriIDDRu+ybH4icozG2o +CQ1/68SnlgdbtqvvxNnKXL1enFE= X-Google-Smtp-Source: AGHT+IEtHfpxQ5NxXaN/05DxOV+O+lJiQIoFZEAnE6BVbAoh6Nv7dsPnSBgqO7svEmaSY5zT8gPkx50YFVJ+BBDlq1I= X-Received: by 2002:a05:6358:6f15:b0:19e:fa9c:5ec9 with SMTP id e5c5f4694b2df-1b393192dc9mr1615592355d.9.1724112082256; Mon, 19 Aug 2024 17:01:22 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Tue, 20 Aug 2024 08:00:00 +0800 Message-ID: Subject: Re: on_error table, saving error info to a table To: Nishant Sharma Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000037f3450620122005" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000037f3450620122005 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jul 15, 2024 at 1:42=E2=80=AFPM Nishant Sharma wrote: > > Thanks for the patch! > > I was not able to understand why we need a special error table for COPY? > Can't we just log it in a new log error file for COPY in a proper format?= Like > using table approach, PG would be unnecessarily be utilising its resource= s like > extra CPU to format the data in pages to store in its table format, writi= ng and > keeping the table in its store (which may or may not be required), the us= er > would be required to make sure it creates the error table with proper col= umns > to be used in COPY, etc.. > > > Meanwhile, please find some quick review comments:- > > 1) Patch needs re-base. > > 2) If the columns of the error table are fixed, then why not create it in= ternally using > some function or something instead of making the user create the table co= rrectly > with all the columns? I'll think about it more. previously, i tried to use SPI to create tables, but at that time, i thought that's kind of excessive. you need to create the table, check whether the table name is unique, check the privilege. now we quickly error out if the error saving table definition does not meet. I guess that's less work to do. > 3) I think, error messages can be improved, which looks big to me. > > 4) I think no need of below pstrdup, As CStringGetTextDatum creates a tex= t copy for > the same:- > err_code =3D pstrdup(unpack_sql_state(cstate->escontext->error_data->sqle= rrcode)); > > t_values[9] =3D CStringGetTextDatum(err_code); > > 5) Should 'on_error_rel' as not NULL be checked along with below, as I ca= n see it is > passed as NULL from two locations? > + if (cstate->opts.on_error =3D=3D COPY_ON_ERROR_TABLE) > + { > > 6) Below declarations can be shifted to the if block, where they are used= . Instead of > keeping them as global in function? > + HeapTuple on_error_tup; > + TupleDesc on_error_tupDesc; > > + if (cstate->opts.on_error =3D=3D COPY_ON_ERROR_TABLE) > + { > > 7) Below comment going beyond 80 char width:- > * if on_error is specified with 'table', then on_error_rel is the error s= aving table > > 8) Need space after 'false' > err_detail ? false: true; > > 9) Below call can fit in a single line. No need to keep the 2nd and 3rd p= arameter in > nextlines. > + on_error_tup =3D heap_form_tuple(on_error_tupDesc, > + t_values, > + t_isnull); > > 10) Variable declarations Tab Spacing issue at multiple places. > > 11) Comments in the patch are not matched to PG comment style. > > > Kindly note I have not tested the patch properly yet. Only checked it wit= h a positive test > case. As I will wait for a conclusion on my opinion of the proposed patch= . > almost all these issues have been addressed. The error messages are still not so good. I need to polish it. --00000000000037f3450620122005 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-new-on_error-option-table-saving-error-info-to-ta.patch" Content-Disposition: attachment; filename="v2-0001-new-on_error-option-table-saving-error-info-to-ta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m012iype0 RnJvbSBmMzQ0MzE0YmZhYjA2ZGZiYTNmZDYwYzdjZWYxNmRkMmQ0ZDQxODAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTkgQXVnIDIwMjQgMjE6NTg6NDYgKzA4MDAKU3ViamVjdDogW1BBVENIIHYy IDEvMV0gbmV3IG9uX2Vycm9yIG9wdGlvbjogInRhYmxlIiBzYXZpbmcgZXJyb3IgaW5mbyB0bwog dGFibGUKCmludHJvZHVjZSBvbl9lcnJvciB0YWJsZSBvcHRpb24gZm9yIENPUFkgRlJPTS4KdGhl IHN5bnRheCBpcyB7b25fZXJyb3IgdGFibGUsIHRhYmxlICdlcnJvcl9zYXZpbmdfdGJsJ30uCgp3 ZSBmaXJzdCBjaGVjayB0YWJsZSBlcnJvcl9zYXZpbmdfdGJsJ3MgZXhpc3RlbmNlIGFuZCBkYXRh IGRlZmluaXRpb24uCmlmIGl0IGRvZXMgbm90IG1lZXQgb3VyIGNyaXRlcmlhLCB0aGVuIHdlIHF1 aWNrbHkgYWJvcnQgdGhlIENPUFkgb3BlcmF0aW9uLgp3ZSBhbHNvIGRpZCBwcmVsaW1pbmFyeSBj aGVjayB0aGUgbG9jayBvZiBlcnJvciBzYXZpbmcgdGFibGUKc28gdGhlIENPUFkgY2FuIGluc2Vy dCB0dXBsZXMgdG8gaXQuCgpvbmNlIHRoZXJlIGlzIGEgZXJyb3IgaGFwcGVuZWQsIHdlIHNhdmUg dGhlIGVycm9yIG1ldGVkYXRhCmFuZCBpbnNlcnQgaXQgdG8gdGhlIGVycm9yX3NhdmluZ190YWJs ZS4KCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FDSnVmeEhfT0pwVnJhJTNEMGM0 b3c4ZmJ4SGo3aGVNY1ZhVE5FUGE1dkF1clNlTkEtNlElNDBtYWlsLmdtYWlsLmNvbQotLS0KIGRv Yy9zcmMvc2dtbC9yZWYvY29weS5zZ21sICAgICAgICAgICAgICAgfCAxMTEgKysrKysrKysrKysr KysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgICAgICAgICAgICAgIHwgIDIwICsr KysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgICAgICAgICAgfCAxMzkgKysrKysr KysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyAg ICAgfCAgNDYgKysrKysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAg ICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oICAgICAgICAgICAgICB8ICAg MiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIHwgICAxICsKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0ICAgICAgfCAgOTYgKysrKysrKysrKysr KysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsICAgICAgICAgICB8ICA4MyArKysr KysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA1MDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9jb3B5LnNnbWwKaW5kZXggMTUxOGFmOGEwNC4uODBjOGExYmU0MSAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5 LnNnbWwKQEAgLTQ0LDYgKzQ0LDcgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgIEZPUkNF X05PVF9OVUxMIHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8 L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgfCAqIH0KICAgICBGT1JDRV9OVUxMIHsgKCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5d ICkgfCAqIH0KICAgICBPTl9FUlJPUiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJy b3JfYWN0aW9uPC9yZXBsYWNlYWJsZT4KKyAgICBUQUJMRSAnPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmVycm9yX3NhdmluZ190Ymw8L3JlcGxhY2VhYmxlPicKICAgICBFTkNPRElORyAn PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVuY29kaW5nX25hbWU8L3JlcGxhY2VhYmxl PicKICAgICBMT0dfVkVSQk9TSVRZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj52ZXJi b3NpdHk8L3JlcGxhY2VhYmxlPgogPC9zeW5vcHNpcz4KQEAgLTM5Myw3ICszOTQsOSBAQCBDT1BZ IHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxl PiBbICggPHJlcGxhY2VhYmxlCiAgICAgICBpbnB1dCB2YWx1ZSBpbnRvIGl0cyBkYXRhIHR5cGUu CiAgICAgICBBbiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3JfYWN0aW9uPC9y ZXBsYWNlYWJsZT4gdmFsdWUgb2YKICAgICAgIDxsaXRlcmFsPnN0b3A8L2xpdGVyYWw+IG1lYW5z IGZhaWwgdGhlIGNvbW1hbmQsIHdoaWxlCi0gICAgICA8bGl0ZXJhbD5pZ25vcmU8L2xpdGVyYWw+ IG1lYW5zIGRpc2NhcmQgdGhlIGlucHV0IHJvdyBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBv bmUuCisgICAgICA8bGl0ZXJhbD5pZ25vcmU8L2xpdGVyYWw+IG1lYW5zIGRpc2NhcmQgdGhlIGlu cHV0IHJvdyBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBvbmUsCisgICAgICA8bGl0ZXJhbD5U QUJMRTwvbGl0ZXJhbD4gbWVhbnMgPGNvbW1hbmQ+Q09QWTwvY29tbWFuZD4gc2tpcHMgbWFsZm9y bWVkIGRhdGEgYW5kIGNvbnRpbnVlcyBjb3B5aW5nIGRhdGEsCisgICAgICBpdCBhc2xvIGluc2Vy dCBlcnJvciByZWxhdGVkIGluZm9ybWF0aW9uIHRvIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5lcnJvcl9zYXZpbmdfdGJsPC9yZXBsYWNlYWJsZT4uCiAgICAgICBUaGUgZGVmYXVsdCBp cyA8bGl0ZXJhbD5zdG9wPC9saXRlcmFsPi4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KQEAg LTQzOSw2ICs0NDIsMTEyIEBAIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFibGUKICAgICA8L2xpc3RpdGVt PgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxp dGVyYWw+VEFCTEU8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgU2F2ZSBlcnJvciBjb250ZXh0IGluZm9ybWF0aW9uIHRvIHRhYmxlIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5lcnJvcl9zYXZpbmdfdGFibGU8L3JlcGxhY2VhYmxlPgorICAg IHdoZW4gZW5jb3VudGVyaW5nIGVycm9ycyBjb252ZXJ0aW5nIGEgY29sdW1uJ3MgaW5wdXQgdmFs dWUgaW50byBpdHMgZGF0YSB0eXBlIGluIDxjb21tYW5kPkNPUFkgRlJPTTwvY29tbWFuZD4gb3Bl cmF0aW9uLgorICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lcnJvcl9zYXZpbmdf dGFibGU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgZXJyb3Igc2F2aW5nIHRhYmxlIG5hbWUsCisgICAg aXQgbXVzdCBleGlzdCBpbiB0aGUgY3VycmVudCBkYXRhYmFzZSwgYWxzbyBpdHMgc2NoZW1hIG11 c3QgYmUgdGhlIHNhbWUgYXMgdGhlIHNjaGVtYSBvZgorICAgIDxjb21tYW5kPkNPUFkgRlJPTTwv Y29tbWFuZD4gZGVzdGluYXRpb24gdGFibGUuCisgICAgVGhpcyBvcHRpb24gaXMgYWxsb3dlZCBv bmx5IGluIDxjb21tYW5kPkNPUFkgRlJPTTwvY29tbWFuZD4gYW5kCisgICAgPGxpdGVyYWw+T05f RVJST1I8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCB3aXRoIDxsaXRlcmFsPlRBQkxFPC9saXRlcmFs Pi4KKyAgICBUaGUgPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5kPiB1c2VyIHJlcXVpcmVzIDxs aXRlcmFsPklOU0VSVDwvbGl0ZXJhbD4gcHJpdmlsZWdlcyBmb3IKKyAgICBldmVyeSBjb2x1bW4g aW4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVycm9yX3NhdmluZ190YWJsZTwvcmVw bGFjZWFibGU+LgorICAgIElmIHRoaXMgb3B0aW9uIGlzIG9taXR0ZWQsIHRoZSA8bGl0ZXJhbD5P Tl9FUlJPUjwvbGl0ZXJhbD4gcGFyYW1ldGVyIG11c3Qgbm90IGJlIHNwZWNpZmllZCBhcyA8bGl0 ZXJhbD5UQUJMRTwvbGl0ZXJhbD4uCis8L3BhcmE+CisgICA8cGFyYT4KKyAgICBJZiB0YWJsZSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RhYmxlPC9yZXBsYWNl YWJsZT4gZG9lcyBtZWV0IHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbgorICAgIChjb2x1bW4gb3Jk aW5hbCBwb3NpdGlvbiBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGJlbG93IHRhYmxlKSwgYW4g ZXJyb3Igd2lsbCBiZSByYWlzZWQuCisKKzxpbmZvcm1hbHRhYmxlPgorICAgIDx0Z3JvdXAgY29s cz0iMyI+CisgICAgIDx0aGVhZD4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PkNvbHVtbiBu YW1lPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RGF0YSB0eXBlPC9lbnRyeT4KKyAgICAgICA8ZW50 cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhlYWQ+CisKKyAg ICAgIDx0Ym9keT4KKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+dXNlcmlk PC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT5vaWQ8L3R5cGU+PC9lbnRy eT4KKyAgICAgICA8ZW50cnk+VGhlIHVzZXIgZ2VuZXJhdGVkIHRoZSBlcnJvci4KKyAgICAgICBS ZWZlcmVuY2UgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1hdXRoaWQiPjxzdHJ1Y3RuYW1lPnBn X2F1dGhpZDwvc3RydWN0bmFtZT48L2xpbms+LjxzdHJ1Y3RmaWVsZD5vaWQ8L3N0cnVjdGZpZWxk PiwKKyAgICAgICBob3dldmVyIHRoZXJlIGlzIG5vIGhhcmQgZGVwZW5kZW5jeSB3aXRoIGNhdGFs b2cgPGxpdGVyYWw+cGdfYXV0aGlkPC9saXRlcmFsPi4KKyAgICAgICBJZiB0aGUgY29ycmVzcG9u ZGluZyByb3cgb24gPGxpdGVyYWw+cGdfYXV0aGlkPC9saXRlcmFsPiBpcyBkZWxldGVkLCB0aGlz IHZhbHVlIGJlY29tZXMgc3RhbGUuCisgICAgPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAg ICAgIDxyb3c+CisgICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5jb3B5X3RibDwvbGl0ZXJhbD4gPC9l bnRyeT4KKyAgICAgICA8ZW50cnk+PHR5cGU+b2lkPC90eXBlPjwvZW50cnk+CisgICAgICAgPGVu dHJ5PlRoZSA8Y29tbWFuZD5DT1BZIEZST008L2NvbW1hbmQ+IG9wZXJhdGlvbiBkZXN0aW5hdGlv biB0YWJsZSBvaWQuCisgICAgICAgIFJlZmVyZW5jZSA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBn LWNsYXNzIj48c3RydWN0bmFtZT5wZ19jbGFzczwvc3RydWN0bmFtZT48L2xpbms+LjxzdHJ1Y3Rm aWVsZD5vaWQ8L3N0cnVjdGZpZWxkPiwKKyAgICAgICAgaG93ZXZlciB0aGVyZSBpcyBubyBoYXJk IGRlcGVuZGVuY3kgd2l0aCBjYXRhbG9nIDxsaXRlcmFsPnBnX2NsYXNzPC9saXRlcmFsPi4KKyAg ICAgICAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgcm93IG9uIDxsaXRlcmFsPnBnX2NsYXNzPC9saXRl cmFsPiBpcyBkZWxldGVkLCB0aGlzIHZhbHVlIGJlY29tZXMgc3RhbGUuCisgICAgICAgIDwvZW50 cnk+CisgICAgICAgPC9yb3c+CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVy YWw+ZmlsZW5hbWU8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8 L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+VGhlIHBhdGggbmFtZSBvZiB0aGUgPGNvbW1h bmQ+Q09QWSBGUk9NPC9jb21tYW5kPiBpbnB1dDwvZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAg ICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+bGluZW5vPC9saXRlcmFsPiA8L2Vu dHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT5iaWdpbnQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8 ZW50cnk+TGluZSBudW1iZXIgd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLCBjb3VudGluZyBmcm9t IDE8L2VudHJ5PgorICAgICAgIDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+ IDxsaXRlcmFsPmxpbmU8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRl eHQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+UmF3IGNvbnRlbnQgb2YgdGhlIGVycm9y IG9jY3VycmVkIGxpbmU8L2VudHJ5PgorICAgICAgIDwvcm93PgorCisgICAgICAgPHJvdz4KKyAg ICAgICA8ZW50cnk+IDxsaXRlcmFsPmNvbG5hbWU8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAg PGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RmllbGQgd2hl cmUgdGhlIGVycm9yIG9jY3VycmVkPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxy b3c+CisgICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5yYXdfZmllbGRfdmFsdWU8L2xpdGVyYWw+IDwv ZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8 ZW50cnk+UmF3IGNvbnRlbnQgb2YgdGhlIGVycm9yIG9jY3VycmVkIGZpZWxkPC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKworICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5lcnJf bWVzc2FnZSA8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5 cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+VGhlIGVycm9yIG1lc3NhZ2U8L2VudHJ5PgorICAg ICAgIDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+IDxsaXRlcmFsPmVycl9k ZXRhaWw8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+ PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RGV0YWlsZWQgZXJyb3IgbWVzc2FnZSA8L2VudHJ5Pgor ICAgICAgIDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+IDxsaXRlcmFsPmVy cm9yY29kZSA8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5 cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+VGhlIGVycm9yIGNvZGUgPC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKworICAgICAgPC90Ym9keT4KKyAgICAgPC90Z3JvdXA+CisgICA8L2luZm9ybWFs dGFibGU+CisKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5XSEVSRTwvbGl0ZXJh bD48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmluZGV4IDNiYjU3OWEzYTQu LjUwNTEyMDg1ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKQEAgLTQxMCw2ICs0MTAsOCBAQCBkZWZHZXRD b3B5T25FcnJvckNob2ljZShEZWZFbGVtICpkZWYsIFBhcnNlU3RhdGUgKnBzdGF0ZSwgYm9vbCBp c19mcm9tKQogCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJpZ25vcmUiKSA9PSAwKQogCQlyZXR1 cm4gQ09QWV9PTl9FUlJPUl9JR05PUkU7CiAKKwlpZiAocGdfc3RyY2FzZWNtcChzdmFsLCAidGFi bGUiKSA9PSAwKQorCQlyZXR1cm4gQ09QWV9PTl9FUlJPUl9UQUJMRTsKIAllcmVwb3J0KEVSUk9S LAogCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJLyotIHRy YW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05f RVJST1IgKi8KQEAgLTQ2OSw2ICs0NzEsNyBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCWJvb2wJCWZyZWV6ZV9zcGVjaWZpZWQgPSBmYWxzZTsKIAlib29sCQloZWFk ZXJfc3BlY2lmaWVkID0gZmFsc2U7CiAJYm9vbAkJb25fZXJyb3Jfc3BlY2lmaWVkID0gZmFsc2U7 CisJYm9vbAkJb25fZXJyb3JfdGJsX3NwZWNpZmllZCA9IGZhbHNlOwogCWJvb2wJCWxvZ192ZXJi b3NpdHlfc3BlY2lmaWVkID0gZmFsc2U7CiAJTGlzdENlbGwgICAqb3B0aW9uOwogCkBAIC02MzYs NiArNjM5LDE0IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQls b2dfdmVyYm9zaXR5X3NwZWNpZmllZCA9IHRydWU7CiAJCQlvcHRzX291dC0+bG9nX3ZlcmJvc2l0 eSA9IGRlZkdldENvcHlMb2dWZXJib3NpdHlDaG9pY2UoZGVmZWwsIHBzdGF0ZSk7CiAJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidGFibGUiKSA9PSAwKQorCQl7CisJCQlp ZiAob25fZXJyb3JfdGJsX3NwZWNpZmllZCkKKwkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShk ZWZlbCwgcHN0YXRlKTsKKwkJCW9uX2Vycm9yX3RibF9zcGVjaWZpZWQgPSB0cnVlOworCisJCQlv cHRzX291dC0+b25fZXJyb3JfdGJsID0gZGVmR2V0U3RyaW5nKGRlZmVsKTsKKwkJfQogCQllbHNl CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks CkBAIC02NDQsNiArNjU1LDE1IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBkZWZlbC0+bG9jYXRpb24pKSk7 CiAJfQogCisJaWYgKG9wdHNfb3V0LT5vbl9lcnJvcl90YmwgPT0gTlVMTCAmJiBvcHRzX291dC0+ b25fZXJyb3IgPT0gQ09QWV9PTl9FUlJPUl9UQUJMRSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJD T1BZICVzIFwidGFibGVcIiByZXF1aXJlcyBhIGN1c3RvbSBzcGVjaWZpZWQgZXJyb3Igc2F2aW5n IHRhYmxlIiwgIk9OX0VSUk9SIikpKTsKKworCWlmIChvcHRzX291dC0+b25fZXJyb3JfdGJsICE9 IE5VTEwgJiYgb3B0c19vdXQtPm9uX2Vycm9yICE9IENPUFlfT05fRVJST1JfVEFCTEUpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiQ09QWSBcInRhYmxlXCIgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQg d2hlbiAlcyBvcHRpb24gaXMgc3BlY2lmaWVkIGFzIFwidGFibGVcIiIsICJPTl9FUlJPUiIpKSk7 CiAJLyoKIAkgKiBDaGVjayBmb3IgaW5jb21wYXRpYmxlIG9wdGlvbnMgKG11c3QgZG8gdGhlc2Ug dHdvIGJlZm9yZSBpbnNlcnRpbmcKIAkgKiBkZWZhdWx0cykKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5j CmluZGV4IDJkMzQ2MjkxM2UuLjVmYTA4MDFjMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpA QCAtMzUsMTIgKzM1LDE0IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1v ZGlmeVRhYmxlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvdHVwdGFibGUuaCIKICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWlz Y25vZGVzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBh cnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInJl d3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCkBAIC0xMDI0 LDYgKzEwMjYsMTIgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQlwZ3N0YXRf cHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NPUFlfVFVQTEVTX1NLSVBQRUQsCiAJCQkJ CQkJCQkJICsrc2tpcHBlZCk7CiAKKwkJCWlmIChjc3RhdGUtPm9wdHMub25fZXJyb3IgPT0gQ09Q WV9PTl9FUlJPUl9UQUJMRSkKKwkJCXsKKwkJCQljc3RhdGUtPmVzY29udGV4dC0+ZXJyb3Jfb2Nj dXJyZWQgPSBmYWxzZTsKKwkJCQljc3RhdGUtPmVzY29udGV4dC0+ZGV0YWlsc193YW50ZWQgPSB0 cnVlOworCQkJCW1lbXNldChjc3RhdGUtPmVzY29udGV4dC0+ZXJyb3JfZGF0YSwwLCBzaXplb2Yo RXJyb3JEYXRhKSk7CisJCQl9CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xMzI2LDYgKzEzMzQs MTMgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJCQkJICAiJWxsdSByb3dz IHdlcmUgc2tpcHBlZCBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0eSIsCiAJCQkJCQkJ ICAodW5zaWduZWQgbG9uZyBsb25nKSBjc3RhdGUtPm51bV9lcnJvcnMsCiAJCQkJCQkJICAodW5z aWduZWQgbG9uZyBsb25nKSBjc3RhdGUtPm51bV9lcnJvcnMpKTsKKwkvKgorCSAqIHNpbWlsYXIg dG8gY29tbWl0IGE5Y2Y0OGEKKwkgKiAoaHR0cHM6Ly9wb3N0Z3IuZXMvbS83YmNmYzM5ZDQxNzZm YWY4NWFiMzE3ZDBjMjY3ODY5NTM2NDZhNDExLmNhbWVsQGN5YmVydGVjLmF0KQorCSAqIGluIENP UFkgRlJPTSBrZWVwIGVycm9yIHNhdmluZyB0YWJsZSBsb2NrcyB1bnRpbCB0aGUgdHJhbnNhY3Rp b24gZW5kLgorCSovCisJaWYgKGNzdGF0ZS0+ZXJyb3Jfc2F2aW5nX3JlbCAhPSBOVUxMKQorCQl0 YWJsZV9jbG9zZShjc3RhdGUtPmVycm9yX3NhdmluZ19yZWwsIE5vTG9jayk7CiAKIAlpZiAoYmlz dGF0ZSAhPSBOVUxMKQogCQlGcmVlQnVsa0luc2VydFN0YXRlKGJpc3RhdGUpOwpAQCAtMTQ4MCw2 ICsxNDk1LDEzMCBAQCBCZWdpbkNvcHlGcm9tKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAllbHNlCiAJ CWNzdGF0ZS0+ZXNjb250ZXh0ID0gTlVMTDsKIAorCWlmIChjc3RhdGUtPm9wdHMub25fZXJyb3Ig PT0gQ09QWV9PTl9FUlJPUl9UQUJMRSkKKwl7CisJCVN0cmluZ0luZm9EYXRhIAlxdWVyeWJ1ZjsK KwkJY29uc3QgY2hhciAqY29weV9uc3BuYW1lOworCQlPaWQJCQllcnJfdGJsX29pZDsKKwkJT2lk CQkJY29weV9uc3BvaWQ7CisJCWJvb2wJCW9uX2Vycm9yX3RibF9vazsKKwkJYm9vbAkJYWxsb3df aW5zZXJ0X2Vycm9yX3RibDsKKwkJYm9vbAkJaXNudWxsOworCisJCUFzc2VydChjc3RhdGUtPmVz Y29udGV4dCAhPSBOVUxMKTsKKwkJQXNzZXJ0KGNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90YmwgIT0g TlVMTCk7CisKKwkJLyogZ2V0IGNvcHkgZXJyb3Igc2F2aW5nIHRhYmxlIHJlbG9pZCAqLworCQlj b3B5X25zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2UoY3N0 YXRlLT5yZWwpKTsKKwkJY29weV9uc3BvaWQgPSBnZXRfbmFtZXNwYWNlX29pZChjb3B5X25zcG5h bWUsIGZhbHNlKTsKKwkJZXJyX3RibF9vaWQgPSBnZXRfcmVsbmFtZV9yZWxpZChjc3RhdGUtPm9w dHMub25fZXJyb3JfdGJsLCBjb3B5X25zcG9pZCk7CisKKwkJaWYgKCFPaWRJc1ZhbGlkKGVycl90 Ymxfb2lkKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJlcnJvciBzYXZpbmcgdGFibGUgXCIl c1wiLlwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJY29weV9uc3BuYW1lLCBjc3RhdGUt Pm9wdHMub25fZXJyb3JfdGJsKSkpOworCisJCS8qIGVycm9yIHNhdmluZyB0YWJsZSBtdXN0IGJl IGEgbm9ybWFsIHJlYWx0aW9uIGtpbmQgKi8KKwkJaWYgKGdldF9yZWxfcmVsa2luZChlcnJfdGJs X29pZCkgIT0gUkVMS0lORF9SRUxBVElPTikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQllcnJtc2coIkNPUFkgJXMgY2Fu bm90IHVzZSByZWxhdGlvbiBcIiVzXCIgZm9yIGVycm9yIHNhdmluZyIsCisJCQkJCQkJIk9OX0VS Uk9SIiwgY3N0YXRlLT5vcHRzLm9uX2Vycm9yX3RibCksCisJCQkJCWVycmRldGFpbF9yZWxraW5k X25vdF9zdXBwb3J0ZWQoZ2V0X3JlbF9yZWxraW5kKGVycl90Ymxfb2lkKSkpKTsKKworCQkvKgor CQkgKiB3ZSBtYXkgaW5zZXJ0IHR1cGxlcyB0byBlcnJvci1zYXZpbmcgdGFibGUsIHRvIGRvIHRo YXQgd2UgbmVlZCBmaXJzdAorCQkgKiBjaGVjayB0aGUgdGFibGUgbG9jayBzaXR1YXRpb24uIElm IGl0IGlzIGFscmVhZHkgdW5kZXIgaGVhdnkgbG9jaywKKwkJICogdGhlbiBvdXIgQ09QWSBvcGVy YXRpb24gd291bGQgYmUgc3R1Y2suIGluc3RlYWQgb2YgbGV0IENPUFkgc3R1Y2ssCisJCSAqIGp1 c3QgZXJyb3IgcmVwb3J0IHRoYXQgdGhlIHRhYmxlIGlzIGluIGhlYXZ5IGxvY2suCisJCSovCisJ CWluaXRTdHJpbmdJbmZvKCZxdWVyeWJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVm LAorCQkJInNlbGVjdCAxIGFzIGV4aXN0cyBmcm9tICggIgorCQkJInNlbGVjdAkxICIKKwkJCSJm cm9tIAlwZ19jbGFzcywgcGdfbG9ja3MgIgorCQkJIndoZXJlCXBnX2NsYXNzLm9pZCA9IHBnX2xv Y2tzLnJlbGF0aW9uICIKKwkJCSJhbmQgCXBnX2NsYXNzLnJlbG5hbWVzcGFjZSA9ICVkICIKKwkJ CSJhbmQgCXBnX2NsYXNzLm9pZCA9ICVkICIKKwkJCSJhbmQgCW1vZGUgbm90IGluICgnQWNjZXNz U2hhcmVMb2NrJywgJ1Jvd1NoYXJlTG9jaycsICdSb3dFeGNsdXNpdmVMb2NrJykpOyAiCisJCQks Y29weV9uc3BvaWQsIGVycl90Ymxfb2lkKTsKKworCQlpZiAoU1BJX2Nvbm5lY3QoKSAhPSBTUElf T0tfQ09OTkVDVCkKKwkJCWVsb2coRVJST1IsICJTUElfY29ubmVjdCBmYWlsZWQiKTsKKworCQlp ZiAoU1BJX2V4ZWN1dGUocXVlcnlidWYuZGF0YSwgZmFsc2UsIDApICE9IFNQSV9PS19TRUxFQ1Qp CisJCQllbG9nKEVSUk9SLCAiU1BJX2V4ZWMgZmFpbGVkOiAlcyIsIHF1ZXJ5YnVmLmRhdGEpOwor CisJCWlmIChTUElfcHJvY2Vzc2VkICE9IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidGFi bGUgXCIlc1wiLlwiJXNcIiB3YXMgbG9ja2VkLCBjYW5ub3QgYmUgdXNlZCBmb3IgZXJyb3Igc2F2 aW5nIiwKKwkJCQkJCQkgY29weV9uc3BuYW1lLCBjc3RhdGUtPm9wdHMub25fZXJyb3JfdGJsKSkp OworCisJCS8qIGN1cnJlbnQgdXNlciBzaG91bGQgaGF2ZSBJTlNFUlQgcHJpdmlsZWRnZSBvbiBl cnJvcl9zYXZpbmcgdGFibGUgKi8KKwkJcmVzZXRTdHJpbmdJbmZvKCZxdWVyeWJ1Zik7CisJCWFw cGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLAorCQkJCQkJIlNFTEVDVCBoYXNfdGFibGVfcHJpdmls ZWdlIChDVVJSRU5UX1VTRVIsICVkLCAnSU5TRVJUJykiLAorCQkJCQkJZXJyX3RibF9vaWQpOwor CQlpZiAoU1BJX2V4ZWN1dGUocXVlcnlidWYuZGF0YSwgZmFsc2UsIDApICE9IFNQSV9PS19TRUxF Q1QpCisJCQllbG9nKEVSUk9SLCAiU1BJX2V4ZWMgZmFpbGVkOiAlcyIsIHF1ZXJ5YnVmLmRhdGEp OworCisJCWFsbG93X2luc2VydF9lcnJvcl90YmwgPSBEYXR1bUdldEJvb2woU1BJX2dldGJpbnZh bChTUElfdHVwdGFibGUtPnZhbHNbMF0sCisJCQkJCQkJCQkJCSBTUElfdHVwdGFibGUtPnR1cGRl c2MsCisJCQkJCQkJCQkJCSAxLCAmaXNudWxsKSk7CisJCWlmICghYWxsb3dfaW5zZXJ0X2Vycm9y X3RibCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklD SUVOVF9QUklWSUxFR0UpLAorCQkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgdG8gc2V0 IHRhYmxlIFwiJXNcIi5cIiVzXCIgZm9yIENPUFkgRlJPTSBlcnJvciBzYXZpbmciLAorCQkJCQkJ CQljb3B5X25zcG5hbWUsIGNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90YmwpLAorCQkJCQkJIGVycmhp bnQoIkVuc3VyZSBjdXJyZW50IHVzZXIgaGF2ZSBlbm91Z2ggcHJpdmlsZWRnZSBvbiBcIiVzXCIu XCIlc1wiIGZvciBDT1BZIEZST00gZXJyb3Igc2F2aW5nIiwKKwkJCQkJCQkJY29weV9uc3BuYW1l LCBjc3RhdGUtPm9wdHMub25fZXJyb3JfdGJsKSkpOworCisJCXJlc2V0U3RyaW5nSW5mbygmcXVl cnlidWYpOworCQkvKgorCQkgKiBDaGVjayB0aGUgZXJyb3Igc2F2aW5nIHRhYmxlJ3MgZGF0YSBk ZWZpbml0aW9uIChjb2x1bW4gbmFtZSwKKwkJICogZGF0YSB0eXBlcykgY2FuIGJlIHVzZWQgZm9y IGVycm9yIHNhdmluZyBvciBub3QuCisJCSAqCisJCSovCisJCWFwcGVuZFN0cmluZ0luZm8oJnF1 ZXJ5YnVmLAorCQkJCQkJIlNFTEVDVCAoYXJyYXlfYWdnKHBhLmF0dG5hbWUgT1JERVIgQlkgcGEu YXR0bnVtKSAiCisJCQkJCQkJIj0gJ3tjdGlkLHVzZXJpZCxjb3B5X3RibCxmaWxlbmFtZSxsaW5l bm8sICIKKwkJCQkJCQkibGluZSxjb2xuYW1lLHJhd19maWVsZF92YWx1ZSxlcnJfbWVzc2FnZSxl cnJfZGV0YWlsLGVycm9yY29kZX0nKSAiCisJCQkJCQkJIkFORCAoQVJSQVlfQUdHKHB0LnR5cG5h bWUgT1JERVIgQlkgcGEuYXR0bnVtKSAiCisJCQkJCQkJIj0gJ3t0aWQsb2lkLG9pZCx0ZXh0LGlu dDgsdGV4dCx0ZXh0LHRleHQsdGV4dCx0ZXh0LHRleHR9JykgIgorCQkJCQkJCSJGUk9NIHBnX2Nh dGFsb2cucGdfYXR0cmlidXRlIHBhICIKKwkJCQkJCQkiSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNz IHBjIE9OIHBjLm9pZCA9IHBhLmF0dHJlbGlkICIKKwkJCQkJCQkiSk9JTiBwZ19jYXRhbG9nLnBn X3R5cGUgcHQgT04gcHQub2lkID0gcGEuYXR0dHlwaWQgIgorCQkJCQkJCSJKT0lOIHBnX2NhdGFs b2cucGdfbmFtZXNwYWNlIHBuICIKKwkJCQkJCQkiT04gcG4ub2lkID0gcGMucmVsbmFtZXNwYWNl IFdIRVJFICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwKKwkJCQkJCQkicG4ubnNw bmFtZSA9ICQkJXMkJCBBTkQgcmVsbmFtZSA9ICQkJXMkJCAiCisJCQkJCQkJIkFORCBwYS5hdHRu dW0gPj0gLTEgQU5EIE5PVCBhdHRpc2Ryb3BwZWQgIiwKKwkJCQkJCQljb3B5X25zcG5hbWUsIGNz dGF0ZS0+b3B0cy5vbl9lcnJvcl90YmwpOworCisJCWlmIChTUElfZXhlY3V0ZShxdWVyeWJ1Zi5k YXRhLCBmYWxzZSwgMCkgIT0gU1BJX09LX1NFTEVDVCkKKwkJCWVsb2coRVJST1IsICJTUElfZXhl YyBmYWlsZWQ6ICVzIiwgcXVlcnlidWYuZGF0YSk7CisKKwkJb25fZXJyb3JfdGJsX29rID0gRGF0 dW1HZXRCb29sKFNQSV9nZXRiaW52YWwoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJCQkJCQkJ ICAgU1BJX3R1cHRhYmxlLT50dXBkZXNjLAorCQkJCQkJCQkJICAgMSwgJmlzbnVsbCkpOworCQlp Zighb25fZXJyb3JfdGJsX29rKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInRhYmxlIFwiJXNc Ii5cIiVzXCIgY2Fubm90IGJlIHVzZWQgZm9yIENPUFkgRlJPTSBlcnJvciBzYXZpbmciLAorCQkJ CQkJCWNvcHlfbnNwbmFtZSwgY3N0YXRlLT5vcHRzLm9uX2Vycm9yX3RibCksCisJCQkJCSBlcnJk ZXRhaWwoIlRhYmxlIFwiJXNcIi5cIiVzXCIgZGF0YSBkZWZpbml0aW9uIGNhbm5vdCBiZSB1c2Vk IGZvciBlcnJvciBzYXZpbmciLAorCQkJCQkJCSAgIGNvcHlfbnNwbmFtZSwgY3N0YXRlLT5vcHRz Lm9uX2Vycm9yX3RibCkpKTsKKworCQlpZiAoU1BJX2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gp CisJCQllbG9nKEVSUk9SLCAiU1BJX2ZpbmlzaCBmYWlsZWQiKTsKKworCQkvKiBub3cgZXJyb3It c2F2aW5nIHRhYmxlIGlzIG9rIGZvciBlcnJvciBzYXZpbmcsIHRha2UgYSBsb2NrIGZvciBpbnNl cnQqLworCQljc3RhdGUtPmVycm9yX3NhdmluZ19yZWwgPSB0YWJsZV9vcGVuKGVycl90Ymxfb2lk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJY3N0YXRlLT5lc2NvbnRleHQtPmRldGFpbHNfd2FudGVk ID0gdHJ1ZTsKKwl9CisKIAkvKiBDb252ZXJ0IEZPUkNFX05VTEwgbmFtZSBsaXN0IHRvIHBlci1j b2x1bW4gZmxhZ3MsIGNoZWNrIHZhbGlkaXR5ICovCiAJY3N0YXRlLT5vcHRzLmZvcmNlX251bGxf ZmxhZ3MgPSAoYm9vbCAqKSBwYWxsb2MwKG51bV9waHlzX2F0dHJzICogc2l6ZW9mKGJvb2wpKTsK IAlpZiAoY3N0YXRlLT5vcHRzLmZvcmNlX251bGxfYWxsKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZy b21wYXJzZS5jCmluZGV4IDdlZmNiODkxNTkuLmU2NDAyNTkzNDcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5ZnJvbXBhcnNlLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9j b3B5ZnJvbV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAj aW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2lu Y2x1ZGUgIm1iL3BnX3djaGFyLmgiCkBAIC05NjksNiArOTcwLDUxIEBAIE5leHRDb3B5RnJvbShD b3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAogCQkJewogCQkJCUFz c2VydChjc3RhdGUtPm9wdHMub25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9TVE9QKTsKIAorCQkJ CWlmIChjc3RhdGUtPm9wdHMub25fZXJyb3IgPT0gQ09QWV9PTl9FUlJPUl9UQUJMRSkKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIHdlIG1vc3RseSB1c2UgRXJyb3JTYXZlQ29udGV4dCdzIGluZm8g dG8gZm9ybSBhIHR1cGxlIGFuZAorCQkJCQkgKiBpbnNlcnQgaXQgdG8gdGhlIGVycm9yIHNhdmlu ZyB0YWJsZS4gd2UgYWxyZWFkeSBkaWQgbG9jaworCQkJCQkgKiBjb25kaXRpb24gY2hlY2sgaW4g QmVnaW5Db3B5RnJvbS4KKwkJCQkJKi8KKwkJCQkJI2RlZmluZSBFUlJPUl9UQkxfQ09MVU1OUwkx MAorCQkJCQlIZWFwVHVwbGUJb25fZXJyb3JfdHVwOworCQkJCQlUdXBsZURlc2MJb25fZXJyb3Jf dHVwRGVzYzsKKwkJCQkJY2hhcgkqZXJyX2RldGFpbDsKKwkJCQkJY2hhcgkqZXJyX2NvZGU7CisJ CQkJCURhdHVtCXRfdmFsdWVzW0VSUk9SX1RCTF9DT0xVTU5TXSA9IHswfTsKKwkJCQkJYm9vbAl0 X2lzbnVsbFtFUlJPUl9UQkxfQ09MVU1OU10gPSB7MH07CisJCQkJCWludAkJaiA9IDA7CisKKwkJ CQkJQXNzZXJ0KGNzdGF0ZS0+cmVsICE9IE5VTEwpOworCQkJCQl0X3ZhbHVlc1tqKytdID0gT2Jq ZWN0SWRHZXREYXR1bShHZXRVc2VySWQoKSk7CisJCQkJCXRfdmFsdWVzW2orK10gPSBPYmplY3RJ ZEdldERhdHVtKGNzdGF0ZS0+cmVsLT5yZF9yZWwtPm9pZCk7CisJCQkJCXRfdmFsdWVzW2orK10g PSBDU3RyaW5nR2V0VGV4dERhdHVtKGNzdGF0ZS0+ZmlsZW5hbWUgPyBjc3RhdGUtPmZpbGVuYW1l IDogIlNURElOIik7CisJCQkJCXRfdmFsdWVzW2orK10gPSBJbnQ2NEdldERhdHVtKChsb25nIGxv bmcpIGNzdGF0ZS0+Y3VyX2xpbmVubyk7CisJCQkJCXRfdmFsdWVzW2orK10gPSBDU3RyaW5nR2V0 VGV4dERhdHVtKGNzdGF0ZS0+bGluZV9idWYuZGF0YSk7CisJCQkJCXRfdmFsdWVzW2orK10gPSBD U3RyaW5nR2V0VGV4dERhdHVtKGNzdGF0ZS0+Y3VyX2F0dG5hbWUpOworCQkJCQl0X3ZhbHVlc1tq KytdID0gQ1N0cmluZ0dldFRleHREYXR1bShzdHJpbmcpOworCQkJCQl0X3ZhbHVlc1tqKytdID0g Q1N0cmluZ0dldFRleHREYXR1bShjc3RhdGUtPmVzY29udGV4dC0+ZXJyb3JfZGF0YS0+bWVzc2Fn ZSk7CisKKwkJCQkJaWYgKCFjc3RhdGUtPmVzY29udGV4dC0+ZXJyb3JfZGF0YS0+ZGV0YWlsKQor CQkJCQkJZXJyX2RldGFpbCA9IE5VTEw7CisJCQkJCWVsc2UKKwkJCQkJCWVycl9kZXRhaWwgPSBj c3RhdGUtPmVzY29udGV4dC0+ZXJyb3JfZGF0YS0+ZGV0YWlsOworCQkJCQl0X3ZhbHVlc1tqXSAg ID0gZXJyX2RldGFpbCA/IENTdHJpbmdHZXRUZXh0RGF0dW0oZXJyX2RldGFpbCkgOiAoRGF0dW0p IDA7CisJCQkJCXRfaXNudWxsW2orK10gPSBlcnJfZGV0YWlsID8gZmFsc2UgOiB0cnVlOworCisJ CQkJCWVycl9jb2RlID0gdW5wYWNrX3NxbF9zdGF0ZShjc3RhdGUtPmVzY29udGV4dC0+ZXJyb3Jf ZGF0YS0+c3FsZXJyY29kZSk7CisJCQkJCXRfdmFsdWVzW2orK10gPSBDU3RyaW5nR2V0VGV4dERh dHVtKGVycl9jb2RlKTsKKworCQkJCQlBc3NlcnQoaiA9PSBFUlJPUl9UQkxfQ09MVU1OUyk7CisJ CQkJCSN1bmRlZiBFUlJPUl9UQkxfQ09MVU1OUworCisJCQkJCW9uX2Vycm9yX3R1cERlc2MgPSAg Y3N0YXRlLT5lcnJvcl9zYXZpbmdfcmVsLT5yZF9hdHQ7CisJCQkJCW9uX2Vycm9yX3R1cCA9IGhl YXBfZm9ybV90dXBsZShvbl9lcnJvcl90dXBEZXNjLCB0X3ZhbHVlcywgdF9pc251bGwpOworCQkJ CQlzaW1wbGVfaGVhcF9pbnNlcnQoY3N0YXRlLT5lcnJvcl9zYXZpbmdfcmVsLCBvbl9lcnJvcl90 dXApOworCQkJCQljc3RhdGUtPm51bV9lcnJvcnMrKzsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJ fQogCQkJCWNzdGF0ZS0+bnVtX2Vycm9ycysrOwogCiAJCQkJaWYgKGNzdGF0ZS0+b3B0cy5sb2df dmVyYm9zaXR5ID09IENPUFlfTE9HX1ZFUkJPU0lUWV9WRVJCT1NFKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXgg YzNmMjU1ODJjMy4uY2QxZThjNTQwMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0zNDk2LDYgKzM0OTYsMTAg QEAgY29weV9vcHRfaXRlbToKIAkJCQl7CiAJCQkJCSQkID0gbWFrZURlZkVsZW0oIm51bGwiLCAo Tm9kZSAqKSBtYWtlU3RyaW5nKCQzKSwgQDEpOwogCQkJCX0KKwkJCXwgVEFCTEUgb3B0X2FzIFNj b25zdAorCQkJCXsKKwkJCQkJJCQgPSBtYWtlRGVmRWxlbSgidGFibGUiLCAoTm9kZSAqKSBtYWtl U3RyaW5nKCQzKSwgQDEpOworCQkJCX0KIAkJCXwgQ1NWCiAJCQkJewogCQkJCQkkJCA9IG1ha2VE ZWZFbGVtKCJmb3JtYXQiLCAoTm9kZSAqKSBtYWtlU3RyaW5nKCJjc3YiKSwgQDEpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29weS5oCmluZGV4IDE0MWZkNDhkYzEuLjY4NzFmMjdhODMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NvcHkuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAg LTM4LDYgKzM4LDcgQEAgdHlwZWRlZiBlbnVtIENvcHlPbkVycm9yQ2hvaWNlCiB7CiAJQ09QWV9P Tl9FUlJPUl9TVE9QID0gMCwJCS8qIGltbWVkaWF0ZWx5IHRocm93IGVycm9ycywgZGVmYXVsdCAq LwogCUNPUFlfT05fRVJST1JfSUdOT1JFLAkJLyogaWdub3JlIGVycm9ycyAqLworCUNPUFlfT05f RVJST1JfVEFCTEUsCQkvKiBzYXZpbmcgZXJyb3JzIGluZm8gdG8gdGFibGUgKi8KIH0gQ29weU9u RXJyb3JDaG9pY2U7CiAKIC8qCkBAIC04Myw2ICs4NCw3IEBAIHR5cGVkZWYgc3RydWN0IENvcHlG b3JtYXRPcHRpb25zCiAJYm9vbAkJY29udmVydF9zZWxlY3RpdmVseTsJLyogZG8gc2VsZWN0aXZl IGJpbmFyeSBjb252ZXJzaW9uPyAqLwogCUNvcHlPbkVycm9yQ2hvaWNlIG9uX2Vycm9yOyAvKiB3 aGF0IHRvIGRvIHdoZW4gZXJyb3IgaGFwcGVuZWQgKi8KIAlDb3B5TG9nVmVyYm9zaXR5Q2hvaWNl IGxvZ192ZXJib3NpdHk7CS8qIHZlcmJvc2l0eSBvZiBsb2dnZWQgbWVzc2FnZXMgKi8KKwljaGFy CQkqb25fZXJyb3JfdGJsOyAvKiBvbiBlcnJvciwgc2F2ZSBlcnJvciBpbmZvIHRvIHRhYmxlICov CiAJTGlzdAkgICAqY29udmVydF9zZWxlY3Q7IC8qIGxpc3Qgb2YgY29sdW1uIG5hbWVzIChjYW4g YmUgTklMKSAqLwogfSBDb3B5Rm9ybWF0T3B0aW9uczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2Nv cHlmcm9tX2ludGVybmFsLmgKaW5kZXggY2FkNTJmY2M3OC4uNzc5Zjg2ZDFjZSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCkBAIC03MCw2ICs3MCw3IEBAIHR5cGVk ZWYgc3RydWN0IENvcHlGcm9tU3RhdGVEYXRhCiAKIAkvKiBwYXJhbWV0ZXJzIGZyb20gdGhlIENP UFkgY29tbWFuZCAqLwogCVJlbGF0aW9uCXJlbDsJCQkvKiByZWxhdGlvbiB0byBjb3B5IGZyb20g Ki8KKwlSZWxhdGlvbgllcnJvcl9zYXZpbmdfcmVsOyAvKiByZWxhdGlvbiBmb3IgY29weSBmcm9t IGVycm9yIHNhdmluZyAqLwogCUxpc3QJICAgKmF0dG51bWxpc3Q7CQkvKiBpbnRlZ2VyIGxpc3Qg b2YgYXR0bnVtcyB0byBjb3B5ICovCiAJY2hhcgkgICAqZmlsZW5hbWU7CQkvKiBmaWxlbmFtZSwg b3IgTlVMTCBmb3IgU1RESU4gKi8KIAlib29sCQlpc19wcm9ncmFtOwkJLyogaXMgJ2ZpbGVuYW1l JyBhIHByb2dyYW0gdG8gcG9wZW4/ICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NvcHkyLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0Cmlu ZGV4IGU5MTNmNjgzYTYuLjI3OGZlNWE2ZmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29weTIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIu b3V0CkBAIC03ODksNiArNzg5LDk5IEBAIENPTlRFWFQ6ICBDT1BZIGNoZWNrX2lnbl9lcnIsIGxp bmUgMTogIjEJezF9IgogQ09QWSBjaGVja19pZ25fZXJyIEZST00gU1RESU4gV0lUSCAob25fZXJy b3IgaWdub3JlKTsKIEVSUk9SOiAgZXh0cmEgZGF0YSBhZnRlciBsYXN0IGV4cGVjdGVkIGNvbHVt bgogQ09OVEVYVDogIENPUFkgY2hlY2tfaWduX2VyciwgbGluZSAxOiAiMQl7MX0JMwlhYmMiCitj cmVhdGUgdGFibGUgZXJyX3RibCgKKyAgdXNlcmlkIG9pZCwgLS0gdGhlIHVzZXIgb2lkIHdoaWxl IGNvcHkgZ2VuZXJhdGVkIHRoaXMgZW50cnkKKyAgY29weV90Ymwgb2lkLCAtLWNvcHkgdGFibGUK KyAgZmlsZW5hbWUgdGV4dCwKKyAgbGluZW5vICBiaWdpbnQsCisgIGxpbmUgICAgdGV4dCwKKyAg Y29sbmFtZSB0ZXh0LAorICByYXdfZmllbGRfdmFsdWUgdGV4dCwKKyAgZXJyX21lc3NhZ2UgdGV4 dCwKKyAgZXJyX2RldGFpbCB0ZXh0LAorICBlcnJvcmNvZGUgdGV4dAorKTsKK2NyZWF0ZSB0YWJs ZSBlcnJfdGJsXzEoCisgIHVzZXJpZCBvaWQsIC0tIHRoZSB1c2VyIG9pZCB3aGlsZSBjb3B5IGdl bmVyYXRlZCB0aGlzIGVudHJ5CisgIGNvcHlfdGJsIG9pZCwgLS1jb3B5IHRhYmxlCisgIGZpbGVu YW1lIHRleHQsCisgIGxpbmVubyAgYmlnaW50LAorICBsaW5lICAgIHRleHQsCisgIGNvbG5hbWUg dGV4dCwKKyAgcmF3X2ZpZWxkX3ZhbHVlIHRleHQsCisgIGVycl9tZXNzYWdlIHRleHQsCisgIGVy cl9kZXRhaWwgdGV4dAorKTsKK2NyZWF0ZSB0YWJsZSB0X2NvcHlfdGJsKGEgaW50LCBiIGludCwg YyBpbnQpOworLS10aGUgZm9sb3dpbmcgc2hvdWxkIGFsbCBmYWlscworQ09QWSB0X2NvcHlfdGJs IEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJyk7CitFUlJPUjogIENPUFkgT05fRVJS T1IgInRhYmxlIiByZXF1aXJlcyBhIGN1c3RvbSBzcGVjaWZpZWQgZXJyb3Igc2F2aW5nIHRhYmxl CitDT1BZIHRfY29weV90YmwgVE8gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJyk7CitFUlJP UjogIENPUFkgT05fRVJST1IgY2Fubm90IGJlIHVzZWQgd2l0aCBDT1BZIFRPCitMSU5FIDE6IENP UFkgdF9jb3B5X3RibCBUTyBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0NPUFkgdF9jb3B5X3RibCBGUk9NIFNU RElOIFdJVEggKHRhYmxlIGVycl90YmwpOworRVJST1I6ICBDT1BZICJ0YWJsZSIgb3B0aW9uIGNh biBvbmx5IGJlIHVzZWQgd2hlbiBPTl9FUlJPUiBvcHRpb24gaXMgc3BlY2lmaWVkIGFzICJ0YWJs ZSIKK0NPUFkgdF9jb3B5X3RibCBUTyBTVERJTiBXSVRIICh0YWJsZSBlcnJfdGJsKTsKK0VSUk9S OiAgQ09QWSAidGFibGUiIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdoZW4gT05fRVJST1Igb3B0 aW9uIGlzIHNwZWNpZmllZCBhcyAidGFibGUiCitDT1BZIHRfY29weV90YmwoYSxiKSBGUk9NIFNU RElOIFdJVEggKG9uX2Vycm9yICd0YWJsZScsIHRhYmxlIG5vdF9leGlzdHMpOworRVJST1I6ICBl cnJvciBzYXZpbmcgdGFibGUgInB1YmxpYyIuIm5vdF9leGlzdHMiIGRvZXMgbm90IGV4aXN0Citj cmVhdGUgdmlldyBzMSBhcyBzZWxlY3QgMSBhcyBhOworQ09QWSB0X2NvcHlfdGJsKGEpIEZST00g U1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgdGFibGUgczEpOworRVJST1I6ICBDT1BZIE9O X0VSUk9SIGNhbm5vdCB1c2UgcmVsYXRpb24gInMxIiBmb3IgZXJyb3Igc2F2aW5nCitERVRBSUw6 ICBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB2aWV3cy4KK2Ryb3AgdmlldyBz MTsKKy0tc2hvdWxkIGZhaWwuIGVycl90YmxfMSBkb2VzIG5vdCBtZWV0IGNyaXRlcmlhCitDT1BZ IHRfY29weV90YmwoYSxiKSBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9yICd0YWJsZScsIHRhYmxl IGVycl90YmxfMSk7CitFUlJPUjogIHRhYmxlICJwdWJsaWMiLiJlcnJfdGJsXzEiIGNhbm5vdCBi ZSB1c2VkIGZvciBDT1BZIEZST00gZXJyb3Igc2F2aW5nCitERVRBSUw6ICBUYWJsZSAicHVibGlj Ii4iZXJyX3RibF8xIiBkYXRhIGRlZmluaXRpb24gY2Fubm90IGJlIHVzZWQgZm9yIGVycm9yIHNh dmluZworLS1zaG91bGQgZmFpbCwgZXh0cmEgY29sdW1ucworQ09QWSB0X2NvcHlfdGJsKGEsYikg RlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJsZSBl cnJfdGJsKTsKK0VSUk9SOiAgZXh0cmEgZGF0YSBhZnRlciBsYXN0IGV4cGVjdGVkIGNvbHVtbgor Q09OVEVYVDogIENPUFkgdF9jb3B5X3RibCwgbGluZSAxOiAiMSwyLDMsNCIKKy0tc2hvdWxkIGZh aWwsIGxlc3MgY29sdW1ucworQ09QWSB0X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChk ZWxpbWl0ZXIgJywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKK0VSUk9SOiAg ZXh0cmEgZGF0YSBhZnRlciBsYXN0IGV4cGVjdGVkIGNvbHVtbgorQ09OVEVYVDogIENPUFkgdF9j b3B5X3RibCwgbGluZSAxOiAiMSwyLCIKKy0tb2sgY2FzZXMuCitDT1BZIHRfY29weV90YmwgRlJP TSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJf dGJsKTsKK05PVElDRTogIDQgcm93cyB3ZXJlIHNraXBwZWQgZHVlIHRvIGRhdGEgdHlwZSBpbmNv bXBhdGliaWxpdHkKKy0tc2hvdWxkIGZhaWwuIGxhY2sgcHJpdmlsZWRnZQorYmVnaW47CitjcmVh dGUgdXNlciByZWdyZXNzX3VzZXIyMDsKK2dyYW50IGluc2VydCh1c2VyaWQsY29weV90YmwsZmls ZW5hbWUsbGluZW5vLGxpbmUpIG9uIHRhYmxlIGVycl90YmwgdG8gcmVncmVzc191c2VyMjA7Citn cmFudCBpbnNlcnQgb24gdGFibGUgdF9jb3B5X3RibCB0byByZWdyZXNzX3VzZXIyMDsKK3NldCBy b2xlIHJlZ3Jlc3NfdXNlcjIwOworQ09QWSB0X2NvcHlfdGJsIEZST00gU1RESU4gV0lUSCAoZGVs aW1pdGVyICcsJywgb25fZXJyb3IgJ3RhYmxlJywgdGFibGUgZXJyX3RibCk7CitFUlJPUjogIHBl cm1pc3Npb24gZGVuaWVkIHRvIHNldCB0YWJsZSAicHVibGljIi4iZXJyX3RibCIgZm9yIENPUFkg RlJPTSBlcnJvciBzYXZpbmcKK0hJTlQ6ICBFbnN1cmUgY3VycmVudCB1c2VyIGhhdmUgZW5vdWdo IHByaXZpbGVkZ2Ugb24gInB1YmxpYyIuImVycl90YmwiIGZvciBDT1BZIEZST00gZXJyb3Igc2F2 aW5nCitST0xMQkFDSzsKK3NlbGVjdAlwZ19jbGFzcy5yZWxuYW1lIGFzIGNvcHlfZGVzdGluYXRp b24KKyAgICAgICAgLGZpbGVuYW1lCisgICAgICAgICxsaW5lbm8KKyAgICAgICAgLGxpbmUKKyAg ICAgICAgLGNvbG5hbWUKKyAgICAgICAgLHJhd19maWVsZF92YWx1ZQorICAgICAgICAsZXJyX21l c3NhZ2UKKyAgICAgICAgLGVycl9kZXRhaWwKKyAgICAgICAgLGVycm9yY29kZQorZnJvbSBlcnJf dGJsIGpvaW4gcGdfY2xhc3Mgb24gY29weV90YmwgPSBwZ19jbGFzcy5vaWQ7CisgY29weV9kZXN0 aW5hdGlvbiB8IGZpbGVuYW1lIHwgbGluZW5vIHwgICAgICAgICAgIGxpbmUgICAgICAgICAgIHwg Y29sbmFtZSB8ICAgcmF3X2ZpZWxkX3ZhbHVlICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBl cnJfbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcnJfZGV0YWlsIHwgZXJyb3Jj b2RlIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0KKyB0X2NvcHlfdGJsICAgICAgIHwgU1RESU4gICAgfCAgICAg IDEgfCAxLDIsYSAgICAgICAgICAgICAgICAgICAgfCBjICAgICAgIHwgYSAgICAgICAgICAgICAg ICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJhIiAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgfCAyMlAwMgorIHRfY29weV90YmwgICAgICAgfCBTVERJ TiAgICB8ICAgICAgMyB8IDEsX2p1bmssdGVzdCAgICAgICAgICAgICB8IGIgICAgICAgfCBfanVu ayAgICAgICAgICAgICAgIHwgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjog Il9qdW5rIiAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8IDIyUDAyCisgdF9jb3B5X3RibCAg ICAgICB8IFNURElOICAgIHwgICAgICA0IHwgY29sYSxjb2xiLGNvbGMgICAgICAgICAgIHwgYSAg ICAgICB8IGNvbGEgICAgICAgICAgICAgICAgfCBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlw ZSBpbnRlZ2VyOiAiY29sYSIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgMjJQMDIKKyB0 X2NvcHlfdGJsICAgICAgIHwgU1RESU4gICAgfCAgICAgIDcgfCAxLDExLDQyMzg2Nzk3MzI0ODk4 Nzk4NzkgfCBjICAgICAgIHwgNDIzODY3OTczMjQ4OTg3OTg3OSB8IHZhbHVlICI0MjM4Njc5NzMy NDg5ODc5ODc5IiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgaW50ZWdlciB8ICAgICAgICAgICAg fCAyMjAwMworKDQgcm93cykKKworc2VsZWN0ICogZnJvbSB0X2NvcHlfdGJsOworIGEgfCBiIHwg YyAgCistLS0rLS0tKy0tLS0KKyAxIHwgMiB8ICAzCisgNCB8IDUgfCAgNgorIDggfCA5IHwgMTAK KygzIHJvd3MpCisKIC0tIGNsZWFuIHVwCiBEUk9QIFRBQkxFIGZvcmNldGVzdDsKIERST1AgVEFC TEUgdmlzdGVzdDsKQEAgLTgwNyw2ICs5MDAsOSBAQCBEUk9QIFRBQkxFIGNoZWNrX2lnbl9lcnI7 CiBEUk9QIFRBQkxFIGNoZWNrX2lnbl9lcnIyOwogRFJPUCBET01BSU4gZGNoZWNrX2lnbl9lcnIy OwogRFJPUCBUQUJMRSBoYXJkX2VycjsKK0RST1AgVEFCTEUgZXJyX3RibDsKK0RST1AgVEFCTEUg ZXJyX3RibF8xOworRFJPUCBUQUJMRSB0X2NvcHlfdGJsOwogLS0KIC0tIENPUFkgRlJPTSAuLi4g REVGQVVMVAogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNxbAppbmRleCA4YjE0OTYyMTk0Li43OTJmZGU3 NjQ3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsCkBAIC01NTcsNiArNTU3LDg2IEBAIENPUFkgY2hl Y2tfaWduX2VyciBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9yIGlnbm9yZSk7CiAxCXsxfQkzCWFi YwogXC4KIAorY3JlYXRlIHRhYmxlIGVycl90YmwoCisgIHVzZXJpZCBvaWQsIC0tIHRoZSB1c2Vy IG9pZCB3aGlsZSBjb3B5IGdlbmVyYXRlZCB0aGlzIGVudHJ5CisgIGNvcHlfdGJsIG9pZCwgLS1j b3B5IHRhYmxlCisgIGZpbGVuYW1lIHRleHQsCisgIGxpbmVubyAgYmlnaW50LAorICBsaW5lICAg IHRleHQsCisgIGNvbG5hbWUgdGV4dCwKKyAgcmF3X2ZpZWxkX3ZhbHVlIHRleHQsCisgIGVycl9t ZXNzYWdlIHRleHQsCisgIGVycl9kZXRhaWwgdGV4dCwKKyAgZXJyb3Jjb2RlIHRleHQKKyk7Citj cmVhdGUgdGFibGUgZXJyX3RibF8xKAorICB1c2VyaWQgb2lkLCAtLSB0aGUgdXNlciBvaWQgd2hp bGUgY29weSBnZW5lcmF0ZWQgdGhpcyBlbnRyeQorICBjb3B5X3RibCBvaWQsIC0tY29weSB0YWJs ZQorICBmaWxlbmFtZSB0ZXh0LAorICBsaW5lbm8gIGJpZ2ludCwKKyAgbGluZSAgICB0ZXh0LAor ICBjb2xuYW1lIHRleHQsCisgIHJhd19maWVsZF92YWx1ZSB0ZXh0LAorICBlcnJfbWVzc2FnZSB0 ZXh0LAorICBlcnJfZGV0YWlsIHRleHQKKyk7CitjcmVhdGUgdGFibGUgdF9jb3B5X3RibChhIGlu dCwgYiBpbnQsIGMgaW50KTsKKworLS10aGUgZm9sb3dpbmcgc2hvdWxkIGFsbCBmYWlscworQ09Q WSB0X2NvcHlfdGJsIEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJyk7CitDT1BZIHRf Y29weV90YmwgVE8gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJyk7CitDT1BZIHRfY29weV90 YmwgRlJPTSBTVERJTiBXSVRIICh0YWJsZSBlcnJfdGJsKTsKK0NPUFkgdF9jb3B5X3RibCBUTyBT VERJTiBXSVRIICh0YWJsZSBlcnJfdGJsKTsKK0NPUFkgdF9jb3B5X3RibChhLGIpIEZST00gU1RE SU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgdGFibGUgbm90X2V4aXN0cyk7CitjcmVhdGUgdmll dyBzMSBhcyBzZWxlY3QgMSBhcyBhOworQ09QWSB0X2NvcHlfdGJsKGEpIEZST00gU1RESU4gV0lU SCAob25fZXJyb3IgJ3RhYmxlJywgdGFibGUgczEpOworZHJvcCB2aWV3IHMxOworCistLXNob3Vs ZCBmYWlsLiBlcnJfdGJsXzEgZG9lcyBub3QgbWVldCBjcml0ZXJpYQorQ09QWSB0X2NvcHlfdGJs KGEsYikgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsXzEp OworCistLXNob3VsZCBmYWlsLCBleHRyYSBjb2x1bW5zCitDT1BZIHRfY29weV90YmwoYSxiKSBG Uk9NIFNURElOIFdJVEggKGRlbGltaXRlciAnLCcsIG9uX2Vycm9yICd0YWJsZScsIHRhYmxlIGVy cl90YmwpOworMSwyLDMsNAorXC4KKworLS1zaG91bGQgZmFpbCwgbGVzcyBjb2x1bW5zCitDT1BZ IHRfY29weV90YmwoYSxiKSBGUk9NIFNURElOIFdJVEggKGRlbGltaXRlciAnLCcsIG9uX2Vycm9y ICd0YWJsZScsIHRhYmxlIGVycl90YmwpOworMSwyLAorXC4KKworLS1vayBjYXNlcy4KK0NPUFkg dF9jb3B5X3RibCBGUk9NIFNURElOIFdJVEggKGRlbGltaXRlciAnLCcsIG9uX2Vycm9yICd0YWJs ZScsIHRhYmxlIGVycl90YmwpOworMSwyLGEKKzEsMiwzCisxLF9qdW5rLHRlc3QKK2NvbGEsY29s Yixjb2xjCis0LDUsNgorOCw5LDEwCisxLDExLDQyMzg2Nzk3MzI0ODk4Nzk4NzkKK1wuCisKKy0t c2hvdWxkIGZhaWwuIGxhY2sgcHJpdmlsZWRnZQorYmVnaW47CitjcmVhdGUgdXNlciByZWdyZXNz X3VzZXIyMDsKK2dyYW50IGluc2VydCh1c2VyaWQsY29weV90YmwsZmlsZW5hbWUsbGluZW5vLGxp bmUpIG9uIHRhYmxlIGVycl90YmwgdG8gcmVncmVzc191c2VyMjA7CitncmFudCBpbnNlcnQgb24g dGFibGUgdF9jb3B5X3RibCB0byByZWdyZXNzX3VzZXIyMDsKK3NldCByb2xlIHJlZ3Jlc3NfdXNl cjIwOworQ09QWSB0X2NvcHlfdGJsIEZST00gU1RESU4gV0lUSCAoZGVsaW1pdGVyICcsJywgb25f ZXJyb3IgJ3RhYmxlJywgdGFibGUgZXJyX3RibCk7CitST0xMQkFDSzsKKworc2VsZWN0CXBnX2Ns YXNzLnJlbG5hbWUgYXMgY29weV9kZXN0aW5hdGlvbgorICAgICAgICAsZmlsZW5hbWUKKyAgICAg ICAgLGxpbmVubworICAgICAgICAsbGluZQorICAgICAgICAsY29sbmFtZQorICAgICAgICAscmF3 X2ZpZWxkX3ZhbHVlCisgICAgICAgICxlcnJfbWVzc2FnZQorICAgICAgICAsZXJyX2RldGFpbAor ICAgICAgICAsZXJyb3Jjb2RlCitmcm9tIGVycl90Ymwgam9pbiBwZ19jbGFzcyBvbiBjb3B5X3Ri bCA9IHBnX2NsYXNzLm9pZDsKKworc2VsZWN0ICogZnJvbSB0X2NvcHlfdGJsOwogLS0gY2xlYW4g dXAKIERST1AgVEFCTEUgZm9yY2V0ZXN0OwogRFJPUCBUQUJMRSB2aXN0ZXN0OwpAQCAtNTc1LDYg KzY1NSw5IEBAIERST1AgVEFCTEUgY2hlY2tfaWduX2VycjsKIERST1AgVEFCTEUgY2hlY2tfaWdu X2VycjI7CiBEUk9QIERPTUFJTiBkY2hlY2tfaWduX2VycjI7CiBEUk9QIFRBQkxFIGhhcmRfZXJy OworRFJPUCBUQUJMRSBlcnJfdGJsOworRFJPUCBUQUJMRSBlcnJfdGJsXzE7CitEUk9QIFRBQkxF IHRfY29weV90Ymw7CiAKIC0tCiAtLSBDT1BZIEZST00gLi4uIERFRkFVTFQKLS0gCjIuMzQuMQoK --00000000000037f3450620122005--