T24gV2VkLCBBcHIgMDksIDIwMTQgYXQgMDE6MDI6MzlQTSAtMDQwMCwgSmVhbi1QYXVsIExvdWlz IHdyb3RlOgo+IEplZmYsCj4gCj4gWW914oCZcmUgdGhlIGZpcnN0IHBlcnNvbiBpbiBvdmVyIDQw IHllYXJzIHRoYXQgSSBoZWFyZCBtZW50aW9uaW5nIHRoYXQgUGFzY2FsCj4gaXMgaW5jb25zaXN0 ZW50LiAKPiBJdCBpcyBhIHZlcnkgc3Ryb25nbHkgdHlwZWQgbGFuZ3VhZ2UsIAo+IGFuZCBJIHdv dWxkIGxvdmUgdG8gc2VlIHdoYXQgeW91IGNhbGwgaW5jb25zaXN0ZW5jeS4KCkkgc3BlY2lmaWNh bGx5IHN0YXRlZCB0aGF0IHRoZSB1c2Ugb2Ygc2VtaWNvbG9uIGFzIGEgc2VwYXJhdG9yIGNhdXNl cyB0aGUKaW5jb25zaXN0ZW5jeS4gVGhlIHNjb3BlIHdhcyBubyBmYXJ0aGVyIHRoYW4gdGhhdC4K Cj4gCj4gQSBQYXNjYWwgYmxvY2sgaGFzIGEgYmVnaW4g4oCmIGVuZC4gCj4gCj4gIElmIChIZXJl IHlvdXIgdGVzdCkgdGhlbgo+ICAgIEJlZ2luCj4gICAgICBZb3VyIEJsb2NrIGhlcmUKPiAgICBF bmQ7CgpUcnVlIHRvIGEgcG9pbnQuIFRoZSBibG9jayBlbmNsb3NpbmcgaXMgbm90IHJlcXVpcmVk IGlmIHRoZSBibG9jayBjb25zaXN0Cm9mIGEgc2luZ2xlIHN0YXRlbWVudC4gSSBhbHdheXMgcHV0 IHRoZW0gYXMgYSBtYXR0ZXIgb2YgY291cnNlLiBCdXQgdGhlCmxhbmd1YWdlIHNwZWNpZmljYXRp b24gZGlkIG5vdCByZXF1aXJlIGJlZ2luIGFuZCBlbmQgd2hlbiB0aGUgYm9keSBvZiB0aGUKYmxv Y2sgaXMgYSBzaW5nbGUgc3RhdGVtZW50Lgo+IAo+ICBJZiAoSGVyZSB5b3VyIHRlc3QpIHRoZW4K PiAgICBCZWdpbgo+ICAgICAgWW91ciBCbG9jayBoZXJlCj4gICAgRW5kCj4gIGVsc2UKPiAgICBC ZWdpbgo+ICAgICAgWW91ciBvdGhlciBCbG9jayBoZXJlCj4gICAgRW5kOwo+IAo+IFdoZXJlIGlz IHRoZSBpbmNvbnNpc3RlbmN5IGluIHRoYXQ/CgpOb3Qgd2hhdCBJIHdhcyB0YWxraW5nIGFib3V0 LiBBbGwgb2YgdGhlIGJlbG93IG1heSBvciBtYXkgbm90IGJlIHZhbGlkCgpJZiAoSGVyZSB5b3Vy IHRlc3QpIHRoZW4KICAgIGkgOj0gMSAKCklmIChIZXJlIHlvdXIgdGVzdCkgdGhlbgogICAgaSA6 PSAxOyAKCklmIChIZXJlIHlvdXIgdGVzdCkgdGhlbgogICAgYmVnaW4KICAgIGkgOj0gMTsgCiAg ICBqIDo9IDIKICAgIGVuZAoKSWYgKEhlcmUgeW91ciB0ZXN0KSB0aGVuCiAgICBiZWdpbgogICAg aSA6PSAxOyAKICAgIGogOj0gMgogICAgZW5kOwoKQW5kIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGlu dmFsaWQ6CgpJZiAoSGVyZSB5b3VyIHRlc3QpIHRoZW4KICAgIGJlZ2luCiAgICBpIDo9IDE7IAog ICAgaiA6PSAyOwogICAgZW5kOwoKSWYgKEhlcmUgeW91ciB0ZXN0KSB0aGVuCiAgICBiZWdpbgog ICAgaSA6PSAxOyAKICAgIGogOj0gMjsKICAgIGVuZAoKVGhlIGluY29uc2lzdGVuY3kgaXMgdGhh dCB0aGUgdmFsaWRpdHkgb2YgYSBzdGF0ZW1lbnQgc2VwYXJhdG9yIGRlcGVuZHMgb24Kd2hhdCBm b2xsb3dzIHRoZSBzdGF0ZW1lbnQuIEluIHRoZSBleGFtcGxlcyBhYm92ZSB5b3UgZG8gbm90IGhh dmUgZW5vdWdoCmNvbnRleHQgdG8gdmFsaWRhdGUgaWYgdGhlIHNlbWljb2xvbiAob3IgbGFjayB0 aGVyZW9mKSBpcyB0aGUgcHJvcGVyCnN5bnRhY3RpYyBmb3JtdWxhdGlvbi4gRXZlbiB3b3JzZSBz eW50YXRpY2FsbHkgdmFsaWQgY29kZSBjYW4gYmVjb21lCmludmFsaWVkIGJ5IGNoYW5naW5nIHRo ZSBjb250ZXh0IG9mIHRoZSBjb2RlLgoKVGVybWluYXRvcnMgYXJlIGJldHRlciBiZWNhdXNlIHRo ZXkgYXJlIGFsd2F5cyByZXF1aXJlZC4gVGhlcmVmb3JlIHRoZQpzdGF0ZW1lbnQgaXMgdmFsaWQg d2l0aG91dCBrbm93aW5nIChvciBwb3NzaWJseSBjaGFuZ2luZykgdGhlIG91dHNpZGUKY29udGV4 dC4gSW4gQyB0aGlzIHN0YXRlbWVudCBpcyB2YWxpZCBpbiBhbGwgY2FzZXM6CgppZiAodGVzdCkg ewogICBpID0gMTsKfQoKQW5kIHRoaXMgaXMgaW52YWxpZCBpbiBhbGwgY2FzZXM6CgppZiAodGVz dCkgewogICBpID0gMQp9CgpTaW5jZSB0aGUgc2VtaWNvbG9uIGlzIGEgdGVybWluYXRvciwgaWYg dGhlcmUgaXMgYSBzdGF0ZW1lbnQsIGl0IGlzCnJlcXVpcmVkLiBQZXJpb2QuIEFzIGEgc2VwYXJh dG9yLCB0aGUgdmFsaWRpdHkgb2YgdGhlIHNlbWljb2xvbiBpcwpkZXRlcm1pbmVkIGJ5IHdoYXQg Zm9sbG93cyBpdCwgbm90IHdoYXQgcHJlY2VlZHMgaXQuCgpCQUoKCj4gSSB0aGluayB0aGF0IHlv dSBzaG91bGQgcmVyZWFkIHRoZSBmb3JtYWwgbGFuZ3VhZ2UgZGVzY3JpcHRpb24gYnkgTmV1d2ly dGguCgpObyBuZWVkLiBJJ3ZlIHRhdWdodCBwcm9ncmFtbWluZyBsYW5ndWFnZSBkZXNpZ24gZm9y IG5lYXJseSBhbGwgb2YgbXkgYWR1bHQKbGlmZS4gV2lydGggbWFkZSBhIG1pc3Rha2UgdGFraW5n IHNlcGFyYXRvcnMgZnJvbSBBbGdvbC4gRm9ydHVuYXRlbHkgaGUgZGlkCm5vdCBmb2xsb3cgc3Vp dCB3aXRoIGR5bmFtaWMgc2NvcGluZy4uLgoKQkFKCgo+IAo+IEp1c3QgY3VyaW91cywKPiAKPiBK ZWFuLVBhdWwgKEFDOUdIKQo+IAo+IAo+IE9uIEFwciA5LCAyMDE0LCBhdCAxMTo0MSBBTSwgQnly b24gSmVmZiA8Ynlyb25qZWZmQG1haWwuY2xheXRvbi5lZHU+IHdyb3RlOgo+IAo+ID4gT24gV2Vk LCBBcHIgMDksIDIwMTQgYXQgMDQ6MTA6NDBQTSArMDEwMCwgUGV0ZXIgT25pb24gd3JvdGU6Cj4g Pj4gCj4gPj4gCj4gPj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPj4+IEZy b206IEpvaG4gSi4gTWNEb25vdWdoIDxtY2RAaXMtc2l4c2lnbWEuY29tPgo+ID4+PiBUbzogTWlj cm9jb250cm9sbGVyIGRpc2N1c3Npb24gbGlzdCAtIFB1YmxpYy4gPHBpY2xpc3RAbWl0LmVkdT4g Cj4gPj4+IFNlbnQ6IFdlZG5lc2RheSwgOSBBcHJpbCAyMDE0LCAxNTo0NAo+ID4+PiBTdWJqZWN0 OiBSZTogW1BJQ10gQyBHT1RPIGFuZCBlbWJlZGRlZCBQeXRob24KPiA+Pj4gCj4gPj4+IAo+ID4+ PiAKPiA+Pj4gSW4gQWxnb2wgdGhlIHN0YXRlbWVudCBlbmRzIGF0IHRoZSA7Cj4gPj4+IAo+ID4+ PiAKPiA+PiAgCj4gPj4gSW4gQWxnb2wtNjAgKGFuZCA2OCBJIGV4cGVjdCkgIHRoZSAiOyIgaXMg YSBzdGF0ZW1lbnQgc2VwYXJhdG9yIE5PVCBhIHN0YXRlbWVudCB0ZXJtaW5hdG9yLiAgU3VidGxl IGRpZmZlcmVuY2UgYnV0IGlzIGRvZXMgbGVhZCB0byBzb21lIAo+ID4+IHNpdHVhdGlvbnMgd2hl cmUgY2FyZSBpcyBuZWVkZWQgd2hlcmUgdG8gcHV0IChhbmQgbm90IHRvIHB1dCkgICI7Igo+ID4+ ICAKPiA+PiBJIGhhdmUgd3JpdHRlbiBzb21lIEFsZ29sLTYwIGluIHJlY2VudCB5ZWFycyAhCj4g PiAKPiA+IEkgcmVtZW1iZXIgdGhlIHNlcGFyYXRvci90ZXJtaW5hdG9yIGRpZmZlcmVuY2UgZnJv bSBQYXNjYWwuIFVzZWQgdG8gZHJpdmUKPiA+IG1lIG51dHMuIFJlYXNvbiBpcyB0aGUgaW5jb25z aXN0ZW5jeS4gVGVybWluYXRvcnMsIHdoaWxlIGFubm95aW5nLCBhcmUKPiA+IGNvbnNpc3RlbnQu Cj4gPiAKPiA+IEJBSgo+ID4gCj4gPj4gIAo+ID4+IFBldGVyTwo+ID4+IAo+ID4+IC0tIAo+ID4+ IGh0dHA6Ly93d3cucGljbGlzdC5jb20vdGVjaHJlZi9waWNsaXN0IFBJQy9TWCBGQVEgJiBsaXN0 IGFyY2hpdmUKPiA+PiBWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBhdAo+ID4+ IGh0dHA6Ly9tYWlsbWFuLm1pdC5lZHUvbWFpbG1hbi9saXN0aW5mby9waWNsaXN0Cj4gPiAKPiA+ IC0tIAo+ID4gQnlyb24gQS4gSmVmZgo+ID4gQ2hhaXI6IERlcGFydG1lbnQgb2YgQ29tcHV0ZXIg U2NpZW5jZSBhbmQgSW5mb3JtYXRpb24gVGVjaG5vbG9neQo+ID4gQ29sbGVnZSBvZiBJbmZvcm1h dGlvbiBhbmQgTWF0aGVtYXRpY2FsIFNjaWVuY2VzCj4gPiBDbGF5dG9uIFN0YXRlIFVuaXZlcnNp dHkKPiA+IGh0dHA6Ly9mYWN1bHR5LmNsYXl0b24uZWR1L2JqZWZmCj4gPiAtLSAKPiA+IGh0dHA6 Ly93d3cucGljbGlzdC5jb20vdGVjaHJlZi9waWNsaXN0IFBJQy9TWCBGQVEgJiBsaXN0IGFyY2hp dmUKPiA+IFZpZXcvY2hhbmdlIHlvdXIgbWVtYmVyc2hpcCBvcHRpb25zIGF0Cj4gPiBodHRwOi8v bWFpbG1hbi5taXQuZWR1L21haWxtYW4vbGlzdGluZm8vcGljbGlzdAo+IAoKCj4gLS0gCj4gaHR0 cDovL3d3dy5waWNsaXN0LmNvbS90ZWNocmVmL3BpY2xpc3QgUElDL1NYIEZBUSAmIGxpc3QgYXJj aGl2ZQo+IFZpZXcvY2hhbmdlIHlvdXIgbWVtYmVyc2hpcCBvcHRpb25zIGF0Cj4gaHR0cDovL21h aWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QKCgotLSAKQnlyb24gQS4gSmVm ZgpDaGFpcjogRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlIGFuZCBJbmZvcm1hdGlvbiBU ZWNobm9sb2d5CkNvbGxlZ2Ugb2YgSW5mb3JtYXRpb24gYW5kIE1hdGhlbWF0aWNhbCBTY2llbmNl cwpDbGF5dG9uIFN0YXRlIFVuaXZlcnNpdHkKaHR0cDovL2ZhY3VsdHkuY2xheXRvbi5lZHUvYmpl ZmYKLS0gCmh0dHA6Ly93d3cucGljbGlzdC5jb20vdGVjaHJlZi9waWNsaXN0IFBJQy9TWCBGQVEg JiBsaXN0IGFyY2hpdmUKVmlldy9jaGFuZ2UgeW91ciBtZW1iZXJzaGlwIG9wdGlvbnMgYXQKaHR0 cDovL21haWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QK .