From mboxrd@z Thu Jan 1 00:00:00 1970 From: Allen Samuels Subject: RE: Adding compression support for bluestore. Date: Fri, 19 Feb 2016 23:13:26 +0000 Message-ID: References: <56C1FCF3.4030505@mirantis.com> <56C3BAA3.3070804@mirantis.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-bn1bn0100.outbound.protection.outlook.com ([157.56.110.100]:12019 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1946600AbcBSX2f (ORCPT ); Fri, 19 Feb 2016 18:28:35 -0500 In-Reply-To: <56C3BAA3.3070804@mirantis.com> Content-Language: en-US Sender: ceph-devel-owner@vger.kernel.org List-ID: To: Igor Fedotov , Haomai Wang Cc: ceph-devel VGhpcyBpcyBhIGdvb2Qgc3RhcnQgdG8gYW4gYXJjaGl0ZWN0dXJlIGZvciBwZXJmb3JtaW5nIGNv bXByZXNzaW9uLg0KDQpJIGFtIGNvbmNlcm5lZCB0aGF0IGl0J3MgYSBiaXQgdG9vIHNpbXBsZSBh dCB0aGUgZXhwZW5zZSBvZiBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZS4gSW4g cGFydGljdWxhciwgSSBiZWxpZXZlIGl0J3Mgb2Z0ZW4gaW5lZmZpY2llbnQgdG8gZm9yY2UgY29t cHJlc3Npb24gdG8gYmUgcGVyZm9ybWVkIGluIGJsb2NrIHNpemVzIGFuZCBhbGlnbm1lbnRzIHRo YXQgbWF5IG5vdCBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyB1c2FnZS4NCg0KIEkgdGhpbmsgdGhh dCBleHRlbnQgbWFwcGluZyBzaG91bGQgYmUgZW5oYW5jZWQgdG8gaW5jbHVkZSB0aGUgZnVsbCB0 dXBsZTogPExvZ2ljYWwgb2Zmc2V0LCBMb2dpY2FsIFNpemUsIFBoeXNpY2FsIG9mZnNldCwgUGh5 c2ljYWwgc2l6ZSwgY29tcHJlc3Npb24gYWxnbz4NCg0KV2l0aCB0aGUgZnVsbCB0dXBsZSwgeW91 IGNhbiBjb21wcmVzcyBkYXRhIGluIHRoZSBuYXR1cmFsIHVuaXRzIG9mIHRoZSBhcHBsaWNhdGlv biAod2hpY2ggaXMgbW9zdCBsaWtlbHkgdGhlIHNpemUgb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0 aGF0IHlvdSByZWNlaXZlZCkgYW5kIG9uIGl0cyBuYXR1cmFsIGFsaWdubWVudCAod2hpY2ggd2ls bCBlbGltaW5hdGUgYSBsb3Qgb2YgZXhwZW5zaXZlLWFuZC1oYXJkLXRvLWhhbmRsZSBwYXJ0aWFs IG92ZXJ3cml0ZXMpIHJhdGhlciB0aGFuIHRoZSBwcm9wb3NhbCBvZiBhIGZpeGVkIHNpemUgY29t cHJlc3Npb24gYmxvY2sgb24gZml4ZWQgYm91bmRhcmllcy4NCg0KVXNpbmcgdGhlIGFwcGxpY2F0 aW9uJ3MgbmF0dXJhbCBibG9jayBzaXplIGZvciBwZXJmb3JtaW5nIGNvbXByZXNzaW9uIG1heSBh bGxvdyB5b3UgYSBncmVhdGVyIGNob2ljZSBvZiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBGb3Ig ZXhhbXBsZSwgaWYgeW91J3JlIGRvaW5nIDFNQiBvYmplY3Qgd3JpdGVzLCB0aGVuIHlvdSBtaWdo dCB3YW50IHRvIGJlIHVzaW5nIGJ6aXAtaXNoIGFsZ29yaXRobXMgdGhhdCBoYXZlIGxhcmdlIGNv bXByZXNzaW9uIHdpbmRvd3MgcmF0aGVyIHRoYW4gdGhlIDMyLUsgbGltaXRlZCB6bGliIGFsZ29y aXRobSBvciB0aGUgNjQtayBsaW1pdGVkIHNuYXBweS4gWW91IHdvdWxkbid0IHdhbnQgdG8gZG8g dGhhdCBpZiBhbGwgY29tcHJlc3Npb24gd2FzIGxpbWl0ZWQgdG8gYSBmaXhlZCA2NEsgd2luZG93 Lg0KDQpXaXRoIHRoaXMgZXh0cmEgaW5mb3JtYXRpb24gYSBudW1iZXIgb2YgaW50ZXJlc3Rpbmcg YWxnb3JpdGhtIGNob2ljZXMgYmVjb21lIGF2YWlsYWJsZS4gRm9yIGV4YW1wbGUsIGluIHRoZSBw YXJ0aWFsLW92ZXJ3cml0ZSBjYXNlIHlvdSBjYW4ganVzdCBkZWxheSByZWNvdmVyaW5nIHRoZSBw YXJ0aWFsbHkgb3ZlcndyaXR0ZW4gZGF0YSBieSBoYXZpbmcgYW4gZXh0ZW50IHRoYXQgb3Zlcmxh cHMgYSBwcmV2aW91cyBleHRlbnQuDQoNCk9uZSBvYmplY3Rpb24gdG8gdGhlIGluY3JlYXNlZCBl eHRlbnQgdHVwbGUgaXMgdGhhdCBhbW91bnQgb2Ygc3BhY2UvbWVtb3J5IGl0IHdvdWxkIGNvbnN1 bWUuIFRoaXMgbmVlZCBub3QgYmUgdGhlIGNhc2UsIHRoZSBleGlzdGluZyBCbHVlU3RvcmUgYXJj aGl0ZWN0dXJlIHN0b3JlcyB0aGUgZXh0ZW50IG1hcCBpbiBhIHNlcmlhbGl6ZWQgZm9ybWF0IGRp ZmZlcmVudCBmcm9tIHRoZSBpbi1tZW1vcnkgZm9ybWF0LiBJdCB3b3VsZCBiZSByZWxhdGl2ZWx5 IHNpbXBsZSB0byBjcmVhdGUgbXVsdGlwbGUgc2VyaWFsaXphdGlvbiBmb3JtYXRzIHRoYXQgb3B0 aW1pemUgZm9yIHRoZSB0eXBpY2FsIGNhc2VzIG9mIHdoZW4gdGhlIGxvZ2ljYWwgc3BhY2UgaXMg Y29udGlndW91cyAoaS5lLiwgbG9naWNhbCBvZmZzZXQgaXMgcHJldmlvdXMgbG9naWNhbCBvZmZz ZXQgKyBsb2dpY2FsIHNpemUpIGFuZCB3aGVuIHRoZXJlJ3Mgbm8gY29tcHJlc3Npb24gKGxvZ2lj YWwgc2l6ZSA9PSBwaHlzaWNhbCBzaXplKS4gT25seSB0aGUgZGVzZXJpYWxpemVkIGluLW1lbW9y eSBmb3JtYXQgb2YgdGhlIGV4dGVudCB0YWJsZSBoYXMgdGhlIGZ1bGx5IHBvcHVsYXRlZCB0dXBs ZXMuIEluIGZhY3QgdGhpcyBpcyBhIGRlc2lyYWJsZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBjdXJy ZW50IGJsdWVzdG9yZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBjb21wcmVzc2lvbiBwcm9w b3NhbCBpcyBhZG9wdGVkIG9yIG5vdC4NCg0KDQpBbGxlbiBTYW11ZWxzDQpTb2Z0d2FyZSBBcmNo aXRlY3QsIEZlbGxvdywgU3lzdGVtcyBhbmQgU29mdHdhcmUgU29sdXRpb25zDQoNCjI4ODAgSnVu Y3Rpb24gQXZlbnVlLCBTYW4gSm9zZSwgQ0EgOTUxMzQNClQ6ICsxIDQwOCA4MDEgNzAzMHwgTTog KzEgNDA4IDc4MCA2NDE2DQphbGxlbi5zYW11ZWxzQFNhbkRpc2suY29tDQoNCg0KLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IGNlcGgtZGV2ZWwtb3duZXJAdmdlci5rZXJuZWwub3Jn IFttYWlsdG86Y2VwaC1kZXZlbC1vd25lckB2Z2VyLmtlcm5lbC5vcmddIE9uIEJlaGFsZiBPZiBJ Z29yIEZlZG90b3YNClNlbnQ6IFR1ZXNkYXksIEZlYnJ1YXJ5IDE2LCAyMDE2IDQ6MTEgUE0NClRv OiBIYW9tYWkgV2FuZyA8aGFvbWFpd2FuZ0BnbWFpbC5jb20+DQpDYzogY2VwaC1kZXZlbCA8Y2Vw aC1kZXZlbEB2Z2VyLmtlcm5lbC5vcmc+DQpTdWJqZWN0OiBSZTogQWRkaW5nIGNvbXByZXNzaW9u IHN1cHBvcnQgZm9yIGJsdWVzdG9yZS4NCg0KSGkgSGFvbWFpLA0KVGhhbmtzIGZvciB5b3VyIGNv bW1lbnRzLg0KUGxlYXNlIGZpbmQgbXkgcmVzcG9uc2UgaW5saW5lLg0KDQpPbiAyLzE2LzIwMTYg NTowNiBBTSwgSGFvbWFpIFdhbmcgd3JvdGU6DQo+IE9uIFR1ZSwgRmViIDE2LCAyMDE2IGF0IDEy OjI5IEFNLCBJZ29yIEZlZG90b3YgPGlmZWRvdG92QG1pcmFudGlzLmNvbT4gd3JvdGU6DQo+PiBI aSBndXlzLA0KPj4gSGVyZSBpcyBteSBwcmVsaW1pbmFyeSBvdmVydmlldyBob3cgb25lIGNhbiBh ZGQgY29tcHJlc3Npb24gc3VwcG9ydA0KPj4gYWxsb3dpbmcgcmFuZG9tIHJlYWRzL3dyaXRlcyBm b3IgYmx1ZXN0b3JlLg0KPj4NCj4+IFByZWZhY2U6DQo+PiBCbHVlc3RvcmUga2VlcHMgb2JqZWN0 IGNvbnRlbnQgdXNpbmcgYSBzZXQgb2YgZGlzcGVyc2VkIGV4dGVudHMNCj4+IGFsaWduZWQgYnkg NjRLIChjb25maWd1cmFibGUgcGFyYW0pLiBJdCBhbHNvIHBlcm1pdHMgZ2FwcyBpbiBvYmplY3QN Cj4+IGNvbnRlbnQgaS5lLiBpdCBwcmV2ZW50cyBzdG9yYWdlIHNwYWNlIGFsbG9jYXRpb24gZm9y IG9iamVjdCBkYXRhDQo+PiByZWdpb25zIHVuYWZmZWN0ZWQgYnkgdXNlciB3cml0ZXMuDQo+PiBB IHNvcnQgb2YgZm9sbG93aW5nIG1hcHBpbmcgaXMgdXNlZCBmb3IgdHJhY2tpbmcgc3RvcmVkIG9i amVjdA0KPj4gY29udGVudCBkaXNwb3NpdGlvbiAoYWN0dWFsIGN1cnJlbnQgaW1wbGVtZW50YXRp b24gbWF5IGRpZmZlciBidXQNCj4+IHJlcHJlc2VudGF0aW9uIGJlbG93IHNlZW1zIHRvIGJlIHN1 ZmZpY2llbnQgZm9yIG91ciBwdXJwb3Nlcyk6DQo+PiBFeHRlbnQgTWFwDQo+PiB7DQo+PiA8IGxv Z2ljYWwgb2Zmc2V0IDAgLT4gZXh0ZW50IDAgJ3BoeXNpY2FsJyBvZmZzZXQsIGV4dGVudCAwIHNp emUgPiAuLi4NCj4+IDwgbG9naWNhbCBvZmZzZXQgTiAtPiBleHRlbnQgTiAncGh5c2ljYWwnIG9m ZnNldCwgZXh0ZW50IE4gc2l6ZSA+IH0NCj4+DQo+Pg0KPj4gQ29tcHJlc3Npb24gc3VwcG9ydCBh cHByb2FjaDoNCj4+IFRoZSBhaW0gaXMgdG8gcHJvdmlkZSBnZW5lcmljIGNvbXByZXNzaW9uIHN1 cHBvcnQgYWxsb3dpbmcgcmFuZG9tDQo+PiBvYmplY3QgcmVhZC93cml0ZS4NCj4+IFRvIGRvIHRo YXQgY29tcHJlc3Npb24gZW5naW5lIHRvIGJlIHBsYWNlZCAobG9naWNhbGx5IC0gYWN0dWFsDQo+ PiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgZGlzY3Vzc2VkIGxhdGVyKSBvbiB0b3Agb2YgYmx1ZXN0 b3JlIHRvICJpbnRlcmNlcHQiDQo+PiByZWFkLXdyaXRlIHJlcXVlc3RzIGFuZCBtb2RpZnkgdGhl bSBhcyBuZWVkZWQuDQo+PiBUaGUgbWFqb3IgaWRlYSBpcyB0byBzcGxpdCBvYmplY3QgY29udGVu dCBpbnRvIGZpeGVkIHNpemUgbG9naWNhbA0KPj4gYmxvY2tzICggTUFYX0JMT0NLX1NJWkUsICBl LmcuIDFNYikuIEJsb2NrcyBhcmUgY29tcHJlc3NlZA0KPj4gaW5kZXBlbmRlbnRseS4gRHVlIHRv IGNvbXByZXNzaW9uIGVhY2ggYmxvY2sgY2FuIHBvdGVudGlhbGx5IG9jY3VweQ0KPj4gc21hbGxl ciBzdG9yZSBzcGFjZSBjb21wYXJpbmcgdG8gdGhlaXIgb3JpZ2luYWwgc2l6ZS4gRWFjaCBibG9j ayBpcw0KPj4gYWRkcmVzc2VkIHVzaW5nIG9yaWdpbmFsIGRhdGEgb2Zmc2V0ICggQUtBICdsb2dp Y2FsIG9mZnNldCcgYWJvdmUgKS4NCj4+IEFmdGVyIGNvbXByZXNzaW9uIGlzIGFwcGxpZWQgZWFj aCBibG9jayBpcyB3cml0dGVuIHVzaW5nIHRoZSBleGlzdGluZw0KPj4gYmx1ZXN0b3JlIGluZnJh LiBJbiBmYWN0IHNpbmdsZSBvcmlnaW5hbCB3cml0ZSByZXF1ZXN0IG1heSBhZmZlY3QNCj4+IG11 bHRpcGxlIGJsb2NrcyB0aHVzIGl0IHRyYW5zZm9ybXMgaW50byBtdWx0aXBsZSBzdWItd3JpdGUg cmVxdWVzdHMuDQo+PiBCbG9jayBsb2dpY2FsIG9mZnNldCwgY29tcHJlc3NlZCBibG9jayBkYXRh IGFuZCBjb21wcmVzc2VkIGRhdGEgbGVuZ3RoIGFyZSB0aGUgcGFyYW1ldGVycyBmb3IgaW5qZWN0 ZWQgc3ViLXdyaXRlIHJlcXVlc3RzLg0KPj4gQXMgYSByZXN1bHQgc3RvcmVkIG9iamVjdCBjb250 ZW50Og0KPj4gYSkgSGFzIGdhcHMNCj4+IGIpIFVzZXMgbGVzcyBzcGFjZSBpZiBjb21wcmVzc2lv biB3YXMgYmVuZWZpY2lhbCBlbm91Z2guDQo+Pg0KPj4gT3ZlcndyaXRlIHJlcXVlc3QgaGFuZGxp bmcgaXMgcHJldHR5IHNpbXBsZS4gV3JpdGUgcmVxdWVzdCBkYXRhIGlzDQo+PiBzcGxpdHRlZCBp bnRvIGZ1bGx5IGFuZCBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYmxvY2tzLiBGdWxseQ0KPj4gb3Zl cmxhcHBpbmcgYmxvY2tzIGFyZSBjb21wcmVzc2VkIGFuZCB3cml0dGVuIHRvIHRoZSBzdG9yZSAo Z2l2ZW4gdGhlDQo+PiBleHRlbmRlZCB3cml0ZSBmdW5jdGlvbmFsaXR5IGRlc2NyaWJlZCBiZWxv dykuIEZvciBwYXJ0aWFsbHkNCj4+IG92ZXJ3bGFwcGluZyBibG9ja3MgKCBubyBtb3JlIHRoYW4g MiBvZiB0aGVtDQo+PiAtIGhlYWQgYW5kIHRhaWwgaW4gZ2VuZXJhbCBjYXNlKSAgd2UgbmVlZCB0 byByZXRyaWV2ZSBhbHJlYWR5IHN0b3JlZA0KPj4gYmxvY2tzLCBkZWNvbXByZXNzIHRoZW0sIG1l cmdlIHRoZSBleGlzdGluZyBhbmQgcmVjZWl2ZWQgZGF0YSBpbnRvIGENCj4+IGJsb2NrLCBjb21w cmVzcyBpdCBhbmQgc2F2ZSB0byB0aGUgc3RvcmUgdXNpbmcgbmV3IHNpemUuDQo+PiBUaGUgdHJp Y2t5IHRoaW5nIGZvciBhbnkgd3JpdHRlbiBibG9jayBpcyB0aGF0IGl0IGNhbiBiZSBib3RoIGxv bmdlcg0KPj4gYW5kIHNob3J0ZXIgdGhhbiBwcmV2aW91c2x5IHN0b3JlZCBvbmUuICBIb3dldmVy IGl0IGFsd2F5cyBoYXMgdXBwZXINCj4+IGxpbWl0DQo+PiAoTUFYX0JMT0NLX1NJWkUpIHNpbmNl IHdlIGNhbiBvbWl0IGNvbXByZXNzaW9uIGFuZCB1c2Ugb3JpZ2luYWwgYmxvY2sNCj4+IGlmIGNv bXByZXNzaW9uIHJhdGlvIGlzIHBvb3IuIFRodXMgY29ycmVzcG9uZGluZyBibHVlc3RvcmUgZXh0 ZW50IGZvcg0KPj4gdGhpcyBibG9jayBpcyBsaW1pdGVkIHRvbyBhbmQgZXhpc3RpbmcgYmx1ZXN0 b3JlIG1hcHBpbmcgZG9lc24ndA0KPj4gc3VmZmVyOiBvZmZzZXRzIGFyZSBwZXJtYW5lbnQgYW5k IGFyZSBlcXVhbCB0byBvcmlnaW5hbGx5IG9uZXMgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4NCj4+ IFRoZSBvbmx5IGV4dGVuc2lvbiByZXF1aXJlZCBmb3IgYmx1ZXN0b3JlIGludGVyZmFjZSBpcyB0 byBwcm92aWRlIGFuDQo+PiBhYmlsaXR5IHRvIHJlbW92ZSBleGlzdGluZyBleHRlbnRzKCBzcGVj aWZpZWQgYnkgbG9naWNhbCBvZmZzZXQsDQo+PiBzaXplKS4gSW4gb3RoZXIgd29yZHMgd2UgbmVl ZCB3cml0ZSByZXF1ZXN0IHNlbWFudGljcyBleHRlbnNpb24gKA0KPj4gcmF0aGVyIGJ5IGludHJv ZHVjaW5nIGFuIGFkZGl0aW9uYWwgZXh0ZW5kZWQgd3JpdGUgbWV0aG9kKS4gQ3VycmVudGx5DQo+ PiBvdmVyd3JpdGluZyByZXF1ZXN0IGNhbiBlaXRoZXIgaW5jcmVhc2UgYWxsb2NhdGVkIHNwYWNl IG9yIGxlYXZlIGl0DQo+PiB1bmFmZmVjdGVkIG9ubHkuIEFuZCBpdCBjYW4gaGF2ZSBhcmJpdHJh cnkgb2Zmc2V0LHNpemUgcGFyYW1ldGVycw0KPj4gcGFpci4gRXh0ZW5kZWQgb25lIHNob3VsZCBi ZSBhYmxlIHRvIHNxdWVlemUgc3RvcmUgc3BhY2UgKCBlLmcuIGJ5DQo+PiByZW1vdmluZyBleGlz dGluZyBleHRlbnRzIGZvciBhIGJsb2NrIGFuZCBhbGxvY2F0aW5nIHJlZHVjZWQgc2V0IG9mDQo+ PiBuZXcgb25lcykgYXMgd2VsbC4gQW5kIGV4dGVuZGVkIHdyaXRlIHNob3VsZCBiZSBhcHBsaWVk IHRvIGEgc3BlY2lmaWMNCj4+IGJsb2NrIG9ubHksIGkuZS4gbG9naWNhbCBvZmZzZXQgdG8gYmUg YWxpZ25lZCB3aXRoIGJsb2NrIHN0YXJ0IG9mZnNldA0KPj4gYW5kIHNpemUgbGltaXRlZCB0byBN QVhfQkxPQ0tfU0laRS4gSXQgc2VlbXMgdGhpcyBpcyBwcmV0dHkgc2ltcGxlIHRvDQo+PiBhZGQg LSBtb3N0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IGZvciBleHRlbnQgYXBwZW5kL3JlbW92YWwgaWYg YWxyZWFkeSBwcmVzZW50Lg0KPj4NCj4+IFRvIHByb3ZpZGUgcmVhZGluZyBhbmQgKG92ZXIpd3Jp dGluZyBjb21wcmVzc2lvbiBlbmdpbmUgbmVlZHMgdG8NCj4+IHRyYWNrIGFkZGl0aW9uYWwgYmxv Y2sgbWFwcGluZzoNCj4+IEJsb2NrIE1hcA0KPj4gew0KPj4gPCBsb2dpY2FsIG9mZnNldCAwIC0+ IGNvbXByZXNzaW9uIG1ldGhvZCwgY29tcHJlc3NlZCBibG9jayAwIHNpemUgPg0KPj4gLi4uDQo+ PiA8IGxvZ2ljYWwgb2Zmc2V0IE4gLT4gY29tcHJlc3Npb24gbWV0aG9kLCBjb21wcmVzc2VkIGJs b2NrIE4gc2l6ZSA+IH0NCj4+IFBsZWFzZSBub3RlIHRoYXQgZGVzcGl0ZSB0aGUgc2ltaWxhcml0 eSB3aXRoIHRoZSBvcmlnaW5hbCBibHVlc3RvcmUNCj4+IGV4dGVudCBtYXAgdGhlIGRpZmZlcmVu Y2UgaXMgaW4gcmVjb3JkIGdyYW51bGFyaXR5OiAxTWIgdnMgNjRLYi4gVGh1cw0KPj4gZWFjaCBi bG9jayBtYXBwaW5nIHJlY29yZCBtaWdodCBoYXZlIG11bHRpcGxlIGNvcnJlc3BvbmRpbmcgZXh0 ZW50IG1hcHBpbmcgcmVjb3Jkcy4NCj4+DQo+PiBCZWxvdyBpcyBhIHNhbXBsZSBvZiBtYXBwaW5n cyB0cmFuc2Zvcm0gZm9yIGEgcGFpciBvZiBvdmVyd3JpdGVzLg0KPj4gMSkgT3JpZ2luYWwgbWFw cGluZyAoIDMgTWIgd2VyZSB3cml0dGVuIGJlZm9yZSwgY29tcHJlc3MgcmF0aW8gMiBmb3INCj4+ IGVhY2gNCj4+IGJsb2NrKQ0KPj4gQmxvY2sgTWFwDQo+PiB7DQo+PiAgIDAgLT4gemxpYiwgNTEy S2INCj4+ICAgMU1iIC0+IHpsaWIsIDUxMktiDQo+PiAgIDJNYiAtPiB6bGliLCA1MTJLYg0KPj4g fQ0KPj4gRXh0ZW50IE1hcA0KPj4gew0KPj4gICAwIC0+IDAsIDUxMktiDQo+PiAgIDFNYiAtPiA1 MTJLYiwgNTEyS2INCj4+ICAgMk1iIC0+IDFNYiwgNTEyS2INCj4+IH0NCj4+IDEuNU1iIGFsbG9j YXRlZCBbIDAsIDEuNSBNYl0gcmFuZ2UgKQ0KPj4NCj4+IDEpIFJlc3VsdCBtYXBwaW5nICggYWZ0 ZXIgb3ZlcndyaXRpbmcgMU1iIGRhdGEgYXQgNTEyIEtiIG9mZnNldCwNCj4+IGNvbXByZXNzIHJh dGlvIDEgZm9yIGJvdGggYWZmZWN0ZWQgYmxvY2tzKSBCbG9jayBNYXAgew0KPj4gICAwIC0+IG5v bmUsIDFNYg0KPj4gICAxTWIgLT4gbm9uZSwgMU1iDQo+PiAgIDJNYiAtPiB6bGliLCA1MTJLYg0K Pj4gfQ0KPj4gRXh0ZW50IE1hcA0KPj4gew0KPj4gICAwIC0+IDEuNU1iLCAxTWINCj4+ICAgMU1i IC0+IDIuNU1iLCAxTWINCj4+ICAgMk1iIC0+IDFNYiwgNTEyS2INCj4+IH0NCj4+IDIuNU1iIGFs bG9jYXRlZCAoIFsxTWIsIDMuNSBNYl0gcmFuZ2UgKQ0KPj4NCj4+IDIpIFJlc3VsdCBtYXBwaW5n ICggYWZ0ZXIgKG92ZXIpd3JpdGluZyAzTWIgZGF0YSBhdCAxTWIgb2Zmc2V0LA0KPj4gY29tcHJl c3MgcmF0aW8gNCBmb3IgYWxsIGFmZmVjdGVkIGJsb2NrcykgQmxvY2sgTWFwIHsNCj4+ICAgMCAt PiBub25lLCAxTWINCj4+ICAgMU1iIC0+IHpsaWIsIDI1NktiDQo+PiAgIDJNYiAtPiB6bGliLCAy NTZLYg0KPj4gICAzTWIgLT4gemxpYiwgMjU2S2INCj4+IH0NCj4+IEV4dGVudCBNYXANCj4+IHsN Cj4+ICAgMCAtPiAxLjVNYiwgMU1iDQo+PiAgIDFNYiAtPiAwTWIsIDI1NktiDQo+PiAgIDJNYiAt PiAwLjI1TWIsIDI1NktiDQo+PiAgIDNNYiAtPiAwLjVNYiwgMjU2S2INCj4+IH0NCj4+IDEuNzVN YiBhbGxvY2F0ZWQgKCAgWzBNYi0wLjc1TWJdIFsxLjUgTWIsIDIuNSBNYiApDQo+Pg0KPiBUaGFu a3MgZm9yIElnb3JlIQ0KPg0KPiBNYXliZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGlzIGl0IGNv bXByZXNzZWQgaW5saW5lIG5vdCBvZmZsaW5lPw0KVGhhdCdzIGFib3V0IGlubGluZSBjb21wcmVz c2lvbi4NCj4gSWYgc28sIEkgZ3Vlc3Mgd2UgbmVlZCB0byBwcm92aWRlIHdpdGggbW9yZSBmbGV4 aWJsZSBjb250cm9scyB0bw0KPiB1cHBlciwgbGlrZSBleHBsaWNhdGUgY29tcHJlc3Npb24gZmxh ZyBvciBjb21wcmVzc2lvbiB1bml0Lg0KWWVzIEkgYWdyZWUuIFdlIG5lZWQgYSBzb3J0IG9mIGNv bnRyb2wgZm9yIGNvbXByZXNzaW9uIC0gb24gcGVyIG9iamVjdCBvciBwZXIgcG9vbCBiYXNpcy4u Lg0KQnV0IGF0IHRoZSBvdmVydmlldyBhYm92ZSBJIHdhcyBtb3JlIGNvbmNlcm5lZCBhYm91dCBh bGdvcml0aG1pYyBhc3BlY3QgaS5lLiBob3cgdG8gaW1wbGVtZW50IHJhbmRvbSByZWFkL3dyaXRl IGhhbmRsaW5nIGZvciBjb21wcmVzc2VkIG9iamVjdHMuDQpDb21wcmVzc2lvbiBtYW5hZ2VtZW50 IGZyb20gdGhlIHVzZXIgc2lkZSBjYW4gYmUgY29uc2lkZXJlZCBhIGJpdCBsYXRlci4NCg0KPj4g QW55IGNvbW1lbnRzL3N1Z2dlc3Rpb25zIGFyZSBoaWdobHkgYXBwcmVjaWF0ZWQuDQo+Pg0KPj4g S2luZCByZWdhcmRzLA0KPj4gSWdvci4NCj4+DQo+Pg0KPj4NCj4+DQo+Pg0KPj4gLS0NCj4+IFRv IHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBj ZXBoLWRldmVsIg0KPj4gaW4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2Vy Lmtlcm5lbC5vcmcgTW9yZSBtYWpvcmRvbW8NCj4+IGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5l bC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0KPg0KVGhhbmtzLA0KSWdvcg0KLS0NClRvIHVuc3Vi c2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBjZXBoLWRl dmVsIiBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9y ZyBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9t by1pbmZvLmh0bWwNClBMRUFTRSBOT1RFOiBUaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRo aXMgZWxlY3Ryb25pYyBtYWlsIG1lc3NhZ2UgaXMgaW50ZW5kZWQgb25seSBmb3IgdGhlIHVzZSBv ZiB0aGUgZGVzaWduYXRlZCByZWNpcGllbnQocykgbmFtZWQgYWJvdmUuIElmIHRoZSByZWFkZXIg b2YgdGhpcyBtZXNzYWdlIGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgYXJlIGhl cmVieSBub3RpZmllZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgbWVzc2FnZSBpbiBlcnJv ciBhbmQgdGhhdCBhbnkgcmV2aWV3LCBkaXNzZW1pbmF0aW9uLCBkaXN0cmlidXRpb24sIG9yIGNv cHlpbmcgb2YgdGhpcyBtZXNzYWdlIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIElmIHlvdSBoYXZl IHJlY2VpdmVkIHRoaXMgY29tbXVuaWNhdGlvbiBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUg c2VuZGVyIGJ5IHRlbGVwaG9uZSBvciBlLW1haWwgKGFzIHNob3duIGFib3ZlKSBpbW1lZGlhdGVs eSBhbmQgZGVzdHJveSBhbnkgYW5kIGFsbCBjb3BpZXMgb2YgdGhpcyBtZXNzYWdlIGluIHlvdXIg cG9zc2Vzc2lvbiAod2hldGhlciBoYXJkIGNvcGllcyBvciBlbGVjdHJvbmljYWxseSBzdG9yZWQg Y29waWVzKS4NCg==