From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 35C461FF17C for <inbox@lore.proxmox.com>; Wed, 2 Apr 2025 18:33:06 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A65F81F5F3; Wed, 2 Apr 2025 18:32:55 +0200 (CEST) Mime-Version: 1.0 Date: Wed, 02 Apr 2025 18:32:21 +0200 Message-Id: <D8WAPGBPBNPZ.1D4ISTIVN7UEN@proxmox.com> To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com> From: "Max Carrara" <m.carrara@proxmox.com> X-Mailer: aerc 0.18.2-0-ge037c095a049 References: <20250326142059.261938-1-m.carrara@proxmox.com> <20250326142059.261938-9-m.carrara@proxmox.com> <1743495535.spdhir37c5.astroid@yuna.none> In-Reply-To: <1743495535.spdhir37c5.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.079 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pve-devel] [PATCH v1 pve-storage 8/8] pluginbase: document import and export methods X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> T24gVHVlIEFwciAxLCAyMDI1IGF0IDEwOjQwIEFNIENFU1QsIEZhYmlhbiBHcsO8bmJpY2hsZXIg d3JvdGU6Cj4gQ0NpbmcgRmlvbmEgaW4gY2FzZSBvZiBmdXJ0aGVyIGlucHV0IHcuci50LiBleHBv cnQvaW1wb3J0IHRoaW5ncwo+Cj4gT24gTWFyY2ggMjYsIDIwMjUgMzoyMCBwbSwgTWF4IENhcnJh cmEgd3JvdGU6Cj4gPiBBZGFwdCB0aGUgcHJldmlvdXMgZGVzY3JpcHRpb24sIHNsaWdodGx5IHJl d29yZGluZyBpdCBhbmQgZm9ybWF0dGluZwo+ID4gaXQgZm9yIFBPRCB1bmRlciB0aGUgSU1QT1JU UyBBTkQgRVhQT1JUUyBzZWN0aW9uLgo+ID4gCj4gPiBBbHNvIGFkZCBkb2NzdHJpbmdzIGZvciB0 aGUgZm9sbG93aW5nIG1ldGhvZHM6Cj4gPiAtIHZvbHVtZV9leHBvcnQKPiA+IC0gdm9sdW1lX2V4 cG9ydF9mb3JtYXRzCj4gPiAtIHZvbHVtZV9pbXBvcnQKPiA+IC0gdm9sdW1lX2ltcG9ydF9mb3Jt YXRzCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE1heCBDYXJyYXJhIDxtLmNhcnJhcmFAcHJveG1v eC5jb20+Cj4gPiBDby1hdXRob3JlZC1ieTogTWF4aW1pbGlhbm8gU2FuZG92YWwgPG0uc2FuZG92 YWxAcHJveG1veC5jb20+Cj4gPiAtLS0KPiA+ICBzcmMvUFZFL1N0b3JhZ2UvUGx1Z2luQmFzZS5w bSB8IDEzNCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCj4gPiAgMSBmaWxlIGNo YW5nZWQsIDEwNSBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAt LWdpdCBhL3NyYy9QVkUvU3RvcmFnZS9QbHVnaW5CYXNlLnBtIGIvc3JjL1BWRS9TdG9yYWdlL1Bs dWdpbkJhc2UucG0KPiA+IGluZGV4IGExYmZjOGQuLmNmYTUwODcgMTAwNjQ0Cj4gPiAtLS0gYS9z cmMvUFZFL1N0b3JhZ2UvUGx1Z2luQmFzZS5wbQo+ID4gKysrIGIvc3JjL1BWRS9TdG9yYWdlL1Bs dWdpbkJhc2UucG0KPiA+IEBAIC0xMzQ1LDU1ICsxMzQ1LDEzMSBAQCBzdWIgcHJ1bmVfYmFja3Vw cyB7Cj4gPiAgCj4gPiAgPWhlYWQyIElNUE9SVFMgQU5EIEVYUE9SVFMKPiA+ICAKPiA+ICtBbnkg cGF0aC1iYXNlZCBzdG9yYWdlIGlzIGFzc3VtZWQgdG8gc3VwcG9ydCBDPHJhdz4gYW5kIEM8dGFy PiBzdHJlYW1zLCBzbwo+ID4gK3RoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBpbiBDPEw8UFZF OjpTdG9yYWdlOjpQbHVnaW4+PiB3aWxsIHJldHVybiB0aGlzIGlmCj4gPiArQzw8ICRzY2ZnLT57 cGF0aH0gPj4gaXMgc2V0ICh0aGVyZWJ5IG1pbWlja2luZyB0aGUgb2xkIEM8PCBQVkU6OlN0b3Jh Z2U6OnN0b3JhZ2VfbWlncmF0ZSgpID4+Cj4gPiArZnVuY3Rpb24pLgoKUmVwbHlpbmcgdXAgaGVy ZSB0byBhZGRyZXNzIGFsbCBvZiB0aGUgY29tbWVudHMgYmVsb3c6IFllYWgsIHdlJ2xsCnJld29y ayB0aGlzIGVudGlyZSBzZWN0aW9uIGhlcmUsIEkgdGhpbmssIGFuZCBleHBhbmQgdXBvbiBldmVy eXRoaW5nCm1vcmUuIFNlZW1zIGxpa2Ugd2UgbWlzc2VkIGEgbG90IG9mIGRldGFpbHMuIDpzCgo+ Cj4gbWVoLCBJIGRvbid0IHRoaW5rIHRoaXMgbWFrZXMgc2Vuc2UgaWYgd2Ugd2FudCB0byBkb2N1 bWVudCB0aGUKPiBpbnRlcmZhY2UsIHdlIHNob3VsZCBkb2N1bWVudCB0aGUgaW50ZXJmYWNlLCBh bmQgbm90IHRoZSBpbXBsZW1lbnRhdGlvbgo+IG9mIG91ciBwbHVnaW4gaGllcmFyY2h5Li4KPgo+ ID4gKwo+ID4gK1BsdWdpbnMgbWF5IGZhbGwgYmFjayB0byBtZXRob2RzIGxpa2UgQzx2b2x1bWVf ZXhwb3J0PiwgQzx2b2x1bWVfaW1wb3J0PiwgZXRjLgo+ID4gK29mIEM8TDxQVkU6OlN0b3JhZ2U6 OlBsdWdpbj4+IGluIGNhc2UgdGhlIGZvcm1hdCBkb2Vzbid0IG1hdGNoIHRoZWlyCj4gPiArc3Bl Y2lhbGl6ZWQgaW1wbGVtZW50YXRpb25zIHRvIHJldXNlIHRoZSBDPHJhdz4vQzx0YXI+IGNvZGUu Cj4KPiBhbmQgdGhlc2Ugc2hvdWxkIG1vdmUgdG8gc29tZSBoZWxwZXIgbW9kdWxlIGFuZCBiZSB1 c2VkIGJ5Cj4gUFZFOjpTdG9yYWdlOjpQbHVnaW4sIGlmIHdlIHdhbnQgdG8gYWxsb3cgZXh0ZXJu YWwgcGx1Z2lucyB0byByZS11c2UKPiB0aGVtIGFzIGJhc2ljIGltcGxlbWVudGF0aW9uLi4KPgo+ ID4gKwo+ID4gKz1oZWFkMyBGT1JNQVRTCj4gPiArCj4gPiArVGhlIGZvbGxvd2luZyBmb3JtYXRz IGFyZSBhbGwgcHJlZml4ZWQgd2l0aCBpbWFnZSBpbmZvcm1hdGlvbiBpbiB0aGUgZm9ybSBvZiBh Cj4gPiArNjQgYml0IGxpdHRsZSBlbmRpYW4gdW5zaWduZWQgaW50ZWdlciAoQzw8IHBhY2soJ1Fc PCcpID4+KSBpbiBvcmRlciB0byBiZSBhYmxlCj4gPiArdG8gcHJlYWxsb2NhdGUgdGhlIGltYWdl IG9uIHN0b3JhZ2VzIHdoaWNoIHJlcXVpcmUgaXQuCj4KPiAiaW1hZ2UgaW5mb3JtYXRpb24iIHNo b3VsZCBtYXliZSBiZSBhIGJpdCBtb3JlIHByZWNpc2UsIGl0J3MgZWFzeSB0bwo+IGd1ZXNzIGZy b20gdGhlIG5hbWUgdGhhdCBpbmZvcm1hdGlvbj09c2l6ZSwgYnV0IHdoeSBub3Qgc3BlbGwgaXQg b3V0Pwo+Cj4gPiArCj4gPiArPW92ZXIKPiA+ICsKPiA+ICs9aXRlbSAqIEM8PCByYXcrc2l6ZSA+ PiAoaW1hZ2UgZmlsZXMgb25seSkKPiA+ICsKPiA+ICtBIHJhdyBiaW5hcnkgZGF0YSBzdHJlYW0g YXMgcHJvZHVjZWQgdmlhIEM8PCBkZCBpZj0kSU1BR0VfRklMRSA+Pi4KPgo+IEEgYmluYXJ5IGRh dGEgc3RyZWFtIGNvbnRhaW5pbmcgYSB2b2x1bWUncyBsb2dpY2FsIHJhdyBkYXRhLCBmb3IgZXhh bXBsZQo+IGFzIHByb2R1Y2VkIHZpYSAuLiBpZiB0aGUgaW1hZ2UgaXMgYWxyZWFkeSBpbiByYXcg Zm9ybWF0LCAqb3IgdmlhCj4gcWVtdS1pbWcgY29udmVydCogaWYgbm90Lgo+Cj4gPiArCj4gPiAr PWl0ZW0gKiBDPDwgcWNvdzIrc2l6ZSA+PiwgQzw8IHZtZGsgPj4gKGltYWdlIGZpbGVzIG9ubHkp Cj4KPiBtaXNzaW5nICtzaXplIGZvciB2bWRrCj4KPiA+ICsKPiA+ICtBIHJhdyBDPHFjb3cyPi9D PHZtZGs+Ly4uLiBmaWxlIGFzIHByb2R1Y2VkIHZpYSBDPDwgZGQgaWY9c29tZV9maWxlLnFjb3cy ID4+Cj4gPiArZm9yIGZpbGVzIHdoaWNoIGFyZSBhbHJlYWR5IGluIEM8cWNvdzI+IGZvcm1hdCwg b3IgdmlhIEM8cWVtdS1pbWcgY29udmVydD4uCj4KPiAiQSByYXcgcWNvdzIvdm1kay8uLiBmaWxl IiBpcyBjb25mdXNpbmcuLgo+Cj4gQSBiaW5hcnkgZGF0YSBzdHJlYW0gY29udGFpbmluZyB0aGUg cWNvdzIvdm1kay1mb3JtYXR0ZWQgY29udGVudHMgb2YgYQo+IHFjb3cyL3ZtZGsgZmlsZSBhcyBw cm9kdWNlZCB2aWEgLi4KPgo+IHRoZSBxZW11LWltZyBjb252ZXJ0IHBhcnQgZ290IG1vdmVkIHRv IHRoZSB3cm9uZyBmb3JtYXQsIGl0J3Mgbm90IG5lZWRlZAo+IHRvIHByb2R1Y2UgYSBxY293Mitz aXplIHN0cmVhbSBmb3IgcmF3IGZpbGVzICh3ZSBkb24ndCBkbyB0aGF0KSwgYnV0IHRvCj4gcHJv ZHVjZSBhIHJhdytzaXplIHN0cmVhbSBmcm9tIGEgcWNvdzIgZmlsZSwgc2VlIGFib3ZlLgo+Cj4g PiArCj4gPiArQjxOT1RFOj4gVGhlc2UgZm9ybWF0cyBhcmUgb25seSB2YWxpZCB3aXRoIEM8JHdp dGhfc25hcHNob3RzPiBiZWluZyB0cnVlIChDPDE+KS4KPgo+IHRoYXQncyBub3Qgc3RyaWN0bHkg c3BlYWtpbmcgdHJ1ZSwgYnV0IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUKPiBjdXJy ZW50IGltcGxlbWVudGF0aW9uLiB3aGF0IGlzIHRydWUgaXMgdGhhdCByYXcrc2l6ZSBjYW4gbm90 IGNvbnRhaW4KPiBzbmFwc2hvdHMgZm9yIG9idmlvdXMgcmVhc29ucy4KPgo+ID4gKwo+ID4gKz1p dGVtICogQzw8IHRhcitzaXplID4+IChzdWJ2b2x1bWVzIG9ubHkpCj4gPiArCj4gPiArQSBHTlUg Qzx0YXI+IHN0cmVhbSBjb250YWluaW5nIGp1c3QgdGhlIGlubmVyIGNvbnRlbnRzIG9mIHRoZSBz dWJ2b2x1bWUuIFRoaXMKPiA+ICtkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBjb250 ZW50cyBvZiBhIHByaXZpbGVnZWQgb3IgdW5wcml2aWxlZ2VkCj4gPiArY29udGFpbmVyLiBJbiBv dGhlciB3b3JkcywgdGhpcyBpcyBmcm9tIHRoZSByb290IHVzZXIgbmFtZXNwYWNlJ3MgcG9pbnQg b2Ygdmlldwo+ID4gK3dpdGggbm8gdWlkLW1hcHBpbmcgaW4gZWZmZWN0LiBBcyBwcm9kdWNlZCB2 aWEgZS5nLgo+ID4gK0M8PCB0YXIgLUMgdm0tMTAwLWRpc2stMS5zdWJ2b2wgLWNwZiBvdXRwdXRf ZmlsZS5kYXQgLiA+Pgo+Cj4gd2hhdCBpcyAiaW5uZXIiPyBzaG91bGQvbXVzdCB0aGUgY29udGVu dCBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZT8KPiBhbmNob3JlZD8gLi4uCj4KPiA+ICsKPiA+ICs9 YmFjawo+ID4gKwo+ID4gID1jdXQKPiA+ICAKPiA+IC0jIEltcG9ydC9FeHBvcnQgaW50ZXJmYWNl Ogo+ID4gLSMgICBBbnkgcGF0aCBiYXNlZCBzdG9yYWdlIGlzIGFzc3VtZWQgdG8gc3VwcG9ydCAn cmF3JyBhbmQgJ3Rhcicgc3RyZWFtcywgc28KPiA+IC0jICAgdGhlIGRlZmF1bHQgaW1wbGVtZW50 YXRpb25zIHdpbGwgcmV0dXJuIHRoaXMgaWYgJHNjZmctPntwYXRofSBpcyBzZXQsCj4gPiAtIyAg IG1pbWlja2luZyB0aGUgb2xkIFBWRTo6U3RvcmFnZTo6c3RvcmFnZV9taWdyYXRlKCkgZnVuY3Rp b24uCj4gPiAtIwo+ID4gLSMgUGx1Z2lucyBtYXkgZmFsbCBiYWNrIHRvIFBWRTo6U3RvcmFnZTo6 UGx1Z2luOjp2b2x1bWVfe2V4cG9ydCxpbXBvcnR9Li4uCj4gPiAtIyAgIGZ1bmN0aW9ucyBpbiBj YXNlIHRoZSBmb3JtYXQgZG9lc24ndCBtYXRjaCB0aGVpciBzcGVjaWFsaXplZAo+ID4gLSMgICBp bXBsZW1lbnRhdGlvbnMgdG8gcmV1c2UgdGhlIHJhdy90YXIgY29kZS4KPiA+IC0jCj4gPiAtIyBG b3JtYXQgc3BlY2lmaWNhdGlvbjoKPiA+IC0jICAgVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBh bGwgcHJlZml4ZWQgd2l0aCBpbWFnZSBpbmZvcm1hdGlvbiBpbiB0aGUgZm9ybQo+ID4gLSMgICBv ZiBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIHVuc2lnbmVkIGludGVnZXIgKHBhY2soJ1E8JykpIGlu IG9yZGVyIHRvIGJlIGFibGUKPiA+IC0jICAgdG8gcHJlYWxsb2NhdGUgdGhlIGltYWdlIG9uIHN0 b3JhZ2VzIHdoaWNoIHJlcXVpcmUgaXQuCj4gPiAtIwo+ID4gLSMgICByYXcrc2l6ZTogKGltYWdl IGZpbGVzIG9ubHkpCj4gPiAtIyAgICAgQSByYXcgYmluYXJ5IGRhdGEgc3RyZWFtIHN1Y2ggYXMg cHJvZHVjZWQgdmlhIGBkZCBpZj1UaGVJbWFnZUZpbGVgLgo+ID4gLSMgICBxY293MitzaXplLCB2 bWRrOiAoaW1hZ2UgZmlsZXMgb25seSkKPiA+IC0jICAgICBBIHJhdyBxY293Mi92bWRrLy4uLiBm aWxlIHN1Y2ggYXMgcHJvZHVjZWQgdmlhIGBkZCBpZj1zb21lLnFjb3cyYCBmb3IKPiA+IC0jICAg ICBmaWxlcyB3aGljaCBhcmUgYWxyZWFkeSBpbiBxY293MiBmb3JtYXQsIG9yIHZpYSBgcWVtdS1p bWcgY29udmVydGAuCj4gPiAtIyAgICAgTm90ZSB0aGF0IHRoZXNlIGZvcm1hdHMgYXJlIG9ubHkg dmFsaWQgd2l0aCAkd2l0aF9zbmFwc2hvdHMgYmVpbmcgdHJ1ZS4KPiA+IC0jICAgdGFyK3NpemU6 IChzdWJ2b2x1bWVzIG9ubHkpCj4gPiAtIyAgICAgQSBHTlUgdGFyIHN0cmVhbSBjb250YWluaW5n IGp1c3QgdGhlIGlubmVyIGNvbnRlbnRzIG9mIHRoZSBzdWJ2b2x1bWUuCj4gPiAtIyAgICAgVGhp cyBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBjb250ZW50cyBvZiBhIHByaXZpbGVn ZWQgb3IKPiA+IC0jICAgICB1bnByaXZpbGVnZWQgY29udGFpbmVyLiBJbiBvdGhlciB3b3Jkcywg dGhpcyBpcyBmcm9tIHRoZSByb290IHVzZXIKPiA+IC0jICAgICBuYW1lc3BhY2UncyBwb2ludCBv ZiB2aWV3IHdpdGggbm8gdWlkLW1hcHBpbmcgaW4gZWZmZWN0Lgo+ID4gLSMgICAgIEFzIHByb2R1 Y2VkIHZpYSBgdGFyIC1DIHZtLTEwMC1kaXNrLTEuc3Vidm9sIC1jcGYgVGhlT3V0cHV0RmlsZS5k YXQgLmAKPiA+ICs9aGVhZDMgJHBsdWdpbi0+dm9sdW1lX2V4cG9ydChcJXNjZmcsICRzdG9yZWlk LCAkZmgsICR2b2xuYW1lLCAkZm9ybWF0IFssICRzbmFwc2hvdCwgJGJhc2Vfc25hcHNob3QsICR3 aXRoX3NuYXBzaG90c10pCj4gPiArCj4gPiArPWhlYWQzICRwbHVnaW4tPnZvbHVtZV9leHBvcnQo Li4uKQo+ID4gKwo+ID4gK0V4cG9ydHMgYSB2b2x1bWUgb3IgYSB2b2x1bWUncyBDPCRzbmFwc2hv dD4gaW50byBhIGZpbGUgaGFuZGxlIEM8JGZoPiBhcyBhCj4gPiArc3RyZWFtIHdpdGggYSBkZXNp cmVkIGV4cG9ydCBDPCRmb3JtYXQ+LiBTZWUgTDxGT1JNQVRTPiBmb3IgYWxsIGltcG9ydC9leHBv cnQKPiA+ICtmb3JtYXRzLgo+ID4gKwo+ID4gK09wdGlvbmFsbHksIEM8JHNuYXBzaG90PiAoaWYg cHJvdmlkZWQpIG1heSBoYXZlIGEgQzwkYmFzZV9zbmFwc2hvdD4sIGFuZAo+ID4gK0M8JHdpdGhf c25hcHNob3RzPiBzdGF0ZXMgd2hldGhlciB0aGUgdm9sdW1lIGhhcyBzbmFwc2hvdHMgb3ZlcmFs bC4KPgo+IHRoaXMgaXMgaW5jb21wbGV0ZS93cm9uZwo+Cj4gJHdpdGhfc25hcHNob3RzIG1lYW5z IHRoZSBleHBvcnQgc2hvdWxkIGluY2x1ZGUgc25hcHNob3RzLCBub3Qgd2hldGhlcgo+IHRoZSB2 b2x1bWUgaGFzIHNuYXBzaG90cy4uCj4gJHNuYXBzaG90IG1lYW5zICJ0aGlzIGlzIHRoZSBzbmFw c2hvdCB0byBleHBvcnQiIGlmIG9ubHkgZXhwb3J0aW5nIHRoZQo+IHNuYXBzaG90ICgkd2l0aF9z bmFwc2hvdHMgPT0gMCksIG9yICJ0aGlzIGlzIHRoZSAqbGFzdCogc25hcHNob3QgZXhwb3J0Igo+ IGlmIGV4cG9ydGluZyBhIHN0cmVhbSBvZiBzbmFwc2hvdHMgKCR3aXRoX3NuYXBzaG90cyA9PSAx KQo+ICRiYXNlX3NuYXBzaG90IG1lYW5zICJ0aGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgc25hcHNo b3QgcmFuZ2UgdG8gZXhwb3J0Igo+IChpLmUuLCBkbyBhbiBpbmNyZW1lbnRhbCBleHBvcnQgb24g dG9wIG9mIHRoaXMgYmFzZSkKPgo+IHRoaXMgaXMgbW9zdGx5IG9ubHkgcmVsZXZhbnQgZm9yIHpm cyBhdCB0aGUgbW9tZW50IChvdGhlciBzdG9yYWdlcyBjYW4KPiBlaXRoZXIgZXhwb3J0IGEgdm9s dW1lIGluY2x1ZGluZyBpdHMgc25hcHNob3RzLCBvciBqdXN0IHRoZSB2b2x1bWUsIGJ1dAo+IG5v IGNvbXBsaWNhdGVkIGluY3JlbWVudGFsIHN0cmVhbXMgb2Ygc25hcHNob3RzKSwgYnV0IHdpbGwg Y2hhbmdlIG9uY2UKPiB3ZSBpbXBsZW1lbnQgcmVwbGljYXRpb24gZXhwb3J0L2ltcG9ydCBmb3Ig b3RoZXIgc3RvcmFnZXMuLgo+Cj4gPiArCj4gPiArQzxkaWU+cyBpbiBvcmRlciB0byBhYm9ydCB0 aGUgZXhwb3J0IGlmIHRoZXJlIGFyZSAoZ3JhdmUpIHByb2JsZW1zLCBpZiB0aGUKPiA+ICtnaXZl biBDPCRmb3JtYXQ+IGlzIG5vdCBzdXBwb3J0ZWQsIG9yIGlmIGV4cG9ydGluZyB2b2x1bWVzIGlz IG5vdCBzdXBwb3J0ZWQgYXMKPiA+ICthIHdob2xlLgo+ID4gKwo+ID4gKz1jdXQKPiA+ICAKPiA+ IC0jIEV4cG9ydCBhIHZvbHVtZSBpbnRvIGEgZmlsZSBoYW5kbGUgYXMgYSBzdHJlYW0gb2YgZGVz aXJlZCBmb3JtYXQuCj4gPiAgc3ViIHZvbHVtZV9leHBvcnQgewo+ID4gICAgICBteSAoJGNsYXNz LCAkc2NmZywgJHN0b3JlaWQsICRmaCwgJHZvbG5hbWUsICRmb3JtYXQsICRzbmFwc2hvdCwgJGJh c2Vfc25hcHNob3QsICR3aXRoX3NuYXBzaG90cykgPSBAXzsKPiA+ICAgICAgY3JvYWsgImltcGxl bWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAgfQo+ID4gIAo+ID4gKz1oZWFkMyAkcGx1Z2lu LT52b2x1bWVfZXhwb3J0X2Zvcm1hdHMoXCVzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUgWywgJHNu YXBzaG90LCAkYmFzZV9zbmFwc2hvdCwgJHdpdGhfc25hcHNob3RdKQo+ID4gKwo+ID4gKz1oZWFk MyAkcGx1Z2luLT52b2x1bWVfZXhwb3J0X2Zvcm1hdHMoLi4uKQo+ID4gKwo+ID4gK0I8T1BUSU9O QUw6PiBNYXkgYmUgaW1wbGVtZW50ZWQgaW4gYSBzdG9yYWdlIHBsdWdpbi4KPiA+ICsKPiA+ICtS ZXR1cm5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdHMgZm9yIHRoZSBnaXZlbiB2 b2x1bWUgb3Igc25hcHNob3QuCj4gPiArCj4gPiArT3B0aW9uYWxseSwgQzwkc25hcHNob3Q+IChp ZiBwcm92aWRlZCkgbWF5IGhhdmUgYSBDPCRiYXNlX3NuYXBzaG90PiwgYW5kCj4gPiArQzwkd2l0 aF9zbmFwc2hvdHM+IHN0YXRlcyB3aGV0aGVyIHRoZSB2b2x1bWUgaGFzIHNuYXBzaG90cyBvdmVy YWxsLgo+Cj4gc2VlIGFib3ZlLi4gdGhlc2UgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBhZmZlY3Qg dGhlIHJldHVybmVkIGxpc3Qgb2YKPiBmb3JtYXRzCj4KPiA+ICsKPiA+ICtJZiB0aGUgc3RvcmFn ZSBkb2VzIG5vdCBzdXBwb3J0IGV4cG9ydGluZyB2b2x1bWVzIGF0IGFsbCwgYW5kIGVtcHR5IGxp c3Qgc2hvdWxkCj4gPiArYmUgcmV0dXJuZWQuCj4gPiArCj4gPiArPWN1dAo+ID4gKwo+ID4gIHN1 YiB2b2x1bWVfZXhwb3J0X2Zvcm1hdHMgewo+ID4gICAgICBteSAoJGNsYXNzLCAkc2NmZywgJHN0 b3JlaWQsICR2b2xuYW1lLCAkc25hcHNob3QsICRiYXNlX3NuYXBzaG90LCAkd2l0aF9zbmFwc2hv dHMpID0gQF87Cj4gPiAgICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4iOwo+ ID4gIH0KPiA+ICAKPiA+IC0jIEltcG9ydCBkYXRhIGZyb20gYSBzdHJlYW0sIGNyZWF0aW5nIGEg bmV3IG9yIHJlcGxhY2luZyBvciBhZGRpbmcgdG8gYW4gZXhpc3Rpbmcgdm9sdW1lLgo+ID4gKz1o ZWFkMyAkcGx1Z2luLT52b2x1bWVfaW1wb3J0KFwlc2NmZywgJHN0b3JlaWQsICRmaCwgJHZvbG5h bWUsICRmb3JtYXQgWywgJHNuYXBzaG90LCAkYmFzZV9zbmFwc2hvdCwgJHdpdGhfc25hcHNob3Rz LCAkYWxsb3dfcmVuYW1lXSkKPiA+ICsKPiA+ICs9aGVhZDMgJHBsdWdpbi0+dm9sdW1lX2ltcG9y dCguLi4pCj4gPiArCj4gPiArQjxPUFRJT05BTDo+IE1heSBiZSBpbXBsZW1lbnRlZCBpbiBhIHN0 b3JhZ2UgcGx1Z2luLgo+ID4gKwo+ID4gK0ltcG9ydHMgZGF0YSB3aXRoIHRoZSBnaXZlbiBDPCRm b3JtYXQ+IGZyb20gYSBzdHJlYW0gLyBmaWxlaGFuZGxlIEM8JGZoPiwKPiA+ICtjcmVhdGluZyBh IG5ldyB2b2x1bWUsIG9yIHJlcGxhY2luZyBvciBhZGRpbmcgdG8gYW4gZXhpc3Rpbmcgb25lLiBS ZXR1cm5zIHRoZQo+ID4gK3ZvbHVtZSBJRCBvZiB0aGUgaW1wb3J0ZWQgdm9sdW1lLgo+Cj4gSSBk b24ndCB0aGluayB3ZSBldmVyIHJlcGxhY2UgYW4gZXhpc3Rpbmcgdm9sdW1lPyB3aGF0IHdlIG1p Z2h0IGRvIGlzCj4gaW1wb3J0IG5ldyBzbmFwc2hvdHMgb24gdG9wIG9mIGJhc2Vfc25hcHNob3Qg aW4gY2FzZSBvZiBhbiBpbmNyZW1lbnRhbAo+IGltcG9ydC4uCj4KPiBtYXliZQo+Cj4gY3JlYXRp bmcgYSBuZXcgdm9sdW1lIG9yIGltcG9ydGluZyBhZGRpdGlvbmFsIHNuYXBzaG90cyBvbiB0b3Ag b2YgYW4KPiBleGlzdGluZyBvbmUuCj4KPiA+ICsKPiA+ICtPcHRpb25hbGx5LCBDPCRzbmFwc2hv dD4gKGlmIHByb3ZpZGVkKSBtYXkgaGF2ZSBhIEM8JGJhc2Vfc25hcHNob3Q+LCBhbmQKPiA+ICtD PCR3aXRoX3NuYXBzaG90cz4gc3RhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBoYXMgc25hcHNob3Rz IG92ZXJhbGwuIFJlbmFtaW5nIGFuCj4gPiArZXhpc3Rpbmcgdm9sdW1lIG1heSBhbHNvIG9wdGlv bmFsbHkgYmUgYWxsb3dlZCB2aWEgQzwkYWxsb3dfcmVuYW1lPgo+Cj4gc2VlIGFib3ZlLCBidXQg aGVyZSAkc25hcHNob3QgaXMgbWFpbmx5IHRoZXJlIHRvIGhhdmUgdGhlIHNhbWUKPiBhcmd1bWVu dHMgZm9yIHZvbHVtZV9pbXBvcnRfZm9ybWF0cyBzbyBhIHBsdWdpbiBjYW4gaGF2ZSBhIHNpbmds ZQo+IGltcGxlbWVudGF0aW9uLCBub3QgYmVjYXVzZSBpdCBpcyB1c2VkIGFueXdoZXJlIElJUkMu Lgo+Cj4gPiArCj4gPiArQzxkaWU+cyBpZiB0aGUgaW1wb3J0IGZhaWxzLCBpZiB0aGUgZ2l2ZW4g QzwkZm9ybWF0PiBpcyBub3Qgc3VwcG9ydGVkLCBvciBpZgo+ID4gK2ltcG9ydGluZyB2b2x1bWVz IGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSB3aG9sZS4KPiA+ICsKPiA+ICs9Y3V0Cj4gPiArCj4gPiAg c3ViIHZvbHVtZV9pbXBvcnQgewo+ID4gICAgICBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQs ICRmaCwgJHZvbG5hbWUsICRmb3JtYXQsICRzbmFwc2hvdCwgJGJhc2Vfc25hcHNob3QsICR3aXRo X3NuYXBzaG90cywgJGFsbG93X3JlbmFtZSkgPSBAXzsKPiA+ICAgICAgY3JvYWsgImltcGxlbWVu dCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAgfQo+ID4gIAo+ID4gKz1oZWFkMyAkcGx1Z2luLT52 b2x1bWVfaW1wb3J0X2Zvcm1hdHMoXCVzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUgWywgJHNuYXBz aG90LCAkYmFzZV9zbmFwc2hvdCwgJHdpdGhfc25hcHNob3RdKQo+ID4gKwo+ID4gKz1oZWFkMyAk cGx1Z2luLT52b2x1bWVfaW1wb3J0X2Zvcm1hdHMoLi4uKQo+ID4gKwo+ID4gK0I8T1BUSU9OQUw6 PiBNYXkgYmUgaW1wbGVtZW50ZWQgaW4gYSBzdG9yYWdlIHBsdWdpbi4KPiA+ICsKPiA+ICtSZXR1 cm5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgaW1wb3J0IGZvcm1hdHMgZm9yIHRoZSBnaXZlbiB2b2x1 bWUgb3Igc25hcHNob3QuCj4gPiArCj4gPiArT3B0aW9uYWxseSwgQzwkc25hcHNob3Q+IChpZiBw cm92aWRlZCkgbWF5IGhhdmUgYSBDPCRiYXNlX3NuYXBzaG90PiwgYW5kCj4gPiArQzwkd2l0aF9z bmFwc2hvdHM+IHN0YXRlcyB3aGV0aGVyIHRoZSB2b2x1bWUgaGFzIHNuYXBzaG90cyBvdmVyYWxs Lgo+Cj4gc2VlIGFib3ZlLCB0aGVzZSBwYXJhbWV0ZXJzIHNlcnZlIHRoZSBzYW1lIHB1cnBvc2Ug YXMgZm9yIGV4cG9ydF9mb3JtYXRzCj4gLSB0byBhZmZlY3QgdGhlIHJldHVybiB2YWx1ZSAvIGlu Zm9ybSB0aGUgcGx1Z2luIGFib3V0IHRoZSBpbnRlbmRlZAo+IGV4cG9ydC9pbXBvcnQKPgo+IGl0 IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gbm90ZSBzb21ld2hlcmUgdGhhdCB0aGUgb3JkZXIgb2YgcmV0 dXJuZWQgZm9ybWF0cwo+IG1hdHRlcnMgZm9yIGJvdGgsIHNpbmNlIHRoZSBmaXJzdCBlbGVtZW50 IG9mIHRoZSBpbnRlcnNlY3Rpb24gb2YgYm90aAo+IHJldHVybiB2YWx1ZXMgd2lsbCBiZSB1c2Vk IHRvIGRvIGEgc3RvcmFnZSBtaWdyYXRpb24/Cj4KPiA+ICsKPiA+ICtJZiB0aGUgc3RvcmFnZSBk b2VzIG5vdCBzdXBwb3J0IGltcG9ydGluZyB2b2x1bWVzIGF0IGFsbCwgYW5kIGVtcHR5IGxpc3Qg c2hvdWxkCj4gPiArYmUgcmV0dXJuZWQuCj4gPiArCj4gPiArPWN1dAo+ID4gKwo+ID4gIHN1YiB2 b2x1bWVfaW1wb3J0X2Zvcm1hdHMgewo+ID4gICAgICBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3Jl aWQsICR2b2xuYW1lLCAkc25hcHNob3QsICRiYXNlX3NuYXBzaG90LCAkd2l0aF9zbmFwc2hvdHMp ID0gQF87Cj4gPiAgICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4g IH0KPiA+IC0KPiA+ICAxOwo+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+IHB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBwdmUtZGV2ZWxAbGlzdHMu cHJveG1veC5jb20KPiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9s aXN0aW5mby9wdmUtZGV2ZWwKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KcHZlLWRldmVsIG1haWxpbmcgbGlzdApwdmUtZGV2ZWxAbGlzdHMucHJveG1v eC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8v cHZlLWRldmVsCg==