CSoqKiBUaGlzIGZpbGUgaXMgb2Jzb2xldGUuIENoYW5nZXMgYXJlIGxpc3RlZCBpbiB0aGUgbWFpbgoJKioqIENoYW5nZUxvZyBub3cuIFBsZWFzZSBkbyBub3QgZWRpdC4KClN1biBKdWwgIDUgMjA6MTA6NTMgMTk5OCAgTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogICAgICAgKiBNb3ZlZCAiQWx3YXlzIG9uIHRvcCIgbWVudSBpbnRvIHN5c3RlbSBtZW51IChhcyBpbiBXaW5kb3dzKQogICAgICAgICBUaGlzIHJlcXVpcmVkIG1pbm9yIGNoYW5nZXMgaW4gCiAgICAgICAgIFttYWluLmhdIFtjbG9jay5yY10gW2xhbmd1YWdlLmNdIFs/Py5yY10KCkZyaSBKdW4gMTIgMjI6NDc6NTYgMTk5OCAgTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogICAgICAgKiBGaXhlZCByZXNvdXJjZSBidWcgaW4gVXBkYXRlV2luZG93Q2FwdGlvbigpIHRoYXQgY2F1c2VkIHdyb25nIChvbGQpCiAgICAgICAgIGxvY2FsZSBmb3IgdGhlIGRpc3BsYXllZCBkYXRlCiAgICAgICAqIFRoZSBkaWdpdGFsIGNsb2NrIG5vdyBzaG93cyB1cCAoV0lORS1OTFMtVU5LTk9XTiBtZWFucyB0aGF0IHRoZXJlCiAgICAgICAgIGlzIG5vIGxvY2FsZSBydWxlIGZvciB0aW1lIHN0cmluZyBmb3JtYXQgaW4gL29sZS9vbGUybmxzLmMpCgpUaHUgTWF5IDI4IDIwOjQyOjEzIDE5OTggIE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KICAgICAgICogW2xhbmd1YWdlLmNdCiAgICAgICAgIFVwZGF0ZVdpbmRvd0NhcHRpb24oKSwgbG9jYWxlIGFuZCBkYXRlCiAgICAgICAgIFVwZGF0ZU1lbnVDaGVja21hcmtzKCkKICAgICAgICAgR2VuZXJhbCBjb2RlIGNsZWFudXAgKHJlbW92ZWQgb2Jzb2xldGUgcHJpbnRmJ3MpCiAgICAgICAgIApUaHUgTWF5IDI4IDIwOjEwOjM2IDE5OTggIE1pa29sYWogWmFsZXdza2kgPG1pa29sYWp6QGlkcy5lZHUucGw+CiAgICAgICAqIFttYWluLmNdIFt3aW5jbG9jay5oXQogICAgICAgICBGaXhlZCBkZXN0cm95ZWQgYmFja2dyb3VuZAoKTW9uIE1heSAyNSAxNDozMDozMiAxOTk4ICBIZW5yaWsgT2xzZW4gPGhlbnJpa0BpYWVzdGUuZGs+CiAgICAgICAqIFtEYS5yY10KICAgICAgICAgQWRkZWQgRGFuaXNoIGxhbmd1YWdlIHN1cHBvcnQuCgpXZWQgTWFyIDExIDIzOjEwOjM3IDE5OTggIEthcmwgQmFja3N0cvZtIDxrYXJsX2JAZ2VvY2l0aWVzLmNvbT4KICAgICAgICogW21haW4uY10KICAgICAgICAgU3RhcnRlZCB3aXRoIHRoZSBkaWdpdGFsIGNsb2NrLgoKVHVlIEZlYiAyNCAyMzoyNjo0MCAxOTk4ICBLYXJsIEJhY2tzdHL2bSA8a2FybF9iQGdlb2NpdGllcy5jb20+CiAgICAgICAqIFtsYW5ndWFnZS5jXSBbbGFuZ3VhZ2UuaF0gTkVXCiAgICAgICAgIE1vdmVkIGxhbmd1YWdlIHN0dWZmIGhlcmUuCiAgICAgICAqIFttYWluLmNdIFt3aW5jbG9jay5jXSBbY2xvY2sucmNdCiAgICAgICAgIE1hZGUgdGhlIGNsb2NrIGFwcGVhciBpbiB0aGUgY2VudGVyLgogICAgICAgICBGaXhlZCBwcm9ibGVtcyB3aXRoIG1lbnVlcy4KCk1vbiBGZWIgMjMgMTk6NTk6MjcgMTk5OCAgTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogICAgICAgKiBbQ2hhbmdlTG9nXSBbRGUucmNdIFtFbi5yY10gW1N3LnJjXSBbY2xvY2sucmNdCiAgICAgICAgIFtsaWNlbnNlLmNdIFtsaWNlbnNlLmhdIFtMaWNlbnNlX0VuLmNdCiAgICAgICAgIFtSRUFETUVdIFtUT0RPXQogICAgICAgICBbbWFpbi5jXSBbbWFpbi5oXSBbd2luY2xvY2suY10gW3dpbmNsb2NrLmhdCgogICAgICAgICBPcmlnaW5hbHMgYnkgTWFyY2VsIEJhdXIK