1 line
No EOL
71 KiB
JSON
1 line
No EOL
71 KiB
JSON
{"description":"","name":"New Flow","id":"e32bf3bf-78bd-4b17-9984-09d9a090841c","data":{"nodes":[{"width":384,"height":265,"id":"dndnode_213","type":"genericNode","position":{"x":160.88681321552258,"y":85.60450902748329},"data":{"type":"TextLoader","node":{"template":{"file_path":{"required":true,"placeholder":"","show":true,"multiline":false,"value":"state-of-the-union.txt","suffixes":[".txt"],"password":false,"name":"file_path","advanced":false,"type":"file","list":false,"fileTypes":["txt"],"content":"data:text/plain;base64,TWFkYW0gU3BlYWtlciwgTWFkYW0gVmljZSBQcmVzaWRlbnQsIG91ciBGaXJzdCBMYWR5IGFuZCBTZWNvbmQgR2VudGxlbWFuLiBNZW1iZXJzIG9mIENvbmdyZXNzIGFuZCB0aGUgQ2FiaW5ldC4gSnVzdGljZXMgb2YgdGhlIFN1cHJlbWUgQ291cnQuIE15IGZlbGxvdyBBbWVyaWNhbnMuICAKCkxhc3QgeWVhciBDT1ZJRC0xOSBrZXB0IHVzIGFwYXJ0LiBUaGlzIHllYXIgd2UgYXJlIGZpbmFsbHkgdG9nZXRoZXIgYWdhaW4uIAoKVG9uaWdodCwgd2UgbWVldCBhcyBEZW1vY3JhdHMgUmVwdWJsaWNhbnMgYW5kIEluZGVwZW5kZW50cy4gQnV0IG1vc3QgaW1wb3J0YW50bHkgYXMgQW1lcmljYW5zLiAKCldpdGggYSBkdXR5IHRvIG9uZSBhbm90aGVyIHRvIHRoZSBBbWVyaWNhbiBwZW9wbGUgdG8gdGhlIENvbnN0aXR1dGlvbi4gCgpBbmQgd2l0aCBhbiB1bndhdmVyaW5nIHJlc29sdmUgdGhhdCBmcmVlZG9tIHdpbGwgYWx3YXlzIHRyaXVtcGggb3ZlciB0eXJhbm55LiAKClNpeCBkYXlzIGFnbywgUnVzc2lh4oCZcyBWbGFkaW1pciBQdXRpbiBzb3VnaHQgdG8gc2hha2UgdGhlIGZvdW5kYXRpb25zIG9mIHRoZSBmcmVlIHdvcmxkIHRoaW5raW5nIGhlIGNvdWxkIG1ha2UgaXQgYmVuZCB0byBoaXMgbWVuYWNpbmcgd2F5cy4gQnV0IGhlIGJhZGx5IG1pc2NhbGN1bGF0ZWQuIAoKSGUgdGhvdWdodCBoZSBjb3VsZCByb2xsIGludG8gVWtyYWluZSBhbmQgdGhlIHdvcmxkIHdvdWxkIHJvbGwgb3Zlci4gSW5zdGVhZCBoZSBtZXQgYSB3YWxsIG9mIHN0cmVuZ3RoIGhlIG5ldmVyIGltYWdpbmVkLiAKCkhlIG1ldCB0aGUgVWtyYWluaWFuIHBlb3BsZS4gCgpGcm9tIFByZXNpZGVudCBaZWxlbnNreXkgdG8gZXZlcnkgVWtyYWluaWFuLCB0aGVpciBmZWFybGVzc25lc3MsIHRoZWlyIGNvdXJhZ2UsIHRoZWlyIGRldGVybWluYXRpb24sIGluc3BpcmVzIHRoZSB3b3JsZC4gCgpHcm91cHMgb2YgY2l0aXplbnMgYmxvY2tpbmcgdGFua3Mgd2l0aCB0aGVpciBib2RpZXMuIEV2ZXJ5b25lIGZyb20gc3R1ZGVudHMgdG8gcmV0aXJlZXMgdGVhY2hlcnMgdHVybmVkIHNvbGRpZXJzIGRlZmVuZGluZyB0aGVpciBob21lbGFuZC4gCgpJbiB0aGlzIHN0cnVnZ2xlIGFzIFByZXNpZGVudCBaZWxlbnNreXkgc2FpZCBpbiBoaXMgc3BlZWNoIHRvIHRoZSBFdXJvcGVhbiBQYXJsaWFtZW50IOKAnExpZ2h0IHdpbGwgd2luIG92ZXIgZGFya25lc3Mu4oCdIFRoZSBVa3JhaW5pYW4gQW1iYXNzYWRvciB0byB0aGUgVW5pdGVkIFN0YXRlcyBpcyBoZXJlIHRvbmlnaHQuIAoKTGV0IGVhY2ggb2YgdXMgaGVyZSB0b25pZ2h0IGluIHRoaXMgQ2hhbWJlciBzZW5kIGFuIHVubWlzdGFrYWJsZSBzaWduYWwgdG8gVWtyYWluZSBhbmQgdG8gdGhlIHdvcmxkLiAKClBsZWFzZSByaXNlIGlmIHlvdSBhcmUgYWJsZSBhbmQgc2hvdyB0aGF0LCBZZXMsIHdlIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2Egc3RhbmQgd2l0aCB0aGUgVWtyYWluaWFuIHBlb3BsZS4gCgpUaHJvdWdob3V0IG91ciBoaXN0b3J5IHdl4oCZdmUgbGVhcm5lZCB0aGlzIGxlc3NvbiB3aGVuIGRpY3RhdG9ycyBkbyBub3QgcGF5IGEgcHJpY2UgZm9yIHRoZWlyIGFnZ3Jlc3Npb24gdGhleSBjYXVzZSBtb3JlIGNoYW9zLiAgIAoKVGhleSBrZWVwIG1vdmluZy4gICAKCkFuZCB0aGUgY29zdHMgYW5kIHRoZSB0aHJlYXRzIHRvIEFtZXJpY2EgYW5kIHRoZSB3b3JsZCBrZWVwIHJpc2luZy4gICAKClRoYXTigJlzIHdoeSB0aGUgTkFUTyBBbGxpYW5jZSB3YXMgY3JlYXRlZCB0byBzZWN1cmUgcGVhY2UgYW5kIHN0YWJpbGl0eSBpbiBFdXJvcGUgYWZ0ZXIgV29ybGQgV2FyIDIuIAoKVGhlIFVuaXRlZCBTdGF0ZXMgaXMgYSBtZW1iZXIgYWxvbmcgd2l0aCAyOSBvdGhlciBuYXRpb25zLiAKCkl0IG1hdHRlcnMuIEFtZXJpY2FuIGRpcGxvbWFjeSBtYXR0ZXJzLiBBbWVyaWNhbiByZXNvbHZlIG1hdHRlcnMuIAoKUHV0aW7igJlzIGxhdGVzdCBhdHRhY2sgb24gVWtyYWluZSB3YXMgcHJlbWVkaXRhdGVkIGFuZCB1bnByb3Zva2VkLiAKCkhlIHJlamVjdGVkIHJlcGVhdGVkIGVmZm9ydHMgYXQgZGlwbG9tYWN5LiAKCkhlIHRob3VnaHQgdGhlIFdlc3QgYW5kIE5BVE8gd291bGRu4oCZdCByZXNwb25kLiBBbmQgaGUgdGhvdWdodCBoZSBjb3VsZCBkaXZpZGUgdXMgYXQgaG9tZS4gUHV0aW4gd2FzIHdyb25nLiBXZSB3ZXJlIHJlYWR5LiAgSGVyZSBpcyB3aGF0IHdlIGRpZC4gICAKCldlIHByZXBhcmVkIGV4dGVuc2l2ZWx5IGFuZCBjYXJlZnVsbHkuIAoKV2Ugc3BlbnQgbW9udGhzIGJ1aWxkaW5nIGEgY29hbGl0aW9uIG9mIG90aGVyIGZyZWVkb20tbG92aW5nIG5hdGlvbnMgZnJvbSBFdXJvcGUgYW5kIHRoZSBBbWVyaWNhcyB0byBBc2lhIGFuZCBBZnJpY2EgdG8gY29uZnJvbnQgUHV0aW4uIAoKSSBzcGVudCBjb3VudGxlc3MgaG91cnMgdW5pZnlpbmcgb3VyIEV1cm9wZWFuIGFsbGllcy4gV2Ugc2hhcmVkIHdpdGggdGhlIHdvcmxkIGluIGFkdmFuY2Ugd2hhdCB3ZSBrbmV3IFB1dGluIHdhcyBwbGFubmluZyBhbmQgcHJlY2lzZWx5IGhvdyBoZSB3b3VsZCB0cnkgdG8gZmFsc2VseSBqdXN0aWZ5IGhpcyBhZ2dyZXNzaW9uLiAgCgpXZSBjb3VudGVyZWQgUnVzc2lh4oCZcyBsaWVzIHdpdGggdHJ1dGguICAgCgpBbmQgbm93IHRoYXQgaGUgaGFzIGFjdGVkIHRoZSBmcmVlIHdvcmxkIGlzIGhvbGRpbmcgaGltIGFjY291bnRhYmxlLiAKCkFsb25nIHdpdGggdHdlbnR5LXNldmVuIG1lbWJlcnMgb2YgdGhlIEV1cm9wZWFuIFVuaW9uIGluY2x1ZGluZyBGcmFuY2UsIEdlcm1hbnksIEl0YWx5LCBhcyB3ZWxsIGFzIGNvdW50cmllcyBsaWtlIHRoZSBVbml0ZWQgS2luZ2RvbSwgQ2FuYWRhLCBKYXBhbiwgS29yZWEsIEF1c3RyYWxpYSwgTmV3IFplYWxhbmQsIGFuZCBtYW55IG90aGVycywgZXZlbiBTd2l0emVybGFuZC4gCgpXZSBhcmUgaW5mbGljdGluZyBwYWluIG9uIFJ1c3NpYSBhbmQgc3VwcG9ydGluZyB0aGUgcGVvcGxlIG9mIFVrcmFpbmUuIFB1dGluIGlzIG5vdyBpc29sYXRlZCBmcm9tIHRoZSB3b3JsZCBtb3JlIHRoYW4gZXZlci4gCgpUb2dldGhlciB3aXRoIG91ciBhbGxpZXMg4oCTd2UgYXJlIHJpZ2h0IG5vdyBlbmZvcmNpbmcgcG93ZXJmdWwgZWNvbm9taWMgc2FuY3Rpb25zLiAKCldlIGFyZSBjdXR0aW5nIG9mZiBSdXNzaWHigJlzIGxhcmdlc3QgYmFua3MgZnJvbSB0aGUgaW50ZXJuYXRpb25hbCBmaW5hbmNpYWwgc3lzdGVtLiAgCgpQcmV2ZW50aW5nIFJ1c3NpYeKAmXMgY2VudHJhbCBiYW5rIGZyb20gZGVmZW5kaW5nIHRoZSBSdXNzaWFuIFJ1YmxlIG1ha2luZyBQdXRpbuKAmXMgJDYzMCBCaWxsaW9uIOKAnHdhciBmdW5k4oCdIHdvcnRobGVzcy4gICAKCldlIGFyZSBjaG9raW5nIG9mZiBSdXNzaWHigJlzIGFjY2VzcyB0byB0ZWNobm9sb2d5IHRoYXQgd2lsbCBzYXAgaXRzIGVjb25vbWljIHN0cmVuZ3RoIGFuZCB3ZWFrZW4gaXRzIG1pbGl0YXJ5IGZvciB5ZWFycyB0byBjb21lLiAgCgpUb25pZ2h0IEkgc2F5IHRvIHRoZSBSdXNzaWFuIG9saWdhcmNocyBhbmQgY29ycnVwdCBsZWFkZXJzIHdobyBoYXZlIGJpbGtlZCBiaWxsaW9ucyBvZiBkb2xsYXJzIG9mZiB0aGlzIHZpb2xlbnQgcmVnaW1lIG5vIG1vcmUuIAoKVGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBKdXN0aWNlIGlzIGFzc2VtYmxpbmcgYSBkZWRpY2F0ZWQgdGFzayBmb3JjZSB0byBnbyBhZnRlciB0aGUgY3JpbWVzIG9mIFJ1c3NpYW4gb2xpZ2FyY2hzLiAgCgpXZSBhcmUgam9pbmluZyB3aXRoIG91ciBFdXJvcGVhbiBhbGxpZXMgdG8gZmluZCBhbmQgc2VpemUgeW91ciB5YWNodHMgeW91ciBsdXh1cnkgYXBhcnRtZW50cyB5b3VyIHByaXZhdGUgamV0cy4gV2UgYXJlIGNvbWluZyBmb3IgeW91ciBpbGwtYmVnb3R0ZW4gZ2FpbnMuIAoKQW5kIHRvbmlnaHQgSSBhbSBhbm5vdW5jaW5nIHRoYXQgd2Ugd2lsbCBqb2luIG91ciBhbGxpZXMgaW4gY2xvc2luZyBvZmYgQW1lcmljYW4gYWlyIHNwYWNlIHRvIGFsbCBSdXNzaWFuIGZsaWdodHMg4oCTIGZ1cnRoZXIgaXNvbGF0aW5nIFJ1c3NpYSDigJMgYW5kIGFkZGluZyBhbiBhZGRpdGlvbmFsIHNxdWVlemUg4oCTb24gdGhlaXIgZWNvbm9teS4gVGhlIFJ1YmxlIGhhcyBsb3N0IDMwJSBvZiBpdHMgdmFsdWUuIAoKVGhlIFJ1c3NpYW4gc3RvY2sgbWFya2V0IGhhcyBsb3N0IDQwJSBvZiBpdHMgdmFsdWUgYW5kIHRyYWRpbmcgcmVtYWlucyBzdXNwZW5kZWQuIFJ1c3NpYeKAmXMgZWNvbm9teSBpcyByZWVsaW5nIGFuZCBQdXRpbiBhbG9uZSBpcyB0byBibGFtZS4gCgpUb2dldGhlciB3aXRoIG91ciBhbGxpZXMgd2UgYXJlIHByb3ZpZGluZyBzdXBwb3J0IHRvIHRoZSBVa3JhaW5pYW5zIGluIHRoZWlyIGZpZ2h0IGZvciBmcmVlZG9tLiBNaWxpdGFyeSBhc3Npc3RhbmNlLiBFY29ub21pYyBhc3Npc3RhbmNlLiBIdW1hbml0YXJpYW4gYXNzaXN0YW5jZS4gCgpXZSBhcmUgZ2l2aW5nIG1vcmUgdGhhbiAkMSBCaWxsaW9uIGluIGRpcmVjdCBhc3Npc3RhbmNlIHRvIFVrcmFpbmUuIAoKQW5kIHdlIHdpbGwgY29udGludWUgdG8gYWlkIHRoZSBVa3JhaW5pYW4gcGVvcGxlIGFzIHRoZXkgZGVmZW5kIHRoZWlyIGNvdW50cnkgYW5kIHRvIGhlbHAgZWFzZSB0aGVpciBzdWZmZXJpbmcuICAKCkxldCBtZSBiZSBjbGVhciwgb3VyIGZvcmNlcyBhcmUgbm90IGVuZ2FnZWQgYW5kIHdpbGwgbm90IGVuZ2FnZSBpbiBjb25mbGljdCB3aXRoIFJ1c3NpYW4gZm9yY2VzIGluIFVrcmFpbmUuICAKCk91ciBmb3JjZXMgYXJlIG5vdCBnb2luZyB0byBFdXJvcGUgdG8gZmlnaHQgaW4gVWtyYWluZSwgYnV0IHRvIGRlZmVuZCBvdXIgTkFUTyBBbGxpZXMg4oCTIGluIHRoZSBldmVudCB0aGF0IFB1dGluIGRlY2lkZXMgdG8ga2VlcCBtb3Zpbmcgd2VzdC4gIAoKRm9yIHRoYXQgcHVycG9zZSB3ZeKAmXZlIG1vYmlsaXplZCBBbWVyaWNhbiBncm91bmQgZm9yY2VzLCBhaXIgc3F1YWRyb25zLCBhbmQgc2hpcCBkZXBsb3ltZW50cyB0byBwcm90ZWN0IE5BVE8gY291bnRyaWVzIGluY2x1ZGluZyBQb2xhbmQsIFJvbWFuaWEsIExhdHZpYSwgTGl0aHVhbmlhLCBhbmQgRXN0b25pYS4gCgpBcyBJIGhhdmUgbWFkZSBjcnlzdGFsIGNsZWFyIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBvdXIgQWxsaWVzIHdpbGwgZGVmZW5kIGV2ZXJ5IGluY2ggb2YgdGVycml0b3J5IG9mIE5BVE8gY291bnRyaWVzIHdpdGggdGhlIGZ1bGwgZm9yY2Ugb2Ygb3VyIGNvbGxlY3RpdmUgcG93ZXIuICAKCkFuZCB3ZSByZW1haW4gY2xlYXItZXllZC4gVGhlIFVrcmFpbmlhbnMgYXJlIGZpZ2h0aW5nIGJhY2sgd2l0aCBwdXJlIGNvdXJhZ2UuIEJ1dCB0aGUgbmV4dCBmZXcgZGF5cyB3ZWVrcywgbW9udGhzLCB3aWxsIGJlIGhhcmQgb24gdGhlbS4gIAoKUHV0aW4gaGFzIHVubGVhc2hlZCB2aW9sZW5jZSBhbmQgY2hhb3MuICBCdXQgd2hpbGUgaGUgbWF5IG1ha2UgZ2FpbnMgb24gdGhlIGJhdHRsZWZpZWxkIOKAkyBoZSB3aWxsIHBheSBhIGNvbnRpbnVpbmcgaGlnaCBwcmljZSBvdmVyIHRoZSBsb25nIHJ1bi4gCgpBbmQgYSBwcm91ZCBVa3JhaW5pYW4gcGVvcGxlLCB3aG8gaGF2ZSBrbm93biAzMCB5ZWFycyAgb2YgaW5kZXBlbmRlbmNlLCBoYXZlIHJlcGVhdGVkbHkgc2hvd24gdGhhdCB0aGV5IHdpbGwgbm90IHRvbGVyYXRlIGFueW9uZSB3aG8gdHJpZXMgdG8gdGFrZSB0aGVpciBjb3VudHJ5IGJhY2t3YXJkcy4gIAoKVG8gYWxsIEFtZXJpY2FucywgSSB3aWxsIGJlIGhvbmVzdCB3aXRoIHlvdSwgYXMgSeKAmXZlIGFsd2F5cyBwcm9taXNlZC4gQSBSdXNzaWFuIGRpY3RhdG9yLCBpbnZhZGluZyBhIGZvcmVpZ24gY291bnRyeSwgaGFzIGNvc3RzIGFyb3VuZCB0aGUgd29ybGQuIAoKQW5kIEnigJltIHRha2luZyByb2J1c3QgYWN0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgcGFpbiBvZiBvdXIgc2FuY3Rpb25zICBpcyB0YXJnZXRlZCBhdCBSdXNzaWHigJlzIGVjb25vbXkuIEFuZCBJIHdpbGwgdXNlIGV2ZXJ5IHRvb2wgYXQgb3VyIGRpc3Bvc2FsIHRvIHByb3RlY3QgQW1lcmljYW4gYnVzaW5lc3NlcyBhbmQgY29uc3VtZXJzLiAKClRvbmlnaHQsIEkgY2FuIGFubm91bmNlIHRoYXQgdGhlIFVuaXRlZCBTdGF0ZXMgaGFzIHdvcmtlZCB3aXRoIDMwIG90aGVyIGNvdW50cmllcyB0byByZWxlYXNlIDYwIE1pbGxpb24gYmFycmVscyBvZiBvaWwgZnJvbSByZXNlcnZlcyBhcm91bmQgdGhlIHdvcmxkLiAgCgpBbWVyaWNhIHdpbGwgbGVhZCB0aGF0IGVmZm9ydCwgcmVsZWFzaW5nIDMwIE1pbGxpb24gYmFycmVscyBmcm9tIG91ciBvd24gU3RyYXRlZ2ljIFBldHJvbGV1bSBSZXNlcnZlLiBBbmQgd2Ugc3RhbmQgcmVhZHkgdG8gZG8gbW9yZSBpZiBuZWNlc3NhcnksIHVuaWZpZWQgd2l0aCBvdXIgYWxsaWVzLiAgCgpUaGVzZSBzdGVwcyB3aWxsIGhlbHAgYmx1bnQgZ2FzIHByaWNlcyBoZXJlIGF0IGhvbWUuIEFuZCBJIGtub3cgdGhlIG5ld3MgYWJvdXQgd2hhdOKAmXMgaGFwcGVuaW5nIGNhbiBzZWVtIGFsYXJtaW5nLiAKCkJ1dCBJIHdhbnQgeW91IHRvIGtub3cgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gYmUgb2theS4gCgpXaGVuIHRoZSBoaXN0b3J5IG9mIHRoaXMgZXJhIGlzIHdyaXR0ZW4gUHV0aW7igJlzIHdhciBvbiBVa3JhaW5lIHdpbGwgaGF2ZSBsZWZ0IFJ1c3NpYSB3ZWFrZXIgYW5kIHRoZSByZXN0IG9mIHRoZSB3b3JsZCBzdHJvbmdlci4gCgpXaGlsZSBpdCBzaG91bGRu4oCZdCBoYXZlIHRha2VuIHNvbWV0aGluZyBzbyB0ZXJyaWJsZSBmb3IgcGVvcGxlIGFyb3VuZCB0aGUgd29ybGQgdG8gc2VlIHdoYXTigJlzIGF0IHN0YWtlIG5vdyBldmVyeW9uZSBzZWVzIGl0IGNsZWFybHkuIAoKV2Ugc2VlIHRoZSB1bml0eSBhbW9uZyBsZWFkZXJzIG9mIG5hdGlvbnMgYW5kIGEgbW9yZSB1bmlmaWVkIEV1cm9wZSBhIG1vcmUgdW5pZmllZCBXZXN0LiBBbmQgd2Ugc2VlIHVuaXR5IGFtb25nIHRoZSBwZW9wbGUgd2hvIGFyZSBnYXRoZXJpbmcgaW4gY2l0aWVzIGluIGxhcmdlIGNyb3dkcyBhcm91bmQgdGhlIHdvcmxkIGV2ZW4gaW4gUnVzc2lhIHRvIGRlbW9uc3RyYXRlIHRoZWlyIHN1cHBvcnQgZm9yIFVrcmFpbmUuICAKCkluIHRoZSBiYXR0bGUgYmV0d2VlbiBkZW1vY3JhY3kgYW5kIGF1dG9jcmFjeSwgZGVtb2NyYWNpZXMgYXJlIHJpc2luZyB0byB0aGUgbW9tZW50LCBhbmQgdGhlIHdvcmxkIGlzIGNsZWFybHkgY2hvb3NpbmcgdGhlIHNpZGUgb2YgcGVhY2UgYW5kIHNlY3VyaXR5LiAKClRoaXMgaXMgYSByZWFsIHRlc3QuIEl04oCZcyBnb2luZyB0byB0YWtlIHRpbWUuIFNvIGxldCB1cyBjb250aW51ZSB0byBkcmF3IGluc3BpcmF0aW9uIGZyb20gdGhlIGlyb24gd2lsbCBvZiB0aGUgVWtyYWluaWFuIHBlb3BsZS4gCgpUbyBvdXIgZmVsbG93IFVrcmFpbmlhbiBBbWVyaWNhbnMgd2hvIGZvcmdlIGEgZGVlcCBib25kIHRoYXQgY29ubmVjdHMgb3VyIHR3byBuYXRpb25zIHdlIHN0YW5kIHdpdGggeW91LiAKClB1dGluIG1heSBjaXJjbGUgS3lpdiB3aXRoIHRhbmtzLCBidXQgaGUgd2lsbCBuZXZlciBnYWluIHRoZSBoZWFydHMgYW5kIHNvdWxzIG9mIHRoZSBVa3JhaW5pYW4gcGVvcGxlLiAKCkhlIHdpbGwgbmV2ZXIgZXh0aW5ndWlzaCB0aGVpciBsb3ZlIG9mIGZyZWVkb20uIEhlIHdpbGwgbmV2ZXIgd2Vha2VuIHRoZSByZXNvbHZlIG9mIHRoZSBmcmVlIHdvcmxkLiAKCldlIG1lZXQgdG9uaWdodCBpbiBhbiBBbWVyaWNhIHRoYXQgaGFzIGxpdmVkIHRocm91Z2ggdHdvIG9mIHRoZSBoYXJkZXN0IHllYXJzIHRoaXMgbmF0aW9uIGhhcyBldmVyIGZhY2VkLiAKClRoZSBwYW5kZW1pYyBoYXMgYmVlbiBwdW5pc2hpbmcuIAoKQW5kIHNvIG1hbnkgZmFtaWxpZXMgYXJlIGxpdmluZyBwYXljaGVjayB0byBwYXljaGVjaywgc3RydWdnbGluZyB0byBrZWVwIHVwIHdpdGggdGhlIHJpc2luZyBjb3N0IG9mIGZvb2QsIGdhcywgaG91c2luZywgYW5kIHNvIG11Y2ggbW9yZS4gCgpJIHVuZGVyc3RhbmQuIAoKSSByZW1lbWJlciB3aGVuIG15IERhZCBoYWQgdG8gbGVhdmUgb3VyIGhvbWUgaW4gU2NyYW50b24sIFBlbm5zeWx2YW5pYSB0byBmaW5kIHdvcmsuIEkgZ3JldyB1cCBpbiBhIGZhbWlseSB3aGVyZSBpZiB0aGUgcHJpY2Ugb2YgZm9vZCB3ZW50IHVwLCB5b3UgZmVsdCBpdC4gCgpUaGF04oCZcyB3aHkgb25lIG9mIHRoZSBmaXJzdCB0aGluZ3MgSSBkaWQgYXMgUHJlc2lkZW50IHdhcyBmaWdodCB0byBwYXNzIHRoZSBBbWVyaWNhbiBSZXNjdWUgUGxhbi4gIAoKQmVjYXVzZSBwZW9wbGUgd2VyZSBodXJ0aW5nLiBXZSBuZWVkZWQgdG8gYWN0LCBhbmQgd2UgZGlkLiAKCkZldyBwaWVjZXMgb2YgbGVnaXNsYXRpb24gaGF2ZSBkb25lIG1vcmUgaW4gYSBjcml0aWNhbCBtb21lbnQgaW4gb3VyIGhpc3RvcnkgdG8gbGlmdCB1cyBvdXQgb2YgY3Jpc2lzLiAKCkl0IGZ1ZWxlZCBvdXIgZWZmb3J0cyB0byB2YWNjaW5hdGUgdGhlIG5hdGlvbiBhbmQgY29tYmF0IENPVklELTE5LiBJdCBkZWxpdmVyZWQgaW1tZWRpYXRlIGVjb25vbWljIHJlbGllZiBmb3IgdGVucyBvZiBtaWxsaW9ucyBvZiBBbWVyaWNhbnMuICAKCkhlbHBlZCBwdXQgZm9vZCBvbiB0aGVpciB0YWJsZSwga2VlcCBhIHJvb2Ygb3ZlciB0aGVpciBoZWFkcywgYW5kIGN1dCB0aGUgY29zdCBvZiBoZWFsdGggaW5zdXJhbmNlLiAKCkFuZCBhcyBteSBEYWQgdXNlZCB0byBzYXksIGl0IGdhdmUgcGVvcGxlIGEgbGl0dGxlIGJyZWF0aGluZyByb29tLiAKCkFuZCB1bmxpa2UgdGhlICQyIFRyaWxsaW9uIHRheCBjdXQgcGFzc2VkIGluIHRoZSBwcmV2aW91cyBhZG1pbmlzdHJhdGlvbiB0aGF0IGJlbmVmaXR0ZWQgdGhlIHRvcCAxJSBvZiBBbWVyaWNhbnMsIHRoZSBBbWVyaWNhbiBSZXNjdWUgUGxhbiBoZWxwZWQgd29ya2luZyBwZW9wbGXigJRhbmQgbGVmdCBubyBvbmUgYmVoaW5kLiAKCkFuZCBpdCB3b3JrZWQuIEl0IGNyZWF0ZWQgam9icy4gTG90cyBvZiBqb2JzLiAKCkluIGZhY3TigJRvdXIgZWNvbm9teSBjcmVhdGVkIG92ZXIgNi41IE1pbGxpb24gbmV3IGpvYnMganVzdCBsYXN0IHllYXIsIG1vcmUgam9icyBjcmVhdGVkIGluIG9uZSB5ZWFyICAKdGhhbiBldmVyIGJlZm9yZSBpbiB0aGUgaGlzdG9yeSBvZiBBbWVyaWNhLiAKCk91ciBlY29ub215IGdyZXcgYXQgYSByYXRlIG9mIDUuNyUgbGFzdCB5ZWFyLCB0aGUgc3Ryb25nZXN0IGdyb3d0aCBpbiBuZWFybHkgNDAgeWVhcnMsIHRoZSBmaXJzdCBzdGVwIGluIGJyaW5naW5nIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBhbiBlY29ub215IHRoYXQgaGFzbuKAmXQgd29ya2VkIGZvciB0aGUgd29ya2luZyBwZW9wbGUgb2YgdGhpcyBuYXRpb24gZm9yIHRvbyBsb25nLiAgCgpGb3IgdGhlIHBhc3QgNDAgeWVhcnMgd2Ugd2VyZSB0b2xkIHRoYXQgaWYgd2UgZ2F2ZSB0YXggYnJlYWtzIHRvIHRob3NlIGF0IHRoZSB2ZXJ5IHRvcCwgdGhlIGJlbmVmaXRzIHdvdWxkIHRyaWNrbGUgZG93biB0byBldmVyeW9uZSBlbHNlLiAKCkJ1dCB0aGF0IHRyaWNrbGUtZG93biB0aGVvcnkgbGVkIHRvIHdlYWtlciBlY29ub21pYyBncm93dGgsIGxvd2VyIHdhZ2VzLCBiaWdnZXIgZGVmaWNpdHMsIGFuZCB0aGUgd2lkZXN0IGdhcCBiZXR3ZWVuIHRob3NlIGF0IHRoZSB0b3AgYW5kIGV2ZXJ5b25lIGVsc2UgaW4gbmVhcmx5IGEgY2VudHVyeS4gCgpWaWNlIFByZXNpZGVudCBIYXJyaXMgYW5kIEkgcmFuIGZvciBvZmZpY2Ugd2l0aCBhIG5ldyBlY29ub21pYyB2aXNpb24gZm9yIEFtZXJpY2EuIAoKSW52ZXN0IGluIEFtZXJpY2EuIEVkdWNhdGUgQW1lcmljYW5zLiBHcm93IHRoZSB3b3JrZm9yY2UuIEJ1aWxkIHRoZSBlY29ub215IGZyb20gdGhlIGJvdHRvbSB1cCAgCmFuZCB0aGUgbWlkZGxlIG91dCwgbm90IGZyb20gdGhlIHRvcCBkb3duLiAgCgpCZWNhdXNlIHdlIGtub3cgdGhhdCB3aGVuIHRoZSBtaWRkbGUgY2xhc3MgZ3Jvd3MsIHRoZSBwb29yIGhhdmUgYSBsYWRkZXIgdXAgYW5kIHRoZSB3ZWFsdGh5IGRvIHZlcnkgd2VsbC4gCgpBbWVyaWNhIHVzZWQgdG8gaGF2ZSB0aGUgYmVzdCByb2FkcywgYnJpZGdlcywgYW5kIGFpcnBvcnRzIG9uIEVhcnRoLiAKCk5vdyBvdXIgaW5mcmFzdHJ1Y3R1cmUgaXMgcmFua2VkIDEzdGggaW4gdGhlIHdvcmxkLiAKCldlIHdvbuKAmXQgYmUgYWJsZSB0byBjb21wZXRlIGZvciB0aGUgam9icyBvZiB0aGUgMjFzdCBDZW50dXJ5IGlmIHdlIGRvbuKAmXQgZml4IHRoYXQuIAoKVGhhdOKAmXMgd2h5IGl0IHdhcyBzbyBpbXBvcnRhbnQgdG8gcGFzcyB0aGUgQmlwYXJ0aXNhbiBJbmZyYXN0cnVjdHVyZSBMYXfigJR0aGUgbW9zdCBzd2VlcGluZyBpbnZlc3RtZW50IHRvIHJlYnVpbGQgQW1lcmljYSBpbiBoaXN0b3J5LiAKClRoaXMgd2FzIGEgYmlwYXJ0aXNhbiBlZmZvcnQsIGFuZCBJIHdhbnQgdG8gdGhhbmsgdGhlIG1lbWJlcnMgb2YgYm90aCBwYXJ0aWVzIHdobyB3b3JrZWQgdG8gbWFrZSBpdCBoYXBwZW4uIAoKV2XigJlyZSBkb25lIHRhbGtpbmcgYWJvdXQgaW5mcmFzdHJ1Y3R1cmUgd2Vla3MuIAoKV2XigJlyZSBnb2luZyB0byBoYXZlIGFuIGluZnJhc3RydWN0dXJlIGRlY2FkZS4gCgpJdCBpcyBnb2luZyB0byB0cmFuc2Zvcm0gQW1lcmljYSBhbmQgcHV0IHVzIG9uIGEgcGF0aCB0byB3aW4gdGhlIGVjb25vbWljIGNvbXBldGl0aW9uIG9mIHRoZSAyMXN0IENlbnR1cnkgdGhhdCB3ZSBmYWNlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHdvcmxk4oCUcGFydGljdWxhcmx5IHdpdGggQ2hpbmEuICAKCkFzIEnigJl2ZSB0b2xkIFhpIEppbnBpbmcsIGl0IGlzIG5ldmVyIGEgZ29vZCBiZXQgdG8gYmV0IGFnYWluc3QgdGhlIEFtZXJpY2FuIHBlb3BsZS4gCgpXZeKAmWxsIGNyZWF0ZSBnb29kIGpvYnMgZm9yIG1pbGxpb25zIG9mIEFtZXJpY2FucywgbW9kZXJuaXppbmcgcm9hZHMsIGFpcnBvcnRzLCBwb3J0cywgYW5kIHdhdGVyd2F5cyBhbGwgYWNyb3NzIEFtZXJpY2EuIAoKQW5kIHdl4oCZbGwgZG8gaXQgYWxsIHRvIHdpdGhzdGFuZCB0aGUgZGV2YXN0YXRpbmcgZWZmZWN0cyBvZiB0aGUgY2xpbWF0ZSBjcmlzaXMgYW5kIHByb21vdGUgZW52aXJvbm1lbnRhbCBqdXN0aWNlLiAKCldl4oCZbGwgYnVpbGQgYSBuYXRpb25hbCBuZXR3b3JrIG9mIDUwMCwwMDAgZWxlY3RyaWMgdmVoaWNsZSBjaGFyZ2luZyBzdGF0aW9ucywgYmVnaW4gdG8gcmVwbGFjZSBwb2lzb25vdXMgbGVhZCBwaXBlc+KAlHNvIGV2ZXJ5IGNoaWxk4oCUYW5kIGV2ZXJ5IEFtZXJpY2Fu4oCUaGFzIGNsZWFuIHdhdGVyIHRvIGRyaW5rIGF0IGhvbWUgYW5kIGF0IHNjaG9vbCwgcHJvdmlkZSBhZmZvcmRhYmxlIGhpZ2gtc3BlZWQgaW50ZXJuZXQgZm9yIGV2ZXJ5IEFtZXJpY2Fu4oCUdXJiYW4sIHN1YnVyYmFuLCBydXJhbCwgYW5kIHRyaWJhbCBjb21tdW5pdGllcy4gCgo0LDAwMCBwcm9qZWN0cyBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQuIAoKQW5kIHRvbmlnaHQsIEnigJltIGFubm91bmNpbmcgdGhhdCB0aGlzIHllYXIgd2Ugd2lsbCBzdGFydCBmaXhpbmcgb3ZlciA2NSwwMDAgbWlsZXMgb2YgaGlnaHdheSBhbmQgMSw1MDAgYnJpZGdlcyBpbiBkaXNyZXBhaXIuIAoKV2hlbiB3ZSB1c2UgdGF4cGF5ZXIgZG9sbGFycyB0byByZWJ1aWxkIEFtZXJpY2Eg4oCTIHdlIGFyZSBnb2luZyB0byBCdXkgQW1lcmljYW46IGJ1eSBBbWVyaWNhbiBwcm9kdWN0cyB0byBzdXBwb3J0IEFtZXJpY2FuIGpvYnMuIAoKVGhlIGZlZGVyYWwgZ292ZXJubWVudCBzcGVuZHMgYWJvdXQgJDYwMCBCaWxsaW9uIGEgeWVhciB0byBrZWVwIHRoZSBjb3VudHJ5IHNhZmUgYW5kIHNlY3VyZS4gCgpUaGVyZeKAmXMgYmVlbiBhIGxhdyBvbiB0aGUgYm9va3MgZm9yIGFsbW9zdCBhIGNlbnR1cnkgCnRvIG1ha2Ugc3VyZSB0YXhwYXllcnPigJkgZG9sbGFycyBzdXBwb3J0IEFtZXJpY2FuIGpvYnMgYW5kIGJ1c2luZXNzZXMuIAoKRXZlcnkgQWRtaW5pc3RyYXRpb24gc2F5cyB0aGV54oCZbGwgZG8gaXQsIGJ1dCB3ZSBhcmUgYWN0dWFsbHkgZG9pbmcgaXQuIAoKV2Ugd2lsbCBidXkgQW1lcmljYW4gdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgZGVjayBvZiBhbiBhaXJjcmFmdCBjYXJyaWVyIHRvIHRoZSBzdGVlbCBvbiBoaWdod2F5IGd1YXJkcmFpbHMgYXJlIG1hZGUgaW4gQW1lcmljYS4gCgpCdXQgdG8gY29tcGV0ZSBmb3IgdGhlIGJlc3Qgam9icyBvZiB0aGUgZnV0dXJlLCB3ZSBhbHNvIG5lZWQgdG8gbGV2ZWwgdGhlIHBsYXlpbmcgZmllbGQgd2l0aCBDaGluYSBhbmQgb3RoZXIgY29tcGV0aXRvcnMuIAoKVGhhdOKAmXMgd2h5IGl0IGlzIHNvIGltcG9ydGFudCB0byBwYXNzIHRoZSBCaXBhcnRpc2FuIElubm92YXRpb24gQWN0IHNpdHRpbmcgaW4gQ29uZ3Jlc3MgdGhhdCB3aWxsIG1ha2UgcmVjb3JkIGludmVzdG1lbnRzIGluIGVtZXJnaW5nIHRlY2hub2xvZ2llcyBhbmQgQW1lcmljYW4gbWFudWZhY3R1cmluZy4gCgpMZXQgbWUgZ2l2ZSB5b3Ugb25lIGV4YW1wbGUgb2Ygd2h5IGl04oCZcyBzbyBpbXBvcnRhbnQgdG8gcGFzcyBpdC4gCgpJZiB5b3UgdHJhdmVsIDIwIG1pbGVzIGVhc3Qgb2YgQ29sdW1idXMsIE9oaW8sIHlvdeKAmWxsIGZpbmQgMSwwMDAgZW1wdHkgYWNyZXMgb2YgbGFuZC4gCgpJdCB3b27igJl0IGxvb2sgbGlrZSBtdWNoLCBidXQgaWYgeW91IHN0b3AgYW5kIGxvb2sgY2xvc2VseSwgeW914oCZbGwgc2VlIGEg4oCcRmllbGQgb2YgZHJlYW1zLOKAnSB0aGUgZ3JvdW5kIG9uIHdoaWNoIEFtZXJpY2HigJlzIGZ1dHVyZSB3aWxsIGJlIGJ1aWx0LiAKClRoaXMgaXMgd2hlcmUgSW50ZWwsIHRoZSBBbWVyaWNhbiBjb21wYW55IHRoYXQgaGVscGVkIGJ1aWxkIFNpbGljb24gVmFsbGV5LCBpcyBnb2luZyB0byBidWlsZCBpdHMgJDIwIGJpbGxpb24gc2VtaWNvbmR1Y3RvciDigJxtZWdhIHNpdGXigJ0uIAoKVXAgdG8gZWlnaHQgc3RhdGUtb2YtdGhlLWFydCBmYWN0b3JpZXMgaW4gb25lIHBsYWNlLiAxMCwwMDAgbmV3IGdvb2QtcGF5aW5nIGpvYnMuIAoKU29tZSBvZiB0aGUgbW9zdCBzb3BoaXN0aWNhdGVkIG1hbnVmYWN0dXJpbmcgaW4gdGhlIHdvcmxkIHRvIG1ha2UgY29tcHV0ZXIgY2hpcHMgdGhlIHNpemUgb2YgYSBmaW5nZXJ0aXAgdGhhdCBwb3dlciB0aGUgd29ybGQgYW5kIG91ciBldmVyeWRheSBsaXZlcy4gCgpTbWFydHBob25lcy4gVGhlIEludGVybmV0LiBUZWNobm9sb2d5IHdlIGhhdmUgeWV0IHRvIGludmVudC4gCgpCdXQgdGhhdOKAmXMganVzdCB0aGUgYmVnaW5uaW5nLiAKCkludGVs4oCZcyBDRU8sIFBhdCBHZWxzaW5nZXIsIHdobyBpcyBoZXJlIHRvbmlnaHQsIHRvbGQgbWUgdGhleSBhcmUgcmVhZHkgdG8gaW5jcmVhc2UgdGhlaXIgaW52ZXN0bWVudCBmcm9tICAKJDIwIGJpbGxpb24gdG8gJDEwMCBiaWxsaW9uLiAKClRoYXQgd291bGQgYmUgb25lIG9mIHRoZSBiaWdnZXN0IGludmVzdG1lbnRzIGluIG1hbnVmYWN0dXJpbmcgaW4gQW1lcmljYW4gaGlzdG9yeS4gCgpBbmQgYWxsIHRoZXnigJlyZSB3YWl0aW5nIGZvciBpcyBmb3IgeW91IHRvIHBhc3MgdGhpcyBiaWxsLiAKClNvIGxldOKAmXMgbm90IHdhaXQgYW55IGxvbmdlci4gU2VuZCBpdCB0byBteSBkZXNrLiBJ4oCZbGwgc2lnbiBpdC4gIAoKQW5kIHdlIHdpbGwgcmVhbGx5IHRha2Ugb2ZmLiAKCkFuZCBJbnRlbCBpcyBub3QgYWxvbmUuIAoKVGhlcmXigJlzIHNvbWV0aGluZyBoYXBwZW5pbmcgaW4gQW1lcmljYS4gCgpKdXN0IGxvb2sgYXJvdW5kIGFuZCB5b3XigJlsbCBzZWUgYW4gYW1hemluZyBzdG9yeS4gCgpUaGUgcmViaXJ0aCBvZiB0aGUgcHJpZGUgdGhhdCBjb21lcyBmcm9tIHN0YW1waW5nIHByb2R1Y3RzIOKAnE1hZGUgSW4gQW1lcmljYS7igJ0gVGhlIHJldml0YWxpemF0aW9uIG9mIEFtZXJpY2FuIG1hbnVmYWN0dXJpbmcuICAgCgpDb21wYW5pZXMgYXJlIGNob29zaW5nIHRvIGJ1aWxkIG5ldyBmYWN0b3JpZXMgaGVyZSwgd2hlbiBqdXN0IGEgZmV3IHllYXJzIGFnbywgdGhleSB3b3VsZCBoYXZlIGJ1aWx0IHRoZW0gb3ZlcnNlYXMuIAoKVGhhdOKAmXMgd2hhdCBpcyBoYXBwZW5pbmcuIEZvcmQgaXMgaW52ZXN0aW5nICQxMSBiaWxsaW9uIHRvIGJ1aWxkIGVsZWN0cmljIHZlaGljbGVzLCBjcmVhdGluZyAxMSwwMDAgam9icyBhY3Jvc3MgdGhlIGNvdW50cnkuIAoKR00gaXMgbWFraW5nIHRoZSBsYXJnZXN0IGludmVzdG1lbnQgaW4gaXRzIGhpc3RvcnnigJQkNyBiaWxsaW9uIHRvIGJ1aWxkIGVsZWN0cmljIHZlaGljbGVzLCBjcmVhdGluZyA0LDAwMCBqb2JzIGluIE1pY2hpZ2FuLiAKCkFsbCB0b2xkLCB3ZSBjcmVhdGVkIDM2OSwwMDAgbmV3IG1hbnVmYWN0dXJpbmcgam9icyBpbiBBbWVyaWNhIGp1c3QgbGFzdCB5ZWFyLiAKClBvd2VyZWQgYnkgcGVvcGxlIEnigJl2ZSBtZXQgbGlrZSBKb0pvIEJ1cmdlc3MsIGZyb20gZ2VuZXJhdGlvbnMgb2YgdW5pb24gc3RlZWx3b3JrZXJzIGZyb20gUGl0dHNidXJnaCwgd2hv4oCZcyBoZXJlIHdpdGggdXMgdG9uaWdodC4gCgpBcyBPaGlvIFNlbmF0b3IgU2hlcnJvZCBCcm93biBzYXlzLCDigJxJdOKAmXMgdGltZSB0byBidXJ5IHRoZSBsYWJlbCDigJxSdXN0IEJlbHQu4oCdIAoKSXTigJlzIHRpbWUuIAoKQnV0IHdpdGggYWxsIHRoZSBicmlnaHQgc3BvdHMgaW4gb3VyIGVjb25vbXksIHJlY29yZCBqb2IgZ3Jvd3RoIGFuZCBoaWdoZXIgd2FnZXMsIHRvbyBtYW55IGZhbWlsaWVzIGFyZSBzdHJ1Z2dsaW5nIHRvIGtlZXAgdXAgd2l0aCB0aGUgYmlsbHMuICAKCkluZmxhdGlvbiBpcyByb2JiaW5nIHRoZW0gb2YgdGhlIGdhaW5zIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGZlZWwuIAoKSSBnZXQgaXQuIFRoYXTigJlzIHdoeSBteSB0b3AgcHJpb3JpdHkgaXMgZ2V0dGluZyBwcmljZXMgdW5kZXIgY29udHJvbC4gCgpMb29rLCBvdXIgZWNvbm9teSByb2FyZWQgYmFjayBmYXN0ZXIgdGhhbiBtb3N0IHByZWRpY3RlZCwgYnV0IHRoZSBwYW5kZW1pYyBtZWFudCB0aGF0IGJ1c2luZXNzZXMgaGFkIGEgaGFyZCB0aW1lIGhpcmluZyBlbm91Z2ggd29ya2VycyB0byBrZWVwIHVwIHByb2R1Y3Rpb24gaW4gdGhlaXIgZmFjdG9yaWVzLiAKClRoZSBwYW5kZW1pYyBhbHNvIGRpc3J1cHRlZCBnbG9iYWwgc3VwcGx5IGNoYWlucy4gCgpXaGVuIGZhY3RvcmllcyBjbG9zZSwgaXQgdGFrZXMgbG9uZ2VyIHRvIG1ha2UgZ29vZHMgYW5kIGdldCB0aGVtIGZyb20gdGhlIHdhcmVob3VzZSB0byB0aGUgc3RvcmUsIGFuZCBwcmljZXMgZ28gdXAuIAoKTG9vayBhdCBjYXJzLiAKCkxhc3QgeWVhciwgdGhlcmUgd2VyZW7igJl0IGVub3VnaCBzZW1pY29uZHVjdG9ycyB0byBtYWtlIGFsbCB0aGUgY2FycyB0aGF0IHBlb3BsZSB3YW50ZWQgdG8gYnV5LiAKCkFuZCBndWVzcyB3aGF0LCBwcmljZXMgb2YgYXV0b21vYmlsZXMgd2VudCB1cC4gCgpTb+KAlHdlIGhhdmUgYSBjaG9pY2UuIAoKT25lIHdheSB0byBmaWdodCBpbmZsYXRpb24gaXMgdG8gZHJpdmUgZG93biB3YWdlcyBhbmQgbWFrZSBBbWVyaWNhbnMgcG9vcmVyLiAgCgpJIGhhdmUgYSBiZXR0ZXIgcGxhbiB0byBmaWdodCBpbmZsYXRpb24uIAoKTG93ZXIgeW91ciBjb3N0cywgbm90IHlvdXIgd2FnZXMuIAoKTWFrZSBtb3JlIGNhcnMgYW5kIHNlbWljb25kdWN0b3JzIGluIEFtZXJpY2EuIAoKTW9yZSBpbmZyYXN0cnVjdHVyZSBhbmQgaW5ub3ZhdGlvbiBpbiBBbWVyaWNhLiAKCk1vcmUgZ29vZHMgbW92aW5nIGZhc3RlciBhbmQgY2hlYXBlciBpbiBBbWVyaWNhLiAKCk1vcmUgam9icyB3aGVyZSB5b3UgY2FuIGVhcm4gYSBnb29kIGxpdmluZyBpbiBBbWVyaWNhLiAKCkFuZCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gZm9yZWlnbiBzdXBwbHkgY2hhaW5zLCBsZXTigJlzIG1ha2UgaXQgaW4gQW1lcmljYS4gCgpFY29ub21pc3RzIGNhbGwgaXQg4oCcaW5jcmVhc2luZyB0aGUgcHJvZHVjdGl2ZSBjYXBhY2l0eSBvZiBvdXIgZWNvbm9teS7igJ0gCgpJIGNhbGwgaXQgYnVpbGRpbmcgYSBiZXR0ZXIgQW1lcmljYS4gCgpNeSBwbGFuIHRvIGZpZ2h0IGluZmxhdGlvbiB3aWxsIGxvd2VyIHlvdXIgY29zdHMgYW5kIGxvd2VyIHRoZSBkZWZpY2l0LiAKCjE3IE5vYmVsIGxhdXJlYXRlcyBpbiBlY29ub21pY3Mgc2F5IG15IHBsYW4gd2lsbCBlYXNlIGxvbmctdGVybSBpbmZsYXRpb25hcnkgcHJlc3N1cmVzLiBUb3AgYnVzaW5lc3MgbGVhZGVycyBhbmQgbW9zdCBBbWVyaWNhbnMgc3VwcG9ydCBteSBwbGFuLiBBbmQgaGVyZeKAmXMgdGhlIHBsYW46IAoKRmlyc3Qg4oCTIGN1dCB0aGUgY29zdCBvZiBwcmVzY3JpcHRpb24gZHJ1Z3MuIEp1c3QgbG9vayBhdCBpbnN1bGluLiBPbmUgaW4gdGVuIEFtZXJpY2FucyBoYXMgZGlhYmV0ZXMuIEluIFZpcmdpbmlhLCBJIG1ldCBhIDEzLXllYXItb2xkIGJveSBuYW1lZCBKb3NodWEgRGF2aXMuICAKCkhlIGFuZCBoaXMgRGFkIGJvdGggaGF2ZSBUeXBlIDEgZGlhYmV0ZXMsIHdoaWNoIG1lYW5zIHRoZXkgbmVlZCBpbnN1bGluIGV2ZXJ5IGRheS4gSW5zdWxpbiBjb3N0cyBhYm91dCAkMTAgYSB2aWFsIHRvIG1ha2UuICAKCkJ1dCBkcnVnIGNvbXBhbmllcyBjaGFyZ2UgZmFtaWxpZXMgbGlrZSBKb3NodWEgYW5kIGhpcyBEYWQgdXAgdG8gMzAgdGltZXMgbW9yZS4gSSBzcG9rZSB3aXRoIEpvc2h1YeKAmXMgbW9tLiAKCkltYWdpbmUgd2hhdCBpdOKAmXMgbGlrZSB0byBsb29rIGF0IHlvdXIgY2hpbGQgd2hvIG5lZWRzIGluc3VsaW4gYW5kIGhhdmUgbm8gaWRlYSBob3cgeW914oCZcmUgZ29pbmcgdG8gcGF5IGZvciBpdC4gIAoKV2hhdCBpdCBkb2VzIHRvIHlvdXIgZGlnbml0eSwgeW91ciBhYmlsaXR5IHRvIGxvb2sgeW91ciBjaGlsZCBpbiB0aGUgZXllLCB0byBiZSB0aGUgcGFyZW50IHlvdSBleHBlY3QgdG8gYmUuIAoKSm9zaHVhIGlzIGhlcmUgd2l0aCB1cyB0b25pZ2h0LiBZZXN0ZXJkYXkgd2FzIGhpcyBiaXJ0aGRheS4gSGFwcHkgYmlydGhkYXksIGJ1ZGR5LiAgCgpGb3IgSm9zaHVhLCBhbmQgZm9yIHRoZSAyMDAsMDAwIG90aGVyIHlvdW5nIHBlb3BsZSB3aXRoIFR5cGUgMSBkaWFiZXRlcywgbGV04oCZcyBjYXAgdGhlIGNvc3Qgb2YgaW5zdWxpbiBhdCAkMzUgYSBtb250aCBzbyBldmVyeW9uZSBjYW4gYWZmb3JkIGl0LiAgCgpEcnVnIGNvbXBhbmllcyB3aWxsIHN0aWxsIGRvIHZlcnkgd2VsbC4gQW5kIHdoaWxlIHdl4oCZcmUgYXQgaXQgbGV0IE1lZGljYXJlIG5lZ290aWF0ZSBsb3dlciBwcmljZXMgZm9yIHByZXNjcmlwdGlvbiBkcnVncywgbGlrZSB0aGUgVkEgYWxyZWFkeSBkb2VzLiAKCkxvb2ssIHRoZSBBbWVyaWNhbiBSZXNjdWUgUGxhbiBpcyBoZWxwaW5nIG1pbGxpb25zIG9mIGZhbWlsaWVzIG9uIEFmZm9yZGFibGUgQ2FyZSBBY3QgcGxhbnMgc2F2ZSAkMiw0MDAgYSB5ZWFyIG9uIHRoZWlyIGhlYWx0aCBjYXJlIHByZW1pdW1zLiBMZXTigJlzIGNsb3NlIHRoZSBjb3ZlcmFnZSBnYXAgYW5kIG1ha2UgdGhvc2Ugc2F2aW5ncyBwZXJtYW5lbnQuIAoKU2Vjb25kIOKAkyBjdXQgZW5lcmd5IGNvc3RzIGZvciBmYW1pbGllcyBhbiBhdmVyYWdlIG9mICQ1MDAgYSB5ZWFyIGJ5IGNvbWJhdHRpbmcgY2xpbWF0ZSBjaGFuZ2UuICAKCkxldOKAmXMgcHJvdmlkZSBpbnZlc3RtZW50cyBhbmQgdGF4IGNyZWRpdHMgdG8gd2VhdGhlcml6ZSB5b3VyIGhvbWVzIGFuZCBidXNpbmVzc2VzIHRvIGJlIGVuZXJneSBlZmZpY2llbnQgYW5kIHlvdSBnZXQgYSB0YXggY3JlZGl0OyBkb3VibGUgQW1lcmljYeKAmXMgY2xlYW4gZW5lcmd5IHByb2R1Y3Rpb24gaW4gc29sYXIsIHdpbmQsIGFuZCBzbyBtdWNoIG1vcmU7ICBsb3dlciB0aGUgcHJpY2Ugb2YgZWxlY3RyaWMgdmVoaWNsZXMsIHNhdmluZyB5b3UgYW5vdGhlciAkODAgYSBtb250aCBiZWNhdXNlIHlvdeKAmWxsIG5ldmVyIGhhdmUgdG8gcGF5IGF0IHRoZSBnYXMgcHVtcCBhZ2Fpbi4gCgpUaGlyZCDigJMgY3V0IHRoZSBjb3N0IG9mIGNoaWxkIGNhcmUuIE1hbnkgZmFtaWxpZXMgcGF5IHVwIHRvICQxNCwwMDAgYSB5ZWFyIGZvciBjaGlsZCBjYXJlIHBlciBjaGlsZC4gIAoKTWlkZGxlLWNsYXNzIGFuZCB3b3JraW5nIGZhbWlsaWVzIHNob3VsZG7igJl0IGhhdmUgdG8gcGF5IG1vcmUgdGhhbiA3JSBvZiB0aGVpciBpbmNvbWUgZm9yIGNhcmUgb2YgeW91bmcgY2hpbGRyZW4uICAKCk15IHBsYW4gd2lsbCBjdXQgdGhlIGNvc3QgaW4gaGFsZiBmb3IgbW9zdCBmYW1pbGllcyBhbmQgaGVscCBwYXJlbnRzLCBpbmNsdWRpbmcgbWlsbGlvbnMgb2Ygd29tZW4sIHdobyBsZWZ0IHRoZSB3b3JrZm9yY2UgZHVyaW5nIHRoZSBwYW5kZW1pYyBiZWNhdXNlIHRoZXkgY291bGRu4oCZdCBhZmZvcmQgY2hpbGQgY2FyZSwgdG8gYmUgYWJsZSB0byBnZXQgYmFjayB0byB3b3JrLiAKCk15IHBsYW4gZG9lc27igJl0IHN0b3AgdGhlcmUuIEl0IGFsc28gaW5jbHVkZXMgaG9tZSBhbmQgbG9uZy10ZXJtIGNhcmUuIE1vcmUgYWZmb3JkYWJsZSBob3VzaW5nLiBBbmQgUHJlLUsgZm9yIGV2ZXJ5IDMtIGFuZCA0LXllYXItb2xkLiAgCgpBbGwgb2YgdGhlc2Ugd2lsbCBsb3dlciBjb3N0cy4gCgpBbmQgdW5kZXIgbXkgcGxhbiwgbm9ib2R5IGVhcm5pbmcgbGVzcyB0aGFuICQ0MDAsMDAwIGEgeWVhciB3aWxsIHBheSBhbiBhZGRpdGlvbmFsIHBlbm55IGluIG5ldyB0YXhlcy4gTm9ib2R5LiAgCgpUaGUgb25lIHRoaW5nIGFsbCBBbWVyaWNhbnMgYWdyZWUgb24gaXMgdGhhdCB0aGUgdGF4IHN5c3RlbSBpcyBub3QgZmFpci4gV2UgaGF2ZSB0byBmaXggaXQuICAKCknigJltIG5vdCBsb29raW5nIHRvIHB1bmlzaCBhbnlvbmUuIEJ1dCBsZXTigJlzIG1ha2Ugc3VyZSBjb3Jwb3JhdGlvbnMgYW5kIHRoZSB3ZWFsdGhpZXN0IEFtZXJpY2FucyBzdGFydCBwYXlpbmcgdGhlaXIgZmFpciBzaGFyZS4gCgpKdXN0IGxhc3QgeWVhciwgNTUgRm9ydHVuZSA1MDAgY29ycG9yYXRpb25zIGVhcm5lZCAkNDAgYmlsbGlvbiBpbiBwcm9maXRzIGFuZCBwYWlkIHplcm8gZG9sbGFycyBpbiBmZWRlcmFsIGluY29tZSB0YXguICAKClRoYXTigJlzIHNpbXBseSBub3QgZmFpci4gVGhhdOKAmXMgd2h5IEnigJl2ZSBwcm9wb3NlZCBhIDE1JSBtaW5pbXVtIHRheCByYXRlIGZvciBjb3Jwb3JhdGlvbnMuIAoKV2UgZ290IG1vcmUgdGhhbiAxMzAgY291bnRyaWVzIHRvIGFncmVlIG9uIGEgZ2xvYmFsIG1pbmltdW0gdGF4IHJhdGUgc28gY29tcGFuaWVzIGNhbuKAmXQgZ2V0IG91dCBvZiBwYXlpbmcgdGhlaXIgdGF4ZXMgYXQgaG9tZSBieSBzaGlwcGluZyBqb2JzIGFuZCBmYWN0b3JpZXMgb3ZlcnNlYXMuIAoKVGhhdOKAmXMgd2h5IEnigJl2ZSBwcm9wb3NlZCBjbG9zaW5nIGxvb3Bob2xlcyBzbyB0aGUgdmVyeSB3ZWFsdGh5IGRvbuKAmXQgcGF5IGEgbG93ZXIgdGF4IHJhdGUgdGhhbiBhIHRlYWNoZXIgb3IgYSBmaXJlZmlnaHRlci4gIAoKU28gdGhhdOKAmXMgbXkgcGxhbi4gSXQgd2lsbCBncm93IHRoZSBlY29ub215IGFuZCBsb3dlciBjb3N0cyBmb3IgZmFtaWxpZXMuIAoKU28gd2hhdCBhcmUgd2Ugd2FpdGluZyBmb3I/IExldOKAmXMgZ2V0IHRoaXMgZG9uZS4gQW5kIHdoaWxlIHlvdeKAmXJlIGF0IGl0LCBjb25maXJtIG15IG5vbWluZWVzIHRvIHRoZSBGZWRlcmFsIFJlc2VydmUsIHdoaWNoIHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBmaWdodGluZyBpbmZsYXRpb24uICAKCk15IHBsYW4gd2lsbCBub3Qgb25seSBsb3dlciBjb3N0cyB0byBnaXZlIGZhbWlsaWVzIGEgZmFpciBzaG90LCBpdCB3aWxsIGxvd2VyIHRoZSBkZWZpY2l0LiAKClRoZSBwcmV2aW91cyBBZG1pbmlzdHJhdGlvbiBub3Qgb25seSBiYWxsb29uZWQgdGhlIGRlZmljaXQgd2l0aCB0YXggY3V0cyBmb3IgdGhlIHZlcnkgd2VhbHRoeSBhbmQgY29ycG9yYXRpb25zLCBpdCB1bmRlcm1pbmVkIHRoZSB3YXRjaGRvZ3Mgd2hvc2Ugam9iIHdhcyB0byBrZWVwIHBhbmRlbWljIHJlbGllZiBmdW5kcyBmcm9tIGJlaW5nIHdhc3RlZC4gCgpCdXQgaW4gbXkgYWRtaW5pc3RyYXRpb24sIHRoZSB3YXRjaGRvZ3MgaGF2ZSBiZWVuIHdlbGNvbWVkIGJhY2suIAoKV2XigJlyZSBnb2luZyBhZnRlciB0aGUgY3JpbWluYWxzIHdobyBzdG9sZSBiaWxsaW9ucyBpbiByZWxpZWYgbW9uZXkgbWVhbnQgZm9yIHNtYWxsIGJ1c2luZXNzZXMgYW5kIG1pbGxpb25zIG9mIEFtZXJpY2Fucy4gIAoKQW5kIHRvbmlnaHQsIEnigJltIGFubm91bmNpbmcgdGhhdCB0aGUgSnVzdGljZSBEZXBhcnRtZW50IHdpbGwgbmFtZSBhIGNoaWVmIHByb3NlY3V0b3IgZm9yIHBhbmRlbWljIGZyYXVkLiAKCkJ5IHRoZSBlbmQgb2YgdGhpcyB5ZWFyLCB0aGUgZGVmaWNpdCB3aWxsIGJlIGRvd24gdG8gbGVzcyB0aGFuIGhhbGYgd2hhdCBpdCB3YXMgYmVmb3JlIEkgdG9vayBvZmZpY2UuICAKClRoZSBvbmx5IHByZXNpZGVudCBldmVyIHRvIGN1dCB0aGUgZGVmaWNpdCBieSBtb3JlIHRoYW4gb25lIHRyaWxsaW9uIGRvbGxhcnMgaW4gYSBzaW5nbGUgeWVhci4gCgpMb3dlcmluZyB5b3VyIGNvc3RzIGFsc28gbWVhbnMgZGVtYW5kaW5nIG1vcmUgY29tcGV0aXRpb24uIAoKSeKAmW0gYSBjYXBpdGFsaXN0LCBidXQgY2FwaXRhbGlzbSB3aXRob3V0IGNvbXBldGl0aW9uIGlzbuKAmXQgY2FwaXRhbGlzbS4gCgpJdOKAmXMgZXhwbG9pdGF0aW9u4oCUYW5kIGl0IGRyaXZlcyB1cCBwcmljZXMuIAoKV2hlbiBjb3Jwb3JhdGlvbnMgZG9u4oCZdCBoYXZlIHRvIGNvbXBldGUsIHRoZWlyIHByb2ZpdHMgZ28gdXAsIHlvdXIgcHJpY2VzIGdvIHVwLCBhbmQgc21hbGwgYnVzaW5lc3NlcyBhbmQgZmFtaWx5IGZhcm1lcnMgYW5kIHJhbmNoZXJzIGdvIHVuZGVyLiAKCldlIHNlZSBpdCBoYXBwZW5pbmcgd2l0aCBvY2VhbiBjYXJyaWVycyBtb3ZpbmcgZ29vZHMgaW4gYW5kIG91dCBvZiBBbWVyaWNhLiAKCkR1cmluZyB0aGUgcGFuZGVtaWMsIHRoZXNlIGZvcmVpZ24tb3duZWQgY29tcGFuaWVzIHJhaXNlZCBwcmljZXMgYnkgYXMgbXVjaCBhcyAxLDAwMCUgYW5kIG1hZGUgcmVjb3JkIHByb2ZpdHMuIAoKVG9uaWdodCwgSeKAmW0gYW5ub3VuY2luZyBhIGNyYWNrZG93biBvbiB0aGVzZSBjb21wYW5pZXMgb3ZlcmNoYXJnaW5nIEFtZXJpY2FuIGJ1c2luZXNzZXMgYW5kIGNvbnN1bWVycy4gCgpBbmQgYXMgV2FsbCBTdHJlZXQgZmlybXMgdGFrZSBvdmVyIG1vcmUgbnVyc2luZyBob21lcywgcXVhbGl0eSBpbiB0aG9zZSBob21lcyBoYXMgZ29uZSBkb3duIGFuZCBjb3N0cyBoYXZlIGdvbmUgdXAuICAKClRoYXQgZW5kcyBvbiBteSB3YXRjaC4gCgpNZWRpY2FyZSBpcyBnb2luZyB0byBzZXQgaGlnaGVyIHN0YW5kYXJkcyBmb3IgbnVyc2luZyBob21lcyBhbmQgbWFrZSBzdXJlIHlvdXIgbG92ZWQgb25lcyBnZXQgdGhlIGNhcmUgdGhleSBkZXNlcnZlIGFuZCBleHBlY3QuIAoKV2XigJlsbCBhbHNvIGN1dCBjb3N0cyBhbmQga2VlcCB0aGUgZWNvbm9teSBnb2luZyBzdHJvbmcgYnkgZ2l2aW5nIHdvcmtlcnMgYSBmYWlyIHNob3QsIHByb3ZpZGUgbW9yZSB0cmFpbmluZyBhbmQgYXBwcmVudGljZXNoaXBzLCBoaXJlIHRoZW0gYmFzZWQgb24gdGhlaXIgc2tpbGxzIG5vdCBkZWdyZWVzLiAKCkxldOKAmXMgcGFzcyB0aGUgUGF5Y2hlY2sgRmFpcm5lc3MgQWN0IGFuZCBwYWlkIGxlYXZlLiAgCgpSYWlzZSB0aGUgbWluaW11bSB3YWdlIHRvICQxNSBhbiBob3VyIGFuZCBleHRlbmQgdGhlIENoaWxkIFRheCBDcmVkaXQsIHNvIG5vIG9uZSBoYXMgdG8gcmFpc2UgYSBmYW1pbHkgaW4gcG92ZXJ0eS4gCgpMZXTigJlzIGluY3JlYXNlIFBlbGwgR3JhbnRzIGFuZCBpbmNyZWFzZSBvdXIgaGlzdG9yaWMgc3VwcG9ydCBvZiBIQkNVcywgYW5kIGludmVzdCBpbiB3aGF0IEppbGzigJRvdXIgRmlyc3QgTGFkeSB3aG8gdGVhY2hlcyBmdWxsLXRpbWXigJRjYWxscyBBbWVyaWNh4oCZcyBiZXN0LWtlcHQgc2VjcmV0OiBjb21tdW5pdHkgY29sbGVnZXMuIAoKQW5kIGxldOKAmXMgcGFzcyB0aGUgUFJPIEFjdCB3aGVuIGEgbWFqb3JpdHkgb2Ygd29ya2VycyB3YW50IHRvIGZvcm0gYSB1bmlvbuKAlHRoZXkgc2hvdWxkbuKAmXQgYmUgc3RvcHBlZC4gIAoKV2hlbiB3ZSBpbnZlc3QgaW4gb3VyIHdvcmtlcnMsIHdoZW4gd2UgYnVpbGQgdGhlIGVjb25vbXkgZnJvbSB0aGUgYm90dG9tIHVwIGFuZCB0aGUgbWlkZGxlIG91dCB0b2dldGhlciwgd2UgY2FuIGRvIHNvbWV0aGluZyB3ZSBoYXZlbuKAmXQgZG9uZSBpbiBhIGxvbmcgdGltZTogYnVpbGQgYSBiZXR0ZXIgQW1lcmljYS4gCgpGb3IgbW9yZSB0aGFuIHR3byB5ZWFycywgQ09WSUQtMTkgaGFzIGltcGFjdGVkIGV2ZXJ5IGRlY2lzaW9uIGluIG91ciBsaXZlcyBhbmQgdGhlIGxpZmUgb2YgdGhlIG5hdGlvbi4gCgpBbmQgSSBrbm93IHlvdeKAmXJlIHRpcmVkLCBmcnVzdHJhdGVkLCBhbmQgZXhoYXVzdGVkLiAKCkJ1dCBJIGFsc28ga25vdyB0aGlzLiAKCkJlY2F1c2Ugb2YgdGhlIHByb2dyZXNzIHdl4oCZdmUgbWFkZSwgYmVjYXVzZSBvZiB5b3VyIHJlc2lsaWVuY2UgYW5kIHRoZSB0b29scyB3ZSBoYXZlLCB0b25pZ2h0IEkgY2FuIHNheSAgCndlIGFyZSBtb3ZpbmcgZm9yd2FyZCBzYWZlbHksIGJhY2sgdG8gbW9yZSBub3JtYWwgcm91dGluZXMuICAKCldl4oCZdmUgcmVhY2hlZCBhIG5ldyBtb21lbnQgaW4gdGhlIGZpZ2h0IGFnYWluc3QgQ09WSUQtMTksIHdpdGggc2V2ZXJlIGNhc2VzIGRvd24gdG8gYSBsZXZlbCBub3Qgc2VlbiBzaW5jZSBsYXN0IEp1bHkuICAKCkp1c3QgYSBmZXcgZGF5cyBhZ28sIHRoZSBDZW50ZXJzIGZvciBEaXNlYXNlIENvbnRyb2wgYW5kIFByZXZlbnRpb27igJR0aGUgQ0RD4oCUaXNzdWVkIG5ldyBtYXNrIGd1aWRlbGluZXMuIAoKVW5kZXIgdGhlc2UgbmV3IGd1aWRlbGluZXMsIG1vc3QgQW1lcmljYW5zIGluIG1vc3Qgb2YgdGhlIGNvdW50cnkgY2FuIG5vdyBiZSBtYXNrIGZyZWUuICAgCgpBbmQgYmFzZWQgb24gdGhlIHByb2plY3Rpb25zLCBtb3JlIG9mIHRoZSBjb3VudHJ5IHdpbGwgcmVhY2ggdGhhdCBwb2ludCBhY3Jvc3MgdGhlIG5leHQgY291cGxlIG9mIHdlZWtzLiAKClRoYW5rcyB0byB0aGUgcHJvZ3Jlc3Mgd2UgaGF2ZSBtYWRlIHRoaXMgcGFzdCB5ZWFyLCBDT1ZJRC0xOSBuZWVkIG5vIGxvbmdlciBjb250cm9sIG91ciBsaXZlcy4gIAoKSSBrbm93IHNvbWUgYXJlIHRhbGtpbmcgYWJvdXQg4oCcbGl2aW5nIHdpdGggQ09WSUQtMTnigJ0uIFRvbmlnaHQg4oCTIEkgc2F5IHRoYXQgd2Ugd2lsbCBuZXZlciBqdXN0IGFjY2VwdCBsaXZpbmcgd2l0aCBDT1ZJRC0xOS4gCgpXZSB3aWxsIGNvbnRpbnVlIHRvIGNvbWJhdCB0aGUgdmlydXMgYXMgd2UgZG8gb3RoZXIgZGlzZWFzZXMuIEFuZCBiZWNhdXNlIHRoaXMgaXMgYSB2aXJ1cyB0aGF0IG11dGF0ZXMgYW5kIHNwcmVhZHMsIHdlIHdpbGwgc3RheSBvbiBndWFyZC4gCgpIZXJlIGFyZSBmb3VyIGNvbW1vbiBzZW5zZSBzdGVwcyBhcyB3ZSBtb3ZlIGZvcndhcmQgc2FmZWx5LiAgCgpGaXJzdCwgc3RheSBwcm90ZWN0ZWQgd2l0aCB2YWNjaW5lcyBhbmQgdHJlYXRtZW50cy4gV2Uga25vdyBob3cgaW5jcmVkaWJseSBlZmZlY3RpdmUgdmFjY2luZXMgYXJlLiBJZiB5b3XigJlyZSB2YWNjaW5hdGVkIGFuZCBib29zdGVkIHlvdSBoYXZlIHRoZSBoaWdoZXN0IGRlZ3JlZSBvZiBwcm90ZWN0aW9uLiAKCldlIHdpbGwgbmV2ZXIgZ2l2ZSB1cCBvbiB2YWNjaW5hdGluZyBtb3JlIEFtZXJpY2Fucy4gTm93LCBJIGtub3cgcGFyZW50cyB3aXRoIGtpZHMgdW5kZXIgNSBhcmUgZWFnZXIgdG8gc2VlIGEgdmFjY2luZSBhdXRob3JpemVkIGZvciB0aGVpciBjaGlsZHJlbi4gCgpUaGUgc2NpZW50aXN0cyBhcmUgd29ya2luZyBoYXJkIHRvIGdldCB0aGF0IGRvbmUgYW5kIHdl4oCZbGwgYmUgcmVhZHkgd2l0aCBwbGVudHkgb2YgdmFjY2luZXMgd2hlbiB0aGV5IGRvLiAKCldl4oCZcmUgYWxzbyByZWFkeSB3aXRoIGFudGktdmlyYWwgdHJlYXRtZW50cy4gSWYgeW91IGdldCBDT1ZJRC0xOSwgdGhlIFBmaXplciBwaWxsIHJlZHVjZXMgeW91ciBjaGFuY2VzIG9mIGVuZGluZyB1cCBpbiB0aGUgaG9zcGl0YWwgYnkgOTAlLiAgCgpXZeKAmXZlIG9yZGVyZWQgbW9yZSBvZiB0aGVzZSBwaWxscyB0aGFuIGFueW9uZSBpbiB0aGUgd29ybGQuIEFuZCBQZml6ZXIgaXMgd29ya2luZyBvdmVydGltZSB0byBnZXQgdXMgMSBNaWxsaW9uIHBpbGxzIHRoaXMgbW9udGggYW5kIG1vcmUgdGhhbiBkb3VibGUgdGhhdCBuZXh0IG1vbnRoLiAgCgpBbmQgd2XigJlyZSBsYXVuY2hpbmcgdGhlIOKAnFRlc3QgdG8gVHJlYXTigJ0gaW5pdGlhdGl2ZSBzbyBwZW9wbGUgY2FuIGdldCB0ZXN0ZWQgYXQgYSBwaGFybWFjeSwgYW5kIGlmIHRoZXnigJlyZSBwb3NpdGl2ZSwgcmVjZWl2ZSBhbnRpdmlyYWwgcGlsbHMgb24gdGhlIHNwb3QgYXQgbm8gY29zdC4gIAoKSWYgeW914oCZcmUgaW1tdW5vY29tcHJvbWlzZWQgb3IgaGF2ZSBzb21lIG90aGVyIHZ1bG5lcmFiaWxpdHksIHdlIGhhdmUgdHJlYXRtZW50cyBhbmQgZnJlZSBoaWdoLXF1YWxpdHkgbWFza3MuIAoKV2XigJlyZSBsZWF2aW5nIG5vIG9uZSBiZWhpbmQgb3IgaWdub3JpbmcgYW55b25l4oCZcyBuZWVkcyBhcyB3ZSBtb3ZlIGZvcndhcmQuIAoKQW5kIG9uIHRlc3RpbmcsIHdlIGhhdmUgbWFkZSBodW5kcmVkcyBvZiBtaWxsaW9ucyBvZiB0ZXN0cyBhdmFpbGFibGUgZm9yIHlvdSB0byBvcmRlciBmb3IgZnJlZS4gICAKCkV2ZW4gaWYgeW91IGFscmVhZHkgb3JkZXJlZCBmcmVlIHRlc3RzIHRvbmlnaHQsIEkgYW0gYW5ub3VuY2luZyB0aGF0IHlvdSBjYW4gb3JkZXIgbW9yZSBmcm9tIGNvdmlkdGVzdHMuZ292IHN0YXJ0aW5nIG5leHQgd2Vlay4gCgpTZWNvbmQg4oCTIHdlIG11c3QgcHJlcGFyZSBmb3IgbmV3IHZhcmlhbnRzLiBPdmVyIHRoZSBwYXN0IHllYXIsIHdl4oCZdmUgZ290dGVuIG11Y2ggYmV0dGVyIGF0IGRldGVjdGluZyBuZXcgdmFyaWFudHMuIAoKSWYgbmVjZXNzYXJ5LCB3ZeKAmWxsIGJlIGFibGUgdG8gZGVwbG95IG5ldyB2YWNjaW5lcyB3aXRoaW4gMTAwIGRheXMgaW5zdGVhZCBvZiBtYW55IG1vcmUgbW9udGhzIG9yIHllYXJzLiAgCgpBbmQsIGlmIENvbmdyZXNzIHByb3ZpZGVzIHRoZSBmdW5kcyB3ZSBuZWVkLCB3ZeKAmWxsIGhhdmUgbmV3IHN0b2NrcGlsZXMgb2YgdGVzdHMsIG1hc2tzLCBhbmQgcGlsbHMgcmVhZHkgaWYgbmVlZGVkLiAKCkkgY2Fubm90IHByb21pc2UgYSBuZXcgdmFyaWFudCB3b27igJl0IGNvbWUuIEJ1dCBJIGNhbiBwcm9taXNlIHlvdSB3ZeKAmWxsIGRvIGV2ZXJ5dGhpbmcgd2l0aGluIG91ciBwb3dlciB0byBiZSByZWFkeSBpZiBpdCBkb2VzLiAgCgpUaGlyZCDigJMgd2UgY2FuIGVuZCB0aGUgc2h1dGRvd24gb2Ygc2Nob29scyBhbmQgYnVzaW5lc3Nlcy4gV2UgaGF2ZSB0aGUgdG9vbHMgd2UgbmVlZC4gCgpJdOKAmXMgdGltZSBmb3IgQW1lcmljYW5zIHRvIGdldCBiYWNrIHRvIHdvcmsgYW5kIGZpbGwgb3VyIGdyZWF0IGRvd250b3ducyBhZ2Fpbi4gIFBlb3BsZSB3b3JraW5nIGZyb20gaG9tZSBjYW4gZmVlbCBzYWZlIHRvIGJlZ2luIHRvIHJldHVybiB0byB0aGUgb2ZmaWNlLiAgIAoKV2XigJlyZSBkb2luZyB0aGF0IGhlcmUgaW4gdGhlIGZlZGVyYWwgZ292ZXJubWVudC4gVGhlIHZhc3QgbWFqb3JpdHkgb2YgZmVkZXJhbCB3b3JrZXJzIHdpbGwgb25jZSBhZ2FpbiB3b3JrIGluIHBlcnNvbi4gCgpPdXIgc2Nob29scyBhcmUgb3Blbi4gTGV04oCZcyBrZWVwIGl0IHRoYXQgd2F5LiBPdXIga2lkcyBuZWVkIHRvIGJlIGluIHNjaG9vbC4gCgpBbmQgd2l0aCA3NSUgb2YgYWR1bHQgQW1lcmljYW5zIGZ1bGx5IHZhY2NpbmF0ZWQgYW5kIGhvc3BpdGFsaXphdGlvbnMgZG93biBieSA3NyUsIG1vc3QgQW1lcmljYW5zIGNhbiByZW1vdmUgdGhlaXIgbWFza3MsIHJldHVybiB0byB3b3JrLCBzdGF5IGluIHRoZSBjbGFzc3Jvb20sIGFuZCBtb3ZlIGZvcndhcmQgc2FmZWx5LiAKCldlIGFjaGlldmVkIHRoaXMgYmVjYXVzZSB3ZSBwcm92aWRlZCBmcmVlIHZhY2NpbmVzLCB0cmVhdG1lbnRzLCB0ZXN0cywgYW5kIG1hc2tzLiAKCk9mIGNvdXJzZSwgY29udGludWluZyB0aGlzIGNvc3RzIG1vbmV5LiAKCkkgd2lsbCBzb29uIHNlbmQgQ29uZ3Jlc3MgYSByZXF1ZXN0LiAKClRoZSB2YXN0IG1ham9yaXR5IG9mIEFtZXJpY2FucyBoYXZlIHVzZWQgdGhlc2UgdG9vbHMgYW5kIG1heSB3YW50IHRvIGFnYWluLCBzbyBJIGV4cGVjdCBDb25ncmVzcyB0byBwYXNzIGl0IHF1aWNrbHkuICAgCgpGb3VydGgsIHdlIHdpbGwgY29udGludWUgdmFjY2luYXRpbmcgdGhlIHdvcmxkLiAgICAgCgpXZeKAmXZlIHNlbnQgNDc1IE1pbGxpb24gdmFjY2luZSBkb3NlcyB0byAxMTIgY291bnRyaWVzLCBtb3JlIHRoYW4gYW55IG90aGVyIG5hdGlvbi4gCgpBbmQgd2Ugd29u4oCZdCBzdG9wLiAKCldlIGhhdmUgbG9zdCBzbyBtdWNoIHRvIENPVklELTE5LiBUaW1lIHdpdGggb25lIGFub3RoZXIuIEFuZCB3b3JzdCBvZiBhbGwsIHNvIG11Y2ggbG9zcyBvZiBsaWZlLiAKCkxldOKAmXMgdXNlIHRoaXMgbW9tZW50IHRvIHJlc2V0LiBMZXTigJlzIHN0b3AgbG9va2luZyBhdCBDT1ZJRC0xOSBhcyBhIHBhcnRpc2FuIGRpdmlkaW5nIGxpbmUgYW5kIHNlZSBpdCBmb3Igd2hhdCBpdCBpczogQSBHb2QtYXdmdWwgZGlzZWFzZS4gIAoKTGV04oCZcyBzdG9wIHNlZWluZyBlYWNoIG90aGVyIGFzIGVuZW1pZXMsIGFuZCBzdGFydCBzZWVpbmcgZWFjaCBvdGhlciBmb3Igd2hvIHdlIHJlYWxseSBhcmU6IEZlbGxvdyBBbWVyaWNhbnMuICAKCldlIGNhbuKAmXQgY2hhbmdlIGhvdyBkaXZpZGVkIHdl4oCZdmUgYmVlbi4gQnV0IHdlIGNhbiBjaGFuZ2UgaG93IHdlIG1vdmUgZm9yd2FyZOKAlG9uIENPVklELTE5IGFuZCBvdGhlciBpc3N1ZXMgd2UgbXVzdCBmYWNlIHRvZ2V0aGVyLiAKCkkgcmVjZW50bHkgdmlzaXRlZCB0aGUgTmV3IFlvcmsgQ2l0eSBQb2xpY2UgRGVwYXJ0bWVudCBkYXlzIGFmdGVyIHRoZSBmdW5lcmFscyBvZiBPZmZpY2VyIFdpbGJlcnQgTW9yYSBhbmQgaGlzIHBhcnRuZXIsIE9mZmljZXIgSmFzb24gUml2ZXJhLiAKClRoZXkgd2VyZSByZXNwb25kaW5nIHRvIGEgOS0xLTEgY2FsbCB3aGVuIGEgbWFuIHNob3QgYW5kIGtpbGxlZCB0aGVtIHdpdGggYSBzdG9sZW4gZ3VuLiAKCk9mZmljZXIgTW9yYSB3YXMgMjcgeWVhcnMgb2xkLiAKCk9mZmljZXIgUml2ZXJhIHdhcyAyMi4gCgpCb3RoIERvbWluaWNhbiBBbWVyaWNhbnMgd2hv4oCZZCBncm93biB1cCBvbiB0aGUgc2FtZSBzdHJlZXRzIHRoZXkgbGF0ZXIgY2hvc2UgdG8gcGF0cm9sIGFzIHBvbGljZSBvZmZpY2Vycy4gCgpJIHNwb2tlIHdpdGggdGhlaXIgZmFtaWxpZXMgYW5kIHRvbGQgdGhlbSB0aGF0IHdlIGFyZSBmb3JldmVyIGluIGRlYnQgZm9yIHRoZWlyIHNhY3JpZmljZSwgYW5kIHdlIHdpbGwgY2Fycnkgb24gdGhlaXIgbWlzc2lvbiB0byByZXN0b3JlIHRoZSB0cnVzdCBhbmQgc2FmZXR5IGV2ZXJ5IGNvbW11bml0eSBkZXNlcnZlcy4gCgpJ4oCZdmUgd29ya2VkIG9uIHRoZXNlIGlzc3VlcyBhIGxvbmcgdGltZS4gCgpJIGtub3cgd2hhdCB3b3JrczogSW52ZXN0aW5nIGluIGNyaW1lIHByZXZlbnRpb25hbmQgY29tbXVuaXR5IHBvbGljZSBvZmZpY2VycyB3aG/igJlsbCB3YWxrIHRoZSBiZWF0LCB3aG/igJlsbCBrbm93IHRoZSBuZWlnaGJvcmhvb2QsIGFuZCB3aG8gY2FuIHJlc3RvcmUgdHJ1c3QgYW5kIHNhZmV0eS4gCgpTbyBsZXTigJlzIG5vdCBhYmFuZG9uIG91ciBzdHJlZXRzLiBPciBjaG9vc2UgYmV0d2VlbiBzYWZldHkgYW5kIGVxdWFsIGp1c3RpY2UuIAoKTGV04oCZcyBjb21lIHRvZ2V0aGVyIHRvIHByb3RlY3Qgb3VyIGNvbW11bml0aWVzLCByZXN0b3JlIHRydXN0LCBhbmQgaG9sZCBsYXcgZW5mb3JjZW1lbnQgYWNjb3VudGFibGUuIAoKVGhhdOKAmXMgd2h5IHRoZSBKdXN0aWNlIERlcGFydG1lbnQgcmVxdWlyZWQgYm9keSBjYW1lcmFzLCBiYW5uZWQgY2hva2Vob2xkcywgYW5kIHJlc3RyaWN0ZWQgbm8ta25vY2sgd2FycmFudHMgZm9yIGl0cyBvZmZpY2Vycy4gCgpUaGF04oCZcyB3aHkgdGhlIEFtZXJpY2FuIFJlc2N1ZSBQbGFuIHByb3ZpZGVkICQzNTAgQmlsbGlvbiB0aGF0IGNpdGllcywgc3RhdGVzLCBhbmQgY291bnRpZXMgY2FuIHVzZSB0byBoaXJlIG1vcmUgcG9saWNlIGFuZCBpbnZlc3QgaW4gcHJvdmVuIHN0cmF0ZWdpZXMgbGlrZSBjb21tdW5pdHkgdmlvbGVuY2UgaW50ZXJydXB0aW9u4oCUdHJ1c3RlZCBtZXNzZW5nZXJzIGJyZWFraW5nIHRoZSBjeWNsZSBvZiB2aW9sZW5jZSBhbmQgdHJhdW1hIGFuZCBnaXZpbmcgeW91bmcgcGVvcGxlIGhvcGUuICAKCldlIHNob3VsZCBhbGwgYWdyZWU6IFRoZSBhbnN3ZXIgaXMgbm90IHRvIERlZnVuZCB0aGUgcG9saWNlLiBUaGUgYW5zd2VyIGlzIHRvIEZVTkQgdGhlIHBvbGljZSB3aXRoIHRoZSByZXNvdXJjZXMgYW5kIHRyYWluaW5nIHRoZXkgbmVlZCB0byBwcm90ZWN0IG91ciBjb21tdW5pdGllcy4gCgpJIGFzayBEZW1vY3JhdHMgYW5kIFJlcHVibGljYW5zIGFsaWtlOiBQYXNzIG15IGJ1ZGdldCBhbmQga2VlcCBvdXIgbmVpZ2hib3Job29kcyBzYWZlLiAgCgpBbmQgSSB3aWxsIGtlZXAgZG9pbmcgZXZlcnl0aGluZyBpbiBteSBwb3dlciB0byBjcmFjayBkb3duIG9uIGd1biB0cmFmZmlja2luZyBhbmQgZ2hvc3QgZ3VucyB5b3UgY2FuIGJ1eSBvbmxpbmUgYW5kIG1ha2UgYXQgaG9tZeKAlHRoZXkgaGF2ZSBubyBzZXJpYWwgbnVtYmVycyBhbmQgY2Fu4oCZdCBiZSB0cmFjZWQuIAoKQW5kIEkgYXNrIENvbmdyZXNzIHRvIHBhc3MgcHJvdmVuIG1lYXN1cmVzIHRvIHJlZHVjZSBndW4gdmlvbGVuY2UuIFBhc3MgdW5pdmVyc2FsIGJhY2tncm91bmQgY2hlY2tzLiBXaHkgc2hvdWxkIGFueW9uZSBvbiBhIHRlcnJvcmlzdCBsaXN0IGJlIGFibGUgdG8gcHVyY2hhc2UgYSB3ZWFwb24/IAoKQmFuIGFzc2F1bHQgd2VhcG9ucyBhbmQgaGlnaC1jYXBhY2l0eSBtYWdhemluZXMuIAoKUmVwZWFsIHRoZSBsaWFiaWxpdHkgc2hpZWxkIHRoYXQgbWFrZXMgZ3VuIG1hbnVmYWN0dXJlcnMgdGhlIG9ubHkgaW5kdXN0cnkgaW4gQW1lcmljYSB0aGF0IGNhbuKAmXQgYmUgc3VlZC4gCgpUaGVzZSBsYXdzIGRvbuKAmXQgaW5mcmluZ2Ugb24gdGhlIFNlY29uZCBBbWVuZG1lbnQuIFRoZXkgc2F2ZSBsaXZlcy4gCgpUaGUgbW9zdCBmdW5kYW1lbnRhbCByaWdodCBpbiBBbWVyaWNhIGlzIHRoZSByaWdodCB0byB2b3RlIOKAkyBhbmQgdG8gaGF2ZSBpdCBjb3VudGVkLiBBbmQgaXTigJlzIHVuZGVyIGFzc2F1bHQuIAoKSW4gc3RhdGUgYWZ0ZXIgc3RhdGUsIG5ldyBsYXdzIGhhdmUgYmVlbiBwYXNzZWQsIG5vdCBvbmx5IHRvIHN1cHByZXNzIHRoZSB2b3RlLCBidXQgdG8gc3VidmVydCBlbnRpcmUgZWxlY3Rpb25zLiAKCldlIGNhbm5vdCBsZXQgdGhpcyBoYXBwZW4uIAoKVG9uaWdodC4gSSBjYWxsIG9uIHRoZSBTZW5hdGUgdG86IFBhc3MgdGhlIEZyZWVkb20gdG8gVm90ZSBBY3QuIFBhc3MgdGhlIEpvaG4gTGV3aXMgVm90aW5nIFJpZ2h0cyBBY3QuIEFuZCB3aGlsZSB5b3XigJlyZSBhdCBpdCwgcGFzcyB0aGUgRGlzY2xvc2UgQWN0IHNvIEFtZXJpY2FucyBjYW4ga25vdyB3aG8gaXMgZnVuZGluZyBvdXIgZWxlY3Rpb25zLiAKClRvbmlnaHQsIEnigJlkIGxpa2UgdG8gaG9ub3Igc29tZW9uZSB3aG8gaGFzIGRlZGljYXRlZCBoaXMgbGlmZSB0byBzZXJ2ZSB0aGlzIGNvdW50cnk6IEp1c3RpY2UgU3RlcGhlbiBCcmV5ZXLigJRhbiBBcm15IHZldGVyYW4sIENvbnN0aXR1dGlvbmFsIHNjaG9sYXIsIGFuZCByZXRpcmluZyBKdXN0aWNlIG9mIHRoZSBVbml0ZWQgU3RhdGVzIFN1cHJlbWUgQ291cnQuIEp1c3RpY2UgQnJleWVyLCB0aGFuayB5b3UgZm9yIHlvdXIgc2VydmljZS4gCgpPbmUgb2YgdGhlIG1vc3Qgc2VyaW91cyBjb25zdGl0dXRpb25hbCByZXNwb25zaWJpbGl0aWVzIGEgUHJlc2lkZW50IGhhcyBpcyBub21pbmF0aW5nIHNvbWVvbmUgdG8gc2VydmUgb24gdGhlIFVuaXRlZCBTdGF0ZXMgU3VwcmVtZSBDb3VydC4gCgpBbmQgSSBkaWQgdGhhdCA0IGRheXMgYWdvLCB3aGVuIEkgbm9taW5hdGVkIENpcmN1aXQgQ291cnQgb2YgQXBwZWFscyBKdWRnZSBLZXRhbmppIEJyb3duIEphY2tzb24uIE9uZSBvZiBvdXIgbmF0aW9u4oCZcyB0b3AgbGVnYWwgbWluZHMsIHdobyB3aWxsIGNvbnRpbnVlIEp1c3RpY2UgQnJleWVy4oCZcyBsZWdhY3kgb2YgZXhjZWxsZW5jZS4gCgpBIGZvcm1lciB0b3AgbGl0aWdhdG9yIGluIHByaXZhdGUgcHJhY3RpY2UuIEEgZm9ybWVyIGZlZGVyYWwgcHVibGljIGRlZmVuZGVyLiBBbmQgZnJvbSBhIGZhbWlseSBvZiBwdWJsaWMgc2Nob29sIGVkdWNhdG9ycyBhbmQgcG9saWNlIG9mZmljZXJzLiBBIGNvbnNlbnN1cyBidWlsZGVyLiBTaW5jZSBzaGXigJlzIGJlZW4gbm9taW5hdGVkLCBzaGXigJlzIHJlY2VpdmVkIGEgYnJvYWQgcmFuZ2Ugb2Ygc3VwcG9ydOKAlGZyb20gdGhlIEZyYXRlcm5hbCBPcmRlciBvZiBQb2xpY2UgdG8gZm9ybWVyIGp1ZGdlcyBhcHBvaW50ZWQgYnkgRGVtb2NyYXRzIGFuZCBSZXB1YmxpY2Fucy4gCgpBbmQgaWYgd2UgYXJlIHRvIGFkdmFuY2UgbGliZXJ0eSBhbmQganVzdGljZSwgd2UgbmVlZCB0byBzZWN1cmUgdGhlIEJvcmRlciBhbmQgZml4IHRoZSBpbW1pZ3JhdGlvbiBzeXN0ZW0uIAoKV2UgY2FuIGRvIGJvdGguIEF0IG91ciBib3JkZXIsIHdl4oCZdmUgaW5zdGFsbGVkIG5ldyB0ZWNobm9sb2d5IGxpa2UgY3V0dGluZy1lZGdlIHNjYW5uZXJzIHRvIGJldHRlciBkZXRlY3QgZHJ1ZyBzbXVnZ2xpbmcuICAKCldl4oCZdmUgc2V0IHVwIGpvaW50IHBhdHJvbHMgd2l0aCBNZXhpY28gYW5kIEd1YXRlbWFsYSB0byBjYXRjaCBtb3JlIGh1bWFuIHRyYWZmaWNrZXJzLiAgCgpXZeKAmXJlIHB1dHRpbmcgaW4gcGxhY2UgZGVkaWNhdGVkIGltbWlncmF0aW9uIGp1ZGdlcyBzbyBmYW1pbGllcyBmbGVlaW5nIHBlcnNlY3V0aW9uIGFuZCB2aW9sZW5jZSBjYW4gaGF2ZSB0aGVpciBjYXNlcyBoZWFyZCBmYXN0ZXIuIAoKV2XigJlyZSBzZWN1cmluZyBjb21taXRtZW50cyBhbmQgc3VwcG9ydGluZyBwYXJ0bmVycyBpbiBTb3V0aCBhbmQgQ2VudHJhbCBBbWVyaWNhIHRvIGhvc3QgbW9yZSByZWZ1Z2VlcyBhbmQgc2VjdXJlIHRoZWlyIG93biBib3JkZXJzLiAKCldlIGNhbiBkbyBhbGwgdGhpcyB3aGlsZSBrZWVwaW5nIGxpdCB0aGUgdG9yY2ggb2YgbGliZXJ0eSB0aGF0IGhhcyBsZWQgZ2VuZXJhdGlvbnMgb2YgaW1taWdyYW50cyB0byB0aGlzIGxhbmTigJRteSBmb3JlZmF0aGVycyBhbmQgc28gbWFueSBvZiB5b3Vycy4gCgpQcm92aWRlIGEgcGF0aHdheSB0byBjaXRpemVuc2hpcCBmb3IgRHJlYW1lcnMsIHRob3NlIG9uIHRlbXBvcmFyeSBzdGF0dXMsIGZhcm0gd29ya2VycywgYW5kIGVzc2VudGlhbCB3b3JrZXJzLiAKClJldmlzZSBvdXIgbGF3cyBzbyBidXNpbmVzc2VzIGhhdmUgdGhlIHdvcmtlcnMgdGhleSBuZWVkIGFuZCBmYW1pbGllcyBkb27igJl0IHdhaXQgZGVjYWRlcyB0byByZXVuaXRlLiAKCkl04oCZcyBub3Qgb25seSB0aGUgcmlnaHQgdGhpbmcgdG8gZG/igJRpdOKAmXMgdGhlIGVjb25vbWljYWxseSBzbWFydCB0aGluZyB0byBkby4gCgpUaGF04oCZcyB3aHkgaW1taWdyYXRpb24gcmVmb3JtIGlzIHN1cHBvcnRlZCBieSBldmVyeW9uZSBmcm9tIGxhYm9yIHVuaW9ucyB0byByZWxpZ2lvdXMgbGVhZGVycyB0byB0aGUgVS5TLiBDaGFtYmVyIG9mIENvbW1lcmNlLiAKCkxldOKAmXMgZ2V0IGl0IGRvbmUgb25jZSBhbmQgZm9yIGFsbC4gCgpBZHZhbmNpbmcgbGliZXJ0eSBhbmQganVzdGljZSBhbHNvIHJlcXVpcmVzIHByb3RlY3RpbmcgdGhlIHJpZ2h0cyBvZiB3b21lbi4gCgpUaGUgY29uc3RpdHV0aW9uYWwgcmlnaHQgYWZmaXJtZWQgaW4gUm9lIHYuIFdhZGXigJRzdGFuZGluZyBwcmVjZWRlbnQgZm9yIGhhbGYgYSBjZW50dXJ54oCUaXMgdW5kZXIgYXR0YWNrIGFzIG5ldmVyIGJlZm9yZS4gCgpJZiB3ZSB3YW50IHRvIGdvIGZvcndhcmTigJRub3QgYmFja3dhcmTigJR3ZSBtdXN0IHByb3RlY3QgYWNjZXNzIHRvIGhlYWx0aCBjYXJlLiBQcmVzZXJ2ZSBhIHdvbWFu4oCZcyByaWdodCB0byBjaG9vc2UuIEFuZCBsZXTigJlzIGNvbnRpbnVlIHRvIGFkdmFuY2UgbWF0ZXJuYWwgaGVhbHRoIGNhcmUgaW4gQW1lcmljYS4gCgpBbmQgZm9yIG91ciBMR0JUUSsgQW1lcmljYW5zLCBsZXTigJlzIGZpbmFsbHkgZ2V0IHRoZSBiaXBhcnRpc2FuIEVxdWFsaXR5IEFjdCB0byBteSBkZXNrLiBUaGUgb25zbGF1Z2h0IG9mIHN0YXRlIGxhd3MgdGFyZ2V0aW5nIHRyYW5zZ2VuZGVyIEFtZXJpY2FucyBhbmQgdGhlaXIgZmFtaWxpZXMgaXMgd3JvbmcuIAoKQXMgSSBzYWlkIGxhc3QgeWVhciwgZXNwZWNpYWxseSB0byBvdXIgeW91bmdlciB0cmFuc2dlbmRlciBBbWVyaWNhbnMsIEkgd2lsbCBhbHdheXMgaGF2ZSB5b3VyIGJhY2sgYXMgeW91ciBQcmVzaWRlbnQsIHNvIHlvdSBjYW4gYmUgeW91cnNlbGYgYW5kIHJlYWNoIHlvdXIgR29kLWdpdmVuIHBvdGVudGlhbC4gCgpXaGlsZSBpdCBvZnRlbiBhcHBlYXJzIHRoYXQgd2UgbmV2ZXIgYWdyZWUsIHRoYXQgaXNu4oCZdCB0cnVlLiBJIHNpZ25lZCA4MCBiaXBhcnRpc2FuIGJpbGxzIGludG8gbGF3IGxhc3QgeWVhci4gRnJvbSBwcmV2ZW50aW5nIGdvdmVybm1lbnQgc2h1dGRvd25zIHRvIHByb3RlY3RpbmcgQXNpYW4tQW1lcmljYW5zIGZyb20gc3RpbGwtdG9vLWNvbW1vbiBoYXRlIGNyaW1lcyB0byByZWZvcm1pbmcgbWlsaXRhcnkganVzdGljZS4gCgpBbmQgc29vbiwgd2XigJlsbCBzdHJlbmd0aGVuIHRoZSBWaW9sZW5jZSBBZ2FpbnN0IFdvbWVuIEFjdCB0aGF0IEkgZmlyc3Qgd3JvdGUgdGhyZWUgZGVjYWRlcyBhZ28uIEl0IGlzIGltcG9ydGFudCBmb3IgdXMgdG8gc2hvdyB0aGUgbmF0aW9uIHRoYXQgd2UgY2FuIGNvbWUgdG9nZXRoZXIgYW5kIGRvIGJpZyB0aGluZ3MuIAoKU28gdG9uaWdodCBJ4oCZbSBvZmZlcmluZyBhIFVuaXR5IEFnZW5kYSBmb3IgdGhlIE5hdGlvbi4gRm91ciBiaWcgdGhpbmdzIHdlIGNhbiBkbyB0b2dldGhlci4gIAoKRmlyc3QsIGJlYXQgdGhlIG9waW9pZCBlcGlkZW1pYy4gCgpUaGVyZSBpcyBzbyBtdWNoIHdlIGNhbiBkby4gSW5jcmVhc2UgZnVuZGluZyBmb3IgcHJldmVudGlvbiwgdHJlYXRtZW50LCBoYXJtIHJlZHVjdGlvbiwgYW5kIHJlY292ZXJ5LiAgCgpHZXQgcmlkIG9mIG91dGRhdGVkIHJ1bGVzIHRoYXQgc3RvcCBkb2N0b3JzIGZyb20gcHJlc2NyaWJpbmcgdHJlYXRtZW50cy4gQW5kIHN0b3AgdGhlIGZsb3cgb2YgaWxsaWNpdCBkcnVncyBieSB3b3JraW5nIHdpdGggc3RhdGUgYW5kIGxvY2FsIGxhdyBlbmZvcmNlbWVudCB0byBnbyBhZnRlciB0cmFmZmlja2Vycy4gCgpJZiB5b3XigJlyZSBzdWZmZXJpbmcgZnJvbSBhZGRpY3Rpb24sIGtub3cgeW91IGFyZSBub3QgYWxvbmUuIEkgYmVsaWV2ZSBpbiByZWNvdmVyeSwgYW5kIEkgY2VsZWJyYXRlIHRoZSAyMyBtaWxsaW9uIEFtZXJpY2FucyBpbiByZWNvdmVyeS4gCgpTZWNvbmQsIGxldOKAmXMgdGFrZSBvbiBtZW50YWwgaGVhbHRoLiBFc3BlY2lhbGx5IGFtb25nIG91ciBjaGlsZHJlbiwgd2hvc2UgbGl2ZXMgYW5kIGVkdWNhdGlvbiBoYXZlIGJlZW4gdHVybmVkIHVwc2lkZSBkb3duLiAgCgpUaGUgQW1lcmljYW4gUmVzY3VlIFBsYW4gZ2F2ZSBzY2hvb2xzIG1vbmV5IHRvIGhpcmUgdGVhY2hlcnMgYW5kIGhlbHAgc3R1ZGVudHMgbWFrZSB1cCBmb3IgbG9zdCBsZWFybmluZy4gIAoKSSB1cmdlIGV2ZXJ5IHBhcmVudCB0byBtYWtlIHN1cmUgeW91ciBzY2hvb2wgZG9lcyBqdXN0IHRoYXQuIEFuZCB3ZSBjYW4gYWxsIHBsYXkgYSBwYXJ04oCUc2lnbiB1cCB0byBiZSBhIHR1dG9yIG9yIGEgbWVudG9yLiAKCkNoaWxkcmVuIHdlcmUgYWxzbyBzdHJ1Z2dsaW5nIGJlZm9yZSB0aGUgcGFuZGVtaWMuIEJ1bGx5aW5nLCB2aW9sZW5jZSwgdHJhdW1hLCBhbmQgdGhlIGhhcm1zIG9mIHNvY2lhbCBtZWRpYS4gCgpBcyBGcmFuY2VzIEhhdWdlbiwgd2hvIGlzIGhlcmUgd2l0aCB1cyB0b25pZ2h0LCBoYXMgc2hvd24sIHdlIG11c3QgaG9sZCBzb2NpYWwgbWVkaWEgcGxhdGZvcm1zIGFjY291bnRhYmxlIGZvciB0aGUgbmF0aW9uYWwgZXhwZXJpbWVudCB0aGV54oCZcmUgY29uZHVjdGluZyBvbiBvdXIgY2hpbGRyZW4gZm9yIHByb2ZpdC4gCgpJdOKAmXMgdGltZSB0byBzdHJlbmd0aGVuIHByaXZhY3kgcHJvdGVjdGlvbnMsIGJhbiB0YXJnZXRlZCBhZHZlcnRpc2luZyB0byBjaGlsZHJlbiwgZGVtYW5kIHRlY2ggY29tcGFuaWVzIHN0b3AgY29sbGVjdGluZyBwZXJzb25hbCBkYXRhIG9uIG91ciBjaGlsZHJlbi4gCgpBbmQgbGV04oCZcyBnZXQgYWxsIEFtZXJpY2FucyB0aGUgbWVudGFsIGhlYWx0aCBzZXJ2aWNlcyB0aGV5IG5lZWQuIE1vcmUgcGVvcGxlIHRoZXkgY2FuIHR1cm4gdG8gZm9yIGhlbHAsIGFuZCBmdWxsIHBhcml0eSBiZXR3ZWVuIHBoeXNpY2FsIGFuZCBtZW50YWwgaGVhbHRoIGNhcmUuIAoKVGhpcmQsIHN1cHBvcnQgb3VyIHZldGVyYW5zLiAKClZldGVyYW5zIGFyZSB0aGUgYmVzdCBvZiB1cy4gCgpJ4oCZdmUgYWx3YXlzIGJlbGlldmVkIHRoYXQgd2UgaGF2ZSBhIHNhY3JlZCBvYmxpZ2F0aW9uIHRvIGVxdWlwIGFsbCB0aG9zZSB3ZSBzZW5kIHRvIHdhciBhbmQgY2FyZSBmb3IgdGhlbSBhbmQgdGhlaXIgZmFtaWxpZXMgd2hlbiB0aGV5IGNvbWUgaG9tZS4gCgpNeSBhZG1pbmlzdHJhdGlvbiBpcyBwcm92aWRpbmcgYXNzaXN0YW5jZSB3aXRoIGpvYiB0cmFpbmluZyBhbmQgaG91c2luZywgYW5kIG5vdyBoZWxwaW5nIGxvd2VyLWluY29tZSB2ZXRlcmFucyBnZXQgVkEgY2FyZSBkZWJ0LWZyZWUuICAKCk91ciB0cm9vcHMgaW4gSXJhcSBhbmQgQWZnaGFuaXN0YW4gZmFjZWQgbWFueSBkYW5nZXJzLiAKCk9uZSB3YXMgc3RhdGlvbmVkIGF0IGJhc2VzIGFuZCBicmVhdGhpbmcgaW4gdG94aWMgc21va2UgZnJvbSDigJxidXJuIHBpdHPigJ0gdGhhdCBpbmNpbmVyYXRlZCB3YXN0ZXMgb2Ygd2Fy4oCUbWVkaWNhbCBhbmQgaGF6YXJkIG1hdGVyaWFsLCBqZXQgZnVlbCwgYW5kIG1vcmUuIAoKV2hlbiB0aGV5IGNhbWUgaG9tZSwgbWFueSBvZiB0aGUgd29ybGTigJlzIGZpdHRlc3QgYW5kIGJlc3QgdHJhaW5lZCB3YXJyaW9ycyB3ZXJlIG5ldmVyIHRoZSBzYW1lLiAKCkhlYWRhY2hlcy4gTnVtYm5lc3MuIERpenppbmVzcy4gCgpBIGNhbmNlciB0aGF0IHdvdWxkIHB1dCB0aGVtIGluIGEgZmxhZy1kcmFwZWQgY29mZmluLiAKCkkga25vdy4gCgpPbmUgb2YgdGhvc2Ugc29sZGllcnMgd2FzIG15IHNvbiBNYWpvciBCZWF1IEJpZGVuLiAKCldlIGRvbuKAmXQga25vdyBmb3Igc3VyZSBpZiBhIGJ1cm4gcGl0IHdhcyB0aGUgY2F1c2Ugb2YgaGlzIGJyYWluIGNhbmNlciwgb3IgdGhlIGRpc2Vhc2VzIG9mIHNvIG1hbnkgb2Ygb3VyIHRyb29wcy4gCgpCdXQgSeKAmW0gY29tbWl0dGVkIHRvIGZpbmRpbmcgb3V0IGV2ZXJ5dGhpbmcgd2UgY2FuLiAKCkNvbW1pdHRlZCB0byBtaWxpdGFyeSBmYW1pbGllcyBsaWtlIERhbmllbGxlIFJvYmluc29uIGZyb20gT2hpby4gCgpUaGUgd2lkb3cgb2YgU2VyZ2VhbnQgRmlyc3QgQ2xhc3MgSGVhdGggUm9iaW5zb24uICAKCkhlIHdhcyBib3JuIGEgc29sZGllci4gQXJteSBOYXRpb25hbCBHdWFyZC4gQ29tYmF0IG1lZGljIGluIEtvc292byBhbmQgSXJhcS4gCgpTdGF0aW9uZWQgbmVhciBCYWdoZGFkLCBqdXN0IHlhcmRzIGZyb20gYnVybiBwaXRzIHRoZSBzaXplIG9mIGZvb3RiYWxsIGZpZWxkcy4gCgpIZWF0aOKAmXMgd2lkb3cgRGFuaWVsbGUgaXMgaGVyZSB3aXRoIHVzIHRvbmlnaHQuIFRoZXkgbG92ZWQgZ29pbmcgdG8gT2hpbyBTdGF0ZSBmb290YmFsbCBnYW1lcy4gSGUgbG92ZWQgYnVpbGRpbmcgTGVnb3Mgd2l0aCB0aGVpciBkYXVnaHRlci4gCgpCdXQgY2FuY2VyIGZyb20gcHJvbG9uZ2VkIGV4cG9zdXJlIHRvIGJ1cm4gcGl0cyByYXZhZ2VkIEhlYXRo4oCZcyBsdW5ncyBhbmQgYm9keS4gCgpEYW5pZWxsZSBzYXlzIEhlYXRoIHdhcyBhIGZpZ2h0ZXIgdG8gdGhlIHZlcnkgZW5kLiAKCkhlIGRpZG7igJl0IGtub3cgaG93IHRvIHN0b3AgZmlnaHRpbmcsIGFuZCBuZWl0aGVyIGRpZCBzaGUuIAoKVGhyb3VnaCBoZXIgcGFpbiBzaGUgZm91bmQgcHVycG9zZSB0byBkZW1hbmQgd2UgZG8gYmV0dGVyLiAKClRvbmlnaHQsIERhbmllbGxl4oCUd2UgYXJlLiAKClRoZSBWQSBpcyBwaW9uZWVyaW5nIG5ldyB3YXlzIG9mIGxpbmtpbmcgdG94aWMgZXhwb3N1cmVzIHRvIGRpc2Vhc2VzLCBhbHJlYWR5IGhlbHBpbmcgbW9yZSB2ZXRlcmFucyBnZXQgYmVuZWZpdHMuIAoKQW5kIHRvbmlnaHQsIEnigJltIGFubm91bmNpbmcgd2XigJlyZSBleHBhbmRpbmcgZWxpZ2liaWxpdHkgdG8gdmV0ZXJhbnMgc3VmZmVyaW5nIGZyb20gbmluZSByZXNwaXJhdG9yeSBjYW5jZXJzLiAKCknigJltIGFsc28gY2FsbGluZyBvbiBDb25ncmVzczogcGFzcyBhIGxhdyB0byBtYWtlIHN1cmUgdmV0ZXJhbnMgZGV2YXN0YXRlZCBieSB0b3hpYyBleHBvc3VyZXMgaW4gSXJhcSBhbmQgQWZnaGFuaXN0YW4gZmluYWxseSBnZXQgdGhlIGJlbmVmaXRzIGFuZCBjb21wcmVoZW5zaXZlIGhlYWx0aCBjYXJlIHRoZXkgZGVzZXJ2ZS4gCgpBbmQgZm91cnRoLCBsZXTigJlzIGVuZCBjYW5jZXIgYXMgd2Uga25vdyBpdC4gCgpUaGlzIGlzIHBlcnNvbmFsIHRvIG1lIGFuZCBKaWxsLCB0byBLYW1hbGEsIGFuZCB0byBzbyBtYW55IG9mIHlvdS4gCgpDYW5jZXIgaXMgdGhlICMyIGNhdXNlIG9mIGRlYXRoIGluIEFtZXJpY2HigJNzZWNvbmQgb25seSB0byBoZWFydCBkaXNlYXNlLiAKCkxhc3QgbW9udGgsIEkgYW5ub3VuY2VkIG91ciBwbGFuIHRvIHN1cGVyY2hhcmdlICAKdGhlIENhbmNlciBNb29uc2hvdCB0aGF0IFByZXNpZGVudCBPYmFtYSBhc2tlZCBtZSB0byBsZWFkIHNpeCB5ZWFycyBhZ28uIAoKT3VyIGdvYWwgaXMgdG8gY3V0IHRoZSBjYW5jZXIgZGVhdGggcmF0ZSBieSBhdCBsZWFzdCA1MCUgb3ZlciB0aGUgbmV4dCAyNSB5ZWFycywgdHVybiBtb3JlIGNhbmNlcnMgZnJvbSBkZWF0aCBzZW50ZW5jZXMgaW50byB0cmVhdGFibGUgZGlzZWFzZXMuICAKCk1vcmUgc3VwcG9ydCBmb3IgcGF0aWVudHMgYW5kIGZhbWlsaWVzLiAKClRvIGdldCB0aGVyZSwgSSBjYWxsIG9uIENvbmdyZXNzIHRvIGZ1bmQgQVJQQS1ILCB0aGUgQWR2YW5jZWQgUmVzZWFyY2ggUHJvamVjdHMgQWdlbmN5IGZvciBIZWFsdGguIAoKSXTigJlzIGJhc2VkIG9uIERBUlBB4oCUdGhlIERlZmVuc2UgRGVwYXJ0bWVudCBwcm9qZWN0IHRoYXQgbGVkIHRvIHRoZSBJbnRlcm5ldCwgR1BTLCBhbmQgc28gbXVjaCBtb3JlLiAgCgpBUlBBLUggd2lsbCBoYXZlIGEgc2luZ3VsYXIgcHVycG9zZeKAlHRvIGRyaXZlIGJyZWFrdGhyb3VnaHMgaW4gY2FuY2VyLCBBbHpoZWltZXLigJlzLCBkaWFiZXRlcywgYW5kIG1vcmUuIAoKQSB1bml0eSBhZ2VuZGEgZm9yIHRoZSBuYXRpb24uIAoKV2UgY2FuIGRvIHRoaXMuIAoKTXkgZmVsbG93IEFtZXJpY2Fuc+KAlHRvbmlnaHQgLCB3ZSBoYXZlIGdhdGhlcmVkIGluIGEgc2FjcmVkIHNwYWNl4oCUdGhlIGNpdGFkZWwgb2Ygb3VyIGRlbW9jcmFjeS4gCgpJbiB0aGlzIENhcGl0b2wsIGdlbmVyYXRpb24gYWZ0ZXIgZ2VuZXJhdGlvbiwgQW1lcmljYW5zIGhhdmUgZGViYXRlZCBncmVhdCBxdWVzdGlvbnMgYW1pZCBncmVhdCBzdHJpZmUsIGFuZCBoYXZlIGRvbmUgZ3JlYXQgdGhpbmdzLiAKCldlIGhhdmUgZm91Z2h0IGZvciBmcmVlZG9tLCBleHBhbmRlZCBsaWJlcnR5LCBkZWZlYXRlZCB0b3RhbGl0YXJpYW5pc20gYW5kIHRlcnJvci4gCgpBbmQgYnVpbHQgdGhlIHN0cm9uZ2VzdCwgZnJlZXN0LCBhbmQgbW9zdCBwcm9zcGVyb3VzIG5hdGlvbiB0aGUgd29ybGQgaGFzIGV2ZXIga25vd24uIAoKTm93IGlzIHRoZSBob3VyLiAKCk91ciBtb21lbnQgb2YgcmVzcG9uc2liaWxpdHkuIAoKT3VyIHRlc3Qgb2YgcmVzb2x2ZSBhbmQgY29uc2NpZW5jZSwgb2YgaGlzdG9yeSBpdHNlbGYuIAoKSXQgaXMgaW4gdGhpcyBtb21lbnQgdGhhdCBvdXIgY2hhcmFjdGVyIGlzIGZvcm1lZC4gT3VyIHB1cnBvc2UgaXMgZm91bmQuIE91ciBmdXR1cmUgaXMgZm9yZ2VkLiAKCldlbGwgSSBrbm93IHRoaXMgbmF0aW9uLiAgCgpXZSB3aWxsIG1lZXQgdGhlIHRlc3QuIAoKVG8gcHJvdGVjdCBmcmVlZG9tIGFuZCBsaWJlcnR5LCB0byBleHBhbmQgZmFpcm5lc3MgYW5kIG9wcG9ydHVuaXR5LiAKCldlIHdpbGwgc2F2ZSBkZW1vY3JhY3kuIAoKQXMgaGFyZCBhcyB0aGVzZSB0aW1lcyBoYXZlIGJlZW4sIEkgYW0gbW9yZSBvcHRpbWlzdGljIGFib3V0IEFtZXJpY2EgdG9kYXkgdGhhbiBJIGhhdmUgYmVlbiBteSB3aG9sZSBsaWZlLiAKCkJlY2F1c2UgSSBzZWUgdGhlIGZ1dHVyZSB0aGF0IGlzIHdpdGhpbiBvdXIgZ3Jhc3AuIAoKQmVjYXVzZSBJIGtub3cgdGhlcmUgaXMgc2ltcGx5IG5vdGhpbmcgYmV5b25kIG91ciBjYXBhY2l0eS4gCgpXZSBhcmUgdGhlIG9ubHkgbmF0aW9uIG9uIEVhcnRoIHRoYXQgaGFzIGFsd2F5cyB0dXJuZWQgZXZlcnkgY3Jpc2lzIHdlIGhhdmUgZmFjZWQgaW50byBhbiBvcHBvcnR1bml0eS4gCgpUaGUgb25seSBuYXRpb24gdGhhdCBjYW4gYmUgZGVmaW5lZCBieSBhIHNpbmdsZSB3b3JkOiBwb3NzaWJpbGl0aWVzLiAKClNvIG9uIHRoaXMgbmlnaHQsIGluIG91ciAyNDV0aCB5ZWFyIGFzIGEgbmF0aW9uLCBJIGhhdmUgY29tZSB0byByZXBvcnQgb24gdGhlIFN0YXRlIG9mIHRoZSBVbmlvbi4gCgpBbmQgbXkgcmVwb3J0IGlzIHRoaXM6IHRoZSBTdGF0ZSBvZiB0aGUgVW5pb24gaXMgc3Ryb25n4oCUYmVjYXVzZSB5b3UsIHRoZSBBbWVyaWNhbiBwZW9wbGUsIGFyZSBzdHJvbmcuIAoKV2UgYXJlIHN0cm9uZ2VyIHRvZGF5IHRoYW4gd2Ugd2VyZSBhIHllYXIgYWdvLiAKCkFuZCB3ZSB3aWxsIGJlIHN0cm9uZ2VyIGEgeWVhciBmcm9tIG5vdyB0aGFuIHdlIGFyZSB0b2RheS4gCgpOb3cgaXMgb3VyIG1vbWVudCB0byBtZWV0IGFuZCBvdmVyY29tZSB0aGUgY2hhbGxlbmdlcyBvZiBvdXIgdGltZS4gCgpBbmQgd2Ugd2lsbCwgYXMgb25lIHBlb3BsZS4gCgpPbmUgQW1lcmljYS4gCgpUaGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiAKCk1heSBHb2QgYmxlc3MgeW91IGFsbC4gTWF5IEdvZCBwcm90ZWN0IG91ciB0cm9vcHMu"},"_type":"TextLoader"},"description":"Load text files.","base_classes":["TextLoader","BaseLoader"]},"id":"dndnode_213","value":null},"selected":false,"positionAbsolute":{"x":160.88681321552258,"y":85.60450902748329},"dragging":false},{"width":384,"height":293,"id":"dndnode_214","type":"genericNode","position":{"x":179.10633869463402,"y":745.0870354962836},"data":{"type":"WebBaseLoader","node":{"template":{"web_path":{"required":true,"placeholder":"","show":true,"multiline":false,"value":"https://beta.ruff.rs/docs/faq/","password":false,"name":"web_path","advanced":false,"type":"str","list":false},"_type":"WebBaseLoader"},"description":"Loader that uses urllib and beautiful soup to load webpages.","base_classes":["WebBaseLoader","BaseLoader"]},"id":"dndnode_214","value":null},"selected":false,"positionAbsolute":{"x":179.10633869463402,"y":745.0870354962836},"dragging":false},{"width":384,"height":489,"id":"dndnode_215","type":"genericNode","position":{"x":764.7962774179402,"y":-41.66146949279698},"data":{"type":"CharacterTextSplitter","node":{"template":{"documents":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"documents","advanced":false,"type":"BaseLoader","list":false},"separator":{"required":true,"placeholder":"","show":true,"multiline":false,"value":".","password":false,"name":"separator","advanced":false,"type":"str","list":false},"chunk_size":{"required":true,"placeholder":"","show":true,"multiline":false,"value":"2000","password":false,"name":"chunk_size","advanced":false,"type":"int","list":false},"chunk_overlap":{"required":true,"placeholder":"","show":true,"multiline":false,"value":200,"password":false,"name":"chunk_overlap","advanced":false,"type":"int","list":false},"_type":"CharacterTextSplitter"},"description":"Implementation of splitting text that looks at characters.","base_classes":["CharacterTextSplitter","BaseDocumentTransformer","TextSplitter"]},"id":"dndnode_215","value":null},"selected":false,"positionAbsolute":{"x":764.7962774179402,"y":-41.66146949279698},"dragging":false},{"width":384,"height":489,"id":"dndnode_216","type":"genericNode","position":{"x":741.7004274223395,"y":1023.597430357632},"data":{"type":"CharacterTextSplitter","node":{"template":{"documents":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"documents","advanced":false,"type":"BaseLoader","list":false},"separator":{"required":true,"placeholder":"","show":true,"multiline":false,"value":".","password":false,"name":"separator","advanced":false,"type":"str","list":false},"chunk_size":{"required":true,"placeholder":"","show":true,"multiline":false,"value":"2000","password":false,"name":"chunk_size","advanced":false,"type":"int","list":false},"chunk_overlap":{"required":true,"placeholder":"","show":true,"multiline":false,"value":200,"password":false,"name":"chunk_overlap","advanced":false,"type":"int","list":false},"_type":"CharacterTextSplitter"},"description":"Implementation of splitting text that looks at characters.","base_classes":["CharacterTextSplitter","BaseDocumentTransformer","TextSplitter"]},"id":"dndnode_216","value":null},"selected":false,"positionAbsolute":{"x":741.7004274223395,"y":1023.597430357632},"dragging":false},{"width":384,"height":267,"id":"dndnode_217","type":"genericNode","position":{"x":1301.2422429392857,"y":152.6224992269589},"data":{"type":"Chroma","node":{"template":{"documents":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"documents","advanced":false,"type":"TextSplitter","list":false},"embedding":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"embedding","advanced":false,"type":"Embeddings","list":false},"_type":"Chroma"},"description":"Wrapper around ChromaDB embeddings platform.","base_classes":["Chroma","VectorStore"]},"id":"dndnode_217","value":null},"selected":true,"positionAbsolute":{"x":1301.2422429392857,"y":152.6224992269589},"dragging":false},{"width":384,"height":531,"id":"dndnode_218","type":"genericNode","position":{"x":749.7322367184304,"y":472.14072103514684},"data":{"type":"OpenAIEmbeddings","node":{"template":{"client":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"client","advanced":false,"type":"Any","list":false},"model":{"required":false,"placeholder":"","show":false,"multiline":false,"value":"text-embedding-ada-002","password":false,"name":"model","advanced":false,"type":"str","list":false},"deployment":{"required":false,"placeholder":"","show":false,"multiline":false,"value":"text-embedding-ada-002","password":false,"name":"deployment","advanced":false,"type":"str","list":false},"openai_api_version":{"required":false,"placeholder":"","show":true,"multiline":false,"value":"","password":true,"name":"openai_api_version","advanced":false,"type":"str","list":false},"openai_api_base":{"required":false,"placeholder":"","show":true,"multiline":false,"password":true,"name":"openai_api_base","advanced":false,"type":"str","list":false,"value":""},"openai_api_type":{"required":false,"placeholder":"","show":true,"multiline":false,"password":true,"name":"openai_api_type","advanced":false,"type":"str","list":false,"value":""},"embedding_ctx_length":{"required":false,"placeholder":"","show":false,"multiline":false,"value":8191,"password":false,"name":"embedding_ctx_length","advanced":false,"type":"int","list":false},"openai_api_key":{"required":false,"placeholder":"","show":true,"multiline":false,"value":"","password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"type":"str","list":false},"openai_organization":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"openai_organization","advanced":false,"type":"str","list":false},"allowed_special":{"required":false,"placeholder":"","show":false,"multiline":false,"value":[],"password":false,"name":"allowed_special","advanced":false,"type":"Literal'all'","list":true},"disallowed_special":{"required":false,"placeholder":"","show":false,"multiline":false,"value":"all","password":false,"name":"disallowed_special","advanced":false,"type":"Literal'all'","list":true},"chunk_size":{"required":false,"placeholder":"","show":false,"multiline":false,"value":1000,"password":false,"name":"chunk_size","advanced":false,"type":"int","list":false},"max_retries":{"required":false,"placeholder":"","show":false,"multiline":false,"value":6,"password":false,"name":"max_retries","advanced":false,"type":"int","list":false},"_type":"OpenAIEmbeddings"},"description":"Wrapper around OpenAI embedding models.","base_classes":["OpenAIEmbeddings","Embeddings"]},"id":"dndnode_218","value":null},"selected":false,"positionAbsolute":{"x":749.7322367184304,"y":472.14072103514684},"dragging":false},{"width":384,"height":267,"id":"dndnode_219","type":"genericNode","position":{"x":1319.0884617250285,"y":830.8624396889157},"data":{"type":"Chroma","node":{"template":{"documents":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"documents","advanced":false,"type":"TextSplitter","list":false},"embedding":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"embedding","advanced":false,"type":"Embeddings","list":false},"_type":"Chroma"},"description":"Wrapper around ChromaDB embeddings platform.","base_classes":["Chroma","VectorStore"]},"id":"dndnode_219","value":null},"selected":false,"positionAbsolute":{"x":1319.0884617250285,"y":830.8624396889157},"dragging":false},{"width":384,"height":399,"id":"dndnode_220","type":"genericNode","position":{"x":1749.0884617250285,"y":164.46243968891588},"data":{"type":"VectorStoreInfo","node":{"template":{"vectorstore":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"vectorstore","advanced":false,"type":"VectorStore","list":false},"name":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"name","advanced":false,"type":"str","list":false,"value":"state_of_union_address"},"description":{"required":true,"placeholder":"","show":true,"multiline":true,"password":false,"name":"description","advanced":false,"type":"str","list":false,"value":"the most recent state of the Union address\n"},"_type":"VectorStoreInfo"},"description":"Information about a vectorstore.","base_classes":["VectorStoreInfo"]},"id":"dndnode_220","value":null},"selected":false,"positionAbsolute":{"x":1749.0884617250285,"y":164.46243968891588},"dragging":false},{"width":384,"height":399,"id":"dndnode_221","type":"genericNode","position":{"x":1781.0884617250285,"y":766.4624396889159},"data":{"type":"VectorStoreInfo","node":{"template":{"vectorstore":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"vectorstore","advanced":false,"type":"VectorStore","list":false},"name":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"name","advanced":false,"type":"str","list":false,"value":"ruff"},"description":{"required":true,"placeholder":"","show":true,"multiline":true,"password":false,"name":"description","advanced":false,"type":"str","list":false,"value":"Information about the Ruff python linting library\n"},"_type":"VectorStoreInfo"},"description":"Information about a vectorstore.","base_classes":["VectorStoreInfo"]},"id":"dndnode_221","value":null},"selected":false,"positionAbsolute":{"x":1781.0884617250285,"y":766.4624396889159},"dragging":false},{"width":384,"height":227,"id":"dndnode_222","type":"genericNode","position":{"x":2259.0884617250285,"y":382.4624396889159},"data":{"type":"VectorStoreRouterToolkit","node":{"template":{"vectorstores":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"vectorstores","advanced":false,"type":"VectorStoreInfo","list":true},"llm":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"llm","advanced":false,"type":"BaseLanguageModel","list":false},"_type":"VectorStoreRouterToolkit"},"description":"Toolkit for routing between vectorstores.","base_classes":["VectorStoreRouterToolkit","BaseToolkit"]},"id":"dndnode_222","value":null},"selected":false,"positionAbsolute":{"x":2259.0884617250285,"y":382.4624396889159},"dragging":false},{"width":384,"height":597,"id":"dndnode_223","type":"genericNode","position":{"x":2247.0884617250285,"y":686.462439688916},"data":{"type":"OpenAI","node":{"template":{"cache":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"cache","advanced":false,"type":"bool","list":false},"verbose":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"verbose","advanced":false,"type":"bool","list":false},"callbacks":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"callbacks","advanced":false,"type":"langchain.callbacks.base.BaseCallbackHandler","list":true},"client":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"client","advanced":false,"type":"Any","list":false},"model_name":{"required":false,"placeholder":"","show":true,"multiline":false,"value":"text-davinci-003","password":false,"options":["text-davinci-003","text-davinci-002","text-curie-001","text-babbage-001","text-ada-001"],"name":"model_name","advanced":false,"type":"str","list":true},"temperature":{"required":false,"placeholder":"","show":true,"multiline":false,"value":0.7,"password":false,"name":"temperature","advanced":false,"type":"float","list":false},"max_tokens":{"required":false,"placeholder":"","show":true,"multiline":false,"value":256,"password":true,"name":"max_tokens","advanced":false,"type":"int","list":false},"top_p":{"required":false,"placeholder":"","show":false,"multiline":false,"value":1,"password":false,"name":"top_p","advanced":false,"type":"float","list":false},"frequency_penalty":{"required":false,"placeholder":"","show":false,"multiline":false,"value":0,"password":false,"name":"frequency_penalty","advanced":false,"type":"float","list":false},"presence_penalty":{"required":false,"placeholder":"","show":false,"multiline":false,"value":0,"password":false,"name":"presence_penalty","advanced":false,"type":"float","list":false},"n":{"required":false,"placeholder":"","show":false,"multiline":false,"value":1,"password":false,"name":"n","advanced":false,"type":"int","list":false},"best_of":{"required":false,"placeholder":"","show":false,"multiline":false,"value":1,"password":false,"name":"best_of","advanced":false,"type":"int","list":false},"model_kwargs":{"required":false,"placeholder":"","show":true,"multiline":false,"password":false,"name":"model_kwargs","advanced":true,"type":"code","list":false},"openai_api_key":{"required":false,"placeholder":"","show":true,"multiline":false,"value":"","password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"type":"str","list":false},"openai_api_base":{"required":false,"placeholder":"","show":true,"multiline":false,"password":true,"name":"openai_api_base","advanced":false,"type":"str","list":false,"value":""},"openai_organization":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"openai_organization","advanced":false,"type":"str","list":false},"batch_size":{"required":false,"placeholder":"","show":false,"multiline":false,"value":20,"password":false,"name":"batch_size","advanced":false,"type":"int","list":false},"request_timeout":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"request_timeout","advanced":false,"type":"float","list":false},"logit_bias":{"required":false,"placeholder":"","show":false,"multiline":false,"password":false,"name":"logit_bias","advanced":false,"type":"code","list":false},"max_retries":{"required":false,"placeholder":"","show":false,"multiline":false,"value":6,"password":false,"name":"max_retries","advanced":false,"type":"int","list":false},"streaming":{"required":false,"placeholder":"","show":false,"multiline":false,"value":false,"password":false,"name":"streaming","advanced":false,"type":"bool","list":false},"allowed_special":{"required":false,"placeholder":"","show":false,"multiline":false,"value":[],"password":false,"name":"allowed_special","advanced":false,"type":"Literal'all'","list":true},"disallowed_special":{"required":false,"placeholder":"","show":false,"multiline":false,"value":"all","password":false,"name":"disallowed_special","advanced":false,"type":"Literal'all'","list":false},"_type":"OpenAI"},"description":"Wrapper around OpenAI large language models.","base_classes":["BaseLLM","BaseOpenAI","OpenAI","BaseLanguageModel"]},"id":"dndnode_223","value":null},"selected":false,"positionAbsolute":{"x":2247.0884617250285,"y":686.462439688916},"dragging":false},{"width":384,"height":267,"id":"dndnode_224","type":"genericNode","position":{"x":2741.0884617250285,"y":416.4624396889159},"data":{"type":"VectorStoreRouterAgent","node":{"template":{"vectorstoreroutertoolkit":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"vectorstoreroutertoolkit","display_name":"Vector Store Router Toolkit","advanced":false,"type":"VectorStoreRouterToolkit","list":false},"llm":{"required":true,"placeholder":"","show":true,"multiline":false,"password":false,"name":"llm","display_name":"LLM","advanced":false,"type":"BaseLanguageModel","list":false},"_type":"vectorstorerouter_agent"},"description":"Construct an agent from a Vector Store Router.","base_classes":["AgentExecutor"]},"id":"dndnode_224","value":null},"selected":false,"positionAbsolute":{"x":2741.0884617250285,"y":416.4624396889159},"dragging":false}],"edges":[{"source":"dndnode_213","sourceHandle":"TextLoader|dndnode_213|TextLoader|BaseLoader","target":"dndnode_215","targetHandle":"BaseLoader|documents|dndnode_215","className":"animate-pulse","id":"reactflow__edge-dndnode_213TextLoader|dndnode_213|TextLoader|BaseLoader-dndnode_215BaseLoader|documents|dndnode_215","selected":false},{"source":"dndnode_214","sourceHandle":"WebBaseLoader|dndnode_214|WebBaseLoader|BaseLoader","target":"dndnode_216","targetHandle":"BaseLoader|documents|dndnode_216","className":"animate-pulse","id":"reactflow__edge-dndnode_214WebBaseLoader|dndnode_214|WebBaseLoader|BaseLoader-dndnode_216BaseLoader|documents|dndnode_216","selected":false},{"source":"dndnode_215","sourceHandle":"CharacterTextSplitter|dndnode_215|CharacterTextSplitter|BaseDocumentTransformer|TextSplitter","target":"dndnode_217","targetHandle":"TextSplitter|documents|dndnode_217","className":"animate-pulse","id":"reactflow__edge-dndnode_215CharacterTextSplitter|dndnode_215|CharacterTextSplitter|BaseDocumentTransformer|TextSplitter-dndnode_217TextSplitter|documents|dndnode_217","selected":false},{"source":"dndnode_218","sourceHandle":"OpenAIEmbeddings|dndnode_218|OpenAIEmbeddings|Embeddings","target":"dndnode_217","targetHandle":"Embeddings|embedding|dndnode_217","className":"animate-pulse","id":"reactflow__edge-dndnode_218OpenAIEmbeddings|dndnode_218|OpenAIEmbeddings|Embeddings-dndnode_217Embeddings|embedding|dndnode_217","selected":false},{"source":"dndnode_216","sourceHandle":"CharacterTextSplitter|dndnode_216|CharacterTextSplitter|BaseDocumentTransformer|TextSplitter","target":"dndnode_219","targetHandle":"TextSplitter|documents|dndnode_219","className":"animate-pulse","id":"reactflow__edge-dndnode_216CharacterTextSplitter|dndnode_216|CharacterTextSplitter|BaseDocumentTransformer|TextSplitter-dndnode_219TextSplitter|documents|dndnode_219","selected":false},{"source":"dndnode_218","sourceHandle":"OpenAIEmbeddings|dndnode_218|OpenAIEmbeddings|Embeddings","target":"dndnode_219","targetHandle":"Embeddings|embedding|dndnode_219","className":"animate-pulse","id":"reactflow__edge-dndnode_218OpenAIEmbeddings|dndnode_218|OpenAIEmbeddings|Embeddings-dndnode_219Embeddings|embedding|dndnode_219","selected":false},{"source":"dndnode_217","sourceHandle":"Chroma|dndnode_217|Chroma|VectorStore","target":"dndnode_220","targetHandle":"VectorStore|vectorstore|dndnode_220","className":"animate-pulse","id":"reactflow__edge-dndnode_217Chroma|dndnode_217|Chroma|VectorStore-dndnode_220VectorStore|vectorstore|dndnode_220","selected":false},{"source":"dndnode_219","sourceHandle":"Chroma|dndnode_219|Chroma|VectorStore","target":"dndnode_221","targetHandle":"VectorStore|vectorstore|dndnode_221","className":"animate-pulse","id":"reactflow__edge-dndnode_219Chroma|dndnode_219|Chroma|VectorStore-dndnode_221VectorStore|vectorstore|dndnode_221","selected":false},{"source":"dndnode_220","sourceHandle":"VectorStoreInfo|dndnode_220|VectorStoreInfo","target":"dndnode_222","targetHandle":"VectorStoreInfo|vectorstores|dndnode_222","className":"animate-pulse","id":"reactflow__edge-dndnode_220VectorStoreInfo|dndnode_220|VectorStoreInfo-dndnode_222VectorStoreInfo|vectorstores|dndnode_222","selected":false},{"source":"dndnode_221","sourceHandle":"VectorStoreInfo|dndnode_221|VectorStoreInfo","target":"dndnode_222","targetHandle":"VectorStoreInfo|vectorstores|dndnode_222","className":"animate-pulse","id":"reactflow__edge-dndnode_221VectorStoreInfo|dndnode_221|VectorStoreInfo-dndnode_222VectorStoreInfo|vectorstores|dndnode_222","selected":false},{"source":"dndnode_223","sourceHandle":"OpenAI|dndnode_223|BaseLLM|BaseOpenAI|OpenAI|BaseLanguageModel","target":"dndnode_224","targetHandle":"BaseLanguageModel|llm|dndnode_224","className":"animate-pulse","id":"reactflow__edge-dndnode_223OpenAI|dndnode_223|BaseLLM|BaseOpenAI|OpenAI|BaseLanguageModel-dndnode_224BaseLanguageModel|llm|dndnode_224","selected":false},{"source":"dndnode_222","sourceHandle":"VectorStoreRouterToolkit|dndnode_222|VectorStoreRouterToolkit|BaseToolkit","target":"dndnode_224","targetHandle":"VectorStoreRouterToolkit|vectorstoreroutertoolkit|dndnode_224","className":"animate-pulse","id":"reactflow__edge-dndnode_222VectorStoreRouterToolkit|dndnode_222|VectorStoreRouterToolkit|BaseToolkit-dndnode_224VectorStoreRouterToolkit|vectorstoreroutertoolkit|dndnode_224","selected":false}],"viewport":{"x":27.70798566234498,"y":76.92203484317952,"zoom":0.5}}} |