aWJyb3dzZSBpcyBhIEhUVFAgY2xpZW50LiBUaGUgZm9sbG93aW5nIGFyZSBhIGxpc3Qgb2YgZmVhdHVyZXMuCiAgICAgICAgLSBSRkMyNjE2IGNvbXBsaWFudCAoQUZBSUspIAogICAgICAgIC0gc3VwcG9ydHMgR0VULCBQT1NULCBPUFRJT05TLCBIRUFELCBQVVQsIERFTEVURSwgVFJBQ0UsIAogICAgICAgICAgTUtDT0wsIFBST1BGSU5ELCBQUk9QUEFUQ0gsIExPQ0ssIFVOTE9DSywgTU9WRSBhbmQgQ09QWQogICAgICAgIC0gVW5kZXJzdGFuZHMgSFRUUC8wLjksIEhUVFAvMS4wIGFuZCBIVFRQLzEuMQogICAgICAgIC0gVW5kZXJzdGFuZHMgY2h1bmtlZCBlbmNvZGluZwogICAgICAgIC0gQ2FuIGdlbmVyYXRlIHJlcXVlc3RzIHVzaW5nIENodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKICAgICAgICAtIFBvb2xzIG9mIGNvbm5lY3Rpb25zIHRvIGVhY2ggd2Vic2VydmVyCiAgICAgICAgLSBQaXBlbGluaW5nIHN1cHBvcnQKICAgICAgICAtIERvd25sb2FkIHRvIGZpbGUKICAgICAgICAtIEFzeW5jaHJvbm91cyByZXF1ZXN0cy4gUmVzcG9uc2VzIGFyZSBzdHJlYW1lZCB0byBhIHByb2Nlc3MKICAgICAgICAtIEJhc2ljIGF1dGhlbnRpY2F0aW9uCiAgICAgICAgLSBTdXBwb3J0cyBwcm94eSBhdXRoZW50aWNhdGlvbgogICAgICAgIC0gQ2FuIHRhbGsgdG8gU2VjdXJlIHdlYnNlcnZlcnMgdXNpbmcgU1NMCiAgICAgICAgLSBhbnkgb3RoZXIgZmVhdHVyZXMgaW4gdGhlIGNvZGUgbm90IGxpc3RlZCBoZXJlIDopCgppYnJvd3NlIGlzIGF2YWlsYWJsZSB1bmRlciB0d28gZGlmZmVyZW50IGxpY2Vuc2VzLiBMR1BMIG9yIHRoZSBCU0QgbGljZW5zZS4KCkNvbW1lbnRzIHRvIDogQ2hhbmRyYXNoZWtoYXIuTXVsbGFwYXJ0aGlAZ21haWwuY29tCgpWZXJzaW9uIDogMi4xLjAKCkxhdGVzdCB2ZXJzaW9uIDogZ2l0Oi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS5naXQKCkNPTlRSSUJVVE9SUwo9PT09PT09PT09PT0KVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBoZWxwZWQgbWFrZWQgaWJyb3dzZSBiZXR0ZXIgYnkgcmVwb3J0aW5nIGJ1Z3MsCnN1cHBseWluZyBwYXRjaGVzIGFuZCBhbHNvIGFza2luZyBmb3IgbmV3IGZlYXR1cmVzLiBQbGVhc2Ugd3JpdGUgdG8gbWUgaWYgeW91CmhhdmUgY29udHJpYnV0ZWQgYW5kIEkndmUgbWlzc2VkIHlvdSBvdXQuCgpJbiBhbHBoYWJldGljYWwgb3JkZXI6CgpBZGFtIEtvY29sb3NraQpBbmRyZXcgVHVubmVsbC1Kb25lcwpBbnRob255IE1vbGluYXJvCkJlbm9pdCBDaGVzbmVhdQpDaHJpcyBOZXdjb21iZQpEYW4gS2VsbGV5CkRlcmVrIFVwaGFtCkVyaWMgTWVycml0dApFcmlrIFJlaXRzbWEKRmlsaXBlIERhdmlkIE1hbmFuYQpHZW9mZiBDYW50Ckplcm9lbiBLb29wcwpKb8OjbyBMb3BlcwpLYXJvbCBTa29jaWsKS29zdGlzIFNhZ29uYXMKTWF0dGhldyBSZWlsbHkKT3NjYXIgSGVsbHN0csO2bQpQYXVsIEouIERhdmlzClBldGVyIEtyaXN0ZW5zZW4KUmFtIEtyaXNobmFuClJpY2hhcmQgQ2FtZXJvbgpTZWFuIEhpbmRlClNldGggRmFsY29uClN0ZXZlIFZpbm9za2kKVGhvbWFzIExpbmRncmVuCllvdW7DqHMgSGFmcmkKdGhvbHNjaHVoIChodHRwczovL2dpdGh1Yi5jb20vdGhvbHNjaHVoLykKCkNPTlRSSUJVVElPTlMgJiBDSEFOR0UgSElTVE9SWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMjUtMTAtMjAxMCAtIHYyLjEuMAogICAgICAgICAgICAgKiBGaXhlZCBidWlsZCBvbiBPcGVuU29sYXJpcy4gQnVnIHJlcG9ydCBhbmQgcGF0Y2ggZnJvbSAKICAgICAgICAgICAgICAgdGhvbHNjaHVoLgogICAgICAgICAgICAgICBodHRwOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMTAKCiAgICAgICAgICAgICAqIEZpeGVkIGJlaGF2aW91ciBvZiBpbmFjdGl2aXR5X3RpbWVvdXQgb3B0aW9uLiBSZXBvcnRlZCBieQogICAgICAgICAgICAgICBKb+NvIExvcGVzLgogICAgICAgICAgICAgICBodHRwOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMTEKCiAgICAgICAgICAgICAqIFByZXZlbnQgYXRvbSB0YWJsZSBwb2xsdXRpb24gd2hlbiBib2d1cyBVUkxzIGFyZSBpbnB1dCB0byAKICAgICAgICAgICAgICAgaWJyb3dzZS4gQnVnIHJlcG9ydCBieSBKb8OjbyBMb3Blcy4KICAgICAgICAgICAgICAgaHR0cDovL2dpdGh1Yi5jb20vY211bGxhcGFydGhpL2licm93c2UvaXNzdWVzL2lzc3VlLzEzCgogICAgICAgICAgICAgKiBBdXRvbWF0aWNhbGx5IGRvIENodW5rZWQtVHJhbnNmZXIgZW5jb2Rpbmcgb2YgcmVxdWVzdCBib2R5IAogICAgICAgICAgICAgICB3aGVuIHRoZSBib2R5IGlzIGdlbmVyYXRlZCBieSBhIGZ1bi4gUGF0Y2ggcHJvdmlkZWQgYnkgCiAgICAgICAgICAgICAgIEZpbGlwZSBEYXZpZCBNYW5hbmEuCiAgICAgICAgICAgICAgIGh0dHA6Ly9naXRodWIuY29tL2NtdWxsYXBhcnRoaS9pYnJvd3NlL2lzc3Vlcy9pc3N1ZS8xNAoKICAgICAgICAgICAgICogRGVwZW5kaW5nIG9uIGlucHV0IG9wdGlvbnMsIGlicm93c2Ugc29tZXRpbWVzIGluY2x1ZGVkIG11bHRpcGxlCiAgICAgICAgICAgICAgIENvbnRlbnQtTGVuZ3RoIGhlYWRlcnMuIEJ1ZyByZXBvcnRlZCBieSBQYXVsIEouIERhdmlzCiAgICAgICAgICAgICAgIGh0dHA6Ly9naXRodWIuY29tL2NtdWxsYXBhcnRoaS9pYnJvd3NlL2lzc3Vlcy9pc3N1ZS8xNQoKICAgICAgICAgICAgICogRGVhbCB3aXRoIHdlYnNlcnZlcnMgd2hpY2ggZG8gbm90IHByb3ZpZGUgYSBSZWFzb24tUGhyYXNlIG9uIHRoZQogICAgICAgICAgICAgICByZXNwb25zZSBTdGF0dXMtTGluZS4gUGF0Y2ggcHJvdmlkZWQgYnkgSmVyb2VuIEtvb3BzLgogICAgICAgICAgICAgICBodHRwOi8vZ2l0aHViLmNvbS9jbXVsbGFwYXJ0aGkvaWJyb3dzZS9pc3N1ZXMvaXNzdWUvMTYKCiAgICAgICAgICAgICAqIEZpeGVkIGh0dHA6Ly9naXRodWIuY29tL2NtdWxsYXBhcnRoaS9pYnJvd3NlL2lzc3Vlcy9pc3N1ZS8xNwogICAgICAgICAgICAgICBUaGlzIHdhcyByZXBvcnRlZCBieSBGaWxpcGUgRGF2aWQgTWFuYW5hLgoKICAgICAgICAgICAgICogRml4ZWQgaHR0cDovL2dpdGh1Yi5jb20vY211bGxhcGFydGhpL2licm93c2UvaXNzdWVzL2lzc3VlLzE5CiAgICAgICAgICAgICAgIFRoaXMgd2FzIHJlcG9ydGVkIGJ5IERhbiBLZWxsZXkgYW5kIEZpbGlwZSBEYXZpZCBNYW5hbmEuCgogICAgICAgICAgICAgKiBBZGRlZCBpYnJvd3NlOnN0cmVhbV9jbG9zZS8xIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIAogICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBjZXJ0YWluIHJlc3BvbnNlIHN0cmVhbS4gUGF0Y2ggcHJvdmlkZWQgYnkKICAgICAgICAgICAgICAgSm/Do28gTG9wZXMuIAoKICAgICAgICAgICAgICogUHJldmVudCBwb3J0IG51bWJlciBiZWluZyBpbmNsdWRlZCBpbiB0aGUgSG9zdCBoZWFkZXIgd2hlbiBwb3J0CiAgICAgICAgICAgICAgIDQ0MyBpcyBpbnRlbmRlZC4gQnVnIHJlcG9ydGVkIGJ5IEFuZHJldyBUdW5uZWxsLUpvbmVzCgoyNC0wOS0yMDEwIC0gdjIuMC4xCiAgICAgICAgICAgICAqIFJlbW92ZWQgYSBzcHVyaW91cyBpbzpmb3JtYXQgc3RhdGVtZW50CgoyMi0wOS0yMDEwIC0gdjIuMC4wLgoKICAgICAgICAgICAqIEFkZGVkIG9wdGlvbiBwcmVzZXJ2ZV9jaHVua2VkX2VuY29kaW5nLiBUaGlzIGFsbG93cyB0aGUKICAgICAgICAgICAgIGNhbGxlciB0byBnZXQgdGhlIHJhdyBIVFRQIHJlc3BvbnNlIHdoZW4gdGhlCiAgICAgICAgICAgICBUcmFuc2Zlci1FbmNvZGluZyBpcyBDaHVua2VkLiBUaGlzIGZlYXR1cmUgd2FzIHJlcXVlc3RlZAogICAgICAgICAgICAgYnkgQmVub2l0IENoZXNuZWF1IHdobyB3YW50ZWQgdG8gd3JpdGUgYSBIVFRQIHByb3h5IHVzaW5nCiAgICAgICAgICAgICBpYnJvd3NlLgoKICAgICAgICAgICAqIEZpeGVkIGJ1ZyB3aXRoIHRoZSB7c3RyZWFtX3RvLCB7UGlkLCBvbmNlfX0gb3B0aW9uLiBCdWcKICAgICAgICAgICAgIHJlcG9ydCBhbmQgbG90IG9mIGhlbHAgZnJvbSBGaWxpcGUgRGF2aWQgTWFuYW5hLiBUaGFuawogICAgICAgICAgICAgeW91IEZpbGlwZS4KCiAgICAgICAgICAgKiBUaGUge2Vycm9yLCBjb25uX2ZhaWxlZH0gYW5kIHtlcnJvciwgc2VuZF9mYWlsZWR9IHJldHVybgogICAgICAgICAgICAgdmFsdWVzIGFyZSBub3cgb2YgdGhlIGZvcm0ge2Vycm9yLCB7Y29ubl9mYWlsZWQsIEVycn19CiAgICAgICAgICAgICBhbmQge2Vycm9yLCB7c2VuZF9mYWlsZWQsIEVycn19LiBUaGlzIGlzIHNvIHRoYXQgdGhlCiAgICAgICAgICAgICBzcGVjaWZpYyBzb2NrZXQgZXJyb3IgY2FuIGJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuIEkKICAgICAgICAgICAgIHRoaW5rIGl0IGxvb2tzIGEgYml0IHVnbHksIGJ1dCB0aGF0IGlzIHRoZSBiZXN0CiAgICAgICAgICAgICBjb21wcm9taXNlIEkgY291bGQgY29tZSB1cCB3aXRoLgoKICAgICAgICAgICAqIEFkZGVkIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycwogICAgICAgICAgICAgZGVmYXVsdF9tYXhfc2Vzc2lvbnMgYW5kIGRlZmF1bHRfbWF4X3BpcGVsaW5lX3NpemUuIFRoZXNlCiAgICAgICAgICAgICB3ZXJlIHByZXZpb3VzbHkgaGFyZCBjb2RlZCB0byAxMC4KCiAgICAgICAgICAgKiBWZXJzaW9uaW5nIG9mIGlicm93c2Ugbm93IGZvbGxvd3MgdGhlIFNlbWFudGljIFZlcnNpb25pbmcKICAgICAgICAgICAgIHByaW5jaXBsZXMuICBTZWUgaHR0cDovL3NlbXZlci5vcmcuIFRoYW5rcyB0byBBbnRob255CiAgICAgICAgICAgICBNb2xpbmFybyBmb3IgbnVkZ2luZyBtZSBpbiB0aGlzIGRpcmVjdGlvbi4KCiAgICAgICAgICAgKiBUaGUgY29ubmVjdF90aW1lb3V0IG9wdGlvbiBub3cgb25seSBhcHBsaWVzIHRvIHRoZQogICAgICAgICAgICAgY29ubmVjdGlvbiBzZXR1cCBwaGFzZS4gSW4gcHJldmlvdXMgdmVyc2lvbnMsIHRoZSB0aW1lCiAgICAgICAgICAgICB0YWtlbiB0byBzZXR1cCB0aGUgY29ubmVjdGlvbiB3YXMgZGVkdWN0ZWQgZnJvbSB0aGUKICAgICAgICAgICAgIHNwZWNpZmllZCB0aW1lb3V0IHZhbHVlIGZvciB0aGUgcmVxdWVzdC4KCjE3LTA3LTIwMTAgLSAqIE1lcmdlZCBjaGFuZ2UgbWFkZSBieSBGaWxpcGUgRGF2aWQgTWFuYW5hIHRvIHVzZSB0aGUgYmFzZTY0CiAgICAgICAgICAgICAgIG1vZHVsZSBmb3IgZW5jb2RpbmcvZGVjb2RpbmcuIAoKMTEtMDYtMjAxMCAtICogUmVtb3ZlZCB1c2Ugb2YgZGVwcmVjYXRlZCBjb25jYXRfYmluYXJ5LiBQYXRjaCBzdXBwbGllZCBieQogICAgICAgICAgICAgICBTdGV2ZSBWaW5vc2tpCgoxMC0wNi0yMDEwIC0gKiBGaXhlZCBidWcgaW4gaHR0cHMgcmVxdWVzdHMgbm90IGdvaW5nIHZpYSB0aGUgcHJveHkKCjEyLTA1LTIwMTAgLSAqIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDT05ORUNUIG1ldGhvZCB0byB0dW5uZWwgSFRUUFMgdGhyb3VnaAogICAgICAgICAgICAgICBhIHByb3h5LiBXaGVuIGEgaHR0cHMgVVJMIGlzIHJlcXVlc3RlZCB0aHJvdWdoIGEgcHJveHksIAogICAgICAgICAgICAgICBpYnJvd3NlIHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlIENPTk5FQ1QgbWV0aG9kIHRvIGZpcnN0CiAgICAgICAgICAgICAgIHNldHVwIGEgdHVubmVsIHRocm91Z2ggdGhlIHByb3h5LiBPbmNlIHRoaXMgc3VjY2VlZHMsIHRoZSAKICAgICAgICAgICAgICAgYWN0dWFsIHJlcXVlc3QgaXMgZGlzcGF0Y2hlZC4gU3VjY2Vzc2Z1bGx5IHRlc3RlZCB3aXRoIHRoZSAKICAgICAgICAgICAgICAgbmV3IFNTTCBpbXBsZW1lbnRhdGlvbiBpbiBSMTNCLTAzCiAgICAgICAgICAgICAqIEFkZGVkIFNTTCBzdXBwb3J0IGZvciBkaXJlY3QgY29ubmVjdGlvbnMuIAogICAgICAgICAgICAgICBTZWUgaWJyb3dzZTpzcGF3bl93b3JrZXJfcHJvY2Vzcy8xIGFuZCAKICAgICAgICAgICAgICAgaWJyb3dzZTpzcGF3bl9saW5rX3dvcmtlcl9wcm9jZXNzLzEKICAgICAgICAgICAgICogQWRkZWQgb3B0aW9uIHRvIHJldHVybiByYXcgc3RhdHVzIGxpbmUgYW5kIHJhdyB1bnBhcnNlZCBoZWFkZXJzCgoyMy0wNC0yMDEwIC0gKiBGaXhlcyB0byBVUkwgcGFyc2luZyBieSBLYXJvbCBTa29jaWsKCjA4LTExLTIwMDkgLSAqIEFkZGVkIG9wdGlvbiBoZWFkZXJzX2FzX2lzCgowNC0xMC0yMDA5IC0gKiBQYXRjaCBmcm9tIEtvc3RpcyBTYWdvbmFzIHRvIGNsZWFudXAgc29tZSBjb2RlIGFuZCBzdXBwcmVzcwogICAgICAgICAgICAgICBkaWFseXplciB3YXJuaW5ncwoKMjQtMDktMjAwOSAtICogV2hlbiBhIGZpbGVuYW1lIHdhcyBzdXBwbGllZCB3aXRoIHRoZSAnc2F2ZV9yZXNwb25zZV90b19maWxlJyAKICAgICAgICAgICAgICAgb3B0aW9uLCB0aGUgb3B0aW9uIHdhcyBiZWluZyBpZ25vcmVkLiBCdWcgcmVwb3J0IGZyb20gCiAgICAgICAgICAgICAgIEFkYW0gS29jb2xvc2tpCgowNS0wOS0yMDA5IC0gKiBJbnRyb2R1Y2VkIG9wdGlvbiB0byBhbGxvdyBjYWxsZXIgdG8gc2V0IHNvY2tldCBvcHRpb25zLgoKMjktMDctMjAwOSAtICogVGhlIEVUUyB0YWJsZSBjcmVhdGVkIGZvciBsb2FkIGJhbGFuY2luZyBvZiByZXF1ZXN0cyB3YXMgbm90CiAgICAgICAgICAgICAgIGJlaW5nIGRlbGV0ZWQgd2hpY2ggbGVkIHRvIHRoZSBub2RlIG5vdCBiZWluZyBhYmxlIHRvIGNyZWF0ZQogICAgICAgICAgICAgICBhbnkgbW9yZSBFVFMgdGFibGVzIGlmIHF1ZXJpZXMgd2VyZSBtYWRlIHRvIG1hbnkgbnVtYmVyIG9mIAogICAgICAgICAgICAgICB3ZWJzZXJ2ZXJzLiBpYnJvd3NlIG5vdyBkZWxldGVzIHRoZSBFVFMgdGFibGUgaXQgY3JlYXRlcyBvbmNlIHRoZQogICAgICAgICAgICAgICBsYXN0IGNvbm5lY3Rpb24gdG8gYSB3ZWJzZXJ2ZXIgaXMgZHJvcHBlZC4gCiAgICAgICAgICAgICAgIFJlcG9ydGVkIGJ5IFNldGggRmFsY29uLgogICAgICAgICAgICAgKiBTcHVyaW91cyBkYXRhIGJlaW5nIHJldHVybmVkIGF0IGVuZCBvZiBib2R5IGluIGNlcnRhaW4gY2FzZXMgb2YKICAgICAgICAgICAgICAgY2h1bmtlZCBlbmNvZGVkIHJlc3BvbnNlcyBmcm9tIHRoZSBzZXJ2ZXIuIAogICAgICAgICAgICAgICBSZXBvcnRlZCBieSBDaHJpcyBOZXdjb21iZS4KCjAzLTA3LTIwMDkgLSBBZGRlZCBvcHRpb24ge3N0cmVhbV90bywge1BpZCwgb25jZX19IHdoaWNoIGFsbG93cyB0aGUgY2FsbGVyCiAgICAgICAgICAgICB0byBjb250cm9sIHdoZW4gaXQgd2FudHMgdG8gcmVjZWl2ZSBtb3JlIGRhdGEuIElmIHRoaXMgb3B0aW9uCiAgICAgICAgICAgICBpcyB1c2VkLCB0aGUgY2FsbCBpYnJvd3NlOnN0cmVhbV9uZXh0KFJlcV9pZCkgc2hvdWxkIGJlIHVzZWQKICAgICAgICAgICAgIHRvIGdldCBtb3JlIGRhdGEuCiAgICAgICAgICAgLSBQYXRjaCBzdWJtaXR0ZWQgYnkgU3RldmUgVmlub3NraSB0byByZW1vdmUgY29tcGlsZXIgd2FybmluZ3MKICAgICAgICAgICAgIGFib3V0IHRoZSB1c2Ugb2Ygb2Jzb2xldGUgZ3VhcmRzCgoyOS0wNi0yMDA5IC0gKiBGaXhlZCBmb2xsb3dpbmcgaXNzdWVzIHJlcG9ydGVkIGJ5IE9zY2FyIEhlbGxzdHLDtm0KICAgICAgICAgICAgICAgLSBVc2Uge2FjdGl2ZSwgb25jZX0gaW5zdGVhZCBvZiB7YWN0aXZlLCB0cnVlfQogICAgICAgICAgICAgICAtIEZpeCAnZG9kZ3knIHRpbWVvdXQgaGFuZGxpbmcKICAgICAgICAgICAgICAgLSBVc2UgYmluYXJpZXMgaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGxpc3RzIHRvIHJlZHVjZSBtZW1vcnkKICAgICAgICAgICAgICAgICBjb25zdW1wdGlvbiBvbiA2NCBiaXQgcGxhdGZvcm1zLiBUaGUgZGVmYXVsdCByZXNwb25zZSBmb3JtYXQKICAgICAgICAgICAgICAgICBpcyBzdGlsbCAnbGlzdCcgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFVzZSB0aGUKICAgICAgICAgICAgICAgICBvcHRpb24ge3Jlc3BvbnNlX2Zvcm1hdCwgYmluYXJ5fSB0byBnZXQgcmVzcG9uc2VzIGFzIGJpbmFyaWVzLgogICAgICAgICAgICAgKiBGaXhlZCBjaHVua2luZyBidWcgKHJlcG9ydGVkIGJ5IEFkYW0gS29jb2xvc2tpKQogICAgICAgICAgICAgKiBBZGRlZCBuZXcgb3B0aW9uIHtpbmFjdGl2aXR5X3RpbWVvdXQsIE1pbGxpc2Vjb25kc30gdG8gdGltZW91dAogICAgICAgICAgICAgICByZXF1ZXN0cyBpZiBubyBkYXRhIGlzIHJlY2VpdmVkIG9uIHRoZSBsaW5rIGZvciB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgIGludGVydmFsLiBVc2VmdWwgd2hlbiByZXNwb25zZXMgYXJlIGxhcmdlIGFuZCBsaW5rcyBhcmUgZmxha3kuCiAgICAgICAgICAgICAqIEFkZGVkIGlicm93c2U6YWxsX3RyYWNlX29mZi8wIHRvIHR1cm4gb2ZmIGFsbCB0cmFjaW5nCiAgICAgICAgICAgICAqIENoYW5nZSB0byB0aGUgd2F5IHJlc3BvbnNlcyB0byBhc3luY2hyb25vdXMgcmVxdWVzdHMgYXJlCiAgICAgICAgICAgICAgIHJldHVybmVkLiBUaGUgZm9sbG93aW5nIG1lc3NhZ2VzIGhhdmUgYmVlbiByZW1vdmVkLgogICAgICAgICAgICAgICAgKiB7aWJyb3dzZV9hc3luY19yZXNwb25zZSwgUmVxX2lkLCB7Y2h1bmtfc3RhcnQsIENodW5rX3NpemV9fQogICAgICAgICAgICAgICAgICoge2licm93c2VfYXN5bmNfcmVzcG9uc2UsIFJlcV9pZCwgY2h1bmtfZW5kfQogICAgICAgICAgICAgKiBGaXhlZCBNYWtlZmlsZXMgYXMgcGFydCBvZiBEZWJpYW4gcGFja2FnaW5nIAogICAgICAgICAgICAgICAodGhhbmtzIHRvIFRob21hcyBMaW5kZ3JlbikKICAgICAgICAgICAgICogTW92ZWQgcmVwb3NpdG9yeSBmcm9tIFNvdXJjZWZvcmdlIHRvIEdpdGh1YgoKMTEtMDYtMjAwOSAtICogQWRkZWQgb3B0aW9uIHRvIGNvbnRyb2wgc2l6ZSBvZiBzdHJlYW1lZCBjaHVua3MuIEFsc28gYWRkZWQgCiAgICAgICAgICAgICAgIG9wdGlvbiBmb3IgdGhlIGNsaWVudCB0byByZWNlaXZlIHJlc3BvbnNlcyBpbiBiaW5hcnkgZm9ybWF0LgoKMjEtMDUtMjAwOCAtICogRml4ZWQgYnVnIGluIHJlYWRpbmcgc29tZSBvcHRpb25zIGZyb20gdGhlIGlicm93c2UuY29uZiBmaWxlLgogICAgICAgICAgICAgICBSZXBvcnRlZCBieSBFcmlrIFJlaXRzbWEgb24gdGhlIGVybHlhd3MgbWFpbGluZyBsaXN0CiAgICAgICAgICAgICAqIEZpeGVkIGJ1ZyB3aGVuIGNsZWFuaW5nIHVwIGNsb3NpbmcgY29ubmVjdGlvbnMKCjI3LTAzLTIwMDggLSAqIE1ham9yIHJld3JpdGUgb2YgdGhlIGxvYWQgYmFsYW5jaW5nIGZlYXR1cmUuIEFkZGl0aW9uYWwgbW9kdWxlLAogICAgICAgICAgICAgICBpYnJvd3NlX2xiLmVybCwgaW50cm9kdWNlZCB0byBhY2hpZXZlIHRoaXMuCiAgICAgICAgICAgICAqIENhbiBub3cgZ2V0IGEgaGFuZGxlIHRvIGEgY29ubmVjdGlvbiBwcm9jZXNzIHdoaWNoIGlzIG5vdCBwYXJ0IG9mCiAgICAgICAgICAgICAgIHRoZSBsb2FkIGJhbGFuY2luZyBwb29sLiBVc2VmdWwgd2hlbiBhbiBhcHBsaWNhdGlvbiBpcyBtYWtpbmcKICAgICAgICAgICAgICAgcmVxdWVzdHMgdG8gYSB3ZWJzZXJ2ZXIgd2hpY2ggYXJlIHRpbWUgY29uc3VtaW5nIChzdWNoIGFzIAogICAgICAgICAgICAgICB1cGxvYWRpbmcgYSBsYXJnZSBmaWxlKS4gU3VjaCByZXF1ZXN0cyBjYW4gYmUgcHV0IG9uIGEgc2VwYXJhdGUKICAgICAgICAgICAgICAgY29ubmVjdGlvbiwgYW5kIGFsbCBvdGhlciBzbWFsbGVyL3F1aWNrZXIgcmVxdWVzdHMgY2FuIHVzZSB0aGUKICAgICAgICAgICAgICAgbG9hZCBiYWxhbmNpbmcgcG9vbC4gU2VlIGlicm93c2U6c3Bhd25fd29ya2VyX3Byb2Nlc3MvMiBhbmQKICAgICAgICAgICAgICAgaWJyb3dzZTpzcGF3bl9saW5rX3dvcmtlcl9wcm9jZXNzLzIKICAgICAgICAgICAgICogUmFtIEtyaXNobmFuIHNlbnQgYSBwYXRjaCB0byBlbmFibGUgYSBjbGllbnQgdG8gc2VuZCBhIGxvdCBvZgogICAgICAgICAgICAgICBkYXRhIGluIGEgcmVxdWVzdCBieSBwcm92aWRpbmcgYSBmdW4gd2hpY2ggaXMgaW52b2tlZCBieSB0aGUKICAgICAgICAgICAgICAgY29ubmVjdGlvbiBoYW5kbGluZyBwcm9jZXNzLiBUaGlzIGZ1biBjYW4gZmV0Y2ggdGhlIGRhdGEgZnJvbSAKICAgICAgICAgICAgICAgYW55IHdoZXJlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1cGxvYWQgYSBsYXJnZSBmaWxlCiAgICAgICAgICAgICAgIHRvIGEgd2Vic2VydmVyLgogICAgICAgICAgICAgKiBVc2UgdGhlIFRDUF9OT0RFTEFZIG9wdGlvbiBvbiBldmVyeSBzb2NrZXQgYnkgZGVmYXVsdAogICAgICAgICAgICAgKiBSdWRpbWVudGFyeSBzdXBwb3J0IGZvciBsb2FkIHRlc3Rpbmcgb2YgaWJyb3dzZS4gVW5kb2N1bWVudGVkLCAKICAgICAgICAgICAgICAgYnV0IHNlZSBpYnJvd3NlX3Rlc3Q6bG9hZF90ZXN0LzMuIFVzZSB0aGUgc291cmNlLCBMdWtlIQogICAgICAgICAgICAgKiBOZXcgZnVuY3Rpb24gaWJyb3dzZTpzaG93X2Rlc3Rfc3RhdHVzLzIgdG8gdmlldyBzdGF0ZSBvZgogICAgICAgICAgICAgICBjb25uZWN0aW9ucy9waXBlbGluZXMgdG8gYSB3ZWIgc2VydmVyCgoyMC0wMi0yMDA4IC0gUmFtIEtyaXNobmFuIHNlbnQgYW5vdGhlciBwYXRjaCBmb3IgYW5vdGhlciBoaWRkZW4gYnVnIGluIHRoZQogICAgICAgICAgICAgc2F2ZV9yZXNwb25zZV90b19maWxlIGZlYXR1cmUuCgowNy0wMi0yMDA4IC0gUmFtIEtyaXNobmFuIChrcml5YXRpdmUgX2F0XyBnbWFpbCBkb3QgY29tKSBzZW50IGEgc2ltcGxlIHBhdGNoIHRvCiAgICAgICAgICAgICBlbmFibGUgc3BlY2lmeWluZyB0aGUgZmlsZW5hbWUgaW4gdGhlIHNhdmVfcmVzcG9uc2VfdG9fZmlsZSBvcHRpb24uCiAgICAgICAgICAgICBXaGVuIHRlc3RpbmcgdGhlIHBhdGNoLCBJIHJlYWxpc2VkIHRoYXQgbXkgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG9mIHRoaXMgZmVhdHVyZSB3YXMgcXVpdGUgZmxha3kgYW5kIGEgbG90IG9mIGNvcm5lciBjYXNlcyB3ZXJlIAogICAgICAgICAgICAgbm90IGNvdmVyZWQuICBGaXhlZCBhbGwgb2YgdGhlbS4gVGhhbmtzIFJhbSEKCjE3LTEwLTIwMDcgLSBNYXR0aGV3IFJlaWxseSAobWF0dGhldyBkb3QgcmVpbGx5IF9hdF8gc2lwcGhvbmUgZG90IGNvbSkgCiAgICAgICAgICAgICBzZW50IGEgYnVnIHJlcG9ydCBhbmQgYSBmaXguIElmIHRoZSBjaHVuayB0cmFpbGVyIHNwYW5zIHR3byBUQ1AgCiAgICAgICAgICAgICBwYWNrZXRzLCB0aGVuIGlicm93c2UgZmFpbHMgdG8gcmVjb2duaXNlIHRoYXQgdGhlIGNodW5rZWQgdHJhbnNmZXIKICAgICAgICAgICAgIGhhcyBlbmRlZC4KCjI5LTA4LTIwMDcgLSBCdWcgcmVwb3J0IGJ5IFBldGVyIEtyaXN0ZW5zZW4ocHR4IF9hdF8gZGFpbWkgZG90IGF1IGRvdCBkaykuIAogICAgICAgICAgICAgaWJyb3dzZSBjcmFzaGVzIHdoZW4gdGhlIHdlYnNlcnZlciByZXR1cm5zIGp1c3QgdGhlIFN0YXR1cyBsaW5lIAogICAgICAgICAgICAgYW5kIG5vdGhpbmcgZWxzZS4KCjI4LTA2LTIwMDcgLSBBZGRlZCBob3N0X2hlYWRlciBvcHRpb24gdG8gZW5hYmxlIGNvbm5lY3Rpb24gdG8gc2VjdXJlIHNpdGVzCiAgICAgICAgICAgICB2aWEgc3R1bm5lbAoKMjAtMDQtMjAwNyAtIEdlb2ZmIENhbnQgc2VudCBhIHBhdGNoIHRvIHJlbW92ZSBVUkwgZW5jb2RpbmcgZm9yIGRpZ2l0cyBpbgogICAgICAgICAgICAgaWJyb3dzZV9saWI6dXJsX2VuY29kZS8xLgogICAgICAgICAgICAgaWJyb3dzZSBoYWQgYSBkZXBlbmRlbmN5IG9uIHRoZSBpbmV0cyBhcHBsaWNhdGlvbiBiZWNhdXNlIHRoZSAKICAgICAgICAgICAgIGlicm93c2VfaHR0cF9jbGllbnQuZXJsIGludm9rZWQgaHR0cGRfdXRpbDplbmNvZGVfYmFzZTY0LzEuIFRoaXMKICAgICAgICAgICAgIGRlcGVuZGVuY3kgaXMgbm93IHJlbW92ZWQgYW5kIHRoZSBlbmNvZGVfYmFzZTY0LzEgaGFzIGJlZW4gCiAgICAgICAgICAgICBpbXBsZW1lbnRlZCBpbiBpYnJvd3NlX2xpYi5lcmwKCjA2LTAzLTIwMDcgLSAgRXJpYyBNZXJyaXR0IHNlbnQgYSBwYXRjaCB0byBzdXBwb3J0IFdlYkRBViByZXF1ZXN0cy4KCjEyLTAxLTIwMDcgLSAgRGVyZWsgVXBoYW0gc2VudCBpbiBhIGJ1ZyBmaXguIFRoZSByZXNldF9zdGF0ZSBmdW5jdGlvbiB3YXMgbm90CiAgICAgICAgICAgICAgYmVoYXZpbmcgY29ycmVjdGx5IHdoZW4gdGhlIHRyYW5zZmVyIGVuY29kaW5nIHdhcyBub3QgY2h1bmtlZC4KCjEzLTExLTIwMDYgLSAgWW91bo9zIEhhZnJpIHJlcG9ydGVkIGEgYnVnIHdoZXJlIGlicm93c2Ugd2FzIG5vdCByZXR1cm5pbmcgdGhlIAogICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVuYW1lIHdoZW4gdGhlIHNlcnZlciB3YXMgY2xvc2luZyB0aGUgY29ubmVjdGlvbiAKICAgICAgICAgICAgICAgIGFmdGVyIHNlbmRpbmcgdGhlIGRhdGEgKGFzIGluIEhUVFAvMS4wKS4KICAgICAgICAgICAgICBSZWxlYXNlZCBpYnJvd3NlIHVuZGVyIHRoZSBCU0QgbGljZW5zZQoKMTItMTAtMjAwNiAtICBDaHJpcyBOZXdjb21iZSByZXBvcnRlZCBidWcgaW4gZGVhbGluZyB3aXRoIHJlcXVlc3RzIHdoZXJlIG5vIAogICAgICAgICAgICAgIGJvZHkgaXMgZXhwZWN0ZWQgaW4gdGhlIHJlc3BvbnNlLiBUaGUgZmlyc3QgcmVxdWVzdCB3b3VsZCBzdWNjZWVkCiAgICAgICAgICAgICAgYW5kIHRoZSBuZXh0IHJlcXVlc3Qgd291bGQgaGFuZy4KCjI0LU1heS0yMDA2IC0gU2VhbiBIaW5kZSByZXBvcnRlZCBhIGJ1Zy4gQXN5bmMgcmVzcG9uc2VzIHdpdGggcGlwZWxpbmluZyB3YXMgCiAgICAgICAgICAgICAgcmV0dXJuaW5nIHRoZSB3cm9uZyByZXN1bHQuCgowOC1EZWMtMjAwNSAtIFJpY2hhcmQgQ2FtZXJvbiAoY2Ftc3RlckBjaXRldWxpa2Uub3JnKS4gUGF0Y2ggdG8gaWJyb3dzZSB0bwogICAgICAgICAgICAgIHByZXZlbnQgcG9ydCBudW1iZXIgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIEhvc3QgaGVhZGVyIHdoZW4gcG9ydAogICAgICAgICAgICAgIDgwIGlzIGludGVuZGVkLgoKMjItTm92LTIwMDUgLSBBZGRlZCBhYmlsaXR5IHRvIGdlbmVyYXRlIHJlcXVlc3RzIHVzaW5nIHRoZSBDaHVua2VkIAogICAgICAgICAgICAgIFRyYW5zZmVyLUVuY29kaW5nLgoKMDgtTWF5LTIwMDUgLSBZb3Vuj3MgSGFmcmkgbWFkZSBhIENSVVggTElOVVggcG9ydCBvZiBpYnJvd3NlLgogICAgICAgICAgICAgIGh0dHA6Ly95aGFmcmkuY2x1Yi5mci9jcnV4L2luZGV4Lmh0bWwKCkhlcmUgYXJlIHNvbWUgdXNhZ2UgZXhhbXBsZXMuIEVuam95IQoKNT4gaWJyb3dzZTpzdGFydCgpLgp7b2ssPDAuOTQuMD59CgolJSBBIHNpbXBsZSBHRVQKNj4gaWJyb3dzZTpzZW5kX3JlcSgiaHR0cDovL2ludHJhbmV0L21lc3Nlbmdlci8iLCBbXSwgZ2V0KS4Ke29rLCIyMDAiLAogICAgW3siU2VydmVyIiwiTWljcm9zb2Z0LUlJUy81LjAifSwKICAgICB7IkNvbnRlbnQtTG9jYXRpb24iLCJodHRwOi8vaW50cmFuZXQvbWVzc2VuZ2VyL2luZGV4Lmh0bWwifSwKICAgICB7IkRhdGUiLCJGcmksIDE3IERlYyAyMDA0IDE1OjE2OjE5IEdNVCJ9LAogICAgIHsiQ29udGVudC1UeXBlIiwidGV4dC9odG1sIn0sCiAgICAgeyJBY2NlcHQtUmFuZ2VzIiwiYnl0ZXMifSwKICAgICB7Ikxhc3QtTW9kaWZpZWQiLCJGcmksIDE3IERlYyAyMDA0IDA4OjM4OjIxIEdNVCJ9LAogICAgIHsiRXRhZyIsIlwiYWE3YzlkYzMxM2U0YzQxOmQ3N1wiIn0sCiAgICAgeyJDb250ZW50LUxlbmd0aCIsIjk1MyJ9XSwKICAgICI8aHRtbD5cclxuXHJcbjxoZWFkPlxyXG48dGl0bGU+TWVzc2VuZ2VyPC90aXRsZT5cclxuPG1ldGEgbmFtZT1cIkdFTkVSQVRPUlwiIGNvbnRlbnQ9XCJNaWNyb3NvZnQgRnJvbnRQYWdlIDUuMFwiPlxyXG48bWV0YSBuYW1lPVwiUHJvZ0lkXCIgY29udGVudD1cIkZyb250UGFnZS5FZGl0b3IuRG9jdW1lbnRcIj5cclxuPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIk1lc3NlbmdlciBIb21lIFBhZ2VcIj5cclxuPC9oZWFkPlxyXG5cclxuPGZyYW1lc2V0IGJvcmRlcj1cIjBcIiBmcmFtZWJvcmRlcj1cIjBcIiByb3dzPVwiNjAsKlwiPlxyXG4gIDxmcmFtZSBzcmM9XCIvbWVzc2VuZ2VyL2ltYWdlcy90b3BuYXYuaHRtbFwiIG5hbWU9XCJtRnJhbWVUb3BOYXZcIiBzY3JvbGxpbmc9XCJOT1wiIHRhcmdldD1cIm1GcmFtZU1haW5cIj5cclxuICA8ZnJhbWVzZXQgY29scz1cIjE4JSwqXCI+XHJcbiAgICA8ZnJhbWVzZXQgcm93cz1cIiosMTIwXCI+XHJcbiAgICAgIDxmcmFtZSBzcmM9XCJpbmRleC10b2MuaHRtbFwiIG5hbWU9XCJtRnJhbWVUT0NcIiB0YXJnZXQ9XCJtRnJhbWVNYWluXCIgc2Nyb2xsaW5nPVwiYXV0b1wiICBub3Jlc2l6ZT1cInRydWVcIj5cclxuICAgICAgPGZyYW1lIHNyYz1cIi9zaGFyZWQvc2VhcmNoL25hbWVzZWFyY2guaHRtbFwiIG5hbWU9XCJtRnJhbWVOYW1lU2VhcmNoXCIgc2Nyb2xsaW5nPVwiTk9cIiB0YXJnZXQ9XCJtRnJhbWVNYWluXCI+XHJcbiAgICA8L2ZyYW1lc2V0PlxyXG4gICAgPGZyYW1lIHNyYz1cImhvbWUvMTYtMTItMDQteG1hc2NhcmRzbW1zLmh0bVwiIG5hbWU9XCJtRnJhbWVNYWluXCIgc2Nyb2xsaW5nPVwiYXV0b1wiIHRhcmdldD1cIm1GcmFtZU1haW5cIiBpZD1cIm1GcmFtZU1haW5cIj5cclxuICA8L2ZyYW1lc2V0PlxyXG4gIDxub2ZyYW1lcz5cclxuICA8Ym9keT5cclxuXHJcbiAgPHA+PGk+VGhpcyBzaXRlIHJlcXVpcmVzIGEgYnJvd3NlciB0aGF0IGNhbiB2aWV3IGZyYW1lcy48L2k+PC9wPlxyXG5cclxuICA8L2JvZHk+XHJcbiAgPC9ub2ZyYW1lcz5cclxuPC9mcmFtZXNldD5cclxuXHJcbjwvaHRtbD4ifQoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgQSBHRVQgdXNpbmcgYSBwcm94eQo3PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgW10sIGdldCwgW10sIAogICAgICAgICAgICAgICAgIFt7cHJveHlfdXNlciwgIlhYWFhYIn0sCiAgICAgICAgICAgICAgICAgIHtwcm94eV9wYXNzd29yZCwgIlhYWFhYIn0sCiAgICAgICAgICAgICAgICAgIHtwcm94eV9ob3N0LCAicHJveHkifSwKICAgICAgICAgICAgICAgICAge3Byb3h5X3BvcnQsIDgwODB9XSwgMTAwMCkuCntvaywiMzAyIiwKICAgIFt7IkRhdGUiLCJGcmksIDE3IERlYyAyMDA0IDE1OjIyOjU2IEdNVCJ9LAogICAgIHsiQ29udGVudC1MZW5ndGgiLCIyMTcifSwKICAgICB7IkNvbnRlbnQtVHlwZSIsInRleHQvaHRtbCJ9LAogICAgIHsiU2V0LUNvb2tpZSIsCiAgICAgICJQUkVGPUlEPWY1ODE1NWM3OTdmOTYwOTY6Q1I9MTpUTT0xMTAzMjk2OTk5OkxNPTExMDMyOTY5OTk6Uz1GaVdkdEFxUXZoUTBUdkhxOyBleHBpcmVzPVN1biwgMTctSmFuLTIwMzggMTk6MTQ6MDcgR01UOyBwYXRoPS87IGRvbWFpbj0uZ29vZ2xlLmNvbSJ9LAogICAgIHsiU2VydmVyIiwiR1dTLzIuMSJ9LAogICAgIHsiTG9jYXRpb24iLAogICAgICAiaHR0cDovL3d3dy5nb29nbGUuY28udWsvY3hmZXI/Yz1QUkVGJTNEOlRNJTNEMTEwMzI5Njk5OTpTJTNEbzhiRVkyRklId2R5R2VuUyZwcmV2PS8ifSwKICAgICB7IlZpYSIsIjEuMSBuZXRhcHAwMSAoTmV0Q2FjaGUgTmV0QXBwLzUuNVIyKSJ9XSwKICAgICI8SFRNTD48SEVBRD48VElUTEU+MzAyIE1vdmVkPC9USVRMRT48L0hFQUQ+PEJPRFk+XG48SDE+MzAyIE1vdmVkPC9IMT5cblRoZSBkb2N1bWVudCBoYXMgbW92ZWRcbjxBIEhSRUY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jby51ay9jeGZlcj9jPVBSRUYlM0Q6VE0lM0QxMTAzMjk2OTk5OlMlM0RvOGJFWTJGSUh3ZHlHZW5TJmFtcDtwcmV2PS9cIj5oZXJlPC9BPi5cclxuPC9CT0RZPjwvSFRNTD5cclxuIn0KCiUlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiUlIEEgR0VUIHJlc3BvbnNlIHNhdmVkIHRvIGZpbGUuIEEgdGVtcG9yYXJ5IGZpbGUgaXMgY3JlYXRlZCBhbmQgdGhlCiUlIGZpbGVuYW1lIHJldHVybmVkLiBUaGUgcmVzcG9uc2Ugd2lsbCBvbmx5IGJlIHNhdmVkIHRvIGZpbGUgaXMgdGhlCiUlIHN0YXR1cyBjb2RlIGlzIGluIHRoZSAyMDAgcmFuZ2UuIFRoZSBkaXJlY3RvcnkgdG8gZG93bmxvYWQgdG8gY2FuCiUlIGJlIHNldCB1c2luZyB0aGUgYXBwbGljYXRpb24gZW52IHZhciAnZG93bmxvYWRfZGlyJyAtIHRoZSBkZWZhdWx0CiUlIGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Lgo4PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vd3d3LmVybGFuZy5zZS8iLCBbXSwgZ2V0LCBbXSwKICAgICAgICAgICAgICAgICBbe3Byb3h5X3VzZXIsICJYWFhYWCJ9LAogICAgICAgICAgICAgICAgICB7cHJveHlfcGFzc3dvcmQsICJYWFhYWCJ9LAogICAgICAgICAgICAgICAgICB7cHJveHlfaG9zdCwgInByb3h5In0sCiAgICAgICAgICAgICAgICAgIHtwcm94eV9wb3J0LCA4MDgwfSwKICAgICAgICAgICAgICAgICAge3NhdmVfcmVzcG9uc2VfdG9fZmlsZSwgdHJ1ZX1dLCAxMDAwKS4Ke2Vycm9yLHJlcV90aW1lZG91dH0KCiUlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cjk+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuZXJsYW5nLnNlLyIsIFtdLCBnZXQsIFtdLAogICAgICAgICAgICAgICAgIFt7cHJveHlfdXNlciwgIlhYWFhYIn0sCiAgICAgICAgICAgICAgICAgIHtwcm94eV9wYXNzd29yZCwgIlhYWFhYIn0sCiAgICAgICAgICAgICAgICAgIHtwcm94eV9ob3N0LCAicHJveHkifSwKICAgICAgICAgICAgICAgICAge3Byb3h5X3BvcnQsIDgwODB9LAogICAgICAgICAgICAgICAgICB7c2F2ZV9yZXNwb25zZV90b19maWxlLCB0cnVlfV0sIDUwMDApLgp7b2ssIjIwMCIsCiAgICBbeyJUcmFuc2Zlci1FbmNvZGluZyIsImNodW5rZWQifSwKICAgICB7IkRhdGUiLCJGcmksIDE3IERlYyAyMDA0IDE1OjI0OjM2IEdNVCJ9LAogICAgIHsiQ29udGVudC1UeXBlIiwidGV4dC9odG1sIn0sCiAgICAgeyJTZXJ2ZXIiLCJBcGFjaGUvMS4zLjkgKFVuaXgpIn0sCiAgICAgeyJWaWEiLCIxLjEgbmV0YXBwMDEgKE5ldENhY2hlIE5ldEFwcC81LjVSMikifV0sCiAgICB7ZmlsZSwiL1VzZXJzL2NoYW5kcnUvY29kZS9pYnJvd3NlL3NyYy9pYnJvd3NlX3RtcF9maWxlXzExMDMyOTcwNDExMjU4NTQifX0KCiUlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiUlIFNldHRpbmcgc2l6ZSBvZiBjb25uZWN0aW9uIHBvb2wgYW5kIHBpcGVsaW5lIHNpemUuIFRoaXMgc2V0cyB0aGUKJSUgbnVtYmVyIG9mIG1heGltdW0gY29ubmVjdGlvbnMgdG8gdGhpcyBzZXJ2ZXIgdG8gMTAgYW5kIHRoZSBwaXBlbGluZQolJSBzaXplIHRvIDEuIENvbm5lY3Rpb25zIGFyZSBzZXR1cCBhIHJlcXVpcmVkLgoxMT4gaWJyb3dzZTpzZXRfZGVzdCgid3d3LmhvdG1haWwuY29tIiwgODAsIFt7bWF4X3Nlc3Npb25zLCAxMH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttYXhfcGlwZWxpbmVfc2l6ZSwgMX1dKS4Kb2sKCiUlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiUlIEV4YW1wbGUgdXNpbmcgdGhlIEhFQUQgbWV0aG9kCjU2PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vd3d3LmVybGFuZy5vcmciLCBbXSwgaGVhZCkuCntvaywiMjAwIiwKICAgIFt7IkRhdGUiLCJNb24sIDI4IEZlYiAyMDA1IDA0OjQwOjUzIEdNVCJ9LAogICAgIHsiU2VydmVyIiwiQXBhY2hlLzEuMy45IChVbml4KSJ9LAogICAgIHsiTGFzdC1Nb2RpZmllZCIsIlRodSwgMTAgRmViIDIwMDUgMDk6MzE6MjMgR01UIn0sCiAgICAgeyJFdGFnIiwiXCI4ZDcxZC0xZWZhLTQyMGIyOWViXCIifSwKICAgICB7IkFjY2VwdC1yYW5nZXMiLCJieXRlcyJ9LAogICAgIHsiQ29udGVudC1MZW5ndGgiLCI3OTMwIn0sCiAgICAgeyJDb250ZW50LVR5cGUiLCJ0ZXh0L2h0bWwifV0sCiAgICBbXX0KCiUlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiUlIEV4YW1wbGUgdXNpbmcgdGhlIE9QVElPTlMgbWV0aG9kCjYyPiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vd3d3LnN1bi5jb20iLCBbXSwgb3B0aW9ucykuICAgCntvaywiMjAwIiwKICAgIFt7IlNlcnZlciIsIlN1biBKYXZhIFN5c3RlbSBXZWIgU2VydmVyIDYuMSJ9LAogICAgIHsiRGF0ZSIsIk1vbiwgMjggRmViIDIwMDUgMDQ6NDQ6MzkgR01UIn0sCiAgICAgeyJDb250ZW50LUxlbmd0aCIsIjAifSwKICAgICB7IlAzcCIsCiAgICAgICJwb2xpY3lyZWY9XCJodHRwOi8vd3d3LnN1bi5jb20vcDNwL1N1bl9QM1BfUG9saWN5LnhtbFwiLCBDUD1cIkNBTyBEU1AgQ09SIENVUiBBRE1hIERFVmEgVEFJYSBQU0FhIFBTRGEgQ09OaSBURUxpIE9VUiAgU0FNaSBQVUJpIElORCBQSFkgT05MIFBVUiBDT00gTkFWIElOVCBERU0gQ05UIFNUQSBQT0wgUFJFIEdPVlwiIn0sCiAgICAgeyJTZXQtQ29va2llIiwKICAgICAgIlNVTl9JRD1YLlguWC5YOjE2OTE5MTEwOTU2NTg3OTsgRVhQSVJFUz1XZWRuZXNkYXksIDMxLURlYy0yMDI1IDIzOjU5OjU5IEdNVDsgRE9NQUlOPS5zdW4uY29tOyBQQVRIPS8ifSwKICAgICB7IkFsbG93IiwKICAgICAgIkhFQUQsIEdFVCwgUFVULCBQT1NULCBERUxFVEUsIFRSQUNFLCBPUFRJT05TLCBNT1ZFLCBJTkRFWCwgTUtESVIsIFJNRElSIn1dLAogICAgW119CgolJSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQolJSBFeGFtcGxlIG9mIHVzaW5nIEFzeW5jaHJvbm91cyByZXF1ZXN0cwoxOD4gaWJyb3dzZTpzZW5kX3JlcSgiaHR0cDovL3d3dy5nb29nbGUuY29tIiwgW10sIGdldCwgW10sIAogICAgICAgICAgICAgICAgICAgICBbe3Byb3h5X3VzZXIsICJYWFhYWCJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9wYXNzd29yZCwgIlhYWFhYIn0sIAogICAgICAgICAgICAgICAgICAgICAge3Byb3h5X2hvc3QsICJwcm94eSJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9wb3J0LCA4MDgwfSwgCiAgICAgICAgICAgICAgICAgICAgICB7c3RyZWFtX3RvLCBzZWxmKCl9XSkuCntpYnJvd3NlX3JlcV9pZCx7MTExNSwzMjcyNTYsMzg5NjA4fX0KMTk+IGZsdXNoKCkuClNoZWxsIGdvdCB7aWJyb3dzZV9hc3luY19oZWFkZXJzLHsxMTE1LDMyNzI1NiwzODk2MDh9LAogICAgICAgICAgICIzMDIiLAogICAgICAgICAgIFt7IkRhdGUiLCJUaHUsIDA1IE1heSAyMDA1IDIxOjA2OjQxIEdNVCJ9LAogICAgICAgICAgICB7IkNvbnRlbnQtTGVuZ3RoIiwiMjE3In0sCiAgICAgICAgICAgIHsiQ29udGVudC1UeXBlIiwidGV4dC9odG1sIn0sCiAgICAgICAgICAgIHsiU2V0LUNvb2tpZSIsCiAgICAgICAgICAgICAiUFJFRj1JRD1iNjAxZjE2YmZhMzJmMDcxOkNSPTE6VE09MTExNTMyNzIwMTpMTT0xMTE1MzI3MjAxOlM9T1g1aFNCNTI1QU1qVVV1NzsgZXhwaXJlcz1TdW4sIDE3LUphbi0yMDM4IDE5OjE0OjA3IEdNVDsgcGF0aD0vOyBkb21haW49Lmdvb2dsZS5jb20ifSwKICAgICAgICAgICAgeyJTZXJ2ZXIiLCJHV1MvMi4xIn0sCiAgICAgICAgICAgIHsiTG9jYXRpb24iLAogICAgICAgICAgICAgImh0dHA6Ly93d3cuZ29vZ2xlLmNvLnVrL2N4ZmVyP2M9UFJFRiUzRDpUTSUzRDExMTUzMjcyMDE6UyUzRERTOXBESjRJSGNBdVpfQVMmcHJldj0vIn0sCiAgICAgICAgICAgIHsiVmlhIiwKICAgICAgICAgICAgICIxLjEgaGF0cHJveHkwMSAoTmV0Q2FjaGUgTmV0QXBwLzUuNi4yKSJ9XX0KU2hlbGwgZ290IHtpYnJvd3NlX2FzeW5jX3Jlc3BvbnNlLHsxMTE1LDMyNzI1NiwzODk2MDh9LAogICAgICAgICAgICI8SFRNTD48SEVBRD48VElUTEU+MzAyIE1vdmVkPC9USVRMRT48L0hFQUQ+PEJPRFk+XG48SDE+MzAyIE1vdmVkPC9IMT5cblRoZSBkb2N1bWVudCBoYXMgbW92ZWRcbjxBIEhSRUY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jby51ay9jeGZlcj9jPVBSRUYlM0Q6VE0lM0QxMTE1MzI3MjAxOlMlM0REUzlwREo0SUhjQXVaX0FTJmFtcDtwcmV2PS9cIj5oZXJlPC9BPi5cclxuPC9CT0RZPjwvSFRNTD5cclxuIn0KU2hlbGwgZ290IHtpYnJvd3NlX2FzeW5jX3Jlc3BvbnNlX2VuZCx7MTExNSwzMjcyNTYsMzg5NjA4fX0Kb2sKCiUlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiUlIEFub3RoZXIgZXhhbXBsZSBvZiB1c2luZyBhc3luYyByZXF1ZXN0cwoyND4gaWJyb3dzZTpzZW5kX3JlcSgiaHR0cDovL3lhd3MuaHliZXIub3JnL3NpbXBsZV9leDIueWF3cyIsIFtdLCBnZXQsIFtdLCAKICAgICAgICAgICAgICAgICAgICAgW3twcm94eV91c2VyLCAiWFhYWFgifSwgCiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfcGFzc3dvcmQsICJYWFhYWCJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9ob3N0LCAicHJveHkifSwgCiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfcG9ydCwgODA4MH0sIAogICAgICAgICAgICAgICAgICAgICAge3N0cmVhbV90bywgc2VsZigpfV0pLgp7aWJyb3dzZV9yZXFfaWQsezExMTUsMzI3NDMwLDUxMjMxNH19CjI1PiBmbHVzaCgpLgpTaGVsbCBnb3Qge2licm93c2VfYXN5bmNfaGVhZGVycyx7MTExNSwzMjc0MzAsNTEyMzE0fSwKICAgICAgICAgICAiMjAwIiwgCiAgICAgICAgICAgW3siRGF0ZSIsIlRodSwgMDUgTWF5IDIwMDUgMjA6NTg6MDggR01UIn0sCiAgICAgICAgICAgIHsiQ29udGVudC1MZW5ndGgiLCI2NCJ9LAogICAgICAgICAgICB7IkNvbnRlbnQtVHlwZSIsInRleHQvaHRtbDtjaGFyc2V0PSJ9LAogICAgICAgICAgICB7IlNlcnZlciIsCiAgICAgICAgICAgICAiWWF3cy8xLjU0IFlldCBBbm90aGVyIFdlYiBTZXJ2ZXIifSwKICAgICAgICAgICAgeyJWaWEiLAogICAgICAgICAgICAgIjEuMSBoYXRwcm94eTAxIChOZXRDYWNoZSBOZXRBcHAvNS42LjIpIn1dfQpTaGVsbCBnb3Qge2licm93c2VfYXN5bmNfcmVzcG9uc2UsezExMTUsMzI3NDMwLDUxMjMxNH0sCiAgICAgICAgICAgIjxodG1sPlxuXG5cbjxoMT4gWWVzc3Nzc3NzIDwvaDE+XG5cbjxoMj4gSGVsbG8gYWdhaW4gPC9oMj5cblxuXG48L2h0bWw+XG4ifQpTaGVsbCBnb3Qge2licm93c2VfYXN5bmNfcmVzcG9uc2VfZW5kLHsxMTE1LDMyNzQzMCw1MTIzMTR9fQoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgRXhhbXBsZSBvZiByZXF1ZXN0IHdoaWNoIGZhaWxzIHdoZW4gdXNpbmcgdGhlIGFzeW5jIG9wdGlvbi4gSGVyZQolJSB0aGUge2licm93c2VfcmVxX2lkLCBSZXFJZH0gaXMgbm90IHJldHVybmVkLiBJbnN0ZWFkIHRoZSBlcnJvciBjb2RlIGlzCiUlIHJldHVybmVkLiAgCjY4PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vd3d3LmVhcmx5cmlzZXIub3JnIiwgW10sIGdldCwgW10sIFt7c3RyZWFtX3RvLCBzZWxmKCl9XSkuCntlcnJvcixjb25uX2ZhaWxlZH0KCiUlIEV4YW1wbGUgb2YgcmVxdWVzdCB1c2luZyBib3RoIFByb3h5LUF1dGhvcml6YXRpb24gYW5kIGF1dGhvcml6YXRpb24gYnkgdGhlIGZpbmFsIHdlYnNlcnZlci4KMTc+IGlicm93c2U6c2VuZF9yZXEoImh0dHA6Ly93d3cuZXJsYW5nLnNlL2xpY19hcmVhL3Byb3RlY3RlZC9wYXRjaGVzL2VybF83NTZfb3RwX2JlYW0uUkVBRE1FIiwgCiAgICAgICAgICAgICAgICAgICAgIFtdLCBnZXQsIFtdLCAKICAgICAgICAgICAgICAgICAgICAgW3twcm94eV91c2VyLCAiWFhYWFgifSwgCiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfcGFzc3dvcmQsICJYWFhYWCJ9LCAKICAgICAgICAgICAgICAgICAgICAgIHtwcm94eV9ob3N0LCAicHJveHkifSwgCiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfcG9ydCwgODA4MH0sIAogICAgICAgICAgICAgICAgICAgICAge2Jhc2ljX2F1dGgsIHsiWFhYWFgiLCAiWFhYWFhYIn19XSkuCntvaywiMjAwIiwKICAgIFt7IkFjY2VwdC1SYW5nZXMiLCJieXRlcyJ9LAogICAgIHsiRGF0ZSIsIlRodSwgMDUgTWF5IDIwMDUgMjE6MDI6MDkgR01UIn0sCiAgICAgeyJDb250ZW50LUxlbmd0aCIsIjIwODgifSwKICAgICB7IkNvbnRlbnQtVHlwZSIsInRleHQvcGxhaW4ifSwKICAgICB7IlNlcnZlciIsIkFwYWNoZS8xLjMuOSAoVW5peCkifSwKICAgICB7Ikxhc3QtTW9kaWZpZWQiLCJUdWUsIDAzIE1heSAyMDA1IDE1OjA4OjE4IEdNVCJ9LAogICAgIHsiRVRhZyIsIlwiMTM4NGM4LTgyOC00Mjc3OTNlMlwiIn0sCiAgICAgeyJWaWEiLCIxLjEgaGF0cHJveHkwMSAoTmV0Q2FjaGUgTmV0QXBwLzUuNi4yKSJ9XSwKICAgICJQYXRjaCBJZDpcdFx0ZXJsXzc1Nl9vdHBfYmVhbVxuTGFiZWw6XHRcdFx0aW5ldHMgcGF0Y2hcbkRhdGU6XHRcdFx0MjAwNS0wNS0wM1xuVHJvdWJsZSBSZXBvcnQgSWQ6XHRPVFAtNTUxMywgT1RQLTU1MTQsIE9UUC01NTE2LCBPVFAtNTUxNywgT1RQLTU1MjEsIE9UUC01NTM3XG5TZXEgbnVtOlx0XHRzZXE5ODA2XG5TeXN0ZW06XHRcdFx0b3RwXG5SZWxlYXNlOlx0XHRSMTBCXG5PcGVyYXRpbmcgU3lzdGVtOlx0YWxsXG5BcmNoaXRlY3R1cmU6XHRcdGFsbFxuRXJsYW5nIG1hY2hpbmU6XHRcdEJFQU1cbkFwcGxpY2F0aW9uOlx0XHRpbmV0cy00LjRcbkZpbGVzOlx0XHRcdGFsbFxuXG5EZXNjcmlwdGlvbjpcblxuICAgIE9UUC01NTEzICBUaGUgc2VydmVyIGRpZCBub3QgaGFuZGxlIEhUVFAtMC45IG1lc3NhZ2VzIHdpdGggYW4gaW1wbGljaXRcblx0ICAgICAgdmVyc2lvbi5cblxuICAgIE9UUC01NTE0ICBBbiBpbnRlcm5hbCBzZXJ2ZXIgdGltZW91dCBraWxsZWQgdGhlIHJlcXVlc3QgaGFuZGxpbmdcblx0ICAgICAgcHJvY2VzcyB3aXRob3V0IHNlbmRpbmcgYSBtZXNzYWdlIGJhY2sgdG8gdGhlIGNsaWVudC4gQXMgdGhpc1xuXHQgICAgICB0aW1lb3V0IG9ubHkgYWZmZWN0cyBhIHNpbmdsZSByZXF1ZXN0IGl0IGhhcyBiZWVuIHNldCB0b1xuXHQgICAgICBpbmZpbml0eSAoaWYgdGhlIG1haW4gc2VydmVyIHByb2Nlc3MgZGllcyB0aGUgcmVxdWVzdFxuXHQgICAgICBoYW5kbGluZyBwcm9jZXNzIHdpbGwgYWxzbyBkaWUgYW5kIHRoZSBjbGllbnQgd2lsbCByZWNlaXZlIGFuXG5cdCAgICAgIGVycm9yKS4gVGhpcyBtaWdodCBtYWtlIGEgY2xpZW50IHRoYXQgZG9lcyBub3QgdXNlIGEgdGltZW91dFxuXHQgICAgICBoYW5nIGZvciBhIGxvbmdlciBwZXJpb2Qgb2YgdGltZSwgYnV0IHRoYXQgaXMgYW4gZXhwZWN0ZWRcblx0ICAgICAgYmVoYXZpb3IhXG5cbiAgICBPVFAtNTUxNiAgVGhhdCBhIHRoaXJkIHBhcnR5IGNsb3NlcyB0aGUgaHR0cCBzZXJ2ZXJzIGFjY2VwdCBzb2NrZXQgaXNcblx0ICAgICAgcmVjb3ZlcmFibGUgZm9yIGluZXRzLCBoZW5jZSBpbnRlcyB3aWxsIG9ubHkgcHJvZHVjZSBhbiBpbmZvXG5cdCAgICAgIHJlcG9ydCBhcyB0aGVyZSB3YXMgbm8gZXJyb3IgaW4gaW5ldHMgYnV0IG1lYXN1cmVzIHdoZXJlXG5cdCAgICAgIHRha2VuIHRvIGF2b2lkIGZhaWx1cmUgZHVlIHRvIGVycm9ycyBlbHNld2hlcmUuXG5cbiAgICBPVFAtNTUxNyAgVGhlIEhUVFAgY2xpZW50IHByb3h5IHNldHRpbmdzIHdoZXJlIGlnbm9yZWQuIEJ1ZyBpbnRyb2R1Y2VkXG5cdCAgICAgIGluIGluZXRzLTQuMy5cblxuICAgIE9UUC01NTIxICBJbmV0cyBvbmx5IHNlbnQgdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciBhdCB0aGUgZmlyc3Rcblx0ICAgICAgYXR0ZW1wdCB0byBnZXQgYSBwYWdlLCBpZiB0aGUgdXNlciBzdXBwbGllZCB0aGUgd3Jvbmdcblx0ICAgICAgdXNlci9wYXNzd29yZCBjb21iaW5hdGlvbiB0aGUgaGVhZGVyIHdhcyBub3Qgc2VudCBhZ2Fpbi4gVGhpc1xuXHQgICAgICBmb3JjZXMgdGhlIHVzZXIgdG8ga2lsbCB0aGUgYnJvd3NlciBlbnRpcmVseSBhZnRlciBhIGZhaWxlZFxuXHQgICAgICBsb2dpbiBhdHRlbXB0LCBiZWZvcmUgdGhlIHVzZXIgbWF5IHRyeSB0byBsb2dpbiBhZ2Fpbi4gSW5ldHNcblx0ICAgICAgbm93IGFsd2F5cyBzZW5kIHRoZSBhdXRoZW50aWNhdGlvbiBoZWFkZXIuXG5cbiAgICBPVFAtNTUzNyAgQSBtYWpvciByZXdyaXRlIG9mIGJpZyBwYXJ0cyBvZiB0aGUgSFRUUCBzZXJ2ZXIgY29kZSB3YXNcblx0ICAgICAgcGVyZm9ybWVkLiBUaGVyZSB3aGVyZSBtYW55IHRoaW5ncyB0aGF0IGRpZCBub3Qgd29ya1xuXHQgICAgICBzYXRpc2ZhY3RvcnkuIENnaSBzY3JpcHQgaGFuZGxpbmcgY2FuIG5ldmVyIGhhdmUgd29ya2VkXG5cdCAgICAgIHByb3Blcmx5IGFuZCB0aGUgY2FzZXMgd2hlbiBpdCBkaWQgc29ydCBvZiB3b3JrLCBhIGJpZ1xuXHQgICAgICB1bm5lY2Vzc2FyeSBkZWxheSB3YXMgZW5mb3JjZWQuIEhlYWRlcnMgd2hlcmUgbm90IGFsd2F5c1xuXHQgICAgICB0cmVhdGVkIGFzIGV4cGVjdGVkIGFuZCBIVFRQIHZlcnNpb24gaGFuZGxpbmcgZGlkIG5vdCB3b3JrLFxuXHQgICAgICBhbGwgcmVzcG9uc2VzIHdoZXJlIHNlbnQgYXMgdmVyc2lvbiBIVFRQLzEuMSBubyBtYXR0ZXIgd2hhdC5cblxuXG4ifQoKJSUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJSUgRXhhbXBsZSBvZiBhIFRSQUNFIHJlcXVlc3QuIFZlcnkgaW50ZXJlc3RpbmchIHlhd3MuaHliZXIub3JnIGRpZG4ndAolJSBzdXBwb3J0IHRoaXMuIE5vciBkaWQgd3d3Lmdvb2dsZS5jb20uIEJ1dCBnb29kIG9sZCBCQkMgc3VwcG9ydHMKJSUgdGhpcy4KMzU+IDM3PiBpYnJvd3NlOnNlbmRfcmVxKCJodHRwOi8vd3d3LmJiYy5jby51ay8iLCBbXSwgdHJhY2UsIFtdLCAKICAgICAgICAgICAgICAgICAgICAgICAgIFt7cHJveHlfdXNlciwgIlhYWFhYIn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3h5X3Bhc3N3b3JkLCAiWFhYWFgifSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJveHlfaG9zdCwgInByb3h5In0sCiAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3h5X3BvcnQsIDgwODB9XSkuICAgICAgICAgCntvaywiMjAwIiwKICAgIFt7IlRyYW5zZmVyLUVuY29kaW5nIiwiY2h1bmtlZCJ9LAogICAgIHsiRGF0ZSIsIlRodSwgMDUgTWF5IDIwMDUgMjE6NDA6MjcgR01UIn0sCiAgICAgeyJDb250ZW50LVR5cGUiLCJtZXNzYWdlL2h0dHAifSwKICAgICB7IlNlcnZlciIsIkFwYWNoZS8yLjAuNTEgKFVuaXgpIn0sCiAgICAgeyJTZXQtQ29va2llIiwKICAgICAgIkJCQy1VSUQ9NzQ1MmU3MmEyOTQyNGM1YjBiMjMyYzcxMzFjN2Q5Mzk1ZDIwOWI3MTcwZTg2MDQwNzJlMGZjYjM2MzA0NjczMDA7IGV4cGlyZXM9TW9uLCAwNC1NYXktMDkgMjE6NDA6MjcgR01UOyBwYXRoPS87IGRvbWFpbj1iYmMuY28udWs7In0sCiAgICAgeyJTZXQtQ29va2llIiwKICAgICAgIkJCQy1VSUQ9NzQ1MmU3MmEyOTQyNGM1YjBiMjMyYzcxMzFjN2Q5Mzk1ZDIwOWI3MTcwZTg2MDQwNzJlMGZjYjM2MzA0NjczMDA7IGV4cGlyZXM9TW9uLCAwNC1NYXktMDkgMjE6NDA6MjcgR01UOyBwYXRoPS87IGRvbWFpbj1iYmMuY28udWs7In0sCiAgICAgeyJWaWEiLCIxLjEgaGF0cHJveHkwMSAoTmV0Q2FjaGUgTmV0QXBwLzUuNi4yKSJ9XSwKICAgICJUUkFDRSAvIEhUVFAvMS4xXHJcbkhvc3Q6IHd3dy5iYmMuY28udWtcclxuQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxyXG5YLUZvcndhcmRlZC1Gb3I6IDE3Mi4yNC4yOC4yOVxyXG5WaWE6IDEuMSBoYXRwcm94eTAxIChOZXRDYWNoZSBOZXRBcHAvNS42LjIpXHJcbkNvb2tpZTogQkJDLVVJRD03NDUyZTcyYTI5NDI0YzViMGIyMzJjNzEzMWM3ZDkzOTVkMjA5YjcxNzBlODYwNDA3MmUwZmNiMzYzMDQ2NzMwMFxyXG5cclxuIn0K