XHNlY3Rpb257XG1vZHVsZXtwb3BlbjJ9IC0tLQogICAgICAgICBTdWJwcm9jZXNzZXMgd2l0aCBhY2Nlc3NpYmxlIEkvTyBzdHJlYW1zfQoKXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e3BvcGVuMn0KICBccGxhdGZvcm17VW5peCwgV2luZG93c30KXG1vZHVsZXN5bm9wc2lze1N1YnByb2Nlc3NlcyB3aXRoIGFjY2Vzc2libGUgc3RhbmRhcmQgSS9PIHN0cmVhbXMufQpcc2VjdGlvbmF1dGhvcntEcmV3IENzaWxsYWd9e2RyZXdfY3NpbGxhZ0BnZW9jaXRpZXMuY29tfQoKClRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gc3Bhd24gcHJvY2Vzc2VzIGFuZCBjb25uZWN0IHRvIHRoZWlyCmlucHV0L291dHB1dC9lcnJvciBwaXBlcyBhbmQgb2J0YWluIHRoZWlyIHJldHVybiBjb2RlcyB1bmRlcgpcVU5JWHt9IGFuZCBXaW5kb3dzLgoKTm90ZSB0aGF0IHN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMCwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZQp1c2luZyBmdW5jdGlvbnMgZnJvbSB0aGUgXHJlZm1vZHVsZXtvc30gbW9kdWxlIHdoaWNoIGhhdmUgdGhlIHNhbWUKbmFtZXMgYXMgdGhlIGZhY3RvcnkgZnVuY3Rpb25zIGhlcmUsIGJ1dCB0aGUgb3JkZXIgb2YgdGhlIHJldHVybgp2YWx1ZXMgaXMgbW9yZSBpbnR1aXRpdmUgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZSB2YXJpYW50cy4KClRoZSBwcmltYXJ5IGludGVyZmFjZSBvZmZlcmVkIGJ5IHRoaXMgbW9kdWxlIGlzIGEgdHJpbyBvZiBmYWN0b3J5CmZ1bmN0aW9ucy4gIEZvciBlYWNoIG9mIHRoZXNlLCBpZiBcdmFye2J1ZnNpemV9IGlzIHNwZWNpZmllZCwgCml0IHNwZWNpZmllcyB0aGUgYnVmZmVyIHNpemUgZm9yIHRoZSBJL08gcGlwZXMuICBcdmFye21vZGV9LCBpZgpwcm92aWRlZCwgc2hvdWxkIGJlIHRoZSBzdHJpbmcgXGNvZGV7J2InfSBvciBcY29kZXsndCd9OyBvbiBXaW5kb3dzCnRoaXMgaXMgbmVlZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIG9iamVjdHMgc2hvdWxkIGJlIG9wZW5lZAppbiBiaW5hcnkgb3IgdGV4dCBtb2RlLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFx2YXJ7bW9kZX0gaXMKXGNvZGV7J3QnfS4KClRoZSBvbmx5IHdheSB0byByZXRyaWV2ZSB0aGUgcmV0dXJuIGNvZGVzIGZvciB0aGUgY2hpbGQgcHJvY2Vzc2VzIGlzCmJ5IHVzaW5nIHRoZSBcbWV0aG9ke3BvbGwoKX0gb3IgXG1ldGhvZHt3YWl0KCl9IG1ldGhvZHMgb24gdGhlClxjbGFzc3tQb3BlbjN9IGFuZCBcY2xhc3N7UG9wZW40fSBjbGFzc2VzOyB0aGVzZSBhcmUgb25seSBhdmFpbGFibGUgb24KXFVOSVguICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB1c2luZyB0aGUKXGZ1bmN0aW9ue3BvcGVuMigpfSwgXGZ1bmN0aW9ue3BvcGVuMygpfSwgYW5kIFxmdW5jdGlvbntwb3BlbjQoKX0KZnVuY3Rpb25zLCBvciB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbnMgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZS4KClxiZWdpbntmdW5jZGVzY317cG9wZW4yfXtjbWRcb3B0aW9uYWx7LCBidWZzaXplXG9wdGlvbmFseywgbW9kZX19fQpFeGVjdXRlcyBcdmFye2NtZH0gYXMgYSBzdWItcHJvY2Vzcy4gIFJldHVybnMgdGhlIGZpbGUgb2JqZWN0cwpcY29kZXsoXHZhcntjaGlsZF9zdGRvdXR9LCBcdmFye2NoaWxkX3N0ZGlufSl9LgpcZW5ke2Z1bmNkZXNjfQoKXGJlZ2lue2Z1bmNkZXNjfXtwb3BlbjN9e2NtZFxvcHRpb25hbHssIGJ1ZnNpemVcb3B0aW9uYWx7LCBtb2RlfX19CkV4ZWN1dGVzIFx2YXJ7Y21kfSBhcyBhIHN1Yi1wcm9jZXNzLiAgUmV0dXJucyB0aGUgZmlsZSBvYmplY3RzClxjb2RleyhcdmFye2NoaWxkX3N0ZG91dH0sIFx2YXJ7Y2hpbGRfc3RkaW59LCBcdmFye2NoaWxkX3N0ZGVycn0pfS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317cG9wZW40fXtjbWRcb3B0aW9uYWx7LCBidWZzaXplXG9wdGlvbmFseywgbW9kZX19fQpFeGVjdXRlcyBcdmFye2NtZH0gYXMgYSBzdWItcHJvY2Vzcy4gIFJldHVybnMgdGhlIGZpbGUgb2JqZWN0cwpcY29kZXsoXHZhcntjaGlsZF9zdGRvdXRfYW5kX3N0ZGVycn0sIFx2YXJ7Y2hpbGRfc3RkaW59KX0uClx2ZXJzaW9uYWRkZWR7Mi4wfQpcZW5ke2Z1bmNkZXNjfQoKCk9uIFxVTklYLCBhIGNsYXNzIGRlZmluaW5nIHRoZSBvYmplY3RzIHJldHVybmVkIGJ5IHRoZSBmYWN0b3J5CmZ1bmN0aW9ucyBpcyBhbHNvIGF2YWlsYWJsZS4gIFRoZXNlIGFyZSBub3QgdXNlZCBmb3IgdGhlIFdpbmRvd3MKaW1wbGVtZW50YXRpb24sIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBvbiB0aGF0IHBsYXRmb3JtLgoKXGJlZ2lue2NsYXNzZGVzY317UG9wZW4zfXtjbWRcb3B0aW9uYWx7LCBjYXB0dXJlc3RkZXJyXG9wdGlvbmFseywgYnVmc2l6ZX19fQpUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBjaGlsZCBwcm9jZXNzLiAgTm9ybWFsbHksIFxjbGFzc3tQb3BlbjN9Cmluc3RhbmNlcyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgXGZ1bmN0aW9ue3BvcGVuMigpfSBhbmQKXGZ1bmN0aW9ue3BvcGVuMygpfSBmYWN0b3J5IGZ1bmN0aW9ucyBkZXNjcmliZWQgYWJvdmUuCgpJZiBub3QgdXNpbmcgb25lIG9mIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBcY2xhc3N7UG9wZW4zfQpvYmplY3RzLCB0aGUgcGFyYW1ldGVyIFx2YXJ7Y21kfSBpcyB0aGUgc2hlbGwgY29tbWFuZCB0byBleGVjdXRlIGluIGEKc3ViLXByb2Nlc3MuICBUaGUgXHZhcntjYXB0dXJlc3RkZXJyfSBmbGFnLCBpZiB0cnVlLCBzcGVjaWZpZXMgdGhhdAp0aGUgb2JqZWN0IHNob3VsZCBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIG91dHB1dCBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4KVGhlIGRlZmF1bHQgaXMgZmFsc2UuICBJZiB0aGUgXHZhcntidWZzaXplfSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCBpdApzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIEkvTyBidWZmZXJzIHRvL2Zyb20gdGhlIGNoaWxkIHByb2Nlc3MuClxlbmR7Y2xhc3NkZXNjfQoKXGJlZ2lue2NsYXNzZGVzY317UG9wZW40fXtjbWRcb3B0aW9uYWx7LCBidWZzaXplfX0KU2ltaWxhciB0byBcY2xhc3N7UG9wZW4zfSwgYnV0IGFsd2F5cyBjYXB0dXJlcyBzdGFuZGFyZCBlcnJvciBpbnRvIHRoZQpzYW1lIGZpbGUgb2JqZWN0IGFzIHN0YW5kYXJkIG91dHB1dC4gIFRoZXNlIGFyZSB0eXBpY2FsbHkgY3JlYXRlZAp1c2luZyBcZnVuY3Rpb257cG9wZW40KCl9LgpcdmVyc2lvbmFkZGVkezIuMH0KXGVuZHtjbGFzc2Rlc2N9CgoKXHN1YnNlY3Rpb257UG9wZW4zIGFuZCBQb3BlbjQgT2JqZWN0cyBcbGFiZWx7cG9wZW4zLW9iamVjdHN9fQoKSW5zdGFuY2VzIG9mIHRoZSBcY2xhc3N7UG9wZW4zfSBhbmQgXGNsYXNze1BvcGVuNH0gY2xhc3NlcyBoYXZlIHRoZQpmb2xsb3dpbmcgbWV0aG9kczoKClxiZWdpbnttZXRob2RkZXNjfXtwb2xsfXt9ClJldHVybnMgXGNvZGV7LTF9IGlmIGNoaWxkIHByb2Nlc3MgaGFzbid0IGNvbXBsZXRlZCB5ZXQsIG9yIGl0cyByZXR1cm4gCmNvZGUgb3RoZXJ3aXNlLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY317d2FpdH17fQpXYWl0cyBmb3IgYW5kIHJldHVybnMgdGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBjaGlsZCBwcm9jZXNzLiAgVGhlCnN0YXR1cyBjb2RlIGVuY29kZXMgYm90aCB0aGUgcmV0dXJuIGNvZGUgb2YgdGhlIHByb2Nlc3MgYW5kCmluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgaXQgZXhpdGVkIHVzaW5nIHRoZSBcY2Z1bmN0aW9ue2V4aXQoKX0Kc3lzdGVtIGNhbGwgb3IgZGllZCBkdWUgdG8gYSBzaWduYWwuICBGdW5jdGlvbnMgdG8gaGVscCBpbnRlcnByZXQgdGhlCnN0YXR1cyBjb2RlIGFyZSBkZWZpbmVkIGluIHRoZSBccmVmbW9kdWxle29zfSBtb2R1bGU7IHNlZSBzZWN0aW9uClxyZWZ7b3MtcHJvY2Vzc30gZm9yIHRoZSBcZnVuY3Rpb257V1x2YXJ7Kn0oKX0gZmFtaWx5IG9mIGZ1bmN0aW9ucy4KXGVuZHttZXRob2RkZXNjfQoKClRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGU6IAoKXGJlZ2lue21lbWJlcmRlc2N9e2Zyb21jaGlsZH0KQSBmaWxlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG91dHB1dCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzLiAgRm9yClxjbGFzc3tQb3BlbjR9IGluc3RhbmNlcywgdGhpcyB3aWxsIHByb3ZpZGUgYm90aCB0aGUgc3RhbmRhcmQgb3V0cHV0CmFuZCBzdGFuZGFyZCBlcnJvciBzdHJlYW1zLgpcZW5ke21lbWJlcmRlc2N9CgpcYmVnaW57bWVtYmVyZGVzY317dG9jaGlsZH0KQSBmaWxlIG9iamVjdCB0aGF0IHByb3ZpZGVzIGlucHV0IHRvIHRoZSBjaGlsZCBwcm9jZXNzLgpcZW5ke21lbWJlcmRlc2N9CgpcYmVnaW57bWVtYmVyZGVzY317Y2hpbGRlcnJ9CldoZXJlIHRoZSBzdGFuZGFyZCBlcnJvciBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIGdvZXMgaXMKXHZhcntjYXB0dXJlc3RkZXJyfSB3YXMgdHJ1ZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBvciBcY29kZXtOb25lfS4KVGhpcyB3aWxsIGFsd2F5cyBiZSBcY29kZXtOb25lfSBmb3IgXGNsYXNze1BvcGVuNH0gaW5zdGFuY2VzLgpcZW5ke21lbWJlcmRlc2N9CgpcYmVnaW57bWVtYmVyZGVzY317cGlkfQpUaGUgcHJvY2VzcyBJRCBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4KXGVuZHttZW1iZXJkZXNjfQoKClxzdWJzZWN0aW9ue0Zsb3cgQ29udHJvbCBJc3N1ZXMgXGxhYmVse3BvcGVuMi1mbG93LWNvbnRyb2x9fQoKQW55IHRpbWUgeW91IGFyZSB3b3JraW5nIHdpdGggYW55IGZvcm0gb2YgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uLApjb250cm9sIGZsb3cgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IHRob3VnaHQgb3V0LiAgVGhpcyByZW1haW5zIHRoZSBjYXNlCndpdGggdGhlIGZpbGUgb2JqZWN0cyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZSAob3IgdGhlIFxyZWZtb2R1bGV7b3N9Cm1vZHVsZSBlcXVpdmFsZW50cykuCgolIEV4YW1wbGUgZXhwbGFuYXRpb24gYW5kIHN1Z2dlc3RlZCB3b3JrLWFyb3VuZHMgc3Vic3RhbnRpYWxseSBzdG9sZW4KJSBmcm9tIE1hcnRpbiB2b24gTPZ3aXM6CiUgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDAwLVNlcHRlbWJlci8wMDk0NjAuaHRtbAoKV2hlbiByZWFkaW5nIG91dHB1dCBmcm9tIGEgY2hpbGQgcHJvY2VzcyB0aGF0IHdyaXRlcyBhIGxvdCBvZiBkYXRhIHRvCnN0YW5kYXJkIGVycm9yIHdoaWxlIHRoZSBwYXJlbnQgaXMgcmVhZGluZyBmcm9tIHRoZSBjaGlsZCdzIHN0YW5kYXJkCm91dHB1dCwgYSBkZWFkbG9jayBjYW4gb2NjdXIuICBBIHNpbWlsYXIgc2l0dWF0aW9uIGNhbiBvY2N1ciB3aXRoIG90aGVyCmNvbWJpbmF0aW9ucyBvZiByZWFkcyBhbmQgd3JpdGVzLiAgVGhlIGVzc2VudGlhbCBmYWN0b3JzIGFyZSB0aGF0IG1vcmUKdGhhbiBcY29uc3RhbnR7X1BDX1BJUEVfQlVGfSBieXRlcyBhcmUgYmVpbmcgd3JpdHRlbiBieSBvbmUgcHJvY2VzcyBpbgphIGJsb2NraW5nIGZhc2hpb24sIHdoaWxlIHRoZSBvdGhlciBwcm9jZXNzIGlzIHJlYWRpbmcgZnJvbSB0aGUgb3RoZXIKcHJvY2VzcywgYWxzbyBpbiBhIGJsb2NraW5nIGZhc2hpb24uCgpUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRlYWwgd2l0aCB0aGlzIHNpdHVhdGlvbi4KClRoZSBzaW1wbGVzdCBhcHBsaWNhdGlvbiBjaGFuZ2UsIGluIG1hbnkgY2FzZXMsIHdpbGwgYmUgdG8gZm9sbG93IHRoaXMKbW9kZWwgaW4gdGhlIHBhcmVudCBwcm9jZXNzOgoKXGJlZ2lue3ZlcmJhdGltfQppbXBvcnQgcG9wZW4yCgpyLCB3LCBlID0gcG9wZW4yLnBvcGVuMygncHl0aG9uIHNsYXZlLnB5JykKZS5yZWFkbGluZXMoKQpyLnJlYWRsaW5lcygpCnIuY2xvc2UoKQplLmNsb3NlKCkKdy5jbG9zZSgpClxlbmR7dmVyYmF0aW19Cgp3aXRoIGNvZGUgbGlrZSB0aGlzIGluIHRoZSBjaGlsZDoKClxiZWdpbnt2ZXJiYXRpbX0KaW1wb3J0IG9zCmltcG9ydCBzeXMKCiMgbm90ZSB0aGF0IGVhY2ggb2YgdGhlc2UgcHJpbnQgc3RhdGVtZW50cwojIHdyaXRlcyBhIHNpbmdsZSBsb25nIHN0cmluZwoKcHJpbnQgPj5zeXMuc3RkZXJyLCA0MDAgKiAndGhpcyBpcyBhIHRlc3RcbicKb3MuY2xvc2Uoc3lzLnN0ZGVyci5maWxlbm8oKSkKcHJpbnQgPj5zeXMuc3Rkb3V0LCA0MDAgKiAndGhpcyBpcyBhbm90aGVyIHRlc3RcbicKXGVuZHt2ZXJiYXRpbX0KCkluIHBhcnRpY3VsYXIsIG5vdGUgdGhhdCBcY29kZXtzeXMuc3RkZXJyfSBtdXN0IGJlIGNsb3NlZCBhZnRlcgp3cml0aW5nIGFsbCBkYXRhLCBvciBcbWV0aG9ke3JlYWRsaW5lcygpfSB3b24ndCByZXR1cm4uICBBbHNvIG5vdGUKdGhhdCBcZnVuY3Rpb257b3MuY2xvc2UoKX0gbXVzdCBiZSB1c2VkLCBhcyBcY29kZXtzeXMuc3RkZXJyLmNsb3NlKCl9Cndvbid0IGNsb3NlIFxjb2Rle3N0ZGVycn0gKG90aGVyd2lzZSBhc3NpZ25pbmcgdG8gXGNvZGV7c3lzLnN0ZGVycn0Kd2lsbCBzaWxlbnRseSBjbG9zZSBpdCwgc28gbm8gZnVydGhlciBlcnJvcnMgY2FuIGJlIHByaW50ZWQpLgoKQXBwbGljYXRpb25zIHdoaWNoIG5lZWQgdG8gc3VwcG9ydCBhIG1vcmUgZ2VuZXJhbCBhcHByb2FjaCBzaG91bGQKaW50ZWdyYXRlIEkvTyBvdmVyIHBpcGVzIHdpdGggdGhlaXIgXGZ1bmN0aW9ue3NlbGVjdCgpfSBsb29wcywgb3IgdXNlCnNlcGFyYXRlIHRocmVhZHMgdG8gcmVhZCBlYWNoIG9mIHRoZSBpbmRpdmlkdWFsIGZpbGVzIHByb3ZpZGVkIGJ5CndoaWNoZXZlciBcZnVuY3Rpb257cG9wZW4qKCl9IGZ1bmN0aW9uIG9yIFxjbGFzc3tQb3Blbip9IGNsYXNzIHdhcwp1c2VkLgo=