PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9kYmQgLSBBcGFjaGUgSFRUUCBTZXJ2ZXI8L3RpdGxlPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPgo8bGluayBocmVmPSIuLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5Pgo8ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuMzwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5naWYiIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjM8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfZGJkPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX2RiZC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+PC9wPgo8L2Rpdj4KPHRhYmxlIGNsYXNzPSJtb2R1bGUiPjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPk1hbmFnZXMgU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb25zPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZaBJZGVudGlmaWVyOjwvYT48L3RoPjx0ZD5kYmRfbW9kdWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU291cmNlRmlsZSI+U291cmNloEZpbGU6PC9hPjwvdGg+PHRkPm1vZF9kYmQuYzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPlZlcnNpb24gMi4xIGFuZCBsYXRlcjwvdGQ+PC90cj48L3RhYmxlPgo8aDM+U3VtbWFyeTwvaDM+CgogICAgPHA+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kYmQuaHRtbCI+bW9kX2RiZDwvYT48L2NvZGU+IG1hbmFnZXMgU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb25zIHVzaW5nCiAgICA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuLi9nbG9zc2FyeS5odG1sI2FwciIgdGl0bGU9InNlZSBnbG9zc2FyeSI+QVBSPC9hPi4gIEl0IHByb3ZpZGVzIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG9uIHJlcXVlc3QKICAgIHRvIG1vZHVsZXMgcmVxdWlyaW5nIFNRTCBkYXRhYmFzZSBmdW5jdGlvbnMsIGFuZCB0YWtlcyBjYXJlIG9mCiAgICBtYW5hZ2luZyBkYXRhYmFzZXMgd2l0aCBvcHRpbWFsIGVmZmljaWVuY3kgYW5kIHNjYWxhYmlsaXR5CiAgICBmb3IgYm90aCB0aHJlYWRlZCBhbmQgbm9uLXRocmVhZGVkIE1QTXMuICBGb3IgZGV0YWlscywgc2VlIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL2Fwci5hcGFjaGUub3JnLyI+QVBSPC9hPiB3ZWJzaXRlIGFuZCB0aGlzIG92ZXJ2aWV3IG9mIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35uaXEvZGJkLmh0bWwiPkFwYWNoZSBEQkQgRnJhbWV3b3JrPC9hPgogICAgYnkgaXRzIG9yaWdpbmFsIGRldmVsb3Blci4KPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48aDMgY2xhc3M9ImRpcmVjdGl2ZXMiPkRpcmVjdGl2ZXM8L2gzPgo8dWwgaWQ9InRvYyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RiZGV4cHRpbWUiPkRCREV4cHRpbWU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZGJka2VlcCI+REJES2VlcDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkYmRtYXgiPkRCRE1heDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkYmRtaW4iPkRCRE1pbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkYmRwYXJhbXMiPkRCRFBhcmFtczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkYmRwZXJzaXN0Ij5EQkRQZXJzaXN0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RiZHByZXBhcmVzcWwiPkRCRFByZXBhcmVTUUw8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZGJkcml2ZXIiPkRCRHJpdmVyPC9hPjwvbGk+CjwvdWw+CjxoMz5Ub3BpY3M8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Bvb2xpbmciPkNvbm5lY3Rpb24gUG9vbGluZzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNBUEkiPkFwYWNoZSBEQkQgQVBJPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3ByZXBhcmVkIj5TUUwgUHJlcGFyZWQgU3RhdGVtZW50czwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZWN1cml0eSI+U0VDVVJJVFkgV0FSTklORzwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+Cjx1bCBjbGFzcz0ic2VlYWxzbyI+CjxsaT48YSBocmVmPSIuLi9taXNjL3Bhc3N3b3JkX2VuY3J5cHRpb25zLmh0bWwiPlBhc3N3b3JkIEZvcm1hdHM8L2E+PC9saT4KPC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icG9vbGluZyIgaWQ9InBvb2xpbmciPkNvbm5lY3Rpb24gUG9vbGluZzwvYT48L2gyPgogICAgPHA+VGhpcyBtb2R1bGUgbWFuYWdlcyBkYXRhYmFzZSBjb25uZWN0aW9ucywgaW4gYSBtYW5uZXIKICAgIG9wdGltaXNlZCBmb3IgdGhlIHBsYXRmb3JtLiAgT24gbm9uLXRocmVhZGVkIHBsYXRmb3JtcywKICAgIGl0IHByb3ZpZGVzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIGluIHRoZSBtYW5uZXIgb2YKICAgIGNsYXNzaWMgTEFNUCAoTGludXgsIEFwYWNoZSwgTXlzcWwsIFBlcmwvUEhQL1B5dGhvbikuCiAgICBPbiB0aHJlYWRlZCBwbGF0Zm9ybSwgaXQgcHJvdmlkZXMgYW4gYWx0b2dldGhlciBtb3JlCiAgICBzY2FsYWJsZSBhbmQgZWZmaWNpZW50IDxlbT5jb25uZWN0aW9uIHBvb2w8L2VtPiwgYXMKICAgIGRlc2NyaWJlZCBpbiA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZXR1dG9yLm9yZy9kZXYvcmVzbGlzdCI+dGhpcwogICAgYXJ0aWNsZSBhdCBBcGFjaGVUdXRvcjwvYT4uICBOb3RlIHRoYXQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kYmQuaHRtbCI+bW9kX2RiZDwvYT48L2NvZGU+CiAgICBzdXBlcnNlZGVzIHRoZSBtb2R1bGVzIHByZXNlbnRlZCBpbiB0aGF0IGFydGljbGUuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJBUEkiIGlkPSJBUEkiPkFwYWNoZSBEQkQgQVBJPC9hPjwvaDI+CiAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2RiZC5odG1sIj5tb2RfZGJkPC9hPjwvY29kZT4gZXhwb3J0cyBmaXZlIGZ1bmN0aW9ucyBmb3Igb3RoZXIgbW9kdWxlcwogICAgdG8gdXNlLiBUaGUgQVBJIGlzIGFzIGZvbGxvd3M6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+PGNvZGU+dHlwZWRlZiBzdHJ1Y3QgewogICAgYXByX2RiZF90ICpoYW5kbGU7CiAgICBhcHJfZGJkX2RyaXZlcl90ICpkcml2ZXI7CiAgICBhcHJfaGFzaF90ICpwcmVwYXJlZDsKfSBhcF9kYmRfdDsKCi8qIEV4cG9ydCBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBkYXRhYmFzZSAqLwoKLyogYWNxdWlyZSBhIGNvbm5lY3Rpb24gdGhhdCBNVVNUIGJlIGV4cGxpY2l0bHkgY2xvc2VkLgogKiBSZXR1cm5zIE5VTEwgb24gZXJyb3IKICovCkFQX0RFQ0xBUkUoYXBfZGJkX3QqKSBhcF9kYmRfb3BlbihhcHJfcG9vbF90Kiwgc2VydmVyX3JlYyopOwoKLyogcmVsZWFzZSBhIGNvbm5lY3Rpb24gYWNxdWlyZWQgd2l0aCBhcF9kYmRfb3BlbiAqLwpBUF9ERUNMQVJFKHZvaWQpIGFwX2RiZF9jbG9zZShzZXJ2ZXJfcmVjKiwgYXBfZGJkX3QqKTsKCi8qIGFjcXVpcmUgYSBjb25uZWN0aW9uIHRoYXQgd2lsbCBoYXZlIHRoZSBsaWZldGltZSBvZiBhIHJlcXVlc3QKICogYW5kIE1VU1QgTk9UIGJlIGV4cGxpY2l0bHkgY2xvc2VkLiAgUmV0dXJuIE5VTEwgb24gZXJyb3IuCiAqIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBmdW5jdGlvbiBmb3IgbW9zdCBhcHBsaWNhdGlvbnMuCiAqLwpBUF9ERUNMQVJFKGFwX2RiZF90KikgYXBfZGJkX2FjcXVpcmUocmVxdWVzdF9yZWMqKTsKCi8qIGFjcXVpcmUgYSBjb25uZWN0aW9uIHRoYXQgd2lsbCBoYXZlIHRoZSBsaWZldGltZSBvZiBhIGNvbm5lY3Rpb24KICogYW5kIE1VU1QgTk9UIGJlIGV4cGxpY2l0bHkgY2xvc2VkLiAgUmV0dXJuIE5VTEwgb24gZXJyb3IuCiAqLwpBUF9ERUNMQVJFKGFwX2RiZF90KikgYXBfZGJkX2NhY3F1aXJlKHJlcXVlc3RfcmVjKik7CgovKiBQcmVwYXJlIGEgc3RhdGVtZW50IGZvciB1c2UgYnkgYSBjbGllbnQgbW9kdWxlICovCkFQX0RFQ0xBUkUodm9pZCkgYXBfZGJkX3ByZXBhcmUoc2VydmVyX3JlYyosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CgovKiBBbHNvIGV4cG9ydCB0aGVtIGFzIG9wdGlvbmFsIGZ1bmN0aW9ucyBmb3IgbW9kdWxlcyB0aGF0IHByZWZlciBpdCAqLwpBUFJfREVDTEFSRV9PUFRJT05BTF9GTihhcF9kYmRfdCosIGFwX2RiZF9vcGVuLCAoYXByX3Bvb2xfdCosIHNlcnZlcl9yZWMqKSk7CkFQUl9ERUNMQVJFX09QVElPTkFMX0ZOKHZvaWQsIGFwX2RiZF9jbG9zZSwgKHNlcnZlcl9yZWMqLCBhcF9kYmRfdCopKTsKQVBSX0RFQ0xBUkVfT1BUSU9OQUxfRk4oYXBfZGJkX3QqLCBhcF9kYmRfYWNxdWlyZSwgKHJlcXVlc3RfcmVjKikpOwpBUFJfREVDTEFSRV9PUFRJT05BTF9GTihhcF9kYmRfdCosIGFwX2RiZF9jYWNxdWlyZSwgKGNvbm5fcmVjKikpOwpBUFJfREVDTEFSRV9PUFRJT05BTF9GTih2b2lkLCBhcF9kYmRfcHJlcGFyZSwgKHNlcnZlcl9yZWMqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopKTsKPC9jb2RlPjwvcHJlPjwvZGl2Pgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJwcmVwYXJlZCIgaWQ9InByZXBhcmVkIj5TUUwgUHJlcGFyZWQgU3RhdGVtZW50czwvYT48L2gyPgogICAgPHA+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kYmQuaHRtbCI+bW9kX2RiZDwvYT48L2NvZGU+IHN1cHBvcnRzIFNRTCBwcmVwYXJlZCBzdGF0ZW1lbnRzIG9uIGJlaGFsZgogICAgb2YgbW9kdWxlcyB0aGF0IG1heSB3aXNoIHRvIHVzZSB0aGVtLiAgRWFjaCBwcmVwYXJlZCBzdGF0ZW1lbnQKICAgIG11c3QgYmUgYXNzaWduZWQgYSBuYW1lIChsYWJlbCksIGFuZCB0aGV5IGFyZSBzdG9yZWQgaW4gYSBoYXNoOgogICAgdGhlIDxjb2RlPnByZXBhcmVkPC9jb2RlPiBmaWVsZCBvZiBhbiA8Y29kZT5hcF9kYmRfdDwvY29kZT4uCiAgICBIYXNoIGVudHJpZXMgYXJlIG9mIHR5cGUgPGNvZGU+YXByX2RiZF9wcmVwYXJlZF90PC9jb2RlPgogICAgYW5kIGNhbiBiZSB1c2VkIGluIGFueSBvZiB0aGUgYXByX2RiZCBwcmVwYXJlZCBzdGF0ZW1lbnQKICAgIFNRTCBxdWVyeSBvciBzZWxlY3QgY29tbWFuZHMuPC9wPgoKICAgIDxwPkl0IGlzIHVwIHRvIGRiZCB1c2VyIG1vZHVsZXMgdG8gdXNlIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnRzCiAgICBhbmQgZG9jdW1lbnQgd2hhdCBzdGF0ZW1lbnRzIGNhbiBiZSBzcGVjaWZpZWQgaW4gaHR0cGQuY29uZiwKICAgIG9yIHRvIHByb3ZpZGUgdGhlaXIgb3duIGRpcmVjdGl2ZXMgYW5kIHVzZSA8Y29kZT5hcF9kYmRfcHJlcGFyZTwvY29kZT4uPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzZWN1cml0eSIgaWQ9InNlY3VyaXR5Ij5TRUNVUklUWSBXQVJOSU5HPC9hPjwvaDI+CgogICAgPHA+QW55IHdlYi9kYXRhYmFzZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBzZWN1cmUgaXRzZWxmIGFnYWluc3QgU1FMCiAgICBpbmplY3Rpb24gYXR0YWNrcy4gIEluIG1vc3QgY2FzZXMsIEFwYWNoZSBEQkQgaXMgc2FmZSwgYmVjYXVzZQogICAgYXBwbGljYXRpb25zIHVzZSBwcmVwYXJlZCBzdGF0ZW1lbnRzLCBhbmQgdW50cnVzdGVkIGlucHV0cyBhcmUKICAgIG9ubHkgZXZlciB1c2VkIGFzIGRhdGEuICBPZiBjb3Vyc2UsIGlmIHlvdSB1c2UgaXQgdmlhIHRoaXJkLXBhcnR5CiAgICBtb2R1bGVzLCB5b3Ugc2hvdWxkIGFzY2VydGFpbiB3aGF0IHByZWNhdXRpb25zIHRoZXkgbWF5IHJlcXVpcmUuPC9wPgogICAgPHA+SG93ZXZlciwgdGhlIDx2YXI+RnJlZVREUzwvdmFyPiBkcml2ZXIgaXMgaW5oZXJlbnRseQogICAgPHN0cm9uZz51bnNhZmU8L3N0cm9uZz4uICBUaGUgdW5kZXJseWluZyBsaWJyYXJ5IGRvZXNuJ3Qgc3VwcG9ydAogICAgcHJlcGFyZWQgc3RhdGVtZW50cywgc28gdGhlIGRyaXZlciBlbXVsYXRlcyB0aGVtLCBhbmQgdGhlCiAgICB1bnRydXN0ZWQgaW5wdXQgaXMgbWVyZ2VkIGludG8gdGhlIFNRTCBzdGF0ZW1lbnQuPC9wPgogICAgPHA+SXQgY2FuIGJlIG1hZGUgc2FmZSBieSA8ZW0+dW50YWludGluZzwvZW0+IGFsbCBpbnB1dHM6CiAgICBhIHByb2Nlc3MgaW5zcGlyZWQgYnkgUGVybCdzIHRhaW50IGNoZWNraW5nLiAgRWFjaCBpbnB1dAogICAgaXMgbWF0Y2hlZCBhZ2FpbnN0IGEgcmVnZXhwLCBhbmQgb25seSB0aGUgbWF0Y2ggaXMgdXNlZCwKICAgIGFjY29yZGluZyB0byB0aGUgUGVybCBpZGlvbTo8L3A+CiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cHJlPjxjb2RlPiAgJHVudHJ1c3RlZCA9fiAvKFthLXpdKykvOwogICR0cnVzdGVkID0gJDE7PC9jb2RlPjwvcHJlPjwvZGl2PgogICAgPHA+VG8gdXNlIHRoaXMsIHRoZSB1bnRhaW50aW5nIHJlZ2V4cHMgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUKICAgIHByZXBhcmVkIHN0YXRlbWVudHMgY29uZmlndXJlZC4gIFRoZSByZWdleHAgZm9sbG93cyBpbW1lZGlhdGVseQogICAgYWZ0ZXIgdGhlICUgaW4gdGhlIHByZXBhcmVkIHN0YXRlbWVudCwgYW5kIGlzIGVuY2xvc2VkIGluCiAgICBjdXJseSBicmFja2V0cyB7fS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIGFwcGxpY2F0aW9uIGV4cGVjdHMKICAgIGFscGhhbnVtZXJpYyBpbnB1dCwgeW91IGNhbiB1c2U6PC9wPgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICA8Y29kZT4iU0VMRUNUIGZvbyBGUk9NIGJhciBXSEVSRSBpbnB1dCA9ICVzIjwvY29kZT4KICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICA8cD53aXRoIG90aGVyIGRyaXZlcnMsIGFuZCBzdWZmZXIgbm90aGluZyB3b3JzZSB0aGFuIGEgZmFpbGVkIHF1ZXJ5LgogICAgQnV0IHdpdGggRnJlZVREUyB5b3UnZCBuZWVkOjwvcD4KICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgPGNvZGU+IlNFTEVDVCBmb28gRlJPTSBiYXIgV0hFUkUgaW5wdXQgPSAleyhbQS1aYS16MC05XSspfXMiPC9jb2RlPgogICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgIDxwPk5vdyBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0Y2ggdGhlIHJlZ2V4cCdzICQxIG1hdGNoIGlzCiAgICBkaXNjYXJkZWQsIHNvIHRoZSBzdGF0ZW1lbnQgaXMgc2FmZS48L3A+CiAgICA8cD5BbiBhbHRlcm5hdGl2ZSB0byB0aGlzIG1heSBiZSB0aGUgdGhpcmQtcGFydHkgT0RCQyBkcml2ZXIsCiAgICB3aGljaCBvZmZlcnMgdGhlIHNlY3VyaXR5IG9mIGdlbnVpbmUgcHJlcGFyZWQgc3RhdGVtZW50cy48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJEQkRFeHB0aW1lIiBpZD0iREJERXhwdGltZSI+REJERXhwdGltZTwvYT4gPGEgbmFtZT0iZGJkZXhwdGltZSIgaWQ9ImRiZGV4cHRpbWUiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPktlZXBhbGl2ZSB0aW1lIGZvciBpZGxlIGNvbm5lY3Rpb25zPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkRCREV4cHRpbWUgPHZhcj50aW1lLWluLXNlY29uZHM8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+REJERXhwdGltZSAzMDA8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfZGJkPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+U2V0IHRoZSB0aW1lIHRvIGtlZXAgaWRsZSBjb25uZWN0aW9ucyBhbGl2ZSB3aGVuIHRoZSBudW1iZXIKICAgIG9mIGNvbm5lY3Rpb25zIHNwZWNpZmllZCBpbiBEQkRLZWVwIGhhcyBiZWVuIGV4Y2VlZGVkICh0aHJlYWRlZAogICAgcGxhdGZvcm1zIG9ubHkpLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJEQkRLZWVwIiBpZD0iREJES2VlcCI+REJES2VlcDwvYT4gPGEgbmFtZT0iZGJka2VlcCIgaWQ9ImRiZGtlZXAiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPk1heGltdW0gc3VzdGFpbmVkIG51bWJlciBvZiBjb25uZWN0aW9uczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5EQkRLZWVwIDx2YXI+bnVtYmVyPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkRCREtlZXAgMjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9kYmQ8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5TZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHBlciBwcm9jZXNzIHRvIGJlCiAgICBzdXN0YWluZWQsIG90aGVyIHRoYW4gZm9yIGhhbmRsaW5nIHBlYWsgZGVtYW5kICh0aHJlYWRlZAogICAgcGxhdGZvcm1zIG9ubHkpLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJEQkRNYXgiIGlkPSJEQkRNYXgiPkRCRE1heDwvYT4gPGEgbmFtZT0iZGJkbWF4IiBpZD0iZGJkbWF4Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5NYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9uczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5EQkRNYXggPHZhcj5udW1iZXI8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+REJETWF4IDEwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2RiZDwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlNldCB0aGUgaGFyZCBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBwZXIgcHJvY2VzcwogICAgKHRocmVhZGVkIHBsYXRmb3JtcyBvbmx5KS48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iREJETWluIiBpZD0iREJETWluIj5EQkRNaW48L2E+IDxhIG5hbWU9ImRiZG1pbiIgaWQ9ImRiZG1pbiI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+REJETWluIDx2YXI+bnVtYmVyPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkRCRE1pbiAxPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2RiZDwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlNldCB0aGUgbWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgcGVyIHByb2Nlc3MgKHRocmVhZGVkCiAgICBwbGF0Zm9ybXMgb25seSkuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkRCRFBhcmFtcyIgaWQ9IkRCRFBhcmFtcyI+REJEUGFyYW1zPC9hPiA8YSBuYW1lPSJkYmRwYXJhbXMiIGlkPSJkYmRwYXJhbXMiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlBhcmFtZXRlcnMgZm9yIGRhdGFiYXNlIGNvbm5lY3Rpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+REJEUGFyYW1zCjx2YXI+cGFyYW0xPC92YXI+PTx2YXI+dmFsdWUxPC92YXI+Wyw8dmFyPnBhcmFtMjwvdmFyPj08dmFyPnZhbHVlMjwvdmFyPl08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfZGJkPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+QXMgcmVxdWlyZWQgYnkgdGhlIHVuZGVybHlpbmcgZHJpdmVyLiAgVHlwaWNhbGx5IHRoaXMgd2lsbCBiZQogICAgdXNlZCB0byBwYXNzIHdoYXRldmVyIGNhbm5vdCBiZSBkZWZhdWx0ZWQgYW1vbmdzdCB1c2VybmFtZSwKICAgIHBhc3N3b3JkLCBkYXRhYmFzZSBuYW1lLCBob3N0bmFtZSBhbmQgcG9ydCBudW1iZXIgZm9yIGNvbm5lY3Rpb24uPC9wPgogICAgPHA+Q29ubmVjdGlvbiBzdHJpbmcgcGFyYW1ldGVycyBmb3IgY3VycmVudCBkcml2ZXJzIGluY2x1ZGU6PC9wPgogICAgPGRsPgogICAgPGR0PkZyZWVURFMgKGZvciBNU1NRTCBhbmQgU3lCYXNlKTwvZHQ+CiAgICA8ZGQ+dXNlcm5hbWUsIHBhc3N3b3JkLCBhcHBuYW1lLCBkYm5hbWUsIGhvc3QsIGNoYXJzZXQsIGxhbmcsIHNlcnZlcjwvZGQ+CiAgICA8ZHQ+TXlTUUw8L2R0PgogICAgPGRkPmhvc3QsIHBvcnQsIHVzZXIsIHBhc3MsIGRibmFtZSwgc29jaywgZmxhZ3MsIGZsZHN6LCBncm91cCwgcmVjb25uZWN0PC9kZD4gCiAgICA8ZHQ+T3JhY2xlPC9kdD4KICAgIDxkZD51c2VyLCBwYXNzLCBkYm5hbWUsIHNlcnZlcjwvZGQ+IAogICAgPGR0PlBvc3RncmVTUUw8L2R0PgogICAgPGRkPlRoZSBjb25uZWN0aW9uIHN0cmluZyBpcyBwYXNzZWQgc3RyYWlnaHQgdGhyb3VnaCB0byA8Y29kZT5QUWNvbm5lY3RkYjwvY29kZT48L2RkPgogICAgPGR0PlNRTGl0ZTI8L2R0PgogICAgPGRkPlRoZSBjb25uZWN0aW9uIHN0cmluZyBpcyBzcGxpdCBvbiBhIGNvbG9uLCBhbmQgPGNvZGU+cGFydDE6cGFydDI8L2NvZGU+IGlzIHVzZWQgYXMgPGNvZGU+c3FsaXRlX29wZW4ocGFydDEsIGF0b2kocGFydDIpLCBOVUxMKTwvY29kZT48L2RkPgogICAgPGR0PlNRTGl0ZTM8L2R0PgogICAgPGRkPlRoZSBjb25uZWN0aW9uIHN0cmluZyBpcyBwYXNzZWQgc3RyYWlnaHQgdGhyb3VnaCB0byA8Y29kZT5zcWxpdGUzX29wZW48L2NvZGU+PC9kZD4KICAgIDxkdD5PREJDPC9kdD4KICAgIDxkZD5kYXRhc291cmNlLCB1c2VyLCBwYXNzd29yZCwgY29ubmVjdCwgY3RpbWVvdXQsIHN0aW1lb3V0LCBhY2Nlc3MsIHR4bW9kZSwgYnVmc2l6ZTwvZGQ+CiAgICA8L2RsPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkRCRFBlcnNpc3QiIGlkPSJEQkRQZXJzaXN0Ij5EQkRQZXJzaXN0PC9hPiA8YSBuYW1lPSJkYmRwZXJzaXN0IiBpZD0iZGJkcGVyc2lzdCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+V2hldGhlciB0byB1c2UgcGVyc2lzdGVudCBjb25uZWN0aW9uczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5EQkRQZXJzaXN0IE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9kYmQ8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5JZiBzZXQgdG8gT2ZmLCBwZXJzaXN0ZW50IGFuZCBwb29sZWQgY29ubmVjdGlvbnMgYXJlIGRpc2FibGVkLgogICAgQSBuZXcgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBvcGVuZWQgd2hlbiByZXF1ZXN0ZWQgYnkgYSBjbGllbnQsCiAgICBhbmQgY2xvc2VkIGltbWVkaWF0ZWx5IG9uIHJlbGVhc2UuICBUaGlzIG9wdGlvbiBpcyBmb3IgZGVidWdnaW5nCiAgICBhbmQgbG93LXVzYWdlIHNlcnZlcnMuPC9wPgoKICAgIDxwPlRoZSBkZWZhdWx0IGlzIHRvIGVuYWJsZSBhIHBvb2wgb2YgcGVyc2lzdGVudCBjb25uZWN0aW9ucwogICAgKG9yIGEgc2luZ2xlIExBTVAtc3R5bGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGluIHRoZSBjYXNlIG9mIGEKICAgIG5vbi10aHJlYWRlZCBzZXJ2ZXIpLCBhbmQgc2hvdWxkIGFsbW9zdCBhbHdheXMgYmUgdXNlZCBpbiBvcGVyYXRpb24uPC9wPgoKICAgIDxwPlByaW9yIHRvIHZlcnNpb24gMi4yLjIsIHRoaXMgZGlyZWN0aXZlIGFjY2VwdGVkIG9ubHkgdGhlIHZhbHVlcwogICAgPGNvZGU+MDwvY29kZT4gYW5kIDxjb2RlPjE8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+T2ZmPC9jb2RlPiBhbmQKICAgIDxjb2RlPk9uPC9jb2RlPiwgcmVzcGVjdGl2ZWx5LjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJEQkRQcmVwYXJlU1FMIiBpZD0iREJEUHJlcGFyZVNRTCI+REJEUHJlcGFyZVNRTDwvYT4gPGEgbmFtZT0iZGJkcHJlcGFyZXNxbCIgaWQ9ImRiZHByZXBhcmVzcWwiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkRlZmluZSBhbiBTUUwgcHJlcGFyZWQgc3RhdGVtZW50PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkRCRFByZXBhcmVTUUwgPHZhcj4iU1FMIHN0YXRlbWVudCI8L3Zhcj4gPHZhcj5sYWJlbDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9kYmQ8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5Gb3IgbW9kdWxlcyBzdWNoIGFzIGF1dGhlbnRpY2F0aW9uIHRoYXQgcmVwZWF0ZWRseSB1c2UgYQogICAgc2luZ2xlIFNRTCBzdGF0ZW1lbnQsIG9wdGltdW0gcGVyZm9ybWFuY2UgaXMgYWNoaWV2ZWQgYnkgcHJlcGFyaW5nCiAgICB0aGUgc3RhdGVtZW50IGF0IHN0YXJ0dXAgcmF0aGVyIHRoYW4gZXZlcnkgdGltZSBpdCBpcyB1c2VkLgogICAgVGhpcyBkaXJlY3RpdmUgcHJlcGFyZXMgYW4gU1FMIHN0YXRlbWVudCBhbmQgYXNzaWducyBpdCBhIGxhYmVsLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJEQkRyaXZlciIgaWQ9IkRCRHJpdmVyIj5EQkRyaXZlcjwvYT4gPGEgbmFtZT0iZGJkcml2ZXIiIGlkPSJkYmRyaXZlciI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U3BlY2lmeSBhbiBTUUwgZHJpdmVyPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkRCRHJpdmVyIDx2YXI+bmFtZTwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9kYmQ8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5TZWxlY3RzIGFuIGFwcl9kYmQgZHJpdmVyIGJ5IG5hbWUuICBUaGUgZHJpdmVyIG11c3QgYmUgaW5zdGFsbGVkCiAgICBvbiB5b3VyIHN5c3RlbSAob24gbW9zdCBzeXN0ZW1zLCBpdCB3aWxsIGJlIGEgc2hhcmVkIG9iamVjdCBvciBkbGwpLgogICAgRm9yIGV4YW1wbGUsIDxjb2RlPkRCRHJpdmVyIG15c3FsPC9jb2RlPiB3aWxsIHNlbGVjdCB0aGUgTXlTUUwKICAgIGRyaXZlciBpbiBhcHJfZGJkX215c3FsLnNvLjwvcD4KCjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX2RiZC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxMSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+CjwvYm9keT48L2h0bWw+