XHNlY3Rpb257XG1vZHVsZXtwb3BlbjJ9IC0tLQogICAgICAgICBTdWJwcm9jZXNzZXMgd2l0aCBhY2Nlc3NpYmxlIEkvTyBzdHJlYW1zfQoKXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e3BvcGVuMn0KICBccGxhdGZvcm17VW5peCwgV2luZG93c30KXG1vZHVsZXN5bm9wc2lze1N1YnByb2Nlc3NlcyB3aXRoIGFjY2Vzc2libGUgc3RhbmRhcmQgSS9PIHN0cmVhbXMufQpcc2VjdGlvbmF1dGhvcntEcmV3IENzaWxsYWd9e2RyZXdfY3NpbGxhZ0BnZW9jaXRpZXMuY29tfQoKClRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gc3Bhd24gcHJvY2Vzc2VzIGFuZCBjb25uZWN0IHRvIHRoZWlyCmlucHV0L291dHB1dC9lcnJvciBwaXBlcyBhbmQgb2J0YWluIHRoZWlyIHJldHVybiBjb2RlcyB1bmRlcgpcVU5JWHt9IGFuZCBXaW5kb3dzLgoKTm90ZSB0aGF0IHN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMCwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZQp1c2luZyBmdW5jdGlvbnMgZnJvbSB0aGUgXHJlZm1vZHVsZXtvc30gbW9kdWxlIHdoaWNoIGhhdmUgdGhlIHNhbWUKbmFtZXMgYXMgdGhlIGZhY3RvcnkgZnVuY3Rpb25zIGhlcmUsIGJ1dCB0aGUgb3JkZXIgb2YgdGhlIHJldHVybgp2YWx1ZXMgaXMgbW9yZSBpbnR1aXRpdmUgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZSB2YXJpYW50cy4KClRoZSBwcmltYXJ5IGludGVyZmFjZSBvZmZlcmVkIGJ5IHRoaXMgbW9kdWxlIGlzIGEgdHJpbyBvZiBmYWN0b3J5CmZ1bmN0aW9ucy4gIEZvciBlYWNoIG9mIHRoZXNlLCBpZiBcdmFye2J1ZnNpemV9IGlzIHNwZWNpZmllZCwgCml0IHNwZWNpZmllcyB0aGUgYnVmZmVyIHNpemUgZm9yIHRoZSBJL08gcGlwZXMuICBcdmFye21vZGV9LCBpZgpwcm92aWRlZCwgc2hvdWxkIGJlIHRoZSBzdHJpbmcgXGNvZGV7J2InfSBvciBcY29kZXsndCd9OyBvbiBXaW5kb3dzCnRoaXMgaXMgbmVlZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIG9iamVjdHMgc2hvdWxkIGJlIG9wZW5lZAppbiBiaW5hcnkgb3IgdGV4dCBtb2RlLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFx2YXJ7bW9kZX0gaXMKXGNvZGV7J3QnfS4KClRoZSBvbmx5IHdheSB0byByZXRyaWV2ZSB0aGUgcmV0dXJuIGNvZGVzIGZvciB0aGUgY2hpbGQgcHJvY2Vzc2VzIGlzCmJ5IHVzaW5nIHRoZSBcbWV0aG9ke3BvbGwoKX0gb3IgXG1ldGhvZHt3YWl0KCl9IG1ldGhvZHMgb24gdGhlClxjbGFzc3tQb3BlbjN9IGFuZCBcY2xhc3N7UG9wZW40fSBjbGFzc2VzOyB0aGVzZSBhcmUgb25seSBhdmFpbGFibGUgb24KXFVOSVguICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB1c2luZyB0aGUKXGZ1bmN0aW9ue3BvcGVuMigpfSwgXGZ1bmN0aW9ue3BvcGVuMygpfSwgYW5kIFxmdW5jdGlvbntwb3BlbjQoKX0KZnVuY3Rpb25zLCBvciB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbnMgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZS4KClxiZWdpbntmdW5jZGVzY317cG9wZW4yfXtjbWRcb3B0aW9uYWx7LCBidWZzaXplXG9wdGlvbmFseywgbW9kZX19fQpFeGVjdXRlcyBcdmFye2NtZH0gYXMgYSBzdWItcHJvY2Vzcy4gIFJldHVybnMgdGhlIGZpbGUgb2JqZWN0cwpcY29kZXsoXHZhcntjaGlsZF9zdGRvdXR9LCBcdmFye2NoaWxkX3N0ZGlufSl9LgpcZW5ke2Z1bmNkZXNjfQoKXGJlZ2lue2Z1bmNkZXNjfXtwb3BlbjN9e2NtZFxvcHRpb25hbHssIGJ1ZnNpemVcb3B0aW9uYWx7LCBtb2RlfX19CkV4ZWN1dGVzIFx2YXJ7Y21kfSBhcyBhIHN1Yi1wcm9jZXNzLiAgUmV0dXJucyB0aGUgZmlsZSBvYmplY3RzClxjb2RleyhcdmFye2NoaWxkX3N0ZG91dH0sIFx2YXJ7Y2hpbGRfc3RkaW59LCBcdmFye2NoaWxkX3N0ZGVycn0pfS4KXGVuZHtmdW5jZGVzY30KClxiZWdpbntmdW5jZGVzY317cG9wZW40fXtjbWRcb3B0aW9uYWx7LCBidWZzaXplXG9wdGlvbmFseywgbW9kZX19fQpFeGVjdXRlcyBcdmFye2NtZH0gYXMgYSBzdWItcHJvY2Vzcy4gIFJldHVybnMgdGhlIGZpbGUgb2JqZWN0cwpcY29kZXsoXHZhcntjaGlsZF9zdGRvdXRfYW5kX3N0ZGVycn0sIFx2YXJ7Y2hpbGRfc3RkaW59KX0uClx2ZXJzaW9uYWRkZWR7Mi4wfQpcZW5ke2Z1bmNkZXNjfQoKCk9uIFxVTklYLCBhIGNsYXNzIGRlZmluaW5nIHRoZSBvYmplY3RzIHJldHVybmVkIGJ5IHRoZSBmYWN0b3J5CmZ1bmN0aW9ucyBpcyBhbHNvIGF2YWlsYWJsZS4gIFRoZXNlIGFyZSBub3QgdXNlZCBmb3IgdGhlIFdpbmRvd3MKaW1wbGVtZW50YXRpb24sIGFuZCBhcmUgbm90IGF2YWlsYWJsZSBvbiB0aGF0IHBsYXRmb3JtLgoKXGJlZ2lue2NsYXNzZGVzY317UG9wZW4zfXtjbWRcb3B0aW9uYWx7LCBjYXB0dXJlc3RkZXJyXG9wdGlvbmFseywgYnVmc2l6ZX19fQpUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBjaGlsZCBwcm9jZXNzLiAgTm9ybWFsbHksIFxjbGFzc3tQb3BlbjN9Cmluc3RhbmNlcyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgXGZ1bmN0aW9ue3BvcGVuMigpfSBhbmQKXGZ1bmN0aW9ue3BvcGVuMygpfSBmYWN0b3J5IGZ1bmN0aW9ucyBkZXNjcmliZWQgYWJvdmUuCgpJZiBub3QgdXNpbmcgb25lIG9mIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBcY2xhc3N7UG9wZW4zfQpvYmplY3RzLCB0aGUgcGFyYW1ldGVyIFx2YXJ7Y21kfSBpcyB0aGUgc2hlbGwgY29tbWFuZCB0byBleGVjdXRlIGluIGEKc3ViLXByb2Nlc3MuICBUaGUgXHZhcntjYXB0dXJlc3RkZXJyfSBmbGFnLCBpZiB0cnVlLCBzcGVjaWZpZXMgdGhhdAp0aGUgb2JqZWN0IHNob3VsZCBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIG91dHB1dCBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4KVGhlIGRlZmF1bHQgaXMgZmFsc2UuICBJZiB0aGUgXHZhcntidWZzaXplfSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCBpdApzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIEkvTyBidWZmZXJzIHRvL2Zyb20gdGhlIGNoaWxkIHByb2Nlc3MuClxlbmR7Y2xhc3NkZXNjfQoKXGJlZ2lue2NsYXNzZGVzY317UG9wZW40fXtjbWRcb3B0aW9uYWx7LCBidWZzaXplfX0KU2ltaWxhciB0byBcY2xhc3N7UG9wZW4zfSwgYnV0IGFsd2F5cyBjYXB0dXJlcyBzdGFuZGFyZCBlcnJvciBpbnRvIHRoZQpzYW1lIGZpbGUgb2JqZWN0IGFzIHN0YW5kYXJkIG91dHB1dC4gIFRoZXNlIGFyZSB0eXBpY2FsbHkgY3JlYXRlZAp1c2luZyBcZnVuY3Rpb257cG9wZW40KCl9LgpcdmVyc2lvbmFkZGVkezIuMH0KXGVuZHtjbGFzc2Rlc2N9CgoKXHN1YnNlY3Rpb257UG9wZW4zIGFuZCBQb3BlbjQgT2JqZWN0cyBcbGFiZWx7cG9wZW4zLW9iamVjdHN9fQoKSW5zdGFuY2VzIG9mIHRoZSBcY2xhc3N7UG9wZW4zfSBhbmQgXGNsYXNze1BvcGVuNH0gY2xhc3NlcyBoYXZlIHRoZQpmb2xsb3dpbmcgbWV0aG9kczoKClxiZWdpbnttZXRob2RkZXNjfXtwb2xsfXt9ClJldHVybnMgXGNvZGV7LTF9IGlmIGNoaWxkIHByb2Nlc3MgaGFzbid0IGNvbXBsZXRlZCB5ZXQsIG9yIGl0cyByZXR1cm4gCmNvZGUgb3RoZXJ3aXNlLgpcZW5ke21ldGhvZGRlc2N9CgpcYmVnaW57bWV0aG9kZGVzY317d2FpdH17fQpXYWl0cyBmb3IgYW5kIHJldHVybnMgdGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBjaGlsZCBwcm9jZXNzLiAgVGhlCnN0YXR1cyBjb2RlIGVuY29kZXMgYm90aCB0aGUgcmV0dXJuIGNvZGUgb2YgdGhlIHByb2Nlc3MgYW5kCmluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgaXQgZXhpdGVkIHVzaW5nIHRoZSBcY2Z1bmN0aW9ue2V4aXQoKX0Kc3lzdGVtIGNhbGwgb3IgZGllZCBkdWUgdG8gYSBzaWduYWwuICBGdW5jdGlvbnMgdG8gaGVscCBpbnRlcnByZXQgdGhlCnN0YXR1cyBjb2RlIGFyZSBkZWZpbmVkIGluIHRoZSBccmVmbW9kdWxle29zfSBtb2R1bGU7IHNlZSBzZWN0aW9uClxyZWZ7b3MtcHJvY2Vzc30gZm9yIHRoZSBcZnVuY3Rpb257V1x2YXJ7Kn0oKX0gZmFtaWx5IG9mIGZ1bmN0aW9ucy4KXGVuZHttZXRob2RkZXNjfQoKClRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGU6IAoKXGJlZ2lue21lbWJlcmRlc2N9e2Zyb21jaGlsZH0KQSBmaWxlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG91dHB1dCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzLiAgRm9yClxjbGFzc3tQb3BlbjR9IGluc3RhbmNlcywgdGhpcyB3aWxsIHByb3ZpZGUgYm90aCB0aGUgc3RhbmRhcmQgb3V0cHV0CmFuZCBzdGFuZGFyZCBlcnJvciBzdHJlYW1zLgpcZW5ke21lbWJlcmRlc2N9CgpcYmVnaW57bWVtYmVyZGVzY317dG9jaGlsZH0KQSBmaWxlIG9iamVjdCB0aGF0IHByb3ZpZGVzIGlucHV0IHRvIHRoZSBjaGlsZCBwcm9jZXNzLgpcZW5ke21lbWJlcmRlc2N9CgpcYmVnaW57bWVtYmVyZGVzY317Y2hpbGRlcnJ9CkEgZmlsZSBvYmplY3QgdGhhdCBwcm92aWRlcyBlcnJvciBvdXRwdXQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcywgaWYKXHZhcntjYXB0dXJlc3RkZXJyfSB3YXMgdHJ1ZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBvdGhlcndpc2UKXGNvZGV7Tm9uZX0uICBUaGlzIHdpbGwgYWx3YXlzIGJlIFxjb2Rle05vbmV9IGZvciBcY2xhc3N7UG9wZW40fQppbnN0YW5jZXMuClxlbmR7bWVtYmVyZGVzY30KClxiZWdpbnttZW1iZXJkZXNjfXtwaWR9ClRoZSBwcm9jZXNzIElEIG9mIHRoZSBjaGlsZCBwcm9jZXNzLgpcZW5ke21lbWJlcmRlc2N9CgoKXHN1YnNlY3Rpb257RmxvdyBDb250cm9sIElzc3VlcyBcbGFiZWx7cG9wZW4yLWZsb3ctY29udHJvbH19CgpBbnkgdGltZSB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhbnkgZm9ybSBvZiBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24sCmNvbnRyb2wgZmxvdyBuZWVkcyB0byBiZSBjYXJlZnVsbHkgdGhvdWdodCBvdXQuICBUaGlzIHJlbWFpbnMgdGhlIGNhc2UKd2l0aCB0aGUgZmlsZSBvYmplY3RzIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlIChvciB0aGUgXHJlZm1vZHVsZXtvc30KbW9kdWxlIGVxdWl2YWxlbnRzKS4KCiUgRXhhbXBsZSBleHBsYW5hdGlvbiBhbmQgc3VnZ2VzdGVkIHdvcmstYXJvdW5kcyBzdWJzdGFudGlhbGx5IHN0b2xlbgolIGZyb20gTWFydGluIHZvbiBM9ndpczoKJSBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDAtU2VwdGVtYmVyLzAwOTQ2MC5odG1sCgpXaGVuIHJlYWRpbmcgb3V0cHV0IGZyb20gYSBjaGlsZCBwcm9jZXNzIHRoYXQgd3JpdGVzIGEgbG90IG9mIGRhdGEgdG8Kc3RhbmRhcmQgZXJyb3Igd2hpbGUgdGhlIHBhcmVudCBpcyByZWFkaW5nIGZyb20gdGhlIGNoaWxkJ3Mgc3RhbmRhcmQKb3V0cHV0LCBhIGRlYWRsb2NrIGNhbiBvY2N1ci4gIEEgc2ltaWxhciBzaXR1YXRpb24gY2FuIG9jY3VyIHdpdGggb3RoZXIKY29tYmluYXRpb25zIG9mIHJlYWRzIGFuZCB3cml0ZXMuICBUaGUgZXNzZW50aWFsIGZhY3RvcnMgYXJlIHRoYXQgbW9yZQp0aGFuIFxjb25zdGFudHtfUENfUElQRV9CVUZ9IGJ5dGVzIGFyZSBiZWluZyB3cml0dGVuIGJ5IG9uZSBwcm9jZXNzIGluCmEgYmxvY2tpbmcgZmFzaGlvbiwgd2hpbGUgdGhlIG90aGVyIHByb2Nlc3MgaXMgcmVhZGluZyBmcm9tIHRoZSBvdGhlcgpwcm9jZXNzLCBhbHNvIGluIGEgYmxvY2tpbmcgZmFzaGlvbi4KClRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGVhbCB3aXRoIHRoaXMgc2l0dWF0aW9uLgoKVGhlIHNpbXBsZXN0IGFwcGxpY2F0aW9uIGNoYW5nZSwgaW4gbWFueSBjYXNlcywgd2lsbCBiZSB0byBmb2xsb3cgdGhpcwptb2RlbCBpbiB0aGUgcGFyZW50IHByb2Nlc3M6CgpcYmVnaW57dmVyYmF0aW19CmltcG9ydCBwb3BlbjIKCnIsIHcsIGUgPSBwb3BlbjIucG9wZW4zKCdweXRob24gc2xhdmUucHknKQplLnJlYWRsaW5lcygpCnIucmVhZGxpbmVzKCkKci5jbG9zZSgpCmUuY2xvc2UoKQp3LmNsb3NlKCkKXGVuZHt2ZXJiYXRpbX0KCndpdGggY29kZSBsaWtlIHRoaXMgaW4gdGhlIGNoaWxkOgoKXGJlZ2lue3ZlcmJhdGltfQppbXBvcnQgb3MKaW1wb3J0IHN5cwoKIyBub3RlIHRoYXQgZWFjaCBvZiB0aGVzZSBwcmludCBzdGF0ZW1lbnRzCiMgd3JpdGVzIGEgc2luZ2xlIGxvbmcgc3RyaW5nCgpwcmludCA+PnN5cy5zdGRlcnIsIDQwMCAqICd0aGlzIGlzIGEgdGVzdFxuJwpvcy5jbG9zZShzeXMuc3RkZXJyLmZpbGVubygpKQpwcmludCA+PnN5cy5zdGRvdXQsIDQwMCAqICd0aGlzIGlzIGFub3RoZXIgdGVzdFxuJwpcZW5ke3ZlcmJhdGltfQoKSW4gcGFydGljdWxhciwgbm90ZSB0aGF0IFxjb2Rle3N5cy5zdGRlcnJ9IG11c3QgYmUgY2xvc2VkIGFmdGVyCndyaXRpbmcgYWxsIGRhdGEsIG9yIFxtZXRob2R7cmVhZGxpbmVzKCl9IHdvbid0IHJldHVybi4gIEFsc28gbm90ZQp0aGF0IFxmdW5jdGlvbntvcy5jbG9zZSgpfSBtdXN0IGJlIHVzZWQsIGFzIFxjb2Rle3N5cy5zdGRlcnIuY2xvc2UoKX0Kd29uJ3QgY2xvc2UgXGNvZGV7c3RkZXJyfSAob3RoZXJ3aXNlIGFzc2lnbmluZyB0byBcY29kZXtzeXMuc3RkZXJyfQp3aWxsIHNpbGVudGx5IGNsb3NlIGl0LCBzbyBubyBmdXJ0aGVyIGVycm9ycyBjYW4gYmUgcHJpbnRlZCkuCgpBcHBsaWNhdGlvbnMgd2hpY2ggbmVlZCB0byBzdXBwb3J0IGEgbW9yZSBnZW5lcmFsIGFwcHJvYWNoIHNob3VsZAppbnRlZ3JhdGUgSS9PIG92ZXIgcGlwZXMgd2l0aCB0aGVpciBcZnVuY3Rpb257c2VsZWN0KCl9IGxvb3BzLCBvciB1c2UKc2VwYXJhdGUgdGhyZWFkcyB0byByZWFkIGVhY2ggb2YgdGhlIGluZGl2aWR1YWwgZmlsZXMgcHJvdmlkZWQgYnkKd2hpY2hldmVyIFxmdW5jdGlvbntwb3BlbiooKX0gZnVuY3Rpb24gb3IgXGNsYXNze1BvcGVuKn0gY2xhc3Mgd2FzCnVzZWQuCg==