CN: [Helix-client-dev] Add a library for thumbnail generation based on dtdriver
Zhao, Halley halley.zhao at intel.comVGhhbmtzIEdyZWcuDQpJIHJlcGxhY2VkIERFRklORV9HVUlEIHRvIERFRklORV9HVUlEX0VOVU0s IGFuZCBjaGVja2VkIGluIHRvIEhFQUQgYW5kIEF0bGFzMzEwLg0KDQpOb3cgeW91IGNhbiBidWls ZCB0aGUgbGlicmFyeSAobGliaHh0aHVtYi5zbykgd2l0aCBmb2xsb3dpbmcgY29uZmlndXJhdGlv bjoNClswXSBTZXQgQklGIGJyYW5jaCAoaHhjbGllbnRfM18xXzBfYXRsYXMpDQpbMV0gU2V0IFRh cmdldChzKSAoZHRkcl90aHVtYi1nZW5lcmF0b3IpDQpbMl0gU2V0IFByb2ZpbGUgKC9ob21lL2hh bGxleS9oZWxpeF9jdnMvYnVpbGQvdW1ha2VwZi9oZWxpeC1jbGllbnQtbW9ibGluKQ0KWzNdIHJ1 bjogYnVpbGQNCkl0IHdpbGwgc2VhcmNoIEhlbGl4IGVuZ2luZSBpbiBmb2xsb3dpbmcgb3JkZXI6 ICRIRUxJWF9USFVNQl9MSUJTID4gJEhFTElYX0xJQlMvdGh1bWJuYWlsID4gIi9vcHQvaGVsaXgv bWVkaWFwbGF0Zm9ybS90aHVtYm5haWwiDQoNCkEgc2FtcGxlIHRlc3QgaW4gdGhhdCBmb2xkZXIg c2F5cyBob3cgdG8gdXNlIHRoaXMgbGlicmFyeS4NCg0KDQpCUg0KDQotLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KRnJvbTogR3JlZ29yeSBXcmlnaHQgW21haWx0bzpnd3JpZ2h0QHJlYWwuY29t XSANClNlbnQ6IEZyaWRheSwgQXVndXN0IDI4LCAyMDA5IDk6NTUgUE0NClRvOiBaaGFvLCBIYWxs ZXkNCkNjOiAnaGVsaXgtY2xpZW50LWRldkBoZWxpeGNvbW11bml0eS5vcmcnDQpTdWJqZWN0OiBS ZTogW0hlbGl4LWNsaWVudC1kZXZdIEFkZCBhIGxpYnJhcnkgZm9yIHRodW1ibmFpbCBnZW5lcmF0 aW9uIGJhc2VkIG9uIGR0ZHJpdmVyDQoNCk9uIEF1ZyAyNywgMjAwOSwgYXQgNzoxMyBQTSwgWmhh bywgSGFsbGV5IHdyb3RlOg0KDQo+IFRoYW5rcyBHcmVnLg0KPg0KPiBJIGZvdW5kIHRoYXQgSSdk IGJldHRlciB1c2UgaHhpaWRzLmggZGlyZWN0bHksIHNpbmNlICJoeGR0ZHIuaCIsICANCj4gImh4 c3JjaW4uaCIgd2lsbCByZWN1cnNpdmVseSByZXF1aXJlcyBtb3JlIGhlYWRlciBmaWxlcy4NCj4g U28gSSB0cnkgdG8gYWRkIElJRF9JSFhEYXRhVHlwZURyaXZlcjIgZXRjIGluIGh4aWlkcy5oLCBh bmQgIA0KPiBJSURfSUhYU291cmNlSW5wdXQgZXRjIGFyZSBhbHJlYWR5IHRoZXJlLg0KPg0KPg0K PiBJbmRleDogaHhpaWRzLmgNCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiBSQ1MgZmlsZTogL2N2c3Jvb3QvY29t bW9uL2luY2x1ZGUvaHhpaWRzLmgsdg0KPiByZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMyLjIuMTMN Cj4gZGlmZiAtdSAtdyAtcjEuMTMyLjIuMTMgaHhpaWRzLmgNCj4gLS0tIGh4aWlkcy5oCTIzIEp1 bCAyMDA5IDIwOjM2OjQ1IC0wMDAwCTEuMTMyLjIuMTMNCj4gKysrIGh4aWlkcy5oCTI4IEF1ZyAy MDA5IDAwOjU5OjM2IC0wMDAwDQo+IEBAIC0yMTc1LDUgKzIxNzUsMTEgQEANCj4gREVGSU5FX0dV SURfRU5VTShJSURfSUhYRFJNSFRUUFNlY3VyZUNsb2NrLCAweGE0YjZiMzZlLCAweDNlMjcsICAN Cj4gMHg0ZDI1LCAweGI3LCAweDlhLCAweDJkLCAweGJiLCAweGMyLCAweDM5LCAweDY0LCAweDJj KTsNCj4gI2VuZGlmDQo+DQo+ICsjaWYgKCAhZGVmaW5lZChfSFhEVERSX0hfKSB8fCAhZGVmaW5l ZChIRUxJWF9GRUFUVVJFX0ZVTExHVUlEKSApDQo+ICtERUZJTkVfR1VJRChJSURfSUhYRGF0YVR5 cGVEcml2ZXJSZXNwb25zZSwgMHg5ZDY1ZTU4ZCwgMHg5YjRiLCAgDQo+IDB4NDBmMiwgMHg4Ziwg MHhmMCwgMHg1YywgMHhmZiwgMHg2NywgMHgzZiwgMHhiLCAweGQzKTsNCj4gK0RFRklORV9HVUlE KElJRF9JSFhEYXRhVHlwZURyaXZlcjIsIDB4OWQ2NWU1OGUsIDB4OWI0YiwgMHg0MGYyLCAgDQo+ IDB4OGYsIDB4ZjAsIDB4NWMsIDB4ZmYsIDB4NjcsIDB4M2YsIDB4YiwgMHhkMyk7DQo+ICtERUZJ TkVfR1VJRChJSURfSUhYU2V0Q2xpZW50Q29udGV4dCwgMHg5ZDY1ZTU4ZiwgMHg5YjRiLCAweDQw ZjIsICANCj4gMHg4ZiwgMHhmMCwgMHg1YywgMHhmZiwgMHg2NywgMHgzZiwgMHhiLCAweGQzKTsN Cj4gKyNlbmRpZg0KPiArDQo+ICNlbmRpZiAvKiBfSFhJSURTX0hfICovDQo+DQoNCmh4aWlkcy5o IHNob3VsZCBoYXZlICJERUZJTkVfR1VJRF9FTlVNInMgaW4gaXQsIG5vdCBERUZJTkVfR1VJRHMN Cg0KLS1ncmVnLg0KDQoNCg0KDQoNCj4NCj4NCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gRnJvbTogR3JlZ29yeSBXcmlnaHQgW21haWx0bzpnd3JpZ2h0QHJlYWwuY29tXQ0KPiBTZW50 OiAyMDA5xOo41MIyN8jVIDIyOjQ4DQo+IFRvOiBaaGFvLCBIYWxsZXkNCj4gQ2M6ICdoZWxpeC1j bGllbnQtZGV2QGhlbGl4Y29tbXVuaXR5Lm9yZycNCj4gU3ViamVjdDogUmU6IFtIZWxpeC1jbGll bnQtZGV2XSBBZGQgYSBsaWJyYXJ5IGZvciB0aHVtYm5haWwgIA0KPiBnZW5lcmF0aW9uIGJhc2Vk IG9uIGR0ZHJpdmVyDQo+DQo+ID8gY29tbW9uLWluY2x1ZGUtaHhzcmNpbl9oLmRpZmYudHh0DQo+ IEluZGV4OiBoeHNyY2luLmgNCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiBSQ1MgZmlsZTogL2N2c3Jvb3QvY29t bW9uL2luY2x1ZGUvaHhzcmNpbi5oLHYNCj4gcmV0cmlldmluZyByZXZpc2lvbiAxLjYNCj4gZGlm ZiAtdSAtdyAtcjEuNiBoeHNyY2luLmgNCj4gLS0tIGh4c3JjaW4uaAkxMiBOb3YgMjAwOCAxMzoz MjoyNyAtMDAwMAkxLjYNCj4gKysrIGh4c3JjaW4uaAkyNCBBdWcgMjAwOSAwNzo0MTowOCAtMDAw MA0KPiBAQCAtMjgxLDQgKzI4MSw5IEBADQo+ICBERUZJTkVfU01BUlRfUFRSKElIWFNvdXJjZUlu cHV0KQ0KPiAgREVGSU5FX1NNQVJUX1BUUihJSFhTb3VyY2VIYW5kbGVyKQ0KPg0KPiArI2lmICgg IWRlZmluZWQoX0hYU1JDSU5fSF8pIHx8ICFkZWZpbmVkKEhFTElYX0ZFQVRVUkVfRlVMTEdVSUQp ICkNCj4gK0RFRklORV9HVUlEX0VOVU0oSUlEX0lIWFNvdXJjZUlucHV0LCAgICAgICAgICAgICAg ICAweGViZjhkMjIwLA0KPiAweDQwZjcsIDB4MTFkNiwgMHhhYiwgMHgzZiwgMHgwLCAweDEsIDB4 MiwgMHg1MSwgMHhiMywgMHg0MCkNCj4gK0RFRklORV9HVUlEX0VOVU0oSUlEX0lIWFNvdXJjZUhh bmRsZXIsICAgICAgICAgICAgICAweGIyNjQ2ZGEwLA0KPiAweDQxMGEsIDB4MTFkNiwgMHhhYiwg MHgzZiwgMHgwLCAweDEsIDB4MiwgMHg1MSwgMHhiMywgMHg0MCkNCj4gKyNlbmRpZg0KPiArDQo+ ICAjZW5kaWYgIC8vIF9IWFNSQ0lOX0hfDQo+DQo+IHdoeSBkbyB5b3UgaGF2ZSB0aGF0IGNvZGU/ IElJRF9JSFhTb3VyY2VIYW5kbGVyIGFuZA0KPiBJSURfSUhYU291cmNlSGFuZGxlciBpcyBhbHJl YWR5IGRlZmluZWQNCj4gaW4gdGhhdCBmaWxlLiBJIGFsc28gZG9uJ3QgdW5kZXJzdGFuZCB0aGUg ZG91YmxlIF9IWFNSQ0lOX0hfIG1hY3JvLg0KPg0KPg0KPj4gcGxheWVyL2tpdC90aHVtYm5haWwN Cj4NCj4gVGhhdCBpcyBhIGdvb2QgbmFtZSB0byBjaGVjayBpdCBpbiB1bmRlci4NCj4NCj4NCj4N Cj4+IDIuIFJlbW92ZSBndGsgZGVwZW5kZW5jeSBmb3IgdGhpcyBtb2R1bGUsIGJ1dCB1c2UgZ2Rr LXBpeGJ1ZiBvbmx5KGl0DQo+PiBkZXBlbmRzIG9uIGdsaWItMi4wKS4gU2V0U0RLUGF0aCgiZ2Rr LXBpeGJ1ZiIsICIvdXNyL2luY2x1ZGUvDQo+PiBndGstMi4wIikgaXMgdXNlZCBpbiBidWlsZHJj Lg0KPg0KPiBJIHdvdWxkIGJlIGdvb2QgdG8gZ2V0IHJpZCBvZiBhbGwgcGxhdGZvcm0gZGVwZW5k YW5jaWVzIGFuZCB1c2UNCj4gc29tZSBjcm9zcyBwbGF0Zm9ybSBzb2x1dGlvbi4gSG93ZXZlciwg dGhhdCBjYW4gd2FpdC4NCj4NCj4gVGhlIHJlc3QgbG9va3MgZ29vZC4NCj4gLS1ncmVnLg0KPg0K Pg0KPg0KPg0KPg0KPiBPbiBBdWcgMjQsIDIwMDksIGF0IDI6MTUgQU0sIFpoYW8sIEhhbGxleSB3 cm90ZToNCj4NCj4+IEhpIEdyZWc6DQo+PiBIZXJlIGlzIG15IGZvbGxvdyB1cDoNCj4+IDEuIFJl bW92ZSBzb21lIHVudXNlZCBjb2RlLCBhbmQgcmVwbGFjZSBVTE9ORzMyIHRvIFVJTlQzMi4NCj4+ DQo+PiAyLiBSZW1vdmUgZ3RrIGRlcGVuZGVuY3kgZm9yIHRoaXMgbW9kdWxlLCBidXQgdXNlIGdk ay1waXhidWYgb25seShpdA0KPj4gZGVwZW5kcyBvbiBnbGliLTIuMCkuIFNldFNES1BhdGgoImdk ay1waXhidWYiLCAiL3Vzci9pbmNsdWRlLw0KPj4gZ3RrLTIuMCIpIGlzIHVzZWQgaW4gYnVpbGRy Yy4NCj4+DQo+PiAzLiBmb3IgY3Jvc3MtcGxhdGZvcm0gc3VwcG9ydCwgb25seSBDQ29sb3VyQ29u dmVydDo6UkdCUmF3MlBORyBpcw0KPj4gcmVsYXRlZC4NCj4+IEkgYWRkICNpZmRlZiBfTElOVVgg Zm9yIExpbnV4IHBsYXRmb3JtLg0KPj4NCj4+IDQuIElJRF9JSFhTb3VyY2VJbnB1dCBpcyBtb3Zl ZCB0byBjb21tb24vaW5jbHVkZS9oeHNyY2luLmgNCj4+DQo+PiA1LiBhcyB0byBwbGF5ZXIvY29t bW9uL2R0ZHJfc2VydmljZS90aHVtYm5haWxfc2VydmljZTsgSSBoYWRuJ3QNCj4+IG5vdGljZWQg dGhhdCBiZWZvcmUuDQo+PiBUaGVyZSBpcyBubyBiaWcgZGlmZmVyZW5jZSwgYnV0IEkgY3JlYXRl IGEgc2hhcmVkIGxpYnJhcnkgdG8gYmUgdXNlZA0KPj4gZGlyZWN0bHkgKHdpdGggYWRkaXRpb25h bCBkZXBlbmRlbmN5KTsgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YNCj4+IGR0ZHJfbWVkaWFp bmZvX2NhbGxiYWNrIG1ha2UgdGhlIGFwcCBkZWFsIHdpdGggbWV0YWRhdGEgZnJlZWx5LCAgYXMN Cj4+IHdlbGwgYXMgYWJvdmUgY2hhbmdlcyB0byByZW1vdmUgZ3RrIGRlcGVuZGVuY3kuDQo+PiBJ IGhhZCBwbGFuZWQgdG8gY2hlY2sgaW4gaXQgdG8gcGxheWVyL2tpdC90aHVtYm5haWwgc2luY2Ug SSB0aGluayBpdA0KPj4gaXMgYSBkZXZlbG9wbWVudCBraXQgbGlicmFyeSB1c2VkIGJ5IGFwcC4N Cj4+IEFueSBzdWdnZXN0aW9uDQo+Pg0KPj4NCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+PiBGcm9tOiBHcmVnb3J5IFdyaWdodCBbbWFpbHRvOmd3cmlnaHRAcmVhbC5jb21dDQo+PiBT ZW50OiBXZWRuZXNkYXksIEF1Z3VzdCAxOSwgMjAwOSAxMDoyNSBQTQ0KPj4gVG86IFpoYW8sIEhh bGxleQ0KPj4gQ2M6ICdoZWxpeC1jbGllbnQtZGV2QGhlbGl4Y29tbXVuaXR5Lm9yZycNCj4+IFN1 YmplY3Q6IFJlOiBbSGVsaXgtY2xpZW50LWRldl0gQWRkIGEgbGlicmFyeSBmb3IgdGh1bWJuYWls DQo+PiBnZW5lcmF0aW9uIGJhc2VkIG9uIGR0ZHJpdmVyDQo+Pg0KPj4gCVVMT05HMzIgd2lkdGg7 DQo+PiAJVUxPTkczMiBoZWlnaHQ7DQo+PiAJVUxPTkczMiBkYXRhTGVuOw0KPj4gCVVMT05HMzIg Yml0c1BlclBpeGVsOw0KPj4NCj4+IFVMT05HMzIgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBV SU5UMzIgaW5zdGVhZC4NCj4+DQo+PiAgICAvL0JPT0wgbV9iV3JpdGVCaW5hcnk7DQo+PiAgICAv L0JPT0wgbV9iU2hvd1Byb2dyZXNzOw0KPj4NCj4+IE5vIG5lZWQgdG8gbGVhdmUgaW4gY29tbWVu dGVkIGNvZGUgbGlrZSB0aGF0LCBqdXN0IHJlbW92ZSBpdC4NCj4+IEFsc28sIEJPT0wgaXMgZGVw cmVjYXRlZCwgcGxlYXNlIHVzZSBIWEJPT0wuDQo+Pg0KPj4NCj4+DQo+PiAtLS0tLS0tLS0tLS0t LS0gRnJvbSB0aGUgdW5peC5wY2YgZmlsZTogLS0tLS0tLS0tDQo+PiAjIG9uIGdjYyB3ZSB3YW50 IHRvIHR1cm4gb24gYWxsIHdhcm5pbmdzDQo+PiBleHRyYV9jZmxhZ3MgPSAiIg0KPj4gdXNpbmdf Z2NjID0gMA0KPj4gaWYgc3RyaW5nLmZpbmQocGxhdGZvcm0uY2MuY21kLCAnZ2NjJykgIT0gLTE6 DQo+PiAgICB1c2luZ19nY2MgPSAxDQo+PiAgICBleHRyYV9jZmxhZ3MgPSAiLVdhbGwiDQo+Pg0K Pj4gIyBncmFiIGZsYWdzIGZyb20gcGtnY29uZmlnDQo+PiBpbXBvcnQgc2hlbGwNCj4+IGltcG9y dCBzdHJpbmcNCj4+DQo+PiAjIHNlZSBpZiB3ZSdyZSB1c2luZyB0aGUgdGFyZ2V0IGd0ayB2ZXJz aW9uICh0cmlnZ2VycyBzZXR0aW5nIG9mIHRoZQ0KPj4gIyBESVNBQkxFX0RFUFJFQ0FURUQgZmxh ZykNCj4+DQo+PiAoZXhpdHN0YXR1cywgZ3RrX21vZF92ZXJzaW9uKSA9IHNoZWxsLnJ1bigicGtn LWNvbmZpZyAtLW1vZHZlcnNpb24gIA0KPj4gZ3RrDQo+PiArLTIuMCIpDQo+PiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+Pg0KPj4gV2h5IGRvIHdlIG5lZWQgR1RLIHN0dWZmIGlmIHRoaXMg aXMgYSBub24gR1VJIHRodW1ibmFpbCBnZW5lcmF0b3I/DQo+PiBKdXN0IGxlZnQNCj4+IG92ZXIg ZnJvbSB0aGUgb2xkIHByb2plY3Q/IEl0IHNlZW1zIHRoaXMgc2hvdWxkIGJlIG1hZGUgYXMgY3Jv c3MNCj4+IHBsYXRmb3JtIGFzDQo+PiB3ZSBjYW4gYW5kIG5vdCB0aWVkIHRvIEdUSyBvciBRdCBv ciB3aGF0ZXZlciwgZXZlbiBvbiBsaW51eC4gSSBhbHNvDQo+PiBkb24ndCB0aGluaw0KPj4gaXQg aXMgcHJvcGVyIHRvIG1lc3Mgd2l0aCB0aGUgR0NDIGZsYWdzIGluIHRoZXJlLCB5b3UgY291bGQg YmUgIA0KPj4gdXNpbmcgYQ0KPj4gZGlmZmVyZW50DQo+PiBjb21waWxlciBvbiBkaWZmZXIgdW5p eCBzeXN0ZW1zLiBJcyB0aGF0IG5lZWRlZD8NCj4+DQo+PiBJIGFsc28gc2VlIHRoYXQgeW91IGhh dmUgR0RLIGluY2x1ZGVzIGluIG90aGVyIHNvdXJjZSBmaWxlcy4gV2hhdCBhcmUNCj4+IHRoZXkg dXNlZCBmb3IsDQo+PiBqdXN0IGltYWdlIGNvbnZlcnNpb24/IElzIGl0IGNyb3NzIHBsYXRmb3Jt PyBEb2VzIGl0IHNoaXAgd2l0aCBhbGwNCj4+IFVOSVggc3lzdGVtcz8gSXMNCj4+IGl0IGEgZnJl ZSBsaWNlbnNlPyBJZiBpdCBpcyByZXF1aXJlZCB0byB1c2UgdGhlIGNvZGUgdGhlbiB3ZSBuZWVk IHRvDQo+PiB0aGluayBhYm91dCBTREsNCj4+IGVudHJpZXMgaW4gdGhlIGJ1aWxkIHN5c3RlbSBh bmQgc3R1ZmYgbGlrZSB0aGF0Li4uPGdkay1waXhidWYvZ2RrLQ0KPj4gcGl4YnVmLmg+Lg0KPj4N Cj4+DQo+PiAjaWYgKCAhZGVmaW5lZChfSFhTUkNJTl9IXykgfHwgIWRlZmluZWQoSEVMSVhfRkVB VFVSRV9GVUxMR1VJRCkgKQ0KPj4gREVGSU5FX0dVSURfRU5VTShJSURfSUhYU291cmNlSW5wdXQs ICAgICAgICAgICAgICAgIDB4ZWJmOGQyMjAsDQo+PiAweDQwZjcsIDB4MTFkNiwgMHhhYiwgMHgz ZiwgMHgwLCAweDEsIDB4MiwgMHg1MSwgMHhiMywgMHg0MCkNCj4+IERFRklORV9HVUlEX0VOVU0o SUlEX0lIWFNvdXJjZUhhbmRsZXIsICAgICAgICAgICAgICAweGIyNjQ2ZGEwLA0KPj4gMHg0MTBh LCAweDExZDYsIDB4YWIsIDB4M2YsIDB4MCwgMHgxLCAweDIsIDB4NTEsIDB4YjMsIDB4NDApDQo+ PiAjZW5kaWYNCj4+DQo+PiBpdCBpcyBzdHJhbmdlIHRvIHNlZSB0aGF0IGluIGEgcHJvamVjdCdz IHNvdXJjZSB0cmVlLCB0aG9zZSBzaG91bGQNCj4+IGdlbmVyYWxseSBiZSBkZWZpbmVkDQo+PiBp biBhIGhlYWRlciBmaWxlIGluIGNvbW1vbi9pbmNsdWRlIGFuZCB0aGVuIGJyb3VnaHQgaW50byBh IGxvY2FsDQo+PiBndWlsZHMuY3BwIGZpbGUuDQo+Pg0KPj4NCj4+IFdoZXJlIGFyZSB5b3UgdGhp bmtpbmcgYWJvdXQgY2hlY2tpbmcgdGhpcyBpcyBhdD8gcGxheWVyL2NvbW1vbi8NCj4+IGR0ZHJf c2VydmljZS90aHVtYm5haWxfc2VydmljZT8NCj4+IFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0 d2VlbiB5b3VyIGNvZGUgYW5kIHRoZSBjb2RlIHRoYXQgaXMgYWxyZWFkeQ0KPj4gdGhlcmU/DQo+ Pg0KPj4gQWxsIGNoYW5nZXMgd2lsbCBuZWVkIHRvIGJlIGNoZWNrZWQgaW50byAzMTBBdGxhcyBh bmQgSEVBRCBhcyB3ZWxsDQo+PiB3aGVuDQo+PiB0aGUgQ1IgaXMgZG9uZS4gU28sIHlvdSB3aWxs IG5lZWQgdG8gbW9kaWZ5IHRoZSBoZWxpeC5iaWYgYW5kICANCj4+IDMxMGF0bGFzDQo+PiBCSUYg ZmlsZXMuDQo+Pg0KPj4NCj4+IC0tZ3JlZy4NCj4+DQo+Pg0KPj4NCj4+IE9uIEF1ZyAxNywgMjAw OSwgYXQgMjowMiBBTSwgWmhhbywgSGFsbGV5IHdyb3RlOg0KPj4NCj4+PiBTeW5vcHNpczoNCj4+ PiAgIEFkZCBhIG5ldyBsaWJyYXJ5IHRvIGNyZWF0ZSB0aHVtYm5haWwgYmFzZWQgb24gZHRkcml2 ZXI7DQo+Pj4gICBpdCBjb3VsZCBleHRyYWN0IHRodW1ibmFpbC9tZXRhZGF0YSBmcm9tIG1lZGlh IHN0cmVhbS4NCj4+Pg0KPj4+IE92ZXJ2aWV3Og0KPj4+ICAgVGhlcmUgdXNlIHRvIGJlIHNvbWUg ZnVuY3Rpb24gaW4gaHhjbGllbnRraXQgdG8gY3JlYXRlIHRodW1ibmFpbC4NCj4+PiAgIHdoaWxl IHRoZXNlIGZ1bmN0aW9uIGRvZXNuJ3QgdGlnaHQgdG8gaHhjbGllbnRraXQgKG9ubHkgZGVwZW5k DQo+Pj4gb24gZHRkcml2ZXIpLA0KPj4+ICAgYW5kIHRoZSBmZWF0dXJlIGlzIHVzZWQgbm90IGxp bWl0IHRvIEhlbGl4IHBsYXllcjsgZm9yIGV4YW1wbGU6DQo+Pj4gc29tZSBkYWVtb24NCj4+PiAg IGZvciBtZWRpYSBkaXNjb3ZlciBhbmQgZmlsZSBicm93c2VyIGNvdWxkIHVzZSBpdCwgZXRjLg0K Pj4+ICAgc28gSSB0cnkgdG8gY3JlYXRlIHRoaXMgc2VwYXJhdGUgbGlicmFyeSB0byBwcm92aWRl IHNpbXBsaWZpZWQNCj4+PiBpbnRlcmZhY2U6DQo+Pj4gICAgICAgYm9vbCBHZXRWaWRlb0ZyYW1l KGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogZmlsZSwNCj4+PiB1bnNpZ25lZCBpbnQgcG9z aXRpb249MCApOw0KPj4+ICAgICAgIGNvbnN0IGNoYXIqIEdldE1ldGFEYXRhKGNvbnN0IGNoYXIq IHVyaSwNCj4+PiBEdGRyaXZlck1lZGlhaW5mb1Byb2NQdHIgZHRkcl9tZWRpYWluZm9fY2FsbGJh Y2spOw0KPj4+DQo+Pj4gRmlsZXMgQWRkZWQ6DQo+Pj4gICB8LS0gdGh1bWJuYWlsDQo+Pj4gICB8 ICAgfC0tIExJQ0VOU0UudHh0DQo+Pj4gICB8ICAgfC0tIFJDU0wudHh0DQo+Pj4gICB8ICAgfC0t IFJQU0wudHh0DQo+Pj4gICB8ICAgfC0tIFVtYWtlZmlsDQo+Pj4gICB8ICAgfC0tIHB1Yg0KPj4+ ICAgfCAgIHwgICB8LS0gQ0hYQ2xpZW50VGh1bWJuYWlsVW5peC5oDQo+Pj4gICB8ICAgfCAgIGAt LSBoeHRodW1iLmgNCj4+PiAgIHwgICB8LS0gc3JjDQo+Pj4gICB8ICAgfCAgIHwtLSBDSFhDbGll bnRUaHVtYm5haWxVbml4LmNwcA0KPj4+ICAgfCAgIHwgICB8LS0gaHh0aHVtYi5jcHANCj4+PiAg IHwgICB8ICAgYC0tIHRodW1iR3VpZHMuY3BwDQo+Pj4gICB8ICAgfC0tIHRlc3QNCj4+PiAgIHwg ICB8ICAgfC0tIFVtYWtlZmlsDQo+Pj4gICB8ICAgfCAgIHwtLSBtYWluLmNwcA0KPj4+ICAgfCAg IHwgICBgLS0gdW5peC5wY2YNCj4+PiAgIHwgICB8LS0gdGh1bWJuYWlsLmV4cA0KPj4+ICAgfCAg IGAtLSB1bml4LnBjZg0KPj4+DQo+Pj4gICBvbmx5IGh4dGh1bWIuY3BwIGFuZCB0aHVtYkd1aWRz LmNwcCBhcmUgbmV3bHkgYWRkZWQgc291cmNlIGZpbGVzLg0KPj4+ICAgdGVzdC9tYWluLmNwcCBp cyBhIHNhbXBsZSB0byB1c2UgdGhpcyBsaWJyYXJ5Lg0KPj4+DQo+Pj4gRmlsZXMgTW9kaWZpZWQ6 DQo+Pj4gICBwbGF5ZXIvdGh1bWJuYWlsL0NIWENsaWVudFRodW1ibmFpbFVuaXguY3BwDQo+Pj4g ICBoeGNsaWVudF8zXzRfMV9hdGxhcy5iaWYNCj4+Pg0KPj4+IEltYWdlIFNpemUgYW5kIEhlYXAg VXNlIGltcGFjdCAoQ2xpZW50IC1Pbmx5KToNCj4+PiAgIGxpdHRsZQ0KPj4+IFBsYXRmb3JtcyBh bmQgUHJvZmlsZXMgQWZmZWN0ZWQ6DQo+Pj4gICBwbGF0Zm9ybTogICBsaW51eC0yLjItbGliYzYt Z2NjMzItaTU4Ng0KPj4+ICAgcHJvZmlsZTogICAgaGVsaXgtY2xpZW50LWFsbC1kZWZpbmVzDQo+ Pj4NCj4+PiBEaXN0cmlidXRpb24gTGlicmFyaWVzIEFmZmVjdGVkOg0KPj4+ICAgPGxpYmh4dGh1 bWIuc28+DQo+Pj4gRGlzdHJpYnV0aW9uIGxpYnJhcnkgaW1wYWN0IGFuZCBwbGFubmVkIGFjdGlv bjoNCj4+PiAgIGFkZCB0aGlzIGxpYnJhcnkgdG8gdGhlIGJ1bmRsZSBwYWNrYWdlIG9mIEhlbGl4 IGJhc2VkIHBsYXllcg0KPj4+IFBsYXRmb3JtcyBhbmQgUHJvZmlsZXMgQnVpbGQgVmVyaWZpZWQ6 DQo+Pj4gICBTZXQgQklGIGJyYW5jaCAgLT4gaHhjbGllbnRfM180XzFfYXRsYXMNCj4+PiAgIFNl dCBUYXJnZXQocykgICAtPiBkdGRyX3RodW1iLWdlbmVyYXRvcg0KPj4+ICAgU2V0IFByb2ZpbGUg ICAgIC0+IGhlbGl4LWNsaWVudC1hbGwtZGVmaW5lcw0KPj4+ICAgU3lzdGVtIElEICAgICAgIC0+ IGxpbnV4LTIuMi1saWJjNi1nY2MzMi1pNTg2DQo+Pj4gQnJhbmNoOg0KPj4+ICAgSEVBRC9oeGNs aWVudF8zXzRfMV9hdGxhcw0KPj4+IENvcHlyaWdodCBhc3NpZ25tZW50OiA8TVVTVCBiZSBvbmUg b2YgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzID4NCj4+PiAgMi4gICAgICBJbnRlbCBoYXMgc2ln bmVkIGFuZCBkZWxpdmVyZWQgYSBKb2ludCBDb3B5cmlnaHQgQXNzaWdubWVudA0KPj4+ICAgICAg ICAgIHRvIFJlYWxOZXR3b3JrcywgYW5kIHJlY2VpdmVkIGFja25vd2xlZGdtZW50IHRoYXQgdGhl DQo+Pj4gICAgICAgICAgYWdyZWVtZW50IHdhcyByZWNlaXZlZC4NCj4+PiBGaWxlcyBBdHRhY2hl ZDoNCj4+PiAgIGh4Y2xpZW50XzNfNF8xX2F0bGFzLmJpZi5kaWZmLnR4dCwgdGh1bWJuYWlsLnRn eg0KPj4+IFpIQU8sIEhhbGxleSAoQWlodWEpDQo+Pj4gRW1haWw6IGhhbGxleS56aGFvQGludGVs LmNvbQ0KPj4+IFRlbDogKzg2KDIxKTYxMTY2NDc2DQo+Pj4gaU5ldDogODgyMS02NDc2DQo+Pj4g U1NHL09UQy9Nb2JsaW4gM1cwMzggUG9sZTogRjQNCj4+Pg0KPj4+IDwNCj4+PiB0aHVtYm5haWwu dGd6DQo+Pj4+DQo+Pj4gPA0KPj4+IGh4Y2xpZW50XzNfNF8xX2F0bGFzLmJpZi5kaWZmLnR4dA0K Pj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPj4+ IEhlbGl4LWNsaWVudC1kZXYgbWFpbGluZyBsaXN0DQo+Pj4gSGVsaXgtY2xpZW50LWRldkBoZWxp eGNvbW11bml0eS5vcmcNCj4+PiBodHRwOi8vbGlzdHMuaGVsaXhjb21tdW5pdHkub3JnL21haWxt YW4vbGlzdGluZm8vaGVsaXgtY2xpZW50LWRldg0KPj4NCj4+IDx0aHVtYm5haWwudGd6Pjxjb21t b24taW5jbHVkZS0NCj4+IGh4c3JjaW5faC5kaWZmLnR4dD48aHhjbGllbnRfM18xXzBfYXRsYXMu YmlmLmRpZmYudHh0Pg0KPg0KPiA8Y29tbW9uLWluY2x1ZGUtaHhpaWRzX2guZGlmZi50eHQ+DQoN Cg==