Re: [jinterface] add erlang term parse/match/bind features
Dmitriy Kargapolov <[email protected]> Thu, 01 Jan 2015 14:26:21 -0500
| Newsgroups | gmane.comp.lang.erlang.patches |
|---|---|
| Message-ID | <[email protected]> |
SGkgVmxhZCwKV2hpbGUgY29udGludWluZyBzdHVkeSB5b3VyIGNvZGUgSSB0cmllZCB0byBhbnN3 ZXIgeW91ciBxdWVzdGlvbnMuClJlYWRpbmcgdGhpcyBwbGVhc2Uga2VlcCBpbiBtaW5kIHRoZSBk aWZmZXJlbmNlIGluIG91ciBhcHByb2FjaGVzLiBJbiBteQphcHByb2FjaCBleGlzdGluZyBvYmpl Y3RzIHN0cnVjdHVyZSBpcyByZS11c2VkIHRvIGtlZXAgcGF0dGVybiBlbGVtZW50cy4KVGhpcyB3 YXMgZG9uZSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwgdG8ga2VlcCBjb2RlIGxlc3MgcG9s bHV0ZWQKd2l0aCBuZXcgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcy4gSkludGVyZmFjZSBpbml0aWFs bHkgYW5ub3VuY2VkIGFzCmxvdy1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIEVybGFuZywgYW5kIEkg dHJpZWQgdG8gZm9sbG93IHRoaXMgd2F5LgoKT24gMDEvMDEvMjAxNSAwOToxMiBBTSwgVmxhZCBE dW1pdHJlc2N1IHdyb3RlOgo+IEhpIERtaXRyaXksCj4KPiBJJ20gc3RpbGwgZ29pbmcgdGhyb3Vn aCB5b3VyIGNvZGUsIGJ1dCBJIHdvbmRlciBpZiB5b3UgY291bGQgZXhwbGFpbgo+IHdoeSBlcXVh bHMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIG1hdGNoPyBJIHRoaW5rIHRoZXNl IGFyZQo+IHR3byBkaWZmZXJlbnQgb3BlcmF0aW9ucyBhbmQgY2FuIGJlIHJlbGV2YW50IG9ubHkg aWYgY2hlY2tpbmcgZXF1YWxzCj4gYmV0d2VlbiBhIHJlZ3VsYXIgdGVybSBhbmQgYSBwYXR0ZXJu LCBidXQgSSBjYW4ndCBzZWUgYW55IHJlYXNvbiB0bwo+IHdhbnQgdG8gZG8gdGhhdCBiZWNhdXNl IHRoZXNlIHNob3VsZCBuZXZlciBiZSBlcXVhbC4gT3IgbWF5YmUgSSBhbQo+IG1pc3NpbmcgYSBm aW5lIHBvaW50Py4uLgpUaGlzIHdhcyBkb25lIGZvciBzaW1wbGljaXR5LCB0byBhdm9pZCBkdXBs aWNhdGluZyB0aGUgY29kZSwgZXNwZWNpYWxseQp3aGVuIG9wZXJhdGluZyBvbiBjb21wbGV4IGRh dGEgbGlrZSBsaXN0cywgdHVwbGVzLCBtYXBzLiBMZXNzIGNvZGUgLQpsZXNzIGVycm9ycy4KVGVy bSBjb25zaWRlcmVkIHRvIGJlIHBhdHRlcm4gaW4gb3Bwb3NpdGUgdG8gcmVndWxhciBvYmplY3Qg aWYgaXQKY29udGFpbnMgdmFyaWFibGUgcGxhY2Vob2xkZXJzLiBJbiBzdWNoIGNhc2UgaXQgc2hv dWxkIG5vdCBiZSB1c2VkIGluCmFueSB3YXkgYnV0IGZvciBtYXRjaGluZyBhZ2FpbnN0IG90aGVy IHJlZ3VsYXIgdGVybXMuIChSZWd1bGFyIHRlcm0gY2FuCmJlIGNvbnNpZGVyZWQgYXMgYW4gZWRn ZSBjYXNlIG9mIHBhdHRlcm4gd2l0aCBubyB2YXJpYWJsZXMgYW5kIHRoZXJlZm9yZQpjYW4gYWxz byBiZSB1c2VkIGFzIGxlZnQgc2lkZSBvZiB0aGUgbWF0Y2ggb3BlcmF0aW9uKS4KSW4gdGhlIGxp Z2h0IG9mIGFib3ZlLCBjYWxsaW5nIGVxdWFscyBtZXRob2QgZm9yIHRoZSBwYXR0ZXJuKHMpIGRv ZXMgbm90Cm1ha2UgYW55IHNlbnNlIGFuZCBzaG91bGQgbm90IGJvdGhlciBhbnlvbmUuIEZvciBy ZWd1bGFyIHRlcm0ocykgbWF0Y2gKYW5kIGVxdWFscyBtZXRob2RzIGNhcnJ5IHNhbWUgc2VtYW50 aWNzLgpJIGtub3cgdGhhdCBlcXVhbHMgbWV0aG9kIG5vdyBoYXMgc29tZSBydW50aW1lIG92ZXJo ZWFkcy4gSW1obyB0aGlzIGlzCnJlYXNvbmFibGUgc2FjcmlmaWNpbmcuIFRoZSBlcXVhbHMoKSBt ZXRob2QgaXMgbm90IG11Y2ggaW1wb3J0YW50LiBKYXZhCmNvZGUgbXVzdCBwcmVmZXJhYmx5IHdv cmsgd2l0aCBKYXZhIG9iamVjdHMsIG5vdCBFcmxhbmcgdGVybXMuIFdoYXQgaXMKcmVhbGx5IGlt cG9ydGFudCBpcyB0byBoYXZlIGVmZmVjdGl2ZSB3YXkgb2YgaW1wb3J0aW5nIEVybGFuZyB0ZXJt cwp0cmFuc2xhdGluZyB0aGVtIHRvIHdoYXQgaXMgc3VpdGFibGUgZm9yIEphdmEgY29kZS4gU28g bXVjaCgpCmltcGxlbWVudGF0aW9uIGlzIGEgcHJpb3JpdHkgb3ZlciBlcXVhbHMoKS4KPgo+IEkg YW0gYWxzbyB3b25kZXJpbmcgaWYgT0VPYmplY3QgaXRzZWxmIGNvdWxkIGltcGxlbWVudCBPRU1h dGNoZXIgYW5kCj4ganVzdCBjYWxsIG1hdGNoL2JpbmQgcmVjdXJzaXZlbHkgaW5zdGVhZCBvZiBj aGVja2luZyAiaW5zdGFuY2VvZgo+IE9FTWF0Y2hlciIgaW4gT0VMaXN0LCBPRU1hcCBhbmQgT0VU dXBsZS4gSXQgZmVlbHMgZWFzaWVyIHRvIHVuZGVyc3RhbmQKPiAobGVzcyBjb25kaXRpb25hbHMg aW4gdGhlIGNvZGUpLgpJbiBzdWNoIGNhc2UgbWF0Y2gvYmluIHdvdWxkIGJlIG1ldGhvZHMgb2Yg YWxsIG9iamVjdHMsIGluY2x1ZGluZyBhdG9tcywKaW50ZWdlcnMsIHN0cmluZ3MgZXRjLiBUaGlz IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSBpbWhvLiBJIGRvbuKAmXQgdGhpbmsKaXQgaXMgcmVh c29uYWJsZSB0byByZXBsYWNlIG9uZSBpbXBlcmZlY3Rpb24gYnkgYW5vdGhlciBvbmUuCj4KPiBJ biBteSBpbXBsZW1lbnRhdGlvbiwgSSBkaWQgaXQgaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgd2F5 LCBtb3N0bHkgaW4KPiBvcmRlciB0byBtb2RpZnkgZXhpc3RpbmcgY2xhc3NlcyBhcyBsaXR0bGUg YXMgcG9zc2libGUsIGJ5IHVzaW5nIGFuCj4gdXRpbGl0eSBjbGFzcyB0byB0cmF2ZXJzZSB0ZXJt cyBhbmQgZG8gbWF0Y2hpbmcgYW5kIGJpbmRpbmcuCk91ciBhcHByb2FjaGVzIGFyZSBmdW5kYW1l bnRhbGx5IGRpZmZlcmVudC4gSSBhbHNvIHRyaWVkIHRvIGtlZXAgYXMgbXVjaApjb2RlIHVudG91 Y2hlZCBhcyBwb3NzaWJsZSwgYnV0IHdhcyByZWFzb25hYmxlIGxhenkgdG8gcmUtY3JlYXRlIGNv bXBsZXgKRXJsYW5nIHRlcm1zIHN0cnVjdHVyZSBpbiBzZXBhcmF0ZSBwYXR0ZXJuIG9iamVjdC4g TXkgYXBwcm9hY2ggaXMgYQpjb21wcm9taXNlLiBJdCBkb2VzIHJlcXVpcmUgdG91Y2hpbmcgdGhl IGNvcmUgY29kZS4gWW91ciBhcHByb2FjaCBpcwpzbWFydCB3YXkgdG8gaGFuZGxlIHBhdHRlcm4g bWF0Y2hpbmcgd2l0aG91dCB0b3VjaGluZyBiYXNlIGNvZGUuIEl0IG1heQpiZSAoSSBndWVzcykg bWFkZSBhcyBhbiBleHRlbnNpb24gdG8gY29yZSBKSW50ZXJmYWNlIGluIHNlcGFyYXRlIGphcgpo YXZpbmcgSkludGVyZmFjZSBhcyBhIGRlcGVuZGVuY3kuIEZyYW5rbHkgSSBkaWRu4oCZdCBoYXZl IGVub3VnaCB0aW1lIHRvCmZvbGxvdyB5b3VyIHdheSwgbXkgY29kZSBjb250YWlucyBsZXNzIG1v ZGlmaWNhdGlvbnMgYW5kIGFkZGl0aW9ucyB0bwp0aGUgSkludGVyZmFjZSBhbmQgcHJvYmFibHkg dG9vayBsZXNzIGVmZm9ydHMgdG8gaW1wbGVtZW50LgoKPiBJIGFsc28gaGF2ZSBtb3JlIGFkdmFu Y2VkIGNvbnZlcnNpb24gcm91dGluZXMgYmV0d2VlbiBKYXZhIGFuZCBFcmxhbmcKPiB0eXBlcyAo bW9zdCB1c2VmdWwgYXJlIGZvciBTdHJpbmdzLCBMaXN0PC0+bGlzdCBhbmQKPiBBcnJheTwtPnR1 cGxlL2JpbmFyeSkuIE1heWJlIHlvdSB3b3VsZCBsaWtlIHRvIGNoZWNrCj4gYXQgaHR0cHM6Ly9n aXRodWIuY29tL3ZsYWRkdS9vdHAvY29tcGFyZS9lcmxhbmc6bWFzdGVyLi4uamludGVyZmFjZV9u ZXdfYXBpPwpJIG1hZGUgZm9yIG15IHByb2plY3QgYWRkaXRpb25hbCBhYnN0cmFjdGlvbnMgZm9y IHR5cGUgY29udmVyc2lvbgppbmNsdWRpbmcgbGlzdHMgb2Ygb2JqZWN0cyBhbmQgbWFwcy4gSeKA mW0gbm90IHJlYWR5IHRvIHNoYXJlIHRoaXMsIHNpbmNlCml0IGlzIG5vdCBwZXJmZWN0IGF0IGFs bC4gQW5kIEkgZG9u4oCZdCBzZWUgYW55IGNvbXByZWhlbnNpdmUgZ2VuZXJpYyB3YXkKb2YgbWFw cGluZyBFcmxhbmcgZGF0YSB0by9mcm9tIEphdmEgZGF0YS4gQW55d2F5LCBJIHRoaW5rIHRoYXQg c3VjaApzdHVmZiBtYXkgYmUgYSBzZXBhcmF0ZSBsaWJyYXJ5IGRlZGljYXRlZCB0byB0eXBlIGNv bnZlcnNpb25zIGFuZCBvdGhlcgphc3BlY3RzIG9mIGVuY29kZS9kZWNvZGUgb2YgY29tcGxleCB1 c2Vy4oCZcyBkYXRhLiBKSW50ZXJmYWNlIGFzIGEKbG93LWxldmVsIGxpYnJhcnkgbG9va3MgYmV0 dGVyIHdoZW4gZnJlZSBvZiBzdWNoIGFkZGl0aW9ucy4gSXQgaXMgZW5vdWdoCnRvIGF1dG9tYXRl IEVybGFuZyB0ZXJtIHN0cnVjdHVyZSBtYXRjaGluZyBtb3ZpbmcgdHlwZSB2ZXJpZmljYXRpb24g YW5kCmNvbnZlcnNpb24gdG8gdGhlIG5leHQgbGF5ZXIgb2YgYWJzdHJhY3Rpb24gb3IgdG8gdXNl cuKAmXMgY29kZSAobGlrZQpjdXN0b20gYmluZGVycyBpbiBteSBjYXNlKS4KCj4KPiBNYXliZSB3 ZSBzaG91bGQgdHJ5IHRvIHVuaWZ5IG91ciBjb2RlIGZpcnN0IGFuZCB0aGVuIHN1Ym1pdCBpdCB0 byBPVFA/CkZpcnN0IG9mIGFsbCwgd2UgKGFuZCBjb21tdW5pdHkpIHNob3VsZCB2b3RlIGZvciB0 aGUgY29yZSBhcHByb2FjaCwKYW5zd2VyaW5nIHRoZSBxdWVzdGlvbjogc2hvdWxkIHdlIGludGVy dmVuZSBpbnRvIHRoZSBiYXNlIGNvZGUgb3IgbWFrZQpwYXJhbGxlbCBwYXR0ZXJucyBvYmplY3Qg c3RydWN0dXJlPyBNeSBvcGluaW9uIGlzIHRoYXQgbWFraW5nIHBhcmFsbGVsCnN0cnVjdHVyZXMg aXMgbW9yZSBlcnJvci1wcm9uZSBhbmQgbWFrZXMgbWFpbnRlbmFuY2UgaGFyZGVyIGR1ZSB0byBt b3JlCnNpbWlsYXIgY29kZSB0byByZXBlYXQgaW4gZGlmZmVyZW50IHBsYWNlcy4KU2Vjb25kIChs ZXNzIGltcG9ydGFudCB0aG91Z2gpIHF1ZXN0aW9uIHdvdWxkIGJlOiBob3cgcmVhc29uYWJsZSBp cyB0bwphZGQgZmFuY3kgZGF0YSBjb252ZXJzaW9uIGhlbHBlcnMgdG8gdGhlIGJhc2UgSkludGVy ZmFjZSBsaWJyYXJ5LgpJbiB0aGUgY29kZSBJIHN1Ym1pdHRlZCB0aGVyZSBpcyBtYXkgYmUgc3Bh Y2UgZm9yIGltcHJvdmVtZW50cyBpbiB0aGUKT0VQYXJzZXIgY2xhc3MuIElmIHdlJ2QgbGlrZSB0 byBicmluZyBiYXNpYyBkYXRhIHR5cGUKdmVyaWZpY2F0aW9uL2NvbnZlcnNpb25zIHRvIHRoZSBj b2RlLiBJIHdvdWxkIHByZWZlciB0byBhdm9pZCB0aGlzCnRob3VnaCwgYXQgbGVhc3QgZm9yIHRo ZSBpbml0aWFsIHZlcnNpb24uCj4KPiBIYXBweSBOZXcgWWVhciBhbmQgSSBndWVzcyB0aGF0IGZv ciB5b3UgaXQncyBldmVuIE1lcnJ5IENocmlzdG1hcyBpbiBhCj4gd2VlaywgcmlnaHQ/Clllcywg dGhhbmsgeW91IQoKPiBWbGFkCj4KPgo+IE9uIFdlZCwgRGVjIDMxLCAyMDE0IGF0IDU6MzEgUE0s IERtaXRyaXkgS2FyZ2Fwb2xvdgo+IDxkbWl0cml5LmthcmdhcG9sb3ZAZ21haWwuY29tIDxtYWls dG86ZG1pdHJpeS5rYXJnYXBvbG92QGdtYWlsLmNvbT4+Cj4gd3JvdGU6Cj4KPiAgICAgSGkgVmxh ZCwKPiAgICAgVGhhbmsgeW91IG11Y2ggZm9yIHlvdXIgbm90ZXMuCj4KPiAgICAgSSBhZ3JlZSBz b21lIG5hbWVzIHdlcmUgbm90IGdvb2QgZW5vdWdoLCBJIGNoYW5nZWQgdGhlc2UgcGVyIHlvdXIK PiAgICAgc3VnZ2VzdGlvbi4KPiAgICAgT2xkIGNvbW1lbnQgcmVtb3ZlZCBhcyB3ZWxsLgo+Cj4g ICAgIEFzIHRvIE90cEVyYW5nTWFwIGNsYXNzIC0gSSB3YXMgbm90IGdvaW5nIHRvIHJlLWltcGxl bWVudCBpdAo+ICAgICBpbml0aWFsbHkuIEJ1dCBpbiBvcmRlciB0byBhZGQgbWF0Y2gvYmluZCBJ IGhhZCB0byBkbyB0aGlzLiBJCj4gICAgIHRyaWVkIHRvIG5vdCBhZGQgbXVjaCBuZXcgbWV0aG9k cywga2VlcGluZyBpbXBsZW1lbnRhdGlvbiByYXRoZXIKPiAgICAgImp1c3QgZW5vdWdoIiB0byB3 b3JrIHdpdGggbWFwcy4gWW91IGFyZSB2ZXJ5IHdlbGNvbWUgdG8KPiAgICAgYWRkL2NoYW5nZSB3 aGF0ZXZlciB5b3Ugc2VlIHJlYXNvbmFibGUgaW4gc2VwYXJhdGUgUFIgdGhvdWdoLgo+Cj4gICAg IEJlc3QgUmVnYXJkcyBhbmQgSGFwcHkgTmV3IFllYXIhCj4gICAgIC0gRG1pdHJpeS4KPgo+ICAg ICBnaXQgZmV0Y2ggaHR0cHM6Ly9naXRodWIuY29tL3gwaWQvb3RwLmdpdCBqaW50ZXJmYWNlX3Bh dHRlcm5fbWF0Y2hpbmcKPgo+ICAgICBodHRwczovL2dpdGh1Yi5jb20veDBpZC9vdHAvY29tcGFy ZS9lcmxhbmc6bWFzdGVyLi4uamludGVyZmFjZV9wYXR0ZXJuX21hdGNoaW5nCj4gICAgIGh0dHBz Oi8vZ2l0aHViLmNvbS94MGlkL290cC9jb21wYXJlL2VybGFuZzptYXN0ZXIuLi5qaW50ZXJmYWNl X3BhdHRlcm5fbWF0Y2hpbmcucGF0Y2gKPgo+Cj4KPiAgICAgT24gMTIvMzEvMjAxNCAxMDoyNyBB TSwgVmxhZCBEdW1pdHJlc2N1IHdyb3RlOgo+PiAgICAgSGkgRG1pdHJpeSwKPj4KPj4gICAgIE5p Y2UgaW1wbGVtZW50YXRpb24hIEkgaGF2ZSBzb21ldGhpbmcgc2ltaWxhciB0aGF0IEkgd2FudGVk IHRvCj4+ICAgICBzdWJtaXQsIGJ1dCBJIGxpa2Ugc29tZSBvZiB5b3VyIGRldGFpbHMgYmV0dGVy Lgo+Pgo+PiAgICAgSSBoYXZlIGEgZmV3IGNvbW1lbnRzLCBhZnRlciBicm93c2luZyB0aGUgY29k ZSBqdXN0IGJyaWVmbHk6Cj4+Cj4+ICAgICAtIEkgd291bGQgcHJlZmVyIHRvIGhhdmUgdGhlIE9F TWFwIGNoYW5nZXMgYXMgYSBzZXBhcmF0ZSBQUiwgYXMKPj4gICAgIGl0J3MgYSBzZXBhcmF0ZSBp c3N1ZSBhbmQgdGhlcmUgYXJlIG1vcmUgdGhpbmdzIHRvIGFkZHJlc3MgdGhlcmUsCj4+ICAgICBs aWtlIGZvciBleGFtcGxlLCBPRU1hcCBjb3VsZCBhbHNvIGltcGxlbWVudCBNYXAsIGxpa2UgT0VM aXN0Cj4+ICAgICBpbXBsZW1lbnRzIEl0ZXJhYmxlIChhbmQgbWlnaHQgaW1wbGVtZW50IExpc3Qp LiAKPj4gICAgIC0gSSBkb24ndCBsaWtlIHRoZSBuYW1lIE9FVmFycmllciwgaXQgZG9lc24ndCBt ZWFuIGFueXRoaW5nLgo+PiAgICAgTWF5YmUgT0VNYXRjaGVyIHdvdWxkIGJlIGJldHRlcj8KPj4g ICAgIC0gT0VCaW5kIG1pZ2h0IGJlIGNsZWFyZXIgYXMgT0VCaW5kaW5nLCBhcyBpdCBjb250YWlu cyBhIHNldCBvZgo+PiAgICAgYmluZGluZ3M/Cj4+ICAgICAtIEkgdGhpbmsgdGhlcmUgYXJlIHN0 aWxsIHNvbWUgbWVyZ2UgaXNzdWVzLCBsaWtlIGZvciBleGFtcGxlCj4+ICAgICBPRUxpc3Q6Mjk5 IHdoZXJlIHRoZSBjb21tZW50IGlzIGZyb20gdGhlIG9sZCBlcXVhbHMgbWV0aG9kCj4+Cj4+ICAg ICBiZXN0IHJlZ2FyZHMsCj4+ICAgICBWbGFkCj4+Cj4+Cj4+ICAgICBPbiBUdWUsIERlYyAzMCwg MjAxNCBhdCA5OjU2IFBNLCBEbWl0cml5IEthcmdhcG9sb3YKPj4gICAgIDxkbWl0cml5Lmthcmdh cG9sb3ZAZ21haWwuY29tCj4+ICAgICA8bWFpbHRvOmRtaXRyaXkua2FyZ2Fwb2xvdkBnbWFpbC5j b20+PiB3cm90ZToKPj4KPj4gICAgICAgICBUaGlzIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSBz aW1pbGFyIHRvIGZvbGxvd2luZyBDCj4+ICAgICAgICAgZnVuY3Rpb25zLCB3aGljaCBhcmUgcGFy dCBvZiBlcmxfaW50ZXJmYWNlIGFwcGxpY2F0aW9uOgo+PiAgICAgICAgIC0gRVRFUk0gKmVybF9m b3JtYXQoRm9ybWF0U3RyLCAuLi4pOwo+PiAgICAgICAgIC0gaW50IGVybF9tYXRjaChFVEVSTSAq UGF0dGVybiwgRVRFUk0gKlRlcm0pOwo+Pgo+PiAgICAgICAgIFRvIGFjaGV2ZSB0aGlzIG5ldyBj bGFzc2VzIGludHJvZHVjZWQ6Cj4+ICAgICAgICAgKiBPdHBFcmxhbmdWYXIgLSB2YXJpYWJsZSBw bGFjZWhvbGRlcjsKPj4gICAgICAgICAqIE90cEVybGFuZ0JpbmQgLSB2YXJpYWJsZSB2YWx1ZXMg Y29sbGVjdGlvbjsKPj4gICAgICAgICAqIE90cEVybGFuZ1BhcnNlciAtICJlcmxfZm9ybWF0IiBw YXJzZXIgaW1wbGVtZW50YXRpb247Cj4+ICAgICAgICAgKiBPdHBFcmxhbmdQYXR0ZXJuIC0gcGF0 dGVybiBhYnN0cmFjdGlvbiB3aXRoIG1hdGNoL2JpbmQKPj4gICAgICAgICBmdW5jdGlvbnM7Cj4+ Cj4+ICAgICAgICAgQ2xhc3NlcyByZXByZXNlbnRpbmcgY29tcG9zaXRlIG9iamVjdHMgT3RwRXJs YW5nTGlzdCwKPj4gICAgICAgICBPdHBFcmxhbmdUdXBsZSwgT3RwRXJsYW5nTWFwIGFuZCBuZXcg T3RwRXJsYW5nVmFyIGltcGxlbWVudAo+PiAgICAgICAgIGludGVyZmFjZSBPdHBFcmxhbmdWYXJy aWVyIGRlZmluaW5nIG1hdGNoIGFuZCBiaW5kIGZ1bmN0aW9ucwo+PiAgICAgICAgIGZvciB0aGVz ZSBvYmplY3RzLgo+Pgo+PiAgICAgICAgIENsYXNzIE90cEVybGFuZ01hcCByZXdvcmtlZCB0byBi ZSBiYXNlZCBvbiBIYXNoTWFwIGluc3RlYWQgb2YKPj4gICAgICAgICB0d28gc2VwYXJhdGUgbGlz dHMga2VlcGluZyBrZXlzIGFuZCB2YWx1ZXMuIFRoaXMgaXMgY2xvc2UgdG8KPj4gICAgICAgICBu YXRpdmUgc2VtYW50aWNzIG9mIG1hcHMgYW5kIG1ha2VzIGVhc2llciBpbXBsZW1lbnRpbmcgYmFz aWMKPj4gICAgICAgICBtYXAgbWFuaXB1bGF0aW9ucy4KPj4KPj4gICAgICAgICBJdCBhZGRpdGlv biB0byBPdHBFcmxhbmdCaW5kIGN1c3RvbSB1c2VyJ3MgY2xhc3MgbWF5IGJlIHVzZWQKPj4gICAg ICAgICBhcyByZWNlaXZlciBvZiBtYXRjaGVkIHZhcmlhYmxlcyB2YWx1ZXMuIEphdmEgcmVmbGVj dGlvbiBpcwo+PiAgICAgICAgIHVzZWQgdG8gcHJlcGFyZSB2YXJpYWJsZSB2YWx1ZSBzZXR0ZXJz IGR1cmluZyB0aGUgcGFyc2UKPj4gICAgICAgICBzdGFnZS4gSmF2YSBkb2MgaGFzIG1vcmUgZGV0 YWlscyBhbmQgZXhhbXBsZXMuIFRlc3QgY2FzZXMKPj4gICAgICAgICBpbXBsZW1lbnRlZC4KPj4K Pj4gICAgICAgICBnaXQgZmV0Y2ggaHR0cHM6Ly9naXRodWIuY29tL3gwaWQvb3RwLmdpdAo+PiAg ICAgICAgIGppbnRlcmZhY2VfcGF0dGVybl9tYXRjaGluZwo+Pgo+PiAgICAgICAgIFRoYW5rcy4K Pj4KPj4KPj4KPj4KPj4KPj4gICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+PiAgICAgICAgIGVybGFuZy1wYXRjaGVzIG1haWxpbmcgbGlzdAo+ PiAgICAgICAgIGVybGFuZy1wYXRjaGVzQGVybGFuZy5vcmcgPG1haWx0bzplcmxhbmctcGF0Y2hl c0Blcmxhbmcub3JnPgo+PiAgICAgICAgIGh0dHA6Ly9lcmxhbmcub3JnL21haWxtYW4vbGlzdGlu Zm8vZXJsYW5nLXBhdGNoZXMKPj4KPj4KPgo+CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZXJsYW5nLXBhdGNoZXMgbWFpbGluZyBsaXN0CmVybGFuZy1w YXRjaGVzQGVybGFuZy5vcmcKaHR0cDovL2VybGFuZy5vcmcvbWFpbG1hbi9saXN0aW5mby9lcmxh bmctcGF0Y2hlcwo=